diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index 33077a7f..acae4864 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4400,6 +4400,7 @@ MONITR: LD A,BID_BOOT ; BOOT BANK INITST: LD A,0 ; Clear break flag LD (BRKFLG),A + CALL SET_DUR_TBL ; SET UP SOUND TABLE JP INIT ARETN: RETN ; Return from NMI @@ -4416,7 +4417,7 @@ OUTNCR: CALL OUTC ; Output character in A ; --------------------------------------------------------------------------------------- -; PLAY O,N,D ; PLAY OCTAVE 0-7, NOTE N (0-11), DURATION (1-8) +; PLAY O,N,D ; PLAY OCTAVE 0-8, NOTE N (0-11), DURATION (1-8) PLAY: CALL GETINT ; GET OCTAVE PUSH AF ; AND SAVE @@ -4441,7 +4442,7 @@ PLAY: CALL GETINT ; GET OCTAVE CALL GETINT ; GET DURATION POP DE ; GET NOTE PTR IN DE - EX (SP),HL ; GET OCTAVE IN HL. SYTAX POINTER ON STACK + EX (SP),HL ; GET OCTAVE IN HL. SYNTAX POINTER ON STACK EX DE,HL ; PUT NOTE PTR IN HL, OCTAVE IN DE PUSH BC @@ -4453,9 +4454,7 @@ PLAY: CALL GETINT ; GET OCTAVE RET SPK_BEEP: -; PUSH AF ; SAVE DURATION - - CALL SET_DUR_TBL + PUSH AF ; SAVE DURATION LD A,(HL) ; LOAD 1ST ARG INC HL ; IN DE @@ -4464,112 +4463,121 @@ SPK_BEEP: INC HL ; THE EIGTH LD D,A ; OCTAVE - LD A,7 ; DIVIDE THE - SUB B ; FREQENCY BASE - LD C,A ; ON THE OCTAVE -SPK_OCTDIV: ; REQUESTED - SRL D - RRC E - DJNZ SPK_OCTDIV -SPK_OCTOK: + PUSH DE LD A,(HL) ; LOAD 2ND ARG - INC HL ; IN BC - LD C,A ; WHICH IS THE + INC HL ; IN DE + LD E,A ; WHICH IS THE LD A,(HL) ; DURATION - INC HL - LD B,A - PUSH BC ; SETUP ARG IN HL - POP HL + LD D,A - CALL SPK_BEEPER ; PLAY -; - RET + PUSH DE ; SETUP ARGS IN HL + POP HL ; AND DE + POP DE + + LD A,8 ; DIVIDE THE + SUB B ; FREQENCY BASED + JR Z,SPK_OCTOK ; ON THE OCTAVE + LD C,A ; REQUESTED +SPK_OCTDIV: + SRL D ; 0>D>C ; MULTIPLY THE + RR E ; C>E>C ; DURATION EVERY + SLA L ; CE>C ; DEHL = DEHL / 2 + RR H ; C>H>C ; + RR L ; C>L>C ; SBC HL,BC ; DEHL = DEHL - CPUKHZ - JR NC,FRQ_ADJ1 + JR NC,FRQ_AJ1 DEC DE -FRQ_ADJ1: - SLA C ; DEHL = DEHL - (2 * CPUKHZ) - RL B +FRQ_AJ1:SLA C ; C