From 5705cd5c3167cdffefdc2f992565281a57557e62 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 5 Jul 2020 13:41:12 -0400 Subject: [PATCH] Extract EXIT code from stable ABI zone --- blk/283 | 4 ++-- blk/284 | 8 +------- blk/304 | 12 ++++++++++++ blk/305 | 23 +++++++++++------------ blk/306 | 5 ----- blk/400 | 3 +-- blk/805 | 8 ++++---- blk/806 | 10 ++-------- blk/812 | 5 ++++- cvm/forth.bin | Bin 5413 -> 5422 bytes cvm/vm.c | 1 - cvm/xcomp.fs | 9 ++++----- 12 files changed, 41 insertions(+), 47 deletions(-) create mode 100644 blk/304 diff --git a/blk/283 b/blk/283 index 25d763b..1b863e5 100644 --- a/blk/283 +++ b/blk/283 @@ -1,7 +1,7 @@ H@ ORG ! 0 JP, ( 00, main ) NOP, ( unused ) NOP, NOP, ( 04, BOOT ) -NOP, NOP, ( 06, uflw ) NOP, NOP, ( 08, LATEST ) -NOP, NOP, NOP, NOP, NOP, NOP, ( unused ) +NOP, NOP, ( 06, uflw ) NOP, NOP, ( 08, LATEST ) NOP, ( unused ) +0 A, 0 JP, ( 0b, EXIT ) NOP, ( unused ) 0 JP, ( RST 10 ) NOP, ( unused ) 0 JP, ( 14, popRS ) NOP, NOP, NOP, ( unused ) 0 JP, ( 1a, next ) NOP, NOP, NOP, ( unused ) diff --git a/blk/284 b/blk/284 index b9aa9a7..e54bce3 100644 --- a/blk/284 +++ b/blk/284 @@ -1,11 +1,5 @@ -( BOOT DICT: There are only 3 words in the boot dict, but - these words' offset need to be stable, so they're part of - the "stable ABI" ) +ORG @ 0x4c + HERE ! H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) -CODE EXIT ( 0x42 ) - 0x14 BCALL, ( popRS ) - HL PUSH, IY POP, ( --> IP ) - JPNEXT, CODE (br) ( 0x53 ) L2 BSET ( used in CBR ) E 0 IY+ LDrIXY, D 1 IY+ LDrIXY, diff --git a/blk/304 b/blk/304 new file mode 100644 index 0000000..81d69c2 --- /dev/null +++ b/blk/304 @@ -0,0 +1,12 @@ +lblchkPS BSET ( chkPS ) +( Note that you only need to call this in words that push + back to PSP. If they don't, calling chkPS is redundant with + check in next ) + EXX, +( We have the return address for this very call on the stack + and protected registers. 2- is to compensate that. ) + HL PS_ADDR 2- LDdn, + SP SUBHLd, + EXX, + CNC RETc, ( PS_ADDR >= SP? good ) + JR, lblofl BWR ( abortUnderflow-B298 ) diff --git a/blk/305 b/blk/305 index 81d69c2..4666016 100644 --- a/blk/305 +++ b/blk/305 @@ -1,12 +1,11 @@ -lblchkPS BSET ( chkPS ) -( Note that you only need to call this in words that push - back to PSP. If they don't, calling chkPS is redundant with - check in next ) - EXX, -( We have the return address for this very call on the stack - and protected registers. 2- is to compensate that. ) - HL PS_ADDR 2- LDdn, - SP SUBHLd, - EXX, - CNC RETc, ( PS_ADDR >= SP? good ) - JR, lblofl BWR ( abortUnderflow-B298 ) +( Native words ) +CODE EXECUTE + DE POP, + chkPS, + JR, lblexec BWR ( execute-B301 ) + +CODE EXIT +PC ORG @ 0x0d + ! ( stable ABI JP ) + 0x14 BCALL, ( popRS ) + HL PUSH, IY POP, ( --> IP ) + JPNEXT, diff --git a/blk/306 b/blk/306 index 6d6ed6c..fddc699 100644 --- a/blk/306 +++ b/blk/306 @@ -1,8 +1,3 @@ -( Native words ) -CODE EXECUTE - DE POP, - chkPS, - JR, lblexec BWR ( execute-B301 ) CODE (s) ( string literal ) PC ORG @ 0x2d + ! ( stable ABI JP ) ( Like (n) but instead of being followed by a 2 bytes diff --git a/blk/400 b/blk/400 index 3aded5f..1ad17ef 100644 --- a/blk/400 +++ b/blk/400 @@ -2,8 +2,7 @@ is not an IMMEDIATE yet and will not be treated properly by xcomp. ) : _ - 0x42 ( EXIT ) , - R> DROP ( exit : ) + 0x0b ( EXIT ) , R> DROP ( exit : ) ; IMMEDIATE ';' X' _ 4 - C! ( give ; its name ) ':' X' _ 4 - C! ( give : its name ) diff --git a/blk/805 b/blk/805 index b116fbf..a0c8dd4 100644 --- a/blk/805 +++ b/blk/805 @@ -2,10 +2,10 @@ VARIABLE lblexec VARIABLE lblnext H@ ORG ! JMPn, 0 A,, ( 00, main ) 0 A, ( 03, boot driveno ) 0 A,, ( 04, BOOT ) -0 A,, ( 06, uflw ) 0 A,, ( 08, LATEST ) -0 A, 0 A, 0 A,, ( unused ) -0 A, 0 A,, ( unused ) JMPn, 0 A,, ( 11, pushRS ) -JMPn, 0 A,, ( 14, popRS ) 0 A, 0 A,, ( unused ) +0 A,, ( 06, uflw ) 0 A,, ( 08, LATEST ) 0 A, ( unused ) +0 A, JMPn, 0 A,, ( unused ) +0 A,, ( unused ) JMPn, 0 A,, ( unused ) +JMPn, 0 A,, ( unused ) 0 A, 0 A,, ( unused ) JMPn, 0 A,, ( 1a, next ) 0 A, 0 A,, ( unused ) 0 A, 0 A, 0 A, 0 A, ( unused ) 0 A, 0 A, 0 A, 0 A, ( unused ) diff --git a/blk/806 b/blk/806 index 722444a..a55d30f 100644 --- a/blk/806 +++ b/blk/806 @@ -1,11 +1,5 @@ -( BOOT DICT: There are only 3 words in the boot dict, but - these words' offset need to be stable, so they're part of - the "stable ABI" ) -'E' A, 'X' A, 'I' A, 'T' A, 0 A,, ( prev ) 4 A, ( len ) -H@ XCURRENT ! ( set current tip of dict, 0x42 ) - 0 A, ( native ) - DX [BP] 0 MOVx[]+, BP DECx, BP DECx, ( popRS ) -;CODE NOP, +ORG @ 0x4c + HERE ! +H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) CODE (br) ( 0x53 ) L2 BSET ( used in br? ) DI DX MOVxx, DI [DI] MOVx[], DX DI ADDxx, ;CODE NOP, NOP, diff --git a/blk/812 b/blk/812 index fef1638..d0adf9e 100644 --- a/blk/812 +++ b/blk/812 @@ -1,7 +1,10 @@ ( native words ) CODE EXECUTE 1 chkPS, DI POPx, JMPn, lblexec @ RPCn, - +CODE EXIT +PC 0x0f - ORG @ 0x0d + ! ( stable abi ) + DX [BP] 0 MOVx[]+, BP DECx, BP DECx, ( popRS ) +;CODE CODE (s) ( string literal, see B287 ) PC 0x2f - ORG @ 0x2d + ! ( stable abi ) DI DX MOVxx, ( IP ) diff --git a/cvm/forth.bin b/cvm/forth.bin index 2991657871c2c42560f1d106a117706a4cc13c98..7848cc666e63fe6da27944ab7a8c04c375e8c868 100644 GIT binary patch literal 5422 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 Se;V-~X>0Up&_~cm(DGkE9RmXZ diff --git a/cvm/vm.c b/cvm/vm.c index f3aa6d5..0ae10e9 100644 --- a/cvm/vm.c +++ b/cvm/vm.c @@ -287,7 +287,6 @@ VM* VM_init() { native(SP_to_R_2); native(nlit); native(slit); - // End of stable ABI native(SP_to_R); native(R_to_SP); native(R_to_SP_2); diff --git a/cvm/xcomp.fs b/cvm/xcomp.fs index 5fb610a..5153b13 100644 --- a/cvm/xcomp.fs +++ b/cvm/xcomp.fs @@ -10,15 +10,13 @@ CREATE BIN( 0 , 270 LOAD ( xcomp overrides ) H@ ORG ! +ORG @ 0x0b + HERE ! +0 C, 0 C, ( EXIT ) ORG @ 0x2b + HERE ! 0 C, 0x06 C, ( (s) ) ORG @ 0x33 + HERE ! 0 C, 0x04 C, ( 2>R ) -ORG @ 0x3b + HERE ! -," EXIT" -0 , ( prev ) 4 C, -H@ XCURRENT ! ( set current tip of dict, 0x42 ) -0 C, 0 C, +H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) ORG @ 0x4c + HERE ! 0x01 CODE (br) ( 0x53 ) ORG @ 0x5f + HERE ! @@ -28,6 +26,7 @@ ORG @ 0x77 + HERE ! ORG @ 0xb9 + HERE ! 0x05 CODE (n) ( 0xbf ) ( END OF STABLE ABI ) +0x00 CODE EXIT 0x06 CODE (s) 0x04 CODE 2>R 0x07 CODE >R