diff --git a/src/uxn.c b/src/uxn.c index 521fee2..0619dbb 100644 --- a/src/uxn.c +++ b/src/uxn.c @@ -61,10 +61,10 @@ uxn_eval(Uxn *u, Uint16 pc) /* ALU */ case 0x01: /* INC */ t=T; SET(1, 0) PUT(0, t + 1) break; case 0x21: t=T2; SET(2, 0) PUT2(0, t + 1) break; - case 0x02: /* POP */ SET(1,-1) break; - case 0x22: SET(2,-2) break; - case 0x03: /* NIP */ t=T; SET(2,-1) PUT(0, t) break; - case 0x23: t=T2; SET(4,-2) PUT2(0, t) break; + case 0x02: /* POP */ SET(1,-1) if(k) PUT(0, 0) break; + case 0x22: SET(2,-2) if(k) PUT2(0, 0) break; + case 0x03: /* NIP */ t=T; SET(2,-1) PUT(0, t) if(k) PUT(1, 0) break; + case 0x23: t=T2; SET(4,-2) PUT2(0, t) if(k) PUT2(2, 0) break; case 0x04: /* SWP */ t=T;n=N; SET(2, 0) PUT(0, n) PUT(1, t) break; case 0x24: t=T2;n=N2; SET(4, 0) PUT2(0, n) PUT2(2, t) break; case 0x05: /* ROT */ t=T;n=N;l=L; SET(3, 0) PUT(0, l) PUT(1, t) PUT(2, n) break; diff --git a/src/uxncli.c b/src/uxncli.c index 9c40abd..70ecccf 100644 --- a/src/uxncli.c +++ b/src/uxncli.c @@ -53,16 +53,17 @@ main(int argc, char **argv) if(!system_load(&u, argv[i++])) return system_error("Load", "Failed"); u.dev[0x17] = argc - i; - if(!uxn_eval(&u, PAGE_PROGRAM)) - return u.dev[0x0f] & 0x7f; - for(; i < argc; i++) { - char *p = argv[i]; - while(*p) console_input(&u, *p++, CONSOLE_ARG); - console_input(&u, '\n', i == argc - 1 ? CONSOLE_END : CONSOLE_EOA); - } - while(!u.dev[0x0f]) { - int c = fgetc(stdin); - if(c != EOF) console_input(&u, (Uint8)c, CONSOLE_STD); + if(uxn_eval(&u, PAGE_PROGRAM)) { + for(; i < argc; i++) { + char *p = argv[i]; + while(*p) console_input(&u, *p++, CONSOLE_ARG); + console_input(&u, '\n', i == argc - 1 ? CONSOLE_END : CONSOLE_EOA); + } + while(!u.dev[0x0f]) { + int c = fgetc(stdin); + if(c != EOF) console_input(&u, (Uint8)c, CONSOLE_STD); + } } + free(u.ram); return u.dev[0x0f] & 0x7f; }