mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-19 15:30:08 +00:00
peasant: properly patch the drive1/drive2 code for slot
This commit is contained in:
parent
2ad94749c6
commit
69f5e0a3b3
@ -80,7 +80,8 @@ qload.o: qload.s qboot.inc \
|
||||
hgr_copy.s \
|
||||
gr_offsets.s \
|
||||
qkumba_popwr.s \
|
||||
random16.s
|
||||
random16.s \
|
||||
drive2.s
|
||||
ca65 -o qload.o qload.s -l qload.lst
|
||||
|
||||
###
|
||||
@ -116,6 +117,8 @@ qboot.inc: generate_common QBOOT
|
||||
./generate_common -a 0x000 -s phase_smc qboot_sector.lst >> qboot.inc
|
||||
./generate_common -a 0x000 -s driveon qboot_sector.lst >> qboot.inc
|
||||
./generate_common -a 0x000 -s driveoff qboot_sector.lst >> qboot.inc
|
||||
./generate_common -a 0x000 -s switch_drive1 qboot_sector.lst >> qboot.inc
|
||||
./generate_common -a 0x000 -s switch_drive2 qboot_sector.lst >> qboot.inc
|
||||
./generate_common -a 0x000 -s load_new qboot_sector.lst >> qboot.inc
|
||||
./generate_common -a 0x000 -s load_address qboot_sector.lst >> qboot.inc
|
||||
echo "load_track=load_address+1" >> qboot.inc
|
||||
|
@ -1,6 +1,5 @@
|
||||
; roughly based on anti-m/anti-m.a
|
||||
|
||||
|
||||
; Notes from qkumba/4am
|
||||
|
||||
; Drive with no disk and no motor, will return same value in range $00..$7f
|
||||
@ -9,13 +8,12 @@
|
||||
; so the best way to detect if disk is there is to try seeking/reading
|
||||
; and seeing if you get valid data
|
||||
|
||||
|
||||
; FIXME: patch these
|
||||
|
||||
.if 0
|
||||
switch_drive1:
|
||||
lda curtrk_smc+1
|
||||
sta DRIVE2_TRACK ; save track location
|
||||
lda $C0EA ; drive 1 select
|
||||
slotpatch10:
|
||||
lda $C0d1 ; drive 1 select
|
||||
lda #1
|
||||
sta CURRENT_DRIVE
|
||||
lda DRIVE1_TRACK ; restore saved track location
|
||||
@ -25,12 +23,14 @@ switch_drive1:
|
||||
switch_drive2:
|
||||
lda curtrk_smc+1
|
||||
sta DRIVE1_TRACK ; save track location
|
||||
lda $C0EB ; drive 2 select
|
||||
slotpatch11:
|
||||
lda $C0d1 ; drive 2 select
|
||||
lda #2
|
||||
sta CURRENT_DRIVE
|
||||
lda DRIVE2_TRACK ; restore saved track location
|
||||
sta curtrk_smc+1
|
||||
rts
|
||||
.endif
|
||||
|
||||
;=================================
|
||||
; check floppy in drive2
|
||||
@ -48,13 +48,7 @@ check_floppy_in_drive2:
|
||||
|
||||
jsr switch_drive2
|
||||
|
||||
jsr driveon
|
||||
|
||||
; lda $C0E9 ; motor on 1110 1001
|
||||
|
||||
; jsr spinup ; spin up drive
|
||||
|
||||
; jsr seek_track0 ; seek to track0
|
||||
jsr driveon ; turn drive on
|
||||
|
||||
; seek to track 0
|
||||
|
||||
@ -88,7 +82,8 @@ check_drive2_loop:
|
||||
keep_trying:
|
||||
|
||||
get_valid_byte:
|
||||
lda $C0EC ; read byte
|
||||
; lda $C0EC ; read byte
|
||||
jsr readnib
|
||||
bpl get_valid_byte ; keep trying if high bit not set
|
||||
|
||||
check_if_d5:
|
||||
@ -96,13 +91,15 @@ check_if_d5:
|
||||
bne check_drive2_loop ; if not, try again
|
||||
|
||||
check_if_aa:
|
||||
lda $C0EC ; read byte
|
||||
; lda $C0EC ; read byte
|
||||
jsr readnib
|
||||
bpl check_if_aa ; keep trying until valid
|
||||
cmp #$AA ; see if aa
|
||||
bne get_valid_byte ; if not try again
|
||||
|
||||
check_if_96:
|
||||
lda $C0EC ; read byte
|
||||
; lda $C0EC ; read byte
|
||||
jsr readnib
|
||||
bpl check_if_96 ; keep trying until valid
|
||||
cmp #$96 ; see if 96
|
||||
bne check_if_d5 ; if not try again
|
||||
@ -115,5 +112,3 @@ done_check:
|
||||
|
||||
jmp switch_drive1 ; tail call
|
||||
|
||||
|
||||
|
||||
|
@ -3,6 +3,8 @@ curtrk_smc =$0a2b
|
||||
phase_smc =$0a31
|
||||
driveon =$0a9d
|
||||
driveoff =$0a22
|
||||
switch_drive1 =$08af
|
||||
switch_drive2 =$08c1
|
||||
load_new =$0aab
|
||||
load_address =$0ac4
|
||||
load_track=load_address+1
|
||||
|
@ -1,6 +1,8 @@
|
||||
; fast seek/multi-read
|
||||
; copyright (c) Peter Ferrie 2015-16
|
||||
|
||||
.include "zp.inc"
|
||||
|
||||
; Paramaters for loading QLOAD
|
||||
|
||||
sectors = 21 ; user-defined
|
||||
@ -22,7 +24,7 @@
|
||||
znibble = $fe ; only during init
|
||||
zmask = $ff ; only during init
|
||||
|
||||
WHICH_SLOT = $DA
|
||||
; WHICH_SLOT = $DA
|
||||
|
||||
; $26/$27 sector read location (ROM)
|
||||
; $3D sector number (ROM)
|
||||
@ -110,6 +112,17 @@ patch_loop:
|
||||
eor #9 ; PHASEOFF (c080)
|
||||
sta slotpatch8+1
|
||||
|
||||
; patch self-modifying code for disk1
|
||||
ora #$A ; (C08A)
|
||||
sta slotpatch10+1
|
||||
|
||||
; patch self-modifying code for disk2
|
||||
ora #$1 ; (C08B)
|
||||
sta slotpatch11+1
|
||||
|
||||
;========================
|
||||
; ???
|
||||
|
||||
ldx #$3f
|
||||
stx zmask
|
||||
inx
|
||||
@ -227,6 +240,28 @@ preread:
|
||||
ldy #firstsec
|
||||
rts
|
||||
|
||||
switch_drive1:
|
||||
lda curtrk_smc+1
|
||||
sta DRIVE2_TRACK ; save track location
|
||||
slotpatch10:
|
||||
lda $C0d1 ; drive 1 select
|
||||
lda #1
|
||||
sta CURRENT_DRIVE
|
||||
lda DRIVE1_TRACK ; restore saved track location
|
||||
sta curtrk_smc+1
|
||||
rts
|
||||
|
||||
switch_drive2:
|
||||
lda curtrk_smc+1
|
||||
sta DRIVE1_TRACK ; save track location
|
||||
slotpatch11:
|
||||
lda $C0d1 ; drive 2 select
|
||||
lda #2
|
||||
sta CURRENT_DRIVE
|
||||
lda DRIVE2_TRACK ; restore saved track location
|
||||
sta curtrk_smc+1
|
||||
rts
|
||||
|
||||
|
||||
|
||||
end_code:
|
||||
|
@ -1,40 +1,40 @@
|
||||
load_file =$0b24
|
||||
sector_write =$0c7f
|
||||
check_floppy_in_drive2 =$0e0a
|
||||
check_floppy_in_drive2 =$0de6
|
||||
requested_sector =$0d17
|
||||
decompress_lzsa2_fast =$0e49
|
||||
getsrc_smc =$0f3f
|
||||
hgr2 =$1845
|
||||
hgr_make_tables =$15b9
|
||||
hgr_put_string =$0f4c
|
||||
restore_bg_1x28 =$1484
|
||||
hgr_draw_sprite_1x28 =$141d
|
||||
input_buffer =$1591
|
||||
hgr_text_box =$162f
|
||||
hgr_text_box_nosave =$16c6
|
||||
hgr_partial_restore =$1507
|
||||
clear_bottom =$181a
|
||||
hgr_input =$1537
|
||||
draw_box =$12ce
|
||||
disp_put_string =$166a
|
||||
disp_one_line =$167e
|
||||
invert_smc1 =$0fc4
|
||||
disp_put_string_cursor =$167a
|
||||
hgr_put_char_cursor =$0f78
|
||||
vgi_simple_rectangle =$134f
|
||||
peasant_text =$1f79
|
||||
save_menu =$18f8
|
||||
load_menu =$18ed
|
||||
location_names_l =$1c25
|
||||
location_names_h =$1c44
|
||||
wait_until_keypress =$1e64
|
||||
random16 =$1e6d
|
||||
score_points =$1ef2
|
||||
print_score =$1ea2
|
||||
update_score =$1ead
|
||||
speaker_beep =$1f60
|
||||
speaker_duration =$1f77
|
||||
speaker_frequency =$1f78
|
||||
decompress_lzsa2_fast =$0e25
|
||||
getsrc_smc =$0f1b
|
||||
hgr2 =$1821
|
||||
hgr_make_tables =$1595
|
||||
hgr_put_string =$0f28
|
||||
restore_bg_1x28 =$1460
|
||||
hgr_draw_sprite_1x28 =$13f9
|
||||
input_buffer =$156d
|
||||
hgr_text_box =$160b
|
||||
hgr_text_box_nosave =$16a2
|
||||
hgr_partial_restore =$14e3
|
||||
clear_bottom =$17f6
|
||||
hgr_input =$1513
|
||||
draw_box =$12aa
|
||||
disp_put_string =$1646
|
||||
disp_one_line =$165a
|
||||
invert_smc1 =$0fa0
|
||||
disp_put_string_cursor =$1656
|
||||
hgr_put_char_cursor =$0f54
|
||||
vgi_simple_rectangle =$132b
|
||||
peasant_text =$1f55
|
||||
save_menu =$18d4
|
||||
load_menu =$18c9
|
||||
location_names_l =$1c01
|
||||
location_names_h =$1c20
|
||||
wait_until_keypress =$1e40
|
||||
random16 =$1e49
|
||||
score_points =$1ece
|
||||
print_score =$1e7e
|
||||
update_score =$1e89
|
||||
speaker_beep =$1f3c
|
||||
speaker_duration =$1f53
|
||||
speaker_frequency =$1f54
|
||||
hposn_high = $BA00
|
||||
hposn_low = $BB00
|
||||
driveoff = $A22
|
||||
|
Loading…
x
Reference in New Issue
Block a user