| ... | ... |
@@ -28,12 +28,13 @@ static Uint32 palette_mono[] = {
|
| 28 | 28 |
static void |
| 29 | 29 |
screen_write(UxnScreen *p, Layer *layer, Uint16 x, Uint16 y, Uint8 color) |
| 30 | 30 |
{
|
| 31 |
- if(x < p->width && y < p->height) {
|
|
| 32 |
- Uint32 i = x + y * p->width; |
|
| 33 |
- if(color != layer->pixels[i]) {
|
|
| 34 |
- layer->pixels[i] = color; |
|
| 35 |
- layer->changed = 1; |
|
| 36 |
- } |
|
| 31 |
+ Uint32 i; |
|
| 32 |
+ if(x > p->width || y > p->height) |
|
| 33 |
+ return; |
|
| 34 |
+ i = x + y * p->width; |
|
| 35 |
+ if(color != layer->pixels[i]) {
|
|
| 36 |
+ layer->pixels[i] = color; |
|
| 37 |
+ layer->changed = 1; |
|
| 37 | 38 |
} |
| 38 | 39 |
} |
| 39 | 40 |
|
| ... | ... |
@@ -42,7 +43,7 @@ screen_blit(UxnScreen *p, Layer *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 |
| 42 | 43 |
{
|
| 43 | 44 |
int v, h, opaque = (color % 5) || !color; |
| 44 | 45 |
for(v = 0; v < 8; v++) {
|
| 45 |
- Uint16 c = sprite[v] | (twobpp ? sprite[v + 8] : 0) << 8; |
|
| 46 |
+ Uint16 c = sprite[v] | (twobpp ? (sprite[v + 8] << 8) : 0); |
|
| 46 | 47 |
for(h = 7; h >= 0; --h, c >>= 1) {
|
| 47 | 48 |
Uint8 ch = (c & 1) | ((c >> 7) & 2); |
| 48 | 49 |
if(opaque || ch) |
| ... | ... |
@@ -179,7 +180,7 @@ screen_deo(Uint8 *ram, Uint8 *d, Uint8 port) |
| 179 | 180 |
n = d[0x6] >> 4; |
| 180 | 181 |
dx = (d[0x6] & 0x01) << 3; |
| 181 | 182 |
dy = (d[0x6] & 0x02) << 2; |
| 182 |
- if(addr > 0x10000 - ((n + 1) << (3 + twobpp))) |
|
| 183 |
+ if(addr > 0xfff0) |
|
| 183 | 184 |
return; |
| 184 | 185 |
for(i = 0; i <= n; i++) {
|
| 185 | 186 |
screen_blit(&uxn_screen, layer, x + dy * i, y + dx * i, &ram[addr], d[0xf] & 0xf, d[0xf] & 0x10, d[0xf] & 0x20, twobpp); |