Load a multi-sector file and execute it
This commit is contained in:
@@ -13,6 +13,14 @@ _start:
|
|||||||
ldx #>str
|
ldx #>str
|
||||||
jsr _cputs
|
jsr _cputs
|
||||||
|
|
||||||
str: .byte "This is a very long message which would otherwise"
|
str: .byte "This is a very long message which would otherwise "
|
||||||
.byte "take up a lot of space in the bootsector, where space"
|
.byte "take up a lot of space in the bootsector, where space "
|
||||||
.byte "is at quite a premium.", $00
|
.byte "is at quite a premium. In fact, this string is as "
|
||||||
|
.byte "long as all the rest of the bootloader code, presuming "
|
||||||
|
.byte "I stretch it out long enough. It is quite remarkable "
|
||||||
|
.byte "Just how much you can do with so few bytes. Only a couple "
|
||||||
|
.byte "hundred are required to start up a modern computer. "
|
||||||
|
.byte "This is, of course, not a modern computer, but I want it "
|
||||||
|
.byte "to act like it in a way. This means using a modern "
|
||||||
|
.byte "(well, in the sense that its from 1996 and not 1983)"
|
||||||
|
.byte "anyway, I've exceeded 512 bytes now so good luck.", $00
|
||||||
@@ -90,26 +90,70 @@ _main:
|
|||||||
jsr _cputs
|
jsr _cputs
|
||||||
|
|
||||||
|
|
||||||
lda #<_cluster
|
|
||||||
ldx #>_cluster
|
|
||||||
jsr pushax
|
|
||||||
ldy #$15
|
|
||||||
lda (ptr3),y
|
|
||||||
tax
|
|
||||||
dey
|
|
||||||
lda (ptr3),y
|
|
||||||
jsr pushax
|
|
||||||
ldy #$1b
|
ldy #$1b
|
||||||
lda (ptr3),y
|
lda (ptr3),y
|
||||||
tax
|
tax
|
||||||
dey
|
dey
|
||||||
lda (ptr3),y
|
lda (ptr3),y
|
||||||
|
sec
|
||||||
|
sbc #$02 ; don't handle carry, assume <256
|
||||||
|
; now a is the cluster num minus 2. We need to multiply this by
|
||||||
|
; 8 and add it to 0x77f0
|
||||||
|
; multiply by 8 is asl3
|
||||||
|
ldx #$77
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
clc
|
||||||
|
adc #$f0
|
||||||
|
bcc @3
|
||||||
|
inx
|
||||||
|
@3: pha
|
||||||
|
phx
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta sreg
|
||||||
|
lda #$00
|
||||||
|
sta sreg+1
|
||||||
|
plx
|
||||||
|
pla
|
||||||
|
phx
|
||||||
|
pha
|
||||||
|
jsr pusheax
|
||||||
|
lda #<buf
|
||||||
|
ldx #>buf
|
||||||
jsr pushax
|
jsr pushax
|
||||||
ldy #$6
|
lda #<ptr1
|
||||||
jsr _cprintf
|
ldx #>ptr1
|
||||||
|
jsr _SD_readSingleBlock
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta sreg
|
||||||
|
lda #$00
|
||||||
|
sta sreg+1
|
||||||
|
pla
|
||||||
|
plx
|
||||||
|
inc
|
||||||
|
jsr pusheax
|
||||||
|
lda #<buf
|
||||||
|
ldx #>buf
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
jsr pushax
|
||||||
|
lda #<ptr1
|
||||||
|
ldx #>ptr1
|
||||||
|
jsr _SD_readSingleBlock
|
||||||
|
|
||||||
|
|
||||||
|
jmp buf
|
||||||
|
|
||||||
bra @end
|
bra @end
|
||||||
|
|
||||||
; Now we have the cluster number of the bootloader
|
; Now we have the cluster number of the bootloader (3)
|
||||||
|
; this means we need to read from address 00ef_e000 + ((3 -2) * 8 * 512)
|
||||||
|
|
||||||
|
; 00eff000 is the address we want, which is efe000 + 4096
|
||||||
|
|
||||||
|
|
||||||
@fail: lda #<_fail
|
@fail: lda #<_fail
|
||||||
|
|||||||
Reference in New Issue
Block a user