2017-01-08 03:35:35 +00:00
|
|
|
; "Special Delivery" boot tracer
|
|
|
|
; for DOS 3.3P disks
|
|
|
|
; e.g. Ernie's Quiz, Elite
|
2017-08-15 15:31:36 +00:00
|
|
|
|
2017-01-08 03:35:35 +00:00
|
|
|
;-------------------------------
|
|
|
|
; IDSpecDel
|
|
|
|
; returns C clear if "Special Delivery" bootloader
|
|
|
|
; detected in T00,S00
|
|
|
|
;-------------------------------
|
|
|
|
IDSpecDel
|
|
|
|
lda #$00
|
2019-04-16 05:39:12 +00:00
|
|
|
tax
|
2017-01-08 03:35:35 +00:00
|
|
|
ldy #$58
|
|
|
|
jsr compare
|
2017-01-24 00:57:43 +00:00
|
|
|
!byte $02,$90,$4A,$C6,$27,$BD,$31,$09
|
2017-01-08 03:35:35 +00:00
|
|
|
!byte $49,$B0,$48,$C6,$3D,$98,$C8,$48
|
2017-01-24 00:57:43 +00:00
|
|
|
!byte $CE,$00,$08,$A9,$20,$C6,$27,$48
|
2017-01-08 03:35:35 +00:00
|
|
|
!byte $51,$26,$91,$26,$AA,$A5,$27,$85
|
2017-01-24 00:57:43 +00:00
|
|
|
!byte $32,$CE,$00,$08,$A8,$B5,$33,$84
|
2017-01-08 03:35:35 +00:00
|
|
|
!byte $29,$84,$21,$8A,$A2,$17,$86,$31
|
2017-01-24 00:57:43 +00:00
|
|
|
!byte $D5,$33,$A6,$2B,$5D,$31,$09,$85
|
|
|
|
!byte $29,$5D,$32,$09,$C6,$3D,$85,$28
|
|
|
|
!byte $5D,$33,$09,$85,$48,$A0,$2B,$84
|
2017-01-08 03:35:35 +00:00
|
|
|
!byte $20,$C6,$40,$30,$3E,$24,$40,$30
|
|
|
|
!byte $33,$24,$24,$24,$24,$40,$40,$40
|
|
|
|
rts
|
|
|
|
|
|
|
|
;-------------------------------
|
|
|
|
; TraceSpecDel
|
|
|
|
; set up boot trace to capture the bootloader and DOS
|
|
|
|
; of "Special Delivery" disks (stored in non-sector
|
|
|
|
; format on tracks 0-2)
|
|
|
|
;-------------------------------
|
|
|
|
TraceSpecDel
|
2021-04-12 21:32:38 +00:00
|
|
|
ldx #$0F
|
|
|
|
lda #$FF
|
|
|
|
- sta precheck_sectors, x
|
|
|
|
dex
|
|
|
|
bpl -
|
|
|
|
inc precheck_sectors
|
2021-04-12 21:38:08 +00:00
|
|
|
lda #$07
|
|
|
|
inc precheck_sectors+1
|
2021-04-12 21:32:38 +00:00
|
|
|
jsr PreCheckT00
|
|
|
|
|
2017-01-08 03:35:35 +00:00
|
|
|
jsr ClearTSBuffer
|
|
|
|
lda #$00 ; set a marker to see if entire
|
|
|
|
sta $3FFF ; RWTS loads successfully later
|
2019-04-16 05:39:12 +00:00
|
|
|
;; lda #$00 ; save zero page before trace
|
2017-01-08 03:35:35 +00:00
|
|
|
ldx #$0A
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
|
|
|
|
|
|
|
lda #<TraceSpecDel2
|
|
|
|
ldx #>TraceSpecDel2
|
|
|
|
jmp Trace
|
|
|
|
|
|
|
|
TraceSpecDel2
|
|
|
|
lda #$4C
|
|
|
|
sta $0855
|
|
|
|
lda #<TraceSpecDel3
|
|
|
|
sta $0856
|
|
|
|
lda #>TraceSpecDel3
|
|
|
|
sta $0857
|
|
|
|
lda #$02
|
|
|
|
sec
|
|
|
|
jmp $0801
|
|
|
|
|
|
|
|
TraceSpecDel3
|
|
|
|
lda $1212
|
|
|
|
cmp #$D8
|
2019-05-26 22:08:11 +00:00
|
|
|
sec
|
2017-01-08 03:35:35 +00:00
|
|
|
bne SDfail
|
2019-05-05 15:08:45 +00:00
|
|
|
ldy #$00
|
|
|
|
lda $10D1
|
|
|
|
cmp #$A2
|
2019-05-07 01:24:29 +00:00
|
|
|
beq + ; passport-test-suite/Ernie's Quiz.woz [Z=1] matches
|
|
|
|
ldy #$04 ; passport-test-suite/Kaves of Karkhan.woz [Z=0] matches
|
2019-05-05 15:08:45 +00:00
|
|
|
+ lda #$4C
|
|
|
|
sta $10D1,Y
|
|
|
|
sta $10EC,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #<TraceSpecDel4
|
2019-05-05 15:08:45 +00:00
|
|
|
sta $10D2,Y
|
|
|
|
sta $10ED,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #>TraceSpecDel4
|
2019-05-05 15:08:45 +00:00
|
|
|
sta $10D3,Y
|
|
|
|
sta $10EE,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
jmp $1212
|
|
|
|
|
|
|
|
TraceSpecDel4
|
|
|
|
lda $C0E8 ; turn off source drive
|
|
|
|
|
|
|
|
lda $3FFF
|
|
|
|
cmp #$EA
|
2019-05-26 22:08:11 +00:00
|
|
|
sec
|
2017-01-08 03:35:35 +00:00
|
|
|
bne SDfail
|
|
|
|
|
|
|
|
lda #$0B
|
|
|
|
ldx #$00
|
|
|
|
ldy #$03
|
|
|
|
jsr compare ; if $1B00 ==
|
|
|
|
!byte $4C,$4D,$2A
|
|
|
|
SDfail
|
2019-05-26 22:08:11 +00:00
|
|
|
php
|
|
|
|
lda #$0A ; restore zero page from before trace
|
|
|
|
ldx #$00
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
|
|
|
plp
|
|
|
|
bcc SDsuccess
|
|
|
|
|
2017-01-08 03:35:35 +00:00
|
|
|
jmp UseUniversal
|
|
|
|
|
|
|
|
SDsuccess
|
|
|
|
;
|
|
|
|
; Restore the original code in memory before writing.
|
|
|
|
;
|
2019-05-05 15:08:45 +00:00
|
|
|
ldy #$00
|
|
|
|
lda $10D1
|
|
|
|
cmp #$4C
|
|
|
|
beq +
|
|
|
|
ldy #$04
|
|
|
|
+ lda #$A2
|
|
|
|
sta $10D1,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$FF
|
2019-05-05 15:08:45 +00:00
|
|
|
sta $10D2,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$9A
|
2019-05-05 15:08:45 +00:00
|
|
|
sta $10D3,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$A5
|
2019-05-05 15:08:45 +00:00
|
|
|
sta $10EC,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$2B
|
2019-05-05 15:08:45 +00:00
|
|
|
sta $10ED,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$4A
|
2019-05-05 15:08:45 +00:00
|
|
|
sta $10EE,Y
|
2017-01-08 03:35:35 +00:00
|
|
|
;
|
|
|
|
; move $1000-$13FF to $1100-$14FF to align it as we need it
|
|
|
|
; for writing to disk with the Standard Delivery bootloader
|
|
|
|
; in T00,S00
|
|
|
|
;
|
|
|
|
lda #$13
|
|
|
|
ldx #$14
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
|
|
|
lda #$12
|
|
|
|
ldx #$13
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
|
|
|
lda #$11
|
|
|
|
ldx #$12
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
|
|
|
lda #$10
|
|
|
|
ldx #$11
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
|
|
|
|
|
|
|
; $1B00-$1FFF is real code and in the right place
|
|
|
|
; but we should clear the rest of T00 so we're not
|
|
|
|
; writing garbage to disk on unused sectors
|
|
|
|
|
|
|
|
lda #$15
|
|
|
|
ldx #$00
|
|
|
|
ldy #$06
|
|
|
|
jsr ClearMemory
|
|
|
|
|
|
|
|
; copy Standard Delivery bootloader into place for T00,S00
|
|
|
|
|
2017-11-09 05:47:12 +00:00
|
|
|
ldx #ID_DOS33p
|
2017-08-15 15:31:36 +00:00
|
|
|
jsr ConstructStandardDelivery
|
2019-04-08 15:36:01 +00:00
|
|
|
|
|
|
|
; maybe say we're writing a bootloader
|
|
|
|
|
|
|
|
bit gMode ; don't say we're writing a bootloader in verify-only mode,
|
|
|
|
bpl + ; that's scary
|
2017-08-15 21:17:14 +00:00
|
|
|
lda #s_bootwrite
|
|
|
|
jsr PrintByID
|
2019-04-08 15:36:01 +00:00
|
|
|
+
|
2017-01-08 03:35:35 +00:00
|
|
|
; now manually write out track 0 with Standard Delivery
|
|
|
|
; bootloader
|
|
|
|
|
|
|
|
jsr IncProgress
|
|
|
|
lda #$00
|
|
|
|
sta gTrack
|
2019-04-08 15:36:01 +00:00
|
|
|
jsr WriteTrackNA ; doesn't really write anything in verify-only mode
|
2017-01-08 03:35:35 +00:00
|
|
|
|
|
|
|
; manually write out track 1
|
|
|
|
|
|
|
|
jsr IncProgress
|
|
|
|
inc gTrack
|
2019-04-16 05:39:12 +00:00
|
|
|
lda #$10
|
|
|
|
tax
|
|
|
|
tay
|
|
|
|
asl
|
2017-01-08 03:35:35 +00:00
|
|
|
jsr CopyMemory
|
2019-04-08 15:36:01 +00:00
|
|
|
jsr WriteTrackNA ; doesn't really write anything in verify-only mode
|
2017-01-08 03:35:35 +00:00
|
|
|
|
|
|
|
; manually write out track 2 with a patched RWTS
|
|
|
|
|
|
|
|
jsr IncProgress
|
|
|
|
inc gTrack
|
|
|
|
lda #$30
|
|
|
|
ldx #$10
|
|
|
|
ldy #$10
|
|
|
|
jsr CopyMemory
|
|
|
|
lda #$08
|
|
|
|
ldx #$B6
|
|
|
|
ldy #$04
|
|
|
|
jsr modify
|
|
|
|
!byte $C9,$AD,$90,$E5
|
|
|
|
lda #$18
|
|
|
|
ldx #$38
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
2019-04-08 15:36:01 +00:00
|
|
|
jsr WriteTrackNA ; doesn't really write anything in verify-only mode
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$C9
|
|
|
|
sta $38B6
|
|
|
|
lda #$AD
|
|
|
|
sta $38B7
|
|
|
|
lda #$90
|
|
|
|
sta $38B8
|
|
|
|
lda #$E5
|
|
|
|
sta $38B9
|
|
|
|
|
|
|
|
; mark tracks 0-2 as "skip" in sector map
|
|
|
|
|
|
|
|
ldy #$2F
|
2017-10-02 01:36:43 +00:00
|
|
|
lda #kSectorIgnore
|
2017-01-08 03:35:35 +00:00
|
|
|
skipsectors
|
|
|
|
sta T00,y
|
|
|
|
dey
|
|
|
|
bpl skipsectors
|
|
|
|
|
|
|
|
; set up RWTS entry point
|
|
|
|
|
|
|
|
lda #$D5
|
2017-11-09 05:47:12 +00:00
|
|
|
sta jCallRWTS+1
|
2017-01-08 03:35:35 +00:00
|
|
|
lda #$36
|
2017-11-09 05:47:12 +00:00
|
|
|
sta jCallRWTS+2
|
2017-01-08 03:35:35 +00:00
|
|
|
|
|
|
|
; read the rest of the disk with the original RWTS
|
|
|
|
|
|
|
|
lda #$03
|
|
|
|
sta gLastTrack
|
|
|
|
jmp ADStyle
|