subrom_bank = 0;
subrom_bank_using = subrom_bank;
cgrom_bank = 0;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
monitor_ram = false;
monitor_ram_using = monitor_ram;
ram_protect = true;
alu->write_signal(SIG_ALU_Y_HEIGHT, 200, 0xffff);
alu->write_signal(SIG_ALU_400LINE, 0, 0xffffffff);
#endif
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
mode400line = false;
//alu->write_signal(SIG_ALU_400LINE, 0x00, 0xff);
mode256k = false;
vram_display_block = 0;
vram_active_block = 0;
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
window_low = 0;
window_high = 400;
window_xbegin = 0;
window_xend = 80;
window_opened = false;
-
+# endif
#endif
#if defined(_FM77L4)
mode400line = false;
enter_display();
}
-inline void DISPLAY::GETVRAM_8_200L(int yoff, scrntype *p, uint32 mask)
+inline void DISPLAY::GETVRAM_8_200L(int yoff, scrntype *p, uint32 mask, bool window_inv = false)
{
register uint8 b, r, g;
register uint32 dot;
uint32 yoff_d;
+#if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ int dpage = vram_display_block;
+#endif
#if defined(_FM77AV_VARIANTS)
if(display_page == 1) { // Is this dirty?
yoff_d = offset_point_bank1;
yoff_d = offset_point;
#endif
yoff_d = (yoff + yoff_d) & 0x3fff;
-# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
- if(vram_display_block != 0) yoff_d += 0x18000;
-# endif
+#if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ if(window_inv) {
+ if(dpage == 0) {
+ dpage = 1;
+ } else {
+ dpage = 0;
+ }
+ }
+ if(dpage != 0) yoff_d += 0x18000;
+#endif
b = r = g = 0;
#if defined(_FM77AV_VARIANTS)
if(display_page == 1) {
p[7] = dpalette_pixel[dot];
}
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
-inline void DISPLAY::GETVRAM_8_400L(int yoff, scrntype *p, uint32 mask)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+inline void DISPLAY::GETVRAM_8_400L(int yoff, scrntype *p, uint32 mask, bool window_inv = false)
{
register uint8 b, r, g;
register uint32 dot;
uint32 yoff_d;
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ int dpage = vram_display_block;
+# endif
+
if(display_page == 1) { // Is this dirty?
yoff_d = (offset_point_bank1 & 0x3fff) << 1;
} else {
}
yoff_d = (yoff + yoff_d) & 0x7fff;
# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
- if(vram_display_block != 0) yoff_d += 0x18000;
+ if(window_inv) {
+ if(dpage == 0) {
+ dpage = 1;
+ } else {
+ dpage = 0;
+ }
+ }
+ if(dpage != 0) yoff_d += 0x18000;
# endif
b = r = g = 0;
if(display_page == 1) {
dot = ((g & 0x1) << 2) | ((r & 0x1) << 1) | (b & 0x1);
p[7] = dpalette_pixel[dot];
}
+
+inline void DISPLAY::GETVRAM_256k(int yoff, scrntype *p, uint32 mask)
+{
+ register uint32 b3, r3, g3;
+ register uint32 b4, r4, g4;
+ register uint32 btmp, rtmp, gtmp;
+
+ register scrntype b, r, g;
+ scrntype pixel;
+ uint32 yoff_d1, yoff_d2;
+ uint32 _bit;
+ int _shift;
+ int cp;
+
+ r3 = g3 = b3 = 0;
+ r4 = g4 = b4 = 0;
+ r = g = b = 0;
+
+ yoff_d1 = offset_point;
+ yoff_d2 = offset_point_bank1;
+ yoff_d1 = (yoff + yoff_d1) & 0x1fff;
+ yoff_d2 = (yoff + yoff_d2) & 0x1fff;
+ if(mask & 0x01) {
+ b3 = gvram[yoff_d1] << 24;
+ b3 |= gvram[yoff_d1 + 0x02000] << 16;
+
+ b3 |= gvram[yoff_d2 + 0x0c000] << 8;
+ b3 |= gvram[yoff_d2 + 0x0e000] << 0;
+
+ b4 = gvram[yoff_d1 + 0x18000] << 8;
+ b4 |= gvram[yoff_d1 + 0x1a000] << 0;
+ }
+ if(mask & 0x02) {
+ r3 = gvram[yoff_d1 + 0x04000] << 24;
+ r3 |= gvram[yoff_d1 + 0x06000] << 16;
+ r3 |= gvram[yoff_d2 + 0x10000] << 8;
+ r3 |= gvram[yoff_d2 + 0x12000] << 0;
+ r4 = gvram[yoff_d1 + 0x1c000] << 8;
+ r4 |= gvram[yoff_d1 + 0x1e000] << 0;
+ }
+
+ if(mask & 0x04) {
+ g3 = gvram[yoff_d1 + 0x08000] << 24;
+ g3 |= gvram[yoff_d1 + 0x0a000] << 16;
+ g3 |= gvram[yoff_d2 + 0x14000] << 8;
+ g3 |= gvram[yoff_d2 + 0x16000] << 0;
+
+ g4 = gvram[yoff_d1 + 0x20000] << 8;
+ g4 |= gvram[yoff_d1 + 0x22000] << 0;
+ }
+
+ cp = 0;
+ for(_shift = 7; _shift >= 0; _shift--) {
+ _bit = 0x01010101 << _shift;
+ r = g = b = 0;
+ if(mask & 0x01) {
+ btmp = (b3 & _bit) >> _shift;
+ b = ((btmp & (0x01 << 24)) ? 0x20 : 0) | ((btmp & (0x01 << 16)) ? 0x10 : 0)
+ | ((btmp & (0x01 << 8)) ? 0x08 : 0) | ((btmp & 0x01) ? 0x04 : 0);
+ btmp = (b4 & _bit) >> _shift;
+ b |= ((btmp & (0x01 << 8)) ? 0x80 : 0) | ((btmp & 0x01) ? 0x40 : 0);
+ }
+ if(mask & 0x02) {
+ rtmp = (r3 & _bit) >> _shift;
+ r = ((rtmp & (0x01 << 24)) ? 0x20 : 0) | ((rtmp & (0x01 << 16)) ? 0x10 : 0)
+ | ((rtmp & (0x01 << 8)) ? 0x08 : 0) | ((rtmp & 0x01) ? 0x04 : 0);
+ rtmp = (r4 & _bit) >> _shift;
+ r |= ((rtmp & (0x01 << 8)) ? 0x80 : 0) | ((rtmp & 0x01) ? 0x40 : 0);
+ }
+ if(mask & 0x04) {
+ gtmp = (g3 & _bit) >> _shift;
+ g = ((gtmp & (0x01 << 24)) ? 0x20 : 0) | ((gtmp & (0x01 << 16)) ? 0x10 : 0)
+ | ((gtmp & (0x01 << 8)) ? 0x08 : 0) | ((gtmp & 0x01) ? 0x04 : 0);
+ gtmp = (g4 & _bit) >> _shift;
+ g |= ((gtmp & (0x01 << 8)) ? 0x80 : 0) | ((gtmp & 0x01) ? 0x40 : 0);
+ }
+
+ pixel = RGB_COLOR(r, g, b);
+ p[cp] = pixel;
+ p[cp + 1] = pixel;
+ cp += 2;
+ }
+
+}
#endif
#if defined(_FM77AV_VARIANTS)
-inline void DISPLAY::GETVRAM_4096(int yoff, scrntype *p, uint32 mask)
+inline void DISPLAY::GETVRAM_4096(int yoff, scrntype *p, uint32 mask, bool window_inv = false)
{
register uint32 b3, r3, g3;
register scrntype b, r, g;
uint32 idx;;
scrntype pixel;
uint32 yoff_d1, yoff_d2;
-
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ int dpage = vram_display_block;
+# endif
+
yoff_d1 = offset_point;
yoff_d2 = offset_point_bank1;
yoff_d1 = (yoff + yoff_d1) & 0x1fff;
yoff_d2 = (yoff + yoff_d2) & 0x1fff;
# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
- if(vram_display_block != 0) {
+ if(window_inv) {
+ if(dpage == 0) {
+ dpage = 1;
+ } else {
+ dpage = 0;
+ }
+ }
+ if(dpage != 0) {
yoff_d1 += 0x18000;
yoff_d2 += 0x18000;
}
p = emu->screen_buffer(y);
pp = p;
yoff = (y / 2) * 80;
- for(x = 0; x < 10; x++) {
- GETVRAM_8_200L(yoff + 0, p, rgbmask);
- p += 8;
-
- GETVRAM_8_200L(yoff + 1, p, rgbmask);
- p += 8;
-
- GETVRAM_8_200L(yoff + 2, p, rgbmask);
- p += 8;
-
- GETVRAM_8_200L(yoff + 3, p, rgbmask);
- p += 8;
-
- GETVRAM_8_200L(yoff + 4, p, rgbmask);
- p += 8;
-
- GETVRAM_8_200L(yoff + 5, p, rgbmask);
- p += 8;
-
- GETVRAM_8_200L(yoff + 6, p, rgbmask);
- p += 8;
+#if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ if(window_opened && ((window_low * 2) >= y) && ((window_high * 2) <= y)) {
+ for(x = 0; x < 80; x++) {
+ if((x >= window_xbegin) && (x <= window_xend)) {
+ GETVRAM_8_200L(yoff, p, rgbmask, true);
+ } else {
+ GETVRAM_8_200L(yoff, p, rgbmask, false);
+ }
+ p += 8;
+ yoff++;
+ }
+ } else
+#endif
+ {
+ for(x = 0; x < 10; x++) {
+ GETVRAM_8_200L(yoff + 0, p, rgbmask, false);
+ p += 8;
+
+ GETVRAM_8_200L(yoff + 1, p, rgbmask, false);
+ p += 8;
+
+ GETVRAM_8_200L(yoff + 2, p, rgbmask, false);
+ p += 8;
+
+ GETVRAM_8_200L(yoff + 3, p, rgbmask, false);
+ p += 8;
+
+ GETVRAM_8_200L(yoff + 4, p, rgbmask, false);
+ p += 8;
+
+ GETVRAM_8_200L(yoff + 5, p, rgbmask, false);
+ p += 8;
+
+ GETVRAM_8_200L(yoff + 6, p, rgbmask, false);
+ p += 8;
- GETVRAM_8_200L(yoff + 7, p, rgbmask);
- p += 8;
- yoff += 8;
+ GETVRAM_8_200L(yoff + 7, p, rgbmask, false);
+ p += 8;
+ yoff += 8;
+ }
}
if(config.scan_line == 0) {
memcpy((void *)emu->screen_buffer(y + 1), pp, 640 * sizeof(scrntype));
p = emu->screen_buffer(y);
pp = p;
yoff = y * (40 / 2);
- for(x = 0; x < 5; x++) {
- GETVRAM_4096(yoff + 0, p, mask);
- p += 16;
-
- GETVRAM_4096(yoff + 1, p, mask);
- p += 16;
-
- GETVRAM_4096(yoff + 2, p, mask);
- p += 16;
-
- GETVRAM_4096(yoff + 3, p, mask);
- p += 16;
-
- GETVRAM_4096(yoff + 4, p, mask);
- p += 16;
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ if(window_opened && ((window_low * 2) >= y) && ((window_high * 2) <= y)) {
+ for(x = 0; x < 40; x++) {
+ if((x >= window_xbegin) && (x <= window_xend)) {
+ GETVRAM_4096(yoff, p, rgbmask, true);
+ } else {
+ GETVRAM_4096(yoff, p, rgbmask, false);
+ }
+ p += 16;
+ yoff++;
+ }
+ } else
+# endif
+ {
+ for(x = 0; x < 5; x++) {
+ GETVRAM_4096(yoff + 0, p, mask);
+ p += 16;
+
+ GETVRAM_4096(yoff + 1, p, mask);
+ p += 16;
+
+ GETVRAM_4096(yoff + 2, p, mask);
+ p += 16;
+
+ GETVRAM_4096(yoff + 3, p, mask);
+ p += 16;
+
+ GETVRAM_4096(yoff + 4, p, mask);
+ p += 16;
- GETVRAM_4096(yoff + 5, p, mask);
- p += 16;
-
- GETVRAM_4096(yoff + 6, p, mask);
- p += 16;
-
- GETVRAM_4096(yoff + 7, p, mask);
- p += 16;
- yoff += 8;
+ GETVRAM_4096(yoff + 5, p, mask);
+ p += 16;
+
+ GETVRAM_4096(yoff + 6, p, mask);
+ p += 16;
+
+ GETVRAM_4096(yoff + 7, p, mask);
+ p += 16;
+ yoff += 8;
+ }
}
if(config.scan_line == 0) {
memcpy((void *)emu->screen_buffer(y + 1), pp, 640 * sizeof(scrntype));
}
return;
}
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
else if(display_mode == DISPLAY_MODE_8_400L) {
yoff = 0;
rgbmask = ~multimode_dispmask;
p = emu->screen_buffer(y);
pp = p;
yoff = y * 80;
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ if(window_opened && (window_low >= y) && (window_high <= y)) {
+ for(x = 0; x < 80; x++) {
+ if((x >= window_xbegin) && (x <= window_xend)) {
+ GETVRAM_8_400L(yoff, p, rgbmask, true);
+ } else {
+ GETVRAM_8_400L(yoff, p, rgbmask, false);
+ }
+ p += 8;
+ yoff++;
+ }
+ } else
+# endif
for(x = 0; x < 10; x++) {
GETVRAM_8_400L(yoff + 0, p, rgbmask);
p += 8;
}
}
return;
- }else if(display_mode == DISPLAY_MODE_256k) {
+ } else if(display_mode == DISPLAY_MODE_256k) {
+ rgbmask = ~multimode_dispmask;
+ for(y = 0; y < 400; y += 2) {
+ p = emu->screen_buffer(y);
+ pp = p;
+ yoff = y * (40 / 2);
+ {
+ for(x = 0; x < 5; x++) {
+ GETVRAM_256k(yoff + 0, p, rgbmask);
+ p += 16;
+
+ GETVRAM_256k(yoff + 1, p, rgbmask);
+ p += 16;
+
+ GETVRAM_256k(yoff + 2, p, rgbmask);
+ p += 16;
+
+ GETVRAM_256k(yoff + 3, p, rgbmask);
+ p += 16;
+
+ GETVRAM_256k(yoff + 4, p, rgbmask);
+ p += 16;
+
+ GETVRAM_256k(yoff + 5, p, rgbmask);
+ p += 16;
+
+ GETVRAM_256k(yoff + 6, p, rgbmask);
+ p += 16;
+
+ GETVRAM_256k(yoff + 7, p, rgbmask);
+ p += 16;
+ yoff += 8;
+ }
+ }
+ if(config.scan_line == 0) {
+ memcpy((void *)emu->screen_buffer(y + 1), pp, 640 * sizeof(scrntype));
+ } else {
+ memset((void *)emu->screen_buffer(y + 1), 0x00, 640 * sizeof(scrntype));
+ }
+ }
+ return;
}
-#endif // _FM77AV40
+# endif // _FM77AV40
#endif //_FM77AV_VARIANTS
}
halt_flag = false;
#if defined(_FM77AV_VARIANTS)
if(subcpu_resetreq) {
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
monitor_ram_using = monitor_ram;
#endif
subrom_bank_using = subrom_bank;
// Main: FD13
void DISPLAY::set_monitor_bank(uint8 var)
{
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
if((var & 0x04) != 0){
monitor_ram = true;
} else {
power_on_reset = false;
if(!halt_flag) {
subrom_bank_using = subrom_bank;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
monitor_ram_using = monitor_ram;
#endif
subcpu->write_signal(SIG_CPU_BUSREQ, 0, 1);
break;
case SIG_FM7_SUB_BANK: // Main: FD13
retval = subrom_bank;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(monitor_ram) retval |= 0x04;
#endif
break;
set_monitor_bank(data & 0xff);
break;
case SIG_DISPLAY_EXTRA_MODE: // FD04 bit 4, 3
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
{
int oldmode = display_mode;
kanjisub = ((data & 0x20) == 0) ? true : false;
#endif
break;
case SIG_DISPLAY_MODE320: // FD12 bit 6
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
{
int oldmode = display_mode;
mode320 = flag;
uint8 DISPLAY::read_vram_8_400l(uint32 addr, uint32 offset)
{
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
uint32 color = vram_bank & 0x03;
uint32 pagemod;
uint32 page_offset = 0;
uint32 raddr;
+ if(addr >= 0x8000) return 0xff;
# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(vram_active_block != 0) page_offset += 0x18000;
# endif
uint8 DISPLAY::read_vram_8_400l_direct(uint32 addr, uint32 offset)
{
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
uint32 color = vram_bank & 0x03;
uint32 pagemod;
uint32 page_offset = 0;
uint8 DISPLAY::read_vram_256k(uint32 addr, uint32 offset)
{
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
uint32 page_offset;
uint32 pagemod;
uint32 color; // b
case 0x1b:
retval = alu->read_data8(ALU_BANK_DISABLE);
break;
- #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
case 0x2f: // VRAM BANK
retval = 0xfc | (vram_bank & 0x03);
break;
- #endif
+# endif
// MISC
case 0x30:
retval = get_miscreg();
dummy = alu->read_data8(addr + ALU_WRITE_PROXY);
return dummy;
}
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
- if(display_mode == DISPLAY_MODE_8_400L) {
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ if((display_mode == DISPLAY_MODE_8_400L) || (display_mode == DISPLAY_MODE_256k)){
color = vram_bank;
}
# endif
if((multimode_accessmask & (1 << color)) != 0) return 0xff;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(display_mode == DISPLAY_MODE_8_400L) {
if(addr >= 0x8000) return 0xff;
return (uint32)read_vram_8_400l(addr, offset);
#endif
} else if(addr < 0xd000) {
raddr = addr - 0xc000;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(monitor_ram_using) {
if(console_ram_bank >= 1) {
return submem_console_av40[((console_ram_bank - 1) << 12) + raddr];
return subsys_c[addr - 0xd800];
#else
if(addr < 0xe000) {
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
if(monitor_ram_using) {
return submem_cgram[cgram_bank * 0x0800 + (addr - 0xd800)]; //FIXME
}
#endif
return subsys_cg[(addr - 0xd800) + cgrom_bank * 0x800];
} else if(addr < 0x10000) {
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
if(monitor_ram_using) {
return subsys_ram[addr - 0xe000];
}
// ACCESS VIA ALU.
else if((addr >= DISPLAY_VRAM_DIRECT_ACCESS) && (addr < (DISPLAY_VRAM_DIRECT_ACCESS + 0x30000))) {
addr = addr - DISPLAY_VRAM_DIRECT_ACCESS;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(display_mode == DISPLAY_MODE_8_400L) {
return read_vram_8_400l_direct(addr, offset);
} else if(display_mode == DISPLAY_MODE_256k) {
- return read_vram_256k(addr, offset);
+ return read_vram_256k(addr & 0xbfff, offset);
} else if(display_mode == DISPLAY_MODE_4096) {
- return read_vram_4096(addr, offset);
+ return read_vram_4096(addr & 0xbfff, offset);
} else { // 8Colors, 200LINE
- return read_vram_8_200l(addr, offset);
+ return read_vram_8_200l(addr & 0xbfff, offset);
}
#else
if(mode320) {
- return read_vram_4096(addr, offset);
+ return read_vram_4096(addr & 0xbfff, offset);
} else {
- return read_vram_8_200l(addr, offset);
+ return read_vram_8_200l(addr & 0xbfff, offset);
}
#endif
}
void DISPLAY::write_vram_8_400l(uint32 addr, uint32 offset, uint32 data)
{
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
uint32 color = vram_bank & 0x03;
uint32 pagemod;
uint32 page_offset = 0;
uint32 raddr;
uint8 val8 = (uint8)(data & 0x00ff);
+ if(addr >= 0x8000) return;
# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(vram_active_block != 0) page_offset += 0x18000;
# endif
void DISPLAY::write_vram_8_400l_direct(uint32 addr, uint32 offset, uint32 data)
{
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
uint32 pagemod;
uint32 page_offset = 0;
uint32 raddr;
void DISPLAY::write_vram_256k(uint32 addr, uint32 offset, uint32 data)
{
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
uint32 page_offset = 0;
uint32 pagemod;
page_offset = 0xc000 * (vram_bank & 0x03);
case 0x23:
alu_write_linepattern_lo(data);
break;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
case 0x2e: //
console_ram_bank = (data & 0x18) >> 3;
if(console_ram_bank > 2) console_ram_bank = 0;
tmpvar.d = window_low;
tmpvar.w.h = 0;
if(addr == 0x3c) {
- tmpvar.b.h = data & 0x01;
+ tmpvar.b.h = data & 0x03;
} else {
tmpvar.b.l = data & 0xff;
}
case 0x3f: //
tmpvar.d = window_high;
tmpvar.w.h = 0;
- if(addr == 0x3c) {
- tmpvar.b.h = data & 0x01;
+ if(addr == 0x3e) {
+ tmpvar.b.h = data & 0x03;
} else {
tmpvar.b.l = data & 0xff;
}
#endif
break;
}
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40EX) || defined(_FM77AV40SX)
if((addr < 0x40) && (addr >= 0x38)) {
+ bool _flag = window_opened;
if((window_xbegin < window_xend) && (window_low < window_high)) {
window_opened = true;
} else {
window_opened = false;
}
- if(window_opened) vram_wrote = true;
+ if(window_opened != _flag) vram_wrote = true;
}
#endif
}
return;
}
color = (addr & 0x0c000) >> 14;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
- if(display_mode == DISPLAY_MODE_8_400L) {
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ if((display_mode == DISPLAY_MODE_8_400L) || (display_mode == DISPLAY_MODE_256k)){
color = vram_bank;
}
# endif
if((multimode_accessmask & (1 << color)) != 0) return;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(display_mode == DISPLAY_MODE_8_400L) {
if(addr < 0x8000) write_vram_8_400l(addr, offset, data);
} else if(display_mode == DISPLAY_MODE_256k) {
#endif
} else if(addr < 0xd000) {
raddr = addr - 0xc000;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(monitor_ram_using) {
if(console_ram_bank >= 1) {
submem_console_av40[((console_ram_bank - 1) << 12) + raddr] = val8;
write_mmio(addr, data);
return;
} else if(addr < 0x10000) {
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
//printf("Write SUBSYS_RAM %04x DATA=%02x RAM=%d PROTECT=%d\n", addr, val8,
// monitor_ram_using ? 1:0, ram_protect ? 1: 0);
if(ram_protect || !(monitor_ram_using)) return;
// ACCESS VIA ALU.
else if((addr >= DISPLAY_VRAM_DIRECT_ACCESS) && (addr < (DISPLAY_VRAM_DIRECT_ACCESS + 0x30000))) {
addr = addr - DISPLAY_VRAM_DIRECT_ACCESS;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
if(display_mode == DISPLAY_MODE_8_400L) {
write_vram_8_400l_direct(addr, offset, data);
} else if(display_mode == DISPLAY_MODE_256k) {
- write_vram_256k(addr, offset, data);
+ write_vram_256k(addr & 0xbfff, offset, data);
} else if(display_mode == DISPLAY_MODE_4096) {
- write_vram_4096(addr, offset, data);
+ write_vram_4096(addr & 0xbfff, offset, data);
} else { // 8Colors, 200LINE
- write_vram_8_200l(addr, offset, data);
+ write_vram_8_200l(addr & 0xbfff, offset, data);
}
#else
if(mode320) {
- write_vram_4096(addr, offset, data);
+ write_vram_4096(addr & 0xbfff, offset, data);
} else {
- write_vram_8_200l(addr, offset, data);
+ write_vram_8_200l(addr & 0xbfff, offset, data);
}
#endif
}
state_fio->Fwrite(subsys_b, sizeof(subsys_b), 1);
state_fio->Fwrite(subsys_cg, sizeof(subsys_cg), 1);
state_fio->Fwrite(submem_hidden, sizeof(submem_hidden), 1);
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
state_fio->FputBool(mode400line);
state_fio->FputBool(mode256k);
state_fio->FputBool(monitor_ram);
state_fio->FputBool(monitor_ram_using);
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
state_fio->FputUint16_BE(window_low);
state_fio->FputUint16_BE(window_high);
state_fio->FputUint16_BE(window_xbegin);
state_fio->FputUint16_BE(window_xend);
state_fio->FputBool(window_opened);
-
+# endif
state_fio->FputBool(kanji_level2);
state_fio->FputUint8(vram_active_block);
state_fio->Fread(subsys_cg, sizeof(subsys_cg), 1);
state_fio->Fread(submem_hidden, sizeof(submem_hidden), 1);
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
mode400line = state_fio->FgetBool();
mode256k = state_fio->FgetBool();
monitor_ram = state_fio->FgetBool();
monitor_ram_using = state_fio->FgetBool();
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
window_low = state_fio->FgetUint16_BE();
window_high = state_fio->FgetUint16_BE();
window_xbegin = state_fio->FgetUint16_BE();
window_xend = state_fio->FgetUint16_BE();
window_opened = state_fio->FgetBool();
-
+# endif
kanji_level2 = state_fio->FgetBool();
vram_active_block = state_fio->FgetUint8();
memset(fm7_mainmem_bootrom_vector, 0x00, 0x10); // Clear without vector
#if defined(_FM77AV_VARIANTS)
memset(fm7_bootram, 0x00, 0x1f0);
-#if 0
- if((config.boot_mode & 3) == 0) {
- memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1800], 0x1e0 * sizeof(uint8));
- } else {
- memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1a00], 0x1e0 * sizeof(uint8));
- }
- fm7_bootram[0x1fe] = 0xfe; // Set reset vector.
- fm7_bootram[0x1ff] = 0x00; //
-#endif
initiator_enabled = true;
boot_ram_write = true;
-
#elif defined(_FM77_VARIANTS)
boot_ram_write = false;
#endif
return -1;
}
+
+int FM7_MAINMEM::check_extrom(uint32 raddr, uint32 *realaddr)
+{
+#if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ if(extrom_bank) { // Extra ROM selected.
+ uint32 dbank = extcard_bank & 0x3f;
+ if(dbank <= 0x1f) { // KANJI
+ if((dbank == 0x07) && (dbank == 0x06)) {
+ // NOT KANJI AS IS.Thanks Ryu.
+ *realaddr = raddr & 0x01;
+ return FM7_MAINMEM_KANJI_DUMMYADDR;
+ }
+ *realaddr = (dbank << 12) | raddr;
+ return FM7_MAINMEM_KANJI_LEVEL1;
+ } else if(dbank <= 0x2b) {
+ raddr = ((dbank << 12) - 0x20000) | raddr;
+ *realaddr = raddr;
+ return FM7_MAINMEM_77AV40_EXTRAROM;
+ } else if(dbank <= 0x2f) {
+ *realaddr = 0;
+ return FM7_MAINMEM_NULL;
+ } else if(dbank <= 0x3f) {
+ raddr = ((dbank << 12) - 0x30000) | raddr;
+ if((raddr >= 0x8000) && (raddr < 0xfc00)) {
+ *realaddr = raddr - 0x8000;
+ return FM7_MAINMEM_BASICROM;
+ } else if((raddr >= 0xfe00) || (raddr < 0xffe0)) {
+ *realaddr = raddr - 0xfe00;
+ return FM7_MAINMEM_BOOTROM_MMR;
+ } else if(raddr >= 0xfffe) {
+ *realaddr = raddr - 0xfffe;
+ return FM7_MAINMEM_RESET_VECTOR;
+ }
+ //*realaddr = raddr + 0x10000;
+ //return FM7_MAINMEM_77AV40_EXTRAROM;
+ *realaddr = 0;
+ return FM7_MAINMEM_NULL;
+ }
+ }
+#endif
+ return -1;
+}
+
+
int FM7_MAINMEM::mmr_convert(uint32 addr, uint32 *realaddr)
{
uint32 raddr = addr & 0x0fff;
raddr = ((mmr_bank << 12) | raddr) & 0xffff;
return nonmmr_convert(raddr, realaddr);
}
-#ifdef _FM77AV_VARIANTS
+# ifdef _FM77AV_VARIANTS
else if(mmr_bank == 0x3f) {
if((raddr >= 0xd80) && (raddr <= 0xd97)) { // MMR AREA
*realaddr = 0;
return nonmmr_convert(raddr, realaddr); // Access I/O, Bootrom, even via MMR.
}
}
-#elif defined(_FM77_VARIANTS)
+# elif defined(_FM77_VARIANTS)
else if(mmr_bank == 0x3f) {
if((raddr >= 0xc00) && (raddr < 0xe00)) {
if(is_basicrom) {
return nonmmr_convert(raddr, realaddr); // Access I/O, Bootrom, even via MMR.
}
}
-#endif
+# endif
major_bank = (mmr_bank >> 4) & 0x0f;
-#ifdef _FM77AV_VARIANTS
+# ifdef _FM77AV_VARIANTS
if(major_bank == 0x0) { // PAGE 0
*realaddr = ((mmr_bank << 12) | raddr) & 0x0ffff;
return FM7_MAINMEM_AV_PAGE0;
*realaddr = ((mmr_bank << 12) | raddr) & 0x0ffff;
return FM7_MAINMEM_AV_DIRECTACCESS;
} else if(major_bank == 0x2) { // PAGE 2
-#if defined(CAPABLE_DICTROM)
- //uint32 dbank = mainio->read_data8(FM7_MAINIO_EXTBANK);
- switch(mmr_bank) {
-
- case 0x28:
- case 0x29: // Backuped RAM
- if(dictrom_connected && dictram_enabled){ // Battery backuped RAM
- raddr = raddr & 0x1fff;
- *realaddr = raddr;
- return FM7_MAINMEM_BACKUPED_RAM;
- }
- break;
- case 0x2e:
- if((dictrom_connected) && (dictrom_enabled)) { // Dictionary ROM
+ if(mmr_bank == 0x2e) {
+ int banknum = check_extrom(raddr, realaddr);
+ if(banknum >= 0) {
+ return banknum;
+ } else {
+ if(dictrom_connected && dictrom_enabled) { // Dictionary ROM
uint32 dbank = extcard_bank & 0x3f;
- if(extrom_bank) { // Extra ROM selected.
- if(dbank <= 0x1f) { // KANJI
- if((dbank == 0x07) && (dbank == 0x06)) {
- // NOT KANJI AS IS.Thanks Ryu.
- *realaddr = raddr & 0x01;
- return FM7_MAINMEM_KANJI_DUMMYADDR;
- }
- *realaddr = (dbank << 12) | raddr;
- return FM7_MAINMEM_KANJI_LEVEL1;
- } else if(dbank <= 0x2f) {
- raddr = ((dbank << 12) - 0x20000) | raddr;
- *realaddr = raddr;
- return FM7_MAINMEM_77AV40_EXTRAROM;
- } else if(dbank <= 0x3f) {
- raddr = ((dbank << 12) - 0x30000) | raddr;
- if((raddr >= 0x8000) && (raddr < 0xfc00)) {
- *realaddr = raddr - 0x8000;
- return FM7_MAINMEM_BASICROM;
- } else if((raddr >= 0xfe00) || (raddr < 0xffe0)) {
- *realaddr = raddr - 0xfe00;
- return FM7_MAINMEM_BOOTROM_MMR;
- } else if(raddr >= 0xfffe) {
- *realaddr = raddr - 0xfffe;
- return FM7_MAINMEM_RESET_VECTOR;
- }
- *realaddr = raddr + 0x10000;
- return FM7_MAINMEM_77AV40_EXTRAROM;
- }
- *realaddr = raddr;
- return FM7_MAINMEM_NULL;
- } else {
- *realaddr = raddr | (dbank << 12);
- return FM7_MAINMEM_DICTROM;
- }
+ *realaddr = raddr | (dbank << 12);
+ return FM7_MAINMEM_DICTROM;
}
- break;
- default:
- *realaddr = (raddr | (mmr_bank << 12)) & 0x0ffff;
- return FM7_MAINMEM_AV_PAGE2;
- break;
}
- *realaddr = (raddr | (mmr_bank << 12)) & 0x0ffff;
- return FM7_MAINMEM_AV_PAGE2;
-#else
- //*realaddr = (raddr | (mmr_bank << 12)) & 0x0ffff;
+ }
+# if defined(CAPABLE_DICTROM)
+ switch(mmr_bank) {
+ case 0x28:
+ case 0x29: // Backuped RAM
+ if(dictrom_connected && dictram_enabled){ // Battery backuped RAM
+ raddr = (((uint32)mmr_bank & 0x01) << 12) | raddr;
+ raddr = raddr & 0x1fff;
+ *realaddr = raddr;
+ return FM7_MAINMEM_BACKUPED_RAM;
+ }
+ break;
+ }
+ *realaddr = (raddr | (mmr_bank << 12)) & 0x0ffff;
+ return FM7_MAINMEM_AV_PAGE2;
+# else
if(use_page2_extram) {
*realaddr = ((mmr_bank << 12) | raddr) & 0x0ffff;
return FM7_MAINMEM_AV_PAGE2;
*realaddr = 0;
return FM7_MAINMEM_NULL;
}
-#endif
+# endif
}
-#endif
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
+# endif
+
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
else if(extram_connected && mmr_extend) { // PAGE 4-
if(major_bank >= (extram_pages + 4)) {
*realaddr = 0;
return FM7_MAINMEM_NULL;
}
}
-#elif defined(_FM77_VARIANTS)
+# elif defined(_FM77_VARIANTS)
if(extram_connected) { // PAGE 4-
if((major_bank > extram_pages) || (major_bank >= 3)) {
*realaddr = 0;
*realaddr = 0;
return FM7_MAINMEM_NULL; // $FF
}
-#else // _FM77AV_VARIANTS
+# else // _FM77AV_VARIANTS
if(major_bank > 3) {
*realaddr = 0;
return FM7_MAINMEM_NULL; // $FF
}
-#endif
+# endif
#endif // HAS_MMR
*realaddr = 0;
return -1;
kanjiclass1 = NULL;
#endif
#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
defined(_FM77_VARIANTS)
fm7_mainmem_extram = NULL;
#endif
diag_load_bootrom_bas = false;
diag_load_bootrom_dos = false;
diag_load_bootrom_mmr = false;
+
+
#if defined(_FM77AV_VARIANTS)
dictrom_connected = false;
#endif
#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
defined(_FM77_VARIANTS)
extram_pages = FM77_EXRAM_BANKS;
#if defined(_FM77_VARIANTS)
for(i = FM7_MAINMEM_BOOTROM_BAS; i <= FM7_MAINMEM_BOOTROM_EXTRA; i++) {
memset(fm7_bootroms[i - FM7_MAINMEM_BOOTROM_BAS], 0xff, 0x200);
read_table[i].memory = fm7_bootroms[i - FM7_MAINMEM_BOOTROM_BAS];
- write_table[i].memory = NULL;
}
#endif
#if defined(_FM8)
diag_load_initrom = false;
memset(fm7_mainmem_initrom, 0xff, 0x2000 * sizeof(uint8));
read_table[i].memory = fm7_mainmem_initrom;
- write_table[i].memory = NULL;
+
if(read_bios("INITIATE.ROM", read_table[i].memory, 0x2000) >= 0x2000) diag_load_initrom = true;
emu->out_debug_log("77AV INITIATOR ROM READING : %s", diag_load_initrom ? "OK" : "NG");
fm7_mainmem_reset_vector[1] = 0x00;
read_table[i].memory = fm7_mainmem_reset_vector;
- write_table[i].memory = NULL;
i = FM7_MAINMEM_BASICROM;
memset(fm7_mainmem_basicrom, 0xff, 0x7c00 * sizeof(uint8));
- read_table[i].dev = NULL;
+
read_table[i].memory = fm7_mainmem_basicrom;
- write_table[i].dev = NULL;
- write_table[i].memory = NULL;
#if !defined(_FM8)
if(read_bios("FBASIC302.ROM", fm7_mainmem_basicrom, 0x7c00) == 0x7c00) {
diag_load_basicrom = true;
i = FM7_MAINMEM_BIOSWORK;
memset(fm7_mainmem_bioswork, 0x00, 0x80 * sizeof(uint8));
- read_table[i].dev = NULL;
read_table[i].memory = fm7_mainmem_bioswork;
- write_table[i].dev = NULL;
write_table[i].memory = fm7_mainmem_bioswork;
#if defined(CAPABLE_DICTROM)
diag_load_dictrom = false;
i = FM7_MAINMEM_DICTROM;
memset(fm7_mainmem_dictrom, 0xff, 0x40000 * sizeof(uint8));
read_table[i].memory = fm7_mainmem_dictrom;
- write_table[i].memory = NULL;
if(read_bios("DICROM.ROM", fm7_mainmem_dictrom, 0x40000) == 0x40000) diag_load_dictrom = true;
emu->out_debug_log("DICTIONARY ROM READING : %s", diag_load_dictrom ? "OK" : "NG");
dictrom_connected = diag_load_dictrom;
if(!diag_load_learndata) write_bios("USERDIC.DAT", fm7_mainmem_learndata, 0x2000);
#endif
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
- i = FM7_MAINMEM_77AV40_EXTRAROM;
+ i = FM7_MAINMEM_77AV40_EXTRAROM;
+#if defined(_FM77AV40SX) || defined(_FM77AV40EX)
diag_load_extrarom = false;
- memset(fm7_mainmem_extrarom, 0xff, 0x20000 * sizeof(uint8));
+ memset(fm7_mainmem_extrarom, 0xff, sizeof(fm7_mainmem_extrarom));
read_table[i].memory = fm7_mainmem_extrarom;
- write_table[i].memory = NULL;
if(read_bios("EXTSUB.ROM", read_table[i].memory, 0xc000) == 0xc000) diag_load_extrarom = true;
- emu->out_debug_log("AV40 EXTRA ROM READING : %s", diag_load_extrarom ? "OK" : "NG");
+ emu->out_debug_log("AV40SX/EX EXTRA ROM READING : %s", diag_load_extrarom ? "OK" : "NG");
#endif
}
void FM7_MAINMEM::release()
{
# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
defined(_FM77_VARIANTS)
if(fm7_mainmem_extram != NULL) free(fm7_mainmem_extram);
#endif
state_fio->Fwrite(fm7_mainmem_mmrbank_0, sizeof(fm7_mainmem_mmrbank_0), 1);
state_fio->Fwrite(fm7_mainmem_mmrbank_2, sizeof(fm7_mainmem_mmrbank_2), 1);
-# if defined(CAPABLE_DICTROM)
+# if defined(_FM77AV40SX) || defined(_FM77AV40EX)
state_fio->FputBool(diag_load_extrarom);
state_fio->Fwrite(fm7_mainmem_extrarom, sizeof(fm7_mainmem_extrarom), 1);
+# endif
+# if defined(CAPABLE_DICTROM)
state_fio->Fwrite(fm7_mainmem_dictrom, sizeof(fm7_mainmem_dictrom), 1);
state_fio->Fwrite(fm7_mainmem_learndata, sizeof(fm7_mainmem_learndata), 1);
# endif
#ifdef HAS_MMR
state_fio->FputBool(extram_connected);
# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
defined(_FM77_VARIANTS)
int pages;
state_fio->FputInt32_BE(extram_pages);
state_fio->Fread(fm7_mainmem_mmrbank_0, sizeof(fm7_mainmem_mmrbank_0), 1);
state_fio->Fread(fm7_mainmem_mmrbank_2, sizeof(fm7_mainmem_mmrbank_2), 1);
-# if defined(CAPABLE_DICTROM)
+# if defined(_FM77AV40SX) || defined(_FM77AV40EX)
diag_load_extrarom = state_fio->FgetBool();
state_fio->Fread(fm7_mainmem_extrarom, sizeof(fm7_mainmem_extrarom), 1);
+# endif
+# if defined(CAPABLE_DICTROM)
state_fio->Fread(fm7_mainmem_dictrom, sizeof(fm7_mainmem_dictrom), 1);
state_fio->Fread(fm7_mainmem_learndata, sizeof(fm7_mainmem_learndata), 1);
# endif
#ifdef HAS_MMR
extram_connected = state_fio->FgetBool();
# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
- defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
defined(_FM77_VARIANTS)
int pages;
extram_pages = state_fio->FgetInt32_BE();