mirror of
https://github.com/mi57730/a2d.git
synced 2025-04-08 03:37:00 +00:00
DeskTop: SmartPort calls and device enumerations
This commit is contained in:
parent
5e30b62d13
commit
05e87145b1
@ -75,7 +75,7 @@ JT_RESTORE_SEF: jmp restore_dynamic_routine
|
||||
lda LCBANK1
|
||||
lda LCBANK1
|
||||
|
||||
jsr L4530 ; something with DEVLST ???
|
||||
jsr initialize_disks_in_devices_tables
|
||||
|
||||
;; Add icons (presumably desktop ones?)
|
||||
ldx #0
|
||||
@ -120,7 +120,7 @@ main_loop:
|
||||
copy #0, loop_counter
|
||||
|
||||
;; Poll drives for updates
|
||||
jsr L4563
|
||||
jsr check_disk_inserted_ejected
|
||||
beq :+
|
||||
jsr L40E0 ; conditionally ???
|
||||
|
||||
@ -665,61 +665,66 @@ L44A6: MGTK_RELAY_CALL MGTK::SelectWindow, findwindow_window_id
|
||||
|
||||
;;; ============================================================
|
||||
|
||||
.proc L4530
|
||||
.proc initialize_disks_in_devices_tables
|
||||
ldx #0
|
||||
ldy DEVCNT
|
||||
loop: lda DEVLST,y
|
||||
and #$0F
|
||||
cmp #$0B ; RAM Disk???
|
||||
beq L4559
|
||||
cmp #DT_REMOVABLE
|
||||
beq append ; yes
|
||||
next: dey
|
||||
bpl loop
|
||||
|
||||
stx L4597
|
||||
stx L45A0
|
||||
jsr poll_drive
|
||||
ldx L45A0
|
||||
beq done
|
||||
stx removable_device_table
|
||||
stx disk_in_device_table
|
||||
jsr check_disks_in_devices
|
||||
|
||||
: copy L45A0,x, L45A9,x
|
||||
;; Make copy of table
|
||||
ldx disk_in_device_table
|
||||
beq done
|
||||
: copy disk_in_device_table,x, last_disk_in_devices_table,x
|
||||
dex
|
||||
bpl :-
|
||||
|
||||
done: rts
|
||||
|
||||
L4559: lda DEVLST,y
|
||||
append: lda DEVLST,y ; add it to the list
|
||||
inx
|
||||
sta L4597,x
|
||||
bne next
|
||||
rts
|
||||
sta removable_device_table,x
|
||||
bne next ; always
|
||||
|
||||
rts ; remove ???
|
||||
.endproc
|
||||
|
||||
;;; ============================================================
|
||||
;;; Update table tracking disk-in-device status, determine if
|
||||
;;; there was a change (insertion or ejection).
|
||||
;;; Output: 0 if no change,
|
||||
|
||||
;;; Determine ejectability?
|
||||
|
||||
.proc L4563
|
||||
lda L45A0
|
||||
.proc check_disk_inserted_ejected
|
||||
lda disk_in_device_table
|
||||
beq done
|
||||
jsr poll_drive
|
||||
ldx L45A0
|
||||
L456E: lda L45A0,x
|
||||
cmp L45A9,x
|
||||
bne L457C
|
||||
jsr check_disks_in_devices
|
||||
ldx disk_in_device_table
|
||||
: lda disk_in_device_table,x
|
||||
cmp last_disk_in_devices_table,x
|
||||
bne changed
|
||||
dex
|
||||
bne L456E
|
||||
bne :-
|
||||
done: return #0
|
||||
|
||||
L457C: copy L45A0,x, L45A9,x
|
||||
lda L4597,x
|
||||
changed:
|
||||
copy disk_in_device_table,x, last_disk_in_devices_table,x
|
||||
|
||||
lda removable_device_table,x
|
||||
ldy DEVCNT
|
||||
L4588: cmp DEVLST,y
|
||||
beq L4591
|
||||
: cmp DEVLST,y
|
||||
beq :+
|
||||
dey
|
||||
bpl L4588
|
||||
bpl :-
|
||||
rts
|
||||
|
||||
L4591: tya
|
||||
: tya
|
||||
clc
|
||||
adc #$03
|
||||
rts
|
||||
@ -728,58 +733,68 @@ L4591: tya
|
||||
;;; ============================================================
|
||||
|
||||
.byte $00
|
||||
L4597: .byte $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.byte $00
|
||||
L45A0: .byte $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.byte $00
|
||||
L45A9: .byte $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.byte $00
|
||||
|
||||
max_removable_devices = 8
|
||||
|
||||
removable_device_table:
|
||||
.byte 0 ; num entries
|
||||
.res max_removable_devices, 0
|
||||
|
||||
;;; Updated by check_disks_in_devices
|
||||
disk_in_device_table:
|
||||
.byte 0 ; num entries
|
||||
.res max_removable_devices, 0
|
||||
|
||||
;;; Snapshot of previous results; used to detect changes.
|
||||
last_disk_in_devices_table:
|
||||
.byte 0 ; num entries
|
||||
.res max_removable_devices, 0
|
||||
|
||||
;;; ============================================================
|
||||
|
||||
;; Possibly SmartPort STATUS call to determine ejectability ???
|
||||
|
||||
;; Called in a polling loop - checking drive status?
|
||||
|
||||
.proc poll_drive
|
||||
.proc check_disks_in_devices
|
||||
ptr := $6
|
||||
|
||||
ldx L4597
|
||||
ldx removable_device_table
|
||||
beq done
|
||||
stx L45A0
|
||||
: lda L4597,x
|
||||
jsr L45C7
|
||||
sta L45A0,x
|
||||
stx disk_in_device_table
|
||||
: lda removable_device_table,x
|
||||
jsr check_disk_in_drive
|
||||
sta disk_in_device_table,x
|
||||
dex
|
||||
bne :-
|
||||
done: rts
|
||||
|
||||
L45C7: sta unit_num
|
||||
check_disk_in_drive:
|
||||
sta unit_number
|
||||
txa
|
||||
pha
|
||||
tya
|
||||
pha
|
||||
|
||||
;; Compute driver address ($BFds for Slot s Drive d)
|
||||
ldx #$11
|
||||
lda unit_num
|
||||
ldx #$11 ; LSB DEVADR for slot 1, drive 1
|
||||
lda unit_number
|
||||
and #$80 ; high bit is drive (0=D1, 1=D2)
|
||||
beq :+
|
||||
ldx #$21
|
||||
: stx @bf_lsb ; D1=$11, D2=$21
|
||||
lda unit_num
|
||||
and #$70
|
||||
ldx #$21 ; LSB DEVADR for slot 1, drive 2
|
||||
: stx @addr_lsb ; D1=$11, D2=$21
|
||||
|
||||
lda unit_number
|
||||
and #$70 ; slot number
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
clc
|
||||
adc @bf_lsb
|
||||
sta @bf_lsb
|
||||
@bf_lsb := *+1
|
||||
lda $BF00 ; self-modified to $BFds
|
||||
sta ptr+1
|
||||
lda #0 ; Bug: assumes driver is at $XX00 ???
|
||||
sta ptr ; Bug: Should check driver is $Cn before continuing
|
||||
adc @addr_lsb
|
||||
sta @addr_lsb
|
||||
|
||||
@addr_lsb := *+1
|
||||
lda MLI ; self-modified to DEVADR plus offset
|
||||
sta ptr+1 ; BUG: Assumes firmware driver ($CnXX)
|
||||
lda #0 ; Set up $Cn00 for firmware lookups
|
||||
sta ptr
|
||||
|
||||
ldy #7
|
||||
lda (ptr),y ; $Cn07 == 0 for SmartPort
|
||||
bne notsp
|
||||
@ -790,7 +805,9 @@ L45C7: sta unit_num
|
||||
clc
|
||||
adc #3
|
||||
sta ptr
|
||||
lda unit_num
|
||||
|
||||
;; Compute SmartPort unit number
|
||||
lda unit_number
|
||||
pha
|
||||
rol a
|
||||
pla
|
||||
@ -801,13 +818,12 @@ L45C7: sta unit_num
|
||||
lsr a
|
||||
lsr a
|
||||
plp
|
||||
|
||||
adc #1
|
||||
sta status_unit_num
|
||||
|
||||
;; Execute SmartPort call
|
||||
jsr call
|
||||
.byte 0 ; $00 = STATUS
|
||||
jsr smartport_call
|
||||
.byte $00 ; $00 = STATUS
|
||||
.addr status_params
|
||||
|
||||
lda status_buffer
|
||||
@ -816,7 +832,7 @@ L45C7: sta unit_num
|
||||
lda #$FF
|
||||
bne finish
|
||||
|
||||
notsp: lda #0 ; not SmartPort
|
||||
notsp: lda #0 ; not SmartPort (or no disk in drive)
|
||||
|
||||
finish: sta result
|
||||
pla
|
||||
@ -825,9 +841,10 @@ finish: sta result
|
||||
tax
|
||||
return result
|
||||
|
||||
call: jmp (ptr)
|
||||
smartport_call:
|
||||
jmp (ptr)
|
||||
|
||||
unit_num:
|
||||
unit_number:
|
||||
.byte 0
|
||||
result: .byte 0
|
||||
|
||||
@ -1848,10 +1865,10 @@ L4E78: jsr clear_selection
|
||||
lda win_buf_table,x
|
||||
bmi L4EB4
|
||||
DESKTOP_RELAY_CALL DT_CLOSE_WINDOW, active_window_id
|
||||
lda LDD9E
|
||||
lda icon_count
|
||||
sec
|
||||
sbc cached_window_icon_count
|
||||
sta LDD9E
|
||||
sta icon_count
|
||||
ldx #$00
|
||||
L4EA5: cpx cached_window_icon_count
|
||||
beq L4EB4
|
||||
@ -2373,10 +2390,10 @@ L52D0: cmp #$00
|
||||
lda active_window_id
|
||||
sta cached_window_id
|
||||
jsr DESKTOP_COPY_TO_BUF
|
||||
lda LDD9E
|
||||
lda icon_count
|
||||
sec
|
||||
sbc cached_window_icon_count
|
||||
sta LDD9E
|
||||
sta icon_count
|
||||
ldx #0
|
||||
loop: cpx cached_window_icon_count
|
||||
beq done
|
||||
@ -3177,7 +3194,7 @@ L5916: lda cached_window_icon_list,x
|
||||
lda icon_param
|
||||
jsr DESKTOP_FREE_ICON
|
||||
dec cached_window_icon_count
|
||||
dec LDD9E
|
||||
dec icon_count
|
||||
pla
|
||||
tax
|
||||
L5942: dex
|
||||
@ -3186,7 +3203,7 @@ L5942: dex
|
||||
sty L599E
|
||||
L594A: ldy L599E
|
||||
inc cached_window_icon_count
|
||||
inc LDD9E
|
||||
inc icon_count
|
||||
lda #$00
|
||||
sta device_to_icon_map,y
|
||||
lda DEVLST,y
|
||||
@ -3316,7 +3333,7 @@ L5A4C: jsr redraw_windows_and_desktop
|
||||
sta icon_param
|
||||
beq L5A7F
|
||||
jsr remove_icon_from_window
|
||||
dec LDD9E
|
||||
dec icon_count
|
||||
lda icon_param
|
||||
jsr DESKTOP_FREE_ICON
|
||||
jsr reset_grafport3
|
||||
@ -3324,7 +3341,7 @@ L5A4C: jsr redraw_windows_and_desktop
|
||||
L5A7F: lda cached_window_icon_count
|
||||
sta L5AC6
|
||||
inc cached_window_icon_count
|
||||
inc LDD9E
|
||||
inc icon_count
|
||||
pla
|
||||
tay
|
||||
lda DEVLST,y
|
||||
@ -4111,10 +4128,10 @@ handle_close_click:
|
||||
dex
|
||||
lda win_buf_table,x
|
||||
bmi L6215
|
||||
lda LDD9E
|
||||
lda icon_count
|
||||
sec
|
||||
sbc cached_window_icon_count
|
||||
sta LDD9E
|
||||
sta icon_count
|
||||
DESKTOP_RELAY_CALL DT_CLOSE_WINDOW, active_window_id
|
||||
ldx #$00
|
||||
L6206: cpx cached_window_icon_count
|
||||
@ -5653,7 +5670,7 @@ L710A: lsr16 L72A8
|
||||
bne L710A
|
||||
lda L70C2
|
||||
bne L7147
|
||||
lda LDD9E
|
||||
lda icon_count
|
||||
clc
|
||||
adc L70C1
|
||||
bcs L7147
|
||||
@ -6308,7 +6325,7 @@ L7767: .byte $14
|
||||
icon_entry := $8
|
||||
name_tmp := $1800
|
||||
|
||||
inc LDD9E
|
||||
inc icon_count
|
||||
jsr DESKTOP_ALLOC_ICON
|
||||
ldx cached_window_icon_count
|
||||
inc cached_window_icon_count
|
||||
@ -8437,7 +8454,7 @@ error: pha ; save error
|
||||
lda #0
|
||||
sta device_to_icon_map,y
|
||||
dec cached_window_icon_count
|
||||
dec LDD9E
|
||||
dec icon_count
|
||||
pla
|
||||
rts
|
||||
|
||||
@ -9446,35 +9463,38 @@ index: .byte 0
|
||||
exit: rts
|
||||
|
||||
found: lda DEVLST,y ;
|
||||
sta unit_num
|
||||
sta unit_number
|
||||
|
||||
;; Compute driver address ($BFds for Slot s Drive d)
|
||||
ldx #$11
|
||||
lda unit_num
|
||||
ldx #$11 ; LSB DEVADR for slot 1, drive 1
|
||||
lda unit_number
|
||||
and #$80 ; high bit is drive (0=D1, 1=D2)
|
||||
beq :+
|
||||
ldx #$21
|
||||
: stx @bf_lsb ; D1=$11, D2=$21
|
||||
lda unit_num
|
||||
and #$70
|
||||
ldx #$21 ; LSB DEVADR for slot 1, drive 2
|
||||
: stx @addr_lsb ; D1=$11, D2=$21
|
||||
|
||||
lda unit_number
|
||||
and #$70 ; slot number
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
clc
|
||||
adc @bf_lsb
|
||||
sta @bf_lsb
|
||||
@bf_lsb := *+1
|
||||
lda $BF00 ; self-modified to $BFds
|
||||
sta ptr+1
|
||||
lda #0 ; Bug: assumes driver is at $XX00 ???
|
||||
sta ptr ; Bug: Should check driver is $Cn before continuing
|
||||
adc @addr_lsb
|
||||
sta @addr_lsb
|
||||
|
||||
@addr_lsb := *+1
|
||||
lda MLI ; self-modified to DEVADR plus offset
|
||||
sta ptr+1 ; BUG: Assumes firmware driver ($CnXX)
|
||||
lda #0 ; Set up $Cn00 for firmware lookups
|
||||
sta ptr
|
||||
|
||||
ldy #7
|
||||
lda (ptr),y ; $Cn07 == 0 for SmartPort
|
||||
bne exit
|
||||
|
||||
ldy #$FB ; $CnFB low bits???
|
||||
ldy #$FB ; Smart Port ID Type Byte ($CnFB)
|
||||
lda (ptr),y
|
||||
and #$7F
|
||||
and #$7F ; Anything (except 'Extended')
|
||||
bne exit
|
||||
|
||||
;; Locate SmartPort entry point: $Cn00 + ($CnFF) + 3
|
||||
@ -9483,7 +9503,9 @@ found: lda DEVLST,y ;
|
||||
clc
|
||||
adc #3
|
||||
sta ptr
|
||||
lda unit_num
|
||||
|
||||
;; Compute SmartPort unit number
|
||||
lda unit_number
|
||||
pha
|
||||
rol a
|
||||
pla
|
||||
@ -9497,21 +9519,24 @@ found: lda DEVLST,y ;
|
||||
adc #1
|
||||
sta control_unit_number
|
||||
|
||||
jsr call
|
||||
;; Execute SmartPort call
|
||||
jsr smartport_call
|
||||
.byte $04 ; $04 = CONTROL
|
||||
.addr control_params
|
||||
rts
|
||||
call: jmp ($06)
|
||||
|
||||
smartport_call:
|
||||
jmp ($06)
|
||||
|
||||
.proc control_params
|
||||
param_count: .byte 3
|
||||
unit_number: .byte $0
|
||||
unit_number: .byte 0
|
||||
control_list: .addr list
|
||||
control_code: .byte 4 ; Eject disk
|
||||
.endproc
|
||||
control_unit_number := control_params::unit_number
|
||||
list: .word 0 ; 0 items in list
|
||||
unit_num:
|
||||
unit_number:
|
||||
.byte 0
|
||||
|
||||
.byte 0 ; unused???
|
||||
@ -14250,7 +14275,7 @@ trash_name: PASCAL_STRING " Trash "
|
||||
sta cached_window_id
|
||||
lda #1
|
||||
sta cached_window_icon_count
|
||||
sta LDD9E
|
||||
sta icon_count
|
||||
jsr DESKTOP_ALLOC_ICON
|
||||
sta trash_icon_num
|
||||
sta cached_window_icon_list
|
||||
@ -14296,15 +14321,18 @@ trash_name: PASCAL_STRING " Trash "
|
||||
jmp done
|
||||
|
||||
: lda DEVLST,x ; unit_num
|
||||
stx L09F8
|
||||
sta L0A02
|
||||
stx index
|
||||
sta unit_number
|
||||
|
||||
;; Compute driver address ($BFds for Slot s Drive d)
|
||||
ldx #$11 ; LSB DEVADR for slot 1, drive 1
|
||||
lda L0A02
|
||||
and #$80 ; drive 2?
|
||||
lda unit_number
|
||||
and #$80 ; high bit is drive (0=D1, 1=D2)
|
||||
beq :+
|
||||
ldx #$21 ; LSB DEVADR for slot 1, drive 2
|
||||
: stx @addr_lsb
|
||||
lda L0A02 ; unit_num (again)
|
||||
: stx @addr_lsb ; D1=$11, D2=$21
|
||||
|
||||
lda unit_number
|
||||
and #$70 ; slot number
|
||||
lsr a
|
||||
lsr a
|
||||
@ -14314,37 +14342,39 @@ trash_name: PASCAL_STRING " Trash "
|
||||
sta @addr_lsb
|
||||
|
||||
@addr_lsb := *+1
|
||||
lda MLI ; self-modified
|
||||
|
||||
sta ptr+1 ; $Cn firmware address
|
||||
lda #$00 ; BUG: assumes device has firmware driver!
|
||||
lda MLI ; self-modified to DEVADR plus offset
|
||||
sta ptr+1 ; BUG: Assumes firmware driver ($CnXX)
|
||||
lda #0 ; Set up $Cn00 for firmware lookups
|
||||
sta ptr
|
||||
|
||||
ldy #$07 ; $Cn07 is $00 = SmartPort
|
||||
lda (ptr),y
|
||||
ldy #7
|
||||
lda (ptr),y ; $Cn07 == 0 for SmartPort
|
||||
bne done
|
||||
|
||||
ldy #$FB ; Secondary check???
|
||||
ldy #$FB ; Smart Port ID Type Byte ($CnFB)
|
||||
lda (ptr),y
|
||||
and #$7F
|
||||
and #$7F ; Anything (except 'Extended')
|
||||
bne done
|
||||
|
||||
ldy #$FF ; If SmartPort, $Cn00 + ($CnFF) + 3 is
|
||||
lda (ptr),y ; entry point
|
||||
;; Locate SmartPort entry point: $Cn00 + ($CnFF) + 3
|
||||
ldy #$FF
|
||||
lda (ptr),y
|
||||
clc
|
||||
adc #3
|
||||
sta ptr
|
||||
|
||||
;; SmartPort call
|
||||
;; Execute SmartPort call
|
||||
jsr smartport_call
|
||||
.byte 0
|
||||
.byte $00 ; $00 = STATUS
|
||||
.addr smartport_params
|
||||
|
||||
bcs done
|
||||
lda $1F00
|
||||
lda $1F00 ; number of devices
|
||||
cmp #2
|
||||
bcs done
|
||||
ldx L09F8
|
||||
|
||||
;; Single device - remove from DEVLST - Why ???
|
||||
ldx index
|
||||
: lda DEVLST+1,x
|
||||
sta DEVLST,x
|
||||
inx
|
||||
@ -14353,21 +14383,22 @@ trash_name: PASCAL_STRING " Trash "
|
||||
dec DEVCNT
|
||||
done: jmp end
|
||||
|
||||
L09F8: .byte 0
|
||||
index: .byte 0
|
||||
|
||||
smartport_call:
|
||||
jmp (ptr)
|
||||
|
||||
|
||||
smartport_params:
|
||||
.byte $03
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte $1F
|
||||
.byte 0
|
||||
.byte $03 ; parameter count
|
||||
.byte 0 ; unit number (0 = overall status)
|
||||
.addr $1F00 ; status list pointer
|
||||
.byte 0 ; status code (0 = device status)
|
||||
|
||||
devcnt: .byte 0
|
||||
L0A02: .byte 0
|
||||
|
||||
unit_number:
|
||||
.byte 0
|
||||
|
||||
end:
|
||||
.endproc
|
||||
@ -14722,22 +14753,26 @@ process_volume:
|
||||
copy16 slot_drive_string_table,y, $08
|
||||
ldy volume_num
|
||||
lda DEVLST,y
|
||||
pha
|
||||
|
||||
pha ; save all registers
|
||||
txa
|
||||
pha
|
||||
tya
|
||||
pha
|
||||
|
||||
inc cached_window_icon_count
|
||||
inc LDD9E
|
||||
inc icon_count
|
||||
lda DEVLST,y
|
||||
jsr desktop_main::create_volume_icon
|
||||
sta L0E34
|
||||
MGTK_RELAY_CALL MGTK::CheckEvents
|
||||
pla
|
||||
|
||||
pla ; restore all registers
|
||||
tay
|
||||
pla
|
||||
tax
|
||||
pla
|
||||
|
||||
pha
|
||||
lda L0E34
|
||||
cmp #$28
|
||||
@ -14745,25 +14780,32 @@ process_volume:
|
||||
ldy volume_num
|
||||
lda DEVLST,y
|
||||
and #$0F
|
||||
beq ok
|
||||
beq select_template
|
||||
ldx volume_num
|
||||
jsr remove_device
|
||||
jmp next
|
||||
L0D64: cmp #ERR_DUPLICATE_VOLUME
|
||||
bne ok
|
||||
bne select_template
|
||||
lda #$F9 ; "... 2 volumes with the same name..."
|
||||
sta desktop_main::pending_alert
|
||||
ok: pla
|
||||
pha
|
||||
and #$0F
|
||||
sta L0E32
|
||||
cmp #$00
|
||||
bne L0D7F
|
||||
addr_jump L0DAD, str_slot_drive
|
||||
|
||||
L0D7F: cmp #$0B
|
||||
beq L0DA9
|
||||
cmp #$04
|
||||
;; This section populates slot_drive_string_table -
|
||||
;; it determines which device type string to use, and
|
||||
;; fills in slot and drive as appropriate.
|
||||
;; TODO: Determine if the string is actually ever used!
|
||||
;; TODO: If it is, make this table driven.
|
||||
.proc select_template
|
||||
pla
|
||||
pha
|
||||
and #$0F ; low nibble of unit number
|
||||
sta unit_number_lo_nibble
|
||||
cmp #DT_DISKII
|
||||
bne :+
|
||||
addr_jump copy_template, str_slot_drive
|
||||
|
||||
: cmp #DT_REMOVABLE
|
||||
beq is_removable
|
||||
cmp #DT_PROFILE
|
||||
bne L0DC2
|
||||
pla
|
||||
pha
|
||||
@ -14776,15 +14818,17 @@ L0D7F: cmp #$0B
|
||||
sta @slot_msb
|
||||
@slot_msb := *+2
|
||||
lda $C7FB ; self-modified
|
||||
and #$01
|
||||
bne L0DA2
|
||||
addr_jump L0DAD, str_profile_slot_x
|
||||
and #$01 ; is RAM card?
|
||||
bne :+
|
||||
addr_jump copy_template, str_profile_slot_x
|
||||
|
||||
L0DA2: addr_jump L0DAD, str_ramcard_slot_x
|
||||
: addr_jump copy_template, str_ramcard_slot_x
|
||||
|
||||
L0DA9: ldax #str_unidisk_xy
|
||||
is_removable:
|
||||
ldax #str_unidisk_xy
|
||||
.endproc
|
||||
|
||||
L0DAD: stax $06
|
||||
copy_template: stax $06
|
||||
ldy #$00
|
||||
lda ($06),y
|
||||
sta @compare
|
||||
@ -14797,16 +14841,21 @@ L0DAD: stax $06
|
||||
tay
|
||||
L0DC2: pla
|
||||
pha
|
||||
and #$70
|
||||
|
||||
;; A has unit number
|
||||
and #$70 ; slot (from DSSSxxxx)
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
ora #$30
|
||||
tax
|
||||
lda L0E32
|
||||
cmp #$04
|
||||
bne L0DF0
|
||||
|
||||
lda unit_number_lo_nibble
|
||||
cmp #DT_PROFILE
|
||||
bne check_removable
|
||||
|
||||
;; A has unit number (again)
|
||||
pla
|
||||
pha
|
||||
and #$70 ; compute $CnFB
|
||||
@ -14818,49 +14867,61 @@ L0DC2: pla
|
||||
sta @msb
|
||||
@msb := *+2
|
||||
lda $C7FB ; self-modified
|
||||
and #$01
|
||||
bne L0DEC
|
||||
and #$01 ; bit 0 = is RAM disk?
|
||||
bne is_ram_disk
|
||||
|
||||
ldy #$0E
|
||||
bne L0DFA
|
||||
L0DEC: ldy #$0E
|
||||
bne L0DFA
|
||||
L0DF0: cmp #$0B
|
||||
bne L0DFA ; always
|
||||
|
||||
is_ram_disk:
|
||||
ldy #$0E
|
||||
bne L0DFA ; always
|
||||
|
||||
check_removable:
|
||||
cmp #DT_REMOVABLE
|
||||
bne :+
|
||||
ldy #$0F
|
||||
bne L0DFA
|
||||
bne L0DFA ; always
|
||||
|
||||
: ldy #$06
|
||||
|
||||
L0DFA: txa
|
||||
sta ($08),y
|
||||
lda L0E32
|
||||
|
||||
lda unit_number_lo_nibble
|
||||
and #$0F
|
||||
cmp #$04
|
||||
cmp #DT_PROFILE
|
||||
beq L0E21
|
||||
pla
|
||||
pha
|
||||
rol a
|
||||
lda #$00
|
||||
adc #$01
|
||||
ora #$30
|
||||
rol a ; set carry to drive - 1
|
||||
lda #0
|
||||
adc #1 ; drive = 1 or 2
|
||||
ora #'0'
|
||||
pha
|
||||
lda L0E32
|
||||
and #$0F
|
||||
|
||||
lda unit_number_lo_nibble
|
||||
and #DT_RAM
|
||||
bne L0E1C
|
||||
ldy #$10
|
||||
pla
|
||||
bne L0E1F
|
||||
bne L0E1F ; always
|
||||
L0E1C: ldy #$11
|
||||
pla
|
||||
L0E1F: sta ($08),y
|
||||
L0E21: pla
|
||||
inc volume_num
|
||||
next: lda volume_num
|
||||
cmp DEVCNT
|
||||
beq L0E2F
|
||||
bcs populate_startup_menu
|
||||
L0E2F: jmp process_volume
|
||||
|
||||
L0E32: .byte 0
|
||||
volume_num: .byte 0
|
||||
cmp DEVCNT ; done?
|
||||
beq :+
|
||||
bcs populate_startup_menu
|
||||
: jmp process_volume ; next!
|
||||
|
||||
unit_number_lo_nibble:
|
||||
.byte 0
|
||||
volume_num:
|
||||
.byte 0
|
||||
L0E34: .byte 0
|
||||
.endproc
|
||||
|
||||
|
@ -874,7 +874,9 @@ run_list_entries:
|
||||
;;; Window & Icon State
|
||||
;;; ============================================================
|
||||
|
||||
LDD9E: .byte 0
|
||||
;; Total number of icons
|
||||
icon_count:
|
||||
.byte 0
|
||||
|
||||
;; Pointers into icon_entries buffer
|
||||
icon_entry_address_table:
|
||||
|
@ -71,8 +71,11 @@ WRITE_BLOCK := $81
|
||||
;;; Device Types (low nibble of unit number in DEVLST)
|
||||
;;; ============================================================
|
||||
|
||||
;;; As used by DeskTop; these are not actually correct...
|
||||
|
||||
DT_DISKII := $0
|
||||
DT_PROFILE := $4
|
||||
DT_REMOVABLE := $B
|
||||
DT_RAM := $F
|
||||
|
||||
;;; See ProDOS Tech Note #21 - other than the above types, there
|
||||
|
Loading…
x
Reference in New Issue
Block a user