Browse code

Fixed color swatch in nasu

neauoire authored on 25/04/2021 04:18:15
Showing 4 changed files
... ...
@@ -8,6 +8,8 @@
8 8
 	1 2 3  - select brush
9 9
 
10 10
 	TODO:
11
+		Copy in 2 bits mode, copies 2 tiles
12
+		Modify up to 4 pages
11 13
 		Save/load/rename
12 14
 		Select paint color for 2-bit mode
13 15
 )
... ...
@@ -49,11 +51,11 @@
49 51
 
50 52
 |0000
51 53
 
52
-@settings [ &blending $1 &depth $1 &brush $1 &page $2 ]
54
+@settings [ &blending $1 &depth $1 &brush $1 &page $2 &tile $2 ]
53 55
 
54 56
 @frame [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &width $2 &height $2 ]
55 57
 @bankview [ &x $2 &y $2 &mode $1 &selection $1 ]
56
-@tileview [ &x $2 &y $2 &addr $2 ]
58
+@tileview [ &x $2 &y $2 ]
57 59
 @colorview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
58 60
 @blendview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
59 61
 @dataview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
... ...
@@ -90,7 +92,7 @@
90 92
 
91 93
 	.frame/x2 PEK2 #0098 SUB2 .tileview/x POK2
92 94
 	.frame/y1 PEK2 .tileview/y POK2
93
-	BANK #0448 ADD2 .tileview/addr POK2
95
+	BANK #0448 ADD2 .settings/tile POK2
94 96
 
95 97
 	.frame/x1 PEK2 #0010 ADD2 .frame/y2 PEK2 #0020 SUB2 #0020 #0020 SIZE-TO-RECT ;blendview SET-RECT
96 98
 	.frame/x1 PEK2 #0038 ADD2 .frame/y2 PEK2 #0020 SUB2 #0020 #0020 SIZE-TO-RECT ;colorview SET-RECT
... ...
@@ -204,7 +206,7 @@ BRK
204 206
 	.bankview/mode PEK #01 NEQ ,&not-copy-mode JNZ
205 207
 		#00 .i POK
206 208
 		&copy-loop
207
-			( load ) .tileview/addr PEK2 .i PEK ADD GET
209
+			( load ) .settings/tile PEK2 .i PEK ADD GET
208 210
 			( get touch addr )
209 211
 			.Mouse/x DEI2 .bankview/x PEK2 SUB2 STEP8
210 212
 			.Mouse/y DEI2 .bankview/y PEK2 SUB2 STEP8 #0010 MUL2 ADD2
... ...
@@ -243,7 +245,7 @@ BRK
243 245
 	.Mouse/x DEI2 .tileview/x PEK2 SUB2 STEP8 #0040 DIV2
244 246
 	.Mouse/y DEI2 .tileview/y PEK2 SUB2 STEP8 #0040 DIV2 2* ADD2
245 247
 	8*
246
-	.tileview/addr PEK2 ADD2 .addr POK2 ( addr offset )
248
+	.settings/tile PEK2 ADD2 .addr POK2 ( addr offset )
247 249
 	.Mouse/x DEI2 .tileview/x PEK2 SUB2 .Mouse/x DEI2 .tileview/x PEK2 SUB2 #0040 DIV2 #0040 MUL2 SUB2 .pos/x POK2
248 250
 	.Mouse/y DEI2 .tileview/y PEK2 SUB2 .Mouse/y DEI2 .tileview/y PEK2 SUB2 #0040 DIV2 #0040 MUL2 SUB2 .pos/y POK2
249 251
 	.Mouse/state DEI #10 NEQ ,&no-erase-mode JNZ
... ...
@@ -288,17 +290,17 @@ BRK
288 290
 BRK
289 291
 
290 292
 @on-touch-colorview ( -> )
291
-	
293
+
292 294
 	( channel ) .Mouse/y DEI2 .colorview/y1 PEK2 SUB2 8/ SWP POP STH
293 295
 	( rgb ) .Mouse/x DEI2 .colorview/x1 PEK2 SUB2 8/ SWP POP
294 296
 	DUP #00 NEQ ,&no-brush JNZ
295 297
 		DUPr STHr .settings/brush POK &no-brush
296 298
 	DUP #01 NEQ ,&no-red JNZ
