Skip to navigation

BBC Micro Elite

Save and load: QUS1 (6502SP version)

Name: QUS1 [View in context] Type: Subroutine Category: Save and load Summary: Save or load the commander file
The filename should be stored at INWK, terminated with a carriage return (13). The routine asks for a drive number and updates the filename accordingly before performing the load or save. Arguments: A File operation to be performed. Can be one of the following: * 0 (save file) * &FF (load file) Returns: C flag Set if an invalid drive number was entered
.QUS1 PHA \ Store A on the stack so we can restore it after the \ call to GTDRV JSR GTDRV \ Get an ASCII disc drive drive number from the keyboard \ in A, setting the C flag if an invalid drive number \ was entered STA INWK+1 \ Store the ASCII drive number in INWK+1, which is the \ drive character of the filename string ":0.E." PLA \ Restore A from the stack BCS QUR \ If the C flag is set, then an invalid drive number was \ entered, so jump to QUR to return from the subroutine PHA \ Store A on the stack so we can restore it after the \ call to DODOSVN LDA #255 \ Set the SVN flag to 255 to indicate that disc access JSR DODOSVN \ is in progress PLA \ Restore A from the stack LDX #INWK \ Store a pointer to INWK at the start of the block at STX &0C00 \ &0C00, storing #INWK in the low byte because INWK is \ in zero page LDX #0 \ Set (Y X) = &0C00 LDY #&C JSR OSFILE \ Call OSFILE to do the file operation specified in \ &0C00 (i.e. save or load a file depending on the value \ of A) JSR CLDELAY \ Pause for 1280 empty loops LDA #0 \ Set the SVN flag to 0 indicate that disc access has JSR DODOSVN \ finished CLC \ Clear the C flag .QUR RTS \ Return from the subroutine