; U.COM - VERSION 1.0 ; BY ROBERT FISHER ; November 27, 1981 ; ;Select drive and user area with one command. ; ;Usage: ; U B4 ;will select drive B:, user area 4. ; ;The drive may be any valid drive letter in upper or lower case, ;and the user area may be any user area in the range 0-31. ;(But see the customization area below.) ;Either may be omitted. If both are omitted, a usage message is printed. ; ;To be useful, this program must be accessable from all drives and ;all user areas. ;This is no problem if you are using one of the modified CCP's, but ;requires some other mechanism for a standare CCP. ; ;Check the public programs: DUPUSR21.ASM and CCPPATCH.ASM or the ;various versions of CCPZ.ASM ; ;One further note. Your BIOS must be correctly written for this ;program to work. Specifically, it must not reset the user area ;to zero on warm boot. (The California Computer System BIOS ;fails in this respect.) ; 0100 org 100h 005C = fcb equ 5ch 0005 = bdos equ 5 0004 = cdrive equ 04 0000 = warmbt equ 0 ; 0009 = prstr equ 9 ; 0009 = tab equ 9 000A = lf equ 0ah 000D = cr equ 0dh ; ;USER customization parameters 000F = maxuser equ 15 ;maximum user area (may be in range 0-31) 0004 = numdrvs equ 4 ;number of drives in your system ; ;set selected drive 0100 215D00 lxi h,fcb+1 0103 7E mov a,m 0104 FE20 cpi ' ' 0106 CA6901 jz usage ;no parameters 0109 FE3A cpi '9'+1 010B DA2B01 jc digit ;no drive was specified 010E E65F ani 5fh ;make it upper case 0110 D641 sui 'A' 0112 DA6901 jc usage ;illegal character 0115 FE04 cpi numdrvs 0117 D26901 jnc usage ;too high a drive specified 011A 5F mov e,a 011B 3A0400 lda cdrive ;put new drive into lower nibble of cdrive 011E E6F0 ani 0f0h ;zero out old drive number 0120 B3 ora e ;slip the new drive in 0121 320400 sta cdrive ;this sets the drive ; ;set selected user area 0124 23 inx h 0125 7E mov a,m 0126 FE20 cpi ' ' 0128 CA0000 jz warmbt ;no user area specified 012B D630 digit sui '0' 012D DA6901 jc usage ;non-digit 0130 FE0A cpi 10 0132 D26901 jnc usage ;non-digit 0135 5F mov e,a ;move it to e to preserve it 0136 23 inx h 0137 7E mov a,m 0138 FE20 cpi ' ' 013A CA5101 jz setusr ;one-digit user 013D D630 sui '0' 013F DA6901 jc usage ;non-digit 0142 FE0A cpi 10 0144 D26901 jnc usage ;non-digit 0147 4F mov c,a 0148 AF xra a ;clear the carry bit 0149 7B mov a,e ;get first digit back 014A 17 ral ;x2 014B 5F mov e,a 014C 17 ral ;x4 014D 17 ral ;x8 014E 83 add e ;x10 014F 81 add c ;add in second digit 0150 5F mov e,a ; 0151 7B setusr: mov a,e ;get it back if it's not there already 0152 FE10 cpi maxuser+1 0154 D26901 jnc usage 0157 3F cmc ;clear the carry bit ; ;User area goes in upper nibble of cdrive. 0158 17 ral 0159 17 ral 015A 17 ral 015B 17 ral 015C 4F mov c,a 015D 3A0400 lda cdrive 0160 E60F ani 0fh ;zero out old user number 0162 B1 ora c ;slip in new user number 0163 320400 sta cdrive ; ; 0166 C30000 jmp warmbt ;Print USAGE message if no parameters provided, or if parameters ;are illegal. 0169 117201 usage: lxi d,message 016C 0E09 mvi c,prstr 016E CD0500 call bdos 0171 C9 ret 0172 4472697665message db 'Drive and user selector: U.COM - Version 1.0',cr,lf 01A0 0909090962 db tab,tab,tab,tab,'by Robert Fisher - November 27, 1981',cr,lf,lf 01CB 53616D706C db 'Sample usage:',cr,lf,lf 01DB 0909552042 db tab,tab,'U B4',cr,lf,lf 01E4 73656C6563 db 'selects drive B, user area 4.',cr,lf,lf 0204 0909552031 db tab,tab,'U 13',cr,lf,lf 020D 73656C6563 db 'selects user area 13 of the current drive.',cr,lf,lf 023A 0909552042 db tab,tab,'U B',cr,lf,lf 0242 73656C6563 db 'selects drive B, current user area.',cr,lf,lf 0268 4C6F776572 db 'Lower case is acceptable for the drive letter.',cr,lf 0298 5468652064 db 'The drive or the user area may be omitted.',cr,lf,lf 02C5 24 db '$' 02C6 end