home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / DTAPE104.LZH / DTAPE104 / MODULE.PRG / EXAMPLE / HALL.ASM next >
Assembly Source File  |  1993-07-05  |  2KB  |  66 lines

  1. ; Echo (mit mehreren Reflektoren)
  2. ;
  3. ; Uebergabeparameter:
  4. ; in Klammern:  X/Y fuer X/Y Datenspeicherbereich
  5. ;               6/8 fuer Bitbreite der Speicheradresse
  6. ;
  7. ; QUELLE: Eingangswert                     (X-6)
  8. ; ZIEL:   Ausgangswert                     (X-6)
  9. ;
  10. ; ESIZE:  Groesse Ringbuffer - 1           max. 16 Bit gro₧
  11. ; EZAHL:  Zahl der Reflektoren             max. 12 Bit gro₧
  12. ; DELTAB: Reflektortabelle                 (Y-8)
  13. ; EPTR:   Zeiger auf Ringpuffer Eingang    (Y-6)
  14. ; FBACK:  Feedbackpegel                    (Y-6)
  15. ;
  16. ; Reflektortabelle (24 Bit DSP-Wörter):
  17. ;     Zeit  (Ringpuffergrö₧e - Verzögerung)
  18. ;     Pegel (0 bis 2^23-1, Maximum: Verstärkungsfaktor 1)
  19. ;     ...
  20. ;     ...
  21. ;
  22. ; Die Register M1,M5 müssen beim Aufruf $FFFF enthalten
  23. ; und werden nicht verändert, daher genügt es, sie einmal
  24. ; beim Systeminitialisieren zu setzen.
  25. ;
  26. ; Veränderte Register:
  27. ;   X0,X1,Y0,Y1
  28. ;   B
  29. ;   R1,R5
  30. ;   N1
  31.  
  32. echo
  33. ; Register initialisieren:
  34.       clr   B   #<DELTAB,R5     ; Summe löschen,
  35.                                 ; Zeiger auf Reflektortabelle
  36.       move  #>ESIZE,M1          ; Ringpuffergrö₧e
  37.       move  Y:(R5)+,N1          ; 1. Delay-Wert aus Tabelle
  38.       move  Y:<EPTR,R1          ; Zeiger: nächster Puffereintrag
  39.  
  40. ; Schleife zum Aufsummieren der einzelnen Reflektoren
  41.       do    #EZAHL,eloop        ; Anzahl der Reflektoren
  42.       move  Y:(R5)+,X0          ; Reflektorgewichtung
  43.       move  X:(R1+N1),X1        ; Wert aus Ringpuffer holen
  44.       mac   X0,X1,B  Y:(R5)+,N1 ; Gewichten/Aufsummieren,
  45.                                 ; parallel: nächstes Delay laden
  46. eloop
  47.  
  48. ; Aufsummierte reflektierte Werte ausgeben und
  49. ; mit Gewichtung in den Ringpuffer rückkoppeln
  50.       move  X:<QUELLE,X1        ; Eingangsvariable
  51.       move  Y:<FBACK,Y1         ; Feedback-Gewichtung
  52.       move  B,Y0                ; Summe reflektierter Werte
  53.  
  54.       mpy   Y0,Y1,B   B,X:<ZIEL ; Summe gewichten,
  55.                                 ; parallel: Summe auf Zielvariable
  56.       add   X1,B                ; Eingangswert plus Feedback
  57.       move  B,X:(R1)+           ; in Ringpuffer eintragen
  58.       move  R1,Y:<EPTR          ; neuen Ringbufferzeiger merken
  59.  
  60.       move  #$ffff,M1           ; M1 rekonstruieren
  61.  
  62.       rts
  63.  
  64.       end
  65.