home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / nubye / nuby-sup.lbr / NU-CPM3.AQM / NU-CPM3.ASM
Assembly Source File  |  1986-06-29  |  4KB  |  142 lines

  1. ; B5-CPM3.ASM    for NUNYE     by George F Peace
  2. ; Rename assembled/linked fileto BYE.COM for RCP/M+ operation
  3. ;
  4. ;    Updated 4/17/86 by GFP...
  5. ;        - Reinstalled password and drive path initialization code
  6. ;          to be executed only on initial execution.  RSX delete
  7. ;          code remains in NUBYExxx.ASM
  8. ;
  9. ;    Updated 4/13/86 by GFP...
  10. ;        - Uses BYE5 extended BDOS calls to check BYE existance
  11. ;        - Only schedules B5-DRIV3.COM if the BYE5 RSX cannot be found
  12. ;        - .LBR delete code, drive/password initialization code
  13. ;          removed (BYE5nn.ASM does that now)
  14. ;
  15. ;    Updated 1/12/86 by GFP to set search path to default drive,
  16. ;                then drive A:
  17. ;
  18. ;     Updated 12/85 by Larry J. Moore to turn off the wheel byte and
  19. ;                    set the default password to null
  20. ;
  21. ;        This is a CP/M Plus program that is scheduled when:
  22. ;
  23. ;        - The SYSOP or a caller invokes it manually to reset
  24. ;          the RCP/M+ environment.
  25. ;        - The NUBYE configuration tag EXFILE is set to YES, no RBBS
  26. ;          system is defined, and the carrier is lost during a
  27. ;          session.  This requires that EXITFCB in the data portion
  28. ;          of the NUBYExxx.ASM program be updated or this program be
  29. ;          renamed to match EXITFCB.
  30. ;
  31. ; The program performs cleanup operations prior to allowing the NUBYE
  32. ; RSX to reset the environment.  The "standard" operation is to
  33. ; schedule the real (hidden) B5-DRIV3.COM or any other program or
  34. ; command as defined at label XQTSTR.
  35. ;
  36. ;
  37. ; ASSEMBLE AND LINK THIS PROGRAM USING MAC/HEXCOM OR RMAC/LINK.
  38. ; THE RESULTING .COM FILE SHOULD BE NAMED  BYE.COM  AND BE PLACED SO IT IS
  39. ; ACCESSIBLE BY CALLERS AND SYSOP.  IT IS THE FRONT-END TO NUBYE ACCESS
  40. ; FOR CP/M PLUS (CPM3 SET TO YES IN NUBYExxx.ASM).
  41. ;
  42. ;
  43. BDOS    EQU    5
  44. CHAINP    EQU    47
  45. GTSCB    EQU    49
  46. CALLRSX    EQU    60
  47. DEFPASS    EQU    106        ; Set default password
  48. RSX$TM    EQU    102        ; Log caller out
  49.  
  50.     ORG    100H
  51.  
  52. ; First, see if the NUBYE RSX is loaded.
  53. ; If not, run the RSX loader program to initialize the system.
  54. ;
  55.     MVI    C,32        ; Get user get/set function
  56.     MVI    E,241        ; And special entry flag
  57.     CALL    BDOS        ; Check for NUBYE existance
  58.     CPI    77        ; Test for special return
  59.     JNZ    LODRSX        ; Not in memory - exit
  60.  
  61.     MVI    C,CALLRSX    ; Get call RSX function
  62.     LXI    D,RSXPB        ; Load RSX parameter block address
  63.     JMP    BDOS        ; Jump to active RSX; should not return
  64.  
  65. LODRSX:
  66.  
  67. ; Set the default password to a null string and set the drive search path to
  68. ; the configured default (only does these on first call)
  69. ;
  70.     LXI    D,NOPASS    ; LJM NULL PASSWORD          
  71.     MVI    C,DEFPASS    ; LJM
  72.     CALL    BDOS
  73.  
  74.     MVI    C,GTSCB        ; SCB get/set function
  75.     LXI    D,SCBPB1    ; Address of first SCB
  76.     CALL    BDOS        ; Change first two drives in search chain
  77.     MVI    C,GTSCB
  78.     LXI    D,SCBPB2
  79.     CALL    BDOS        ; Change last two drives in search chain
  80.  
  81. ; Copy the caller's command tail to the one we're about to issue
  82. ;
  83.     LDA    80H        ; Get command tail length
  84.     CPI    0        ; Was anything typed by the caller?
  85.     JZ    DONE        ; Nope, all done
  86.  
  87.     LXI    H,80H        ; Initialize pointer to command tail buffer
  88.     LXI    D,TAIL-1    ; Init to destination
  89.  
  90. CLOOP:
  91.     INX    H        ; Point to next byte
  92.     INX    D        ; Do it for destination, too
  93.     MOV    A,M        ; Get the byte
  94.     STAX    D        ; Put it in the destination tail
  95.     CPI    0        ; Was that all?
  96.     JNZ    CLOOP        ; Nope - get another character
  97. ;
  98. DONE:
  99.     LXI    H,XQTSTR    ; Source=string
  100.     LXI    D,80H        ; Dest=default DMA
  101.     MVI    B,LXQTSTR    ; Length of STRING
  102.     CALL    MOVE
  103.     MVI    C,CHAINP    ; Chain program
  104.     MVI    E,0        ; Don't bother forcing temporary DU:
  105.     JMP    BDOS        ; And don't come back
  106.  
  107. ; Move (HL) to (DE), length in (B)
  108. ;
  109. MOVE:    MOV    A,M        ; Get a byte
  110.     STAX    D        ; Put at new home
  111.     INX    D        ; Bump pointers
  112.     INX    H
  113.     DCR    B        ; Decrement byte count
  114.     JNZ    MOVE        ; If more, do it
  115.     RET            ; If not, return
  116. ;
  117. XQTSTR:    DB    'A:B5-DRIV3.COM '    ; Do this
  118. TAIL:    DS    64            ; Allow 64 bytes for the command tail
  119.     DB    0            ; Required terminator
  120. LXQTSTR    EQU    $-XQTSTR        ; Length of string
  121.  
  122. NOPASS: DB    '0Dh','       '
  123.  
  124. SCBPB1:    DB    04CH
  125.     DB    0FEH
  126.     DB    0,1        ; 0=default drive, 1=drive A
  127. SCBPB2:    DB    04EH
  128.     DB    0FEH
  129.     DB    0FFH,0FFH    ; FF=unused, FF=unused
  130.  
  131. RSXPB:    DB    RSX$TM        ; NUBYE function
  132.     DB    2        ; 2 parameter words follows
  133.     DW    RSXNAME        ; Parameter 1 address
  134.     DW    ARGS        ; Parameter 2 address
  135.  
  136. RSXNAME:DB    'BYE     '    ; RSX Name in NUBYExxx.ASM (must be 8 bytes)
  137.  
  138. ARGS:    DB    0
  139. STAT:    DB    0
  140.  
  141.     END
  142.