forked from ArtemioUrbina/huc
-
Notifications
You must be signed in to change notification settings - Fork 17
PC FX BIOS
Bob Frasure edited this page Jan 19, 2025
·
1 revision
Address: 0xFFF0000C
| r7 Value | Description |
|---|---|
| 0 | Kanji 16x16 |
| 1 | Kanji 12x12 |
| 2 | ANK 8x16 |
| 3 | ANK 6x12 |
| 4 | ANK 8x8 |
| 5 | ANK 8x12 |
Load r10 with function number. Add -8 to sp. Store lp to 0[sp] Store gp to 4[sp] Set gp to 0. Load r12 with 0xFFF00008 JAL to local code that does JMP [r12] (Wait for return) Restore lp and gp from stack. Add 8 to sp. JMP [lp] (return)
/* DEV_CTRL & HND_CTRL NO */ #define CTRL_VEC_RD 0 #define CTRL_VEC_WT 1 #define CTRL_NAME_RD 2 #define CTRL_NAME_WT 3 #define CTRL_OPT_JOB 4 #define CTRL_IPLREAD 5 #define CTRL_IPLWRITE 6 #define CTRL_BPBGET 7 #define CTRL_BPBSET 8 #define CTRL_GETSTAT 9 /* open mode */ #define O_READ 0x0001 #define O_WRITE 0x0002 #define O_APPEND 0x0008 /* set append mode */ #define O_CREAT 0x0200 /* create if nonexistant */ #define O_TRUNC 0x0400 /* truncate to zero length */ #define O_EXCL 0x0800 /* error if already exists */ /* error trap function */ #define IO_READ 0 #define IO_WRITE 1 #define IO_CHECK 2 #define IO_CTRL 3 #define IO_WCHECK 4 /* seek base */ #define SEEK_SET 0 /* TOF base */ #define SEEK_CUR 1 /* current base */ #define SEEK_END 2 /* EOF base */ /* attribute type */ #define ATR_ARC 0x20 #define ATR_DIR 0x10 #define ATR_VOL 0x08 #define ATR_SYS 0x04 #define ATR_HID 0x02 #define ATR_RDO 0x01 /* ipl block data offset */ #define bt_jmp 0 #define bt_oem 3 #define bt_secsiz 11 #define bt_clsiz 13 #define bt_nrsvsect 14 #define bt_nfat 16 #define bt_dirents 17 #define bt_maxsect 19 #define bt_mid 21 #define bt_fatlen 22 #define bt_nsect 24 #define bt_nheads 26 #define bt_nhs 28 #define bt_bigsect 32 #define bt_junk 36 /* error code */ #define BAD_PARA -1 #define BAD_DRIVE -10 #define PATH_OVER -11 #define NAME_OVER -12 #define EXT_OVER -13 #define BAD_DEVICE -14 #define NO_FILES -15 #define BAD_PATH -16 #define BAD_NAME -17 #define MOUNTED -18 #define UMOUNTED -19 #define MOUNTBUSY -20 #define FCB_EMPTY -21 #define HND_EMPTY -22 #define BAD_HND -23 #define BAD_MODE -24 #define SEEK_OVER -25 #define FSYS_DIFF -26 #define CUR_DIR -27 #define BAD_CMD -28 #define NOT_FMT -29 #define NO_MEM -30 #define IO_BUSY -31 #define FILE_EXIST -32 #define BAD_FAT -33 #define DIR_FULL -34 #define DISK_FULL -35 #define BAD_EXE -36 #define KEEP_PR -37 #define WRITE_PRO -38 #define NOT_RDY -39 #define SEC_NFND -40 #define CRC_ERROR -41 #define OVER_RUN -42
typedef struct fsys {
unsigned char name[16];
int (* dev_call)();
void *dev_type;
long access_f;
struct fsys *back;
struct fsys *next;
int path_len;
unsigned char path[128];
} FSYS;
typedef struct filesbf {
int fsys_flg;
FSYS *fsysp;
unsigned char temp[64];
long fsize;
long ftime;
int atr;
unsigned char path[128];
unsigned char *name;
unsigned char *upath;
int name_max;
} FILESBF;
typedef struct dpb {
int dev_id; /* SCSI_ID or hnd */
long rec_offset; /* record offset */
int rec_sft; /* dos_record -> bios_rec */
int sft_byt; /* bios_rec -> bytes */
int (* dev_call)(); /* device i/o job */
unsigned short ej_flg; /* eject ok(=1) ng(=0) flg */
unsigned short secsiz; /* Bytes per sector */
unsigned char secsft; /* Bytes per sector sft count */
unsigned char clsiz; /* Sector per Cluster */
unsigned char clsft; /* Sector per Cluster sft count */
unsigned char mid; /* Media descriptor */
unsigned long fattop; /* fat top sector */
unsigned char nfat; /* Number of FAT tables */
unsigned char fatlen; /* Sectors in FAT */
unsigned short fat_max; /* fat data max 2-??? */
unsigned long dirtop; /* root dir top sector */
unsigned short dircnt; /* root dir entrys per sector */
unsigned short dirlen; /* root dir sectors */
unsigned long datatop; /* data top sector */
long free_fat; /* free fat count (-1=no calc) */
unsigned short new_fat; /* last access new fat */
unsigned short def_fat; /* curdir fat(root=0) */
unsigned char def_dir[64]; /* curdir dir name(root="") */
} DPB ;
typedef struct bpb {
unsigned short secsiz; /* Bytes per sector */
unsigned char clsiz; /* Cluster size */
unsigned char nfat; /* Number of FAT tables */
unsigned short nrsvsect; /* Number of reserved sectors */
unsigned short dirents; /* Number of root directory entry */
unsigned short maxsect; /* Total sectors on disk */
unsigned char mid; /* Media descriptor */
unsigned char fatlen; /* Sectors in FAT */
unsigned long bigsect; /* big total sectors (valid maxsect zero) */
unsigned short nsect; /* Sectors/track */
unsigned short nheads; /* Heads */
unsigned long nhs; /* number of hidden sectors */
} BPB ;
| ID | Function Definition | Description |
|---|---|---|
| 0 | int fsys_init(unsigned char *, unsigned char *, int (*error_trap)()); |
{{{desc}}} |
| 1 | int fsys_mount(unsigned char *, FSYS *); |
{{{desc}}} |
| 2 | int fsys_ctrl(unsigned char *, int, unsigned char *, int); |
{{{desc}}} |
| 3 | FSYS *fsys_getfsys(unsigned char *); |
{{{desc}}} |
| 4 | int fsys_format(unsigned char *, unsigned char *); |
{{{desc}}} |
| 5 | long fsys_diskfree(unsigned char *); |
{{{desc}}} |
| 6 | long fsys_getblocks(unsigned char *); |
{{{desc}}} |
| 7 | int fsys_open(unsigned char *, int); |
{{{desc}}} |
| 8 | int fsys_read(int, unsigned char *, int); |
{{{desc}}} |
| 9 | int fsys_write(int, unsigned char *, int); |
{{{desc}}} |
| 10 | long fsys_seek(int, long, int); |
{{{desc}}} |
| 11 | long fsys_htime(int, long); |
{{{desc}}} |
| 12 | int fsys_close(int); |
{{{desc}}} |
| 13 | int fsys_delete(unsigned char *); |
{{{desc}}} |
| 14 | int fsys_rename(unsigned char *, unsigned char *); |
{{{desc}}} |
| 15 | int fsys_mkdir(unsigned char *); |
{{{desc}}} |
| 16 | int fsys_rmdir(unsigned char *); |
{{{desc}}} |
| 17 | int fsys_chdir(unsigned char *); |
{{{desc}}} |
| 18 | int fsys_curdir(unsigned char *); |
{{{desc}}} |
| 19 | int fsys_ffiles(FILESBF *, unsigned char *); |
{{{desc}}} |
| 20 | int fsys_nfiles(FILESBF *); |
{{{desc}}} |
| 21 | int fsys_efiles(FILESBF *); |
{{{desc}}} |
| 22 | unsigned long fsys_datetime(unsigned long); |
{{{desc}}} |
| 23 | int fsys_m_init(unsigned char *, unsigned char *); |
{{{desc}}} |
| 24 | void *fsys_malloc(int); |
{{{desc}}} |
| 25 | int fsys_free(void *); |
{{{desc}}} |
| 26 | int fsys_setblock(char *, int); |
{{{desc}}} |
Information copied and transcribed from header files by saga/HyperClub (APC-Project).