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

  1.     TITLE    CONSOLE SUBSYSTEM FOR SYSTEM MONITOR
  2. ;    CONSOLE I.0
  3. ;    CONSOLE SUBSYSTEM FOR THE SYSTEM MONITOR.
  4. ;
  5. ;  ********Donated to the Pascal/Z Users Group,July 1980*****
  6. ;    MODIFIED FOR C-MACRO ASSEMBLER MAY 1979
  7. ;
  8. ;
  9. ;    EXTERNAL LINKAGES TO CONSOLE I.0
  10. ;
  11. ;    CWBASE IS MONITOR VARIABLE RAM WORK AREA BASE
  12. ;    CVBASE IS VIDEO RAM AREA BASE
  13. ;    CBBASE IS CONSOLE INPUT BUFFER AREA
  14. ;
  15. ;    VIDEO RAM DEFINITION
  16. ;
  17. VIDRAM    DEFL    CVBASE
  18. ;
  19. ;    KEYBOARD DEFINITION
  20. ;
  21. KDPORT    DEFL    0D4H
  22. KSPORT    DEFL    0D5H
  23. KSMASK    DEFL    080H
  24. ;
  25. ;    LINE PRINTER DEFINITION
  26. ;
  27. LDPORT    DEFL    0D6H
  28. LSPORT    DEFL    0D7H
  29. LBPORT    DEFL    0D0H
  30. LSMASK    DEFL    080H
  31. LBMASK    DEFL    080H
  32. ;
  33. ;    DEFINED ASCII USED INTERNALLY IN PACKAGE
  34. ;
  35. ONCURS    DEFL    0EH    ;TURN ON CURSOR
  36. OFFCUR    DEFL    0FH    ;TURN OFF CURSOR
  37. LNFEED    DEFL    0AH    ;LINE FEED
  38. CARRET    DEFL    0DH    ;CARRIAGE RETURN
  39. ALTRET    DEFL    12H    ;ALTERNATE CARRIAGE RETURN
  40. SPGMD    DEFL    11H    ;SET PAGE MODE
  41. SSLMD    DEFL    17H    ;SET SCROLL MODE
  42. RPTCMD    DEFL    12H    ;REPEAT COMMAND .. BUFFOUT
  43. DCHARG    DEFL    07H    ;DELETE CHARACTER GLOBALLY
  44. ICHARG    DEFL    06H    ;INSERT SPACES GLOBALLY
  45. BACKSP    DEFL    1CH    ;BACK SPACE, CURSOR LEFT
  46. BKFEED    DEFL    1DH    ;BACK FEED , CURSOR UP
  47. DCHAR    DEFL    7FH    ;DELETE A CHARACTER
  48. NULL    DEFL    00H    ;END OF MESSAGE .. BUFFOUT
  49. ;
  50. ;    ENTRIES TO CONSOLE I.0
  51. ;
  52. CBASE    EQU    $
  53. CNTRY1    JP    CINIT    ;INITIALIZE THE PACKAGE
  54. CNTRY2    JP    KSTAT    ;KEY ENTRY STATUS
  55. CNTRY3    JP    KINP1    ;KEY ENTRY..WAIT FOR STOBE
  56. CNTRY4    JP    KINP2    ;KEY ENTRY..IMMEDIATE RETURN
  57. CNRTY5    JP    OUTPT3    ;PRINTER OUTPUT
  58. CNTRY6    JP    BUFIN1    ;SCREEN EDITED; BUFFERED INPUT
  59. CNTRY7    JP    BUFIN2    ;ALTERNATE BUFFERED INPUT.
  60. CNTRY8    JP    CVADDR    ;SCREEN CURSOR ADDRESSES
  61. CNTRY9    JP    OUTPT1    ;LIMITED SCREEN OUTPUT [TTY MODE]
  62. CNTRYA    JP    OUTPT2    ;FULL CONTROL SCREEN OUTPUT
  63. CNTRYB    JP    OUTPT4    ;SOFTWARE CONTROLLED OUTPUT TO 
  64. ;             SCREEN AND/OR PRINTER
  65. CNTRYC    JP    OUTPT5    ;BUFFERED OUTPUT
  66. ;
  67. ;    RAM WORK AREAS FOR PACKAGE
  68. ;
  69. CWORK    DEFW    CWBASE    ;STARTING ADDRESS OF WORK AREA
  70. BUFFER    DEFW    CBBASE    ;STARTING ADDRESS OF I/O BUFFER
  71. ;    [BUFFER-3] IS ASSUMED TO BE STORAGE LOCATION OF
  72. ;    SIGNIFICANT NO OF BYTES IN BUFFER.
  73. ;    [BUFFER-2] IS ASSUMED TO BE STORAGE LOACTION OF
  74. ;    FIRST SIGNIFICANT BYTE IN THE BUFFER.
  75. ;
  76. ;VIDEO RAM CONSTANTS
  77. TOP    DEFW    VIDRAM        ;STARTING ADDRESS OF VIDEO RAM
  78. BOTLT    DEFW    03C0H+VIDRAM    ;ADDR. OF LAST LINE ON SCREEN
  79. BOTRT    DEFW    03FFH+VIDRAM    ;ENDING ADDRESS OF VIDEO RAM
  80. ;
  81. ;    VIDEO CONTROL VECTOR TABLE
  82. ;
  83. TABLE    DEFB    111B    ;DEL
  84.     DEFW    RDEL    ;DELETE CHARACTER COMMAND
  85.     DEFB    000B    ;^@ , NULL
  86.     DEFW    0    ;STOP BYTE OF BUFFERED OUTPUT
  87.     DEFB    000B    ;^A , SOH
  88.     DEFW    0    ;FLAG BYTE FOR MESSAGE MACRO
  89.     DEFB    110B    ;^B , STX
  90.     DEFW    BOT    ;BOTTOM-OUT CURSOR COMMAND
  91.     DEFB    000B    ;^C , ETX
  92.     DEFW    0    ;RESERVED
  93.     DEFB    110B    ;^D , E0T
  94.     DEFW    RINS    ;INSERT A BLANK IN A LINE COMMAND
  95.     DEFB    111B    ;^E , ENG
  96.     DEFW    REVMD    ;REVERSE VIDEO COMMAND
  97.     DEFB    110B    ;^F , ACK
  98.     DEFW    GINS    ;INSERT A BLANK GLOBALLY COMMAND
  99.     DEFB    110B    ;^G , BEL
  100.     DEFW    GDEL    ;DELETE A CHARACTER GLOBALLY COMMAND
  101.     DEFB    111B    ;^H , BS
  102.     DEFW    CRSLT    ;SHIFT CURSOR LEFT COMMAND(BACK-SPACE)
  103.     DEFB    111B    ;^I , HT
  104.     DEFW    TABLT    ;HORIZONTAL TAB COMMAND
  105.     DEFB    011B    ;^J , LF
  106.     DEFW    LINEFD    ;LINE FEED COMMAND
  107. ;             (BUFF I/O - LINE CLEAR)
  108.     DEFB    110B    ;^K , VT
  109.     DEFW    HOMEIT    ;CURSOR HOME COMMAND
  110.     DEFB    111B    ;^L , FF
  111.     DEFW    CLRIT    ;CLEAR SCREEN COMMAND
  112.     DEFB    011B    ;^M , CR
  113.     DEFW    CRGRT    ;CARRAIGE RETURN COMMAND
  114.     DEFB    110B    ;^N , SO
  115.     DEFW    CRSON    ;CURSOR ON COMMAND
  116.     DEFB    110B    ;^O , SI
  117.     DEFW    CRSOFF    ;CURSOR OFF COMMAND
  118.     DEFB    110B    ;^P , DLE
  119.     DEFW    PRTOGL    ;PRINTER ON/OFF TOGGLE COMMAND
  120.     DEFB    011B    ;^Q , DC1
  121.     DEFW    PMODE    ;PAGE MODE COMMAND
  122.     DEFB    000B    ;^R , DC2
  123.     DEFW    0    ;ALTERNATE CR - UNDER BUFF I/O
  124. ;             REPEAT COMM IN VIDPROCESSOR
  125.     DEFB    000B    ;^S , DC3
  126.     DEFW    0    ;SPEED CONTROL - SCROLLING
  127.     DEFB    110B    ;^T , DC4
  128.     DEFW    LINSRT    ;INSERT A BLANK LINE COMMAND
  129.     DEFB    000B    ;^U , NAK
  130.     DEFW    0    ;RESERVED
  131.     DEFB    111B    ;^V , SYN
  132.     DEFW    DIRMD    ;DIRECT VIDEO COMMAND
  133.     DEFB    011B    ;^W , ETB
  134.     DEFW    SMODE    ;SCROLL MODE COMMAND
  135.     DEFB    000B    ;^X , CAN
  136.     DEFW    0    ;RESERVED
  137.     DEFB    110B    ;^Y , EM
  138.     DEFW    LDEL    ;LINE DELETE COMMAND
  139.     DEFB    000B    ;^Z , SUB
  140.     DEFW    0    ;RESERVED
  141.     DEFB    000B    ;^[ , ESC
  142.     DEFW    0    ;RESERVED
  143.     DEFB    110B    ;^]-1 , FS
  144.     DEFW    CRSLT    ;CURSOR LEFT COMMAND
  145.     DEFB    110B    ;^] , GS
  146.     DEFW    CRSUP    ;CURSOR UP COMMAND
  147.     DEFB    110B    ;^^ , RS
  148.     DEFW    CRSRT    ;CURSOR RIGHT COMMAND
  149.     DEFB    110B    ;^/ , VS
  150.     DEFW    CRSDN    ;CURSOR DOWN COMMAND
  151.     DEFB    111B    ;5FH , TTY BACK SPACE
  152.     DEFW    BSDEL    ;BACK-SPACE AND DELETE
  153. ;
  154. ;    INITIALIZE THE PACKAGE
  155. ;
  156. CINIT    PUSH    IY    ;EXTERNAL ENTRY
  157.     LD    IY,(CWORK)
  158.     PUSH    HL
  159.     CALL    CINIT1
  160.     POP    HL
  161.     POP    IY
  162.     RET
  163. ;
  164. CINIT1    LD    HL,(TOP)    ;HOME CURSOR
  165.     CALL    PUTC
  166.     SUB    A
  167.     LD    (IY+2),A    ;SET TO SCROLL MODE
  168.     LD    (IY+3),A    ;TURN ON CURSOR
  169.     LD    (IY+4),A    ;SET VIDEO TO DIRECT MODE
  170.     LD    (IY+8),34H    ;SET SCROLL SPEED (MED)
  171.     LD    (IY+9),A    ;TURN OFF PRINTER
  172.     LD    (IY+10),A    ;INDICATE BUFFER EMPTY
  173.     OUT    (0C8H),A    ;INIT P-TECH VDM
  174.     RET
  175.     DEFB    0,0,0,0,0,0,0,0 ;PATCH AREA
  176.     DEFB    0,0,0,0,0,0,0,0
  177. ;
  178. ;CONSOL INPUT .. 3 DIFFERENT ENTRIES
  179. ;    1..status - of key entry
  180. ;    2..stobed key entry
  181. ;    3..unstrobed entry
  182. ;
  183. ;    key data msb is masked off
  184. ;    upon return the carry flag is:
  185. ;        set if msb is high
  186. ;        cleared if msb is low
  187. ;
  188. KSTAT    IN    A,(KSPORT)
  189.     AND    KSMASK
  190.     NOP        ;RESERVED FOR NEG POLARITY
  191.     NOP        ;USE XOR KSMASK
  192.     RET    Z
  193.     LD    A,0FFH
  194.     RET
  195. ;
  196. KINP1    CALL    KSTAT
  197.     JR    Z,KINP1
  198. KINP2    IN    A,(KDPORT)
  199.     NOP        ;RESERVED FOR NEG POL
  200.     OR    A
  201.     RET P
  202.     AND    7FH
  203.     SCF
  204.     RET
  205. ;
  206. ;    LINE PRINTER OUTPUT
  207. ;        {PRESENT CONFIGURATION IS COMPATABLE}
  208. ;        {TO THE CENTRONICS 779          }
  209. ;
  210. OPT3A    IN    A,(LSPORT)
  211.     AND    LSMASK
  212.     NOP            ;RESERVED FOR NEG POL
  213.     NOP
  214.     JR    Z,OPT3A
  215.     RET
  216. ;
  217. OPT3B    IN    A,(LBPORT)
  218.     AND    LBMASK
  219.     NOP            ;RESERVED FOR NEG POL
  220.     NOP
  221.     JR    Z,OPT3B
  222.     RET
  223. ;
  224. OUTPT3    CALL    OPT3A
  225.     CALL    OPT3B
  226.     LD    A,C
  227.     NOP            ;RESERVED FOR NEG POL
  228.     OUT    (LDPORT),A
  229.     RET
  230. ;
  231. ;    GET SCREEN CURSOR ADDRESSES
  232. ;
  233. CVADDR    PUSH    IY
  234.     LD    IY,(CWORK)
  235.     CALL    GETC
  236.     CALL    COL
  237.     LD    C,A
  238.     CALL    ROW
  239.     LD    B,A
  240.     POP    IY
  241.     RET
  242. ;
  243. ;    BUFFERED INPUT - SCREEN EDITED
  244. ;
  245. BUFIN1    CALL SVREG
  246.     LD    L,(IY+11)
  247.     LD    E,(IY+12)
  248.     LD    D,(IY+13)
  249. BF0    LD    A,L
  250.     OR    A
  251.     JR    NZ,BF1
  252.     LD    A,(IY+10)
  253.     OR    A
  254.     JR    Z,BF0A
  255.     SUB    A
  256.     LD    (IY+10),A
  257.     LD    A,0DH
  258.     JR    BF2
  259. BF0A    DEC    A
  260.     LD    (IY+10),A
  261.     CALL    BLDIT
  262.     LD    HL,(BUFFER)
  263.     EX    DE,HL
  264.     ADD    HL,BC
  265.     SBC    HL,DE
  266.     LD    (IY+11),L
  267.     LD    (IY+12),E
  268.     LD    (IY+13),D
  269.     JR    BF0
  270. BF1    LD    A,(DE)
  271.     DEC    HL
  272.     INC    DE
  273.     LD    (IY+11),L
  274.     LD    (IY+12),E
  275.     LD    (IY+13),D
  276. BF2    POP    HL    ;POP OFF PRIOR AF TO SAVE PRES. AF
  277.     JP    EXIT3
  278. ;
  279. ;    LIMITED VIDEO OUTPUT - SCROLL MODE
  280. ;
  281. OUTPT1    CALL    SVREG
  282.     CALL    VIDCK
  283.     LD    DE,EXIT1
  284.     PUSH    DE
  285. LVIDEO    LD    B,1
  286.     SUB    A
  287.     JR    JUMPTO
  288. ;
  289. ;    FULL CONTROL VIDEO OUTPUT - PAGE MODE
  290. ;
  291. OUTPT2    CALL    SVREG
  292.     CALL    VIDCK
  293.     LD    DE,EXIT1
  294.     PUSH    DE
  295. FVIDEO    LD    B,2
  296.     LD    A,0FFH
  297. ;
  298. ;
  299. ;    VECTOR TO COMMAND
  300. ;
  301. JUMPTO    LD    (IY+2),A
  302.     CALL    CTRLCK
  303.     CALL    GETC
  304.     JP    NC,PRTCHR
  305.     LD    IX,TABLE
  306.     LD    E,A
  307.     ADD    A,A
  308.     ADD    A,E
  309.     LD    E,A
  310.     LD    D,00
  311.     ADD    IX,DE
  312.     LD    A,(IX)
  313.     AND    B
  314.     LD    A,C
  315.     JP    Z,PRTCHR
  316.     LD    E,(IX+1)
  317.     LD    D,(IX+2)
  318.     PUSH    DE
  319.     POP    IX
  320.     JP    (IX)
  321. ;
  322. ;    SOFTWARE CONTROLLED OUTPUT
  323. ;
  324. OUTPT4    CALL    SVREG
  325.     CALL    VIDCK
  326.     LD    DE,EXIT1
  327.     PUSH    DE
  328.     JP    VOUT
  329. ;
  330. ;    BUFFERED OUTPUT
  331. ;
  332. OUTPT5    CALL    SVREG
  333.     PUSH    HL
  334.     CALL    VIDCK
  335.     POP    HL
  336.     LD    DE,EXIT2
  337.     PUSH    DE
  338.     JP    VPROCR
  339. ;
  340. ;    COMMAND BUILDER
  341. ;
  342. BUFIN2    CALL    SVREG
  343.     CALL    VIDCK
  344.     LD    DE,EXIT2
  345.     PUSH    DE
  346.     JP    BLDIT
  347.     ;
  348. ;    VIDEO DISPLAY PROCESSOR
  349. ;
  350. VPROCR    LD    A,(HL)
  351.     LD    C,A
  352.     OR    A
  353.     RET Z
  354.     CP    01H    ;MACRO FUNCTION?
  355.     JR    NZ,VIDPR1
  356.     CALL MACROM
  357.     JR    AGAIN
  358. VIDPR1    CP    12H    ;REPEAT COMMAND?
  359.     JR    Z,REPMD
  360.     CALL    VCHOUT
  361. AGAIN    INC    HL
  362.     JR    VPROCR
  363. ;            REPEAT MODE
  364. REPMD    INC    HL
  365.     LD    B,(HL)
  366.     INC    HL
  367.     LD    C,(HL)
  368.     CP    01H    ;MACRO FUNCTION?
  369.     JR    Z,MACMD
  370. RPM1    CALL    VCHOUT
  371.     DJNZ    RPM1
  372.     JR    AGAIN
  373. MACMD    PUSH    HL
  374.     CALL    MACROM
  375.     POP    HL
  376.     DJNZ    MACMD
  377.     JR    AGAIN
  378. ;            MACRO FUNCTION
  379. MACROM    INC    HL
  380.     LD    B,(HL)
  381. MCR1    INC    HL
  382.     LD    E,(HL)
  383.     INC    HL
  384.     LD    D,(HL)
  385.     PUSH    HL
  386.     PUSH    BC
  387.     EX    DE,HL
  388.     CALL    VPROCR
  389.     POP    BC
  390.     POP    HL
  391.     DJNZ    MCR1
  392.     RET
  393. ;
  394. ;    OUTPUT TO VIDEO UNDER MODE CONTROL
  395. ;
  396. VCHOUT    CALL    SREG2
  397.     LD    DE,EXIT5
  398.     PUSH    DE
  399. VOUT    LD    A,(IY+4)
  400.     OR    A
  401.     JR    Z,VOUT1
  402.     LD    A,C
  403.     CP    5FH
  404.     JR    Z,VOUT1
  405.     CP    7FH
  406.     JR    Z,VOUT1
  407.     CP    20H
  408.     JR    C,VOUT1
  409.     OR    80H
  410.     LD    C,A
  411. VOUT1    LD    A,(IY+2)
  412.     INC    A
  413.     JP    Z,FVIDEO
  414.     LD    A,(IY+9)
  415.     OR    A
  416.     CALL    NZ,OUTPT3
  417.     JP    LVIDEO
  418. ;
  419. ;    BUILD A LINE ON THE SCREEN
  420. ;    THEN PUT IT AWAY INTO THE BUFFER
  421. ;
  422. ;    exit upon sensing a carraige return
  423. ;
  424. BLDIT    LD    HL,CMSG0
  425.     CALL    VPROCR
  426. BD0    LD    HL,CMSG1
  427.     CALL    VPROCR    ;CLEAR LINE
  428. BD1    CALL    KINP1
  429.     LD    C,A
  430.     CP    LNFEED
  431.     JR    Z,BD0
  432.     CP    CARRET
  433.     JR    Z,FIND1
  434.     CP    ALTRET    ;ALTERNATE CARRAIGE RETURN
  435.  
  436.     JR    Z,FIND2
  437. BD3    CALL    VCHOUT
  438.     JR    BD1
  439. ;
  440. ;    FIND LINE LOCATION ON SCREEN
  441. ;
  442. FIND1    LD    BC,64
  443.     JR    FIND
  444. FIND2    LD    BC,128
  445. FIND    PUSH    BC
  446.     LD    C,OFFCUR
  447.     CALL    VCHOUT
  448.     CALL    CVADDR
  449.     LD    A,L
  450.     SUB    C
  451.     LD    L,A
  452.     JR    NC,FND1
  453.     DEC    H
  454. ;
  455. ;    STUFF IT INTO COMMAND BUFFER
  456. ;
  457. FND1    LD    DE,(BUFFER)
  458.     POP    BC
  459.     PUSH    BC
  460.     PUSH    DE
  461.     LDIR
  462.     LD    HL,CMSG2
  463.     CALL    VPROCR
  464. ;
  465. ;    GET    GIST OF COMMAND MESSAGE
  466. ;
  467.     POP    DE
  468.     POP    BC
  469.     PUSH    DE
  470.     LD    H,B
  471.     LD    L,C
  472.     ADD    HL,DE
  473.     DEC    HL
  474.     EX    DE,HL
  475.     LD    A,(HL)
  476.     CP    ':'
  477.     JR    NZ,FND2
  478.     INC    HL
  479.     DEC    BC
  480. FND2    LD    A,20H
  481. FND3    CPI
  482.     JP    PO,BD6
  483.     JR    Z,FND3
  484.     DEC    HL
  485.     INC    BC
  486.     EX    DE,HL
  487. FND4    CPD
  488.     JR    Z,FND4
  489.     INC    BC
  490. BD6    POP    IX
  491.     LD    (IX-1),D
  492.     LD    (IX-2),E
  493.     LD    (IX-3),C
  494.     RET
  495. ;
  496. ;    GET ROW ADDRESS
  497. ;
  498. ROW:    LD    A,03H
  499.     AND    H
  500.     LD    B,A
  501.     LD    A,0C0H
  502.     AND    L
  503.     ADD    A,B
  504.     RLCA
  505.     RLCA
  506.     CP    00H
  507.     RET
  508. ;
  509. ;    GET COLUMN ADDRESS
  510. ;
  511. COL:    LD    A,3FH
  512.     AND    L
  513.     RET
  514. ;
  515. ;    SAVE REGISTERS ON ENTRY
  516. ;
  517. SVREG:    EX (SP),HL
  518.     PUSH    BC
  519.     PUSH    DE
  520.     PUSH    IX
  521.     PUSH    IY
  522.     LD    IY,(CWORK)
  523.     PUSH    AF
  524.     PUSH    HL
  525.     LD    HL,12
  526.     ADD    HL,SP
  527.     PUSH    DE
  528.     LD    E,(HL)
  529.     INC    HL
  530.     LD    D,(HL)
  531.     EX    DE,HL
  532.     POP    DE
  533.     RET
  534. SREG2    EX    (SP),HL
  535.     PUSH    BC
  536.     PUSH    DE
  537.     JP    (HL)
  538. ;
  539. VIDCK    CALL    GETC
  540.     LD    A,(BOTRT+1)
  541.     CP    H
  542.     JR    C,VCK1
  543.     LD    A,(TOP+1)
  544.     DEC    A
  545.     CP    H
  546.     RET C
  547. VCK1    LD    HL,(TOP)
  548.     CALL    PUTC
  549.     CALL    CINIT1
  550.     RET
  551. ;
  552. ;    RESTORE REGISTERS AND EXIT
  553. ;
  554. EXIT1:    CALL    ON
  555.     CALL    PUTC
  556. EXIT2:    POP    AF
  557. EXIT3:    POP    IY
  558.     POP    IX
  559. EXIT4:    POP    DE
  560.     POP    BC
  561.     POP    HL
  562.     RET
  563. EXIT5    CALL    ON
  564.     CALL    PUTC
  565.     JR    EXIT4
  566. ;
  567. ;    CHECK ON CONTROL CHARACTERS
  568. ;
  569. CTRLCK    LD    A,C
  570.     CP    7FH
  571.     JR    NZ,CTR1
  572.     SUB    A
  573.     JR    CTR3
  574. CTR1    CP    5FH
  575.     JR    NZ,CTR2
  576.     LD    A,21H
  577.     JR    CTR3
  578. CTR2    CP    20H
  579.     RET NC
  580.     INC    A
  581. CTR3    SCF
  582.     RET
  583. ;
  584. ;    SAVE CURSOR LOCATION
  585. ;
  586. PUTC    LD    (IY),L
  587.     LD    (IY+1),H
  588.     RET
  589. ;
  590. ;    GET CURSOR LOCATION 
  591. ;
  592. GETC    LD    L,(IY)
  593.     LD    H,(IY+1)
  594.     RET
  595. ;
  596. ;    SET/RESET PRINTER TOGGLE
  597. ;
  598. PRTOGL    LD    A,(IY+9)
  599.     OR    A
  600.     JR    Z,PTGL1
  601.     LD    (IY+9),00H
  602.     RET
  603. PTGL1    DEC    A
  604.     LD    (IY+9),A
  605.     RET
  606. ;
  607. ;    INSERT A BLANK LINE
  608. ;
  609. LINSRT    CALL    CRGRT
  610.     LD    B,40H
  611. LINS1    PUSH    BC
  612.     CALL    GINS1
  613.     POP    BC
  614.     DJNZ    LINS1
  615.     RET
  616. ;
  617. ;    DELETE A LINE
  618. ;
  619. LDEL    CALL    CRGRT
  620.     CALL    PUTC
  621.     LD    B,40H
  622. LDEL1    PUSH    BC
  623.     CALL    GDEL
  624.     POP    BC
  625.     DJNZ    LDEL1
  626.     RET
  627. ;
  628. ;    BACKSPACE AND DELETE
  629. ;
  630. BSDEL    CALL    COL
  631.     RET Z
  632.     CALL    OFF
  633.     DEC    L
  634.     CALL    PUTC
  635.     JP    RDEL
  636. ;
  637. ;    SET TO PAGE MODE
  638. ;
  639. PMODE    LD    (IY+2),0FFH
  640.     LD    A,(IY+9)
  641.     OR    A
  642.     RET Z
  643.     LD    C,0DH
  644.     CALL    OUTPT3
  645.     LD    (IY+9),00H
  646.     RET
  647. ;
  648. ;    SET TO SCROLL MODE
  649. ;
  650. SMODE    LD    (IY+2),00H
  651.     RET
  652. ;
  653. ;    SET TO DIRECT VIDEO MODE
  654. ;
  655. DIRMD    LD    (IY+4),00H
  656.     RET
  657. ;
  658. ;    SET TO REVERSE VIDEO MODE
  659. ;
  660. REVMD    LD    (IY+4),0FFH
  661.     RET
  662. ;
  663. ;    TURN CURSOR ON
  664. ;
  665. ON:    LD    A,(IY+2)
  666.     OR    A
  667.     JR    Z,ON1
  668.     LD    A,(IY+3)
  669.     OR    A
  670.     RET NZ
  671. ON1:    LD    A,(HL)
  672.     OR    80H
  673.     LD    (HL),A
  674.     RET
  675.     NOP
  676.     NOP
  677.     NOP
  678. CRSON:    SUB    A
  679.     LD    (IY+3),A
  680.     CALL    ON
  681.     RET
  682. ;
  683. ;    TURN CURSOR OFF
  684. ;
  685. OFF:    LD    A,(HL)
  686.     AND    7FH
  687.     LD    (HL),A
  688.     RET
  689.     NOP
  690.     NOP    
  691.     NOP
  692.     NOP
  693.     NOP
  694. CRSOFF: LD    A,0FFH
  695.     LD    (IY+3),A
  696.     CALL    OFF
  697.     RET
  698. ;
  699. ;    CURSOR RIGHT
  700. ;
  701. CRSRT    CALL    COL
  702.     SUB    3FH
  703.     RET Z
  704.     CALL    OFF
  705.     INC    L
  706.     RET
  707. ;
  708. ;    CURSOR LEFT
  709. ;
  710. CRSLT:    CALL    COL
  711.     RET Z
  712.     CALL    OFF
  713.     DEC    L
  714.     RET
  715. ;
  716. ;    CURSOR UP
  717. ;
  718. CRSUP:    CALL    ROW
  719.     RET Z
  720.     CALL    OFF
  721.     LD    A,L
  722.     SUB    40H
  723.     LD    L,A
  724.     RET NC
  725.     DEC    H
  726.     RET
  727. ;
  728. ;    CURSOR DOWN
  729. ;
  730. CRSDN    CALL    ROW
  731.     CP    0FH
  732.     RET Z
  733. CDN1    CALL    OFF
  734.     LD    A,L
  735.     ADD    A,40H
  736.     LD    L,A
  737.     RET NC
  738.     INC    H
  739.     RET
  740. ;
  741. ;    MOVE UP ONE BYTE IN MEMORY
  742. ;
  743. SFTUP:    LD    A,B
  744.     OR    C
  745.     JR    Z,S1
  746.     LD    D,H
  747.     LD    E,L
  748.     DEC    HL
  749.     LDDR
  750. S1:    INC    HL
  751.     LD    (HL),20H
  752.     RET
  753. ;
  754. ;    MOVE DOWN IN MEMORY
  755. ;
  756. SFTDN:    LD    A,B
  757.     OR    C
  758.     JR    Z,S2
  759.     LD    D,H
  760.     LD    E,L
  761.     INC    HL
  762.     LDIR
  763.     DEC    HL
  764. S2:    LD    (HL),20H
  765.     CALL    GETC
  766.     RET
  767. ;
  768. ;    GLOBAL SETUP
  769. ;
  770. GSU:    LD    D,H
  771.     LD    E,L
  772.     LD    HL,(BOTRT)
  773.     SUB    A
  774.     SBC    HL,DE
  775.     LD    B,H
  776.     LD    C,L
  777.     RET
  778. ;
  779. ;    ROW SETUP
  780. ;
  781. RSU:    CALL    COL
  782.     NEG
  783.     ADD    A,3FH
  784.     LD    C,A
  785.     LD    B,00H
  786.     RET
  787. ;
  788. ;    GLOBAL INSERT
  789. ;
  790. GINS:    CALL    OFF
  791. GINS1    CALL    GSU
  792.     LD    HL,(BOTRT)
  793.     CALL    SFTUP
  794.     RET
  795. ;
  796. ;    GLOBAL DELETE
  797. ;
  798. GDEL:    CALL    GSU
  799.     CALL    GETC
  800.     CALL    SFTDN
  801.     RET
  802. ;
  803. ;    ROW INSERT
  804. ;
  805. RINS:    CALL    OFF
  806.     CALL    RSU
  807.     ADD    A,L
  808.     LD    L,A
  809.     CALL    SFTUP
  810.     RET
  811. ;
  812. ;    ROW DELETE
  813. ;
  814. RDEL:    CALL    RSU
  815.     CALL    SFTDN
  816.     RET
  817. ;
  818. ;    HORIZONTAL TAB
  819. ;
  820. TABLT:    CALL    OFF
  821.     LD    BC,0008H
  822.     ADD    HL,BC
  823.     LD    A,L
  824.     AND    0F8H
  825.     LD    L,A
  826.     CALL    COL
  827.     LD    C,A
  828.     CALL    ROW
  829.     OR    C
  830.     CP    00H
  831.     RET NZ
  832.     LD    HL,(BOTLT)
  833.     CALL    PUTC
  834.     JP    SCRLIT
  835. ;
  836. ;    CURSOR HOME
  837. ;
  838. HOMEIT: CALL    OFF
  839.     LD    HL,(TOP)
  840.     RET
  841. ;
  842. ;    CURSOR BOTTOM OUT
  843. ;
  844. BOT:    CALL    OFF
  845.     LD    HL,(BOTLT)
  846.     RET
  847. ;
  848. ;    CLEAR SCREEN
  849. ;
  850. CLRIT:    LD    HL,(BOTRT)
  851.     LD    D,H
  852.     LD    E,L
  853.     DEC    DE
  854.     LD    BC,03FFH
  855.     LD    (HL),20H
  856.     LDDR
  857.     LD    A,0E0H
  858.     LD    (IY+8),A
  859.     SUB    A
  860.     LD    (IY+3),A
  861.     RET
  862. ;
  863. ;    CARRAGE RETURN
  864. ;
  865. CRGRT:    CALL    OFF
  866.     LD    A,L
  867.     AND    0C0H
  868.     LD    L,A
  869.     RET
  870. ;
  871. ;    LINEFEED
  872. ;
  873. LINEFD: CALL    OFF
  874.     CALL    ROW
  875.     CP    0FH
  876.     JP    Z,SCRLIT
  877.     JP    CDN1
  878. ;
  879. ;    ENTER CHARACTER ON SCREEN
  880. ;
  881. PRTCHR: LD    (HL),A
  882.     INC    HL
  883.     CALL    COL
  884.     RET NZ
  885.     CALL    ROW
  886.     RET NZ
  887.     LD    HL,(BOTLT)
  888.     CALL    PUTC
  889.     JP    SCRLIT
  890. ;
  891. ;    SCROLL SCREEN IF ALLOWED
  892. ;
  893. SCRLIT: LD    A,(IY+2)
  894.     INC    A
  895.     JP    Z,SCR4
  896.     CALL    UPONE
  897.     CALL    KINP2
  898.     CP    13H
  899.     CALL    Z,KINP1
  900. SCR0:    CP    30H
  901.     JP    C,SCR1
  902.     CP    38H
  903.     JP    NC,SCR1
  904.     SUB    30H
  905.     RRCA
  906.     RRCA
  907.     RRCA
  908.     AND    0E0H
  909.     LD    (IY+8),A
  910. SCR1:    LD    A,(IY+8)
  911.     CP    00H
  912.     JP    NZ,SCR2
  913.     CALL    KINP1
  914.     CP    20H
  915.     RET Z
  916.     CP    30H
  917.     RET Z
  918.     JP    SCR0
  919. SCR2:    LD    D,A
  920.     LD    E,00H
  921. SCR3:    INC    E
  922.     JP    NZ,SCR3
  923.     INC    D
  924.     JP    NZ,SCR3
  925.     RET
  926. SCR4:    CALL    COL
  927.     LD    HL,(TOP)
  928.     ADD    A,L
  929.     LD    L,A
  930.     RET
  931. ;
  932. ;    SCROLL UP ONE LINE
  933. ;
  934. UPONE:    LD    DE,(TOP)
  935.     LD    HL,40H
  936.     ADD    HL,DE
  937.     LD    BC,3C0H
  938.     LDIR
  939.     LD    HL,(BOTRT)
  940.     LD    (HL),20H
  941.     LD    BC,03FH
  942.     LD    D,H
  943.     LD    E,L
  944.     DEC    DE
  945.     LDDR
  946.     CALL    GETC
  947.     RET
  948. ;
  949. ;    MESSAGE MACROS FOR PACKAGE
  950. ;    (USED IN BUFFIN-BUILD)
  951. ;
  952. ;    CRLF,SET PAGE MODE
  953. EOM    DEFL    NULL
  954. CMSG0    DEFB    CARRET,LNFEED,SPGMD,EOM
  955. ;    CLEAR LINE
  956. CMSG1    DEFB    CARRET,SSLMD,RPTCMD,40H,20H,SPGMD,BKFEED,EOM
  957. ;    SET SCROLL MODE
  958. CMSG2    DEFB    ONCURS,SSLMD,EOM
  959.