#if defined(SUPPORT_EGC)
enable_egc = false;
-// if(modereg2[MODE2_EGC_WP] != 0) {
- // enable_egc = ((is_use_egc) && (modereg2[MODE2_EGC] != 0)) ? true : false;
-// }
+ //if(modereg2[MODE2_EGC_WP] != 0) {
+ //enable_egc = ((is_use_egc) && (modereg2[MODE2_EGC] != 0)) ? true : false;
+ // }
#endif
egc_access = 0xfff0;
egc_fgbg = 0x00ff;
grcg_plane_enabled[i] = ((grcg_mode & (1 << i)) == 0) ? true : false;
}
grcg_tile_ptr = 0;
+ //out_debug_log("GRCG MODEREG=%02x CG_MODE=%s RW_MODE=%s PLANE=%s%s%s%s\n", data, (grcg_cg_mode) ? "Yes" : "No", (grcg_rw_mode) ? "Yes" : "No", (grcg_plane_enabled[0]) ? "B" : " ", (grcg_plane_enabled[1]) ? "R" : " ", (grcg_plane_enabled[2]) ? "G" : " ", (grcg_plane_enabled[3]) ? "W" : " ");
break;
#if !defined(SUPPORT_HIRESO)
case 0x007e:
#else
case 0x00a6:
#endif
+ //out_debug_log("SET TILE #%d to %02X\n", grcg_tile_ptr, data);
grcg_tile[grcg_tile_ptr] = data;
- grcg_tile_word[grcg_tile_ptr] = grcg_tile[grcg_tile_ptr] | ((uint16_t)(grcg_tile[grcg_tile_ptr]) << 8);
+ grcg_tile_word[grcg_tile_ptr] = ((uint16_t)grcg_tile[grcg_tile_ptr]) | ((uint16_t)grcg_tile[grcg_tile_ptr] << 8);
grcg_tile_ptr = (grcg_tile_ptr + 1) & 3;
break;
#endif
#endif
}
vram_disp_sel = data;
+ //out_debug_log("SET DISPLAY PAGE=%d\n", (data & 1));
break;
case 0x00a6:
if(data & 1) {
vram_draw = vram + 0x00000;
}
vram_draw_sel = data;
+ //out_debug_log("SET DRAW PAGE=%d\n", (data & 1));
break;
#endif
// palette
palette_gfx8[7] = RGB_COLOR((data & 2) ? 0xff : 0, (data & 4) ? 0xff : 0, (data & 1) ? 0xff : 0);
data >>= 4;
palette_gfx8[3] = RGB_COLOR((data & 2) ? 0xff : 0, (data & 4) ? 0xff : 0, (data & 1) ? 0xff : 0);
+ //out_debug_log("SET DIGITAL PALETTE #3 %d %d\n", data & 7, (data >> 4) & 7);
break;
case 0xaa:
#if defined(SUPPORT_16_COLORS)
palette_gfx8[5] = RGB_COLOR((data & 2) ? 0xff : 0, (data & 4) ? 0xff : 0, (data & 1) ? 0xff : 0);
data >>= 4;
palette_gfx8[1] = RGB_COLOR((data & 2) ? 0xff : 0, (data & 4) ? 0xff : 0, (data & 1) ? 0xff : 0);
+ //out_debug_log("SET DIGITAL PALETTE #1 %d %d\n", data & 7, (data >> 4) & 7);
break;
case 0xac:
#if defined(SUPPORT_16_COLORS)
palette_gfx8[6] = RGB_COLOR((data & 2) ? 0xff : 0, (data & 4) ? 0xff : 0, (data & 1) ? 0xff : 0);
data >>= 4;
palette_gfx8[2] = RGB_COLOR((data & 2) ? 0xff : 0, (data & 4) ? 0xff : 0, (data & 1) ? 0xff : 0);
+ //out_debug_log("SET DIGITAL PALETTE #2 %d %d\n", data & 7, (data >> 4) & 7);
break;
case 0xae:
#if defined(SUPPORT_16_COLORS)
palette_gfx8[4] = RGB_COLOR((data & 2) ? 0xff : 0, (data & 4) ? 0xff : 0, (data & 1) ? 0xff : 0);
data >>= 4;
palette_gfx8[0] = RGB_COLOR((data & 2) ? 0xff : 0, (data & 4) ? 0xff : 0, (data & 1) ? 0xff : 0);
+ //out_debug_log("SET DIGITAL PALETTE #0 %d %d\n", data & 7, (data >> 4) & 7);
break;
// cg window
case 0xa1:
vram_draw[0x1ffff] = d.b.l;
vram_draw[0x00000] = d.b.h;
} else {
- *(uint16_t *)(&vram_draw[addr & 0x1ffff]) = data;
+ *(uint16_t *)(&vram_draw[addr & 0x1fffe]) = data;
}
}
}
d.b.h = vram_draw[0x00000];
return (uint32_t)(d.w);
}
- return *(uint16_t *)(&vram_draw[addr & 0x1ffff]);
+ return *(uint16_t *)(&vram_draw[addr & 0x1fffe]);
}
}
__DECL_ALIGNED(4) uint8_t bit_data[4];
uint8_t* p = vram_draw;
for(int i = 0; i < 4; i++) {
- //if(grcg_plane_enabled[i]) {
- plane_data[i] = p[plane_offset[i]];
- //}
+ plane_data[i] = p[plane_offset[i]];
}
__DECL_VECTORIZED_LOOP
__DECL_VECTORIZED_LOOP
for(int i = 0; i < 4; i++) {
data |= (grcg_plane_enabled[i]) ? dsum[i] : 0;
- // if(grcg_plane_enabled[i]) {
- // data |= dsum[i];
- // }
+ //data |= dsum[i];
}
/*
if(!(grcg_mode & GRCG_PLANE_0)) {
grcg_plane_enabled[i] = ((grcg_mode & (1 << i)) == 0) ? true : false;;
}
for(int i = 0; i < 4; i++) {
- grcg_tile_word[i] = ((uint16_t)(grcg_tile[i]) << 8) | grcg_tile[i];
+ grcg_tile_word[i] = ((uint16_t)grcg_tile[i]) | ((uint16_t)grcg_tile[i] << 8);
}
#endif
#endif
void UPD7220::cmd_vecte()
{
- //dx = ((ead % pitch) << 4) | (dad & 0x0f);
- //dy = ead / pitch;
- if(_UPD7220_UGLY_PC98_HACK) {
-// if(ead >= 0x20000) { // Negative
-// ead = -(ead & 0x1ffff);
-// }
- dx = (((ead & 0x3fff)% pitch) << 4) | (dad & 0x0f);
- dy = (ead & 0x3fff) / pitch;
- } else {
- dx = ((ead % pitch) << 4) | (dad & 0x0f);
- dy = ead / pitch;
- }
+ dx = ((ead % pitch) << 4) | (dad & 0x0f);
+ dy = ead / pitch;
wrote_bytes = 1;
// execute command
void UPD7220::cmd_texte()
{
if(_UPD7220_UGLY_PC98_HACK) {
-// if(ead >= 0x20000) { // Negative
-// ead = -(ead & 0x1ffff);
-// }
dx = (((ead & 0x3fff)% pitch) << 4) | (dad & 0x0f);
dy = (ead & 0x3fff) / pitch;
} else {
dx = ((ead % pitch) << 4) | (dad & 0x0f);
dy = ead / pitch;
}
-// dx = ((ead % pitch) << 4) | (dad & 0x0f);
-// dy = ead / pitch;
wrote_bytes = 1;
// execute command
d2 = (vect[5] | (vect[ 6] << 8)) & 0x3fff;
d1 = (vect[7] | (vect[ 8] << 8)) & 0x3fff;
dm = (vect[9] | (vect[10] << 8)) & 0x3fff;
+ dgd = ((vect[2] & 0x40) != 0) ? true : false;
// if(dc & 0x2000) dc = -(dc & 0x1fff);
// if(d & 0x2000) d = -(d & 0x1fff);
// if(d2 & 0x2000) d2 = -(d2 & 0x1fff);
}
-// draw
-void UPD7220::draw_hline_diff(int xstart, int y, int xend)
-{
- int nshift = 0;
- int lwidth;
- int nwidth = width << 3;
- uint16_t dot;
- int begin = 0;
- int end = 0;
- int dir = ((xstart == xend) ? 0 : ((xstart < xend) ? 1 : -1));
-
- // Out of range, dummy shift.
- bool req_outbound = false;
- if(_UPD7220_UGLY_PC98_HACK) {
- if(((xstart < 0) && (xend < 0)) ||
- ((xstart >= nwidth) && (xend >= nwidth)) ||
- ((y > 409) || ((y == 409) && ((xstart >= 384) && (xend >= 384)))) ||
- (y < 0)) {
- req_outbound = true;
- }
- } else {
- if((y >= height) || (y < 0) ||
- ((xstart < 0) && (xend < 0)) ||
- ((xstart >= nwidth) && (xend >= nwidth))) {
- req_outbound = true;
- }
- }
- if(req_outbound) {
- int bits = xstart - xend;
-// shift_pattern(bits);
- return;
- }
-
- // ToDo: WORD write
- if(dir == 0) {
- start_pset();
- draw_pset(xstart, y);
- finish_pset();
- } else if(dir < 0) {
- int xstart2 = xstart;
- if((_UPD7220_UGLY_PC98_HACK) && ((y == 409) && (xstart >= 384))) xstart2 = 383;
- int rshift = xstart2 - nwidth;
-// shift_pattern(rshift);
- if(xstart >= nwidth) {
- xstart = nwidth - 1;
- }
- start_pset();
- for(int x = xstart2; x >= ((xend < 0) ? 0 : xend); x--) {
- draw_pset(x, y);
- }
- finish_pset();
- if(xend < 0) {
- int lshift = xend;
-// shift_pattern(lshift);
- }
- } else { // dir > 0
- int xend2 = xend;
- if((_UPD7220_UGLY_PC98_HACK) && ((y == 409) && (xend >= 384))) xend2 = 383;
- if(xstart < 0) {
- int rshift = 0 - xstart;
-// shift_pattern(rshift);
- xstart = 0;
- }
- start_pset();
- for(int x = xstart; x <= ((xend2 >= nwidth) ? (nwidth - 1) : xend2); x++) {
- draw_pset(x, y);
- }
- finish_pset();
- if(xend >= nwidth) {
- int lshift = xend2 - nwidth;
-// shift_pattern(lshift);
- }
- }
-}
void UPD7220::draw_vectl()
{
pattern = ra[8] | (ra[9] << 8);
-// out_debug_log(_T("DRAW VECTL: X=%d Y=%d to DC=%d DIR=%d PATTERN=%04x MODE=%d\n"), dx, dy, dc, dir, pattern, mod);
+ //out_debug_log(_T("DRAW VECTL: X=%d Y=%d to DC=%d D1=%d DIR=%d PATTERN=%04x MODE=%d\n"), dx, dy, dc, d1, dir, pattern, mod);
dc = dc & 0x3fff;
if(dc) {
int x = dx;
int stepy = 0;
int stepn = 0;
- //step = (((d1 << 14) / dc) + (1 << 14)) >> 1;
+ step = (((d1 << 12) / dc)) >> 1;
//stepn = step & ((1 << 14) - 1);
+ start_pset();
switch(dir) {
case 0:
- start_pset();
for(int i = 0; i <= dc; i++) {
- stepx = (int)((((d1 * i) / dc) + 1) >> 1);
- //stepx += (step >> 14);
- //stepn += stepn;
- //if(stepn >= (1 << 14)) {
- // stepn = stepn - (1 << 14);
- // stepx++;
- //}
- draw_pset(x + stepx, y++);
+ //stepx = (int)((((d1 * i) / dc) + 1) >> 1);
+ stepx += step;
+ draw_pset_diff(x + (stepx >> 12), y++);
}
- finish_pset();
break;
case 1:
- start_pset();
for(int i = 0; i <= dc; i++) {
- stepy = (int)((((d1 * i) / dc) + 1) >> 1);
- //stepy += (step >> 14);
- //stepn += stepn;
- //if(stepn >= (1 << 14)) {
- // stepn = stepn - (1 << 14);
- // stepy++;
- //}
- draw_pset(x++, y + stepy);
+ //stepy = (int)((((d1 * i) / dc) + 1) >> 1);
+ stepy += step;
+ draw_pset_diff(x++, y + (stepy >> 12));
}
- finish_pset();
break;
case 2:
- start_pset();
for(int i = 0; i <= dc; i++) {
- stepy = (int)((((d1 * i) / dc) + 1) >> 1);
- //stepy += (step >> 14);
- //stepn += stepn;
- //if(stepn >= (1 << 14)) {
- // stepn = stepn - (1 << 14);
- // stepy++;
- //}
- draw_pset(x++, y - stepy);
- //draw_pset(x++, y - step);
+ //stepy = (int)((((d1 * i) / dc) + 1) >> 1);
+ stepy += step;
+ draw_pset_diff(x++, y - (stepy >> 12));
+ //draw_pset_diff(x++, y - step);
}
- finish_pset();
break;
case 3:
- start_pset();
for(int i = 0; i <= dc; i++) {
- stepx = (int)((((d1 * i) / dc) + 1) >> 1);
- //stepx += (step >> 14);
- //stepn += stepn;
- //if(stepn >= (1 << 14)) {
- // stepn = stepn - (1 << 14);
- // stepx++;
- //}
- draw_pset(x + stepx, y--);
+ //stepx = (int)((((d1 * i) / dc) + 1) >> 1);
+ stepx += step;
+ draw_pset_diff(x + (stepx >> 12), y--);
}
- finish_pset();
break;
case 4:
- start_pset();
for(int i = 0; i <= dc; i++) {
- stepx = (int)((((d1 * i) / dc) + 1) >> 1);
- //stepx += (step >> 14);
- //stepn += stepn;
- //if(stepn >= (1 << 14)) {
- // stepn = stepn - (1 << 14);
- // stepx++;
- //}
- draw_pset(x - stepx, y--);
+ //stepx = (int)((((d1 * i) / dc) + 1) >> 1);
+ stepx += step;
+ draw_pset_diff(x - (stepx >> 12), y--);
}
- finish_pset();
break;
case 5:
- start_pset();
for(int i = 0; i <= dc; i++) {
- stepy = (int)((((d1 * i) / dc) + 1) >> 1);
- //stepy += (step >> 14);
- //stepn += stepn;
- //if(stepn >= (1 << 14)) {
- // stepn = stepn - (1 << 14);
- // stepy++;
- //}
- draw_pset(x--, y - stepy);
+// stepy = (int)((((d1 * i) / dc) + 1) >> 1);
+ stepy += step;
+ draw_pset_diff(x--, y - (stepy >> 12));
}
- finish_pset();
break;
case 6:
- start_pset();
for(int i = 0; i <= dc; i++) {
- stepy = (int)((((d1 * i) / dc) + 1) >> 1);
- //stepy += (step >> 14);
- //stepn += stepn;
- //if(stepn >= (1 << 14)) {
- // stepn = stepn - (1 << 14);
- // stepy++;
- //}
- draw_pset(x--, y + stepy);
+// stepy = (int)((((d1 * i) / dc) + 1) >> 1);
+ stepy += step;
+ draw_pset_diff(x--, y + (stepy >> 12));
}
- finish_pset();
break;
case 7:
- start_pset();
- //step = (int)((((d1 << 14) / dc) + (1 << 14)) >> 1);
for(int i = 0; i <= dc; i++) {
- stepx = (int)((((d1 * i) / dc) + 1) >> 1);
- //stepx += (step >> 14);
- //stepn += stepn;
- //if(stepn >= (1 << 14)) {
- // stepn = stepn - (1 << 14);
- // stepx++;
- //}
- draw_pset(x - stepx, y++);
+ //stepx = (int)((((d1 * i) / dc) + 1) >> 1);
+ stepx += step;
+ draw_pset_diff(x - (stepx >> 12), y++);
}
- finish_pset();
break;
}
+ finish_pset();
} else {
start_pset();
- draw_pset(dx, dy);
+ draw_pset_diff(dx, dy);
finish_pset();
wrote_bytes++;
}
int xbak = dx;
int ybak = dy;
if(m) {
+ start_pset();
switch(dir) {
case 0:
- start_pset();
for(int i = dm; i <= t; i++) {
int s = (rt[(i << RT_TABLEBIT) / m] * d);
s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT;
- draw_pset((dx + s), (dy + i));
+ draw_pset_diff((dx + s), (dy + i));
}
- finish_pset();
break;
case 1:
- start_pset();
for(int i = dm; i <= t; i++) {
int s = (rt[(i << RT_TABLEBIT) / m] * d);
s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT;
- draw_pset((dx + i), (dy + s));
+ draw_pset_diff((dx + i), (dy + s));
}
- finish_pset();
break;
case 2:
- start_pset();
for(int i = dm; i <= t; i++) {
int s = (rt[(i << RT_TABLEBIT) / m] * d);
s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT;
- draw_pset((dx + i), (dy - s));
+ draw_pset_diff((dx + i), (dy - s));
}
- finish_pset();
break;
case 3:
- start_pset();
for(int i = dm; i <= t; i++) {
int s = (rt[(i << RT_TABLEBIT) / m] * d);
s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT;
- draw_pset((dx + s), (dy - i));
+ draw_pset_diff((dx + s), (dy - i));
}
- finish_pset();
break;
case 4:
- start_pset();
for(int i = dm; i <= t; i++) {
int s = (rt[(i << RT_TABLEBIT) / m] * d);
s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT;
- draw_pset((dx - s), (dy - i));
+ draw_pset_diff((dx - s), (dy - i));
}
- finish_pset();
break;
case 5:
- start_pset();
for(int i = dm; i <= t; i++) {
int s = (rt[(i << RT_TABLEBIT) / m] * d);
s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT;
- draw_pset((dx - i), (dy - s));
+ draw_pset_diff((dx - i), (dy - s));
}
- finish_pset();
break;
case 6:
start_pset();
for(int i = dm; i <= t; i++) {
int s = (rt[(i << RT_TABLEBIT) / m] * d);
s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT;
- draw_pset((dx - i), (dy + s));
+ draw_pset_diff((dx - i), (dy + s));
}
- finish_pset();
break;
case 7:
- start_pset();
for(int i = dm; i <= t; i++) {
int s = (rt[(i << RT_TABLEBIT) / m] * d);
s = (s + (1 << (RT_MULBIT - 1))) >> RT_MULBIT;
- draw_pset((dx - s), (dy + i));
+ draw_pset_diff((dx - s), (dy + i));
}
- finish_pset();
break;
}
+ finish_pset();
} else {
- draw_pset(dx, dy);
+ start_pset();
+ draw_pset_diff(dx, dy);
+ finish_pset();
//wrote_bytes++;
}
}
int vx2 = vectdir[dir][2];
int vy2 = vectdir[dir][3];
int nwidth = width <<3;
-
int xbak = dx;
int ybak = dy;
pattern = ra[8] | (ra[9] << 8);
-
-
+// out_debug_log(_T("DRAW VECTR: X=%d Y=%d to DC=%d DIR=%d PATTERN=%04x MODE=%d VX1=%d VY1=%d VX2=%d VY2=%d\n"), dx, dy, dc, dir, pattern, mod, vx1, vy1, vx2, vy2);
start_pset();
- if(vy1 == 0) {
- if(vx1 == 0) {
- draw_pset(dx, dy);
- } else {
- draw_hline_diff(dx, dy, (vx1 < 0) ? (dx - d) : (dx + d));
- }
- } else {
- start_pset();
- for(int i = 0; i < d; i++) {
- draw_pset(dx, dy);
- dx += vx1;
- dy += vy1;
- }
- finish_pset();
+ for(int c = 0; c < d; c++) {
+ draw_pset_diff(dx, dy);
+ dx += vx1;
+ dy += vy1;
}
- xbak += (vx1 * d);
- ybak += (vy1 * d);
- finish_pset();
- dx = xbak;
- dy = ybak;
- start_pset();
- if(vy2 == 0) {
- if(vx2 == 0) {
- draw_pset(dx, dy);
- } else {
- draw_hline_diff(dx, dy, (vx2 < 0) ? (dx - d2) : (dx + d2));
- }
- } else {
- start_pset();
- for(int i = 0; i < d2; i++) {
- draw_pset(dx, dy);
- dx += vx2;
- dy += vy2;
- }
- finish_pset();
+ for(int c = 0; c < d2; c++) {
+ draw_pset_diff(dx, dy);
+ dx += vx2;
+ dy += vy2;
}
- xbak += (vx2 * d2);
- ybak += (vy2 * d2);
- finish_pset();
- dx = xbak;
- dy = ybak;
- start_pset();
- if(vy1 == 0) {
- if(vx1 == 0) {
- draw_pset(dx, dy);
- } else {
- draw_hline_diff(dx, dy, (vx1 < 0) ? (dx - d) : (dx + d));
- }
- } else {
- start_pset();
- for(int i = 0; i < d; i++) {
- draw_pset(dx, dy);
- dx -= vx1;
- dy -= vy1;
- }
- finish_pset();
+ for(int c = 0; c < d; c++) {
+ draw_pset_diff(dx, dy);
+ dx -= vx1;
+ dy -= vy1;
}
- xbak -= (vx1 * d);
- ybak -= (vy1 * d);
- finish_pset();
- dx = xbak;
- dy = ybak;
-
- if(vy2 == 0) {
- if(vx2 == 0) {
- draw_pset(dx, dy);
- } else {
- draw_hline_diff(dx, dy, (vx2 < 0) ? (dx - d2) : (dx + d2));
- }
- } else {
- for(int i = 0; i < d2; i++) {
- draw_pset(dx, dy);
- dx -= vx2;
- dy -= vy2;
- }
+ for(int c = 0; c < d2; c++) {
+ draw_pset_diff(dx, dy);
+ dx -= vx2;
+ dy -= vy2;
}
- xbak -= (vx2 * d2);
- ybak -= (vy2 * d2);
+
+ finish_pset();
+// dx = xbak;
+// dy = ybak;
- dx = xbak;
- dy = ybak;
// ead = (dx >> 4) + dy * pitch;
// dad = dx & 0x0f;
}
-#define STATE_VERSION 8
+#define STATE_VERSION 9
bool UPD7220::process_state(FILEIO* state_fio, bool loading)
{
state_fio->StateValue(d1);
state_fio->StateValue(dm);
state_fio->StateValue(pattern);
+ state_fio->StateValue(dgd);
state_fio->StateValue(clock_freq);
state_fio->StateValue(wrote_bytes);
int rt[RT_TABLEMAX + 1];
int dx, dy; // from ead, dad
int dir, dif, sl, dc, d, d2, d1, dm;
+ bool dgd;
uint16_t pattern;
const int vectdir[16][4] = {
{ 0, 1, 1, 0}, { 1, 1, 1,-1}, { 1, 0, 0,-1}, { 1,-1,-1,-1},
inline void start_pset();
inline void finish_pset();
inline bool draw_pset_diff(int x, int y);
- void draw_hline_diff(int xstart, int y, int xend);
inline void shift_pattern(int shift);
public:
inline void UPD7220::draw_pset(int x, int y)
{
+ uint32_t addr = y * width + (x >> 3);
if(_UPD7220_UGLY_PC98_HACK) {
- if((y == 409) && (x >= 384)) return;
- if(y > 409) return;
- if((x < 0) || (y < 0) || (x >= (width << 3))) return;
+// if(addr >= 0x8000) return;
+// if((y == 409) && (x >= 384)) return;
+// if(y > 409) return;
+// if((x < 0) || (y < 0) || (x >= (width << 3))) return;
+// addr = addr & 0x7fff;
} else {
if((x < 0) || (y < 0) || (x >= (width << 3)) || (y >= height)) return;
}
uint16_t dot = pattern & 1;
pattern = (pattern >> 1) | (dot << 15);
- uint32_t addr = y * width + (x >> 3);
uint8_t bit;
if(_UPD7220_MSB_FIRST) {
bit = 0x80 >> (x & 7);
uint32_t addr = y * width + (x >> 3);
uint8_t bit;
- if(_UPD7220_UGLY_PC98_HACK) {
- if((y > 409) || ((y == 409) && x >= 384)){
- finish_pset();
- return false;
- }
- else if((x < 0) || (y < 0) || (x >= (width << 3))) {
- finish_pset();
- return false;
- }
- } else if((x < 0) || (y < 0) || (x >= (width << 3)) || (y >= height)) {
- finish_pset();
- return false;
- }
+// if(_UPD7220_UGLY_PC98_HACK) {
+// if(addr >= 0x8000) {
+// if((y > 409) || ((y == 409) && x >= 384)){
+// finish_pset();
+// return false;
+// }
+// else if((x < 0) || (y < 0) || (x >= (width << 3))) {
+// finish_pset();
+// return false;
+// }
+// } else if((x < 0) || (y < 0) || (x >= (width << 3)) || (y >= height)) {
+// finish_pset();
+// return false;
+// }
if((first_load) || (addr != before_addr)) {
if(!(first_load)) {
write_vram(before_addr, cache_val);