summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/SUBDIRS6
-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
48 files changed, 4877 insertions, 5405 deletions
diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS
index 2163055..4a2a819 100644
--- a/apps/plugins/SUBDIRS
+++ b/apps/plugins/SUBDIRS
@@ -5,11 +5,7 @@
/* For various targets... */
#if (CONFIG_KEYPAD == RECORDER_PAD) || \
(CONFIG_KEYPAD == IRIVER_H100_PAD) || \
- (CONFIG_KEYPAD == IRIVER_H300_PAD) || \
- defined(IPOD_COLOR) || \
- defined(IPOD_VIDEO) || \
- defined(TOSHIBA_GIGABEAT_F) || \
- defined(SANSA_E200)
+ defined(HAVE_LCD_COLOR)
rockboy
#endif
diff --git a/apps/plugins/rockboy/Makefile b/apps/plugins/rockboy/Makefile
index e4c6266..2859936 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 0b12c42..0000000
--- 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 dfb8734..bbd6c84 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 3c295dc..00cfc42 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 3e02f10..cf377b2 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 8459ad3..a829b98 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 6d424a0..6ab1ec7 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 8ee925c..50fc442 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 979b33c..2e1c7bd 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 5a34ce8..c018f7c 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 43504f4..0000000
--- 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 8d787c0..0000000
--- 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 d883438..9092f68 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 e36eb20..cc73a55 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 d70708e..97aeb42 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 794e4e4..05cdfbc 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 f1e632a..297eba3 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 6818749..0000000
--- 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 b574049..4ee1c9e 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 aafeaec..91f2487 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 1b285ec..05a6a74 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 3b7894d..90575bb 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 d6efa2e..8166220 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 45ee5e7..2eeb469 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 c9cbb76..fc21ca0 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 01a05d0..8c0bea0 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 14d03d5..66165d1 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 5f7f6b7..b49e480 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 838cbe1..05bcff4 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 0000000..86c3898
--- /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 5c5083d..0000000
--- 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 94f660b..0000000
--- 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 3719933..a616ce9 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 6371212..41d00c1 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 cb65d2a..0000000
--- 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 c9375b6..0000000
--- 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 a47794a..0000000
--- 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 beefb21..01e4de5 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 3bfcf94..06db25b 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 39c6145..94772da 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 05ad698..0b011a8 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 0277eb5..2332811 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 deeacc7..707bb6b 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 a14b04c..fe3557c 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 5d8af08..0000000
--- 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 a371430..0000000
--- 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 fb11816..40f6868 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;
-}