home *** CD-ROM | disk | FTP | other *** search
- ; FFT
- ;
- ; SYMBOLIC NAMES FOR DATA MEMORY LOCATIONS
- ;
- XLEND: equ 0
- ONE: equ 1
- NT: equ 2
- NH: equ 3
- NQ: equ 4
- M: equ 5
- IT: equ 6
- ID: equ 7
- IR: equ 8
- IU: equ 9
- I: equ 10
- J: equ 11
- ND: equ 12
- L: equ 13
- XRQ: equ 14
- XIQ: equ 15
- XRP: equ 16
- XIP: equ 17
- COS: equ 18
- SIN: equ 19
- TEMP1: equ 20
- TEMP2: equ 21
- TEMP3: equ 22
- TEMP4: equ 23
- K: equ 24
- TABPTR: equ 25
- ALOCPTR:equ 26
- DIFF: equ 27
- STACKED:equ 28
- DIFFS1: equ 29
- DIFFS2: equ 30
- XLENB: equ 31
- ;
- ORG 0
- LACK 73 ; 73
- SACL ONE,0
- OUT ONE,7 ; tell 8088 we're starting
- B RESET1 ;RESET VECTOR
- ;
- ;
- ; VECTORS
- ;
- ; POINTERS
- ;
- XLEN: DW 1024 ;ADDR OF FFT SIZE
-
- TABLE: dw 00 ; SINE TABLE
- dw 0c9H
- dw 0192H
- dw 025bH
- dw 0324H
- dw 03edH
- dw 04b6H
- dw 057eH
- dw 0647H
- dw 0710H
- dw 07d9H
- dw 08a1H
- dw 096aH
- dw 0a32H
- dw 0afbH
- dw 0bc3H
- dw 0c8bH
- dw 0d53H
- dw 0e1bH
- dw 0ee3H
- dw 0fabH
- dw 01072H
- dw 01139H
- dw 01200H
- dw 012c7H
- dw 0138eH
- dw 01455H
- dw 0151bH
- dw 015e1H
- dw 016a7H
- dw 0176dH
- dw 01833H
- dw 018f8H
- dw 019bdH
- dw 01a82H
- dw 01b46H
- dw 01c0bH
- dw 01ccfH
- dw 01d93H
- dw 01e56H
- dw 01f19H
- dw 01fdcH
- dw 0209fH
- dw 02161H
- dw 02223H
- dw 022e4H
- dw 023a6H
- dw 02467H
- dw 02527H
- dw 025e7H
- dw 026a7H
- dw 02767H
- dw 02826H
- dw 028e5H
- dw 029a3H
- dw 02a61H
- dw 02b1eH
- dw 02bdbH
- dw 02c98H
- dw 02d54H
- dw 02e10H
- dw 02eccH
- dw 02f86H
- dw 03041H
- dw 030fbH
- dw 031b4H
- dw 0326dH
- dw 03326H
- dw 033deH
- dw 03496H
- dw 0354dH
- dw 03603H
- dw 036b9H
- dw 0376fH
- dw 03824H
- dw 038d8H
- dw 0398cH
- dw 03a3fH
- dw 03af2H
- dw 03ba4H
- dw 03c56H
- dw 03d07H
- dw 03db7H
- dw 03e67H
- dw 03f16H
- dw 03fc5H
- dw 04073H
- dw 04120H
- dw 041cdH
- dw 04279H
- dw 04325H
- dw 043d0H
- dw 0447aH
- dw 04523H
- dw 045ccH
- dw 04674H
- dw 0471cH
- dw 047c3H
- dw 04869H
- dw 0490eH
- dw 049b3H
- dw 04a57H
- dw 04afaH
- dw 04b9dH
- dw 04c3fH
- dw 04ce0H
- dw 04d80H
- dw 04e20H
- dw 04ebfH
- dw 04f5dH
- dw 04ffaH
- dw 05097H
- dw 05133H
- dw 051ceH
- dw 05268H
- dw 05301H
- dw 0539aH
- dw 05432H
- dw 054c9H
- dw 0555fH
- dw 055f4H
- dw 05689H
- dw 0571dH
- dw 057b0H
- dw 05842H
- dw 058d3H
- dw 05963H
- dw 059f3H
- dw 05a81H
- dw 05b0fH
- dw 05b9cH
- dw 05c28H
- dw 05cb3H
- dw 05d3dH
- dw 05dc6H
- dw 05e4fH
- dw 05ed6H
- dw 05f5dH
- dw 05fe2H
- dw 06067H
- dw 060ebH
- dw 0616eH
- dw 061f0H
- dw 06271H
- dw 062f1H
- dw 06370H
- dw 063eeH
- dw 0646bH
- dw 064e7H
- dw 06562H
- dw 065ddH
- dw 06656H
- dw 066ceH
- dw 06745H
- dw 067bcH
- dw 06831H
- dw 068a5H
- dw 06919H
- dw 0698bH
- dw 069fcH
- dw 06a6cH
- dw 06adbH
- dw 06b4aH
- dw 06bb7H
- dw 06c23H
- dw 06c8eH
- dw 06cf8H
- dw 06d61H
- dw 06dc9H
- dw 06e30H
- dw 06e95H
- dw 06efaH
- dw 06f5eH
- dw 06fc0H
- dw 07022H
- dw 07082H
- dw 070e1H
- dw 07140H
- dw 0719dH
- dw 071f9H
- dw 07254H
- dw 072aeH
- dw 07306H
- dw 0735eH
- dw 073b5H
- dw 0740aH
- dw 0745eH
- dw 074b1H
- dw 07503H
- dw 07554H
- dw 075a4H
- dw 075f3H
- dw 07640H
- dw 0768dH
- dw 076d8H
- dw 07722H
- dw 0776bH
- dw 077b3H
- dw 077f9H
- dw 0783fH
- dw 07883H
- dw 078c6H
- dw 07908H
- dw 07949H
- dw 07989H
- dw 079c7H
- dw 07a04H
- dw 07a41H
- dw 07a7cH
- dw 07ab5H
- dw 07aeeH
- dw 07b25H
- dw 07b5cH
- dw 07b91H
- dw 07bc4H
- dw 07bf7H
- dw 07c29H
- dw 07c59H
- dw 07c88H
- dw 07cb6H
- dw 07ce2H
- dw 07d0eH
- dw 07d38H
- dw 07d61H
- dw 07d89H
- dw 07db0H
- dw 07dd5H
- dw 07df9H
- dw 07e1cH
- dw 07e3eH
- dw 07e5eH
- dw 07e7eH
- dw 07e9cH
- dw 07eb9H
- dw 07ed4H
- dw 07eefH
- dw 07f08H
- dw 07f20H
- dw 07f37H
- dw 07f4cH
- dw 07f61H
- dw 07f74H
- dw 07f86H
- dw 07f96H
- dw 07fa6H
- dw 07fb4H
- dw 07fc1H
- dw 07fcdH
- dw 07fd7H
- dw 07fe0H
- dw 07fe8H
- dw 07fefH
- dw 07ff5H
- dw 07ff9H
- dw 07ffcH
- dw 07ffeH
- dw 07fffH
- ;
- ; PROGRAM
- ;
- RESET1:
- ;Setup FFT
- ldpk 0
- lack xlend
- sacl xlend,0
- lack ONE
- sacl ONE,0
- lt one
- mpyk 0400H
- pac
- sacl diff,0
- mpyk 0BFFH
- pac
- sacl diffs2
- mpyk 600H
- pac
- sacl diffs1
- lac xlend,15
- sach xlenb
- lack XLEN
- tblr nt
- lar ar0,nt
- larp 0
- mar *-,0
- lt 1H
- zac
- mpyk 0200H
- pac
- WAIT: larp 0
- BIOZ STORE
- B WAIT
- STORE: IN XRQ,PA3
- push
- LAC XRQ,4
- SUB ONE,15
- SACL XRQ,0
- pop
- tblw XRQ
- add diff,0
- tblw XLEND
- sub diff
- add ONE,0
- banz wait
- B FFT
- ;
- ORG 200H
- ALOC: ; REAL PART
- ;
- ORG 600H
- BLOC: ; IMAGINARY
- ORG 0A00H
- ; Data stored do fft
-
- FFT: LACK 1
- SACL ONE,0
- LT ONE
- MPYK XLEN
- PAC
- TBLR XLEND
- LAC XLEND,0
- SUB ONE,0
- SACL NT,0
- LAC XLEND,15
- SACH NH,0
- LAC XLEND,14
- SACH NQ,0
- ;
- ; POINTER INITIALIZATION
- LT ONE
- MPYK TABLE
- PAC
- SACL TABPTR,0 ; TABLE PTR
- MPYK ALOC
- PAC
- SACL ALOCPTR,0 ; REALS PTR
- MPYK BLOC
- PAC
- SUB ALOCPTR,0
- SACL DIFF,0 ; BLOC - ALOC
- ;
- ; BITREV
- ;
- ZAC
- SACL I,0
- SACL J,0
- LAB0: ZALS NT
- SUB ONE,1
- SUB I,0
- BLZ LAB03
- ZALS J
- SUB I,0
- BLEZ LAB01
- LAC ALOCPTR,0
- ADD J,0
- TBLR TEMP1
- ADD DIFF,0
- TBLR TEMP3
- LAC ALOCPTR,0
- ADD I,0
- TBLR TEMP2
- ADD DIFF,0
- TBLR TEMP4
- LAC ALOCPTR,0
- ADD J,0
- TBLW TEMP2
- ADD DIFF,0
- TBLW TEMP4
- LAC ALOCPTR,0
- ADD I,0
- TBLW TEMP1
- ADD DIFF,0
- TBLW TEMP3
- LAB01: LAC NH,0
- SACL K,0
- LAB02: LAC J,0
- SUB K,0
- BLZ LAB025
- SACL J,0
- LAC K,15
- SACH K,0
- B LAB02
- LAB025: LAC J,0
- ADD K,0
- SACL J,0
- ZALS I
- ADD ONE,0
- SACL I,0
- B LAB0
- LAB03:
- ;
- ;
- ZAC
- SACL M,0
- SACL IT,0
- LACK 1
- SACL ID,0
- SACL IR,0
-
- LAC NQ,1
- SACL IU,0
-
- BEGIN:
- LAC ID,0
- SACL I,0
- ADD ID,0
- SACL ID,0
- ZAC
- SACL J,0
-
- LAB1:
- LAC I,0
- SUB J,0
- BLEZ LAB5
- LAC TABPTR,0
- ADD M,0
- TBLR SIN
- LAC TABPTR,0
- ADD NQ,0
- SUB M,0
- TBLR COS
- LAC J,0
- SUB IR,0
- BLZ LAB2
- LAC M,0
- SUB IT,0
- SACL M,0
- ZAC
- SUB COS,0
- SACL COS,0
- B LAB3
-
- LAB2:
- LAC M,0
- ADD IT,0
- SACL M,0
-
- LAB3:
- LAC J,0
- SACL ND,0
-
- LAB4:
- LAC NT,0
- SUB ND,0
- BLZ LAB45
- LAC I,0
- ADD ND,0
- SACL L,0
- LAC ALOCPTR,0
- ADD L,0
- TBLR XRQ
- ADD DIFF,0
- TBLR XIQ
- LAC ALOCPTR,0
- ADD ND,0
- TBLR XRP
- ADD DIFF,0
- TBLR XIP
- ;
- ; BUTTERFLY
- ;
- ZAC
- LT COS
- MPY XRQ
- LTA SIN
- MPY XIQ
- LTA COS
- SACH TEMP1,0
- ZAC
- MPY XIQ
- LTA SIN
- MPY XRQ
- SPAC
- SACH TEMP2,0
- ;
- LAC XRP,14
- ADD TEMP1,15
- SACH XRP,1
- SUBH TEMP1
- SACH XRQ,1
-
- LAC XIP,14
- ADD TEMP2,15
- SACH XIP,1
- SUBH TEMP2
- SACH XIQ,1
- ;
- ; END OF BUTTERFLY
- ;
- LAC ALOCPTR,0
- ADD L,0
- TBLW XRQ
- ADD DIFF,0
- TBLW XIQ
- LAC ALOCPTR,0
- ADD ND,0
- TBLW XRP
- ADD DIFF,0
- TBLW XIP
-
- LAC ND,0
- ADD ID,0
- SACL ND,0
- B LAB4
-
- LAB45:
- LAC J,0
- ADD ONE,0
- SACL J,0
- B LAB1
-
- LAB5:
- LAC I,0
- SACL IR,0
- LAC IU,15
- SACH IU,0
- SACH IT,0
- LAB6:
- LAC NH,0
- SUB I,0
- BGZ BEGIN
- SPECT: larp 0
- lar 0,xlenb
- mar *-,0
- lac alocptr,0
- PICK1: tblr TEMP1
- add DIFF,0
- tblr temp2
- push
- zac
- lt temp1
- mpy temp1
- lta temp2
- mpy temp2
- apac
- sach temp1
- sacl temp2
- pop
- add diffs1
- tblw temp1
- add one,9
- tblw temp2
- sub diffs2
- banz pick1
- STOP: LACK 58H ; 88
- SACL ONE,0
- OUT ONE,7 ; tell 8088 we're done
- LOOP: B LOOP
-
-