DataMuseum.dk

Presents historical artifacts from the history of:

Christian Rovsing CR7, CR8 & CR16 CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Christian Rovsing CR7, CR8 & CR16 CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦6880665a1⟧ TextFile

    Length: 22400 (0x5780)
    Types: TextFile
    Names: »CRDOS.ASM«

Derivation

└─⟦be0857eee⟧ Bits:30004395 CP/M-86 files - CR8 Dual floppy
    └─ ⟦this⟧ »CRDOS.ASM« 

TextFile

	TITLE	'CR-DOS: THE CP/M 2.2 COMPATIBLE BDOS FOR Z80 - DATE: 830907'
	PAGE	43

	MACLIB	Z80

MAXDSK	EQU	5		; VALID DISK.# IS IN THE RANGE 0-4

BIOS	EQU	0E600H 		; START OF BIOS (EE00 FOR 5MB, E600 FOR 10MB)
;		------
;
BOOT	EQU	BIOS+00H		; BOOT
WBOOT	EQU	BIOS+03H		; WBOOT
CONST	EQU	BIOS+06H		; CONST
CONIN	EQU	BIOS+09H		; CONIN
CONOUT	EQU	BIOS+0CH		; CONOUT
LIST	EQU	BIOS+0FH		; LIST
PUNCH	EQU	BIOS+12H		; PUNCH
READER	EQU	BIOS+15H		; READER
HOME	EQU	BIOS+18H		; HOME
SELDSK	EQU	BIOS+1BH		; SELDSK
SETTRK	EQU	BIOS+1EH		; SETTRK
SETSEC	EQU	BIOS+21H		; SETSEC
SETDMA	EQU	BIOS+24H		; SETDMA
READ	EQU	BIOS+27H		; READ
WRITE	EQU	BIOS+2AH		; WRITE
LISTST	EQU	BIOS+2DH		; LISTST
SECTRN	EQU	BIOS+30H		; SECTRAN

CR	EQU	0DH
LF	EQU	0AH
SPC	EQU	20H
BS	EQU	8
TAB	EQU	9
BUFSIZ	EQU	128
DDMA	EQU	80H		; DEFAULT DMA BUFFER

CEDOS	EQU	BIOS-1600H	; D800 FOR 5MB, D000 FOR 10MB
	PAGE
;*****************************************************************************
;START OF XBDOS
;
	ORG	CEDOS+806H

EDOS:	XCHG 
	SHLD	PARM
	XCHG 
	MOV	A,E
	STA	PARMLW
	LXI	H,0
	SHLD	IORSLT
	SSPD	SAVSP
	LXI	SP,EDOSTK
	XRA	A
	STA	LEDE0
	STA	LEDDE
	LXI	H,LED74
	PUSH	H
	MOV	A,C
	CPI	29H		; FUNC.# TOO GREAT ?
	RNC			; YES, RETURN

	MOV	C,E
	LXI	H,LE047
	MOV	E,A
	MVI	D,0
	DAD	D
	DAD	D
	MOV	E,M
	INX	H
	MOV	D,M
	LHLD	PARM
	XCHG 
	PCHL 

LE047:	DW	WBOOT,CI,C0,READIN,PUNCH,LIST,DIRCIO,GETIO
	DW	SETIO,PRSTR,GETBUF,CSTS,RETVER,RESDSK,SCTDSK,OPFIL
	DW	CLSFIL,SFRST,SNEXT,DLTFIL,RDSEQ,WRSEQ,MAKFIL,RENFIL
	DW	LOGVEC,CURDSK,STDMA,GALLOC,WPDSK,GROVEC,SFATB,GDPB
	DW	SGUSER,RDRAND,WRRAND,FILSIZ,SRAND,RSTDRV,DUMRTN,DUMRTN
	DW	WZRAND

EDSERR:	DB	'CR-DOS Error: $'

SSLCER:	DB	CR,LF,'Drive Select Error, no new drive is selected.$'

BADREC:	DB	'Bad Record. Type ^C to Reboot or any key for retry.: $'

FILRO:	DB	'File $'

DRO:	DB	'Drive: $'

ROTXT:	DB	' is Read Only.$'

BADSEC:	LXI	H,BADREC
	MVI	C,1
	CALL	ERRCI
	CPI	3
	JZ	0
	RET

DRVRO:	LXI	H,DRO
	CALL	ERRTXT
	CALL	DSKOUT
	JR	ROOUT

DSKOUT:	LDA	CDSK
	ADI	'A'
	JR	C0S

FILERO:	LXI	H,FILRO
	CALL	ERRTXT
	CALL	DSKOUT
	MVI	A,':'
	CALL	C0S
	MVI	B,8
	LHLD	PARM
OUTNAM:	INX	H
	MOV	A,M
	CPI	SPC
	JRZ	OUEXT
	CALL	C0S
	DJNZ	OUTNAM

OUEXT:	MVI	A,'.'
	CALL	C0S
	LHLD	PARM
	LXI	D,9
	DAD	D
	MVI	B,3
OUEXT1:	MOV	A,M
	CPI	SPC
	JRZ	ROOUT
	CALL	C0S
	INX	H
	DJNZ	OUEXT1
	JR	ROOUT

C0S:	PUSH	H
	PUSH	B
	MOV	C,A
	CALL	CONOUT
	POP	B
	POP	H
	RET

ROOUT:	LXI	B,ROTXT
	CALL	LE1D3
	JMP	0

ERRCI:	CALL	ERRTXT

LE0FB:	LXI	H,LE30E
	MOV	A,M
	MVI	M,0
	ORA	A
	RNZ
	JMP	CONIN

ERRTXT:	PUSH	H
	CALL	CRLF
	LXI	B,EDSERR
	CALL	LE1D3
	POP	B
	JMP	LE1D3

LE106:	CALL	LE0FB
	CALL	CHKCHS
	RC	
	PUSH	PSW	
	MOV	C,A
	CALL	C0
	POP	PSW	
	RET

