| ... | ... |
@@ -42,13 +42,15 @@ int |
| 42 | 42 |
uxn_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr) |
| 43 | 43 |
{
|
| 44 | 44 |
Uint8 *d = &u->dev[0x00]; |
| 45 |
- if(instr & 0x40) |
|
| 46 |
- u->rst->err = err; |
|
| 47 |
- else |
|
| 48 |
- u->wst->err = err; |
|
| 49 |
- if(GETVEC(d)) |
|
| 50 |
- uxn_eval(u, GETVEC(d)); |
|
| 51 |
- else {
|
|
| 45 |
+ Uint16 handler = GETVEC(d); |
|
| 46 |
+ if(handler) {
|
|
| 47 |
+ u->wst->ptr = 4; |
|
| 48 |
+ u->wst->dat[0] = addr >> 0x8; |
|
| 49 |
+ u->wst->dat[1] = addr & 0xff; |
|
| 50 |
+ u->wst->dat[2] = instr; |
|
| 51 |
+ u->wst->dat[3] = err; |
|
| 52 |
+ return uxn_eval(u, handler); |
|
| 53 |
+ } else {
|
|
| 52 | 54 |
system_inspect(u); |
| 53 | 55 |
fprintf(stderr, "%s %s, by %02x at 0x%04x.\n", (instr & 0x40) ? "Return-stack" : "Working-stack", errors[err - 1], instr, addr); |
| 54 | 56 |
} |