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
|
||||
; - Unsupported functions cause FCERR, not a reset or REM
|
||||
; - modern backspace handling
|
||||
; - Added DROM/EROM/BANK0/BANK1 commands
|
||||
;
|
||||
;==================================================================================
|
||||
; 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_FLUSH .EQU BIOS_FLUSH
|
||||
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_RAM_START .EQU BASIC_RAM_START + BASIC_ROM_SIZE
|
||||
MC_RAM_END .EQU 0FFFFH
|
||||
@@ -377,7 +380,10 @@ WORDS: .BYTE 'E'+80H,"ND"
|
||||
.BYTE 'L'+80H,"EFT$"
|
||||
.BYTE 'R'+80H,"IGHT$"
|
||||
.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
|
||||
|
||||
; KEYWORD ADDRESS TABLE
|
||||
@@ -450,7 +456,10 @@ ZLTH .EQU 0B5H ; <
|
||||
ZSGN .EQU 0B6H ; SGN
|
||||
ZPOINT .EQU 0C7H ; POINT
|
||||
ZLEFT .EQU 0CDH +2 ; LEFT$
|
||||
ZHELLO .EQU 0D2H
|
||||
ZDROM .EQU 0D2H
|
||||
ZEROM .EQU 0D3H
|
||||
ZBANK0 .EQU 0D4H
|
||||
ZBANK1 .EQU 0D5H
|
||||
|
||||
; ARITHMETIC PRECEDENCE TABLE
|
||||
|
||||
@@ -1258,12 +1267,30 @@ IFJMP: RET Z ; Go to RUNCNT if end of STMT
|
||||
ONJMP:
|
||||
; Own commands
|
||||
; ------------
|
||||
CHKHELLO:
|
||||
CP ZHELLO
|
||||
JP NZ,STDONJMP
|
||||
ld BC,HELLO
|
||||
CHKDROM:
|
||||
CP ZDROM
|
||||
JP NZ,CHKEROM
|
||||
ld BC,DROM
|
||||
PUSH BC
|
||||
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:
|
||||
SUB ZEND ; Is it a token?
|
||||
@@ -4379,8 +4406,8 @@ MONOUT: JP MC_BIOS_PUTC ; output a char
|
||||
|
||||
|
||||
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
|
||||
LD (BRKFLG),A
|
||||
@@ -4399,14 +4426,29 @@ TSTBIT: PUSH AF ; Save bit mask
|
||||
OUTNCR: CALL OUTC ; Output character in A
|
||||
JP PRNTCRLF ; Output CRLF
|
||||
|
||||
HELLO:
|
||||
DROM: ; disable ROM
|
||||
RET NZ
|
||||
PUSH HL
|
||||
LD HL,HELLOMSG
|
||||
CALL PRS
|
||||
POP HL
|
||||
LD A,0
|
||||
call MC_BIOS_ROM
|
||||
RET
|
||||
|
||||
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
|
||||
HELLOMSG: .asciz "Hello!"
|
||||
|
||||
.end
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ UART_DATA .equ UART_BASE+001h
|
||||
BUF_SIZE .equ 16
|
||||
BUF_SIZE_MASK .equ 00fh
|
||||
|
||||
WORKSPACE .equ SHARED_MEM_START+00400h
|
||||
WORKSPACE .equ BIOS_WP_RAM_START
|
||||
TX_HEAD .equ WORKSPACE+000h
|
||||
TX_TAIL .equ WORKSPACE+001h
|
||||
TX_COUNT .equ WORKSPACE+002h
|
||||
@@ -25,6 +25,7 @@ RX_COUNT .equ WORKSPACE+005h
|
||||
TX_BUSY .equ WORKSPACE+006h
|
||||
TX_BUF .equ WORKSPACE+007h
|
||||
RX_BUF .equ TX_BUF+BUF_SIZE
|
||||
SYSREG_VALUE .equ RX_BUF+BUF_SIZE
|
||||
|
||||
; -------------------------------------------------------
|
||||
; entry
|
||||
@@ -39,7 +40,7 @@ boot_copy:
|
||||
; banking enabled
|
||||
; bank 1 selected
|
||||
ld a,BOOT_BANK_MAPPING
|
||||
ld (SYSTEM_REGISTER),a
|
||||
out (SYSTEM_REGISTER),a
|
||||
ld sp,BIOS_STACK_TOP
|
||||
; copy bios to top 16k
|
||||
ld hl,BIOS_ROM_START
|
||||
@@ -94,6 +95,10 @@ boot_copy:
|
||||
jp puts
|
||||
.org BIOS_FLUSH
|
||||
jp flush
|
||||
.ORG BIOS_ROM
|
||||
jp setrom
|
||||
.ORG BIOS_BANK
|
||||
jp bank
|
||||
|
||||
; -------------------------------------------------------
|
||||
; BIOS ENTRY
|
||||
@@ -116,6 +121,10 @@ init:
|
||||
ld i,a
|
||||
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
|
||||
call buffers_init
|
||||
; Initialize peripherals
|
||||
@@ -452,6 +461,64 @@ flush:
|
||||
ld a,(TX_COUNT)
|
||||
cp 0
|
||||
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
|
||||
|
||||
@@ -3,3 +3,5 @@ BIOS_GETC .equ 0c053h
|
||||
BIOS_TRY_GETC .equ 0c056h
|
||||
BIOS_PUTS .equ 0c059h
|
||||
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_ROM_START := 0x0080
|
||||
BIOS_ROM_SIZE := 0x0380
|
||||
BIOS_ROM_SIZE := 0x0580
|
||||
|
||||
BASIC_ROM_START := 0x0400
|
||||
BASIC_ROM_START := 0x0600
|
||||
BASIC_ROM_SIZE := 0x2000
|
||||
|
||||
BIOS_RAM_START := 0xc000
|
||||
BASIC_RAM_START := 0xc800
|
||||
BIOS_WP_RAM_START := 0xc600
|
||||
BASIC_RAM_START := 0xca00
|
||||
|
||||
Reference in New Issue
Block a user