AOH
ZXNet echo conference «code.zx»
From Kirill Frolov → To All 1 July 1998
├┤!, All !
This is a continuation of what I recently wrote about AOH, only
then everything was slow and wrong. But now it seems too fast :-(
AN EQU 100 ; OPERATING CYCLES NUMBERS
ASIN EQU 64 ; LINE SURVEYS PER CYCLE
; EVEN NUMBER!!!!
D.I.
LD A,AN
LD (AON10+1),SP
LD HL,ATNUM
LD (AON9+1),HL
;PREPARATION FOR ONE OPERATION CYCLE. NUMBERS
AON_0 LD SP,AONST
EX AF,AF'
LD HL,0 : LD DE,0
EXX
LD HL,0 : LD DE,0
LD IX,0 : LD IY,0
;CYCLES OF LINE SURVEYING AND MULTIPLICATION
AON0 IN A,(#FE)
JP Z,AON1
;MULTIPLY BY 1
POP BC : ADD HL,BC : EX DE,HL
POP BC : ADD HL,BC : EXX
POP BC : ADD HL,BC : EX DE,HL
POP BC : ADD HL,BC
POP BC : ADD IX,BC
POP BC : ADD IY,BC
RET
;MULTIPLY BY 0
AON1 POP BC : POP BC : POP BC
POP BC : POP BC : POP BC
EX DE,HL : EXX : EX DE,HL
LD A,1 : LD B,5 : DJNZ $
RET
;THIS IS HERE I STRONGLY DOUBT...
;IT MAY BE BETTER TO MULTIPLY NOT BY 0, BUT BY -1.
; HERE IS THE DATA IN THIS FORM:
;
;No. Reg. After ^2
; 0 HL H=H^2+L^2
; 1 DE L=D^2+E^2
; 2 HL' XH=H'^2+L'^2
; 3 DE' XL=D'^2+E'^2
; 4 IX D=XL^2+XH^2
; 5 IY E=YL^2+YH^2
;SQUARE AND SUMMATION
;FOR DIFFERENT PHASES
AON3 LD B,ATBLX
LD C,H : LD A,(BC) : LD H,A
LD C,L : LD A,(BC)ADD A,H : LD H,A
LD C,D : LD A,(BC) : LD D,A
LD C,E : LD A,(BC)
ADD A,D : LD L,A
LD C,YH : LD A,(BC) : LD E,A
LD C,YL : LD A,(BC)
ADD A,E : LD E,A
LD C,XH : LD A,(BC) : LD D,A
LD C,XL : LD A,(BC)
ADD A,D : LD D,A
EXX : LD B,ATBLX
LD C,H : LD A,(BC) : LD H,A
LD C,L : LD A,(BC)
ADD A,H : LD XH,A
LD C,D : LD A,(BC) : LD D,A
LD C,E : LD A,(BC)
ADD A,D : LD XL,A
EXX
;ВЫДЕЛЕHЕ 3-Х HАИБОЛЬШИХ ЗHАЧЕHЙ
;И HОМЕРОВ ЧАСТОТ
AON4 XOR A
CP H : JP C,$+6
LD A,H : LD C,0
CP L : JP C,$+6
LD A,H : LD C,1
CP XH : JP C,$+6
LD A,H : LD C,2
CP XL : JP C,$+6
LD A,H : LD C,3
CP D : JP C,$+6
LD A,H : LD C,4
CP E : JP C,$+6
LD A,H : LD C,5
POP BC : LD (BC),A
LD A,C
POP BC : LD (BC),A
RET
;ПРОВЕРКА HАЛИЧИЕ СИГHАЛА
AON5 LD A,0 : LD B,A
SRL A : ADD A,B
AON6 CP 0 : LD A,"?" : JP NC,AON9
;ВЫБОРКА ИЗ ТАБЛИЦЫ КОДА 2 ИЗ
AON7 LD A,0 : ADD A,A
LD B,A : ADD A,A
ADD A,B : LD L,A
AON8 LD C,0 : LD L,0
LD B,L : ADD HL,BC
LD BC,AT2OF6
ADD HL,BC : LD A,(HL)
AON9 LD HL,0 : LD (HL),A
INC HL : LD (AON9+1),HL
EX AF,AF'
DEC A : JP NZ,AON_0
AON10 LD SP,0 : RETANULL DW 0 ; HIGH BYTES HERE
;CODE TABLE 2 OF 6
AT2OF6 DS 36
;A PLACE FOR DIGITAL
ATNUM ; ROARING AONDPC
;STACK PREPARATION FOR AOHA.
AONDPC LD IX,AONST
LD HL,FRQTBL
LD A,6
AOND0 PUSH IX
LD E,(HL) : INC HL
LD D,(HL) : INC HL
LD (AONDP1),DE
LD E,(HL) : INC HL
LD D,(HL) : INC HL
LD (AONDP2),DE
PUSH HL
EX AF,AF'
LD A,AND
AONDP0 PUSH HL
PUSH HL
AONDP1 LD DE,0
ADD HL,DE
LD E,H : LD D,0
LD HL,SINTBL
ADD HL,DE
LD C,(HL)
POP DE
LD E,D : LD D,0
LD HL,SINTBL
ADD HL,DE
LD B,(HL)
BIT 7,C
JR NZ,$+3
DEC B
LD (IX+0),C
LD (IX+1),B
LD BC,14
ADD IX,BC
POP HL
AONDP2 LD DE,0
ADD HL,DE
DEC A
JP NZ,AONDP0
POP HL
POP IX
INC IX : INC IX
EX AF,AF'
DEC A
JP NZ,AOND0
LD A,AND-1 ; LAST TIME
LD BC,13 ; WILL BE AON3
LD DE,AON0
PUSH IX : POP HL
AOND1 LD (HL),E
INC HL
LD (HL),D
ADD HL,BC
DEC A
JP NZ,AOND1
EX DE,HL
LD HL,AONDST
LD BC,20
LDIR
;UNPACKING SQUARES TABLE
LD HL,SQRTBL
PUSH HL
LD DE,ATBLX
LD BC,128
LDIRPOP HL
LD DE,ATBLX+255
LD B,128
AOND2 LDI
DEC DE : DEC DE
DJNZ AOND2
RET
AONDST DW AON3 ; FOR PROCESSING
DW ANULL,AON7+1 ; WHERE TO PLACE
DW AON4
DW AON6+1,AON8+1
DW AON4; 3 TIMES
DW AON5+1,ANULL
DW AON5; TO CHOICE A NUMBER
;HERE IS AN INCREMENT BY ONE CYCLE
;AND 90 DEGREES.
FRQTBL DW 700.0
DW 900.0
DW 1100.0
DW 1300.0
DW 1500.0
DW 1700.0
;MOSTLY 1st PERIOD
;MAX. VALUE = 128/ASIN
SINTBL DS 256; TABLE OF SINES
;INPUT: 0...127 OUTPUT 0...255
SQRTBL DS 128; TABLE OF SQUARE
DS 256-$256; ADDRESS IS A MULTIPLE OF 256
;TABLE OF SQUARES UNPACKED
;INPUT: -128..127 OUTPUT:0...255
ATBLX DS 256
;STACK WILL BE HERE
AONST DS ASIN*14+18 ; SINES AND RESTS
END