.IDENT	SPECI
;
	.LOC	100H
;
START:	IN	20H
	ANI	10H
	JNZ	XXC
	CALL	CRLF
	LXI	D,ERRTXT
	CALL	STROUT
	CALL	CRLF
	JMP	0
;
DECIN:	CALL	STROUT
	PUSH	D
	MVI	C,10
	LXI	D,80H
	MVI	A,2
	STAX	D
	CALL	5
	LXI	H,81H
	MOV	A,M
	ANA	A
	JNZ	..DEC1
..DEC2:	MVI	C,2
	MVI	E,7
	CALL	5
	POP	D
	JMP	DECIN
..DEC1:	MVI	C,0
	CPI	1
	JZ	..DEC
	INX	H
	MOV	A,M
	CPI	30H
	JC	..DEC2
	CPI	3AH
	JNC	..DEC2
	ANI	0FH
	ADD	A
	MOV	C,A
	ADD	A
	ADD	A
	ADD	C
	MOV	C,A
..DEC:	INX	H
	MOV	A,M
	CPI	30H
	JC	..DEC2
	CPI	3AH
	JNC	..DEC2
	ANI	0FH
	ADD	C
	POP	D
	RET
;
CRLF:	PUSH	H
	PUSH	D
	PUSH	B
	PUSH	PSW
	MVI	C,2
	MVI	E,0DH
	CALL	5
	MVI	C,2
	MVI	E,0AH
	CALL	5
	POP	PSW
	POP	B
	POP	D
	POP	H
	RET
;
STROUT:	PUSH	PSW
	PUSH	B
	PUSH	D
	PUSH	H
	MVI	C,9
	CALL	5
	POP	H
	POP	D
	POP	B
	POP	PSW
	RET
;
XXC:	MVI	A,50
	STA	GAPLEN
	MVI	A,80
	STA	TRACKS
	MVI	A,3
	STA	SECSIZ
	MVI	A,4
	STA	BLKSIZ
	MVI	A,4
	STA	DIRSIZ
	MVI	A,0
	STA	RESRVD
	MVI	A,1
	STA	SKEW
	MVI	A,5
	STA	SPTRAK
	MVI	A,1
	STA	SIDES
	MVI	A,1
	STA	DENS
..L:	CALL	CRLF
	LXI	D,SPCTXT	; EINGABE SPEZIFIKATIONEN
	CALL	STROUT
	CALL	CRLF
	CALL	CRLF
	CALL	CRLF
..C14:	LXI	D,DENTXT	; DENSITY EINGEBEN
	CALL	DECIN
	MOV	C,A
	ANI	0FEH
	ANA	A
	JZ	..F
	MVI	C,2
	MVI	E,7
	JMP	..C14
..F:	MOV	A,C
	ANI	1
	STA	DENS
..C15:	CALL	CRLF
	CALL	CRLF
	LXI	D,TRKTXT	; TRACKDICHTE EINGEBEN
	CALL	DECIN
	STA	TRACKS
..C18:	CALL	CRLF
	CALL	CRLF
	LXI	D,SIDTXT	; SINGLE- ODER DOUBLE-SIDED
	CALL	DECIN
	MOV	C,A
	ANI	0FEH
	JZ	..J
	MVI	C,2
	MVI	E,7
	CALL	5
	CALL	CRLF
	JMP	..C18
..J:	MOV	A,C
	STA	SIDES 
..C16:	CALL	CRLF
	CALL	CRLF
	LXI	D,SECTXT	; SEKTORGR\SSE EINGEBEN
	CALL	DECIN
	MOV	C,A
	ANI	0FCH
	JZ	..H
	MVI	C,2
	MVI	E,7
	CALL	5
	CALL	CRLF
	JMP	..C16
..H:	MOV	A,C
	ANI	3
	STA	SECSIZ
	CALL	CRLF
	CALL	CRLF
	LXI	D,SECTRK	; SEKTOREN PRO SPUR
	CALL	DECIN
	STA	SPTRAK
	CALL	CRLF
	CALL	CRLF
..C21:	LXI	D,BLKTXT	; BLOCKGR\SSE EINGEBEN
	CALL	DECIN
	STA	BLKSIZ
	CALL	CRLF
	CALL	CRLF
..C22:	LXI	D,DIRTXT	; ANZAHL DIRECTORY-BL\CKE
	CALL	DECIN
	STA	DIRSIZ
	CALL	CRLF
	CALL	CRLF
..C23:	LXI	D,RESTXT	; ANZAHL RESERVIERTE SPUREN
	CALL	DECIN
	STA	RESRVD
	CALL	CRLF
	CALL	CRLF
