home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol131 / stream.src < prev    next >
Encoding:
Text File  |  1984-04-29  |  4.0 KB  |  132 lines

  1.      **    *******  ****     ******     *     *       *
  2.    *    *     *     *   *    *         * *    **     **
  3.    *          *     *    *   *        *   *   * *   * *
  4.      * *      *     ****     ****    *******  *  * *  *
  5.         *     *     *   *    *       *     *  *   *   *
  6.    *    *     *     *    *   *       *     *  *       *
  7.      **       *     *     *  ******  *     *  *       *
  8.  
  9. ****************************************************************
  10. *                                                              *
  11. * PROCEDURE STREAM(VAR XVALUE,YVALUE : INTEGER;                *
  12. *                  VAR PEN : CHAR);EXTERNAL                    *
  13. *                                                              *
  14. * A PASCAL/Z EXTERNAL PROCEDURE IN (ITHACA) Z/80 ASSEMBLY CODE *
  15. *                                                              *
  16. * READS THE HOUSTON HIPAD VIA MIO PARALLEL PORT A TO OBTAIN    *
  17. * A PAIR OF X,Y COORDINATES,WITH HIPAD IN STREAM MODE.         *
  18. *                         THE COORDINATES ARE TRANSMITTED TO   *
  19. * PASCAL/Z VIA THE DUMMY VARIABLES 'XVALUE' AND 'YVALUE'.      *
  20. * THESE CORRESPOND TO ACTUAL INTEGER VARIABLES DECLARED IN     *
  21. * THE PASCAL/Z CALLING PROGRAM.                                *
  22. *                                                              *          
  23. *                                  IF THE CONTROL BYTE ,READ   *
  24. * FROM HIPAD,IS 0F3H THEN PEN WILL RETURN = 'U'  [ for 'UP'  ] *
  25. * BUT IF THE CONTROL BYTE = 0F4H PEN WILL = 'D'  [ for 'DOWN'] *
  26. * N.B. : PEN IS A CHARACTER VARIABLE DECLARED IN PASCAL/Z.     *
  27. *                                                              *
  28. ****************************************************************
  29.  
  30. VBYTES   EQU 08      # OF BYTES ON STACK
  31.  
  32. XVALUE   EQU 15    OFFSETS TO (IX) FOR ADDRESS OF POINTERS
  33. YVALUE   EQU 12    TO TRANSMITTED VARIABLES.
  34. PEN      EQU 09  
  35.  
  36. STAT_RDY EQU 0F7H  STATUS PORT DATA AVAILABLE CODE
  37. STAT_PRT EQU 00AH  ADDRESS OF STATUS PORT
  38. DATA_PRT EQU 008H     "    "   DATA    "
  39.  
  40. UP       EQU 'U'
  41. DOWN     EQU 'D'
  42.                      NAME STREAM
  43.                      ENTRY STREAM
  44.  
  45. STREAM:  ENTR D,2,0
  46.          CALL CBCNTRL
  47.          CALL X_IN
  48.          CALL PASS_X
  49.          CALL Y_IN
  50.          CALL PASS_Y
  51.          EXIT D,VBYTES
  52.  
  53.  
  54.  
  55. * CBCNTRL: READS DATA PORT,LOOKING FOR CONTROL BYTE = F3 OR F4
  56.  
  57. CBCNTRL:  CALL STAT_CHK       ;WAIT FOR DATA
  58.           IN DATA_PRT         ;GET A BYTE
  59.           CPI 0F3H            ;CONTROL BYTE = F3?(PEN UP)
  60.           JNZ NOT_UP
  61.           MOV H,PEN(IX)
  62.           MOV L,PEN-1(IX)
  63.           MVI M,UP
  64.           RET
  65. NOT_UP    CPI 0F4H            ;CONTROL BYTE = F4?(PEN DOWN)
  66.           JNZ CBCNTRL
  67.           MOV H,PEN(IX)
  68.           MOV L,PEN-1(IX)
  69.           MVI M,DOWN
  70.           RET
  71.  
  72. * STAT_CHK : CHECKS STATUS PORT 
  73.  
  74. STAT_CHK:  IN STAT_PRT      ;DATA IN? 
  75.            CPI STAT_RDY 
  76.            RZ             ;IF SO:GO GET IT.
  77.            JMP STAT_CHK     ;ELSE TRY AGAIN.
  78.  
  79.  
  80. * X_IN : GETS CURRENT X VALUE FROM HIPAD INTO DE
  81.  
  82. X_IN:    CALL STAT_CHK       ;WAIT FOR DATA
  83.          IN DATA_PRT         ;GET 1ST BYTE (X7..X13)
  84.          MOV D,A             ;INTO D
  85.          PUSH D
  86.          CALL STAT_CHK
  87.          POP D
  88.          IN DATA_PRT         ;2ND BYTE (X0..X6)
  89.          MOV E,A             ;INTO E
  90.          SLAR E              ;---|
  91.          SLAR D              ;   |JUSTIFY
  92.          SRAR D              ;   | RIGHT 
  93.          SRAR D              ;   | IN DE
  94.          RRAR E              ;---|
  95.          RET
  96.  
  97. * Y_IN : GETS CURRENT Y VALUE FROM HIPAD INTO HL
  98.  
  99. Y_IN:    XCHG
  100.          CALL X_IN
  101.          XCHG
  102.          RET
  103.  
  104. * PASS_X STORES THE 16 BIT # IN DE @ THE LOCATIONS WHOSE START
  105. * ADDRESS'S MSB = XVALUE + (IX)
  106.  
  107. PASS_X:    MOV B,XVALUE(IX)
  108.            MOV C,XVALUE-1(IX)
  109.            MOV A,D
  110.            STAX B
  111.            DCX B
  112.            MOV A,E
  113.            STAX B
  114.            RET
  115.  
  116. * PASS_Y STORES THE 16 BIT # IN HL @ THE LOCATIONS WHOSE START
  117. * ADDRESS'S MSB = YVALUE + (IX)
  118.  
  119. PASS_Y:    MOV D,YVALUE(IX)
  120.            MOV E,YVALUE-1(IX)
  121.            MOV A,H
  122.            STAX D
  123.            DCX D
  124.            MOV A,L
  125.            STAX D
  126.            RET
  127.  
  128.  
  129.                    END STREAM
  130.  
  131.  
  132.