mirror of
https://github.com/mi57730/a2d.git
synced 2024-11-01 10:05:56 +00:00
1569 lines
36 KiB
ArmAsm
1569 lines
36 KiB
ArmAsm
;;; ============================================================
|
|
;;; Overlay for Format/Erase
|
|
;;; ============================================================
|
|
|
|
.proc format_erase_overlay
|
|
.org $800
|
|
|
|
block_buffer := $1A00
|
|
|
|
L0800: pha
|
|
jsr desktop_main::set_cursor_pointer
|
|
pla
|
|
cmp #$04
|
|
beq L080C
|
|
jmp L09D9
|
|
|
|
;;; ============================================================
|
|
;;; Format Disk
|
|
|
|
L080C: copy #$00, has_input_field_flag
|
|
jsr desktop_main::open_prompt_window
|
|
lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
addr_call desktop_main::draw_dialog_title, desktop_aux::str_format_disk
|
|
axy_call desktop_main::draw_dialog_label, 1, desktop_aux::str_select_format
|
|
jsr L0D31
|
|
copy #$FF, LD887
|
|
L0832: copy16 #L0B48, desktop_main::jump_relay+1
|
|
copy #$80, format_erase_overlay_flag
|
|
L0841: jsr desktop_main::prompt_input_loop
|
|
bmi L0841
|
|
pha
|
|
copy16 #desktop_main::noop, desktop_main::jump_relay+1
|
|
lda #$00
|
|
sta LD8F3
|
|
sta format_erase_overlay_flag
|
|
pla
|
|
beq L085F
|
|
jmp L09C2
|
|
|
|
L085F: bit LD887
|
|
bmi L0832
|
|
lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, pencopy
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::clear_dialog_labels_rect
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::FrameRect, name_input_rect
|
|
jsr desktop_main::clear_path_buf1
|
|
copy #$80, has_input_field_flag
|
|
copy #$00, format_erase_overlay_flag
|
|
jsr desktop_main::clear_path_buf2
|
|
axy_call desktop_main::draw_dialog_label, 3, desktop_aux::str_new_volume
|
|
L08A7: jsr desktop_main::prompt_input_loop
|
|
bmi L08A7
|
|
beq L08B7
|
|
jmp L09C2
|
|
|
|
L08B1: jsr desktop_main::bell
|
|
jmp L08A7
|
|
|
|
L08B7: lda path_buf1
|
|
beq L08B1
|
|
cmp #$10
|
|
bcs L08B1
|
|
jsr desktop_main::set_cursor_pointer
|
|
lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, pencopy
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::clear_dialog_labels_rect
|
|
ldx LD887
|
|
lda DEVLST,x
|
|
sta L09D8
|
|
sta L09D7
|
|
lda #$00
|
|
sta has_input_field_flag
|
|
axy_call desktop_main::draw_dialog_label, 3, desktop_aux::str_confirm_format
|
|
lda L09D7
|
|
jsr L1A2D
|
|
addr_call desktop_main::draw_text1, ovl2_path_buf
|
|
L0902: jsr desktop_main::prompt_input_loop
|
|
bmi L0902
|
|
beq L090C
|
|
jmp L09C2
|
|
|
|
L090C: lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, pencopy
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::clear_dialog_labels_rect
|
|
axy_call desktop_main::draw_dialog_label, 1, desktop_aux::str_formatting
|
|
lda L09D7
|
|
jsr L12C1
|
|
and #$FF
|
|
bne L0942
|
|
jsr desktop_main::set_cursor_watch
|
|
lda L09D7
|
|
jsr L126F
|
|
bcs L099B
|
|
L0942: lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, pencopy
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::clear_dialog_labels_rect
|
|
axy_call desktop_main::draw_dialog_label, 1, desktop_aux::str_erasing
|
|
addr_call upcase_string, path_buf1
|
|
ldxy #path_buf1
|
|
lda L09D7
|
|
jsr L1307
|
|
pha
|
|
jsr desktop_main::set_cursor_pointer
|
|
pla
|
|
bne L0980
|
|
lda #$00
|
|
jmp L09C2
|
|
|
|
L0980: cmp #$2B
|
|
bne L098C
|
|
jsr JUMP_TABLE_ALERT_0
|
|
bne L09C2
|
|
jmp L090C
|
|
|
|
L098C: jsr L191B
|
|
axy_call desktop_main::draw_dialog_label, 6, desktop_aux::str_erasing_error
|
|
jmp L09B8
|
|
|
|
L099B: pha
|
|
jsr desktop_main::set_cursor_pointer
|
|
pla
|
|
cmp #$2B
|
|
bne L09AC
|
|
jsr JUMP_TABLE_ALERT_0
|
|
bne L09C2
|
|
jmp L090C
|
|
|
|
L09AC: jsr L191B
|
|
axy_call desktop_main::draw_dialog_label, 6, desktop_aux::str_formatting_error
|
|
L09B8: jsr desktop_main::prompt_input_loop
|
|
bmi L09B8
|
|
bne L09C2
|
|
jmp L090C
|
|
|
|
L09C2: pha
|
|
jsr desktop_main::set_cursor_pointer
|
|
jsr desktop_main::reset_grafport3a
|
|
MGTK_RELAY_CALL MGTK::CloseWindow, winfo_alert_dialog
|
|
ldx L09D8
|
|
pla
|
|
rts
|
|
|
|
L09D7: .byte 0
|
|
L09D8: .byte 0
|
|
|
|
;;; ============================================================
|
|
;;; Erase Disk
|
|
|
|
L09D9: lda #$00
|
|
sta has_input_field_flag
|
|
jsr desktop_main::open_prompt_window
|
|
lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
addr_call desktop_main::draw_dialog_title, desktop_aux::str_erase_disk
|
|
axy_call desktop_main::draw_dialog_label, 1, desktop_aux::str_select_erase
|
|
jsr L0D31
|
|
copy #$FF, LD887
|
|
copy16 #L0B48, desktop_main::jump_relay+1
|
|
copy #$80, format_erase_overlay_flag
|
|
L0A0E: jsr desktop_main::prompt_input_loop
|
|
bmi L0A0E
|
|
beq L0A18
|
|
jmp L0B31
|
|
|
|
L0A18: bit LD887
|
|
bmi L0A0E
|
|
copy16 #$A898, desktop_main::jump_relay+1
|
|
lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, pencopy
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::clear_dialog_labels_rect
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::FrameRect, name_input_rect
|
|
jsr desktop_main::clear_path_buf1
|
|
copy #$80, has_input_field_flag
|
|
copy #$00, format_erase_overlay_flag
|
|
jsr desktop_main::clear_path_buf2
|
|
axy_call desktop_main::draw_dialog_label, 3, desktop_aux::str_new_volume
|
|
L0A6A: jsr desktop_main::prompt_input_loop
|
|
bmi L0A6A
|
|
beq L0A7A
|
|
jmp L0B31
|
|
|
|
L0A74: jsr desktop_main::bell
|
|
jmp L0A6A
|
|
|
|
L0A7A: lda path_buf1
|
|
beq L0A74
|
|
cmp #$10
|
|
bcs L0A74
|
|
jsr desktop_main::set_cursor_pointer
|
|
lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, pencopy
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::clear_dialog_labels_rect
|
|
copy #$00, has_input_field_flag
|
|
ldx LD887
|
|
lda DEVLST,x
|
|
sta L0B47
|
|
sta L0B46
|
|
axy_call desktop_main::draw_dialog_label, 3, desktop_aux::str_confirm_erase
|
|
lda L0B46
|
|
and #$F0
|
|
jsr L1A2D
|
|
addr_call desktop_main::draw_text1, ovl2_path_buf
|
|
L0AC7: jsr desktop_main::prompt_input_loop
|
|
bmi L0AC7
|
|
beq L0AD1
|
|
jmp L0B31
|
|
|
|
L0AD1: lda winfo_alert_dialog
|
|
jsr desktop_main::set_port_from_window_id
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, pencopy
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::clear_dialog_labels_rect
|
|
axy_call desktop_main::draw_dialog_label, 1, desktop_aux::str_erasing
|
|
addr_call upcase_string, path_buf1
|
|
jsr desktop_main::set_cursor_watch
|
|
ldxy #path_buf1
|
|
lda L0B46
|
|
jsr L1307
|
|
pha
|
|
jsr desktop_main::set_cursor_pointer
|
|
pla
|
|
bne L0B12
|
|
lda #$00
|
|
jmp L0B31
|
|
|
|
L0B12: cmp #$2B
|
|
bne L0B1E
|
|
jsr JUMP_TABLE_ALERT_0
|
|
bne L0B31
|
|
jmp L0AD1
|
|
|
|
L0B1E: jsr L191B
|
|
axy_call desktop_main::draw_dialog_label, 6, desktop_aux::str_erasing_error
|
|
L0B2A: jsr desktop_main::prompt_input_loop
|
|
bmi L0B2A
|
|
beq L0AD1
|
|
L0B31: pha
|
|
jsr desktop_main::set_cursor_pointer
|
|
jsr desktop_main::reset_grafport3a
|
|
MGTK_RELAY_CALL MGTK::CloseWindow, winfo_alert_dialog
|
|
ldx L0B47
|
|
pla
|
|
rts
|
|
|
|
L0B46: .byte 0
|
|
L0B47: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
L0B48: cmp16 screentowindow_windowx, #40
|
|
bpl :+
|
|
return #$FF
|
|
: cmp16 screentowindow_windowx, #360
|
|
bcc :+
|
|
return #$FF
|
|
: lda screentowindow_windowy
|
|
sec
|
|
sbc #43
|
|
sta screentowindow_windowy
|
|
lda screentowindow_windowy+1
|
|
sbc #0
|
|
bpl :+
|
|
return #$FF
|
|
: sta screentowindow_windowy+1
|
|
lsr16 screentowindow_windowy
|
|
lsr16 screentowindow_windowy
|
|
lsr16 screentowindow_windowy
|
|
lda screentowindow_windowy
|
|
cmp #$04
|
|
bcc L0B98
|
|
return #$FF
|
|
|
|
L0B98: copy #$02, L0C1F
|
|
cmp16 screentowindow_windowx, #280
|
|
bcs L0BBB
|
|
dec L0C1F
|
|
cmp16 screentowindow_windowx, #160
|
|
bcs L0BBB
|
|
dec L0C1F
|
|
L0BBB: lda L0C1F
|
|
asl a
|
|
asl a
|
|
clc
|
|
adc screentowindow_windowy
|
|
cmp LD890
|
|
bcc L0BDC
|
|
lda LD887
|
|
bmi L0BD9
|
|
lda LD887
|
|
jsr hilight_volume_label
|
|
lda #$FF
|
|
sta LD887
|
|
L0BD9: return #$FF
|
|
|
|
L0BDC: cmp LD887
|
|
bne L0C04
|
|
jsr desktop_main::detect_double_click2
|
|
bmi L0C03
|
|
L0BE6: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR ; flash the button
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::ok_button_rect
|
|
MGTK_RELAY_CALL MGTK::PaintRect, desktop_aux::ok_button_rect
|
|
lda #$00
|
|
L0C03: rts
|
|
|
|
L0C04: sta L0C1E
|
|
lda LD887
|
|
bmi L0C0F
|
|
jsr hilight_volume_label
|
|
L0C0F: lda L0C1E
|
|
sta LD887
|
|
jsr hilight_volume_label
|
|
jsr desktop_main::detect_double_click2
|
|
beq L0BE6
|
|
rts
|
|
|
|
L0C1E: .byte 0
|
|
L0C1F: .byte 0
|
|
|
|
;;; ============================================================
|
|
;;; Hilight volume label
|
|
;;; Input: A = volume index
|
|
|
|
.proc hilight_volume_label
|
|
ldy #39
|
|
sty select_volume_rect::x1
|
|
ldy #0
|
|
sty select_volume_rect::x1+1
|
|
tax
|
|
lsr a ; / 4
|
|
lsr a
|
|
sta L0CA9 ; column (0, 1, or 2)
|
|
beq L0C5B
|
|
add16 select_volume_rect::x1, #120, select_volume_rect::x1
|
|
lda L0CA9
|
|
cmp #1
|
|
beq L0C5B
|
|
add16 select_volume_rect::x1, #120, select_volume_rect::x1
|
|
L0C5B: asl L0CA9 ; * 4
|
|
asl L0CA9
|
|
txa
|
|
sec
|
|
sbc L0CA9 ; entry % 4
|
|
asl a
|
|
asl a
|
|
asl a
|
|
clc
|
|
adc #$2B
|
|
sta select_volume_rect::y1
|
|
lda #$00
|
|
sta select_volume_rect::y1+1
|
|
add16 select_volume_rect::x1, #119, select_volume_rect::x2
|
|
add16 select_volume_rect::y1, #7, select_volume_rect::y2
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, select_volume_rect
|
|
rts
|
|
|
|
L0CA9: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc L0CAA
|
|
lda LD887
|
|
bmi :+
|
|
jsr hilight_volume_label
|
|
copy #$FF, LD887
|
|
: rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
;; Called from desktop_main
|
|
.proc prompt_handle_key_left
|
|
lda LD887
|
|
bpl L0CC1
|
|
lda #0
|
|
beq L0CCE
|
|
L0CC1: clc
|
|
adc #4
|
|
cmp LD890
|
|
bcs L0CD4
|
|
pha
|
|
jsr L0CAA
|
|
pla
|
|
L0CCE: sta LD887
|
|
jsr hilight_volume_label
|
|
L0CD4: return #$FF
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
;; Called from desktop_main
|
|
.proc prompt_handle_key_right
|
|
lda LD887
|
|
bpl L0CE6
|
|
lda LD890
|
|
lsr a
|
|
lsr a
|
|
asl a
|
|
asl a
|
|
jmp L0CF0
|
|
|
|
L0CE6: sec
|
|
sbc #4
|
|
bmi L0CF6
|
|
pha
|
|
jsr L0CAA
|
|
pla
|
|
L0CF0: sta LD887
|
|
jsr hilight_volume_label
|
|
L0CF6: return #$FF
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
;; Called from desktop_main
|
|
.proc prompt_handle_key_down
|
|
lda LD887
|
|
clc
|
|
adc #1
|
|
cmp LD890
|
|
bcc L0D06
|
|
lda #0
|
|
L0D06: pha
|
|
jsr L0CAA
|
|
pla
|
|
sta LD887
|
|
jsr hilight_volume_label
|
|
return #$FF
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
;; Called from desktop_main
|
|
.proc prompt_handle_key_up
|
|
lda LD887
|
|
bmi L0D1E
|
|
sec
|
|
sbc #$01
|
|
bpl L0D23
|
|
L0D1E: ldx LD890
|
|
dex
|
|
txa
|
|
L0D23: pha
|
|
jsr L0CAA
|
|
pla
|
|
sta LD887
|
|
jsr hilight_volume_label
|
|
return #$FF
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
L0D31: ldx DEVCNT
|
|
inx
|
|
stx LD890
|
|
lda #$00
|
|
sta L0D8C
|
|
L0D3D: lda L0D8C
|
|
cmp LD890
|
|
bne L0D46
|
|
rts
|
|
|
|
L0D46: cmp #$08
|
|
bcc L0D50
|
|
ldx #$01
|
|
lda #$40
|
|
bne L0D5A
|
|
L0D50: cmp #$04
|
|
bcc L0D60
|
|
ldx #$00
|
|
lda #$A0
|
|
bne L0D5A
|
|
L0D5A: stax dialog_label_pos
|
|
L0D60: lda L0D8C
|
|
asl a
|
|
tay
|
|
lda device_name_table+1,y
|
|
tax
|
|
lda device_name_table,y
|
|
pha
|
|
lda L0D8C
|
|
lsr a
|
|
lsr a
|
|
asl a
|
|
asl a
|
|
sta L0D8D
|
|
lda L0D8C
|
|
sec
|
|
sbc L0D8D
|
|
tay
|
|
iny
|
|
iny
|
|
iny
|
|
pla
|
|
jsr desktop_main::draw_dialog_label
|
|
inc L0D8C
|
|
jmp L0D3D
|
|
|
|
L0D8C: .byte 0
|
|
L0D8D: .byte 0
|
|
|
|
PAD_TO $E00
|
|
|
|
L0E00: php
|
|
sei
|
|
jsr L0E3A
|
|
plp
|
|
cmp #$00
|
|
bne L0E0C
|
|
clc
|
|
rts
|
|
|
|
L0E0C: cmp #$02
|
|
bne L0E15
|
|
lda #$2B
|
|
jmp L0E21
|
|
|
|
L0E15: cmp #$01
|
|
bne L0E1E
|
|
lda #$27
|
|
jmp L0E21
|
|
|
|
L0E1E: clc
|
|
adc #$30
|
|
L0E21: sec
|
|
rts
|
|
|
|
L0E23: asl a
|
|
asl L1224
|
|
sta L1236
|
|
txa
|
|
lsr a
|
|
lsr a
|
|
lsr a
|
|
lsr a
|
|
tay
|
|
lda L1236
|
|
jsr L0FC6
|
|
lsr L1224
|
|
rts
|
|
|
|
L0E3A: tax
|
|
and #$70
|
|
sta L1223
|
|
txa
|
|
ldx L1223
|
|
rol a
|
|
lda #$00
|
|
rol a
|
|
bne L0E50
|
|
lda SELECT,x
|
|
jmp L0E53
|
|
|
|
L0E50: lda LCBANK1,x
|
|
L0E53: lda ENABLE,x
|
|
copy #$D7, $DA
|
|
copy #$50, L1224
|
|
lda #0
|
|
jsr L0E23
|
|
L0E64: lda $DA
|
|
beq L0E6E
|
|
jsr L113A
|
|
jmp L0E64
|
|
|
|
L0E6E: copy #$01, $D3
|
|
copy #$AA, $D0
|
|
lda L1220
|
|
clc
|
|
adc #$02
|
|
sta $D4
|
|
lda #$00
|
|
sta $D1
|
|
L0E82: lda $D1
|
|
ldx L1223
|
|
jsr L0E23
|
|
ldx L1223
|
|
lda DATA,x
|
|
lda RDMODE,x
|
|
tay
|
|
lda RDMODE,x
|
|
lda XMIT,x
|
|
tya
|
|
bpl L0EA2
|
|
lda #$02
|
|
jmp L0EF9
|
|
|
|
L0EA2: jsr L1163
|
|
bcc L0EB5
|
|
lda #$01
|
|
ldy $D4
|
|
cpy L121F
|
|
bcs L0EB2
|
|
lda #$04
|
|
L0EB2: jmp L0EF9
|
|
|
|
L0EB5: ldy $D4
|
|
cpy L121F
|
|
bcs L0EC1
|
|
lda #$04
|
|
jmp L0EF9
|
|
|
|
L0EC1: cpy L1220
|
|
bcc L0ECB
|
|
lda #$03
|
|
jmp L0EF9
|
|
|
|
L0ECB: lda L1222
|
|
sta L1225
|
|
L0ED1: dec L1225
|
|
bne L0EDB
|
|
lda #$01
|
|
jmp L0EF9
|
|
|
|
L0EDB: ldx L1223
|
|
jsr L0F6A
|
|
bcs L0ED1
|
|
lda $D8
|
|
bne L0ED1
|
|
ldx L1223
|
|
jsr L0F07
|
|
bcs L0ED1
|
|
inc $D1
|
|
lda $D1
|
|
cmp #$23
|
|
bcc L0E82
|
|
lda #$00
|
|
L0EF9: pha
|
|
ldx L1223
|
|
lda DISABLE,x
|
|
lda #$00
|
|
jsr L0E23
|
|
pla
|
|
rts
|
|
|
|
L0F07: ldy #$20
|
|
L0F09: dey
|
|
beq L0F68
|
|
L0F0C: lda XMIT,x
|
|
bpl L0F0C
|
|
L0F11: eor #$D5
|
|
bne L0F09
|
|
nop
|
|
L0F16: lda XMIT,x
|
|
bpl L0F16
|
|
cmp #$AA
|
|
bne L0F11
|
|
ldy #$56
|
|
L0F21: lda XMIT,x
|
|
bpl L0F21
|
|
cmp #$AD
|
|
bne L0F11
|
|
lda #$00
|
|
L0F2C: dey
|
|
sty $D5
|
|
L0F2F: lda XMIT,x
|
|
bpl L0F2F
|
|
cmp #$96
|
|
bne L0F68
|
|
ldy $D5
|
|
bne L0F2C
|
|
L0F3C: sty $D5
|
|
L0F3E: lda XMIT,x
|
|
bpl L0F3E
|
|
cmp #$96
|
|
bne L0F68
|
|
ldy $D5
|
|
iny
|
|
bne L0F3C
|
|
L0F4C: lda XMIT,x
|
|
bpl L0F4C
|
|
cmp #$96
|
|
bne L0F68
|
|
L0F55: lda XMIT,x
|
|
bpl L0F55
|
|
cmp #$DE
|
|
bne L0F68
|
|
nop
|
|
L0F5F: lda XMIT,x
|
|
bpl L0F5F
|
|
cmp #$AA
|
|
beq L0FC4
|
|
L0F68: sec
|
|
rts
|
|
|
|
L0F6A: ldy #$FC
|
|
sty $DC
|
|
L0F6E: iny
|
|
bne L0F75
|
|
inc $DC
|
|
beq L0F68
|
|
L0F75: lda XMIT,x
|
|
bpl L0F75
|
|
L0F7A: cmp #$D5
|
|
bne L0F6E
|
|
nop
|
|
L0F7F: lda XMIT,x
|
|
bpl L0F7F
|
|
cmp #$AA
|
|
bne L0F7A
|
|
ldy #$03
|
|
L0F8A: lda XMIT,x
|
|
bpl L0F8A
|
|
cmp #$96
|
|
bne L0F7A
|
|
lda #$00
|
|
L0F95: sta $DB
|
|
L0F97: lda XMIT,x
|
|
bpl L0F97
|
|
rol a
|
|
sta $DD
|
|
L0F9F: lda XMIT,x
|
|
bpl L0F9F
|
|
and $DD
|
|
sta $D7,y
|
|
eor $DB
|
|
dey
|
|
bpl L0F95
|
|
tay
|
|
bne L0F68
|
|
L0FB1: lda XMIT,x
|
|
bpl L0FB1
|
|
cmp #$DE
|
|
bne L0F68
|
|
nop
|
|
L0FBB: lda XMIT,x
|
|
bpl L0FBB
|
|
cmp #$AA
|
|
bne L0F68
|
|
L0FC4: clc
|
|
rts
|
|
|
|
L0FC6: stx L1237
|
|
sta L1236
|
|
cmp L1224
|
|
beq L102D
|
|
lda #$00
|
|
sta L1238
|
|
L0FD6: lda L1224
|
|
sta L1239
|
|
sec
|
|
sbc L1236
|
|
beq L1019
|
|
bcs L0FEB
|
|
eor #$FF
|
|
inc L1224
|
|
bcc L0FF0
|
|
L0FEB: adc #$FE
|
|
dec L1224
|
|
L0FF0: cmp L1238
|
|
bcc L0FF8
|
|
lda L1238
|
|
L0FF8: cmp #$0C
|
|
bcs L0FFD
|
|
tay
|
|
L0FFD: sec
|
|
jsr L101D
|
|
lda L114B,y
|
|
jsr L113A
|
|
lda L1239
|
|
clc
|
|
jsr L1020
|
|
lda L1157,y
|
|
jsr L113A
|
|
inc L1238
|
|
bne L0FD6
|
|
L1019: jsr L113A
|
|
clc
|
|
L101D: lda L1224
|
|
L1020: and #$03
|
|
rol a
|
|
ora L1237
|
|
tax
|
|
lda PHASE0,x
|
|
ldx L1237
|
|
L102D: rts
|
|
|
|
L102E: jsr L120E
|
|
lda DATA,x
|
|
lda RDMODE,x
|
|
lda #$FF
|
|
sta WRMODE,x
|
|
cmp XMIT,x
|
|
pha
|
|
pla
|
|
nop
|
|
ldy #$04
|
|
L1044: pha
|
|
pla
|
|
jsr L10A5
|
|
dey
|
|
bne L1044
|
|
lda #$D5
|
|
jsr L10A4
|
|
lda #$AA
|
|
jsr L10A4
|
|
lda #$AD
|
|
jsr L10A4
|
|
ldy #$56
|
|
nop
|
|
nop
|
|
nop
|
|
bne L1065
|
|
L1062: jsr L120E
|
|
L1065: nop
|
|
nop
|
|
lda #$96
|
|
sta DATA,x
|
|
cmp XMIT,x
|
|
dey
|
|
bne L1062
|
|
bit $00
|
|
nop
|
|
L1075: jsr L120E
|
|
lda #$96
|
|
sta DATA,x
|
|
cmp XMIT,x
|
|
lda #$96
|
|
nop
|
|
iny
|
|
bne L1075
|
|
jsr L10A4
|
|
lda #$DE
|
|
jsr L10A4
|
|
lda #$AA
|
|
jsr L10A4
|
|
lda #$EB
|
|
jsr L10A4
|
|
lda #$FF
|
|
jsr L10A4
|
|
lda RDMODE,x
|
|
lda XMIT,x
|
|
rts
|
|
|
|
L10A4: nop
|
|
L10A5: pha
|
|
pla
|
|
sta DATA,x
|
|
cmp XMIT,x
|
|
rts
|
|
|
|
L10AE: sec
|
|
lda DATA,x
|
|
lda RDMODE,x
|
|
bmi L1115
|
|
lda #$FF
|
|
sta WRMODE,x
|
|
cmp XMIT,x
|
|
pha
|
|
pla
|
|
L10C1: jsr L111B
|
|
jsr L111B
|
|
sta DATA,x
|
|
cmp XMIT,x
|
|
nop
|
|
dey
|
|
bne L10C1
|
|
lda #$D5
|
|
jsr L112D
|
|
lda #$AA
|
|
jsr L112D
|
|
lda #$96
|
|
jsr L112D
|
|
lda $D3
|
|
jsr L111C
|
|
lda $D1
|
|
jsr L111C
|
|
lda $D2
|
|
jsr L111C
|
|
lda $D3
|
|
eor $D1
|
|
eor $D2
|
|
pha
|
|
lsr a
|
|
ora $D0
|
|
sta DATA,x
|
|
lda XMIT,x
|
|
pla
|
|
ora #$AA
|
|
jsr L112C
|
|
lda #$DE
|
|
jsr L112D
|
|
lda #$AA
|
|
jsr L112D
|
|
lda #$EB
|
|
jsr L112D
|
|
clc
|
|
L1115: lda RDMODE,x
|
|
lda XMIT,x
|
|
L111B: rts
|
|
|
|
L111C: pha
|
|
lsr a
|
|
ora $D0
|
|
sta DATA,x
|
|
cmp XMIT,x
|
|
pla
|
|
nop
|
|
nop
|
|
nop
|
|
ora #$AA
|
|
L112C: nop
|
|
L112D: nop
|
|
pha
|
|
pla
|
|
sta DATA,x
|
|
cmp XMIT,x
|
|
rts
|
|
|
|
.byte 0
|
|
.byte 0
|
|
.byte 0
|
|
L113A: ldx #$11
|
|
L113C: dex
|
|
bne L113C
|
|
inc16 $D9
|
|
sec
|
|
sbc #$01
|
|
bne L113A
|
|
rts
|
|
|
|
L114B: .byte $01, $30, $28, $24, $20, $1E, $1D, $1C
|
|
.byte $1C, $1C, $1C, $1C
|
|
|
|
L1157: .byte $70, $2C, $26, $22, $1F, $1E, $1D, $1C
|
|
.byte $1C, $1C, $1C, $1C
|
|
|
|
L1163: lda L1221
|
|
sta $D6
|
|
L1168: ldy #$80
|
|
lda #$00
|
|
sta $D2
|
|
jmp L1173
|
|
|
|
L1171: ldy $D4
|
|
L1173: ldx L1223
|
|
jsr L10AE
|
|
bcc L117E
|
|
jmp L120E
|
|
|
|
L117E: ldx L1223
|
|
jsr L102E
|
|
inc $D2
|
|
lda $D2
|
|
cmp #$10
|
|
bcc L1171
|
|
ldy #$0F
|
|
sty $D2
|
|
lda L1222
|
|
sta L1225
|
|
L1196: sta L1226,y
|
|
dey
|
|
bpl L1196
|
|
lda $D4
|
|
sec
|
|
sbc #$05
|
|
tay
|
|
L11A2: jsr L120E
|
|
jsr L120E
|
|
pha
|
|
pla
|
|
nop
|
|
nop
|
|
dey
|
|
bne L11A2
|
|
ldx L1223
|
|
jsr L0F6A
|
|
bcs L11F3
|
|
lda $D8
|
|
beq L11CE
|
|
dec $D4
|
|
lda $D4
|
|
cmp L121F
|
|
bcs L11F3
|
|
sec
|
|
rts
|
|
|
|
L11C6: ldx L1223
|
|
jsr L0F6A
|
|
bcs L11E8
|
|
L11CE: ldx L1223
|
|
jsr L0F07
|
|
bcs L11E8
|
|
ldy $D8
|
|
lda L1226,y
|
|
bmi L11E8
|
|
lda #$FF
|
|
sta L1226,y
|
|
dec $D2
|
|
bpl L11C6
|
|
clc
|
|
rts
|
|
|
|
L11E8: dec L1225
|
|
bne L11C6
|
|
dec $D6
|
|
bne L11F3
|
|
sec
|
|
rts
|
|
|
|
L11F3: lda L1222
|
|
asl a
|
|
sta L1225
|
|
L11FA: ldx L1223
|
|
jsr L0F6A
|
|
bcs L1208
|
|
lda $D8
|
|
cmp #$0F
|
|
beq L120F
|
|
L1208: dec L1225
|
|
bne L11FA
|
|
sec
|
|
L120E: rts
|
|
|
|
L120F: ldx #$D6
|
|
L1211: jsr L120E
|
|
jsr L120E
|
|
bit $00
|
|
dex
|
|
bne L1211
|
|
jmp L1168
|
|
|
|
L121F: .byte $0E
|
|
L1220: .byte $1B
|
|
L1221: .byte $03
|
|
L1222: .byte $10
|
|
L1223: .byte $00
|
|
L1224: .byte $00
|
|
L1225: .byte $00
|
|
L1226: .byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
L1236: .byte $00
|
|
L1237: .byte $00
|
|
L1238: .byte $00
|
|
L1239: .byte $00
|
|
|
|
;;; ============================================================
|
|
|
|
read_buffer := $1C00
|
|
|
|
DEFINE_ON_LINE_PARAMS on_line_params,, $1C00
|
|
DEFINE_READ_BLOCK_PARAMS read_block_params, read_buffer, 0
|
|
DEFINE_WRITE_BLOCK_PARAMS write_block_params, prodos_loader_blocks, 0
|
|
|
|
L124A: .byte $00
|
|
|
|
;;; ============================================================
|
|
|
|
.proc MLI_RELAY
|
|
sty call
|
|
stax params
|
|
php
|
|
sei
|
|
sta ALTZPOFF
|
|
lda ROMIN2
|
|
jsr MLI
|
|
call: .byte 0
|
|
params: .addr 0
|
|
tax
|
|
sta ALTZPON
|
|
lda LCBANK1
|
|
lda LCBANK1
|
|
plp
|
|
txa
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
L126F: sta L12C0
|
|
and #$0F
|
|
beq L12A6
|
|
ldx #$11
|
|
lda L12C0
|
|
and #$80
|
|
beq L1281
|
|
ldx #$21
|
|
L1281: stx @lsb
|
|
lda L12C0
|
|
and #$70
|
|
lsr a
|
|
lsr a
|
|
lsr a
|
|
clc
|
|
adc @lsb
|
|
sta @lsb
|
|
@lsb := *+1
|
|
lda MLI
|
|
sta $07
|
|
lda #$00
|
|
sta $06
|
|
ldy #$FF
|
|
lda ($06),y
|
|
beq L12A6
|
|
cmp #$FF
|
|
bne L12AD
|
|
L12A6: lda L12C0
|
|
jsr L0E00
|
|
rts
|
|
|
|
L12AD: ldy #$FF ; offset to low byte of driver address
|
|
lda ($06),y
|
|
sta $06
|
|
lda #DRIVER_COMMAND_FORMAT
|
|
sta DRIVER_COMMAND
|
|
lda L12C0
|
|
sta DRIVER_UNIT_NUMBER
|
|
jmp ($06)
|
|
|
|
rts
|
|
|
|
L12C0: .byte 0
|
|
L12C1: sta L1306
|
|
and #$0F
|
|
beq L1303
|
|
ldx #$11
|
|
lda L1306
|
|
and #$80
|
|
beq L12D3
|
|
ldx #$21
|
|
L12D3: stx @lsb
|
|
lda L1306
|
|
and #$70
|
|
lsr a
|
|
lsr a
|
|
lsr a
|
|
clc
|
|
adc @lsb
|
|
sta @lsb
|
|
@lsb := *+1
|
|
lda MLI
|
|
sta $07
|
|
lda #$00
|
|
sta $06
|
|
ldy #$FF
|
|
lda ($06),y
|
|
beq L1303
|
|
cmp #$FF
|
|
beq L1303
|
|
ldy #$FE
|
|
lda ($06),y
|
|
and #$08
|
|
bne L1303
|
|
return #$FF
|
|
|
|
L1303: return #$00
|
|
|
|
;;; ============================================================
|
|
|
|
L1306: .byte 0
|
|
L1307: sta L124A
|
|
and #$F0
|
|
sta write_block_params::unit_num
|
|
stx $06
|
|
sty $06+1
|
|
ldy #$01
|
|
lda ($06),y
|
|
and #CHAR_MASK
|
|
cmp #'/'
|
|
bne L132C
|
|
dey
|
|
lda ($06),y
|
|
sec
|
|
sbc #1
|
|
iny
|
|
sta ($06),y
|
|
inc16 $06
|
|
L132C: ldy #0
|
|
lda ($06),y
|
|
tay
|
|
: lda ($06),y
|
|
and #CHAR_MASK
|
|
sta L14E5,y
|
|
dey
|
|
bpl :-
|
|
|
|
lda L124A
|
|
and #$0F
|
|
beq L1394
|
|
ldx #$11
|
|
lda L124A
|
|
and #$80
|
|
beq L134D
|
|
ldx #$21
|
|
L134D: stx @lsb
|
|
lda L124A
|
|
and #$70
|
|
lsr a
|
|
lsr a
|
|
lsr a
|
|
clc
|
|
adc @lsb
|
|
sta @lsb
|
|
@lsb := *+1
|
|
lda MLI
|
|
sta $06+1
|
|
lda #$00
|
|
sta $06
|
|
ldy #$FF
|
|
lda ($06),y
|
|
beq L1394
|
|
cmp #$FF
|
|
beq L1394
|
|
|
|
ldy #$FF ; offset to low byte of driver address
|
|
lda ($06),y
|
|
sta $06
|
|
lda #DRIVER_COMMAND_STATUS
|
|
sta DRIVER_COMMAND
|
|
lda L124A
|
|
and #$F0
|
|
sta DRIVER_UNIT_NUMBER
|
|
lda #$00
|
|
sta DRIVER_BLOCK_NUMBER
|
|
sta DRIVER_BLOCK_NUMBER+1
|
|
jsr L1391
|
|
bcc L1398
|
|
jmp L1483
|
|
|
|
L1391: jmp ($06)
|
|
|
|
L1394: ldx #$18
|
|
ldy #$01
|
|
L1398: stx L14E3
|
|
sty L14E4
|
|
|
|
;; Write first block of loader
|
|
copy16 #prodos_loader_blocks, write_block_params::data_buffer
|
|
lda #0
|
|
sta write_block_params::block_num
|
|
sta write_block_params::block_num+1
|
|
yax_call MLI_RELAY, WRITE_BLOCK, write_block_params
|
|
beq :+
|
|
jmp fail2
|
|
|
|
;; Write second block of loader
|
|
: inc write_block_params::block_num ; next block needs...
|
|
inc write_block_params::data_buffer+1 ; next $200 of data
|
|
inc write_block_params::data_buffer+1
|
|
jsr write_block_and_zero
|
|
|
|
;; Subsequent blocks...
|
|
copy16 #block_buffer, write_block_params::data_buffer
|
|
lda #$03
|
|
sta block_buffer+$02
|
|
ldy L14E5
|
|
tya
|
|
ora #$F0
|
|
sta block_buffer+$04
|
|
L13E2: lda L14E5,y
|
|
sta block_buffer+$04,y
|
|
dey
|
|
bne L13E2
|
|
ldy #8
|
|
L13ED: lda L14DC,y
|
|
sta block_buffer+$22,y
|
|
dey
|
|
bpl L13ED
|
|
jsr write_block_and_zero
|
|
|
|
copy #$02, block_buffer
|
|
copy #$04, block_buffer+$02
|
|
jsr write_block_and_zero
|
|
|
|
copy #$03, block_buffer
|
|
copy #$05, block_buffer+$02
|
|
jsr write_block_and_zero
|
|
|
|
copy #$04, block_buffer
|
|
jsr write_block_and_zero
|
|
|
|
lsr16 L14E3 ; / 8
|
|
lsr16 L14E3
|
|
lsr16 L14E3
|
|
lda L14E3
|
|
bne :+
|
|
dec L14E4
|
|
: dec L14E3
|
|
L1438: jsr L1485
|
|
lda write_block_params::block_num+1
|
|
bne L146A
|
|
lda write_block_params::block_num
|
|
cmp #$06
|
|
bne L146A
|
|
copy #$01, block_buffer
|
|
lda L14E4
|
|
cmp #$02
|
|
bcc L146A
|
|
copy #$00, block_buffer
|
|
lda L14E4
|
|
lsr a
|
|
tax
|
|
lda #$FF
|
|
dex
|
|
beq L1467
|
|
L1462: clc
|
|
rol a
|
|
dex
|
|
bne L1462
|
|
L1467: sta block_buffer+$01
|
|
L146A: jsr write_block_and_zero
|
|
dec L14E4
|
|
dec L14E4
|
|
lda L14E4
|
|
beq L147D
|
|
bmi L147D
|
|
jmp L1438
|
|
|
|
L147D: lda #$00
|
|
sta $08
|
|
clc
|
|
rts
|
|
|
|
L1483: sec
|
|
rts
|
|
|
|
L1485: ldy L14E4
|
|
beq L148E
|
|
ldy #$FF
|
|
bne L1491
|
|
L148E: ldy L14E3
|
|
L1491: lda #$FF
|
|
L1493: sta block_buffer,y
|
|
dey
|
|
bne L1493
|
|
sta block_buffer
|
|
ldy L14E4
|
|
beq L14B5
|
|
cpy #$02
|
|
bcc L14A9
|
|
ldy #$FF
|
|
bne L14AC
|
|
L14A9: ldy L14E3
|
|
L14AC: sta block_buffer+$100,y
|
|
dey
|
|
bne L14AC
|
|
sta block_buffer+$100
|
|
L14B5: rts
|
|
|
|
;;; ============================================================
|
|
|
|
fail: pla
|
|
pla
|
|
fail2: sec
|
|
rts
|
|
|
|
;;; ============================================================
|
|
|
|
.proc write_block_and_zero
|
|
yax_call MLI_RELAY, WRITE_BLOCK, write_block_params
|
|
bne fail
|
|
jsr zero_buffers
|
|
inc write_block_params::block_num
|
|
rts
|
|
|
|
zero_buffers:
|
|
ldy #0
|
|
tya
|
|
: sta block_buffer,y
|
|
dey
|
|
bne :-
|
|
: sta block_buffer+$100,y
|
|
dey
|
|
bne :-
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
L14DC: .byte $C3,$27,$0D,$00,$00,$06,$00
|
|
L14E3: .byte $18
|
|
L14E4: .byte $01
|
|
L14E5: .byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
|
.byte $00,$00,$00
|
|
|
|
;;; ============================================================
|
|
;;; ProDOS Loader
|
|
;;; ============================================================
|
|
|
|
.proc prodos_loader_blocks
|
|
.incbin "../inc/pdload.dat"
|
|
.endproc
|
|
.assert .sizeof(prodos_loader_blocks) = $400, error, "Bad data"
|
|
|
|
;;; ============================================================
|
|
|
|
.proc upcase_string
|
|
ptr := $06
|
|
stx ptr+1
|
|
sta ptr
|
|
ldy #0
|
|
lda (ptr),y
|
|
tay
|
|
loop: lda (ptr),y
|
|
cmp #'a'
|
|
bcc :+
|
|
cmp #'z'+1
|
|
bcs :+
|
|
and #CASE_MASK
|
|
sta (ptr),y
|
|
: dey
|
|
bpl loop
|
|
rts
|
|
.endproc
|
|
|
|
L191B: sta ALTZPOFF
|
|
lda ROMIN2
|
|
jsr BELL1
|
|
sta ALTZPON
|
|
lda LCBANK1
|
|
lda LCBANK1
|
|
rts
|
|
|
|
L192E: sta read_block_params::unit_num
|
|
lda #0
|
|
sta read_block_params::block_num
|
|
sta read_block_params::block_num+1
|
|
yax_call MLI_RELAY, READ_BLOCK, read_block_params
|
|
bne L1959
|
|
lda read_buffer + 1
|
|
cmp #$E0
|
|
beq L194E
|
|
jmp L1986
|
|
|
|
L194E: lda read_buffer + 2
|
|
cmp #$70
|
|
beq L197E
|
|
cmp #$60
|
|
beq L197E
|
|
L1959: lda read_block_params::unit_num
|
|
jsr L19B7
|
|
ldx the_disk_in_slot_slot_char_offset
|
|
sta the_disk_in_slot_label,x
|
|
lda read_block_params::unit_num
|
|
jsr L19C1
|
|
ldx the_disk_in_slot_drive_char_offset
|
|
sta the_disk_in_slot_label,x
|
|
ldx the_disk_in_slot_label
|
|
L1974: lda the_disk_in_slot_label,x
|
|
sta ovl2_path_buf,x
|
|
dex
|
|
bpl L1974
|
|
rts
|
|
|
|
L197E: addr_call L19C8, ovl2_path_buf
|
|
rts
|
|
|
|
L1986: cmp #$A5
|
|
bne L1959
|
|
lda read_buffer + 2
|
|
cmp #$27
|
|
bne L1959
|
|
lda read_block_params::unit_num
|
|
jsr L19B7
|
|
ldx the_dos_33_disk_slot_char_offset
|
|
sta the_dos_33_disk_label,x
|
|
lda read_block_params::unit_num
|
|
jsr L19C1
|
|
ldx the_dos_33_disk_drive_char_offset
|
|
sta the_dos_33_disk_label,x
|
|
ldx the_dos_33_disk_label
|
|
L19AC: lda the_dos_33_disk_label,x
|
|
sta ovl2_path_buf,x
|
|
dex
|
|
bpl L19AC
|
|
rts
|
|
|
|
.byte 0
|
|
L19B7: and #$70
|
|
lsr a
|
|
lsr a
|
|
lsr a
|
|
lsr a
|
|
clc
|
|
adc #$30
|
|
rts
|
|
|
|
L19C1: and #$80
|
|
asl a
|
|
rol a
|
|
adc #$31
|
|
rts
|
|
|
|
L19C8: copy16 #$0002, read_block_params::block_num
|
|
yax_call MLI_RELAY, READ_BLOCK, read_block_params
|
|
beq L19F7
|
|
copy #4, ovl2_path_buf
|
|
copy #' ', ovl2_path_buf+1
|
|
copy #':', ovl2_path_buf+2
|
|
copy #' ', ovl2_path_buf+3 ; Overwritten ???
|
|
copy #'?', ovl2_path_buf+3
|
|
rts
|
|
|
|
;; This straddles $1A00 which is the block buffer ($1A00-$1BFF) ???
|
|
|
|
L19F7: lda read_buffer + 6
|
|
tax
|
|
L19FB: lda read_buffer + 6,x
|
|
sta ovl2_path_buf,x
|
|
dex
|
|
bpl L19FB
|
|
inc ovl2_path_buf
|
|
ldx ovl2_path_buf
|
|
lda #':'
|
|
sta ovl2_path_buf,x
|
|
inc ovl2_path_buf
|
|
ldx ovl2_path_buf
|
|
lda #' '
|
|
sta ovl2_path_buf,x
|
|
inc ovl2_path_buf
|
|
ldx ovl2_path_buf
|
|
lda #'?'
|
|
L1A22: sta ovl2_path_buf,x
|
|
addr_call desktop_main::adjust_case, ovl2_path_buf
|
|
rts
|
|
|
|
;;; ============================================================
|
|
|
|
.proc L1A2D
|
|
sta on_line_params::unit_num
|
|
yax_call MLI_RELAY, ON_LINE, on_line_params
|
|
bne L1A6D
|
|
lda read_buffer
|
|
and #$0F ; mask off name length
|
|
beq L1A6D
|
|
sta read_buffer
|
|
tax
|
|
: lda read_buffer,x
|
|
sta ovl2_path_buf,x
|
|
dex
|
|
bpl :-
|
|
|
|
inc ovl2_path_buf
|
|
ldx ovl2_path_buf
|
|
lda #' '
|
|
sta ovl2_path_buf,x
|
|
inc ovl2_path_buf
|
|
ldx ovl2_path_buf
|
|
lda #$3F
|
|
sta ovl2_path_buf,x
|
|
addr_call desktop_main::adjust_case, ovl2_path_buf ; Adjust case ("/HD/GAMES" -> "/Hd/Games")
|
|
rts
|
|
|
|
L1A6D: lda on_line_params::unit_num
|
|
jsr L192E
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
PAD_TO $1C00
|
|
|
|
.endproc ; format_erase_overlay
|
|
|
|
format_erase_overlay_prompt_handle_key_left := format_erase_overlay::prompt_handle_key_left
|
|
format_erase_overlay_prompt_handle_key_right := format_erase_overlay::prompt_handle_key_right
|
|
format_erase_overlay_prompt_handle_key_down := format_erase_overlay::prompt_handle_key_down
|
|
format_erase_overlay_prompt_handle_key_up := format_erase_overlay::prompt_handle_key_up
|