From 70337557623cd3d2f82ed52cf7ac950ee8bae48e Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 7 Sep 2019 17:09:36 +0800 Subject: [PATCH 01/11] Update nascom.asm Add PLAY a note --- Source/HBIOS/nascom.asm | 685 +++++++++++++++++++++++++++++++++------- 1 file changed, 572 insertions(+), 113 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index 6752614c..2138ccb9 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -33,7 +33,7 @@ LF .EQU 0AH ; Line feed CS .EQU 0CH ; Clear screen CR .EQU 0DH ; Carriage return CTRLO .EQU 0FH ; Control "O" -CTRLQ .EQU 11H ; Control "Q" +CTRLQ .EQU 11H ; Control "Q" CTRLR .EQU 12H ; Control "R" CTRLS .EQU 13H ; Control "S" CTRLU .EQU 15H ; Control "U" @@ -42,6 +42,11 @@ DEL .EQU 7FH ; Delete ; BASIC WORK SPACE LOCATIONS +; 0200H - 2000H BASIC EXECUTABLE +; 2000H - 2090H STACK +; 2090H - 20F8H BASIC EXECUTABLE VARAIABLES / WORKSPACE +; 20F9H - BASIC PROGRAM START + WRKSPC .EQU BAS_END+90H ; WAS 4090H ; BASIC Work space USR .EQU WRKSPC+3H ; "USR (x)" jump OUTSUB .EQU WRKSPC+6H ; "OUT p,n" @@ -132,7 +137,7 @@ MO .EQU 24H ; Missing operand HX .EQU 26H ; HEX error BN .EQU 28H ; BIN error - .ORG BAS_LOC ; WAS 02000H + .ORG BAS_LOC ; WAS 02000H COLD: JP STARTB ; Jump for cold start WARM: JP WARMST ; Jump for warm start @@ -173,8 +178,8 @@ MSIZE: LD HL,MEMMSG ; Point to message MLOOP: INC HL ; Next byte ; LD A,H ; Above address FFFF ? ; OR L - LD A,H ; Memory top set below HBIOS Proxy @ FE00 - CP $FD + LD A,H ; Memory top set below HBIOS Proxy @ FE00 + CP $FD JP Z,SETTOP ; Yes - 64K RAM LD A,(HL) ; Get contents LD B,A ; Save it @@ -303,7 +308,7 @@ WORDS: .BYTE 'E'+80H,"ND" .BYTE 'C'+80H,"ONT" .BYTE 'L'+80H,"IST" .BYTE 'C'+80H,"LEAR" - .BYTE 'C'+80H,"LOAD" + .BYTE 'P'+80H,"LAY" .BYTE 'C'+80H,"SAVE" .BYTE 'N'+80H,"EW" @@ -392,7 +397,7 @@ WORDTB: .WORD PEND .WORD CONT .WORD LIST .WORD CLEAR - .WORD REM + .WORD PLAY .WORD REM .WORD NEW @@ -573,10 +578,10 @@ CHKSTK: PUSH HL ; Save code string address ADD HL,BC .BYTE 3EH ; Skip "PUSH HL" ENFMEM: PUSH HL ; Save code string address - LD A,0D0H ;LOW -48 ; 48 Bytes minimum RAM + LD A,0D0H ;LOW -48 ; 48 Bytes minimum RAM SUB L LD L,A - LD A,0FFH; HIGH (-48) ; 48 Bytes minimum RAM + LD A,0FFH ; HIGH (-48) ; 48 Bytes minimum RAM SBC A,H JP C,OMERR ; Not enough - ?OM Error LD H,A @@ -1257,34 +1262,36 @@ UPDATA: LD (NXTDAT),HL ; Update DATA pointer EX DE,HL ; Restore code string address RET +; GET CONSOLE INPUT STATUS VIA HBIOS TSTBRK: - ; SAVE INCOMING REGISTERS (AF IS OUTPUT) - PUSH BC - PUSH DE - PUSH HL - ; GET CONSOLE INPUT STATUS VIA HBIOS - LD C,CIODEV_CONSOLE; CONSOLE UNIT TO C - LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS - RST 08 ; HBIOS RETURNS STATUS IN A - ; RESTORE REGISTERS (AF IS OUTPUT) - POP HL - POP DE - POP BC + PUSH BC ; SAVE INCOMING REGISTERS (AF IS OUTPUT) + PUSH DE + PUSH HL + + LD C,CIODEV_CONSOLE; CONSOLE UNIT TO C + LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS + RST 08 ; HBIOS RETURNS STATUS IN A + + POP HL ; RESTORE REGISTERS (AF IS OUTPUT) + POP DE + POP BC RET Z ; No key, go back - PUSH BC - PUSH DE - PUSH HL - ; INPUT CHARACTER FROM CONSOLE VIA HBIOS - LD C,CIODEV_CONSOLE; CONSOLE UNIT TO C - LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR - RST 08 ; HBIOS READS CHARACTDR - LD A,E ; MOVE CHARACTER TO A FOR RETURN + PUSH BC + PUSH DE + PUSH HL + +; INPUT CHARACTER FROM CONSOLE VIA HBIOS + + LD C,CIODEV_CONSOLE; CONSOLE UNIT TO C + LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR + RST 08 ; HBIOS READS CHARACTDR + LD A,E ; MOVE CHARACTER TO A FOR RETURN ; - ; RESTORE REGISTERS (AF IS OUTPUT) - POP HL - POP DE - POP BC + + POP HL ; RESTORE REGISTERS (AF IS OUTPUT) + POP DE + POP BC CP ESC ; Escape key? JR Z,BRK ; Yes, break @@ -1292,22 +1299,22 @@ TSTBRK: JR Z,BRK ; Yes, break CP CTRLS ; Stop scrolling? RET NZ ; Other key, ignore -STALL: ; Wait for key - ; SAVE INCOMING REGISTERS (AF IS OUTPUT) - PUSH BC - PUSH DE - PUSH HL +STALL: ; Wait for key + + PUSH BC ; SAVE INCOMING REGISTERS (AF IS OUTPUT) + PUSH DE + PUSH HL ; - ; INPUT CHARACTER FROM CONSOLE VIA HBIOS - LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C - LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR - RST 08 ; HBIOS READS CHARACTDR - LD A,E ; MOVE CHARACTER TO A FOR RETURN +; INPUT CHARACTER FROM CONSOLE VIA HBIOS ; - ; RESTORE REGISTERS (AF IS OUTPUT) - POP HL - POP DE - POP BC + LD C,CIODEV_CONSOLE; CONSOLE UNIT TO C + LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR + RST 08 ; HBIOS READS CHARACTDR + LD A,E ; MOVE CHARACTER TO A FOR RETURN +; + POP HL ; RESTORE REGISTERS (AF IS OUTPUT) + POP DE + POP BC CP CTRLQ ; Resume scrolling? RET Z ; Release the chokehold CP CTRLC ; Second break? @@ -1357,7 +1364,6 @@ NULL: CALL GETINT ; Get integer 0-255 LD (NULLS),A ; Set nulls number RET - ACCSUM: PUSH HL ; Save address in array LD HL,(CHKSUM) ; Get check sum LD B,0 ; BC - Value of byte @@ -1967,8 +1973,8 @@ OPRND: XOR A ; Get operand routine JP C,ASCTFP ; Number - Get value CALL CHKLTR ; See if a letter JP NC,CONVAR ; Letter - Find variable - CP '&' ; &H = HEX, &B = BINARY - JR NZ, NOTAMP + CP '&' ; &H = HEX, &B = BINARY + JR NZ, NOTAMP CALL GETCHR ; Get next character CP 'H' ; Hex number indicated? [function added] JP Z,HEXTFP ; Convert Hex to FPREG @@ -2981,14 +2987,14 @@ VAL: CALL GETLEN ; Get length of string EX (SP),HL ; Save string end,get start PUSH BC ; Save end+1 byte LD A,(HL) ; Get starting byte - CP '$' ; Hex number indicated? [function added] - JP NZ,VAL1 - CALL HEXTFP ; Convert Hex to FPREG - JR VAL3 + CP '$' ; Hex number indicated? [function added] + JP NZ,VAL1 + CALL HEXTFP ; Convert Hex to FPREG + JR VAL3 VAL1: CP '%' ; Binary number indicated? [function added] - JP NZ,VAL2 - CALL BINTFP ; Convert Bin to FPREG - JR VAL3 + JP NZ,VAL2 + CALL BINTFP ; Convert Bin to FPREG + JR VAL3 VAL2: CALL ASCTFP ; Convert ASCII string to FP VAL3: POP BC ; Restore end+1 byte POP HL ; Restore end+1 address @@ -3054,7 +3060,7 @@ POKE: CALL GETNUM ; Get memory address CALL DEINT ; Get integer -32768 to 3276 PUSH DE ; Save memory address CALL CHKSYN ; Make sure ',' follows - .BYTE ',' + .BYTE ',' CALL GETINT ; Get integer 0-255 POP DE ; Restore memory address LD (DE),A ; Load it into memory @@ -4143,19 +4149,21 @@ ATNTAB: .BYTE 9 ; Table used by ATN ARET: RET ; A RETurn instruction +; INPUT CHARACTER FROM CONSOLE VIA HBIOS + GETINP: - PUSH BC - PUSH DE - PUSH HL - ; INPUT CHARACTER FROM CONSOLE VIA HBIOS - LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C - LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR - RST 08 ; HBIOS READS CHARACTDR - LD A,E ; MOVE CHARACTER TO A FOR RETURN - ; RESTORE REGISTERS (AF IS OUTPUT) - POP HL - POP DE - POP BC + PUSH BC + PUSH DE + PUSH HL + + LD C,CIODEV_CONSOLE; CONSOLE UNIT TO C + LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR + RST 08 ; HBIOS READS CHARACTDR + LD A,E ; MOVE CHARACTER TO A FOR RETURN + + POP HL ; RESTORE REGISTERS (AF IS OUTPUT) + POP DE + POP BC RET CLS: LD A,CS ; ASCII Clear screen @@ -4199,26 +4207,26 @@ DOKE: CALL GETNUM ; Get a number HEX: CALL TSTNUM ; Verify it's a number CALL DEINT ; Get integer -32768 to 32767 PUSH BC ; Save contents of BC - LD HL,PBUFF - LD A,D ; Get high order into A + LD HL,PBUFF + LD A,D ; Get high order into A CP $0 - JR Z,HEX2 ; Skip output if both high digits are zero + JR Z,HEX2 ; Skip output if both high digits are zero CALL BYT2ASC ; Convert D to ASCII - LD A,B - CP '0' - JR Z,HEX1 ; Don't store high digit if zero - LD (HL),B ; Store it to PBUFF - INC HL ; Next location -HEX1: LD (HL),C ; Store C to PBUFF+1 + LD A,B + CP '0' + JR Z,HEX1 ; Don't store high digit if zero + LD (HL),B ; Store it to PBUFF + INC HL ; Next location +HEX1: LD (HL),C ; Store C to PBUFF+1 INC HL ; Next location -HEX2: LD A,E ; Get lower byte +HEX2: LD A,E ; Get lower byte CALL BYT2ASC ; Convert E to ASCII - LD A,D + LD A,D CP $0 - JR NZ,HEX3 ; If upper byte was not zero then always print lower byte - LD A,B - CP '0' ; If high digit of lower byte is zero then don't print - JR Z,HEX4 + JR NZ,HEX3 ; If upper byte was not zero then always print lower byte + LD A,B + CP '0' ; If high digit of lower byte is zero then don't print + JR Z,HEX4 HEX3: LD (HL),B ; to PBUFF+2 INC HL ; Next location HEX4: LD (HL),C ; to PBUFF+3 @@ -4254,6 +4262,7 @@ ADD301 ADD A,$30 ; And make it full ASCII ; Convert "&Hnnnn" to FPREG ; Gets a character from (HL) checks for Hexadecimal ASCII numbers "&Hnnnn" ; Char is in A, NC if char is ;<=>?@ A-z, CY is set if 0-9 +; HEXTFP EX DE,HL ; Move code string pointer to DE LD HL,$0000 ; Zero out the value CALL GETHEX ; Check the number for valid hex @@ -4362,32 +4371,32 @@ CHKBIN: INC DE BINERR: LD E,BN ; ?BIN Error JP ERROR - JJUMP1: LD IX,-1 ; Flag cold start JP CSTART ; Go and initialise +; OUTPUT CHARACTER TO CONSOLE VIA HBIOS + MONOUT: - ; SAVE ALL INCOMING REGISTERS - PUSH AF - PUSH BC - PUSH DE - PUSH HL - ; OUTPUT CHARACTER TO CONSOLE VIA HBIOS - LD E,A ; OUTPUT CHAR TO E - LD C,CIODEV_CONSOLE; CONSOLE UNIT TO C - LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR - RST 08 ; HBIOS OUTPUTS CHARACTDR - ; RESTORE ALL REGISTERS - POP HL - POP DE - POP BC - POP AF - RET - -MONITR: LD A,BID_BOOT ; BOOT BANK - LD HL,0 ; ADDRESS ZERO - CALL HB_BNKCALL ; DOES NOT RETURN + PUSH AF ; SAVE ALL INCOMING REGISTERS + PUSH BC + PUSH DE + PUSH HL + + LD E,A ; OUTPUT CHAR TO E + LD C,CIODEV_CONSOLE; CONSOLE UNIT TO C + LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR + RST 08 ; HBIOS OUTPUTS CHARACTDR + + POP HL ; RESTORE ALL REGISTERS + POP DE + POP BC + POP AF + RET + +MONITR: LD A,BID_BOOT ; BOOT BANK + LD HL,0 ; ADDRESS ZERO + CALL HB_BNKCALL ; DOES NOT RETURN INITST: LD A,0 ; Clear break flag LD (BRKFLG),A @@ -4395,7 +4404,6 @@ INITST: LD A,0 ; Clear break flag ARETN: RETN ; Return from NMI - TSTBIT: PUSH AF ; Save bit mask AND B ; Get common bits POP BC ; Restore bit mask @@ -4406,19 +4414,470 @@ TSTBIT: PUSH AF ; Save bit mask OUTNCR: CALL OUTC ; Output character in A JP PRNTCRLF ; Output CRLF +; --------------------------------------------------------------------------------------- + +; PLAY N ; PLAY NOTE N + +PLAY: CALL GETNUM ; GET NOTE TO PLAY + CALL DEINT ; ITS IN DE + + LD A,SPK_NUMNOT-1 ; EXIT IF NOTE + CP E ; OUT OF RANGE + RET M + + PUSH HL ; SAVE SYNTAX POINTER + + LD HL,SPK_TUNTBL ; POINT TO NOTE ENTRY + EX DE,HL + ADD HL,HL + ADD HL,HL + ADD HL,DE ; ITS IN HL + + CALL SPK_BEEP + + POP HL ; RESTORE SYNTAX POINTER + RET + +SPK_BEEP: + LD A,(HL) ; LOAD 1ST ARG + INC HL ; IN DE + LD E,A + LD A,(HL) + INC HL + LD D,A +; + LD A,(HL) ; LOAD 2ND ARG + INC HL ; IN BC + LD C,A + LD A,(HL) + INC HL + LD B,A + PUSH BC ; SETUP ARG IN HL + POP HL +; + CALL SPK_BEEPER ; PLAY +; + RET +; +; 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 +; +; DE Number of passes to make through the sound generation loop +; HL Loop delay parameter + +;RTCIO .EQU $70 +RTCVAL .EQU 0 +; +SPK_BEEPER: + PUSH IX + DI ; Disable the interrupt for the duration of a 'beep'. + LD A,L ; Save L temporarily. + SRL L ; Each '1' in the L register is to count 4 T states, but take INT (L/4) and count 16 T states instead. + SRL L + CPL ; Go back to the original value in L and find how many were lost by taking 3-(A mod 4). + AND $03 + LD C,A + LD B,$00 + LD IX,SPK_DLYADJ ; The base address of the timing loop. + ADD IX,BC ; Alter the length of the timing loop. Use an earlier starting point for each '1' lost by taking INT (L/4). + LD A,(RTCVAL) ; Fetch the present border colour from BORDCR and move it to bits 2, 1 and 0 of the A register. +; +; The HL register holds the 'length of the timing loop' with 16 T states being used for each '1' in the L register and 1024 T states for each '1' in the H register. +; +SPK_DLYADJ: + NOP ; Add 4 T states for each earlier entry point that is used. + NOP + NOP + INC B ; The values in the B and C registers will come from the H and L registers - see below. + INC C +BE_H_L_LP: + DEC C ; The 'timing loop', i.e. BC*4 T states. (But note that at the half-cycle point, C will be equal to L+1.) + JR NZ,BE_H_L_LP + LD C,$3F + DEC B + JP NZ,BE_H_L_LP +; +; The loudspeaker is now alternately activated and deactivated. +; + XOR %00000100 ; Flip bit 2. + OUT (RTCIO),A ; Perform the 'OUT' operation, leaving other bits unchanged. + LD B,H ; Reset the B register. + LD C,A ; Save the A register. + BIT 4,A ; Jump if at the half-cycle point. + JR NZ,BE_AGAIN +; +; After a full cycle the DE register pair is tested. +; + LD A,D ; Jump forward if the last complete pass has been made already. + OR E + JR Z,BE_END + LD A,C ; Fetch the saved value. + LD C,L ; Reset the C register. + DEC DE ; Decrease the pass counter. + JP (IX) ; Jump back to the required starting location of the loop. +; +; The parameters for the second half-cycle are set up. +; +BE_AGAIN: + LD C,L ; Reset the C register. + INC C ; Add 16 T states as this path is shorter. + JP (IX) ; Jump back. +BE_END: + EI + POP IX + RET +; +; STANDARD ONE SECOND TONE TABLES AT 1MHZ (UNCOMPENSATED). FOR SPK_BEEPER, FIRST WORD LOADED INTO DE, SECOND INTO HL +; EXCEL SPREADSHEET FOR CALCULATION CAN BE FOUND HERE: +; https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=boards:sbc:sbc_v2:sbc_v2-004:spk_beep_tuntbl.xlsx +; +SPK_TUNTBL: +#IF (CPUOSC=1000000) + .DW $10, $1DDD ; C0 + .DW $11, $1C31 ; C + .DW $12, $1A9B ; D0 + .DW $13, $191A ; D + .DW $14, $17B3 ; E0 + .DW $15, $165E ; F0 + .DW $17, $151E ; F + .DW $18, $13EE ; G0 + .DW $19, $12CF ; G + .DW $1B, $11C1 ; A0 + .DW $1D, $10C1 ; A + .DW $1E, $FD1 ; B0 + .DW $20, $EEE ; C1 + .DW $22, $E17 ; C + .DW $24, $D4D ; D1 + .DW $26, $C8E ; D + .DW $29, $BD9 ; E1 + .DW $2B, $B2F ; F1 + .DW $2E, $A8E ; F + .DW $31, $9F7 ; G1 + .DW $33, $968 ; G + .DW $37, $8E0 ; A1 + .DW $3A, $861 ; A + .DW $3D, $7E8 ; B1 + .DW $41, $777 ; C2 + .DW $45, $70B ; C + .DW $49, $6A6 ; D2 + .DW $4D, $647 ; D + .DW $52, $5EC ; E2 + .DW $57, $597 ; F2 + .DW $5C, $547 ; F + .DW $62, $4FB ; G2 + .DW $67, $4B3 ; G + .DW $6E, $470 ; A2 + .DW $74, $430 ; A + .DW $7B, $3F4 ; B2 + .DW $82, $3BB ; C3 + .DW $8A, $385 ; C + .DW $92, $353 ; D3 + .DW $9B, $323 ; D + .DW $A4, $2F6 ; E3 + .DW $AE, $2CB ; F3 + .DW $B9, $2A3 ; F + .DW $C4, $27D ; G3 + .DW $CF, $259 ; G + .DW $DC, $238 ; A3 + .DW $E9, $218 ; A + .DW $F6, $1FA ; B3 + .DW $105, $1DD ; C4 + .DW $115, $1C2 ; C + .DW $125, $1A9 ; D4 + .DW $137, $191 ; D + .DW $149, $17B ; E4 + .DW $15D, $165 ; F4 + .DW $171, $151 ; F + .DW $188, $13E ; G4 + .DW $19F, $12C ; G + .DW $1B8, $11C ; A4 + .DW $1D2, $10C ; A + .DW $1ED, $FD ; B4 + .DW $20B, $EE ; C5 + .DW $22A, $E1 ; C + .DW $24B, $D4 ; D5 + .DW $26E, $C8 ; D + .DW $293, $BD ; E5 + .DW $2BA, $B2 ; F5 + .DW $2E3, $A8 ; F + .DW $30F, $9F ; G5 + .DW $33E, $96 ; G + .DW $370, $8E ; A5 + .DW $3A4, $86 ; A + .DW $3DB, $7E ; B5 + .DW $416, $77 ; C6 + .DW $454, $70 ; C + .DW $496, $6A ; D6 + .DW $4DC, $64 ; D + .DW $526, $5E ; E6 + .DW $574, $59 ; F6 + .DW $5C7, $54 ; F + .DW $61F, $4F ; G6 + .DW $67D, $4B ; G + .DW $6E0, $47 ; A6 + .DW $748, $43 ; A + .DW $7B7, $3F ; B6 + .DW $82D, $3B ; C7 + .DW $8A9, $38 ; C + .DW $92D, $35 ; D7 + .DW $9B9, $32 ; D + .DW $A4D, $2F ; E7 + .DW $AE9, $2C ; F7 + .DW $B8F, $2A ; F + .DW $C3F, $27 ; G7 + .DW $CFA, $25 ; G + .DW $DC0, $23 ; A7 + .DW $E91, $21 ; A + .DW $F6F, $1F ; B7 + .DW $105A, $1D ; C8 + .DW $1152, $1C ; C + .DW $125A, $1A ; D8 + .DW $1372, $19 ; D + .DW $149A, $17 ; E8 + .DW $15D3, $16 ; F8 + .DW $171F, $15 ; F + .DW $187F, $13 ; G8 + .DW $19F4, $12 ; G + .DW $1B80, $11 ; A8 + .DW $1D22, $10 ; A + .DW $1EDE, $F ; B8 +#ENDIF +#IF (CPUOSC=2000000) + .DW $10, $3BBA ; C0 + .DW $11, $3862 ; C + .DW $12, $3537 ; D0 + .DW $13, $3235 ; D + .DW $14, $2F67 ; E0 + .DW $15, $2CBC ; F0 + .DW $17, $2A3D ; F + .DW $18, $27DC ; G0 + .DW $19, $259E ; G + .DW $1B, $2382 ; A0 + .DW $1D, $2183 ; A + .DW $1E, $1FA2 ; B0 + .DW $20, $1DDD ; C1 + .DW $22, $1C2F ; C + .DW $24, $1A9A ; D1 + .DW $26, $191C ; D + .DW $29, $17B3 ; E1 + .DW $2B, $165F ; F1 + .DW $2E, $151D ; F + .DW $31, $13EE ; G1 + .DW $33, $12D0 ; G + .DW $37, $11C1 ; A1 + .DW $3A, $10C2 ; A + .DW $3D, $FD1 ; B1 + .DW $41, $EEE ; C2 + .DW $45, $E17 ; C + .DW $49, $D4D ; D2 + .DW $4D, $C8E ; D + .DW $52, $BD9 ; E2 + .DW $57, $B2F ; F2 + .DW $5C, $A8E ; F + .DW $62, $9F7 ; G2 + .DW $67, $967 ; G + .DW $6E, $8E0 ; A2 + .DW $74, $861 ; A + .DW $7B, $7E8 ; B2 + .DW $82, $777 ; C3 + .DW $8A, $70B ; C + .DW $92, $6A6 ; D3 + .DW $9B, $647 ; D + .DW $A4, $5EC ; E3 + .DW $AE, $597 ; F3 + .DW $B9, $547 ; F + .DW $C4, $4FB ; G3 + .DW $CF, $4B3 ; G + .DW $DC, $470 ; A3 + .DW $E9, $430 ; A + .DW $F6, $3F4 ; B3 + .DW $105, $3BB ; C4 + .DW $115, $385 ; C + .DW $125, $353 ; D4 + .DW $137, $323 ; D + .DW $149, $2F6 ; E4 + .DW $15D, $2CB ; F4 + .DW $171, $2A3 ; F + .DW $188, $27D ; G4 + .DW $19F, $259 ; G + .DW $1B8, $238 ; A4 + .DW $1D2, $218 ; A + .DW $1ED, $1FA ; B4 + .DW $20B, $1DD ; C5 + .DW $22A, $1C2 ; C + .DW $24B, $1A9 ; D5 + .DW $26E, $191 ; D + .DW $293, $17B ; E5 + .DW $2BA, $165 ; F5 + .DW $2E3, $151 ; F + .DW $30F, $13E ; G5 + .DW $33E, $12C ; G + .DW $370, $11C ; A5 + .DW $3A4, $10C ; A + .DW $3DB, $FD ; B5 + .DW $416, $EE ; C6 + .DW $454, $E1 ; C + .DW $496, $D4 ; D6 + .DW $4DC, $C8 ; D + .DW $526, $BD ; E6 + .DW $574, $B2 ; F6 + .DW $5C7, $A8 ; F + .DW $61F, $9F ; G6 + .DW $67D, $96 ; G + .DW $6E0, $8E ; A6 + .DW $748, $86 ; A + .DW $7B7, $7E ; B6 + .DW $82D, $77 ; C7 + .DW $8A9, $70 ; C + .DW $92D, $6A ; D7 + .DW $9B9, $64 ; D + .DW $A4D, $5E ; E7 + .DW $AE9, $59 ; F7 + .DW $B8F, $54 ; F + .DW $C3F, $4F ; G7 + .DW $CFA, $4B ; G + .DW $DC0, $47 ; A7 + .DW $E91, $43 ; A + .DW $F6F, $3F ; B7 + .DW $105A, $3B ; C8 + .DW $1152, $38 ; C + .DW $125A, $35 ; D8 + .DW $1372, $32 ; D + .DW $149A, $2F ; E8 + .DW $15D3, $2C ; F8 + .DW $171F, $2A ; F + .DW $187F, $27 ; G8 + .DW $19F4, $25 ; G + .DW $1B80, $23 ; A8 + .DW $1D22, $21 ; A + .DW $1EDE, $37; B8 +#ENDIF +#IF (CPUOSC=10000000) + .DW $0, $0000 ; .DW $10, $12AA4 ; C0 + .DW $0, $0000 ; .DW $11, $119EA ; C + .DW $0, $0000 ; .DW $12, $10A17 ; D0 + .DW $13, $FB0B ; D + .DW $14, $ED07 ; E0 + .DW $15, $DFAC ; F0 + .DW $17, $D331 ; F + .DW $18, $C74C ; G0 + .DW $19, $BC17 ; G + .DW $1B, $B18E ; A0 + .DW $1D, $A790 ; A + .DW $1E, $9E2C ; B0 + .DW $20, $9552 ; C1 + .DW $22, $8CEB ; C + .DW $24, $8502 ; D1 + .DW $26, $7D8D ; D + .DW $29, $7683 ; E1 + .DW $2B, $6FDC ; F1 + .DW $2E, $6993 ; F + .DW $31, $63A6 ; G1 + .DW $33, $5E10 ; G + .DW $37, $58C7 ; A1 + .DW $3A, $53CB ; A + .DW $3D, $4F16 ; B1 + .DW $41, $4AA6 ; C2 + .DW $45, $4675 ; C + .DW $49, $4281 ; D2 + .DW $4D, $3EC6 ; D + .DW $52, $3B40 ; E2 + .DW $57, $37EC ; F2 + .DW $5C, $34C9 ; F + .DW $62, $31D3 ; G2 + .DW $67, $2F06 ; G + .DW $6E, $2C63 ; A2 + .DW $74, $29E5 ; A + .DW $7B, $278B ; B2 + .DW $82, $2553 ; C3 + .DW $8A, $233B ; C + .DW $92, $2141 ; D3 + .DW $9B, $1F63 ; D + .DW $A4, $1DA0 ; E3 + .DW $AE, $1BF6 ; F3 + .DW $B9, $1A64 ; F + .DW $C4, $18E9 ; G3 + .DW $CF, $1783 ; G + .DW $DC, $1631 ; A3 + .DW $E9, $14F2 ; A + .DW $F6, $13C5 ; B3 + .DW $105, $12A9 ; C4 + .DW $115, $119D ; C + .DW $125, $10A0 ; D4 + .DW $137, $FB1 ; D + .DW $149, $ED0 ; E4 + .DW $15D, $DFB ; F4 + .DW $171, $D32 ; F + .DW $188, $C74 ; G4 + .DW $19F, $BC1 ; G + .DW $1B8, $B18 ; A4 + .DW $1D2, $A79 ; A + .DW $1ED, $9E2 ; B4 + .DW $20B, $954 ; C5 + .DW $22A, $8CE ; C + .DW $24B, $850 ; D5 + .DW $26E, $7D8 ; D + .DW $293, $768 ; E5 + .DW $2BA, $6FD ; F5 + .DW $2E3, $699 ; F + .DW $30F, $63A ; G5 + .DW $33E, $5E0 ; G + .DW $370, $58C ; A5 + .DW $3A4, $53C ; A + .DW $3DB, $4F1 ; B5 + .DW $416, $4AA ; C6 + .DW $454, $467 ; C + .DW $496, $428 ; D6 + .DW $4DC, $3EC ; D + .DW $526, $3B4 ; E6 + .DW $574, $37E ; F6 + .DW $5C7, $34C ; F + .DW $61F, $31D ; G6 + .DW $67D, $2F0 ; G + .DW $6E0, $2C6 ; A6 + .DW $748, $29E ; A + .DW $7B7, $278 ; B6 + .DW $82D, $255 ; C7 + .DW $8A9, $233 ; C + .DW $92D, $214 ; D7 + .DW $9B9, $1F6 ; D + .DW $A4D, $1DA ; E7 + .DW $AE9, $1BF ; F7 + .DW $B8F, $1A6 ; F + .DW $C3F, $18E ; G7 + .DW $CFA, $178 ; G + .DW $DC0, $163 ; A7 + .DW $E91, $14F ; A + .DW $F6F, $13C ; B7 + .DW $105A, $12A ; C8 + .DW $1152, $119 ; C + .DW $125A, $10A ; D8 + .DW $1372, $FB ; D + .DW $149A, $ED ; E8 + .DW $15D3, $DF ; F8 + .DW $171F, $D3 ; F + .DW $187F, $C7 ; G8 + .DW $19F4, $BC ; G + .DW $1B80, $B1 ; A8 + .DW $1D22, $A7 ; A + .DW $1EDE, $9E ; B8 +#ENDIF + +SPK_NUMNOT .EQU ($-SPK_TUNTBL)/4 + TXT_READY: .DB CR,LF .TEXT "BASIC READY " .DB CR,LF,0FFH -SLACK .EQU (BAS_END - $) - .FILL SLACK,00H -; -BAS_STACK .EQU $ +SLACK .EQU (BAS_END - $) + .FILL SLACK,00H ; - .ECHO "BASIC space remaining: " - .ECHO SLACK - .ECHO " bytes.\n" + .ECHO "BASIC space remaining: " + .ECHO SLACK + .ECHO " bytes.\n" .end From 642953eaf15cd4781c5cb88108f5bf988917cd81 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 7 Sep 2019 21:09:00 +0800 Subject: [PATCH 02/11] Update nascom.asm Add PLAY duration operand --- Source/HBIOS/nascom.asm | 244 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 235 insertions(+), 9 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index 2138ccb9..6f105081 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4416,7 +4416,7 @@ OUTNCR: CALL OUTC ; Output character in A ; --------------------------------------------------------------------------------------- -; PLAY N ; PLAY NOTE N +; PLAY N,D ; PLAY NOTE N, DURATION D PLAY: CALL GETNUM ; GET NOTE TO PLAY CALL DEINT ; ITS IN DE @@ -4433,29 +4433,38 @@ PLAY: CALL GETNUM ; GET NOTE TO PLAY ADD HL,HL ADD HL,DE ; ITS IN HL - CALL SPK_BEEP + EX (SP),HL ; RESTORE SYNTAX POINTER + ; IN HL. DE ON STACK + + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' + CALL GETINT ; GET DURATION + + EX (SP),HL ; RECALL NOTE ENTRY + ; A = DURATION + CALL SPK_BEEP - POP HL ; RESTORE SYNTAX POINTER + POP HL ; RECALL SYNTAX POINTER RET SPK_BEEP: - LD A,(HL) ; LOAD 1ST ARG - INC HL ; IN DE + LD A,(HL) ; LOAD 1ST ARG + INC HL ; IN DE LD E,A LD A,(HL) INC HL LD D,A ; - LD A,(HL) ; LOAD 2ND ARG - INC HL ; IN BC + LD A,(HL) ; LOAD 2ND ARG + INC HL ; IN BC LD C,A LD A,(HL) INC HL LD B,A - PUSH BC ; SETUP ARG IN HL + PUSH BC ; SETUP ARG IN HL POP HL ; - CALL SPK_BEEPER ; PLAY + CALL SPK_BEEPER ; PLAY ; RET ; @@ -4754,6 +4763,223 @@ SPK_TUNTBL: .DW $1D22, $21 ; A .DW $1EDE, $37; B8 #ENDIF +#IF (CPUOSC=4000000) + .DW $10, $3BBA ; C0 + .DW $11, $3862 ; C + .DW $12, $3537 ; D0 + .DW $13, $3235 ; D + .DW $14, $2F67 ; E0 + .DW $15, $2CBC ; F0 + .DW $17, $2A3D ; F + .DW $18, $27DC ; G0 + .DW $19, $259E ; G + .DW $1B, $2382 ; A0 + .DW $1D, $2183 ; A + .DW $1E, $1FA2 ; B0 + .DW $20, $1DDD ; C1 + .DW $22, $1C2F ; C + .DW $24, $1A9A ; D1 + .DW $26, $191C ; D + .DW $29, $17B3 ; E1 + .DW $2B, $165F ; F1 + .DW $2E, $151D ; F + .DW $31, $13EE ; G1 + .DW $33, $12D0 ; G + .DW $37, $11C1 ; A1 + .DW $3A, $10C2 ; A + .DW $3D, $FD1 ; B1 + .DW $41, $EEE ; C2 + .DW $45, $E17 ; C + .DW $49, $D4D ; D2 + .DW $4D, $C8E ; D + .DW $52, $BD9 ; E2 + .DW $57, $B2F ; F2 + .DW $5C, $A8E ; F + .DW $62, $9F7 ; G2 + .DW $67, $967 ; G + .DW $6E, $8E0 ; A2 + .DW $74, $861 ; A + .DW $7B, $7E8 ; B2 + .DW $82, $777 ; C3 + .DW $8A, $70B ; C + .DW $92, $6A6 ; D3 + .DW $9B, $647 ; D + .DW $A4, $5EC ; E3 + .DW $AE, $597 ; F3 + .DW $B9, $547 ; F + .DW $C4, $4FB ; G3 + .DW $CF, $4B3 ; G + .DW $DC, $470 ; A3 + .DW $E9, $430 ; A + .DW $F6, $3F4 ; B3 + .DW $105, $3BB ; C4 + .DW $115, $385 ; C + .DW $125, $353 ; D4 + .DW $137, $323 ; D + .DW $149, $2F6 ; E4 + .DW $15D, $2CB ; F4 + .DW $171, $2A3 ; F + .DW $188, $27D ; G4 + .DW $19F, $259 ; G + .DW $1B8, $238 ; A4 + .DW $1D2, $218 ; A + .DW $1ED, $1FA ; B4 + .DW $20B, $1DD ; C5 + .DW $22A, $1C2 ; C + .DW $24B, $1A9 ; D5 + .DW $26E, $191 ; D + .DW $293, $17B ; E5 + .DW $2BA, $165 ; F5 + .DW $2E3, $151 ; F + .DW $30F, $13E ; G5 + .DW $33E, $12C ; G + .DW $370, $11C ; A5 + .DW $3A4, $10C ; A + .DW $3DB, $FD ; B5 + .DW $416, $EE ; C6 + .DW $454, $E1 ; C + .DW $496, $D4 ; D6 + .DW $4DC, $C8 ; D + .DW $526, $BD ; E6 + .DW $574, $B2 ; F6 + .DW $5C7, $A8 ; F + .DW $61F, $9F ; G6 + .DW $67D, $96 ; G + .DW $6E0, $8E ; A6 + .DW $748, $86 ; A + .DW $7B7, $7E ; B6 + .DW $82D, $77 ; C7 + .DW $8A9, $70 ; C + .DW $92D, $6A ; D7 + .DW $9B9, $64 ; D + .DW $A4D, $5E ; E7 + .DW $AE9, $59 ; F7 + .DW $B8F, $54 ; F + .DW $C3F, $4F ; G7 + .DW $CFA, $4B ; G + .DW $DC0, $47 ; A7 + .DW $E91, $43 ; A + .DW $F6F, $3F ; B7 + .DW $105A, $3B ; C8 + .DW $1152, $38 ; C + .DW $125A, $35 ; D8 + .DW $1372, $32 ; D + .DW $149A, $2F ; E8 + .DW $15D3, $2C ; F8 + .DW $171F, $2A ; F + .DW $187F, $27 ; G8 + .DW $19F4, $25 ; G + .DW $1B80, $23 ; A8 + .DW $1D22, $21 ; A + .DW $10, $12AA4 ; C0 + .DW $11, $119EA ; C + .DW $12, $10A17 ; D0 + .DW $13, $FB0B ; D + .DW $14, $ED07 ; E0 + .DW $15, $DFAC ; F0 + .DW $17, $D331 ; F + .DW $18, $C74C ; G0 + .DW $19, $BC17 ; G + .DW $1B, $B18E ; A0 + .DW $1D, $A790 ; A + .DW $1E, $9E2C ; B0 + .DW $20, $9552 ; C1 + .DW $22, $8CEB ; C + .DW $24, $8502 ; D1 + .DW $26, $7D8D ; D + .DW $29, $7683 ; E1 + .DW $2B, $6FDC ; F1 + .DW $2E, $6993 ; F + .DW $31, $63A6 ; G1 + .DW $33, $5E10 ; G + .DW $37, $58C7 ; A1 + .DW $3A, $53CB ; A + .DW $3D, $4F16 ; B1 + .DW $41, $4AA6 ; C2 + .DW $45, $4675 ; C + .DW $49, $4281 ; D2 + .DW $4D, $3EC6 ; D + .DW $52, $3B40 ; E2 + .DW $57, $37EC ; F2 + .DW $5C, $34C9 ; F + .DW $62, $31D3 ; G2 + .DW $67, $2F06 ; G + .DW $6E, $2C63 ; A2 + .DW $74, $29E5 ; A + .DW $7B, $278B ; B2 + .DW $82, $2553 ; C3 + .DW $8A, $233B ; C + .DW $92, $2141 ; D3 + .DW $9B, $1F63 ; D + .DW $A4, $1DA0 ; E3 + .DW $AE, $1BF6 ; F3 + .DW $B9, $1A64 ; F + .DW $C4, $18E9 ; G3 + .DW $CF, $1783 ; G + .DW $DC, $1631 ; A3 + .DW $E9, $14F2 ; A + .DW $F6, $13C5 ; B3 + .DW $105, $12A9 ; C4 + .DW $115, $119D ; C + .DW $125, $10A0 ; D4 + .DW $137, $FB1 ; D + .DW $149, $ED0 ; E4 + .DW $15D, $DFB ; F4 + .DW $171, $D32 ; F + .DW $188, $C74 ; G4 + .DW $19F, $BC1 ; G + .DW $1B8, $B18 ; A4 + .DW $1D2, $A79 ; A + .DW $1ED, $9E2 ; B4 + .DW $20B, $954 ; C5 + .DW $22A, $8CE ; C + .DW $24B, $850 ; D5 + .DW $26E, $7D8 ; D + .DW $293, $768 ; E5 + .DW $2BA, $6FD ; F5 + .DW $2E3, $699 ; F + .DW $30F, $63A ; G5 + .DW $33E, $5E0 ; G + .DW $370, $58C ; A5 + .DW $3A4, $53C ; A + .DW $3DB, $4F1 ; B5 + .DW $416, $4AA ; C6 + .DW $454, $467 ; C + .DW $496, $428 ; D6 + .DW $4DC, $3EC ; D + .DW $526, $3B4 ; E6 + .DW $574, $37E ; F6 + .DW $5C7, $34C ; F + .DW $61F, $31D ; G6 + .DW $67D, $2F0 ; G + .DW $6E0, $2C6 ; A6 + .DW $748, $29E ; A + .DW $7B7, $278 ; B6 + .DW $82D, $255 ; C7 + .DW $8A9, $233 ; C + .DW $92D, $214 ; D7 + .DW $9B9, $1F6 ; D + .DW $A4D, $1DA ; E7 + .DW $AE9, $1BF ; F7 + .DW $B8F, $1A6 ; F + .DW $C3F, $18E ; G7 + .DW $CFA, $178 ; G + .DW $DC0, $163 ; A7 + .DW $E91, $14F ; A + .DW $F6F, $13C ; B7 + .DW $105A, $12A ; C8 + .DW $1152, $119 ; C + .DW $125A, $10A ; D8 + .DW $1372, $FB ; D + .DW $149A, $ED ; E8 + .DW $15D3, $DF ; F8 + .DW $171F, $D3 ; F + .DW $187F, $C7 ; G8 + .DW $19F4, $BC ; G + .DW $1B80, $B1 ; A8 + .DW $1D22, $A7 ; A + .DW $1EDE, $9E ; B8 +#ENDIF #IF (CPUOSC=10000000) .DW $0, $0000 ; .DW $10, $12AA4 ; C0 .DW $0, $0000 ; .DW $11, $119EA ; C From 6c48811167c71d72e55a47a2a65bf49bc4b496a4 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 8 Sep 2019 00:06:19 +0800 Subject: [PATCH 03/11] Update nascom.asm --- Source/HBIOS/nascom.asm | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index 6f105081..f4cb995d 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4416,7 +4416,7 @@ OUTNCR: CALL OUTC ; Output character in A ; --------------------------------------------------------------------------------------- -; PLAY N,D ; PLAY NOTE N, DURATION D +; PLAY N,D ; PLAY NOTE N, DURATION DIVIDER PLAY: CALL GETNUM ; GET NOTE TO PLAY CALL DEINT ; ITS IN DE @@ -4442,12 +4442,14 @@ PLAY: CALL GETNUM ; GET NOTE TO PLAY EX (SP),HL ; RECALL NOTE ENTRY ; A = DURATION - CALL SPK_BEEP + CALL SPK_BEEP POP HL ; RECALL SYNTAX POINTER RET SPK_BEEP: + PUSH AF ; SAVE DURATION + LD A,(HL) ; LOAD 1ST ARG INC HL ; IN DE LD E,A @@ -4463,6 +4465,24 @@ SPK_BEEP: LD B,A PUSH BC ; SETUP ARG IN HL POP HL + +DIV_HL_C: ; DIVIDE THE NOTE + POP BC ; BY DURATION +; JR DIV_SKIP + + LD C,B + XOR A + LD B,16 +DIV_HL_LP: + ADD HL,HL + RLA + JR C,$+5 + CP C + JR C,$+4 + SUB C + INC L + DJNZ DIV_HL_LP +DIV_SKIP: ; CALL SPK_BEEPER ; PLAY ; From c57c3527d20b202cb90fa87ff34adecc9332a798 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 15 Sep 2019 12:12:18 +0800 Subject: [PATCH 04/11] Update nascom.asm Add code to start calculating duration based on clock frequency provided by hbios --- Source/HBIOS/nascom.asm | 779 ++++++++++------------------------------ 1 file changed, 190 insertions(+), 589 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index f4cb995d..9278a227 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4416,39 +4416,44 @@ OUTNCR: CALL OUTC ; Output character in A ; --------------------------------------------------------------------------------------- -; PLAY N,D ; PLAY NOTE N, DURATION DIVIDER +; PLAY O,N,D ; PLAY OCTAVE 0-7, NOTE N (0-11), DURATION (1-8) -PLAY: CALL GETNUM ; GET NOTE TO PLAY - CALL DEINT ; ITS IN DE +PLAY: CALL GETINT ; GET OCTAVE + PUSH AF ; AND SAVE - LD A,SPK_NUMNOT-1 ; EXIT IF NOTE - CP E ; OUT OF RANGE - RET M + CALL CHKSYN ; Make sure ',' follows + .BYTE ',' + CALL GETINT ; GET NOTE PUSH HL ; SAVE SYNTAX POINTER - - LD HL,SPK_TUNTBL ; POINT TO NOTE ENTRY - EX DE,HL - ADD HL,HL - ADD HL,HL + LD L,A + LD H,0 + ADD HL,HL ; X2 + ADD HL,HL ; X4 + LD DE,SPK_TUNTBL ; POINT TO NOTE ENTRY ADD HL,DE ; ITS IN HL EX (SP),HL ; RESTORE SYNTAX POINTER - ; IN HL. DE ON STACK + ; IN HL. NOTE PTR ON STACK CALL CHKSYN ; Make sure ',' follows .BYTE ',' CALL GETINT ; GET DURATION - EX (SP),HL ; RECALL NOTE ENTRY - ; A = DURATION + POP DE ; GET NOTE PTR IN DE + EX (SP),HL ; GET OCTAVE IN HL. SYTAX POINTER ON STACK + EX DE,HL ; PUT NOTE PTR IN HL, OCTAVE IN DE + + PUSH BC + LD B,D CALL SPK_BEEP - + POP BC + POP HL ; RECALL SYNTAX POINTER RET SPK_BEEP: - PUSH AF ; SAVE DURATION +; PUSH AF ; SAVE DURATION LD A,(HL) ; LOAD 1ST ARG INC HL ; IN DE @@ -4457,6 +4462,23 @@ SPK_BEEP: INC HL LD D,A ; +; SRL D ; DE / 8 +; RRC E +; SRL D +; RRC E +; SRL D ; DE IS FREQUECY OF +; RRC E ; NOTE IN OCTAVE 7 + + LD A,7+3 + SUB B + LD C,A +SPK_OCTDIV: + SRL D + RRC E + DJNZ SPK_OCTDIV +SPK_OCTOK: + + LD A,(HL) ; LOAD 2ND ARG INC HL ; IN BC LD C,A @@ -4466,25 +4488,8 @@ SPK_BEEP: PUSH BC ; SETUP ARG IN HL POP HL -DIV_HL_C: ; DIVIDE THE NOTE - POP BC ; BY DURATION -; JR DIV_SKIP - - LD C,B - XOR A - LD B,16 -DIV_HL_LP: - ADD HL,HL - RLA - JR C,$+5 - CP C - JR C,$+4 - SUB C - INC L - DJNZ DIV_HL_LP -DIV_SKIP: -; CALL SPK_BEEPER ; PLAY + CALL TEST_FRQ ; RET ; @@ -4557,567 +4562,163 @@ BE_END: EI POP IX RET + +TEST_FRQ: + PUSH HL + PUSH DE + LD BC,500 + PUSH BC ; BC CONTAINS FREQUENCY +; +; ADJUST DURATION BASED ON PROCESSOR SPEED +; +; DURATION = (CPUKHZ / 8) / FREQUENCY +; DURATION = (CPUKHZ * 1000 / 8 ) / FREQUENCY +; DURATION = (CPUKHZ * 125 ) / FREQUENCY +; DURATION = (CPUKHZ * 256 / 2 - CPUKHZ - (2 * CPUKHZ) ) / FREQUENCY + + LD B,BF_SYSGET ; GET CPU SPEED + LD C,BF_SYSGET_CPUINFO ; FROM HBIOS + RST 08 + + PUSH DE ; SAVE FOR CALCULATION + POP BC ; - CPUKHZ - (2 * CPUKHZ) + + LD H,E ; DEHL = HL * 256 + LD E,D + LD D,0 + LD L,D + + SRL E ; DEHL = DEHL / 2 + RR H + RR L + + SBC HL,BC ; DEHL = DEHL - CPUKHZ + JR NC,FRQ_ADJ1 + DEC DE +FRQ_ADJ1: + SLA C ; DEHL = DEHL - (2 * CPUKHZ) + RL B + SBC HL,BC + JR NC,FRQ_ADJ2 + DEC DE +FRQ_ADJ2: + + EX DE,HL ; SETUP REGISTERS FOR DIVIDE + PUSH DE + POP IX + POP BC ; RESTORE FREQUENCY (DIVISOR) + +DIV_3216: ; HLIX = HLIX / BC, DE = REMAINDER + LD DE,0 + LD A,32 +DIV_LP: ADD IX,IX + ADC HL,HL + EX DE,HL + ADC HL,HL + OR A + SBC HL,BC + INC IX + JR NC,DIV_CANSUB + ADD HL,BC + DEC IX +DIV_CANSUB: + EX DE,HL + DEC A + JR NZ, DIV_LP + +; PUSH HL +; POP BC +; CALL PRTHEXWORD +; PUSH IX +; POP BC +; CALL PRTHEXWORD + + POP DE + POP HL + + RET + +PRTHEXBYTE: + PUSH AF + PUSH DE + CALL HEXASCII + LD A,D + CALL MONOUT + LD A,E + CALL MONOUT + POP DE + POP AF + RET +; +; PRINT THE HEX WORD VALUE IN BC +; +PRTHEXWORD: + PUSH AF + LD A,B + CALL PRTHEXBYTE + LD A,C + CALL PRTHEXBYTE + POP AF + RET +; +; PRINT THE HEX DWORD VALUE IN DE:HL +; +PRTHEX32: + PUSH BC + PUSH DE + POP BC + CALL PRTHEXWORD + PUSH HL + POP BC + CALL PRTHEXWORD + POP BC + RET +; +; CONVERT BINARY VALUE IN A TO ASCII HEX CHARACTERS IN DE +; +HEXASCII: + LD D,A + CALL HEXCONV + LD E,A + LD A,D + RLCA + RLCA + RLCA + RLCA + CALL HEXCONV + LD D,A + RET +; +; CONVERT LOW NIBBLE OF A TO ASCII HEX +; +HEXCONV: + AND 0FH ;LOW NIBBLE ONLY + ADD A,90H + DAA + ADC A,40H + DAA + RET ; ; STANDARD ONE SECOND TONE TABLES AT 1MHZ (UNCOMPENSATED). FOR SPK_BEEPER, FIRST WORD LOADED INTO DE, SECOND INTO HL ; EXCEL SPREADSHEET FOR CALCULATION CAN BE FOUND HERE: ; https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=boards:sbc:sbc_v2:sbc_v2-004:spk_beep_tuntbl.xlsx ; +; FIRST WORD = C8 * 8 +; SPK_TUNTBL: -#IF (CPUOSC=1000000) - .DW $10, $1DDD ; C0 - .DW $11, $1C31 ; C - .DW $12, $1A9B ; D0 - .DW $13, $191A ; D - .DW $14, $17B3 ; E0 - .DW $15, $165E ; F0 - .DW $17, $151E ; F - .DW $18, $13EE ; G0 - .DW $19, $12CF ; G - .DW $1B, $11C1 ; A0 - .DW $1D, $10C1 ; A - .DW $1E, $FD1 ; B0 - .DW $20, $EEE ; C1 - .DW $22, $E17 ; C - .DW $24, $D4D ; D1 - .DW $26, $C8E ; D - .DW $29, $BD9 ; E1 - .DW $2B, $B2F ; F1 - .DW $2E, $A8E ; F - .DW $31, $9F7 ; G1 - .DW $33, $968 ; G - .DW $37, $8E0 ; A1 - .DW $3A, $861 ; A - .DW $3D, $7E8 ; B1 - .DW $41, $777 ; C2 - .DW $45, $70B ; C - .DW $49, $6A6 ; D2 - .DW $4D, $647 ; D - .DW $52, $5EC ; E2 - .DW $57, $597 ; F2 - .DW $5C, $547 ; F - .DW $62, $4FB ; G2 - .DW $67, $4B3 ; G - .DW $6E, $470 ; A2 - .DW $74, $430 ; A - .DW $7B, $3F4 ; B2 - .DW $82, $3BB ; C3 - .DW $8A, $385 ; C - .DW $92, $353 ; D3 - .DW $9B, $323 ; D - .DW $A4, $2F6 ; E3 - .DW $AE, $2CB ; F3 - .DW $B9, $2A3 ; F - .DW $C4, $27D ; G3 - .DW $CF, $259 ; G - .DW $DC, $238 ; A3 - .DW $E9, $218 ; A - .DW $F6, $1FA ; B3 - .DW $105, $1DD ; C4 - .DW $115, $1C2 ; C - .DW $125, $1A9 ; D4 - .DW $137, $191 ; D - .DW $149, $17B ; E4 - .DW $15D, $165 ; F4 - .DW $171, $151 ; F - .DW $188, $13E ; G4 - .DW $19F, $12C ; G - .DW $1B8, $11C ; A4 - .DW $1D2, $10C ; A - .DW $1ED, $FD ; B4 - .DW $20B, $EE ; C5 - .DW $22A, $E1 ; C - .DW $24B, $D4 ; D5 - .DW $26E, $C8 ; D - .DW $293, $BD ; E5 - .DW $2BA, $B2 ; F5 - .DW $2E3, $A8 ; F - .DW $30F, $9F ; G5 - .DW $33E, $96 ; G - .DW $370, $8E ; A5 - .DW $3A4, $86 ; A - .DW $3DB, $7E ; B5 - .DW $416, $77 ; C6 - .DW $454, $70 ; C - .DW $496, $6A ; D6 - .DW $4DC, $64 ; D - .DW $526, $5E ; E6 - .DW $574, $59 ; F6 - .DW $5C7, $54 ; F - .DW $61F, $4F ; G6 - .DW $67D, $4B ; G - .DW $6E0, $47 ; A6 - .DW $748, $43 ; A - .DW $7B7, $3F ; B6 - .DW $82D, $3B ; C7 - .DW $8A9, $38 ; C - .DW $92D, $35 ; D7 - .DW $9B9, $32 ; D - .DW $A4D, $2F ; E7 - .DW $AE9, $2C ; F7 - .DW $B8F, $2A ; F - .DW $C3F, $27 ; G7 - .DW $CFA, $25 ; G - .DW $DC0, $23 ; A7 - .DW $E91, $21 ; A - .DW $F6F, $1F ; B7 - .DW $105A, $1D ; C8 - .DW $1152, $1C ; C - .DW $125A, $1A ; D8 - .DW $1372, $19 ; D - .DW $149A, $17 ; E8 - .DW $15D3, $16 ; F8 - .DW $171F, $15 ; F - .DW $187F, $13 ; G8 - .DW $19F4, $12 ; G - .DW $1B80, $11 ; A8 - .DW $1D22, $10 ; A - .DW $1EDE, $F ; B8 -#ENDIF -#IF (CPUOSC=2000000) - .DW $10, $3BBA ; C0 - .DW $11, $3862 ; C - .DW $12, $3537 ; D0 - .DW $13, $3235 ; D - .DW $14, $2F67 ; E0 - .DW $15, $2CBC ; F0 - .DW $17, $2A3D ; F - .DW $18, $27DC ; G0 - .DW $19, $259E ; G - .DW $1B, $2382 ; A0 - .DW $1D, $2183 ; A - .DW $1E, $1FA2 ; B0 - .DW $20, $1DDD ; C1 - .DW $22, $1C2F ; C - .DW $24, $1A9A ; D1 - .DW $26, $191C ; D - .DW $29, $17B3 ; E1 - .DW $2B, $165F ; F1 - .DW $2E, $151D ; F - .DW $31, $13EE ; G1 - .DW $33, $12D0 ; G - .DW $37, $11C1 ; A1 - .DW $3A, $10C2 ; A - .DW $3D, $FD1 ; B1 - .DW $41, $EEE ; C2 - .DW $45, $E17 ; C - .DW $49, $D4D ; D2 - .DW $4D, $C8E ; D - .DW $52, $BD9 ; E2 - .DW $57, $B2F ; F2 - .DW $5C, $A8E ; F - .DW $62, $9F7 ; G2 - .DW $67, $967 ; G - .DW $6E, $8E0 ; A2 - .DW $74, $861 ; A - .DW $7B, $7E8 ; B2 - .DW $82, $777 ; C3 - .DW $8A, $70B ; C - .DW $92, $6A6 ; D3 - .DW $9B, $647 ; D - .DW $A4, $5EC ; E3 - .DW $AE, $597 ; F3 - .DW $B9, $547 ; F - .DW $C4, $4FB ; G3 - .DW $CF, $4B3 ; G - .DW $DC, $470 ; A3 - .DW $E9, $430 ; A - .DW $F6, $3F4 ; B3 - .DW $105, $3BB ; C4 - .DW $115, $385 ; C - .DW $125, $353 ; D4 - .DW $137, $323 ; D - .DW $149, $2F6 ; E4 - .DW $15D, $2CB ; F4 - .DW $171, $2A3 ; F - .DW $188, $27D ; G4 - .DW $19F, $259 ; G - .DW $1B8, $238 ; A4 - .DW $1D2, $218 ; A - .DW $1ED, $1FA ; B4 - .DW $20B, $1DD ; C5 - .DW $22A, $1C2 ; C - .DW $24B, $1A9 ; D5 - .DW $26E, $191 ; D - .DW $293, $17B ; E5 - .DW $2BA, $165 ; F5 - .DW $2E3, $151 ; F - .DW $30F, $13E ; G5 - .DW $33E, $12C ; G - .DW $370, $11C ; A5 - .DW $3A4, $10C ; A - .DW $3DB, $FD ; B5 - .DW $416, $EE ; C6 - .DW $454, $E1 ; C - .DW $496, $D4 ; D6 - .DW $4DC, $C8 ; D - .DW $526, $BD ; E6 - .DW $574, $B2 ; F6 - .DW $5C7, $A8 ; F - .DW $61F, $9F ; G6 - .DW $67D, $96 ; G - .DW $6E0, $8E ; A6 - .DW $748, $86 ; A - .DW $7B7, $7E ; B6 - .DW $82D, $77 ; C7 - .DW $8A9, $70 ; C - .DW $92D, $6A ; D7 - .DW $9B9, $64 ; D - .DW $A4D, $5E ; E7 - .DW $AE9, $59 ; F7 - .DW $B8F, $54 ; F - .DW $C3F, $4F ; G7 - .DW $CFA, $4B ; G - .DW $DC0, $47 ; A7 - .DW $E91, $43 ; A - .DW $F6F, $3F ; B7 - .DW $105A, $3B ; C8 - .DW $1152, $38 ; C - .DW $125A, $35 ; D8 - .DW $1372, $32 ; D - .DW $149A, $2F ; E8 - .DW $15D3, $2C ; F8 - .DW $171F, $2A ; F - .DW $187F, $27 ; G8 - .DW $19F4, $25 ; G - .DW $1B80, $23 ; A8 - .DW $1D22, $21 ; A - .DW $1EDE, $37; B8 -#ENDIF -#IF (CPUOSC=4000000) - .DW $10, $3BBA ; C0 - .DW $11, $3862 ; C - .DW $12, $3537 ; D0 - .DW $13, $3235 ; D - .DW $14, $2F67 ; E0 - .DW $15, $2CBC ; F0 - .DW $17, $2A3D ; F - .DW $18, $27DC ; G0 - .DW $19, $259E ; G - .DW $1B, $2382 ; A0 - .DW $1D, $2183 ; A - .DW $1E, $1FA2 ; B0 - .DW $20, $1DDD ; C1 - .DW $22, $1C2F ; C - .DW $24, $1A9A ; D1 - .DW $26, $191C ; D - .DW $29, $17B3 ; E1 - .DW $2B, $165F ; F1 - .DW $2E, $151D ; F - .DW $31, $13EE ; G1 - .DW $33, $12D0 ; G - .DW $37, $11C1 ; A1 - .DW $3A, $10C2 ; A - .DW $3D, $FD1 ; B1 - .DW $41, $EEE ; C2 - .DW $45, $E17 ; C - .DW $49, $D4D ; D2 - .DW $4D, $C8E ; D - .DW $52, $BD9 ; E2 - .DW $57, $B2F ; F2 - .DW $5C, $A8E ; F - .DW $62, $9F7 ; G2 - .DW $67, $967 ; G - .DW $6E, $8E0 ; A2 - .DW $74, $861 ; A - .DW $7B, $7E8 ; B2 - .DW $82, $777 ; C3 - .DW $8A, $70B ; C - .DW $92, $6A6 ; D3 - .DW $9B, $647 ; D - .DW $A4, $5EC ; E3 - .DW $AE, $597 ; F3 - .DW $B9, $547 ; F - .DW $C4, $4FB ; G3 - .DW $CF, $4B3 ; G - .DW $DC, $470 ; A3 - .DW $E9, $430 ; A - .DW $F6, $3F4 ; B3 - .DW $105, $3BB ; C4 - .DW $115, $385 ; C - .DW $125, $353 ; D4 - .DW $137, $323 ; D - .DW $149, $2F6 ; E4 - .DW $15D, $2CB ; F4 - .DW $171, $2A3 ; F - .DW $188, $27D ; G4 - .DW $19F, $259 ; G - .DW $1B8, $238 ; A4 - .DW $1D2, $218 ; A - .DW $1ED, $1FA ; B4 - .DW $20B, $1DD ; C5 - .DW $22A, $1C2 ; C - .DW $24B, $1A9 ; D5 - .DW $26E, $191 ; D - .DW $293, $17B ; E5 - .DW $2BA, $165 ; F5 - .DW $2E3, $151 ; F - .DW $30F, $13E ; G5 - .DW $33E, $12C ; G - .DW $370, $11C ; A5 - .DW $3A4, $10C ; A - .DW $3DB, $FD ; B5 - .DW $416, $EE ; C6 - .DW $454, $E1 ; C - .DW $496, $D4 ; D6 - .DW $4DC, $C8 ; D - .DW $526, $BD ; E6 - .DW $574, $B2 ; F6 - .DW $5C7, $A8 ; F - .DW $61F, $9F ; G6 - .DW $67D, $96 ; G - .DW $6E0, $8E ; A6 - .DW $748, $86 ; A - .DW $7B7, $7E ; B6 - .DW $82D, $77 ; C7 - .DW $8A9, $70 ; C - .DW $92D, $6A ; D7 - .DW $9B9, $64 ; D - .DW $A4D, $5E ; E7 - .DW $AE9, $59 ; F7 - .DW $B8F, $54 ; F - .DW $C3F, $4F ; G7 - .DW $CFA, $4B ; G - .DW $DC0, $47 ; A7 - .DW $E91, $43 ; A - .DW $F6F, $3F ; B7 - .DW $105A, $3B ; C8 - .DW $1152, $38 ; C - .DW $125A, $35 ; D8 - .DW $1372, $32 ; D - .DW $149A, $2F ; E8 - .DW $15D3, $2C ; F8 - .DW $171F, $2A ; F - .DW $187F, $27 ; G8 - .DW $19F4, $25 ; G - .DW $1B80, $23 ; A8 - .DW $1D22, $21 ; A - .DW $10, $12AA4 ; C0 - .DW $11, $119EA ; C - .DW $12, $10A17 ; D0 - .DW $13, $FB0B ; D - .DW $14, $ED07 ; E0 - .DW $15, $DFAC ; F0 - .DW $17, $D331 ; F - .DW $18, $C74C ; G0 - .DW $19, $BC17 ; G - .DW $1B, $B18E ; A0 - .DW $1D, $A790 ; A - .DW $1E, $9E2C ; B0 - .DW $20, $9552 ; C1 - .DW $22, $8CEB ; C - .DW $24, $8502 ; D1 - .DW $26, $7D8D ; D - .DW $29, $7683 ; E1 - .DW $2B, $6FDC ; F1 - .DW $2E, $6993 ; F - .DW $31, $63A6 ; G1 - .DW $33, $5E10 ; G - .DW $37, $58C7 ; A1 - .DW $3A, $53CB ; A - .DW $3D, $4F16 ; B1 - .DW $41, $4AA6 ; C2 - .DW $45, $4675 ; C - .DW $49, $4281 ; D2 - .DW $4D, $3EC6 ; D - .DW $52, $3B40 ; E2 - .DW $57, $37EC ; F2 - .DW $5C, $34C9 ; F - .DW $62, $31D3 ; G2 - .DW $67, $2F06 ; G - .DW $6E, $2C63 ; A2 - .DW $74, $29E5 ; A - .DW $7B, $278B ; B2 - .DW $82, $2553 ; C3 - .DW $8A, $233B ; C - .DW $92, $2141 ; D3 - .DW $9B, $1F63 ; D - .DW $A4, $1DA0 ; E3 - .DW $AE, $1BF6 ; F3 - .DW $B9, $1A64 ; F - .DW $C4, $18E9 ; G3 - .DW $CF, $1783 ; G - .DW $DC, $1631 ; A3 - .DW $E9, $14F2 ; A - .DW $F6, $13C5 ; B3 - .DW $105, $12A9 ; C4 - .DW $115, $119D ; C - .DW $125, $10A0 ; D4 - .DW $137, $FB1 ; D - .DW $149, $ED0 ; E4 - .DW $15D, $DFB ; F4 - .DW $171, $D32 ; F - .DW $188, $C74 ; G4 - .DW $19F, $BC1 ; G - .DW $1B8, $B18 ; A4 - .DW $1D2, $A79 ; A - .DW $1ED, $9E2 ; B4 - .DW $20B, $954 ; C5 - .DW $22A, $8CE ; C - .DW $24B, $850 ; D5 - .DW $26E, $7D8 ; D - .DW $293, $768 ; E5 - .DW $2BA, $6FD ; F5 - .DW $2E3, $699 ; F - .DW $30F, $63A ; G5 - .DW $33E, $5E0 ; G - .DW $370, $58C ; A5 - .DW $3A4, $53C ; A - .DW $3DB, $4F1 ; B5 - .DW $416, $4AA ; C6 - .DW $454, $467 ; C - .DW $496, $428 ; D6 - .DW $4DC, $3EC ; D - .DW $526, $3B4 ; E6 - .DW $574, $37E ; F6 - .DW $5C7, $34C ; F - .DW $61F, $31D ; G6 - .DW $67D, $2F0 ; G - .DW $6E0, $2C6 ; A6 - .DW $748, $29E ; A - .DW $7B7, $278 ; B6 - .DW $82D, $255 ; C7 - .DW $8A9, $233 ; C - .DW $92D, $214 ; D7 - .DW $9B9, $1F6 ; D - .DW $A4D, $1DA ; E7 - .DW $AE9, $1BF ; F7 - .DW $B8F, $1A6 ; F - .DW $C3F, $18E ; G7 - .DW $CFA, $178 ; G - .DW $DC0, $163 ; A7 - .DW $E91, $14F ; A - .DW $F6F, $13C ; B7 - .DW $105A, $12A ; C8 - .DW $1152, $119 ; C - .DW $125A, $10A ; D8 - .DW $1372, $FB ; D - .DW $149A, $ED ; E8 - .DW $15D3, $DF ; F8 - .DW $171F, $D3 ; F - .DW $187F, $C7 ; G8 - .DW $19F4, $BC ; G - .DW $1B80, $B1 ; A8 - .DW $1D22, $A7 ; A - .DW $1EDE, $9E ; B8 -#ENDIF -#IF (CPUOSC=10000000) - .DW $0, $0000 ; .DW $10, $12AA4 ; C0 - .DW $0, $0000 ; .DW $11, $119EA ; C - .DW $0, $0000 ; .DW $12, $10A17 ; D0 - .DW $13, $FB0B ; D - .DW $14, $ED07 ; E0 - .DW $15, $DFAC ; F0 - .DW $17, $D331 ; F - .DW $18, $C74C ; G0 - .DW $19, $BC17 ; G - .DW $1B, $B18E ; A0 - .DW $1D, $A790 ; A - .DW $1E, $9E2C ; B0 - .DW $20, $9552 ; C1 - .DW $22, $8CEB ; C - .DW $24, $8502 ; D1 - .DW $26, $7D8D ; D - .DW $29, $7683 ; E1 - .DW $2B, $6FDC ; F1 - .DW $2E, $6993 ; F - .DW $31, $63A6 ; G1 - .DW $33, $5E10 ; G - .DW $37, $58C7 ; A1 - .DW $3A, $53CB ; A - .DW $3D, $4F16 ; B1 - .DW $41, $4AA6 ; C2 - .DW $45, $4675 ; C - .DW $49, $4281 ; D2 - .DW $4D, $3EC6 ; D - .DW $52, $3B40 ; E2 - .DW $57, $37EC ; F2 - .DW $5C, $34C9 ; F - .DW $62, $31D3 ; G2 - .DW $67, $2F06 ; G - .DW $6E, $2C63 ; A2 - .DW $74, $29E5 ; A - .DW $7B, $278B ; B2 - .DW $82, $2553 ; C3 - .DW $8A, $233B ; C - .DW $92, $2141 ; D3 - .DW $9B, $1F63 ; D - .DW $A4, $1DA0 ; E3 - .DW $AE, $1BF6 ; F3 - .DW $B9, $1A64 ; F - .DW $C4, $18E9 ; G3 - .DW $CF, $1783 ; G - .DW $DC, $1631 ; A3 - .DW $E9, $14F2 ; A - .DW $F6, $13C5 ; B3 - .DW $105, $12A9 ; C4 - .DW $115, $119D ; C - .DW $125, $10A0 ; D4 - .DW $137, $FB1 ; D - .DW $149, $ED0 ; E4 - .DW $15D, $DFB ; F4 - .DW $171, $D32 ; F - .DW $188, $C74 ; G4 - .DW $19F, $BC1 ; G - .DW $1B8, $B18 ; A4 - .DW $1D2, $A79 ; A - .DW $1ED, $9E2 ; B4 - .DW $20B, $954 ; C5 - .DW $22A, $8CE ; C - .DW $24B, $850 ; D5 - .DW $26E, $7D8 ; D - .DW $293, $768 ; E5 - .DW $2BA, $6FD ; F5 - .DW $2E3, $699 ; F - .DW $30F, $63A ; G5 - .DW $33E, $5E0 ; G - .DW $370, $58C ; A5 - .DW $3A4, $53C ; A - .DW $3DB, $4F1 ; B5 - .DW $416, $4AA ; C6 - .DW $454, $467 ; C - .DW $496, $428 ; D6 - .DW $4DC, $3EC ; D - .DW $526, $3B4 ; E6 - .DW $574, $37E ; F6 - .DW $5C7, $34C ; F - .DW $61F, $31D ; G6 - .DW $67D, $2F0 ; G - .DW $6E0, $2C6 ; A6 - .DW $748, $29E ; A - .DW $7B7, $278 ; B6 - .DW $82D, $255 ; C7 - .DW $8A9, $233 ; C - .DW $92D, $214 ; D7 - .DW $9B9, $1F6 ; D - .DW $A4D, $1DA ; E7 - .DW $AE9, $1BF ; F7 - .DW $B8F, $1A6 ; F - .DW $C3F, $18E ; G7 - .DW $CFA, $178 ; G - .DW $DC0, $163 ; A7 - .DW $E91, $14F ; A - .DW $F6F, $13C ; B7 - .DW $105A, $12A ; C8 - .DW $1152, $119 ; C - .DW $125A, $10A ; D8 - .DW $1372, $FB ; D - .DW $149A, $ED ; E8 - .DW $15D3, $DF ; F8 - .DW $171F, $D3 ; F - .DW $187F, $C7 ; G8 - .DW $19F4, $BC ; G - .DW $1B80, $B1 ; A8 - .DW $1D22, $A7 ; A - .DW $1EDE, $9E ; B8 -#ENDIF - -SPK_NUMNOT .EQU ($-SPK_TUNTBL)/4 - -TXT_READY: - .DB CR,LF - .TEXT "BASIC READY " - .DB CR,LF,0FFH - + .DW $82D0, $012A ; C + .DW $8A97, $0111 ; C# + .DW $92D5, $010A ; D + .DW $9B90, $00FB ; D# + .DW $A4D0, $00ED ; E + .DW $AE9D, $00DF ; F + .DW $B8FF, $00D3 ; F# + .DW $C3FF, $00C7 ; G + .DW $CFA7, $00BC ; G# + .DW $DC00, $00B1 ; A + .DW $E914, $00A7 ; A# + .DW $F6F1, $009E ; B + SLACK .EQU (BAS_END - $) .FILL SLACK,00H ; From 587a6184003bb255e92cb6988455a47b7db2e45c Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 15 Sep 2019 16:44:41 +0800 Subject: [PATCH 05/11] Update nascom.asm Populate the frequency table with duration --- Source/HBIOS/nascom.asm | 139 ++++++++++++++++++++++++---------------- 1 file changed, 82 insertions(+), 57 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index 9278a227..33077a7f 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4430,7 +4430,7 @@ PLAY: CALL GETINT ; GET OCTAVE LD H,0 ADD HL,HL ; X2 ADD HL,HL ; X4 - LD DE,SPK_TUNTBL ; POINT TO NOTE ENTRY + LD DE,FRQDURTBL ; POINT TO NOTE ENTRY ADD HL,DE ; ITS IN HL EX (SP),HL ; RESTORE SYNTAX POINTER @@ -4455,41 +4455,34 @@ PLAY: CALL GETINT ; GET OCTAVE SPK_BEEP: ; PUSH AF ; SAVE DURATION + CALL SET_DUR_TBL + LD A,(HL) ; LOAD 1ST ARG INC HL ; IN DE - LD E,A - LD A,(HL) - INC HL - LD D,A -; -; SRL D ; DE / 8 -; RRC E -; SRL D -; RRC E -; SRL D ; DE IS FREQUECY OF -; RRC E ; NOTE IN OCTAVE 7 - - LD A,7+3 - SUB B - LD C,A -SPK_OCTDIV: + LD E,A ; WHICH IS THE + LD A,(HL) ; FREQUENCY FOR + 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: - LD A,(HL) ; LOAD 2ND ARG INC HL ; IN BC - LD C,A - LD A,(HL) + LD C,A ; WHICH IS THE + LD A,(HL) ; DURATION INC HL LD B,A PUSH BC ; SETUP ARG IN HL POP HL CALL SPK_BEEPER ; PLAY - CALL TEST_FRQ ; RET ; @@ -4563,19 +4556,21 @@ BE_END: POP IX RET -TEST_FRQ: - PUSH HL - PUSH DE - LD BC,500 - PUSH BC ; BC CONTAINS FREQUENCY ; -; ADJUST DURATION BASED ON PROCESSOR SPEED +; SETUP THE ONE SECOND TONE DURATION TABLE BASED ON PROCESSOR SPEED AND TONE FREQUENCY ; ; DURATION = (CPUKHZ / 8) / FREQUENCY ; DURATION = (CPUKHZ * 1000 / 8 ) / FREQUENCY ; DURATION = (CPUKHZ * 125 ) / FREQUENCY ; DURATION = (CPUKHZ * 256 / 2 - CPUKHZ - (2 * CPUKHZ) ) / FREQUENCY +SET_DUR_TBL: + PUSH IX + PUSH IY + PUSH HL + PUSH DE + PUSH BC + LD B,BF_SYSGET ; GET CPU SPEED LD C,BF_SYSGET_CPUINFO ; FROM HBIOS RST 08 @@ -4603,13 +4598,22 @@ FRQ_ADJ1: DEC DE FRQ_ADJ2: - EX DE,HL ; SETUP REGISTERS FOR DIVIDE - PUSH DE - POP IX - POP BC ; RESTORE FREQUENCY (DIVISOR) + PUSH HL ; DEHL = CPUKHZ / 8) / FREQUENCY + POP IX ; HLIX = DENOMINATOR + EX DE,HL + + LD IY,FRQDURTBL ; POINT TO THE TABLE WE + LD C,12 ; WANT TO READ AND UPDATE +TBL_LP: PUSH BC + + LD C,(IY+0) ; READ THE FREQUENCY + LD B,(IY+1) ; FROM THE TABLE IN BC + + PUSH IX ; STORE DENOMINATOR FOR NEXT LOOP + PUSH HL DIV_3216: ; HLIX = HLIX / BC, DE = REMAINDER - LD DE,0 + LD DE,0 LD A,32 DIV_LP: ADD IX,IX ADC HL,HL @@ -4624,20 +4628,42 @@ DIV_LP: ADD IX,IX DIV_CANSUB: EX DE,HL DEC A - JR NZ, DIV_LP + JR NZ, DIV_LP ; IX = RESULT + + PUSH IX ; SAVE RESULT IN TABLE + POP DE + LD (IY+2),E + LD (IY+3),D + + LD DE,4 ; POINT TO NEXT TABLE + ADD IY,DE ; ENTRY TO UPDATE -; PUSH HL -; POP BC -; CALL PRTHEXWORD -; PUSH IX -; POP BC -; CALL PRTHEXWORD + POP HL ; RETREIVE THE DENOMINATOR + POP IX ; FOR THE NEXT LOOP + POP BC ; RETREIVE THE + DJNZ TBL_LP ; LOOP COUNTER + + POP BC POP DE POP HL + POP IY + POP IX RET + LD A,' ' + CALL MONOUT + + LD HL,(FRQDURTBL+12) + PUSH HL + POP BC + CALL PRTHEXWORD + LD HL,(FRQDURTBL+14) + PUSH HL + POP BC + CALL PRTHEXWORD + PRTHEXBYTE: PUSH AF PUSH DE @@ -4699,25 +4725,24 @@ HEXCONV: DAA RET ; -; STANDARD ONE SECOND TONE TABLES AT 1MHZ (UNCOMPENSATED). FOR SPK_BEEPER, FIRST WORD LOADED INTO DE, SECOND INTO HL -; EXCEL SPREADSHEET FOR CALCULATION CAN BE FOUND HERE: -; https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=boards:sbc:sbc_v2:sbc_v2-004:spk_beep_tuntbl.xlsx +; ONE OCTAVE TONE TABLE IN FREQUENCY, DURATION FORMAT. TO COMPENSATE FOR DIFFERENT +; CPU FREQUENCIES THE DURATION IS CALCULATED AND POPULATED AT STARTUP. DIFFERENT OCTAVE +; AND DURATIONS ARE CALCULATE BY MODIFYING THE VALUES READ FROM THIS TABLE. ; -; FIRST WORD = C8 * 8 -; -SPK_TUNTBL: - .DW $82D0, $012A ; C - .DW $8A97, $0111 ; C# - .DW $92D5, $010A ; D - .DW $9B90, $00FB ; D# - .DW $A4D0, $00ED ; E - .DW $AE9D, $00DF ; F - .DW $B8FF, $00D3 ; F# - .DW $C3FF, $00C7 ; G - .DW $CFA7, $00BC ; G# - .DW $DC00, $00B1 ; A - .DW $E914, $00A7 ; A# - .DW $F6F1, $009E ; B +FRQDURTBL: + .DW $105A, $0 ; C + .DW $1152, $0 ; C# + .DW $125A, $0 ; D + .DW $1372, $0 ; D# + .DW $149A, $0 ; E + .DW $15D3, $0 ; F + .DW $171F, $0 ; F# + .DW $1875, $0 ; G + .DW $19F4, $0 ; G# + .DW $1B80, $0 ; A + .DW $1D22, $0 ; A# + .DW $1EDE, $0 ; B + SLACK .EQU (BAS_END - $) .FILL SLACK,00H From 8b1f7dcba0330175417321a42489a41dff1c925b Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 15 Sep 2019 19:42:17 +0800 Subject: [PATCH 06/11] Update nascom.asm Install frequency table as part of cold boot initialization --- Source/HBIOS/nascom.asm | 174 ++++++++++++++++++++-------------------- 1 file changed, 89 insertions(+), 85 deletions(-) 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 Date: Sun, 15 Sep 2019 23:12:18 +0800 Subject: [PATCH 07/11] Update nascom.asm --- Source/HBIOS/nascom.asm | 73 +++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 47 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index acae4864..d4b308bf 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4445,15 +4445,8 @@ PLAY: CALL GETINT ; GET OCTAVE EX (SP),HL ; GET OCTAVE IN HL. SYNTAX POINTER ON STACK EX DE,HL ; PUT NOTE PTR IN HL, OCTAVE IN DE - PUSH BC - LD B,D - CALL SPK_BEEP - POP BC - - POP HL ; RECALL SYNTAX POINTER - RET - -SPK_BEEP: + PUSH BC ; SAVE SYNTAX POINTER + LD B,D ; SAVE OCTAVE PUSH AF ; SAVE DURATION LD A,(HL) ; LOAD 1ST ARG @@ -4478,7 +4471,7 @@ SPK_BEEP: LD A,8 ; DIVIDE THE SUB B ; FREQENCY BASED JR Z,SPK_OCTOK ; ON THE OCTAVE - LD C,A ; REQUESTED + LD B,A SPK_OCTDIV: SRL D ; 0>D>C ; MULTIPLY THE RR E ; C>E>C ; DURATION EVERY @@ -4510,7 +4503,6 @@ SPK_OCTOK: ; DE Number of passes to make through the sound generation loop ; HL Loop delay parameter -SPK_BEEPER: PUSH IX DI ; Disable the interrupt for the duration of a 'beep'. LD A,L ; Save L temporarily. @@ -4561,6 +4553,8 @@ BE_AGAIN: ; The parameters for the second half-cycle are set up. BE_END: EI POP IX + POP BC ; RECALL SYNTAX POINTER + POP HL RET ; RTCVAL .DB 0 @@ -4573,12 +4567,6 @@ RTCVAL .DB 0 ; DURATION = (CPUKHZ * 256 / 2 - CPUKHZ - (2 * CPUKHZ) ) / FREQUENCY SET_DUR_TBL: -; PUSH IX -; PUSH IY -; PUSH HL -; PUSH DE -; PUSH BC - LD B,BF_SYSGET ; GET CPU SPEED LD C,BF_SYSGET_CPUINFO ; FROM HBIOS RST 08 @@ -4608,7 +4596,7 @@ FRQ_AJ2:PUSH HL ; DEHL = CPUKHZ / 8) / FREQUENCY EX DE,HL LD IY,FRQDURTBL ; POINT TO THE TABLE WE - LD C,12 ; WANT TO READ AND UPDATE + LD B,FDTBSIZ ; WANT TO READ AND UPDATE TBL_LP: PUSH BC LD C,(IY+0) ; READ THE FREQUENCY @@ -4647,26 +4635,22 @@ DIV_CANSUB: POP BC ; RETREIVE THE DJNZ TBL_LP ; LOOP COUNTER + RET -; POP BC -; POP DE -; POP HL -; POP IY -; POP IX +DISP: PUSH BC - RET +; PUSH DE +; POP BC +; CALL PRTHEXWORD +; +; PUSH DE +; POP BC +; CALL PRTHEXWORD - LD A,' ' + LD A,'*' CALL MONOUT - - LD HL,(FRQDURTBL+12) - PUSH HL POP BC - CALL PRTHEXWORD - LD HL,(FRQDURTBL+14) - PUSH HL - POP BC - CALL PRTHEXWORD + RET PRTHEXBYTE: PUSH AF @@ -4734,19 +4718,15 @@ HEXCONV: ; AND DURATIONS ARE CALCULATE BY MODIFYING THE VALUES READ FROM THIS TABLE. ; FRQDURTBL: - .DW $105A, $0 ; C - .DW $1152, $0 ; C# - .DW $125A, $0 ; D - .DW $1372, $0 ; D# - .DW $149A, $0 ; E - .DW $15D3, $0 ; F - .DW $171F, $0 ; F# - .DW $1875, $0 ; G - .DW $19F4, $0 ; G# - .DW $1B80, $0 ; A - .DW $1D22, $0 ; A# - .DW $1EDE, $0 ; B + .DW $105A, $0, $1152, $0 ; C, C# + .DW $125A, $0, $1372, $0 ; D, D# + .DW $149A, $0 ; E + .DW $15D3, $0, $171F, $0 ; F, F# + .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 - $) .FILL SLACK,00H @@ -4755,5 +4735,4 @@ SLACK .EQU (BAS_END - $) .ECHO SLACK .ECHO " bytes.\n" -.end - +.END From f77072fbd2f9333d47e8a38213ca9c9308c075ca Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Tue, 17 Sep 2019 22:43:52 +0800 Subject: [PATCH 08/11] Update nascom.asm --- Source/HBIOS/nascom.asm | 81 ++++++++++++++++++++++++++--------------- 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index d4b308bf..318ce65d 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4417,7 +4417,7 @@ OUTNCR: CALL OUTC ; Output character in A ; --------------------------------------------------------------------------------------- -; PLAY O,N,D ; PLAY OCTAVE 0-8, NOTE N (0-11), DURATION (1-8) +; PLAY O,N,D ; PLAY OCTAVE 0-8, NOTE N (0-11), DURATION (1-8) [1/8 - 8/8 SECONDS] PLAY: CALL GETINT ; GET OCTAVE PUSH AF ; AND SAVE @@ -4453,7 +4453,7 @@ PLAY: CALL GETINT ; GET OCTAVE INC HL ; IN DE LD E,A ; WHICH IS THE LD A,(HL) ; FREQUENCY FOR - INC HL ; THE EIGTH + INC HL ; THE EIGHTH LD D,A ; OCTAVE PUSH DE @@ -4469,7 +4469,7 @@ PLAY: CALL GETINT ; GET OCTAVE POP DE LD A,8 ; DIVIDE THE - SUB B ; FREQENCY BASED + SUB B ; FREQUENCY BASED JR Z,SPK_OCTOK ; ON THE OCTAVE LD B,A SPK_OCTDIV: @@ -4478,23 +4478,34 @@ SPK_OCTDIV: SLA L ; CC>C ; BCHL = BCHL / 2 + RR H ; C>H>C ; + RR L ; C>L>C ; + SRL C ; 0>C>C ; BCHL = BCHL / 2 + RR H ; C>H>C ; + RR L ; C>L>C ; + SRL C ; 0>C>C ; BCHL = BCHL / 2 + RR H ; C>H>C ; + RR L ; C>L>C ; + + POP DE ; ; The following SPK_BEEPER routine is a modification of code from ; "The Complete SPECTRUM ROM DISSASSEMBLY" by Dr Ian Logan & Dr Frank O’Hara @@ -4622,9 +4633,15 @@ 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 - LD (IY+2),E +DUROVF: LD (IY+2),E LD (IY+3),D LD DE,4 ; POINT TO NEXT TABLE @@ -4637,18 +4654,24 @@ DIV_CANSUB: DJNZ TBL_LP ; LOOP COUNTER RET -DISP: PUSH BC +DISP: + PUSH BC + PUSH DE + PUSH HL -; PUSH DE -; POP BC -; CALL PRTHEXWORD -; -; PUSH DE -; POP BC -; CALL PRTHEXWORD + PUSH DE + POP BC + CALL PRTHEXWORD - LD A,'*' + PUSH HL + POP BC + CALL PRTHEXWORD + + LD A,' ' CALL MONOUT + + POP HL + POP DE POP BC RET From dc0411746ee75584aa35c12edbd6910f628cb657 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 12 Oct 2019 00:56:15 +0800 Subject: [PATCH 09/11] Update nascom.asm --- Source/HBIOS/nascom.asm | 49 +++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index 318ce65d..df498552 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -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 Date: Sat, 12 Oct 2019 01:28:06 +0800 Subject: [PATCH 10/11] Update nascom.asm Remove debug code --- Source/HBIOS/nascom.asm | 91 ----------------------------------------- 1 file changed, 91 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index df498552..c61fcb4b 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4484,8 +4484,6 @@ SPK_OCTDIV: SPK_OCTOK: - CALL DISP - POP BC ; MULTIPLY CHL X B PUSH HL ; SAVE @@ -4511,8 +4509,6 @@ MULDLP: DJNZ MULSKP ; DIVIDE BY 8 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 @@ -4611,8 +4607,6 @@ FRQ_AJ1:SLA C ; C Date: Sat, 12 Oct 2019 06:16:36 +0800 Subject: [PATCH 11/11] Update nascom.asm Cleanup --- Source/HBIOS/nascom.asm | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/HBIOS/nascom.asm b/Source/HBIOS/nascom.asm index c61fcb4b..35d78203 100644 --- a/Source/HBIOS/nascom.asm +++ b/Source/HBIOS/nascom.asm @@ -4643,8 +4643,6 @@ DIV_CANSUB: DUROVF: LD (IY+2),E LD (IY+3),D -; CALL DISP - LD DE,4 ; POINT TO NEXT TABLE ADD IY,DE ; ENTRY TO UPDATE