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