-#include "osecpu.h"\r
-\r
-void putOsaskChar(int c, HOSECPU_RuntimeEnvironment *r)\r
-{\r
- if (0x10 <= c && c <= 0x1f){\r
- c = "0123456789ABCDEF"[c & 0x0f];\r
- }\r
- putchar(c);\r
- r->lastConsoleChar = c;\r
- return;\r
-}\r
-\r
-void checkString(HOSECPU_RuntimeEnvironment *r, int rxx, int pxx)\r
-{\r
- char c = 0;\r
- if (r->preg[pxx].typ != 0x03){\r
- c = 1;\r
- }\r
- if (r->preg[pxx].p < r->preg[pxx].p0){\r
- c = 1;\r
- }\r
- if (r->ireg[rxx] < 0){\r
- c = 1;\r
- }\r
- if (r->preg[pxx].p + r->ireg[rxx] > r->preg[pxx].p1){\r
- c = 1;\r
- }\r
- if (c != 0){\r
- (*(r->errHndl))(r);\r
- }\r
- return;\r
-}\r
-\r
-int loadColor(HOSECPU_RuntimeEnvironment *r, int rxx)\r
-{\r
- int c, m, rr, gg, bb;\r
- c = r->ireg[rxx];\r
- m = r->ireg[0x31] & 0x0c;\r
- if (m == 0x04) {\r
- if (c < -1 || c > 7){\r
- (*(r->errHndl))(r);\r
- }\r
- c = iColor1[c & 0x07];\r
- }\r
- if (m == 0x08) {\r
- // 00, 24, 48, 6d, 91, b6, da, ff\r
- if (c < 0 || c >= (1 << 9)){\r
- (*(r->errHndl))(r);\r
- }\r
- rr = (c >> 6) & 0x07;\r
- gg = (c >> 3) & 0x07;\r
- bb = c & 0x07;\r
- rr = (rr * 255) / 7;\r
- gg = (gg * 255) / 7;\r
- bb = (bb * 255) / 7;\r
- c = rr << 16 | gg << 8 | bb;\r
- }\r
- if (m == 0x0c) {\r
- // 00, 08, 10, 18, 20, 29, 31, 39,\r
- // 41, 4a, 52, 5a, 62, 6a, 73, 7b,\r
- // 83, 8b, 94, 9c, a4, ac, b4, bd,\r
- // c5, cd, d5, de, e6, ee, f6, ff\r
- if (c < 0 || c >= (1 << 15)){\r
- (*(r->errHndl))(r);\r
- }\r
- rr = (c >> 10) & 0x1f;\r
- gg = (c >> 5) & 0x1f;\r
- bb = c & 0x1f;\r
- rr = (rr * 255) / 31;\r
- gg = (gg * 255) / 31;\r
- bb = (bb * 255) / 31;\r
- c = rr << 16 | gg << 8 | bb;\r
- }\r
- return c;\r
-}\r
-\r
-void checkRect(HOSECPU_RuntimeEnvironment *r, int rxx)\r
-{\r
- char c = 0;\r
- int i;\r
- if (r->ireg[rxx + 0] <= 0 || r->ireg[rxx + 0] > mainWindow.xsize){\r
- c = 1;\r
- }\r
- if (r->ireg[rxx + 1] <= 0 || r->ireg[rxx + 1] > mainWindow.ysize){\r
- c = 1;\r
- }\r
- if (r->ireg[rxx + 2] < 0 || r->ireg[rxx + 2] >= mainWindow.xsize){\r
- c = 1;\r
- }\r
- if (r->ireg[rxx + 3] < 0 || r->ireg[rxx + 3] >= mainWindow.ysize){\r
- c = 1;\r
- }\r
- i = r->ireg[rxx + 2] + r->ireg[rxx + 0];\r
- if (i <= 0 || i > mainWindow.xsize){\r
- c = 1;\r
- }\r
- i = r->ireg[rxx + 1] + r->ireg[rxx + 3];\r
- if (i <= 0 || i > mainWindow.ysize){\r
- c = 1;\r
- }\r
- if (c != 0){\r
- (*(r->errHndl))(r);\r
- }\r
- return;\r
+#include "osecpu.h"
+
+void putOsaskChar(int c, HOSECPU_RuntimeEnvironment *r)
+{
+ if (0x10 <= c && c <= 0x1f){
+ c = "0123456789ABCDEF"[c & 0x0f];
+ }
+ putchar(c);
+ r->lastConsoleChar = c;
+ return;
+}
+
+void checkString(HOSECPU_RuntimeEnvironment *r, int rxx, int pxx)
+{
+ char c = 0;
+ if (r->preg[pxx].typ != 0x03){
+ c = 1;
+ }
+ if (r->preg[pxx].p < r->preg[pxx].p0){
+ c = 1;
+ }
+ if (r->ireg[rxx] < 0){
+ c = 1;
+ }
+ if (r->preg[pxx].p + r->ireg[rxx] > r->preg[pxx].p1){
+ c = 1;
+ }
+ if (c != 0){
+ (*(r->errHndl))(r);
+ }
+ return;
+}
+
+int loadColor(HOSECPU_RuntimeEnvironment *r, int rxx)
+{
+ int c, m, rr, gg, bb;
+ c = r->ireg[rxx];
+ m = r->ireg[0x31] & 0x0c;
+ if (m == 0x04) {
+ if (c < -1 || c > 7){
+ (*(r->errHndl))(r);
+ }
+ c = iColor1[c & 0x07];
+ }
+ if (m == 0x08) {
+ // 00, 24, 48, 6d, 91, b6, da, ff
+ if (c < 0 || c >= (1 << 9)){
+ (*(r->errHndl))(r);
+ }
+ rr = (c >> 6) & 0x07;
+ gg = (c >> 3) & 0x07;
+ bb = c & 0x07;
+ rr = (rr * 255) / 7;
+ gg = (gg * 255) / 7;
+ bb = (bb * 255) / 7;
+ c = rr << 16 | gg << 8 | bb;
+ }
+ if (m == 0x0c) {
+ // 00, 08, 10, 18, 20, 29, 31, 39,
+ // 41, 4a, 52, 5a, 62, 6a, 73, 7b,
+ // 83, 8b, 94, 9c, a4, ac, b4, bd,
+ // c5, cd, d5, de, e6, ee, f6, ff
+ if (c < 0 || c >= (1 << 15)){
+ (*(r->errHndl))(r);
+ }
+ rr = (c >> 10) & 0x1f;
+ gg = (c >> 5) & 0x1f;
+ bb = c & 0x1f;
+ rr = (rr * 255) / 31;
+ gg = (gg * 255) / 31;
+ bb = (bb * 255) / 31;
+ c = rr << 16 | gg << 8 | bb;
+ }
+ return c;
+}
+
+void checkRect(HOSECPU_RuntimeEnvironment *r, int rxx)
+{
+ char c = 0;
+ int i;
+ if (r->ireg[rxx + 0] <= 0 || r->ireg[rxx + 0] > mainWindow.xsize){
+ c = 1;
+ }
+ if (r->ireg[rxx + 1] <= 0 || r->ireg[rxx + 1] > mainWindow.ysize){
+ c = 1;
+ }
+ if (r->ireg[rxx + 2] < 0 || r->ireg[rxx + 2] >= mainWindow.xsize){
+ c = 1;
+ }
+ if (r->ireg[rxx + 3] < 0 || r->ireg[rxx + 3] >= mainWindow.ysize){
+ c = 1;
+ }
+ i = r->ireg[rxx + 2] + r->ireg[rxx + 0];
+ if (i <= 0 || i > mainWindow.xsize){
+ c = 1;
+ }
+ i = r->ireg[rxx + 1] + r->ireg[rxx + 3];
+ if (i <= 0 || i > mainWindow.ysize){
+ c = 1;
+ }
+ if (c != 0){
+ (*(r->errHndl))(r);
+ }
+ return;
}
\ No newline at end of file