116 lines
1.4 KiB
ArmAsm
116 lines
1.4 KiB
ArmAsm
# TODO: This is currently unused, the floor uses the C shader.
|
|
|
|
.global _azuray_floor_line
|
|
|
|
# Parameters:
|
|
# vram, floor_x, floor_z, ortho_dir.x
|
|
# ortho_dir.z, xlen, 0, color1, color2
|
|
# Register allocation:
|
|
# r0: (temp)
|
|
# r1: (temp)
|
|
# r2: color1
|
|
# r3: color2
|
|
# r4: vram
|
|
# r5: floor_x
|
|
# r6: floor_z
|
|
# r7: ortho_dir.x
|
|
# r8: ortho_dir.z
|
|
# r9: xlen
|
|
# r10: _
|
|
# r11: -16 (for num -> int conversion)
|
|
# r12: loop counter
|
|
_azuray_floor_line:
|
|
mov.l r8, @-r15
|
|
nop
|
|
|
|
mov.l r9, @-r15
|
|
nop
|
|
|
|
mov.l r10, @-r15
|
|
nop
|
|
|
|
mov.l @(12, r15), r8
|
|
nop
|
|
|
|
mov.l @(16, r15), r9
|
|
nop
|
|
|
|
mov.l @(20, r15), r10
|
|
nop
|
|
|
|
mov.l @(24, r15), r2
|
|
nop
|
|
|
|
mov.l @(28, r15), r3
|
|
nop
|
|
|
|
mov.l r11, @-r15
|
|
mov #-16, r11
|
|
|
|
# ---
|
|
|
|
1: mov r5, r0
|
|
xor r6, r0
|
|
|
|
mov r2, r1
|
|
shad r11, r0
|
|
|
|
shlr r0
|
|
nop
|
|
|
|
bf.s 3f
|
|
add r7, r5
|
|
|
|
mov r3, r1
|
|
nop
|
|
|
|
3: mov.w r1, @r4
|
|
dt r9
|
|
|
|
/* Sneaky vram++ */
|
|
mov.w @r4+, r0
|
|
nop
|
|
|
|
bf.s 1b
|
|
add r8, r6
|
|
|
|
# ---
|
|
|
|
bra 4f
|
|
nop
|
|
|
|
# --- alternative loop ending ---
|
|
|
|
2: dt r9
|
|
nop
|
|
|
|
/* Sneaky vram++ */
|
|
add r7, r5
|
|
mov.w @r4+, r0
|
|
|
|
bf.s 1b
|
|
add r8, r6
|
|
|
|
# ---
|
|
|
|
4: mov.l @r15+, r11
|
|
mov.l @r15+, r10
|
|
mov.l @r15+, r9
|
|
rts
|
|
mov.l @r15+, r8
|
|
|
|
/*
|
|
for(int x = 0; x < DWIDTH; x++) {
|
|
int wx = floor_x.ifloor();
|
|
int wz = floor_z.ifloor();
|
|
|
|
if((uint)wx < MI.width() && (uint)wz < MI.height()) {
|
|
*vram = (wx ^ wz) & 1 ? color2 : color1;
|
|
}
|
|
|
|
floor_x += ortho_dir.x;
|
|
floor_z += ortho_dir.z;
|
|
vram++;
|
|
}
|
|
*/
|