If there is more than one device using programmed I/O, it is necessary to poll the ready bits of all of the devices.
Figure 6-7 Priority polling
MOV FLAG, 0 ;CLEAR FLAG
INPUT: IN AL, STAT1 ;CHECK STAT1
TEST AL, 20H ;AND IF NO INPUT IS
JZ DEV2 ;READY GO TO DEV2,
CALL FAR PTR PROC1 ;ELSE INPUT FROM DEVICE 1
CMP FLAG, 1 ;IF FLAG IS CLEAR
JNZ INPUT ;INPUT ANOTHER DATUM
DEV2: IN AL, STAT2 ;CHECK STAT2
TEST AL, 20H ;AND IF NO INPUT IS
JZ DEV3 ;READY, GO TO DEV3,
CALL FAR PTR PROC2 ;ELSE INPUT FROM DEVICE 2
CMP FLAG, 1 ;IF FLAG IS CLEAR
JNZ INPUT ;INPUT ANOTHER DATUM
DEV3: IN AL, STAT3 ;CHECK STAT3
TEST AL, 20H ;AND IF
JZ NO_INPUT ;INPUT IS AVAILABLE,
CALL FAR PTR PROC3 ;INPUT FROM DEVICE 3,
NO_INPUT: CMP FLAG, 1 ;ELSE CHECK FLAG, IF CLEAR
JNZ INPUT ;INPUT ANOTHER DATUM,
. ;ELSE CONTINUE
.
.
Figure 6-8 shows how the devices could be serviced in turn. This is referred to as a round-robin arrangement. Such an arrangement essentially gives all three devices the same priority.
MOV FLAG, 0 ;CLEAR FLAG
INPUT: IN AL, STAT1 ;INPUT FROM DEVICE 1
TEST AL, 20H ;IF INPUT IS READY
JZ DEV2
CALL FAR PTR PROC1
DEV2: IN AL, STAT2 ;INPUT FROM DEVICE 2
TEST AL, 20H ;IF INPUT IS READY
JZ DEV3
CALL FAR PTR PROC2
DEV3: IN AL, STAT3 ;INPUT FROM DEVICE 3
TEST AL, 20H ;IF INPUT IS READY
JZ NO_INPUT
CALL FAR PTR PROC3
NO_INPUT: CMP FLAG, 1 ;REPEAT LOOP IF FLAG
JNZ INPUT ;IS STILL CLEAR
.
.
.
Figure 6-8 Round-robin polling
| PRETHODNA FOLIJA | SADRZAJ | SLEDECA FOLIJA |