Code: Select all
read_dir_record: ! 8c16c3ec
tst r6,r6
bt .ret_dir
mov r6,r7
mov r5,r6
mov #0,r5
shll2 r7
shll2 r7
shll2 r7
shll2 r6
shll2 r6
shll2 r6
bra DmaRead
nop
.ret_dir:
rts
mov #0,r0
DmaRead:
sts.l pr, @-r15
mov.l r8, @-r15
mov.l r9, @-r15
add #-0x14,r15
mov r4,r9
mov.l r5,@(12,r15)
mov.l r6,@(0,r15)
mov.l r7,@(4,r15)
mov.l r7,@(16,r15)
mov.l .bioscall, r8
mov #-1,r0
mov.l .dmaenabled, r2
mov.l @r2,r3
tst r3,r3
bf .ret
mov.l @(4,r2),r3
tst r3,r3
bf .ret
mov.l .prepbuf, r0
jsr @r0
mov r7,r5
mov.l @(4,r15),r1
mov.l .readlen,r0
mov.l r1,@r0
shlr8 r1
shlr2 r1
shlr r1
add #1,r1
mov.l r1,@(4,r15)
mov.l .baselba,r4
mov.l @(12,r15),r0
tst r0,r0
bt .skip2
add #1,r4
.skip2:
mov.l @r15,r1
shlr8 r1
shlr2 r1
shlr r1
add r4,r1
mov.l r1,@r15
mov #28,r4
mov r15, r5
mov.l @r8,r0
jsr @r0
mov #0,r7
mov.l r0, @(0x2c,r8)
bra .next_dr
nop
.org 0x7e
.word 0xFF0F
.next_dr:
mov.l .readlen,r1
mov #1,r2
mov.l r2,@r1
.wait_cmd:
mov.l @r8,r0
jsr @r0
mov #2,r7
mov.l @(0x2c,r8),r4
mov r15, r5
mov.l @r8,r0
jsr @r0
mov #1,r7
cmp/eq #3,r0
bf .wait_cmd
mov.l @(0x2c,r8),r4
mov r15, r5
mov.l r9,@r5
mov.l @(16,r15),r2
mov.l r2,@(4,r15)
bra .next_dr2
mov.l @r8,r0
.org 0xa8
DmaRead_real: ! 8c16c494
bra DmaRead
nop
.next_dr2:
jsr @r0
mov #6,r7
.ret_suc:
mov #0,r0
.ret:
add #0x14,r15
mov.l @r15+,r9
mov.l @r15+,r8
lds.l @r15+,pr
rts
nop
DMA_abort:
mov.l .bioscall,r8
mov.l @r8,r8
jsr @r8
mov #3,r7
mov #0x18,r4
mov #0, r5
jsr @r8
mov #0,r7
mov.l r0,@(0x10,r15)
tst r0,r0
bt .dma_abort_ret
.loop:
jsr @r8
mov #2,r7
mov.l @(0x10,r15),r4
mov r15,r5
jsr @r8
mov #1,r7
cmp/eq #0,r0
bf .loop
.dma_abort_ret:
mov.l .dmaenabled,r1
mov #0,r0
mov.l r0,@r1
add #0x14,r15
lds.l @r15+, pr
mov.l @r15+, r9
rts
mov.l @r15+, r8
.align 2
.dmaenabled:
.long 0x8c1f87d8
.baselba:
.long 45450
.bioscall:
.long 0x8c0000c0
.prepbuf:
.long 0x8c16892e
.readlen:
.long 0x8c182838
.org 0x158
DMA_abort_real:
mov.l r8, @-r15
mov.l r9, @-r15
sts.l pr, @-r15
bra DMA_abort
add #-0x14,r15