Eigenmath/src/tex/disp_asm.s

121 lines
1.1 KiB
ArmAsm

.comm _disp_vram, 4, 4
.global _dinit
.global _dclear
.global _dpixel
_dinit:
sts.l pr, @-r15
mov.l sc_addr, r1
mov.l sc_id, r0
jsr @r1
nop
mov.l disp_vram, r1
mov.l r0, @r1
lds.l @r15+, pr
rts
nop
.align 4
sc_addr:
.long 0x80010070
sc_id:
.long 0x0135
_dclear:
mov #0, r0
mov.l disp_vram, r1
mov.l @r1, r1
mov.l length, r2
add r1, r2
mov.l mask, r3
mov r1, r4
add #3, r4
and r3, r4
before:
mov.l mask, r3
and r2, r3
cmp/eq r2, r3
bt clear
mov.b r0, @-r2
bra before
nop
clear:
mov.l r0, @-r2
cmp/eq r4, r2
bf clear
after:
cmp/eq r1, r2
bt finish
mov.b r0, @-r2
bra after
nop
finish:
rts
nop
.align 4
length:
.long 1024
mask:
.long 0xfffffffc
_dpixel:
mov #127, r1
cmp/hi r1, r4
bt end
mov #63, r1
cmp/hi r1, r5
bt end
mov r4, r0
mov.l disp_vram, r7
mov.l @r7, r7
shll2 r5
shll2 r5
mov #-3, r1
shld r1, r4
add r4, r7
add r5, r7
mov.b @r7, r1
and #7, r0
mov #7, r2
sub r0, r2
mov #1, r3
shld r2, r3
tst r6, r6
bt white
black:
or r3, r1
rts
mov.b r1, @r7
white:
not r3, r3
and r3, r1
rts
mov.b r1, @r7
end:
rts
nop
.align 4
disp_vram:
.long _disp_vram