CHKCHS:	CPI	CR
	RZ
	CPI	LF
	RZ
	CPI	TAB
	RZ
	CPI	7FH
	RZ
	CPI	BS
	RZ
	CPI	SPC
	RET

LE123:	LDA	LE30E
	ORA	A
	JRNZ	LE145
	CALL	CONST
	ANI	1
	RZ
	CALL	CONIN
	CPI	13H		; CONTROL S ?
	JRNZ	LE142
	CALL	CONIN
	CPI	3
	JZ	0
	XRA	A
	RET

LE142:	STA	LE30E
LE145:	MVI	A,1
	RET

CRLF:	MVI	C,CR
	CALL	LE148
	MVI	C,LF

LE148:	LDA	LE30A
	ORA	A
	JRNZ	LE162
	PUSH	B
	CALL	LE123
	POP	B
	PUSH	B
	CALL	CONOUT
	POP	B
	PUSH	B
	LDA	PRITOG
	ORA	A
	CNZ	LIST
	POP	B
LE162:	MOV	A,C
	LXI	H,CHRCNT
	CPI	7FH
	RZ
	INR	M
	CPI	SPC
	RNC	
	DCR	M
	MOV	A,M
	ORA	A
	RZ
	MOV	A,C
	CPI	7FH
	JRNZ	LE179
	DCR	M
	RET

LE179:	CPI	LF
	RNZ
	MVI	M,0
	RET

OUTCTH:	MOV	A,C
	CALL	CHKCHS
	JRNC	C0
	PUSH	PSW	
	MVI	C,'^'
	CALL	LE148
	POP	PSW	
	ORI	40H
	MOV	C,A
C0:	MOV	A,C
	CPI	TAB
	JRNZ	LE148

LE196:	MVI	C,SPC
	CALL	LE148
	LDA	CHRCNT
	ANI	7
	JRNZ	LE196
	RET

BSPBS:	CALL	BSPBS1
	MVI	C,SPC
	CALL	CONOUT
BSPBS1:	MVI	C,BS
	JMP	CONOUT

LE1B1:	MVI	C,'#'
	CALL	LE148
	CALL	CRLF
LE1B9:	LDA	CHRCNT
	LXI	H,LE30B
	CMP	M
	RNC
	MVI	C,SPC
	CALL	LE148
	JR	LE1B9

LE1D3:	LDAX	B
	CPI	'$'		; END OF STRING ?
	RZ
	INX	B
	PUSH	B
	MOV	C,A
	CALL	C0
	POP	B
	JR	LE1D3

GETBUF:	LDA	CHRCNT
	STA	LE30B
	LHLD	PARM
	MOV	C,M
	INX	H
	PUSH	H
	MVI	B,0
LE1EF:	PUSH	B
	PUSH	H
LE1F1:	CALL	LE0FB
	ANI	7FH
	POP	H
	POP	B
	CPI	CR
	JZ	LE2C1
	CPI	LF
	JZ	LE2C1
	CPI	7FH
	JRZ	DLTBS
	CPI	BS
	JRNZ	LE237
DLTBS:	MOV	A,B
	ORA	A
	JRZ	LE1EF
	DCR	B
	LDA	CHRCNT
	STA	LE30A
	PUSH	B
	CALL	LE1B1
	POP	B
	POP	H
	PUSH	H
	PUSH	B
LE278:	MOV	A,B
	ORA	A
	JRZ	LE28A
	INX	H
	MOV	C,M
	DCR	B
	PUSH	B
	PUSH	H
	CALL	OUTCTH
	POP	H
	POP	B
	JR	LE278

LE28A:	PUSH	H
	LDA	LE30A
	ORA	A
	JRZ	LE1F1
	LXI	H,CHRCNT
	SUB	M
	STA	LE30A
LE299:	CALL	BSPBS
	LXI	H,LE30A
	DCR	M
	JRNZ	LE299
	JR	LE1F1

LE237:	CPI	10H		; CONTROL P ?
	JRNZ	LE248
	PUSH	H
	LXI	H,PRITOG
	MVI	A,1
	SUB	M
	MOV	M,A
	POP	H
	JR	LE1EF

LE248:	CPI	18H		; CONTROL X ?
	JRNZ	LE2A6
	POP	H
LE24E:	LDA	LE30B
	LXI	H,CHRCNT
	CMP	M
	JNC	GETBUF
	DCR	M
	CALL	BSPBS
	JR	LE24E

LE2A6:	INX	H
	MOV	M,A
	INR	B
	PUSH	B
	PUSH	H
	MOV	C,A
	CALL	OUTCTH
	POP	H
	POP	B
	MOV	A,M
	CPI	3
	MOV	A,B
	JRNZ	LE2BD
	CPI	1		; IF CONTROL C AT FIRST POSITION THEN
	JZ	0		;   REBOOT
LE2BD:	CMP	C
	JC	LE1EF
LE2C1:	POP	H
	MOV	M,B
	MVI	C,CR
	JMP	LE148

CI:	CALL	LE106
	JR	LE301

READIN:	CALL	READER
	JR	LE301

DIRCIO:	MOV	A,C
	INR	A
	JRZ	LE2E0
	INR	A
	JZ	CONST
	JMP	CONOUT

LE2E0:	CALL	CONST
	ORA	A
	JZ	LED91
	CALL	CONIN
	JR	LE301

GETIO:	LDA	3
	JR	LE301

SETIO:	LXI	H,3
	MOV	M,C
	RET

PRSTR:	XCHG 
	MOV	C,L
	MOV	B,H
	JMP	LE1D3

CSTS:	CALL	LE123
LE301:	STA	IORSLT
DUMRTN:	RET

