2020-09-24 15:47:24 +00:00
|
|
|
/* 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);
|
2020-10-08 20:43:58 +00:00
|
|
|
|
|
|
|
/**********************************************************************************************
|
|
|
|
* 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 *
|
|
|
|
**********************************************************************************************/
|
2020-09-24 15:47:24 +00:00
|
|
|
extern int filecmd(M6502 *mpu, word addr, byte data);
|
2020-10-08 20:43:58 +00:00
|
|
|
|
|
|
|
/**********************************************************************************************
|
|
|
|
* 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);
|
2020-10-20 02:46:53 +00:00
|
|
|
|
2021-09-19 20:46:45 +00:00
|
|
|
/* 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);
|
|
|
|
|
2020-10-20 02:46:53 +00:00
|
|
|
/**********************************************************************************************
|
|
|
|
* Read Key Directly from Console *
|
2021-09-19 20:46:45 +00:00
|
|
|
* Bypasses getc() from stdin, eliminating input buffering *
|
2020-10-20 02:46:53 +00:00
|
|
|
* 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);
|