if (sy == 0) sy = sx;
int xx = x + sx * 8;
int yy = y + sy * 16;
- if (xx <= 0 || xx > v_xsiz || yy <= 0 || yy > v_ysiz)
+ if (xx <= 0 || xx > mainWindow.xsize || yy <= 0 || yy > mainWindow.ysize){
(*(r->errHndl))(r);
- if (x < 0 || x >= v_xsiz || y < 0 || y >= v_ysiz)
+ }
+ if (x < 0 || x >= mainWindow.xsize || y < 0 || y >= mainWindow.ysize){
(*(r->errHndl))(r);
+ }
int i, ddx, ddy, j, ch, dx, dy;
if ((mod & 3) == 0 && sx == 1 && sy == 1) {
for (dy = 0; dy < 16; dy++) {
j = fontdata[(ch - ' ') * 16 + dy];
for (dx = 0; dx < 8; dx++) {
- if ((j & (0x80 >> dx)) != 0) vram[(x + dx) + (y + dy) * v_xsiz] = c;
+ if ((j & (0x80 >> dx)) != 0){
+ mainWindow.vram[(x + dx) + (y + dy) * mainWindow.xsize] = c;
+ }
}
}
x += 8;
for (dx = 0; dx < 8; dx++) {
if ((j & (0x80 >> dx)) != 0) {
for (ddx = 0; ddx < sx; ddx++) {
- if ((mod & 3) == 0) vram[x + y * v_xsiz] = c;
- if ((mod & 3) == 1) vram[x + y * v_xsiz] |= c;
- if ((mod & 3) == 2) vram[x + y * v_xsiz] ^= c;
- if ((mod & 3) == 3) vram[x + y * v_xsiz] &= c;
+ switch (mod & 3) {
+ case 0:
+ mainWindow.vram[x + y * mainWindow.xsize] = c;
+ break;
+ case 1:
+ mainWindow.vram[x + y * mainWindow.xsize] |= c;
+ break;
+ case 2:
+ mainWindow.vram[x + y * mainWindow.xsize] ^= c;
+ break;
+ case 3:
+ mainWindow.vram[x + y * mainWindow.xsize] &= c;
+ break;
+ }
x++;
}
}
if (mod == 0) {
for (y = y0; y <= y1; y++) {
for (x = x0; x <= x1; x++) {
- vram[x + y * v_xsiz] = c;
+ mainWindow.vram[x + y * mainWindow.xsize] = c;
}
}
}
else {
for (y = y0; y <= y1; y++) {
for (x = x0; x <= x1; x++) {
- if (mod == 1) vram[x + y * v_xsiz] |= c;
- if (mod == 2) vram[x + y * v_xsiz] ^= c;
- if (mod == 3) vram[x + y * v_xsiz] &= c;
+ if (mod == 1) mainWindow.vram[x + y * mainWindow.xsize] |= c;
+ if (mod == 2) mainWindow.vram[x + y * mainWindow.xsize] ^= c;
+ if (mod == 3) mainWindow.vram[x + y * mainWindow.xsize] &= c;
}
}
}
if (r->winClosed != 0)
longjmp(*(r->setjmpEnv), 1);
if (0xff44 <= r->ireg[0x30] && r->ireg[0x30] <= 0xff48) {
- if (vram == NULL) {
- v_xsiz = 640;
- v_ysiz = 480;
- vram = malloc(640 * 480 * 4);
- drv_openWin(640, 480, (void *)vram, &r->winClosed);
+ if (mainWindow.vram == NULL) {
+ mainWindow.xsize = 640;
+ mainWindow.ysize = 480;
+ mainWindow.vram = malloc(640 * 480 * 4);
+ drv_openWin(640, 480, (void *)mainWindow.vram, &r->winClosed);
r->autoSleep = 1;
- for (i = 640 * 480 - 1; i >= 0; i--)
- vram[i] = 0;
+ for (i = 640 * 480 - 1; i >= 0; i--){
+ mainWindow.vram[i] = 0;
+ }
}
}
case 0xff40:
/* R31とR32でサイズを指定 */
- v_xsiz = r->ireg[0x31];
- v_ysiz = r->ireg[0x32];
- if (v_xsiz <= 0 || v_ysiz <= 0)
+ mainWindow.xsize = r->ireg[0x31];
+ mainWindow.ysize = r->ireg[0x32];
+ if (mainWindow.xsize <= 0 || mainWindow.ysize <= 0){
(*(r->errHndl))(r);
- r->preg[0x31].p = (void *)(vram = malloc(v_xsiz * v_ysiz * 4));
+ }
+ r->preg[0x31].p = (void *)(mainWindow.vram = malloc(mainWindow.xsize * mainWindow.ysize * 4));
r->preg[0x31].p0 = r->preg[0x31].p;
- r->preg[0x31].p1 = r->preg[0x31].p + v_xsiz * v_ysiz * 4;
+ r->preg[0x31].p1 = r->preg[0x31].p + mainWindow.xsize * mainWindow.ysize * 4;
drv_openWin(r->ireg[0x31], r->ireg[0x32], r->preg[0x31].p, &r->winClosed);
// drv_flshWin(r->ireg[1], r->ireg[2], 0, 0);
r->autoSleep = 1;
- for (i = v_xsiz * v_ysiz - 1; i >= 0; i--)
- vram[i] = 0;
+ for (i = mainWindow.xsize * mainWindow.ysize - 1; i >= 0; i--){
+ mainWindow.vram[i] = 0;
+ }
break;
case 0xff41:
/* R31とR32でサイズを指定、R33とR34でx0,y0指定 */
- if (r->ireg[0x31] == -1) { r->ireg[0x31] = v_xsiz; r->ireg[0x33] &= 0; }
- if (r->ireg[0x32] == -1) { r->ireg[0x32] = v_ysiz; r->ireg[0x34] &= 0; }
+ if (r->ireg[0x31] == -1) { r->ireg[0x31] = mainWindow.xsize; r->ireg[0x33] &= 0; }
+ if (r->ireg[0x32] == -1) { r->ireg[0x32] = mainWindow.ysize; r->ireg[0x34] &= 0; }
checkRect(r, 0x31);
drv_flshWin(r->ireg[0x31], r->ireg[0x32], r->ireg[0x33], r->ireg[0x34]);
break;
if (r->ireg[0x32] < 0)
(*(r->errHndl))(r);
r->autoSleep = 0;
- if ((r->ireg[0x31] & 1) == 0 && vram != NULL)
- drv_flshWin(v_xsiz, v_ysiz, 0, 0);
+ if ((r->ireg[0x31] & 1) == 0 && mainWindow.vram != NULL)
+ drv_flshWin(mainWindow.xsize, mainWindow.ysize, 0, 0);
for (;;) {
if (r->winClosed != 0)
longjmp(*(r->setjmpEnv), 1);
case 0xff44:
c = loadColor(r, 0x34);
- if (r->ireg[0x32] < 0 || r->ireg[0x32] >= v_xsiz || r->ireg[0x33] < 0 || r->ireg[0x33] >= v_ysiz)
+ if (r->ireg[0x32] < 0 || r->ireg[0x32] >= mainWindow.xsize || r->ireg[0x33] < 0 || r->ireg[0x33] >= mainWindow.ysize)
(*(r->errHndl))(r);
- if ((r->ireg[0x31] & 3) == 0) vram[r->ireg[0x32] + r->ireg[0x33] * v_xsiz] = c;
- if ((r->ireg[0x31] & 3) == 1) vram[r->ireg[0x32] + r->ireg[0x33] * v_xsiz] |= c;
- if ((r->ireg[0x31] & 3) == 2) vram[r->ireg[0x32] + r->ireg[0x33] * v_xsiz] ^= c;
- if ((r->ireg[0x31] & 3) == 3) vram[r->ireg[0x32] + r->ireg[0x33] * v_xsiz] &= c;
+ if ((r->ireg[0x31] & 3) == 0) mainWindow.vram[r->ireg[0x32] + r->ireg[0x33] * mainWindow.xsize] = c;
+ if ((r->ireg[0x31] & 3) == 1) mainWindow.vram[r->ireg[0x32] + r->ireg[0x33] * mainWindow.xsize] |= c;
+ if ((r->ireg[0x31] & 3) == 2) mainWindow.vram[r->ireg[0x32] + r->ireg[0x33] * mainWindow.xsize] ^= c;
+ if ((r->ireg[0x31] & 3) == 3) mainWindow.vram[r->ireg[0x32] + r->ireg[0x33] * mainWindow.xsize] &= c;
break;
case 0xff45:
//drawLine
c = loadColor(r, 0x36);
- if (r->ireg[0x32] < 0 || r->ireg[0x32] >= v_xsiz || r->ireg[0x33] < 0 || r->ireg[0x33] >= v_ysiz)
+ if (r->ireg[0x32] < 0 || r->ireg[0x32] >= mainWindow.xsize || r->ireg[0x33] < 0 || r->ireg[0x33] >= mainWindow.ysize)
(*(r->errHndl))(r);
- if (r->ireg[0x34] < 0 || r->ireg[0x34] >= v_xsiz || r->ireg[0x35] < 0 || r->ireg[0x35] >= v_ysiz)
+ if (r->ireg[0x34] < 0 || r->ireg[0x34] >= mainWindow.xsize || r->ireg[0x35] < 0 || r->ireg[0x35] >= mainWindow.ysize)
(*(r->errHndl))(r);
dx = r->ireg[0x34] - r->ireg[0x32];
dy = r->ireg[0x35] - r->ireg[0x33];
}
if ((r->ireg[0x31] & 3) == 0) {
for (i = 0; i < len; i++) {
- vram[(x >> 10) + (y >> 10) * v_xsiz] = c;
+ mainWindow.vram[(x >> 10) + (y >> 10) * mainWindow.xsize] = c;
x += dx;
y += dy;
}
}
for (i = 0; i < len; i++) {
// if ((r->ireg[0x31] & 3) == 0) vram[(x >> 10) + (y >> 10) * v_xsiz] = c;
- if ((r->ireg[0x31] & 3) == 1) vram[(x >> 10) + (y >> 10) * v_xsiz] |= c;
- if ((r->ireg[0x31] & 3) == 2) vram[(x >> 10) + (y >> 10) * v_xsiz] ^= c;
- if ((r->ireg[0x31] & 3) == 3) vram[(x >> 10) + (y >> 10) * v_xsiz] &= c;
+ if ((r->ireg[0x31] & 3) == 1) mainWindow.vram[(x >> 10) + (y >> 10) * mainWindow.xsize] |= c;
+ if ((r->ireg[0x31] & 3) == 2) mainWindow.vram[(x >> 10) + (y >> 10) * mainWindow.xsize] ^= c;
+ if ((r->ireg[0x31] & 3) == 3) mainWindow.vram[(x >> 10) + (y >> 10) * mainWindow.xsize] &= c;
x += dx;
y += dy;
}
case 0xff46: // fillRect(opt:R31, xsiz:R32, ysiz:R33, x0:R34, y0:R35, c:R36)
c = loadColor(r, 0x36);
- if (r->ireg[0x32] == -1) { r->ireg[0x32] = v_xsiz; r->ireg[0x34] &= 0; }
- if (r->ireg[0x33] == -1) { r->ireg[0x33] = v_ysiz; r->ireg[0x35] &= 0; }
+ if (r->ireg[0x32] == -1) { r->ireg[0x32] = mainWindow.xsize; r->ireg[0x34] &= 0; }
+ if (r->ireg[0x33] == -1) { r->ireg[0x33] = mainWindow.ysize; r->ireg[0x35] &= 0; }
checkRect(r, 0x32);
int mod3 = r->ireg[0x31] & 3, x0 = r->ireg[0x34], y0 = r->ireg[0x35], x1 = r->ireg[0x34] + r->ireg[0x32] - 1, y1 = r->ireg[0x35] + r->ireg[0x33] - 1;
if ((r->ireg[0x31] & 0x20) == 0) {
case 0xff47: // fillOval(opt:R31, xsiz:R32, ysiz:R33, x0:R34, y0:R35, c:R36)
// これの計算精度はアーキテクチャに依存する.
c = loadColor(r, 0x36);
- if (r->ireg[0x32] == -1) { r->ireg[0x32] = v_xsiz; r->ireg[0x34] &= 0; }
- if (r->ireg[0x33] == -1) { r->ireg[0x33] = v_ysiz; r->ireg[0x35] &= 0; }
+ if (r->ireg[0x32] == -1) { r->ireg[0x32] = mainWindow.xsize; r->ireg[0x34] &= 0; }
+ if (r->ireg[0x33] == -1) { r->ireg[0x33] = mainWindow.ysize; r->ireg[0x35] &= 0; }
checkRect(r, 0x32);
double dcx = 0.5 * (r->ireg[0x32] - 1), dcy = 0.5 * (r->ireg[0x33] - 1), dcxy = (dcx + 0.5) * (dcy + 0.5) - 0.1;
dcxy *= dcxy;
for (x = 0; x < x1; x++) {
double dtx = (x - dcx) * dcy;
if (dtx * dtx + dty * dty > dcxy) continue;
- vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * v_xsiz] = c;
+ mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] = c;
}
}
}
if (DRAWOVALPARAM <= x && x < x1 - DRAWOVALPARAM && DRAWOVALPARAM <= y && y < y1 - DRAWOVALPARAM) {
if (dtx1 * dtx1 + dty1 * dty1 < dcxy1) continue;
}
- if (mod3 == 0) vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * v_xsiz] = c;
- if (mod3 == 1) vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * v_xsiz] |= c;
- if (mod3 == 2) vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * v_xsiz] ^= c;
- if (mod3 == 3) vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * v_xsiz] &= c;
+ if (mod3 == 0) mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] = c;
+ if (mod3 == 1) mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] |= c;
+ if (mod3 == 2) mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] ^= c;
+ if (mod3 == 3) mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] &= c;
}
}
}
dx = r->ireg[0x34];
dy = r->ireg[0x35];
if (dy == 0) dy = dx;
- if (r->ireg[0x32] == -1) { r->ireg[0x32] = v_xsiz / dx; r->ireg[0x36] &= 0; }
- if (r->ireg[0x33] == -1) { r->ireg[0x33] = v_ysiz / dy; r->ireg[0x37] &= 0; }
+ if (r->ireg[0x32] == -1) { r->ireg[0x32] = mainWindow.xsize / dx; r->ireg[0x36] &= 0; }
+ if (r->ireg[0x33] == -1) { r->ireg[0x33] = mainWindow.ysize / dy; r->ireg[0x37] &= 0; }
for (y = 0; y < r->ireg[0x33]; y++) {
y0 = y * dy + r->ireg[0x37];
for (x = 0; x < r->ireg[0x32]; x++) {