LE305:	MVI	A,1
LE307:	JMP	LE301
LE30A:	NOP
LE30B:	NOP
CHRCNT:	DB	0
PRITOG:	DB	0
LE30E:	NOP
SAVSP:	DW	0
LE341:	NOP
CDSK:	DB	0		; CURRENTLY SELECTED
LSTDSK:	DB	0		; LAST SELECTED DRIVE USED BY SCTDSK
PARM:	DW	0		; PARM IN (DE) AS TRANSFERRED BY CALL'S TO EDOS
IORSLT:	DW	0		; EDOS FUNC. I/O RESULT

LE34F:	INR	C

LE350:	DCR	C
	RZ
	LDAX	D
	MOV	M,A
	INX	D
	INX	H
	JR	LE350

LE359:	LDA	CDSK
	MOV	C,A
	CALL	SELDSK
	MOV	A,H
	ORA	L
	RZ
	MOV	E,M
	INX	H
	MOV	D,M		; GET XLT ADD
	INX	H
	SHLD	SCR1PT
	INX	H
	INX	H
	SHLD	SCR2PT
	INX	H
	INX	H
	SHLD	SCR3PT
	INX	H
	INX	H
	XCHG 
	SHLD	XLTADD
	LXI	H,DIRBUF
	MVI	C,8
	CALL	LE34F
	LHLD	DPB
	XCHG 
	LXI	H,SPT
	MVI	C,0FH
	CALL	LE34F
	LHLD	DSM
	MOV	A,H
	LXI	H,DSMFLG
	MVI	M,0FFH
	ORA	A
	JRZ	LE39D
	MVI	M,0
LE39D:	MVI	A,0FFH
	ORA	A
	RET

LE3A1:	CALL	HOME
	XRA	A
	LHLD	SCR2PT
	MOV	M,A
	INX	H
	MOV	M,A
	LHLD	SCR3PT
	MOV	M,A
	INX	H
	MOV	M,A
	RET

LE3B2:	CALL	READ
	JR	LE3BB
LE3B8:	CALL	WRITE
LE3BB:	ORA	A
	RZ
	JMP	BADSEC

LE3C3:	LHLD	LEDEA
	MVI	C,2
	CALL	LE4EA
	SHLD	LEDE5
	SHLD	LEDEC
LE3D1:	LXI	H,LEDE5
	MOV	C,M
	INX	H
	MOV	B,M
	LHLD	SCR3PT
	MOV	E,M
	INX	H
	MOV	D,M
	LHLD	SCR2PT
	MOV	A,M
	INX	H
	MOV	H,M
	MOV	L,A
LE3E4:	MOV	A,C
	SUB	E
	MOV	A,B
	SBB	D
	JRNC	LE3FA
	PUSH	H
	LHLD	SPT
	MOV	A,E
	SUB	L
	MOV	E,A
	MOV	A,D
	SBB	H
	MOV	D,A
	POP	H
	DCX	H
	JR	LE3E4
LE3FA:	PUSH	H
	LHLD	SPT
	DAD	D
	JRC	LE40F
	MOV	A,C
	SUB	L
	MOV	A,B
	SBB	H
	JRC	LE40F
	XCHG 
	POP	H
	INX	H
	JR	LE3FA
LE40F:	POP	H
	PUSH	B
	PUSH	D
	PUSH	H
	XCHG 
	LHLD	OFFSET
	DAD	D
	MOV	B,H
	MOV	C,L
	CALL	SETTRK
	POP	D
	LHLD	SCR2PT
	MOV	M,E
	INX	H
	MOV	M,D
	POP	D
	LHLD	SCR3PT
	MOV	M,E
	INX	H
	MOV	M,D
	POP	B
	MOV	A,C
	SUB	E
	MOV	C,A
	MOV	A,B
	SBB	D
	MOV	B,A
	LHLD	XLTADD
	XCHG 
	CALL	SECTRN
	MOV	C,L
	MOV	B,H
	JMP	SETSEC

LE43E:	LXI	H,BSH
	MOV	C,M
	LDA	FCBRC
LE445:	ORA	A
	RAR	
	DCR	C
	JRNZ	LE445
	MOV	B,A
	MVI	A,8
	SUB	M
	MOV	C,A
	LDA	MSKEXN
LE453:	DCR	C
	JRZ	LE45C
	ORA	A
	RAL	
	JR	LE453
LE45C:	ADD	B
	RET

LE45E:	LHLD	PARM
	LXI	D,10H
	DAD	D
	DAD	B
	LDA	DSMFLG
	ORA	A
	JRZ	LE471
	MOV	L,M
	MVI	H,0
	RET
LE471:	DAD	B
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG 
	RET

LE477:	CALL	LE43E
	MOV	C,A
	MVI	B,0
	CALL	LE45E
	SHLD	LEDE5
	RET

LE484:	LHLD	LEDE5
	MOV	A,L
	ORA	H
	RET

LE48A:	LDA	BSH
	LHLD	LEDE5
LE490:	DAD	H
	DCR	A
	JRNZ	LE490
	SHLD	LEDE7
	LDA	BLM
	MOV	C,A
	LDA	FCBRC
	ANA	C
	ORA	L
	MOV	L,A
	SHLD	LEDE5
	RET

GFCBEX:	LHLD	PARM
	LXI	D,0CH
	DAD	D
	RET

GTRCCR:	LHLD	PARM
	LXI	D,0FH
	DAD	D
	XCHG 
	LXI	H,11H
	DAD	D
	RET

LE4BB:	CALL	GTRCCR
	MOV	A,M
	STA	FCBRC
	XCHG 
	MOV	A,M
	STA	FCBCR
	CALL	GFCBEX
	LDA	EXM
	ANA	M
	STA	MSKEXN
	RET

LE4D2:	CALL	GTRCCR
	LDA	LEDD5
	CPI	2
	JRNZ	LE4DE
	XRA	A
LE4DE:	MOV	C,A
	LDA	FCBRC
	ADD	C
	MOV	M,A
	XCHG 
	LDA	FCBCR
	MOV	M,A
	RET
