--- gforth/cross.fs 1994/05/18 17:29:50 1.4 +++ gforth/cross.fs 1994/07/13 19:20:59 1.8 @@ -1,5 +1,5 @@ \ CROSS.FS The Cross-Compiler 06oct92py -\ $Id: cross.fs,v 1.4 1994/05/18 17:29:50 pazsan Exp $ +\ $Id: cross.fs,v 1.8 1994/07/13 19:20:59 pazsan Exp $ \ Idea and implementation: Bernd Paysan (py) \ Copyright 1992 by the ANSI figForth Development Group @@ -23,6 +23,12 @@ include other.fs \ ansforth extentions for cross +: comment? ( c-addr u -- c-addr u ) + 2dup s" (" compare 0= + IF postpone ( + ELSE 2dup s" \" compare 0= IF postpone \ THEN + THEN ; + decimal \ number? 11may93jaw @@ -128,7 +134,8 @@ include machine.fs : cell+ cell + ; : cells cell<< lshift ; : chars ; - +: floats float * ; + >CROSS : cell/ cell<< rshift ; >TARGET @@ -155,10 +162,10 @@ endian 0 pad ! -1 pad c! pad @ 0< \ Fixed bug in else part 11may93jaw [IFDEF] Memory \ Memory is a bigFORTH feature - Memory + also Memory : initmem ( var len -- ) 2dup swap handle! >r @ r> erase ; - Target + toss [ELSE] : initmem ( var len -- ) tuck allocate abort" CROSS: No memory for target" @@ -201,6 +208,8 @@ CREATE Bittable 80 c, 40 c, 20 c, 10 c, : ! ( w taddr -- ) >r bswap r> >image ! ; : c@ ( taddr -- char ) >image c@ ; : c! ( char taddr -- ) >image c! ; +: 2@ ( taddr -- x1 x2 ) T dup cell+ @ swap @ H ; +: 2! ( x1 x2 taddr -- ) T swap over ! cell+ ! H ; \ Target compilation primitives 06oct92py \ included A! 16may93jaw @@ -263,8 +272,10 @@ Variable atonce atonce off : gfind ( string -- ghost true/1 / string false ) \ searches for string in word-list ghosts \ !! wouldn't it be simpler to just use search-wordlist ? ae - >r get-order 0 set-order also ghosts r> find >r >r - set-order r> r@ IF >body THEN r> ; + dup count [ ' ghosts >body ] ALiteral search-wordlist +\ >r get-order 0 set-order also ghosts r> find >r >r + >r r@ IF >body nip THEN r> ; +\ set-order r> r@ IF >body THEN r> ; VARIABLE Already @@ -339,7 +350,7 @@ VARIABLE ^imm ^imm @ @ dup = ?EXIT <> ABORT" CROSS: Cannot immediate a unresolved word" ^imm @ ! ; -: restrict ; +: restrict 40 flag! ; >CROSS \ ALIAS2 ansforth conform alias 9may93jaw @@ -480,6 +491,8 @@ Cond: [Char] ( "" -- ) restrict Cond: EXIT ( -- ) restrict? compile ;S ;Cond +Cond: ?EXIT ( -- ) 1 abort" CROSS: using ?exit" ;Cond + Cond: ; ( -- ) restrict? depth ?dup IF 1- <> ABORT" CROSS: Stack changed" ELSE true ABORT" CROSS: Stack empty" THEN