From 635ed2f0bb4e4d84a6bc44628dd12a71c9e9a371 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 20 Dec 2020 22:06:55 +0100 Subject: [PATCH] some BIOS work --- src/zvm_m65/,aliases_zvm.s | 3 +++ src/zvm_m65/zvm_bios.s | 41 ++++++++++++++++++++++++++++---------- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/zvm_m65/,aliases_zvm.s b/src/zvm_m65/,aliases_zvm.s index 2e3eeeb0..0fd794b0 100644 --- a/src/zvm_m65/,aliases_zvm.s +++ b/src/zvm_m65/,aliases_zvm.s @@ -40,6 +40,9 @@ !addr REG_TMP1 = $25 ; emulation-specific temporary storage !addr REG_TMP2 = $26 +!addr VEC_MOVE_fetch = $30 ; vector to byte fetch routine, for BIOS routine MOVE +!addr VEC_MOVE_store = $32 ; vector to byte store routine, for BIOS routine MOVE +!addr VEC_DISKIO_store = $34 ; vector to byte store routine, for BIOS disk I/O operations !addr VEC_fetch_value = $60 !addr VEC_fetch_stack = $62 diff --git a/src/zvm_m65/zvm_bios.s b/src/zvm_m65/zvm_bios.s index b722b289..afd1f441 100644 --- a/src/zvm_m65/zvm_bios.s +++ b/src/zvm_m65/zvm_bios.s @@ -11,7 +11,7 @@ ; $FE85 - $FEFF - unused ; $FF00 - $FFFF - Disk Drive Tables, dynamically generated, $10 bytes for each one - +!addr zvm_BIOS_return = Z80_instr_C9 ; RET instruction zvm_BIOS_vectable: @@ -60,6 +60,10 @@ zvm_BIOS_01_WBOOT: ; Warm start zvm_BIOS_31_RESERV1: ; Reserved zvm_BIOS_32_RESERV2: ; Reserved + ; Reset BIOS vectors to point to bank 1 + + ; XXX setup VEC_MOVE_fetch, VEC_MOVE_store, VEC_DISKIO_store + ; XXX !!! zvm_BIOS_02_CONST: ; Check if input character available @@ -115,17 +119,17 @@ zvm_BIOS_14_WRITE: ; Write sector ; XXX !!! zvm_BIOS_15_LISTST: ; List status +zvm_BIOS_17_CONOST: ; Console output status - ; XXX + ; Always report the printer / output console as ready + lda #$FF + sta REG_A + jmp zvm_BIOS_return zvm_BIOS_16_SECTRN: ; Convert logical to physical sector ; XXX !!! -zvm_BIOS_17_CONOST: ; Console output status - - ; XXX - zvm_BIOS_18_AUXIST: ; AUX input status ; XXX @@ -156,7 +160,19 @@ zvm_BIOS_24_FLUSH: ; Force buffer flushing for user deblocking zvm_BIOS_25_MOVE: ; Memory move - ; XXX + lda REG_B + ora REG_C + beq @2 ; branch if nothing to be copied +@1: + jsr (VEC_MOVE_fetch) + jsr (VEC_MOVE_store) + inw REG_DE ; source address + inw REG_HL ; destination address + dew REG_BC ; count + bne @1 +@2: + ; XXX setup VEC_MOVE_fetch (to bank 1), VEC_MOVE_store (to bank 1) + jmp zvm_BIOS_return zvm_BIOS_26_TIME: ; Get or set time @@ -164,15 +180,18 @@ zvm_BIOS_26_TIME: ; Get or set time zvm_BIOS_27_SELMEM: ; Select memory bank - ; XXX + ; XXX !!! + ; XXX setup VEC_MOVE_fetch (REG_A), VEC_MOVE_store (REG_A) -zvm_BIOS_28_SETBNK: ; Set bank for DMA operation +zvm_BIOS_28_SETBNK: ; Set bank for disk DMA operation - ; XXX + ; XXX !!! + ; XXX setup VEC_DISKIO_store (REG_A) zvm_BIOS_29_XMOVE: ; Set bank if buffer is in bank other than 1 or 2 - ; XXX + ; XXX !!! + ; XXX setup VEC_MOVE_fetch (REG_C), VEC_MOVE_store (REG_B) zvm_BIOS_30_USERF: ; Implementation-specific functionality