Core commit. Compile and run on the OpenPandora
[mupen64plus-pandora.git] / source / mupen64plus-core / src / memory / memory.h
CommitLineData
451ab91e 1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2 * Mupen64plus - memory.h *
3 * Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
4 * Copyright (C) 2002 Hacktarux *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the *
18 * Free Software Foundation, Inc., *
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
20 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
21
22#ifndef MEMORY_H
23#define MEMORY_H
24
25#include "osal/preproc.h"
26
27int init_memory(int DoByteSwap);
28void free_memory(void);
29#define read_word_in_memory() readmem[address>>16]()
30#define read_byte_in_memory() readmemb[address>>16]()
31#define read_hword_in_memory() readmemh[address>>16]()
32#define read_dword_in_memory() readmemd[address>>16]()
33#define write_word_in_memory() writemem[address>>16]()
34#define write_byte_in_memory() writememb[address >>16]()
35#define write_hword_in_memory() writememh[address >>16]()
36#define write_dword_in_memory() writememd[address >>16]()
37extern unsigned int SP_DMEM[0x1000/4*2];
38extern unsigned char *SP_DMEMb;
39extern unsigned int *SP_IMEM;
40extern unsigned char *SP_IMEMb;
41extern unsigned int PIF_RAM[0x40/4];
42extern unsigned char *PIF_RAMb;
43
44extern ALIGN(16, unsigned int rdram[0x800000/4]);
45
46extern unsigned int address, word;
47extern unsigned char cpu_byte;
48extern unsigned short hword;
49extern unsigned long long dword, *rdword;
50
51extern void (*readmem[0x10000])(void);
52extern void (*readmemb[0x10000])(void);
53extern void (*readmemh[0x10000])(void);
54extern void (*readmemd[0x10000])(void);
55extern void (*writemem[0x10000])(void);
56extern void (*writememb[0x10000])(void);
57extern void (*writememh[0x10000])(void);
58extern void (*writememd[0x10000])(void);
59
60extern unsigned int *readrdramreg[0x10000];
61extern unsigned int *readrspreg[0x10000];
62extern unsigned int *readrsp[0x10000];
63extern unsigned int *readmi[0x10000];
64extern unsigned int *readvi[0x10000];
65extern unsigned int *readai[0x10000];
66extern unsigned int *readpi[0x10000];
67extern unsigned int *readri[0x10000];
68extern unsigned int *readsi[0x10000];
69extern unsigned int *readdp[0x10000];
70extern unsigned int *readdps[0x10000];
71
72typedef struct _RDRAM_register
73{
74 unsigned int rdram_config;
75 unsigned int rdram_device_id;
76 unsigned int rdram_delay;
77 unsigned int rdram_mode;
78 unsigned int rdram_ref_interval;
79 unsigned int rdram_ref_row;
80 unsigned int rdram_ras_interval;
81 unsigned int rdram_min_interval;
82 unsigned int rdram_addr_select;
83 unsigned int rdram_device_manuf;
84} RDRAM_register;
85
86typedef struct _SP_register
87{
88 unsigned int sp_mem_addr_reg;
89 unsigned int sp_dram_addr_reg;
90 unsigned int sp_rd_len_reg;
91 unsigned int sp_wr_len_reg;
92 unsigned int w_sp_status_reg;
93 unsigned int sp_status_reg;
94 unsigned int sp_dma_full_reg;
95 unsigned int sp_dma_busy_reg;
96 unsigned int sp_semaphore_reg;
97} SP_register;
98
99typedef struct _RSP_register
100{
101 unsigned int rsp_pc;
102 unsigned int rsp_ibist;
103} RSP_register;
104
105typedef struct _DPC_register
106{
107 unsigned int dpc_start;
108 unsigned int dpc_end;
109 unsigned int dpc_current;
110 unsigned int w_dpc_status;
111 unsigned int dpc_status;
112 unsigned int dpc_clock;
113 unsigned int dpc_bufbusy;
114 unsigned int dpc_pipebusy;
115 unsigned int dpc_tmem;
116} DPC_register;
117
118typedef struct _DPS_register
119{
120 unsigned int dps_tbist;
121 unsigned int dps_test_mode;
122 unsigned int dps_buftest_addr;
123 unsigned int dps_buftest_data;
124} DPS_register;
125
126typedef struct _mips_register
127{
128 unsigned int w_mi_init_mode_reg;
129 unsigned int mi_init_mode_reg;
130 unsigned int mi_version_reg;
131 unsigned int mi_intr_reg;
132 unsigned int mi_intr_mask_reg;
133 unsigned int w_mi_intr_mask_reg;
134} mips_register;
135
136typedef struct _VI_register
137{
138 unsigned int vi_status;
139 unsigned int vi_origin;
140 unsigned int vi_width;
141 unsigned int vi_v_intr;
142 unsigned int vi_current;
143 unsigned int vi_burst;
144 unsigned int vi_v_sync;
145 unsigned int vi_h_sync;
146 unsigned int vi_leap;
147 unsigned int vi_h_start;
148 unsigned int vi_v_start;
149 unsigned int vi_v_burst;
150 unsigned int vi_x_scale;
151 unsigned int vi_y_scale;
152 unsigned int vi_delay;
153} VI_register;
154
155typedef struct _AI_register
156{
157 unsigned int ai_dram_addr;
158 unsigned int ai_len;
159 unsigned int ai_control;
160 unsigned int ai_status;
161 unsigned int ai_dacrate;
162 unsigned int ai_bitrate;
163 unsigned int next_delay;
164 unsigned int next_len;
165 unsigned int current_delay;
166 unsigned int current_len;
167} AI_register;
168
169typedef struct _PI_register
170{
171 unsigned int pi_dram_addr_reg;
172 unsigned int pi_cart_addr_reg;
173 unsigned int pi_rd_len_reg;
174 unsigned int pi_wr_len_reg;
175 unsigned int read_pi_status_reg;
176 unsigned int pi_bsd_dom1_lat_reg;
177 unsigned int pi_bsd_dom1_pwd_reg;
178 unsigned int pi_bsd_dom1_pgs_reg;
179 unsigned int pi_bsd_dom1_rls_reg;
180 unsigned int pi_bsd_dom2_lat_reg;
181 unsigned int pi_bsd_dom2_pwd_reg;
182 unsigned int pi_bsd_dom2_pgs_reg;
183 unsigned int pi_bsd_dom2_rls_reg;
184} PI_register;
185
186typedef struct _RI_register
187{
188 unsigned int ri_mode;
189 unsigned int ri_config;
190 unsigned int ri_current_load;
191 unsigned int ri_select;
192 unsigned int ri_refresh;
193 unsigned int ri_latency;
194 unsigned int ri_error;
195 unsigned int ri_werror;
196} RI_register;
197
198typedef struct _SI_register
199{
200 unsigned int si_dram_addr;
201 unsigned int si_pif_addr_rd64b;
202 unsigned int si_pif_addr_wr64b;
203 unsigned int si_stat;
204} SI_register;
205
206extern RDRAM_register rdram_register;
207extern PI_register pi_register;
208extern mips_register MI_register;
209extern SP_register sp_register;
210extern SI_register si_register;
211extern VI_register vi_register;
212extern RSP_register rsp_register;
213extern RI_register ri_register;
214extern AI_register ai_register;
215extern DPC_register dpc_register;
216extern DPS_register dps_register;
217
218extern unsigned char *rdramb;
219
220#ifndef M64P_BIG_ENDIAN
221#define sl(mot) \
222( \
223((mot & 0x000000FF) << 24) | \
224((mot & 0x0000FF00) << 8) | \
225((mot & 0x00FF0000) >> 8) | \
226((mot & 0xFF000000) >> 24) \
227)
228
229#define S8 3
230#define S16 2
231#define Sh16 1
232
233#else
234
235#define sl(mot) mot
236#define S8 0
237#define S16 0
238#define Sh16 0
239
240#endif
241
242void read_nothing(void);
243void read_nothingh(void);
244void read_nothingb(void);
245void read_nothingd(void);
246void read_nomem(void);
247void read_nomemb(void);
248void read_nomemh(void);
249void read_nomemd(void);
250void read_rdram(void);
251void read_rdramb(void);
252void read_rdramh(void);
253void read_rdramd(void);
254void read_rdramFB(void);
255void read_rdramFBb(void);
256void read_rdramFBh(void);
257void read_rdramFBd(void);
258void read_rdramreg(void);
259void read_rdramregb(void);
260void read_rdramregh(void);
261void read_rdramregd(void);
262void read_rsp_mem(void);
263void read_rsp_memb(void);
264void read_rsp_memh(void);
265void read_rsp_memd(void);
266void read_rsp_reg(void);
267void read_rsp_regb(void);
268void read_rsp_regh(void);
269void read_rsp_regd(void);
270void read_rsp(void);
271void read_rspb(void);
272void read_rsph(void);
273void read_rspd(void);
274void read_dp(void);
275void read_dpb(void);
276void read_dph(void);
277void read_dpd(void);
278void read_dps(void);
279void read_dpsb(void);
280void read_dpsh(void);
281void read_dpsd(void);
282void read_mi(void);
283void read_mib(void);
284void read_mih(void);
285void read_mid(void);
286void read_vi(void);
287void read_vib(void);
288void read_vih(void);
289void read_vid(void);
290void read_ai(void);
291void read_aib(void);
292void read_aih(void);
293void read_aid(void);
294void read_pi(void);
295void read_pib(void);
296void read_pih(void);
297void read_pid(void);
298void read_ri(void);
299void read_rib(void);
300void read_rih(void);
301void read_rid(void);
302void read_si(void);
303void read_sib(void);
304void read_sih(void);
305void read_sid(void);
306void read_flashram_status(void);
307void read_flashram_statusb(void);
308void read_flashram_statush(void);
309void read_flashram_statusd(void);
310void read_rom(void);
311void read_romb(void);
312void read_romh(void);
313void read_romd(void);
314void read_pif(void);
315void read_pifb(void);
316void read_pifh(void);
317void read_pifd(void);
318
319void write_nothing(void);
320void write_nothingb(void);
321void write_nothingh(void);
322void write_nothingd(void);
323void write_nomem(void);
324void write_nomemb(void);
325void write_nomemd(void);
326void write_nomemh(void);
327void write_rdram(void);
328void write_rdramb(void);
329void write_rdramh(void);
330void write_rdramd(void);
331void write_rdramFB(void);
332void write_rdramFBb(void);
333void write_rdramFBh(void);
334void write_rdramFBd(void);
335void write_rdramreg(void);
336void write_rdramregb(void);
337void write_rdramregh(void);
338void write_rdramregd(void);
339void write_rsp_mem(void);
340void write_rsp_memb(void);
341void write_rsp_memh(void);
342void write_rsp_memd(void);
343void write_rsp_reg(void);
344void write_rsp_regb(void);
345void write_rsp_regh(void);
346void write_rsp_regd(void);
347void write_rsp(void);
348void write_rspb(void);
349void write_rsph(void);
350void write_rspd(void);
351void write_dp(void);
352void write_dpb(void);
353void write_dph(void);
354void write_dpd(void);
355void write_dps(void);
356void write_dpsb(void);
357void write_dpsh(void);
358void write_dpsd(void);
359void write_mi(void);
360void write_mib(void);
361void write_mih(void);
362void write_mid(void);
363void write_vi(void);
364void write_vib(void);
365void write_vih(void);
366void write_vid(void);
367void write_ai(void);
368void write_aib(void);
369void write_aih(void);
370void write_aid(void);
371void write_pi(void);
372void write_pib(void);
373void write_pih(void);
374void write_pid(void);
375void write_ri(void);
376void write_rib(void);
377void write_rih(void);
378void write_rid(void);
379void write_si(void);
380void write_sib(void);
381void write_sih(void);
382void write_sid(void);
383void write_flashram_dummy(void);
384void write_flashram_dummyb(void);
385void write_flashram_dummyh(void);
386void write_flashram_dummyd(void);
387void write_flashram_command(void);
388void write_flashram_commandb(void);
389void write_flashram_commandh(void);
390void write_flashram_commandd(void);
391void write_rom(void);
392void write_pif(void);
393void write_pifb(void);
394void write_pifh(void);
395void write_pifd(void);
396
397void make_w_sp_status_reg(void);
398void make_w_dpc_status(void);
399void make_w_mi_init_mode_reg(void);
400void update_MI_intr_mode_reg(void);
401void update_MI_init_mask_reg(void);
402void make_w_mi_intr_mask_reg(void);
403void update_ai_dacrate(unsigned int word);
404void update_vi_status(unsigned int word);
405void update_vi_width(unsigned int word);
406
407/* Returns a pointer to a block of contiguous memory
408 * Can access RDRAM, SP_DMEM, SP_IMEM and ROM, using TLB if necessary
409 * Useful for getting fast access to a zone with executable code. */
410unsigned int *fast_mem_access(unsigned int address);
411
412#endif
413