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 / RCPM / SECURTY2.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  5KB  |  195 lines

  1. ;    SECURITY.ASM ver 2.0
  2. ;     (revised 4/24/81)
  3. ;   by Keith Petersen and Bob Mathias
  4. ;
  5. ;--->For use with CP/M 2.x only.
  6. ;
  7. ;This program runs up in high RAM.  It gets there
  8. ;by being moved there when 'MINICBBS' is typed.
  9. ;
  10. ;The program in high RAM does the following:
  11. ;
  12. ;Signs in on desired user number, selects desired
  13. ;drive and loads and executes file 'MINICBBS.COM'.
  14. ;When done with MINICBBS, the user will return to
  15. ;whatever drive and user area was previously active.
  16. ;
  17. ;Why this program is useful:  It offers a means for
  18. ;a remote CP/M system to allow execution of programs
  19. ;residing in areas other than USER 0 without having
  20. ;to give the user access to these areas.
  21. ;
  22. ;If you change the name at 'MYFCB', this program may
  23. ;be used to load and execute any COM file that does
  24. ;not need an arguement on the command line.
  25. ;
  26. ;------------------------------------------------
  27. ;Change the following equate to an area in your
  28. ;high memory where this program may patch itself in.
  29. ;(This may be below BDOS, provided that sufficient
  30. ;space exists below this program to load MINICBBS).
  31. ;
  32. DEST    EQU    0FA00H    ;RUNNING LOCATION OF CODE
  33. ;
  34. ;------------------------------------------------
  35. ;
  36. ;Change the following equate to the desired drive
  37. ;(where 0=A, 1=B, etc).
  38. ;
  39. DRIVE    EQU    0    ;CURRENTLY SET FOR DRIVE A:
  40. ;
  41. ;Change the following equate to the USER area desired
  42. ;
  43. USERNR    EQU    15    ;CURRENT SET FOR USER 15
  44. ;
  45. BASE    SET    0
  46. ALTCPM    EQU    0    ;PUT 1 HERE FOR ALTERNATE CP/M
  47. ;
  48.     IF    ALTCPM
  49. BASE    SET    4200H    ;BASE ADDRESS OF ALT CP/M
  50.     ENDIF
  51. ;
  52. PRINT    EQU    9
  53. SELDSK    EQU    14
  54. OPEN    EQU    15
  55. READ    EQU    20
  56. STDMA    EQU    26
  57. SGUSR    EQU    32    ;SET/GET USER FUNCTION
  58. BDOS    EQU    BASE+5
  59. FCB    EQU    BASE+5CH 
  60. ;
  61. CR    EQU    0DH
  62. LF    EQU    0AH
  63. ;
  64.     ORG    BASE+100H
  65. ;
  66. ;Move the program up to high RAM and jump to it.
  67. ;
  68. MOVEUP:    LXI    B,PEND-START+1        ;NUMBER OF BYTES TO MOVE
  69.     LXI    H,DEST+PEND-START+1 ;END OF MOVED CODE
  70.     LXI    D,SOURCE+PEND-START ;END OF SOURCE CODE
  71. ;
  72. MVLP:    LDAX    D    ;GET BYTE
  73.     DCX    H    ;BUMP POINTERS
  74.     MOV    M,A    ;NEW HOME
  75.     DCX    D
  76.     DCX    B    ;BUMP BYTE COUNT
  77.     MOV    A,B    ;CHECK IF ZERO
  78.     ORA    C
  79.     JNZ    MVLP    ;IF NOT, DO SOME MORE
  80.     PCHL        ;JUMP TO "START"
  81. ;
  82. SOURCE    EQU    $    ;BOUNDARY MEMORY MARKER
  83. ;
  84. OFFSET    EQU    DEST-SOURCE    ;RELOC AMOUNT
  85. ;-----------------------------------------------;
  86. ;    The following code gets moved        ;
  87. ;    to high RAM located at "DEST",        ;
  88. ;        where it is executed.        ;
  89. ;-----------------------------------------------;
  90. ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  91. ;XX   C A U T I O N :  If modifying anything     XX
  92. ;XX     in this program from here on:         XX
  93. ;XX      A-L-L  lables must be of the form:    XX
  94. ;XX    LABEL    EQU    $+OFFSET        XX
  95. ;XX    in order that the relocation to high      XX
  96. ;XX    RAM work successfully.  Forgetting to    XX
  97. ;XX    specify '$+OFFSET' will cause the pro-    XX
  98. ;XX    gram to JMP into whatever is currently    XX
  99. ;XX    in LOW memory, with unpredictable    XX
  100. ;XX    results.  Be careful....        XX
  101. ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  102. ;
  103. START    EQU    $+OFFSET
  104.     LXI    SP,STACK ;SET UP LOCAL STACK POINTER
  105. ;Set user number
  106.     MVI    E,USERNR
  107.     MVI    C,SGUSR
  108.     CALL    BDOS
  109. ;Select desired drive
  110.     MVI    E,DRIVE
  111.     MVI    C,SELDSK
  112.     CALL    BDOS
  113. ;Open the file
  114.     XRA    A
  115.     STA    MYFCB+32 ;ZERO RECORD NUMBER
  116.     LXI    D,MYFCB
  117.     MVI    C,OPEN
  118.     CALL    BDOS
  119. ;Did it exist?
  120.     INR    A    ;A=> 0 MEANS "NO"
  121.     JZ    BYERR    ;NO FILE, EXIT ERROR MSG
  122. ;
  123. OPENOK    EQU    $+OFFSET
  124.     LXI    D,BASE+100H ;POINT TO TPA
  125. ;
  126. READLP    EQU    $+OFFSET
  127.     PUSH    D    ;SAVE BUFFER ADDRESS
  128.     PUSH    B
  129.     PUSH    H
  130.     MVI    C,STDMA
  131.     CALL    BDOS
  132. ;Read a sector
  133.     LXI    D,MYFCB
  134.     MVI    C,READ
  135.     CALL    BDOS
  136.     POP    H
  137.     POP    B
  138.     ORA    A    ;OK?
  139.     JNZ    EOF    ;NOT OK, MUST BE EOF
  140.     POP    D    ;GET DMA ADDR
  141.     LXI    H,80H    ;LENGTH OF 1 SECT.
  142.     DAD    D    ;CALC NEXT BUFF ADDR
  143.     XCHG        ;PUT IT BACK IN DE
  144.     JMP    READLP    ;LOOP
  145. ;
  146. ;Got return code on read, see if error or EOF
  147. ;
  148. EOF    EQU    $+OFFSET
  149.     POP    D    ;DELETE STACKED BUFFER ADDR
  150. ;A has return code from read
  151.     DCR    A    ;EOF?
  152.     JZ    RSDMA    ;YES, EXIT
  153. ;
  154. ;Read error - exit with message
  155. ;
  156. BYERR    EQU    $+OFFSET
  157.     CALL    ERXIT    ;PRINT:
  158.     DB    CR,LF,'++DISK READ ERROR++',CR,LF,'$'
  159. ;
  160. ;Exit with error message
  161. ;
  162. ERXIT    EQU    $+OFFSET
  163.     POP    D
  164.     MVI    C,PRINT
  165.     CALL    BDOS
  166.     XRA    A
  167.     STA    BASE+4    ;SET DRIVE A:, USER 0
  168.     JMP    BASE
  169. ;
  170. ;Reset DMA address to normal
  171. ;
  172. RSDMA    EQU    $+OFFSET
  173.     LXI    D,BASE+80H
  174.     MVI    C,STDMA
  175.     CALL    BDOS
  176. ;
  177. ;Leave warm boot address on stack, then execute MINICBBS
  178.     LXI    H,0
  179.     PUSH    H
  180.     JMP    BASE+100H    ;EXECUTE MINICBBS
  181. ;
  182. MYFCB    EQU    $+OFFSET
  183.     DB    0,'MINICBBSCOM',0
  184. ;Filename goes here^^^^^^^^^^^
  185. ;Default drive  ^        ^extent number
  186. ;
  187. PEND    EQU    $+OFFSET ;END OF RELOCATED CODE
  188. ;
  189.     DS    20     ;ROOM FOR OUR FCB
  190.     DS    40     ;ROOM FOR LOCAL STACK
  191. STACK    EQU    $+OFFSET ;LOCAL STACK
  192. ;
  193.     END
  194.  
  195.