mirror of
https://github.com/a2-4am/passport.git
synced 2024-12-22 04:29:59 +00:00
151 lines
3.5 KiB
Plaintext
151 lines
3.5 KiB
Plaintext
; Standard Delivery bootloader
|
|
; https://github.com/peterferrie/standard-delivery/
|
|
; rev. a5b839d7d0fa21b0ff3a7776d9f6c9750b09ae10 of 2016-11-29
|
|
|
|
;-------------------------------
|
|
; ConstructStandardDelivery
|
|
; in: X = ID of which Standard Delivery we should construct
|
|
; (see apidefs.a)
|
|
; out: $1000..$10FF replaced with Standard Delivery bootloader
|
|
; A,X clobbered
|
|
; Y preserved
|
|
;-------------------------------
|
|
ConstructStandardDelivery
|
|
dex
|
|
beq @construct32
|
|
dex
|
|
beq @construct32lo
|
|
dex
|
|
beq @constructrdos
|
|
|
|
@construct33p
|
|
lda #<SD_DOS33p
|
|
ldx #>SD_DOS33p
|
|
bne +
|
|
|
|
@construct32
|
|
lda #<SD_DOS32
|
|
ldx #>SD_DOS32
|
|
bne +
|
|
|
|
@construct32lo
|
|
lda #<SD_DOS32LO
|
|
ldx #>SD_DOS32LO
|
|
bne +
|
|
|
|
@constructrdos
|
|
lda #<SD_RDOS13
|
|
ldx #>SD_RDOS13
|
|
|
|
+ sta @A+1
|
|
stx @A+2
|
|
ldx #$00
|
|
txa
|
|
- sta $1000,x
|
|
inx
|
|
bne -
|
|
ldx #$4C
|
|
- lda @code,x
|
|
sta $1000,x
|
|
dex
|
|
bpl -
|
|
- inx
|
|
@A lda $FFFF,x
|
|
sta $104D,x
|
|
cmp #$C0
|
|
bne -
|
|
rts
|
|
|
|
@code
|
|
!byte $01,$a8,$ee,$06,$08,$ad,$4e,$08
|
|
!byte $c9,$c0,$f0,$40,$85,$27,$c8,$c0
|
|
!byte $10,$90,$09,$f0,$05,$20,$2f,$08
|
|
!byte $a8,$2c,$a0,$01,$84,$3d,$c8,$a5
|
|
!byte $27,$f0,$df,$8a,$4a,$4a,$4a,$4a
|
|
!byte $09,$c0,$48,$a9,$5b,$48,$60,$e6
|
|
!byte $41,$06,$40,$20,$37,$08,$18,$20
|
|
!byte $3c,$08,$e6,$40,$a5,$40,$29,$03
|
|
!byte $2a,$05,$2b,$a8,$b9,$80,$c0,$a9
|
|
!byte $30,$4c,$a8,$fc,$4c
|
|
|
|
;
|
|
; Format for Standard Delivery parameter table
|
|
;
|
|
; - word: entry point of next boot phase (Standard Delivery bootloader will JMP to this address)
|
|
; - byte array: high byte of target address of each sector, in the following order
|
|
; T00,S0E
|
|
; T00,S0D
|
|
; T00,S0C
|
|
; T00,S0B
|
|
; T00,S0A
|
|
; T00,S09
|
|
; T00,S08
|
|
; T00,S07
|
|
; T00,S06
|
|
; T00,S05
|
|
; T00,S04
|
|
; T00,S03
|
|
; T00,S02
|
|
; T00,S01
|
|
; T00,S0F
|
|
; T01,S00
|
|
; T01,S0E
|
|
; T01,S0D
|
|
; T01,S0C
|
|
; T01,S0B
|
|
; T01,S0A
|
|
; T01,S09
|
|
; T01,S08
|
|
; T01,S07
|
|
; T01,S06
|
|
; T01,S05
|
|
; T01,S04
|
|
; T01,S03
|
|
; T01,S02
|
|
; T01,S01
|
|
; T01,S0F
|
|
; &c. (all other tracks are the same order as track 1)
|
|
; - byte: $C0 (end of data)
|
|
;
|
|
; Unused sectors are marked as $00.
|
|
;
|
|
; Address array does NOT include T00,S00. This sector holds the Standard Delivery
|
|
; code and can not be reloaded at another address (unlike DOS 3.3).
|
|
|
|
SD_DOS33p
|
|
; exit via JMP $10B3
|
|
!byte $b3,$10
|
|
; track 0
|
|
!byte $1E,$1D,$1C,$1B,$00,$00,$00,$00,$00,$00,$13,$12,$11,$10,$1F
|
|
; track 1
|
|
!byte $20,$2E,$2D,$2C,$2B,$2A,$29,$28,$27,$26,$25,$24,$23,$22,$21,$2F
|
|
; track 2
|
|
!byte $30,$3E,$3D,$3C,$3B,$3A,$39,$38,$37,$36,$35,$34,$33,$32,$31,$3F
|
|
!byte $C0
|
|
|
|
SD_DOS32
|
|
; exit via JMP $B700
|
|
!byte $00,$B7
|
|
; track 0
|
|
!byte $00,$00,$00,$00,$00,$BF,$BE,$BD,$BC,$BB,$BA,$B9,$B8,$B7
|
|
!byte $C0
|
|
|
|
SD_DOS32LO
|
|
; exit via JMP $3700
|
|
!byte $00,$37
|
|
; track 0
|
|
!byte $00,$00,$1C,$1B,$00,$3F,$3E,$3D,$3C,$3B,$3A,$39,$38,$37,$00
|
|
; track 1
|
|
!byte $1D,$00,$00,$29,$28,$27,$26,$25,$24,$23,$22,$21,$20,$1F,$1E,$00
|
|
; track 2
|
|
!byte $2A,$00,$00,$00,$35,$34,$33,$32,$31,$30,$2F,$2E,$2D,$2C,$2B,$00
|
|
!byte $C0
|
|
|
|
SD_RDOS13
|
|
; exit via JMP $B300
|
|
!byte $00,$B3
|
|
; track 0
|
|
!byte $00,$00,$00,$BD,$BC,$BB,$BA,$B9,$B8,$B7,$B6,$B5,$B4,$B3
|
|
!byte $C0
|
|
|