giz port, restructuring
[picodrive.git] / Pico / Draw.s
index e31ba0b..d26d176 100644 (file)
@@ -6,6 +6,7 @@
 @ (c) Copyright 2007, Grazvydas "notaz" Ignotas\r
 @ All Rights Reserved\r
 \r
+.include "port_config.s"\r
 \r
 .extern Pico\r
 .extern PicoOpt\r
@@ -317,11 +318,18 @@ DrawLayer:
     add     r8, r8, r9, lsr #8   @ tilex+=cellskip\r
     add     r7, r7, r9, lsr #5   @ dx+=cellskip<<3;\r
     sub     r10,r10,r9, lsl #16  @ cells-=cellskip\r
-    mvn     r9, #0               @ r9=prevcode=-1\r
 \r
     @ cache some stuff to avoid mem access\r
+.if OVERRIDE_HIGHCOL\r
+    ldr     r11,=HighCol\r
+    mov     r0, #0xf\r
+    ldr     r11,[r11]\r
+.else\r
     ldr     r11,=HighCol\r
     mov     r0, #0xf\r
+.endif\r
+\r
+    mvn     r9, #0               @ r9=prevcode=-1\r
     add     r1, r11, r7         @ r1=pdest\r
 \r
 \r
@@ -463,13 +471,19 @@ DrawLayer:
     add     r8, r8, r9, lsr #8   @ tilex+=cellskip\r
     add     r7, r7, r9, lsr #5   @ dx+=cellskip<<3;\r
     add     r10,r10,r9, lsl #16  @ cell+=cellskip\r
-    mvn     r9, #0               @ r9=prevcode=-1\r
 \r
     @ cache some stuff to avoid mem access\r
+.if OVERRIDE_HIGHCOL\r
     ldr     r11,=HighCol\r
     mov     r0, #0xf\r
-    add     r1, r11, r7         @ r1=pdest\r
+    ldr     r11,[r11]\r
+.else\r
+    ldr     r11,=HighCol\r
+    mov     r0, #0xf\r
+.endif\r
 \r
+    mvn     r9, #0               @ r9=prevcode=-1\r
+    add     r1, r11, r7          @ r1=pdest\r
 \r
     @ r4 & r7 are scratch in this loop\r
 .dsloop_vs_subr1:\r
@@ -639,10 +653,18 @@ DrawLayer:
 BackFill:\r
     stmfd   sp!, {r4-r9,lr}\r
 \r
+.if OVERRIDE_HIGHCOL\r
+    ldr     lr, =HighCol\r
+    mov     r0, r0, lsl #26\r
+    ldr     lr, [lr]\r
+    mov     r0, r0, lsr #26\r
+    add     lr, lr, #8\r
+.else\r
     ldr     lr, =(HighCol+8)\r
-\r
     mov     r0, r0, lsl #26\r
     mov     r0, r0, lsr #26\r
+.endif\r
+\r
     orr     r0, r0, r1, lsl #6\r
     orr     r0, r0, r0, lsl #8\r
     orr     r0, r0, r0, lsl #16\r
@@ -680,9 +702,15 @@ DrawTilesFromCache:
     stmfd   sp!, {r4-r8,r11,lr}\r
 \r
     @ cache some stuff to avoid mem access\r
+.if OVERRIDE_HIGHCOL\r
     ldr     r11,=HighCol\r
-    ldr     lr, =(Pico+0x10000) @ lr=Pico.vram\r
     mov     r12,#0xf\r
+    ldr     r11,[r11]\r
+.else\r
+    ldr     r11,=HighCol\r
+    mov     r12,#0xf\r
+.endif\r
+    ldr     lr, =(Pico+0x10000) @ lr=Pico.vram\r
 \r
     mvn     r5, #0         @ r5=prevcode=-1\r
     ands    r8, r1, #1\r
@@ -874,11 +902,17 @@ DrawSpritesFromCache:
     stmfd   sp!, {r4-r11,lr}\r
 \r
     @ cache some stuff to avoid mem access\r
