|
|
| version 1.1, 2004/01/09 04:36:02 | version 1.6, 2005/05/13 06:19:48 |
|---|---|
| Line 1 | Line 1 |
| // ---- DOSとの受け渡し用 | // ---- DOSとの受け渡し用 |
| #define IF4DOSPTR_ADDR 0x0000600 | #define IF4DOSPTR_OFF 0x0600 |
| #define IF4DOSPTR_SEG 0x0000 | |
| // IF4DOSのアドレスが入っているアドレス | // IF4DOSのアドレスが入っているアドレス |
| // (割り込みを止めて、一時的に使用しているだけなので、 | // (割り込みを止めて、一時的に使用しているだけなので、 |
| // 仮にここを使用するBIOS/OS/アプリがあっても大丈夫) | // 仮にここを使用するBIOS/OS/アプリがあっても大丈夫) |
| typedef struct { | typedef struct { |
| BYTE off[2]; | UINT8 off[2]; |
| BYTE seg[2]; | UINT8 seg[2]; |
| } REALPTR; | } REALPTR; |
| typedef struct { | typedef struct { |
| UINT8 drive_no; // 作成したドライブ番号(A:=0) | UINT8 drive_no; // 作成したドライブ番号(A:=0) |
| UINT8 dosver_major; | UINT8 dosver_major; |
| UINT8 dosver_minor; | UINT8 dosver_minor; |
| BYTE sda_off[2]; | UINT8 sda_off[2]; |
| BYTE sda_seg[2]; | UINT8 sda_seg[2]; |
| } IF4DOS; | } IF4DOS; |
| typedef struct { | typedef struct { |
| BYTE es[2]; | UINT8 es[2]; |
| BYTE ds[2]; | UINT8 ds[2]; |
| BYTE di[2]; | UINT8 di[2]; |
| BYTE si[2]; | UINT8 si[2]; |
| BYTE bp[2]; | UINT8 bp[2]; |
| BYTE sp[2]; | UINT8 sp[2]; |
| BYTE bx[2]; | UINT8 bx[2]; |
| BYTE dx[2]; | UINT8 dx[2]; |
| BYTE cx[2]; | UINT8 cx[2]; |
| BYTE ax[2]; | UINT8 ax[2]; |
| BYTE ip[2]; | UINT8 ip[2]; |
| BYTE cs[2]; | UINT8 cs[2]; |
| BYTE flag[2]; | UINT8 flag[2]; |
| } IF4INTR; | } IF4INTR; |
| typedef struct { | typedef struct { |
| BYTE es[2]; | UINT8 es[2]; |
| BYTE ds[2]; | UINT8 ds[2]; |
| BYTE di[2]; | UINT8 di[2]; |
| BYTE si[2]; | UINT8 si[2]; |
| BYTE bp[2]; | UINT8 bp[2]; |
| BYTE sp[2]; | UINT8 sp[2]; |
| UINT8 bl; | UINT8 bl; |
| UINT8 bh; | UINT8 bh; |
| UINT8 dl; | UINT8 dl; |
| Line 50 typedef struct { | Line 51 typedef struct { |
| UINT8 ch; | UINT8 ch; |
| UINT8 al; | UINT8 al; |
| UINT8 ah; | UINT8 ah; |
| BYTE ip[2]; | UINT8 ip[2]; |
| BYTE cs[2]; | UINT8 cs[2]; |
| UINT8 flag_l; | UINT8 flag_l; |
| UINT8 flag_h; | UINT8 flag_h; |
| } IF4INTR8; | } IF4INTR8; |
| Line 59 typedef struct { | Line 60 typedef struct { |
| // ---- MS-DOSストラクチャー (little endian!) | // ---- MS-DOSストラクチャー (little endian!) |
| #ifndef __GNUC__ | |
| #pragma pack(push, 1) | #pragma pack(push, 1) |
| #define ATTRIBUTE_PACKED | |
| #else | |
| #define ATTRIBUTE_PACKED __attribute__((packed)) | |
| #endif | |
| /* FindFirst/Next data block */ | /* FindFirst/Next data block */ |
| typedef struct { | typedef struct { |
| UINT8 drive_no; | UINT8 drive_no; |
| char srch_mask[11]; | char srch_mask[11]; |
| UINT8 attr_mask; | UINT8 attr_mask; |
| BYTE dir_entry_no[2]; | UINT8 dir_entry_no[2]; |
| BYTE dir_sector[2]; | UINT8 dir_sector[2]; |
| BYTE f1[4]; | UINT8 f1[4]; |
| } _SRCHREC, *SRCHREC; // 21bytes (see int214E) | } ATTRIBUTE_PACKED _SRCHREC, *SRCHREC; // 21bytes (see int214E) |
| /* Directory entry for 'found' file */ | /* Directory entry for 'found' file */ |
| typedef struct { | typedef struct { |
| BYTE file_name[11]; | UINT8 file_name[11]; |
| UINT8 file_attr; | UINT8 file_attr; |
| BYTE f1[10]; | UINT8 f1[10]; |
| BYTE file_time[4]; | UINT8 file_time[2]; |
| BYTE start_sector[2]; | UINT8 file_date[2]; |
| BYTE file_size[4]; | UINT8 start_sector[2]; |
| } _DIRREC, *DIRREC; | UINT8 file_size[4]; |
| } ATTRIBUTE_PACKED _DIRREC, *DIRREC; | |
| /* System File Table entry */ | /* System File Table entry */ |
| typedef struct { | typedef struct { |
| BYTE handle_count[2]; | UINT8 handle_count[2]; |
| BYTE open_mode[2]; | UINT8 open_mode[2]; |
| UINT8 file_attr; | UINT8 file_attr; |
| BYTE dev_info_word[2]; | UINT8 dev_info_word[2]; |
| BYTE dev_drvr_ptr[4]; | UINT8 dev_drvr_ptr[4]; |
| BYTE start_sector[2]; | UINT8 start_sector[2]; |
| BYTE file_time[4]; | UINT8 file_time[2]; |
| BYTE file_size[4]; | UINT8 file_date[2]; |
| BYTE file_pos[4]; | UINT8 file_size[4]; |
| BYTE rel_sector[2]; | UINT8 file_pos[4]; |
| BYTE abs_sector[2]; | UINT8 rel_sector[2]; |
| BYTE dir_sector[2]; | UINT8 abs_sector[2]; |
| UINT8 dir_sector[2]; | |
| UINT8 dir_entry_no; | UINT8 dir_entry_no; |
| BYTE file_name[11]; | UINT8 file_name[11]; |
| } _SFTREC, *SFTREC; | } ATTRIBUTE_PACKED _SFTREC, *SFTREC; |
| /* Current Directory Structure */ | /* Current Directory Structure */ |
| typedef struct { | typedef struct { |
| char current_path[67]; | char current_path[67]; |
| BYTE flags[2]; | UINT8 flags[2]; |
| BYTE f1[10]; | UINT8 f1[10]; |
| BYTE root_ofs[2]; | UINT8 root_ofs[2]; |
| } _CDS3, *CDS3; | } ATTRIBUTE_PACKED _CDS3, *CDS3; |
| typedef struct { | typedef struct { |
| char current_path[67]; | char current_path[67]; |
| BYTE flags[2]; | UINT8 flags[2]; |
| BYTE f1[10]; | UINT8 f1[10]; |
| BYTE root_ofs[2]; | UINT8 root_ofs[2]; |
| BYTE f2[7]; | UINT8 f2[7]; |
| } _CDS4, *CDS4; | } ATTRIBUTE_PACKED _CDS4, *CDS4; |
| /* Swappable DOS Area for DOS3 */ | /* Swappable DOS Area for DOS3 */ |
| typedef struct { | typedef struct { |
| BYTE f0[12]; | UINT8 f0[12]; |
| REALPTR current_dta; | REALPTR current_dta; |
| BYTE f1[30]; | UINT8 f1[30]; |
| UINT8 dd; | UINT8 dd; |
| UINT8 mm; | UINT8 mm; |
| BYTE yy_1980[2]; | UINT8 yy_1980[2]; |
| BYTE f2[96]; | UINT8 f2[96]; |
| char file_name[128]; | char file_name[128]; |
| char file_name_2[128]; | char file_name_2[128]; |
| _SRCHREC srchrec; | _SRCHREC srchrec; |
| _DIRREC dirrec; | _DIRREC dirrec; |
| BYTE f3[81]; | UINT8 f3[81]; |
| char fcb_name[11]; | char fcb_name[11]; |
| BYTE f4; | UINT8 f4; |
| char fcb_name_2[11]; | char fcb_name_2[11]; |
| BYTE f5[11]; | UINT8 f5[11]; |
| UINT8 srch_attr; | UINT8 srch_attr; |
| UINT8 open_mode; | UINT8 open_mode; |
| BYTE f6[48]; | UINT8 f6[48]; |
| REALPTR cdsptr; | REALPTR cdsptr; |
| BYTE f7[72]; | UINT8 f7[72]; |
| _SRCHREC rename_srchrec; | _SRCHREC rename_srchrec; |
| _DIRREC rename_dirrec; | _DIRREC rename_dirrec; |
| } _SDA3, *SDA3; // (see int215D06) | } ATTRIBUTE_PACKED _SDA3, *SDA3; // (see int215D06) |
| /* Swappable DOS Area for DOS4+ */ | /* Swappable DOS Area for DOS4+ */ |
| typedef struct { | typedef struct { |
| BYTE f0[12]; | UINT8 f0[12]; |
| REALPTR current_dta; | REALPTR current_dta; |
| BYTE f1[32]; | UINT8 f1[32]; |
| BYTE dd; | UINT8 dd; |
| BYTE mm; | UINT8 mm; |
| BYTE yy_1980[2]; | UINT8 yy_1980[2]; |
| BYTE f2[106]; | UINT8 f2[106]; |
| char file_name[128]; | char file_name[128]; |
| char file_name_2[128]; | char file_name_2[128]; |
| _SRCHREC srchrec; | _SRCHREC srchrec; |
| _DIRREC dirrec; | _DIRREC dirrec; |
| BYTE f3[88]; | UINT8 f3[88]; |
| char fcb_name[11]; | char fcb_name[11]; |
| BYTE f4; | UINT8 f4; |
| char fcb_name_2[11]; | char fcb_name_2[11]; |
| BYTE f5[11]; | UINT8 f5[11]; |
| UINT8 srch_attr; | UINT8 srch_attr; |
| UINT8 open_mode; | UINT8 open_mode; |
| BYTE f6[51]; | UINT8 f6[51]; |
| REALPTR cdsptr; | REALPTR cdsptr; |
| BYTE f7[87]; | UINT8 f7[87]; |
| BYTE action_2E[2]; | UINT8 action_2E[2]; |
| BYTE attr_2E[2]; | UINT8 attr_2E[2]; |
| BYTE mode_2E[2]; | UINT8 mode_2E[2]; |
| BYTE f8[29]; | UINT8 f8[29]; |
| _SRCHREC rename_srchrec; | _SRCHREC rename_srchrec; |
| _DIRREC rename_dirrec; | _DIRREC rename_dirrec; |
| } _SDA4, *SDA4; // (see int215D06) | } ATTRIBUTE_PACKED _SDA4, *SDA4; // (see int215D06) |
| typedef union { | typedef union { |
| struct { | struct { |
| _SDA3 sda; | _SDA3 sda; |
| _CDS3 cds; | _CDS3 cds; |
| } ver3; | } ATTRIBUTE_PACKED ver3; |
| struct { | struct { |
| _SDA4 sda; | _SDA4 sda; |
| _CDS4 cds; | _CDS4 cds; |
| } ver4; | } ATTRIBUTE_PACKED ver4; |
| } _SDACDS, *SDACDS; | } _SDACDS, *SDACDS; |
| #ifndef __GNUC__ | |
| #pragma pack(pop) | #pragma pack(pop) |
| #else | |
| #undef ATTRIBUTE_PACKED | |
| #if 0 | |
| /* List of Lists Structure */ // SysInitVarsとも呼ばれるね〜 | |
| typedef struct { | |
| BYTE f1[22]; | |
| LPCDS cds_ptr; | |
| BYTE f2[7]; | |
| BYTE last_drive; | |
| } LOL, *LPLOL; // (see int2152) | |
| typedef struct { | |
| WORD es, ds, di, si, bp, sp; | |
| union { | |
| struct { WORD bx, dx, cx, ax; }; | |
| struct { BYTE bl, bh, dl, dh, cl, ch, al, ah; }; | |
| }; | |
| WORD ip, cs, flags; | |
| } INTR_REGS; | |
| #endif | #endif |