}
x++;
}
- }
- else
+ } else{
x += sx;
+ }
}
x -= sx * 8;
y++;
else {
for (y = y0; y <= y1; y++) {
for (x = x0; x <= x1; x++) {
- 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;
- }
+ switch (mod) {
+ 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;
+ }
+ }
}
}
return;
{
int i = 0, base, j, k;
char sign;
+
while (plen > 0) {
- if (i >= buflen)
+ if (i >= buflen){
(*(r->errHndl))(r);
+ }
if (*p != 0x01) {
buf[i++] = *p++;
plen--;
}
p++;
plen--;
- if (qlen < 4)
+ if (qlen < 4){
(*(r->errHndl))(r);
+ }
base = q[0];
sign = 0;
- if (base == 0) base = 16;
+ if (base == 0){
+ base = 16;
+ }
#if (REVISION == 1)
- if (base == -3) base = 10;
+ if (base == -3){
+ base = 10;
+ }
#endif
- if (base == -1) base = 10;
- if (base < 0 || base > 16)
+ if (base == -1){
+ base = 10;
+ }
+ if (base < 0 || base > 16){
(*(r->errHndl))(r);
- if (q[1] + i > buflen)
+ }
+ if (q[1] + i > buflen){
(*(r->errHndl))(r);
+ }
j = q[3];
if ((q[2] & 4) == 0) {
// jは符号付き整数.
- if ((q[2] & 8) != 0 && j > 0) sign = '+';
- if (j < 0) { sign = '-'; j *= -1; }
- }
- else {
+ if ((q[2] & 8) != 0 && j > 0){
+ sign = '+';
+ }
+ if (j < 0) {
+ sign = '-'; j *= -1;
+ }
+ } else{
// jは符号無し整数.
- if ((q[2] & 8) != 0 && j != 0) sign = '+';
+ if ((q[2] & 8) != 0 && j != 0){
+ sign = '+';
+ }
}
for (k = q[1] - 1; k >= 0; k--) {
buf[i + k] = (j % base) + 0x10;
k = 0;
if ((q[2] & 2) == 0 && j == 0) {
for (k = 0; k < q[1] - 1; k++) {
- if (buf[i + k] != 0x10) break;
+ if (buf[i + k] != 0x10){
+ break;
+ }
buf[i + k] = ' ';
}
}
if (sign != 0) {
- if (k > 0) k--;
+ if (k > 0){
+ k--;
+ }
buf[i + k] = sign;
}
if ((q[2] & 1) != 0 && buf[i] == ' ') {
- for (j = 0; k < q[1]; k++, j++)
+ for (j = 0; k < q[1]; k++, j++){
buf[i + j] = buf[i + k];
+ }
i += j;
- }
- else
+ } else{
i += q[1];
+ }
qlen -= 4;
q += 4;
}
void devFunc(HOSECPU_RuntimeEnvironment *r)
{
FILE *fp;
- r = (HOSECPU_RuntimeEnvironment *) (((char *)r) - 128); /* サイズを節約するためにEBPを128バイトずらしているのを元に戻す */
- int i, c;
+ int i, c;
int x, y, len, dx, dy;
unsigned char *puc;
unsigned char pucbuf[256];
- if (r->winClosed != 0)
+
+ //サイズを節約するためにEBPを128バイトずらしているのを元に戻す
+ r = (HOSECPU_RuntimeEnvironment *) (((char *)r) - 128);
+
+ if (r->winClosed != 0){
longjmp(*(r->setjmpEnv), 1);
+ }
if (0xff44 <= r->ireg[0x30] && r->ireg[0x30] <= 0xff48) {
if (mainWindow.vram == NULL) {
mainWindow.xsize = 640;
}
}
- switch (r->ireg[0x30]) {
+ switch (r->ireg[0x30]){
case 0xff00:
printf("R31=%d(dec)\n", r->ireg[0x31]);
break;
case 0xff01:
/* return: R30, P31 */
- if (r->buf0 == NULL)
+ if (r->buf0 == NULL){
r->buf0 = malloc(1024 * 1024);
+ }
if (r->mainArgc <= r->ireg[0x31]) {
fprintf(stderr, "devFunc: error: R30=ff01: argc error: R31=%08X\n", r->ireg[0x31]);
exit(1);
case 0xff03:
/* return: P31 */
- if (r->buf1 == NULL)
+ if (r->buf1 == NULL){
r->buf1 = malloc(1024 * 1024);
+ }
r->preg[0x31].p = r->buf1;
r->preg[0x31].p0 = r->buf1;
r->preg[0x31].p1 = r->buf1 + 1024 * 1024;
// R32: level
// R33: debugInfo1
checkString(r, 0x34, 0x31);
- if (r->ireg[0x33] < 0 || r->ireg[0x33] > 15 || r->debugInfo1 > 15)
+ if (r->ireg[0x33] < 0 || r->ireg[0x33] > 15 || r->debugInfo1 > 15){
(*(r->errHndl))(r);
- for (i = 0; i < r->maxLabels; i++)
+ }
+ for (i = 0; i < r->maxLabels; i++){
r->label[i].opt = 0;
+ }
puc = r->preg[0x31].p;
i = jitCompiler(r->jitbuf, r->jitbuf1, puc, puc + r->ireg[0x34], puc, r->label, r->maxLabels, r->ireg[0x32], di1_serial, JITC_NOSTARTUP + 0);
if (i == 0) {
case 0xff41:
/* R31とR32でサイズを指定、R33とR34でx0,y0指定 */
- 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; }
+ 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;
r->autoSleep = 1;
longjmp(*(r->setjmpEnv), 1);
}
- if (r->ireg[0x32] < 0)
+ if (r->ireg[0x32] < 0){
(*(r->errHndl))(r);
+ }
r->autoSleep = 0;
- if ((r->ireg[0x31] & 1) == 0 && mainWindow.vram != NULL)
+ if ((r->ireg[0x31] & 1) == 0 && mainWindow.vram != NULL){
drv_flshWin(mainWindow.xsize, mainWindow.ysize, 0, 0);
+ }
for (;;) {
- if (r->winClosed != 0)
+ if (r->winClosed != 0){
longjmp(*(r->setjmpEnv), 1);
+ }
drv_sleep(r->ireg[0x32]);
- if ((r->ireg[0x31] & 2) != 0 && keybuf_c <= 0) continue;
+ if ((r->ireg[0x31] & 2) != 0 && keybuf_c <= 0){
+ continue;
+ }
break;
}
break;
// 32: 左右のshift系を区別する.
if (r->ireg[0x31] == 2) { // なぜ3にしなかったのか...
r->ireg[0x30] = fgetc(stdin);
- if (r->ireg[0x30] == EOF)
+ if (r->ireg[0x30] == EOF){
r->ireg[0x30] = -1;
+ }
break;
}
r->ireg[0x30] |= -1;
if (keybuf_c > 0) {
r->ireg[0x30] = keybuf[keybuf_r];
- if ((r->ireg[0x31] & 16) == 0) r->ireg[0x30] &= 0x3e3effff;
- if ((r->ireg[0x31] & 32) == 0) r->ireg[0x30] |= (r->ireg[0x30] >> 8) & 0xff0000;
+ if ((r->ireg[0x31] & 16) == 0){
+ r->ireg[0x30] &= 0x3e3effff;
+ }
+ if ((r->ireg[0x31] & 32) == 0){
+ r->ireg[0x30] |= (r->ireg[0x30] >> 8) & 0xff0000;
+ }
if ((r->ireg[0x31] & 1) != 0) {
keybuf_c--;
keybuf_r = (keybuf_r + 1) & (KEYBUFSIZ - 1);
case 0xff44:
c = loadColor(r, 0x34);
- if (r->ireg[0x32] < 0 || r->ireg[0x32] >= mainWindow.xsize || r->ireg[0x33] < 0 || r->ireg[0x33] >= mainWindow.ysize)
+ 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) 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;
+ }
+
+ switch ((r->ireg[0x31] & 3)) {
+ case 0:
+ mainWindow.vram[r->ireg[0x32] + r->ireg[0x33] * mainWindow.xsize] = c;
+ break;
+ case 1:
+ mainWindow.vram[r->ireg[0x32] + r->ireg[0x33] * mainWindow.xsize] |= c;
+ break;
+ case 2:
+ mainWindow.vram[r->ireg[0x32] + r->ireg[0x33] * mainWindow.xsize] ^= c;
+ break;
+ case 3:
+ mainWindow.vram[r->ireg[0x32] + r->ireg[0x33] * mainWindow.xsize] &= c;
+ break;
+ }
break;
case 0xff45:
//drawLine
c = loadColor(r, 0x36);
- if (r->ireg[0x32] < 0 || r->ireg[0x32] >= mainWindow.xsize || r->ireg[0x33] < 0 || r->ireg[0x33] >= mainWindow.ysize)
+ 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] >= mainWindow.xsize || r->ireg[0x35] < 0 || r->ireg[0x35] >= mainWindow.ysize)
+ }
+ 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];
x = r->ireg[0x32] << 10;
y = r->ireg[0x33] << 10;
- if (dx < 0) dx = -dx;
- if (dy < 0) dy = -dy;
+ if (dx < 0){
+ dx = -dx;
+ }
+ if (dy < 0){
+ dy = -dy;
+ }
if (dx >= dy) {
len = dx + 1; dx = 1024;
- if (r->ireg[0x32] > r->ireg[0x34]) dx *= -1;
- if (r->ireg[0x33] > r->ireg[0x35]) dy *= -1;
+ if (r->ireg[0x32] > r->ireg[0x34]){
+ dx *= -1;
+ }
+ if (r->ireg[0x33] > r->ireg[0x35]){
+ dy *= -1;
+ }
dy = (dy << 10) / len;
- }
- else {
+ } else {
len = dy + 1; dy = 1024;
- if (r->ireg[0x33] > r->ireg[0x35]) dy *= -1;
- if (r->ireg[0x32] > r->ireg[0x34]) dx *= -1;
+ if (r->ireg[0x33] > r->ireg[0x35]){
+ dy *= -1;
+ }
+ if (r->ireg[0x32] > r->ireg[0x34]){
+ dx *= -1;
+ }
dx = (dx << 10) / len;
}
if ((r->ireg[0x31] & 3) == 0) {
}
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) 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;
+ switch ((r->ireg[0x31] & 3)) {
+ case 1:
+ mainWindow.vram[(x >> 10) + (y >> 10) * mainWindow.xsize] |= c;
+ break;
+ case 2:
+ mainWindow.vram[(x >> 10) + (y >> 10) * mainWindow.xsize] ^= c;
+ break;
+ case 3:
+ mainWindow.vram[(x >> 10) + (y >> 10) * mainWindow.xsize] &= c;
+ break;
+ default:
+ break;
+ }
x += dx;
y += dy;
}
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) {
devFunc0004(mod3, x0, y0, x1, y1, c);
- }
- else { // drawRect
+ } else { // drawRect
devFunc0004(mod3, x0, y0, x1, y0, c);
devFunc0004(mod3, x0, y1, x1, y1, c);
devFunc0004(mod3, x0, y0, x0, y1, c);
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] = mainWindow.xsize; r->ireg[0x34] &= 0; }
- if (r->ireg[0x33] == -1) { r->ireg[0x33] = mainWindow.ysize; 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;
+ double dcx = 0.5 * (r->ireg[0x32] - 1);
+ double dcy = 0.5 * (r->ireg[0x33] - 1);
+ double dcxy = (dcx + 0.5) * (dcy + 0.5) - 0.1;
dcxy *= dcxy;
mod3 = r->ireg[0x31] & 3;
x1 = r->ireg[0x32];
double dty = (y - dcy) * dcx;
for (x = 0; x < x1; x++) {
double dtx = (x - dcx) * dcy;
- if (dtx * dtx + dty * dty > dcxy) continue;
+ if (dtx * dtx + dty * dty > dcxy){
+ continue;
+ }
mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] = c;
}
}
- }
- else {
+ } else {
#define DRAWOVALPARAM 1
- double dcx1 = 0.5 * (r->ireg[0x32] - (1 + DRAWOVALPARAM * 2)), dcy1 = 0.5 * (r->ireg[0x33] - (1 + DRAWOVALPARAM * 2)), dcxy1 = (dcx1 + 0.5) * (dcy1 + 0.5) - 0.1;
+ double dcx1 = 0.5 * (r->ireg[0x32] - (1 + DRAWOVALPARAM * 2));
+ double dcy1 = 0.5 * (r->ireg[0x33] - (1 + DRAWOVALPARAM * 2));
+ double dcxy1 = (dcx1 + 0.5) * (dcy1 + 0.5) - 0.1;
dcxy1 *= dcxy1;
for (y = 0; y < y1; y++) {
double dty = (y - dcy) * dcx;
for (x = 0; x < x1; x++) {
double dtx = (x - dcx) * dcy;
double dtx1 = (x - dcx) * dcy1;
- if (dtx * dtx + dty * dty > dcxy) continue;
+ if (dtx * dtx + dty * dty > dcxy){
+ continue;
+ }
if (DRAWOVALPARAM <= x && x < x1 - DRAWOVALPARAM && DRAWOVALPARAM <= y && y < y1 - DRAWOVALPARAM) {
- if (dtx1 * dtx1 + dty1 * dty1 < dcxy1) continue;
+ if (dtx1 * dtx1 + dty1 * dty1 < dcxy1){
+ continue;
+ }
+ }
+ switch (mod3) {
+ case 0:
+ mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] = c;
+ break;
+ case 1:
+ mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] |= c;
+ break;
+ case 2:
+ mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] ^= c;
+ break;
+ case 3:
+ mainWindow.vram[(x + r->ireg[0x34]) + (y + r->ireg[0x35]) * mainWindow.xsize] &= c;
+ break;
}
- 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;
}
}
}
// **** junkApi_rand(i, max) ****
// 0 <= i <= maxとなるiを返す。
// max==0のとき、iはSINT32全体を範囲とする乱数となる。
-
r->ireg[0x30] = randGetNextUInt32();
if (r->ireg[0x31] > 0){
r->ireg[0x30] = (r->ireg[0x30] & 0x7fffffff) % (r->ireg[0x31] + 1);
mod3 = r->ireg[0x31] & 3;
dx = r->ireg[0x34];
dy = r->ireg[0x35];
- if (dy == 0) dy = dx;
- 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; }
+ if (dy == 0){
+ dy = dx;
+ }
+ 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++) {
default:
printf("devFunc: error: R30=%08X\n", r->ireg[0x30]);
- exit(1);
+ exit(EXIT_FAILURE);
}
return;