Varieties of Threaded Code For Language Implementation
Varieties of Threaded Code For Language Implementation
Language Implementation
Terry Ritter
Gregory Walker
Motorola Inc, Mail Drop M2880
3501 Ed Bluestein Blvd
Austin TX 78721
Between a high-level language (HLL) and its underlying tion is then executed in order to run the program. A com
machine architecture lurk many language implementa- piler is a computer program that translates high-level
. tion techniques . These include the older techniques of language programs into instructions of another language .
interpretation and compilation, as well as newer ones like Traditionally, assemblers and compilers translate their
intermediate languages and threaded code . In this article, input into machine-level code .
we will present four types of threaded code techniques for Interpretation: Interpretation techniques directly exe
implementing intermediate languages. We will examine cute the high-level language program . The interpreter is a
how these four logically equivalent techniques offer program that sees the high-level language source program
various trade-offs of execution speed, program storage, as a series of operation (op) codes used to guide its execu
and use of processor resources . tion. The interpretive system appears to the user as a
"virtual machine" that has the architecture of the high
lmplemention of a Language level language .
The implementation of a high-level language on Any form of interpretation offers significant oppor
various logical or physical machine architectures in tunities for implementing debugging tools. Tests per
volves such characteristic trade-offs as size of the formed as each command is interpreted can result in a
language implementation, si�e of generated code, and programmer-controlled display of debugging informa
speed of program execution . We will bypass other issues tion. This is the basis for trace or breakpoint facilities
of high-level language use (eg: interaction, debugging, that can be included in the interpreter.
testing, etc) and concentrate on language implementation Combinations: Combination techniques may translate
considerations. the sequence of characters representing a high-level
Language implementation techniques can be logically language keyword into a form that is easier to interpret.
divided into two categories: translation and interpre Most BASIC interpreters translate the BASIC keywords
tation. into one-byte tokens that are easier to identify. This
Translation: Translation techniques replace elements technique avoids the continual string searches of a tradi
of higher-level syntax with lower-level instructions that tional interpreter, but executes a language that is syntac
perform an equivalent operation. The resulting transla- tically unchanged from the high-level-language source
program. (For our purposes here, the term syntax will
About the Authors specifically refer to the structural relationship between
Terry Ritter and Gregory Walker are software engineers at the language elements . )
Motorola Microprocessor Design Group, wl1ere their exploration into Intermediate language: Intermediate-language (IL)
the structure of computer languages led them to examine FORTH and
other threaded languages for use as a possible software tool. Terry techniques translate the high-level-language programs in
Ritter is one of the co-architects of the M C6809 m icroprocessor and has to a language that is simultaneously easier to deal with
been involved with personal computing since 1 974. Gregory Walker is and syntactically different from the original . Many com
on the IEEE floating-point standards committee and has been involved pilers translate a high-level-language program into an
with microcomputers since 1975.
intermediate language, which is then translated into
of
w()sted trying to track down a "program bug" when actually
hardware was to blame!
Aspects Intermediate-Language Architecture
An intermediate language is composed of a set of
DIAGNOSTICS I als_o allows you to be confident of your system.
This can be critical when file merges or sorts and backups
primitive operations (which, in combination, can express
are involved. You want to be as sure of your computer as possible any algorithm) and storage capabilities for both internal
quring these critical times. Running DIAGNOSTICS I prior to and program data. In particular, it must be possible to
these and other important functions helps to insure that your pass data values between routines that make up the inter
system is operating at peak performance. mediate language. The intermediate-language program
JSR A
JSR 8
( I L c od e ) ( Ma c h i ne Code )
A: m a c h i n e code 8: m a c h i n e code
for call rou t i n e
( I nto r m e d iota - L a n g u a g e cod e ) ( M a c h i n e code )
� L
A· JSR L 8: machine
language � M m a c h i ne code
JSR M routine for next
RTS
� return
RTS
1 12-24 ,
R ETURN: � return
1945 ROUTE 22
CORPiJRATION
20 1- 688-7800
direct temporary storage" and "code temporary storage" store
Th e
mediate language representation. (A stack architecture is
certainly simpler than other architectures, but that does
not mean it is better; many complex trade-offs that are
is shaping up . . .
Threaded Code
Threaded code is an intermediate-language implemen
tation technique that organizes the control of program
flow into a sequence of subroutine invocations. No other
aspects of the language are represented in threaded code.
Threaded code is especially applicable to interpretation;
the interpretation process consists of transferring control
to the routines selected by the threaded-code op codes .
The functions available in the intermediate language are
provided by the subroutines that are invoked and are not
an inherent part of the threaded code itself.
[ The characteristics of the language FOR TH are in
dependent of its current implementation via threaded
code. FORTH enthusiasts often blur the distinction,
attributing the language 's speed and compactness to the
language instead of to its threaded-code implementation .
I think this is an important point t o remember when talk
ing about the advantages of FORTH. . . . GW)
Threaded-code intermediate languages are especially
applicable to the implementation of virtual machines em M EASU REM ENT
i n co rporated
bodying zero-address architectures. As such, the tech systems &.. controls
nique of using threaded code to implement a language
can be applied to, for example, Pascal (using the p-code
intermediate language), LISP interpreters, or, of course,
�5����.��. Software
FORTH. We classify four varieties of threaded code:
subroutine, direct, indirect, and token.
All varieties of threaded code consist of a data struc
ture that is a sequence of unique subroutine identifiers.
Crabt r e e B l v d .
Traditionally, threaded code has been kept close to the R a l e r g h , N o r t h Ca r o l i n a 27604 (9 1 9 ) 833-4094
machine level and has included actual pointers to the
AT LAST' A fu l l y implemen t ed computer based file m a n agement
subroutines (which themselves may be either interme a few m i n u t es or i n s t r u c t i o n a n d you arc creating and using your own
diate language or machine code). Also traditionally, a client mailing l i s t s . i n ve n t o r ie s . bibliographies, vendor l i s t s , and more.
Build your custom defined and formatted reports and data summaries.
Print lables with user specified format� t ha t f i t your forms.
Implementing Threaded Structures DBMSSO and R E P O RTSO will r u n under C P/ M o r T R S DOS
We will now describe the structures associated with the DBMSSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $250.00
........... . . . . . . . . . . . . . . . . . . . . . . . . . . . . $ 1 00.00
various types of threaded code. Figures 1 through 4 pre R E P O RTSO .
Manuals each .. . . . . . . . . $25.00
sent diagrams of subroutine-, .direct-, indirect-, and token OTHER P R O DUCTS O F M l C R O BYTE SOFT W A R E :
threaded code structures, respectively, along with a des EDIT80 . . . . . . . , . . . . . . . . . . . . . . . . , . , . . . . . . . . . . . . . . , . . , . . . . . . $ 1 00.00
cription of the three operations, next, call, and return , Text editor and p r i n t formatte r runs under C P /M or T R S DOS
U I S K 8 0 . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $50.00
which make up the complete threaded-code interpreter. U t i l i t y which allows you t o and p a t c h a d i s k .
need not be related to the underlying machine architec AI-'1-'I.E is a lrademarL. u f Appll' l"ttnllllllt'r ( ·urp .
is a lrademurk uf Taml� l"urp.
t o k e n end : - return
pointers, the compiler generates intermediate-language
( I L code) ( M a c h i n e c od e )
code that does not include machine-language code itself;
thus it is independent of the target machine . However, a
A: token col/ B: t ok e n bst
disadvantage of indirect-threaded code is that the inter
token L BST: m a c h i ne c o d e
rout ine preter has the overhead of an extra level of indirect ad
t oken M
dressing.
m a c h i n e code
Token-threaded code: The varieties of threaded code
token end
f o r next previously mentioned contained pointers that were actual
addresses of the subroutines in memory. Using memory
addresses to select routines wastes storage because the
next col/ return
number of subroutines in the system is far smaller than
next 1 . get current token from list the number of memory locations. A savings in inter
2. point list pointer to next list item mediate-language program size can be obtained by using
3. look up address corresponding to token short tokens to identify the subroutines to be invoked .
4. get indi rect token at address
5 . look up address corresponding to indi rect Typically, token-threaded code (TTC) can be im
token plemented by using the current token to index into a table
6 . jump to machine code at that address
of subroutine addresses . (See figure 4 . )
call 1 . push cu rrent list pointer onto stack
2. load list pointer with start of new list High-Level Descriptions o f Threaded-Code
3. do " next"
Interpreters
return 1 . load current list pointer from top of stack Listings 1 thru 3 illustrate the logical implementation of
2. do " next" direct-, indirect-, and token-threaded code, respectively.
The program descriptions are written in a high-level
Figure 4: Diagram of token-threaded code (TTC) . Since tokens
language that is similar in appearance to Pascal. It differs
can be made shorter than addresses, this makes the threaded from Pascal in that the variables are not declared as stan
code more compact, but the table lookup makes the resulting dard Pascal data types . Also, the next, call, and return
code slower. Here, the "indirect token" is the contents of the operations are not written as Pascal procedures; this was
table entry that matches the current token of code. . done to remain faithful to actual implementations where
means an actual machine address. If ip is a pointer var l i s t _p o i n t e r : p o i nter; { i nterpreted p r ogram c ounter }
l i st_item: p o inter; { c on t a i n s t h readed-c o d e i te m }
variable, then - ip means the value at the location label n e x t , c a l L return;
ca1 1 : p u s h _o n _s t a c k < l i s t _p o i n t e r ) ;
goto - ip; { The value o f l i s t _i t e m wa s set by t h e preceding
{ ' ' n e x t '' o p e r a t i on .
l i s t_p o i n t e r : = l i s t _i t e m + c a l l _c o d e _l e n g t h ;
means jump to a new location using the contents of The f o l l ow i n g c od e dup l i cates the '' n e x t '' opera t i on.
l i s t _i t e m : = A l i s t _p o i n t e r ;
variable ip as the address at which to proceed with execu l i s t _p o i n t e r : = l i s t _p o i n t e r + p o i n t e r _l e n g t h ;
tion. goto A I i s t _i t e rn ;
return: l i s t _p o i n t e r : = p o p _f r om_s t a c k ( ) ;
{ The f o l l owing c od e dup l i cates the '' n e x t '' o p erat i on.
l i st i tem : = A l i s t_p o i n t e r ;
l i s t _p o i n t e r : = l i st-p o inter + p o i n t e r _l e n g t h ;
Implementation Concerns g oto Alist i tem;
traditional implementations of threaded-code
interpreters have had one or more machine registers
dedicated to the exclusive use of the interpreter; imple
Listing 2:Description of an indirect-threaded code interpreter in
mentations on microcomputers have tended to use all a Pascal-like language. See figure 3.
microprocessor resources . One problem with these imple
mentations is that all machine-language routines (where c an s t p o i n t e r _l e n g t h = ( le n g t h of an a d dress p o i n te r ) ;
{ interpreted p r o g ram c o unter
all real computation is done) must save processor var l i s t _p o i n t e r :
l i st i te m :
p o inter;
p o inter; { contains threa d e d - c o d e i t em
}
}
registers before modifying them and must restore them c o d e _p o i n t e r : p o inter; { p oints to actual ma c h i n e c ode }
label ne x t , c a l l . r e t u r n ;
before returning to the interpreter.
Additionally, this use of machine resources, simply for ne x t : l i st i te m
l i s t _p o i n t e r
"'· l i s t _p o i n t e r ;
: = l i s t _p o i n t e r + p o i n t e r _ l e n g t h ;
the transfer of control, 'obstructs the use of standard c o d e _p o i n t e r : = "'· l i s t _i t e m ; { h e r e i s t h .e e x t r a
{ leve l of i n d i re c t i o n
machine-language subroutines that pass parameters g ot o A c o d e_p o i n t e r ;
return: l i s t _p o i n t e r : = p o p _f r om_s t a c k ( ) ;
{ The f o l l ow i n g code d up l i c a t e s the '' n � x t '' o p er a t i on .
l i s t _i t e m : = "" l i s t _p o i n t e r ;
l i s t _p o i n t e r : = l i s t _p o i n t e r + p o i n t e � _l e n g t h ;
c o d e _p o i n t e r : = .., l i s t i tem;
g a te ......c o d .e _p o i n t e r ;
Listing 3 :
Description of a token-threaded code interpreter in a
The world's most popular microcomputer, with 1 6K of
Pascal-like language. See figure 4.
memory and Level I I basic for only $685 . complete with
full 90 day Radio Shack warranty. We accept check,
c an s t t o k e n _l e n g t h = ( l e n g t h o f t o k e n )
money order or phone orders with Visa orMasterCharge. c a l l _c o d e _ l e n g t h = ( length o f " ca l l " c ode s e g men t ) ;
t o k n umber ( n umber of to kens possi b l e ) ; { is 256 f o r an
(Sh ipping costs added to charge orders). =
8
{ 8-b i t t o k e n
Disk drives, printers, var l i s t _p o i n t e r : p o i n ter; { i nterpreted p r o g ram c o unter }
c o d e _p o i n t e r : p o inter; { p o i n t er to mat h i ne c ode }
peripherals, software Shown Is Level I. tab l e : a r r a y [ ! . . t o k n umb e r J of p o i nt e r ; { s u b r o u t i ne ta b l e }
Level II includes
and games . . . you Alphanumeric keypad. t o k en item: s h or t to ken;
label n e x t:-c a l 1 . r e t u r n ;
n a me it, we've got it
(Both Radio Shack & ne x t : t o k en i tem : = A l i s t _p o i n t e r ;
P
l i s t_ o i nter : = l i st_p o i n t e r + t o k e n_l e n g t h ;
other brands). Write ��-- - c o d e _p o i n t e r : = t a b l e [ t o k e n_i t e m J ;
t o k en_i t e m .....,c o d e_p o i n t e r J
or call for our :�
c o d e_p o i n t e r t a b l e [ t o k e n_i t e m ) ;
C &S
: =
call: p u s h_on_!i t a c k ( 1 i s t _p o i n t e r ) J
ELECTRONICS MART
{ The va l u e of t h e c o d e _p o i n t e r was set by the preced ing
{ ' ' n e x t '' o p e r a t i on .
l i s t _p o i n t er : = c o de_p o i n t e r + c a l l _c o d e _ l e n g t h ;
The f o l l ow i n g c ode d u p l i cates the ' ' n e x t '' o p er a t i on .
t o k en_i t e m := A l i s t _p o i n t e r ; ·
l i s t _p o i n t e r ; = l i s t_p o i n t e r + t o k e n _l e n g t h ;
Ltd. c o d e _p o i n t e r : = t a b l e [ t o k e n _i t e m ) ;
goto Ac o d e _p o i n t e r ;
5 -)t h r e a d p tr 1
t h re a d ptr 2
Ma c h l R o u t i n e IL R o u t i n e
NEXT: LEAS -2. S MAKE SPACE
CALL: PSHS Y PSHS X SAVE X
LEAY *+7, PCR STACK OLD THREAD PO INTER
JMP [ , Y++ J ADDR OF FOLLO W I N G IL CODE 5 ->x
JMP C. Y++J space
t h re a d ptr 1
FOB RETURN AOOR OF " R ETURN"
t h re a d ptr 2
processor when you want to manipulate the contents of RETURN: PULS y RECOVER OLD THREAD PTR
the interpreter registers . . . . GW ) The use of absolute loca BRA NEXT
,-.J ,� } JiJ
t h re a d p tr 2
$1.00 shipping and handling for orders BSR PUSH NEW THREAD PTR , G O T O PSHS X
79·287K Complete Kit $49.95 less than $20. Add 4% for VISA or M.G. 0: START OF THE IL CODE
79-287A Assembled $69.95
WE EXPORT TO ALL COUNTRIES: CALLERS BY APPOINTMENT ONLY CONTACT TONY WINTER 01 -636-8210
BARCLAYCARD ACCEPTED 89 Bedford Court Mansions BARCLAYCARD ACCEPTED
CBM APPROVED Bedford Avenue CBM APPROVED
London WC1, U.K.
CP/M Ver. 9.00 is one 1 6 K core program CP/M Ver. 9.00 Is one 16 K core program
using random access releasing both drives for using random access releasing both drives for
data storage, and 250 word vocabulary Is data storage, and 250 word vocabulary is
translatable in any foreign language. translatable in any foreign language.
PRICES: Programs 1 ·23 EXC (19,20,22,23) £475 £575 Stock Integrated Option + £100 Bank Integrated Option + £100
routines .
NEX T : LEAS -4 , S MAKE FREE STACK SPACE
P SH S U, X , D SAVE R E G I STERS
Listing 6 is an example of a moderately complex direct
threaded code interpreter. It is somewhat slower than the s '-) d
simple interpreter in listing 4, but it uses a standard RTS X
01NVOICE: Throw away your pens. Use the E L E C T R O N I C INVOICE facsimile displayed on your CAT. C ALL : PSHS D SAVE D
The program prompts and you fill in the data. Includes 3 address fields (yours, Bill to and Shi11 to). Invoice
No., Account No., Order No., Salesman, Terms, Ship Code, FOB Pt. and Date. U p to 10 items per sheet with
these descriptions: Item No., No. of units, Unit Price, Product Code, Product Oescription, Total Dollar
amount per item and invoice total dollar amount. Generates, at your optiOn, hard copy invoices, shi11ping 5 -> d
memos, mailing labels. audit copies and disc updates to master A/A files. (48K) . . . . . . . . . . 549.95
a d d r of " ne x t "
D BUSINESS C H E C K R E G ISTER: Expanded version of the Checkbook I I program. Handles up to 500 checks tab l e a d d r
per month wittl complete record (48K). . . . . . . . . . . . . . . . . . . . . . . . . . . S29.95
i n d ire c t
0 BUSINESS B U D G E T : As described above and companion program to Business Check Reaister. Handles
500 transactions per month, up to 20 cost categories. Accesses BCR files for actual costs. (48K) . . . . S29.9S
thread p tr
- California residents add 6Yt% sales taK. Make checks payable to: solute locations of the interpreter call and return routines
-
VISA
SPECTRUM SOFTWARE must be included in each direct-threaded code sub
O E A L E R I N Q U I R I ES P.O. B O X 20B4 · 142 CARL OW, SUNNYVALE, CA 94087 routine; this usually precludes the distribution of such
INVITED FOR P H O N E O R D E R S - 408-738-43B7
subroutines in read-only memory.
222 September 1980 © BYTE Publications Inc Circle 138 on inqu iry card.
Type of Threaded Code M C6809 M a c h i n e Ratio of C y c l es · R e l ative S ize of Can t h i s Code
C y c l es Used Used Resu l t i n g Be M arketed to
I ntermed i a t e- All Users of
Language a G iven
Code M i croprocessor?
Subroutine-threaded code 91 1 .0 3 no
Table 1: Comparison of threaded-code techniques. Notice that only two forms of threaded code, the relative subroutine-threaded
code and the token-indirect token-threaded code are sufficiently system-independent to be used for mass distribution to (poten-
tially) all users of a given microprocessor. ·
·
· ·
A possible alternative would be to modify the direct intermediate-language code unsuitable for distribution in
$ G OLD DISK $
CP/M® Compatible Z-80 Disassembler
R EC R EATES Z-80 ASSEM B LY LA N G UAG E SOU RCE F I LES F R O M
6200
•
E
•
.
threaded code will probably continue to use these tech
Computers
niques when implemented on microcomputers. New
:.;,
implementations should take advantage of the inter
� Gamblln1
• ..
. ' .tJ-,...�
- pretive nature of threaded code to provide extensive
-! debugging facilities. However, there is no excuse for the
,- . �
Ma1aalne ·
threaded-code implementor to prohibit the use of pre
�
·.
(45C
Statistics for thousands of horses were used to davelop this handicapping system. The
appendix of the manual contains a detailed tab run of a 100 consecutive race system workout
mediate language or interpreter that requires particular
showing an amazing 45% positive return for each S 1 .00 wagered). A graph is absolute storage locations is so obnoxious as to be un
also included showing PHD- 1 's close fit to the 1deal predicted probabil� vs. actual win
percentage curve.
worthy of discussion in polite programming society.
This program features: D Win probability end odds for each horse D Verification Absolute-address storage requirements are simply unac
display of each horse's prior to en!Ty for easy error correction D Bubble� or!
routine for final display Fecil�y for line printer output D Cassette ARCHIVE routine to ceptable in code written for mass distribution.
store PHD- 1 's output for later analysis D Complete users manual.
The user's manual may be ordered separately for your perusal for $7.95 and will be cred�ed
Within these constraints, the various forms of threaded
if you purchase PHD-1 . code offer different trade-offs of speed and code effi
Order now to get on our list and receive back issues FREEl
ciency . Because these forms are logically equivalent, a
PH D-1 User's Manual and 1 6 K Cassette for: Apple I I
Applesoft Challenger ( Specify Type), TRS-BOt Lave I l l . . . . $29.95 single compiler could be used tb generate any of them at
Ca. res. edd 6% the user's choice. Thus, without changing the source pro
Make checks pa yable to: J O E CO M P UTER
2 27 1 3 Ventura Blvd., Suite F, Woodland Hills, C A 9 1 364 gram, a threaded-code technique could be selected that
•BE A WINNER: Get on the Computers and Gambling Prowcts M111Jazine mailing list fnr $3.00 would give the desired trade-off between speed and code
and receiw available back issues.
t TRS-80 is a registered trademark of Tandy Corpora tion.
efficiency for a particular situation.
In the end, threaded-code implementation techniques
Th e 2nd
structures could result in a language representation that
would look more like Pascal p-code than threaded code.
Gen eration . . .
Threaded code does offer a conceptually simple and
general control-transfer technique that displays a clear
boundary be tween interpreta tion and language .
Cracked up to be.
FORTH . •
B i b l iography
1) Bartholdi, P, Stepwise Development and Debuging (sic) Using a
Small Well Structured Interactive Language for Data Acquisition and
Instrument Control. Copy received from the author. (Author's ad
dress: Observatoire De Geneve, CH-1 290-Sauverny, Switzerland.)
2) Bel l , James R, "Threaded Code," Communications of the ACM,
volume 1 6, number 6, June 1 973, pages 370 t h ru 372.
3) Dewar, Robert K, " I ndirect Threaded Code," Communications of
the ACM, volume 1 8, number 6, June 1 975, pages 330 thru 331 .
4) Dewar, Robert K and A P McCann, " MACRO SPITBOL-A
SNOBOL4 Compiler," Software Practice and Experience, volume 7 ,
number 1 , 1 977, pages 95 thru 1 1 3.
5) fig-FORTH Installation Manual, FORTH I nterest Group, San Carlos
CA, May 1 979.
6) FORTH Dimensions, volume 1 , numbers 1 to 4, FORTH I nterest
Group, San Carlos CA.
7) Gaebler, Robert F, " Make it Natura l , " Electronics, volume 52,
number 1 4, July 5, 1 979, page 6.
8) Grappel, Robert D, "ST R U BAL vs FORT H , " Dr Dobb's Journal,
' M EAS U REM ENT
i n co rporated
volume 3, number 8, September 1 978, page 28.
9) Brinch Hansen, Per and C Heyden, " M icrocomputer Comparison," systems &.. controls
Software Practice and Experience, volume 9, number 3, 1 979, pages
2 1 1 thru 2 1 7 .
1 0) James, John S , " FORTH Dump Programs, " D r Dobb's Journal,
volume 3, number 28, September 1 978, pages 26 thru 27.
1 1 ) James, John, " FORTH for M i c rocomputers , " Dr Dobb's Journal,
CP/M® USERSf
volume 3, number 25, May 1 978, pages 26 t h ru 27.
1 2) Main, Richard B, " FORTH vs Assembly," Dr Dobb's Journal,
volume 4, number 3 1 , January 1 979, pages 45 thru 47.
1 3) Meinzer, Karl, " I PS, An U northodox H igh Level Language,"
January 1 979 BYTE, volume 4, number 1 , pages 1 46 thru 1 59.
1 4) MicroFORTH Primer. FORTH Inc, Hermosa Beach CA, December
1 976. The ED-80 TEXT EDITOR
1 5) Moore, Charles H, " FORTH : A New Way to Program a Mini
• $ 5 0 , 0 0 0 i n Deve l o p m e nt Costs -
Computer," Astronomical Astrophysics Supplement, volume 1 5,
1 974, pages 497 thru 5 1 1 .
1 6) Moore, Charles H , and Elizabeth D Rather, "The Use of FORTH in
You rs for O n ly $ 9 9 !
• For a l l C P/ M , C ro m e mco, TRS- 80
Process Contro l , " Proceedings of the International Mini-Micro Com
puter Conference, Geneva, March 26, 1977.
1 7) Oliver, John P, "Astronomy Application for PET FORTH ," Dr
Dobb 's Journal, volume 3, number 30, November and December M od I I , a n d N orth Sta r Syste ms.
• Fu l l Screen Text Ed itor w/Scro l l i ng.
1 978, page 46.
1 8) Phillips, J B, M F Bu rke, and G S Wilson, "Th readed Code for
• For a l l C RT a nd Vi d eo M o n itors.
Laboratory Compute rs," Software-Practice and Experience,
volume 8, 1 978, pages 257 thru 263.
$9900
Dead Ends, Old Trails and Apologies , " February 1 979 BYTE, volume
Color Brochure
BYTE, volume 4, number 3, pages 46 thru 52.
Value
22) Roichel, Ancelme, "SAM76-FORTH-STRU BAL," Dr Dobb's Jour
nal, volume 3, number 30, November and December 1 978, pages 44 -