;	disassembly of DDENS.SYS for Imsai IMDOS V2.05
;	address labels with Hnnnn are based on a system with 16k of memory.
;	named labels are the actual labels from the relocatable object file.
;	this module has not been studied or tested for lack of DIO/PDS information.

;	ORG	3DA0h	for reference only. this is a relocatable module

; last edit: 11/30/14

EXTRN	TRK,CMD0,SELDSK,STAT,ADDTB,USELST,SLDISK,COPYHL
EXTRN	CMD,SYSDDB,SUBBC,DSKEX1,BCMD,WTFLAG,SUBDE,BLKMSK
EXTRN	DIV8L,SUBBC,CMDSTR

PUBLIC	DDINIT,DDDISK,CMD1,CUDISK,FRBUFF,GETOFF

DDDISK:

;double density disk driver (DIO/PDS) called from bdos here
;then jumps back into bdos at DSKEX1 

	LDA 	TRK
	ORA 	A
	MVI 	A,0F6h
H3DA6:	RM	
	PUSH	B
	CALL	H3DC3
	JZ 	H3DB7
	CALL	H3DEB
	CALL	H3E10
	CP 	H3E96
H3DB7:	POP 	B
	CP 	H3EA8
	LXI 	H,CMD0
H3DBE:	SHLD	CMDSTR
	POP 	B
	RET 	
H3DC3:	LDA	SELDSK 	
	STA 	STAT
	LHLD	ADDTB
	MVI 	B,00h
H3DCE:	MOV 	A,M
	ORA 	A
	RM 	
	PUSH	H
	LXI 	D,STAT
	MVI 	C,05h
H3DD7:	DCR 	C
	JZ 	H3DFE
	LDAX	D
	CMP 	M
	INX 	D
	INX 	H
	JZ 	H3DD7
	POP 	H
	LXI 	D,0006h
	DAD 	D
	INR 	B
	JMP 	H3DCE
H3DEB:	LHLD	ADDTB
	DCX 	H
	MOV 	B,M
	MOV 	A,B
	ADD 	A
	MOV 	E,A
	MVI 	D,00h
	INX 	H
	DAD 	D
	DAD 	D
	DAD 	D
	PUSH	H
	INX 	H
	INX 	H
	INX 	H
	INX 	H
H3DFE:	MOV 	E,M
	INX 	H
	MOV 	D,M
	LHLD	USELST
	MOV 	C,B
H3E05:	MOV 	A,M
	MOV 	M,C
	MOV 	C,A
	INX 	H
	CMP 	B
	JNZ	H3E05
	XCHG	
	POP 	D
	RET 	
H3E10:	LDAX	D
	ORA 	A
	RZ 	
	DCX 	H
	MOV 	A,M
	INX 	H
	ORA 	A
	RP 	
	PUSH	H
	PUSH	D
	LDA 	SELDSK
	MOV 	C,A
	PUSH	B
	CALL	H3E2C
	CP 	H3E84
	POP 	B
	CP 	SLDISK
	POP 	D
	POP 	H
	RET 	
H3E2C:	PUSH	H
	LXI 	H,H3F93
	SHLD	CMDSTR
	XCHG	
	MOV 	C,M
	MVI 	B,06h
	INX 	D
	INX 	D
	CALL	COPYHL
	CALL	SLDISK
	LDA 	CMD
	STA 	CMD1
	POP 	D
	RM 	
	CALL	H3F0D
	XCHG	
	DCX 	H
	MOV 	A,M
	ANI 	7Fh
	MOV 	B,A
	SUB 	M
	ORA 	D
	MOV 	M,A
	DCX 	H
	MOV 	C,M
	MOV 	M,E
	MOV 	A,B
	ORA 	C
	JZ 	H3E8F
	INX 	H
	INX 	H
	PUSH	H
	DAD 	B
	PUSH	H
	LHLD	SYSDDB
	SHLD	H3F99
	DAD 	B
	PUSH	H
	XCHG	
	CALL	SUBBC
	PUSH	H
	CNZ	H3E8F
	POP 	B
	POP 	H
	POP 	D
	XTHL	
	SHLD	H3F99
	POP 	H
	RM 	
H3E79:	MOV 	A,B
	ORA 	C
	RZ 	
	DCX 	B
	MOV 	A,M
	STAX	D
	INX 	D
	INX 	H
	JMP 	H3E79
H3E84:	LHLD	H3F99
	DCX 	H
	MOV 	A,M
	ANI 	7Fh
	MOV 	M,A
	MVI 	A,10h		;write sector
	DB	21h		;skip next instruction