297
-		DUPr STHr ;System/r ;set-color JSR2 &no-red
299
+		DUPr STHr .System/r ;set-color JSR2 &no-red
298 300
 	DUP #02 NEQ ,&no-green JNZ
299
-		DUPr STHr ;System/g ;set-color JSR2 &no-green
301
+		DUPr STHr .System/g ;set-color JSR2 &no-green
300 302
 	DUP #03 NEQ ,&no-blue JNZ
301
-		DUPr STHr ;System/b ;set-color JSR2 &no-blue
303
+		DUPr STHr .System/b ;set-color JSR2 &no-blue
302 304
 	POP POPr
303 305
 	( release ) #00 .Mouse/state DEO
304 306
 	;redraw JSR2
... ...
@@ -307,29 +309,29 @@ BRK
307 309
 
308 310
 @set-color ( color rgb -- )
309 311
 	
310
-	STH2
312
+	STH
311 313
 	DUP #00 NEQ ,&no-red0 JNZ
312
-		DUP2r STH2r GET DUP #04 SFT #01 ADD
314
+		DUPr STHr DEI DUP #04 SFT #01 ADD
313 315
 		( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD
314
-		( resume ) #40 SFT SWP #0f AND ADD DUP2r STH2r PUT
316
+		( resume ) #40 SFT SWP #0f AND ADD DUPr STHr DEO
315 317
 		&no-red0
316 318
 	DUP #01 NEQ ,&no-red1 JNZ
317
-		DUP2r STH2r GET DUP #0f AND #01 ADD
319
+		DUPr STHr DEI DUP #0f AND #01 ADD
318 320
 		( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD
319
-		( resume ) #0f AND SWP #f0 AND ADD DUP2r STH2r PUT
321
+		( resume ) #0f AND SWP #f0 AND ADD DUPr STHr DEO
320 322
 		&no-red1
321 323
 	DUP #02 NEQ ,&no-red2 JNZ
322
-		DUP2r STH2r #0001 ADD2 GET DUP #04 SFT #01 ADD
324
+		DUPr STHr #01 ADD DEI DUP #04 SFT #01 ADD
323 325
 		( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD
324
-		( resume ) #40 SFT SWP #0f AND ADD DUP2r STH2r #0001 ADD2 PUT
326
+		( resume ) #40 SFT SWP #0f AND ADD DUPr STHr #01 ADD DEO
325 327
 		&no-red2
326 328
 	DUP #03 NEQ ,&no-red3 JNZ
327
-		DUP2r STH2r #0001 ADD2 GET DUP #0f AND #01 ADD
329
+		DUPr STHr #01 ADD DEI DUP #0f AND #01 ADD
328 330
 		( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD
329
-		( resume ) #0f AND SWP #f0 AND ADD DUP2r STH2r #0001 ADD2 PUT
331
+		( resume ) #0f AND SWP #f0 AND ADD DUPr STHr #01 ADD DEO
330 332
 		&no-red3
331 333
 	POP
332
-	POP2r
334
+	POPr
333 335
 
334 336
 RTN
335 337
 
... ...
@@ -339,7 +341,7 @@ RTN
339 341
 	( y ) #10 MOD #10 MUL #00 SWP 8*
340 342
 	( x ) ROT #10 MOD #00 SWP 8* ADD2
341 343
 	( 2-bit mode ) #00 .settings/depth PEK #01 ADD MUL2
342
-	( offset ) .settings/page PEK2 ADD2 .tileview/addr POK2
344
+	( offset ) .settings/page PEK2 ADD2 .settings/tile POK2
343 345
 	;redraw JSR2
344 346
 
345 347
 RTN
... ...
@@ -354,29 +356,29 @@ RTN
354 356
 
355 357
 @op_shiftup
356 358
 	
357
-	.tileview/addr PEK2 GET
358
-	.tileview/addr PEK2 #0001 ADD2 GET .tileview/addr PEK2 PUT
359
-	.tileview/addr PEK2 #0002 ADD2 GET .tileview/addr PEK2 #0001 ADD2 PUT
360
-	.tileview/addr PEK2 #0003 ADD2 GET .tileview/addr PEK2 #0002 ADD2 PUT
361
-	.tileview/addr PEK2 #0004 ADD2 GET .tileview/addr PEK2 #0003 ADD2 PUT
362
-	.tileview/addr PEK2 #0005 ADD2 GET .tileview/addr PEK2 #0004 ADD2 PUT
363
-	.tileview/addr PEK2 #0006 ADD2 GET .tileview/addr PEK2 #0005 ADD2 PUT
364
-	.tileview/addr PEK2 #0007 ADD2 GET .tileview/addr PEK2 #0006 ADD2 PUT
365
-	.tileview/addr PEK2 #0007 ADD2 PUT
359
+	.settings/tile PEK2 GET
360
+	.settings/tile PEK2 #0001 ADD2 GET .settings/tile PEK2 PUT
361
+	.settings/tile PEK2 #0002 ADD2 GET .settings/tile PEK2 #0001 ADD2 PUT
362
+	.settings/tile PEK2 #0003 ADD2 GET .settings/tile PEK2 #0002 ADD2 PUT
363
+	.settings/tile PEK2 #0004 ADD2 GET .settings/tile PEK2 #0003 ADD2 PUT
364
+	.settings/tile PEK2 #0005 ADD2 GET .settings/tile PEK2 #0004 ADD2 PUT
365
+	.settings/tile PEK2 #0006 ADD2 GET .settings/tile PEK2 #0005 ADD2 PUT
366
+	.settings/tile PEK2 #0007 ADD2 GET .settings/tile PEK2 #0006 ADD2 PUT
367
+	.settings/tile PEK2 #0007 ADD2 PUT
366 368
 
367 369
 RTN
368 370
 
369 371
 @op_shiftdown
370 372
 	
371
-	.tileview/addr PEK2 #0007 ADD2 GET
372
-	.tileview/addr PEK2 #0006 ADD2 GET .tileview/addr PEK2 #0007 ADD2 PUT
373
-	.tileview/addr PEK2 #0005 ADD2 GET .tileview/addr PEK2 #0006 ADD2 PUT
374
-	.tileview/addr PEK2 #0004 ADD2 GET .tileview/addr PEK2 #0005 ADD2 PUT
375
-	.tileview/addr PEK2 #0003 ADD2 GET .tileview/addr PEK2 #0004 ADD2 PUT
376
-	.tileview/addr PEK2 #0002 ADD2 GET .tileview/addr PEK2 #0003 ADD2 PUT
377
-	.tileview/addr PEK2 #0001 ADD2 GET .tileview/addr PEK2 #0002 ADD2 PUT
378
-	.tileview/addr PEK2 GET .tileview/addr PEK2 #0001 ADD2 PUT
379
-	.tileview/addr PEK2 PUT
373
+	.settings/tile PEK2 #0007 ADD2 GET
374
+	.settings/tile PEK2 #0006 ADD2 GET .settings/tile PEK2 #0007 ADD2 PUT
375
+	.settings/tile PEK2 #0005 ADD2 GET .settings/tile PEK2 #0006 ADD2 PUT
376
+	.settings/tile PEK2 #0004 ADD2 GET .settings/tile PEK2 #0005 ADD2 PUT
377
+	.settings/tile PEK2 #0003 ADD2 GET .settings/tile PEK2 #0004 ADD2 PUT
378
+	.settings/tile PEK2 #0002 ADD2 GET .settings/tile PEK2 #0003 ADD2 PUT
379
+	.settings/tile PEK2 #0001 ADD2 GET .settings/tile PEK2 #0002 ADD2 PUT
380
+	.settings/tile PEK2 GET .settings/tile PEK2 #0001 ADD2 PUT
381
+	.settings/tile PEK2 PUT
380 382
 
381 383
 RTN
382 384
 
... ...
@@ -443,7 +445,7 @@ RTN
443 445
 		.bankview/x PEK2 DUP2 #0080 ADD2
444 446
 		&hor
445 447
 			( save ) OVR2 .Screen/x DEO2
446
-			( get selected ) .Screen/addr DEI2 .tileview/addr PEK2 EQU2
448
+			( get selected ) .Screen/addr DEI2 .settings/tile PEK2 EQU2
447 449
 			( get blending ) .settings/blending PEK
448 450
 			( get depth ) .settings/depth PEK #20 MUL
449 451
 			( draw ) #20 ADD ADD ADD .Screen/color DEO
... ...
@@ -463,7 +465,7 @@ RTN
463 465
 
464 466
 	.tileview/x PEK2 #0028 ADD2 .Screen/x DEO2
465 467
 	.tileview/y PEK2 #0010 SUB2 .Screen/y DEO2
466
-	.tileview/addr PEK2 .Screen/addr DEO2
468
+	.settings/tile PEK2 .Screen/addr DEO2
467 469
 
468 470
 	( get blending ) .settings/blending PEK
469 471
 	( get depth ) .settings/depth PEK #20 MUL
... ...
@@ -473,28 +475,28 @@ RTN
473 475
 
474 476
 	.tileview/x PEK2 .Screen/x DEO2
475 477
 	.tileview/y PEK2 #0010 SUB2 .Screen/y DEO2
476
-	.tileview/addr PEK2 ;draw-short JSR2
478
+	.settings/tile PEK2 ;draw-short JSR2
477 479
 
478 480
 	( body )
479 481
 
480 482
 	.tileview/x PEK2 .Screen/x DEO2
481 483
 	.tileview/y PEK2 .Screen/y DEO2
482
-	.tileview/addr PEK2 .tileview/addr POK2
484
+	.settings/tile PEK2 .settings/tile POK2
483 485
 	;draw-tileview-icn JSR2
484 486
 
485 487
 	.tileview/x PEK2 #0040 ADD2 .Screen/x DEO2
486 488
 	.tileview/y PEK2 .Screen/y DEO2
487
-	.tileview/addr PEK2 8+ .tileview/addr POK2
489
+	.settings/tile PEK2 8+ .settings/tile POK2
488 490
 	;draw-tileview-icn JSR2
489 491
 
490 492
 	.tileview/x PEK2 .Screen/x DEO2
491 493
 	.tileview/y PEK2 #0040 ADD2 .Screen/y DEO2
492
-	.tileview/addr PEK2 8+ .tileview/addr POK2
494
+	.settings/tile PEK2 8+ .settings/tile POK2
493 495
 	;draw-tileview-icn JSR2
494 496
 
495 497
 	.tileview/x PEK2 #0040 ADD2 .Screen/x DEO2
496 498
 	.tileview/y PEK2 #0040 ADD2 .Screen/y DEO2
497
-	.tileview/addr PEK2 8+ .tileview/addr POK2
499
+	.settings/tile PEK2 8+ .settings/tile POK2
498 500
 	;draw-tileview-icn JSR2
499 501
 
500 502
 	( line hor )
... ...
@@ -513,7 +515,7 @@ RTN
513 515
 		( incr ) .Screen/y DEI2 #0002 ADD2 .Screen/y DEO2
514 516
 	.Screen/y DEI2 .tileview/y PEK2 #0081 ADD2 LTH2 ,&line-ver JNZ
515 517
 
516
-	( rewind ) .tileview/addr PEK2 #0018 SUB2 .tileview/addr POK2
518
+	( rewind ) .settings/tile PEK2 #0018 SUB2 .settings/tile POK2
517 519
 
518 520
 RTN
519 521
 
... ...
@@ -525,7 +527,7 @@ RTN
525 527
 		&hor
526 528
 			( get bit )
527 529
 			;blank_icn #00
528
-			.tileview/addr PEK2 #00 .pt/y PEK ADD2 GET #07 .pt/x PEK SUB SFT #01 AND ( get bit )
530
+			.settings/tile PEK2 #00 .pt/y PEK ADD2 GET #07 .pt/x PEK SUB SFT #01 AND ( get bit )
529 531
 			8* ADD2 .Screen/addr DEO2 ( add *8 )
530 532
 			( draw ) #21 .Screen/color DEO
531 533
 			( incr ) .Screen/x DEI2 8+ .Screen/x DEO2
... ...
@@ -542,7 +544,7 @@ RTN
542 544
 	
543 545
 	.blendview/x1 PEK2 #0002 SUB2 .blendview/y1 PEK2 #0002 SUB2 .blendview/x2 PEK2 #0001 ADD2 .blendview/y2 PEK2 #0001 ADD2 #03 ;line-rect JSR2
544 546
 
545
-	.tileview/addr PEK2 .Screen/addr DEO2
547
+	.settings/tile PEK2 .Screen/addr DEO2
546 548
 	#00 #10
547 549
 	&loop
548 550
 		OVR #04 MOD #00 SWP #0008 MUL2 .blendview/x1 PEK2 ADD2 .Screen/x DEO2
... ...
@@ -571,7 +573,7 @@ RTN
571 573
 	#00 .i POK
572 574
 	&bytes
573 575
 		.tileview/x PEK2 #0088 ADD2 .Screen/x DEO2
574
-		.tileview/addr PEK2 #00 .i PEK ADD2 GET #22 ;draw-byte JSR2
576
+		.settings/tile PEK2 #00 .i PEK ADD2 GET #22 ;draw-byte JSR2
575 577
 		( incr ) .i PEK #01 ADD .i POK
576 578
 		( incr ) .Screen/y DEI2 8+ .Screen/y DEO2
577 579
 	.i PEK #08 LTH ;&bytes JNZ2
... ...
@@ -587,7 +589,7 @@ RTN
587 589
 
588 590
 	( draw tiles 2x2 )
589 591
 	.tileview/y PEK2 .Screen/y DEO2
590
-	#00 .pt/x POK #00 .pt/y POK .tileview/addr PEK2 .Screen/addr DEO2
592
+	#00 .pt/x POK #00 .pt/y POK .settings/tile PEK2 .Screen/addr DEO2
591 593
 
592 594
 	&tiles-ver
593 595
 		#00 .pt/x POK
... ...
@@ -236,28 +236,28 @@ parsetoken(char *w)
236 236
 			return error("Address is not in zero page", w);
237 237
 		pushbyte(l->addr, 1);
238 238
 		return ++l->refs;
239
-	} else if(w[0] == ',' && (l = findlabel(w + 1))) {
239
+	} else if(w[0] == ',' && (l = findlabel(w + 1))) { /* relative */
240 240
 		int off = l->addr - p.ptr - 3;
241 241
 		if(off < -126 || off > 126)
242 242
 			return error("Address is too far", w);
243 243
 		pushbyte((Sint8)off, 1);
244 244
 		return ++l->refs;
245
-	} else if(w[0] == ':' && (l = findlabel(w + 1))) { /* absolute */
245
+	} else if(w[0] == ':' && (l = findlabel(w + 1))) { /* raw */
246 246
 		pushshort(l->addr, 0);
247 247
 		return ++l->refs;
248 248
 	} else if(w[0] == ';' && (l = findlabel(w + 1))) { /* absolute */
249 249
 		pushshort(l->addr, 1);
250 250
 		return ++l->refs;
251
-	} else if(findopcode(w) || scmp(w, "BRK", 4)) {
251
+	} else if(findopcode(w) || scmp(w, "BRK", 4)) { /* opcode */
252 252
 		pushbyte(findopcode(w), 0);
253 253
 		return 1;
254
-	} else if(w[0] == '"') {
254
+	} else if(w[0] == '"') { /* string */
255 255
 		pushword(w + 1);
256 256
 		return 1;
257
-	} else if(w[0] == '\'') {
257
+	} else if(w[0] == '\'') { /* char */
258 258
 		pushbyte((Uint8)w[1], 0);
259 259
 		return 1;
260
-	} else if(w[0] == '#') {
260
+	} else if(w[0] == '#') { /* immediate */
261 261
 		if(slen(w + 1) == 1)
262 262
 			pushbyte((Uint8)w[1], 1);
263 263
 		if(sihx(w + 1) && slen(w + 1) == 2)
... ...
@@ -267,11 +267,13 @@ parsetoken(char *w)
267 267
 		else
268 268
 			return 0;
269 269
 		return 1;
270
-	} else if(sihx(w)) {
270
+	} else if(sihx(w)) { /* raw */
271 271
 		if(slen(w) == 2)
272 272
 			pushbyte(shex(w), 0);
273 273
 		else if(slen(w) == 4)
274 274
 			pushshort(shex(w), 0);
275
+		else
276
+			return error("Hex value length is invalid", w);
275 277
 		return 1;
276 278
 	} else if((m = findmacro(w))) {
277 279
 		int i;
... ...
@@ -23,7 +23,7 @@ static SDL_Renderer *gRenderer;
23 23
 static SDL_Texture *gTexture;
24 24
 static Ppu ppu;
25 25
 static Apu apu;
26
-static Device *devsystem, *devscreen, *devmouse, *devctrl, *devapu, *devfile;
26
+static Device *devscreen, *devmouse, *devctrl, *devapu;
27 27
 
28 28
 Uint8 zoom = 0, debug = 0, reqdraw = 0;
29 29
 
... ...
@@ -350,14 +350,14 @@ main(int argc, char **argv)
350 350
 	if(!init(&u))
351 351
 		return error("Init", "Failed");
352 352
 
353
-	devsystem = portuxn(&u, 0x0, "system", system_talk);
353
+	portuxn(&u, 0x0, "system", system_talk);
354 354
 	portuxn(&u, 0x1, "console", console_talk);
355 355
 	devscreen = portuxn(&u, 0x2, "screen", screen_talk);
356 356
 	devapu = portuxn(&u, 0x3, "audio", audio_talk);
357 357
 	devctrl = portuxn(&u, 0x4, "controller", nil_talk);
358 358
 	portuxn(&u, 0x5, "---", nil_talk);
359 359
 	devmouse = portuxn(&u, 0x6, "mouse", nil_talk);
360
-	devfile = portuxn(&u, 0x7, "file", file_talk);
360
+	portuxn(&u, 0x7, "file", file_talk);
361 361
 	portuxn(&u, 0x8, "---", nil_talk);
362 362
 	portuxn(&u, 0x9, "midi", nil_talk);
363 363
 	portuxn(&u, 0xa, "datetime", datetime_talk);
... ...
@@ -30,6 +30,14 @@ static Uint8 font[][8] = {
30 30
 	{0x00, 0x7c, 0x82, 0x80, 0xf0, 0x80, 0x82, 0x7c},
31 31
 	{0x00, 0x7c, 0x82, 0x80, 0xf0, 0x80, 0x80, 0x80}};
32 32
 
33
+Uint8
34
+readpixel(Uint8 *sprite, Uint8 h, Uint8 v)
35
+{
36
+	Uint8 ch1 = ((sprite[v] >> h) & 0x1);
37
+	Uint8 ch2 = (((sprite[v + 8] >> h) & 0x1) << 1);
38
+	return ch1 + ch2;
39
+}
40
+
33 41
 void
34 42
 clear(Ppu *p)
35 43
 {
... ...
@@ -79,9 +87,8 @@ puticn(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color)
79 87
 	for(v = 0; v < 8; v++)
80 88
 		for(h = 0; h < 8; h++) {
81 89
 			Uint8 ch1 = ((sprite[v] >> (7 - h)) & 0x1);
82
-			if(ch1 == 0 && (color == 0x05 || color == 0x0a || color == 0x0f))
83
-				continue;
84
-			putpixel(p, layer, x + h, y + v, ch1 ? color % 4 : color / 4);
90
+			if(ch1 == 1 || (color != 0x05 && color != 0x0a && color != 0x0f))
91
+				putpixel(p, layer, x + h, y + v, ch1 ? color % 4 : color / 4);
85 92
 		}
86 93
 }
87 94
 
... ...
@@ -135,15 +142,10 @@ drawppu(Ppu *p)
135 142
 			Uint16 key = (y * p->hor + x) * 16;
136 143
 			for(v = 0; v < 8; v++)
137 144
 				for(h = 0; h < 8; h++) {
138
-					Uint8 *sprite = &p->fg[key];
139
-					Uint8 ch1 = ((sprite[v] >> h) & 0x1);
140
-					Uint8 ch2 = (((sprite[v + 8] >> h) & 0x1) << 1);
141
-					if(ch1 + ch2 == 0) {
142
-						sprite = &p->bg[key];
143
-						ch1 = ((sprite[v] >> h) & 0x1);
144
-						ch2 = (((sprite[v + 8] >> h) & 0x1) << 1);
145
-					}
146
-					drawpixel(p, x * 8 + p->pad + 7 - h, y * 8 + p->pad + v, ch1 + ch2);
145
+					Uint8 color = readpixel(&p->fg[key], h, v);
146
+					if(color == 0)
147
+						color = readpixel(&p->bg[key], h, v);
148
+					drawpixel(p, x * 8 + p->pad + 7 - h, y * 8 + p->pad + v, color);
147 149
 				}
148 150
 		}
149 151
 }