home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol007 / user8-8.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  2.0 KB  |  84 lines

  1. ;
  2. ;    USER.ASM vers. 1.2
  3. ;      by Ron Fowler
  4. ;         Westland, Mich.
  5. ;
  6. ;
  7. ;      revised 8/7/80
  8. ;
  9. ;     (FOR USE WITH CP/M-2.x ONLY)
  10. ; This program is used to restrict access
  11. ; to the higher user areas while  leaving
  12. ; the lower user areas public.    The high-
  13. ; est available public user area  is  de-
  14. ; fined by "MAXUSER".
  15. ;
  16. ;08/07/80 CORRECTED TO MAINTAIN REQUESTED
  17. ;      USER NUMBER EVEN AFTER WARM BOOT.
  18. ;      AND TO ALLOW NUMBERS HIGHER THAN
  19. ;      9.  By Keith Petersen, W8SDZ.
  20. ;
  21. ;08/07/80 Replaced RAL instructions with RLC to 
  22. ;      eliminate drive select error caused by
  23. ;      rotating carry bit into accumulator.
  24. ;      By Dave Hardy and Bruce Levison
  25. ;
  26. ;08/08/80 Modified for improved response time
  27. ;     by calling the setusr function after
  28. ;     modifying the drive byte at loc 4,
  29. ;     bypassing the need to warm boot
  30. ;        By Ron Fowler
  31. ;
  32. ;
  33. DFCB    EQU    5CH 
  34. MAXUSER EQU    3    ;for example
  35. SETUSR    EQU    32    ;set user in bdos
  36. DRIVE    EQU    4
  37. BDOS    EQU    5
  38. ;
  39.     ORG    100H
  40. ;
  41.     LXI    H,DFCB+1 ;POINT TO ORIGINATING USER # IN CMD LINE
  42.     MVI    E,0
  43. NUMLUP:
  44.     MOV    A,M    ;GET CHARACTER
  45.     INX    H    ;BUMP CHAR POINTER
  46.     SUI    '0'    ;REMOVE ASCII BIAS
  47.     JC    NUMDONE
  48.     CPI    10    ;CHECK IF PAST 9
  49.     JNC    NUMDONE ;ANY INVALID CHAR ENDS NUMBER
  50.     MOV    D,A
  51.     MOV    A,E    ;GET ACCUMULATED NUMBER
  52.     ADD    A    ;TIMES TWO
  53.     ADD    A    ;TIMES FOUR
  54.     ADD    E    ;TIMES FIVE
  55.     ADD    A    ;TIMES TEN
  56.     ADD    D    ;PLUS NEW DIGIT
  57.     MOV    E,A    ;SAVE ACCUMULATION
  58.     JMP    NUMLUP    ;LOOP BACK FOR NEXT CHAR
  59. ;
  60. NUMDONE:
  61.     MOV    A,E    ;GET ACCUMULATED NUMBER
  62.     ORA    A    ;BELOW ZERO OR ABOVE 127?
  63.     JM    HUH    ;INVALID CHARACTER ENTERED
  64.     CPI    MAXUSER+1
  65.     JNC    HUH    ;RESTRICT ACCESS
  66.     RLC ! RLC ! RLC ! RLC    ;MOVE TO UPPER NIBBLE
  67.     MOV    B,A    ;SAVE REQUESTED USER NUMBER
  68.     LDA    DRIVE    ;GET CURRENT USER/DRIVE
  69.     ANI    0FH    ;STRIP OFF OLD USER NUMBER
  70.     ORA    B    ;GET NEW USER NUMBER
  71.     STA    DRIVE    ;SET NEW USER NUMBER
  72.     MVI    C,SETUSR ;SET THE USER FOR NOW
  73.     JMP    BDOS    ;SET IT AND EXIT
  74. ;
  75. HUH:    LXI    D,MSG
  76.     MVI    C,9    ;PRINT STRING FUNCTION
  77.     JMP    BDOS    ;PRINT & EXIT 
  78. ;
  79. MSG:    DB    'Only USER 0-'
  80.     DB    MAXUSER+30H
  81.     DB    ' available.$'
  82. ;
  83.     END
  84.