From 580214426af37acd5b42926166c87ed90e0b0613 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sat, 7 Mar 2020 19:42:07 -0500 Subject: [PATCH] forth: add +-*/ --- apps/forth/dict.asm | 50 +++++++++++++++++++++++++++++++++++++++ apps/forth/dictionary.txt | 4 ++++ apps/forth/main.asm | 2 +- 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/apps/forth/dict.asm b/apps/forth/dict.asm index 1978337..0e8ce79 100644 --- a/apps/forth/dict.asm +++ b/apps/forth/dict.asm @@ -248,3 +248,53 @@ FETCH: call intoHL push hl jp exit + +; ( a b -- c ) A + B +PLUS: + .db "+" + .fill 7 + .dw FETCH + .dw nativeWord + pop hl + pop de + add hl, de + push hl + jp exit + +; ( a b -- c ) A - B +MINUS: + .db "-" + .fill 7 + .dw PLUS + .dw nativeWord + pop de ; B + pop hl ; A + or a ; reset carry + sbc hl, de + push hl + jp exit + +; ( a b -- c ) A * B +MULT: + .db "*" + .fill 7 + .dw MINUS + .dw nativeWord + pop de + pop bc + call multDEBC + push hl + jp exit + +; ( a b -- c ) A / B +DIV: + .db "/" + .fill 7 + .dw MULT + .dw nativeWord + pop de + pop hl + call divide + push bc + jp exit + diff --git a/apps/forth/dictionary.txt b/apps/forth/dictionary.txt index 03f622b..5d8428d 100644 --- a/apps/forth/dictionary.txt +++ b/apps/forth/dictionary.txt @@ -6,6 +6,10 @@ Stack notation: " -- ". Rightmost is top of stack . n -- Print n in its decimal form @ a -- n Set n to value at address a ! n a -- Store n in address a ++ a b -- c a + b -> c +- a b -- c a - b -> c +* a b -- c a * b -> c +/ a b -- c a / b -> c CREATE x -- Create cell named x EMIT c -- Spit char c to stdout EXECUTE a -- Execute word at addr a diff --git a/apps/forth/main.asm b/apps/forth/main.asm index 769e2ec..c55449a 100644 --- a/apps/forth/main.asm +++ b/apps/forth/main.asm @@ -48,7 +48,7 @@ CHKEND: forthMain: ld (INITIAL_SP), sp - ld hl, FETCH ; last entry in hardcoded dict + ld hl, DIV ; last entry in hardcoded dict ld (CURRENT), hl ld hl, FORTH_RAMEND ld (HERE), hl