initial stubs related to error handling device FossilOrigin-Name: 83006b5213a91e8d35f2c8c873e203cc7225ec5b7636f7ba9222c1c712883bbc
6 files changed, 71 insertions(+), 4 deletions(-) M Configuration.mk M Makefile A interface/error.retro A vm/nga-c/dev-error.c M vm/nga-c/image.c M vm/nga-c/retro.c
M Configuration.mk => Configuration.mk +4 -2
@@ 42,10 42,11 @@ ENABLED += -DENABLE_UNIX ENABLED += -DENABLE_RNG ENABLED += -DENABLE_CLOCK ENABLED += -DENABLE_SCRIPTING #ENABLED += -DENABLE_SOCKETS # ENABLED += -DENABLE_SOCKETS ENABLED += -DENABLE_SIGNALS ENABLED += -DENABLE_MULTICORE ENABLED += -DENABLE_FFI # ENABLED += -DENABLE_FFI ENABLED += -DENABLE_ERROR ENABLED += -DENABLE_UNSIGNED ENABLED += -DENABLE_MALLOC @@ ENABLED += -DENABLE_BLOCKS 70,6 71,7 @@ DEVICES += interface/block.retro DEVICES += interface/deprecated.retro DEVICES += interface/double.retro DEVICES += interface/malloc.retro DEVICES += interface/error.retro DEVICES += interface/final.retro # -------------------------------------------------------------
M Makefile => Makefile +0 -1
@@ 25,7 25,6 @@ dirs: clean: rm -f bin/* # installation targets install: build install-data install-docs install-examples install-manpages
A interface/error.retro => interface/error.retro +2 -0
A vm/nga-c/dev-error.c => vm/nga-c/dev-error.c +34 -0
@@ 0,0 1,34 @@ /*************************************************************** Copyright (c) Charles Childers **************************************************************/ /* | 001 | Data Stack Underflow | | 002 | Data Stack Overflow | | 003 | Address Stack Underflow | | 004 | Address Stack Overflow | | 005 | Invalid Memory Access | | 006 | Division by Zero | */ #ifdef ENABLE_ERROR void register_error_handler(NgaState *vm) { CELL ErrorID = stack_pop(vm); CELL ErrorHandler = stack_pop(vm); vm->ErrorHandlers[ErrorID] = ErrorHandler; } void io_error(NgaState *vm) { switch (stack_pop(vm)) { case 0: register_error_handler(vm); default: break; } } void query_err(NgaState *vm) { stack_push(vm, 0); stack_push(vm, 1234); } #endif
M vm/nga-c/image.c => vm/nga-c/image.c +1 -1
@@ 533,7 533,7 @@ CELL ngaImage[] = { 1793,19438,19887,19931,202309,417,389,1249,1535,0,11254,0,10 1793,10393,2,2049,104,2049,2740,1,417,1,17,2049,66,10,1,10381,2049,2229,2049,3125, 10,1,10374,2049,2449,2049,417,10,10250,10423,168,12041,8246849872898570441,115,58,101,118,97,108,117, 97,116,101,0,2049,10315,2049,5573,2049,10315,2,2049,10339,2049,10372,10,10407,10443,156,0, 0,76,80,0,0,10435,10455,156,0,0,73,110,100,101,120,0,0,14,0,0, 0,76,80,0,0,10435,10455,156,0,0,73,110,100,101,120,0,0,13,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,10444,10497,168,0,0,110,101,120,116,0,3841,10443, 1,10455,17,2049,3864,10,10487,10515,168,0,0,112,114,101,112,0,1,10443,2049,3864,
M vm/nga-c/retro.c => vm/nga-c/retro.c +30 -0
@@ 120,6 120,10 @@ struct NgaState { char BlockFile[1025]; #endif #ifdef ENABLE_ERROR CELL ErrorHandlers[64]; #endif /* Scripting */ char **sys_argv; @@ int sys_argc; 220,21 224,41 @@ void inst_iq(NgaState *); void inst_ii(NgaState *); void guard(NgaState *vm, int n, int m, int diff) { if (vm->cpu[vm->active].sp < n) { #ifdef ENABLE_ERROR if (vm->ErrorHandlers[1] != 0) { } #else printf("E: Data Stack Underflow"); vm->cpu[vm->active].sp = 0; return; #endif } if (((vm->cpu[vm->active].sp + m) - n) > (STACK_DEPTH - 1)) { #ifdef ENABLE_ERROR if (vm->ErrorHandlers[2] != 0) { } #else printf("E: Data Stack Overflow"); vm->cpu[vm->active].sp = 0; return; #endif } if (diff) { if (vm->cpu[vm->active].rp + diff < 0) { #ifdef ENABLE_ERROR if (vm->ErrorHandlers[3] != 0) { } #else return; #endif } if (vm->cpu[vm->active].rp + diff > (ADDRESSES - 1)) { #ifdef ENABLE_ERROR if (vm->ErrorHandlers[1] != 4) { } #else return; #endif } } @@ } 1293,6 1317,12 @@ void inst_di(NgaState *vm) { CELL a, b; a = TOS; b = NOS; if (b == 0) { #ifdef ENABLE_ERROR if (vm->ErrorHandlers[6] != 0) { } #endif } if (vm->cpu[vm->active].u != 0) { TOS = (unsigned)b / (unsigned)a; NOS = (unsigned)b % (unsigned)a;