<<

University of Wollongong Research Online

Department of Computing Science Working Faculty of Engineering and Information Paper Series Sciences

1984

Down-line loading on hero

John Fulcher University of Wollongong, [email protected]

Follow this and additional works at: https://ro.uow.edu.au/compsciwp

Recommended Citation Fulcher, John, Down-line loading on hero robot, Department of Computing Science, University of Wollongong, Working Paper 84-13, 1984, 39p. https://ro.uow.edu.au/compsciwp/9

Research Online is the open access institutional repository for the University of Wollongong. For further information contact the UOW Library: [email protected] Down-line loading on Hero robot John Fulcher Department of Computing Science University of Wollongong

ABSTRACT

Expansion of ET-18 (Hero 1.0) Educational Robot in order to provide down-line loading capability from the Unix time-shared is described. This expansion has also enabled up-line saving of programs from Hero to Unix. These facilities are implemented in EPROM form (2716) in the optional ROM socket on Hero's CPU board. The program stored in EPROM is essentially the same as the Utility EPROM used on the expanded ET-3400 Microprocessor Trainers in the Department's Microcomputer Laboratory, with minor modifications to run on Hero. As a direct result of incorporating these facilities into Hero, the Unix down-line load program 'dll' has been upgraded (to allow for up- line save), and an r-file for the Unix general-purpose cross-~ssembler 'mac' has been written to allow for the use of Robot Interpreter commands (Hero utilizes unused M6800 op. codes as commands when running in its 'Robot Interpreter' mode). - 2 -

TABLE OF CONTENTS

1. Background 3

2. Introduction 3

3. The need for Down-line Loading 3

4. Implementation of Down-line Loading - Hardware 4

5. Implementation of Down-line Loading - Software 5

6. Additional Facilities 5

6.1 Up-line Save

6.2 mac cross assembler

7. Acknowledgements 6

8. References 6

LIST OF FIGURES

Fig.la Down-line Loading Hardware

Fig.lb Down-line Loading Hardware (contd.)

Fig.2 Addressing Schemes/Memory Maps

Fig.3 ACIA Registers

APPENDICES

Appendix 1 Letter to Heath Company (& reply)

Appendix 2 herodll source listing

Appendix 3 Modified m6800 r-file

Appenidx 4 Hero Robot User's Guide - 3 -

1. Background During July 1983, the Department purchased an ET-l8 Educational Robot from Heath Center in San Francisco, U.S.A.. The robot came in kit form, and was subsequently assembled in August of 1983. Several minor problems manifested themselves both during assembly and after, these being documented in some detail in Appendix I. The main problems arose from Hero's power supply circuitry; two of the four 6V recharge­ able batteries have been replaced to date (the Institute Sector, who purchased a Hero robot at the same time, experienced even more difficulty, when the 6V battery mounted in Hero's head leaked its contents!). A serious design flaw became apparent during our investigations into these power supply problems, namely:- if the batteries discharge to below their 'la-voltage' setting, then the lower their charge becomes, the higher their rate of discharge (i.e. this inbuilt 'downward spiral­ ling' effect acts as a 'self- destruct mechanism'!). A local modification, whereby Hero switches itself into 'SLEEP' mode upon detection of a 'la-voltage' condition, has been added to overcome this problem. Another problem was encountered with the Arm stepper motor; phases had to be swapped in order to make it work. Other major design oversights include the possibility of driving Hero's arm below ground level when pointing vertically downwards (item 28 in Appendix 1), and the lack of touch sensors, so that Hero wi! continue to (attempt to) drive through obstacles which have not been detected with its Sonar sense circuitry (ultrasonic ranging only being good for large, flat surfaces such as walls etc.). Such design oversights are unusual in Heath products, as are the numerous minor errors in printed circuit boards, component values and documentation encountered with Hero (see Appen­ dix 1). It appears as though Heath were too intent on rushing into the marketplace with a 'personal/hobby robot'- the latest growth area - to such an extent that their characterisitic thoroughness and attention to detail were compromised to some extent.

2. Introduction As mentioned earlier, Hero is powered by four 6V sealed rechargeable batteries. Two of these constitute the motor drive power supply, the other two the logic circuit power supply. Hero can be run either from these batteries or by using the battery charger. Hero's drive motor is a permanent-magnet D.C. type. A shaft encoder disk and associated sensor are fitted to the main drive wheel, and together provide an indication of the wheel's posi­ tion. All other motors are stepper motors (viz. steering, head, arllL...pivot, arm_extend, wrist_pivot, wrist--..J'otate, gripper). The single-board microcomputer controlling Hero comprises a Motorola 6808 c.p.u. (6800 + internal clock generator/driver - or alternatively a 6802 without the 128 bytes of internal RAM), 8Kx8-bit Monitor ROM (MCM68764) and 2Kx8-bit User RAM (2 x 6116). A separate I/O board is used to interface the c.p.u. to Hero's motors, sensors and other I/O devices. Hero's sensors comprise a timer/counter, light-dependant resistor, sound transducer (loudspeaker), motion detector (ultrasonic transmitter/receiver) and ultrasonic ranging device. The other I/O devices comprise a hexadecimal keypad, 7-segment display, voice synthesizer, low­ battery indicators, 'abort' button, 'sleep' switch and cassette interface. Hero powers up in 'Executive' or 'Robot Language Interpreter' mode (although it can be run in the faster 'Machine code' mode if so desired). The teaching pendant can be used in either 'manual' (key-4) or 'learn' (key-7) mode; in 'learn' mode, Hero will remember the various move­ ments and is capable of repeating them at some later stage.

3. The need for Down-line Loading At the time of writing, the Department's Microcomputer Laboratory consisted of several ET-3400 Microprocessor Trainers. These trainers are based on the (8-bit) Motorola M6800 c.p.u. (moves are currently underway to upgrade the Microcomputer Laboratory to sup­ port the (16/32-bit) Motorola MC68000 for 1985). The ET-3400 trainers have been extended via a motherboard/backplane to allow various experimental cards to be inserted for different experi­ ments. One such experimental card - a 'Master Card' - contains a System Utility in EPROM form. Included in this Utility are a transparent link to the host Unix operating system, and a - 4 -

down-line load facility fron Unix to the ET-3400. Hence programs can be developed under Unix, assemled using the 'mac' general-purpose cross- assembler, and then down-line loaded to the ET­ 3400 trainers. As it stands, the only facility for saving programs developed on Hero is via the audio cassette interface. A decision was made to enhance the usability of Hero, by providing a similar down-line load facility from Unix as exists on the ET-3400 trainers.

4. Implementation of Down-line Loading -Hardware Hero's c.p.u. board comes fitted with a spare 24-pin socket (U417), which can support 2K, 4K or 8Kx8-bit ROM's. Since Hero's c.p.u. (6808) is compatible with the ET-3400 trainers (6800), and moreover since the ET-3400 Expansion Utility resides in a 2716 2Kx8-bit EPROM, it was decided to simply use this same Utility (with appropriate modifications) on Hero. (In order to strap U417 to support 2716, jumpers J7 and J9 need to be connected). In order to send data to (from) Unix, a parallel-to-serial (serial-to-parallel) conversion has to take place, and moreover such serial data has to be buffered to produce RS232c-compatible signals. This was achieved on the ET-3400 trainers using Motorola M6850 Asynchronous Com­ munication Interface Adaptors (ACIA's) and MC1488/9 drivers/receivers. MC1488/9 drivers/receivers were again chosen for Hero, whereas Synertek SY6551 ACINs were preferred over the M6850's used on the ET-3400 trainers. (SY6551 ACIA's had proved more versatile in a Cambridge Ring Terminal Multiplexer application - in fact Synertek tout the SY6551 as an enhanced version of the M6850 viz. on-chip programmable baud-rate generator, additional (com­ mand) register etc.). Figure la shows the components added to Hero in order to provide Down-line Loading ­ the additional components are shown in bold face. lO-way connector pins are provided on Hero's c.p.u. board to facilitate expansion of the existing system, viz.: P406 -I: decoded $4000-5FFF address range - 2 : decoded $6000-7FFF address range - 3 to 10 : address bits A7 to AD N07 -I: *RESET - 2: *R/W (which needs to be inverted back to R/*WI) - 3 to 10 : data bits D7 to DO N08 - I: decoded $8000-9FFF address range - 2 : decoded $AOOD-BFFF address range - 3 to 10 : address bits Al5 to A8 Ribbon-wire is run from these three connectors to the Down-line Loader Wire-wrap Board as shown in Figure lb. There are two signals which don't appear on these lO-way connectors, namely 02(E) and *IRQ. Individual wires had to be run from the appropriate 6808 c.p.u. pins (37 and 4 respec­ tively) to the connectors on the Down-line Loading Wire-wrap Board. The MCl488 line driver requires a -12V supply, and this is derived from the + 12V supply rail using a Signetics NE555-based positive-to-negative voltage converter (actual measured open­ circuit voltage was more like -11 V, which is still plenty to drive RS232c signals over the distances involved in this application ). Figure lb also gives the crystal oscillator circuit used to drive both ACIA's. Also shown in Figure lb is the layout for the Down-line Loader Wire-wrap Board. 25-pin RS232c connectors are connected to the Down-line Loader Wire-wrap Board via 16­ pin d.i.p.-header sockets (in order to make them compatible with the ET-3400 expansion board). These 25-pin D-type connectors (female from Unix; male to the terminal) are mounted on either side of Hero's rear control panel. A floating laboratory 'curly cord' connects directly from its wall-mounting socket to the female 'Unix' D-type connector, and a female-to-male extension cable from the rear of a laboratory terminal to the male 'terminal' D-type connector. - 5 -

