;ROUTINE TO DO DIRECT I/O FROM A PORT
;EXTERNAL MODULE FOR PASCAL/Z VERS 3.0
;
;DEFINE THE FOLLOWING TYPE IN YOUR PROGRAM:
;
;       TYPE    BYTE = 0..255;
;
;CALL AS:
;
;       PROCEDURE INPORT(PORT : BYTE; VAR VALUE : BYTE); EXTERNAL;
;
PORT:   EQU     11      ;---LOW BYTE OF PORT NUMBER
HADDR:  EQU     10      ;---HIGH BYTE OF INPUT VALUE ADDR
LADDR:  EQU      9      ;---LOW BYTE OF INPUT VALUE ADDR
LENGTH: EQU      8      ;---LENGTH OF CALL-BY-REF INTEGER

       NAME    INPORT

       ENTRY   INPORT          ;---FOR LINKER

INPORT:
       ENTR    D,2,0           ;---NO LOCAL STORAGE
       MOV     C,PORT(IX)      ;---C := INPUT PORT
       INP     B               ;---INPUT THE VALUE FROM THE PORT
       MOV     H,HADDR(IX)     ;---GET HIGH BYTE OF ADDRESS
       MOV     L,LADDR(IX)     ;---GET LOW BYTE OF ADDRESS
       MOV     A,LENGTH(IX)    ;---GET SIZE
       CPI     2               ;---CHECK FOR 2 BYTE INTEGER
       JRNZ    NOPE            ;---NO, 1 BYTE INTEGER
       MVI     M,0             ;---YES, CLEAR HIGH BYTE
       DCX     H               ;---POINT TO LOW BYTE
NOPE:   MOV     M,B             ;---STORE LOW (ONLY) BYTE
       EXIT    D,4             ;---DONE, 4 BYTES OF PARAMETERS
;
;
;