From de3da19333ea6d99e761a784db0fd76804fdad92 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Mon, 30 Mar 2020 17:26:51 -0400 Subject: [PATCH] forth: Forth-ify "NOT" --- emul/forth/z80c.bin | Bin 1455 -> 1479 bytes forth/forth.asm | 24 ++---------------------- forth/icore.fs | 10 +++++----- forth/z80c.fs | 13 +++++++++++++ 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/emul/forth/z80c.bin b/emul/forth/z80c.bin index 8eb6d75ce68047207576e901247b1eacafb24467..cdba5f0bfd58ed933556836868e3bb4d11dfc1f6 100644 GIT binary patch delta 511 zcmYLG&r2IY7=1gl&dg4h^`N!l4_vK>gtW(AR0xYMR05{NEmAy4T2d&1Ac>_EQlj({ zJQeoTi~oQJ5j+Vw3Eh+T;3ZgE2ndDVN_(*1Y?NMxnfKm&@6DT&Op^KhdupQ;je|eL z_2n!+p3MWk_2|dN6!K%Ie_STMkMFz6ja~j?q9loIqCutl;>tupNKpi#x71>eZDQFb_W5K~Hu#0gpWc zd~tg6Mw&IfLAyi-Y-_VH4Q}M~u!gf_NO)A*DwWqJAv{F7B0lL*#_RTU`$)$kxtlN~ z`t0XzSNQM-^nz-Aukj(5H%X0CSHH6F9cz@^cv%V39<>%!v zD!}p3)h)ZvCMlZ*(^ZH29*}O^OySV!#lLKS>5!-eWM8l3(6UW4E*4M>U(%^bx!l1W zy=eG8UF`5SHQN+V;^N56vl~s>q4>~kf*L+j|5b{#+E|hMS*FddZUeUb6bGiUfGPe? LHR%_2Mq&K}oKkq} delta 491 zcmYLGJ4gdT6nxp;?B_0?C@K+!oFSk=TN@3?qAA2rG#3d963$>Dg2=^EjA=p|LD<$x zu)e}t38oNi(^)8JqrHWl?w*RxvODwMym_)$vBVG|9 zyHh7PB}0BGB$_z%gW7Jk7nlQa(IL->z(a%wdk06^L4*7BmHE_g6mFE2G4NN%(XoxoJGIK^9`W7;Y%HG@vU{gK@@BD}95Q$2Ka-q18 z1nNM}^69?SA<8EseN9Wz@K+%s)EODB8r3Unhy1B~+N04wrCu~qY2ITTuUMu+MUxj- zOZnnjF<+Vk;lP!3tanOkA2Beww6F^h-Rg)#AlgdA-Fl#zG)z=;SvV#pgao8vDZi;- zHEK5gr892w- gmT|yZDSTnq(c_myv(u*01&KJ`<~98hm0pN_1A&lhuK)l5 diff --git a/forth/forth.asm b/forth/forth.asm index cdf0455..6b323d9 100644 --- a/forth/forth.asm +++ b/forth/forth.asm @@ -743,30 +743,10 @@ FIND_: push de jp next -.fill 41 - - .db "NOT" - .dw $-FIND_ - .db 3 -NOT: - .dw nativeWord - pop hl - call chkPS - ld a, l - or h - ld hl, 0 - jr nz, .skip ; true, keep at 0 - ; false, make 1 - inc hl -.skip: - push hl - jp next - - -.fill 362 +.fill 427 .db "_bend" - .dw $-NOT + .dw $-FIND_ .db 5 ; Offset: 0647 .out $ diff --git a/forth/icore.fs b/forth/icore.fs index b4e4ec5..a6f5589 100644 --- a/forth/icore.fs +++ b/forth/icore.fs @@ -85,7 +85,7 @@ ( This is only the "early parser" in earlier stages. No need for an abort message ) : (parse) - _c (parsed) NOT IF _c ABORT THEN + _c (parsed) _c NOT IF _c ABORT THEN ; ( a -- ) @@ -94,7 +94,7 @@ _c DUP ( a a ) _c C@ ( a c ) ( exit if null ) - _c DUP NOT IF _c 2DROP EXIT THEN + _c DUP _c NOT IF _c 2DROP EXIT THEN _c EMIT ( a ) 1 _c + ( a+1 ) AGAIN @@ -117,11 +117,11 @@ ( The NOT is to normalize the negative/positive numbers to 1 or 0. Hadn't we wanted to normalize, we'd have written: 32 CMP 1 - ) -: WS? 33 _c CMP 1 _c + NOT ; +: WS? 33 _c CMP 1 _c + _c NOT ; : TOWORD BEGIN - _c C< _c DUP _c WS? NOT IF EXIT THEN _c DROP + _c C< _c DUP _c WS? _c NOT IF EXIT THEN _c DROP AGAIN ; @@ -176,7 +176,7 @@ : BOOT LIT< (parse) (find) _c DROP _c (parse*) _c ! - LIT< (c<) (find) NOT IF LIT< KEY (find) _c DROP THEN + LIT< (c<) (find) _c NOT IF LIT< KEY (find) _c DROP THEN ( 48 == CINPTR ) [ 48 @ LITN ] _c ! LIT< (c<$) (find) IF EXECUTE ELSE _c DROP THEN diff --git a/forth/z80c.fs b/forth/z80c.fs index 0accf92..ca4f799 100644 --- a/forth/z80c.fs +++ b/forth/z80c.fs @@ -149,6 +149,19 @@ CODE XOR HL PUSHqq, ;CODE +CODE NOT + HL POPqq, + chkPS, + A L LDrr, + H ORr, + HL 0 LDddnn, + 3 JRNZe, ( skip) + ( false, make 1 ) + HL INCss, +( skip ) + HL PUSHqq, +;CODE + CODE + HL POPqq, DE POPqq,