home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol150 / z8001.zsc < prev    next >
Encoding:
Text File  |  1985-02-10  |  30.0 KB  |  1,208 lines

  1. %    30 Dec 82 1443 hrs.
  2.           PROGRAM BOOT;% WRITTEN FOR AMD MACZ ASSEMBLER
  3.        ORIGIN #0000;%      RESET POINT FOR Z8001.
  4. %
  5. GRESET:    WORD:   #0000;
  6.         WORD:    #5000;
  7.     WORD:    #0000;%    SEGMENT ZERO.
  8.     WORD:    UTIL;
  9. UTIL:    JP BLOCKL;
  10. BLOCKL:    LD R1, ^PBOOT;%SOURCE OF BLOCK MOVE.
  11.     LD R2, ^BOOT;%DEST OF LOAD.
  12.     LD R3, ( ^DP - ^BOOT + 2 );%LENGTH OF FORTH & ZSIO.
  13.     LDIR R2^, R1^, R3;%MOVE FORTH FROM EPROM TO 4100.
  14.     JP KICK;
  15.  
  16. PBOOT:    %BEGIN EPROM HERE.
  17.  
  18.  
  19.           ORIGIN #4100;
  20. CONST     DSIOA     =#1000;% Z80-SIO PORT LOCATIONS
  21. CONST     DSIOB     =#1001;% DATA PORT B
  22. CONST     CSIOA     =#1002;% CONTROL/STATUS PORT A
  23. CONST     CSIOB     =#1003;% CONTROL/STATUS PORT B
  24. %
  25. BOOT:     WORD:     #5000;    % ENABLE Z8001 INT. -NOT USED.
  26.           WORD:     KICK;
  27.  
  28. KICK:     LD R15, #6000;%          SET STACK TO RAM END.
  29.           CALL ZSIO;          %DIS SIO INT'S.( POLLING USED )
  30.           JP FORTH;    % FOR START.
  31. %
  32. ZSIO:     % SET UP SIO'S
  33.           LD R2, CSIOA;
  34.           LD R3, ^SIOBUF; %OUTPUT STRING BUF SOURCE
  35.           LD R4, #000A;  %COMAND STRING LENGTH
  36.           OTIRB R2, R3^, R4;
  37.           RET;
  38. SIOBUF:        WORD:    #0100;% 00 -> REGISTER #1
  39.         WORD:    #0200;
  40.         WORD:    #03C1;
  41.         WORD:    #0444;% 44 -> REG #4 ( 19.2K BAUD, etc. )
  42.         WORD:    #056A;
  43. %
  44. %
  45. SIOIN:    IN R2, CSIOA;% Get SIO A status.
  46.           AND R2, #0001;% Received a char yet ?
  47.           JR ZR, SIOIN;% no, poll
  48.           IN R0, DSIOA;% yes, get the character
  49.           AND R0, #007F;% clear parity bit
  50.           CPB RL0, #0D;   % DON'T ECHO CRETS.
  51.           JR ZR, NECHO;
  52.           CPB RL0, #08;  % SUPRESS BSP ?
  53.           JR ZR, NECHO;
  54.           CPB RL0, #7F;  % SUPRESS DEL ?
  55.           JR ZR, NECHO;
  56. è          CALL SIOUT;    % ECHO THE CHARACTER.
  57. NECHO:    CP R0, #0000; % RETURN TO UTILITY IF ^@ OR 'NUL', exit.
  58.         JP ZR, STARTX;% If a utility or monitor prog exists.
  59.           EXB RH0, RL0;    %PUT Rx -> RH0 WITH A SWAP.
  60.           RET;
  61. STARTX║   L─á R2¼á CSIOA;Ñá Re-enablσ SI╧ INT'╙ fo≥á monito≥á iµ needed
  62.           LD R3, ^SIORTN;
  63.           LD R4, #0002;
  64.           OTIRB R2, R3^, R4;
  65.           JP UTIL;
  66. SIORTN:   WORD:     #0118;% 18 -> REG #1 (enable receive INT'S )
  67. %
  68. SIOUT:    IN R2, CSIOA;
  69.           AND R2, #0004;    %IS Tx BUFFER EMPTY YET?
  70.           JR ZR, SIOUT;
  71.           NOP;            %YES, CONTINUE.
  72.           OUT DSIOA, R0;    %OUTPUT LOW-ORDER BYTE TO SIO PORT.
  73.           RET;
  74. %
  75. %
  76. CONOUT:   LD R0, R13^;        %OUTPUT STRING TO CONSOLE.
  77.           AND R0, #7F7F;    %CLEAR MSB'S OF ASCII BYTES IN R0
  78.           EXB RL0, RH0;         %GET CHAR TO BE SENT INTO RL0.
  79.           CALL CHARO;        %OUTPUT LOWER CHAR IN R0
  80.           RET EQ;        %EXIT IF 04 OR 0A ENCOUNTERED.
  81.           EXB RL0, RH0;        %ACCESS 2nd BYTE IN R0
  82.           CALL CHARO;        %OUTPUT 2nd BYTE
  83.           RET EQ;        %EXIT IF 0A OR 04 ENCOUNTERED
  84.           INC R13, #2;        %GET NEXT CHARAC4ERS.
  85.           JR CONOUT;
  86. %
  87. CHARO:    CALL SIOUT;    %OUTPUT LOWER BYTE TO SIO
  88.     CPB RL0, #0D;    %WAS IT A CRET?
  89.     JR NZ, BBB;    %JR IF NOT
  90.     LDB RL0, #0A;    %YES, FOLLOW W/LINEFEED
  91.     CALL SIOUT;
  92.     SETFLG ZR;    %SIGNAL CALLING ROUTINE THIS IS LAST CHAR.
  93.     RET;
  94. BBB:    CPB RL0, #04;    %WAS IT A 04 END-OF-STRING ?
  95.     RET;        %ZR=1 IF END-OF-STRING.
  96. %
  97. CONIN:    LD R13, ^INBUF;
  98. STILL:    CALL SIOIN;
  99.           CPB RH0, #0D;  %CRET?
  100.           JR ZR, DONE;
  101.           CPB RH0, #08;  % BACKSPACE?
  102.           JR ZR, BKUP;
  103.           CPB RH0, #7F;  % DELETE?
  104.           JR ZR, BKUP;
  105.           LDB R13^, RH0;  % PUT CHAR INTO INBUF @R13.
  106.           CP R13, ^INBUF(#64);   % END OF BUFFER ?
  107.           JR ZR, HOLD;           % YES, OVERLAY LAST CHAR.
  108.           INC R13;
  109.           JR STILL;
  110. BKUP:     CP R13, ^INBUF;
  111. è          JR LE, STILL;  % CAN'T BACKUP LOWER.
  112.           DEC R13;       % BACKUP OVER LAST CHARACTER.
  113. HOLD:     LDB RL0, #08;  % BACKSPACE.
  114.           CALL SIOUT;
  115.           LDB RL0, #20;  % ERASE CRT CHAR.
  116.           CALL SIOUT;
  117.           LDB RL0, #08;  %BACKSPACE OVER SPACE.
  118.           CALL SIOUT;
  119.           JR STILL;      % GET NEXT CHAR.
  120. DONE:     LDB R13^, #80;
  121.           INC R13;
  122.           LDB R13^, #80;
  123.           LD BUFPNT, ^INBUF;
  124.           RET;
  125.           WORD(40);      % PATCH SPACE.
  126. %
  127. MACRO DATE;
  128.           BEGIN
  129.                     BYTE:     #0A,'30 Dec 82  1443 hrs.', #0D;
  130.           END;
  131. %
  132. %          MODULE "FORTH";
  133. % 30 Dec 82. For Z8001   J. L. Way
  134. % FROM Dr. Dobb's Journal  No. 71 sept '82.
  135. % By    L. L. Odette
  136.          ORIGIN #0001;
  137. NUM1:     % MACZ doesn't support constant declarations
  138.           % for address arithmetic.
  139.           ORIGIN #0004;
  140. NUM4:
  141.           ORIGIN #4300;
  142. FORTH:
  143.           CLR BASE;
  144.           CLR START;
  145.           JP INIT;
  146. % R1 IS THE INSTR. REG. AND MUST BE SAVED BY ALL ROUTINES.
  147. % R14 IS THE RETURN STACK POINTER
  148. % R15 IS THE DATA STACK POINTER.
  149. %
  150. MACRO HEADER   N, NFIELD, LFIELD ;
  151.           % N is # of chars in name
  152.           % NFIELD is 1st 3 chars of name field.
  153.           % LFIELD is compilation addrs of previous entry. (link)
  154.      BEGIN
  155.           BYTE:     N ;
  156.           BYTE:     NFIELD ;
  157.           WORD:     LFIELD - 6 ;
  158. END;
  159. %
  160. MACRO NEXT ;
  161.      BEGIN
  162.           POP R2, R1^;
  163.           JP R2^;
  164. END;
  165.     WORD(4);    %ADJUST CODE TO LISTING + 300.
  166. è%
  167. %
  168. % I/O BUFFERS
  169. INBUF:
  170.      BYTE ( #64);
  171. OUTBUF:
  172.      BYTE ( #64);
  173. %
  174. %
  175. % SYSTEM DATA AREA, DO NOT CHANGE ORDER OF PARAMETERS
  176. %
  177. START:    WORD (1);
  178. BASE:     WORD (1);
  179. MODE:     BYTE (1);
  180. STATE:    BYTE (1);
  181. DICPNT:   WORD (1);
  182. CONXT:    WORD (1);
  183. CURRNT:   WORD (1);
  184. BUFPNT:   WORD (1);
  185. STKPNT:   WORD (1);
  186. CMPLER:   WORD:      SEMI1(-6);
  187. CONST     SYSTEM    =START;
  188. CONST     TERM      =#0080;
  189. % SYSTEM MESSAGES.
  190. RSTMSG:    BYTE:    #0A,' RESTART!',#0D;
  191. SRTMSG:      BYTE:      #2B,#1B,#2B,'Z8000-FORTH:    (C)  1982,  L. L. ODETTE',#0D;
  192. OK:    BYTE:    #04,' OK',#0D;
  193. NOTKNO:    BYTE:    #03,' ?',#0D;
  194. STKMSG:    BYTE:    #11,' STACK UNDERFLOW',#0D;
  195. %
  196. % ADDRESS INTERPRETER.
  197. %
  198. COLON:    PUSH R14^,R1;
  199.     POP R1,R15^;
  200.     NEXT;
  201. %
  202. SEMI:    POP R1,R14^;
  203.     NEXT;
  204. %
  205. % TEXT INTERPRETER.
  206. %
  207. OUTINT:    WORD:    TYPE;
  208.     WORD:    QUERY;
  209.     WORD:    ASPACE;
  210.     WORD:    WORD_;
  211.     WORD:    DROP;
  212.     WORD:    SERCH1;
  213.     WORD:    SYSIF;
  214.     WORD:    #000E;
  215.     WORD:    NUMBR1;
  216.     WORD:    SYSEND;
  217.     WORD:    #0010;
  218.     WORD:    QUESTN;
  219.     WORD:    SYSWHL;
  220.     WORD:    #001A;
  221. è    WORD:    EXEC1;
  222.     WORD:    SYSWHL;
  223.     WORD:    #001C;
  224. %
  225. % TEXT INTERPRETER WORDS.
  226. %
  227. SERCH1:   CALL COLON;
  228.           WORD:   CONTXT;
  229.           WORD:   FETCH;
  230.           WORD:   FETCH;
  231.           WORD:   SEARCH;
  232.           WORD:   DUP;
  233.           WORD:   SYSIF;
  234.           WORD:   #0024;
  235.           WORD:   MOD_;
  236.           WORD:   CFETCH;
  237.           WORD:   SYSIF;
  238.           WORD:   #001C;
  239.           WORD:   DROP;
  240.           WORD:   CMPLR;
  241.           WORD:   FETCH;
  242.           WORD:   SEARCH;
  243.           WORD:   DUP;
  244.           WORD:   SYSIF;
  245.           WORD:   #0008;
  246.           WORD:   ZERO;
  247.           WORD:   SYSELS;
  248.           WORD:   #0004;
  249.           WORD:   ONE;
  250.           WORD:   ST8;
  251.           WORD:   CSTORE;
  252.           WORD:   SEMI;
  253. %
  254. EXEC1:    CALL COLON;    %EXECUTE ROUTINE
  255.           WORD:   ST8;
  256.           WORD:   CFETCH;
  257.           WORD:   ST8;
  258.           WORD:   C0SET;
  259.           WORD:   MOD_;
  260.           WORD:   CFETCH;
  261.           WORD:   EQUALS;
  262.           WORD:   SYSIF;
  263.           WORD:   #000A;
  264.           WORD:   EXECUT;
  265.           WORD:   STACK;
  266.           WORD:   SYSELS;
  267.           WORD:   #0004;
  268.           WORD:   COMMA;
  269.           WORD:   SEMI;
  270. %
  271. NUMBR1:   CALL COLON;
  272.           WORD:   NUMBER;
  273.           WORD:   SYSIF;
  274.           WORD:   #0018;
  275.           WORD:   MOD_;
  276. è          WORD:   CFETCH;
  277.           WORD:   SYSIF;
  278.           WORD:   #000A;
  279.           WORD:   LITERL;
  280.           WORD:   LITERL;
  281.           WORD:   COMMA;
  282.           WORD:   COMMA;
  283.           WORD:   ZERO;
  284.           WORD:   SYSELS;
  285.           WORD:   #0004;
  286.           WORD:   ONE;
  287.           WORD:   SEMI;
  288. %
  289. % SYSTEM SUBROUTINES.
  290. %
  291. CONVOC:   WORD (1);
  292. CURVOC:   WORD (1);
  293. %
  294. INIT:     LD R2, ^RSTMSG;
  295.           TEST BASE;
  296.           JR NZ, ABORT;
  297. %
  298.           LD R15, #5FF0;%          SET FORTH DATA STACK
  299.           LD STKPNT, R15;
  300.           LD R12, ^DP;
  301.           LD DICPNT, R12;
  302.           LD R12, ^QUIT(-6);
  303.           LD CONVOC, R12;
  304.           LD CURVOC, R12;
  305.           LD R12, ^CONVOC;
  306.           LD CONXT, R12;
  307.           LD R12, ^CURVOC;
  308.           LD CURRNT, R12;
  309.           LD BASE, #0010;  % HEX. FOR DECIMAL, USE #0A HERE.
  310.           LD R2, ^SRTMSG;
  311. %
  312. ABORT:    PUSH R15^, R2;
  313.           CLR MODE;
  314.           LD R14, #5F00;
  315.           LD R1, ^OUTINT;    % ERROR SOURCE TRIAL R10!
  316.           NEXT;
  317. %
  318. CONWRT:   CLRB RH6;
  319.           LDB RL6, R12^; % EXPECTS MESS'G ADRS IN R12.
  320.           INC R12;
  321.           LD R13, ^OUTBUF;
  322.           LDIRB R13^,R12^,R6;
  323.           LDB R13^, #04; % SET END OF STRING
  324.           LD R13, ^OUTBUF;
  325.           CALL CONOUT;
  326.           RET;
  327. %
  328. CRLF:     LD R13, ^OUTBUF;
  329.           LDB R13^, #0D;
  330.           CALL CONOUT;
  331. è          RET;
  332. %
  333. PATCH:    TESTB MODE;    % MODE=0 (EXECUTE).
  334.           JP EQ, ABORT;  % YES.
  335.           LD R8, CURRNT;
  336.           LD R9, R8^;    % RESET DICTIONARY POINTER.
  337.           LD DICPNT, R9;
  338.           INC R9, #04;   % GET LINK ADRS.
  339.           LD R9, R9^;
  340.           LD R8^, R9;
  341.           JP ABORT;
  342. %
  343. ASCWD:    PUSH R15^, #0020;        % PUSH SPACE ON STACK.
  344. ASCII:    CLR R6;   % CLR HI WORD.
  345.           DIV RR6, BASE;      % DIVIDE BY BASE.
  346.           CPB RL6,#0A;
  347.           JR LT, ASCII0;
  348.           ADDB RL6, #07; % OTHERWISE ADD OFFSET TO ALPHABET.
  349. ASCII0:   ADDB RL6, '0';
  350.           PUSH R15^,R6;
  351.           TEST R7;
  352.           JR NE, ASCII;
  353. ASCII1:   POP R6, R15^;
  354.           LDB R13^, RL6;
  355.           INC R13;
  356.           CPB RL6, #20;
  357.           JR NE, ASCII1;
  358.           RET;
  359. %
  360. %         SYSTEM WORDS (HEADERLESS)
  361. %
  362. %         SYSTEM VARIABLES.
  363. MOD_:     CALL SYS;
  364.           WORD:     #0004;
  365. %
  366. DPNT:     CALL SYS;
  367.           WORD:     #0006;
  368. %
  369. BFPNT:    CALL SYS;
  370.           WORD:     #000C;
  371. %
  372. CMPLR:    CALL SYS;
  373.           WORD:     #0010;
  374. %
  375. %         SYSTEM I/O, NUMBER CONVERSION, SEARCH.
  376. %
  377. QUESTN:   LD R12, DICPNT;
  378.           INC R12;
  379.           BITB R12^, #07;
  380.           JR EQ, $(12);
  381.           LD R2, ^OK;
  382.           PUSH R15^, R2;
  383.           NEXT;
  384.           CALL CRLF;
  385.           DEC R12;
  386. è          CALL CONWRT;
  387.           LD R2,^NOTKNO;
  388.           JP PATCH;
  389. %
  390. STACK:    CP R15, STKPNT;
  391.           JP LE, SEMI(2);
  392.           LD R15, STKPNT;
  393.           LD R2, ^STKMSG;
  394.           JP PATCH;
  395. %
  396. NUMBER:   CLR R6;
  397.           CLR R10;
  398.           LD R8, DICPNT;
  399.           LDB RH0, R8^;
  400.           INC R8;
  401.           % STEP OVER COUNT.
  402.           CPB R8^, '-';
  403.           CLRB RL0;
  404.           JR NE, $(8);
  405.           DECB RL0;
  406.           DECB RH0;
  407.           INC R8;
  408.           %
  409.           PUSH R15^, #0000;
  410. NLOOP:    LDB RL6, R8^;
  411.           SUBB RL6, #30;
  412.           JR MI, NOTNO;
  413.           CPB RL6, #0A;
  414.           JR MI, NUMB;
  415.           CPB RL6, #11;
  416.           JR MI, NOTNO;
  417.           SUBB RL6, #07;
  418.           %
  419. NUMB:     CP R6, BASE;
  420.           JR MI, $(10);
  421. NOTNO:    LD R15^, #0000;
  422.           NEXT;
  423. %
  424.           LD R11, R15^;
  425.           MULT RR10, BASE;
  426.           ADD R11, R6;
  427.           LD R15^,R11;
  428.           INC R8;
  429.           DBJNZ RH0, NLOOP;
  430.           TESTB RL0;
  431.           JR EQ, $(8);
  432.           CLR R11;
  433.           SUB R11, R15^;
  434.           LD R15^, R11;
  435.           PUSH R15^, #00FF;
  436.           NEXT;
  437. SEARCH:   LD R8, R15^;
  438.           LD R9, DICPNT;
  439.           LDB RH0, R9^;
  440.           CPB RH0, R8^;
  441. è          JR NE, NXTHDR;
  442.           CPB RH0, #04;
  443.           JR LT, NXTCH;
  444.           LDB RH0, #03;
  445. NXTCH:    INC R9;
  446.           INC R8;
  447.           LDB RL0, R9^;
  448.           CPB RL0, R8^;
  449.           JR NE, NXTHDR;
  450.           DBJNZ RH0, NXTCH;
  451.           INC R15^, #06;
  452.           PUSH R15^, #0000;
  453.           JR $(18);
  454. NXTHDR:   LD R8, R15^;
  455.           INC R8, #04;
  456.           LD R7, R8^;
  457.           LD R15^, R7;
  458.           TEST R7;
  459.           JR NE, SEARCH;
  460.           LD R15^, #0001;
  461.           NEXT;
  462. ENDC:     CALL COLON;
  463.           WORD:     COMMA;
  464.           WORD:     HERE;
  465.           WORD:     SWAP_;
  466.           WORD:     MINUS;
  467.           WORD:     COMMA;
  468.           WORD:     SEMI;
  469. %
  470. DOC:      CALL COLON;
  471.           WORD:     COMMA;
  472.           WORD:     HERE;
  473.           WORD:     SEMI;
  474. %
  475. BUILD:    CALL COLON;
  476.           WORD:     ENTRY;
  477.           WORD:     ASPACE;
  478.           WORD:     WORD_;
  479.           WORD:     CRNT;
  480.           WORD:     FETCH;
  481.           WORD:     STORE;
  482.           WORD:     LITERL;
  483.           WORD:     #0004;
  484.           WORD:     DPNT;
  485.           WORD:     PSTORE;
  486.           WORD:     COMMA;
  487.           WORD:     LITERL;
  488.           WORD:     #5F00;
  489.           WORD:     COMMA;
  490.           WORD:     LITERL;
  491.           WORD:     COLON;
  492.           WORD:     COMMA;
  493.           WORD:     SEMI;
  494. %
  495. ENTRY:    CALL COLON;
  496. è          WORD:     CRNT;
  497.           WORD:     FETCH;
  498.           WORD:     FETCH;
  499.           WORD:     SEMI;
  500. %
  501. CAXCLM:   CALL COLON;
  502.           WORD:     ENTRY;
  503.           WORD:     LITERL;
  504.           WORD:     #0008;
  505.           WORD:     PLUS;
  506.           WORD:     STORE;
  507.           WORD:     SEMI;
  508. %
  509. SCODE:    CALL COLON;
  510.           WORD:     RFROM;
  511.           WORD:     CAXCLM;
  512.           WORD:     SEMI;
  513. %
  514. % SYSTEM DIRECTIVES: IMPLMT CONTROL STRUCTRS.
  515. %
  516. SYSIF:    POP R8, R15^;
  517.           TEST R8;
  518.           JR EQ, SYSELS;
  519.           INC R1, #02;
  520.           NEXT;
  521. %
  522. SYSELS:   LD R6, R1^;
  523.           ADD R1,R6;
  524.           NEXT;
  525. %
  526. SYSEND:   POP R8, R15^;
  527.           TEST R8;
  528.           JR EQ, SYSWHL;
  529.           INC R1, #02;
  530.           NEXT;
  531. %
  532. SYSWHL:   LD R6,R1^;
  533.           SUB R1,R6;
  534.           NEXT;
  535. %
  536. LITERL:   PUSH R15^, R1^;
  537.           INC R1, #02;
  538.           NEXT;
  539. %
  540. SYSPLP:   POP R8, R14^;
  541.           POP R7, R15^;
  542.           JR LP;
  543. %
  544. SYSLOP:   POP R8, R14^;
  545.           LD R7, #1;
  546. LP:       ADD R8, R7;
  547.           CP R8, R14^;
  548.           PUSH R14^, R8;
  549.           JR MI, SYSWHL;
  550.           POPL RR8, R14^;
  551. è          INC R1,#2;
  552.           NEXT;
  553. %
  554. SYSDO:    POPL RR8, R15^;
  555.           PUSHL R14^, RR8;
  556.           NEXT;
  557. SYS:      LD R8, ^SYSTEM;
  558.           POP R2, R15^;
  559.           ADD R8, R2^;
  560.           PUSH R15^, R8;
  561.           NEXT;
  562. %
  563. % DICTIONARY WORD SETS
  564. %
  565. % MEMORY REFERENCE WORD SET
  566. %
  567.           HEADER 1, '@XX',6;
  568. FETCH:    LD R6, R15^;
  569.           LD R6,R6^;
  570.           LD R15^, R6;
  571.           NEXT;
  572.           HEADER 2,'C@X',^FETCH; % C@
  573. CFETCH:   LD R6,R15^;
  574.           LDB RL5, R6^;
  575.           EXTSB R5;
  576.           LD R15^, R5;
  577.           NEXT;
  578.        HEADER  1, '!XX', ^CFETCH;    % C!
  579. STORE:      POPL RR6, R15^;
  580.       LD R6^, R7;
  581.       NEXT;
  582.  
  583.          HEADER 2, 'C!X', ^STORE;
  584. CSTORE:   POPL RR6, R15^;
  585.           LDB R6^, RL7;
  586.           NEXT;
  587.       HEADER  2, '+!X', ^CSTORE;
  588. PSTORE:   POPL RR6, R15^;
  589.         ADD R7 , R6^;
  590.       LD R6^ , R7;
  591.       NEXT;
  592.           HEADER 1, '?XX', ^PSTORE;
  593. QMARK:    POP R6, R15^;
  594.           LD R7, R6^;
  595.           LD R13, ^OUTBUF;
  596.           CALL ASCWD;
  597.           LDB R13^, #04;
  598.           LD R13, ^OUTBUF;
  599.           CALL CONOUT;
  600.           NEXT;
  601.           HEADER 4, 'MOV', ^QMARK;
  602. MOVE:     POPL RR6, R15^;
  603.           POP R5, R15^;
  604.           BIT R6, #0F;
  605.           JR NE, $(6);
  606.           LDIR R7^, R5^, R6;
  607. è          NEXT;
  608.           HEADER 5, 'CMO', ^MOVE;
  609. CMOVE:    POPL RR6, R15^;
  610.           POP R5, R15^;
  611.           BIT R6, #0F;
  612.           JR NE, $(6);
  613.           LDIRB R7^, R5^, R6;
  614.           NEXT;
  615.           HEADER 4, 'FIL', ^CMOVE;
  616. FILL:     POPL RR6, R15^;
  617.           POP R5, R15^;
  618.           BIT R7, #0F;
  619.           JR NE, $(8);
  620.           LDB R5^, RL6;
  621.           INC R5;
  622.           DJNZ R7, $(-4);
  623.           NEXT;
  624.           HEADER 2, 'P!X', ^FILL;
  625. POUT:     POP R2, R15^;
  626.           POP R3, R15^;
  627.           OUT R2, R3;
  628.           NEXT;
  629.           HEADER 2, 'P@X', ^POUT;
  630. P@:       POP R2, R15^;
  631.           IN R2, R2;
  632.           PUSH R15^, R2;
  633.           NEXT;
  634.           %
  635. % COMPARISON WORD SET.
  636. %
  637.           HEADER 3, 'NOT', ^P@;
  638. N_T:      POP R12, R15^;
  639.           AND R12, R12;
  640.           CLR R12;
  641.           JR NZ, CHANGE;
  642.           INC R12;
  643. CHANGE:   PUSH R15^, R12;
  644.           NEXT;
  645.           HEADER 1, '=XX', ^N_T;
  646. EQUALS:   POP R6,R15^;
  647.           CP R6, R15^;
  648.           CLR R15^;
  649.           JR NE, $(4);
  650.           INC R15^;
  651.           NEXT;
  652.           HEADER 2, '0=X', ^EQUALS;
  653. EQUAL0:   JR N_T;
  654.           HEADER 1, '<XX', ^EQUAL0;
  655. LESS:     POP R6,R15^;
  656.           CP R6, R15^;
  657.           CLR R15^;
  658.           JR LE, $(4);
  659.           INC R15^;
  660.           NEXT;
  661.           HEADER 1, '>XX', ^LESS;
  662. èGREATR:   POP R6, R15^;
  663.           CP R6, R15^;
  664.           CLR R15^;
  665.           JR GE, $(4);
  666.           INC R15^;
  667.           NEXT;
  668. %
  669. % ARITH & LOGIC WORD SET.
  670. %
  671.           HEADER 1, '+XX', ^GREATR;
  672. PLUS:     POP R6, R15^;
  673.           ADD R6, R15^;
  674.           LD R15^, R6;
  675.           NEXT;
  676.           HEADER 1, '-XX', ^PLUS;
  677. MINUS:    POPL RR6, R15^;
  678.           SUB R7, R6;
  679.           PUSH R15^, R7;
  680.           NEXT;
  681.           HEADER 2, '1+X', ^MINUS;
  682. PLUS1:    INC R15^;
  683.           NEXT;
  684.           HEADER 2, '1-X', ^PLUS1;
  685. MINUS1:   DEC R15^;
  686.           NEXT;
  687.           HEADER 2, '2+X', ^MINUS1;
  688. PLUS2:    INC R15^, #2;
  689.           NEXT;
  690.           HEADER 2, '2-X', ^PLUS2;
  691. MINUS2:   DEC R15^, #2;
  692.           NEXT;
  693.           HEADER 1, '*XX', ^MINUS2;
  694. TIMES:    POPL RR6, R15^;
  695.           LD R5, R6;
  696.           MULT RR6, R5;
  697.           PUSH R15^, R7;
  698.           NEXT;
  699.           HEADER 1, '/XX', ^TIMES;
  700. DIVIDE:   POPL RR6, R15^;
  701.           LD R5, R6;
  702.           CLR R6;
  703.           DIV RR6, R5;
  704.           PUSH R15^, R7;
  705.           NEXT;
  706.           HEADER 3, 'MOD', ^DIVIDE;
  707. MOD0:     POPL RR6, R15^;
  708.           LD R5,R6;
  709.           CLR R6;
  710.           DIV RR6, R5;
  711.           PUSH R15^, R6;
  712.           NEXT;
  713.           HEADER 4, '/MO', ^MOD0;
  714. DIVMOD:   POPL RR6, R15^;
  715.           LD R5, R6;
  716.           CLR R6;
  717. è          DIV RR6, R5;
  718.           EX R6, R7;
  719.           PUSHL R15^, RR6;
  720.           NEXT;
  721.           HEADER 6, 'NEG', ^DIVMOD;
  722. NEGATE:   NEG R15^;
  723.           NEXT;
  724.           HEADER 3, 'ABS', ^NEGATE;
  725. ABS:      BIT R15^, #0F;
  726.           JR NE, NEGATE;
  727.           NEXT;
  728.           HEADER 3, 'AND', ^ABS;
  729. AND0:     POP R6, R15^;
  730.           AND R6, R15^;
  731.           LD R15^, R6;
  732.           NEXT;
  733.           HEADER 2, 'ORX',^AND0;
  734. OR0:      POP R6,R15^;
  735.           OR R6, R15^;
  736.           LD R15^, R6;
  737.           NEXT;
  738. %
  739. % STACK MANIPULATION
  740. %
  741.           HEADER 2, 'R>X', ^OR0;
  742. RFROM:    POP R6, R14^;
  743.           PUSH R15^, R6;
  744.           NEXT;
  745.           HEADER 2, '>RX', ^RFROM;
  746. TOR:      POP R6, R15^;
  747.           PUSH R14^, R6;
  748.           NEXT;
  749.           HEADER 2, 'R@X', ^TOR;
  750. RFETCH:   PUSH R15^, R14^;
  751.           NEXT;
  752.           HEADER 3, 'DUP', ^RFETCH;
  753. DUP:      PUSH R15^, R15^;
  754.           NEXT;
  755.           HEADER 4, 'DRO', ^DUP;
  756. DROP:     POP R6, R15^;
  757.           NEXT;
  758.           HEADER 4, 'SWA', ^DROP;
  759. SWAP_:    POP R6, R15^;
  760.           EX R6, R15^;
  761.           PUSH R15^, R6;
  762.           NEXT;
  763.           HEADER 4, 'OVE', ^SWAP_;
  764. OVER:     INC R15, #2; % MODIFIED FROM ODETTE'S VERSION.
  765.           LD R2, R15^;
  766.           DEC R15, #2;
  767.           PUSH R15^, R2;
  768.           NEXT;
  769.           HEADER 3, 'ROT', ^OVER;
  770. ROT:      POPL RR6, R15^;
  771.           POP R5, R15^;
  772. è          PUSHL R15^, RR6;
  773.           PUSH R15^, R5;
  774.           NEXT;
  775.           HEADER 4, 'ROL', ^ROT;
  776. ROLL:     POP R4, R15^;
  777.           DEC R4;
  778.           LD R6, R15;
  779.           ADD R6, R4;
  780.           ADD R6, R4;
  781.           LD R7, R6^;
  782.           LD R5, R6;
  783.           DEC R5, #2;
  784.           LDDR R6^, R5^, R4;
  785.           LD R15^, R7;
  786.           NEXT;
  787.           HEADER 4, 'PIC', ^ROLL;
  788. PICK:     POP R4, R15^;
  789.           DEC R4;
  790.           LD R6, R15;
  791.           ADD R6, R4;
  792.           ADD R6, R4;
  793.           PUSH R15^, R6^;
  794.           NEXT;
  795.           HEADER 4, '?DU', ^PICK;
  796. QDUP:     TEST R15^;
  797.           JR EQ, $(4);
  798.           PUSH R15^, R15^;
  799.           NEXT;
  800.           HEADER 2, 'CRX', ^QDUP;
  801. CR:       LD R13, ^OUTBUF;
  802.           LDB R13^, #0D;
  803.           CALL CONOUT;
  804.           NEXT;
  805.           HEADER 4, 'EMI', ^CR;
  806. EMIT:     LD R13, ^OUTBUF;
  807.           POP R6, R15^;
  808.           LDB R13^, RL6;
  809.           LDB NUM1(R13), #04;
  810.           CALL CONOUT;
  811.           NEXT;
  812.           HEADER 5, 'SPA', ^EMIT;
  813. SPACE:    LD R13, ^OUTBUF;
  814.           LD R13^, #2004; % SET SPACE & END-OF-STRING
  815.           CALL CONOUT;
  816.           NEXT;
  817.           HEADER 4, 'TYP', ^SPACE;
  818. TYPE:     POP R12, R15^;
  819.           CALL CONWRT;
  820.           NEXT;
  821.           HEADER 4, 'WOR', ^TYPE;
  822. WORD_:    LD R8, BUFPNT;
  823.           LD R9, DICPNT;
  824.           POP R6, R15^;
  825.           CPB RL6, #20;
  826.           JR NE, TOK;
  827. èIGNLB:    CPB R8^, #20; % IGNORE SPACES IN BUFFER
  828.           JR NE, TOK;
  829.           INC R8;
  830.           JR IGNLB;
  831. TOK:      PUSH R15^, R8;
  832. COUNT:    INCB RH6;
  833.           INC R8;
  834.           CPB RL6, R8^;
  835.           JR EQ, ENDTOK; % FIND NEXT SEPARATOR
  836.           CPB R8^, TERM; % COMPARE W/ TERMINATOR
  837.           JR NE, COUNT;
  838.           DEC R8;
  839. ENDTOK:   INC R8;
  840.           LD BUFPNT, R8;
  841.           LDB R9^, RH6;
  842.           LD R8, R15^;
  843.           LD R15^, R9;
  844.           INC R9;
  845.           LDB RL6, RH6;
  846.           CLRB RH6;
  847.           LDIRB R9^, R8^, R6;
  848.           NEXT;
  849.           HEADER 5, 'QUE', ^WORD_;
  850. QUERY:    CALL CONIN;
  851.           NEXT;
  852. %
  853. % MISC WORDS
  854. %
  855.           HEADER 4, 'BAS', ^QUERY;
  856. BASE0:    CALL SYS;
  857.           WORD:     #0002;
  858.           HEADER 1, '0XX', ^BASE0;
  859. ZERO:     PUSH R15^, #0;
  860.           NEXT;
  861.           HEADER 1, '1XX', ^ZERO;
  862. ONE:      PUSH R15^, #1;
  863.           NEXT;
  864.           HEADER 1, '2XX', ^ONE;
  865. TWO:      PUSH R15^, #2;
  866.           NEXT;
  867.           HEADER 6, 'ASP', ^TWO;
  868. ASPACE:   PUSH R15^, #20;
  869.           NEXT;
  870.           HEADER 1, '.XX', ^ASPACE;
  871. PERIOD:   POP R7, R15^;
  872.           LD R13, ^OUTBUF;
  873.           CALL ASCWD;
  874.           LDB R13^, #04;
  875.           LD R13, ^OUTBUF;
  876.           CALL CONOUT;
  877.           NEXT;
  878.           HEADER 4, '2DU', ^PERIOD;
  879. DUP2:     PUSH R15^, R15^;
  880.           PUSH R15^, R15^;
  881.           NEXT;
  882. è          HEADER 5, '2DR', ^DUP2;
  883. DROP2:    POPL RR6, R15^;
  884.           NEXT;
  885.           HEADER 5, 'C0S', ^DROP2;
  886. C0SET:    POP R6, R15^;
  887.           CLRB R6^;
  888.           NEXT;
  889.           HEADER 5, 'C1S', ^C0SET;
  890. C1SET:    POP R6,R15^;
  891.           LDB R6^, #01;
  892.           NEXT;
  893. %
  894. % VOCABULARIES.
  895. %
  896.           HEADER 7, 'CON', ^C1SET;
  897. CONTXT:   CALL SYS;
  898.           WORD:     #0008;
  899.           HEADER 7, 'CUR', ^CONTXT;
  900. CRNT:     CALL SYS;
  901.           WORD:     #000A;
  902.           HEADER 11, 'DEF', ^CRNT;
  903. DEFN:     CALL COLON;
  904.           WORD:   CRNT;
  905.           WORD:   FETCH;
  906.           WORD:   CONTXT;
  907.           WORD:   STORE;
  908.           WORD:   SEMI;
  909.           HEADER 4, 'FIN', ^DEFN;
  910. FIND:     CALL COLON;
  911.           WORD:    ASPACE;
  912.       WORD:    WORD_;
  913.       WORD:    DROP;
  914.       WORD:    CONTXT;
  915.       WORD:    FETCH;
  916.       WORD:    FETCH;
  917.       WORD:    SEARCH;
  918.       WORD:    SYSIF;
  919.       WORD:    #0004;
  920.       WORD:    ZERO;
  921.       WORD:    SEMI;
  922.           HEADER 6, 'FOR', ^FIND;
  923. FORGET:   CALL COLON;
  924.       WORD:    ASPACE;
  925.       WORD:    WORD_;
  926.       WORD:    DROP;
  927.       WORD:    CRNT;
  928.       WORD:    FETCH;
  929.       WORD:    FETCH;
  930.       WORD:    SEARCH;
  931.       WORD:    SYSIF;
  932.       WORD:    #0004;
  933.       WORD:    QUESTN;
  934.       WORD:    DUP;
  935.       WORD:    TWO;
  936.       WORD:    MINUS;
  937. è      WORD:    FETCH;
  938.       WORD:    CRNT;
  939.       WORD:    FETCH;
  940.       WORD:    STORE;
  941.       WORD:    LITERL;
  942.       WORD:    #0006;
  943.       WORD:    MINUS;
  944.       WORD:    DPNT;
  945.       WORD:    STORE;
  946.       WORD:    SEMI;
  947. %
  948. %         DEFINING WORDS, COMPILER WORDS, CONTROL WORDS
  949. %
  950.           BYTE:     #01;
  951.           BYTE:     ',  ';
  952.           WORD:     ^FORGET(-6);
  953. COMMA:    POP R6, R15^;
  954.           LD R7, DICPNT;
  955.           LD R7^, R6;
  956.           INC DICPNT, #2;
  957.           NEXT;
  958.           HEADER 5, 'ALL', ^COMMA;
  959. ALLOT:    POP R6, R15^;
  960.           ADD R6, DICPNT;
  961.           LD DICPNT, R6;
  962.           NEXT;
  963.           HEADER 5, 'LEA', ^ALLOT;
  964. LEAVE:    LD R12, R14^;
  965.           LD R14^(2), R12;
  966.           NEXT;
  967.           HEADER 1, 'IXX', ^LEAVE;
  968. I:        PUSH R15^, R14^;
  969.           NEXT;
  970.           HEADER 1, 'JXX', ^I;
  971. J:        PUSH R15^, NUM4(R14);
  972.           NEXT;
  973.           HEADER 5, 'STA', ^J;
  974. ST8:      CALL SYS; % STATE
  975.           WORD:     #0005;
  976.           HEADER 4, 'HER', ^ST8;
  977. HERE:     PUSH R15^, DICPNT;
  978.           NEXT;
  979.           HEADER 7, 'EXE', ^HERE;
  980. EXECUT:   POP R2, R15^;
  981.           JP R2^;
  982.           HEADER 6, 'CRE', ^EXECUT;
  983. CREATE:   CALL COLON;
  984.           WORD:     ZERO;
  985.           WORD:     CNSTNT;
  986.           WORD:     SEMI;
  987.           HEADER 5, 'DOE', ^CREATE;
  988. DOES:     CALL COLON;
  989.           WORD:    RFROM;
  990.           WORD:    ENTRY;
  991.           WORD:    LITERL;
  992. è          WORD:    #000A;
  993.           WORD:    PLUS;
  994.           WORD:    STORE;
  995.           WORD:    SCODE;
  996.           PUSH R14^, R1;
  997.           POP R2, R15^;
  998.           POP R1, R2^;
  999.           PUSH R15^, R2;
  1000.           NEXT;
  1001.           HEADER 8, 'VAR', ^DOES;
  1002. VARIBL:   CALL COLON;
  1003.           WORD:    CNSTNT;
  1004.           WORD:    SCODE;
  1005.           NEXT;
  1006.           HEADER 8, 'CON', ^VARIBL;
  1007. CNSTNT:   CALL COLON;
  1008.           WORD:    BUILD;
  1009.           WORD:    COMMA;
  1010.           WORD:    SCODE;
  1011.           POP R2, R15^;
  1012.           PUSH R15^, R2^;
  1013.           NEXT;
  1014.           HEADER 10, 'VOC', ^CNSTNT;
  1015. VOCAB:    CALL COLON;
  1016.           WORD:    CREATE;
  1017.           WORD:    ENTRY;
  1018.           WORD:    COMMA;
  1019.           WORD:    DOES;
  1020.           WORD:    CONTXT;
  1021.           WORD:    STORE;
  1022.           WORD:    SEMI;
  1023.           HEADER 1, ':XX', ^VOCAB;
  1024. COLON1:   CALL COLON;
  1025.           WORD:    CRNT;
  1026.           WORD:    FETCH;
  1027.           WORD:    CONTXT;
  1028.           WORD:    STORE;
  1029.           WORD:    BUILD;
  1030.           WORD:    MOD_;
  1031.           WORD:    C1SET;
  1032.           WORD:    SEMI;
  1033. %
  1034. % COMPILER VOCABULARY.
  1035. %
  1036.           HEADER 2, 'DOX', 6;
  1037. DO_:      CALL COLON;
  1038.           WORD:    LITERL;
  1039.           WORD:    SYSDO;
  1040.           WORD:    DOC;
  1041.           WORD:    SEMI;
  1042.           HEADER 4, 'LOO', ^DO_;
  1043. LOOP:     CALL COLON;
  1044.           WORD:    LITERL;
  1045.           WORD:    SYSLOP;
  1046.           WORD:    ENDC;
  1047. è          WORD:    SEMI;
  1048.           HEADER 5, '+LO', ^LOOP;
  1049. PLOOP:    CALL COLON;
  1050.           WORD:    LITERL;
  1051.           WORD:    SYSPLP;
  1052.           WORD:    ENDC;
  1053.           WORD:    SEMI;
  1054.           HEADER 5, 'BEG', ^PLOOP;
  1055. BEGIN_:   CALL COLON;
  1056.           WORD:    HERE;
  1057.           WORD:    SEMI;
  1058.           HEADER 5, 'UNT', ^BEGIN_;
  1059. UNTIL_:   CALL COLON;
  1060.           WORD:    LITERL;
  1061.           WORD:    SYSEND;
  1062.           WORD:    ENDC;
  1063.           WORD:    SEMI;
  1064.           HEADER 5, 'WHI', ^UNTIL_;
  1065. WHILE:    CALL COLON;
  1066.           WORD:    IF_;
  1067.           WORD:    SEMI;
  1068.           HEADER 6, 'REP', ^WHILE;
  1069. REPEAT:   CALL COLON;
  1070.           WORD:    SWAP_;
  1071.           WORD:    LITERL;
  1072.           WORD:    SYSWHL;
  1073.           WORD:    ENDC;
  1074.           WORD:    THEN_;
  1075.           WORD:    SEMI;
  1076.           HEADER 2, 'IFX', ^REPEAT;
  1077. IF_:      CALL COLON;
  1078.           WORD:    LITERL;
  1079.           WORD:    SYSIF;
  1080.           WORD:    DOC;
  1081.           WORD:    ZERO;
  1082.           WORD:    COMMA;
  1083.           WORD:    SEMI;
  1084.           HEADER 4, 'THE', ^IF_;
  1085. THEN_:    CALL COLON;
  1086.           WORD:    HERE;
  1087.           WORD:    OVER;
  1088.           WORD:    MINUS;
  1089.           WORD:    SWAP_;
  1090.           WORD:    STORE;
  1091.           WORD:    SEMI;
  1092.           HEADER 4, 'ELS', ^THEN_;
  1093. ELSE_:    CALL COLON;
  1094.           WORD:    LITERL;
  1095.           WORD:    SYSELS;
  1096.           WORD:    DOC;
  1097.           WORD:    ZERO;
  1098.           WORD:    COMMA;
  1099.           WORD:    SWAP_;
  1100.           WORD:    THEN_;
  1101.           WORD:    SEMI;
  1102. è          HEADER 1, ';XX', ^ELSE_;
  1103. SEMI1:    CALL COLON; % FIRST ENTRY OF COMPILER DIRECTIVES
  1104.           WORD:     LITERL;
  1105.           WORD:     SEMI;
  1106.           WORD:     COMMA;
  1107.           WORD:     MOD_;
  1108.           WORD:     C0SET;
  1109.           WORD:     SEMI;
  1110. %
  1111. % The following words were not part of the original FORTH 
  1112. % in Dr. Dobbs Journal ( op. cit.)
  1113. %
  1114.       HEADER 2, 'JXR', ^COLON1;
  1115. JXVAR:      CALL VARIBL(8);%Nearest NEXT.
  1116.       WORD:    #0000;% VALUE OF THE VARIABLE 'JX'
  1117. HEADER    3,'NUM', ^JXVAR;
  1118. NUMBR:    CALL COLON;% Display numbers with leading zero's
  1119.           WORD:    DUP;
  1120.           WORD:    LITERL;
  1121.           WORD:    #8000;
  1122.           WORD:    AND0;
  1123.           WORD:    SYSIF;
  1124.           WORD:    #0008;
  1125.           WORD:    PERIOD;
  1126.           WORD:    SYSELS;
  1127.           WORD:    #0058;
  1128.           WORD:    DUP;
  1129.           WORD:    LITERL;
  1130.           WORD:    #0FFF;
  1131.           WORD:    GREATR;
  1132.           WORD:    SYSIF;
  1133.           WORD:    #0008;
  1134.           WORD:    PERIOD;
  1135.           WORD:    SYSELS;
  1136.           WORD:    #0046;
  1137.           WORD:    DUP;
  1138.           WORD:    LITERL;
  1139.           WORD:    #00FF;
  1140.           WORD:    GREATR;
  1141.           WORD:    SYSIF;
  1142.           WORD:    #000E;
  1143.           WORD:    LITERL;
  1144.           WORD:    #0030;
  1145.           WORD:    EMIT;
  1146.           WORD:    PERIOD;
  1147.           WORD:    SYSELS;
  1148.           WORD:    #002E;
  1149.           WORD:    DUP;
  1150.           WORD:    LITERL;
  1151.           WORD:    #000F;
  1152.           WORD:    GREATR;
  1153.           WORD:    SYSIF;
  1154.           WORD:    #0012;
  1155.           WORD:    LITERL;
  1156.           WORD:    #0030;
  1157. è          WORD:    DUP;
  1158.           WORD:    EMIT;
  1159.           WORD:    EMIT;
  1160.           WORD:    PERIOD;
  1161.           WORD:    SYSELS;
  1162.           WORD:    #0012;
  1163.           WORD:    LITERL;
  1164.           WORD:    #0030;
  1165.           WORD:    DUP;
  1166.           WORD:    DUP;
  1167.           WORD:    EMIT;
  1168.           WORD:    EMIT;
  1169.           WORD:    EMIT;
  1170.           WORD:    PERIOD;
  1171.           WORD:    SEMI;
  1172. HEADER    3, 'DMP', ^NUMBR;% For use by memory dump word.
  1173. DMPLP:    CALL COLON;
  1174.           WORD:    LITERL;
  1175.           WORD:    #0010;
  1176.           WORD:    ZERO;
  1177.           WORD:    SYSDO;
  1178.           WORD:    JXVAR;
  1179.           WORD:    FETCH;
  1180.           WORD:    I;
  1181.           WORD:    PLUS;
  1182.           WORD:    FETCH;
  1183.           WORD:    NUMBR;
  1184.           WORD:    TWO;
  1185.           WORD:    SYSPLP;
  1186.           WORD:    #0010;
  1187.           WORD:    SEMI;
  1188. HEADER    4, 'DUM', ^DMPLP;% Mem. dump  word ( addr lgth ---; )
  1189. DUMP:    CALL COLON;
  1190.           WORD:    CR;
  1191.           WORD:    OVER;
  1192.           WORD:    PLUS;
  1193.           WORD:    PLUS1;
  1194.           WORD:    SWAP_;
  1195.           WORD:    SYSDO;
  1196.           WORD:    I;
  1197.           WORD:    DUP;
  1198.           WORD:    JXVAR;
  1199.           WORD:    STORE;
  1200.           WORD:    NUMBR;
  1201.           WORD:    SPACE;
  1202.           WORD:    SPACE;
  1203.           WORD:    DMPLP;
  1204.           WORD:    CR;
  1205.           WORD:    LITERL;
  1206.           WORD:    #0010;
  1207.           WORD:    SYSPLP;
  1208.           WORD:    #0018;
  1209.           WORD:    SEMI;
  1210. HEADER    9, '?TE', ^DUMP;%     ?TERMINAL word
  1211. FTER:    CALL COLON;
  1212. è          WORD:    LITERL;
  1213.           WORD:    #1002;% READ TERMINAL STATUS BYTE.
  1214.           WORD:    P@;
  1215.           WORD:    ONE;
  1216.           WORD:    AND0;
  1217.           WORD:    SEMI;
  1218. HEADER    4, 'QUI', ^FTER;% QUIT word
  1219. QUIT:    CALL COLON;
  1220.           WORD:    FTER;
  1221.           WORD:    SYSIF;
  1222.           WORD:    #0004;
  1223.           WORD:    LEAVE;
  1224.           WORD:    SEMI;
  1225. %
  1226.  
  1227. DP:       WORD(2);% Initial dictionary pointer, cold start.
  1228. %
  1229. %
  1230.           END.
  1231.