LE4EA:	INR	C
LE4EB:	DCR	C
	RZ
	MOV	A,H
	ORA	A
	RAR	
	MOV	H,A
	MOV	A,L
	RAR	
	MOV	L,A
	JR	LE4EB
LE4F7:	MVI	C,80
	LHLD	DIRBUF
	XRA	A
LE4FD:	ADD	M
	INX	H
	DCR	C
	JRNZ	LE4FD
	RET

LE504:	INR	C
LE505:	DCR	C
	RZ
	DAD	H
	JR	LE505

LE50B:	PUSH	B
	LDA	CDSK
	MOV	C,A
	LXI	H,1
	CALL	LE504
	POP	B
	MOV	A,C
	ORA	L
	MOV	L,A
	MOV	A,B
	ORA	H
	MOV	H,A
	RET

LE51E:	LHLD	LEDAD
	LDA	CDSK
	MOV	C,A
	CALL	LE4EA
	MOV	A,L
	ANI	1
	RET

WPDSK:	LXI	H,LEDAD
	MOV	C,M
	INX	H
	MOV	B,M
	CALL	LE50B
	SHLD	LEDAD
	LHLD	DRM
	INX	H
	XCHG 
	LHLD	SCR1PT
	MOV	M,E
	INX	H
	MOV	M,D
	RET

LE544:	CALL	LE55E
LE547:	LXI	D,9
	DAD	D
	MOV	A,M
	RAL	
	RNC
	JMP	FILERO

LE554:	CALL	LE51E
	RZ
	JMP	DRVRO

LE55E:	LHLD	DIRBUF
	LDA	LEDE9
LE564:	ADD	L
	MOV	L,A
	RNC	
	INR	H
	RET

LE569:	LHLD	PARM
	LXI	D,0EH
	DAD	D
	MOV	A,M
	RET

LE572:	CALL	LE569
	MVI	M,0
	RET

LE578:	CALL	LE569
	ORI	80H
	MOV	M,A
	RET

LE57F:	LHLD	LEDEA
	XCHG 
	LHLD	SCR1PT
	MOV	A,E
	SUB	M
	INX	H
	MOV	A,D
	SBB	M
	RET

LE58C:	CALL	LE57F
	RC	
	INX	D
	MOV	M,D
	DCX	H
	MOV	M,E
	RET

LE595:	MOV	A,E
	SUB	L
	MOV	L,A
	MOV	A,D
	SBB	H
	MOV	H,A
	RET

LE59C:	MVI	C,0FFH
LE59E:	LHLD	LEDEC
	XCHG 
	LHLD	CKS
	CALL	LE595
	RNC	
	PUSH	B
	CALL	LE4F7
	LHLD	CSV
	XCHG 
	LHLD	LEDEC
	DAD	D
	POP	B
	INR	C
	JRZ	LE5C4
	CMP	M
	RZ
	CALL	LE57F
	RNC	
	CALL	WPDSK
	RET

LE5C4:	MOV	M,A
	RET

LE5C6:	CALL	LE59C
	CALL	LE5E0
	MVI	C,1
	CALL	LE3B8
	JR	LE5DA

LE5D4:	CALL	LE5E0
	CALL	LE3B2
LE5DA:	LXI	H,DMAADR
	JR	LE5E3
LE5E0:	LXI	H,DIRBUF
LE5E3:	MOV	C,M
	INX	H
	MOV	B,M
	JMP	SETDMA

LE5E9:	LHLD	DIRBUF
	XCHG 
	LHLD	DMAADR
	MVI	C,80H
	JMP	LE34F

LE5F5:	LXI	H,LEDEA
	MOV	A,M
	INX	H
	CMP	M
	RNZ
	INR	A
	RET

LE5FE:	LXI	H,0FFFFH
	SHLD	LEDEA
	RET

LE605:	LHLD	DRM
	XCHG 
	LHLD	LEDEA
	INX	H
	SHLD	LEDEA
	CALL	LE595
	JRNC	LE619
	JR	LE5FE

LE619:	LDA	LEDEA
	ANI	3
	MVI	B,5
LE620:	ADD	A
	DJNZ	LE620
	STA	LEDE9
	ORA	A
	RNZ
	PUSH	B
	CALL	LE3C3
	CALL	LE5D4
	POP	B
	JMP	LE59E

LE635:	MOV	A,C
	ANI	7
	INR	A
	MOV	E,A
	MOV	D,A
	MOV	A,C
	RRC	
	RRC	
	RRC	
	ANI	1FH
	MOV	C,A
	MOV	A,B
	ADD	A
	ADD	A
	ADD	A
	ADD	A
	ADD	A
	ORA	C
	MOV	C,A
	MOV	A,B
	RRC	
	RRC	
	RRC	
	ANI	1FH
	MOV	B,A
	LHLD	ALV
	DAD	B
	MOV	A,M
LE656:	RLC	
	DCR	E
	JRNZ	LE656
	RET

LE65C:	PUSH	D
	CALL	LE635
	ANI	0FEH
	POP	B
	ORA	C
LE664:	RRC	
	DCR	D
	JRNZ	LE664
	MOV	M,A
	RET

LE66B:	CALL	LE55E
	LXI	D,10H
	DAD	D
	PUSH	B
	MVI	C,11H
LE675:	POP	D
	DCR	C
	RZ
	PUSH	D
	LDA	DSMFLG
	ORA	A
	JRZ	LE688
	PUSH	B
	PUSH	H
	MOV	C,M
	MVI	B,0
	JR	LE68E
LE688:	DCR	C
	PUSH	B
	MOV	C,M
	INX	H
	MOV	B,M
	PUSH	H
LE68E:	MOV	A,C
	ORA	B
	JRZ	LE69D
	LHLD	DSM
	MOV	A,L
	SUB	C
	MOV	A,H
	SBB	B
	CNC	LE65C
LE69D:	POP	H
	INX	H
	POP	B
	JR	LE675

