Browse Source

Update nascom.asm

Add PLAY a note
pull/49/head
b1ackmai1er 6 years ago
parent
commit
7033755762
  1. 685
      Source/HBIOS/nascom.asm

685
Source/HBIOS/nascom.asm

@ -33,7 +33,7 @@ LF .EQU 0AH ; Line feed
CS .EQU 0CH ; Clear screen CS .EQU 0CH ; Clear screen
CR .EQU 0DH ; Carriage return CR .EQU 0DH ; Carriage return
CTRLO .EQU 0FH ; Control "O" CTRLO .EQU 0FH ; Control "O"
CTRLQ .EQU 11H ; Control "Q"
CTRLQ .EQU 11H ; Control "Q"
CTRLR .EQU 12H ; Control "R" CTRLR .EQU 12H ; Control "R"
CTRLS .EQU 13H ; Control "S" CTRLS .EQU 13H ; Control "S"
CTRLU .EQU 15H ; Control "U" CTRLU .EQU 15H ; Control "U"
@ -42,6 +42,11 @@ DEL .EQU 7FH ; Delete
; BASIC WORK SPACE LOCATIONS ; 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 WRKSPC .EQU BAS_END+90H ; WAS 4090H ; BASIC Work space
USR .EQU WRKSPC+3H ; "USR (x)" jump USR .EQU WRKSPC+3H ; "USR (x)" jump
OUTSUB .EQU WRKSPC+6H ; "OUT p,n" OUTSUB .EQU WRKSPC+6H ; "OUT p,n"
@ -132,7 +137,7 @@ MO .EQU 24H ; Missing operand
HX .EQU 26H ; HEX error HX .EQU 26H ; HEX error
BN .EQU 28H ; BIN error BN .EQU 28H ; BIN error
.ORG BAS_LOC ; WAS 02000H
.ORG BAS_LOC ; WAS 02000H
COLD: JP STARTB ; Jump for cold start COLD: JP STARTB ; Jump for cold start
WARM: JP WARMST ; Jump for warm start WARM: JP WARMST ; Jump for warm start
@ -173,8 +178,8 @@ MSIZE: LD HL,MEMMSG ; Point to message
MLOOP: INC HL ; Next byte MLOOP: INC HL ; Next byte
; LD A,H ; Above address FFFF ? ; LD A,H ; Above address FFFF ?
; OR L ; 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 JP Z,SETTOP ; Yes - 64K RAM
LD A,(HL) ; Get contents LD A,(HL) ; Get contents
LD B,A ; Save it LD B,A ; Save it
@ -303,7 +308,7 @@ WORDS: .BYTE 'E'+80H,"ND"
.BYTE 'C'+80H,"ONT" .BYTE 'C'+80H,"ONT"
.BYTE 'L'+80H,"IST" .BYTE 'L'+80H,"IST"
.BYTE 'C'+80H,"LEAR" .BYTE 'C'+80H,"LEAR"
.BYTE 'C'+80H,"LOAD"
.BYTE 'P'+80H,"LAY"
.BYTE 'C'+80H,"SAVE" .BYTE 'C'+80H,"SAVE"
.BYTE 'N'+80H,"EW" .BYTE 'N'+80H,"EW"
@ -392,7 +397,7 @@ WORDTB: .WORD PEND
.WORD CONT .WORD CONT
.WORD LIST .WORD LIST
.WORD CLEAR .WORD CLEAR
.WORD REM
.WORD PLAY
.WORD REM .WORD REM
.WORD NEW .WORD NEW
@ -573,10 +578,10 @@ CHKSTK: PUSH HL ; Save code string address
ADD HL,BC ADD HL,BC
.BYTE 3EH ; Skip "PUSH HL" .BYTE 3EH ; Skip "PUSH HL"
ENFMEM: PUSH HL ; Save code string address 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 SUB L
LD L,A LD L,A
LD A,0FFH; HIGH (-48) ; 48 Bytes minimum RAM
LD A,0FFH ; HIGH (-48) ; 48 Bytes minimum RAM
SBC A,H SBC A,H
JP C,OMERR ; Not enough - ?OM Error JP C,OMERR ; Not enough - ?OM Error
LD H,A LD H,A
@ -1257,34 +1262,36 @@ UPDATA: LD (NXTDAT),HL ; Update DATA pointer
EX DE,HL ; Restore code string address EX DE,HL ; Restore code string address
RET RET
; GET CONSOLE INPUT STATUS VIA HBIOS
TSTBRK: 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 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? CP ESC ; Escape key?
JR Z,BRK ; Yes, break JR Z,BRK ; Yes, break
@ -1292,22 +1299,22 @@ TSTBRK:
JR Z,BRK ; Yes, break JR Z,BRK ; Yes, break
CP CTRLS ; Stop scrolling? CP CTRLS ; Stop scrolling?
RET NZ ; Other key, ignore 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? CP CTRLQ ; Resume scrolling?
RET Z ; Release the chokehold RET Z ; Release the chokehold
CP CTRLC ; Second break? CP CTRLC ; Second break?
@ -1357,7 +1364,6 @@ NULL: CALL GETINT ; Get integer 0-255
LD (NULLS),A ; Set nulls number LD (NULLS),A ; Set nulls number
RET RET
ACCSUM: PUSH HL ; Save address in array ACCSUM: PUSH HL ; Save address in array
LD HL,(CHKSUM) ; Get check sum LD HL,(CHKSUM) ; Get check sum
LD B,0 ; BC - Value of byte LD B,0 ; BC - Value of byte
@ -1967,8 +1973,8 @@ OPRND: XOR A ; Get operand routine
JP C,ASCTFP ; Number - Get value JP C,ASCTFP ; Number - Get value
CALL CHKLTR ; See if a letter CALL CHKLTR ; See if a letter
JP NC,CONVAR ; Letter - Find variable 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 CALL GETCHR ; Get next character
CP 'H' ; Hex number indicated? [function added] CP 'H' ; Hex number indicated? [function added]
JP Z,HEXTFP ; Convert Hex to FPREG 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 EX (SP),HL ; Save string end,get start
PUSH BC ; Save end+1 byte PUSH BC ; Save end+1 byte
LD A,(HL) ; Get starting 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] 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 VAL2: CALL ASCTFP ; Convert ASCII string to FP
VAL3: POP BC ; Restore end+1 byte VAL3: POP BC ; Restore end+1 byte
POP HL ; Restore end+1 address POP HL ; Restore end+1 address
@ -3054,7 +3060,7 @@ POKE: CALL GETNUM ; Get memory address
CALL DEINT ; Get integer -32768 to 3276 CALL DEINT ; Get integer -32768 to 3276
PUSH DE ; Save memory address PUSH DE ; Save memory address
CALL CHKSYN ; Make sure ',' follows CALL CHKSYN ; Make sure ',' follows
.BYTE ','
.BYTE ','
CALL GETINT ; Get integer 0-255 CALL GETINT ; Get integer 0-255
POP DE ; Restore memory address POP DE ; Restore memory address
LD (DE),A ; Load it into memory LD (DE),A ; Load it into memory
@ -4143,19 +4149,21 @@ ATNTAB: .BYTE 9 ; Table used by ATN
ARET: RET ; A RETurn instruction ARET: RET ; A RETurn instruction
; INPUT CHARACTER FROM CONSOLE VIA HBIOS
GETINP: 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 RET
CLS: CLS:
LD A,CS ; ASCII Clear screen LD A,CS ; ASCII Clear screen
@ -4199,26 +4207,26 @@ DOKE: CALL GETNUM ; Get a number
HEX: CALL TSTNUM ; Verify it's a number HEX: CALL TSTNUM ; Verify it's a number
CALL DEINT ; Get integer -32768 to 32767 CALL DEINT ; Get integer -32768 to 32767
PUSH BC ; Save contents of BC 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 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 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 INC HL ; Next location
HEX2: LD A,E ; Get lower byte
HEX2: LD A,E ; Get lower byte
CALL BYT2ASC ; Convert E to ASCII CALL BYT2ASC ; Convert E to ASCII
LD A,D
LD A,D
CP $0 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 HEX3: LD (HL),B ; to PBUFF+2
INC HL ; Next location INC HL ; Next location
HEX4: LD (HL),C ; to PBUFF+3 HEX4: LD (HL),C ; to PBUFF+3
@ -4254,6 +4262,7 @@ ADD301 ADD A,$30 ; And make it full ASCII
; Convert "&Hnnnn" to FPREG ; Convert "&Hnnnn" to FPREG
; Gets a character from (HL) checks for Hexadecimal ASCII numbers "&Hnnnn" ; 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 ; 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 HEXTFP EX DE,HL ; Move code string pointer to DE
LD HL,$0000 ; Zero out the value LD HL,$0000 ; Zero out the value
CALL GETHEX ; Check the number for valid hex CALL GETHEX ; Check the number for valid hex
@ -4362,32 +4371,32 @@ CHKBIN: INC DE
BINERR: LD E,BN ; ?BIN Error BINERR: LD E,BN ; ?BIN Error
JP ERROR JP ERROR
JJUMP1: JJUMP1:
LD IX,-1 ; Flag cold start LD IX,-1 ; Flag cold start
JP CSTART ; Go and initialise JP CSTART ; Go and initialise
; OUTPUT CHARACTER TO CONSOLE VIA HBIOS
MONOUT: 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 INITST: LD A,0 ; Clear break flag
LD (BRKFLG),A LD (BRKFLG),A
@ -4395,7 +4404,6 @@ INITST: LD A,0 ; Clear break flag
ARETN: RETN ; Return from NMI ARETN: RETN ; Return from NMI
TSTBIT: PUSH AF ; Save bit mask TSTBIT: PUSH AF ; Save bit mask
AND B ; Get common bits AND B ; Get common bits
POP BC ; Restore bit mask POP BC ; Restore bit mask
@ -4406,19 +4414,470 @@ TSTBIT: PUSH AF ; Save bit mask
OUTNCR: CALL OUTC ; Output character in A OUTNCR: CALL OUTC ; Output character in A
JP PRNTCRLF ; Output CRLF 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: TXT_READY:
.DB CR,LF .DB CR,LF
.TEXT "BASIC READY " .TEXT "BASIC READY "
.DB CR,LF,0FFH .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 .end

Loading…
Cancel
Save