forked from MirrorRepos/RomWBW
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.1 KiB
108 lines
3.1 KiB
page
|
|
|
|
; Library: RCPR for Z34RCP
|
|
; Author: Carson Wilson
|
|
; Version: 1.5
|
|
; Date: August 30, 1989
|
|
; Changes: Minor bug fix as suggested by Howard Goldstein.
|
|
;
|
|
; Version: 1.4
|
|
; Date: August 26, 1989
|
|
; Changes: Now performs reset 37 for ALL drives under CP/M 2.2 or ZRDOS
|
|
; to ensure that fast fixed disks are reset under ZRDOS, then
|
|
; exits with reset 13 to compensate for bugs in ZRDOS/CP/M 2.2
|
|
; reset 37. Still resets individual drives selectively under
|
|
; CP/M Plus and ZS/ZDDOS.
|
|
|
|
; Version: 1.3
|
|
; Date: August 11, 1989
|
|
; Changes: Now responds dynamically to QUIET flag, eliminating "noise."
|
|
; Now performs reset 37 in ALL cases, reset 13 as well if not
|
|
; CP/M Plus or ZSDOS (per suggestion by Howard Goldstein).
|
|
|
|
; Version: 1.2
|
|
; Date: December 30, 1988
|
|
; Changes: Now resets single drives under Z3PLUS.
|
|
|
|
; Version: 1.1
|
|
; Date: September 11, 1988
|
|
; Changes: Fixed bug which failed to detect ZRDOS. ZRDOS' function
|
|
; 37, like CP/M's, is not reliable.
|
|
|
|
; Author: Carson Wilson
|
|
; Version: 1.0
|
|
; Date: June 15, 1988
|
|
;
|
|
; Command: RESET
|
|
; Function: Reset the disk system
|
|
; Forms: R [d: or dir:] - ZSDOS or CP/M Plus
|
|
; R - CP/M 2.2 or ZRDOS
|
|
; Comments: ZRDOS does not require a disk system reset when disks are
|
|
; changed, but directory programs will not show the correct
|
|
; size if this is not done. It is also good practice. Since
|
|
; no warm boot is performed, the disk in drive A need not have
|
|
; the operating system on it.
|
|
;
|
|
; Under ZSDOS or CP/M Plus, individual drives may be reset, and
|
|
; if RESETSP is true, space remaining is also given. If
|
|
; the fast hard disk reset capability is enabled under ZSDOS,
|
|
; any "fast" fixed disks are also reset at this time.
|
|
;
|
|
; NOTE: It is necessary to reset a legal directory or DU when there are
|
|
; protected directories.
|
|
|
|
reset: ld a,(quiet)
|
|
or a ; Skip message if quiet
|
|
jr nz,QReset
|
|
call print ; Report action
|
|
db ' Rese','t'+80h
|
|
QReset: call cpmver ; CP/M Plus?
|
|
jr nc,reset0 ; Yes
|
|
ld c,48
|
|
call bdos ; ZRDOS or CP/M?
|
|
ld a,h
|
|
or a
|
|
jr nz,reset0 ; No, assume bug-free F37
|
|
ld de,0ffffh ; Yes, reset ALL drives, both ways
|
|
ld c,37
|
|
call bdos
|
|
ld c,13
|
|
jp bdos ; Yes, do regular reset
|
|
|
|
; Reset individual drive(s)
|
|
|
|
reset0: call dirchek ; Abort with error if illegal drivespec
|
|
ld a,(fcb1) ; Use default drive?
|
|
or a
|
|
jr nz,reset1 ; No, use drive from FCB1
|
|
ld a,(cdrv) ; Yes, get ZCPR 3.3 current drive byte
|
|
inc a ; Shift range to 1..16
|
|
reset1: ld hl,1 ; Map drive "A:"
|
|
reset2: dec a ; Done yet?
|
|
jr z,reset3 ; Yes
|
|
add hl,hl ; No, shift vector to next drive
|
|
jr reset2
|
|
|
|
; Check for fixed disks
|
|
|
|
reset3: push hl ; Save current or specified vector
|
|
ld c,39
|
|
call bdos ; ZSDOS return fixed disks in HL
|
|
pop de ; Restore vector
|
|
ld a,d
|
|
or h ; Add any fixed disks
|
|
ld d,a
|
|
ld a,e
|
|
or l
|
|
ld e,a
|
|
ld c,37 ; Reset individual drive(s)
|
|
|
|
if spaceon and resetsp
|
|
call bdos
|
|
jp crspace ; Show space remaining (QUIET sensitive)
|
|
else
|
|
jp bdos ; Do reset and return
|
|
endif
|
|
|
|
; End RCPR.LIB
|
|
|