LE6A3:	LHLD	DSM
	MVI	C,3
	CALL	LE4EA
	INX	H
	MOV	B,H
	MOV	C,L
	LHLD	ALV
LE6B1:	MVI	M,0
	INX	H
	DCX	B
	MOV	A,B
	ORA	C
	JRNZ	LE6B1
	LHLD	AL1AL0
	XCHG 
	LHLD	ALV
	MOV	M,E
	INX	H
	MOV	M,D
	CALL	LE3A1
	LHLD	SCR1PT
	MVI	M,3
	INX	H
	MVI	M,0
	CALL	LE5FE

LE6D2:	MVI	C,0FFH
	CALL	LE605
	CALL	LE5F5
	RZ
	CALL	LE55E
	MVI	A,0E5H
	CMP	M
	JRZ	LE6D2
	LDA	LE341
	CMP	M
	JRNZ	LE6F6
	INX	H
	MOV	A,M
	SUI	24H
	JRNZ	LE6F6
	DCR	A
	STA	IORSLT
LE6F6:	MVI	C,1
	CALL	LE66B
	CALL	LE58C
	JR	LE6D2

LE701:	LDA	LEDD4
	JMP	LE301

LE707:	PUSH	B
	PUSH	PSW	
	LDA	EXM
	CMA	
	MOV	B,A
	MOV	A,C
	ANA	B
	MOV	C,A
	POP	PSW	
	ANA	B
	SUB	C
	ANI	1FH
	POP	B
	RET

LE718:	MVI	A,0FFH
	STA	LEDD4
	LXI	H,LEDD8
	MOV	M,C
	LHLD	PARM
	SHLD	LEDD9
	CALL	LE5FE
	CALL	LE3A1
LE72D:	MVI	C,0
	CALL	LE605
	CALL	LE5F5
	JRZ	LE794
	LHLD	LEDD9
	XCHG 
	LDAX	D
	CPI	0E5H
	JRZ	LE74A
	PUSH	D
	CALL	LE57F
	POP	D
	JRNC	LE794
LE74A:	CALL	LE55E
	LDA	LEDD8
	MOV	C,A
	MVI	B,0
LE753:	MOV	A,C
	ORA	A
	JRZ	LE783
	LDAX	D
	CPI	3FH
	JRZ	LE77C
	MOV	A,B
	CPI	0DH
	JRZ	LE77C
	CPI	0CH
	LDAX	D
	JRZ	LE773
	SUB	M
	ANI	7FH
	JRNZ	LE72D
	JR	LE77C
LE773:	PUSH	B
	MOV	C,M
	CALL	LE707
	POP	B
	JRNZ	LE72D
LE77C:	INX	D
	INX	H
	INR	B
	DCR	C
	JR	LE753
LE783:	LDA	LEDEA
	ANI	3
	STA	IORSLT
	LXI	H,LEDD4
	MOV	A,M
	RAL	
	RNC	
	XRA	A
	MOV	M,A
	RET

LE794:	CALL	LE5FE
	MVI	A,0FFH
	JMP	LE301

LE79C:	CALL	LE554
	MVI	C,0CH
	CALL	LE718
LE7A4:	CALL	LE5F5
	RZ
	CALL	LE544
	CALL	LE55E
	MVI	M,0E5H
	MVI	C,0
	CALL	LE66B
	CALL	LE5C6
	CALL	LE72D
	JR	LE7A4

LE7BE:	MOV	D,B
	MOV	E,C
LE7C0:	MOV	A,C
	ORA	B
	JRZ	LE7D1
	DCX	B
	PUSH	D
	PUSH	B
	CALL	LE635
	RAR	
	JRNC	LE7EC
	POP	B
	POP	D
LE7D1:	LHLD	DSM
	MOV	A,E
	SUB	L
	MOV	A,D
	SBB	H
	JRNC	LE7F4
	INX	D
	PUSH	B
	PUSH	D
	MOV	B,D
	MOV	C,E
	CALL	LE635
	RAR	
	JRNC	LE7EC
	POP	D
	POP	B
	JR	LE7C0
LE7EC:	RAL	
	INR	A
	CALL	LE664
	POP	H
	POP	D
	RET

LE7F4:	MOV	A,C
	ORA	B
	JRNZ	LE7C0
	LXI	H,0
	RET

LE7FD:	MVI	C,0
	MVI	E,20H
LE801:	PUSH	D
	MVI	B,0
	LHLD	PARM
	DAD	B
	XCHG 
	CALL	LE55E
	POP	B
	CALL	LE34F
LE810:	CALL	LE3C3
	JMP	LE5C6

LE816:	CALL	LE554
	MVI	C,0CH
	CALL	LE718
	LHLD	PARM
	MOV	A,M
	LXI	D,10H
	DAD	D
	MOV	M,A
LE827:	CALL	LE5F5
	RZ
	CALL	LE544
	MVI	C,10H
	MVI	E,0CH
	CALL	LE801
	CALL	LE72D
	JR	LE827

LE83B:	MVI	C,0CH
	CALL	LE718
LE840:	CALL	LE5F5
	RZ
	MVI	C,0
	MVI	E,0CH
	CALL	LE801
	CALL	LE72D
	JR	LE840

LE851:	MVI	C,0FH
	CALL	LE718
	CALL	LE5F5
	RZ

LE85A:	CALL	GFCBEX
	MOV	A,M
	PUSH	PSW	
	PUSH	H
	CALL	LE55E
	XCHG 
	LHLD	PARM
	MVI	C,20H
	PUSH	D
	CALL	LE34F
	CALL	LE578
	POP	D
	LXI	H,0CH
	DAD	D
	MOV	C,M
	LXI	H,0FH
	DAD	D
	MOV	B,M
	POP	H
	POP	PSW	
	MOV	M,A
	MOV	A,C
	CMP	M
	MOV	A,B
	JRZ	LE88B
	MVI	A,0
	JRC	LE88B
	MVI	A,80H
