BIOS now attached to BOOTCPM command, fixed another screen editor bug

This commit is contained in:
FeralChild64 committed 2020-12-23 20:23:17 +01:00
1 parent 6935ece386
commit 94a699119a
10 files changed
+151 -34

No files matched your search

+1 -1
View File
@@ -382,7 +382,7 @@ $(DIR_M65)/dos.seg_1 $(DIR_M65)/DOS_1_combined.vs $(DIR_M65)/DOS_1_combine
$(DIR_M65)/mon.seg_1 $(DIR_M65)/MON_1_combined.vs $(DIR_M65)/MON_1_combined.sym: \
$(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_MON_M65) $(CFG_M65) $(DIR_M65)/KERNAL_0_combined.sym
$(DIR_M65)/zvm.seg_1 $(DIR_M65)/ZVM_1_combined.vs $(DIR_M65)/ZVM_1_combined.sym: \
$(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_ZVM_M65) $(CFG_M65) $(DIR_M65)/KERNAL_0_combined.sym
$(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_ZVM_M65) $(CFG_M65) $(DIR_M65)/KERNAL_0_combined.sym $(DIR_M65)/KERNAL_C_combined.sym
$(DIR_X16)/basic.seg_1 $(DIR_X16)/BASIC_1_combined.vs $(DIR_X16)/BASIC_1_combined.sym: \
$(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) $(CFG_X16) $(GEN_STR_X16) $(DIR_X16)/KERNAL_0_combined.sym $(DIR_X16)/BASIC_0_combined.sym
+10 -3
View File
@@ -4,6 +4,13 @@
BOOTCPM:
; jsr map_MON_1
; XXX implement system startupo
jmp BOOTCPM
jsr CLALL
clc
jsr M65_MODESET
jsr viciv_init ; do it now, later it will not be safe anymore
lda #$01
jsr M65_SCRMODESET
jsr map_ZVM_1
jmp ($2000)
+8
View File
@@ -15,3 +15,11 @@
;; #ALIAS# __kb_matrix_alwaysrepeat_end = KERNAL_0.__kb_matrix_alwaysrepeat_end
;; #ALIAS# kb_matrix_joy_status = KERNAL_0.kb_matrix_joy_status
;; #ALIAS# kb_matrix_joy_keytab_idx = KERNAL_0.kb_matrix_joy_status
;
; Definitions needed to perform proxy functionality for Z80 Virtual Machione
;
;; #ALIAS# CHROUT = KERNAL_0.CHROUT
;; #ALIAS# map_ZVM_1 = KERNAL_0.map_ZVM_1
+19
View File
@@ -10,6 +10,8 @@
; - KERNAL_1 - for calling KERNAL_1 segment code
; - DOS_1 - for swiching to DOS context
; - NORMAL_from_DOS_1 - for switching bact from DOS context
; - MON_1 - for the monitor
; - ZVM_1 - for Z80 virtual machine
map_NORMAL:
@@ -117,3 +119,20 @@ map_MON_1:
map
bra map_end
map_ZVM_1:
php
pha
phx
phy
phz
lda #$00
tay
taz
ldx #$E3 ; $2000 <- map 24KB from $32000
map
bra map_end
+17
View File
@@ -0,0 +1,17 @@
;; #LAYOUT# M65 KERNAL_C #TAKE
;; #LAYOUT# * * #IGNORE
;
; Proxies for calling MEGA65 segment KERNAL_0 routines from ZVM_1
;
proxy_Z1_CHROUT:
jsr CHROUT
; FALLTROUGH
proxy_Z1_end:
jmp map_ZVM_1
@@ -72,23 +72,23 @@ m65_chrout_screen_HOME:
; Character set switching
m65_chrout_screen_GFX:
m65_chrout_screen_TXT:
lda VIC_CHARPTR+1
ora #%00001000
; FALLTROUGH
m65_chrout_screen_GFX_cont:
m65_chrout_screen_GFXTXT_cont:
sta VIC_CHARPTR+1
bra m65_chrout_screen_ctrl2_end
m65_chrout_screen_TXT:
m65_chrout_screen_GFX:
lda VIC_CHARPTR+1
and #%11110111
bra m65_chrout_screen_GFX_cont
bra m65_chrout_screen_GFXTXT_cont
; INS key
+7 -3
View File
@@ -277,18 +277,22 @@ Z80_instr_ED_5F: ; LD A,R
ora REG_IFF2
sta REG_F
clc
lda REG_R06 ; register R only simulates random numbers
bpl @1
sec
@1:
rol
eor VIC_RASTER
adc TIME+2
eor VIC_XPOS
sta REG_R06
and #%01111111
eor REG_R7 ; not 'ora', we want to reuse the 'garbage'
sta REG_A
bpl @1
bpl @2
+Z80_PUT_1_SF
@1:
@2:
+bne ZVM_next
+Z80_PUT_1_ZF
jmp ZVM_next
+3
View File
@@ -71,6 +71,9 @@ zvm_BIOS_00_BOOT: ; Cold start
dew REG_AF ; AF and SP have $FFFF value on start
dew REG_SP
lda TIME+2 ; give a little initial randomness to register R
sta REG_R06
; XXX load CPM3.SYS
; FALLTROUGH
+41 -23
View File
@@ -5,7 +5,47 @@
ZVM_entry:
; XXX mark that this is the first start of CP/M iin the lifecycle, display BIOS information
; Reset stack pointer - this routine will never return
ldx #$FF
txs
; Skip the IRQ processing, even if Kernal reenables it
sei
lda #<return_from_interrupt
sta CINV+0
lda #>return_from_interrupt
sta CINV+1
; Make sure $C000-$CFFF ROM is mapped-in, we keep our proxies there
lda VIC_CTRLA
ora #%00100000
sta VIC_CTRLA
; Setup colours, print welcome message
lda #$00
sta VIC_EXTCOL
sta VIC_BGCOL0
jsr PRIMM
!byte KEY_GREEN, KEY_ESC, 'o', KEY_CLR, KEY_C65_SHIFT_ON, KEY_TXT, KEY_C65_SHIFT_OFF
!pet "Open ROMs MEGA65 BIOS for CP/M", $0D
!pet "Zilog Z80 to 45GS02 translator", $0D
!byte $0D,$0D
!byte 0
; XXX code is not ready to progress further
jsr PRIMM
!byte $0D
!pet "* Implementation not finished yet - system HALTED *"
!byte 0
@1
bra @1
jmp zvm_BIOS_00_BOOT
ZVM_store_next:
@@ -71,28 +111,6 @@ Z80_instr_FD: +ZVM_DISPATCH Z80_vectab_FD_0, Z80_vectab_FD_1 ;
;
; Not implemented yet - XXX implement them!
;
+41
View File
@@ -0,0 +1,41 @@
;; #IMPORT# KERNAL_0 = KERNAL_0_combined.sym
;; #IMPORT# KERNAL_C = KERNAL_C_combined.sym
;
; Definitions for calling MEGA65 segment KERNAL_0 routines from ZVM_1
;
;; #ALIAS# CHROUT = KERNAL_C.proxy_Z1_CHROUT
;; #ALIAS# return_from_interrupt = KERNAL_0.return_from_interrupt
; 'Print immediate', original implementation by Mike Barry, adapted to 65CE02, modified to preserve .Y
; see http://www.6502.org/source/io/primm.htm
PRIMM:
pla ; get low part of (string address-1)
sta PTR1
pla ; get high part of (string address-1)
sta PTR2
phy
+bra @2
@1:
jsr CHROUT ; output a string char
@2:
inc PTR1 ; advance the string pointer
bne @3
inc PTR2
@3:
ldy #$00
lda (PTR1), y ; get string char
bne @1 ; output and continue if not NUL
ply
lda PTR2
pha
lda PTR1
pha
rts