;
; P.  CHANGE DISK FORMAT
;
CHDISK	DB	'Drive, new density:',0
	JSR	GETDN	;GET DRIVE NO.
	LDA	DELIM
	CMP	#$9B	;DRIVE NUMBER ONLY?
	BNE	CHDSK2	;IF SO, CHANGE DEFAULT
BADPCMD	JSR	ERRXIT
	DB	'Drive unchanged.',$9B,0
CHDSK2	LDY	PTR
	LDA	(FNPTR),Y
	TAX
	LDY	#1
	LDA	(FNPTR),Y
	CMP	#'9'
	BCS	BADPCMD
	SBC	#'1'-1
	BCC	BADPCMD
	TAY
	INY
	STY	UNNO
	LDA	#1
	CPX	#'S'
	BEQ	TOSGL
	CPX	#'D'
	BNE	BADPCMD
	ASL	A
TOSGL	STA	DKTYPE-1,Y
	JSR	DOFSIN
	JMP	SHMEN	;THEN SHOW CHANGED MENU
;
; O.  CONFIGURE SYSTEM OR DISK DRIVE
;
CKBANKS	SEI			;was CHKBANKS
	LDY	#0		;This is BOB code...
	STY	$D40E		;uncommented as
	STY	$D20E		;per usual...
	LDA	$D301
	PHA			;We validate the memory mapping ability
	LDX	#$FF		;of the box we are running in?
CKBL1	STY	$D301		;[Don't really understand this, but
	LDA	$4000		; thats OK, for now, ChasM]
	STA	MAPBUF,Y	;[Bob Puff]
	STX	$4000
	TXA
	sta	MAPBUF+256,Y
	INY
	BNE	CKBL1
	DEX
	STX	$D301
	STX	0
	STX	$4000
	STX	$8000
	STX	$C000

	LDX	#0
CKBL2	sty	$D301
	lda	$4000
	cmp	#$FF
	bne	CKBNOT
	inx
	stx	$4000
	txa
CKBNOT	sta	MAPBUF+256,Y
	iny
	bne	CKBL2
	stx	RDKLMT
;
	ldx	#1
CKBL8	txa
	ldy	#$FF
CKBL6	cmp	MAPBUF+256,Y
	beq	CKBFO
	dey
	cpy	#$FF
	bne	CKBL6
;;;;;;	nop			;was a DEY
CKBL9	sty	$D301
	lda	MAPBUF,Y
	sta	$4000
	dey 
	cpy	#$FF
	bne	CKBL9
	pla
	sta	$D301
	lda	#$C0
	sta	$D40E
	lda	$10
	sta	$D20E
	cli 
	rts
;
CKBFO	tya 
	sta	MAPAGE-1,X
	inx 
	cpx	#65
	bcc	CKBL8
	ldy	#$FE
	bne	CKBL9
;
SPCPORT	JSR	PRINT		;Handle non-standard port addresses
	DB	'Control Address(HEX)?',0
	JSR	GETLIN
	JSR	GETNO2
	TAY
	ORA	VECTOR+1
	BNE	SAVADR
	beq	RAMDSU		;If < $0100, ask again!
	jmp	SAVADR		;Stash the specified address
;
;  Test for RAMdisk, and configure it
;
GETRDK	jsr	PRINT
	db	'RAM disk present?',0
	jsr	CHRGET
	ldy	#$FF
	cmp	#'N'
	bne	RAMDSU
	jmp	NOFAST
;
RAMDSU	jsr	PRINT
	db	'[A]xlon, [X]E or [C]ustom RAMdisk?',0
	jsr	CHRGET
	cmp	#'C'
	beq	SPCPORT
	ldy	#LOW[$D301]
	ldx	#HIGH[$D301]
	cmp	#'A'
	bne	SAVADR
	ldy	#LOW[$CFFF]
	ldx	#HIGH[$CFFF]
	cmp	#'X'
	bne	RAMDSU			;Keep on trying!
SAVADR	sty	RDAD1
	sty	RDAD2
	sty	RDAD3
	stx	RDAD1+1
	stx	RDAD2+1
	stx	RDAD3+1
	cmp	#'X'
	bne	OKP0
	jsr	CKBANKS
	lda	RDKLMT
	bne	OKP1
	jsr	PRINT
	db	'No extra memory available!',$9B,0
	ldy	#0
	jmp	NOFAST
OKP0	jmp	RMDSU2
;
OKP1	ldx	#0
	stx	NMLMAP
	stx	FR0+1
	asl	a
	asl	a
	rol	FR0+1
	asl	a
	rol	FR0+1
	asl	a
	sta	FR0
	rol	FR0+1
	jsr	IFP
	jsr	FASCII
	jsr	PRINT
	db	'Use default config for ',0
	ldy	#0
