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