|
|
1.1 root 1: #include <u.h>
2: #include <libc.h>
3: #include <bio.h>
4: #include <mach.h>
5: /* table for selecting machine-dependent parameters */
6:
7: typedef struct machtab Machtab;
8:
9: struct machtab
10: {
11: char *name; /* machine name */
12: short type; /* executable type */
13: short boottype; /* bootable type */
14: int asstype; /* disassembler code */
15: Mach *mach; /* machine description */
16: Machdata *machdata; /* machine functions */
17: };
18:
19: extern Mach mmips, msparc, m68020, mi386, mi960;
20: extern Machdata mipsmach, sparcmach, m68020mach, i386mach, i960mach;
21:
22: /*
23: * machine selection table. machines with native disassemblers should
24: * follow the plan 9 variant in the table; native modes are selectable
25: * only by name.
26: */
27: Machtab machines[] =
28: {
29: { "68020", /*68020*/
30: F68020,
31: F68020B,
32: A68020,
33: &m68020,
34: &m68020mach, },
35: { "68020", /*Next 68040 bootable*/
36: F68020,
37: FNEXTB,
38: A68020,
39: &m68020,
40: &m68020mach, },
41: { "mips", /*plan 9 mips*/
42: FMIPS,
43: FMIPSB,
44: AMIPS,
45: &mmips,
46: &mipsmach, },
47: { "mipsco", /*native mips - must follow plan 9*/
48: FMIPS,
49: FMIPSB,
50: AMIPSCO,
51: &mmips,
52: &mipsmach, },
53: { "sparc", /*plan 9 sparc */
54: FSPARC,
55: FSPARCB,
56: ASPARC,
57: &msparc,
58: &sparcmach, },
59: { "sunsparc", /*native sparc - must follow plan 9*/
60: FSPARC,
61: FSPARCB,
62: ASUNSPARC,
63: &msparc,
64: &sparcmach, },
65: { "386", /*plan 9 386*/
66: FI386,
67: FI386B,
68: AI386,
69: &mi386,
70: &i386mach, },
71: { "86", /*8086 - a peach of a machine*/
72: FI386,
73: FI386B,
74: AI8086,
75: &mi386,
76: &i386mach, },
77: { "960", /*i960*/
78: FI960,
79: FI960B,
80: AI960,
81: &mi960,
82: &i960mach, },
83: { 0 }, /*the terminator*/
84: };
85:
86: /*
87: * select a machine by executable file type
88: */
89: void
90: machbytype(int type)
91: {
92: Machtab *mp;
93:
94: for (mp = machines; mp->name; mp++){
95: if (mp->type == type || mp->boottype == type) {
96: asstype = mp->asstype;
97: machdata = mp->machdata;
98: break;
99: }
100: }
101: }
102: /*
103: * select a machine by name
104: */
105: int
106: machbyname(char *name)
107: {
108: Machtab *mp;
109:
110: if (!name) {
111: asstype = AMIPS;
112: machdata = &mipsmach;
113: mach = &mmips;
114: return 1;
115: }
116: for (mp = machines; mp->name; mp++){
117: if (strcmp(mp->name, name) == 0) {
118: asstype = mp->asstype;
119: machdata = mp->machdata;
120: mach = mp->mach;
121: return 1;
122: }
123: }
124: return 0;
125: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.