mirror of
https://github.com/mi57730/a2d.git
synced 2024-11-25 10:30:50 +00:00
RBH DA: Restore devices and reformat /RAM. Fixes #98
This commit is contained in:
parent
cb99c2c9c9
commit
231d03b548
@ -50,8 +50,11 @@ start:
|
|||||||
lda #$FE ; "BASIC.SYSTEM not found"
|
lda #$FE ; "BASIC.SYSTEM not found"
|
||||||
bne fail
|
bne fail
|
||||||
|
|
||||||
|
;; Restore devices DeskTop may have removed
|
||||||
|
: jsr restore_device_list
|
||||||
|
|
||||||
;; Restore to normal state
|
;; Restore to normal state
|
||||||
: sta ALTZPOFF
|
sta ALTZPOFF
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
jsr SETVID
|
jsr SETVID
|
||||||
jsr SETKBD
|
jsr SETKBD
|
||||||
@ -66,7 +69,8 @@ start:
|
|||||||
sta CLR80VID
|
sta CLR80VID
|
||||||
sta CLR80COL
|
sta CLR80COL
|
||||||
|
|
||||||
;; TODO: restore /RAM?
|
;; Reformat /RAM if it was restored
|
||||||
|
jsr maybe_reformat_ram
|
||||||
|
|
||||||
;; Set PREFIX
|
;; Set PREFIX
|
||||||
MLI_CALL SET_PREFIX, set_prefix_params
|
MLI_CALL SET_PREFIX, set_prefix_params
|
||||||
@ -221,3 +225,44 @@ fail: return #1
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
|
.proc restore_device_list
|
||||||
|
ldx devlst_backup
|
||||||
|
inx
|
||||||
|
: copy devlst_backup,x, DEVLST-1,x
|
||||||
|
dex
|
||||||
|
bpl :-
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
.proc maybe_reformat_ram
|
||||||
|
ram_unit_number = (1<<7 | 3<<4 | DT_RAM)
|
||||||
|
|
||||||
|
;; Search DEVLST to see if S3D2 RAM was restored
|
||||||
|
ldx DEVCNT
|
||||||
|
: lda DEVLST,x
|
||||||
|
cmp #ram_unit_number
|
||||||
|
beq format
|
||||||
|
dex
|
||||||
|
bpl :-
|
||||||
|
rts
|
||||||
|
|
||||||
|
;; NOTE: Assumes driver (in DEVADR) was not modified
|
||||||
|
;; when detached.
|
||||||
|
|
||||||
|
;; /RAM FORMAT call; see ProDOS 8 TRM 5.2.2.4 for details
|
||||||
|
format: copy #DRIVER_COMMAND_FORMAT, DRIVER_COMMAND
|
||||||
|
copy #ram_unit_number, DRIVER_UNIT_NUMBER
|
||||||
|
copy16 #$2000, DRIVER_BUFFER
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
jsr driver
|
||||||
|
sta ROMIN2
|
||||||
|
rts
|
||||||
|
|
||||||
|
RAMSLOT := DEVADR + $16 ; Slot 3, Drive 2
|
||||||
|
|
||||||
|
driver: jmp (RAMSLOT)
|
||||||
|
.endproc
|
||||||
|
@ -171,6 +171,10 @@ path_table := $DFB3 ; window address table
|
|||||||
selected_file_list := $DF22 ; indexes of selected file (global, not w/in window, up to 127)
|
selected_file_list := $DF22 ; indexes of selected file (global, not w/in window, up to 127)
|
||||||
file_table := $DD9F ; file address table
|
file_table := $DD9F ; file address table
|
||||||
|
|
||||||
|
;;; Copy of DEVLST before DeskTop modifies it. Used when exiting or
|
||||||
|
;;; invoking to restore devices.
|
||||||
|
devlst_backup := $E196
|
||||||
|
|
||||||
last_menu_click_params := $E25A
|
last_menu_click_params := $E25A
|
||||||
|
|
||||||
;;; Icon (file/volume) entries - length 27 bytes, maximum of 127
|
;;; Icon (file/volume) entries - length 27 bytes, maximum of 127
|
||||||
|
@ -989,7 +989,8 @@ entries_read_this_block:
|
|||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
;; Backup copy of DEVLST made before detaching ramdisk
|
;; Backup copy of DEVLST made before detaching ramdisk
|
||||||
devlst_backup:
|
devlst_backup_:
|
||||||
|
.assert * = devlst_backup, error, "Entry point mismatch"
|
||||||
.res 10, 0
|
.res 10, 0
|
||||||
|
|
||||||
;; index is device number (in DEVLST), value is icon number
|
;; index is device number (in DEVLST), value is icon number
|
||||||
|
Loading…
Reference in New Issue
Block a user