Disk Copy: Don't hard-code cross-overlay addresses. Fixes #147

This commit is contained in:
Joshua Bell 2019-04-04 09:04:05 -07:00
parent c5647d5007
commit bf3ab53af7
2 changed files with 77 additions and 86 deletions

View File

@ -5,38 +5,6 @@
.proc disk_copy_overlay3 .proc disk_copy_overlay3
.org $D000 .org $D000
.scope disk_copy_overlay4
.scope on_line_params2
unit_num := $0C42
.endscope
.scope on_line_params
unit_num := $0C46
.endscope
on_line_buffer := $0C49
.scope block_params
unit_num := $0C5A
data_buffer := $0C5B
block_num := $0C5D
.endscope
noop := $0C83
quit := $0C84
L0CAF := $0CAF
eject_disk := $0CED
unit_number_to_driver_address := $0D26
L0D51 := $0D51
L0D5F := $0D5F
L0DB5 := $0DB5
L0EB2 := $0EB2
L0ED7 := $0ED7
L10FB := $10FB
L127E := $127E
L1291 := $1291
L129B := $129B
L12A5 := $12A5
L12AF := $12AF
.endscope
.macro MGTK_RELAY_CALL2 call, params .macro MGTK_RELAY_CALL2 call, params
.if .paramcount > 1 .if .paramcount > 1
yax_call MGTK_RELAY2, call, params yax_call MGTK_RELAY2, call, params
@ -591,12 +559,12 @@ LD740: lda #$00
sta LD44D sta LD44D
ldx source_drive_index ldx source_drive_index
lda drive_unitnum_table,x lda drive_unitnum_table,x
sta disk_copy_overlay4::on_line_params2::unit_num sta disk_copy_overlay4_on_line_params2_unit_num
jsr disk_copy_overlay4::L1291 jsr disk_copy_overlay4_L1291
beq LD77E beq LD77E
cmp #$52 cmp #$52
bne LD763 bne LD763
jsr disk_copy_overlay4::L0D5F jsr disk_copy_overlay4_L0D5F
jsr LE674 jsr LE674
jsr LE559 jsr LE559
jmp LD7AD jmp LD7AD
@ -613,7 +581,7 @@ LD77E: lda $1300
lda $1301 lda $1301
cmp #$52 cmp #$52
bne LD763 bne LD763
jsr disk_copy_overlay4::L0D5F jsr disk_copy_overlay4_L0D5F
jsr LE674 jsr LE674
jsr LE559 jsr LE559
jmp LD7AD jmp LD7AD
@ -641,8 +609,8 @@ LD7AD: lda source_drive_index
LD7CC: ldx dest_drive_index LD7CC: ldx dest_drive_index
lda drive_unitnum_table,x lda drive_unitnum_table,x
sta disk_copy_overlay4::on_line_params2::unit_num sta disk_copy_overlay4_on_line_params2_unit_num
jsr disk_copy_overlay4::L1291 jsr disk_copy_overlay4_L1291
beq LD7E1 beq LD7E1
cmp #$52 cmp #$52
beq LD7F2 beq LD7F2
@ -661,7 +629,7 @@ LD7F2: ldx dest_drive_index
and #$0F and #$0F
beq LD817 beq LD817
lda drive_unitnum_table,x lda drive_unitnum_table,x
jsr disk_copy_overlay4::unit_number_to_driver_address jsr disk_copy_overlay4_unit_number_to_driver_address
ldy #$FF ldy #$FF
lda ($06),y lda ($06),y
beq LD817 beq LD817
@ -705,7 +673,7 @@ LD852: ldx dest_drive_index
and #$0F and #$0F
beq LD87C beq LD87C
lda drive_unitnum_table,x lda drive_unitnum_table,x
jsr disk_copy_overlay4::unit_number_to_driver_address jsr disk_copy_overlay4_unit_number_to_driver_address
ldy #$FE ldy #$FE
lda ($06),y lda ($06),y
and #$08 and #$08
@ -722,7 +690,7 @@ LD852: ldx dest_drive_index
LD87C: MGTK_RELAY_CALL2 MGTK::MoveTo, point_formatting LD87C: MGTK_RELAY_CALL2 MGTK::MoveTo, point_formatting
addr_call draw_text, str_formatting addr_call draw_text, str_formatting
jsr disk_copy_overlay4::L0CAF jsr disk_copy_overlay4_L0CAF
bcc LD8A9 bcc LD8A9
cmp #$2B cmp #$2B
beq LD89F beq LD89F
@ -747,7 +715,7 @@ LD8A9: lda winfo_dialog::window_id
tax tax
lda drive_unitnum_table,x lda drive_unitnum_table,x
pha pha
jsr disk_copy_overlay4::eject_disk jsr disk_copy_overlay4_eject_disk
pla pla
tay tay
ldx #$80 ldx #$80
@ -756,7 +724,7 @@ LD8A9: lda winfo_dialog::window_id
beq LD8DF beq LD8DF
jmp LD61C jmp LD61C
LD8DF: jsr disk_copy_overlay4::L0DB5 LD8DF: jsr disk_copy_overlay4_L0DB5
lda #$00 lda #$00
sta LD421 sta LD421
sta LD421+1 sta LD421+1
@ -768,7 +736,7 @@ LD8DF: jsr disk_copy_overlay4::L0DB5
jsr LE694 jsr LE694
LD8FB: jsr LE4A8 LD8FB: jsr LE4A8
lda #$00 lda #$00
jsr disk_copy_overlay4::L0ED7 jsr disk_copy_overlay4_L0ED7
cmp #$01 cmp #$01
beq LD97A beq LD97A
jsr LE4EC jsr LE4EC
@ -778,7 +746,7 @@ LD8FB: jsr LE4A8
tax tax
lda drive_unitnum_table,x lda drive_unitnum_table,x
pha pha
jsr disk_copy_overlay4::eject_disk jsr disk_copy_overlay4_eject_disk
pla pla
tay tay
ldx #$80 ldx #$80
@ -789,7 +757,7 @@ LD8FB: jsr LE4A8
LD928: jsr LE491 LD928: jsr LE491
lda #$80 lda #$80
jsr disk_copy_overlay4::L0ED7 jsr disk_copy_overlay4_L0ED7
bmi LD955 bmi LD955
bne LD97A bne LD97A
jsr LE507 jsr LE507
@ -799,7 +767,7 @@ LD928: jsr LE491
tax tax
lda drive_unitnum_table,x lda drive_unitnum_table,x
pha pha
jsr disk_copy_overlay4::eject_disk jsr disk_copy_overlay4_eject_disk
pla pla
tay tay
ldx #$80 ldx #$80
@ -809,20 +777,20 @@ LD928: jsr LE491
jmp LD61C jmp LD61C
LD955: jsr LE507 LD955: jsr LE507
jsr disk_copy_overlay4::L10FB jsr disk_copy_overlay4_L10FB
ldx source_drive_index ldx source_drive_index
lda drive_unitnum_table,x lda drive_unitnum_table,x
jsr disk_copy_overlay4::eject_disk jsr disk_copy_overlay4_eject_disk
ldx dest_drive_index ldx dest_drive_index
cpx source_drive_index cpx source_drive_index
beq :+ beq :+
lda drive_unitnum_table,x lda drive_unitnum_table,x
jsr disk_copy_overlay4::eject_disk jsr disk_copy_overlay4_eject_disk
: lda #9 ; Copy success : lda #9 ; Copy success
jsr show_alert_dialog jsr show_alert_dialog
jmp LD61C jmp LD61C
LD97A: jsr disk_copy_overlay4::L10FB LD97A: jsr disk_copy_overlay4_L10FB
lda #10 ; Copy failed lda #10 ; Copy failed
jsr show_alert_dialog jsr show_alert_dialog
jmp LD61C jmp LD61C
@ -848,13 +816,13 @@ LD9BA: cmp #MGTK::EventKind::key_down
menu_command_table: menu_command_table:
;; Apple menu ;; Apple menu
.addr disk_copy_overlay4::noop .addr disk_copy_overlay4_noop
.addr disk_copy_overlay4::noop .addr disk_copy_overlay4_noop
.addr disk_copy_overlay4::noop .addr disk_copy_overlay4_noop
.addr disk_copy_overlay4::noop .addr disk_copy_overlay4_noop
.addr disk_copy_overlay4::noop .addr disk_copy_overlay4_noop
;; File menu ;; File menu
.addr disk_copy_overlay4::quit .addr disk_copy_overlay4_quit
;; Facilities menu ;; Facilities menu
.addr cmd_quick_copy .addr cmd_quick_copy
.addr cmd_disk_copy .addr cmd_disk_copy
@ -1220,12 +1188,12 @@ state: .byte 0
;;; ============================================================ ;;; ============================================================
LDDFC: sta disk_copy_overlay4::block_params::unit_num LDDFC: sta disk_copy_overlay4_block_params_unit_num
lda #$00 lda #$00
sta disk_copy_overlay4::block_params::block_num sta disk_copy_overlay4_block_params_block_num
sta disk_copy_overlay4::block_params::block_num+1 sta disk_copy_overlay4_block_params_block_num+1
copy16 #$1C00, disk_copy_overlay4::block_params::data_buffer copy16 #$1C00, disk_copy_overlay4_block_params_data_buffer
jsr disk_copy_overlay4::L12AF jsr disk_copy_overlay4_L12AF
beq LDE19 beq LDE19
return #$FF return #$FF
@ -1263,7 +1231,7 @@ LDE4D: cmp #$A5
lda $1C02 lda $1C02
cmp #$27 cmp #$27
bne LDE2E bne LDE2E
lda disk_copy_overlay4::block_params::unit_num lda disk_copy_overlay4_block_params_unit_num
and #$70 and #$70
lsr a lsr a
lsr a lsr a
@ -1273,7 +1241,7 @@ LDE4D: cmp #$A5
adc #'0' adc #'0'
ldx slot_char ldx slot_char
sta str_dos33_s_d,x sta str_dos33_s_d,x
lda disk_copy_overlay4::block_params::unit_num lda disk_copy_overlay4_block_params_unit_num
and #$80 and #$80
asl a asl a
rol a rol a
@ -1301,8 +1269,8 @@ LDE83: lda str_dos33_s_d,x
.byte 0 .byte 0
LDE9F: stax $06 LDE9F: stax $06
copy16 #$0002, disk_copy_overlay4::block_params::block_num copy16 #$0002, disk_copy_overlay4_block_params_block_num
jsr disk_copy_overlay4::L12AF jsr disk_copy_overlay4_L12AF
beq LDEBE beq LDEBE
ldy #$00 ldy #$00
lda #$01 lda #$01
@ -1612,8 +1580,8 @@ check_alpha:
LE16C: lda #$00 LE16C: lda #$00
sta LD44E sta LD44E
sta disk_copy_overlay4::on_line_params2::unit_num sta disk_copy_overlay4_on_line_params2_unit_num
jsr disk_copy_overlay4::L1291 jsr disk_copy_overlay4_L1291
beq LE17A beq LE17A
.byte 0 .byte 0
LE17A: lda #$00 LE17A: lda #$00
@ -1890,7 +1858,7 @@ LE3B8: pha
beq LE3CC beq LE3CC
lda drive_unitnum_table,x lda drive_unitnum_table,x
and #$F0 and #$F0
jsr disk_copy_overlay4::unit_number_to_driver_address jsr disk_copy_overlay4_unit_number_to_driver_address
jmp LE3DA jmp LE3DA
LE3CC: pla LE3CC: pla
@ -1974,7 +1942,7 @@ LE44A: ldy #$FF
tax tax
lda drive_unitnum_table,x lda drive_unitnum_table,x
and #$F0 and #$F0
jsr disk_copy_overlay4::L0D51 jsr disk_copy_overlay4_L0D51
sta LE47D sta LE47D
jsr indirect_jump jsr indirect_jump
.byte 0 .byte 0
@ -2209,21 +2177,21 @@ LE6FD: stx LE765
cmp #$2B cmp #$2B
bne LE71A bne LE71A
jsr disk_copy_overlay4::L127E jsr disk_copy_overlay4_L127E
lda #5 ; Destination protected lda #5 ; Destination protected
jsr show_alert_dialog jsr show_alert_dialog
bne LE714 bne LE714
jsr LE491 jsr LE491
return #$01 return #$01
LE714: jsr disk_copy_overlay4::L10FB LE714: jsr disk_copy_overlay4_L10FB
return #$80 return #$80
LE71A: jsr disk_copy_overlay4::L127E LE71A: jsr disk_copy_overlay4_L127E
lda winfo_dialog::window_id lda winfo_dialog::window_id
jsr set_win_port jsr set_win_port
lda disk_copy_overlay4::block_params::block_num lda disk_copy_overlay4_block_params_block_num
ldx disk_copy_overlay4::block_params::block_num+1 ldx disk_copy_overlay4_block_params_block_num+1
jsr number_to_string jsr number_to_string
lda LE765 lda LE765
bne LE74B bne LE74B
@ -2243,8 +2211,8 @@ LE766: sta $06
stx $07 stx $07
stx $09 stx $09
inc $09 inc $09
copy16 #$1C00, disk_copy_overlay4::block_params::data_buffer copy16 #$1C00, disk_copy_overlay4_block_params_data_buffer
LE77A: jsr disk_copy_overlay4::L12AF LE77A: jsr disk_copy_overlay4_L12AF
beq LE789 beq LE789
ldx #$00 ldx #$00
jsr LE6FD jsr LE6FD
@ -2272,7 +2240,7 @@ LE7A8: sta $06
stx $07 stx $07
stx $09 stx $09
inc $09 inc $09
copy16 #$1C00, disk_copy_overlay4::block_params::data_buffer copy16 #$1C00, disk_copy_overlay4_block_params_data_buffer
.byte $8D .byte $8D
.byte $03 .byte $03
cpy #$8D cpy #$8D
@ -2288,7 +2256,7 @@ LE7C5: lda ($06),y
bne LE7C5 bne LE7C5
sta RAMRDOFF sta RAMRDOFF
sta RAMWRTOFF sta RAMWRTOFF
LE7D8: jsr disk_copy_overlay4::L12A5 LE7D8: jsr disk_copy_overlay4_L12A5
beq LE7E6 beq LE7E6
ldx #$80 ldx #$80
jsr LE6FD jsr LE6FD
@ -3068,22 +3036,22 @@ state:
LF185: sty LD41D LF185: sty LD41D
tya tya
jsr disk_copy_overlay4::L0EB2 jsr disk_copy_overlay4_L0EB2
beq :+ beq :+
sta LD41E sta LD41E
: rts : rts
.proc LF192 .proc LF192
lda LD41D lda LD41D
sta disk_copy_overlay4::on_line_params::unit_num sta disk_copy_overlay4_on_line_params_unit_num
jsr disk_copy_overlay4::L129B jsr disk_copy_overlay4_L129B
beq done beq done
cmp #$52 cmp #$52
beq done beq done
lda disk_copy_overlay4::on_line_buffer lda disk_copy_overlay4_on_line_buffer
and #$0F and #$0F
bne done bne done
lda disk_copy_overlay4::on_line_buffer+1 lda disk_copy_overlay4_on_line_buffer+1
cmp #$52 cmp #$52
beq done beq done
MGTK_RELAY_CALL2 MGTK::GetEvent, event_params MGTK_RELAY_CALL2 MGTK::GetEvent, event_params
@ -3102,7 +3070,7 @@ LF1CC: cmp #$03
bcc LF1D7 bcc LF1D7
cmp #$06 cmp #$06
bcs LF1D7 bcs LF1D7
jsr disk_copy_overlay4::L127E jsr disk_copy_overlay4_L127E
LF1D7: rts LF1D7: rts
.endproc .endproc

