18.10.2013 Views

V4N4 - Complang

V4N4 - Complang

V4N4 - Complang

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

8080 fig-FORTH in ROM<br />

Ted Croal<br />

Brantford General Hospital<br />

Ontario, Canada<br />

Editor’s note: This article outlines the<br />

author’s experiences in modifying the<br />

8080 fig-FORTH assembly listing to run<br />

in ROM. The easiest way to make such<br />

a substantive change to a FORTH sys-<br />

tem, of course, is to use a cross-compil-<br />

er. This allows you to modify FORTH<br />

in FORTH.<br />

Like many others, I joined the FORTH<br />

Interest Group after reading about<br />

FORTH in the August 1980 issue of<br />

Byte. I had become weary of program-<br />

ming in hand assembled machine<br />

language and it seemed to me that<br />

FORTH would be a big improvement.<br />

I have not been disappointed.<br />

I was a bit dismayed, however, when<br />

I received my copy of 8080 fig-FORTH<br />

(1) to find that some modifications<br />

would be required to place the code in<br />

ROM. As my home-built S-100 system,<br />

which is a mixture of kits, assembled<br />

boards and wire-wrap, has no disk,<br />

and I was not willing to wait for the<br />

FORTH core to load from cassette<br />

every time I wanted to use it, I began<br />

at once to copy the listing in a form<br />

suitable for ROM.<br />

I had a 16K EPROM board assigned<br />

to the upper quarter of memory and I<br />

was in the process of rewriting my<br />

utilities to use my new 1K memory<br />

mapped video board. I therefore de-<br />

cided to begin the ROM listing at the<br />

lowest address on the EPROM board,<br />

COOOH (START) instead of 0000H.<br />

This meant transposing all the ad-<br />

dresses up 48K, that is OlOOH became<br />

ClOOH, 1000H became DOOOH, and so<br />

on. This is a relatively simple but time<br />

consuming task (especially without an<br />

assembler). It soon became apparent<br />

that more was required than simply<br />

transposing the addresses. Certain<br />

values change during the execution of<br />

FORTH and must be in RAM. Before<br />

proceeding very far with the project I<br />

found it necessary to assign functions<br />

to the various parts of my RAM. I have<br />

16K of RAM in the first quarter of<br />

memory. I decided to use the first 10K<br />

for screens and the next 6K for RAM<br />

dictionary. The second quarter of the<br />

memory is not implemented in my<br />

system. The first kilobyte of the second<br />

half of the memory is occupied by my<br />

cassette interface. I then have 2K of<br />

RAM before my video display which<br />

begins at 8COOH. The rest of memory<br />

to COOOH is not implemented.<br />

I decided to use the 2K of RAM<br />

below the video board for the main<br />

FORTH stack, the terminal input buf-<br />

fer, return stack, user variables, a<br />

single 1K screen buffer and assorted<br />

patches. The size function and labels<br />

for these areas are well explained in<br />

the fig-FORTH installation manual (2).<br />

As there is plenty of room for these, I<br />

used larger sections of memory than<br />

suggested in the manual. Listing 1 is a<br />

set of equates which I used to replace<br />

those supplied on page 2 of the fig-<br />

FORTH 8080 Assembly Source List-<br />

ing. If space is a problem, US and RTS<br />

could be restored to 64 and 160 respec-<br />

tively, and STACK could be reduced<br />

to 64.<br />

LISTING 1<br />

r k ijeil ~ heaors Allocation; Euuates to establish stacKsi terminal input<br />

buffer, u5er variables and a sinsle lh buffer.<br />

9490 = KBBUF<br />

00N4 = us<br />

ERU 1014<br />

CRU 180<br />

30EO = RTS CRU 124<br />

0000 = STACK<br />

3400 = BTM<br />

ERU 96<br />

ERU 8400H<br />

3460 = INITSO EQU PTMtSTACK<br />

3540 = INITRO EOU INITSOtRTS<br />

35FJ = BUFl EQU INITROtUS<br />

35FS = BUFF ERU FUFlt2<br />

az-3 = EM ERU BUFFtKBRUFt2<br />

S A O ~ = STARTF EQU Ent8<br />

OOOA = NUMS EQU 10<br />

I300 = LEFlGTD ERU 1800H<br />

0000 = STARTS ERU 0<br />

280i3 = LENGTS ERU NUMSIKBBUF<br />

-1800 = STARTD ERU STARTStLENGTS<br />

4000 = ENIlD ERU STARTDtLENGTD<br />

3540 = USRASE ERU INITRO<br />

9577 = RPF‘ ERU USHASEt32H<br />

000B = BYTASh EQU 11<br />

280H = INITDF ERU STARTDtBYTASK<br />

8C00 = START’J ERU BCOOH<br />

I<br />

I<br />

I<br />

1<br />

I<br />

I<br />

1<br />

I<br />

i<br />

i<br />

i<br />

i<br />

I<br />

I<br />

i<br />

i<br />

I<br />

I<br />

9<br />

I<br />

I<br />

I<br />

data bytes Per huffer<br />

user variable space<br />

return stack and TIB<br />

stack space<br />

startins adr of ?K memory blocK<br />

tor of stack<br />

tor of return stack<br />

index of buffer<br />

first data brte of buffer<br />

uwer l i m i t of buffer<br />

start of RAM patch<br />

number of screens in system<br />

lendth of RAM dictionarrr6K<br />

start of first screen<br />

length of screen memorrll0K<br />

start of RAH dictionary<br />

end of dictionary area<br />

user variable base address<br />

return staclc Pointer<br />

number of bytes in “TASK”<br />

initial value of dictionarr pointer<br />

start adr of video display<br />

LIZTING 2<br />

:oi~ilrz Lu Lw i~mvrd to RAlY on cold start. See pages 46 and 54 of Assemhlr<br />

SUUI ce LisLins.<br />

c3c; c5<br />

COE7 46JF5254<br />

COtEi CG<br />

COCC BZCF<br />

COCK CCCA<br />

coro EXF<br />

cor:! ai<br />

cor; AO<br />

cor4 o m<br />

COf6 0000<br />

COF3 23<br />

COF? UROO<br />

COFB C?<br />

corc 7n<br />

cOrn 11300<br />

coFr c?<br />

FORTH Dimensions 16<br />

ORG COE6I-I<br />

FATCH DD OCSH i FORTH<br />

DB ’ FORT’<br />

DB ’ H’ +SOH<br />

~ I W WOCAD-13<br />

TORTIi DW DOIIOE<br />

DW rlovoc<br />

1111 81H<br />

DE: ’ ’t80H<br />

DW STARTU i start of RAM dictionarr<br />

nw o i end of vocabularr list<br />

; used hr F@<br />

IrWATCN HOU MIE<br />

IN 0<br />

RET<br />

; used hr F!<br />

OUTPATCH MOV AIL<br />

OUT 0<br />

RET<br />

Volume IV, No 4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!