summaryrefslogtreecommitdiffstats
path: root/apps/plugins/rockboy
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
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')
-rw-r--r--apps/plugins/rockboy/Makefile7
-rw-r--r--apps/plugins/rockboy/Version5
-rw-r--r--apps/plugins/rockboy/cpu-gb.h24
-rw-r--r--apps/plugins/rockboy/cpu.c1363
-rw-r--r--apps/plugins/rockboy/cpucore.h469
-rw-r--r--apps/plugins/rockboy/debug.c1246
-rw-r--r--apps/plugins/rockboy/dynarec.c1946
-rw-r--r--apps/plugins/rockboy/emu.c39
-rw-r--r--apps/plugins/rockboy/emu.h2
-rw-r--r--apps/plugins/rockboy/events.c45
-rw-r--r--apps/plugins/rockboy/exports.c42
-rw-r--r--apps/plugins/rockboy/exports.h2
-rw-r--r--apps/plugins/rockboy/fastmem.c139
-rw-r--r--apps/plugins/rockboy/fastmem.h5
-rw-r--r--apps/plugins/rockboy/fb.h22
-rw-r--r--apps/plugins/rockboy/hw.c204
-rw-r--r--apps/plugins/rockboy/hw.h8
-rw-r--r--apps/plugins/rockboy/inflate.c514
-rw-r--r--apps/plugins/rockboy/input.h8
-rw-r--r--apps/plugins/rockboy/lcd-gb.h45
-rw-r--r--apps/plugins/rockboy/lcd.c273
-rw-r--r--apps/plugins/rockboy/lcdc.c225
-rw-r--r--apps/plugins/rockboy/loader.c485
-rw-r--r--apps/plugins/rockboy/loader.h10
-rw-r--r--apps/plugins/rockboy/main.c103
-rw-r--r--apps/plugins/rockboy/mem.c119
-rw-r--r--apps/plugins/rockboy/mem.h30
-rw-r--r--apps/plugins/rockboy/menu.c47
-rw-r--r--apps/plugins/rockboy/noise.h1028
-rw-r--r--apps/plugins/rockboy/palette-presets.h151
-rw-r--r--apps/plugins/rockboy/palette.c153
-rw-r--r--apps/plugins/rockboy/palette.h6
-rw-r--r--apps/plugins/rockboy/pcm.h8
-rw-r--r--apps/plugins/rockboy/rbsound.c64
-rw-r--r--apps/plugins/rockboy/rc.h62
-rw-r--r--apps/plugins/rockboy/rccmds.c122
-rw-r--r--apps/plugins/rockboy/rcvars.c211
-rw-r--r--apps/plugins/rockboy/rockboy.c23
-rw-r--r--apps/plugins/rockboy/rockmacros.h23
-rw-r--r--apps/plugins/rockboy/rtc-gb.h14
-rw-r--r--apps/plugins/rockboy/rtc.c176
-rw-r--r--apps/plugins/rockboy/save.c460
-rw-r--r--apps/plugins/rockboy/sound.c140
-rw-r--r--apps/plugins/rockboy/sound.h19
-rw-r--r--apps/plugins/rockboy/split.c59
-rw-r--r--apps/plugins/rockboy/split.h1
-rw-r--r--apps/plugins/rockboy/sys_rockbox.c129
47 files changed, 4876 insertions, 5400 deletions
diff --git a/apps/plugins/rockboy/Makefile b/apps/plugins/rockboy/Makefile
index e4c62666fb..2859936d15 100644
--- a/apps/plugins/rockboy/Makefile
+++ b/apps/plugins/rockboy/Makefile
@@ -18,11 +18,9 @@ endif
LINKFILE := $(OBJDIR)/link.lds
DEPFILE = $(OBJDIR)/dep-rockboy
-SRC = cpu.c emu.c events.c exports.c fastmem.c hw.c lcd.c lcdc.c loader.c \
- main.c mem.c rbsound.c rccmds.c rcvars.c rtc.c save.c sound.c split.c \
- sys_rockbox.c rockboy.c menu.c
+SRC = cpu.c emu.c events.c fastmem.c hw.c lcd.c lcdc.c loader.c main.c \
+ mem.c menu.c rbsound.c rockboy.c rtc.c save.c sound.c sys_rockbox.c
-#CFLAGS += -DGRAYSCALE
#CFLAGS += -DDYNAREC
#SRC += dynarec.c
@@ -30,7 +28,6 @@ SOURCES = $(SRC)
OBJS := $(SRC:%.c=$(OBJDIR)/%.o)
DIRS = .
-
ifndef SIMVER
ifneq (,$(findstring RECORDER,$(TARGET))) ## Archos recorder targets
LDS := archos.lds
diff --git a/apps/plugins/rockboy/Version b/apps/plugins/rockboy/Version
deleted file mode 100644
index 0b12c4271d..0000000000
--- a/apps/plugins/rockboy/Version
+++ /dev/null
@@ -1,5 +0,0 @@
-#define VERSION "1.0.3" /*
-VERSION = 1.0.3
-# */
-
-
diff --git a/apps/plugins/rockboy/cpu-gb.h b/apps/plugins/rockboy/cpu-gb.h
index dfb8734823..bbd6c84e59 100644
--- a/apps/plugins/rockboy/cpu-gb.h
+++ b/apps/plugins/rockboy/cpu-gb.h
@@ -10,24 +10,24 @@
union reg
{
- byte b[2][2];
- word w[2];
- un32 d; /* padding for alignment, carry */
+ byte b[2][2];
+ word w[2];
+ un32 d; /* padding for alignment, carry */
};
struct cpu
{
#ifdef DYNAREC
- union reg a,b,c,d,e,hl,f,sp,pc;
+ union reg a,b,c,d,e,hl,f,sp,pc;
#else
- union reg pc, sp, bc, de, hl, af;
+ union reg pc, sp, bc, de, hl, af;
#endif
- int ime, ima;
- int speed;
- int halt;
- int div, tim;
- int lcdc;
- int snd;
+ int ime, ima;
+ int speed;
+ int halt;
+ int div, tim;
+ int lcdc;
+ int snd;
};
extern struct cpu cpu;
@@ -54,6 +54,6 @@ void lcdc_advance(int cnt) ICODE_ATTR;
void sound_advance(int cnt) ICODE_ATTR;
void cpu_timers(int cnt) ICODE_ATTR;
int cpu_emulate(int cycles) ICODE_ATTR;
-inline int cpu_step(int max);
+inline int cpu_step(int max) ICODE_ATTR;
#endif
diff --git a/apps/plugins/rockboy/cpu.c b/apps/plugins/rockboy/cpu.c
index 3c295dcdf5..00cfc42684 100644
--- a/apps/plugins/rockboy/cpu.c
+++ b/apps/plugins/rockboy/cpu.c
@@ -17,19 +17,12 @@
struct cpu cpu IBSS_ATTR;
-
-
#define ZFLAG(n) ( (n) ? 0 : FZ )
#define PUSH(w) ( (SP -= 2), (writew(xSP, (w))) )
#define POP(w) ( ((w) = readw(xSP)), (SP += 2) )
-
-#define FETCH_OLD ( mbc.rmap[PC>>12] \
-? mbc.rmap[PC>>12][PC++] \
-: mem_read(PC++) )
-
#define FETCH (readb(PC++))
@@ -227,7 +220,7 @@ label: op(b); break;
#define RET ( POP(PC) )
#define EI ( IMA = 1 )
-#define DI ( cpu.halt = IMA = IME = 0 )
+#define DI ( IMA = IME = 0 )
@@ -246,127 +239,122 @@ int blockcount;
void cpu_reset(void)
{
- union reg acc;
+ union reg acc;
#ifdef DYNAREC
- int i;
- dynapointer=0;
+ int i;
+ dynapointer=0;
#endif
- cpu.speed = 0;
- cpu.halt = 0;
- cpu.div = 0;
- cpu.tim = 0;
- cpu.lcdc = 40;
-
- IME = 0;
- IMA = 0;
-
- PC = 0x0100;
- SP = 0xFFFE;
- W(acc) = 0x01B0;
- A=HB(acc);
- F=LB(acc);
- W(acc) = 0x0013;
- B=HB(acc);
- C=LB(acc);
- W(acc) = 0x00D8;
- D=HB(acc);
- E=LB(acc);
- HL = 0x014D;
-
- if (hw.cgb) A = 0x11;
- if (hw.gba) B = 0x01;
+ cpu.speed = 0;
+ cpu.halt = 0;
+ cpu.div = 0;
+ cpu.tim = 0;
+ cpu.lcdc = 40;
+
+ IME = 0;
+ IMA = 0;
+
+ PC = 0x0100;
+ SP = 0xFFFE;
+ W(acc) = 0x01B0;
+ A=HB(acc);
+ F=LB(acc);
+ W(acc) = 0x0013;
+ B=HB(acc);
+ C=LB(acc);
+ W(acc) = 0x00D8;
+ D=HB(acc);
+ E=LB(acc);
+ HL = 0x014D;
+
+ if (hw.cgb) A = 0x11;
#ifdef DYNAREC
- for(i=0;i<(1<<HASH_SIGNIFICANT_LOWER_BITS);i++)
- address_map[i]=0;
+ for(i=0;i<(1<<HASH_SIGNIFICANT_LOWER_BITS);i++)
+ address_map[i]=0;
#endif
}
void div_advance(int cnt)
{
- cpu.div += (cnt<<1);
- if (cpu.div >= 256)
- {
- R_DIV += (cpu.div >> 8);
- cpu.div &= 0xff;
- }
+ cpu.div += (cnt<<1);
+ if (cpu.div >= 256)
+ {
+ R_DIV += (cpu.div >> 8);
+ cpu.div &= 0xff;
+ }
}
void timer_advance(int cnt)
{
- int unit, tima;
-
- if (!(R_TAC & 0x04)) return;
-
- unit = ((-R_TAC) & 3) << 1;
- cpu.tim += (cnt<<unit);
-
- if (cpu.tim >= 512)
- {
- tima = R_TIMA + (cpu.tim >> 9);
- cpu.tim &= 0x1ff;
- if (tima >= 256)
- {
- hw_interrupt(IF_TIMER, IF_TIMER);
- hw_interrupt(0, IF_TIMER);
- }
- while (tima >= 256)
- tima = tima - 256 + R_TMA;
- R_TIMA = tima;
- }
+ int unit, tima;
+
+ if (!(R_TAC & 0x04)) return;
+
+ unit = ((-R_TAC) & 3) << 1;
+ cpu.tim += (cnt<<unit);
+
+ if (cpu.tim >= 512)
+ {
+ tima = R_TIMA + (cpu.tim >> 9);
+ cpu.tim &= 0x1ff;
+ if (tima >= 256)
+ {
+ hw_interrupt(IF_TIMER, IF_TIMER);
+ hw_interrupt(0, IF_TIMER);
+ }
+ while (tima >= 256)
+ tima = tima - 256 + R_TMA;
+ R_TIMA = tima;
+ }
}
void lcdc_advance(int cnt)
{
- cpu.lcdc -= cnt;
- if (cpu.lcdc <= 0) lcdc_trans();
+ cpu.lcdc -= cnt;
+ if (cpu.lcdc <= 0) lcdc_trans();
}
void sound_advance(int cnt)
{
- cpu.snd += cnt;
+ cpu.snd += cnt;
}
void cpu_timers(int cnt)
{
- div_advance(cnt << cpu.speed);
- timer_advance(cnt << cpu.speed);
- lcdc_advance(cnt);
- sound_advance(cnt);
+ div_advance(cnt << cpu.speed);
+ timer_advance(cnt << cpu.speed);
+ lcdc_advance(cnt);
+ if(options.sound)
+ sound_advance(cnt);
}
int cpu_idle(int max)
{
- int cnt, unit;
-
- if (!(cpu.halt && IME)) return 0;
- if (R_IF & R_IE)
- {
- cpu.halt = 0;
- return 0;
- }
-
- /* Make sure we don't miss lcdc status events! */
- if ((R_IE & (IF_VBLANK | IF_STAT)) && (max > cpu.lcdc))
- max = cpu.lcdc;
-
- /* If timer interrupt cannot happen, this is very simple! */
- if (!((R_IE & IF_TIMER) && (R_TAC & 0x04)))
- {
- cpu_timers(max);
- return max;
- }
-
- /* Figure out when the next timer interrupt will happen */
- unit = ((-R_TAC) & 3) << 1;
- cnt = (511 - cpu.tim + (1<<unit)) >> unit;
- cnt += (255 - R_TIMA) << (9 - unit);
-
- if (max < cnt)
- cnt = max;
-
- cpu_timers(cnt);
- return cnt;
+ int cnt, unit;
+
+ if (!(cpu.halt && IME)) return 0;
+
+ /* Make sure we don't miss lcdc status events! */
+ if ((R_IE & (IF_VBLANK | IF_STAT)) && (max > cpu.lcdc))
+ max = cpu.lcdc;
+
+ /* If timer interrupt cannot happen, this is very simple! */
+ if (!((R_IE & IF_TIMER) && (R_TAC & 0x04)))
+ {
+ cpu_timers(max);
+ return max;
+ }
+
+ /* Figure out when the next timer interrupt will happen */
+ unit = ((-R_TAC) & 3) << 1;
+ cnt = (511 - cpu.tim + (1<<unit)) >> unit;
+ cnt += (255 - R_TIMA) << (9 - unit);
+
+ if (max < cnt)
+ cnt = max;
+
+ cpu_timers(cnt);
+ return cnt;
}
#ifndef ASM_CPU_EMULATE
@@ -375,627 +363,636 @@ extern int debug_trace;
int cpu_emulate(int cycles)
{
- int i;
- byte op, cbop;
- int clen;
- static union reg acc;
- static byte b IBSS_ATTR;
- static word w IBSS_ATTR;
-
- i = cycles;
+ int i;
+ static byte op IBSS_ATTR;
+ static byte cbop IBSS_ATTR;
+ int clen;
+ static union reg acc IBSS_ATTR;
+ static byte b IBSS_ATTR;
+ static word w IBSS_ATTR;
+
+ i = cycles;
next:
#ifdef DYNAREC
- if(shut)
- return cycles-i;
+ if(shut)
+ return cycles-i;
#endif
- if ((clen = cpu_idle(i)))
- {
- i -= clen;
- if (i > 0) goto next;
- return cycles-i;
- }
-
- if (IME && (IF & IE))
- {
- PRE_INT;
- switch ((byte)(IF & IE))
- {
- case 0x01: case 0x03: case 0x05: case 0x07:
- case 0x09: case 0x0B: case 0x0D: case 0x0F:
- case 0x11: case 0x13: case 0x15: case 0x17:
- case 0x19: case 0x1B: case 0x1D: case 0x1F:
- THROW_INT(0); break;
- case 0x02: case 0x06: case 0x0A: case 0x0E:
- case 0x12: case 0x16: case 0x1A: case 0x1E:
- THROW_INT(1); break;
- case 0x04: case 0x0C: case 0x14: case 0x1C:
- THROW_INT(2); break;
- case 0x08: case 0x18:
- THROW_INT(3); break;
- case 0x10:
- THROW_INT(4); break;
- }
- }
- IME = IMA;
-
-/* if (debug_trace) debug_disassemble(PC, 1); */
+ if ((clen = cpu_idle(i)))
+ {
+ i -= clen;
+ if (i > 0) goto next;
+ return cycles-i;
+ }
+
+ if (IME && (IF & IE))
+ {
+ PRE_INT;
+ switch ((byte)(IF & IE))
+ {
+ case 0x01: case 0x03: case 0x05: case 0x07:
+ case 0x09: case 0x0B: case 0x0D: case 0x0F:
+ case 0x11: case 0x13: case 0x15: case 0x17:
+ case 0x19: case 0x1B: case 0x1D: case 0x1F:
+ THROW_INT(0); break;
+ case 0x02: case 0x06: case 0x0A: case 0x0E:
+ case 0x12: case 0x16: case 0x1A: case 0x1E:
+ THROW_INT(1); break;
+ case 0x04: case 0x0C: case 0x14: case 0x1C:
+ THROW_INT(2); break;
+ case 0x08: case 0x18:
+ THROW_INT(3); break;
+ case 0x10:
+ THROW_INT(4); break;
+ }
+ }
+ IME = IMA;
+
+/* if (debug_trace) debug_disassemble(PC, 1); */
#ifdef DYNAREC
- if(PC&0x8000) {
+ if(PC&0x8000) {
#endif
- op = FETCH;
- clen = cycles_table[op];
-
- switch(op)
- {
- case 0x00: /* NOP */
- case 0x40: /* LD B,B */
- case 0x49: /* LD C,C */
- case 0x52: /* LD D,D */
- case 0x5B: /* LD E,E */
- case 0x64: /* LD H,H */
- case 0x6D: /* LD L,L */
- case 0x7F: /* LD A,A */
- break;
-
- case 0x41: /* LD B,C */
- B = C; break;
- case 0x42: /* LD B,D */
- B = D; break;
- case 0x43: /* LD B,E */
- B = E; break;
- case 0x44: /* LD B,H */
- B = H; break;
- case 0x45: /* LD B,L */
- B = L; break;
- case 0x46: /* LD B,(HL) */
- B = readb(xHL); break;
- case 0x47: /* LD B,A */
- B = A; break;
-
- case 0x48: /* LD C,B */
- C = B; break;
- case 0x4A: /* LD C,D */
- C = D; break;
- case 0x4B: /* LD C,E */
- C = E; break;
- case 0x4C: /* LD C,H */
- C = H; break;
- case 0x4D: /* LD C,L */
- C = L; break;
- case 0x4E: /* LD C,(HL) */
- C = readb(xHL); break;
- case 0x4F: /* LD C,A */
- C = A; break;
-
- case 0x50: /* LD D,B */
- D = B; break;
- case 0x51: /* LD D,C */
- D = C; break;
- case 0x53: /* LD D,E */
- D = E; break;
- case 0x54: /* LD D,H */
- D = H; break;
- case 0x55: /* LD D,L */
- D = L; break;
- case 0x56: /* LD D,(HL) */
- D = readb(xHL); break;
- case 0x57: /* LD D,A */
- D = A; break;
-
- case 0x58: /* LD E,B */
- E = B; break;
- case 0x59: /* LD E,C */
- E = C; break;
- case 0x5A: /* LD E,D */
- E = D; break;
- case 0x5C: /* LD E,H */
- E = H; break;
- case 0x5D: /* LD E,L */
- E = L; break;
- case 0x5E: /* LD E,(HL) */
- E = readb(xHL); break;
- case 0x5F: /* LD E,A */
- E = A; break;
-
- case 0x60: /* LD H,B */
- H = B; break;
- case 0x61: /* LD H,C */
- H = C; break;
- case 0x62: /* LD H,D */
- H = D; break;
- case 0x63: /* LD H,E */
- H = E; break;
- case 0x65: /* LD H,L */
- H = L; break;
- case 0x66: /* LD H,(HL) */
- H = readb(xHL); break;
- case 0x67: /* LD H,A */
- H = A; break;
-
- case 0x68: /* LD L,B */
- L = B; break;
- case 0x69: /* LD L,C */
- L = C; break;
- case 0x6A: /* LD L,D */
- L = D; break;
- case 0x6B: /* LD L,E */
- L = E; break;
- case 0x6C: /* LD L,H */
- L = H; break;
- case 0x6E: /* LD L,(HL) */
- L = readb(xHL); break;
- case 0x6F: /* LD L,A */
- L = A; break;
-
- case 0x70: /* LD (HL),B */
- b = B; goto __LD_HL;
- case 0x71: /* LD (HL),C */
- b = C; goto __LD_HL;
- case 0x72: /* LD (HL),D */
- b = D; goto __LD_HL;
- case 0x73: /* LD (HL),E */
- b = E; goto __LD_HL;
- case 0x74: /* LD (HL),H */
- b = H; goto __LD_HL;
- case 0x75: /* LD (HL),L */
- b = L; goto __LD_HL;
- case 0x77: /* LD (HL),A */
- b = A;
- __LD_HL:
- writeb(xHL,b);
- break;
-
- case 0x78: /* LD A,B */
- A = B; break;
- case 0x79: /* LD A,C */
- A = C; break;
- case 0x7A: /* LD A,D */
- A = D; break;
- case 0x7B: /* LD A,E */
- A = E; break;
- case 0x7C: /* LD A,H */
- A = H; break;
- case 0x7D: /* LD A,L */
- A = L; break;
- case 0x7E: /* LD A,(HL) */
- A = readb(xHL); break;
-
- case 0x01: /* LD BC,imm */
+ op = FETCH;
+ clen = cycles_table[op];
+
+ switch(op)
+ {
+ case 0x00: /* NOP */
+ case 0x40: /* LD B,B */
+ case 0x49: /* LD C,C */
+ case 0x52: /* LD D,D */
+ case 0x5B: /* LD E,E */
+ case 0x64: /* LD H,H */
+ case 0x6D: /* LD L,L */
+ case 0x7F: /* LD A,A */
+ break;
+
+ case 0x41: /* LD B,C */
+ B = C; break;
+ case 0x42: /* LD B,D */
+ B = D; break;
+ case 0x43: /* LD B,E */
+ B = E; break;
+ case 0x44: /* LD B,H */
+ B = H; break;
+ case 0x45: /* LD B,L */
+ B = L; break;
+ case 0x46: /* LD B,(HL) */
+ B = readb(xHL); break;
+ case 0x47: /* LD B,A */
+ B = A; break;
+
+ case 0x48: /* LD C,B */
+ C = B; break;
+ case 0x4A: /* LD C,D */
+ C = D; break;
+ case 0x4B: /* LD C,E */
+ C = E; break;
+ case 0x4C: /* LD C,H */
+ C = H; break;
+ case 0x4D: /* LD C,L */
+ C = L; break;
+ case 0x4E: /* LD C,(HL) */
+ C = readb(xHL); break;
+ case 0x4F: /* LD C,A */
+ C = A; break;
+
+ case 0x50: /* LD D,B */
+ D = B; break;
+ case 0x51: /* LD D,C */
+ D = C; break;
+ case 0x53: /* LD D,E */
+ D = E; break;
+ case 0x54: /* LD D,H */
+ D = H; break;
+ case 0x55: /* LD D,L */
+ D = L; break;
+ case 0x56: /* LD D,(HL) */
+ D = readb(xHL); break;
+ case 0x57: /* LD D,A */
+ D = A; break;
+
+ case 0x58: /* LD E,B */
+ E = B; break;
+ case 0x59: /* LD E,C */
+ E = C; break;
+ case 0x5A: /* LD E,D */
+ E = D; break;
+ case 0x5C: /* LD E,H */
+ E = H; break;
+ case 0x5D: /* LD E,L */
+ E = L; break;
+ case 0x5E: /* LD E,(HL) */
+ E = readb(xHL); break;
+ case 0x5F: /* LD E,A */
+ E = A; break;
+
+ case 0x60: /* LD H,B */
+ H = B; break;
+ case 0x61: /* LD H,C */
+ H = C; break;
+ case 0x62: /* LD H,D */
+ H = D; break;
+ case 0x63: /* LD H,E */
+ H = E; break;
+ case 0x65: /* LD H,L */
+ H = L; break;
+ case 0x66: /* LD H,(HL) */
+ H = readb(xHL); break;
+ case 0x67: /* LD H,A */
+ H = A; break;
+
+ case 0x68: /* LD L,B */
+ L = B; break;
+ case 0x69: /* LD L,C */
+ L = C; break;
+ case 0x6A: /* LD L,D */
+ L = D; break;
+ case 0x6B: /* LD L,E */
+ L = E; break;
+ case 0x6C: /* LD L,H */
+ L = H; break;
+ case 0x6E: /* LD L,(HL) */
+ L = readb(xHL); break;
+ case 0x6F: /* LD L,A */
+ L = A; break;
+
+ case 0x70: /* LD (HL),B */
+ b = B; goto __LD_HL;
+ case 0x71: /* LD (HL),C */
+ b = C; goto __LD_HL;
+ case 0x72: /* LD (HL),D */
+ b = D; goto __LD_HL;
+ case 0x73: /* LD (HL),E */
+ b = E; goto __LD_HL;
+ case 0x74: /* LD (HL),H */
+ b = H; goto __LD_HL;
+ case 0x75: /* LD (HL),L */
+ b = L; goto __LD_HL;
+ case 0x77: /* LD (HL),A */
+ b = A;
+ __LD_HL:
+ writeb(xHL,b);
+ break;
+
+ case 0x78: /* LD A,B */
+ A = B; break;
+ case 0x79: /* LD A,C */
+ A = C; break;
+ case 0x7A: /* LD A,D */
+ A = D; break;
+ case 0x7B: /* LD A,E */
+ A = E; break;
+ case 0x7C: /* LD A,H */
+ A = H; break;
+ case 0x7D: /* LD A,L */
+ A = L; break;
+ case 0x7E: /* LD A,(HL) */
+ A = readb(xHL); break;
+
+ case 0x01: /* LD BC,imm */
#ifdef DYNAREC
- W(acc) = readw(xPC);
- B=HB(acc);
- C=LB(acc);
+ W(acc) = readw(xPC);
+ B=HB(acc);
+ C=LB(acc);
#else
- BC = readw(xPC);
+ BC = readw(xPC);
#endif
- PC += 2;
- break;
- case 0x11: /* LD DE,imm */
+ PC += 2;
+ break;
+ case 0x11: /* LD DE,imm */
#ifdef DYNAREC
- W(acc) = readw(xPC);
- D=HB(acc);
- E=LB(acc);
-#else
- DE = readw(xPC);
+ W(acc) = readw(xPC);
+ D=HB(acc);
+ E=LB(acc);
+#else
+ DE = readw(xPC);
#endif
- PC += 2;
- break;
- case 0x21: /* LD HL,imm */
- HL = readw(xPC); PC += 2; break;
- case 0x31: /* LD SP,imm */
- SP = readw(xPC); PC += 2; break;
-
- case 0x02: /* LD (BC),A */
- writeb(xBC, A); break;
- case 0x0A: /* LD A,(BC) */
- A = readb(xBC); break;
- case 0x12: /* LD (DE),A */
- writeb(xDE, A); break;
- case 0x1A: /* LD A,(DE) */
- A = readb(xDE); break;
-
- case 0x22: /* LDI (HL),A */
- writeb(xHL, A); HL++; break;
- case 0x2A: /* LDI A,(HL) */
- A = readb(xHL); HL++; break;
- case 0x32: /* LDD (HL),A */
- writeb(xHL, A); HL--; break;
- case 0x3A: /* LDD A,(HL) */
- A = readb(xHL); HL--; break;
-
- case 0x06: /* LD B,imm */
- B = FETCH; break;
- case 0x0E: /* LD C,imm */
- C = FETCH; break;
- case 0x16: /* LD D,imm */
- D = FETCH; break;
- case 0x1E: /* LD E,imm */
- E = FETCH; break;
- case 0x26: /* LD H,imm */
- H = FETCH; break;
- case 0x2E: /* LD L,imm */
- L = FETCH; break;
- case 0x36: /* LD (HL),imm */
- b = FETCH; writeb(xHL, b); break;
- case 0x3E: /* LD A,imm */
- A = FETCH; break;
-
- case 0x08: /* LD (imm),SP */
- writew(readw(xPC), SP); PC += 2; break;
- case 0xEA: /* LD (imm),A */
- writeb(readw(xPC), A); PC += 2; break;
-
- case 0xE0: /* LDH (imm),A */
- writehi(FETCH, A); break;
- case 0xE2: /* LDH (C),A */
- writehi(C, A); break;
- case 0xF0: /* LDH A,(imm) */
- A = readhi(FETCH); break;
- case 0xF2: /* LDH A,(C) (undocumented) */
- A = readhi(C); break;
-
-
- case 0xF8: /* LD HL,SP+imm */
- b = FETCH; LDHLSP(b); break;
- case 0xF9: /* LD SP,HL */
- SP = HL; break;
- case 0xFA: /* LD A,(imm) */
- A = readb(readw(xPC)); PC += 2; break;
-
- ALU_CASES(0x80, 0xC6, ADD, __ADD)
- ALU_CASES(0x88, 0xCE, ADC, __ADC)
- ALU_CASES(0x90, 0xD6, SUB, __SUB)
- ALU_CASES(0x98, 0xDE, SBC, __SBC)
- ALU_CASES(0xA0, 0xE6, AND, __AND)
- ALU_CASES(0xA8, 0xEE, XOR, __XOR)
- ALU_CASES(0xB0, 0xF6, OR, __OR)
- ALU_CASES(0xB8, 0xFE, CP, __CP)
-
- case 0x09: /* ADD HL,BC */
- w = BC; goto __ADDW;
- case 0x19: /* ADD HL,DE */
- w = DE; goto __ADDW;
- case 0x39: /* ADD HL,SP */
- w = SP; goto __ADDW;
- case 0x29: /* ADD HL,HL */
- w = HL;
- __ADDW:
- ADDW(w);
- break;
-
- case 0x04: /* INC B */
- INC(B); break;
- case 0x0C: /* INC C */
- INC(C); break;
- case 0x14: /* INC D */
- INC(D); break;
- case 0x1C: /* INC E */
- INC(E); break;
- case 0x24: /* INC H */
- INC(H); break;
- case 0x2C: /* INC L */
- INC(L); break;
- case 0x34: /* INC (HL) */
- b = readb(xHL);
- INC(b);
- writeb(xHL, b);
- break;
- case 0x3C: /* INC A */
- INC(A); break;
-
- case 0x03: /* INC BC */
+ PC += 2;
+ break;
+ case 0x21: /* LD HL,imm */
+ HL = readw(xPC); PC += 2; break;
+ case 0x31: /* LD SP,imm */
+ SP = readw(xPC); PC += 2; break;
+
+ case 0x02: /* LD (BC),A */
+ writeb(xBC, A); break;
+ case 0x0A: /* LD A,(BC) */
+ A = readb(xBC); break;
+ case 0x12: /* LD (DE),A */
+ writeb(xDE, A); break;
+ case 0x1A: /* LD A,(DE) */
+ A = readb(xDE); break;
+
+ case 0x22: /* LDI (HL),A */
+ writeb(xHL, A); HL++; break;
+ case 0x2A: /* LDI A,(HL) */
+ A = readb(xHL); HL++; break;
+ case 0x32: /* LDD (HL),A */
+ writeb(xHL, A); HL--; break;
+ case 0x3A: /* LDD A,(HL) */
+ A = readb(xHL); HL--; break;
+
+ case 0x06: /* LD B,imm */
+ B = FETCH; break;
+ case 0x0E: /* LD C,imm */
+ C = FETCH; break;
+ case 0x16: /* LD D,imm */
+ D = FETCH; break;
+ case 0x1E: /* LD E,imm */
+ E = FETCH; break;
+ case 0x26: /* LD H,imm */
+ H = FETCH; break;
+ case 0x2E: /* LD L,imm */
+ L = FETCH; break;
+ case 0x36: /* LD (HL),imm */
+ b = FETCH; writeb(xHL, b); break;
+ case 0x3E: /* LD A,imm */
+ A = FETCH; break;
+
+ case 0x08: /* LD (imm),SP */
+ writew(readw(xPC), SP); PC += 2; break;
+ case 0xEA: /* LD (imm),A */
+ writeb(readw(xPC), A); PC += 2; break;
+
+ case 0xE0: /* LDH (imm),A */
+ writehi(FETCH, A); break;
+ case 0xE2: /* LDH (C),A */
+ writehi(C, A); break;
+ case 0xF0: /* LDH A,(imm) */
+ A = readhi(FETCH); break;
+ case 0xF2: /* LDH A,(C) (undocumented) */
+ A = readhi(C); break;
+
+
+ case 0xF8: /* LD HL,SP+imm */
+ b = FETCH; LDHLSP(b); break;
+ case 0xF9: /* LD SP,HL */
+ SP = HL; break;
+ case 0xFA: /* LD A,(imm) */
+ A = readb(readw(xPC)); PC += 2; break;
+
+ ALU_CASES(0x80, 0xC6, ADD, __ADD)
+ ALU_CASES(0x88, 0xCE, ADC, __ADC)
+ ALU_CASES(0x90, 0xD6, SUB, __SUB)
+ ALU_CASES(0x98, 0xDE, SBC, __SBC)
+ ALU_CASES(0xA0, 0xE6, AND, __AND)
+ ALU_CASES(0xA8, 0xEE, XOR, __XOR)
+ ALU_CASES(0xB0, 0xF6, OR, __OR)
+ ALU_CASES(0xB8, 0xFE, CP, __CP)
+
+ case 0x09: /* ADD HL,BC */
+ w = BC; goto __ADDW;
+ case 0x19: /* ADD HL,DE */
+ w = DE; goto __ADDW;
+ case 0x39: /* ADD HL,SP */
+ w = SP; goto __ADDW;
+ case 0x29: /* ADD HL,HL */
+ w = HL;
+ __ADDW:
+ ADDW(w);
+ break;
+
+ case 0x04: /* INC B */
+ INC(B); break;
+ case 0x0C: /* INC C */
+ INC(C); break;
+ case 0x14: /* INC D */
+ INC(D); break;
+ case 0x1C: /* INC E */
+ INC(E); break;
+ case 0x24: /* INC H */
+ INC(H); break;
+ case 0x2C: /* INC L */
+ INC(L); break;
+ case 0x34: /* INC (HL) */
+ b = readb(xHL);
+ INC(b);
+ writeb(xHL, b);
+ break;
+ case 0x3C: /* INC A */
+ INC(A); break;
+
+ case 0x03: /* INC BC */
#ifdef DYNAREC
- W(acc)=((B<<8)|C)+1;
- B=HB(acc);
- C=LB(acc);
+ W(acc)=((B<<8)|C)+1;
+ B=HB(acc);
+ C=LB(acc);
#else
- INCW(BC);
+ INCW(BC);
#endif
- break;
- case 0x13: /* INC DE */
+ break;
+ case 0x13: /* INC DE */
#ifdef DYNAREC
- W(acc)=((D<<8)|E)+1;
- D=HB(acc);
- E=LB(acc);
+ W(acc)=((D<<8)|E)+1;
+ D=HB(acc);
+ E=LB(acc);
#else
- INCW(DE);
+ INCW(DE);
#endif
- break;
- case 0x23: /* INC HL */
- INCW(HL); break;
- case 0x33: /* INC SP */
- INCW(SP); break;
-
- case 0x05: /* DEC B */
- DEC(B); break;
- case 0x0D: /* DEC C */
- DEC(C); break;
- case 0x15: /* DEC D */
- DEC(D); break;
- case 0x1D: /* DEC E */
- DEC(E); break;
- case 0x25: /* DEC H */
- DEC(H); break;
- case 0x2D: /* DEC L */
- DEC(L); break;
- case 0x35: /* DEC (HL) */
- b = readb(xHL);
- DEC(b);
- writeb(xHL, b);
- break;
- case 0x3D: /* DEC A */
- DEC(A); break;
-
- case 0x0B: /* DEC BC */
+ break;
+ case 0x23: /* INC HL */
+ INCW(HL); break;
+ case 0x33: /* INC SP */
+ INCW(SP); break;
+
+ case 0x05: /* DEC B */
+ DEC(B); break;
+ case 0x0D: /* DEC C */
+ DEC(C); break;
+ case 0x15: /* DEC D */
+ DEC(D); break;
+ case 0x1D: /* DEC E */
+ DEC(E); break;
+ case 0x25: /* DEC H */
+ DEC(H); break;
+ case 0x2D: /* DEC L */
+ DEC(L); break;
+ case 0x35: /* DEC (HL) */
+ b = readb(xHL);
+ DEC(b);
+ writeb(xHL, b);
+ break;
+ case 0x3D: /* DEC A */
+ DEC(A); break;
+
+ case 0x0B: /* DEC BC */
#ifdef DYNAREC
- W(acc)=((B<<8)|C)-1;
- B=HB(acc);
- C=LB(acc);
+ W(acc)=((B<<8)|C)-1;
+ B=HB(acc);
+ C=LB(acc);
#else
- DECW(BC);
+ DECW(BC);
#endif
- break;
- case 0x1B: /* DEC DE */
+ break;
+ case 0x1B: /* DEC DE */
#ifdef DYNAREC
- W(acc)=((D<<8)|E)-1;
- D=HB(acc);
- E=LB(acc);
-#else
- DECW(DE);
+ W(acc)=((D<<8)|E)-1;
+ D=HB(acc);
+ E=LB(acc);
+#else
+ DECW(DE);
#endif
- break;
- case 0x2B: /* DEC HL */
- DECW(HL); break;
- case 0x3B: /* DEC SP */
- DECW(SP); break;
-
- case 0x07: /* RLCA */
- RLCA(A); break;
- case 0x0F: /* RRCA */
- RRCA(A); break;
- case 0x17: /* RLA */
- RLA(A); break;
- case 0x1F: /* RRA */
- RRA(A); break;
-
- case 0x27: /* DAA */
- DAA; break;
- case 0x2F: /* CPL */
- CPL(A); break;
-
- case 0x18: /* JR */
- __JR:
- JR; break;
- case 0x20: /* JR NZ */
- if (!(F&FZ)) goto __JR; NOJR; break;
- case 0x28: /* JR Z */
- if (F&FZ) goto __JR; NOJR; break;
- case 0x30: /* JR NC */
- if (!(F&FC)) goto __JR; NOJR; break;
- case 0x38: /* JR C */
- if (F&FC) goto __JR; NOJR; break;
-
- case 0xC3: /* JP */
- __JP:
- JP; break;
- case 0xC2: /* JP NZ */
- if (!(F&FZ)) goto __JP; NOJP; break;
- case 0xCA: /* JP Z */
- if (F&FZ) goto __JP; NOJP; break;
- case 0xD2: /* JP NC */
- if (!(F&FC)) goto __JP; NOJP; break;
- case 0xDA: /* JP C */
- if (F&FC) goto __JP; NOJP; break;
- case 0xE9: /* JP HL */
- PC = HL; break;
-
- case 0xC9: /* RET */
- __RET:
- RET; break;
- case 0xC0: /* RET NZ */
- if (!(F&FZ)) goto __RET; NORET; break;
- case 0xC8: /* RET Z */
- if (F&FZ) goto __RET; NORET; break;
- case 0xD0: /* RET NC */
- if (!(F&FC)) goto __RET; NORET; break;
- case 0xD8: /* RET C */
- if (F&FC) goto __RET; NORET; break;
- case 0xD9: /* RETI */
- IME = IMA = 1; goto __RET;
-
- case 0xCD: /* CALL */
- __CALL:
- CALL; break;
- case 0xC4: /* CALL NZ */
- if (!(F&FZ)) goto __CALL; NOCALL; break;
- case 0xCC: /* CALL Z */
- if (F&FZ) goto __CALL; NOCALL; break;
- case 0xD4: /* CALL NC */
- if (!(F&FC)) goto __CALL; NOCALL; break;
- case 0xDC: /* CALL C */
- if (F&FC) goto __CALL; NOCALL; break;
-
- case 0xC7: /* RST 0 */
- b = 0x00; goto __RST;
- case 0xCF: /* RST 8 */
- b = 0x08; goto __RST;
- case 0xD7: /* RST 10 */
- b = 0x10; goto __RST;
- case 0xDF: /* RST 18 */
- b = 0x18; goto __RST;
- case 0xE7: /* RST 20 */
- b = 0x20; goto __RST;
- case 0xEF: /* RST 28 */
- b = 0x28; goto __RST;
- case 0xF7: /* RST 30 */
- b = 0x30; goto __RST;
- case 0xFF: /* RST 38 */
- b = 0x38;
- __RST:
- RST(b); break;
-
- case 0xC1: /* POP BC */
+ break;
+ case 0x2B: /* DEC HL */
+ DECW(HL); break;
+ case 0x3B: /* DEC SP */
+ DECW(SP); break;
+
+ case 0x07: /* RLCA */
+ RLCA(A); break;
+ case 0x0F: /* RRCA */
+ RRCA(A); break;
+ case 0x17: /* RLA */
+ RLA(A); break;
+ case 0x1F: /* RRA */
+ RRA(A); break;
+
+ case 0x27: /* DAA */
+ DAA; break;
+ case 0x2F: /* CPL */
+ CPL(A); break;
+
+ case 0x18: /* JR */
+ __JR:
+ JR; break;
+ case 0x20: /* JR NZ */
+ if (!(F&FZ)) goto __JR; NOJR; break;
+ case 0x28: /* JR Z */
+ if (F&FZ) goto __JR; NOJR; break;
+ case 0x30: /* JR NC */
+ if (!(F&FC)) goto __JR; NOJR; break;
+ case 0x38: /* JR C */
+ if (F&FC) goto __JR; NOJR; break;
+
+ case 0xC3: /* JP */
+ __JP:
+ JP; break;
+ case 0xC2: /* JP NZ */
+ if (!(F&FZ)) goto __JP; NOJP; break;
+ case 0xCA: /* JP Z */
+ if (F&FZ) goto __JP; NOJP; break;
+ case 0xD2: /* JP NC */
+ if (!(F&FC)) goto __JP; NOJP; break;
+ case 0xDA: /* JP C */
+ if (F&FC) goto __JP; NOJP; break;
+ case 0xE9: /* JP HL */
+ PC = HL; break;
+
+ case 0xC9: /* RET */
+ __RET:
+ RET; break;
+ case 0xC0: /* RET NZ */
+ if (!(F&FZ)) goto __RET; NORET; break;
+ case 0xC8: /* RET Z */
+ if (F&FZ) goto __RET; NORET; break;
+ case 0xD0: /* RET NC */
+ if (!(F&FC)) goto __RET; NORET; break;
+ case 0xD8: /* RET C */
+ if (F&FC) goto __RET; NORET; break;
+ case 0xD9: /* RETI */
+ IME = IMA = 1; goto __RET;
+
+ case 0xCD: /* CALL */
+ __CALL:
+ CALL; break;
+ case 0xC4: /* CALL NZ */
+ if (!(F&FZ)) goto __CALL; NOCALL; break;
+ case 0xCC: /* CALL Z */
+ if (F&FZ) goto __CALL; NOCALL; break;
+ case 0xD4: /* CALL NC */
+ if (!(F&FC)) goto __CALL; NOCALL; break;
+ case 0xDC: /* CALL C */
+ if (F&FC) goto __CALL; NOCALL; break;
+
+ case 0xC7: /* RST 0 */
+ b = 0x00; goto __RST;
+ case 0xCF: /* RST 8 */
+ b = 0x08; goto __RST;
+ case 0xD7: /* RST 10 */
+ b = 0x10; goto __RST;
+ case 0xDF: /* RST 18 */
+ b = 0x18; goto __RST;
+ case 0xE7: /* RST 20 */
+ b = 0x20; goto __RST;
+ case 0xEF: /* RST 28 */
+ b = 0x28; goto __RST;
+ case 0xF7: /* RST 30 */
+ b = 0x30; goto __RST;
+ case 0xFF: /* RST 38 */
+ b = 0x38;
+ __RST:
+ RST(b); break;
+
+ case 0xC1: /* POP BC */
#ifdef DYNAREC
- POP(W(acc));
- B=HB(acc);
- C=LB(acc);
+ POP(W(acc));
+ B=HB(acc);
+ C=LB(acc);
#else
- POP(BC);
+ POP(BC);
#endif
- break;
- case 0xC5: /* PUSH BC */
- PUSH(BC); break;
- case 0xD1: /* POP DE */
+ break;
+ case 0xC5: /* PUSH BC */
+ PUSH(BC); break;
+ case 0xD1: /* POP DE */
#ifdef DYNAREC
- POP(W(acc));
- D=HB(acc);
- E=LB(acc);
+ POP(W(acc));
+ D=HB(acc);
+ E=LB(acc);
#else
- POP(DE);
+ POP(DE);
#endif
- break;
- case 0xD5: /* PUSH DE */
- PUSH(DE); break;
- case 0xE1: /* POP HL */
- POP(HL); break;
- case 0xE5: /* PUSH HL */
- PUSH(HL); break;
- case 0xF1: /* POP AF */
+ break;
+ case 0xD5: /* PUSH DE */
+ PUSH(DE); break;
+ case 0xE1: /* POP HL */
+ POP(HL); break;
+ case 0xE5: /* PUSH HL */
+ PUSH(HL); break;
+ case 0xF1: /* POP AF */
#ifdef DYNAREC
- POP(W(acc));
- A=HB(acc);
- F=LB(acc);
+ POP(W(acc));
+ A=HB(acc);
+ F=LB(acc);
#else
- POP(AF);
- break;
+ POP(AF);
+ break;
#endif
- case 0xF5: /* PUSH AF */
- PUSH(AF); break;
-
- case 0xE8: /* ADD SP,imm */
- b = FETCH; ADDSP(b); break;
-
- case 0xF3: /* DI */
- DI; break;
- case 0xFB: /* EI */
- EI; break;
-
- case 0x37: /* SCF */
- SCF; break;
- case 0x3F: /* CCF */
- CCF; break;
-
- case 0x10: /* STOP */
- PC++;
- if (R_KEY1 & 1)
- {
- cpu.speed = cpu.speed ^ 1;
- R_KEY1 = (R_KEY1 & 0x7E) | (cpu.speed << 7);
- break;
- }
- /* NOTE - we do not implement dmg STOP whatsoever */
- break;
-
- case 0x76: /* HALT */
- cpu.halt = 1;
- break;
-
- case 0xCB: /* CB prefix */
- cbop = FETCH;
- clen = cb_cycles_table[cbop];
- switch (cbop)
- {
- CB_REG_CASES(B, 0);
- CB_REG_CASES(C, 1);
- CB_REG_CASES(D, 2);
- CB_REG_CASES(E, 3);
- CB_REG_CASES(H, 4);
- CB_REG_CASES(L, 5);
- CB_REG_CASES(A, 7);
- default:
- b = readb(xHL);
- switch(cbop)
- {
- CB_REG_CASES(b, 6);
- }
- if ((cbop & 0xC0) != 0x40) /* exclude BIT */
- writeb(xHL, b);
- break;
- }
- break;
-
- default:
- die(
- "invalid opcode 0x%02X at address 0x%04X, rombank = %d\n",
- op, (PC-1) & 0xffff, mbc.rombank);
- break;
- }
+ case 0xF5: /* PUSH AF */
+ PUSH(AF); break;
+
+ case 0xE8: /* ADD SP,imm */
+ b = FETCH; ADDSP(b); break;
+
+ case 0xF3: /* DI */
+ DI; break;
+ case 0xFB: /* EI */
+ EI; break;
+
+ case 0x37: /* SCF */
+ SCF; break;
+ case 0x3F: /* CCF */
+ CCF; break;
+
+ case 0x10: /* STOP */
+ PC++;
+ if (R_KEY1 & 1)
+ {
+ cpu.speed = cpu.speed ^ 1;
+ R_KEY1 = (R_KEY1 & 0x7E) | (cpu.speed << 7);
+ break;
+ }
+ /* NOTE - we do not implement dmg STOP whatsoever */
+ break;
+
+ case 0x76: /* HALT */
+ cpu.halt = 1;
+ break;
+
+ case 0xCB: /* CB prefix */
+ cbop = FETCH;
+ clen = cb_cycles_table[cbop];
+ switch (cbop)
+ {
+ CB_REG_CASES(B, 0);
+ CB_REG_CASES(C, 1);
+ CB_REG_CASES(D, 2);
+ CB_REG_CASES(E, 3);
+ CB_REG_CASES(H, 4);
+ CB_REG_CASES(L, 5);
+ CB_REG_CASES(A, 7);
+ default:
+ b = readb(xHL);
+ switch(cbop)
+ {
+ CB_REG_CASES(b, 6);
+ }
+ if ((cbop & 0xC0) != 0x40) /* exclude BIT */
+ writeb(xHL, b);
+ break;
+ }
+ break;
+
+ default:
+ die(
+ "invalid opcode 0x%02X at address 0x%04X, rombank = %d\n",
+ op, (PC-1) & 0xffff, mbc.rombank);
+ break;
+ }
#ifdef DYNAREC
- } else { // ROM, dynarec.
+ }
+ else
+ { /* ROM, dynarec. */
struct dynarec_block *p=0,*b=address_map[PC&HASH_BITMASK];
- char meow[500];
+ char meow[500];
byte *ptr=mbc.rmap[PC>>12];
snprintf(meow,499,"PC: 0x%x 0x%x a: 0x%x\n",
- ptr,PC, b ? b->address.d : 0);
- rb->splash(HZ*2,true,meow);
- while(b&&b->address.d!=(ptr+PC)) {
+ ptr,PC, b ? b->address.d : 0);
+ rb->splash(HZ*2,true,meow);
+ while(b&&b->address.d!=((unsigned int)(ptr)+PC))
+ {
p=b;
b=b->next;
- }
- if(b) { // call block
+ }
+ if(b)
+ { /* call block */
int fd;
- blockcount++;
+ blockcount++;
snprintf(meow,499,"/dyna_0x%x_run.rb",PC);
- fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC);
- if(fd>=0) {
- fdprintf(fd,"Block 0x%x Blockcount: %d\n",PC,blockcount);
- fdprintf(fd,"before: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
- cpu.a,cpu.b,cpu.c,cpu.d,cpu.e,cpu.hl,cpu.f,cpu.sp,cpu.pc,
- cpu.ime);
- if(blockcount<MAXBLOCK) {
- asm volatile ("movem.l (%0),%%d1-%%d7/%%a0-%%a1\n\t"
- "jsr (%1)\n\t"
- "movem.l %%d1-%%d7/%%a0-%%a1,(%0)\n\t"
- :
- : "a" (&cpu.a), "a" (b->block)
- : "d0", "d1", "d2", "d3", "d4", "d5", "d6",
- "d7", "a0","a1", "a2","a3","a4");
- clen=blockclen;
- fdprintf(fd,"after: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
- cpu.a,cpu.b,cpu.c,cpu.d,cpu.e,cpu.hl,cpu.f,cpu.sp,
- cpu.pc,cpu.ime);
- }
- else
- die("end");
- close(fd);
- }
- }
- else { // Hash miss -> not found -> recompile block and add it
+ fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC);
+ if(fd>=0)
+ {
+ fdprintf(fd,"Block 0x%x Blockcount: %d\n",PC,blockcount);
+ fdprintf(fd,"before: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
+ cpu.a,cpu.b,cpu.c,cpu.d,cpu.e,cpu.hl,cpu.f,cpu.sp,cpu.pc,
+ cpu.ime);
+ if(blockcount<MAXBLOCK)
+ {
+ asm volatile ("movem.l (%0),%%d1-%%d7/%%a0-%%a1\n\t"
+ "jsr (%1)\n\t"
+ "movem.l %%d1-%%d7/%%a0-%%a1,(%0)\n\t"
+ :
+ : "a" (&cpu.a), "a" (b->block)
+ : "d0", "d1", "d2", "d3", "d4", "d5", "d6",
+ "d7", "a0","a1", "a2","a3","a4");
+ clen=blockclen;
+ fdprintf(fd,"after: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
+ cpu.a,cpu.b,cpu.c,cpu.d,cpu.e,cpu.hl,cpu.f,cpu.sp,
+ cpu.pc,cpu.ime);
+ }
+ else
+ die("end");
+ close(fd);
+ }
+ }
+ else
+ { /* Hash miss -> not found -> recompile block and add it */
struct dynarec_block *newblock;
- newblock=malloc(sizeof(struct dynarec_block));
- memset(newblock,0,sizeof(struct dynarec_block));
- newblock->address.d=ptr+PC;
- dynamic_recompile(newblock);
- if(p)
- p->next=newblock;
- else
- address_map[PC&HASH_BITMASK]=newblock;
- }
+ newblock=malloc(sizeof(struct dynarec_block));
+ memset(newblock,0,sizeof(struct dynarec_block));
+ newblock->address.d=(unsigned int)(ptr)+PC;
+ dynamic_recompile(newblock);
+ if(p)
+ p->next=newblock;
+ else
+ address_map[PC&HASH_BITMASK]=newblock;
+ }
}
#endif
-
-
-
- clen <<= 1;
- div_advance(clen);
- timer_advance(clen);
- clen >>= cpu.speed;
- lcdc_advance(clen);
- sound_advance(clen);
-
- i -= clen;
- if (i > 0) goto next;
- return cycles-i;
+
+
+
+ clen <<= 1;
+ div_advance(clen);
+ timer_advance(clen);
+ clen >>= cpu.speed;
+ lcdc_advance(clen);
+ if(options.sound)
+ sound_advance(clen);
+
+ i -= clen;
+ if (i > 0) goto next;
+ return cycles-i;
}
#endif /* ASM_CPU_EMULATE */
@@ -1005,9 +1002,9 @@ next:
inline int cpu_step(int max)
{
- register int cnt;
- if ((cnt = cpu_idle(max))) return cnt;
- return cpu_emulate(1);
+ register int cnt;
+ if ((cnt = cpu_idle(max))) return cnt;
+ return cpu_emulate(1);
}
#endif /* ASM_CPU_STEP */
diff --git a/apps/plugins/rockboy/cpucore.h b/apps/plugins/rockboy/cpucore.h
index 3e02f10c1a..cf377b26d6 100644
--- a/apps/plugins/rockboy/cpucore.h
+++ b/apps/plugins/rockboy/cpucore.h
@@ -4,275 +4,254 @@
static const byte cycles_table[256]ICONST_ATTR =
{
- 1, 3, 2, 2, 1, 1, 2, 1, 5, 2, 2, 2, 1, 1, 2, 1,
- 1, 3, 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, 1, 1, 2, 1,
- 3, 3, 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, 1, 1, 2, 1,
- 3, 3, 2, 2, 1, 3, 3, 3, 3, 2, 2, 2, 1, 1, 2, 1,
-
- 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1,
-
- 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
- 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
-
- 5, 3, 4, 4, 6, 4, 2, 4, 5, 4, 4, 1, 6, 6, 2, 4,
- 5, 3, 4, 0, 6, 4, 2, 4, 5, 4, 4, 0, 6, 0, 2, 4,
- 3, 3, 2, 0, 0, 4, 2, 4, 4, 1, 4, 0, 0, 0, 2, 4,
- 3, 3, 2, 1, 0, 4, 2, 4, 3, 2, 4, 1, 0, 0, 2, 4,
+ 1, 3, 2, 2, 1, 1, 2, 1, 5, 2, 2, 2, 1, 1, 2, 1,
+ 1, 3, 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, 1, 1, 2, 1,
+ 3, 3, 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, 1, 1, 2, 1,
+ 3, 3, 2, 2, 3, 3, 3, 1, 3, 2, 2, 2, 1, 1, 2, 1,
+
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1,
+
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
+
+ 5, 3, 4, 4, 6, 4, 2, 4, 5, 4, 4, 1, 6, 6, 2, 4,
+ 5, 3, 4, 0, 6, 4, 2, 4, 5, 4, 4, 0, 6, 0, 2, 4,
+ 3, 3, 2, 0, 0, 4, 2, 4, 4, 1, 4, 0, 0, 0, 2, 4,
+ 3, 3, 2, 1, 0, 4, 2, 4, 3, 2, 4, 1, 0, 0, 2, 4,
};
static const byte cb_cycles_table[256] ICONST_ATTR =
{
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
-
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
-
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
-
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
- 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
-};
-
-
-
-static const byte zflag_table[256] ICONST_ATTR =
-{
- FZ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+
+ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
+ 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2,
};
static const byte incflag_table[256] ICONST_ATTR =
{
- FZ|FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ FZ|FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
static const byte decflag_table[256] ICONST_ATTR =
{
- FZ|FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
- FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH
+ FZ|FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH,
+ FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH
};
+
static const byte swap_table[256] ICONST_ATTR =
{
- 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
- 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
- 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
- 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
- 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
- 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
- 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
- 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
- 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
- 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
- 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
- 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
- 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
- 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D, 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
- 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
- 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF,
+ 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
+ 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
+ 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
+ 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
+ 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
+ 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
+ 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
+ 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
+ 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
+ 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
+ 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
+ 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
+ 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
+ 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D, 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
+ 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
+ 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF,
};
static const byte daa_table[4096] ICONST_ATTR=
{
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
-
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
-
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
-
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
-
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
+ 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
- 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
};
static const byte daa_carry_table[64] ICONST_ATTR =
{
- 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
- 00, 00, 00, 00, 00, 00, 00, 00, FC, FC, 00, 00, 00, 00, 00, 00,
- FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC,
- FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, 00, FC,
+ 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+ 00, 00, 00, 00, 00, 00, 00, 00, FC, FC, 00, 00, 00, 00, 00, 00,
+ FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC,
+ FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, 00, FC,
};
diff --git a/apps/plugins/rockboy/debug.c b/apps/plugins/rockboy/debug.c
index 8459ad3d5b..a829b98799 100644
--- a/apps/plugins/rockboy/debug.c
+++ b/apps/plugins/rockboy/debug.c
@@ -8,549 +8,548 @@
#include "mem.h"
#include "fastmem.h"
#include "regs.h"
-#include "rc.h"
#include "cpuregs.h"
static char *mnemonic_table[256] =
{
- "NOP",
- "LD BC,%w",
- "LD (BC),A",
- "INC BC",
- "INC B",
- "DEC B",
- "LD B,%b",
- "RLCA",
- "LD (%w),SP",
- "ADD HL,BC",
- "LD A,(BC)",
- "DEC BC",
- "INC C",
- "DEC C",
- "LD C,%b",
- "RRCA",
- "STOP",
- "LD DE,%w",
- "LD (DE),A",
- "INC DE",
- "INC D",
- "DEC D",
- "LD D,%b",
- "RLA",
- "JR %o",
- "ADD HL,DE",
- "LD A,(DE)",
- "DEC DE",
- "INC E",
- "DEC E",
- "LD E,%b",
- "RRA",
- "JR NZ,%o",
- "LD HL,%w",
- "LD (HLI),A",
- "INC HL",
- "INC H",
- "DEC H",
- "LD H,%b",
- "DAA",
- "JR Z,%o",
- "ADD HL,HL",
- "LD A,(HLI)",
- "DEC HL",
- "INC L",
- "DEC L",
- "LD L,%b",
- "CPL",
- "JR NC,%o",
- "LD SP,%w",
- "LD (HLD),A",
- "INC SP",
- "INC (HL)",
- "DEC (HL)",
- "LD (HL),%b",
- "SCF",
- "JR C,%o",
- "ADD HL,SP",
- "LD A,(HLD)",
- "DEC SP",
- "INC A",
- "DEC A",
- "LD A,%b",
- "CCF",
- "LD B,B",
- "LD B,C",
- "LD B,D",
- "LD B,E",
- "LD B,H",
- "LD B,L",
- "LD B,(HL)",
- "LD B,A",
- "LD C,B",
- "LD C,C",
- "LD C,D",
- "LD C,E",
- "LD C,H",
- "LD C,L",
- "LD C,(HL)",
- "LD C,A",
- "LD D,B",
- "LD D,C",
- "LD D,D",
- "LD D,E",
- "LD D,H",
- "LD D,L",
- "LD D,(HL)",
- "LD D,A",
- "LD E,B",
- "LD E,C",
- "LD E,D",
- "LD E,E",
- "LD E,H",
- "LD E,L",
- "LD E,(HL)",
- "LD E,A",
- "LD H,B",
- "LD H,C",
- "LD H,D",
- "LD H,E",
- "LD H,H",
- "LD H,L",
- "LD H,(HL)",
- "LD H,A",
- "LD L,B",
- "LD L,C",
- "LD L,D",
- "LD L,E",
- "LD L,H",
- "LD L,L",
- "LD L,(HL)",
- "LD L,A",
- "LD (HL),B",
- "LD (HL),C",
- "LD (HL),D",
- "LD (HL),E",
- "LD (HL),H",
- "LD (HL),L",
- "HALT",
- "LD (HL),A",
- "LD A,B",
- "LD A,C",
- "LD A,D",
- "LD A,E",
- "LD A,H",
- "LD A,L",
- "LD A,(HL)",
- "LD A,A",
- "ADD A,B",
- "ADD A,C",
- "ADD A,D",
- "ADD A,E",
- "ADD A,H",
- "ADD A,L",
- "ADD A,(HL)",
- "ADD A,A",
- "ADC A,B",
- "ADC A,C",
- "ADC A,D",
- "ADC A,E",
- "ADC A,H",
- "ADC A,L",
- "ADC A,(HL)",
- "ADC A",
- "SUB B",
- "SUB C",
- "SUB D",
- "SUB E",
- "SUB H",
- "SUB L",
- "SUB (HL)",
- "SUB A",
- "SBC A,B",
- "SBC A,C",
- "SBC A,D",
- "SBC A,E",
- "SBC A,H",
- "SBC A,L",
- "SBC A,(HL)",
- "SBC A,A",
- "AND B",
- "AND C",
- "AND D",
- "AND E",
- "AND H",
- "AND L",
- "AND (HL)",
- "AND A",
- "XOR B",
- "XOR C",
- "XOR D",
- "XOR E",
- "XOR H",
- "XOR L",
- "XOR (HL)",
- "XOR A",
- "OR B",
- "OR C",
- "OR D",
- "OR E",
- "OR H",
- "OR L",
- "OR (HL)",
- "OR A",
- "CP B",
- "CP C",
- "CP D",
- "CP E",
- "CP H",
- "CP L",
- "CP (HL)",
- "CP A",
- "RET NZ",
- "POP BC",
- "JP NZ,%w",
- "JP %w",
- "CALL NZ,%w",
- "PUSH BC",
- "ADD A,%b",
- "RST 0h",
- "RET Z",
- "RET",
- "JP Z,%w",
- NULL,
- "CALL Z,%w",
- "CALL %w",
- "ADC A,%b",
- "RST 8h",
- "RET NC",
- "POP DE",
- "JP NC,%w",
- NULL,
- "CALL NC,%w",
- "PUSH DE",
- "SUB %b",
- "RST 10h",
- "RET C",
- "RETI",
- "JP C,%w",
- NULL,
- "CALL C,%w",
- NULL,
- "SBC A,%b",
- "RST 18h",
- "LD (FF00+%b),A",
- "POP HL",
- "LD (FF00+C),A",
- NULL,
- NULL,
- "PUSH HL",
- "AND %b",
- "RST 20h",
- "ADD SP,%o",
- "JP HL",
- "LD (%w),A",
- NULL,
- NULL,
- NULL,
- "XOR %b",
- "RST 28h",
- "LD A,(FF00+%b)",
- "POP AF",
- "LD A,(FF00+C)",
- "DI",
- NULL,
- "PUSH AF",
- "OR %b",
- "RST 30h",
- "LD HL,SP%o",
- "LD SP,HL",
- "LD A,(%w)",
- "EI",
- NULL,
- NULL,
- "CP %b",
- "RST 38h"
+ "NOP",
+ "LD BC,%w",
+ "LD (BC),A",
+ "INC BC",
+ "INC B",
+ "DEC B",
+ "LD B,%b",
+ "RLCA",
+ "LD (%w),SP",
+ "ADD HL,BC",
+ "LD A,(BC)",
+ "DEC BC",
+ "INC C",
+ "DEC C",
+ "LD C,%b",
+ "RRCA",
+ "STOP",
+ "LD DE,%w",
+ "LD (DE),A",
+ "INC DE",
+ "INC D",
+ "DEC D",
+ "LD D,%b",
+ "RLA",
+ "JR %o",
+ "ADD HL,DE",
+ "LD A,(DE)",
+ "DEC DE",
+ "INC E",
+ "DEC E",
+ "LD E,%b",
+ "RRA",
+ "JR NZ,%o",
+ "LD HL,%w",
+ "LD (HLI),A",
+ "INC HL",
+ "INC H",
+ "DEC H",
+ "LD H,%b",
+ "DAA",
+ "JR Z,%o",
+ "ADD HL,HL",
+ "LD A,(HLI)",
+ "DEC HL",
+ "INC L",
+ "DEC L",
+ "LD L,%b",
+ "CPL",
+ "JR NC,%o",
+ "LD SP,%w",
+ "LD (HLD),A",
+ "INC SP",
+ "INC (HL)",
+ "DEC (HL)",
+ "LD (HL),%b",
+ "SCF",
+ "JR C,%o",
+ "ADD HL,SP",
+ "LD A,(HLD)",
+ "DEC SP",
+ "INC A",
+ "DEC A",
+ "LD A,%b",
+ "CCF",
+ "LD B,B",
+ "LD B,C",
+ "LD B,D",
+ "LD B,E",
+ "LD B,H",
+ "LD B,L",
+ "LD B,(HL)",
+ "LD B,A",
+ "LD C,B",
+ "LD C,C",
+ "LD C,D",
+ "LD C,E",
+ "LD C,H",
+ "LD C,L",
+ "LD C,(HL)",
+ "LD C,A",
+ "LD D,B",
+ "LD D,C",
+ "LD D,D",
+ "LD D,E",
+ "LD D,H",
+ "LD D,L",
+ "LD D,(HL)",
+ "LD D,A",
+ "LD E,B",
+ "LD E,C",
+ "LD E,D",
+ "LD E,E",
+ "LD E,H",
+ "LD E,L",
+ "LD E,(HL)",
+ "LD E,A",
+ "LD H,B",
+ "LD H,C",
+ "LD H,D",
+ "LD H,E",
+ "LD H,H",
+ "LD H,L",
+ "LD H,(HL)",
+ "LD H,A",
+ "LD L,B",
+ "LD L,C",
+ "LD L,D",
+ "LD L,E",
+ "LD L,H",
+ "LD L,L",
+ "LD L,(HL)",
+ "LD L,A",
+ "LD (HL),B",
+ "LD (HL),C",
+ "LD (HL),D",
+ "LD (HL),E",
+ "LD (HL),H",
+ "LD (HL),L",
+ "HALT",
+ "LD (HL),A",
+ "LD A,B",
+ "LD A,C",
+ "LD A,D",
+ "LD A,E",
+ "LD A,H",
+ "LD A,L",
+ "LD A,(HL)",
+ "LD A,A",
+ "ADD A,B",
+ "ADD A,C",
+ "ADD A,D",
+ "ADD A,E",
+ "ADD A,H",
+ "ADD A,L",
+ "ADD A,(HL)",
+ "ADD A,A",
+ "ADC A,B",
+ "ADC A,C",
+ "ADC A,D",
+ "ADC A,E",
+ "ADC A,H",
+ "ADC A,L",
+ "ADC A,(HL)",
+ "ADC A",
+ "SUB B",
+ "SUB C",
+ "SUB D",
+ "SUB E",
+ "SUB H",
+ "SUB L",
+ "SUB (HL)",
+ "SUB A",
+ "SBC A,B",
+ "SBC A,C",
+ "SBC A,D",
+ "SBC A,E",
+ "SBC A,H",
+ "SBC A,L",
+ "SBC A,(HL)",
+ "SBC A,A",
+ "AND B",
+ "AND C",
+ "AND D",
+ "AND E",
+ "AND H",
+ "AND L",
+ "AND (HL)",
+ "AND A",
+ "XOR B",
+ "XOR C",
+ "XOR D",
+ "XOR E",
+ "XOR H",
+ "XOR L",
+ "XOR (HL)",
+ "XOR A",
+ "OR B",
+ "OR C",
+ "OR D",
+ "OR E",
+ "OR H",
+ "OR L",
+ "OR (HL)",
+ "OR A",
+ "CP B",
+ "CP C",
+ "CP D",
+ "CP E",
+ "CP H",
+ "CP L",
+ "CP (HL)",
+ "CP A",
+ "RET NZ",
+ "POP BC",
+ "JP NZ,%w",
+ "JP %w",
+ "CALL NZ,%w",
+ "PUSH BC",
+ "ADD A,%b",
+ "RST 0h",
+ "RET Z",
+ "RET",
+ "JP Z,%w",
+ NULL,
+ "CALL Z,%w",
+ "CALL %w",
+ "ADC A,%b",
+ "RST 8h",
+ "RET NC",
+ "POP DE",
+ "JP NC,%w",
+ NULL,
+ "CALL NC,%w",
+ "PUSH DE",
+ "SUB %b",
+ "RST 10h",
+ "RET C",
+ "RETI",
+ "JP C,%w",
+ NULL,
+ "CALL C,%w",
+ NULL,
+ "SBC A,%b",
+ "RST 18h",
+ "LD (FF00+%b),A",
+ "POP HL",
+ "LD (FF00+C),A",
+ NULL,
+ NULL,
+ "PUSH HL",
+ "AND %b",
+ "RST 20h",
+ "ADD SP,%o",
+ "JP HL",
+ "LD (%w),A",
+ NULL,
+ NULL,
+ NULL,
+ "XOR %b",
+ "RST 28h",
+ "LD A,(FF00+%b)",
+ "POP AF",
+ "LD A,(FF00+C)",
+ "DI",
+ NULL,
+ "PUSH AF",
+ "OR %b",
+ "RST 30h",
+ "LD HL,SP%o",
+ "LD SP,HL",
+ "LD A,(%w)",
+ "EI",
+ NULL,
+ NULL,
+ "CP %b",
+ "RST 38h"
};
static char *cb_mnemonic_table[256] =
{
- "RLC B",
- "RLC C",
- "RLC D",
- "RLC E",
- "RLC H",
- "RLC L",
- "RLC (HL)",
- "RLC A",
- "RRC B",
- "RRC C",
- "RRC D",
- "RRC E",
- "RRC H",
- "RRC L",
- "RRC (HL)",
- "RRC A",
- "RL B",
- "RL C",
- "RL D",
- "RL E",
- "RL H",
- "RL L",
- "RL (HL)",
- "RL A",
- "RR B",
- "RR C",
- "RR D",
- "RR E",
- "RR H",
- "RR L",
- "RR (HL)",
- "RR A",
- "SLA B",
- "SLA C",
- "SLA D",
- "SLA E",
- "SLA H",
- "SLA L",
- "SLA (HL)",
- "SLA A",
- "SRA B",
- "SRA C",
- "SRA D",
- "SRA E",
- "SRA H",
- "SRA L",
- "SRA (HL)",
- "SRA A",
- "SWAP B",
- "SWAP C",
- "SWAP D",
- "SWAP E",
- "SWAP H",
- "SWAP L",
- "SWAP (HL)",
- "SWAP A",
- "SRL B",
- "SRL C",
- "SRL D",
- "SRL E",
- "SRL H",
- "SRL L",
- "SRL (HL)",
- "SRL A",
- "BIT 0,B",
- "BIT 0,C",
- "BIT 0,D",
- "BIT 0,E",
- "BIT 0,H",
- "BIT 0,L",
- "BIT 0,(HL)",
- "BIT 0,A",
- "BIT 1,B",
- "BIT 1,C",
- "BIT 1,D",
- "BIT 1,E",
- "BIT 1,H",
- "BIT 1,L",
- "BIT 1,(HL)",
- "BIT 1,A",
- "BIT 2,B",
- "BIT 2,C",
- "BIT 2,D",
- "BIT 2,E",
- "BIT 2,H",
- "BIT 2,L",
- "BIT 2,(HL)",
- "BIT 2,A",
- "BIT 3,B",
- "BIT 3,C",
- "BIT 3,D",
- "BIT 3,E",
- "BIT 3,H",
- "BIT 3,L",
- "BIT 3,(HL)",
- "BIT 3,A",
- "BIT 4,B",
- "BIT 4,C",
- "BIT 4,D",
- "BIT 4,E",
- "BIT 4,H",
- "BIT 4,L",
- "BIT 4,(HL)",
- "BIT 4,A",
- "BIT 5,B",
- "BIT 5,C",
- "BIT 5,D",
- "BIT 5,E",
- "BIT 5,H",
- "BIT 5,L",
- "BIT 5,(HL)",
- "BIT 5,A",
- "BIT 6,B",
- "BIT 6,C",
- "BIT 6,D",
- "BIT 6,E",
- "BIT 6,H",
- "BIT 6,L",
- "BIT 6,(HL)",
- "BIT 6,A",
- "BIT 7,B",
- "BIT 7,C",
- "BIT 7,D",
- "BIT 7,E",
- "BIT 7,H",
- "BIT 7,L",
- "BIT 7,(HL)",
- "BIT 7,A",
- "RES 0,B",
- "RES 0,C",
- "RES 0,D",
- "RES 0,E",
- "RES 0,H",
- "RES 0,L",
- "RES 0,(HL)",
- "RES 0,A",
- "RES 1,B",
- "RES 1,C",
- "RES 1,D",
- "RES 1,E",
- "RES 1,H",
- "RES 1,L",
- "RES 1,(HL)",
- "RES 1,A",
- "RES 2,B",
- "RES 2,C",
- "RES 2,D",
- "RES 2,E",
- "RES 2,H",
- "RES 2,L",
- "RES 2,(HL)",
- "RES 2,A",
- "RES 3,B",
- "RES 3,C",
- "RES 3,D",
- "RES 3,E",
- "RES 3,H",
- "RES 3,L",
- "RES 3,(HL)",
- "RES 3,A",
- "RES 4,B",
- "RES 4,C",
- "RES 4,D",
- "RES 4,E",
- "RES 4,H",
- "RES 4,L",
- "RES 4,(HL)",
- "RES 4,A",
- "RES 5,B",
- "RES 5,C",
- "RES 5,D",
- "RES 5,E",
- "RES 5,H",
- "RES 5,L",
- "RES 5,(HL)",
- "RES 5,A",
- "RES 6,B",
- "RES 6,C",
- "RES 6,D",
- "RES 6,E",
- "RES 6,H",
- "RES 6,L",
- "RES 6,(HL)",
- "RES 6,A",
- "RES 7,B",
- "RES 7,C",
- "RES 7,D",
- "RES 7,E",
- "RES 7,H",
- "RES 7,L",
- "RES 7,(HL)",
- "RES 7,A",
- "SET 0,B",
- "SET 0,C",
- "SET 0,D",
- "SET 0,E",
- "SET 0,H",
- "SET 0,L",
- "SET 0,(HL)",
- "SET 0,A",
- "SET 1,B",
- "SET 1,C",
- "SET 1,D",
- "SET 1,E",
- "SET 1,H",
- "SET 1,L",
- "SET 1,(HL)",
- "SET 1,A",
- "SET 2,B",
- "SET 2,C",
- "SET 2,D",
- "SET 2,E",
- "SET 2,H",
- "SET 2,L",
- "SET 2,(HL)",
- "SET 2,A",
- "SET 3,B",
- "SET 3,C",
- "SET 3,D",
- "SET 3,E",
- "SET 3,H",
- "SET 3,L",
- "SET 3,(HL)",
- "SET 3,A",
- "SET 4,B",
- "SET 4,C",
- "SET 4,D",
- "SET 4,E",
- "SET 4,H",
- "SET 4,L",
- "SET 4,(HL)",
- "SET 4,A",
- "SET 5,B",
- "SET 5,C",
- "SET 5,D",
- "SET 5,E",
- "SET 5,H",
- "SET 5,L",
- "SET 5,(HL)",
- "SET 5,A",
- "SET 6,B",
- "SET 6,C",
- "SET 6,D",
- "SET 6,E",
- "SET 6,H",
- "SET 6,L",
- "SET 6,(HL)",
- "SET 6,A",
- "SET 7,B",
- "SET 7,C",
- "SET 7,D",
- "SET 7,E",
- "SET 7,H",
- "SET 7,L",
- "SET 7,(HL)",
- "SET 7,A"
+ "RLC B",
+ "RLC C",
+ "RLC D",
+ "RLC E",
+ "RLC H",
+ "RLC L",
+ "RLC (HL)",
+ "RLC A",
+ "RRC B",
+ "RRC C",
+ "RRC D",
+ "RRC E",
+ "RRC H",
+ "RRC L",
+ "RRC (HL)",
+ "RRC A",
+ "RL B",
+ "RL C",
+ "RL D",
+ "RL E",
+ "RL H",
+ "RL L",
+ "RL (HL)",
+ "RL A",
+ "RR B",
+ "RR C",
+ "RR D",
+ "RR E",
+ "RR H",
+ "RR L",
+ "RR (HL)",
+ "RR A",
+ "SLA B",
+ "SLA C",
+ "SLA D",
+ "SLA E",
+ "SLA H",
+ "SLA L",
+ "SLA (HL)",
+ "SLA A",
+ "SRA B",
+ "SRA C",
+ "SRA D",
+ "SRA E",
+ "SRA H",
+ "SRA L",
+ "SRA (HL)",
+ "SRA A",
+ "SWAP B",
+ "SWAP C",
+ "SWAP D",
+ "SWAP E",
+ "SWAP H",
+ "SWAP L",
+ "SWAP (HL)",
+ "SWAP A",
+ "SRL B",
+ "SRL C",
+ "SRL D",
+ "SRL E",
+ "SRL H",
+ "SRL L",
+ "SRL (HL)",
+ "SRL A",
+ "BIT 0,B",
+ "BIT 0,C",
+ "BIT 0,D",
+ "BIT 0,E",
+ "BIT 0,H",
+ "BIT 0,L",
+ "BIT 0,(HL)",
+ "BIT 0,A",
+ "BIT 1,B",
+ "BIT 1,C",
+ "BIT 1,D",
+ "BIT 1,E",
+ "BIT 1,H",
+ "BIT 1,L",
+ "BIT 1,(HL)",
+ "BIT 1,A",
+ "BIT 2,B",
+ "BIT 2,C",
+ "BIT 2,D",
+ "BIT 2,E",
+ "BIT 2,H",
+ "BIT 2,L",
+ "BIT 2,(HL)",
+ "BIT 2,A",
+ "BIT 3,B",
+ "BIT 3,C",
+ "BIT 3,D",
+ "BIT 3,E",
+ "BIT 3,H",
+ "BIT 3,L",
+ "BIT 3,(HL)",
+ "BIT 3,A",
+ "BIT 4,B",
+ "BIT 4,C",
+ "BIT 4,D",
+ "BIT 4,E",
+ "BIT 4,H",
+ "BIT 4,L",
+ "BIT 4,(HL)",
+ "BIT 4,A",
+ "BIT 5,B",
+ "BIT 5,C",
+ "BIT 5,D",
+ "BIT 5,E",
+ "BIT 5,H",
+ "BIT 5,L",
+ "BIT 5,(HL)",
+ "BIT 5,A",
+ "BIT 6,B",
+ "BIT 6,C",
+ "BIT 6,D",
+ "BIT 6,E",
+ "BIT 6,H",
+ "BIT 6,L",
+ "BIT 6,(HL)",
+ "BIT 6,A",
+ "BIT 7,B",
+ "BIT 7,C",
+ "BIT 7,D",
+ "BIT 7,E",
+ "BIT 7,H",
+ "BIT 7,L",
+ "BIT 7,(HL)",
+ "BIT 7,A",
+ "RES 0,B",
+ "RES 0,C",
+ "RES 0,D",
+ "RES 0,E",
+ "RES 0,H",
+ "RES 0,L",
+ "RES 0,(HL)",
+ "RES 0,A",
+ "RES 1,B",
+ "RES 1,C",
+ "RES 1,D",
+ "RES 1,E",
+ "RES 1,H",
+ "RES 1,L",
+ "RES 1,(HL)",
+ "RES 1,A",
+ "RES 2,B",
+ "RES 2,C",
+ "RES 2,D",
+ "RES 2,E",
+ "RES 2,H",
+ "RES 2,L",
+ "RES 2,(HL)",
+ "RES 2,A",
+ "RES 3,B",
+ "RES 3,C",
+ "RES 3,D",
+ "RES 3,E",
+ "RES 3,H",
+ "RES 3,L",
+ "RES 3,(HL)",
+ "RES 3,A",
+ "RES 4,B",
+ "RES 4,C",
+ "RES 4,D",
+ "RES 4,E",
+ "RES 4,H",
+ "RES 4,L",
+ "RES 4,(HL)",
+ "RES 4,A",
+ "RES 5,B",
+ "RES 5,C",
+ "RES 5,D",
+ "RES 5,E",
+ "RES 5,H",
+ "RES 5,L",
+ "RES 5,(HL)",
+ "RES 5,A",
+ "RES 6,B",
+ "RES 6,C",
+ "RES 6,D",
+ "RES 6,E",
+ "RES 6,H",
+ "RES 6,L",
+ "RES 6,(HL)",
+ "RES 6,A",
+ "RES 7,B",
+ "RES 7,C",
+ "RES 7,D",
+ "RES 7,E",
+ "RES 7,H",
+ "RES 7,L",
+ "RES 7,(HL)",
+ "RES 7,A",
+ "SET 0,B",
+ "SET 0,C",
+ "SET 0,D",
+ "SET 0,E",
+ "SET 0,H",
+ "SET 0,L",
+ "SET 0,(HL)",
+ "SET 0,A",
+ "SET 1,B",
+ "SET 1,C",
+ "SET 1,D",
+ "SET 1,E",
+ "SET 1,H",
+ "SET 1,L",
+ "SET 1,(HL)",
+ "SET 1,A",
+ "SET 2,B",
+ "SET 2,C",
+ "SET 2,D",
+ "SET 2,E",
+ "SET 2,H",
+ "SET 2,L",
+ "SET 2,(HL)",
+ "SET 2,A",
+ "SET 3,B",
+ "SET 3,C",
+ "SET 3,D",
+ "SET 3,E",
+ "SET 3,H",
+ "SET 3,L",
+ "SET 3,(HL)",
+ "SET 3,A",
+ "SET 4,B",
+ "SET 4,C",
+ "SET 4,D",
+ "SET 4,E",
+ "SET 4,H",
+ "SET 4,L",
+ "SET 4,(HL)",
+ "SET 4,A",
+ "SET 5,B",
+ "SET 5,C",
+ "SET 5,D",
+ "SET 5,E",
+ "SET 5,H",
+ "SET 5,L",
+ "SET 5,(HL)",
+ "SET 5,A",
+ "SET 6,B",
+ "SET 6,C",
+ "SET 6,D",
+ "SET 6,E",
+ "SET 6,H",
+ "SET 6,L",
+ "SET 6,(HL)",
+ "SET 6,A",
+ "SET 7,B",
+ "SET 7,C",
+ "SET 7,D",
+ "SET 7,E",
+ "SET 7,H",
+ "SET 7,L",
+ "SET 7,(HL)",
+ "SET 7,A"
};
static byte operand_count[256] =
{
- 1, 3, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 2, 1,
- 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
- 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
- 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 3, 3, 3, 1, 2, 1, 1, 1, 3, 2, 3, 3, 2, 1,
- 1, 1, 3, 1, 3, 1, 2, 1, 1, 1, 3, 1, 3, 1, 2, 1,
- 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1,
- 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1
+ 1, 3, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 2, 1,
+ 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
+ 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
+ 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 3, 3, 3, 1, 2, 1, 1, 1, 3, 2, 3, 3, 2, 1,
+ 1, 1, 3, 1, 3, 1, 2, 1, 1, 1, 3, 1, 3, 1, 2, 1,
+ 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1,
+ 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1
};
@@ -560,116 +559,95 @@ int debug_trace = 0;
rcvar_t debug_exports[] =
{
- RCV_BOOL("trace", &debug_trace),
- RCV_END
+ RCV_BOOL("trace", &debug_trace),
+ RCV_END
};
void debug_disassemble(addr a, int c)
{
- static int i, j, k;
- static byte code;
- static byte ops[3];
- static int opaddr;
- static char mnemonic[256];
- static char *pattern;
- char meow[500],buf[300];
-// int fd;
- if(!debug_trace) return;
-// fd=open("/rockboy.trace",O_WRONLY|O_APPEND);
-// if(fd<0)
-// return;
-
- while (c > 0)
- {
- k = 0;
- opaddr = a;
- code = ops[k++] = readb(a); a++;
- if (code != 0xCB)
- {
- pattern = mnemonic_table[code];
- if (!pattern)
- pattern = "***INVALID***";
- }
- else
- {
- code = ops[k++] = readb(a); a++;
- pattern = cb_mnemonic_table[code];
- }
- i = j = 0;
- while (pattern[i])
- {
- if (pattern[i] == '%')
- {
- switch (pattern[++i])
- {
- case 'B':
- case 'b':
- ops[k] = readb(a); a++;
- j += snprintf(mnemonic + j,255-j,
- "%02Xh", ops[k++]);
- break;
- case 'W':
- case 'w':
- ops[k] = readb(a); a++;
- ops[k+1] = readb(a); a++;
- j += snprintf(mnemonic + j, 255-j,"%04Xh",
- ((ops[k+1] << 8) | ops[k]));
- k += 2;
- break;
- case 'O':
- case 'o':
- ops[k] = readb(a); a++;
- j += snprintf(mnemonic + j, 255-j,"%+d",
- (n8)(ops[k++]));
- break;
- }
- i++;
- }
- else
- {
- mnemonic[j++] = pattern[i++];
- }
- }
- mnemonic[j] = 0;
- snprintf(buf,299,"%04X ", opaddr);
- strcpy(meow,buf);
- switch (operand_count[ops[0]]) {
- case 1:
- snprintf(buf,299,"%02X ", ops[0]);
- strcat(meow,buf);
- break;
- case 2:
- snprintf(buf,299,"%02X %02X ", ops[0], ops[1]);
- strcat(meow,buf);
- break;
- case 3:
- snprintf(buf,299,"%02X %02X %02X ", ops[0], ops[1], ops[2]);
- strcat(meow,buf);
- break;
- }
- snprintf(buf,"%-16.16s", mnemonic);
- strcat(meow,buf);
+ static int i, j, k;
+ static byte code;
+ static byte ops[3];
+ static int opaddr;
+ static char mnemonic[256];
+ static char *pattern;
+ char meow[500],buf[300];
+ if(!debug_trace) return;
+
+ while (c > 0)
+ {
+ k = 0;
+ opaddr = a;
+ code = ops[k++] = readb(a); a++;
+ if (code != 0xCB)
+ {
+ pattern = mnemonic_table[code];
+ if (!pattern)
+ pattern = "***INVALID***";
+ }
+ else
+ {
+ code = ops[k++] = readb(a); a++;
+ pattern = cb_mnemonic_table[code];
+ }
+ i = j = 0;
+ while (pattern[i])
+ {
+ if (pattern[i] == '%')
+ {
+ switch (pattern[++i])
+ {
+ case 'B':
+ case 'b':
+ ops[k] = readb(a); a++;
+ j += snprintf(mnemonic + j,255-j,
+ "%02Xh", ops[k++]);
+ break;
+ case 'W':
+ case 'w':
+ ops[k] = readb(a); a++;
+ ops[k+1] = readb(a); a++;
+ j += snprintf(mnemonic + j, 255-j,"%04Xh",
+ ((ops[k+1] << 8) | ops[k]));
+ k += 2;
+ break;
+ case 'O':
+ case 'o':
+ ops[k] = readb(a); a++;
+ j += snprintf(mnemonic + j, 255-j,"%+d",
+ (n8)(ops[k++]));
+ break;
+ }
+ i++;
+ }
+ else
+ {
+ mnemonic[j++] = pattern[i++];
+ }
+ }
+ mnemonic[j] = 0;
+ snprintf(buf,299,"%04X ", opaddr);
+ strcpy(meow,buf);
+ switch (operand_count[ops[0]]) {
+ case 1:
+ snprintf(buf,299,"%02X ", ops[0]);
+ strcat(meow,buf);
+ break;
+ case 2:
+ snprintf(buf,299,"%02X %02X ", ops[0], ops[1]);
+ strcat(meow,buf);
+ break;
+ case 3:
+ snprintf(buf,299,"%02X %02X %02X ", ops[0], ops[1], ops[2]);
+ strcat(meow,buf);
+ break;
+ }
+ snprintf(buf,"%-16.16s", mnemonic);
+ strcat(meow,buf);
rb->lcd_putsxy(0,0,meow);
- rb->lcd_update();
-/* fprintf(fd,
- " SP=%04X.%04X BC=%04X.%02X.%02X DE=%04X.%02X "
- "HL=%04X.%02X A=%02X F=%02X %c%c%c%c%c",
- SP, readw(SP),
- BC, readb(BC), readb(0xFF00 | C),
- DE, readb(DE),
- HL, readb(HL), A,
- F, (IME ? 'I' : '-'),
- ((F & 0x80) ? 'Z' : '-'),
- ((F & 0x40) ? 'N' : '-'),
- ((F & 0x20) ? 'H' : '-'),
- ((F & 0x10) ? 'C' : '-')
- );
- fprintf(fd,
- " IE=%02X IF=%02X LCDC=%02X STAT=%02X LY=%02X LYC=%02X",
- R_IE, R_IF, R_LCDC, R_STAT, R_LY, R_LYC
- );*/
- c--;
- }
+ rb->lcd_update();
+ c--;
+ }
}
diff --git a/apps/plugins/rockboy/dynarec.c b/apps/plugins/rockboy/dynarec.c
index 6d424a047f..6ab1ec79b4 100644
--- a/apps/plugins/rockboy/dynarec.c
+++ b/apps/plugins/rockboy/dynarec.c
@@ -1,5 +1,3 @@
-#ifdef DYNAREC
-#include <system.h>
#include "rockmacros.h"
#include "defs.h"
#include "regs.h"
@@ -58,10 +56,10 @@ int blockclen;
DYNA_MOVEM(3,0x3FE,1);
/*
- * SUBQ 2, %a0 // decrease gb sp
- * PEA #(n) // push n
- * PUSH %a0 // push gb sp
- * call_native writew(SP, (n)
+ * SUBQ 2, %a0 decrease gb sp
+ * PEA #(n) push n
+ * PUSH %a0 push gb sp
+ * call_native writew(SP, (n))
* ADDQ 8, %a7
*/
#define PUSH(n) \
@@ -72,7 +70,7 @@ int blockclen;
DYNA_ADDQ_l_i_to_r(0,7,1);
/*
- * PUSH %a0 // push gb sp
+ * PUSH %a0 push gb sp
* call_native readw(SP);
* addq 4, a7
* addq 2, a0
@@ -133,21 +131,24 @@ int blockclen;
DYNA_ANDI_l_i_to_r(0xFF,1);
-void DYNA_MOVE_b_r_to_r(un8 src,un8 dest) {
+void DYNA_MOVE_b_r_to_r(un8 src,un8 dest)
+{
DWRITEW(0x1000|(src&0x7)|(dest&0x7)<<9);
}
-void DYNA_ASHIFT_l(un8 src, un8 dest, int left, int src_is_reg) {
+void DYNA_ASHIFT_l(un8 src, un8 dest, int left, int src_is_reg)
+{
unsigned short opcode;
opcode=(0xE080)|((src&0x7)<<9)|(dest&0x7);
if(left)
- opcode|=0x100;
+ opcode|=0x100;
if(src_is_reg)
- opcode|=0x20;
+ opcode|=0x20;
DWRITEW(opcode);
}
-void DYNA_LSHIFT_l(un8 src, un8 dest, int left, int src_is_reg) {
+void DYNA_LSHIFT_l(un8 src, un8 dest, int left, int src_is_reg)
+{
unsigned short opcode=0xE088|((src&0x7)<<9)|(dest&0x7);
if(left)
opcode|=0x100;
@@ -156,63 +157,74 @@ void DYNA_LSHIFT_l(un8 src, un8 dest, int left, int src_is_reg) {
DWRITEW(opcode);
}
-void DYNA_MOVE_l_i_to_r(un32 imm, un8 dest) {
+void DYNA_MOVE_l_i_to_r(un32 imm, un8 dest)
+{
DWRITEW(0x203C|(dest&0x7)<<9);
- DWRITEL(imm); // endianness?
+ DWRITEL(imm); /* endianness? */
}
-void DYNA_MOVE_l_i_to_m(un32 imm, un8 dest_a) {
+void DYNA_MOVE_l_i_to_m(un32 imm, un8 dest_a)
+{
DWRITEW(0x20FC|((dest_a&0x7)<<9));
DWRITEL(imm);
}
-void DYNA_MOVE_l_r_to_m(un8 src,un8 dest_a) {
+void DYNA_MOVE_l_r_to_m(un8 src,un8 dest_a)
+{
DWRITEW(0x2080|(dest_a&0x7)<<9|(src&0x7));
}
-void DYNA_MOVE_l_r_to_r(un8 src, un8 dest, int src_is_areg) {
+void DYNA_MOVE_l_r_to_r(un8 src, un8 dest, int src_is_areg)
+{
unsigned short opcode=0x2000|((dest&0x7)<<9)|(src&0x7);
if(src_is_areg)
opcode|=0x8;
DWRITEW(opcode);
}
-void DYNA_MOVE_w_r_to_r(un8 src, un8 dest, int src_is_areg) {
+void DYNA_MOVE_w_r_to_r(un8 src, un8 dest, int src_is_areg)
+{
unsigned short opcode=0x3000|((dest&0x7)<<9)|(src&0x7);
if(src_is_areg)
opcode|=0x8;
DWRITEW(opcode);
}
-void DYNA_MOVEQ_l_i_to_r(un8 imm, un8 dest) {
+void DYNA_MOVEQ_l_i_to_r(un8 imm, un8 dest)
+{
DWRITEW(0x7000|((dest&0x7)<<9)|imm);
}
-void DYNA_PEA_w_i(un16 imm) {
+void DYNA_PEA_w_i(un16 imm)
+{
DWRITEW(0x4878);
DWRITEW(imm);
}
-void DYNA_PUSH_l_r(un8 reg,int src_is_areg) {
+void DYNA_PUSH_l_r(un8 reg,int src_is_areg)
+{
unsigned short value= 0x2F00|(reg&0x7);
if(src_is_areg)
value|=0x8;
DWRITEW(value);
}
-void DYNA_MOVEA_l_i_to_r(un32 imm, un8 dest) {
+void DYNA_MOVEA_l_i_to_r(un32 imm, un8 dest)
+{
DWRITEW(0x207C|(dest&0x7)<<9);
DWRITEL(imm);
}
-void DYNA_MOVEA_w_r_to_r(un8 src, un8 dest, int src_is_areg) {
+void DYNA_MOVEA_w_r_to_r(un8 src, un8 dest, int src_is_areg)
+{
unsigned short value=0x3040|((dest&0x7)<<9)|(src&0x7);
if(src_is_areg)
value|=0x8;
DWRITEW(value);
}
-void DYNA_MOVEA_l_r_to_r(un8 src, un8 dest, int src_is_areg) {
+void DYNA_MOVEA_l_r_to_r(un8 src, un8 dest, int src_is_areg)
+{
unsigned short value=0x2040|((dest&0x7)<<9)|(src&0x7);
if(src_is_areg)
value|=0x8;
@@ -220,67 +232,80 @@ void DYNA_MOVEA_l_r_to_r(un8 src, un8 dest, int src_is_areg) {
}
-void DYNA_RET() {
+void DYNA_RET(void)
+{
DWRITEW(0x4E75);
}
-void DYNA_AND_l_i_to_r(un32 imm, un8 dest) {
+void DYNA_AND_l_i_to_r(un32 imm, un8 dest)
+{
DWRITEW(0x0280|(dest&0x7));
DWRITEL(imm);
}
-void DYNA_AND_l_r_to_r(un8 src,un8 dest) {
+void DYNA_AND_l_r_to_r(un8 src,un8 dest)
+{
DWRITEW(0xC080|((dest&0x7)<<9)|(src&0x7));
}
-void DYNA_OR_l_r_to_r(un8 src,un8 dest) {
+void DYNA_OR_l_r_to_r(un8 src,un8 dest)
+{
DWRITEW(0x8080|((dest&0x7)<<9)|(src&0x7));
}
-void DYNA_OR_l_i_to_r(un32 imm,un8 dest) {
+void DYNA_OR_l_i_to_r(un32 imm,un8 dest)
+{
DWRITEW(0x0080|(dest&0x7));
DWRITEL(imm);
}
-void DYNA_CLR_l_m(un32 addr) {
+void DYNA_CLR_l_m(un32 addr)
+{
DWRITEW(0x42B9);
DWRITEL(addr);
}
-void DYNA_CLR_l_r(un8 reg) {
+void DYNA_CLR_l_r(un8 reg)
+{
DWRITEW(0x4280|(reg&0x7));
}
-void DYNA_CLR_w_r(un8 reg) {
+void DYNA_CLR_w_r(un8 reg)
+{
DWRITEW(0x42C0|(reg&0x7));
}
-void DYNA_CLR_b_r(un8 reg) {
+void DYNA_CLR_b_r(un8 reg)
+{
DWRITEW(0x4200|(reg&0x7));
}
-void DYNA_ADDQ_l_i_to_r(un8 imm, un8 reg, int dest_is_a) {
+void DYNA_ADDQ_l_i_to_r(un8 imm, un8 reg, int dest_is_a)
+{
unsigned short value=0x5080|(imm&0x7)<<9|(reg&0x7);
if(dest_is_a)
value|=0x8;
DWRITEW(value);
}
-void DYNA_ADD_l_r_to_r(un8 src, un8 dest, int src_is_areg) {
+void DYNA_ADD_l_r_to_r(un8 src, un8 dest, int src_is_areg)
+{
unsigned short value=0xD080|((dest&0x7)<<9)|(src&0x7);
if(src_is_areg)
value|=0x8;
DWRITEW(value);
}
-void DYNA_JSR(void *addr) {
+void DYNA_JSR(void *addr)
+{
DWRITEW(0x4EB9);
DWRITEL(addr);
}
-void DYNA_MOVEM(un8 areg,un16 mask, int frommem) {
+void DYNA_MOVEM(un8 areg,un16 mask, int frommem)
+{
unsigned short value=0x48D0|(areg&0x7);
if(frommem)
value|=0x400;
@@ -288,27 +313,32 @@ void DYNA_MOVEM(un8 areg,un16 mask, int frommem) {
DWRITEW(mask);
}
-void DYNA_SUBQ_l_i_to_r(un8 imm, un8 reg, int addr_reg) {
+void DYNA_SUBQ_l_i_to_r(un8 imm, un8 reg, int addr_reg)
+{
unsigned short value=0x5180|(reg&0x7)|((imm&0x7)<<9);
if(addr_reg)
value|=0x8;
DWRITEW(value);
}
-void DYNA_SUB_l_r_to_r(un8 src, un8 dest, int is_areg) {
+void DYNA_SUB_l_r_to_r(un8 src, un8 dest, int is_areg)
+{
unsigned short value=0x9080|((dest&0x7)<<9)|(src&0x7);
if(is_areg)
value|=0x8;
DWRITEW(value);
}
-void DYNA_EXT_l(un8 reg) {
+void DYNA_EXT_l(un8 reg)
+{
DWRITEW(0x48C0|(reg&0x7));
}
-void DYNA_BCC_c(un8 cond, int size,int i) {
+void DYNA_BCC_c(un8 cond, int size,int i)
+{
un32 displace=dynapointer-branchp[i];
- if(!branchp[i]) {
+ if(!branchp[i])
+ {
die("Dynarec error! BCC trying to write branch without dummy");
return;
}
@@ -316,7 +346,8 @@ void DYNA_BCC_c(un8 cond, int size,int i) {
die("Dynarec error! BCC invalid displacement");
else if(displace>0&&displace<0x7F)
*( (unsigned short *) branchp[i])=0x6000|((cond&0xF)<<8)|(displace&0xFF);
- else if(displace>0x7F&&displace<0x7FFF) {
+ else if(displace>0x7F&&displace<0x7FFF)
+ {
*( (unsigned short *) branchp[i])=0x6000|((cond&0xF)<<8);
branchp[i]+=2;
*( (unsigned short *) branchp[i])=displace;
@@ -327,19 +358,22 @@ void DYNA_BCC_c(un8 cond, int size,int i) {
branchp[i]=0;
}
-void DYNA_DUMMYBRANCH(int size,int i) {
+void DYNA_DUMMYBRANCH(int size,int i)
+{
branchp[i]=dynapointer;
dynapointer+=size;
}
-void DYNA_TST_l_r(un8 reg,int is_areg) {
+void DYNA_TST_l_r(un8 reg,int is_areg)
+{
unsigned short opcode=0x4A80|(reg&0x7);
if(is_areg)
opcode|=0x8;
DWRITEW(opcode);
}
-void DYNA_TST_b_r(un8 reg,int is_areg) {
+void DYNA_TST_b_r(un8 reg,int is_areg)
+{
unsigned short opcode=0x4A00|(reg&0x7);
if(is_areg)
opcode|=0x8;
@@ -347,33 +381,40 @@ void DYNA_TST_b_r(un8 reg,int is_areg) {
}
-void DYNA_BTST_l_r(un8 bit, un8 reg) {
+void DYNA_BTST_l_r(un8 bit, un8 reg)
+{
DWRITEW(0x0800|(reg&0x7));
DWRITEW(bit);
}
-void DYNA_NEG_l(un8 reg) {
+void DYNA_NEG_l(un8 reg)
+{
DWRITEW(0x4480|(reg&0x7));
}
-void DYNA_XOR_l_r_to_r(un8 src, un8 dest) {
+void DYNA_XOR_l_r_to_r(un8 src, un8 dest)
+{
DWRITEW(0xB180|((dest&0x7)<<9)|(src&0x7));
}
-void DYNA_SET_b_r(un8 src, un8 cond) {
+void DYNA_SET_b_r(un8 src, un8 cond)
+{
DWRITEW(0x50C0|((cond)&0xF)<<8|(src&0x7));
}
-void DYNA_INC_l_r(un8 dest,int is_areg) {
+void DYNA_INC_l_r(un8 dest,int is_areg)
+{
DYNA_ADDQ_l_i_to_r(1,dest,is_areg);
}
-void DYNA_DEC_l_r(un8 dest,int is_areg) {
+void DYNA_DEC_l_r(un8 dest,int is_areg)
+{
DYNA_SUBQ_l_i_to_r(1,dest,is_areg);
}
-void dynamic_recompile (struct dynarec_block *newblock) {
+void dynamic_recompile (struct dynarec_block *newblock)
+{
int done=0,writepc=1,fd;
byte op;
unsigned int oldpc=PC;
@@ -385,581 +426,1472 @@ void dynamic_recompile (struct dynarec_block *newblock) {
#ifdef DYNA_DEBUG
snprintf(meow,499,"/dyna_0x%x_asm.rb",PC);
fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC);
- if(fd<0) {
- die("couldn't open dyna debug file");
+ if(fd<0)
+ {
+ die("couldn't open dyna debug file");
return;
}
#endif
snprintf(meow,499,"Recompiling 0x%x",oldpc);
rb->splash(HZ*1,1,meow);
- while(!done) {
+ while(!done)
+ {
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"0x%x: ",PC);
+#endif
+ op=FETCH;
+ clen = cycles_table[op];
+ tclen+=clen;
+ switch(op) {
+ case 0x00: /* NOP */
+ break;
+ case 0x01: /* LD BC,imm */
+ /* warning (do we have endianness right?) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD BC,#0x%x\n",readw(xPC));
+#endif
+ temp=readw(xPC);
+ DYNA_MOVEQ_l_i_to_r((temp&0xFF00)>>8,2);
+ DYNA_MOVEQ_l_i_to_r(temp&0xFF,3);
+ PC+=2;
+ break;
+ case 0x02: /* LD (BC),A */
#ifdef DYNA_DEBUG
- fdprintf(fd,"0x%x: ",PC);
+ fdprintf(fd, "LD (BC),A\n");
#endif
- op=FETCH;
- clen = cycles_table[op];
- tclen+=clen;
- switch(op) {
- case 0x00: /* NOP */
- case 0x40: /* LD B,B */
- case 0x49: /* LD C,C */
- case 0x52: /* LD D,D */
- case 0x5B: /* LD E,E */
- case 0x64: /* LD H,H */
- case 0x6D: /* LD L,L */
- case 0x7F: /* LD A,A */
- break;
-
- case 0x0B: /* DEC BC*
+ break; /* FIXME: Implement */
+ case 0x03: /* INC BC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC BC\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x04: /* INC B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC B\n");
+#endif
+ DYNA_INC_l_r(2,0); /* Is this right? */
+ break;
+ case 0x05: /* DEC B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC B\n");
+#endif
+ DYNA_DEC_l_r(2,0); /* Is this right? */
+ break;
+ case 0x06: /* LD B,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD B,#0x%x\n",readb(xPC));
+#endif
+ DYNA_MOVEQ_l_i_to_r(FETCH,2);
+ break;
+ case 0x07: /* RLCA */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RLCA\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x08: /* LD imm,SP */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD imm,SP\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x09: /* ADD HL,BC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD HL,BC\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x0A: /* LD A,(BC) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD A,(BC)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x0B: /* DEC BC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"DEC BC\n");
+#endif
+ DYNA_TST_b_r(3,0); /* test C */
+ DYNA_DUMMYBRANCH(2,0);
+ DYNA_DEC_l_r(2,0); /* dec B */
+ DYNA_BCC_c(0x6,2,0); /* jump here if not zero */
+ DYNA_DEC_l_r(3,0); /* dec C */
+ break;
+ case 0x0C: /* INC C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC C\n");
+#endif
+ DYNA_INC_l_r(3,0); /* Is this right? */
+ break;
+ case 0x0D: /* DEC C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC C\n");
+#endif
+ DYNA_DEC_l_r(3,0); /* Is this right? */
+ break;
+ case 0x0E: /* LD C,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD C,#0x%x\n",readb(xPC));
+#endif
+ DYNA_MOVEQ_l_i_to_r(FETCH,3);
+ break;
+ case 0x0F: /* RRCA */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RRCA\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x10: /* STOP */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "STOP\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x11: /* LD DE,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD DE,#0x%x\n",readw(xPC));
+#endif
+ temp=readw(xPC);
+ DYNA_MOVEQ_l_i_to_r((temp&0xFF00)>>8,4);
+ DYNA_MOVEQ_l_i_to_r(temp&0xFF,5);
+ PC += 2;
+ break;
+ case 0x12: /* LD (DE),A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (DE),A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x13: /* INC DE */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC DE\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x14: /* INC D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC D\n");
+#endif
+ DYNA_INC_l_r(4,0); /* Is this right? */
+ break;
+ case 0x15: /* DEC D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC D\n");
+#endif
+ DYNA_DEC_l_r(4,0); /* Is this right? */
+ break;
+ case 0x16: /* LD D,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD D,#0x%x\n",readb(xPC));
+#endif
+ DYNA_MOVEQ_l_i_to_r(FETCH,4);
+ break;
+ case 0x17: /* RLA */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RLA\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x18: /* JR */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "JR\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x19: /* ADD HL,DE */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD HL,DE\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x1A: /* LD A,(DE) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD A,(DE)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x1B: /* DEC DE */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"DEC DE\n");
+#endif
+ DYNA_TST_b_r(5,0); /* test E */
+ DYNA_DUMMYBRANCH(4,0);
+ DYNA_DEC_l_r(4,0); /* dec D */
+ DYNA_BCC_c(0x6,4,0); /* jump here if not zero */
+ DYNA_DEC_l_r(5,0); /* dec E */
+ break;
+ case 0x1C: /* INC E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC E\n");
+#endif
+ DYNA_INC_l_r(5,0); /* Is this right? */
+ break;
+ case 0x1D: /* DEC E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC E\n");
+#endif
+ DYNA_DEC_l_r(5,0); /* Is this right? */
+ break;
+ case 0x1E: /* LD E,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD E,#0x%x\n",readb(xPC));
+#endif
+ DYNA_MOVEQ_l_i_to_r(FETCH,5);
+ break;
+ case 0x1F: /* RRA */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RRA\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x20: /* JR NZ */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"JR NZ\n");
+#endif
+ DYNA_BTST_l_r(8,7); /* btst #8,d7 */
+ DYNA_DUMMYBRANCH(2,0);
+ DYNA_MOVEA_l_i_to_r(&blockclen,3);
+ DYNA_MOVE_l_i_to_m(tclen,3);
+ DYNA_MOVEA_l_i_to_r(PC+1+(signed char)readb(PC),1);
+ DYNA_RET();
+ DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */
+ tclen--;
+ PC++;
+ break;
+ case 0x21: /* LD HL,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD HL,#0x%x\n",readw(xPC));
+#endif
+ DYNA_MOVE_l_i_to_r(readw(xPC),6);
+ PC += 2;
+ break;
+ case 0x22: /* LDI (HL), A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LDI (HL),A\n");
+#endif
+/* DYNA_PUSH_l_r(1,0);
+ DYNA_PUSH_l_r(6,0);
+ CALL_NATIVE(&writeb);
+ DYNA_ADDQ_l_i_to_r(0,7,1);
+ DYNA_INC_l_r(6,0);*/
+ break;
+ case 0x23: /* INC HL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC HL\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x24: /* INC H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x25: /* DEC H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x26: /* LD H,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD H,#0x%x\n",readb(xPC));
+#endif
+ DYNA_AND_l_i_to_r(0xFF,6);
+ DYNA_OR_l_i_to_r(FETCH<<8,6);
+ break;
+ case 0x27: /* DAA */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DAA\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x28: /* JR Z */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "JR Z\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x29: /* ADD HL, HL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"DEC BC\n");
+ fdprintf(fd, "ADD HL,HL\n");
#endif
- DYNA_TST_b_r(3); // test C
- DYNA_DUMMYBRANCH(2,0);
- DYNA_DEC_l_r(2,0); // dec B
- DYNA_BCC_c(0x6,2,0); //jump here if not zero
- DYNA_DEC_l_r(3,0); // dec C
- break;
- case 0x41: /* LD B,C */
+ break; /* FIXME: Implement */
+ case 0x2A: /* LD A,(HLI) */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD B,C\n");
+ fdprintf(fd, "LD A,(HLI)\n");
#endif
- DYNA_MOVE_b_r_to_r(3,2);
- break;
- case 0x42: /* LD B,D */
+ break; /* FIXME: Implement */
+ case 0x2B: /* DEC HL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD B,D\n");
+ fdprintf(fd, "DEC HL\n");
#endif
- DYNA_MOVE_b_r_to_r(4,2);
- break;
- case 0x43: /* LD B,E */
+ break; /* FIXME: Implement */
+ case 0x2C: /* INC L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x2D: /* DEC L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x2E: /* LD L,imm */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD B,E\n");
+ fdprintf(fd,"LD L,#0x%x\n",readb(xPC));
+#endif
+ DYNA_AND_l_i_to_r(0xFF00,6);
+ DYNA_OR_l_i_to_r(FETCH,6);
+ break;
+ case 0x2F: /* CPL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CPL\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x30: /* JR NC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "JR NC\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x31: /* LD SP,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD SP,#0x%x\n",readw(xPC));
+#endif
+ DYNA_MOVEA_l_i_to_r(readw(xPC),0);
+ PC += 2;
+ break;
+ case 0x32: /* LD (HLD),A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HLD),A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x33: /* INC SP */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC SP\n");
#endif
- DYNA_MOVE_b_r_to_r(5,2);
- break;
- case 0x44: /* LD B,H */
+ break; /* FIXME: Implement */
+ case 0x34: /* INC (HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC (HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x35: /* DEC (HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC (HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x36: /* LD (HD),imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HD),imm\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x37: /* SCF */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SCF\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x38: /* JR C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "JR C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x39: /* ADD HL,SP */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD HL,SP\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x3A: /* LD A,(HLD) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD A,(HLD)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x3B: /* DEC SP */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC SP\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x3C: /* INC A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "INC A");
+#endif
+ DYNA_INC_l_r(1,0); /* Is this right? */
+ break;
+ case 0x3D: /* DEC A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "DEC A");
+#endif
+ DYNA_DEC_l_r(1,0); /* Is this right? */
+ break;
+ case 0x3E: /* LD A,imm */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD B,H\n");
+ fdprintf(fd,"LD A,#0x%x\n",readb(xPC));
+#endif
+ DYNA_MOVEQ_l_i_to_r(FETCH,1);
+ break;
+ case 0x3F: /* CCF */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CCF\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x40: /* LD B,B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD B,B\n");
+#endif
+ break;
+ case 0x41: /* LD B,C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD B,C\n");
#endif
- GETUPPER(6,0);
- DYNA_MOVE_b_r_to_r(0,2);
- break;
- case 0x45: /* LD B,L */
+ DYNA_MOVE_b_r_to_r(3,2);
+ break;
+ case 0x42: /* LD B,D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD B,D\n");
+#endif
+ DYNA_MOVE_b_r_to_r(4,2);
+ break;
+ case 0x43: /* LD B,E */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD B,L\n");
+ fdprintf(fd,"LD B,E\n");
#endif
- DYNA_MOVE_b_r_to_r(6,2);
- break;
- case 0x47: /* LD B,A */
+ DYNA_MOVE_b_r_to_r(5,2);
+ break;
+ case 0x44: /* LD B,H */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD B,A\n");
+ fdprintf(fd,"LD B,H\n");
#endif
- DYNA_MOVE_b_r_to_r(1,2);
- break;
- case 0x48: /* LD C,B */
+ GETUPPER(6,0);
+ DYNA_MOVE_b_r_to_r(0,2);
+ break;
+ case 0x45: /* LD B,L */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD C,B\n");
+ fdprintf(fd,"LD B,L\n");
+#endif
+ DYNA_MOVE_b_r_to_r(6,2);
+ break;
+ case 0x46: /* LD B,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD B,(HL)\n");
#endif
- DYNA_MOVE_b_r_to_r(2,3);
- break;
- case 0x4A: /* LD C,D */
+ break; /* FIXME: Implement */
+ case 0x47: /* LD B,A */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD C,D\n");
+ fdprintf(fd,"LD B,A\n");
#endif
- DYNA_MOVE_b_r_to_r(4,3);
- break;
- case 0x4B: /* LD C,E */
+ DYNA_MOVE_b_r_to_r(1,2);
+ break;
+ case 0x48: /* LD C,B */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD C,E\n");
+ fdprintf(fd,"LD C,B\n");
#endif
- DYNA_MOVE_b_r_to_r(5,3);
- break;
- case 0x4C: /* LD C,H */
+ DYNA_MOVE_b_r_to_r(2,3);
+ break;
+ case 0x49: /* LD C,C */
+ break;
+ case 0x4A: /* LD C,D */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD C,H\n");
+ fdprintf(fd,"LD C,D\n");
#endif
- GETUPPER(6,0);
- DYNA_MOVE_b_r_to_r(0,3);
- break;
- case 0x4D: /* LD C,L */
+ DYNA_MOVE_b_r_to_r(4,3);
+ break;
+ case 0x4B: /* LD C,E */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD C,L\n");
+ fdprintf(fd,"LD C,E\n");
#endif
- DYNA_MOVE_b_r_to_r(6,3);
- break;
- case 0x4F: /* LD C,A */
+ DYNA_MOVE_b_r_to_r(5,3);
+ break;
+ case 0x4C: /* LD C,H */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD C,A\n");
+ fdprintf(fd,"LD C,H\n");
#endif
- DYNA_MOVE_b_r_to_r(1,3);
- break;
-
- case 0x50: /* LD D,B */
+ GETUPPER(6,0);
+ DYNA_MOVE_b_r_to_r(0,3);
+ break;
+ case 0x4D: /* LD C,L */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD D,B\n");
+ fdprintf(fd,"LD C,L\n");
+#endif
+ DYNA_MOVE_b_r_to_r(6,3);
+ break;
+ case 0x4E: /* LD C,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD C,(HL)\n");
#endif
- DYNA_MOVE_b_r_to_r(2,4);
- break;
- case 0x51: /* LD D,C */
+ break; /* FIXME: Implement */
+ case 0x4F: /* LD C,A */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD D,C\n");
+ fdprintf(fd,"LD C,A\n");
#endif
- DYNA_MOVE_b_r_to_r(3,4);
- break;
- case 0x53: /* LD D,E */
+ DYNA_MOVE_b_r_to_r(1,3);
+ break;
+ case 0x50: /* LD D,B */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD D,E\n");
+ fdprintf(fd,"LD D,B\n");
#endif
- DYNA_MOVE_b_r_to_r(5,4);
- break;
- case 0x54: /* LD D,H */
+ DYNA_MOVE_b_r_to_r(2,4);
+ break;
+ case 0x51: /* LD D,C */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD D,H\n");
+ fdprintf(fd,"LD D,C\n");
#endif
- GETUPPER(6,0);
- DYNA_MOVE_b_r_to_r(0,4);
- break;
- case 0x55: /* LD D,L */
+ DYNA_MOVE_b_r_to_r(3,4);
+ break;
+ case 0x52: /* LD D,D */
+ break;
+ case 0x53: /* LD D,E */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD D,L\n");
+ fdprintf(fd,"LD D,E\n");
#endif
- DYNA_MOVE_b_r_to_r(6,4);
- break;
- case 0x57: /* LD D,A */
+ DYNA_MOVE_b_r_to_r(5,4);
+ break;
+ case 0x54: /* LD D,H */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD D,A\n");
+ fdprintf(fd,"LD D,H\n");
#endif
- DYNA_MOVE_b_r_to_r(1,4);
- break;
-
- case 0x58: /* LD E,B */
+ GETUPPER(6,0);
+ DYNA_MOVE_b_r_to_r(0,4);
+ break;
+ case 0x55: /* LD D,L */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD E,B\n");
+ fdprintf(fd,"LD D,L\n");
#endif
- DYNA_MOVE_b_r_to_r(2,5);
- break;
- case 0x59: /* LD E,C */
+ DYNA_MOVE_b_r_to_r(6,4);
+ break;
+ case 0x56: /* LD D,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD D,(HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x57: /* LD D,A */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD E,C\n");
+ fdprintf(fd,"LD D,A\n");
#endif
- DYNA_MOVE_b_r_to_r(3,5);
- break;
- case 0x5A: /* LD E,D */
+ DYNA_MOVE_b_r_to_r(1,4);
+ break;
+ case 0x58: /* LD E,B */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD E,D\n");
+ fdprintf(fd,"LD E,B\n");
#endif
- DYNA_MOVE_b_r_to_r(4,5);
- break;
- case 0x5C: /* LD E,H */
+ DYNA_MOVE_b_r_to_r(2,5);
+ break;
+ case 0x59: /* LD E,C */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD E,H\n");
+ fdprintf(fd,"LD E,C\n");
#endif
- GETUPPER(6,0);
- DYNA_MOVE_b_r_to_r(0,5);
- break;
- case 0x5D: /* LD E,L */
+ DYNA_MOVE_b_r_to_r(3,5);
+ break;
+ case 0x5A: /* LD E,D */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD E,L\n");
+ fdprintf(fd,"LD E,D\n");
#endif
- DYNA_MOVE_b_r_to_r(6,5);
- break;
- case 0x5F: /* LD E,A */
+ DYNA_MOVE_b_r_to_r(4,5);
+ break;
+ case 0x5B: /* LD E,E */
+ break;
+ case 0x5C: /* LD E,H */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD E,A\n");
+ fdprintf(fd,"LD E,H\n");
#endif
- DYNA_MOVE_b_r_to_r(1,5);
- break;
-
- case 0x60: /* LD H,B */
+ GETUPPER(6,0);
+ DYNA_MOVE_b_r_to_r(0,5);
+ break;
+ case 0x5D: /* LD E,L */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD H,B\n");
+ fdprintf(fd,"LD E,L\n");
#endif
- DYNA_MOVE_b_r_to_r(2,0);
- PUTUPPER(0,6);
- break;
- case 0x61: /* LD H,C */
+ DYNA_MOVE_b_r_to_r(6,5);
+ break;
+ case 0x5E: /* LD E,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD E,(HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x5F: /* LD E,A */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD H,C\n");
+ fdprintf(fd,"LD E,A\n");
#endif
- DYNA_MOVE_b_r_to_r(3,0);
- PUTUPPER(0,6);
- break;
- case 0x62: /* LD H,D */
+ DYNA_MOVE_b_r_to_r(1,5);
+ break;
+ case 0x60: /* LD H,B */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD H,D\n");
+ fdprintf(fd,"LD H,B\n");
#endif
- DYNA_MOVE_b_r_to_r(4,0);
- PUTUPPER(0,6);
- break;
- case 0x63: /* LD H,E */
+ DYNA_MOVE_b_r_to_r(2,0);
+ PUTUPPER(0,6);
+ break;
+ case 0x61: /* LD H,C */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD H,E\n");
+ fdprintf(fd,"LD H,C\n");
#endif
- DYNA_MOVE_b_r_to_r(5,0);
- PUTUPPER(0,6);
- break;
- case 0x65: /* LD H,L */
+ DYNA_MOVE_b_r_to_r(3,0);
+ PUTUPPER(0,6);
+ break;
+ case 0x62: /* LD H,D */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD H,L\n");
+ fdprintf(fd,"LD H,D\n");
#endif
- DYNA_MOVE_b_r_to_r(6,0);
- PUTUPPER(0,6);
- break;
- case 0x67: /* LD H,A */
+ DYNA_MOVE_b_r_to_r(4,0);
+ PUTUPPER(0,6);
+ break;
+ case 0x63: /* LD H,E */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD H,A\n");
-#endif
- DYNA_MOVE_b_r_to_r(1,0);
- PUTUPPER(0,6);
- break;
- case 0x68: /* LD L,B */
+ fdprintf(fd,"LD H,E\n");
+#endif
+ DYNA_MOVE_b_r_to_r(5,0);
+ PUTUPPER(0,6);
+ break;
+ case 0x64: /* LD H,H */
+ break;
+ case 0x65: /* LD H,L */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD L,B\n");
+ fdprintf(fd,"LD H,L\n");
+#endif
+ DYNA_MOVE_b_r_to_r(6,0);
+ PUTUPPER(0,6);
+ break;
+ case 0x66: /* LD H,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD H,(HL)\n");
#endif
- DYNA_MOVE_b_r_to_r(2,6);
- break;
- case 0x69: /* LD L,C */
+ break; /* FIXME: Implement */
+ case 0x67: /* LD H,A */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD L,C\n");
+ fdprintf(fd,"LD H,A\n");
+#endif
+ DYNA_MOVE_b_r_to_r(1,0);
+ PUTUPPER(0,6);
+ break;
+ case 0x68: /* LD L,B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD L,B\n");
#endif
- DYNA_MOVE_b_r_to_r(3,6);
- break;
- case 0x6A: /* LD L,D */
+ DYNA_MOVE_b_r_to_r(2,6);
+ break;
+ case 0x69: /* LD L,C */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD L,D\n");
+ fdprintf(fd,"LD L,C\n");
#endif
- DYNA_MOVE_b_r_to_r(4,6);
- break;
- case 0x6B: /* LD L,E */
+ DYNA_MOVE_b_r_to_r(3,6);
+ break;
+ case 0x6A: /* LD L,D */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD L,E\n");
+ fdprintf(fd,"LD L,D\n");
#endif
- DYNA_MOVE_b_r_to_r(5,6);
- break;
- case 0x6C: /* LD L,H */
+ DYNA_MOVE_b_r_to_r(4,6);
+ break;
+ case 0x6B: /* LD L,E */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD L,H\n");
+ fdprintf(fd,"LD L,E\n");
#endif
- GETUPPER(6,0);
- DYNA_MOVE_b_r_to_r(0,6);
- break;
-
- case 0x78: /* LD A,B */
+ DYNA_MOVE_b_r_to_r(5,6);
+ break;
+ case 0x6C: /* LD L,H */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD A,B\n");
+ fdprintf(fd,"LD L,H\n");
+#endif
+ GETUPPER(6,0);
+ DYNA_MOVE_b_r_to_r(0,6);
+ break;
+ case 0x6D: /* LD L,L */
+ break;
+ case 0x6E: /* LD L,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD L,(HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x6F: /* LD L,A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD L,A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x70: /* LD (HL),B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HL),B\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x71: /* LD (HL),C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HL),C\n");
#endif
- DYNA_MOVE_b_r_to_r(2,1);
- break;
- case 0x79: /* LD A,C */
+ break; /* FIXME: Implement */
+ case 0x72: /* LD (HL),D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HL),D\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x73: /* LD (HL),E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HL),E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x74: /* LD (HL),H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HL),H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x75: /* LD (HL),L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HL),L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x76: /* HALT */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "HALT\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x77: /* LD (HL),A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD (HL),A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x78: /* LD A,B */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD A,C\n");
+ fdprintf(fd,"LD A,B\n");
#endif
- DYNA_MOVE_b_r_to_r(3,1);
- break;
- case 0x7A: /* LD A,D */
+ DYNA_MOVE_b_r_to_r(2,1);
+ break;
+ case 0x79: /* LD A,C */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD A,D\n");
+ fdprintf(fd,"LD A,C\n");
#endif
- DYNA_MOVE_b_r_to_r(4,1);
- break;
- case 0x7B: /* LD A,E */
+ DYNA_MOVE_b_r_to_r(3,1);
+ break;
+ case 0x7A: /* LD A,D */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD A,E\n");
+ fdprintf(fd,"LD A,D\n");
#endif
- DYNA_MOVE_b_r_to_r(5,1);
- break;
- case 0x7C: /* LD A,H */
+ DYNA_MOVE_b_r_to_r(4,1);
+ break;
+ case 0x7B: /* LD A,E */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD A,H\n");
+ fdprintf(fd,"LD A,E\n");
#endif
- GETUPPER(5,0);
- DYNA_MOVE_b_r_to_r(0,1);
- break;
- case 0x7D: /* LD A,L */
+ DYNA_MOVE_b_r_to_r(5,1);
+ break;
+ case 0x7C: /* LD A,H */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD A,L\n");
+ fdprintf(fd,"LD A,H\n");
#endif
- DYNA_MOVE_b_r_to_r(5,1);
- break;
- case 0x01: /* LD BC,imm */
- { /* warning (do we have endianness right?) */
+ GETUPPER(5,0);
+ DYNA_MOVE_b_r_to_r(0,1);
+ break;
+ case 0x7D: /* LD A,L */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD BC,#0x%x\n",readw(xPC));
-#endif
- temp=readw(xPC);
- DYNA_MOVEQ_l_i_to_r((temp&0xFF00)>>8,2);
- DYNA_MOVEQ_l_i_to_r(temp&0xFF,3);
- PC+=2;
- }
- break;
- case 0x11: /* LD DE,imm */
- {
+ fdprintf(fd,"LD A,L\n");
+#endif
+ DYNA_MOVE_b_r_to_r(5,1);
+ break;
+ case 0x7E: /* LD A,HL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD DE,#0x%x\n",readw(xPC));
+ fdprintf(fd, "LD A,HL\n");
#endif
- temp=readw(xPC);
- DYNA_MOVEQ_l_i_to_r((temp&0xFF00)>>8,4);
- DYNA_MOVEQ_l_i_to_r(temp&0xFF,5);
- PC += 2;
- }
- break;
- case 0x21: /* LD HL,imm */
- {
+ break; /* FIXME: Implement */
+ case 0x7F: /* LD A,A */
+ break;
+ case 0x80: /* ADD A,B */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD HL,#0x%x\n",readw(xPC));
+ fdprintf(fd, "ADD A,B\n");
#endif
- DYNA_MOVE_l_i_to_r(readw(xPC),6);
- PC += 2;
- }
- break;
- case 0x22: /* LDI (HL), A */
+ break; /* FIXME: Implement */
+ case 0x81: /* ADD A,C */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LDI (HL),A\n");
+ fdprintf(fd, "ADD A,C\n");
#endif
-/* DYNA_PUSH_l_r(1,0);
- DYNA_PUSH_l_r(6,0);
- CALL_NATIVE(&writeb);
- DYNA_ADDQ_l_i_to_r(0,7,1);
- DYNA_INC_l_r(6,0);*/
- break;
- case 0x31: /* LD SP,imm */
+ break; /* FIXME: Implement */
+ case 0x82: /* ADD A,D */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD SP,#0x%x\n",readw(xPC));
+ fdprintf(fd, "ADD A,D\n");
#endif
- DYNA_MOVEA_l_i_to_r(readw(xPC),0);
- PC += 2;
- break;
-
- case 0x06: /* LD B,imm */
+ break; /* FIXME: Implement */
+ case 0x83: /* ADD A,E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD A,E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x84: /* ADD A,H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD A,H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x85: /* ADD A,L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD A,L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x86: /* ADD A,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD A,(HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x87: /* ADD A,A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"ADD A,A\n");
+#endif
+ /* code taken from gcc -O3 output by compiling;
+ * c=(2*b)&0xFF;
+ * a=(c) ? 0 : 0x80 | zero flag
+ * (0x20 & (c) << 1) | halfcarry
+ * ((2*b)&0x100)>>4; carry
+ */
+ DYNA_MOVE_l_r_to_r(1,0,0); /* move.l d1, d0 */
+ DYNA_ADD_l_r_to_r(0,0,0); /* add.l d0, d0 */
+ DYNA_AND_l_i_to_r(510,0); /* and.l #510, d0 */
+ DYNA_MOVEA_l_r_to_r(0,3,0); /* movea.l d0,a3 */
+ DYNA_CLR_b_r(7); /* clr.b d7 */
+ DYNA_TST_b_r(0,0); /* tst.b d0 */
+ DYNA_DUMMYBRANCH(2,0);
+ DYNA_MOVE_l_r_to_r(1,0,0); /* move.l d1,d0 */
+ DYNA_LSHIFT_l(3,0,0,0); /* lsr.l #3, d0 */
+ DYNA_MOVEQ_l_i_to_r(16,1); /* moveq #16,d1 */
+ DYNA_AND_l_r_to_r(1,0); /* and.l d1 d0 */
+ DYNA_MOVEQ_l_i_to_r(0x80,7); /* moveq #0x80,d7 */
+ DYNA_OR_l_r_to_r(0,7); /* or.l d0, d7 */
+ DYNA_BCC_c(0x6,2,0); /* branch not equal, here */
+ DYNA_MOVE_l_r_to_r(3,1,1); /* move.l a3,d1 */
+ DYNA_AND_l_i_to_r(0xFE,1); /* and.l #0xFE,d1 */
+ DYNA_AND_l_i_to_r(0xB0,7); /* and.l #0xB0,d7 */
+ break;
+ case 0x88: /* ADC A,B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A,B\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x89: /* ADC A,C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A,C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x8A: /* ADC A,D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A,D\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x8B: /* ADC A,E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A,E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x8C: /* ADC A,H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A,H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x8D: /* ADC A,L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A,L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x8E: /* ADC A,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A,(HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x8F: /* ADC A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x90: /* SUB B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SUB B\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x91: /* SUB C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SUB C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x92: /* SUB D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SUB D\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x93: /* SUB E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SUB E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x94: /* SUB H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SUB H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x95: /* SUB L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SUB L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x96: /* SUB (HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SUB (HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x97: /* SUB A (halfcarry ?) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"SUB A\n");
+#endif
+ DYNA_CLR_l_r(1);
+ DYNA_MOVEQ_l_i_to_r(0xC0,7);
+ break;
+ case 0x98: /* SBC A,B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,B\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x99: /* SBC A,C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x9A: /* SBC A,D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,D\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x9B: /* SBC A,E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x9C: /* SBC A,H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x9D: /* SBC A,L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x9E: /* SBC A,(HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,(HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0x9F: /* SBC A,A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA0: /* AND B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND B\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA1: /* AND C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA2: /* AND D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND D\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA3: /* AND E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA4: /* AND H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA5: /* AND L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA6: /* AND (HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND (HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA7: /* AND A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA8: /* XOR B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "XOR B\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xA9: /* XOR C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "XOR C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xAA: /* XOR D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "XOR D\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xAB: /* XOR E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "XOR E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xAC: /* XOR H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "XOR H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xAD: /* XOR L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "XOR L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xAE: /* XOR (HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "XOR (HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xAF: /* XOR A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "XOR A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB0: /* OR B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR B\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB1: /* OR C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB2: /* OR D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR D\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB3: /* OR E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB4: /* OR H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB5: /* OR L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB6: /* OR (HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR (HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB7: /* OR A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB8: /* CP B */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CP B\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xB9: /* CP C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CP C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xBA: /* CP D */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CP D\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xBB: /* CP E */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CP E\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xBC: /* CP H */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CP H\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xBD: /* CP L */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CP L\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xBE: /* CP (HL) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CP (HL)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xBF: /* CP A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CP A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xC0: /* RET NZ */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RET NZ\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xC1: /* POP BC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "POP BC\n");
+#endif
+ break;
+ case 0xC2: /* JP NZ */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"JP NZ\n");
+#endif
+ DYNA_BTST_l_r(8,7); /* btst #8,d7 */
+ DYNA_DUMMYBRANCH(2,0);
+ DYNA_MOVEA_l_i_to_r(&blockclen,3);
+ DYNA_MOVE_l_i_to_m(tclen,3);
+ DYNA_MOVEA_l_i_to_r(readw(PC),1);
+ DYNA_RET();
+ DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */
+ tclen--;
+ PC+=2;
+ break;
+ case 0xC3: /* JP (imm) PC = readw(PC) */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD B,#0x%x\n",readb(xPC));
+ fdprintf(fd,"JP (0x%x)\n",readw(xPC));
+#endif
+ PC=readw(PC);
+ done=1;
+ break;
+ case 0xC4: /* CALL NZ */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CALL NZ\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xC5: /* PUSH BC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "PUSH BC\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xC6: /* ADD A,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD A,imm\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xC7: /* RST 0h */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RST 0h\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xC8: /* RET Z */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RET Z\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xC9: /* RET */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"RET\n");
+#endif
+ POPA(1);
+ writepc=0;
+ done=1;
+ break;
+ case 0xCA: /* JP Z */
+ break; /* FIXME: Implement */
+ case 0xCB: /* NULL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"NULL\n");
+#endif
+ break;
+ case 0xCC: /* CALL Z */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CALL Z\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xCD: /* CALL (imm) PUSH(PC+2) PC=readw(PC); */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"CALL (0x%x)\n",readw(xPC));
+#endif
+ PUSH(PC+2);
+ PC=readw(PC);
+ done=1;
+ break;
+ case 0xCE: /* ADC A,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADC A,imm\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xCF: /* RST 8h */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RST 8h\n");
#endif
- DYNA_MOVEQ_l_i_to_r(FETCH,2);
- break;
- case 0x0E: /* LD C,imm */
+ break; /* FIXME: Implement */
+ case 0xD0: /* RET NC */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD C,#0x%x\n",readb(xPC));
+ fdprintf(fd,"RET NC\n");
+#endif
+ DYNA_BTST_l_r(5,7); /* btst #5,d7 */
+ DYNA_DUMMYBRANCH(2,0);
+ POPA(1); /* POP %a1 */
+ DYNA_MOVEA_l_i_to_r(&blockclen,3);
+ DYNA_MOVE_l_i_to_m(tclen,3);
+ DYNA_RET();
+ DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */
+ tclen-=3;
+ break;
+ case 0xD1: /* POP DE */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "POP DE\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xD2: /* JP NC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "JP NC\n");
#endif
- DYNA_MOVEQ_l_i_to_r(FETCH,3);
- break;
- case 0x16: /* LD D,imm */
+ break; /* FIXME: Implement */
+ case 0xD3: /* NULL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD D,#0x%x\n",readb(xPC));
+ fdprintf(fd,"NULL\n");
+#endif
+ break;
+ case 0xD4: /* CALL NC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CALL NC\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xD5: /* PUSH DE */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "PUSH DE\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xD6: /* SUB imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SUB imm\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xD7: /* RST 10h */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RST 10h\n");
#endif
- DYNA_MOVEQ_l_i_to_r(FETCH,4);
- break;
- case 0x1E: /* LD E,imm */
+ break; /* FIXME: Implement */
+ case 0xD8: /* RET C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RET C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xD9: /* RETI */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RETI\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xDA: /* JP C */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "JP C\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xDB: /* NULL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD E,#0x%x\n",readb(xPC));
+ fdprintf(fd,"NULL\n");
#endif
- DYNA_MOVEQ_l_i_to_r(FETCH,5);
- break;
- case 0x26: /* LD H,imm */
+ break;
+ case 0xDC: /* CALL NC */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "CALL NC\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xDD: /* NULL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD H,#0x%x\n",readb(xPC));
+ fdprintf(fd,"NULL\n");
+#endif
+ break;
+ case 0xDE: /* SBC A,imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "SBC A,imm\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xDF: /* RST 18h */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RST 18h\n");
#endif
- DYNA_AND_l_i_to_r(0xFF,6);
- DYNA_OR_l_i_to_r(FETCH<<8,6);
- break;
- case 0x2E: /* LD L,imm */
+ break; /* FIXME: Implement */
+ case 0xE0: /* LDH (imm),A */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD L,#0x%x\n",readb(xPC));
+ fdprintf(fd,"LD (0x%x),A\n",readb(xPC));
+#endif
+ DYNA_PUSH_l_r(1,0);
+ DYNA_PEA_w_i(FETCH);
+ CALL_NATIVE(&writehi);
+ DYNA_ADDQ_l_i_to_r(0,7,1);
+ /*writehi(FETCH, A); */
+ break;
+ case 0xE1: /* POP HL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "POP HL\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xE2: /* LDH (imm),A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LDH (imm),A\n");
#endif
- DYNA_AND_l_i_to_r(0xFF00,6);
- DYNA_OR_l_i_to_r(FETCH,6);
- break;
- case 0x3E: /* LD A,imm */
+ break; /* FIXME: Implement */
+ case 0xE3: /* NULL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD A,#0x%x\n",readb(xPC));
+ fdprintf(fd,"NULL\n");
#endif
- DYNA_MOVEQ_l_i_to_r(FETCH,1);
- break;
-
- case 0xF9: /* LD SP,HL */
+ break;
+ case 0xE4: /* NULL */
+ break;
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD SP,HL\n");
+ fdprintf(fd,"NULL\n");
+#endif
+ case 0xE5: /* PUSH HL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "PUSH HL\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xE6: /* AND imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "AND imm\n");
#endif
- DYNA_MOVEA_w_r_to_r(6,0,0);
- break;
- case 0xF3: /* DI */
+ break; /* FIXME: Implement */
+ case 0xE7: /* RST 20h */
#ifdef DYNA_DEBUG
- fdprintf(fd,"DI\n");
+ fdprintf(fd, "RST 20h\n");
#endif
- DYNA_CLR_l_m(&cpu.ime);
- DYNA_CLR_l_m(&cpu.ima);
- DYNA_CLR_l_m(&cpu.halt);
- /* cpu.halt = cpu.ima = cpu.ime = 0; */
- break;
- case 0xFB: /* EI */
+ break; /* FIXME: Implement */
+ case 0xE8: /* ADD SP */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "ADD SP\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xE9: /* JP HL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "JP HL\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xEA: /* LD A */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD A\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xEB: /* NULL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"EI\n");
+ fdprintf(fd,"NULL\n");
#endif
- DYNA_MOVEQ_l_i_to_r(1,0);
- DYNA_MOVEA_l_i_to_r(&cpu.ima,3);
- DYNA_MOVE_l_r_to_m(0,3);
- /*cpu.ima=1; */
- break;
-
- case 0xE0: /* LDH (imm),A */
+ break;
+ case 0xEC: /* NULL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"LD (0x%x),A\n",readb(xPC));
+ fdprintf(fd,"NULL\n");
#endif
- DYNA_PUSH_l_r(1,0);
- DYNA_PEA_w_i(FETCH);
- CALL_NATIVE(&writehi);
- DYNA_ADDQ_l_i_to_r(0,7,1);
- /*writehi(FETCH, A); */
- break;
-
- case 0xC3: /* JP (imm) PC = readw(PC) */
+ break;
+ case 0xED: /* NULL */
#ifdef DYNA_DEBUG
- fdprintf(fd,"JP (0x%x)\n",readw(xPC));
+ fdprintf(fd,"NULL\n");
#endif
- PC=readw(PC);
- done=1;
- break;
- case 0xCD: /* CALL (imm) PUSH(PC+2) PC=readw(PC); */
+ break;
+ case 0xEE: /* XOR imm */
#ifdef DYNA_DEBUG
- fdprintf(fd,"CALL (0x%x)\n",readw(xPC));
+ fdprintf(fd, "XOR imm\n");
#endif
- PUSH(PC+2);
- PC=readw(PC);
- done=1;
- break;
-
- case 0x97: /* SUB A (halfcarry ?) */
-#ifdef DYNA_DEBUG
- fdprintf(fd,"SUB A\n");
-#endif
- DYNA_CLR_l_r(1);
- DYNA_MOVEQ_l_i_to_r(0xC0,7);
- break;
- case 0xF0: /* LDH A,(imm) */
-#ifdef DYNA_DEBUG
- fdprintf(fd,"LDH A,(0x%x)\n",readb(xPC));
-#endif
- DYNA_PEA_w_i(FETCH);
- CALL_NATIVE(&readhi);
- DYNA_ADDQ_l_i_to_r(4,7,1);
- DYNA_MOVE_b_r_to_r(0,1);
- /*A = readhi(FETCH)*/
- break;
- case 0x87: // ADD A,A
-#ifdef DYNA_DEBUG
- fdprintf(fd,"ADD A,A\n");
-#endif
- /* code taken from gcc -O3 output by compiling;
- * c=(2*b)&0xFF;
- * a=(c) ? 0 : 0x80 | // zero flag
- * (0x20 & (c) << 1) | // halfcarry
- * ((2*b)&0x100)>>4; // carry
- */
- DYNA_MOVE_l_r_to_r(1,0,0); /* move.l d1, d0 */
- DYNA_ADD_l_r_to_r(0,0,0); /* add.l d0, d0 */
- DYNA_AND_l_i_to_r(510,0); /* and.l #510, d0 */
- DYNA_MOVEA_l_r_to_r(0,3,0); /* movea.l d0,a3 */
- DYNA_CLR_b_r(7); /* clr.b d7 */
- DYNA_TST_b_r(0,0); /* tst.b d0 */
- DYNA_DUMMYBRANCH(2,0);
- DYNA_MOVE_l_r_to_r(1,0,0); /* move.l d1,d0 */
- DYNA_LSHIFT_l(3,0,0,0); /* lsr.l #3, d0 */
- DYNA_MOVEQ_l_i_to_r(16,1); /* moveq #16,d1 */
- DYNA_AND_l_r_to_r(1,0); /* and.l d1 d0 */
- DYNA_MOVEQ_l_i_to_r(0x80,7); /* moveq #0x80,d7 */
- DYNA_OR_l_r_to_r(0,7); /* or.l d0, d7 */
- DYNA_BCC_c(0x6,2,0); /* branch not equal, here */
- DYNA_MOVE_l_r_to_r(3,1,1); /* move.l a3,d1 */
- DYNA_AND_l_i_to_r(0xFE,1); /* and.l #0xFE,d1 */
- DYNA_AND_l_i_to_r(0xB0,7); /* and.l #0xB0,d7 */
- break;
- case 0xD0: /* RET NC */
-#ifdef DYNA_DEBUG
- fdprintf(fd,"RET NC\n");
-#endif
- DYNA_BTST_l_r(5,7); /* btst #5,d7 */
- DYNA_DUMMYBRANCH(2,0);
- POPA(1); /* POP %a1 */
- DYNA_MOVEA_l_i_to_r(&blockclen,3);
- DYNA_MOVE_l_i_to_m(tclen,3);
- DYNA_RET();
- DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */
- tclen-=3;
- break;
- case 0xC9: /* RET */
-#ifdef DYNA_DEBUG
- fdprintf(fd,"RET\n");
-#endif
- POPA(1);
- writepc=0;
- done=1;
- break;
- case 0x20: /* JR NZ */
-#ifdef DYNA_DEBUG
- fdprintf(fd,"JR NZ\n");
-#endif
- DYNA_BTST_l_r(8,7); /* btst #8,d7 */
- DYNA_DUMMYBRANCH(2,0);
- DYNA_MOVEA_l_i_to_r(&blockclen,3);
- DYNA_MOVE_l_i_to_m(tclen,3);
- DYNA_MOVEA_l_i_to_r(PC+1+(signed char)readb(PC),1);
- DYNA_RET();
- DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */
- tclen--;
- PC++;
- break;
- case 0xC2: /* JP NZ */
-#ifdef DYNA_DEBUG
- fdprintf(fd,"JP NZ\n");
-#endif
- DYNA_BTST_l_r(8,7); /* btst #8,d7 */
- DYNA_DUMMYBRANCH(2,0);
- DYNA_MOVEA_l_i_to_r(&blockclen,3);
- DYNA_MOVE_l_i_to_m(tclen,3);
- DYNA_MOVEA_l_i_to_r(readw(PC),1);
- DYNA_RET();
- DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */
- tclen--;
- PC+=2;
- break;
-/* case 0xFA: /* LD A, (imm)
-#ifdef DYNA_DEBUG
- fdprintf(fd,"LD A,(0x%x)\n",readw(xPC));
-#endif
- DYNA_PEA_w_i(readw(xPC));
- PC+=2; \
- CALL_NATIVE(&readb); \
- DYNA_ADDQ_l_i_to_r(4,7,1); \
- DYNA_MOVE_l_r_to_r(0,1,0);
- break; */
-
- case 0xFE: /* CMP #<imm> TODO: can be (much) more efficient.*/
-#ifdef DYNA_DEBUG
- fdprintf(fd,"CMP #0x%x\n",readb(xPC));
-#endif
- DYNA_MOVEA_l_r_to_r(2,3,0); /* movea.l %d2, %a3 */
- DYNA_MOVEQ_l_i_to_r(FETCH,2); /* moveq.l #<FETCH>,%d2 */
- CMP(2);
- DYNA_MOVE_l_r_to_r(3,2,1); /* move.l %a3, %d2 */
- break;
-
- case 0xB1: /* OR C */
-#ifdef DYNA_DEBUG
- fdprintf(fd,"OR C\n");
-#endif
- DYNA_OR_l_r_to_r(3,1); // or %d3,%d1
- DYNA_MOVEQ_l_i_to_r(0,7);
- DYNA_TST_b_r(1,0);
- DYNA_DUMMYBRANCH(2,0);
- DYNA_MOVEQ_l_i_to_r(0x80,7);
- DYNA_BCC_c(0x6,2,0);
- break;
- default:
- snprintf(meow,499,"unimplemented opcode %d / 0x%x",op,op);
- die(meow);
- return;
- break;
- }
+ break; /* FIXME: Implement */
+ case 0xEF: /* RST 28h */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RST 28h\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xF0: /* LDH A,(imm) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LDH A,(0x%x)\n",readb(xPC));
+#endif
+ DYNA_PEA_w_i(FETCH);
+ CALL_NATIVE(&readhi);
+ DYNA_ADDQ_l_i_to_r(4,7,1);
+ DYNA_MOVE_b_r_to_r(0,1);
+ /*A = readhi(FETCH)*/
+ break;
+ case 0xF1: /* POP AF */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "POP AF\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xF2: /* LDH A,(imm) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LDH A,(imm)\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xF3: /* DI */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"DI\n");
+#endif
+ DYNA_CLR_l_m(&cpu.ime);
+ DYNA_CLR_l_m(&cpu.ima);
+ DYNA_CLR_l_m(&cpu.halt);
+ /* cpu.halt = cpu.ima = cpu.ime = 0; */
+ break;
+ case 0xF4: /* NULL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"NULL\n");
+#endif
+ break;
+ case 0xF5: /* PUSH AF */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "PUSH AF\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xF6: /* OR imm */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "OR imm\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xF7: /* RST 30h */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RST 30h\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xF8: /* LD HL,SP */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "LD HL,SP\n");
+#endif
+ break; /* FIXME: Implement */
+ case 0xF9: /* LD SP,HL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD SP,HL\n");
+#endif
+ DYNA_MOVEA_w_r_to_r(6,0,0);
+ break;
+ case 0xFA: /* LD A, (imm) */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"LD A,(0x%x)\n",readw(xPC));
+#endif
+ /*DYNA_PEA_w_i(readw(xPC));
+ PC+=2; \
+ CALL_NATIVE(&readb); \
+ DYNA_ADDQ_l_i_to_r(4,7,1); \
+ DYNA_MOVE_l_r_to_r(0,1,0);*/
+ break;
+ case 0xFB: /* EI */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"EI\n");
+#endif
+ DYNA_MOVEQ_l_i_to_r(1,0);
+ DYNA_MOVEA_l_i_to_r(&cpu.ima,3);
+ DYNA_MOVE_l_r_to_m(0,3);
+ /*cpu.ima=1; */
+ break;
+ case 0xFC: /* NULL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"NULL\n");
+#endif
+ break;
+ case 0xFD: /* NULL */
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"NULL\n");
+#endif
+ break;
+ case 0xFE: /* CMP #<imm> TODO: can be (much) more efficient.*/
+#ifdef DYNA_DEBUG
+ fdprintf(fd,"CMP #0x%x\n",readb(xPC));
+#endif
+ DYNA_MOVEA_l_r_to_r(2,3,0); /* movea.l %d2, %a3 */
+ DYNA_MOVEQ_l_i_to_r(FETCH,2); /* moveq.l #<FETCH>,%d2 */
+ CMP(2);
+ DYNA_MOVE_l_r_to_r(3,2,1); /* move.l %a3, %d2 */
+ break;
+ case 0xFF: /* RST 38h */
+#ifdef DYNA_DEBUG
+ fdprintf(fd, "RST 38h\n");
+#endif
+ break; /* FIXME: Implement */
+ default:
+ snprintf(meow,499,"unimplemented opcode %d / 0x%x",op,op);
+ die(meow);
+ return;
+ break;
+ }
}
#ifdef DYNA_DEBUG
fdprintf(fd,"(End of Block)\n");
@@ -968,7 +1900,7 @@ void dynamic_recompile (struct dynarec_block *newblock) {
DYNA_MOVEA_l_i_to_r(&blockclen,3);
DYNA_MOVE_l_i_to_m(tclen,3);
if(writepc)
- DYNA_MOVEA_l_i_to_r(PC,1);
+ DYNA_MOVEA_l_i_to_r(PC,1);
DYNA_RET();
PC=oldpc;
setmallocpos(dynapointer);
@@ -976,9 +1908,9 @@ void dynamic_recompile (struct dynarec_block *newblock) {
invalidate_icache();
snprintf(meow,499,"/dyna_0x%x_code.rb",PC);
fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC);
- if(fd>=0) {
+ if(fd>=0)
+ {
write(fd,newblock->block,newblock->length);
- close(fd);
+ close(fd);
}
}
-#endif
diff --git a/apps/plugins/rockboy/emu.c b/apps/plugins/rockboy/emu.c
index 8ee925cd02..50fc442713 100644
--- a/apps/plugins/rockboy/emu.c
+++ b/apps/plugins/rockboy/emu.c
@@ -5,24 +5,9 @@
#include "cpu-gb.h"
#include "mem.h"
#include "lcd-gb.h"
-#include "rc.h"
#include "sound.h"
#include "rtc-gb.h"
-static int framelen = 16743;
-static int framecount;
-
-rcvar_t emu_exports[] =
-{
- RCV_INT("framelen", &framelen),
- RCV_INT("framecount", &framecount),
- RCV_END
-};
-
-void emu_init(void)
-{
-}
-
/*
* emu_reset is called to initialize the state of the emulated
* system. It should set cpu registers, hardware registers, etc. to
@@ -47,9 +32,8 @@ void emu_step(void)
* make things work in the mean time. */
void emu_run(void)
{
-// void *timer = sys_timer();
+ /*void *timer = sys_timer();*/
int framesin=0,frames=0,timeten=*rb->current_tick, timehun=*rb->current_tick;
-// int delay;
setvidmode(options.fullscreen);
vid_begin();
@@ -63,24 +47,25 @@ void emu_run(void)
while (R_LY > 0 && R_LY < 144)
emu_step();
- rtc_tick();
- sound_mix();
- if (!pcm_submit())
+ /* rtc_tick(); */ /* RTC support not implemented */
+
+ if(options.sound)
{
-/* delay = framelen - sys_elapsed(timer);
- sys_sleep(delay);
- sys_elapsed(timer);*/
+ sound_mix();
+ pcm_submit();
}
-
+
doevents();
vid_begin();
-
+
if (!(R_LCDC & 0x80))
cpu_emulate(32832);
-
+
while (R_LY > 0) /* wait for next frame */
+ {
emu_step();
- rb->yield();
+ rb->yield();
+ }
frames++;
framesin++;
diff --git a/apps/plugins/rockboy/emu.h b/apps/plugins/rockboy/emu.h
index 979b33cc54..2e1c7bdc08 100644
--- a/apps/plugins/rockboy/emu.h
+++ b/apps/plugins/rockboy/emu.h
@@ -1,2 +1,2 @@
void emu_reset(void);
-void emu_run(void);
+void emu_run(void) ICODE_ATTR;
diff --git a/apps/plugins/rockboy/events.c b/apps/plugins/rockboy/events.c
index 5a34ce81e5..c018f7ce53 100644
--- a/apps/plugins/rockboy/events.c
+++ b/apps/plugins/rockboy/events.c
@@ -8,10 +8,6 @@
#include "rockmacros.h"
#include "input.h"
-
-char keystates[MAX_KEYS];
-int nkeysdown;
-
#define MAX_EVENTS 32
static event_t eventqueue[MAX_EVENTS];
@@ -20,34 +16,23 @@ static int eventhead, eventpos;
int ev_postevent(event_t *ev)
{
- int nextevent;
- nextevent = (eventhead+1)%MAX_EVENTS;
- if (nextevent == eventpos)
- return 0;
- eventqueue[eventhead] = *ev;
- eventhead = nextevent;
- return 1;
+ int nextevent;
+ nextevent = (eventhead+1)%MAX_EVENTS;
+ if (nextevent == eventpos)
+ return 0;
+ eventqueue[eventhead] = *ev;
+ eventhead = nextevent;
+ return 1;
}
int ev_getevent(event_t *ev)
{
- if (eventpos == eventhead)
- {
- ev->type = EV_NONE;
- return 0;
- }
- *ev = eventqueue[eventpos];
- eventpos = (eventpos+1)%MAX_EVENTS;
- if (ev->type == EV_PRESS)
- {
- keystates[ev->code] = 1;
- nkeysdown++;
- }
- if (ev->type == EV_RELEASE)
- {
- keystates[ev->code] = 0;
- nkeysdown--;
- if (nkeysdown < 0) nkeysdown = 0;
- }
- return 1;
+ if (eventpos == eventhead)
+ {
+ ev->type = EV_NONE;
+ return 0;
+ }
+ *ev = eventqueue[eventpos];
+ eventpos = (eventpos+1)%MAX_EVENTS;
+ return 1;
}
diff --git a/apps/plugins/rockboy/exports.c b/apps/plugins/rockboy/exports.c
deleted file mode 100644
index 43504f4b4f..0000000000
--- a/apps/plugins/rockboy/exports.c
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-#include "rockmacros.h"
-
-#include "rc.h"
-
-extern rcvar_t emu_exports[], loader_exports[],
- lcd_exports[], rtc_exports[], sound_exports[],
- vid_exports[], joy_exports[], pcm_exports[];
-
-
-rcvar_t *sources[] =
-{
- emu_exports,
- loader_exports,
- lcd_exports,
- rtc_exports,
- sound_exports,
- vid_exports,
- joy_exports,
- pcm_exports,
- NULL
-};
-
-
-void init_exports(void)
-{
- rcvar_t **s = sources;
-
- while (*s)
- rc_exportvars(*(s++));
-}
-
-
-void show_exports(void)
-{
- // TODO
- /*int i, j;
- for (i = 0; sources[i]; i++)
- for (j = 0; sources[i][j].name; j++)
- printf("%s\n", sources[i][j].name);*/
-}
diff --git a/apps/plugins/rockboy/exports.h b/apps/plugins/rockboy/exports.h
deleted file mode 100644
index 8d787c0945..0000000000
--- a/apps/plugins/rockboy/exports.h
+++ /dev/null
@@ -1,2 +0,0 @@
-void init_exports(void);
-void show_exports(void);
diff --git a/apps/plugins/rockboy/fastmem.c b/apps/plugins/rockboy/fastmem.c
index d883438ce1..9092f68fed 100644
--- a/apps/plugins/rockboy/fastmem.c
+++ b/apps/plugins/rockboy/fastmem.c
@@ -3,136 +3,75 @@
#include "rockmacros.h"
#include "fastmem.h"
-
-#define D 0 /* direct */
-#define C 1 /* direct cgb-only */
-#define R 2 /* io register */
-#define S 3 /* sound register */
-#define W 4 /* wave pattern */
-
-#define F 0xFF /* fail */
-
-const byte himask[256];
-
-const byte hi_rmap[256] =
-{
- 0, 0, R, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
- S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, C,
- 0, C, C, C, C, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, C, C, C, C, 0, 0, 0, 0,
- C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-const byte hi_wmap[256] =
-{
- R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R,
- S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
- S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
- S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
- R, R, R, R, R, R, R, R, R, R, R, R, 0, R, 0, R,
- 0, C, C, C, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, R, R, R, R, 0, 0, 0, 0,
- R, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, R
-};
-
-
byte readb(int a)
{
- byte *p = mbc.rmap[a>>12];
- if (p) return p[a];
- else return mem_read(a);
+ byte *p = mbc.rmap[a>>12];
+ if (p) return p[a];
+ else return mem_read(a);
}
void writeb(int a, byte b)
{
- byte *p = mbc.wmap[a>>12];
- if (p) p[a] = b;
- else mem_write(a, b);
+ byte *p = mbc.wmap[a>>12];
+ if (p) p[a] = b;
+ else mem_write(a, b);
}
int readw(int a)
{
- if ((a+1) & 0xfff)
- {
- byte *p = mbc.rmap[a>>12];
- if (p)
- {
+ if ((a+1) & 0xfff)
+ {
+ byte *p = mbc.rmap[a>>12];
+ if (p)
+ {
#ifdef ROCKBOX_LITTLE_ENDIAN
#ifndef ALLOW_UNALIGNED_IO
- if (a&1) return p[a] | (p[a+1]<<8);
+ if (a&1) return p[a] | (p[a+1]<<8);
#endif
- return *(word *)(p+a);
+ return *(word *)(p+a);
#else
- return p[a] | (p[a+1]<<8);
+ return p[a] | (p[a+1]<<8);
#endif
- }
- }
- return mem_read(a) | (mem_read(a+1)<<8);
+ }
+ }
+ return mem_read(a) | (mem_read(a+1)<<8);
}
void writew(int a, int w)
{
- if ((a+1) & 0xfff)
- {
- byte *p = mbc.wmap[a>>12];
- if (p)
- {
+ if ((a+1) & 0xfff)
+ {
+ byte *p = mbc.wmap[a>>12];
+ if (p)
+ {
#ifdef ROCKBOX_LITTLE_ENDIAN
#ifndef ALLOW_UNALIGNED_IO
- if (a&1)
- {
- p[a] = w;
- p[a+1] = w >> 8;
- return;
- }
+ if (a&1)
+ {
+ p[a] = w;
+ p[a+1] = w >> 8;
+ return;
+ }
#endif
- *(word *)(p+a) = w;
- return;
+ *(word *)(p+a) = w;
+ return;
#else
- p[a] = w;
- p[a+1] = w >> 8;
- return;
+ p[a] = w;
+ p[a+1] = w >> 8;
+ return;
#endif
- }
- }
- mem_write(a, w);
- mem_write(a+1, w>>8);
+ }
+ }
+ mem_write(a, w);
+ mem_write(a+1, w>>8);
}
byte readhi(int a)
{
- return readb(a | 0xff00);
+ return readb(a | 0xff00);
}
void writehi(int a, byte b)
{
- writeb(a | 0xff00, b);
+ writeb(a | 0xff00, b);
}
-
-#if 0
-byte readhi(int a)
-{
- byte (*rd)() = hi_read[a];
- return rd ? rd(a) : (ram.hi[a] | himask[a]);
-}
-
-void writehi(int a, byte b)
-{
- byte (*wr)() = hi_write[a];
- if (wr) wr(a, b);
- else ram.hi[a] = b & ~himask[a];
-}
-#endif
-
diff --git a/apps/plugins/rockboy/fastmem.h b/apps/plugins/rockboy/fastmem.h
index e36eb2032a..cc73a55a9d 100644
--- a/apps/plugins/rockboy/fastmem.h
+++ b/apps/plugins/rockboy/fastmem.h
@@ -13,10 +13,5 @@ int readw(int a) ICODE_ATTR;
void writew(int a, int w) ICODE_ATTR;
byte readhi(int a) ICODE_ATTR;
void writehi(int a, byte b) ICODE_ATTR;
-#if 0
-byte readhi(int a);
-void writehi(int a, byte b);
-#endif
-
#endif
diff --git a/apps/plugins/rockboy/fb.h b/apps/plugins/rockboy/fb.h
index d70708e13a..97aeb425a0 100644
--- a/apps/plugins/rockboy/fb.h
+++ b/apps/plugins/rockboy/fb.h
@@ -10,19 +10,15 @@
struct fb
{
- fb_data *ptr;
- int w, h;
- int pelsize;
- int pitch;
- int indexed;
- struct
- {
- int l, r;
- } cc[4];
- int yuv;
- int enabled;
- int dirty;
- int mode;
+ fb_data *ptr;
+ struct
+ {
+ int l, r;
+ } cc[3];
+ int enabled;
+#if !defined(HAVE_LCD_COLOR)
+ int mode;
+#endif
};
diff --git a/apps/plugins/rockboy/hw.c b/apps/plugins/rockboy/hw.c
index 794e4e4516..05cdfbc156 100644
--- a/apps/plugins/rockboy/hw.c
+++ b/apps/plugins/rockboy/hw.c
@@ -11,7 +11,7 @@
#include "fastmem.h"
-struct hw hw;
+struct hw hw IBSS_ATTR;
@@ -24,17 +24,17 @@ struct hw hw;
void hw_interrupt(byte i, byte mask)
{
- byte oldif = R_IF;
- i &= 0x1F & mask;
- R_IF |= i & (hw.ilines ^ i);
-
- /* FIXME - is this correct? not sure the docs understand... */
- if ((R_IF & (R_IF ^ oldif) & R_IE) && cpu.ime) cpu.halt = 0;
- /* if ((i & (hw.ilines ^ i) & R_IE) && cpu.ime) cpu.halt = 0; */
- /* if ((i & R_IE) && cpu.ime) cpu.halt = 0; */
-
- hw.ilines &= ~mask;
- hw.ilines |= i;
+ byte oldif = R_IF;
+ i &= 0x1F & mask;
+ R_IF |= i & (hw.ilines ^ i);
+
+ /* FIXME - is this correct? not sure the docs understand... */
+ if ((R_IF & (R_IF ^ oldif) & R_IE) && cpu.ime) cpu.halt = 0;
+ /* if ((i & (hw.ilines ^ i) & R_IE) && cpu.ime) cpu.halt = 0; */
+ /* if ((i & R_IE) && cpu.ime) cpu.halt = 0; */
+
+ hw.ilines &= ~mask;
+ hw.ilines |= i;
}
@@ -47,64 +47,65 @@ void hw_interrupt(byte i, byte mask)
void hw_dma(byte b)
{
- int i;
- addr a;
+ int i;
+ addr a;
- a = ((addr)b) << 8;
- for (i = 0; i < 160; i++, a++)
- lcd.oam.mem[i] = readb(a);
+ a = ((addr)b) << 8;
+ for (i = 0; i < 160; i++, a++)
+ lcd.oam.mem[i] = readb(a);
}
-
-
-void hw_hdma_cmd(byte c)
+void hw_hdma(void)
{
- int cnt;
- addr sa;
- int da;
-
- /* Begin or cancel HDMA */
- if ((hw.hdma|c) & 0x80)
- {
- hw.hdma = c;
- R_HDMA5 = c & 0x7f;
- return;
- }
-
- /* Perform GDMA */
- sa = ((addr)R_HDMA1 << 8) | (R_HDMA2&0xf0);
- da = 0x8000 | ((int)(R_HDMA3&0x1f) << 8) | (R_HDMA4&0xf0);
- cnt = ((int)c)+1;
- /* FIXME - this should use cpu time! */
- /*cpu_timers(102 * cnt);*/
- cnt <<= 4;
- while (cnt--)
- writeb(da++, readb(sa++));
- R_HDMA1 = sa >> 8;
- R_HDMA2 = sa & 0xF0;
- R_HDMA3 = 0x1F & (da >> 8);
- R_HDMA4 = da & 0xF0;
- R_HDMA5 = 0xFF;
+ int cnt;
+ addr sa;
+ int da;
+
+ sa = ((addr)R_HDMA1 << 8) | (R_HDMA2&0xf0);
+ da = 0x8000 | ((int)(R_HDMA3&0x1f) << 8) | (R_HDMA4&0xf0);
+ cnt = 16;
+ while (cnt--)
+ writeb(da++, readb(sa++));
+ cpu_timers(16);
+ R_HDMA1 = sa >> 8;
+ R_HDMA2 = sa & 0xF0;
+ R_HDMA3 = 0x1F & (da >> 8);
+ R_HDMA4 = da & 0xF0;
+ R_HDMA5--;
+ hw.hdma--;
}
-
-void hw_hdma(void)
+void hw_hdma_cmd(byte c)
{
- int cnt;
- addr sa;
- int da;
-
- sa = ((addr)R_HDMA1 << 8) | (R_HDMA2&0xf0);
- da = 0x8000 | ((int)(R_HDMA3&0x1f) << 8) | (R_HDMA4&0xf0);
- cnt = 16;
- while (cnt--)
- writeb(da++, readb(sa++));
- R_HDMA1 = sa >> 8;
- R_HDMA2 = sa & 0xF0;
- R_HDMA3 = 0x1F & (da >> 8);
- R_HDMA4 = da & 0xF0;
- R_HDMA5--;
- hw.hdma--;
+ int cnt;
+ addr sa;
+ int da;
+
+ /* Begin or cancel HDMA */
+ if ((hw.hdma|c) & 0x80)
+ {
+ hw.hdma = c;
+ R_HDMA5 = c & 0x7f;
+ if ((R_STAT&0x03) == 0x00) hw_hdma();
+ return;
+ }
+
+ /* Perform GDMA */
+ sa = ((addr)R_HDMA1 << 8) | (R_HDMA2&0xf0);
+ da = 0x8000 | ((int)(R_HDMA3&0x1f) << 8) | (R_HDMA4&0xf0);
+ cnt = ((int)c)+1;
+ /* FIXME - this should use cpu time! */
+ /*cpu_timers(102 * cnt);*/
+ cpu_timers((460>>cpu.speed)+cnt*16); /*dalias*/
+ /*cpu_timers(228 + (16*cnt));*/ /* this should be right according to no$ */
+ cnt <<= 4;
+ while (cnt--)
+ writeb(da++, readb(sa++));
+ R_HDMA1 = sa >> 8;
+ R_HDMA2 = sa & 0xF0;
+ R_HDMA3 = 0x1F & (da >> 8);
+ R_HDMA4 = da & 0xF0;
+ R_HDMA5 = 0xFF;
}
@@ -116,20 +117,20 @@ void hw_hdma(void)
void pad_refresh()
{
- byte oldp1;
- oldp1 = R_P1;
- R_P1 &= 0x30;
- R_P1 |= 0xc0;
- if (!(R_P1 & 0x10))
- R_P1 |= (hw.pad & 0x0F);
- if (!(R_P1 & 0x20))
- R_P1 |= (hw.pad >> 4);
- R_P1 ^= 0x0F;
- if (oldp1 & ~R_P1 & 0x0F)
- {
- hw_interrupt(IF_PAD, IF_PAD);
- hw_interrupt(0, IF_PAD);
- }
+ byte oldp1;
+ oldp1 = R_P1;
+ R_P1 &= 0x30;
+ R_P1 |= 0xc0;
+ if (!(R_P1 & 0x10))
+ R_P1 |= (hw.pad & 0x0F);
+ if (!(R_P1 & 0x20))
+ R_P1 |= (hw.pad >> 4);
+ R_P1 ^= 0x0F;
+ if (oldp1 & ~R_P1 & 0x0F)
+ {
+ hw_interrupt(IF_PAD, IF_PAD);
+ hw_interrupt(0, IF_PAD);
+ }
}
@@ -140,44 +141,37 @@ void pad_refresh()
void pad_press(byte k)
{
- if (hw.pad & k)
- return;
- hw.pad |= k;
- pad_refresh();
+ if (hw.pad & k)
+ return;
+ hw.pad |= k;
+ pad_refresh();
}
void pad_release(byte k)
{
- if (!(hw.pad & k))
- return;
- hw.pad &= ~k;
- pad_refresh();
+ if (!(hw.pad & k))
+ return;
+ hw.pad &= ~k;
+ pad_refresh();
}
void pad_set(byte k, int st)
{
- st ? pad_press(k) : pad_release(k);
+ st ? pad_press(k) : pad_release(k);
}
void hw_reset()
{
- hw.ilines = hw.pad = 0;
-
- memset(ram.hi, 0, sizeof ram.hi);
-
- R_P1 = 0xFF;
- R_LCDC = 0x91;
- R_BGP = 0xFC;
- R_OBP0 = 0xFF;
- R_OBP1 = 0xFF;
- R_SVBK = 0x01;
- R_HDMA5 = 0xFF;
- R_VBK = 0xFE;
+ hw.ilines = hw.pad = 0;
+
+ memset(ram.hi, 0, sizeof ram.hi);
+
+ R_P1 = 0xFF;
+ R_LCDC = 0x91;
+ R_BGP = 0xFC;
+ R_OBP0 = 0xFF;
+ R_OBP1 = 0xFF;
+ R_SVBK = 0x01;
+ R_HDMA5 = 0xFF;
+ R_VBK = 0xFE;
}
-
-
-
-
-
-
-
diff --git a/apps/plugins/rockboy/hw.h b/apps/plugins/rockboy/hw.h
index f1e632abdb..297eba30fe 100644
--- a/apps/plugins/rockboy/hw.h
+++ b/apps/plugins/rockboy/hw.h
@@ -25,10 +25,10 @@
struct hw
{
- byte ilines;
- byte pad;
- int hdma;
- int cgb,gba;
+ byte ilines;
+ byte pad;
+ int hdma;
+ int cgb;
};
diff --git a/apps/plugins/rockboy/inflate.c b/apps/plugins/rockboy/inflate.c
deleted file mode 100644
index 6818749187..0000000000
--- a/apps/plugins/rockboy/inflate.c
+++ /dev/null
@@ -1,514 +0,0 @@
-
-/* Slightly modified from its original form so as not to exit the
- * program on errors. The resulting file remains in the public
- * domain for all to use. */
-
-/* --- GZIP file format uncompression routines --- */
-
-/* The following routines (notably the unzip()) function below
- * uncompress gzipped data. They are terribly slow at the task, but
- * it is presumed that they work reasonably well. They don't do any
- * error checking, but they're probably not too vulnerable to buggy
- * data either. Another important limitation (but it would be pretty
- * easy to get around) is that the data must reside in memory, it is
- * not read as a stream. They have been very little tested. Anyway,
- * whatever these functions are good for, I put them in the public
- * domain. -- David Madore <david.madore@ens.fr> 1999/11/21 */
-
-#include "rockmacros.h"
-
-static unsigned int
-peek_bits (const unsigned char *data, long p, int q)
- /* Read q bits starting from bit p from the data pointed to by
- * data. Data is in little-endian format. */
-{
- unsigned int answer;
- int cnt; /* Number of bits already placed in answer */
- char ob, lb; /* Offset and length of bit field within current byte */
-
- answer = 0;
- for ( cnt=0 ; cnt<q ; /* cnt updated in body */ )
- {
- ob = (p+cnt)%8;
- lb = 8-ob;
- if ( cnt+lb > q )
- lb = q-cnt;
- answer |= ((unsigned int)((data[(p+cnt)/8]>>ob)&((1U<<lb)-1)))<<cnt;
- cnt += lb;
- }
- return answer;
-}
-
-static unsigned int
-read_bits (const unsigned char *data, long *p, int q)
- /* Read q bits as per peek_bits(), but also increase p by q. */
-{
- unsigned int answer;
-
- answer = peek_bits (data, *p, q);
- *p += q;
- return answer;
-}
-
-static void
-make_code_table (const char size_table[], int table_length,
- unsigned int code_table[], int maxbits)
- /* Make a code table from a length table. See rfc1951, section
- * 3.2.2, for details on what this means. The size_table
- * contains the length of the Huffman codes for each letter, and
- * the code_table receives the computed codes themselves.
- * table_length is the size of the tables (alphabet length) and
- * maxbits is the maximal allowed code length. */
-{
- int i, j;
- unsigned int code;
-
- code = 0;
- for ( i=1 ; i<=maxbits ; i++ )
- {
- for ( j=0 ; j<table_length ; j++ )
- {
- if ( size_table[j]==i )
- code_table[j] = code++;
- }
- code <<= 1;
- }
-}
-
-static int
-decode_one (const unsigned char *data, long *p,
- const char size_table[], int table_length,
- const unsigned int code_table[], int maxbits)
- /* Decode one alphabet letter from the data, starting at bit p
- * (which will be increased by the appropriate amount) using
- * size_table and code_table to decipher the Huffman encoding. */
-{
- unsigned int code;
- int i, j;
-
- code = 0;
- /* Read as many bits as are likely to be necessary - backward, of
- * course. */
- for ( i=0 ; i<maxbits ; i++ )
- code = (code<<1) + peek_bits (data, (*p)+i, 1);
- /* Now examine each symbol of the table to find one that matches the
- * first bits of the code read. */
- for ( j=0 ; j<table_length ; j++ )
- {
- if ( size_table[j]
- && ( (code>>(maxbits-size_table[j])) == code_table[j] ) )
- {
- *p += size_table[j];
- return j;
- }
- }
- return -1;
-}
-
-/* I don't know what these should be. The rfc1951 doesn't seem to say
- * (it only mentions them in the last paragraph of section 3.2.1). 15
- * is almost certainly safe, and it is the largest I can put given the
- * constraints on the size of integers in the C standard. */
-#define CLEN_MAXBITS 15
-#define HLIT_MAXBITS 15
-#define HDIST_MAXBITS 15
-
-/* The magical table sizes... */
-#define CLEN_TSIZE 19
-#define HLIT_TSIZE 288
-#define HDIST_TSIZE 30
-
-static int
-get_tables (const unsigned char *data, long *p,
- char hlit_size_table[HLIT_TSIZE],
- unsigned int hlit_code_table[HLIT_TSIZE],
- char hdist_size_table[HDIST_TSIZE],
- unsigned int hdist_code_table[HDIST_TSIZE])
- /* Fill the Huffman tables (first the code lengths table, and
- * then, using it, the literal/length table and the distance
- * table). See section 3.2.7 of rfc1951 for details. */
-{
- char hlit, hdist, hclen;
- const int clen_weird_tangle[CLEN_TSIZE]
- = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
- char clen_size_table[CLEN_TSIZE];
- unsigned int clen_code_table[CLEN_TSIZE];
- int j;
- unsigned int b;
- int remainder; /* See note at end of section 3.2.7 of rfc1951. */
- char rem_val;
-
- hlit = read_bits (data, p, 5);
- hdist = read_bits (data, p, 5);
- hclen = read_bits (data, p, 4);
- for ( j=0 ; j<4+hclen ; j++ )
- clen_size_table[clen_weird_tangle[j]]
- = read_bits (data, p, 3);
- for ( ; j<CLEN_TSIZE ; j++ )
- clen_size_table[clen_weird_tangle[j]] = 0;
- make_code_table (clen_size_table, CLEN_TSIZE,
- clen_code_table, CLEN_MAXBITS);
- remainder = 0;
- rem_val = 0;
- for ( j=0 ; j<257+hlit ; j++ )
- {
- b = decode_one (data, p, clen_size_table, CLEN_TSIZE,
- clen_code_table, CLEN_MAXBITS);
- if ( b<0 ) return -1;
- if ( b<16 )
- hlit_size_table[j] = b;
- else if ( b == 16 )
- {
- int k, l;
-
- k = read_bits (data, p, 2);
- for ( l=0 ; l<k+3 && j+l<257+hlit ; l++ )
- hlit_size_table[j+l] = hlit_size_table[j-1];
- j += l-1;
- remainder = k+3-l; /* THIS IS SO UGLY! */
- rem_val = hlit_size_table[j-1];
- }
- else if ( b == 17 )
- {
- int k, l;
-
- k = read_bits (data, p, 3);
- for ( l=0 ; l<k+3 && j+l<257+hlit ; l++ )
- hlit_size_table[j+l] = 0;
- j += l-1;
- remainder = k+3-l;
- rem_val = 0;
- }
- else if ( b == 18 )
- {
- int k, l;
-
- k = read_bits (data, p, 7);
- for ( l=0 ; l<k+11 && j+l<257+hlit ; l++ )
- hlit_size_table[j+l] = 0;
- j += l-1;
- remainder = k+11-l;
- rem_val = 0;
- }
- }
- for ( ; j<HLIT_TSIZE ; j++ )
- hlit_size_table[j] = 0;
- make_code_table (hlit_size_table, HLIT_TSIZE,
- hlit_code_table, HLIT_MAXBITS);
- for ( j=0 ; j<remainder ; j++ )
- hdist_size_table[j] = rem_val;
- for ( ; j<1+hdist ; j++ )
- /* Can you spell: ``copy-paste''? */
- {
- b = decode_one (data, p, clen_size_table, CLEN_TSIZE,
- clen_code_table, CLEN_MAXBITS);
- if ( b<0 ) return -1;
- if ( b<16 )
- hdist_size_table[j] = b;
- else if ( b == 16 )
- {
- int k, l;
-
- k = read_bits (data, p, 2);
- for ( l=0 ; l<k+3 && j+l<1+hdist ; l++ )
- hdist_size_table[j+l] = hdist_size_table[j-1];
- j += l-1;
- }
- else if ( b == 17 )
- {
- int k, l;
-
- k = read_bits (data, p, 3);
- for ( l=0 ; l<k+3 && j+l<1+hdist ; l++ )
- hdist_size_table[j+l] = 0;
- j += l-1;
- }
- else if ( b == 18 )
- {
- int k, l;
-
- k = read_bits (data, p, 7);
- for ( l=0 ; l<k+11 && j+l<1+hdist ; l++ )
- hdist_size_table[j+l] = 0;
- j += l-1;
- }
- }
- for ( ; j<HDIST_TSIZE ; j++ )
- hdist_size_table[j] = 0;
- make_code_table (hdist_size_table, HDIST_TSIZE,
- hdist_code_table, HDIST_MAXBITS);
- return 0;
-}
-
-/* The (circular) output buffer. This lets us track
- * backreferences. */
-
-/* Minimal buffer size. Also the only useful value. */
-#define BUFFER_SIZE 32768
-
-/* Pointer to the character to be added to the buffer */
-static unsigned int buffer_ptr = 0;
-
-/* The buffer itself */
-static unsigned char buffer[BUFFER_SIZE];
-
-static void
-pushout (unsigned char ch)
- /* Store one byte in the output buffer so it may be retrieved if
- * it is referenced again. */
-{
- buffer[buffer_ptr++] = ch;
- buffer_ptr %= BUFFER_SIZE;
-}
-
-static unsigned char
-pushin (unsigned int dist)
- /* Retrieve one byte, dist bytes away, from the output buffer. */
-{
- return buffer[(buffer_ptr+(BUFFER_SIZE-dist))%BUFFER_SIZE];
-}
-
-static int
-get_data (const unsigned char *data, long *p,
- const char hlit_size_table[HLIT_TSIZE],
- const unsigned int hlit_code_table[HLIT_TSIZE],
- const char hdist_size_table[HDIST_TSIZE],
- const unsigned int hdist_code_table[HDIST_TSIZE],
- void (* callback) (unsigned char d))
- /* Do the actual uncompressing. Call callback on each character
- * uncompressed. */
-{
- unsigned int b;
-
- while ( 1 ) {
- b = decode_one (data, p, hlit_size_table, HLIT_TSIZE,
- hlit_code_table, HLIT_MAXBITS);
- if ( b<0 ) return -1;
- if ( b < 256 )
- /* Literal */
- {
- pushout ((unsigned char) b);
- callback ((unsigned char) b);
- }
- else if ( b == 256 )
- /* End of block */
- return 0;
- else if ( b >= 257 )
- /* Back reference */
- {
- unsigned int bb;
- unsigned int length, dist;
- unsigned int l;
-
- switch ( b )
- {
- case 257: length = 3; break;
- case 258: length = 4; break;
- case 259: length = 5; break;
- case 260: length = 6; break;
- case 261: length = 7; break;
- case 262: length = 8; break;
- case 263: length = 9; break;
- case 264: length = 10; break;
- case 265: length = 11 + read_bits (data, p, 1); break;
- case 266: length = 13 + read_bits (data, p, 1); break;
- case 267: length = 15 + read_bits (data, p, 1); break;
- case 268: length = 17 + read_bits (data, p, 1); break;
- case 269: length = 19 + read_bits (data, p, 2); break;
- case 270: length = 23 + read_bits (data, p, 2); break;
- case 271: length = 27 + read_bits (data, p, 2); break;
- case 272: length = 31 + read_bits (data, p, 2); break;
- case 273: length = 35 + read_bits (data, p, 3); break;
- case 274: length = 43 + read_bits (data, p, 3); break;
- case 275: length = 51 + read_bits (data, p, 3); break;
- case 276: length = 59 + read_bits (data, p, 3); break;
- case 277: length = 67 + read_bits (data, p, 4); break;
- case 278: length = 83 + read_bits (data, p, 4); break;
- case 279: length = 99 + read_bits (data, p, 4); break;
- case 280: length = 115 + read_bits (data, p, 4); break;
- case 281: length = 131 + read_bits (data, p, 5); break;
- case 282: length = 163 + read_bits (data, p, 5); break;
- case 283: length = 195 + read_bits (data, p, 5); break;
- case 284: length = 227 + read_bits (data, p, 5); break;
- case 285: length = 258; break;
- default:
- return -1;
- }
- bb = decode_one (data, p, hdist_size_table, HDIST_TSIZE,
- hdist_code_table, HDIST_MAXBITS);
- switch ( bb )
- {
- case 0: dist = 1; break;
- case 1: dist = 2; break;
- case 2: dist = 3; break;
- case 3: dist = 4; break;
- case 4: dist = 5 + read_bits (data, p, 1); break;
- case 5: dist = 7 + read_bits (data, p, 1); break;
- case 6: dist = 9 + read_bits (data, p, 2); break;
- case 7: dist = 13 + read_bits (data, p, 2); break;
- case 8: dist = 17 + read_bits (data, p, 3); break;
- case 9: dist = 25 + read_bits (data, p, 3); break;
- case 10: dist = 33 + read_bits (data, p, 4); break;
- case 11: dist = 49 + read_bits (data, p, 4); break;
- case 12: dist = 65 + read_bits (data, p, 5); break;
- case 13: dist = 97 + read_bits (data, p, 5); break;
- case 14: dist = 129 + read_bits (data, p, 6); break;
- case 15: dist = 193 + read_bits (data, p, 6); break;
- case 16: dist = 257 + read_bits (data, p, 7); break;
- case 17: dist = 385 + read_bits (data, p, 7); break;
- case 18: dist = 513 + read_bits (data, p, 8); break;
- case 19: dist = 769 + read_bits (data, p, 8); break;
- case 20: dist = 1025 + read_bits (data, p, 9); break;
- case 21: dist = 1537 + read_bits (data, p, 9); break;
- case 22: dist = 2049 + read_bits (data, p, 10); break;
- case 23: dist = 3073 + read_bits (data, p, 10); break;
- case 24: dist = 4097 + read_bits (data, p, 11); break;
- case 25: dist = 6145 + read_bits (data, p, 11); break;
- case 26: dist = 8193 + read_bits (data, p, 12); break;
- case 27: dist = 12289 + read_bits (data, p, 12); break;
- case 28: dist = 16385 + read_bits (data, p, 13); break;
- case 29: dist = 24577 + read_bits (data, p, 13); break;
- default:
- return -1;
- }
- for ( l=0 ; l<length ; l++ )
- {
- unsigned char ch;
-
- ch = pushin (dist);
- pushout (ch);
- callback (ch);
- }
- }
- }
- return 0;
-}
-
-static int
-inflate (const unsigned char *data, long *p,
- void (* callback) (unsigned char d))
- /* Main uncompression function for the deflate method */
-{
- char blast, btype;
- char hlit_size_table[HLIT_TSIZE];
- unsigned int hlit_code_table[HLIT_TSIZE];
- char hdist_size_table[HDIST_TSIZE];
- unsigned int hdist_code_table[HDIST_TSIZE];
-
- again:
- blast = read_bits (data, p, 1);
- btype = read_bits (data, p, 2);
- if ( btype == 1 || btype == 2 )
- {
- if ( btype == 2 )
- {
- /* Dynamic Huffman tables */
- if (get_tables (data, p,
- hlit_size_table, hlit_code_table,
- hdist_size_table, hdist_code_table) < 0) return -1;
- }
- else
- /* Fixed Huffman codes */
- {
- int j;
-
- for ( j=0 ; j<144 ; j++ )
- hlit_size_table[j] = 8;
- for ( ; j<256 ; j++ )
- hlit_size_table[j] = 9;
- for ( ; j<280 ; j++ )
- hlit_size_table[j] = 7;
- for ( ; j<HLIT_TSIZE ; j++ )
- hlit_size_table[j] = 8;
- make_code_table (hlit_size_table, HLIT_TSIZE,
- hlit_code_table, HLIT_MAXBITS);
- for ( j=0 ; j<HDIST_TSIZE ; j++ )
- hdist_size_table[j] = 5;
- make_code_table (hdist_size_table, HDIST_TSIZE,
- hdist_code_table, HDIST_MAXBITS);
- }
- if (get_data (data, p,
- hlit_size_table, hlit_code_table,
- hdist_size_table, hdist_code_table,
- callback) < 0) return -1;;
- }
- else if ( btype == 0 )
- /* Non compressed block */
- {
- unsigned int len, nlen;
- unsigned int l;
- unsigned char b;
-
- *p = (*p+7)/8; /* Jump to next byte boundary */
- len = read_bits (data, p, 16);
- nlen = read_bits (data, p, 16);
- for ( l=0 ; l<len ; l++ )
- {
- b = read_bits (data, p, 8);
- pushout (b);
- callback (b);
- }
- }
- else
- {
- return -1;
- }
- if ( ! blast )
- goto again;
- return 0;
-}
-
-int
-unzip (const unsigned char *data, long *p,
- void (* callback) (unsigned char d))
- /* Uncompress gzipped data. data is a pointer to the data, p is
- * a pointer to a long that is initialized to 0 (unless for some
- * reason you want to start uncompressing further down the data),
- * and callback is a function taking an unsigned char and
- * returning void that will be called successively for every
- * uncompressed byte. */
-{
- unsigned char cm, flg;
-
- if ( read_bits (data, p, 8) != 0x1f
- || read_bits (data, p, 8) != 0x8b )
- {
- return -1;
- }
- cm = read_bits (data, p, 8);
- if ( cm != 0x8 )
- {
- return -1;
- }
- flg = read_bits (data, p, 8);
- if ( flg & 0xe0 )
- /* fprintf (stderr, "Warning: unknown bits are set in flags.\n") */ ;
- read_bits (data, p, 32); /* Ignore modification time */
- read_bits (data, p, 8); /* Ignore extra flags */
- read_bits (data, p, 8); /* Ignore OS type */
- if ( flg & 0x4 )
- {
- /* Skip over extra data */
- unsigned int xlen;
-
- xlen = read_bits (data, p, 16);
- *p += ((long)xlen)*8;
- }
- if ( flg & 0x8 )
- {
- /* Skip over file name */
- while ( read_bits (data, p, 8) );
- }
- if ( flg & 0x10 )
- {
- /* Skip over comment */
- while ( read_bits (data, p, 8) );
- }
- if ( flg & 0x2 )
- /* Ignore CRC16 */
- read_bits (data, p, 16);
- return inflate (data, p, callback);
- /* CRC32 and ISIZE are at the end. We don't even bother to look at
- * them. */
-}
-
diff --git a/apps/plugins/rockboy/input.h b/apps/plugins/rockboy/input.h
index b57404908d..4ee1c9eb40 100644
--- a/apps/plugins/rockboy/input.h
+++ b/apps/plugins/rockboy/input.h
@@ -4,19 +4,15 @@
* Definitions for input device stuff - buttons, keys, etc.
*/
-
-#define MAX_KEYS 10
-
typedef struct event_s
{
- int type;
- int code;
+ int type;
+ int code;
} event_t;
#define EV_NONE 0
#define EV_PRESS 1
#define EV_RELEASE 2
-#define EV_REPEAT 3
int ev_postevent(event_t *ev) ICODE_ATTR;
int ev_getevent(event_t *ev) ICODE_ATTR;
diff --git a/apps/plugins/rockboy/lcd-gb.h b/apps/plugins/rockboy/lcd-gb.h
index aafeaec165..91f2487462 100644
--- a/apps/plugins/rockboy/lcd-gb.h
+++ b/apps/plugins/rockboy/lcd-gb.h
@@ -7,15 +7,15 @@
struct vissprite
{
- byte *buf;
- int x;
- byte pal, pri, pad[6];
+ byte *buf;
+ int x;
+ byte pal, pri, pad[6];
};
struct scan
{
- int bg[64];
- int wnd[64];
+ int bg[64];
+ int wnd[64];
#if LCD_DEPTH == 1
byte buf[8][256];
#elif LCD_DEPTH == 2
@@ -23,31 +23,29 @@ struct scan
#elif LCD_DEPTH > 4
byte buf[256];
#endif
- byte pal1[128];
- un16 pal2[64];
- un32 pal4[64];
- byte pri[256];
- struct vissprite vs[16];
- int ns, l, x, y, s, t, u, v, wx, wy, wt, wv;
+ un16 pal[64];
+ byte pri[256];
+ struct vissprite vs[16];
+ int ns, l, x, y, s, t, u, v, wx, wy, wt, wv;
};
struct obj
{
- byte y;
- byte x;
- byte pat;
- byte flags;
+ byte y;
+ byte x;
+ byte pat;
+ byte flags;
};
struct lcd
{
- byte vbank[2][8192];
- union
- {
- byte mem[256];
- struct obj obj[40];
- } oam;
- byte pal[128];
+ byte vbank[2][8192];
+ union
+ {
+ byte mem[256];
+ struct obj obj[40];
+ } oam;
+ byte pal[128];
};
extern struct lcd lcd;
@@ -60,14 +58,13 @@ void bg_scan(void) ICODE_ATTR;
void wnd_scan(void) ICODE_ATTR;
void bg_scan_pri(void) ICODE_ATTR;
void wnd_scan_pri(void) ICODE_ATTR;
-void spr_count(void);
void spr_enum(void) ICODE_ATTR;
void spr_scan(void) ICODE_ATTR;
void lcd_begin(void) ICODE_ATTR;
void lcd_refreshline(void) ICODE_ATTR;
void pal_write(int i, byte b) ICODE_ATTR;
void pal_write_dmg(int i, int mapnum, byte d) ICODE_ATTR;
-void vram_write(int a, byte b) ICODE_ATTR;
+void vram_write(addr a, byte b) ICODE_ATTR;
void vram_dirty(void) ICODE_ATTR;
void pal_dirty(void) ICODE_ATTR;
void lcd_reset(void);
diff --git a/apps/plugins/rockboy/lcd.c b/apps/plugins/rockboy/lcd.c
index 1b285ec1b9..05a6a74068 100644
--- a/apps/plugins/rockboy/lcd.c
+++ b/apps/plugins/rockboy/lcd.c
@@ -4,9 +4,8 @@
#include "hw.h"
#include "mem.h"
#include "lcd-gb.h"
-#include "rc.h"
#include "fb.h"
-#include "palette.h"
+#include "palette-presets.h"
#ifdef USE_ASM
#include "asm.h"
#endif
@@ -26,9 +25,7 @@ struct scan scan IBSS_ATTR;
#define PRI (scan.pri)
-#define PAL1 (scan.pal1)
-#define PAL2 (scan.pal2)
-#define PAL4 (scan.pal4)
+#define PAL (scan.pal)
#define VS (scan.vs) /* vissprites */
#define NS (scan.ns)
@@ -53,53 +50,14 @@ byte patpix[4096][8][8]
byte patdirty[1024];
byte anydirty;
-// static int scale = 1;
-
-static int rgb332;
-
-static int sprsort = 1;
-static int sprdebug;
-static int insync=0;
#if LCD_DEPTH < 16
static int scanline_ind=0;
#endif
-#define DEF_PAL { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C }
-
-static int dmg_pal[4][4] = { DEF_PAL, DEF_PAL, DEF_PAL, DEF_PAL };
-
-static int usefilter, filterdmg;
-static int filter[3][4] = {
- { 195, 25, 0, 35 },
- { 25, 170, 25, 35 },
- { 25, 60, 125, 40 }
- };
-
-rcvar_t lcd_exports[] =
- {
- RCV_BOOL("rgb332", &rgb332),
- RCV_VECTOR("dmg_bgp", dmg_pal[0], 4),
- RCV_VECTOR("dmg_wndp", dmg_pal[1], 4),
- RCV_VECTOR("dmg_obp0", dmg_pal[2], 4),
- RCV_VECTOR("dmg_obp1", dmg_pal[3], 4),
- RCV_BOOL("sprsort", &sprsort),
- RCV_BOOL("sprdebug", &sprdebug),
- RCV_BOOL("colorfilter", &usefilter),
- RCV_BOOL("filterdmg", &filterdmg),
- RCV_VECTOR("red", filter[0], 4),
- RCV_VECTOR("green", filter[1], 4),
- RCV_VECTOR("blue", filter[2], 4),
- RCV_END
- };
+static int dmg_pal[4][4];
fb_data *vdest;
-#ifdef ALLOW_UNALIGNED_IO /* long long is ok since this is i386-only anyway? */
-#define MEMCPY8(d, s) ((*(long long *)(d)) = (*(long long *)(s)))
-#else
-#define MEMCPY8(d, s) memcpy((d), (s), 8)
-#endif
-
#ifndef ASM_UPDATEPATPIX
void updatepatpix(void)
{
@@ -506,9 +464,10 @@ void tilebuf(void)
}
-// V = vertical line
-// WX = WND start (if 0, no need to do anything) -> WY
-// U = start...something...thingy... 7 at most
+/* V = vertical line
+ * WX = WND start (if 0, no need to do anything) -> WY
+ * U = start...something...thingy... 7 at most
+ */
void bg_scan(void)
{
int cnt;
@@ -539,7 +498,7 @@ void bg_scan(void)
);
#else
src = patpix[*(tile++)][V];
- MEMCPY8(dest, src);
+ memcpy(dest,src,8);
dest += 8;
#endif
cnt -= 8;
@@ -574,7 +533,7 @@ void wnd_scan(void)
);
#else
src = patpix[*(tile++)][WV];
- MEMCPY8(dest, src);
+ memcpy(dest,src,8);
dest += 8;
#endif
cnt -= 8;
@@ -752,33 +711,12 @@ static void recolor(byte *buf, byte fill, int cnt)
while (cnt--) *(buf++) |= fill;
}
-void spr_count(void)
-{
- int i;
- struct obj *o;
-
- NS = 0;
- if (!(R_LCDC & 0x02)) return;
-
- o = lcd.oam.obj;
-
- for (i = 40; i; i--, o++)
- {
- if (L >= o->y || L + 16 < o->y)
- continue;
- if (L + 8 >= o->y && !(R_LCDC & 0x04))
- continue;
- if (++NS == 10) break;
- }
-}
-
void spr_enum(void)
{
int i, j;
struct obj *o;
- struct vissprite ts[10];
+ struct vissprite ts;
int v, pat;
- int l, x;
NS = 0;
if (!(R_LCDC & 0x02)) return;
@@ -818,24 +756,19 @@ void spr_enum(void)
VS[NS].buf = patpix[pat][v];
if (++NS == 10) break;
}
- if (!sprsort||hw.cgb) return;
- /* not quite optimal but it finally works! */
+ if (hw.cgb) return;
for (i = 0; i < NS; i++)
{
- l = 0;
- x = VS[0].x;
- for (j = 1; j < NS; j++)
+ for (j = i + 1; j < NS; j++)
{
- if (VS[j].x < x)
+ if (VS[i].x > VS[j].x)
{
- l = j;
- x = VS[j].x;
+ ts = VS[i];
+ VS[i] = VS[j];
+ VS[j] = ts;
}
}
- ts[i] = VS[l];
- VS[l].x = 160;
}
- memcpy(VS, ts, sizeof VS);
}
void spr_scan(void)
@@ -854,8 +787,8 @@ void spr_scan(void)
for (; ns; ns--, vs--)
{
x = vs->x;
- if (x >= 160) continue;
- if (x <= -8) continue;
+ if (x > 159) continue;
+ if (x < -7) continue;
if (x < 0)
{
src = vs->buf - x;
@@ -891,12 +824,10 @@ void spr_scan(void)
}
}
else while (i--) if (src[i]) dest[i] = pal|src[i];
- /* else while (i--) if (src[i]) dest[i] = 31 + ns; */
}
-// if (sprdebug) for (i = 0; i < NS; i++) BUF[i<<1] = 36;
}
-// Scaling defines
+/* Scaling defines */
#define DX ((LCD_WIDTH<<16) / 160)
#define DXI ((160<<16) / LCD_WIDTH)
#define DY ((LCD_HEIGHT<<16) / 144)
@@ -904,18 +835,38 @@ void spr_scan(void)
void lcd_begin(void)
{
-/* if (fb.indexed)
- {
- if (rgb332) pal_set332();
- else pal_expire();
- }
-*/
- if(options.fullscreen)
- vdest = fb.ptr;
- else
- vdest=fb.ptr+((LCD_HEIGHT-144)/2)*LCD_WIDTH + ((LCD_WIDTH-160)/2);
+#if (LCD_WIDTH>=160) && (LCD_HEIGHT>=144)
+#define S1 ((LCD_HEIGHT-144)/2)*LCD_WIDTH + ((LCD_WIDTH-160)/2)
+#define S2 0
+
+#elif (LCD_WIDTH>=160) && (LCD_HEIGHT<=144)
+#define S1 ((LCD_WIDTH-160)/2)
+#define S2 ((LCD_WIDTH-160)/2)
+
+#elif (LCD_WIDTH<=160) && (LCD_HEIGHT>=144)
+#define S1 ((LCD_HEIGHT-144)/2)*LCD_WIDTH
+#define S2 ((LCD_HEIGHT-144)/2)*LCD_WIDTH
+#else
+#define S1 0
+#define S2 0
+#endif
+
+#if (LCD_WIDTH>LCD_HEIGHT)
+#define S3 ((LCD_WIDTH-(160*LCD_HEIGHT/144))/2)
+#else
+#define S3 ((LCD_HEIGHT-(144*LCD_WIDTH/160))/2)*LCD_WIDTH
+#endif
+
+ set_pal();
+
+ if(options.fullscreen == 0)
+ vdest=fb.ptr+S1;
+ else if (options.fullscreen == 1)
+ vdest=fb.ptr+S2;
+ else
+ vdest=fb.ptr+S3;
WY = R_WY;
}
@@ -930,11 +881,28 @@ void setvidmode(int mode)
{
switch(mode)
{
- case 1: /* Full screen scale */
+ case 1:
+#if (LCD_WIDTH>=160) && (LCD_HEIGHT>=144) /* Full screen scale */
SCALEWL=DX;
SCALEWS=DXI;
SCALEHL=DY;
SCALEHS=DYI;
+#elif (LCD_WIDTH>=160) && (LCD_HEIGHT<144) /* scale the height */
+ SCALEWL=1<<16;
+ SCALEWS=1<<16;
+ SCALEHL=DY;
+ SCALEHS=DYI;
+#elif (LCD_WIDTH<160) && (LCD_HEIGHT>=144) /* scale the width */
+ SCALEWL=DX;
+ SCALEWS=DXI;
+ SCALEHL=1<<16;
+ SCALEHS=1<<16;
+#else
+ SCALEWL=DX;
+ SCALEWS=DXI;
+ SCALEHL=DY;
+ SCALEHS=DYI;
+#endif
break;
case 2: /* Maintain Ratio */
if (DY<DX)
@@ -952,37 +920,26 @@ void setvidmode(int mode)
SCALEHS=DXI;
}
break;
- default: /* No Scaling (or fullscreen for smaller screens) */
-#if LCD_WIDTH>160
+ default:
SCALEWL=1<<16;
SCALEWS=1<<16;
SCALEHL=1<<16;
SCALEHS=1<<16;
-#else
- SCALEWL=DX;
- SCALEWS=DXI;
- SCALEHL=DY;
- SCALEHS=DYI;
-#endif
}
swidth=(160*SCALEWL)>>16;
sremain=LCD_WIDTH-swidth;
}
-char frameout[30];
void lcd_refreshline(void)
{
- if(!insync) {
- if(R_LY!=0)
- return;
- else
- insync=1;
- }
+#ifdef HAVE_LCD_COLOR
+ char frameout[30];
+#endif
if (!(R_LCDC & 0x80))
return; /* should not happen... */
-#if LCD_HEIGHT < 144
+#if (LCD_HEIGHT <= 128) && !defined(HAVE_LCD_COLOR)
if ( (fb.mode==0&&(R_LY >= 128)) ||
(fb.mode==1&&(R_LY < 16)) ||
(fb.mode==2&&(R_LY<8||R_LY>=136)) ||
@@ -1046,8 +1003,7 @@ void lcd_refreshline(void)
vid_update(L-((int)(L/9)));
#else
{
- /* Universial Scaling pulled from PrBoom and modified for rockboy */
- /* Needs some thought for screens smaller than the gameboy though */
+ /* Universal Scaling pulled from PrBoom and modified for rockboy */
static int hpt IDATA_ATTR=0x8000;
@@ -1059,9 +1015,24 @@ void lcd_refreshline(void)
register unsigned int remain=sremain;
while(wcount--)
{
- *vdest++ = scan.pal2[scan.buf[srcpt>>16]];
+#if LCD_HEIGHT<144 /* cut off the bottom part of the screen that won't fit */
+ if (options.fullscreen==0 && (hpt>>16)>LCD_HEIGHT)
+ break;
+#endif
+
+#if LCD_WIDTH<160 /* cut off the right part of the screen that won't fit */
+ if(options.fullscreen==0 && wcount<(160-LCD_WIDTH)) {
+ vdest+=wcount;
+ wcount = 0;
+ }
+#endif
+
+ *vdest++ = PAL[BUF[srcpt>>16]];
srcpt+=SCALEWS;
}
+#if LCD_HEIGHT<144
+ if (options.fullscreen!=0 || (hpt>>16)<(LCD_HEIGHT))
+#endif
vdest+=remain;
}
@@ -1086,15 +1057,16 @@ void lcd_refreshline(void)
#endif
}
-
-
-
-
+void set_pal(void)
+{
+ memcpy(dmg_pal,palettes[options.pal], sizeof dmg_pal);
+ pal_dirty();
+}
#if HAVE_LCD_COLOR
static void updatepalette(int i)
{
- int c, r, g, b, y, u, v, rr, gg;
+ int c, r, g, b;
c = (lcd.pal[i<<1] | ((int)lcd.pal[(i<<1)|1] << 8)) & 0x7FFF;
r = (c & 0x001F) << 3;
@@ -1104,38 +1076,6 @@ static void updatepalette(int i)
g |= (g >> 5);
b |= (b >> 5);
- if (usefilter && (filterdmg||hw.cgb))
- {
- rr = ((r * filter[0][0] + g * filter[0][1] + b * filter[0][2]) >> 8) + filter[0][3];
- gg = ((r * filter[1][0] + g * filter[1][1] + b * filter[1][2]) >> 8) + filter[1][3];
- b = ((r * filter[2][0] + g * filter[2][1] + b * filter[2][2]) >> 8) + filter[2][3];
- r = rr;
- g = gg;
- }
-
- if (fb.yuv)
- {
- y = (((r * 263) + (g * 516) + (b * 100)) >> 10) + 16;
- u = (((r * 450) - (g * 377) - (b * 73)) >> 10) + 128;
- v = (((r * -152) - (g * 298) + (b * 450)) >> 10) + 128;
- if (y < 0) y = 0; if (y > 255) y = 255;
- if (u < 0) u = 0; if (u > 255) u = 255;
- if (v < 0) v = 0; if (v > 255) v = 255;
- PAL4[i] = (y<<fb.cc[0].l) | (y<<fb.cc[3].l)
- | (u<<fb.cc[1].l) | (v<<fb.cc[2].l);
- return;
- }
-/*
- if (fb.indexed)
- {
- pal_release(PAL1[i]);
- c = pal_getcolor(c, r, g, b);
- PAL1[i] = c;
- PAL2[i] = (c<<8) | c;
- PAL4[i] = (c<<24) | (c<<16) | (c<<8) | c;
- return;
- }*/
-
r = (r >> fb.cc[0].r) << fb.cc[0].l;
g = (g >> fb.cc[1].r) << fb.cc[1].l;
b = (b >> fb.cc[2].r) << fb.cc[2].l;
@@ -1145,24 +1085,7 @@ static void updatepalette(int i)
#elif LCD_PIXELFORMAT == RGB565SWAPPED
c = swap16(r|g|b);
#endif
-
-
- switch (fb.pelsize)
- {
- case 1:
- PAL1[i] = c;
- PAL2[i] = (c<<8) | c;
- PAL4[i] = (c<<24) | (c<<16) | (c<<8) | c;
- break;
- case 2:
- PAL2[i] = c;
- PAL4[i] = (c<<16) | c;
- break;
- case 3:
- case 4:
- PAL4[i] = c;
- break;
- }
+ PAL[i] = c;
}
#endif
@@ -1183,7 +1106,6 @@ void pal_write_dmg(int i, int mapnum, byte d)
if (hw.cgb) return;
- /* if (mapnum >= 2) d = 0xe4; */
for (j = 0; j < 8; j += 2)
{
c = cmap[(d >> j) & 3];
@@ -1197,7 +1119,7 @@ void pal_write_dmg(int i, int mapnum, byte d)
}
}
-void vram_write(int a, byte b)
+void vram_write(addr a, byte b)
{
lcd.vbank[R_VBK&1][a] = b;
if (a >= 0x1800) return;
@@ -1235,7 +1157,6 @@ void lcd_reset(void)
memset(&lcd, 0, sizeof lcd);
lcd_begin();
vram_dirty();
- pal_dirty();
}
diff --git a/apps/plugins/rockboy/lcdc.c b/apps/plugins/rockboy/lcdc.c
index 3b7894d729..90575bbef8 100644
--- a/apps/plugins/rockboy/lcdc.c
+++ b/apps/plugins/rockboy/lcdc.c
@@ -23,32 +23,23 @@
void stat_trigger(void)
{
- static const int condbits[4] = { 0x08, 0x30, 0x20, 0x00 };
- int flag = 0;
+ static const int condbits[4] = { 0x08, 0x10, 0x20, 0x00 };
+ int flag = 0;
- if ((R_LY < 0x91) && (R_LY == R_LYC))
- {
- R_STAT |= 0x04;
- if (R_STAT & 0x40) flag = IF_STAT;
- }
- else R_STAT &= ~0x04;
+ if (R_LY == R_LYC)
+ {
+ R_STAT |= 0x04;
+ if (R_STAT & 0x40) flag = IF_STAT;
+ }
+ else R_STAT &= ~0x04;
- if (R_STAT & condbits[R_STAT&3]) flag = IF_STAT;
+ if (R_STAT & condbits[R_STAT&3]) flag = IF_STAT;
- if (!(R_LCDC & 0x80)) flag = 0;
-
- hw_interrupt(flag, IF_STAT);
+ if (!(R_LCDC & 0x80)) flag = 0;
+
+ hw_interrupt(flag, IF_STAT);
}
-void stat_write(byte b)
-{
- R_STAT = (R_STAT & 0x07) | (b & 0x78);
- if (!hw.cgb &&!(R_STAT & 2)) /* DMG STAT write bug => interrupt */
- hw_interrupt(IF_STAT, IF_STAT);
- stat_trigger();
-}
-
-
/*
* stat_change is called when a transition results in a change to the
* LCD STAT condition (the low 2 bits of R_STAT). It raises or lowers
@@ -58,118 +49,118 @@ void stat_write(byte b)
static void stat_change(int stat)
{
- stat &= 3;
- R_STAT = (R_STAT & 0x7C) | stat;
+ stat &= 3;
+ R_STAT = (R_STAT & 0x7C) | stat;
- if (stat != 1) hw_interrupt(0, IF_VBLANK);
- /* hw_interrupt((stat == 1) ? IF_VBLANK : 0, IF_VBLANK); */
- stat_trigger();
+ if (stat != 1) hw_interrupt(0, IF_VBLANK);
+ /* hw_interrupt((stat == 1) ? IF_VBLANK : 0, IF_VBLANK); */
+ stat_trigger();
}
void lcdc_change(byte b)
{
- byte old = R_LCDC;
- R_LCDC = b;
- if ((R_LCDC ^ old) & 0x80) /* lcd on/off change */
- {
- R_LY = 0;
- stat_change(2);
- C = 40;
- lcd_begin();
- }
+ byte old = R_LCDC;
+ R_LCDC = b;
+ if ((R_LCDC ^ old) & 0x80) /* lcd on/off change */
+ {
+ R_LY = 0;
+ stat_change(2);
+ C = 40;
+ lcd_begin();
+ }
}
void lcdc_trans(void)
{
- if (!(R_LCDC & 0x80))
- {
- while (C <= 0)
- {
- switch ((byte)(R_STAT & 3))
- {
- case 0:
- case 1:
- stat_change(2);
- C += 40;
- break;
- case 2:
- stat_change(3);
- C += 86;
- break;
- case 3:
- stat_change(0);
- if (hw.hdma & 0x80)
- hw_hdma();
- else
- C += 102;
- break;
- }
- return;
- }
- }
- while (C <= 0)
- {
- switch ((byte)(R_STAT & 3))
- {
- case 1:
- if (!(hw.ilines & IF_VBLANK))
- {
- C += 218;
- hw_interrupt(IF_VBLANK, IF_VBLANK);
- break;
- }
- if (R_LY == 0)
- {
- lcd_begin();
- stat_change(2);
- C += 40;
- break;
- }
- else if (R_LY < 152)
- C += 228;
- else if (R_LY == 152)
- C += 28;
- else
- {
- R_LY = -1;
- C += 200;
- }
- R_LY++;
- stat_trigger();
- break;
- case 2:
+ if (!(R_LCDC & 0x80))
+ {
+ while (C <= 0)
+ {
+ switch ((byte)(R_STAT & 3))
+ {
+ case 0:
+ case 1:
+ stat_change(2);
+ C += 40;
+ break;
+ case 2:
+ stat_change(3);
+ C += 86;
+ break;
+ case 3:
+ stat_change(0);
+ if (hw.hdma & 0x80)
+ hw_hdma();
+ else
+ C += 102;
+ break;
+ }
+ return;
+ }
+ }
+ while (C <= 0)
+ {
+ switch ((byte)(R_STAT & 3))
+ {
+ case 1:
+ if (!(hw.ilines & IF_VBLANK))
+ {
+ C += 218;
+ hw_interrupt(IF_VBLANK, IF_VBLANK);
+ break;
+ }
+ if (R_LY == 0)
+ {
+ lcd_begin();
+ stat_change(2);
+ C += 40;
+ break;
+ }
+ else if (R_LY < 152)
+ C += 228;
+ else if (R_LY == 152)
+ C += 28;
+ else
+ {
+ R_LY = -1;
+ C += 200;
+ }
+ R_LY++;
+ stat_trigger();
+ break;
+ case 2:
if (fb.enabled)
lcd_refreshline();
stat_change(3);
C += 86;
break;
- case 3:
- stat_change(0);
- if (hw.hdma & 0x80)
- hw_hdma();
- /* FIXME -- how much of the hblank does hdma use?? */
- /* else */
- C += 102;
- break;
- case 0:
- if (++R_LY >= 144)
- {
- if (cpu.halt)
- {
- hw_interrupt(IF_VBLANK, IF_VBLANK);
- C += 228;
- }
- else C += 10;
- stat_change(1);
- break;
- }
- stat_change(2);
- C += 40;
- break;
- }
- }
+ case 3:
+ stat_change(0);
+ if (hw.hdma & 0x80)
+ hw_hdma();
+ /* FIXME -- how much of the hblank does hdma use?? */
+ /* else */
+ C += 102;
+ break;
+ case 0:
+ if (++R_LY >= 144)
+ {
+ if (cpu.halt)
+ {
+ hw_interrupt(IF_VBLANK, IF_VBLANK);
+ C += 228;
+ }
+ else C += 10;
+ stat_change(1);
+ break;
+ }
+ stat_change(2);
+ C += 40;
+ break;
+ }
+ }
}
diff --git a/apps/plugins/rockboy/loader.c b/apps/plugins/rockboy/loader.c
index d6efa2e8ee..8166220c8e 100644
--- a/apps/plugins/rockboy/loader.c
+++ b/apps/plugins/rockboy/loader.c
@@ -10,68 +10,67 @@
#include "hw.h"
#include "lcd-gb.h"
#include "rtc-gb.h"
-#include "rc.h"
#include "save.h"
#include "sound.h"
static int mbc_table[256] =
{
- 0, 1, 1, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 3, 3, 3, 3, 0, 0, 0, 0, 0, 5, 5, 5, MBC_RUMBLE, MBC_RUMBLE, MBC_RUMBLE, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MBC_HUC3, MBC_HUC1
+ 0, 1, 1, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 3, 3, 3, 3, 0, 0, 0, 0, 0, 5, 5, 5, MBC_RUMBLE, MBC_RUMBLE, MBC_RUMBLE, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MBC_HUC3, MBC_HUC1
};
static int rtc_table[256] =
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
};
static int batt_table[256] =
{
- 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0,
- 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
- 0
+ 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0,
+ 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
+ 0
};
static int romsize_table[256] =
{
- 2, 4, 8, 16, 32, 64, 128, 256, 512,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 128, 128, 128
- /* 0, 0, 72, 80, 96 -- actual values but bad to use these! */
+ 2, 4, 8, 16, 32, 64, 128, 256, 512,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 128, 128, 128
+ /* 0, 0, 72, 80, 96 -- actual values but bad to use these! */
};
static int ramsize_table[256] =
{
- 1, 1, 1, 4, 16,
- 4 /* FIXME - what value should this be?! */
+ 1, 1, 1, 4, 16,
+ 4 /* FIXME - what value should this be?! */
};
@@ -80,304 +79,238 @@ static char sramfile[500];
static char rtcfile[500];
static char saveprefix[500];
-static char *savename;
-
static int saveslot;
static int forcebatt, nobatt;
-static int forcedmg, gbamode;
+static int forcedmg;
static int memfill = -1, memrand = -1;
-//static byte romMemory[4*1025*1024];
-int mp3_buffer_size;
-void *bufferpos;
-
static void initmem(void *mem, int size)
{
- char *p = mem;
- if (memrand >= 0)
- {
- srand(memrand ? memrand : -6 ); //time(0));
- while(size--) *(p++) = rand();
- }
- else if (memfill >= 0)
- memset(p, memfill, size);
+ char *p = mem;
+ if (memrand >= 0)
+ {
+ srand(memrand ? memrand : -6 ); /* time(0)); */
+ while(size--) *(p++) = rand();
+ }
+ else if (memfill >= 0)
+ memset(p, memfill, size);
}
static byte *loadfile(int fd, int *len)
{
- int c, l = 0, p = 0;
-
- byte *d, buf[512];
- d=malloc(32768);
- for(;;)
- {
- c = read(fd, buf, sizeof buf);
- if (c <= 0) break;
- l += c;
- memcpy(d+p, buf, c);
- p += c;
- }
- setmallocpos(d+p+64);
- *len = l;
- return d;
+ int c, l = 0, p = 0;
+
+ byte *d, buf[512];
+ d=malloc(32768);
+ for(;;)
+ {
+ c = read(fd, buf, sizeof buf);
+ if (c <= 0) break;
+ l += c;
+ memcpy(d+p, buf, c);
+ p += c;
+ }
+ setmallocpos(d+p+64);
+ *len = l;
+ return d;
}
-//static byte sram[65536];
int rom_load(void)
{
- int fd;
- byte c, *data, *header;
- int len = 0, rlen;
-
- fd = open(romfile, O_RDONLY);
-
- if (fd<0) {
- die("cannot open rom file");
- die(romfile);
- return 1;
- }
-
- data = loadfile(fd, &len);
- header = data; // no zip. = decompress(data, &len);
-
- memcpy(rom.name, header+0x0134, 16);
- if (rom.name[14] & 0x80) rom.name[14] = 0;
- if (rom.name[15] & 0x80) rom.name[15] = 0;
- rom.name[16] = 0;
-
- c = header[0x0147];
- mbc.type = mbc_table[c];
- mbc.batt = (batt_table[c] && !nobatt) || forcebatt;
-// mbc.batt = 1; // always store savegame mem.
- rtc.batt = rtc_table[c];
- mbc.romsize = romsize_table[header[0x0148]];
- mbc.ramsize = ramsize_table[header[0x0149]];
-
- if (!mbc.romsize) {
- die("unknown ROM size %02X\n", header[0x0148]);
- return 1;
- }
- if (!mbc.ramsize) {
- die("unknown SRAM size %02X\n", header[0x0149]);
- return 1;
- }
-
- rlen = 16384 * mbc.romsize;
- rom.bank = (void *) data; //realloc(data, rlen);
- if (rlen > len) memset(rom.bank[0]+len, 0xff, rlen - len);
-
- ram.sbank = malloc(8192 * mbc.ramsize);
- //ram.ibank = malloc(4096*8);
-
- initmem(ram.sbank, 8192 * mbc.ramsize);
- initmem(ram.ibank, 4096 * 8);
-
- mbc.rombank = 1;
- mbc.rambank = 0;
-
- c = header[0x0143];
+ int fd;
+ byte c, *data, *header;
+ int len = 0, rlen;
+
+ fd = open(romfile, O_RDONLY);
+
+ if (fd<0) {
+ die("cannot open rom file");
+ die(romfile);
+ return 1;
+ }
+
+ data = loadfile(fd, &len);
+ header = data; /* no zip. = decompress(data, &len); */
+
+ memcpy(rom.name, header+0x0134, 16);
+ if (rom.name[14] & 0x80) rom.name[14] = 0;
+ if (rom.name[15] & 0x80) rom.name[15] = 0;
+ rom.name[16] = 0;
+
+ c = header[0x0147];
+ mbc.type = mbc_table[c];
+ mbc.batt = (batt_table[c] && !nobatt) || forcebatt;
+ rtc.batt = rtc_table[c];
+ mbc.romsize = romsize_table[header[0x0148]];
+ mbc.ramsize = ramsize_table[header[0x0149]];
+
+ if (!mbc.romsize) {
+ die("unknown ROM size %02X\n", header[0x0148]);
+ return 1;
+ }
+ if (!mbc.ramsize) {
+ die("unknown SRAM size %02X\n", header[0x0149]);
+ return 1;
+ }
+
+ rlen = 16384 * mbc.romsize;
+ rom.bank = (void *) data; /* realloc(data, rlen); */
+ if (rlen > len) memset(rom.bank[0]+len, 0xff, rlen - len);
+
+ ram.sbank = malloc(8192 * mbc.ramsize);
+ /* ram.ibank = malloc(4096*8); */
+
+ initmem(ram.sbank, 8192 * mbc.ramsize);
+ initmem(ram.ibank, 4096 * 8);
+
+ mbc.rombank = 1;
+ mbc.rambank = 0;
+
+ c = header[0x0143];
hw.cgb = ((c == 0x80) || (c == 0xc0)) && !forcedmg;
- hw.gba = (hw.cgb && gbamode);
-
- close(fd);
+
+ close(fd);
- return 0;
+ return 0;
}
int sram_load(void)
{
- int fd;
- char meow[500];
+ int fd;
+ char meow[500];
- if (!mbc.batt || !sramfile || !*sramfile) return -1;
+ if (!mbc.batt || !sramfile || !*sramfile) return -1;
- /* Consider sram loaded at this point, even if file doesn't exist */
- ram.loaded = 1;
+ /* Consider sram loaded at this point, even if file doesn't exist */
+ ram.loaded = 1;
- fd = open(sramfile, O_RDONLY);
+ fd = open(sramfile, O_RDONLY);
snprintf(meow,499,"Opening %s %d",sramfile,fd);
- rb->splash(HZ*2, true, meow);
- if (fd<0) return -1;
+ rb->splash(HZ*2, true, meow);
+ if (fd<0) return -1;
snprintf(meow,499,"Loading savedata from %s",sramfile);
- rb->splash(HZ*2, true, meow);
- read(fd,ram.sbank, 8192*mbc.ramsize);
- close(fd);
-
- return 0;
+ rb->splash(HZ*2, true, meow);
+ read(fd,ram.sbank, 8192*mbc.ramsize);
+ close(fd);
+
+ return 0;
}
int sram_save(void)
{
- int fd;
- char meow[500];
-
- /* If we crash before we ever loaded sram, DO NOT SAVE! */
- if (!mbc.batt || !sramfile || !ram.loaded || !mbc.ramsize)
- return -1;
- fd = open(sramfile, O_WRONLY|O_CREAT|O_TRUNC);
-// snprintf(meow,499,"Opening %s %d",sramfile,fd);
-// rb->splash(HZ*2, true, meow);
- if (fd<0) return -1;
- snprintf(meow,499,"Saving savedata to %s",sramfile);
- rb->splash(HZ*2, true, meow);
- write(fd,ram.sbank, 8192*mbc.ramsize);
- close(fd);
-
- return 0;
+ int fd;
+ char meow[500];
+
+ /* If we crash before we ever loaded sram, DO NOT SAVE! */
+ if (!mbc.batt || !sramfile || !ram.loaded || !mbc.ramsize)
+ return -1;
+ fd = open(sramfile, O_WRONLY|O_CREAT|O_TRUNC);
+ if (fd<0) return -1;
+ snprintf(meow,499,"Saving savedata to %s",sramfile);
+ rb->splash(HZ*2, true, meow);
+ write(fd,ram.sbank, 8192*mbc.ramsize);
+ close(fd);
+
+ return 0;
}
void state_save(int n)
{
- int fd;
- char name[500];
-
- if (n < 0) n = saveslot;
- if (n < 0) n = 0;
- snprintf(name, 499,"%s.%03d", saveprefix, n);
-
- if ((fd = open(name, O_WRONLY|O_CREAT|O_TRUNC)>=0))
- {
- savestate(fd);
- close(fd);
- }
+ int fd;
+ char name[500];
+
+ if (n < 0) n = saveslot;
+ if (n < 0) n = 0;
+ snprintf(name, 499,"%s.%03d", saveprefix, n);
+
+ if ((fd = open(name, O_WRONLY|O_CREAT|O_TRUNC)>=0))
+ {
+ savestate(fd);
+ close(fd);
+ }
}
void state_load(int n)
{
- int fd;
- char name[500];
-
- if (n < 0) n = saveslot;
- if (n < 0) n = 0;
- snprintf(name, 499, "%s.%03d", saveprefix, n);
-
- if ((fd = open(name, O_RDONLY)>=0))
- {
- loadstate(fd);
- close(fd);
- vram_dirty();
- pal_dirty();
- sound_dirty();
- mem_updatemap();
- }
+ int fd;
+ char name[500];
+
+ if (n < 0) n = saveslot;
+ if (n < 0) n = 0;
+ snprintf(name, 499, "%s.%03d", saveprefix, n);
+
+ if ((fd = open(name, O_RDONLY)>=0))
+ {
+ loadstate(fd);
+ close(fd);
+ vram_dirty();
+ pal_dirty();
+ sound_dirty();
+ mem_updatemap();
+ }
}
void rtc_save(void)
{
- int fd;
- if (!rtc.batt) return;
- if ((fd = open(rtcfile, O_WRONLY|O_CREAT|O_TRUNC))<0) return;
- rtc_save_internal(fd);
- close(fd);
+ int fd;
+ if (!rtc.batt) return;
+ if ((fd = open(rtcfile, O_WRONLY|O_CREAT|O_TRUNC))<0) return;
+ rtc_save_internal(fd);
+ close(fd);
}
void rtc_load(void)
{
- int fd;
- if (!rtc.batt) return;
- if ((fd = open(rtcfile, O_RDONLY))<0) return;
- rtc_load_internal(fd);
- close(fd);
+ int fd;
+ if (!rtc.batt) return;
+ if ((fd = open(rtcfile, O_RDONLY))<0) return;
+ rtc_load_internal(fd);
+ close(fd);
}
void loader_unload(void)
{
- sram_save();
-// if (romfile) free(romfile);
-// if (sramfile) free(sramfile);
-// if (saveprefix) free(saveprefix);
-// if (rom.bank) free(rom.bank);
-// if (ram.sbank) free(ram.sbank);
- romfile = 0;
- rom.bank = 0;
- ram.sbank = 0;
- mbc.type = mbc.romsize = mbc.ramsize = mbc.batt = 0;
-}
-
-/*
-static char *base(char *s)
-{
- char *p;
- p = strrchr(s, '/');
- if (p) return p+1;
- return s;
+ sram_save();
+ /* if (romfile) free(romfile);
+ if (sramfile) free(sramfile);
+ if (saveprefix) free(saveprefix);
+ if (rom.bank) free(rom.bank);
+ if (ram.sbank) free(ram.sbank); */
+ romfile = 0;
+ rom.bank = 0;
+ ram.sbank = 0;
+ mbc.type = mbc.romsize = mbc.ramsize = mbc.batt = 0;
}
-
-static char *ldup(char *s)
-{
- int i;
- char *n, *p;
- p = n = malloc(strlen(s));
- for (i = 0; s[i]; i++) if (isalnum(s[i])) *(p++) = tolower(s[i]);
- *p = 0;
- return n;
-}*/
-
void cleanup(void)
{
- sram_save();
- rtc_save();
- // IDEA - if error, write emergency savestate..?
+ sram_save();
+ rtc_save();
+ /* IDEA - if error, write emergency savestate..? */
}
void loader_init(char *s)
{
- char *name;
-// DIR* dir;
-
-// sys_checkdir(savedir, 1); /* needs to be writable */
-/* dir=opendir(savedir); // should be handled when the program opens
- if(!dir)
- mkdir(savedir);
- else
- closedir(dir);*/
-
- romfile = s;
- if(rom_load())
- return;
- vid_settitle(rom.name);
- name = rom.name;
-
- snprintf(saveprefix, 499, "%s/%s", savedir, name);
-
- strcpy(sramfile, saveprefix);
- strcat(sramfile, ".sav");
-
- strcpy(rtcfile, saveprefix);
- strcat(rtcfile, ".rtc");
-
- sram_load();
- rtc_load();
-
- //atexit(cleanup);
+ romfile = s;
+ if(rom_load())
+ return;
+ rb->splash(HZ/2, true, rom.name);
+
+ snprintf(saveprefix, 499, "%s/%s", savedir, rom.name);
+
+ strcpy(sramfile, saveprefix);
+ strcat(sramfile, ".sav");
+
+ strcpy(rtcfile, saveprefix);
+ strcat(rtcfile, ".rtc");
+
+ sram_load();
+ rtc_load();
}
-
-rcvar_t loader_exports[] =
-{
- RCV_STRING("savedir", &savedir),
- RCV_STRING("savename", &savename),
- RCV_INT("saveslot", &saveslot),
- RCV_BOOL("forcebatt", &forcebatt),
- RCV_BOOL("nobatt", &nobatt),
- RCV_BOOL("forcedmg", &forcedmg),
- RCV_INT("memfill", &memfill),
- RCV_INT("memrand", &memrand),
- RCV_END
-};
-
-
-
-
-
-
-
-
-
diff --git a/apps/plugins/rockboy/loader.h b/apps/plugins/rockboy/loader.h
index 45ee5e705d..2eeb469403 100644
--- a/apps/plugins/rockboy/loader.h
+++ b/apps/plugins/rockboy/loader.h
@@ -6,11 +6,11 @@
typedef struct loader_s
{
- char *rom;
- char *base;
- char *sram;
- char *state;
- int ramloaded;
+ char *rom;
+ char *base;
+ char *sram;
+ char *state;
+ int ramloaded;
} loader_t;
diff --git a/apps/plugins/rockboy/main.c b/apps/plugins/rockboy/main.c
index c9cbb76aaa..fc21ca0d58 100644
--- a/apps/plugins/rockboy/main.c
+++ b/apps/plugins/rockboy/main.c
@@ -3,95 +3,42 @@
#include "rockmacros.h"
#include "input.h"
-#include "rc.h"
-#include "exports.h"
#include "emu.h"
#include "loader.h"
#include "hw.h"
-//#include "Version"
-
-
-static char *defaultconfig[] =
-{
- "bind up +up",
- "bind down +down",
- "bind left +left",
- "bind right +right",
- "bind joy0 +b",
- "bind joy1 +a",
- "bind joy2 +select",
- "bind joy3 +start",
- "bind ins savestate",
- "bind del loadstate",
- NULL
-};
-
-
void doevents()
{
- event_t ev;
- int st;
-
- ev_poll();
- while (ev_getevent(&ev))
- {
- if (ev.type != EV_PRESS && ev.type != EV_RELEASE)
- continue;
- st = (ev.type != EV_RELEASE);
- pad_set(ev.code, st);
- }
+ event_t ev;
+ int st;
+
+ ev_poll();
+ while (ev_getevent(&ev))
+ {
+ if (ev.type != EV_PRESS && ev.type != EV_RELEASE)
+ continue;
+ st = (ev.type != EV_RELEASE);
+ pad_set(ev.code, st);
+ }
}
-
-
-/* convenience macro for printing loading state */
-#define PUTS(str) do { \
- rb->lcd_putsxy(1, y, (unsigned char *)str); \
- rb->lcd_getstringsize((unsigned char *)str, &w, &h); \
- y += h + 1; \
-} while (0)
-
int gnuboy_main(char *rom)
{
- int i, w, h, y;
-
- y = 1;
- // Avoid initializing video if we don't have to
- // If we have special perms, drop them ASAP!
- PUTS("Init exports");
- init_exports();
-
- PUTS("Loading default config");
- for (i = 0; defaultconfig[i]; i++)
- rc_command(defaultconfig[i]);
-
-// sprintf(cmd, "source %s", rom);
-// s = strchr(cmd, '.');
-// if (s) *s = 0;
-// strcat(cmd, ".rc");
-// rc_command(cmd);
-
- // FIXME - make interface modules responsible for atexit()
- PUTS("Init video");
- vid_init();
- PUTS("Init sound");
- pcm_init();
- PUTS("Loading rom");
- loader_init(rom);
- if(shut)
- return PLUGIN_ERROR;
- PUTS("Emu reset");
- emu_reset();
- PUTS("Emu run");
-#if (LCD_HEIGHT > 144) || (LCD_WIDTH > 160)
+ rb->lcd_puts(0,0,"Init video");
+ vid_init();
+ rb->lcd_puts(0,1,"Init sound");
+ pcm_init();
+ rb->lcd_puts(0,2,"Loading rom");
+ loader_init(rom);
+ if(shut)
+ return PLUGIN_ERROR;
+ rb->lcd_puts(0,3,"Emu reset");
+ emu_reset();
+ rb->lcd_puts(0,4,"Emu run");
rb->lcd_clear_display();
-// rb->lcd_drawrect((LCD_WIDTH-160)/2-1, (LCD_HEIGHT-144)/2-1, 162, 146);
rb->lcd_update();
-#endif
- emu_run();
+ emu_run();
- // never reached
- return PLUGIN_OK;
+ /* never reached */
+ return PLUGIN_OK;
}
-#undef PUTS
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 @@
#include "sound.h"
struct mbc mbc IBSS_ATTR;
-struct rom rom;
+struct rom rom IBSS_ATTR;
struct ram ram;
@@ -31,7 +31,7 @@ struct ram ram;
void mem_updatemap()
{
int n;
- byte **map;
+ static byte **map;
map = mbc.rmap;
map[0x0] = rom.bank[0];
@@ -46,16 +46,17 @@ void mem_updatemap()
map[0x7] = rom.bank[mbc.rombank] - 0x4000;
}
else map[0x4] = map[0x5] = map[0x6] = map[0x7] = NULL;
- if (0 && (R_STAT & 0x03) == 0x03)
- {
- map[0x8] = NULL;
- map[0x9] = NULL;
- }
- else
- {
- map[0x8] = lcd.vbank[R_VBK & 1] - 0x8000;
- map[0x9] = lcd.vbank[R_VBK & 1] - 0x8000;
- }
+ if (R_VBK & 1)
+ {
+ map[0x8] = lcd.vbank[1] - 0x8000;
+ map[0x9] = lcd.vbank[1] - 0x8000;
+ }
+ else
+ {
+ map[0x8] = lcd.vbank[0]/*[R_VBK & 1]*/ - 0x8000;
+ map[0x9] = lcd.vbank[0]/*[R_VBK & 1]*/ - 0x8000;
+
+ }
if (mbc.enableram && !(rtc.sel&8))
{
map[0xA] = ram.sbank[mbc.rambank] - 0xA000;
@@ -127,18 +128,18 @@ void ioreg_write(byte r, byte b)
break;
case RI_BGP:
if (R_BGP == b) break;
- pal_write_dmg(0, 0, b);
- pal_write_dmg(8, 1, b);
+ /* pal_write_dmg(0, 0, b); */ /*Disabled in iBoy and WAC-gnuboyCE */
+ /* pal_write_dmg(8, 1, b); */ /*Disabled in iBoy and WAC-gnuboyCE */
R_BGP = b;
break;
case RI_OBP0:
if (R_OBP0 == b) break;
- pal_write_dmg(64, 2, b);
+ /* pal_write_dmg(64, 2, b); */ /*Disabled in iBoy and WAC-gnuboyCE */
R_OBP0 = b;
break;
case RI_OBP1:
if (R_OBP1 == b) break;
- pal_write_dmg(72, 3, b);
+ /* pal_write_dmg(72, 3, b); */ /*Disabled in iBoy and WAC-gnuboyCE */
R_OBP1 = b;
break;
case RI_IF:
@@ -166,7 +167,8 @@ void ioreg_write(byte r, byte b)
lcdc_change(b);
break;
case RI_STAT:
- stat_write(b);
+ REG(r) = (REG(r) & 0x07) | (b & 0x78);
+ stat_trigger();
break;
case RI_LYC:
REG(r) = b;
@@ -220,21 +222,6 @@ void ioreg_write(byte r, byte b)
hw_hdma_cmd(b);
break;
}
- switch (r)
- {
- case RI_BGP:
- case RI_OBP0:
- case RI_OBP1:
- /* printf("palette reg %02X write %02X at LY=%02X\n", r, b, R_LY); */
- case RI_HDMA1:
- case RI_HDMA2:
- case RI_HDMA3:
- case RI_HDMA4:
- case RI_HDMA5:
- /* printf("HDMA %d: %02X\n", r - RI_HDMA1 + 1, b); */
- break;
- }
- /* printf("reg %02X => %02X (%02X)\n", r, REG(r), b); */
}
@@ -410,29 +397,31 @@ void mbc_write(int a, byte b)
break;
}
break;
- case MBC_HUC3:
- switch (ha & 0xE)
- {
- case 0x0:
- mbc.enableram = ((b & 0x0F) == 0x0A);
- break;
- case 0x2:
- b &= 0x7F;
- mbc.rombank = b ? b : 1;
- break;
- case 0x4:
- rtc.sel = b & 0x0f;
- mbc.rambank = b & 0x03;
- break;
- case 0x6:
- rtc_latch(b);
- break;
- }
- break;
- }
+ case MBC_HUC3: /* FIXME - this is all guesswork -- is it right??? */
+ switch (ha & 0xE)
+ {
+ case 0x0:
+ mbc.enableram = ((b & 0x0F) == 0x0A);
+ break;
+ case 0x2:
+ if (!b) b = 1;
+ mbc.rombank = b;
+ break;
+ case 0x4:
+ if (mbc.model)
+ {
+ mbc.rambank = b & 0x03;
+ break;
+ }
+ break;
+ case 0x6:
+ mbc.model = b & 1;
+ break;
+ }
+ break;
+ }
mbc.rombank &= (mbc.romsize - 1);
mbc.rambank &= (mbc.ramsize - 1);
- /* printf("%02X\n", mbc.rombank); */
mem_updatemap();
}
@@ -494,7 +483,8 @@ void mem_write(int a, byte b)
/* return writehi(a & 0xFF, b); */
if (a >= 0xFF10 && a <= 0xFF3F)
{
- sound_write(a & 0xFF, b);
+ if(options.sound)
+ sound_write(a & 0xFF, b);
break;
}
if ((a & 0xFF80) == 0xFF80 && a != 0xFFFF)
@@ -530,14 +520,12 @@ byte mem_read(int a)
case 0x8:
/* if ((R_STAT & 0x03) == 0x03) return 0xFF; */
return lcd.vbank[R_VBK&1][a & 0x1FFF];
- case 0xA:
- if (!mbc.enableram && mbc.type == MBC_HUC3)
- return 0x01;
- if (!mbc.enableram)
- return 0xFF;
- if (rtc.sel&8)
- return rtc.regs[rtc.sel&7];
- return ram.sbank[mbc.rambank][a & 0x1FFF];
+ case 0xA:
+ if (!mbc.enableram)
+ return 0xFF;
+ if (rtc.sel&8)
+ return rtc.regs[rtc.sel&7];
+ return ram.sbank[mbc.rambank][a & 0x1FFF];
case 0xC:
if ((a & 0xF000) == 0xC000)
return ram.ibank[0][a & 0x0FFF];
@@ -554,7 +542,12 @@ byte mem_read(int a)
/* return readhi(a & 0xFF); */
if (a == 0xFFFF) return REG(0xFF);
if (a >= 0xFF10 && a <= 0xFF3F)
- return sound_read(a & 0xFF);
+ {
+ if(options.sound)
+ return sound_read(a & 0xFF);
+ else
+ return 1;
+ }
if ((a & 0xFF80) == 0xFF80)
return ram.hi[a & 0xFF];
return ioreg_read(a & 0xFF);
diff --git a/apps/plugins/rockboy/mem.h b/apps/plugins/rockboy/mem.h
index 14d03d5ff5..66165d1970 100644
--- a/apps/plugins/rockboy/mem.h
+++ b/apps/plugins/rockboy/mem.h
@@ -17,29 +17,29 @@
struct mbc
{
- int type;
- int model;
- int rombank;
- int rambank;
- int romsize;
- int ramsize;
- int enableram;
- int batt;
- byte *rmap[0x10], *wmap[0x10];
+ int type;
+ int model;
+ int rombank;
+ int rambank;
+ int romsize;
+ int ramsize;
+ int enableram;
+ int batt;
+ byte *rmap[0x10], *wmap[0x10];
};
struct rom
{
- byte (*bank)[16384];
- char name[20];
+ byte (*bank)[16384];
+ char name[20];
};
struct ram
{
- byte hi[256];
- byte ibank[8][4096];
- byte (*sbank)[8192];
- int loaded;
+ byte hi[256];
+ byte ibank[8][4096];
+ byte (*sbank)[8192];
+ int loaded;
};
diff --git a/apps/plugins/rockboy/menu.c b/apps/plugins/rockboy/menu.c
index 5f7f6b73c8..b49e480f41 100644
--- a/apps/plugins/rockboy/menu.c
+++ b/apps/plugins/rockboy/menu.c
@@ -13,6 +13,13 @@
#define MENU_BUTTON_DOWN BUTTON_SCROLL_FWD
#define MENU_BUTTON_LEFT BUTTON_LEFT
#define MENU_BUTTON_RIGHT BUTTON_RIGHT
+
+#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
+#define MENU_BUTTON_UP BUTTON_SCROLL_UP
+#define MENU_BUTTON_DOWN BUTTON_SCROLL_DOWN
+#define MENU_BUTTON_LEFT BUTTON_LEFT
+#define MENU_BUTTON_RIGHT BUTTON_RIGHT
+
#else
#define MENU_BUTTON_UP BUTTON_UP
#define MENU_BUTTON_DOWN BUTTON_DOWN
@@ -322,9 +329,9 @@ static void do_opt_menu(void)
};
static const struct opt_items fullscreen[]= {
- { "Off", -1 },
- { "Fullscreen", -1 },
- { "Full - Maintain Ratio", -1 },
+ { "Unscaled", -1 },
+ { "Scaled", -1 },
+ { "Scaled - Maintain Ratio", -1 },
};
static const struct opt_items frameskip[]= {
@@ -333,13 +340,38 @@ static void do_opt_menu(void)
{ "5 Max", -1 },
{ "6 Max", -1 },
};
+
+#ifdef HAVE_LCD_COLOR
+ static const struct opt_items palette[]= {
+ { "Brown (Default)", -1 },
+ { "Gray", -1 },
+ { "Light Gray", -1 },
+ { "Multi-Color 1", -1 },
+ { "Multi-Color 2", -1 },
+ { "Adventure Island", -1 },
+ { "Adventure Island 2", -1 },
+ { "Balloon Kid", -1 },
+ { "Batman", -1 },
+ { "Batman: Return of Joker", -1 },
+ { "Bionic Commando", -1 },
+ { "Castlvania Adventure", -1 },
+ { "Donkey Kong Land", -1 },
+ { "Dr. Mario", -1 },
+ { "Kirby", -1 },
+ { "Metroid", -1 },
+ { "Zelda", -1 },
+ };
+#endif
static const struct menu_item items[] = {
{ "Max Frameskip", NULL },
{ "Sound" , NULL },
{ "Stats" , NULL },
- { "Fullscreen" , NULL },
+ { "Screen Options" , NULL },
{ "Set Keys (Buggy)", NULL },
+#ifdef HAVE_LCD_COLOR
+ { "Set Palette" , NULL },
+#endif
};
m = rb->menu_init(items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL);
@@ -359,6 +391,7 @@ static void do_opt_menu(void)
case 1: /* Sound */
if(options.sound>1) options.sound=1;
rb->set_option(items[1].desc, &options.sound, INT, onoff, 2, NULL );
+ if(options.sound) sound_dirty();
break;
case 2: /* Stats */
rb->set_option(items[2].desc, &options.showstats, INT, onoff, 2, NULL );
@@ -370,6 +403,12 @@ static void do_opt_menu(void)
case 4: /* Keys */
setupkeys();
break;
+#ifdef HAVE_LCD_COLOR
+ case 5: /* Palette */
+ rb->set_option(items[5].desc, &options.pal, INT, palette, 17, NULL );
+ set_pal();
+ break;
+#endif
default:
done=true;
break;
diff --git a/apps/plugins/rockboy/noise.h b/apps/plugins/rockboy/noise.h
index 838cbe171c..05bcff42cd 100644
--- a/apps/plugins/rockboy/noise.h
+++ b/apps/plugins/rockboy/noise.h
@@ -7,524 +7,524 @@
static byte noise7[] ICONST_ATTR =
{
- 0xfd,0xf3,0xd7,0x0d,0xd3,0x15,0x82,0xf1,
- 0xdb,0x25,0x21,0x39,0x68,0x8c,0xd5,0x00,
+ 0xfb,0xe7,0xae,0x1b,0xa6,0x2b,0x05,0xe3,
+ 0xb6,0x4a,0x42,0x72,0xd1,0x19,0xaa,0x03,
};
static byte noise15[] ICONST_ATTR =
{
- 0xff,0xfd,0xff,0xf3,0xff,0xd7,0xff,0x0f,
- 0xfd,0xdf,0xf3,0x3f,0xd5,0x7f,0x00,0xfd,
- 0xfd,0xf3,0xf3,0xd7,0xd7,0x0f,0x0d,0xdd,
- 0xd3,0x33,0x15,0x55,0x80,0x02,0xff,0xf1,
- 0xff,0xdb,0xff,0x27,0xfd,0x2f,0xf1,0x1f,
- 0xd9,0xbf,0x2a,0x7d,0x02,0xf1,0xf1,0xdb,
- 0xdb,0x27,0x25,0x2d,0x21,0x11,0x39,0x99,
- 0x6a,0xa8,0x80,0x0c,0xff,0xd5,0xff,0x03,
- 0xfd,0xf7,0xf3,0xcf,0xd7,0x5f,0x0c,0x3d,
- 0xd7,0x73,0x0c,0xd5,0xd5,0x03,0x01,0xf5,
- 0xfb,0xc3,0xe7,0x77,0xac,0xce,0x15,0x5b,
- 0x80,0x26,0xff,0x29,0xfd,0x0b,0xf1,0xc7,
- 0xdb,0x6f,0x24,0x9d,0x24,0xb1,0x24,0x59,
- 0x26,0x29,0x2b,0x09,0x05,0xc9,0xe3,0x4b,
- 0xb4,0x46,0x46,0x6a,0x6a,0x82,0x80,0xf0,
- 0xfd,0xdd,0xf3,0x33,0xd5,0x57,0x00,0x0d,
- 0xff,0xd3,0xff,0x17,0xfd,0x8f,0xf2,0xdf,
- 0xd1,0x3f,0x19,0x7d,0xa8,0xf2,0x0d,0xd3,
- 0xd3,0x17,0x15,0x8d,0x82,0xd2,0xf1,0x11,
- 0xd9,0x9b,0x2a,0xa5,0x00,0x21,0xff,0x3b,
- 0xfd,0x67,0xf0,0xaf,0xdc,0x1f,0x37,0xbd,
- 0x4e,0x70,0x5a,0xde,0x21,0x3b,0x39,0x65,
- 0x68,0xa0,0x8c,0x3c,0xd7,0x75,0x0c,0xc1,
- 0xd5,0x7b,0x00,0xe5,0xfd,0xa3,0xf2,0x37,
- 0xd3,0x4f,0x14,0x5d,0x86,0x32,0xeb,0x51,
- 0x84,0x1a,0xe7,0xa1,0xae,0x3a,0x1b,0x63,
- 0xa4,0xb6,0x24,0x4b,0x26,0x45,0x2a,0x61,
- 0x02,0xb9,0xf0,0x6b,0xde,0x87,0x38,0xed,
- 0x6d,0x90,0x92,0x9c,0x90,0xb4,0x9c,0x44,
- 0xb6,0x64,0x4a,0xa6,0x40,0x2a,0x7f,0x02,
- 0xfd,0xf1,0xf3,0xdb,0xd7,0x27,0x0d,0x2d,
- 0xd1,0x13,0x19,0x95,0xaa,0x82,0x00,0xf3,
- 0xfd,0xd7,0xf3,0x0f,0xd5,0xdf,0x03,0x3d,
- 0xf5,0x73,0xc0,0xd7,0x7d,0x0c,0xf1,0xd5,
- 0xdb,0x03,0x25,0xf5,0x23,0xc1,0x37,0x79,
- 0x4c,0xe8,0x55,0x8e,0x02,0xdb,0xf1,0x27,
- 0xd9,0x2f,0x29,0x1d,0x09,0xb1,0xca,0x5b,
- 0x42,0x24,0x73,0x26,0xd5,0x29,0x01,0x09,
- 0xf9,0xcb,0xeb,0x47,0x84,0x6e,0xe6,0x99,
- 0xa8,0xaa,0x0c,0x03,0xd7,0xf7,0x0f,0xcd,
- 0xdf,0x53,0x3c,0x15,0x77,0x80,0xce,0xfd,
- 0x59,0xf0,0x2b,0xdf,0x07,0x3d,0xed,0x73,
- 0x90,0xd6,0x9d,0x08,0xb1,0xcc,0x5b,0x56,
- 0x24,0x0b,0x27,0xc5,0x2f,0x61,0x1c,0xb9,
- 0xb4,0x6a,0x46,0x82,0x68,0xf2,0x8d,0xd0,
- 0xd3,0x1d,0x15,0xb1,0x82,0x5a,0xf2,0x21,
- 0xd3,0x3b,0x15,0x65,0x80,0xa2,0xfc,0x31,
- 0xf7,0x5b,0xcc,0x27,0x57,0x2c,0x0d,0x17,
- 0xd1,0x8f,0x1a,0xdd,0xa1,0x32,0x39,0x53,
- 0x68,0x14,0x8f,0x84,0xde,0xe5,0x39,0xa1,
- 0x6a,0x38,0x83,0x6c,0xf4,0x95,0xc4,0x83,
- 0x64,0xf4,0xa5,0xc4,0x23,0x67,0x34,0xad,
- 0x44,0x10,0x67,0x9e,0xae,0xb8,0x18,0x6f,
- 0xae,0x9e,0x18,0xbb,0xac,0x66,0x16,0xab,
- 0x88,0x06,0xcf,0xe9,0x5f,0x88,0x3e,0xcf,
- 0x79,0x5c,0xe8,0x35,0x8f,0x42,0xdc,0x71,
- 0x36,0xd9,0x49,0x28,0x49,0x0e,0x49,0xda,
- 0x4b,0x22,0x45,0x32,0x61,0x52,0xb8,0x10,
- 0x6f,0x9e,0x9e,0xb8,0xb8,0x6c,0x6e,0x96,
- 0x98,0x88,0xac,0xcc,0x15,0x57,0x80,0x0e,
- 0xff,0xd9,0xff,0x2b,0xfd,0x07,0xf1,0xef,
- 0xdb,0x9f,0x26,0xbd,0x28,0x71,0x0e,0xd9,
- 0xd9,0x2b,0x29,0x05,0x09,0xe1,0xcb,0xbb,
- 0x46,0x64,0x6a,0xa6,0x80,0x28,0xff,0x0d,
- 0xfd,0xd3,0xf3,0x17,0xd5,0x8f,0x02,0xdd,
- 0xf1,0x33,0xd9,0x57,0x28,0x0d,0x0f,0xd1,
- 0xdf,0x1b,0x3d,0xa5,0x72,0x20,0xd3,0x3d,
- 0x15,0x71,0x80,0xda,0xfd,0x21,0xf1,0x3b,
- 0xd9,0x67,0x28,0xad,0x0c,0x11,0xd7,0x9b,
- 0x0e,0xa5,0xd8,0x23,0x2f,0x35,0x1d,0x41,
- 0xb0,0x7a,0x5e,0xe2,0x39,0xb3,0x6a,0x54,
- 0x82,0x04,0xf3,0xe5,0xd7,0xa3,0x0e,0x35,
- 0xdb,0x43,0x24,0x75,0x26,0xc1,0x29,0x79,
- 0x08,0xe9,0xcd,0x8b,0x52,0xc4,0x11,0x67,
- 0x98,0xae,0xac,0x18,0x17,0xaf,0x8e,0x1e,
- 0xdb,0xb9,0x26,0x69,0x2a,0x89,0x00,0xc9,
- 0xfd,0x4b,0xf0,0x47,0xde,0x6f,0x3a,0x9d,
- 0x60,0xb0,0xbc,0x5c,0x76,0x36,0xcb,0x49,
- 0x44,0x48,0x66,0x4e,0xaa,0x58,0x02,0x2f,
- 0xf3,0x1f,0xd5,0xbf,0x02,0x7d,0xf2,0xf3,
- 0xd1,0xd7,0x1b,0x0d,0xa5,0xd2,0x23,0x13,
- 0x35,0x95,0x42,0x80,0x70,0xfe,0xdd,0xf9,
- 0x33,0xe9,0x57,0x88,0x0e,0xcf,0xd9,0x5f,
- 0x28,0x3d,0x0f,0x71,0xdc,0xdb,0x35,0x25,
- 0x41,0x20,0x79,0x3e,0xe9,0x79,0x88,0xea,
- 0xcd,0x81,0x52,0xf8,0x11,0xef,0x9b,0x9e,
- 0xa6,0xb8,0x28,0x6f,0x0e,0x9d,0xd8,0xb3,
- 0x2c,0x55,0x16,0x01,0x8b,0xfa,0xc7,0xe1,
- 0x6f,0xb8,0x9e,0x6c,0xba,0x94,0x60,0x86,
- 0xbc,0xe8,0x75,0x8e,0xc2,0xd9,0x71,0x28,
- 0xd9,0x0d,0x29,0xd1,0x0b,0x19,0xc5,0xab,
- 0x62,0x04,0xb3,0xe4,0x57,0xa6,0x0e,0x2b,
- 0xdb,0x07,0x25,0xed,0x23,0x91,0x36,0x99,
- 0x48,0xa8,0x4c,0x0e,0x57,0xda,0x0f,0x23,
- 0xdd,0x37,0x31,0x4d,0x58,0x50,0x2e,0x1f,
- 0x1b,0xbd,0xa6,0x72,0x2a,0xd3,0x01,0x15,
- 0xf9,0x83,0xea,0xf7,0x81,0xce,0xfb,0x59,
- 0xe4,0x2b,0xa7,0x06,0x2d,0xeb,0x13,0x85,
- 0x96,0xe2,0x89,0xb0,0xca,0x5d,0x42,0x30,
- 0x73,0x5e,0xd4,0x39,0x07,0x69,0xec,0x8b,
- 0x94,0xc6,0x85,0x68,0xe0,0x8d,0xbc,0xd2,
- 0x75,0x12,0xc1,0x91,0x7a,0x98,0xe0,0xad,
- 0xbc,0x12,0x77,0x92,0xce,0x91,0x58,0x98,
- 0x2c,0xaf,0x14,0x1d,0x87,0xb2,0xee,0x51,
- 0x9a,0x1a,0xa3,0xa0,0x36,0x3f,0x4b,0x7c,
- 0x44,0xf6,0x65,0xca,0xa3,0x40,0x34,0x7f,
- 0x46,0xfc,0x69,0xf6,0x8b,0xc8,0xc7,0x4d,
- 0x6c,0x50,0x96,0x1c,0x8b,0xb4,0xc6,0x45,
- 0x6a,0x60,0x82,0xbc,0xf0,0x75,0xde,0xc3,
- 0x39,0x75,0x68,0xc0,0x8d,0x7c,0xd0,0xf5,
- 0x1d,0xc1,0xb3,0x7a,0x54,0xe2,0x05,0xb3,
- 0xe2,0x57,0xb2,0x0e,0x53,0xda,0x17,0x23,
- 0x8d,0x36,0xd1,0x49,0x18,0x49,0xae,0x4a,
- 0x1a,0x43,0xa2,0x76,0x32,0xcb,0x51,0x44,
- 0x18,0x67,0xae,0xae,0x18,0x1b,0xaf,0xa6,
- 0x1e,0x2b,0xbb,0x06,0x65,0xea,0xa3,0x80,
- 0x36,0xff,0x49,0xfc,0x4b,0xf6,0x47,0xca,
- 0x6f,0x42,0x9c,0x70,0xb6,0xdc,0x49,0x36,
- 0x49,0x4a,0x48,0x42,0x4e,0x72,0x5a,0xd2,
- 0x21,0x13,0x39,0x95,0x6a,0x80,0x80,0xfc,
- 0xfd,0xf5,0xf3,0xc3,0xd7,0x77,0x0c,0xcd,
- 0xd5,0x53,0x00,0x15,0xff,0x83,0xfe,0xf7,
- 0xf9,0xcf,0xeb,0x5f,0x84,0x3e,0xe7,0x79,
- 0xac,0xea,0x15,0x83,0x82,0xf6,0xf1,0xc9,
- 0xdb,0x4b,0x24,0x45,0x26,0x61,0x2a,0xb9,
- 0x00,0x69,0xfe,0x8b,0xf8,0xc7,0xed,0x6f,
- 0x90,0x9e,0x9c,0xb8,0xb4,0x6c,0x46,0x96,
- 0x68,0x8a,0x8c,0xc0,0xd5,0x7d,0x00,0xf1,
- 0xfd,0xdb,0xf3,0x27,0xd5,0x2f,0x01,0x1d,
- 0xf9,0xb3,0xea,0x57,0x82,0x0e,0xf3,0xd9,
- 0xd7,0x2b,0x0d,0x05,0xd1,0xe3,0x1b,0xb5,
- 0xa6,0x42,0x2a,0x73,0x02,0xd5,0xf1,0x03,
- 0xd9,0xf7,0x2b,0xcd,0x07,0x51,0xec,0x1b,
- 0x97,0xa6,0x8e,0x28,0xdb,0x0d,0x25,0xd1,
- 0x23,0x19,0x35,0xa9,0x42,0x08,0x73,0xce,
- 0xd7,0x59,0x0c,0x29,0xd7,0x0b,0x0d,0xc5,
- 0xd3,0x63,0x14,0xb5,0x84,0x42,0xe6,0x71,
- 0xaa,0xda,0x01,0x23,0xf9,0x37,0xe9,0x4f,
- 0x88,0x5e,0xce,0x39,0x5b,0x68,0x24,0x8f,
- 0x24,0xdd,0x25,0x31,0x21,0x59,0x38,0x29,
- 0x6f,0x08,0x9d,0xcc,0xb3,0x54,0x54,0x06,
- 0x07,0xeb,0xef,0x87,0x9e,0xee,0xb9,0x98,
- 0x6a,0xae,0x80,0x18,0xff,0xad,0xfe,0x13,
- 0xfb,0x97,0xe6,0x8f,0xa8,0xde,0x0d,0x3b,
- 0xd1,0x67,0x18,0xad,0xac,0x12,0x17,0x93,
- 0x8e,0x96,0xd8,0x89,0x2c,0xc9,0x15,0x49,
- 0x80,0x4a,0xfe,0x41,0xfa,0x7b,0xe2,0xe7,
- 0xb1,0xae,0x5a,0x1a,0x23,0xa3,0x36,0x35,
- 0x4b,0x40,0x44,0x7e,0x66,0xfa,0xa9,0xe0,
- 0x0b,0xbf,0xc6,0x7f,0x6a,0xfc,0x81,0xf4,
- 0xfb,0xc5,0xe7,0x63,0xac,0xb6,0x14,0x4b,
- 0x86,0x46,0xea,0x69,0x82,0x8a,0xf0,0xc1,
- 0xdd,0x7b,0x30,0xe5,0x5d,0xa0,0x32,0x3f,
- 0x53,0x7c,0x14,0xf7,0x85,0xce,0xe3,0x59,
- 0xb4,0x2a,0x47,0x02,0x6d,0xf2,0x93,0xd0,
- 0x97,0x1c,0x8d,0xb4,0xd2,0x45,0x12,0x61,
- 0x92,0xba,0x90,0x60,0x9e,0xbc,0xb8,0x74,
- 0x6e,0xc6,0x99,0x68,0xa8,0x8c,0x0c,0xd7,
- 0xd5,0x0f,0x01,0xdd,0xfb,0x33,0xe5,0x57,
- 0xa0,0x0e,0x3f,0xdb,0x7f,0x24,0xfd,0x25,
- 0xf1,0x23,0xd9,0x37,0x29,0x4d,0x08,0x51,
- 0xce,0x1b,0x5b,0xa4,0x26,0x27,0x2b,0x2d,
- 0x05,0x11,0xe1,0x9b,0xba,0xa6,0x60,0x2a,
- 0xbf,0x00,0x7d,0xfe,0xf3,0xf9,0xd7,0xeb,
- 0x0f,0x85,0xde,0xe3,0x39,0xb5,0x6a,0x40,
- 0x82,0x7c,0xf2,0xf5,0xd1,0xc3,0x1b,0x75,
- 0xa4,0xc2,0x25,0x73,0x20,0xd5,0x3d,0x01,
- 0x71,0xf8,0xdb,0xed,0x27,0x91,0x2e,0x99,
- 0x18,0xa9,0xac,0x0a,0x17,0xc3,0x8f,0x76,
- 0xdc,0xc9,0x35,0x49,0x40,0x48,0x7e,0x4e,
- 0xfa,0x59,0xe2,0x2b,0xb3,0x06,0x55,0xe2,
- 0x03,0x83,0xf6,0xf7,0xc9,0xcf,0x4b,0x5c,
- 0x04,0x3e,0x67,0x4e,0xac,0x60,0x17,0x7f,
- 0x80,0xfe,0xc1,0xf9,0x7b,0xe8,0xe7,0x87,
- 0xae,0xc2,0x19,0x93,0xfc,0x96,0x08,0x8f,
- 0xc0,0xe7,0xfc,0x2c,0xf0,0x1d,0xcc,0xc3,
- 0x9e,0x70,0x00,0xc0,0x63,0x7f,0x54,0x78,
- 0x40,0xfe,0x61,0x9b,0xf3,0x40,0x64,0x3f,
- 0x0f,0xf8,0x2c,0xf3,0x3f,0x99,0x83,0x2a,
- 0x79,0x07,0xcb,0xe1,0x9f,0xcc,0xce,0x60,
- 0x6c,0x00,0x84,0x7c,0x0f,0xf5,0xe8,0xcf,
- 0x15,0x66,0x80,0xb0,0xf8,0x5d,0xf4,0x33,
- 0x8a,0x57,0x44,0x0c,0x67,0xd6,0xaf,0x08,
- 0x1f,0xcf,0xb3,0x5e,0x54,0x3a,0x07,0x63,
- 0xec,0xb7,0x94,0x4e,0x86,0x58,0xea,0x2d,
- 0x83,0x12,0xf5,0x91,0xc2,0x9b,0x70,0xa4,
- 0xdc,0x25,0x37,0x21,0x4d,0x38,0x51,0x6e,
- 0x18,0x9b,0xac,0xa6,0x14,0x2b,0x87,0x06,
- 0xed,0xe9,0x93,0x8a,0x96,0xc0,0x89,0x7c,
- 0xc8,0xf5,0x4d,0xc0,0x53,0x7e,0x14,0xfb,
- 0x85,0xe6,0xe3,0xa9,0xb6,0x0a,0x4b,0xc2,
- 0x47,0x72,0x6c,0xd2,0x95,0x10,0x81,0x9c,
- 0xfa,0xb5,0xe0,0x43,0xbe,0x76,0x7a,0xca,
- 0xe1,0x41,0xb8,0x7a,0x6e,0xe2,0x99,0xb0,
- 0xaa,0x5c,0x02,0x37,0xf3,0x4f,0xd4,0x5f,
- 0x06,0x3d,0xeb,0x73,0x84,0xd6,0xe5,0x09,
- 0xa1,0xca,0x3b,0x43,0x64,0x74,0xa6,0xc4,
- 0x29,0x67,0x08,0xad,0xcc,0x13,0x57,0x94,
- 0x0e,0x87,0xd8,0xef,0x2d,0x9d,0x12,0xb1,
- 0x90,0x5a,0x9e,0x20,0xbb,0x3c,0x65,0x76,
- 0xa0,0xc8,0x3d,0x4f,0x70,0x5c,0xde,0x35,
- 0x3b,0x41,0x64,0x78,0xa6,0xec,0x29,0x97,
- 0x0a,0x8d,0xc0,0xd3,0x7d,0x14,0xf1,0x85,
- 0xda,0xe3,0x21,0xb5,0x3a,0x41,0x62,0x78,
- 0xb2,0xec,0x51,0x96,0x1a,0x8b,0xa0,0xc6,
- 0x3d,0x6b,0x70,0x84,0xdc,0xe5,0x35,0xa1,
- 0x42,0x38,0x73,0x6e,0xd4,0x99,0x04,0xa9,
- 0xe4,0x0b,0xa7,0xc6,0x2f,0x6b,0x1c,0x85,
- 0xb4,0xe2,0x45,0xb2,0x62,0x52,0xb2,0x10,
- 0x53,0x9e,0x16,0xbb,0x88,0x66,0xce,0xa9,
- 0x58,0x08,0x2f,0xcf,0x1f,0x5d,0xbc,0x32,
- 0x77,0x52,0xcc,0x11,0x57,0x98,0x0e,0xaf,
- 0xd8,0x1f,0x2f,0xbd,0x1e,0x71,0xba,0xda,
- 0x61,0x22,0xb9,0x30,0x69,0x5e,0x88,0x38,
- 0xcf,0x6d,0x5c,0x90,0x34,0x9f,0x44,0xbc,
- 0x64,0x76,0xa6,0xc8,0x29,0x4f,0x08,0x5d,
- 0xce,0x33,0x5b,0x54,0x24,0x07,0x27,0xed,
- 0x2f,0x91,0x1e,0x99,0xb8,0xaa,0x6c,0x02,
- 0x97,0xf0,0x8f,0xdc,0xdf,0x35,0x3d,0x41,
- 0x70,0x78,0xde,0xed,0x39,0x91,0x6a,0x98,
- 0x80,0xac,0xfc,0x15,0xf7,0x83,0xce,0xf7,
- 0x59,0xcc,0x2b,0x57,0x04,0x0d,0xe7,0xd3,
- 0xaf,0x16,0x1d,0x8b,0xb2,0xc6,0x51,0x6a,
- 0x18,0x83,0xac,0xf6,0x15,0xcb,0x83,0x46,
- 0xf4,0x69,0xc6,0x8b,0x68,0xc4,0x8d,0x64,
- 0xd0,0xa5,0x1c,0x21,0xb7,0x3a,0x4d,0x62,
- 0x50,0xb2,0x1c,0x53,0xb6,0x16,0x4b,0x8a,
- 0x46,0xc2,0x69,0x72,0x88,0xd0,0xcd,0x1d,
- 0x51,0xb0,0x1a,0x5f,0xa2,0x3e,0x33,0x7b,
- 0x54,0xe4,0x05,0xa7,0xe2,0x2f,0xb3,0x1e,
- 0x55,0xba,0x02,0x63,0xf2,0xb7,0xd0,0x4f,
- 0x1e,0x5d,0xba,0x32,0x63,0x52,0xb4,0x10,
- 0x47,0x9e,0x6e,0xba,0x98,0x60,0xae,0xbc,
- 0x18,0x77,0xae,0xce,0x19,0x5b,0xa8,0x26,
- 0x0f,0x2b,0xdd,0x07,0x31,0xed,0x5b,0x90,
- 0x26,0x9f,0x28,0xbd,0x0c,0x71,0xd6,0xdb,
- 0x09,0x25,0xc9,0x23,0x49,0x34,0x49,0x46,
- 0x48,0x6a,0x4e,0x82,0x58,0xf2,0x2d,0xd3,
- 0x13,0x15,0x95,0x82,0x82,0xf0,0xf1,0xdd,
- 0xdb,0x33,0x25,0x55,0x20,0x01,0x3f,0xf9,
- 0x7f,0xe8,0xff,0x8d,0xfe,0xd3,0xf9,0x17,
- 0xe9,0x8f,0x8a,0xde,0xc1,0x39,0x79,0x68,
- 0xe8,0x8d,0x8c,0xd2,0xd5,0x11,0x01,0x99,
- 0xfa,0xab,0xe0,0x07,0xbf,0xee,0x7f,0x9a,
- 0xfe,0xa1,0xf8,0x3b,0xef,0x67,0x9c,0xae,
- 0xb4,0x18,0x47,0xae,0x6e,0x1a,0x9b,0xa0,
- 0xa6,0x3c,0x2b,0x77,0x04,0xcd,0xe5,0x53,
- 0xa0,0x16,0x3f,0x8b,0x7e,0xc4,0xf9,0x65,
- 0xe8,0xa3,0x8c,0x36,0xd7,0x49,0x0c,0x49,
- 0xd6,0x4b,0x0a,0x45,0xc2,0x63,0x72,0xb4,
- 0xd0,0x45,0x1e,0x61,0xba,0xba,0x60,0x62,
- 0xbe,0xb0,0x78,0x5e,0xee,0x39,0x9b,0x6a,
- 0xa4,0x80,0x24,0xff,0x25,0xfd,0x23,0xf1,
- 0x37,0xd9,0x4f,0x28,0x5d,0x0e,0x31,0xdb,
- 0x5b,0x24,0x25,0x27,0x21,0x2d,0x39,0x11,
- 0x69,0x98,0x8a,0xac,0xc0,0x15,0x7f,0x80,
- 0xfe,0xfd,0xf9,0xf3,0xeb,0xd7,0x87,0x0e,
- 0xed,0xd9,0x93,0x2a,0x95,0x00,0x81,0xfc,
- 0xfb,0xf5,0xe7,0xc3,0xaf,0x76,0x1c,0xcb,
- 0xb5,0x46,0x40,0x6a,0x7e,0x82,0xf8,0xf1,
- 0xed,0xdb,0x93,0x26,0x95,0x28,0x81,0x0c,
- 0xf9,0xd5,0xeb,0x03,0x85,0xf6,0xe3,0xc9,
- 0xb7,0x4a,0x4c,0x42,0x56,0x72,0x0a,0xd3,
- 0xc1,0x17,0x79,0x8c,0xea,0xd5,0x81,0x02,
- 0xf9,0xf1,0xeb,0xdb,0x87,0x26,0xed,0x29,
- 0x91,0x0a,0x99,0xc0,0xab,0x7c,0x04,0xf7,
- 0xe5,0xcf,0xa3,0x5e,0x34,0x3b,0x47,0x64,
- 0x6c,0xa6,0x94,0x28,0x87,0x0c,0xed,0xd5,
- 0x93,0x02,0x95,0xf0,0x83,0xdc,0xf7,0x35,
- 0xcd,0x43,0x50,0x74,0x1e,0xc7,0xb9,0x6e,
- 0x68,0x9a,0x8c,0xa0,0xd4,0x3d,0x07,0x71,
- 0xec,0xdb,0x95,0x26,0x81,0x28,0xf9,0x0d,
- 0xe9,0xd3,0x8b,0x16,0xc5,0x89,0x62,0xc8,
- 0xb1,0x4c,0x58,0x56,0x2e,0x0b,0x1b,0xc5,
- 0xa7,0x62,0x2c,0xb3,0x14,0x55,0x86,0x02,
- 0xeb,0xf1,0x87,0xda,0xef,0x21,0x9d,0x3a,
- 0xb1,0x60,0x58,0xbe,0x2c,0x7b,0x16,0xe5,
- 0x89,0xa2,0xca,0x31,0x43,0x58,0x74,0x2e,
- 0xc7,0x19,0x6d,0xa8,0x92,0x0c,0x93,0xd4,
- 0x97,0x04,0x8d,0xe4,0xd3,0xa5,0x16,0x21,
- 0x8b,0x3a,0xc5,0x61,0x60,0xb8,0xbc,0x6c,
- 0x76,0x96,0xc8,0x89,0x4c,0xc8,0x55,0x4e,
- 0x00,0x5b,0xfe,0x27,0xfb,0x2f,0xe5,0x1f,
- 0xa1,0xbe,0x3a,0x7b,0x62,0xe4,0xb1,0xa4,
- 0x5a,0x26,0x23,0x2b,0x35,0x05,0x41,0xe0,
- 0x7b,0xbe,0xe6,0x79,0xaa,0xea,0x01,0x83,
- 0xfa,0xf7,0xe1,0xcf,0xbb,0x5e,0x64,0x3a,
- 0xa7,0x60,0x2c,0xbf,0x14,0x7d,0x86,0xf2,
- 0xe9,0xd1,0x8b,0x1a,0xc5,0xa1,0x62,0x38,
- 0xb3,0x6c,0x54,0x96,0x04,0x8b,0xe4,0xc7,
- 0xa5,0x6e,0x20,0x9b,0x3c,0xa5,0x74,0x20,
- 0xc7,0x3d,0x6d,0x70,0x90,0xdc,0x9d,0x34,
- 0xb1,0x44,0x58,0x66,0x2e,0xab,0x18,0x05,
- 0xaf,0xe2,0x1f,0xb3,0xbe,0x56,0x7a,0x0a,
- 0xe3,0xc1,0xb7,0x7a,0x4c,0xe2,0x55,0xb2,
- 0x02,0x53,0xf2,0x17,0xd3,0x8f,0x16,0xdd,
- 0x89,0x32,0xc9,0x51,0x48,0x18,0x4f,0xae,
- 0x5e,0x1a,0x3b,0xa3,0x66,0x34,0xab,0x44,
- 0x04,0x67,0xe6,0xaf,0xa8,0x1e,0x0f,0xbb,
- 0xde,0x67,0x3a,0xad,0x60,0x10,0xbf,0x9c,
- 0x7e,0xb6,0xf8,0x49,0xee,0x4b,0x9a,0x46,
- 0xa2,0x68,0x32,0x8f,0x50,0xdc,0x1d,0x37,
- 0xb1,0x4e,0x58,0x5a,0x2e,0x23,0x1b,0x35,
- 0xa5,0x42,0x20,0x73,0x3e,0xd5,0x79,0x00,
- 0xe9,0xfd,0x8b,0xf2,0xc7,0xd1,0x6f,0x18,
- 0x9d,0xac,0xb2,0x14,0x53,0x86,0x16,0xeb,
- 0x89,0x86,0xca,0xe9,0x41,0x88,0x7a,0xce,
- 0xe1,0x59,0xb8,0x2a,0x6f,0x02,0x9d,0xf0,
- 0xb3,0xdc,0x57,0x36,0x0d,0x4b,0xd0,0x47,
- 0x1e,0x6d,0xba,0x92,0x60,0x92,0xbc,0x90,
- 0x74,0x9e,0xc4,0xb9,0x64,0x68,0xa6,0x8c,
- 0x28,0xd7,0x0d,0x0d,0xd1,0xd3,0x1b,0x15,
- 0xa5,0x82,0x22,0xf3,0x31,0xd5,0x5b,0x00,
- 0x25,0xff,0x23,0xfd,0x37,0xf1,0x4f,0xd8,
- 0x5f,0x2e,0x3d,0x1b,0x71,0xa4,0xda,0x25,
- 0x23,0x21,0x35,0x39,0x41,0x68,0x78,0x8e,
- 0xec,0xd9,0x95,0x2a,0x81,0x00,0xf9,0xfd,
- 0xeb,0xf3,0x87,0xd6,0xef,0x09,0x9d,0xca,
- 0xb3,0x40,0x54,0x7e,0x06,0xfb,0xe9,0xe7,
- 0x8b,0xae,0xc6,0x19,0x6b,0xa8,0x86,0x0c,
- 0xeb,0xd5,0x87,0x02,0xed,0xf1,0x93,0xda,
- 0x97,0x20,0x8d,0x3c,0xd1,0x75,0x18,0xc1,
- 0xad,0x7a,0x10,0xe3,0x9d,0xb6,0xb2,0x48,
- 0x52,0x4e,0x12,0x5b,0x92,0x26,0x93,0x28,
- 0x95,0x0c,0x81,0xd4,0xfb,0x05,0xe5,0xe3,
- 0xa3,0xb6,0x36,0x4b,0x4a,0x44,0x42,0x66,
- 0x72,0xaa,0xd0,0x01,0x1f,0xf9,0xbf,0xea,
- 0x7f,0x82,0xfe,0xf1,0xf9,0xdb,0xeb,0x27,
- 0x85,0x2e,0xe1,0x19,0xb9,0xaa,0x6a,0x02,
- 0x83,0xf0,0xf7,0xdd,0xcf,0x33,0x5d,0x54,
- 0x30,0x07,0x5f,0xec,0x3f,0x97,0x7e,0x8c,
- 0xf8,0xd5,0xed,0x03,0x91,0xf6,0x9b,0xc8,
- 0xa7,0x4c,0x2c,0x57,0x16,0x0d,0x8b,0xd2,
- 0xc7,0x11,0x6d,0x98,0x92,0xac,0x90,0x14,
- 0x9f,0x84,0xbe,0xe4,0x79,0xa6,0xea,0x29,
- 0x83,0x0a,0xf5,0xc1,0xc3,0x7b,0x74,0xe4,
- 0xc5,0xa5,0x62,0x20,0xb3,0x3c,0x55,0x76,
- 0x00,0xcb,0xfd,0x47,0xf0,0x6f,0xde,0x9f,
- 0x38,0xbd,0x6c,0x70,0x96,0xdc,0x89,0x34,
- 0xc9,0x45,0x48,0x60,0x4e,0xbe,0x58,0x7a,
- 0x2e,0xe3,0x19,0xb5,0xaa,0x42,0x02,0x73,
- 0xf2,0xd7,0xd1,0x0f,0x19,0xdd,0xab,0x32,
- 0x05,0x53,0xe0,0x17,0xbf,0x8e,0x7e,0xda,
- 0xf9,0x21,0xe9,0x3b,0x89,0x66,0xc8,0xa9,
- 0x4c,0x08,0x57,0xce,0x0f,0x5b,0xdc,0x27,
- 0x37,0x2d,0x4d,0x10,0x51,0x9e,0x1a,0xbb,
- 0xa0,0x66,0x3e,0xab,0x78,0x04,0xef,0xe5,
- 0x9f,0xa2,0xbe,0x30,0x7b,0x5e,0xe4,0x39,
- 0xa7,0x6a,0x2c,0x83,0x14,0xf5,0x85,0xc2,
- 0xe3,0x71,0xb4,0xda,0x45,0x22,0x61,0x32,
- 0xb9,0x50,0x68,0x1e,0x8f,0xb8,0xde,0x6d,
- 0x3a,0x91,0x60,0x98,0xbc,0xac,0x74,0x16,
- 0xc7,0x89,0x6e,0xc8,0x99,0x4c,0xa8,0x54,
- 0x0e,0x07,0xdb,0xef,0x27,0x9d,0x2e,0xb1,
- 0x18,0x59,0xae,0x2a,0x1b,0x03,0xa5,0xf6,
- 0x23,0xcb,0x37,0x45,0x4c,0x60,0x56,0xbe,
- 0x08,0x7b,0xce,0xe7,0x59,0xac,0x2a,0x17,
- 0x03,0x8d,0xf6,0xd3,0xc9,0x17,0x49,0x8c,
- 0x4a,0xd6,0x41,0x0a,0x79,0xc2,0xeb,0x71,
- 0x84,0xda,0xe5,0x21,0xa1,0x3a,0x39,0x63,
- 0x68,0xb4,0x8c,0x44,0xd6,0x65,0x0a,0xa1,
- 0xc0,0x3b,0x7f,0x64,0xfc,0xa5,0xf4,0x23,
- 0xc7,0x37,0x6d,0x4c,0x90,0x54,0x9e,0x04,
- 0xbb,0xe4,0x67,0xa6,0xae,0x28,0x1b,0x0f,
- 0xa5,0xde,0x23,0x3b,0x35,0x65,0x40,0xa0,
- 0x7c,0x3e,0xf7,0x79,0xcc,0xeb,0x55,0x84,
- 0x02,0xe7,0xf1,0xaf,0xda,0x1f,0x23,0xbd,
- 0x36,0x71,0x4a,0xd8,0x41,0x2e,0x79,0x1a,
- 0xe9,0xa1,0x8a,0x3a,0xc3,0x61,0x74,0xb8,
- 0xc4,0x6d,0x66,0x90,0xa8,0x9c,0x0c,0xb7,
- 0xd4,0x4f,0x06,0x5d,0xea,0x33,0x83,0x56,
- 0xf4,0x09,0xc7,0xcb,0x6f,0x44,0x9c,0x64,
- 0xb6,0xa4,0x48,0x26,0x4f,0x2a,0x5d,0x02,
- 0x31,0xf3,0x5b,0xd4,0x27,0x07,0x2d,0xed,
- 0x13,0x91,0x96,0x9a,0x88,0xa0,0xcc,0x3d,
- 0x57,0x70,0x0c,0xdf,0xd5,0x3f,0x01,0x7d,
- 0xf8,0xf3,0xed,0xd7,0x93,0x0e,0x95,0xd8,
- 0x83,0x2c,0xf5,0x15,0xc1,0x83,0x7a,0xf4,
- 0xe1,0xc5,0xbb,0x62,0x64,0xb2,0xa4,0x50,
- 0x26,0x1f,0x2b,0xbd,0x06,0x71,0xea,0xdb,
- 0x81,0x26,0xf9,0x29,0xe9,0x0b,0x89,0xc6,
- 0xcb,0x69,0x44,0x88,0x64,0xce,0xa5,0x58,
- 0x20,0x2f,0x3f,0x1d,0x7d,0xb0,0xf2,0x5d,
- 0xd2,0x33,0x13,0x55,0x94,0x02,0x87,0xf0,
- 0xef,0xdd,0x9f,0x32,0xbd,0x50,0x70,0x1e,
- 0xdf,0xb9,0x3e,0x69,0x7a,0x88,0xe0,0xcd,
- 0xbd,0x52,0x70,0x12,0xdf,0x91,0x3e,0x99,
- 0x78,0xa8,0xec,0x0d,0x97,0xd2,0x8f,0x10,
- 0xdd,0x9d,0x32,0xb1,0x50,0x58,0x1e,0x2f,
- 0xbb,0x1e,0x65,0xba,0xa2,0x60,0x32,0xbf,
- 0x50,0x7c,0x1e,0xf7,0xb9,0xce,0x6b,0x5a,
- 0x84,0x20,0xe7,0x3d,0xad,0x72,0x10,0xd3,
- 0x9d,0x16,0xb1,0x88,0x5a,0xce,0x21,0x5b,
- 0x38,0x25,0x6f,0x20,0x9d,0x3c,0xb1,0x74,
- 0x58,0xc6,0x2d,0x6b,0x10,0x85,0x9c,0xe2,
- 0xb5,0xb0,0x42,0x5e,0x72,0x3a,0xd3,0x61,
- 0x14,0xb9,0x84,0x6a,0xe6,0x81,0xa8,0xfa,
- 0x0d,0xe3,0xd3,0xb7,0x16,0x4d,0x8a,0x52,
- 0xc2,0x11,0x73,0x98,0xd6,0xad,0x08,0x11,
- 0xcf,0x9b,0x5e,0xa4,0x38,0x27,0x6f,0x2c,
- 0x9d,0x14,0xb1,0x84,0x5a,0xe6,0x21,0xab,
- 0x3a,0x05,0x63,0xe0,0xb7,0xbc,0x4e,0x76,
- 0x5a,0xca,0x21,0x43,0x38,0x75,0x6e,0xc0,
- 0x99,0x7c,0xa8,0xf4,0x0d,0xc7,0xd3,0x6f,
- 0x14,0x9d,0x84,0xb2,0xe4,0x51,0xa6,0x1a,
- 0x2b,0xa3,0x06,0x35,0xeb,0x43,0x84,0x76,
- 0xe6,0xc9,0xa9,0x4a,0x08,0x43,0xce,0x77,
- 0x5a,0xcc,0x21,0x57,0x38,0x0d,0x6f,0xd0,
- 0x9f,0x1c,0xbd,0xb4,0x72,0x46,0xd2,0x69,
- 0x12,0x89,0x90,0xca,0x9d,0x40,0xb0,0x7c,
- 0x5e,0xf6,0x39,0xcb,0x6b,0x44,0x84,0x64,
- 0xe6,0xa5,0xa8,0x22,0x0f,0x33,0xdd,0x57,
- 0x30,0x0d,0x5f,0xd0,0x3f,0x1f,0x7d,0xbc,
- 0xf2,0x75,0xd2,0xc3,0x11,0x75,0x98,0xc2,
- 0xad,0x70,0x10,0xdf,0x9d,0x3e,0xb1,0x78,
- 0x58,0xee,0x2d,0x9b,0x12,0xa5,0x90,0x22,
- 0x9f,0x30,0xbd,0x5c,0x70,0x36,0xdf,0x49,
- 0x3c,0x49,0x76,0x48,0xca,0x4d,0x42,0x50,
- 0x72,0x1e,0xd3,0xb9,0x16,0x69,0x8a,0x8a,
- 0xc0,0xc1,0x7d,0x78,0xf0,0xed,0xdd,0x93,
- 0x32,0x95,0x50,0x80,0x1c,0xff,0xb5,0xfe,
- 0x43,0xfa,0x77,0xe2,0xcf,0xb1,0x5e,0x58,
- 0x3a,0x2f,0x63,0x1c,0xb5,0xb4,0x42,0x46,
- 0x72,0x6a,0xd2,0x81,0x10,0xf9,0x9d,0xea,
- 0xb3,0x80,0x56,0xfe,0x09,0xfb,0xcb,0xe7,
- 0x47,0xac,0x6e,0x16,0x9b,0x88,0xa6,0xcc,
- 0x29,0x57,0x08,0x0d,0xcf,0xd3,0x5f,0x14,
- 0x3d,0x87,0x72,0xec,0xd1,0x95,0x1a,0x81,
- 0xa0,0xfa,0x3d,0xe3,0x73,0xb4,0xd6,0x45,
- 0x0a,0x61,0xc2,0xbb,0x70,0x64,0xde,0xa5,
- 0x38,0x21,0x6f,0x38,0x9d,0x6c,0xb0,0x94,
- 0x5c,0x86,0x3e,0xeb,0x45,0x84,0x62,0xe6,
- 0xb1,0xa8,0x5a,0x0e,0x23,0xfb,0x33,0x25,
- 0x47,0x20,0x51,0x3e,0x19,0x7f,0xa8,0x66,
- 0x0c,0xfb,0xd0,0x07,0x13,0xe5,0x9f,0x83,
- 0xce,0x98,0x58,0xcd,0x2e,0x19,0x14,0x39,
- 0x86,0x3f,0xff,0x01,0x85,0xff,0xe1,0xe1,
- 0xb3,0xfc,0x46,0x63,0x0f,0xf8,0x00,0x53,
- 0xbe,0x1f,0xfb,0xc0,0xe6,0x7e,0xbc,0xf0,
- 0x01,0xe3,0xc3,0x9f,0xa6,0xcc,0x48,0x7e,
- 0x40,0x82,0x9d,0xf2,0xff,0xd6,0x07,0x13,
- 0xf5,0x87,0x80,0x0f,0x71,0x9c,0xfd,0x35,
- 0x61,0x43,0xf8,0x78,0x7e,0xcf,0x19,0x99,
- 0xa8,0x32,0x00,0x53,0xfc,0x17,0xfb,0x8f,
- 0xc6,0xdf,0xa9,0x3e,0x09,0x7b,0xc8,0xe7,
- 0x4d,0xac,0x52,0x16,0x13,0x8b,0x96,0xc6,
- 0x89,0x68,0xc8,0x8d,0x4c,0xd0,0x55,0x1e,
- 0x01,0xbb,0xfa,0x67,0xe2,0xaf,0xb0,0x1e,
- 0x5f,0xba,0x3e,0x63,0x7a,0xb4,0xe0,0x45,
- 0xbe,0x62,0x7a,0xb2,0xe0,0x51,0xbe,0x1a,
- 0x7b,0xa2,0xe6,0x31,0xab,0x5a,0x04,0x23,
- 0xe7,0x37,0xad,0x4e,0x10,0x5b,0x9e,0x26,
- 0xbb,0x28,0x65,0x0e,0xa1,0xd8,0x3b,0x2f,
- 0x65,0x1c,0xa1,0xb4,0x3a,0x47,0x62,0x6c,
- 0xb2,0x94,0x50,0x86,0x1c,0xeb,0xb5,0x86,
- 0x42,0xea,0x71,0x82,0xda,0xf1,0x21,0xd9,
- 0x3b,0x29,0x65,0x08,0xa1,0xcc,0x3b,0x57,
- 0x64,0x0c,0xa7,0xd4,0x2f,0x07,0x1d,0xed,
- 0xb3,0x92,0x56,0x92,0x08,0x93,0xcc,0x97,
- 0x54,0x8c,0x04,0xd7,0xe5,0x0f,0xa1,0xde,
- 0x3b,0x3b,0x65,0x64,0xa0,0xa4,0x3c,0x27,
- 0x77,0x2c,0xcd,0x15,0x51,0x80,0x1a,0xff,
- 0xa1,0xfe,0x3b,0xfb,0x67,0xe4,0xaf,0xa4,
- 0x1e,0x27,0xbb,0x2e,0x65,0x1a,0xa1,0xa0,
- 0x3a,0x3f,0x63,0x7c,0xb4,0xf4,0x45,0xc6,
- 0x63,0x6a,0xb4,0x80,0x44,0xfe,0x65,0xfa,
- 0xa3,0xe0,0x37,0xbf,0x4e,0x7c,0x5a,0xf6,
- 0x21,0xcb,0x3b,0x45,0x64,0x60,0xa6,0xbc,
- 0x28,0x77,0x0e,0xcd,0xd9,0x53,0x28,0x15,
- 0x0f,0x81,0xde,0xfb,0x39,0xe5,0x6b,0xa0,
- 0x86,0x3c,0xeb,0x75,0x84,0xc2,0xe5,0x71,
- 0xa0,0xda,0x3d,0x23,0x71,0x34,0xd9,0x45,
- 0x28,0x61,0x0e,0xb9,0xd8,0x6b,0x2e,0x85,
- 0x18,0xe1,0xad,0xba,0x12,0x63,0x92,0xb6,
- 0x90,0x48,0x9e,0x4c,0xba,0x54,0x62,0x06,
- 0xb3,0xe8,0x57,0x8e,0x0e,0xdb,0xd9,0x27,
- 0x29,0x2d,0x09,0x11,0xc9,0x9b,0x4a,0xa4,
- 0x40,0x26,0x7f,0x2a,0xfd,0x01,0xf1,0xfb,
- 0xdb,0xe7,0x27,0xad,0x2e,0x11,0x1b,0x99,
- 0xa6,0xaa,0x28,0x03,0x0f,0xf5,0xdf,0xc3,
- 0x3f,0x75,0x7c,0xc0,0xf5,0x7d,0xc0,0xf3,
- 0x7d,0xd4,0xf3,0x05,0xd5,0xe3,0x03,0xb5,
- 0xf6,0x43,0xca,0x77,0x42,0xcc,0x71,0x56,
- 0xd8,0x09,0x2f,0xc9,0x1f,0x49,0xbc,0x4a,
- 0x76,0x42,0xca,0x71,0x42,0xd8,0x71,0x2e,
- 0xd9,0x19,0x29,0xa9,0x0a,0x09,0xc3,0xcb,
- 0x77,0x44,0xcc,0x65,0x56,0xa0,0x08,0x3f,
- 0xcf,0x7f,0x5c,0xfc,0x35,0xf7,0x43,0xcc,
- 0x77,0x56,0xcc,0x09,0x57,0xc8,0x0f,0x4f,
- 0xdc,0x5f,0x36,0x3d,0x4b,0x70,0x44,0xde,
- 0x65,0x3a,0xa1,0x60,0x38,0xbf,0x6c,0x7c,
- 0x96,0xf4,0x89,0xc4,0xcb,0x65,0x44,0xa0,
- 0x64,0x3e,0xa7,0x78,0x2c,0xef,0x15,0x9d,
- 0x82,0xb2,0xf0,0x51,0xde,0x1b,0x3b,0xa5,
- 0x66,0x20,0xab,0x3c,0x05,0x77,0xe0,0xcf,
- 0xbd,0x5e,0x70,0x3a,0xdf,0x61,0x3c,0xb9,
- 0x74,0x68,0xc6,0x8d,0x68,0xd0,0x8d,0x1c,
- 0xd1,0xb5,0x1a,0x41,0xa2,0x7a,0x32,0xe3,
- 0x51,0xb4,0x1a,0x47,0xa2,0x6e,0x32,0x9b,
- 0x50,0xa4,0x1c,0x27,0xb7,0x2e,0x4d,0x1a,
- 0x51,0xa2,0x1a,0x33,0xa3,0x56,0x34,0x0b,
- 0x47,0xc4,0x6f,0x66,0x9c,0xa8,0xb4,0x0c,
- 0x47,0xd6,0x6f,0x0a,0x9d,0xc0,0xb3,0x7c,
- 0x54,0xf6,0x05,0xcb,0xe3,0x47,0xb4,0x6e,
- 0x46,0x9a,0x68,0xa2,0x8c,0x30,0xd7,0x5d,
- 0x0c,0x31,0xd7,0x5b,0x0c,0x25,0xd7,0x23,
- 0x0d,0x35,0xd1,0x43,0x18,0x75,0xae,0xc2,
- 0x19,0x73,0xa8,0xd6,0x0d,0x0b,0xd1,0xc7,
- 0x1b,0x6d,0xa4,0x92,0x24,0x93,0x24,0x95,
- 0x24,0x81,0x24,0xf9,0x25,0xe9,0x23,0x89,
- 0x36,0xc9,0x49,0x48,0x48,0x4e,0x4e,0x5a,
- 0x5a,0x22,0x23,0x33,0x35,0x55,0x40,0x00,
+ 0xff,0xfb,0xff,0xe7,0xff,0xaf,0xfe,0x1f,
+ 0xfb,0xbf,0xe6,0x7f,0xaa,0xfe,0x01,0xfb,
+ 0xfb,0xe7,0xe7,0xaf,0xae,0x1e,0x1b,0xbb,
+ 0xa6,0x66,0x2a,0xab,0x00,0x05,0xff,0xe3,
+ 0xff,0xb7,0xfe,0x4f,0xfa,0x5f,0xe2,0x3f,
+ 0xb3,0x7e,0x54,0xfa,0x05,0xe3,0xe3,0xb7,
+ 0xb6,0x4e,0x4a,0x5a,0x42,0x22,0x73,0x32,
+ 0xd5,0x51,0x00,0x19,0xff,0xab,0xfe,0x07,
+ 0xfb,0xef,0xe7,0x9f,0xae,0xbe,0x18,0x7b,
+ 0xae,0xe6,0x19,0xab,0xaa,0x06,0x03,0xeb,
+ 0xf7,0x87,0xce,0xef,0x59,0x9c,0x2a,0xb7,
+ 0x00,0x4d,0xfe,0x53,0xfa,0x17,0xe3,0x8f,
+ 0xb6,0xde,0x49,0x3a,0x49,0x62,0x48,0xb2,
+ 0x4c,0x52,0x56,0x12,0x0b,0x93,0xc6,0x97,
+ 0x68,0x8c,0x8c,0xd4,0xd5,0x05,0x01,0xe1,
+ 0xfb,0xbb,0xe6,0x67,0xaa,0xae,0x00,0x1b,
+ 0xff,0xa7,0xfe,0x2f,0xfb,0x1f,0xe5,0xbf,
+ 0xa2,0x7e,0x32,0xfb,0x51,0xe4,0x1b,0xa7,
+ 0xa6,0x2e,0x2b,0x1b,0x05,0xa5,0xe2,0x23,
+ 0xb3,0x36,0x55,0x4a,0x00,0x43,0xfe,0x77,
+ 0xfa,0xcf,0xe1,0x5f,0xb8,0x3e,0x6f,0x7a,
+ 0x9c,0xe0,0xb5,0xbc,0x42,0x76,0x72,0xca,
+ 0xd1,0x41,0x18,0x79,0xae,0xea,0x19,0x83,
+ 0xaa,0xf6,0x01,0xcb,0xfb,0x47,0xe4,0x6f,
+ 0xa6,0x9e,0x28,0xbb,0x0c,0x65,0xd6,0xa3,
+ 0x08,0x35,0xcf,0x43,0x5c,0x74,0x36,0xc7,
+ 0x49,0x6c,0x48,0x96,0x4c,0x8a,0x54,0xc2,
+ 0x05,0x73,0xe0,0xd7,0xbd,0x0e,0x71,0xda,
+ 0xdb,0x21,0x25,0x39,0x21,0x69,0x38,0x89,
+ 0x6c,0xc8,0x95,0x4c,0x80,0x54,0xfe,0x05,
+ 0xfb,0xe3,0xe7,0xb7,0xae,0x4e,0x1a,0x5b,
+ 0xa2,0x26,0x33,0x2b,0x55,0x04,0x01,0xe7,
+ 0xfb,0xaf,0xe6,0x1f,0xab,0xbe,0x06,0x7b,
+ 0xea,0xe7,0x81,0xae,0xfa,0x19,0xe3,0xab,
+ 0xb6,0x06,0x4b,0xea,0x47,0x82,0x6e,0xf2,
+ 0x99,0xd0,0xab,0x1c,0x05,0xb7,0xe2,0x4f,
+ 0xb2,0x5e,0x52,0x3a,0x13,0x63,0x94,0xb6,
+ 0x84,0x48,0xe6,0x4d,0xaa,0x52,0x02,0x13,
+ 0xf3,0x97,0xd6,0x8f,0x08,0xdd,0xcd,0x33,
+ 0x51,0x54,0x18,0x07,0xaf,0xee,0x1f,0x9b,
+ 0xbe,0xa6,0x78,0x2a,0xef,0x01,0x9d,0xfa,
+ 0xb3,0xe0,0x57,0xbe,0x0e,0x7b,0xda,0xe7,
+ 0x21,0xad,0x3a,0x11,0x63,0x98,0xb6,0xac,
+ 0x48,0x16,0x4f,0x8a,0x5e,0xc2,0x39,0x73,
+ 0x68,0xd4,0x8d,0x04,0xd1,0xe5,0x1b,0xa1,
+ 0xa6,0x3a,0x2b,0x63,0x04,0xb5,0xe4,0x43,
+ 0xa6,0x76,0x2a,0xcb,0x01,0x45,0xf8,0x63,
+ 0xee,0xb7,0x98,0x4e,0xae,0x58,0x1a,0x2f,
+ 0xa3,0x1e,0x35,0xbb,0x42,0x64,0x72,0xa6,
+ 0xd0,0x29,0x1f,0x09,0xbd,0xca,0x73,0x42,
+ 0xd4,0x71,0x06,0xd9,0xe9,0x2b,0x89,0x06,
+ 0xc9,0xe9,0x4b,0x88,0x46,0xce,0x69,0x5a,
+ 0x88,0x20,0xcf,0x3d,0x5d,0x70,0x30,0xdf,
+ 0x5d,0x3c,0x31,0x77,0x58,0xcc,0x2d,0x57,
+ 0x10,0x0d,0x9f,0xd2,0xbf,0x10,0x7d,0x9e,
+ 0xf2,0xb9,0xd0,0x6b,0x1e,0x85,0xb8,0xe2,
+ 0x6d,0xb2,0x92,0x50,0x92,0x1c,0x93,0xb4,
+ 0x96,0x44,0x8a,0x64,0xc2,0xa5,0x70,0x20,
+ 0xdf,0x3d,0x3d,0x71,0x70,0xd8,0xdd,0x2d,
+ 0x31,0x11,0x59,0x98,0x2a,0xaf,0x00,0x1d,
+ 0xff,0xb3,0xfe,0x57,0xfa,0x0f,0xe3,0xdf,
+ 0xb7,0x3e,0x4d,0x7a,0x50,0xe2,0x1d,0xb3,
+ 0xb2,0x56,0x52,0x0a,0x13,0xc3,0x97,0x76,
+ 0x8c,0xc8,0xd5,0x4d,0x00,0x51,0xfe,0x1b,
+ 0xfb,0xa7,0xe6,0x2f,0xab,0x1e,0x05,0xbb,
+ 0xe2,0x67,0xb2,0xae,0x50,0x1a,0x1f,0xa3,
+ 0xbe,0x36,0x7b,0x4a,0xe4,0x41,0xa6,0x7a,
+ 0x2a,0xe3,0x01,0xb5,0xfa,0x43,0xe2,0x77,
+ 0xb2,0xce,0x51,0x5a,0x18,0x23,0xaf,0x36,
+ 0x1d,0x4b,0xb0,0x46,0x5e,0x6a,0x3a,0x83,
+ 0x60,0xf4,0xbd,0xc4,0x73,0x66,0xd4,0xa9,
+ 0x04,0x09,0xe7,0xcb,0xaf,0x46,0x1c,0x6b,
+ 0xb6,0x86,0x48,0xea,0x4d,0x82,0x52,0xf2,
+ 0x11,0xd3,0x9b,0x16,0xa5,0x88,0x22,0xcf,
+ 0x31,0x5d,0x58,0x30,0x2f,0x5f,0x1c,0x3d,
+ 0xb7,0x72,0x4c,0xd2,0x55,0x12,0x01,0x93,
+ 0xfa,0x97,0xe0,0x8f,0xbc,0xde,0x75,0x3a,
+ 0xc1,0x61,0x78,0xb8,0xec,0x6d,0x96,0x92,
+ 0x88,0x90,0xcc,0x9d,0x54,0xb0,0x04,0x5f,
+ 0xe6,0x3f,0xab,0x7e,0x04,0xfb,0xe5,0xe7,
+ 0xa3,0xae,0x36,0x1b,0x4b,0xa4,0x46,0x26,
+ 0x6b,0x2a,0x85,0x00,0xe1,0xfd,0xbb,0xf2,
+ 0x67,0xd2,0xaf,0x10,0x1d,0x9f,0xb2,0xbe,
+ 0x50,0x7a,0x1e,0xe3,0xb9,0xb6,0x6a,0x4a,
+ 0x82,0x40,0xf2,0x7d,0xd2,0xf3,0x11,0xd5,
+ 0x9b,0x02,0xa5,0xf0,0x23,0xdf,0x37,0x3d,
+ 0x4d,0x70,0x50,0xde,0x1d,0x3b,0xb1,0x66,
+ 0x58,0xaa,0x2c,0x03,0x17,0xf5,0x8f,0xc2,
+ 0xdf,0x71,0x3c,0xd9,0x75,0x28,0xc1,0x0d,
+ 0x79,0xd0,0xeb,0x1d,0x85,0xb2,0xe2,0x51,
+ 0xb2,0x1a,0x53,0xa2,0x16,0x33,0x8b,0x56,
+ 0xc4,0x09,0x67,0xc8,0xaf,0x4c,0x1c,0x57,
+ 0xb6,0x0e,0x4b,0xda,0x47,0x22,0x6d,0x32,
+ 0x91,0x50,0x98,0x1c,0xaf,0xb4,0x1e,0x47,
+ 0xba,0x6e,0x62,0x9a,0xb0,0xa0,0x5c,0x3e,
+ 0x37,0x7b,0x4c,0xe4,0x55,0xa6,0x02,0x2b,
+ 0xf3,0x07,0xd5,0xef,0x03,0x9d,0xf6,0xb3,
+ 0xc8,0x57,0x4e,0x0c,0x5b,0xd6,0x27,0x0b,
+ 0x2d,0xc5,0x13,0x61,0x94,0xba,0x84,0x60,
+ 0xe6,0xbd,0xa8,0x72,0x0e,0xd3,0xd9,0x17,
+ 0x29,0x8d,0x0a,0xd1,0xc1,0x1b,0x79,0xa4,
+ 0xea,0x25,0x83,0x22,0xf5,0x31,0xc1,0x5b,
+ 0x78,0x24,0xef,0x25,0x9d,0x22,0xb1,0x30,
+ 0x59,0x5e,0x28,0x3b,0x0f,0x65,0xdc,0xa3,
+ 0x34,0x35,0x47,0x40,0x6c,0x7e,0x96,0xf8,
+ 0x89,0xec,0xcb,0x95,0x46,0x80,0x68,0xfe,
+ 0x8d,0xf8,0xd3,0xed,0x17,0x91,0x8e,0x9a,
+ 0xd8,0xa1,0x2c,0x39,0x17,0x69,0x8c,0x8a,
+ 0xd4,0xc1,0x05,0x79,0xe0,0xeb,0xbd,0x86,
+ 0x72,0xea,0xd1,0x81,0x1a,0xf9,0xa1,0xea,
+ 0x3b,0x83,0x66,0xf4,0xa9,0xc4,0x0b,0x67,
+ 0xc4,0xaf,0x64,0x1c,0xa7,0xb4,0x2e,0x47,
+ 0x1a,0x6d,0xa2,0x92,0x30,0x93,0x5c,0x94,
+ 0x34,0x87,0x44,0xec,0x65,0x96,0xa2,0x88,
+ 0x30,0xcf,0x5d,0x5c,0x30,0x37,0x5f,0x4c,
+ 0x3c,0x57,0x76,0x0c,0xcb,0xd5,0x47,0x00,
+ 0x6d,0xfe,0x93,0xf8,0x97,0xec,0x8f,0x94,
+ 0xde,0x85,0x38,0xe1,0x6d,0xb8,0x92,0x6c,
+ 0x92,0x94,0x90,0x84,0x9c,0xe4,0xb5,0xa4,
+ 0x42,0x26,0x73,0x2a,0xd5,0x01,0x01,0xf9,
+ 0xfb,0xeb,0xe7,0x87,0xae,0xee,0x19,0x9b,
+ 0xaa,0xa6,0x00,0x2b,0xff,0x07,0xfd,0xef,
+ 0xf3,0x9f,0xd6,0xbf,0x08,0x7d,0xce,0xf3,
+ 0x59,0xd4,0x2b,0x07,0x05,0xed,0xe3,0x93,
+ 0xb6,0x96,0x48,0x8a,0x4c,0xc2,0x55,0x72,
+ 0x00,0xd3,0xfd,0x17,0xf1,0x8f,0xda,0xdf,
+ 0x21,0x3d,0x39,0x71,0x68,0xd8,0x8d,0x2c,
+ 0xd1,0x15,0x19,0x81,0xaa,0xfa,0x01,0xe3,
+ 0xfb,0xb7,0xe6,0x4f,0xaa,0x5e,0x02,0x3b,
+ 0xf3,0x67,0xd4,0xaf,0x04,0x1d,0xe7,0xb3,
+ 0xae,0x56,0x1a,0x0b,0xa3,0xc6,0x37,0x6b,
+ 0x4c,0x84,0x54,0xe6,0x05,0xab,0xe2,0x07,
+ 0xb3,0xee,0x57,0x9a,0x0e,0xa3,0xd8,0x37,
+ 0x2f,0x4d,0x1c,0x51,0xb6,0x1a,0x4b,0xa2,
+ 0x46,0x32,0x6b,0x52,0x84,0x10,0xe7,0x9d,
+ 0xae,0xb2,0x18,0x53,0xae,0x16,0x1b,0x8b,
+ 0xa6,0xc6,0x29,0x6b,0x08,0x85,0xcc,0xe3,
+ 0x55,0xb4,0x02,0x47,0xf2,0x6f,0xd2,0x9f,
+ 0x10,0xbd,0x9c,0x72,0xb6,0xd0,0x49,0x1e,
+ 0x49,0xba,0x4a,0x62,0x42,0xb2,0x70,0x52,
+ 0xde,0x11,0x3b,0x99,0x66,0xa8,0xa8,0x0c,
+ 0x0f,0xd7,0xdf,0x0f,0x3d,0xdd,0x73,0x30,
+ 0xd5,0x5d,0x00,0x31,0xff,0x5b,0xfc,0x27,
+ 0xf7,0x2f,0xcd,0x1f,0x51,0xbc,0x1a,0x77,
+ 0xa2,0xce,0x31,0x5b,0x58,0x24,0x2f,0x27,
+ 0x1d,0x2d,0xb1,0x12,0x59,0x92,0x2a,0x93,
+ 0x00,0x95,0xfc,0x83,0xf4,0xf7,0xc5,0xcf,
+ 0x63,0x5c,0xb4,0x34,0x47,0x46,0x6c,0x6a,
+ 0x96,0x80,0x88,0xfc,0xcd,0xf5,0x53,0xc0,
+ 0x17,0x7f,0x8c,0xfe,0xd5,0xf9,0x03,0xe9,
+ 0xf7,0x8b,0xce,0xc7,0x59,0x6c,0x28,0x97,
+ 0x0c,0x8d,0xd4,0xd3,0x05,0x15,0xe1,0x83,
+ 0xba,0xf6,0x61,0xca,0xbb,0x40,0x64,0x7e,
+ 0xa6,0xf8,0x29,0xef,0x0b,0x9d,0xc6,0xb3,
+ 0x68,0x54,0x8e,0x04,0xdb,0xe5,0x27,0xa1,
+ 0x2e,0x39,0x1b,0x69,0xa4,0x8a,0x24,0xc3,
+ 0x25,0x75,0x20,0xc1,0x3d,0x79,0x70,0xe8,
+ 0xdd,0x8d,0x32,0xd1,0x51,0x18,0x19,0xaf,
+ 0xaa,0x1e,0x03,0xbb,0xf6,0x67,0xca,0xaf,
+ 0x40,0x1c,0x7f,0xb6,0xfe,0x49,0xfa,0x4b,
+ 0xe2,0x47,0xb2,0x6e,0x52,0x9a,0x10,0xa3,
+ 0x9c,0x36,0xb7,0x48,0x4c,0x4e,0x56,0x5a,
+ 0x0a,0x23,0xc3,0x37,0x75,0x4c,0xc0,0x55,
+ 0x7e,0x00,0xfb,0xfd,0xe7,0xf3,0xaf,0xd6,
+ 0x1f,0x0b,0xbd,0xc6,0x73,0x6a,0xd4,0x81,
+ 0x04,0xf9,0xe5,0xeb,0xa3,0x86,0x36,0xeb,
+ 0x49,0x84,0x4a,0xe6,0x41,0xaa,0x7a,0x02,
+ 0xe3,0xf1,0xb7,0xda,0x4f,0x22,0x5d,0x32,
+ 0x31,0x53,0x58,0x14,0x2f,0x87,0x1e,0xed,
+ 0xb9,0x92,0x6a,0x92,0x80,0x90,0xfc,0x9d,
+ 0xf4,0xb3,0xc4,0x57,0x66,0x0c,0xab,0xd4,
+ 0x07,0x07,0xed,0xef,0x93,0x9e,0x96,0xb8,
+ 0x88,0x6c,0xce,0x95,0x58,0x80,0x2c,0xff,
+ 0x15,0xfd,0x83,0xf2,0xf7,0xd1,0xcf,0x1b,
+ 0x5d,0xa4,0x32,0x27,0x53,0x2c,0x15,0x17,
+ 0x81,0x8e,0xfa,0xd9,0xe1,0x2b,0xb9,0x06,
+ 0x69,0xea,0x8b,0x80,0xc6,0xfd,0x69,0xf0,
+ 0x8b,0xdc,0xc7,0x35,0x6d,0x40,0x90,0x7c,
+ 0x9e,0xf4,0xb9,0xc4,0x6b,0x66,0x84,0xa8,
+ 0xe4,0x0d,0xa7,0xd2,0x2f,0x13,0x1d,0x95,
+ 0xb2,0x82,0x50,0xf2,0x1d,0xd3,0xb3,0x16,
+ 0x55,0x8a,0x02,0xc3,0xf1,0x77,0xd8,0xcf,
+ 0x2d,0x5d,0x10,0x31,0x9f,0x5a,0xbc,0x20,
+ 0x77,0x3e,0xcd,0x79,0x50,0xe8,0x1d,0x8f,
+ 0xb2,0xde,0x51,0x3a,0x19,0x63,0xa8,0xb6,
+ 0x0c,0x4b,0xd6,0x47,0x0a,0x6d,0xc2,0x93,
+ 0x70,0x94,0xdc,0x85,0x34,0xe1,0x45,0xb8,
+ 0x62,0x6e,0xb2,0x98,0x50,0xae,0x1c,0x1b,
+ 0xb7,0xa6,0x4e,0x2a,0x5b,0x02,0x25,0xf3,
+ 0x23,0xd5,0x37,0x01,0x4d,0xf8,0x53,0xee,
+ 0x17,0x9b,0x8e,0xa6,0xd8,0x29,0x2f,0x09,
+ 0x1d,0xc9,0xb3,0x4a,0x54,0x42,0x06,0x73,
+ 0xea,0xd7,0x81,0x0e,0xf9,0xd9,0xeb,0x2b,
+ 0x85,0x06,0xe1,0xe9,0xbb,0x8a,0x66,0xc2,
+ 0xa9,0x70,0x08,0xdf,0xcd,0x3f,0x51,0x7c,
+ 0x18,0xf7,0xad,0xce,0x13,0x5b,0x94,0x26,
+ 0x87,0x28,0xed,0x0d,0x91,0xd2,0x9b,0x10,
+ 0xa5,0x9c,0x22,0xb7,0x30,0x4d,0x5e,0x50,
+ 0x3a,0x1f,0x63,0xbc,0xb6,0x74,0x4a,0xc6,
+ 0x41,0x6a,0x78,0x82,0xec,0xf1,0x95,0xda,
+ 0x83,0x20,0xf5,0x3d,0xc1,0x73,0x78,0xd4,
+ 0xed,0x05,0x91,0xe2,0x9b,0xb0,0xa6,0x5c,
+ 0x2a,0x37,0x03,0x4d,0xf4,0x53,0xc6,0x17,
+ 0x6b,0x8c,0x86,0xd4,0xe9,0x05,0x89,0xe2,
+ 0xcb,0xb1,0x46,0x58,0x6a,0x2e,0x83,0x18,
+ 0xf5,0xad,0xc2,0x13,0x73,0x94,0xd6,0x85,
+ 0x08,0xe1,0xcd,0xbb,0x52,0x64,0x12,0xa7,
+ 0x90,0x2e,0x9f,0x18,0xbd,0xac,0x72,0x16,
+ 0xd3,0x89,0x16,0xc9,0x89,0x4a,0xc8,0x41,
+ 0x4e,0x78,0x5a,0xee,0x21,0x9b,0x3a,0xa5,
+ 0x60,0x20,0xbf,0x3c,0x7d,0x76,0xf0,0xc9,
+ 0xdd,0x4b,0x30,0x45,0x5e,0x60,0x3a,0xbf,
+ 0x60,0x7c,0xbe,0xf4,0x79,0xc6,0xeb,0x69,
+ 0x84,0x8a,0xe4,0xc1,0xa5,0x7a,0x20,0xe3,
+ 0x3d,0xb5,0x72,0x40,0xd2,0x7d,0x12,0xf1,
+ 0x91,0xda,0x9b,0x20,0xa5,0x3c,0x21,0x77,
+ 0x38,0xcd,0x6d,0x50,0x90,0x1c,0x9f,0xb4,
+ 0xbe,0x44,0x7a,0x66,0xe2,0xa9,0xb0,0x0a,
+ 0x5f,0xc2,0x3f,0x73,0x7c,0xd4,0xf5,0x05,
+ 0xc1,0xe3,0x7b,0xb4,0xe6,0x45,0xaa,0x62,
+ 0x02,0xb3,0xf0,0x57,0xde,0x0f,0x3b,0xdd,
+ 0x67,0x30,0xad,0x5c,0x10,0x37,0x9f,0x4e,
+ 0xbc,0x58,0x76,0x2e,0xcb,0x19,0x45,0xa8,
+ 0x62,0x0e,0xb3,0xd8,0x57,0x2e,0x0d,0x1b,
+ 0xd1,0xa7,0x1a,0x2d,0xa3,0x12,0x35,0x93,
+ 0x42,0x94,0x70,0x86,0xdc,0xe9,0x35,0x89,
+ 0x42,0xc8,0x71,0x4e,0xd8,0x59,0x2e,0x29,
+ 0x1b,0x09,0xa5,0xca,0x23,0x43,0x34,0x75,
+ 0x46,0xc0,0x69,0x7e,0x88,0xf8,0xcd,0xed,
+ 0x53,0x90,0x16,0x9f,0x88,0xbe,0xcc,0x79,
+ 0x56,0xe8,0x09,0x8f,0xca,0xdf,0x41,0x3c,
+ 0x79,0x76,0xe8,0xc9,0x8d,0x4a,0xd0,0x41,
+ 0x1e,0x79,0xba,0xea,0x61,0x82,0xba,0xf0,
+ 0x61,0xde,0xbb,0x38,0x65,0x6e,0xa0,0x98,
+ 0x3c,0xaf,0x74,0x1c,0xc7,0xb5,0x6e,0x40,
+ 0x9a,0x7c,0xa2,0xf4,0x31,0xc7,0x5b,0x6c,
+ 0x24,0x97,0x24,0x8d,0x24,0xd1,0x25,0x19,
+ 0x21,0xa9,0x3a,0x09,0x63,0xc8,0xb7,0x4c,
+ 0x4c,0x56,0x56,0x0a,0x0b,0xc3,0xc7,0x77,
+ 0x6c,0xcc,0x95,0x54,0x80,0x04,0xff,0xe5,
+ 0xff,0xa3,0xfe,0x37,0xfb,0x4f,0xe4,0x5f,
+ 0xa6,0x3e,0x2b,0x7b,0x04,0xe5,0xe5,0xa3,
+ 0xa2,0x36,0x33,0x4b,0x54,0x44,0x06,0x67,
+ 0xea,0xaf,0x80,0x1e,0xff,0xb9,0xfe,0x6b,
+ 0xfa,0x87,0xe0,0xef,0xbd,0x9e,0x72,0xba,
+ 0xd0,0x61,0x1e,0xb9,0xb8,0x6a,0x6e,0x82,
+ 0x98,0xf0,0xad,0xdc,0x13,0x37,0x95,0x4e,
+ 0x80,0x58,0xfe,0x2d,0xfb,0x13,0xe5,0x97,
+ 0xa2,0x8e,0x30,0xdb,0x5d,0x24,0x31,0x27,
+ 0x59,0x2c,0x29,0x17,0x09,0x8d,0xca,0xd3,
+ 0x41,0x14,0x79,0x86,0xea,0xe9,0x81,0x8a,
+ 0xfa,0xc1,0xe1,0x7b,0xb8,0xe6,0x6d,0xaa,
+ 0x92,0x00,0x93,0xfc,0x97,0xf4,0x8f,0xc4,
+ 0xdf,0x65,0x3c,0xa1,0x74,0x38,0xc7,0x6d,
+ 0x6c,0x90,0x94,0x9c,0x84,0xb4,0xe4,0x45,
+ 0xa6,0x62,0x2a,0xb3,0x00,0x55,0xfe,0x03,
+ 0xfb,0xf7,0xe7,0xcf,0xaf,0x5e,0x1c,0x3b,
+ 0xb7,0x66,0x4c,0xaa,0x54,0x02,0x07,0xf3,
+ 0xef,0xd7,0x9f,0x0e,0xbd,0xd8,0x73,0x2e,
+ 0xd5,0x19,0x01,0xa9,0xfa,0x0b,0xe3,0xc7,
+ 0xb7,0x6e,0x4c,0x9a,0x54,0xa2,0x04,0x33,
+ 0xe7,0x57,0xac,0x0e,0x17,0xdb,0x8f,0x26,
+ 0xdd,0x29,0x31,0x09,0x59,0xc8,0x2b,0x4f,
+ 0x04,0x5d,0xe6,0x33,0xab,0x56,0x04,0x0b,
+ 0xe7,0xc7,0xaf,0x6e,0x1c,0x9b,0xb4,0xa6,
+ 0x44,0x2a,0x67,0x02,0xad,0xf0,0x13,0xdf,
+ 0x97,0x3e,0x8d,0x78,0xd0,0xed,0x1d,0x91,
+ 0xb2,0x9a,0x50,0xa2,0x1c,0x33,0xb7,0x56,
+ 0x4c,0x0a,0x57,0xc2,0x0f,0x73,0xdc,0xd7,
+ 0x35,0x0d,0x41,0xd0,0x7b,0x1e,0xe5,0xb9,
+ 0xa2,0x6a,0x32,0x83,0x50,0xf4,0x1d,0xc7,
+ 0xb3,0x6e,0x54,0x9a,0x04,0xa3,0xe4,0x37,
+ 0xa7,0x4e,0x2c,0x5b,0x16,0x25,0x8b,0x22,
+ 0xc5,0x31,0x61,0x58,0xb8,0x2c,0x6f,0x16,
+ 0x9d,0x88,0xb2,0xcc,0x51,0x56,0x18,0x0b,
+ 0xaf,0xc6,0x1f,0x6b,0xbc,0x86,0x74,0xea,
+ 0xc5,0x81,0x62,0xf8,0xb1,0xec,0x5b,0x96,
+ 0x26,0x8b,0x28,0xc5,0x0d,0x61,0xd0,0xbb,
+ 0x1c,0x65,0xb6,0xa2,0x48,0x32,0x4f,0x52,
+ 0x5c,0x12,0x37,0x93,0x4e,0x94,0x58,0x86,
+ 0x2c,0xeb,0x15,0x85,0x82,0xe2,0xf1,0xb1,
+ 0xda,0x5b,0x22,0x25,0x33,0x21,0x55,0x38,
+ 0x01,0x6f,0xf8,0x9f,0xec,0xbf,0x94,0x7e,
+ 0x86,0xf8,0xe9,0xed,0x8b,0x92,0xc6,0x91,
+ 0x68,0x98,0x8c,0xac,0xd4,0x15,0x07,0x81,
+ 0xee,0xfb,0x99,0xe6,0xab,0xa8,0x06,0x0f,
+ 0xeb,0xdf,0x87,0x3e,0xed,0x79,0x90,0xea,
+ 0x9d,0x80,0xb2,0xfc,0x51,0xf6,0x1b,0xcb,
+ 0xa7,0x46,0x2c,0x6b,0x16,0x85,0x88,0xe2,
+ 0xcd,0xb1,0x52,0x58,0x12,0x2f,0x93,0x1e,
+ 0x95,0xb8,0x82,0x6c,0xf2,0x95,0xd0,0x83,
+ 0x1c,0xf5,0xb5,0xc2,0x43,0x72,0x74,0xd2,
+ 0xc5,0x11,0x61,0x98,0xba,0xac,0x60,0x16,
+ 0xbf,0x88,0x7e,0xce,0xf9,0x59,0xe8,0x2b,
+ 0x8f,0x06,0xdd,0xe9,0x33,0x89,0x56,0xc8,
+ 0x09,0x4f,0xc8,0x5f,0x4e,0x3c,0x5b,0x76,
+ 0x24,0xcb,0x25,0x45,0x20,0x61,0x3e,0xb9,
+ 0x78,0x68,0xee,0x8d,0x98,0xd2,0xad,0x10,
+ 0x11,0x9f,0x9a,0xbe,0xa0,0x78,0x3e,0xef,
+ 0x79,0x9c,0xea,0xb5,0x80,0x42,0xfe,0x71,
+ 0xfa,0xdb,0xe1,0x27,0xb9,0x2e,0x69,0x1a,
+ 0x89,0xa0,0xca,0x3d,0x43,0x70,0x74,0xde,
+ 0xc5,0x39,0x61,0x68,0xb8,0x8c,0x6c,0xd6,
+ 0x95,0x08,0x81,0xcc,0xfb,0x55,0xe4,0x03,
+ 0xa7,0xf6,0x2f,0xcb,0x1f,0x45,0xbc,0x62,
+ 0x76,0xb2,0xc8,0x51,0x4e,0x18,0x5b,0xae,
+ 0x26,0x1b,0x2b,0xa5,0x06,0x21,0xeb,0x3b,
+ 0x85,0x66,0xe0,0xa9,0xbc,0x0a,0x77,0xc2,
+ 0xcf,0x71,0x5c,0xd8,0x35,0x2f,0x41,0x1c,
+ 0x79,0xb6,0xea,0x49,0x82,0x4a,0xf2,0x41,
+ 0xd2,0x7b,0x12,0xe5,0x91,0xa2,0x9a,0x30,
+ 0xa3,0x5c,0x34,0x37,0x47,0x4c,0x6c,0x56,
+ 0x96,0x08,0x8b,0xcc,0xc7,0x55,0x6c,0x00,
+ 0x97,0xfc,0x8f,0xf4,0xdf,0xc5,0x3f,0x61,
+ 0x7c,0xb8,0xf4,0x6d,0xc6,0x93,0x68,0x94,
+ 0x8c,0x84,0xd4,0xe5,0x05,0xa1,0xe2,0x3b,
+ 0xb3,0x66,0x54,0xaa,0x04,0x03,0xe7,0xf7,
+ 0xaf,0xce,0x1f,0x5b,0xbc,0x26,0x77,0x2a,
+ 0xcd,0x01,0x51,0xf8,0x1b,0xef,0xa7,0x9e,
+ 0x2e,0xbb,0x18,0x65,0xae,0xa2,0x18,0x33,
+ 0xaf,0x56,0x1c,0x0b,0xb7,0xc6,0x4f,0x6a,
+ 0x5c,0x82,0x34,0xf3,0x45,0xd4,0x63,0x06,
+ 0xb5,0xe8,0x43,0x8e,0x76,0xda,0xc9,0x21,
+ 0x49,0x38,0x49,0x6e,0x48,0x9a,0x4c,0xa2,
+ 0x54,0x32,0x07,0x53,0xec,0x17,0x97,0x8e,
+ 0x8e,0xd8,0xd9,0x2d,0x29,0x11,0x09,0x99,
+ 0xca,0xab,0x40,0x04,0x7f,0xe6,0xff,0xa9,
+ 0xfe,0x0b,0xfb,0xc7,0xe7,0x6f,0xac,0x9e,
+ 0x14,0xbb,0x84,0x66,0xe6,0xa9,0xa8,0x0a,
+ 0x0f,0xc3,0xdf,0x77,0x3c,0xcd,0x75,0x50,
+ 0xc0,0x1d,0x7f,0xb0,0xfe,0x5d,0xfa,0x33,
+ 0xe3,0x57,0xb4,0x0e,0x47,0xda,0x6f,0x22,
+ 0x9d,0x30,0xb1,0x5c,0x58,0x36,0x2f,0x4b,
+ 0x1c,0x45,0xb6,0x62,0x4a,0xb2,0x40,0x52,
+ 0x7e,0x12,0xfb,0x91,0xe6,0x9b,0xa8,0xa6,
+ 0x0c,0x2b,0xd7,0x07,0x0d,0xed,0xd3,0x93,
+ 0x16,0x95,0x88,0x82,0xcc,0xf1,0x55,0xd8,
+ 0x03,0x2f,0xf5,0x1f,0xc1,0xbf,0x7a,0x7c,
+ 0xe2,0xf5,0xb1,0xc2,0x5b,0x72,0x24,0xd3,
+ 0x25,0x15,0x21,0x81,0x3a,0xf9,0x61,0xe8,
+ 0xbb,0x8c,0x66,0xd6,0xa9,0x08,0x09,0xcf,
+ 0xcb,0x5f,0x44,0x3c,0x67,0x76,0xac,0xc8,
+ 0x15,0x4f,0x80,0x5e,0xfe,0x39,0xfb,0x6b,
+ 0xe4,0x87,0xa4,0xee,0x25,0x9b,0x22,0xa5,
+ 0x30,0x21,0x5f,0x38,0x3d,0x6f,0x70,0x9c,
+ 0xdc,0xb5,0x34,0x41,0x46,0x78,0x6a,0xee,
+ 0x81,0x98,0xfa,0xad,0xe0,0x13,0xbf,0x96,
+ 0x7e,0x8a,0xf8,0xc1,0xed,0x7b,0x90,0xe6,
+ 0x9d,0xa8,0xb2,0x0c,0x53,0xd6,0x17,0x0b,
+ 0x8d,0xc6,0xd3,0x69,0x14,0x89,0x84,0xca,
+ 0xe5,0x41,0xa0,0x7a,0x3e,0xe3,0x79,0xb4,
+ 0xea,0x45,0x82,0x62,0xf2,0xb1,0xd0,0x5b,
+ 0x1e,0x25,0xbb,0x22,0x65,0x32,0xa1,0x50,
+ 0x38,0x1f,0x6f,0xbc,0x9e,0x74,0xba,0xc4,
+ 0x61,0x66,0xb8,0xa8,0x6c,0x0e,0x97,0xd8,
+ 0x8f,0x2c,0xdd,0x15,0x31,0x81,0x5a,0xf8,
+ 0x21,0xef,0x3b,0x9d,0x66,0xb0,0xa8,0x5c,
+ 0x0e,0x37,0xdb,0x4f,0x24,0x5d,0x26,0x31,
+ 0x2b,0x59,0x04,0x29,0xe7,0x0b,0xad,0xc6,
+ 0x13,0x6b,0x94,0x86,0x84,0xe8,0xe5,0x8d,
+ 0xa2,0xd2,0x31,0x13,0x59,0x94,0x2a,0x87,
+ 0x00,0xed,0xfd,0x93,0xf2,0x97,0xd0,0x8f,
+ 0x1c,0xdd,0xb5,0x32,0x41,0x52,0x78,0x12,
+ 0xef,0x91,0x9e,0x9a,0xb8,0xa0,0x6c,0x3e,
+ 0x97,0x78,0x8c,0xec,0xd5,0x95,0x02,0x81,
+ 0xf0,0xfb,0xdd,0xe7,0x33,0xad,0x56,0x10,
+ 0x0b,0x9f,0xc6,0xbf,0x68,0x7c,0x8e,0xf4,
+ 0xd9,0xc5,0x2b,0x61,0x04,0xb9,0xe4,0x6b,
+ 0xa6,0x86,0x28,0xeb,0x0d,0x85,0xd2,0xe3,
+ 0x11,0xb5,0x9a,0x42,0xa2,0x70,0x32,0xdf,
+ 0x51,0x3c,0x19,0x77,0xa8,0xce,0x0d,0x5b,
+ 0xd0,0x27,0x1f,0x2d,0xbd,0x12,0x71,0x92,
+ 0xda,0x91,0x20,0x99,0x3c,0xa9,0x74,0x08,
+ 0xc7,0xcd,0x6f,0x50,0x9c,0x1c,0xb7,0xb4,
+ 0x4e,0x46,0x5a,0x6a,0x22,0x83,0x30,0xf5,
+ 0x5d,0xc0,0x33,0x7f,0x54,0xfc,0x05,0xf7,
+ 0xe3,0xcf,0xb7,0x5e,0x4c,0x3a,0x57,0x62,
+ 0x0c,0xb3,0xd4,0x57,0x06,0x0d,0xeb,0xd3,
+ 0x87,0x16,0xed,0x89,0x92,0xca,0x91,0x40,
+ 0x98,0x7c,0xae,0xf4,0x19,0xc7,0xab,0x6e,
+ 0x04,0x9b,0xe4,0xa7,0xa4,0x2e,0x27,0x1b,
+ 0x2d,0xa5,0x12,0x21,0x93,0x3a,0x95,0x60,
+ 0x80,0xbc,0xfc,0x75,0xf6,0xc3,0xc9,0x77,
+ 0x48,0xcc,0x4d,0x56,0x50,0x0a,0x1f,0xc3,
+ 0xbf,0x76,0x7c,0xca,0xf5,0x41,0xc0,0x7b,
+ 0x7e,0xe4,0xf9,0xa5,0xea,0x23,0x83,0x36,
+ 0xf5,0x49,0xc0,0x4b,0x7e,0x44,0xfa,0x65,
+ 0xe2,0xa3,0xb0,0x36,0x5f,0x4a,0x3c,0x43,
+ 0x76,0x74,0xca,0xc5,0x41,0x60,0x78,0xbe,
+ 0xec,0x79,0x96,0xea,0x89,0x80,0xca,0xfd,
+ 0x41,0xf0,0x7b,0xde,0xe7,0x39,0xad,0x6a,
+ 0x10,0x83,0x9c,0xf6,0xb5,0xc8,0x43,0x4e,
+ 0x74,0x5a,0xc6,0x21,0x6b,0x38,0x85,0x6c,
+ 0xe0,0x95,0xbc,0x82,0x74,0xf2,0xc5,0xd1,
+ 0x63,0x18,0xb5,0xac,0x42,0x16,0x73,0x8a,
+ 0xd6,0xc1,0x09,0x79,0xc8,0xeb,0x4d,0x84,
+ 0x52,0xe6,0x11,0xab,0x9a,0x06,0xa3,0xe8,
+ 0x37,0x8f,0x4e,0xdc,0x59,0x36,0x29,0x4b,
+ 0x08,0x45,0xce,0x63,0x5a,0xb4,0x20,0x47,
+ 0x3e,0x6d,0x7a,0x90,0xe0,0x9d,0xbc,0xb2,
+ 0x74,0x52,0xc6,0x11,0x6b,0x98,0x86,0xac,
+ 0xe8,0x15,0x8f,0x82,0xde,0xf1,0x39,0xd9,
+ 0x6b,0x28,0x85,0x0c,0xe1,0xd5,0xbb,0x02,
+ 0x65,0xf2,0xa3,0xd0,0x37,0x1f,0x4d,0xbc,
+ 0x52,0x76,0x12,0xcb,0x91,0x46,0x98,0x68,
+ 0xae,0x8c,0x18,0xd7,0xad,0x0e,0x11,0xdb,
+ 0x9b,0x26,0xa5,0x28,0x21,0x0f,0x39,0xdd,
+ 0x6b,0x30,0x85,0x5c,0xe0,0x35,0xbf,0x42,
+ 0x7c,0x72,0xf6,0xd1,0xc9,0x1b,0x49,0xa4,
+ 0x4a,0x26,0x43,0x2a,0x75,0x02,0xc1,0xf1,
+ 0x7b,0xd8,0xe7,0x2d,0xad,0x12,0x11,0x93,
+ 0x9a,0x96,0xa0,0x88,0x3c,0xcf,0x75,0x5c,
+ 0xc0,0x35,0x7f,0x40,0xfc,0x7d,0xf6,0xf3,
+ 0xc9,0xd7,0x4b,0x0c,0x45,0xd6,0x63,0x0a,
+ 0xb5,0xc0,0x43,0x7e,0x74,0xfa,0xc5,0xe1,
+ 0x63,0xb8,0xb6,0x6c,0x4a,0x96,0x40,0x8a,
+ 0x7c,0xc2,0xf5,0x71,0xc0,0xdb,0x7d,0x24,
+ 0xf1,0x25,0xd9,0x23,0x29,0x35,0x09,0x41,
+ 0xc8,0x7b,0x4e,0xe4,0x59,0xa6,0x2a,0x2b,
+ 0x03,0x05,0xf5,0xe3,0xc3,0xb7,0x76,0x4c,
+ 0xca,0x55,0x42,0x00,0x73,0xfe,0xd7,0xf9,
+ 0x0f,0xe9,0xdf,0x8b,0x3e,0xc5,0x79,0x60,
+ 0xe8,0xbd,0x8c,0x72,0xd6,0xd1,0x09,0x19,
+ 0xc9,0xab,0x4a,0x04,0x43,0xe6,0x77,0xaa,
+ 0xce,0x01,0x5b,0xf8,0x27,0xef,0x2f,0x9d,
+ 0x1e,0xb1,0xb8,0x5a,0x6e,0x22,0x9b,0x30,
+ 0xa5,0x5c,0x20,0x37,0x3f,0x4d,0x7c,0x50,
+ 0xf6,0x1d,0xcb,0xb3,0x46,0x54,0x6a,0x06,
+ 0x83,0xe8,0xf7,0x8d,0xce,0xd3,0x59,0x14,
+ 0x29,0x87,0x0a,0xed,0xc1,0x93,0x7a,0x94,
+ 0xe0,0x85,0xbc,0xe2,0x75,0xb2,0xc2,0x51,
+ 0x72,0x18,0xd3,0xad,0x16,0x11,0x8b,0x9a,
+ 0xc6,0xa1,0x68,0x38,0x8f,0x6c,0xdc,0x95,
+ 0x34,0x81,0x44,0xf8,0x65,0xee,0xa3,0x98,
+ 0x36,0xaf,0x48,0x1c,0x4f,0xb6,0x5e,0x4a,
+ 0x3a,0x43,0x62,0x74,0xb2,0xc4,0x51,0x66,
+ 0x18,0xab,0xac,0x06,0x17,0xeb,0x8f,0x86,
+ 0xde,0xe9,0x39,0x89,0x6a,0xc8,0x81,0x4c,
+ 0xf8,0x55,0xee,0x03,0x9b,0xf6,0xa7,0xc8,
+ 0x2f,0x4f,0x1c,0x5d,0xb6,0x32,0x4b,0x52,
+ 0x44,0x12,0x67,0x92,0xae,0x90,0x18,0x9f,
+ 0xac,0xbe,0x14,0x7b,0x86,0xe6,0xe9,0xa9,
+ 0x8a,0x0a,0xc3,0xc1,0x77,0x78,0xcc,0xed,
+ 0x55,0x90,0x02,0x9f,0xf0,0xbf,0xdc,0x7f,
+ 0x36,0xfd,0x49,0xf0,0x4b,0xde,0x47,0x3a,
+ 0x6d,0x62,0x90,0xb0,0x9c,0x5c,0xb6,0x34,
+ 0x4b,0x46,0x44,0x6a,0x66,0x82,0xa8,0xf0,
+ 0x0d,0xdf,0xd3,0x3f,0x15,0x7d,0x80,0xf2,
+ 0xfd,0xd1,0xf3,0x1b,0xd5,0xa7,0x02,0x2d,
+ 0xf3,0x13,0xd5,0x97,0x02,0x8d,0xf0,0xd3,
+ 0xdd,0x17,0x31,0x8d,0x5a,0xd0,0x21,0x1f,
+ 0x39,0xbd,0x6a,0x70,0x82,0xdc,0xf1,0x35,
+ 0xd9,0x43,0x28,0x75,0x0e,0xc1,0xd9,0x7b,
+ 0x28,0xe5,0x0d,0xa1,0xd2,0x3b,0x13,0x65,
+ 0x94,0xa2,0x84,0x30,0xe7,0x5d,0xac,0x32,
+ 0x17,0x53,0x8c,0x16,0xd7,0x89,0x0e,0xc9,
+ 0xd9,0x4b,0x28,0x45,0x0e,0x61,0xda,0xbb,
+ 0x20,0x65,0x3e,0xa1,0x78,0x38,0xef,0x6d,
+ 0x9c,0x92,0xb4,0x90,0x44,0x9e,0x64,0xba,
+ 0xa4,0x60,0x26,0xbf,0x28,0x7d,0x0e,0xf1,
+ 0xd9,0xdb,0x2b,0x25,0x05,0x21,0xe1,0x3b,
+ 0xb9,0x66,0x68,0xaa,0x8c,0x00,0xd7,0xfd,
+ 0x0f,0xf1,0xdf,0xdb,0x3f,0x25,0x7d,0x20,
+ 0xf1,0x3d,0xd9,0x73,0x28,0xd5,0x0d,0x01,
+ 0xd1,0xfb,0x1b,0xe5,0xa7,0xa2,0x2e,0x33,
+ 0x1b,0x55,0xa4,0x02,0x27,0xf3,0x2f,0xd5,
+ 0x1f,0x01,0xbd,0xfa,0x73,0xe2,0xd7,0xb1,
+ 0x0e,0x59,0xda,0x2b,0x23,0x05,0x35,0xe1,
+ 0x43,0xb8,0x76,0x6e,0xca,0x99,0x40,0xa8,
+ 0x7c,0x0e,0xf7,0xd9,0xcf,0x2b,0x5d,0x04,
+ 0x31,0xe7,0x5b,0xac,0x26,0x17,0x2b,0x8d,
+ 0x06,0xd1,0xe9,0x1b,0x89,0xa6,0xca,0x29,
+ 0x43,0x08,0x75,0xce,0xc3,0x59,0x74,0x28,
+ 0xc7,0x0d,0x6d,0xd0,0x93,0x1c,0x95,0xb4,
+ 0x82,0x44,0xf2,0x65,0xd2,0xa3,0x10,0x35,
+ 0x9f,0x42,0xbc,0x70,0x76,0xde,0xc9,0x39,
+ 0x49,0x68,0x48,0x8e,0x4c,0xda,0x55,0x22,
+ 0x01,0x33,0xf9,0x57,0xe8,0x0f,0x8f,0xde,
+ 0xdf,0x39,0x3d,0x69,0x70,0x88,0xdc,0xcd,
+ 0x35,0x51,0x40,0x18,0x7f,0xae,0xfe,0x19,
+ 0xfb,0xab,0xe6,0x07,0xab,0xee,0x07,0x9b,
+ 0xee,0xa7,0x98,0x2e,0xaf,0x18,0x1d,0xaf,
+ 0xb2,0x1e,0x53,0xba,0x16,0x63,0x8a,0xb6,
+ 0xc0,0x49,0x7e,0x48,0xfa,0x4d,0xe2,0x53,
+ 0xb2,0x16,0x53,0x8a,0x16,0xc3,0x89,0x76,
+ 0xc8,0xc9,0x4d,0x48,0x50,0x4e,0x1e,0x5b,
+ 0xba,0x26,0x63,0x2a,0xb5,0x00,0x41,0xfe,
+ 0x7b,0xfa,0xe7,0xe1,0xaf,0xba,0x1e,0x63,
+ 0xba,0xb6,0x60,0x4a,0xbe,0x40,0x7a,0x7e,
+ 0xe2,0xf9,0xb1,0xea,0x5b,0x82,0x26,0xf3,
+ 0x29,0xd5,0x0b,0x01,0xc5,0xfb,0x63,0xe4,
+ 0xb7,0xa4,0x4e,0x26,0x5b,0x2a,0x25,0x03,
+ 0x21,0xf5,0x3b,0xc1,0x67,0x78,0xac,0xec,
+ 0x15,0x97,0x82,0x8e,0xf0,0xd9,0xdd,0x2b,
+ 0x31,0x05,0x59,0xe0,0x2b,0xbf,0x06,0x7d,
+ 0xea,0xf3,0x81,0xd6,0xfb,0x09,0xe5,0xcb,
+ 0xa3,0x46,0x34,0x6b,0x46,0x84,0x68,0xe6,
+ 0x8d,0xa8,0xd2,0x0d,0x13,0xd1,0x97,0x1a,
+ 0x8d,0xa0,0xd2,0x3d,0x13,0x71,0x94,0xda,
+ 0x85,0x20,0xe1,0x3d,0xb9,0x72,0x68,0xd2,
+ 0x8d,0x10,0xd1,0x9d,0x1a,0xb1,0xa0,0x5a,
+ 0x3e,0x23,0x7b,0x34,0xe5,0x45,0xa0,0x62,
+ 0x3e,0xb3,0x78,0x54,0xee,0x05,0x9b,0xe2,
+ 0xa7,0xb0,0x2e,0x5f,0x1a,0x3d,0xa3,0x72,
+ 0x34,0xd3,0x45,0x14,0x61,0x86,0xba,0xe8,
+ 0x61,0x8e,0xba,0xd8,0x61,0x2e,0xb9,0x18,
+ 0x69,0xae,0x8a,0x18,0xc3,0xad,0x76,0x10,
+ 0xcb,0x9d,0x46,0xb0,0x68,0x5e,0x8e,0x38,
+ 0xdb,0x6d,0x24,0x91,0x24,0x99,0x24,0xa9,
+ 0x24,0x09,0x27,0xc9,0x2f,0x49,0x1c,0x49,
+ 0xb6,0x4a,0x4a,0x42,0x42,0x72,0x72,0xd2,
+ 0xd1,0x11,0x19,0x99,0xaa,0xaa,0x00,0x03,
};
diff --git a/apps/plugins/rockboy/palette-presets.h b/apps/plugins/rockboy/palette-presets.h
new file mode 100644
index 0000000000..86c3898e06
--- /dev/null
+++ b/apps/plugins/rockboy/palette-presets.h
@@ -0,0 +1,151 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id: palette-presets.h $
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef __PALETTE_PRESETS_H__
+#define __PALETTE_PRESETS_H__
+
+/* The following is an array of palettes for use in Rockboy. Some were
+ * originally found in GoomBA for Game Boy Advance by FluBBa.
+ *
+ * The first line contains the colors for the background layer.
+ * The second contains the colors for the window layer.
+ * The third contains the colors for object 0 layer.
+ * The fourth contains the colors for object 1 layer.
+ *
+ * gnuboy seems to like the colors to be 0xBBGGRR */
+
+int palettes [17][4][4] = {
+ {
+ /* Brown */ { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C },
+ { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C },
+ { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C },
+ { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C }
+ },
+
+ {
+ /* Gray */ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 },
+ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 },
+ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 },
+ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 }
+ },
+
+ {
+ /* Light Gray */ { 0xffffff, 0xc0c0c0, 0x808080, 0x404040 },
+ { 0xffffff, 0xc0c0c0, 0x808080, 0x404040 },
+ { 0xffffff, 0xc0c0c0, 0x808080, 0x404040 },
+ { 0xffffff, 0xc0c0c0, 0x808080, 0x404040 }
+ },
+
+ {
+ /* Multi-Color 1 */ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 },
+ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 },
+ { 0xffefef, 0xe78c5a, 0x9c4a18, 0x000000 },
+ { 0xefefff, 0x635aef, 0x1810ad, 0x000000 }
+ },
+
+ {
+ /* Multi-Color 2 */ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 },
+ { 0xe7efd6, 0xc6de8c, 0x6b8429, 0x000000 },
+ { 0xffffff, 0x635aef, 0x1810ad, 0x000000 },
+ { 0xffffff, 0xe78c5a, 0x9c4a18, 0x000000 }
+ },
+
+ {
+ /* Adventure Island */ { 0xffffff, 0xffb59c, 0x009431, 0x000000 },
+ { 0xffffff, 0x73cef7, 0x084a8c, 0x9c2121 },
+ { 0xdeffff, 0x73c6ef, 0x5263ff, 0x290000 },
+ { 0xffffff, 0xa5a5e7, 0x29297b, 0x000042 }
+ },
+
+ {
+ /* Adventure Island 2 */ { 0xffffff, 0x75eff7, 0xbd6b29, 0x000000 },
+ { 0xffffff, 0x73cef7, 0x084a8c, 0x9c2121 },
+ { 0xdeffff, 0x73c6ef, 0x5263ff, 0x290000 },
+ { 0xffffff, 0xa5a5e7, 0x29297b, 0x000042 }
+ },
+
+ {
+ /* Balloon Kid */ { 0xa5d6ff, 0xe7efff, 0xde8c10, 0x5a1000 },
+ { 0xffffff, 0x73cef7, 0x084a8c, 0x9c2121 },
+ { 0xc6c6ff, 0x6b6bff, 0x0000ff, 0x000063 },
+ { 0xffffff, 0xef42ef, 0x29297b, 0x000042 }
+ },
+
+ {
+ /* Batman */ { 0xeff7ff, 0xc88089, 0x445084, 0x001042 },
+ { 0xffffff, 0xffa5a5, 0xbd5252, 0xa50000 },
+ { 0xffffff, 0xc6a5a5, 0x8c5252, 0x5a0000 },
+ { 0xffffff, 0xbdb5ad, 0x7b6b5a, 0x422108 }
+ },
+
+ {
+ /* Batman */ { 0xffffff, 0xbdada5, 0x7b5a52, 0x391000 },
+ /* Return of Joker */ { 0xffffff, 0xbdada5, 0x7b5a52, 0x391000 },
+ { 0xffffff, 0xbdada5, 0x7b5a52, 0x391000 },
+ { 0xffffff, 0xbdada5, 0x7b5a52, 0x422108 }
+ },
+
+ {
+ /* Bionic Commando */ { 0xfff7ef, 0xadb5ce, 0x2921c6, 0x000039 },
+ { 0xffffff, 0xf7ce94, 0xff3910, 0x4a0000 },
+ { 0xffffff, 0x84adff, 0x00395a, 0x000000 },
+ { 0xefefef, 0x9ca5ad, 0x5a5a6b, 0x081042 }
+ },
+
+ {
+ /* Castlevania Adventure */ { 0xe7d6d6, 0xb5a58c, 0x6b5242, 0x181000 },
+ { 0xffffff, 0xdba5a5, 0xad5252, 0x840000 },
+ { 0xffffff, 0x84e7ff, 0x4252ff, 0x00005a },
+ { 0xffffff, 0xceefff, 0x9cdef7, 0x6bb5f7 }
+ },
+
+ {
+ /* Donkey Kong Land */ { 0xd1ffe2, 0x89ffa9, 0x48a251, 0x032504 },
+ { 0xb4b4ff, 0x4747ff, 0x000080, 0x000000 },
+ { 0xb0f2ff, 0x4dc3d6, 0x115ba3, 0x00006a },
+ { 0x63fff7, 0x42cec6, 0x217b73, 0x000000 }
+ },
+
+ {
+ /* Dr. Mario */ { 0xffffff, 0x66ffff, 0xff4221, 0x521000 },
+ { 0xffffff, 0xd6aaaa, 0xad5555, 0x840000 },
+ { 0xffffff, 0x84e7ff, 0x4252ff, 0x00008c },
+ { 0xffffff, 0x8cceff, 0x5a9cf7, 0x005283 }
+ },
+
+ {
+ /* Kirby */ { 0x83ffff, 0x3ea5ff, 0x004273, 0x000933 },
+ { 0xffcccc, 0xff7877, 0xc13523, 0x5a0a05 },
+ { 0xc4bdff, 0x604df1, 0x29129f, 0x000000 },
+ { 0xffffff, 0xaaaaaa, 0x555555, 0x000020 }
+ },
+
+ {
+ /* Metroid II */ { 0xdeffef, 0xb2ada2, 0x014284, 0x000000 },
+ { 0xffcef7, 0xff6bce, 0x9c007b, 0x000000 },
+ { 0x55efff, 0x1352ff, 0x001485, 0x000000 },
+ { 0xffefef, 0xe78c5a, 0x9c4a18, 0x210000 }
+ },
+
+ {
+ /* Zelda */ { 0xa0ffff, 0x67d767, 0x20558c, 0x071546 },
+ { 0xadffff, 0xb78080, 0x592925, 0x000000 },
+ { 0x7fb0ff, 0xe78c5a, 0x9c4a18, 0x000000 },
+ { 0xefefff, 0x635aef, 0x1810ad, 0x000000 }
+ }
+ };
+
+#endif
diff --git a/apps/plugins/rockboy/palette.c b/apps/plugins/rockboy/palette.c
deleted file mode 100644
index 5c5083d247..0000000000
--- a/apps/plugins/rockboy/palette.c
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-#include "rockmacros.h"
-#include "defs.h"
-#include "fb.h"
-#include "palette.h"
-
-
-static byte palmap[32768];
-static byte pallock[256];
-static int palrev[256];
-
-/* Course color mapping, for when palette is exhausted. */
-static byte crsmap[4][32768];
-static int crsrev[4][256];
-static const int crsmask[4] = { 0x7BDE, 0x739C, 0x6318, 0x4210 };
-
-enum plstatus
-{
- pl_unused = 0,
- pl_linger,
- pl_active,
- pl_locked
-};
-
-/*
-static byte bestmatch(int c)
-{
- byte n, best;
- int r, g, b;
- int r2, g2, b2, c2;
- int err, besterr;
-
- r = (c & 0x001F) << 3;
- g = (c & 0x03E0) >> 2;
- b = (c & 0x7C00) >> 7;
-
- best = 0;
- besterr = 1024;
- for (n = 1; n; n++)
- {
- c2 = palrev[n];
- r2 = (c2 & 0x001F) << 3;
- g2 = (c2 & 0x03E0) >> 2;
- b2 = (c2 & 0x7C00) >> 7;
- err = abs(r-r2) + abs(b-b2) + abs(g-g2);
- if (err < besterr)
- {
- besterr = err;
- best = n;
- }
- }
- return best;
-}
-*/
-
-static void makecourse(int c, byte n)
-{
- int i;
- for (i = 0; i < 4; i++)
- {
- c &= crsmask[i];
- crsmap[i][c] = n;
- crsrev[i][n] = c;
- }
-}
-
-static byte findcourse(int c)
-{
- int i;
- byte n;
- for (i = 0; i < 4; i++)
- {
- c &= crsmask[i];
- n = crsmap[i][c];
- if (crsrev[i][n] == c)
- return n;
- }
- return 0;
-}
-
-
-void pal_lock(byte n)
-{
- if (!n) return;
- if (pallock[n] >= pl_locked)
- pallock[n]++;
- else pallock[n] = pl_locked;
-}
-
-byte pal_getcolor(int c, int r, int g, int b)
-{
- byte n;
- static byte l;
- n = palmap[c];
- if (n && pallock[n] && palrev[n] == c)
- {
- pal_lock(n);
- return n;
- }
- for (n = l+1; n != l; n++)
- {
- if (!n || pallock[n] /* || n < 16 */) continue;
- pal_lock(n);
- palmap[c] = n;
- palrev[n] = c;
- makecourse(c, n);
- vid_setpal(n, r, g, b);
- return (l = n);
- }
- n = findcourse(c);
- pal_lock(n);
- return n;
-}
-
-void pal_release(byte n)
-{
- if (pallock[n] >= pl_locked)
- pallock[n]--;
-}
-
-
-void pal_expire(void)
-{
- int i;
- for (i = 0; i < 256; i++)
- if (pallock[i] && pallock[i] < pl_locked)
- pallock[i]--;
-}
-
-
-void pal_set332(void)
-{
- int i, r, g, b;
-
- fb.indexed = 0;
- fb.cc[0].r = 5;
- fb.cc[1].r = 5;
- fb.cc[2].r = 6;
- fb.cc[0].l = 0;
- fb.cc[1].l = 3;
- fb.cc[2].l = 6;
-
- i = 0;
- for (b = 0; b < 4; b++) for (g = 0; g < 8; g++) for (r = 0; r < 8; r++)
- vid_setpal(i++, (r<<5)|(r<<2)|(r>>1),
- (g<<5)|(g<<2)|(g>>1), (b<<6)|(b<<4)|(b<<2)|b);
-}
-
-
-
-
-
diff --git a/apps/plugins/rockboy/palette.h b/apps/plugins/rockboy/palette.h
deleted file mode 100644
index 94f660b71e..0000000000
--- a/apps/plugins/rockboy/palette.h
+++ /dev/null
@@ -1,6 +0,0 @@
-void pal_lock(byte n) ICODE_ATTR;
-byte pal_getcolor(int c, int r, int g, int b) ICODE_ATTR;
-void pal_release(byte n) ICODE_ATTR;
-void pal_expire(void) ICODE_ATTR;
-void pal_set332(void) ICODE_ATTR;
-void vid_setpal(int i, int r, int g, int b) ICODE_ATTR;
diff --git a/apps/plugins/rockboy/pcm.h b/apps/plugins/rockboy/pcm.h
index 3719933520..a616ce9897 100644
--- a/apps/plugins/rockboy/pcm.h
+++ b/apps/plugins/rockboy/pcm.h
@@ -7,10 +7,10 @@
struct pcm
{
- int hz, len;
- int stereo;
- byte *buf;
- int pos;
+ int hz, len;
+ int stereo;
+ byte *buf;
+ int pos;
};
extern struct pcm pcm;
diff --git a/apps/plugins/rockboy/rbsound.c b/apps/plugins/rockboy/rbsound.c
index 6371212ca8..41d00c1b73 100644
--- a/apps/plugins/rockboy/rbsound.c
+++ b/apps/plugins/rockboy/rbsound.c
@@ -1,11 +1,13 @@
#include "rockmacros.h"
#include "defs.h"
#include "pcm.h"
-#include "rc.h"
-//#define ONEBUF // Note: I think the single buffer implementation is more responsive with sound(less lag)
- // but it creates more choppyness overall to the sound. 2 buffer's don't seem to make
- // a difference, but 4 buffers is definately noticable
+/*#define ONEBUF*/
+ /* Note: I think the single buffer implementation is more
+ * responsive with sound(less lag) but it creates more
+ * choppyness overall to the sound. 2 buffer's don't seem to
+ * make a difference, but 4 buffers is definately noticable
+ */
struct pcm pcm IBSS_ATTR;
@@ -17,11 +19,6 @@ bool sound = 1;
#endif
#define BUF_SIZE 1024
-rcvar_t pcm_exports[] =
-{
- RCV_END
-};
-
#if CONFIG_CODEC == SWCODEC && !defined(SIMULATOR)
#ifndef ONEBUF
@@ -48,46 +45,45 @@ void get_more(unsigned char** start, size_t* size)
void pcm_init(void)
{
- if(!sound) return;
-
- newly_started = true;
+ newly_started = true;
- pcm.hz = 11025;
- pcm.stereo = 1;
+ pcm.hz = 11025;
+ pcm.stereo = 1;
- pcm.len = BUF_SIZE;
- if(!buf){
+ pcm.len = BUF_SIZE;
+ if(!buf){
buf = my_malloc(pcm.len * N_BUFS);
- gmbuf = my_malloc(pcm.len * N_BUFS*sizeof (short));
- pcm.buf = buf;
- pcm.pos = 0;
+ gmbuf = my_malloc(pcm.len * N_BUFS*sizeof (short));
+ pcm.buf = buf;
+ pcm.pos = 0;
#ifndef ONEBUF
curbuf = gmcurbuf= 0;
#endif
memset(gmbuf, 0, pcm.len * N_BUFS *sizeof(short));
memset(buf, 0, pcm.len * N_BUFS);
- }
+ }
- rb->pcm_play_stop();
+ rb->pcm_play_stop();
- rb->pcm_set_frequency(11025); // 44100 22050 11025
+ rb->pcm_set_frequency(11025); /* 44100 22050 11025 */
}
void pcm_close(void)
{
- memset(&pcm, 0, sizeof pcm);
- newly_started = true;
- rb->pcm_play_stop();
- rb->pcm_set_frequency(44100);
+ memset(&pcm, 0, sizeof pcm);
+ newly_started = true;
+ rb->pcm_play_stop();
+ rb->pcm_set_frequency(44100);
}
int pcm_submit(void)
{
- register int i;
+ if (!options.sound) return 1;
+ register int i;
- if (!sound) {
- pcm.pos = 0;
- return 0;
+ if (!sound) {
+ pcm.pos = 0;
+ return 0;
}
if (pcm.pos < pcm.len) return 1;
@@ -98,7 +94,7 @@ int pcm_submit(void)
#endif
pcm.pos = 0;
- // gotta convert the 8 bit buffer to 16
+ /* gotta convert the 8 bit buffer to 16 */
for(i=0; i<pcm.len;i++)
#ifdef ONEBUF
gmbuf[i] = (pcm.buf[i]<<8)-0x8000;
@@ -112,7 +108,9 @@ int pcm_submit(void)
newly_started = false;
}
- // this while loop and done play are in place to make sure the sound timing is correct(although it's not)
+ /* this while loop and done play are in place to make sure the sound timing
+ * is correct(although it's not)
+ */
#ifdef ONEBUF
while(doneplay==0) rb->yield();
doneplay=0;
@@ -120,7 +118,7 @@ int pcm_submit(void)
return 1;
}
#else
-static byte buf1_unal[(BUF_SIZE / sizeof(short)) + 2]; // to make sure 4 byte aligned
+static byte buf1_unal[(BUF_SIZE / sizeof(short)) + 2]; /* 4 byte aligned */
void pcm_init(void)
{
pcm.hz = 11025;
diff --git a/apps/plugins/rockboy/rc.h b/apps/plugins/rockboy/rc.h
deleted file mode 100644
index cb65d2a7cc..0000000000
--- a/apps/plugins/rockboy/rc.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef __RC_H__
-#define __RC_H__
-
-typedef enum rctype
-{
- rcv_end,
- rcv_int,
- rcv_string,
- rcv_vector,
- rcv_bool
-} rcvtype_t;
-
-
-typedef struct rcvar_s
-{
- char *name;
- int type;
- int len;
- void *mem;
-} rcvar_t;
-
-#define RCV_END { 0, rcv_end, 0, 0 }
-#define RCV_INT(n,v) { (n), rcv_int, 1, (v) }
-#define RCV_STRING(n,v) { (n), rcv_string, 0, (v) }
-#define RCV_VECTOR(n,v,l) { (n), rcv_vector, (l), (v) }
-#define RCV_BOOL(n,v) { (n), rcv_bool, 1, (v) }
-
-typedef struct rccmd_s
-{
- char *name;
- int (*func)(int, char **);
-} rccmd_t;
-
-#define RCC(n,f) { (n), (f) }
-#define RCC_END { 0, 0 }
-
-void rc_export(rcvar_t *v);
-void rc_exportvars(rcvar_t *vars);
-
-int rc_findvar(char *name);
-
-int rc_setvar_n(int i, int c, char **v);
-int rc_setvar(char *name, int c, char **v);
-
-int rc_getint_n(int i);
-int *rc_getvec_n(int i);
-char *rc_getstr_n(int i);
-
-int rc_getint(char *name);
-int *rc_getvec(char *name);
-char *rc_getstr(char *name);
-
-int rc_bindkey(char *keyname, char *cmd);
-int rc_unbindkey(char *keyname);
-void rc_unbindall(void);
-
-int rc_sourcefile(char *filename);
-void rc_dokey(int key, int st);
-
-int rc_command(char *line);
-
-#endif
diff --git a/apps/plugins/rockboy/rccmds.c b/apps/plugins/rockboy/rccmds.c
deleted file mode 100644
index c9375b69b5..0000000000
--- a/apps/plugins/rockboy/rccmds.c
+++ /dev/null
@@ -1,122 +0,0 @@
-
-
-
-
-#include "rockmacros.h"
-
-#include "defs.h"
-#include "rc.h"
-#include "hw.h"
-#include "emu.h"
-#include "save.h"
-#include "split.h"
-
-/*
- * the set command is used to set rc-exported variables.
- */
-
-static int cmd_set(int argc, char **argv)
-{
- if (argc < 3)
- return -1;
- return rc_setvar(argv[1], argc-2, argv+2);
-}
-
-
-
-/*
- * the following commands allow keys to be bound to perform rc commands.
- */
-
-static int cmd_reset(int argc, char **argv)
-{
- (void)argc;
- (void)argv;
- emu_reset();
- return 0;
-}
-
-static int cmd_savestate(int argc, char **argv)
-{
- state_save(argc > 1 ? atoi(argv[1]) : -1);
- return 0;
-}
-
-static int cmd_loadstate(int argc, char **argv)
-{
- state_load(argc > 1 ? atoi(argv[1]) : -1);
- return 0;
-}
-
-
-
-/*
- * table of command names and the corresponding functions to be called
- */
-
-rccmd_t rccmds[] =
-{
- RCC("set", cmd_set),
- RCC("reset", cmd_reset),
- RCC("savestate", cmd_savestate),
- RCC("loadstate", cmd_loadstate),
- RCC_END
-};
-
-
-
-
-
-int rc_command(char *line)
-{
- int i, argc, ret;
- char *argv[128], linecopy[500];
-
-// linecopy = malloc(strlen(line)+1);
- strcpy(linecopy, line);
-
- argc = splitline(argv, (sizeof argv)/(sizeof argv[0]), linecopy);
- if (!argc)
- {
-// free(linecopy);
- return -1;
- }
-
- for (i = 0; rccmds[i].name; i++)
- {
- if (!strcmp(argv[0], rccmds[i].name))
- {
- ret = rccmds[i].func(argc, argv);
-// free(linecopy);
- return ret;
- }
- }
-
- /* printf("unknown command: %s\n", argv[0]); */
-// free(linecopy);
-
- return -1;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/plugins/rockboy/rcvars.c b/apps/plugins/rockboy/rcvars.c
deleted file mode 100644
index a47794aa6f..0000000000
--- a/apps/plugins/rockboy/rcvars.c
+++ /dev/null
@@ -1,211 +0,0 @@
-#include "rockmacros.h"
-
-#include "defs.h"
-#include "rc.h"
-
-static rcvar_t rcvars[150];
-
-static int nvars;
-
-void rc_export(rcvar_t *v)
-{
- const rcvar_t end = RCV_END;
-
- if (!v) return;
- nvars++;
-// rcvars = realloc(rcvars, sizeof (rcvar_t) * (nvars+1));
-// if (!rcvars)
-// die("out of memory adding rcvar %s\n", v->name);
- rcvars[nvars-1] = *v;
- rcvars[nvars] = end;
-}
-
-void rc_exportvars(rcvar_t *vars)
-{
- while(vars->type)
- rc_export(vars++);
-}
-
-
-
-int rc_findvar(char *name)
-{
- int i;
- if (!rcvars) return -1;
- for (i = 0; rcvars[i].name; i++)
- if (!strcmp(rcvars[i].name, name))
- break;
- if (!rcvars[i].name)
- return -1;
- return i;
-}
-
-
-int my_atoi(const char *s)
-{
- int a = 0;
- if (*s == '0')
- {
- s++;
- if (*s == 'x' || *s == 'X')
- {
- s++;
- while (*s)
- {
- if (isdigit(*s))
- a = (a<<4) + *s - '0';
- else if (strchr("ABCDEF", *s))
- a = (a<<4) + *s - 'A' + 10;
- else if (strchr("abcdef", *s))
- a = (a<<4) + *s - 'a' + 10;
- else return a;
- s++;
- }
- return a;
- }
- while (*s)
- {
- if (strchr("01234567", *s))
- a = (a<<3) + *s - '0';
- else return a;
- s++;
- }
- return a;
- }
- if (*s == '-')
- {
- s++;
- for (;;)
- {
- if (isdigit(*s))
- a = (a*10) + *s - '0';
- else return -a;
- s++;
- }
- }
- while (*s)
- {
- if (isdigit(*s))
- a = (a*10) + *s - '0';
- else return a;
- s++;
- }
- return a;
-}
-
-
-int rc_setvar_n(int i, int c, char **v)
-{
- int j;
- int *n;
- char **s;
-
- switch (rcvars[i].type)
- {
- case rcv_int:
- if (c < 1) return -1;
- n = (int *)rcvars[i].mem;
- *n = my_atoi(v[0]);
- return 0;
- case rcv_string:
- if (c < 1) return -1;
- s = (char **)rcvars[i].mem;
-// if (*s) free(*s);
- strcpy(*s,v[0]);
- if (!*s)
- die("out of memory setting rcvar %s\n", rcvars[i].name);
- return 0;
- case rcv_vector:
- if (c > rcvars[i].len)
- c = rcvars[i].len;
- for (j = 0; j < c ; j++)
- ((int *)rcvars[i].mem)[j] = my_atoi(v[j]);
- return 0;
- case rcv_bool:
- if (c < 1 || atoi(v[0]) || strchr("yYtT", v[0][0]))
- *(int *)rcvars[i].mem = 1;
- else if (strchr("0nNfF", v[0][0]))
- *(int *)rcvars[i].mem = 0;
- else
- return -1;
- return 0;
- }
- return -1;
-}
-
-
-int rc_setvar(char *name, int c, char **v)
-{
- int i;
-
- i = rc_findvar(name);
- if (i < 0) return i;
-
- return rc_setvar_n(i, c, v);
-}
-
-
-void *rc_getmem_n(int i)
-{
- return rcvars[i].mem;
-}
-
-
-void *rc_getmem(char *name)
-{
- int i;
- i = rc_findvar(name);
- if (i < 0) return NULL;
- return rcvars[i].mem;
-}
-
-int rc_getint_n(int i)
-{
- if (i < 0) return 0;
- switch (rcvars[i].type)
- {
- case rcv_int:
- case rcv_bool:
- return *(int *)rcvars[i].mem;
- }
- return 0;
-}
-
-int *rc_getvec_n(int i)
-{
- if (i < 0) return NULL;
- switch (rcvars[i].type)
- {
- case rcv_int:
- case rcv_bool:
- case rcv_vector:
- return (int *)rcvars[i].mem;
- }
- return NULL;
-}
-
-char *rc_getstr_n(int i)
-{
- if (i < 0) return 0;
- switch (rcvars[i].type)
- {
- case rcv_string:
- return *(char **)rcvars[i].mem;
- }
- return 0;
-}
-
-int rc_getint(char *name)
-{
- return rc_getint_n(rc_findvar(name));
-}
-
-int *rc_getvec(char *name)
-{
- return rc_getvec_n(rc_findvar(name));
-}
-
-char *rc_getstr(char *name)
-{
- return rc_getstr_n(rc_findvar(name));
-}
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index beefb210b0..01e4de51c5 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -86,7 +86,7 @@ void setoptions (void)
snprintf(optionsave, sizeof(optionsave), "%s/%s", savedir, optionname);
fd = open(optionsave, O_RDONLY);
- if(fd < 0) // no options to read, set defaults
+ if(fd < 0) /* no options to read, set defaults */
{
#if (CONFIG_KEYPAD == IRIVER_H100_PAD)
options.A=BUTTON_ON;
@@ -136,13 +136,31 @@ void setoptions (void)
options.START=BUTTON_SCROLL_UP;
options.SELECT=BUTTON_SCROLL_DOWN;
options.MENU=BUTTON_POWER;
+#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
+ options.A=BUTTON_PLAY;
+ options.B=BUTTON_REC;
+ options.START=BUTTON_SELECT;
+ options.SELECT=BUTTON_NONE;
+ options.MENU=BUTTON_POWER;
+
+#elif CONFIG_KEYPAD == IRIVER_H10_PAD
+ options.A=BUTTON_PLAY;
+ options.B=BUTTON_FF;
+ options.START=BUTTON_REW;
+ options.SELECT=BUTTON_NONE;
+ options.MENU=BUTTON_POWER;
#endif
options.maxskip=4;
options.fps=0;
options.showstats=0;
+#if (LCD_WIDTH>=160) && (LCD_HEIGHT>=144)
options.fullscreen=0;
+#else
+ options.fullscreen=1;
+#endif
options.sound=1;
+ options.pal=0;
}
else
read(fd,&options, sizeof(options));
@@ -197,9 +215,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
rb->wheel_send_events(false);
#endif
- /* now go ahead and have fun! */
- /* rb->splash(HZ*2, true, "Rockboy v0.3"); */
- /* rb->lcd_clear_display(); */
gnuboy_main(parameter);
#ifdef HAVE_WHEEL_POSITION
diff --git a/apps/plugins/rockboy/rockmacros.h b/apps/plugins/rockboy/rockmacros.h
index 3bfcf94728..06db25b433 100644
--- a/apps/plugins/rockboy/rockmacros.h
+++ b/apps/plugins/rockboy/rockmacros.h
@@ -28,24 +28,30 @@ void *my_malloc(size_t size);
extern struct plugin_api* rb;
extern int shut,cleanshut;
-void vid_update(int scanline);
void vid_init(void);
inline void vid_begin(void);
-void vid_end(void);
void die(char *message, ...);
void setmallocpos(void *pointer);
-void vid_settitle(char *title);
void *sys_timer(void);
int sys_elapsed(long *oldtick);
-void sys_sleep(int us);
int pcm_submit(void);
void pcm_init(void);
+void sound_dirty(void);
void doevents(void) ICODE_ATTR;
void ev_poll(void);
int do_user_menu(void);
void loadstate(int fd);
void savestate(int fd);
void setvidmode(int mode);
+void set_pal(void);
+#if !defined(HAVE_LCD_COLOR)
+void vid_update(int scanline);
+#endif
+#ifdef DYNAREC
+extern struct dynarec_block newblock;
+void dynamic_recompile (struct dynarec_block *newblock);
+#endif
+
#define USER_MENU_QUIT -2
/* Disable ICODE for the ARMs */
@@ -54,6 +60,12 @@ void setvidmode(int mode);
#define ICODE_ATTR
#endif
+/* Disable IBSS when using dynarec since it won't fit */
+#ifdef DYNAREC
+#undef IBSS_ATTR
+#define IBSS_ATTR
+#endif
+
/* libc functions */
#define isdigit(c) ((c) >= '0' && (c) <= '9')
#define isalpha(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && ((c) <= 'Z')))
@@ -101,12 +113,13 @@ void setvidmode(int mode);
#define tolower(_A_) (isupper(_A_) ? (_A_ - 'A' + 'a') : _A_)
/* Using #define isn't enough with GCC 4.0.1 */
-void* memcpy(void* dst, const void* src, size_t size);
+void* memcpy(void* dst, const void* src, size_t size) ICODE_ATTR;
struct options {
int A, B, START, SELECT, MENU;
int frameskip, fps, maxskip;
int sound, fullscreen, showstats;
+ int pal;
};
extern struct options options;
diff --git a/apps/plugins/rockboy/rtc-gb.h b/apps/plugins/rockboy/rtc-gb.h
index 39c6145161..94772da923 100644
--- a/apps/plugins/rockboy/rtc-gb.h
+++ b/apps/plugins/rockboy/rtc-gb.h
@@ -6,12 +6,12 @@
struct rtc
{
- int batt;
- int sel;
- int latch;
- int d, h, m, s, t;
- int stop, carry;
- byte regs[8];
+ int batt;
+ int sel;
+ int latch;
+ int d, h, m, s, t;
+ int stop, carry;
+ byte regs[8];
};
extern struct rtc rtc;
@@ -21,5 +21,5 @@ void rtc_write(byte b);
void rtc_tick(void);
void rtc_save_internal(int fd);
void rtc_load_internal(int fd);
-
+
#endif
diff --git a/apps/plugins/rockboy/rtc.c b/apps/plugins/rockboy/rtc.c
index 05ad69864a..0b011a828c 100644
--- a/apps/plugins/rockboy/rtc.c
+++ b/apps/plugins/rockboy/rtc.c
@@ -7,119 +7,109 @@
#include "defs.h"
#include "mem.h"
#include "rtc-gb.h"
-#include "rc.h"
-
-struct rtc rtc IBSS_ATTR;
-
-static int syncrtc = 1;
-
-rcvar_t rtc_exports[] =
-{
- RCV_BOOL("syncrtc", &syncrtc),
- RCV_END
-};
+struct rtc rtc;
void rtc_latch(byte b)
{
- if ((rtc.latch ^ b) & b & 1)
- {
- rtc.regs[0] = rtc.s;
- rtc.regs[1] = rtc.m;
- rtc.regs[2] = rtc.h;
- rtc.regs[3] = rtc.d;
- rtc.regs[4] = (rtc.d>>9) | (rtc.stop<<6) | (rtc.carry<<7);
- rtc.regs[5] = 0xff;
- rtc.regs[6] = 0xff;
- rtc.regs[7] = 0xff;
- }
- rtc.latch = b;
+ if ((rtc.latch ^ b) & b & 1)
+ {
+ rtc.regs[0] = rtc.s;
+ rtc.regs[1] = rtc.m;
+ rtc.regs[2] = rtc.h;
+ rtc.regs[3] = rtc.d;
+ rtc.regs[4] = (rtc.d>>9) | (rtc.stop<<6) | (rtc.carry<<7);
+ rtc.regs[5] = 0xff;
+ rtc.regs[6] = 0xff;
+ rtc.regs[7] = 0xff;
+ }
+ rtc.latch = b;
}
void rtc_write(byte b)
{
- /* printf("write %02X: %02X (%d)\n", rtc.sel, b, b); */
- if (!(rtc.sel & 8)) return;
- switch (rtc.sel & 7)
- {
- case 0:
- rtc.s = rtc.regs[0] = b;
- while (rtc.s >= 60) rtc.s -= 60;
- break;
- case 1:
- rtc.m = rtc.regs[1] = b;
- while (rtc.m >= 60) rtc.m -= 60;
- break;
- case 2:
- rtc.h = rtc.regs[2] = b;
- while (rtc.h >= 24) rtc.h -= 24;
- break;
- case 3:
- rtc.regs[3] = b;
- rtc.d = (rtc.d & 0x100) | b;
- break;
- case 4:
- rtc.regs[4] = b;
- rtc.d = (rtc.d & 0xff) | ((b&1)<<9);
- rtc.stop = (b>>6)&1;
- rtc.carry = (b>>7)&1;
- break;
- }
+ /* printf("write %02X: %02X (%d)\n", rtc.sel, b, b); */
+ if (!(rtc.sel & 8)) return;
+ switch (rtc.sel & 7)
+ {
+ case 0:
+ rtc.s = rtc.regs[0] = b;
+ while (rtc.s >= 60) rtc.s -= 60;
+ break;
+ case 1:
+ rtc.m = rtc.regs[1] = b;
+ while (rtc.m >= 60) rtc.m -= 60;
+ break;
+ case 2:
+ rtc.h = rtc.regs[2] = b;
+ while (rtc.h >= 24) rtc.h -= 24;
+ break;
+ case 3:
+ rtc.regs[3] = b;
+ rtc.d = (rtc.d & 0x100) | b;
+ break;
+ case 4:
+ rtc.regs[4] = b;
+ rtc.d = (rtc.d & 0xff) | ((b&1)<<9);
+ rtc.stop = (b>>6)&1;
+ rtc.carry = (b>>7)&1;
+ break;
+ }
}
void rtc_tick()
{
- if (rtc.stop) return;
- if (++rtc.t == 60)
- {
- if (++rtc.s == 60)
- {
- if (++rtc.m == 60)
- {
- if (++rtc.h == 24)
- {
- if (++rtc.d == 365)
- {
- rtc.d = 0;
- rtc.carry = 1;
- }
- rtc.h = 0;
- }
- rtc.m = 0;
- }
- rtc.s = 0;
- }
- rtc.t = 0;
- }
+ if (rtc.stop) return;
+ if (++rtc.t == 60)
+ {
+ if (++rtc.s == 60)
+ {
+ if (++rtc.m == 60)
+ {
+ if (++rtc.h == 24)
+ {
+ if (++rtc.d == 365)
+ {
+ rtc.d = 0;
+ rtc.carry = 1;
+ }
+ rtc.h = 0;
+ }
+ rtc.m = 0;
+ }
+ rtc.s = 0;
+ }
+ rtc.t = 0;
+ }
}
void rtc_save_internal(int fd)
{
- (void)fd; // stop compiler complaining
- // TODO
-// fprintf(f, "%d %d %d %02d %02d %02d %02d\n%d\n",
-// rtc.carry, rtc.stop, rtc.d, rtc.h, rtc.m, rtc.s, rtc.t,
-// time(0));
+ (void)fd; /* stop compiler complaining */
+ /* TODO */
+ /* fprintf(f, "%d %d %d %02d %02d %02d %02d\n%d\n",
+ rtc.carry, rtc.stop, rtc.d, rtc.h, rtc.m, rtc.s, rtc.t,
+ time(0)); */
}
void rtc_load_internal(int fd)
{
- //int rt = 0;
- (void)fd; // stop compiler complaining
- // TODO
-/* fscanf(
- f, "%d %d %d %02d %02d %02d %02d\n%d\n",
- &rtc.carry, &rtc.stop, &rtc.d,
- &rtc.h, &rtc.m, &rtc.s, &rtc.t, &rt);
- while (rtc.t >= 60) rtc.t -= 60;
- while (rtc.s >= 60) rtc.s -= 60;
- while (rtc.m >= 60) rtc.m -= 60;
- while (rtc.h >= 24) rtc.h -= 24;
- while (rtc.d >= 365) rtc.d -= 365;
- rtc.stop &= 1;
- rtc.carry &= 1;
- if (rt) rt = (time(0) - rt) * 60;
- if (syncrtc) while (rt-- > 0) rtc_tick(); */
+ /* int rt = 0; */
+ (void)fd; /* stop compiler complaining */
+ /* TODO */
+ /* fscanf(
+ f, "%d %d %d %02d %02d %02d %02d\n%d\n",
+ &rtc.carry, &rtc.stop, &rtc.d,
+ &rtc.h, &rtc.m, &rtc.s, &rtc.t, &rt);
+ while (rtc.t >= 60) rtc.t -= 60;
+ while (rtc.s >= 60) rtc.s -= 60;
+ while (rtc.m >= 60) rtc.m -= 60;
+ while (rtc.h >= 24) rtc.h -= 24;
+ while (rtc.d >= 365) rtc.d -= 365;
+ rtc.stop &= 1;
+ rtc.carry &= 1;
+ if (rt) rt = (time(0) - rt) * 60;
+ if (syncrtc) while (rt-- > 0) rtc_tick(); */
}
diff --git a/apps/plugins/rockboy/save.c b/apps/plugins/rockboy/save.c
index 0277eb53d1..2332811911 100644
--- a/apps/plugins/rockboy/save.c
+++ b/apps/plugins/rockboy/save.c
@@ -30,9 +30,9 @@
struct svar
{
- int len;
- char key[4];
- void *ptr;
+ int len;
+ char key[4];
+ void *ptr;
};
static int ver;
@@ -41,247 +41,243 @@ static int hramofs, hiofs, palofs, oamofs, wavofs;
struct svar svars[] =
{
- I4("GbSs", &ver),
-
- I2("PC ", &PC),
- I2("SP ", &SP),
- I2("HL ", &HL),
+ I4("GbSs", &ver),
+
+ I2("PC ", &PC),
+ I2("SP ", &SP),
+ I2("HL ", &HL),
#ifdef DYNAREC
- I1("A ", &A),
- I1("B ", &A),
- I1("C ", &A),
- I1("D ", &A),
- I1("E ", &A),
- I1("F ", &A),
+ I1("A ", &A),
+ I1("B ", &A),
+ I1("C ", &A),
+ I1("D ", &A),
+ I1("E ", &A),
+ I1("F ", &A),
#else
- I2("BC ", &BC),
- I2("DE ", &DE),
- I2("AF ", &AF),
-#endif
- I4("IME ", &cpu.ime),
- I4("ima ", &cpu.ima),
- I4("spd ", &cpu.speed),
- I4("halt", &cpu.halt),
- I4("div ", &cpu.div),
- I4("tim ", &cpu.tim),
- I4("lcdc", &cpu.lcdc),
- I4("snd ", &cpu.snd),
-
- I1("ints", &hw.ilines),
- I1("pad ", &hw.pad),
- I4("cgb ", &hw.cgb),
- I4("gba ", &hw.gba),
-
- I4("mbcm", &mbc.model),
- I4("romb", &mbc.rombank),
- I4("ramb", &mbc.rambank),
- I4("enab", &mbc.enableram),
- I4("batt", &mbc.batt),
-
- I4("rtcR", &rtc.sel),
- I4("rtcL", &rtc.latch),
- I4("rtcC", &rtc.carry),
- I4("rtcS", &rtc.stop),
- I4("rtcd", &rtc.d),
- I4("rtch", &rtc.h),
- I4("rtcm", &rtc.m),
- I4("rtcs", &rtc.s),
- I4("rtct", &rtc.t),
- I1("rtR8", &rtc.regs[0]),
- I1("rtR9", &rtc.regs[1]),
- I1("rtRA", &rtc.regs[2]),
- I1("rtRB", &rtc.regs[3]),
- I1("rtRC", &rtc.regs[4]),
-
- I4("S1on", &snd.ch[0].on),
- I4("S1p ", &snd.ch[0].pos),
- I4("S1c ", &snd.ch[0].cnt),
- I4("S1ec", &snd.ch[0].encnt),
- I4("S1sc", &snd.ch[0].swcnt),
- I4("S1sf", &snd.ch[0].swfreq),
-
- I4("S2on", &snd.ch[1].on),
- I4("S2p ", &snd.ch[1].pos),
- I4("S2c ", &snd.ch[1].cnt),
- I4("S2ec", &snd.ch[1].encnt),
-
- I4("S3on", &snd.ch[2].on),
- I4("S3p ", &snd.ch[2].pos),
- I4("S3c ", &snd.ch[2].cnt),
-
- I4("S4on", &snd.ch[3].on),
- I4("S4p ", &snd.ch[3].pos),
- I4("S4c ", &snd.ch[3].cnt),
- I4("S4ec", &snd.ch[3].encnt),
-
- I4("hdma", &hw.hdma),
-
- I4("sram", &sramblock),
- I4("iram", &iramblock),
- I4("vram", &vramblock),
- I4("hi ", &hiofs),
- I4("pal ", &palofs),
- I4("oam ", &oamofs),
- I4("wav ", &wavofs),
-
- /* NOSAVE is a special code to prevent the rest of the table
- * from being saved, used to support old stuff for backwards
- * compatibility... */
- NOSAVE,
-
- /* the following are obsolete as of 0x104 */
-
- I4("hram", &hramofs),
-
- R(P1), R(SB), R(SC),
- R(DIV), R(TIMA), R(TMA), R(TAC),
- R(IE), R(IF),
- R(LCDC), R(STAT), R(LY), R(LYC),
- R(SCX), R(SCY), R(WX), R(WY),
- R(BGP), R(OBP0), R(OBP1),
- R(DMA),
-
- R(VBK), R(SVBK), R(KEY1),
- R(BCPS), R(BCPD), R(OCPS), R(OCPD),
-
- R(NR10), R(NR11), R(NR12), R(NR13), R(NR14),
- R(NR21), R(NR22), R(NR23), R(NR24),
- R(NR30), R(NR31), R(NR32), R(NR33), R(NR34),
- R(NR41), R(NR42), R(NR43), R(NR44),
- R(NR50), R(NR51), R(NR52),
-
- I1("DMA1", &R_HDMA1),
- I1("DMA2", &R_HDMA2),
- I1("DMA3", &R_HDMA3),
- I1("DMA4", &R_HDMA4),
- I1("DMA5", &R_HDMA5),
-
- END
+ I2("BC ", &BC),
+ I2("DE ", &DE),
+ I2("AF ", &AF),
+#endif
+ I4("IME ", &cpu.ime),
+ I4("ima ", &cpu.ima),
+ I4("spd ", &cpu.speed),
+ I4("halt", &cpu.halt),
+ I4("div ", &cpu.div),
+ I4("tim ", &cpu.tim),
+ I4("lcdc", &cpu.lcdc),
+ I4("snd ", &cpu.snd),
+
+ I1("ints", &hw.ilines),
+ I1("pad ", &hw.pad),
+ I4("cgb ", &hw.cgb),
+
+ I4("mbcm", &mbc.model),
+ I4("romb", &mbc.rombank),
+ I4("ramb", &mbc.rambank),
+ I4("enab", &mbc.enableram),
+ I4("batt", &mbc.batt),
+
+ I4("rtcR", &rtc.sel),
+ I4("rtcL", &rtc.latch),
+ I4("rtcC", &rtc.carry),
+ I4("rtcS", &rtc.stop),
+ I4("rtcd", &rtc.d),
+ I4("rtch", &rtc.h),
+ I4("rtcm", &rtc.m),
+ I4("rtcs", &rtc.s),
+ I4("rtct", &rtc.t),
+ I1("rtR8", &rtc.regs[0]),
+ I1("rtR9", &rtc.regs[1]),
+ I1("rtRA", &rtc.regs[2]),
+ I1("rtRB", &rtc.regs[3]),
+ I1("rtRC", &rtc.regs[4]),
+
+ I4("S1on", &snd.ch[0].on),
+ I4("S1p ", &snd.ch[0].pos),
+ I4("S1c ", &snd.ch[0].cnt),
+ I4("S1ec", &snd.ch[0].encnt),
+ I4("S1sc", &snd.ch[0].swcnt),
+
+ I4("S2on", &snd.ch[1].on),
+ I4("S2p ", &snd.ch[1].pos),
+ I4("S2c ", &snd.ch[1].cnt),
+ I4("S2ec", &snd.ch[1].encnt),
+
+ I4("S3on", &snd.ch[2].on),
+ I4("S3p ", &snd.ch[2].pos),
+ I4("S3c ", &snd.ch[2].cnt),
+
+ I4("S4on", &snd.ch[3].on),
+ I4("S4p ", &snd.ch[3].pos),
+ I4("S4c ", &snd.ch[3].cnt),
+ I4("S4ec", &snd.ch[3].encnt),
+
+ I4("hdma", &hw.hdma),
+
+ I4("sram", &sramblock),
+ I4("iram", &iramblock),
+ I4("vram", &vramblock),
+ I4("hi ", &hiofs),
+ I4("pal ", &palofs),
+ I4("oam ", &oamofs),
+
+ /* NOSAVE is a special code to prevent the rest of the table
+ * from being saved, used to support old stuff for backwards
+ * compatibility... */
+ NOSAVE,
+
+ /* the following are obsolete as of 0x104 */
+
+ I4("hram", &hramofs),
+ /* I4("gba ", &hw.gba), */
+ /* I4("S1sf", &snd.ch[0].swfreq), */
+ I4("wav ", &wavofs),
+
+ R(P1), R(SB), R(SC),
+ R(DIV), R(TIMA), R(TMA), R(TAC),
+ R(IE), R(IF),
+ R(LCDC), R(STAT), R(LY), R(LYC),
+ R(SCX), R(SCY), R(WX), R(WY),
+ R(BGP), R(OBP0), R(OBP1),
+ R(DMA),
+
+ R(VBK), R(SVBK), R(KEY1),
+ R(BCPS), R(BCPD), R(OCPS), R(OCPD),
+
+ R(NR10), R(NR11), R(NR12), R(NR13), R(NR14),
+ R(NR21), R(NR22), R(NR23), R(NR24),
+ R(NR30), R(NR31), R(NR32), R(NR33), R(NR34),
+ R(NR41), R(NR42), R(NR43), R(NR44),
+ R(NR50), R(NR51), R(NR52),
+
+ I1("DMA1", &R_HDMA1),
+ I1("DMA2", &R_HDMA2),
+ I1("DMA3", &R_HDMA3),
+ I1("DMA4", &R_HDMA4),
+ I1("DMA5", &R_HDMA5),
+
+ END
};
void loadstate(int fd)
{
- int i, j;
- byte buf[4096];
- un32 (*header)[2] = (un32 (*)[2])buf;
- un32 d;
- int irl = hw.cgb ? 8 : 2;
- int vrl = hw.cgb ? 4 : 2;
- int srl = mbc.ramsize << 1;
- size_t base_offset;
-
- ver = hramofs = hiofs = palofs = oamofs = wavofs = 0;
-
- base_offset = lseek(fd, 0, SEEK_CUR);
+ int i, j;
+ byte buf[4096];
+ un32 (*header)[2] = (un32 (*)[2])buf;
+ un32 d;
+ int irl = hw.cgb ? 8 : 2;
+ int vrl = hw.cgb ? 4 : 2;
+ int srl = mbc.ramsize << 1;
+ size_t base_offset;
+
+ ver = hramofs = hiofs = palofs = oamofs = wavofs = 0;
+
+ base_offset = lseek(fd, 0, SEEK_CUR);
- read(fd,buf, 4096);
-
- for (j = 0; header[j][0]; j++)
- {
- for (i = 0; svars[i].ptr; i++)
- {
- if (header[j][0] != *(un32 *)svars[i].key)
- continue;
- d = LIL(header[j][1]);
- switch (svars[i].len)
- {
- case 1:
- *(byte *)svars[i].ptr = d;
- break;
- case 2:
- *(un16 *)svars[i].ptr = d;
- break;
- case 4:
- *(un32 *)svars[i].ptr = d;
- break;
- }
- break;
- }
- }
-
- /* obsolete as of version 0x104 */
- if (hramofs) memcpy(ram.hi+128, buf+hramofs, 127);
-
- if (hiofs) memcpy(ram.hi, buf+hiofs, sizeof ram.hi);
- if (palofs) memcpy(lcd.pal, buf+palofs, sizeof lcd.pal);
- if (oamofs) memcpy(lcd.oam.mem, buf+oamofs, sizeof lcd.oam);
-
- if (wavofs) memcpy(snd.wave, buf+wavofs, sizeof snd.wave);
- else memcpy(snd.wave, ram.hi+0x30, 16); /* patch data from older files */
-
- lseek(fd, base_offset + (iramblock << 12), SEEK_SET);
- read(fd,ram.ibank, 4096*irl);
-
- lseek(fd, base_offset + (vramblock << 12), SEEK_SET);
- read(fd,lcd.vbank, 4096*vrl);
-
- lseek(fd, base_offset + (sramblock << 12), SEEK_SET);
- read(fd,ram.sbank, 4096*srl);
- vram_dirty();
- pal_dirty();
- sound_dirty();
- mem_updatemap();
+ read(fd,buf, 4096);
+
+ for (j = 0; header[j][0]; j++)
+ {
+ for (i = 0; svars[i].ptr; i++)
+ {
+ if (header[j][0] != *(un32 *)svars[i].key)
+ continue;
+ d = LIL(header[j][1]);
+ switch (svars[i].len)
+ {
+ case 1:
+ *(byte *)svars[i].ptr = d;
+ break;
+ case 2:
+ *(un16 *)svars[i].ptr = d;
+ break;
+ case 4:
+ *(un32 *)svars[i].ptr = d;
+ break;
+ }
+ break;
+ }
+ }
+
+ /* obsolete as of version 0x104 */
+ if (hramofs) memcpy(ram.hi+128, buf+hramofs, 127);
+ if (wavofs) memcpy(ram.hi+48, buf+wavofs, 16);
+
+ if (hiofs) memcpy(ram.hi, buf+hiofs, sizeof ram.hi);
+ if (palofs) memcpy(lcd.pal, buf+palofs, sizeof lcd.pal);
+ if (oamofs) memcpy(lcd.oam.mem, buf+oamofs, sizeof lcd.oam);
+
+ lseek(fd, base_offset + (iramblock << 12), SEEK_SET);
+ read(fd,ram.ibank, 4096*irl);
+
+ lseek(fd, base_offset + (vramblock << 12), SEEK_SET);
+ read(fd,lcd.vbank, 4096*vrl);
+
+ lseek(fd, base_offset + (sramblock << 12), SEEK_SET);
+ read(fd,ram.sbank, 4096*srl);
+ vram_dirty();
+ pal_dirty();
+ sound_dirty();
+ mem_updatemap();
}
void savestate(int fd)
{
- int i;
- byte buf[4096];
- un32 (*header)[2] = (un32 (*)[2])buf;
- un32 d = 0;
- int irl = hw.cgb ? 8 : 2;
- int vrl = hw.cgb ? 4 : 2;
- int srl = mbc.ramsize << 1;
- size_t base_offset;
-
- ver = 0x105;
- iramblock = 1;
- vramblock = 1+irl;
- sramblock = 1+irl+vrl;
- wavofs = 4096 - 784;
- hiofs = 4096 - 768;
- palofs = 4096 - 512;
- oamofs = 4096 - 256;
- memset(buf, 0, sizeof buf);
-
- for (i = 0; svars[i].len > 0; i++)
- {
- header[i][0] = *(un32 *)svars[i].key;
- switch (svars[i].len)
- {
- case 1:
- d = *(byte *)svars[i].ptr;
- break;
- case 2:
- d = *(un16 *)svars[i].ptr;
- break;
- case 4:
- d = *(un32 *)svars[i].ptr;
- break;
- }
- header[i][1] = LIL(d);
- }
- header[i][0] = header[i][1] = 0;
-
- memcpy(buf+hiofs, ram.hi, sizeof ram.hi);
- memcpy(buf+palofs, lcd.pal, sizeof lcd.pal);
- memcpy(buf+oamofs, lcd.oam.mem, sizeof lcd.oam);
- memcpy(buf+wavofs, snd.wave, sizeof snd.wave);
-
- /* calculate base offset for output file */
- /* (we'll seek relative to that from now on) */
- base_offset = lseek(fd, 0, SEEK_CUR);
- write(fd,buf, 4096);
-
- lseek(fd, base_offset + (iramblock << 12), SEEK_SET);
- write(fd,ram.ibank, 4096*irl);
-
- lseek(fd, base_offset + (vramblock << 12), SEEK_SET);
- write(fd,lcd.vbank, 4096*vrl);
-
- lseek(fd, base_offset + (sramblock << 12), SEEK_SET);
- write(fd,ram.sbank, 4096*srl);
+ int i;
+ byte buf[4096];
+ un32 (*header)[2] = (un32 (*)[2])buf;
+ un32 d = 0;
+ int irl = hw.cgb ? 8 : 2;
+ int vrl = hw.cgb ? 4 : 2;
+ int srl = mbc.ramsize << 1;
+ size_t base_offset;
+
+ ver = 0x104;
+ iramblock = 1;
+ vramblock = 1+irl;
+ sramblock = 1+irl+vrl;
+ hiofs = 4096 - 768;
+ palofs = 4096 - 512;
+ oamofs = 4096 - 256;
+ memset(buf, 0, sizeof buf);
+
+ for (i = 0; svars[i].len > 0; i++)
+ {
+ header[i][0] = *(un32 *)svars[i].key;
+ switch (svars[i].len)
+ {
+ case 1:
+ d = *(byte *)svars[i].ptr;
+ break;
+ case 2:
+ d = *(un16 *)svars[i].ptr;
+ break;
+ case 4:
+ d = *(un32 *)svars[i].ptr;
+ break;
+ }
+ header[i][1] = LIL(d);
+ }
+ header[i][0] = header[i][1] = 0;
+
+ memcpy(buf+hiofs, ram.hi, sizeof ram.hi);
+ memcpy(buf+palofs, lcd.pal, sizeof lcd.pal);
+ memcpy(buf+oamofs, lcd.oam.mem, sizeof lcd.oam);
+
+ /* calculate base offset for output file */
+ /* (we'll seek relative to that from now on) */
+ base_offset = lseek(fd, 0, SEEK_CUR);
+ write(fd,buf, 4096);
+
+ lseek(fd, base_offset + (iramblock << 12), SEEK_SET);
+ write(fd,ram.ibank, 4096*irl);
+
+ lseek(fd, base_offset + (vramblock << 12), SEEK_SET);
+ write(fd,lcd.vbank, 4096*vrl);
+
+ lseek(fd, base_offset + (sramblock << 12), SEEK_SET);
+ write(fd,ram.sbank, 4096*srl);
}
diff --git a/apps/plugins/rockboy/sound.c b/apps/plugins/rockboy/sound.c
index deeacc7bbf..707bb6b956 100644
--- a/apps/plugins/rockboy/sound.c
+++ b/apps/plugins/rockboy/sound.c
@@ -8,63 +8,38 @@
#include "cpu-gb.h"
#include "hw.h"
#include "regs.h"
-#include "rc.h"
#include "noise.h"
-static const byte dmgwave[16] =
- {
- 0xac, 0xdd, 0xda, 0x48,
- 0x36, 0x02, 0xcf, 0x16,
- 0x2c, 0x04, 0xe5, 0x2c,
- 0xac, 0xdd, 0xda, 0x48
- };
-
-static const byte cgbwave[16] =
- {
- 0x00, 0xff, 0x00, 0xff,
- 0x00, 0xff, 0x00, 0xff,
- 0x00, 0xff, 0x00, 0xff,
- 0x00, 0xff, 0x00, 0xff,
- };
-
-
static const byte sqwave[4][8] =
{
{ 0, 0,-1, 0, 0, 0, 0, 0 },
{ 0,-1,-1, 0, 0, 0, 0, 0 },
- { -1,-1,-1,-1, 0, 0, 0, 0 },
+ { 0,-1,-1,-1,-1, 0, 0, 0 },
{ -1, 0, 0,-1,-1,-1,-1,-1 }
};
static const int freqtab[8] =
{
- (1<<14)*2,
- (1<<14),
- (1<<14)/2,
- (1<<14)/3,
- (1<<14)/4,
- (1<<14)/5,
- (1<<14)/6,
- (1<<14)/7
+ (1<<18)*2,
+ (1<<18),
+ (1<<18)/2,
+ (1<<18)/3,
+ (1<<18)/4,
+ (1<<18)/5,
+ (1<<18)/6,
+ (1<<18)/7
};
struct snd snd IBSS_ATTR;
-int pcm_submit(void);
#define RATE (snd.rate)
-#define WAVE (snd.wave) /* ram.hi+0x30 */
+#define WAVE (ram.hi+0x30)
#define S1 (snd.ch[0])
#define S2 (snd.ch[1])
#define S3 (snd.ch[2])
#define S4 (snd.ch[3])
-rcvar_t sound_exports[] =
-{
- RCV_END
-};
-
-
static void s1_freq_d(int d)
{
if (RATE > (d<<4)) S1.freq = 0;
@@ -86,14 +61,13 @@ static void s2_freq(void)
static void s3_freq(void)
{
int d = 2048 - (((R_NR34&7)<<8) + R_NR33);
- if (RATE > (d<<3)) S3.freq = 0;
+ if (RATE > d) S3.freq = 0;
else S3.freq = (RATE << 21)/d;
}
static void s4_freq(void)
{
S4.freq = (freqtab[R_NR43&7] >> (R_NR43 >> 4)) * RATE;
- if (S4.freq >> 18) S4.freq = 1<<18;
}
void sound_dirty(void)
@@ -103,13 +77,13 @@ void sound_dirty(void)
S1.envol = R_NR12 >> 4;
S1.endir = (R_NR12>>3) & 1;
S1.endir |= S1.endir - 1;
- S1.enlen = (R_NR12 & 7) << 15;
+ S1.enlen = (R_NR12 & 3) << 15;
s1_freq();
S2.len = (64-(R_NR21&63)) << 13;
S2.envol = R_NR22 >> 4;
S2.endir = (R_NR22>>3) & 1;
S2.endir |= S2.endir - 1;
- S2.enlen = (R_NR22 & 7) << 15;
+ S2.enlen = (R_NR22 & 3) << 15;
s2_freq();
S3.len = (256-R_NR31) << 20;
s3_freq();
@@ -117,16 +91,16 @@ void sound_dirty(void)
S4.envol = R_NR42 >> 4;
S4.endir = (R_NR42>>3) & 1;
S4.endir |= S4.endir - 1;
- S4.enlen = (R_NR42 & 7) << 15;
+ S4.enlen = (R_NR42 & 3) << 15;
s4_freq();
}
-void sound_off(void)
+void sound_reset(void)
{
- memset(&S1, 0, sizeof S1);
- memset(&S2, 0, sizeof S2);
- memset(&S3, 0, sizeof S3);
- memset(&S4, 0, sizeof S4);
+ int i;
+ memset(&snd, 0, sizeof snd);
+ if (pcm.hz) snd.rate = (1<<21) / pcm.hz;
+ else snd.rate = 0;
R_NR10 = 0x80;
R_NR11 = 0xBF;
R_NR12 = 0xF3;
@@ -137,7 +111,7 @@ void sound_off(void)
R_NR30 = 0x7F;
R_NR31 = 0xFF;
R_NR32 = 0x9F;
- R_NR33 = 0xBF;
+ R_NR34 = 0xBF;
R_NR41 = 0xFF;
R_NR42 = 0x00;
R_NR43 = 0x00;
@@ -145,23 +119,13 @@ void sound_off(void)
R_NR50 = 0x77;
R_NR51 = 0xF3;
R_NR52 = 0xF1;
+ for (i = 0; i < 16; i++) WAVE[i] = -(i&1);
sound_dirty();
}
-void sound_reset(void)
-{
- memset(&snd, 0, sizeof snd);
- if (pcm.hz) snd.rate = (1<<21) / pcm.hz;
- else snd.rate = 0;
- memcpy(WAVE, hw.cgb ? cgbwave : dmgwave, 16);
- memcpy(ram.hi+0x30, WAVE, 16);
- sound_off();
-}
-
void sound_mix(void)
{
-
- if (!options.sound) return;
+ if(!options.sound) return;
int s, l, r, f, n;
if (!RATE || cpu.snd < RATE) return;
@@ -185,8 +149,7 @@ void sound_mix(void)
}
if (S1.swlen && (S1.swcnt += RATE) >= S1.swlen)
{
- S1.swcnt -= S1.swlen;
- f = S1.swfreq;
+ f = ((R_NR14 & 7) << 8) + R_NR13;
n = (R_NR10 & 7);
if (R_NR10 & 8) f -= (f >> n);
else f += (f >> n);
@@ -194,15 +157,14 @@ void sound_mix(void)
S1.on = 0;
else
{
- S1.swfreq = f;
R_NR13 = f;
R_NR14 = (R_NR14 & 0xF8) | (f>>8);
s1_freq_d(2048 - f);
}
}
s <<= 2;
- if (R_NR51 & 1) r += s;
- if (R_NR51 & 16) l += s;
+ if (R_NR51 & 1) l += s;
+ if (R_NR51 & 16) r += s;
}
if (S2.on)
@@ -219,8 +181,8 @@ void sound_mix(void)
if (S2.envol > 15) S2.envol = 15;
}
s <<= 2;
- if (R_NR51 & 2) r += s;
- if (R_NR51 & 32) l += s;
+ if (R_NR51 & 2) l += s;
+ if (R_NR51 & 32) r += s;
}
if (S3.on)
@@ -234,16 +196,16 @@ void sound_mix(void)
S3.on = 0;
if (R_NR32 & 96) s <<= (3 - ((R_NR32>>5)&3));
else s = 0;
- if (R_NR51 & 4) r += s;
- if (R_NR51 & 64) l += s;
+ if (R_NR51 & 4) l += s;
+ if (R_NR51 & 64) r += s;
}
if (S4.on)
{
if (R_NR43 & 8) s = 1 & (noise7[
- (S4.pos>>20)&15] >> (7-((S4.pos>>17)&7)));
+ (S4.pos>>24)&15] >> ((S4.pos>>21)&7));
else s = 1 & (noise15[
- (S4.pos>>20)&4095] >> (7-((S4.pos>>17)&7)));
+ (S4.pos>>24)&4095] >> ((S4.pos>>21)&7));
s = (-s) & S4.envol;
S4.pos += S4.freq;
if ((R_NR44 & 64) && ((S4.cnt += RATE) >= S4.len))
@@ -255,9 +217,9 @@ void sound_mix(void)
if (S4.envol < 0) S4.envol = 0;
if (S4.envol > 15) S4.envol = 15;
}
- s += s << 1;
- if (R_NR51 & 8) r += s;
- if (R_NR51 & 128) l += s;
+ s <<= 2;
+ if (R_NR51 & 8) l += s;
+ if (R_NR51 & 128) r += s;
}
l *= (R_NR50 & 0x07);
@@ -276,10 +238,10 @@ void sound_mix(void)
pcm_submit();
if (pcm.stereo)
{
- pcm.buf[pcm.pos++] = l+128;
- pcm.buf[pcm.pos++] = r+128;
+ pcm.buf[pcm.pos++] = l+128;
+ pcm.buf[pcm.pos++] = r+128;
}
- else pcm.buf[pcm.pos++] = ((l+r)>>1)+128;
+ else pcm.buf[pcm.pos++] = ((l+r)>>1)+128;
}
}
R_NR52 = (R_NR52&0xf0) | S1.on | (S2.on<<1) | (S3.on<<2) | (S4.on<<3);
@@ -289,7 +251,7 @@ void sound_mix(void)
byte sound_read(byte r)
{
- if(!options.sound) return 0;
+ if(!options.sound) return 0;
sound_mix();
/* printf("read %02X: %02X\n", r, REG(r)); */
return REG(r);
@@ -298,13 +260,12 @@ byte sound_read(byte r)
void s1_init(void)
{
S1.swcnt = 0;
- S1.swfreq = ((R_NR14&7)<<8) + R_NR13;
S1.envol = R_NR12 >> 4;
S1.endir = (R_NR12>>3) & 1;
S1.endir |= S1.endir - 1;
S1.enlen = (R_NR12 & 7) << 15;
- if (!S1.on) S1.pos = 0;
S1.on = 1;
+ S1.pos = 0;
S1.cnt = 0;
S1.encnt = 0;
}
@@ -315,20 +276,17 @@ void s2_init(void)
S2.endir = (R_NR22>>3) & 1;
S2.endir |= S2.endir - 1;
S2.enlen = (R_NR22 & 7) << 15;
- if (!S2.on) S2.pos = 0;
S2.on = 1;
+ S2.pos = 0;
S2.cnt = 0;
S2.encnt = 0;
}
void s3_init(void)
{
- int i;
- if (!S3.on) S3.pos = 0;
+ S3.pos = 0;
S3.cnt = 0;
S3.on = R_NR30 >> 7;
- if (S3.on) for (i = 0; i < 16; i++)
- ram.hi[i+0x30] = 0x13 ^ ram.hi[i+0x31];
}
void s4_init(void)
@@ -346,19 +304,13 @@ void s4_init(void)
void sound_write(byte r, byte b)
{
- if(!options.sound) return;
-#if 0
- static void *timer;
- if (!timer) timer = sys_timer();
- printf("write %02X: %02X @ %d\n", r, b, sys_elapsed(timer));
-#endif
+ if(!options.sound) return;
if (!(R_NR52 & 128) && r != RI_NR52) return;
if ((r & 0xF0) == 0x30)
{
if (S3.on) sound_mix();
- if (!S3.on)
- WAVE[r-0x30] = ram.hi[r] = b;
+ if (!S3.on) WAVE[r - 0x30] = b;
return;
}
sound_mix();
@@ -366,8 +318,6 @@ void sound_write(byte r, byte b)
{
case RI_NR10:
R_NR10 = b;
- S1.swlen = ((R_NR10>>4) & 7) << 14;
- S1.swfreq = ((R_NR14&7)<<8) + R_NR13;
break;
case RI_NR11:
R_NR11 = b;
@@ -415,7 +365,7 @@ void sound_write(byte r, byte b)
break;
case RI_NR31:
R_NR31 = b;
- S3.len = (256-R_NR31) << 13;
+ S3.len = (256-R_NR31) << 20;
break;
case RI_NR32:
R_NR32 = b;
@@ -457,7 +407,7 @@ void sound_write(byte r, byte b)
case RI_NR52:
R_NR52 = b;
if (!(R_NR52 & 128))
- sound_off();
+ sound_reset();
break;
default:
return;
diff --git a/apps/plugins/rockboy/sound.h b/apps/plugins/rockboy/sound.h
index a14b04c5a2..fe3557cd7e 100644
--- a/apps/plugins/rockboy/sound.h
+++ b/apps/plugins/rockboy/sound.h
@@ -5,20 +5,18 @@
struct sndchan
{
- int on;
- unsigned pos;
- int cnt, encnt, swcnt;
- int len, enlen, swlen;
- int swfreq;
- int freq;
- int envol, endir;
+ int on;
+ unsigned pos;
+ int cnt, encnt, swcnt;
+ int len, enlen, swlen;
+ int freq;
+ int envol, endir;
};
struct snd
{
- int rate;
- struct sndchan ch[4];
- byte wave[16];
+ int rate;
+ struct sndchan ch[4];
};
extern struct snd snd;
@@ -31,7 +29,6 @@ extern struct snd snd;
byte sound_read(byte r) ICODE_ATTR;
void sound_write(byte r, byte b) ICODE_ATTR;
void sound_dirty(void) ICODE_ATTR;
-void sound_off(void);
void sound_reset(void);
void sound_mix(void) ICODE_ATTR;
void s1_init(void);
diff --git a/apps/plugins/rockboy/split.c b/apps/plugins/rockboy/split.c
deleted file mode 100644
index 5d8af08ee1..0000000000
--- a/apps/plugins/rockboy/split.c
+++ /dev/null
@@ -1,59 +0,0 @@
-
-#include "rockmacros.h"
-
-/*
- * splitline is a destructive argument parser, much like a very primitive
- * form of a shell parser. it supports quotes for embedded spaces and
- * literal quotes with the backslash escape.
- */
-
-char *splitnext(char **pos)
-{
- char *a, *d, *s;
-
- d = s = *pos;
- while (*s == ' ' || *s == '\t') s++;
- a = s;
- while (*s && *s != ' ' && *s != '\t')
- {
- if (*s == '"')
- {
- s++;
- while (*s && *s != '"')
- {
- if (*s == '\\')
- s++;
- if (*s)
- *(d++) = *(s++);
- }
- if (*s == '"') s++;
- }
- else
- {
- if (*s == '\\')
- s++;
- *(d++) = *(s++);
- }
- }
- while (*s == ' ' || *s == '\t') s++;
- *d = 0;
- *pos = s;
- return a;
-}
-
-int splitline(char **argv, int max, char *line)
-{
- char *s;
- int i;
-
- s = line;
- for (i = 0; *s && i < max + 1; i++)
- argv[i] = splitnext(&s);
- argv[i] = 0;
- return i;
-}
-
-
-
-
-
diff --git a/apps/plugins/rockboy/split.h b/apps/plugins/rockboy/split.h
deleted file mode 100644
index a371430946..0000000000
--- a/apps/plugins/rockboy/split.h
+++ /dev/null
@@ -1 +0,0 @@
-int splitline(char **argv, int max, char *line);
diff --git a/apps/plugins/rockboy/sys_rockbox.c b/apps/plugins/rockboy/sys_rockbox.c
index fb118162b2..40f68681d8 100644
--- a/apps/plugins/rockboy/sys_rockbox.c
+++ b/apps/plugins/rockboy/sys_rockbox.c
@@ -20,7 +20,6 @@
#include "rockmacros.h"
#include "fb.h"
#include "input.h"
-#include "rc.h"
#include "lcd-gb.h"
#include "hw.h"
#include "config.h"
@@ -32,6 +31,13 @@
#define ROCKBOY_PAD_UP BUTTON_MENU
#define ROCKBOY_PAD_DOWN BUTTON_PLAY
+#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
+
+#define ROCKBOY_PAD_LEFT BUTTON_LEFT
+#define ROCKBOY_PAD_RIGHT BUTTON_RIGHT
+#define ROCKBOY_PAD_UP BUTTON_SCROLL_UP
+#define ROCKBOY_PAD_DOWN BUTTON_SCROLL_DOWN
+
#else
#define ROCKBOY_PAD_LEFT BUTTON_LEFT
@@ -41,33 +47,10 @@
#endif
-rcvar_t joy_exports[] =
-{
- RCV_END
-};
-
-rcvar_t vid_exports[] =
-{
- RCV_END
-};
-
-struct fb fb;
+struct fb fb IBSS_ATTR;
extern int debug_trace;
-void vid_settitle(char *title)
-{
- rb->splash(HZ/2, true, title);
-}
-
-void joy_init(void)
-{
-}
-
-void joy_close(void)
-{
-}
-
unsigned int oldbuttonstate = 0, newbuttonstate,holdbutton;
#ifdef HAVE_WHEEL_POSITION
int oldwheel = -1, wheel;
@@ -179,10 +162,7 @@ void ev_poll(void)
if(pressed & options.MENU) {
#endif
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
- (CONFIG_KEYPAD == IRIVER_H300_PAD) || \
- (CONFIG_KEYPAD == IPOD_4G_PAD) || \
- (CONFIG_KEYPAD == GIGABEAT_PAD) || \
- (CONFIG_KEYPAD == SANSA_E200_PAD)
+ defined(HAVE_LCD_COLOR)
#ifdef HAVE_WHEEL_POSITION
rb->wheel_send_events(true);
#endif
@@ -202,53 +182,36 @@ void ev_poll(void)
#endif
}
-void vid_setpal(int i, int r, int g, int b)
+/* New frameskip, makes more sense to me and performs as well */
+inline void vid_begin(void)
{
- (void)i;
- (void)r;
- (void)g;
- (void)b;
-}
-
-inline void vid_begin(void) // New frameskip, makes more sense to me and performs as well
-{
- static int skip = 0;
- if (skip<options.frameskip) {
- skip++;
- fb.enabled=0;
- }
- else {
- skip=0;
- fb.enabled=1;
- }
+ static int skip = 0;
+ if (skip<options.frameskip)
+ {
+ skip++;
+ fb.enabled=0;
+ }
+ else
+ {
+ skip=0;
+ fb.enabled=1;
+ }
}
void vid_init(void)
{
- fb.h=144;
- fb.w=160;
- fb.pitch=160;
fb.enabled=1;
- fb.dirty=0;
- fb.mode=3;
-
- fb.ptr=rb->lcd_framebuffer;
+ fb.ptr=rb->lcd_framebuffer;
#if defined(HAVE_LCD_COLOR)
- fb.pelsize=2; // 16 bit framebuffer
-
- fb.indexed = 0; // no palette on lcd
- fb.cc[0].r = 3; // 8-5 (wasted bits on red)
- fb.cc[0].l = 11; //this is the offset to the R bits (16-5)
- fb.cc[1].r = 2; // 8-6 (wasted bits on green)
- fb.cc[1].l = 5; // This is the offset to the G bits (16-5-6)
- fb.cc[2].r = 3; // 8-5 (wasted bits on red)
- fb.cc[2].l = 0; // This is the offset to the B bits (16-5-6-5)
- fb.cc[3].r = 0; // no alpha
- fb.cc[3].l = 0;
- fb.yuv = 0; // not in yuv format
-#else // ***** NEED TO LOOK INTO THIS MORE FOR THE H100 (Should be able to get rid of some IFDEF's elsewhere)
- fb.pelsize=1; // 8 bit framebuffer.. (too much.. but lowest gnuboy will support.. so yea...
+ fb.cc[0].r = 3; /* 8-5 (wasted bits on red) */
+ fb.cc[0].l = 11; /* this is the offset to the R bits (16-5) */
+ fb.cc[1].r = 2; /* 8-6 (wasted bits on green) */
+ fb.cc[1].l = 5; /* This is the offset to the G bits (16-5-6) */
+ fb.cc[2].r = 3; /* 8-5 (wasted bits on red) */
+ fb.cc[2].l = 0; /* This is the offset to the B bits (16-5-6-5) */
+#else
+ fb.mode=3;
#endif
}
@@ -350,43 +313,29 @@ void vid_update(int scanline)
cnt++;
}
rb->lcd_update_rect(0, scanline & ~3, LCD_WIDTH, 4);
-#elif defined(HAVE_LCD_COLOR) /* iriver H3x0, colour iPod */
- // handled in lcd.c now
+#elif defined(HAVE_LCD_COLOR)
+ /* handled in lcd.c now */
#endif /* LCD_HEIGHT */
}
#endif
-void vid_end(void)
-{
-}
-
long timerresult;
void *sys_timer(void)
-{/*
- timerresult=*rb->current_tick;
+{
+ /*timerresult=*rb->current_tick;
return &timerresult;*/
return 0;
}
-// returns microseconds passed since sys_timer
+/* returns microseconds passed since sys_timer */
int sys_elapsed(long *oldtick)
{
-/*
- int elap,mytime=microtick;
+ /* int elap,mytime=microtick;
elap=mytime-*oldtick;
*oldtick=mytime;
- return elap;*/
-// return ((*rb->current_tick-(*oldtick))*1000000)/HZ;
+ return elap; */
+ /* return ((*rb->current_tick-(*oldtick))*1000000)/HZ; */
return *oldtick;
}
-
-void sys_sleep(int us)
-{
- if(us<=0) return;
- int i=0;
- while(i< us*11)
- i++;
-// if (us <= 0) return;
-}