static void (*FinalizeLineSMS)(int line);
static int skip_next_line;
static int screen_offset, line_offset;
-
+static u8 mode;
/* sprite collision detection */
static int CollisionDetect(u8 *mb, u16 sx, unsigned int pack, int zoomed)
loffs = screen_offset = 24; // 192 lines is really 224 with top/bottom bars
Pico.est.rendstatus = PDRAW_32_COLS;
+ // if mode changes make palette dirty since some modes switch to a fixed one
+ if (mode != ((Pico.video.reg[0]&0x06) | (Pico.video.reg[1]&0x18))) {
+ mode = (Pico.video.reg[0]&0x06) | (Pico.video.reg[1]&0x18);
+ Pico.m.dirtyPal = 1;
+ }
+
// Copy LCD enable flag for easier handling
Pico.m.hardware &= ~0x2;
if (PicoIn.opt & POPT_EN_GG_LCD)
loffs = 48;
lines = 144;
columns = 160;
- } else switch ((Pico.video.reg[0]&0x06) | (Pico.video.reg[1]&0x18)) {
+ } else switch (mode) {
// SMS2 only 224/240 line modes, e.g. Micro Machines
case 0x06|0x08:
loffs = screen_offset = 0;
PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328); break;
}
rendstatus_old = -1;
+ mode = -1;
}
// vim:shiftwidth=2:ts=2:expandtab
/*
* SMS emulation
* (C) notaz, 2009-2010
+ * (C) kub, 2021
*
* This work is licensed under the terms of MAME license.
* See COPYING file in the top-level directory.
case 0x01:
if ((Pico.m.hardware & 0x1) && a < 0x8) { // GG I/O area
switch (a) {
- case 0: d = 0xff & ~(PicoIn.pad[0] & 0x80); break;
- case 1: d = Pico.ms.io_gg[1] | Pico.ms.io_gg[2]; break;
- case 5: d = Pico.ms.io_gg[5] & 0xf8; break;
- default: d = Pico.ms.io_gg[a]; break;
+ case 0: d = 0xff & ~(PicoIn.pad[0] & 0x80); break;
+ case 1: d = Pico.ms.io_gg[1] | (Pico.ms.io_gg[2] & 0x7f); break;
+ case 5: d = Pico.ms.io_gg[5] & 0xf8; break;
+ default: d = Pico.ms.io_gg[a]; break;
}
}
break;
memset(&Pico.m,0,sizeof(Pico.m));
Pico.m.pal = 0;
+ for (s = 0; s < sizeof(PicoMem.zram); s++)
+ PicoMem.zram[s] = rand();
+
// calculate a mask for bank writes.
// ROM loader has aligned the size for us, so this is safe.
s = 0; tmp = Pico.romsize;