summaryrefslogtreecommitdiff
path: root/src/tile16f_t.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/tile16f_t.h')
-rw-r--r--src/tile16f_t.h606
1 files changed, 312 insertions, 294 deletions
diff --git a/src/tile16f_t.h b/src/tile16f_t.h
index 5aac300..0c17bf8 100644
--- a/src/tile16f_t.h
+++ b/src/tile16f_t.h
@@ -13,329 +13,347 @@
#include "tile16.h"
#define ROW(width) \
- " ldrb r8, [%[depth]], #1 \n"\
- " mov r10, " width " \n" \
- "7:\n" \
- \
- " cmp %[gfx_z1], r8 \n"\
- " ldrhib r9, [%[bp]] \n"\
- " bls 3f \n"\
- \
- " movs r9, r9, lsl #2 \n"\
- " beq 3f \n"\
- \
- " ldrb r8, [%[subdepth], %[depth]] \n"\
- " ldr r9, [%[colors], r9] \n"\
- " strb %[gfx_z2], [%[depth], #(-1)] \n"\
- \
- " cmp r8, #1 \n"\
- " bne 4f \n"\
- \
- ROP \
- "4: \n"\
- " strh r9, [%[screen]] \n"\
- \
- "3: \n"\
- \
- " add %[bp], %[bp], #1 \n"\
- " add %[screen], %[screen], #2 \n"\
- " subs r10, r10, #1 \n"\
- " ldrneb r8, [%[depth]], #1 \n"\
- " bne 7b \n"
+ " ldrb r8, [%[depth]], #1 \n"\
+ " mov r10, " width " \n" \
+ "7:\n" \
+ \
+ " cmp %[gfx_z1], r8 \n"\
+ " ldrhib r9, [%[bp]] \n"\
+ " bls 3f \n"\
+ \
+ " movs r9, r9, lsl #2 \n"\
+ " beq 3f \n"\
+ \
+ " ldrb r8, [%[subdepth], %[depth]] \n"\
+ " ldr r9, [%[colors], r9] \n"\
+ " strb %[gfx_z2], [%[depth], #(-1)] \n"\
+ \
+ " cmp r8, #1 \n"\
+ " bne 4f \n"\
+ \
+ ROP \
+ "4: \n"\
+ " strh r9, [%[screen]] \n"\
+ \
+ "3: \n"\
+ \
+ " add %[bp], %[bp], #1 \n"\
+ " add %[screen], %[screen], #2 \n"\
+ " subs r10, r10, #1 \n"\
+ " ldrneb r8, [%[depth]], #1 \n"\
+ " bne 7b \n"
-#define ROW1(width) \
- " ldrb r8, [%[depth]], #1 \n"\
- " mov r10, " width " \n" \
- "7:\n" \
- \
- " cmp %[gfx_z1], r8 \n"\
- " ldrhib r9, [%[bp]] \n"\
- " bls 3f \n"\
- \
- " movs r9, r9, lsl #2 \n"\
- " beq 3f \n"\
- \
- " ldrb r8, [%[subdepth], %[depth]] \n"\
- " ldr r9, [%[colors], r9] \n"\
- " strb %[gfx_z2], [%[depth], #(-1)] \n"\
- \
- " cmp r8, #1 \n"\
- " bne 4f \n"\
- \
- ROP \
- "4: \n"\
- " strh r9, [%[screen]] \n"\
- \
- "3: \n"\
- \
- " sub %[bp], %[bp], #1 \n"\
- " add %[screen], %[screen], #2 \n"\
- " subs r10, r10, #1 \n"\
- " ldrneb r8, [%[depth]], #1 \n"\
- " bne 7b \n"
+#define ROW1(width) \
+ " ldrb r8, [%[depth]], #1 \n"\
+ " mov r10, " width " \n" \
+ "7:\n" \
+ \
+ " cmp %[gfx_z1], r8 \n"\
+ " ldrhib r9, [%[bp]] \n"\
+ " bls 3f \n"\
+ \
+ " movs r9, r9, lsl #2 \n"\
+ " beq 3f \n"\
+ \
+ " ldrb r8, [%[subdepth], %[depth]] \n"\
+ " ldr r9, [%[colors], r9] \n"\
+ " strb %[gfx_z2], [%[depth], #(-1)] \n"\
+ \
+ " cmp r8, #1 \n"\
+ " bne 4f \n"\
+ \
+ ROP \
+ "4: \n"\
+ " strh r9, [%[screen]] \n"\
+ \
+ "3: \n"\
+ \
+ " sub %[bp], %[bp], #1 \n"\
+ " add %[screen], %[screen], #2 \n"\
+ " subs r10, r10, #1 \n"\
+ " ldrneb r8, [%[depth]], #1 \n"\
+ " bne 7b \n"
#define MACRO_CONCAT(a,b) a##b
#define DEC_DRAW(n) MACRO_CONCAT(void DrawTile16, n)(uint32 Tile, uint32 Offset, uint32 StartLine, uint32 LineCount)
-#define DEC_DRAWCLIPPED(n) MACRO_CONCAT(void DrawClippedTile16, n)(uint32 Tile, uint32 Offset, uint32 StartPixel, uint32 Width, uint32 StartLine, uint32 LineCount)
+#define DEC_DRAWCLIPPED(n) MACRO_CONCAT(void DrawClippedTile16, n)(uint32 Tile, uint32 Offset, uint32 StartPixel, uint32 Width, uint32 StartLine, uint32 LineCount)
// DrawTile16 -----------------------------------------
DEC_DRAW(ROPNAME)
{
- TILE_PREAMBLE
+ TILE_PREAMBLE
- if (Tile & V_FLIP){
- if (!(Tile & H_FLIP)){
- __asm__ volatile (
- "2: \n"
+ if (Tile & V_FLIP)
+ {
+ if (!(Tile & H_FLIP))
+ {
+ __asm__ volatile(
+ "2: \n"
- ROW("#8")
+ ROW("#8")
- " sub %[bp], %[bp], #(8+8) \n"
- " add %[screen], %[screen], #(640-16) \n"
- " add %[depth], %[depth], #(320-8) \n"
- " subs %[lcount], %[lcount], #1 \n"
- " bne 2b"
- // output
- : [lcount] "+r" (LineCount)
- // input
- : [gfx_z1] "r" (GFX.Z1),
- [gfx_z2] "r" (GFX.Z2),
- [colors] "r" (GFX.ScreenColors),
- //[delta] "r" (GFX.Delta << 1),
- [fixedcolour] "r" (FIXEDCOLOUR),
- [screen] "r" ((uint16 *) GFX.S + Offset),
- [depth] "r" (GFX.ZBuffer + Offset),
- [subdepth] "r" (GFX.DepthDelta - 1),
- [bp] "r" (pCache + 56 - StartLine)
- // clobbered
- : "r8", "r9", "r10", "cc"
- );
- } else {
- __asm__ volatile (
- "2: \n"
- ROW1("#8")
+ " sub %[bp], %[bp], #(8+8) \n"
+ " add %[screen], %[screen], #(640-16) \n"
+ " add %[depth], %[depth], #(320-8) \n"
+ " subs %[lcount], %[lcount], #1 \n"
+ " bne 2b"
+ // output
+ : [lcount] "+r"(LineCount)
+ // input
+ : [gfx_z1] "r"(GFX.Z1),
+ [gfx_z2] "r"(GFX.Z2),
+ [colors] "r"(GFX.ScreenColors),
+ //[delta] "r" (GFX.Delta << 1),
+ [fixedcolour] "r"(FIXEDCOLOUR),
+ [screen] "r"((uint16*) GFX.S + Offset),
+ [depth] "r"(GFX.ZBuffer + Offset),
+ [subdepth] "r"(GFX.DepthDelta - 1),
+ [bp] "r"(pCache + 56 - StartLine)
+ // clobbered
+ : "r8", "r9", "r10", "cc"
+ );
+ }
+ else
+ {
+ __asm__ volatile(
+ "2: \n"
+ ROW1("#8")
- " add %[screen], %[screen], #(640-16) \n"
- " add %[depth], %[depth], #(320-8) \n"
- " subs %[lcount], %[lcount], #1 \n"
- " bne 2b"
- // output
- : [lcount] "+r" (LineCount)
- // input
- : [gfx_z1] "r" (GFX.Z1),
- [gfx_z2] "r" (GFX.Z2),
- [colors] "r" (GFX.ScreenColors),
- //[delta] "r" (GFX.Delta << 1),
- [fixedcolour] "r" (FIXEDCOLOUR),
- [screen] "r" ((uint16 *) GFX.S + Offset),
- [depth] "r" (GFX.ZBuffer + Offset),
- [subdepth] "r" (GFX.DepthDelta - 1),
- [bp] "r" (pCache + 56 - StartLine + 7)
- // clobbered
- : "r8", "r9", "r10", "cc"
- );
- }
-} else {
- if (!(Tile & H_FLIP)){
- __asm__ volatile (
- "2: \n"
- ROW("#8")
+ " add %[screen], %[screen], #(640-16) \n"
+ " add %[depth], %[depth], #(320-8) \n"
+ " subs %[lcount], %[lcount], #1 \n"
+ " bne 2b"
+ // output
+ : [lcount] "+r"(LineCount)
+ // input
+ : [gfx_z1] "r"(GFX.Z1),
+ [gfx_z2] "r"(GFX.Z2),
+ [colors] "r"(GFX.ScreenColors),
+ //[delta] "r" (GFX.Delta << 1),
+ [fixedcolour] "r"(FIXEDCOLOUR),
+ [screen] "r"((uint16*) GFX.S + Offset),
+ [depth] "r"(GFX.ZBuffer + Offset),
+ [subdepth] "r"(GFX.DepthDelta - 1),
+ [bp] "r"(pCache + 56 - StartLine + 7)
+ // clobbered
+ : "r8", "r9", "r10", "cc"
+ );
+ }
+ }
+ else
+ {
+ if (!(Tile & H_FLIP))
+ {
+ __asm__ volatile(
+ "2: \n"
+ ROW("#8")
- " add %[screen], %[screen], #(640-16) \n"
- " add %[depth], %[depth], #(320-8) \n"
- " subs %[lcount], %[lcount], #1 \n"
- " bne 2b"
- // output
- : [lcount] "+r" (LineCount)
- // input
- : [gfx_z1] "r" (GFX.Z1),
- [gfx_z2] "r" (GFX.Z2),
- [colors] "r" (GFX.ScreenColors),
- //[delta] "r" (GFX.Delta << 1),
- [fixedcolour] "r" (FIXEDCOLOUR),
- [screen] "r" ((uint16 *) GFX.S + Offset),
- [depth] "r" (GFX.ZBuffer + Offset),
- [subdepth] "r" (GFX.DepthDelta - 1),
- [bp] "r" (pCache + StartLine)
- // clobbered
- : "r8", "r9", "r10", "cc"
- );
- } else {
- __asm__ volatile (
- "2: \n"
- ROW1("#8")
+ " add %[screen], %[screen], #(640-16) \n"
+ " add %[depth], %[depth], #(320-8) \n"
+ " subs %[lcount], %[lcount], #1 \n"
+ " bne 2b"
+ // output
+ : [lcount] "+r"(LineCount)
+ // input
+ : [gfx_z1] "r"(GFX.Z1),
+ [gfx_z2] "r"(GFX.Z2),
+ [colors] "r"(GFX.ScreenColors),
+ //[delta] "r" (GFX.Delta << 1),
+ [fixedcolour] "r"(FIXEDCOLOUR),
+ [screen] "r"((uint16*) GFX.S + Offset),
+ [depth] "r"(GFX.ZBuffer + Offset),
+ [subdepth] "r"(GFX.DepthDelta - 1),
+ [bp] "r"(pCache + StartLine)
+ // clobbered
+ : "r8", "r9", "r10", "cc"
+ );
+ }
+ else
+ {
+ __asm__ volatile(
+ "2: \n"
+ ROW1("#8")
- " add %[bp], %[bp], #(8+8) \n"
- " add %[screen], %[screen], #(640-16) \n"
- " add %[depth], %[depth], #(320-8) \n"
- " subs %[lcount], %[lcount], #1 \n"
- " bne 2b"
+ " add %[bp], %[bp], #(8+8) \n"
+ " add %[screen], %[screen], #(640-16) \n"
+ " add %[depth], %[depth], #(320-8) \n"
+ " subs %[lcount], %[lcount], #1 \n"
+ " bne 2b"
- // output
- : [lcount] "+r" (LineCount)
- // input
- : [gfx_z1] "r" (GFX.Z1),
- [gfx_z2] "r" (GFX.Z2),
- [colors] "r" (GFX.ScreenColors),
- //[delta] "r" (GFX.Delta << 1),
- [fixedcolour] "r" (FIXEDCOLOUR),
- [screen] "r" ((uint16 *) GFX.S + Offset),
- [depth] "r" (GFX.ZBuffer + Offset),
- [subdepth] "r" (GFX.DepthDelta - 1),
- [bp] "r" (pCache + StartLine + 7)
- // clobbered
- : "r8", "r9", "r10", "cc"
- );
+ // output
+ : [lcount] "+r"(LineCount)
+ // input
+ : [gfx_z1] "r"(GFX.Z1),
+ [gfx_z2] "r"(GFX.Z2),
+ [colors] "r"(GFX.ScreenColors),
+ //[delta] "r" (GFX.Delta << 1),
+ [fixedcolour] "r"(FIXEDCOLOUR),
+ [screen] "r"((uint16*) GFX.S + Offset),
+ [depth] "r"(GFX.ZBuffer + Offset),
+ [subdepth] "r"(GFX.DepthDelta - 1),
+ [bp] "r"(pCache + StartLine + 7)
+ // clobbered
+ : "r8", "r9", "r10", "cc"
+ );
- }
+ }
}
}
// DrawClippedTile16 -----------------------------------------
DEC_DRAWCLIPPED(ROPNAME)
{
-if (Width == 0) return;
+ if (Width == 0) return;
- TILE_PREAMBLE
+ TILE_PREAMBLE
-Offset = Offset + StartPixel;
-if (Tile & V_FLIP){
- if (!(Tile & H_FLIP)){
- __asm__ volatile (
- "2: \n"
+ Offset = Offset + StartPixel;
+ if (Tile & V_FLIP)
+ {
+ if (!(Tile & H_FLIP))
+ {
+ __asm__ volatile(
+ "2: \n"
- ROW("%[width]")
+ ROW("%[width]")
- // Loop
- "1: \n"
- " sub %[bp], %[bp], #8 \n"
- " add %[screen], %[screen], #640 \n"
- " add %[depth], %[depth], #320 \n"
- // --
- " sub %[bp], %[bp], %[width] \n"
- " sub %[screen], %[screen], %[width], lsl #1 \n"
- " sub %[depth], %[depth], %[width] \n"
- // --
- " subs %[lcount], %[lcount], #1 \n"
- " bne 2b"
- // output
- : [lcount] "+r" (LineCount)
- // input
- : [gfx_z1] "r" (GFX.Z1),
- [gfx_z2] "r" (GFX.Z2),
- [colors] "r" (GFX.ScreenColors),
- //[delta] "r" (GFX.Delta << 1),
- [fixedcolour] "r" (FIXEDCOLOUR),
- [width] "r" (Width),
- [screen] "r" ((uint16 *) GFX.S + Offset),
- [depth] "r" (GFX.ZBuffer + Offset),
- [subdepth] "r" (GFX.DepthDelta - 1),
- [bp] "r" (pCache + 56 - StartLine + StartPixel)
- // clobbered
- : "r8", "r9", "r10", "cc"
- );
- } else {
- __asm__ volatile (
- "2: \n"
- ROW1("%[width]")
- // Loop
- "1: \n"
- " sub %[bp], %[bp], #8 \n"
- " add %[screen], %[screen], #640 \n"
- " add %[depth], %[depth], #320 \n"
- // --
- " add %[bp], %[bp], %[width] \n"
- " sub %[screen], %[screen], %[width], lsl #1 \n"
- " sub %[depth], %[depth], %[width] \n"
- // --
- " subs %[lcount], %[lcount], #1 \n"
- " bne 2b"
- // output
- : [lcount] "+r" (LineCount)
- // input
- : [gfx_z1] "r" (GFX.Z1),
- [gfx_z2] "r" (GFX.Z2),
- [colors] "r" (GFX.ScreenColors),
- //[delta] "r" (GFX.Delta << 1),
- [fixedcolour] "r" (FIXEDCOLOUR),
- [width] "r" (Width),
- [screen] "r" ((uint16 *) GFX.S + Offset),
- [depth] "r" (GFX.ZBuffer + Offset),
- [subdepth] "r" (GFX.DepthDelta - 1),
- [bp] "r" (pCache + 56 - StartLine - StartPixel + 7)
- // clobbered
- : "r8", "r9", "r10", "cc"
- );
- }
-} else {
- if (!(Tile & H_FLIP)){
- __asm__ volatile (
- "2: \n"
- ROW("%[width]")
- // Loop
- "1: \n"
- " add %[bp], %[bp], #8 \n"
- " add %[screen], %[screen], #640 \n"
- " add %[depth], %[depth], #320 \n"
- // --
- " sub %[bp], %[bp], %[width] \n"
- " sub %[screen], %[screen], %[width], lsl #1 \n"
- " sub %[depth], %[depth], %[width] \n"
- // --
- " subs %[lcount], %[lcount], #1 \n"
- " bne 2b"
- // output
- : [lcount] "+r" (LineCount)
- // input
- : [gfx_z1] "r" (GFX.Z1),
- [gfx_z2] "r" (GFX.Z2),
- [colors] "r" (GFX.ScreenColors),
- //[delta] "r" (GFX.Delta << 1),
- [fixedcolour] "r" (FIXEDCOLOUR),
- [width] "r" (Width),
- [screen] "r" ((uint16 *) GFX.S + Offset),
- [depth] "r" (GFX.ZBuffer + Offset),
- [subdepth] "r" (GFX.DepthDelta - 1),
- [bp] "r" (pCache + StartLine + StartPixel)
- // clobbered
- : "r8", "r9", "r10", "cc"
- );
- } else {
- __asm__ volatile (
- "2: \n"
- ROW1("%[width]")
- // Loop
- "1: \n"
- " add %[bp], %[bp], #8 \n"
- " add %[screen], %[screen], #640 \n"
- " add %[depth], %[depth], #320 \n"
- // --
- " add %[bp], %[bp], %[width] \n"
- " sub %[screen], %[screen], %[width], lsl #1 \n"
- " sub %[depth], %[depth], %[width] \n"
- // --
- " subs %[lcount], %[lcount], #1 \n"
- " bne 2b"
- // output
- : [lcount] "+r" (LineCount)
- // input
- : [gfx_z1] "r" (GFX.Z1),
- [gfx_z2] "r" (GFX.Z2),
- [colors] "r" (GFX.ScreenColors),
- //[delta] "r" (GFX.Delta << 1),
- [fixedcolour] "r" (FIXEDCOLOUR),
- [width] "r" (Width),
- [screen] "r" ((uint16 *) GFX.S + Offset),
- [depth] "r" (GFX.ZBuffer + Offset),
- [subdepth] "r" (GFX.DepthDelta - 1),
- [bp] "r" (pCache + StartLine - StartPixel + 7)
- // clobbered
- : "r8", "r9", "r10", "cc"
- );
+ // Loop
+ "1: \n"
+ " sub %[bp], %[bp], #8 \n"
+ " add %[screen], %[screen], #640 \n"
+ " add %[depth], %[depth], #320 \n"
+ // --
+ " sub %[bp], %[bp], %[width] \n"
+ " sub %[screen], %[screen], %[width], lsl #1 \n"
+ " sub %[depth], %[depth], %[width] \n"
+ // --
+ " subs %[lcount], %[lcount], #1 \n"
+ " bne 2b"
+ // output
+ : [lcount] "+r"(LineCount)
+ // input
+ : [gfx_z1] "r"(GFX.Z1),
+ [gfx_z2] "r"(GFX.Z2),
+ [colors] "r"(GFX.ScreenColors),
+ //[delta] "r" (GFX.Delta << 1),
+ [fixedcolour] "r"(FIXEDCOLOUR),
+ [width] "r"(Width),
+ [screen] "r"((uint16*) GFX.S + Offset),
+ [depth] "r"(GFX.ZBuffer + Offset),
+ [subdepth] "r"(GFX.DepthDelta - 1),
+ [bp] "r"(pCache + 56 - StartLine + StartPixel)
+ // clobbered
+ : "r8", "r9", "r10", "cc"
+ );
+ }
+ else
+ {
+ __asm__ volatile(
+ "2: \n"
+ ROW1("%[width]")
+ // Loop
+ "1: \n"
+ " sub %[bp], %[bp], #8 \n"
+ " add %[screen], %[screen], #640 \n"
+ " add %[depth], %[depth], #320 \n"
+ // --
+ " add %[bp], %[bp], %[width] \n"
+ " sub %[screen], %[screen], %[width], lsl #1 \n"
+ " sub %[depth], %[depth], %[width] \n"
+ // --
+ " subs %[lcount], %[lcount], #1 \n"
+ " bne 2b"
+ // output
+ : [lcount] "+r"(LineCount)
+ // input
+ : [gfx_z1] "r"(GFX.Z1),
+ [gfx_z2] "r"(GFX.Z2),
+ [colors] "r"(GFX.ScreenColors),
+ //[delta] "r" (GFX.Delta << 1),
+ [fixedcolour] "r"(FIXEDCOLOUR),
+ [width] "r"(Width),
+ [screen] "r"((uint16*) GFX.S + Offset),
+ [depth] "r"(GFX.ZBuffer + Offset),
+ [subdepth] "r"(GFX.DepthDelta - 1),
+ [bp] "r"(pCache + 56 - StartLine - StartPixel + 7)
+ // clobbered
+ : "r8", "r9", "r10", "cc"
+ );
+ }
+ }
+ else
+ {
+ if (!(Tile & H_FLIP))
+ {
+ __asm__ volatile(
+ "2: \n"
+ ROW("%[width]")
+ // Loop
+ "1: \n"
+ " add %[bp], %[bp], #8 \n"
+ " add %[screen], %[screen], #640 \n"
+ " add %[depth], %[depth], #320 \n"
+ // --
+ " sub %[bp], %[bp], %[width] \n"
+ " sub %[screen], %[screen], %[width], lsl #1 \n"
+ " sub %[depth], %[depth], %[width] \n"
+ // --
+ " subs %[lcount], %[lcount], #1 \n"
+ " bne 2b"
+ // output
+ : [lcount] "+r"(LineCount)
+ // input
+ : [gfx_z1] "r"(GFX.Z1),
+ [gfx_z2] "r"(GFX.Z2),
+ [colors] "r"(GFX.ScreenColors),
+ //[delta] "r" (GFX.Delta << 1),
+ [fixedcolour] "r"(FIXEDCOLOUR),
+ [width] "r"(Width),
+ [screen] "r"((uint16*) GFX.S + Offset),
+ [depth] "r"(GFX.ZBuffer + Offset),
+ [subdepth] "r"(GFX.DepthDelta - 1),
+ [bp] "r"(pCache + StartLine + StartPixel)
+ // clobbered
+ : "r8", "r9", "r10", "cc"
+ );
+ }
+ else
+ {
+ __asm__ volatile(
+ "2: \n"
+ ROW1("%[width]")
+ // Loop
+ "1: \n"
+ " add %[bp], %[bp], #8 \n"
+ " add %[screen], %[screen], #640 \n"
+ " add %[depth], %[depth], #320 \n"
+ // --
+ " add %[bp], %[bp], %[width] \n"
+ " sub %[screen], %[screen], %[width], lsl #1 \n"
+ " sub %[depth], %[depth], %[width] \n"
+ // --
+ " subs %[lcount], %[lcount], #1 \n"
+ " bne 2b"
+ // output
+ : [lcount] "+r"(LineCount)
+ // input
+ : [gfx_z1] "r"(GFX.Z1),
+ [gfx_z2] "r"(GFX.Z2),
+ [colors] "r"(GFX.ScreenColors),
+ //[delta] "r" (GFX.Delta << 1),
+ [fixedcolour] "r"(FIXEDCOLOUR),
+ [width] "r"(Width),
+ [screen] "r"((uint16*) GFX.S + Offset),
+ [depth] "r"(GFX.ZBuffer + Offset),
+ [subdepth] "r"(GFX.DepthDelta - 1),
+ [bp] "r"(pCache + StartLine - StartPixel + 7)
+ // clobbered
+ : "r8", "r9", "r10", "cc"
+ );
- }
+ }
}
}