From e916e1df97eee27532864850543a64b371a9f4f2 Mon Sep 17 00:00:00 2001 From: Peter Ferrie Date: Wed, 20 Apr 2016 10:08:35 -0700 Subject: [PATCH] improved DOS 3.3 Launcher support --- DOS33L.S | 41 +++++++++++++++++++++++++++++++++++++++++ DOS33LR.S | 38 ++++++++++++++++++++++++++++++++++++++ QBOOT.S | 46 ++++++++++++++++++++++++++++++++-------------- 3 files changed, 111 insertions(+), 14 deletions(-) create mode 100644 DOS33L.S create mode 100644 DOS33LR.S diff --git a/DOS33L.S b/DOS33L.S new file mode 100644 index 0000000..0395fb3 --- /dev/null +++ b/DOS33L.S @@ -0,0 +1,41 @@ +;qboot DOS 3.3 default launcher support +;copyright (c) Peter Ferrie 2016 +;assemble using ACME +!cpu 6502 +!to "dos33l",plain +;place on sector 1 +*=$BF00 + stx sectors + sta address + lda phase + lsr + sta track +- sty index + 1 + lda xlatsec, y + sta sector + lda #>iocb + ldy #dct, 0 +address !byte $d1 + !byte 0, 0, 1, 0, 0, $60, 1 +dct !byte 1, $ef, $d8, 0 diff --git a/DOS33LR.S b/DOS33LR.S new file mode 100644 index 0000000..e09839f --- /dev/null +++ b/DOS33LR.S @@ -0,0 +1,38 @@ +;qboot DOS 3.3 relocated launcher support +;copyright (c) Peter Ferrie 2016 +;assemble using ACME +!cpu 6502 +!to "dos33l",plain +;place on sector 1 +*=$BF00 + firsttrk = $d1 ;user-defined, first track to read + + stx sectors + sta address +- sty index + 1 + lda xlatsec, y + sta sector + lda #>iocb + ldy #dct, 0 +address !byte $d1 + !byte 0, 0, 1, 0, 0, $60, 1 +dct !byte 1, $ef, $d8, 0 diff --git a/QBOOT.S b/QBOOT.S index 8761048..3853f78 100644 --- a/QBOOT.S +++ b/QBOOT.S @@ -1,5 +1,5 @@ ;fast seek/multi-read -;copyright (c) Peter Ferrie 2015 +;copyright (c) Peter Ferrie 2015-16 ;assemble using ACME !cpu 6502 !to "qboot",plain @@ -67,6 +67,10 @@ ldy #$7f bne + ;branch always *=$839 + lda #>(entry-1) + pha + lda #<(entry-1) + pha jsr preread jmp $bf00 ;DOS 3.3 launcher entrypoint @@ -122,28 +126,42 @@ indextbl ;the 0 also terminates the patchtbl list! iny cpy #3 bcc -- - -preread - lda #>(entry-1) pha lda #<(entry-1) pha + jsr preread + +!if seekback { ;no room to do this in the routine + sty startsec+1 + sta tmpadr+1 + stx total+1 +} + jmp seekread + +preread ;copy post-read if necessary ;push post-read address here +; pla +; tax +; pla +; tay +; lda #>(postread-1) +; pha +; lda #<(postread-1) +; pha +; tya +; pha +; txa +; pha lda #<(firsttrk*2) sta phase+1 ldx #sectors - ldy #address - lda #firstsec -!if seekback { ;no room to do this in the routine - sta startsec+1 - stx total+1 - sty tmpadr+1 -} - jmp seekread + lda #address + ldy #firstsec + rts *=$8fe !byte $be, 1 @@ -163,9 +181,9 @@ slotpatch1 seekread !if seekback=0 { - sta startsec+1 + sty startsec+1 + sta tmpadr+1 stx total+1 - sty tmpadr+1 } inittrk