Re: Segments and colorforth

"Ray St. Marie" <[email protected]>
Newsgroups gmane.comp.lang.forth.colorforth
Message-ID <[email protected]>
Albert, 
I'm so glad your into colorforth, and that you share your work
Soon, we will have complete and "utter" control of the beast.
Ray

On 5/17/05, Albert van der Horst <[email protected]> wrote:
> Hi folks,
> 
> A segment in an assembler context is a range of memory
> with a common location pointer.  2]
> This is indispensible in more complicated assembly programming,
> and disassembling e.g. Windows executables.
> In behalf of colorforth and those other applications I have now added
> segments to my ciasdis tool.
> 
> In assembling a colorforth definition data is added in three places,
> in the normal executable code, in the huffman table, and in the
> execution token table.
> 
> So the natural way to define ``emit'' in an assembler that features
> segments is use three segments, like this:
> 
> <x> <y> <z> SEGMENT ForthHuff:
> <a> <b> <c> SEGMENT ForthXT:
> <k> <l> <m> SEGMENT Default:
> 
> ....
> :emit   ( 3] )
>     ForthHuff: dl "emit" >CN    ( 1] )
>     ForthXT:   dl emit
>     default:
>     call qcr
>     push ESI
>     push EDI
>     push EDX
>      imul EAX, 16*24/8
>      lea  ESI, icons[EAX]
>      call clip
>      mov  EDX, fore
>      mov  ECX, 24
>      ...
> 
> With a suitable definition for ForthHeader,
> this becomes
> 
> ...
> ForthHeader emit
>     call qcr
>     push ESI
>     push EDI
>     push EDX
>      imul EAX, 16*24/8
>      lea  ESI, icons[EAX]
>      call clip
>      mov  EDX, fore
>      mov  ECX, 24
>      ...
> 
> There is another set of segments needed for MacroHeader.
> 
> Within the context of ciasdis we can now define ForthHeader like this:
> 
> : ForthHeader
>     NAME   "X_" PAD $!   2DUP PAD $+!  \ PAD now contains "X_emit"
>     _AP_   ForthXT: AS-,               \ Assemble default program counter
>     _AP_ ROT ROT LABELED               \ Add emit to the assembler labels.
>     PAD $@ >CN ForthHuff: AS-,         \ Assemble colorforth name
>     Default:                           \ Back to code segment
> ;
> 
> It may not be a metacompiler, but it is substantially less
> cumbersome than
> 
>        ...
> emit:
>        ...
>        dd (((4 shl 5+21o)shl 4+7)shl 4+2)shl 15 ; emit
>        ..
>        dd   ... emit ...        \ At the right place!
>        ..
> 
> Adding segments took one evening, not bad. First I collected the
> target start address, the buffer address and the program counter into
> a segment class, and defined one object of that class. It still worked.
> Then I added a bag to register all objects of the class segment, and
> code in the end to write out all segments looping over the bag. It
> still worked.
> A segment has an extra property that was not present before. First
> there was one codespace and it was implied that it would be written at
> offset zero in the file. Now each segment has a method (my Forth
> classes only have methods, no fields) that gives the file offset where
> it has to be written.
> 
> 1] >CN turns an address count string pair into a colorforth name, i.e.
> one machineword.
> 2] This is different than Intel segments, though not totally
> unrelated.
> 3] :name defines label ``name'' in ciasdis
> 
> Note:
> This is very recent. There are no examples of this on my site yet.
> The code given here has not been tested. Adapting the crawler to take
> advantage of segments is still to be done.
> 
> Groetjes Albert
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> Main web page - http://www.colorforth.com
> 
> 


-- 
Ray St. Marie
Rastm2ATusersDOTsourceforgeDOTnet
Ray.StMarieATgmailDOTcom and ATsbcglobalDOTnet
Ray_stmarieAThotmailDOTcom
Raystm2 and rastm2 in Internet Relay Chat (irc)
/connect  irc.freenode.net Busness discussion: /join #biz 
ColorForth: /join #c4th #c4th-ot Forth: /join #retro #forth #concatenative
Programming: /join #python #lisp #scheme #asm
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.