From 409b01aec40d84df73379dd575fe1ef32874034d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 11 Jan 2021 06:54:33 +0100 Subject: [PATCH] adapter converters, preparations for DOS Wedge from within the monitor --- Makefile | 2 +- src/aliases/,aliases_config.s | 7 +- src/basic/,imports.s | 2 + .../board_m65/4000.mega65_vectable_basic_1.s | 11 +- src/basic/wedge/wedge_dos.s | 17 + src/kernal/board_m65/mega65_proxies_monitor.s | 46 +-- src/mon_m65/,aliases_mon.s | 11 +- src/mon_m65/bsmon.s | 299 +----------------- src/mon_m65/imports.s | 11 +- src/mon_m65/mon_disabled.s | 295 +++++++++++++++++ 10 files changed, 341 insertions(+), 360 deletions(-) create mode 100644 src/mon_m65/mon_disabled.s diff --git a/Makefile b/Makefile index 44b66a30..a03f3f39 100644 --- a/Makefile +++ b/Makefile @@ -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: \ $(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: \ - $(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: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_ZVM_M65) $(CFG_M65) $(DIR_M65)/KERNAL_0_combined.sym $(DIR_M65)/KERNAL_C_combined.sym diff --git a/src/aliases/,aliases_config.s b/src/aliases/,aliases_config.s index fdeeb70f..524eaabc 100644 --- a/src/aliases/,aliases_config.s +++ b/src/aliases/,aliases_config.s @@ -112,6 +112,7 @@ !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_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 { !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_CIA2 { !set HAS_IEC_BURST = 1 } @@ -352,10 +353,6 @@ !ifdef CONFIG_IEC_JIFFYDOS { !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_TURBO { !set HAS_TAPE = 1 } diff --git a/src/basic/,imports.s b/src/basic/,imports.s index 56443282..9972264a 100644 --- a/src/basic/,imports.s +++ b/src/basic/,imports.s @@ -40,12 +40,14 @@ ;; #ALIAS# map_end = KERNAL_0.map_end ;; #ALIAS# map_NORMAL = KERNAL_0.map_NORMAL ;; #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_MODESET = KERNAL_0.M65_MODESET ;; #ALIAS# M65_SETWIN_Y = KERNAL_0.M65_SETWIN_Y ;; #ALIAS# m65_colorset = KERNAL_0.m65_colorset +;; #ALIAS# m65_shadow_BZP = KERNAL_0.m65_shadow_BZP ; ; Ultimate 64 specific parts diff --git a/src/basic/board_m65/4000.mega65_vectable_basic_1.s b/src/basic/board_m65/4000.mega65_vectable_basic_1.s index 1962d456..da8cc963 100644 --- a/src/basic/board_m65/4000.mega65_vectable_basic_1.s +++ b/src/basic/board_m65/4000.mega65_vectable_basic_1.s @@ -27,10 +27,8 @@ !addr VB1__prepare_direct_execution = $4000 + 2 * 12 !addr VB1__helper_ask_if_sure = $4000 + 2 * 13 !addr VB1__helper_eggshell = $4000 + 2 * 14 - -!ifdef CONFIG_DOS_WEDGE { - !addr VB1__wedge_dos = $4000 + 2 * 15 -} + !addr VB1__wedge_dos = $4000 + 2 * 15 + !addr VB1__wedge_dos_monitor = $4000 + 2 * 15 } else { @@ -51,10 +49,7 @@ !word prepare_direct_execution !word helper_ask_if_sure !word helper_eggshell - -!ifdef CONFIG_DOS_WEDGE { !word wedge_dos -} - + !word wedge_dos_monitor } diff --git a/src/basic/wedge/wedge_dos.s b/src/basic/wedge/wedge_dos.s index 099c0393..df55ae78 100644 --- a/src/basic/wedge/wedge_dos.s +++ b/src/basic/wedge/wedge_dos.s @@ -8,6 +8,23 @@ !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 wedge_dos: diff --git a/src/kernal/board_m65/mega65_proxies_monitor.s b/src/kernal/board_m65/mega65_proxies_monitor.s index 9207706a..1dc9b3d6 100644 --- a/src/kernal/board_m65/mega65_proxies_monitor.s +++ b/src/kernal/board_m65/mega65_proxies_monitor.s @@ -24,52 +24,10 @@ proxy_M1_end: 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: - - 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 +!addr Long__TMP = $64 ; has to be the same as Long_TMP in monitor proxy_M1_memread: diff --git a/src/mon_m65/,aliases_mon.s b/src/mon_m65/,aliases_mon.s index 85b0005e..c9a36459 100644 --- a/src/mon_m65/,aliases_mon.s +++ b/src/mon_m65/,aliases_mon.s @@ -56,13 +56,8 @@ !addr Op_Mne = $2C ; 3 bytes for mnemonic !addr Op_Ix = $2F ; type of constant !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 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 +!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 diff --git a/src/mon_m65/bsmon.s b/src/mon_m65/bsmon.s index 7dc54e1e..5072fab0 100644 --- a/src/mon_m65/bsmon.s +++ b/src/mon_m65/bsmon.s @@ -10,7 +10,7 @@ Mon_Call: ; ******* 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 @@ -163,7 +163,7 @@ Print_Commands: ; ************* JSR PRIMM - !pet KEY_RETURN,KEY_RVS_ON," commands: " + !pet KEY_RETURN," ",KEY_RVS_ON," commands: " ; *********** Command_Char: @@ -176,7 +176,7 @@ Command_Char: Cons_Prefix: ; ********** - !pet "$+&%'" + !pet "$+&%" ; *************** Load_Save_Verify: @@ -206,10 +206,10 @@ Jump_Table: !word Mon_Set_Memory ; > XXX to be debugged/adapted !word Mon_Set_Register ; ; XXX to be debugged/adapted !word Mon_Help ; ? - !word Converter ; $ XXX to be debugged/adapted - !word Converter ; + XXX to be debugged/adapted - !word Converter ; & XXX to be debugged/adapted - !word Converter ; % XXX to be debugged/adapted + !word Converter ; $ + !word Converter ; + + !word Converter ; & + !word Converter ; % ; ******* Mon_Exit: @@ -1881,8 +1881,9 @@ Converter: LDX #0 STX Buf_Index - JSR Get_LAC - LBCS Mon_Error + JSR Get_Addr_To_LAC + LBEQ Mon_Error + JSR Print_CR LDX #0 @loop PHX JSR CR_Erase @@ -1896,6 +1897,7 @@ Converter: INX CPX #4 BCC @loop + JSR Print_CR JMP Main Conv_Tab !word Print_Hexval @@ -2018,288 +2020,13 @@ Print_BCD: BNE @loopa 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: ; ****** - ; XXX for Open ROMs it should invoke internal DOS wedge! - 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 + JSR wedge_dos_monitor 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 ; 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'," - . address mnemonic operand",KEY_RETURN !pet KEY_ESC,'s',">",KEY_ESC,'u'," - > address byte sequence",KEY_RETURN !pet KEY_ESC,'s',";",KEY_ESC,'u'," - ; 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'," - hexadecimal number (default)",KEY_RETURN !pet KEY_ESC,'s',"+",KEY_ESC,'u'," - decimal number",KEY_RETURN !pet KEY_ESC,'s',"&",KEY_ESC,'u'," - octal number",KEY_RETURN diff --git a/src/mon_m65/imports.s b/src/mon_m65/imports.s index 5b561051..c359a8ba 100644 --- a/src/mon_m65/imports.s +++ b/src/mon_m65/imports.s @@ -1,4 +1,5 @@ ;; #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 @@ -13,14 +14,8 @@ ;; #ALIAS# CHRIN = KERNAL_0.proxy_M1_CHRIN ;; #ALIAS# CHROUT = KERNAL_0.proxy_M1_CHROUT -;; #ALIAS# SECOND = KERNAL_0.proxy_M1_SECOND -;; #ALIAS# TKSA = KERNAL_0.proxy_M1_TKSA -;; #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 + +;; #ALIAS# wedge_dos_monitor = BASIC_0.wedge_dos_monitor ; 'Print immediate', original implementation by Mike Barry, adapted to 65CE02, modified to preserve .Y diff --git a/src/mon_m65/mon_disabled.s b/src/mon_m65/mon_disabled.s new file mode 100644 index 00000000..12d29652 --- /dev/null +++ b/src/mon_m65/mon_disabled.s @@ -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 + + + + + + + + + + +} \ No newline at end of file