Commit 3464c5899891efa0b7cb86b5a8090da50a3e6c88
1 parent
2f062c72
Add INTC controller prototype, by Magnus Damm.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3271 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
51 additions
and
0 deletions
hw/sh7750.c
... | ... | @@ -51,6 +51,14 @@ typedef struct SH7750State { |
51 | 51 | uint16_t periph_pdtrb; /* Imposed by the peripherals */ |
52 | 52 | uint16_t periph_portdirb; /* Direction seen from the peripherals */ |
53 | 53 | sh7750_io_device *devices[NB_DEVICES]; /* External peripherals */ |
54 | + | |
55 | + uint16_t icr; | |
56 | + uint16_t ipra; | |
57 | + uint16_t iprb; | |
58 | + uint16_t iprc; | |
59 | + uint16_t iprd; | |
60 | + uint32_t intpri00; | |
61 | + uint32_t intmsk00; | |
54 | 62 | /* Cache */ |
55 | 63 | uint32_t ccr; |
56 | 64 | |
... | ... | @@ -207,6 +215,16 @@ static uint32_t sh7750_mem_readw(void *opaque, target_phys_addr_t addr) |
207 | 215 | return porta_lines(s); |
208 | 216 | case SH7750_PDTRB_A7: |
209 | 217 | return portb_lines(s); |
218 | + case 0x1fd00000: | |
219 | + return s->icr; | |
220 | + case 0x1fd00004: | |
221 | + return s->ipra; | |
222 | + case 0x1fd00008: | |
223 | + return s->iprb; | |
224 | + case 0x1fd0000c: | |
225 | + return s->iprc; | |
226 | + case 0x1fd00010: | |
227 | + return s->iprd; | |
210 | 228 | default: |
211 | 229 | error_access("word read", addr); |
212 | 230 | assert(0); |
... | ... | @@ -242,6 +260,14 @@ static uint32_t sh7750_mem_readl(void *opaque, target_phys_addr_t addr) |
242 | 260 | return 0x00110000; /* Minimum caches */ |
243 | 261 | case 0x1f000044: /* Processor version PRR */ |
244 | 262 | return 0x00000100; /* SH7750R */ |
263 | + case 0x1e080000: | |
264 | + return s->intpri00; | |
265 | + case 0x1e080020: | |
266 | + return 0; | |
267 | + case 0x1e080040: | |
268 | + return s->intmsk00; | |
269 | + case 0x1e080060: | |
270 | + return 0; | |
245 | 271 | default: |
246 | 272 | error_access("long read", addr); |
247 | 273 | assert(0); |
... | ... | @@ -300,6 +326,21 @@ static void sh7750_mem_writew(void *opaque, target_phys_addr_t addr, |
300 | 326 | assert(0); |
301 | 327 | } |
302 | 328 | return; |
329 | + case 0x1fd00000: | |
330 | + s->icr = mem_value; | |
331 | + return; | |
332 | + case 0x1fd00004: | |
333 | + s->ipra = mem_value; | |
334 | + return; | |
335 | + case 0x1fd00008: | |
336 | + s->iprb = mem_value; | |
337 | + return; | |
338 | + case 0x1fd0000c: | |
339 | + s->iprc = mem_value; | |
340 | + return; | |
341 | + case 0x1fd00010: | |
342 | + s->iprd = mem_value; | |
343 | + return; | |
303 | 344 | default: |
304 | 345 | error_access("word write", addr); |
305 | 346 | assert(0); |
... | ... | @@ -364,6 +405,16 @@ static void sh7750_mem_writel(void *opaque, target_phys_addr_t addr, |
364 | 405 | case SH7750_CCR_A7: |
365 | 406 | s->ccr = mem_value; |
366 | 407 | return; |
408 | + case 0x1e080000: | |
409 | + s->intpri00 = mem_value; | |
410 | + return; | |
411 | + case 0x1e080020: | |
412 | + return; | |
413 | + case 0x1e080040: | |
414 | + s->intmsk00 = mem_value; | |
415 | + return; | |
416 | + case 0x1e080060: | |
417 | + return; | |
367 | 418 | default: |
368 | 419 | error_access("long write", addr); |
369 | 420 | assert(0); | ... | ... |