LE88B:	LHLD	PARM
	LXI	D,0FH
	DAD	D
	MOV	M,A
	RET

LE894:	MOV	A,M
	INX	H
	ORA	M
	DCX	H
	RNZ
	LDAX	D
	MOV	M,A
	INX	D
	INX	H
	LDAX	D
	MOV	M,A
	DCX	D
	DCX	H
	RET

LE8A2:	XRA	A
	STA	IORSLT
	STA	LEDEA
	STA	LEDEB
	CALL	LE51E
	RNZ
	CALL	LE569
	ANI	80H
	RNZ
	MVI	C,0FH
	CALL	LE718
	CALL	LE5F5
	RZ
	LXI	B,10H
	CALL	LE55E
	DAD	B
	XCHG 
	LHLD	PARM
	DAD	B
	MVI	C,10H
LE8CD:	LDA	DSMFLG
	ORA	A
	JRZ	LE8E8
	MOV	A,M
	ORA	A
	LDAX	D
	JRNZ	LE8DB
	MOV	M,A
LE8DB:	ORA	A
	JRNZ	LE8E1
	MOV	A,M
	STAX	D
LE8E1:	CMP	M
	JRNZ	LE91F
	JR	LE8FD

LE8E8:	CALL	LE894
	XCHG 
	CALL	LE894
	XCHG 
	LDAX	D
	CMP	M
	JRNZ	LE91F
	INX	D
	INX	H
	LDAX	D
	CMP	M
	JRNZ	LE91F
	DCR	C
LE8FD:	INX	D
	INX	H
	DCR	C
	JRNZ	LE8CD
	LXI	B,0FFECH
	DAD	B
	XCHG 
	DAD	B
	LDAX	D
	CMP	M
	JRC	LE917
	MOV	M,A
	LXI	B,3
	DAD	B
	XCHG 
	DAD	B
	MOV	A,M
	STAX	D
LE917:	MVI	A,0FFH
	STA	LEDD2
	JMP	LE810
LE91F:	LXI	H,IORSLT
	DCR	M
	RET

LE924:	CALL	LE554
	LHLD	PARM
	PUSH	H
	LXI	H,LEDAC
	SHLD	PARM
	MVI	C,1
	CALL	LE718
	CALL	LE5F5
	POP	H
	SHLD	PARM
	RZ
	XCHG 
	LXI	H,0FH
	DAD	D
	MVI	C,11H
	XRA	A
LE946:	MOV	M,A
	INX	H
	DCR	C
	JRNZ	LE946
	LXI	H,0DH
	DAD	D
	MOV	M,A
	CALL	LE58C
	CALL	LE7FD
	JMP	LE578

LE95A:	XRA	A
	STA	LEDD2
	CALL	LE8A2
	CALL	LE5F5
	RZ
	LHLD	PARM
	LXI	B,0CH
	DAD	B
	MOV	A,M
	INR	A
	ANI	1FH
	MOV	M,A
	JRZ	LE983
	MOV	B,A
	LDA	EXM
	ANA	B
	LXI	H,LEDD2
	ANA	M
	JRZ	LE98E
	JR	LE9AC

LE983:	LXI	B,2
	DAD	B
	INR	M
	MOV	A,M
	ANI	0FH
	JRZ	LE9B6
LE98E:	MVI	C,0FH
	CALL	LE718
	CALL	LE5F5
	JRNZ	LE9AC
	LDA	LEDD3
	INR	A
	JRZ	LE9B6
	CALL	LE924
	CALL	LE5F5
	JRZ	LE9B6
	JR	LE9AF
LE9AC:	CALL	LE85A
LE9AF:	CALL	LE4BB
	XRA	A
	JMP	LE301

LE9B6:	CALL	LE305
	JMP	LE578

LE9BC:	MVI	A,1
	STA	LEDD5
LE9C1:	MVI	A,0FFH
	STA	LEDD3
	CALL	LE4BB
	LDA	FCBRC
	LXI	H,FCBCR
	CMP	M
	JRC	LE9E6
	CPI	80H
	JRNZ	LE9FB
	CALL	LE95A
	XRA	A
	STA	FCBRC
	LDA	IORSLT
	ORA	A
	JRNZ	LE9FB
LE9E6:	CALL	LE477
	CALL	LE484
	JRZ	LE9FB
	CALL	LE48A
	CALL	LE3D1
	CALL	LE3B2
	JMP	LE4D2
LE9FB:	JMP	LE305

LE9FE:	MVI	A,1
	STA	LEDD5
LEA03:	MVI	A,0
	STA	LEDD3
	CALL	LE554
	LHLD	PARM
	CALL	LE547
	CALL	LE4BB
	LDA	FCBRC
	CPI	80H
	JNC	LE305
	CALL	LE477
	CALL	LE484
	MVI	C,0
	JRNZ	LEA6E
	CALL	LE43E
	STA	LEDD7
	LXI	B,0
	ORA	A
	JRZ	LEA3B
	MOV	C,A
	DCX	B
	CALL	LE45E
	MOV	B,H
	MOV	C,L
LEA3B:	CALL	LE7BE
	MOV	A,L
	ORA	H
	JRNZ	LEA48
	MVI	A,2
	JMP	LE301

LEA48:	SHLD	LEDE5
	XCHG 
	LHLD	PARM
	LXI	B,10H
	DAD	B
	LDA	DSMFLG
	ORA	A
	LDA	LEDD7
	JRZ	LEA64
	CALL	LE564
	MOV	M,E
	JR	LEA6C
LEA64:	MOV	C,A
	MVI	B,0
	DAD	B
	DAD	B
	MOV	M,E
	INX	H
	MOV	M,D
LEA6C:	MVI	C,2
LEA6E:	LDA	IORSLT
	ORA	A
	RNZ
	PUSH	B
	CALL	LE48A
	LDA	LEDD5
	DCR	A
	DCR	A
	JRNZ	LEABB
	POP	B
	PUSH	B
	MOV	A,C
	DCR	A
	DCR	A
	JRNZ	LEABB
	PUSH	H
	LHLD	DIRBUF
	MOV	D,A
