From fb8592dc5eee87112fdb8a669aab52dda2eecf32 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 31 Jan 2021 10:27:45 +0100 Subject: [PATCH] several Z80 fixes --- src/zvm_m65/debug.s | 9 +++++++-- src/zvm_m65/z80_instr_general.s | 3 ++- src/zvm_m65/z80_instr_jump.s | 5 ++--- src/zvm_m65/z80_instr_load_16bit.s | 2 +- src/zvm_m65/zvm_cpmemu.s | 13 +++++++++---- src/zvm_m65/zvm_cputest.s | 15 +++++++++++++-- 6 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/zvm_m65/debug.s b/src/zvm_m65/debug.s index 64b81deb..2f09c143 100644 --- a/src/zvm_m65/debug.s +++ b/src/zvm_m65/debug.s @@ -2,6 +2,8 @@ DBG_print_PC_opcode: + rts ; XXX disable this to turn debugging on + php pha phx @@ -11,7 +13,7 @@ DBG_print_PC_opcode: pha jsr PRIMM - !pet $0D, "PC: ", 0 + !pet $0D, $1E, "PC: ", 0 dew REG_PC lda REG_PC+1 @@ -24,8 +26,11 @@ DBG_print_PC_opcode: !pet " opcode: ", 0 pla - +beq MONITOR + pha jsr DBGINT_print_hex_byte + pla +@1: + beq @1 ; XXX stop on NOP ; FALLTROUGH diff --git a/src/zvm_m65/z80_instr_general.s b/src/zvm_m65/z80_instr_general.s index 4ab50531..31a0387d 100644 --- a/src/zvm_m65/z80_instr_general.s +++ b/src/zvm_m65/z80_instr_general.s @@ -103,7 +103,8 @@ Z80_instr_76: ; cmp #$FF ; $FF = CP/M call +beq zvm_CPMemu - inc $D021 +@halt: ; XXX temporary, as the BIOS is not ready yet + bra @halt ldx #$01 ; default routine, warm boot diff --git a/src/zvm_m65/z80_instr_jump.s b/src/zvm_m65/z80_instr_jump.s index bd2ef756..d0c2e3a7 100644 --- a/src/zvm_m65/z80_instr_jump.s +++ b/src/zvm_m65/z80_instr_jump.s @@ -7,10 +7,9 @@ Z80_instr_C3: ; JP nn +Z80_FETCH_VIA_PC_INC - jsr DBG_print_hex - sta REG_PC+0 + tax +Z80_FETCH_VIA_PC_INC - jsr DBG_print_hex + stx REG_PC+0 sta REG_PC+1 jmp ZVM_next diff --git a/src/zvm_m65/z80_instr_load_16bit.s b/src/zvm_m65/z80_instr_load_16bit.s index c7a6c335..5b5eee2e 100644 --- a/src/zvm_m65/z80_instr_load_16bit.s +++ b/src/zvm_m65/z80_instr_load_16bit.s @@ -22,7 +22,7 @@ Z80_instr_FD_21: +Z80_LD_REGnn_nn REG_IY ; !macro Z80_LD_REGnn_REGnn .REGnn1, .REGnn2 { lda .REGnn2+0 sta .REGnn1+0 - jsr .REGnn2+1 + lda .REGnn2+1 sta .REGnn1+1 jmp ZVM_next } diff --git a/src/zvm_m65/zvm_cpmemu.s b/src/zvm_m65/zvm_cpmemu.s index 4a17bbe5..168a105d 100644 --- a/src/zvm_m65/zvm_cpmemu.s +++ b/src/zvm_m65/zvm_cpmemu.s @@ -6,12 +6,11 @@ zvm_CPMemu: - jsr PRIMM - !pet "DBG: CP1", $0D, 0 - ldx REG_C cpx #$09 beq zvm_CPMemu_09 + cpx #$02 + beq zvm_CPMemu_02 ; XXX implement additional functions if needed @@ -21,10 +20,16 @@ zvm_CPMemu_end: jmp Z80_instr_C9 ; RET +zvm_CPMemu_02: ; C_WRITE + + lda REG_E + jsr CHROUT + bra zvm_CPMemu_end + zvm_CPMemu_09: ; C_WRITESTR +Z80_FETCH_VIA_DE - cmp #'$' + cmp #$24 ; CP/M string termination character beq zvm_CPMemu_end jsr CHROUT diff --git a/src/zvm_m65/zvm_cputest.s b/src/zvm_m65/zvm_cputest.s index f69056f3..407c449f 100644 --- a/src/zvm_m65/zvm_cputest.s +++ b/src/zvm_m65/zvm_cputest.s @@ -111,12 +111,12 @@ ZVM_cputest: ; Copy up to 512 bytes from buffer to target memory - inw BIOS_LOADCOUNT + inw BIOS_LOADCOUNT ; XXX workaround for DEW not handling N flag @loop3: dew BIOS_LOADCOUNT - beq @loop2 ; XXX why no BMI, without INW? + beq @loop2 lda [BIOS_IOBUFERPTR],z sta [BIOS_LOADPTR],z @@ -152,8 +152,19 @@ ZVM_cputest: lda #$FF sta [BIOS_LOADPTR],z ; $FF = CP/M simulation for CPU test + lda #$00 + sta BIOS_LOADPTR+0 + lda #$76 ; HALT + sta [BIOS_LOADPTR],z + inc BIOS_LOADPTR + lda #$FE + sta [BIOS_LOADPTR],z ; $FE = dummy + ; Run the software + jsr PRIMM + !pet $0D, $0D, 0 + ldz #$00 ; in case hypervisor modified it jmp ZVM_next