;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
;
;
;