--- gforth/cross.fs 1999/02/21 11:43:12 1.69 +++ gforth/cross.fs 1999/02/22 19:05:45 1.72 @@ -326,19 +326,43 @@ s" relocate" T environment? H \ \ Create additional parameters 19jan95py -1 8 lshift Constant maxbyte +\ currently cross only works for host machines with address-unit-bits +\ eual to 8 because of s! and sc! +\ but I start to query the environment just to modularize a little bit + +: check-address-unit-bits ( -- ) +\ s" ADDRESS-UNIT-BITS" environment? +\ IF 8 <> ELSE true THEN +\ ABORT" ADDRESS-UNIT-BITS unknown or not equal to 8!" + +\ shit, this doesn't work because environment? is only defined for +\ gforth.fi and not kernl???.fi + ; + +check-address-unit-bits +8 Constant bits/byte \ we define: byte is address-unit + +1 bits/byte lshift Constant maxbyte \ this sets byte size for the target machine, an (probably right guess) jaw T -NIL Constant TNIL -cell Constant tcell -cell<< Constant tcell<< -cell>bit Constant tcell>bit -bits/byte Constant tbits/byte -bits/byte 8 / Constant tchar -float Constant tfloat -1 bits/byte lshift Constant tmaxbyte +NIL Constant TNIL +cell Constant tcell +cell<< Constant tcell<< +cell>bit Constant tcell>bit +bits/char Constant tbits/char +bits/char H bits/byte T / + Constant tchar +float Constant tfloat +1 bits/char lshift Constant tmaxchar +[IFUNDEF] bits/byte +8 Constant tbits/byte +[ELSE] +bits/byte Constant tbits/byte +[THEN] H +tbits/byte bits/byte / Constant tbyte + \ Variables 06oct92py @@ -353,30 +377,6 @@ Variable bit$ Variable headers-named 0 headers-named ! Variable user-vars 0 user-vars ! -\ Memory initialisation 05dec92py - -[IFDEF] Memory \ Memory is a bigFORTH feature - also Memory - : initmem ( var len -- ) - 2dup swap handle! >r @ r> erase ; - toss -[ELSE] - : initmem ( var len -- ) - tuck allocate abort" CROSS: No memory for target" - ( len var adr ) dup rot ! - ( len adr ) swap erase ; -[THEN] - -\ MakeKernal 12dec92py - -: makekernel ( targetsize -- targetsize ) - bit$ over 1- tcell>bit rshift 1+ initmem - image over initmem ; - ->MINIMAL -: makekernel makekernel ; ->CROSS - : target>bitmask-size ( u1 -- u2 ) 1- tcell>bit rshift 1+ ; @@ -384,8 +384,6 @@ Variable user-vars 0 user-vars ! dup allocate ABORT" CROSS: No memory for target" swap over swap erase ; - - \ \ memregion.fs @@ -491,10 +489,10 @@ T has? rom H : setup-target ( -- ) \G initialize targets memory space s" rom" T $has? H IF \ check for ram and rom... - address-space area nip 0<> + \ address-space area nip 0<> ram-dictionary area nip 0<> rom-dictionary area nip 0<> - and and 0= + and 0= ABORT" CROSS: define address-space, rom- , ram-dictionary, with rom-support!" THEN address-space area nip @@ -519,12 +517,20 @@ T has? rom H r@ >rmem ! target>bitmask-size allocatetarget - dup - bit$ ! + dup bit$ ! r> >rbm ! ELSE r> drop THEN - REPEAT ; + REPEAT drop ; + +\ MakeKernal 22feb99jaw + +: makekernel ( targetsize -- targetsize ) + dup dictionary >rlen ! setup-target ; + +>MINIMAL +: makekernel makekernel ; +>CROSS \ \ switched tdp for rom support 03jun97jaw @@ -603,8 +609,8 @@ variable constflag constflag off : cell+ tcell + ; : cells tcell<< lshift ; -: chars ; -: char+ 1 + ; +: chars tchar * ; +: char+ tchar + ; : floats tfloat * ; >CROSS @@ -726,7 +732,7 @@ T has? relocate H : cfalign ( -- ) T here H cfalign+ 0 ?DO bl T c, tchar H +LOOP ; -: >address dup 0>= IF tchar / THEN ; \ ?? jaw +: >address dup 0>= IF tbyte / THEN ; \ ?? jaw : A! swap >address swap dup relon T ! H ; : A, ( w -- ) >address T here H relon T , H ;