..C24:	LXI	D,SKWTXT	; SKEW-FAKTOR
	CALL	DECIN
	STA	SKEW
	CALL	CRLF
	CALL	CRLF
	LXI	D,GAPTXT	; GAP-L[NGE
	CALL	DECIN
	STA	GAPLEN
	CALL	CRLF
..E:	CALL	CRLF
	LXI	D,OKTXT	; ANGABEN KORREKT?
	CALL	DECIN
	CPI	1
	JNZ	..L
	CALL	CRLF
..K1:	CALL	CRLF
..K:	MVI	C,26
	LDA	DRIVE
	MOV	E,A
	MVI	D,80H
	LDA	BLKSIZ
	STA	FORMAT
	LXI	H,0
	LDA	SIDES
	MOV	C,A
	LDA	TRACKS
	MOV	E,A
	MVI	D,0
..C39:	LDA	SPTRAK
	MOV	B,A
..C33:	DAD	D
	DJNZ	..C33
	DCR	C
	JP	..C39
	LDA	SECSIZ
	MOV	C,A
	LDA	BLKSIZ
	SUB	C
	MOV	B,A
	JRZ	..C32
..C31:	SRLR	H
	RARR	L
	DJNZ	..C31
..C32:	SHLD	FORMAT+1
	LDA	DIRSIZ
	STA	FORMAT+3
	LDA	SECSIZ
	STA	FORMAT+4
	LDA	SIDES
	MOV	C,A
	LDA	SPTRAK
	DCR	C
	JM	..C49
	ADD	A
..C49:	MOV	L,A
	MVI	H,0
	SHLD	FORMAT+5
	LDA	TRACKS
	MOV	L,A
	MVI	H,0
	SHLD	FORMAT+7
	LDA	RESRVD
	MOV	L,A
	MVI	H,0
	SHLD	FORMAT+9
	LDA	SKEW
	CPI	2
	LXI	H,0
	JC	..C35
	LXI	H,TRATAB
..C35:	SHLD	FORMAT+11
	MVI	C,30H
	LDA	TRACKS
	CPI	80
	MVI	A,40H
	JNZ	..C36
	MVI	A,0
..C36:	ORA	C
	MOV	C,A
	LDA	DENS
	ADD	A
	ADD	A
	ADD	A
	ORA	C
	MOV	C,A
	LDA	SIDES
	ADD	A
	ADD	A
	ORA	C
	MOV	C,A
	LDA	SECSIZ
	ORA	C
	STA	FORMAT+13
	LDA	GAPLEN
	STA	FORMAT+14
	LDA	SKEW
	CPI	2
	JC	..C44
	LDA	SPTRAK
..C41:	MOV	B,A
	LDA	SKEW
	MOV	C,A
	LDA	SPTRAK
	MOV	E,A
	LDA	SIDES
	MOV	D,A
	LXI	H,TRATAB
	MVI	A,0
..C42:	MOV	M,A
 	INX	H
	DCR	E
	JZ	..C43
	ADD	C
	CMP	B
	JC	..C42
	PUSH	B
	MOV	B,A
	LDA	SPTRAK
	NEG
	ADD	B
	POP	B
	JMPR	..C42
..C43:	DCR	D
	JM	..C44
	LDA	SPTRAK
	MOV	E,A
	MOV	A,B 
	SLAR	B
	JMPR	..C42
..C44:	MVI	C,22
	LXI	D,FUNC
	CALL	50H
	CALL	CRLF
	ANA	A
	JNZ	..C60
	LXI	D,ENDTXT
	CALL	STROUT
	CALL	CRLF
	JMP	0
..C60:	LXI	D,FEHTXT
	CALL	STROUT
	CALL	CRLF
	JMP	0


ERRTXT:	.BYTE	0DH,0AH
	.ASCII	'Programm nicht auf Master ausgef}hrt '
	.BYTE	0DH,0AH,0AH,24H
GAPLEN:	.BYTE	0
TRACKS:	.BYTE	0
SECSIZ:	.BYTE	0
SPTRAK:	.BYTE	0
SIDES:	.BYTE	0
DENS:	.BYTE	0
DRIVE:	.BYTE	0
SKEW:	.BYTE	1
RESRVD:	.BYTE	0
BLKSIZ:	.BYTE	0
DIRSIZ:	.BYTE	0
SPCTXT:	.BYTE	0DH,0AH
	.ASCII	'Bitte geben Sie nun die FORMAT-Spezifikationen ein:'
	.BYTE	0DH,0AH,24H
DENTXT:	.ASCII	'Schreibdichte       (einfache S. = 0 , doppelte S.  = 1): $'
TRKTXT:	.ASCII	'Anzahl der Zylinder auf der Diskette (  Standard = 80  ): $'
SIDTXT:	.ASCII	'Formatierung        (einseitig   = 0 , doppelseitig = 1): $'
SECTXT:	.ASCII	'Sektorgr|~e (Bytes) ( 0=128,   1=256,   2=512,   3=1024): $'
SECTRK:	.ASCII	'Anzahl der Sektoren pro Spur                            : $'
BLKTXT:	.ASCII	'Blockgr|~e          ( 3=1024,  4=2048,  5=4096,  6=8192): $'
DIRTXT:	.ASCII	'Anzahl der Directory-Bl|cke                             : $'
SKWTXT:	.ASCII	'Skewing-Faktor                                          : $'
RESTXT:	.ASCII	'Anzahl der reservierten Zylinder                        : $'
GAPTXT:	.ASCII	'Gap-L{nge (Standard = 50)                               : $'
OKTXT:	.ASCII	'Sind diese Angaben korrekt (Ja=1, Nein=0)               ? $'
ENDTXT:	.ASCII	'Disk-Format-Tabelle angelegt. $'
FEHTXT:	.ASCII	'Anlegen der Disk-Format-Tabelle nicht m|glich $'	
PDR:	.BLKB	16
DST:	.BLKB	16
BUFFER:	.BLKB	1024
FUNC:	.BYTE	5
	.BYTE	1 
	.WORD	0
	.WORD	0
	.WORD	0
	.WORD	0
	.WORD	0
	.WORD	FORMAT
FORMAT:	.BYTE	0
	.WORD	0
	.BYTE	0
	.BYTE	0
	.WORD	0
	.WORD	0
	.WORD	0
	.WORD	0
	.BYTE	0
	.BYTE	0
TRATAB:	.BLKB	80
;
.END
