diff --git a/boot/boot.68k b/boot/boot.68k index 6f70b58..0c257b2 100644 --- a/boot/boot.68k +++ b/boot/boot.68k @@ -22,21 +22,20 @@ phead_loop: move.l (a0), d1 | If the type of the program header isn't 1 (LOAD), skip the header cmpi.l #0x1, d1 bne.b next_seg -| Zero the destination memory of the program header -move.l (20, a0), d1 | Put the memory size of the program header - 1 in d1 +| Zero the destination memory +move.l (20, a0), d1 | Put the memory size - 1 in d1 subq.l #0x1, d1 -move.l (8, a0), a1 | Put the starting memory address of the program header in a1 +move.l (8, a0), a1 | Put the starting memory address in a1 zero_loop: 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 +| Copy the data from the loaded file into position +move.l (16, a0), d1 | Put the file size - 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 +move.l (4, a0), a1 | Put the address of the loaded data in a1 adda.l #0xA000, a1 -move.l (8, a0), a2 | Put the starting memory address of the program header in a2 +move.l (8, a0), a2 | Put the starting memory address in a2 load_loop: move.b (a1)+, (a2)+ | Copy a byte of data into position dbra d1, load_loop | Loop back if there is more to copy @@ -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