aboutsummaryrefslogtreecommitdiff
path: root/include/oasys.h
blob: 214095f4b53e3f27131019aee3f379c80024a841 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#define OASYS_MAX_SEC_COUNT 16
/* **** */


typedef struct {
  uint32_type  version;
  char create_date[12];
  char revision_date[12];
  uint32_type mod_count;
  uint32_type mod_tbl_offset;
  uint32_type sym_tbl_size;
  uint32_type sym_count;
  uint32_type sym_tbl_offset;
  uint32_type xref_count;
  uint32_type xref_lst_offset;
} oasys_archive_header_type;

typedef struct {
  char version[4];
  char create_date[12];
  char revision_date[12];
  char mod_count[4];
  char mod_tbl_offset[4];
  char sym_tbl_size[4];
  char sym_count[4];
  char sym_tbl_offset[4];
  char xref_count[4];
  char xref_lst_offset[4];
} oasys_external_archive_header_type;

typedef struct {
  int32_type mod_number;
  char mod_date[12];
  int32_type mod_size;
  int32_type dep_count;
  int32_type depee_count;
  int32_type file_offset;
  int32_type sect_count;
  char *module_name;

} oasys_module_table_type;


typedef struct {
  char mod_number[4];
  char mod_date[12];
  char mod_size[4];
  char dep_count[4];
  char depee_count[4];
  char sect_count[4];
  char file_offset[4];
  char mod_name[32];
} oasys_external_module_table_type;



typedef enum {
  oasys_record_is_end_enum = 0,
  oasys_record_is_data_enum = 1,
  oasys_record_is_symbol_enum = 2,
  oasys_record_is_header_enum = 3,
  oasys_record_is_named_section_enum = 4,
  oasys_record_is_com_enum = 5,
  oasys_record_is_debug_enum = 6,
  oasys_record_is_section_enum = 7,
  oasys_record_is_debug_file_enum = 8,
  oasys_record_is_module_enum = 9,
  oasys_record_is_local_enum = 10
} oasys_record_enum_type;

  

typedef struct {
  uint8_type length;
  int8_type check_sum;
  int8_type type;
  int8_type fill;
} oasys_record_header_type;

typedef struct {
  oasys_record_header_type header;
  uint8e_type relb;
  uint8e_type addr[4];
  uint8e_type data[256];
} oasys_data_record_type;

typedef struct {
  oasys_record_header_type header;
  int8_type version_number;
  int8_type rev_number;
  char module_name[26-6];
  char description[64-26];
} oasys_header_record_type;

#define OASYS_VERSION_NUMBER 0
#define OASYS_REV_NUMBER 0
typedef struct {
  oasys_record_header_type header;
  int8e_type relb;
  int8e_type value[4];
  int8e_type refno[2];
  char name[64];
} oasys_symbol_record_type;

typedef int8e_type relocation_byte;

#define RELOCATION_PCREL_BIT 0x80
#define RELOCATION_32BIT_BIT 0x40
#define RELOCATION_TYPE_BITS 0x30
#define RELOCATION_TYPE_ABS 0x00
#define RELOCATION_TYPE_REL 0x10
#define RELOCATION_TYPE_UND 0x20
#define RELOCATION_TYPE_COM 0x30
#define RELOCATION_SECT_BITS 0x0f

typedef struct 
{
  oasys_record_header_type header;
  uint8e_type relb;
  int8_type value[4];
  int8_type vma[4];
  int8_type fill[3];
} oasys_section_record_type;

typedef struct {
  oasys_record_header_type header;
  uint8e_type relb;
  int8e_type entry[4];
  int8e_type fill[2];
  int8e_type zero;
} oasys_end_record_type;



typedef union
{
  oasys_record_header_type header;
  oasys_data_record_type data;
  oasys_section_record_type section;
  oasys_symbol_record_type symbol;
  oasys_header_record_type first;
  oasys_end_record_type end;
  uint8e_type pad[256];
} oasys_record_union_type;