From 6642358073ddbd8cf80fb87c4aec2d2a9695f3ec Mon Sep 17 00:00:00 2001 From: Andrew Kesterson Date: Tue, 27 Jan 2015 18:56:12 -0800 Subject: [PATCH] Update docs --- README.md | 4 ++-- asm/kernel_syms.S | 2 +- media/screenshot.png | Bin 11567 -> 14578 bytes src/basic.c | 46 +++++++++++++++---------------------------- src/basic.h | 2 +- src/kernel.c | 2 +- 6 files changed, 21 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 97a8bc4..373b680 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ Because it's fun. Don't you like to have fun? Ogre. What does it do? ===== -Right now, not much of anything at all. It boots from a 1.44mB floppy disk, throws some text to the screen, and enters a primitive REPL (where you can do nothing but display a help message, HALT the machine, or RESET the machine). +Right now, not much of anything at all. It boots from a 1.44mB floppy disk, and enters into a BASIC interpreter, just like your favorite home computers of the 70s/80s! ![Image of Piquant v0.1](media/screenshot.png) -I think I'm going to expand the basic REPL into a BASIC interpreter, just like the classic machines of the 80s. "Operating System? Oh, you mean the BASIC ROM, right?" :) +Currently the BASIC only understands simple, 1-digit arithmetic expressions. But this will soon change; I intend to implement at least as many features as uBASIC, maybe QuickBASIC eventually. How can I run it? ===== diff --git a/asm/kernel_syms.S b/asm/kernel_syms.S index ceee2bb..8ff6b8d 100644 --- a/asm/kernel_syms.S +++ b/asm/kernel_syms.S @@ -1,2 +1,2 @@ _extern_c_main: - jmp 0x1000:0x0db4 + jmp 0x1000:0x0cc8 diff --git a/media/screenshot.png b/media/screenshot.png index 6aba617d6a13fb68560dd0d9d894d042cad7e222..faf2359fd56bcf9b5357b49a8ea5b48ebb608c01 100644 GIT binary patch literal 14578 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 G!2buYV1G6M literal 11567 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 diff --git a/src/basic.c b/src/basic.c index 3839e5d..23d6391 100644 --- a/src/basic.c +++ b/src/basic.c @@ -197,7 +197,21 @@ struct basic_expr *basic_parse_expr(char *expbuf) return ret; } -void basic_run(void) +void basic_print_var(struct basic_variable *var) +{ + char decimal[2]; + decimal[0] = 0; + decimal[1] = 0; + + if ( ( (var->flags & BASIC_VARFLAG_INIT) == BASIC_VARFLAG_INIT ) && + ( (var->flags & BASIC_VARFLAG_TINT) == BASIC_VARFLAG_TINT ) ) { + decimal[0] = dtoa((int)var->value); + _cputs(&decimal); + _cputs("\n"); + } +} + +void basic_repl(void) { char keybuff[512]; char outbuff[128]; @@ -224,9 +238,6 @@ void basic_run(void) memset((void *)&outbuff, 0x00, 128); if ( _cgets((char *)&keybuff) != NULL ) { _cputs("\n"); - _cputs("Analyzing "); - _cputs((char *)&keybuff); - _cputs("\n"); expr = basic_parse_expr((char *)&keybuff); if ( expr == NULL ) { @@ -238,26 +249,6 @@ void basic_run(void) continue; } - /* Debug */ - - decimal[0] = dtoa(expr->type); - memcpy(&outbuff, "Expression type: \0", strlen("Expression type: \0")); - strncat(&outbuff, &decimal, 1); - _cputs(&outbuff); - _cputs("\n"); - - decimal[0] = dtoa(expr->lval); - memcpy(&outbuff, "Expression lval: \0", strlen("Expression lval: \0")); - strncat(&outbuff, &decimal, 1); - _cputs(&outbuff); - _cputs("\n"); - - decimal[0] = dtoa(expr->rval); - memcpy(&outbuff, "Expression rval: \0", strlen("Expression rval: \0")); - strncat(&outbuff, &decimal, 1); - _cputs(&outbuff); - _cputs("\n"); - /* Evaluate */ basic_solve_expr(expr, &result); if ( basic_errno != 0 ) { @@ -266,12 +257,7 @@ void basic_run(void) _cputs(&decimal); _cputs("\n"); } else { - if ( ( (result.flags & BASIC_VARFLAG_INIT) == BASIC_VARFLAG_INIT ) && - ( (result.flags & BASIC_VARFLAG_TINT) == BASIC_VARFLAG_TINT ) ) { - decimal[0] = dtoa((int)result.value); - _cputs(&decimal); - _cputs("\n"); - } + basic_print_var(&result); } } } diff --git a/src/basic.h b/src/basic.h index 287a8cb..6ee9e28 100644 --- a/src/basic.h +++ b/src/basic.h @@ -58,6 +58,6 @@ struct basic_variable { extern int basic_errno; -void run_basic(void); +void basic_repl(void); #endif /* _BASIC_H_ */ diff --git a/src/kernel.c b/src/kernel.c index 7e70076..9950a06 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -4,5 +4,5 @@ void main(void) { - basic_run(); + basic_repl(); }