home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug018.ark / MILMON80.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  24KB  |  1,177 lines

  1. ;    8 0 8 0    M I L    M O N I T O R
  2.     ORG    0
  3. L0:    MVI    A,1    ;IDLE TTY
  4.     OUT    24Q
  5.     JMP    LA0    ;CONTINUE ELSEWHERE
  6.     NOP
  7.     PUSH    H    ;SAVE H,L    RST 010-BRK PT EXEC
  8.     LXI    H,LA023    ;SET TO PRINT BUFFER(PB)
  9.     MOV    M,A    ;ACC TO PB
  10.     JMP    L3160    ;CONT ELSEWHERE
  11.     CALL    L357    ;SAVE    RST 020
  12.     LHLD    LA100    ;INDIRECT JUMP TO LOC POINTER
  13.     PCHL    ;BY CONTENT OF LA100,LA101
  14.     NOP
  15.     CALL    L357    ;    RST 030
  16.     LHLD    LA102    ;IND. JMP POINTED BY
  17.     PCHL    ;LA102,LA103
  18.     NOP
  19.     CALL    L357    ;    RST 040
  20.     LHLD    LA104
  21.     PCHL
  22.     NOP
  23.     CALL    L357    ;    RST 050
  24.     LHLD    LA106
  25.     PCHL
  26.     NOP
  27.     CALL    L357    ;    RST 060
  28.     LHLD    LA110
  29.     PCHL    
  30.     NOP
  31.     CALL    L357    ;    RST 070
  32.     LHLD    LA112
  33.     PCHL
  34.     NOP
  35. LA0:    OUT    26Q    ;DISABLE R.C., STOP PROGRAMMER
  36.     LXI    H,LA100    ;SET SP
  37.     SPHL
  38.     MVI    A,0    ;CLEAR TTY I/O PRG.
  39.     STA    LA010    ;EXCEPTION FLAGS
  40.     STA    LA011
  41.     STA    LA016
  42.     MVI    A,'-'    ;O/P ------
  43.     MVI    B,6
  44.     CALL    L3260
  45.     CALL    L1355    ;CR/LF
  46. L133:    CALL    L3277    ;I/P NONBLANK, FIRST LETTER
  47.     JZ    L133
  48.     ANI    77Q    ;MASK
  49.     MOV    C,A    ;STORE IN C
  50.     CALL    L3277    ;I/P ALPHABETIC, SECOND LETTER
  51.     JNC    L6070
  52.     ANI    77Q    ;MASK
  53.     MOV    D,A    ;STORE IN D
  54.     CALL    L3277    ;I/P ALHPABETIC, THIRD LETTER
  55.     JNC    L250
  56.     ANI    77Q
  57.     MOV    E,A    ;STORE IN E
  58.     CALL    L3277    ;I/P ALPHABETIC, FOURTH LETTER
  59.     JNC    L221
  60.     CALL    L3277    ;I/P NON-ALPHABETIC
  61.     JC    L6070
  62.     LXI    H,L3321    ;SET H,L TO 4 LET. TABLE    4 LETTER
  63.     MVI    B,13Q    ;INSTR COUNT    DEC
  64. L207:    CALL    L5166    ;SWEEP 4 LETTER TABLE    CONTROLLER
  65.     INX    H    ;NO MATCH, GO TO NEXT
  66.     JNZ    L207    ;SET OF BYTES
  67.     JMP    L6070    ;END OF 4 LET TABLE, ERROR
  68. L221:    LXI    H,L4111    ;SET H,L TO BEG OF COMMAND TABLE
  69.     MVI    B,16Q    ;SET UP COUNT
  70. L226:    CALL    L270    ;CALL 3 LET MATCH
  71.     INX    H    ;IF NO MATCH GO TO NEXT BYTE
  72.     JNZ    L226    ;NOT END OF TABLE, TRY AGAIN
  73.     MVI    B,65Q    ;NOT COMMAND, SET COUNT TO 3 LET INST
  74. L237:    CALL    L300    ;CALL 3 LET INST MATCH
  75.     JNZ    L237    ;NOT END, TRY AGAIN
  76.     JMP    L6070    ;END OF TABLE, ERROR
  77. L250:    LXI    H,L4010    ;SET H,L TO 2 LET TABLE
  78.     MVI    B,17Q    ;SET UP COUNT
  79.     MOV    E,D    ;SHIFT
  80.     MOV    D,C
  81. L257:    CALL    L306    ;CALL 2 LET MATCH
  82.     JNZ    L257    ;NO MATCH, TRY AGAIN
  83.     JMP    L6070    ;END OF TABLE, ERROR
  84. L270:    CALL    L314    ;CALL 3 LET MATCH    EXECUTE
  85.     MOV    E,M    ;MATCH FOUND, LOAD    GIVEN
  86.     INX    H    ;JUMP ADDR TO D,E    COMMAND
  87.     MOV    D,M
  88.     XCHG    ;INDIRECT JUMP
  89.     PCHL
  90. L300:    CALL    L314    ;CALL 3 LET MATCH
  91.     JMP    L5143    ;MATCH FOUND, CONT ELSEWHERE
  92. L306:    CALL    L323    ;2 LET MATCH
  93.     JMP    L5175    ;MATCH FOUND, CONT ELSEWHERE
  94. L314:    CALL    L352    ;MASK, INCREMENT H,L
  95.     CMP    C    ;THIRD LETTER EQUAL TO TAB?
  96.     JNZ    L343    ;NO, JUMP
  97. L323:    CALL    L352    ;YES, GO TO SECOND LETTER
  98.     CMP    D    ;SECOND LETTER EQUAL?
  99.     JNZ    L344    ;NO
  100.     CALL    L352    ;YES, GO TO FIRST LETTER
  101.     CMP    E    ;LAST LETTER EQUAL?
  102.     JNZ    L345    ;NO
  103.     MOV    E,M    ;YES, MOVE CODE TO E
  104.     RET
  105. L343:    INX    H
  106. L344:    INX    H
  107. L345:    INX    H
  108.     INX    SP    ;SET SP
  109.     INX    SP
  110.     DCR    B    ;COUNT INSTR
  111.     RET
  112. L352:    MVI    A,77Q    ;    MASK
  113.     ANA    M    ;    SUBROUTINE
  114.     INX    H
  115.     RET
  116. L357:    SHLD    LA014    ;SAVE H,L TEMPORARILY
  117.     XTHL    ;EXCH H,L AND TOP OF STACK
  118.     PUSH    PSW    ;SAVE REGISTERS
  119.     PUSH    B
  120.     PUSH    D
  121.     PUSH    H
  122.     LHLD    LA014    ;RESTORE H,L
  123.     RET
  124. L373:    POP    H    ;    RESTORE 
  125.     POP    D    ;    SUBROUTINE
  126.     POP    B
  127.     POP    PSW
  128.     XTHL
  129.     RET
  130. LA01:    CALL    L357    ;SAVE REG    I/P TTY
  131.     LDA    LA010    ;TTY I/P?    SUBR
  132.     CPI    0
  133.     JNZ    L0
  134.     MVI    C,-9    ;BIT COUNT
  135.     INR    A    ;ENABLE R.C.
  136.     OUT    26Q
  137. LA21:    IN    0    ;WAIT FOR START PULSE
  138.     RRC
  139.     JNC    LA21
  140.     MVI    A,0    ;DISABLE R.C.
  141.     OUT    26Q
  142.     LXI    H,1040Q    ;SET TIME CONSTANT (T.C.)
  143.     CALL    L1117    ;TIMEOUT 4.05 MSEC
  144.     DAD    H    ;DOUBLE T.C.
  145. LA42:    IN    0    ;I/P BIT
  146.     CMA    
  147.     OUT    24Q    ;ECHO
  148.     RAR    ;ROTATE INTO POSITION
  149.     MOV    A,B
  150.     RAR
  151.     MOV    B,A
  152.     CALL    L1117    ;TIMEOUT 9.1 MSEC
  153.     INR    C    ;COUNT BIT
  154.     JNZ    LA42    ;NOT LAST, LOOP
  155.     MVI    A,1    ;IDLE TTY
  156.     OUT    24Q
  157.     DAD    H    ;DOUBLE TC
  158.     CALL    L1117    ;TIMEOUT 18.2 MSEC
  159.     MOV    A,B    ;MASK PARITY
  160.     ANI    177Q
  161.     STA    LA013    ;PUT INTO TEMP STORE
  162.     CALL    L373    ;RESTORE REG
  163.     LDA    LA013    ;TEST FOR TAPE LEADER
  164.     CPI    0
  165.     JZ    LA01
  166.     CPI    1    ;TEST FOR CTRL A
  167.     RNZ
  168.     RST    0    ;IF CTRL A, GO TO BEG OF MONITOR
  169. L1117:    PUSH    H    ;    TIMING
  170.     INR    H    ;    LOOP
  171. L1121:    DCR    L
  172.     JNZ    L1121
  173.     DCR    H
  174.     JNZ    L1121
  175.     POP    H
  176.     RET
  177. L1133:    CALL    L357    ;SAVE REG    TTY O/P
  178.     MVI    C,-8    ;COUNTER
  179.     STA    LA013    ;MOVE TO I/O BUFFER
  180.     LDA    LA010    ;TTY I/P TEST
  181.     CPI    0
  182.     JNZ    L0
  183.     OUT    24Q    ;START TTY
  184.     LXI    H,1040Q    ;SET TC
  185.     DAD    H    ;DOUBLE TC
  186.     LDA    LA013    ;RESTORE ACC
  187. L1164:    CALL    L1117    ;TIMEOUT 9.1 MSEC
  188.     OUT    24Q    ;O/P BIT
  189.     RAR    ;ROTATE
  190.     INR    C    ;COUNT
  191.     JNZ    L1164    ;CONTINUE OUTPUTTING
  192.     CALL    L1117    ;TIMEOUT 9.1 MSEC
  193.     MVI    A,1    ;IDLE TTY
  194.     OUT    24Q    
  195.     DAD    H    ;TIMEOUT 18.2 MSEC
  196.     CALL    L1117    
  197.     CALL    L373    ;RESTORE REG
  198.     RET
  199. L1215:    CALL    LA01    ;    I/P WITH
  200. L1220:    MOV    B,A    ;    OCTAL TEST
  201.     ANI    370Q    ;    INTO B
  202.     CPI    '0'
  203.     RET
  204. L1226:    CALL    LA01    ;    I/P WITH
  205.     CPI    177Q    ;    RUBOUT
  206.     RNZ    ;    TEST
  207.     MVI    A,'_'    ;PRINT _
  208.     JMP    L1133
  209. L1241:    CALL    L357    ;SAVE REG    I/P BYTE
  210. L1244:    CALL    L1215    ;I/P OCTAL    TO MEMORY
  211. L1247:    JNZ    L1244
  212. L1252:    MOV    A,B    ;ROTATE, SAVE IN B
  213.     RRC
  214.     RRC
  215.     ANI    300Q
  216.     MOV    B,A
  217. L1260:    CALL    L1226    ;I/P ASCII WITH RUBOUT TEST
  218.     JZ    L1244
  219.     ANI    7    ;MASK, ROTATE, SAVE IN C
  220.     RLC
  221.     RLC
  222.     RLC
  223.     MOV    C,A    
  224.     CALL    L1226    ;I/P ASCII WITH RUBOUT TEST
  225.     JZ    L1260
  226.     ANI    7    ;MASK, COMBINE
  227.     ORA    B
  228.     ORA    C
  229.     MOV    M,A    ;MOVE TO MEMORY
  230.     CALL    L373    ;RESTORE REG
  231.     RET
  232. L1313:    PUSH    PSW    ;    O/P BLANK
  233.     MVI    A,' '
  234.     CALL    L1133
  235.     POP    PSW
  236.     RET
  237. L1323:    CALL    L1313    ;O/P BLANK    O/P MEMORY
  238. L1326:    MOV    A,M    ;O/P FIRST DIGIT    BYTE
  239.     RLC
  240.     RLC
  241.     ANI    3
  242.     CALL    L1350
  243.     MOV    A,M    ;O/P SECOND DIGIT
  244.     RRC
  245.     RRC
  246.     RRC
  247.     CALL    L1346
  248.     MOV    A,M    ;O/P LAST DIGIT
  249. L1346:    ANI    7
  250. L1350:    ORI    '0'
  251.     JMP    L1133
  252. L1355:    PUSH    PSW    ;    O/P CRLF
  253.     MVI    A,15Q    ;CR
  254.     CALL    L1133
  255.     MVI    A,12Q    ;LF
  256.     CALL    L1133
  257.     POP    PSW
  258.     RET
  259. L1372:    PUSH    PSW    ;    O/P /(SLASH)
  260.     MVI    A,'/'
  261.     CALL    L1133
  262.     POP    PSW
  263.     RET
  264. LB02:    LHLD    LA000    ;SET TO CLP    SET H,L TO CLP
  265.     LDA    LA016    ;TEST FOR PRG.
  266.     CPI    1
  267.     RNZ
  268.     MOV    A,L    ;YES, PRG SET TO PRG BUFFER
  269.     LXI    H,LA007
  270.     OUT    20Q    ;O/P ADDRESS
  271.     IN    2    ;I/P BYTE
  272.     MOV    M,A    ;MOVE TO BUFFER
  273.     RET
  274. LB25:    CALL    LB02    ;SET H,L TO CLP    O/P CLP
  275.     LXI    H,LA001    ;SET TO MS BYTE OF CLP
  276.     JNZ    LB46    ;NOT PRG, JUMP
  277.     MVI    A,120Q    ;O/P P (PROGRAMMER)
  278.     CALL    L1133
  279.     JMP    LB51
  280. LB46:    CALL    L1323    ;PRINT MS BYTE OF ADDRESS
  281. LB51:    DCX    H
  282.     JMP    L1326    ;PRINT LS BYTE OF ADDRESS
  283. LB55:    CALL    L1355    ;    O/P CLP/
  284.     CALL    LB25
  285.     JMP    L1372
  286. LB66:    CALL    LB02    ;    O/P MEMORY AT CLP
  287.     JMP    L1323
  288. LB74:    LHLD    LA000    ;    INCREMENT CLP
  289.     INX    H
  290.     SHLD    LA000
  291.     JMP    LB02
  292. LC06:    LHLD    LA000    ;    DECREMENT CLP
  293.     DCX    H
  294.     SHLD    LA000
  295.     JMP    LB02
  296. LC20:    LHLD    LA000    ;    COMPARE CLP
  297.     XCHG    ;    AND UPPER LIMIT
  298.     LHLD    LA002
  299.     MOV    A,D
  300.     CMP    H
  301.     RNZ
  302.     MOV    A,E
  303.     CMP    L
  304.     RET
  305. LC35:    CALL    LC20    ;COMPARE CLP AND UL    RANGE CONTROL
  306.     JNZ    LB74    ;NOT ZERO, INCR CLP
  307.     RST    0    ;END OF PROGRAM, GO TO BEG
  308. LC44:    CALL    L1355    ;    O/P CLP*
  309.     MVI    A,'*'
  310.     CALL    L1133
  311. LC54:    CALL    L1313    ;O/P BLANK    I/P ADDR
  312.     CALL    LA01    ;I/P ASCII    TO MEMORY
  313.     CPI    'P'    ;=P?
  314.     JZ    L2210    ;YES, SET PRG FLAG
  315.     LXI    B,L2204    ;NO, SET UP NEXT ADDR-I/P MS BYTE
  316.     PUSH    B
  317.     CALL    L357    ;SAVE REG
  318.     CALL    L1220    ;I/P OCTAL
  319.     JMP    L1247
  320. L2204:    DCX    H    ;I/P BYTE TO MEM-I/P LS BYTE
  321.     JMP    L1241
  322. L2210:    MVI    A,1    ;SET PROGRAMMER FLAG
  323.     STA    LA016
  324.     MOV    M,A    ;STORE P
  325.     JMP    L2204    ;I/P WORD
  326. L2221:    LXI    H,LA007    ;I/P LOC WHERE PROG    I/P LIMITS
  327.     CALL    LC44    ;IS NOW
  328. L2227:    LXI    H,LA005    ;I/P NEW LOC
  329.     CALL    LC44
  330. L2235:    CALL    L2251    ;O/P CRLF*, I/P NEW CLP
  331.     LXI    H,LA003    ;O/P BL, I/P UPPER L.
  332.     CALL    LC54
  333.     JMP    L1355    ;O/P CRLF, RET
  334. L2251:    LXI    H,LA001    ;SET H,L TO CLP
  335.     JMP    LC44    ;O/P CRLF*,I/P CLP
  336. DPO:    CALL    L2235    ;I/P UPPER L., O/P CRLF
  337. L2262:    MVI    C,8    ;SET UP COUNT
  338.     CALL    LB55    ;O/P CLP/
  339.     CALL    LB02    ;SET H,L TO CLP
  340. L2272:    CALL    L1323    ;O/P MEMORY BYTE
  341.     CALL    LC35    ;INCR CLP
  342.     DCR    C    ;COUNT
  343.     JNZ    L2272    ;LOOP
  344.     JMP    L2262    ;NEW LINE
  345. LDO:    CALL    L2235    ;I/P CLP, UPPER L., O/P CRLF
  346. L2312:    CALL    LA01    ;I/P ASCII, TEST
  347.     CPI    '/'    ;WAIT FOR /
  348.     JNZ    L2312    
  349.     CALL    LB02    ;SET H,L TO CLP
  350. L2325:    CALL    LA01    ;I/P ASCII, TEST
  351.     CPI    15Q    ;FOR CRLF
  352.     JZ    L2312
  353.     CALL    L1241    ;I/P BYTE TO MEM
  354.     CALL    LC35    ;RANGE CONTROL (END?)
  355.     JMP    L2325    ;LOOP
  356. EDT:    CALL    L2251    ;I/P CLP     OCTAL
  357. L2351:    CALL    LB55    ;O/P CLP    EDITOR
  358.     CALL    LB02    ;SET H,L TO CLP
  359.     CALL    L2365    ;PROCESS LINE
  360.     JMP    L2351    ;LOOP
  361. L2365:    CALL    LA01    ;I/P ASCII    EDITING
  362. L2370:    CPI    'R'    ;R?    ROUTINES
  363.     JZ    L0    ;YES, GO TO BEG
  364.     CPI    '*'
  365.     JZ    L2251    ;YES, GO TO I/P CLP ROUTINE
  366.     CPI    '@'
  367.     JZ    L3073    ;YES, GO TO XQT
  368.     CPI    '^'    
  369.     JZ    LC06    ;YES, GO TO DECR CLP
  370.     CPI    ' '
  371.     JZ    L3042    ;YES, PRINT OCTAL BYTE
  372.     CALL    L1220    ;TEST FOR OCTAL
  373.     RNZ    ;NOT OCTAL
  374.     LXI    D,L3037    ;I/P BYTE TO MEM
  375.     PUSH    D
  376.     CALL    L357
  377.     JMP    L1252
  378. L3037:    JMP    L3045
  379. L3042:    CALL    LB66    ;O/P MEM AT CLP
  380. L3045:    CALL    LA01    ;I/P ASCII
  381.     CPI    '_'    ;BACK ARROW?
  382.     JNZ    L3063    ;NO, JUMP
  383.     CALL    L1241    ;YES, I/P ANOTHER BYTE
  384.     JMP    L3045    ;LOOP
  385. L3063:    CPI    ' '
  386.     JZ    LB74    ;YES, INCR CLP AND RET
  387.     JMP    L2370    ;NO, LOOP
  388. XQT:
  389. L3073:    CALL    L1355    ;CRLF    XQT
  390.     CALL    L2251    ;I/P ADDRESS TO H,L
  391.     LHLD    LA000
  392.     PCHL    ;INDIRECT JUMP
  393. SBP:    CALL    L3135    ;CLEAR BKPT    SET BREAKPOINT
  394.     LXI    H,LA020    ;SET H,L TO BKPT ADDR BUFFER
  395.     CALL    LC44    ;I/P BKPT ADDR TO MEMORY
  396.     LHLD    LA017    ;SAVE PROG BYTE
  397.     MOV    A,M
  398.     STA    LA021
  399.     MVI    M,317Q    ;INSERT RST 010 INTO PROG
  400.     MVI    A,1    ;SET BKPT FLAG
  401.     STA    LA022
  402.     RST    0
  403. L3135:    LDA    LA022    ;TEST FOR BKPT    CLEAR BKPT
  404.     CPI    1
  405.     RNZ
  406.     LHLD    LA017    ;LOAD H,L WITH BKPT ADDR
  407.     LDA    LA021    ;MOV PROG BYTE TO ACC
  408.     MOV    M,A    ;MOV BACK INTO PROG
  409.     MVI    A,0    ;CLEAR BKPT FLAG
  410.     STA    LA022
  411.     RET
  412. L3160:    PUSH    PSW    ;SAVE ACC, FLAGS    EXECUTE BKPT
  413.     CALL    L1323    ;O/P ACC
  414.     MOV    M,B
  415.     CALL    L1323    ;O/P B
  416.     MOV    M,C    
  417.     CALL    L1323    ;O/P C
  418.     MOV    M,D    
  419.     CALL    L1323    ;O/P D
  420.     MOV    M,E
  421.     CALL    L1323    ;O/P E
  422.     POP    B    ;RESTORE FLAGS, ACC    TO B,C
  423.     POP    D    ;RESTORE H,L TO D,E
  424.     MOV    M,D
  425.     CALL    L1323    ;O/P H
  426.     MOV    M,E
  427.     CALL    L1323    ;O/P L
  428.     XCHG
  429.     CALL    L1323    ;O/P MEM
  430.     MOV    A,C    ;FLAGS TO ACC
  431.     CALL    L3250    ;O/P CARRY
  432.     CALL    L3244    ;O/P PARITY
  433.     CALL    L3244    ;O/P CY1 (CARRY BETWEEN D3,D4)
  434.     CALL    L3244    ;O/P ZERO
  435.     MOV    A,C
  436.     CALL    L3246    ;O/P SIGN
  437.     RST    0
  438. L3244:    MOV    A,C    ;    SHIFT AROUND
  439.     RRC    ;    FLAG BYTE
  440. L3246:    RRC
  441.     MOV    C,A
  442. L3250:    ANI    1
  443.     CALL    L1313
  444.     JMP    L1346
  445. L3260:    CALL    L1355    ;CRLF    O/P WITH
  446. L3263:    CALL    L1133    ;O/P ASCII    COUNT LOOP
  447.     DCR    B    ;COUNT
  448.     RZ
  449.     JMP    L3263    ;LOOP
  450. CBP:    CALL    L3135    ;CLEAR BKPT
  451.     RST    0
  452. L3277:    CALL    LA01    ;I/P ASCII    I/P NUMERIC
  453.     CPI    ' '    ;BLANK?    ALPHABETIC,BLANK
  454.     PUSH    B    ;SAVE B,C    TEST
  455.     MOV    B,A
  456.     RLC    ;ROTATE MS BIT INTO CARRY
  457.     RLC
  458.     MOV    A,B
  459.     POP    B    ;RESTORE B,C
  460.     RET
  461. L3313:    MVI    A,77Q    ;    ERROR,O/P ?
  462.     CALL    L1133    ;    AND RESTART
  463.     RST    0
  464. L5143:    MOV    A,M    ;RST?     RST TEST FOR
  465.     CPI    377Q    ;    LOAD SYMBOLIC
  466.     JNZ    L5174    ;NO, GO TO ARG I/P
  467.     LXI    H,LA024    ;YES, SET H,L TO RST BUFFER
  468.     CALL    L1241    ;I/P
  469.     MOV    A,M    ;MASK INTO 377
  470.     ORI    307Q
  471.     MOV    E,A
  472.     JMP    L5354    ;CONTINUE IN ARG I/P
  473. L5166:    CALL    L314    ;CALL 3 LETTER MATCH    LOAD SYMB.
  474.     INX    H    ;LOAD MASKED INSTR    ROUTINES (CONT)
  475.     MOV    E,M    ;CODE INTO E
  476.     DCX    H    ;GO TO FIRST BYTE
  477. L5174:    DCX    H
  478. L5175:    DCX    H
  479.     DCX    H
  480.     MOV    A,M    ;MASK, ROTATE, TO GET ARG BITS
  481.     ANI    300Q
  482.     RLC
  483.     RLC
  484.     INX    H    ;GO TO SECOND BYTE
  485.     JZ    L5302    ;NO ARG, GO TO INP DATA
  486.     DCR    A    ;1 ARG DEST, GO TO I/P
  487.     JZ    L5271    
  488.     DCR    A    ;2 ARG, GO TO I/P
  489.     JZ    L5255
  490. L5220:    CALL    L5371    ;ASSUME 1 ARG SOURCE
  491.     ANA    E    ;MASK ARG INTO INSTR BYTE
  492.     MOV    E,A
  493.     JMP    L5274    ;GO TO DATA I/P
  494. L5230:    INX    H    ;    DEST. SUBSTITUTE
  495.     CALL    L5371    ;I/P ARG
  496.     MOV    B,A    ;EXCEPTION TEST
  497.     MOV    A,M
  498.     ANI    100Q
  499.     MOV    A,B
  500.     JZ    L5246
  501.     ORI    1
  502. L5246:    RLC    ;ROTATE MASK INTO BYTE
  503.     RLC
  504.     RLC
  505.     ANA    E
  506.     MOV    E,A
  507.     DCX    H    ;SET H,L TO BYTE WITH DATA CODE
  508.     RET
  509. L5255:    CALL    L5230    ;I/P DEST ARG    I/P DEST,
  510. L5260:    CALL    L3277    ;WAIT FOR NON-ALPHABETIC    SOURCE ARG
  511.     JC    L5260
  512.     JMP    L5220    ;I/P SOURCE
  513. L5271:    CALL    L5230    ;I/P DEST    I/P DEST ARG
  514. L5274:    CALL    L3277    ;WAIT FOR NON-ALPHABETIC
  515.     JC    L5274
  516. L5302:    MOV    A,M    ;I/P BYTE WITH DATA CODE    I/P DATA
  517.     LXI    H,LA023    ;SET H,L TO DATA I/P BUFFER
  518.     ANI    300Q    ;MASK
  519.     JZ    L5354    ;NO DATA JUMP
  520.     RLC    ;1 DATA JUMP
  521.     JNC    L5362
  522.     CALL    L5335    ;ASSUME 2 DATA BYTES
  523.     MOV    M,D    ;I/P MS BYTE
  524.     CALL    LB74
  525. L5326:    MOV    M,C    ;I/P LS BYTE
  526.     CALL    LB74
  527.     JMP    L6041    ;GO TO NEXT LINE
  528. L5335:    CALL    L1241    ;I/P BYTE TO BUFFER    2 DATA I/P
  529.     MOV    C,M    ;MOVE TO    C    SUBR
  530. L5341:    CALL    L1241    ;I/P BYTE TO D
  531.     MOV    D,M
  532. L5345:    CALL    LB02    ;SET H,L TO CLP
  533.     MOV    M,E    ;MOVE INSTR BYTE TO MEM
  534.     JMP    LB74    ;INCR CLP, RET
  535. L5354:    CALL    L5345    ;NO DATA, MOVE INSTR
  536.     JMP    L6041    ;BYTE TO MEM, GO TO NEXT LINE
  537. L5362:    CALL    L5341    ;1 DATA BYTE
  538.     MOV    C,D
  539.     JMP    L5326
  540. L5371:    CALL    L3277    ;WAIT FOR    MATCH ARG
  541.     JNC    L5371    ;ALPHABETIC    LETTER
  542.     PUSH    B    ;SAVE B,C
  543.     LXI    B,L4065    ;SET TO ARG TABLE
  544.     CALL    L6012    ;SWEEP TABLE TO FIND CODE
  545.     INX    B    ;GO TO ARG CODE BYTE
  546.     LDAX    B    ;MOVE TO ACC
  547.     POP    B    ;RESTORE B,C
  548.     RET
  549. L6012:    PUSH    D    ;SAVE D,E    SWEEP ARG
  550.     MVI    E,10    ;SET COUNT    TABLE SUBR
  551.     MOV    D,A    ;SAVE ACC IN D
  552. L6016:    LDAX    B    ;COMPARE BYTES
  553.     CMP    D
  554.     JNZ    L6025    ;NO GOOD, JUMP
  555.     POP    D    ;FOUND, RESTORE D,E
  556.     RET
  557. L6025:    DCR    E
  558.     JZ    L6067    ;END OF TABLE, ERROR
  559.     INX    B    ;GO TO NEXT ARG
  560.     INX    B
  561.     JMP    L6016    ;LOOP
  562. LOC:    CALL    L2251    ;LOC    PRINT CLP/
  563. L6041:    CALL    L1355    ;CRLF
  564.     LXI    H,LA000    ;O/P LS BYTE OF CLP AND /
  565.     CALL    L1323
  566.     CALL    L1372
  567.     POP    PSW    ;RESET STACK
  568.     JMP    L133    ;GO TO BEG OF LOAD SYMBOLIC
  569. DLP:    CALL    LB25    ;O/P CLP
  570.     JMP    L6041
  571. L6067:    POP    PSW    ;RESET STACK    ERROR ROUTINE
  572. L6070:    MVI    A,77Q    ;O/P
  573.     CALL    L1133
  574.     JMP    L133    ;GO TO BEG OF LOAD SYMBOLIC
  575. DPS:    CALL    L2235    ;I/P RANGE    DPS ROUTINE
  576. L6103:    SUB    A    ;CLEAR EXCEPTION FLAG    MAIN PROG
  577.     STA    LA011
  578.     CALL    LB55    ;O/P CLP/
  579.     CALL    LB66    ;O/P MEM AT CLP
  580.     CALL    L7062    ;MATCH TEST PLUS RST TEST
  581.     CALL    L7310    ;EXCEPTION TEST
  582.     CALL    L1313    ;O/P BLANK
  583.     MVI    B,6    ;SET MNEMONIC FIELD
  584.     CALL    L7010    ;O/P MNEMONIC
  585.     MVI    A,' '    ;FINISH MNEM. FIELD
  586.     CALL    L3263    ;WITH BLANK
  587.     MVI    B,3    ;SET ARG FIELD
  588.     CALL    L7107    ;O/P ARG
  589.     CALL    LC35    ;PRINTING FINISHED? IF NO, INCR CLP
  590.     LDA    LA026    ;DATA BYTE TEST
  591.     ANA    A
  592.     JZ    L6103
  593.     PUSH    PSW    ;SAVE ACC    DATA O/P
  594.     MVI    A,' '    ;FINISH ARG FIELD
  595.     CALL    L3263    ;WITH BLANK
  596.     POP    PSW    ;RESTORE ACC
  597.     DCR    A    ;1,2 DATA BYTE TEST
  598.     JZ    L6217
  599.     CALL    LB74    ;INCR CLP
  600.     CALL    L1323    ;O/P MEM AT CLP
  601.     CALL    LC06    ;DCR CLP
  602.     CALL    L1326    ;O/P MEM AT CLP
  603.     CALL    LB74    ;INCR CLP
  604. L6211:    CALL    LC35    ;FINISHED? INCR CLP
  605.     JMP    L6103    ;NEW LINE
  606. L6217:    CALL    L1313    ;O/P BLANK
  607.     CALL    L1326    ;O/P MEM AT CLP
  608.     JMP    L6211    ;NEW LINE
  609. L6230:    LXI    D,L4010    ;SET D,E TO BET FOR 2 BYTE TABLE    MATCH
  610.     MVI    A,2    ;SET TABLE FLAG (T.F.)    TEST
  611. L6235:    STA    LA030
  612.     MOV    B,A    ;SAVE ACC
  613.     CALL    L6333    ;ARG TEST
  614.     MOV    A,B    ;RESTORE ACC
  615.     ADD    E    ;INCR D,E
  616.     MOV    E,A
  617.     JNC    L6253
  618.     INR    D
  619. L6253:    LDAX    D    ;LOAD CODE INTO ACC
  620.     CMP    C    ;COMPARE WITH MEM
  621.     RZ
  622.     CALL    L6265    ;END OF TABLE?
  623.     MOV    A,B    ;LOAD ACC WITH T.F.
  624.     JMP    L6235    ;LOOP
  625. L6265:    CPI    363Q    ;2 LETTER END    END OF TABLE TEST
  626.     JZ    L6325
  627.     CPI    351Q    ;4 LETTER END
  628.     JZ    L6320
  629.     CPI    377Q    ;3 LETTER END
  630.     JZ    L6313
  631.     CPI    343Q    ;4 LETTER SECOND HALF
  632.     JZ    L3313    ;ERROR, CODE NOT FOUND
  633.     INX    D
  634.     RET
  635. L6313:    INR    B    ;SET T.F. TO 4
  636.     LXI    D,L3321    ;D,E TO BEGINNING OF 4 LET TABLE
  637.     RET
  638. L6320:    DCR    B    ;SET T.F. TO 3
  639.     LXI    D,L4217    ;SET D,E TO BEG OF 3 LET TABLE
  640.     RET
  641. L6325:    INR    B    ;SET T.F. TO 4
  642.     INR    B
  643.     LXI    D,L3376    ;SET D,E TO SEC HALF OF 4 LET TABLE
  644.     RET
  645. L6333:    LDAX    D    ;1 LET TO ACC    ARG TEST
  646.     RLC    ;ARG FLAG
  647.     RLC    ;INTO LA027
  648.     ANI    3
  649.     STA    LA027
  650.     JNZ    L6350
  651.     MOV    C,M    ;NO ARG, C HOLDS INSTR
  652.     RET
  653. L6350:    DCR    A    ;1 OR 2 ARG
  654.     JNZ    L6361
  655.     MOV    A,M    ;1 ARG DEST
  656.     ORI    70Q    ;MODIFY INSTR
  657.     MOV    C,A
  658.     RET
  659. L6361:    DCR    A    ;2 ARG OR 1 ARG SOURCE
  660.     JNZ    L6372
  661.     MOV    A,M    ;2 ARG; MODIFY INSTR
  662.     ORI    77Q
  663.     MOV    C,A
  664.     RET
  665. L6372:    MOV    A,M    ;1 ARG SOURCE
  666.     ORI    7
  667.     MOV    C,A
  668.     RET
  669. L6377:    LDA    LA030    ;T.F. TO ACC    GO TO 1 LET SUBR
  670. L7002:    DCX    D    ;LOOP UNTIL D,E
  671.     DCR    A    ;POINT TO 1 LETTER
  672.     JNZ    L7002
  673.     RET
  674. L7010:    CALL    L6377    ;GO TO FIRST LETTER    PRINT
  675.     LDA    LA030    ;T.F. TO C    MNEM. FIELD
  676.     MOV    C,A
  677.     CALL    L7050    ;PRINT FIRST LETTER
  678.     INX    D    ;SET CONDITION FOR SECOND LETTER
  679.     DCR    C
  680.     LDAX    D    ;GENERATE DATA FLAG
  681.     ANI    300Q    ;AND STORE AT LA026
  682.     RLC
  683.     RLC
  684.     STA    LA026
  685.     CALL    L7050    ;PRINT SECOND LETTER
  686. L7037:    DCR    C    ;END?
  687.     RZ
  688.     INX    D    ;NO, PRINT THE REST
  689.     CALL    L7050
  690.     JMP    L7037
  691. L7050:    LDAX    D    ;LOAD LET TO ACC    PRINT ROUT
  692.     ANI    77Q    ;CONVERT TO ASCII
  693.     ORI    100Q
  694. L7055:    CALL    L1133    ;O/P
  695.     DCR    B    ;FIELD COUNT
  696.     RET
  697. L7062:    MOV    A,M    ;CHECK    RST TEST
  698.     ANI    307Q    ;FOR RST
  699.     CPI    307Q
  700.     JNZ    L6230    ;NO
  701.     LXI    D,L5142    ;YES, SET D,E AND TF
  702.     MVI    A,3
  703.     STA    LA030
  704.     RAR    ;SET ARG FLAG
  705.     STA    LA027
  706.     RET
  707. L7107:    LDA    LA027    ;TEST FOR ARG    PRINT ARG
  708.     ANA    A
  709.     RZ    ;NO
  710.     DCR    A    ;1 ARG DEST
  711.     JZ    L7144
  712.     DCR    A    ;2 ARG
  713.     JZ    L7243
  714. L7124:    MOV    A,M    ;ASSUME 1 ARG SOURCE
  715.     ORI    370Q
  716. L7127:    PUSH    B    ;SAVE B,C
  717.     LXI    B,L4066    ;B,C POINT TO BEG OF ARG TABLE
  718.     CALL    L6012    ;SWEEP ARG TABLE
  719.     DCX    B    ;LOAD ACC WITH LETTER IN ARG TABLE
  720.     LDAX    B
  721.     POP    B    ;RESTORE B,C
  722.     JMP    L7055    ;PRINT CONTENTS OF ACC
  723. L7144:    MOV    A,M    ;1 ARG DEST
  724.     ANI    307Q    ;RST?
  725.     CPI    307Q
  726.     JNZ    L7176    ;NO
  727.     MVI    A,' '    ;YES, FINISH ARG FIELD
  728.     MVI    B,4    ;WITH BLANK
  729.     CALL    L3263
  730.     MOV    A,M    ;INSTR INTO ACC
  731.     ANI    70Q    ;CONVERT TO OCTAL AND
  732.     LXI    H,LA027    ;SEND TO MEM
  733.     MOV    M,A
  734.     CALL    L1326    ;PRINT OCTAL BYTE
  735.     RET
  736. L7176:    MOV    A,M    ;SP TEST
  737.     ANI    365Q
  738.     CPI    61Q
  739.     JZ    L7255    ;PRINT SP
  740.     ANI    361Q    ;PSW TEST
  741.     CPI    361Q    
  742.     JZ    L7270    ;PRINT PSW
  743.     MOV    C,M    ;EXCEPTION TEST
  744.     LDA    LA011
  745.     CPI    367Q
  746.     JNZ    L7230    ;NO EXCEPTION
  747.     ANA    C    ;YES, EXCEPT DECR ARG CODE BY 1
  748.     MOV    C,A
  749. L7230:    MVI    A,70Q    ;GENERATE ARG CODE
  750.     ANA    C
  751.     RRC
  752.     RRC
  753.     RRC
  754.     ORI    370Q
  755.     JMP    L7127    ;GO TO PRINT
  756. L7243:    CALL    L7176    ;DEST    2 ARG PRINT
  757.     CALL    L1313    ;PRINT BLANK
  758.     DCR    B    ;FIELD COUNT
  759.     JMP    L7124    ;SOURCE
  760. L7255:    MVI    A,'S'    ;    PRINT "SP"
  761.     CALL    L1133
  762.     MVI    A,'P'
  763.     CALL    L1133
  764.     RET
  765. L7270:    MVI    A,'P'    ;    PRINT "PSW"
  766.     CALL    L1133
  767.     MVI    A,'S'
  768.     CALL    L1133
  769.     MVI    A,'W'
  770.     CALL    L1133
  771.     RET
  772. L7310:    ADI    305Q    ;EXCEPT    EXCEPTION TEST
  773.     JZ    L7325    ;SUSPECT
  774.     INR    A
  775.     JZ    L7325
  776.     INR    A
  777.     JNZ    L7350    ;NO EXCEPT. HALT TEST
  778. L7325:    MOV    A,M    ;NO EXCEPT
  779.     CPI    72Q
  780.     RZ
  781.     ANI    10Q    ;NO EXCEPT
  782.     RZ
  783.     MVI    A,367Q    ;YES,EXCEPT.
  784.     STA    LA011    ;SET EXECPT. FLAG
  785. L7341:    LDA    LA030    ;INCR D,E TO
  786.     ADD    E    ;NEXT INSTR IN TABLE
  787.     MOV    E,A
  788.     INX    D
  789.     RET
  790. L7350:    MOV    A,M    ;HLT TEST
  791.     CPI    166Q
  792.     RNZ
  793.     SUB    A    ;HLT, SET ARG FLAG
  794.     STA    LA027    ;AND INCR D,E TO NEXT INSTR
  795.     JMP    L7341
  796. LB000:    CALL    L2227    ;FORMAT    CPY ROUT
  797.     LDA    LA016    ;PROGRAMMER?
  798.     CPI    1
  799.     JNZ    LB051    ;NO
  800.     LDA    LA000    ;YES, LOWER LIMIT TO ACC
  801.     MOV    D,A    ;L.L TO D
  802.     LDA    LA002    ;UPPER LIMIT TO ACC
  803.     SUB    D    ;UL-LL TO ACC
  804.     MOV    C,A    ;(UL-LL) TO C
  805.     LHLD    LA004    ;NEW RANGE TO H,L
  806. LB027:    MOV    A,D    ;LL TO ACC
  807.     OUT    20Q    ;DATA TO ACC
  808.     IN    2
  809.     MOV    M,A    ;DATA TO MEM
  810.     INX    H    ;INCR H,L
  811.     INR    D    ;LL=LL+1
  812.     DCR    C    ;COUNT
  813.     MVI    A,377Q    ;TEST
  814.     CMP    C
  815.     JZ    L0    ;FINISHED
  816.     JMP    LB027    ;REPEAT
  817. LB051:    LHLD    LA004    ;NO PRG, NEW RANGE TO H,L
  818.     LDA    LA000    ;(LL-NR) TO B,C
  819.     SUB    L
  820.     MOV    C,A
  821.     LDA    LA001
  822.     SBB    H
  823.     MOV    B,A
  824.     RET
  825. LB067:    JNC    LB104    ;(LL-NR) > 0?
  826.     MOV    A,C    ;MOVES UP; TWO'S COMPL OF (LL-NR)
  827.     CMA
  828.     MOV    C,A
  829.     MOV    A,B
  830.     CMA
  831.     MOV    B,A
  832.     INX    B
  833.     JMP    LB146
  834. LB104:    LXI    H,LA000    ;MOVES DOWN
  835.     MOV    A,M    ;SUBTRACT (LL-NR) FROM LL
  836.     SUB    C
  837.     MOV    E,A
  838.     INR    L
  839.     MOV    A,M
  840.     SBB    B
  841.     MOV    D,A
  842.     LHLD    LA000    ;COPY DATA
  843. LB121:    MOV    A,M    ;TO NEW LOCATION
  844.     STAX    D
  845.     INX    H
  846.     INX    D
  847.     LDA    LA002
  848.     CMP    L
  849.     JNZ    LB121
  850.     MOV    A,M
  851.     STAX    D
  852.     LDA    LA003
  853.     CMP    H
  854.     JNZ    LB121
  855.     RET
  856. LB146:    LXI    H,LA002    ;MOVES UP; (LL-NR) PLUS
  857.     MOV    A,M    ;UL INTO D,E
  858.     ADD    C
  859.     MOV    E,A
  860.     INR    L
  861.     MOV    A,M
  862.     ADC    B
  863.     MOV    D,A
  864.     LHLD    LA002    ;COPY DATA TO NEW LOC
  865. LB163:    MOV    A,M
  866.     STAX    D
  867.     DCX    H
  868.     DCX    D
  869.     LDA    LA000
  870.     CMP    L
  871.     JNZ    LB163
  872.     MOV    A,M
  873.     STAX    D
  874.     LDA    LA001
  875.     CMP    H
  876.     JNZ    LB163
  877.     RET
  878. CPY:    CALL    LB000    ;CPY ROUTINE STARTS HERE
  879.     CALL    LB067
  880.     RST    0
  881. ;    TABLE CONTAINING CODES FOR
  882. ;    SHLD LHLD STA LDA LXI
  883. LB217:    DB    042Q,052Q,062Q,072Q,071Q
  884. LB224:    LHLD    LA000    ;LL INTO H,L
  885.     CALL    LB246    ;CALCULATION
  886.     RM
  887.     LHLD    LA002    ;UL INTO H,L
  888.     CALL    LB246    ;CALCULATION
  889.     RP
  890.     POP    H    ;MOVE UP STACK
  891.     JMP    LC024    ;CHANGE THE ADDRESS
  892. LB246:    XCHG    ;CALCULATE; SUBTRACT LL, UL
  893.     LHLD    LA023    ;FROM JMP ADDRESS
  894.     INX    H
  895.     MOV    A,M
  896.     SUB    E
  897.     INX    H
  898.     MOV    A,M
  899.     SBB    D
  900.     RET
  901. LB261:    LHLD    LA012    ;MMM PLUS (UL-LL)    END
  902.     XCHG    ;INTO D,E    OF PROG?
  903.     LHLD    LA023    ;POINTER INTO H,L
  904.     MOV    A,L    ;POINTER-[MMM-(UL-LL)]>0?
  905.     SUB    E
  906.     MOV    A,H
  907.     SBB    D
  908.     RET
  909. TRN:    CALL    L2221    ;TRN ROUTINE STARTS HERE    TRN ROUT
  910.     CALL    LB051    ;UP OR DOWN?
  911.     JNC    LB324    ;MOVES UP
  912.     MOV    A,C    ;TWO'S COMPL OF LL-NR
  913.     CMA
  914.     MOV    C,A
  915.     MOV    A,B
  916.     CMA
  917.     MOV    B,A
  918.     INX    B
  919.     SUB    A    ;MOVES UP FLAG
  920.     STA    LA014
  921.     JMP    LB331
  922. LB324:    MVI    A,1    ;MOVES DOWN
  923.     STA    LA014
  924. LB331:    CALL    LC103    ;CALCULATE MMM + (UL-LL)
  925. LB334:    SHLD    LA023    ;POINTER INTO H,L
  926.     PUSH    B    ;SAVE B
  927.     CALL    L6230    ;MATCH ROUT
  928.     CALL    L7310    ;EXCEPTION ROUT
  929.     POP    B
  930.     LDAX    D    ;CODE TO LA016
  931.     STA    LA016
  932.     CALL    L6377    ;FIRST LETTER SUBR
  933.     INR    E    ;SECOND LETTER
  934.     LDAX    D    ;DATA BYTE TEST
  935.     MVI    E,300Q
  936.     ANA    E
  937.     CPI    0    ;NO DATA BYTE
  938.     JZ    LC100
  939.     CPI    100Q    ;1 DATA BYTE
  940.     JZ    LC077
  941.     LDA    LA016    ;ASSUME 2 DATA BYTES
  942.     LXI    H,LB217    ;IS IT SHLD,LHLD,STA,LDA,LXI?
  943.     MVI    E,5
  944. LC005:    CMP    M
  945.     JZ    LC073    ;YES, NO CHANGE
  946.     INR    L
  947.     DCR    E
  948.     JNZ    LC005
  949.     CALL    LB224    ;OUT OF RANGE?
  950.     JMP    LC073    ;YES, NO CHANGE
  951. LC024:    LHLD    LA023    ;CHANGE
  952.     INX    H
  953.     LDA    LA014    ;MOVES DOWN?
  954.     ANA    A
  955.     JNZ    LC061
  956.     MOV    A,M    ;MOVES UP; ADD(LL-NR)
  957.     ADD    C    ;TO ADDR OF JUMP
  958.     MOV    M,A
  959.     INX    H
  960.     MOV    A,M
  961.     ADC    B
  962.     MOV    M,A
  963. LC046:    INX    H
  964.     SHLD    LA023    ;INCREMENTED POINTER TO LA023
  965.     CALL    LB261    ;END OF PROG?
  966.     JM    LB334    ;NO, NEW LINE
  967.     RST    0
  968. LC061:    MOV    A,M    ;MOVES DOWN; SUBTRACT
  969.     SUB    C    ;(LL-NR) FROM ADDR
  970.     MOV    M,A
  971.     INX    H
  972.     MOV    A,M
  973.     SBB    B
  974.     MOV    M,A
  975.     JMP    LC046    ;NEW LINE
  976. LC073:    LHLD    LA023    ;NO CHANGE
  977.     INX    H
  978. LC077:    INX    H
  979. LC100:    JMP    LC046
  980. LC103:    PUSH    B    ;SAVE B,C
  981.     LHLD    LA002    ;UL-LL
  982.     XCHG
  983.     LHLD    LA000
  984.     MOV    A,E
  985.     SUB    L
  986.     MOV    E,A
  987.     MOV    A,D
  988.     SBB    H
  989.     MOV    D,A
  990.     LHLD    LA006    ;MMM PLUS (UL-LL)
  991.     MOV    A,E
  992.     ADD    L
  993.     MOV    L,A
  994.     MOV    A,D
  995.     ADC    H
  996.     MOV    H,A
  997.     SHLD    LA012
  998.     LHLD    LA006
  999.     POP    B    ;RESTORE B,C
  1000.     RET
  1001. PRG:    CALL    L2235    ;I/P LL, UL    PRG ROUTINE
  1002.     CALL    L1355    ;CRLF
  1003.     MVI    A,'%'    ;O/P %
  1004.     CALL    L1133
  1005.     CALL    LA01    ;I/P LETTER
  1006.     RLC
  1007.     RLC
  1008.     MOV    E,A
  1009.     LHLD    LA000    ;LL INTO H,L
  1010. LC166:    MOV    A,L    ;COMPARE ROM WITH MEM
  1011.     OUT    20Q
  1012.     IN    2
  1013.     CMP    M
  1014.     CNZ    LC225    ;PROGR IF NOT EQUAL
  1015.     LDA    LA002    ;END OF PROGRAM?
  1016.     CMP    L
  1017.     JNZ    LC221
  1018.     LDA    LA003
  1019.     CMP    H
  1020.     JNZ    LC221
  1021.     CALL    LC225    ;YES, PROGR LAST
  1022.     RST    0
  1023. LC221:    INX    H    ;NEW BYTE
  1024.     JMP    LC166
  1025. LC225:    MVI    B,1    ;PROGR 4 TIMES LONGER
  1026.     CALL    LC252
  1027.     MOV    A,B
  1028.     RLC
  1029.     RLC
  1030.     MOV    B,A
  1031. LC236:    CALL    LC252
  1032.     DCR    B
  1033.     JNZ    LC236
  1034.     MOV    A,B    ;OUTPUT NULL CHAR
  1035.     CALL    L1133
  1036.     RET
  1037. LC252:    MOV    A,M    ;PROGRAM UNTIL ROM
  1038.     CMA    ;BYTE HOLDS DESIRED
  1039.     OUT    22Q    ;DATA; MAX 255 PULSES
  1040.     MVI    A,4
  1041.     OUT    26Q
  1042.     XRA    A
  1043.     OUT    26Q
  1044.     MOV    C,E
  1045. LC266:    MVI    D,350Q
  1046. LC270:    DCR    D
  1047.     JNZ    LC270
  1048.     DCR    C
  1049.     JNZ    LC266
  1050.     IN    2
  1051.     CMP    M
  1052.     RZ
  1053.     INR    B
  1054.     JNZ    LC252
  1055.     CALL    LB25
  1056.     MVI    A,77Q
  1057.     CALL    L1133
  1058.     RST    0
  1059. L3321:    DB    003Q,201Q,214Q,014Q,315Q,120Q,025Q,223Q
  1060.     DB    010Q,375Q,030Q,003Q,210Q,007Q,353Q,023Q
  1061.     DB    210Q,214Q,004Q,042Q,014Q,210Q,214Q,004Q
  1062.     DB    052Q,123Q,024Q,201Q,030Q,072Q,114Q,004Q
  1063.     DB    301Q,030Q,072Q,030Q,003Q,210Q,007Q,353Q
  1064.     DB    030Q,024Q,210Q,014Q,343Q
  1065. L3376:    DB    023Q,020Q,210Q
  1066.     DB    014Q,371Q,020Q,003Q,210Q,014Q,351Q
  1067. L4010:    DB    012Q
  1068.     DB    203Q,332Q,012Q,232Q,312Q,012Q,220Q,362Q
  1069.     DB    012Q,215Q,372Q,003Q,203Q,334Q,003Q,232Q
  1070.     DB    314Q,003Q,220Q,364Q,003Q,215Q,374Q,022Q
  1071.     DB    003Q,330Q,022Q,032Q,310Q,022Q,020Q,360Q
  1072.     DB    022Q,015Q,370Q,011Q,116Q,333Q,005Q,011Q
  1073.     DB    373Q,004Q,011Q,363Q
  1074. L4065:    DB    102Q
  1075. L4066:    DB    370Q,103Q,371Q
  1076.     DB    104Q,372Q,105Q,373Q,110Q,374Q,114Q,375Q
  1077.     DB    115Q,376Q,123Q,376Q,120Q,376Q,101Q,377Q
  1078. L4111:
  1079.     DB    'XQT'
  1080.     DW    XQT
  1081.     DB    'LOC'
  1082.     DW    LOC
  1083.     DB    'DPO'
  1084.     DW    DPO
  1085.     DB    'LDO'
  1086.     DW    LDO
  1087.     DB    'DLP'
  1088.     DW    DLP
  1089.     DB    'EDT'
  1090.     DW    EDT
  1091.     DB    'SBP'
  1092.     DW    SBP
  1093.     DB    'CBP'
  1094.     DW    CBP
  1095.     DB    'DPS'
  1096.     DW    DPS
  1097.     DB    'CPY'
  1098.     DW    CPY
  1099.     DB    'TRN'
  1100.     DW    TRN
  1101.     DB    'PRG'
  1102.     DW    PRG
  1103.     DB    0,0,0
  1104.     DW    0
  1105.     DB    0,0,0
  1106.     DW    0
  1107. L4217:    DB    003Q,015Q
  1108.     DB    003Q,077Q,215Q,017Q,026Q,177Q,010Q,014Q
  1109.     DB    024Q,166Q,115Q,126Q,011Q,076Q,111Q,016Q
  1110.     DB    022Q,074Q,104Q,003Q,022Q,075Q,301Q,004Q
  1111.     DB    004Q,207Q,301Q,004Q,003Q,217Q,323Q,025Q
  1112.     DB    002Q,227Q,323Q,002Q,002Q,237Q,301Q,016Q
  1113.     DB    001Q,247Q,330Q,022Q,001Q,257Q,317Q,022Q
  1114.     DB    001Q,267Q,303Q,015Q,020Q,277Q,001Q,104Q
  1115.     DB    011Q,306Q,001Q,103Q,011Q,316Q,023Q,125Q
  1116.     DB    011Q,326Q,023Q,102Q,011Q,336Q,001Q,116Q
  1117.     DB    011Q,346Q,030Q,122Q,011Q,356Q,017Q,122Q
  1118.     DB    011Q,366Q,003Q,120Q,011Q,376Q,022Q,014Q
  1119.     DB    003Q,007Q,022Q,022Q,003Q,017Q,022Q,001Q
  1120.     DB    014Q,027Q,022Q,001Q,022Q,037Q,012Q,215Q
  1121.     DB    020Q,303Q,012Q,216Q,003Q,322Q,012Q,216Q
  1122.     DB    032Q,302Q,012Q,220Q,005Q,352Q,012Q,220Q
  1123.     DB    017Q,342Q,003Q,216Q,003Q,324Q,003Q,216Q
  1124.     DB    032Q,304Q,003Q,220Q,005Q,354Q,003Q,220Q
  1125.     DB    017Q,344Q,022Q,005Q,024Q,311Q,022Q,016Q
  1126.     DB    003Q,320Q,022Q,016Q,032Q,300Q,022Q,020Q
  1127.     DB    005Q,350Q,022Q,020Q,017Q,340Q,017Q,125Q
  1128.     DB    024Q,323Q,014Q,204Q,001Q,072Q,120Q,017Q
  1129.     DB    020Q,371Q,023Q,224Q,001Q,062Q,114Q,230Q
  1130.     DB    011Q,071Q,104Q,001Q,104Q,071Q,111Q,016Q
  1131.     DB    030Q,073Q,104Q,003Q,130Q,073Q,003Q,015Q
  1132.     DB    001Q,057Q,023Q,024Q,003Q,067Q,004Q,001Q
  1133.     DB    001Q,047Q,016Q,017Q,020Q,000Q,122Q,023Q
  1134.     DB    024Q
  1135. L5142:    DB    377Q
  1136. LA000:    DS    1
  1137. LA001:    DS    1
  1138. LA002:    DS    1
  1139. LA003:    DS    1
  1140. LA004:    DS    1
  1141. LA005:    DS    1
  1142. LA006:    DS    1
  1143. LA007:    DS    1
  1144. LA010:    DS    1
  1145. LA011:    DS    1
  1146. LA012:    DS    1
  1147. LA013:    DS    1
  1148. LA014:    DS    2
  1149. LA016:    DS    1
  1150. LA017:    DS    1
  1151. LA020:    DS    1
  1152. LA021:    DS    1
  1153. LA022:    DS    1
  1154. LA023:    DS    1
  1155. LA024:    DS    2
  1156. LA026:    DS    1
  1157. LA027:    DS    1
  1158. LA030:    DS    50Q
  1159. LA100:    DS    2
  1160. LA102:    DS    2
  1161. LA104:    DS    2
  1162. LA106:    DS    2
  1163. LA110:    DS    2
  1164. LA112:    DS    2
  1165.     END
  1166.