OKP2	lda	(INBUFF),Y
	bmi	OKP3
	iny
	bne	OKP2
OKP3	and	#$7F
	sta	(INBUFF),Y
	iny
	lda	#0
	sta	(INBUFF),Y
	lda	INBUFF
	ldx	INBUFF+1
	jsr	PRTMSG
	jsr	PRINT
	db	'K?',0
	jsr	CHRGET
	cmp	#'N'
	beq	RMDSU2
	jmp	DVNOQ
;
RMDSU2	JSR	PRINT
	DB	'Size(K)?',0
	JSR	GETLIN
	JSR	GETNUM
	LSR	VECTOR+1
	ROR	A
	LSR	VECTOR+1
	ROR	A
	LSR	VECTOR+1
	ROR	A
	LSR	VECTOR+1
	ROR	A
	BNE	SAVRDS
	LDA	#4
SAVRDS	STA	RDKLMT
;
GETSEQN	JSR	PRINT
	DB	'Page sequence?',0
	JSR	GETLIN
	JSR	GETNO2
	CPY	#CR
	BNE	FSNUM
	BEQ	RSEQ
DVNOQ	JSR	PRINT
	DB	'RAM disk drive no?',0
GETRDRV	JSR	CHRGET
	LDY	#9		;ASSUME 9
	CMP	#'0'
	BCC	NOFAST		;IF DIGIT, CHANGE RAMDISK CODE
	CMP	#'9'
	BCS	NOFAST
	AND	#$0F
	TAY
NOFAST	STY	RAMDKU		;SET RAMDISK UNIT NO.
	RTS
;
RSEQ	TAY
	LDX	PGMAP,Y
	STX	NMLMAP
	CPY	#3
	BCS	CPAXSQ
	LDA	SQMAP,Y
	LDX	#0
CPY0	ROL	A
	ROL	A
	PHA
	ROL	A
	ROL	A
	ROL	A
	AND	#$0C
	TAY
CPY1	LDA	SQTAB,Y
	STA	MAPAGE,X
	INX
	INY
	TXA
	AND	#3
	BNE	CPY1
	PLA
	CPX	#16
	BNE	CPY0
CPSEQ	LDA	SQTAB,X
	STA	MAPAGE,X
	INX
	CPX	#64
	BNE	CPSEQ
	BEQ	DVNOQ
;
CPAXSQ	LDX	#64
AXSQL	DEX
	TXA
	STA	MAPAGE,X
	BNE	AXSQL
	BEQ	DVNOQ
;
FSNUM	LDX	#0
	PHA
	TXA
FSNCL	STA	DATA+256,X
	INX
	BNE	FSNCL
	PLA
FSLP1	STX	UNNO
	CPY	#CR
	BEQ	TONML
	STA	DATA+256-64,X
	TAX
	LDA	DATA+256,X
	BNE	BADSEQ
	DEC	DATA+256,X
	LDY	PTR
	LDA	(FNPTR),Y
	CMP	#CR
	BNE	FSLP4
	JSR	GETLIN
FSLP4	JSR	GETNO2
	LDX	UNNO
	INX
	CPX	#64
	BNE	FSLP1
TONML	CPX	RDKLMT
	BNE	WRONG
	STA	NMLMAP
UPDLP1	DEX
	LDA	DATA+256-64,X
	STA	MAPAGE,X
	TXA
	BNE	UPDLP1
	JMP	DVNOQ
BADSEQ	JSR	PRINT
	DB	'Duplicated sequence number!',$9B,0
	JMP	GETSEQN
;
WRONG	JSR	PRINT
	DB	'Wrong number of entries!',$9B,0
	JMP	GETSEQN
;
PGMAP	DB	$00,$00,$00,$FF,$FF,$FF
SQMAP	DB	$9C,$D8,$4B,$FF,$FF,$00
;
SQTAB	DB	$A3,$A7,$AB,$AF
	DB	$C3,$C7,$CB,$CF
	DB	$E3,$E7,$EB,$EF
	DB	$83,$87,$8B,$8F
;
	DB	$A1,$A5,$A9,$AD
	DB	$C1,$C5,$C9,$CD
	DB	$E1,$E5,$E9,$ED
	DB	$81,$85,$89,$8D
;
	DB	$A2,$A6,$AA,$AE
	DB	$C2,$C6,$CA,$CE
	DB	$E2,$E6,$EA,$EE
	DB	$82,$86,$8A,$8E
