; C02 Module direct Assembly Language Routines for run6502 emulator ; This is the reference implementation of the direct module ; Requires external function FSCMD and FSDRVN (fileio.h02) SUBROUTINE DIRECT ;getcwd(drv, &dir) - Get Current Directory ;Args: A = Drive Identifier ; Y,X = Pointer to String ;Returns: A = Result (0 = Success, $FF = Failure) ; Y = Error Code (0 = None) GETCWD: JSR FSDRVN ;Convert Drive Letter to Drive Number BCS .DRVERR ;If Invalid Return Error LDA #'T' ;Set Command to GETCWD .FSCMDX JSR FSCMD ;Execute Command TXA ;Return Length of Name .DRVERR RTS ;chdir(drv, &dir) - Get Current Directory ;Args: A = Drive Identifier ; Y,X = Pointer to String ;Returns: A = Result (0 = Succes, $FF = Failure) ; Y = Error Code (0 = None) CHDIR: JSR FSDRVN ;Convert Drive Letter to Drive Number BCS .DRVERR ;If Invalid Return Error LDA #'U' ;Set Command to GETCWD BNE .FSCMDX ;Execute Command and Return Result ;rmdir(drv, &dir) - Create Directory ;Args: A = Drive Identifier ; Y,X = Address of Directory Name String ;Returns: A = Error Code (0 = None) RMDIR: SEC ;Set Mode to RMDIR BCS .MRDIR ;Execute MKRMDIR and Return Result ;mkdir(drv, &dir) - Create Directory ;Args: A = Drive Identifier ; Y,X = Address of Directory Name String ;Returns: A = Error Code (0 = None) MKDIR: CLC ;Set Mode to MKDIR .MRDIR PHP ;Save Status Register JSR FSDRVN ;Convert Drive Letter to Drive Number BCS .DRVERR ;If Invalid Return Error PLP ;Restore Status Register LDA #'X' ;Set Command to MKRMDIR BNE .FSCMDX ;Execute Command and Return Result .PLAERR PLP ;Restore Status Register RTS ;and Return