From 5e8d2205e8da7f278087bf4c73fb9c1add969d29 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 29 Jan 2021 20:27:39 +0100 Subject: [PATCH] crude implementation of CP/M rutine $09 --- src/zvm_m65/z80_instr_general.s | 18 +++++++++--------- src/zvm_m65/zvm_cpmemu.s | 29 +++++++++++++++++++++++++++++ src/zvm_m65/zvm_cputest.s | 8 ++++++-- 3 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 src/zvm_m65/zvm_cpmemu.s diff --git a/src/zvm_m65/z80_instr_general.s b/src/zvm_m65/z80_instr_general.s index 414adb76..4ab50531 100644 --- a/src/zvm_m65/z80_instr_general.s +++ b/src/zvm_m65/z80_instr_general.s @@ -96,17 +96,17 @@ Z80_instr_37: ; Z80_instr_76: ; HALT - ; Used to call BIOS routines - ; XXX probably not the besta idea, GENCPC seems to do some relocations + ; Used to call BIOS and simulated CP/M routines - ldx #$01 ; default BIOS function, warm start + +Z80_FETCH_VIA_PC_INC + + cmp #$FF ; $FF = CP/M call + +beq zvm_CPMemu + + inc $D021 + + ldx #$01 ; default routine, warm boot - lda REG_PC+1 - cmp #$FE ; - bne @1 - lda REG_PC+0 - sec - sbc #$64 cmp #33 bcs @1 tax diff --git a/src/zvm_m65/zvm_cpmemu.s b/src/zvm_m65/zvm_cpmemu.s new file mode 100644 index 00000000..2c58c979 --- /dev/null +++ b/src/zvm_m65/zvm_cpmemu.s @@ -0,0 +1,29 @@ + +; +; Z80 Virtual Machine CP/M simulation (just to run selected binaries) +; + + +zvm_CPMemu: + + ldx REG_C + cpx #$09 + beq zvm_CPMemu_09 + + ; XXX implement additional functions if needed + + ; FALLTROUGH + +zvm_CPMemu_end: + + jmp Z80_instr_C9 ; RET + +zvm_CPMemu_09: ; C_WRITESTR + + +Z80_FETCH_VIA_DE + cmp #'$' + beq zvm_CPMemu_end + + jsr CHROUT + inw REG_DE + bra zvm_CPMemu_09 diff --git a/src/zvm_m65/zvm_cputest.s b/src/zvm_m65/zvm_cputest.s index 3aae1781..11801c5f 100644 --- a/src/zvm_m65/zvm_cputest.s +++ b/src/zvm_m65/zvm_cputest.s @@ -105,8 +105,6 @@ ZVM_cputest: @loop3: - inc $D020 - dew BIOS_LOADCOUNT bmi @loop2 @@ -120,6 +118,12 @@ ZVM_cputest: @load_done: + ; Close the file + + lda #$20 + sta HTRAP00 + +nop + jsr PRIMM !pet " done", $0D, $0D, 0