.importzp sp, ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3, sreg .autoimport on .feature string_escapes .MACPACK generic _console_clear = $0 _console_read_char = $2 _console_write_char = $4 _sd_readblock = $6 buf = $8200 addrh = $0000 addrl = $0000 .segment "BOOTSECTOR" _start: jmp _main .byte "SUPR6502" _preamble: .res (11+_start-_preamble) _bpb: .res 60 _main: lda #str jsr _cputs ; we need to read from data segment 0, that will be the first directory entry ; that has sector offset $00ef_e000 lda #$00 sta sreg lda #$00 sta sreg+1 lda #$f0 ldx #$77 jsr pusheax lda #buf jsr pushax lda #ptr1 jsr _SD_readSingleBlock lda #buf jsr _SD_printBuf lda #$20 sta ptr2 lda #$82 sta ptr2 + 1 ldy #$0b @1: lda (ptr2),y cmp #$0f bne @2 clc lda ptr2 adc #$20 sta ptr2 bra @1 @2: lda #$00 sta (ptr2),y lda #entry jsr _cputs lda #name jsr pushax clc tya adc ptr2 pha ldx ptr2 + 1 phx jsr pushax ldy #$4 jsr _cprintf lda #<_boot2_str ldx #>_boot2_str jsr pushax plx pla jsr _strcmp bne @fail lda #<_good ldx #>_good jsr _cputs bra @end @fail: lda #<_fail ldx #>_fail jsr _cputs @end: bra @end str: .asciiz "boot\r\n" lfn: .asciiz "Found LFN\r\n" entry: .asciiz "Found valid entry\r\n" name: .asciiz "entry name: %s\r\n" _boot2_str: .asciiz "BOOT2 BIN" _fail: .asciiz "not bootloader\r\n" _good: .asciiz "found bootloader!\r\n" _end: .res (440+_start-_end) .res 6 .res 16 .res 16 .res 16 .res 16 .byte $55 .byte $AA