;
; USER.ASM vers. 1.2
; by Ron Fowler
; Westland, Mich.
;
;
; revised 8/7/80
;
; (FOR USE WITH CP/M-2.x ONLY)
; This program is used to restrict access
; to the higher user areas while leaving
; the lower user areas public. The high-
; est available public user area is de-
; fined by "MAXUSER".
;
;08/07/80 CORRECTED TO MAINTAIN REQUESTED
; USER NUMBER EVEN AFTER WARM BOOT.
; AND TO ALLOW NUMBERS HIGHER THAN
; 9. By Keith Petersen, W8SDZ.
;
;08/07/80 Replaced RAL instructions with RLC to
; eliminate drive select error caused by
; rotating carry bit into accumulator.
; By Dave Hardy and Bruce Levison
;
;08/08/80 Modified for improved response time
; by calling the setusr function after
; modifying the drive byte at loc 4,
; bypassing the need to warm boot
; By Ron Fowler
;
;
DFCB EQU 5CH
MAXUSER EQU 0 ;for example
SETUSR EQU 32 ;set user in bdos
DRIVE EQU 4
BDOS EQU 5
;
ORG 100H
;
LXI H,DFCB+1 ;POINT TO ORIGINATING USER # IN CMD LINE
MVI E,0
NUMLUP:
MOV A,M ;GET CHARACTER
INX H ;BUMP CHAR POINTER
SUI '0' ;REMOVE ASCII BIAS
JC NUMDONE
CPI 10 ;CHECK IF PAST 9
JNC NUMDONE ;ANY INVALID CHAR ENDS NUMBER
MOV D,A
MOV A,E ;GET ACCUMULATED NUMBER
ADD A ;TIMES TWO
ADD A ;TIMES FOUR
ADD E ;TIMES FIVE
ADD A ;TIMES TEN
ADD D ;PLUS NEW DIGIT
MOV E,A ;SAVE ACCUMULATION
JMP NUMLUP ;LOOP BACK FOR NEXT CHAR
;
NUMDONE:
MOV A,E ;GET ACCUMULATED NUMBER
ORA A ;BELOW ZERO OR ABOVE 127?
JM HUH ;INVALID CHARACTER ENTERED
CPI MAXUSER+1
JNC HUH ;RESTRICT ACCESS
RLC ! RLC ! RLC ! RLC ;MOVE TO UPPER NIBBLE
MOV B,A ;SAVE REQUESTED USER NUMBER
LDA DRIVE ;GET CURRENT USER/DRIVE
ANI 0FH ;STRIP OFF OLD USER NUMBER
ORA B ;GET NEW USER NUMBER
STA DRIVE ;SET NEW USER NUMBER
MVI C,SETUSR ;SET THE USER FOR NOW
JMP BDOS ;SET IT AND EXIT
;
HUH: LXI D,MSG
MVI C,9 ;PRINT STRING FUNCTION
JMP BDOS ;PRINT & EXIT
;
MSG: DB 'Only USER 0-'
DB MAXUSER+30H
DB ' available.$'
;
END