version 1.112, 2001/09/12 11:48:36
|
version 1.116, 2001/11/11 22:33:31
|
Line 202 Create bases 10 , 2 , A , 100 ,
|
Line 202 Create bases 10 , 2 , A , 100 ,
|
|
|
[THEN] |
[THEN] |
|
|
|
\ this provides assert( and struct stuff |
|
\GFORTH [IFUNDEF] assert1( |
|
\GFORTH also forth definitions require assert.fs previous |
|
\GFORTH [THEN] |
|
|
|
>CROSS |
|
|
hex \ the defualt base for the cross-compiler is hex !! |
hex \ the defualt base for the cross-compiler is hex !! |
\ Warnings off |
\ Warnings off |
|
|
Line 1007 Variable reuse-ghosts reuse-ghosts off
|
Line 1014 Variable reuse-ghosts reuse-ghosts off
|
|
|
\ ' >ghostname ALIAS @name |
\ ' >ghostname ALIAS @name |
|
|
|
: findghost ( "ghostname" -- ghost ) |
|
bl word gfind 0= ABORT" CROSS: Ghost don't exists" ; |
|
|
: [G'] ( -- ghost : name ) |
: [G'] ( -- ghost : name ) |
\G ticks a ghost and returns its address |
\G ticks a ghost and returns its address |
\ bl word gfind 0= ABORT" CROSS: Ghost don't exists" |
findghost |
ghost state @ IF postpone literal THEN ; immediate |
state @ IF postpone literal THEN ; immediate |
|
|
: g>xt ( ghost -- xt ) |
: g>xt ( ghost -- xt ) |
\G Returns the xt (cfa) of a ghost. Issues a warning if undefined. |
\G Returns the xt (cfa) of a ghost. Issues a warning if undefined. |
Line 1043 End-Struct addr-struct
|
Line 1053 End-Struct addr-struct
|
|
|
\ Predefined ghosts 12dec92py |
\ Predefined ghosts 12dec92py |
|
|
|
Ghost - drop \ need a ghost otherwise "-" would be treated as a number |
|
|
Ghost 0= drop |
Ghost 0= drop |
Ghost branch Ghost ?branch 2drop |
Ghost branch Ghost ?branch 2drop |
Ghost (do) Ghost (?do) 2drop |
Ghost (do) Ghost (?do) 2drop |
Line 1057 Ghost '
|
Line 1069 Ghost '
|
Ghost :docol Ghost :doesjump Ghost :dodoes 2drop drop |
Ghost :docol Ghost :doesjump Ghost :dodoes 2drop drop |
Ghost :dovar drop |
Ghost :dovar drop |
Ghost over Ghost = Ghost drop 2drop drop |
Ghost over Ghost = Ghost drop 2drop drop |
Ghost - drop |
|
Ghost 2drop drop |
Ghost 2drop drop |
Ghost 2dup drop |
Ghost 2dup drop |
|
Ghost state drop |
|
Ghost call drop |
|
Ghost @ drop |
|
Ghost useraddr drop |
|
Ghost execute drop |
|
Ghost + drop |
|
Ghost (C") drop |
|
Ghost decimal drop |
|
Ghost hex drop |
|
|
\ \ Parameter for target systems 06oct92py |
\ \ Parameter for target systems 06oct92py |
|
|
Line 1142 true DefaultValue standardthreading
|
Line 1160 true DefaultValue standardthreading
|
s" relocate" T environment? H |
s" relocate" T environment? H |
\ JAW why set NIL to this?! |
\ JAW why set NIL to this?! |
[IF] drop \ SetValue NIL |
[IF] drop \ SetValue NIL |
[ELSE] >ENVIRON T NIL H SetValue relocate |
[ELSE] >ENVIRON X NIL SetValue relocate |
[THEN] |
[THEN] |
|
>TARGET |
|
|
|
0 Constant NIL |
|
|
>CROSS |
>CROSS |
|
|
Line 1224 Variable mirrored-link \ linked
|
Line 1245 Variable mirrored-link \ linked
|
: >rlen cell+ ; |
: >rlen cell+ ; |
: >rstart ; |
: >rstart ; |
|
|
|
: (region) ( addr len region -- ) |
|
\G change startaddress and length of an existing region |
|
>r r@ last-defined-region ! |
|
r@ >rlen ! dup r@ >rstart ! r> >rdp ! ; |
|
|
: region ( addr len -- ) |
: region ( addr len -- ) |
\G create a new region |
\G create a new region |
Line 1237 Variable mirrored-link \ linked
|
Line 1262 Variable mirrored-link \ linked
|
region-link linked 0 , 0 , 0 , bl word count string, |
region-link linked 0 , 0 , 0 , bl word count string, |
ELSE \ store new parameters in region |
ELSE \ store new parameters in region |
bl word drop |
bl word drop |
>body >r r@ last-defined-region ! |
>body (region) |
r@ >rlen ! dup r@ >rstart ! r> >rdp ! |
|
THEN ; |
THEN ; |
|
|
: borders ( region -- startaddr endaddr ) |
: borders ( region -- startaddr endaddr ) |
Line 1356 T has? rom H
|
Line 1380 T has? rom H
|
|
|
\ MakeKernel 22feb99jaw |
\ MakeKernel 22feb99jaw |
|
|
: makekernel ( targetsize -- targetsize ) |
: makekernel ( targetsize -- ) |
dup dictionary >rlen ! setup-target ; |
\G convenience word to setup the memory of the target |
|
\G used by main.fs of the c-engine based systems |
|
100 swap dictionary (region) |
|
setup-target ; |
|
|
>MINIMAL |
>MINIMAL |
: makekernel makekernel ; |
: makekernel makekernel ; |
Line 1937 Variable to-doc to-doc on
|
Line 1964 Variable to-doc to-doc on
|
\ Target TAGS creation |
\ Target TAGS creation |
|
|
s" kernel.TAGS" r/w create-file throw value tag-file-id |
s" kernel.TAGS" r/w create-file throw value tag-file-id |
|
s" kernel.tags" r/w create-file throw value vi-tag-file-id |
\ contains the file-id of the tags file |
\ contains the file-id of the tags file |
|
|
Create tag-beg 2 c, 7F c, bl c, |
Create tag-beg 2 c, 7F c, bl c, |
Create tag-end 2 c, bl c, 01 c, |
Create tag-end 2 c, bl c, 01 c, |
Create tag-bof 1 c, 0C c, |
Create tag-bof 1 c, 0C c, |
|
Create tag-tab 1 c, 09 c, |
|
|
2variable last-loadfilename 0 0 last-loadfilename 2! |
2variable last-loadfilename 0 0 last-loadfilename 2! |
|
|
Line 1955 Create tag-bof 1 c, 0C c,
|
Line 1984 Create tag-bof 1 c, 0C c,
|
s" ,0" tag-file-id write-line throw |
s" ,0" tag-file-id write-line throw |
THEN ; |
THEN ; |
|
|
: cross-tag-entry ( -- ) |
: cross-gnu-tag-entry ( -- ) |
tlast @ 0<> \ not an anonymous (i.e. noname) header |
tlast @ 0<> \ not an anonymous (i.e. noname) header |
IF |
IF |
put-load-file-name |
put-load-file-name |
source >in @ min tag-file-id write-file throw |
source >in @ min tag-file-id write-file throw |
tag-beg count tag-file-id write-file throw |
tag-beg count tag-file-id write-file throw |
tlast @ >image count 1F and tag-file-id write-file throw |
Last-Header-Ghost @ >ghostname tag-file-id write-file throw |
tag-end count tag-file-id write-file throw |
tag-end count tag-file-id write-file throw |
base @ decimal sourceline# 0 <# #s #> tag-file-id write-file throw |
base @ decimal sourceline# 0 <# #s #> tag-file-id write-file throw |
\ >in @ 0 <# #s [char] , hold #> tag-file-id write-line throw |
\ >in @ 0 <# #s [char] , hold #> tag-file-id write-line throw |
Line 1969 Create tag-bof 1 c, 0C c,
|
Line 1998 Create tag-bof 1 c, 0C c,
|
base ! |
base ! |
THEN ; |
THEN ; |
|
|
|
: cross-vi-tag-entry ( -- ) |
|
tlast @ 0<> \ not an anonymous (i.e. noname) header |
|
IF |
|
sourcefilename vi-tag-file-id write-file throw |
|
tag-tab count vi-tag-file-id write-file throw |
|
Last-Header-Ghost @ >ghostname vi-tag-file-id write-file throw |
|
tag-tab count vi-tag-file-id write-file throw |
|
s" /^" vi-tag-file-id write-file throw |
|
source vi-tag-file-id write-file throw |
|
s" $/" vi-tag-file-id write-line throw |
|
THEN ; |
|
|
|
: cross-tag-entry ( -- ) |
|
cross-gnu-tag-entry |
|
cross-vi-tag-entry ; |
|
|
\ Check for words |
\ Check for words |
|
|
Defer skip? ' false IS skip? |
Defer skip? ' false IS skip? |
Line 2167 Comment ( Comment \
|
Line 2212 Comment ( Comment \
|
\ compile 10may93jaw |
\ compile 10may93jaw |
|
|
: compile ( "name" -- ) \ name |
: compile ( "name" -- ) \ name |
\ bl word gfind 0= ABORT" CROSS: Can't compile " |
findghost |
ghost |
|
dup >exec-compile @ ?dup |
dup >exec-compile @ ?dup |
IF nip compile, |
IF nip compile, |
ELSE postpone literal postpone gexecute THEN ; immediate restrict |
ELSE postpone literal postpone gexecute THEN ; immediate restrict |
Line 2190 Cond: ['] T ' H alit, ;Cond
|
Line 2234 Cond: ['] T ' H alit, ;Cond
|
|
|
: [T'] |
: [T'] |
\ returns the target-cfa of a ghost, or compiles it as literal |
\ returns the target-cfa of a ghost, or compiles it as literal |
postpone [G'] state @ IF postpone g>xt ELSE g>xt THEN ; immediate |
postpone [G'] |
|
state @ IF postpone g>xt ELSE g>xt THEN ; immediate |
|
|
\ \ threading modell 13dec92py |
\ \ threading modell 13dec92py |
\ modularized 14jun97jaw |
\ modularized 14jun97jaw |
Line 2315 Cond: MAXI
|
Line 2360 Cond: MAXI
|
;Cond |
;Cond |
|
|
>CROSS |
>CROSS |
|
|
\ Target compiling loop 12dec92py |
\ Target compiling loop 12dec92py |
\ ">tib trick thrown out 10may93jaw |
\ ">tib trick thrown out 10may93jaw |
\ number? defined at the top 11may93jaw |
\ number? defined at the top 11may93jaw |
Line 2335 Cond: MAXI
|
Line 2381 Cond: MAXI
|
IF 0> IF swap lit, THEN lit, discard |
IF 0> IF swap lit, THEN lit, discard |
ELSE 2drop restore-input throw Ghost gexecute THEN ; |
ELSE 2drop restore-input throw Ghost gexecute THEN ; |
|
|
>TARGET |
|
\ : ; DOES> 13dec92py |
\ : ; DOES> 13dec92py |
\ ] 9may93py/jaw |
\ ] 9may93py/jaw |
|
|
|
>CROSS |
|
|
: compiling-state ( -- ) |
: compiling-state ( -- ) |
\G set states to compililng |
\G set states to compililng |
Compiling comp-state ! |
Compiling comp-state ! |
Line 2353 Cond: MAXI
|
Line 2400 Cond: MAXI
|
IF >ghost-xt @ execute X off ELSE drop THEN |
IF >ghost-xt @ execute X off ELSE drop THEN |
Interpreting comp-state ! ; |
Interpreting comp-state ! ; |
|
|
|
>TARGET |
|
|
: ] |
: ] |
compiling-state |
compiling-state |
BEGIN |
BEGIN |
Line 3004 magic 7 + c!
|
Line 3053 magic 7 + c!
|
: save-cross ( "image-name" "binary-name" -- ) |
: save-cross ( "image-name" "binary-name" -- ) |
bl parse ." Saving to " 2dup type cr |
bl parse ." Saving to " 2dup type cr |
w/o bin create-file throw >r |
w/o bin create-file throw >r |
TNIL IF |
s" header" X $has? IF |
s" #! " r@ write-file throw |
s" #! " r@ write-file throw |
bl parse r@ write-file throw |
bl parse r@ write-file throw |
s" --image-file" r@ write-file throw |
s" --image-file" r@ write-file throw |
Line 3020 magic 7 + c!
|
Line 3069 magic 7 + c!
|
THEN |
THEN |
image @ there |
image @ there |
r@ write-file throw \ write image |
r@ write-file throw \ write image |
TNIL IF |
s" relocate" X $has? IF |
bit$ @ there 1- tcell>bit rshift 1+ |
bit$ @ there 1- tcell>bit rshift 1+ |
r@ write-file throw \ write tags |
r@ write-file throw \ write tags |
THEN |
THEN |