| ... | ... |
@@ -215,7 +215,8 @@ screen_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 215 | 215 |
if(b0 == 0x0c) {
|
| 216 | 216 |
Uint16 x = (m[ptr] << 8) + m[ptr + 1]; |
| 217 | 217 |
Uint16 y = (m[ptr + 2] << 8) + m[ptr + 3]; |
| 218 |
- putpixel(&ppu, b1 >> 4 & 0xf ? ppu.fg : ppu.bg, x, y, b1 & 0xf); |
|
| 218 |
+ Uint8 *layer = b1 >> 4 & 0xf ? ppu.fg : ppu.bg; |
|
| 219 |
+ putpixel(&ppu, layer, x, y, b1 & 0xf); |
|
| 219 | 220 |
reqdraw = 1; |
| 220 | 221 |
} |
| 221 | 222 |
return b1; |
| ... | ... |
@@ -227,19 +228,11 @@ sprite_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 227 | 228 |
Uint8 *m = u->ram.dat; |
| 228 | 229 |
ptr += 8; |
| 229 | 230 |
if(b0 == 0x0e) {
|
| 230 |
- Uint16 v, h; |
|
| 231 | 231 |
Uint16 x = (m[ptr] << 8) + m[ptr + 1]; |
| 232 | 232 |
Uint16 y = (m[ptr + 2] << 8) + m[ptr + 3]; |
| 233 |
- Uint8 blend = b1 & 0xf; |
|
| 234 |
- Uint8 *layer = ((b1 >> 4) & 0xf) % 2 ? ppu.fg : ppu.bg; |
|
| 233 |
+ Uint8 *layer = (b1 >> 4) & 0xf ? ppu.fg : ppu.bg; |
|
| 235 | 234 |
Uint8 *sprite = &m[(m[ptr + 4] << 8) + m[ptr + 5]]; |
| 236 |
- for(v = 0; v < 8; v++) |
|
| 237 |
- for(h = 0; h < 8; h++) {
|
|
| 238 |
- Uint8 ch1 = ((sprite[v] >> (7 - h)) & 0x1); |
|
| 239 |
- if(ch1 == 0 && (blend == 0x05 || blend == 0x0a || blend == 0x0f)) |
|
| 240 |
- continue; |
|
| 241 |
- putpixel(&ppu, layer, x + h, y + v, ch1 ? blend % 4 : blend / 4); |
|
| 242 |
- } |
|
| 235 |
+ putsprite(&ppu, layer, x, y, sprite, b1 & 0xf); |
|
| 243 | 236 |
reqdraw = 1; |
| 244 | 237 |
} |
| 245 | 238 |
return b1; |
| ... | ... |
@@ -325,7 +318,7 @@ system_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 325 | 318 |
{
|
| 326 | 319 |
Uint8 *m = u->ram.dat; |
| 327 | 320 |
m[PAGE_DEVICE + b0] = b1; |
| 328 |
- loadtheme(&ppu, &m[PAGE_DEVICE + 0x0008]); |
|
| 321 |
+ getcolors(&ppu, &m[PAGE_DEVICE + 0x0008]); |
|
| 329 | 322 |
reqdraw = 1; |
| 330 | 323 |
(void)ptr; |
| 331 | 324 |
return b1; |
| ... | ... |
@@ -110,7 +110,20 @@ putpixel(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 color) |
| 110 | 110 |
} |
| 111 | 111 |
|
| 112 | 112 |
void |
| 113 |
-loadtheme(Ppu *p, Uint8 *addr) |
|
| 113 |
+putsprite(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color) |
|
| 114 |
+{
|
|
| 115 |
+ Uint16 v, h; |
|
| 116 |
+ for(v = 0; v < 8; v++) |
|
| 117 |
+ for(h = 0; h < 8; h++) {
|
|
| 118 |
+ Uint8 ch1 = ((sprite[v] >> (7 - h)) & 0x1); |
|
| 119 |
+ if(ch1 == 0 && (color == 0x05 || color == 0x0a || color == 0x0f)) |
|
| 120 |
+ continue; |
|
| 121 |
+ putpixel(p, layer, x + h, y + v, ch1 ? color % 4 : color / 4); |
|
| 122 |
+ } |
|
| 123 |
+} |
|
| 124 |
+ |
|
| 125 |
+void |
|
| 126 |
+getcolors(Ppu *p, Uint8 *addr) |
|
| 114 | 127 |
{
|
| 115 | 128 |
int i; |
| 116 | 129 |
for(i = 0; i < 4; ++i) {
|
| ... | ... |
@@ -13,9 +13,7 @@ WITH REGARD TO THIS SOFTWARE. |
| 13 | 13 |
*/ |
| 14 | 14 |
|
| 15 | 15 |
typedef unsigned char Uint8; |
| 16 |
-typedef signed char Sint8; |
|
| 17 | 16 |
typedef unsigned short Uint16; |
| 18 |
-typedef signed short Sint16; |
|
| 19 | 17 |
typedef unsigned int Uint32; |
| 20 | 18 |
|
| 21 | 19 |
typedef struct Ppu {
|
| ... | ... |
@@ -27,5 +25,6 @@ typedef struct Ppu {
|
| 27 | 25 |
int initppu(Ppu *p, Uint8 hor, Uint8 ver, Uint8 pad); |
| 28 | 26 |
void drawppu(Ppu *p); |
| 29 | 27 |
void drawdebugger(Ppu *p, Uint8 *stack, Uint8 ptr); |
| 30 |
-void loadtheme(Ppu *p, Uint8 *addr); |
|
| 31 |
-void putpixel(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 color); |
|
| 32 | 28 |
\ No newline at end of file |
| 29 |
+void getcolors(Ppu *p, Uint8 *addr); |
|
| 30 |
+void putpixel(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 color); |
|
| 31 |
+void putsprite(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color); |
|
| 33 | 32 |
\ No newline at end of file |