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