C02/lib6502/file6502.h

145 lines
12 KiB
C

/* file6502.h - File I/O Command Processor Header File */
#include "lib6502.h"
typedef uint8_t byte;
typedef uint16_t word;
extern void setdebug(int dbg);
/**********************************************************************************************
* Process File Command *
* Command passed in A and parameters in X, Y, and Carry *
* 16-Bit values are passed with the MSB in Y and the LSB in X *
* Results returned in A, X, and Y *
* Unless otherwise specified, A contains the Command Code *
* Status of 0 indicates success, any other value indicates failure *
* For FOPEN only bits 5-7 of the File Mode are significant; bits 0-4 are ignored *
* Bits 6-7 are the access mode: %00=Read, %01=Write, %10=Append, %11=Records *
* Bit 5 is the access type: 0=text, 1=binary *
* *
* A=Command Description Parameters Returns *
* A SETADDR Set File Buffer Address Y,X=Address Y,X=Address *
* C FCLOSR Close File (Carry Clear) Y=Channel Y=Error *
* CLOSEDIR Close Directory (Carry Set) Y=Channel Y=Error *
* D READDIR Read Dir Entry (Carry Clear) Y=Channel X=Name Length, Y=Error *
* SETADDR Struct Address *
* READHDR Read Dir Header (Carry Set) Y=Channel X=Name Length, Y=Error *
* SETADDR Struct Address *
* E FEOF Check for End of File Y=Channel Y=EOF Indicator *
* F FFLUSH Flush File to Disk Y=Channel X=Status, Y=Error *
* G FGETC Read Character from File Y=Channel X=Character, Y=Error *
* H FGETS Read String from File Y=Channel X=String Legth, Y=Error *
* SETADDR Array Address *
* I FSINIT Initialize File System *
* G FGETW Read Integer (Carry Clear) Y=Channel Y.X=Integer, A=Error *
* FPUTW Write Integer (Carry Set) Y=Channel Y=Error *
* SETADDR Struct Address *
* K REMOVE Remove File from Disk Y=Drive Y=Error *
* SETNAME Filename *
* L FLOAD Load File into Memory Y,X=End Address, A=Error *
* SETNAME File Name *
* SETADDR Start Address *
* M RENAME Change Name of File on Disk Y=Drive Y=Error *
* SETNAME Old Name *
* SETBUFF New Name *
* N SETNAME Set Filename (Carry Clear) YX=Name YX=Name *
* SETBUFF Set File Buffer (Carry Set) YX=String YX=String *
* O FOPEN Open File (Carry Clear) Y=Drive, X=Mode X=Channel, Y=Error *
* SETNAME File Name *
* SETINDEX Record Length (MRECRD) *
* OPENDIR Open Directory (Carry Set) Y=Drive X=Channel, Y=Error *
* SETNAME Directory Name *
* P FPUTC Write Character to File Y=Channel, X=Char E=Status, Y=Error *
* Q FPUTS Write String (Carry Clear) Y=Channel X=String Length, Y=Error *
* SETADDR String Address *
* FPUTLN Write Line (Carry Set) Y=Channel X=String Length, Y=Error *
* SETADDR String Address *
* R FREAD Read Bytes (Carry Clear) Y=Channel, X=Count X=Count, Y=Error *
* SETADDR Array Address *
* FGETR Read Record (Carry Set) Y=Channel A=Error, YX=Next Index *
* SETADDR Struct *
* SETINDEX Record Address *
* S FSAVE Save File to Disk Y,X=End Address Y=Error *
* SETNAME File Name *
* SETADDR Start Address *
* U GETCWD Get Current Dir (Carry Clear) Y=Drive ID X=Name Length, Y=Error *
* SETADDR String Buffer *
* U CHDIR Change Directory (Carry Set) Y=Drive ID Y=Error *
* SETNAME Directory Name *
* V GETDRIVE Get Current Drive (Carry Clear) X=Drive ID, Y=Error *
* CHDRIVE Set Current Drive (Carry Set) Y=Drive ID Y=Error *
* W FWRITE Write Bytes (Carry Clear) Y=Channel, X=Count X=Count, Y=Error *
* X MKDIR Create Directory (Carry Clear) Y=Drive ID Y=Error *
* SETNAME Directory Name *
* RMDIR Remove Directory (Carry Set) Y=Drive ID Y=Error *
* SETNAME Directory Name *
* Y FERROR Get Last Error on Channel Y=Channel X=Channel Error, Y = Error *
* SETADDR Array Address *
* Z FSEEK Move to Position (Carry Clear) Y=Channel X=Status, Y=Error *
* SETINDEX Position *
* FTELL Get File Position (Carry Clear) Y=Channel A=Error, YX=Position *
**********************************************************************************************/
extern int filecmd(M6502 *mpu, word addr, byte data);
/**********************************************************************************************
* Process System Command *
* Command passed in A and parameters in X, Y, and Carry *
* 16-Bit values are passed with the MSB in Y and the LSB in X *
* Results returned in A, X, and Y *
* Unless otherwise specified, A contains the Command Code *
* *
* A=Command Description Parameters Returns *
* C CLOCK Get System Clock A,Y,X=Clock (Seconds/50) *
* T GETTM Get Date/Time (Carry Clear) Y,X = tm Address *
* SETTM Set Date/Time Time (Carry Set Y,X = tm Address Y=Error * *
**********************************************************************************************/
extern int syscmd(M6502 *mpu, word addr, byte data);
/* Initialize Extended RAM */
extern void initxmem(void);
/**********************************************************************************************
* Process Extended Memory Command *
* Extended Memory consists of 16 banks of 64KiB of memory, for a total of 1 MB of memory *
* not directly addressable by the 6502. *
* Memory is read and written a byte or word at a time to an 16 bit address within a bank. *
* After each read or write, the address is incremented, and at the end of a bank, the *
* address reset to zero and the next bank selected, wrapping around to bank 0 at the end. * *
* Command passed in A and parameters in X, Y, and Carry *
* 16-Bit values are passed with the MSB in Y and the LSB in X *
* Results returned in A, X, and Y *
* *
* A=Command Description Parameters Returns *
* A GETADDR Get Address (Carry Clear) Y,X=Address *
* SETADDR Set Address (Carry Set) Y,X=Address *
* B GETBANK Get Bank (Carry Clear) A=Bank *
* SETBANK Set Bank (Carry Set) X=Bank *
* C GETCHAR Read Byte (Carry Clear) A=Byte *
* PUTCHAR Write Byte (Carry Set) X=Byte *
* M GETMBLK Get Memory Block (Carry Clear) Y,X=Byte Count A,Y,X=Extended Address *
* SETMBLK Set Memory Block (Carry Set) Y,X=Byte Count A,Y,X=Extended Address *
* N GETNEXT Read Next Byte (Carry Clear) A=Byte *
* PUTNEXT Write Next Byte (Carry Set) X=Byte *
* S SYSADDR Set System RAM Address Y,X=Address *
* W GETWORD Read Next Word (Carry Clear) Y,X=Word *
* PUTWORD Write Next Word (Carry Set) Y,X=Word *
* X SWPMBLK Swap Memory Block Y,X=Byte Count A,Y,X=Extended Address *
**********************************************************************************************/
extern int xmemcmd(M6502 *mpu, word addr, byte data);
/**********************************************************************************************
* Read Key Directly from Console *
* Bypasses getc() from stdin, eliminating input buffering *
* Returns ASCII key value in A, extended Key Code in Y and X *
* Cursor Control Keys produce an ASCII value with the high bit set *
**********************************************************************************************/
extern int getkey(M6502 *mpu, word addr, byte data);
/**********************************************************************************************
* Write Character Directly to Console *
* Bypasses putc() from stdout, eliminating output buffering *
* Character Code is passed in A *
**********************************************************************************************/
extern int putcon(M6502 *mpu, word addr, byte data);