Switch to use DMA and clean up boot code
This commit is contained in:
parent
52d5e67f44
commit
a7b674df09
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user