equi

A self-descriptive stack-based PC platform
git clone git://git.luxferre.top/equi.git
Log | Files | Refs | README | LICENSE

commit c0ee893f2510284fc56863825a420b8ce129ff6f
parent 23b39f036a5f126940e05b8289c984343b6ee729
Author: Luxferre <lux@ferre>
Date:   Thu, 11 Aug 2022 09:29:05 +0300

Implemented G instruction

Diffstat:
MREADME.md | 1+
Mequi.c | 6+++++-
2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md @@ -91,6 +91,7 @@ CR |`( -- )` |In the command mode, output a line break an `J`|`( rel -- )` |**J**ump: increase or decrease PC according to the relative value (treated as signed, from -32768 to 32767) `I`|`( cond rel -- ) ` |Pop relative value and condition. **I**f the condition value is not zero, `J` to the relative value `X`|`( -- pc )` |Locate e**X**ecution point: push PC+1 value onto the main stack +`G`|`( -- gpd_start )` |Locate **G**PD area start: push its flat offset onto the main stack `>`|`( a b -- a>b )` |Push 1 onto the stack if the second popped value is greater than the first, 0 otherwise `<`|`( a b -- a>b )` |Push 1 onto the stack if the second popped value is less than the first, 0 otherwise `=`|`( a b -- a==b )` |Push 1 onto the stack if the two popped values are equal, 0 otherwise diff --git a/equi.c b/equi.c @@ -182,6 +182,7 @@ enum EquiInstructions { INS_JUMP='J', INS_IF='I', INS_EXPOINT='X', /* locate execution point */ + INS_GPDSTART='G', /* locate GPD area start */ INS_GT='>', INS_LT='<', INS_EQ='=', @@ -436,6 +437,9 @@ void equi_main_loop() { case INS_EXPOINT: /* Locate execution point */ pushMain(ram.pc + 1); break; + case INS_GPDSTART: /* Locate GPD area start */ + pushMain(ram.gpd_start); + break; case INS_GT: /* ( a b -- a>b ) */ pushMain((popMain() < popMain()) ? 1u : 0u); break; @@ -536,7 +540,7 @@ int main(int argc, char* argv[]) { /* Start both execution and input buffering from the start of command buffer (-1 because we use prefix increment) */ ram.pc = ram.ibp = 65535U; - printf("Welcome to Equi v" EQUI_VER " by Luxferre, 2022\n\nCLT: 0x%X (%d bytes)\nGPD: 0x%X (%d bytes)\nCommand buffer: 0x%X (%d bytes)\nEqui ready\n\n", + printf("Welcome to Equi v" EQUI_VER " by Luxferre, 2022\n\nCLT: 0x%04X (%d bytes)\nGPD: 0x%04X (%d bytes)\nCommand buffer: 0x%04X (%d bytes)\nEqui ready\n\n", (unsigned int) ((uchar *)&ram.clt - (uchar *)&ram.main_stack), (unsigned int) ((uchar *)&ram.gpd - (uchar *)&ram.clt), ram.gpd_start,