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

  1.               ***     ***   ***  **    **  *******
  2.               *  *   *   *   *    **   *   *  *  *
  3.               *  *   *   *   *    * *  *      *
  4.               ***    *   *   *    *  * *      *
  5.               *      *   *   *    *   **      *
  6.               **      ***   ***  **    **    ***
  7.  
  8. ****************************************************************
  9. *                                                              *
  10. * PROCEDURE POINT(VAR XVALUE,YVALUE : INTEGER):                *
  11. *                           A PASCAL/Z EXTERNAL PROCEDURE.     *
  12. *                           ((ITHACA) Z/80 ASSEMBLY CODE)      *
  13. * READS THE HOUSTON HIPAD VIA MIO PARALLEL PORT A TO OBTAIN    *
  14. * A PAIR OF X,Y COORDINATES.                                   *
  15. *                                                              *
  16. ****************************************************************
  17.  
  18. VBYTES EQU 06    : # OF BYTES ON STACK
  19.  
  20. XVALUE EQU 13    : OFFSETS TO (IX) FOR ADDRESS OF POINTERS
  21. YVALUE EQU 10    : TO TRANSMITTED VARIABLES.
  22.  
  23. STAT_RDY EQU 0F7H  STATUS PORT DATA AVAILABLE CODE
  24. STAT_PRT EQU 00AH  ADDRESS OF STATUS PORT
  25. DATA_PRT EQU 008H     "    "   DATA    "
  26.  
  27.                      EXT BEEP
  28.                      EXT HEXOUT
  29.  
  30.                   INCLUDE MACRO.SRC
  31.                     
  32.                     NAME  POINT
  33.                      ENTRY POINT
  34.  
  35. POINT:  ENTR D,2,0
  36.         JMP START   JUMP OVER MESSAGES & LOCAL STORAGE AREA.
  37.  
  38. HELLO: DB 0DH,0AH,'PLACE STYLUS ON POINT TO BE ACQUIRED.          '
  39.        DB 0DH,0AH,'$'
  40. CB_OK: DB 'C/B = $'
  41. X_EQUALS: DB 'X = $'
  42. Y_EQUALS: DB 'Y = $'
  43. BLNK3: DB '   $'
  44. STAR: DB '*$'
  45.  
  46. START:   CALL SIGN_ON
  47.          CALL ERASE
  48.          CALL F2CNTRL
  49.          CALL X_IN
  50.          CALL PASS_X
  51.          CALL X_OUT
  52.          CALL Y_IN
  53.          CALL PASS_Y
  54.          CALL Y_OUT
  55.          CURSOR 24,1
  56.          EXIT D,VBYTES
  57.  
  58. * SUBROUTINES :
  59.  
  60. * 1 : GIVE SIGN ON MESSAGE :
  61. SIGN_ON:   RING_BELL
  62.            PRINT HELLO
  63.            RET
  64.  
  65. * 2 : ERASE C/B,X & Y VALUES ON SCREEN
  66. * USEFUL WHEN POINT IS CALLED REPEATEDLY.
  67.  
  68. ERASE:  CURSOR 5,73
  69.         PRINT BLNK3
  70.         CURSOR 6,73
  71.         PRINT BLNK3
  72.         CURSOR 7,73
  73.         PRINT BLNK3
  74.         CURSOR 24,1
  75.         PRINT STAR
  76.         RET
  77.  
  78. * 3 : STAT_CHK CHECKS STATUS PORT 
  79.  
  80. STAT_CHK:  IN STAT_PRT      ;DATA IN? 
  81.            CPI STAT_RDY 
  82.            RZ             ;IF SO:GO GET IT.
  83.            JMP STAT_CHK     ;ELSE TRY AGAIN.
  84.  
  85.  
  86. * 4 : F2CNTRL READS DATA PORT,LOOKING FOR CONTROL BYTE = F2
  87.  
  88. F2CNTRL:  CALL STAT_CHK       ;WAIT FOR DATA
  89.           IN DATA_PRT         ;GET A BYTE
  90.           CPI 0F2H            ;CONTROL BYTE = F2?(POINT-MODE)
  91.           RZ
  92.           JMP F2CNTRL
  93.  
  94.  
  95. * 5 : X_IN GETS CURRENT X VALUE FROM HIPAD INTO DE
  96.  
  97. X_IN:    CALL STAT_CHK       ;WAIT FOR DATA
  98.          IN DATA_PRT         ;GET 1ST BYTE (X7..X13)
  99.          MOV D,A             ;INTO D
  100.          PUSH D
  101.          CALL STAT_CHK
  102.          POP D
  103.          IN DATA_PRT         ;2ND BYTE (X0..X6)
  104.          MOV E,A             ;INTO E
  105.          SLAR E              ;---|
  106.          SLAR D              ;   |JUSTIFY
  107.          SRAR D              ;   | RIGHT 
  108.          SRAR D              ;   | IN DE
  109.          RRAR E              ;---|
  110.          RET
  111.  
  112.  
  113. * 6 : Y_IN GETS CURRENT Y VALUE FROM HIPAD INTO HL
  114.  
  115. Y_IN:    XCHG
  116.          CALL X_IN
  117.          XCHG
  118.          RET
  119.  
  120.  
  121. * 7 : CB_OUT OUTPUTS CONTROL BYTE TO SCREEN.
  122.  
  123. CB_OUT:  CURSOR 5,68
  124.          PRINT CB_OK
  125.          CALL HEXOUT
  126.          RET
  127.  
  128. * 8 : Y_OUT OUTPUTS Y VALUE TO SCREEN.
  129.  
  130. Y_OUT:   CURSOR 7,70
  131.          PRINT Y_EQUALS
  132.          MOV A,H
  133.          CALL HEXOUT
  134.          MOV A,L
  135.          CALL HEXOUT
  136.          RET          
  137.  
  138. * 9 : DISPLAY X (IN HEX) ON SCREEN
  139.  
  140. X_OUT:   CURSOR 6,70
  141.          PRINT X_EQUALS
  142.          MOV A,D
  143.          CALL HEXOUT
  144.          MOV A,E
  145.          CALL HEXOUT
  146.          RET
  147.  
  148. * 10 : PASS X TO PASCAL/Z
  149. * PASS_X STORES THE 16 BIT # IN DE @ THE LOCATIONS WHOSE START
  150. * ADDRESS'S MSB = XVALUE + (IX)
  151.  
  152. PASS_X:    MOV B,XVALUE(IX)
  153.            MOV C,XVALUE-1(IX)
  154.            MOV A,D
  155.            STAX B
  156.            DCX B
  157.            MOV A,E
  158.            STAX B
  159.            RET
  160.  
  161. * 11 : PASS Y TO PASCAL/Z
  162. * PASS_Y STORES THE 16 BIT # IN HL @ THE LOCATIONS WHOSE START
  163. * ADDRESS'S MSB = YVALUE + (IX)
  164.  
  165. PASS_Y:    MOV D,YVALUE(IX)
  166.            MOV E,YVALUE-1(IX)
  167.            MOV A,H
  168.            STAX D
  169.            DCX D
  170.            MOV A,L
  171.            STAX D
  172.            RET
  173.  
  174.  
  175.                    END POINT
  176.  
  177.  
  178.