5. Implementation of Down-line Loading - Software The preferred implementation of a Down-line Loader would use an interrupt-driven circular list buffer, would transfer data in Motorola S-record format, and would incorporate error­ checking and retry. Constraints on both available Suport Group resources and time (this facility was required by Session I 1984 for the CSCI946 Honours subject in Robotics) precluded such a major software redesign. Instead, minor modifications were made to the already existing (and proven) ET-3400 Expansion Utility,'6800lib', in order to run on Hero. '6800lib' occupies 629 bytes, and 'herodll' 638 bytes (of a 2K-byte EPROM) respectively. The first modification required was in the Memory Map; Hero's Down-line Loader com­ mences at location Ox2000 rather than OxAOOO as on the ET-3400 trainers. Figure 2 compares the Memory Maps of both the ET-3400 and Hero robot (ET-18). The Hero Transparent Link - 'herodll' - Source listing is given in Appendix 2. Modifications to the ET-3400 Utility - '6800lib' - are indicated by an '*' in the comment field, otherwise the two are identical. '6800lib' comprises a collection of subroutines, linked together by a Jump Table at its start. Modifications to '6800lib' were required because of the different Memory Map used on Hero, the use of SY6551 ACIA's rather than M6850's, and other reasons to be elaborated upon shortly. Figure 2 indicates that the ACIA addressing scheme for Hero is in the range Ox4000-5FFF, compared with Ox840x for ET-3400. Details of ACIA addressing are given in Figure 3, together with the individual addressing of both types of ACIA - M6850 and SY6551. Thus the values 'rxrdy' and 'txrdy' need to be altered from those used on the ET-3400 trainers. Naturally enough, the 'monitor' address had to be altered (from OxFCOO on the ET-3400 to OxF37E on Hero), as well as 'org' (origin) (from OxAOOO to Ox2000). The very first instruction in 'herodll' (in the 'initialisation' routine) is op. code Ox83. This is interpreted by Hero as a 'change from interpreter to machine-code mode' command. This is essential for the successful running of the transparent link back to Unix, since it runs at a prohi­ bitively slow speed in 'Interpreter' mode. (Actually characters entered via an ASCII keyboard ­ viz. at slow speed - will be echoed on the VDU screen, however object files down-line loaded from Unix - at 1200 baud - will drop every two characters out of three, on average). Likewise a 'swi' instruction - op.code Ox3F - is inserted in the 'branch under unix control' routine to get back into 'Robot Interpreter' mode as soon as an object file has been down-line loaded from Unix. The 'unixinit' and 'terminit' routines needed to be modified, due to the different bit posi­ tions (and the additional register) of the SY6551, compared with the M6850 ACIA, and these are detailed in Figure 3. In the 'transparent link' routine, a slightly different method of obtaining the necessary status bits is required, because of different status bit positions in the M6850 and SY6551 ACIA's (ref. Figure 3). As a result of the modifications made to the 'branch under unix control' routine, involving returning Hero to 'Robot Interpreter' mode, it is no longer possible to use the 'dll_G_Ox(addr)' escape option as it is on the ET-3400 trainers. Nor can the user return to this routine as can be done on the ET-3400's.

6. Additional facilities

6.1. Up-line Save Besides providing Down-line Loading facilities from Unix to Hero, it is desriable to also have Up-line Save capability from Hero to Unix. This facility was provided in the original '68oolib' Utility, but 'dll' under Unix did not support Up-line Save. As a direct result of provid­ ing Down- line Loading onto Hero, 'dll' was overhauled and Up-line Save incorporated (as well as catering for Motorola S-record and Intel Hex formats, in addition to the already existing University of Wollongong Computing Science m.out format). - 6 -

6.2. 'mac' cross-assembler In order to allow for the development of application programs for Hero under Unix, the 'mac' general-purpose cross-assembler was modified accordingly. More specifically, the Motorola m6800 r-file was expanded to include Robot Interpreter Commands (Hero utilizes unused 8-bit M6800 op. codes as Robot Commands). Programs developed under Unix are then assembled using the following command, before down-line loading: ($) mac -1 hero file.s file.out (to assemble it) (followed by: ($) dll file.out, to load it) A copy of the modified M6800 r-file is given in Appendix 3. A copy of the 'Hero Robot User's Guide' (available on Unix in the Ipub/946 directory) is given in Appendix 4, and includes a summary of the Robot Interpreter Commands available on Hero.

7. Acknowledgements The author would like to express his gratitude to Michael Milway for use of his '6800lib' Utility program, his tutoring in the use of this program as well as use of his EPROM Program­ mer, construction of Hero Robot's Arm, and his invaluable assistance in debugging 'herodll'. Thanks are also due to Ross Nealon for his overhaul of 'dll', his asistance with modifications to the 'mac' M6800 r.file, and for lugging Hero back with him from his visit to U.S.A..

8. References 1. ET-18 Robot Technical Manual (1983) 2. ET-18 Robot User's Guide (1982) 3. Motorola Microprocessor Data Manual (1981) 4. ET-3400 Microprocessor Trainer Manual (1977) 5. Synertek MOS Data Catalog (1979) 6. Signetics Analog Data Manual (1977) ---no CHIP SEL£L (from U414C VNAr:-5------.:6:::..jf 00 75 T,~ lili------lJ dL{)S~l~j: ,..... ~. U417 OPTIONAL aELo I I-~ 'JO 721 R0t1#2 /2716] -'18 4~" Pf!08 J)~ 6"".s''l. 3~Tgla~Q.f% 164 s.Af!1 170 lr4' -$8COO-9Fff A15 25,...2 m18~-+- __-t--t-'"=-~:_:tA_OOO_-8_FF:_F-+++++++++++-++-+-+-+-+-+-+-",~ ~ - ~ U402I.1;f-----++--t+l-----+++++++++-+-+-+--H-+-+-H~·~~ ,..... ~----+-+-_te+---_+_++++_I_+_++_I_+--+-+-+-+-+-+-+~~ ,-' LS244t-7------+-+---t<>t-----+-+++++-+-+-f--,I--+--+-+-++++++­ ~ ~----++-_+_t----+++++++++-e---++-+++-+-+--+--- A8 --' i-"'-----+-t----:-::-i4+----++-+-+-+-++-++---+-+-+-+-+-+-+-+--­ 10 ~ 1llf4l.2J ~ 1 ..... Z4000- I '--~$5FFF ---.---+-+-+-+-+-+-t-+----t-+--1f-H~H--... A7 16".-2 1'7.18;.-- '-_-=--_~~HI-z.~'6()-0-0_- 7__''I-FF-+++++++...... -_--+-+-+-+-+-+-++_+ ~

U401 ~ U404 I-';!'-- ~_--+--+++++-_---+-+-+-++-++_+_+ :--' 116808 ..-" 15244~------t-<~---1--+--+-+------+-t--1r+++-+-':--rl­ '---': AO ---' 10 "- 1l1f4l£J P406 11 IRt1r4__7 ....-++- .--:.7~O'+_7+_L-S-O-4-__.._++--++++++++_++ (J!)2) E r-3_7 ------1'-t-i-+------+-t----~++--_t_+_+_t_+_+-+-+_++

DO F=;3.:;.,3_--t.....4-/------t--t-i-+-t------+-t----++-+-+-+----t--+-+-t-f-t-f-H- '

?t D7 .17 A-1 ~ - ~4 1!4 98 14 ~8.?)~ ~ 4 "", 918 I -#:l AW7"""'fu:. 'RES 02 RSO DO D7 2 l1i ~/k IRQ RS1 DO D7 2 I RE~;~ U424A 6 SY6551-A CSOF- __ ~ S Y6551 .. a CSOF-----' I ~_--J40 1 [unix} cSld- 1 [tty] [51 3 J tfSR m i5fD RxO TxD I tJSR ITS 1JITJ RxO TxD 177 9 ~ 12 10 17 9 11Q 12 10 """'-/ ...... ,., 'V7 """ ...... -c::::::;7 XTAL 'ref. fig. lb)

2 ~ ~0177l72 j 6 ,tf 77 :~~~ 1~'-t(~(",.-t"l/ ~[1488 /~/" ~~ 'ref. Fig. lb) __ lH. (i.f1489 3 6 8 11 I·~ 1 4 '70 13 I ~

L?'-- Ir------' ~ 16-pin D.I.R 2 16 5 3 2 16 5 3 HEADERS I J I I L II TO . I : I fROM -I J I 25-pm D-fYP8>...2 3 7 20/ UNIX \2 3 720jTERMINAL ~ (male) CONNECTORS TX RX OTR (female) TX RX ~DTR Figure 1a - Down-line Loading Circuitry fohn 14 (; fii, +12V TO -9V CONVERTER:

+ Vee (12V) O'5mSec H f= 1-49/(RA+2RB)[ = 2-22 kHz 1K V~( '1:~lJl "---'17 :ES 100uf lN4148 DISCH O/P~3 -;+ \---..---

(ref. p.729 Signetics Analog Data Manual)

rSY6551) CRYSTAL OSCILLATOR:

510

8 to X TAU input of 5Y6551'5 (viz. pin-6) 74L S04 1-8432 HHz 01------.

150pF fWIRE- WRAP) BOARD LAYOU T:

1N4148 --en- 1K 33K 1000 n¢On nDo-m 510 10K~1N4148 ~ -e=J- V ------oOV to P405-. ~ LS04) SY6551-A 11488 ) 1555J o+12V to P201- I SY6551-8 ------o+5V to PJ,.05· ------(unix) ( tty) I XTAL I c:::l $4000 Riw IRQ 150PF t-r--.-rTt-r-I""'lI+TTT'rh~r7l

~' .. to P406 to P407

Figure lb - Down-line Loading Circuitry (continued) john 15. ET-3400 EXPANSION: HERO fET-18l:

