Added drom/erom/bank0/bank1 commands to basic
This commit is contained in:
+56
-14
@@ -14,6 +14,7 @@
|
|||||||
; - BIOS calls instead of using RST
|
; - BIOS calls instead of using RST
|
||||||
; - Unsupported functions cause FCERR, not a reset or REM
|
; - Unsupported functions cause FCERR, not a reset or REM
|
||||||
; - modern backspace handling
|
; - modern backspace handling
|
||||||
|
; - Added DROM/EROM/BANK0/BANK1 commands
|
||||||
;
|
;
|
||||||
;==================================================================================
|
;==================================================================================
|
||||||
; The updates to the original BASIC within this file are copyright Grant Searle
|
; The updates to the original BASIC within this file are copyright Grant Searle
|
||||||
@@ -45,6 +46,8 @@ MC_BIOS_TRY_GETC .EQU BIOS_TRY_GETC
|
|||||||
MC_BIOS_GETC .EQU BIOS_GETC
|
MC_BIOS_GETC .EQU BIOS_GETC
|
||||||
MC_BIOS_FLUSH .EQU BIOS_FLUSH
|
MC_BIOS_FLUSH .EQU BIOS_FLUSH
|
||||||
MC_BIOS_MONITOR .EQU BIOS_RAM_START
|
MC_BIOS_MONITOR .EQU BIOS_RAM_START
|
||||||
|
MC_BIOS_ROM .EQU BIOS_ROM
|
||||||
|
MC_BIOS_BANK .EQU BIOS_BANK
|
||||||
MC_CODE_START .EQU BASIC_RAM_START
|
MC_CODE_START .EQU BASIC_RAM_START
|
||||||
MC_RAM_START .EQU BASIC_RAM_START + BASIC_ROM_SIZE
|
MC_RAM_START .EQU BASIC_RAM_START + BASIC_ROM_SIZE
|
||||||
MC_RAM_END .EQU 0FFFFH
|
MC_RAM_END .EQU 0FFFFH
|
||||||
@@ -377,7 +380,10 @@ WORDS: .BYTE 'E'+80H,"ND"
|
|||||||
.BYTE 'L'+80H,"EFT$"
|
.BYTE 'L'+80H,"EFT$"
|
||||||
.BYTE 'R'+80H,"IGHT$"
|
.BYTE 'R'+80H,"IGHT$"
|
||||||
.BYTE 'M'+80H,"ID$"
|
.BYTE 'M'+80H,"ID$"
|
||||||
.BYTE 'H'+80H,"ELLO"
|
.BYTE 'D'+80H,"ROM"
|
||||||
|
.BYTE 'E'+80H,"ROM"
|
||||||
|
.BYTE 'B'+80H,"ANK0"
|
||||||
|
.BYTE 'B'+80H,"ANK1"
|
||||||
.BYTE 80H ; End of list marker
|
.BYTE 80H ; End of list marker
|
||||||
|
|
||||||
; KEYWORD ADDRESS TABLE
|
; KEYWORD ADDRESS TABLE
|
||||||
@@ -450,7 +456,10 @@ ZLTH .EQU 0B5H ; <
|
|||||||
ZSGN .EQU 0B6H ; SGN
|
ZSGN .EQU 0B6H ; SGN
|
||||||
ZPOINT .EQU 0C7H ; POINT
|
ZPOINT .EQU 0C7H ; POINT
|
||||||
ZLEFT .EQU 0CDH +2 ; LEFT$
|
ZLEFT .EQU 0CDH +2 ; LEFT$
|
||||||
ZHELLO .EQU 0D2H
|
ZDROM .EQU 0D2H
|
||||||
|
ZEROM .EQU 0D3H
|
||||||
|
ZBANK0 .EQU 0D4H
|
||||||
|
ZBANK1 .EQU 0D5H
|
||||||
|
|
||||||
; ARITHMETIC PRECEDENCE TABLE
|
; ARITHMETIC PRECEDENCE TABLE
|
||||||
|
|
||||||
@@ -1258,12 +1267,30 @@ IFJMP: RET Z ; Go to RUNCNT if end of STMT
|
|||||||
ONJMP:
|
ONJMP:
|
||||||
; Own commands
|
; Own commands
|
||||||
; ------------
|
; ------------
|
||||||
CHKHELLO:
|
CHKDROM:
|
||||||
CP ZHELLO
|
CP ZDROM
|
||||||
JP NZ,STDONJMP
|
JP NZ,CHKEROM
|
||||||
ld BC,HELLO
|
ld BC,DROM
|
||||||
PUSH BC
|
PUSH BC
|
||||||
jp GETCHR
|
jp GETCHR
|
||||||
|
CHKEROM:
|
||||||
|
CP ZEROM
|
||||||
|
JP NZ,CHKBANK0
|
||||||
|
LD BC,EROM
|
||||||
|
PUSH BC
|
||||||
|
JP GETCHR
|
||||||
|
CHKBANK0:
|
||||||
|
CP ZBANK0
|
||||||
|
JP NZ,CHKBANK1
|
||||||
|
LD BC,BANK0
|
||||||
|
PUSH BC
|
||||||
|
JP GETCHR
|
||||||
|
CHKBANK1:
|
||||||
|
CP ZBANK1
|
||||||
|
JP NZ,STDONJMP
|
||||||
|
LD BC,BANK1
|
||||||
|
PUSH BC
|
||||||
|
JP GETCHR
|
||||||
; ------------
|
; ------------
|
||||||
STDONJMP:
|
STDONJMP:
|
||||||
SUB ZEND ; Is it a token?
|
SUB ZEND ; Is it a token?
|
||||||
@@ -4379,8 +4406,8 @@ MONOUT: JP MC_BIOS_PUTC ; output a char
|
|||||||
|
|
||||||
|
|
||||||
MONITR: CALL MC_BIOS_FLUSH
|
MONITR: CALL MC_BIOS_FLUSH
|
||||||
JP MC_BIOS_MONITOR ; Restart (Normally Monitor Start)
|
CALL EROM ; enable rom
|
||||||
|
JP 0 ; reboot
|
||||||
|
|
||||||
INITST: LD A,0 ; Clear break flag
|
INITST: LD A,0 ; Clear break flag
|
||||||
LD (BRKFLG),A
|
LD (BRKFLG),A
|
||||||
@@ -4399,14 +4426,29 @@ 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
|
||||||
|
|
||||||
HELLO:
|
DROM: ; disable ROM
|
||||||
RET NZ
|
RET NZ
|
||||||
PUSH HL
|
LD A,0
|
||||||
LD HL,HELLOMSG
|
call MC_BIOS_ROM
|
||||||
CALL PRS
|
RET
|
||||||
POP HL
|
|
||||||
|
EROM: ; enable ROM
|
||||||
|
RET NZ
|
||||||
|
LD A,1
|
||||||
|
call MC_BIOS_ROM
|
||||||
|
RET
|
||||||
|
|
||||||
|
BANK0: ; Bank 0
|
||||||
|
RET NZ
|
||||||
|
LD A,0
|
||||||
|
call MC_BIOS_BANK
|
||||||
|
RET
|
||||||
|
|
||||||
|
BANK1: ; Bank 1
|
||||||
|
RET NZ
|
||||||
|
LD A,1
|
||||||
|
call MC_BIOS_BANK
|
||||||
RET
|
RET
|
||||||
HELLOMSG: .asciz "Hello!"
|
|
||||||
|
|
||||||
.end
|
.end
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ UART_DATA .equ UART_BASE+001h
|
|||||||
BUF_SIZE .equ 16
|
BUF_SIZE .equ 16
|
||||||
BUF_SIZE_MASK .equ 00fh
|
BUF_SIZE_MASK .equ 00fh
|
||||||
|
|
||||||
WORKSPACE .equ SHARED_MEM_START+00400h
|
WORKSPACE .equ BIOS_WP_RAM_START
|
||||||
TX_HEAD .equ WORKSPACE+000h
|
TX_HEAD .equ WORKSPACE+000h
|
||||||
TX_TAIL .equ WORKSPACE+001h
|
TX_TAIL .equ WORKSPACE+001h
|
||||||
TX_COUNT .equ WORKSPACE+002h
|
TX_COUNT .equ WORKSPACE+002h
|
||||||
@@ -25,6 +25,7 @@ RX_COUNT .equ WORKSPACE+005h
|
|||||||
TX_BUSY .equ WORKSPACE+006h
|
TX_BUSY .equ WORKSPACE+006h
|
||||||
TX_BUF .equ WORKSPACE+007h
|
TX_BUF .equ WORKSPACE+007h
|
||||||
RX_BUF .equ TX_BUF+BUF_SIZE
|
RX_BUF .equ TX_BUF+BUF_SIZE
|
||||||
|
SYSREG_VALUE .equ RX_BUF+BUF_SIZE
|
||||||
|
|
||||||
; -------------------------------------------------------
|
; -------------------------------------------------------
|
||||||
; entry
|
; entry
|
||||||
@@ -39,7 +40,7 @@ boot_copy:
|
|||||||
; banking enabled
|
; banking enabled
|
||||||
; bank 1 selected
|
; bank 1 selected
|
||||||
ld a,BOOT_BANK_MAPPING
|
ld a,BOOT_BANK_MAPPING
|
||||||
ld (SYSTEM_REGISTER),a
|
out (SYSTEM_REGISTER),a
|
||||||
ld sp,BIOS_STACK_TOP
|
ld sp,BIOS_STACK_TOP
|
||||||
; copy bios to top 16k
|
; copy bios to top 16k
|
||||||
ld hl,BIOS_ROM_START
|
ld hl,BIOS_ROM_START
|
||||||
@@ -94,6 +95,10 @@ boot_copy:
|
|||||||
jp puts
|
jp puts
|
||||||
.org BIOS_FLUSH
|
.org BIOS_FLUSH
|
||||||
jp flush
|
jp flush
|
||||||
|
.ORG BIOS_ROM
|
||||||
|
jp setrom
|
||||||
|
.ORG BIOS_BANK
|
||||||
|
jp bank
|
||||||
|
|
||||||
; -------------------------------------------------------
|
; -------------------------------------------------------
|
||||||
; BIOS ENTRY
|
; BIOS ENTRY
|
||||||
@@ -116,6 +121,10 @@ init:
|
|||||||
ld i,a
|
ld i,a
|
||||||
im 2
|
im 2
|
||||||
|
|
||||||
|
; Set boot bank mapping to sysreg shadow copy
|
||||||
|
ld a,BOOT_BANK_MAPPING
|
||||||
|
ld (SYSREG_VALUE),a
|
||||||
|
out (SYSTEM_REGISTER),a
|
||||||
; Initialize tx and rx buffers
|
; Initialize tx and rx buffers
|
||||||
call buffers_init
|
call buffers_init
|
||||||
; Initialize peripherals
|
; Initialize peripherals
|
||||||
@@ -452,6 +461,64 @@ flush:
|
|||||||
ld a,(TX_COUNT)
|
ld a,(TX_COUNT)
|
||||||
cp 0
|
cp 0
|
||||||
jr nz,flush
|
jr nz,flush
|
||||||
|
ld a,(TX_BUSY)
|
||||||
|
cp 0
|
||||||
|
jr nz,flush
|
||||||
|
ret
|
||||||
|
|
||||||
|
; -------------------------------------------------------
|
||||||
|
; ROM enable/disable
|
||||||
|
; needs a (nonzero is enable, zero is disable)
|
||||||
|
; -------------------------------------------------------
|
||||||
|
setrom:
|
||||||
|
cp 0
|
||||||
|
jr z,1$
|
||||||
|
; nonzero -> enable
|
||||||
|
push bc
|
||||||
|
ld a,ROM_DISABLE_BIT
|
||||||
|
cpl ; get mask
|
||||||
|
ld b,a
|
||||||
|
ld a,(SYSREG_VALUE)
|
||||||
|
and b
|
||||||
|
ld (SYSREG_VALUE),a
|
||||||
|
out (SYSTEM_REGISTER),a
|
||||||
|
pop bc
|
||||||
|
2$:
|
||||||
|
ret
|
||||||
|
1$:
|
||||||
|
; zero -> disable
|
||||||
|
ld a,(SYSREG_VALUE)
|
||||||
|
or ROM_DISABLE_BIT
|
||||||
|
ld (SYSREG_VALUE),a
|
||||||
|
out (SYSTEM_REGISTER),a
|
||||||
|
jr 2$
|
||||||
|
|
||||||
|
; -------------------------------------------------------
|
||||||
|
; Select bank
|
||||||
|
; needs a (nonzero is bank 1, zero is bank 0)
|
||||||
|
; -------------------------------------------------------
|
||||||
|
bank:
|
||||||
|
cp 0
|
||||||
|
jr nz,1$
|
||||||
|
; zero -> bank 0
|
||||||
|
push bc
|
||||||
|
ld a,BANK_SELECT_BIT
|
||||||
|
cpl ; get mask
|
||||||
|
ld b,a
|
||||||
|
ld a,(SYSREG_VALUE)
|
||||||
|
and b
|
||||||
|
ld (SYSREG_VALUE),a
|
||||||
|
out (SYSTEM_REGISTER),a
|
||||||
|
pop bc
|
||||||
|
2$:
|
||||||
|
ret
|
||||||
|
1$:
|
||||||
|
; non zero -> bank 1
|
||||||
|
ld a,(SYSREG_VALUE)
|
||||||
|
or BANK_SELECT_BIT
|
||||||
|
ld (SYSREG_VALUE),a
|
||||||
|
out (SYSTEM_REGISTER),a
|
||||||
|
jr 2$
|
||||||
|
|
||||||
; -------------------------------------------------------
|
; -------------------------------------------------------
|
||||||
; Strings
|
; Strings
|
||||||
|
|||||||
@@ -3,3 +3,5 @@ BIOS_GETC .equ 0c053h
|
|||||||
BIOS_TRY_GETC .equ 0c056h
|
BIOS_TRY_GETC .equ 0c056h
|
||||||
BIOS_PUTS .equ 0c059h
|
BIOS_PUTS .equ 0c059h
|
||||||
BIOS_FLUSH .equ 0c05ch
|
BIOS_FLUSH .equ 0c05ch
|
||||||
|
BIOS_ROM .equ 0c05fh
|
||||||
|
BIOS_BANK .equ 0c062h
|
||||||
|
|||||||
@@ -11,10 +11,11 @@ SHARED_MEM_END := 0xffff
|
|||||||
|
|
||||||
BIOS_STACK_TOP := 0xffff
|
BIOS_STACK_TOP := 0xffff
|
||||||
BIOS_ROM_START := 0x0080
|
BIOS_ROM_START := 0x0080
|
||||||
BIOS_ROM_SIZE := 0x0380
|
BIOS_ROM_SIZE := 0x0580
|
||||||
|
|
||||||
BASIC_ROM_START := 0x0400
|
BASIC_ROM_START := 0x0600
|
||||||
BASIC_ROM_SIZE := 0x2000
|
BASIC_ROM_SIZE := 0x2000
|
||||||
|
|
||||||
BIOS_RAM_START := 0xc000
|
BIOS_RAM_START := 0xc000
|
||||||
BASIC_RAM_START := 0xc800
|
BIOS_WP_RAM_START := 0xc600
|
||||||
|
BASIC_RAM_START := 0xca00
|
||||||
|
|||||||
Reference in New Issue
Block a user