|
|
1.1 root 1: #include "main.h"
2: #include "configuration.h"
3: #include "m68000.h"
4: #include "dimension.h"
5: #include "sysdeps.h"
6: #include "nd_mem.h"
7: #include "nd_devs.h"
8: #include "nd_nbic.h"
9: #include "nd_sdl.h"
10:
11: #if ENABLE_DIMENSION
12:
13: /* NeXTdimension board and slot memory */
14: #define ND_BOARD_SIZE 0x10000000
15: #define ND_BOARD_MASK 0x0FFFFFFF
16: #define ND_BOARD_BITS 0xF0000000
17:
18: #define ND_SLOT_SIZE 0x01000000
19: #define ND_SLOT_MASK 0x00FFFFFF
20: #define ND_SLOT_BITS 0x0F000000
21:
22: #define ND_NBIC_SPACE 0xFFFFFFE8
23:
24:
25: /* NeXTdimension slot memory access */
26: Uint32 nd_slot_lget(Uint32 addr) {
27: addr |= ND_SLOT_BITS;
28:
29: if (addr<ND_NBIC_SPACE) {
30: return nd_longget(addr);
31: } else {
32: return nd_nbic_lget(addr);
33: }
34: }
35:
36: Uint16 nd_slot_wget(Uint32 addr) {
37: addr |= ND_SLOT_BITS;
38:
39: if (addr<ND_NBIC_SPACE) {
40: return nd_wordget(addr);
41: } else {
42: return nd_nbic_wget(addr);
43: }
44: }
45:
46: Uint8 nd_slot_bget(Uint32 addr) {
47: addr |= ND_SLOT_BITS;
48:
49: if (addr<ND_NBIC_SPACE) {
50: return nd_byteget(addr);
51: } else {
52: return nd_nbic_bget(addr);
53: }
54: }
55:
56: void nd_slot_lput(Uint32 addr, Uint32 l) {
57: addr |= ND_SLOT_BITS;
58:
59: if (addr<ND_NBIC_SPACE) {
60: nd_longput(addr, l);
61: } else {
62: nd_nbic_lput(addr, l);
63: }
64: }
65:
66: void nd_slot_wput(Uint32 addr, Uint16 w) {
67: addr |= ND_SLOT_BITS;
68:
69: if (addr<ND_NBIC_SPACE) {
70: nd_wordput(addr, w);
71: } else {
72: nd_nbic_wput(addr, w);
73: }
74: }
75:
76: void nd_slot_bput(Uint32 addr, Uint8 b) {
77: addr |= ND_SLOT_BITS;
78:
79: if (addr<ND_NBIC_SPACE) {
80: nd_byteput(addr, b);
81: } else {
82: nd_nbic_bput(addr, b);
83: }
84: }
85:
86: /* NeXTdimension board memory access */
87:
88: void nd_board_rd8_be(Uint32 addr, Uint32* val) {
89: addr |= ND_BOARD_BITS;
90: *((Uint8*)val) = nd_byteget(addr);
91: }
92:
93: void nd_board_rd16_be(Uint32 addr, Uint32* val) {
94: addr |= ND_BOARD_BITS;
95: *((Uint16*)val) = nd_wordget(addr);
96: }
97:
98: void nd_board_rd32_be(Uint32 addr, Uint32* val) {
99: addr |= ND_BOARD_BITS;
100: val[0] = nd_longget(addr);
101: }
102:
103: void nd_board_rd64_be(Uint32 addr, Uint32* val) {
104: addr |= ND_BOARD_BITS;
105: val[0] = nd_longget(addr+4);
106: val[1] = nd_longget(addr+0);
107: }
108:
109: void nd_board_rd128_be(Uint32 addr, Uint32* val) {
110: addr |= ND_BOARD_BITS;
111: val[0] = nd_longget(addr+4);
112: val[1] = nd_longget(addr+0);
113: val[2] = nd_longget(addr+12);
114: val[3] = nd_longget(addr+8);
115: }
116:
117: void nd_board_wr8_be(Uint32 addr, const Uint32* val) {
118: addr |= ND_BOARD_BITS;
119: nd_byteput(addr, *((Uint8*)val));
120: }
121:
122: void nd_board_wr16_be(Uint32 addr, const Uint32* val) {
123: addr |= ND_BOARD_BITS;
124: nd_wordput(addr, *((Uint16*)val));
125: }
126:
127: void nd_board_wr32_be(Uint32 addr, const Uint32* val) {
128: addr |= ND_BOARD_BITS;
129: nd_longput(addr, val[0]);
130: }
131:
132: void nd_board_wr64_be(Uint32 addr, const Uint32* val) {
133: addr |= ND_BOARD_BITS;
134: nd_longput(addr+4, val[0]);
135: nd_longput(addr+0, val[1]);
136: }
137:
138: void nd_board_wr128_be(Uint32 addr, const Uint32* val) {
139: addr |= ND_BOARD_BITS;
140: nd_longput(addr+4, val[0]);
141: nd_longput(addr+0, val[1]);
142: nd_longput(addr+12, val[2]);
143: nd_longput(addr+8, val[3]);
144: }
145:
146: void nd_board_rd8_le(Uint32 addr, Uint32* val) {
147: addr |= ND_BOARD_BITS;
148: *((Uint8*)val) = nd_byteget(addr^7);
149: }
150:
151: void nd_board_rd16_le(Uint32 addr, Uint32* val) {
152: addr |= ND_BOARD_BITS;
153: *((Uint16*)val) = nd_wordget(addr^6);
154: }
155:
156: void nd_board_rd32_le(Uint32 addr, Uint32* val) {
157: addr |= ND_BOARD_BITS;
158: val[0] = nd_longget(addr^4);
159: }
160:
161: void nd_board_rd64_le(Uint32 addr, Uint32* val) {
162: addr |= ND_BOARD_BITS;
163: val[0] = nd_longget(addr+0);
164: val[1] = nd_longget(addr+4);
165: }
166:
167: void nd_board_rd128_le(Uint32 addr, Uint32* val) {
168: addr |= ND_BOARD_BITS;
169: val[0] = nd_longget(addr+0);
170: val[1] = nd_longget(addr+4);
171: val[2] = nd_longget(addr+8);
172: val[3] = nd_longget(addr+12);
173: }
174:
175: void nd_board_wr8_le(Uint32 addr, const Uint32* val) {
176: addr |= ND_BOARD_BITS;
177: nd_byteput(addr^7, *((Uint8*)val));
178: }
179:
180: void nd_board_wr16_le(Uint32 addr, const Uint32* val) {
181: addr |= ND_BOARD_BITS;
182: nd_wordput(addr^6, *((Uint16*)val));
183: }
184:
185: void nd_board_wr32_le(Uint32 addr, const Uint32* val) {
186: addr |= ND_BOARD_BITS;
187: nd_longput(addr^4, val[0]);
188: }
189:
190: void nd_board_wr64_le(Uint32 addr, const Uint32* val) {
191: addr |= ND_BOARD_BITS;
192: nd_longput(addr+0, val[0]);
193: nd_longput(addr+4, val[1]);
194: }
195:
196: void nd_board_wr128_le(Uint32 addr, const Uint32* val) {
197: addr |= ND_BOARD_BITS;
198: nd_longput(addr+0, val[0]);
199: nd_longput(addr+4, val[1]);
200: nd_longput(addr+8, val[2]);
201: nd_longput(addr+12, val[3]);
202: }
203:
204: //------
205:
206: inline Uint32 nd_board_lget(Uint32 addr) {
207: addr |= ND_BOARD_BITS;
208: return nd_longget(addr);
209: }
210:
211: inline Uint16 nd_board_wget(Uint32 addr) {
212: addr |= ND_BOARD_BITS;
213: return nd_wordget(addr);
214: }
215:
216: inline Uint8 nd_board_bget(Uint32 addr) {
217: addr |= ND_BOARD_BITS;
218: return nd_byteget(addr);
219: }
220:
221: inline void nd_board_lput(Uint32 addr, Uint32 l) {
222: addr |= ND_BOARD_BITS;
223: nd_longput(addr, l);
224: }
225:
226: inline void nd_board_put64(Uint32 addr, Uint32 l0, Uint32 l1) {
227: addr |= ND_BOARD_BITS;
228: nd_longput(addr+4, l0);
229: nd_longput(addr+0, l1);
230: }
231:
232: inline void nd_board_put128(Uint32 addr, Uint32 l0, Uint32 l1, Uint32 l2, Uint32 l3) {
233: addr |= ND_BOARD_BITS;
234: nd_longput(addr+4, l0);
235: nd_longput(addr+0, l1);
236: nd_longput(addr+12, l2);
237: nd_longput(addr+8, l3);
238: }
239:
240: inline void nd_board_wput(Uint32 addr, Uint16 w) {
241: addr |= ND_BOARD_BITS;
242: nd_wordput(addr, w);
243: }
244:
245: inline void nd_board_bput(Uint32 addr, Uint8 b) {
246: addr |= ND_BOARD_BITS;
247: nd_byteput(addr, b);
248: }
249:
250: inline Uint8 nd_board_cs8get(Uint32 addr) {
251: addr |= ND_BOARD_BITS;
252: return nd_cs8get(addr);
253: }
254:
255: /* Reset function */
256:
257: void dimension_init(void) {
258: nd_i860_uninit();
259: nd_nbic_init();
260: nd_devs_init();
261: nd_memory_init();
262: nd_i860_init();
263: nd_sdl_init();
264: }
265:
266: void dimension_uninit(void) {
267: nd_i860_uninit();
268: nd_sdl_uninit();
269: }
270:
271: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.