0000 USER R.A.M. 0000 (re5erv~d for) 00C4 (197 bytes) 003F MONITOR 00[5 59 byfes reserved 0040 USER R.A.M. # 1 OOFF for MONITOR 07FF (6116) 0100 (optional) USER 0800 USER R.A.M.1I2 01FF R.A.M. (256 bytes) OEEO (6116) OEFD (reserved fof') 8000 PI.A. A-I.e.d.'s OFFF MONI TOR 8003 B-'7:-seg. jUffiRers: 8080 PI.A. keyboard 2000 (2Kbyte) ADO/TIONAL pin-18 -?-) 7 8083 rows/column 5 2716 (R.O.H. 1/2) pin-21-."",.J9 8100 PI.A. A· music TRANSPARENT pin-20~)12 B -bar code L1NKI UTILITY 8180 PI.A. A -tur fie aP 2800 (redundant conditions) B -turtle i/p (due to 2716 strapping) 8200 MUSIC timer - A 3FFF ( at $2000 ) 8207 4000 TRANSPARENT decoded on. 8280 MUSIC timer - B LINK A.CI.A. P406 8287 5FFF ADDRESS1NG I 8300 SIMPLE I/O sltlift:he~ 6000 P406 8380 display 7FFF } 8400 A.C.I.A confl/sfafus 8000 P408 8403 tx/rx dafa 9FFF } slofcar mafrix 8800 PI. A. AOOO P408 B900 ANALOG D- to - A BFFF } 8980 P1.A. [000 [003 KEYBOARD 9000 SYNCHRONOUS 9080 INTERFACE [110 DISPLAY 9100 un i va c 9180 unix [200 interrupt 5 fa tus reg. 9300 PEMUX BUS [MULA TOR [220 experim. board out 110 pori, 9380 E.F!R.O.M. PIA's(2) C2AO experim. board in t [300 AOOO TRANSPARENT LINK [FFF (68001ib Utility) DOOO

[000 (nof useable) DFFF [003 KEYBOARD fOOD (8K) MONITOR rOOF (not useable) R.O.H. pin - 18 --7'-J 2 [110 DI SPLAY (R.O.H. # 1) (not useable) pin -21 ~J t. [170 ------C1FF (FOOO) (ItK) ------pin - 20---J6 FCOO MONITOR R.O.!'1- (FBOO) (2K) FFFF f1Kbyte} FFFF

Figure 2 - System Memory Maps ACIA REG. IRS) ET-3400 EXPANSION M6850: SELEC T SELEC t t A15 14 13I 12 11 10 I 9 8 7 6 5 3 2 A 1 AO 0 0 0 1 0 0 0 0 0 0 0 0 AC lA-A I 1 01 01 0 unix I I $81,.01 . Tx I Rx Data 0 1 $8402: Con trol I Sta ius 1 o ACIA-a $8403: TxlRx Data 1 1 tty

TERMUX SY6551: AUA SELECT RS1 RSO ....-----A----- t t A 15 14 13 12 11 10 9 8 7 6 5 4 3 2 A1 A 0 write reiJ{j

0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 TxlRxDatd , , v o 1 o 1 resetls tatus (strappable) 1 0 1 o commilnd 1 1 1 1 control

HERO fET-18) 5Y6551:

A15 14 13 12 11 10 9 8 7 6 5 4 3 2 A1 M AUA - A 0 0 0 0 0 0 0 unix 0 1 0 1 0 1 AUA-S unix ilY tty ($4000-5FFF decoded) 4000 4004 Data reg. ( on P406-1 ) 4001 4005 Status reg. 4002 4006 CommiJnd reg. 4003 4007 Control reg.

MO TOROLA M6850 A.CI.A.: SYNERTEK 5Y6551 A.CI.A. :

STATUS REGISTER STA TUS bit-? 6 5 4 3 2 1 bit- 0 bit-? 6 3 2 parity Rx fram. TxD RxD IRQ IRQ DSR error olrun error CTslDCD empty fu (f o 0 0 0 0 o 1 o 0 o 0 CONTROL REGISTER CONTROL blt-7 6 5 4 3 2 1 bit- 0 bit-7 6 3 2 bit- 0 Rx int Tx control 8 bits, no parity, counter +6. 1stop 8-bit word- Rx etA B.ud- rate genera tor disabl RTS IO,no int 1 s top bit (1200 bau d bit I eng th = Tx (1200 baud) o o o o 1 o o 0 0 1 o o o COMMAND REGISTER bit-7 6 5 4 3 2 o norm; Tx in is. disa~ IRO parity check DrR I/echo) RTS low' disab ready x X o o o 1

Figure 3 - A. [.I.A. Addressing

john 18.6.84 APPENDIX 1

HEATH COMPANY' BENTON HARBOR, MICHIGAN 49022 TLX 72·9421

November 3, 1983

MR••JaiN FOICHER THE UNIVERSITY OF V\O~G P.O. BOX 1144 WOLLONGONG N.S.W. 2500 AUS'l'RALIA

Dear Mr. Fulcher: Thank you for writing concerning your experiences while assembling the ET-18 Educational Robot. Your information, which is a valuable source of feedback, is being forwarded to our Quality Assurance Department and Manual Department for evaluation. Assembly manuals for Heathkit products are under constant revision to clarify and simplify construction of the products. Component values are sometilnes changed to improve performance of the robot. For this reason, the canponents installed on the circuit board may not agree with the value shown on the circuit boards.

Thank you agabn for your interest in Heath products.

Sincerely, r;I:'.! "

.,I ' l (;'7 Lt.=on Cray Service Supervisor LC:ta

Heathkit' The University of Wollongong

Department ot Computing Science P. O. Box 1144 Wollongong N.S.W. 2500 Australia Telephone (042) 282981 Telephone (042) 297311 Telex 29022 Cable Uniofwol

In Reply Please Quote: JF:seb

14th October 1983.

~1e Director of Customer Service, Heath Company, Benton Harbor MI 49022. U.S.A.

Dear Sir,

In July of this year,' this University purchased two ET-18 "Hero" Robot kits from the Heathkit shop, Redwood City, California, complete with arm and voice options.

I thought you might appreciate some feedback on d~fficulties/ problems we encountered during the course of assembling these .

Documentation we received as part of the above kit consisted of the following.

(i) Assembly Manual + Pictorial Booklet (1982) (ii) Technical Manual (1983) + Revisions, (iii) Arm Manual + Pictorial Booklet (1982) + Revisions (iv) Voice Manual + Pictorial Booklet (1982) (v) Voice Dictionary (1983) (vi) User's Guide + Schematic (1982) + Revisions (vii) 4 Circuit Diagrams + Block/Interconnect .diagram + Revisions.

As you can see from the above, we did not receive revisions for the Assembly Manual, and this might explain some of the difficulties en­ countered, towit:

1 Most of the single sided p.e.B's showed incorrect component values for example on the sense circuit boarq R618 was shown as 47~instead of 10~and R633 was shown as a 2M control instead of SOOK. On the motion circuit board R1402 was shown as 47K instead of 68K and Rl40l ~s 47--K instead of 33K, and so on with the other single-sided P.C.B's.

2. Over illld above these minor errors, two of these single-sided P.C.B's should really be re-designed to incorporate "add-on" components on­ board, rather than soldered to the foil side of the boards as at present, namely C6l6, D601 and D602 on the Sense Circuit Board and D707-11, D7l6-9 on the Arm Drive Circuit Board.

3. Likewise, the Display Circuit Board should be re-designed to delete R1202, D1201 and C1202, none of which are in fact actually used.

4. p.38. Asserr~ly Manual - L201 may not be installed either way; it will only fit one way

5. p.80 Assembly Manual - U310 should be U316 (and vice versa).

6. p.B3 Assembly Manual - it might be helpful here to mention that the C.P.U. Board resides in the final pack to the right of Pack #10 (173-832 181-3885). 2

7. p.123 Assembly Manual - the brown conductor (with capacitor C3) should be inserted into PI before any of the other conductors, otherwise the brown conductor will get stuck on the wrong side of the other conductors.

8. P.l27 Assembly Manual - even though the insulation sheet is affixed to the top of the rear whell bracket, the nuts holding this bracket to the Robot Base are still exposed and can come into contact with battery terminals when batteries are shifted into and out of the battery holder. Insulation tape should therefore be used to cover over these nuts - particularly the central one.

9. P.127 Assembly Manual - the three pieces of foam should be attached to the battery holder before it is mounted on the rear wheel bracket (much easier this way).

10. p.13l Assembly Manual - the 8.32 setscrew pin does not belong in pack #14; it is used in assembling the Robot's head and therefore should by rieJhts appear in Pack #15.

11. p.137 Assembly Manual - the side panel mounting brackets cannot necessarily be placed so their ends are even with the corners of the base plate - they have to go where the holes are positioned.

13. p.186 Assembly Manual - it might be less cqnfusing to say that the top of the pivot bearing is the side opposite the ball bearing race, rather than the side with the greatest surface area.

14. P.196 Assembly Manual - why install both 8-32 x 1/4" allen head set­ screws, when on the next page one has to be replaced by a 8-32 set screw pin (the one left over from Pack #14)7

15. P.2l5 Assembly Manual - perhaps it would be an idea to mention earlier on p. 124 that the main fuses should not be installed at that stage, (viz. inunediately following the installation of the fuse holders in the base)?

16. P.222 Assembly Manual - it was found that both R202 and R225 had to be adjusted to their full extent in order to achieve 5.2V, let alone the desired 5.6V; perhaps consideration should be given to altering the values of R201 and 1<224 from lK, in order to provide some proper adjustment in the above two controlsI'

17. P. 224 Assembly Manual -the function of the wire jumper on the display board is not clear - the display came up with "Hero l.iD" whether this jumper was connected or not.

18. P.226 Assembly Manual - the sentence "to read the time reset" appears twice in this section on time set.

1.9. P.22S Assembly Manual - it was almost impossible to set the sound control to either combination shown in the inset of pictorial 16-10 the only way to keep the lower LED's alight was to ensure that at least one of the higher/lower LED's was also 1.it up - otherwise the cOW1ter counted down until no LED's remained alight. The sound control was thus left set at its midpoint position (i.e. R633 is too coarse for accurate setting).

. ..../3 3

20. P.229 Assembly Manual - it would be a good idea to adjust the sonar 'I'X for maximum input on the sonar RX before running this sonar test proqram, ~ la p.48 of technical manua:l(Lhis would avoid unnecessary "troubleshootintJ" of a sonar system which is in fact fully functional!).

21. P. 230 Assembly Manual - the teaching pendant check program contains an incorrect Hex code, viz step No 10 should be 4E and not AE as shown (t.his was found by comparison with the program on p.58 of the rrechnical Manual) .

22. p.57 Arm Manual - should "operation manual" be "technical manual"?

23. p.B Voice Manual - Why secure the speaker baffle with masking tape or a staple (its adhesive backed, after all)?

24. P.2 Voice Dictionary - it might be helpful to add two notes here, viz. (i) 20FE is "J2..0t an address which this speak program jWllPS to/waits at after completing its speech, but rather 20FE is a 'Ei800-assembly instxuction (branch relative - to itself, vi21 an infinite loop). In order to link speech routines to other program routines, have to replace this by 7E (AD DR) - viz Jwnp extended to the next :t"outine.

(il) 'fhe Hex codes shown for the phonemes (& words) in this dictionary are at the lowest of the four pitches possible; to change individual phonemes to higher pitches, simply add 4~, 8.0 or C.0 to t_he hex code indicated.

25. P. 39 'l'echnical Manual .- the revised version of the inset in "fig 4 is somewhat of a mystery! Batteries Bl and B2 were connected using a 4" piece of large red wire, as per p.137 of the Assembly Manual ­ which also conforms with the Block/Interconnection Diagram (both original and revised versions) viz 81 and 82 connected in series. '1'he revised inset d:t"awing on Fig 4 however shows two large green wires heading off from Bl and B2 to the rear of the mounting bracket!? ('rhis pUZZling connection is also shown this way on the revised illustration Booklet which accompanies the User's Guide). What's going on here?

26. P.G) 'l'f~chnical Manual - check for +SV at P201-11 should be +lV, surely"? (see p. 223 of aSf:;embly manual).

27. '1'he vertical mark on the side of the 'reaching Pendant rotary switch 0 knob is 180 out of phase from where it is intended to be.

28. 'I'he fact that the Arm can extend below grolUld level when pointing vertically down would appear to be a design oversight.

29. It might be quite in order, but the sound of motors trying to drive past their physical limits during initialization is a little disconcerting, to say the least! Can any damage result to the motOJ:s and associated driving circuitry in the long term?

30. Apart from the odd nut and washer, all components listed in the Assembly Manual were supplied with both Robot Kits - the only exception to this being the 12 and 15 hole connector (JIO, J 9) in one of the kits i they didn' t match t,he pendant and charger plugs...... /4 4

31. Fuses FL dnd 1"2 blew frequently duri.ng initial use on one of the Robots.

I trust the above COllunents prove helpful in any future changes you might make to E'l'-18 Robot Hardware and/or documentation.

Yours faithfully,

~ John Fulcher. May 22 10:18 1984 /B/sys/usr/john/robots/herodl1.s Page 1 APPENDIX 2

,.********************************************************************* ;NOTE: Hero DOWN-LINE-LOADING/UP-LINE-SAVE is simply mjm's 68001ib.s ;Heathkit ET3400 expansion monitor, with minor modifications to run ion ETl8 Hero Robot.(changes are indicated by a '*' in comment field). ; John Fulcher 3.5.84 ,.********************************************************************* ;This file contains the downline loader/transparent link and lots ;of nice 10 routines to make life easier. ;AII the routines are referenced through a three byte entry in a jump ;table at the beginning of the library. This jump table should remain ;inviolate although the actual routine may be changed or shuffled. ; Michael Milway 22.11.83 ,.********************************************************************* ;equates

;(note: herodll uses 6551 ACIA's rather than 6850 used on ET3400) , controlu equ Ox4003 ;*unix ACTA control reg contralt equ Ox4007 ;*terminal ACIA contol reg statusu equ Ox4001 ;*unix ACIA status register statust equ Ox4005 ;*terminal ACIA status register datau equ Ox4000 ;*unix ACIA data register datat equ Ox4004 ;*terminal ACTA data register monitor equ Oxf37e ;*ET18 Hero robot monitor viz.(FFFE/F) commandu equ Ox4002 ;*unix ACTA command reg (6551) commandt equ Ox4006 ;*terminal ACIA command reg (6551) rxrdy equ Ox08 ;*rx ready status bit (l=RxD full) txrdy equ OxlO ;*tx ready status bit (1=TxD empty) ; ;variable storage

tempI equ OxlOO ;used by getline, wr4, getword addr egu OxlO2 ;used by getaddr, transp coun t. egu OxI04 ;used by transp addrconv equ OxlO6 ;used by getaddr ; ;6800 I/O library seg 1 org Ox2000 ;*for ET18 Hero robot jumptable .transp jmp transp ;transparent link .unixinit jmp unixinit ;initialise unix ACIA •termini t jmp terminit ;initialise terminal ACIA .putline jmp putline ;send line to terminal .getline jmp getline ;get line from termninal . ~lIr4 jmp wr4 ;send 16 bit hex number to terminal .wr2 jmp wr2 ;send 8 bit hex number to terminal ,putchar jmp putchar ;send character to terminal .getchar jmp getchar ;get character from terminal .putc jmp putc ;send raw character to terminal .getc jmp getc ;get raw character from terminal .putu jmp putu ;send raw character to unix .getu jmp getu ;get raw character from unix .getword jmp get~"ord ;get 16 bit word from unix .getbyte jmp getbyte ;get 8 bit byte from unix .getaddr jmp getaddr ;get modulo 16 bit address from May 22 10:18 1984 IB/sys/usr/john/robots/herodll.s Page 2

;input buffer .tohex jmp tohex ;convert ascii character to hex .toascii jmp toascii ;convert hex digit to ascii •tolower jmp tolower ;convert upper to lower case character .ishex jmp ishex ;check to see if hex digit .ls16 jmp ls16 ;shift 16 bit reg AlB 4 bits left .wait jmp wait ;time waste loop

;The routines , ,.********************

;transparent link ;downline loader ;upline save ;branch to user program , ,.********************

;equates DLE equ Ox10 CRTLA equ OxOl , ,.******************** , ;initialisation transp dc Ox83 ;* get out of robot interpreter mode. ;* (ref. p.29 Hero Technical Manual) jsr .unixinit ;initialise unix ACIA jsr .terminit ;initialise terminal ACIA , ,.******************** , ;transparent link reentry ;reentry point from load and save testu Ida a,statusu ;data from unix? and a, flOx08 ' ;*mask to find status bit beq testt ;*if clear, then no data jsr .getu ;get char from unix c.mp a, flDLE ;data link escape? beq command ;yes then coramand scheduler jsr .pute ;eeho to terminal testt Ida a,statust ;*data from terminal? and a, flOx08 ;*mask to find status bit beq again jsr .getc cmp a, flCRTLA ;control A character? beq exit ;yes, then go to Hero monitor jsr .putu ;echo to unix again jmp testu ;play it again sam May 22 10:18 1984 /B/sys/usr/john/robots/herodll.s Page 3 exit Idx Ilmesgbgn ;sign off message jsr .putline jmp monitor , ,.********************

; command command jsr .getu ;next char from unix and a,IIOx7f cmp a,II'B' beq branch ;branch under unix cmp a,II'L' beq load ;down line loader cmp a,II'S' beq save ;upline save ;insert branches to other routines here jmp reentry ;not a valid command ,.********************

;branch under unix control branch jsr .getword ;get 16 bit address from unix swi ;*back to robot interpreter mode. ;*(ref. p.23 Hero Technical Manual) ;*NOTE: this means that can't use ;*dll G Ox2000 escape option as ;*can on ET3400 trainers jmp O(x) ;call user program as a subroutine ;program will be terminated by reset, ;branching to Hero monitor ;*(user can't return here as on) ;*(ET3400 monitor, hence jmp not jsr) , ,.********************

;downline load load jsr .getword ;get a 16 bit word from unix stx addr ;store start address jsr .getword stx count ;store byte count Iaad2 jsr .getbyte ;get next byte Idx addr ;get dump address sta a,O(x) inx stx addr Idx count dex ;one less to go stx count bne load2 ;i£ count not zero get next byte reenrty1 jmp reentry ;return to transparent link May 22 10:18 1984 /B/sys/usr/john/robots/herodll.s Page 4

,.******************** ; ;upline save ;*NOTE: Ross to modify 'dll' program ;*to appropriate form to incorporate ;*this UPLINE SAVE facility (14.3.84) save jsr .getword ;get address from unix stx addr jsr .getword ;get byte count stx count savel ldx addr Ida a,O(x) and a, tlOxiO ;high order nibble ror a ror a ror a ror a ;shift 4 bits left add a, {,lOx20 ;convert nibble to downline ; loader forma t jsr .putu ;send to unix jsr .getu ;wait for echo Ida a,O(x) and a, tlOxOf ;low order nibble add a,IIOx20 jsr .putu jsr .getu inx stx addr ldx count dex stx count bne savel ;more to send? jmp reentry mesgbgn de "\r\nHERO MONITOR.\O" ;unixinit intialise unix ACIA ; inputs: none ;outputs: none ;calls: nothing ;destroys: A ;*NOTE: 6551 ACIA used rather than 6850, as on the ;* Heathkit ET3400 expansion unixinit Ida a,110xOO ;*RESETS all registers prior to sta a,statusu ;*initialisation (any data written ;*to status reg does the trick) Ida a,1I0xOb ;*initialise unix ACIA- parity sta a,commandu ;*disabled, normal mode, interrupts ;*disabled, dtr low. Ida a,110x18 ;*set ACIA for 8-bits, 1 stop bit, sta a,controlu ;*rx clk = tx elk, 1200 baud. rts , ;******************** May 22 10:18 1984 /B/sys/usr/john/robots/herodll.s Page 5

;terminit - intialise terminal ACIA ;inputs: none ;outputs: none ;calls: nothing ;destroys: A ;*NOTE: 6551 ACTA used rather than 6850, as on the ;* Heathkit ET3400 expansion terminit Ida a,IIOxOO ;*RESET all ACIA registers sta a,statust ida a,IIOxOb ;*initialise terminal ACIA- parity sta a,commandt ;*disabled, normal mode, interrupts ;*disabled, dtr low. Ida a,IIOx18 ;*set ACTA for 8-bits, 1 stop bit, sta a,eontrolt ;*rx elk = tx elk, 1200 baud. rts , ,.******************* , ;getline - get a line of text from terminal ;inputs: X = start of buffer ;outputs: X = end of string ;ealls: getchar, putchar ;destroys: A getline stx tempI save buffer start getlin.l jsr .getchar get next input char cmp a,-It'@' kill? bne getlin.3

ldx tempI point to start again Ida a,fI'\n' jsr .putehar bra getlin.l getlin.3 cmp a,lt'\b' erase? bne getlin.5 , Ida a, -It' jsr .putehar Ida a,1r\b' jsr .putehar dex cpx tempI bpI getlin.l not past start of line Idx tempI restore buf ptr bra getlin.l go for more getlin.5 sta a,O(x) x points to buffer inx bump pointer cmp a,-II'\n' end? bne getlin.1 no loop for more elr O(x) nul at end of str rts May 22 10:18 1984 /B/sys/usr/john/robots/herodll.s Page 6

,.******************* , ; putline ­ send string, null terminated, to the terminal ;inputs: X = addresss of string ;outputs: none ;calls: putchar ;destroys: A,X putline Ida a,O(x) get i/o data bne putl.l not nul - write rts putl.I lnx bump ptr jsr .putchar bra putline , ,.*******************

;getchar - get a character from the terminal ;inputs: none ;outputs: A = character ;calls: putchar, getc ;destroys: A getchar jsr .getc get cons char cmp a,II'\r' CR? bne getch.O no! Ida a,II'\n' getch.O jsr .putchar echo rts , ,.******************* , ;putchar ­ send a character to the terminal ;inputs: A = character ;outputs: none ;calls: putc ;destroys: nothing putchar psh a save character jsr .pute write it pul a fetch cmp a,II'\n' NL? bne putch.O no Ida a,II'\r' jsr .pute echo CR as well Ida a,II'\n' was NL putch.O rts ,.*******************

;getc - get raw character from terminal ;inputs: none ;outputs: A = character ;calls: nothing May 22 10:18 1984 /B/sys/usr/john/robots/herodll.s Page 7

;destroys: A gete Ida a,statust get status and a,llrxrdy beq getc wait for char Ida a,datat get char and a,IIOx7f strip parity rts , ,.******************* , ;putc - send raw character to terminal ;inputs: A = character ;outputs: none ;calls: nothing ;destroys: nothing pute psh a save putc.1 Ida a,statust status and a,/ltxrdy beq putc.1 not ready - wait pul a get data sta a,datat write rts , ,.*******************

;getaddr ­ extract modulo 16 number from input buffer ;inputs: X = current point in buffer ;outputs: addr = 16 bit value ;X = next character in buffer ;calls: ishex, ls16, tohex ;destroys: A, B, X getaddr c1r addr c1r addr+1 save area clr addrconv getadr.1 Ida a,O(x) get character jsr .ishex is hex digit? beq getadr.r no inc addrconv mark conversion made Ida a,addr Ida b,addr+1 jsr .ls16 left shift 4 bits sta a.addr save addr sta b.addr+1 Ida a.O(x) inx jsr .tohex convert char ora a,addr+l or in new digit sta a,addr+l bra getadr.1 getadr.r Ida a,addrconv address converted? May 22 10:18 1984 /B/sys/usr/john/robots/herodll.s Page 8

rts , ,.*******************

;wr4 - write four digit hex number ;inputs: X = number ;outputs: none ;calls: wr2 ;destroys: nothing wr4 psh a save a stx tempI store for later Ida a, tempI get hi byte jsr .wr2 Ida a,templ+l get 10 byte jsr .wr2 pul a restore rts ,.******************* , ;wr2 - write two digit hex number ;inputs: A = number ;outputs: none ;calls: toascii, putchar ;destroys: A wr2 psh a save for later lsr a get nibble lsr a lsr a lsr a jsr .toascii convert to ascii jsr .putchar pul a restore and a,tlOxf jsr .toascii jsr .putchar rts , ,.*******************, , ; tolower ­ convert upper case character to lower case ;inputs: A = character ;outputs: A = character ;calls: nothing ;destroys: A tolower cmp a,II'A'-I bls tolwr.O no cmp a,II'Z' bhi tolwr.O no add a,It'a'-'A' yes tolwr.O rts ;******************* May 22 10:18 1984 /B/sys/usr/john/robots/herodll.s Page 9

;toascii convert hex digit to ascii character jinputs: A = digit ;outputs: A = character ;calls: nothing ;destroys: nothing toascii cmp a,119 bhi toase.1 add a,rO' just digit bra toase.2 toase.l add a,II'A'-lO letter toasc.2 rts , ,.******************* , ;tohex - convert ascii character to hex digit ;inputs: A = character joutputs: A = digit ;calls: nothing ;destroys: A tohex ascii->hex jsr •tolower convert to lowercase cmp a,1f'9' bhi tohex.l sub a,II'O' digit bra tohex.2 tohex.l sub a,II'a' add a,III0 letter tohex.2 rts , ,.******************* , ;ishex ­ check if hex digit jinputs: A = digit ;outputs A = 0 if false ;A = 1 if true ;calls: tolower ;destroys: A ishex is hex digit? jsr .tolower cmp a,II'O'-l bls ishex.no cmp a,II'9' bis ishex.yes cmp a,II'a'-l bis ishex.no cmp a,II'£' bis ishex.yes ishex.no Ida a,IIO bra ishex.l May 22 10:18 1984 /B/sys/usr/john/robots/herodII.s Page 10

ishex.yes ishex .1 rts , ,.*******************

;ls16 - shift 16 bit number in A/B 4 bits left ;inputs: A high order byte B low order byte ;outputs: A = high order byte B low order byte ;calls: nothing ;destroys: nothing ls16 asl b make room for nibble rol a as1 b rol a asl b rol a asl b rol a rts ,.******************* , ;wai t - waste time ;input: X = time count ;outputs: none ;caIIs: nothing ;destroys: X wait dex bne wai t rts ,.******************** ;getu - get char from unix ;inputs: none ;outputs: A = char ;calls: nothing ;destroys: A, flags getu Ida a,Ilrxrdy getu1 bit a,statusu ;*check for new char(RxD full) beq getul ;*wait till b3 = 0 (bO on 6850) Ida a,datau ;get char and a,flOx7f ;mask parity rts , ;********************

;putu - send char to unix May 22 10:18 1984 IB/sys/usr/john/robots/herodll.s Page 11

;inputs: A = char ;outputs: none ;calls: nothing ;destroys: nothing putu psh a Ida a,lltxrdy putu1 bit a,statusu ;check for empty transmit buffer beq putu1 pul a sta a,datau ;sendchar rts , ,.********************

;getword - get a 16 bit word from unix ;inputs: none ;outputs: X = 16 bit word ;calls: byte ;destroys: A,B,X,flags,templ getword jsr .getbyte ;get low order byte sta a,templ+l jsr .getbyte ;get high order byte sta a, tempI ldx tempI ;word in X rts ,. ,.********************

;byte - get byte from unix ;inputs: none ;outputs: A = byte ;calls: getu ;destroys: A,B,fIags getbyte jsr .getu and a,IIOxOf ;mask rubbish on high order nibble c1e rol a rol a rol a rol a tab ;save in B jsr .getu and a,1I0xOf ;mask rubbish on low order nibble aba ;add to make byte rts end leader )c pre ,yt e 8 APPENDIX 3 lord 2 Ic a a: 16 Ic b a:8 lefmt a:8 .i OxOO laC "ET-IS HERO ROBOT"

.iterals

rgs xpr(x) { ObOOl0 0 2 1 expr { ObOOl0 0 4 2 xpr { ObOOl0 0 3 0 xpr,expr { ObOOl0 0 11 4 xpr,expr,expr,expr,expr.expr,expr { ObOOl0 0 12 5 ,expr(x) { ObOOl0 a 6 0 ,expr(x) { ObOOl0 a 9 a ,flexpr { ObOOl0 a 5 a ,Itexpr { ObOOl0 a 8 a ,expr { ObOOl0 0 7 2 ,expr { ObOOl0 0 10 2 { ObOOl0 0 0 0 { ObOOl0 0 1 0

ormats 0:8 0:8a:8 0:8a:16 0:8pa:8 0:8a:8b:8 o:8a:8b:8c:8d:8e:Bf:8g:8

)codes '.ass 13 1m o Ox02 0 OxOO 1 OxOO a OxOO 2 OxOO 0 OxOO 0 OxOO 2 Oxoo a OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO an o Ox03 0 OxOO L OxOO a OxOO 2 OxOO 0 OxOO a OxOO 2 OxOO a OxOO a OxOO 2 OxOO 4 OxOO 5 OxOO 1m o Ox04 a OxOO 1 OxOO a OxOO 2 OxOO a OxOO a OxOO 2 OxOO 0 OxOO a OxOO 2 OxOO 4 OxOO 5 OxOO ,p o OxOS a OxOO I OxOO 0 OxOD 2 OxOO 0 OxOO 0 OxOO 2 OxOO a OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO ,b o OxOD D OxOO I OxOO 3 axle 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO t a OxOO 0 OxOO 1 axoo 3 Oxld 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 Oxoo b o Oxoo 0 Oxoo 1 OxOO 3 Oxle 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO p o OxOO o OxOo 1 OxOO 3 Oxlf 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO 0 o Ox21 o OxOO 1 OxOO a OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO a OxOO 0 OxOO 2 OxOO 4 Oxoo 5 OxOO x o Ox3a o OxOO 1 OxOO 0 OxOO 2 OxOO a OxOO a OxOO 2 OxOO a OxOO a OxOO 2 OxOO 4 OxOO 5 OxOO d o Ox41 o OxOO 1 Oxoa 0 OxOO 2 Oxoo a OxOO 0 OxOO 2 OxOO a OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO d o Ox42 o OxOO 1 OxOD 0 OxOO 2 OxOO 0 OxOO 0 OxOD 2 OxOO a OxOO 0 Oxoo 2 oxoa 4 axoo 5 OxOO r o Ox45 o axoo 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 Oxoo 2 OxOO 0 OxOO 0 OxoO 2 Oxoo 4 OxOO 5 OxOO :l o Ox4b o OxOO 1 OxOO 0 Oxoo 2 OxOO 0 OxOO 0 Oxoo 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 Oxoo OxOO ~ o Ox4e o Oxoo 1 OxOO 0 Oxoo 2 OxOO 0 Oxoo 0 Oxoo 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxoO 5 i o Ox51 o OxOO 1 OxOO 0 OxOO 2 OxOO 0 Oxoo 0 OxOO 2 OxOO 0 OxOO 0 Oxoo 2 OxOO 4 OxOO 5 Oxoo I o Ox52 o OxOO 1 OxOO 0 OxOO 2 Oxoo 0 OxOO 0 Oxoo 2 Oxoo 0 OxOO 0 Oxoo 2 OxOO 4 OxOO 5 Oxoo I o Ox55 o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 Oxoo 2 OxOO 0 Oxoo 0 OxOO 2 OxOO 4 OxOO 5 OxOO o OxSb o OxOO 1 OxOO 0 Oxoo 2 Oxoo 0 OxOO 0 Oxoo 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO o OxSe o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 Oxoo 2 OxOO a OxOO 0 Oxoo 2 OxOO 4 OxOO 5 Oxoo l o OxOO o OxOO 1 OxOO 3 Ox61 2 OxOO 3 OxOO 3 OxOO 2 Oxoo 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO o OxOO o OxOO 1 Oxoo 3 Ox62 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 Oxoo 2 OxOO 4 OxOO 5 OxOO o OxOO o OxOO 1 OxOO 2 Ox71 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 Oxoo 0 OxOO 2 Oxoo 4 OxOO 5 OxOO o OxOO o OxOO 1 OxOD 2 Ox72 2 OxOD 0 Oxoo 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 Oxoo 4 OxOO 5 OxOO teader lpe pre bYte 8 APPENDIX 3 word 2 .-.-_._-~---.- de a a:16 de h a:8 jefmt a:8 Li OxOO nac "ET-IB HERO ROBOT" literals

I>

)(

Yo args expr(x) { ObOOIO a 2 I Itexpr { ObOOIO 0 4 2 expr { abOOIO 0 3 0 expr,expr { ObOOIO a 11 4 expr,expr,expr,expr,expr.expr,expr { OboaIO 0 12 5 il,expr(x) { ObOOIO 0 6 0 b,expr(x) { OboaIO a 9 a il,lfexpr { ObOOIO a 5 a b,ltexpr { ObOOl0 0 8 0 'l,expr { ObOOIO 0 7 2 J,expr { ObOOIO 0 10 2 1 { ObOOIO 0 0 0 ) { ObOOIO a I 0

~ Formats ) 0:8 L 0:8a:8 l o:8a:16 l 0:8pa:8 o:8a:8b:8 o:8a:8b:8e:8d:8e:8f:8g:8

)peodes :lass 13 ldm o Ox02 o OxOO 1 OxOO a OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO Han o Ox03 o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO lam a Ox04 o OxOO I axoo o Oxoa 2 OxOO 0 Oxoo 0 OxOO 2 OxOO o OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO ISP o Ox05 o OxOO I OxOO o OxOO 2 OxOO 0 Oxoo 0 Oxoo 2 OxOO o OxOO 0 OxOO 2 Oxoo 4 OxOO 5 OxOO )bb o OxOO o OxOO 1 OxOO 3 OxIc 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 Oxoo 3 OxOO 2 OxOO 4 OxOO 5 OxOO )8 t o OxOO o OxOO 1 OxOO 3 Oxld 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 axoa )ab o OxOO o OxOO 1 OxOO 3 axle 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO Oxoo 5 OxOO )SP o Oxoo o OxOO 1 OxOO 3 Oxlf 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 :ro o Ox21 a OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO o OxOO 0 OxOO 2 OxOO 4 axoo 5 axoo :tx o Ox3a a OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO o OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO ~ Id o Ox41 o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 Oxoa o OxOO a OxOO 2 OxOD 4 OxOO 5 OxOO ~sd o Ox42 o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO o OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO OxOO 2 OxOO 4 OxOO 5 OxOO ~ur o Ox45 o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO o OxOO 0 OxOO 5 OxOO ~md o Ox4b o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO o OxOO 0 OxOO 2 OxOO 4 OxOO ~ds o Ox4e o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO o OxOO 0 OxOO 2 OxOO 4 5 OxOO tid o Ox5l a OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO o OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO isci o Ox52 o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO [md o Ox55 o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOD o OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO lur 0 OxSb o OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO ids 0 OxSe o OxOO 1 OxOO 0 OxOO 2 OxOO a OxOO o OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO :cn 0 OxOO o OxOO 1 OxOO 3 Ox6l 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO :wn 0 OxOO o OxOO 1 OxOD 3 Ox62 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO ex 0 OxOO o OxOO 1 OxOO 2 Ox71 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO wx 0 OxOO o OxOO 1 OxOD 2 Ox72 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO 5 OxOO eml 0 Ox83 0 OxOO I OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO S OxOO sIp 0 OxOO 0 OxOO I OxOO 2 Ox87 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO a OxOO 2 OxOO 4 OxOO 5 OxOO pau 0 OxOO 0 Oxoo I OxOO 2 Ox8f 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 4 OxOO S OxOO jws 0 OxOO 0 OxOO I OxOO 2 Oxbf 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 Oxoo 2 OxOO 4 OxOO S OxOO mwa 0 OxOO 0 OxOO I Oxe3 2 Oxf3 2 OxOO 0 OxOO 0 Oxoo 2 OxOO 0 OxOO 0 Oxoo 2 OxOO 4 Oxe3 5 OxOO mWT 0 OxOO 0 OxOO I OxOO 0 OxOO 2 Oxoo 0 OxOO 0 OxOO 2 Oxoo 0 OxOO 0 Oxoo 2 Oxoo 4 Oxd3 5 OxOO mea 0 OxOO 0 OxOO I Oxf3 2 Oxfe 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO 0 Oxoo 2 Oxoo 4 Oxee S OxOO mer 0 OxOO 0 OxOO I OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 Oxoo 4 Oxdc 5 OxOO mam 0 OxOO 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o oxoa 2 oxoa 4 OxOO 5 Oxfd mcm 0 Ox83 0 OxOO 1 OxOO 0 Oxoo 2 Oxoo 0 Oxoo 0 OxOO 2 Oxoo 0 OxOO o Oxoo 2 OxOO 4 OxOO S OxOO nap 0 OxOl 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO S OxOO tap 0 Ox06 0 Oxoo 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO tpa 0 OxO? 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 axoo 2 OxOO 0 OxOO a axoo 2 axoo 4 OxOO 5 axOo inx 0 Ox08 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 axoo o OxOO 2 axoo 4 OxOO 5 OxOO dex 0 Ox09 0 OxOO 1 OxOO 0 axoo 2 OxOO a OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO ') elv 0 OxOa 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO L.. OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO S OxOO sev a OxOb 0 OxOO 1 OxOO 0 OxOO 2 OxOO a OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO ele 0 OxOe 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO <- sec 0 OxOd 0 OxOO I OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO :J OxOO eli 0 OxOe 0 OxOO I OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO sei 0 OxOf 0 OxOO I OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO sba 0 OxlO 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO eba 0 OxIl 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO tab 0 OxI6 0 OxOO I OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO tba 0 OxI7 0 OxOO I OxOO 0 OxOO 2 OxOO 0 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO daa 0 Oxl9 0 OxOO I OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO aba 0 Oxlb 0 OxOO 1 OxOO 0 Oxoo 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 Oxoo 4 Oxoo 5 OxOO bra 0 OxOO 0 oxon 1 Oxoo 3 Ox20 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 Oxoo 4 OxOO 5 OxOO bhi o OxOO 0 OxOO 1 OxOO 3 Ox22 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO bls o OxOO 0 OxOO 1 OxOO 3 Ox23 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 axoo 3 OxOO 2 OxOO 4 oxoa .5 OxOO bee o OxOO 0 OxOO I OxOO 3 Ox24 2 OxOO 3 OxOO 3 OxOO 2 axoo 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO bes o OxOO 0 OxOO 1 OxOO 3 Ox25 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO bne o OxOO 0 OxOO I OxOO 3 Ox26 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 Oxoo 3 OxOO 2 OxOO 4 OxOO S OxOO beq' o OxOO 0 OxOO 1 OxOO 3 Ox27 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO bve o OxOO 0 OxOO 1 OxOO 3 Ox28 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO .5 OxOO bvs o OxOO 0 OxOO 1 OxOO 3 Ox29 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 Oxoo 3 OxOO 2 OxOO 4 OxOO 5 OxOO bpI o OxOO 0 OxOO 1 OxOO 3 Ox2a 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO S OxOO bmi o OxOO 0 OxOO 1 OxOO 3 Ox2b 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO bge o OxOO 0 OxOO 1 OxOO 3 Ox2e 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO .5 OxOO bIt o OxOO 0 OxOO I OxOO 3 Ox2d 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 Oxoo bgt o OxOO 0 OxOO 1 OxOO 3 Ox2e 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 Oxoo bie o OxOO 0 OxOO 1 OxOO 3 Ox2f 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO .5 Oxoo tsx o Ox30 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO ins o Ox31 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO .5 OxOO pul o Ox32 0 Ox33 I OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO a OxOO a OxOO 2 OxOo 4 OxOO 5 OxOO des OOx34 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 Oxoo o OxOO 2 Oxoo 4 OxOO 5 OxOO txs o Ox35 0 OxOO I OxOO 0 OxOO 2 OxOO 0 Ox09 o Oxoo 2 OxOO 0 Oxoo o Oxoo 2 OxOO 4 OxOO 5 OxOO psh o Ox36 0 Ox37 1 oxoa 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO rts o Ox39 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO rti o Ox3b 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO wai o Ox3e 0 OxOO 1 OxOO 0 OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 5 OxOO swi o Ox3f 0 OxOO I OxOO 0 Oxoo 2 OxOO 0 OxOO o OxOO 2 OxOO 0 OxOO o OxOO 2 OxOO 4 OxOO 'i OxOO neg o Ox40 0 OxSO I Ox60 2 Ox70 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO com o Ox43 0 OxS3 1 Ox63 2 Ox73 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO lsr o Ox!~4 0 Ox54 I Ox64 2 Ox74 2 OxOO 2 Oxoo 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO .5 OxOO ror o 0:<46 0 OxS6 1 Ox66 2 Ox76 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 oxon 4 OxOO 5 Oxoo asr o Ox4? 0 OxS7 1 Ox67 2 Ox77 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO asl o Ox48 0 Ox58 I Ox68 2 Ox78 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO S OxOO ral o Ox49 0 Ox59 1 Ox69 2 Ox79 2 OxOO 2 OxOO 2 OxOO 2 Oxoo 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO dec o Ox4a 0 Ox5a I Ox6a 2 Ox7a 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO S OxOO inc o Ox4e 0 Ox5c 1 Ox6c 2 Ox7e 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO tst o Ox4d 0 Ox5d 1 Ox6d 2 Ox7d 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 Oxoo jmp o OxOO a OxOO I Ox6e 2 Ox7e 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 Oxoo elr o Ox4f 0 Ox5f 1 Ox6f 2 Ox7f 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 Oxoo sub o OxOO 0 OxOO I OxOO 1 OxOO 2 OxOO I Ox80 I OxaO 2 OxbO 1 OxeO I OxeO 2 OxfO 4 OxOO 5 OxOO emp o OxOO 0 Oxoo 1 OxOO 1 OxOO 2 OxOO 1 Ox81 1 Oxal 2 Oxbl I Oxel I Oxel 2 Oxfl 4 OxOO 5 OxOO sbe 0 OxOO 0 OxOO 1 OxOO 1 OxOO 2 OxOO 1 Ox82 1 Oxa2 2 Oxb2 1 Oxe2 1 Oxe2 2 Oxf2 4 OxOO 5 OxOO and 0 OxOO 0 OxOO 1 OxOO 1 OxOO 2 OxOO 1 Ox84 1 Oxa4 2 Oxb4 1 Oxe4 1 Oxe4 2 Oxf4 4 OxOO 5 OxOO bit 0 OxOO 0 OxOO 1 OxOO 1 OxOO 2 OxOO 1 Ox8S 1 OxaS 2 OxbS 1 OxeS 1 OxeS 2 OxfS 4 OxOO S OxOO Ida 0 OxOO 0 OxOO 1 OxOO 1 OxOO 2 OxOO I Ox86 1 Oxa6 2 Oxb6 1 Oxe6 1 Oxe6 2 Oxf6 4 OxOO 5 OxOO s ta 0 OxOO 0 OxOO 1 OxOO I OxOO 2 OxOO 1 OxOO 1 Oxa7 2 Oxb7 1 OxOO 1 Oxe7 2 Oxf7 4 OxOO 5 OxOO ear 0 OxOO 0 OxOO 1 OxOO 1 OxOO 2 OxOO 1 Ox88 1 Oxa8 2 Oxb8 1 Oxe8 1 Oxe8 2 Oxf8 4 OxOO 5 OxOO adc 0 OxOO 0 OxOO 1 OxOO 1 OxOO 2 OxOO 1 Ox89 1 Oxa9 2 Oxb9 1 Oxe9 1 Oxe9 2 Oxf9 4 OxOO 5 OxOO ora 0 OxOO 0 OxOO 1 OxOO 1 OxOO 2 OxOO 1 Ox8a 1 Oxaa 2 Oxba 1 Oxca 1 Oxea 2 Oxfa 4 OxOO 5 OxOO add 0 OxOO 0 OxOO 1 OxOO I OxOO 2 OxOO 1 Ox8b 1 Oxab 2 Oxbb 1 Oxeb 1 Oxeb 2 Oxfb 4 OxOO S OxOO cpx 0 OxOO 0 OxOO 1 Oxac 2 Oxbc 2 Ox8c 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO bsr 0 OxOO 0 OxOO 1 OxOO 3 Ox8d 2 OxOO 3 OxOO 3 OxOO 2 OxOO 3 OxOO 3 OxOO 2 OxOO 4 OxOO 5 OxOO jsr 0 OxOO 0 OxOO 1 Oxad 2 Oxbd 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO Ids 0 OxOO 0 OxOO 1 Oxae 2 Oxbe 2 Ox8e 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO ldx 0 OxOO 0 OxOO 1 Oxee 2 Oxfe 2 Oxce 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 Oxoo sts 0 OxOO 0 OxOO 1 Oxaf 2 Oxbf 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO stx 0 OxOO 0 OxOO 1 Oxef 2 Oxff 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 2 OxOO 4 OxOO 5 OxOO % labels extend OxOOOO shoulder OxOOOl rotate OxOOO2 pivot OxOOO3 gripper OxOOO4 head OxOOOS steering OxOOO6 motndet OxOO2l trigg OxOO2a expbd OxOO2d userl OxOO30 user2 OxOO33 user3 OxOO36 redis Oxf64e clrdis Oxf6Sb dsplay Oxf6f9 inch Oxf777 ihb Oxf796 outbyt Oxf7ad outhex Oxf7bS outch Oxf7e8 outstr Oxf7eS % end Hero Robot User's Guide

John Fulcher

Department of Computing Science

University of Wollongong

1. Powering Up The Heathkit ET-18 'HERO 1.0' Robot is powered by four 6V rechargeable dry cell bat­ teries, two of which power the motor drive circuitry, and two the electronics. Hero can be run using either batteries only or by using the battery charger (plugged into the appropriate socket in its rear panel), however it is imperative to always ensure: *(i)* Hero is NEVER moved from point to point with the battery charger still connected (although its head and arm can be safely moved without any danger of dragging the power supply around after it!), and *(ii)* The battery charger is NEVER left connected to Hero and switched OFF (this provides a discharge path whereby Hero's batteries will run down completely if left long enough). i.e. the battery charger's red 'power' I.e.d. should ALWAYS be on when connected to Hero. (The charger's white 'charge' I.e.d. mayor may not be on, depending on how much current is being drawn by Hero's batteries viz. how charged/discharged they are). After you've finished, you SHOULD ALWAYS PLUG THE BATTERY CHARGER IN AND SWITCH ON, so that Hero has a chance to charge up before the next user comes along. When power is applied to Hero, or the RESET key is pressed, it comes up with 'HERO 1.0' displayed on its 7-segment I.e.d. displays, and says 'READY' (and after IO seconds the display changes to a moving '-' prompt, in order to conserve power).

2. Executive Moue Hero powers up in 'Executive' or 'Robot Language Interpreter' mode; further key presses will change the mode of operation, as follows: 1 - Program mode 3 - Utility mode 4 - Manual mode 7 - Learn mode A- Repeat mode Hero can be made to move around, using the teaching pendant, in either 'Manual' or 'Learn' mode.

3. Utilities (key 3) [ref. p.l7 ET-18 Robot User's Guide] A total of 8 utilities are provided, namely: 31 - Initialize 32 - Home (to initial position) 33 - Download to cassette 34 - Uploading from cassette 35 - Set time-of-day 36 - Set date - 2 -

37 - Display time-of-day 38 - Display date

4. Moving Hero around Before attempting to move Hero around, it is necessary to initialize it (otherwise the Hex digits on the display and the postions of the various stepper motors bear no relation to each other). Thus the very first act after powering up should ALWAYS be to INITIALIZE Hero (31). Once Hero has been initialized, it is only necessary to use 32 (or the HOME command) on subse­ quent occasions (provided Hero has not been powered down in the meantime). Make sure the TEACHING PENDANT is plugged into the appropriate socket in its rear panel before you attempt to move Hero around! The FUNCTION switch selects either 'ARM' or 'BODY' movements, and the ROTARY switch selects which particular movement, namely (clock­ wise from left to right): (i) ARM: head/extend/arm_pivat (neutral) wrist_pivot/wrisLJotate/gripper (ii) BODY: fast_reverse/medium_reverse/slow_reverse (neutral) slow_forward/medium_forward/fast_forward None of these movements will be activated unless the TRIGGER switch is held in. Moreover, in order to execute head/arm movements or to STEER Hero left or right, the MOTION switch ALSO needs to be switched to its LEFT or RIGHT position. In order to CENTRE Hero's steer­ ing wheel, simply hold the TRIGGER switch in without operating,the (left/right) motion switch. NOTE: (i) Hero does not posess touch sensors, only sonar, and as such is prone to running into table legs etc. (i.e. small, non-flat surfaces), and will CONTINUE to try to drive through such obstacles! It is up to the operator to ensure that this does not happen (the RESET and/or ABORT keys are handy as a last resort!). (ii) If Hero is to be used to trace out a particular path REPEATEDLY, it must be oriented at EXACTLY THE SAME starting point each time (otherwise small errors will accumu­ late into large ones and it could start running into walls etc. where it wasn't before­ handl).

5. Learn Mode The techniques just mentioned for moving Hero around can be done in either MANUAL (4) or LEARN (7) mode. In MANUAL mode, the 7-segment l.e.d. displays will indicate both motor number and position as that particular motor is activated. In LEARN mode, you will need to provide two memory addresses (start an,d finish), indicating what portion of memory you are allocating for storage of movements. Hero's 7-seg. display will then show: 7.F.xxxx (where xxxx = start address + 8 bytes) The display will be updated each time the trigger switch is RELEASED, indicating what memory location has now been reached. (Note that in order to conserve memory, only release the trigger when you want to CHANGE to a DIFFERENT function. i.e. presses and releases of the trigger switch will consume memory locations - even if you are driving the SAME motor). If you've made a mistake with the last movement, you can press 'B'(ackup) and Hero will automatically reverse the movement you've just made, pause (and keep on backing up through previous movements) until you press the 'F'(orward) key. If you want to SAVE these backup movements as part of your sequence, then press '7'(reverse-the-instruction) rather than 'B' - an 'r' will now appear where 'F' was displayed previously as you step back through the movement(s) (and pressing the 'F'-key will set up Hero ready to move forward again). Pressing keys in the following order will now run the program you've just stored: - 3 -

RESET A(uto) D(o) xxxx (starting address) (Note that Hero will home to the position it had PRIOR to entering 'learn' mode BEFORE it begins executing the sequence of movements you've just programmed in). [ref. p.23 ET-18 Robot User's Guide]

6. Saving Programs There are two facilities for saving/loading programs to and from Hero, the first involves using an audio cassette recorder and the second an RS-232C Unix link. (i) CASSETTE [ref. p.19 ET-18 Robot User's Guide]: For STORING A PROGRAM ON CASSETTE, connect the RCA plug end of the AUDIO CONNECTOR to the 'out' socket on Hero's rear panel and the 3mm audio plug end to the cassette recorder's 'microphone' input. Press '33', display will show' Fr'. Enter the starting address of your program, display will show' La'. Enter the last address of your program. On successfully up-line saving your program on cassette, Hero will automati­ cally return to 'Executive' mode (viz. 'Ready'). For LOADING A PROGRAM FROM CASSETTE, connect the same AUDIO CONNECTOR, this time from the 'in' socket on Hero's rear panel to the cassette player's 'earphone' jack. Turn the volume control up full. Press'34' (note that you don't need to specify a starting address for down-line loading, as this was stored automati­ cally in the up-line save header). The'.' segment in '3.4' on the display will flash during the down-line load, and Hero will automatically return to 'Executive' mode following a successful load (or alternatively display 'ErrOr' if the load was unsuccessful). (ii) UNIX: For UP-LINE SAVING A PROGRAM to Unix, Press A(uto) D(0) 2000 (transparent link program) (cf. AOoo on ET3400 trainers) Login to Unix type: ($)dll -s -y[segno.]/[start]/[end] (AND/OR) -y[segno.]/[start]/ + [length] ...etc (note: addr in Hex ;length in Decimal) For DOWN-LINE LOADING A PROGRAM from Unix, Press AD 2000 (transparent link) Login type: ($) dll -1 filename control-A --> 'HERO MONITOR' on v.d.u. and 'READY' on Hero. AD xxxx will then run your program on Hero.

(xxxx =: starting address) alternatively, type: - 4 -

($) dB -la filename (i.e. load all program segments & autobranch to entry point)

7. Programming Hero

7.1. Introduction Small programs can be entered via Hero's hexadecimal keypad; larger-scale programs are better developed under Unix then down-line loaded to Hero. Programs developed under Unix must be assembled using the 'mac' cross- assembler prior to down-line loading. The appropriate command is: ($) 'mac -I hero file.s' In 'Executive' or 'Robot Interpreter' mode, Hero will respond not only to M6800 machine­ code instructions, but also to special (Robot Language) commands. Hero will run much slower in 'Robot Interpreter' mode than in 'Machine-code' mode, since each command is interpreted prior to execution. For entering programs via the HEXADECIMAL KEYPAD, pressing 'A'(uto or repeat --> ___~Ad. ) runs Hero in 'Robot Interpreter' mode, while pressing '1' runs Hero in 'Machine­ code' mode. (Note that while programs will run much faster in 'Machine-language' mode, you will not be able to use any of the special 'Robot Language' commands developed for Hero). [ref. p.25 ET-18 Robot User's Guide] NOTE: 'op code' Ox83 will be interpreted by Hero as a directive to change from 'Robot Interpreter' mode to 'Machine-language' mode, and a Ox3F ('swi' instruction) will convert back from 'Machine-language' mode to 'Robot Interpreter' mode. Moreover, 'op code' Ox3A (return to exec) command stops current program execution and returns Hero to 'Executive' (READY) mode). [ref. p.23 & 29 ET-18 Robot Technical Manual]

7.2. Robot Interpreter Commands A complete list of INTERPRETER COMMANDS is given on p.24 of ET-18 Robot Techni­ cal Manual; these are repeated here for convenience, together with the mnemonics recognised by 'mac' (note that Hero's Robot Interpreter utilizes unused M6800 op. codes. i.e. 'mac' has been modified to accept these additional mnemonics at compilation time): - 5 -

HEX MNEMONIC INTERPRETED COMMAND Ox02 adm Abort Drive Motor Ox03 asm Abort Steering Motor Ox04 aam Abort Arm Motor OxOS asp Abort SPeech OxiC 00 bbb Branch if Base Busy OxlD 00 bst Branch if STeering busy OxlE 00 bab Branch if Arm Busy OxlF 00 bsp Branch if SPeech busy Ox21 zro Zero Ox3A rtx Return To eXecutive Ox41 eld Enable Light Detector Ox42 csd Enable Sound Detector Ox45 eur Enable Ultrasonic Ranging Ox4B emd Enable Motion Detector Ox4E eds Enable DiSplay Ox51 dId Disable Light Detector Ox52 dsd Disable Sound Detector Ox55 dmd Disable Motion Detector Ox5B dur Disable Ultrasonic Ranging Ox5E dds Disable DiSplay Ox61 00 sen Speak, Continue (iNdex) Ox62 00 swn Speak, Wait (iNdex) Ox71 MM MM sex Speak, Continue (eXtended) Ox72 MM MM swx Speak, Wait (eXtended) Ox83 cml Change to Machine Language Ox87 XX XX sip SLeeP (immediate) Ox8F XX XX pau PAUse (immediate) OxBf MM MM jws Jump When Speaking (extended) OxC3 SS XX mwa motor Move Wait Absolute (immediate) OxE300 mwa motor Move Wait Absolute (index) OxF3 MM MM mwa motor Move Wait Absolute (extended) OxD3 SS XX mwr motor Move Wait Relative (immediate) OxCC SS XX mea motor Move Continue Absolute (immediate) OxEC 00 mea motor Move Continue Absolute (index) OxFC MM MM mea motor Move Continue Absolute (extended) OxDC SS XX mer motor Move Continue Relative (immediate) OxFD ** mam Move All Motors absolute (immediate) legend: XX = distance,position,time etc. S5 = select motor, speed, direction MM = memory address 00 = relative offset ** = SEVEN motor position bytes, in order: extend, shoulder, rotate, pivot, gripper, head, steering The following reserved labels are recognized by 'mac': LABEL ADDR LABEL ADDR LABEL ADDR LABEL ADDR extend 0000 shoulder 0001 rotate 0002 pivot 0003 gripper 0004 head 0005 steering 0006 motndet 0027 trigg 002A expbd 002D userl 0030 user2 0033 user3 0036 redis F64E clrdis F65B dsplay F6F9 inch F777 ihb F796 outbyt F7AD outhex F7B5 outch F7C8 outstr F7E5 - 6 -

7.3. Hero Memory Map User R.A.M. extends from Ox0040 to OxOEEO. The foHowing RAM locations are used for storing motor position information: ADDR MOTOR RANGE OxOOOO Extend (full in)oo to 98(fu11 out) OxOOOI Shoulder (lowered)OO to 86(raised) OxOOO2 Rotate (CCW)OO to 93(CW) Oxoo03 Pivot (up)OO to A5(down) OxOOO4 Gripper (closed)oo to 75(open) OxOOO5 Head (CCW)OO to C2(CW) OxOOO6 Steering (left_turn)OO to 93(right_turn)

[ref. p.32 ET-18 Robot Technical Manual] The TRANSPARENT LINK to Unix resides in E.P.R.O.M., beginning at Ox2000. MONITOR ROUTINES AVAILABLE TO USER (cf. ET-3400 Monitor routines); ROUTINE START ADDRESS BRIEF DESCRIPTION INCH OxF777 inputs key presses from keyboard DUTCH OxF7C8 outputs (ACCA) to 7-segment display OUTHEX OxF7BS outputs (ACCA) to 7-segment display OUTBYT OxF7AD outputs 2 numbers to display CLRDIS OxF65B blanks all 7-segment displays OUTSTR OxF7E5 outputs character string to display DSPLAY OxF6F9 outputs 1,2 or 3 bytes to dispIay IHB OxF796 monitors keyboard for 2 keystrokes REDIS OxF64E resets

[ref. p.20 ET-18 Robot Technical Manual]

7.4. Hexadecimal Keypad Besides entering (small) programs, the hexadecimal keypad can be used for checking, altering and running programs loaded into USER R.A.M. AA A(uto) A(dd to memory), beginning at location Ad. is used for entering small programs, AE A(uto) E(xamine) Ad. is used to examine memory locations, F,B F(orward) and B(ack) to increment/decrement memory, C C(hange) xxxx__ to alter memory/register contents. A 0 A(uto) D(o), beginning at location do. is used for running programs. BR BR(eakpoint-key 9) br. is used for setting breakpoints (note: RESET clears all breakpoints) SS S8 (key 8) is used for SINGLE-STEPPING through a program. keys I to 6 are used for examining the contents of the 6808 registers, as follows: KEY REGISTER KEY REGISTER (key 1) Acca.xx (key 2) Accb.xx (key 3) Pc.xxxx (key 4) In.xxxx (key 5) cc-- > 100100 (key 6) 8p.xxxx

USER DEFINED KEYS: In 'Executive' mode, the F,C & 9 keys can be used as SPECIAL­ FUNCTION keys, with the c.p.u. jumping to the location specified in the following R.A.M. loca­ tions (& arriving in 'Robot Interpreter' mode): - 7 -

KEY FUNCTION ADDR LOCATIONS CONTENTS (F) user-l OxOO30,1,2 7E xx xx (C) user-2 OxOO33,4,5 7E xx xx (9) user-3 OxOO36,7,8 7E xx xx

(i.e. jump to start of special service routine) [ref. p.32 ET-18 Robot Technical Manual] There are also three USER INTERRUPT VECTORS provided on Hero: MNEMONIC FUNCTION ADDRESS LOCATIONS motndet Motion Detect 0027,8,9 trigg Trigger 002A,B,C expbd Experimental Board *IRQ 002D,C,D

[ref. p.33 ET-18 Robot Technical Manual] RESET will always return you to 'Executive/Robot Interpreter' mode (viz. 'READY'). ABORT will also halt program execution, but will also display contents of Program Counter, to assist in debugging. (ABORT is located on the EXPERIMENT BOARD, where the SLEEP switch also resides). SLEEP With the SLEEP switch in 'sleep' rather than 'normal' position, op code '87xxxx' will place Hero into 'Battery-saving' mode for xxxxO seconds (viz. in the range 10 seconds to 7 days 14 hours). (NOTE: Power is still applied to USER R.A.M. in 'Sleep' mode, so your program will NOT be lost). PAUSE (op code '8Fxxxx') is similar to SLEEP, but does not switch any circuitry off, and provides for delays in multiples of 1/16sec not 10 seconds. [ref. p.29 ET-18 Robot Technical Manual & p.44 ET-18 Robot User's Guide]

8. Hero's Sensors Hero can sense TIME, LIGHT, SOUND, MOTION around it, and DISTANCE away from a large flat surface (such as a wall). TIME [ref. p.20,39 ET-18 Robot User's Guide for setting/using date and/or time-of­ daYI- LIGHT Hero can sense 256 different light intensities with its light- dependant resistor (mounted behind the hole in the orange panel on the side of its head). [ref. pAO E1'-18 Robot User's Guide] SOUND Hero can sense 256 discrete sound intensities with its loudspeaker transducer (mounted on the same side of its head, at one end of the orange panel). [ref. pAl E1'-18 Robot User's Guide] MOTION Hero can sense motion with its ultrasonic transmitter/receiver transducer pair (mounted behind the orange panel on the side of its head). [ref. pA2 E1'-18 Robot User's Guide] RANGING Ultrasonic Ranging -- Hero can sense distance away from a wall, or other large flat object, with its sonar transmitter/receiver transducer pair (mounted behind the blue foam at the front of its head). [ref. pA3 E1'-18 Robot User's Guide] (NOTE: Hero CANNOT sense small thin objects such as table legs however, and since it is not fitted with feedback sensors it will attempt to drive straight through such obstacles!) It is STRONGLY RECOMMENDED that you peruse the sample programs given in the above sections of the ET-18 Robot User's Guide, PRIOR to attempting to use these sensors in your own program. [ref. p.57 ET-18 Robot Technical Manual for a 'Sonar Test Program' e.g.] I/O PORT ADDRESSES The following addressing scheme is used for (I/O) sensor ports: - 8 -

ADDRESS IN OUT OxC200 interrupts clear interrupt latches OxC220 sonar timer experimental board OxC240 sense speech OxC260 tape_in/motor_limits steering/pivot,rotate OxC280 remote extend,head,gripper,shoulder OxC2AO experimental board main drive OxC2EO -- main power on-off/tape_out OxC300 clock data time clock OxC003 keyboard -- OxCIIO -- display

(note: ultrasonic range information is stored in R.A.M. - at OxOOlO) {ref. foldout p.1l7 ET-18 Robot Technical Manual]

9. Speech {ref. p.30 ET-18 Robot User's Guide, p.1O ET-18 Voice Manual & ET-18 Voice Dictionary] Hero is fitted with a (64) phoneme-based SPEECH SYNTHESIZER, and its voice ( a small loudspeaker) is mounted at the front of its head near the orange side paneL Two speech options are available- 'Speak-Before-Moving' (op code Ox72) and 'Speak-While-Moving' (op code Ox?I). The necessary programming sequence is as follows: RESET (to 'Executive' mode) AA Ad. (e.g. 0040 - program start addr.) 72 (speak BEFORE moving) 0406 (starting address of phonemes) 7E (jump to 'xxxx' when finish speech) xx xx I I (phonemes) I I 03 (pause)

Phonemes are given in the ET-18 Robot Voice Dictionary. It is easiest if you try to find a simi­ lar sounding word first in the 750-word vocabulary provided , and then modify accordingly (with the aid of the alphabetical listing of phonemes on p.81/2) than it is to 'start from scratch' with every new word (although of course you will have to with some). Once you've developed the speech to a state where the phonemes are reasonably correct, you can make it more realistic by addil1g inflections, as follows: Hero's speech synthesizer has four PITCH outputs, the lowest being the hex code given in the voice dictionary, and the others as follows: highest base + OxCO I base + Ox80 I base + Ox40 lowest base hex. code

Some standard phrases are stored in R.O.M., and the starting addresses of these are given on p.77/8 of the ET-18 Rohot Voice Dictionary. WARNING: For speech programs, any subsequent routines must start at the NEXT address, whereas for movement programs (entered using the teaching pendant in 'Learn' mode) subse­ quent routines must start at the address indicated on the display (PC) and NOT the following address. This is important in linking together speech and movement programs. e.g. Ox0040 -- 0056 speech Ox0057 -- 0084 movement Ox0084 -- 0100 (next routine) - 9 -

10. It is STRONGLY RECOMMENDED that you drive Hero around manually with the teach­ ing pendant, in order to become familiar with its capabilities BEFORE you attempt to program it.

May 21, 1984