; REMCH - REMOTE CHANNEL DRIVER EXAMPLE
;
Z80
;
       NAME    ('RemCh0')
;
;
; COM1 SET BAUD RATE
;
SETBA@::
       LD      B,0                     ; SET CHANNEL 1
       LD      C,(IX+31H)              ; GET E-REGISTER
       LD      E,3                     ; SET FUNCTION 3=SET BAUD RATE
       CALL    COMDRV##                ; DO IT
       LD      A,0FFH                  ; RETURN TRUE
       JP      EXITA##                 ; AND QUIT
;
; COM1 GET BAUD RATE
;
GETBD@::
       LD      B,0                     ; SET CHANNEL 1
       LD      E,4                     ; SET FUNCTION 4=GET BAUD RATE
       CALL    COMDRV##
       JP      EXITA##                 ; RETURN WITH BAUD IN A
;
; COM1 I/O
;
INOUT@::
       LD      A,(IX+30H)              ; GET DIRECTION FLAG
       AND     80H                     ; VALID CHAR IN E?
       JR      Z,.NO1                  ;   NO, INPUT ONLY
       LD      B,0
       CALL    .CMOUT                  ; COMMON OUTPUT
NO1:    CALL    GETDMA##                ; GET DMA ADDRESS
       DI
       EX      DE,HL
       LD      BC,128
       LD      HL,COM1BF
       LD      A,(HL)
       LDIR
       LD      HL,COM1BF
       LD      (HL),0
       EI
       JP      EXITA##
;
; COMMON OUTPUT
;
CMOUT:  LD      C,(IX+31H)              ; GET CHARACTER
       LD      E,2                     ; OUTPUT FCN
       JP      COMDRV##                ; DO IT
;
; ATTACH COM CHANNEL
;
ATACH@::
       LD      DE,COM1PL
       CALL    LNKPOL##
       XOR     A
       JP      EXITA##
;
; DETACH COM CHANNEL
;
DETA@::
       LD      HL,COM1PL
       JP      UNLINK##
;
; POLL ROUTINE
;
COM1PL: DW      0
       DW      0
       LD      E,0
       LD      B,0
       CALL    COMDRV##
       OR      A
       RET     Z
       LD      E,1
       LD      B,0
       CALL    COMDRV##
       LD      B,A
       LD      HL,COM1BF
       LD      A,(HL)
       CP      7FH
       RET     Z
       DI
       INC     A
       LD      (HL),A
       LD      E,A
       LD      D,0
       ADD     HL,DE
       LD      (HL),B
       EI
       RET
;
; REMCH DATA AREA
;
COM1BF: DB      0
       DS      127
;
       END