LST OFF ORG $B500 ; SST.CONTROLER ; into EDD's expansion space ($B500-$B6FF) ******************************** * * * SST CONTROLLER * * (c) Saltine * * Source by Deckard * * * ******************************** * EDD.OPT2.OPT1 COPYDISK EQU $1929 ; back up a disk TRKR EQU $19C0 ; track read TRKWV EQU $1A04 ; track write/verify * SST.SUBS SBS_SSTTRKR EQU $1DFF ; new TRKR routine (exec) SBS_SSTTRKWV EQU $1E09 ; new TRKWV routine (exec) SBS_CHOOSE EQU $1FAD ; select option (pirate a disk/unpack) SBS_INIT EQU $21A4 ; exec initialize a disk *------------------------------* * * * Pirate a disk * * Entry point * * * *------------------------------* * Option 1 of main menu CTL_PIRATEDSK HB500 JSR CTL_MOVE ; save EDD code, retrieve SST code JSR SBS_CHOOSE ; select SST sub-option (EDD copy/pack/unpack) JSR CTL_MOVE ; save SST code, retrieve EDD code JMP COPYDISK ; go EDD. Next controller entry is CTL_NEWTRKR RTS *------------------------------* * * * Initialize a disk * * Entry point * * * *------------------------------* * Option 9 of main menu CTL_INITDSK HB50D JSR CTL_MOVE ; save EDD code, retrieve SST code JSR SBS_INIT ; exec command JSR CTL_MOVE ; save SST code, retrieve EDD code RTS *------------------------------* * * * Replacement of EDD TRKR * * Entry point * * (COPYDISK module) * * * *------------------------------* CTL_NEWTRKR JSR CTL_MOVE ; save EDD code, retrieve SST code JMP SBS_SSTTRKR ; exec new TRKR routine *------------------------------* * * * Replacement of EDD TRKWV * * Entry point * * (COPYDISK module) * * * *------------------------------* CTL_NEWTRKWV JSR CTL_MOVE ; save EDD code, retrieve SST code JMP SBS_SSTTRKWV ; exec new TRKWV routine *------------------------------* * * * Go to CTL_MOVE * * * *------------------------------* CTL_DO_MOVE JSR CTL_MOVE ; restore EDD routines & SST subs RTS *------------------------------* * * * Switch SST subs <=> EDD * * * *------------------------------* * Switch SST bank 2 ($E000-$F4FF) <=> EDD ($1D00-$31FF) CTL_MOVE LDA #>$E000 ; from source pointer ($3C) high STA $3D LDA #>$1D00 ; to target pointer ($3E) high STA $3F LDA #0 ; low STA $3C STA $3E LDA #>$F500 ; high last buf+1 STA $42 *------------------------------* * * * Memory Exchange module * * * *------------------------------* * Switch 2 parts of memory (1 in bank 2) CTL_XCH1 BIT $C083 ; read/write bank 2 ($D000-$DFFF) BIT $C083 LDY #0 :1 LDA ($3C),Y ; get 1 byte from first buffer STA CTL_SAVBYTE ; save it LDA ($3E),Y ; get 1 byte from 2nd buffer STA ($3C),Y ; store it in 1st buffer LDA CTL_SAVBYTE ; restore saved byte STA ($3E),Y ; store it in 2nd buffer INY BNE :1 INC $3D ; next byte of the buffers INC $3F LDA $3D CMP $42 ; end? BNE :1 ; no BIT $C081 ; read rom / write bank 2 RTS *------------------------------* * * * Go to EDD TRKR * * (track read) * * * *------------------------------* CTL_EDDREAD JSR CTL_MOVE ; save SST code, retrieve EDD code JMP TRKR ; next controller entry is CTL_NEWTRKWV *------------------------------* * * * Go to EDD TRWV * * (track write/verify) * * * *------------------------------* CTL_EDDWRITE JSR CTL_MOVE ; save SST code, retrieve EDD code JMP TRKWV *------------------------------* * * * VARIABLES * * * *------------------------------* CTL_SAVBYTE DFB 0 ; for xchange mod CTL_VAR1 DFB 0 ; unpack option [0,1] CTL_VAR2 DFB 0 ; [$00 or $FF] CTL_VAR3 DFB 0 ; pirate a disk option [0,2] CTL_POS DFB 0 ; original slot CTL_PDS DFB 0 : duplicate slot CTL_POD DFB 0 ; original drive CTL_PDD DFB 0 ; duplicate drive CTL_DRVCOUNT DFB 0 ; 1 or 2 drives CTL_STARTRK DFB 0 ; start track CTL_ENDTRK DFB 0 ; end track CTL_STEP DFB 0 ; step CTL_NBLCFLG DFB 0 ; nibble count flag CTL_SYNCFLG DFB 0 ; synchronized track flag CTL_SIDE DFB 0 ; "side" CTL_TRACK DFB 0 ; track DS \,0 DS $100,0 SAV OBJ/DECKARD/SST.CONTROLER