// draw tiles
for (int i = 0; i < 32; ++i) {
+ int x = ((mem[(i << 1) | SPRITE_RAM] + 0x24) & 0xff) - 0x14;
+ x += GALAXIAN_WIDTH;
+ int y = i << 3;
+ int x1; // = x * WINDOW_X_SCALE;
+ int y1; // = y * WINDOW_Y_SCALE;
+ //for (int j = 0; j < 8 * WINDOW_Y_SCALE; ++j)
+ // for (int k = 0; k < x1; ++k)
+ // frame[y1 + j][k] = 0xff404040;
int palette_base =
- ((mem[i | SPRITE_RAM] & 7) << 2) |
+ ((mem[1 | (i << 1) | SPRITE_RAM] & 7) << 2) |
ROM_GALAXIAN_CLR_ADDR;
for (int j = 0; j < 28; ++j) {
+ //if (x >= GALAXIAN_WIDTH)
+ // break;
int offset = i + ((27 - j) << 5);
int tile_base = 7 | (mem[TILE_RAM | offset] << 3);
int tile_base0 = tile_base | ROM_1K_ADDR;
int tile_base1 = tile_base | ROM_1H_ADDR;
for (int k = 0; k < 8; ++k) {
- int y = ((i << 3) | k) * WINDOW_Y_SCALE;
+ y1 = (y + k) * WINDOW_Y_SCALE;
for (int l = 0; l < 8; ++l) {
+ x1 = (x + l) % GALAXIAN_WIDTH;
+ //if (x1 >= GALAXIAN_WIDTH)
+ // break;
int data0 = mem[l ^ tile_base0] << (k & 7);
int data1 = mem[l ^ tile_base1] << (k & 7);
int colour = mem[
((((colour & 0x38) * 0x49) & 0xff0) << 4) |
((((colour & 0xc0) * 0x55) & 0x3fc0) >> 6) |
0xff000000;
- int x = ((j << 3) | l) * WINDOW_X_SCALE;
+ x1 *= WINDOW_X_SCALE;
for (int m = 0; m < WINDOW_Y_SCALE; ++m)
for (int n = 0; n < WINDOW_X_SCALE; ++n)
- frame[y + m][x + n] = rgb;
+ frame[y1 + m][x1 + n] = rgb;
}
}
+ x += 8;
}
}
}
}
}
+
+ // draw shells and missile
+ for (int i = 0; i < 8; ++i) {
+ int x = mem[0x61 | (i << 2) | SPRITE_RAM] - 16;
+ if (x < GALAXIAN_WIDTH) {
+ x *= WINDOW_X_SCALE;
+ uint32_t rgb = i < 7 ? 0xffffffff : 0xffffff00;
+ int y = 0xfc - mem[0x63 | (i << 2) | SPRITE_RAM];
+ for (int j = 0; j < 4; ++j) {
+ int y1 = y + j;
+ if (y1 >= 0 && y1 < GALAXIAN_HEIGHT) {
+ y1 *= WINDOW_Y_SCALE;
+ for (int k = 0; k < WINDOW_Y_SCALE; ++k)
+ for (int l = 0; l < WINDOW_X_SCALE; ++l)
+ frame[y1 + k][x + l] = rgb;
+ }
+ }
+ }
+ }
#elif PACMAN
// send z80 a vertical refresh interrupt
if (mem[HW_INT_ENABLE] & 1) {
int palette_base =
((mem[offset | PALETTE_RAM] & 0x3f) << 2) | ROM_82S126_4A_ADDR;
for (int k = 0; k < 8; ++k) {
- int y = ((i << 3) | k) * WINDOW_Y_SCALE;
+ int y = (k | (i << 3)) * WINDOW_Y_SCALE;
for (int l = 0; l < 8; ++l) {
int data = mem[l ^ ((k & 4) << 1) ^ tile_base] << (k & 3);
uint32_t rgb = palette[
((data & 8) >> 3) | ((data & 0x80) >> 6) | palette_base
] & 0xf
];
- int x = ((j << 3) | l) * WINDOW_X_SCALE;
+ int x = (l | (j << 3)) * WINDOW_X_SCALE;
for (int m = 0; m < WINDOW_Y_SCALE; ++m)
for (int n = 0; n < WINDOW_X_SCALE; ++n)
frame[y + m][x + n] = rgb;