; SAVE#D:MDUP6.M65 ; ; ;*P. CHANGE DISK FORMAT ; CHDISK .BYTE "Drive, new " .BYTE "density:",0 JSR GETDN ; GET DRIVE # LDA DELIM CMP #$9B ; DRIVE # ONLY? BNE CHDSK2 ; IF SO, CHANGE ; ; DEFAULT BADPCMD JSR ERRXIT .BYTE "Drive " .BYTE "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 ; ; This is BOB code, uncommented ; as per usual.... [ChasM] ; ; WE VALIDATE THE MEMORY ; MAPPING ABILITY OF THE BOX WE ; ARE RUNNING IN? [BOB PUFF] ; ; [Don't really understand this ; but thats OK, for now, ChasM] ; ;*Lee will attempt it, but hold ; on to your hat, you won't ; believe it!! ; CKBANKS SEI ; stop all ints LDY #0 ; from anywhere STY $D40E ; from halting STY $D20E ; the process LDA $D301 ; Save Basic etc PHA ; state LDX #$FF CKBL1 STY $D301 ; Build two LDA $4000 ; tables, 1st STA MAPBUF,Y ; contains STX $4000 ; first byte of TXA ; all 256 poss STA MAPBUF+256,Y ; banks' INY ; 1st byte for BNE CKBL1 ; later restore DEX ; and store FF STX $D301 ; to all banks. ;* STX 0 ; 2nd table=new STX $4000 ; value (FF) of ;* STX $8000 ; banks for test ;* STX $C000 LDX #0 ; prep for test CKBL2 STY $D301 LDA $4000 CMP #$FF ; same? no-not BNE CKBNOT ; a working bank INX ; yes-inc bank STX $4000 ; count, store TXA ; into bank and CKBNOT STA MAPBUF+256,Y ; 2nd table INY ; when done fall BNE CKBL2 ; thru with # of STX RDKLMT ; banks here ; LDX #1 ; prep for 2nd CKBL8 TXA ; part.... LDY #$FF ; Search for CKBL6 CMP MAPBUF+256,Y ; match-2nd BEQ CKBFO ; table and Y... DEY ; If found, Y CPY #$FF ; holds banking BNE CKBL6 ; byte-store it ; ; Wild huh? CKBL9 STY $D301 ; Restore all LDA MAPBUF,Y ; banks to prev STA $4000 ; held data. DEY ; Data remains CPY #$FF ; VALID! Thanks, BNE CKBL9 ; Bob PLA ; Restore Basic STA $D301 ; state, etc. LDA #$C0 ; STA $D40E ; Reset ints for LDA $10 ; normal running STA $D20E ; CLI ; RTS ; and done ; CKBFO TYA ; Store Y offset STA MAPAGE-1,X ; into MYDOS INX ; banking table CPX #65 ; BCC CKBL8 ; Make sure we LDY #$FE ; are not over BNE CKBL9 ; 64 bytes total ; ; as that is our ; ; limit ; SPCPORT JSR PRINT ; Handle ; ; non-standard ; ; port addresses .BYTE "Control " .BYTE "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 .BYTE "RAM disk present?",0 JSR CHRGET LDY #$00 ;* Fix bad ;* LDY #$FF ; format code Lee CMP #'N BNE RAMDSU JMP NOFAST ; RAMDSU JSR PRINT .BYTE +$80,"[A]" .BYTE "xlon, " .BYTE +$80,"[X]" .BYTE "E or " .BYTE +$80,"[C]" .BYTE "ustom RAMdisk?",0 JSR CHRGET CMP #'C ;* BEQ SPCPORT ;* LDY # <$D301 ;* LDX # >$D301 ;* CMP #'X ;* BEQ SAVADR ;* LDY # <$CFFF ;* LDX # >$CFFF ;* CMP #'A ;* BNE RAMDSU ; Keep on ; ; trying! ;* Changed to work Lee ; SAVADR STY RDAD1 STY RDAD2 STY RDAD3 STX RDAD1+1 STX RDAD2+1 STX RDAD3+1 CMP #'A ;* BNE NOAX ;* get Axlon LDY # RDAD2+13 ;* home bank STY RDAD1 ;* of zero STX RDAD1+1 ;* Lee NOAX LDY RDAD2 ;* LDX RDAD2+1 ;* STY CKBL1+1 ;* STX CKBL1+2 ;* STY CKBL1+21 ;* STX CKBL1+22 ;* STY CKBL2+1 ;* get all STX CKBL2+2 ;* RD to use STY CKBL9+1 ;* autotest STX CKBL9+2 ;* code -Lee JSR CKBANKS LDA RDKLMT BNE OKP1 JSR PRINT .BYTE "No extra memory " .BYTE "available!",$9B,0 LDY #0 JMP NOFAST OKP0 JMP RMDSU2 ; OKP1 LDX #0 ; STX NMLMAP ; not good -Lee 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 .BYTE "Use default " .BYTE "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 .BYTE "K?",0 JSR CHRGET CMP #'N BEQ RMDSU2 JMP DVNOQ ; RMDSU2 JSR PRINT .BYTE "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 .BYTE "Page sequence?",0 JSR GETLIN JSR GETNO2 CPY #CR BNE FSNUM BEQ RSEQ DVNOQ JSR PRINT .BYTE "RAM disk drive no?",0 LDA RDAD2+1 ; set up CMP #$CF ; proper Axlon BNE GETRDRV ; banking LDX RDKLMT ; table AX1 TXA ;* STA MAPAGE-1,X ;* DEX ;* BNE AX1 ;* Lee 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 # RTS ; RSEQ TAY LDX PGMAP,Y ; STX NMLMAP ; not good -Lee 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 ; not good -Lee UPDLP1 DEX LDA DATA+256-64,X STA MAPAGE,X TXA BNE UPDLP1 JMP DVNOQ BADSEQ JSR PRINT .BYTE "Duplicated sequence " .BYTE "number!",$9B,0 JMP GETSEQN ; WRONG JSR PRINT .BYTE "Wrong number of " .BYTE "entries!",$9B,0 JMP GETSEQN ; PGMAP .BYTE $00,$00,$00 .BYTE $FF,$FF,$FF SQMAP .BYTE $9C,$D8,$4B .BYTE $FF,$FF,$00 ; SQTAB .BYTE $A3,$A7,$AB,$AF .BYTE $C3,$C7,$CB,$CF .BYTE $E3,$E7,$EB,$EF .BYTE $83,$87,$8B,$8F ; .BYTE $A1,$A5,$A9,$AD .BYTE $C1,$C5,$C9,$CD .BYTE $E1,$E5,$E9,$ED .BYTE $81,$85,$89,$8D ; .BYTE $A2,$A6,$AA,$AE .BYTE $C2,$C6,$CA,$CE .BYTE $E2,$E6,$EA,$EE .BYTE $82,$86,$8A,$8E ; .BYTE $A0,$A4,$A8,$AC .BYTE $C0,$C4,$C8,$CC .BYTE $E0,$E4,$E8,$EC .BYTE $80,$84,$88,$8C ; CONSYS JSR PRINT .BYTE "Number of File " .BYTE "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 .BYTE $2C ; FAKE BIT SET52 LDA #$52 LDY UNNO STA DRVDEF-1,Y JSR CLRHDS CONXIT JMP MENUSL ; CONFGR .BYTE "Drive number or " .BYTE +$80,"RETURN" .BYTE ":",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 .BYTE "Remove drive?",0 JSR CHRGET CMP #'Y BEQ ZAPDRV JSR PRINT .BYTE "Is drive " .BYTE "configurable?",0 JSR CHRGET CMP #'Y ; IF NO, SET TO ; ; $52 AND EXIT BNE SET52 JSR PRINT .BYTE "High capacity " .BYTE "drive?",0 JSR CHRGET CMP #'Y BEQ GETHCD JSR PRINT .BYTE "Is drive double " .BYTE "sided?",0 JSR CHRGET CMP #'Y BNE SETSS LDA #$01 JSR ORDRV SETSS JSR PRINT .BYTE "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 .BYTE "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 .BYTE "Drive size (in " .BYTE "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 .BYTE "RAM disk drive no?",0 JSR GETRDRV JMP MENUSL ; ;*V. Set Verify Flag ON or OFF ; VERIFY .BYTE "Verify WRITEs?",0 JSR DOVRFY JMP SHMEN ; DOVRFY JSR CHRGET LDX #$50 ;* Changed to CMP #'Y ;* default off BNE DOVFY LDX #$57 ;* Lee 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