home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol020 / aspm1.z80 < prev    next >
Encoding:
Text File  |  1984-04-29  |  10.7 KB  |  721 lines

  1.     TITLE COMMAND SUBSYSTEM FOR SYSTEM MONITOR * Release A
  2. ;  *******Donated to the Pascal/Z Users Group,July 1980********
  3. ;       SYSTEM MONITOR COMMAND SUBSYSTEM * Release A
  4. ;    MODULE ONE
  5. ;
  6. ;    BASE ADDRESSES
  7. ;
  8. ;CBASE    CONSOLE SUBSYSTEM BASE
  9. ;TBASE    CASSETTE SUBSYSTEM BASE
  10. ;DBASE    DISK SUBSYSTEM BASE
  11. ;VBASE    INTEL I/O VECTOR SUBSYS BASE
  12. ;WBASE    MONITOR WORK SPACE
  13. ;SBASE    MONITOR STACK SPACE
  14. ;
  15. ;
  16. ;    LINKAGES TO CONSOLE SUBSYSTEM
  17. ;
  18. CINITL    DEFL    CBASE
  19. STATUS    DEFL    CBASE+3
  20. SKEY    DEFL    CBASE+6
  21. UKEY    DEFL    CBASE+9
  22. LPOUT    DEFL    CBASE+0CH
  23. BUFFIN    DEFL    CBASE+0FH
  24. BUILD    DEFL    CBASE+12H
  25. VADDR    DEFL    CBASE+15H
  26. SVIDEO    DEFL    CBASE+18H
  27. PVIDEO    DEFL    CBASE+1BH
  28. VIDOUT    DEFL    CBASE+1EH
  29. VIDPRO    DEFL    CBASE+21H
  30. ;
  31. ;    LINKAGES TO CASSETTE SUBSYSTEM
  32. ;
  33. TINITL    DEFL    TBASE
  34. ZSAVE    DEFL    TBASE+3
  35. ZLOAD    DEFL    TBASE+6
  36. SWRITE    DEFL    TBASE+9
  37. SREAD    DEFL    TBASE+0CH
  38. ;
  39. ;    LINKAGES TO DISK SUBSYSTEM
  40. ;
  41. DINITL    DEFL    DBASE        ;INITIALIZE
  42. DISK1    DEFL    DBASE+03    ;MAIN ENTRY POINT
  43. ;
  44. ;    DEFINE ALL THE INTERNAL SYMBOLS
  45. ;
  46. ;    ASCII SYMBOLS
  47. ;
  48. NULL    DEFL    00H
  49. EOM    DEFL    00H
  50. CLT    DEFL    1CH
  51. CRT    DEFL    1EH
  52. CDN    DEFL    1FH
  53. CUP    DEFL    1DH
  54. HOME    DEFL    0BH
  55. CLEAR    DEFL    0CH
  56. BOTTOM    DEFL    03H
  57. REPT    DEFL    12H
  58. CR    DEFL    0DH
  59. LF    DEFL    0AH
  60. COFF    DEFL    0FH
  61. CON    DEFL    0EH
  62. HTAB    DEFL    09H
  63. ESC    DEFL    1BH
  64. LINS    DEFL    04H
  65. DEL    DEFL    7FH
  66. SPACE    DEFL    20H
  67. MINUS    DEFL    2DH
  68. DOT    DEFL    2EH
  69. QUOTE    DEFL    27H
  70. PAGE    DEFL    11H
  71. SCROLL    DEFL    17H
  72. STX    DEFL    01H
  73. REV    DEFL    05H
  74. DIR    DEFL    16H
  75. PROMP    DEFL    '>'
  76. PTGL    DEFL    10H
  77. ;
  78. ;MONITOR WORK SPACE INDEX ADDRESS LOCATIONS
  79. ;    THE MONITOR OBTAINS THE ADDRESS STORED AT
  80. ;    [WORK] AND LOADS IT INTO THE [IY] REG
  81. ;    THERE AFTER THE MONITOR WILL ACCESS THE WORK
  82. ;    SPACE INDIRECTLY THROUGH THE [IY] REG
  83. ;
  84. ;    THE WORK SPACE IS DEFINED AS FOLLOWS:
  85. ;    IY-4DH        IOBYTE ALLOCATION FLAG
  86. ;    IY-4CH        DATA BLOCK TABLE, TEN BLOCKS
  87. ;            K   - DELIMITER CHAR
  88. ;            K+1 - LSB BLOCK ADDRESS
  89. ;            K+2 - MSB BLOCK ADDRESS
  90. ;            K+3 - NO OF BYTES IN BLOCK
  91. ;    IY-0CH        DECODED ADDRESS ONE
  92. ;    IY-OAH           "          "     TWO
  93. ;    IY-08H           "          "     THREE
  94. ;    IY-06H        NUMBER OF ADDRESSES DECODED
  95. ;    IY-05H        BLOCK POINTER (BLK NO)
  96. ;    IY-04H        NUMBER OF BLOCKS DEBLOCKED IN BUFFER
  97. ;    IY-03H        NUMBER OF SIGNIFICANT BYTES IN BUFFER
  98. ;    IY-02H        ADDRESS OF FIRST SIGNIFICANT BYTE IN
  99. ;            BUFFER (FIRST NUN-SPACE ASCII CHAR)
  100. ;    IY-00H        STARTING POINT OF BUFFER (80H BYTES)
  101. ;
  102. ;START OF MONITOR CODE
  103. ;
  104. MBASE    EQU    $
  105. ;
  106. ;    EXTERNAL ENTRY VECTORS
  107. ;
  108. MNTRY0    JP    START    ;COLD START OF MONITOR
  109. MNTRY1    JP    RESTRT    ;WARM START OF MONITOR
  110. MNTRY2    JP    FMEM    ;MEMORY TEST
  111. ;
  112. ;    ADDRESS DEFINITIONS
  113. ;
  114. WORK    DEFW    WBASE
  115. STACK    DEFW    SBASE
  116. ;
  117. ;
  118. ;    MAIN COMMAND JUMP TABLE
  119. ;
  120. MJUMP    DEFW    ASSIGN    ;A
  121.     DEFW    LOCKUP    ;B
  122.     DEFW    COPY    ;C
  123.     DEFW    DSPLAY    ;D
  124.     DEFW    ENTER    ;E
  125.     DEFW    FILL    ;F
  126.     DEFW    GOTO    ;G
  127.     DEFW    HEX    ;H
  128.     DEFW    INPUT    ;I
  129.     DEFW    JUMP    ;J
  130.     DEFW    NAVAIL    ;K
  131.     DEFW    LIST    ;L
  132.     DEFW    MOVE    ;M
  133.     DEFW    NAVAIL    ;N
  134.     DEFW    OUTPUT    ;O
  135.     DEFW    PROGRM    ;P
  136.     DEFW    NAVAIL    ;Q
  137.     DEFW    READ    ;R
  138.     DEFW    SEARCH    ;S
  139.     DEFW    TEST    ;T
  140.     DEFW    NAVAIL    ;U
  141.     DEFW    VERIFY    ;V
  142.     DEFW    WRITE    ;W
  143.     DEFW    NAVAIL    ;X
  144.     DEFW    NAVAIL    ;Y
  145.     DEFW    NAVAIL    ;Z
  146. ;
  147. ;    COPY COMMAND JUMP TABLE
  148. ;
  149. CJUMP    DEFW    CPM    ;TT
  150.     DEFW    CPM    ;TD
  151.     DEFW    READ    ;TM
  152.     DEFW    CPM    ;TP
  153.     DEFW    CPM    ;TC
  154.     DEFW    CPM    ;TU
  155.     DEFW    CPM    ;DT
  156.     DEFW    CPM    ;DD
  157.     DEFW    CPM    ;DM
  158.     DEFW    CPM    ;DP
  159.     DEFW    CPM    ;DC
  160.     DEFW    CPM    ;DU
  161.     DEFW    WRITE    ;MT
  162.     DEFW    CPM    ;MD
  163.     DEFW    MOVE    ;MM
  164.     DEFW    LIST    ;MP
  165.     DEFW    DSPLAY    ;MC
  166.     DEFW    CPM    ;MU
  167.     DEFW    CPM    ;PT
  168.     DEFW    CPM    ;PD
  169.     DEFW    CPM    ;PM
  170.     DEFW    CPM    ;PP
  171.     DEFW    CPM    ;PC
  172.     DEFW    CPM    ;PU
  173.     DEFW    CPM    ;CT
  174.     DEFW    CPM    ;CD
  175.     DEFW    ENTER    ;CM
  176.     DEFW    CPM    ;CP
  177.     DEFW    CPM    ;CC
  178.     DEFW    CPM    ;CU
  179.     DEFW    CPM    ;UT
  180.     DEFW    CPM    ;UD
  181.     DEFW    CPM    ;UM
  182.     DEFW    CPM    ;UP
  183.     DEFW    CPM    ;UC
  184.     DEFW    CPM    ;UU
  185. ;
  186. ;    VERIFY COMMAND JUMP TABLE
  187. ;
  188. VJUMP    DEFW    CPM    ;TT
  189.     DEFW    CPM    ;TD
  190.     DEFW    CPM    ;TM
  191.     DEFW    CPM    ;TU
  192.     DEFW    CPM    ;DT
  193.     DEFW    CPM    ;DD
  194.     DEFW    CPM    ;DM
  195.     DEFW    CPM    ;DU
  196.     DEFW    CPM    ;MT
  197.     DEFW    CPM    ;MD
  198.     DEFW    VMOVE    ;MM
  199.     DEFW    CPM    ;MU
  200.     DEFW    CPM    ;UT
  201.     DEFW    CPM    ;UD
  202.     DEFW    CPM    ;UM
  203.     DEFW    CPM    ;UU
  204. ;
  205. ;    MAIN ENTRIES INTO THE MONITOR
  206. ;
  207. START    SUB    A
  208.     JP    INIT
  209. ST1    CALL    CINITL    ;INITIALIZE CONSOLE
  210.     CALL    TINITL    ;INITIALIZE CASSETTE
  211.     CALL    DINITL    ;INITIALIZE DISK
  212.     LD    A,69H
  213.     LD    (IY-4DH),A
  214.     LD    HL,SMESS1
  215.     CALL    VIDPRO
  216.     JR    COMM
  217. RESTRT    LD    A,1
  218.     JP    INIT
  219. ST2    LD    HL,SMESS2
  220.     CALL    VIDPRO
  221. COMM    LD    HL,SMESS3
  222.     CALL    VIDPRO
  223. RECOMM    CALL    BUILD
  224.     LD    A,(IY-3);NULL COMMAND FIELD?
  225.     OR    A
  226.     JR    Z,COMM
  227.     CALL    REDUCE
  228.     CALL    DBLOCK
  229.     LD    A,1
  230.     CALL    SETDBA    ;SET TO BLOCK 1
  231.     LD    A,(IX+3)    ;GET BLK SIZE
  232.     OR    A
  233.     JP    Z,ERR01      ;IF BLK SIZE ZERO
  234.     CALL    HLIX    ;GET STARTING ADDR OF BLK
  235.     LD    A,(HL)    ;GET FIRST BYTE OF BLOCK
  236.     JR    MVECT
  237. INIT    LD    SP,(STACK)
  238.     LD    IY,(WORK)
  239.     OR    A
  240.     JP    Z,ST1
  241.     JP    ST2
  242. ;
  243. ;    MAIN VECTOR ROUTINE
  244. ;    A REG CONTAINS ALPHA
  245. ;
  246. MVECT    SUB    'A'
  247.     JP    C,ERR01
  248.     CP    26
  249.     JP    NC,ERR01
  250.     LD    HL,MJUMP
  251.     ADD    A,A
  252.     ADD    A,L
  253.     LD    L,A
  254.     JR    NC,VECTOR
  255.     INC    H
  256. VECTOR    LD    E,(HL)
  257.     INC    HL
  258.     LD    D,(HL)
  259.     EX    DE,HL
  260.     JP    (HL)
  261. ;
  262. ;    COPY AND VERIFY VECTOR 
  263. ;    SOURCE BYTE IN D REG
  264. ;    DEST  BYTE IN E REG
  265. ;    UPON ENTRY AND EXIT
  266. ;
  267. COPY    CALL    GETSD
  268.     JP    C,ERR02
  269.     JP    Z,MOVE
  270.     JR    CVECT
  271. VERIFY    CALL    GETSD
  272.     JP    C,ERR02
  273.     JP    Z,VMOVE
  274.     JR    VVECT
  275. GETSD    CALL    GETOPT
  276.     RET C
  277.     LD    D,(HL)
  278.     INC    HL
  279.     LD    E,(HL)
  280.     CP    SPACE
  281.     RET
  282.     SCF
  283.     RET
  284. CVECT    LD    HL,CJUMP
  285.     SUB    A
  286.     PUSH    AF
  287.     PUSH    DE
  288.     PUSH    HL
  289.     LD    HL,CTBLE
  290.     LD    BC,6
  291.     JR    CVJUMP
  292. VVECT    LD    HL,VJUMP
  293.     LD    A,01
  294.     PUSH    AF
  295.     PUSH    DE
  296.     PUSH    HL
  297.     LD    HL,VTBLE
  298.     LD    BC,4
  299.     LD    A,01H
  300. CVJUMP    PUSH    BC
  301.     PUSH    HL
  302.     LD    A,E
  303.     CPIR
  304.     JR    NZ,CV1
  305.     LD    E,C
  306.     POP    HL
  307.     POP    BC
  308.     PUSH    BC
  309.     LD    A,D
  310.     CPIR
  311.     JR    NZ,CV1+1
  312.     POP    HL
  313.     ADD    HL,HL
  314.     LD    B,C
  315.     CALL    CV2
  316.     LD    C,A
  317.     LD    B,E
  318.     LD    L,2
  319.     CALL    CV2
  320.     ADD    A,C
  321.     LD    C,A
  322.     POP    HL
  323.     ADD    HL,BC
  324.     POP    BC
  325.     POP    AF
  326.     JP    VECTOR
  327. CV1    POP    HL
  328.     POP    HL
  329.     POP    HL
  330.     POP    HL
  331.     POP    HL
  332.     JP    ERR02
  333. CV2    SUB    A
  334.     INC    B
  335.     JR    CV4
  336. CV3    ADD    A,L
  337. CV4    DJNZ    CV3
  338.     RET
  339. ;
  340. ;    REDUCE LOW CASE ALPHA TO CAPS AND MASK OFF
  341. ;    MSB OF BYTE TO OVERRIDE REVERSE VIDEO
  342. ;
  343. REDUCE    LD    L,(IY-2)
  344.     LD    H,(IY-1)
  345.     LD    A,(IY-3)
  346.     OR    A
  347.     RET    Z
  348.     LD    B,A
  349. RED1    LD    A,(HL)
  350.     AND    7FH
  351.     CP    61H
  352.     JR    C,RED2
  353.     CP    0FBH
  354.     JR    NC,RED2
  355.     SUB    20H
  356. RED2    LD    (HL),A
  357.     INC    HL
  358.     DJNZ    RED1
  359.     RET
  360. ;
  361. ;    DEBLOCKING ROUTINE ... THIS ROUTINE DETERMINES THE
  362. ;    STARTING ADDRESS OF EACH SIGNIFICANT BLOCK DEFINED
  363. ;    BY THE DELIMITERS  [^.,;:-+*/=] WHERE ^ IS A BLANK
  364. ;
  365. DBLOCK    LD    A,1
  366.     CALL    SETDBA
  367.     LD    L,(IY-02H)
  368.     LD    H,(IY-01H)
  369.     CALL    IXHL
  370.     LD    (IX),NULL
  371.     LD    A,(IY-3)    ;LD NO OF BYTES IN BUFFER
  372.     LD    B,A
  373.     OR    A
  374.     JR    Z,DB3+1
  375.     LD    DE,1    ;LOAD COUNTERS
  376. DB1    LD    C,(HL)
  377.     LD    A,C
  378.     CALL    DELCK
  379.     JR    NZ,DB2
  380.     LD    (IX+3),D
  381.     LD    A,10
  382.     SUB    E
  383.     JR    Z,DB3
  384.     LD    D,00H
  385.     LD    (IX+4),C
  386.     INC    E
  387.     INC    HL
  388.     LD    (IX+5),L
  389.     LD    (IX+6),H
  390.     CALL    INCDBA
  391.     JR    DB2A
  392. DB2    INC    D
  393.     INC    HL
  394. DB2A    DJNZ    DB1
  395.     LD    (IX+3),D
  396. DB3    LD    A,E
  397.     LD    (IY-04H),A
  398.     RET
  399. ;
  400. ;    CHECK BUFFER BYTE FOR DELIMITER.
  401. ;
  402. DELCK    PUSH    HL
  403.     PUSH    BC
  404.     LD    HL,DELCHR
  405.     LD    BC,10
  406.     CPIR
  407.     POP    BC
  408.     POP    HL
  409.     RET
  410. ;
  411. ;    GET OPTION IF THERE IS ANY
  412. ;        CARRY SET - ERROR STATE .. EOF
  413. ;        ZERO  SET - OPTION FOUND
  414. ;        ZERO  CLR - NO OPTION
  415. ;
  416. GETOPT    LD    A,(IY-04H)
  417.     CP    2
  418.     RET C
  419.     LD    A,(IX+4)
  420.     CP    DOT
  421.     JR    NZ,GET1
  422.     CALL    INCDBA
  423.     CALL    HLIX
  424.     LD    A,(HL)
  425.     JR    GET2
  426. GET1    LD    A,SPACE
  427. GET2    OR    A
  428.     RET
  429. ;
  430. ;    DECODE THE ADDRESSES ON THE BUFFER
  431. ;    Error state is flagged by carry-flag-set.
  432. ;    Up to three addresses are decoded. These are 
  433. ;    saved in ADDR1,ADDR2,and ADDR3. Number
  434. ;    of addresses decoded is saved in NADDR.
  435. ;    Expected format:
  436. ;           [ ADDR1-ADDR2-ADDR3]
  437. ;
  438. GETADD    CALL    INCDBA
  439.     LD    A,00H
  440.     RET C            ;IF ZERO BLOCKS
  441.     LD    (IY-06H),A
  442.     LD    A,(IX)
  443.     CP    SPACE
  444.     JR    NZ,GA2         ;FIRST DELIMITER NOT A SPACE
  445.     CALL    DCDAD2
  446.     RET C            ;IF DECODING ERR
  447.     LD    (IY-0CH),E    ;SAVE ADDR 1
  448.     LD    (IY-0BH),D
  449.     LD    A,1
  450.     LD    (IY-06H),A
  451.     CALL    NXADD        ;GET NEXT ADDR
  452.     RET C            ;IF DECODING ERR
  453.     JR    NZ,GA1         ;IF NO MORE ADDR
  454.     LD    (IY-0AH),E
  455.     LD    (IY-09H),D
  456.     LD    A,2
  457.     LD    (IY-06H),A
  458.     CALL    NXADD        ;GET NEXT ADDR
  459.     RET C            ;IF ERR
  460.     JR    NZ,GA1         ;IF NO MORE ADDR
  461.     LD    (IY-08H),E
  462.     LD    (IY-07H),D
  463.     LD    A,3
  464.     LD    (IY-06H),A
  465. GA1    OR    A
  466.     RET
  467. GA2    SCF
  468.     RET
  469. ;
  470. NXADD    CALL    INCDBA    ;INC TO NEXT BLK
  471.     JR    NC,NXA1
  472. NXA0    SUB    A
  473.     INC    A
  474.     RET
  475. NXA1    LD    A,(IX)        ;GET DELIMITER
  476.     CP    MINUS        ;MUST HAVE A - DELIM
  477.     JR    NZ,NXA0
  478.     CALL    DCDAD1
  479.     RET C            ;IF ERR
  480.     SUB    A
  481.     RET
  482. INCDBA    INC    IX
  483.     INC    IX
  484.     INC    IX
  485.     INC    IX
  486.     LD    A,(IY-05H)
  487.     INC    A
  488.     LD    (IY-05H),A
  489. IDBA1    PUSH    BC
  490.     LD    C,A
  491.     LD    A,(IY-04H)
  492.     SUB    C
  493.     POP    BC
  494.     RET
  495. CKBLK    LD    A,(IY-05H)
  496.     JR    IDBA1
  497. ;
  498. SETDBA    PUSH    IY
  499.     POP    BC
  500.     LD    IX,0FFB4H
  501.     ADD    IX,BC
  502.     LD    (IY-05H),A
  503.     DEC    A
  504.     ADD    A,A
  505.     ADD    A,A
  506.     LD    C,A
  507.     LD    B,0
  508.     ADD    IX,BC
  509.     RET
  510. ;
  511. ;    LOAD HL WITH (IX+1)
  512. ;
  513. HLIX    LD    L,(IX+1)
  514.     LD    H,(IX+2)
  515.     RET
  516. ;
  517. ;    LOAD (IX+1) WITH HL
  518. ;
  519. IXHL    LD    (IX+1),L
  520.     LD    (IX+2),H
  521.     RET
  522. ;
  523. ;    LOAD ADDRESSES INTO HL
  524. ;
  525. HLAD1    LD    L,(IY-0CH)
  526.     LD    H,(IY-0BH)
  527.     RET
  528. HLAD2    LD    L,(IY-0AH)
  529.     LD    H,(IY-09H)
  530.     RET
  531. HLAD3    LD    L,(IY-08H)
  532.     LD    H,(IY-07H)
  533.     RET
  534. ;
  535. ;    DECODE ADDRESSES FROM HEX
  536. ;
  537. DCDAD1    LD    DE,0FFFFH
  538.     JR    DCD1
  539. DCDAD2    LD    DE,0000H
  540. DCD1    LD    A,(IX+3)
  541.     OR    A
  542.     JR    NZ,DCD2
  543.     SUB    A
  544.     RET
  545. DCD2    LD    DE,0
  546.     CALL    HLIX
  547.     LD    B,A
  548. ;
  549. DHADD    EX    DE,HL
  550.     LD    HL,0
  551. DHA1    ADD    HL,HL
  552.     ADD    HL,HL
  553.     ADD    HL,HL
  554.     ADD    HL,HL
  555.     LD    A,(DE)
  556.     CALL    VHEX
  557.     JR    C,DHA2
  558.     ADD    A,L
  559.     LD    L,A
  560.     INC    DE
  561.     DJNZ    DHA1
  562. DHA2    EX    DE,HL
  563.     RET
  564. ;
  565. ;    VERIFY HEX CHARACTER
  566. ;
  567. VHEX    SUB    '0'
  568.     RET C
  569.     CP    0AH
  570.     JR    NC,VHX1
  571.     CCF
  572.     RET
  573. VHX1    SUB    7
  574.     CP    0AH
  575.     RET C
  576.     CP    10H
  577.     CCF
  578.     RET
  579. ;
  580. ;    ESCAPE KEY CHECK
  581. ;
  582. ESCAPE    CALL    UKEY
  583.     CP    ESC
  584.     JR    Z,ESCP1
  585.     OR    A
  586.     RET
  587. ESCP1    SCF
  588.     RET
  589. ;
  590. ;    GET TWO ADDRESSES, CALC NO. OF BYTES,
  591. ;    PUT NO. BYTES IN REG DE, STARTING ADD IN REG HL
  592. ;    ERROR RETURNS: CARRY-SET - HEXIDEC ERROR
  593. ;               ZERO - REV ADD
  594. ;
  595. GET2AD    CALL    GETADD
  596.     JR    C,GERR
  597.     LD    A,(IY-06H)
  598.     CP    2
  599.     JR    C,GERR
  600. CALCAD    CALL    HLAD1
  601.     EX    DE,HL
  602.     CALL    HLAD2
  603.     SBC    HL,DE
  604.     JR    C,CLC1
  605.     EX    DE,HL
  606.     INC    DE
  607.     RET
  608. CLC1    POP    HL
  609.     JP    ERR04
  610. GERR    POP    HL
  611.     JP    ERR03
  612. ;
  613. ;    UPDATE COUNTERS HL AND DE  AND TEST DE FOR ZERO
  614. ;
  615. UPDATE    INC    HL
  616.     DEC    DE
  617.     LD    A,D
  618.     OR    E
  619.     RET
  620. ;
  621. ;    OUTPUT 8 HEX BYTES
  622. ;    ...CARRY SET IF MORE BYTES ON QUEY
  623. ;
  624. OUT8HB    LD    B,8
  625.     PUSH    BC
  626.     LD    A,(HL)
  627.     CALL    OUTHBT
  628.     CALL    OUTSPC
  629.     POP    BC
  630.     CALL    UPDATE
  631.     RET Z
  632.     DJNZ    OUT8HB+2
  633.     SCF
  634.     RET
  635. ;
  636. ;    OUTPUT 8 ASCII BYTES, CNTL CHARACTERS
  637. ;    ARE OUTPUTTED AS PERIODS
  638. ;
  639. OUT8AB    LD    B,8
  640.     LD    C,(HL)
  641.     CALL    BTASC
  642.     CALL    VIDOUT
  643.     CALL    UPDATE
  644.     RET Z
  645.     DJNZ    OUT8AB+2
  646.     SCF
  647.     RET
  648. ;
  649. ;    CONVERT BYTE TO HEX CHARACTERS
  650. ;    EXPECT BYTE TO BE IN A REG
  651. ;    RESULT IS IN C AND A REG
  652. ;    C  -    MOST SIG NYBBLE
  653. ;    A  -    LEAST SIG NYBBLE
  654. ;
  655. BTHEX    PUSH    AF
  656.     AND    0F0H
  657.     RRCA
  658.     RRCA
  659.     RRCA
  660.     RRCA
  661.     CALL    BT1
  662.     LD    C,A
  663.     POP    AF
  664.     AND    0FH
  665. BT1    ADD    A,90H
  666.     DAA
  667.     ADC    A,40H
  668.     DAA
  669.     RET
  670. ;
  671. ;    CONVERT ASCII CONTROL CHARACTERS TO PERIODS
  672. ;
  673. BTASC    LD    A,C
  674.     AND    7FH
  675.     CP    20H
  676.     JR    C,BTA1
  677.     CP    DEL
  678.     JR    Z,BTA1
  679.     CP    5FH
  680.     JR    Z,BTA1
  681.     RET
  682. BTA1    CP    80H
  683.     JR    NC,BTA2
  684.     LD    C,'.'
  685.     RET
  686. BTA2    LD    C,'.'+80H
  687.     RET
  688. ;OUTPUT HEX ADDR RESIDING IN HL REG
  689. ;
  690. OUTHAD    LD    A,H
  691.     CALL    OUTHBT
  692.     LD    A,L
  693. OUTHBT    CALL    BTHEX
  694.     PUSH    AF
  695.     CALL    VIDOUT
  696.     POP    AF
  697.     LD    C,A
  698. OUTB    JP    VIDOUT
  699. ;
  700. ;    OUTPUT [.],[-],[ ],[CRLF],[CRLF>],[   ]
  701. ;
  702. OUTDOT    LD    C,'.'
  703.     JR    OUTB
  704. OUTSPC    LD    C,' '
  705.     JR    OUTB
  706. OUTDSH    LD    C,'-'
  707.     JR    OUTB
  708. OUTEXP    LD    C,'!'
  709.     JR    OUTB
  710. CRLF    LD    C,CR
  711.     CALL    VIDOUT
  712.     LD    C,LF
  713.     JR    OUTB
  714. CRLFP    CALL    CRLF
  715.     LD    C,PROMP
  716.     JR    OUTB
  717. OUT3SP    CALL    OUTSPC
  718.     CALL    VIDOUT
  719.     JP    VIDOUT
  720.     DEFB    NULL
  721.