LEA8C:	MOV	M,A
	INX	H
	INR	D
	JP	LEA8C
	CALL	LE5E0
	LHLD	LEDE7
	MVI	C,2
LEA9A:	SHLD	LEDE5
	PUSH	B
	CALL	LE3D1
	POP	B
	CALL	LE3B8
	LHLD	LEDE5
	MVI	C,0
	LDA	BLM
	MOV	B,A
	ANA	L
	CMP	B
	INX	H
	JRNZ	LEA9A
	POP	H
	SHLD	LEDE5
	CALL	LE5DA
LEABB:	CALL	LE3D1
	POP	B
	PUSH	B
	CALL	LE3B8
	POP	B
	LDA	FCBRC
	LXI	H,FCBCR
	CMP	M
	JRC	LEAD2
	MOV	M,A
	INR	M
	MVI	C,2
LEAD2:	NOP
	NOP
	LXI	H,CEDOS
	PUSH	PSW	
	CALL	LE569
	ANI	7FH
	MOV	M,A
	POP	PSW	
	CPI	7FH
	JRNZ	LEB00
	LDA	LEDD5
	CPI	1
	JRNZ	LEB00
	CALL	LE4D2
	CALL	LE95A
	LXI	H,IORSLT
	MOV	A,M
	ORA	A
	JRNZ	LEAFE
	DCR	A
	STA	FCBRC
LEAFE:	MVI	M,0
LEB00:	JMP	LE4D2

LEB03:	XRA	A
	STA	LEDD5
LEB07:	PUSH	B
	LHLD	PARM
	XCHG 
	LXI	H,21H
	DAD	D
	MOV	A,M
	ANI	7FH
	PUSH	PSW	
	MOV	A,M
	RAL	
	INX	H
	MOV	A,M
	RAL	
	ANI	1FH
	MOV	C,A
	MOV	A,M
	RAR	
	RAR	
	RAR	
	RAR	
	ANI	0FH
	MOV	B,A
	POP	PSW	
	INX	H
	MOV	L,M
	INR	L
	DCR	L
	MVI	L,6
	JRNZ	LEB8B
	LXI	H,20H
	DAD	D
	MOV	M,A
	LXI	H,0CH
	DAD	D
	MOV	A,C
	SUB	M
	JRNZ	LEB47
	LXI	H,0EH
	DAD	D
	MOV	A,B
	SUB	M
	ANI	7FH
	JRZ	LEB7F
LEB47:	PUSH	B
	PUSH	D
	CALL	LE8A2
	POP	D
	POP	B
	MVI	L,3
	LDA	IORSLT
	INR	A
	JRZ	LEB84
	LXI	H,0CH
	DAD	D
	MOV	M,C
	LXI	H,0EH
	DAD	D
	MOV	M,B
	CALL	LE851
	LDA	IORSLT
	INR	A
	JRNZ	LEB7F
	POP	B
	PUSH	B
	MVI	L,4
	INR	C
	JRZ	LEB84
	CALL	LE924
	MVI	L,5
	LDA	IORSLT
	INR	A
	JRZ	LEB84
LEB7F:	POP	B
	XRA	A
	JMP	LE301
LEB84:	PUSH	H
	CALL	LE569
	MVI	M,0C0H
	POP	H
LEB8B:	POP	B
	MOV	A,L
	STA	IORSLT
	JMP	LE578

LEB93:	MVI	C,0FFH
	CALL	LEB03
	CZ	LE9C1
	RET

LEB9C:	MVI	C,0
	CALL	LEB03
	CZ	LEA03
	RET

LEBA5:	XCHG 
	DAD	D
	MOV	C,M
	MVI	B,0
	LXI	H,0CH
	DAD	D
	MOV	A,M
	RRC	
	ANI	80H
	ADD	C
	MOV	C,A
	MVI	A,0
	ADC	B
	MOV	B,A
	MOV	A,M
	RRC	
	ANI	0FH
	ADD	B
	MOV	B,A
	LXI	H,0EH
	DAD	D
	MOV	A,M
	ADD	A
	ADD	A
	ADD	A
	ADD	A
	PUSH	PSW	
	ADD	B
	MOV	B,A
	PUSH	PSW	
	POP	H
	MOV	A,L
	POP	H
	ORA	L
	ANI	1
	RET

LEBD2:	MVI	C,0CH
	CALL	LE718
	LHLD	PARM
	LXI	D,21H
	DAD	D
	PUSH	H
	MOV	M,D
	INX	H
	MOV	M,D
	INX	H
	MOV	M,D
LEBE4:	CALL	LE5F5
	JRZ	LEC0C
	CALL	LE55E
	LXI	D,0FH
	CALL	LEBA5
	POP	H
	PUSH	H
	MOV	E,A
	MOV	A,C
	SUB	M
	INX	H
	MOV	A,B
	SBB	M
	INX	H
	MOV	A,E
	SBB	M
	JRC	LEC06
	MOV	M,E
	DCX	H
	MOV	M,B
	DCX	H
	MOV	M,C
LEC06:	CALL	LE72D
	JR	LEBE4
LEC0C:	POP	H
	RET

SRAND:	LHLD	PARM
	LXI	D,20H
	CALL	LEBA5
	LXI	H,21H
	DAD	D
	MOV	M,C
	INX	H
	MOV	M,B
	INX	H
	MOV	M,A
	RET

SLCERR:	LDA	LSTDSK
	MOV	M,A		; NO NEW DRIVE
	LXI	B,SSLCER
	JMP	LE1D3

