121 lines
1.1 KiB
ArmAsm
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
|