Z80TEST.COM loading code complete, not tested yet
This commit is contained in:
1 parent
6e42bfe731
commit
af7fb6b5fa
4 files changed
+93
-18
No files matched your search
@@ -73,9 +73,17 @@
|
|||||||
; BIOS data
|
; BIOS data
|
||||||
;
|
;
|
||||||
|
|
||||||
!addr VEC_MOVE_fetch = $40 ; 2 bytes - vector to byte fetch routine, for BIOS routine MOVE
|
; Reuse data for loading
|
||||||
!addr VEC_MOVE_store = $42 ; 2 bytes - vector to byte store routine, for BIOS routine MOVE
|
|
||||||
!addr VEC_DISKIO_store = $44 ; 2 bytes - vector to byte store routine, for BIOS disk I/O operations
|
!addr BIOS_IOBUFERPTR = $40 ; 4 bytes - pointer to hardware I/O buffer
|
||||||
|
!addr BIOS_LOADPTR = $44 ; 4 bytes - pointer for loading data
|
||||||
|
!addr BIOS_LOADCOUNT = $48 ; 2 bytes - counter used for loading data
|
||||||
|
|
||||||
|
; XXX are the values below needed?
|
||||||
|
|
||||||
|
!addr VEC_MOVE_fetch = $4A ; 2 bytes - vector to byte fetch routine, for BIOS routine MOVE
|
||||||
|
!addr VEC_MOVE_store = $4C ; 2 bytes - vector to byte store routine, for BIOS routine MOVE
|
||||||
|
!addr VEC_DISKIO_store = $4E ; 2 bytes - vector to byte store routine, for BIOS disk I/O operations
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
; Z80 emulator - precalculated data generator
|
; Z80 emulator - precalculated data generator
|
||||||
;
|
;
|
||||||
|
|
||||||
z80_table_gen:
|
|
||||||
|
Z80_table_gen:
|
||||||
|
|
||||||
jsr PRIMM
|
jsr PRIMM
|
||||||
!pet $0D, "Generating CPU tables... "
|
!pet $0D, "Generating CPU tables... "
|
||||||
|
|||||||
+6
-4
@@ -53,9 +53,11 @@ ZVM: ; entry point
|
|||||||
|
|
||||||
; XXX enable test jsr ZVM_memtest
|
; XXX enable test jsr ZVM_memtest
|
||||||
|
|
||||||
; Generate CPU tables
|
; Generate CPU tables, reset the CPU
|
||||||
|
|
||||||
jsr z80_table_gen
|
jsr Z80_table_gen
|
||||||
|
jsr Z80_reset
|
||||||
|
; XXX Z80 clear memory here
|
||||||
|
|
||||||
; Try CPU test
|
; Try CPU test
|
||||||
|
|
||||||
@@ -66,7 +68,7 @@ ZVM: ; entry point
|
|||||||
; XXX code is not ready to progress further
|
; XXX code is not ready to progress further
|
||||||
jsr PRIMM
|
jsr PRIMM
|
||||||
!pet $0D, "Implementation not finished yet.", 0
|
!pet $0D, "Implementation not finished yet.", 0
|
||||||
jmp ZVM_halt
|
jmp ZVM_syshalt
|
||||||
|
|
||||||
jmp zvm_BIOS_00_BOOT
|
jmp zvm_BIOS_00_BOOT
|
||||||
|
|
||||||
@@ -134,7 +136,7 @@ ZVM_halt_memtest_failed:
|
|||||||
|
|
||||||
; FALLTROUGH
|
; FALLTROUGH
|
||||||
|
|
||||||
ZVM_halt:
|
ZVM_syshalt:
|
||||||
|
|
||||||
jsr PRIMM
|
jsr PRIMM
|
||||||
!pet " * System HALTED *", 0
|
!pet " * System HALTED *", 0
|
||||||
|
|||||||
+74
-10
@@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
ZVM_cputest:
|
ZVM_cputest:
|
||||||
|
|
||||||
|
; XXX move loading code to separate routine(s)
|
||||||
|
|
||||||
; Copy file name to RAM
|
; Copy file name to RAM
|
||||||
|
|
||||||
ldx #$FF
|
ldx #$FF
|
||||||
@@ -24,14 +26,14 @@ ZVM_cputest:
|
|||||||
lda #$2E ; dos_setname
|
lda #$2E ; dos_setname
|
||||||
sta HTRAP00
|
sta HTRAP00
|
||||||
+nop ; required by hypervisor
|
+nop ; required by hypervisor
|
||||||
bcc @end
|
+bcc @end
|
||||||
|
|
||||||
; Try to find the file
|
; Try to find the file
|
||||||
|
|
||||||
lda #$34
|
lda #$34
|
||||||
sta HTRAP00
|
sta HTRAP00
|
||||||
+nop
|
+nop
|
||||||
bcc @end
|
+bcc @end
|
||||||
|
|
||||||
jsr PRIMM
|
jsr PRIMM
|
||||||
!pet "Loading 'Z80TEST.COM'... ", 0
|
!pet "Loading 'Z80TEST.COM'... ", 0
|
||||||
@@ -51,32 +53,94 @@ ZVM_cputest:
|
|||||||
lda #$80
|
lda #$80
|
||||||
tsb $D689 ; XXX invent name for the register
|
tsb $D689 ; XXX invent name for the register
|
||||||
|
|
||||||
|
; Prepare pointers
|
||||||
|
|
||||||
|
lda #$FF
|
||||||
|
sta BIOS_IOBUFERPTR+3
|
||||||
|
lda #$D6
|
||||||
|
sta BIOS_IOBUFERPTR+2
|
||||||
|
|
||||||
|
lda #$FF
|
||||||
|
sta BIOS_IOBUFERPTR+3
|
||||||
|
lda #$D6
|
||||||
|
sta BIOS_IOBUFERPTR+2
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta BIOS_LOADPTR+3
|
||||||
|
lda #$05
|
||||||
|
sta BIOS_LOADPTR+2
|
||||||
|
lda #$01
|
||||||
|
sta BIOS_LOADPTR+1
|
||||||
|
lda #$00
|
||||||
|
sta BIOS_LOADPTR+1
|
||||||
|
|
||||||
|
!addr BIOS_LOADCOUNT = $48 ; 2 bytes - counter used for loading data
|
||||||
|
|
||||||
|
|
||||||
; Read sectors
|
; Read sectors
|
||||||
|
|
||||||
@loop2:
|
@loop2:
|
||||||
|
|
||||||
|
; Set I/O buffer pointer to start
|
||||||
|
|
||||||
|
lda #$6E
|
||||||
|
sta BIOS_IOBUFERPTR+1
|
||||||
|
lda #$00
|
||||||
|
sta BIOS_IOBUFERPTR+0
|
||||||
|
|
||||||
|
; Read up to 512 bytes
|
||||||
|
|
||||||
lda #$1A
|
lda #$1A
|
||||||
sta HTRAP00
|
sta HTRAP00
|
||||||
+nop
|
+nop
|
||||||
|
|
||||||
; .X (low byte) and .Y (high byte) contain number of bytes read
|
; Copy data from buffer to memory
|
||||||
|
|
||||||
; XXX copy data from buffer at $FFD6E00
|
stx BIOS_LOADCOUNT+0
|
||||||
|
sty BIOS_LOADCOUNT+1
|
||||||
|
|
||||||
|
tya
|
||||||
|
ora BIOS_LOADCOUNT+0
|
||||||
|
beq @load_done
|
||||||
|
|
||||||
|
@loop3:
|
||||||
|
|
||||||
; XXX finish the implementation
|
dew BIOS_LOADCOUNT
|
||||||
|
bmi @loop2
|
||||||
|
|
||||||
|
lda [BIOS_IOBUFERPTR],z
|
||||||
|
sta [BIOS_LOADPTR],z
|
||||||
|
|
||||||
|
inw BIOS_IOBUFERPTR
|
||||||
|
inw BIOS_LOADPTR
|
||||||
|
|
||||||
|
bra @loop3
|
||||||
|
|
||||||
|
@load_done:
|
||||||
|
|
||||||
|
; At this moment we have Z80TEST.COM loaded into memory
|
||||||
|
; Install a virtual CP/M, set PC to $0100, and run it!
|
||||||
|
|
||||||
|
lda #$01
|
||||||
|
sta REG_PC+1
|
||||||
|
dec
|
||||||
|
sta BIOS_LOADPTR+1
|
||||||
|
lda #$05
|
||||||
|
sta BIOS_LOADPTR+0
|
||||||
|
lda #$76 ; HALT
|
||||||
|
sta [BIOS_LOADPTR],z
|
||||||
|
inc BIOS_LOADPTR
|
||||||
|
lda #$FF
|
||||||
|
sta [BIOS_LOADPTR],z ; $FF = CP/M simulation for CPU test
|
||||||
|
|
||||||
|
; Run the software
|
||||||
|
|
||||||
|
jmp ZVM_next
|
||||||
|
|
||||||
@end:
|
@end:
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ZVM_filename_Z80TEST:
|
ZVM_filename_Z80TEST:
|
||||||
|
|
||||||
!pet "z80test.com", 0
|
!pet "z80test.com", 0
|
||||||
Reference in new issue
Block a user