|
|
|
@ -4461,13 +4461,13 @@ PLAY: CALL GETINT ; GET OCTAVE |
|
|
|
LD A,(HL) ; LOAD 2ND ARG |
|
|
|
INC HL ; IN DE |
|
|
|
LD E,A ; WHICH IS THE |
|
|
|
LD A,(HL) ; DURATION |
|
|
|
LD A,(HL) ; PITCH |
|
|
|
LD D,A |
|
|
|
|
|
|
|
PUSH DE ; SETUP ARGS IN HL |
|
|
|
POP HL ; AND DE |
|
|
|
POP DE |
|
|
|
|
|
|
|
POP DE ; DE = FREQUENCY |
|
|
|
; HL = PITCH |
|
|
|
LD A,8 ; DIVIDE THE |
|
|
|
SUB B ; FREQUENCY BASED |
|
|
|
JR Z,SPK_OCTOK ; ON THE OCTAVE |
|
|
|
@ -4482,18 +4482,21 @@ SPK_OCTDIV: |
|
|
|
JR NC,SPK_OCTOK ; SET TO MAXIMUM |
|
|
|
LD HL,$FFFF ; IF OVERFLOW |
|
|
|
|
|
|
|
SPK_OCTOK: |
|
|
|
SPK_OCTOK: |
|
|
|
|
|
|
|
CALL DISP |
|
|
|
|
|
|
|
POP BC ; MULTIPLY CHL X B |
|
|
|
PUSH DE ; SAVE |
|
|
|
PUSH HL ; SAVE |
|
|
|
|
|
|
|
EX DE,HL |
|
|
|
LD C,0 |
|
|
|
LD H,C |
|
|
|
LD L,C |
|
|
|
CCF |
|
|
|
MULSKP: ADD HL,DE |
|
|
|
JR NC,MULDLP |
|
|
|
JR NC,MULDLP |
|
|
|
INC C |
|
|
|
MULDLP: DJNZ MULSKP |
|
|
|
MULDLP: DJNZ MULSKP ; DIVIDE BY 8 |
|
|
|
|
|
|
|
SRL C ; 0>C>C ; BCHL = BCHL / 2 |
|
|
|
RR H ; C>H>C ; |
|
|
|
@ -4506,7 +4509,10 @@ MULDLP: DJNZ MULSKP |
|
|
|
RR L ; C>L>C ; |
|
|
|
|
|
|
|
POP DE |
|
|
|
; |
|
|
|
EX DE,HL |
|
|
|
|
|
|
|
CALL DISP |
|
|
|
|
|
|
|
; The following SPK_BEEPER routine is a modification of code from |
|
|
|
; "The Complete SPECTRUM ROM DISSASSEMBLY" by Dr Ian Logan & Dr Frank O’Hara |
|
|
|
; https://www.esocop.org/docs/CompleteSpectrumROMDisassemblyThe.pdf |
|
|
|
@ -4580,12 +4586,12 @@ RTCVAL .DB 0 |
|
|
|
SET_DUR_TBL: |
|
|
|
LD B,BF_SYSGET ; GET CPU SPEED |
|
|
|
LD C,BF_SYSGET_CPUINFO ; FROM HBIOS |
|
|
|
RST 08 |
|
|
|
RST 08 ; IN DE |
|
|
|
|
|
|
|
PUSH DE ; SAVE FOR CALCULATION |
|
|
|
POP BC ; - CPUKHZ - (2 * CPUKHZ) |
|
|
|
|
|
|
|
LD H,E ; DEHL = HL * 256 |
|
|
|
LD H,E ; DEHL = DE * 256 |
|
|
|
LD E,D |
|
|
|
LD D,0 |
|
|
|
LD L,D |
|
|
|
@ -4602,7 +4608,12 @@ FRQ_AJ1:SLA C ; C<C<0 ; DEHL = DEHL - (2 * CPUKHZ) |
|
|
|
SBC HL,BC |
|
|
|
JR NC,FRQ_AJ2 |
|
|
|
DEC DE |
|
|
|
FRQ_AJ2:PUSH HL ; DEHL = CPUKHZ / 8) / FREQUENCY |
|
|
|
|
|
|
|
FRQ_AJ2: ; AT THIS POINT DEHL = CPUKHZ * 125 E.G. 9982 KHZ * 125 = 0012:DE14 |
|
|
|
|
|
|
|
; CALL DISP |
|
|
|
|
|
|
|
PUSH HL ; DEHL = CPUKHZ / 8) / FREQUENCY |
|
|
|
POP IX ; HLIX = DENOMINATOR |
|
|
|
EX DE,HL |
|
|
|
|
|
|
|
@ -4633,17 +4644,13 @@ DIV_CANSUB: |
|
|
|
DEC A |
|
|
|
JR NZ, DIV_LP ; IX = RESULT |
|
|
|
|
|
|
|
; LD DE,$FFFF ; IF OVERFLOW SET TO |
|
|
|
; LD A,H |
|
|
|
; OR L ; MAXIMUM. OCCURS |
|
|
|
; CALL NZ,DISP |
|
|
|
; JR NZ,DUROVF ; FOR 10MHZ+ |
|
|
|
|
|
|
|
PUSH IX ; SAVE RESULT IN TABLE |
|
|
|
POP DE |
|
|
|
DUROVF: LD (IY+2),E |
|
|
|
LD (IY+3),D |
|
|
|
|
|
|
|
; CALL DISP |
|
|
|
|
|
|
|
LD DE,4 ; POINT TO NEXT TABLE |
|
|
|
ADD IY,DE ; ENTRY TO UPDATE |
|
|
|
|
|
|
|
@ -4652,6 +4659,7 @@ DUROVF: LD (IY+2),E |
|
|
|
|
|
|
|
POP BC ; RETREIVE THE |
|
|
|
DJNZ TBL_LP ; LOOP COUNTER |
|
|
|
|
|
|
|
RET |
|
|
|
|
|
|
|
DISP: |
|
|
|
@ -4663,6 +4671,9 @@ DISP: |
|
|
|
POP BC |
|
|
|
CALL PRTHEXWORD |
|
|
|
|
|
|
|
LD A,' ' |
|
|
|
CALL MONOUT |
|
|
|
|
|
|
|
PUSH HL |
|
|
|
POP BC |
|
|
|
CALL PRTHEXWORD |
|
|
|
@ -4748,7 +4759,7 @@ FRQDURTBL: |
|
|
|
.DW $1875, $0, $19F4, $0 ; G, G# |
|
|
|
.DW $1B80, $0, $1D22, $0 ; A, A# |
|
|
|
.DW $1EDE, $0 ; B |
|
|
|
|
|
|
|
; |
|
|
|
FDTBSIZ .EQU ($-FRQDURTBL)/4 |
|
|
|
|
|
|
|
SLACK .EQU (BAS_END - $) |
|
|
|
|