...
|
...
|
@@ -35,6 +35,7 @@ WITH REGARD TO THIS SOFTWARE.
|
35
|
35
|
#define PUSH(stack, v) { stack->dat[stack->ptr++] = (v); }
|
36
|
36
|
#define PUSH2(stack, v) { tmp = (v); stack->dat[stack->ptr] = (v) >> 8; stack->dat[stack->ptr + 1] = (v); stack->ptr += 2; }
|
37
|
37
|
#define SEND(a, b) { u->dev[a] = b; if((send_events[(a) >> 4] >> ((a) & 0xf)) & 0x1) u->deo(u, a); }
|
|
38
|
+#define LISTEN(a, b) { PUT(a, ((receive_events[(b) >> 4] >> ((b) & 0xf)) & 0x1) ? u->dei(u, b) : u->dev[b]) }
|
38
|
39
|
|
39
|
40
|
static
|
40
|
41
|
Uint16 send_events[] = {
|
...
|
...
|
@@ -42,8 +43,8 @@ Uint16 send_events[] = {
|
42
|
43
|
0x0000, 0x0000, 0xa260, 0xa260, 0x0000, 0x0000, 0x0000, 0x0000 };
|
43
|
44
|
static
|
44
|
45
|
Uint16 receive_events[] = {
|
45
|
|
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
46
|
|
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
|
|
46
|
+ 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0000,
|
|
47
|
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x07fd, 0x0000, 0x0000, 0x0000 };
|
47
|
48
|
|
48
|
49
|
int
|
49
|
50
|
uxn_eval(Uxn *u, Uint16 pc)
|
...
|
...
|
@@ -110,8 +111,8 @@ uxn_eval(Uxn *u, Uint16 pc)
|
110
|
111
|
case 0x14: /* LDA */ t=T2; INC(2,-1) PUT(0, u->ram[t]) break;
|
111
|
112
|
case 0x35: /* STA2 */ t=T2;n=N2; DEC(4, 0) POKE16(u->ram + t, n) break;
|
112
|
113
|
case 0x15: /* STA */ t=T2;n=L; DEC(3, 0) u->ram[t] = n; break;
|
113
|
|
- case 0x36: /* DEI2 */ t=T; INC(1, 1) PUT(1, u->dei(u, t)) PUT(0, u->dei(u, t + 1)) break;
|
114
|
|
- case 0x16: /* DEI */ t=T; INC(1, 0) PUT(0, u->dei(u, t)) break;
|
|
114
|
+ case 0x36: /* DEI2 */ t=T; INC(1, 1) LISTEN(1, t) LISTEN(0, t + 1) break;
|
|
115
|
+ case 0x16: /* DEI */ t=T; INC(1, 0) LISTEN(0, t) break;
|
115
|
116
|
case 0x37: /* DEO2 */ t=T;n=N;l=L; DEC(3, 0) SEND(t, l) SEND(t + 1, n) break;
|
116
|
117
|
case 0x17: /* DEO */ t=T;n=N; DEC(2, 0) SEND(t, n) break;
|
117
|
118
|
case 0x38: /* ADD2 */ t=T2;n=N2; INC(4,-2) PUT2(0, n + t) break;
|