summaryrefslogtreecommitdiff
path: root/apps/plugins/rockboy/mem.c
diff options
context:
space:
mode:
authorTom Ross <midgey@rockbox.org>2007-02-06 21:41:08 +0000
committerTom Ross <midgey@rockbox.org>2007-02-06 21:41:08 +0000
commit2882b26a996839f09956fa59617c63f2c3abac72 (patch)
treef7c4fbdc4857f6af11b30c1e7bdf467d43d5963e /apps/plugins/rockboy/mem.c
parent1026c0f5b26ef82e6acfc32e1fd74c5594e53619 (diff)
downloadrockbox-2882b26a996839f09956fa59617c63f2c3abac72.tar.gz
rockbox-2882b26a996839f09956fa59617c63f2c3abac72.zip
Major Rockboy update.
1) Adapt Rockboy to smaller screens (H10, X5, and iPod Nano). 2) Add the ability to use a preset palette on color targets. Choose 'Set Palette' from the main menu. 3) Clean up the code to remove any unused code and variables. 4) Changed tabs to spaces. 5) Disable reading and writing sound when sound is disabled. 6) Disbable writing to the RTC since it is not implemented yet. 7) Minor optimizations from WAC gnuboy CE and iBoy. 8) Massive clean up of code to make it appear consistent. 9) Change all C++ style comments to C style. 10) Completely reorganize dynarec. Add fixmes to all unimplemented opcodes. Add debug writes for all opcodes. Attempt to implement a few opcodes myself. 11) Silence some warnings when built using dynarec. 12) Minor reshuffling of IRAM, may or not offer a speed increase. 13) Include fixes found in the short-lived gnuboy CVS. All in all, there's about a 10% improvement on my test roms when sound is disabled and slight improvement with sound. Especially noticable when there are few sprites on screen and less action is occurring. See FS #6567. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12216 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/rockboy/mem.c')
-rw-r--r--apps/plugins/rockboy/mem.c119
1 files changed, 56 insertions, 63 deletions
diff --git a/apps/plugins/rockboy/mem.c b/apps/plugins/rockboy/mem.c
index 01a05d09ea..8c0bea0b83 100644
--- a/apps/plugins/rockboy/mem.c
+++ b/apps/plugins/rockboy/mem.c
@@ -12,7 +12,7 @@
12#include "sound.h" 12#include "sound.h"
13 13
14struct mbc mbc IBSS_ATTR; 14struct mbc mbc IBSS_ATTR;
15struct rom rom; 15struct rom rom IBSS_ATTR;
16struct ram ram; 16struct ram ram;
17 17
18 18
@@ -31,7 +31,7 @@ struct ram ram;
31void mem_updatemap() 31void mem_updatemap()
32{ 32{
33 int n; 33 int n;
34 byte **map; 34 static byte **map;
35 35
36 map = mbc.rmap; 36 map = mbc.rmap;
37 map[0x0] = rom.bank[0]; 37 map[0x0] = rom.bank[0];
@@ -46,16 +46,17 @@ void mem_updatemap()
46 map[0x7] = rom.bank[mbc.rombank] - 0x4000; 46 map[0x7] = rom.bank[mbc.rombank] - 0x4000;
47 } 47 }
48 else map[0x4] = map[0x5] = map[0x6] = map[0x7] = NULL; 48 else map[0x4] = map[0x5] = map[0x6] = map[0x7] = NULL;
49 if (0 && (R_STAT & 0x03) == 0x03) 49 if (R_VBK & 1)
50 { 50 {
51 map[0x8] = NULL; 51 map[0x8] = lcd.vbank[1] - 0x8000;
52 map[0x9] = NULL; 52 map[0x9] = lcd.vbank[1] - 0x8000;
53 } 53 }
54 else 54 else
55 { 55 {
56 map[0x8] = lcd.vbank[R_VBK & 1] - 0x8000; 56 map[0x8] = lcd.vbank[0]/*[R_VBK & 1]*/ - 0x8000;
57 map[0x9] = lcd.vbank[R_VBK & 1] - 0x8000; 57 map[0x9] = lcd.vbank[0]/*[R_VBK & 1]*/ - 0x8000;
58 } 58
59 }
59 if (mbc.enableram && !(rtc.sel&8)) 60 if (mbc.enableram && !(rtc.sel&8))
60 { 61 {
61 map[0xA] = ram.sbank[mbc.rambank] - 0xA000; 62 map[0xA] = ram.sbank[mbc.rambank] - 0xA000;
@@ -127,18 +128,18 @@ void ioreg_write(byte r, byte b)
127 break; 128 break;
128 case RI_BGP: 129 case RI_BGP:
129 if (R_BGP == b) break; 130 if (R_BGP == b) break;
130 pal_write_dmg(0, 0, b); 131 /* pal_write_dmg(0, 0, b); */ /*Disabled in iBoy and WAC-gnuboyCE */
131 pal_write_dmg(8, 1, b); 132 /* pal_write_dmg(8, 1, b); */ /*Disabled in iBoy and WAC-gnuboyCE */
132 R_BGP = b; 133 R_BGP = b;
133 break; 134 break;
134 case RI_OBP0: 135 case RI_OBP0:
135 if (R_OBP0 == b) break; 136 if (R_OBP0 == b) break;
136 pal_write_dmg(64, 2, b); 137 /* pal_write_dmg(64, 2, b); */ /*Disabled in iBoy and WAC-gnuboyCE */
137 R_OBP0 = b; 138 R_OBP0 = b;
138 break; 139 break;
139 case RI_OBP1: 140 case RI_OBP1:
140 if (R_OBP1 == b) break; 141 if (R_OBP1 == b) break;
141 pal_write_dmg(72, 3, b); 142 /* pal_write_dmg(72, 3, b); */ /*Disabled in iBoy and WAC-gnuboyCE */
142 R_OBP1 = b; 143 R_OBP1 = b;
143 break; 144 break;
144 case RI_IF: 145 case RI_IF:
@@ -166,7 +167,8 @@ void ioreg_write(byte r, byte b)
166 lcdc_change(b); 167 lcdc_change(b);
167 break; 168 break;
168 case RI_STAT: 169 case RI_STAT:
169 stat_write(b); 170 REG(r) = (REG(r) & 0x07) | (b & 0x78);
171 stat_trigger();
170 break; 172 break;
171 case RI_LYC: 173 case RI_LYC:
172 REG(r) = b; 174 REG(r) = b;
@@ -220,21 +222,6 @@ void ioreg_write(byte r, byte b)
220 hw_hdma_cmd(b); 222 hw_hdma_cmd(b);
221 break; 223 break;
222 } 224 }
223 switch (r)
224 {
225 case RI_BGP:
226 case RI_OBP0:
227 case RI_OBP1:
228 /* printf("palette reg %02X write %02X at LY=%02X\n", r, b, R_LY); */
229 case RI_HDMA1:
230 case RI_HDMA2:
231 case RI_HDMA3:
232 case RI_HDMA4:
233 case RI_HDMA5:
234 /* printf("HDMA %d: %02X\n", r - RI_HDMA1 + 1, b); */
235 break;
236 }
237 /* printf("reg %02X => %02X (%02X)\n", r, REG(r), b); */
238} 225}
239 226
240 227
@@ -410,29 +397,31 @@ void mbc_write(int a, byte b)
410 break; 397 break;
411 } 398 }
412 break; 399 break;
413 case MBC_HUC3: 400 case MBC_HUC3: /* FIXME - this is all guesswork -- is it right??? */
414 switch (ha & 0xE) 401 switch (ha & 0xE)
415 { 402 {
416 case 0x0: 403 case 0x0:
417 mbc.enableram = ((b & 0x0F) == 0x0A); 404 mbc.enableram = ((b & 0x0F) == 0x0A);
418 break; 405 break;
419 case 0x2: 406 case 0x2:
420 b &= 0x7F; 407 if (!b) b = 1;
421 mbc.rombank = b ? b : 1; 408 mbc.rombank = b;
422 break; 409 break;
423 case 0x4: 410 case 0x4:
424 rtc.sel = b & 0x0f; 411 if (mbc.model)
425 mbc.rambank = b & 0x03; 412 {
426 break; 413 mbc.rambank = b & 0x03;
427 case 0x6: 414 break;
428 rtc_latch(b); 415 }
429 break; 416 break;
430 } 417 case 0x6:
431 break; 418 mbc.model = b & 1;
432 } 419 break;
420 }
421 break;
422 }
433 mbc.rombank &= (mbc.romsize - 1); 423 mbc.rombank &= (mbc.romsize - 1);
434 mbc.rambank &= (mbc.ramsize - 1); 424 mbc.rambank &= (mbc.ramsize - 1);
435 /* printf("%02X\n", mbc.rombank); */
436 mem_updatemap(); 425 mem_updatemap();
437} 426}
438 427
@@ -494,7 +483,8 @@ void mem_write(int a, byte b)
494 /* return writehi(a & 0xFF, b); */ 483 /* return writehi(a & 0xFF, b); */
495 if (a >= 0xFF10 && a <= 0xFF3F) 484 if (a >= 0xFF10 && a <= 0xFF3F)
496 { 485 {
497 sound_write(a & 0xFF, b); 486 if(options.sound)
487 sound_write(a & 0xFF, b);
498 break; 488 break;
499 } 489 }
500 if ((a & 0xFF80) == 0xFF80 && a != 0xFFFF) 490 if ((a & 0xFF80) == 0xFF80 && a != 0xFFFF)
@@ -530,14 +520,12 @@ byte mem_read(int a)
530 case 0x8: 520 case 0x8:
531 /* if ((R_STAT & 0x03) == 0x03) return 0xFF; */ 521 /* if ((R_STAT & 0x03) == 0x03) return 0xFF; */
532 return lcd.vbank[R_VBK&1][a & 0x1FFF]; 522 return lcd.vbank[R_VBK&1][a & 0x1FFF];
533 case 0xA: 523 case 0xA:
534 if (!mbc.enableram && mbc.type == MBC_HUC3) 524 if (!mbc.enableram)
535 return 0x01; 525 return 0xFF;
536 if (!mbc.enableram) 526 if (rtc.sel&8)
537 return 0xFF; 527 return rtc.regs[rtc.sel&7];
538 if (rtc.sel&8) 528 return ram.sbank[mbc.rambank][a & 0x1FFF];
539 return rtc.regs[rtc.sel&7];
540 return ram.sbank[mbc.rambank][a & 0x1FFF];
541 case 0xC: 529 case 0xC:
542 if ((a & 0xF000) == 0xC000) 530 if ((a & 0xF000) == 0xC000)
543 return ram.ibank[0][a & 0x0FFF]; 531 return ram.ibank[0][a & 0x0FFF];
@@ -554,7 +542,12 @@ byte mem_read(int a)
554 /* return readhi(a & 0xFF); */ 542 /* return readhi(a & 0xFF); */
555 if (a == 0xFFFF) return REG(0xFF); 543 if (a == 0xFFFF) return REG(0xFF);
556 if (a >= 0xFF10 && a <= 0xFF3F) 544 if (a >= 0xFF10 && a <= 0xFF3F)
557 return sound_read(a & 0xFF); 545 {
546 if(options.sound)
547 return sound_read(a & 0xFF);
548 else
549 return 1;
550 }
558 if ((a & 0xFF80) == 0xFF80) 551 if ((a & 0xFF80) == 0xFF80)
559 return ram.hi[a & 0xFF]; 552 return ram.hi[a & 0xFF];
560 return ioreg_read(a & 0xFF); 553 return ioreg_read(a & 0xFF);