diff options
author | Tom Ross <midgey@rockbox.org> | 2007-02-06 21:41:08 +0000 |
---|---|---|
committer | Tom Ross <midgey@rockbox.org> | 2007-02-06 21:41:08 +0000 |
commit | 2882b26a996839f09956fa59617c63f2c3abac72 (patch) | |
tree | f7c4fbdc4857f6af11b30c1e7bdf467d43d5963e /apps/plugins | |
parent | 1026c0f5b26ef82e6acfc32e1fd74c5594e53619 (diff) | |
download | rockbox-2882b26a996839f09956fa59617c63f2c3abac72.tar.gz rockbox-2882b26a996839f09956fa59617c63f2c3abac72.zip |
Major Rockboy update.
1) Adapt Rockboy to smaller screens (H10, X5, and iPod Nano).
2) Add the ability to use a preset palette on color targets. Choose 'Set Palette' from the main menu.
3) Clean up the code to remove any unused code and variables.
4) Changed tabs to spaces.
5) Disable reading and writing sound when sound is disabled.
6) Disbable writing to the RTC since it is not implemented yet.
7) Minor optimizations from WAC gnuboy CE and iBoy.
8) Massive clean up of code to make it appear consistent.
9) Change all C++ style comments to C style.
10) Completely reorganize dynarec. Add fixmes to all unimplemented opcodes. Add debug writes for all opcodes. Attempt to implement a few opcodes myself.
11) Silence some warnings when built using dynarec.
12) Minor reshuffling of IRAM, may or not offer a speed increase.
13) Include fixes found in the short-lived gnuboy CVS.
All in all, there's about a 10% improvement on my test roms when sound is disabled and slight improvement with sound. Especially noticable when there are few sprites on screen and less action is occurring. See FS #6567.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12216 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
48 files changed, 4877 insertions, 5405 deletions
diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS index 2163055fa8..4a2a819b97 100644 --- a/apps/plugins/SUBDIRS +++ b/apps/plugins/SUBDIRS | |||
@@ -5,11 +5,7 @@ | |||
5 | /* For various targets... */ | 5 | /* For various targets... */ |
6 | #if (CONFIG_KEYPAD == RECORDER_PAD) || \ | 6 | #if (CONFIG_KEYPAD == RECORDER_PAD) || \ |
7 | (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | 7 | (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
8 | (CONFIG_KEYPAD == IRIVER_H300_PAD) || \ | 8 | defined(HAVE_LCD_COLOR) |
9 | defined(IPOD_COLOR) || \ | ||
10 | defined(IPOD_VIDEO) || \ | ||
11 | defined(TOSHIBA_GIGABEAT_F) || \ | ||
12 | defined(SANSA_E200) | ||
13 | rockboy | 9 | rockboy |
14 | #endif | 10 | #endif |
15 | 11 | ||
diff --git a/apps/plugins/rockboy/Makefile b/apps/plugins/rockboy/Makefile index e4c62666fb..2859936d15 100644 --- a/apps/plugins/rockboy/Makefile +++ b/apps/plugins/rockboy/Makefile | |||
@@ -18,11 +18,9 @@ endif | |||
18 | 18 | ||
19 | LINKFILE := $(OBJDIR)/link.lds | 19 | LINKFILE := $(OBJDIR)/link.lds |
20 | DEPFILE = $(OBJDIR)/dep-rockboy | 20 | DEPFILE = $(OBJDIR)/dep-rockboy |
21 | SRC = cpu.c emu.c events.c exports.c fastmem.c hw.c lcd.c lcdc.c loader.c \ | 21 | SRC = cpu.c emu.c events.c fastmem.c hw.c lcd.c lcdc.c loader.c main.c \ |
22 | main.c mem.c rbsound.c rccmds.c rcvars.c rtc.c save.c sound.c split.c \ | 22 | mem.c menu.c rbsound.c rockboy.c rtc.c save.c sound.c sys_rockbox.c |
23 | sys_rockbox.c rockboy.c menu.c | ||
24 | 23 | ||
25 | #CFLAGS += -DGRAYSCALE | ||
26 | #CFLAGS += -DDYNAREC | 24 | #CFLAGS += -DDYNAREC |
27 | #SRC += dynarec.c | 25 | #SRC += dynarec.c |
28 | 26 | ||
@@ -30,7 +28,6 @@ SOURCES = $(SRC) | |||
30 | OBJS := $(SRC:%.c=$(OBJDIR)/%.o) | 28 | OBJS := $(SRC:%.c=$(OBJDIR)/%.o) |
31 | DIRS = . | 29 | DIRS = . |
32 | 30 | ||
33 | |||
34 | ifndef SIMVER | 31 | ifndef SIMVER |
35 | ifneq (,$(findstring RECORDER,$(TARGET))) ## Archos recorder targets | 32 | ifneq (,$(findstring RECORDER,$(TARGET))) ## Archos recorder targets |
36 | LDS := archos.lds | 33 | LDS := archos.lds |
diff --git a/apps/plugins/rockboy/Version b/apps/plugins/rockboy/Version deleted file mode 100644 index 0b12c4271d..0000000000 --- a/apps/plugins/rockboy/Version +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | #define VERSION "1.0.3" /* | ||
2 | VERSION = 1.0.3 | ||
3 | # */ | ||
4 | |||
5 | |||
diff --git a/apps/plugins/rockboy/cpu-gb.h b/apps/plugins/rockboy/cpu-gb.h index dfb8734823..bbd6c84e59 100644 --- a/apps/plugins/rockboy/cpu-gb.h +++ b/apps/plugins/rockboy/cpu-gb.h | |||
@@ -10,24 +10,24 @@ | |||
10 | 10 | ||
11 | union reg | 11 | union reg |
12 | { | 12 | { |
13 | byte b[2][2]; | 13 | byte b[2][2]; |
14 | word w[2]; | 14 | word w[2]; |
15 | un32 d; /* padding for alignment, carry */ | 15 | un32 d; /* padding for alignment, carry */ |
16 | }; | 16 | }; |
17 | 17 | ||
18 | struct cpu | 18 | struct cpu |
19 | { | 19 | { |
20 | #ifdef DYNAREC | 20 | #ifdef DYNAREC |
21 | union reg a,b,c,d,e,hl,f,sp,pc; | 21 | union reg a,b,c,d,e,hl,f,sp,pc; |
22 | #else | 22 | #else |
23 | union reg pc, sp, bc, de, hl, af; | 23 | union reg pc, sp, bc, de, hl, af; |
24 | #endif | 24 | #endif |
25 | int ime, ima; | 25 | int ime, ima; |
26 | int speed; | 26 | int speed; |
27 | int halt; | 27 | int halt; |
28 | int div, tim; | 28 | int div, tim; |
29 | int lcdc; | 29 | int lcdc; |
30 | int snd; | 30 | int snd; |
31 | }; | 31 | }; |
32 | 32 | ||
33 | extern struct cpu cpu; | 33 | extern struct cpu cpu; |
@@ -54,6 +54,6 @@ void lcdc_advance(int cnt) ICODE_ATTR; | |||
54 | void sound_advance(int cnt) ICODE_ATTR; | 54 | void sound_advance(int cnt) ICODE_ATTR; |
55 | void cpu_timers(int cnt) ICODE_ATTR; | 55 | void cpu_timers(int cnt) ICODE_ATTR; |
56 | int cpu_emulate(int cycles) ICODE_ATTR; | 56 | int cpu_emulate(int cycles) ICODE_ATTR; |
57 | inline int cpu_step(int max); | 57 | inline int cpu_step(int max) ICODE_ATTR; |
58 | 58 | ||
59 | #endif | 59 | #endif |
diff --git a/apps/plugins/rockboy/cpu.c b/apps/plugins/rockboy/cpu.c index 3c295dcdf5..00cfc42684 100644 --- a/apps/plugins/rockboy/cpu.c +++ b/apps/plugins/rockboy/cpu.c | |||
@@ -17,19 +17,12 @@ | |||
17 | struct cpu cpu IBSS_ATTR; | 17 | struct cpu cpu IBSS_ATTR; |
18 | 18 | ||
19 | 19 | ||
20 | |||
21 | |||
22 | #define ZFLAG(n) ( (n) ? 0 : FZ ) | 20 | #define ZFLAG(n) ( (n) ? 0 : FZ ) |
23 | 21 | ||
24 | 22 | ||
25 | #define PUSH(w) ( (SP -= 2), (writew(xSP, (w))) ) | 23 | #define PUSH(w) ( (SP -= 2), (writew(xSP, (w))) ) |
26 | #define POP(w) ( ((w) = readw(xSP)), (SP += 2) ) | 24 | #define POP(w) ( ((w) = readw(xSP)), (SP += 2) ) |
27 | 25 | ||
28 | |||
29 | #define FETCH_OLD ( mbc.rmap[PC>>12] \ | ||
30 | ? mbc.rmap[PC>>12][PC++] \ | ||
31 | : mem_read(PC++) ) | ||
32 | |||
33 | #define FETCH (readb(PC++)) | 26 | #define FETCH (readb(PC++)) |
34 | 27 | ||
35 | 28 | ||
@@ -227,7 +220,7 @@ label: op(b); break; | |||
227 | #define RET ( POP(PC) ) | 220 | #define RET ( POP(PC) ) |
228 | 221 | ||
229 | #define EI ( IMA = 1 ) | 222 | #define EI ( IMA = 1 ) |
230 | #define DI ( cpu.halt = IMA = IME = 0 ) | 223 | #define DI ( IMA = IME = 0 ) |
231 | 224 | ||
232 | 225 | ||
233 | 226 | ||
@@ -246,127 +239,122 @@ int blockcount; | |||
246 | 239 | ||
247 | void cpu_reset(void) | 240 | void cpu_reset(void) |
248 | { | 241 | { |
249 | union reg acc; | 242 | union reg acc; |
250 | #ifdef DYNAREC | 243 | #ifdef DYNAREC |
251 | int i; | 244 | int i; |
252 | dynapointer=0; | 245 | dynapointer=0; |
253 | #endif | 246 | #endif |
254 | cpu.speed = 0; | 247 | cpu.speed = 0; |
255 | cpu.halt = 0; | 248 | cpu.halt = 0; |
256 | cpu.div = 0; | 249 | cpu.div = 0; |
257 | cpu.tim = 0; | 250 | cpu.tim = 0; |
258 | cpu.lcdc = 40; | 251 | cpu.lcdc = 40; |
259 | 252 | ||
260 | IME = 0; | 253 | IME = 0; |
261 | IMA = 0; | 254 | IMA = 0; |
262 | 255 | ||
263 | PC = 0x0100; | 256 | PC = 0x0100; |
264 | SP = 0xFFFE; | 257 | SP = 0xFFFE; |
265 | W(acc) = 0x01B0; | 258 | W(acc) = 0x01B0; |
266 | A=HB(acc); | 259 | A=HB(acc); |
267 | F=LB(acc); | 260 | F=LB(acc); |
268 | W(acc) = 0x0013; | 261 | W(acc) = 0x0013; |
269 | B=HB(acc); | 262 | B=HB(acc); |
270 | C=LB(acc); | 263 | C=LB(acc); |
271 | W(acc) = 0x00D8; | 264 | W(acc) = 0x00D8; |
272 | D=HB(acc); | 265 | D=HB(acc); |
273 | E=LB(acc); | 266 | E=LB(acc); |
274 | HL = 0x014D; | 267 | HL = 0x014D; |
275 | 268 | ||
276 | if (hw.cgb) A = 0x11; | 269 | if (hw.cgb) A = 0x11; |
277 | if (hw.gba) B = 0x01; | ||
278 | #ifdef DYNAREC | 270 | #ifdef DYNAREC |
279 | for(i=0;i<(1<<HASH_SIGNIFICANT_LOWER_BITS);i++) | 271 | for(i=0;i<(1<<HASH_SIGNIFICANT_LOWER_BITS);i++) |
280 | address_map[i]=0; | 272 | address_map[i]=0; |
281 | #endif | 273 | #endif |
282 | } | 274 | } |
283 | 275 | ||
284 | 276 | ||
285 | void div_advance(int cnt) | 277 | void div_advance(int cnt) |
286 | { | 278 | { |
287 | cpu.div += (cnt<<1); | 279 | cpu.div += (cnt<<1); |
288 | if (cpu.div >= 256) | 280 | if (cpu.div >= 256) |
289 | { | 281 | { |
290 | R_DIV += (cpu.div >> 8); | 282 | R_DIV += (cpu.div >> 8); |
291 | cpu.div &= 0xff; | 283 | cpu.div &= 0xff; |
292 | } | 284 | } |
293 | } | 285 | } |
294 | 286 | ||
295 | void timer_advance(int cnt) | 287 | void timer_advance(int cnt) |
296 | { | 288 | { |
297 | int unit, tima; | 289 | int unit, tima; |
298 | 290 | ||
299 | if (!(R_TAC & 0x04)) return; | 291 | if (!(R_TAC & 0x04)) return; |
300 | 292 | ||
301 | unit = ((-R_TAC) & 3) << 1; | 293 | unit = ((-R_TAC) & 3) << 1; |
302 | cpu.tim += (cnt<<unit); | 294 | cpu.tim += (cnt<<unit); |
303 | 295 | ||
304 | if (cpu.tim >= 512) | 296 | if (cpu.tim >= 512) |
305 | { | 297 | { |
306 | tima = R_TIMA + (cpu.tim >> 9); | 298 | tima = R_TIMA + (cpu.tim >> 9); |
307 | cpu.tim &= 0x1ff; | 299 | cpu.tim &= 0x1ff; |
308 | if (tima >= 256) | 300 | if (tima >= 256) |
309 | { | 301 | { |
310 | hw_interrupt(IF_TIMER, IF_TIMER); | 302 | hw_interrupt(IF_TIMER, IF_TIMER); |
311 | hw_interrupt(0, IF_TIMER); | 303 | hw_interrupt(0, IF_TIMER); |
312 | } | 304 | } |
313 | while (tima >= 256) | 305 | while (tima >= 256) |
314 | tima = tima - 256 + R_TMA; | 306 | tima = tima - 256 + R_TMA; |
315 | R_TIMA = tima; | 307 | R_TIMA = tima; |
316 | } | 308 | } |
317 | } | 309 | } |
318 | 310 | ||
319 | void lcdc_advance(int cnt) | 311 | void lcdc_advance(int cnt) |
320 | { | 312 | { |
321 | cpu.lcdc -= cnt; | 313 | cpu.lcdc -= cnt; |
322 | if (cpu.lcdc <= 0) lcdc_trans(); | 314 | if (cpu.lcdc <= 0) lcdc_trans(); |
323 | } | 315 | } |
324 | 316 | ||
325 | void sound_advance(int cnt) | 317 | void sound_advance(int cnt) |
326 | { | 318 | { |
327 | cpu.snd += cnt; | 319 | cpu.snd += cnt; |
328 | } | 320 | } |
329 | 321 | ||
330 | void cpu_timers(int cnt) | 322 | void cpu_timers(int cnt) |
331 | { | 323 | { |
332 | div_advance(cnt << cpu.speed); | 324 | div_advance(cnt << cpu.speed); |
333 | timer_advance(cnt << cpu.speed); | 325 | timer_advance(cnt << cpu.speed); |
334 | lcdc_advance(cnt); | 326 | lcdc_advance(cnt); |
335 | sound_advance(cnt); | 327 | if(options.sound) |
328 | sound_advance(cnt); | ||
336 | } | 329 | } |
337 | 330 | ||
338 | int cpu_idle(int max) | 331 | int cpu_idle(int max) |
339 | { | 332 | { |
340 | int cnt, unit; | 333 | int cnt, unit; |
341 | 334 | ||
342 | if (!(cpu.halt && IME)) return 0; | 335 | if (!(cpu.halt && IME)) return 0; |
343 | if (R_IF & R_IE) | 336 | |
344 | { | 337 | /* Make sure we don't miss lcdc status events! */ |
345 | cpu.halt = 0; | 338 | if ((R_IE & (IF_VBLANK | IF_STAT)) && (max > cpu.lcdc)) |
346 | return 0; | 339 | max = cpu.lcdc; |
347 | } | 340 | |
348 | 341 | /* If timer interrupt cannot happen, this is very simple! */ | |
349 | /* Make sure we don't miss lcdc status events! */ | 342 | if (!((R_IE & IF_TIMER) && (R_TAC & 0x04))) |
350 | if ((R_IE & (IF_VBLANK | IF_STAT)) && (max > cpu.lcdc)) | 343 | { |
351 | max = cpu.lcdc; | 344 | cpu_timers(max); |
352 | 345 | return max; | |
353 | /* If timer interrupt cannot happen, this is very simple! */ | 346 | } |
354 | if (!((R_IE & IF_TIMER) && (R_TAC & 0x04))) | 347 | |
355 | { | 348 | /* Figure out when the next timer interrupt will happen */ |
356 | cpu_timers(max); | 349 | unit = ((-R_TAC) & 3) << 1; |
357 | return max; | 350 | cnt = (511 - cpu.tim + (1<<unit)) >> unit; |
358 | } | 351 | cnt += (255 - R_TIMA) << (9 - unit); |
359 | 352 | ||
360 | /* Figure out when the next timer interrupt will happen */ | 353 | if (max < cnt) |
361 | unit = ((-R_TAC) & 3) << 1; | 354 | cnt = max; |
362 | cnt = (511 - cpu.tim + (1<<unit)) >> unit; | 355 | |
363 | cnt += (255 - R_TIMA) << (9 - unit); | 356 | cpu_timers(cnt); |
364 | 357 | return cnt; | |
365 | if (max < cnt) | ||
366 | cnt = max; | ||
367 | |||
368 | cpu_timers(cnt); | ||
369 | return cnt; | ||
370 | } | 358 | } |
371 | 359 | ||
372 | #ifndef ASM_CPU_EMULATE | 360 | #ifndef ASM_CPU_EMULATE |
@@ -375,627 +363,636 @@ extern int debug_trace; | |||
375 | 363 | ||
376 | int cpu_emulate(int cycles) | 364 | int cpu_emulate(int cycles) |
377 | { | 365 | { |
378 | int i; | 366 | int i; |
379 | byte op, cbop; | 367 | static byte op IBSS_ATTR; |
380 | int clen; | 368 | static byte cbop IBSS_ATTR; |
381 | static union reg acc; | 369 | int clen; |
382 | static byte b IBSS_ATTR; | 370 | static union reg acc IBSS_ATTR; |
383 | static word w IBSS_ATTR; | 371 | static byte b IBSS_ATTR; |
384 | 372 | static word w IBSS_ATTR; | |
385 | i = cycles; | 373 | |
374 | i = cycles; | ||
386 | next: | 375 | next: |
387 | #ifdef DYNAREC | 376 | #ifdef DYNAREC |
388 | if(shut) | 377 | if(shut) |
389 | return cycles-i; | 378 | return cycles-i; |
390 | #endif | 379 | #endif |
391 | if ((clen = cpu_idle(i))) | 380 | if ((clen = cpu_idle(i))) |
392 | { | 381 | { |
393 | i -= clen; | 382 | i -= clen; |
394 | if (i > 0) goto next; | 383 | if (i > 0) goto next; |
395 | return cycles-i; | 384 | return cycles-i; |
396 | } | 385 | } |
397 | 386 | ||
398 | if (IME && (IF & IE)) | 387 | if (IME && (IF & IE)) |
399 | { | 388 | { |
400 | PRE_INT; | 389 | PRE_INT; |
401 | switch ((byte)(IF & IE)) | 390 | switch ((byte)(IF & IE)) |
402 | { | 391 | { |
403 | case 0x01: case 0x03: case 0x05: case 0x07: | 392 | case 0x01: case 0x03: case 0x05: case 0x07: |
404 | case 0x09: case 0x0B: case 0x0D: case 0x0F: | 393 | case 0x09: case 0x0B: case 0x0D: case 0x0F: |
405 | case 0x11: case 0x13: case 0x15: case 0x17: | 394 | case 0x11: case 0x13: case 0x15: case 0x17: |
406 | case 0x19: case 0x1B: case 0x1D: case 0x1F: | 395 | case 0x19: case 0x1B: case 0x1D: case 0x1F: |
407 | THROW_INT(0); break; | 396 | THROW_INT(0); break; |
408 | case 0x02: case 0x06: case 0x0A: case 0x0E: | 397 | case 0x02: case 0x06: case 0x0A: case 0x0E: |
409 | case 0x12: case 0x16: case 0x1A: case 0x1E: | 398 | case 0x12: case 0x16: case 0x1A: case 0x1E: |
410 | THROW_INT(1); break; | 399 | THROW_INT(1); break; |
411 | case 0x04: case 0x0C: case 0x14: case 0x1C: | 400 | case 0x04: case 0x0C: case 0x14: case 0x1C: |
412 | THROW_INT(2); break; | 401 | THROW_INT(2); break; |
413 | case 0x08: case 0x18: | 402 | case 0x08: case 0x18: |
414 | THROW_INT(3); break; | 403 | THROW_INT(3); break; |
415 | case 0x10: | 404 | case 0x10: |
416 | THROW_INT(4); break; | 405 | THROW_INT(4); break; |
417 | } | 406 | } |
418 | } | 407 | } |
419 | IME = IMA; | 408 | IME = IMA; |
420 | 409 | ||
421 | /* if (debug_trace) debug_disassemble(PC, 1); */ | 410 | /* if (debug_trace) debug_disassemble(PC, 1); */ |
422 | #ifdef DYNAREC | 411 | #ifdef DYNAREC |
423 | if(PC&0x8000) { | 412 | if(PC&0x8000) { |
424 | #endif | 413 | #endif |
425 | op = FETCH; | 414 | op = FETCH; |
426 | clen = cycles_table[op]; | 415 | clen = cycles_table[op]; |
427 | 416 | ||
428 | switch(op) | 417 | switch(op) |
429 | { | 418 | { |
430 | case 0x00: /* NOP */ | 419 | case 0x00: /* NOP */ |
431 | case 0x40: /* LD B,B */ | 420 | case 0x40: /* LD B,B */ |
432 | case 0x49: /* LD C,C */ | 421 | case 0x49: /* LD C,C */ |
433 | case 0x52: /* LD D,D */ | 422 | case 0x52: /* LD D,D */ |
434 | case 0x5B: /* LD E,E */ | 423 | case 0x5B: /* LD E,E */ |
435 | case 0x64: /* LD H,H */ | 424 | case 0x64: /* LD H,H */ |
436 | case 0x6D: /* LD L,L */ | 425 | case 0x6D: /* LD L,L */ |
437 | case 0x7F: /* LD A,A */ | 426 | case 0x7F: /* LD A,A */ |
438 | break; | 427 | break; |
439 | 428 | ||
440 | case 0x41: /* LD B,C */ | 429 | case 0x41: /* LD B,C */ |
441 | B = C; break; | 430 | B = C; break; |
442 | case 0x42: /* LD B,D */ | 431 | case 0x42: /* LD B,D */ |
443 | B = D; break; | 432 | B = D; break; |
444 | case 0x43: /* LD B,E */ | 433 | case 0x43: /* LD B,E */ |
445 | B = E; break; | 434 | B = E; break; |
446 | case 0x44: /* LD B,H */ | 435 | case 0x44: /* LD B,H */ |
447 | B = H; break; | 436 | B = H; break; |
448 | case 0x45: /* LD B,L */ | 437 | case 0x45: /* LD B,L */ |
449 | B = L; break; | 438 | B = L; break; |
450 | case 0x46: /* LD B,(HL) */ | 439 | case 0x46: /* LD B,(HL) */ |
451 | B = readb(xHL); break; | 440 | B = readb(xHL); break; |
452 | case 0x47: /* LD B,A */ | 441 | case 0x47: /* LD B,A */ |
453 | B = A; break; | 442 | B = A; break; |
454 | 443 | ||
455 | case 0x48: /* LD C,B */ | 444 | case 0x48: /* LD C,B */ |
456 | C = B; break; | 445 | C = B; break; |
457 | case 0x4A: /* LD C,D */ | 446 | case 0x4A: /* LD C,D */ |
458 | C = D; break; | 447 | C = D; break; |
459 | case 0x4B: /* LD C,E */ | 448 | case 0x4B: /* LD C,E */ |
460 | C = E; break; | 449 | C = E; break; |
461 | case 0x4C: /* LD C,H */ | 450 | case 0x4C: /* LD C,H */ |
462 | C = H; break; | 451 | C = H; break; |
463 | case 0x4D: /* LD C,L */ | 452 | case 0x4D: /* LD C,L */ |
464 | C = L; break; | 453 | C = L; break; |
465 | case 0x4E: /* LD C,(HL) */ | 454 | case 0x4E: /* LD C,(HL) */ |
466 | C = readb(xHL); break; | 455 | C = readb(xHL); break; |
467 | case 0x4F: /* LD C,A */ | 456 | case 0x4F: /* LD C,A */ |
468 | C = A; break; | 457 | C = A; break; |
469 | 458 | ||
470 | case 0x50: /* LD D,B */ | 459 | case 0x50: /* LD D,B */ |
471 | D = B; break; | 460 | D = B; break; |
472 | case 0x51: /* LD D,C */ | 461 | case 0x51: /* LD D,C */ |
473 | D = C; break; | 462 | D = C; break; |
474 | case 0x53: /* LD D,E */ | 463 | case 0x53: /* LD D,E */ |
475 | D = E; break; | 464 | D = E; break; |
476 | case 0x54: /* LD D,H */ | 465 | case 0x54: /* LD D,H */ |
477 | D = H; break; | 466 | D = H; break; |
478 | case 0x55: /* LD D,L */ | 467 | case 0x55: /* LD D,L */ |
479 | D = L; break; | 468 | D = L; break; |
480 | case 0x56: /* LD D,(HL) */ | 469 | case 0x56: /* LD D,(HL) */ |
481 | D = readb(xHL); break; | 470 | D = readb(xHL); break; |
482 | case 0x57: /* LD D,A */ | 471 | case 0x57: /* LD D,A */ |
483 | D = A; break; | 472 | D = A; break; |
484 | 473 | ||
485 | case 0x58: /* LD E,B */ | 474 | case 0x58: /* LD E,B */ |
486 | E = B; break; | 475 | E = B; break; |
487 | case 0x59: /* LD E,C */ | 476 | case 0x59: /* LD E,C */ |
488 | E = C; break; | 477 | E = C; break; |
489 | case 0x5A: /* LD E,D */ | 478 | case 0x5A: /* LD E,D */ |
490 | E = D; break; | 479 | E = D; break; |
491 | case 0x5C: /* LD E,H */ | 480 | case 0x5C: /* LD E,H */ |
492 | E = H; break; | 481 | E = H; break; |
493 | case 0x5D: /* LD E,L */ | 482 | case 0x5D: /* LD E,L */ |
494 | E = L; break; | 483 | E = L; break; |
495 | case 0x5E: /* LD E,(HL) */ | 484 | case 0x5E: /* LD E,(HL) */ |
496 | E = readb(xHL); break; | 485 | E = readb(xHL); break; |
497 | case 0x5F: /* LD E,A */ | 486 | case 0x5F: /* LD E,A */ |
498 | E = A; break; | 487 | E = A; break; |
499 | 488 | ||
500 | case 0x60: /* LD H,B */ | 489 | case 0x60: /* LD H,B */ |
501 | H = B; break; | 490 | H = B; break; |
502 | case 0x61: /* LD H,C */ | 491 | case 0x61: /* LD H,C */ |
503 | H = C; break; | 492 | H = C; break; |
504 | case 0x62: /* LD H,D */ | 493 | case 0x62: /* LD H,D */ |
505 | H = D; break; | 494 | H = D; break; |
506 | case 0x63: /* LD H,E */ | 495 | case 0x63: /* LD H,E */ |
507 | H = E; break; | 496 | H = E; break; |
508 | case 0x65: /* LD H,L */ | 497 | case 0x65: /* LD H,L */ |
509 | H = L; break; | 498 | H = L; break; |
510 | case 0x66: /* LD H,(HL) */ | 499 | case 0x66: /* LD H,(HL) */ |
511 | H = readb(xHL); break; | 500 | H = readb(xHL); break; |
512 | case 0x67: /* LD H,A */ | 501 | case 0x67: /* LD H,A */ |
513 | H = A; break; | 502 | H = A; break; |
514 | 503 | ||
515 | case 0x68: /* LD L,B */ | 504 | case 0x68: /* LD L,B */ |
516 | L = B; break; | 505 | L = B; break; |
517 | case 0x69: /* LD L,C */ | 506 | case 0x69: /* LD L,C */ |
518 | L = C; break; | 507 | L = C; break; |
519 | case 0x6A: /* LD L,D */ | 508 | case 0x6A: /* LD L,D */ |
520 | L = D; break; | 509 | L = D; break; |
521 | case 0x6B: /* LD L,E */ | 510 | case 0x6B: /* LD L,E */ |
522 | L = E; break; | 511 | L = E; break; |
523 | case 0x6C: /* LD L,H */ | 512 | case 0x6C: /* LD L,H */ |
524 | L = H; break; | 513 | L = H; break; |
525 | case 0x6E: /* LD L,(HL) */ | 514 | case 0x6E: /* LD L,(HL) */ |
526 | L = readb(xHL); break; | 515 | L = readb(xHL); break; |
527 | case 0x6F: /* LD L,A */ | 516 | case 0x6F: /* LD L,A */ |
528 | L = A; break; | 517 | L = A; break; |
529 | 518 | ||
530 | case 0x70: /* LD (HL),B */ | 519 | case 0x70: /* LD (HL),B */ |
531 | b = B; goto __LD_HL; | 520 | b = B; goto __LD_HL; |
532 | case 0x71: /* LD (HL),C */ | 521 | case 0x71: /* LD (HL),C */ |
533 | b = C; goto __LD_HL; | 522 | b = C; goto __LD_HL; |
534 | case 0x72: /* LD (HL),D */ | 523 | case 0x72: /* LD (HL),D */ |
535 | b = D; goto __LD_HL; | 524 | b = D; goto __LD_HL; |
536 | case 0x73: /* LD (HL),E */ | 525 | case 0x73: /* LD (HL),E */ |
537 | b = E; goto __LD_HL; | 526 | b = E; goto __LD_HL; |
538 | case 0x74: /* LD (HL),H */ | 527 | case 0x74: /* LD (HL),H */ |
539 | b = H; goto __LD_HL; | 528 | b = H; goto __LD_HL; |
540 | case 0x75: /* LD (HL),L */ | 529 | case 0x75: /* LD (HL),L */ |
541 | b = L; goto __LD_HL; | 530 | b = L; goto __LD_HL; |
542 | case 0x77: /* LD (HL),A */ | 531 | case 0x77: /* LD (HL),A */ |
543 | b = A; | 532 | b = A; |
544 | __LD_HL: | 533 | __LD_HL: |
545 | writeb(xHL,b); | 534 | writeb(xHL,b); |
546 | break; | 535 | break; |
547 | 536 | ||
548 | case 0x78: /* LD A,B */ | 537 | case 0x78: /* LD A,B */ |
549 | A = B; break; | 538 | A = B; break; |
550 | case 0x79: /* LD A,C */ | 539 | case 0x79: /* LD A,C */ |
551 | A = C; break; | 540 | A = C; break; |
552 | case 0x7A: /* LD A,D */ | 541 | case 0x7A: /* LD A,D */ |
553 | A = D; break; | 542 | A = D; break; |
554 | case 0x7B: /* LD A,E */ | 543 | case 0x7B: /* LD A,E */ |
555 | A = E; break; | 544 | A = E; break; |
556 | case 0x7C: /* LD A,H */ | 545 | case 0x7C: /* LD A,H */ |
557 | A = H; break; | 546 | A = H; break; |
558 | case 0x7D: /* LD A,L */ | 547 | case 0x7D: /* LD A,L */ |
559 | A = L; break; | 548 | A = L; break; |
560 | case 0x7E: /* LD A,(HL) */ | 549 | case 0x7E: /* LD A,(HL) */ |
561 | A = readb(xHL); break; | 550 | A = readb(xHL); break; |
562 | 551 | ||
563 | case 0x01: /* LD BC,imm */ | 552 | case 0x01: /* LD BC,imm */ |
564 | #ifdef DYNAREC | 553 | #ifdef DYNAREC |
565 | W(acc) = readw(xPC); | 554 | W(acc) = readw(xPC); |
566 | B=HB(acc); | 555 | B=HB(acc); |
567 | C=LB(acc); | 556 | C=LB(acc); |
568 | #else | 557 | #else |
569 | BC = readw(xPC); | 558 | BC = readw(xPC); |
570 | #endif | 559 | #endif |
571 | PC += 2; | 560 | PC += 2; |
572 | break; | 561 | break; |
573 | case 0x11: /* LD DE,imm */ | 562 | case 0x11: /* LD DE,imm */ |
574 | #ifdef DYNAREC | 563 | #ifdef DYNAREC |
575 | W(acc) = readw(xPC); | 564 | W(acc) = readw(xPC); |
576 | D=HB(acc); | 565 | D=HB(acc); |
577 | E=LB(acc); | 566 | E=LB(acc); |
578 | #else | 567 | #else |
579 | DE = readw(xPC); | 568 | DE = readw(xPC); |
580 | #endif | 569 | #endif |
581 | PC += 2; | 570 | PC += 2; |
582 | break; | 571 | break; |
583 | case 0x21: /* LD HL,imm */ | 572 | case 0x21: /* LD HL,imm */ |
584 | HL = readw(xPC); PC += 2; break; | 573 | HL = readw(xPC); PC += 2; break; |
585 | case 0x31: /* LD SP,imm */ | 574 | case 0x31: /* LD SP,imm */ |
586 | SP = readw(xPC); PC += 2; break; | 575 | SP = readw(xPC); PC += 2; break; |
587 | 576 | ||
588 | case 0x02: /* LD (BC),A */ | 577 | case 0x02: /* LD (BC),A */ |
589 | writeb(xBC, A); break; | 578 | writeb(xBC, A); break; |
590 | case 0x0A: /* LD A,(BC) */ | 579 | case 0x0A: /* LD A,(BC) */ |
591 | A = readb(xBC); break; | 580 | A = readb(xBC); break; |
592 | case 0x12: /* LD (DE),A */ | 581 | case 0x12: /* LD (DE),A */ |
593 | writeb(xDE, A); break; | 582 | writeb(xDE, A); break; |
594 | case 0x1A: /* LD A,(DE) */ | 583 | case 0x1A: /* LD A,(DE) */ |
595 | A = readb(xDE); break; | 584 | A = readb(xDE); break; |
596 | 585 | ||
597 | case 0x22: /* LDI (HL),A */ | 586 | case 0x22: /* LDI (HL),A */ |
598 | writeb(xHL, A); HL++; break; | 587 | writeb(xHL, A); HL++; break; |
599 | case 0x2A: /* LDI A,(HL) */ | 588 | case 0x2A: /* LDI A,(HL) */ |
600 | A = readb(xHL); HL++; break; | 589 | A = readb(xHL); HL++; break; |
601 | case 0x32: /* LDD (HL),A */ | 590 | case 0x32: /* LDD (HL),A */ |
602 | writeb(xHL, A); HL--; break; | 591 | writeb(xHL, A); HL--; break; |
603 | case 0x3A: /* LDD A,(HL) */ | 592 | case 0x3A: /* LDD A,(HL) */ |
604 | A = readb(xHL); HL--; break; | 593 | A = readb(xHL); HL--; break; |
605 | 594 | ||
606 | case 0x06: /* LD B,imm */ | 595 | case 0x06: /* LD B,imm */ |
607 | B = FETCH; break; | 596 | B = FETCH; break; |
608 | case 0x0E: /* LD C,imm */ | 597 | case 0x0E: /* LD C,imm */ |
609 | C = FETCH; break; | 598 | C = FETCH; break; |
610 | case 0x16: /* LD D,imm */ | 599 | case 0x16: /* LD D,imm */ |
611 | D = FETCH; break; | 600 | D = FETCH; break; |
612 | case 0x1E: /* LD E,imm */ | 601 | case 0x1E: /* LD E,imm */ |
613 | E = FETCH; break; | 602 | E = FETCH; break; |
614 | case 0x26: /* LD H,imm */ | 603 | case 0x26: /* LD H,imm */ |
615 | H = FETCH; break; | 604 | H = FETCH; break; |
616 | case 0x2E: /* LD L,imm */ | 605 | case 0x2E: /* LD L,imm */ |
617 | L = FETCH; break; | 606 | L = FETCH; break; |
618 | case 0x36: /* LD (HL),imm */ | 607 | case 0x36: /* LD (HL),imm */ |
619 | b = FETCH; writeb(xHL, b); break; | 608 | b = FETCH; writeb(xHL, b); break; |
620 | case 0x3E: /* LD A,imm */ | 609 | case 0x3E: /* LD A,imm */ |
621 | A = FETCH; break; | 610 | A = FETCH; break; |
622 | 611 | ||
623 | case 0x08: /* LD (imm),SP */ | 612 | case 0x08: /* LD (imm),SP */ |
624 | writew(readw(xPC), SP); PC += 2; break; | 613 | writew(readw(xPC), SP); PC += 2; break; |
625 | case 0xEA: /* LD (imm),A */ | 614 | case 0xEA: /* LD (imm),A */ |
626 | writeb(readw(xPC), A); PC += 2; break; | 615 | writeb(readw(xPC), A); PC += 2; break; |
627 | 616 | ||
628 | case 0xE0: /* LDH (imm),A */ | 617 | case 0xE0: /* LDH (imm),A */ |
629 | writehi(FETCH, A); break; | 618 | writehi(FETCH, A); break; |
630 | case 0xE2: /* LDH (C),A */ | 619 | case 0xE2: /* LDH (C),A */ |
631 | writehi(C, A); break; | 620 | writehi(C, A); break; |
632 | case 0xF0: /* LDH A,(imm) */ | 621 | case 0xF0: /* LDH A,(imm) */ |
633 | A = readhi(FETCH); break; | 622 | A = readhi(FETCH); break; |
634 | case 0xF2: /* LDH A,(C) (undocumented) */ | 623 | case 0xF2: /* LDH A,(C) (undocumented) */ |
635 | A = readhi(C); break; | 624 | A = readhi(C); break; |
636 | 625 | ||
637 | 626 | ||
638 | case 0xF8: /* LD HL,SP+imm */ | 627 | case 0xF8: /* LD HL,SP+imm */ |
639 | b = FETCH; LDHLSP(b); break; | 628 | b = FETCH; LDHLSP(b); break; |
640 | case 0xF9: /* LD SP,HL */ | 629 | case 0xF9: /* LD SP,HL */ |
641 | SP = HL; break; | 630 | SP = HL; break; |
642 | case 0xFA: /* LD A,(imm) */ | 631 | case 0xFA: /* LD A,(imm) */ |
643 | A = readb(readw(xPC)); PC += 2; break; | 632 | A = readb(readw(xPC)); PC += 2; break; |
644 | 633 | ||
645 | ALU_CASES(0x80, 0xC6, ADD, __ADD) | 634 | ALU_CASES(0x80, 0xC6, ADD, __ADD) |
646 | ALU_CASES(0x88, 0xCE, ADC, __ADC) | 635 | ALU_CASES(0x88, 0xCE, ADC, __ADC) |
647 | ALU_CASES(0x90, 0xD6, SUB, __SUB) | 636 | ALU_CASES(0x90, 0xD6, SUB, __SUB) |
648 | ALU_CASES(0x98, 0xDE, SBC, __SBC) | 637 | ALU_CASES(0x98, 0xDE, SBC, __SBC) |
649 | ALU_CASES(0xA0, 0xE6, AND, __AND) | 638 | ALU_CASES(0xA0, 0xE6, AND, __AND) |
650 | ALU_CASES(0xA8, 0xEE, XOR, __XOR) | 639 | ALU_CASES(0xA8, 0xEE, XOR, __XOR) |
651 | ALU_CASES(0xB0, 0xF6, OR, __OR) | 640 | ALU_CASES(0xB0, 0xF6, OR, __OR) |
652 | ALU_CASES(0xB8, 0xFE, CP, __CP) | 641 | ALU_CASES(0xB8, 0xFE, CP, __CP) |
653 | 642 | ||
654 | case 0x09: /* ADD HL,BC */ | 643 | case 0x09: /* ADD HL,BC */ |
655 | w = BC; goto __ADDW; | 644 | w = BC; goto __ADDW; |
656 | case 0x19: /* ADD HL,DE */ | 645 | case 0x19: /* ADD HL,DE */ |
657 | w = DE; goto __ADDW; | 646 | w = DE; goto __ADDW; |
658 | case 0x39: /* ADD HL,SP */ | 647 | case 0x39: /* ADD HL,SP */ |
659 | w = SP; goto __ADDW; | 648 | w = SP; goto __ADDW; |
660 | case 0x29: /* ADD HL,HL */ | 649 | case 0x29: /* ADD HL,HL */ |
661 | w = HL; | 650 | w = HL; |
662 | __ADDW: | 651 | __ADDW: |
663 | ADDW(w); | 652 | ADDW(w); |
664 | break; | 653 | break; |
665 | 654 | ||
666 | case 0x04: /* INC B */ | 655 | case 0x04: /* INC B */ |
667 | INC(B); break; | 656 | INC(B); break; |
668 | case 0x0C: /* INC C */ | 657 | case 0x0C: /* INC C */ |
669 | INC(C); break; | 658 | INC(C); break; |
670 | case 0x14: /* INC D */ | 659 | case 0x14: /* INC D */ |
671 | INC(D); break; | 660 | INC(D); break; |
672 | case 0x1C: /* INC E */ | 661 | case 0x1C: /* INC E */ |
673 | INC(E); break; | 662 | INC(E); break; |
674 | case 0x24: /* INC H */ | 663 | case 0x24: /* INC H */ |
675 | INC(H); break; | 664 | INC(H); break; |
676 | case 0x2C: /* INC L */ | 665 | case 0x2C: /* INC L */ |
677 | INC(L); break; | 666 | INC(L); break; |
678 | case 0x34: /* INC (HL) */ | 667 | case 0x34: /* INC (HL) */ |
679 | b = readb(xHL); | 668 | b = readb(xHL); |
680 | INC(b); | 669 | INC(b); |
681 | writeb(xHL, b); | 670 | writeb(xHL, b); |
682 | break; | 671 | break; |
683 | case 0x3C: /* INC A */ | 672 | case 0x3C: /* INC A */ |
684 | INC(A); break; | 673 | INC(A); break; |
685 | 674 | ||
686 | case 0x03: /* INC BC */ | 675 | case 0x03: /* INC BC */ |
687 | #ifdef DYNAREC | 676 | #ifdef DYNAREC |
688 | W(acc)=((B<<8)|C)+1; | 677 | W(acc)=((B<<8)|C)+1; |
689 | B=HB(acc); | 678 | B=HB(acc); |
690 | C=LB(acc); | 679 | C=LB(acc); |
691 | #else | 680 | #else |
692 | INCW(BC); | 681 | INCW(BC); |
693 | #endif | 682 | #endif |
694 | break; | 683 | break; |
695 | case 0x13: /* INC DE */ | 684 | case 0x13: /* INC DE */ |
696 | #ifdef DYNAREC | 685 | #ifdef DYNAREC |
697 | W(acc)=((D<<8)|E)+1; | 686 | W(acc)=((D<<8)|E)+1; |
698 | D=HB(acc); | 687 | D=HB(acc); |
699 | E=LB(acc); | 688 | E=LB(acc); |
700 | #else | 689 | #else |
701 | INCW(DE); | 690 | INCW(DE); |
702 | #endif | 691 | #endif |
703 | break; | 692 | break; |
704 | case 0x23: /* INC HL */ | 693 | case 0x23: /* INC HL */ |
705 | INCW(HL); break; | 694 | INCW(HL); break; |
706 | case 0x33: /* INC SP */ | 695 | case 0x33: /* INC SP */ |
707 | INCW(SP); break; | 696 | INCW(SP); break; |
708 | 697 | ||
709 | case 0x05: /* DEC B */ | 698 | case 0x05: /* DEC B */ |
710 | DEC(B); break; | 699 | DEC(B); break; |
711 | case 0x0D: /* DEC C */ | 700 | case 0x0D: /* DEC C */ |
712 | DEC(C); break; | 701 | DEC(C); break; |
713 | case 0x15: /* DEC D */ | 702 | case 0x15: /* DEC D */ |
714 | DEC(D); break; | 703 | DEC(D); break; |
715 | case 0x1D: /* DEC E */ | 704 | case 0x1D: /* DEC E */ |
716 | DEC(E); break; | 705 | DEC(E); break; |
717 | case 0x25: /* DEC H */ | 706 | case 0x25: /* DEC H */ |
718 | DEC(H); break; | 707 | DEC(H); break; |
719 | case 0x2D: /* DEC L */ | 708 | case 0x2D: /* DEC L */ |
720 | DEC(L); break; | 709 | DEC(L); break; |
721 | case 0x35: /* DEC (HL) */ | 710 | case 0x35: /* DEC (HL) */ |
722 | b = readb(xHL); | 711 | b = readb(xHL); |
723 | DEC(b); | 712 | DEC(b); |
724 | writeb(xHL, b); | 713 | writeb(xHL, b); |
725 | break; | 714 | break; |
726 | case 0x3D: /* DEC A */ | 715 | case 0x3D: /* DEC A */ |
727 | DEC(A); break; | 716 | DEC(A); break; |
728 | 717 | ||
729 | case 0x0B: /* DEC BC */ | 718 | case 0x0B: /* DEC BC */ |
730 | #ifdef DYNAREC | 719 | #ifdef DYNAREC |
731 | W(acc)=((B<<8)|C)-1; | 720 | W(acc)=((B<<8)|C)-1; |
732 | B=HB(acc); | 721 | B=HB(acc); |
733 | C=LB(acc); | 722 | C=LB(acc); |
734 | #else | 723 | #else |
735 | DECW(BC); | 724 | DECW(BC); |
736 | #endif | 725 | #endif |
737 | break; | 726 | break; |
738 | case 0x1B: /* DEC DE */ | 727 | case 0x1B: /* DEC DE */ |
739 | #ifdef DYNAREC | 728 | #ifdef DYNAREC |
740 | W(acc)=((D<<8)|E)-1; | 729 | W(acc)=((D<<8)|E)-1; |
741 | D=HB(acc); | 730 | D=HB(acc); |
742 | E=LB(acc); | 731 | E=LB(acc); |
743 | #else | 732 | #else |
744 | DECW(DE); | 733 | DECW(DE); |
745 | #endif | 734 | #endif |
746 | break; | 735 | break; |
747 | case 0x2B: /* DEC HL */ | 736 | case 0x2B: /* DEC HL */ |
748 | DECW(HL); break; | 737 | DECW(HL); break; |
749 | case 0x3B: /* DEC SP */ | 738 | case 0x3B: /* DEC SP */ |
750 | DECW(SP); break; | 739 | DECW(SP); break; |
751 | 740 | ||
752 | case 0x07: /* RLCA */ | 741 | case 0x07: /* RLCA */ |
753 | RLCA(A); break; | 742 | RLCA(A); break; |
754 | case 0x0F: /* RRCA */ | 743 | case 0x0F: /* RRCA */ |
755 | RRCA(A); break; | 744 | RRCA(A); break; |
756 | case 0x17: /* RLA */ | 745 | case 0x17: /* RLA */ |
757 | RLA(A); break; | 746 | RLA(A); break; |
758 | case 0x1F: /* RRA */ | 747 | case 0x1F: /* RRA */ |
759 | RRA(A); break; | 748 | RRA(A); break; |
760 | 749 | ||
761 | case 0x27: /* DAA */ | 750 | case 0x27: /* DAA */ |
762 | DAA; break; | 751 | DAA; break; |
763 | case 0x2F: /* CPL */ | 752 | case 0x2F: /* CPL */ |
764 | CPL(A); break; | 753 | CPL(A); break; |
765 | 754 | ||
766 | case 0x18: /* JR */ | 755 | case 0x18: /* JR */ |
767 | __JR: | 756 | __JR: |
768 | JR; break; | 757 | JR; break; |
769 | case 0x20: /* JR NZ */ | 758 | case 0x20: /* JR NZ */ |
770 | if (!(F&FZ)) goto __JR; NOJR; break; | 759 | if (!(F&FZ)) goto __JR; NOJR; break; |
771 | case 0x28: /* JR Z */ | 760 | case 0x28: /* JR Z */ |
772 | if (F&FZ) goto __JR; NOJR; break; | 761 | if (F&FZ) goto __JR; NOJR; break; |
773 | case 0x30: /* JR NC */ | 762 | case 0x30: /* JR NC */ |
774 | if (!(F&FC)) goto __JR; NOJR; break; | 763 | if (!(F&FC)) goto __JR; NOJR; break; |
775 | case 0x38: /* JR C */ | 764 | case 0x38: /* JR C */ |
776 | if (F&FC) goto __JR; NOJR; break; | 765 | if (F&FC) goto __JR; NOJR; break; |
777 | 766 | ||
778 | case 0xC3: /* JP */ | 767 | case 0xC3: /* JP */ |
779 | __JP: | 768 | __JP: |
780 | JP; break; | 769 | JP; break; |
781 | case 0xC2: /* JP NZ */ | 770 | case 0xC2: /* JP NZ */ |
782 | if (!(F&FZ)) goto __JP; NOJP; break; | 771 | if (!(F&FZ)) goto __JP; NOJP; break; |
783 | case 0xCA: /* JP Z */ | 772 | case 0xCA: /* JP Z */ |
784 | if (F&FZ) goto __JP; NOJP; break; | 773 | if (F&FZ) goto __JP; NOJP; break; |
785 | case 0xD2: /* JP NC */ | 774 | case 0xD2: /* JP NC */ |
786 | if (!(F&FC)) goto __JP; NOJP; break; | 775 | if (!(F&FC)) goto __JP; NOJP; break; |
787 | case 0xDA: /* JP C */ | 776 | case 0xDA: /* JP C */ |
788 | if (F&FC) goto __JP; NOJP; break; | 777 | if (F&FC) goto __JP; NOJP; break; |
789 | case 0xE9: /* JP HL */ | 778 | case 0xE9: /* JP HL */ |
790 | PC = HL; break; | 779 | PC = HL; break; |
791 | 780 | ||
792 | case 0xC9: /* RET */ | 781 | case 0xC9: /* RET */ |
793 | __RET: | 782 | __RET: |
794 | RET; break; | 783 | RET; break; |
795 | case 0xC0: /* RET NZ */ | 784 | case 0xC0: /* RET NZ */ |
796 | if (!(F&FZ)) goto __RET; NORET; break; | 785 | if (!(F&FZ)) goto __RET; NORET; break; |
797 | case 0xC8: /* RET Z */ | 786 | case 0xC8: /* RET Z */ |
798 | if (F&FZ) goto __RET; NORET; break; | 787 | if (F&FZ) goto __RET; NORET; break; |
799 | case 0xD0: /* RET NC */ | 788 | case 0xD0: /* RET NC */ |
800 | if (!(F&FC)) goto __RET; NORET; break; | 789 | if (!(F&FC)) goto __RET; NORET; break; |
801 | case 0xD8: /* RET C */ | 790 | case 0xD8: /* RET C */ |
802 | if (F&FC) goto __RET; NORET; break; | 791 | if (F&FC) goto __RET; NORET; break; |
803 | case 0xD9: /* RETI */ | 792 | case 0xD9: /* RETI */ |
804 | IME = IMA = 1; goto __RET; | 793 | IME = IMA = 1; goto __RET; |
805 | 794 | ||
806 | case 0xCD: /* CALL */ | 795 | case 0xCD: /* CALL */ |
807 | __CALL: | 796 | __CALL: |
808 | CALL; break; | 797 | CALL; break; |
809 | case 0xC4: /* CALL NZ */ | 798 | case 0xC4: /* CALL NZ */ |
810 | if (!(F&FZ)) goto __CALL; NOCALL; break; | 799 | if (!(F&FZ)) goto __CALL; NOCALL; break; |
811 | case 0xCC: /* CALL Z */ | 800 | case 0xCC: /* CALL Z */ |
812 | if (F&FZ) goto __CALL; NOCALL; break; | 801 | if (F&FZ) goto __CALL; NOCALL; break; |
813 | case 0xD4: /* CALL NC */ | 802 | case 0xD4: /* CALL NC */ |
814 | if (!(F&FC)) goto __CALL; NOCALL; break; | 803 | if (!(F&FC)) goto __CALL; NOCALL; break; |
815 | case 0xDC: /* CALL C */ | 804 | case 0xDC: /* CALL C */ |
816 | if (F&FC) goto __CALL; NOCALL; break; | 805 | if (F&FC) goto __CALL; NOCALL; break; |
817 | 806 | ||
818 | case 0xC7: /* RST 0 */ | 807 | case 0xC7: /* RST 0 */ |
819 | b = 0x00; goto __RST; | 808 | b = 0x00; goto __RST; |
820 | case 0xCF: /* RST 8 */ | 809 | case 0xCF: /* RST 8 */ |
821 | b = 0x08; goto __RST; | 810 | b = 0x08; goto __RST; |
822 | case 0xD7: /* RST 10 */ | 811 | case 0xD7: /* RST 10 */ |
823 | b = 0x10; goto __RST; | 812 | b = 0x10; goto __RST; |
824 | case 0xDF: /* RST 18 */ | 813 | case 0xDF: /* RST 18 */ |
825 | b = 0x18; goto __RST; | 814 | b = 0x18; goto __RST; |
826 | case 0xE7: /* RST 20 */ | 815 | case 0xE7: /* RST 20 */ |
827 | b = 0x20; goto __RST; | 816 | b = 0x20; goto __RST; |
828 | case 0xEF: /* RST 28 */ | 817 | case 0xEF: /* RST 28 */ |
829 | b = 0x28; goto __RST; | 818 | b = 0x28; goto __RST; |
830 | case 0xF7: /* RST 30 */ | 819 | case 0xF7: /* RST 30 */ |
831 | b = 0x30; goto __RST; | 820 | b = 0x30; goto __RST; |
832 | case 0xFF: /* RST 38 */ | 821 | case 0xFF: /* RST 38 */ |
833 | b = 0x38; | 822 | b = 0x38; |
834 | __RST: | 823 | __RST: |
835 | RST(b); break; | 824 | RST(b); break; |
836 | 825 | ||
837 | case 0xC1: /* POP BC */ | 826 | case 0xC1: /* POP BC */ |
838 | #ifdef DYNAREC | 827 | #ifdef DYNAREC |
839 | POP(W(acc)); | 828 | POP(W(acc)); |
840 | B=HB(acc); | 829 | B=HB(acc); |
841 | C=LB(acc); | 830 | C=LB(acc); |
842 | #else | 831 | #else |
843 | POP(BC); | 832 | POP(BC); |
844 | #endif | 833 | #endif |
845 | break; | 834 | break; |
846 | case 0xC5: /* PUSH BC */ | 835 | case 0xC5: /* PUSH BC */ |
847 | PUSH(BC); break; | 836 | PUSH(BC); break; |
848 | case 0xD1: /* POP DE */ | 837 | case 0xD1: /* POP DE */ |
849 | #ifdef DYNAREC | 838 | #ifdef DYNAREC |
850 | POP(W(acc)); | 839 | POP(W(acc)); |
851 | D=HB(acc); | 840 | D=HB(acc); |
852 | E=LB(acc); | 841 | E=LB(acc); |
853 | #else | 842 | #else |
854 | POP(DE); | 843 | POP(DE); |
855 | #endif | 844 | #endif |
856 | break; | 845 | break; |
857 | case 0xD5: /* PUSH DE */ | 846 | case 0xD5: /* PUSH DE */ |
858 | PUSH(DE); break; | 847 | PUSH(DE); break; |
859 | case 0xE1: /* POP HL */ | 848 | case 0xE1: /* POP HL */ |
860 | POP(HL); break; | 849 | POP(HL); break; |
861 | case 0xE5: /* PUSH HL */ | 850 | case 0xE5: /* PUSH HL */ |
862 | PUSH(HL); break; | 851 | PUSH(HL); break; |
863 | case 0xF1: /* POP AF */ | 852 | case 0xF1: /* POP AF */ |
864 | #ifdef DYNAREC | 853 | #ifdef DYNAREC |
865 | POP(W(acc)); | 854 | POP(W(acc)); |
866 | A=HB(acc); | 855 | A=HB(acc); |
867 | F=LB(acc); | 856 | F=LB(acc); |
868 | #else | 857 | #else |
869 | POP(AF); | 858 | POP(AF); |
870 | break; | 859 | break; |
871 | #endif | 860 | #endif |
872 | case 0xF5: /* PUSH AF */ | 861 | case 0xF5: /* PUSH AF */ |
873 | PUSH(AF); break; | 862 | PUSH(AF); break; |
874 | 863 | ||
875 | case 0xE8: /* ADD SP,imm */ | 864 | case 0xE8: /* ADD SP,imm */ |
876 | b = FETCH; ADDSP(b); break; | 865 | b = FETCH; ADDSP(b); break; |
877 | 866 | ||
878 | case 0xF3: /* DI */ | 867 | case 0xF3: /* DI */ |
879 | DI; break; | 868 | DI; break; |
880 | case 0xFB: /* EI */ | 869 | case 0xFB: /* EI */ |
881 | EI; break; | 870 | EI; break; |
882 | 871 | ||
883 | case 0x37: /* SCF */ | 872 | case 0x37: /* SCF */ |
884 | SCF; break; | 873 | SCF; break; |
885 | case 0x3F: /* CCF */ | 874 | case 0x3F: /* CCF */ |
886 | CCF; break; | 875 | CCF; break; |
887 | 876 | ||
888 | case 0x10: /* STOP */ | 877 | case 0x10: /* STOP */ |
889 | PC++; | 878 | PC++; |
890 | if (R_KEY1 & 1) | 879 | if (R_KEY1 & 1) |
891 | { | 880 | { |
892 | cpu.speed = cpu.speed ^ 1; | 881 | cpu.speed = cpu.speed ^ 1; |
893 | R_KEY1 = (R_KEY1 & 0x7E) | (cpu.speed << 7); | 882 | R_KEY1 = (R_KEY1 & 0x7E) | (cpu.speed << 7); |
894 | break; | 883 | break; |
895 | } | 884 | } |
896 | /* NOTE - we do not implement dmg STOP whatsoever */ | 885 | /* NOTE - we do not implement dmg STOP whatsoever */ |
897 | break; | 886 | break; |
898 | 887 | ||
899 | case 0x76: /* HALT */ | 888 | case 0x76: /* HALT */ |
900 | cpu.halt = 1; | 889 | cpu.halt = 1; |
901 | break; | 890 | break; |
902 | 891 | ||
903 | case 0xCB: /* CB prefix */ | 892 | case 0xCB: /* CB prefix */ |
904 | cbop = FETCH; | 893 | cbop = FETCH; |
905 | clen = cb_cycles_table[cbop]; | 894 | clen = cb_cycles_table[cbop]; |
906 | switch (cbop) | 895 | switch (cbop) |
907 | { | 896 | { |
908 | CB_REG_CASES(B, 0); | 897 | CB_REG_CASES(B, 0); |
909 | CB_REG_CASES(C, 1); | 898 | CB_REG_CASES(C, 1); |
910 | CB_REG_CASES(D, 2); | 899 | CB_REG_CASES(D, 2); |
911 | CB_REG_CASES(E, 3); | 900 | CB_REG_CASES(E, 3); |
912 | CB_REG_CASES(H, 4); | 901 | CB_REG_CASES(H, 4); |
913 | CB_REG_CASES(L, 5); | 902 | CB_REG_CASES(L, 5); |
914 | CB_REG_CASES(A, 7); | 903 | CB_REG_CASES(A, 7); |
915 | default: | 904 | default: |
916 | b = readb(xHL); | 905 | b = readb(xHL); |
917 | switch(cbop) | 906 | switch(cbop) |
918 | { | 907 | { |
919 | CB_REG_CASES(b, 6); | 908 | CB_REG_CASES(b, 6); |
920 | } | 909 | } |
921 | if ((cbop & 0xC0) != 0x40) /* exclude BIT */ | 910 | if ((cbop & 0xC0) != 0x40) /* exclude BIT */ |
922 | writeb(xHL, b); | 911 | writeb(xHL, b); |
923 | break; | 912 | break; |
924 | } | 913 | } |
925 | break; | 914 | break; |
926 | 915 | ||
927 | default: | 916 | default: |
928 | die( | 917 | die( |
929 | "invalid opcode 0x%02X at address 0x%04X, rombank = %d\n", | 918 | "invalid opcode 0x%02X at address 0x%04X, rombank = %d\n", |
930 | op, (PC-1) & 0xffff, mbc.rombank); | 919 | op, (PC-1) & 0xffff, mbc.rombank); |
931 | break; | 920 | break; |
932 | } | 921 | } |
933 | #ifdef DYNAREC | 922 | #ifdef DYNAREC |
934 | } else { // ROM, dynarec. | 923 | } |
924 | else | ||
925 | { /* ROM, dynarec. */ | ||
935 | struct dynarec_block *p=0,*b=address_map[PC&HASH_BITMASK]; | 926 | struct dynarec_block *p=0,*b=address_map[PC&HASH_BITMASK]; |
936 | char meow[500]; | 927 | char meow[500]; |
937 | byte *ptr=mbc.rmap[PC>>12]; | 928 | byte *ptr=mbc.rmap[PC>>12]; |
938 | snprintf(meow,499,"PC: 0x%x 0x%x a: 0x%x\n", | 929 | snprintf(meow,499,"PC: 0x%x 0x%x a: 0x%x\n", |
939 | ptr,PC, b ? b->address.d : 0); | 930 | ptr,PC, b ? b->address.d : 0); |
940 | rb->splash(HZ*2,true,meow); | 931 | rb->splash(HZ*2,true,meow); |
941 | while(b&&b->address.d!=(ptr+PC)) { | 932 | while(b&&b->address.d!=((unsigned int)(ptr)+PC)) |
933 | { | ||
942 | p=b; | 934 | p=b; |
943 | b=b->next; | 935 | b=b->next; |
944 | } | 936 | } |
945 | if(b) { // call block | 937 | if(b) |
938 | { /* call block */ | ||
946 | int fd; | 939 | int fd; |
947 | blockcount++; | 940 | blockcount++; |
948 | snprintf(meow,499,"/dyna_0x%x_run.rb",PC); | 941 | snprintf(meow,499,"/dyna_0x%x_run.rb",PC); |
949 | fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC); | 942 | fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC); |
950 | if(fd>=0) { | 943 | if(fd>=0) |
951 | fdprintf(fd,"Block 0x%x Blockcount: %d\n",PC,blockcount); | 944 | { |
952 | fdprintf(fd,"before: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", | 945 | fdprintf(fd,"Block 0x%x Blockcount: %d\n",PC,blockcount); |
953 | cpu.a,cpu.b,cpu.c,cpu.d,cpu.e,cpu.hl,cpu.f,cpu.sp,cpu.pc, | 946 | fdprintf(fd,"before: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", |
954 | cpu.ime); | 947 | cpu.a,cpu.b,cpu.c,cpu.d,cpu.e,cpu.hl,cpu.f,cpu.sp,cpu.pc, |
955 | if(blockcount<MAXBLOCK) { | 948 | cpu.ime); |
956 | asm volatile ("movem.l (%0),%%d1-%%d7/%%a0-%%a1\n\t" | 949 | if(blockcount<MAXBLOCK) |
957 | "jsr (%1)\n\t" | 950 | { |
958 | "movem.l %%d1-%%d7/%%a0-%%a1,(%0)\n\t" | 951 | asm volatile ("movem.l (%0),%%d1-%%d7/%%a0-%%a1\n\t" |
959 | : | 952 | "jsr (%1)\n\t" |
960 | : "a" (&cpu.a), "a" (b->block) | 953 | "movem.l %%d1-%%d7/%%a0-%%a1,(%0)\n\t" |
961 | : "d0", "d1", "d2", "d3", "d4", "d5", "d6", | 954 | : |
962 | "d7", "a0","a1", "a2","a3","a4"); | 955 | : "a" (&cpu.a), "a" (b->block) |
963 | clen=blockclen; | 956 | : "d0", "d1", "d2", "d3", "d4", "d5", "d6", |
964 | fdprintf(fd,"after: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", | 957 | "d7", "a0","a1", "a2","a3","a4"); |
965 | cpu.a,cpu.b,cpu.c,cpu.d,cpu.e,cpu.hl,cpu.f,cpu.sp, | 958 | clen=blockclen; |
966 | cpu.pc,cpu.ime); | 959 | fdprintf(fd,"after: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", |
967 | } | 960 | cpu.a,cpu.b,cpu.c,cpu.d,cpu.e,cpu.hl,cpu.f,cpu.sp, |
968 | else | 961 | cpu.pc,cpu.ime); |
969 | die("end"); | 962 | } |
970 | close(fd); | 963 | else |
971 | } | 964 | die("end"); |
972 | } | 965 | close(fd); |
973 | else { // Hash miss -> not found -> recompile block and add it | 966 | } |
967 | } | ||
968 | else | ||
969 | { /* Hash miss -> not found -> recompile block and add it */ | ||
974 | struct dynarec_block *newblock; | 970 | struct dynarec_block *newblock; |
975 | newblock=malloc(sizeof(struct dynarec_block)); | 971 | newblock=malloc(sizeof(struct dynarec_block)); |
976 | memset(newblock,0,sizeof(struct dynarec_block)); | 972 | memset(newblock,0,sizeof(struct dynarec_block)); |
977 | newblock->address.d=ptr+PC; | 973 | newblock->address.d=(unsigned int)(ptr)+PC; |
978 | dynamic_recompile(newblock); | 974 | dynamic_recompile(newblock); |
979 | if(p) | 975 | if(p) |
980 | p->next=newblock; | 976 | p->next=newblock; |
981 | else | 977 | else |
982 | address_map[PC&HASH_BITMASK]=newblock; | 978 | address_map[PC&HASH_BITMASK]=newblock; |
983 | } | 979 | } |
984 | } | 980 | } |
985 | #endif | 981 | #endif |
986 | 982 | ||
987 | 983 | ||
988 | 984 | ||
989 | clen <<= 1; | 985 | clen <<= 1; |
990 | div_advance(clen); | 986 | div_advance(clen); |
991 | timer_advance(clen); | 987 | timer_advance(clen); |
992 | clen >>= cpu.speed; | 988 | clen >>= cpu.speed; |
993 | lcdc_advance(clen); | 989 | lcdc_advance(clen); |
994 | sound_advance(clen); | 990 | if(options.sound) |
995 | 991 | sound_advance(clen); | |
996 | i -= clen; | 992 | |
997 | if (i > 0) goto next; | 993 | i -= clen; |
998 | return cycles-i; | 994 | if (i > 0) goto next; |
995 | return cycles-i; | ||
999 | } | 996 | } |
1000 | 997 | ||
1001 | #endif /* ASM_CPU_EMULATE */ | 998 | #endif /* ASM_CPU_EMULATE */ |
@@ -1005,9 +1002,9 @@ next: | |||
1005 | 1002 | ||
1006 | inline int cpu_step(int max) | 1003 | inline int cpu_step(int max) |
1007 | { | 1004 | { |
1008 | register int cnt; | 1005 | register int cnt; |
1009 | if ((cnt = cpu_idle(max))) return cnt; | 1006 | if ((cnt = cpu_idle(max))) return cnt; |
1010 | return cpu_emulate(1); | 1007 | return cpu_emulate(1); |
1011 | } | 1008 | } |
1012 | 1009 | ||
1013 | #endif /* ASM_CPU_STEP */ | 1010 | #endif /* ASM_CPU_STEP */ |
diff --git a/apps/plugins/rockboy/cpucore.h b/apps/plugins/rockboy/cpucore.h index 3e02f10c1a..cf377b26d6 100644 --- a/apps/plugins/rockboy/cpucore.h +++ b/apps/plugins/rockboy/cpucore.h | |||
@@ -4,275 +4,254 @@ | |||
4 | 4 | ||
5 | static const byte cycles_table[256]ICONST_ATTR = | 5 | static const byte cycles_table[256]ICONST_ATTR = |
6 | { | 6 | { |
7 | 1, 3, 2, 2, 1, 1, 2, 1, 5, 2, 2, 2, 1, 1, 2, 1, | 7 | 1, 3, 2, 2, 1, 1, 2, 1, 5, 2, 2, 2, 1, 1, 2, 1, |
8 | 1, 3, 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, 1, 1, 2, 1, | 8 | 1, 3, 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, 1, 1, 2, 1, |
9 | 3, 3, 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, 1, 1, 2, 1, | 9 | 3, 3, 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, 1, 1, 2, 1, |
10 | 3, 3, 2, 2, 1, 3, 3, 3, 3, 2, 2, 2, 1, 1, 2, 1, | 10 | 3, 3, 2, 2, 3, 3, 3, 1, 3, 2, 2, 2, 1, 1, 2, 1, |
11 | 11 | ||
12 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, | 12 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, |
13 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, | 13 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, |
14 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, | 14 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, |
15 | 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, | 15 | 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, |
16 | 16 | ||
17 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, | 17 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, |
18 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, | 18 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, |
19 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, | 19 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, |
20 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, | 20 | 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, |
21 | 21 | ||
22 | 5, 3, 4, 4, 6, 4, 2, 4, 5, 4, 4, 1, 6, 6, 2, 4, | 22 | 5, 3, 4, 4, 6, 4, 2, 4, 5, 4, 4, 1, 6, 6, 2, 4, |
23 | 5, 3, 4, 0, 6, 4, 2, 4, 5, 4, 4, 0, 6, 0, 2, 4, | 23 | 5, 3, 4, 0, 6, 4, 2, 4, 5, 4, 4, 0, 6, 0, 2, 4, |
24 | 3, 3, 2, 0, 0, 4, 2, 4, 4, 1, 4, 0, 0, 0, 2, 4, | 24 | 3, 3, 2, 0, 0, 4, 2, 4, 4, 1, 4, 0, 0, 0, 2, 4, |
25 | 3, 3, 2, 1, 0, 4, 2, 4, 3, 2, 4, 1, 0, 0, 2, 4, | 25 | 3, 3, 2, 1, 0, 4, 2, 4, 3, 2, 4, 1, 0, 0, 2, 4, |
26 | }; | 26 | }; |
27 | 27 | ||
28 | static const byte cb_cycles_table[256] ICONST_ATTR = | 28 | static const byte cb_cycles_table[256] ICONST_ATTR = |
29 | { | 29 | { |
30 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 30 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
31 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 31 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
32 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 32 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
33 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 33 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
34 | 34 | ||
35 | 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, | 35 | 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, |
36 | 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, | 36 | 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, |
37 | 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, | 37 | 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, |
38 | 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, | 38 | 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, |
39 | 39 | ||
40 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 40 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
41 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 41 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
42 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 42 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
43 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 43 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
44 | 44 | ||
45 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 45 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
46 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 46 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
47 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 47 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
48 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, | 48 | 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4, 2, |
49 | }; | ||
50 | |||
51 | |||
52 | |||
53 | static const byte zflag_table[256] ICONST_ATTR = | ||
54 | { | ||
55 | FZ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
56 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
57 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
58 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
59 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
60 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
61 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
62 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
63 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
64 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
65 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
66 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
67 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
68 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
69 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
70 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||
71 | }; | 49 | }; |
72 | 50 | ||
73 | static const byte incflag_table[256] ICONST_ATTR = | 51 | static const byte incflag_table[256] ICONST_ATTR = |
74 | { | 52 | { |
75 | FZ|FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 53 | FZ|FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
76 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 54 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
77 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 55 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
78 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 56 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
79 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 57 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
80 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 58 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
81 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 59 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
82 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 60 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
83 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 61 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
84 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 62 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
85 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 63 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
86 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 64 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
87 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 65 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
88 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 66 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
89 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 67 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
90 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 68 | FH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
91 | }; | 69 | }; |
92 | 70 | ||
93 | static const byte decflag_table[256] ICONST_ATTR = | 71 | static const byte decflag_table[256] ICONST_ATTR = |
94 | { | 72 | { |
95 | FZ|FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 73 | FZ|FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
96 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 74 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
97 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 75 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
98 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 76 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
99 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 77 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
100 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 78 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
101 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 79 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
102 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 80 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
103 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 81 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
104 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 82 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
105 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 83 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
106 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 84 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
107 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 85 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
108 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 86 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
109 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, | 87 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH, |
110 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH | 88 | FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN, FN|FH |
111 | }; | 89 | }; |
112 | 90 | ||
91 | |||
113 | static const byte swap_table[256] ICONST_ATTR = | 92 | static const byte swap_table[256] ICONST_ATTR = |
114 | { | 93 | { |
115 | 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0, | 94 | 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0, |
116 | 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1, | 95 | 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1, |
117 | 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2, | 96 | 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2, |
118 | 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3, | 97 | 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3, |
119 | 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, | 98 | 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, |
120 | 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5, | 99 | 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5, |
121 | 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6, | 100 | 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6, |
122 | 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, | 101 | 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, |
123 | 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, | 102 | 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, |
124 | 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, | 103 | 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, |
125 | 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA, | 104 | 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA, |
126 | 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB, | 105 | 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB, |
127 | 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC, | 106 | 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC, |
128 | 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D, 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, | 107 | 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D, 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, |
129 | 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE, | 108 | 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE, |
130 | 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF, | 109 | 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF, |
131 | }; | 110 | }; |
132 | 111 | ||
133 | static const byte daa_table[4096] ICONST_ATTR= | 112 | static const byte daa_table[4096] ICONST_ATTR= |
134 | { | 113 | { |
135 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 114 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
136 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 115 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
137 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 116 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
138 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 117 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
139 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 118 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
140 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 119 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
141 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 120 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
142 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 121 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
143 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 122 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
144 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 123 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
145 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 124 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
146 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 125 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
147 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 126 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
148 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 127 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
149 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 128 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
150 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 129 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
151 | 130 | ||
152 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 131 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
153 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 132 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
154 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 133 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
155 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 134 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
156 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 135 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
157 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 136 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
158 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 137 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
159 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 138 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
160 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 139 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
161 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 140 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
162 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 141 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
163 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 142 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
164 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 143 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
165 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 144 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
166 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 145 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
167 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 146 | 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
168 | 147 | ||
169 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 148 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
170 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 149 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
171 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 150 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
172 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 151 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
173 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 152 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
174 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 153 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
175 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 154 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
176 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 155 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
177 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 156 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
178 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | 157 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, |
179 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 158 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
180 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 159 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
181 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 160 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
182 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 161 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
183 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 162 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
184 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 163 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
185 | 164 | ||
186 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 165 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
187 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 166 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
188 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 167 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
189 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 168 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
190 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 169 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
191 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 170 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
192 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 171 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
193 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 172 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
194 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 173 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
195 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 174 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
196 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 175 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
197 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 176 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
198 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 177 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
199 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 178 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
200 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 179 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
201 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, | 180 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, |
202 | 181 | ||
203 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 182 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
204 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 183 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
205 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 184 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
206 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 185 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
207 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 186 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
208 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 187 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
209 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 188 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
210 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 189 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
211 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 190 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
212 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 191 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
213 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 192 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
214 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 193 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
215 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 194 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
216 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 195 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
217 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 196 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
218 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 197 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
219 | 198 | ||
220 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 199 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
221 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 200 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
222 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 201 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
223 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 202 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
224 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 203 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
225 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 204 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
226 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 205 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
227 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 206 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
228 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 207 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
229 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 208 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
230 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 209 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
231 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 210 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
232 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 211 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
233 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 212 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
234 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 213 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
235 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, | 214 | 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, |
236 | 215 | ||
237 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 216 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
238 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 217 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
239 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 218 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
240 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 219 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
241 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 220 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
242 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 221 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
243 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 222 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
244 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 223 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
245 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 224 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
246 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 225 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
247 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 226 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
248 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 227 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
249 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 228 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
250 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 229 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
251 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 230 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
252 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, | 231 | 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, |
253 | 232 | ||
254 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 233 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
255 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 234 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
256 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 235 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
257 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 236 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
258 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 237 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
259 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 238 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
260 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 239 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
261 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 240 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
262 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 241 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
263 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 242 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
264 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 243 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
265 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 244 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
266 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 245 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
267 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 246 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
268 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 247 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
269 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, | 248 | 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, |
270 | }; | 249 | }; |
271 | 250 | ||
272 | static const byte daa_carry_table[64] ICONST_ATTR = | 251 | static const byte daa_carry_table[64] ICONST_ATTR = |
273 | { | 252 | { |
274 | 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, | 253 | 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, |
275 | 00, 00, 00, 00, 00, 00, 00, 00, FC, FC, 00, 00, 00, 00, 00, 00, | 254 | 00, 00, 00, 00, 00, 00, 00, 00, FC, FC, 00, 00, 00, 00, 00, 00, |
276 | FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, | 255 | FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, |
277 | FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, 00, FC, | 256 | FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, FC, 00, FC, |
278 | }; | 257 | }; |
diff --git a/apps/plugins/rockboy/debug.c b/apps/plugins/rockboy/debug.c index 8459ad3d5b..a829b98799 100644 --- a/apps/plugins/rockboy/debug.c +++ b/apps/plugins/rockboy/debug.c | |||
@@ -8,549 +8,548 @@ | |||
8 | #include "mem.h" | 8 | #include "mem.h" |
9 | #include "fastmem.h" | 9 | #include "fastmem.h" |
10 | #include "regs.h" | 10 | #include "regs.h" |
11 | #include "rc.h" | ||
12 | 11 | ||
13 | #include "cpuregs.h" | 12 | #include "cpuregs.h" |
14 | 13 | ||
15 | 14 | ||
16 | static char *mnemonic_table[256] = | 15 | static char *mnemonic_table[256] = |
17 | { | 16 | { |
18 | "NOP", | 17 | "NOP", |
19 | "LD BC,%w", | 18 | "LD BC,%w", |
20 | "LD (BC),A", | 19 | "LD (BC),A", |
21 | "INC BC", | 20 | "INC BC", |
22 | "INC B", | 21 | "INC B", |
23 | "DEC B", | 22 | "DEC B", |
24 | "LD B,%b", | 23 | "LD B,%b", |
25 | "RLCA", | 24 | "RLCA", |
26 | "LD (%w),SP", | 25 | "LD (%w),SP", |
27 | "ADD HL,BC", | 26 | "ADD HL,BC", |
28 | "LD A,(BC)", | 27 | "LD A,(BC)", |
29 | "DEC BC", | 28 | "DEC BC", |
30 | "INC C", | 29 | "INC C", |
31 | "DEC C", | 30 | "DEC C", |
32 | "LD C,%b", | 31 | "LD C,%b", |
33 | "RRCA", | 32 | "RRCA", |
34 | "STOP", | 33 | "STOP", |
35 | "LD DE,%w", | 34 | "LD DE,%w", |
36 | "LD (DE),A", | 35 | "LD (DE),A", |
37 | "INC DE", | 36 | "INC DE", |
38 | "INC D", | 37 | "INC D", |
39 | "DEC D", | 38 | "DEC D", |
40 | "LD D,%b", | 39 | "LD D,%b", |
41 | "RLA", | 40 | "RLA", |
42 | "JR %o", | 41 | "JR %o", |
43 | "ADD HL,DE", | 42 | "ADD HL,DE", |
44 | "LD A,(DE)", | 43 | "LD A,(DE)", |
45 | "DEC DE", | 44 | "DEC DE", |
46 | "INC E", | 45 | "INC E", |
47 | "DEC E", | 46 | "DEC E", |
48 | "LD E,%b", | 47 | "LD E,%b", |
49 | "RRA", | 48 | "RRA", |
50 | "JR NZ,%o", | 49 | "JR NZ,%o", |
51 | "LD HL,%w", | 50 | "LD HL,%w", |
52 | "LD (HLI),A", | 51 | "LD (HLI),A", |
53 | "INC HL", | 52 | "INC HL", |
54 | "INC H", | 53 | "INC H", |
55 | "DEC H", | 54 | "DEC H", |
56 | "LD H,%b", | 55 | "LD H,%b", |
57 | "DAA", | 56 | "DAA", |
58 | "JR Z,%o", | 57 | "JR Z,%o", |
59 | "ADD HL,HL", | 58 | "ADD HL,HL", |
60 | "LD A,(HLI)", | 59 | "LD A,(HLI)", |
61 | "DEC HL", | 60 | "DEC HL", |
62 | "INC L", | 61 | "INC L", |
63 | "DEC L", | 62 | "DEC L", |
64 | "LD L,%b", | 63 | "LD L,%b", |
65 | "CPL", | 64 | "CPL", |
66 | "JR NC,%o", | 65 | "JR NC,%o", |
67 | "LD SP,%w", | 66 | "LD SP,%w", |
68 | "LD (HLD),A", | 67 | "LD (HLD),A", |
69 | "INC SP", | 68 | "INC SP", |
70 | "INC (HL)", | 69 | "INC (HL)", |
71 | "DEC (HL)", | 70 | "DEC (HL)", |
72 | "LD (HL),%b", | 71 | "LD (HL),%b", |
73 | "SCF", | 72 | "SCF", |
74 | "JR C,%o", | 73 | "JR C,%o", |
75 | "ADD HL,SP", | 74 | "ADD HL,SP", |
76 | "LD A,(HLD)", | 75 | "LD A,(HLD)", |
77 | "DEC SP", | 76 | "DEC SP", |
78 | "INC A", | 77 | "INC A", |
79 | "DEC A", | 78 | "DEC A", |
80 | "LD A,%b", | 79 | "LD A,%b", |
81 | "CCF", | 80 | "CCF", |
82 | "LD B,B", | 81 | "LD B,B", |
83 | "LD B,C", | 82 | "LD B,C", |
84 | "LD B,D", | 83 | "LD B,D", |
85 | "LD B,E", | 84 | "LD B,E", |
86 | "LD B,H", | 85 | "LD B,H", |
87 | "LD B,L", | 86 | "LD B,L", |
88 | "LD B,(HL)", | 87 | "LD B,(HL)", |
89 | "LD B,A", | 88 | "LD B,A", |
90 | "LD C,B", | 89 | "LD C,B", |
91 | "LD C,C", | 90 | "LD C,C", |
92 | "LD C,D", | 91 | "LD C,D", |
93 | "LD C,E", | 92 | "LD C,E", |
94 | "LD C,H", | 93 | "LD C,H", |
95 | "LD C,L", | 94 | "LD C,L", |
96 | "LD C,(HL)", | 95 | "LD C,(HL)", |
97 | "LD C,A", | 96 | "LD C,A", |
98 | "LD D,B", | 97 | "LD D,B", |
99 | "LD D,C", | 98 | "LD D,C", |
100 | "LD D,D", | 99 | "LD D,D", |
101 | "LD D,E", | 100 | "LD D,E", |
102 | "LD D,H", | 101 | "LD D,H", |
103 | "LD D,L", | 102 | "LD D,L", |
104 | "LD D,(HL)", | 103 | "LD D,(HL)", |
105 | "LD D,A", | 104 | "LD D,A", |
106 | "LD E,B", | 105 | "LD E,B", |
107 | "LD E,C", | 106 | "LD E,C", |
108 | "LD E,D", | 107 | "LD E,D", |
109 | "LD E,E", | 108 | "LD E,E", |
110 | "LD E,H", | 109 | "LD E,H", |
111 | "LD E,L", | 110 | "LD E,L", |
112 | "LD E,(HL)", | 111 | "LD E,(HL)", |
113 | "LD E,A", | 112 | "LD E,A", |
114 | "LD H,B", | 113 | "LD H,B", |
115 | "LD H,C", | 114 | "LD H,C", |
116 | "LD H,D", | 115 | "LD H,D", |
117 | "LD H,E", | 116 | "LD H,E", |
118 | "LD H,H", | 117 | "LD H,H", |
119 | "LD H,L", | 118 | "LD H,L", |
120 | "LD H,(HL)", | 119 | "LD H,(HL)", |
121 | "LD H,A", | 120 | "LD H,A", |
122 | "LD L,B", | 121 | "LD L,B", |
123 | "LD L,C", | 122 | "LD L,C", |
124 | "LD L,D", | 123 | "LD L,D", |
125 | "LD L,E", | 124 | "LD L,E", |
126 | "LD L,H", | 125 | "LD L,H", |
127 | "LD L,L", | 126 | "LD L,L", |
128 | "LD L,(HL)", | 127 | "LD L,(HL)", |
129 | "LD L,A", | 128 | "LD L,A", |
130 | "LD (HL),B", | 129 | "LD (HL),B", |
131 | "LD (HL),C", | 130 | "LD (HL),C", |
132 | "LD (HL),D", | 131 | "LD (HL),D", |
133 | "LD (HL),E", | 132 | "LD (HL),E", |
134 | "LD (HL),H", | 133 | "LD (HL),H", |
135 | "LD (HL),L", | 134 | "LD (HL),L", |
136 | "HALT", | 135 | "HALT", |
137 | "LD (HL),A", | 136 | "LD (HL),A", |
138 | "LD A,B", | 137 | "LD A,B", |
139 | "LD A,C", | 138 | "LD A,C", |
140 | "LD A,D", | 139 | "LD A,D", |
141 | "LD A,E", | 140 | "LD A,E", |
142 | "LD A,H", | 141 | "LD A,H", |
143 | "LD A,L", | 142 | "LD A,L", |
144 | "LD A,(HL)", | 143 | "LD A,(HL)", |
145 | "LD A,A", | 144 | "LD A,A", |
146 | "ADD A,B", | 145 | "ADD A,B", |
147 | "ADD A,C", | 146 | "ADD A,C", |
148 | "ADD A,D", | 147 | "ADD A,D", |
149 | "ADD A,E", | 148 | "ADD A,E", |
150 | "ADD A,H", | 149 | "ADD A,H", |
151 | "ADD A,L", | 150 | "ADD A,L", |
152 | "ADD A,(HL)", | 151 | "ADD A,(HL)", |
153 | "ADD A,A", | 152 | "ADD A,A", |
154 | "ADC A,B", | 153 | "ADC A,B", |
155 | "ADC A,C", | 154 | "ADC A,C", |
156 | "ADC A,D", | 155 | "ADC A,D", |
157 | "ADC A,E", | 156 | "ADC A,E", |
158 | "ADC A,H", | 157 | "ADC A,H", |
159 | "ADC A,L", | 158 | "ADC A,L", |
160 | "ADC A,(HL)", | 159 | "ADC A,(HL)", |
161 | "ADC A", | 160 | "ADC A", |
162 | "SUB B", | 161 | "SUB B", |
163 | "SUB C", | 162 | "SUB C", |
164 | "SUB D", | 163 | "SUB D", |
165 | "SUB E", | 164 | "SUB E", |
166 | "SUB H", | 165 | "SUB H", |
167 | "SUB L", | 166 | "SUB L", |
168 | "SUB (HL)", | 167 | "SUB (HL)", |
169 | "SUB A", | 168 | "SUB A", |
170 | "SBC A,B", | 169 | "SBC A,B", |
171 | "SBC A,C", | 170 | "SBC A,C", |
172 | "SBC A,D", | 171 | "SBC A,D", |
173 | "SBC A,E", | 172 | "SBC A,E", |
174 | "SBC A,H", | 173 | "SBC A,H", |
175 | "SBC A,L", | 174 | "SBC A,L", |
176 | "SBC A,(HL)", | 175 | "SBC A,(HL)", |
177 | "SBC A,A", | 176 | "SBC A,A", |
178 | "AND B", | 177 | "AND B", |
179 | "AND C", | 178 | "AND C", |
180 | "AND D", | 179 | "AND D", |
181 | "AND E", | 180 | "AND E", |
182 | "AND H", | 181 | "AND H", |
183 | "AND L", | 182 | "AND L", |
184 | "AND (HL)", | 183 | "AND (HL)", |
185 | "AND A", | 184 | "AND A", |
186 | "XOR B", | 185 | "XOR B", |
187 | "XOR C", | 186 | "XOR C", |
188 | "XOR D", | 187 | "XOR D", |
189 | "XOR E", | 188 | "XOR E", |
190 | "XOR H", | 189 | "XOR H", |
191 | "XOR L", | 190 | "XOR L", |
192 | "XOR (HL)", | 191 | "XOR (HL)", |
193 | "XOR A", | 192 | "XOR A", |
194 | "OR B", | 193 | "OR B", |
195 | "OR C", | 194 | "OR C", |
196 | "OR D", | 195 | "OR D", |
197 | "OR E", | 196 | "OR E", |
198 | "OR H", | 197 | "OR H", |
199 | "OR L", | 198 | "OR L", |
200 | "OR (HL)", | 199 | "OR (HL)", |
201 | "OR A", | 200 | "OR A", |
202 | "CP B", | 201 | "CP B", |
203 | "CP C", | 202 | "CP C", |
204 | "CP D", | 203 | "CP D", |
205 | "CP E", | 204 | "CP E", |
206 | "CP H", | 205 | "CP H", |
207 | "CP L", | 206 | "CP L", |
208 | "CP (HL)", | 207 | "CP (HL)", |
209 | "CP A", | 208 | "CP A", |
210 | "RET NZ", | 209 | "RET NZ", |
211 | "POP BC", | 210 | "POP BC", |
212 | "JP NZ,%w", | 211 | "JP NZ,%w", |
213 | "JP %w", | 212 | "JP %w", |
214 | "CALL NZ,%w", | 213 | "CALL NZ,%w", |
215 | "PUSH BC", | 214 | "PUSH BC", |
216 | "ADD A,%b", | 215 | "ADD A,%b", |
217 | "RST 0h", | 216 | "RST 0h", |
218 | "RET Z", | 217 | "RET Z", |
219 | "RET", | 218 | "RET", |
220 | "JP Z,%w", | 219 | "JP Z,%w", |
221 | NULL, | 220 | NULL, |
222 | "CALL Z,%w", | 221 | "CALL Z,%w", |
223 | "CALL %w", | 222 | "CALL %w", |
224 | "ADC A,%b", | 223 | "ADC A,%b", |
225 | "RST 8h", | 224 | "RST 8h", |
226 | "RET NC", | 225 | "RET NC", |
227 | "POP DE", | 226 | "POP DE", |
228 | "JP NC,%w", | 227 | "JP NC,%w", |
229 | NULL, | 228 | NULL, |
230 | "CALL NC,%w", | 229 | "CALL NC,%w", |
231 | "PUSH DE", | 230 | "PUSH DE", |
232 | "SUB %b", | 231 | "SUB %b", |
233 | "RST 10h", | 232 | "RST 10h", |
234 | "RET C", | 233 | "RET C", |
235 | "RETI", | 234 | "RETI", |
236 | "JP C,%w", | 235 | "JP C,%w", |
237 | NULL, | 236 | NULL, |
238 | "CALL C,%w", | 237 | "CALL C,%w", |
239 | NULL, | 238 | NULL, |
240 | "SBC A,%b", | 239 | "SBC A,%b", |
241 | "RST 18h", | 240 | "RST 18h", |
242 | "LD (FF00+%b),A", | 241 | "LD (FF00+%b),A", |
243 | "POP HL", | 242 | "POP HL", |
244 | "LD (FF00+C),A", | 243 | "LD (FF00+C),A", |
245 | NULL, | 244 | NULL, |
246 | NULL, | 245 | NULL, |
247 | "PUSH HL", | 246 | "PUSH HL", |
248 | "AND %b", | 247 | "AND %b", |
249 | "RST 20h", | 248 | "RST 20h", |
250 | "ADD SP,%o", | 249 | "ADD SP,%o", |
251 | "JP HL", | 250 | "JP HL", |
252 | "LD (%w),A", | 251 | "LD (%w),A", |
253 | NULL, | 252 | NULL, |
254 | NULL, | 253 | NULL, |
255 | NULL, | 254 | NULL, |
256 | "XOR %b", | 255 | "XOR %b", |
257 | "RST 28h", | 256 | "RST 28h", |
258 | "LD A,(FF00+%b)", | 257 | "LD A,(FF00+%b)", |
259 | "POP AF", | 258 | "POP AF", |
260 | "LD A,(FF00+C)", | 259 | "LD A,(FF00+C)", |
261 | "DI", | 260 | "DI", |
262 | NULL, | 261 | NULL, |
263 | "PUSH AF", | 262 | "PUSH AF", |
264 | "OR %b", | 263 | "OR %b", |
265 | "RST 30h", | 264 | "RST 30h", |
266 | "LD HL,SP%o", | 265 | "LD HL,SP%o", |
267 | "LD SP,HL", | 266 | "LD SP,HL", |
268 | "LD A,(%w)", | 267 | "LD A,(%w)", |
269 | "EI", | 268 | "EI", |
270 | NULL, | 269 | NULL, |
271 | NULL, | 270 | NULL, |
272 | "CP %b", | 271 | "CP %b", |
273 | "RST 38h" | 272 | "RST 38h" |
274 | }; | 273 | }; |
275 | 274 | ||
276 | static char *cb_mnemonic_table[256] = | 275 | static char *cb_mnemonic_table[256] = |
277 | { | 276 | { |
278 | "RLC B", | 277 | "RLC B", |
279 | "RLC C", | 278 | "RLC C", |
280 | "RLC D", | 279 | "RLC D", |
281 | "RLC E", | 280 | "RLC E", |
282 | "RLC H", | 281 | "RLC H", |
283 | "RLC L", | 282 | "RLC L", |
284 | "RLC (HL)", | 283 | "RLC (HL)", |
285 | "RLC A", | 284 | "RLC A", |
286 | "RRC B", | 285 | "RRC B", |
287 | "RRC C", | 286 | "RRC C", |
288 | "RRC D", | 287 | "RRC D", |
289 | "RRC E", | 288 | "RRC E", |
290 | "RRC H", | 289 | "RRC H", |
291 | "RRC L", | 290 | "RRC L", |
292 | "RRC (HL)", | 291 | "RRC (HL)", |
293 | "RRC A", | 292 | "RRC A", |
294 | "RL B", | 293 | "RL B", |
295 | "RL C", | 294 | "RL C", |
296 | "RL D", | 295 | "RL D", |
297 | "RL E", | 296 | "RL E", |
298 | "RL H", | 297 | "RL H", |
299 | "RL L", | 298 | "RL L", |
300 | "RL (HL)", | 299 | "RL (HL)", |
301 | "RL A", | 300 | "RL A", |
302 | "RR B", | 301 | "RR B", |
303 | "RR C", | 302 | "RR C", |
304 | "RR D", | 303 | "RR D", |
305 | "RR E", | 304 | "RR E", |
306 | "RR H", | 305 | "RR H", |
307 | "RR L", | 306 | "RR L", |
308 | "RR (HL)", | 307 | "RR (HL)", |
309 | "RR A", | 308 | "RR A", |
310 | "SLA B", | 309 | "SLA B", |
311 | "SLA C", | 310 | "SLA C", |
312 | "SLA D", | 311 | "SLA D", |
313 | "SLA E", | 312 | "SLA E", |
314 | "SLA H", | 313 | "SLA H", |
315 | "SLA L", | 314 | "SLA L", |
316 | "SLA (HL)", | 315 | "SLA (HL)", |
317 | "SLA A", | 316 | "SLA A", |
318 | "SRA B", | 317 | "SRA B", |
319 | "SRA C", | 318 | "SRA C", |
320 | "SRA D", | 319 | "SRA D", |
321 | "SRA E", | 320 | "SRA E", |
322 | "SRA H", | 321 | "SRA H", |
323 | "SRA L", | 322 | "SRA L", |
324 | "SRA (HL)", | 323 | "SRA (HL)", |
325 | "SRA A", | 324 | "SRA A", |
326 | "SWAP B", | 325 | "SWAP B", |
327 | "SWAP C", | 326 | "SWAP C", |
328 | "SWAP D", | 327 | "SWAP D", |
329 | "SWAP E", | 328 | "SWAP E", |
330 | "SWAP H", | 329 | "SWAP H", |
331 | "SWAP L", | 330 | "SWAP L", |
332 | "SWAP (HL)", | 331 | "SWAP (HL)", |
333 | "SWAP A", | 332 | "SWAP A", |
334 | "SRL B", | 333 | "SRL B", |
335 | "SRL C", | 334 | "SRL C", |
336 | "SRL D", | 335 | "SRL D", |
337 | "SRL E", | 336 | "SRL E", |
338 | "SRL H", | 337 | "SRL H", |
339 | "SRL L", | 338 | "SRL L", |
340 | "SRL (HL)", | 339 | "SRL (HL)", |
341 | "SRL A", | 340 | "SRL A", |
342 | "BIT 0,B", | 341 | "BIT 0,B", |
343 | "BIT 0,C", | 342 | "BIT 0,C", |
344 | "BIT 0,D", | 343 | "BIT 0,D", |
345 | "BIT 0,E", | 344 | "BIT 0,E", |
346 | "BIT 0,H", | 345 | "BIT 0,H", |
347 | "BIT 0,L", | 346 | "BIT 0,L", |
348 | "BIT 0,(HL)", | 347 | "BIT 0,(HL)", |
349 | "BIT 0,A", | 348 | "BIT 0,A", |
350 | "BIT 1,B", | 349 | "BIT 1,B", |
351 | "BIT 1,C", | 350 | "BIT 1,C", |
352 | "BIT 1,D", | 351 | "BIT 1,D", |
353 | "BIT 1,E", | 352 | "BIT 1,E", |
354 | "BIT 1,H", | 353 | "BIT 1,H", |
355 | "BIT 1,L", | 354 | "BIT 1,L", |
356 | "BIT 1,(HL)", | 355 | "BIT 1,(HL)", |
357 | "BIT 1,A", | 356 | "BIT 1,A", |
358 | "BIT 2,B", | 357 | "BIT 2,B", |
359 | "BIT 2,C", | 358 | "BIT 2,C", |
360 | "BIT 2,D", | 359 | "BIT 2,D", |
361 | "BIT 2,E", | 360 | "BIT 2,E", |
362 | "BIT 2,H", | 361 | "BIT 2,H", |
363 | "BIT 2,L", | 362 | "BIT 2,L", |
364 | "BIT 2,(HL)", | 363 | "BIT 2,(HL)", |
365 | "BIT 2,A", | 364 | "BIT 2,A", |
366 | "BIT 3,B", | 365 | "BIT 3,B", |
367 | "BIT 3,C", | 366 | "BIT 3,C", |
368 | "BIT 3,D", | 367 | "BIT 3,D", |
369 | "BIT 3,E", | 368 | "BIT 3,E", |
370 | "BIT 3,H", | 369 | "BIT 3,H", |
371 | "BIT 3,L", | 370 | "BIT 3,L", |
372 | "BIT 3,(HL)", | 371 | "BIT 3,(HL)", |
373 | "BIT 3,A", | 372 | "BIT 3,A", |
374 | "BIT 4,B", | 373 | "BIT 4,B", |
375 | "BIT 4,C", | 374 | "BIT 4,C", |
376 | "BIT 4,D", | 375 | "BIT 4,D", |
377 | "BIT 4,E", | 376 | "BIT 4,E", |
378 | "BIT 4,H", | 377 | "BIT 4,H", |
379 | "BIT 4,L", | 378 | "BIT 4,L", |
380 | "BIT 4,(HL)", | 379 | "BIT 4,(HL)", |
381 | "BIT 4,A", | 380 | "BIT 4,A", |
382 | "BIT 5,B", | 381 | "BIT 5,B", |
383 | "BIT 5,C", | 382 | "BIT 5,C", |
384 | "BIT 5,D", | 383 | "BIT 5,D", |
385 | "BIT 5,E", | 384 | "BIT 5,E", |
386 | "BIT 5,H", | 385 | "BIT 5,H", |
387 | "BIT 5,L", | 386 | "BIT 5,L", |
388 | "BIT 5,(HL)", | 387 | "BIT 5,(HL)", |
389 | "BIT 5,A", | 388 | "BIT 5,A", |
390 | "BIT 6,B", | 389 | "BIT 6,B", |
391 | "BIT 6,C", | 390 | "BIT 6,C", |
392 | "BIT 6,D", | 391 | "BIT 6,D", |
393 | "BIT 6,E", | 392 | "BIT 6,E", |
394 | "BIT 6,H", | 393 | "BIT 6,H", |
395 | "BIT 6,L", | 394 | "BIT 6,L", |
396 | "BIT 6,(HL)", | 395 | "BIT 6,(HL)", |
397 | "BIT 6,A", | 396 | "BIT 6,A", |
398 | "BIT 7,B", | 397 | "BIT 7,B", |
399 | "BIT 7,C", | 398 | "BIT 7,C", |
400 | "BIT 7,D", | 399 | "BIT 7,D", |
401 | "BIT 7,E", | 400 | "BIT 7,E", |
402 | "BIT 7,H", | 401 | "BIT 7,H", |
403 | "BIT 7,L", | 402 | "BIT 7,L", |
404 | "BIT 7,(HL)", | 403 | "BIT 7,(HL)", |
405 | "BIT 7,A", | 404 | "BIT 7,A", |
406 | "RES 0,B", | 405 | "RES 0,B", |
407 | "RES 0,C", | 406 | "RES 0,C", |
408 | "RES 0,D", | 407 | "RES 0,D", |
409 | "RES 0,E", | 408 | "RES 0,E", |
410 | "RES 0,H", | 409 | "RES 0,H", |
411 | "RES 0,L", | 410 | "RES 0,L", |
412 | "RES 0,(HL)", | 411 | "RES 0,(HL)", |
413 | "RES 0,A", | 412 | "RES 0,A", |
414 | "RES 1,B", | 413 | "RES 1,B", |
415 | "RES 1,C", | 414 | "RES 1,C", |
416 | "RES 1,D", | 415 | "RES 1,D", |
417 | "RES 1,E", | 416 | "RES 1,E", |
418 | "RES 1,H", | 417 | "RES 1,H", |
419 | "RES 1,L", | 418 | "RES 1,L", |
420 | "RES 1,(HL)", | 419 | "RES 1,(HL)", |
421 | "RES 1,A", | 420 | "RES 1,A", |
422 | "RES 2,B", | 421 | "RES 2,B", |
423 | "RES 2,C", | 422 | "RES 2,C", |
424 | "RES 2,D", | 423 | "RES 2,D", |
425 | "RES 2,E", | 424 | "RES 2,E", |
426 | "RES 2,H", | 425 | "RES 2,H", |
427 | "RES 2,L", | 426 | "RES 2,L", |
428 | "RES 2,(HL)", | 427 | "RES 2,(HL)", |
429 | "RES 2,A", | 428 | "RES 2,A", |
430 | "RES 3,B", | 429 | "RES 3,B", |
431 | "RES 3,C", | 430 | "RES 3,C", |
432 | "RES 3,D", | 431 | "RES 3,D", |
433 | "RES 3,E", | 432 | "RES 3,E", |
434 | "RES 3,H", | 433 | "RES 3,H", |
435 | "RES 3,L", | 434 | "RES 3,L", |
436 | "RES 3,(HL)", | 435 | "RES 3,(HL)", |
437 | "RES 3,A", | 436 | "RES 3,A", |
438 | "RES 4,B", | 437 | "RES 4,B", |
439 | "RES 4,C", | 438 | "RES 4,C", |
440 | "RES 4,D", | 439 | "RES 4,D", |
441 | "RES 4,E", | 440 | "RES 4,E", |
442 | "RES 4,H", | 441 | "RES 4,H", |
443 | "RES 4,L", | 442 | "RES 4,L", |
444 | "RES 4,(HL)", | 443 | "RES 4,(HL)", |
445 | "RES 4,A", | 444 | "RES 4,A", |
446 | "RES 5,B", | 445 | "RES 5,B", |
447 | "RES 5,C", | 446 | "RES 5,C", |
448 | "RES 5,D", | 447 | "RES 5,D", |
449 | "RES 5,E", | 448 | "RES 5,E", |
450 | "RES 5,H", | 449 | "RES 5,H", |
451 | "RES 5,L", | 450 | "RES 5,L", |
452 | "RES 5,(HL)", | 451 | "RES 5,(HL)", |
453 | "RES 5,A", | 452 | "RES 5,A", |
454 | "RES 6,B", | 453 | "RES 6,B", |
455 | "RES 6,C", | 454 | "RES 6,C", |
456 | "RES 6,D", | 455 | "RES 6,D", |
457 | "RES 6,E", | 456 | "RES 6,E", |
458 | "RES 6,H", | 457 | "RES 6,H", |
459 | "RES 6,L", | 458 | "RES 6,L", |
460 | "RES 6,(HL)", | 459 | "RES 6,(HL)", |
461 | "RES 6,A", | 460 | "RES 6,A", |
462 | "RES 7,B", | 461 | "RES 7,B", |
463 | "RES 7,C", | 462 | "RES 7,C", |
464 | "RES 7,D", | 463 | "RES 7,D", |
465 | "RES 7,E", | 464 | "RES 7,E", |
466 | "RES 7,H", | 465 | "RES 7,H", |
467 | "RES 7,L", | 466 | "RES 7,L", |
468 | "RES 7,(HL)", | 467 | "RES 7,(HL)", |
469 | "RES 7,A", | 468 | "RES 7,A", |
470 | "SET 0,B", | 469 | "SET 0,B", |
471 | "SET 0,C", | 470 | "SET 0,C", |
472 | "SET 0,D", | 471 | "SET 0,D", |
473 | "SET 0,E", | 472 | "SET 0,E", |
474 | "SET 0,H", | 473 | "SET 0,H", |
475 | "SET 0,L", | 474 | "SET 0,L", |
476 | "SET 0,(HL)", | 475 | "SET 0,(HL)", |
477 | "SET 0,A", | 476 | "SET 0,A", |
478 | "SET 1,B", | 477 | "SET 1,B", |
479 | "SET 1,C", | 478 | "SET 1,C", |
480 | "SET 1,D", | 479 | "SET 1,D", |
481 | "SET 1,E", | 480 | "SET 1,E", |
482 | "SET 1,H", | 481 | "SET 1,H", |
483 | "SET 1,L", | 482 | "SET 1,L", |
484 | "SET 1,(HL)", | 483 | "SET 1,(HL)", |
485 | "SET 1,A", | 484 | "SET 1,A", |
486 | "SET 2,B", | 485 | "SET 2,B", |
487 | "SET 2,C", | 486 | "SET 2,C", |
488 | "SET 2,D", | 487 | "SET 2,D", |
489 | "SET 2,E", | 488 | "SET 2,E", |
490 | "SET 2,H", | 489 | "SET 2,H", |
491 | "SET 2,L", | 490 | "SET 2,L", |
492 | "SET 2,(HL)", | 491 | "SET 2,(HL)", |
493 | "SET 2,A", | 492 | "SET 2,A", |
494 | "SET 3,B", | 493 | "SET 3,B", |
495 | "SET 3,C", | 494 | "SET 3,C", |
496 | "SET 3,D", | 495 | "SET 3,D", |
497 | "SET 3,E", | 496 | "SET 3,E", |
498 | "SET 3,H", | 497 | "SET 3,H", |
499 | "SET 3,L", | 498 | "SET 3,L", |
500 | "SET 3,(HL)", | 499 | "SET 3,(HL)", |
501 | "SET 3,A", | 500 | "SET 3,A", |
502 | "SET 4,B", | 501 | "SET 4,B", |
503 | "SET 4,C", | 502 | "SET 4,C", |
504 | "SET 4,D", | 503 | "SET 4,D", |
505 | "SET 4,E", | 504 | "SET 4,E", |
506 | "SET 4,H", | 505 | "SET 4,H", |
507 | "SET 4,L", | 506 | "SET 4,L", |
508 | "SET 4,(HL)", | 507 | "SET 4,(HL)", |
509 | "SET 4,A", | 508 | "SET 4,A", |
510 | "SET 5,B", | 509 | "SET 5,B", |
511 | "SET 5,C", | 510 | "SET 5,C", |
512 | "SET 5,D", | 511 | "SET 5,D", |
513 | "SET 5,E", | 512 | "SET 5,E", |
514 | "SET 5,H", | 513 | "SET 5,H", |
515 | "SET 5,L", | 514 | "SET 5,L", |
516 | "SET 5,(HL)", | 515 | "SET 5,(HL)", |
517 | "SET 5,A", | 516 | "SET 5,A", |
518 | "SET 6,B", | 517 | "SET 6,B", |
519 | "SET 6,C", | 518 | "SET 6,C", |
520 | "SET 6,D", | 519 | "SET 6,D", |
521 | "SET 6,E", | 520 | "SET 6,E", |
522 | "SET 6,H", | 521 | "SET 6,H", |
523 | "SET 6,L", | 522 | "SET 6,L", |
524 | "SET 6,(HL)", | 523 | "SET 6,(HL)", |
525 | "SET 6,A", | 524 | "SET 6,A", |
526 | "SET 7,B", | 525 | "SET 7,B", |
527 | "SET 7,C", | 526 | "SET 7,C", |
528 | "SET 7,D", | 527 | "SET 7,D", |
529 | "SET 7,E", | 528 | "SET 7,E", |
530 | "SET 7,H", | 529 | "SET 7,H", |
531 | "SET 7,L", | 530 | "SET 7,L", |
532 | "SET 7,(HL)", | 531 | "SET 7,(HL)", |
533 | "SET 7,A" | 532 | "SET 7,A" |
534 | }; | 533 | }; |
535 | 534 | ||
536 | static byte operand_count[256] = | 535 | static byte operand_count[256] = |
537 | { | 536 | { |
538 | 1, 3, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 2, 1, | 537 | 1, 3, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 2, 1, |
539 | 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, | 538 | 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, |
540 | 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, | 539 | 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, |
541 | 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, | 540 | 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, |
542 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 541 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
543 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 542 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
544 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 543 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
545 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 544 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
546 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 545 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
547 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 546 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
548 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 547 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
549 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 548 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
550 | 1, 1, 3, 3, 3, 1, 2, 1, 1, 1, 3, 2, 3, 3, 2, 1, | 549 | 1, 1, 3, 3, 3, 1, 2, 1, 1, 1, 3, 2, 3, 3, 2, 1, |
551 | 1, 1, 3, 1, 3, 1, 2, 1, 1, 1, 3, 1, 3, 1, 2, 1, | 550 | 1, 1, 3, 1, 3, 1, 2, 1, 1, 1, 3, 1, 3, 1, 2, 1, |
552 | 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1, | 551 | 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1, |
553 | 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1 | 552 | 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1 |
554 | }; | 553 | }; |
555 | 554 | ||
556 | 555 | ||
@@ -560,116 +559,95 @@ int debug_trace = 0; | |||
560 | 559 | ||
561 | rcvar_t debug_exports[] = | 560 | rcvar_t debug_exports[] = |
562 | { | 561 | { |
563 | RCV_BOOL("trace", &debug_trace), | 562 | RCV_BOOL("trace", &debug_trace), |
564 | RCV_END | 563 | RCV_END |
565 | }; | 564 | }; |
566 | 565 | ||
567 | void debug_disassemble(addr a, int c) | 566 | void debug_disassemble(addr a, int c) |
568 | { | 567 | { |
569 | static int i, j, k; | 568 | static int i, j, k; |
570 | static byte code; | 569 | static byte code; |
571 | static byte ops[3]; | 570 | static byte ops[3]; |
572 | static int opaddr; | 571 | static int opaddr; |
573 | static char mnemonic[256]; | 572 | static char mnemonic[256]; |
574 | static char *pattern; | 573 | static char *pattern; |
575 | char meow[500],buf[300]; | 574 | char meow[500],buf[300]; |
576 | // int fd; | 575 | if(!debug_trace) return; |
577 | if(!debug_trace) return; | 576 | |
578 | // fd=open("/rockboy.trace",O_WRONLY|O_APPEND); | 577 | while (c > 0) |
579 | // if(fd<0) | 578 | { |
580 | // return; | 579 | k = 0; |
581 | 580 | opaddr = a; | |
582 | while (c > 0) | 581 | code = ops[k++] = readb(a); a++; |
583 | { | 582 | if (code != 0xCB) |
584 | k = 0; | 583 | { |
585 | opaddr = a; | 584 | pattern = mnemonic_table[code]; |
586 | code = ops[k++] = readb(a); a++; | 585 | if (!pattern) |
587 | if (code != 0xCB) | 586 | pattern = "***INVALID***"; |
588 | { | 587 | } |
589 | pattern = mnemonic_table[code]; | 588 | else |
590 | if (!pattern) | 589 | { |
591 | pattern = "***INVALID***"; | 590 | code = ops[k++] = readb(a); a++; |
592 | } | 591 | pattern = cb_mnemonic_table[code]; |
593 | else | 592 | } |
594 | { | 593 | i = j = 0; |
595 | code = ops[k++] = readb(a); a++; | 594 | while (pattern[i]) |
596 | pattern = cb_mnemonic_table[code]; | 595 | { |
597 | } | 596 | if (pattern[i] == '%') |
598 | i = j = 0; | 597 | { |
599 | while (pattern[i]) | 598 | switch (pattern[++i]) |
600 | { | 599 | { |
601 | if (pattern[i] == '%') | 600 | case 'B': |
602 | { | 601 | case 'b': |
603 | switch (pattern[++i]) | 602 | ops[k] = readb(a); a++; |
604 | { | 603 | j += snprintf(mnemonic + j,255-j, |
605 | case 'B': | 604 | "%02Xh", ops[k++]); |
606 | case 'b': | 605 | break; |
607 | ops[k] = readb(a); a++; | 606 | case 'W': |
608 | j += snprintf(mnemonic + j,255-j, | 607 | case 'w': |
609 | "%02Xh", ops[k++]); | 608 | ops[k] = readb(a); a++; |
610 | break; | 609 | ops[k+1] = readb(a); a++; |
611 | case 'W': | 610 | j += snprintf(mnemonic + j, 255-j,"%04Xh", |
612 | case 'w': | 611 | ((ops[k+1] << 8) | ops[k])); |
613 | ops[k] = readb(a); a++; | 612 | k += 2; |
614 | ops[k+1] = readb(a); a++; | 613 | break; |
615 | j += snprintf(mnemonic + j, 255-j,"%04Xh", | 614 | case 'O': |
616 | ((ops[k+1] << 8) | ops[k])); | 615 | case 'o': |
617 | k += 2; | 616 | ops[k] = readb(a); a++; |
618 | break; | 617 | j += snprintf(mnemonic + j, 255-j,"%+d", |
619 | case 'O': | 618 | (n8)(ops[k++])); |
620 | case 'o': | 619 | break; |
621 | ops[k] = readb(a); a++; | 620 | } |
622 | j += snprintf(mnemonic + j, 255-j,"%+d", | 621 | i++; |
623 | (n8)(ops[k++])); | 622 | } |
624 | break; | 623 | else |
625 | } | 624 | { |
626 | i++; | 625 | mnemonic[j++] = pattern[i++]; |
627 | } | 626 | } |
628 | else | 627 | } |
629 | { | 628 | mnemonic[j] = 0; |
630 | mnemonic[j++] = pattern[i++]; | 629 | snprintf(buf,299,"%04X ", opaddr); |
631 | } | 630 | strcpy(meow,buf); |
632 | } | 631 | switch (operand_count[ops[0]]) { |
633 | mnemonic[j] = 0; | 632 | case 1: |
634 | snprintf(buf,299,"%04X ", opaddr); | 633 | snprintf(buf,299,"%02X ", ops[0]); |
635 | strcpy(meow,buf); | 634 | strcat(meow,buf); |
636 | switch (operand_count[ops[0]]) { | 635 | break; |
637 | case 1: | 636 | case 2: |
638 | snprintf(buf,299,"%02X ", ops[0]); | 637 | snprintf(buf,299,"%02X %02X ", ops[0], ops[1]); |
639 | strcat(meow,buf); | 638 | strcat(meow,buf); |
640 | break; | 639 | break; |
641 | case 2: | 640 | case 3: |
642 | snprintf(buf,299,"%02X %02X ", ops[0], ops[1]); | 641 | snprintf(buf,299,"%02X %02X %02X ", ops[0], ops[1], ops[2]); |
643 | strcat(meow,buf); | 642 | strcat(meow,buf); |
644 | break; | 643 | break; |
645 | case 3: | 644 | } |
646 | snprintf(buf,299,"%02X %02X %02X ", ops[0], ops[1], ops[2]); | 645 | snprintf(buf,"%-16.16s", mnemonic); |
647 | strcat(meow,buf); | 646 | strcat(meow,buf); |
648 | break; | ||
649 | } | ||
650 | snprintf(buf,"%-16.16s", mnemonic); | ||
651 | strcat(meow,buf); | ||
652 | rb->lcd_putsxy(0,0,meow); | 647 | rb->lcd_putsxy(0,0,meow); |
653 | rb->lcd_update(); | 648 | rb->lcd_update(); |
654 | /* fprintf(fd, | 649 | c--; |
655 | " SP=%04X.%04X BC=%04X.%02X.%02X DE=%04X.%02X " | 650 | } |
656 | "HL=%04X.%02X A=%02X F=%02X %c%c%c%c%c", | ||
657 | SP, readw(SP), | ||
658 | BC, readb(BC), readb(0xFF00 | C), | ||
659 | DE, readb(DE), | ||
660 | HL, readb(HL), A, | ||
661 | F, (IME ? 'I' : '-'), | ||
662 | ((F & 0x80) ? 'Z' : '-'), | ||
663 | ((F & 0x40) ? 'N' : '-'), | ||
664 | ((F & 0x20) ? 'H' : '-'), | ||
665 | ((F & 0x10) ? 'C' : '-') | ||
666 | ); | ||
667 | fprintf(fd, | ||
668 | " IE=%02X IF=%02X LCDC=%02X STAT=%02X LY=%02X LYC=%02X", | ||
669 | R_IE, R_IF, R_LCDC, R_STAT, R_LY, R_LYC | ||
670 | );*/ | ||
671 | c--; | ||
672 | } | ||
673 | } | 651 | } |
674 | 652 | ||
675 | 653 | ||
diff --git a/apps/plugins/rockboy/dynarec.c b/apps/plugins/rockboy/dynarec.c index 6d424a047f..6ab1ec79b4 100644 --- a/apps/plugins/rockboy/dynarec.c +++ b/apps/plugins/rockboy/dynarec.c | |||
@@ -1,5 +1,3 @@ | |||
1 | #ifdef DYNAREC | ||
2 | #include <system.h> | ||
3 | #include "rockmacros.h" | 1 | #include "rockmacros.h" |
4 | #include "defs.h" | 2 | #include "defs.h" |
5 | #include "regs.h" | 3 | #include "regs.h" |
@@ -58,10 +56,10 @@ int blockclen; | |||
58 | DYNA_MOVEM(3,0x3FE,1); | 56 | DYNA_MOVEM(3,0x3FE,1); |
59 | 57 | ||
60 | /* | 58 | /* |
61 | * SUBQ 2, %a0 // decrease gb sp | 59 | * SUBQ 2, %a0 decrease gb sp |
62 | * PEA #(n) // push n | 60 | * PEA #(n) push n |
63 | * PUSH %a0 // push gb sp | 61 | * PUSH %a0 push gb sp |
64 | * call_native writew(SP, (n) | 62 | * call_native writew(SP, (n)) |
65 | * ADDQ 8, %a7 | 63 | * ADDQ 8, %a7 |
66 | */ | 64 | */ |
67 | #define PUSH(n) \ | 65 | #define PUSH(n) \ |
@@ -72,7 +70,7 @@ int blockclen; | |||
72 | DYNA_ADDQ_l_i_to_r(0,7,1); | 70 | DYNA_ADDQ_l_i_to_r(0,7,1); |
73 | 71 | ||
74 | /* | 72 | /* |
75 | * PUSH %a0 // push gb sp | 73 | * PUSH %a0 push gb sp |
76 | * call_native readw(SP); | 74 | * call_native readw(SP); |
77 | * addq 4, a7 | 75 | * addq 4, a7 |
78 | * addq 2, a0 | 76 | * addq 2, a0 |
@@ -133,21 +131,24 @@ int blockclen; | |||
133 | DYNA_ANDI_l_i_to_r(0xFF,1); | 131 | DYNA_ANDI_l_i_to_r(0xFF,1); |
134 | 132 | ||
135 | 133 | ||
136 | void DYNA_MOVE_b_r_to_r(un8 src,un8 dest) { | 134 | void DYNA_MOVE_b_r_to_r(un8 src,un8 dest) |
135 | { | ||
137 | DWRITEW(0x1000|(src&0x7)|(dest&0x7)<<9); | 136 | DWRITEW(0x1000|(src&0x7)|(dest&0x7)<<9); |
138 | } | 137 | } |
139 | 138 | ||
140 | void DYNA_ASHIFT_l(un8 src, un8 dest, int left, int src_is_reg) { | 139 | void DYNA_ASHIFT_l(un8 src, un8 dest, int left, int src_is_reg) |
140 | { | ||
141 | unsigned short opcode; | 141 | unsigned short opcode; |
142 | opcode=(0xE080)|((src&0x7)<<9)|(dest&0x7); | 142 | opcode=(0xE080)|((src&0x7)<<9)|(dest&0x7); |
143 | if(left) | 143 | if(left) |
144 | opcode|=0x100; | 144 | opcode|=0x100; |
145 | if(src_is_reg) | 145 | if(src_is_reg) |
146 | opcode|=0x20; | 146 | opcode|=0x20; |
147 | DWRITEW(opcode); | 147 | DWRITEW(opcode); |
148 | } | 148 | } |
149 | 149 | ||
150 | void DYNA_LSHIFT_l(un8 src, un8 dest, int left, int src_is_reg) { | 150 | void DYNA_LSHIFT_l(un8 src, un8 dest, int left, int src_is_reg) |
151 | { | ||
151 | unsigned short opcode=0xE088|((src&0x7)<<9)|(dest&0x7); | 152 | unsigned short opcode=0xE088|((src&0x7)<<9)|(dest&0x7); |
152 | if(left) | 153 | if(left) |
153 | opcode|=0x100; | 154 | opcode|=0x100; |
@@ -156,63 +157,74 @@ void DYNA_LSHIFT_l(un8 src, un8 dest, int left, int src_is_reg) { | |||
156 | DWRITEW(opcode); | 157 | DWRITEW(opcode); |
157 | } | 158 | } |
158 | 159 | ||
159 | void DYNA_MOVE_l_i_to_r(un32 imm, un8 dest) { | 160 | void DYNA_MOVE_l_i_to_r(un32 imm, un8 dest) |
161 | { | ||
160 | DWRITEW(0x203C|(dest&0x7)<<9); | 162 | DWRITEW(0x203C|(dest&0x7)<<9); |
161 | DWRITEL(imm); // endianness? | 163 | DWRITEL(imm); /* endianness? */ |
162 | } | 164 | } |
163 | 165 | ||
164 | void DYNA_MOVE_l_i_to_m(un32 imm, un8 dest_a) { | 166 | void DYNA_MOVE_l_i_to_m(un32 imm, un8 dest_a) |
167 | { | ||
165 | DWRITEW(0x20FC|((dest_a&0x7)<<9)); | 168 | DWRITEW(0x20FC|((dest_a&0x7)<<9)); |
166 | DWRITEL(imm); | 169 | DWRITEL(imm); |
167 | } | 170 | } |
168 | 171 | ||
169 | void DYNA_MOVE_l_r_to_m(un8 src,un8 dest_a) { | 172 | void DYNA_MOVE_l_r_to_m(un8 src,un8 dest_a) |
173 | { | ||
170 | DWRITEW(0x2080|(dest_a&0x7)<<9|(src&0x7)); | 174 | DWRITEW(0x2080|(dest_a&0x7)<<9|(src&0x7)); |
171 | } | 175 | } |
172 | 176 | ||
173 | void DYNA_MOVE_l_r_to_r(un8 src, un8 dest, int src_is_areg) { | 177 | void DYNA_MOVE_l_r_to_r(un8 src, un8 dest, int src_is_areg) |
178 | { | ||
174 | unsigned short opcode=0x2000|((dest&0x7)<<9)|(src&0x7); | 179 | unsigned short opcode=0x2000|((dest&0x7)<<9)|(src&0x7); |
175 | if(src_is_areg) | 180 | if(src_is_areg) |
176 | opcode|=0x8; | 181 | opcode|=0x8; |
177 | DWRITEW(opcode); | 182 | DWRITEW(opcode); |
178 | } | 183 | } |
179 | 184 | ||
180 | void DYNA_MOVE_w_r_to_r(un8 src, un8 dest, int src_is_areg) { | 185 | void DYNA_MOVE_w_r_to_r(un8 src, un8 dest, int src_is_areg) |
186 | { | ||
181 | unsigned short opcode=0x3000|((dest&0x7)<<9)|(src&0x7); | 187 | unsigned short opcode=0x3000|((dest&0x7)<<9)|(src&0x7); |
182 | if(src_is_areg) | 188 | if(src_is_areg) |
183 | opcode|=0x8; | 189 | opcode|=0x8; |
184 | DWRITEW(opcode); | 190 | DWRITEW(opcode); |
185 | } | 191 | } |
186 | 192 | ||
187 | void DYNA_MOVEQ_l_i_to_r(un8 imm, un8 dest) { | 193 | void DYNA_MOVEQ_l_i_to_r(un8 imm, un8 dest) |
194 | { | ||
188 | DWRITEW(0x7000|((dest&0x7)<<9)|imm); | 195 | DWRITEW(0x7000|((dest&0x7)<<9)|imm); |
189 | } | 196 | } |
190 | 197 | ||
191 | void DYNA_PEA_w_i(un16 imm) { | 198 | void DYNA_PEA_w_i(un16 imm) |
199 | { | ||
192 | DWRITEW(0x4878); | 200 | DWRITEW(0x4878); |
193 | DWRITEW(imm); | 201 | DWRITEW(imm); |
194 | } | 202 | } |
195 | 203 | ||
196 | void DYNA_PUSH_l_r(un8 reg,int src_is_areg) { | 204 | void DYNA_PUSH_l_r(un8 reg,int src_is_areg) |
205 | { | ||
197 | unsigned short value= 0x2F00|(reg&0x7); | 206 | unsigned short value= 0x2F00|(reg&0x7); |
198 | if(src_is_areg) | 207 | if(src_is_areg) |
199 | value|=0x8; | 208 | value|=0x8; |
200 | DWRITEW(value); | 209 | DWRITEW(value); |
201 | } | 210 | } |
202 | 211 | ||
203 | void DYNA_MOVEA_l_i_to_r(un32 imm, un8 dest) { | 212 | void DYNA_MOVEA_l_i_to_r(un32 imm, un8 dest) |
213 | { | ||
204 | DWRITEW(0x207C|(dest&0x7)<<9); | 214 | DWRITEW(0x207C|(dest&0x7)<<9); |
205 | DWRITEL(imm); | 215 | DWRITEL(imm); |
206 | } | 216 | } |
207 | 217 | ||
208 | void DYNA_MOVEA_w_r_to_r(un8 src, un8 dest, int src_is_areg) { | 218 | void DYNA_MOVEA_w_r_to_r(un8 src, un8 dest, int src_is_areg) |
219 | { | ||
209 | unsigned short value=0x3040|((dest&0x7)<<9)|(src&0x7); | 220 | unsigned short value=0x3040|((dest&0x7)<<9)|(src&0x7); |
210 | if(src_is_areg) | 221 | if(src_is_areg) |
211 | value|=0x8; | 222 | value|=0x8; |
212 | DWRITEW(value); | 223 | DWRITEW(value); |
213 | } | 224 | } |
214 | 225 | ||
215 | void DYNA_MOVEA_l_r_to_r(un8 src, un8 dest, int src_is_areg) { | 226 | void DYNA_MOVEA_l_r_to_r(un8 src, un8 dest, int src_is_areg) |
227 | { | ||
216 | unsigned short value=0x2040|((dest&0x7)<<9)|(src&0x7); | 228 | unsigned short value=0x2040|((dest&0x7)<<9)|(src&0x7); |
217 | if(src_is_areg) | 229 | if(src_is_areg) |
218 | value|=0x8; | 230 | value|=0x8; |
@@ -220,67 +232,80 @@ void DYNA_MOVEA_l_r_to_r(un8 src, un8 dest, int src_is_areg) { | |||
220 | } | 232 | } |
221 | 233 | ||
222 | 234 | ||
223 | void DYNA_RET() { | 235 | void DYNA_RET(void) |
236 | { | ||
224 | DWRITEW(0x4E75); | 237 | DWRITEW(0x4E75); |
225 | } | 238 | } |
226 | 239 | ||
227 | void DYNA_AND_l_i_to_r(un32 imm, un8 dest) { | 240 | void DYNA_AND_l_i_to_r(un32 imm, un8 dest) |
241 | { | ||
228 | DWRITEW(0x0280|(dest&0x7)); | 242 | DWRITEW(0x0280|(dest&0x7)); |
229 | DWRITEL(imm); | 243 | DWRITEL(imm); |
230 | } | 244 | } |
231 | 245 | ||
232 | void DYNA_AND_l_r_to_r(un8 src,un8 dest) { | 246 | void DYNA_AND_l_r_to_r(un8 src,un8 dest) |
247 | { | ||
233 | DWRITEW(0xC080|((dest&0x7)<<9)|(src&0x7)); | 248 | DWRITEW(0xC080|((dest&0x7)<<9)|(src&0x7)); |
234 | } | 249 | } |
235 | 250 | ||
236 | void DYNA_OR_l_r_to_r(un8 src,un8 dest) { | 251 | void DYNA_OR_l_r_to_r(un8 src,un8 dest) |
252 | { | ||
237 | DWRITEW(0x8080|((dest&0x7)<<9)|(src&0x7)); | 253 | DWRITEW(0x8080|((dest&0x7)<<9)|(src&0x7)); |
238 | } | 254 | } |
239 | 255 | ||
240 | void DYNA_OR_l_i_to_r(un32 imm,un8 dest) { | 256 | void DYNA_OR_l_i_to_r(un32 imm,un8 dest) |
257 | { | ||
241 | DWRITEW(0x0080|(dest&0x7)); | 258 | DWRITEW(0x0080|(dest&0x7)); |
242 | DWRITEL(imm); | 259 | DWRITEL(imm); |
243 | } | 260 | } |
244 | 261 | ||
245 | void DYNA_CLR_l_m(un32 addr) { | 262 | void DYNA_CLR_l_m(un32 addr) |
263 | { | ||
246 | DWRITEW(0x42B9); | 264 | DWRITEW(0x42B9); |
247 | DWRITEL(addr); | 265 | DWRITEL(addr); |
248 | } | 266 | } |
249 | 267 | ||
250 | void DYNA_CLR_l_r(un8 reg) { | 268 | void DYNA_CLR_l_r(un8 reg) |
269 | { | ||
251 | DWRITEW(0x4280|(reg&0x7)); | 270 | DWRITEW(0x4280|(reg&0x7)); |
252 | } | 271 | } |
253 | 272 | ||
254 | void DYNA_CLR_w_r(un8 reg) { | 273 | void DYNA_CLR_w_r(un8 reg) |
274 | { | ||
255 | DWRITEW(0x42C0|(reg&0x7)); | 275 | DWRITEW(0x42C0|(reg&0x7)); |
256 | } | 276 | } |
257 | 277 | ||
258 | 278 | ||
259 | void DYNA_CLR_b_r(un8 reg) { | 279 | void DYNA_CLR_b_r(un8 reg) |
280 | { | ||
260 | DWRITEW(0x4200|(reg&0x7)); | 281 | DWRITEW(0x4200|(reg&0x7)); |
261 | } | 282 | } |
262 | 283 | ||
263 | 284 | ||
264 | void DYNA_ADDQ_l_i_to_r(un8 imm, un8 reg, int dest_is_a) { | 285 | void DYNA_ADDQ_l_i_to_r(un8 imm, un8 reg, int dest_is_a) |
286 | { | ||
265 | unsigned short value=0x5080|(imm&0x7)<<9|(reg&0x7); | 287 | unsigned short value=0x5080|(imm&0x7)<<9|(reg&0x7); |
266 | if(dest_is_a) | 288 | if(dest_is_a) |
267 | value|=0x8; | 289 | value|=0x8; |
268 | DWRITEW(value); | 290 | DWRITEW(value); |
269 | } | 291 | } |
270 | 292 | ||
271 | void DYNA_ADD_l_r_to_r(un8 src, un8 dest, int src_is_areg) { | 293 | void DYNA_ADD_l_r_to_r(un8 src, un8 dest, int src_is_areg) |
294 | { | ||
272 | unsigned short value=0xD080|((dest&0x7)<<9)|(src&0x7); | 295 | unsigned short value=0xD080|((dest&0x7)<<9)|(src&0x7); |
273 | if(src_is_areg) | 296 | if(src_is_areg) |
274 | value|=0x8; | 297 | value|=0x8; |
275 | DWRITEW(value); | 298 | DWRITEW(value); |
276 | } | 299 | } |
277 | 300 | ||
278 | void DYNA_JSR(void *addr) { | 301 | void DYNA_JSR(void *addr) |
302 | { | ||
279 | DWRITEW(0x4EB9); | 303 | DWRITEW(0x4EB9); |
280 | DWRITEL(addr); | 304 | DWRITEL(addr); |
281 | } | 305 | } |
282 | 306 | ||
283 | void DYNA_MOVEM(un8 areg,un16 mask, int frommem) { | 307 | void DYNA_MOVEM(un8 areg,un16 mask, int frommem) |
308 | { | ||
284 | unsigned short value=0x48D0|(areg&0x7); | 309 | unsigned short value=0x48D0|(areg&0x7); |
285 | if(frommem) | 310 | if(frommem) |
286 | value|=0x400; | 311 | value|=0x400; |
@@ -288,27 +313,32 @@ void DYNA_MOVEM(un8 areg,un16 mask, int frommem) { | |||
288 | DWRITEW(mask); | 313 | DWRITEW(mask); |
289 | } | 314 | } |
290 | 315 | ||
291 | void DYNA_SUBQ_l_i_to_r(un8 imm, un8 reg, int addr_reg) { | 316 | void DYNA_SUBQ_l_i_to_r(un8 imm, un8 reg, int addr_reg) |
317 | { | ||
292 | unsigned short value=0x5180|(reg&0x7)|((imm&0x7)<<9); | 318 | unsigned short value=0x5180|(reg&0x7)|((imm&0x7)<<9); |
293 | if(addr_reg) | 319 | if(addr_reg) |
294 | value|=0x8; | 320 | value|=0x8; |
295 | DWRITEW(value); | 321 | DWRITEW(value); |
296 | } | 322 | } |
297 | 323 | ||
298 | void DYNA_SUB_l_r_to_r(un8 src, un8 dest, int is_areg) { | 324 | void DYNA_SUB_l_r_to_r(un8 src, un8 dest, int is_areg) |
325 | { | ||
299 | unsigned short value=0x9080|((dest&0x7)<<9)|(src&0x7); | 326 | unsigned short value=0x9080|((dest&0x7)<<9)|(src&0x7); |
300 | if(is_areg) | 327 | if(is_areg) |
301 | value|=0x8; | 328 | value|=0x8; |
302 | DWRITEW(value); | 329 | DWRITEW(value); |
303 | } | 330 | } |
304 | 331 | ||
305 | void DYNA_EXT_l(un8 reg) { | 332 | void DYNA_EXT_l(un8 reg) |
333 | { | ||
306 | DWRITEW(0x48C0|(reg&0x7)); | 334 | DWRITEW(0x48C0|(reg&0x7)); |
307 | } | 335 | } |
308 | 336 | ||
309 | void DYNA_BCC_c(un8 cond, int size,int i) { | 337 | void DYNA_BCC_c(un8 cond, int size,int i) |
338 | { | ||
310 | un32 displace=dynapointer-branchp[i]; | 339 | un32 displace=dynapointer-branchp[i]; |
311 | if(!branchp[i]) { | 340 | if(!branchp[i]) |
341 | { | ||
312 | die("Dynarec error! BCC trying to write branch without dummy"); | 342 | die("Dynarec error! BCC trying to write branch without dummy"); |
313 | return; | 343 | return; |
314 | } | 344 | } |
@@ -316,7 +346,8 @@ void DYNA_BCC_c(un8 cond, int size,int i) { | |||
316 | die("Dynarec error! BCC invalid displacement"); | 346 | die("Dynarec error! BCC invalid displacement"); |
317 | else if(displace>0&&displace<0x7F) | 347 | else if(displace>0&&displace<0x7F) |
318 | *( (unsigned short *) branchp[i])=0x6000|((cond&0xF)<<8)|(displace&0xFF); | 348 | *( (unsigned short *) branchp[i])=0x6000|((cond&0xF)<<8)|(displace&0xFF); |
319 | else if(displace>0x7F&&displace<0x7FFF) { | 349 | else if(displace>0x7F&&displace<0x7FFF) |
350 | { | ||
320 | *( (unsigned short *) branchp[i])=0x6000|((cond&0xF)<<8); | 351 | *( (unsigned short *) branchp[i])=0x6000|((cond&0xF)<<8); |
321 | branchp[i]+=2; | 352 | branchp[i]+=2; |
322 | *( (unsigned short *) branchp[i])=displace; | 353 | *( (unsigned short *) branchp[i])=displace; |
@@ -327,19 +358,22 @@ void DYNA_BCC_c(un8 cond, int size,int i) { | |||
327 | branchp[i]=0; | 358 | branchp[i]=0; |
328 | } | 359 | } |
329 | 360 | ||
330 | void DYNA_DUMMYBRANCH(int size,int i) { | 361 | void DYNA_DUMMYBRANCH(int size,int i) |
362 | { | ||
331 | branchp[i]=dynapointer; | 363 | branchp[i]=dynapointer; |
332 | dynapointer+=size; | 364 | dynapointer+=size; |
333 | } | 365 | } |
334 | 366 | ||
335 | void DYNA_TST_l_r(un8 reg,int is_areg) { | 367 | void DYNA_TST_l_r(un8 reg,int is_areg) |
368 | { | ||
336 | unsigned short opcode=0x4A80|(reg&0x7); | 369 | unsigned short opcode=0x4A80|(reg&0x7); |
337 | if(is_areg) | 370 | if(is_areg) |
338 | opcode|=0x8; | 371 | opcode|=0x8; |
339 | DWRITEW(opcode); | 372 | DWRITEW(opcode); |
340 | } | 373 | } |
341 | 374 | ||
342 | void DYNA_TST_b_r(un8 reg,int is_areg) { | 375 | void DYNA_TST_b_r(un8 reg,int is_areg) |
376 | { | ||
343 | unsigned short opcode=0x4A00|(reg&0x7); | 377 | unsigned short opcode=0x4A00|(reg&0x7); |
344 | if(is_areg) | 378 | if(is_areg) |
345 | opcode|=0x8; | 379 | opcode|=0x8; |
@@ -347,33 +381,40 @@ void DYNA_TST_b_r(un8 reg,int is_areg) { | |||
347 | } | 381 | } |
348 | 382 | ||
349 | 383 | ||
350 | void DYNA_BTST_l_r(un8 bit, un8 reg) { | 384 | void DYNA_BTST_l_r(un8 bit, un8 reg) |
385 | { | ||
351 | DWRITEW(0x0800|(reg&0x7)); | 386 | DWRITEW(0x0800|(reg&0x7)); |
352 | DWRITEW(bit); | 387 | DWRITEW(bit); |
353 | } | 388 | } |
354 | 389 | ||
355 | void DYNA_NEG_l(un8 reg) { | 390 | void DYNA_NEG_l(un8 reg) |
391 | { | ||
356 | DWRITEW(0x4480|(reg&0x7)); | 392 | DWRITEW(0x4480|(reg&0x7)); |
357 | } | 393 | } |
358 | 394 | ||
359 | void DYNA_XOR_l_r_to_r(un8 src, un8 dest) { | 395 | void DYNA_XOR_l_r_to_r(un8 src, un8 dest) |
396 | { | ||
360 | DWRITEW(0xB180|((dest&0x7)<<9)|(src&0x7)); | 397 | DWRITEW(0xB180|((dest&0x7)<<9)|(src&0x7)); |
361 | } | 398 | } |
362 | 399 | ||
363 | void DYNA_SET_b_r(un8 src, un8 cond) { | 400 | void DYNA_SET_b_r(un8 src, un8 cond) |
401 | { | ||
364 | DWRITEW(0x50C0|((cond)&0xF)<<8|(src&0x7)); | 402 | DWRITEW(0x50C0|((cond)&0xF)<<8|(src&0x7)); |
365 | } | 403 | } |
366 | 404 | ||
367 | void DYNA_INC_l_r(un8 dest,int is_areg) { | 405 | void DYNA_INC_l_r(un8 dest,int is_areg) |
406 | { | ||
368 | DYNA_ADDQ_l_i_to_r(1,dest,is_areg); | 407 | DYNA_ADDQ_l_i_to_r(1,dest,is_areg); |
369 | } | 408 | } |
370 | 409 | ||
371 | void DYNA_DEC_l_r(un8 dest,int is_areg) { | 410 | void DYNA_DEC_l_r(un8 dest,int is_areg) |
411 | { | ||
372 | DYNA_SUBQ_l_i_to_r(1,dest,is_areg); | 412 | DYNA_SUBQ_l_i_to_r(1,dest,is_areg); |
373 | } | 413 | } |
374 | 414 | ||
375 | 415 | ||
376 | void dynamic_recompile (struct dynarec_block *newblock) { | 416 | void dynamic_recompile (struct dynarec_block *newblock) |
417 | { | ||
377 | int done=0,writepc=1,fd; | 418 | int done=0,writepc=1,fd; |
378 | byte op; | 419 | byte op; |
379 | unsigned int oldpc=PC; | 420 | unsigned int oldpc=PC; |
@@ -385,581 +426,1472 @@ void dynamic_recompile (struct dynarec_block *newblock) { | |||
385 | #ifdef DYNA_DEBUG | 426 | #ifdef DYNA_DEBUG |
386 | snprintf(meow,499,"/dyna_0x%x_asm.rb",PC); | 427 | snprintf(meow,499,"/dyna_0x%x_asm.rb",PC); |
387 | fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC); | 428 | fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC); |
388 | if(fd<0) { | 429 | if(fd<0) |
389 | die("couldn't open dyna debug file"); | 430 | { |
431 | die("couldn't open dyna debug file"); | ||
390 | return; | 432 | return; |
391 | } | 433 | } |
392 | #endif | 434 | #endif |
393 | snprintf(meow,499,"Recompiling 0x%x",oldpc); | 435 | snprintf(meow,499,"Recompiling 0x%x",oldpc); |
394 | rb->splash(HZ*1,1,meow); | 436 | rb->splash(HZ*1,1,meow); |
395 | while(!done) { | 437 | while(!done) |
438 | { | ||
439 | #ifdef DYNA_DEBUG | ||
440 | fdprintf(fd,"0x%x: ",PC); | ||
441 | #endif | ||
442 | op=FETCH; | ||
443 | clen = cycles_table[op]; | ||
444 | tclen+=clen; | ||
445 | switch(op) { | ||
446 | case 0x00: /* NOP */ | ||
447 | break; | ||
448 | case 0x01: /* LD BC,imm */ | ||
449 | /* warning (do we have endianness right?) */ | ||
450 | #ifdef DYNA_DEBUG | ||
451 | fdprintf(fd,"LD BC,#0x%x\n",readw(xPC)); | ||
452 | #endif | ||
453 | temp=readw(xPC); | ||
454 | DYNA_MOVEQ_l_i_to_r((temp&0xFF00)>>8,2); | ||
455 | DYNA_MOVEQ_l_i_to_r(temp&0xFF,3); | ||
456 | PC+=2; | ||
457 | break; | ||
458 | case 0x02: /* LD (BC),A */ | ||
396 | #ifdef DYNA_DEBUG | 459 | #ifdef DYNA_DEBUG |
397 | fdprintf(fd,"0x%x: ",PC); | 460 | fdprintf(fd, "LD (BC),A\n"); |
398 | #endif | 461 | #endif |
399 | op=FETCH; | 462 | break; /* FIXME: Implement */ |
400 | clen = cycles_table[op]; | 463 | case 0x03: /* INC BC */ |
401 | tclen+=clen; | 464 | #ifdef DYNA_DEBUG |
402 | switch(op) { | 465 | fdprintf(fd, "INC BC\n"); |
403 | case 0x00: /* NOP */ | 466 | #endif |
404 | case 0x40: /* LD B,B */ | 467 | break; /* FIXME: Implement */ |
405 | case 0x49: /* LD C,C */ | 468 | case 0x04: /* INC B */ |
406 | case 0x52: /* LD D,D */ | 469 | #ifdef DYNA_DEBUG |
407 | case 0x5B: /* LD E,E */ | 470 | fdprintf(fd, "INC B\n"); |
408 | case 0x64: /* LD H,H */ | 471 | #endif |
409 | case 0x6D: /* LD L,L */ | 472 | DYNA_INC_l_r(2,0); /* Is this right? */ |
410 | case 0x7F: /* LD A,A */ | 473 | break; |
411 | break; | 474 | case 0x05: /* DEC B */ |
412 | 475 | #ifdef DYNA_DEBUG | |
413 | case 0x0B: /* DEC BC* | 476 | fdprintf(fd, "DEC B\n"); |
477 | #endif | ||
478 | DYNA_DEC_l_r(2,0); /* Is this right? */ | ||
479 | break; | ||
480 | case 0x06: /* LD B,imm */ | ||
481 | #ifdef DYNA_DEBUG | ||
482 | fdprintf(fd,"LD B,#0x%x\n",readb(xPC)); | ||
483 | #endif | ||
484 | DYNA_MOVEQ_l_i_to_r(FETCH,2); | ||
485 | break; | ||
486 | case 0x07: /* RLCA */ | ||
487 | #ifdef DYNA_DEBUG | ||
488 | fdprintf(fd, "RLCA\n"); | ||
489 | #endif | ||
490 | break; /* FIXME: Implement */ | ||
491 | case 0x08: /* LD imm,SP */ | ||
492 | #ifdef DYNA_DEBUG | ||
493 | fdprintf(fd, "LD imm,SP\n"); | ||
494 | #endif | ||
495 | break; /* FIXME: Implement */ | ||
496 | case 0x09: /* ADD HL,BC */ | ||
497 | #ifdef DYNA_DEBUG | ||
498 | fdprintf(fd, "ADD HL,BC\n"); | ||
499 | #endif | ||
500 | break; /* FIXME: Implement */ | ||
501 | case 0x0A: /* LD A,(BC) */ | ||
502 | #ifdef DYNA_DEBUG | ||
503 | fdprintf(fd, "LD A,(BC)\n"); | ||
504 | #endif | ||
505 | break; /* FIXME: Implement */ | ||
506 | case 0x0B: /* DEC BC */ | ||
507 | #ifdef DYNA_DEBUG | ||
508 | fdprintf(fd,"DEC BC\n"); | ||
509 | #endif | ||
510 | DYNA_TST_b_r(3,0); /* test C */ | ||
511 | DYNA_DUMMYBRANCH(2,0); | ||
512 | DYNA_DEC_l_r(2,0); /* dec B */ | ||
513 | DYNA_BCC_c(0x6,2,0); /* jump here if not zero */ | ||
514 | DYNA_DEC_l_r(3,0); /* dec C */ | ||
515 | break; | ||
516 | case 0x0C: /* INC C */ | ||
517 | #ifdef DYNA_DEBUG | ||
518 | fdprintf(fd, "INC C\n"); | ||
519 | #endif | ||
520 | DYNA_INC_l_r(3,0); /* Is this right? */ | ||
521 | break; | ||
522 | case 0x0D: /* DEC C */ | ||
523 | #ifdef DYNA_DEBUG | ||
524 | fdprintf(fd, "DEC C\n"); | ||
525 | #endif | ||
526 | DYNA_DEC_l_r(3,0); /* Is this right? */ | ||
527 | break; | ||
528 | case 0x0E: /* LD C,imm */ | ||
529 | #ifdef DYNA_DEBUG | ||
530 | fdprintf(fd,"LD C,#0x%x\n",readb(xPC)); | ||
531 | #endif | ||
532 | DYNA_MOVEQ_l_i_to_r(FETCH,3); | ||
533 | break; | ||
534 | case 0x0F: /* RRCA */ | ||
535 | #ifdef DYNA_DEBUG | ||
536 | fdprintf(fd, "RRCA\n"); | ||
537 | #endif | ||
538 | break; /* FIXME: Implement */ | ||
539 | case 0x10: /* STOP */ | ||
540 | #ifdef DYNA_DEBUG | ||
541 | fdprintf(fd, "STOP\n"); | ||
542 | #endif | ||
543 | break; /* FIXME: Implement */ | ||
544 | case 0x11: /* LD DE,imm */ | ||
545 | #ifdef DYNA_DEBUG | ||
546 | fdprintf(fd,"LD DE,#0x%x\n",readw(xPC)); | ||
547 | #endif | ||
548 | temp=readw(xPC); | ||
549 | DYNA_MOVEQ_l_i_to_r((temp&0xFF00)>>8,4); | ||
550 | DYNA_MOVEQ_l_i_to_r(temp&0xFF,5); | ||
551 | PC += 2; | ||
552 | break; | ||
553 | case 0x12: /* LD (DE),A */ | ||
554 | #ifdef DYNA_DEBUG | ||
555 | fdprintf(fd, "LD (DE),A\n"); | ||
556 | #endif | ||
557 | break; /* FIXME: Implement */ | ||
558 | case 0x13: /* INC DE */ | ||
559 | #ifdef DYNA_DEBUG | ||
560 | fdprintf(fd, "INC DE\n"); | ||
561 | #endif | ||
562 | break; /* FIXME: Implement */ | ||
563 | case 0x14: /* INC D */ | ||
564 | #ifdef DYNA_DEBUG | ||
565 | fdprintf(fd, "INC D\n"); | ||
566 | #endif | ||
567 | DYNA_INC_l_r(4,0); /* Is this right? */ | ||
568 | break; | ||
569 | case 0x15: /* DEC D */ | ||
570 | #ifdef DYNA_DEBUG | ||
571 | fdprintf(fd, "DEC D\n"); | ||
572 | #endif | ||
573 | DYNA_DEC_l_r(4,0); /* Is this right? */ | ||
574 | break; | ||
575 | case 0x16: /* LD D,imm */ | ||
576 | #ifdef DYNA_DEBUG | ||
577 | fdprintf(fd,"LD D,#0x%x\n",readb(xPC)); | ||
578 | #endif | ||
579 | DYNA_MOVEQ_l_i_to_r(FETCH,4); | ||
580 | break; | ||
581 | case 0x17: /* RLA */ | ||
582 | #ifdef DYNA_DEBUG | ||
583 | fdprintf(fd, "RLA\n"); | ||
584 | #endif | ||
585 | break; /* FIXME: Implement */ | ||
586 | case 0x18: /* JR */ | ||
587 | #ifdef DYNA_DEBUG | ||
588 | fdprintf(fd, "JR\n"); | ||
589 | #endif | ||
590 | break; /* FIXME: Implement */ | ||
591 | case 0x19: /* ADD HL,DE */ | ||
592 | #ifdef DYNA_DEBUG | ||
593 | fdprintf(fd, "ADD HL,DE\n"); | ||
594 | #endif | ||
595 | break; /* FIXME: Implement */ | ||
596 | case 0x1A: /* LD A,(DE) */ | ||
597 | #ifdef DYNA_DEBUG | ||
598 | fdprintf(fd, "LD A,(DE)\n"); | ||
599 | #endif | ||
600 | break; /* FIXME: Implement */ | ||
601 | case 0x1B: /* DEC DE */ | ||
602 | #ifdef DYNA_DEBUG | ||
603 | fdprintf(fd,"DEC DE\n"); | ||
604 | #endif | ||
605 | DYNA_TST_b_r(5,0); /* test E */ | ||
606 | DYNA_DUMMYBRANCH(4,0); | ||
607 | DYNA_DEC_l_r(4,0); /* dec D */ | ||
608 | DYNA_BCC_c(0x6,4,0); /* jump here if not zero */ | ||
609 | DYNA_DEC_l_r(5,0); /* dec E */ | ||
610 | break; | ||
611 | case 0x1C: /* INC E */ | ||
612 | #ifdef DYNA_DEBUG | ||
613 | fdprintf(fd, "INC E\n"); | ||
614 | #endif | ||
615 | DYNA_INC_l_r(5,0); /* Is this right? */ | ||
616 | break; | ||
617 | case 0x1D: /* DEC E */ | ||
618 | #ifdef DYNA_DEBUG | ||
619 | fdprintf(fd, "DEC E\n"); | ||
620 | #endif | ||
621 | DYNA_DEC_l_r(5,0); /* Is this right? */ | ||
622 | break; | ||
623 | case 0x1E: /* LD E,imm */ | ||
624 | #ifdef DYNA_DEBUG | ||
625 | fdprintf(fd,"LD E,#0x%x\n",readb(xPC)); | ||
626 | #endif | ||
627 | DYNA_MOVEQ_l_i_to_r(FETCH,5); | ||
628 | break; | ||
629 | case 0x1F: /* RRA */ | ||
630 | #ifdef DYNA_DEBUG | ||
631 | fdprintf(fd, "RRA\n"); | ||
632 | #endif | ||
633 | break; /* FIXME: Implement */ | ||
634 | case 0x20: /* JR NZ */ | ||
635 | #ifdef DYNA_DEBUG | ||
636 | fdprintf(fd,"JR NZ\n"); | ||
637 | #endif | ||
638 | DYNA_BTST_l_r(8,7); /* btst #8,d7 */ | ||
639 | DYNA_DUMMYBRANCH(2,0); | ||
640 | DYNA_MOVEA_l_i_to_r(&blockclen,3); | ||
641 | DYNA_MOVE_l_i_to_m(tclen,3); | ||
642 | DYNA_MOVEA_l_i_to_r(PC+1+(signed char)readb(PC),1); | ||
643 | DYNA_RET(); | ||
644 | DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */ | ||
645 | tclen--; | ||
646 | PC++; | ||
647 | break; | ||
648 | case 0x21: /* LD HL,imm */ | ||
649 | #ifdef DYNA_DEBUG | ||
650 | fdprintf(fd,"LD HL,#0x%x\n",readw(xPC)); | ||
651 | #endif | ||
652 | DYNA_MOVE_l_i_to_r(readw(xPC),6); | ||
653 | PC += 2; | ||
654 | break; | ||
655 | case 0x22: /* LDI (HL), A */ | ||
656 | #ifdef DYNA_DEBUG | ||
657 | fdprintf(fd,"LDI (HL),A\n"); | ||
658 | #endif | ||
659 | /* DYNA_PUSH_l_r(1,0); | ||
660 | DYNA_PUSH_l_r(6,0); | ||
661 | CALL_NATIVE(&writeb); | ||
662 | DYNA_ADDQ_l_i_to_r(0,7,1); | ||
663 | DYNA_INC_l_r(6,0);*/ | ||
664 | break; | ||
665 | case 0x23: /* INC HL */ | ||
666 | #ifdef DYNA_DEBUG | ||
667 | fdprintf(fd, "INC HL\n"); | ||
668 | #endif | ||
669 | break; /* FIXME: Implement */ | ||
670 | case 0x24: /* INC H */ | ||
671 | #ifdef DYNA_DEBUG | ||
672 | fdprintf(fd, "INC H\n"); | ||
673 | #endif | ||
674 | break; /* FIXME: Implement */ | ||
675 | case 0x25: /* DEC H */ | ||
676 | #ifdef DYNA_DEBUG | ||
677 | fdprintf(fd, "DEC H\n"); | ||
678 | #endif | ||
679 | break; /* FIXME: Implement */ | ||
680 | case 0x26: /* LD H,imm */ | ||
681 | #ifdef DYNA_DEBUG | ||
682 | fdprintf(fd,"LD H,#0x%x\n",readb(xPC)); | ||
683 | #endif | ||
684 | DYNA_AND_l_i_to_r(0xFF,6); | ||
685 | DYNA_OR_l_i_to_r(FETCH<<8,6); | ||
686 | break; | ||
687 | case 0x27: /* DAA */ | ||
688 | #ifdef DYNA_DEBUG | ||
689 | fdprintf(fd, "DAA\n"); | ||
690 | #endif | ||
691 | break; /* FIXME: Implement */ | ||
692 | case 0x28: /* JR Z */ | ||
693 | #ifdef DYNA_DEBUG | ||
694 | fdprintf(fd, "JR Z\n"); | ||
695 | #endif | ||
696 | break; /* FIXME: Implement */ | ||
697 | case 0x29: /* ADD HL, HL */ | ||
414 | #ifdef DYNA_DEBUG | 698 | #ifdef DYNA_DEBUG |
415 | fdprintf(fd,"DEC BC\n"); | 699 | fdprintf(fd, "ADD HL,HL\n"); |
416 | #endif | 700 | #endif |
417 | DYNA_TST_b_r(3); // test C | 701 | break; /* FIXME: Implement */ |
418 | DYNA_DUMMYBRANCH(2,0); | 702 | case 0x2A: /* LD A,(HLI) */ |
419 | DYNA_DEC_l_r(2,0); // dec B | ||
420 | DYNA_BCC_c(0x6,2,0); //jump here if not zero | ||
421 | DYNA_DEC_l_r(3,0); // dec C | ||
422 | break; | ||
423 | case 0x41: /* LD B,C */ | ||
424 | #ifdef DYNA_DEBUG | 703 | #ifdef DYNA_DEBUG |
425 | fdprintf(fd,"LD B,C\n"); | 704 | fdprintf(fd, "LD A,(HLI)\n"); |
426 | #endif | 705 | #endif |
427 | DYNA_MOVE_b_r_to_r(3,2); | 706 | break; /* FIXME: Implement */ |
428 | break; | 707 | case 0x2B: /* DEC HL */ |
429 | case 0x42: /* LD B,D */ | ||
430 | #ifdef DYNA_DEBUG | 708 | #ifdef DYNA_DEBUG |
431 | fdprintf(fd,"LD B,D\n"); | 709 | fdprintf(fd, "DEC HL\n"); |
432 | #endif | 710 | #endif |
433 | DYNA_MOVE_b_r_to_r(4,2); | 711 | break; /* FIXME: Implement */ |
434 | break; | 712 | case 0x2C: /* INC L */ |
435 | case 0x43: /* LD B,E */ | 713 | #ifdef DYNA_DEBUG |
714 | fdprintf(fd, "INC L\n"); | ||
715 | #endif | ||
716 | break; /* FIXME: Implement */ | ||
717 | case 0x2D: /* DEC L */ | ||
718 | #ifdef DYNA_DEBUG | ||
719 | fdprintf(fd, "DEC L\n"); | ||
720 | #endif | ||
721 | break; /* FIXME: Implement */ | ||
722 | case 0x2E: /* LD L,imm */ | ||
436 | #ifdef DYNA_DEBUG | 723 | #ifdef DYNA_DEBUG |
437 | fdprintf(fd,"LD B,E\n"); | 724 | fdprintf(fd,"LD L,#0x%x\n",readb(xPC)); |
725 | #endif | ||
726 | DYNA_AND_l_i_to_r(0xFF00,6); | ||
727 | DYNA_OR_l_i_to_r(FETCH,6); | ||
728 | break; | ||
729 | case 0x2F: /* CPL */ | ||
730 | #ifdef DYNA_DEBUG | ||
731 | fdprintf(fd, "CPL\n"); | ||
732 | #endif | ||
733 | break; /* FIXME: Implement */ | ||
734 | case 0x30: /* JR NC */ | ||
735 | #ifdef DYNA_DEBUG | ||
736 | fdprintf(fd, "JR NC\n"); | ||
737 | #endif | ||
738 | break; /* FIXME: Implement */ | ||
739 | case 0x31: /* LD SP,imm */ | ||
740 | #ifdef DYNA_DEBUG | ||
741 | fdprintf(fd,"LD SP,#0x%x\n",readw(xPC)); | ||
742 | #endif | ||
743 | DYNA_MOVEA_l_i_to_r(readw(xPC),0); | ||
744 | PC += 2; | ||
745 | break; | ||
746 | case 0x32: /* LD (HLD),A */ | ||
747 | #ifdef DYNA_DEBUG | ||
748 | fdprintf(fd, "LD (HLD),A\n"); | ||
749 | #endif | ||
750 | break; /* FIXME: Implement */ | ||
751 | case 0x33: /* INC SP */ | ||
752 | #ifdef DYNA_DEBUG | ||
753 | fdprintf(fd, "INC SP\n"); | ||
438 | #endif | 754 | #endif |
439 | DYNA_MOVE_b_r_to_r(5,2); | 755 | break; /* FIXME: Implement */ |
440 | break; | 756 | case 0x34: /* INC (HL) */ |
441 | case 0x44: /* LD B,H */ | 757 | #ifdef DYNA_DEBUG |
758 | fdprintf(fd, "INC (HL)\n"); | ||
759 | #endif | ||
760 | break; /* FIXME: Implement */ | ||
761 | case 0x35: /* DEC (HL) */ | ||
762 | #ifdef DYNA_DEBUG | ||
763 | fdprintf(fd, "DEC (HL)\n"); | ||
764 | #endif | ||
765 | break; /* FIXME: Implement */ | ||
766 | case 0x36: /* LD (HD),imm */ | ||
767 | #ifdef DYNA_DEBUG | ||
768 | fdprintf(fd, "LD (HD),imm\n"); | ||
769 | #endif | ||
770 | break; /* FIXME: Implement */ | ||
771 | case 0x37: /* SCF */ | ||
772 | #ifdef DYNA_DEBUG | ||
773 | fdprintf(fd, "SCF\n"); | ||
774 | #endif | ||
775 | break; /* FIXME: Implement */ | ||
776 | case 0x38: /* JR C */ | ||
777 | #ifdef DYNA_DEBUG | ||
778 | fdprintf(fd, "JR C\n"); | ||
779 | #endif | ||
780 | break; /* FIXME: Implement */ | ||
781 | case 0x39: /* ADD HL,SP */ | ||
782 | #ifdef DYNA_DEBUG | ||
783 | fdprintf(fd, "ADD HL,SP\n"); | ||
784 | #endif | ||
785 | break; /* FIXME: Implement */ | ||
786 | case 0x3A: /* LD A,(HLD) */ | ||
787 | #ifdef DYNA_DEBUG | ||
788 | fdprintf(fd, "LD A,(HLD)\n"); | ||
789 | #endif | ||
790 | break; /* FIXME: Implement */ | ||
791 | case 0x3B: /* DEC SP */ | ||
792 | #ifdef DYNA_DEBUG | ||
793 | fdprintf(fd, "DEC SP\n"); | ||
794 | #endif | ||
795 | break; /* FIXME: Implement */ | ||
796 | case 0x3C: /* INC A */ | ||
797 | #ifdef DYNA_DEBUG | ||
798 | fdprintf(fd, "INC A"); | ||
799 | #endif | ||
800 | DYNA_INC_l_r(1,0); /* Is this right? */ | ||
801 | break; | ||
802 | case 0x3D: /* DEC A */ | ||
803 | #ifdef DYNA_DEBUG | ||
804 | fdprintf(fd, "DEC A"); | ||
805 | #endif | ||
806 | DYNA_DEC_l_r(1,0); /* Is this right? */ | ||
807 | break; | ||
808 | case 0x3E: /* LD A,imm */ | ||
442 | #ifdef DYNA_DEBUG | 809 | #ifdef DYNA_DEBUG |
443 | fdprintf(fd,"LD B,H\n"); | 810 | fdprintf(fd,"LD A,#0x%x\n",readb(xPC)); |
811 | #endif | ||
812 | DYNA_MOVEQ_l_i_to_r(FETCH,1); | ||
813 | break; | ||
814 | case 0x3F: /* CCF */ | ||
815 | #ifdef DYNA_DEBUG | ||
816 | fdprintf(fd, "CCF\n"); | ||
817 | #endif | ||
818 | break; /* FIXME: Implement */ | ||
819 | case 0x40: /* LD B,B */ | ||
820 | #ifdef DYNA_DEBUG | ||
821 | fdprintf(fd, "LD B,B\n"); | ||
822 | #endif | ||
823 | break; | ||
824 | case 0x41: /* LD B,C */ | ||
825 | #ifdef DYNA_DEBUG | ||
826 | fdprintf(fd,"LD B,C\n"); | ||
444 | #endif | 827 | #endif |
445 | GETUPPER(6,0); | 828 | DYNA_MOVE_b_r_to_r(3,2); |
446 | DYNA_MOVE_b_r_to_r(0,2); | 829 | break; |
447 | break; | 830 | case 0x42: /* LD B,D */ |
448 | case 0x45: /* LD B,L */ | 831 | #ifdef DYNA_DEBUG |
832 | fdprintf(fd,"LD B,D\n"); | ||
833 | #endif | ||
834 | DYNA_MOVE_b_r_to_r(4,2); | ||
835 | break; | ||
836 | case 0x43: /* LD B,E */ | ||
449 | #ifdef DYNA_DEBUG | 837 | #ifdef DYNA_DEBUG |
450 | fdprintf(fd,"LD B,L\n"); | 838 | fdprintf(fd,"LD B,E\n"); |
451 | #endif | 839 | #endif |
452 | DYNA_MOVE_b_r_to_r(6,2); | 840 | DYNA_MOVE_b_r_to_r(5,2); |
453 | break; | 841 | break; |
454 | case 0x47: /* LD B,A */ | 842 | case 0x44: /* LD B,H */ |
455 | #ifdef DYNA_DEBUG | 843 | #ifdef DYNA_DEBUG |
456 | fdprintf(fd,"LD B,A\n"); | 844 | fdprintf(fd,"LD B,H\n"); |
457 | #endif | 845 | #endif |
458 | DYNA_MOVE_b_r_to_r(1,2); | 846 | GETUPPER(6,0); |
459 | break; | 847 | DYNA_MOVE_b_r_to_r(0,2); |
460 | case 0x48: /* LD C,B */ | 848 | break; |
849 | case 0x45: /* LD B,L */ | ||
461 | #ifdef DYNA_DEBUG | 850 | #ifdef DYNA_DEBUG |
462 | fdprintf(fd,"LD C,B\n"); | 851 | fdprintf(fd,"LD B,L\n"); |
852 | #endif | ||
853 | DYNA_MOVE_b_r_to_r(6,2); | ||
854 | break; | ||
855 | case 0x46: /* LD B,(HL) */ | ||
856 | #ifdef DYNA_DEBUG | ||
857 | fdprintf(fd, "LD B,(HL)\n"); | ||
463 | #endif | 858 | #endif |
464 | DYNA_MOVE_b_r_to_r(2,3); | 859 | break; /* FIXME: Implement */ |
465 | break; | 860 | case 0x47: /* LD B,A */ |
466 | case 0x4A: /* LD C,D */ | ||
467 | #ifdef DYNA_DEBUG | 861 | #ifdef DYNA_DEBUG |
468 | fdprintf(fd,"LD C,D\n"); | 862 | fdprintf(fd,"LD B,A\n"); |
469 | #endif | 863 | #endif |
470 | DYNA_MOVE_b_r_to_r(4,3); | 864 | DYNA_MOVE_b_r_to_r(1,2); |
471 | break; | 865 | break; |
472 | case 0x4B: /* LD C,E */ | 866 | case 0x48: /* LD C,B */ |
473 | #ifdef DYNA_DEBUG | 867 | #ifdef DYNA_DEBUG |
474 | fdprintf(fd,"LD C,E\n"); | 868 | fdprintf(fd,"LD C,B\n"); |
475 | #endif | 869 | #endif |
476 | DYNA_MOVE_b_r_to_r(5,3); | 870 | DYNA_MOVE_b_r_to_r(2,3); |
477 | break; | 871 | break; |
478 | case 0x4C: /* LD C,H */ | 872 | case 0x49: /* LD C,C */ |
873 | break; | ||
874 | case 0x4A: /* LD C,D */ | ||
479 | #ifdef DYNA_DEBUG | 875 | #ifdef DYNA_DEBUG |
480 | fdprintf(fd,"LD C,H\n"); | 876 | fdprintf(fd,"LD C,D\n"); |
481 | #endif | 877 | #endif |
482 | GETUPPER(6,0); | 878 | DYNA_MOVE_b_r_to_r(4,3); |
483 | DYNA_MOVE_b_r_to_r(0,3); | 879 | break; |
484 | break; | 880 | case 0x4B: /* LD C,E */ |
485 | case 0x4D: /* LD C,L */ | ||
486 | #ifdef DYNA_DEBUG | 881 | #ifdef DYNA_DEBUG |
487 | fdprintf(fd,"LD C,L\n"); | 882 | fdprintf(fd,"LD C,E\n"); |
488 | #endif | 883 | #endif |
489 | DYNA_MOVE_b_r_to_r(6,3); | 884 | DYNA_MOVE_b_r_to_r(5,3); |
490 | break; | 885 | break; |
491 | case 0x4F: /* LD C,A */ | 886 | case 0x4C: /* LD C,H */ |
492 | #ifdef DYNA_DEBUG | 887 | #ifdef DYNA_DEBUG |
493 | fdprintf(fd,"LD C,A\n"); | 888 | fdprintf(fd,"LD C,H\n"); |
494 | #endif | 889 | #endif |
495 | DYNA_MOVE_b_r_to_r(1,3); | 890 | GETUPPER(6,0); |
496 | break; | 891 | DYNA_MOVE_b_r_to_r(0,3); |
497 | 892 | break; | |
498 | case 0x50: /* LD D,B */ | 893 | case 0x4D: /* LD C,L */ |
499 | #ifdef DYNA_DEBUG | 894 | #ifdef DYNA_DEBUG |
500 | fdprintf(fd,"LD D,B\n"); | 895 | fdprintf(fd,"LD C,L\n"); |
896 | #endif | ||
897 | DYNA_MOVE_b_r_to_r(6,3); | ||
898 | break; | ||
899 | case 0x4E: /* LD C,(HL) */ | ||
900 | #ifdef DYNA_DEBUG | ||
901 | fdprintf(fd, "LD C,(HL)\n"); | ||
501 | #endif | 902 | #endif |
502 | DYNA_MOVE_b_r_to_r(2,4); | 903 | break; /* FIXME: Implement */ |
503 | break; | 904 | case 0x4F: /* LD C,A */ |
504 | case 0x51: /* LD D,C */ | ||
505 | #ifdef DYNA_DEBUG | 905 | #ifdef DYNA_DEBUG |
506 | fdprintf(fd,"LD D,C\n"); | 906 | fdprintf(fd,"LD C,A\n"); |
507 | #endif | 907 | #endif |
508 | DYNA_MOVE_b_r_to_r(3,4); | 908 | DYNA_MOVE_b_r_to_r(1,3); |
509 | break; | 909 | break; |
510 | case 0x53: /* LD D,E */ | 910 | case 0x50: /* LD D,B */ |
511 | #ifdef DYNA_DEBUG | 911 | #ifdef DYNA_DEBUG |
512 | fdprintf(fd,"LD D,E\n"); | 912 | fdprintf(fd,"LD D,B\n"); |
513 | #endif | 913 | #endif |
514 | DYNA_MOVE_b_r_to_r(5,4); | 914 | DYNA_MOVE_b_r_to_r(2,4); |
515 | break; | 915 | break; |
516 | case 0x54: /* LD D,H */ | 916 | case 0x51: /* LD D,C */ |
517 | #ifdef DYNA_DEBUG | 917 | #ifdef DYNA_DEBUG |
518 | fdprintf(fd,"LD D,H\n"); | 918 | fdprintf(fd,"LD D,C\n"); |
519 | #endif | 919 | #endif |
520 | GETUPPER(6,0); | 920 | DYNA_MOVE_b_r_to_r(3,4); |
521 | DYNA_MOVE_b_r_to_r(0,4); | 921 | break; |
522 | break; | 922 | case 0x52: /* LD D,D */ |
523 | case 0x55: /* LD D,L */ | 923 | break; |
924 | case 0x53: /* LD D,E */ | ||
524 | #ifdef DYNA_DEBUG | 925 | #ifdef DYNA_DEBUG |
525 | fdprintf(fd,"LD D,L\n"); | 926 | fdprintf(fd,"LD D,E\n"); |
526 | #endif | 927 | #endif |
527 | DYNA_MOVE_b_r_to_r(6,4); | 928 | DYNA_MOVE_b_r_to_r(5,4); |
528 | break; | 929 | break; |
529 | case 0x57: /* LD D,A */ | 930 | case 0x54: /* LD D,H */ |
530 | #ifdef DYNA_DEBUG | 931 | #ifdef DYNA_DEBUG |
531 | fdprintf(fd,"LD D,A\n"); | 932 | fdprintf(fd,"LD D,H\n"); |
532 | #endif | 933 | #endif |
533 | DYNA_MOVE_b_r_to_r(1,4); | 934 | GETUPPER(6,0); |
534 | break; | 935 | DYNA_MOVE_b_r_to_r(0,4); |
535 | 936 | break; | |
536 | case 0x58: /* LD E,B */ | 937 | case 0x55: /* LD D,L */ |
537 | #ifdef DYNA_DEBUG | 938 | #ifdef DYNA_DEBUG |
538 | fdprintf(fd,"LD E,B\n"); | 939 | fdprintf(fd,"LD D,L\n"); |
539 | #endif | 940 | #endif |
540 | DYNA_MOVE_b_r_to_r(2,5); | 941 | DYNA_MOVE_b_r_to_r(6,4); |
541 | break; | 942 | break; |
542 | case 0x59: /* LD E,C */ | 943 | case 0x56: /* LD D,(HL) */ |
944 | #ifdef DYNA_DEBUG | ||
945 | fdprintf(fd, "LD D,(HL)\n"); | ||
946 | #endif | ||
947 | break; /* FIXME: Implement */ | ||
948 | case 0x57: /* LD D,A */ | ||
543 | #ifdef DYNA_DEBUG | 949 | #ifdef DYNA_DEBUG |
544 | fdprintf(fd,"LD E,C\n"); | 950 | fdprintf(fd,"LD D,A\n"); |
545 | #endif | 951 | #endif |
546 | DYNA_MOVE_b_r_to_r(3,5); | 952 | DYNA_MOVE_b_r_to_r(1,4); |
547 | break; | 953 | break; |
548 | case 0x5A: /* LD E,D */ | 954 | case 0x58: /* LD E,B */ |
549 | #ifdef DYNA_DEBUG | 955 | #ifdef DYNA_DEBUG |
550 | fdprintf(fd,"LD E,D\n"); | 956 | fdprintf(fd,"LD E,B\n"); |
551 | #endif | 957 | #endif |
552 | DYNA_MOVE_b_r_to_r(4,5); | 958 | DYNA_MOVE_b_r_to_r(2,5); |
553 | break; | 959 | break; |
554 | case 0x5C: /* LD E,H */ | 960 | case 0x59: /* LD E,C */ |
555 | #ifdef DYNA_DEBUG | 961 | #ifdef DYNA_DEBUG |
556 | fdprintf(fd,"LD E,H\n"); | 962 | fdprintf(fd,"LD E,C\n"); |
557 | #endif | 963 | #endif |
558 | GETUPPER(6,0); | 964 | DYNA_MOVE_b_r_to_r(3,5); |
559 | DYNA_MOVE_b_r_to_r(0,5); | 965 | break; |
560 | break; | 966 | case 0x5A: /* LD E,D */ |
561 | case 0x5D: /* LD E,L */ | ||
562 | #ifdef DYNA_DEBUG | 967 | #ifdef DYNA_DEBUG |
563 | fdprintf(fd,"LD E,L\n"); | 968 | fdprintf(fd,"LD E,D\n"); |
564 | #endif | 969 | #endif |
565 | DYNA_MOVE_b_r_to_r(6,5); | 970 | DYNA_MOVE_b_r_to_r(4,5); |
566 | break; | 971 | break; |
567 | case 0x5F: /* LD E,A */ | 972 | case 0x5B: /* LD E,E */ |
973 | break; | ||
974 | case 0x5C: /* LD E,H */ | ||
568 | #ifdef DYNA_DEBUG | 975 | #ifdef DYNA_DEBUG |
569 | fdprintf(fd,"LD E,A\n"); | 976 | fdprintf(fd,"LD E,H\n"); |
570 | #endif | 977 | #endif |
571 | DYNA_MOVE_b_r_to_r(1,5); | 978 | GETUPPER(6,0); |
572 | break; | 979 | DYNA_MOVE_b_r_to_r(0,5); |
573 | 980 | break; | |
574 | case 0x60: /* LD H,B */ | 981 | case 0x5D: /* LD E,L */ |
575 | #ifdef DYNA_DEBUG | 982 | #ifdef DYNA_DEBUG |
576 | fdprintf(fd,"LD H,B\n"); | 983 | fdprintf(fd,"LD E,L\n"); |
577 | #endif | 984 | #endif |
578 | DYNA_MOVE_b_r_to_r(2,0); | 985 | DYNA_MOVE_b_r_to_r(6,5); |
579 | PUTUPPER(0,6); | 986 | break; |
580 | break; | 987 | case 0x5E: /* LD E,(HL) */ |
581 | case 0x61: /* LD H,C */ | 988 | #ifdef DYNA_DEBUG |
989 | fdprintf(fd, "LD E,(HL)\n"); | ||
990 | #endif | ||
991 | break; /* FIXME: Implement */ | ||
992 | case 0x5F: /* LD E,A */ | ||
582 | #ifdef DYNA_DEBUG | 993 | #ifdef DYNA_DEBUG |
583 | fdprintf(fd,"LD H,C\n"); | 994 | fdprintf(fd,"LD E,A\n"); |
584 | #endif | 995 | #endif |
585 | DYNA_MOVE_b_r_to_r(3,0); | 996 | DYNA_MOVE_b_r_to_r(1,5); |
586 | PUTUPPER(0,6); | 997 | break; |
587 | break; | 998 | case 0x60: /* LD H,B */ |
588 | case 0x62: /* LD H,D */ | ||
589 | #ifdef DYNA_DEBUG | 999 | #ifdef DYNA_DEBUG |
590 | fdprintf(fd,"LD H,D\n"); | 1000 | fdprintf(fd,"LD H,B\n"); |
591 | #endif | 1001 | #endif |
592 | DYNA_MOVE_b_r_to_r(4,0); | 1002 | DYNA_MOVE_b_r_to_r(2,0); |
593 | PUTUPPER(0,6); | 1003 | PUTUPPER(0,6); |
594 | break; | 1004 | break; |
595 | case 0x63: /* LD H,E */ | 1005 | case 0x61: /* LD H,C */ |
596 | #ifdef DYNA_DEBUG | 1006 | #ifdef DYNA_DEBUG |
597 | fdprintf(fd,"LD H,E\n"); | 1007 | fdprintf(fd,"LD H,C\n"); |
598 | #endif | 1008 | #endif |
599 | DYNA_MOVE_b_r_to_r(5,0); | 1009 | DYNA_MOVE_b_r_to_r(3,0); |
600 | PUTUPPER(0,6); | 1010 | PUTUPPER(0,6); |
601 | break; | 1011 | break; |
602 | case 0x65: /* LD H,L */ | 1012 | case 0x62: /* LD H,D */ |
603 | #ifdef DYNA_DEBUG | 1013 | #ifdef DYNA_DEBUG |
604 | fdprintf(fd,"LD H,L\n"); | 1014 | fdprintf(fd,"LD H,D\n"); |
605 | #endif | 1015 | #endif |
606 | DYNA_MOVE_b_r_to_r(6,0); | 1016 | DYNA_MOVE_b_r_to_r(4,0); |
607 | PUTUPPER(0,6); | 1017 | PUTUPPER(0,6); |
608 | break; | 1018 | break; |
609 | case 0x67: /* LD H,A */ | 1019 | case 0x63: /* LD H,E */ |
610 | #ifdef DYNA_DEBUG | 1020 | #ifdef DYNA_DEBUG |
611 | fdprintf(fd,"LD H,A\n"); | 1021 | fdprintf(fd,"LD H,E\n"); |
612 | #endif | 1022 | #endif |
613 | DYNA_MOVE_b_r_to_r(1,0); | 1023 | DYNA_MOVE_b_r_to_r(5,0); |
614 | PUTUPPER(0,6); | 1024 | PUTUPPER(0,6); |
615 | break; | 1025 | break; |
616 | case 0x68: /* LD L,B */ | 1026 | case 0x64: /* LD H,H */ |
1027 | break; | ||
1028 | case 0x65: /* LD H,L */ | ||
617 | #ifdef DYNA_DEBUG | 1029 | #ifdef DYNA_DEBUG |
618 | fdprintf(fd,"LD L,B\n"); | 1030 | fdprintf(fd,"LD H,L\n"); |
1031 | #endif | ||
1032 | DYNA_MOVE_b_r_to_r(6,0); | ||
1033 | PUTUPPER(0,6); | ||
1034 | break; | ||
1035 | case 0x66: /* LD H,(HL) */ | ||
1036 | #ifdef DYNA_DEBUG | ||
1037 | fdprintf(fd, "LD H,(HL)\n"); | ||
619 | #endif | 1038 | #endif |
620 | DYNA_MOVE_b_r_to_r(2,6); | 1039 | break; /* FIXME: Implement */ |
621 | break; | 1040 | case 0x67: /* LD H,A */ |
622 | case 0x69: /* LD L,C */ | ||
623 | #ifdef DYNA_DEBUG | 1041 | #ifdef DYNA_DEBUG |
624 | fdprintf(fd,"LD L,C\n"); | 1042 | fdprintf(fd,"LD H,A\n"); |
1043 | #endif | ||
1044 | DYNA_MOVE_b_r_to_r(1,0); | ||
1045 | PUTUPPER(0,6); | ||
1046 | break; | ||
1047 | case 0x68: /* LD L,B */ | ||
1048 | #ifdef DYNA_DEBUG | ||
1049 | fdprintf(fd,"LD L,B\n"); | ||
625 | #endif | 1050 | #endif |
626 | DYNA_MOVE_b_r_to_r(3,6); | 1051 | DYNA_MOVE_b_r_to_r(2,6); |
627 | break; | 1052 | break; |
628 | case 0x6A: /* LD L,D */ | 1053 | case 0x69: /* LD L,C */ |
629 | #ifdef DYNA_DEBUG | 1054 | #ifdef DYNA_DEBUG |
630 | fdprintf(fd,"LD L,D\n"); | 1055 | fdprintf(fd,"LD L,C\n"); |
631 | #endif | 1056 | #endif |
632 | DYNA_MOVE_b_r_to_r(4,6); | 1057 | DYNA_MOVE_b_r_to_r(3,6); |
633 | break; | 1058 | break; |
634 | case 0x6B: /* LD L,E */ | 1059 | case 0x6A: /* LD L,D */ |
635 | #ifdef DYNA_DEBUG | 1060 | #ifdef DYNA_DEBUG |
636 | fdprintf(fd,"LD L,E\n"); | 1061 | fdprintf(fd,"LD L,D\n"); |
637 | #endif | 1062 | #endif |
638 | DYNA_MOVE_b_r_to_r(5,6); | 1063 | DYNA_MOVE_b_r_to_r(4,6); |
639 | break; | 1064 | break; |
640 | case 0x6C: /* LD L,H */ | 1065 | case 0x6B: /* LD L,E */ |
641 | #ifdef DYNA_DEBUG | 1066 | #ifdef DYNA_DEBUG |
642 | fdprintf(fd,"LD L,H\n"); | 1067 | fdprintf(fd,"LD L,E\n"); |
643 | #endif | 1068 | #endif |
644 | GETUPPER(6,0); | 1069 | DYNA_MOVE_b_r_to_r(5,6); |
645 | DYNA_MOVE_b_r_to_r(0,6); | 1070 | break; |
646 | break; | 1071 | case 0x6C: /* LD L,H */ |
647 | |||
648 | case 0x78: /* LD A,B */ | ||
649 | #ifdef DYNA_DEBUG | 1072 | #ifdef DYNA_DEBUG |
650 | fdprintf(fd,"LD A,B\n"); | 1073 | fdprintf(fd,"LD L,H\n"); |
1074 | #endif | ||
1075 | GETUPPER(6,0); | ||
1076 | DYNA_MOVE_b_r_to_r(0,6); | ||
1077 | break; | ||
1078 | case 0x6D: /* LD L,L */ | ||
1079 | break; | ||
1080 | case 0x6E: /* LD L,(HL) */ | ||
1081 | #ifdef DYNA_DEBUG | ||
1082 | fdprintf(fd, "LD L,(HL)\n"); | ||
1083 | #endif | ||
1084 | break; /* FIXME: Implement */ | ||
1085 | case 0x6F: /* LD L,A */ | ||
1086 | #ifdef DYNA_DEBUG | ||
1087 | fdprintf(fd, "LD L,A\n"); | ||
1088 | #endif | ||
1089 | break; /* FIXME: Implement */ | ||
1090 | case 0x70: /* LD (HL),B */ | ||
1091 | #ifdef DYNA_DEBUG | ||
1092 | fdprintf(fd, "LD (HL),B\n"); | ||
1093 | #endif | ||
1094 | break; /* FIXME: Implement */ | ||
1095 | case 0x71: /* LD (HL),C */ | ||
1096 | #ifdef DYNA_DEBUG | ||
1097 | fdprintf(fd, "LD (HL),C\n"); | ||
651 | #endif | 1098 | #endif |
652 | DYNA_MOVE_b_r_to_r(2,1); | 1099 | break; /* FIXME: Implement */ |
653 | break; | 1100 | case 0x72: /* LD (HL),D */ |
654 | case 0x79: /* LD A,C */ | 1101 | #ifdef DYNA_DEBUG |
1102 | fdprintf(fd, "LD (HL),D\n"); | ||
1103 | #endif | ||
1104 | break; /* FIXME: Implement */ | ||
1105 | case 0x73: /* LD (HL),E */ | ||
1106 | #ifdef DYNA_DEBUG | ||
1107 | fdprintf(fd, "LD (HL),E\n"); | ||
1108 | #endif | ||
1109 | break; /* FIXME: Implement */ | ||
1110 | case 0x74: /* LD (HL),H */ | ||
1111 | #ifdef DYNA_DEBUG | ||
1112 | fdprintf(fd, "LD (HL),H\n"); | ||
1113 | #endif | ||
1114 | break; /* FIXME: Implement */ | ||
1115 | case 0x75: /* LD (HL),L */ | ||
1116 | #ifdef DYNA_DEBUG | ||
1117 | fdprintf(fd, "LD (HL),L\n"); | ||
1118 | #endif | ||
1119 | break; /* FIXME: Implement */ | ||
1120 | case 0x76: /* HALT */ | ||
1121 | #ifdef DYNA_DEBUG | ||
1122 | fdprintf(fd, "HALT\n"); | ||
1123 | #endif | ||
1124 | break; /* FIXME: Implement */ | ||
1125 | case 0x77: /* LD (HL),A */ | ||
1126 | #ifdef DYNA_DEBUG | ||
1127 | fdprintf(fd, "LD (HL),A\n"); | ||
1128 | #endif | ||
1129 | break; /* FIXME: Implement */ | ||
1130 | case 0x78: /* LD A,B */ | ||
655 | #ifdef DYNA_DEBUG | 1131 | #ifdef DYNA_DEBUG |
656 | fdprintf(fd,"LD A,C\n"); | 1132 | fdprintf(fd,"LD A,B\n"); |
657 | #endif | 1133 | #endif |
658 | DYNA_MOVE_b_r_to_r(3,1); | 1134 | DYNA_MOVE_b_r_to_r(2,1); |
659 | break; | 1135 | break; |
660 | case 0x7A: /* LD A,D */ | 1136 | case 0x79: /* LD A,C */ |
661 | #ifdef DYNA_DEBUG | 1137 | #ifdef DYNA_DEBUG |
662 | fdprintf(fd,"LD A,D\n"); | 1138 | fdprintf(fd,"LD A,C\n"); |
663 | #endif | 1139 | #endif |
664 | DYNA_MOVE_b_r_to_r(4,1); | 1140 | DYNA_MOVE_b_r_to_r(3,1); |
665 | break; | 1141 | break; |
666 | case 0x7B: /* LD A,E */ | 1142 | case 0x7A: /* LD A,D */ |
667 | #ifdef DYNA_DEBUG | 1143 | #ifdef DYNA_DEBUG |
668 | fdprintf(fd,"LD A,E\n"); | 1144 | fdprintf(fd,"LD A,D\n"); |
669 | #endif | 1145 | #endif |
670 | DYNA_MOVE_b_r_to_r(5,1); | 1146 | DYNA_MOVE_b_r_to_r(4,1); |
671 | break; | 1147 | break; |
672 | case 0x7C: /* LD A,H */ | 1148 | case 0x7B: /* LD A,E */ |
673 | #ifdef DYNA_DEBUG | 1149 | #ifdef DYNA_DEBUG |
674 | fdprintf(fd,"LD A,H\n"); | 1150 | fdprintf(fd,"LD A,E\n"); |
675 | #endif | 1151 | #endif |
676 | GETUPPER(5,0); | 1152 | DYNA_MOVE_b_r_to_r(5,1); |
677 | DYNA_MOVE_b_r_to_r(0,1); | 1153 | break; |
678 | break; | 1154 | case 0x7C: /* LD A,H */ |
679 | case 0x7D: /* LD A,L */ | ||
680 | #ifdef DYNA_DEBUG | 1155 | #ifdef DYNA_DEBUG |
681 | fdprintf(fd,"LD A,L\n"); | 1156 | fdprintf(fd,"LD A,H\n"); |
682 | #endif | 1157 | #endif |
683 | DYNA_MOVE_b_r_to_r(5,1); | 1158 | GETUPPER(5,0); |
684 | break; | 1159 | DYNA_MOVE_b_r_to_r(0,1); |
685 | case 0x01: /* LD BC,imm */ | 1160 | break; |
686 | { /* warning (do we have endianness right?) */ | 1161 | case 0x7D: /* LD A,L */ |
687 | #ifdef DYNA_DEBUG | 1162 | #ifdef DYNA_DEBUG |
688 | fdprintf(fd,"LD BC,#0x%x\n",readw(xPC)); | 1163 | fdprintf(fd,"LD A,L\n"); |
689 | #endif | 1164 | #endif |
690 | temp=readw(xPC); | 1165 | DYNA_MOVE_b_r_to_r(5,1); |
691 | DYNA_MOVEQ_l_i_to_r((temp&0xFF00)>>8,2); | 1166 | break; |
692 | DYNA_MOVEQ_l_i_to_r(temp&0xFF,3); | 1167 | case 0x7E: /* LD A,HL */ |
693 | PC+=2; | ||
694 | } | ||
695 | break; | ||
696 | case 0x11: /* LD DE,imm */ | ||
697 | { | ||
698 | #ifdef DYNA_DEBUG | 1168 | #ifdef DYNA_DEBUG |
699 | fdprintf(fd,"LD DE,#0x%x\n",readw(xPC)); | 1169 | fdprintf(fd, "LD A,HL\n"); |
700 | #endif | 1170 | #endif |
701 | temp=readw(xPC); | 1171 | break; /* FIXME: Implement */ |
702 | DYNA_MOVEQ_l_i_to_r((temp&0xFF00)>>8,4); | 1172 | case 0x7F: /* LD A,A */ |
703 | DYNA_MOVEQ_l_i_to_r(temp&0xFF,5); | 1173 | break; |
704 | PC += 2; | 1174 | case 0x80: /* ADD A,B */ |
705 | } | ||
706 | break; | ||
707 | case 0x21: /* LD HL,imm */ | ||
708 | { | ||
709 | #ifdef DYNA_DEBUG | 1175 | #ifdef DYNA_DEBUG |
710 | fdprintf(fd,"LD HL,#0x%x\n",readw(xPC)); | 1176 | fdprintf(fd, "ADD A,B\n"); |
711 | #endif | 1177 | #endif |
712 | DYNA_MOVE_l_i_to_r(readw(xPC),6); | 1178 | break; /* FIXME: Implement */ |
713 | PC += 2; | 1179 | case 0x81: /* ADD A,C */ |
714 | } | ||
715 | break; | ||
716 | case 0x22: /* LDI (HL), A */ | ||
717 | #ifdef DYNA_DEBUG | 1180 | #ifdef DYNA_DEBUG |
718 | fdprintf(fd,"LDI (HL),A\n"); | 1181 | fdprintf(fd, "ADD A,C\n"); |
719 | #endif | 1182 | #endif |
720 | /* DYNA_PUSH_l_r(1,0); | 1183 | break; /* FIXME: Implement */ |
721 | DYNA_PUSH_l_r(6,0); | 1184 | case 0x82: /* ADD A,D */ |
722 | CALL_NATIVE(&writeb); | ||
723 | DYNA_ADDQ_l_i_to_r(0,7,1); | ||
724 | DYNA_INC_l_r(6,0);*/ | ||
725 | break; | ||
726 | case 0x31: /* LD SP,imm */ | ||
727 | #ifdef DYNA_DEBUG | 1185 | #ifdef DYNA_DEBUG |
728 | fdprintf(fd,"LD SP,#0x%x\n",readw(xPC)); | 1186 | fdprintf(fd, "ADD A,D\n"); |
729 | #endif | 1187 | #endif |
730 | DYNA_MOVEA_l_i_to_r(readw(xPC),0); | 1188 | break; /* FIXME: Implement */ |
731 | PC += 2; | 1189 | case 0x83: /* ADD A,E */ |
732 | break; | 1190 | #ifdef DYNA_DEBUG |
733 | 1191 | fdprintf(fd, "ADD A,E\n"); | |
734 | case 0x06: /* LD B,imm */ | 1192 | #endif |
1193 | break; /* FIXME: Implement */ | ||
1194 | case 0x84: /* ADD A,H */ | ||
1195 | #ifdef DYNA_DEBUG | ||
1196 | fdprintf(fd, "ADD A,H\n"); | ||
1197 | #endif | ||
1198 | break; /* FIXME: Implement */ | ||
1199 | case 0x85: /* ADD A,L */ | ||
1200 | #ifdef DYNA_DEBUG | ||
1201 | fdprintf(fd, "ADD A,L\n"); | ||
1202 | #endif | ||
1203 | break; /* FIXME: Implement */ | ||
1204 | case 0x86: /* ADD A,(HL) */ | ||
1205 | #ifdef DYNA_DEBUG | ||
1206 | fdprintf(fd, "ADD A,(HL)\n"); | ||
1207 | #endif | ||
1208 | break; /* FIXME: Implement */ | ||
1209 | case 0x87: /* ADD A,A */ | ||
1210 | #ifdef DYNA_DEBUG | ||
1211 | fdprintf(fd,"ADD A,A\n"); | ||
1212 | #endif | ||
1213 | /* code taken from gcc -O3 output by compiling; | ||
1214 | * c=(2*b)&0xFF; | ||
1215 | * a=(c) ? 0 : 0x80 | zero flag | ||
1216 | * (0x20 & (c) << 1) | halfcarry | ||
1217 | * ((2*b)&0x100)>>4; carry | ||
1218 | */ | ||
1219 | DYNA_MOVE_l_r_to_r(1,0,0); /* move.l d1, d0 */ | ||
1220 | DYNA_ADD_l_r_to_r(0,0,0); /* add.l d0, d0 */ | ||
1221 | DYNA_AND_l_i_to_r(510,0); /* and.l #510, d0 */ | ||
1222 | DYNA_MOVEA_l_r_to_r(0,3,0); /* movea.l d0,a3 */ | ||
1223 | DYNA_CLR_b_r(7); /* clr.b d7 */ | ||
1224 | DYNA_TST_b_r(0,0); /* tst.b d0 */ | ||
1225 | DYNA_DUMMYBRANCH(2,0); | ||
1226 | DYNA_MOVE_l_r_to_r(1,0,0); /* move.l d1,d0 */ | ||
1227 | DYNA_LSHIFT_l(3,0,0,0); /* lsr.l #3, d0 */ | ||
1228 | DYNA_MOVEQ_l_i_to_r(16,1); /* moveq #16,d1 */ | ||
1229 | DYNA_AND_l_r_to_r(1,0); /* and.l d1 d0 */ | ||
1230 | DYNA_MOVEQ_l_i_to_r(0x80,7); /* moveq #0x80,d7 */ | ||
1231 | DYNA_OR_l_r_to_r(0,7); /* or.l d0, d7 */ | ||
1232 | DYNA_BCC_c(0x6,2,0); /* branch not equal, here */ | ||
1233 | DYNA_MOVE_l_r_to_r(3,1,1); /* move.l a3,d1 */ | ||
1234 | DYNA_AND_l_i_to_r(0xFE,1); /* and.l #0xFE,d1 */ | ||
1235 | DYNA_AND_l_i_to_r(0xB0,7); /* and.l #0xB0,d7 */ | ||
1236 | break; | ||
1237 | case 0x88: /* ADC A,B */ | ||
1238 | #ifdef DYNA_DEBUG | ||
1239 | fdprintf(fd, "ADC A,B\n"); | ||
1240 | #endif | ||
1241 | break; /* FIXME: Implement */ | ||
1242 | case 0x89: /* ADC A,C */ | ||
1243 | #ifdef DYNA_DEBUG | ||
1244 | fdprintf(fd, "ADC A,C\n"); | ||
1245 | #endif | ||
1246 | break; /* FIXME: Implement */ | ||
1247 | case 0x8A: /* ADC A,D */ | ||
1248 | #ifdef DYNA_DEBUG | ||
1249 | fdprintf(fd, "ADC A,D\n"); | ||
1250 | #endif | ||
1251 | break; /* FIXME: Implement */ | ||
1252 | case 0x8B: /* ADC A,E */ | ||
1253 | #ifdef DYNA_DEBUG | ||
1254 | fdprintf(fd, "ADC A,E\n"); | ||
1255 | #endif | ||
1256 | break; /* FIXME: Implement */ | ||
1257 | case 0x8C: /* ADC A,H */ | ||
1258 | #ifdef DYNA_DEBUG | ||
1259 | fdprintf(fd, "ADC A,H\n"); | ||
1260 | #endif | ||
1261 | break; /* FIXME: Implement */ | ||
1262 | case 0x8D: /* ADC A,L */ | ||
1263 | #ifdef DYNA_DEBUG | ||
1264 | fdprintf(fd, "ADC A,L\n"); | ||
1265 | #endif | ||
1266 | break; /* FIXME: Implement */ | ||
1267 | case 0x8E: /* ADC A,(HL) */ | ||
1268 | #ifdef DYNA_DEBUG | ||
1269 | fdprintf(fd, "ADC A,(HL)\n"); | ||
1270 | #endif | ||
1271 | break; /* FIXME: Implement */ | ||
1272 | case 0x8F: /* ADC A */ | ||
1273 | #ifdef DYNA_DEBUG | ||
1274 | fdprintf(fd, "ADC A\n"); | ||
1275 | #endif | ||
1276 | break; /* FIXME: Implement */ | ||
1277 | case 0x90: /* SUB B */ | ||
1278 | #ifdef DYNA_DEBUG | ||
1279 | fdprintf(fd, "SUB B\n"); | ||
1280 | #endif | ||
1281 | break; /* FIXME: Implement */ | ||
1282 | case 0x91: /* SUB C */ | ||
1283 | #ifdef DYNA_DEBUG | ||
1284 | fdprintf(fd, "SUB C\n"); | ||
1285 | #endif | ||
1286 | break; /* FIXME: Implement */ | ||
1287 | case 0x92: /* SUB D */ | ||
1288 | #ifdef DYNA_DEBUG | ||
1289 | fdprintf(fd, "SUB D\n"); | ||
1290 | #endif | ||
1291 | break; /* FIXME: Implement */ | ||
1292 | case 0x93: /* SUB E */ | ||
1293 | #ifdef DYNA_DEBUG | ||
1294 | fdprintf(fd, "SUB E\n"); | ||
1295 | #endif | ||
1296 | break; /* FIXME: Implement */ | ||
1297 | case 0x94: /* SUB H */ | ||
1298 | #ifdef DYNA_DEBUG | ||
1299 | fdprintf(fd, "SUB H\n"); | ||
1300 | #endif | ||
1301 | break; /* FIXME: Implement */ | ||
1302 | case 0x95: /* SUB L */ | ||
1303 | #ifdef DYNA_DEBUG | ||
1304 | fdprintf(fd, "SUB L\n"); | ||
1305 | #endif | ||
1306 | break; /* FIXME: Implement */ | ||
1307 | case 0x96: /* SUB (HL) */ | ||
1308 | #ifdef DYNA_DEBUG | ||
1309 | fdprintf(fd, "SUB (HL)\n"); | ||
1310 | #endif | ||
1311 | break; /* FIXME: Implement */ | ||
1312 | case 0x97: /* SUB A (halfcarry ?) */ | ||
1313 | #ifdef DYNA_DEBUG | ||
1314 | fdprintf(fd,"SUB A\n"); | ||
1315 | #endif | ||
1316 | DYNA_CLR_l_r(1); | ||
1317 | DYNA_MOVEQ_l_i_to_r(0xC0,7); | ||
1318 | break; | ||
1319 | case 0x98: /* SBC A,B */ | ||
1320 | #ifdef DYNA_DEBUG | ||
1321 | fdprintf(fd, "SBC A,B\n"); | ||
1322 | #endif | ||
1323 | break; /* FIXME: Implement */ | ||
1324 | case 0x99: /* SBC A,C */ | ||
1325 | #ifdef DYNA_DEBUG | ||
1326 | fdprintf(fd, "SBC A,C\n"); | ||
1327 | #endif | ||
1328 | break; /* FIXME: Implement */ | ||
1329 | case 0x9A: /* SBC A,D */ | ||
1330 | #ifdef DYNA_DEBUG | ||
1331 | fdprintf(fd, "SBC A,D\n"); | ||
1332 | #endif | ||
1333 | break; /* FIXME: Implement */ | ||
1334 | case 0x9B: /* SBC A,E */ | ||
1335 | #ifdef DYNA_DEBUG | ||
1336 | fdprintf(fd, "SBC A,E\n"); | ||
1337 | #endif | ||
1338 | break; /* FIXME: Implement */ | ||
1339 | case 0x9C: /* SBC A,H */ | ||
1340 | #ifdef DYNA_DEBUG | ||
1341 | fdprintf(fd, "SBC A,H\n"); | ||
1342 | #endif | ||
1343 | break; /* FIXME: Implement */ | ||
1344 | case 0x9D: /* SBC A,L */ | ||
1345 | #ifdef DYNA_DEBUG | ||
1346 | fdprintf(fd, "SBC A,L\n"); | ||
1347 | #endif | ||
1348 | break; /* FIXME: Implement */ | ||
1349 | case 0x9E: /* SBC A,(HL) */ | ||
1350 | #ifdef DYNA_DEBUG | ||
1351 | fdprintf(fd, "SBC A,(HL)\n"); | ||
1352 | #endif | ||
1353 | break; /* FIXME: Implement */ | ||
1354 | case 0x9F: /* SBC A,A */ | ||
1355 | #ifdef DYNA_DEBUG | ||
1356 | fdprintf(fd, "SBC A,A\n"); | ||
1357 | #endif | ||
1358 | break; /* FIXME: Implement */ | ||
1359 | case 0xA0: /* AND B */ | ||
1360 | #ifdef DYNA_DEBUG | ||
1361 | fdprintf(fd, "AND B\n"); | ||
1362 | #endif | ||
1363 | break; /* FIXME: Implement */ | ||
1364 | case 0xA1: /* AND C */ | ||
1365 | #ifdef DYNA_DEBUG | ||
1366 | fdprintf(fd, "AND C\n"); | ||
1367 | #endif | ||
1368 | break; /* FIXME: Implement */ | ||
1369 | case 0xA2: /* AND D */ | ||
1370 | #ifdef DYNA_DEBUG | ||
1371 | fdprintf(fd, "AND D\n"); | ||
1372 | #endif | ||
1373 | break; /* FIXME: Implement */ | ||
1374 | case 0xA3: /* AND E */ | ||
1375 | #ifdef DYNA_DEBUG | ||
1376 | fdprintf(fd, "AND E\n"); | ||
1377 | #endif | ||
1378 | break; /* FIXME: Implement */ | ||
1379 | case 0xA4: /* AND H */ | ||
1380 | #ifdef DYNA_DEBUG | ||
1381 | fdprintf(fd, "AND H\n"); | ||
1382 | #endif | ||
1383 | break; /* FIXME: Implement */ | ||
1384 | case 0xA5: /* AND L */ | ||
1385 | #ifdef DYNA_DEBUG | ||
1386 | fdprintf(fd, "AND L\n"); | ||
1387 | #endif | ||
1388 | break; /* FIXME: Implement */ | ||
1389 | case 0xA6: /* AND (HL) */ | ||
1390 | #ifdef DYNA_DEBUG | ||
1391 | fdprintf(fd, "AND (HL)\n"); | ||
1392 | #endif | ||
1393 | break; /* FIXME: Implement */ | ||
1394 | case 0xA7: /* AND A */ | ||
1395 | #ifdef DYNA_DEBUG | ||
1396 | fdprintf(fd, "AND A\n"); | ||
1397 | #endif | ||
1398 | break; /* FIXME: Implement */ | ||
1399 | case 0xA8: /* XOR B */ | ||
1400 | #ifdef DYNA_DEBUG | ||
1401 | fdprintf(fd, "XOR B\n"); | ||
1402 | #endif | ||
1403 | break; /* FIXME: Implement */ | ||
1404 | case 0xA9: /* XOR C */ | ||
1405 | #ifdef DYNA_DEBUG | ||
1406 | fdprintf(fd, "XOR C\n"); | ||
1407 | #endif | ||
1408 | break; /* FIXME: Implement */ | ||
1409 | case 0xAA: /* XOR D */ | ||
1410 | #ifdef DYNA_DEBUG | ||
1411 | fdprintf(fd, "XOR D\n"); | ||
1412 | #endif | ||
1413 | break; /* FIXME: Implement */ | ||
1414 | case 0xAB: /* XOR E */ | ||
1415 | #ifdef DYNA_DEBUG | ||
1416 | fdprintf(fd, "XOR E\n"); | ||
1417 | #endif | ||
1418 | break; /* FIXME: Implement */ | ||
1419 | case 0xAC: /* XOR H */ | ||
1420 | #ifdef DYNA_DEBUG | ||
1421 | fdprintf(fd, "XOR H\n"); | ||
1422 | #endif | ||
1423 | break; /* FIXME: Implement */ | ||
1424 | case 0xAD: /* XOR L */ | ||
1425 | #ifdef DYNA_DEBUG | ||
1426 | fdprintf(fd, "XOR L\n"); | ||
1427 | #endif | ||
1428 | break; /* FIXME: Implement */ | ||
1429 | case 0xAE: /* XOR (HL) */ | ||
1430 | #ifdef DYNA_DEBUG | ||
1431 | fdprintf(fd, "XOR (HL)\n"); | ||
1432 | #endif | ||
1433 | break; /* FIXME: Implement */ | ||
1434 | case 0xAF: /* XOR A */ | ||
1435 | #ifdef DYNA_DEBUG | ||
1436 | fdprintf(fd, "XOR A\n"); | ||
1437 | #endif | ||
1438 | break; /* FIXME: Implement */ | ||
1439 | case 0xB0: /* OR B */ | ||
1440 | #ifdef DYNA_DEBUG | ||
1441 | fdprintf(fd, "OR B\n"); | ||
1442 | #endif | ||
1443 | break; /* FIXME: Implement */ | ||
1444 | case 0xB1: /* OR C */ | ||
1445 | #ifdef DYNA_DEBUG | ||
1446 | fdprintf(fd, "OR C\n"); | ||
1447 | #endif | ||
1448 | break; /* FIXME: Implement */ | ||
1449 | case 0xB2: /* OR D */ | ||
1450 | #ifdef DYNA_DEBUG | ||
1451 | fdprintf(fd, "OR D\n"); | ||
1452 | #endif | ||
1453 | break; /* FIXME: Implement */ | ||
1454 | case 0xB3: /* OR E */ | ||
1455 | #ifdef DYNA_DEBUG | ||
1456 | fdprintf(fd, "OR E\n"); | ||
1457 | #endif | ||
1458 | break; /* FIXME: Implement */ | ||
1459 | case 0xB4: /* OR H */ | ||
1460 | #ifdef DYNA_DEBUG | ||
1461 | fdprintf(fd, "OR H\n"); | ||
1462 | #endif | ||
1463 | break; /* FIXME: Implement */ | ||
1464 | case 0xB5: /* OR L */ | ||
1465 | #ifdef DYNA_DEBUG | ||
1466 | fdprintf(fd, "OR L\n"); | ||
1467 | #endif | ||
1468 | break; /* FIXME: Implement */ | ||
1469 | case 0xB6: /* OR (HL) */ | ||
1470 | #ifdef DYNA_DEBUG | ||
1471 | fdprintf(fd, "OR (HL)\n"); | ||
1472 | #endif | ||
1473 | break; /* FIXME: Implement */ | ||
1474 | case 0xB7: /* OR A */ | ||
1475 | #ifdef DYNA_DEBUG | ||
1476 | fdprintf(fd, "OR A\n"); | ||
1477 | #endif | ||
1478 | break; /* FIXME: Implement */ | ||
1479 | case 0xB8: /* CP B */ | ||
1480 | #ifdef DYNA_DEBUG | ||
1481 | fdprintf(fd, "CP B\n"); | ||
1482 | #endif | ||
1483 | break; /* FIXME: Implement */ | ||
1484 | case 0xB9: /* CP C */ | ||
1485 | #ifdef DYNA_DEBUG | ||
1486 | fdprintf(fd, "CP C\n"); | ||
1487 | #endif | ||
1488 | break; /* FIXME: Implement */ | ||
1489 | case 0xBA: /* CP D */ | ||
1490 | #ifdef DYNA_DEBUG | ||
1491 | fdprintf(fd, "CP D\n"); | ||
1492 | #endif | ||
1493 | break; /* FIXME: Implement */ | ||
1494 | case 0xBB: /* CP E */ | ||
1495 | #ifdef DYNA_DEBUG | ||
1496 | fdprintf(fd, "CP E\n"); | ||
1497 | #endif | ||
1498 | break; /* FIXME: Implement */ | ||
1499 | case 0xBC: /* CP H */ | ||
1500 | #ifdef DYNA_DEBUG | ||
1501 | fdprintf(fd, "CP H\n"); | ||
1502 | #endif | ||
1503 | break; /* FIXME: Implement */ | ||
1504 | case 0xBD: /* CP L */ | ||
1505 | #ifdef DYNA_DEBUG | ||
1506 | fdprintf(fd, "CP L\n"); | ||
1507 | #endif | ||
1508 | break; /* FIXME: Implement */ | ||
1509 | case 0xBE: /* CP (HL) */ | ||
1510 | #ifdef DYNA_DEBUG | ||
1511 | fdprintf(fd, "CP (HL)\n"); | ||
1512 | #endif | ||
1513 | break; /* FIXME: Implement */ | ||
1514 | case 0xBF: /* CP A */ | ||
1515 | #ifdef DYNA_DEBUG | ||
1516 | fdprintf(fd, "CP A\n"); | ||
1517 | #endif | ||
1518 | break; /* FIXME: Implement */ | ||
1519 | case 0xC0: /* RET NZ */ | ||
1520 | #ifdef DYNA_DEBUG | ||
1521 | fdprintf(fd, "RET NZ\n"); | ||
1522 | #endif | ||
1523 | break; /* FIXME: Implement */ | ||
1524 | case 0xC1: /* POP BC */ | ||
1525 | #ifdef DYNA_DEBUG | ||
1526 | fdprintf(fd, "POP BC\n"); | ||
1527 | #endif | ||
1528 | break; | ||
1529 | case 0xC2: /* JP NZ */ | ||
1530 | #ifdef DYNA_DEBUG | ||
1531 | fdprintf(fd,"JP NZ\n"); | ||
1532 | #endif | ||
1533 | DYNA_BTST_l_r(8,7); /* btst #8,d7 */ | ||
1534 | DYNA_DUMMYBRANCH(2,0); | ||
1535 | DYNA_MOVEA_l_i_to_r(&blockclen,3); | ||
1536 | DYNA_MOVE_l_i_to_m(tclen,3); | ||
1537 | DYNA_MOVEA_l_i_to_r(readw(PC),1); | ||
1538 | DYNA_RET(); | ||
1539 | DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */ | ||
1540 | tclen--; | ||
1541 | PC+=2; | ||
1542 | break; | ||
1543 | case 0xC3: /* JP (imm) PC = readw(PC) */ | ||
735 | #ifdef DYNA_DEBUG | 1544 | #ifdef DYNA_DEBUG |
736 | fdprintf(fd,"LD B,#0x%x\n",readb(xPC)); | 1545 | fdprintf(fd,"JP (0x%x)\n",readw(xPC)); |
1546 | #endif | ||
1547 | PC=readw(PC); | ||
1548 | done=1; | ||
1549 | break; | ||
1550 | case 0xC4: /* CALL NZ */ | ||
1551 | #ifdef DYNA_DEBUG | ||
1552 | fdprintf(fd, "CALL NZ\n"); | ||
1553 | #endif | ||
1554 | break; /* FIXME: Implement */ | ||
1555 | case 0xC5: /* PUSH BC */ | ||
1556 | #ifdef DYNA_DEBUG | ||
1557 | fdprintf(fd, "PUSH BC\n"); | ||
1558 | #endif | ||
1559 | break; /* FIXME: Implement */ | ||
1560 | case 0xC6: /* ADD A,imm */ | ||
1561 | #ifdef DYNA_DEBUG | ||
1562 | fdprintf(fd, "ADD A,imm\n"); | ||
1563 | #endif | ||
1564 | break; /* FIXME: Implement */ | ||
1565 | case 0xC7: /* RST 0h */ | ||
1566 | #ifdef DYNA_DEBUG | ||
1567 | fdprintf(fd, "RST 0h\n"); | ||
1568 | #endif | ||
1569 | break; /* FIXME: Implement */ | ||
1570 | case 0xC8: /* RET Z */ | ||
1571 | #ifdef DYNA_DEBUG | ||
1572 | fdprintf(fd, "RET Z\n"); | ||
1573 | #endif | ||
1574 | break; /* FIXME: Implement */ | ||
1575 | case 0xC9: /* RET */ | ||
1576 | #ifdef DYNA_DEBUG | ||
1577 | fdprintf(fd,"RET\n"); | ||
1578 | #endif | ||
1579 | POPA(1); | ||
1580 | writepc=0; | ||
1581 | done=1; | ||
1582 | break; | ||
1583 | case 0xCA: /* JP Z */ | ||
1584 | break; /* FIXME: Implement */ | ||
1585 | case 0xCB: /* NULL */ | ||
1586 | #ifdef DYNA_DEBUG | ||
1587 | fdprintf(fd,"NULL\n"); | ||
1588 | #endif | ||
1589 | break; | ||
1590 | case 0xCC: /* CALL Z */ | ||
1591 | #ifdef DYNA_DEBUG | ||
1592 | fdprintf(fd, "CALL Z\n"); | ||
1593 | #endif | ||
1594 | break; /* FIXME: Implement */ | ||
1595 | case 0xCD: /* CALL (imm) PUSH(PC+2) PC=readw(PC); */ | ||
1596 | #ifdef DYNA_DEBUG | ||
1597 | fdprintf(fd,"CALL (0x%x)\n",readw(xPC)); | ||
1598 | #endif | ||
1599 | PUSH(PC+2); | ||
1600 | PC=readw(PC); | ||
1601 | done=1; | ||
1602 | break; | ||
1603 | case 0xCE: /* ADC A,imm */ | ||
1604 | #ifdef DYNA_DEBUG | ||
1605 | fdprintf(fd, "ADC A,imm\n"); | ||
1606 | #endif | ||
1607 | break; /* FIXME: Implement */ | ||
1608 | case 0xCF: /* RST 8h */ | ||
1609 | #ifdef DYNA_DEBUG | ||
1610 | fdprintf(fd, "RST 8h\n"); | ||
737 | #endif | 1611 | #endif |
738 | DYNA_MOVEQ_l_i_to_r(FETCH,2); | 1612 | break; /* FIXME: Implement */ |
739 | break; | 1613 | case 0xD0: /* RET NC */ |
740 | case 0x0E: /* LD C,imm */ | ||
741 | #ifdef DYNA_DEBUG | 1614 | #ifdef DYNA_DEBUG |
742 | fdprintf(fd,"LD C,#0x%x\n",readb(xPC)); | 1615 | fdprintf(fd,"RET NC\n"); |
1616 | #endif | ||
1617 | DYNA_BTST_l_r(5,7); /* btst #5,d7 */ | ||
1618 | DYNA_DUMMYBRANCH(2,0); | ||
1619 | POPA(1); /* POP %a1 */ | ||
1620 | DYNA_MOVEA_l_i_to_r(&blockclen,3); | ||
1621 | DYNA_MOVE_l_i_to_m(tclen,3); | ||
1622 | DYNA_RET(); | ||
1623 | DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */ | ||
1624 | tclen-=3; | ||
1625 | break; | ||
1626 | case 0xD1: /* POP DE */ | ||
1627 | #ifdef DYNA_DEBUG | ||
1628 | fdprintf(fd, "POP DE\n"); | ||
1629 | #endif | ||
1630 | break; /* FIXME: Implement */ | ||
1631 | case 0xD2: /* JP NC */ | ||
1632 | #ifdef DYNA_DEBUG | ||
1633 | fdprintf(fd, "JP NC\n"); | ||
743 | #endif | 1634 | #endif |
744 | DYNA_MOVEQ_l_i_to_r(FETCH,3); | 1635 | break; /* FIXME: Implement */ |
745 | break; | 1636 | case 0xD3: /* NULL */ |
746 | case 0x16: /* LD D,imm */ | ||
747 | #ifdef DYNA_DEBUG | 1637 | #ifdef DYNA_DEBUG |
748 | fdprintf(fd,"LD D,#0x%x\n",readb(xPC)); | 1638 | fdprintf(fd,"NULL\n"); |
1639 | #endif | ||
1640 | break; | ||
1641 | case 0xD4: /* CALL NC */ | ||
1642 | #ifdef DYNA_DEBUG | ||
1643 | fdprintf(fd, "CALL NC\n"); | ||
1644 | #endif | ||
1645 | break; /* FIXME: Implement */ | ||
1646 | case 0xD5: /* PUSH DE */ | ||
1647 | #ifdef DYNA_DEBUG | ||
1648 | fdprintf(fd, "PUSH DE\n"); | ||
1649 | #endif | ||
1650 | break; /* FIXME: Implement */ | ||
1651 | case 0xD6: /* SUB imm */ | ||
1652 | #ifdef DYNA_DEBUG | ||
1653 | fdprintf(fd, "SUB imm\n"); | ||
1654 | #endif | ||
1655 | break; /* FIXME: Implement */ | ||
1656 | case 0xD7: /* RST 10h */ | ||
1657 | #ifdef DYNA_DEBUG | ||
1658 | fdprintf(fd, "RST 10h\n"); | ||
749 | #endif | 1659 | #endif |
750 | DYNA_MOVEQ_l_i_to_r(FETCH,4); | 1660 | break; /* FIXME: Implement */ |
751 | break; | 1661 | case 0xD8: /* RET C */ |
752 | case 0x1E: /* LD E,imm */ | 1662 | #ifdef DYNA_DEBUG |
1663 | fdprintf(fd, "RET C\n"); | ||
1664 | #endif | ||
1665 | break; /* FIXME: Implement */ | ||
1666 | case 0xD9: /* RETI */ | ||
1667 | #ifdef DYNA_DEBUG | ||
1668 | fdprintf(fd, "RETI\n"); | ||
1669 | #endif | ||
1670 | break; /* FIXME: Implement */ | ||
1671 | case 0xDA: /* JP C */ | ||
1672 | #ifdef DYNA_DEBUG | ||
1673 | fdprintf(fd, "JP C\n"); | ||
1674 | #endif | ||
1675 | break; /* FIXME: Implement */ | ||
1676 | case 0xDB: /* NULL */ | ||
753 | #ifdef DYNA_DEBUG | 1677 | #ifdef DYNA_DEBUG |
754 | fdprintf(fd,"LD E,#0x%x\n",readb(xPC)); | 1678 | fdprintf(fd,"NULL\n"); |
755 | #endif | 1679 | #endif |
756 | DYNA_MOVEQ_l_i_to_r(FETCH,5); | 1680 | break; |
757 | break; | 1681 | case 0xDC: /* CALL NC */ |
758 | case 0x26: /* LD H,imm */ | 1682 | #ifdef DYNA_DEBUG |
1683 | fdprintf(fd, "CALL NC\n"); | ||
1684 | #endif | ||
1685 | break; /* FIXME: Implement */ | ||
1686 | case 0xDD: /* NULL */ | ||
759 | #ifdef DYNA_DEBUG | 1687 | #ifdef DYNA_DEBUG |
760 | fdprintf(fd,"LD H,#0x%x\n",readb(xPC)); | 1688 | fdprintf(fd,"NULL\n"); |
1689 | #endif | ||
1690 | break; | ||
1691 | case 0xDE: /* SBC A,imm */ | ||
1692 | #ifdef DYNA_DEBUG | ||
1693 | fdprintf(fd, "SBC A,imm\n"); | ||
1694 | #endif | ||
1695 | break; /* FIXME: Implement */ | ||
1696 | case 0xDF: /* RST 18h */ | ||
1697 | #ifdef DYNA_DEBUG | ||
1698 | fdprintf(fd, "RST 18h\n"); | ||
761 | #endif | 1699 | #endif |
762 | DYNA_AND_l_i_to_r(0xFF,6); | 1700 | break; /* FIXME: Implement */ |
763 | DYNA_OR_l_i_to_r(FETCH<<8,6); | 1701 | case 0xE0: /* LDH (imm),A */ |
764 | break; | ||
765 | case 0x2E: /* LD L,imm */ | ||
766 | #ifdef DYNA_DEBUG | 1702 | #ifdef DYNA_DEBUG |
767 | fdprintf(fd,"LD L,#0x%x\n",readb(xPC)); | 1703 | fdprintf(fd,"LD (0x%x),A\n",readb(xPC)); |
1704 | #endif | ||
1705 | DYNA_PUSH_l_r(1,0); | ||
1706 | DYNA_PEA_w_i(FETCH); | ||
1707 | CALL_NATIVE(&writehi); | ||
1708 | DYNA_ADDQ_l_i_to_r(0,7,1); | ||
1709 | /*writehi(FETCH, A); */ | ||
1710 | break; | ||
1711 | case 0xE1: /* POP HL */ | ||
1712 | #ifdef DYNA_DEBUG | ||
1713 | fdprintf(fd, "POP HL\n"); | ||
1714 | #endif | ||
1715 | break; /* FIXME: Implement */ | ||
1716 | case 0xE2: /* LDH (imm),A */ | ||
1717 | #ifdef DYNA_DEBUG | ||
1718 | fdprintf(fd, "LDH (imm),A\n"); | ||
768 | #endif | 1719 | #endif |
769 | DYNA_AND_l_i_to_r(0xFF00,6); | 1720 | break; /* FIXME: Implement */ |
770 | DYNA_OR_l_i_to_r(FETCH,6); | 1721 | case 0xE3: /* NULL */ |
771 | break; | ||
772 | case 0x3E: /* LD A,imm */ | ||
773 | #ifdef DYNA_DEBUG | 1722 | #ifdef DYNA_DEBUG |
774 | fdprintf(fd,"LD A,#0x%x\n",readb(xPC)); | 1723 | fdprintf(fd,"NULL\n"); |
775 | #endif | 1724 | #endif |
776 | DYNA_MOVEQ_l_i_to_r(FETCH,1); | 1725 | break; |
777 | break; | 1726 | case 0xE4: /* NULL */ |
778 | 1727 | break; | |
779 | case 0xF9: /* LD SP,HL */ | ||
780 | #ifdef DYNA_DEBUG | 1728 | #ifdef DYNA_DEBUG |
781 | fdprintf(fd,"LD SP,HL\n"); | 1729 | fdprintf(fd,"NULL\n"); |
1730 | #endif | ||
1731 | case 0xE5: /* PUSH HL */ | ||
1732 | #ifdef DYNA_DEBUG | ||
1733 | fdprintf(fd, "PUSH HL\n"); | ||
1734 | #endif | ||
1735 | break; /* FIXME: Implement */ | ||
1736 | case 0xE6: /* AND imm */ | ||
1737 | #ifdef DYNA_DEBUG | ||
1738 | fdprintf(fd, "AND imm\n"); | ||
782 | #endif | 1739 | #endif |
783 | DYNA_MOVEA_w_r_to_r(6,0,0); | 1740 | break; /* FIXME: Implement */ |
784 | break; | 1741 | case 0xE7: /* RST 20h */ |
785 | case 0xF3: /* DI */ | ||
786 | #ifdef DYNA_DEBUG | 1742 | #ifdef DYNA_DEBUG |
787 | fdprintf(fd,"DI\n"); | 1743 | fdprintf(fd, "RST 20h\n"); |
788 | #endif | 1744 | #endif |
789 | DYNA_CLR_l_m(&cpu.ime); | 1745 | break; /* FIXME: Implement */ |
790 | DYNA_CLR_l_m(&cpu.ima); | 1746 | case 0xE8: /* ADD SP */ |
791 | DYNA_CLR_l_m(&cpu.halt); | 1747 | #ifdef DYNA_DEBUG |
792 | /* cpu.halt = cpu.ima = cpu.ime = 0; */ | 1748 | fdprintf(fd, "ADD SP\n"); |
793 | break; | 1749 | #endif |
794 | case 0xFB: /* EI */ | 1750 | break; /* FIXME: Implement */ |
1751 | case 0xE9: /* JP HL */ | ||
1752 | #ifdef DYNA_DEBUG | ||
1753 | fdprintf(fd, "JP HL\n"); | ||
1754 | #endif | ||
1755 | break; /* FIXME: Implement */ | ||
1756 | case 0xEA: /* LD A */ | ||
1757 | #ifdef DYNA_DEBUG | ||
1758 | fdprintf(fd, "LD A\n"); | ||
1759 | #endif | ||
1760 | break; /* FIXME: Implement */ | ||
1761 | case 0xEB: /* NULL */ | ||
795 | #ifdef DYNA_DEBUG | 1762 | #ifdef DYNA_DEBUG |
796 | fdprintf(fd,"EI\n"); | 1763 | fdprintf(fd,"NULL\n"); |
797 | #endif | 1764 | #endif |
798 | DYNA_MOVEQ_l_i_to_r(1,0); | 1765 | break; |
799 | DYNA_MOVEA_l_i_to_r(&cpu.ima,3); | 1766 | case 0xEC: /* NULL */ |
800 | DYNA_MOVE_l_r_to_m(0,3); | ||
801 | /*cpu.ima=1; */ | ||
802 | break; | ||
803 | |||
804 | case 0xE0: /* LDH (imm),A */ | ||
805 | #ifdef DYNA_DEBUG | 1767 | #ifdef DYNA_DEBUG |
806 | fdprintf(fd,"LD (0x%x),A\n",readb(xPC)); | 1768 | fdprintf(fd,"NULL\n"); |
807 | #endif | 1769 | #endif |
808 | DYNA_PUSH_l_r(1,0); | 1770 | break; |
809 | DYNA_PEA_w_i(FETCH); | 1771 | case 0xED: /* NULL */ |
810 | CALL_NATIVE(&writehi); | ||
811 | DYNA_ADDQ_l_i_to_r(0,7,1); | ||
812 | /*writehi(FETCH, A); */ | ||
813 | break; | ||
814 | |||
815 | case 0xC3: /* JP (imm) PC = readw(PC) */ | ||
816 | #ifdef DYNA_DEBUG | 1772 | #ifdef DYNA_DEBUG |
817 | fdprintf(fd,"JP (0x%x)\n",readw(xPC)); | 1773 | fdprintf(fd,"NULL\n"); |
818 | #endif | 1774 | #endif |
819 | PC=readw(PC); | 1775 | break; |
820 | done=1; | 1776 | case 0xEE: /* XOR imm */ |
821 | break; | ||
822 | case 0xCD: /* CALL (imm) PUSH(PC+2) PC=readw(PC); */ | ||
823 | #ifdef DYNA_DEBUG | 1777 | #ifdef DYNA_DEBUG |
824 | fdprintf(fd,"CALL (0x%x)\n",readw(xPC)); | 1778 | fdprintf(fd, "XOR imm\n"); |
825 | #endif | 1779 | #endif |
826 | PUSH(PC+2); | 1780 | break; /* FIXME: Implement */ |
827 | PC=readw(PC); | 1781 | case 0xEF: /* RST 28h */ |
828 | done=1; | 1782 | #ifdef DYNA_DEBUG |
829 | break; | 1783 | fdprintf(fd, "RST 28h\n"); |
830 | 1784 | #endif | |
831 | case 0x97: /* SUB A (halfcarry ?) */ | 1785 | break; /* FIXME: Implement */ |
832 | #ifdef DYNA_DEBUG | 1786 | case 0xF0: /* LDH A,(imm) */ |
833 | fdprintf(fd,"SUB A\n"); | 1787 | #ifdef DYNA_DEBUG |
834 | #endif | 1788 | fdprintf(fd,"LDH A,(0x%x)\n",readb(xPC)); |
835 | DYNA_CLR_l_r(1); | 1789 | #endif |
836 | DYNA_MOVEQ_l_i_to_r(0xC0,7); | 1790 | DYNA_PEA_w_i(FETCH); |
837 | break; | 1791 | CALL_NATIVE(&readhi); |
838 | case 0xF0: /* LDH A,(imm) */ | 1792 | DYNA_ADDQ_l_i_to_r(4,7,1); |
839 | #ifdef DYNA_DEBUG | 1793 | DYNA_MOVE_b_r_to_r(0,1); |
840 | fdprintf(fd,"LDH A,(0x%x)\n",readb(xPC)); | 1794 | /*A = readhi(FETCH)*/ |
841 | #endif | 1795 | break; |
842 | DYNA_PEA_w_i(FETCH); | 1796 | case 0xF1: /* POP AF */ |
843 | CALL_NATIVE(&readhi); | 1797 | #ifdef DYNA_DEBUG |
844 | DYNA_ADDQ_l_i_to_r(4,7,1); | 1798 | fdprintf(fd, "POP AF\n"); |
845 | DYNA_MOVE_b_r_to_r(0,1); | 1799 | #endif |
846 | /*A = readhi(FETCH)*/ | 1800 | break; /* FIXME: Implement */ |
847 | break; | 1801 | case 0xF2: /* LDH A,(imm) */ |
848 | case 0x87: // ADD A,A | 1802 | #ifdef DYNA_DEBUG |
849 | #ifdef DYNA_DEBUG | 1803 | fdprintf(fd, "LDH A,(imm)\n"); |
850 | fdprintf(fd,"ADD A,A\n"); | 1804 | #endif |
851 | #endif | 1805 | break; /* FIXME: Implement */ |
852 | /* code taken from gcc -O3 output by compiling; | 1806 | case 0xF3: /* DI */ |
853 | * c=(2*b)&0xFF; | 1807 | #ifdef DYNA_DEBUG |
854 | * a=(c) ? 0 : 0x80 | // zero flag | 1808 | fdprintf(fd,"DI\n"); |
855 | * (0x20 & (c) << 1) | // halfcarry | 1809 | #endif |
856 | * ((2*b)&0x100)>>4; // carry | 1810 | DYNA_CLR_l_m(&cpu.ime); |
857 | */ | 1811 | DYNA_CLR_l_m(&cpu.ima); |
858 | DYNA_MOVE_l_r_to_r(1,0,0); /* move.l d1, d0 */ | 1812 | DYNA_CLR_l_m(&cpu.halt); |
859 | DYNA_ADD_l_r_to_r(0,0,0); /* add.l d0, d0 */ | 1813 | /* cpu.halt = cpu.ima = cpu.ime = 0; */ |
860 | DYNA_AND_l_i_to_r(510,0); /* and.l #510, d0 */ | 1814 | break; |
861 | DYNA_MOVEA_l_r_to_r(0,3,0); /* movea.l d0,a3 */ | 1815 | case 0xF4: /* NULL */ |
862 | DYNA_CLR_b_r(7); /* clr.b d7 */ | 1816 | #ifdef DYNA_DEBUG |
863 | DYNA_TST_b_r(0,0); /* tst.b d0 */ | 1817 | fdprintf(fd,"NULL\n"); |
864 | DYNA_DUMMYBRANCH(2,0); | 1818 | #endif |
865 | DYNA_MOVE_l_r_to_r(1,0,0); /* move.l d1,d0 */ | 1819 | break; |
866 | DYNA_LSHIFT_l(3,0,0,0); /* lsr.l #3, d0 */ | 1820 | case 0xF5: /* PUSH AF */ |
867 | DYNA_MOVEQ_l_i_to_r(16,1); /* moveq #16,d1 */ | 1821 | #ifdef DYNA_DEBUG |
868 | DYNA_AND_l_r_to_r(1,0); /* and.l d1 d0 */ | 1822 | fdprintf(fd, "PUSH AF\n"); |
869 | DYNA_MOVEQ_l_i_to_r(0x80,7); /* moveq #0x80,d7 */ | 1823 | #endif |
870 | DYNA_OR_l_r_to_r(0,7); /* or.l d0, d7 */ | 1824 | break; /* FIXME: Implement */ |
871 | DYNA_BCC_c(0x6,2,0); /* branch not equal, here */ | 1825 | case 0xF6: /* OR imm */ |
872 | DYNA_MOVE_l_r_to_r(3,1,1); /* move.l a3,d1 */ | 1826 | #ifdef DYNA_DEBUG |
873 | DYNA_AND_l_i_to_r(0xFE,1); /* and.l #0xFE,d1 */ | 1827 | fdprintf(fd, "OR imm\n"); |
874 | DYNA_AND_l_i_to_r(0xB0,7); /* and.l #0xB0,d7 */ | 1828 | #endif |
875 | break; | 1829 | break; /* FIXME: Implement */ |
876 | case 0xD0: /* RET NC */ | 1830 | case 0xF7: /* RST 30h */ |
877 | #ifdef DYNA_DEBUG | 1831 | #ifdef DYNA_DEBUG |
878 | fdprintf(fd,"RET NC\n"); | 1832 | fdprintf(fd, "RST 30h\n"); |
879 | #endif | 1833 | #endif |
880 | DYNA_BTST_l_r(5,7); /* btst #5,d7 */ | 1834 | break; /* FIXME: Implement */ |
881 | DYNA_DUMMYBRANCH(2,0); | 1835 | case 0xF8: /* LD HL,SP */ |
882 | POPA(1); /* POP %a1 */ | 1836 | #ifdef DYNA_DEBUG |
883 | DYNA_MOVEA_l_i_to_r(&blockclen,3); | 1837 | fdprintf(fd, "LD HL,SP\n"); |
884 | DYNA_MOVE_l_i_to_m(tclen,3); | 1838 | #endif |
885 | DYNA_RET(); | 1839 | break; /* FIXME: Implement */ |
886 | DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */ | 1840 | case 0xF9: /* LD SP,HL */ |
887 | tclen-=3; | 1841 | #ifdef DYNA_DEBUG |
888 | break; | 1842 | fdprintf(fd,"LD SP,HL\n"); |
889 | case 0xC9: /* RET */ | 1843 | #endif |
890 | #ifdef DYNA_DEBUG | 1844 | DYNA_MOVEA_w_r_to_r(6,0,0); |
891 | fdprintf(fd,"RET\n"); | 1845 | break; |
892 | #endif | 1846 | case 0xFA: /* LD A, (imm) */ |
893 | POPA(1); | 1847 | #ifdef DYNA_DEBUG |
894 | writepc=0; | 1848 | fdprintf(fd,"LD A,(0x%x)\n",readw(xPC)); |
895 | done=1; | 1849 | #endif |
896 | break; | 1850 | /*DYNA_PEA_w_i(readw(xPC)); |
897 | case 0x20: /* JR NZ */ | 1851 | PC+=2; \ |
898 | #ifdef DYNA_DEBUG | 1852 | CALL_NATIVE(&readb); \ |
899 | fdprintf(fd,"JR NZ\n"); | 1853 | DYNA_ADDQ_l_i_to_r(4,7,1); \ |
900 | #endif | 1854 | DYNA_MOVE_l_r_to_r(0,1,0);*/ |
901 | DYNA_BTST_l_r(8,7); /* btst #8,d7 */ | 1855 | break; |
902 | DYNA_DUMMYBRANCH(2,0); | 1856 | case 0xFB: /* EI */ |
903 | DYNA_MOVEA_l_i_to_r(&blockclen,3); | 1857 | #ifdef DYNA_DEBUG |
904 | DYNA_MOVE_l_i_to_m(tclen,3); | 1858 | fdprintf(fd,"EI\n"); |
905 | DYNA_MOVEA_l_i_to_r(PC+1+(signed char)readb(PC),1); | 1859 | #endif |
906 | DYNA_RET(); | 1860 | DYNA_MOVEQ_l_i_to_r(1,0); |
907 | DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */ | 1861 | DYNA_MOVEA_l_i_to_r(&cpu.ima,3); |
908 | tclen--; | 1862 | DYNA_MOVE_l_r_to_m(0,3); |
909 | PC++; | 1863 | /*cpu.ima=1; */ |
910 | break; | 1864 | break; |
911 | case 0xC2: /* JP NZ */ | 1865 | case 0xFC: /* NULL */ |
912 | #ifdef DYNA_DEBUG | 1866 | #ifdef DYNA_DEBUG |
913 | fdprintf(fd,"JP NZ\n"); | 1867 | fdprintf(fd,"NULL\n"); |
914 | #endif | 1868 | #endif |
915 | DYNA_BTST_l_r(8,7); /* btst #8,d7 */ | 1869 | break; |
916 | DYNA_DUMMYBRANCH(2,0); | 1870 | case 0xFD: /* NULL */ |
917 | DYNA_MOVEA_l_i_to_r(&blockclen,3); | 1871 | #ifdef DYNA_DEBUG |
918 | DYNA_MOVE_l_i_to_m(tclen,3); | 1872 | fdprintf(fd,"NULL\n"); |
919 | DYNA_MOVEA_l_i_to_r(readw(PC),1); | 1873 | #endif |
920 | DYNA_RET(); | 1874 | break; |
921 | DYNA_BCC_c(0x6,2,0); /* jump here if bit is not zero */ | 1875 | case 0xFE: /* CMP #<imm> TODO: can be (much) more efficient.*/ |
922 | tclen--; | 1876 | #ifdef DYNA_DEBUG |
923 | PC+=2; | 1877 | fdprintf(fd,"CMP #0x%x\n",readb(xPC)); |
924 | break; | 1878 | #endif |
925 | /* case 0xFA: /* LD A, (imm) | 1879 | DYNA_MOVEA_l_r_to_r(2,3,0); /* movea.l %d2, %a3 */ |
926 | #ifdef DYNA_DEBUG | 1880 | DYNA_MOVEQ_l_i_to_r(FETCH,2); /* moveq.l #<FETCH>,%d2 */ |
927 | fdprintf(fd,"LD A,(0x%x)\n",readw(xPC)); | 1881 | CMP(2); |
928 | #endif | 1882 | DYNA_MOVE_l_r_to_r(3,2,1); /* move.l %a3, %d2 */ |
929 | DYNA_PEA_w_i(readw(xPC)); | 1883 | break; |
930 | PC+=2; \ | 1884 | case 0xFF: /* RST 38h */ |
931 | CALL_NATIVE(&readb); \ | 1885 | #ifdef DYNA_DEBUG |
932 | DYNA_ADDQ_l_i_to_r(4,7,1); \ | 1886 | fdprintf(fd, "RST 38h\n"); |
933 | DYNA_MOVE_l_r_to_r(0,1,0); | 1887 | #endif |
934 | break; */ | 1888 | break; /* FIXME: Implement */ |
935 | 1889 | default: | |
936 | case 0xFE: /* CMP #<imm> TODO: can be (much) more efficient.*/ | 1890 | snprintf(meow,499,"unimplemented opcode %d / 0x%x",op,op); |
937 | #ifdef DYNA_DEBUG | 1891 | die(meow); |
938 | fdprintf(fd,"CMP #0x%x\n",readb(xPC)); | 1892 | return; |
939 | #endif | 1893 | break; |
940 | DYNA_MOVEA_l_r_to_r(2,3,0); /* movea.l %d2, %a3 */ | 1894 | } |
941 | DYNA_MOVEQ_l_i_to_r(FETCH,2); /* moveq.l #<FETCH>,%d2 */ | ||
942 | CMP(2); | ||
943 | DYNA_MOVE_l_r_to_r(3,2,1); /* move.l %a3, %d2 */ | ||
944 | break; | ||
945 | |||
946 | case 0xB1: /* OR C */ | ||
947 | #ifdef DYNA_DEBUG | ||
948 | fdprintf(fd,"OR C\n"); | ||
949 | #endif | ||
950 | DYNA_OR_l_r_to_r(3,1); // or %d3,%d1 | ||
951 | DYNA_MOVEQ_l_i_to_r(0,7); | ||
952 | DYNA_TST_b_r(1,0); | ||
953 | DYNA_DUMMYBRANCH(2,0); | ||
954 | DYNA_MOVEQ_l_i_to_r(0x80,7); | ||
955 | DYNA_BCC_c(0x6,2,0); | ||
956 | break; | ||
957 | default: | ||
958 | snprintf(meow,499,"unimplemented opcode %d / 0x%x",op,op); | ||
959 | die(meow); | ||
960 | return; | ||
961 | break; | ||
962 | } | ||
963 | } | 1895 | } |
964 | #ifdef DYNA_DEBUG | 1896 | #ifdef DYNA_DEBUG |
965 | fdprintf(fd,"(End of Block)\n"); | 1897 | fdprintf(fd,"(End of Block)\n"); |
@@ -968,7 +1900,7 @@ void dynamic_recompile (struct dynarec_block *newblock) { | |||
968 | DYNA_MOVEA_l_i_to_r(&blockclen,3); | 1900 | DYNA_MOVEA_l_i_to_r(&blockclen,3); |
969 | DYNA_MOVE_l_i_to_m(tclen,3); | 1901 | DYNA_MOVE_l_i_to_m(tclen,3); |
970 | if(writepc) | 1902 | if(writepc) |
971 | DYNA_MOVEA_l_i_to_r(PC,1); | 1903 | DYNA_MOVEA_l_i_to_r(PC,1); |
972 | DYNA_RET(); | 1904 | DYNA_RET(); |
973 | PC=oldpc; | 1905 | PC=oldpc; |
974 | setmallocpos(dynapointer); | 1906 | setmallocpos(dynapointer); |
@@ -976,9 +1908,9 @@ void dynamic_recompile (struct dynarec_block *newblock) { | |||
976 | invalidate_icache(); | 1908 | invalidate_icache(); |
977 | snprintf(meow,499,"/dyna_0x%x_code.rb",PC); | 1909 | snprintf(meow,499,"/dyna_0x%x_code.rb",PC); |
978 | fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC); | 1910 | fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC); |
979 | if(fd>=0) { | 1911 | if(fd>=0) |
1912 | { | ||
980 | write(fd,newblock->block,newblock->length); | 1913 | write(fd,newblock->block,newblock->length); |
981 | close(fd); | 1914 | close(fd); |
982 | } | 1915 | } |
983 | } | 1916 | } |
984 | #endif | ||
diff --git a/apps/plugins/rockboy/emu.c b/apps/plugins/rockboy/emu.c index 8ee925cd02..50fc442713 100644 --- a/apps/plugins/rockboy/emu.c +++ b/apps/plugins/rockboy/emu.c | |||
@@ -5,24 +5,9 @@ | |||
5 | #include "cpu-gb.h" | 5 | #include "cpu-gb.h" |
6 | #include "mem.h" | 6 | #include "mem.h" |
7 | #include "lcd-gb.h" | 7 | #include "lcd-gb.h" |
8 | #include "rc.h" | ||
9 | #include "sound.h" | 8 | #include "sound.h" |
10 | #include "rtc-gb.h" | 9 | #include "rtc-gb.h" |
11 | 10 | ||
12 | static int framelen = 16743; | ||
13 | static int framecount; | ||
14 | |||
15 | rcvar_t emu_exports[] = | ||
16 | { | ||
17 | RCV_INT("framelen", &framelen), | ||
18 | RCV_INT("framecount", &framecount), | ||
19 | RCV_END | ||
20 | }; | ||
21 | |||
22 | void emu_init(void) | ||
23 | { | ||
24 | } | ||
25 | |||
26 | /* | 11 | /* |
27 | * emu_reset is called to initialize the state of the emulated | 12 | * emu_reset is called to initialize the state of the emulated |
28 | * system. It should set cpu registers, hardware registers, etc. to | 13 | * system. It should set cpu registers, hardware registers, etc. to |
@@ -47,9 +32,8 @@ void emu_step(void) | |||
47 | * make things work in the mean time. */ | 32 | * make things work in the mean time. */ |
48 | void emu_run(void) | 33 | void emu_run(void) |
49 | { | 34 | { |
50 | // void *timer = sys_timer(); | 35 | /*void *timer = sys_timer();*/ |
51 | int framesin=0,frames=0,timeten=*rb->current_tick, timehun=*rb->current_tick; | 36 | int framesin=0,frames=0,timeten=*rb->current_tick, timehun=*rb->current_tick; |
52 | // int delay; | ||
53 | 37 | ||
54 | setvidmode(options.fullscreen); | 38 | setvidmode(options.fullscreen); |
55 | vid_begin(); | 39 | vid_begin(); |
@@ -63,24 +47,25 @@ void emu_run(void) | |||
63 | while (R_LY > 0 && R_LY < 144) | 47 | while (R_LY > 0 && R_LY < 144) |
64 | emu_step(); | 48 | emu_step(); |
65 | 49 | ||
66 | rtc_tick(); | 50 | /* rtc_tick(); */ /* RTC support not implemented */ |
67 | sound_mix(); | 51 | |
68 | if (!pcm_submit()) | 52 | if(options.sound) |
69 | { | 53 | { |
70 | /* delay = framelen - sys_elapsed(timer); | 54 | sound_mix(); |
71 | sys_sleep(delay); | 55 | pcm_submit(); |
72 | sys_elapsed(timer);*/ | ||
73 | } | 56 | } |
74 | 57 | ||
75 | doevents(); | 58 | doevents(); |
76 | vid_begin(); | 59 | vid_begin(); |
77 | 60 | ||
78 | if (!(R_LCDC & 0x80)) | 61 | if (!(R_LCDC & 0x80)) |
79 | cpu_emulate(32832); | 62 | cpu_emulate(32832); |
80 | 63 | ||
81 | while (R_LY > 0) /* wait for next frame */ | 64 | while (R_LY > 0) /* wait for next frame */ |
65 | { | ||
82 | emu_step(); | 66 | emu_step(); |
83 | rb->yield(); | 67 | rb->yield(); |
68 | } | ||
84 | 69 | ||
85 | frames++; | 70 | frames++; |
86 | framesin++; | 71 | framesin++; |
diff --git a/apps/plugins/rockboy/emu.h b/apps/plugins/rockboy/emu.h index 979b33cc54..2e1c7bdc08 100644 --- a/apps/plugins/rockboy/emu.h +++ b/apps/plugins/rockboy/emu.h | |||
@@ -1,2 +1,2 @@ | |||
1 | void emu_reset(void); | 1 | void emu_reset(void); |
2 | void emu_run(void); | 2 | void emu_run(void) ICODE_ATTR; |
diff --git a/apps/plugins/rockboy/events.c b/apps/plugins/rockboy/events.c index 5a34ce81e5..c018f7ce53 100644 --- a/apps/plugins/rockboy/events.c +++ b/apps/plugins/rockboy/events.c | |||
@@ -8,10 +8,6 @@ | |||
8 | #include "rockmacros.h" | 8 | #include "rockmacros.h" |
9 | #include "input.h" | 9 | #include "input.h" |
10 | 10 | ||
11 | |||
12 | char keystates[MAX_KEYS]; | ||
13 | int nkeysdown; | ||
14 | |||
15 | #define MAX_EVENTS 32 | 11 | #define MAX_EVENTS 32 |
16 | 12 | ||
17 | static event_t eventqueue[MAX_EVENTS]; | 13 | static event_t eventqueue[MAX_EVENTS]; |
@@ -20,34 +16,23 @@ static int eventhead, eventpos; | |||
20 | 16 | ||
21 | int ev_postevent(event_t *ev) | 17 | int ev_postevent(event_t *ev) |
22 | { | 18 | { |
23 | int nextevent; | 19 | int nextevent; |
24 | nextevent = (eventhead+1)%MAX_EVENTS; | 20 | nextevent = (eventhead+1)%MAX_EVENTS; |
25 | if (nextevent == eventpos) | 21 | if (nextevent == eventpos) |
26 | return 0; | 22 | return 0; |
27 | eventqueue[eventhead] = *ev; | 23 | eventqueue[eventhead] = *ev; |
28 | eventhead = nextevent; | 24 | eventhead = nextevent; |
29 | return 1; | 25 | return 1; |
30 | } | 26 | } |
31 | 27 | ||
32 | int ev_getevent(event_t *ev) | 28 | int ev_getevent(event_t *ev) |
33 | { | 29 | { |
34 | if (eventpos == eventhead) | 30 | if (eventpos == eventhead) |
35 | { | 31 | { |
36 | ev->type = EV_NONE; | 32 | ev->type = EV_NONE; |
37 | return 0; | 33 | return 0; |
38 | } | 34 | } |
39 | *ev = eventqueue[eventpos]; | 35 | *ev = eventqueue[eventpos]; |
40 | eventpos = (eventpos+1)%MAX_EVENTS; | 36 | eventpos = (eventpos+1)%MAX_EVENTS; |
41 | if (ev->type == EV_PRESS) | 37 | return 1; |
42 | { | ||
43 | keystates[ev->code] = 1; | ||
44 | nkeysdown++; | ||
45 | } | ||
46 | if (ev->type == EV_RELEASE) | ||
47 | { | ||
48 | keystates[ev->code] = 0; | ||
49 | nkeysdown--; | ||
50 | if (nkeysdown < 0) nkeysdown = 0; | ||
51 | } | ||
52 | return 1; | ||
53 | } | 38 | } |
diff --git a/apps/plugins/rockboy/exports.c b/apps/plugins/rockboy/exports.c deleted file mode 100644 index 43504f4b4f..0000000000 --- a/apps/plugins/rockboy/exports.c +++ /dev/null | |||
@@ -1,42 +0,0 @@ | |||
1 | |||
2 | |||
3 | #include "rockmacros.h" | ||
4 | |||
5 | #include "rc.h" | ||
6 | |||
7 | extern rcvar_t emu_exports[], loader_exports[], | ||
8 | lcd_exports[], rtc_exports[], sound_exports[], | ||
9 | vid_exports[], joy_exports[], pcm_exports[]; | ||
10 | |||
11 | |||
12 | rcvar_t *sources[] = | ||
13 | { | ||
14 | emu_exports, | ||
15 | loader_exports, | ||
16 | lcd_exports, | ||
17 | rtc_exports, | ||
18 | sound_exports, | ||
19 | vid_exports, | ||
20 | joy_exports, | ||
21 | pcm_exports, | ||
22 | NULL | ||
23 | }; | ||
24 | |||
25 | |||
26 | void init_exports(void) | ||
27 | { | ||
28 | rcvar_t **s = sources; | ||
29 | |||
30 | while (*s) | ||
31 | rc_exportvars(*(s++)); | ||
32 | } | ||
33 | |||
34 | |||
35 | void show_exports(void) | ||
36 | { | ||
37 | // TODO | ||
38 | /*int i, j; | ||
39 | for (i = 0; sources[i]; i++) | ||
40 | for (j = 0; sources[i][j].name; j++) | ||
41 | printf("%s\n", sources[i][j].name);*/ | ||
42 | } | ||
diff --git a/apps/plugins/rockboy/exports.h b/apps/plugins/rockboy/exports.h deleted file mode 100644 index 8d787c0945..0000000000 --- a/apps/plugins/rockboy/exports.h +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | void init_exports(void); | ||
2 | void show_exports(void); | ||
diff --git a/apps/plugins/rockboy/fastmem.c b/apps/plugins/rockboy/fastmem.c index d883438ce1..9092f68fed 100644 --- a/apps/plugins/rockboy/fastmem.c +++ b/apps/plugins/rockboy/fastmem.c | |||
@@ -3,136 +3,75 @@ | |||
3 | #include "rockmacros.h" | 3 | #include "rockmacros.h" |
4 | #include "fastmem.h" | 4 | #include "fastmem.h" |
5 | 5 | ||
6 | |||
7 | #define D 0 /* direct */ | ||
8 | #define C 1 /* direct cgb-only */ | ||
9 | #define R 2 /* io register */ | ||
10 | #define S 3 /* sound register */ | ||
11 | #define W 4 /* wave pattern */ | ||
12 | |||
13 | #define F 0xFF /* fail */ | ||
14 | |||
15 | const byte himask[256]; | ||
16 | |||
17 | const byte hi_rmap[256] = | ||
18 | { | ||
19 | 0, 0, R, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
20 | S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, | ||
21 | S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, | ||
22 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
23 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, C, | ||
24 | 0, C, C, C, C, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
25 | 0, 0, 0, 0, 0, 0, 0, 0, C, C, C, C, 0, 0, 0, 0, | ||
26 | C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||
27 | }; | ||
28 | |||
29 | const byte hi_wmap[256] = | ||
30 | { | ||
31 | R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, | ||
32 | S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, | ||
33 | S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, | ||
34 | S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, | ||
35 | R, R, R, R, R, R, R, R, R, R, R, R, 0, R, 0, R, | ||
36 | 0, C, C, C, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
37 | 0, 0, 0, 0, 0, 0, 0, 0, R, R, R, R, 0, 0, 0, 0, | ||
38 | R, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
39 | |||
40 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
41 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
42 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
43 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
44 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
45 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
46 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
47 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, R | ||
48 | }; | ||
49 | |||
50 | |||
51 | byte readb(int a) | 6 | byte readb(int a) |
52 | { | 7 | { |
53 | byte *p = mbc.rmap[a>>12]; | 8 | byte *p = mbc.rmap[a>>12]; |
54 | if (p) return p[a]; | 9 | if (p) return p[a]; |
55 | else return mem_read(a); | 10 | else return mem_read(a); |
56 | } | 11 | } |
57 | 12 | ||
58 | void writeb(int a, byte b) | 13 | void writeb(int a, byte b) |
59 | { | 14 | { |
60 | byte *p = mbc.wmap[a>>12]; | 15 | byte *p = mbc.wmap[a>>12]; |
61 | if (p) p[a] = b; | 16 | if (p) p[a] = b; |
62 | else mem_write(a, b); | 17 | else mem_write(a, b); |
63 | } | 18 | } |
64 | 19 | ||
65 | int readw(int a) | 20 | int readw(int a) |
66 | { | 21 | { |
67 | if ((a+1) & 0xfff) | 22 | if ((a+1) & 0xfff) |
68 | { | 23 | { |
69 | byte *p = mbc.rmap[a>>12]; | 24 | byte *p = mbc.rmap[a>>12]; |
70 | if (p) | 25 | if (p) |
71 | { | 26 | { |
72 | #ifdef ROCKBOX_LITTLE_ENDIAN | 27 | #ifdef ROCKBOX_LITTLE_ENDIAN |
73 | #ifndef ALLOW_UNALIGNED_IO | 28 | #ifndef ALLOW_UNALIGNED_IO |
74 | if (a&1) return p[a] | (p[a+1]<<8); | 29 | if (a&1) return p[a] | (p[a+1]<<8); |
75 | #endif | 30 | #endif |
76 | return *(word *)(p+a); | 31 | return *(word *)(p+a); |
77 | #else | 32 | #else |
78 | return p[a] | (p[a+1]<<8); | 33 | return p[a] | (p[a+1]<<8); |
79 | #endif | 34 | #endif |
80 | } | 35 | } |
81 | } | 36 | } |
82 | return mem_read(a) | (mem_read(a+1)<<8); | 37 | return mem_read(a) | (mem_read(a+1)<<8); |
83 | } | 38 | } |
84 | 39 | ||
85 | void writew(int a, int w) | 40 | void writew(int a, int w) |
86 | { | 41 | { |
87 | if ((a+1) & 0xfff) | 42 | if ((a+1) & 0xfff) |
88 | { | 43 | { |
89 | byte *p = mbc.wmap[a>>12]; | 44 | byte *p = mbc.wmap[a>>12]; |
90 | if (p) | 45 | if (p) |
91 | { | 46 | { |
92 | #ifdef ROCKBOX_LITTLE_ENDIAN | 47 | #ifdef ROCKBOX_LITTLE_ENDIAN |
93 | #ifndef ALLOW_UNALIGNED_IO | 48 | #ifndef ALLOW_UNALIGNED_IO |
94 | if (a&1) | 49 | if (a&1) |
95 | { | 50 | { |
96 | p[a] = w; | 51 | p[a] = w; |
97 | p[a+1] = w >> 8; | 52 | p[a+1] = w >> 8; |
98 | return; | 53 | return; |
99 | } | 54 | } |
100 | #endif | 55 | #endif |
101 | *(word *)(p+a) = w; | 56 | *(word *)(p+a) = w; |
102 | return; | 57 | return; |
103 | #else | 58 | #else |
104 | p[a] = w; | 59 | p[a] = w; |
105 | p[a+1] = w >> 8; | 60 | p[a+1] = w >> 8; |
106 | return; | 61 | return; |
107 | #endif | 62 | #endif |
108 | } | 63 | } |
109 | } | 64 | } |
110 | mem_write(a, w); | 65 | mem_write(a, w); |
111 | mem_write(a+1, w>>8); | 66 | mem_write(a+1, w>>8); |
112 | } | 67 | } |
113 | 68 | ||
114 | byte readhi(int a) | 69 | byte readhi(int a) |
115 | { | 70 | { |
116 | return readb(a | 0xff00); | 71 | return readb(a | 0xff00); |
117 | } | 72 | } |
118 | 73 | ||
119 | void writehi(int a, byte b) | 74 | void writehi(int a, byte b) |
120 | { | 75 | { |
121 | writeb(a | 0xff00, b); | 76 | writeb(a | 0xff00, b); |
122 | } | 77 | } |
123 | |||
124 | #if 0 | ||
125 | byte readhi(int a) | ||
126 | { | ||
127 | byte (*rd)() = hi_read[a]; | ||
128 | return rd ? rd(a) : (ram.hi[a] | himask[a]); | ||
129 | } | ||
130 | |||
131 | void writehi(int a, byte b) | ||
132 | { | ||
133 | byte (*wr)() = hi_write[a]; | ||
134 | if (wr) wr(a, b); | ||
135 | else ram.hi[a] = b & ~himask[a]; | ||
136 | } | ||
137 | #endif | ||
138 | |||
diff --git a/apps/plugins/rockboy/fastmem.h b/apps/plugins/rockboy/fastmem.h index e36eb2032a..cc73a55a9d 100644 --- a/apps/plugins/rockboy/fastmem.h +++ b/apps/plugins/rockboy/fastmem.h | |||
@@ -13,10 +13,5 @@ int readw(int a) ICODE_ATTR; | |||
13 | void writew(int a, int w) ICODE_ATTR; | 13 | void writew(int a, int w) ICODE_ATTR; |
14 | byte readhi(int a) ICODE_ATTR; | 14 | byte readhi(int a) ICODE_ATTR; |
15 | void writehi(int a, byte b) ICODE_ATTR; | 15 | void writehi(int a, byte b) ICODE_ATTR; |
16 | #if 0 | ||
17 | byte readhi(int a); | ||
18 | void writehi(int a, byte b); | ||
19 | #endif | ||
20 | |||
21 | 16 | ||
22 | #endif | 17 | #endif |
diff --git a/apps/plugins/rockboy/fb.h b/apps/plugins/rockboy/fb.h index d70708e13a..97aeb425a0 100644 --- a/apps/plugins/rockboy/fb.h +++ b/apps/plugins/rockboy/fb.h | |||
@@ -10,19 +10,15 @@ | |||
10 | 10 | ||
11 | struct fb | 11 | struct fb |
12 | { | 12 | { |
13 | fb_data *ptr; | 13 | fb_data *ptr; |
14 | int w, h; | 14 | struct |
15 | int pelsize; | 15 | { |
16 | int pitch; | 16 | int l, r; |
17 | int indexed; | 17 | } cc[3]; |
18 | struct | 18 | int enabled; |
19 | { | 19 | #if !defined(HAVE_LCD_COLOR) |
20 | int l, r; | 20 | int mode; |
21 | } cc[4]; | 21 | #endif |
22 | int yuv; | ||
23 | int enabled; | ||
24 | int dirty; | ||
25 | int mode; | ||
26 | }; | 22 | }; |
27 | 23 | ||
28 | 24 | ||
diff --git a/apps/plugins/rockboy/hw.c b/apps/plugins/rockboy/hw.c index 794e4e4516..05cdfbc156 100644 --- a/apps/plugins/rockboy/hw.c +++ b/apps/plugins/rockboy/hw.c | |||
@@ -11,7 +11,7 @@ | |||
11 | #include "fastmem.h" | 11 | #include "fastmem.h" |
12 | 12 | ||
13 | 13 | ||
14 | struct hw hw; | 14 | struct hw hw IBSS_ATTR; |
15 | 15 | ||
16 | 16 | ||
17 | 17 | ||
@@ -24,17 +24,17 @@ struct hw hw; | |||
24 | 24 | ||
25 | void hw_interrupt(byte i, byte mask) | 25 | void hw_interrupt(byte i, byte mask) |
26 | { | 26 | { |
27 | byte oldif = R_IF; | 27 | byte oldif = R_IF; |
28 | i &= 0x1F & mask; | 28 | i &= 0x1F & mask; |
29 | R_IF |= i & (hw.ilines ^ i); | 29 | R_IF |= i & (hw.ilines ^ i); |
30 | 30 | ||
31 | /* FIXME - is this correct? not sure the docs understand... */ | 31 | /* FIXME - is this correct? not sure the docs understand... */ |
32 | if ((R_IF & (R_IF ^ oldif) & R_IE) && cpu.ime) cpu.halt = 0; | 32 | if ((R_IF & (R_IF ^ oldif) & R_IE) && cpu.ime) cpu.halt = 0; |
33 | /* if ((i & (hw.ilines ^ i) & R_IE) && cpu.ime) cpu.halt = 0; */ | 33 | /* if ((i & (hw.ilines ^ i) & R_IE) && cpu.ime) cpu.halt = 0; */ |
34 | /* if ((i & R_IE) && cpu.ime) cpu.halt = 0; */ | 34 | /* if ((i & R_IE) && cpu.ime) cpu.halt = 0; */ |
35 | 35 | ||
36 | hw.ilines &= ~mask; | 36 | hw.ilines &= ~mask; |
37 | hw.ilines |= i; | 37 | hw.ilines |= i; |
38 | } | 38 | } |
39 | 39 | ||
40 | 40 | ||
@@ -47,64 +47,65 @@ void hw_interrupt(byte i, byte mask) | |||
47 | 47 | ||
48 | void hw_dma(byte b) | 48 | void hw_dma(byte b) |
49 | { | 49 | { |
50 | int i; | 50 | int i; |
51 | addr a; | 51 | addr a; |
52 | 52 | ||
53 | a = ((addr)b) << 8; | 53 | a = ((addr)b) << 8; |
54 | for (i = 0; i < 160; i++, a++) | 54 | for (i = 0; i < 160; i++, a++) |
55 | lcd.oam.mem[i] = readb(a); | 55 | lcd.oam.mem[i] = readb(a); |
56 | } | 56 | } |
57 | 57 | ||
58 | 58 | void hw_hdma(void) | |
59 | |||
60 | void hw_hdma_cmd(byte c) | ||
61 | { | 59 | { |
62 | int cnt; | 60 | int cnt; |
63 | addr sa; | 61 | addr sa; |
64 | int da; | 62 | int da; |
65 | 63 | ||
66 | /* Begin or cancel HDMA */ | 64 | sa = ((addr)R_HDMA1 << 8) | (R_HDMA2&0xf0); |
67 | if ((hw.hdma|c) & 0x80) | 65 | da = 0x8000 | ((int)(R_HDMA3&0x1f) << 8) | (R_HDMA4&0xf0); |
68 | { | 66 | cnt = 16; |
69 | hw.hdma = c; | 67 | while (cnt--) |
70 | R_HDMA5 = c & 0x7f; | 68 | writeb(da++, readb(sa++)); |
71 | return; | 69 | cpu_timers(16); |
72 | } | 70 | R_HDMA1 = sa >> 8; |
73 | 71 | R_HDMA2 = sa & 0xF0; | |
74 | /* Perform GDMA */ | 72 | R_HDMA3 = 0x1F & (da >> 8); |
75 | sa = ((addr)R_HDMA1 << 8) | (R_HDMA2&0xf0); | 73 | R_HDMA4 = da & 0xF0; |
76 | da = 0x8000 | ((int)(R_HDMA3&0x1f) << 8) | (R_HDMA4&0xf0); | 74 | R_HDMA5--; |
77 | cnt = ((int)c)+1; | 75 | hw.hdma--; |
78 | /* FIXME - this should use cpu time! */ | ||
79 | /*cpu_timers(102 * cnt);*/ | ||
80 | cnt <<= 4; | ||
81 | while (cnt--) | ||
82 | writeb(da++, readb(sa++)); | ||
83 | R_HDMA1 = sa >> 8; | ||
84 | R_HDMA2 = sa & 0xF0; | ||
85 | R_HDMA3 = 0x1F & (da >> 8); | ||
86 | R_HDMA4 = da & 0xF0; | ||
87 | R_HDMA5 = 0xFF; | ||
88 | } | 76 | } |
89 | 77 | ||
90 | 78 | void hw_hdma_cmd(byte c) | |
91 | void hw_hdma(void) | ||
92 | { | 79 | { |
93 | int cnt; | 80 | int cnt; |
94 | addr sa; | 81 | addr sa; |
95 | int da; | 82 | int da; |
96 | 83 | ||
97 | sa = ((addr)R_HDMA1 << 8) | (R_HDMA2&0xf0); | 84 | /* Begin or cancel HDMA */ |
98 | da = 0x8000 | ((int)(R_HDMA3&0x1f) << 8) | (R_HDMA4&0xf0); | 85 | if ((hw.hdma|c) & 0x80) |
99 | cnt = 16; | 86 | { |
100 | while (cnt--) | 87 | hw.hdma = c; |
101 | writeb(da++, readb(sa++)); | 88 | R_HDMA5 = c & 0x7f; |
102 | R_HDMA1 = sa >> 8; | 89 | if ((R_STAT&0x03) == 0x00) hw_hdma(); |
103 | R_HDMA2 = sa & 0xF0; | 90 | return; |
104 | R_HDMA3 = 0x1F & (da >> 8); | 91 | } |
105 | R_HDMA4 = da & 0xF0; | 92 | |
106 | R_HDMA5--; | 93 | /* Perform GDMA */ |
107 | hw.hdma--; | 94 | sa = ((addr)R_HDMA1 << 8) | (R_HDMA2&0xf0); |
95 | da = 0x8000 | ((int)(R_HDMA3&0x1f) << 8) | (R_HDMA4&0xf0); | ||
96 | cnt = ((int)c)+1; | ||
97 | /* FIXME - this should use cpu time! */ | ||
98 | /*cpu_timers(102 * cnt);*/ | ||
99 | cpu_timers((460>>cpu.speed)+cnt*16); /*dalias*/ | ||
100 | /*cpu_timers(228 + (16*cnt));*/ /* this should be right according to no$ */ | ||
101 | cnt <<= 4; | ||
102 | while (cnt--) | ||
103 | writeb(da++, readb(sa++)); | ||
104 | R_HDMA1 = sa >> 8; | ||
105 | R_HDMA2 = sa & 0xF0; | ||
106 | R_HDMA3 = 0x1F & (da >> 8); | ||
107 | R_HDMA4 = da & 0xF0; | ||
108 | R_HDMA5 = 0xFF; | ||
108 | } | 109 | } |
109 | 110 | ||
110 | 111 | ||
@@ -116,20 +117,20 @@ void hw_hdma(void) | |||
116 | 117 | ||
117 | void pad_refresh() | 118 | void pad_refresh() |
118 | { | 119 | { |
119 | byte oldp1; | 120 | byte oldp1; |
120 | oldp1 = R_P1; | 121 | oldp1 = R_P1; |
121 | R_P1 &= 0x30; | 122 | R_P1 &= 0x30; |
122 | R_P1 |= 0xc0; | 123 | R_P1 |= 0xc0; |
123 | if (!(R_P1 & 0x10)) | 124 | if (!(R_P1 & 0x10)) |
124 | R_P1 |= (hw.pad & 0x0F); | 125 | R_P1 |= (hw.pad & 0x0F); |
125 | if (!(R_P1 & 0x20)) | 126 | if (!(R_P1 & 0x20)) |
126 | R_P1 |= (hw.pad >> 4); | 127 | R_P1 |= (hw.pad >> 4); |
127 | R_P1 ^= 0x0F; | 128 | R_P1 ^= 0x0F; |
128 | if (oldp1 & ~R_P1 & 0x0F) | 129 | if (oldp1 & ~R_P1 & 0x0F) |
129 | { | 130 | { |
130 | hw_interrupt(IF_PAD, IF_PAD); | 131 | hw_interrupt(IF_PAD, IF_PAD); |
131 | hw_interrupt(0, IF_PAD); | 132 | hw_interrupt(0, IF_PAD); |
132 | } | 133 | } |
133 | } | 134 | } |
134 | 135 | ||
135 | 136 | ||
@@ -140,44 +141,37 @@ void pad_refresh() | |||
140 | 141 | ||
141 | void pad_press(byte k) | 142 | void pad_press(byte k) |
142 | { | 143 | { |
143 | if (hw.pad & k) | 144 | if (hw.pad & k) |
144 | return; | 145 | return; |
145 | hw.pad |= k; | 146 | hw.pad |= k; |
146 | pad_refresh(); | 147 | pad_refresh(); |
147 | } | 148 | } |
148 | 149 | ||
149 | void pad_release(byte k) | 150 | void pad_release(byte k) |
150 | { | 151 | { |
151 | if (!(hw.pad & k)) | 152 | if (!(hw.pad & k)) |
152 | return; | 153 | return; |
153 | hw.pad &= ~k; | 154 | hw.pad &= ~k; |
154 | pad_refresh(); | 155 | pad_refresh(); |
155 | } | 156 | } |
156 | 157 | ||
157 | void pad_set(byte k, int st) | 158 | void pad_set(byte k, int st) |
158 | { | 159 | { |
159 | st ? pad_press(k) : pad_release(k); | 160 | st ? pad_press(k) : pad_release(k); |
160 | } | 161 | } |
161 | 162 | ||
162 | void hw_reset() | 163 | void hw_reset() |
163 | { | 164 | { |
164 | hw.ilines = hw.pad = 0; | 165 | hw.ilines = hw.pad = 0; |
165 | 166 | ||
166 | memset(ram.hi, 0, sizeof ram.hi); | 167 | memset(ram.hi, 0, sizeof ram.hi); |
167 | 168 | ||
168 | R_P1 = 0xFF; | 169 | R_P1 = 0xFF; |
169 | R_LCDC = 0x91; | 170 | R_LCDC = 0x91; |
170 | R_BGP = 0xFC; | 171 | R_BGP = 0xFC; |
171 | R_OBP0 = 0xFF; | 172 | R_OBP0 = 0xFF; |
172 | R_OBP1 = 0xFF; | 173 | R_OBP1 = 0xFF; |
173 | R_SVBK = 0x01; | 174 | R_SVBK = 0x01; |
174 | R_HDMA5 = 0xFF; | 175 | R_HDMA5 = 0xFF; |
175 | R_VBK = 0xFE; | 176 | R_VBK = 0xFE; |
176 | } | 177 | } |
177 | |||
178 | |||
179 | |||
180 | |||
181 | |||
182 | |||
183 | |||
diff --git a/apps/plugins/rockboy/hw.h b/apps/plugins/rockboy/hw.h index f1e632abdb..297eba30fe 100644 --- a/apps/plugins/rockboy/hw.h +++ b/apps/plugins/rockboy/hw.h | |||
@@ -25,10 +25,10 @@ | |||
25 | 25 | ||
26 | struct hw | 26 | struct hw |
27 | { | 27 | { |
28 | byte ilines; | 28 | byte ilines; |
29 | byte pad; | 29 | byte pad; |
30 | int hdma; | 30 | int hdma; |
31 | int cgb,gba; | 31 | int cgb; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | 34 | ||
diff --git a/apps/plugins/rockboy/inflate.c b/apps/plugins/rockboy/inflate.c deleted file mode 100644 index 6818749187..0000000000 --- a/apps/plugins/rockboy/inflate.c +++ /dev/null | |||
@@ -1,514 +0,0 @@ | |||
1 | |||
2 | /* Slightly modified from its original form so as not to exit the | ||
3 | * program on errors. The resulting file remains in the public | ||
4 | * domain for all to use. */ | ||
5 | |||
6 | /* --- GZIP file format uncompression routines --- */ | ||
7 | |||
8 | /* The following routines (notably the unzip()) function below | ||
9 | * uncompress gzipped data. They are terribly slow at the task, but | ||
10 | * it is presumed that they work reasonably well. They don't do any | ||
11 | * error checking, but they're probably not too vulnerable to buggy | ||
12 | * data either. Another important limitation (but it would be pretty | ||
13 | * easy to get around) is that the data must reside in memory, it is | ||
14 | * not read as a stream. They have been very little tested. Anyway, | ||
15 | * whatever these functions are good for, I put them in the public | ||
16 | * domain. -- David Madore <david.madore@ens.fr> 1999/11/21 */ | ||
17 | |||
18 | #include "rockmacros.h" | ||
19 | |||
20 | static unsigned int | ||
21 | peek_bits (const unsigned char *data, long p, int q) | ||
22 | /* Read q bits starting from bit p from the data pointed to by | ||
23 | * data. Data is in little-endian format. */ | ||
24 | { | ||
25 | unsigned int answer; | ||
26 | int cnt; /* Number of bits already placed in answer */ | ||
27 | char ob, lb; /* Offset and length of bit field within current byte */ | ||
28 | |||
29 | answer = 0; | ||
30 | for ( cnt=0 ; cnt<q ; /* cnt updated in body */ ) | ||
31 | { | ||
32 | ob = (p+cnt)%8; | ||
33 | lb = 8-ob; | ||
34 | if ( cnt+lb > q ) | ||
35 | lb = q-cnt; | ||
36 | answer |= ((unsigned int)((data[(p+cnt)/8]>>ob)&((1U<<lb)-1)))<<cnt; | ||
37 | cnt += lb; | ||
38 | } | ||
39 | return answer; | ||
40 | } | ||
41 | |||
42 | static unsigned int | ||
43 | read_bits (const unsigned char *data, long *p, int q) | ||
44 | /* Read q bits as per peek_bits(), but also increase p by q. */ | ||
45 | { | ||
46 | unsigned int answer; | ||
47 | |||
48 | answer = peek_bits (data, *p, q); | ||
49 | *p += q; | ||
50 | return answer; | ||
51 | } | ||
52 | |||
53 | static void | ||
54 | make_code_table (const char size_table[], int table_length, | ||
55 | unsigned int code_table[], int maxbits) | ||
56 | /* Make a code table from a length table. See rfc1951, section | ||
57 | * 3.2.2, for details on what this means. The size_table | ||
58 | * contains the length of the Huffman codes for each letter, and | ||
59 | * the code_table receives the computed codes themselves. | ||
60 | * table_length is the size of the tables (alphabet length) and | ||
61 | * maxbits is the maximal allowed code length. */ | ||
62 | { | ||
63 | int i, j; | ||
64 | unsigned int code; | ||
65 | |||
66 | code = 0; | ||
67 | for ( i=1 ; i<=maxbits ; i++ ) | ||
68 | { | ||
69 | for ( j=0 ; j<table_length ; j++ ) | ||
70 | { | ||
71 | if ( size_table[j]==i ) | ||
72 | code_table[j] = code++; | ||
73 | } | ||
74 | code <<= 1; | ||
75 | } | ||
76 | } | ||
77 | |||
78 | static int | ||
79 | decode_one (const unsigned char *data, long *p, | ||
80 | const char size_table[], int table_length, | ||
81 | const unsigned int code_table[], int maxbits) | ||
82 | /* Decode one alphabet letter from the data, starting at bit p | ||
83 | * (which will be increased by the appropriate amount) using | ||
84 | * size_table and code_table to decipher the Huffman encoding. */ | ||
85 | { | ||
86 | unsigned int code; | ||
87 | int i, j; | ||
88 | |||
89 | code = 0; | ||
90 | /* Read as many bits as are likely to be necessary - backward, of | ||
91 | * course. */ | ||
92 | for ( i=0 ; i<maxbits ; i++ ) | ||
93 | code = (code<<1) + peek_bits (data, (*p)+i, 1); | ||
94 | /* Now examine each symbol of the table to find one that matches the | ||
95 | * first bits of the code read. */ | ||
96 | for ( j=0 ; j<table_length ; j++ ) | ||
97 | { | ||
98 | if ( size_table[j] | ||
99 | && ( (code>>(maxbits-size_table[j])) == code_table[j] ) ) | ||
100 | { | ||
101 | *p += size_table[j]; | ||
102 | return j; | ||
103 | } | ||
104 | } | ||
105 | return -1; | ||
106 | } | ||
107 | |||
108 | /* I don't know what these should be. The rfc1951 doesn't seem to say | ||
109 | * (it only mentions them in the last paragraph of section 3.2.1). 15 | ||
110 | * is almost certainly safe, and it is the largest I can put given the | ||
111 | * constraints on the size of integers in the C standard. */ | ||
112 | #define CLEN_MAXBITS 15 | ||
113 | #define HLIT_MAXBITS 15 | ||
114 | #define HDIST_MAXBITS 15 | ||
115 | |||
116 | /* The magical table sizes... */ | ||
117 | #define CLEN_TSIZE 19 | ||
118 | #define HLIT_TSIZE 288 | ||
119 | #define HDIST_TSIZE 30 | ||
120 | |||
121 | static int | ||
122 | get_tables (const unsigned char *data, long *p, | ||
123 | char hlit_size_table[HLIT_TSIZE], | ||
124 | unsigned int hlit_code_table[HLIT_TSIZE], | ||
125 | char hdist_size_table[HDIST_TSIZE], | ||
126 | unsigned int hdist_code_table[HDIST_TSIZE]) | ||
127 | /* Fill the Huffman tables (first the code lengths table, and | ||
128 | * then, using it, the literal/length table and the distance | ||
129 | * table). See section 3.2.7 of rfc1951 for details. */ | ||
130 | { | ||
131 | char hlit, hdist, hclen; | ||
132 | const int clen_weird_tangle[CLEN_TSIZE] | ||
133 | = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; | ||
134 | char clen_size_table[CLEN_TSIZE]; | ||
135 | unsigned int clen_code_table[CLEN_TSIZE]; | ||
136 | int j; | ||
137 | unsigned int b; | ||
138 | int remainder; /* See note at end of section 3.2.7 of rfc1951. */ | ||
139 | char rem_val; | ||
140 | |||
141 | hlit = read_bits (data, p, 5); | ||
142 | hdist = read_bits (data, p, 5); | ||
143 | hclen = read_bits (data, p, 4); | ||
144 | for ( j=0 ; j<4+hclen ; j++ ) | ||
145 | clen_size_table[clen_weird_tangle[j]] | ||
146 | = read_bits (data, p, 3); | ||
147 | for ( ; j<CLEN_TSIZE ; j++ ) | ||
148 | clen_size_table[clen_weird_tangle[j]] = 0; | ||
149 | make_code_table (clen_size_table, CLEN_TSIZE, | ||
150 | clen_code_table, CLEN_MAXBITS); | ||
151 | remainder = 0; | ||
152 | rem_val = 0; | ||
153 | for ( j=0 ; j<257+hlit ; j++ ) | ||
154 | { | ||
155 | b = decode_one (data, p, clen_size_table, CLEN_TSIZE, | ||
156 | clen_code_table, CLEN_MAXBITS); | ||
157 | if ( b<0 ) return -1; | ||
158 | if ( b<16 ) | ||
159 | hlit_size_table[j] = b; | ||
160 | else if ( b == 16 ) | ||
161 | { | ||
162 | int k, l; | ||
163 | |||
164 | k = read_bits (data, p, 2); | ||
165 | for ( l=0 ; l<k+3 && j+l<257+hlit ; l++ ) | ||
166 | hlit_size_table[j+l] = hlit_size_table[j-1]; | ||
167 | j += l-1; | ||
168 | remainder = k+3-l; /* THIS IS SO UGLY! */ | ||
169 | rem_val = hlit_size_table[j-1]; | ||
170 | } | ||
171 | else if ( b == 17 ) | ||
172 | { | ||
173 | int k, l; | ||
174 | |||
175 | k = read_bits (data, p, 3); | ||
176 | for ( l=0 ; l<k+3 && j+l<257+hlit ; l++ ) | ||
177 | hlit_size_table[j+l] = 0; | ||
178 | j += l-1; | ||
179 | remainder = k+3-l; | ||
180 | rem_val = 0; | ||
181 | } | ||
182 | else if ( b == 18 ) | ||
183 | { | ||
184 | int k, l; | ||
185 | |||
186 | k = read_bits (data, p, 7); | ||
187 | for ( l=0 ; l<k+11 && j+l<257+hlit ; l++ ) | ||
188 | hlit_size_table[j+l] = 0; | ||
189 | j += l-1; | ||
190 | remainder = k+11-l; | ||
191 | rem_val = 0; | ||
192 | } | ||
193 | } | ||
194 | for ( ; j<HLIT_TSIZE ; j++ ) | ||
195 | hlit_size_table[j] = 0; | ||
196 | make_code_table (hlit_size_table, HLIT_TSIZE, | ||
197 | hlit_code_table, HLIT_MAXBITS); | ||
198 | for ( j=0 ; j<remainder ; j++ ) | ||
199 | hdist_size_table[j] = rem_val; | ||
200 | for ( ; j<1+hdist ; j++ ) | ||
201 | /* Can you spell: ``copy-paste''? */ | ||
202 | { | ||
203 | b = decode_one (data, p, clen_size_table, CLEN_TSIZE, | ||
204 | clen_code_table, CLEN_MAXBITS); | ||
205 | if ( b<0 ) return -1; | ||
206 | if ( b<16 ) | ||
207 | hdist_size_table[j] = b; | ||
208 | else if ( b == 16 ) | ||
209 | { | ||
210 | int k, l; | ||
211 | |||
212 | k = read_bits (data, p, 2); | ||
213 | for ( l=0 ; l<k+3 && j+l<1+hdist ; l++ ) | ||
214 | hdist_size_table[j+l] = hdist_size_table[j-1]; | ||
215 | j += l-1; | ||
216 | } | ||
217 | else if ( b == 17 ) | ||
218 | { | ||
219 | int k, l; | ||
220 | |||
221 | k = read_bits (data, p, 3); | ||
222 | for ( l=0 ; l<k+3 && j+l<1+hdist ; l++ ) | ||
223 | hdist_size_table[j+l] = 0; | ||
224 | j += l-1; | ||
225 | } | ||
226 | else if ( b == 18 ) | ||
227 | { | ||
228 | int k, l; | ||
229 | |||
230 | k = read_bits (data, p, 7); | ||
231 | for ( l=0 ; l<k+11 && j+l<1+hdist ; l++ ) | ||
232 | hdist_size_table[j+l] = 0; | ||
233 | j += l-1; | ||
234 | } | ||
235 | } | ||
236 | for ( ; j<HDIST_TSIZE ; j++ ) | ||
237 | hdist_size_table[j] = 0; | ||
238 | make_code_table (hdist_size_table, HDIST_TSIZE, | ||
239 | hdist_code_table, HDIST_MAXBITS); | ||
240 | return 0; | ||
241 | } | ||
242 | |||
243 | /* The (circular) output buffer. This lets us track | ||
244 | * backreferences. */ | ||
245 | |||
246 | /* Minimal buffer size. Also the only useful value. */ | ||
247 | #define BUFFER_SIZE 32768 | ||
248 | |||
249 | /* Pointer to the character to be added to the buffer */ | ||
250 | static unsigned int buffer_ptr = 0; | ||
251 | |||
252 | /* The buffer itself */ | ||
253 | static unsigned char buffer[BUFFER_SIZE]; | ||
254 | |||
255 | static void | ||
256 | pushout (unsigned char ch) | ||
257 | /* Store one byte in the output buffer so it may be retrieved if | ||
258 | * it is referenced again. */ | ||
259 | { | ||
260 | buffer[buffer_ptr++] = ch; | ||
261 | buffer_ptr %= BUFFER_SIZE; | ||
262 | } | ||
263 | |||
264 | static unsigned char | ||
265 | pushin (unsigned int dist) | ||
266 | /* Retrieve one byte, dist bytes away, from the output buffer. */ | ||
267 | { | ||
268 | return buffer[(buffer_ptr+(BUFFER_SIZE-dist))%BUFFER_SIZE]; | ||
269 | } | ||
270 | |||
271 | static int | ||
272 | get_data (const unsigned char *data, long *p, | ||
273 | const char hlit_size_table[HLIT_TSIZE], | ||
274 | const unsigned int hlit_code_table[HLIT_TSIZE], | ||
275 | const char hdist_size_table[HDIST_TSIZE], | ||
276 | const unsigned int hdist_code_table[HDIST_TSIZE], | ||
277 | void (* callback) (unsigned char d)) | ||
278 | /* Do the actual uncompressing. Call callback on each character | ||
279 | * uncompressed. */ | ||
280 | { | ||
281 | unsigned int b; | ||
282 | |||
283 | while ( 1 ) { | ||
284 | b = decode_one (data, p, hlit_size_table, HLIT_TSIZE, | ||
285 | hlit_code_table, HLIT_MAXBITS); | ||
286 | if ( b<0 ) return -1; | ||
287 | if ( b < 256 ) | ||
288 | /* Literal */ | ||
289 | { | ||
290 | pushout ((unsigned char) b); | ||
291 | callback ((unsigned char) b); | ||
292 | } | ||
293 | else if ( b == 256 ) | ||
294 | /* End of block */ | ||
295 | return 0; | ||
296 | else if ( b >= 257 ) | ||
297 | /* Back reference */ | ||
298 | { | ||
299 | unsigned int bb; | ||
300 | unsigned int length, dist; | ||
301 | unsigned int l; | ||
302 | |||
303 | switch ( b ) | ||
304 | { | ||
305 | case 257: length = 3; break; | ||
306 | case 258: length = 4; break; | ||
307 | case 259: length = 5; break; | ||
308 | case 260: length = 6; break; | ||
309 | case 261: length = 7; break; | ||
310 | case 262: length = 8; break; | ||
311 | case 263: length = 9; break; | ||
312 | case 264: length = 10; break; | ||
313 | case 265: length = 11 + read_bits (data, p, 1); break; | ||
314 | case 266: length = 13 + read_bits (data, p, 1); break; | ||
315 | case 267: length = 15 + read_bits (data, p, 1); break; | ||
316 | case 268: length = 17 + read_bits (data, p, 1); break; | ||
317 | case 269: length = 19 + read_bits (data, p, 2); break; | ||
318 | case 270: length = 23 + read_bits (data, p, 2); break; | ||
319 | case 271: length = 27 + read_bits (data, p, 2); break; | ||
320 | case 272: length = 31 + read_bits (data, p, 2); break; | ||
321 | case 273: length = 35 + read_bits (data, p, 3); break; | ||
322 | case 274: length = 43 + read_bits (data, p, 3); break; | ||
323 | case 275: length = 51 + read_bits (data, p, 3); break; | ||
324 | case 276: length = 59 + read_bits (data, p, 3); break; | ||
325 | case 277: length = 67 + read_bits (data, p, 4); break; | ||
326 | case 278: length = 83 + read_bits (data, p, 4); break; | ||
327 | case 279: length = 99 + read_bits (data, p, 4); break; | ||
328 | case 280: length = 115 + read_bits (data, p, 4); break; | ||
329 | case 281: length = 131 + read_bits (data, p, 5); break; | ||
330 | case 282: length = 163 + read_bits (data, p, 5); break; | ||
331 | case 283: length = 195 + read_bits (data, p, 5); break; | ||
332 | case 284: length = 227 + read_bits (data, p, 5); break; | ||
333 | case 285: length = 258; break; | ||
334 | default: | ||
335 | return -1; | ||
336 | } | ||
337 | bb = decode_one (data, p, hdist_size_table, HDIST_TSIZE, | ||
338 | hdist_code_table, HDIST_MAXBITS); | ||
339 | switch ( bb ) | ||
340 | { | ||
341 | case 0: dist = 1; break; | ||
342 | case 1: dist = 2; break; | ||
343 | case 2: dist = 3; break; | ||
344 | case 3: dist = 4; break; | ||
345 | case 4: dist = 5 + read_bits (data, p, 1); break; | ||
346 | case 5: dist = 7 + read_bits (data, p, 1); break; | ||
347 | case 6: dist = 9 + read_bits (data, p, 2); break; | ||
348 | case 7: dist = 13 + read_bits (data, p, 2); break; | ||
349 | case 8: dist = 17 + read_bits (data, p, 3); break; | ||
350 | case 9: dist = 25 + read_bits (data, p, 3); break; | ||
351 | case 10: dist = 33 + read_bits (data, p, 4); break; | ||
352 | case 11: dist = 49 + read_bits (data, p, 4); break; | ||
353 | case 12: dist = 65 + read_bits (data, p, 5); break; | ||
354 | case 13: dist = 97 + read_bits (data, p, 5); break; | ||
355 | case 14: dist = 129 + read_bits (data, p, 6); break; | ||
356 | case 15: dist = 193 + read_bits (data, p, 6); break; | ||
357 | case 16: dist = 257 + read_bits (data, p, 7); break; | ||
358 | case 17: dist = 385 + read_bits (data, p, 7); break; | ||
359 | case 18: dist = 513 + read_bits (data, p, 8); break; | ||
360 | case 19: dist = 769 + read_bits (data, p, 8); break; | ||
361 | case 20: dist = 1025 + read_bits (data, p, 9); break; | ||
362 | case 21: dist = 1537 + read_bits (data, p, 9); break; | ||
363 | case 22: dist = 2049 + read_bits (data, p, 10); break; | ||
364 | case 23: dist = 3073 + read_bits (data, p, 10); break; | ||
365 | case 24: dist = 4097 + read_bits (data, p, 11); break; | ||
366 | case 25: dist = 6145 + read_bits (data, p, 11); break; | ||
367 | case 26: dist = 8193 + read_bits (data, p, 12); break; | ||
368 | case 27: dist = 12289 + read_bits (data, p, 12); break; | ||
369 | case 28: dist = 16385 + read_bits (data, p, 13); break; | ||
370 | case 29: dist = 24577 + read_bits (data, p, 13); break; | ||
371 | default: | ||
372 | return -1; | ||
373 | } | ||
374 | for ( l=0 ; l<length ; l++ ) | ||
375 | { | ||
376 | unsigned char ch; | ||
377 | |||
378 | ch = pushin (dist); | ||
379 | pushout (ch); | ||
380 | callback (ch); | ||
381 | } | ||
382 | } | ||
383 | } | ||
384 | return 0; | ||
385 | } | ||
386 | |||
387 | static int | ||
388 | inflate (const unsigned char *data, long *p, | ||
389 | void (* callback) (unsigned char d)) | ||
390 | /* Main uncompression function for the deflate method */ | ||
391 | { | ||
392 | char blast, btype; | ||
393 | char hlit_size_table[HLIT_TSIZE]; | ||
394 | unsigned int hlit_code_table[HLIT_TSIZE]; | ||
395 | char hdist_size_table[HDIST_TSIZE]; | ||
396 | unsigned int hdist_code_table[HDIST_TSIZE]; | ||
397 | |||
398 | again: | ||
399 | blast = read_bits (data, p, 1); | ||
400 | btype = read_bits (data, p, 2); | ||
401 | if ( btype == 1 || btype == 2 ) | ||
402 | { | ||
403 | if ( btype == 2 ) | ||
404 | { | ||
405 | /* Dynamic Huffman tables */ | ||
406 | if (get_tables (data, p, | ||
407 | hlit_size_table, hlit_code_table, | ||
408 | hdist_size_table, hdist_code_table) < 0) return -1; | ||
409 | } | ||
410 | else | ||
411 | /* Fixed Huffman codes */ | ||
412 | { | ||
413 | int j; | ||
414 | |||
415 | for ( j=0 ; j<144 ; j++ ) | ||
416 | hlit_size_table[j] = 8; | ||
417 | for ( ; j<256 ; j++ ) | ||
418 | hlit_size_table[j] = 9; | ||
419 | for ( ; j<280 ; j++ ) | ||
420 | hlit_size_table[j] = 7; | ||
421 | for ( ; j<HLIT_TSIZE ; j++ ) | ||
422 | hlit_size_table[j] = 8; | ||
423 | make_code_table (hlit_size_table, HLIT_TSIZE, | ||
424 | hlit_code_table, HLIT_MAXBITS); | ||
425 | for ( j=0 ; j<HDIST_TSIZE ; j++ ) | ||
426 | hdist_size_table[j] = 5; | ||
427 | make_code_table (hdist_size_table, HDIST_TSIZE, | ||
428 | hdist_code_table, HDIST_MAXBITS); | ||
429 | } | ||
430 | if (get_data (data, p, | ||
431 | hlit_size_table, hlit_code_table, | ||
432 | hdist_size_table, hdist_code_table, | ||
433 | callback) < 0) return -1;; | ||
434 | } | ||
435 | else if ( btype == 0 ) | ||
436 | /* Non compressed block */ | ||
437 | { | ||
438 | unsigned int len, nlen; | ||
439 | unsigned int l; | ||
440 | unsigned char b; | ||
441 | |||
442 | *p = (*p+7)/8; /* Jump to next byte boundary */ | ||
443 | len = read_bits (data, p, 16); | ||
444 | nlen = read_bits (data, p, 16); | ||
445 | for ( l=0 ; l<len ; l++ ) | ||
446 | { | ||
447 | b = read_bits (data, p, 8); | ||
448 | pushout (b); | ||
449 | callback (b); | ||
450 | } | ||
451 | } | ||
452 | else | ||
453 | { | ||
454 | return -1; | ||
455 | } | ||
456 | if ( ! blast ) | ||
457 | goto again; | ||
458 | return 0; | ||
459 | } | ||
460 | |||
461 | int | ||
462 | unzip (const unsigned char *data, long *p, | ||
463 | void (* callback) (unsigned char d)) | ||
464 | /* Uncompress gzipped data. data is a pointer to the data, p is | ||
465 | * a pointer to a long that is initialized to 0 (unless for some | ||
466 | * reason you want to start uncompressing further down the data), | ||
467 | * and callback is a function taking an unsigned char and | ||
468 | * returning void that will be called successively for every | ||
469 | * uncompressed byte. */ | ||
470 | { | ||
471 | unsigned char cm, flg; | ||
472 | |||
473 | if ( read_bits (data, p, 8) != 0x1f | ||
474 | || read_bits (data, p, 8) != 0x8b ) | ||
475 | { | ||
476 | return -1; | ||
477 | } | ||
478 | cm = read_bits (data, p, 8); | ||
479 | if ( cm != 0x8 ) | ||
480 | { | ||
481 | return -1; | ||
482 | } | ||
483 | flg = read_bits (data, p, 8); | ||
484 | if ( flg & 0xe0 ) | ||
485 | /* fprintf (stderr, "Warning: unknown bits are set in flags.\n") */ ; | ||
486 | read_bits (data, p, 32); /* Ignore modification time */ | ||
487 | read_bits (data, p, 8); /* Ignore extra flags */ | ||
488 | read_bits (data, p, 8); /* Ignore OS type */ | ||
489 | if ( flg & 0x4 ) | ||
490 | { | ||
491 | /* Skip over extra data */ | ||
492 | unsigned int xlen; | ||
493 | |||
494 | xlen = read_bits (data, p, 16); | ||
495 | *p += ((long)xlen)*8; | ||
496 | } | ||
497 | if ( flg & 0x8 ) | ||
498 | { | ||
499 | /* Skip over file name */ | ||
500 | while ( read_bits (data, p, 8) ); | ||
501 | } | ||
502 | if ( flg & 0x10 ) | ||
503 | { | ||
504 | /* Skip over comment */ | ||
505 | while ( read_bits (data, p, 8) ); | ||
506 | } | ||
507 | if ( flg & 0x2 ) | ||
508 | /* Ignore CRC16 */ | ||
509 | read_bits (data, p, 16); | ||
510 | return inflate (data, p, callback); | ||
511 | /* CRC32 and ISIZE are at the end. We don't even bother to look at | ||
512 | * them. */ | ||
513 | } | ||
514 | |||
diff --git a/apps/plugins/rockboy/input.h b/apps/plugins/rockboy/input.h index b57404908d..4ee1c9eb40 100644 --- a/apps/plugins/rockboy/input.h +++ b/apps/plugins/rockboy/input.h | |||
@@ -4,19 +4,15 @@ | |||
4 | * Definitions for input device stuff - buttons, keys, etc. | 4 | * Definitions for input device stuff - buttons, keys, etc. |
5 | */ | 5 | */ |
6 | 6 | ||
7 | |||
8 | #define MAX_KEYS 10 | ||
9 | |||
10 | typedef struct event_s | 7 | typedef struct event_s |
11 | { | 8 | { |
12 | int type; | 9 | int type; |
13 | int code; | 10 | int code; |
14 | } event_t; | 11 | } event_t; |
15 | 12 | ||
16 | #define EV_NONE 0 | 13 | #define EV_NONE 0 |
17 | #define EV_PRESS 1 | 14 | #define EV_PRESS 1 |
18 | #define EV_RELEASE 2 | 15 | #define EV_RELEASE 2 |
19 | #define EV_REPEAT 3 | ||
20 | 16 | ||
21 | int ev_postevent(event_t *ev) ICODE_ATTR; | 17 | int ev_postevent(event_t *ev) ICODE_ATTR; |
22 | int ev_getevent(event_t *ev) ICODE_ATTR; | 18 | int ev_getevent(event_t *ev) ICODE_ATTR; |
diff --git a/apps/plugins/rockboy/lcd-gb.h b/apps/plugins/rockboy/lcd-gb.h index aafeaec165..91f2487462 100644 --- a/apps/plugins/rockboy/lcd-gb.h +++ b/apps/plugins/rockboy/lcd-gb.h | |||
@@ -7,15 +7,15 @@ | |||
7 | 7 | ||
8 | struct vissprite | 8 | struct vissprite |
9 | { | 9 | { |
10 | byte *buf; | 10 | byte *buf; |
11 | int x; | 11 | int x; |
12 | byte pal, pri, pad[6]; | 12 | byte pal, pri, pad[6]; |
13 | }; | 13 | }; |
14 | 14 | ||
15 | struct scan | 15 | struct scan |
16 | { | 16 | { |
17 | int bg[64]; | 17 | int bg[64]; |
18 | int wnd[64]; | 18 | int wnd[64]; |
19 | #if LCD_DEPTH == 1 | 19 | #if LCD_DEPTH == 1 |
20 | byte buf[8][256]; | 20 | byte buf[8][256]; |
21 | #elif LCD_DEPTH == 2 | 21 | #elif LCD_DEPTH == 2 |
@@ -23,31 +23,29 @@ struct scan | |||
23 | #elif LCD_DEPTH > 4 | 23 | #elif LCD_DEPTH > 4 |
24 | byte buf[256]; | 24 | byte buf[256]; |
25 | #endif | 25 | #endif |
26 | byte pal1[128]; | 26 | un16 pal[64]; |
27 | un16 pal2[64]; | 27 | byte pri[256]; |
28 | un32 pal4[64]; | 28 | struct vissprite vs[16]; |
29 | byte pri[256]; | 29 | int ns, l, x, y, s, t, u, v, wx, wy, wt, wv; |
30 | struct vissprite vs[16]; | ||
31 | int ns, l, x, y, s, t, u, v, wx, wy, wt, wv; | ||
32 | }; | 30 | }; |
33 | 31 | ||
34 | struct obj | 32 | struct obj |
35 | { | 33 | { |
36 | byte y; | 34 | byte y; |
37 | byte x; | 35 | byte x; |
38 | byte pat; | 36 | byte pat; |
39 | byte flags; | 37 | byte flags; |
40 | }; | 38 | }; |
41 | 39 | ||
42 | struct lcd | 40 | struct lcd |
43 | { | 41 | { |
44 | byte vbank[2][8192]; | 42 | byte vbank[2][8192]; |
45 | union | 43 | union |
46 | { | 44 | { |
47 | byte mem[256]; | 45 | byte mem[256]; |
48 | struct obj obj[40]; | 46 | struct obj obj[40]; |
49 | } oam; | 47 | } oam; |
50 | byte pal[128]; | 48 | byte pal[128]; |
51 | }; | 49 | }; |
52 | 50 | ||
53 | extern struct lcd lcd; | 51 | extern struct lcd lcd; |
@@ -60,14 +58,13 @@ void bg_scan(void) ICODE_ATTR; | |||
60 | void wnd_scan(void) ICODE_ATTR; | 58 | void wnd_scan(void) ICODE_ATTR; |
61 | void bg_scan_pri(void) ICODE_ATTR; | 59 | void bg_scan_pri(void) ICODE_ATTR; |
62 | void wnd_scan_pri(void) ICODE_ATTR; | 60 | void wnd_scan_pri(void) ICODE_ATTR; |
63 | void spr_count(void); | ||
64 | void spr_enum(void) ICODE_ATTR; | 61 | void spr_enum(void) ICODE_ATTR; |
65 | void spr_scan(void) ICODE_ATTR; | 62 | void spr_scan(void) ICODE_ATTR; |
66 | void lcd_begin(void) ICODE_ATTR; | 63 | void lcd_begin(void) ICODE_ATTR; |
67 | void lcd_refreshline(void) ICODE_ATTR; | 64 | void lcd_refreshline(void) ICODE_ATTR; |
68 | void pal_write(int i, byte b) ICODE_ATTR; | 65 | void pal_write(int i, byte b) ICODE_ATTR; |
69 | void pal_write_dmg(int i, int mapnum, byte d) ICODE_ATTR; | 66 | void pal_write_dmg(int i, int mapnum, byte d) ICODE_ATTR; |
70 | void vram_write(int a, byte b) ICODE_ATTR; | 67 | void vram_write(addr a, byte b) ICODE_ATTR; |
71 | void vram_dirty(void) ICODE_ATTR; | 68 | void vram_dirty(void) ICODE_ATTR; |
72 | void pal_dirty(void) ICODE_ATTR; | 69 | void pal_dirty(void) ICODE_ATTR; |
73 | void lcd_reset(void); | 70 | void lcd_reset(void); |
diff --git a/apps/plugins/rockboy/lcd.c b/apps/plugins/rockboy/lcd.c index 1b285ec1b9..05a6a74068 100644 --- a/apps/plugins/rockboy/lcd.c +++ b/apps/plugins/rockboy/lcd.c | |||
@@ -4,9 +4,8 @@ | |||
4 | #include "hw.h" | 4 | #include "hw.h" |
5 | #include "mem.h" | 5 | #include "mem.h" |
6 | #include "lcd-gb.h" | 6 | #include "lcd-gb.h" |
7 | #include "rc.h" | ||
8 | #include "fb.h" | 7 | #include "fb.h" |
9 | #include "palette.h" | 8 | #include "palette-presets.h" |
10 | #ifdef USE_ASM | 9 | #ifdef USE_ASM |
11 | #include "asm.h" | 10 | #include "asm.h" |
12 | #endif | 11 | #endif |
@@ -26,9 +25,7 @@ struct scan scan IBSS_ATTR; | |||
26 | 25 | ||
27 | #define PRI (scan.pri) | 26 | #define PRI (scan.pri) |
28 | 27 | ||
29 | #define PAL1 (scan.pal1) | 28 | #define PAL (scan.pal) |
30 | #define PAL2 (scan.pal2) | ||
31 | #define PAL4 (scan.pal4) | ||
32 | 29 | ||
33 | #define VS (scan.vs) /* vissprites */ | 30 | #define VS (scan.vs) /* vissprites */ |
34 | #define NS (scan.ns) | 31 | #define NS (scan.ns) |
@@ -53,53 +50,14 @@ byte patpix[4096][8][8] | |||
53 | byte patdirty[1024]; | 50 | byte patdirty[1024]; |
54 | byte anydirty; | 51 | byte anydirty; |
55 | 52 | ||
56 | // static int scale = 1; | ||
57 | |||
58 | static int rgb332; | ||
59 | |||
60 | static int sprsort = 1; | ||
61 | static int sprdebug; | ||
62 | static int insync=0; | ||
63 | #if LCD_DEPTH < 16 | 53 | #if LCD_DEPTH < 16 |
64 | static int scanline_ind=0; | 54 | static int scanline_ind=0; |
65 | #endif | 55 | #endif |
66 | 56 | ||
67 | #define DEF_PAL { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C } | 57 | static int dmg_pal[4][4]; |
68 | |||
69 | static int dmg_pal[4][4] = { DEF_PAL, DEF_PAL, DEF_PAL, DEF_PAL }; | ||
70 | |||
71 | static int usefilter, filterdmg; | ||
72 | static int filter[3][4] = { | ||
73 | { 195, 25, 0, 35 }, | ||
74 | { 25, 170, 25, 35 }, | ||
75 | { 25, 60, 125, 40 } | ||
76 | }; | ||
77 | |||
78 | rcvar_t lcd_exports[] = | ||
79 | { | ||
80 | RCV_BOOL("rgb332", &rgb332), | ||
81 | RCV_VECTOR("dmg_bgp", dmg_pal[0], 4), | ||
82 | RCV_VECTOR("dmg_wndp", dmg_pal[1], 4), | ||
83 | RCV_VECTOR("dmg_obp0", dmg_pal[2], 4), | ||
84 | RCV_VECTOR("dmg_obp1", dmg_pal[3], 4), | ||
85 | RCV_BOOL("sprsort", &sprsort), | ||
86 | RCV_BOOL("sprdebug", &sprdebug), | ||
87 | RCV_BOOL("colorfilter", &usefilter), | ||
88 | RCV_BOOL("filterdmg", &filterdmg), | ||
89 | RCV_VECTOR("red", filter[0], 4), | ||
90 | RCV_VECTOR("green", filter[1], 4), | ||
91 | RCV_VECTOR("blue", filter[2], 4), | ||
92 | RCV_END | ||
93 | }; | ||
94 | 58 | ||
95 | fb_data *vdest; | 59 | fb_data *vdest; |
96 | 60 | ||
97 | #ifdef ALLOW_UNALIGNED_IO /* long long is ok since this is i386-only anyway? */ | ||
98 | #define MEMCPY8(d, s) ((*(long long *)(d)) = (*(long long *)(s))) | ||
99 | #else | ||
100 | #define MEMCPY8(d, s) memcpy((d), (s), 8) | ||
101 | #endif | ||
102 | |||
103 | #ifndef ASM_UPDATEPATPIX | 61 | #ifndef ASM_UPDATEPATPIX |
104 | void updatepatpix(void) | 62 | void updatepatpix(void) |
105 | { | 63 | { |
@@ -506,9 +464,10 @@ void tilebuf(void) | |||
506 | } | 464 | } |
507 | 465 | ||
508 | 466 | ||
509 | // V = vertical line | 467 | /* V = vertical line |
510 | // WX = WND start (if 0, no need to do anything) -> WY | 468 | * WX = WND start (if 0, no need to do anything) -> WY |
511 | // U = start...something...thingy... 7 at most | 469 | * U = start...something...thingy... 7 at most |
470 | */ | ||
512 | void bg_scan(void) | 471 | void bg_scan(void) |
513 | { | 472 | { |
514 | int cnt; | 473 | int cnt; |
@@ -539,7 +498,7 @@ void bg_scan(void) | |||
539 | ); | 498 | ); |
540 | #else | 499 | #else |
541 | src = patpix[*(tile++)][V]; | 500 | src = patpix[*(tile++)][V]; |
542 | MEMCPY8(dest, src); | 501 | memcpy(dest,src,8); |
543 | dest += 8; | 502 | dest += 8; |
544 | #endif | 503 | #endif |
545 | cnt -= 8; | 504 | cnt -= 8; |
@@ -574,7 +533,7 @@ void wnd_scan(void) | |||
574 | ); | 533 | ); |
575 | #else | 534 | #else |
576 | src = patpix[*(tile++)][WV]; | 535 | src = patpix[*(tile++)][WV]; |
577 | MEMCPY8(dest, src); | 536 | memcpy(dest,src,8); |
578 | dest += 8; | 537 | dest += 8; |
579 | #endif | 538 | #endif |
580 | cnt -= 8; | 539 | cnt -= 8; |
@@ -752,33 +711,12 @@ static void recolor(byte *buf, byte fill, int cnt) | |||
752 | while (cnt--) *(buf++) |= fill; | 711 | while (cnt--) *(buf++) |= fill; |
753 | } | 712 | } |
754 | 713 | ||
755 | void spr_count(void) | ||
756 | { | ||
757 | int i; | ||
758 | struct obj *o; | ||
759 | |||
760 | NS = 0; | ||
761 | if (!(R_LCDC & 0x02)) return; | ||
762 | |||
763 | o = lcd.oam.obj; | ||
764 | |||
765 | for (i = 40; i; i--, o++) | ||
766 | { | ||
767 | if (L >= o->y || L + 16 < o->y) | ||
768 | continue; | ||
769 | if (L + 8 >= o->y && !(R_LCDC & 0x04)) | ||
770 | continue; | ||
771 | if (++NS == 10) break; | ||
772 | } | ||
773 | } | ||
774 | |||
775 | void spr_enum(void) | 714 | void spr_enum(void) |
776 | { | 715 | { |
777 | int i, j; | 716 | int i, j; |
778 | struct obj *o; | 717 | struct obj *o; |
779 | struct vissprite ts[10]; | 718 | struct vissprite ts; |
780 | int v, pat; | 719 | int v, pat; |
781 | int l, x; | ||
782 | 720 | ||
783 | NS = 0; | 721 | NS = 0; |
784 | if (!(R_LCDC & 0x02)) return; | 722 | if (!(R_LCDC & 0x02)) return; |
@@ -818,24 +756,19 @@ void spr_enum(void) | |||
818 | VS[NS].buf = patpix[pat][v]; | 756 | VS[NS].buf = patpix[pat][v]; |
819 | if (++NS == 10) break; | 757 | if (++NS == 10) break; |
820 | } | 758 | } |
821 | if (!sprsort||hw.cgb) return; | 759 | if (hw.cgb) return; |
822 | /* not quite optimal but it finally works! */ | ||
823 | for (i = 0; i < NS; i++) | 760 | for (i = 0; i < NS; i++) |
824 | { | 761 | { |
825 | l = 0; | 762 | for (j = i + 1; j < NS; j++) |
826 | x = VS[0].x; | ||
827 | for (j = 1; j < NS; j++) | ||
828 | { | 763 | { |
829 | if (VS[j].x < x) | 764 | if (VS[i].x > VS[j].x) |
830 | { | 765 | { |
831 | l = j; | 766 | ts = VS[i]; |
832 | x = VS[j].x; | 767 | VS[i] = VS[j]; |
768 | VS[j] = ts; | ||
833 | } | 769 | } |
834 | } | 770 | } |
835 | ts[i] = VS[l]; | ||
836 | VS[l].x = 160; | ||
837 | } | 771 | } |
838 | memcpy(VS, ts, sizeof VS); | ||
839 | } | 772 | } |
840 | 773 | ||
841 | void spr_scan(void) | 774 | void spr_scan(void) |
@@ -854,8 +787,8 @@ void spr_scan(void) | |||
854 | for (; ns; ns--, vs--) | 787 | for (; ns; ns--, vs--) |
855 | { | 788 | { |
856 | x = vs->x; | 789 | x = vs->x; |
857 | if (x >= 160) continue; | 790 | if (x > 159) continue; |
858 | if (x <= -8) continue; | 791 | if (x < -7) continue; |
859 | if (x < 0) | 792 | if (x < 0) |
860 | { | 793 | { |
861 | src = vs->buf - x; | 794 | src = vs->buf - x; |
@@ -891,12 +824,10 @@ void spr_scan(void) | |||
891 | } | 824 | } |
892 | } | 825 | } |
893 | else while (i--) if (src[i]) dest[i] = pal|src[i]; | 826 | else while (i--) if (src[i]) dest[i] = pal|src[i]; |
894 | /* else while (i--) if (src[i]) dest[i] = 31 + ns; */ | ||
895 | } | 827 | } |
896 | // if (sprdebug) for (i = 0; i < NS; i++) BUF[i<<1] = 36; | ||
897 | } | 828 | } |
898 | 829 | ||
899 | // Scaling defines | 830 | /* Scaling defines */ |
900 | #define DX ((LCD_WIDTH<<16) / 160) | 831 | #define DX ((LCD_WIDTH<<16) / 160) |
901 | #define DXI ((160<<16) / LCD_WIDTH) | 832 | #define DXI ((160<<16) / LCD_WIDTH) |
902 | #define DY ((LCD_HEIGHT<<16) / 144) | 833 | #define DY ((LCD_HEIGHT<<16) / 144) |
@@ -904,18 +835,38 @@ void spr_scan(void) | |||
904 | 835 | ||
905 | void lcd_begin(void) | 836 | void lcd_begin(void) |
906 | { | 837 | { |
907 | /* if (fb.indexed) | ||
908 | { | ||
909 | if (rgb332) pal_set332(); | ||
910 | else pal_expire(); | ||
911 | } | ||
912 | */ | ||
913 | 838 | ||
914 | if(options.fullscreen) | 839 | #if (LCD_WIDTH>=160) && (LCD_HEIGHT>=144) |
915 | vdest = fb.ptr; | 840 | #define S1 ((LCD_HEIGHT-144)/2)*LCD_WIDTH + ((LCD_WIDTH-160)/2) |
916 | else | 841 | #define S2 0 |
917 | vdest=fb.ptr+((LCD_HEIGHT-144)/2)*LCD_WIDTH + ((LCD_WIDTH-160)/2); | 842 | |
843 | #elif (LCD_WIDTH>=160) && (LCD_HEIGHT<=144) | ||
844 | #define S1 ((LCD_WIDTH-160)/2) | ||
845 | #define S2 ((LCD_WIDTH-160)/2) | ||
846 | |||
847 | #elif (LCD_WIDTH<=160) && (LCD_HEIGHT>=144) | ||
848 | #define S1 ((LCD_HEIGHT-144)/2)*LCD_WIDTH | ||
849 | #define S2 ((LCD_HEIGHT-144)/2)*LCD_WIDTH | ||
918 | 850 | ||
851 | #else | ||
852 | #define S1 0 | ||
853 | #define S2 0 | ||
854 | #endif | ||
855 | |||
856 | #if (LCD_WIDTH>LCD_HEIGHT) | ||
857 | #define S3 ((LCD_WIDTH-(160*LCD_HEIGHT/144))/2) | ||
858 | #else | ||
859 | #define S3 ((LCD_HEIGHT-(144*LCD_WIDTH/160))/2)*LCD_WIDTH | ||
860 | #endif | ||
861 | |||
862 | set_pal(); | ||
863 | |||
864 | if(options.fullscreen == 0) | ||
865 | vdest=fb.ptr+S1; | ||
866 | else if (options.fullscreen == 1) | ||
867 | vdest=fb.ptr+S2; | ||
868 | else | ||
869 | vdest=fb.ptr+S3; | ||
919 | WY = R_WY; | 870 | WY = R_WY; |
920 | } | 871 | } |
921 | 872 | ||
@@ -930,11 +881,28 @@ void setvidmode(int mode) | |||
930 | { | 881 | { |
931 | switch(mode) | 882 | switch(mode) |
932 | { | 883 | { |
933 | case 1: /* Full screen scale */ | 884 | case 1: |
885 | #if (LCD_WIDTH>=160) && (LCD_HEIGHT>=144) /* Full screen scale */ | ||
934 | SCALEWL=DX; | 886 | SCALEWL=DX; |
935 | SCALEWS=DXI; | 887 | SCALEWS=DXI; |
936 | SCALEHL=DY; | 888 | SCALEHL=DY; |
937 | SCALEHS=DYI; | 889 | SCALEHS=DYI; |
890 | #elif (LCD_WIDTH>=160) && (LCD_HEIGHT<144) /* scale the height */ | ||
891 | SCALEWL=1<<16; | ||
892 | SCALEWS=1<<16; | ||
893 | SCALEHL=DY; | ||
894 | SCALEHS=DYI; | ||
895 | #elif (LCD_WIDTH<160) && (LCD_HEIGHT>=144) /* scale the width */ | ||
896 | SCALEWL=DX; | ||
897 | SCALEWS=DXI; | ||
898 | SCALEHL=1<<16; | ||
899 | SCALEHS=1<<16; | ||
900 | #else | ||
901 | SCALEWL=DX; | ||
902 | SCALEWS=DXI; | ||
903 | SCALEHL=DY; | ||
904 | SCALEHS=DYI; | ||
905 | #endif | ||
938 | break; | 906 | break; |
939 | case 2: /* Maintain Ratio */ | 907 | case 2: /* Maintain Ratio */ |
940 | if (DY<DX) | 908 | if (DY<DX) |
@@ -952,37 +920,26 @@ void setvidmode(int mode) | |||
952 | SCALEHS=DXI; | 920 | SCALEHS=DXI; |
953 | } | 921 | } |
954 | break; | 922 | break; |
955 | default: /* No Scaling (or fullscreen for smaller screens) */ | 923 | default: |
956 | #if LCD_WIDTH>160 | ||
957 | SCALEWL=1<<16; | 924 | SCALEWL=1<<16; |
958 | SCALEWS=1<<16; | 925 | SCALEWS=1<<16; |
959 | SCALEHL=1<<16; | 926 | SCALEHL=1<<16; |
960 | SCALEHS=1<<16; | 927 | SCALEHS=1<<16; |
961 | #else | ||
962 | SCALEWL=DX; | ||
963 | SCALEWS=DXI; | ||
964 | SCALEHL=DY; | ||
965 | SCALEHS=DYI; | ||
966 | #endif | ||
967 | } | 928 | } |
968 | swidth=(160*SCALEWL)>>16; | 929 | swidth=(160*SCALEWL)>>16; |
969 | sremain=LCD_WIDTH-swidth; | 930 | sremain=LCD_WIDTH-swidth; |
970 | } | 931 | } |
971 | 932 | ||
972 | char frameout[30]; | ||
973 | void lcd_refreshline(void) | 933 | void lcd_refreshline(void) |
974 | { | 934 | { |
975 | if(!insync) { | 935 | #ifdef HAVE_LCD_COLOR |
976 | if(R_LY!=0) | 936 | char frameout[30]; |
977 | return; | 937 | #endif |
978 | else | ||
979 | insync=1; | ||
980 | } | ||
981 | 938 | ||
982 | if (!(R_LCDC & 0x80)) | 939 | if (!(R_LCDC & 0x80)) |
983 | return; /* should not happen... */ | 940 | return; /* should not happen... */ |
984 | 941 | ||
985 | #if LCD_HEIGHT < 144 | 942 | #if (LCD_HEIGHT <= 128) && !defined(HAVE_LCD_COLOR) |
986 | if ( (fb.mode==0&&(R_LY >= 128)) || | 943 | if ( (fb.mode==0&&(R_LY >= 128)) || |
987 | (fb.mode==1&&(R_LY < 16)) || | 944 | (fb.mode==1&&(R_LY < 16)) || |
988 | (fb.mode==2&&(R_LY<8||R_LY>=136)) || | 945 | (fb.mode==2&&(R_LY<8||R_LY>=136)) || |
@@ -1046,8 +1003,7 @@ void lcd_refreshline(void) | |||
1046 | vid_update(L-((int)(L/9))); | 1003 | vid_update(L-((int)(L/9))); |
1047 | #else | 1004 | #else |
1048 | { | 1005 | { |
1049 | /* Universial Scaling pulled from PrBoom and modified for rockboy */ | 1006 | /* Universal Scaling pulled from PrBoom and modified for rockboy */ |
1050 | /* Needs some thought for screens smaller than the gameboy though */ | ||
1051 | 1007 | ||
1052 | static int hpt IDATA_ATTR=0x8000; | 1008 | static int hpt IDATA_ATTR=0x8000; |
1053 | 1009 | ||
@@ -1059,9 +1015,24 @@ void lcd_refreshline(void) | |||
1059 | register unsigned int remain=sremain; | 1015 | register unsigned int remain=sremain; |
1060 | while(wcount--) | 1016 | while(wcount--) |
1061 | { | 1017 | { |
1062 | *vdest++ = scan.pal2[scan.buf[srcpt>>16]]; | 1018 | #if LCD_HEIGHT<144 /* cut off the bottom part of the screen that won't fit */ |
1019 | if (options.fullscreen==0 && (hpt>>16)>LCD_HEIGHT) | ||
1020 | break; | ||
1021 | #endif | ||
1022 | |||
1023 | #if LCD_WIDTH<160 /* cut off the right part of the screen that won't fit */ | ||
1024 | if(options.fullscreen==0 && wcount<(160-LCD_WIDTH)) { | ||
1025 | vdest+=wcount; | ||
1026 | wcount = 0; | ||
1027 | } | ||
1028 | #endif | ||
1029 | |||
1030 | *vdest++ = PAL[BUF[srcpt>>16]]; | ||
1063 | srcpt+=SCALEWS; | 1031 | srcpt+=SCALEWS; |
1064 | } | 1032 | } |
1033 | #if LCD_HEIGHT<144 | ||
1034 | if (options.fullscreen!=0 || (hpt>>16)<(LCD_HEIGHT)) | ||
1035 | #endif | ||
1065 | vdest+=remain; | 1036 | vdest+=remain; |
1066 | } | 1037 | } |
1067 | 1038 | ||
@@ -1086,15 +1057,16 @@ void lcd_refreshline(void) | |||
1086 | #endif | 1057 | #endif |
1087 | } | 1058 | } |
1088 | 1059 | ||
1089 | 1060 | void set_pal(void) | |
1090 | 1061 | { | |
1091 | 1062 | memcpy(dmg_pal,palettes[options.pal], sizeof dmg_pal); | |
1092 | 1063 | pal_dirty(); | |
1064 | } | ||
1093 | 1065 | ||
1094 | #if HAVE_LCD_COLOR | 1066 | #if HAVE_LCD_COLOR |
1095 | static void updatepalette(int i) | 1067 | static void updatepalette(int i) |
1096 | { | 1068 | { |
1097 | int c, r, g, b, y, u, v, rr, gg; | 1069 | int c, r, g, b; |
1098 | 1070 | ||
1099 | c = (lcd.pal[i<<1] | ((int)lcd.pal[(i<<1)|1] << 8)) & 0x7FFF; | 1071 | c = (lcd.pal[i<<1] | ((int)lcd.pal[(i<<1)|1] << 8)) & 0x7FFF; |
1100 | r = (c & 0x001F) << 3; | 1072 | r = (c & 0x001F) << 3; |
@@ -1104,38 +1076,6 @@ static void updatepalette(int i) | |||
1104 | g |= (g >> 5); | 1076 | g |= (g >> 5); |
1105 | b |= (b >> 5); | 1077 | b |= (b >> 5); |
1106 | 1078 | ||
1107 | if (usefilter && (filterdmg||hw.cgb)) | ||
1108 | { | ||
1109 | rr = ((r * filter[0][0] + g * filter[0][1] + b * filter[0][2]) >> 8) + filter[0][3]; | ||
1110 | gg = ((r * filter[1][0] + g * filter[1][1] + b * filter[1][2]) >> 8) + filter[1][3]; | ||
1111 | b = ((r * filter[2][0] + g * filter[2][1] + b * filter[2][2]) >> 8) + filter[2][3]; | ||
1112 | r = rr; | ||
1113 | g = gg; | ||
1114 | } | ||
1115 | |||
1116 | if (fb.yuv) | ||
1117 | { | ||
1118 | y = (((r * 263) + (g * 516) + (b * 100)) >> 10) + 16; | ||
1119 | u = (((r * 450) - (g * 377) - (b * 73)) >> 10) + 128; | ||
1120 | v = (((r * -152) - (g * 298) + (b * 450)) >> 10) + 128; | ||
1121 | if (y < 0) y = 0; if (y > 255) y = 255; | ||
1122 | if (u < 0) u = 0; if (u > 255) u = 255; | ||
1123 | if (v < 0) v = 0; if (v > 255) v = 255; | ||
1124 | PAL4[i] = (y<<fb.cc[0].l) | (y<<fb.cc[3].l) | ||
1125 | | (u<<fb.cc[1].l) | (v<<fb.cc[2].l); | ||
1126 | return; | ||
1127 | } | ||
1128 | /* | ||
1129 | if (fb.indexed) | ||
1130 | { | ||
1131 | pal_release(PAL1[i]); | ||
1132 | c = pal_getcolor(c, r, g, b); | ||
1133 | PAL1[i] = c; | ||
1134 | PAL2[i] = (c<<8) | c; | ||
1135 | PAL4[i] = (c<<24) | (c<<16) | (c<<8) | c; | ||
1136 | return; | ||
1137 | }*/ | ||
1138 | |||
1139 | r = (r >> fb.cc[0].r) << fb.cc[0].l; | 1079 | r = (r >> fb.cc[0].r) << fb.cc[0].l; |
1140 | g = (g >> fb.cc[1].r) << fb.cc[1].l; | 1080 | g = (g >> fb.cc[1].r) << fb.cc[1].l; |
1141 | b = (b >> fb.cc[2].r) << fb.cc[2].l; | 1081 | b = (b >> fb.cc[2].r) << fb.cc[2].l; |
@@ -1145,24 +1085,7 @@ static void updatepalette(int i) | |||
1145 | #elif LCD_PIXELFORMAT == RGB565SWAPPED | 1085 | #elif LCD_PIXELFORMAT == RGB565SWAPPED |
1146 | c = swap16(r|g|b); | 1086 | c = swap16(r|g|b); |
1147 | #endif | 1087 | #endif |
1148 | 1088 | PAL[i] = c; | |
1149 | |||
1150 | switch (fb.pelsize) | ||
1151 | { | ||
1152 | case 1: | ||
1153 | PAL1[i] = c; | ||
1154 | PAL2[i] = (c<<8) | c; | ||
1155 | PAL4[i] = (c<<24) | (c<<16) | (c<<8) | c; | ||
1156 | break; | ||
1157 | case 2: | ||
1158 | PAL2[i] = c; | ||
1159 | PAL4[i] = (c<<16) | c; | ||
1160 | break; | ||
1161 | case 3: | ||
1162 | case 4: | ||
1163 | PAL4[i] = c; | ||
1164 | break; | ||
1165 | } | ||
1166 | } | 1089 | } |
1167 | #endif | 1090 | #endif |
1168 | 1091 | ||
@@ -1183,7 +1106,6 @@ void pal_write_dmg(int i, int mapnum, byte d) | |||
1183 | 1106 | ||
1184 | if (hw.cgb) return; | 1107 | if (hw.cgb) return; |
1185 | 1108 | ||
1186 | /* if (mapnum >= 2) d = 0xe4; */ | ||
1187 | for (j = 0; j < 8; j += 2) | 1109 | for (j = 0; j < 8; j += 2) |
1188 | { | 1110 | { |
1189 | c = cmap[(d >> j) & 3]; | 1111 | c = cmap[(d >> j) & 3]; |
@@ -1197,7 +1119,7 @@ void pal_write_dmg(int i, int mapnum, byte d) | |||
1197 | } | 1119 | } |
1198 | } | 1120 | } |
1199 | 1121 | ||
1200 | void vram_write(int a, byte b) | 1122 | void vram_write(addr a, byte b) |
1201 | { | 1123 | { |
1202 | lcd.vbank[R_VBK&1][a] = b; | 1124 | lcd.vbank[R_VBK&1][a] = b; |
1203 | if (a >= 0x1800) return; | 1125 | if (a >= 0x1800) return; |
@@ -1235,7 +1157,6 @@ void lcd_reset(void) | |||
1235 | memset(&lcd, 0, sizeof lcd); | 1157 | memset(&lcd, 0, sizeof lcd); |
1236 | lcd_begin(); | 1158 | lcd_begin(); |
1237 | vram_dirty(); | 1159 | vram_dirty(); |
1238 | pal_dirty(); | ||
1239 | } | 1160 | } |
1240 | 1161 | ||
1241 | 1162 | ||
diff --git a/apps/plugins/rockboy/lcdc.c b/apps/plugins/rockboy/lcdc.c index 3b7894d729..90575bbef8 100644 --- a/apps/plugins/rockboy/lcdc.c +++ b/apps/plugins/rockboy/lcdc.c | |||
@@ -23,32 +23,23 @@ | |||
23 | 23 | ||
24 | void stat_trigger(void) | 24 | void stat_trigger(void) |
25 | { | 25 | { |
26 | static const int condbits[4] = { 0x08, 0x30, 0x20, 0x00 }; | 26 | static const int condbits[4] = { 0x08, 0x10, 0x20, 0x00 }; |
27 | int flag = 0; | 27 | int flag = 0; |
28 | 28 | ||
29 | if ((R_LY < 0x91) && (R_LY == R_LYC)) | 29 | if (R_LY == R_LYC) |
30 | { | 30 | { |
31 | R_STAT |= 0x04; | 31 | R_STAT |= 0x04; |
32 | if (R_STAT & 0x40) flag = IF_STAT; | 32 | if (R_STAT & 0x40) flag = IF_STAT; |
33 | } | 33 | } |
34 | else R_STAT &= ~0x04; | 34 | else R_STAT &= ~0x04; |
35 | 35 | ||
36 | if (R_STAT & condbits[R_STAT&3]) flag = IF_STAT; | 36 | if (R_STAT & condbits[R_STAT&3]) flag = IF_STAT; |
37 | 37 | ||
38 | if (!(R_LCDC & 0x80)) flag = 0; | 38 | if (!(R_LCDC & 0x80)) flag = 0; |
39 | 39 | ||
40 | hw_interrupt(flag, IF_STAT); | 40 | hw_interrupt(flag, IF_STAT); |
41 | } | 41 | } |
42 | 42 | ||
43 | void stat_write(byte b) | ||
44 | { | ||
45 | R_STAT = (R_STAT & 0x07) | (b & 0x78); | ||
46 | if (!hw.cgb &&!(R_STAT & 2)) /* DMG STAT write bug => interrupt */ | ||
47 | hw_interrupt(IF_STAT, IF_STAT); | ||
48 | stat_trigger(); | ||
49 | } | ||
50 | |||
51 | |||
52 | /* | 43 | /* |
53 | * stat_change is called when a transition results in a change to the | 44 | * stat_change is called when a transition results in a change to the |
54 | * LCD STAT condition (the low 2 bits of R_STAT). It raises or lowers | 45 | * LCD STAT condition (the low 2 bits of R_STAT). It raises or lowers |
@@ -58,118 +49,118 @@ void stat_write(byte b) | |||
58 | 49 | ||
59 | static void stat_change(int stat) | 50 | static void stat_change(int stat) |
60 | { | 51 | { |
61 | stat &= 3; | 52 | stat &= 3; |
62 | R_STAT = (R_STAT & 0x7C) | stat; | 53 | R_STAT = (R_STAT & 0x7C) | stat; |
63 | 54 | ||
64 | if (stat != 1) hw_interrupt(0, IF_VBLANK); | 55 | if (stat != 1) hw_interrupt(0, IF_VBLANK); |
65 | /* hw_interrupt((stat == 1) ? IF_VBLANK : 0, IF_VBLANK); */ | 56 | /* hw_interrupt((stat == 1) ? IF_VBLANK : 0, IF_VBLANK); */ |
66 | stat_trigger(); | 57 | stat_trigger(); |
67 | } | 58 | } |
68 | 59 | ||
69 | 60 | ||
70 | void lcdc_change(byte b) | 61 | void lcdc_change(byte b) |
71 | { | 62 | { |
72 | byte old = R_LCDC; | 63 | byte old = R_LCDC; |
73 | R_LCDC = b; | 64 | R_LCDC = b; |
74 | if ((R_LCDC ^ old) & 0x80) /* lcd on/off change */ | 65 | if ((R_LCDC ^ old) & 0x80) /* lcd on/off change */ |
75 | { | 66 | { |
76 | R_LY = 0; | 67 | R_LY = 0; |
77 | stat_change(2); | 68 | stat_change(2); |
78 | C = 40; | 69 | C = 40; |
79 | lcd_begin(); | 70 | lcd_begin(); |
80 | } | 71 | } |
81 | } | 72 | } |
82 | 73 | ||
83 | 74 | ||
84 | void lcdc_trans(void) | 75 | void lcdc_trans(void) |
85 | { | 76 | { |
86 | if (!(R_LCDC & 0x80)) | 77 | if (!(R_LCDC & 0x80)) |
87 | { | 78 | { |
88 | while (C <= 0) | 79 | while (C <= 0) |
89 | { | 80 | { |
90 | switch ((byte)(R_STAT & 3)) | 81 | switch ((byte)(R_STAT & 3)) |
91 | { | 82 | { |
92 | case 0: | 83 | case 0: |
93 | case 1: | 84 | case 1: |
94 | stat_change(2); | 85 | stat_change(2); |
95 | C += 40; | 86 | C += 40; |
96 | break; | 87 | break; |
97 | case 2: | 88 | case 2: |
98 | stat_change(3); | 89 | stat_change(3); |
99 | C += 86; | 90 | C += 86; |
100 | break; | 91 | break; |
101 | case 3: | 92 | case 3: |
102 | stat_change(0); | 93 | stat_change(0); |
103 | if (hw.hdma & 0x80) | 94 | if (hw.hdma & 0x80) |
104 | hw_hdma(); | 95 | hw_hdma(); |
105 | else | 96 | else |
106 | C += 102; | 97 | C += 102; |
107 | break; | 98 | break; |
108 | } | 99 | } |
109 | return; | 100 | return; |
110 | } | 101 | } |
111 | } | 102 | } |
112 | while (C <= 0) | 103 | while (C <= 0) |
113 | { | 104 | { |
114 | switch ((byte)(R_STAT & 3)) | 105 | switch ((byte)(R_STAT & 3)) |
115 | { | 106 | { |
116 | case 1: | 107 | case 1: |
117 | if (!(hw.ilines & IF_VBLANK)) | 108 | if (!(hw.ilines & IF_VBLANK)) |
118 | { | 109 | { |
119 | C += 218; | 110 | C += 218; |
120 | hw_interrupt(IF_VBLANK, IF_VBLANK); | 111 | hw_interrupt(IF_VBLANK, IF_VBLANK); |
121 | break; | 112 | break; |
122 | } | 113 | } |
123 | if (R_LY == 0) | 114 | if (R_LY == 0) |
124 | { | 115 | { |
125 | lcd_begin(); | 116 | lcd_begin(); |
126 | stat_change(2); | 117 | stat_change(2); |
127 | C += 40; | 118 | C += 40; |
128 | break; | 119 | break; |
129 | } | 120 | } |
130 | else if (R_LY < 152) | 121 | else if (R_LY < 152) |
131 | C += 228; | 122 | C += 228; |
132 | else if (R_LY == 152) | 123 | else if (R_LY == 152) |
133 | C += 28; | 124 | C += 28; |
134 | else | 125 | else |
135 | { | 126 | { |
136 | R_LY = -1; | 127 | R_LY = -1; |
137 | C += 200; | 128 | C += 200; |
138 | } | 129 | } |
139 | R_LY++; | 130 | R_LY++; |
140 | stat_trigger(); | 131 | stat_trigger(); |
141 | break; | 132 | break; |
142 | case 2: | 133 | case 2: |
143 | if (fb.enabled) | 134 | if (fb.enabled) |
144 | lcd_refreshline(); | 135 | lcd_refreshline(); |
145 | stat_change(3); | 136 | stat_change(3); |
146 | C += 86; | 137 | C += 86; |
147 | break; | 138 | break; |
148 | case 3: | 139 | case 3: |
149 | stat_change(0); | 140 | stat_change(0); |
150 | if (hw.hdma & 0x80) | 141 | if (hw.hdma & 0x80) |
151 | hw_hdma(); | 142 | hw_hdma(); |
152 | /* FIXME -- how much of the hblank does hdma use?? */ | 143 | /* FIXME -- how much of the hblank does hdma use?? */ |
153 | /* else */ | 144 | /* else */ |
154 | C += 102; | 145 | C += 102; |
155 | break; | 146 | break; |
156 | case 0: | 147 | case 0: |
157 | if (++R_LY >= 144) | 148 | if (++R_LY >= 144) |
158 | { | 149 | { |
159 | if (cpu.halt) | 150 | if (cpu.halt) |
160 | { | 151 | { |
161 | hw_interrupt(IF_VBLANK, IF_VBLANK); | 152 | hw_interrupt(IF_VBLANK, IF_VBLANK); |
162 | C += 228; | 153 | C += 228; |
163 | } | 154 | } |
164 | else C += 10; | 155 | else C += 10; |
165 | stat_change(1); | 156 | stat_change(1); |
166 | break; | 157 | break; |
167 | } | 158 | } |
168 | stat_change(2); | 159 | stat_change(2); |
169 | C += 40; | 160 | C += 40; |
170 | break; | 161 | break; |
171 | } | 162 | } |
172 | } | 163 | } |
173 | } | 164 | } |
174 | 165 | ||
175 | 166 | ||
diff --git a/apps/plugins/rockboy/loader.c b/apps/plugins/rockboy/loader.c index d6efa2e8ee..8166220c8e 100644 --- a/apps/plugins/rockboy/loader.c +++ b/apps/plugins/rockboy/loader.c | |||
@@ -10,68 +10,67 @@ | |||
10 | #include "hw.h" | 10 | #include "hw.h" |
11 | #include "lcd-gb.h" | 11 | #include "lcd-gb.h" |
12 | #include "rtc-gb.h" | 12 | #include "rtc-gb.h" |
13 | #include "rc.h" | ||
14 | #include "save.h" | 13 | #include "save.h" |
15 | #include "sound.h" | 14 | #include "sound.h" |
16 | 15 | ||
17 | 16 | ||
18 | static int mbc_table[256] = | 17 | static int mbc_table[256] = |
19 | { | 18 | { |
20 | 0, 1, 1, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, | 19 | 0, 1, 1, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, |
21 | 3, 3, 3, 3, 0, 0, 0, 0, 0, 5, 5, 5, MBC_RUMBLE, MBC_RUMBLE, MBC_RUMBLE, 0, | 20 | 3, 3, 3, 3, 0, 0, 0, 0, 0, 5, 5, 5, MBC_RUMBLE, MBC_RUMBLE, MBC_RUMBLE, 0, |
22 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 21 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
23 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 22 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
24 | 23 | ||
25 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 24 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
26 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 25 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
27 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 26 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
28 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 27 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
29 | 28 | ||
30 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 29 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
31 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 30 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
32 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 31 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
33 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 32 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
34 | 33 | ||
35 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 34 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
36 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 35 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
37 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 36 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
38 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MBC_HUC3, MBC_HUC1 | 37 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MBC_HUC3, MBC_HUC1 |
39 | }; | 38 | }; |
40 | 39 | ||
41 | static int rtc_table[256] = | 40 | static int rtc_table[256] = |
42 | { | 41 | { |
43 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, | 42 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, |
44 | 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 43 | 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
45 | 0 | 44 | 0 |
46 | }; | 45 | }; |
47 | 46 | ||
48 | static int batt_table[256] = | 47 | static int batt_table[256] = |
49 | { | 48 | { |
50 | 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, | 49 | 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, |
51 | 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | 50 | 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, |
52 | 0 | 51 | 0 |
53 | }; | 52 | }; |
54 | 53 | ||
55 | static int romsize_table[256] = | 54 | static int romsize_table[256] = |
56 | { | 55 | { |
57 | 2, 4, 8, 16, 32, 64, 128, 256, 512, | 56 | 2, 4, 8, 16, 32, 64, 128, 256, 512, |
58 | 0, 0, 0, 0, 0, 0, 0, 0, | 57 | 0, 0, 0, 0, 0, 0, 0, 0, |
59 | 0, 0, 0, 0, 0, 0, 0, 0, | 58 | 0, 0, 0, 0, 0, 0, 0, 0, |
60 | 0, 0, 0, 0, 0, 0, 0, 0, | 59 | 0, 0, 0, 0, 0, 0, 0, 0, |
61 | 0, 0, 0, 0, 0, 0, 0, 0, | 60 | 0, 0, 0, 0, 0, 0, 0, 0, |
62 | 0, 0, 0, 0, 0, 0, 0, 0, | 61 | 0, 0, 0, 0, 0, 0, 0, 0, |
63 | 0, 0, 0, 0, 0, 0, 0, 0, | 62 | 0, 0, 0, 0, 0, 0, 0, 0, |
64 | 0, 0, 0, 0, 0, 0, 0, 0, | 63 | 0, 0, 0, 0, 0, 0, 0, 0, |
65 | 0, 0, 0, 0, 0, 0, 0, 0, | 64 | 0, 0, 0, 0, 0, 0, 0, 0, |
66 | 0, 0, 0, 0, 0, 0, 0, 0, | 65 | 0, 0, 0, 0, 0, 0, 0, 0, |
67 | 0, 0, 128, 128, 128 | 66 | 0, 0, 128, 128, 128 |
68 | /* 0, 0, 72, 80, 96 -- actual values but bad to use these! */ | 67 | /* 0, 0, 72, 80, 96 -- actual values but bad to use these! */ |
69 | }; | 68 | }; |
70 | 69 | ||
71 | static int ramsize_table[256] = | 70 | static int ramsize_table[256] = |
72 | { | 71 | { |
73 | 1, 1, 1, 4, 16, | 72 | 1, 1, 1, 4, 16, |
74 | 4 /* FIXME - what value should this be?! */ | 73 | 4 /* FIXME - what value should this be?! */ |
75 | }; | 74 | }; |
76 | 75 | ||
77 | 76 | ||
@@ -80,304 +79,238 @@ static char sramfile[500]; | |||
80 | static char rtcfile[500]; | 79 | static char rtcfile[500]; |
81 | static char saveprefix[500]; | 80 | static char saveprefix[500]; |
82 | 81 | ||
83 | static char *savename; | ||
84 | |||
85 | static int saveslot; | 82 | static int saveslot; |
86 | 83 | ||
87 | static int forcebatt, nobatt; | 84 | static int forcebatt, nobatt; |
88 | static int forcedmg, gbamode; | 85 | static int forcedmg; |
89 | 86 | ||
90 | static int memfill = -1, memrand = -1; | 87 | static int memfill = -1, memrand = -1; |
91 | 88 | ||
92 | //static byte romMemory[4*1025*1024]; | ||
93 | int mp3_buffer_size; | ||
94 | void *bufferpos; | ||
95 | |||
96 | static void initmem(void *mem, int size) | 89 | static void initmem(void *mem, int size) |
97 | { | 90 | { |
98 | char *p = mem; | 91 | char *p = mem; |
99 | if (memrand >= 0) | 92 | if (memrand >= 0) |
100 | { | 93 | { |
101 | srand(memrand ? memrand : -6 ); //time(0)); | 94 | srand(memrand ? memrand : -6 ); /* time(0)); */ |
102 | while(size--) *(p++) = rand(); | 95 | while(size--) *(p++) = rand(); |
103 | } | 96 | } |
104 | else if (memfill >= 0) | 97 | else if (memfill >= 0) |
105 | memset(p, memfill, size); | 98 | memset(p, memfill, size); |
106 | } | 99 | } |
107 | 100 | ||
108 | static byte *loadfile(int fd, int *len) | 101 | static byte *loadfile(int fd, int *len) |
109 | { | 102 | { |
110 | int c, l = 0, p = 0; | 103 | int c, l = 0, p = 0; |
111 | 104 | ||
112 | byte *d, buf[512]; | 105 | byte *d, buf[512]; |
113 | d=malloc(32768); | 106 | d=malloc(32768); |
114 | for(;;) | 107 | for(;;) |
115 | { | 108 | { |
116 | c = read(fd, buf, sizeof buf); | 109 | c = read(fd, buf, sizeof buf); |
117 | if (c <= 0) break; | 110 | if (c <= 0) break; |
118 | l += c; | 111 | l += c; |
119 | memcpy(d+p, buf, c); | 112 | memcpy(d+p, buf, c); |
120 | p += c; | 113 | p += c; |
121 | } | 114 | } |
122 | setmallocpos(d+p+64); | 115 | setmallocpos(d+p+64); |
123 | *len = l; | 116 | *len = l; |
124 | return d; | 117 | return d; |
125 | } | 118 | } |
126 | 119 | ||
127 | //static byte sram[65536]; | ||
128 | 120 | ||
129 | int rom_load(void) | 121 | int rom_load(void) |
130 | { | 122 | { |
131 | int fd; | 123 | int fd; |
132 | byte c, *data, *header; | 124 | byte c, *data, *header; |
133 | int len = 0, rlen; | 125 | int len = 0, rlen; |
134 | 126 | ||
135 | fd = open(romfile, O_RDONLY); | 127 | fd = open(romfile, O_RDONLY); |
136 | 128 | ||
137 | if (fd<0) { | 129 | if (fd<0) { |
138 | die("cannot open rom file"); | 130 | die("cannot open rom file"); |
139 | die(romfile); | 131 | die(romfile); |
140 | return 1; | 132 | return 1; |
141 | } | 133 | } |
142 | 134 | ||
143 | data = loadfile(fd, &len); | 135 | data = loadfile(fd, &len); |
144 | header = data; // no zip. = decompress(data, &len); | 136 | header = data; /* no zip. = decompress(data, &len); */ |
145 | 137 | ||
146 | memcpy(rom.name, header+0x0134, 16); | 138 | memcpy(rom.name, header+0x0134, 16); |
147 | if (rom.name[14] & 0x80) rom.name[14] = 0; | 139 | if (rom.name[14] & 0x80) rom.name[14] = 0; |
148 | if (rom.name[15] & 0x80) rom.name[15] = 0; | 140 | if (rom.name[15] & 0x80) rom.name[15] = 0; |
149 | rom.name[16] = 0; | 141 | rom.name[16] = 0; |
150 | 142 | ||
151 | c = header[0x0147]; | 143 | c = header[0x0147]; |
152 | mbc.type = mbc_table[c]; | 144 | mbc.type = mbc_table[c]; |
153 | mbc.batt = (batt_table[c] && !nobatt) || forcebatt; | 145 | mbc.batt = (batt_table[c] && !nobatt) || forcebatt; |
154 | // mbc.batt = 1; // always store savegame mem. | 146 | rtc.batt = rtc_table[c]; |
155 | rtc.batt = rtc_table[c]; | 147 | mbc.romsize = romsize_table[header[0x0148]]; |
156 | mbc.romsize = romsize_table[header[0x0148]]; | 148 | mbc.ramsize = ramsize_table[header[0x0149]]; |
157 | mbc.ramsize = ramsize_table[header[0x0149]]; | 149 | |
158 | 150 | if (!mbc.romsize) { | |
159 | if (!mbc.romsize) { | 151 | die("unknown ROM size %02X\n", header[0x0148]); |
160 | die("unknown ROM size %02X\n", header[0x0148]); | 152 | return 1; |
161 | return 1; | 153 | } |
162 | } | 154 | if (!mbc.ramsize) { |
163 | if (!mbc.ramsize) { | 155 | die("unknown SRAM size %02X\n", header[0x0149]); |
164 | die("unknown SRAM size %02X\n", header[0x0149]); | 156 | return 1; |
165 | return 1; | 157 | } |
166 | } | 158 | |
167 | 159 | rlen = 16384 * mbc.romsize; | |
168 | rlen = 16384 * mbc.romsize; | 160 | rom.bank = (void *) data; /* realloc(data, rlen); */ |
169 | rom.bank = (void *) data; //realloc(data, rlen); | 161 | if (rlen > len) memset(rom.bank[0]+len, 0xff, rlen - len); |
170 | if (rlen > len) memset(rom.bank[0]+len, 0xff, rlen - len); | 162 | |
171 | 163 | ram.sbank = malloc(8192 * mbc.ramsize); | |
172 | ram.sbank = malloc(8192 * mbc.ramsize); | 164 | /* ram.ibank = malloc(4096*8); */ |
173 | //ram.ibank = malloc(4096*8); | 165 | |
174 | 166 | initmem(ram.sbank, 8192 * mbc.ramsize); | |
175 | initmem(ram.sbank, 8192 * mbc.ramsize); | 167 | initmem(ram.ibank, 4096 * 8); |
176 | initmem(ram.ibank, 4096 * 8); | 168 | |
177 | 169 | mbc.rombank = 1; | |
178 | mbc.rombank = 1; | 170 | mbc.rambank = 0; |
179 | mbc.rambank = 0; | 171 | |
180 | 172 | c = header[0x0143]; | |
181 | c = header[0x0143]; | ||
182 | hw.cgb = ((c == 0x80) || (c == 0xc0)) && !forcedmg; | 173 | hw.cgb = ((c == 0x80) || (c == 0xc0)) && !forcedmg; |
183 | hw.gba = (hw.cgb && gbamode); | 174 | |
184 | 175 | close(fd); | |
185 | close(fd); | ||
186 | 176 | ||
187 | return 0; | 177 | return 0; |
188 | } | 178 | } |
189 | 179 | ||
190 | int sram_load(void) | 180 | int sram_load(void) |
191 | { | 181 | { |
192 | int fd; | 182 | int fd; |
193 | char meow[500]; | 183 | char meow[500]; |
194 | 184 | ||
195 | if (!mbc.batt || !sramfile || !*sramfile) return -1; | 185 | if (!mbc.batt || !sramfile || !*sramfile) return -1; |
196 | 186 | ||
197 | /* Consider sram loaded at this point, even if file doesn't exist */ | 187 | /* Consider sram loaded at this point, even if file doesn't exist */ |
198 | ram.loaded = 1; | 188 | ram.loaded = 1; |
199 | 189 | ||
200 | fd = open(sramfile, O_RDONLY); | 190 | fd = open(sramfile, O_RDONLY); |
201 | snprintf(meow,499,"Opening %s %d",sramfile,fd); | 191 | snprintf(meow,499,"Opening %s %d",sramfile,fd); |
202 | rb->splash(HZ*2, true, meow); | 192 | rb->splash(HZ*2, true, meow); |
203 | if (fd<0) return -1; | 193 | if (fd<0) return -1; |
204 | snprintf(meow,499,"Loading savedata from %s",sramfile); | 194 | snprintf(meow,499,"Loading savedata from %s",sramfile); |
205 | rb->splash(HZ*2, true, meow); | 195 | rb->splash(HZ*2, true, meow); |
206 | read(fd,ram.sbank, 8192*mbc.ramsize); | 196 | read(fd,ram.sbank, 8192*mbc.ramsize); |
207 | close(fd); | 197 | close(fd); |
208 | 198 | ||
209 | return 0; | 199 | return 0; |
210 | } | 200 | } |
211 | 201 | ||
212 | 202 | ||
213 | int sram_save(void) | 203 | int sram_save(void) |
214 | { | 204 | { |
215 | int fd; | 205 | int fd; |
216 | char meow[500]; | 206 | char meow[500]; |
217 | 207 | ||
218 | /* If we crash before we ever loaded sram, DO NOT SAVE! */ | 208 | /* If we crash before we ever loaded sram, DO NOT SAVE! */ |
219 | if (!mbc.batt || !sramfile || !ram.loaded || !mbc.ramsize) | 209 | if (!mbc.batt || !sramfile || !ram.loaded || !mbc.ramsize) |
220 | return -1; | 210 | return -1; |
221 | fd = open(sramfile, O_WRONLY|O_CREAT|O_TRUNC); | 211 | fd = open(sramfile, O_WRONLY|O_CREAT|O_TRUNC); |
222 | // snprintf(meow,499,"Opening %s %d",sramfile,fd); | 212 | if (fd<0) return -1; |
223 | // rb->splash(HZ*2, true, meow); | 213 | snprintf(meow,499,"Saving savedata to %s",sramfile); |
224 | if (fd<0) return -1; | 214 | rb->splash(HZ*2, true, meow); |
225 | snprintf(meow,499,"Saving savedata to %s",sramfile); | 215 | write(fd,ram.sbank, 8192*mbc.ramsize); |
226 | rb->splash(HZ*2, true, meow); | 216 | close(fd); |
227 | write(fd,ram.sbank, 8192*mbc.ramsize); | 217 | |
228 | close(fd); | 218 | return 0; |
229 | |||
230 | return 0; | ||
231 | } | 219 | } |
232 | 220 | ||
233 | 221 | ||
234 | void state_save(int n) | 222 | void state_save(int n) |
235 | { | 223 | { |
236 | int fd; | 224 | int fd; |
237 | char name[500]; | 225 | char name[500]; |
238 | 226 | ||
239 | if (n < 0) n = saveslot; | 227 | if (n < 0) n = saveslot; |
240 | if (n < 0) n = 0; | 228 | if (n < 0) n = 0; |
241 | snprintf(name, 499,"%s.%03d", saveprefix, n); | 229 | snprintf(name, 499,"%s.%03d", saveprefix, n); |
242 | 230 | ||
243 | if ((fd = open(name, O_WRONLY|O_CREAT|O_TRUNC)>=0)) | 231 | if ((fd = open(name, O_WRONLY|O_CREAT|O_TRUNC)>=0)) |
244 | { | 232 | { |
245 | savestate(fd); | 233 | savestate(fd); |
246 | close(fd); | 234 | close(fd); |
247 | } | 235 | } |
248 | } | 236 | } |
249 | 237 | ||
250 | 238 | ||
251 | void state_load(int n) | 239 | void state_load(int n) |
252 | { | 240 | { |
253 | int fd; | 241 | int fd; |
254 | char name[500]; | 242 | char name[500]; |
255 | 243 | ||
256 | if (n < 0) n = saveslot; | 244 | if (n < 0) n = saveslot; |
257 | if (n < 0) n = 0; | 245 | if (n < 0) n = 0; |
258 | snprintf(name, 499, "%s.%03d", saveprefix, n); | 246 | snprintf(name, 499, "%s.%03d", saveprefix, n); |
259 | 247 | ||
260 | if ((fd = open(name, O_RDONLY)>=0)) | 248 | if ((fd = open(name, O_RDONLY)>=0)) |
261 | { | 249 | { |
262 | loadstate(fd); | 250 | loadstate(fd); |
263 | close(fd); | 251 | close(fd); |
264 | vram_dirty(); | 252 | vram_dirty(); |
265 | pal_dirty(); | 253 | pal_dirty(); |
266 | sound_dirty(); | 254 | sound_dirty(); |
267 | mem_updatemap(); | 255 | mem_updatemap(); |
268 | } | 256 | } |
269 | } | 257 | } |
270 | 258 | ||
271 | void rtc_save(void) | 259 | void rtc_save(void) |
272 | { | 260 | { |
273 | int fd; | 261 | int fd; |
274 | if (!rtc.batt) return; | 262 | if (!rtc.batt) return; |
275 | if ((fd = open(rtcfile, O_WRONLY|O_CREAT|O_TRUNC))<0) return; | 263 | if ((fd = open(rtcfile, O_WRONLY|O_CREAT|O_TRUNC))<0) return; |
276 | rtc_save_internal(fd); | 264 | rtc_save_internal(fd); |
277 | close(fd); | 265 | close(fd); |
278 | } | 266 | } |
279 | 267 | ||
280 | void rtc_load(void) | 268 | void rtc_load(void) |
281 | { | 269 | { |
282 | int fd; | 270 | int fd; |
283 | if (!rtc.batt) return; | 271 | if (!rtc.batt) return; |
284 | if ((fd = open(rtcfile, O_RDONLY))<0) return; | 272 | if ((fd = open(rtcfile, O_RDONLY))<0) return; |
285 | rtc_load_internal(fd); | 273 | rtc_load_internal(fd); |
286 | close(fd); | 274 | close(fd); |
287 | } | 275 | } |
288 | 276 | ||
289 | 277 | ||
290 | void loader_unload(void) | 278 | void loader_unload(void) |
291 | { | 279 | { |
292 | sram_save(); | 280 | sram_save(); |
293 | // if (romfile) free(romfile); | 281 | /* if (romfile) free(romfile); |
294 | // if (sramfile) free(sramfile); | 282 | if (sramfile) free(sramfile); |
295 | // if (saveprefix) free(saveprefix); | 283 | if (saveprefix) free(saveprefix); |
296 | // if (rom.bank) free(rom.bank); | 284 | if (rom.bank) free(rom.bank); |
297 | // if (ram.sbank) free(ram.sbank); | 285 | if (ram.sbank) free(ram.sbank); */ |
298 | romfile = 0; | 286 | romfile = 0; |
299 | rom.bank = 0; | 287 | rom.bank = 0; |
300 | ram.sbank = 0; | 288 | ram.sbank = 0; |
301 | mbc.type = mbc.romsize = mbc.ramsize = mbc.batt = 0; | 289 | mbc.type = mbc.romsize = mbc.ramsize = mbc.batt = 0; |
302 | } | ||
303 | |||
304 | /* | ||
305 | static char *base(char *s) | ||
306 | { | ||
307 | char *p; | ||
308 | p = strrchr(s, '/'); | ||
309 | if (p) return p+1; | ||
310 | return s; | ||
311 | } | 290 | } |
312 | 291 | ||
313 | |||
314 | static char *ldup(char *s) | ||
315 | { | ||
316 | int i; | ||
317 | char *n, *p; | ||
318 | p = n = malloc(strlen(s)); | ||
319 | for (i = 0; s[i]; i++) if (isalnum(s[i])) *(p++) = tolower(s[i]); | ||
320 | *p = 0; | ||
321 | return n; | ||
322 | }*/ | ||
323 | |||
324 | void cleanup(void) | 292 | void cleanup(void) |
325 | { | 293 | { |
326 | sram_save(); | 294 | sram_save(); |
327 | rtc_save(); | 295 | rtc_save(); |
328 | // IDEA - if error, write emergency savestate..? | 296 | /* IDEA - if error, write emergency savestate..? */ |
329 | } | 297 | } |
330 | 298 | ||
331 | void loader_init(char *s) | 299 | void loader_init(char *s) |
332 | { | 300 | { |
333 | char *name; | 301 | romfile = s; |
334 | // DIR* dir; | 302 | if(rom_load()) |
335 | 303 | return; | |
336 | // sys_checkdir(savedir, 1); /* needs to be writable */ | 304 | rb->splash(HZ/2, true, rom.name); |
337 | /* dir=opendir(savedir); // should be handled when the program opens | 305 | |
338 | if(!dir) | 306 | snprintf(saveprefix, 499, "%s/%s", savedir, rom.name); |
339 | mkdir(savedir); | 307 | |
340 | else | 308 | strcpy(sramfile, saveprefix); |
341 | closedir(dir);*/ | 309 | strcat(sramfile, ".sav"); |
342 | 310 | ||
343 | romfile = s; | 311 | strcpy(rtcfile, saveprefix); |
344 | if(rom_load()) | 312 | strcat(rtcfile, ".rtc"); |
345 | return; | 313 | |
346 | vid_settitle(rom.name); | 314 | sram_load(); |
347 | name = rom.name; | 315 | rtc_load(); |
348 | |||
349 | snprintf(saveprefix, 499, "%s/%s", savedir, name); | ||
350 | |||
351 | strcpy(sramfile, saveprefix); | ||
352 | strcat(sramfile, ".sav"); | ||
353 | |||
354 | strcpy(rtcfile, saveprefix); | ||
355 | strcat(rtcfile, ".rtc"); | ||
356 | |||
357 | sram_load(); | ||
358 | rtc_load(); | ||
359 | |||
360 | //atexit(cleanup); | ||
361 | } | 316 | } |
362 | |||
363 | rcvar_t loader_exports[] = | ||
364 | { | ||
365 | RCV_STRING("savedir", &savedir), | ||
366 | RCV_STRING("savename", &savename), | ||
367 | RCV_INT("saveslot", &saveslot), | ||
368 | RCV_BOOL("forcebatt", &forcebatt), | ||
369 | RCV_BOOL("nobatt", &nobatt), | ||
370 | RCV_BOOL("forcedmg", &forcedmg), | ||
371 | RCV_INT("memfill", &memfill), | ||
372 | RCV_INT("memrand", &memrand), | ||
373 | RCV_END | ||
374 | }; | ||
375 | |||
376 | |||
377 | |||
378 | |||
379 | |||
380 | |||
381 | |||
382 | |||
383 | |||
diff --git a/apps/plugins/rockboy/loader.h b/apps/plugins/rockboy/loader.h index 45ee5e705d..2eeb469403 100644 --- a/apps/plugins/rockboy/loader.h +++ b/apps/plugins/rockboy/loader.h | |||
@@ -6,11 +6,11 @@ | |||
6 | 6 | ||
7 | typedef struct loader_s | 7 | typedef struct loader_s |
8 | { | 8 | { |
9 | char *rom; | 9 | char *rom; |
10 | char *base; | 10 | char *base; |
11 | char *sram; | 11 | char *sram; |
12 | char *state; | 12 | char *state; |
13 | int ramloaded; | 13 | int ramloaded; |
14 | } loader_t; | 14 | } loader_t; |
15 | 15 | ||
16 | 16 | ||
diff --git a/apps/plugins/rockboy/main.c b/apps/plugins/rockboy/main.c index c9cbb76aaa..fc21ca0d58 100644 --- a/apps/plugins/rockboy/main.c +++ b/apps/plugins/rockboy/main.c | |||
@@ -3,95 +3,42 @@ | |||
3 | 3 | ||
4 | #include "rockmacros.h" | 4 | #include "rockmacros.h" |
5 | #include "input.h" | 5 | #include "input.h" |
6 | #include "rc.h" | ||
7 | #include "exports.h" | ||
8 | #include "emu.h" | 6 | #include "emu.h" |
9 | #include "loader.h" | 7 | #include "loader.h" |
10 | #include "hw.h" | 8 | #include "hw.h" |
11 | 9 | ||
12 | //#include "Version" | ||
13 | |||
14 | |||
15 | static char *defaultconfig[] = | ||
16 | { | ||
17 | "bind up +up", | ||
18 | "bind down +down", | ||
19 | "bind left +left", | ||
20 | "bind right +right", | ||
21 | "bind joy0 +b", | ||
22 | "bind joy1 +a", | ||
23 | "bind joy2 +select", | ||
24 | "bind joy3 +start", | ||
25 | "bind ins savestate", | ||
26 | "bind del loadstate", | ||
27 | NULL | ||
28 | }; | ||
29 | |||
30 | |||
31 | void doevents() | 10 | void doevents() |
32 | { | 11 | { |
33 | event_t ev; | 12 | event_t ev; |
34 | int st; | 13 | int st; |
35 | 14 | ||
36 | ev_poll(); | 15 | ev_poll(); |
37 | while (ev_getevent(&ev)) | 16 | while (ev_getevent(&ev)) |
38 | { | 17 | { |
39 | if (ev.type != EV_PRESS && ev.type != EV_RELEASE) | 18 | if (ev.type != EV_PRESS && ev.type != EV_RELEASE) |
40 | continue; | 19 | continue; |
41 | st = (ev.type != EV_RELEASE); | 20 | st = (ev.type != EV_RELEASE); |
42 | pad_set(ev.code, st); | 21 | pad_set(ev.code, st); |
43 | } | 22 | } |
44 | } | 23 | } |
45 | 24 | ||
46 | |||
47 | |||
48 | /* convenience macro for printing loading state */ | ||
49 | #define PUTS(str) do { \ | ||
50 | rb->lcd_putsxy(1, y, (unsigned char *)str); \ | ||
51 | rb->lcd_getstringsize((unsigned char *)str, &w, &h); \ | ||
52 | y += h + 1; \ | ||
53 | } while (0) | ||
54 | |||
55 | int gnuboy_main(char *rom) | 25 | int gnuboy_main(char *rom) |
56 | { | 26 | { |
57 | int i, w, h, y; | 27 | rb->lcd_puts(0,0,"Init video"); |
58 | 28 | vid_init(); | |
59 | y = 1; | 29 | rb->lcd_puts(0,1,"Init sound"); |
60 | // Avoid initializing video if we don't have to | 30 | pcm_init(); |
61 | // If we have special perms, drop them ASAP! | 31 | rb->lcd_puts(0,2,"Loading rom"); |
62 | PUTS("Init exports"); | 32 | loader_init(rom); |
63 | init_exports(); | 33 | if(shut) |
64 | 34 | return PLUGIN_ERROR; | |
65 | PUTS("Loading default config"); | 35 | rb->lcd_puts(0,3,"Emu reset"); |
66 | for (i = 0; defaultconfig[i]; i++) | 36 | emu_reset(); |
67 | rc_command(defaultconfig[i]); | 37 | rb->lcd_puts(0,4,"Emu run"); |
68 | |||
69 | // sprintf(cmd, "source %s", rom); | ||
70 | // s = strchr(cmd, '.'); | ||
71 | // if (s) *s = 0; | ||
72 | // strcat(cmd, ".rc"); | ||
73 | // rc_command(cmd); | ||
74 | |||
75 | // FIXME - make interface modules responsible for atexit() | ||
76 | PUTS("Init video"); | ||
77 | vid_init(); | ||
78 | PUTS("Init sound"); | ||
79 | pcm_init(); | ||
80 | PUTS("Loading rom"); | ||
81 | loader_init(rom); | ||
82 | if(shut) | ||
83 | return PLUGIN_ERROR; | ||
84 | PUTS("Emu reset"); | ||
85 | emu_reset(); | ||
86 | PUTS("Emu run"); | ||
87 | #if (LCD_HEIGHT > 144) || (LCD_WIDTH > 160) | ||
88 | rb->lcd_clear_display(); | 38 | rb->lcd_clear_display(); |
89 | // rb->lcd_drawrect((LCD_WIDTH-160)/2-1, (LCD_HEIGHT-144)/2-1, 162, 146); | ||
90 | rb->lcd_update(); | 39 | rb->lcd_update(); |
91 | #endif | 40 | emu_run(); |
92 | emu_run(); | ||
93 | 41 | ||
94 | // never reached | 42 | /* never reached */ |
95 | return PLUGIN_OK; | 43 | return PLUGIN_OK; |
96 | } | 44 | } |
97 | #undef PUTS | ||
diff --git a/apps/plugins/rockboy/mem.c b/apps/plugins/rockboy/mem.c index 01a05d09ea..8c0bea0b83 100644 --- a/apps/plugins/rockboy/mem.c +++ b/apps/plugins/rockboy/mem.c | |||
@@ -12,7 +12,7 @@ | |||
12 | #include "sound.h" | 12 | #include "sound.h" |
13 | 13 | ||
14 | struct mbc mbc IBSS_ATTR; | 14 | struct mbc mbc IBSS_ATTR; |
15 | struct rom rom; | 15 | struct rom rom IBSS_ATTR; |
16 | struct ram ram; | 16 | struct ram ram; |
17 | 17 | ||
18 | 18 | ||
@@ -31,7 +31,7 @@ struct ram ram; | |||
31 | void mem_updatemap() | 31 | void mem_updatemap() |
32 | { | 32 | { |
33 | int n; | 33 | int n; |
34 | byte **map; | 34 | static byte **map; |
35 | 35 | ||
36 | map = mbc.rmap; | 36 | map = mbc.rmap; |
37 | map[0x0] = rom.bank[0]; | 37 | map[0x0] = rom.bank[0]; |
@@ -46,16 +46,17 @@ void mem_updatemap() | |||
46 | map[0x7] = rom.bank[mbc.rombank] - 0x4000; | 46 | map[0x7] = rom.bank[mbc.rombank] - 0x4000; |
47 | } | 47 | } |
48 | else map[0x4] = map[0x5] = map[0x6] = map[0x7] = NULL; | 48 | else map[0x4] = map[0x5] = map[0x6] = map[0x7] = NULL; |
49 | if (0 && (R_STAT & 0x03) == 0x03) | 49 | if (R_VBK & 1) |
50 | { | 50 | { |
51 | map[0x8] = NULL; | 51 | map[0x8] = lcd.vbank[1] - 0x8000; |
52 | map[0x9] = NULL; | 52 | map[0x9] = lcd.vbank[1] - 0x8000; |
53 | } | 53 | } |
54 | else | 54 | else |
55 | { | 55 | { |
56 | map[0x8] = lcd.vbank[R_VBK & 1] - 0x8000; | 56 | map[0x8] = lcd.vbank[0]/*[R_VBK & 1]*/ - 0x8000; |
57 | map[0x9] = lcd.vbank[R_VBK & 1] - 0x8000; | 57 | map[0x9] = lcd.vbank[0]/*[R_VBK & 1]*/ - 0x8000; |
58 | } | 58 | |
59 | } | ||
59 | if (mbc.enableram && !(rtc.sel&8)) | 60 | if (mbc.enableram && !(rtc.sel&8)) |
60 | { | 61 | { |
61 | map[0xA] = ram.sbank[mbc.rambank] - 0xA000; | 62 | map[0xA] = ram.sbank[mbc.rambank] - 0xA000; |
@@ -127,18 +128,18 @@ void ioreg_write(byte r, byte b) | |||
127 | break; | 128 | break; |
128 | case RI_BGP: | 129 | case RI_BGP: |
129 | if (R_BGP == b) break; | 130 | if (R_BGP == b) break; |
130 | pal_write_dmg(0, 0, b); | 131 | /* pal_write_dmg(0, 0, b); */ /*Disabled in iBoy and WAC-gnuboyCE */ |
131 | pal_write_dmg(8, 1, b); | 132 | /* pal_write_dmg(8, 1, b); */ /*Disabled in iBoy and WAC-gnuboyCE */ |
132 | R_BGP = b; | 133 | R_BGP = b; |
133 | break; | 134 | break; |
134 | case RI_OBP0: | 135 | case RI_OBP0: |
135 | if (R_OBP0 == b) break; | 136 | if (R_OBP0 == b) break; |
136 | pal_write_dmg(64, 2, b); | 137 | /* pal_write_dmg(64, 2, b); */ /*Disabled in iBoy and WAC-gnuboyCE */ |
137 | R_OBP0 = b; | 138 | R_OBP0 = b; |
138 | break; | 139 | break; |
139 | case RI_OBP1: | 140 | case RI_OBP1: |
140 | if (R_OBP1 == b) break; | 141 | if (R_OBP1 == b) break; |
141 | pal_write_dmg(72, 3, b); | 142 | /* pal_write_dmg(72, 3, b); */ /*Disabled in iBoy and WAC-gnuboyCE */ |
142 | R_OBP1 = b; | 143 | R_OBP1 = b; |
143 | break; | 144 | break; |
144 | case RI_IF: | 145 | case RI_IF: |
@@ -166,7 +167,8 @@ void ioreg_write(byte r, byte b) | |||
166 | lcdc_change(b); | 167 | lcdc_change(b); |
167 | break; | 168 | break; |
168 | case RI_STAT: | 169 | case RI_STAT: |
169 | stat_write(b); | 170 | REG(r) = (REG(r) & 0x07) | (b & 0x78); |
171 | stat_trigger(); | ||
170 | break; | 172 | break; |
171 | case RI_LYC: | 173 | case RI_LYC: |
172 | REG(r) = b; | 174 | REG(r) = b; |
@@ -220,21 +222,6 @@ void ioreg_write(byte r, byte b) | |||
220 | hw_hdma_cmd(b); | 222 | hw_hdma_cmd(b); |
221 | break; | 223 | break; |
222 | } | 224 | } |
223 | switch (r) | ||
224 | { | ||
225 | case RI_BGP: | ||
226 | case RI_OBP0: | ||
227 | case RI_OBP1: | ||
228 | /* printf("palette reg %02X write %02X at LY=%02X\n", r, b, R_LY); */ | ||
229 | case RI_HDMA1: | ||
230 | case RI_HDMA2: | ||
231 | case RI_HDMA3: | ||
232 | case RI_HDMA4: | ||
233 | case RI_HDMA5: | ||
234 | /* printf("HDMA %d: %02X\n", r - RI_HDMA1 + 1, b); */ | ||
235 | break; | ||
236 | } | ||
237 | /* printf("reg %02X => %02X (%02X)\n", r, REG(r), b); */ | ||
238 | } | 225 | } |
239 | 226 | ||
240 | 227 | ||
@@ -410,29 +397,31 @@ void mbc_write(int a, byte b) | |||
410 | break; | 397 | break; |
411 | } | 398 | } |
412 | break; | 399 | break; |
413 | case MBC_HUC3: | 400 | case MBC_HUC3: /* FIXME - this is all guesswork -- is it right??? */ |
414 | switch (ha & 0xE) | 401 | switch (ha & 0xE) |
415 | { | 402 | { |
416 | case 0x0: | 403 | case 0x0: |
417 | mbc.enableram = ((b & 0x0F) == 0x0A); | 404 | mbc.enableram = ((b & 0x0F) == 0x0A); |
418 | break; | 405 | break; |
419 | case 0x2: | 406 | case 0x2: |
420 | b &= 0x7F; | 407 | if (!b) b = 1; |
421 | mbc.rombank = b ? b : 1; | 408 | mbc.rombank = b; |
422 | break; | 409 | break; |
423 | case 0x4: | 410 | case 0x4: |
424 | rtc.sel = b & 0x0f; | 411 | if (mbc.model) |
425 | mbc.rambank = b & 0x03; | 412 | { |
426 | break; | 413 | mbc.rambank = b & 0x03; |
427 | case 0x6: | 414 | break; |
428 | rtc_latch(b); | 415 | } |
429 | break; | 416 | break; |
430 | } | 417 | case 0x6: |
431 | break; | 418 | mbc.model = b & 1; |
432 | } | 419 | break; |
420 | } | ||
421 | break; | ||
422 | } | ||
433 | mbc.rombank &= (mbc.romsize - 1); | 423 | mbc.rombank &= (mbc.romsize - 1); |
434 | mbc.rambank &= (mbc.ramsize - 1); | 424 | mbc.rambank &= (mbc.ramsize - 1); |
435 | /* printf("%02X\n", mbc.rombank); */ | ||
436 | mem_updatemap(); | 425 | mem_updatemap(); |
437 | } | 426 | } |
438 | 427 | ||
@@ -494,7 +483,8 @@ void mem_write(int a, byte b) | |||
494 | /* return writehi(a & 0xFF, b); */ | 483 | /* return writehi(a & 0xFF, b); */ |
495 | if (a >= 0xFF10 && a <= 0xFF3F) | 484 | if (a >= 0xFF10 && a <= 0xFF3F) |
496 | { | 485 | { |
497 | sound_write(a & 0xFF, b); | 486 | if(options.sound) |
487 | sound_write(a & 0xFF, b); | ||
498 | break; | 488 | break; |
499 | } | 489 | } |
500 | if ((a & 0xFF80) == 0xFF80 && a != 0xFFFF) | 490 | if ((a & 0xFF80) == 0xFF80 && a != 0xFFFF) |
@@ -530,14 +520,12 @@ byte mem_read(int a) | |||
530 | case 0x8: | 520 | case 0x8: |
531 | /* if ((R_STAT & 0x03) == 0x03) return 0xFF; */ | 521 | /* if ((R_STAT & 0x03) == 0x03) return 0xFF; */ |
532 | return lcd.vbank[R_VBK&1][a & 0x1FFF]; | 522 | return lcd.vbank[R_VBK&1][a & 0x1FFF]; |
533 | case 0xA: | 523 | case 0xA: |
534 | if (!mbc.enableram && mbc.type == MBC_HUC3) | 524 | if (!mbc.enableram) |
535 | return 0x01; | 525 | return 0xFF; |
536 | if (!mbc.enableram) | 526 | if (rtc.sel&8) |
537 | return 0xFF; | 527 | return rtc.regs[rtc.sel&7]; |
538 | if (rtc.sel&8) | 528 | return ram.sbank[mbc.rambank][a & 0x1FFF]; |
539 | return rtc.regs[rtc.sel&7]; | ||
540 | return ram.sbank[mbc.rambank][a & 0x1FFF]; | ||
541 | case 0xC: | 529 | case 0xC: |
542 | if ((a & 0xF000) == 0xC000) | 530 | if ((a & 0xF000) == 0xC000) |
543 | return ram.ibank[0][a & 0x0FFF]; | 531 | return ram.ibank[0][a & 0x0FFF]; |
@@ -554,7 +542,12 @@ byte mem_read(int a) | |||
554 | /* return readhi(a & 0xFF); */ | 542 | /* return readhi(a & 0xFF); */ |
555 | if (a == 0xFFFF) return REG(0xFF); | 543 | if (a == 0xFFFF) return REG(0xFF); |
556 | if (a >= 0xFF10 && a <= 0xFF3F) | 544 | if (a >= 0xFF10 && a <= 0xFF3F) |
557 | return sound_read(a & 0xFF); | 545 | { |
546 | if(options.sound) | ||
547 | return sound_read(a & 0xFF); | ||
548 | else | ||
549 | return 1; | ||
550 | } | ||
558 | if ((a & 0xFF80) == 0xFF80) | 551 | if ((a & 0xFF80) == 0xFF80) |
559 | return ram.hi[a & 0xFF]; | 552 | return ram.hi[a & 0xFF]; |
560 | return ioreg_read(a & 0xFF); | 553 | return ioreg_read(a & 0xFF); |
diff --git a/apps/plugins/rockboy/mem.h b/apps/plugins/rockboy/mem.h index 14d03d5ff5..66165d1970 100644 --- a/apps/plugins/rockboy/mem.h +++ b/apps/plugins/rockboy/mem.h | |||
@@ -17,29 +17,29 @@ | |||
17 | 17 | ||
18 | struct mbc | 18 | struct mbc |
19 | { | 19 | { |
20 | int type; | 20 | int type; |
21 | int model; | 21 | int model; |
22 | int rombank; | 22 | int rombank; |
23 | int rambank; | 23 | int rambank; |
24 | int romsize; | 24 | int romsize; |
25 | int ramsize; | 25 | int ramsize; |
26 | int enableram; | 26 | int enableram; |
27 | int batt; | 27 | int batt; |
28 | byte *rmap[0x10], *wmap[0x10]; | 28 | byte *rmap[0x10], *wmap[0x10]; |
29 | }; | 29 | }; |
30 | 30 | ||
31 | struct rom | 31 | struct rom |
32 | { | 32 | { |
33 | byte (*bank)[16384]; | 33 | byte (*bank)[16384]; |
34 | char name[20]; | 34 | char name[20]; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | struct ram | 37 | struct ram |
38 | { | 38 | { |
39 | byte hi[256]; | 39 | byte hi[256]; |
40 | byte ibank[8][4096]; | 40 | byte ibank[8][4096]; |
41 | byte (*sbank)[8192]; | 41 | byte (*sbank)[8192]; |
42 | int loaded; | 42 | int loaded; |
43 | }; | 43 | }; |
44 | 44 | ||
45 | 45 | ||
diff --git a/apps/plugins/rockboy/menu.c b/apps/plugins/rockboy/menu.c index 5f7f6b73c8..b49e480f41 100644 --- a/apps/plugins/rockboy/menu.c +++ b/apps/plugins/rockboy/menu.c | |||
@@ -13,6 +13,13 @@ | |||
13 | #define MENU_BUTTON_DOWN BUTTON_SCROLL_FWD | 13 | #define MENU_BUTTON_DOWN BUTTON_SCROLL_FWD |
14 | #define MENU_BUTTON_LEFT BUTTON_LEFT | 14 | #define MENU_BUTTON_LEFT BUTTON_LEFT |
15 | #define MENU_BUTTON_RIGHT BUTTON_RIGHT | 15 | #define MENU_BUTTON_RIGHT BUTTON_RIGHT |
16 | |||
17 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) | ||
18 | #define MENU_BUTTON_UP BUTTON_SCROLL_UP | ||
19 | #define MENU_BUTTON_DOWN BUTTON_SCROLL_DOWN | ||
20 | #define MENU_BUTTON_LEFT BUTTON_LEFT | ||
21 | #define MENU_BUTTON_RIGHT BUTTON_RIGHT | ||
22 | |||
16 | #else | 23 | #else |
17 | #define MENU_BUTTON_UP BUTTON_UP | 24 | #define MENU_BUTTON_UP BUTTON_UP |
18 | #define MENU_BUTTON_DOWN BUTTON_DOWN | 25 | #define MENU_BUTTON_DOWN BUTTON_DOWN |
@@ -322,9 +329,9 @@ static void do_opt_menu(void) | |||
322 | }; | 329 | }; |
323 | 330 | ||
324 | static const struct opt_items fullscreen[]= { | 331 | static const struct opt_items fullscreen[]= { |
325 | { "Off", -1 }, | 332 | { "Unscaled", -1 }, |
326 | { "Fullscreen", -1 }, | 333 | { "Scaled", -1 }, |
327 | { "Full - Maintain Ratio", -1 }, | 334 | { "Scaled - Maintain Ratio", -1 }, |
328 | }; | 335 | }; |
329 | 336 | ||
330 | static const struct opt_items frameskip[]= { | 337 | static const struct opt_items frameskip[]= { |
@@ -333,13 +340,38 @@ static void do_opt_menu(void) | |||
333 | { "5 Max", -1 }, | 340 | { "5 Max", -1 }, |
334 | { "6 Max", -1 }, | 341 | { "6 Max", -1 }, |
335 | }; | 342 | }; |
343 | |||
344 | #ifdef HAVE_LCD_COLOR | ||
345 | static const struct opt_items palette[]= { | ||
346 | { "Brown (Default)", -1 }, | ||
347 | { "Gray", -1 }, | ||
348 | { "Light Gray", -1 }, | ||
349 | { "Multi-Color 1", -1 }, | ||
350 | { "Multi-Color 2", -1 }, | ||
351 | { "Adventure Island", -1 }, | ||
352 | { "Adventure Island 2", -1 }, | ||
353 | { "Balloon Kid", -1 }, | ||
354 | { "Batman", -1 }, | ||
355 | { "Batman: Return of Joker", -1 }, | ||
356 | { "Bionic Commando", -1 }, | ||
357 | { "Castlvania Adventure", -1 }, | ||
358 | { "Donkey Kong Land", -1 }, | ||
359 | { "Dr. Mario", -1 }, | ||
360 | { "Kirby", -1 }, | ||
361 | { "Metroid", -1 }, | ||
362 | { "Zelda", -1 }, | ||
363 | }; | ||
364 | #endif | ||
336 | 365 | ||
337 | static const struct menu_item items[] = { | 366 | static const struct menu_item items[] = { |
338 | { "Max Frameskip", NULL }, | 367 | { "Max Frameskip", NULL }, |
339 | { "Sound" , NULL }, | 368 | { "Sound" , NULL }, |
340 | { "Stats" , NULL }, | 369 | { "Stats" , NULL }, |
341 | { "Fullscreen" , NULL }, | 370 | { "Screen Options" , NULL }, |
342 | { "Set Keys (Buggy)", NULL }, | 371 | { "Set Keys (Buggy)", NULL }, |
372 | #ifdef HAVE_LCD_COLOR | ||
373 | { "Set Palette" , NULL }, | ||
374 | #endif | ||
343 | }; | 375 | }; |
344 | 376 | ||
345 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL); | 377 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL); |
@@ -359,6 +391,7 @@ static void do_opt_menu(void) | |||
359 | case 1: /* Sound */ | 391 | case 1: /* Sound */ |
360 | if(options.sound>1) options.sound=1; | 392 | if(options.sound>1) options.sound=1; |
361 | rb->set_option(items[1].desc, &options.sound, INT, onoff, 2, NULL ); | 393 | rb->set_option(items[1].desc, &options.sound, INT, onoff, 2, NULL ); |
394 | if(options.sound) sound_dirty(); | ||
362 | break; | 395 | break; |
363 | case 2: /* Stats */ | 396 | case 2: /* Stats */ |
364 | rb->set_option(items[2].desc, &options.showstats, INT, onoff, 2, NULL ); | 397 | rb->set_option(items[2].desc, &options.showstats, INT, onoff, 2, NULL ); |
@@ -370,6 +403,12 @@ static void do_opt_menu(void) | |||
370 | case 4: /* Keys */ | 403 | case 4: /* Keys */ |
371 | setupkeys(); | 404 | setupkeys(); |
372 | break; | 405 | break; |
406 | #ifdef HAVE_LCD_COLOR | ||
407 | case 5: /* Palette */ | ||
408 | rb->set_option(items[5].desc, &options.pal, INT, palette, 17, NULL ); | ||
409 | set_pal(); | ||
410 | break; | ||
411 | #endif | ||
373 | default: | 412 | default: |
374 | done=true; | 413 | done=true; |
375 | break; | 414 | break; |
diff --git a/apps/plugins/rockboy/noise.h b/apps/plugins/rockboy/noise.h index 838cbe171c..05bcff42cd 100644 --- a/apps/plugins/rockboy/noise.h +++ b/apps/plugins/rockboy/noise.h | |||
@@ -7,524 +7,524 @@ | |||
7 | 7 | ||
8 | static byte noise7[] ICONST_ATTR = | 8 | static byte noise7[] ICONST_ATTR = |
9 | { | 9 | { |
10 | 0xfd,0xf3,0xd7,0x0d,0xd3,0x15,0x82,0xf1, | 10 | 0xfb,0xe7,0xae,0x1b,0xa6,0x2b,0x05,0xe3, |
11 | 0xdb,0x25,0x21,0x39,0x68,0x8c,0xd5,0x00, | 11 | 0xb6,0x4a,0x42,0x72,0xd1,0x19,0xaa,0x03, |
12 | }; | 12 | }; |
13 | 13 | ||
14 | static byte noise15[] ICONST_ATTR = | 14 | static byte noise15[] ICONST_ATTR = |
15 | { | 15 | { |
16 | 0xff,0xfd,0xff,0xf3,0xff,0xd7,0xff,0x0f, | 16 | 0xff,0xfb,0xff,0xe7,0xff,0xaf,0xfe,0x1f, |
17 | 0xfd,0xdf,0xf3,0x3f,0xd5,0x7f,0x00,0xfd, | 17 | 0xfb,0xbf,0xe6,0x7f,0xaa,0xfe,0x01,0xfb, |
18 | 0xfd,0xf3,0xf3,0xd7,0xd7,0x0f,0x0d,0xdd, | 18 | 0xfb,0xe7,0xe7,0xaf,0xae,0x1e,0x1b,0xbb, |
19 | 0xd3,0x33,0x15,0x55,0x80,0x02,0xff,0xf1, | 19 | 0xa6,0x66,0x2a,0xab,0x00,0x05,0xff,0xe3, |
20 | 0xff,0xdb,0xff,0x27,0xfd,0x2f,0xf1,0x1f, | 20 | 0xff,0xb7,0xfe,0x4f,0xfa,0x5f,0xe2,0x3f, |
21 | 0xd9,0xbf,0x2a,0x7d,0x02,0xf1,0xf1,0xdb, | 21 | 0xb3,0x7e,0x54,0xfa,0x05,0xe3,0xe3,0xb7, |
22 | 0xdb,0x27,0x25,0x2d,0x21,0x11,0x39,0x99, | 22 | 0xb6,0x4e,0x4a,0x5a,0x42,0x22,0x73,0x32, |
23 | 0x6a,0xa8,0x80,0x0c,0xff,0xd5,0xff,0x03, | 23 | 0xd5,0x51,0x00,0x19,0xff,0xab,0xfe,0x07, |
24 | 0xfd,0xf7,0xf3,0xcf,0xd7,0x5f,0x0c,0x3d, | 24 | 0xfb,0xef,0xe7,0x9f,0xae,0xbe,0x18,0x7b, |
25 | 0xd7,0x73,0x0c,0xd5,0xd5,0x03,0x01,0xf5, | 25 | 0xae,0xe6,0x19,0xab,0xaa,0x06,0x03,0xeb, |
26 | 0xfb,0xc3,0xe7,0x77,0xac,0xce,0x15,0x5b, | 26 | 0xf7,0x87,0xce,0xef,0x59,0x9c,0x2a,0xb7, |
27 | 0x80,0x26,0xff,0x29,0xfd,0x0b,0xf1,0xc7, | 27 | 0x00,0x4d,0xfe,0x53,0xfa,0x17,0xe3,0x8f, |
28 | 0xdb,0x6f,0x24,0x9d,0x24,0xb1,0x24,0x59, | 28 | 0xb6,0xde,0x49,0x3a,0x49,0x62,0x48,0xb2, |
29 | 0x26,0x29,0x2b,0x09,0x05,0xc9,0xe3,0x4b, | 29 | 0x4c,0x52,0x56,0x12,0x0b,0x93,0xc6,0x97, |
30 | 0xb4,0x46,0x46,0x6a,0x6a,0x82,0x80,0xf0, | 30 | 0x68,0x8c,0x8c,0xd4,0xd5,0x05,0x01,0xe1, |
31 | 0xfd,0xdd,0xf3,0x33,0xd5,0x57,0x00,0x0d, | 31 | 0xfb,0xbb,0xe6,0x67,0xaa,0xae,0x00,0x1b, |
32 | 0xff,0xd3,0xff,0x17,0xfd,0x8f,0xf2,0xdf, | 32 | 0xff,0xa7,0xfe,0x2f,0xfb,0x1f,0xe5,0xbf, |
33 | 0xd1,0x3f,0x19,0x7d,0xa8,0xf2,0x0d,0xd3, | 33 | 0xa2,0x7e,0x32,0xfb,0x51,0xe4,0x1b,0xa7, |
34 | 0xd3,0x17,0x15,0x8d,0x82,0xd2,0xf1,0x11, | 34 | 0xa6,0x2e,0x2b,0x1b,0x05,0xa5,0xe2,0x23, |
35 | 0xd9,0x9b,0x2a,0xa5,0x00,0x21,0xff,0x3b, | 35 | 0xb3,0x36,0x55,0x4a,0x00,0x43,0xfe,0x77, |
36 | 0xfd,0x67,0xf0,0xaf,0xdc,0x1f,0x37,0xbd, | 36 | 0xfa,0xcf,0xe1,0x5f,0xb8,0x3e,0x6f,0x7a, |
37 | 0x4e,0x70,0x5a,0xde,0x21,0x3b,0x39,0x65, | 37 | 0x9c,0xe0,0xb5,0xbc,0x42,0x76,0x72,0xca, |
38 | 0x68,0xa0,0x8c,0x3c,0xd7,0x75,0x0c,0xc1, | 38 | 0xd1,0x41,0x18,0x79,0xae,0xea,0x19,0x83, |
39 | 0xd5,0x7b,0x00,0xe5,0xfd,0xa3,0xf2,0x37, | 39 | 0xaa,0xf6,0x01,0xcb,0xfb,0x47,0xe4,0x6f, |
40 | 0xd3,0x4f,0x14,0x5d,0x86,0x32,0xeb,0x51, | 40 | 0xa6,0x9e,0x28,0xbb,0x0c,0x65,0xd6,0xa3, |
41 | 0x84,0x1a,0xe7,0xa1,0xae,0x3a,0x1b,0x63, | 41 | 0x08,0x35,0xcf,0x43,0x5c,0x74,0x36,0xc7, |
42 | 0xa4,0xb6,0x24,0x4b,0x26,0x45,0x2a,0x61, | 42 | 0x49,0x6c,0x48,0x96,0x4c,0x8a,0x54,0xc2, |
43 | 0x02,0xb9,0xf0,0x6b,0xde,0x87,0x38,0xed, | 43 | 0x05,0x73,0xe0,0xd7,0xbd,0x0e,0x71,0xda, |
44 | 0x6d,0x90,0x92,0x9c,0x90,0xb4,0x9c,0x44, | 44 | 0xdb,0x21,0x25,0x39,0x21,0x69,0x38,0x89, |
45 | 0xb6,0x64,0x4a,0xa6,0x40,0x2a,0x7f,0x02, | 45 | 0x6c,0xc8,0x95,0x4c,0x80,0x54,0xfe,0x05, |
46 | 0xfd,0xf1,0xf3,0xdb,0xd7,0x27,0x0d,0x2d, | 46 | 0xfb,0xe3,0xe7,0xb7,0xae,0x4e,0x1a,0x5b, |
47 | 0xd1,0x13,0x19,0x95,0xaa,0x82,0x00,0xf3, | 47 | 0xa2,0x26,0x33,0x2b,0x55,0x04,0x01,0xe7, |
48 | 0xfd,0xd7,0xf3,0x0f,0xd5,0xdf,0x03,0x3d, | 48 | 0xfb,0xaf,0xe6,0x1f,0xab,0xbe,0x06,0x7b, |
49 | 0xf5,0x73,0xc0,0xd7,0x7d,0x0c,0xf1,0xd5, | 49 | 0xea,0xe7,0x81,0xae,0xfa,0x19,0xe3,0xab, |
50 | 0xdb,0x03,0x25,0xf5,0x23,0xc1,0x37,0x79, | 50 | 0xb6,0x06,0x4b,0xea,0x47,0x82,0x6e,0xf2, |
51 | 0x4c,0xe8,0x55,0x8e,0x02,0xdb,0xf1,0x27, | 51 | 0x99,0xd0,0xab,0x1c,0x05,0xb7,0xe2,0x4f, |
52 | 0xd9,0x2f,0x29,0x1d,0x09,0xb1,0xca,0x5b, | 52 | 0xb2,0x5e,0x52,0x3a,0x13,0x63,0x94,0xb6, |
53 | 0x42,0x24,0x73,0x26,0xd5,0x29,0x01,0x09, | 53 | 0x84,0x48,0xe6,0x4d,0xaa,0x52,0x02,0x13, |
54 | 0xf9,0xcb,0xeb,0x47,0x84,0x6e,0xe6,0x99, | 54 | 0xf3,0x97,0xd6,0x8f,0x08,0xdd,0xcd,0x33, |
55 | 0xa8,0xaa,0x0c,0x03,0xd7,0xf7,0x0f,0xcd, | 55 | 0x51,0x54,0x18,0x07,0xaf,0xee,0x1f,0x9b, |
56 | 0xdf,0x53,0x3c,0x15,0x77,0x80,0xce,0xfd, | 56 | 0xbe,0xa6,0x78,0x2a,0xef,0x01,0x9d,0xfa, |
57 | 0x59,0xf0,0x2b,0xdf,0x07,0x3d,0xed,0x73, | 57 | 0xb3,0xe0,0x57,0xbe,0x0e,0x7b,0xda,0xe7, |
58 | 0x90,0xd6,0x9d,0x08,0xb1,0xcc,0x5b,0x56, | 58 | 0x21,0xad,0x3a,0x11,0x63,0x98,0xb6,0xac, |
59 | 0x24,0x0b,0x27,0xc5,0x2f,0x61,0x1c,0xb9, | 59 | 0x48,0x16,0x4f,0x8a,0x5e,0xc2,0x39,0x73, |
60 | 0xb4,0x6a,0x46,0x82,0x68,0xf2,0x8d,0xd0, | 60 | 0x68,0xd4,0x8d,0x04,0xd1,0xe5,0x1b,0xa1, |
61 | 0xd3,0x1d,0x15,0xb1,0x82,0x5a,0xf2,0x21, | 61 | 0xa6,0x3a,0x2b,0x63,0x04,0xb5,0xe4,0x43, |
62 | 0xd3,0x3b,0x15,0x65,0x80,0xa2,0xfc,0x31, | 62 | 0xa6,0x76,0x2a,0xcb,0x01,0x45,0xf8,0x63, |
63 | 0xf7,0x5b,0xcc,0x27,0x57,0x2c,0x0d,0x17, | 63 | 0xee,0xb7,0x98,0x4e,0xae,0x58,0x1a,0x2f, |
64 | 0xd1,0x8f,0x1a,0xdd,0xa1,0x32,0x39,0x53, | 64 | 0xa3,0x1e,0x35,0xbb,0x42,0x64,0x72,0xa6, |
65 | 0x68,0x14,0x8f,0x84,0xde,0xe5,0x39,0xa1, | 65 | 0xd0,0x29,0x1f,0x09,0xbd,0xca,0x73,0x42, |
66 | 0x6a,0x38,0x83,0x6c,0xf4,0x95,0xc4,0x83, | 66 | 0xd4,0x71,0x06,0xd9,0xe9,0x2b,0x89,0x06, |
67 | 0x64,0xf4,0xa5,0xc4,0x23,0x67,0x34,0xad, | 67 | 0xc9,0xe9,0x4b,0x88,0x46,0xce,0x69,0x5a, |
68 | 0x44,0x10,0x67,0x9e,0xae,0xb8,0x18,0x6f, | 68 | 0x88,0x20,0xcf,0x3d,0x5d,0x70,0x30,0xdf, |
69 | 0xae,0x9e,0x18,0xbb,0xac,0x66,0x16,0xab, | 69 | 0x5d,0x3c,0x31,0x77,0x58,0xcc,0x2d,0x57, |
70 | 0x88,0x06,0xcf,0xe9,0x5f,0x88,0x3e,0xcf, | 70 | 0x10,0x0d,0x9f,0xd2,0xbf,0x10,0x7d,0x9e, |
71 | 0x79,0x5c,0xe8,0x35,0x8f,0x42,0xdc,0x71, | 71 | 0xf2,0xb9,0xd0,0x6b,0x1e,0x85,0xb8,0xe2, |
72 | 0x36,0xd9,0x49,0x28,0x49,0x0e,0x49,0xda, | 72 | 0x6d,0xb2,0x92,0x50,0x92,0x1c,0x93,0xb4, |
73 | 0x4b,0x22,0x45,0x32,0x61,0x52,0xb8,0x10, | 73 | 0x96,0x44,0x8a,0x64,0xc2,0xa5,0x70,0x20, |
74 | 0x6f,0x9e,0x9e,0xb8,0xb8,0x6c,0x6e,0x96, | 74 | 0xdf,0x3d,0x3d,0x71,0x70,0xd8,0xdd,0x2d, |
75 | 0x98,0x88,0xac,0xcc,0x15,0x57,0x80,0x0e, | 75 | 0x31,0x11,0x59,0x98,0x2a,0xaf,0x00,0x1d, |
76 | 0xff,0xd9,0xff,0x2b,0xfd,0x07,0xf1,0xef, | 76 | 0xff,0xb3,0xfe,0x57,0xfa,0x0f,0xe3,0xdf, |
77 | 0xdb,0x9f,0x26,0xbd,0x28,0x71,0x0e,0xd9, | 77 | 0xb7,0x3e,0x4d,0x7a,0x50,0xe2,0x1d,0xb3, |
78 | 0xd9,0x2b,0x29,0x05,0x09,0xe1,0xcb,0xbb, | 78 | 0xb2,0x56,0x52,0x0a,0x13,0xc3,0x97,0x76, |
79 | 0x46,0x64,0x6a,0xa6,0x80,0x28,0xff,0x0d, | 79 | 0x8c,0xc8,0xd5,0x4d,0x00,0x51,0xfe,0x1b, |
80 | 0xfd,0xd3,0xf3,0x17,0xd5,0x8f,0x02,0xdd, | 80 | 0xfb,0xa7,0xe6,0x2f,0xab,0x1e,0x05,0xbb, |
81 | 0xf1,0x33,0xd9,0x57,0x28,0x0d,0x0f,0xd1, | 81 | 0xe2,0x67,0xb2,0xae,0x50,0x1a,0x1f,0xa3, |
82 | 0xdf,0x1b,0x3d,0xa5,0x72,0x20,0xd3,0x3d, | 82 | 0xbe,0x36,0x7b,0x4a,0xe4,0x41,0xa6,0x7a, |
83 | 0x15,0x71,0x80,0xda,0xfd,0x21,0xf1,0x3b, | 83 | 0x2a,0xe3,0x01,0xb5,0xfa,0x43,0xe2,0x77, |
84 | 0xd9,0x67,0x28,0xad,0x0c,0x11,0xd7,0x9b, | 84 | 0xb2,0xce,0x51,0x5a,0x18,0x23,0xaf,0x36, |
85 | 0x0e,0xa5,0xd8,0x23,0x2f,0x35,0x1d,0x41, | 85 | 0x1d,0x4b,0xb0,0x46,0x5e,0x6a,0x3a,0x83, |
86 | 0xb0,0x7a,0x5e,0xe2,0x39,0xb3,0x6a,0x54, | 86 | 0x60,0xf4,0xbd,0xc4,0x73,0x66,0xd4,0xa9, |
87 | 0x82,0x04,0xf3,0xe5,0xd7,0xa3,0x0e,0x35, | 87 | 0x04,0x09,0xe7,0xcb,0xaf,0x46,0x1c,0x6b, |
88 | 0xdb,0x43,0x24,0x75,0x26,0xc1,0x29,0x79, | 88 | 0xb6,0x86,0x48,0xea,0x4d,0x82,0x52,0xf2, |
89 | 0x08,0xe9,0xcd,0x8b,0x52,0xc4,0x11,0x67, | 89 | 0x11,0xd3,0x9b,0x16,0xa5,0x88,0x22,0xcf, |
90 | 0x98,0xae,0xac,0x18,0x17,0xaf,0x8e,0x1e, | 90 | 0x31,0x5d,0x58,0x30,0x2f,0x5f,0x1c,0x3d, |
91 | 0xdb,0xb9,0x26,0x69,0x2a,0x89,0x00,0xc9, | 91 | 0xb7,0x72,0x4c,0xd2,0x55,0x12,0x01,0x93, |
92 | 0xfd,0x4b,0xf0,0x47,0xde,0x6f,0x3a,0x9d, | 92 | 0xfa,0x97,0xe0,0x8f,0xbc,0xde,0x75,0x3a, |
93 | 0x60,0xb0,0xbc,0x5c,0x76,0x36,0xcb,0x49, | 93 | 0xc1,0x61,0x78,0xb8,0xec,0x6d,0x96,0x92, |
94 | 0x44,0x48,0x66,0x4e,0xaa,0x58,0x02,0x2f, | 94 | 0x88,0x90,0xcc,0x9d,0x54,0xb0,0x04,0x5f, |
95 | 0xf3,0x1f,0xd5,0xbf,0x02,0x7d,0xf2,0xf3, | 95 | 0xe6,0x3f,0xab,0x7e,0x04,0xfb,0xe5,0xe7, |
96 | 0xd1,0xd7,0x1b,0x0d,0xa5,0xd2,0x23,0x13, | 96 | 0xa3,0xae,0x36,0x1b,0x4b,0xa4,0x46,0x26, |
97 | 0x35,0x95,0x42,0x80,0x70,0xfe,0xdd,0xf9, | 97 | 0x6b,0x2a,0x85,0x00,0xe1,0xfd,0xbb,0xf2, |
98 | 0x33,0xe9,0x57,0x88,0x0e,0xcf,0xd9,0x5f, | 98 | 0x67,0xd2,0xaf,0x10,0x1d,0x9f,0xb2,0xbe, |
99 | 0x28,0x3d,0x0f,0x71,0xdc,0xdb,0x35,0x25, | 99 | 0x50,0x7a,0x1e,0xe3,0xb9,0xb6,0x6a,0x4a, |
100 | 0x41,0x20,0x79,0x3e,0xe9,0x79,0x88,0xea, | 100 | 0x82,0x40,0xf2,0x7d,0xd2,0xf3,0x11,0xd5, |
101 | 0xcd,0x81,0x52,0xf8,0x11,0xef,0x9b,0x9e, | 101 | 0x9b,0x02,0xa5,0xf0,0x23,0xdf,0x37,0x3d, |
102 | 0xa6,0xb8,0x28,0x6f,0x0e,0x9d,0xd8,0xb3, | 102 | 0x4d,0x70,0x50,0xde,0x1d,0x3b,0xb1,0x66, |
103 | 0x2c,0x55,0x16,0x01,0x8b,0xfa,0xc7,0xe1, | 103 | 0x58,0xaa,0x2c,0x03,0x17,0xf5,0x8f,0xc2, |
104 | 0x6f,0xb8,0x9e,0x6c,0xba,0x94,0x60,0x86, | 104 | 0xdf,0x71,0x3c,0xd9,0x75,0x28,0xc1,0x0d, |
105 | 0xbc,0xe8,0x75,0x8e,0xc2,0xd9,0x71,0x28, | 105 | 0x79,0xd0,0xeb,0x1d,0x85,0xb2,0xe2,0x51, |
106 | 0xd9,0x0d,0x29,0xd1,0x0b,0x19,0xc5,0xab, | 106 | 0xb2,0x1a,0x53,0xa2,0x16,0x33,0x8b,0x56, |
107 | 0x62,0x04,0xb3,0xe4,0x57,0xa6,0x0e,0x2b, | 107 | 0xc4,0x09,0x67,0xc8,0xaf,0x4c,0x1c,0x57, |
108 | 0xdb,0x07,0x25,0xed,0x23,0x91,0x36,0x99, | 108 | 0xb6,0x0e,0x4b,0xda,0x47,0x22,0x6d,0x32, |
109 | 0x48,0xa8,0x4c,0x0e,0x57,0xda,0x0f,0x23, | 109 | 0x91,0x50,0x98,0x1c,0xaf,0xb4,0x1e,0x47, |
110 | 0xdd,0x37,0x31,0x4d,0x58,0x50,0x2e,0x1f, | 110 | 0xba,0x6e,0x62,0x9a,0xb0,0xa0,0x5c,0x3e, |
111 | 0x1b,0xbd,0xa6,0x72,0x2a,0xd3,0x01,0x15, | 111 | 0x37,0x7b,0x4c,0xe4,0x55,0xa6,0x02,0x2b, |
112 | 0xf9,0x83,0xea,0xf7,0x81,0xce,0xfb,0x59, | 112 | 0xf3,0x07,0xd5,0xef,0x03,0x9d,0xf6,0xb3, |
113 | 0xe4,0x2b,0xa7,0x06,0x2d,0xeb,0x13,0x85, | 113 | 0xc8,0x57,0x4e,0x0c,0x5b,0xd6,0x27,0x0b, |
114 | 0x96,0xe2,0x89,0xb0,0xca,0x5d,0x42,0x30, | 114 | 0x2d,0xc5,0x13,0x61,0x94,0xba,0x84,0x60, |
115 | 0x73,0x5e,0xd4,0x39,0x07,0x69,0xec,0x8b, | 115 | 0xe6,0xbd,0xa8,0x72,0x0e,0xd3,0xd9,0x17, |
116 | 0x94,0xc6,0x85,0x68,0xe0,0x8d,0xbc,0xd2, | 116 | 0x29,0x8d,0x0a,0xd1,0xc1,0x1b,0x79,0xa4, |
117 | 0x75,0x12,0xc1,0x91,0x7a,0x98,0xe0,0xad, | 117 | 0xea,0x25,0x83,0x22,0xf5,0x31,0xc1,0x5b, |
118 | 0xbc,0x12,0x77,0x92,0xce,0x91,0x58,0x98, | 118 | 0x78,0x24,0xef,0x25,0x9d,0x22,0xb1,0x30, |
119 | 0x2c,0xaf,0x14,0x1d,0x87,0xb2,0xee,0x51, | 119 | 0x59,0x5e,0x28,0x3b,0x0f,0x65,0xdc,0xa3, |
120 | 0x9a,0x1a,0xa3,0xa0,0x36,0x3f,0x4b,0x7c, | 120 | 0x34,0x35,0x47,0x40,0x6c,0x7e,0x96,0xf8, |
121 | 0x44,0xf6,0x65,0xca,0xa3,0x40,0x34,0x7f, | 121 | 0x89,0xec,0xcb,0x95,0x46,0x80,0x68,0xfe, |
122 | 0x46,0xfc,0x69,0xf6,0x8b,0xc8,0xc7,0x4d, | 122 | 0x8d,0xf8,0xd3,0xed,0x17,0x91,0x8e,0x9a, |
123 | 0x6c,0x50,0x96,0x1c,0x8b,0xb4,0xc6,0x45, | 123 | 0xd8,0xa1,0x2c,0x39,0x17,0x69,0x8c,0x8a, |
124 | 0x6a,0x60,0x82,0xbc,0xf0,0x75,0xde,0xc3, | 124 | 0xd4,0xc1,0x05,0x79,0xe0,0xeb,0xbd,0x86, |
125 | 0x39,0x75,0x68,0xc0,0x8d,0x7c,0xd0,0xf5, | 125 | 0x72,0xea,0xd1,0x81,0x1a,0xf9,0xa1,0xea, |
126 | 0x1d,0xc1,0xb3,0x7a,0x54,0xe2,0x05,0xb3, | 126 | 0x3b,0x83,0x66,0xf4,0xa9,0xc4,0x0b,0x67, |
127 | 0xe2,0x57,0xb2,0x0e,0x53,0xda,0x17,0x23, | 127 | 0xc4,0xaf,0x64,0x1c,0xa7,0xb4,0x2e,0x47, |
128 | 0x8d,0x36,0xd1,0x49,0x18,0x49,0xae,0x4a, | 128 | 0x1a,0x6d,0xa2,0x92,0x30,0x93,0x5c,0x94, |
129 | 0x1a,0x43,0xa2,0x76,0x32,0xcb,0x51,0x44, | 129 | 0x34,0x87,0x44,0xec,0x65,0x96,0xa2,0x88, |
130 | 0x18,0x67,0xae,0xae,0x18,0x1b,0xaf,0xa6, | 130 | 0x30,0xcf,0x5d,0x5c,0x30,0x37,0x5f,0x4c, |
131 | 0x1e,0x2b,0xbb,0x06,0x65,0xea,0xa3,0x80, | 131 | 0x3c,0x57,0x76,0x0c,0xcb,0xd5,0x47,0x00, |
132 | 0x36,0xff,0x49,0xfc,0x4b,0xf6,0x47,0xca, | 132 | 0x6d,0xfe,0x93,0xf8,0x97,0xec,0x8f,0x94, |
133 | 0x6f,0x42,0x9c,0x70,0xb6,0xdc,0x49,0x36, | 133 | 0xde,0x85,0x38,0xe1,0x6d,0xb8,0x92,0x6c, |
134 | 0x49,0x4a,0x48,0x42,0x4e,0x72,0x5a,0xd2, | 134 | 0x92,0x94,0x90,0x84,0x9c,0xe4,0xb5,0xa4, |
135 | 0x21,0x13,0x39,0x95,0x6a,0x80,0x80,0xfc, | 135 | 0x42,0x26,0x73,0x2a,0xd5,0x01,0x01,0xf9, |
136 | 0xfd,0xf5,0xf3,0xc3,0xd7,0x77,0x0c,0xcd, | 136 | 0xfb,0xeb,0xe7,0x87,0xae,0xee,0x19,0x9b, |
137 | 0xd5,0x53,0x00,0x15,0xff,0x83,0xfe,0xf7, | 137 | 0xaa,0xa6,0x00,0x2b,0xff,0x07,0xfd,0xef, |
138 | 0xf9,0xcf,0xeb,0x5f,0x84,0x3e,0xe7,0x79, | 138 | 0xf3,0x9f,0xd6,0xbf,0x08,0x7d,0xce,0xf3, |
139 | 0xac,0xea,0x15,0x83,0x82,0xf6,0xf1,0xc9, | 139 | 0x59,0xd4,0x2b,0x07,0x05,0xed,0xe3,0x93, |
140 | 0xdb,0x4b,0x24,0x45,0x26,0x61,0x2a,0xb9, | 140 | 0xb6,0x96,0x48,0x8a,0x4c,0xc2,0x55,0x72, |
141 | 0x00,0x69,0xfe,0x8b,0xf8,0xc7,0xed,0x6f, | 141 | 0x00,0xd3,0xfd,0x17,0xf1,0x8f,0xda,0xdf, |
142 | 0x90,0x9e,0x9c,0xb8,0xb4,0x6c,0x46,0x96, | 142 | 0x21,0x3d,0x39,0x71,0x68,0xd8,0x8d,0x2c, |
143 | 0x68,0x8a,0x8c,0xc0,0xd5,0x7d,0x00,0xf1, | 143 | 0xd1,0x15,0x19,0x81,0xaa,0xfa,0x01,0xe3, |
144 | 0xfd,0xdb,0xf3,0x27,0xd5,0x2f,0x01,0x1d, | 144 | 0xfb,0xb7,0xe6,0x4f,0xaa,0x5e,0x02,0x3b, |
145 | 0xf9,0xb3,0xea,0x57,0x82,0x0e,0xf3,0xd9, | 145 | 0xf3,0x67,0xd4,0xaf,0x04,0x1d,0xe7,0xb3, |
146 | 0xd7,0x2b,0x0d,0x05,0xd1,0xe3,0x1b,0xb5, | 146 | 0xae,0x56,0x1a,0x0b,0xa3,0xc6,0x37,0x6b, |
147 | 0xa6,0x42,0x2a,0x73,0x02,0xd5,0xf1,0x03, | 147 | 0x4c,0x84,0x54,0xe6,0x05,0xab,0xe2,0x07, |
148 | 0xd9,0xf7,0x2b,0xcd,0x07,0x51,0xec,0x1b, | 148 | 0xb3,0xee,0x57,0x9a,0x0e,0xa3,0xd8,0x37, |
149 | 0x97,0xa6,0x8e,0x28,0xdb,0x0d,0x25,0xd1, | 149 | 0x2f,0x4d,0x1c,0x51,0xb6,0x1a,0x4b,0xa2, |
150 | 0x23,0x19,0x35,0xa9,0x42,0x08,0x73,0xce, | 150 | 0x46,0x32,0x6b,0x52,0x84,0x10,0xe7,0x9d, |
151 | 0xd7,0x59,0x0c,0x29,0xd7,0x0b,0x0d,0xc5, | 151 | 0xae,0xb2,0x18,0x53,0xae,0x16,0x1b,0x8b, |
152 | 0xd3,0x63,0x14,0xb5,0x84,0x42,0xe6,0x71, | 152 | 0xa6,0xc6,0x29,0x6b,0x08,0x85,0xcc,0xe3, |
153 | 0xaa,0xda,0x01,0x23,0xf9,0x37,0xe9,0x4f, | 153 | 0x55,0xb4,0x02,0x47,0xf2,0x6f,0xd2,0x9f, |
154 | 0x88,0x5e,0xce,0x39,0x5b,0x68,0x24,0x8f, | 154 | 0x10,0xbd,0x9c,0x72,0xb6,0xd0,0x49,0x1e, |
155 | 0x24,0xdd,0x25,0x31,0x21,0x59,0x38,0x29, | 155 | 0x49,0xba,0x4a,0x62,0x42,0xb2,0x70,0x52, |
156 | 0x6f,0x08,0x9d,0xcc,0xb3,0x54,0x54,0x06, | 156 | 0xde,0x11,0x3b,0x99,0x66,0xa8,0xa8,0x0c, |
157 | 0x07,0xeb,0xef,0x87,0x9e,0xee,0xb9,0x98, | 157 | 0x0f,0xd7,0xdf,0x0f,0x3d,0xdd,0x73,0x30, |
158 | 0x6a,0xae,0x80,0x18,0xff,0xad,0xfe,0x13, | 158 | 0xd5,0x5d,0x00,0x31,0xff,0x5b,0xfc,0x27, |
159 | 0xfb,0x97,0xe6,0x8f,0xa8,0xde,0x0d,0x3b, | 159 | 0xf7,0x2f,0xcd,0x1f,0x51,0xbc,0x1a,0x77, |
160 | 0xd1,0x67,0x18,0xad,0xac,0x12,0x17,0x93, | 160 | 0xa2,0xce,0x31,0x5b,0x58,0x24,0x2f,0x27, |
161 | 0x8e,0x96,0xd8,0x89,0x2c,0xc9,0x15,0x49, | 161 | 0x1d,0x2d,0xb1,0x12,0x59,0x92,0x2a,0x93, |
162 | 0x80,0x4a,0xfe,0x41,0xfa,0x7b,0xe2,0xe7, | 162 | 0x00,0x95,0xfc,0x83,0xf4,0xf7,0xc5,0xcf, |
163 | 0xb1,0xae,0x5a,0x1a,0x23,0xa3,0x36,0x35, | 163 | 0x63,0x5c,0xb4,0x34,0x47,0x46,0x6c,0x6a, |
164 | 0x4b,0x40,0x44,0x7e,0x66,0xfa,0xa9,0xe0, | 164 | 0x96,0x80,0x88,0xfc,0xcd,0xf5,0x53,0xc0, |
165 | 0x0b,0xbf,0xc6,0x7f,0x6a,0xfc,0x81,0xf4, | 165 | 0x17,0x7f,0x8c,0xfe,0xd5,0xf9,0x03,0xe9, |
166 | 0xfb,0xc5,0xe7,0x63,0xac,0xb6,0x14,0x4b, | 166 | 0xf7,0x8b,0xce,0xc7,0x59,0x6c,0x28,0x97, |
167 | 0x86,0x46,0xea,0x69,0x82,0x8a,0xf0,0xc1, | 167 | 0x0c,0x8d,0xd4,0xd3,0x05,0x15,0xe1,0x83, |
168 | 0xdd,0x7b,0x30,0xe5,0x5d,0xa0,0x32,0x3f, | 168 | 0xba,0xf6,0x61,0xca,0xbb,0x40,0x64,0x7e, |
169 | 0x53,0x7c,0x14,0xf7,0x85,0xce,0xe3,0x59, | 169 | 0xa6,0xf8,0x29,0xef,0x0b,0x9d,0xc6,0xb3, |
170 | 0xb4,0x2a,0x47,0x02,0x6d,0xf2,0x93,0xd0, | 170 | 0x68,0x54,0x8e,0x04,0xdb,0xe5,0x27,0xa1, |
171 | 0x97,0x1c,0x8d,0xb4,0xd2,0x45,0x12,0x61, | 171 | 0x2e,0x39,0x1b,0x69,0xa4,0x8a,0x24,0xc3, |
172 | 0x92,0xba,0x90,0x60,0x9e,0xbc,0xb8,0x74, | 172 | 0x25,0x75,0x20,0xc1,0x3d,0x79,0x70,0xe8, |
173 | 0x6e,0xc6,0x99,0x68,0xa8,0x8c,0x0c,0xd7, | 173 | 0xdd,0x8d,0x32,0xd1,0x51,0x18,0x19,0xaf, |
174 | 0xd5,0x0f,0x01,0xdd,0xfb,0x33,0xe5,0x57, | 174 | 0xaa,0x1e,0x03,0xbb,0xf6,0x67,0xca,0xaf, |
175 | 0xa0,0x0e,0x3f,0xdb,0x7f,0x24,0xfd,0x25, | 175 | 0x40,0x1c,0x7f,0xb6,0xfe,0x49,0xfa,0x4b, |
176 | 0xf1,0x23,0xd9,0x37,0x29,0x4d,0x08,0x51, | 176 | 0xe2,0x47,0xb2,0x6e,0x52,0x9a,0x10,0xa3, |
177 | 0xce,0x1b,0x5b,0xa4,0x26,0x27,0x2b,0x2d, | 177 | 0x9c,0x36,0xb7,0x48,0x4c,0x4e,0x56,0x5a, |
178 | 0x05,0x11,0xe1,0x9b,0xba,0xa6,0x60,0x2a, | 178 | 0x0a,0x23,0xc3,0x37,0x75,0x4c,0xc0,0x55, |
179 | 0xbf,0x00,0x7d,0xfe,0xf3,0xf9,0xd7,0xeb, | 179 | 0x7e,0x00,0xfb,0xfd,0xe7,0xf3,0xaf,0xd6, |
180 | 0x0f,0x85,0xde,0xe3,0x39,0xb5,0x6a,0x40, | 180 | 0x1f,0x0b,0xbd,0xc6,0x73,0x6a,0xd4,0x81, |
181 | 0x82,0x7c,0xf2,0xf5,0xd1,0xc3,0x1b,0x75, | 181 | 0x04,0xf9,0xe5,0xeb,0xa3,0x86,0x36,0xeb, |
182 | 0xa4,0xc2,0x25,0x73,0x20,0xd5,0x3d,0x01, | 182 | 0x49,0x84,0x4a,0xe6,0x41,0xaa,0x7a,0x02, |
183 | 0x71,0xf8,0xdb,0xed,0x27,0x91,0x2e,0x99, | 183 | 0xe3,0xf1,0xb7,0xda,0x4f,0x22,0x5d,0x32, |
184 | 0x18,0xa9,0xac,0x0a,0x17,0xc3,0x8f,0x76, | 184 | 0x31,0x53,0x58,0x14,0x2f,0x87,0x1e,0xed, |
185 | 0xdc,0xc9,0x35,0x49,0x40,0x48,0x7e,0x4e, | 185 | 0xb9,0x92,0x6a,0x92,0x80,0x90,0xfc,0x9d, |
186 | 0xfa,0x59,0xe2,0x2b,0xb3,0x06,0x55,0xe2, | 186 | 0xf4,0xb3,0xc4,0x57,0x66,0x0c,0xab,0xd4, |
187 | 0x03,0x83,0xf6,0xf7,0xc9,0xcf,0x4b,0x5c, | 187 | 0x07,0x07,0xed,0xef,0x93,0x9e,0x96,0xb8, |
188 | 0x04,0x3e,0x67,0x4e,0xac,0x60,0x17,0x7f, | 188 | 0x88,0x6c,0xce,0x95,0x58,0x80,0x2c,0xff, |
189 | 0x80,0xfe,0xc1,0xf9,0x7b,0xe8,0xe7,0x87, | 189 | 0x15,0xfd,0x83,0xf2,0xf7,0xd1,0xcf,0x1b, |
190 | 0xae,0xc2,0x19,0x93,0xfc,0x96,0x08,0x8f, | 190 | 0x5d,0xa4,0x32,0x27,0x53,0x2c,0x15,0x17, |
191 | 0xc0,0xe7,0xfc,0x2c,0xf0,0x1d,0xcc,0xc3, | 191 | 0x81,0x8e,0xfa,0xd9,0xe1,0x2b,0xb9,0x06, |
192 | 0x9e,0x70,0x00,0xc0,0x63,0x7f,0x54,0x78, | 192 | 0x69,0xea,0x8b,0x80,0xc6,0xfd,0x69,0xf0, |
193 | 0x40,0xfe,0x61,0x9b,0xf3,0x40,0x64,0x3f, | 193 | 0x8b,0xdc,0xc7,0x35,0x6d,0x40,0x90,0x7c, |
194 | 0x0f,0xf8,0x2c,0xf3,0x3f,0x99,0x83,0x2a, | 194 | 0x9e,0xf4,0xb9,0xc4,0x6b,0x66,0x84,0xa8, |
195 | 0x79,0x07,0xcb,0xe1,0x9f,0xcc,0xce,0x60, | 195 | 0xe4,0x0d,0xa7,0xd2,0x2f,0x13,0x1d,0x95, |
196 | 0x6c,0x00,0x84,0x7c,0x0f,0xf5,0xe8,0xcf, | 196 | 0xb2,0x82,0x50,0xf2,0x1d,0xd3,0xb3,0x16, |
197 | 0x15,0x66,0x80,0xb0,0xf8,0x5d,0xf4,0x33, | 197 | 0x55,0x8a,0x02,0xc3,0xf1,0x77,0xd8,0xcf, |
198 | 0x8a,0x57,0x44,0x0c,0x67,0xd6,0xaf,0x08, | 198 | 0x2d,0x5d,0x10,0x31,0x9f,0x5a,0xbc,0x20, |
199 | 0x1f,0xcf,0xb3,0x5e,0x54,0x3a,0x07,0x63, | 199 | 0x77,0x3e,0xcd,0x79,0x50,0xe8,0x1d,0x8f, |
200 | 0xec,0xb7,0x94,0x4e,0x86,0x58,0xea,0x2d, | 200 | 0xb2,0xde,0x51,0x3a,0x19,0x63,0xa8,0xb6, |
201 | 0x83,0x12,0xf5,0x91,0xc2,0x9b,0x70,0xa4, | 201 | 0x0c,0x4b,0xd6,0x47,0x0a,0x6d,0xc2,0x93, |
202 | 0xdc,0x25,0x37,0x21,0x4d,0x38,0x51,0x6e, | 202 | 0x70,0x94,0xdc,0x85,0x34,0xe1,0x45,0xb8, |
203 | 0x18,0x9b,0xac,0xa6,0x14,0x2b,0x87,0x06, | 203 | 0x62,0x6e,0xb2,0x98,0x50,0xae,0x1c,0x1b, |
204 | 0xed,0xe9,0x93,0x8a,0x96,0xc0,0x89,0x7c, | 204 | 0xb7,0xa6,0x4e,0x2a,0x5b,0x02,0x25,0xf3, |
205 | 0xc8,0xf5,0x4d,0xc0,0x53,0x7e,0x14,0xfb, | 205 | 0x23,0xd5,0x37,0x01,0x4d,0xf8,0x53,0xee, |
206 | 0x85,0xe6,0xe3,0xa9,0xb6,0x0a,0x4b,0xc2, | 206 | 0x17,0x9b,0x8e,0xa6,0xd8,0x29,0x2f,0x09, |
207 | 0x47,0x72,0x6c,0xd2,0x95,0x10,0x81,0x9c, | 207 | 0x1d,0xc9,0xb3,0x4a,0x54,0x42,0x06,0x73, |
208 | 0xfa,0xb5,0xe0,0x43,0xbe,0x76,0x7a,0xca, | 208 | 0xea,0xd7,0x81,0x0e,0xf9,0xd9,0xeb,0x2b, |
209 | 0xe1,0x41,0xb8,0x7a,0x6e,0xe2,0x99,0xb0, | 209 | 0x85,0x06,0xe1,0xe9,0xbb,0x8a,0x66,0xc2, |
210 | 0xaa,0x5c,0x02,0x37,0xf3,0x4f,0xd4,0x5f, | 210 | 0xa9,0x70,0x08,0xdf,0xcd,0x3f,0x51,0x7c, |
211 | 0x06,0x3d,0xeb,0x73,0x84,0xd6,0xe5,0x09, | 211 | 0x18,0xf7,0xad,0xce,0x13,0x5b,0x94,0x26, |
212 | 0xa1,0xca,0x3b,0x43,0x64,0x74,0xa6,0xc4, | 212 | 0x87,0x28,0xed,0x0d,0x91,0xd2,0x9b,0x10, |
213 | 0x29,0x67,0x08,0xad,0xcc,0x13,0x57,0x94, | 213 | 0xa5,0x9c,0x22,0xb7,0x30,0x4d,0x5e,0x50, |
214 | 0x0e,0x87,0xd8,0xef,0x2d,0x9d,0x12,0xb1, | 214 | 0x3a,0x1f,0x63,0xbc,0xb6,0x74,0x4a,0xc6, |
215 | 0x90,0x5a,0x9e,0x20,0xbb,0x3c,0x65,0x76, | 215 | 0x41,0x6a,0x78,0x82,0xec,0xf1,0x95,0xda, |
216 | 0xa0,0xc8,0x3d,0x4f,0x70,0x5c,0xde,0x35, | 216 | 0x83,0x20,0xf5,0x3d,0xc1,0x73,0x78,0xd4, |
217 | 0x3b,0x41,0x64,0x78,0xa6,0xec,0x29,0x97, | 217 | 0xed,0x05,0x91,0xe2,0x9b,0xb0,0xa6,0x5c, |
218 | 0x0a,0x8d,0xc0,0xd3,0x7d,0x14,0xf1,0x85, | 218 | 0x2a,0x37,0x03,0x4d,0xf4,0x53,0xc6,0x17, |
219 | 0xda,0xe3,0x21,0xb5,0x3a,0x41,0x62,0x78, | 219 | 0x6b,0x8c,0x86,0xd4,0xe9,0x05,0x89,0xe2, |
220 | 0xb2,0xec,0x51,0x96,0x1a,0x8b,0xa0,0xc6, | 220 | 0xcb,0xb1,0x46,0x58,0x6a,0x2e,0x83,0x18, |
221 | 0x3d,0x6b,0x70,0x84,0xdc,0xe5,0x35,0xa1, | 221 | 0xf5,0xad,0xc2,0x13,0x73,0x94,0xd6,0x85, |
222 | 0x42,0x38,0x73,0x6e,0xd4,0x99,0x04,0xa9, | 222 | 0x08,0xe1,0xcd,0xbb,0x52,0x64,0x12,0xa7, |
223 | 0xe4,0x0b,0xa7,0xc6,0x2f,0x6b,0x1c,0x85, | 223 | 0x90,0x2e,0x9f,0x18,0xbd,0xac,0x72,0x16, |
224 | 0xb4,0xe2,0x45,0xb2,0x62,0x52,0xb2,0x10, | 224 | 0xd3,0x89,0x16,0xc9,0x89,0x4a,0xc8,0x41, |
225 | 0x53,0x9e,0x16,0xbb,0x88,0x66,0xce,0xa9, | 225 | 0x4e,0x78,0x5a,0xee,0x21,0x9b,0x3a,0xa5, |
226 | 0x58,0x08,0x2f,0xcf,0x1f,0x5d,0xbc,0x32, | 226 | 0x60,0x20,0xbf,0x3c,0x7d,0x76,0xf0,0xc9, |
227 | 0x77,0x52,0xcc,0x11,0x57,0x98,0x0e,0xaf, | 227 | 0xdd,0x4b,0x30,0x45,0x5e,0x60,0x3a,0xbf, |
228 | 0xd8,0x1f,0x2f,0xbd,0x1e,0x71,0xba,0xda, | 228 | 0x60,0x7c,0xbe,0xf4,0x79,0xc6,0xeb,0x69, |
229 | 0x61,0x22,0xb9,0x30,0x69,0x5e,0x88,0x38, | 229 | 0x84,0x8a,0xe4,0xc1,0xa5,0x7a,0x20,0xe3, |
230 | 0xcf,0x6d,0x5c,0x90,0x34,0x9f,0x44,0xbc, | 230 | 0x3d,0xb5,0x72,0x40,0xd2,0x7d,0x12,0xf1, |
231 | 0x64,0x76,0xa6,0xc8,0x29,0x4f,0x08,0x5d, | 231 | 0x91,0xda,0x9b,0x20,0xa5,0x3c,0x21,0x77, |
232 | 0xce,0x33,0x5b,0x54,0x24,0x07,0x27,0xed, | 232 | 0x38,0xcd,0x6d,0x50,0x90,0x1c,0x9f,0xb4, |
233 | 0x2f,0x91,0x1e,0x99,0xb8,0xaa,0x6c,0x02, | 233 | 0xbe,0x44,0x7a,0x66,0xe2,0xa9,0xb0,0x0a, |
234 | 0x97,0xf0,0x8f,0xdc,0xdf,0x35,0x3d,0x41, | 234 | 0x5f,0xc2,0x3f,0x73,0x7c,0xd4,0xf5,0x05, |
235 | 0x70,0x78,0xde,0xed,0x39,0x91,0x6a,0x98, | 235 | 0xc1,0xe3,0x7b,0xb4,0xe6,0x45,0xaa,0x62, |
236 | 0x80,0xac,0xfc,0x15,0xf7,0x83,0xce,0xf7, | 236 | 0x02,0xb3,0xf0,0x57,0xde,0x0f,0x3b,0xdd, |
237 | 0x59,0xcc,0x2b,0x57,0x04,0x0d,0xe7,0xd3, | 237 | 0x67,0x30,0xad,0x5c,0x10,0x37,0x9f,0x4e, |
238 | 0xaf,0x16,0x1d,0x8b,0xb2,0xc6,0x51,0x6a, | 238 | 0xbc,0x58,0x76,0x2e,0xcb,0x19,0x45,0xa8, |
239 | 0x18,0x83,0xac,0xf6,0x15,0xcb,0x83,0x46, | 239 | 0x62,0x0e,0xb3,0xd8,0x57,0x2e,0x0d,0x1b, |
240 | 0xf4,0x69,0xc6,0x8b,0x68,0xc4,0x8d,0x64, | 240 | 0xd1,0xa7,0x1a,0x2d,0xa3,0x12,0x35,0x93, |
241 | 0xd0,0xa5,0x1c,0x21,0xb7,0x3a,0x4d,0x62, | 241 | 0x42,0x94,0x70,0x86,0xdc,0xe9,0x35,0x89, |
242 | 0x50,0xb2,0x1c,0x53,0xb6,0x16,0x4b,0x8a, | 242 | 0x42,0xc8,0x71,0x4e,0xd8,0x59,0x2e,0x29, |
243 | 0x46,0xc2,0x69,0x72,0x88,0xd0,0xcd,0x1d, | 243 | 0x1b,0x09,0xa5,0xca,0x23,0x43,0x34,0x75, |
244 | 0x51,0xb0,0x1a,0x5f,0xa2,0x3e,0x33,0x7b, | 244 | 0x46,0xc0,0x69,0x7e,0x88,0xf8,0xcd,0xed, |
245 | 0x54,0xe4,0x05,0xa7,0xe2,0x2f,0xb3,0x1e, | 245 | 0x53,0x90,0x16,0x9f,0x88,0xbe,0xcc,0x79, |
246 | 0x55,0xba,0x02,0x63,0xf2,0xb7,0xd0,0x4f, | 246 | 0x56,0xe8,0x09,0x8f,0xca,0xdf,0x41,0x3c, |
247 | 0x1e,0x5d,0xba,0x32,0x63,0x52,0xb4,0x10, | 247 | 0x79,0x76,0xe8,0xc9,0x8d,0x4a,0xd0,0x41, |
248 | 0x47,0x9e,0x6e,0xba,0x98,0x60,0xae,0xbc, | 248 | 0x1e,0x79,0xba,0xea,0x61,0x82,0xba,0xf0, |
249 | 0x18,0x77,0xae,0xce,0x19,0x5b,0xa8,0x26, | 249 | 0x61,0xde,0xbb,0x38,0x65,0x6e,0xa0,0x98, |
250 | 0x0f,0x2b,0xdd,0x07,0x31,0xed,0x5b,0x90, | 250 | 0x3c,0xaf,0x74,0x1c,0xc7,0xb5,0x6e,0x40, |
251 | 0x26,0x9f,0x28,0xbd,0x0c,0x71,0xd6,0xdb, | 251 | 0x9a,0x7c,0xa2,0xf4,0x31,0xc7,0x5b,0x6c, |
252 | 0x09,0x25,0xc9,0x23,0x49,0x34,0x49,0x46, | 252 | 0x24,0x97,0x24,0x8d,0x24,0xd1,0x25,0x19, |
253 | 0x48,0x6a,0x4e,0x82,0x58,0xf2,0x2d,0xd3, | 253 | 0x21,0xa9,0x3a,0x09,0x63,0xc8,0xb7,0x4c, |
254 | 0x13,0x15,0x95,0x82,0x82,0xf0,0xf1,0xdd, | 254 | 0x4c,0x56,0x56,0x0a,0x0b,0xc3,0xc7,0x77, |
255 | 0xdb,0x33,0x25,0x55,0x20,0x01,0x3f,0xf9, | 255 | 0x6c,0xcc,0x95,0x54,0x80,0x04,0xff,0xe5, |
256 | 0x7f,0xe8,0xff,0x8d,0xfe,0xd3,0xf9,0x17, | 256 | 0xff,0xa3,0xfe,0x37,0xfb,0x4f,0xe4,0x5f, |
257 | 0xe9,0x8f,0x8a,0xde,0xc1,0x39,0x79,0x68, | 257 | 0xa6,0x3e,0x2b,0x7b,0x04,0xe5,0xe5,0xa3, |
258 | 0xe8,0x8d,0x8c,0xd2,0xd5,0x11,0x01,0x99, | 258 | 0xa2,0x36,0x33,0x4b,0x54,0x44,0x06,0x67, |
259 | 0xfa,0xab,0xe0,0x07,0xbf,0xee,0x7f,0x9a, | 259 | 0xea,0xaf,0x80,0x1e,0xff,0xb9,0xfe,0x6b, |
260 | 0xfe,0xa1,0xf8,0x3b,0xef,0x67,0x9c,0xae, | 260 | 0xfa,0x87,0xe0,0xef,0xbd,0x9e,0x72,0xba, |
261 | 0xb4,0x18,0x47,0xae,0x6e,0x1a,0x9b,0xa0, | 261 | 0xd0,0x61,0x1e,0xb9,0xb8,0x6a,0x6e,0x82, |
262 | 0xa6,0x3c,0x2b,0x77,0x04,0xcd,0xe5,0x53, | 262 | 0x98,0xf0,0xad,0xdc,0x13,0x37,0x95,0x4e, |
263 | 0xa0,0x16,0x3f,0x8b,0x7e,0xc4,0xf9,0x65, | 263 | 0x80,0x58,0xfe,0x2d,0xfb,0x13,0xe5,0x97, |
264 | 0xe8,0xa3,0x8c,0x36,0xd7,0x49,0x0c,0x49, | 264 | 0xa2,0x8e,0x30,0xdb,0x5d,0x24,0x31,0x27, |
265 | 0xd6,0x4b,0x0a,0x45,0xc2,0x63,0x72,0xb4, | 265 | 0x59,0x2c,0x29,0x17,0x09,0x8d,0xca,0xd3, |
266 | 0xd0,0x45,0x1e,0x61,0xba,0xba,0x60,0x62, | 266 | 0x41,0x14,0x79,0x86,0xea,0xe9,0x81,0x8a, |
267 | 0xbe,0xb0,0x78,0x5e,0xee,0x39,0x9b,0x6a, | 267 | 0xfa,0xc1,0xe1,0x7b,0xb8,0xe6,0x6d,0xaa, |
268 | 0xa4,0x80,0x24,0xff,0x25,0xfd,0x23,0xf1, | 268 | 0x92,0x00,0x93,0xfc,0x97,0xf4,0x8f,0xc4, |
269 | 0x37,0xd9,0x4f,0x28,0x5d,0x0e,0x31,0xdb, | 269 | 0xdf,0x65,0x3c,0xa1,0x74,0x38,0xc7,0x6d, |
270 | 0x5b,0x24,0x25,0x27,0x21,0x2d,0x39,0x11, | 270 | 0x6c,0x90,0x94,0x9c,0x84,0xb4,0xe4,0x45, |
271 | 0x69,0x98,0x8a,0xac,0xc0,0x15,0x7f,0x80, | 271 | 0xa6,0x62,0x2a,0xb3,0x00,0x55,0xfe,0x03, |
272 | 0xfe,0xfd,0xf9,0xf3,0xeb,0xd7,0x87,0x0e, | 272 | 0xfb,0xf7,0xe7,0xcf,0xaf,0x5e,0x1c,0x3b, |
273 | 0xed,0xd9,0x93,0x2a,0x95,0x00,0x81,0xfc, | 273 | 0xb7,0x66,0x4c,0xaa,0x54,0x02,0x07,0xf3, |
274 | 0xfb,0xf5,0xe7,0xc3,0xaf,0x76,0x1c,0xcb, | 274 | 0xef,0xd7,0x9f,0x0e,0xbd,0xd8,0x73,0x2e, |
275 | 0xb5,0x46,0x40,0x6a,0x7e,0x82,0xf8,0xf1, | 275 | 0xd5,0x19,0x01,0xa9,0xfa,0x0b,0xe3,0xc7, |
276 | 0xed,0xdb,0x93,0x26,0x95,0x28,0x81,0x0c, | 276 | 0xb7,0x6e,0x4c,0x9a,0x54,0xa2,0x04,0x33, |
277 | 0xf9,0xd5,0xeb,0x03,0x85,0xf6,0xe3,0xc9, | 277 | 0xe7,0x57,0xac,0x0e,0x17,0xdb,0x8f,0x26, |
278 | 0xb7,0x4a,0x4c,0x42,0x56,0x72,0x0a,0xd3, | 278 | 0xdd,0x29,0x31,0x09,0x59,0xc8,0x2b,0x4f, |
279 | 0xc1,0x17,0x79,0x8c,0xea,0xd5,0x81,0x02, | 279 | 0x04,0x5d,0xe6,0x33,0xab,0x56,0x04,0x0b, |
280 | 0xf9,0xf1,0xeb,0xdb,0x87,0x26,0xed,0x29, | 280 | 0xe7,0xc7,0xaf,0x6e,0x1c,0x9b,0xb4,0xa6, |
281 | 0x91,0x0a,0x99,0xc0,0xab,0x7c,0x04,0xf7, | 281 | 0x44,0x2a,0x67,0x02,0xad,0xf0,0x13,0xdf, |
282 | 0xe5,0xcf,0xa3,0x5e,0x34,0x3b,0x47,0x64, | 282 | 0x97,0x3e,0x8d,0x78,0xd0,0xed,0x1d,0x91, |
283 | 0x6c,0xa6,0x94,0x28,0x87,0x0c,0xed,0xd5, | 283 | 0xb2,0x9a,0x50,0xa2,0x1c,0x33,0xb7,0x56, |
284 | 0x93,0x02,0x95,0xf0,0x83,0xdc,0xf7,0x35, | 284 | 0x4c,0x0a,0x57,0xc2,0x0f,0x73,0xdc,0xd7, |
285 | 0xcd,0x43,0x50,0x74,0x1e,0xc7,0xb9,0x6e, | 285 | 0x35,0x0d,0x41,0xd0,0x7b,0x1e,0xe5,0xb9, |
286 | 0x68,0x9a,0x8c,0xa0,0xd4,0x3d,0x07,0x71, | 286 | 0xa2,0x6a,0x32,0x83,0x50,0xf4,0x1d,0xc7, |
287 | 0xec,0xdb,0x95,0x26,0x81,0x28,0xf9,0x0d, | 287 | 0xb3,0x6e,0x54,0x9a,0x04,0xa3,0xe4,0x37, |
288 | 0xe9,0xd3,0x8b,0x16,0xc5,0x89,0x62,0xc8, | 288 | 0xa7,0x4e,0x2c,0x5b,0x16,0x25,0x8b,0x22, |
289 | 0xb1,0x4c,0x58,0x56,0x2e,0x0b,0x1b,0xc5, | 289 | 0xc5,0x31,0x61,0x58,0xb8,0x2c,0x6f,0x16, |
290 | 0xa7,0x62,0x2c,0xb3,0x14,0x55,0x86,0x02, | 290 | 0x9d,0x88,0xb2,0xcc,0x51,0x56,0x18,0x0b, |
291 | 0xeb,0xf1,0x87,0xda,0xef,0x21,0x9d,0x3a, | 291 | 0xaf,0xc6,0x1f,0x6b,0xbc,0x86,0x74,0xea, |
292 | 0xb1,0x60,0x58,0xbe,0x2c,0x7b,0x16,0xe5, | 292 | 0xc5,0x81,0x62,0xf8,0xb1,0xec,0x5b,0x96, |
293 | 0x89,0xa2,0xca,0x31,0x43,0x58,0x74,0x2e, | 293 | 0x26,0x8b,0x28,0xc5,0x0d,0x61,0xd0,0xbb, |
294 | 0xc7,0x19,0x6d,0xa8,0x92,0x0c,0x93,0xd4, | 294 | 0x1c,0x65,0xb6,0xa2,0x48,0x32,0x4f,0x52, |
295 | 0x97,0x04,0x8d,0xe4,0xd3,0xa5,0x16,0x21, | 295 | 0x5c,0x12,0x37,0x93,0x4e,0x94,0x58,0x86, |
296 | 0x8b,0x3a,0xc5,0x61,0x60,0xb8,0xbc,0x6c, | 296 | 0x2c,0xeb,0x15,0x85,0x82,0xe2,0xf1,0xb1, |
297 | 0x76,0x96,0xc8,0x89,0x4c,0xc8,0x55,0x4e, | 297 | 0xda,0x5b,0x22,0x25,0x33,0x21,0x55,0x38, |
298 | 0x00,0x5b,0xfe,0x27,0xfb,0x2f,0xe5,0x1f, | 298 | 0x01,0x6f,0xf8,0x9f,0xec,0xbf,0x94,0x7e, |
299 | 0xa1,0xbe,0x3a,0x7b,0x62,0xe4,0xb1,0xa4, | 299 | 0x86,0xf8,0xe9,0xed,0x8b,0x92,0xc6,0x91, |
300 | 0x5a,0x26,0x23,0x2b,0x35,0x05,0x41,0xe0, | 300 | 0x68,0x98,0x8c,0xac,0xd4,0x15,0x07,0x81, |
301 | 0x7b,0xbe,0xe6,0x79,0xaa,0xea,0x01,0x83, | 301 | 0xee,0xfb,0x99,0xe6,0xab,0xa8,0x06,0x0f, |
302 | 0xfa,0xf7,0xe1,0xcf,0xbb,0x5e,0x64,0x3a, | 302 | 0xeb,0xdf,0x87,0x3e,0xed,0x79,0x90,0xea, |
303 | 0xa7,0x60,0x2c,0xbf,0x14,0x7d,0x86,0xf2, | 303 | 0x9d,0x80,0xb2,0xfc,0x51,0xf6,0x1b,0xcb, |
304 | 0xe9,0xd1,0x8b,0x1a,0xc5,0xa1,0x62,0x38, | 304 | 0xa7,0x46,0x2c,0x6b,0x16,0x85,0x88,0xe2, |
305 | 0xb3,0x6c,0x54,0x96,0x04,0x8b,0xe4,0xc7, | 305 | 0xcd,0xb1,0x52,0x58,0x12,0x2f,0x93,0x1e, |
306 | 0xa5,0x6e,0x20,0x9b,0x3c,0xa5,0x74,0x20, | 306 | 0x95,0xb8,0x82,0x6c,0xf2,0x95,0xd0,0x83, |
307 | 0xc7,0x3d,0x6d,0x70,0x90,0xdc,0x9d,0x34, | 307 | 0x1c,0xf5,0xb5,0xc2,0x43,0x72,0x74,0xd2, |
308 | 0xb1,0x44,0x58,0x66,0x2e,0xab,0x18,0x05, | 308 | 0xc5,0x11,0x61,0x98,0xba,0xac,0x60,0x16, |
309 | 0xaf,0xe2,0x1f,0xb3,0xbe,0x56,0x7a,0x0a, | 309 | 0xbf,0x88,0x7e,0xce,0xf9,0x59,0xe8,0x2b, |
310 | 0xe3,0xc1,0xb7,0x7a,0x4c,0xe2,0x55,0xb2, | 310 | 0x8f,0x06,0xdd,0xe9,0x33,0x89,0x56,0xc8, |
311 | 0x02,0x53,0xf2,0x17,0xd3,0x8f,0x16,0xdd, | 311 | 0x09,0x4f,0xc8,0x5f,0x4e,0x3c,0x5b,0x76, |
312 | 0x89,0x32,0xc9,0x51,0x48,0x18,0x4f,0xae, | 312 | 0x24,0xcb,0x25,0x45,0x20,0x61,0x3e,0xb9, |
313 | 0x5e,0x1a,0x3b,0xa3,0x66,0x34,0xab,0x44, | 313 | 0x78,0x68,0xee,0x8d,0x98,0xd2,0xad,0x10, |
314 | 0x04,0x67,0xe6,0xaf,0xa8,0x1e,0x0f,0xbb, | 314 | 0x11,0x9f,0x9a,0xbe,0xa0,0x78,0x3e,0xef, |
315 | 0xde,0x67,0x3a,0xad,0x60,0x10,0xbf,0x9c, | 315 | 0x79,0x9c,0xea,0xb5,0x80,0x42,0xfe,0x71, |
316 | 0x7e,0xb6,0xf8,0x49,0xee,0x4b,0x9a,0x46, | 316 | 0xfa,0xdb,0xe1,0x27,0xb9,0x2e,0x69,0x1a, |
317 | 0xa2,0x68,0x32,0x8f,0x50,0xdc,0x1d,0x37, | 317 | 0x89,0xa0,0xca,0x3d,0x43,0x70,0x74,0xde, |
318 | 0xb1,0x4e,0x58,0x5a,0x2e,0x23,0x1b,0x35, | 318 | 0xc5,0x39,0x61,0x68,0xb8,0x8c,0x6c,0xd6, |
319 | 0xa5,0x42,0x20,0x73,0x3e,0xd5,0x79,0x00, | 319 | 0x95,0x08,0x81,0xcc,0xfb,0x55,0xe4,0x03, |
320 | 0xe9,0xfd,0x8b,0xf2,0xc7,0xd1,0x6f,0x18, | 320 | 0xa7,0xf6,0x2f,0xcb,0x1f,0x45,0xbc,0x62, |
321 | 0x9d,0xac,0xb2,0x14,0x53,0x86,0x16,0xeb, | 321 | 0x76,0xb2,0xc8,0x51,0x4e,0x18,0x5b,0xae, |
322 | 0x89,0x86,0xca,0xe9,0x41,0x88,0x7a,0xce, | 322 | 0x26,0x1b,0x2b,0xa5,0x06,0x21,0xeb,0x3b, |
323 | 0xe1,0x59,0xb8,0x2a,0x6f,0x02,0x9d,0xf0, | 323 | 0x85,0x66,0xe0,0xa9,0xbc,0x0a,0x77,0xc2, |
324 | 0xb3,0xdc,0x57,0x36,0x0d,0x4b,0xd0,0x47, | 324 | 0xcf,0x71,0x5c,0xd8,0x35,0x2f,0x41,0x1c, |
325 | 0x1e,0x6d,0xba,0x92,0x60,0x92,0xbc,0x90, | 325 | 0x79,0xb6,0xea,0x49,0x82,0x4a,0xf2,0x41, |
326 | 0x74,0x9e,0xc4,0xb9,0x64,0x68,0xa6,0x8c, | 326 | 0xd2,0x7b,0x12,0xe5,0x91,0xa2,0x9a,0x30, |
327 | 0x28,0xd7,0x0d,0x0d,0xd1,0xd3,0x1b,0x15, | 327 | 0xa3,0x5c,0x34,0x37,0x47,0x4c,0x6c,0x56, |
328 | 0xa5,0x82,0x22,0xf3,0x31,0xd5,0x5b,0x00, | 328 | 0x96,0x08,0x8b,0xcc,0xc7,0x55,0x6c,0x00, |
329 | 0x25,0xff,0x23,0xfd,0x37,0xf1,0x4f,0xd8, | 329 | 0x97,0xfc,0x8f,0xf4,0xdf,0xc5,0x3f,0x61, |
330 | 0x5f,0x2e,0x3d,0x1b,0x71,0xa4,0xda,0x25, | 330 | 0x7c,0xb8,0xf4,0x6d,0xc6,0x93,0x68,0x94, |
331 | 0x23,0x21,0x35,0x39,0x41,0x68,0x78,0x8e, | 331 | 0x8c,0x84,0xd4,0xe5,0x05,0xa1,0xe2,0x3b, |
332 | 0xec,0xd9,0x95,0x2a,0x81,0x00,0xf9,0xfd, | 332 | 0xb3,0x66,0x54,0xaa,0x04,0x03,0xe7,0xf7, |
333 | 0xeb,0xf3,0x87,0xd6,0xef,0x09,0x9d,0xca, | 333 | 0xaf,0xce,0x1f,0x5b,0xbc,0x26,0x77,0x2a, |
334 | 0xb3,0x40,0x54,0x7e,0x06,0xfb,0xe9,0xe7, | 334 | 0xcd,0x01,0x51,0xf8,0x1b,0xef,0xa7,0x9e, |
335 | 0x8b,0xae,0xc6,0x19,0x6b,0xa8,0x86,0x0c, | 335 | 0x2e,0xbb,0x18,0x65,0xae,0xa2,0x18,0x33, |
336 | 0xeb,0xd5,0x87,0x02,0xed,0xf1,0x93,0xda, | 336 | 0xaf,0x56,0x1c,0x0b,0xb7,0xc6,0x4f,0x6a, |
337 | 0x97,0x20,0x8d,0x3c,0xd1,0x75,0x18,0xc1, | 337 | 0x5c,0x82,0x34,0xf3,0x45,0xd4,0x63,0x06, |
338 | 0xad,0x7a,0x10,0xe3,0x9d,0xb6,0xb2,0x48, | 338 | 0xb5,0xe8,0x43,0x8e,0x76,0xda,0xc9,0x21, |
339 | 0x52,0x4e,0x12,0x5b,0x92,0x26,0x93,0x28, | 339 | 0x49,0x38,0x49,0x6e,0x48,0x9a,0x4c,0xa2, |
340 | 0x95,0x0c,0x81,0xd4,0xfb,0x05,0xe5,0xe3, | 340 | 0x54,0x32,0x07,0x53,0xec,0x17,0x97,0x8e, |
341 | 0xa3,0xb6,0x36,0x4b,0x4a,0x44,0x42,0x66, | 341 | 0x8e,0xd8,0xd9,0x2d,0x29,0x11,0x09,0x99, |
342 | 0x72,0xaa,0xd0,0x01,0x1f,0xf9,0xbf,0xea, | 342 | 0xca,0xab,0x40,0x04,0x7f,0xe6,0xff,0xa9, |
343 | 0x7f,0x82,0xfe,0xf1,0xf9,0xdb,0xeb,0x27, | 343 | 0xfe,0x0b,0xfb,0xc7,0xe7,0x6f,0xac,0x9e, |
344 | 0x85,0x2e,0xe1,0x19,0xb9,0xaa,0x6a,0x02, | 344 | 0x14,0xbb,0x84,0x66,0xe6,0xa9,0xa8,0x0a, |
345 | 0x83,0xf0,0xf7,0xdd,0xcf,0x33,0x5d,0x54, | 345 | 0x0f,0xc3,0xdf,0x77,0x3c,0xcd,0x75,0x50, |
346 | 0x30,0x07,0x5f,0xec,0x3f,0x97,0x7e,0x8c, | 346 | 0xc0,0x1d,0x7f,0xb0,0xfe,0x5d,0xfa,0x33, |
347 | 0xf8,0xd5,0xed,0x03,0x91,0xf6,0x9b,0xc8, | 347 | 0xe3,0x57,0xb4,0x0e,0x47,0xda,0x6f,0x22, |
348 | 0xa7,0x4c,0x2c,0x57,0x16,0x0d,0x8b,0xd2, | 348 | 0x9d,0x30,0xb1,0x5c,0x58,0x36,0x2f,0x4b, |
349 | 0xc7,0x11,0x6d,0x98,0x92,0xac,0x90,0x14, | 349 | 0x1c,0x45,0xb6,0x62,0x4a,0xb2,0x40,0x52, |
350 | 0x9f,0x84,0xbe,0xe4,0x79,0xa6,0xea,0x29, | 350 | 0x7e,0x12,0xfb,0x91,0xe6,0x9b,0xa8,0xa6, |
351 | 0x83,0x0a,0xf5,0xc1,0xc3,0x7b,0x74,0xe4, | 351 | 0x0c,0x2b,0xd7,0x07,0x0d,0xed,0xd3,0x93, |
352 | 0xc5,0xa5,0x62,0x20,0xb3,0x3c,0x55,0x76, | 352 | 0x16,0x95,0x88,0x82,0xcc,0xf1,0x55,0xd8, |
353 | 0x00,0xcb,0xfd,0x47,0xf0,0x6f,0xde,0x9f, | 353 | 0x03,0x2f,0xf5,0x1f,0xc1,0xbf,0x7a,0x7c, |
354 | 0x38,0xbd,0x6c,0x70,0x96,0xdc,0x89,0x34, | 354 | 0xe2,0xf5,0xb1,0xc2,0x5b,0x72,0x24,0xd3, |
355 | 0xc9,0x45,0x48,0x60,0x4e,0xbe,0x58,0x7a, | 355 | 0x25,0x15,0x21,0x81,0x3a,0xf9,0x61,0xe8, |
356 | 0x2e,0xe3,0x19,0xb5,0xaa,0x42,0x02,0x73, | 356 | 0xbb,0x8c,0x66,0xd6,0xa9,0x08,0x09,0xcf, |
357 | 0xf2,0xd7,0xd1,0x0f,0x19,0xdd,0xab,0x32, | 357 | 0xcb,0x5f,0x44,0x3c,0x67,0x76,0xac,0xc8, |
358 | 0x05,0x53,0xe0,0x17,0xbf,0x8e,0x7e,0xda, | 358 | 0x15,0x4f,0x80,0x5e,0xfe,0x39,0xfb,0x6b, |
359 | 0xf9,0x21,0xe9,0x3b,0x89,0x66,0xc8,0xa9, | 359 | 0xe4,0x87,0xa4,0xee,0x25,0x9b,0x22,0xa5, |
360 | 0x4c,0x08,0x57,0xce,0x0f,0x5b,0xdc,0x27, | 360 | 0x30,0x21,0x5f,0x38,0x3d,0x6f,0x70,0x9c, |
361 | 0x37,0x2d,0x4d,0x10,0x51,0x9e,0x1a,0xbb, | 361 | 0xdc,0xb5,0x34,0x41,0x46,0x78,0x6a,0xee, |
362 | 0xa0,0x66,0x3e,0xab,0x78,0x04,0xef,0xe5, | 362 | 0x81,0x98,0xfa,0xad,0xe0,0x13,0xbf,0x96, |
363 | 0x9f,0xa2,0xbe,0x30,0x7b,0x5e,0xe4,0x39, | 363 | 0x7e,0x8a,0xf8,0xc1,0xed,0x7b,0x90,0xe6, |
364 | 0xa7,0x6a,0x2c,0x83,0x14,0xf5,0x85,0xc2, | 364 | 0x9d,0xa8,0xb2,0x0c,0x53,0xd6,0x17,0x0b, |
365 | 0xe3,0x71,0xb4,0xda,0x45,0x22,0x61,0x32, | 365 | 0x8d,0xc6,0xd3,0x69,0x14,0x89,0x84,0xca, |
366 | 0xb9,0x50,0x68,0x1e,0x8f,0xb8,0xde,0x6d, | 366 | 0xe5,0x41,0xa0,0x7a,0x3e,0xe3,0x79,0xb4, |
367 | 0x3a,0x91,0x60,0x98,0xbc,0xac,0x74,0x16, | 367 | 0xea,0x45,0x82,0x62,0xf2,0xb1,0xd0,0x5b, |
368 | 0xc7,0x89,0x6e,0xc8,0x99,0x4c,0xa8,0x54, | 368 | 0x1e,0x25,0xbb,0x22,0x65,0x32,0xa1,0x50, |
369 | 0x0e,0x07,0xdb,0xef,0x27,0x9d,0x2e,0xb1, | 369 | 0x38,0x1f,0x6f,0xbc,0x9e,0x74,0xba,0xc4, |
370 | 0x18,0x59,0xae,0x2a,0x1b,0x03,0xa5,0xf6, | 370 | 0x61,0x66,0xb8,0xa8,0x6c,0x0e,0x97,0xd8, |
371 | 0x23,0xcb,0x37,0x45,0x4c,0x60,0x56,0xbe, | 371 | 0x8f,0x2c,0xdd,0x15,0x31,0x81,0x5a,0xf8, |
372 | 0x08,0x7b,0xce,0xe7,0x59,0xac,0x2a,0x17, | 372 | 0x21,0xef,0x3b,0x9d,0x66,0xb0,0xa8,0x5c, |
373 | 0x03,0x8d,0xf6,0xd3,0xc9,0x17,0x49,0x8c, | 373 | 0x0e,0x37,0xdb,0x4f,0x24,0x5d,0x26,0x31, |
374 | 0x4a,0xd6,0x41,0x0a,0x79,0xc2,0xeb,0x71, | 374 | 0x2b,0x59,0x04,0x29,0xe7,0x0b,0xad,0xc6, |
375 | 0x84,0xda,0xe5,0x21,0xa1,0x3a,0x39,0x63, | 375 | 0x13,0x6b,0x94,0x86,0x84,0xe8,0xe5,0x8d, |
376 | 0x68,0xb4,0x8c,0x44,0xd6,0x65,0x0a,0xa1, | 376 | 0xa2,0xd2,0x31,0x13,0x59,0x94,0x2a,0x87, |
377 | 0xc0,0x3b,0x7f,0x64,0xfc,0xa5,0xf4,0x23, | 377 | 0x00,0xed,0xfd,0x93,0xf2,0x97,0xd0,0x8f, |
378 | 0xc7,0x37,0x6d,0x4c,0x90,0x54,0x9e,0x04, | 378 | 0x1c,0xdd,0xb5,0x32,0x41,0x52,0x78,0x12, |
379 | 0xbb,0xe4,0x67,0xa6,0xae,0x28,0x1b,0x0f, | 379 | 0xef,0x91,0x9e,0x9a,0xb8,0xa0,0x6c,0x3e, |
380 | 0xa5,0xde,0x23,0x3b,0x35,0x65,0x40,0xa0, | 380 | 0x97,0x78,0x8c,0xec,0xd5,0x95,0x02,0x81, |
381 | 0x7c,0x3e,0xf7,0x79,0xcc,0xeb,0x55,0x84, | 381 | 0xf0,0xfb,0xdd,0xe7,0x33,0xad,0x56,0x10, |
382 | 0x02,0xe7,0xf1,0xaf,0xda,0x1f,0x23,0xbd, | 382 | 0x0b,0x9f,0xc6,0xbf,0x68,0x7c,0x8e,0xf4, |
383 | 0x36,0x71,0x4a,0xd8,0x41,0x2e,0x79,0x1a, | 383 | 0xd9,0xc5,0x2b,0x61,0x04,0xb9,0xe4,0x6b, |
384 | 0xe9,0xa1,0x8a,0x3a,0xc3,0x61,0x74,0xb8, | 384 | 0xa6,0x86,0x28,0xeb,0x0d,0x85,0xd2,0xe3, |
385 | 0xc4,0x6d,0x66,0x90,0xa8,0x9c,0x0c,0xb7, | 385 | 0x11,0xb5,0x9a,0x42,0xa2,0x70,0x32,0xdf, |
386 | 0xd4,0x4f,0x06,0x5d,0xea,0x33,0x83,0x56, | 386 | 0x51,0x3c,0x19,0x77,0xa8,0xce,0x0d,0x5b, |
387 | 0xf4,0x09,0xc7,0xcb,0x6f,0x44,0x9c,0x64, | 387 | 0xd0,0x27,0x1f,0x2d,0xbd,0x12,0x71,0x92, |
388 | 0xb6,0xa4,0x48,0x26,0x4f,0x2a,0x5d,0x02, | 388 | 0xda,0x91,0x20,0x99,0x3c,0xa9,0x74,0x08, |
389 | 0x31,0xf3,0x5b,0xd4,0x27,0x07,0x2d,0xed, | 389 | 0xc7,0xcd,0x6f,0x50,0x9c,0x1c,0xb7,0xb4, |
390 | 0x13,0x91,0x96,0x9a,0x88,0xa0,0xcc,0x3d, | 390 | 0x4e,0x46,0x5a,0x6a,0x22,0x83,0x30,0xf5, |
391 | 0x57,0x70,0x0c,0xdf,0xd5,0x3f,0x01,0x7d, | 391 | 0x5d,0xc0,0x33,0x7f,0x54,0xfc,0x05,0xf7, |
392 | 0xf8,0xf3,0xed,0xd7,0x93,0x0e,0x95,0xd8, | 392 | 0xe3,0xcf,0xb7,0x5e,0x4c,0x3a,0x57,0x62, |
393 | 0x83,0x2c,0xf5,0x15,0xc1,0x83,0x7a,0xf4, | 393 | 0x0c,0xb3,0xd4,0x57,0x06,0x0d,0xeb,0xd3, |
394 | 0xe1,0xc5,0xbb,0x62,0x64,0xb2,0xa4,0x50, | 394 | 0x87,0x16,0xed,0x89,0x92,0xca,0x91,0x40, |
395 | 0x26,0x1f,0x2b,0xbd,0x06,0x71,0xea,0xdb, | 395 | 0x98,0x7c,0xae,0xf4,0x19,0xc7,0xab,0x6e, |
396 | 0x81,0x26,0xf9,0x29,0xe9,0x0b,0x89,0xc6, | 396 | 0x04,0x9b,0xe4,0xa7,0xa4,0x2e,0x27,0x1b, |
397 | 0xcb,0x69,0x44,0x88,0x64,0xce,0xa5,0x58, | 397 | 0x2d,0xa5,0x12,0x21,0x93,0x3a,0x95,0x60, |
398 | 0x20,0x2f,0x3f,0x1d,0x7d,0xb0,0xf2,0x5d, | 398 | 0x80,0xbc,0xfc,0x75,0xf6,0xc3,0xc9,0x77, |
399 | 0xd2,0x33,0x13,0x55,0x94,0x02,0x87,0xf0, | 399 | 0x48,0xcc,0x4d,0x56,0x50,0x0a,0x1f,0xc3, |
400 | 0xef,0xdd,0x9f,0x32,0xbd,0x50,0x70,0x1e, | 400 | 0xbf,0x76,0x7c,0xca,0xf5,0x41,0xc0,0x7b, |
401 | 0xdf,0xb9,0x3e,0x69,0x7a,0x88,0xe0,0xcd, | 401 | 0x7e,0xe4,0xf9,0xa5,0xea,0x23,0x83,0x36, |
402 | 0xbd,0x52,0x70,0x12,0xdf,0x91,0x3e,0x99, | 402 | 0xf5,0x49,0xc0,0x4b,0x7e,0x44,0xfa,0x65, |
403 | 0x78,0xa8,0xec,0x0d,0x97,0xd2,0x8f,0x10, | 403 | 0xe2,0xa3,0xb0,0x36,0x5f,0x4a,0x3c,0x43, |
404 | 0xdd,0x9d,0x32,0xb1,0x50,0x58,0x1e,0x2f, | 404 | 0x76,0x74,0xca,0xc5,0x41,0x60,0x78,0xbe, |
405 | 0xbb,0x1e,0x65,0xba,0xa2,0x60,0x32,0xbf, | 405 | 0xec,0x79,0x96,0xea,0x89,0x80,0xca,0xfd, |
406 | 0x50,0x7c,0x1e,0xf7,0xb9,0xce,0x6b,0x5a, | 406 | 0x41,0xf0,0x7b,0xde,0xe7,0x39,0xad,0x6a, |
407 | 0x84,0x20,0xe7,0x3d,0xad,0x72,0x10,0xd3, | 407 | 0x10,0x83,0x9c,0xf6,0xb5,0xc8,0x43,0x4e, |
408 | 0x9d,0x16,0xb1,0x88,0x5a,0xce,0x21,0x5b, | 408 | 0x74,0x5a,0xc6,0x21,0x6b,0x38,0x85,0x6c, |
409 | 0x38,0x25,0x6f,0x20,0x9d,0x3c,0xb1,0x74, | 409 | 0xe0,0x95,0xbc,0x82,0x74,0xf2,0xc5,0xd1, |
410 | 0x58,0xc6,0x2d,0x6b,0x10,0x85,0x9c,0xe2, | 410 | 0x63,0x18,0xb5,0xac,0x42,0x16,0x73,0x8a, |
411 | 0xb5,0xb0,0x42,0x5e,0x72,0x3a,0xd3,0x61, | 411 | 0xd6,0xc1,0x09,0x79,0xc8,0xeb,0x4d,0x84, |
412 | 0x14,0xb9,0x84,0x6a,0xe6,0x81,0xa8,0xfa, | 412 | 0x52,0xe6,0x11,0xab,0x9a,0x06,0xa3,0xe8, |
413 | 0x0d,0xe3,0xd3,0xb7,0x16,0x4d,0x8a,0x52, | 413 | 0x37,0x8f,0x4e,0xdc,0x59,0x36,0x29,0x4b, |
414 | 0xc2,0x11,0x73,0x98,0xd6,0xad,0x08,0x11, | 414 | 0x08,0x45,0xce,0x63,0x5a,0xb4,0x20,0x47, |
415 | 0xcf,0x9b,0x5e,0xa4,0x38,0x27,0x6f,0x2c, | 415 | 0x3e,0x6d,0x7a,0x90,0xe0,0x9d,0xbc,0xb2, |
416 | 0x9d,0x14,0xb1,0x84,0x5a,0xe6,0x21,0xab, | 416 | 0x74,0x52,0xc6,0x11,0x6b,0x98,0x86,0xac, |
417 | 0x3a,0x05,0x63,0xe0,0xb7,0xbc,0x4e,0x76, | 417 | 0xe8,0x15,0x8f,0x82,0xde,0xf1,0x39,0xd9, |
418 | 0x5a,0xca,0x21,0x43,0x38,0x75,0x6e,0xc0, | 418 | 0x6b,0x28,0x85,0x0c,0xe1,0xd5,0xbb,0x02, |
419 | 0x99,0x7c,0xa8,0xf4,0x0d,0xc7,0xd3,0x6f, | 419 | 0x65,0xf2,0xa3,0xd0,0x37,0x1f,0x4d,0xbc, |
420 | 0x14,0x9d,0x84,0xb2,0xe4,0x51,0xa6,0x1a, | 420 | 0x52,0x76,0x12,0xcb,0x91,0x46,0x98,0x68, |
421 | 0x2b,0xa3,0x06,0x35,0xeb,0x43,0x84,0x76, | 421 | 0xae,0x8c,0x18,0xd7,0xad,0x0e,0x11,0xdb, |
422 | 0xe6,0xc9,0xa9,0x4a,0x08,0x43,0xce,0x77, | 422 | 0x9b,0x26,0xa5,0x28,0x21,0x0f,0x39,0xdd, |
423 | 0x5a,0xcc,0x21,0x57,0x38,0x0d,0x6f,0xd0, | 423 | 0x6b,0x30,0x85,0x5c,0xe0,0x35,0xbf,0x42, |
424 | 0x9f,0x1c,0xbd,0xb4,0x72,0x46,0xd2,0x69, | 424 | 0x7c,0x72,0xf6,0xd1,0xc9,0x1b,0x49,0xa4, |
425 | 0x12,0x89,0x90,0xca,0x9d,0x40,0xb0,0x7c, | 425 | 0x4a,0x26,0x43,0x2a,0x75,0x02,0xc1,0xf1, |
426 | 0x5e,0xf6,0x39,0xcb,0x6b,0x44,0x84,0x64, | 426 | 0x7b,0xd8,0xe7,0x2d,0xad,0x12,0x11,0x93, |
427 | 0xe6,0xa5,0xa8,0x22,0x0f,0x33,0xdd,0x57, | 427 | 0x9a,0x96,0xa0,0x88,0x3c,0xcf,0x75,0x5c, |
428 | 0x30,0x0d,0x5f,0xd0,0x3f,0x1f,0x7d,0xbc, | 428 | 0xc0,0x35,0x7f,0x40,0xfc,0x7d,0xf6,0xf3, |
429 | 0xf2,0x75,0xd2,0xc3,0x11,0x75,0x98,0xc2, | 429 | 0xc9,0xd7,0x4b,0x0c,0x45,0xd6,0x63,0x0a, |
430 | 0xad,0x70,0x10,0xdf,0x9d,0x3e,0xb1,0x78, | 430 | 0xb5,0xc0,0x43,0x7e,0x74,0xfa,0xc5,0xe1, |
431 | 0x58,0xee,0x2d,0x9b,0x12,0xa5,0x90,0x22, | 431 | 0x63,0xb8,0xb6,0x6c,0x4a,0x96,0x40,0x8a, |
432 | 0x9f,0x30,0xbd,0x5c,0x70,0x36,0xdf,0x49, | 432 | 0x7c,0xc2,0xf5,0x71,0xc0,0xdb,0x7d,0x24, |
433 | 0x3c,0x49,0x76,0x48,0xca,0x4d,0x42,0x50, | 433 | 0xf1,0x25,0xd9,0x23,0x29,0x35,0x09,0x41, |
434 | 0x72,0x1e,0xd3,0xb9,0x16,0x69,0x8a,0x8a, | 434 | 0xc8,0x7b,0x4e,0xe4,0x59,0xa6,0x2a,0x2b, |
435 | 0xc0,0xc1,0x7d,0x78,0xf0,0xed,0xdd,0x93, | 435 | 0x03,0x05,0xf5,0xe3,0xc3,0xb7,0x76,0x4c, |
436 | 0x32,0x95,0x50,0x80,0x1c,0xff,0xb5,0xfe, | 436 | 0xca,0x55,0x42,0x00,0x73,0xfe,0xd7,0xf9, |
437 | 0x43,0xfa,0x77,0xe2,0xcf,0xb1,0x5e,0x58, | 437 | 0x0f,0xe9,0xdf,0x8b,0x3e,0xc5,0x79,0x60, |
438 | 0x3a,0x2f,0x63,0x1c,0xb5,0xb4,0x42,0x46, | 438 | 0xe8,0xbd,0x8c,0x72,0xd6,0xd1,0x09,0x19, |
439 | 0x72,0x6a,0xd2,0x81,0x10,0xf9,0x9d,0xea, | 439 | 0xc9,0xab,0x4a,0x04,0x43,0xe6,0x77,0xaa, |
440 | 0xb3,0x80,0x56,0xfe,0x09,0xfb,0xcb,0xe7, | 440 | 0xce,0x01,0x5b,0xf8,0x27,0xef,0x2f,0x9d, |
441 | 0x47,0xac,0x6e,0x16,0x9b,0x88,0xa6,0xcc, | 441 | 0x1e,0xb1,0xb8,0x5a,0x6e,0x22,0x9b,0x30, |
442 | 0x29,0x57,0x08,0x0d,0xcf,0xd3,0x5f,0x14, | 442 | 0xa5,0x5c,0x20,0x37,0x3f,0x4d,0x7c,0x50, |
443 | 0x3d,0x87,0x72,0xec,0xd1,0x95,0x1a,0x81, | 443 | 0xf6,0x1d,0xcb,0xb3,0x46,0x54,0x6a,0x06, |
444 | 0xa0,0xfa,0x3d,0xe3,0x73,0xb4,0xd6,0x45, | 444 | 0x83,0xe8,0xf7,0x8d,0xce,0xd3,0x59,0x14, |
445 | 0x0a,0x61,0xc2,0xbb,0x70,0x64,0xde,0xa5, | 445 | 0x29,0x87,0x0a,0xed,0xc1,0x93,0x7a,0x94, |
446 | 0x38,0x21,0x6f,0x38,0x9d,0x6c,0xb0,0x94, | 446 | 0xe0,0x85,0xbc,0xe2,0x75,0xb2,0xc2,0x51, |
447 | 0x5c,0x86,0x3e,0xeb,0x45,0x84,0x62,0xe6, | 447 | 0x72,0x18,0xd3,0xad,0x16,0x11,0x8b,0x9a, |
448 | 0xb1,0xa8,0x5a,0x0e,0x23,0xfb,0x33,0x25, | 448 | 0xc6,0xa1,0x68,0x38,0x8f,0x6c,0xdc,0x95, |
449 | 0x47,0x20,0x51,0x3e,0x19,0x7f,0xa8,0x66, | 449 | 0x34,0x81,0x44,0xf8,0x65,0xee,0xa3,0x98, |
450 | 0x0c,0xfb,0xd0,0x07,0x13,0xe5,0x9f,0x83, | 450 | 0x36,0xaf,0x48,0x1c,0x4f,0xb6,0x5e,0x4a, |
451 | 0xce,0x98,0x58,0xcd,0x2e,0x19,0x14,0x39, | 451 | 0x3a,0x43,0x62,0x74,0xb2,0xc4,0x51,0x66, |
452 | 0x86,0x3f,0xff,0x01,0x85,0xff,0xe1,0xe1, | 452 | 0x18,0xab,0xac,0x06,0x17,0xeb,0x8f,0x86, |
453 | 0xb3,0xfc,0x46,0x63,0x0f,0xf8,0x00,0x53, | 453 | 0xde,0xe9,0x39,0x89,0x6a,0xc8,0x81,0x4c, |
454 | 0xbe,0x1f,0xfb,0xc0,0xe6,0x7e,0xbc,0xf0, | 454 | 0xf8,0x55,0xee,0x03,0x9b,0xf6,0xa7,0xc8, |
455 | 0x01,0xe3,0xc3,0x9f,0xa6,0xcc,0x48,0x7e, | 455 | 0x2f,0x4f,0x1c,0x5d,0xb6,0x32,0x4b,0x52, |
456 | 0x40,0x82,0x9d,0xf2,0xff,0xd6,0x07,0x13, | 456 | 0x44,0x12,0x67,0x92,0xae,0x90,0x18,0x9f, |
457 | 0xf5,0x87,0x80,0x0f,0x71,0x9c,0xfd,0x35, | 457 | 0xac,0xbe,0x14,0x7b,0x86,0xe6,0xe9,0xa9, |
458 | 0x61,0x43,0xf8,0x78,0x7e,0xcf,0x19,0x99, | 458 | 0x8a,0x0a,0xc3,0xc1,0x77,0x78,0xcc,0xed, |
459 | 0xa8,0x32,0x00,0x53,0xfc,0x17,0xfb,0x8f, | 459 | 0x55,0x90,0x02,0x9f,0xf0,0xbf,0xdc,0x7f, |
460 | 0xc6,0xdf,0xa9,0x3e,0x09,0x7b,0xc8,0xe7, | 460 | 0x36,0xfd,0x49,0xf0,0x4b,0xde,0x47,0x3a, |
461 | 0x4d,0xac,0x52,0x16,0x13,0x8b,0x96,0xc6, | 461 | 0x6d,0x62,0x90,0xb0,0x9c,0x5c,0xb6,0x34, |
462 | 0x89,0x68,0xc8,0x8d,0x4c,0xd0,0x55,0x1e, | 462 | 0x4b,0x46,0x44,0x6a,0x66,0x82,0xa8,0xf0, |
463 | 0x01,0xbb,0xfa,0x67,0xe2,0xaf,0xb0,0x1e, | 463 | 0x0d,0xdf,0xd3,0x3f,0x15,0x7d,0x80,0xf2, |
464 | 0x5f,0xba,0x3e,0x63,0x7a,0xb4,0xe0,0x45, | 464 | 0xfd,0xd1,0xf3,0x1b,0xd5,0xa7,0x02,0x2d, |
465 | 0xbe,0x62,0x7a,0xb2,0xe0,0x51,0xbe,0x1a, | 465 | 0xf3,0x13,0xd5,0x97,0x02,0x8d,0xf0,0xd3, |
466 | 0x7b,0xa2,0xe6,0x31,0xab,0x5a,0x04,0x23, | 466 | 0xdd,0x17,0x31,0x8d,0x5a,0xd0,0x21,0x1f, |
467 | 0xe7,0x37,0xad,0x4e,0x10,0x5b,0x9e,0x26, | 467 | 0x39,0xbd,0x6a,0x70,0x82,0xdc,0xf1,0x35, |
468 | 0xbb,0x28,0x65,0x0e,0xa1,0xd8,0x3b,0x2f, | 468 | 0xd9,0x43,0x28,0x75,0x0e,0xc1,0xd9,0x7b, |
469 | 0x65,0x1c,0xa1,0xb4,0x3a,0x47,0x62,0x6c, | 469 | 0x28,0xe5,0x0d,0xa1,0xd2,0x3b,0x13,0x65, |
470 | 0xb2,0x94,0x50,0x86,0x1c,0xeb,0xb5,0x86, | 470 | 0x94,0xa2,0x84,0x30,0xe7,0x5d,0xac,0x32, |
471 | 0x42,0xea,0x71,0x82,0xda,0xf1,0x21,0xd9, | 471 | 0x17,0x53,0x8c,0x16,0xd7,0x89,0x0e,0xc9, |
472 | 0x3b,0x29,0x65,0x08,0xa1,0xcc,0x3b,0x57, | 472 | 0xd9,0x4b,0x28,0x45,0x0e,0x61,0xda,0xbb, |
473 | 0x64,0x0c,0xa7,0xd4,0x2f,0x07,0x1d,0xed, | 473 | 0x20,0x65,0x3e,0xa1,0x78,0x38,0xef,0x6d, |
474 | 0xb3,0x92,0x56,0x92,0x08,0x93,0xcc,0x97, | 474 | 0x9c,0x92,0xb4,0x90,0x44,0x9e,0x64,0xba, |
475 | 0x54,0x8c,0x04,0xd7,0xe5,0x0f,0xa1,0xde, | 475 | 0xa4,0x60,0x26,0xbf,0x28,0x7d,0x0e,0xf1, |
476 | 0x3b,0x3b,0x65,0x64,0xa0,0xa4,0x3c,0x27, | 476 | 0xd9,0xdb,0x2b,0x25,0x05,0x21,0xe1,0x3b, |
477 | 0x77,0x2c,0xcd,0x15,0x51,0x80,0x1a,0xff, | 477 | 0xb9,0x66,0x68,0xaa,0x8c,0x00,0xd7,0xfd, |
478 | 0xa1,0xfe,0x3b,0xfb,0x67,0xe4,0xaf,0xa4, | 478 | 0x0f,0xf1,0xdf,0xdb,0x3f,0x25,0x7d,0x20, |
479 | 0x1e,0x27,0xbb,0x2e,0x65,0x1a,0xa1,0xa0, | 479 | 0xf1,0x3d,0xd9,0x73,0x28,0xd5,0x0d,0x01, |
480 | 0x3a,0x3f,0x63,0x7c,0xb4,0xf4,0x45,0xc6, | 480 | 0xd1,0xfb,0x1b,0xe5,0xa7,0xa2,0x2e,0x33, |
481 | 0x63,0x6a,0xb4,0x80,0x44,0xfe,0x65,0xfa, | 481 | 0x1b,0x55,0xa4,0x02,0x27,0xf3,0x2f,0xd5, |
482 | 0xa3,0xe0,0x37,0xbf,0x4e,0x7c,0x5a,0xf6, | 482 | 0x1f,0x01,0xbd,0xfa,0x73,0xe2,0xd7,0xb1, |
483 | 0x21,0xcb,0x3b,0x45,0x64,0x60,0xa6,0xbc, | 483 | 0x0e,0x59,0xda,0x2b,0x23,0x05,0x35,0xe1, |
484 | 0x28,0x77,0x0e,0xcd,0xd9,0x53,0x28,0x15, | 484 | 0x43,0xb8,0x76,0x6e,0xca,0x99,0x40,0xa8, |
485 | 0x0f,0x81,0xde,0xfb,0x39,0xe5,0x6b,0xa0, | 485 | 0x7c,0x0e,0xf7,0xd9,0xcf,0x2b,0x5d,0x04, |
486 | 0x86,0x3c,0xeb,0x75,0x84,0xc2,0xe5,0x71, | 486 | 0x31,0xe7,0x5b,0xac,0x26,0x17,0x2b,0x8d, |
487 | 0xa0,0xda,0x3d,0x23,0x71,0x34,0xd9,0x45, | 487 | 0x06,0xd1,0xe9,0x1b,0x89,0xa6,0xca,0x29, |
488 | 0x28,0x61,0x0e,0xb9,0xd8,0x6b,0x2e,0x85, | 488 | 0x43,0x08,0x75,0xce,0xc3,0x59,0x74,0x28, |
489 | 0x18,0xe1,0xad,0xba,0x12,0x63,0x92,0xb6, | 489 | 0xc7,0x0d,0x6d,0xd0,0x93,0x1c,0x95,0xb4, |
490 | 0x90,0x48,0x9e,0x4c,0xba,0x54,0x62,0x06, | 490 | 0x82,0x44,0xf2,0x65,0xd2,0xa3,0x10,0x35, |
491 | 0xb3,0xe8,0x57,0x8e,0x0e,0xdb,0xd9,0x27, | 491 | 0x9f,0x42,0xbc,0x70,0x76,0xde,0xc9,0x39, |
492 | 0x29,0x2d,0x09,0x11,0xc9,0x9b,0x4a,0xa4, | 492 | 0x49,0x68,0x48,0x8e,0x4c,0xda,0x55,0x22, |
493 | 0x40,0x26,0x7f,0x2a,0xfd,0x01,0xf1,0xfb, | 493 | 0x01,0x33,0xf9,0x57,0xe8,0x0f,0x8f,0xde, |
494 | 0xdb,0xe7,0x27,0xad,0x2e,0x11,0x1b,0x99, | 494 | 0xdf,0x39,0x3d,0x69,0x70,0x88,0xdc,0xcd, |
495 | 0xa6,0xaa,0x28,0x03,0x0f,0xf5,0xdf,0xc3, | 495 | 0x35,0x51,0x40,0x18,0x7f,0xae,0xfe,0x19, |
496 | 0x3f,0x75,0x7c,0xc0,0xf5,0x7d,0xc0,0xf3, | 496 | 0xfb,0xab,0xe6,0x07,0xab,0xee,0x07,0x9b, |
497 | 0x7d,0xd4,0xf3,0x05,0xd5,0xe3,0x03,0xb5, | 497 | 0xee,0xa7,0x98,0x2e,0xaf,0x18,0x1d,0xaf, |
498 | 0xf6,0x43,0xca,0x77,0x42,0xcc,0x71,0x56, | 498 | 0xb2,0x1e,0x53,0xba,0x16,0x63,0x8a,0xb6, |
499 | 0xd8,0x09,0x2f,0xc9,0x1f,0x49,0xbc,0x4a, | 499 | 0xc0,0x49,0x7e,0x48,0xfa,0x4d,0xe2,0x53, |
500 | 0x76,0x42,0xca,0x71,0x42,0xd8,0x71,0x2e, | 500 | 0xb2,0x16,0x53,0x8a,0x16,0xc3,0x89,0x76, |
501 | 0xd9,0x19,0x29,0xa9,0x0a,0x09,0xc3,0xcb, | 501 | 0xc8,0xc9,0x4d,0x48,0x50,0x4e,0x1e,0x5b, |
502 | 0x77,0x44,0xcc,0x65,0x56,0xa0,0x08,0x3f, | 502 | 0xba,0x26,0x63,0x2a,0xb5,0x00,0x41,0xfe, |
503 | 0xcf,0x7f,0x5c,0xfc,0x35,0xf7,0x43,0xcc, | 503 | 0x7b,0xfa,0xe7,0xe1,0xaf,0xba,0x1e,0x63, |
504 | 0x77,0x56,0xcc,0x09,0x57,0xc8,0x0f,0x4f, | 504 | 0xba,0xb6,0x60,0x4a,0xbe,0x40,0x7a,0x7e, |
505 | 0xdc,0x5f,0x36,0x3d,0x4b,0x70,0x44,0xde, | 505 | 0xe2,0xf9,0xb1,0xea,0x5b,0x82,0x26,0xf3, |
506 | 0x65,0x3a,0xa1,0x60,0x38,0xbf,0x6c,0x7c, | 506 | 0x29,0xd5,0x0b,0x01,0xc5,0xfb,0x63,0xe4, |
507 | 0x96,0xf4,0x89,0xc4,0xcb,0x65,0x44,0xa0, | 507 | 0xb7,0xa4,0x4e,0x26,0x5b,0x2a,0x25,0x03, |
508 | 0x64,0x3e,0xa7,0x78,0x2c,0xef,0x15,0x9d, | 508 | 0x21,0xf5,0x3b,0xc1,0x67,0x78,0xac,0xec, |
509 | 0x82,0xb2,0xf0,0x51,0xde,0x1b,0x3b,0xa5, | 509 | 0x15,0x97,0x82,0x8e,0xf0,0xd9,0xdd,0x2b, |
510 | 0x66,0x20,0xab,0x3c,0x05,0x77,0xe0,0xcf, | 510 | 0x31,0x05,0x59,0xe0,0x2b,0xbf,0x06,0x7d, |
511 | 0xbd,0x5e,0x70,0x3a,0xdf,0x61,0x3c,0xb9, | 511 | 0xea,0xf3,0x81,0xd6,0xfb,0x09,0xe5,0xcb, |
512 | 0x74,0x68,0xc6,0x8d,0x68,0xd0,0x8d,0x1c, | 512 | 0xa3,0x46,0x34,0x6b,0x46,0x84,0x68,0xe6, |
513 | 0xd1,0xb5,0x1a,0x41,0xa2,0x7a,0x32,0xe3, | 513 | 0x8d,0xa8,0xd2,0x0d,0x13,0xd1,0x97,0x1a, |
514 | 0x51,0xb4,0x1a,0x47,0xa2,0x6e,0x32,0x9b, | 514 | 0x8d,0xa0,0xd2,0x3d,0x13,0x71,0x94,0xda, |
515 | 0x50,0xa4,0x1c,0x27,0xb7,0x2e,0x4d,0x1a, | 515 | 0x85,0x20,0xe1,0x3d,0xb9,0x72,0x68,0xd2, |
516 | 0x51,0xa2,0x1a,0x33,0xa3,0x56,0x34,0x0b, | 516 | 0x8d,0x10,0xd1,0x9d,0x1a,0xb1,0xa0,0x5a, |
517 | 0x47,0xc4,0x6f,0x66,0x9c,0xa8,0xb4,0x0c, | 517 | 0x3e,0x23,0x7b,0x34,0xe5,0x45,0xa0,0x62, |
518 | 0x47,0xd6,0x6f,0x0a,0x9d,0xc0,0xb3,0x7c, | 518 | 0x3e,0xb3,0x78,0x54,0xee,0x05,0x9b,0xe2, |
519 | 0x54,0xf6,0x05,0xcb,0xe3,0x47,0xb4,0x6e, | 519 | 0xa7,0xb0,0x2e,0x5f,0x1a,0x3d,0xa3,0x72, |
520 | 0x46,0x9a,0x68,0xa2,0x8c,0x30,0xd7,0x5d, | 520 | 0x34,0xd3,0x45,0x14,0x61,0x86,0xba,0xe8, |
521 | 0x0c,0x31,0xd7,0x5b,0x0c,0x25,0xd7,0x23, | 521 | 0x61,0x8e,0xba,0xd8,0x61,0x2e,0xb9,0x18, |
522 | 0x0d,0x35,0xd1,0x43,0x18,0x75,0xae,0xc2, | 522 | 0x69,0xae,0x8a,0x18,0xc3,0xad,0x76,0x10, |
523 | 0x19,0x73,0xa8,0xd6,0x0d,0x0b,0xd1,0xc7, | 523 | 0xcb,0x9d,0x46,0xb0,0x68,0x5e,0x8e,0x38, |
524 | 0x1b,0x6d,0xa4,0x92,0x24,0x93,0x24,0x95, | 524 | 0xdb,0x6d,0x24,0x91,0x24,0x99,0x24,0xa9, |
525 | 0x24,0x81,0x24,0xf9,0x25,0xe9,0x23,0x89, | 525 | 0x24,0x09,0x27,0xc9,0x2f,0x49,0x1c,0x49, |
526 | 0x36,0xc9,0x49,0x48,0x48,0x4e,0x4e,0x5a, | 526 | 0xb6,0x4a,0x4a,0x42,0x42,0x72,0x72,0xd2, |
527 | 0x5a,0x22,0x23,0x33,0x35,0x55,0x40,0x00, | 527 | 0xd1,0x11,0x19,0x99,0xaa,0xaa,0x00,0x03, |
528 | }; | 528 | }; |
529 | 529 | ||
530 | 530 | ||
diff --git a/apps/plugins/rockboy/palette-presets.h b/apps/plugins/rockboy/palette-presets.h new file mode 100644 index 0000000000..86c3898e06 --- /dev/null +++ b/apps/plugins/rockboy/palette-presets.h | |||
@@ -0,0 +1,151 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id: palette-presets.h $ | ||
9 | * | ||
10 | * All files in this archive are subject to the GNU General Public License. | ||
11 | * See the file COPYING in the source tree root for full license agreement. | ||
12 | * | ||
13 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
14 | * KIND, either express or implied. | ||
15 | * | ||
16 | ****************************************************************************/ | ||
17 | #ifndef __PALETTE_PRESETS_H__ | ||
18 | #define __PALETTE_PRESETS_H__ | ||
19 | |||
20 | /* The following is an array of palettes for use in Rockboy. Some were | ||
21 | * originally found in GoomBA for Game Boy Advance by FluBBa. | ||
22 | * | ||
23 | * The first line contains the colors for the background layer. | ||
24 | * The second contains the colors for the window layer. | ||
25 | * The third contains the colors for object 0 layer. | ||
26 | * The fourth contains the colors for object 1 layer. | ||
27 | * | ||
28 | * gnuboy seems to like the colors to be 0xBBGGRR */ | ||
29 | |||
30 | int palettes [17][4][4] = { | ||
31 | { | ||
32 | /* Brown */ { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C }, | ||
33 | { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C }, | ||
34 | { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C }, | ||
35 | { 0x98d0e0, 0x68a0b0, 0x60707C, 0x2C3C3C } | ||
36 | }, | ||
37 | |||
38 | { | ||
39 | /* Gray */ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 }, | ||
40 | { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 }, | ||
41 | { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 }, | ||
42 | { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 } | ||
43 | }, | ||
44 | |||
45 | { | ||
46 | /* Light Gray */ { 0xffffff, 0xc0c0c0, 0x808080, 0x404040 }, | ||
47 | { 0xffffff, 0xc0c0c0, 0x808080, 0x404040 }, | ||
48 | { 0xffffff, 0xc0c0c0, 0x808080, 0x404040 }, | ||
49 | { 0xffffff, 0xc0c0c0, 0x808080, 0x404040 } | ||
50 | }, | ||
51 | |||
52 | { | ||
53 | /* Multi-Color 1 */ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 }, | ||
54 | { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 }, | ||
55 | { 0xffefef, 0xe78c5a, 0x9c4a18, 0x000000 }, | ||
56 | { 0xefefff, 0x635aef, 0x1810ad, 0x000000 } | ||
57 | }, | ||
58 | |||
59 | { | ||
60 | /* Multi-Color 2 */ { 0xffffff, 0xaaaaaa, 0x555555, 0x000000 }, | ||
61 | { 0xe7efd6, 0xc6de8c, 0x6b8429, 0x000000 }, | ||
62 | { 0xffffff, 0x635aef, 0x1810ad, 0x000000 }, | ||
63 | { 0xffffff, 0xe78c5a, 0x9c4a18, 0x000000 } | ||
64 | }, | ||
65 | |||
66 | { | ||
67 | /* Adventure Island */ { 0xffffff, 0xffb59c, 0x009431, 0x000000 }, | ||
68 | { 0xffffff, 0x73cef7, 0x084a8c, 0x9c2121 }, | ||
69 | { 0xdeffff, 0x73c6ef, 0x5263ff, 0x290000 }, | ||
70 | { 0xffffff, 0xa5a5e7, 0x29297b, 0x000042 } | ||
71 | }, | ||
72 | |||
73 | { | ||
74 | /* Adventure Island 2 */ { 0xffffff, 0x75eff7, 0xbd6b29, 0x000000 }, | ||
75 | { 0xffffff, 0x73cef7, 0x084a8c, 0x9c2121 }, | ||
76 | { 0xdeffff, 0x73c6ef, 0x5263ff, 0x290000 }, | ||
77 | { 0xffffff, 0xa5a5e7, 0x29297b, 0x000042 } | ||
78 | }, | ||
79 | |||
80 | { | ||
81 | /* Balloon Kid */ { 0xa5d6ff, 0xe7efff, 0xde8c10, 0x5a1000 }, | ||
82 | { 0xffffff, 0x73cef7, 0x084a8c, 0x9c2121 }, | ||
83 | { 0xc6c6ff, 0x6b6bff, 0x0000ff, 0x000063 }, | ||
84 | { 0xffffff, 0xef42ef, 0x29297b, 0x000042 } | ||
85 | }, | ||
86 | |||
87 | { | ||
88 | /* Batman */ { 0xeff7ff, 0xc88089, 0x445084, 0x001042 }, | ||
89 | { 0xffffff, 0xffa5a5, 0xbd5252, 0xa50000 }, | ||
90 | { 0xffffff, 0xc6a5a5, 0x8c5252, 0x5a0000 }, | ||
91 | { 0xffffff, 0xbdb5ad, 0x7b6b5a, 0x422108 } | ||
92 | }, | ||
93 | |||
94 | { | ||
95 | /* Batman */ { 0xffffff, 0xbdada5, 0x7b5a52, 0x391000 }, | ||
96 | /* Return of Joker */ { 0xffffff, 0xbdada5, 0x7b5a52, 0x391000 }, | ||
97 | { 0xffffff, 0xbdada5, 0x7b5a52, 0x391000 }, | ||
98 | { 0xffffff, 0xbdada5, 0x7b5a52, 0x422108 } | ||
99 | }, | ||
100 | |||
101 | { | ||
102 | /* Bionic Commando */ { 0xfff7ef, 0xadb5ce, 0x2921c6, 0x000039 }, | ||
103 | { 0xffffff, 0xf7ce94, 0xff3910, 0x4a0000 }, | ||
104 | { 0xffffff, 0x84adff, 0x00395a, 0x000000 }, | ||
105 | { 0xefefef, 0x9ca5ad, 0x5a5a6b, 0x081042 } | ||
106 | }, | ||
107 | |||
108 | { | ||
109 | /* Castlevania Adventure */ { 0xe7d6d6, 0xb5a58c, 0x6b5242, 0x181000 }, | ||
110 | { 0xffffff, 0xdba5a5, 0xad5252, 0x840000 }, | ||
111 | { 0xffffff, 0x84e7ff, 0x4252ff, 0x00005a }, | ||
112 | { 0xffffff, 0xceefff, 0x9cdef7, 0x6bb5f7 } | ||
113 | }, | ||
114 | |||
115 | { | ||
116 | /* Donkey Kong Land */ { 0xd1ffe2, 0x89ffa9, 0x48a251, 0x032504 }, | ||
117 | { 0xb4b4ff, 0x4747ff, 0x000080, 0x000000 }, | ||
118 | { 0xb0f2ff, 0x4dc3d6, 0x115ba3, 0x00006a }, | ||
119 | { 0x63fff7, 0x42cec6, 0x217b73, 0x000000 } | ||
120 | }, | ||
121 | |||
122 | { | ||
123 | /* Dr. Mario */ { 0xffffff, 0x66ffff, 0xff4221, 0x521000 }, | ||
124 | { 0xffffff, 0xd6aaaa, 0xad5555, 0x840000 }, | ||
125 | { 0xffffff, 0x84e7ff, 0x4252ff, 0x00008c }, | ||
126 | { 0xffffff, 0x8cceff, 0x5a9cf7, 0x005283 } | ||
127 | }, | ||
128 | |||
129 | { | ||
130 | /* Kirby */ { 0x83ffff, 0x3ea5ff, 0x004273, 0x000933 }, | ||
131 | { 0xffcccc, 0xff7877, 0xc13523, 0x5a0a05 }, | ||
132 | { 0xc4bdff, 0x604df1, 0x29129f, 0x000000 }, | ||
133 | { 0xffffff, 0xaaaaaa, 0x555555, 0x000020 } | ||
134 | }, | ||
135 | |||
136 | { | ||
137 | /* Metroid II */ { 0xdeffef, 0xb2ada2, 0x014284, 0x000000 }, | ||
138 | { 0xffcef7, 0xff6bce, 0x9c007b, 0x000000 }, | ||
139 | { 0x55efff, 0x1352ff, 0x001485, 0x000000 }, | ||
140 | { 0xffefef, 0xe78c5a, 0x9c4a18, 0x210000 } | ||
141 | }, | ||
142 | |||
143 | { | ||
144 | /* Zelda */ { 0xa0ffff, 0x67d767, 0x20558c, 0x071546 }, | ||
145 | { 0xadffff, 0xb78080, 0x592925, 0x000000 }, | ||
146 | { 0x7fb0ff, 0xe78c5a, 0x9c4a18, 0x000000 }, | ||
147 | { 0xefefff, 0x635aef, 0x1810ad, 0x000000 } | ||
148 | } | ||
149 | }; | ||
150 | |||
151 | #endif | ||
diff --git a/apps/plugins/rockboy/palette.c b/apps/plugins/rockboy/palette.c deleted file mode 100644 index 5c5083d247..0000000000 --- a/apps/plugins/rockboy/palette.c +++ /dev/null | |||
@@ -1,153 +0,0 @@ | |||
1 | |||
2 | |||
3 | #include "rockmacros.h" | ||
4 | #include "defs.h" | ||
5 | #include "fb.h" | ||
6 | #include "palette.h" | ||
7 | |||
8 | |||
9 | static byte palmap[32768]; | ||
10 | static byte pallock[256]; | ||
11 | static int palrev[256]; | ||
12 | |||
13 | /* Course color mapping, for when palette is exhausted. */ | ||
14 | static byte crsmap[4][32768]; | ||
15 | static int crsrev[4][256]; | ||
16 | static const int crsmask[4] = { 0x7BDE, 0x739C, 0x6318, 0x4210 }; | ||
17 | |||
18 | enum plstatus | ||
19 | { | ||
20 | pl_unused = 0, | ||
21 | pl_linger, | ||
22 | pl_active, | ||
23 | pl_locked | ||
24 | }; | ||
25 | |||
26 | /* | ||
27 | static byte bestmatch(int c) | ||
28 | { | ||
29 | byte n, best; | ||
30 | int r, g, b; | ||
31 | int r2, g2, b2, c2; | ||
32 | int err, besterr; | ||
33 | |||
34 | r = (c & 0x001F) << 3; | ||
35 | g = (c & 0x03E0) >> 2; | ||
36 | b = (c & 0x7C00) >> 7; | ||
37 | |||
38 | best = 0; | ||
39 | besterr = 1024; | ||
40 | for (n = 1; n; n++) | ||
41 | { | ||
42 | c2 = palrev[n]; | ||
43 | r2 = (c2 & 0x001F) << 3; | ||
44 | g2 = (c2 & 0x03E0) >> 2; | ||
45 | b2 = (c2 & 0x7C00) >> 7; | ||
46 | err = abs(r-r2) + abs(b-b2) + abs(g-g2); | ||
47 | if (err < besterr) | ||
48 | { | ||
49 | besterr = err; | ||
50 | best = n; | ||
51 | } | ||
52 | } | ||
53 | return best; | ||
54 | } | ||
55 | */ | ||
56 | |||
57 | static void makecourse(int c, byte n) | ||
58 | { | ||
59 | int i; | ||
60 | for (i = 0; i < 4; i++) | ||
61 | { | ||
62 | c &= crsmask[i]; | ||
63 | crsmap[i][c] = n; | ||
64 | crsrev[i][n] = c; | ||
65 | } | ||
66 | } | ||
67 | |||
68 | static byte findcourse(int c) | ||
69 | { | ||
70 | int i; | ||
71 | byte n; | ||
72 | for (i = 0; i < 4; i++) | ||
73 | { | ||
74 | c &= crsmask[i]; | ||
75 | n = crsmap[i][c]; | ||
76 | if (crsrev[i][n] == c) | ||
77 | return n; | ||
78 | } | ||
79 | return 0; | ||
80 | } | ||
81 | |||
82 | |||
83 | void pal_lock(byte n) | ||
84 | { | ||
85 | if (!n) return; | ||
86 | if (pallock[n] >= pl_locked) | ||
87 | pallock[n]++; | ||
88 | else pallock[n] = pl_locked; | ||
89 | } | ||
90 | |||
91 | byte pal_getcolor(int c, int r, int g, int b) | ||
92 | { | ||
93 | byte n; | ||
94 | static byte l; | ||
95 | n = palmap[c]; | ||
96 | if (n && pallock[n] && palrev[n] == c) | ||
97 | { | ||
98 | pal_lock(n); | ||
99 | return n; | ||
100 | } | ||
101 | for (n = l+1; n != l; n++) | ||
102 | { | ||
103 | if (!n || pallock[n] /* || n < 16 */) continue; | ||
104 | pal_lock(n); | ||
105 | palmap[c] = n; | ||
106 | palrev[n] = c; | ||
107 | makecourse(c, n); | ||
108 | vid_setpal(n, r, g, b); | ||
109 | return (l = n); | ||
110 | } | ||
111 | n = findcourse(c); | ||
112 | pal_lock(n); | ||
113 | return n; | ||
114 | } | ||
115 | |||
116 | void pal_release(byte n) | ||
117 | { | ||
118 | if (pallock[n] >= pl_locked) | ||
119 | pallock[n]--; | ||
120 | } | ||
121 | |||
122 | |||
123 | void pal_expire(void) | ||
124 | { | ||
125 | int i; | ||
126 | for (i = 0; i < 256; i++) | ||
127 | if (pallock[i] && pallock[i] < pl_locked) | ||
128 | pallock[i]--; | ||
129 | } | ||
130 | |||
131 | |||
132 | void pal_set332(void) | ||
133 | { | ||
134 | int i, r, g, b; | ||
135 | |||
136 | fb.indexed = 0; | ||
137 | fb.cc[0].r = 5; | ||
138 | fb.cc[1].r = 5; | ||
139 | fb.cc[2].r = 6; | ||
140 | fb.cc[0].l = 0; | ||
141 | fb.cc[1].l = 3; | ||
142 | fb.cc[2].l = 6; | ||
143 | |||
144 | i = 0; | ||
145 | for (b = 0; b < 4; b++) for (g = 0; g < 8; g++) for (r = 0; r < 8; r++) | ||
146 | vid_setpal(i++, (r<<5)|(r<<2)|(r>>1), | ||
147 | (g<<5)|(g<<2)|(g>>1), (b<<6)|(b<<4)|(b<<2)|b); | ||
148 | } | ||
149 | |||
150 | |||
151 | |||
152 | |||
153 | |||
diff --git a/apps/plugins/rockboy/palette.h b/apps/plugins/rockboy/palette.h deleted file mode 100644 index 94f660b71e..0000000000 --- a/apps/plugins/rockboy/palette.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | void pal_lock(byte n) ICODE_ATTR; | ||
2 | byte pal_getcolor(int c, int r, int g, int b) ICODE_ATTR; | ||
3 | void pal_release(byte n) ICODE_ATTR; | ||
4 | void pal_expire(void) ICODE_ATTR; | ||
5 | void pal_set332(void) ICODE_ATTR; | ||
6 | void vid_setpal(int i, int r, int g, int b) ICODE_ATTR; | ||
diff --git a/apps/plugins/rockboy/pcm.h b/apps/plugins/rockboy/pcm.h index 3719933520..a616ce9897 100644 --- a/apps/plugins/rockboy/pcm.h +++ b/apps/plugins/rockboy/pcm.h | |||
@@ -7,10 +7,10 @@ | |||
7 | 7 | ||
8 | struct pcm | 8 | struct pcm |
9 | { | 9 | { |
10 | int hz, len; | 10 | int hz, len; |
11 | int stereo; | 11 | int stereo; |
12 | byte *buf; | 12 | byte *buf; |
13 | int pos; | 13 | int pos; |
14 | }; | 14 | }; |
15 | 15 | ||
16 | extern struct pcm pcm; | 16 | extern struct pcm pcm; |
diff --git a/apps/plugins/rockboy/rbsound.c b/apps/plugins/rockboy/rbsound.c index 6371212ca8..41d00c1b73 100644 --- a/apps/plugins/rockboy/rbsound.c +++ b/apps/plugins/rockboy/rbsound.c | |||
@@ -1,11 +1,13 @@ | |||
1 | #include "rockmacros.h" | 1 | #include "rockmacros.h" |
2 | #include "defs.h" | 2 | #include "defs.h" |
3 | #include "pcm.h" | 3 | #include "pcm.h" |
4 | #include "rc.h" | ||
5 | 4 | ||
6 | //#define ONEBUF // Note: I think the single buffer implementation is more responsive with sound(less lag) | 5 | /*#define ONEBUF*/ |
7 | // but it creates more choppyness overall to the sound. 2 buffer's don't seem to make | 6 | /* Note: I think the single buffer implementation is more |
8 | // a difference, but 4 buffers is definately noticable | 7 | * responsive with sound(less lag) but it creates more |
8 | * choppyness overall to the sound. 2 buffer's don't seem to | ||
9 | * make a difference, but 4 buffers is definately noticable | ||
10 | */ | ||
9 | 11 | ||
10 | struct pcm pcm IBSS_ATTR; | 12 | struct pcm pcm IBSS_ATTR; |
11 | 13 | ||
@@ -17,11 +19,6 @@ bool sound = 1; | |||
17 | #endif | 19 | #endif |
18 | #define BUF_SIZE 1024 | 20 | #define BUF_SIZE 1024 |
19 | 21 | ||
20 | rcvar_t pcm_exports[] = | ||
21 | { | ||
22 | RCV_END | ||
23 | }; | ||
24 | |||
25 | #if CONFIG_CODEC == SWCODEC && !defined(SIMULATOR) | 22 | #if CONFIG_CODEC == SWCODEC && !defined(SIMULATOR) |
26 | 23 | ||
27 | #ifndef ONEBUF | 24 | #ifndef ONEBUF |
@@ -48,46 +45,45 @@ void get_more(unsigned char** start, size_t* size) | |||
48 | 45 | ||
49 | void pcm_init(void) | 46 | void pcm_init(void) |
50 | { | 47 | { |
51 | if(!sound) return; | 48 | newly_started = true; |
52 | |||
53 | newly_started = true; | ||
54 | 49 | ||
55 | pcm.hz = 11025; | 50 | pcm.hz = 11025; |
56 | pcm.stereo = 1; | 51 | pcm.stereo = 1; |
57 | 52 | ||
58 | pcm.len = BUF_SIZE; | 53 | pcm.len = BUF_SIZE; |
59 | if(!buf){ | 54 | if(!buf){ |
60 | buf = my_malloc(pcm.len * N_BUFS); | 55 | buf = my_malloc(pcm.len * N_BUFS); |
61 | gmbuf = my_malloc(pcm.len * N_BUFS*sizeof (short)); | 56 | gmbuf = my_malloc(pcm.len * N_BUFS*sizeof (short)); |
62 | pcm.buf = buf; | 57 | pcm.buf = buf; |
63 | pcm.pos = 0; | 58 | pcm.pos = 0; |
64 | #ifndef ONEBUF | 59 | #ifndef ONEBUF |
65 | curbuf = gmcurbuf= 0; | 60 | curbuf = gmcurbuf= 0; |
66 | #endif | 61 | #endif |
67 | memset(gmbuf, 0, pcm.len * N_BUFS *sizeof(short)); | 62 | memset(gmbuf, 0, pcm.len * N_BUFS *sizeof(short)); |
68 | memset(buf, 0, pcm.len * N_BUFS); | 63 | memset(buf, 0, pcm.len * N_BUFS); |
69 | } | 64 | } |
70 | 65 | ||
71 | rb->pcm_play_stop(); | 66 | rb->pcm_play_stop(); |
72 | 67 | ||
73 | rb->pcm_set_frequency(11025); // 44100 22050 11025 | 68 | rb->pcm_set_frequency(11025); /* 44100 22050 11025 */ |
74 | } | 69 | } |
75 | 70 | ||
76 | void pcm_close(void) | 71 | void pcm_close(void) |
77 | { | 72 | { |
78 | memset(&pcm, 0, sizeof pcm); | 73 | memset(&pcm, 0, sizeof pcm); |
79 | newly_started = true; | 74 | newly_started = true; |
80 | rb->pcm_play_stop(); | 75 | rb->pcm_play_stop(); |
81 | rb->pcm_set_frequency(44100); | 76 | rb->pcm_set_frequency(44100); |
82 | } | 77 | } |
83 | 78 | ||
84 | int pcm_submit(void) | 79 | int pcm_submit(void) |
85 | { | 80 | { |
86 | register int i; | 81 | if (!options.sound) return 1; |
82 | register int i; | ||
87 | 83 | ||
88 | if (!sound) { | 84 | if (!sound) { |
89 | pcm.pos = 0; | 85 | pcm.pos = 0; |
90 | return 0; | 86 | return 0; |
91 | } | 87 | } |
92 | 88 | ||
93 | if (pcm.pos < pcm.len) return 1; | 89 | if (pcm.pos < pcm.len) return 1; |
@@ -98,7 +94,7 @@ int pcm_submit(void) | |||
98 | #endif | 94 | #endif |
99 | pcm.pos = 0; | 95 | pcm.pos = 0; |
100 | 96 | ||
101 | // gotta convert the 8 bit buffer to 16 | 97 | /* gotta convert the 8 bit buffer to 16 */ |
102 | for(i=0; i<pcm.len;i++) | 98 | for(i=0; i<pcm.len;i++) |
103 | #ifdef ONEBUF | 99 | #ifdef ONEBUF |
104 | gmbuf[i] = (pcm.buf[i]<<8)-0x8000; | 100 | gmbuf[i] = (pcm.buf[i]<<8)-0x8000; |
@@ -112,7 +108,9 @@ int pcm_submit(void) | |||
112 | newly_started = false; | 108 | newly_started = false; |
113 | } | 109 | } |
114 | 110 | ||
115 | // this while loop and done play are in place to make sure the sound timing is correct(although it's not) | 111 | /* this while loop and done play are in place to make sure the sound timing |
112 | * is correct(although it's not) | ||
113 | */ | ||
116 | #ifdef ONEBUF | 114 | #ifdef ONEBUF |
117 | while(doneplay==0) rb->yield(); | 115 | while(doneplay==0) rb->yield(); |
118 | doneplay=0; | 116 | doneplay=0; |
@@ -120,7 +118,7 @@ int pcm_submit(void) | |||
120 | return 1; | 118 | return 1; |
121 | } | 119 | } |
122 | #else | 120 | #else |
123 | static byte buf1_unal[(BUF_SIZE / sizeof(short)) + 2]; // to make sure 4 byte aligned | 121 | static byte buf1_unal[(BUF_SIZE / sizeof(short)) + 2]; /* 4 byte aligned */ |
124 | void pcm_init(void) | 122 | void pcm_init(void) |
125 | { | 123 | { |
126 | pcm.hz = 11025; | 124 | pcm.hz = 11025; |
diff --git a/apps/plugins/rockboy/rc.h b/apps/plugins/rockboy/rc.h deleted file mode 100644 index cb65d2a7cc..0000000000 --- a/apps/plugins/rockboy/rc.h +++ /dev/null | |||
@@ -1,62 +0,0 @@ | |||
1 | #ifndef __RC_H__ | ||
2 | #define __RC_H__ | ||
3 | |||
4 | typedef enum rctype | ||
5 | { | ||
6 | rcv_end, | ||
7 | rcv_int, | ||
8 | rcv_string, | ||
9 | rcv_vector, | ||
10 | rcv_bool | ||
11 | } rcvtype_t; | ||
12 | |||
13 | |||
14 | typedef struct rcvar_s | ||
15 | { | ||
16 | char *name; | ||
17 | int type; | ||
18 | int len; | ||
19 | void *mem; | ||
20 | } rcvar_t; | ||
21 | |||
22 | #define RCV_END { 0, rcv_end, 0, 0 } | ||
23 | #define RCV_INT(n,v) { (n), rcv_int, 1, (v) } | ||
24 | #define RCV_STRING(n,v) { (n), rcv_string, 0, (v) } | ||
25 | #define RCV_VECTOR(n,v,l) { (n), rcv_vector, (l), (v) } | ||
26 | #define RCV_BOOL(n,v) { (n), rcv_bool, 1, (v) } | ||
27 | |||
28 | typedef struct rccmd_s | ||
29 | { | ||
30 | char *name; | ||
31 | int (*func)(int, char **); | ||
32 | } rccmd_t; | ||
33 | |||
34 | #define RCC(n,f) { (n), (f) } | ||
35 | #define RCC_END { 0, 0 } | ||
36 | |||
37 | void rc_export(rcvar_t *v); | ||
38 | void rc_exportvars(rcvar_t *vars); | ||
39 | |||
40 | int rc_findvar(char *name); | ||
41 | |||
42 | int rc_setvar_n(int i, int c, char **v); | ||
43 | int rc_setvar(char *name, int c, char **v); | ||
44 | |||
45 | int rc_getint_n(int i); | ||
46 | int *rc_getvec_n(int i); | ||
47 | char *rc_getstr_n(int i); | ||
48 | |||
49 | int rc_getint(char *name); | ||
50 | int *rc_getvec(char *name); | ||
51 | char *rc_getstr(char *name); | ||
52 | |||
53 | int rc_bindkey(char *keyname, char *cmd); | ||
54 | int rc_unbindkey(char *keyname); | ||
55 | void rc_unbindall(void); | ||
56 | |||
57 | int rc_sourcefile(char *filename); | ||
58 | void rc_dokey(int key, int st); | ||
59 | |||
60 | int rc_command(char *line); | ||
61 | |||
62 | #endif | ||
diff --git a/apps/plugins/rockboy/rccmds.c b/apps/plugins/rockboy/rccmds.c deleted file mode 100644 index c9375b69b5..0000000000 --- a/apps/plugins/rockboy/rccmds.c +++ /dev/null | |||
@@ -1,122 +0,0 @@ | |||
1 | |||
2 | |||
3 | |||
4 | |||
5 | #include "rockmacros.h" | ||
6 | |||
7 | #include "defs.h" | ||
8 | #include "rc.h" | ||
9 | #include "hw.h" | ||
10 | #include "emu.h" | ||
11 | #include "save.h" | ||
12 | #include "split.h" | ||
13 | |||
14 | /* | ||
15 | * the set command is used to set rc-exported variables. | ||
16 | */ | ||
17 | |||
18 | static int cmd_set(int argc, char **argv) | ||
19 | { | ||
20 | if (argc < 3) | ||
21 | return -1; | ||
22 | return rc_setvar(argv[1], argc-2, argv+2); | ||
23 | } | ||
24 | |||
25 | |||
26 | |||
27 | /* | ||
28 | * the following commands allow keys to be bound to perform rc commands. | ||
29 | */ | ||
30 | |||
31 | static int cmd_reset(int argc, char **argv) | ||
32 | { | ||
33 | (void)argc; | ||
34 | (void)argv; | ||
35 | emu_reset(); | ||
36 | return 0; | ||
37 | } | ||
38 | |||
39 | static int cmd_savestate(int argc, char **argv) | ||
40 | { | ||
41 | state_save(argc > 1 ? atoi(argv[1]) : -1); | ||
42 | return 0; | ||
43 | } | ||
44 | |||
45 | static int cmd_loadstate(int argc, char **argv) | ||
46 | { | ||
47 | state_load(argc > 1 ? atoi(argv[1]) : -1); | ||
48 | return 0; | ||
49 | } | ||
50 | |||
51 | |||
52 | |||
53 | /* | ||
54 | * table of command names and the corresponding functions to be called | ||
55 | */ | ||
56 | |||
57 | rccmd_t rccmds[] = | ||
58 | { | ||
59 | RCC("set", cmd_set), | ||
60 | RCC("reset", cmd_reset), | ||
61 | RCC("savestate", cmd_savestate), | ||
62 | RCC("loadstate", cmd_loadstate), | ||
63 | RCC_END | ||
64 | }; | ||
65 | |||
66 | |||
67 | |||
68 | |||
69 | |||
70 | int rc_command(char *line) | ||
71 | { | ||
72 | int i, argc, ret; | ||
73 | char *argv[128], linecopy[500]; | ||
74 | |||
75 | // linecopy = malloc(strlen(line)+1); | ||
76 | strcpy(linecopy, line); | ||
77 | |||
78 | argc = splitline(argv, (sizeof argv)/(sizeof argv[0]), linecopy); | ||
79 | if (!argc) | ||
80 | { | ||
81 | // free(linecopy); | ||
82 | return -1; | ||
83 | } | ||
84 | |||
85 | for (i = 0; rccmds[i].name; i++) | ||
86 | { | ||
87 | if (!strcmp(argv[0], rccmds[i].name)) | ||
88 | { | ||
89 | ret = rccmds[i].func(argc, argv); | ||
90 | // free(linecopy); | ||
91 | return ret; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | /* printf("unknown command: %s\n", argv[0]); */ | ||
96 | // free(linecopy); | ||
97 | |||
98 | return -1; | ||
99 | } | ||
100 | |||
101 | |||
102 | |||
103 | |||
104 | |||
105 | |||
106 | |||
107 | |||
108 | |||
109 | |||
110 | |||
111 | |||
112 | |||
113 | |||
114 | |||
115 | |||
116 | |||
117 | |||
118 | |||
119 | |||
120 | |||
121 | |||
122 | |||
diff --git a/apps/plugins/rockboy/rcvars.c b/apps/plugins/rockboy/rcvars.c deleted file mode 100644 index a47794aa6f..0000000000 --- a/apps/plugins/rockboy/rcvars.c +++ /dev/null | |||
@@ -1,211 +0,0 @@ | |||
1 | #include "rockmacros.h" | ||
2 | |||
3 | #include "defs.h" | ||
4 | #include "rc.h" | ||
5 | |||
6 | static rcvar_t rcvars[150]; | ||
7 | |||
8 | static int nvars; | ||
9 | |||
10 | void rc_export(rcvar_t *v) | ||
11 | { | ||
12 | const rcvar_t end = RCV_END; | ||
13 | |||
14 | if (!v) return; | ||
15 | nvars++; | ||
16 | // rcvars = realloc(rcvars, sizeof (rcvar_t) * (nvars+1)); | ||
17 | // if (!rcvars) | ||
18 | // die("out of memory adding rcvar %s\n", v->name); | ||
19 | rcvars[nvars-1] = *v; | ||
20 | rcvars[nvars] = end; | ||
21 | } | ||
22 | |||
23 | void rc_exportvars(rcvar_t *vars) | ||
24 | { | ||
25 | while(vars->type) | ||
26 | rc_export(vars++); | ||
27 | } | ||
28 | |||
29 | |||
30 | |||
31 | int rc_findvar(char *name) | ||
32 | { | ||
33 | int i; | ||
34 | if (!rcvars) return -1; | ||
35 | for (i = 0; rcvars[i].name; i++) | ||
36 | if (!strcmp(rcvars[i].name, name)) | ||
37 | break; | ||
38 | if (!rcvars[i].name) | ||
39 | return -1; | ||
40 | return i; | ||
41 | } | ||
42 | |||
43 | |||
44 | int my_atoi(const char *s) | ||
45 | { | ||
46 | int a = 0; | ||
47 | if (*s == '0') | ||
48 | { | ||
49 | s++; | ||
50 | if (*s == 'x' || *s == 'X') | ||
51 | { | ||
52 | s++; | ||
53 | while (*s) | ||
54 | { | ||
55 | if (isdigit(*s)) | ||
56 | a = (a<<4) + *s - '0'; | ||
57 | else if (strchr("ABCDEF", *s)) | ||
58 | a = (a<<4) + *s - 'A' + 10; | ||
59 | else if (strchr("abcdef", *s)) | ||
60 | a = (a<<4) + *s - 'a' + 10; | ||
61 | else return a; | ||
62 | s++; | ||
63 | } | ||
64 | return a; | ||
65 | } | ||
66 | while (*s) | ||
67 | { | ||
68 | if (strchr("01234567", *s)) | ||
69 | a = (a<<3) + *s - '0'; | ||
70 | else return a; | ||
71 | s++; | ||
72 | } | ||
73 | return a; | ||
74 | } | ||
75 | if (*s == '-') | ||
76 | { | ||
77 | s++; | ||
78 | for (;;) | ||
79 | { | ||
80 | if (isdigit(*s)) | ||
81 | a = (a*10) + *s - '0'; | ||
82 | else return -a; | ||
83 | s++; | ||
84 | } | ||
85 | } | ||
86 | while (*s) | ||
87 | { | ||
88 | if (isdigit(*s)) | ||
89 | a = (a*10) + *s - '0'; | ||
90 | else return a; | ||
91 | s++; | ||
92 | } | ||
93 | return a; | ||
94 | } | ||
95 | |||
96 | |||
97 | int rc_setvar_n(int i, int c, char **v) | ||
98 | { | ||
99 | int j; | ||
100 | int *n; | ||
101 | char **s; | ||
102 | |||
103 | switch (rcvars[i].type) | ||
104 | { | ||
105 | case rcv_int: | ||
106 | if (c < 1) return -1; | ||
107 | n = (int *)rcvars[i].mem; | ||
108 | *n = my_atoi(v[0]); | ||
109 | return 0; | ||
110 | case rcv_string: | ||
111 | if (c < 1) return -1; | ||
112 | s = (char **)rcvars[i].mem; | ||
113 | // if (*s) free(*s); | ||
114 | strcpy(*s,v[0]); | ||
115 | if (!*s) | ||
116 | die("out of memory setting rcvar %s\n", rcvars[i].name); | ||
117 | return 0; | ||
118 | case rcv_vector: | ||
119 | if (c > rcvars[i].len) | ||
120 | c = rcvars[i].len; | ||
121 | for (j = 0; j < c ; j++) | ||
122 | ((int *)rcvars[i].mem)[j] = my_atoi(v[j]); | ||
123 | return 0; | ||
124 | case rcv_bool: | ||
125 | if (c < 1 || atoi(v[0]) || strchr("yYtT", v[0][0])) | ||
126 | *(int *)rcvars[i].mem = 1; | ||
127 | else if (strchr("0nNfF", v[0][0])) | ||
128 | *(int *)rcvars[i].mem = 0; | ||
129 | else | ||
130 | return -1; | ||
131 | return 0; | ||
132 | } | ||
133 | return -1; | ||
134 | } | ||
135 | |||
136 | |||
137 | int rc_setvar(char *name, int c, char **v) | ||
138 | { | ||
139 | int i; | ||
140 | |||
141 | i = rc_findvar(name); | ||
142 | if (i < 0) return i; | ||
143 | |||
144 | return rc_setvar_n(i, c, v); | ||
145 | } | ||
146 | |||
147 | |||
148 | void *rc_getmem_n(int i) | ||
149 | { | ||
150 | return rcvars[i].mem; | ||
151 | } | ||
152 | |||
153 | |||
154 | void *rc_getmem(char *name) | ||
155 | { | ||
156 | int i; | ||
157 | i = rc_findvar(name); | ||
158 | if (i < 0) return NULL; | ||
159 | return rcvars[i].mem; | ||
160 | } | ||
161 | |||
162 | int rc_getint_n(int i) | ||
163 | { | ||
164 | if (i < 0) return 0; | ||
165 | switch (rcvars[i].type) | ||
166 | { | ||
167 | case rcv_int: | ||
168 | case rcv_bool: | ||
169 | return *(int *)rcvars[i].mem; | ||
170 | } | ||
171 | return 0; | ||
172 | } | ||
173 | |||
174 | int *rc_getvec_n(int i) | ||
175 | { | ||
176 | if (i < 0) return NULL; | ||
177 | switch (rcvars[i].type) | ||
178 | { | ||
179 | case rcv_int: | ||
180 | case rcv_bool: | ||
181 | case rcv_vector: | ||
182 | return (int *)rcvars[i].mem; | ||
183 | } | ||
184 | return NULL; | ||
185 | } | ||
186 | |||
187 | char *rc_getstr_n(int i) | ||
188 | { | ||
189 | if (i < 0) return 0; | ||
190 | switch (rcvars[i].type) | ||
191 | { | ||
192 | case rcv_string: | ||
193 | return *(char **)rcvars[i].mem; | ||
194 | } | ||
195 | return 0; | ||
196 | } | ||
197 | |||
198 | int rc_getint(char *name) | ||
199 | { | ||
200 | return rc_getint_n(rc_findvar(name)); | ||
201 | } | ||
202 | |||
203 | int *rc_getvec(char *name) | ||
204 | { | ||
205 | return rc_getvec_n(rc_findvar(name)); | ||
206 | } | ||
207 | |||
208 | char *rc_getstr(char *name) | ||
209 | { | ||
210 | return rc_getstr_n(rc_findvar(name)); | ||
211 | } | ||
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c index beefb210b0..01e4de51c5 100644 --- a/apps/plugins/rockboy/rockboy.c +++ b/apps/plugins/rockboy/rockboy.c | |||
@@ -86,7 +86,7 @@ void setoptions (void) | |||
86 | snprintf(optionsave, sizeof(optionsave), "%s/%s", savedir, optionname); | 86 | snprintf(optionsave, sizeof(optionsave), "%s/%s", savedir, optionname); |
87 | 87 | ||
88 | fd = open(optionsave, O_RDONLY); | 88 | fd = open(optionsave, O_RDONLY); |
89 | if(fd < 0) // no options to read, set defaults | 89 | if(fd < 0) /* no options to read, set defaults */ |
90 | { | 90 | { |
91 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) | 91 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) |
92 | options.A=BUTTON_ON; | 92 | options.A=BUTTON_ON; |
@@ -136,13 +136,31 @@ void setoptions (void) | |||
136 | options.START=BUTTON_SCROLL_UP; | 136 | options.START=BUTTON_SCROLL_UP; |
137 | options.SELECT=BUTTON_SCROLL_DOWN; | 137 | options.SELECT=BUTTON_SCROLL_DOWN; |
138 | options.MENU=BUTTON_POWER; | 138 | options.MENU=BUTTON_POWER; |
139 | #elif CONFIG_KEYPAD == IAUDIO_X5_PAD | ||
140 | options.A=BUTTON_PLAY; | ||
141 | options.B=BUTTON_REC; | ||
142 | options.START=BUTTON_SELECT; | ||
143 | options.SELECT=BUTTON_NONE; | ||
144 | options.MENU=BUTTON_POWER; | ||
145 | |||
146 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | ||
147 | options.A=BUTTON_PLAY; | ||
148 | options.B=BUTTON_FF; | ||
149 | options.START=BUTTON_REW; | ||
150 | options.SELECT=BUTTON_NONE; | ||
151 | options.MENU=BUTTON_POWER; | ||
139 | #endif | 152 | #endif |
140 | 153 | ||
141 | options.maxskip=4; | 154 | options.maxskip=4; |
142 | options.fps=0; | 155 | options.fps=0; |
143 | options.showstats=0; | 156 | options.showstats=0; |
157 | #if (LCD_WIDTH>=160) && (LCD_HEIGHT>=144) | ||
144 | options.fullscreen=0; | 158 | options.fullscreen=0; |
159 | #else | ||
160 | options.fullscreen=1; | ||
161 | #endif | ||
145 | options.sound=1; | 162 | options.sound=1; |
163 | options.pal=0; | ||
146 | } | 164 | } |
147 | else | 165 | else |
148 | read(fd,&options, sizeof(options)); | 166 | read(fd,&options, sizeof(options)); |
@@ -197,9 +215,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
197 | rb->wheel_send_events(false); | 215 | rb->wheel_send_events(false); |
198 | #endif | 216 | #endif |
199 | 217 | ||
200 | /* now go ahead and have fun! */ | ||
201 | /* rb->splash(HZ*2, true, "Rockboy v0.3"); */ | ||
202 | /* rb->lcd_clear_display(); */ | ||
203 | gnuboy_main(parameter); | 218 | gnuboy_main(parameter); |
204 | 219 | ||
205 | #ifdef HAVE_WHEEL_POSITION | 220 | #ifdef HAVE_WHEEL_POSITION |
diff --git a/apps/plugins/rockboy/rockmacros.h b/apps/plugins/rockboy/rockmacros.h index 3bfcf94728..06db25b433 100644 --- a/apps/plugins/rockboy/rockmacros.h +++ b/apps/plugins/rockboy/rockmacros.h | |||
@@ -28,24 +28,30 @@ void *my_malloc(size_t size); | |||
28 | 28 | ||
29 | extern struct plugin_api* rb; | 29 | extern struct plugin_api* rb; |
30 | extern int shut,cleanshut; | 30 | extern int shut,cleanshut; |
31 | void vid_update(int scanline); | ||
32 | void vid_init(void); | 31 | void vid_init(void); |
33 | inline void vid_begin(void); | 32 | inline void vid_begin(void); |
34 | void vid_end(void); | ||
35 | void die(char *message, ...); | 33 | void die(char *message, ...); |
36 | void setmallocpos(void *pointer); | 34 | void setmallocpos(void *pointer); |
37 | void vid_settitle(char *title); | ||
38 | void *sys_timer(void); | 35 | void *sys_timer(void); |
39 | int sys_elapsed(long *oldtick); | 36 | int sys_elapsed(long *oldtick); |
40 | void sys_sleep(int us); | ||
41 | int pcm_submit(void); | 37 | int pcm_submit(void); |
42 | void pcm_init(void); | 38 | void pcm_init(void); |
39 | void sound_dirty(void); | ||
43 | void doevents(void) ICODE_ATTR; | 40 | void doevents(void) ICODE_ATTR; |
44 | void ev_poll(void); | 41 | void ev_poll(void); |
45 | int do_user_menu(void); | 42 | int do_user_menu(void); |
46 | void loadstate(int fd); | 43 | void loadstate(int fd); |
47 | void savestate(int fd); | 44 | void savestate(int fd); |
48 | void setvidmode(int mode); | 45 | void setvidmode(int mode); |
46 | void set_pal(void); | ||
47 | #if !defined(HAVE_LCD_COLOR) | ||
48 | void vid_update(int scanline); | ||
49 | #endif | ||
50 | #ifdef DYNAREC | ||
51 | extern struct dynarec_block newblock; | ||
52 | void dynamic_recompile (struct dynarec_block *newblock); | ||
53 | #endif | ||
54 | |||
49 | #define USER_MENU_QUIT -2 | 55 | #define USER_MENU_QUIT -2 |
50 | 56 | ||
51 | /* Disable ICODE for the ARMs */ | 57 | /* Disable ICODE for the ARMs */ |
@@ -54,6 +60,12 @@ void setvidmode(int mode); | |||
54 | #define ICODE_ATTR | 60 | #define ICODE_ATTR |
55 | #endif | 61 | #endif |
56 | 62 | ||
63 | /* Disable IBSS when using dynarec since it won't fit */ | ||
64 | #ifdef DYNAREC | ||
65 | #undef IBSS_ATTR | ||
66 | #define IBSS_ATTR | ||
67 | #endif | ||
68 | |||
57 | /* libc functions */ | 69 | /* libc functions */ |
58 | #define isdigit(c) ((c) >= '0' && (c) <= '9') | 70 | #define isdigit(c) ((c) >= '0' && (c) <= '9') |
59 | #define isalpha(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && ((c) <= 'Z'))) | 71 | #define isalpha(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && ((c) <= 'Z'))) |
@@ -101,12 +113,13 @@ void setvidmode(int mode); | |||
101 | #define tolower(_A_) (isupper(_A_) ? (_A_ - 'A' + 'a') : _A_) | 113 | #define tolower(_A_) (isupper(_A_) ? (_A_ - 'A' + 'a') : _A_) |
102 | 114 | ||
103 | /* Using #define isn't enough with GCC 4.0.1 */ | 115 | /* Using #define isn't enough with GCC 4.0.1 */ |
104 | void* memcpy(void* dst, const void* src, size_t size); | 116 | void* memcpy(void* dst, const void* src, size_t size) ICODE_ATTR; |
105 | 117 | ||
106 | struct options { | 118 | struct options { |
107 | int A, B, START, SELECT, MENU; | 119 | int A, B, START, SELECT, MENU; |
108 | int frameskip, fps, maxskip; | 120 | int frameskip, fps, maxskip; |
109 | int sound, fullscreen, showstats; | 121 | int sound, fullscreen, showstats; |
122 | int pal; | ||
110 | }; | 123 | }; |
111 | 124 | ||
112 | extern struct options options; | 125 | extern struct options options; |
diff --git a/apps/plugins/rockboy/rtc-gb.h b/apps/plugins/rockboy/rtc-gb.h index 39c6145161..94772da923 100644 --- a/apps/plugins/rockboy/rtc-gb.h +++ b/apps/plugins/rockboy/rtc-gb.h | |||
@@ -6,12 +6,12 @@ | |||
6 | 6 | ||
7 | struct rtc | 7 | struct rtc |
8 | { | 8 | { |
9 | int batt; | 9 | int batt; |
10 | int sel; | 10 | int sel; |
11 | int latch; | 11 | int latch; |
12 | int d, h, m, s, t; | 12 | int d, h, m, s, t; |
13 | int stop, carry; | 13 | int stop, carry; |
14 | byte regs[8]; | 14 | byte regs[8]; |
15 | }; | 15 | }; |
16 | 16 | ||
17 | extern struct rtc rtc; | 17 | extern struct rtc rtc; |
@@ -21,5 +21,5 @@ void rtc_write(byte b); | |||
21 | void rtc_tick(void); | 21 | void rtc_tick(void); |
22 | void rtc_save_internal(int fd); | 22 | void rtc_save_internal(int fd); |
23 | void rtc_load_internal(int fd); | 23 | void rtc_load_internal(int fd); |
24 | 24 | ||
25 | #endif | 25 | #endif |
diff --git a/apps/plugins/rockboy/rtc.c b/apps/plugins/rockboy/rtc.c index 05ad69864a..0b011a828c 100644 --- a/apps/plugins/rockboy/rtc.c +++ b/apps/plugins/rockboy/rtc.c | |||
@@ -7,119 +7,109 @@ | |||
7 | #include "defs.h" | 7 | #include "defs.h" |
8 | #include "mem.h" | 8 | #include "mem.h" |
9 | #include "rtc-gb.h" | 9 | #include "rtc-gb.h" |
10 | #include "rc.h" | ||
11 | |||
12 | struct rtc rtc IBSS_ATTR; | ||
13 | |||
14 | static int syncrtc = 1; | ||
15 | |||
16 | rcvar_t rtc_exports[] = | ||
17 | { | ||
18 | RCV_BOOL("syncrtc", &syncrtc), | ||
19 | RCV_END | ||
20 | }; | ||
21 | 10 | ||
11 | struct rtc rtc; | ||
22 | 12 | ||
23 | void rtc_latch(byte b) | 13 | void rtc_latch(byte b) |
24 | { | 14 | { |
25 | if ((rtc.latch ^ b) & b & 1) | 15 | if ((rtc.latch ^ b) & b & 1) |
26 | { | 16 | { |
27 | rtc.regs[0] = rtc.s; | 17 | rtc.regs[0] = rtc.s; |
28 | rtc.regs[1] = rtc.m; | 18 | rtc.regs[1] = rtc.m; |
29 | rtc.regs[2] = rtc.h; | 19 | rtc.regs[2] = rtc.h; |
30 | rtc.regs[3] = rtc.d; | 20 | rtc.regs[3] = rtc.d; |
31 | rtc.regs[4] = (rtc.d>>9) | (rtc.stop<<6) | (rtc.carry<<7); | 21 | rtc.regs[4] = (rtc.d>>9) | (rtc.stop<<6) | (rtc.carry<<7); |
32 | rtc.regs[5] = 0xff; | 22 | rtc.regs[5] = 0xff; |
33 | rtc.regs[6] = 0xff; | 23 | rtc.regs[6] = 0xff; |
34 | rtc.regs[7] = 0xff; | 24 | rtc.regs[7] = 0xff; |
35 | } | 25 | } |
36 | rtc.latch = b; | 26 | rtc.latch = b; |
37 | } | 27 | } |
38 | 28 | ||
39 | void rtc_write(byte b) | 29 | void rtc_write(byte b) |
40 | { | 30 | { |
41 | /* printf("write %02X: %02X (%d)\n", rtc.sel, b, b); */ | 31 | /* printf("write %02X: %02X (%d)\n", rtc.sel, b, b); */ |
42 | if (!(rtc.sel & 8)) return; | 32 | if (!(rtc.sel & 8)) return; |
43 | switch (rtc.sel & 7) | 33 | switch (rtc.sel & 7) |
44 | { | 34 | { |
45 | case 0: | 35 | case 0: |
46 | rtc.s = rtc.regs[0] = b; | 36 | rtc.s = rtc.regs[0] = b; |
47 | while (rtc.s >= 60) rtc.s -= 60; | 37 | while (rtc.s >= 60) rtc.s -= 60; |
48 | break; | 38 | break; |
49 | case 1: | 39 | case 1: |
50 | rtc.m = rtc.regs[1] = b; | 40 | rtc.m = rtc.regs[1] = b; |
51 | while (rtc.m >= 60) rtc.m -= 60; | 41 | while (rtc.m >= 60) rtc.m -= 60; |
52 | break; | 42 | break; |
53 | case 2: | 43 | case 2: |
54 | rtc.h = rtc.regs[2] = b; | 44 | rtc.h = rtc.regs[2] = b; |
55 | while (rtc.h >= 24) rtc.h -= 24; | 45 | while (rtc.h >= 24) rtc.h -= 24; |
56 | break; | 46 | break; |
57 | case 3: | 47 | case 3: |
58 | rtc.regs[3] = b; | 48 | rtc.regs[3] = b; |
59 | rtc.d = (rtc.d & 0x100) | b; | 49 | rtc.d = (rtc.d & 0x100) | b; |
60 | break; | 50 | break; |
61 | case 4: | 51 | case 4: |
62 | rtc.regs[4] = b; | 52 | rtc.regs[4] = b; |
63 | rtc.d = (rtc.d & 0xff) | ((b&1)<<9); | 53 | rtc.d = (rtc.d & 0xff) | ((b&1)<<9); |
64 | rtc.stop = (b>>6)&1; | 54 | rtc.stop = (b>>6)&1; |
65 | rtc.carry = (b>>7)&1; | 55 | rtc.carry = (b>>7)&1; |
66 | break; | 56 | break; |
67 | } | 57 | } |
68 | } | 58 | } |
69 | 59 | ||
70 | void rtc_tick() | 60 | void rtc_tick() |
71 | { | 61 | { |
72 | if (rtc.stop) return; | 62 | if (rtc.stop) return; |
73 | if (++rtc.t == 60) | 63 | if (++rtc.t == 60) |
74 | { | 64 | { |
75 | if (++rtc.s == 60) | 65 | if (++rtc.s == 60) |
76 | { | 66 | { |
77 | if (++rtc.m == 60) | 67 | if (++rtc.m == 60) |
78 | { | 68 | { |
79 | if (++rtc.h == 24) | 69 | if (++rtc.h == 24) |
80 | { | 70 | { |
81 | if (++rtc.d == 365) | 71 | if (++rtc.d == 365) |
82 | { | 72 | { |
83 | rtc.d = 0; | 73 | rtc.d = 0; |
84 | rtc.carry = 1; | 74 | rtc.carry = 1; |
85 | } | 75 | } |
86 | rtc.h = 0; | 76 | rtc.h = 0; |
87 | } | 77 | } |
88 | rtc.m = 0; | 78 | rtc.m = 0; |
89 | } | 79 | } |
90 | rtc.s = 0; | 80 | rtc.s = 0; |
91 | } | 81 | } |
92 | rtc.t = 0; | 82 | rtc.t = 0; |
93 | } | 83 | } |
94 | } | 84 | } |
95 | 85 | ||
96 | void rtc_save_internal(int fd) | 86 | void rtc_save_internal(int fd) |
97 | { | 87 | { |
98 | (void)fd; // stop compiler complaining | 88 | (void)fd; /* stop compiler complaining */ |
99 | // TODO | 89 | /* TODO */ |
100 | // fprintf(f, "%d %d %d %02d %02d %02d %02d\n%d\n", | 90 | /* fprintf(f, "%d %d %d %02d %02d %02d %02d\n%d\n", |
101 | // rtc.carry, rtc.stop, rtc.d, rtc.h, rtc.m, rtc.s, rtc.t, | 91 | rtc.carry, rtc.stop, rtc.d, rtc.h, rtc.m, rtc.s, rtc.t, |
102 | // time(0)); | 92 | time(0)); */ |
103 | } | 93 | } |
104 | 94 | ||
105 | void rtc_load_internal(int fd) | 95 | void rtc_load_internal(int fd) |
106 | { | 96 | { |
107 | //int rt = 0; | 97 | /* int rt = 0; */ |
108 | (void)fd; // stop compiler complaining | 98 | (void)fd; /* stop compiler complaining */ |
109 | // TODO | 99 | /* TODO */ |
110 | /* fscanf( | 100 | /* fscanf( |
111 | f, "%d %d %d %02d %02d %02d %02d\n%d\n", | 101 | f, "%d %d %d %02d %02d %02d %02d\n%d\n", |
112 | &rtc.carry, &rtc.stop, &rtc.d, | 102 | &rtc.carry, &rtc.stop, &rtc.d, |
113 | &rtc.h, &rtc.m, &rtc.s, &rtc.t, &rt); | 103 | &rtc.h, &rtc.m, &rtc.s, &rtc.t, &rt); |
114 | while (rtc.t >= 60) rtc.t -= 60; | 104 | while (rtc.t >= 60) rtc.t -= 60; |
115 | while (rtc.s >= 60) rtc.s -= 60; | 105 | while (rtc.s >= 60) rtc.s -= 60; |
116 | while (rtc.m >= 60) rtc.m -= 60; | 106 | while (rtc.m >= 60) rtc.m -= 60; |
117 | while (rtc.h >= 24) rtc.h -= 24; | 107 | while (rtc.h >= 24) rtc.h -= 24; |
118 | while (rtc.d >= 365) rtc.d -= 365; | 108 | while (rtc.d >= 365) rtc.d -= 365; |
119 | rtc.stop &= 1; | 109 | rtc.stop &= 1; |
120 | rtc.carry &= 1; | 110 | rtc.carry &= 1; |
121 | if (rt) rt = (time(0) - rt) * 60; | 111 | if (rt) rt = (time(0) - rt) * 60; |
122 | if (syncrtc) while (rt-- > 0) rtc_tick(); */ | 112 | if (syncrtc) while (rt-- > 0) rtc_tick(); */ |
123 | } | 113 | } |
124 | 114 | ||
125 | 115 | ||
diff --git a/apps/plugins/rockboy/save.c b/apps/plugins/rockboy/save.c index 0277eb53d1..2332811911 100644 --- a/apps/plugins/rockboy/save.c +++ b/apps/plugins/rockboy/save.c | |||
@@ -30,9 +30,9 @@ | |||
30 | 30 | ||
31 | struct svar | 31 | struct svar |
32 | { | 32 | { |
33 | int len; | 33 | int len; |
34 | char key[4]; | 34 | char key[4]; |
35 | void *ptr; | 35 | void *ptr; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | static int ver; | 38 | static int ver; |
@@ -41,247 +41,243 @@ static int hramofs, hiofs, palofs, oamofs, wavofs; | |||
41 | 41 | ||
42 | struct svar svars[] = | 42 | struct svar svars[] = |
43 | { | 43 | { |
44 | I4("GbSs", &ver), | 44 | I4("GbSs", &ver), |
45 | 45 | ||
46 | I2("PC ", &PC), | 46 | I2("PC ", &PC), |
47 | I2("SP ", &SP), | 47 | I2("SP ", &SP), |
48 | I2("HL ", &HL), | 48 | I2("HL ", &HL), |
49 | #ifdef DYNAREC | 49 | #ifdef DYNAREC |
50 | I1("A ", &A), | 50 | I1("A ", &A), |
51 | I1("B ", &A), | 51 | I1("B ", &A), |
52 | I1("C ", &A), | 52 | I1("C ", &A), |
53 | I1("D ", &A), | 53 | I1("D ", &A), |
54 | I1("E ", &A), | 54 | I1("E ", &A), |
55 | I1("F ", &A), | 55 | I1("F ", &A), |
56 | #else | 56 | #else |
57 | I2("BC ", &BC), | 57 | I2("BC ", &BC), |
58 | I2("DE ", &DE), | 58 | I2("DE ", &DE), |
59 | I2("AF ", &AF), | 59 | I2("AF ", &AF), |
60 | #endif | 60 | #endif |
61 | I4("IME ", &cpu.ime), | 61 | I4("IME ", &cpu.ime), |
62 | I4("ima ", &cpu.ima), | 62 | I4("ima ", &cpu.ima), |
63 | I4("spd ", &cpu.speed), | 63 | I4("spd ", &cpu.speed), |
64 | I4("halt", &cpu.halt), | 64 | I4("halt", &cpu.halt), |
65 | I4("div ", &cpu.div), | 65 | I4("div ", &cpu.div), |
66 | I4("tim ", &cpu.tim), | 66 | I4("tim ", &cpu.tim), |
67 | I4("lcdc", &cpu.lcdc), | 67 | I4("lcdc", &cpu.lcdc), |
68 | I4("snd ", &cpu.snd), | 68 | I4("snd ", &cpu.snd), |
69 | 69 | ||
70 | I1("ints", &hw.ilines), | 70 | I1("ints", &hw.ilines), |
71 | I1("pad ", &hw.pad), | 71 | I1("pad ", &hw.pad), |
72 | I4("cgb ", &hw.cgb), | 72 | I4("cgb ", &hw.cgb), |
73 | I4("gba ", &hw.gba), | 73 | |
74 | 74 | I4("mbcm", &mbc.model), | |
75 | I4("mbcm", &mbc.model), | 75 | I4("romb", &mbc.rombank), |
76 | I4("romb", &mbc.rombank), | 76 | I4("ramb", &mbc.rambank), |
77 | I4("ramb", &mbc.rambank), | 77 | I4("enab", &mbc.enableram), |
78 | I4("enab", &mbc.enableram), | 78 | I4("batt", &mbc.batt), |
79 | I4("batt", &mbc.batt), | 79 | |
80 | 80 | I4("rtcR", &rtc.sel), | |
81 | I4("rtcR", &rtc.sel), | 81 | I4("rtcL", &rtc.latch), |
82 | I4("rtcL", &rtc.latch), | 82 | I4("rtcC", &rtc.carry), |
83 | I4("rtcC", &rtc.carry), | 83 | I4("rtcS", &rtc.stop), |
84 | I4("rtcS", &rtc.stop), | 84 | I4("rtcd", &rtc.d), |
85 | I4("rtcd", &rtc.d), | 85 | I4("rtch", &rtc.h), |
86 | I4("rtch", &rtc.h), | 86 | I4("rtcm", &rtc.m), |
87 | I4("rtcm", &rtc.m), | 87 | I4("rtcs", &rtc.s), |
88 | I4("rtcs", &rtc.s), | 88 | I4("rtct", &rtc.t), |
89 | I4("rtct", &rtc.t), | 89 | I1("rtR8", &rtc.regs[0]), |
90 | I1("rtR8", &rtc.regs[0]), | 90 | I1("rtR9", &rtc.regs[1]), |
91 | I1("rtR9", &rtc.regs[1]), | 91 | I1("rtRA", &rtc.regs[2]), |
92 | I1("rtRA", &rtc.regs[2]), | 92 | I1("rtRB", &rtc.regs[3]), |
93 | I1("rtRB", &rtc.regs[3]), | 93 | I1("rtRC", &rtc.regs[4]), |
94 | I1("rtRC", &rtc.regs[4]), | 94 | |
95 | 95 | I4("S1on", &snd.ch[0].on), | |
96 | I4("S1on", &snd.ch[0].on), | 96 | I4("S1p ", &snd.ch[0].pos), |
97 | I4("S1p ", &snd.ch[0].pos), | 97 | I4("S1c ", &snd.ch[0].cnt), |
98 | I4("S1c ", &snd.ch[0].cnt), | 98 | I4("S1ec", &snd.ch[0].encnt), |
99 | I4("S1ec", &snd.ch[0].encnt), | 99 | I4("S1sc", &snd.ch[0].swcnt), |
100 | I4("S1sc", &snd.ch[0].swcnt), | 100 | |
101 | I4("S1sf", &snd.ch[0].swfreq), | 101 | I4("S2on", &snd.ch[1].on), |
102 | 102 | I4("S2p ", &snd.ch[1].pos), | |
103 | I4("S2on", &snd.ch[1].on), | 103 | I4("S2c ", &snd.ch[1].cnt), |
104 | I4("S2p ", &snd.ch[1].pos), | 104 | I4("S2ec", &snd.ch[1].encnt), |
105 | I4("S2c ", &snd.ch[1].cnt), | 105 | |
106 | I4("S2ec", &snd.ch[1].encnt), | 106 | I4("S3on", &snd.ch[2].on), |
107 | 107 | I4("S3p ", &snd.ch[2].pos), | |
108 | I4("S3on", &snd.ch[2].on), | 108 | I4("S3c ", &snd.ch[2].cnt), |
109 | I4("S3p ", &snd.ch[2].pos), | 109 | |
110 | I4("S3c ", &snd.ch[2].cnt), | 110 | I4("S4on", &snd.ch[3].on), |
111 | 111 | I4("S4p ", &snd.ch[3].pos), | |
112 | I4("S4on", &snd.ch[3].on), | 112 | I4("S4c ", &snd.ch[3].cnt), |
113 | I4("S4p ", &snd.ch[3].pos), | 113 | I4("S4ec", &snd.ch[3].encnt), |
114 | I4("S4c ", &snd.ch[3].cnt), | 114 | |
115 | I4("S4ec", &snd.ch[3].encnt), | 115 | I4("hdma", &hw.hdma), |
116 | 116 | ||
117 | I4("hdma", &hw.hdma), | 117 | I4("sram", &sramblock), |
118 | 118 | I4("iram", &iramblock), | |
119 | I4("sram", &sramblock), | 119 | I4("vram", &vramblock), |
120 | I4("iram", &iramblock), | 120 | I4("hi ", &hiofs), |
121 | I4("vram", &vramblock), | 121 | I4("pal ", &palofs), |
122 | I4("hi ", &hiofs), | 122 | I4("oam ", &oamofs), |
123 | I4("pal ", &palofs), | 123 | |
124 | I4("oam ", &oamofs), | 124 | /* NOSAVE is a special code to prevent the rest of the table |
125 | I4("wav ", &wavofs), | 125 | * from being saved, used to support old stuff for backwards |
126 | 126 | * compatibility... */ | |
127 | /* NOSAVE is a special code to prevent the rest of the table | 127 | NOSAVE, |
128 | * from being saved, used to support old stuff for backwards | 128 | |
129 | * compatibility... */ | 129 | /* the following are obsolete as of 0x104 */ |
130 | NOSAVE, | 130 | |
131 | 131 | I4("hram", &hramofs), | |
132 | /* the following are obsolete as of 0x104 */ | 132 | /* I4("gba ", &hw.gba), */ |
133 | 133 | /* I4("S1sf", &snd.ch[0].swfreq), */ | |
134 | I4("hram", &hramofs), | 134 | I4("wav ", &wavofs), |
135 | 135 | ||
136 | R(P1), R(SB), R(SC), | 136 | R(P1), R(SB), R(SC), |
137 | R(DIV), R(TIMA), R(TMA), R(TAC), | 137 | R(DIV), R(TIMA), R(TMA), R(TAC), |
138 | R(IE), R(IF), | 138 | R(IE), R(IF), |
139 | R(LCDC), R(STAT), R(LY), R(LYC), | 139 | R(LCDC), R(STAT), R(LY), R(LYC), |
140 | R(SCX), R(SCY), R(WX), R(WY), | 140 | R(SCX), R(SCY), R(WX), R(WY), |
141 | R(BGP), R(OBP0), R(OBP1), | 141 | R(BGP), R(OBP0), R(OBP1), |
142 | R(DMA), | 142 | R(DMA), |
143 | 143 | ||
144 | R(VBK), R(SVBK), R(KEY1), | 144 | R(VBK), R(SVBK), R(KEY1), |
145 | R(BCPS), R(BCPD), R(OCPS), R(OCPD), | 145 | R(BCPS), R(BCPD), R(OCPS), R(OCPD), |
146 | 146 | ||
147 | R(NR10), R(NR11), R(NR12), R(NR13), R(NR14), | 147 | R(NR10), R(NR11), R(NR12), R(NR13), R(NR14), |
148 | R(NR21), R(NR22), R(NR23), R(NR24), | 148 | R(NR21), R(NR22), R(NR23), R(NR24), |
149 | R(NR30), R(NR31), R(NR32), R(NR33), R(NR34), | 149 | R(NR30), R(NR31), R(NR32), R(NR33), R(NR34), |
150 | R(NR41), R(NR42), R(NR43), R(NR44), | 150 | R(NR41), R(NR42), R(NR43), R(NR44), |
151 | R(NR50), R(NR51), R(NR52), | 151 | R(NR50), R(NR51), R(NR52), |
152 | 152 | ||
153 | I1("DMA1", &R_HDMA1), | 153 | I1("DMA1", &R_HDMA1), |
154 | I1("DMA2", &R_HDMA2), | 154 | I1("DMA2", &R_HDMA2), |
155 | I1("DMA3", &R_HDMA3), | 155 | I1("DMA3", &R_HDMA3), |
156 | I1("DMA4", &R_HDMA4), | 156 | I1("DMA4", &R_HDMA4), |
157 | I1("DMA5", &R_HDMA5), | 157 | I1("DMA5", &R_HDMA5), |
158 | 158 | ||
159 | END | 159 | END |
160 | }; | 160 | }; |
161 | 161 | ||
162 | 162 | ||
163 | void loadstate(int fd) | 163 | void loadstate(int fd) |
164 | { | 164 | { |
165 | int i, j; | 165 | int i, j; |
166 | byte buf[4096]; | 166 | byte buf[4096]; |
167 | un32 (*header)[2] = (un32 (*)[2])buf; | 167 | un32 (*header)[2] = (un32 (*)[2])buf; |
168 | un32 d; | 168 | un32 d; |
169 | int irl = hw.cgb ? 8 : 2; | 169 | int irl = hw.cgb ? 8 : 2; |
170 | int vrl = hw.cgb ? 4 : 2; | 170 | int vrl = hw.cgb ? 4 : 2; |
171 | int srl = mbc.ramsize << 1; | 171 | int srl = mbc.ramsize << 1; |
172 | size_t base_offset; | 172 | size_t base_offset; |
173 | 173 | ||
174 | ver = hramofs = hiofs = palofs = oamofs = wavofs = 0; | 174 | ver = hramofs = hiofs = palofs = oamofs = wavofs = 0; |
175 | 175 | ||
176 | base_offset = lseek(fd, 0, SEEK_CUR); | 176 | base_offset = lseek(fd, 0, SEEK_CUR); |
177 | 177 | ||
178 | read(fd,buf, 4096); | 178 | read(fd,buf, 4096); |
179 | 179 | ||
180 | for (j = 0; header[j][0]; j++) | 180 | for (j = 0; header[j][0]; j++) |
181 | { | 181 | { |
182 | for (i = 0; svars[i].ptr; i++) | 182 | for (i = 0; svars[i].ptr; i++) |
183 | { | 183 | { |
184 | if (header[j][0] != *(un32 *)svars[i].key) | 184 | if (header[j][0] != *(un32 *)svars[i].key) |
185 | continue; | 185 | continue; |
186 | d = LIL(header[j][1]); | 186 | d = LIL(header[j][1]); |
187 | switch (svars[i].len) | 187 | switch (svars[i].len) |
188 | { | 188 | { |
189 | case 1: | 189 | case 1: |
190 | *(byte *)svars[i].ptr = d; | 190 | *(byte *)svars[i].ptr = d; |
191 | break; | 191 | break; |
192 | case 2: | 192 | case 2: |
193 | *(un16 *)svars[i].ptr = d; | 193 | *(un16 *)svars[i].ptr = d; |
194 | break; | 194 | break; |
195 | case 4: | 195 | case 4: |
196 | *(un32 *)svars[i].ptr = d; | 196 | *(un32 *)svars[i].ptr = d; |
197 | break; | 197 | break; |
198 | } | 198 | } |
199 | break; | 199 | break; |
200 | } | 200 | } |
201 | } | 201 | } |
202 | 202 | ||
203 | /* obsolete as of version 0x104 */ | 203 | /* obsolete as of version 0x104 */ |
204 | if (hramofs) memcpy(ram.hi+128, buf+hramofs, 127); | 204 | if (hramofs) memcpy(ram.hi+128, buf+hramofs, 127); |
205 | 205 | if (wavofs) memcpy(ram.hi+48, buf+wavofs, 16); | |
206 | if (hiofs) memcpy(ram.hi, buf+hiofs, sizeof ram.hi); | 206 | |
207 | if (palofs) memcpy(lcd.pal, buf+palofs, sizeof lcd.pal); | 207 | if (hiofs) memcpy(ram.hi, buf+hiofs, sizeof ram.hi); |
208 | if (oamofs) memcpy(lcd.oam.mem, buf+oamofs, sizeof lcd.oam); | 208 | if (palofs) memcpy(lcd.pal, buf+palofs, sizeof lcd.pal); |
209 | 209 | if (oamofs) memcpy(lcd.oam.mem, buf+oamofs, sizeof lcd.oam); | |
210 | if (wavofs) memcpy(snd.wave, buf+wavofs, sizeof snd.wave); | 210 | |
211 | else memcpy(snd.wave, ram.hi+0x30, 16); /* patch data from older files */ | 211 | lseek(fd, base_offset + (iramblock << 12), SEEK_SET); |
212 | 212 | read(fd,ram.ibank, 4096*irl); | |
213 | lseek(fd, base_offset + (iramblock << 12), SEEK_SET); | 213 | |
214 | read(fd,ram.ibank, 4096*irl); | 214 | lseek(fd, base_offset + (vramblock << 12), SEEK_SET); |
215 | 215 | read(fd,lcd.vbank, 4096*vrl); | |
216 | lseek(fd, base_offset + (vramblock << 12), SEEK_SET); | 216 | |
217 | read(fd,lcd.vbank, 4096*vrl); | 217 | lseek(fd, base_offset + (sramblock << 12), SEEK_SET); |
218 | 218 | read(fd,ram.sbank, 4096*srl); | |
219 | lseek(fd, base_offset + (sramblock << 12), SEEK_SET); | 219 | vram_dirty(); |
220 | read(fd,ram.sbank, 4096*srl); | 220 | pal_dirty(); |
221 | vram_dirty(); | 221 | sound_dirty(); |
222 | pal_dirty(); | 222 | mem_updatemap(); |
223 | sound_dirty(); | ||
224 | mem_updatemap(); | ||
225 | } | 223 | } |
226 | 224 | ||
227 | void savestate(int fd) | 225 | void savestate(int fd) |
228 | { | 226 | { |
229 | int i; | 227 | int i; |
230 | byte buf[4096]; | 228 | byte buf[4096]; |
231 | un32 (*header)[2] = (un32 (*)[2])buf; | 229 | un32 (*header)[2] = (un32 (*)[2])buf; |
232 | un32 d = 0; | 230 | un32 d = 0; |
233 | int irl = hw.cgb ? 8 : 2; | 231 | int irl = hw.cgb ? 8 : 2; |
234 | int vrl = hw.cgb ? 4 : 2; | 232 | int vrl = hw.cgb ? 4 : 2; |
235 | int srl = mbc.ramsize << 1; | 233 | int srl = mbc.ramsize << 1; |
236 | size_t base_offset; | 234 | size_t base_offset; |
237 | 235 | ||
238 | ver = 0x105; | 236 | ver = 0x104; |
239 | iramblock = 1; | 237 | iramblock = 1; |
240 | vramblock = 1+irl; | 238 | vramblock = 1+irl; |
241 | sramblock = 1+irl+vrl; | 239 | sramblock = 1+irl+vrl; |
242 | wavofs = 4096 - 784; | 240 | hiofs = 4096 - 768; |
243 | hiofs = 4096 - 768; | 241 | palofs = 4096 - 512; |
244 | palofs = 4096 - 512; | 242 | oamofs = 4096 - 256; |
245 | oamofs = 4096 - 256; | 243 | memset(buf, 0, sizeof buf); |
246 | memset(buf, 0, sizeof buf); | 244 | |
247 | 245 | for (i = 0; svars[i].len > 0; i++) | |
248 | for (i = 0; svars[i].len > 0; i++) | 246 | { |
249 | { | 247 | header[i][0] = *(un32 *)svars[i].key; |
250 | header[i][0] = *(un32 *)svars[i].key; | 248 | switch (svars[i].len) |
251 | switch (svars[i].len) | 249 | { |
252 | { | 250 | case 1: |
253 | case 1: | 251 | d = *(byte *)svars[i].ptr; |
254 | d = *(byte *)svars[i].ptr; | 252 | break; |
255 | break; | 253 | case 2: |
256 | case 2: | 254 | d = *(un16 *)svars[i].ptr; |
257 | d = *(un16 *)svars[i].ptr; | 255 | break; |
258 | break; | 256 | case 4: |
259 | case 4: | 257 | d = *(un32 *)svars[i].ptr; |
260 | d = *(un32 *)svars[i].ptr; | 258 | break; |
261 | break; | 259 | } |
262 | } | 260 | header[i][1] = LIL(d); |
263 | header[i][1] = LIL(d); | 261 | } |
264 | } | 262 | header[i][0] = header[i][1] = 0; |
265 | header[i][0] = header[i][1] = 0; | 263 | |
266 | 264 | memcpy(buf+hiofs, ram.hi, sizeof ram.hi); | |
267 | memcpy(buf+hiofs, ram.hi, sizeof ram.hi); | 265 | memcpy(buf+palofs, lcd.pal, sizeof lcd.pal); |
268 | memcpy(buf+palofs, lcd.pal, sizeof lcd.pal); | 266 | memcpy(buf+oamofs, lcd.oam.mem, sizeof lcd.oam); |
269 | memcpy(buf+oamofs, lcd.oam.mem, sizeof lcd.oam); | 267 | |
270 | memcpy(buf+wavofs, snd.wave, sizeof snd.wave); | 268 | /* calculate base offset for output file */ |
271 | 269 | /* (we'll seek relative to that from now on) */ | |
272 | /* calculate base offset for output file */ | 270 | base_offset = lseek(fd, 0, SEEK_CUR); |
273 | /* (we'll seek relative to that from now on) */ | 271 | write(fd,buf, 4096); |
274 | base_offset = lseek(fd, 0, SEEK_CUR); | 272 | |
275 | write(fd,buf, 4096); | 273 | lseek(fd, base_offset + (iramblock << 12), SEEK_SET); |
276 | 274 | write(fd,ram.ibank, 4096*irl); | |
277 | lseek(fd, base_offset + (iramblock << 12), SEEK_SET); | 275 | |
278 | write(fd,ram.ibank, 4096*irl); | 276 | lseek(fd, base_offset + (vramblock << 12), SEEK_SET); |
279 | 277 | write(fd,lcd.vbank, 4096*vrl); | |
280 | lseek(fd, base_offset + (vramblock << 12), SEEK_SET); | 278 | |
281 | write(fd,lcd.vbank, 4096*vrl); | 279 | lseek(fd, base_offset + (sramblock << 12), SEEK_SET); |
282 | 280 | write(fd,ram.sbank, 4096*srl); | |
283 | lseek(fd, base_offset + (sramblock << 12), SEEK_SET); | ||
284 | write(fd,ram.sbank, 4096*srl); | ||
285 | } | 281 | } |
286 | 282 | ||
287 | 283 | ||
diff --git a/apps/plugins/rockboy/sound.c b/apps/plugins/rockboy/sound.c index deeacc7bbf..707bb6b956 100644 --- a/apps/plugins/rockboy/sound.c +++ b/apps/plugins/rockboy/sound.c | |||
@@ -8,63 +8,38 @@ | |||
8 | #include "cpu-gb.h" | 8 | #include "cpu-gb.h" |
9 | #include "hw.h" | 9 | #include "hw.h" |
10 | #include "regs.h" | 10 | #include "regs.h" |
11 | #include "rc.h" | ||
12 | #include "noise.h" | 11 | #include "noise.h" |
13 | 12 | ||
14 | 13 | ||
15 | static const byte dmgwave[16] = | ||
16 | { | ||
17 | 0xac, 0xdd, 0xda, 0x48, | ||
18 | 0x36, 0x02, 0xcf, 0x16, | ||
19 | 0x2c, 0x04, 0xe5, 0x2c, | ||
20 | 0xac, 0xdd, 0xda, 0x48 | ||
21 | }; | ||
22 | |||
23 | static const byte cgbwave[16] = | ||
24 | { | ||
25 | 0x00, 0xff, 0x00, 0xff, | ||
26 | 0x00, 0xff, 0x00, 0xff, | ||
27 | 0x00, 0xff, 0x00, 0xff, | ||
28 | 0x00, 0xff, 0x00, 0xff, | ||
29 | }; | ||
30 | |||
31 | |||
32 | static const byte sqwave[4][8] = | 14 | static const byte sqwave[4][8] = |
33 | { | 15 | { |
34 | { 0, 0,-1, 0, 0, 0, 0, 0 }, | 16 | { 0, 0,-1, 0, 0, 0, 0, 0 }, |
35 | { 0,-1,-1, 0, 0, 0, 0, 0 }, | 17 | { 0,-1,-1, 0, 0, 0, 0, 0 }, |
36 | { -1,-1,-1,-1, 0, 0, 0, 0 }, | 18 | { 0,-1,-1,-1,-1, 0, 0, 0 }, |
37 | { -1, 0, 0,-1,-1,-1,-1,-1 } | 19 | { -1, 0, 0,-1,-1,-1,-1,-1 } |
38 | }; | 20 | }; |
39 | 21 | ||
40 | static const int freqtab[8] = | 22 | static const int freqtab[8] = |
41 | { | 23 | { |
42 | (1<<14)*2, | 24 | (1<<18)*2, |
43 | (1<<14), | 25 | (1<<18), |
44 | (1<<14)/2, | 26 | (1<<18)/2, |
45 | (1<<14)/3, | 27 | (1<<18)/3, |
46 | (1<<14)/4, | 28 | (1<<18)/4, |
47 | (1<<14)/5, | 29 | (1<<18)/5, |
48 | (1<<14)/6, | 30 | (1<<18)/6, |
49 | (1<<14)/7 | 31 | (1<<18)/7 |
50 | }; | 32 | }; |
51 | 33 | ||
52 | struct snd snd IBSS_ATTR; | 34 | struct snd snd IBSS_ATTR; |
53 | int pcm_submit(void); | ||
54 | 35 | ||
55 | #define RATE (snd.rate) | 36 | #define RATE (snd.rate) |
56 | #define WAVE (snd.wave) /* ram.hi+0x30 */ | 37 | #define WAVE (ram.hi+0x30) |
57 | #define S1 (snd.ch[0]) | 38 | #define S1 (snd.ch[0]) |
58 | #define S2 (snd.ch[1]) | 39 | #define S2 (snd.ch[1]) |
59 | #define S3 (snd.ch[2]) | 40 | #define S3 (snd.ch[2]) |
60 | #define S4 (snd.ch[3]) | 41 | #define S4 (snd.ch[3]) |
61 | 42 | ||
62 | rcvar_t sound_exports[] = | ||
63 | { | ||
64 | RCV_END | ||
65 | }; | ||
66 | |||
67 | |||
68 | static void s1_freq_d(int d) | 43 | static void s1_freq_d(int d) |
69 | { | 44 | { |
70 | if (RATE > (d<<4)) S1.freq = 0; | 45 | if (RATE > (d<<4)) S1.freq = 0; |
@@ -86,14 +61,13 @@ static void s2_freq(void) | |||
86 | static void s3_freq(void) | 61 | static void s3_freq(void) |
87 | { | 62 | { |
88 | int d = 2048 - (((R_NR34&7)<<8) + R_NR33); | 63 | int d = 2048 - (((R_NR34&7)<<8) + R_NR33); |
89 | if (RATE > (d<<3)) S3.freq = 0; | 64 | if (RATE > d) S3.freq = 0; |
90 | else S3.freq = (RATE << 21)/d; | 65 | else S3.freq = (RATE << 21)/d; |
91 | } | 66 | } |
92 | 67 | ||
93 | static void s4_freq(void) | 68 | static void s4_freq(void) |
94 | { | 69 | { |
95 | S4.freq = (freqtab[R_NR43&7] >> (R_NR43 >> 4)) * RATE; | 70 | S4.freq = (freqtab[R_NR43&7] >> (R_NR43 >> 4)) * RATE; |
96 | if (S4.freq >> 18) S4.freq = 1<<18; | ||
97 | } | 71 | } |
98 | 72 | ||
99 | void sound_dirty(void) | 73 | void sound_dirty(void) |
@@ -103,13 +77,13 @@ void sound_dirty(void) | |||
103 | S1.envol = R_NR12 >> 4; | 77 | S1.envol = R_NR12 >> 4; |
104 | S1.endir = (R_NR12>>3) & 1; | 78 | S1.endir = (R_NR12>>3) & 1; |
105 | S1.endir |= S1.endir - 1; | 79 | S1.endir |= S1.endir - 1; |
106 | S1.enlen = (R_NR12 & 7) << 15; | 80 | S1.enlen = (R_NR12 & 3) << 15; |
107 | s1_freq(); | 81 | s1_freq(); |
108 | S2.len = (64-(R_NR21&63)) << 13; | 82 | S2.len = (64-(R_NR21&63)) << 13; |
109 | S2.envol = R_NR22 >> 4; | 83 | S2.envol = R_NR22 >> 4; |
110 | S2.endir = (R_NR22>>3) & 1; | 84 | S2.endir = (R_NR22>>3) & 1; |
111 | S2.endir |= S2.endir - 1; | 85 | S2.endir |= S2.endir - 1; |
112 | S2.enlen = (R_NR22 & 7) << 15; | 86 | S2.enlen = (R_NR22 & 3) << 15; |
113 | s2_freq(); | 87 | s2_freq(); |
114 | S3.len = (256-R_NR31) << 20; | 88 | S3.len = (256-R_NR31) << 20; |
115 | s3_freq(); | 89 | s3_freq(); |
@@ -117,16 +91,16 @@ void sound_dirty(void) | |||
117 | S4.envol = R_NR42 >> 4; | 91 | S4.envol = R_NR42 >> 4; |
118 | S4.endir = (R_NR42>>3) & 1; | 92 | S4.endir = (R_NR42>>3) & 1; |
119 | S4.endir |= S4.endir - 1; | 93 | S4.endir |= S4.endir - 1; |
120 | S4.enlen = (R_NR42 & 7) << 15; | 94 | S4.enlen = (R_NR42 & 3) << 15; |
121 | s4_freq(); | 95 | s4_freq(); |
122 | } | 96 | } |
123 | 97 | ||
124 | void sound_off(void) | 98 | void sound_reset(void) |
125 | { | 99 | { |
126 | memset(&S1, 0, sizeof S1); | 100 | int i; |
127 | memset(&S2, 0, sizeof S2); | 101 | memset(&snd, 0, sizeof snd); |
128 | memset(&S3, 0, sizeof S3); | 102 | if (pcm.hz) snd.rate = (1<<21) / pcm.hz; |
129 | memset(&S4, 0, sizeof S4); | 103 | else snd.rate = 0; |
130 | R_NR10 = 0x80; | 104 | R_NR10 = 0x80; |
131 | R_NR11 = 0xBF; | 105 | R_NR11 = 0xBF; |
132 | R_NR12 = 0xF3; | 106 | R_NR12 = 0xF3; |
@@ -137,7 +111,7 @@ void sound_off(void) | |||
137 | R_NR30 = 0x7F; | 111 | R_NR30 = 0x7F; |
138 | R_NR31 = 0xFF; | 112 | R_NR31 = 0xFF; |
139 | R_NR32 = 0x9F; | 113 | R_NR32 = 0x9F; |
140 | R_NR33 = 0xBF; | 114 | R_NR34 = 0xBF; |
141 | R_NR41 = 0xFF; | 115 | R_NR41 = 0xFF; |
142 | R_NR42 = 0x00; | 116 | R_NR42 = 0x00; |
143 | R_NR43 = 0x00; | 117 | R_NR43 = 0x00; |
@@ -145,23 +119,13 @@ void sound_off(void) | |||
145 | R_NR50 = 0x77; | 119 | R_NR50 = 0x77; |
146 | R_NR51 = 0xF3; | 120 | R_NR51 = 0xF3; |
147 | R_NR52 = 0xF1; | 121 | R_NR52 = 0xF1; |
122 | for (i = 0; i < 16; i++) WAVE[i] = -(i&1); | ||
148 | sound_dirty(); | 123 | sound_dirty(); |
149 | } | 124 | } |
150 | 125 | ||
151 | void sound_reset(void) | ||
152 | { | ||
153 | memset(&snd, 0, sizeof snd); | ||
154 | if (pcm.hz) snd.rate = (1<<21) / pcm.hz; | ||
155 | else snd.rate = 0; | ||
156 | memcpy(WAVE, hw.cgb ? cgbwave : dmgwave, 16); | ||
157 | memcpy(ram.hi+0x30, WAVE, 16); | ||
158 | sound_off(); | ||
159 | } | ||
160 | |||
161 | void sound_mix(void) | 126 | void sound_mix(void) |
162 | { | 127 | { |
163 | 128 | if(!options.sound) return; | |
164 | if (!options.sound) return; | ||
165 | int s, l, r, f, n; | 129 | int s, l, r, f, n; |
166 | 130 | ||
167 | if (!RATE || cpu.snd < RATE) return; | 131 | if (!RATE || cpu.snd < RATE) return; |
@@ -185,8 +149,7 @@ void sound_mix(void) | |||
185 | } | 149 | } |
186 | if (S1.swlen && (S1.swcnt += RATE) >= S1.swlen) | 150 | if (S1.swlen && (S1.swcnt += RATE) >= S1.swlen) |
187 | { | 151 | { |
188 | S1.swcnt -= S1.swlen; | 152 | f = ((R_NR14 & 7) << 8) + R_NR13; |
189 | f = S1.swfreq; | ||
190 | n = (R_NR10 & 7); | 153 | n = (R_NR10 & 7); |
191 | if (R_NR10 & 8) f -= (f >> n); | 154 | if (R_NR10 & 8) f -= (f >> n); |
192 | else f += (f >> n); | 155 | else f += (f >> n); |
@@ -194,15 +157,14 @@ void sound_mix(void) | |||
194 | S1.on = 0; | 157 | S1.on = 0; |
195 | else | 158 | else |
196 | { | 159 | { |
197 | S1.swfreq = f; | ||
198 | R_NR13 = f; | 160 | R_NR13 = f; |
199 | R_NR14 = (R_NR14 & 0xF8) | (f>>8); | 161 | R_NR14 = (R_NR14 & 0xF8) | (f>>8); |
200 | s1_freq_d(2048 - f); | 162 | s1_freq_d(2048 - f); |
201 | } | 163 | } |
202 | } | 164 | } |
203 | s <<= 2; | 165 | s <<= 2; |
204 | if (R_NR51 & 1) r += s; | 166 | if (R_NR51 & 1) l += s; |
205 | if (R_NR51 & 16) l += s; | 167 | if (R_NR51 & 16) r += s; |
206 | } | 168 | } |
207 | 169 | ||
208 | if (S2.on) | 170 | if (S2.on) |
@@ -219,8 +181,8 @@ void sound_mix(void) | |||
219 | if (S2.envol > 15) S2.envol = 15; | 181 | if (S2.envol > 15) S2.envol = 15; |
220 | } | 182 | } |
221 | s <<= 2; | 183 | s <<= 2; |
222 | if (R_NR51 & 2) r += s; | 184 | if (R_NR51 & 2) l += s; |
223 | if (R_NR51 & 32) l += s; | 185 | if (R_NR51 & 32) r += s; |
224 | } | 186 | } |
225 | 187 | ||
226 | if (S3.on) | 188 | if (S3.on) |
@@ -234,16 +196,16 @@ void sound_mix(void) | |||
234 | S3.on = 0; | 196 | S3.on = 0; |
235 | if (R_NR32 & 96) s <<= (3 - ((R_NR32>>5)&3)); | 197 | if (R_NR32 & 96) s <<= (3 - ((R_NR32>>5)&3)); |
236 | else s = 0; | 198 | else s = 0; |
237 | if (R_NR51 & 4) r += s; | 199 | if (R_NR51 & 4) l += s; |
238 | if (R_NR51 & 64) l += s; | 200 | if (R_NR51 & 64) r += s; |
239 | } | 201 | } |
240 | 202 | ||
241 | if (S4.on) | 203 | if (S4.on) |
242 | { | 204 | { |
243 | if (R_NR43 & 8) s = 1 & (noise7[ | 205 | if (R_NR43 & 8) s = 1 & (noise7[ |
244 | (S4.pos>>20)&15] >> (7-((S4.pos>>17)&7))); | 206 | (S4.pos>>24)&15] >> ((S4.pos>>21)&7)); |
245 | else s = 1 & (noise15[ | 207 | else s = 1 & (noise15[ |
246 | (S4.pos>>20)&4095] >> (7-((S4.pos>>17)&7))); | 208 | (S4.pos>>24)&4095] >> ((S4.pos>>21)&7)); |
247 | s = (-s) & S4.envol; | 209 | s = (-s) & S4.envol; |
248 | S4.pos += S4.freq; | 210 | S4.pos += S4.freq; |
249 | if ((R_NR44 & 64) && ((S4.cnt += RATE) >= S4.len)) | 211 | if ((R_NR44 & 64) && ((S4.cnt += RATE) >= S4.len)) |
@@ -255,9 +217,9 @@ void sound_mix(void) | |||
255 | if (S4.envol < 0) S4.envol = 0; | 217 | if (S4.envol < 0) S4.envol = 0; |
256 | if (S4.envol > 15) S4.envol = 15; | 218 | if (S4.envol > 15) S4.envol = 15; |
257 | } | 219 | } |
258 | s += s << 1; | 220 | s <<= 2; |
259 | if (R_NR51 & 8) r += s; | 221 | if (R_NR51 & 8) l += s; |
260 | if (R_NR51 & 128) l += s; | 222 | if (R_NR51 & 128) r += s; |
261 | } | 223 | } |
262 | 224 | ||
263 | l *= (R_NR50 & 0x07); | 225 | l *= (R_NR50 & 0x07); |
@@ -276,10 +238,10 @@ void sound_mix(void) | |||
276 | pcm_submit(); | 238 | pcm_submit(); |
277 | if (pcm.stereo) | 239 | if (pcm.stereo) |
278 | { | 240 | { |
279 | pcm.buf[pcm.pos++] = l+128; | 241 | pcm.buf[pcm.pos++] = l+128; |
280 | pcm.buf[pcm.pos++] = r+128; | 242 | pcm.buf[pcm.pos++] = r+128; |
281 | } | 243 | } |
282 | else pcm.buf[pcm.pos++] = ((l+r)>>1)+128; | 244 | else pcm.buf[pcm.pos++] = ((l+r)>>1)+128; |
283 | } | 245 | } |
284 | } | 246 | } |
285 | R_NR52 = (R_NR52&0xf0) | S1.on | (S2.on<<1) | (S3.on<<2) | (S4.on<<3); | 247 | R_NR52 = (R_NR52&0xf0) | S1.on | (S2.on<<1) | (S3.on<<2) | (S4.on<<3); |
@@ -289,7 +251,7 @@ void sound_mix(void) | |||
289 | 251 | ||
290 | byte sound_read(byte r) | 252 | byte sound_read(byte r) |
291 | { | 253 | { |
292 | if(!options.sound) return 0; | 254 | if(!options.sound) return 0; |
293 | sound_mix(); | 255 | sound_mix(); |
294 | /* printf("read %02X: %02X\n", r, REG(r)); */ | 256 | /* printf("read %02X: %02X\n", r, REG(r)); */ |
295 | return REG(r); | 257 | return REG(r); |
@@ -298,13 +260,12 @@ byte sound_read(byte r) | |||
298 | void s1_init(void) | 260 | void s1_init(void) |
299 | { | 261 | { |
300 | S1.swcnt = 0; | 262 | S1.swcnt = 0; |
301 | S1.swfreq = ((R_NR14&7)<<8) + R_NR13; | ||
302 | S1.envol = R_NR12 >> 4; | 263 | S1.envol = R_NR12 >> 4; |
303 | S1.endir = (R_NR12>>3) & 1; | 264 | S1.endir = (R_NR12>>3) & 1; |
304 | S1.endir |= S1.endir - 1; | 265 | S1.endir |= S1.endir - 1; |
305 | S1.enlen = (R_NR12 & 7) << 15; | 266 | S1.enlen = (R_NR12 & 7) << 15; |
306 | if (!S1.on) S1.pos = 0; | ||
307 | S1.on = 1; | 267 | S1.on = 1; |
268 | S1.pos = 0; | ||
308 | S1.cnt = 0; | 269 | S1.cnt = 0; |
309 | S1.encnt = 0; | 270 | S1.encnt = 0; |
310 | } | 271 | } |
@@ -315,20 +276,17 @@ void s2_init(void) | |||
315 | S2.endir = (R_NR22>>3) & 1; | 276 | S2.endir = (R_NR22>>3) & 1; |
316 | S2.endir |= S2.endir - 1; | 277 | S2.endir |= S2.endir - 1; |
317 | S2.enlen = (R_NR22 & 7) << 15; | 278 | S2.enlen = (R_NR22 & 7) << 15; |
318 | if (!S2.on) S2.pos = 0; | ||
319 | S2.on = 1; | 279 | S2.on = 1; |
280 | S2.pos = 0; | ||
320 | S2.cnt = 0; | 281 | S2.cnt = 0; |
321 | S2.encnt = 0; | 282 | S2.encnt = 0; |
322 | } | 283 | } |
323 | 284 | ||
324 | void s3_init(void) | 285 | void s3_init(void) |
325 | { | 286 | { |
326 | int i; | 287 | S3.pos = 0; |
327 | if (!S3.on) S3.pos = 0; | ||
328 | S3.cnt = 0; | 288 | S3.cnt = 0; |
329 | S3.on = R_NR30 >> 7; | 289 | S3.on = R_NR30 >> 7; |
330 | if (S3.on) for (i = 0; i < 16; i++) | ||
331 | ram.hi[i+0x30] = 0x13 ^ ram.hi[i+0x31]; | ||
332 | } | 290 | } |
333 | 291 | ||
334 | void s4_init(void) | 292 | void s4_init(void) |
@@ -346,19 +304,13 @@ void s4_init(void) | |||
346 | 304 | ||
347 | void sound_write(byte r, byte b) | 305 | void sound_write(byte r, byte b) |
348 | { | 306 | { |
349 | if(!options.sound) return; | 307 | if(!options.sound) return; |
350 | #if 0 | ||
351 | static void *timer; | ||
352 | if (!timer) timer = sys_timer(); | ||
353 | printf("write %02X: %02X @ %d\n", r, b, sys_elapsed(timer)); | ||
354 | #endif | ||
355 | 308 | ||
356 | if (!(R_NR52 & 128) && r != RI_NR52) return; | 309 | if (!(R_NR52 & 128) && r != RI_NR52) return; |
357 | if ((r & 0xF0) == 0x30) | 310 | if ((r & 0xF0) == 0x30) |
358 | { | 311 | { |
359 | if (S3.on) sound_mix(); | 312 | if (S3.on) sound_mix(); |
360 | if (!S3.on) | 313 | if (!S3.on) WAVE[r - 0x30] = b; |
361 | WAVE[r-0x30] = ram.hi[r] = b; | ||
362 | return; | 314 | return; |
363 | } | 315 | } |
364 | sound_mix(); | 316 | sound_mix(); |
@@ -366,8 +318,6 @@ void sound_write(byte r, byte b) | |||
366 | { | 318 | { |
367 | case RI_NR10: | 319 | case RI_NR10: |
368 | R_NR10 = b; | 320 | R_NR10 = b; |
369 | S1.swlen = ((R_NR10>>4) & 7) << 14; | ||
370 | S1.swfreq = ((R_NR14&7)<<8) + R_NR13; | ||
371 | break; | 321 | break; |
372 | case RI_NR11: | 322 | case RI_NR11: |
373 | R_NR11 = b; | 323 | R_NR11 = b; |
@@ -415,7 +365,7 @@ void sound_write(byte r, byte b) | |||
415 | break; | 365 | break; |
416 | case RI_NR31: | 366 | case RI_NR31: |
417 | R_NR31 = b; | 367 | R_NR31 = b; |
418 | S3.len = (256-R_NR31) << 13; | 368 | S3.len = (256-R_NR31) << 20; |
419 | break; | 369 | break; |
420 | case RI_NR32: | 370 | case RI_NR32: |
421 | R_NR32 = b; | 371 | R_NR32 = b; |
@@ -457,7 +407,7 @@ void sound_write(byte r, byte b) | |||
457 | case RI_NR52: | 407 | case RI_NR52: |
458 | R_NR52 = b; | 408 | R_NR52 = b; |
459 | if (!(R_NR52 & 128)) | 409 | if (!(R_NR52 & 128)) |
460 | sound_off(); | 410 | sound_reset(); |
461 | break; | 411 | break; |
462 | default: | 412 | default: |
463 | return; | 413 | return; |
diff --git a/apps/plugins/rockboy/sound.h b/apps/plugins/rockboy/sound.h index a14b04c5a2..fe3557cd7e 100644 --- a/apps/plugins/rockboy/sound.h +++ b/apps/plugins/rockboy/sound.h | |||
@@ -5,20 +5,18 @@ | |||
5 | 5 | ||
6 | struct sndchan | 6 | struct sndchan |
7 | { | 7 | { |
8 | int on; | 8 | int on; |
9 | unsigned pos; | 9 | unsigned pos; |
10 | int cnt, encnt, swcnt; | 10 | int cnt, encnt, swcnt; |
11 | int len, enlen, swlen; | 11 | int len, enlen, swlen; |
12 | int swfreq; | 12 | int freq; |
13 | int freq; | 13 | int envol, endir; |
14 | int envol, endir; | ||
15 | }; | 14 | }; |
16 | 15 | ||
17 | struct snd | 16 | struct snd |
18 | { | 17 | { |
19 | int rate; | 18 | int rate; |
20 | struct sndchan ch[4]; | 19 | struct sndchan ch[4]; |
21 | byte wave[16]; | ||
22 | }; | 20 | }; |
23 | 21 | ||
24 | extern struct snd snd; | 22 | extern struct snd snd; |
@@ -31,7 +29,6 @@ extern struct snd snd; | |||
31 | byte sound_read(byte r) ICODE_ATTR; | 29 | byte sound_read(byte r) ICODE_ATTR; |
32 | void sound_write(byte r, byte b) ICODE_ATTR; | 30 | void sound_write(byte r, byte b) ICODE_ATTR; |
33 | void sound_dirty(void) ICODE_ATTR; | 31 | void sound_dirty(void) ICODE_ATTR; |
34 | void sound_off(void); | ||
35 | void sound_reset(void); | 32 | void sound_reset(void); |
36 | void sound_mix(void) ICODE_ATTR; | 33 | void sound_mix(void) ICODE_ATTR; |
37 | void s1_init(void); | 34 | void s1_init(void); |
diff --git a/apps/plugins/rockboy/split.c b/apps/plugins/rockboy/split.c deleted file mode 100644 index 5d8af08ee1..0000000000 --- a/apps/plugins/rockboy/split.c +++ /dev/null | |||
@@ -1,59 +0,0 @@ | |||
1 | |||
2 | #include "rockmacros.h" | ||
3 | |||
4 | /* | ||
5 | * splitline is a destructive argument parser, much like a very primitive | ||
6 | * form of a shell parser. it supports quotes for embedded spaces and | ||
7 | * literal quotes with the backslash escape. | ||
8 | */ | ||
9 | |||
10 | char *splitnext(char **pos) | ||
11 | { | ||
12 | char *a, *d, *s; | ||
13 | |||
14 | d = s = *pos; | ||
15 | while (*s == ' ' || *s == '\t') s++; | ||
16 | a = s; | ||
17 | while (*s && *s != ' ' && *s != '\t') | ||
18 | { | ||
19 | if (*s == '"') | ||
20 | { | ||
21 | s++; | ||
22 | while (*s && *s != '"') | ||
23 | { | ||
24 | if (*s == '\\') | ||
25 | s++; | ||
26 | if (*s) | ||
27 | *(d++) = *(s++); | ||
28 | } | ||
29 | if (*s == '"') s++; | ||
30 | } | ||
31 | else | ||
32 | { | ||
33 | if (*s == '\\') | ||
34 | s++; | ||
35 | *(d++) = *(s++); | ||
36 | } | ||
37 | } | ||
38 | while (*s == ' ' || *s == '\t') s++; | ||
39 | *d = 0; | ||
40 | *pos = s; | ||
41 | return a; | ||
42 | } | ||
43 | |||
44 | int splitline(char **argv, int max, char *line) | ||
45 | { | ||
46 | char *s; | ||
47 | int i; | ||
48 | |||
49 | s = line; | ||
50 | for (i = 0; *s && i < max + 1; i++) | ||
51 | argv[i] = splitnext(&s); | ||
52 | argv[i] = 0; | ||
53 | return i; | ||
54 | } | ||
55 | |||
56 | |||
57 | |||
58 | |||
59 | |||
diff --git a/apps/plugins/rockboy/split.h b/apps/plugins/rockboy/split.h deleted file mode 100644 index a371430946..0000000000 --- a/apps/plugins/rockboy/split.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | int splitline(char **argv, int max, char *line); | ||
diff --git a/apps/plugins/rockboy/sys_rockbox.c b/apps/plugins/rockboy/sys_rockbox.c index fb118162b2..40f68681d8 100644 --- a/apps/plugins/rockboy/sys_rockbox.c +++ b/apps/plugins/rockboy/sys_rockbox.c | |||
@@ -20,7 +20,6 @@ | |||
20 | #include "rockmacros.h" | 20 | #include "rockmacros.h" |
21 | #include "fb.h" | 21 | #include "fb.h" |
22 | #include "input.h" | 22 | #include "input.h" |
23 | #include "rc.h" | ||
24 | #include "lcd-gb.h" | 23 | #include "lcd-gb.h" |
25 | #include "hw.h" | 24 | #include "hw.h" |
26 | #include "config.h" | 25 | #include "config.h" |
@@ -32,6 +31,13 @@ | |||
32 | #define ROCKBOY_PAD_UP BUTTON_MENU | 31 | #define ROCKBOY_PAD_UP BUTTON_MENU |
33 | #define ROCKBOY_PAD_DOWN BUTTON_PLAY | 32 | #define ROCKBOY_PAD_DOWN BUTTON_PLAY |
34 | 33 | ||
34 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) | ||
35 | |||
36 | #define ROCKBOY_PAD_LEFT BUTTON_LEFT | ||
37 | #define ROCKBOY_PAD_RIGHT BUTTON_RIGHT | ||
38 | #define ROCKBOY_PAD_UP BUTTON_SCROLL_UP | ||
39 | #define ROCKBOY_PAD_DOWN BUTTON_SCROLL_DOWN | ||
40 | |||
35 | #else | 41 | #else |
36 | 42 | ||
37 | #define ROCKBOY_PAD_LEFT BUTTON_LEFT | 43 | #define ROCKBOY_PAD_LEFT BUTTON_LEFT |
@@ -41,33 +47,10 @@ | |||
41 | 47 | ||
42 | #endif | 48 | #endif |
43 | 49 | ||
44 | rcvar_t joy_exports[] = | 50 | struct fb fb IBSS_ATTR; |
45 | { | ||
46 | RCV_END | ||
47 | }; | ||
48 | |||
49 | rcvar_t vid_exports[] = | ||
50 | { | ||
51 | RCV_END | ||
52 | }; | ||
53 | |||
54 | struct fb fb; | ||
55 | 51 | ||
56 | extern int debug_trace; | 52 | extern int debug_trace; |
57 | 53 | ||
58 | void vid_settitle(char *title) | ||
59 | { | ||
60 | rb->splash(HZ/2, true, title); | ||
61 | } | ||
62 | |||
63 | void joy_init(void) | ||
64 | { | ||
65 | } | ||
66 | |||
67 | void joy_close(void) | ||
68 | { | ||
69 | } | ||
70 | |||
71 | unsigned int oldbuttonstate = 0, newbuttonstate,holdbutton; | 54 | unsigned int oldbuttonstate = 0, newbuttonstate,holdbutton; |
72 | #ifdef HAVE_WHEEL_POSITION | 55 | #ifdef HAVE_WHEEL_POSITION |
73 | int oldwheel = -1, wheel; | 56 | int oldwheel = -1, wheel; |
@@ -179,10 +162,7 @@ void ev_poll(void) | |||
179 | if(pressed & options.MENU) { | 162 | if(pressed & options.MENU) { |
180 | #endif | 163 | #endif |
181 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | 164 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
182 | (CONFIG_KEYPAD == IRIVER_H300_PAD) || \ | 165 | defined(HAVE_LCD_COLOR) |
183 | (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | ||
184 | (CONFIG_KEYPAD == GIGABEAT_PAD) || \ | ||
185 | (CONFIG_KEYPAD == SANSA_E200_PAD) | ||
186 | #ifdef HAVE_WHEEL_POSITION | 166 | #ifdef HAVE_WHEEL_POSITION |
187 | rb->wheel_send_events(true); | 167 | rb->wheel_send_events(true); |
188 | #endif | 168 | #endif |
@@ -202,53 +182,36 @@ void ev_poll(void) | |||
202 | #endif | 182 | #endif |
203 | } | 183 | } |
204 | 184 | ||
205 | void vid_setpal(int i, int r, int g, int b) | 185 | /* New frameskip, makes more sense to me and performs as well */ |
186 | inline void vid_begin(void) | ||
206 | { | 187 | { |
207 | (void)i; | 188 | static int skip = 0; |
208 | (void)r; | 189 | if (skip<options.frameskip) |
209 | (void)g; | 190 | { |
210 | (void)b; | 191 | skip++; |
211 | } | 192 | fb.enabled=0; |
212 | 193 | } | |
213 | inline void vid_begin(void) // New frameskip, makes more sense to me and performs as well | 194 | else |
214 | { | 195 | { |
215 | static int skip = 0; | 196 | skip=0; |
216 | if (skip<options.frameskip) { | 197 | fb.enabled=1; |
217 | skip++; | 198 | } |
218 | fb.enabled=0; | ||
219 | } | ||
220 | else { | ||
221 | skip=0; | ||
222 | fb.enabled=1; | ||
223 | } | ||
224 | } | 199 | } |
225 | 200 | ||
226 | void vid_init(void) | 201 | void vid_init(void) |
227 | { | 202 | { |
228 | fb.h=144; | ||
229 | fb.w=160; | ||
230 | fb.pitch=160; | ||
231 | fb.enabled=1; | 203 | fb.enabled=1; |
232 | fb.dirty=0; | 204 | fb.ptr=rb->lcd_framebuffer; |
233 | fb.mode=3; | ||
234 | |||
235 | fb.ptr=rb->lcd_framebuffer; | ||
236 | 205 | ||
237 | #if defined(HAVE_LCD_COLOR) | 206 | #if defined(HAVE_LCD_COLOR) |
238 | fb.pelsize=2; // 16 bit framebuffer | 207 | fb.cc[0].r = 3; /* 8-5 (wasted bits on red) */ |
239 | 208 | fb.cc[0].l = 11; /* this is the offset to the R bits (16-5) */ | |
240 | fb.indexed = 0; // no palette on lcd | 209 | fb.cc[1].r = 2; /* 8-6 (wasted bits on green) */ |
241 | fb.cc[0].r = 3; // 8-5 (wasted bits on red) | 210 | fb.cc[1].l = 5; /* This is the offset to the G bits (16-5-6) */ |
242 | fb.cc[0].l = 11; //this is the offset to the R bits (16-5) | 211 | fb.cc[2].r = 3; /* 8-5 (wasted bits on red) */ |
243 | fb.cc[1].r = 2; // 8-6 (wasted bits on green) | 212 | fb.cc[2].l = 0; /* This is the offset to the B bits (16-5-6-5) */ |
244 | fb.cc[1].l = 5; // This is the offset to the G bits (16-5-6) | 213 | #else |
245 | fb.cc[2].r = 3; // 8-5 (wasted bits on red) | 214 | fb.mode=3; |
246 | fb.cc[2].l = 0; // This is the offset to the B bits (16-5-6-5) | ||
247 | fb.cc[3].r = 0; // no alpha | ||
248 | fb.cc[3].l = 0; | ||
249 | fb.yuv = 0; // not in yuv format | ||
250 | #else // ***** NEED TO LOOK INTO THIS MORE FOR THE H100 (Should be able to get rid of some IFDEF's elsewhere) | ||
251 | fb.pelsize=1; // 8 bit framebuffer.. (too much.. but lowest gnuboy will support.. so yea... | ||
252 | #endif | 215 | #endif |
253 | } | 216 | } |
254 | 217 | ||
@@ -350,43 +313,29 @@ void vid_update(int scanline) | |||
350 | cnt++; | 313 | cnt++; |
351 | } | 314 | } |
352 | rb->lcd_update_rect(0, scanline & ~3, LCD_WIDTH, 4); | 315 | rb->lcd_update_rect(0, scanline & ~3, LCD_WIDTH, 4); |
353 | #elif defined(HAVE_LCD_COLOR) /* iriver H3x0, colour iPod */ | 316 | #elif defined(HAVE_LCD_COLOR) |
354 | // handled in lcd.c now | 317 | /* handled in lcd.c now */ |
355 | #endif /* LCD_HEIGHT */ | 318 | #endif /* LCD_HEIGHT */ |
356 | } | 319 | } |
357 | #endif | 320 | #endif |
358 | 321 | ||
359 | void vid_end(void) | ||
360 | { | ||
361 | } | ||
362 | |||
363 | long timerresult; | 322 | long timerresult; |
364 | 323 | ||
365 | void *sys_timer(void) | 324 | void *sys_timer(void) |
366 | {/* | 325 | { |
367 | timerresult=*rb->current_tick; | 326 | /*timerresult=*rb->current_tick; |
368 | return &timerresult;*/ | 327 | return &timerresult;*/ |
369 | return 0; | 328 | return 0; |
370 | } | 329 | } |
371 | 330 | ||
372 | // returns microseconds passed since sys_timer | 331 | /* returns microseconds passed since sys_timer */ |
373 | int sys_elapsed(long *oldtick) | 332 | int sys_elapsed(long *oldtick) |
374 | { | 333 | { |
375 | /* | 334 | /* int elap,mytime=microtick; |
376 | int elap,mytime=microtick; | ||
377 | 335 | ||
378 | elap=mytime-*oldtick; | 336 | elap=mytime-*oldtick; |
379 | *oldtick=mytime; | 337 | *oldtick=mytime; |
380 | return elap;*/ | 338 | return elap; */ |
381 | // return ((*rb->current_tick-(*oldtick))*1000000)/HZ; | 339 | /* return ((*rb->current_tick-(*oldtick))*1000000)/HZ; */ |
382 | return *oldtick; | 340 | return *oldtick; |
383 | } | 341 | } |
384 | |||
385 | void sys_sleep(int us) | ||
386 | { | ||
387 | if(us<=0) return; | ||
388 | int i=0; | ||
389 | while(i< us*11) | ||
390 | i++; | ||
391 | // if (us <= 0) return; | ||
392 | } | ||