home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBODSG / ATTREM.A < prev    next >
Text File  |  2000-06-30  |  5KB  |  208 lines

  1. ; ATTACH TO REMOTE DRIVERS VIA REMDRV
  2. ;
  3.     MODULE    "ATTREM"
  4. ;
  5. ; Improved version now includes the following features:
  6. ; - Attach to port A..P, corresponding to REMDRV-COMM-CHANNELS 0..15
  7. ; - optional second argument allows specification of
  8. ;   channel baud rates ... OR ...
  9. ;   clearing a channel.
  10. ;
  11. ;   Syntax: ATTREM <1> [2]
  12. ;   Example:
  13. ;        0A}attrem a b
  14. ;    <1>    = mandatory argument -- port letter A..P
  15. ;    [2]    = optional argument -- baud rate (A=50 baud...P=19200)
  16. ;          OR, this argument may be "X" to DETACH the channel
  17. ;          For baud rate codes, see Z80 Programmer's Guide,
  18. ;          T-Function 37 (Page 5-40), where 0=A,1=B..15=P
  19. ;
  20. ; NOTE:
  21. ;    The "X" (DETACH) command should only be used if a channel is
  22. ;    hopelessly locked up. IT SHOULD NOT BE USED TO "chase someone
  23. ;    off the system"!!! It's sole purpose is to free a locked channel
  24. ;    (a channel can be locked simply by crashing the process running
  25. ;    ATTREM; subsequent calls to ATTREM will show that channel busy.)
  26. ; NOTE:
  27. ;    The above also applies to the 8-bit version of ATTREM.
  28. ;
  29. ; PATCH POINTS:
  30. ;    AT 0102H IN THE Z80 VERSION (CS+2 IN THE 8086 VERSION), FOUR BYTES
  31. ;    MAY BE PATCHED:
  32. ;    Z80 0102    8086 CS+2    default baud rate code (A..H)
  33. ;        0103         CS+3    intercept character used to send ATTN
  34. ;                    to remote
  35. ;        0104         CS+4    remote attention character
  36. ;        0105         CS+5    exit character (must be typed 5 times)
  37. ;
  38.     LOC    Code#
  39. ;
  40. START:    JMPS    SKIP
  41. ;
  42. DBAUD:    BYTE    'O'            ; DEFAULT BAUD RATE
  43. INTER:    BYTE    0X1E            ; ^\
  44. BREAK:    BYTE    0
  45. EXITC:    BYTE    '`'
  46. ;
  47. SKIP:    MOV    AX,DS
  48.     MOV    SS,AX
  49.     MOV    SP,&STACK        ; set up local stack
  50.     MOV    AL,(0X5D)        ; PORT A..P
  51.     CMP    AL,='A'            ; CHECK!
  52.     JC    FALP
  53.     CMP    AL,='Q'
  54.     JNC    FALP
  55.     MOV    PORT1,AL
  56.     MOV    PORT2,AL
  57.     MOV    PORT3,AL
  58.     MOV    PORT4,AL
  59.     DEC    AL
  60.     AND    AL,=0X0F
  61.     MOV    PORT,AL
  62.     MOV    AL,0X6D
  63.     CMP    AL,='X'
  64.     JNZ    __NQ
  65.     JMP    QUIT
  66. ;
  67. __NQ:    CMP    AL,=' '
  68.     JNZ    __BRT
  69.     CS MOV    AL,DBAUD
  70. __BRT:    CMP    AL,='A'
  71.     JB    ILB
  72.     CMP    AL,='P'
  73.     JA    ILB
  74.     DEC    AL
  75.     AND    AL,=0X0F
  76.     MOV    BAUDR,AL
  77.     MOV    DX,&QUIT        ; set abort address
  78.     MOV    BX,CS
  79.     MOV    CL,=8
  80.     INT    0XDF
  81.     MOV    CL,=33
  82.     MOV    DH,=0XFE        ; attach to com channel 1
  83.     MOV    CH,PORT
  84.     INT    0XDF
  85.     INC    AL            ; busy?
  86.     JZ    BUZI
  87.     INC    AL
  88.     JNZ    LOCL1
  89.     MOV    DX,&EROR
  90.     JMPS    XX
  91. ;
  92. ILB:    MOV    DX,&MILB
  93.     JMPS    XX
  94. ;
  95. FALP:    MOV    DX,&FALPM
  96.     JMPS    XX
  97. ;
  98. BUZI:    MOV    DX,&BARF            ; else quit with error message
  99. XX:    MOV    CL,=9
  100.     INT    0XE0
  101.     MOV    CL,=0
  102.     INT    0XE0
  103. ;
  104. LOCL1:    MOV    CL,=9
  105.     MOV    DX,&HOOKED        ; display success message
  106.     INT    0XE0
  107.     MOV    CL,=33
  108.     MOV    DH,=0XFC        ; set com channel 1 baud rate
  109.     MOV    CH,PORT
  110.     MOV    DL,BAUDR
  111.     INT    0XDF
  112.     MOV    AL,=0X0D
  113.     JMPS    ECHO
  114. ;
  115. ; I/O loop
  116. ;
  117. LOCL:    MOV    CL,=6            ; get keyboard char if there is one
  118.     MOV    DL,=0XFF
  119.     INT    0XE0
  120.     OR    AL,AL            ; got a character?
  121.     JNZ    ECHO            ;   yes, echo it to remote
  122. ;
  123. NOIN:    MOV    CL,=33
  124.     MOV    DH,=0XFA        ; com channel 1 I/O
  125.     MOV    CH,PORT
  126.     INT    0XDF
  127.     OR    AL,AL            ; check if any input chars
  128.     JZ    LOCL            ;   no, get next keyboard char
  129. OO:    MOV    CL,AL            ;     else display the input buffer
  130.     XOR    CH,CH
  131.     MOV    BX,=0X81        ;     starting at 81h, for A chars
  132. OLP:    MOV    AL,[BX]
  133.     PUSH    CX
  134.     PUSH    BX
  135.     CALL    ECHO1            ; display the character
  136.     POP    BX
  137.     POP    CX
  138.     INC    BX
  139.     LOOP    OLP
  140.     JMPS    LOCL
  141. ;
  142. ; echo a character to remote, read input buffer
  143. ;
  144. ECHO:    CS CMP    EXITC,AL        ; see if exit char
  145.     JZ    __XC            ; yes, skip
  146.     MOV    COUNT,=5        ; set count to start
  147.     JMPS    __X
  148. ;
  149. __XC:    CALL    CHKXIT            ; check exit
  150. __X:    CS CMP    INTER,AL
  151.     JNZ    __NB
  152.     CS MOV    AL,BREAK
  153. __NB:    MOV    CL,=33
  154.     MOV    DL,AL            ; load character
  155.     MOV    DH,=0XFA        ; com channel 1 I/O request
  156.     MOV    CH,PORT
  157.     OR    CH,=0X80        ; set output flag
  158.     INT    0XDF
  159.     OR    AL,AL            ; got any input?
  160.     JNZ    OO            ;   yes, join above loop
  161.     JMPS    LOCL            ;     else go for next keyboard char
  162. ;
  163. ; echo a character to the console
  164. ;
  165. ECHO1:    MOV    DL,AL
  166.     MOV    CL,=6
  167.     INT    0XE0
  168.     RET
  169. ;
  170. CHKXIT:    DEC    COUNT
  171.     JZ    QUIT
  172.     RET
  173. ;
  174. ; abort address - only way to exit
  175. ;
  176. QUIT:    MOV    DH,=0XFD        ; request detach from com1
  177.     MOV    CH,PORT
  178.     MOV    CL,=33
  179.     INT    0XDF
  180.     MOV    CL,=9
  181.     MOV    DX,&UNHOOK        ; display message
  182.     INT    0XE0
  183.     MOV    CL,=0
  184.     INT    0XE0
  185. ;
  186.     LOC    Data#
  187. ;
  188. PORT:    BYTE    0
  189. BAUDR:    BYTE    0
  190. COUNT:    BYTE    5
  191. ;
  192. BARF:    BYTE    "\R\N\N\7ERROR: COM CHANNEL "
  193. PORT1:    BYTE    "1 IS BUSY\R\N\N$"
  194. EROR:    BYTE    "\R\N\N\7ERROR: COM CHANNEL "
  195. PORT2:    BYTE    "1 DOES NOT EXIST\R\N\N$"
  196. HOOKED:    BYTE    "\R\NCONNECTED TO COM CHANNEL "
  197. PORT3:    BYTE    "1\R\N$"
  198. UNHOOK:    BYTE    "\R\NDISCONNECTED FROM COM CHANNEL "
  199. PORT4:    BYTE    "1\R\N\N$"
  200. FALPM:    BYTE    "\R\N\N\7ERROR: ONLY PORTS A..P ALLOWED!\R\N\N$"
  201. MILB:    BYTE    "\R\N\N\7ERROR: BAUD RATE CODES A..P ONLY\R\N\N$"
  202.     RES    40
  203. STACK    ==    .
  204.     END
  205. OV    CH,PORT
  206.     OR    CH,=0X80        ; set output flag
  207.     INT    0XDF
  208.     OR    AL,A