Browse Source

Update nascom.asm

pull/49/head
b1ackmai1er 6 years ago
parent
commit
dc0411746e
  1. 49
      Source/HBIOS/nascom.asm

49
Source/HBIOS/nascom.asm

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

Loading…
Cancel
Save