home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG023.ARK / ASSEMBL.DOC next >
Text File  |  1984-04-29  |  13KB  |  542 lines

  1.  
  2.  
  3.  
  4. ***************************************************************************
  5. ** COPYRIGHT (C) MASSACHUSETTS INSTITUTE OF TECHNOLOGY AND HARVARD       **
  6. ** UNIVERSITY, BIOMEDICAL ENGINEERING CENTER 1977.  ALL RIGHTS RESERVED. **
  7. ***************************************************************************
  8.  
  9. THE STOIC ASSEMBLER FOR THE INTEL 8080
  10. J. SACHS 2/2/77
  11.  
  12. CODE DEFINITIONS
  13.  
  14.     STOIC PROVIDES THE USER WITH A MEANS OF DEFINING
  15. A NEW WORD IN TERMS OF THE ASSEMBLY LANGUAGE FOR THE
  16. PARTICULAR MACHINE ON WHICH IT IS EXECUTING.  THIS IS
  17. PROVIDED BY THE ASSEMBLER AND THE CODE DEFINITION.
  18.  
  19. 'NAME CODE< A1 A2 ... >
  20.  
  21.     HERE A1, A2, ... ARE WORDS DEFINED WITHIN THE
  22. ASSEMBLER AND "NAME" IS THE NAME OF THE WORD BEING
  23. DEFINED.  AS WITH EVERYTHING ELSE IN STOIC, THE
  24. ASSEMBLER USES REVERSE POLISH NOTATION, GIVING THE
  25. ADDRESSES AND ACCUMULATOR SPECIFIERS BEFORE THE
  26. OPCODE.
  27.  
  28.     THE ASSEMBLER WORDS DO NOT EXECUTE MACHINE
  29. INSTRUCTIONS DIRECTLY; THEY MERELY CAUSE INSTRUCTIONS
  30. TO BE ASSEMBLED ONTO THE END OF THE DICTIONARY.  THUS
  31. BEFORE MACHINE LANGUAGE INSTRUCTIONS CAN BE EXECUTED
  32. FROM THE KEYBOARD THEY MUST FIRST BE ASSEMBLED INTO A
  33. CODE DEFINITION.
  34.  
  35. ADDRESSES
  36.  
  37.     AN ADDRESS IS NORMALLY THE NAME OF A WORD, OR AN
  38. ABSOLUTE LOCATION.  AN ADDRESS MAY HOWEVER BE ANY EXPRESSION
  39. WHICH EVALUATES TO AN INTEGER.
  40.  
  41. ACCUMULATORS
  42.  
  43.     WITHIN THE ASSEMBLER, THE NORMAL INTEL ACCUMULATOR
  44. NAMES (A,B,C,D,E,H,L,M,SP,PSW) ARE USED TO SPECIFY 8080
  45. REGISTERS.
  46.  
  47. INSTRUCTIONS WITHOUT ADDRESS OR ACCUMULATOR
  48.  
  49.     INTEL        STOIC
  50.  
  51.     NOP        NOP,
  52.     HLT        HLT,
  53.     RLC        RLC,
  54.     RRC        RRC,
  55.     RAL        RAL,
  56.     RAR        RAR,
  57.     DAA        DAA,
  58.     CMA        CMA,
  59.     STC        STC,
  60.     CMC        CMC,
  61.     RET        RET,
  62.     RNZ        RNZ,
  63.     RZ        RZ,
  64.     RNC        RNC,
  65.     RC        RC,
  66.     RPO        RPO,
  67.     RPE        RPE,
  68.     RP        RP,
  69.     RM        RM,
  70.     XTHL        XTHL,
  71.     PCHL        PCHL,
  72.     SPHL        SPHL,
  73.     XCHG        XCHG,
  74.     DI        DI,
  75.     EI        EI,
  76.  
  77.  
  78. INSTRUCTIONS WITH ACCUMULATOR
  79.  
  80.     INTEL        STOIC
  81.  
  82.     RST N        N   RST,
  83.     DAD ACC        ACC DAD,
  84.     DCX ACC        ACC DCX,
  85.     STAX ACC    ACC STAX,
  86.     LDAX ACC    ACC LDAX,
  87.     INR ACC        ACC INR,
  88.     DCR ACC        ACC DCR,
  89.     POP ACC        ACC POP,
  90.     PUSH ACC    ACC PUSH,
  91.     INX ACC        ACC INX,
  92.  
  93.  
  94. INSTRUCTIONS WITH AN ACCUMULATOR AND A 16-BIT VALUE
  95.  
  96.     INTEL        STOIC
  97.  
  98.     LXI ACC,VALUE    VALUE ACC LXI,
  99.  
  100.  
  101. INSTRUCTIONS WITH TWO ACCUMULATORS
  102.  
  103.     INTEL        STOIC
  104.  
  105.     MOV AC1,AC2    AC2 AC1 MOV,
  106.  
  107. INSTRUCTIONS WITH AN ADDRESS
  108.  
  109.     INTEL        STOIC
  110.  
  111.     SHLD ADR    ADR SHLD,
  112.     LHLD ADR    ADR LHLD,
  113.     STA ADR        ADR STA,
  114.     LDA ADR        ADR LDA,
  115.     JMP ADR        ADR JMP,
  116.     CALL ADR    ADR CALL,
  117.     JNZ ADR        ADR JNZ,
  118.     JZ ADR        ADR JZ,
  119.     JNC ADR        ADR JNC,
  120.     JC ADR        ADR JC,
  121.     JPO ADR        ADR JPO,
  122.     JPE ADR        ADR JPE,
  123.     JP ADR        ADR JP,
  124.     JM ADR        ADR JM,
  125.     CNZ ADR        ADR CNZ,
  126.     CZ ADR        ADR CZ,
  127.     CNC ADR        ADR CNC,
  128.     CC ADR        ADR CC,
  129.     CPO ADR        ADR CPO,
  130.     CPE ADR        ADR CPE,
  131.     CP ADR        ADR CP,
  132.     CM ADR        ADR CM,
  133.     
  134.  
  135. INSTRUCTIONS WITH ONE ACCUMULATOR AND ONE 8-BIT VALUE
  136.  
  137.     INTEL        STOIC
  138.  
  139.     MVI ACC,VALUE    VALUE ACC MVI,
  140.  
  141.  
  142. INSTRUCTIONS WITH ONE ACCUMULATOR
  143.  
  144.     INTEL        STOIC
  145.  
  146.     ADD ACC        ACC ADD,
  147.     ADC ACC        ACC ADC,
  148.     SUB ACC        ACC SUB,
  149.     SBB ACC        ACC SBB,
  150.     ANA ACC        ACC ANA,
  151.     XRA ACC        ACC XRA,
  152.     ORA ACC        ACC ORA,
  153.     CMP ACC        ACC CMP,
  154.  
  155. INSTRUCTIONS WITH ONE 8-BIT VALUE
  156.  
  157.     INTEL        STOIC
  158.  
  159.     ADI VALUE    VALUE ADI,    
  160.     ACI VALUE    VALUE ACI,
  161.     SUI VALUE    VALUE SUI,
  162.     SBI VALUE    VALUE SBI,
  163.     ANI VALUE    VALUE ANI,
  164.     XRI VALUE    VALUE XRI,
  165.     ORI VALUE    VALUE ORI,
  166.     CPI VALUE    VALUE CPI,
  167.     OUT N        N OUT,
  168.     IN N        N IN,
  169.  
  170. EXAMPLES:
  171.  
  172. STOIC ASSEMBLER        INTEL ASSEMBLER
  173.  
  174. HLT,            HLT
  175. 0 H LXI,        LXI H,0
  176. A B MOV,        MOV B,A
  177. M CPI,            CPI M
  178. H DCX,            DCX H
  179. . JMP,            JMP $
  180.  
  181. FORWARD AND BACKWARD JUMPS
  182.  
  183.     SINCE THE STOIC ASSEMBLER HAS NO LABELS, SPECIAL
  184. ASSEMBLER WORDS ARE USED TO CONTROL FORWARD AND BACKWARD
  185. JUMPS.
  186.  
  187. BACKWARD JUMPS ARE ACCOMPLISHED USING THE FOLLOWING CONSTRUCTION:
  188.  
  189.     .  ...  JMP,
  190.  
  191.     "." IS USED TO SAVE THE CURRENT LOCATION ON THE
  192.     STACK; THE FOLLOWING INSTRUCTIONS ARE ASSEMBLED
  193.     NORMALLY, AND THE "JMP," ASSEMBLES A JUMP BACK
  194.     TO THE SAVED LOCATION COUNTER VALUE.  A CONDITIONAL
  195.     JUMP COULD JUST AS EASILY BE USED.  SUCH BACKWARD
  196.     JUMPS MAY BE NESTED FOR MULTI-LEVEL LOOPS.
  197.  
  198. FORWARD JUMPS ARE ASSEMBLED USING THE FOLLOWING WORDS:
  199.  
  200. IF,    UNCONDITIONAL FORWARD JUMP
  201. IFNZ,    FORWARD JUMP IF NON-ZERO
  202. IFZ,    FORWARD JUMP IF ZERO
  203. IFNC,    FORWARD JUMP IF NO CARRY
  204. IFC,    FORWARD JUMP IF CARRY
  205. IFPO,    FORWARD JUMP IF PARITY ODD
  206. IFPE,    FORWARD JUMP IF PARITY EVEN
  207. IFP,    FORWARD JUMP IF PLUS
  208. IFM,    FORWARD JUMP IF MINUS
  209.  
  210. THEN,    SUPPLY TARGET FOR FORWARD JUMP
  211.  
  212. ELSE,    GENERATE AN UNCOUNDITIONAL FORWARD JUMP
  213.     AND SUPPLY TARGET FOR PRECEDING FORWARD
  214.     JUMP.
  215.  
  216. THE NORMAL CONSTRUCTION FOR A FORWARD JUMP IS:
  217.  
  218.     IF,  ...  THEN,
  219.  
  220. THE "IF," ASSEMBLES A "0 JMP," AND SAVES ON THE STACK THE
  221. ADDRESS OF THE 0.  "THEN," STORES THE VALUE OF THE CURRENT
  222. LOCATION COUNTER (.) AT THE ADDRESS ON THE TOP OF THE
  223. STACK, THUS COMPLETING THE ASSEMBLY OF THE JMP INSTRUCTION.
  224. FORWARD JUMPS MAY BE NESTED IN EXACTLY THE SAME WAY AS
  225. BACKWARD JUMPS.
  226.  
  227. "ELSE," IS USED AS FOLLOWS:
  228.  
  229.     IF,  ...  ELSE,  ...  THEN,
  230.  
  231.     HERE, THE "IF," GENERATES A FORWARD JUMP TO THE
  232. INSTRUCTION IMMEDIATELY FOLLOWING THE "ELSE,".  THE "ELSE,"
  233. IN TURN CAUSES AN UNCONDITIONAL JUMP TO BE ASSEMBLED TO THE
  234. INSTRUCTION FOLLOWING THE "THEN,".  THE "IF," COULD, OF
  235. COURSE, BE A CONDITIONAL JUMP.
  236.  
  237.  
  238. EXAMPLES:
  239.  
  240.     'TEST CODE<  H POP,  H A MOV,  IFP,  -1 H LXI,  ELSE,
  241.       0 H LXI,  THEN,  PUSH JMP,  >
  242.  
  243.     THIS DEFINES A WORD CALLED "TEST" WHICH, IF
  244.     THE TOP OF THE STACK IS POSITIVE, PUSHES A 0,
  245.     OTHERWISE PUSHES A -1.  THE GENERATED CODE IS:
  246.  
  247.     POP H
  248.     MOV A,H
  249.     JP L1
  250.     LXI H,-1
  251.     JMP L2
  252. L1:    LXI H,0
  253. L2:    JMP PUSH
  254.  
  255.  
  256.     'WAIT CODE<  H POP,  .  H DCX,  H A MOV,  L ORA,  JNZ,
  257.       NEXT JMP,  >
  258.  
  259.     THE WORD "WAIT" IS DEFINED WHICH COUNTS DOWN ITS
  260.     ARGUMENT AND RETURNS WHEN THE RESULT IS 0.  THE
  261.     GENERATED CODE IS:
  262.  
  263.     POP H
  264. L1:    DCX H
  265.     MOV A,H
  266.     ORA L
  267.     JNZ L1
  268.     JMP NEXT
  269.  
  270.  
  271. DEFINING SUBROUTINES
  272.  
  273.     SOMETIMES A BLOCK OF INSTRUCTIONS MUST BE EXECUTED FROM
  274. SEVERAL DIFFERENT CODE DEFINITIONS; IN THIS CASE IT IS FREQUENTLY
  275. EFFICIENT TO DEFINE A SUBROUTINE.  THIS IS DONE AS FOLLOWS:
  276.  
  277.     . ASSEMBLER<
  278.     BODY OF SUBROUTINE
  279.     >
  280.     'SUBROUTINE-NAME CONSTANT
  281.  
  282. THE "." PUSHES ON THE STACK THE ADDRESS OF THE BEGINNING OF THE
  283. SUBROUTINE, SUPPLYING THE VALUE FOR "CONSTANT".  "ASSEMBLER<"
  284. ACTIVATES THE ASSEMBLER VOCABULARY; NOTE THAT IT MUST BE FOLLOWED
  285. BY A CARRAIGE RETURN.  THE BODY OF THE SUBROUTINE FOLLOWS, WITH
  286. RETURN INSTRUCTIONS INCLUDED.  FINALLY, ">" DE-ACTIVATES THE
  287. ASSEMBLER VOCABULARY AND THE CONSTANT IS DEFINED.  SUBSEQUENTLY,
  288. THE SUBROUTINE MAY BE INVOKED DIRECTLY BY:
  289.  
  290.     SUBROUTINE-NAME CALL,
  291.  
  292.  
  293. ASSEMBLING STRINGS
  294.  
  295.     TO ASSEMBLE A STRING ONTO THE END OF THE DICTIONARY, THE
  296. FOLLOWING TECHNIQUE IS USED:
  297.  
  298.     . "STRING" S,
  299.  
  300. THIS PUSHES A POINTER TO THE BEGINNING OF THE STRING ON THE STACK,
  301. AND COPIES THE GIVEN STRING FROM THE COMPILE BUFFER ONTO THE END
  302. OF THE DICTIONARY.
  303.  
  304.  
  305. REPEATING INSTRUCTIONS
  306.  
  307.     INTERATION BRACKETS AND/OR DO LOOPS MAY BE USED WITHIN
  308. THE ASSEMBLER TO PERFORM REPETITIVE ASSEMBLY:
  309.  
  310.     'DELAY CODE<  100 ( NOP, ) >
  311.  
  312. THIS ASSEMBLES A WORD "DELAY" WHICH EXECUTES 100 NOP'S.
  313.  
  314.     .  10 0 DO I , LOOP
  315.  
  316. THIS EXAMPLE LEAVES ON THE STACK THE ADDRESS OF THE BEGINNING OF
  317. A TABLE OF NUMBERS FROM 0 TO RADIX - 1.
  318.  
  319.  
  320. CONDITIONAL ASSEMBLY
  321.  
  322.     CONDITIONAL ASSEMBLY IS OBTAINED BY USING THE NORMAL STOIC
  323. "IF", "ELSE", AND "THEN".  FOR EXAMPLE, SUPPOSE WE HAVE A VARIABLE
  324. "TEST" WHICH THE USER WILL SET TO EITHER 0 OR -1:
  325.  
  326.     'PARAM CODE<  TEST @ IF 100 ELSE 200 THEN H LXI,  PUSH JMP,  >
  327.  
  328. HERE, THE CODE DEFINITION, "PARAM" IS DEFINED TO PUSH A 100 IF TEST
  329. IS NON-ZERO, A 200 OTHERWISE.
  330.  
  331.  
  332. MACROS
  333.  
  334.     ASSEMBLER MACROS ARE PROVIDED BY USING COLON DEFINITIONS
  335. AS FOLLOWS:
  336.  
  337.     ASSEMBLER< DEFINITIONS
  338.     '-HL, : H A MOV,  CMA,  A H MOV,  L A MOV,  CMA,  A L MOV,
  339.         H INX,  ;
  340.     > DEFINITIONS
  341.  
  342. THUS,
  343.  
  344.     'MINUS CODE<  H POP,  -HL,  PUSH JMP,  >
  345.  
  346.     DEFINES A WORD WHICH NEGATES THE TOP OF THE STACK.
  347.  
  348.  
  349. LOCATIONS INTERNAL TO STOIC WHICH ARE AVAILABLE TO THE USER:
  350.  
  351. -HL CALL,    NEGATES (H,L)
  352. HL 1+ CALL,    COMPLEMENTS (H,L)
  353.  
  354. -DE CALL,    NEGATES (D,E)
  355. DE 1+ CALL,    COMPLEMENTS (D,E)
  356.  
  357. -BC CALL,    NEGATES (B,C)
  358. BC 1+ CALL,    COMPLEMENTS (B,C)
  359.  
  360. -HLDE CALL,    NEGATES (H,L,D,E)
  361.  
  362. (TTI) CALL,    GET A CHARACTER FORM THE KEYBOARD;
  363.         CHARACTER RETURNED IN A REGISTER.
  364.  
  365. (TTO) CALL,    TYPE A CHARACTER ON THE TERMINAL;
  366.         CHARACTER PASSED IN A REGISTER.
  367.         RETURN AUTOMATICALLY FOLLOWED BY LINE FEED.
  368.  
  369. (MSG) CALL,    TYPES A MESSAGE ON THE TERMINAL;
  370.         POINTER TO STRING PASSED IN (H,L).
  371.  
  372. MUL CALL,    UNSIGNED MULTIPLY
  373. SMUL CALL,    SIGNED MULTIPLY
  374.         (H,L)*(D,E) -> (H,L,D,E)
  375.  
  376. DIV CALL,    UNSIGNED DIVIDE
  377. SDIV CALL,    SIGNED DIVIDE
  378.         (H,L,D,E)/(B,C) -> (H,L) REMAINDER; (D,E) QUOTIENT
  379.  
  380. (B,) CALL,    OUTPUT A REGISTER TO END OF DICTIONARY
  381. (,) CALL,    OUTPUT (H,L) TO END OF DICTIONARY
  382.  
  383. ERROR JMP,    SIMULATES "STRING" ERR
  384.         ADDRESS OF STRING IN (H,L).
  385.  
  386. (READ) CALL,    READ A BLOCK FROM MASS STORAGE DEVICE
  387. (WRITE)    CALL,    WRITE A BLOCK TO MASS STORAGE DEVICE
  388.         (H,L) = BLOCK #
  389.         (D,E) = BUFFER ADDRESS
  390.         ON RETURN, A = ERROR CODE (0 = OK)
  391.  
  392. (RBLOCK) CALL,    BLOCK # IN (D,E), BUFFER
  393. (WBLOCK) CALL,    ADDRESS RETURNED IN (D,E).
  394.  
  395. T1        TEMPORARY #1
  396.         9 ADDITIONAL 16-BIT TEMPORARIES FOLLOW
  397.  
  398.  
  399.     IN MAKING A CODE DEFINITION OF HIS OWN, THE USER
  400. SHOULD BE AWARE OF THE FOLLOWING FACTS:
  401.  
  402. 1) THE PARAMETER STACK POINTER IS PASSED IN SP.  SP
  403.    MUST CONTAIN THE STACK POINTER ON EXIT.
  404.  
  405. 2) PARAMETERS ON THE STACK ARE AVAILABLE BY INDEXING OFF
  406.    SP.  THE TOP OF THE STACK IS AT OFFSET 0, NEXT TO TOP
  407.    AT OFFSET +2, ETC.
  408.  
  409. 3) TEN TEMPORARIES, STARTING AT "T1" ARE AVAILABLE IF
  410.    NECESSARY.
  411.  
  412. 4) ALL CODE DEFINITIONS MUST EXIT BY JUMPING TO ONE OF
  413.    THE FOLLOWING ADDRESSES IN THE STOIC INTERPRETER:
  414.  
  415.     NEXT    NORMAL TERMINATION
  416.  
  417.     PUSH    PUSH (H,L), JUMP TO NEXT
  418.  
  419.     DPUSH    PUSH (D,E), PUSH (H,L), JUMP TO NEXT
  420.  
  421.     PUSHD    PUSH (D,E), JUMP TO NEXT
  422.  
  423.     @PUSH    PUSH @(H,L), JUMP TO  NEXT
  424.  
  425.     0PUSH    PUSH 0, JUMP TO NEXT
  426.  
  427.     -1PUSH    PUSH -1, JUMP TO NEXT
  428.  
  429. 5) A POINTER TO THE PARAMETER FIELD OF THE CURRENT WORD
  430.    IS PASSED IN (D,E).  (D,E) NEED NOT BE PRESERVED.
  431.  
  432.  
  433. EXAMPLES OF CODE DEFINITIONS:
  434.  
  435.     '+ CODE<  H POP,  D POP,  D DAD,  PUSH JMP,  >
  436.  
  437.     THE WORD "+" ADDS THE TOP TWO STACK ENTRIES
  438.     AND LEAVES THE RESULT ON THE STACK.
  439.  
  440.     'ABS CODE<  H POP,  H A MOV,  A ORA,  IFP,
  441.       -HL CALL,  THEN,  PUSH JMP,  >
  442.  
  443.     THE WORD "ABS" REPLACES THE TOP OF THE STACK
  444.     WITH ITS ABSOLUTE VALUE.
  445.  
  446.  
  447. ;CODE<
  448.  
  449.     THE WORD ";CODE<" IS USED TO DEFINE NEW CLASSES
  450. OF WORDS.  "VARIABLE", "CONSTANT", AND "USER", FOR
  451. EXAMPLE ARE DEFINED USING ";CODE<".  THE FORMAT FOR ITS
  452. USE IS AS FOLLOWS:
  453.  
  454.     'NAME : ... ;CODE< ... >
  455.  
  456.     THE WORDS BETWEEN "NAME" AND ";CODE<" ARE IN
  457. HIGHER LEVEL STOIC; THE WORDS BETWEEN ";CODE< AND ">"
  458. ARE ASSEMBLER WORDS.
  459.  
  460.     WHEN EXECUTED, ";CODE<" OUTPUTS THE ADDRESS OF
  461. "(;CODE<)" TO THE COMPILE BUFFER, TERMINATES THE CURRENT
  462. COLON DEFINITION, AND PUSHES THE ADDRESS OF "ASSEMBLER<" ON
  463. THE VOCABULARY STACK.
  464.  
  465.     THE NAMELESS DICTIONARY ENTRY "(;CODE<)"
  466. SETS THE CODE ADDRESS WORD OF THE MOST RECENTLY
  467. DEFINED WORD TO THE CONTENTS OF "I" + 2, AND POPS
  468. "I" FROM THE RETURN STACK.
  469.  
  470. EXAMPLE:
  471.  
  472.     'VARIABLE : CONSTANT ;CODE< PUSHD JMP, >
  473.  
  474.     THIS IS THE DEFINITION OF "VARIABLE".  THE
  475.     DICTIONARY ENTRY FOR "VARIABLE" THEN LOOKS
  476.     AS FOLLOWS:
  477.  
  478.         <8>V
  479.         AR
  480.         IA
  481.         LINK TO PREVIOUS ENTRY
  482.         ADDRESS OF (:)
  483.     VAR:    ADDRESS OF CONSTANT
  484.         ADDRESS OF (;CODE<)
  485.     (VAR):    JMP PUSHD
  486.  
  487.     NOW, SUPPOSE THAT X IS DEFINED AS FOLLOWS:
  488.  
  489.     20 'X VARAIBLE
  490.  
  491.     "VARIABLE" INVOKES "CONSTANT" WHICH BUILDS A
  492.     DICTIONARY ENTRY CALLED "X", STORES THE
  493.     VALUE "20" IN THE PARAMETER FIELD, AND SETS
  494.     THE CODE ADDRESS WORD TO POINT TO MACHINE
  495.     INSTRUCTIONS WHICH PUSH THE VALUE OF THE
  496.     PARAMETER FIELD ON THE STACK.  ";CODE<" THEN
  497.     OVERWRITES THE CODE ADDRESS WORD WITH THE
  498.     ADDRESS OF (VAR).  THUS, THE RESULTANT
  499.     DICTIONARY ENTRY FOR "X" IS:
  500.  
  501.         <1>X
  502.         0
  503.         0
  504.         LINK TO PREVIOUS ENTRY
  505.         (VAR)
  506.     X:    20
  507.  
  508.     WHEN "X" IS IN TURN EXECUTED, CONTROL PASSES
  509.     TO (VAR) VIA THE CODE ADDRESS WORD, WITH THE
  510.     ADDRESS OF "X" IN (D,E), THE ADDRESS OF "X" IS
  511.     PUSHED, AND CONTROL PASSES TO "NEXT".
  512.  
  513.  
  514. ;:
  515.  
  516.     ";:" IS ANALOGOUS TO ";CODE<" EXCEPT THAT IT
  517. USES HIGHER LEVEL STOIC TO DEFINE THE ACTION TAKEN
  518. BY THE CLASS OF WORDS BEING DEFINED.  THE SYNTAX IS
  519. AS FOLLOWS:
  520.  
  521.     'NAME : ... ;: ... ;
  522.  
  523.     HERE, BOTH SETS OF WORDS ARE IN HIGHER LEVEL
  524. STOIC.
  525.  
  526. EXAMPLE:
  527.  
  528.     0> 'SQPRINT : ;: DUP * = ;
  529.     0> 5 'X SQPRINT
  530.     0> X
  531.     25
  532.  
  533.     ";:" IS MAINLY USEFUL IN DEFINING A NUMBER OF WORDS WHICH
  534. DIFFER ONLY IN A SINGLE CONSTANT VALUE, E.G. ASSEMBLER WORDS WITH
  535. DIFFERENT OPCODES.
  536.  
  537.  
  538.  
  539. ***EOF***
  540.  
  541.  
  542.