Compucolor.org – Virtual Media

Listing of file='UDOS.SRC;01' on disk='vmedia/ncc_12-sector.ccvf'

;UPDATE MODE DISK OS FOR PRGZAP UTILITY
	ORG	0AD00H
DSKBUF:	DS	256	;DISK UPDATE BUFFER
DSNAME:	DS	32	;PARAMETER BUFFER FOR FILENAME
RWSTATUS:
	DS	1	;PSW STATUS AFTER R/WBLK
			;FILE PARAMETER BLOCK
FPB:	DS	1	;OPEN TYPE CODE
FATR:	DS	1	;ATTRIBUTE BYTE
FNAM:	DS	6	;FILE NAME
FTYP:	DS	3	;FILE TYPE
FVER:	DS	1	;FILE VERSION NUMBER
FSBK:	DS	2	;STARTING BLOCK NUMBER
FSIZ:	DS	2	;NUMBER OF BLOCKS
FLBC:	DS	1	;BYTE COUNT OF LAST BLOCK
FLAD:	DS	2	;LOAD ADR. OF "IMAGE" FILE
FSAD:	DS	2	;START ADR. FOR "IMAGE" FILE
	DS	1	;SPARE
FDBK:	DS	1	;DIRECTORY BLOCK NUMBER
FDEN:	DS	1	;DIRECTORY ENTRY NUMBER
FAUX:	DS	2	;NEW FILE CLOSING SIZE, OR...
			;...AUX. BYTE COUNT FOR SEQ ROUT
FHAN:	DS	2	;HANDLER ADDRESS
FFCN:	DS	1	;HANDLER FUNCTION CODE
FDRV:	DS	1	;DRIVE NUMBER
FBLK:	DS	2	;BLOCK NO. FOR TRANSFER
FBUF:	DW	DSKBUF	;BUFFER POINTER FOR TRANSFER
FXBC:	DS	2	;BYTE COUNT FOR TRANSFER
FPTR:	DS	2	;BBUF PNTR FOR SEQ ROUTINES
FPBE:			;END OF FPB
EMESS	EQU	262DH	;ERROR MESSAGE ROUTINE
OPEN	EQU	2DABH	;OPEN SUBROUTINE
PFSPC	EQU	3077H	;PARSE FILE NAME
RBLK	EQU	3182H	;READ BLOCK ROUTINE
WBLK	EQU	317FH	;WRITE BLOCK ROUTINE
EFRD	EQU	30H	;FILE READ ERR CODE
EFWR	EQU	33H	;FILE WRITE ERROR CODE
EIVC	EQU	3	;INVALID COMMAND CODE
PTYP:	DB	'PRG'	;PRG TYPE
ZDOS:			;ENTRY POINT
	PUSH	H	;SAVE HL
	MVI	A,1	;REQ TO OPEN FILE?
	CMP	E
	JC	NOPEN	;NO.
	MOV	A,E	;OPEN TYPE CODE
	LXI	H,DSNAME;POINT TO INPUT DSNAME
	LXI	D,FPB	;POINT TO FPB
	STAX	D	;STORE OPEN TYPE CODE
	LXI	B,PTYP	;SET DEFAULT TYPE "PRG"
	CALL	PFSPC	;CALL PARSE FILE NAME
	JC	ERRET	;ERROR!
	LXI	H,FPB	;POINT TO FPB
	CALL	OPEN	;OPEN FILE
	JC	ERRET	;ERROR!
	JMP	NRET	;NORMAL RETURN
NOPEN:
	MVI	A,3	;REQ TO READ BLOCK?
	CMP	E
	JNZ	NREAD	;NO
	LXI	H,FPB	;POINT TO FPB
	CALL	RBLK	;CALL READ BLOCK
	MVI	B,EFRD	;ERROR MSG CODE FRD
RWST:	PUSH	PSW	;SAVE STATUS
	POP	D	;STATUS TO E
	MOV	A,E	;STATUS TO A
	STA	RWSTATUS
			;SAVE FLAGS FOR CALLER
	JNZ	ERRET	;ERROR
	JC	ERRET	;ERROR
	JMP	NRET	;NORMAL RETURN
NREAD:
	MVI	A,4	;REQ TO WRITE BLOCK?
	CMP	E
	JNZ	NWRITE	;NO
	LXI	H,FPB	;POINT TO FPB
	CALL	WBLK	;CALL WRITE BLOCK
	MVI	B,EFWR	;ERROR MSG CODE FWR
	JMP	RWST	;TO COMMON STATUS PROC
NWRITE:
	MVI	B,EIVC	;INVALID COMMAND CODE
ERRET:			;ERROR RETURN
	CALL	EMESS	;CALL SYSTEM ERR MSG
	LXI	D,-1	;SET ERROR RETURN CODE
	POP	H	;RESTORE HL
	RET		;RETURN
NRET:			;NORMAL RETURN
	LXI	D,0	;ZERO RETURN CODE
	POP	H	;RESTORE HL
	RET		;RETURN
	END