LEC21:	LXI	H,CDSK
	MOV	A,M
	CPI	MAXDSK
	CNC	SLCERR
	LHLD	LEDAF
	LDA	CDSK
	MOV	C,A
	CALL	LE4EA
	PUSH	H
	XCHG 
	CALL	LE359
	POP	H
	MOV	A,L
	RAR	
	RC	
	LHLD	LEDAF
	MOV	C,L
	MOV	B,H
	CALL	LE50B
	SHLD	LEDAF
	JMP	LE6A3

SCTDSK:	LDA	CDSK
	STA	LSTDSK
	LDA	PARMLW
	LXI	H,CDSK
	CMP	M
	RZ
	MOV	M,A
	JR	LEC21

LEC51:	MVI	A,0FFH
	STA	LEDDE
	LHLD	PARM
	MOV	A,M
	ANI	1FH
	DCR	A
	STA	PARMLW
	CPI	1EH
	JRNC	LEC75
	LDA	CDSK
	STA	LEDDF
	MOV	A,M
	STA	LEDE0
	ANI	0E0H
	MOV	M,A
	CALL	SCTDSK

LEC75:	LDA	LE341
	LHLD	PARM
	ORA	M
	MOV	M,A
	RET

RETVER:	MVI	A,22H
	JMP	LE301

RESDSK:	LXI	H,0
	SHLD	LEDAD
	SHLD	LEDAF
	XRA	A
	STA	CDSK
	LXI	H,80H
	SHLD	DMAADR
	CALL	LE5DA
	JMP	LEC21

OPFIL:	CALL	LE572
	CALL	LEC51
	JMP	LE851

CLSFIL:	CALL	LEC51
	JMP	LE8A2

SFRST:	MVI	C,0
	XCHG 
	MOV	A,M
	CPI	3FH
	JRZ	LECC2
	CALL	GFCBEX
	MOV	A,M
	CPI	3FH
	CNZ	LE572
	CALL	LEC51
	MVI	C,0FH
LECC2:	CALL	LE718
	JMP	LE5E9

SNEXT:	LHLD	LEDD9
	SHLD	PARM
	CALL	LEC51
	CALL	LE72D
	JMP	LE5E9

DLTFIL:	CALL	LEC51
	CALL	LE79C
	JMP	LE701

RDSEQ:	CALL	LEC51
	JMP	LE9BC

WRSEQ:	CALL	LEC51
	JMP	LE9FE

MAKFIL:	CALL	LE572
	CALL	LEC51
	JMP	LE924

RENFIL:	CALL	LEC51
	CALL	LE816
	JMP	LE701

LOGVEC:	LHLD	LEDAF
	JR	LED29

CURDSK:	LDA	CDSK
	JMP	LE301

STDMA:	XCHG 
	SHLD	DMAADR
	JMP	LE5DA

GALLOC:	LHLD	ALV
	JR	LED29

GROVEC:	LHLD	LEDAD
	JR	LED29

SFATB:	CALL	LEC51
	CALL	LE83B
	JMP	LE701

GDPB:	LHLD	DPB
LED29:	SHLD	IORSLT
	RET

SGUSER:	LDA	PARMLW
	CPI	0FFH
	JRNZ	LED3B
	LDA	LE341
	JMP	LE301
LED3B:	ANI	1FH
	STA	LE341
	RET

RDRAND:	CALL	LEC51
	JMP	LEB93

WRRAND:	CALL	LEC51
	JMP	LEB9C

FILSIZ:	CALL	LEC51
	JMP	LEBD2

RSTDRV:	LHLD	PARM
	MOV	A,L
	CMA	
	MOV	E,A
	MOV	A,H
	CMA	
	LHLD	LEDAF
	ANA	H
	MOV	D,A
	MOV	A,L
	ANA	E
	MOV	E,A
	LHLD	LEDAD
	XCHG 
	SHLD	LEDAF
	MOV	A,L
	ANA	E
	MOV	L,A
	MOV	A,H
	ANA	D
	MOV	H,A
	SHLD	LEDAD
	RET

LED74:	LDA	LEDDE
	ORA	A
	JRZ	LED91
	LHLD	PARM
	MVI	M,0
	LDA	LEDE0
	ORA	A
	JRZ	LED91
	MOV	M,A
	LDA	LEDDF
	STA	PARMLW
	CALL	SCTDSK
LED91:	LSPD	SAVSP
	LHLD	IORSLT
	MOV	A,L
	MOV	B,H
	RET

WZRAND:	CALL	LEC51
	MVI	A,2
	STA	LEDD5
	MVI	C,0
	CALL	LEB07
	CZ	LEA03
	RET

LEDAC:	DB	0E5H
LEDAD:	NOP
LEDAE:	NOP
LEDAF:	NOP
LEDB0:	NOP
DMAADR:	DW	80H
SCR1PT:	DW	0
SCR2PT:	DW	0
SCR3PT:	DW	0
DIRBUF:	DW	0
DPB:	DW	0
CSV:	DW	0
ALV:	DW	0
SPT:	DW	0
BSH:	DB	0
BLM:	DB	0
EXM:	DB	0
DSM:	DW	0
DRM:	DW	0
AL1AL0:	DW	0
CKS:	DW	0
OFFSET:	DW	0
XLTADD:	DW	0

LEDD2:	NOP
LEDD3:	NOP
LEDD4:	NOP
LEDD5:	NOP
PARMLW:	DB	0
LEDD7:	NOP
LEDD8:	NOP
LEDD9:	NOP
LEDDA:	NOP
LEDDB:	NOP
LEDDC:	NOP
DSMFLG:	NOP
LEDDE:	NOP
LEDDF:	NOP
LEDE0:	NOP
FCBCR:	NOP
MSKEXN:	NOP

FCBRC:	DW	0

LEDE5:	DW	0

LEDE7:	DW	0

LEDE9:	NOP
LEDEA:	NOP
LEDEB:	NOP
LEDEC:	NOP
	NOP
	NOP
	NOP

EDSTKSIZ	EQU	CEDOS+1600H-$

	ORG	CEDOS+1600H	; EDOS STACK SPACE
EDOSTK:	

	END
«eof»