View File

@ -671,7 +671,7 @@ params: .addr 0
;;; ============================================================ ;;; ============================================================
ldx disk_copy_overlay3::dest_drive_index L0CAF: ldx disk_copy_overlay3::dest_drive_index
lda disk_copy_overlay3::drive_unitnum_table,x lda disk_copy_overlay3::drive_unitnum_table,x
sta unit_number sta unit_number
and #$0F and #$0F
@ -1478,3 +1478,26 @@ L12B9: .byte 0
.assert * = $1300, error, "Segment length mismatch" .assert * = $1300, error, "Segment length mismatch"
.endproc .endproc
disk_copy_overlay4_L0CAF := disk_copy_overlay4::L0CAF
disk_copy_overlay4_L0D51 := disk_copy_overlay4::L0D51
disk_copy_overlay4_L0D5F := disk_copy_overlay4::L0D5F
disk_copy_overlay4_L0DB5 := disk_copy_overlay4::L0DB5
disk_copy_overlay4_L0EB2 := disk_copy_overlay4::L0EB2
disk_copy_overlay4_L0ED7 := disk_copy_overlay4::L0ED7
disk_copy_overlay4_L10FB := disk_copy_overlay4::L10FB
disk_copy_overlay4_L127E := disk_copy_overlay4::L127E
disk_copy_overlay4_L1291 := disk_copy_overlay4::L1291
disk_copy_overlay4_L129B := disk_copy_overlay4::L129B
disk_copy_overlay4_L12A5 := disk_copy_overlay4::L12A5
disk_copy_overlay4_L12AF := disk_copy_overlay4::L12AF
disk_copy_overlay4_block_params_block_num := disk_copy_overlay4::block_params::block_num
disk_copy_overlay4_block_params_data_buffer := disk_copy_overlay4::block_params::data_buffer
disk_copy_overlay4_block_params_unit_num := disk_copy_overlay4::block_params::unit_num
disk_copy_overlay4_eject_disk := disk_copy_overlay4::eject_disk
disk_copy_overlay4_noop := disk_copy_overlay4::noop
disk_copy_overlay4_on_line_buffer := disk_copy_overlay4::on_line_buffer
disk_copy_overlay4_on_line_params2_unit_num := disk_copy_overlay4::on_line_params2::unit_num
disk_copy_overlay4_on_line_params_unit_num := disk_copy_overlay4::on_line_params::unit_num
disk_copy_overlay4_quit := disk_copy_overlay4::quit
disk_copy_overlay4_unit_number_to_driver_address := disk_copy_overlay4::unit_number_to_driver_address