Switch to use DMA and clean up boot code

This commit is contained in:
pjht 2022-11-21 10:39:29 -06:00
parent 52d5e67f44
commit a7b674df09
2 changed files with 3 additions and 15 deletions

View File

@ -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 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 | 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 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 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 start of the loaded program header's data in a1
adda.l #0xA000, 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 of the program header in a2
@ -68,22 +67,11 @@ ffc_done:
| Destination in a1 | Destination in a1
| Start sector in d0.l | Start sector in d0.l
| Sector count in d1.l | Sector count in d1.l
| Clobbers a1, d1
read_sectors: read_sectors:
move.l d0, (a0) | Set the sector number move.l d0, (a0) | Set the sector number
move.l d1, (4, a0) | Set the sector count move.l d1, (4, a0) | Set the sector count
move.w #0x0, (8, a0) | Issue a read command move.l a1, (0xC, a0) | Set the destination address
| Transfer 0x200 (512) * sector_count bytes from the storage card's data register to (a1) move.w #0x1, (8, a0) | Issue a DMA read command
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
rts rts
.if . != 512 .if . != 512

BIN
rom.bin

Binary file not shown.