home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG051.ARK / VDB.ALX < prev    next >
Text File  |  1984-04-29  |  6KB  |  405 lines

  1. REV EQU 11H ;    12/28/80  R. Curtiss    BUFF, INIR, OTIR
  2.  
  3. ;REV EQU 10H ;    12/28/80  R. Curtiss    from NB-VDB
  4.  
  5. ;VREV EQU 21H ;    06/10/80  R. Curtiss    HOME --> CHOME
  6.  
  7. BEGIN
  8. ;
  9. ; Entry points
  10. ;
  11.     ENTRY    VO
  12. ;
  13. ; TDL-XITAN VDB driver for Heath H19 emulation (partial)
  14. ;
  15. NSTATE:    DW    ST1
  16. CIMAGE:    DB    00000000B
  17. MSR:    DB    0
  18. INVERT:    DB    0
  19. ;
  20. ; Local data storage (uninitialized)
  21. ;
  22.     DSEG
  23. BUFF:    DS    81    ; scroll buffer
  24.     CSEG
  25. ;
  26. ; ----------------------------------------
  27. ;
  28. BS    EQU    08H
  29. CR    EQU    0DH
  30. LF    EQU    0AH
  31. BEL    EQU    07H
  32. ESC    EQU    1BH
  33. DEL    EQU    7FH
  34.  
  35. VDBCTL    EQU    9CH
  36. VDBDAT    EQU    VDBCTL+1
  37. CONTROL    EQU    VDBCTL+2
  38.  
  39. VDBMRF    EQU    10000000B
  40. VDBYCF    EQU    11000000B
  41. VDBXCR    EQU    11100000B
  42. VDBYCR    EQU    11100001B
  43. VDBMRR    EQU    11100010B
  44. VDBRES    EQU    11100011B
  45. VDBGMK    EQU    01100000B
  46.  
  47. BELBIT    EQU    00000001B
  48.  
  49. VDBAP    EQU    0
  50. VDBBE    EQU    1
  51. VDBIS    EQU    2
  52. VDBID    EQU    3
  53. VDBDC    EQU    4
  54. VDBDD    EQU    5
  55. PROCEDURE VOINIT
  56.     SETNEXT ( NSTATE = ST1 )
  57.     MVI    A,00000000B
  58.     STA    CIMAGE
  59.     XRA    A
  60.     STA    INVERT
  61.     MVI    A,4
  62.     CALL    PUTMODE
  63.     RET
  64. PROCEDURE VO
  65.     PUSH    B
  66.     PUSH    D
  67.     PUSH    H
  68.     MOV    A,C
  69.     ANI    7FH
  70.     EXECUTE ( NSTATE )
  71.     ( ST1 )
  72.     CPI    ESC
  73.     WHEN ( ZERO )
  74.     SETNEXT ( NSTATE = ST2 )
  75.     FIN
  76.     ELSE  CALL VOUT
  77.     FIN
  78.     ( ST2 )
  79.     SELECT
  80.     ( 'Y' )
  81.     SETNEXT ( NSTATE = ST3 )
  82.     FIN
  83.     ( 'S' )
  84.     SETNEXT ( NSTATE = ST5 )
  85.     MVI    A,0FFH
  86.     STA    MSR
  87.     FIN
  88.     ( 'R' )
  89.     SETNEXT ( NSTATE = ST5 )
  90.     XRA    A
  91.     STA    MSR
  92.     FIN
  93.     ( OTHERWISE )
  94.     SETNEXT ( NSTATE = ST1 )
  95.     CALL    VOP
  96.     FIN
  97.     FIN
  98.     FIN
  99.     ( ST3 )
  100.     SETNEXT ( NSTATE = ST4 )
  101.     SUI    32
  102.     CALL    PUTY
  103.     FIN
  104.     ( ST4 )
  105.     SETNEXT ( NSTATE = ST1 )
  106.     SUI    32
  107.     CALL    PUTX
  108.     FIN
  109.     ( ST5 )
  110.     SETNEXT ( NSTATE = ST1 )
  111.     SUI    '0'
  112.     ANI    7
  113.     MOV    B,A
  114.     MVI    A,1
  115.     INR    B
  116.     LOOP
  117.     DCR    B
  118.     BREAK IF ( ZERO )
  119.     RLC
  120.     FIN
  121.     MOV    B,A
  122.     LDA    MSR
  123.     ORA    A
  124.     WHEN ( ZERO )  ; reset selected mode bit
  125.     MOV    A,B
  126.     CMA
  127.     MOV    B,A
  128.     CALL    GETMODE
  129.     ANA    B
  130.     CALL    PUTMODE
  131.     FIN
  132.     ELSE
  133.     CALL    GETMODE
  134.     ORA    B
  135.     CALL    PUTMODE
  136.     FIN
  137.     FIN
  138.     FIN
  139.     POP    H
  140.     POP    D
  141.     POP    B
  142.     RET
  143. PROCEDURE VOUT
  144.     SELECT
  145.     ( DEL )  NOP
  146.     ( CR )
  147.     XRA    A
  148.     CALL    PUTX
  149.     FIN
  150.     ( LF )
  151.     CALL    GETY
  152.     INR    A
  153.     CPI    25
  154.     WHEN ( CARRY )  CALL PUTY  ; y = y + 1
  155.     ELSE  CALL SCROLL
  156.     FIN
  157.     ( BS )
  158.     CALL    GETX
  159.     ORA    A
  160.     IF ( NOT ZERO )
  161.     DCR    A
  162.     CALL    PUTX    ; x = x - 1
  163.     FIN
  164.     FIN
  165.     ( BEL )
  166.     LDA    CIMAGE
  167.     ORI    BELBIT
  168.     OUT    CONTROL    ; fire bell one shot
  169.     XRI    BELBIT
  170.     OUT    CONTROL
  171.     FIN
  172.     ( OTHERWISE )
  173.     CPI    ' '
  174.     WHEN ( CARRY )  CALL WHAT  ; control character display
  175.     ELSE  CALL DISPLAY  ; normal character display
  176.     FIN
  177.     FIN
  178.     RET
  179. PROCEDURE VOP
  180.     SELECT
  181.     ( 'E' )  CALL ERASE
  182.     ( 'J' )  CALL E2EOS
  183.     ( 'K' )  CALL E2EOL
  184.     ( 'l' )  CALL ELINE
  185.     ( 'H' )  CALL CHOME
  186.     ( 'A' )  CALL UP
  187.     ( 'B' )  CALL DOWN
  188.     ( 'C' )  CALL RIGHT
  189.     ( 'D' )  CALL LEFT
  190.     ( 'p' )  CALL REVERSE
  191.     ( 'q' )  CALL NORMAL
  192.     ( OTHERWISE )  CALL WHAT
  193.     FIN
  194.     RET
  195. PROCEDURE WHAT
  196.     CPI    32
  197.     WHEN ( CARRY )  ; control character
  198.     PUSH    PSW
  199.     MVI    A,'^'+80H
  200.     CALL    DISPLAY
  201.     POP    PSW
  202.     ORI    0C0H    ; reverse and non control
  203.     CALL    DISPLAY
  204.     FIN
  205.     ELSE
  206.     ORI    80H
  207.     CALL    DISPLAY
  208.     FIN
  209.     RET
  210. PROCEDURE DISPLAY
  211.     MOV    B,A
  212.     LDA    INVERT
  213.     ORA    A
  214.     MOV    A,B
  215.     IF ( NOT ZERO )  ; blink or invert
  216.     XRI    80H
  217.     FIN
  218.     OUT    VDBDAT
  219.     MVI    A,VDBXCR
  220.     OUT    VDBCTL
  221.     IN    VDBCTL
  222.     ORA    A
  223.     IF ( ZERO )   ; line full - wrap around
  224.     MVI    A,VDBYCR
  225.     OUT    VDBCTL
  226.     IN    VDBCTL
  227.     ORA    A
  228.     IF ( ZERO )   ; screen full - scroll required
  229.     CALL    SCROLL
  230.     FIN
  231.     FIN
  232.     RET
  233. PROCEDURE ERASE
  234.     XRA    A
  235.     CALL    PUTX
  236.     CALL    PUTY
  237.     REPEAT
  238.     CALL    CLIN    ; CLEAR THE LINE
  239.     CALL    GETY
  240.     ORA    A
  241.     UNTIL ( ZERO )
  242.     RET
  243. PROCEDURE E2EOS
  244.     CALL    GETX
  245.     PUSH    PSW
  246.     CALL    GETY
  247.     PUSH    PSW
  248.     REPEAT
  249.     CALL    CLIN
  250.     CALL    GETY
  251.     ORA    A
  252.     UNTIL ( ZERO )
  253.     POP    PSW
  254.     CALL    PUTY
  255.     POP    PSW
  256.     CALL    PUTX
  257.     RET
  258. PROCEDURE UP
  259.     CALL    GETY
  260.     ORA    A
  261.     IF ( NOT ZERO )  ; not top of screen
  262.     DCR    A
  263.     CALL    PUTY    ; Y = Y - 1
  264.     FIN
  265.     RET
  266. PROCEDURE DOWN
  267.     CALL    GETY
  268.     INR    A
  269.     CPI    25
  270.     IF ( CARRY )
  271.     CALL PUTY    ; y = y + 1
  272.     FIN
  273.     RET
  274. PROCEDURE RIGHT
  275.     CALL    GETX
  276.     INR    A
  277.     CPI    80
  278.     IF ( CARRY )  ; cursor at right of screen
  279.     CALL    PUTX    ; X = X + 1
  280.     FIN
  281.     RET
  282. PROCEDURE LEFT
  283.     CALL    GETX
  284.     ORA    A
  285.     IF ( NOT ZERO )
  286.     DCR    A
  287.     CALL    PUTX
  288.     FIN
  289.     RET
  290. PROCEDURE REVERSE
  291.     MVI    A,0FFH
  292.     STA    INVERT
  293.     RET
  294. PROCEDURE NORMAL
  295.     MVI    A,0
  296.     STA    INVERT
  297.     RET
  298. PROCEDURE E2EOL
  299.     CALL    GETX
  300.     PUSH    PSW
  301.     CALL    GETY
  302.     PUSH    PSW
  303.     CALL    CLIN
  304.     POP    PSW
  305.     CALL    PUTY
  306.     POP    PSW
  307.     CALL    PUTX
  308.     RET
  309. PROCEDURE ELINE
  310.     CALL    GETY
  311.     PUSH    PSW
  312.     XRA    A
  313.     CALL    PUTX
  314.     CALL    CLIN
  315.     POP    PSW
  316.     CALL    PUTY
  317.     RET
  318. PROCEDURE CHOME
  319.     XRA    A
  320.     CALL    PUTX    ; X = 0
  321.     CALL    PUTY    ; Y = 0
  322.     RET
  323. PROCEDURE SCROLL
  324.     CALL    GETMODE    ; GET MODE
  325.     LXI    H,BUFF
  326.     PUSH    PSW
  327.     ORI    10H    ; 1<VDBDC  KILL CURSOR
  328.     OUT    VDBCTL    ; INHIBIT
  329.     PUSH    H
  330.     MVI    D,VDBYCF+1
  331.     MVI    C,VDBDAT    ; data port
  332.     XRA    A
  333.     OUT    VDBCTL
  334.     MOV    A,D
  335.     REPEAT
  336.     OUT    VDBCTL    ; SET Y POS
  337.     MVI    B,80
  338.     .Z80
  339.     INIR
  340.     .8080
  341.     POP    H
  342.     PUSH    H
  343.     MOV    A,D
  344.     DCR    A
  345.     OUT    VDBCTL
  346.     MVI    B,80
  347.     .Z80
  348.     OTIR
  349.     .8080
  350.     POP    H
  351.     PUSH    H
  352.     INR    D
  353.     MOV    A,D
  354.     CPI    0D9H    ; 25!VDBYCF
  355.     UNTIL ( NO CARRY )
  356.     POP    H
  357.     CALL    CLIN    ; CLEAR LAST LINE
  358.     MVI    A,0D8H    ; 24!VDBYCF
  359.     OUT    VDBCTL
  360.     POP    PSW
  361.     OUT    VDBCTL    ; ENABLE DISPLAY
  362.     RET
  363. PROCEDURE PUTY
  364.     ANI    1FH
  365.     ORI    VDBYCF
  366.     OUT    VDBCTL
  367.     RET
  368. PROCEDURE PUTX
  369.     ANI    7FH
  370.     OUT    VDBCTL
  371.     RET
  372. PROCEDURE GETY
  373.     MVI    A,VDBYCR
  374.     OUT    VDBCTL
  375.     IN    VDBCTL
  376.     RET
  377. PROCEDURE GETX
  378.     MVI    A,VDBXCR
  379.     OUT    VDBCTL
  380.     IN    VDBCTL
  381.     RET
  382. PROCEDURE PUTMODE
  383.     ANI    3FH
  384.     ORI    VDBMRF
  385.     OUT    VDBCTL
  386.     RET
  387. PROCEDURE GETMODE
  388.     MVI    A,VDBMRR
  389.     OUT    VDBCTL
  390.     IN    VDBCTL    ; READ MODE
  391.     ORI    VDBMRF    ; SET TO WRITE MODE
  392.     RET
  393. PROCEDURE CLIN
  394.     MVI    A,VDBXCR
  395.     OUT    VDBCTL
  396.     REPEAT
  397.     MVI    A,' '
  398.     OUT    VDBDAT
  399.     IN    VDBCTL
  400.     ORA    A
  401.     UNTIL ( ZERO )
  402.     RET
  403.     END
  404. END-OF-FILE
  405.