+.if OVERRIDE_HIGHCOL\r
     ldr     r11,=HighCol\r
+    mov     r12,#0xf\r
+    ldr     r11,[r11]\r
+.else\r
+    ldr     r11,=HighCol\r
+    mov     r12,#0xf\r
+.endif\r
     ldr     lr, =(Pico+0x10000) @ lr=Pico.vram\r
     mov     r6, r1, lsl #31\r
     orr     r6, r6, #1<<30\r
-    mov     r12,#0xf\r
 \r
     mov     r10, r0\r
 \r
@@ -1042,9 +1076,15 @@ DrawSprite:
     bne     .dspr_cache       @ if(code&0x8000) // high priority - cache it\r
 \r
     @ cache some stuff to avoid mem access\r
+.if OVERRIDE_HIGHCOL\r
+    ldr     r11,=HighCol\r
+    mov     r12,#0xf\r
+    ldr     r11,[r11]\r
+.else\r
     ldr     r11,=HighCol\r
-    ldr     lr, =(Pico+0x10000) @ lr=Pico.vram\r
     mov     r12,#0xf\r
+.endif\r
+    ldr     lr, =(Pico+0x10000) @ lr=Pico.vram\r
 \r
     mov     r5, r5, lsl #4     @ delta<<=4; // Delta of address\r
     and     r4, r9, #0x6000\r
@@ -1202,12 +1242,19 @@ DrawWindow:
     orr     r6, r6, r3, lsl #8    @ shadow mode\r
 \r
     sub     r8, r1, r0\r
-    mov     r8, r8, lsl #1        @ cells\r
-\r
-    mvn     r9, #0                @ r9=prevcode=-1\r
 \r
     @ cache some stuff to avoid mem access\r
+.if OVERRIDE_HIGHCOL\r
+    ldr     r11,=HighCol\r
+    mov     r8, r8, lsl #1        @ cells\r
+    ldr     r11,[r11]\r
+    mvn     r9, #0                @ r9=prevcode=-1\r
+    add     r11,r11,#8\r
+.else\r
     ldr     r11,=(HighCol+8)\r
+    mov     r8, r8, lsl #1        @ cells\r
+    mvn     r9, #0                @ r9=prevcode=-1\r
+.endif\r
     add     r1, r11, r0, lsl #4 @ r1=pdest\r
     mov     r0, #0xf\r
     b       .dwloop_enter\r
@@ -1408,9 +1455,17 @@ FinalizeLineBGR444:
 \r
 \r
 .fl_noshBGR444:\r
+.if OVERRIDE_HIGHCOL\r
+    ldr     r1, =HighCol\r
+    mov     lr, #0xff\r
+    ldr     r1, [r1]\r
+    mov     lr, lr, lsl #1\r
+    add     r1, r1, #8\r
+.else\r
     ldr     r1, =(HighCol+8)\r
     mov     lr, #0xff\r
     mov     lr, lr, lsl #1\r
+.endif\r
 \r
 .fl_loopBGR444:\r
 \r
@@ -1480,6 +1535,8 @@ FinalizeLineBGR444:
     orr     \reg, \reg, r3           @ add blue back\r
 .endm\r
 \r
+.global vidConvCpyRGB565\r
+\r
 vidConvCpyRGB565: @ void *to, void *from, int pixels\r
     stmfd   sp!, {r4-r9,lr}\r
 \r
@@ -1562,9 +1619,17 @@ FinalizeLineRGB555:
     sub     r3, r3, #0x40*2\r
 \r
 .fl_noshRGB555:\r
+.if OVERRIDE_HIGHCOL\r
+    ldr     r1, =HighCol\r
+    ldr     r0, =DrawLineDest\r
+    ldr     r1, [r1]\r
+    ldr     r0, [r0]\r
+    add     r1, r1, #8\r
+.else\r
     ldr     r0, =DrawLineDest\r
     ldr     r1, =(HighCol+8)\r
     ldr     r0, [r0]\r
+.endif\r
 \r
     ldrb    r12, [r8, #12]\r
     mov     lr, #0xff\r