; ; 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