H3E8F:	MVI	A,20h		;write sector
	PUSH	B
	MOV 	B,A
	JMP 	DSKEX1		;hook back into bdos

H3E96:	PUSH	H
	PUSH	D
	XRA 	A
	DCX 	H
	MOV 	M,A
	DCX 	H
	MOV 	M,A
	LXI 	H,STAT
	MVI 	B,04h
	CALL	COPYHL
	POP 	D
	POP 	H
	RET 	
H3EA8:	MOV 	A,B
	CPI 	20h
	JC 	H3EC1
	PUSH	H
	CALL	H3E2C
	LHLD	BCMD
	XCHG	
	LHLD	H3F9B
	POP 	B
	DAD 	B
H3EBB:	MVI 	B,80h
	CP 	COPYHL
	RET 	
H3EC1:	PUSH	D
	PUSH	H
	DCX 	H
	MOV 	A,M
	ANI 	7Fh
	MOV 	B,A
	DCX 	H
	MOV 	C,M
	LHLD	H3F9B
	PUSH	B
	XTHL	
	POP 	B
	CALL	SUBBC
	RAR 	
	LXI 	H,8080h
	DAD 	B
	XTHL	
	PUSH	H
	PUSH	H
	DAD 	B
	XTHL	
	ORA 	A
	CM 	H3E2C
	POP 	D
	LHLD	BCMD
	CP 	H3EBB
	POP 	H
	POP 	B
	POP 	D
	RM 	
	PUSH	H
	CALL	H3F18
	POP 	H
	PUSH	H
	DCX 	H
	MOV 	A,M
	ANI 	7Fh
	MOV 	B,A
	DCX 	H
	MOV 	C,M
	CALL	H3F0D
	CALL	SUBBC
	DCR 	A
	LXI 	H,WTFLAG
	ORA 	M
	MVI 	M,00h
	POP 	H
	INR 	A
	JZ 	H3E10
	XRA 	A
	RET 	
H3F0D:	LDA 	CMD1+2
	LXI 	H,0100h
	RLC 	
	RNC	
	MVI 	H,04h
	RET 	
H3F18:	DCX 	H
	MOV 	A,M
	ORI 	80h
	MOV 	M,A
	CMP 	B
	JZ 	H3F26
	RNC	
	MOV 	M,B
	DCX 	H
	MOV 	M,C
	RET 	
H3F26:	DCX 	H
	MOV 	A,M
	CMP 	C
	RNC	
	MOV 	M,C
	RET 	
GETOFF:	XCHG	
	CALL	SUBDE
	JC 	H3F56
	LXI 	D,0000h
	LDA 	BLKMSK
	MOV 	B,A
	ANA 	L
	RAR 	
	MOV 	D,A
	MOV 	A,E
	RAR 	
	MOV 	E,A
	MOV 	A,B
	MVI 	C,0FFh
H3F43:	INR 	C
	RAR 	
	JC 	H3F43
	CNZ	DIV8L
	XCHG	
	SHLD	H3F9B
	POP 	H
	CALL	H3F55
	INX 	H
	RET 	
H3F55:	PCHL	
H3F56:	DAD 	D
	XCHG	
	LXI 	H,0000h
	POP 	B
	RET 	
CUDISK:	LHLD	ADDTB
H3F60:	MOV 	A,M
	INR 	A
	RZ 	
	LDA 	SELDSK
	CMP 	M
	CZ 	H3F71
	LXI 	D,0006h
	DAD 	D
	JMP 	H3F60
H3F71:	PUSH	H
	INX 	H
	INX 	H
	INX 	H
	INX 	H
	MOV 	E,M
	INX 	H
	MOV 	D,M
	POP 	H
	XCHG	
	CALL	H3E10
	XCHG	
	RET 	
FRBUFF:	LHLD	ADDTB
H3F83:	MOV 	A,M
	INR 	A
	RZ 	
	DCR 	A
	SUB 	C
	JNZ	H3F8C
	MOV 	M,A
H3F8C:	LXI 	D,0006h
	DAD 	D
	JMP 	H3F83

H3F93:	DB 01h
DDINIT:
CMD1:	LXI	H,SYSDDB
	INX	H
	MOV 	C,M
H3F99:	INX 	H
	INX 	H
H3F9B:	MOV 	A,M
	SUB 	C
	DCR 	A
	RZ 	
	XRA 	A
	STA 	H3DA6
	RET

	END
