home *** CD-ROM | disk | FTP | other *** search
- ** ******* **** ****** * * *
- * * * * * * * * ** **
- * * * * * * * * * * *
- * * * **** **** ******* * * * *
- * * * * * * * * * *
- * * * * * * * * * *
- ** * * * ****** * * * *
-
- ****************************************************************
- * *
- * PROCEDURE STREAM(VAR XVALUE,YVALUE : INTEGER; *
- * VAR PEN : CHAR);EXTERNAL *
- * *
- * A PASCAL/Z EXTERNAL PROCEDURE IN (ITHACA) Z/80 ASSEMBLY CODE *
- * *
- * READS THE HOUSTON HIPAD VIA MIO PARALLEL PORT A TO OBTAIN *
- * A PAIR OF X,Y COORDINATES,WITH HIPAD IN STREAM MODE. *
- * THE COORDINATES ARE TRANSMITTED TO *
- * PASCAL/Z VIA THE DUMMY VARIABLES 'XVALUE' AND 'YVALUE'. *
- * THESE CORRESPOND TO ACTUAL INTEGER VARIABLES DECLARED IN *
- * THE PASCAL/Z CALLING PROGRAM. *
- * *
- * IF THE CONTROL BYTE ,READ *
- * FROM HIPAD,IS 0F3H THEN PEN WILL RETURN = 'U' [ for 'UP' ] *
- * BUT IF THE CONTROL BYTE = 0F4H PEN WILL = 'D' [ for 'DOWN'] *
- * N.B. : PEN IS A CHARACTER VARIABLE DECLARED IN PASCAL/Z. *
- * *
- ****************************************************************
-
- VBYTES EQU 08 # OF BYTES ON STACK
-
- XVALUE EQU 15 OFFSETS TO (IX) FOR ADDRESS OF POINTERS
- YVALUE EQU 12 TO TRANSMITTED VARIABLES.
- PEN EQU 09
-
- STAT_RDY EQU 0F7H STATUS PORT DATA AVAILABLE CODE
- STAT_PRT EQU 00AH ADDRESS OF STATUS PORT
- DATA_PRT EQU 008H " " DATA "
-
- UP EQU 'U'
- DOWN EQU 'D'
- NAME STREAM
- ENTRY STREAM
-
- STREAM: ENTR D,2,0
- CALL CBCNTRL
- CALL X_IN
- CALL PASS_X
- CALL Y_IN
- CALL PASS_Y
- EXIT D,VBYTES
-
-
-
- * CBCNTRL: READS DATA PORT,LOOKING FOR CONTROL BYTE = F3 OR F4
-
- CBCNTRL: CALL STAT_CHK ;WAIT FOR DATA
- IN DATA_PRT ;GET A BYTE
- CPI 0F3H ;CONTROL BYTE = F3?(PEN UP)
- JNZ NOT_UP
- MOV H,PEN(IX)
- MOV L,PEN-1(IX)
- MVI M,UP
- RET
- NOT_UP CPI 0F4H ;CONTROL BYTE = F4?(PEN DOWN)
- JNZ CBCNTRL
- MOV H,PEN(IX)
- MOV L,PEN-1(IX)
- MVI M,DOWN
- RET
-
- * STAT_CHK : CHECKS STATUS PORT
-
- STAT_CHK: IN STAT_PRT ;DATA IN?
- CPI STAT_RDY
- RZ ;IF SO:GO GET IT.
- JMP STAT_CHK ;ELSE TRY AGAIN.
-
-
- * X_IN : GETS CURRENT X VALUE FROM HIPAD INTO DE
-
- X_IN: CALL STAT_CHK ;WAIT FOR DATA
- IN DATA_PRT ;GET 1ST BYTE (X7..X13)
- MOV D,A ;INTO D
- PUSH D
- CALL STAT_CHK
- POP D
- IN DATA_PRT ;2ND BYTE (X0..X6)
- MOV E,A ;INTO E
- SLAR E ;---|
- SLAR D ; |JUSTIFY
- SRAR D ; | RIGHT
- SRAR D ; | IN DE
- RRAR E ;---|
- RET
-
- * Y_IN : GETS CURRENT Y VALUE FROM HIPAD INTO HL
-
- Y_IN: XCHG
- CALL X_IN
- XCHG
- RET
-
- * PASS_X STORES THE 16 BIT # IN DE @ THE LOCATIONS WHOSE START
- * ADDRESS'S MSB = XVALUE + (IX)
-
- PASS_X: MOV B,XVALUE(IX)
- MOV C,XVALUE-1(IX)
- MOV A,D
- STAX B
- DCX B
- MOV A,E
- STAX B
- RET
-
- * PASS_Y STORES THE 16 BIT # IN HL @ THE LOCATIONS WHOSE START
- * ADDRESS'S MSB = YVALUE + (IX)
-
- PASS_Y: MOV D,YVALUE(IX)
- MOV E,YVALUE-1(IX)
- MOV A,H
- STAX D
- DCX D
- MOV A,L
- STAX D
- RET
-
-
- END STREAM
-
-
-