diff --git a/boot/boot.68k b/boot/boot.68k index 6f70b58..8436797 100644 --- a/boot/boot.68k +++ b/boot/boot.68k @@ -31,9 +31,8 @@ move.b #0, (a1)+ | Zero a byte of the destination memory dbra d1, zero_loop | Loop back if there is more to zero | Copy the data of the program header from the loaded file into position move.l (16, a0), d1 | Put the file size of the program header - 1 in d1 +beq.b next_seg | If the file size is 0, skip the copy (ex, .bss section) subq.l #0x1, d1 -cmpi.l #0xFFFFFFFF, d1 | If the file size is 0, skip the copy (ex, .bss section) -beq.b next_seg move.l (4, a0), a1 | Put the address of the start of the loaded program header's data in a1 adda.l #0xA000, a1 move.l (8, a0), a2 | Put the starting memory address of the program header in a2 @@ -68,22 +67,11 @@ ffc_done: | Destination in a1 | Start sector in d0.l | Sector count in d1.l -| Clobbers a1, d1 read_sectors: move.l d0, (a0) | Set the sector number move.l d1, (4, a0) | Set the sector count -move.w #0x0, (8, a0) | Issue a read command -| Transfer 0x200 (512) * sector_count bytes from the storage card's data register to (a1) -lsl.l #8, d1 | d0 = d0 * 256 to compute the number of words to transfer -subq.l #0x1, d1 | Subtract 1 from the word count to account for the extra loop done by dbra -bra.b rs_loop -rs_loop_swap: -swap.w d1 -rs_loop: -move.w (0xA, a0), (a1)+ | Transfer a word of sector data to the destination -dbra.w d1, rs_loop -swap.w d1 -dbra.w d1, rs_loop_swap +move.l a1, (0xC, a0) | Set the destination address +move.w #0x1, (8, a0) | Issue a DMA read command rts .if . != 512 diff --git a/rom.bin b/rom.bin index f8b8004..3fdcdec 100644 Binary files a/rom.bin and b/rom.bin differ