added BIOS skeleton

This commit is contained in:
FeralChild64 authored and FeralChild64 committed 2021-01-26 00:03:07 +01:00
1 parent 8de19d4be0
commit 7395fc3738
3 files changed
+230 -10

No files matched your search

+54 -3
View File
@@ -4,12 +4,63 @@
;
Z80_instr_2F: ; CPL
lda REG_A
eor #$FF
sta REG_A
lda REG_F
ora #(Z80_HF + Z80_NF)
sta REG_F
jmp ZVM_next
; XXX put NEG here
Z80_instr_3F: ; CCF
+Z80_PUT_0_NF
bbs0 REG_F,@1
@0:
+Z80_PUT_0_HF
+Z80_PUT_1_CF
jmp ZVM_next
@1:
+Z80_PUT_1_HF
+Z80_PUT_0_CF
jmp ZVM_next
Z80_instr_37: ; SCF
+Z80_PUT_0_HF
+Z80_PUT_0_NF
+Z80_PUT_1_CF
jmp ZVM_next
Z80_instr_76: ; HALT
; Used to call BIOS routines
ldx #$01 ; default BIOS function, warm start
lda REG_PC
sec
sbc #$64
cmp #33
bcs @1
tax
@1:
txa
asl
tax
jmp (zvm_BIOS_vectable,x)
Z80_instr_F3: ; DI
lda #$00
+skip_2_bytes_trash_nvz
; FALLTROUGH
sta REG_IFF1
sta REG_IFF2
jmp ZVM_next
Z80_instr_FB: ; EI
+174 -1
View File
@@ -3,4 +3,177 @@
; Z80 Virtual Machine BIOS for CP/M
;
; XXX implement
; Virtual BIOS memory map
; $FE00 - $FE63 - jumptable, 3*33 bytes
; $FE63 - $FE84 - magic HALT instructions to select BIOS routines
; $FE85 - $FEFF - unused
; $FF00 - $FFFF - Disk Drive Tables, dynamically generated, $10 bytes for each one
zvm_BIOS_vectable:
!word zvm_BIOS_00_BOOT
!word zvm_BIOS_01_WBOOT
!word zvm_BIOS_02_CONST
!word zvm_BIOS_03_CONIN
!word zvm_BIOS_04_CONOUT
!word zvm_BIOS_05_LIST
!word zvm_BIOS_06_AUXOUT
!word zvm_BIOS_07_AUXIN
!word zvm_BIOS_08_HOME
!word zvm_BIOS_09_SELDSK
!word zvm_BIOS_10_SETTRK
!word zvm_BIOS_11_SETSEC
!word zvm_BIOS_12_SETDMA
!word zvm_BIOS_13_READ
!word zvm_BIOS_14_WRITE
!word zvm_BIOS_15_LISTST
!word zvm_BIOS_16_SECTRN
!word zvm_BIOS_17_CONOST
!word zvm_BIOS_18_AUXIST
!word zvm_BIOS_19_AUXOST
!word zvm_BIOS_20_DEVTBL
!word zvm_BIOS_21_DEVINI
!word zvm_BIOS_22_DRVTBL
!word zvm_BIOS_23_MULTIO
!word zvm_BIOS_24_FLUSH
!word zvm_BIOS_25_MOVE
!word zvm_BIOS_26_TIME
!word zvm_BIOS_27_SELMEM
!word zvm_BIOS_28_SETBNK
!word zvm_BIOS_29_XMOVE
!word zvm_BIOS_30_USERF
!word zvm_BIOS_31_RESERV1
!word zvm_BIOS_32_RESERV2
zvm_BIOS_00_BOOT: ; Cold start
; XXX !!!
; FALLTROUGH
zvm_BIOS_01_WBOOT: ; Warm start
zvm_BIOS_31_RESERV1: ; Reserved
zvm_BIOS_32_RESERV2: ; Reserved
; XXX !!!
zvm_BIOS_02_CONST: ; Check if input character available
; XXX !!!
zvm_BIOS_03_CONIN: ; Console input
; XXX !!!
zvm_BIOS_04_CONOUT: ; Console output
; XXX
zvm_BIOS_05_LIST: ; Provide list of character output devices
; XXX
zvm_BIOS_06_AUXOUT: ; AUX output
; XXX
zvm_BIOS_07_AUXIN: ; AUX input
; XXX
zvm_BIOS_08_HOME: ; Go to track 0
; XXX !!!
zvm_BIOS_09_SELDSK: ; Select drive
; XXX !!!
zvm_BIOS_10_SETTRK: ; Set track number
; XXX !!!
zvm_BIOS_11_SETSEC: ; Set sector number
; XXX !!!
zvm_BIOS_12_SETDMA: ; Set DMA address
; XXX !!!
zvm_BIOS_13_READ: ; Read sector
; XXX !!!
zvm_BIOS_14_WRITE: ; Write sector
; XXX !!!
zvm_BIOS_15_LISTST: ; List status
; XXX
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
zvm_BIOS_19_AUXOST: ; AUX output status
; XXX
zvm_BIOS_20_DEVTBL: ; Character device table address
; XXX
zvm_BIOS_21_DEVINI: ; Initialize character device
; XXX
zvm_BIOS_22_DRVTBL: ; Disk drive table address
; XXX
zvm_BIOS_23_MULTIO: ; Set number of logically consecutive sectors
; XXX !!!
zvm_BIOS_24_FLUSH: ; Force buffer flushing for user deblocking
; XXX !!!
zvm_BIOS_25_MOVE: ; Memory move
; XXX
zvm_BIOS_26_TIME: ; Get or set time
; XXX !!!
zvm_BIOS_27_SELMEM: ; Select memory bank
; XXX
zvm_BIOS_28_SETBNK: ; Set bank for DMA operation
; XXX
zvm_BIOS_29_XMOVE: ; Set bank if buffer is in bank other than 1 or 2
; XXX
zvm_BIOS_30_USERF: ; Implementation-specific functionality
; XXX implement function to save RAM DISK back to SD CARD
+2 -6
View File
@@ -41,8 +41,8 @@ ZVM_store_next:
asl
tax
bcs @1
jmp (.TAB_LO) ; execute opcode $00-$7F
@1: jmp (.TAB_HI) ; execute opcode $80-$FF
jmp (.TAB_LO,x) ; execute opcode $00-$7F
@1: jmp (.TAB_HI,x) ; execute opcode $80-$FF
}
@@ -114,14 +114,10 @@ Z80_instr_22: ; LD (nn),HL
Z80_instr_27: ; DAA
Z80_instr_29: ; ADD HL,HL
Z80_instr_2A: ; LD HL,(nn)
Z80_instr_2F: ; CPL
Z80_instr_31: ; LD SP,nn
Z80_instr_32: ; LD (nn),A
Z80_instr_37: ; SCF
Z80_instr_39: ; ADD HL,SP
Z80_instr_3A: ; LD A,(nn)
Z80_instr_3F: ; CCF
Z80_instr_76: ; HALT
Z80_instr_80: ; ADD A,B
Z80_instr_81: ; ADD A,C
Z80_instr_82: ; ADD A,D