;
	DB	$A0,$A4,$A8,$AC
	DB	$C0,$C4,$C8,$CC
	DB	$E0,$E4,$E8,$EC
	DB	$80,$84,$88,$8C
;
CONSYS	JSR	PRINT
	DB	'Verify WRITEs?',0
	JSR	DOVRFY
	JSR	PRINT
	DB	'Number of File Buffers?',0
	JSR	GETLIN
	JSR	GETNUM
	TAX
	BEQ	SKPFCT
	CMP	#17
	BCS	SKPFCT
	STA	FILES	;SET NUMBER OF FILES (0-16)
SKPFCT	JSR	GETRDK
	JSR	MDINIT	;REINITIALIZE DOS3
	JMP	DOSOS
;
ZAPDRV	LDA	#$D2
	DB	$2C	;SKIP 2 BYTES
SET52	LDA	#$52
	LDY	UNNO
	STA	DRVDEF-1,Y
	JSR	CLRHDS
CONXIT	JMP	MENUSL
;
CONFGR	DB	'Drive number or '
	DC	'R','E','T','U','R','N'
	DB	':',0
	JSR	CHRGET	;GET DRIVE NUMBER
	CMP	#$9B	;IF RETURN, GO TO SYSTEM CONFIGURATION
	BNE	CONDRIV
	JMP	CONSYS
CONDRIV	CMP	#'9'
	BCC	SAVDVN
TOBADP	JMP	BADPCMD
SAVDVN	SBC	#'1'-1
	BCC	TOBADP
	TAY
	INY
	STY	UNNO
	LDA	#0	;THEN ZERO CONFIGURATION BYTE
	STA	DRVDEF-1,Y
;
	JSR	PRINT
	DB	'Remove drive?',0
	JSR	CHRGET
	CMP	#'Y'
	BEQ	ZAPDRV
	JSR	PRINT
	DB	'Is drive configurable?',0
	JSR	CHRGET
	CMP	#'Y'	;IF NO, SET TO $52 AND EXIT
	BNE	SET52
	JSR	PRINT
	DB	'High capacity drive?',0
	JSR	CHRGET
	CMP	#'Y'
	BEQ	GETHCD
	JSR	PRINT
	DB	'Is drive double sided?',0
	JSR	CHRGET
	CMP	#'Y'
	BNE	SETSS
	LDA	#$01
	JSR	ORDRV
SETSS	JSR	PRINT
	DB	'Tracks/side?',0
	JSR	GETLIN
	JSR	GETNUM
	CMP	#35
	BEQ	SET35
	TAY
	LDA	#$30
	CPY	#77
	BEQ	SETTKS
	LDA	#$20
	CPY	#80
	BEQ	SETTKS
	LDA	#$10
	CPY	#40
	BNE	SETSS
SETTKS	JSR	ORDRV
SET35	JSR	PRINT
	DB	'Step rate?',0
	JSR	CHRGET
	CMP	#'4'
	BCS	SET35
	SBC	#'0'-1
	BCC	SET35
	ASL	A
	JSR	ORDRV
	JSR	CLRHDS
	JMP	MENUSL
;
GETHCD	JSR	PRINT
	DB	'Drive size (in sectors)?',0
	JSR	GETLIN
	JSR	GETNUM
	CPX	#0
	BEQ	GETHCD	;INVALID SIZE
	PHA
	LDY	UNNO
	LDA	#$12
	STA	DRVDEF-1,Y
	LDA	#2
	STA	DKTYPE-1,Y
	PLA
	JSR	SETHDS
	JMP	MENUSL
;
;  S.  Set RAMdisk Drive Number
;
RAMDRV	DB	'RAM disk drive no?',0
	JSR	GETRDRV
	JMP	MENUSL
;
;  V.  Set Verify Flag ON or OFF
;
VERIFY	DB	'Verify WRITEs?',0
	JSR	DOVRFY
	JMP	MENUSL
;
DOVRFY	JSR	CHRGET
	LDX	#$57	;ASSUME YES!
	CMP	#'N'
	BNE	DOVFY
	LDX	#$50
DOVFY	STX	WRCMD	;SAVE THE WRITE COMMAND IN DOS
	RTS
;
ORDRV	LDY	UNNO
	ORA	DRVDEF-1,Y
	STA	DRVDEF-1,Y
	RTS
;
CLRHDS	LDX	#0
	TXA
SETHDS	LDY	UNNO
	STA	HDTAB-1,Y
	TXA
	STA	HDTAB+8-1,Y
	JMP	DOFSIN
