;	disassembly of ENTRY.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 

;	ORG	3C5Dh	for reference only. this is a relocatable module

;	disassembly of ENTRY.SYS for Imsai IMDOS V2.05
;	last edit: 11/30/14

	EXTRN	TSTPC,LISTCO,LSTOUT,CONOUT,CALLNO,SLDISK,STAT,COPYHL
	EXTRN	DSKEX1,IOBYTE,DISMOU,BTSTCK,SVINFO,TEMP,OPTION,PMESS
	EXTRN	BDOS,MAXFUN,TABLE,INFO,SELECT

	PUBLIC	CONCHA,DKWAIT,DISINT,UQUEIO,DSASR,ENASR,NOTIMP
	PUBLIC	GTIOB,STIOB,PDEV,ABORT,WBOOT0,BDOSEN,BDOSRE,STSIZE
	PUBLIC	TASKSP,CRBLCK,IOBLOC

; entry module

	CSEG
 	 	
CONCHA:	PUSH	B
	PUSH	D
	PUSH	H
	CALL	H3CBE
	LXI 	D,H3D97
	DAD 	H
	JC 	H3CBA
	MOV 	A,C
	ANI 	7Fh
	DAD 	H
	JC 	H3C84
	CPI 	09h
	JNZ	H3C89
H3C76:	MVI 	C,20h
	CALL	CONCHA
	LDAX	D
	ANI 	07h
	JNZ	H3C76
	JMP 	H3CBA
H3C84:	CPI 	08h
	JZ 	H3C96
H3C89:	DAD 	H
	CMC 	
	CC 	TSTPC
	PUSH	PSW
	MVI 	C,5Eh
	CC 	CONCHA
	POP 	PSW
	MOV 	C,A
H3C96:	XCHG	
	CPI 	08h
	JNZ	H3C9D
	DCR 	M
H3C9D:	CPI 	0Dh
	JNZ	H3CA4
	MVI 	M,00h
H3CA4:	INR 	A
	JM 	H3CBA
	SBI 	21h
	JC 	H3CAE
	INR 	M
H3CAE:	PUSH	B
	LDA 	LISTCO
	ORA 	A
	CNZ	LSTOUT
	POP 	B
	CALL	CONOUT
H3CBA:	POP 	H
	POP 	D
	POP 	B
	RET 	
H3CBE:	LHLD	CALLNO
	XCHG	
	MOV 	A,E
	RLC 	
	MVI 	H,00h
	CPI 	16h
	RNC	
	MVI 	H,20h
	CPI 	04h
	RZ 	
	CPI 	12h
	RZ 	
	DAD 	H
	CPI 	14h
	RZ 	
	MOV 	H,D
	RET 	
DKWAIT:	MOV 	A,M
	ORA 	A
	JZ 	DKWAIT
	RET 	
DISINT:	DI  	
	RET

;bdos function# 40 vectored here
 	
UQUEIO:	INX 	H
	INX 	H
	INX 	H
	INX 	H
	MOV 	E,M
	INX 	H
	MOV 	D,M
	XCHG	
	MOV 	C,M
	INX 	H
	CALL	SLDISK
	RM 	
	MOV 	C,M
	INX 	H
	MVI 	B,06h
	LXI 	D,STAT
	CALL	COPYHL
	PUSH	B
	MOV 	B,C
	JMP 	DSKEX1

; these functions not implemented

DSASR:
ENASR:
NOTIMP:	MVI 	A,0F8h
	ORA 	A
	RET
 	
GTIOB:	LDA 	IOBYTE		;get iobyte
	RET 	
STIOB:	MOV 	A,C		;store iobyte
	STA 	IOBYTE
PDEV:	RET 	
ABORT:	CALL	DISMOU
WBOOT0:	LXI 	H,BTSTCK
	SPHL	
	MVI 	C,00h
BDOSEN:	SHLD	H3D98
	LXI 	H,0000h
	DAD 	SP
	SHLD	TASKSP
	LXI 	SP,CONCHA
	PUSH	D
	PUSH	B
	MOV 	A,C
	CPI 	12h
	JNZ	H3D2B
	LHLD	SVINFO
	XCHG	
H3D2B:	ADD 	A
	JC 	H3D31
	MVI 	B,00h
H3D31:	CALL	BDOSRE
	CM 	H3D4A
	POP 	B
	JNC	H3D41
	LHLD	TEMP
	MOV 	B,H
	MOV 	C,L
	MOV 	A,C
H3D41:	POP 	D
	LHLD	TASKSP
	SPHL	
	LHLD	H3D98
	RET 	
H3D4A:	STC 	
	CMC 	
	PUSH	PSW
	CALL	H3D52
	POP 	PSW
	RET 	
H3D52:	MOV 	C,A
	INR 	A
	RP 	
	LDA 	OPTION		;error control options = 10h if no options
	RRC 	
	RC 	
	PUSH	PSW
	CALL	PMESS
	POP 	PSW
	RRC 	
	JNC	ABORT
	RET 	
BDOSRE:	MOV 	H,B
	MOV 	L,C
	SHLD	CALLNO
	DAD 	H
	MVI 	H,00h
	LDA 	MAXFUN
	CMP 	L
	RAR 	
	MVI 	A,0F8h
	RM 	
	LXI 	B,TABLE
	DAD 	B
	MOV 	C,M
	INX 	H
	MOV 	A,M
	ANI 	3Fh
	MOV 	B,A
	MOV 	A,M
	LXI 	H,BDOS
	DAD 	B
	PUSH	H
	XCHG	
	SHLD	INFO
	MOV 	B,H
	MOV 	C,L
	ANI 	40h
	RZ 	
	MOV 	C,M
	PUSH	H
	CALL	SELECT
	POP	H
	RP
	POP	B
	RET
STSIZE:	DB 00h
H3D97:	DB 00h
H3D98:	DB 00h,00h
TASKSP:	DB 00h,00h 	
CRBLCK:	DB 00h,00h 	 	
IOBLOC:	DB 00h,00h

END
