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

  1.     ORG    0F000H
  2. ;    CUTS SOURCE
  3. ;    R.J.S.    08/27/77
  4. ;
  5. START    MOV    A,A
  6. INIT    JMP    STRTA
  7. RETRN    JMP    COMND
  8. FOPEN    JMP    BOPEN
  9. FCLOS    JMP    PCLOS
  10. RDBYT    JMP    RTBYT
  11. WRBYT    JMP    WTBYT
  12. RDBLK    JMP    RTAPE
  13. WRBLK    JMP    WTAPE
  14. ;
  15. SOUT    LDA    OPORT
  16. AOUT    JMP    OUTPR
  17. SINP    LDA    IPORT
  18. AINP    EQU    $
  19. ;
  20.     PUSH    H
  21.     LXI    H,ITAB
  22. IOPRC    ANI    3
  23.     RLC
  24.     ADD    L
  25.     MOV    L,A
  26.     JMP    DISPT
  27. ;
  28. OUTPR    EQU    $
  29.     PUSH    H
  30.     LXI    H,OTAB
  31.     JMP    IOPRC
  32. ;
  33. KREA1    EQU    $
  34.     IN    STAPT
  35.     CMA
  36.     ANI    KDR
  37.     RZ
  38.     IN    KDATA
  39.     RET
  40. ;
  41. SREA1    EQU    $
  42.     IN    STAPT
  43.     ANI    SDR
  44.     RZ
  45.     IN    SDATA
  46.     ANI    7FH
  47.     RET
  48. ;
  49. SEROT    EQU    $
  50.     IN    STAPT
  51.     RAL
  52.     JC    SEROT
  53.     MOV    A,B
  54.     OUT    SDATA
  55.     RET
  56. ;
  57. PARIT    EQU    $
  58.     IN    STAPT
  59.     CMA
  60.     ANI    PDR
  61.     RZ
  62.     IN    PDATA
  63.     RET
  64. ;
  65. PAROT    EQU    $
  66.     IN    STAPT
  67.     ANI    PXDR
  68.     JNZ    PAROT
  69.     MOV    A,B
  70.     OUT    PDATA
  71.     RET
  72. ;
  73. ERRIT    EQU    $
  74.     PUSH    H
  75.     LHLD    UIPRT
  76.     JMP    ERRO1
  77. ERROT    EQU    $
  78.     PUSH    H
  79.     LHLD    UOPRT
  80. ERRO1    EQU    $
  81.     MOV    A,L
  82.     ORA    H
  83.     JNZ    DISP1
  84.     JMP    STRTD
  85. ;
  86. ;
  87. VDMO1    EQU    $
  88.     PUSH    H
  89.     PUSH    D
  90.     PUSH    B
  91. ;
  92.     LDA    ESCFL
  93.     ORA    A
  94.     JNZ    ESCS
  95.     MOV    A,B
  96.     ANI    7FH
  97.     MOV    B,A
  98.     JZ    GOBK
  99.     LXI    H,TBL
  100.     CALL    TSRCH
  101. GOBACK    EQU    $
  102.     CALL    VDADD
  103.     MOV    A,M
  104.     ORI    80H
  105.     MOV    M,A
  106.     LHLD    SPEED-1
  107.     INR    L
  108.     XRA    A
  109. TIMER    DCX    H
  110.     CMP    H
  111.     JNZ    TIMER
  112. GOBK    POP    B
  113.     POP    D
  114.     POP    H
  115.     RET
  116. ;
  117. NEXT    EQU    $
  118.     INX    H
  119.     INX    H
  120. ;
  121. TSRCH    MOV    A,M
  122.     ORA    A
  123.     JZ    CHAR
  124.     CMP    B
  125.     INX    H
  126.     JNZ    NEXT
  127.     PUSH    H
  128.     CALL    CREM
  129.     XTHL
  130.     JMP    DISPT
  131. ;
  132. CHAR    EQU    $
  133.     MOV    A,B
  134.     CPI    7FH
  135.     RZ
  136. ;
  137. OCHAR    CALL    VDADD
  138.     MOV    M,B
  139.     LDA    NCHAR
  140.     CPI    63
  141.     JC    OK
  142.     LDA    LINE
  143.     CPI    15
  144.     JNZ    OK
  145. ;    END OF SCREEN-ROLL UP 1
  146. SCROLL    XRA    A
  147.     STA    NCHAR
  148. SROL    MOV    C,A
  149.     CALL    VDAD
  150.     XRA    A
  151.     CALL    CLIN1
  152.     LDA    BOT
  153.     INR    A
  154.     ANI    0FH
  155.     JMP    ERAS3
  156. ;INCREMENT LINE COUNTER IF NECESSARY
  157. OK    LDA    NCHAR
  158.     INR    A
  159.     ANI    03FH
  160.     STA    NCHAR
  161.     RNZ
  162. PDOWN    EQU    $
  163.     LDA    LINE
  164.     INR    A
  165. CURSC    ANI    0FH
  166. CUR    STA    LINE
  167.     RET
  168. ;ERASE    LINE
  169. PERSE    LXI    H,VDMEM
  170.     MVI    M,80H+' '
  171.     INX    H
  172. ERAS1    EQU    $
  173.     MVI    M,' '
  174.     INX    H
  175.     MOV    A,H
  176.     CPI    0D0H
  177.     JC    ERAS1
  178.     STC
  179. PHOME    EQU    $
  180.     MVI    A,0
  181.     STA    LINE
  182.     STA    NCHAR
  183.     RNC
  184. ERAS3    OUT    DSTAT
  185.     STA    BOT
  186.     RET
  187. CLIN2    EQU    $
  188.     LDA    OPORT
  189.     ORA    A
  190.     RNZ
  191. CLINE    CALL    VDADD
  192.     LDA    NCHAR
  193. CLIN1    CPI    64
  194.     RNC
  195.     MVI    M,' '
  196.     INX    H
  197.     INR    A
  198.     JMP    CLIN1
  199. ;    ROUT TO MOVE CURSOR UP 1 LINE
  200. PUP    LDA    LINE
  201.     DCR    A
  202.     JMP    CURSC
  203. ;    MOVE CUR LEFT 1
  204. PLEFT    LDA    NCHAR
  205.     DCR    A
  206. PCUR    EQU    $
  207.     ANI    03FH
  208.     STA    NCHAR
  209.     RET
  210. ;    CURSOR RIGHT 1
  211. PRIT    LDA    NCHAR
  212.     INR    A
  213.     JMP    PCUR
  214. ;    ROUTINE TO CALCULATE SCREEN ADDR
  215. VDADD    LDA    NCHAR
  216.     MOV    C,A
  217. VDAD2    LDA    LINE
  218. VDAD    MOV    L,A
  219.     LDA    BOT
  220.     ADD    L
  221.     RRC
  222.     RRC
  223.     MOV    L,A
  224.     ANI    3
  225.     ADI    VDMEM1
  226.     MOV    H,A
  227.     MOV    A,L
  228.     ANI    0C0H
  229.     ADD    C
  230.     MOV    L,A
  231.     RET
  232. ;    ROUTINT TO REMOVE CURSOR
  233. CREM    CALL    VDADD
  234.     MOV    A,M
  235.     ANI    07FH
  236.     MOV    M,A
  237.     RET
  238. ;    ROUTINE TO BACKKSPACE
  239. PBACK    CALL    PLEFT
  240.     CALL    VDADD
  241.     MVI    M,' '
  242.     RET
  243. ;    PROCESS CARRIAGE RETURN
  244. PCR    CALL    CLINE
  245.     JMP    PCUR
  246. ;    PROCESS LF
  247. PLF    LDA    LINE
  248.     INR    A
  249.     ANI    15
  250.     JNZ    CUR
  251.     JMP    SROL
  252. ;    SET1 ESCAPE PROCESS FLAG
  253. PESC    MVI    A,-1
  254.     STA    ESCFL
  255.     RET
  256. ;    PROCESS ESCAPE SEQUENCE
  257. ESCS    CALL    CREM
  258.     CALL    ESCSP
  259.     JMP    GOBACK
  260. ESCSP    LDA    ESCFL
  261.     CPI    -1
  262.     JZ    SECOND
  263. ;    PROCESS THIRD CHR OF ESC SEQUENCE
  264.     LXI    H,ESCFL
  265.     MVI    M,0
  266.     CPI    2
  267.     JC    SET1X
  268.     JZ    SET1Y
  269.     CPI    8
  270.     JZ    STSPD
  271.     CPI    9
  272.     JC    OCHAR
  273.     RNZ
  274. ;    TAB ABSOLUTE TO VALUE IN REG B
  275. SET1X    MOV    A,B
  276.     JMP    PCUR
  277. ;    SET1 CUR TO LINE "B"
  278. SET1Y    MOV    A,B
  279.     JMP    CURSC
  280. ;    PROC SECOND CHR OF ESC SEQUENCE
  281. SECOND    MOV    A,B
  282.     CPI    3
  283.     JZ    CURET
  284.     CPI    4
  285.     JNZ    ARET2
  286. ARET    MOV    B,H
  287.     MOV    C,L
  288. ARET1    POP    H
  289.     POP    D
  290.     PUSH    B
  291.     PUSH    H
  292.     XRA    A
  293. ARET2    STA    ESCFL
  294.     RET
  295. ;    RET PRESENT SCREEN PARAMETERS IN BC
  296. CURET    LXI    H,NCHAR
  297.     MOV    B,M
  298.     INX    H
  299.     MOV    C,M
  300.     JMP    ARET1
  301. ;
  302. ;    START UP SYSTEM
  303. ;
  304. STRTA    XRA    A
  305.     MOV    C,A
  306.     LXI    H,DFLTS
  307. CLERA    MOV    M,A
  308.     INX    H
  309.     INR    C
  310.     JNZ    CLERA
  311. ;    DETERMINE DEFAULT PORTS
  312.     IN    SENSE
  313.     MOV    B,A
  314.     ANI    3
  315.     STA    DFLTS+1
  316.     ORA    A
  317.     JNZ    STRTB
  318.     LXI    SP,SYSTP
  319.     CALL    PERSE
  320. STRTB    EQU    $
  321.     LXI    H,0
  322.     CPI    3
  323.     JZ    STRTC
  324.     SHLD    UOPRT
  325. STRTC    EQU    $
  326.     MOV    A,B
  327.     RAR
  328.     RAR
  329.     ANI    3
  330.     STA    DFLTS
  331.     CPI    3
  332.     JZ    STRTD
  333.     SHLD    UIPRT
  334. STRTD    EQU    $
  335.     LHLD    DFLTS
  336.     SHLD    IPORT
  337. COMN1    EQU    $
  338.     XRA    A
  339.     OUT    TAPPT
  340. ;
  341. ;    COMMAND MODE
  342. ;
  343. ;    PROCESS COMANDS
  344. ;
  345. COMND    LXI    SP,SYSTP
  346.     CALL    PROMPT
  347.     CALL    GCLIO
  348.     CALL    COPRC
  349.     JMP    COMND
  350. ;    READS COMMAND LINE
  351. GCLIO    EQU    $
  352.     LXI    H,INLIN-1
  353.     MVI    M,7
  354.     INX    H
  355.     SHLD    INPTR
  356.     MVI    M,80
  357. GCLI1    EQU    $
  358.     MVI    M,' '
  359.     INX    H
  360.     DCR    A
  361.     JNZ    GCLI1
  362. GCLIN    CALL    SINP
  363.     JZ    GCLIN
  364.     ANI    7FH
  365.     JZ    STRTD
  366.     MOV    B,A
  367.     CPI    CR
  368.     JZ    CLIN2
  369.     CPI    LF
  370.     RZ
  371.     LHLD    INPTR
  372.     CPI    7FH
  373.     JNZ    GCLI2
  374.     MVI    B,BACKS
  375.     DCX    H
  376.     MVI    A,'G'-40H
  377.     CMP    M
  378.     JNZ    GCLI3
  379.     MOV    B,A
  380. GCLI2    EQU    $
  381.     MOV    M,B
  382.     INX    H
  383. GCLI3    EQU    $
  384.     SHLD    INPTR
  385. CONT    CALL    SOUT
  386.     JMP    GCLIN
  387. ;    FIND AND PROCESS COMAND
  388. COPRC    EQU    $
  389.     CALL    STUP
  390.     XCHG
  391.     LXI    H,START
  392.     PUSH    H
  393.     CALL    SCHR
  394.     JZ    ERR1
  395.     XCHG
  396.     LXI    D,COMTAB
  397.     CALL    FDCOM
  398.     CZ    FDCOU
  399. DISPO    EQU    $
  400.     JZ    ERR2
  401.     INX    D
  402.     XCHG
  403. ;    GOES TO CONTENTS HL
  404. DISPT    EQU    $
  405.     MOV    A,M
  406.     INX    H
  407.     MOV    H,M
  408.     MOV    L,A
  409. DISP1    EQU    $
  410.     XTHL
  411.     MOV    A,L
  412.     RET
  413. ;
  414. ;
  415. FDCOU    EQU    $
  416.     LXI    D,CUTAB
  417. FDCOM    LDAX    D
  418.     ORA    A
  419.     RZ
  420.     PUSH    H
  421.     CMP    M
  422.     INX    D
  423.     JNZ    NCOM
  424.     INX    H
  425.     LDAX    D
  426.     CMP    M
  427.     JNZ    NCOM
  428.     POP    H
  429.     ORA    A
  430.     RET
  431. NCOM    INX    D
  432.     INX    D
  433.     INX    D
  434.     POP    H
  435.     JMP    FDCOM
  436. ;    SET1 UP TO PROCESS INPUT LINE
  437. STUP    EQU    $
  438.     LXI    H,INLIN
  439.     SHLD    INPTR
  440.     LDA    OPORT
  441.     ORA    A
  442.     RNZ
  443.     CALL    CREM
  444.     MVI    C,1
  445.     JMP    VDAD2
  446. ;    COMMAND TABLE
  447. COMTAB    EQU    $
  448.     DB    'DU'
  449.     DW    DUMP
  450.     DB    'EN'
  451.     DW    ENTER
  452.     DB    'EX'
  453.     DW    EXEC
  454.     DB    'GE'
  455.     DW    TLOAD
  456.     DB    'SA'
  457.     DW    TSAVE
  458.     DB    'XE'
  459.     DW    TXEQ
  460.     DB    'CA'
  461.     DW    TLIST
  462.     DB    'SE'
  463.     DW    SET1
  464.     DB    'CU'
  465.     DW    CUSET1
  466.     DB    0
  467. ;    DISPLAY    DRIVER COMMAND TABLE
  468. TBL    DB    CLEAR 
  469.     DW    PERSE
  470.     DB    UP
  471.     DW    PUP
  472.     DB    DOWN
  473.     DW    PDOWN
  474.     DB    LEFT
  475.     DW    PLEFT
  476.     DB    RIGHT
  477.     DW    PRIT
  478.     DB    HOME
  479.     DW    PHOME
  480.     DB    CR
  481.     DW    PCR
  482.     DB    LF
  483.     DW    PLF
  484.     DB    BACKS
  485.     DW    PBACK
  486.     DB    ESC
  487.     DW    PESC
  488.     DB    0
  489. ;    OUTPUT DEVICE TABLE
  490. OTAB    DW    VDMO1
  491.     DW    SEROT
  492.     DW    PAROT
  493.     DW    ERROT
  494. ;    INPUT DEVICE TABLE
  495. ITAB    DW    KREA1
  496.     DW    SREA1
  497.     DW    PARIT
  498.     DW    ERRIT
  499. ;    SECONDARY COMMAND TABLE FOR SET1
  500. SETAB    DB    'TA'
  501.     DW    TASPD
  502.     DB    'S='
  503.     DW    DISPD
  504.     DB    'I='
  505.     DW    SET1IN
  506.     DB    'O='
  507.     DW    SET1OT
  508.     DB    'CI'
  509.     DW    SET1CI
  510.     DB    'CO'
  511.     DW    SET1CO
  512.     DB    'XE'
  513.     DW    SET1XQ
  514.     DB    'TY'
  515.     DW    SET1TY
  516.     DB    'N='
  517.     DW    SET1NU
  518.     DB    'CR'
  519.     DW    SET1CR
  520.     DB    0
  521. ;    OUT A CR FOLLOWED BY PROMPT
  522. PROMPT    CALL    CRLF
  523.     MVI    B,'>'
  524.     JMP    SOUT
  525. CRLF    MVI    B,LF
  526.     CALL    SOUT
  527.     MVI    B,CR
  528.     CALL    SOUT
  529.     LDA    NUCNT
  530.     MOV    C,A
  531. NULOT    DCR    C
  532.     RM
  533.     XRA    A
  534.     CALL    OUTH
  535.     JMP    NULOT
  536. ;    SCAN OVER UP TO 12 CHARS LOOKINF FOR BLANK
  537. SBLK    MVI    C,12
  538. SBLK1    LDAX    D
  539.     CPI    BLANK
  540.     JZ    SCHR
  541.     INX    D
  542.     CPI    '='
  543.     JZ    SCHR
  544.     DCR    C
  545.     JNZ    SBLK1
  546.     RET
  547. ; SCAN PAST UP TO 10 BLANK CHARS FO A NON BLANK CHAR
  548. SCHR    MVI    C,10
  549. SCHR1    LDAX    D
  550.     CPI    SPACE
  551.     RNZ
  552.     INX    D
  553.     DCR    C
  554.     RZ
  555.     JMP    SCHR1
  556. ;
  557. SCONV    CALL    SBLK
  558.     JZ    ERR1
  559. ;    ASCII TO BINARY
  560. SHEX    LXI    H,0
  561. SHE1    LDAX    D
  562.     CPI    20H
  563.     RZ
  564.     CPI    '/'
  565.     RZ
  566.     CPI    ':'
  567.     RZ
  568. HCONV    DAD    H
  569.     DAD    H
  570.     DAD    H
  571.     DAD    H
  572.     CALL    HCOV1
  573.     JNC    ERR1
  574.     ADD    L
  575.     MOV    L,A
  576.     INX    D
  577.     JMP    SHE1
  578. HCOV1    SUI    48
  579.     CPI    10
  580.     RC
  581.     SUI    7
  582.     CPI    10H
  583.     RET
  584. ;
  585. PSCAN    EQU    $
  586.     CALL    SBLK
  587.     RZ
  588.     CALL    SHEX
  589.     RET
  590. ;
  591. ;    DUMP COMMAND
  592. ;
  593. DUMP    EQU    $
  594.     CALL    SCONV
  595.     PUSH    H
  596.     CALL    PSCAN
  597.     POP    D
  598.     XCHG
  599. DLOOP    CALL    CRLF
  600.     CALL    ADOUT
  601.     CALL    BOUT
  602.     MVI    C,16
  603. DLP1    MOV    A,M
  604.     PUSH    B
  605.     CALL    HBOUT
  606.     MOV    A,H
  607.     CMP    D
  608.     JC    DLP1A
  609.     MOV    A,L
  610.     CMP    E
  611.     JNC    COMND
  612. DLP1A    EQU    $
  613.     POP    B
  614.     INX    H
  615.     DCR    C
  616.     JNZ    DLP1
  617.     JMP    DLOOP
  618. ;    OUT HL AS HEX 16 BIT VALUE
  619. ADOUT    MOV    A,H
  620.     CALL    HEOUT
  621.     MOV    A,L
  622. HBOUT    CALL    HEOUT
  623.     CALL    SINP
  624.     JZ    BOUT
  625.     ANI    7FH
  626.     JZ    COMND
  627.     CPI    ' '
  628.     JNZ    BOUT
  629. WTLP1    CALL    SINP
  630.     JZ    WTLP1
  631. BOUT    MVI    B,' '
  632.     JMP    SOUT
  633. HEOUT    MOV    C,A
  634.     RRC
  635.     RRC
  636.     RRC
  637.     RRC
  638.     CALL    HEOU1
  639.     MOV    A,C
  640. HEOU1    ANI    0FH
  641.     ADI    48
  642.     CPI    58
  643.     JC    OUTH
  644.     ADI    7
  645. OUTH    MOV    B,A
  646.     JMP    SOUT
  647. ;    ENTR COMMAND
  648. ENTER    CALL    SCONV
  649.     PUSH    H
  650. ENLOP    CALL    CRLF
  651.     MVI    B,':'
  652.     CALL    SOUT
  653.     CALL    GCLIO
  654.     CALL    STUP
  655.     XCHG
  656. ENLO1    MVI    C,3
  657.     CALL    SCHR1
  658.     JZ    ENLOP
  659.     CPI    '/'
  660.     JZ    COMND
  661.     CALL    SHEX
  662.     CPI    ':'
  663.     JZ    ENLO3
  664.     MOV    A,L
  665.     POP    H
  666.     MOV    M,A
  667.     INX    H
  668.     PUSH    H
  669.     JMP    ENLO1
  670. ENLO3    XTHL
  671.     INX    D
  672.     JMP    ENLO1
  673. ;    EXECUTE COMMAND
  674. EXEC    CALL    SCONV
  675. EXEC1    EQU    $
  676.     PUSH    H
  677.     LXI    H,START
  678.     RET
  679. ;
  680. NAMEO    EQU    $
  681.     LXI    H,THEAD
  682. NAME    CALL    SBLK
  683.     MVI    B,6
  684. NAME1    LDAX    D
  685.     CPI    ' '
  686.     JZ    NFIL
  687.     CPI    '/'
  688.     JZ    NFIL
  689.     MOV    M,A
  690.     INX    D
  691.     INX    H
  692.     DCR    B
  693.     JNZ    NAME1
  694. ;    ERROR HANDLER
  695. ERR1    XCHG
  696. ERR2    MVI    M,'?'
  697.     LDA    OPORT
  698.     ORA    A
  699.     JZ    COMND
  700.     CALL    CRLF
  701.     MVI    B,'?'
  702.     CALL    SOUT
  703.     JMP    COMND
  704. ;
  705. NFIL    MVI    M,0
  706.     INX    H
  707.     DCR    B
  708.     JNZ    NFIL
  709.     CPI    '/'
  710.     MVI    A,1
  711.     JNZ    DEFLT
  712.     INX    D
  713.     CALL    SCHR
  714.     SUI    '0'
  715. DEFLT    EQU    $
  716.     ANI    1
  717.     MVI    A,TAPE1
  718.     JNZ    STUNT
  719.     RAR
  720. STUNT    STA    FNUMF
  721.     RET
  722. ;    XEQ & GET
  723. TXEQ    DB    3EH
  724. TLOAD    XRA    A
  725.     PUSH    PSW
  726.     LXI    H,DHEAD
  727.     CALL    NAME
  728.     LXI    H,0
  729.     CALL    PSCAN
  730. TLOA2    XCHG
  731.     LXI    H,DHEAD
  732.     MOV    A,M
  733.     ORA    A
  734.     JNZ    TLOA3
  735.     LXI    H,THEAD
  736. TLOA3    PUSH    H
  737.     CALL    ALOAD
  738.     POP    H
  739.     CALL    RTAPE
  740.     JC    TAERR
  741.     CALL    NAOUT
  742.     POP    PSW
  743.     ORA    A
  744.     RZ
  745.     LDA    HTYPE
  746.     ORA    A
  747.     JM    TAERR
  748.     LDA    THEAD+5
  749.     ORA    A
  750.     JNZ    TAERR
  751.     LHLD    XEQAD
  752.     JMP    EXEC1
  753. ;    SAVE PROGRAMS ON CASSET1TE
  754. TSAVE    EQU    $
  755.     CALL    NAMEO
  756.     CALL    SCONV
  757.     PUSH    H
  758.     CALL    SCONV
  759.     XTHL
  760.     PUSH    H
  761.     CALL    PSCAN
  762.     SHLD    LOADR
  763.     POP    H
  764.     POP    D
  765.     PUSH    H
  766.     MOV    A,E
  767.     SUB    L
  768.     MOV    L,A
  769.     MOV    A,D
  770.     SBI    0
  771.     SUB    H
  772.     MOV    H,A
  773.     INX    H
  774.     SHLD    BLOCK
  775.     PUSH    H
  776.     CALL    ALOAD
  777.     LXI    H,THEAD
  778.     CALL    WHEAD
  779.     POP    D
  780.     POP    H
  781.     JMP    WTAP1
  782. ;    OUTPUT ERROR AND HEADER
  783. TAERR    CALL    CRLF
  784.     MVI    D,6
  785.     LXI    H,ERRM
  786.     CALL    NLOOP
  787.     CALL    NAOUT
  788.     JMP    COMN1
  789. ERRM    DB    'ERROR !'
  790. ;    CAT COMMAND
  791. TLIST    EQU    $
  792.     CALL    NAMEO
  793.     CALL    CRLF
  794. LLIST    CALL    ALOAD
  795.     MVI    B,1
  796.     CALL    TON
  797. LIST1    CALL    RHEAD
  798.     JC    COMN1
  799.     JNZ    LIST1
  800.     CALL    NAOUT
  801.     JMP    LLIST
  802. ;
  803. ALOAD    LXI    H,FNUMF
  804.     LDA    TSPD
  805.     ORA    M
  806.     RET
  807. ;
  808. NAOUT    MVI    D,8
  809.     LXI    H,THEAD-1
  810.     CALL    NLOOP
  811.     CALL    BOUT
  812.     LHLD    LOADR
  813.     CALL    ADOUT
  814.     LHLD    BLOCK
  815.     CALL    ADOUT
  816.     JMP    CRLF
  817. NLOOP    MOV    A,M
  818.     ORA    A
  819.     JNZ    CHRLI
  820.     MVI    A,' '
  821. CHRLI    EQU    $
  822.     CALL    OUTH
  823.     INX    H
  824.     DCR    D
  825.     JNZ    NLOOP
  826.     RET
  827. ;    SET1 COMMAND
  828. SET1    CALL    SBLK
  829.     JZ    ERR1
  830.     PUSH    D
  831.     CALL    SCONV
  832.     XTHL
  833.     LXI    D,SETAB
  834.     CALL    FDCOM
  835.     JMP    DISPO
  836. ;    TAPE SPEED
  837. TASPD    EQU    $
  838.     ORA    A
  839.     JZ    SET1SP
  840.     MVI    A,32
  841. SET1SP    STA    TSPD
  842.     RET
  843. STSPD    EQU    $
  844.     MOV    A,B
  845. DISPD    EQU    $
  846.     STA    SPEED
  847.     RET
  848. SET1IN    EQU    $
  849.     STA    IPORT
  850.     RET
  851. SET1OT    EQU    $
  852.     STA    OPORT
  853.     RET
  854. SET1CI    EQU    $
  855.     SHLD    UIPRT
  856.     RET
  857. SET1CO    EQU    $
  858.     SHLD    UOPRT
  859.     RET
  860. SET1TY    EQU    $
  861.     STA    HTYPE
  862.     RET
  863. SET1XQ    EQU    $
  864.     SHLD    XEQAD
  865.     RET
  866. SET1NU    EQU    $
  867.     STA    NUCNT
  868.     RET
  869. SET1CR    EQU    $
  870.     STA    IGNCR
  871.     RET
  872. CUSET1    EQU    $
  873.     CALL    NAMEO
  874.     LXI    H,COMND
  875.     CALL    PSCAN
  876.     PUSH    H
  877.     LXI    H,THEAD
  878.     CALL    FDCOU
  879.     JZ    CUSE2
  880.     DCX    D
  881.     MVI    M,0
  882. CUSE2    EQU    $
  883.     MOV    A,M
  884.     STAX    D
  885.     INX    D
  886.     INX    H
  887.     MOV    A,M
  888.     STAX    D
  889.     INX    D
  890.     POP    H
  891.     XCHG
  892.     MOV    M,E
  893.     INX    H
  894.     MOV    M,D
  895.     RET
  896. ;    CUTTER TAPE ROUTINES
  897. ;
  898. BOPEN    PUSH    H
  899.     CALL    LFCB
  900.     JNZ    TERE2
  901.     MVI    M,1
  902.     INX    H
  903.     MOV    M,A
  904.     INX    H
  905.     MOV    M,A
  906.     LXI    D,FBUF1
  907.     LDA    FNUMF
  908.     ADD    D
  909.     MOV    D,A
  910. UBUF    POP    B
  911.     ORA    A
  912.     JMP    PSTOR
  913. ;    ERROR RETURNS
  914. TERE2    POP    H
  915. TERE1    POP    D
  916. TEREO    XRA    A
  917.     STC
  918.     RET
  919. EOFER    DCR    A
  920.     STC
  921.     POP    D
  922.     RET
  923. ;
  924. ;
  925. PCLOS    CALL    LFCB
  926.     RZ
  927.     ORA    A
  928.     INR    A
  929.     MVI    M,0
  930.     RZ
  931. ;
  932.     INX    H
  933.     INX    H
  934.     MOV    A,M
  935.     CALL    PLOAD
  936.     PUSH    B
  937.     LXI    H,BLKOF
  938.     DAD    B
  939.     ORA    A
  940.     JZ    EOFW
  941. ;
  942.     PUSH    H
  943.     MOV    M,A
  944.     INX    H
  945.     MVI    M,0
  946.     INX    H
  947.     MOV    M,E
  948.     INX    H
  949.     MOV    M,D
  950.     MOV    H,B
  951.     MOV    L,C
  952.     CALL    WFBLK
  953.     POP    H
  954. EOFW    XRA    A
  955.     MOV    M,A
  956.     INX    H
  957.     MOV    M,A
  958.     POP    H
  959.     JMP    WFBLK
  960. ;
  961. LFCB    LXI    H,FCBAS
  962.     RAR
  963.     ANI    1
  964.     STA    FNUMF
  965.     JZ    LFCB1
  966.     LXI    H,FCBA2
  967. LFCB1    EQU    $
  968.     MOV    A,M
  969.     ORA    A
  970.     STC
  971.     RET
  972. ;    READ TAPE BYTE
  973. RTBYT    CALL    LFCB
  974.     RZ
  975.     INR    A
  976.     JM    TEREO
  977.     MVI    M,-1
  978.     INX    H
  979.     MOV    A,M
  980.     PUSH    H
  981.     INX    H
  982.     CALL    PLOAD
  983.     POP    H
  984.     ORA    A
  985.     JNZ    GTBYT
  986. ;
  987. RDNBLK    PUSH    D
  988.     PUSH    H
  989.     INX    H
  990.     CALL    PHEAD
  991.     CALL    RFBLK
  992.     JC    TERE2
  993.     POP    H
  994.     MOV    A,E
  995.     ORA    D
  996.     JZ    EOFER
  997.     MOV    M,E
  998.     INX    H
  999.     MVI    M,0
  1000.     DCX    H
  1001.     MOV    A,E
  1002.     POP    D
  1003. ;
  1004. GTBYT    DCR    A
  1005.     MOV    M,A
  1006.     INX    H
  1007.     MOV    A,M
  1008.     INR    M
  1009.     ADD    E
  1010.     MOV    E,A
  1011.     JNC    RT1
  1012.     INR    D
  1013. RT1    LDAX    D
  1014.     ORA    A
  1015.     RET
  1016. ;    WRITE BYTE
  1017. WTBYT    CALL    LFCB
  1018.     RZ
  1019.     INR    A
  1020.     RZ
  1021.     MVI    M,0FEH
  1022.     INX    H
  1023.     INX    H
  1024.     MOV    A,B
  1025.     PUSH    PSW
  1026.     PUSH    H
  1027. ;
  1028.     CALL    PLOAD
  1029.     POP    H
  1030.     MOV    A,M
  1031.     ADD    E
  1032.     MOV    E,A
  1033.     JNC    WT1
  1034.     INR    D
  1035. WT1    POP    PSW
  1036.     STAX    D
  1037.     ORA    A
  1038.     INR    M
  1039.     RNZ
  1040. ;
  1041.     CALL    PHEAD
  1042.     JMP    WFBLK
  1043. ;
  1044. PHEAD    CALL    PLOAD
  1045.     PUSH    B
  1046.     LXI    H,BLKOF-1
  1047.     DAD    B
  1048.     LXI    B,256
  1049.     CALL    PSTOR
  1050.     POP    H
  1051.     RET
  1052. PSTOR    INX    H
  1053.     MOV    M,C
  1054.     INX    H
  1055.     MOV    M,B
  1056.     INX    H
  1057.     MOV    M,E
  1058.     INX    H
  1059.     MOV    M,D
  1060.     RET
  1061. PLOAD    INX    H
  1062.     MOV    C,M
  1063.     INX    H
  1064.     MOV    B,M
  1065.     INX    H
  1066.     MOV    E,M
  1067.     INX    H
  1068.     MOV    D,M
  1069.     RET
  1070. ;
  1071. RFBLK    CALL    GTUNT
  1072. RTAPE    PUSH    D
  1073.     MVI    B,3
  1074.     CALL    TON
  1075.     IN    TDATA
  1076. PTAP1    PUSH    H
  1077.     CALL    RHEAD
  1078.     POP    H
  1079.     JC    TERR
  1080.     JNZ    PTAP1
  1081.     PUSH    H
  1082.     LXI    D,THEAD
  1083.     CALL    DHCMP
  1084.     POP    H
  1085.     JNZ    PTAP1
  1086.     POP    D
  1087.     MOV    A,D
  1088.     ORA    E
  1089.     LHLD    BLOCK
  1090.     XCHG
  1091.     JNZ    RTAP
  1092.     LHLD    LOADR
  1093. RTAP    PUSH    D
  1094. RTAP2    EQU    $
  1095.     CALL    DCRCT
  1096.     JZ    RTOFF
  1097.     CALL    RHED1
  1098.     JC    TERR
  1099.     JZ    RTAP2
  1100. ;    ERROR RET
  1101. TERR    XRA    A
  1102.     STC
  1103.     JMP    RTOF1
  1104. TOFF    MVI    B,1
  1105.     CALL    DELAY
  1106. RTOFF    XRA    A
  1107. RTOF1    OUT    TAPPT
  1108.     POP    D
  1109.     RET
  1110. DCRCT    EQU    $
  1111.     XRA    A
  1112.     MOV    B,A
  1113.     ORA    D
  1114.     JNZ    DCRC2
  1115.     ORA    E
  1116.     RZ
  1117.     MOV    B,E
  1118.     MOV    E,D
  1119.     RET
  1120. DCRC2    EQU    $
  1121.     DCR    D
  1122.     ORA    A
  1123.     RET
  1124. ;
  1125. RHEAD    MVI    B,10
  1126. RHEA1    CALL    STAT
  1127.     RC
  1128.     IN    TDATA
  1129.     ORA    A
  1130.     JNZ    RHEAD
  1131.     DCR    B
  1132.     JNZ    RHEA1
  1133. SOHL    CALL    TAPIN
  1134.     RC
  1135.     CPI    1
  1136.     JC    SOHL
  1137.     JNZ    RHEAD
  1138.     LXI    H,THEAD
  1139.     MVI    B,HLEN
  1140. RHED1    EQU    $
  1141.     MVI    C,0
  1142. RHED2    EQU    $
  1143.     CALL    TAPIN
  1144.     RC
  1145.     MOV    M,A
  1146.     INX    H
  1147.     CALL    DOCRC
  1148.     DCR    B
  1149.     JNZ    RHED2
  1150. ;
  1151.     CALL    TAPIN
  1152.     XRA    C
  1153.     RZ
  1154.     LDA    IGNCR
  1155.     INR    A
  1156.     RET
  1157. ;
  1158. STAT    IN    TAPPT
  1159.     ANI    TDR
  1160.     RNZ
  1161.     CALL    SINP
  1162.     JZ    STAT
  1163.     ANI    7FH
  1164.     JNZ    STAT
  1165.     STC
  1166.     RET
  1167. TAPIN    CALL    STAT
  1168.     RC
  1169. TREDY    IN    TAPPT
  1170.     ANI    TFE+TOE
  1171.     IN    TDATA
  1172.     RZ
  1173.     STC
  1174.     RET
  1175. WFBLK    CALL    GTUNT
  1176. WTAPE    EQU    $
  1177.     PUSH    H
  1178.     CALL    WHEAD
  1179.     POP    H
  1180.     LXI    D,BLKOF
  1181.     DAD    D
  1182.     MOV    E,M
  1183.     INX    H
  1184.     MOV    D,M
  1185.     INX    H
  1186.     MOV    A,M
  1187.     INX    H
  1188.     MOV    H,M
  1189.     MOV    L,A
  1190. ;
  1191. WTAP1    EQU    $
  1192.     PUSH    H
  1193. WTAP2    EQU    $
  1194.     CALL    DCRCT
  1195.     JZ    TOFF
  1196.     CALL    WTBL
  1197.     JMP    WTAP2
  1198. WRTAP    PUSH    PSW
  1199. WRWAT    IN    TAPPT
  1200.     ANI    TTBE
  1201.     JZ    WRWAT
  1202.     POP    PSW
  1203.     OUT    TDATA
  1204. DOCRC    EQU    $
  1205.     SUB    C
  1206.     MOV    C,A
  1207.     XRA    C
  1208.     CMA
  1209.     SUB    C
  1210.     MOV    C,A
  1211.     RET
  1212. ;
  1213. WHEAD    EQU    $
  1214.     CALL    WTON
  1215.     MVI    D,50
  1216. NULOP    XRA    A
  1217.     CALL    WRTAP
  1218.     DCR    D
  1219.     JNZ    NULOP
  1220.     MVI    A,1
  1221.     CALL    WRTAP
  1222.     MVI    B,HLEN
  1223. WTBL    MVI    C,0
  1224. WLOOP    MOV    A,M
  1225.     CALL    WRTAP
  1226.     DCR    B
  1227.     INX    H
  1228.     JNZ    WLOOP
  1229.     MOV    A,C
  1230.     JMP    WRTAP
  1231. DHCMP    MVI    B,5
  1232. DHLOP    LDAX    D
  1233.     CMP    M
  1234.     RNZ
  1235.     DCR    B
  1236.     RZ
  1237.     INX    H
  1238.     INX    D
  1239.     JMP    DHLOP
  1240. GTUNT    EQU    $
  1241.     LDA    FNUMF
  1242.     ORA    A
  1243.     LDA    TSPD
  1244.     JNZ    GTUN2
  1245.     ADI    TAPE2
  1246. GTUN2    ADI    TAPE2
  1247.     RET
  1248. WTON    MVI    B,4
  1249. TON    EQU    $
  1250.     OUT    TAPPT
  1251. DELAY    LXI    D,0
  1252. DLOP1    DCX    D
  1253.     MOV    A,D
  1254.     ORA    E
  1255.     JNZ    DLOP1
  1256.     DCR    B
  1257.     JNZ    DELAY
  1258.     RET
  1259. ;
  1260. ;    END
  1261. ;
  1262. VDMEM    EQU    0E000H
  1263. DOWN    EQU    1AH
  1264. UP    EQU    17H
  1265. LEFT    EQU    01H
  1266. RIGHT    EQU    13H
  1267. CLEAR    EQU    0BH
  1268. HOME    EQU    0EH
  1269. MODE    EQU    03    ;CONTROL C FOR RANDY
  1270. BACKS    EQU    5FH
  1271. LF    EQU    10
  1272. CR    EQU    13
  1273. BLANK    EQU    ' '
  1274. SPACE    EQU    BLANK
  1275. CX    EQU    'X'-40H
  1276. ESC    EQU    1BH
  1277. ;
  1278. ;    PORT ASSIGNMENTS
  1279. ;
  1280. STAPT    EQU    0
  1281. SDATA    EQU    1
  1282. PDATA    EQU    2
  1283. KDATA    EQU    1
  1284. DSTAT    EQU    0E0H
  1285. TAPPT    EQU    0EAH
  1286. TDATA    EQU    0EBH
  1287. SENSE    EQU    0FFH
  1288. SCD    EQU    1
  1289. SDSR    EQU    2
  1290. SPE    EQU    4
  1291. SFE    EQU    8
  1292. SOE    EQU    16
  1293. SCTS    EQU    32
  1294. SDR    EQU    64
  1295. STBE    EQU    128
  1296. KDR    EQU    1
  1297. PDR    EQU    2
  1298. PXDR    EQU    4
  1299. TFE    EQU    8
  1300. TOE    EQU    16
  1301. TDR    EQU    64
  1302. TTBE    EQU    128
  1303. SOK    EQU    1
  1304. TAPE1    EQU    80H
  1305. TAPE2    EQU    40H
  1306. ;
  1307. ;    SYSTEM GLOBAL EREA
  1308. ;
  1309.     ORG    START+800H
  1310. SYSRAM    EQU    $
  1311. SYSTP    EQU    SYSRAM+3FFH
  1312. ;
  1313. UIPRT    DS    2
  1314. UOPRT    DS    2
  1315. DFLTS    DS    2
  1316. IPORT    DS    1
  1317. OPORT    DS    1
  1318. NCHAR    DS    1
  1319. LINE    DS    1
  1320. BOT    DS    1
  1321. SPEED    DS    1
  1322. ESCFL    DS    1
  1323. TSPD    DS    1
  1324. INPTR    DS    2
  1325. NUCNT    DS    1
  1326. IGNCR    DS    1
  1327.     DS    10
  1328. ;
  1329. THEAD    DS    5
  1330.     DS    1
  1331. HTYPE    DS    1
  1332. BLOCK    DS    2
  1333. LOADR    DS    2
  1334. XEQAD    DS    2
  1335. HSPR    DS    3
  1336. HLEN    EQU    $-THEAD
  1337. BLKOF    EQU    BLOCK-THEAD
  1338. DHEAD    DS    HLEN
  1339. CUTAB    DS    6*4
  1340. FNUMF    DS    1
  1341. FCBAS    DS    7
  1342. FCBA2    DS    7
  1343. FBUF1    DS    2*256
  1344.     DS    1
  1345. INLIN    DS    80
  1346. USARE    EQU    $
  1347. VDMEM1    EQU    0E0H    ;FOR THIS ASSM
  1348.     END
  1349.