commit ae61e92
Devine Lu Linvega
·
2023-05-02 16:57:01 +0000 UTC
parent e191a16
Added special POPk/NIPk modes
2 files changed,
+15,
-14
+4,
-4
1@@ -61,10 +61,10 @@ uxn_eval(Uxn *u, Uint16 pc)
2 /* ALU */
3 case 0x01: /* INC */ t=T; SET(1, 0) PUT(0, t + 1) break;
4 case 0x21: t=T2; SET(2, 0) PUT2(0, t + 1) break;
5- case 0x02: /* POP */ SET(1,-1) break;
6- case 0x22: SET(2,-2) break;
7- case 0x03: /* NIP */ t=T; SET(2,-1) PUT(0, t) break;
8- case 0x23: t=T2; SET(4,-2) PUT2(0, t) break;
9+ case 0x02: /* POP */ SET(1,-1) if(k) PUT(0, 0) break;
10+ case 0x22: SET(2,-2) if(k) PUT2(0, 0) break;
11+ case 0x03: /* NIP */ t=T; SET(2,-1) PUT(0, t) if(k) PUT(1, 0) break;
12+ case 0x23: t=T2; SET(4,-2) PUT2(0, t) if(k) PUT2(2, 0) break;
13 case 0x04: /* SWP */ t=T;n=N; SET(2, 0) PUT(0, n) PUT(1, t) break;
14 case 0x24: t=T2;n=N2; SET(4, 0) PUT2(0, n) PUT2(2, t) break;
15 case 0x05: /* ROT */ t=T;n=N;l=L; SET(3, 0) PUT(0, l) PUT(1, t) PUT(2, n) break;
+11,
-10
1@@ -53,16 +53,17 @@ main(int argc, char **argv)
2 if(!system_load(&u, argv[i++]))
3 return system_error("Load", "Failed");
4 u.dev[0x17] = argc - i;
5- if(!uxn_eval(&u, PAGE_PROGRAM))
6- return u.dev[0x0f] & 0x7f;
7- for(; i < argc; i++) {
8- char *p = argv[i];
9- while(*p) console_input(&u, *p++, CONSOLE_ARG);
10- console_input(&u, '\n', i == argc - 1 ? CONSOLE_END : CONSOLE_EOA);
11- }
12- while(!u.dev[0x0f]) {
13- int c = fgetc(stdin);
14- if(c != EOF) console_input(&u, (Uint8)c, CONSOLE_STD);
15+ if(uxn_eval(&u, PAGE_PROGRAM)) {
16+ for(; i < argc; i++) {
17+ char *p = argv[i];
18+ while(*p) console_input(&u, *p++, CONSOLE_ARG);
19+ console_input(&u, '\n', i == argc - 1 ? CONSOLE_END : CONSOLE_EOA);
20+ }
21+ while(!u.dev[0x0f]) {
22+ int c = fgetc(stdin);
23+ if(c != EOF) console_input(&u, (Uint8)c, CONSOLE_STD);
24+ }
25 }
26+ free(u.ram);
27 return u.dev[0x0f] & 0x7f;
28 }