; REMCH - REMOTE CHANNEL DRIVER EXAMPLE ; MODULE "RemCh1" ; LOC Code# ; ; COM1 SET BAUD RATE ; SETBA_:: MOV CH,=1 ; SET CHANNEL 1 MOV CL,0X55[SI] ; GET E-REGISTER MOV DL,=3 ; SET FUNCTION 3=SET BAUD RATE CALL COMDRV# ; DO IT MOV 0X4F[SI],=BYTE 0XFF ; RETURN TRUE RET ; AND QUIT ; ; COM1 GET BAUD RATE ; GETBD_:: MOV CH,=1 ; SET CHANNEL 1 MOV DL,=4 ; SET FUNCTION 4=GET BAUD RATE CALL COMDRV# MOV 0X4F[SI],AL ; RETURN WITH BAUD IN A RET ; ; COM1 I/O ; INOUT_:: MOV AL,0X54[SI] ; GET DIRECTION FLAG AND AL,=0X80 ; VALID CHAR IN E? JZ __NO1 ; NO, INPUT ONLY MOV CH,=1 CALL CMOUT ; COMMON OUTPUT __NO1: MOV DX,0X6A[SI] MOV BP,0X6C[SI] MOV CX,=128 MOV BX,&COM1BF MOV AL,[BX] PUSH AX MOV AX,DS CALL LDIR# POP AX MOV COM1BF,=BYTE 0 MOV 0X4F[SI],AL RET ; ; COMMON OUTPUT ; CMOUT: MOV CL,0X55[SI] ; GET CHARACTER MOV DL,=2 ; OUTPUT FCN JMP COMDRV# ; DO IT ; ; ATTACH COM CHANNEL ; ATACH_:: MOV DX,&COM1PL CALL LNKPOL# MOV 0X4F[SI],=BYTE 0 RET ; ; DETACH COM CHANNEL ; DETA_:: MOV BX,&COM1PL JMP UNLINK# ; ; POLL ROUTINE ; COM1PL: WORD 0 WORD 0 MOV DL,=0 MOV CH,=1 CALL COMDRV# OR AL,AL JNZ __1 RET ; __1: MOV DL,=1 MOV CH,=1 CALL COMDRV# MOV CH,AL MOV BX,&COM1BF MOV AL,[BX] CMP AL,=0X7F JNZ __2 RET ; __2: CLI INC AL MOV [BX],AL MOV DL,AL MOV DH,=0 ADD BX,DX MOV [BX],CH STI RET ; ; REMCH DATA AREA ; LOC Data# ; COM1BF: BYTE 0 RES 127 ; END