Added drom/erom/bank0/bank1 commands to basic

This commit is contained in:
Joppe Blondel
2026-10-07 17:04:23 +02:00
parent c77469e1a1
commit 322c54d2b9
4 changed files with 131 additions and 19 deletions
+69 -2
View File
@@ -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