; REMDRV.A - A BASTARDIZATION OF CONREM
; CREATED 12/19/85 BY ESKAY (AS ALWAYS)
; VERSION 23 AS OF 12/19/85
;
       MODULE  "RemDrv"
;
; ANOTHER ENHANCED TURBODOS MODULE BY ESKAY
; IN ADDITION TO THE DESCRIPTION OF T-FCN 33, REMOTE CONSOLE I/O,
; THE FOLLOWING IS NOW POSSIBLE:
; - SET/QUERY REMOTE BAUD RATES
; - REMOTE CHANNEL I/O
;
; ADDITIONAL SYNTAX:    (C-REGISTER = 33)
; REG   CONT    FUNCTION
;  D    0FE     ATTACH CHANNEL IN B, RETURN A=FF=BUSY
;  D    0FD     DETACH CHANNEL IN B
;  D    0FC     SET BAUD FOR CHANNEL IN B, FROM E
;  D    0FB     GET BAUD FOR CHANNEL IN B, RETURN IN A
;  D    0FA     RETURN INPUT DATA FROM CHANNEL B,
;               IF BIT 7 SET ON B, OUTPUT BYTE IN E
;
; NOTE:
; =====
;       ADD IN .PAR FILE:       RCFCN = 0XE9,[RCHNTY]
;
       LOC     Code#
;
RCHNTY::
       MOV     AL,0X56[SI]             ; GET MODE BYTE
       CMP     AL,=0XFE                ; ATTACH?
       JZ      ATTACH
       CMP     AL,=0XFD                ; DETACH?
       JZ      DETACH
       CMP     AL,=0XFC                ; SET BAUD
       JZ      SETBD
       CMP     AL,=0XFB                ; GET BAUD
       JZ      GETBD
       CMP     AL,=0XFA                ; GET INPUT
       JZ      DOIO
;
; CONTINUE WITH CONREM STUFF
;
       MOV     AL,0X67[SI]
       JMP     RCFCN#+3                ; CONTINUE
;
;       +------------------------+
;       | COMM CHANNEL I/O STUFF |
;       +------------------------+
;
; ATTACH TO CHANNEL
;
ATTACH: CALL    GETCHN                  ; GET CHANNEL NUMBER INTO DE
       MOV     BX,&BUSYV               ; POINT TO BUSY VECTOR
       ADD     BX,DX
       MOV     AL,[BX]
       MOV     BYTE [BX],=0XFF         ; PRESET BUSY
       OR      AL,AL                   ; TEST BUSY
       JZ      __X                     ; RETURN A=FF IF BUSY
       MOV     0X4F[SI],AL
       RET
;
__X:    MOV     BX,&ATTV                ; POINT TO ATTACH TABLE
       JMPS    GETVEC                  ; GET VECTOR
;
; DETACH FROM CHANNEL
;
DETACH: CALL    GETCHN                  ; GET CHANNEL NUMBER
       MOV     BX,&BUSYV               ; POINT TO BUSY VECTOR
       ADD     BX,DX
       MOV     BYTE [BX],=0            ; SET CHANNEL CLEAR
       MOV     BX,&DETV
       JMPS    GETVEC
;
; SET CHANNEL BAUD RATE
;
SETBD:  CALL    GETCHN                  ; GET CHANNEL NUMBER
       MOV     BX,&SETBV               ; POINT TO SETBAUD VECTORS
       JMPS    GETVEC                  ; GET VECTOR
;
; GET BAUD RATE
;
GETBD:  CALL    GETCHN                  ; GET CHANNEL #
       MOV     BX,&GETBV               ; POINT TO GETBAUD VECTORS
       JMPS    GETVEC
;
; DO I/O
;
DOIO:   CALL    GETCHN                  ; GET CHANNEL #
       AND     DL,=0X7F                ; STRIO OUTPUT FLAG IF SET
       MOV     BX,&IOV
;
; GET VECTOR
;
GETVEC: ADD     BX,DX
       ADD     BX,DX
       MOV     DL,[BX]
       INC     BX
       MOV     DH,[BX]
       CALL    TSTUND#                 ; TEST UNDEFINED
       MOV     AL,=0XFE                ; PRELOAD FALSE
       JNZ     XCUTE
       MOV     DX,=0
       MOV     BX,&BUSYV
       ADD     BX,DX
       MOV     BYTE [BX],=0
       MOV     0X4F[SI],AL
       RET
;
XCUTE:  XCHG    DX,BX
       JMPI    BX
;
; GET CHANNEL NUMBER
;
GETCHN: MOV     DL,0X54[SI]
       MOV     DH,=0
       RET
;
       LOC     Data#
;
; REMDRV DATA AREA
;
BUSYV:  BYTE    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; BUSY VECTORS
ATTV:   WORD    &ATACHA#
       WORD    &ATACHB#
       WORD    &ATACHC#
       WORD    &ATACHD#
       WORD    &ATACHE#
       WORD    &ATACHF#
       WORD    &ATACHG#
       WORD    &ATACHH#
       WORD    &ATACHI#
       WORD    &ATACHJ#
       WORD    &ATACHK#
       WORD    &ATACHL#
       WORD    &ATACHM#
       WORD    &ATACHN#
       WORD    &ATACHO#
       WORD    &ATACHP#
;
DETV:   WORD    &DETAA#
       WORD    &DETAB#
       WORD    &DETAC#
       WORD    &DETAD#
       WORD    &DETAE#
       WORD    &DETAF#
       WORD    &DETAG#
       WORD    &DETAH#
       WORD    &DETAI#
       WORD    &DETAJ#
       WORD    &DETAK#
       WORD    &DETAL#
       WORD    &DETAM#
       WORD    &DETAN#
       WORD    &DETAO#
       WORD    &DETAP#
;
SETBV:  WORD    &SETBAA#
       WORD    &SETBAB#
       WORD    &SETBAC#
       WORD    &SETBAD#
       WORD    &SETBAE#
       WORD    &SETBAF#
       WORD    &SETBAG#
       WORD    &SETBAH#
       WORD    &SETBAI#
       WORD    &SETBAJ#
       WORD    &SETBAK#
       WORD    &SETBAL#
       WORD    &SETBAM#
       WORD    &SETBAN#
       WORD    &SETBAO#
       WORD    &SETBAP#
;
GETBV:  WORD    &GETBDA#
       WORD    &GETBDB#
       WORD    &GETBDC#
       WORD    &GETBDD#
       WORD    &GETBDE#
       WORD    &GETBDF#
       WORD    &GETBDG#
       WORD    &GETBDH#
       WORD    &GETBDI#
       WORD    &GETBDJ#
       WORD    &GETBDK#
       WORD    &GETBDL#
       WORD    &GETBDM#
       WORD    &GETBDN#
       WORD    &GETBDO#
       WORD    &GETBDP#
;
IOV:    WORD    &INOUTA#
       WORD    &INOUTB#
       WORD    &INOUTC#
       WORD    &INOUTD#
       WORD    &INOUTE#
       WORD    &INOUTF#
       WORD    &INOUTG#
       WORD    &INOUTH#
       WORD    &INOUTI#
       WORD    &INOUTJ#
       WORD    &INOUTK#
       WORD    &INOUTL#
       WORD    &INOUTM#
       WORD    &INOUTN#
       WORD    &INOUTO#
       WORD    &INOUTP#
;
       END