adapter converters, preparations for DOS Wedge from within the monitor
This commit is contained in:
1 parent
ec0a03cb07
commit
409b01aec4
10 files changed
+341
-360
No files matched your search
@@ -392,7 +392,7 @@ $(DIR_M65)/kernal.seg_1 $(DIR_M65)/KERNAL_1_combined.vs $(DIR_M65)/KERNAL_1_comb
|
|||||||
$(DIR_M65)/dos.seg_1 $(DIR_M65)/DOS_1_combined.vs $(DIR_M65)/DOS_1_combined.sym: \
|
$(DIR_M65)/dos.seg_1 $(DIR_M65)/DOS_1_combined.vs $(DIR_M65)/DOS_1_combined.sym: \
|
||||||
$(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_DOS_M65) $(CFG_M65)
|
$(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_DOS_M65) $(CFG_M65)
|
||||||
$(DIR_M65)/mon.seg_1 $(DIR_M65)/MON_1_combined.vs $(DIR_M65)/MON_1_combined.sym: \
|
$(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
|
$(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_MON_M65) $(CFG_M65) $(DIR_M65)/KERNAL_0_combined.sym $(DIR_M65)/BASIC_1_combined.sym
|
||||||
$(DIR_M65)/zvm.seg_1 $(DIR_M65)/ZVM_1_combined.vs $(DIR_M65)/ZVM_1_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 $(DIR_M65)/KERNAL_C_combined.sym
|
$(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_ZVM_M65) $(CFG_M65) $(DIR_M65)/KERNAL_0_combined.sym $(DIR_M65)/KERNAL_C_combined.sym
|
||||||
|
|
||||||
|
|||||||
@@ -112,6 +112,7 @@
|
|||||||
!ifdef CONFIG_MB_MEGA65 {
|
!ifdef CONFIG_MB_MEGA65 {
|
||||||
!ifdef CONFIG_IEC_BURST_CIA1 { !error "Do not use CONFIG_IEC_BURST_CIA1 options for MEGA65 motherboard, CONFIG_IEC_BURST_M65 instead" }
|
!ifdef CONFIG_IEC_BURST_CIA1 { !error "Do not use CONFIG_IEC_BURST_CIA1 options for MEGA65 motherboard, CONFIG_IEC_BURST_M65 instead" }
|
||||||
!ifdef CONFIG_IEC_BURST_CIA2 { !error "Do not use CONFIG_IEC_BURST_CIA2 options for MEGA65 motherboard, CONFIG_IEC_BURST_M65 instead" }
|
!ifdef CONFIG_IEC_BURST_CIA2 { !error "Do not use CONFIG_IEC_BURST_CIA2 options for MEGA65 motherboard, CONFIG_IEC_BURST_M65 instead" }
|
||||||
|
!ifndef CONFIG_DOS_WEDGE { !error "MEGA65 build requires CONFIG_DOS_WEDGE" }
|
||||||
}
|
}
|
||||||
!ifndef CONFIG_MB_MEGA65 {
|
!ifndef CONFIG_MB_MEGA65 {
|
||||||
!ifdef CONFIG_IEC_BURST_M65 { !error "CONFIG_IEC_BURST_M65 is only possible for MEGA65 motherboard" }
|
!ifdef CONFIG_IEC_BURST_M65 { !error "CONFIG_IEC_BURST_M65 is only possible for MEGA65 motherboard" }
|
||||||
@@ -343,7 +344,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Handle IEC configuration
|
; Handle IEC and tape configuration
|
||||||
|
|
||||||
!ifdef CONFIG_IEC_BURST_CIA1 { !set HAS_IEC_BURST = 1 }
|
!ifdef CONFIG_IEC_BURST_CIA1 { !set HAS_IEC_BURST = 1 }
|
||||||
!ifdef CONFIG_IEC_BURST_CIA2 { !set HAS_IEC_BURST = 1 }
|
!ifdef CONFIG_IEC_BURST_CIA2 { !set HAS_IEC_BURST = 1 }
|
||||||
@@ -352,10 +353,6 @@
|
|||||||
!ifdef CONFIG_IEC_JIFFYDOS { !set CONFIG_IEC_JIFFYDOS_OR_DOLPHINDOS = 1 }
|
!ifdef CONFIG_IEC_JIFFYDOS { !set CONFIG_IEC_JIFFYDOS_OR_DOLPHINDOS = 1 }
|
||||||
!ifdef CONFIG_IEC_DOLPHINDOS { !set CONFIG_IEC_JIFFYDOS_OR_DOLPHINDOS = 1 }
|
!ifdef CONFIG_IEC_DOLPHINDOS { !set CONFIG_IEC_JIFFYDOS_OR_DOLPHINDOS = 1 }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Handle tape configuration
|
|
||||||
|
|
||||||
!ifdef CONFIG_TAPE_NORMAL { !set HAS_TAPE = 1 }
|
!ifdef CONFIG_TAPE_NORMAL { !set HAS_TAPE = 1 }
|
||||||
!ifdef CONFIG_TAPE_TURBO { !set HAS_TAPE = 1 }
|
!ifdef CONFIG_TAPE_TURBO { !set HAS_TAPE = 1 }
|
||||||
|
|
||||||
|
|||||||
@@ -40,12 +40,14 @@
|
|||||||
;; #ALIAS# map_end = KERNAL_0.map_end
|
;; #ALIAS# map_end = KERNAL_0.map_end
|
||||||
;; #ALIAS# map_NORMAL = KERNAL_0.map_NORMAL
|
;; #ALIAS# map_NORMAL = KERNAL_0.map_NORMAL
|
||||||
;; #ALIAS# map_BASIC_1 = KERNAL_0.map_BASIC_1
|
;; #ALIAS# map_BASIC_1 = KERNAL_0.map_BASIC_1
|
||||||
|
;; #ALIAS# map_MON_1 = KERNAL_0.map_MON_1
|
||||||
|
|
||||||
;; #ALIAS# M65_MODEGET = KERNAL_0.M65_MODEGET
|
;; #ALIAS# M65_MODEGET = KERNAL_0.M65_MODEGET
|
||||||
;; #ALIAS# M65_MODESET = KERNAL_0.M65_MODESET
|
;; #ALIAS# M65_MODESET = KERNAL_0.M65_MODESET
|
||||||
;; #ALIAS# M65_SETWIN_Y = KERNAL_0.M65_SETWIN_Y
|
;; #ALIAS# M65_SETWIN_Y = KERNAL_0.M65_SETWIN_Y
|
||||||
|
|
||||||
;; #ALIAS# m65_colorset = KERNAL_0.m65_colorset
|
;; #ALIAS# m65_colorset = KERNAL_0.m65_colorset
|
||||||
|
;; #ALIAS# m65_shadow_BZP = KERNAL_0.m65_shadow_BZP
|
||||||
|
|
||||||
;
|
;
|
||||||
; Ultimate 64 specific parts
|
; Ultimate 64 specific parts
|
||||||
|
|||||||
@@ -27,10 +27,8 @@
|
|||||||
!addr VB1__prepare_direct_execution = $4000 + 2 * 12
|
!addr VB1__prepare_direct_execution = $4000 + 2 * 12
|
||||||
!addr VB1__helper_ask_if_sure = $4000 + 2 * 13
|
!addr VB1__helper_ask_if_sure = $4000 + 2 * 13
|
||||||
!addr VB1__helper_eggshell = $4000 + 2 * 14
|
!addr VB1__helper_eggshell = $4000 + 2 * 14
|
||||||
|
!addr VB1__wedge_dos = $4000 + 2 * 15
|
||||||
!ifdef CONFIG_DOS_WEDGE {
|
!addr VB1__wedge_dos_monitor = $4000 + 2 * 15
|
||||||
!addr VB1__wedge_dos = $4000 + 2 * 15
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@@ -51,10 +49,7 @@
|
|||||||
!word prepare_direct_execution
|
!word prepare_direct_execution
|
||||||
!word helper_ask_if_sure
|
!word helper_ask_if_sure
|
||||||
!word helper_eggshell
|
!word helper_eggshell
|
||||||
|
|
||||||
!ifdef CONFIG_DOS_WEDGE {
|
|
||||||
!word wedge_dos
|
!word wedge_dos
|
||||||
}
|
!word wedge_dos_monitor
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,23 @@
|
|||||||
!ifdef CONFIG_DOS_WEDGE {
|
!ifdef CONFIG_DOS_WEDGE {
|
||||||
|
|
||||||
|
|
||||||
|
!ifdef SEGMENT_M65_BASIC_0 {
|
||||||
|
|
||||||
|
wedge_dos_monitor: ; entry point for the MONITOR
|
||||||
|
|
||||||
|
jsr m65_shadow_BZP
|
||||||
|
jsr map_BASIC_1
|
||||||
|
jsr (VB1__wedge_dos_monitor)
|
||||||
|
jsr m65_shadow_BZP
|
||||||
|
jmp map_MON_1
|
||||||
|
|
||||||
|
} else ifdef SEGMENT_M65_BASIC_1 {
|
||||||
|
|
||||||
|
wedge_dos_monitor:
|
||||||
|
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
; .X has to contain size of the buffer
|
; .X has to contain size of the buffer
|
||||||
|
|
||||||
wedge_dos:
|
wedge_dos:
|
||||||
|
|||||||
@@ -24,52 +24,10 @@ proxy_M1_end:
|
|||||||
jmp map_MON_1
|
jmp map_MON_1
|
||||||
|
|
||||||
|
|
||||||
; Routines below typicaly do not change mapping - but it is still possible they'll do
|
; Memory acccess routines
|
||||||
|
|
||||||
|
|
||||||
proxy_M1_SECOND:
|
!addr Long__TMP = $64 ; has to be the same as Long_TMP in monitor
|
||||||
|
|
||||||
jsr SECOND
|
|
||||||
bra proxy_M1_end
|
|
||||||
|
|
||||||
proxy_M1_TKSA:
|
|
||||||
|
|
||||||
jsr TKSA
|
|
||||||
bra proxy_M1_end
|
|
||||||
|
|
||||||
proxy_M1_ACPTR:
|
|
||||||
|
|
||||||
jsr ACPTR
|
|
||||||
bra proxy_M1_end
|
|
||||||
|
|
||||||
proxy_M1_CIOUT:
|
|
||||||
|
|
||||||
jsr CIOUT
|
|
||||||
bra proxy_M1_end
|
|
||||||
|
|
||||||
proxy_M1_UNTLK:
|
|
||||||
|
|
||||||
jsr UNTLK
|
|
||||||
bra proxy_M1_end
|
|
||||||
|
|
||||||
proxy_M1_UNLSN:
|
|
||||||
|
|
||||||
jsr UNLSN
|
|
||||||
bra proxy_M1_end
|
|
||||||
|
|
||||||
proxy_M1_LISTEN:
|
|
||||||
|
|
||||||
jsr LISTEN
|
|
||||||
bra proxy_M1_end
|
|
||||||
|
|
||||||
proxy_M1_TALK:
|
|
||||||
|
|
||||||
jsr TALK
|
|
||||||
bra proxy_M1_end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!addr Long__TMP = $3C ; has to be the same as Long_TMP in monitor
|
|
||||||
|
|
||||||
proxy_M1_memread:
|
proxy_M1_memread:
|
||||||
|
|
||||||
|
|||||||
@@ -56,13 +56,8 @@
|
|||||||
!addr Op_Mne = $2C ; 3 bytes for mnemonic
|
!addr Op_Mne = $2C ; 3 bytes for mnemonic
|
||||||
!addr Op_Ix = $2F ; type of constant
|
!addr Op_Ix = $2F ; type of constant
|
||||||
!addr Op_Len = $30 ; length of operand
|
!addr Op_Len = $30 ; length of operand
|
||||||
!addr Disk_Track = $31 ; logical track 1 -> 255
|
|
||||||
!addr Disk_Sector = $32 ; logical sector 0 -> 255
|
|
||||||
!addr Disk_Status = $33 ; BCD value of status
|
|
||||||
|
|
||||||
; $34-$3B - free space, unused for now
|
; $31-$63 - free space, unused for now
|
||||||
|
|
||||||
!addr Long_TMP = $3C ; temporary pointer, for fetching/storing memory content; has to be the same as Long__TMP in Kernal
|
!addr Long_TMP = $64 ; temporary pointer, for fetching/storing memory content; has to be the same as Long__TMP in Kernal
|
||||||
|
!addr Mon_Data = $68 ; 40 bytes, buffer for hunt
|
||||||
!addr Disk_Msg = $40 ; 40 bytes, disk status as text message ; XXX rework code to make it not needed
|
|
||||||
!addr Mon_Data = $68 ; 40 bytes, buffer for hunt and filename
|
|
||||||
+13
-286
@@ -10,7 +10,7 @@ Mon_Call:
|
|||||||
; *******
|
; *******
|
||||||
|
|
||||||
jsr PRIMM
|
jsr PRIMM
|
||||||
!pet $0D, "* warning * - adaptation to open roms not finished yet", $0D, $0D, $00
|
!pet $0D, "* warning * port not finished yet", $0D, $0D, $00
|
||||||
|
|
||||||
|
|
||||||
JSR Print_Commands
|
JSR Print_Commands
|
||||||
@@ -163,7 +163,7 @@ Print_Commands:
|
|||||||
; *************
|
; *************
|
||||||
|
|
||||||
JSR PRIMM
|
JSR PRIMM
|
||||||
!pet KEY_RETURN,KEY_RVS_ON," commands: "
|
!pet KEY_RETURN," ",KEY_RVS_ON," commands: "
|
||||||
|
|
||||||
; ***********
|
; ***********
|
||||||
Command_Char:
|
Command_Char:
|
||||||
@@ -176,7 +176,7 @@ Command_Char:
|
|||||||
Cons_Prefix:
|
Cons_Prefix:
|
||||||
; **********
|
; **********
|
||||||
|
|
||||||
!pet "$+&%'"
|
!pet "$+&%"
|
||||||
|
|
||||||
; ***************
|
; ***************
|
||||||
Load_Save_Verify:
|
Load_Save_Verify:
|
||||||
@@ -206,10 +206,10 @@ Jump_Table:
|
|||||||
!word Mon_Set_Memory ; > XXX to be debugged/adapted
|
!word Mon_Set_Memory ; > XXX to be debugged/adapted
|
||||||
!word Mon_Set_Register ; ; XXX to be debugged/adapted
|
!word Mon_Set_Register ; ; XXX to be debugged/adapted
|
||||||
!word Mon_Help ; ?
|
!word Mon_Help ; ?
|
||||||
!word Converter ; $ XXX to be debugged/adapted
|
!word Converter ; $
|
||||||
!word Converter ; + XXX to be debugged/adapted
|
!word Converter ; +
|
||||||
!word Converter ; & XXX to be debugged/adapted
|
!word Converter ; &
|
||||||
!word Converter ; % XXX to be debugged/adapted
|
!word Converter ; %
|
||||||
|
|
||||||
; *******
|
; *******
|
||||||
Mon_Exit:
|
Mon_Exit:
|
||||||
@@ -1881,8 +1881,9 @@ Converter:
|
|||||||
|
|
||||||
LDX #0
|
LDX #0
|
||||||
STX Buf_Index
|
STX Buf_Index
|
||||||
JSR Get_LAC
|
JSR Get_Addr_To_LAC
|
||||||
LBCS Mon_Error
|
LBEQ Mon_Error
|
||||||
|
JSR Print_CR
|
||||||
LDX #0
|
LDX #0
|
||||||
@loop PHX
|
@loop PHX
|
||||||
JSR CR_Erase
|
JSR CR_Erase
|
||||||
@@ -1896,6 +1897,7 @@ Converter:
|
|||||||
INX
|
INX
|
||||||
CPX #4
|
CPX #4
|
||||||
BCC @loop
|
BCC @loop
|
||||||
|
JSR Print_CR
|
||||||
JMP Main
|
JMP Main
|
||||||
|
|
||||||
Conv_Tab !word Print_Hexval
|
Conv_Tab !word Print_Hexval
|
||||||
@@ -2018,288 +2020,13 @@ Print_BCD:
|
|||||||
BNE @loopa
|
BNE @loopa
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
; **************
|
|
||||||
Get_Disk_Status:
|
|
||||||
; **************
|
|
||||||
|
|
||||||
LDA FA
|
|
||||||
JSR TALK
|
|
||||||
LDA #$6f
|
|
||||||
JSR TKSA
|
|
||||||
JSR ACPTR ; 1st. digit
|
|
||||||
STA Disk_Msg
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
STA Disk_Status ; BCD
|
|
||||||
JSR ACPTR ; 2nd. digit
|
|
||||||
STA Disk_Msg+1
|
|
||||||
AND #15
|
|
||||||
ORA Disk_Status
|
|
||||||
STA Disk_Status ; complete BCD number
|
|
||||||
|
|
||||||
LDY #1
|
|
||||||
@loop INY
|
|
||||||
JSR ACPTR
|
|
||||||
STA Disk_Msg,Y
|
|
||||||
CMP #' '
|
|
||||||
BCS @loop
|
|
||||||
LDA #0
|
|
||||||
STA Disk_Msg,Y
|
|
||||||
JSR UNTLK
|
|
||||||
LDA Disk_Status
|
|
||||||
RTS
|
|
||||||
|
|
||||||
; ****************
|
|
||||||
Print_Disk_Status:
|
|
||||||
; ****************
|
|
||||||
|
|
||||||
JSR Get_Disk_Status
|
|
||||||
|
|
||||||
; *************
|
|
||||||
Print_Disk_Msg:
|
|
||||||
; *************
|
|
||||||
|
|
||||||
JSR Print_CR
|
|
||||||
LDY #0
|
|
||||||
@loop LDA Disk_Msg,Y
|
|
||||||
BEQ @exit
|
|
||||||
JSR CHROUT
|
|
||||||
INY
|
|
||||||
BRA @loop
|
|
||||||
@exit JMP Print_CR
|
|
||||||
|
|
||||||
; ******
|
; ******
|
||||||
Mon_DOS:
|
Mon_DOS:
|
||||||
; ******
|
; ******
|
||||||
|
|
||||||
; XXX for Open ROMs it should invoke internal DOS wedge!
|
JSR wedge_dos_monitor
|
||||||
jmp Main
|
|
||||||
|
|
||||||
; ****
|
|
||||||
DOS_U: ; XXX connect it somehow to command list
|
|
||||||
; ****
|
|
||||||
|
|
||||||
; @[u],U1 mem track startsec [endsec] : read disk sector(s)
|
|
||||||
; @[u],U2 mem track startsec [endsec] : write disk sector(s)
|
|
||||||
|
|
||||||
JSR Get_Char
|
|
||||||
CMP #'1' ; U1: read
|
|
||||||
LBCC Mon_Error
|
|
||||||
CMP #'3' ; U2: write
|
|
||||||
LBCS Mon_Error
|
|
||||||
STA Mon_Data+1 ; U type
|
|
||||||
INC Buf_Index
|
|
||||||
JSR Get_LAC
|
|
||||||
LBCS Mon_Error
|
|
||||||
JSR LAC_To_LPC ; Long_PC = memory address
|
|
||||||
|
|
||||||
JSR Get_LAC
|
|
||||||
LBCS Mon_Error
|
|
||||||
LDA Long_AC
|
|
||||||
STA Disk_Track
|
|
||||||
|
|
||||||
JSR Get_LAC
|
|
||||||
LBCS Mon_Error
|
|
||||||
LDA Long_AC
|
|
||||||
STA Disk_Sector
|
|
||||||
|
|
||||||
JSR Get_LAC
|
|
||||||
JSR LAC_To_LCT ; Long_CT = sector count
|
|
||||||
DEW Long_CT ; Long_CT = -1 for single
|
|
||||||
|
|
||||||
JSR Open_Disk_Buffer
|
|
||||||
|
|
||||||
@loop LDA Mon_Data+1
|
|
||||||
LSR
|
|
||||||
BEQ @write
|
|
||||||
JSR Find_next_Sector
|
|
||||||
BNE @error
|
|
||||||
JSR Read_Sector
|
|
||||||
BRA @next
|
|
||||||
|
|
||||||
@write JSR Write_Sector
|
|
||||||
JSR Find_next_Sector
|
|
||||||
BNE @error
|
|
||||||
|
|
||||||
@next JSR Inc_LPC_Page
|
|
||||||
INC Disk_Sector
|
|
||||||
DEW Long_CT
|
|
||||||
BPL @loop
|
|
||||||
|
|
||||||
@error JSR Print_Disk_Msg
|
|
||||||
JSR Close_Disk_Buffer
|
|
||||||
JMP Main
|
JMP Main
|
||||||
|
|
||||||
; ***************
|
|
||||||
Find_next_Sector:
|
|
||||||
; ***************
|
|
||||||
|
|
||||||
JSR Build_U_String
|
|
||||||
JSR Send_Disk_Command
|
|
||||||
JSR Get_Disk_Status
|
|
||||||
BEQ @return ; OK
|
|
||||||
CMP #$66 ; illegal track or sector
|
|
||||||
BNE @error ; error
|
|
||||||
LDA #0
|
|
||||||
STA Disk_Sector
|
|
||||||
INC Disk_Track ; try next track
|
|
||||||
JSR Build_U_String
|
|
||||||
JSR Send_Disk_Command
|
|
||||||
JSR Get_Disk_Status
|
|
||||||
BEQ @return
|
|
||||||
@error JSR Print_Disk_Msg
|
|
||||||
LDA Disk_Status
|
|
||||||
@return RTS
|
|
||||||
|
|
||||||
; *******************
|
|
||||||
Open_Command_Channel:
|
|
||||||
; *******************
|
|
||||||
|
|
||||||
LDA FA
|
|
||||||
JSR LISTEN
|
|
||||||
LDA #$ff
|
|
||||||
JSR SECOND
|
|
||||||
LDY #0
|
|
||||||
STY IOSTATUS
|
|
||||||
RTS
|
|
||||||
|
|
||||||
; ******
|
|
||||||
Reset_BP
|
|
||||||
; ******
|
|
||||||
|
|
||||||
JSR Open_Command_Channel
|
|
||||||
@loop LDA BP_ZERO,Y
|
|
||||||
BEQ @end
|
|
||||||
JSR CIOUT
|
|
||||||
INY
|
|
||||||
BRA @loop
|
|
||||||
@end JMP UNLSN
|
|
||||||
|
|
||||||
; ****************
|
|
||||||
Send_Disk_Command:
|
|
||||||
; ****************
|
|
||||||
|
|
||||||
JSR Open_Command_Channel
|
|
||||||
@loop LDA Mon_Data,Y
|
|
||||||
BEQ @end
|
|
||||||
JSR CIOUT
|
|
||||||
INY
|
|
||||||
BRA @loop
|
|
||||||
@end JMP UNLSN
|
|
||||||
|
|
||||||
; **********
|
|
||||||
Read_Sector:
|
|
||||||
; **********
|
|
||||||
|
|
||||||
LDA FA
|
|
||||||
JSR TALK
|
|
||||||
LDA #$69 ; SA = 9
|
|
||||||
JSR TKSA
|
|
||||||
LDZ #0
|
|
||||||
STZ IOSTATUS
|
|
||||||
@loop JSR ACPTR
|
|
||||||
STA [Long_PC],Z
|
|
||||||
INZ
|
|
||||||
BNE @loop
|
|
||||||
JMP UNTLK
|
|
||||||
|
|
||||||
; ***********
|
|
||||||
Write_Sector:
|
|
||||||
; ***********
|
|
||||||
|
|
||||||
JSR Reset_BP ; reset disk buffer pointer
|
|
||||||
LDA FA
|
|
||||||
JSR LISTEN
|
|
||||||
LDA #$69 ; SA = 9
|
|
||||||
JSR TKSA
|
|
||||||
LDZ #0
|
|
||||||
STZ IOSTATUS
|
|
||||||
@loop LDA [Long_PC],Z
|
|
||||||
JSR CIOUT
|
|
||||||
INZ
|
|
||||||
BNE @loop
|
|
||||||
JSR UNLSN
|
|
||||||
RTS
|
|
||||||
|
|
||||||
; *****
|
|
||||||
Set_TS:
|
|
||||||
; *****
|
|
||||||
|
|
||||||
; Input A = track or sector
|
|
||||||
; X = string index
|
|
||||||
|
|
||||||
@100 CMP #100
|
|
||||||
BCC @10
|
|
||||||
INC Mon_Data,X
|
|
||||||
SBC #100
|
|
||||||
BRA @100
|
|
||||||
@10 CMP #10
|
|
||||||
BCC @1
|
|
||||||
INC Mon_Data+1,X
|
|
||||||
SBC #10
|
|
||||||
BRA @10
|
|
||||||
@1 ORA #'0'
|
|
||||||
STA Mon_Data+2,X
|
|
||||||
RTS
|
|
||||||
|
|
||||||
; @[u],U1 mem track startsec [endsec] : read disk sector(s)
|
|
||||||
|
|
||||||
; U1:CHANNEL DRIVE TRACK SECTOR
|
|
||||||
|
|
||||||
; *************
|
|
||||||
Build_U_String:
|
|
||||||
; *************
|
|
||||||
|
|
||||||
LDX #14
|
|
||||||
@loop LDA U1,X
|
|
||||||
STA Mon_Data,X
|
|
||||||
DEX
|
|
||||||
CPX #2
|
|
||||||
BCS @loop
|
|
||||||
LDA #'U'
|
|
||||||
STA Mon_Data
|
|
||||||
LDA Disk_Track
|
|
||||||
LDX #7
|
|
||||||
JSR Set_TS
|
|
||||||
LDA Disk_Sector
|
|
||||||
LDX #11
|
|
||||||
JMP Set_TS
|
|
||||||
|
|
||||||
; ***************
|
|
||||||
Open_Disk_Buffer:
|
|
||||||
; ***************
|
|
||||||
|
|
||||||
LDA #0
|
|
||||||
STA IOSTATUS
|
|
||||||
LDA FA
|
|
||||||
JSR LISTEN ; open fa,9,"#"
|
|
||||||
LDA #$f9 ; sa = 9
|
|
||||||
JSR SECOND
|
|
||||||
LDA #'#' ; open buffer
|
|
||||||
JSR CIOUT
|
|
||||||
JSR UNLSN
|
|
||||||
LDA IOSTATUS
|
|
||||||
LBNE Print_Disk_Status
|
|
||||||
RTS
|
|
||||||
|
|
||||||
; ****************
|
|
||||||
Close_Disk_Buffer:
|
|
||||||
; ****************
|
|
||||||
|
|
||||||
LDA #0
|
|
||||||
STA IOSTATUS
|
|
||||||
LDA FA
|
|
||||||
JSR LISTEN ; open fa,9,"#"
|
|
||||||
LDA #$e9 ; sa = 9
|
|
||||||
JSR SECOND
|
|
||||||
JSR UNLSN
|
|
||||||
LDA IOSTATUS
|
|
||||||
LBNE Print_Disk_Status
|
|
||||||
RTS
|
|
||||||
|
|
||||||
|
|
||||||
; The 3 letter mnemonics are encoded as three 5-bit values
|
; The 3 letter mnemonics are encoded as three 5-bit values
|
||||||
; and stored in a left byte MNE_L and a right byte MNE_R
|
; and stored in a left byte MNE_L and a right byte MNE_R
|
||||||
@@ -2648,7 +2375,7 @@ Mon_Help:
|
|||||||
!pet KEY_ESC,'s',".",KEY_ESC,'u',"<dot> - . address mnemonic operand",KEY_RETURN
|
!pet KEY_ESC,'s',".",KEY_ESC,'u',"<dot> - . address mnemonic operand",KEY_RETURN
|
||||||
!pet KEY_ESC,'s',">",KEY_ESC,'u',"<greater> - > address byte sequence",KEY_RETURN
|
!pet KEY_ESC,'s',">",KEY_ESC,'u',"<greater> - > address byte sequence",KEY_RETURN
|
||||||
!pet KEY_ESC,'s',";",KEY_ESC,'u',"<semicolon> - ; register contents",KEY_RETURN
|
!pet KEY_ESC,'s',";",KEY_ESC,'u',"<semicolon> - ; register contents",KEY_RETURN
|
||||||
!pet KEY_ESC,'s',"@",KEY_ESC,'u',"dos - @ [dos command]",KEY_RETURN
|
!pet KEY_ESC,'s',"@",KEY_ESC,'u',"dos - @[dos wedge command]",KEY_RETURN
|
||||||
!pet KEY_ESC,'s',"$",KEY_ESC,'u',"<dollar> - hexadecimal number (default)",KEY_RETURN
|
!pet KEY_ESC,'s',"$",KEY_ESC,'u',"<dollar> - hexadecimal number (default)",KEY_RETURN
|
||||||
!pet KEY_ESC,'s',"+",KEY_ESC,'u',"<plus> - decimal number",KEY_RETURN
|
!pet KEY_ESC,'s',"+",KEY_ESC,'u',"<plus> - decimal number",KEY_RETURN
|
||||||
!pet KEY_ESC,'s',"&",KEY_ESC,'u',"<ampersand> - octal number",KEY_RETURN
|
!pet KEY_ESC,'s',"&",KEY_ESC,'u',"<ampersand> - octal number",KEY_RETURN
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
;; #IMPORT# KERNAL_0 = KERNAL_0_combined.sym
|
;; #IMPORT# KERNAL_0 = KERNAL_0_combined.sym
|
||||||
|
;; #IMPORT# BASIC_0 = BASIC_0_combined.sym
|
||||||
|
|
||||||
;
|
;
|
||||||
; Definitions for calling MEGA65 segment KERNAL_0 routines from MON_1
|
; Definitions for calling MEGA65 segment KERNAL_0 routines from MON_1
|
||||||
@@ -13,14 +14,8 @@
|
|||||||
|
|
||||||
;; #ALIAS# CHRIN = KERNAL_0.proxy_M1_CHRIN
|
;; #ALIAS# CHRIN = KERNAL_0.proxy_M1_CHRIN
|
||||||
;; #ALIAS# CHROUT = KERNAL_0.proxy_M1_CHROUT
|
;; #ALIAS# CHROUT = KERNAL_0.proxy_M1_CHROUT
|
||||||
;; #ALIAS# SECOND = KERNAL_0.proxy_M1_SECOND
|
|
||||||
;; #ALIAS# TKSA = KERNAL_0.proxy_M1_TKSA
|
;; #ALIAS# wedge_dos_monitor = BASIC_0.wedge_dos_monitor
|
||||||
;; #ALIAS# ACPTR = KERNAL_0.proxy_M1_ACPTR
|
|
||||||
;; #ALIAS# CIOUT = KERNAL_0.proxy_M1_CIOUT
|
|
||||||
;; #ALIAS# UNTLK = KERNAL_0.proxy_M1_UNTLK
|
|
||||||
;; #ALIAS# UNLSN = KERNAL_0.proxy_M1_UNLSN
|
|
||||||
;; #ALIAS# LISTEN = KERNAL_0.proxy_M1_LISTEN
|
|
||||||
;; #ALIAS# TALK = KERNAL_0.proxy_M1_TALK
|
|
||||||
|
|
||||||
|
|
||||||
; 'Print immediate', original implementation by Mike Barry, adapted to 65CE02, modified to preserve .Y
|
; 'Print immediate', original implementation by Mike Barry, adapted to 65CE02, modified to preserve .Y
|
||||||
|
|||||||
@@ -0,0 +1,295 @@
|
|||||||
|
|
||||||
|
; Based on BSM (Bit Shifter's Monitor) - disabled code
|
||||||
|
|
||||||
|
!ifdef DISABLED_DISABLED {
|
||||||
|
|
||||||
|
!addr Disk_Track = $XX ; logical track 1 -> 255
|
||||||
|
!addr Disk_Sector = $XX ; logical sector 0 -> 255
|
||||||
|
!addr Disk_Status = $XX ; BCD value of status
|
||||||
|
|
||||||
|
!addr Disk_Msg = $XX ; 40 bytes, disk status as text message
|
||||||
|
|
||||||
|
; **************
|
||||||
|
Get_Disk_Status:
|
||||||
|
; **************
|
||||||
|
|
||||||
|
LDA FA
|
||||||
|
JSR TALK
|
||||||
|
LDA #$6f
|
||||||
|
JSR TKSA
|
||||||
|
JSR ACPTR ; 1st. digit
|
||||||
|
STA Disk_Msg
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
STA Disk_Status ; BCD
|
||||||
|
JSR ACPTR ; 2nd. digit
|
||||||
|
STA Disk_Msg+1
|
||||||
|
AND #15
|
||||||
|
ORA Disk_Status
|
||||||
|
STA Disk_Status ; complete BCD number
|
||||||
|
|
||||||
|
LDY #1
|
||||||
|
@loop INY
|
||||||
|
JSR ACPTR
|
||||||
|
STA Disk_Msg,Y
|
||||||
|
CMP #' '
|
||||||
|
BCS @loop
|
||||||
|
LDA #0
|
||||||
|
STA Disk_Msg,Y
|
||||||
|
JSR UNTLK
|
||||||
|
LDA Disk_Status
|
||||||
|
RTS
|
||||||
|
|
||||||
|
; ****************
|
||||||
|
Print_Disk_Status:
|
||||||
|
; ****************
|
||||||
|
|
||||||
|
JSR Get_Disk_Status
|
||||||
|
|
||||||
|
; *************
|
||||||
|
Print_Disk_Msg:
|
||||||
|
; *************
|
||||||
|
|
||||||
|
JSR Print_CR
|
||||||
|
LDY #0
|
||||||
|
@loop LDA Disk_Msg,Y
|
||||||
|
BEQ @exit
|
||||||
|
JSR CHROUT
|
||||||
|
INY
|
||||||
|
BRA @loop
|
||||||
|
@exit JMP Print_CR
|
||||||
|
|
||||||
|
; ****
|
||||||
|
DOS_U: ; XXX connect it somehow to command list
|
||||||
|
; ****
|
||||||
|
|
||||||
|
; @[u],U1 mem track startsec [endsec] : read disk sector(s)
|
||||||
|
; @[u],U2 mem track startsec [endsec] : write disk sector(s)
|
||||||
|
|
||||||
|
JSR Get_Char
|
||||||
|
CMP #'1' ; U1: read
|
||||||
|
LBCC Mon_Error
|
||||||
|
CMP #'3' ; U2: write
|
||||||
|
LBCS Mon_Error
|
||||||
|
STA Mon_Data+1 ; U type
|
||||||
|
INC Buf_Index
|
||||||
|
JSR Get_LAC
|
||||||
|
LBCS Mon_Error
|
||||||
|
JSR LAC_To_LPC ; Long_PC = memory address
|
||||||
|
|
||||||
|
JSR Get_LAC
|
||||||
|
LBCS Mon_Error
|
||||||
|
LDA Long_AC
|
||||||
|
STA Disk_Track
|
||||||
|
|
||||||
|
JSR Get_LAC
|
||||||
|
LBCS Mon_Error
|
||||||
|
LDA Long_AC
|
||||||
|
STA Disk_Sector
|
||||||
|
|
||||||
|
JSR Get_LAC
|
||||||
|
JSR LAC_To_LCT ; Long_CT = sector count
|
||||||
|
DEW Long_CT ; Long_CT = -1 for single
|
||||||
|
|
||||||
|
JSR Open_Disk_Buffer
|
||||||
|
|
||||||
|
@loop LDA Mon_Data+1
|
||||||
|
LSR
|
||||||
|
BEQ @write
|
||||||
|
JSR Find_next_Sector
|
||||||
|
BNE @error
|
||||||
|
JSR Read_Sector
|
||||||
|
BRA @next
|
||||||
|
|
||||||
|
@write JSR Write_Sector
|
||||||
|
JSR Find_next_Sector
|
||||||
|
BNE @error
|
||||||
|
|
||||||
|
@next JSR Inc_LPC_Page
|
||||||
|
INC Disk_Sector
|
||||||
|
DEW Long_CT
|
||||||
|
BPL @loop
|
||||||
|
|
||||||
|
@error JSR Print_Disk_Msg
|
||||||
|
JSR Close_Disk_Buffer
|
||||||
|
JMP Main
|
||||||
|
|
||||||
|
; ***************
|
||||||
|
Find_next_Sector:
|
||||||
|
; ***************
|
||||||
|
|
||||||
|
JSR Build_U_String
|
||||||
|
JSR Send_Disk_Command
|
||||||
|
JSR Get_Disk_Status
|
||||||
|
BEQ @return ; OK
|
||||||
|
CMP #$66 ; illegal track or sector
|
||||||
|
BNE @error ; error
|
||||||
|
LDA #0
|
||||||
|
STA Disk_Sector
|
||||||
|
INC Disk_Track ; try next track
|
||||||
|
JSR Build_U_String
|
||||||
|
JSR Send_Disk_Command
|
||||||
|
JSR Get_Disk_Status
|
||||||
|
BEQ @return
|
||||||
|
@error JSR Print_Disk_Msg
|
||||||
|
LDA Disk_Status
|
||||||
|
@return RTS
|
||||||
|
|
||||||
|
; *******************
|
||||||
|
Open_Command_Channel:
|
||||||
|
; *******************
|
||||||
|
|
||||||
|
LDA FA
|
||||||
|
JSR LISTEN
|
||||||
|
LDA #$ff
|
||||||
|
JSR SECOND
|
||||||
|
LDY #0
|
||||||
|
STY IOSTATUS
|
||||||
|
RTS
|
||||||
|
|
||||||
|
; *******
|
||||||
|
Reset_BP:
|
||||||
|
; *******
|
||||||
|
|
||||||
|
JSR Open_Command_Channel
|
||||||
|
@loop LDA BP_ZERO,Y
|
||||||
|
BEQ @end
|
||||||
|
JSR CIOUT
|
||||||
|
INY
|
||||||
|
BRA @loop
|
||||||
|
@end JMP UNLSN
|
||||||
|
|
||||||
|
; ****************
|
||||||
|
Send_Disk_Command:
|
||||||
|
; ****************
|
||||||
|
|
||||||
|
JSR Open_Command_Channel
|
||||||
|
@loop LDA Mon_Data,Y
|
||||||
|
BEQ @end
|
||||||
|
JSR CIOUT
|
||||||
|
INY
|
||||||
|
BRA @loop
|
||||||
|
@end JMP UNLSN
|
||||||
|
|
||||||
|
; **********
|
||||||
|
Read_Sector:
|
||||||
|
; **********
|
||||||
|
|
||||||
|
LDA FA
|
||||||
|
JSR TALK
|
||||||
|
LDA #$69 ; SA = 9
|
||||||
|
JSR TKSA
|
||||||
|
LDZ #0
|
||||||
|
STZ IOSTATUS
|
||||||
|
@loop JSR ACPTR
|
||||||
|
STA [Long_PC],Z
|
||||||
|
INZ
|
||||||
|
BNE @loop
|
||||||
|
JMP UNTLK
|
||||||
|
|
||||||
|
; ***********
|
||||||
|
Write_Sector:
|
||||||
|
; ***********
|
||||||
|
|
||||||
|
JSR Reset_BP ; reset disk buffer pointer
|
||||||
|
LDA FA
|
||||||
|
JSR LISTEN
|
||||||
|
LDA #$69 ; SA = 9
|
||||||
|
JSR TKSA
|
||||||
|
LDZ #0
|
||||||
|
STZ IOSTATUS
|
||||||
|
@loop LDA [Long_PC],Z
|
||||||
|
JSR CIOUT
|
||||||
|
INZ
|
||||||
|
BNE @loop
|
||||||
|
JSR UNLSN
|
||||||
|
RTS
|
||||||
|
|
||||||
|
; *****
|
||||||
|
Set_TS:
|
||||||
|
; *****
|
||||||
|
|
||||||
|
; Input A = track or sector
|
||||||
|
; X = string index
|
||||||
|
|
||||||
|
@100 CMP #100
|
||||||
|
BCC @10
|
||||||
|
INC Mon_Data,X
|
||||||
|
SBC #100
|
||||||
|
BRA @100
|
||||||
|
@10 CMP #10
|
||||||
|
BCC @1
|
||||||
|
INC Mon_Data+1,X
|
||||||
|
SBC #10
|
||||||
|
BRA @10
|
||||||
|
@1 ORA #'0'
|
||||||
|
STA Mon_Data+2,X
|
||||||
|
RTS
|
||||||
|
|
||||||
|
; @[u],U1 mem track startsec [endsec] : read disk sector(s)
|
||||||
|
|
||||||
|
; U1:CHANNEL DRIVE TRACK SECTOR
|
||||||
|
|
||||||
|
; *************
|
||||||
|
Build_U_String:
|
||||||
|
; *************
|
||||||
|
|
||||||
|
LDX #14
|
||||||
|
@loop LDA U1,X
|
||||||
|
STA Mon_Data,X
|
||||||
|
DEX
|
||||||
|
CPX #2
|
||||||
|
BCS @loop
|
||||||
|
LDA #'U'
|
||||||
|
STA Mon_Data
|
||||||
|
LDA Disk_Track
|
||||||
|
LDX #7
|
||||||
|
JSR Set_TS
|
||||||
|
LDA Disk_Sector
|
||||||
|
LDX #11
|
||||||
|
JMP Set_TS
|
||||||
|
|
||||||
|
; ***************
|
||||||
|
Open_Disk_Buffer:
|
||||||
|
; ***************
|
||||||
|
|
||||||
|
LDA #0
|
||||||
|
STA IOSTATUS
|
||||||
|
LDA FA
|
||||||
|
JSR LISTEN ; open fa,9,"#"
|
||||||
|
LDA #$f9 ; sa = 9
|
||||||
|
JSR SECOND
|
||||||
|
LDA #'#' ; open buffer
|
||||||
|
JSR CIOUT
|
||||||
|
JSR UNLSN
|
||||||
|
LDA IOSTATUS
|
||||||
|
LBNE Print_Disk_Status
|
||||||
|
RTS
|
||||||
|
|
||||||
|
; ****************
|
||||||
|
Close_Disk_Buffer:
|
||||||
|
; ****************
|
||||||
|
|
||||||
|
LDA #0
|
||||||
|
STA IOSTATUS
|
||||||
|
LDA FA
|
||||||
|
JSR LISTEN ; open fa,9,"#"
|
||||||
|
LDA #$e9 ; sa = 9
|
||||||
|
JSR SECOND
|
||||||
|
JSR UNLSN
|
||||||
|
LDA IOSTATUS
|
||||||
|
LBNE Print_Disk_Status
|
||||||
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in new issue
Block a user