From 27ad8041c00ff80e50ba0ad9022c3eaa7a05b8b0 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Thu, 23 Jul 2009 19:05:42 +0000 Subject: [PATCH 1/1] Initial import (for historical reasons). --- doc/Beta.txt | 31 + doc/notes.txt | 88 ++ doc/readme.txt | 40 + doc/rt1-4.txt | 144 +++ doc/rthunder.txt | 57 + doc/wav.txt | 112 ++ makefile | 59 + res/byebyb.pcx | Bin 0 -> 1531 bytes res/byebyb.raw | Bin 0 -> 2100 bytes res/byebys.pcx | Bin 0 -> 1300 bytes res/byebys.raw | Bin 0 -> 437 bytes res/camera.wav | Bin 0 -> 5860 bytes res/checks.pcx | Bin 0 -> 1070 bytes res/checks.raw | Bin 0 -> 460 bytes res/coinub.pcx | Bin 0 -> 1710 bytes res/coinub.raw | Bin 0 -> 1800 bytes res/coinus.pcx | Bin 0 -> 1160 bytes res/coinus.raw | Bin 0 -> 324 bytes res/cya.wav | Bin 0 -> 17828 bytes res/dipsel.pcx | Bin 0 -> 15815 bytes res/dipswb.pcx | Bin 0 -> 1457 bytes res/dipswb.raw | Bin 0 -> 1428 bytes res/dipsws.pcx | Bin 0 -> 1319 bytes res/dipsws.raw | Bin 0 -> 667 bytes res/dsbutton.pcx | Bin 0 -> 922 bytes res/dsbutton.raw | 1 + res/dstext1.pcx | Bin 0 -> 1081 bytes res/dstext1.raw | Bin 0 -> 336 bytes res/dstext10.pcx | Bin 0 -> 1132 bytes res/dstext10.raw | Bin 0 -> 434 bytes res/dstext11.pcx | Bin 0 -> 1184 bytes res/dstext11.raw | Bin 0 -> 585 bytes res/dstext12.pcx | Bin 0 -> 1181 bytes res/dstext12.raw | Bin 0 -> 441 bytes res/dstext2.pcx | Bin 0 -> 1227 bytes res/dstext2.raw | Bin 0 -> 720 bytes res/dstext3.pcx | Bin 0 -> 1284 bytes res/dstext3.raw | Bin 0 -> 672 bytes res/dstext4.pcx | Bin 0 -> 1229 bytes res/dstext4.raw | Bin 0 -> 738 bytes res/dstext5.pcx | Bin 0 -> 1137 bytes res/dstext5.raw | Bin 0 -> 420 bytes res/dstext6.pcx | Bin 0 -> 1204 bytes res/dstext6.raw | Bin 0 -> 532 bytes res/dstext7.pcx | Bin 0 -> 1119 bytes res/dstext7.raw | Bin 0 -> 399 bytes res/dstext8.pcx | Bin 0 -> 1015 bytes res/dstext8.raw | Bin 0 -> 231 bytes res/dstext9.pcx | Bin 0 -> 1132 bytes res/dstext9.raw | Bin 0 -> 450 bytes res/dswitch.pcx | Bin 0 -> 1339 bytes res/dswitch.raw | Bin 0 -> 1690 bytes res/elements.pcx | Bin 0 -> 25392 bytes res/i30hzb.pcx | Bin 0 -> 2055 bytes res/i30hzb.raw | Bin 0 -> 3068 bytes res/i30hzs.pcx | Bin 0 -> 1222 bytes res/i30hzs.raw | Bin 0 -> 777 bytes res/i60hzb.pcx | Bin 0 -> 2075 bytes res/i60hzb.raw | Bin 0 -> 3068 bytes res/i60hzs.pcx | Bin 0 -> 1228 bytes res/i60hzs.raw | Bin 0 -> 777 bytes res/itl2.wav | Bin 0 -> 1025384 bytes res/keycnb.pcx | Bin 0 -> 1639 bytes res/keycnb.raw | Bin 0 -> 2025 bytes res/keycns.pcx | Bin 0 -> 1113 bytes res/keycns.raw | Bin 0 -> 448 bytes res/nogui.pcx | Bin 0 -> 1357 bytes res/noguib.pcx | Bin 0 -> 2200 bytes res/noguib.raw | Bin 0 -> 1936 bytes res/noguis.pcx | Bin 0 -> 1749 bytes res/noguis.raw | Bin 0 -> 961 bytes res/pl1stb.pcx | Bin 0 -> 1356 bytes res/pl1stb.raw | Bin 0 -> 1650 bytes res/pl1sts.pcx | Bin 0 -> 1269 bytes res/pl1sts.raw | Bin 0 -> 608 bytes res/pl2stb.pcx | Bin 0 -> 1451 bytes res/pl2stb.raw | Bin 0 -> 1508 bytes res/pl2sts.pcx | Bin 0 -> 1353 bytes res/pl2sts.raw | Bin 0 -> 665 bytes res/resetb.pcx | Bin 0 -> 1398 bytes res/resetb.raw | Bin 0 -> 2320 bytes res/resets.pcx | Bin 0 -> 1047 bytes res/resets.raw | Bin 0 -> 380 bytes res/sizes.txt | 39 + res/snapsb.pcx | Bin 0 -> 1368 bytes res/snapsb.raw | Bin 0 -> 1776 bytes res/snapss.pcx | Bin 0 -> 1211 bytes res/snapss.raw | Bin 0 -> 544 bytes res/thirtyhz.raw | Bin 0 -> 828 bytes res/thunder.ico | Bin 0 -> 766 bytes res/thunder.rc | 9 + res/unknown.wav | Bin 0 -> 17488 bytes src/gui.cpp | 1062 +++++++++++++++++ src/gui.h | 67 ++ src/log.cpp | 54 + src/log.h | 24 + src/resource.asm | 185 +++ src/resource.h | 61 + src/screen.cpp | 625 ++++++++++ src/screen.h | 20 + src/thunder.cpp | 1812 ++++++++++++++++++++++++++++ src/types.h | 39 + src/v6809.cpp | 2965 ++++++++++++++++++++++++++++++++++++++++++++++ src/v6809.h | 58 + src/v6809b.cpp | 2716 ++++++++++++++++++++++++++++++++++++++++++ src/v6809b.h | 13 + test/rt5.bat | 2 + test/rthack.cpp | 123 ++ test/rthack.mak | 7 + test/rthack2.cpp | 143 +++ test/rthack2.mak | 6 + test/rthack3.cpp | 151 +++ test/rthack3.mak | 6 + test/rthack4.cpp | 151 +++ test/rthack4.mak | 14 + test/rthack4.txt | 2 + test/rthack5.cpp | 161 +++ test/snd.bat | 2 + test/sound.cpp | 162 +++ test/temp.cpp | 130 ++ test/union.cpp | 49 + test/wav.cpp | 101 ++ 122 files changed, 11491 insertions(+) create mode 100755 doc/Beta.txt create mode 100755 doc/notes.txt create mode 100755 doc/readme.txt create mode 100755 doc/rt1-4.txt create mode 100755 doc/rthunder.txt create mode 100755 doc/wav.txt create mode 100755 makefile create mode 100755 res/byebyb.pcx create mode 100755 res/byebyb.raw create mode 100755 res/byebys.pcx create mode 100755 res/byebys.raw create mode 100755 res/camera.wav create mode 100755 res/checks.pcx create mode 100755 res/checks.raw create mode 100755 res/coinub.pcx create mode 100755 res/coinub.raw create mode 100755 res/coinus.pcx create mode 100755 res/coinus.raw create mode 100755 res/cya.wav create mode 100755 res/dipsel.pcx create mode 100755 res/dipswb.pcx create mode 100755 res/dipswb.raw create mode 100755 res/dipsws.pcx create mode 100755 res/dipsws.raw create mode 100755 res/dsbutton.pcx create mode 100755 res/dsbutton.raw create mode 100755 res/dstext1.pcx create mode 100755 res/dstext1.raw create mode 100755 res/dstext10.pcx create mode 100755 res/dstext10.raw create mode 100755 res/dstext11.pcx create mode 100755 res/dstext11.raw create mode 100755 res/dstext12.pcx create mode 100755 res/dstext12.raw create mode 100755 res/dstext2.pcx create mode 100755 res/dstext2.raw create mode 100755 res/dstext3.pcx create mode 100755 res/dstext3.raw create mode 100755 res/dstext4.pcx create mode 100755 res/dstext4.raw create mode 100755 res/dstext5.pcx create mode 100755 res/dstext5.raw create mode 100755 res/dstext6.pcx create mode 100755 res/dstext6.raw create mode 100755 res/dstext7.pcx create mode 100755 res/dstext7.raw create mode 100755 res/dstext8.pcx create mode 100755 res/dstext8.raw create mode 100755 res/dstext9.pcx create mode 100755 res/dstext9.raw create mode 100755 res/dswitch.pcx create mode 100755 res/dswitch.raw create mode 100755 res/elements.pcx create mode 100755 res/i30hzb.pcx create mode 100755 res/i30hzb.raw create mode 100755 res/i30hzs.pcx create mode 100755 res/i30hzs.raw create mode 100755 res/i60hzb.pcx create mode 100755 res/i60hzb.raw create mode 100755 res/i60hzs.pcx create mode 100755 res/i60hzs.raw create mode 100755 res/itl2.wav create mode 100755 res/keycnb.pcx create mode 100755 res/keycnb.raw create mode 100755 res/keycns.pcx create mode 100755 res/keycns.raw create mode 100755 res/nogui.pcx create mode 100755 res/noguib.pcx create mode 100755 res/noguib.raw create mode 100755 res/noguis.pcx create mode 100755 res/noguis.raw create mode 100755 res/pl1stb.pcx create mode 100755 res/pl1stb.raw create mode 100755 res/pl1sts.pcx create mode 100755 res/pl1sts.raw create mode 100755 res/pl2stb.pcx create mode 100755 res/pl2stb.raw create mode 100755 res/pl2sts.pcx create mode 100755 res/pl2sts.raw create mode 100755 res/resetb.pcx create mode 100755 res/resetb.raw create mode 100755 res/resets.pcx create mode 100755 res/resets.raw create mode 100755 res/sizes.txt create mode 100755 res/snapsb.pcx create mode 100755 res/snapsb.raw create mode 100755 res/snapss.pcx create mode 100755 res/snapss.raw create mode 100755 res/thirtyhz.raw create mode 100755 res/thunder.ico create mode 100755 res/thunder.rc create mode 100755 res/unknown.wav create mode 100755 src/gui.cpp create mode 100755 src/gui.h create mode 100755 src/log.cpp create mode 100755 src/log.h create mode 100755 src/resource.asm create mode 100755 src/resource.h create mode 100755 src/screen.cpp create mode 100755 src/screen.h create mode 100755 src/thunder.cpp create mode 100755 src/types.h create mode 100755 src/v6809.cpp create mode 100755 src/v6809.h create mode 100755 src/v6809b.cpp create mode 100755 src/v6809b.h create mode 100755 test/rt5.bat create mode 100755 test/rthack.cpp create mode 100755 test/rthack.mak create mode 100755 test/rthack2.cpp create mode 100755 test/rthack2.mak create mode 100755 test/rthack3.cpp create mode 100755 test/rthack3.mak create mode 100755 test/rthack4.cpp create mode 100755 test/rthack4.mak create mode 100755 test/rthack4.txt create mode 100755 test/rthack5.cpp create mode 100755 test/snd.bat create mode 100755 test/sound.cpp create mode 100755 test/temp.cpp create mode 100755 test/union.cpp create mode 100755 test/wav.cpp diff --git a/doc/Beta.txt b/doc/Beta.txt new file mode 100755 index 0000000..0c383d4 --- /dev/null +++ b/doc/Beta.txt @@ -0,0 +1,31 @@ +Here is the latest beta of Thunder (Beta 6), and here are some useful keys +for those of you just joining us: + +Arrows: Move around +Left CTRL: Jump +Left ALT: Fire +F10: Coin up +C: Player 1 start +F5: Toggle 60/30 Hz +F4: Take a snapshot +TAB: Toggle GUI on/off + +Known issues: + +-- Music stops after a while. Working on it. +-- It's just too damn slow! If it's too slow on your machine, play it at + 30 Hz. If it's still too slow, I'm working on it. +-- Graphics in the GUI are hard to read/ugly. I'm working on it! +-- No two player start. +-- Coining up doesn't work during the game demo phase of the attract mode. +-- Setting the self-test switch locks up the machine when flipped during + game demo or when laughing face is on screen. + +If you have a problem that is not listed here, send me email describing +the problem as well as the exe.log file that the program generates. If +it's a graphical glitch, a screenshot would also be very helpful. + +Enjoy! + +Jimmy Hamm +March 13, 2003 diff --git a/doc/notes.txt b/doc/notes.txt new file mode 100755 index 0000000..4829af2 --- /dev/null +++ b/doc/notes.txt @@ -0,0 +1,88 @@ +According to this, the HD63701 is equivalent to a 6808! Joy! Or is it... Hmm... +#if (HAS_M6800 || HAS_M6801 || HAS_M6802 || HAS_M6803 || HAS_M6808 || HAS_HD63701) +#include "cpu/m6800/m6800.h" +#endif + +roms R1-R2 contain 6809 instructions (32K) + +rom R3 contains 4 8K chunks. Mapped to CPU #2 ($6000-7FFF. BS is at $D803.) + (32K) +rom R4 contains 2 16K chunks. Mapped to CPU #2? (32K) + Possibly only seen by custom IC. Possibly music data. + +rom R5 contains character data encoded hi nibble/lo nibble +in an array of 2x8 bytes. (overlap determines 3rd color + 1x8 bytes from R6 +determine 4 more colors [3 bit color]) (32K, 16K, 64K, 32K) + +roms R5,6 & R7,8 contain character data encoded hi/lo nibble, bits +(8x8 pixels) + +roms R9-R16 contain sprite data in 4-bit encoded pixels, +in an array of 8x16 bytes. (16x16 pixels) (all following are 64K) + +roms R17-R20 contain screen tile data (mapped to $6000-7FFF of CPU #1. + Bank switch is at $6600. 32 8K chunks) +roms R21-R22 contain PCM sample data (encoded 8 bits at 5512.5 Hz) + +Char matrix is 36x28 (Text mode) + +-> CMOS seems to be mapped to $5400 in RAM1... + + TOP 5 + SCORE AREA INI'T +1ST 30000 5 ALB +2ND 20000 4 LIR +3RD 10000 3 GLR +4TH 8000 2 MAB +5TH 4000 1 MPI + +$8A14 (ROM1) is the start of the routine that puts the self-test text on +the screen... +$89E2 (ROM1) is entry point for self-test routine, w/0-4 in $542B (# of +routine to call) + +Dipswitch 1&2 are mapped to $423D-4C, $424D-5C (odds only) +$4268 is mapped to the test pattern switch +$423D is self-test switch + +$4000-?(maybe to 40FF) seems to be involved with sprite processing. +$4900 seems to be sprite address (to start. Normally $FF, but then $60) + First byte seems to be an enable (16 bytes per sprite?) +$4400-441F is Albatross sprite (32 bytes per sprite?) +$9000-9002, 9004-9006, 9400-9402, 9404-9406 are screen base addresses. + Initial values are: 020C, 060E, 0A0B, 0E0D (inc/dec by 2s, except last) + Scr initial offsets are 0118, 1118, 2118, 3208 +$6800 is bank switch for CPU #1 (32 8K banks) +$D803 is bank switch for CPU #2 (4 8K banks) +$6000, 6200, 6400, 6600 are voice. 6200 & 6600 are sample # to play, +6000 & 6400 are the strobe lines. + +PSG: + +CPU #1's stack is mapped to $5FFF, #2 to $43FF + +DIPSWITCH SETTINGS: +1-1: On-self test, off-normal +1-2 & 1-3: 00-1coin1credit (left) + 01-1coin3credits + 10-2coin1credit + 11-3coin1credit +1-4: on-no attract sound, off-sound +1-5: Factory use only-always off, never on +1-6: Screen Hold-off normal, on hold +1-7 & 1-8: coin per credit (right) + 00-1coin1credit + 01-1coin2credit + 10-1coin5credit + 11-1coin6credit +2-1: Number of Lives-off 3, on 5 +2-2: Bonus lives-off 70K/200K, on 100K/300K +2-3: Timer: off 120, on 150 +2-4: Difficulty-off Normal, on easy +2-5: select level-off no, on yes +2-6 & 2-7: Cabinet type + 00 Type A(upright) + 01 Type B(cocktail, no flip) + 10 undefined + 11 Type C(cocktail, flip) +2-8: Continuation-off 6 games max, on 3 games max diff --git a/doc/readme.txt b/doc/readme.txt new file mode 100755 index 0000000..a685faf --- /dev/null +++ b/doc/readme.txt @@ -0,0 +1,40 @@ + +------------------------ +Rolling Thunder by NAMCO +------------------------ +malcor + + +The archive information: + +Location Type ID Checksum +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +9C 27256 R1 C001 +12C 27256 R2 3A01 +12D 27256 R3 15B4 +6R 27256 R4 BF00 +4R 27256 R5 440F +4S 27128 R6 38BD +7R 27512 R7 41E0 +7S 27256 R8 3962 +12H 27512 R9 1D65 +12K 27512 R10 421B +12L 27512 R11 EE06 +12M 27512 R12 0EAF +12P 27512 R13 66F7 +12R 27512 R14 C06E +12T 27512 R15 5A7C +12U 27512 R16 C8EE + +SB F1 27512 R17 B738 +SB H1 27512 R18 7161 +SB K1 27512 R19 0D65 +SB M1 27512 R20 7634 +SB F3 27512 R21 EB16 +SB H3 27512 R22 BCB8 + + +Note: SB - Sub board + +END + diff --git a/doc/rt1-4.txt b/doc/rt1-4.txt new file mode 100755 index 0000000..8025890 --- /dev/null +++ b/doc/rt1-4.txt @@ -0,0 +1,144 @@ +--$0x +15 12 11 05 03 02 95 94 93 40 c1 07 0b 00 00 00 +0f 08 05 0f 08 05 00 00 00 00 00 00 00 00 00 00 +51 50 23 22 21 14 12 11 43 08 32 31 36 0a 00 00 +5e 5f 13 12 10 0b 07 03 43 9a 13 12 10 07 00 00 +0b 07 23 22 20 13 12 10 43 0b 23 22 20 0b 00 00 +05 03 0b 07 03 13 12 10 43 9a 0b 07 03 07 00 00 +ca cc 32 31 30 ca cb cc 43 08 13 12 10 0a 0c 00 +32 31 51 50 53 0b 07 03 43 43 51 50 53 07 00 00 + +9a 96 03 01 00 43 42 47 14 12 10 01 00 0b 00 00 +22 20 9a 96 f0 13 12 10 43 12 9a 96 f0 0b 00 00 +ca cb cc 13 12 17 04 03 02 c1 00 00 00 00 00 00 +ca cb cc 13 12 17 04 03 02 c1 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 01 02 03 04 05 08 0a 52 53 54 50 12 55 42 00 +bc 00 bc 00 00 bc 00 00 00 00 bc 00 00 bc 00 00 +6f 6e 6d 6c 68 65 64 63 62 61 60 00 00 00 00 00 +--$1x +44 a8 a9 ac aa ab 15 1d 1c 1a 11 17 00 00 00 00 +32 31 30 95 94 93 17 1b 1a 1b 13 d7 09 00 00 00 +32 31 30 95 94 93 17 1b 1a 02 04 06 08 0f 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0b 01 02 04 96 92 9b ac 03 9e 9f 44 b4 b7 10 00 +0b d2 90 d3 96 92 9b ac d4 9e 9f 44 4a 49 10 00 +00 67 69 6a 6b 18 a0 96 9a d5 9e d6 d7 ca 09 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +00 11 1a 14 15 a7 a8 44 00 03 05 09 0f 00 00 00 +00 0e 03 05 08 0a 0f 0d 15 44 12 48 00 00 00 00 +e1 e2 fc 68 64 64 e1 e2 fc 68 64 68 e1 e2 fc 00 +fc 68 e1 fc e2 68 64 64 e1 e2 fc e1 64 68 e2 00 +64 fc 68 e1 fc e1 e2 68 e2 64 e1 64 e2 fc 68 00 +ca cb a8 ab a7 ca cb a8 ab a7 ca cb a8 ab a7 00 +a8 ab ca cb ab ab a8 ca ca cb a7 a8 cb a7 a7 00 +ab ca a7 a8 ca a8 ab cb a8 a7 cb cb ab a7 ca 00 +--$2x +0d 44 12 1a 13 21 15 0d 00 00 e9 ff 2b 2c 2d 00 +18 10 17 ae 92 56 57 58 59 5a 5b 12 13 14 15 00 +00 73 82 35 92 5c 44 84 85 86 87 88 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +bc 00 bc 00 00 bc 00 00 00 00 bc 00 00 bc 00 00 +44 00 51 00 00 51 00 00 00 00 51 00 00 51 00 00 +44 00 44 00 00 44 00 00 00 00 44 00 00 44 00 00 +0d 00 0d 00 00 0d 00 00 00 00 0d 00 00 0d 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +--$3x +45 a6 1e 1f 2e 2f 37 38 39 3a 3b 3c 3d 3e 3f 00 +00 52 53 54 18 17 1b 33 36 31 28 20 27 4f 00 00 +00 77 78 79 7a 7b 7c 7d fc 7e 7f 0d 91 13 1b 00 +45 a6 1e 1f 2e 2f 37 38 39 3a 3b 3c 3d 5d 00 00 +18 1b 1a 1c 1d 00 00 00 00 00 00 00 00 00 00 00 +44 44 44 44 44 44 44 0d 44 44 44 44 44 44 44 00 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 00 +15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 00 + +6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 00 +76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 00 +ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac 00 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +--$4x +00 06 98 04 d4 96 a6 00 96 05 f3 00 00 00 00 00 +00 52 b0 30 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb 00 +00 02 05 08 0b 0d 17 12 13 15 a7 a8 44 c8 c9 00 +00 11 1a 14 15 a7 a8 44 00 03 05 09 0f 00 00 00 +8c 44 a8 a9 aa ab 15 14 13 1a 1b 17 04 02 01 00 +a9 aa ab 15 14 13 1a 1b 17 10 07 05 04 02 01 00 +00 03 05 06 07 08 09 0b 01 11 1a aa 0b 00 00 00 +00 87 0b 08 03 13 00 00 00 00 00 00 00 00 00 00 + +00 87 0b 08 03 00 00 00 00 00 00 00 00 00 00 00 +00 88 89 8f 8a 8b 65 6c 6d 6e 6f 76 00 00 00 00 +0e 84 87 89 8a 8b ca 00 00 00 00 00 00 00 00 00 +35 34 75 84 85 86 87 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +--$5x +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +--$6x +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +--$7x +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/doc/rthunder.txt b/doc/rthunder.txt new file mode 100755 index 0000000..533affd --- /dev/null +++ b/doc/rthunder.txt @@ -0,0 +1,57 @@ +Rolling Thunder Dumped by arcade@zws.com +============================================================================= +This ROM set is taken from a Namco Rolling Thunder boardset. + +You can view more information on my boards at http://www.zws.com/arcade/. + +For vintage 1987, this is an EXTREMELY advanced game. Surface-mount chips, +lots of custom devices too. Annoyingly, most of the chips on the mainboard +are numbered with custom Namco part numbers, not their real identities. The +ROMs may be encrypted too 8-( There are several devices which I can't read; +they aren't EPROMs, I think they're large PALs or custom chips. + +Audio output is provided by one YM2151. There is also a large high-density +DIP Hitachi HD63701XOP on a daughtercard, about 68 pins, which could be +another CPU. The daughtercard is definitely implicated in the digitized +audio output. + +If you have hardware questions about this board for repair or emulation, +contact arcade@zws.com. I do not have schematics but will provide whatever +other assistance I can. + + +Daughterboard: Carries a large Hitachi HD63701XOP chip with a label on it +reading "NAMCO 61028 00104", some logic ICs, and a 40-pin DIP device custom- +labeled "115", date 8636. + +File Size Loc Purpose +====================================== +RT1-17.ROM 27512 F1 ? } +RT1-18.ROM 27512 H1 ? } apparently wired direct to mainboard +RT3-19.ROM 27512 K1 ? } connector +RT3-20.ROM 27512 M1 ? } +RT1-21.ROM 27512 F3 ? ] apparently used by HD63701 chip +RT2-22.ROM 27512 H3 ? ] + +Mainboard: + +File Size Loc Purpose +====================================== +RT3-1B.ROM 27256 C9 Main CPU #1 [or audio CPU?] code (68A09EP) +RT3-2B.ROM 27256 C12 Main CPU #2 code 1 (68A09EP) +RT3-3.ROM 27256 D12 Main CPU #2 code 2 (68A09EP) +RT3-4.ROM 27256 B6 Digitized audio? Immediately next to two 40- + pin DIPs "60A1" (YM2203?) and "130" (6809?) + Machine won't start at all without this ROM +RT1-5.ROM 27256 R4 ? } used by large custom "43" chip at N6 +RT1-6.ROM 27128 S4 ? } Removing 1-6 = no playfield layer, probably map +RT1-7.ROM 27512 R7 ? ] used by large custom "43" chip at N8 +RT1-8.ROM 27256 S7 ? ] Removing 1-8 = no background layer, probably map +RT1-9.ROM 27512 H12 Graphics +RT1-10.ROM 27512 K12 Graphics +RT1-11.ROM 27512 L12 Graphics +RT1-12.ROM 27512 M12 Graphics +RT1-13.ROM 27512 P12 Graphics +RT1-14.ROM 27512 R12 Graphics +RT1-15.ROM 27512 T12 Graphics +RT1-16.ROM 27512 U12 Graphics diff --git a/doc/wav.txt b/doc/wav.txt new file mode 100755 index 0000000..001bb9b --- /dev/null +++ b/doc/wav.txt @@ -0,0 +1,112 @@ + + ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + ³ The Microsoft Multimedia WAV Sound File Format ³ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + + Written for the PC-GPE by Mark Feldman + e-mail address : u914097@student.canberra.edu.au + myndale@cairo.anu.edu.au + + ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + ³ THIS FILE MAY NOT BE DISTRIBUTED ³ + ³ SEPARATE TO THE ENTIRE PC-GPE COLLECTION. ³ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + + +ÚÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +³ Disclaimer ³ +ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ + +I assume no responsibility whatsoever for any effect that this file, the +information contained therein or the use thereof has on you, your sanity, +computer, spouse, children, pets or anything else related to you or your +existance. No warranty is provided nor implied with this information. + +ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +³ The RIFF File Format ³ +ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + +WAV files use the RIFF file structure. The RIFF format was designed +for multi-media purposes. A RIFF files consists of a number of "chunks": + + ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + ³ Byte Length ³ + ³ Offset Name (in bytes) Description ³ + ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ + ³ 00h rID 4h Contains the characters "RIFF" ³ + ³ 04h rLen 4h The length of the data in the next chunk ³ + ³ 08h rData rLen The data chunk ³ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + + +ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +³ The WAVE Form Definition ³ +ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + +The rData chunk in a WAV file is split up into several further chunks: + + ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + ³ rData ³ + ³ Byte Length ³ + ³ Offset Name (in bytes) Description ³ + ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ + ³ 00h wID 4h Contains the characters "WAVE" ³ + ³ 04h Format 14h Contains data which specifies the format ³ + ³ Chunk of the Data in the Data Chunk ³ + ³ 18h WAVE Data ? Contains the WAV audio data ³ + ³ Chunk ³ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + + + +ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +³ The Format Chunk ³ +ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + +The Format Chunk is split up into these fields: + +ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ +³ Format ³ +³ Chunk Length ³ +³ Offset Name (in bytes) Description ³ +ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³ 00h fId 4 Contains the characters "fmt" ³ +³ 04h fLen 4 Length of data in the format chunk ³ +³ 08h wFormatTag 2 * ³ +³ 0Ah nChannels 2 Number of channels, 1=mono, 2=stereo ³ +³ 0Ch nSamplesPerSec 2 Playback frequency ³ +³ 0Eh nAvgBytesPerSec 2 ** ³ +³ 10h nBlockAlign 2 *** ³ +³ 12h FormatSpecific 2 Format specific data area ³ +ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + +* The wFormatTag specifies the wave format, eg 1 = Pulse Code Modulation + (or in plain english, regular 8 bit sampled uncompressed sound) + +** Indicates the average number of bytes a second the data should be + transferred at = nChannels * nSamplesPerSec * (nBitsPerSample / 8) + +*** Indicates the block alignment of the data in the data chunk. Software + needs to process a multiplt of nBlockAlign at a time. + nBlockAlign = nChannels * (nBitsPerSample / 8) + + +ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +³ The Data Chunk ³ +ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + +The Data Chunk is split up into these fields: + +ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ +³ Data ³ +³ Chunk Length ³ +³ Offset Name (in bytes) Description ³ +ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ +³ 00h dId 4 Contains the characters "data" ³ +³ 02h dLen 4 Length of data in the dData field ³ +³ 00h dData dLen The actual waveform data ³ +ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + +In mono 8-bit files each byte represents one sample. In stereo 8-bit files +two bytes are stored for each sample, the first byte is the left channel +value, the next is the right channel value. diff --git a/makefile b/makefile new file mode 100755 index 0000000..311395c --- /dev/null +++ b/makefile @@ -0,0 +1,59 @@ +# +# Makefile for Thunder SDL +# + +# Uncomment the following lines to compile for Win32 + +SYSTYPE = __GCCWIN32__ +EXESUFFIX = .exe +GLLIB = opengl32 +ICON = thunder-ico.o + +# Uncomment the following lines to compile for *nix + +#SYSTYPE = __GCCUNIX__ +#EXESUFFIX = +#GLLIB = GL +#ICON = + +CC = gcc +LD = gcc +TARGET = thunder + +SDL_CFLAGS = -I/c/mingw/include/SDL -Dmain=SDL_main +SDL_CONFIG = /mingw/bin/sdl-config +SDL_LIBS = -L/c/mingw/lib -lmingw32 -lSDLmain -lSDL -mwindows + +# DEFS = -DX86_ASM -DLSB_FIRST +DEFS = +CFLAGS = -fstrength-reduce -fomit-frame-pointer -O2 -Wall -Wno-unused \ + -Wno-uninitialized -Wno-comment $(SDL_CFLAGS) +LIBS = -lstdc++ $(SDL_LIBS) +OBJS = obj/log.o obj/v6809.o obj/screen.o obj/gui.o obj/resource.o obj/thunder.o $(ICON) + +all: obj $(TARGET) + +clean: + rm -rf obj + rm -f ./$(TARGET)$(EXESUFFIX) + +obj: + mkdir obj + +$(TARGET): $(OBJS) + $(LD) $(LDFLAGS) -o $@$(EXESUFFIX) $(OBJS) $(LIBS) +# strip --strip-all $(TARGET)$(EXESUFFIX) +# upx -9 $(TARGET)$(EXESUFFIX) + +#obj/%.o: src/%.c +# $(CC) -c $< -o $@ + +#obj/%.o: src/%.cpp +obj/%.o: %.cpp %.h + $(CC) $(CFLAGS) -c $< -o $@ + +obj/%.o: %.cpp + $(CC) $(CFLAGS) -c $< -o $@ + +obj/%.o: %.asm %.h + nasm -f coff $< -o $@ diff --git a/res/byebyb.pcx b/res/byebyb.pcx new file mode 100755 index 0000000000000000000000000000000000000000..ab9245b5f53c25b99528d54e7d7f97c63e0a50ac GIT binary patch literal 1531 zcmbVMJC5Ww5PcIEFbt!?BUCVn9hE~taUFq2;1PHU9>4*Qz#}kJ&vf_vmb(iB4wY}B zBhZiPp8Wt$Z1sqvD%N}T>Pg@)Ki&NdUcccF{K+3L5m8k$^WKLLVvH%JoO3Cq*4kRz zwypQ>oLkowcfaFqp#JCe1z+$tmig0d{fzmDBg0Qz7aXS}H(%eQk-0^9V6aTrXkx^j zx4rHP{2ELHGgvO)?=F~bnTgw&7nUva^sVT|^7IbcWA=Mb?6BiJJ>f#&nMxn$<48U; zahy-Qr}Gf?j58kRM=E4Yf)StQ2j-^B{BjGHiQ`Ns#+OmJ>m9iVs(iuIu5TZHy0X0B znFM?3&hj!I`Nt8?1iXyyr#&2;uNdixxyL=4p02%L@jNzO@djqb!v|aj@C^+FjE9eS zoj>3+3mX2S@Q-|9KmO?LVZr5a#CgAIB>yisEceUda(}?#d|g;}&q^GaAG@a?)&U!J zd(D85;dDz}_Vjna1*e^UklcV@8!k8SnQeBmcYzB9KJdN@{FPtqfBMu72tWb~Xb(E! zfCm(CKn5aEft5*zH3$sq?Hj-Z>RfaKMnH{Hqstyq*I;WT6FZQe+@!n~g)RA>Locz{ z)LZVYCUrH&HD?iofRxZ0dWUmRg&9i0T0#jDgQjRX`I0PWQm2L{5Q7DTf|3;3T=7zZ zmS`pU8e%c&3Dk9?^M166adcu2cFozTikWh&WVC{<`rgf=s#gsnCgPpb!c&4Hdv)AN zra4#*9I5uY_LWCW%E`HZe+fKnT3dTBMpC1G>XIfB**|ik&^Q$xFc-Zv(sFQ*t(DBP zODMw3!HWwj(KHDX{c-3Xoq992fX%Qa@I?hy@;IaI&O-t;!V-KQCdE2z%PZ=J)?u9v z7USDPtvPtEJRmIunlW0^nBKMbL{|zO5AY@}!z1{N3~AE7hSZfc564bh%FkBsr>%}iQ|l)rq1GDt z)B?%)Nmzq$!9#0#ENe`XbRx+xgpNoC5}6FafY59SIeeCGgX%p=<(i?pOZ7sggEI1R zfbKWN%Q+~(Ks47IsJQmnAfi5lHF zN%>QO2g2uyq^ds6c12ohay~*J>8eZ3X_A4iNqjyU0q@#xNC%_&#-}n-*3WDtmFbMU zREOqP5``%ewi)RtPo!YTeo&N(EPPV@*T0@Xt)a31PFWDn{Oo7>-rloqG literal 0 HcmV?d00001 diff --git a/res/byebys.pcx b/res/byebys.pcx new file mode 100755 index 0000000000000000000000000000000000000000..9ae847e43379d7d2ab0f54058f0f6d1ec1b3627a GIT binary patch literal 1300 zcmbVMv5M?A6g@5iA%sCZLTa_?)Q;V}<`%=7E!AXeeS&@Uhs;(d^z;v`GDq%7c|q*e>z^8&zFAY zvb>$favR!9KaAyNk2I(8Jho*%k3To>h~aoSjs1nOLtk$9q=}eQ|G?D#vE3to45!P) z<#FgA+To5FkHlQYp&yRSYWj~es}1dN962#wzM$O7RBp|*%V@`LZl|GrIACmdx#g`) zZP(6SJD$qzfOhJ}^5-4eP3@J7w+ZKQY9E?kIZxfSecVHbawA!}ov+O1cMmc;x7{>O zEOPCJ9mlG#!$kh~Do=+!bU3%q9l7`$sEd-nj?YBQ-BY>ETpvD-*ZZ0rGp=aLZKTBe z{!cTW@v(e;B;@J*%Wk)n*K&KByG!$o?|GE}=?)0sfB+<50V>l03m8BF5%53;Rt6PT zry(#_{z(uGqm);B8WXbD*{f*b&FWa=RN)E}rDtFow+u;p` zRe4e4l@9bPwX0edUPw+W!|Ez5*&<&+hmd5&0Q#_-;gC^D3lWLXl9cA9$Bhb=Qb?;M zEc9<$kid$LfE&^hzc9i5ZPb}Fi_%%A{;yLcD3O4;T=OU?Vv6Y+_^ q`-vFJ-R*dEx;k^@tq_ei*^F=YhW)I|b9HfRp9jGBezy%$_ul_`@O%#d literal 0 HcmV?d00001 diff --git a/res/camera.wav b/res/camera.wav new file mode 100755 index 0000000000000000000000000000000000000000..25aead1861fc19ee730d096854cf229267707191 GIT binary patch literal 5860 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 aAW&VS^VU}WLNJIxeUH`W-xbZ*s`Dv8^ literal 0 HcmV?d00001 diff --git a/res/checks.pcx b/res/checks.pcx new file mode 100755 index 0000000000000000000000000000000000000000..be3cb2a66430e7493bab678ba9183383c83a6276 GIT binary patch literal 1070 zcmbVL!HpF$41Ie*LWqMUB*f8&Ex=8|Z!=fsB-K68qWj#d-7U<~2Cp;~hTo<4{#IbN7@|MC6=HDYe$tTJL>~vG4m@OGM_J zxcPvaBkDiL6Mo>l-QhbPwi5>KX@A4r_JFUPKLMB9^Y#ebKGN+o|0kU2a^5a4_G$a_ zY@c~{dtDrkcv*3Ax~}fF^VK|3Kl}V)p0@kzE(>vd!?BiNp+qCpIB}ImKSmsXYQ<|MbQu^5b$B2eS}|0Ymb8Vn?5(68 zxw)p)TxpzcmDX)2@XGV4|r`?6(>Sx99yEotxYS$_hYP-(RQ literal 0 HcmV?d00001 diff --git a/res/checks.raw b/res/checks.raw new file mode 100755 index 0000000000000000000000000000000000000000..bc0984aace8da157b69c1da85990329b4309ae18 GIT binary patch literal 460 zcma*jQ4RnQ38hXUY3fIr58NpuJdfgvyn2H*!nU{ry*-=(!#Bc6R9AO(b#aD|`-dZV{f1xhJ3qXPG1giUan5<~LkKa(lv2*Qlu~P5 z*R{2#wO*D551;VRtA6r&#b20DGoJCJzT!0CavE`b!l17EQGMx=nYWr58TK#g<)6su zg2!Q3)#o0#@}BUxo7HeU+|=_u1~o$MMs+->yS~~_ik&w; z9N3f!I?gQO2jUlX1@&D|okZ;kOzJ>x{;-zVfG6Jf$}c^CzQ>@p^uyQAcKDCz;hsy$ zPhI|Z6{kD437+q&H~g~cerwJaKc7IU7fRd=8OXiw(~pdNYcYUh6C%*Rx(}NOZqnvJ zpZP6gH>u+f_<)f(NoiVluajKg2k6*=*tl)mcOcY+S&fHbH!OY?~(rO{qg>9`C*0Af){T4pLjk^c;#ora3<54mYiqI z=l-7q;5>10!?Xc?J%RZ4d*x#I5Z~7K0xJ0cFz-%3oS)cYe5ZfKFMP@V*V`$82O^Mx z3N)4j4zPd*5)gm_EDUNa-aufTd@B$Gt98)5j0Gi_5_ED1cJZR0AUr51)~v zMG~Ez$=>E5IlAIQ7SkfA>y6I2-X?_Ji9OggC2g${v4nC$%~*?TO(an#O>>oIhubhewhz`zF z(sFQzwdTa*)=-3qhBMk*6U0V?NPje%L!;h=)ngT`5!@)xOrF5BT{{>L8z2!bb(2Er zwxtDSMQxBq2eWYZP)hQS-#pXBdz#T((wNq4Ymu&GI_}}b)C6Z?#fhUFcuPx+)y7%z zBAyQgEwhN$CYs1;V_fMuLu}v!DVV2?wzQlP(Y_VVM(K1{8*+6f!vW~KFiU5nYc|c= VVq@cTnFHz)IZDeWy0t)-^f!Y`9e@A; literal 0 HcmV?d00001 diff --git a/res/coinub.raw b/res/coinub.raw new file mode 100755 index 0000000000000000000000000000000000000000..523e4e3e42c505aacf06e2a2aced8769fb6daf91 GIT binary patch literal 1800 zcmcJOOOnGN3`AKFptAN6eE&11TOWi-oXONov=B0WYJ_B$@~?J?ZIaDw+b%~bJKow& z4JjFS7^@mlSLW*bTzB|h>xyQ2!YX|?bc{Z8LOa8aEVzLM;o!Pd@(cs017u~2l<(3< zg5@1yh{B-~y{plzR9nr6@8sl8FVQL;!iZd03N^P%Kf%!iqft_~X8#?Am>Pp0l%;2+ zB?x%woLvw#e*@;(-A>2xHyO?BMlPcW42t7}pdHO&gLhN~;F^TC&5^6P5s5 z&?{J5Nad-@;I(o>;^CXH{j6BxysPLp?3Ko6`{!B8X(k!mpy{3j^2~^Vzn9P+bTLoJ gu~pbJ6YPgYie!7f}?3*g`qT!N2zd`O6cOGpVR!HgdtaNz=W zl*IcpyEC@mt;<_*eB}Jh$sr=DYGyG;cTXwhoJ%RS*4A3@{kpC(MhM|NPb{CX%&h+$ zFIbLs<6K_wz;fr`F`xVLz=1d0`q=ib+wA}r{%yz3*qsqKfU#U1+p+FnwmTO7&h`E@ zKema>)cx^9+}8d3jNE4awtk%@A6!f3s>4$`|ZdfJbD(j#?(F`v}mQ@(%F-2ewNP=O8%rUMaBAOHnO zKm$%115OthG}@m86KDu2%rqvnBrSy!k@R#s6OmYf@WdwM&mg~Y9K}aXqvg@d=q+n# zDV?Q=z#TcGcZ`7$pb9h8inDrkNv=6r$+2cDh0wX93&da!uc%p3EYv8~wI-`MHc!=L zWU#MSxEN=dlx8K?VAWEBs+cKVwV+pAEskN9RHLekm`DskD~~KGM-B93)8f{gl-g+L zICP-Fk>OS(v6{X|CI$%+bCNKrarNj&1}weTVdn=lKA5?m#j zW{^i<;BK0-gxL yxFA6(IV~1^G;(9>R5u8*CX$cyKh32E5C8xG literal 0 HcmV?d00001 diff --git a/res/cya.wav b/res/cya.wav new file mode 100755 index 0000000000000000000000000000000000000000..66f980984a30ebf3d080453fb74ffd2b5e66b8de GIT binary patch literal 17828 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 Tki>oC*?ApL!q-|IKGCm#1yxvj literal 0 HcmV?d00001 diff --git a/res/dipsws.pcx b/res/dipsws.pcx new file mode 100755 index 0000000000000000000000000000000000000000..ff214067b1ff5b7720ebb19bc19b6ab0e586cb0f GIT binary patch literal 1319 zcmbVM%Wfn!6g@qiWHMc?w8^BB22#W;goH@EK@BX@D=+u}?}nv6!5@K<5YZ5%v9d#K z{0Su?rK&?ndLE@&vhpXCMnb(Da|)2yumP7;t-6nM&pp?-C)=Z4@Eqe1Kk(s^QYxji z*2WlXt#i(MA3}&R)^*)=UElXPXCXvN38N1%8nXW9d5!UOXN?X!PbahD=pHXI|9)1q zv!dBt9E|N`IGpdd)%)K)8tsjqGj5IT9qf(wUSW-`?bozS zIo+epa1~`zyURoXcS0RLPHt-PlA?ELO3y`F`;&{b|M%!m8?#V zNUT73ViWSOAlrMBgU!+9+UG9huJ%gQ&ZQ8fgthPrA3Rc&aE!DYBIdL6*@Iw6i5V)9KmvWAppql*2 zOLkH^)_3g4cI=7@XyJ_P2+PI|`Ys0Uxg-g#1&kC{NvD;U@YF{j8)Whg=q-AU-h+d( zjO6N5c3~hbl!Nv#VGzmHgKQz8?$KrFOa-In^ibEq8ov2wqOGMELrDsgv&z|1l}N=c zjFw%1QBc}wLprdEl1L?_QQB&4c_}EFf>$a~M0V?aPt9p!0qY3CI3b0i*rmY>tA&pxDv2ufSX<$*WxkEV+LPA8P3#9B2$3V(8Sj`zKA+H%X zPSjSN&3OLvpKr;8oK+A^I~gEP*Vt&3D1>v&#d3gTDL4c)CPb$fk; zBW`O8O+!spY17PBVt(VX%wokHjQG=P=4yoD5Q6~3%%I&`Zpzm^AzTP(>);cp|d`{Yw38M!`!jcRd*6N6Sp9yZ6~B U=@*{f8Al`ul2dJ%LR@fG|E+{ofB*mh literal 0 HcmV?d00001 diff --git a/res/dsbutton.pcx b/res/dsbutton.pcx new file mode 100755 index 0000000000000000000000000000000000000000..851c21707cdbd7a0fc4817923000bcbf9335a35e GIT binary patch literal 922 zcmbV~!Hp0x3`PG+fDr6TF2MzGa1$=UCAfq%;Sy3pO2~B!NC{KIlwke<5*)ZdMv6vG z{O$kZFCSk%gX;soZ!h0o_^YaB=I#-ZnPZHqnsctT_TJ~5`@XwdM6TnnY&OtXsUv!YadbS)nU!4PO;I$8zlg`}!pp@st_ksl*zrI;WVayYXmEoP~Qw zxBD;)vs87}5V6Haq~$Q-Nx9ARowT%jUwv@`YL>{~AAz%Q&egq~qR#%=mmbx@`h$-0 z&=m=|jL<__8V}rOO^%kb33oxLr0H-gMUju71I>OX?!@i53w)^LO->uJOF$Dg;DwkE zq_H1t^TNJy8r~$hoUezyX9jo9uV)g*Q<7l1t-DBNk$56p&qNr^!-MT0jY!l)!#v%S zLqTMQGMj`*w^cWpGsFTpD8YN8Vnoh}OZKKWwobaD)OwVZ2FTrcOP0!6+Gg9TIhSkT OTtzFrwBp|IYkmihOeR+V literal 0 HcmV?d00001 diff --git a/res/dsbutton.raw b/res/dsbutton.raw new file mode 100755 index 0000000..58352ef --- /dev/null +++ b/res/dsbutton.raw @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/res/dstext1.pcx b/res/dstext1.pcx new file mode 100755 index 0000000000000000000000000000000000000000..2bbeeef82e90ff67f98c83f9365e8258b95557d4 GIT binary patch literal 1081 zcmbVL$&DN_46J$BFbqE!0)hE1U?#y36aqs~5)45hC|kb_1ee-}iF;d|&DMV|!r;?YLcUe4lyRN!)(BAL!cNz1;C0r`t9V zfnl$%NA^A8!39FTCNh1Wc4eF40sQs8dsw#h0~`J)p&SSxfeuVyF&!v?0Rl9j0s}Z` z6da*&Sn<~cSC~kZoyLSwbyR5u)sFC^5{V3iCpIA;L2+hTEmp5<)?Q9OOd}{ z0!MYuW3BE4b=J?ibgEYJS9TPWT~Ps-T67YYjTfA=H%`8?2zNnI3DfG9iljb*Rj^oZ z!x=aoXMz_MjO5Qi*`+`OR^f@#wn%ks+1i0|VlMcig57z07^6ku%HPW)D8{CwFl*Ub zNmV)(4;0tgPz>h93(G+mB~cSC=HVV33QA^3vqllwZRSbMX(B;XLNHELjFQvh5^JzG nmQHm=iM5fG4N!MylysHZb(syz#kuSi^GLR`x@I{C{Aj-bGE84j literal 0 HcmV?d00001 diff --git a/res/dstext1.raw b/res/dstext1.raw new file mode 100755 index 0000000000000000000000000000000000000000..ee7d2068c5ffb64b3f1ee3c70c4d6025805267e3 GIT binary patch literal 336 zcmZ8d*%bgF2x=Gi-!YVpy&2qQ` k-5zGOc2vKi;BTLfOq#7T41e?AFORyJ@S3-O{wWQx4Tp;iasU7T literal 0 HcmV?d00001 diff --git a/res/dstext10.pcx b/res/dstext10.pcx new file mode 100755 index 0000000000000000000000000000000000000000..6ee059238c7542ca0b3bf0a2cfe2101a6b776f95 GIT binary patch literal 1132 zcmbVL!HpF$41Ie5A;iHYSeok|+yLBMLP~H6X(A=0gp`ou?q4AgA{Xu{VM+)u|Nj*S z-~gl1#N*iS*)PufHxKW?=OfQBIjI6skOG&dhcV5^E}sDA~NU1 z!zb*d|9!sV_<`d)j&C@g@Y~-Dp6EWF_vY2wj^~@XJvZ}md^vDjb`Vzv-z|Dxop%od zt}lr$xZH#HdL!D_)%~*Lu0haD|Cv*=bDZS$me6kZp#~Oe8W8p4f!E1;ts?sXYQ<|MbQu^5b$B2eS}|0Ymb8Vn z?5(68xw)Zzy3``_=R@Fhk1^M3PEcq4tV@S#CVyr}G1wIqaLGvrVcB@XIa=jqQ5NAY zNGf5P-HM`6AHhmktheF}oQ|`A2NjIu{h{oVpaIM9f>gIixo_F(L_aYWd{M#XJU#SY zBk{`{=@ArTQ&O02G?yc2=4MW8T Dr=ky+ literal 0 HcmV?d00001 diff --git a/res/dstext11.pcx b/res/dstext11.pcx new file mode 100755 index 0000000000000000000000000000000000000000..790728483a52f6473592499b18501df774946791 GIT binary patch literal 1184 zcmbVL%ZVH@5Pf?vEXIclp`fpOs1S^yLQn`5f|5`O3PB<0xHIeZ!A2N^uYEU$4ncmJ z8P?eB#cq0fy6f}my(j7Io4b4PdXIZN+&$d!RaMQ*-BU^tk#jDk)LL6>z4tN3aU63_ z5!v@0cOS5t{`-2|p0S;=ea7|)+jl%|*dDQc#P;CcAqE9Gn0x?ftaZ?^ywf5Y?p3FLVqw;S=*^2pGc zzvqjDOKPdPF#ow|eOV6txMa6)ct>CVX+0bWpa2aRz+^j+00RW5Kn6OnGbq?Y;jrYt z8(d)`Symexde)w$CS=>g_e>;CAUv@Nc`b^gq*-IOJbRg=&e4lW&v~y^6%i-}V_;5* zzzpta4SS0gn!`%=T2d=sE1}E4P^iNL(a?&ay0oM%tYvQ{^~lY27LeBsE~Pal=QW8l zIJH(WQ+H#kRg8wCr#aoTSuzV%S4|?;xRoh6nJ`n_YIqMy>a*{2=Q${~h`hcCJP~8; zb2cZalRtUsP|cj5sVD|j(E*p7bP$%p6OPd;515jKyCA8AX?81$LVpA^VUlmf5jY%2 z0T(J*$umdWB|!t0;RUHKlX73S)gAr7nD9vln{)NhdyT{=Pq9bPj5U(R%xQBLy3*)) zAi0i;WH3*jNC#oGL`^iAhkI~S&@w|Yt2B{nOF8H{LmUv95Udjwqveda#O%~Y>U39> iSPMxhfWAAcq^XRi)2v&W+?Oq5?1fTh(~^!3-|H{Gk9PF{ literal 0 HcmV?d00001 diff --git a/res/dstext11.raw b/res/dstext11.raw new file mode 100755 index 0000000000000000000000000000000000000000..46db74d3e43d6b62fd382d828712a013c2beda3c GIT binary patch literal 585 zcmah^2@ZfT2;(pN{~x6n(;4GpW@$?YwN~lypMumB18hyl!l|XH%I;eKWFLYh7%B-=4^w0D5!uzm(7XGRQo7(wO%Z{__wh}Wb> dE7~!o-R$2hs{Fs1ezSGlJaMDHAiVvZ=K=@s6Vw0z literal 0 HcmV?d00001 diff --git a/res/dstext12.pcx b/res/dstext12.pcx new file mode 100755 index 0000000000000000000000000000000000000000..a77196bb95b01bae960a2fbe2b367980093c5bed GIT binary patch literal 1181 zcmbVLv5g!t44eyW7={CuKw#4kSb^b$C8z|Jpe9s;N>B+3@7{s^HiQoxZwXt1Ji0sJ z@y5e|y}$|*Ma~RI(#LnF58(G1@9}VYIB}|~X6EiGrHIHmmr`o2t+n3!7~?pOIj4y1 z`;OBWtfK$@o^alNV!L2_zK&1$j_r)?2ex0>##()4${82_j~lk@WM!PM;T5{gR>C)~ z9Lu^g%-hIDsH^5QSJ&~VE?3flN+nk%T@DIzh-x7H;&6abZcg%;1f;# zr^9d{fC4mN0F&iF0t^tK0vYJQ&Y)lqg~O7+6u81fvaB)|^sGHgO~|%~@0mzsAUv@N zc}t3;q*-IOJbRg=&e4lW&v~y^6%i-}V_;5*zzpta4SS0gn!`%=T2d=sE1}E4P^iNL z(a?&ay0oM%tYvQ{^~lY27Esq6E~Q12^I{?gS!)$DbvJIciqUZNG^cwuOJa*{2=OZY!h`fCWd=6vmb2cZaQ$Ka-P|f7e>?j7iq602D=^!i{ zPdG-ad|gTr?t-KerrE713jGnxgh{;>N8oTA1w5!=CLbJamjn%1h8Lu|Ov-)PR(JFR zW5OpLY|hg|?==!fK4Fib8HZ5X=)5qveda#O&;i(&?@!u@;iD0s8LDlBP16PP1-h@?N%#u@|;7 Lo0fER_+Ebl6cKax literal 0 HcmV?d00001 diff --git a/res/dstext12.raw b/res/dstext12.raw new file mode 100755 index 0000000000000000000000000000000000000000..df3413227b92f89830885ea5b3505e68402b5e1b GIT binary patch literal 441 zcmaKnfeip52m{@P{dfG9Ln9xR7*a|LIL3;I1r1zv=FTE*>Q>m9ac0$`;S-`#hy!PL zV?`rVo4{_?h&ORn7j`@AW!IXV`yaaOwHTFh6P{VT&K}OEYDxY*F^i|bgKF3ZY1xqC_}B67~9lv-33Z5$^2kiG^NsPuowBThVLxCp?!7x%z)Y z=l+^_ZT_UWV$OOeVQydO=Cp)3DJ~(d96w|G!hSh@!#f_qKOLO|0TiGC1DH$)5@3J; z705sbb{YkHC>)mjHNh1ol4Yeap=a$`YC^U>e9uH;1;P`XkY`XFCCwVM<=M*|b&g(4 zdd_>Ts)#@-7z1-c1ZHqYYuH<~&>U8>*OFTCS_xeShC&@4h=x`S)uknEVJ&+rsYhx4Gj%t*TE%EMdYaQcnfZQ!pv!N7OK*ycp$lsiexZPp4bk;D2bYAG7tCQrJ!VnVpb_4*_LupbDCHnG9efz wDn`j^af#W6HjBqYu3^W1x3KD1e=XErDfPhQkA*S+sA^j%H?#ylBre&^vj0K=ITn*aa+ literal 0 HcmV?d00001 diff --git a/res/dstext3.pcx b/res/dstext3.pcx new file mode 100755 index 0000000000000000000000000000000000000000..e7588e4d33f7d97cd9700bbbda5666a40328f957 GIT binary patch literal 1284 zcmbVM!HpC#5UhKE5aQ7xv^3v)bP^qc-|*=WoP^onHfZTj&hZD<@h@YaUO|Y z)#l&9HM%eD1o!V?6?Oxaq^C5_fKc;KmY}3zyK!8fdm*JKm{_; zft^9Y9twvge=2Z=iDX%2Ea+K#mYR@l58pG9$Ut~v6Y`oAM@h5BYk5P=!o(Hiy^Ei{Lf?6ss;yjDV&fuT@`2cn@BLv?9MTUg89O6rlD>nxzI z2e_0LP0ovn9AvFk%+%eu)hb5A(bJsn*({lbs;eduYrHOOIhk;$xYh6;Y^l$_&z*Oz z)FSfoA@J6XvCr9@piceNr9(B7KeMA4?1~P!RPJ>M|+!Wn10R4~z+)bg(&3553n&eDhD?5j0~_ z(wI4I&O%oj9SKLPqElcxXx literal 0 HcmV?d00001 diff --git a/res/dstext3.raw b/res/dstext3.raw new file mode 100755 index 0000000000000000000000000000000000000000..3ce341b9dffc35d698d914b562334ffef1d3eba3 GIT binary patch literal 672 zcmcJJ$q~RH3N?^(`+?*{h2?jhFcx1 zdW~nnDZpTWWp{4oWqm$?WKynBjf|GCv4#6S#d3$$=L&6y_eBe7037GQk zqSFaJFq-k$JyqRZ1&Kh`e&Iu$Qu{r$4FBFN9a6U(wH>vhCq}W+ql(dgf-z3n-3~W{uhM>}8HRM=vHl z=e<@{M4%LmfjJ=pGq|HQ>@8Yo4lCJfNv(LTOkDTdkhDn`T6)12t0oa^{O>6_nea<-tKmH;sn5R8 zork8>BJ%f5;PDw_pR+lWI{Rl|I#e_3XDW(8Rdm25Cml>n;R(lRm8VhJgu5WAglTpw zib8(`GhwpdiX(71jsk8}5Xl2d+a*B*mf;1dE|YR!w$&Z|z?kq!2b**E(0h%;M1& literal 0 HcmV?d00001 diff --git a/res/dstext4.raw b/res/dstext4.raw new file mode 100755 index 0000000000000000000000000000000000000000..c68543f2c915341347fe28ee8734714b1889dabd GIT binary patch literal 738 zcma)12@ZfT2=g!e|BupR%n`Fd%mms(iHLZ1eDmGCW?j=M?ri6;&7%`EeL z@MS0|8e1e15K1Drq+!6)DUgxXS=QIIA-5)^sM)q-nZVTdl484N;Tu>tF< sG+-8p3GsJm{wC^lpO5ie!3k=j-fa1VJ7wfxv$K;6M4Y1eL%N)Pzb<2`WKPpB*3x0(B6Tuq7y?JHrkT zf0D&QtCfaB&WQT>?(PHle8zj+-`(GFs;Xw@?kS~+$T^o%YOSrc-uoEiJkPb3h|D>0 z_XRuXf1e+CI3|v7I396)$MJyU*B`%6+~(4Cd^j%G@8$T4%k!L@m*X49E9{26Tv=X+ zr`IW&Hr>ztWxhu|9{b&Ef1_^IJO^LVJLXO3R>iJTKE1=u3H*;}ebgCxaabpa2aR zz+yO%00RW5Kn6N6xhR;Sa9Hx!09TkumL0}`p0#JG3E5`&%w%E)(vzE%H&C1L7KkL$=nwdXSQ4Ff011>q~AT5O_oTF9V7-bRe zf}|3r*{vuF{SmB$#d<5w!09*(cu+wkFA;5*1Pxe*7o@sP%6;2bC;Ex8;EN76=joyM z8i^yXrAN?=os!0^Wos3>(&%^~xsHltFi)OX4#H@OnrJc)_h3`dGD9(|G?8jcIq5l< zm>@DKh!Yi~)z)v1l8(_K+=Z6>7v`tC$YQyEQ{S+}y-mn~z=LMf|hNoR-8`WxgT BYeWD5 literal 0 HcmV?d00001 diff --git a/res/dstext5.raw b/res/dstext5.raw new file mode 100755 index 0000000000000000000000000000000000000000..2a4229ec6b4e2a67e8ae81d111e1a6dbb1dbc91c GIT binary patch literal 420 zcmZ`!!3_X02yz$q-|+-gnzZMm0RgoUTbT>rz&ep>6g=1~ZJEflgIJ!y7n(r3l9$O* zimQE-)EOFt9?GnyPm>Bon)F}`M%(tEJrynK(G)QLbZiqsNyYWSi$dw_IO?JgyCDy{ literal 0 HcmV?d00001 diff --git a/res/dstext6.pcx b/res/dstext6.pcx new file mode 100755 index 0000000000000000000000000000000000000000..4f1a75ef9601d75bd0c1a446790593e108130a60 GIT binary patch literal 1204 zcmbVLyR95C44eyW7={CuKw#4sun9(XsuEa¬QUK_w`>cm6#Xkm1D6wuCJ~p543i zgMpXWyN3gp;tV+>>Ful28}NCL*LXNRoEWOAnYnvPDI#*trIcE0YpwS_#@M!P&M6}6 zy5jT!JLrF(CoE?y-?03`dAVT0@*PhMkK9izpRoL3;=%;$j)gNGmq$j|?~g}xxnjWu z=Fi7Ez7ljp?9uV=pc|6Z{Nj(n{yyH97;&tZkQbJHegSqln(nAS{0HUjo4Wo+-K&_r zVs=f}DW1iBIdoj7<7}6^tatSKpZ3Us01D860ZhVy1Q;Md1v1cql}W)G3Wp_s2DrjR zvg|Mdde)w$CS+T~*GwjMAU(NBc`b^qq*-IOJbRg=&e4lW&v~s?6%i-}V_;5*zzpta z4Qq=Qn!`%=T2d=sE2+!CP^iNL(a?&ay0oM%tYvQ{^~lY27I3Z`T}peKocB)b!LGH6 znYtU7TE%GCdYaQcn4?wgPTc zu#)$Xwo8HrEW-;@-A&4Ux2>+|8^(lBI@p}Mhu&)>{_|#g1kKo6(wI4I&O%oj9SOQfAYVwhmwGZvm%tkN^Mx literal 0 HcmV?d00001 diff --git a/res/dstext6.raw b/res/dstext6.raw new file mode 100755 index 0000000000000000000000000000000000000000..1de12e5d4d67bac364089f76a9943941c7911c7c GIT binary patch literal 532 zcmZ{f0S;3OP^LvRRw?kz%yll%oC z3taG(bwqhJ958oKT&}oJuad667i@g*E2Q{F?nA>LeTUK;92H(Te^&T`w)~Tw4g^qu z1`J@a97uox0#qOa9heLXW+)t%{9fP+6UlOvv7l$|S!zPI89p;>GYU?#5&ZI=WMScVs*dYF{^VOyQ(JH~=9I@p}M zhu&)>j=Y2(K{F0Y8nc$IRp?5iPI(GoS$WFGFpLqW?7#jMgqc3a9$ z&lw^?WI`}cRE(B0;u5Q~H%h0wqQp9olnu~#XO=XT(R7)0D~so{WsF(a%4%BD-r=+U E2Hp%}VE_OC literal 0 HcmV?d00001 diff --git a/res/dstext7.raw b/res/dstext7.raw new file mode 100755 index 0000000000000000000000000000000000000000..3d9466e6154ba653c740d6f832b5ecccae2ca888 GIT binary patch literal 399 zcmZ{f*%1IC2t(~9{r9-O1jl0*KLm3Skua0w|PCFJ=3=Kw;AIB?z)wgfY)_Yned zfvl9xPMoo4;(h<-_6{71w|Klg-maypnYnvwEh2jFnK{OobFQ`a-sgE%m53b2f!jx1 zhyHhb!KVj2e8X2fe7~k=Jm87QGv}xK`tt=|`0I0rpMOT*(HFj6euwz|2lR9&eZdEo z`%f|*2q1w8Y@jZ~&;SDj7(fRWa1az6p>SC9Uk6-aB3-UyJg~a1E~BB_5q@+sF$3wz zP0D*voY`tb&0Z^OkJ>9uR`16cs)#@)_C^&%Ug_;-!FlUw)asroutnCS(k3r&itK%=a2 z(ZT7wJ*+jNapuqA5j5jUNn@(4D(T9kI(lIvnp3ZU=KD48mIYMCv|VqeaVeI%vS)NJR1 GAL9p?wLm!l literal 0 HcmV?d00001 diff --git a/res/dstext8.raw b/res/dstext8.raw new file mode 100755 index 0000000000000000000000000000000000000000..cfe6c00cca2098df0c8bdebbc17e9d9608411e95 GIT binary patch literal 231 zcmZQzfB|I?U{Ho}vC()XK^i~`fM!690a9QN*kG{Xa0MW7AOuUJS_Cx#q5zwNP!z!I OL^cCi0mvyJdl&#$DF`(H literal 0 HcmV?d00001 diff --git a/res/dstext9.pcx b/res/dstext9.pcx new file mode 100755 index 0000000000000000000000000000000000000000..d466d14134ddfb75274edc7b7bc2d51f3d1338bd GIT binary patch literal 1132 zcmbVLyNw(%41F6II2aCC0)b60pxpyYPzfwSO{fHwpb`}BUgEnza0QAChf{+5w0q|d z;K24kqv7!LNIp^T-<=-7=OZ5QczQfhR8=!`_momZwbs^J?|qDM9LHKqMCP10 zeZmg<-{*S1;C#j9_Tv14{r}~*KjF+Ze$n8Jr`w{_Wjk`+bz6FV{in#d>o(o&ZyPmR z{CxhQeskmZcc;IDdd97KhTeg8QCI5j4P7Wbjn(q%WsSN< zFD5b(D_$$1%fL{m!voRKilMr+q%EvvZzc7} z&2<&9u2;B}cAA`bCgxz)TE$G=jiy#H8jhaUa?fVTEL2@JiCE)UvgKq#OL42=J=juT zeXhxwF13jK`4BkWW6ZUh6VzEh>(Zf`nLo3m80?A+xa6dRuxvcx7_IWMD2s3xB$Y7D zZbebZk6``{*ZP_(12xlL8_ai+&67?q8}IwzQ|y6o*sIyk+}0l zdIZVXDM`#)wpJl4jf@A9>!?Tu^W=%;AdHl#i6--K4-N$>GZeE*64`Aj2RWyT2_h4M xexhQeoEn!{oxQPivMWlgjihXVygR+5sf?z}tXo-}%a$=_VJoX?Nk@mz`W?JtW(NQO literal 0 HcmV?d00001 diff --git a/res/dstext9.raw b/res/dstext9.raw new file mode 100755 index 0000000000000000000000000000000000000000..d4abefc9d7bac76277dfc6db41d548d831964f9f GIT binary patch literal 450 zcmb7A+YJCA2y++q-|^_{ginc~N@*ch)j53*5DAblm8UR8HqLI)A(w>3cJ6S}xK*b% zGBaAHAAPwc-aHDPioZu&NRck0EHYvkPQ@H#^;P(XIL96gW)~dtk?)f&wG- z*%-N8`TX=Va$(l?>GJUmJQZv|QXX&dmP`Jut>Qoc33Olri{(H83=p6J6&S$IpkNP$ z!;1eZaD|CfIm=ius*WnHpxPe3S1Pds<*7}{r=&QttQM=+HFC|i=17xK>)x6wB9MtW zu@*#N26yz1y+;qNVOhOp>FKReIwz(=9Uh2|o`&Yqi}tWyy=NIwyX#7DuJ3ZCoNa17 zJFy45wkBrkZhX}nX2&tgTJF`Xn1!mV77^<_WwcyO_$J+2_y}4WYwT<15zUq&e_jM0 z);agJx>M9SKj+e^TG_wSQB1lb0hd~IQkKRGj@cW}zH$h6K~V|Q>XwQmAHgbEoVVc! z9F8Nwg$ic!b3p7;paHA!L}@3aI!J2V6?0EoSzWUn1HQL!q&T^( literal 0 HcmV?d00001 diff --git a/res/dswitch.raw b/res/dswitch.raw new file mode 100755 index 0000000000000000000000000000000000000000..1b77a0d3241b51b6f35c3253b58ecc49aaf45a69 GIT binary patch literal 1690 zcmZRO#RX(=NyySbh8-P%EC<`ei3ZqdB!ktr1bm9_Xj-`qEeJRf_Kdn(Ru*^YP*-L& ztVhEdlm>98s^OMGEO~h?WkCqpW8g9oD8efXlm*N1LgkTUfI5NFAOO}1mVuZii>5~g H2VejI_?w53 literal 0 HcmV?d00001 diff --git a/res/elements.pcx b/res/elements.pcx new file mode 100755 index 0000000000000000000000000000000000000000..86914715233011392e954b3282c8fec1d7e56c16 GIT binary patch literal 25392 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 a&>rHK>r3YFtc@tc_4#(=<&LSJt^F_WHS1OY literal 0 HcmV?d00001 diff --git a/res/i30hzb.pcx b/res/i30hzb.pcx new file mode 100755 index 0000000000000000000000000000000000000000..95e7581c7b56ef7bdb04fd53a0ad996478e136e2 GIT binary patch literal 2055 zcmbVNF>d5G6n!oN1VJqD2rT9RT%`+wbUXr&z$5SyJU|K-IRHD)Ok&)Yi*3N);j0B_aTHB zV@fIK+;!bJj`KVhUO)dhO%twuz?FFY&+8N3<7V6M`u*>1zwdY3n@8MZyW9WK?swY< zobm3@_T3#$nAVEeJ%9{Iof*zV;2*xnA;w?iFIZGSD#V|&B_H{9&6dp@`Q zIyl0_hNhyuM7U!G`3>77t8IN zrgO`B`qlJs-QHgxzwC6XObg(xc+`iHPL<#nvhseN>q@_r@_C(y>VIx)LAxr!qNWhl z*|S`AaeLQRT_`M>z94?3yl<1| z@_UcI`3=nzntS|;rr$J=Xg0F7Y3_iA=Dt47rf=5e0fVehbz?OP@F0#oZSoA8bwS_5 zM($w&T4wQnoW&DHvt?k00@Y5)o=KGAz|xYO$1Cq&^?&S#YKqL`Jn*= zzw)>cuv$q)oND;$vaVR@t3brDHc9hR5t`$o2AyTrGmg|LD{62csced1(uOC_aL0{v z-F(6a;cD(kcU~wzKzbtL5XKtBSNb$oAP8f44iaS3j4N7@Bo%#$UT6tm>sI0#yl17=iTUCglS1b95#7l0)fY8B-a%XjB)%l#uw;AzNJ{nAe5QISCVjL}Cm^O-UJ}tu-{| zgfV08Tq)KDW1KNwYpbgPA6SteSrrwqDmXoomW4aaV@~{zX(nNoV}UJHFk5yHU6;J$$d9G+4N;0-0wMrmiPx7PDeP%?vPOrnUaHpZEnbBh6dAO&$sD?`b-W0fx* rYh&tES7~wylV$wXU45R^X6>cDOZrC4p7tQG4*o|5Hg6J!x!Gqw}nMlWHaFa2#yY$Q>fEL+J<0BXT5iExKR>z~*p7dDOAnRG2fbO61_k~Zmr yu&j=Q0Z5lgU|nGuJ-9dy(hGLU+p~g;i`*+#jUEKSzvje<*V z1idR_)JHI{XGQ|Fn}EC3R+p>ZtM_dG@#yR^IG*7t-tplO5mhy_7^AzVlyc6clv-lh=1uq+GCp5tt*`pt2~{_@52e)`boYfdjN_a_{1@pAe+PcJWSfc>=0)1IN} zU(VQnnJ;m5oNso=`LMg4Iqm+MuQ1)rJHCgz_w*2+@cz@hyZd35-N(50P`uHfANYgo|MtVk?fe?k&&?m^6UirBeW41f zdy7|_(kGzef959#&igwzUek>m9A16=nx^Z`uMeEwq_-DGoYVYY+BE|l$Up@;Fjx*m zK!E@hAOQ_n7z|ikV9;pa3rwIPq_CB-pe1Q3l!&B@+meVx2Er4YkoQTx<~WLvnnuf` zm(g3+&{A4T5rI2$M(-E{AwU&os1-}~>XKY@vXW!XRtlkWM;C~}99~hgqFAU=s%uSF zb8Mcf$;e<|4{$MVG%0ONC@OSPa^tSydVmQ3tca8bOWyvoGl)iTsI*yi*k&u#lp3!cus|+H2u86gFWN z5GA-uGR=Zae*#9tV7~>cV>PT9+$d)zZzgRI5#rDU%ZOz&DYebEvY@T#12*VjHSQi- zD<1jfT{m}{u~E{PF?5VfS1KKMM3Y_+6>8BU+kq=B5e*X6+{}3>Xqh6b7Me)4Ij{7b zArg2Z1oMIfrR9uR@X@G^t<&8g#M+RA0_eLjD^v-+%1~{Z2hU|q=u4)QQ6@_dod;q>d BlG*?O literal 0 HcmV?d00001 diff --git a/res/i60hzb.pcx b/res/i60hzb.pcx new file mode 100755 index 0000000000000000000000000000000000000000..9022f23701b0a74b287c1412cb0da30503b06279 GIT binary patch literal 2075 zcmbVNJ8mR56f6Y>48v;h2n^-`+;(O-!U9)XwO0UYoM%rv7!9rpaBg;(?naNL1I z2aSc(1?YP0QEMgd26oSMPm`}+)q6!^_``Qs--FlB_zA!A!%J&zjIq`_=e+kJgcxH= zDd#*4Ln&pR=US^$YMLfo{emmW`k&Wle8A0i+>N(?^yBTg+ul6l0o&c}pZ)D_`yOY! z`>TI4%c^w_B{3DwcL;W5qsQla=adS-;L|r zafRF*h}j-EzJ%Ae7tB^LJHecVp@HSGi0mYKyF|&-!s`IfSd*yt-E;@F#%dFcqaDV|6kbnRTz{E*~$!k~`XI~PmhEXagNn^qg^bk~X z2xjtj3S^=J>B&vX1?1=GYVtLQI>cI1EkiVF2w_S|Yj}?sQ3`5>QZNSAB4pjg7Ng7kDsWsA- zOvgQ()g{3h80)NKIq-&-Xrr_<)?4ejDQKBNG$zqRb{peN&pAZ_A4ox*(#p_s&RFH^ rz}{Fo-Bp@g!lc;%eYZrZtX0Xn8Z($!xi51-nIc=MSw}Yyuv7X6L~;B% literal 0 HcmV?d00001 diff --git a/res/i60hzb.raw b/res/i60hzb.raw new file mode 100755 index 0000000000000000000000000000000000000000..5a3eef7b6440d1273de49adf1bce7395d013de04 GIT binary patch literal 3068 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 _2PNL~u(>Zxz2_}-L2s7ovr+yl-tovA9eB*?` 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 z z&Nqc) z01{FhpY{j`+7d>_-~0+``JkyZr;T?s0tvfg&pr&3{W89~Z7gYhHzgE?`(lGM+g=6Q zw)0mQ%OIzIox_RcvLRS<7`x@w;HIioC%VTB7T7K01XrzgN8@7gw} zNU{=@Wspi!Gy&9Csm>xdbgJ*JX5h@f>?30!ws^4b3~v*>$btG3f(cvP z2wInTT%x{I7bhA4$+YLh@Yx8qM4gd3v6ymKIN!yo9*9a+=w5~v`!R2Pgr8JGk6CQ+ zigX-LD3p(Q(}js9kLH89T}ETHW;q7VRnnkh;-#Nv7p!G&>;hO6fDJVQkA&BKeda!? zLRJ`ek<}`=rX^N8A%W$KdWs-JI#qnw$r4pDzAD3*cp7OGiv zWe8EA822MITJmN|Jj__z?{a6PQL^q;=z@(NLI>u9!M}c4r@N0;bK8)Dm)D!Z=|@Q%+>; z6Qri9q74$-OXTW{{>OOsdoU_pnN{-usp$cbMo)mb8hzlIGe@xVTTUeI9uZQTOH572 z8{f!LwI69lhL%Q-+mnQ!aypr5W^$ul##4pf`o*>&6oDby=o}#HD(aN2rlZL z1k@cG-qSQ@ zu@E7C-a|K1j*Q$5heZ|qy>%=bJzg{4($?fPlQq7(rKnl9_eV<-_d%{I6lX<&nFs@3 z2@xVbhV3kDEZRpBMe)8%F=nU0w zz%Oo)^`vr%)|w%Sr+vPKjj0Mqj(2WslACwnammeAeCj@FZ%ax#gM!J7EXJZc>RjQYT7pTl zcg-d1p0~^UEK1K(YJs`9@K`ofJ|dZGPh2iHC0sI$NkBBs^V{(qAazMtnXH*}mfe8f zp-DNKvRL17gBHHHu2Jur>C1$|L5Xf+f<$f@ zVHCw3SR3bpv4az>`n&hM?nFT(>47-`<`}q8s?t}&f|`2|QPg(DMej6Zih%%^E}Ks= zN_fWS$%R1NV{9KUkTqL~5m?OISnYp_8y2)=|yX5CEA__N(yP2{{Gh&*MFa|Qy zFFgsPwL6%i&zihZ8ft&jgu}7J+sF)FVo*$R$pG^(!(FP4=?SDVwv;}`=ZdB``TQ+hWflsF4VJSD^HMI~PUqC! z*NGBZC54IJkNa#J3Z@G5qgyXN;(^HOt4b%pF9EMy&vUd*})c^PA%QB%7?GF-2wm1yJ- zi~Z7A15Ma0wSbKeNHQdj?URrNotq87oHP9@4h4) z4eH`BJ!KPWN}cW@W?L0I&!Jd*>gL0-C61*;Jo9ajM{(oe>0c#vf(rx=s zAD7{9Fvb`mgb+puVT>`x7-J5@@Ns$EpZeBXJFDfnFK14xyQ(rHV#kii$gJwNQJ{|o zlT4j*Z8&84xN*M?L}N;zz0_&!hME!t%3rs z%D^p8nDwM)xmJ1?)0P@-0F$;`xNBp8sUR`xuW|XDZL%SJjx8AFmRW^-$4u`p&|P7P zig*sd^p9!utn68%5&H>pK6jmjU!kzGo?ajdtSx%_ZUOJs_~tg814xdFv3!eun=h0o zD8O?i)+4VxkRXNHR*@$19ZGvs#c#s-^(&|rgiJ~EJ%O}5n{pxJJ1)R1ZSZ+gzHD#tM@BJy0R%X98)x4I zPZubN-6jqvb2qK=2B6YBfh0;l)ik95jOwM|LK$~h@nW6-inF+YMS(+XNea>Ou=#|3 ziYTB4iPPS-{ZR5KMQ9pHcgexDYBv*R{TaQ1`~@X4qqSa6;}v<54r$_z0+x-rLeJZ* zm3dg`I70gPl{0SSEbHilMHcQ!A7x_aYLuqUL1Y5JST~rRSshwO zrU|h04TnlEWa}VYq{aIdEMu~AyA?`CEsZdPJp3$w-#-n9W)Wlaz+$P5w5^DBqpZ<# z14Xb?VXO`!uJIH(#pjZwZT`WreM46F64_Q5SR3%tq6{u!ot*809NO535wOKcQ)1ij z%5eZ*3T&3GB#CfQI<=5dFQ+X*oP3Pfo5C<$_DU_jPjMI;qlgAP!A@yAf!J9Lp{t<` zY%Zdj{@ret5=ONHnFz~reVw>l%bCyMITWSL>a?D?v|7V*P(aUi6PUoflCfk2ch@XF zc`IxD)dQYFDu$TsT$jRoW&3EjzXY+l*?TeMZlhC}pbHFP+n=k&Pb7}ISk`oj4+egJ z%ZD5wmxGUUX^C|BDk>rFuwh@Wk2zAKi%_Zux3K_; z{)Wnm7oitY24_8P^r{@IPOvwVp^rc0#~ddD{KzstuVHavXrq|FcEbc`QOSBmJ{ThW zwMk!eF>eA0YT*duhEww0nN}CUA*HXC8C{jR(uY@`U0xEvV8q^ZETy2mAlA?uq3%0* z7YBfh0h_l9SO$oaIwIa4y4Qvv>@z!3i&Gis#j66~3ub*`)RaL(*^+@-)RfMzPWgO* zqp>@J>t($W;RdQdOylF2`anK%MpH0WQ3M6C`|tn!zyIfd`#U!lcjEw451Gt|S0K@1 zlksYJHB7>(wwuFLlnxN-_7N#Qg{iCg1(azqq+6FcB&WDY zJOu%Zq@4Pxi}AncC!0$J>t^b7Skju-!W(z+h-u%Sq#P(|f}(sf9>t&l2QMcT>7+Lr z8CAK=+Qy$hEP&O1_B$!gXt}z40u?oxC~IyZgz&wHHdtY?^*>~*mT0>bzcA-ce$N0(<7kI? zfnfwAaL}I0*~oQbHxA`M{xeYVz!D@!1Q7oPYunC_$F-RyDB}(~n7&W~j6hkl8DrNG zb1i2YM;0Ivk!Dx1k>7RDHr=dHI@1BtB~Lf!st|P;Y64E%;Ke-e6II;k;4sB}rx6zNP4=Xb zt<_q*`N3_F*(txV+i$p+Kd_(afG}`EDnguO{FiKetR=Y91Hm%L(8N53GifuCXNyD> zJkTSnm@_#sD>=bQuv;(na%yxiGm4%#S-5R=l;F_G3gl}5anl_%`KmFlE3ijv^j=A4 z3_CGefKic%NOO(ZtuK?g`Yo3VQoq6EBpd0gf{oPG2&Oh4aU^l^)dMR~NTL{yS5$Js zr#7N(vg80T;dim&9|Cc|$Qm#PID52Qkry(cc>^_U@k6?!rt8eATE}u4)*F~ZtYR}# zafzWJ+mHk&^kZ2F)y2VrZPPs(ne%#abO*HQBCb^hl8v-*+8u$%d?g$iW&~7dVlZ;+ zpcJ~JZ=*XnpQ`6vB4&r`$|l_Ip_x2QC0GnvkeW$MvFaxuj8{!zIzF|MK9X_Gd74F= zWroiH(hEpl>kXTPZUy!aR-wT(Ll74=M*u_i=pt)RpNazs^N0HS2}74r=;1<2FBl-M z3&wNZ<6542Sfrdfr-H7tWzMJ(suB!QJ_ z+nLVM$YOw*5A*D5y>Ke4^kfvBstYmK>`2J8tA*k%qTiyBO!#!%~3dnO^oGp^$Y5$td_M-?SEpNPATdX@ZhZyjj@++U|b$U2j6Vs+caA`_Q9eXGX>-BK4ZWQb1 zNYVVGRJygsE-Oo0a-wi!iWFf;OeO@DVUuUD(vK4BJOn4SqE}ot&$XNhsXVJrs3#J~ zW6{FcAR5N5;i5)H55H(vacm^dEm{(X!ja>qMhj;>vr`ydMUNt&t^U}bKGdGJnB87p zXP^of&`gig(ex;upg>fR^OiT5!L_oG(;Q0{T!UyKqiU+HYft>!qrs;= zhFKOFxP}9l6_;FrdY4m;B%$%);^M)V`PB(b8W`%Un*=UzN>Y`LE=K=KxO|Zy1tZy; z{jpaa*BG$ELcLReqZBG92ap1oFnn6rB#&D5HdOSQ<0%>yRKP0c%o|3u`JtL5&FNxz zwgL=t39Uo&k44kaBqaDTwsup1H7gK#r4CKi#>Kpfh=}Q4>f|{)bq9b2*9c}xvYYbTI}YyC z%@qx3sF0moi=N#ge=gRaj%utvW-f(lqO*rf zGEP(uIH;4?h?_*aS-*9IUoIJ@jKHE(JGSNN9haANu+6Aju)51K+NNy zvChFl&~S8e7cD?sYgpOHH60VLAaekW=bUHj=EoE%-i5RbArqmtUOg>&a&W=v5HwUv znP7%B}CQW`qJCo1F-Eii4#B~8Y!XL>lt^Zm|^E3>-Pg@Yp>{$jAGy+XQSx@`xx zHZNBX=}2t&eHSwfv6S-2jF?tMBEmU6gxH*N(@L;q9(n1?AWSS5BXqc)O zFdl)_`C--VfN{Kp(oqw=;0lJp<_Vm`^k#G(aZ(a_tqm{z#~H!qn*}~Ujs9XEs=dRw zqoZQ;4<6a*eLPI_H{RM8|psJ=HQrK|m0OuEAI2Ij-r1!?HxK(To%?u%jM} zr9*&|{I6%ul8S~ZyID(r#E=u#5pPdRS>rgQb~GS1KtqtRb^W1E3W@?)6#0e*z z>-34(a>*2Q!pfDVRE>8Y6fo0r2njH<_|Lx>2Xaewj6;iJTAr3>8G>kucfuS~W`tS_ z;(-k#*-b;nY*cLOoVy36HezU@%<%>>#@36jz|#E>b!Dz`+P}aNcDv`0f;7saJtOuu zIK%@n>fEdxfvSY)uD$}D7G93(2yClFy!})K?0a)CA5~?vg!i>`PP*iV4Lla09v$c@ zl_ID9(Bq8PfVYrvv`VB9cG1R_igGdpe;tGu0lP%1YQw@}(i%^FHYEyxZcNnvD9*}h zQ5Z-!Ki1L6n44SYF+e?3l*N)OTjQ6Hj_UqbGC;&Y$QsWm8CB`yp;!oj`B<#Bh-EPn z?z`o|P_)@7O=uftlufNJA8rji%aUE>w8T?2m&u# z)`Q6hi7E^|(h6h}*99rcIWI$MdLtT3;@Dx=t}2UU=ZsLDibpx4);_A@RKl1CJjG{7 zrNO}TReCP233ydVa#Sk0lAP4FnGnyEs#JSSRzYBoY6zNW4j~D>`5Hxc+=VNup%AKj zwz)y4hv=-;jYSPL8x+~ENu&hbQQ@$p`6)GJg#(Z13tjlL?JGTWXt3VQQ?(*Tb}!eo z+-lXTsnf0E7sG<1V9Q6~N|O!Tf0d`kOde@C{Inb5=lg&%V!JUh*3sxC#XF&~meOr; zNdJYC5Zg~L<_#s4Vclamq~rp#fLG?jJQMoyJIB+RlhO~PN>;E>0~Y*ys~FAFCVhD* zpjU=#7l1ZmnyFPmk;rCfhnGX@Ra4?>Kn6ZBp#CZDA;vQ=pq1&cZf|Z(c`xZgWjdM_ zh&0p94iQjwl?wU8T+=DL2s-~&3dVVtW1@I+%fgbLn5$*x&-!GRfzsO0b-&Ki)a(^Z zgshi_2e0OnFA9x7Fz_#7dfHxr={*+PP+l4kG)`VIF6NlBu*f#5GD~L<+E2%bxJv1U z3GSm4v1*tuIfY578km}>s41<6D;DuVIt#hH@VLgXzwZbj%Q6=CY~elA<=A z=`c5FBd?>{G*Gf(i{jiqur@EA#R+MgGu?0^=ytGF?|#ITj8oe}jM7C)1JW;nS(3?8 z^mwqfzSNN%Ej*4kDWD{pud|c1-;s_&HinZOtx7tRyF@7w;qJ>MhO8S=uIJ4~4!XbB7rl$l4d^js^1t5`TF5OPX36MxZCWBPK?CL46sbh4>;id## zkYQ?U)4hUObH;0epMK~QmFd7~HAsa#*2EED<8Ayq^w9y~X^{~@8%KVgrGAvK`zIuXE#<{w^Y4lsl~>(uAwgb+_3PwICKvqnG0s#BwS_Ohn)8_*~ZmJJkx zbYwr0bJayFEv)}zVMFEE&`ANcWJKkr>yp}hifSkkS$XSu4biB1H+v4Y2F8rt*~?vV zsqiqzWwOF$8I4Ygk3jab0^M-CFY5o6I&_7K%ohx(DWjl8UMm6R)DMe>pRc^vVY;;{rjtv= zm`j^0#7@o9JI~5jOK^0qdl!g)@OdUPHwCE!4IC;P20DF38VDRIqx_&VXq~y)>jfKA zpgk87cFbp_o#;4sAgqi5Bs;o=9*5QTQkfpKG-kZ;&74^ZHdDd0ijc{J!N$L?u`pTW zjy4RN@mx)?=x#NYKne`&OcO>LisUqv3i^ZF1ss;d=4%8-32Oh+mYO(XXPtDKF5}}) z96B}4=YgY;7|<{6jr%{hjn z7wJl;V5Q4_A9^{nsSXlC8r`+vZNw0DbcXjFmsWwOT(b$^4J3Q5W5cLpp35WXf+{6* z;Rw1^)do%$(L}CO9{uctNW@?Q85D)R(H{LAI4v}gbGPslz}q=h%m9WdnmDIA&7t*@ z36=B!U z63?`dO{iz#FIx?V>!dq#U0! zGV-{x=nY_nO&&2o4DY&0=FDXPwUTYeQOuK#nv*%_AW4~q!m2}NOPR{c)nOWpz3L{W zM-X<=hItgzZhgC>T&JK0GJ#Ow1KhQWlj!attn__;{j~FZ(=Y65FSUEicUCq|G zAp0l7!#gK*1%JLGy~+<;M%*&%r|zY_wJRi+t6U=&&Q*4mfol1nAc z)GMopeHZWAR#LLco06&nllQJiikEPP{h@fuowpwp$;ImJ1Z8Dd_l-Wrm_OhrL}IQm}l6Jn ztfDuM=&`kc-|n?~a?oKml&OP)Op9~MOxErzabu-YXv8S0=qi&=(2cnrKiuYV&0+WgQ$y}C8B@^SJGafQL^px$I&`*>cn?}EE&rIGG zCN96cGUyp@GINWc_IL)$(&T?hcbcJIjyWgiEX}v&s$(Lq6C9Z=C;FR5qmAP*Uk+)&?cq}+a>TNDU61Pz`;S+93QM`UZDche2Q^cZRca(ZO>6RxfwmH zH{;J`nYH6OMi)A^Kw|+`R8Hv%1$&UgwEk${n*0AdAqhLL(m7QlE`zcmN1U4n!kG=& zB6$di$b%zfRJPnW)j>ICEG?wP7%4~Xlo9SD4@n274yss@JEEXr`io7MIZjetJc!nr zYG;r^-_71*(6L27^j2%r&G8yXa_{1ua>&eclF$YkR|>!RD$_Z$6V}|BHl;eQAc4LD z1T$^wN4sh+UErBS_f8e*cWMK&thyfr8k1EF(oeU9` ztj{24NJl-5L2}yhk!d-LlaQ1c;bEFil4dk@SyQgQFlK0*AQXC}s_EI>LdnxQshPp$ znCDdXN2nyuczF~z^9!^YYxGnOnLWDk=q-kNckRN9^Bh%!C*|N921pBEMIX*KDiNYWS$Kv;wT4NT~zZ3+M#CKpBos_(Bbs=!vV<{ zrFnH~t>aZRYM?VmfsvpF5lci|_Up8yO_hdFcqBx3a+lvY+`g}{+FZ^0M>B&uJ?gUy za-}{}m?tyIVYB4K5GRaG`EdN=m44zsW5sXRv`fl&PFssAxKvaX zTS3#jSCouvmxCQ8@X@02IDmqD;L|M|2Fy@!K$`=2?X6uNxsmM_ASYhTMl?E|hK%(V zC}c`64)nfjx!#y>DjD|Di+7h8Asbl~PJ zpUU8qXrGyd!vrBMy2fsCzG=dXiW06b`Zev8`~_DCisSKX9kdd4getTsf1s%fDok#z zjrRMPohd#Qxh}^9Y&sqp(IK%?TAjIa=ltBe%r47LYn?(Pf_JC3)KwBATI4KB&9{P? z$Z8bhU#%Hcy}RhVBTR0Y>!9Z)UU>a=#Pq2G@E-Gejq!tv$~$FV8whU1Y&d94OL5n-_Jd#ZWC7e`wD(qBaLp}e3u;#^t5rPJnb z&mfFp^|(hR*jX{&oO;Z+OF`s_bGTu9k)XuQVMla0bkZ(A(@|>KD{&+(@sC)#XX-bn zcspTV+jL+h)1_X+Up@0W1ByKjnH=(HFZ4i9(p3u0`i+4ec6!SMpmJmfqij|RBC+5` ze2rkt%lekYS{UX7-jr42so$6-!A{MkD{Qkofn~Tkp)*K5Ejv;`U$6uzPR;`eDZ2gVbeH*Y&=k+x zD^Q|?B~H&bdvqt%nL`zW!xtaH=1iJ4xC82gE*rAXd` zPMEg7rrDOGhh0b1A&7l%@^g(|<7D15B86XQ({sWc!X~iVbYi6N*%@A^s2|HG+0q!= za;1{GIA~mnV&hlwvc*Z0;VpVJ>f-Jc7ync~L8HjtUalfy&~UGdS(TnobdA`aa1|8~ zq)w`5#>fwVN>9N+#xpmDaNYdm03#xL+F^NWnd-_}^MzyU-t;~C&|T>Pts&`meY%-8 zC;3rR?Qq_mk9lP!*uh_{X3N!w&#D)vZxj%U63i~oYjEq0QI(E)!-zixebL6X3-fDO zb#t@^+_*tIYfu`TQgkdTJZCXR8({j(CNz0u>Ku);Mxjt2RcJWN4}>?SjyE z2i-$|d+3l|avZO#=OLy23wOs|xgDGQRD?qsd?R`)8) z4HYImmZ&)OyCQ`^!6SX8k!mq*!qo&c)#wX*MQ~GL`YSAv6(na!wxz3;s_$ylC*XcDNLgPY6{d`OYJ~*ko zwX@+cwN-W8A6*7R#)(03bYQ`2T^!fetqiAoE~cf21A0hx_TqT^?0|YkOVQoR$OQGM7i3zEo44 zrstx0QIPtaO(ZR zyOSQ)0v*!-Wk*AVdI9Gp+17yPDzYYN`u^7mlVggy{NaW|V=s;2OPA=BtI@+)nPWW5MREOD zpd!Oxt=pK(4;IW@Uf~mc#r6Josn}GDH?Ge;W0;;J%ay#OmA9&Px5_A?-ISZ&f2tL9 zL+m2X#UDgrpMA>>CF?&TPF3;%I;w1euj2W!vx(FC!#?F~_TL*bTKwc=(sV=`(|tz{ z+f8Fj&nF_fl9P*}9TaLCS|7!a;d6-E6k{CCF)E67>QGHsI0(pivnQ~52Ky|kbjQsh zywhUM70z00(BXZWa^0RbX_2`K`65S5Qyoyx8j7-uljC<3rbDs8E?5%7fab z*?593=i*3iPlvn)z5=C_9kzqc>p~8nh+S`;dk(;C#UXUoPGm=p8?J<=PWs_?1s&+r zXI|zaM*@Ug#~Xd(uNEBLd7~vgpoM#OpQn30x}(fhrjkGN+uS2-_zy4`e&T1wL$ zwPoL&@rUw#mTCFr=sKeu&!m=T7N3z@GuTk@XJ*J)A^k8kZDQ~Z1J1ML3ii%5=L0-_f z7gQrk@QS&1KJ(I>sl1g$4Clys{D|Za@K?#J_oBkk@Y5CBdv9XnIMmWgz!+B)M4N)b zHy+$*9ubnZZ)AjGKAZD0ZDTl0Lv1b;?6{O4E&<2eI=Krl%c!FXX{_sW03VRmIJRpE zlyCail=Sjs(CD1E9y`<(M}4uP|9I{A{D*F)R}J_xN^pnY9wDtQI-KaQIFWdQmrEF0 zK(Ru2qNf#e2C(%r&C{M(fHqr~*_F8%Lv} znT&F{gRmX^h{akFTFO21^!2!$(b9lkp@l~+P{QgzSQyE$Wexxg-`hGi^(LKe9Mj%& zzCVSEE**4|Az4HFVBge!GT4HJAC!EHl+|EbMLSMO3+36+W(=8j9XU#*|Kh}ovRGFe z8>$?ii1N~D!KoOUA>v>03&|1DT9t$u>NKUrSP!y>UX~ioIm5mJg^W+D_E}?%Sp1#mWjR&XS73kFWFS+Jvjc&PXmi< zylkp!=g>4u)R5(0{sj5(NLP-YD1t{zPWI_aFSFsLKYV&Jm?PPf^M>%`tDkEq`J!U{ zH=tKtdOKoL9iNVNKD~uM#ZNq3$Fpl5&?Opo;80{J@mVz;i{_twf>Dzer8Y4d7E4~F zFTMdsYqlTX)X5=q%>g@uFlTo{^9HJ7*9E(tn)mWpF7nvai$|)wXwU4J{s*Ls(CYwD z??5TeY0gfYcV;8~uWR&b?~g0E0JrSRVHb^J3sf&Ru(Mw8hqn+O2H+?wO*#Ip9dNDQ&))O}wpWXFe`2J-;{^sm*Ey(2 z`a^#upBPu&;}R7LG*w5o|D=L{*TOzHg}}i&?q3hA+tB?F`HXG`jYsZQd&D z2yx8Llq?t>8=L8mW18m;63nZKio#J%LGiyt483a7EDbdFEkU2Nad7%wTILK#%RrRT zYFh{=PFSbgrAB{mN>!l*{=rT4X7O=Jz14lnYe3h;kCszsn(M}u1PMF_NfrLmRHKh7 zv&Lu7Tw42f@GexwHt^U-$K>=zX(()T)Y{F#`-lKZHA^eMZeA#zWwcAn8`IDYkDSQJ z4Y|kzYi4G{CJ*J2T*bTSay*d%m&TnqMyi)u4Mnyd_-ITJuW$F*B2syabD8E}jLc3( z>iuORy&cXkdD})Dv_T~_b&~5BU2uqO_5x7ag??n1+lN#O&T*STFJzVW=7ET(D|mBW zlXW>a64Ud(wW{W*5p>XmA3eD~Xdde6m{-z18>}&J=IDyvfBjg5@$?rqHdlFs+aE`ecRxq6naNWKm2;Ais%2pX89%u^FXP zieG2=H+<+SN+ET88=b;;W1p}_N?i2n4AeI^t~ys=QZvp3hEyX&u}SxH#CS{5 zUNf%EBF9L<9F#{mqCpo}i^OaQfn1_i{CA5NYYr>;DSyDZnK!H&b1)0k7?tOdU5rj| zF{kkX=sLtZdjzf~^*IG^Zb_@K5uf9g^|2rS7m`N(bI8R#on0N$@8H`Qh0Tr~7hvv< zc=N+NlfYS&=mh#DQ7kypCYg`u5a*oYNe4VPpRxHMeP!VVPBuEQ4Ws6&T^1W-;H9Iw z=>_YMlee(vGVR#pys4FEXtSm5K&qS_=#X=VXS!lXe4WM|)xf2nQh|zjDf(aO3sEOt zCV!sUg$&U{CA5K zFVRp(Nv%ekdZYOfJV!ek>2w+T#?i-HMS{l&$OAD2K9i+$iPr5LN|_`R6o|AAyf8 z8Dc*!@Z6atPcExF!`ge=UFe@r^M*Qe;u7CE&m7Tyo&zr@_!rnCrkUV0W_I7@G{>A? zD#xz%vEckUA34V$M|8I2kx{BLWxnw>m&|u6v|fsdAOn?yYsawv+b3v^eyZsIN1+*| zSB`6Z+owho1Wj-@kMEaD-Z1V0ja9aWY`C7vL^!?u~8h^ z@p_pz-zJ8OQnO@+l?aYsB%QW2lA><$tT#A%oYLD})T`$>brmt{KhN}vPc-9AbtR~# zjsE9}rqP>2)3>v4FJ9-Vwd0D-a<`+5@aCHXtg0R>4wfof)0hn#tW(O7QOXl*yEsE2 z7KYjFbnJ@W@7kko7+xr*cQ2e(7uzgBlz< z(S|EPj!Vwmm@LFe?rDG~bA%sVYM`0wytP16KM$$jOo3n=VZa-vB5*+omPl5Sqso>V zx6`_B|IOwNqVWuwppI*2|1q+IU%MxEwP}f3)qU@T{j?xt1ZZ#&i@AS<3tfU?DfoQY zL0^ZAa*~z#XSj(tk+7hc+YvQQIe4Z*^4Ejpr z6!H4$R?mL|de{iqbIqj!!->9>T#`P(;I0lIuSrUV)foQMxc_p61Mm2#n5>&n zla(93Qd4DY60osHci$f`_~&Y=b?Kqybx{)xy7+oSM~HwTu>6~xb3pZKDA;PXZJnSQ zXk5pzw*JN9nohem04c?0d=#9wa#MrLH|aR7f1uj4z= zd!aa~`HaEPnv%h@Sz9}){{KCI%A6w!iQ4wZWOC5hpC*-gB}95# zcF@oy@<$y;1})yS9`c+pfttwY595|I_0_dD)UsJ{%s0ZJdg>JnQ{bFMebK5-NiK4L zWlt${qkiLGFGxin;Yfwx@SFzlVG+`+N%J;z!qr2w6;sO<2LSDHKh+3zG&@ zhcGc+2t~odU(9xtGs5jn;`DSSg!bx++%a52vh**28Pz|o3;Dk$F$*}2H&k_17&-?9G_b1$pCXE{nSzU6B;^TaeeY! z+Ks|`WfvdnYNNrzpgNjgT8P&vdlVFv`ClzH0#NK#GlvM0{|SN{N6I?uFRlvDbnk5z zCeVRzW)cwQ1J2GtT{eCeBHE91Wr-|C40u(^Ml`q?8Z*=)bvCb9Xq?Weuiw!?$jO_K!K0IC8lY-bAae)rj~dEmv|-!8XE@z# z_;{B8M5D2_L2n3x=Jh#wo}k?()=qnYR?48sNyw~FDnnG9585&)d&Vr#L0G*zqBIxOg?P}$tFg~W_uTJsy@`)_5 zU1riHOZ{p^i;UokN#b)fP(M{tKMkSj8GnnJHZ2&`_sAxhOo}IMYR1{b9zQhjh7WTP z$r}@Rxu2*7s1qcO!e|boEdJIU-zN!d<^%m=R>(hlU7#GVY)zsGH)Bi>QRL0u!$~I` z+Hp*Nq!*V3!Z>w&a=fCHxngcfJ>b8&#AnG=RMooh(o3h**^VC6O$;ss*TiyMa)k$a z9o@z-zthPWXGDfT6&@SQ!DBkelVJC$dQ{6pY$?*^J>bB~=;dP|0zR;7Odl zJ)D(W^h-AD7IosXh>~$JVJ=z7=Nv?;!5a(JK?33vAMnU4Z&N;JYs({MuA9LMQ`(#% zAUR;^b&rtc60R_kG>dC94*9)r1nf3Hz*b+T%}r`LN2;S(xeWJ(vQv`7p9TQQ;zdbs zO+at%##X6zGfOfQCq+o~^Roww3IEY7GGF0w^Ux8h)tQaGe>^Wo#E>Qo+Qn`PW#Ze6 zWeC_Z4t1o(A^-)`P^VlO0=0JbrurbFm!^To*b^c$VR|is4USsRy>>5`?-A$<+xmxr zM$T6!)t?JSmxI}r-ER?G>>ArsM9OM8eLUWTjXk^rZ4>D9e?2hSepbrwKyq5})?R(bThfAc*M{RiJ4!mls7nA)HpiQ7LV~!<1yUq5D0vRna(Lr zM_H)#{DAKjC_eA+zj8*L#19u_{JGMKlH|T`=lajRi=O&$0jVf zRIsW#lZq3iQZ8oO>)b3|2=hM#)XOQ5K&$myU0^W zQYH-#c|}*5!cI%AsdpVg4K8&of3uu6c>o0!{gmye+=_acj8u;e%qQposh2)KX zR;Iy+eXe#~+8od8S{$$zt0}GOUl0roU;9SfKF@bD6Z^1PlE;oDtIV11{q2W7sE_Px z^UcdMem<(demTwIYG_TENDn!w9t+sLqDtR8QbF}TkI4Xd$O{f5DT2W^=J|YuK$mW= z_3iDNKOM+%&W+4sgEqaG-PI~6Kq69jEwZws+!Y;{&=)3nE7qlz1220SgPOprpxR`E zpC(hGg@R(Ep>ycoz)z0mI-r6b?#^pC_M=Kc(aRWebdn=CqRe#Fp{IX_VZPnD95N{S zM;Z~0Kh)*&%KXuMmtOI-IN6x$6h7(}2q>qPwGLh17Z~QM0Svj%KC0lc(@Zk4Ll@{8 z5Km=1Hw;tk5vvg9aX;h#(lMS!n5{0e zebx^SaMzDSQAD!D;Tu1?NSI7cw`pK>+Vse{a=o{!mP9R6 zdLAiIZmtlOyrLexmqB8L4s>y<->OYLP-(vC4LGNeKzyO>n)w{^uxHeKIA{xk4Fcyc zUKDZYaQq@^IjA#e#mbx#7a)aB(OPl$UHC6Rhdl})v)5kGK|N9f`8NPe6$(|pZYfqS zPh4}|QSLZJNa87QI9?X&4Vr2x*S~8X%qh7<6*+!gXQw>FIHICvVsgVHwNUId?&l`|q zMHRY`rR2)An2%5>wT@zANI-E!s_K?0R`|w&{G%qw7oif&v{3h(A!DoHn6gp{`_*em zSQZ6bvsVOA)Zu{kG#KM~juX)XFJ&qQ2M%o1aW^kc>je7afwA$}IGdBMb9kehyhgRI z%&Go2GxWot^xi}p^6V%_qmhB>43Ewu`< zC7vkE0pkR1G+&U?P(3b>NQ~4<4IL6kbLGI~HIK}4g&(f!tDu$yxnF1zmbe6VTFxJ& z#Y^{K>aq8dIQFFArd46iIt2p!<$dotc#6!?j~n~*|M}ylxh{72MJc9huRiegoa^-Y zSCfJw6uL^qc4-c?Png7x7KUcis1Qk-&aMB@D9)-}bE!X9Z%bVu5Qp%|c*WebnZ^i| zA1Lf8fzl`&!0~CHn<65j4)B5o?#jgus#1Td4gXwq$vQVDPGhc7)n;dAqbSc;C@N#Q zxOAuu62CBLg`zeL!{x)p;5gCxdj0!ng^FO@%y!b~hZ?c+>6xJe%2^gY9?n1ClP(w~ zxo%YHAD_1(#Zj-^{ikR`oQ|OMe@+YBV(DwawHT3>TG(AV2K@Tt`%iulGg|qu&NDkY zhQ$)Ve|=q=)!WApccoNNz=0qciM8eF<3~BwzxXaWISUB=@h716FAEzrKYqD--~w?4 z_NP0^WOBl38aF5V_Y?n;l*&kom#@FRebXfVv)l922hO}azp}^?ObO-xImfLJmJ0e) zXMFqpq)K8f}UsmD)WzJ31mNt&r9s6W03n1=@s zQ6Q@<>>FJ_-Se+g;|1)0{>+ZZGpD$~fj_@I-M{iI+t=2D`NDPKoblzwK*Cy= zSL*>#)1cSqhdV16_n`Wx@l;TARORXJ{fG2?e0l*(IiuM=KA@Tps3#meeR6u0{#bfC z1CO8Ie|L^Bi{OD}qCKMO1n^ex9(c00eyZ_y8!x)oUP6 zQR)2jc=xU!a;B->(|$(&-#rd zwTZXu5k-4`AiC;E+`V3P1M=|I)7>*J087FH#noLxX*q=UTKVwfC$yC8TCXcUKM_2y zJ_%toYPHjpYvF=3=F*>gj)u?^CD+Yjs--CX7$#V`v zlsvpcl~U43jD|I+plw_P_rCr9`GdG@^04ZHG*4e&0p!Qev6U_|T}YovIBwKP+V5Xp z9+88=oqKt{d(S>I9U*JzIqU5l-KHdneg6sqXS~q5f8eSw+ixvfmd4A~pSl~QnheSw z_K6YHc({8S3cfq!`qE5KApGhVkT?9+?P;&)%vG_Oe2$NLW- z%v_A}<;U`QDhA8*Bf{K^_W`;U7N#z=6mTEW#UGsP!5)pmY-+oYPA+7U&*O!9@Sj=y z>CR+Nd;R)@d|{9^ha#99%IzErPH-}GYf@i~ffu#D{`dzXj3A}ZFJE5nUm!QoeRfze z*D84VfL}iBN2wnfMFTl$iRDH2q;|6pAv4yaim=f4&R=`y+Slc*e6oD-ikJDdbJBMk zYtF1&ufPyZR^u<<@z{(tDG{@Gf4}1nuMU0MPmH9fFHa9}Q8+#ky>L;_6t+0*@s9NJ zjBeBclHLfMj?nCpL*ViC=Rd!l*wjOYM0c(m!53JV469AR_aX$OQ8QA?m~53zj&$ zg4ddA+<>%P`YKI7QzXzB4Zl277wumZcG8G3oiS9*!bb78pM*0do>&Zy&!5P1+&C&! zjPF6geD?A0zdjHrMlDt`U4n$?x#02RheJamWiHhzw5*C4pTSy=<`nf~7G#cBHU&lS ziHG`AZahL=oka$)5OAoxLM8=V7$wlFEMW|g;H$fLItvV$Zz<&5^T++!{0YLF**M-% zs1ZhtAj|mp_51JNzn0Qfqf7DCjqk`a3iLkV|Ngx{6HZE(7S6k!@!SK60Syq1en~kj z#9Smn20;J)ll__$%PpVD3t(A5IvL4XJth>N;E$cmULB6>GUMSL^^>KE_0YwYSn+rj zR+gK(V-ys^r#oU;L5$^mW>X;by(J0GeEq__0k1jaNr8AFqq#=<`ST!C#EHcth*SFE zeBfqklnk43A3y%hPtl+q?7*}e5~%;l2}29NQA3}fDdMB~^}$m{#usv$;%nr7$;>bu zBy`YxOt#naquk3%bB8`!WROItZB&l3^fM8)+D9~)9 z6ygQI=TDlign@u7kS{YVS8LPb z;Q>x4=xgN)gAG@>N{pE;sd&FC=jg}qpB^FhkmKs12E3#usAZ#Sg0@EIn(5&^+gQ5j z(|(CWFL@~;+anUpY(JS*z8}u%bmSPp={D<8H55MGxp#|`K9juC4U~r4(~~MQzt9zx z#KD*(jlXMw;)3rLFWETj1&_w7{&BKXLdQK5dpSaZOEsrA5`r?%kNAfJR^h6ItQyf3 zcU+hJ`1;}s#B;y^I3M7Ip(q5VEVOD3`~L3_A3o~5uiw8svrbyz>&RD!D>}VhxsC2$qj5)2jbW8kP{n0`gTR(sMOr0GB)-xhN8nG06HjZ>l=oll1 zZKQ58g1)Au!^^{G3nN4nr_wZ8Bm{XQYI9DQ)#df^9?(5^J;wd+H}6?pn-Fx=0lHP|M_k4I|O+B`q`z9(=xM&P#&%Es~JS#U%-YXFizp4 zGY2drMh(wH&-n)T+Gg$wfe5x(4`J7FYfNK1a$us)o0k8wooz z)oG&t@<>XNCEtGj`oSMd;M_z0W37y0B(*tHDoLAHR<5PX=P%#B#K;ntA#(rj-dfM) z8hD%>i*Ap1ZYvPTujE0oUT~_%XVTM(3Wiq%ufC9ayopS3{P<;Fmn)qFplUKF9TPx+ z@q#>K)*>HAV}1^c8tl8ao;!;1N0Sxv`RN`Bu8fcQYPh(Y9Yz+b%Js+wm3@`I__ zZ2t47DOnSN1*BgsAuM~zWq@S_s1G@Za>OHFd6tZg3%$~Xl zNtHZi8K=WRJg$0`4YGcG^qExVn9r~7Ng5`dLI_(11cI(dEd=Bg*p9NXg>w5@Bl-Ut zJYvJf8K(I1cTgB&-Ep?6*LhEOjDCuHbsx= z>WM*5_bh9`i<$$Srmd#3tLe<@_Uf1CM=$PbJoWJYgEOAhbAw9mPCtAUH;|;t4IC>> zGv({2JJL5!a$dF7Me}>`$37I(FN6>BcivLb2zHl2#n09jl@-|&>#5c#Cv_<%fS!=u zlcBT(;~7T;s)0$r!|2&eBgNc=wu?oZ87$iWN$LiL=<4r|A|6HaMnZPsgE|(8ZP<@uaNOzF=79m zNKruK6667pt$?M-ZX;+SJcVEE`tcTAT)BP43_nSUPn2db z5;Za6jFVyLCBjSv?!wUn=X>6)j`7w8cq%;1p7do$663Mvl>&nx*6my_znD`9VE4Bo z%TUI}>ZP|?PJRF4ZoxX~#rZ*TYssU!SWeKGB<%RY;7f{%Cxg;Wrvy-HIpG6(rH@n1OctuGYS+5 z;hb{EOs5#2>@HH*GnUm?Iow&>3_$@T`-nMo#}fAx&az!n;%ax|u+SxqmpBNv5QlfH z*ErQ`#l#|z3$6#Nb-=|bLdAa>!j!VLGzpKDWc5s)IQ_(;gq)5ki&A=*+*qstFrNR; z4zUrzHJ-p-Olfe1x2(!IzQzK98BvfAvyfx{&P${pnvr5Ph9ySIbvGCoxyUS$CK}D^7hP|JB(jknUZ6ietq+Vuh~dZ@RHv`elkHftFoU5NrKjW5#T5a@ z<7^>DjYVQnPlje^!%hZQ5nL|=$t`+Q9?q5hT2XrSW-lmkw}QoxJ0%8d*gxHMH&JxQ zIL#v86LcCv%>QQEb`HcO`oY82102ctaSl1nDegY9c>ukLF`X<~2zs^^B;NKLbOQqu zIL;~Vd%S#hF?3B)Dh@7~JYD2lNzFf>?g68b-Shq;T(S*8%-WcsWs-@5j>})kk}cdy zZEsyr=tM^rJvzm8iWVAh_9f_8p&O9k#eQ;`UKb#Z=K`#6wJHuHrC@n*qBl|4rCU}F zBr{ozF>&Y=>_JX(%>X1RIr2=flBe{C7x2cK8WCJdr7RjYsrTv5odflPMihu#S_l4q zdcYlgu&ADSQV8jm>Y`1lZh1<@pz#gX{W8Y2Y}8u*(1CSb-m%L0ff|TbJ6Znpkqr~G z(Px8e-sLc^cOQ?-c6+5*RS7J5bSBV<&{DL`n_6TR{iaix(UUR|9<6VoTXXr5%DBDfRW4e5Hpa63ZuM2nK@#88B;b%)Oo`OIG4Bd4!DClUYo3T43>D9>hX*dwSw; zrXU0hP)rP%C5;rOQrzpxx#oyYL+K^LFXl*&<`tcSLrp1yM7HY>KyO7)JaT`Nq>mja z6TLn$3lj57_xdmPNg^UejoAVH?xLgJK7B((km`H~Y=uH2S+m3xtO2hUwHgSHRx^wx z71LJIr5aUXwJM(XE|ex}x{Q6LHqaF6ajPFAwDy8tXb&lLN|ZZJVH^JbqxVCYQ=H-D zRu`}y=slYz@EZwOWk+6c3PT}vQ<>rs299pQ;|lHxed`U!I*C(&#G9?(42GLi2-CA= z{23Y*XE?n+Y|Dazm1IUAMv5>idZUXH?^{sMB|z%7)SO~b!=)N5{m9)WRURIqoN#wh zs;Dq~Tv?)<#(15=ArU4ZDDl|Gb8|%Cd$j<8A_l#k)JxL8f-odTEvlSvFYwe*!4u>w z_Ly8eO3Bt~`Iph2i7o537xttnnhO-gvhn-3d*6=NeTfV%hJ1{O_UW0p!vV|y=$m3x z6F$d*+nH)$LXpa6_Tf|yBU}czBRjP@L){&3N@kM9%-w{VFl=E<{s7}pq@boi#up0_ z)OrxU*Azi!5a}QKWiOm^Po7X!m4#%Ur&kHmG{KyLQy{9_u$EGts+5Q@*L^ zi3CEPB@qi6NeRt>p2w(4npPUzDH7TwaE7TC;1479N^^&^IX9%R#g!my+T#@MA%=Kx ziP!*gokDXs#E?FG_m%DIZ`5qXyeHTUH|6w>PkElsT+9YnlMFZNm~Bi7>4l3a4Oq6y zMR>#@c5p?i|c_kFZ}cbPrvh>dutf8xBbwUhfusp^h6?Nj~rZy5f@aP_!rN~ zxEedRNU~VBFbm-(ox)vAX^-SJ@N$F88LQ_loGG-4brntl5wbm{RPI6n&rz$o+GN(| zBR$cLD@laTjwT~-w*z!g*}?k9EjeaK3M`LkNzS_GTXO~dmoKF$l>~F(dPg|}SwIM6 zIm&UV!|gT$hGfE=Vg|_&homCt8iEJiJic&X0|b{kF2|ferA}jTv*Xhvrj)*#GRk~# ziaJUyFrHbcCpr<-70)^aBJv2wm@4 zw~1-6ggwnRhJYk!c!H4hg*bDhp2rpm&iWYK#1*G7uM4ARWI1D|m(PPPg6iZJQ>_gU zRZUyUK$gKe1?$PSiU1b|A(B5rCL^V-LP&3xD%_rYo{B#BH}?Ue(c&{AzG1K*zkZfQ zHW?s`HMJ`nFDDBxvULE@R-zV2uzGm)HZ=d&u{7KTwOeIkic^O6m_Cjr8t=1=Il!Di z0zp*UIzl$UjMgXa|6z&`yjrqgiFrzr-u=bnz7WqyNsrAWJYMG%Z2ICEJsqPZ;{2Hn zBer4j53nQJ`OCRmMxr@`P)d<(qzMU*SJ~!mAM>o-(Gm{oV@!b_gfQMTTPcDroM*R; z16b4J$HF1POaR;$On0CEbgN4<^b2S1o=t1?FdK8Al?71%S(?(=y#7wApd+Kn7Vsjt zO*F`z=Y_WPm8XjoLO@3mI5ZM2j<=Lzq$Y1nkxM>9C7)fPn!imhc$!d022LSN1Vrc0 zOvp_k?QZ{!XL*%RK>hCTJDkEE68kOAIyR6XvPVE->x((E*3|Ze8QG~$T#FJ6)I#Rn zP5M5w1_(x|6vk>dgW8Ne&vpfi8!V)?9`7O02qltb7k#eA)^Hhy^j_j?{$d3^rzo6T#|q4Y8zQOtZ~LN!gehve@Yz#7|U z7D@IDuNU=>E5s{LZ<`8CL$Sr=>hB^@EvAZ39lUyf%wm%jp4Hp^Sq`DDUl#Du5defB zq$iAedLbO2c*kR-W-|u%aey!;N@zHOkKoM1$x!C!?_dA8dCdff4RW7Xw&aXlB1PZY zAzu1K6@#)uCQT4|x)cgIi%1qN}&M|s(~MKmisB!rTFk(ed{`|NN6z=p$k; zk>a0O2~tRw*f=bkyBo#m`VYsWy!0a7e)O?6Nz6urxm`$zc4g}3Zm5_aBz9FA z^pxYURUzeZ4NM!JXkuaU>zC7vXxRf{JX7HF#;8p6FzI6K$(j%ExZ^G-kpoMNQ0Y!& zf4s+b_UM28{-tn9x5n*F9z&K@q^};b4SXV4caju&pySJ{cR%@y!Gsi(qg<&+VGaB^ z)M_;(*!F@NPE5Iy>t62Nj3#P0E@`XanRlOgVx$M%>B2&eY6PPc!KwSr5bTy|hWNr3 zbTlzDwhuG)cpj(}^DGZG2g@u?ANmBAw_OcGdUq#HNW{#-%)JSJn5E=woEvlQE&{26 z@<0FiO|KXkXzVmlXI1)f8I6$`k976n<2#;HXL-R`Jf0GBc%k6?_#WmNGA2ihCmZp+ zr475@et`kAd+Ipfz(}1aeR(d1Y%~RM$^(jvBoI_ce(}L=!GB>z?`?Qf2W*mP^n#IC zviXKhV((Z%MaTw+nPPAXmlFDJJn-~zkCE`Di#uoZM{gz>0b1CQEb}aMU_n)eegQ<1 zDfa|ov)|GBs)MwGk%=KHb%hc0QP_wFEXtn`;zn=MStQlXIR-y z0tDl83yN}f!MHj1|kxd5(iWezE>FAt;X6?o@rD8k> z7=n>_2#uX6=Vk-=>kkqZy+?aoXG9plrd9WOeWF|R2_YV_qF!W+-0EH>xs2@n{gqs3 zy7vJAXD56KyAc2U!rqeUjGD!1P_pK(?_Zv{QD*8V6=55=u%^R)W?FI{!d(jDQy`S9 zsOpBKIJriU#Wm3ME`*iHw_pGM&o9@aVWlEGDaS3@&u!f|Ij+iuYw!R5NHThS`ASm% z#`l5nBTPY)7i!{<_Y@77;#?*_Fu)LE+G*u%Awk?@i^uVvUln6nyRuSaP(bL}nb9k5 z0`QE#&yFzLE9Lc(Z7H*p;lYh7fw2%XcN-`q6OLhg&k$JS;}o7(Vo{4xTtF&PF_2`J zm~Y*<-esbd&N@m5GohOC+>d25r}*KmN|7R(S}oC@C0 z+)=O#-X^c&`7(e8d{Y-xul&Fl%yf9sHF--4PLa1AN5>n%4EyLthMBpt#915qf->`o zU+AC!F}TDR2jCZG7(DM5=5}K}3|Y{}pr0i-5} zbc!CFnbzgxX!6(Z|NP_BE5(*{Um%KF{UGS6r5IcZ#?sTrzwW&)*(^iltGfY-oteMO z#FPfVf6@iYb9kv2-mxPoiQ|6Sf!-JQg(!H?`JaEoh~(1)MV?vGbKJtn63XJFT>J_h z5r~}};Hf{;T9j-vhcKmdB@bgOrfxi*N3#-fIfTIulbIk4Ugt)S!Da-4yCh~Oi!MOM z#ZGb%$O#u3xtY^lXL5Q?U!%IqWw`>0S;I3}mZw}1L=3R8Yw;kAZp(jlKZF0lClHp! z2$J@sLG#z8!wMW36d|Jzr;1X=tQ$+n2#iM10Gba*Iiwv3Vq`=OcI$fbRmb zS0Pm`2EV>eFG)-T85J-LnBAcVMq9bkoHk@PWfD6I=w+G!r&5JTGd)sMP^owOoV7A- zr0~9&NfN^>*MP+s0#|Qh64s!?{S+T*)kqaUlO7X73SCI4MhfYKF3kTv>+tpKuirdQ ztmC~LzEU=DTf~{y=KvKS_qYa{XzVu&Nw-~9pwry>?C}i3anx1;_aS&r4p)5s{_EF2 z6bC*ep(taBLW8XO>o??{^aT<-Y&@8QOMm|JKmS7}o?_A7{U7=O9J{QP&HIu%?>_wN zf4zI>dgS|m{`s-M)<9wT_!sv_oP&Qr)N3qgL0&WG@YSUM^S?>n@Dio;!t3+LcaHS? z-vp}c5ke#4`R;Fg4c1?N{PT}hWV44DJbe6L@88`sqp^41ZDK=603P4JXKR-ypIi-5 z@vYGnM!w^jR%RQlr;DVJhzt6vFM|Fjn^~w-urLQR(^F5l{-GjLE7Kodq!Hy zQi2OgJ-%a&cxPei#0$5`!;pe6*#7l_Nrk9KJZ!25DjQtyeOS%yLb3|;7K*{PA3wgp zWt1n^Fw=iy1?$3#Mli6OL&|a6moKiHiQ+2cCKDn0IFY4I;J?IxfAccoL}yuBw2o?LDBsy3@qyIB7f;X4b33rFl-^opf5}_iv4zvC8#u}kNn~} zX&+bNp$2({UTuQ9VP#J2=|xCkWMQot`6FG(@4h!@TO-ie*7NB_6PY(SDd_z6rlEv3 zW*qPWTXQ&$7a#Co)c=p*KBW0Ohp}=Nrr{zNy>`*lx@@aw-FX|$B zBwwKtBo;}+!|xO7l;&P*V!u8^g5@i^%-hT@q<;0nl=obV?{Fl-=u!#A*ZbKraubAl z0zZ0tAFtp?P`cw;M0`#kBb*R|N^TbJksZqko<&5Gt~&hksZK5?0)cqsHj(hCyeUSq zSl&~qzIkO|(onB6dp8sKQ1~o7&$DQS82PY;PX;;pqJn=6D7V1g{fq471m{;&;D&aa z*nLLQg?MJU`voIF9s*G3xO}2!!UE>#Dw!0$gfWy$aYSlec7y^t}Y^3d-v6SkRx!-9_{*=VOYEp z+T;-Lx)Sp_Ma3wlrWdBT^}UoQC0Yry!wOLhRc=H{V@4$Iz{E5GYth){E>k2oOaFRj zR!0(MLOo+OH?p0SDRd_IomX7sIlWL~YRMHUCIr-$P5uf;dBUQYal}0$?CBKvr75hu zzy%>vmn7W;fi~{T#t8Gr2^De$t_n)dDb+7jxw3>^>J^82fB)fMY{gT=kR>Tp{9036 zh8Afo9*q=qf!t=|n8Yk-2od-_w(AZ8fYC_)JjYHNf(UNNHmO?81u>i??L0%$ox%`# z@7)9WMc{HgpE%bsh5LInXhGHHX0mLREKaHL-jyu&BAmQqq*(v_<@aDI$R5e%WQF8I z2`u4pBcjD#S zv&8&m3AcL8r$9rJ1Og1PlG_(hKj9P%AhVo|M=|}tO;L+kW<)m)!O2+#OaA^B%V6lm zQkb2K5ghdy*~b)f3eRmIe82t-Y<|n#S&T@bqW?}sTY;7(@5~+|Oo+JylDF9Z3(0Odp(85!b3Z#F%F=?)$n!kKHbmm{hDar5BU1uH_O}GK*lR7((!)U7#d) z7)#yYvMGWm(yS)929g;&ppaqj-2uT8=0~vTLf_l9C_p?w`#cY`+b=@M_yu-6AZiV7Fh{RNipw`dIH!2G zj>3#3*2#FRt=wfckqIMu$w>9}_Z@&5r|@-DQ=Tyo6})3e?Q5OINkOj`^!UHnk>vMX ztR#6D(QLRJNd!C9W(wggxoM_Xz@RZ_5e#VD^j}TP{Up;pwx^ebXnv&5aI1k5U%j54 zQ4@l0J+;&H=yyMzHE24R$%c7zrtnNWIRwQrhMC^vZJFbgDjy4NzQS($A|bRhwmO>?JD)XCF|(+13ZQB{5a?dZFPY~T*zLjmZ~D3_Y;5%> zbTFYv$tiF}60xkCQ<&?hiAlw(WN<(1%gfLP&Xz9R93n@3FcG`%;JI@bF=Q3`>Pa4` z#bz{gf~X+J64aw6mYXQcMC0|wyR`|HNEVIP5_*ytoPPWrj;g}PMM?#>L_%fOfy^eR z3Aei3wxyF(ir;p@Dd^=>VXJ_om%n9UzW2Q)yy|Krj}^3hBNMP`;3HPTj=MncBVYHG z#0c4)9s(tO^*m|yiHD;6RgLDGqMpQdi(pGnq%fA5c!ea1m@X%_OklXn9GO%2r4Lh- z2}7s&{TLz`Mlx&rq+&*r1@7OybB#!(SRJaV6P%9*vu$A}X1x!pl^SUUF8x9RLu23f zU;hv(WG^QQA4#*X>oZoozxe*LKhlO%i4^dHNX>QTqMQZvrburkN)|GRWkVT6KQ?)g zOM#J4um_s-#Zo2;x-cgIrk5K@qwh}3FSw7}pYCIukqJg%4i{&<&zc_;`qRQ49 zo;NX}ooiQDJXAT~+`u+}I-%3?li#gmbbK!r<(U*?kAA_$js|(v>2bC&TDRjsQP)RQ z=TPsw8G!BV&~PbEp;1h{``dL2SaLBTZ}u`;=*L%$D2$3) zauoRI75MMw0Fwv5jzOqUtFL6i9G^pl=SHpD0KmCbhszGq7nu26!wZQ}^#qPz9I|Y1n;g!X>~t~6Jn~4byCx`w zw(T_0om=5P1p-@r6yiHekJ1!<$iRG+4ehmFOky#1QGdA@auLOkcKrJBpMQ8*K)%2> zQXXaq7BBhfB#n*AFnWwleg;;4PrD> zvAOGq|98bp&OC+R6&_Rf(?9B^EU>N0x%{J zGsQGU=Z`#s?E}ZioON=BJ0h^99ag^!!!5E1nLW%nu*h0b8%-)sD)b^5!ZUPcd;3Sl zFEHyA9?!Y=vEu!RkZ?|cs(Nx2^`SIim0h@+lufgDz z=?qa9{^~|%sP-B%{wojLTy}7dTc$0w0g^a1eOU#Nbp25WS3W=f%?>`15?Y3LKgHxO zF%gU(gGy8Q^;h`SQ$Wm5Y|AOz{KW&pd=bdf1)p9W$iOUJ_~H~9j08qVeEt0!-va_^{jvgkSum2H0s6+XmlYw(>bp3kb&NJqXbAS0SnpV?x_iOIY2KYz z7=~SM_8H)+dO4$;avh%h_2AQ7_ij);Q-A80EbXg&W@6B8c1B!2e&8;r-zk4?Lz*x) zx9dv3v+vrB9z=fQScf2n;jKZs5#z&w;G7VWH^pRgr@RyslOe;gvxXExqF*U7y9}c=^1Ep;W@f zDL(N5jzR?ev|2krij7yN6`aCuDe#}$7bs5hhFsXiGPSZ|s9=gXqW}+0wTsK5cTS-) zpkP!JzPUhy{P7pH<*T*qnwzZ7Xs-Lr z6No?qQ@FK^mhgn#-A5*sd$$;S+Ku{5{C(CLhoH4<;cWtqEq))wBu&|30mjV+H=1Pm z`DIfSaSg+h9z>CD;Tgt^_Yo-k2wZGVxsW3wT-M_hw`9Rsg|&pmsEo9t;Jv@<)smq& z_9tanl(B5mAd`{vqtERS!Bs6JOiKZx#l3P0VSjj{(#HElx(g{t_XkfbA7Bd^o`eHp z?k6%|F=ckUoYTO`^vyu5V{u%2(J>PKpFV~#rrpIwrh zt}+Gi&zErp&ylhoHJN3LShw;Z1)2lQ|Hswcs8+RQTN}R5q7acFA%qY@2th&jenj{etr>wWx8QNs_$3k|e{k#?4ca_*d_Pd>LOHni$% zL|Jf&l*ZKs)HADqJ5HRpymJW7CW2PoMl-W2w->WaK=?}jjAA?6e7OE`B8oAx#P;4M zN?9T083ju+787Qagm=`=Zre3NfFEHjnTc+gaq z-^j!IxIzub{I{ zL5-$vqaxnUK;?sVrD)dg9Ecbx?3zR2HKIZVqoFyZ*45tz9 zF>Pb__!@IWVU%EqzKh8LP`?8X$2@0bs-`z|dxY;np-g{eM>jS~{skxg4mg0bUm!R1 z6gMmZ8diM)j=P|*?lFmOgsIyv)rC81p694165gj95xB1?WFkzhha^hIbC9L^(AEE_^SzHzNFR4PnJ?)v4EB~*rcd5DWrU3N5tBMGA1h|gDQA4xGs+V*573dha$ z&4`!sgha8K>ielx^?`qK-=t`){}sg~i*FEx+C6y@P=vsy_h&Xk2m+|WN@Vh4hsY0C z(N+2ibNN&-_pw!1jZ0*Dh+75ZsimcknMg;YH5#W@=vRzVl?ndZ(UpvSQ9Q7`FQj6h z)9$hYb9j<<>qOuPieR_ygkPAe5Jbw3KQRzHnPufMM_>MgZse#nR?X1z&+YY31dl; z_n=UvA0zd<6h`E}VuJxVb_Fm(*m_K&8qSvw7E$%Xzvft#3R7_&;!oVmrhPxu+AzrQ zz9m$BW9IE&gJwrr&M4-GxTil4K$3+?`Xc9b_ zDoem#8L&vvC}o45I6Ua9#zhkR(ap!_18PRe?PZ8fi?+dOMv0AP&|NbB@|{IJf$d+p zcqC^P^ht7LQGSAz+6-C7Kqo+ckK5(Z(zt2lS&D|zFlR|FS2r%#BuUQWrUWoT<#C^; z-G1e31^xL-_cwlOrE*|o^oioRj|Iy7D*%IU*$r9?l_Uw*D9pid!>^VpEQ@siY$Db> zeY$q@rG7f2A$@}}xK?oHdWLWW;UjJ4ree8S232qBLlyj5H>dLS)U$Q~IpqOp;( zIPGgi!U{!F1ypT0{^j#l&}T|DDh0YLQ9RqN3LskQkSNxJa5zWWcHf>+vgKh(l0clV z4n=w`ppvC&IXkELQK~=VddDcfno*1}o^i<#nGxyyYPG+w$ZV!9}<2UGWX6S0--&(JgGw2UO4KZW=oI*pY+$ zrGfzf^(4Km82LRG?LWbFYKfV8p|WFgLcoAO=X{+N^N zdZe!u*_dRbq)IXWVAnhiHw48aXU)M>46C|{&kj6t%g^9J#+ge5(T;`Mx;_SuL+u(KD}-G#6me;FS(;K zm~#Q>kusNqhI)Kv7lm@NOv1smwtOQy8W^V*^ao-)>2OiA0TaNxgp6x&Khu+#>cLrL zdy&$cA#$Vclq9yWY#aZ8jN}?|6-{ae+jRYCxfdy%t6pRB<0e%d1y|0pJd{scO&*QS z??1Ph&u`BYYV|6ng?^DDBqN8HaW$xZ%q7l1siK?lyeE~8KP~9pH4z722yW_vU-nH9 zq+c+i5M-dFD%TYcONiY-&r|dVMj%dHYig}dgdku-_*MNGRY}Fo_)13Uc_LV4L<7aNA04s(rqDeRl(}?$=%{Q`lvQJ!I#!rhBTQ zD>mtn%-SLJxQx<$NZ6vKhD4_Xs}xIqXRm zK(IJTc@u?-H*_Z*0z;8T;YF9y3K3tfqnlYJTZy>=WUdB5LLB~>dy#oL&3)08c~Pfu z81lQP>t;uUeN^5?F`M3KDO-McuAmAOCC>Z{kZ;G$#h*{&a_>fzRRC~1lWXeXxdXhE z$KAMk!t-uMiPlXQbEv0Ky)l+g{Gz4h6}1eXbJ{m}0lcG%E_~|6NVXw4cOjA`w!tul zcjwhd<(Ib6 zER-laSuIpO&j^7Exh1Xv3pzn~j({x=7s`(DorLe1?3N_`QM^S6AMW<{9zDeS%l`1u z7r8Q{RJ6EqF^|MbD;#Y8Rd0V)d>$wq|7J&K@q9z`2Syn&%I}R{;AnLwym}m}GD^dm zgH>G2?MLwvo_i0vqY_hCx?`_`D^J;}MXvG3=vgQgpVtY@D8;`Cf(zHpD4YV|h8}rG zixi9z^Q||aM^?)x2XW7oW46!twV)>Th?qakM?98tor$k!V$6%Z(7VdmbqmsEKLBg7Gt#Jp?4 zQf;9tq-q%WnqvaQr##Q>0kKwKM)7bz9BdvDq%RFz40J@yCV^I@VNZi1%MdgSyL0s; z3INHBJY^b_w6m!%Z&NdnGI(Fv68AF7R+u68lb!wy%#m?*FIx6hoCHVH*Ox5Y!!1G4 zhhqC&C7RZbFsk;|Q$DSjQE7ZxWs|v@d|T0xDN+o}`-87W^a80h%Bk*eRodaq?luk| z2vA!2v@eVK#E%E(V9&NKU5rwmKZ|aTSK~#2myMssRzE8U;4F1)x>N7Lv(hH(O~DPv zcoM#T0~@wk);Jy1p#U0p2#90yX~3n@E&vG_kku)rEs{lwt+i>DhwYlqxXCPTw?oYr zDexf|&W{Rhr?IZavRF>!UIatzoT#IsBDQPs&k(-Xq^wLHq+ zV|=_tq-`o9X$UGL_#~&Kyh6WnrLJ_s$^K0J$JI7Y`up6bvK>jTOq^H(G58)WB zO$*stR&ft?Ffm~v`N;h4*?OdUCN&x|N=^GaI&ZkGRzBEynV8?Wt;mfPG{BwGMiPlO zrv&8YWT~fwvx+kZJKKoj4iSR_#YdLWNW<0xa|S+aP_V=5DXx?BxGe?=gj?X*jBTGe zSTiY2dSC7E8ZNZrg`7#B%U7RVMU;bY4MT-?lvo?FxWTeV=&C?9+26*y@GwX8Rw$6?~qm>8F$ zM!g-I;AHZ^l}i;bg~aCK=YlPop#Ylh1ap^Jx&M7lWgilz?PX1~D-ebtqR%UX&N^k` z;&wr$g+|+o)I^@BD3eH&-r$oG{I>Ep9hfHF%Y;Au`2EM>5;B?~K%m?~*0v7(vc!Qd zO~Zx3Tk*$XR&YZzV$7-0#VJDF@8sRg0Dhqov z(}iJ{qXa<`0QVK9nd@`R*r#FVNWK9lZm(Zi+26GKnDT!8_IdjqN+(vr36v1&4t#S!vi zyHU1EBhlE%5{spnE_B*3=5^G?LM@KHdCjMcIXBP7OsW|c{98T6S+^j$=RfDmZLBf+ zxCyxFbp)A7ZB@4-pR&M8o_DZIDSzCJP2jxWu|%5#*06Ma#0Y?_eYKGD<#4rpSLy`M zG-AP6pMk~}@BrylZDM^O%X0eY?xHbt^Xgw)dQOD4yC2xH*L3-GM zmEU2vwSBHDQHzSfv_q0C)$i_-kXo0O+AQY0)7!0h;$zIpDi%Tw7xE#L>)TI}qAjWt zl-}i*RJuU<+@2Z3VjrTG?z6RW*>@^*`z-ap(S8=&orCe6NqkregWW|e3Rq0IY3c`} zFFh`9xZy`(Li~<7pp~_ZSI!BzYoAd;0zJY2ua9gH251YU&?qE6 zIK7@l$fVrh9$CP7-2S~I7L@RPh|NS=kYQG;Ix9{(Lnuk!Y{%@D6h)5|O1!5(4UUTN zP3fRC5XTqv6eSj$L<~Q}mKyVz$NN`OPR!KE)TuNm1Ll^qp;UVqAadt?e~9Vm*`{I| zGH=i;Ww#$K@2|dN6*!nS4f|4A`K&c!RyT1g_YaSSbL;;aKq%_-K|wR`{WV04H0KUv zddwxDX#MDty+PZ(3M+bM(U31P`zyVzyfvg`tg!L=T3&?cs+E@hy1BlDoqpx=V3xS9 zrs_9|&-pFJ3Izx!VtF9p{y6jtE`(K1hG|}>9lkd9!8c^qLTn?TFLy`v-OO-1&|Aow znODhfYAT|!Lp%}-g`XT;M%Oy}hg(NH;vaS<7fij15o{F7@~`I5h(@4Y`q&hH``ist zMAV9)#TK^};y?d5c7w~2aGEv+VRYYqh~hlUZS8;I05&H=o_=Ql?I2H;-MsoNbGmS6 zIdj2tL?BID^tNTxy{hii^cmfbDM`CHs`M#uxQ-xI>mEeqBQ9@jt%BWk-^_2-NR>!? z6++K#-;M!>m(l?*`SkVIKmYk906d>hXm|>7%jxj4Uu|b`X~!h_EDA6{seV!|hAqC& z+<#m0_6@0(3T&D#T#Z*0cZ$Q4%xmUq5GvO-=&C=b@=#A!aTGXAi;?uH=t?_J)eZ%= zgOv?of%EjXRgM;i${~itD4*W9nM=0&@pGF!=0?3KElb<3?3(-y+*@!|y~m^YlE=my zwWqkMc1gZpG@uwGF4X{dBSkGo;E1)|?4ShmLkg+WQe{M*hdV~Sw4-pch_uR4hCyN~ zPQtExI~_}%O}fpKIqc12{ICp8?@YqbEsRb15Y)L$Vm>l!#g@;+uaNj0o#7JoJES<@ z%vut6NN7q)Xym3fDSXU5?1JLtT$KK3L!0OJ`o(SAA*J=S>_-Eo<;aBVj~Gf37NS(5 zDE4yTRtM48(_IcLmeQ5qc?bghz(!Di8-1fl0d_;;GA)vKkmO9#)Vv(K>BXqP1S!D$ zg%|PQ0j7rpFIj}cC0Eb5tp(At39H+~sxpLw`z6GHrmCT+L*IbenkcScMrRsl0XBRi zmuUJme7glub2oMU?QhIYb zfR!8e?haO~rC}Lu7Tkt}B?DoQHPX9z?PYd8gln|lMZwZR|26+HSP|70J^<`9W6GX_ zpp4T=W(>?_G-UMRK!-tDEg#eM)3?U~Xti@SI+v$OM^56p2U{WAfU-tdTl_>~{9%8geEX%vg{aUK!37pZAUf zj9r96vS2^n_GLPa7fC@DIaMPI;v3A$P$$Ti(6I?J<8tJWX2SErj@g6k`0qCjIX|`G z{T2Z5X^fsARfbIufvEOdEEiD2(>-9S`H0tMA&PZcQS;#(PDN0IpliJXFfJi^TD9hG zL8kp-D%+FxI*q5Fx6g))0&>-8OBRtdUMJ!lt`nLT@VCyd;*@DAlqfo%l_V8t23%8< zjODH8*1`l^5&}t}mBboEBEX?>U5M`DSlPvmC-?V~#PhZ_3SK~t!OZ~eU>6zW&=R2y z!qrLHsl&QDfz%kH9cxM1en>N6mHGe|D|3=#sW|$TAFWwdkKQxe<=kMx%OE>HB0w=9 z$A5Z@6#6qk>Zr_T7@HT*W-i=U4JMBfOx*DpM9=)Djhoe6*)p}{D6O6B6Ay-Y8AX@5 z{Km=+f~KQ#=w*P@cTzKxNE*%yDjxcX^UNe2C?7`U0#*4G7!!7V>7~DVevZ;Z<+PEL zB&ms!)ygU5OccP!;xz8*Qxf<6g2bKO@6fPfu1qJMrI@_XVDk=WXQfPaVa^gMr2W+@ z!mB$MMLzbk^)zWet*5OLe?adx`7(SJE4-;l!H9TBJ%=)KQ4+`X!>ioD|NJR(cGTtX zNu7gsTLSvE`_PzTZ<^$+{_fW7Dx}VjVD~kg%@8Ru+ z+F~SfmFHR)qM|24;0CND@y~AorNA=UlFNIh;_^T!^diP zmzOyF1ZBC$=d8k^lpW@6a}ASG()urNrf^i{25-KI39F61H`=vQ%zLrGeTz^0-}C54bk53 zh4`s~V|}?jf>58kiNFS39PUqV9rsY~Z;!d5dDI(wa64G4Lar*la@|2L3vJ_a3F{Ku z9MgfPpx8ydZYi{avwFJ0p{Y@uujBQS9N+0lxx=2!fBek9EKd*;(5IwQt4eyle<~>C zU;x7_J=g3((85}au%P@+C$l9=M?g^r8fo`rUz@azwdfCbo2`v-1zWO76P`^b@Irv? zGLv=JIHp_{X9Jv_v==>3GlLC{K5C6P5P?)QnFF^`2~12U|x=H$>36C&4QL-`(c|q zv%i^d?_4b5Anb$r z8={WB0Bd*Ubml)#4v6QQwn%Frn7U4({D)Bdw^r zG>tU6+|`#DvdPCaw)D$1MnI1GrEXuvtJ#d+N(EM3=%D==wH_Jl5r?fAFFrKa$y1uI zRYR9X^`uuCjMh4!s{z=Q|crI3FbrsItK=CP>|?j=KGw)w~NJ&pyw0(Rh%6Dy-uGqv-h zDQU>}Xuo&kV!e4K+c+T4EEbf75jtB|Xy4wv@cIksspg1Z`KIcoK1SXkEa=OxEVP=w z_(wg&U`@Tw-M)SQ`RBLU_pD%7l<(CsVkAKv09Y)N8)wVz6#@I0y7z#~8eDdCYNBVA zoaB>eiZf+jUx{TN*60fw0!jJm$ByoA4o~sULK6~j$5o730n+Ka7N6RDL zb$5Ky!WDp&?pgLrGbgewb2ylUOAE%FY3sxrbWI(e z0UsW$t>AB5rtC#=e6Jp;TIbiFU%!6;{#8Z%$@^&{og7|P;P>E2%a6=yh93zuj-s|G zXGnWdXL2w{yrSVtC>@y%FwNQ^TUuOqglT5Lf=uKm-n95RMai{rqC7)HB@BLX;gvz7h~XRI1lE`2O>^=@Coymk$I&*qfMp zm5M>@jL}Vj@9cazJzbRW8$2&e(Lpgs882?%tKk`jNp|V(=KA{j>fZ)hB`=Dt?rKKi z-a2L#m}un&QjP=@%7ypUYYu#ZU+v8^PCmXCFPEt`CI5NeM!C|TN0GX!F@yTk82LAmdRK>n~GxVFK=JJymopl z$JhT}usBrfo(q|daP{92;^tMOEf2j|QGNtp8*i=L2ICP4nah6vVxh}vqTqR@ zjdI>KF{H^B=EbOZiKFOm1b5(Ey6orpSCkSmbly3mV~XSud_&}Z!9r_nX%lgsI$mvd zCE~YV|NOsyS{N0Nt&PI}n-}0Cs~Vl8F9532{8gz{A~5mUJSGJ7l>qYX!<8HXqxCmx z5x^p6VV1T1*rxc)-1f6;M9<{^Os2{`|zrYu~Lz4z0=_QWFee3LUKyDVK9XzvNX* zcD*l>H47C%r1lB~u3*VQOwhW;`oK$%aQ8+iv5r;3tihp_WG{pezF$hH=BTD`(%sE8 z!%>l~LRo(?-5bKlqet4V6;F{L!OKw2J888H&G}lZHufv4nLYLxFVU?aM<<|zW1H&H zjpouR<%EF#?vVSqk(Z z;3p3`$B+nIrlmnaXb1__3dhQ=Ehq?dEW!?SHcSeRVz@LebztBLf<+x7JEeL zR2Wd2Lp9M6*=q84B~0@YKwZ>Y&ZB4Z<40&xLX@p4wozqXVrr2?c3!@$K#2)xw?e_s zW*FjDF*V6j=kZ^!I2gh*3SG`9*CxL#8j^0gmYG^VY1l|=)HeENHZZRk#i|o1SJ1W; z)toOqmssQBlrnNnNfK;F4J0Lhi%t^Jn_xyhnzmtkiNP9;7q6TlWmv?iy|TPrw@V2{ zldX>uwCAAp=$4t5tz+heclDHdRLLW^cJ>a%#0!7Zaw13`of->P_?B)*yx0s0$Z7`o ztP-YJBMg|E2@?B^rmC@0uS5p~cl3z6SWCnCg$X`a8$2^w78>cub2t*Zp>~(?;hazL zS@KGTFJD~GzW}WjvB9siwm27hiL+o9;m=<0y}n#&G!6tS-`BVHh8x|2#!?`+?xR0{ zaj=)v?T41ZQ7n^*TGuH*)<}v3C>2?F>Aik*jjooe42PfeteRrm`cQJYkP7Rc2reQ3 z3}Sol0;Ed!W;_J87oFbUa8~kG?SgZWtq=6_MvtDFchsARM%dKUj9w}9)q7u%57j@% z6)|<-fJu)3SYgYFHh&WsQM4nQ+0pt4L+g(GE2Q@i)>$?0!|*GdP-USL6Y`uyw_YRT z9w(|Sa?rqcY2zZnM$QUuuq8qs6~K#?b_UYJOO z2iLta7g|AHYrZ~@^xk@zFs3T`9R_&)>czia-#j=SEl^)}N3E1QV5_Z5DC%MkiO3Y^i&38hSbjvj}-NoLrRLxZTOrPJkJ;CqIgDpE!@2EALMQgj0& z-suSn$`+;=;06ip7A71slAII<6#Yo~GQ-gqsw5#azGIO_xHf4FSW5OC?o>~@0Cvxk z49=B{Z4+|)le#2dOCUYftPZ_Bp*}NMtZJ~+B`s_;*(bOFa?$GQ689eSG^e4P4mL!)=sWC|4uld=VEEbInm64z>-c={a zllpsNWRX6~_GKc!%N55HY6bb33ui-WrPV{34zkj8sxntvbd>$evUw^VFo+^bE(1lY zGooZPrG`uY6|wcWFGljQ#9S_6kU-gh12!XEJ3BqP#>kDOi32~7&-MF2+$71SjD3hY|i>@LIM>-20wo(fA(DH(Uc(4|XG=@wv`jR=Ry7I@@`BqbR0+ClOUJZZ; zqeEeBT-S5ywvLp+*X|`(dWhY$9D@6-FiYN0p&k|&yc`&~QJ#8jZr!-2zs5+bN11`f zFe*fXu;EcA(YtGb1QJsoOqC*h@ua;K&ZO0R)x~-mZnm_YBsCNiYrY|xq|4kokMQ*@ z7v;#;y2_nXkqZ+g_ooED#hp;fdM%4M-}6+egx-BG%;M6DaXup&X+9x1O`Tn%o|*IQ zG|fsiAEozdWh#1*lgLC**e+7)n<2&D1Mh#g>k%=V8!};!oT|V z1S!Ck2E`?OD>J33aHefw^mWkPoztojpHXKDBbCk&4-PkvEB?drGK|YeQ;=|r%#wG3 zyz;>w!#O-8P)J$DIzt`HhtYhd9#%ppV$ersv2e*5Jtoh{??@Z9|7qenb8XAuFKnwGIOWYpe5XIjxYM49%C);g*$a|^E@F)i7SwUcvL$C z?rtP0gJX6ql|xMTC6YSyRS9%hJ<* zg1LkB;Xn)1z3EjI%c@(~K`}+Kj}B%>=pW4s4aqc{JOe-?;S2p(P?YECGw`Y0I7ujs^&%fXe>-2e zIVtU2!qAlyjaoHdG%!6Y5rVrZ$v*nM$5LJe3(c%MnbYOL`*y1bYH@XL2~x4?%_m5o z3H`|TuVUwN(Y6YUa4m$KC?zo*@NAc5NapaDlwwL?xt&K?_e0w*Y7I0mVh1KzF;v~y zir~hTiF;90;ZUaZUv>7hlHZrwJ*HK<10zK3#D3scqo7Hf1a}T;5ba}^a~`9$`|{^FY?+n#WiN?jxy^7xsWg~B00rBFTHL83+W48cLJWBTiTN7!MYMRPCGP$b z)RH6Dv3g(tT88MAufU?I?<|{>^3qpwdkZvA0YXzwr;=kxA74T}_THWF6Xa`dbSgY2 zWP_?90}&2Rec=eagD#@dw8n6?TKqB`ytAG?YG5T?=RfgSnSs&$G+`n5$rgsHe0fY$ zg!U)(l}Lp!F7r&K95-GYA5r&FFRxsb^TF3#Ol{E27=Urp_Poz%^b5r~N$VI{{0G#5zyJ3J>GlY`HPNm}6m_Y%BYHE` z*^QA82EDXrcqU1HeAeO0Eu>7p%%F7<8+OwMMF7PmLwM0m^Yk_5xMbeqgQr{X3IhAu zmOs7#!K&ZoLVqe5xRsi`6q5cd3+dSDlNICfFadq0Fb}Mc)* z(7U%ylqXXFXIsLvTO?AhollS)z1FVJYITPWnnuu%dDLn!inH;~+@qH^?+`?7lFHL@ zum-_&ReALpi*%}PBesVKS7T|#z|Nnqf~^440ymQuX#i!>4blG9bOpO`}qaE_RI_cpHuSlu;vUQ?VWFwzQ_%GEH{v~%gk+FF^^m_oi{J>?UrA8|Zpko<<1 z!^>U0K*0Noa{&rrv2_=`wSDhtE4Xs>$6k#Dr$20>Zlbj7*o|SzvK5uqYvPb)^@yPF zmL{aEx;SpK)gz>+k&ti}E?Jl+wG_oZunzf9o^OBt`SYE6gj0?)9IV6T&30sdD zC+z$|nC>~Y=Y>tioxQ}6HM^Bm#u`UtEPxI57O$zZWz5ZILI!Ut8ByRZ(b_3KBcPEB*UXmzZkUl`7KBK8c|mS5v;=eVflGKwL<@a@;H zUT|$R68>nsxQRPc4AunODsZA|9Q7UgzSDwu*qThn!Tl1~Wqw2t^&nqLMLsP`wD>|j zC$n_L7=TDA?)mw)=W;9-Z3MxPL}K=k>vJ5oSW80HCb6_1E`42LHXB&0M_QoH-DLeaIwK;>Nz zNvRf}`bt$wglRfpqxsw6zYawU^b9)+n86T_{oS|YX+cGS=1&khe4?fN*JriJQ>yu# zY7!vOgQ*1$HXi~;nyxdryQ`A8q$V#}j==Zxp5p~<1VE} zQ?H_zJM~h9v`DtdQ3~Yy_a+Q1u4gD-sv_wEV@@sWDf;)LNt4L0K7H(&5SC@6Aa^#X zyuE|MV>2u13lj{Oqqjjp9hOJ59WlG*9-PYX1gY7#YWZ?YnUo~5OH?a+w8EeCTrcLb zr+94HpDei@TNx?1^IfG8QOtD)1uaqVA=NO(fnel_AYu~3_)lN*d<^EaV9 zuTrjWH3XhhnrsVJY`qiB4Rvbvr~n2!|J>htEjgsUQ%h#9+8QJ&fAS-nZNGH?*k?^GXk)GSu+FReIe z+Vfl6Vye$oH!W8C`OB&^+jk3=vn;>uZRV*`kZn6C2MrX*=zzsIykC`3GF}_m;Wl%X z+I3vHJW;ea3`=AnE!Qq*(oK!(WKccPSg-8i$86D>Yv|#uFJ4Wc>zDt!##K~&NK{EM z5`~(Ucey|b%hItaW;3JJ=q_WV*;(k5?ZIn>XXyNP3Zn!fNeMwOLv|RMAAhXOVJ!RP zMo~ij#)aPG_XOp1^x%KC$Tlkw8!qy1UMOng`sOpjXgSZqffSZ>{(A4lv`v}bKG;L6 zkx+OH`-hFvg2`*OnV(?5ZyDzo3z;qb{p(ve5m??W@zRjN7YeY5gRPg9a+(t?57Uha zI~iY8mnNe4bP~o$9ZsC$`zbw6AeoeMglWiHlXOxl9UxOk4Y8{p&i+{>#;b=6q%OYERZ^+EN=E`M-i+0%tS-E40N2W5SmOtOGzN28 zuj~&X0=7dP^(#!iswqQT1M#8t{2=V@yU#5+b1simSoRb9+ebkGMKBCcwzef zj70?$G&m$pV$KkJm{@U1JbebQK5qg9)RdSDnmUGc0HnM{+Rc^zX#Q&D9w=_MXXF=U zT%Zf5muLcyXig0}u>wr4snm+5cEGiQu42xl1wM-ni{rKTm?UU0W|KfY4}ADHP&Hgn zWRaSMhXUxzl)UN2aRl(@{!Tuxvk@OtQ<`x$u%#zHPStz;Z%j)E2U3D%oR9?g$ygkD+WUPR#HRpEhn^lh&7bRmX#_&r(u?(xOtFxcvf!0)&+F0lynnj zufilZ7t6;Q4;g)8*H3G71WSg)k{tHGk^cB$TaiS^)495A^81fqw|r1=BS>A#a6IXw zV~kjz5=$4gC_6@pf_%3;>pGh_3@St}7Kov?=3!vYxHx_jyIZdzkR+8Y)KEQ@IXWCB zFhBvc7)5ql61E<|d;2;XhL?wwbg=hlQbS)0Laj*|g9Ty`Yp$#m6|mtv$@Xt-slT*< zNgh@Ats};*#9&Rv&eL!+HewWO9P~i)lBlOkVy<-%6an7fMQ*CHN2JbBuX2n;mA@UK zunMd-dfLss%9SsHYy&G@zPaxm=Y?r>+`Vm^CNta7aeMpfm$vv}teyIJ`%@nv!ZnHf z)rgw;X*JPl^Foi#!4YHDtix`4UjA~kP_WFQQ>yJG4zg7pr(3a6?P`I`h1yH>Cq z>BCq{Jf#hO8Cj#C*}=YN^raFfD#RAtE1tl~>@0F;l}UR%$`6jy(I{4wENODg2PrM>A zAa%7iIydR#qNP2F>!RdwP(f~gePhcKNbjnXNX3$30ro=L)aX*r|87SaW7KPVMq-;c z?A*HV4%uuSP9mj_8K!sd@-(**1?(&07}?F-tF(t7?+s_9%YkT_A=-QxibRh|s&uzK_aitnJU9Qk3>LPc^4sBH8G$gW`3@hngYZh9R5kOL!tLW9C&sO;q7+J^gN zM{tpHWsAfi3V3ONXq#fL;@Z(YAJvRlN359A1G#D%HU~!C!z>dLkM&d`b{bv3!ZH+8 zOFph<nqd&l7!(h7r zD0eE55lAJ9!K~@3!$K!Q(m8~(XwGC9qKOCeca&l62l#5L0RB*7Tr5T!VIu=bGpO>O zU0Zcl3_c+2K3vl8imMR{;g)X+i8UVPv7(650Z?|%Q>Rd`*4%Z` zL0Bj7D177tjkPm`^%(IianDAr*|}^g3wYvbjf;|Jd`>8PlQbW!Gts~KW{_od5I2h@ z0wXpE#Fz+VuGD4-TLb2W_(+lDlI@307(>bgM%p@O3myOb^G}ncp{z$isSF{2upW-a z6UG3VYIMHHu%r%e+Tdf+F*M8AeI%5CV|}MqQVJr>@S#sRK;=W+5Qi*i4>ystumAnh z6sW>j`t6h=t7EO8ixmKmY`+zCt**rjYdNrk=@=Gs_l^yy*G9?)Rtvu4&-|N0lcf5a z3b9!-#}@s&ZE)ed2=0n#lD70++tx&w$*=lgWfMP;4J zUaV<>&%+*XU=|A+lZ-EvMY;=%nqa#5Vdv>_JPC)<{Q4QG74(vMHPCRGB|-#=0qMMZ+hWJl}q5kk2E<0LkMHLOcpE#2p7FFN-$6vK8Ru_Kpme0 zjr45HM&$Asf=IZzdHwR0nk*#pz@&qFCQX$}v6mqG_T|ghwiHkY`ZDs^jSA4O@pca2 zTyYT?hN&CjCF~MyoUf@JOcU&e3=t1$2H|6L{sgefPvcNPk_`-vwkv&>BTUpXG=OFX z?Hp&;tYSj2=a4FW0#YzmJhG`LsvXZ} zf4C>JU=M)%pj&Ka93{z#?GFvgZQ zcYK1U!uNJKC9lZ?=Kx7V1t`60S9wKqgja1`u24NT-4@{1nw5Z5lTJ27O<1N`EXHRi z58!*C9BD8Mv}&M-GIvdckas(t8z$J^3|bZapuux^hsyC!IWq`*x-p6Xd7#%oTjr5Q zKR1btmRaX8M}NzV^@XY)7f9?@(&RIeo1fM;6h=a;L9>8#I8{*OJatIE6wY{g=t(b362D{Embd`Lv3?$fIKt4$G!1u+gwp@qq z1}~eK?B1Df{#sBWGgtOyQ;F(ZX&12?HG)~NmzssXYG(-Fx!HOLITn!PkHX@39;#0~ z9#gwUazpVWknYt(JjF3mK9N#3so3~YH)t5!m57I1$Kf8Y+j0hrL!|?=Ej-Ds-2=Vil!g^FH~3f{UA8N>U6?{d zEJ)|5gI`!>#vk%q=7<55IJl_;^AM=V@6NL)YP9I1kD@i?!8>T(FR=&(vzAByM?^g=jKlOrBmH>&1kn1)jd1D3o1e zMP>-ml+tr0Un@-Rh)Z7nE7LtYsUfqXlT3@->|{_*P#R9hpJdt4B9#;;EgyM(zII>`9A- zj%#7KL7vnbR|z(*g+LC(M{RE%3FcG!O{o@nsR|ad zwMz;n7K!fAhgTa$7d)AE;=%2u5gJV9g37#G;K6m8CCmF|77T;=xmxL`Qw3gK>yv;W zqNSP9^t95+h)aWZA=Zm>m>~Gh3xoKR@-bZsvEoTg7$U1EaOt}}$~!Mb(6KOXP~by3 zIscoA60hhMf*}}U6(g-i%5vqbQYD9uLnt-#(f1AktTBAz$zJU^0oK5M40WR1zJAs6 zA*lr_Xfpbj;v=K3s4Z`H=3#BMj>(ZtrL1j+4U{HwFONf1G1VWxz_H%G*W94J9RyCR zJ-sbVLR4~hk^+oIDK&56^)Sz9s2CkAH;#N(#hA zVIPw9a(k=9t?S@Z^l>aVpg(E->M#?1;nu)Lc~F^h9s!PjWEDYb)O5_3c}eBg3GynF zPHkP5OceNonQc*v155|kmT0_|))FO`tIMnzL1Do^H)13Vz_ShNth%e!?WKEsGX7Wu z=>A>hU&1&!b)2Alpxzbui`cn)U4xL_oG3$<@}kt@0djyR1(%YFuiK)#s5TK+7nGHJ zp%h~Y0hK0g?L73qa=PQ@yCQd&)t#nV`%vXfC0W~p0pH0-SxOpA(T1L#W0Vo-{w^?* z5eM(UX(2A~O*PJ=!Zeo5R};^n7cLpCfU|`?vv{aG7ULxk2eXz0oO{UoODF0h7l5de zCINL+^Sp0A{;Zhf`vy@I`(8mEPpw9vAkf!rFGHzypAT z{9H;tx2Ly>YY+&5r9(%kWjJzkO|y$n7Ibgb-CQ^zd@=_V*~^=v=`9oT)$?K$)~M6w zZ!uTD-?UIYk;986f|O3Bu>i$&u1XdYem(UQ$Fu^BpKrCP1XOc?PH?%>0#TyJHX}Yg zT)n)Ccd|;$vEMy*Eh;ez%FTMvwU>+i5m(uXIh3VJ+>aqQ zIQjIw1G8K8)H$jGlqiRwd?+{QA|b0(c^c#X_sQpa)BvP%K}Wor&M*<=E*j0P(Qy@v%~;KCFc<)%*%i z-MKLLebr_whn+3bdk3Owaux4$*t|JkuV>i1d?^@$saJR}Z=qsX%6v6GbZ^EQFvf-C zUQ=QeVpwvORrQEW;WYp2hy%y})Dqh4+~PFD-e144u0|}tjS5Xsq_?Gs$Yj>}YBbzm zI|{vqMdyRy8g34*gJ1qb6kQ>Ue3A}dag>!69=^3wNtplo^PfLf&Y2L^!7jH{fPi%a z)7c$fkq$Lxl-0$$075d`>(-Ret+NLuCQPk<=TP8cEoJ=hS}KXZbZ9`bw7zQ{vASbb zBbG7Pi+n0j4nSX8W*9+R1{fbcDD72|>~2D|?b5+ZDt5O2&mSg76NQIq;bV}$+84Vi z48RwsYFcKcOo}iLmBTuwRU{6y=Gr4B2xHETX8wP0o`SYLV*)5HT=d^TDl~<^$ zo(h(#c~?N-R;EEMv7p*I*jeinJVn!s7SW@n)_mToGc3GfGT3kXL-BW4(26>Y;=|4` zwmN`Q#@q@;*n0QMP(w9&RwJEZ6~dgO3)mhcSO8GX z(i$ptU^7dOPZlkX3QCZ5U8Dz&MGG^uy?W~~W7@I%C?`>C<&rO@Z+%zzwX%@Qu?p$1 zEbio6wCwUk!B)00!7b8x??S0{$4ByWDzCa^*bbF0NcklXLqE7}hidU;!a@cbeo^aJ z8#czc>A|2D-hqagR9oHe+QP405#vTpV|TpN6KJH)qzDWttKgX>0NSWpMr%d3M?0iP ziUUTbuG}SKhW5=h2o|XY?V8~#%pn}(Q(<^ia*6lnVYj5Kd>jDPqh2hC`vyu_Z~qBA z<0ghJ4KY;ZmdxJzy?R7fSC$CYze;!|i9q)a@M0d+bGv7KNh-BVq4|V5bJ?K78d3xtDrSz z^5ibJ1CMHavk@HC(c19_zbwB7Lx4Y9O`7(=xSjpO2Ls=kssy|$SGs~&r2BR^IWDB47=HO!Zw ztX^y7K&0|i!oeD@+x!)~)dgn>pIl$>Ce^PVA~e*B4Q-WoD?6+Oh!^8Gngt$1{w*P? zITcx@!$7V?tg$V#%&+UkSn5b0Fh>077>N|Ez0EqBdz#A6J-T2omI&ibc?^v~1DlzWcZENa?6>}rv7z#xdD=>W{ZK&dc(xyDyF3@plWuv9Z)x|e2 zc92-bhAtfXD``?`YgV%X|B>-CZ2rmbcY%8d(OTijZ~n?@ns_RI;nc;723{=6s0=;J zb(~_Dg%53V$&{2FP-Q3@;J!9Cav~|Hz5$`kr=82qn`-0iR4OK`W9qfg@hD^S{lOgO zPsy4Mukvg5s-`hDqR#D&AT$>FVp616!HCoRwqoyCWUa_8WciZOO5pxDS-_|}{C1R^+S zgOyk)gN~2RYg)TLr8}O5QktZ&uA`sn*IEhqZ`bkVRReyy>SaNFa`>Xqg~RP?IqW zxg~Loqq-g(aRd5t`dqjYT0t*79RrdHDgrw-Gr71ik8JLMBBbvo7bTnZy95L473LeH zySt=-)Gu-@s~jrS0A15NYdhsEvR0J=v-wC_#-ty5%_$R@VkcXQcVVWDgKbkaHtiN1 zkSLkDJ+=L}QqqEvCM%kt5sI=FCR&7g@F4gB;e5~hm5^~l<*yj&R%NtPVe zdmUW2ATL%gRBin(K1p+=2}kKEw?Y^mq?Yz3sCZe#*pUX3#3^$Xeh6MNn~X#eHGs95 zSM!L-T>)R{ja@47%;F|w*)dpE#SmpXuFL)dUx@IKHs2A&Q^Ko$;~!C8OO7P$^Qkpa?ioUvCL{z?on-|C;Bc6HD005L$zB#+ zw+siqi6 zKZs1y9(8nK%?`RDEd-w=@(Ic6*z~UBoNSxpB3jrDY2P|2k=8>3%jnCSo|4cOcBrPp z%qF-k@fSzC$3nK6gQvGxU^yvJ=*ea_830ZrTcPuf(^-Z7*&QS8Q$Q>%G%9bIS*bA2 zE*)%8%nJw?unMm||LNdl)Zo5j-rr5?ma1Vv4f78t6nJs0 zu>8Ope(;LNH5pQ)N@?n|`BK zScbw_CiFA*LT%ReReQPGLy8vbQiDXVj9S2lOe&;;rs(gl&gx(mKau!W+v!ZIH%g*a zzZni~EpcFYt{CoxYQ-Xz3cv8Uao*Dkia-T>?^e0bS4)E;U!;JsHZ2KHG`#ged0%Nm z0rubxQE=N5GN zBz*^H9Ld*Jf0f_v9FtVX3{msrB697UsEJXbjiifX6W-54_Wlml55i^@FE2NYEn}cR z!5788b(jaDX73k|TUCESY*uR~0aR*vP>3`6gmO#I&W3z9Xj?#cG4a@HF+D^sC_zqG z1E6r_qAQFmxL4+NOZy{QOG5XBe$LFNObM2yl??O2(m=_PlZDE3es?7nnsCqpqH6c( z)hnb8$XEf%vW%YlRMs|*+#%w>9uoMGpUq*kW~!>Tf@u|bBhYK`KUWBAGd2*tMPI$u zprStf3%|;XN>Z&GHz90X!w29s3YiacfZAVmdklToiwNFvzIKaRkD-b z|2?GU3T7jVrh1<6gd(9UJHHy>C0Ys=VRaLG@vS1H-Q6yU@{+p_P{HE7dZOy=R;Kt!rO*3}vbG7)JhiMq zmWuXF;}ng<5k}bfpvFq`vzU`uZ%c^vrNND>Ko|$Y7^8#uAkYT};Z5zDm3{={Vz;l7 zO~DlBt{2xLj!YO{cFS0&*?Q$7cy(yJM%(liz!=p+q2unQFLLUMxxzc-d_U}I=#o!w zIgX}p*QAz26W66=f)^}&!D`xk&^`R^Z2g|Fd37!ZfO=0V^UIHh=PUEDtP9U17^`p2 z^n#L#B_VlTfM$?)#cCgGR2MCZ2>9wz=9H-_km4O{-;@LmEo7DOjg(p9jIC2FoNNHi z#ZVKnTE;IXDJ)^Dgk4c%g~s$D=d%GNG#V4kn@j8FK}4b5Y8a824~P&r8N)1J%O(r3vO`}E5O8c>$9SWBE1cv4P|96*D;?ba}t)5 zCZav*p*1LMQY7?fOap9pFm6I(0VBp0J3LR%9)xgwG_0CLPr&eN|XX+-8mU;?xCY<=nWJ^WfwN+Wv9`I zk|d#mvC125rm#Z__4jbTNuK~ngNGT>P6tcKR#mC~PCgSQfxBoMVJsHH5^hU;9wt6^ z1?7}VNgIZhyp4mxqj@qbGa_nHVS_j8(Ka8Qw{#94B%jf{@U@cPLPlFTEbUl6$N6BX z`=y8xF%i{5qFORgA6i>8APFW%`i@a$mcwmLj|U#LA`7+L9v#aGo$5{2VFSlazO6u| zI9K?oIc)xc+C4^)2TW}iD!WC~3!Ww-%W)Q>@%w;9gOK@wLj1I0STPsqwz*IJM$r=3 z^dL_0q3+Q`EWV-XwkxIdY7&=^@JEq&BqwNH)!2x4yH;+BwF+X5$MbqvD5?U>RA%)i zk?;*bvKzL?J2H#NaDUZ-LDzI?+k4>u+Owu>db58rF;XG;EQWk3WuEJF3`ev z1V~_ua-ffgS}a2p(uF{)6tx@*7%8r^j~Oz0;|i&-`ilc9;!1=_m5uOoLicC|fg_qj zhFr@tQ<3R$UMwi{hw6RL2aH@tp=vz!OAVv4vD7kk2b@`;&<10z+>_xvi2&zi=tfnr z9MRolZ)+-H<;NW2>sMx-F5L-`@!D38_Tb4vzFrPMO5Rttqz@QY7eF^fArxeMLALu3 z!6Fu>rF*k%07NGp(a$WDzC>M~V*6Ikq}4otL<~aiT_GD3S5WTU1AZwEQ`^8g{4&nw z6}KM?{uUrbiEJXK({|Zq)U9!nUkid!Nl{10x78Qy%+sEB5|AgxOQ?fcf)2GU5vR9S z^QZNOch1Y0QF5TaS9k#@7lZ?bT`AF9OWD>vxH`i<+kwt((#a|xPx);518u^{(oZZa znkA%~C36SSPgpW-P%$?L?69oJ_O(^@->kjMjWE41$^_O(xlt~J61JnHPCRi&=}f=9 zDc<%+$yLFudHq1F_U){4+nXZ_s8t;C4fTb5&m6;cDCd=SsiSv{tnJo$WQn5NeE#E= zv(x%s*=H%@_wP(+go0+n!3VulqG(ASjb5aKd*FO-SXg(2y4x^Zutfn>%BURJQ|QYg zAj1H-K3Cj}HE*U0XBWay#snAlD3j(t%;D}lD{Vtt*Kc++hD065!#V*Y7ZgW?Eu5@^ zIfc%W&s54OHsIYt6bk(Pa6JAaOc=i_U~g7oxE-~?3&XH|w>$&sN*sgZ_EWdgIS(uC zc+X3@rJAoGucp-;juDQV%Lx2-$sC)+--0rkHffPc`YKK8w;vBoqRcV;v7DEd3!F<@=(aGd0!^q<;Zl~?)ZDWynJD8>xkn{R?-G+Giy1B$ z#qAQ4(8bEasRCYjgkgn~==Yyq`B74K$3zJd0Qlc~G~P!u?)zDi$YQp^Cd+@DSr&8` z3oX}fg|t>u)THk&`S>t|k|s@-_h%)e~iIOY0A=h+=JMy@c7>;+Wo@`?s3 zuU!EtgF#PR&g30iE*TRGJP7oud5ps8l3L<}EF>6)avaei3{?`1uwD^a?8h&v{SAn* zp7q*)Q%hhMA=(wLDXayiEqnjxDXkBb&!bkVt$~=wN-d3}aCv9lVn1l7Hg+SmlVi5- z{46S4+bv7Pz+-JM%pDra^&SkFnIkN7$yPl-5gl&S?=XIljvoA4H9s9JFmX z){?|-nurNdjI!iYfQCatgGw3OK!XP1FKXTGcsjBpG(O@NejjmTaHdy*F-xgMc$D!! zaN~x-ThvmG4cqe+|52GObM)eif?5l2Vbv43sVQT3TFy3-+t-k%!f` z%|8k&owW|In5~xtBS7a}=q@r$vEa@|oJ#$d;<`ukM*aAlSu$;2YET?E0Ae^#Aq+K@ zA2aP*5q>pdh(xK#mIO1cFH1<`ZBL12;q@4)ku7zt?BbWBH)VdqkQ3MMsRlEQqtdPq zqI@+_>W!Dw9m>QV0#En0LP zt#VkmHLr-&E{{lYwHo|%MQftOQ#bDlvP5DmoRKCcYi3El);4RE5-$6Nr5>C^&{&2u z*fW*e#X|D!%#zFaTXzk~!oRYQuW_Kv0`$vk4UM&?l=)A&a5Q}wcCHAI1!nmvOr;<9 zm^Pqocg(|9yM)8B2lw?VCj^>WiRk`(red#^089`pf9U=5&2fwmZHxszCL_F?UPPJf zjGA4loa6g#tZ@PN46h`HWj_}RkN96qq7BMl7bUkgD zzwI6=Gqc2XBJCdBZjgCL>5noEAWLWTVXk2D0=p6U-sY4aV;*@}MI4#S>n&eTR-#Zk z?xV+e06T4z<8>ih>*BRSl^m^2BqGBSbL<5Ry{l)yJ92K_mCgB(*20@&1)tX=8pdxM z#vHgHN!ZNIjjgQKPxUiik*UU9hharN*t+chw4})#sxQe0r^Do&9m=NYynC)P>gXOjx5!>7CarAh^~j8wFHu)`#rvh(Vy_ zGu)AMgh$w@S032vW;O0`ZK36UQvy@9#IW4c;tcRlWd!EOh&0Ip5A&_gp7S&ApcXoGH}fgVJSBAxMZF*I>(u!huDI%{sMa5d3VJVm!x7uuF2$P3zvX?jir8iC9557W`Mrz*g1fIQj zF~(*D^B*Y6g^AD-yb8iREc8Jd*kpz77b+>`hgZ3gc7?mS$yVA%#LNiBPJwMt34bIo z4rV!j)gkXU2Oo-|>v??M5tf#FLdxAkekeR^|F^^`4_kdj@`@d1fy^#3<%F*UY32+I z8>3rTHwmW9D&W{TpL(nDm;2~ElsL+Z0-Vg%=@|l%=Sb{JhjUjN*>{AWn=84(957&^@BZ_Ru#b>$__@>nCWt zxtCvC`RSd=MDh2sQ)Zcm)y0ngbYh2PH&tMjQWqagSVP>8G)e8DTvz1AnzQ9E{hh*I zyQ`8TY2%a$+q6#_b%1-p;?N{|UIo!&g~^cWjpovfaENqx)qQ1Czk;EJH4OU5&w1JA zoy@>}=fkDZkYsS!36=f4Yp$i4?ank85$Qf(6rXuhLy4$1LEdBvUiT&z z-nPozq6&j%rM8Ju0j8;+htW2B1f|qbS`sX9!hn|oO@9-89nuT#bOn!`r>QeOH@trA+`7s`dT8}OgJeod{A%6s3~A<))^48+#1C}D)D zDZhOi{qS#Da#e*p7}Mcl{3p;4_Y0OvwAOvOfY!@ZWO={0*ataOx;(uLx<^;g>Bx&< z=!&z}DTB(R{uY{jvV|*#SMDyug`<23^W9Rk8yOjy_d(4-Yqe zzJy=lQ>_5bG+QG>-Lj0d`5|DN@7HxH!`$C9Kfmk=WF za6u}ij~37vGViD)5ehD1y-+Au@-&{_vnhRPqbrt2={&DE5Y??)sdnmKXi_EY3ghG- zs^6@F8(8;{DD$u?t0ooZL9u=!nOtZj{VqxQqhWS z(5kP}#Lff~{TFp~kM}KXr0$tT?Nw6m`K!KD2Vq;O=AT*-`7v3_=SA)D6RieDrqp~Q zMNvIvc*>wXAZ#Xcvann#H2CT--sutUBJiu=7PR!8DEY`qPxH>G?GnD)Ye8$IbBe!S zYOcX{5d%d!8LoTOilo>Gbfztjn*XX}0Zn*V!zD-yPz|Ui3J>#DViLT88gA?Ac18CR zG_`(wabilb{}m+Eq0_QjL3X%nn!Z z0}nuh3w-X1u(XDaAFCSXq;sO;p4-TCEoWxLV$(sZ-N6`%nIH4PM491|;Qiay{>=xe z8~#*F64ez)7GG;NxSO~DH8D8o&T_(Om7BGWSXN-_lmyFYicX}hr+^oFtnj~Ux`Br^ zbcsU~pkrbdlA39LSJj&^EaHPSU{g@L#M;S_mE@_dQm+eHVoab;MY7g_cO|ZSC#EP< zpKLv@Hx(;3YXXFoevp^Rat?0G*Suxvh|;bEKTW}x7IGCuI#He*M++J}wgxwfU9cE| zl$lPQQLr5rvCt`^ISxX#j(Jzmf+dbtFbA%MiRDbW1oF}qDNNStD31=U14h2xF{)g` z+epiE<4ezzYW4#}8a z)$P(Sr<)Xnbk}aQEuyzbNKY-86>&T^XRx-BEHm76aqDb1wlEG?Kwvi!PkVo>Mq!>{ ze~rxo4KcXiahCdU7Groy@zd^^juiH1XiMvY332YQ6emuL%M4+mNSvctMQlXk>%**DGTxPoU?`P7Qz2yLWVyI|pB7*`0bfdG8!@S%pP z-m~q*(1C8+vc&VsAtA6~T6+XZx<}u$bmI2vx}uqXM)>GWZ)#wLZbE$d{>?*s+Dn*6*wR4T^@qspN|xJg zucop^AY-<|utK4RCn(h0bEqRfP1uTz%%Je|_hm{7aYYIvMC)c|JViIR2Zdp>k(%gl z%HPsjBX8Xdknf~BqF5N2;jA$1p1#ERQ-^A*k?%}iDt@vHOfKgfg;V6C+A-nudva21 zZ%mG8XPNDhe!eIZ!QoH*G~!eA85uai*}d{j=)Hl#ijcZnUNyv#6Fr){0IJ z!jH{@xMJ%@lTTaVBJ4q&=B+ItRH1E7R&+R$C%Y73YYH`e1(u)Rw~MFk)QEeX4CMRYW>Ys*XmEycE5}q)Q8QW$eW~oRC zQ_r({+W}zXsI7X<7U#f3cEc^zMlHCkNhv;f?bNY!QuyGBTtaV6E(Xib?|D=^5vg=4 zPNm$PA=>!@Am3R*w0&PxD8ajZQ!WL>Y7$zqwAlFt^RR78P3e3)Q*{ilkvKODM-8sM zThLu(6$Fq*&}B$MfFDY0HPICYNT1E zxs7>8nlEYN@xI8i+iDhv8`y*sZYy5icm6g9dBf{?n46oS<}LoUD^oiRg{k6T)tevuyCssexMKXuFntcr;<2!@mhsx)CQ!Y-64U3a;{`OOw~aUTtg zo?*n*yfq^)v(hlSkc_KzWJ7F=|C}p8zAizpIDiyArJDlRdM7Qi(uB+^TR6-+fYu(% z2N@+|Xa<8m8~m&ohP#3K3n!p~YR+p=kTt{im(`s5jm_%C>OJZvr)|xo& zZU-lILo_V#D44xK!Z24iUPQ5d2T@0hLL0-#f1o7xJz{(qg7_*mv5Rmu#iGH`CI8``fOBugN`hZ z+XRfWvqn?5${C6DYbQG%*53)dkqtenIz_m8JXz3}& zUFvMH_81|7;edHRAq>o0Em{grX6EfK9Yl7pLiZ!(w5E z8;j19jMIl7_)e?bAMzF+CZ%1Bzaobr-)urh*PdVF+N|t~OH7i#GqN~Cu7`{e%rKaR zx5S#LWP!g*k>7!|b{0C7Xuy!qBO74OL5LNi;6+O}ZgIND%c2{oXvxFS@8*CKvDsHc zVitz0xn~MKitQeOFKsxCBU-)(PKl}1*0}aI@X*rYPSwkB2Pr=`eNO2%V;U6OX<$@J zCtl4!y)4_$xA2n!{n|Hibv{}(DHZ}pKI?~B^4UJe!?KED*Zb;QU%7I9rspPS)a(Is+O0};w; zklHUR)gpi=KP_5Vve`T!W*?xZ8V3Y|*ObbJBEiExXhyh0Kp1)`!1pqqWbw~YhfcU3 z@l+&J$(f7IjKxCg=#Vw?wobF!F7sm>m@Hr}p70y~=5uCYl_ej3nh)AapIM|@!sZj1 zrKkK)itBBPt?u%sLsuB8^kf|V6xsq5P1$UJqQx+~N4Kmf^R((Vl`~=6{u}_&VpBsw zPn4WG!qTkR2^pXSO)U8x_I%7@83@PsnCGH}I_9NQ2;&I64ijqj3P%e1%6w4&WH6w_ zJ_rq6EMm#U34@5G^zy>CtWex2NmZ!IGH*laM&T8mP zyK(G_xQTHDK&~k6!VAYt_^}DVLuJ7dDKBL@J|Q?g6-f5C%gebq&^pzPbjAUuv8*!s z_Gz%4H0I_E6I2p~1EpfY&(kXoEdT2s#aNJ0dK3{j0S zMz{1-A{~Z}$a5?KMi!|hFRi;!>yEsJp<@GMtFR|!b>2y}91}g!(&_YhSF8mc-qA&I zn!tNiYK8bm2(9=bWulDRo8}BjIOxAokn(63#Au46`yI%x9_j zV4{5R2^X$ZhI@ksuw8U-Dp&gTmUUde?6b;HmNAM$DofXFw4+#M4iQGBloeMCmEStO zp}DCxH8}&KV5y)8@429=Mdg#mBH^*JlC*+CUqHa6^zJcChpyFhg?vZjXg-uv!!QtU zxj#RRK}S2G)y}snv)8o1M&9U#HqcMDzJ8~U%iQTvhc!5o;JAr`s&*bx%<+f~zSB4| z#Hu)ngCEbR{HOO`EP>^OhGEsXP9ue}D(BV!+V1@+%)D-^E86eK4qglGgs*}YrmX}d zN%giZD8&LIM(071yUOlCI?I*_nw9Q~czRVF?BJE7Lkgch(?0ePf7%sR$*jc| zaW#8wWkm6|V7cHi*H_aaOuW>Sts!H|syJ{Z^f1?o@w7jcZld2kT+w8*$s_q(X62xs z$SSI`?%^(Nic1}?w*ApP;smu4jKf0MF!8J719>TgDwx6z)V@O3p?n}whH(5_g)zq} zx&%~KahWdmO|L)32h(PLZ1-!&H9@|>MfKTY0sq_DVj(29P_w#dwb9zL!wBao-<`s? z{G~WjqnwOCm9~(2UWy(Es!Hc9o%-FQfCB{X+Q#0zR1T?%Bb$r~e!8LxjJupO8!3#f zYsJK+iJa}5s4ZA@jrIZ>uD@`K6R0>msiiZ0~(O3k8gf08bXA4jG*<~()8eosJ$9fHLs_bRhCW_G3uKyWI{ zWT|bE?eAahTmkz-?P@saqLGrcT`|nJ?GhlD7Q}c12}zNctO6TNxUZWIU7RXs-7(j@ zpi9`nN6@TJq|UYHgKn){2nV@GFt{tGu($SPw$T638~$U=%TJfRF?n4GWq6ewA`YVw z{3&q=Rls>+NT>SLm7Wh0JWicTnVKD<$2CRb`mV^+g%hh3a0`WMk`M}ysW8^-9m>_o zq>h56a|2EnyD70y&N%BVp;<*c5O6-sw;Y!-FbY>Ldu3 z64)a5FX&_XpjXExv+$3x-!0V8XHrn4uw4P%>X*{SUq~-;xM`W9?dWt=XSbAC;4k0= zelPQM!Cqz<)O$)zSSV6B*-&D6X_sud3tUo9h~lt%+gq3_vjpiK&C>LPE)p*V`(tXA z7aF@&3xPf;p$%sa2ev8Q38zr&Z7U-@(OH`gRmeZ8zd}(7PB?+Svxt5>09!3dl=c)} zoIj4-tnFT>ro1#^ z4d_&P(gcmx*)5&V(*u17g(6i@l{nHlN+5IyWu&DiE?6E-r58Wei5fKt<)j4}-%lb# zTT4meOkc`y4WnLXi%2RLFt3`!gVODD#s_&21{&Cwe1cbA>eZ^9rO5{^m+(J6+f$-9 zE|U{AhgpSb`)fXCprbwx-}3rbn8Pfw(637z@ls(hQo<~CCf{og*F~aqtRd#aEF3>l zJroj>ZFyU%=pjZSS_)cVbr6Jy;gkWec|sF-%u+EseM>Bbq`7ZyW$31o+AX;mJ3N*P zl6cY%8ZvD(mUmcA723G;f?=D64Jku3SE!!y)p%(F{ms^)#VB?aN6EWb@Xt*3&~8|M zS$4qQVcFExr3uzk*woC1vBm-*liI#i3LYN?>*O?k%(gPu-d ztdyUW@$24*Q4WFpy1pxVQ-z^QRK^>mpG-TYYuuDa>0>?DVmq_!fP?N)Is*viswISK zcW;sU`73NDmwU}BKF^; zOWArzN!Ff>-kki^d`)^petD^ZPUOteAsc2dFDi9OXV@U+G_w=&KGiZyg`XN|iL+P4 zVi~2>oY}GIwcVQH>%ffJZH_;6EU26#bM?ZNcGhkT|tyxpnHjtU6=0jbRL@{qh^cKPhmh(zC+OPM9Qg((IdUB}A^4HeL zM7W$B3zO=rq;s}69qz7eHKPq7Y5to67Ls+hg7gUsp-Rmcgksq-ea(a_#UNcRKp#V> zrk*JM)B>jt48!f7b(ta_tWstv zJfZ~o&za2=Bl0LKz<5qn-drznl#h7$rmsSmF{Eme)_(=AADdDi6t-{=4KXS0 z)Dd2)`{#?pFrmXa^vd&=OPj!bTOl@Dfy+fJl-8Z*v_=%gVhE<-je`!Ey-5z||Cea! zR4Yc}(EW2t)R4hR*ey)1G+G|5{~Sy2%u7G5{HTN}_56RP?uWIiX4&@ex4axS8xfHZ zLJ$cd1Q8Jt5fKp)5fORWoDX`R-{|GOH|ITDU72gn?)o!oRCRUFNN3h@u!Dt_lPo%^ zN~L?JuAY@_!WcX5oM$;k%MUdK$`)=MEESd-r!UoSa1OV{vZ{#`zYMd)ygqe!qS8>I z*Qtbty%5McHVnGcwo)OJ)s{acdSKA-QM6b$FBp} zIO-jZx_Ctt&XqX0M$IPQ9HLtvhkBUtFKO|nakhz8$-rVJNH?nn#~q2^WP=G!Voq%_ z4kNQBT(i0*=c~@=iFAtGKJPTd4Wr}Re`H}0jj_D{{A1lE4I|=F6n1%H+}<#ly&LAVJ>}Fy!pVeg=vjxm);H6+E_}G03%95SV1Yf8OZQ$H zG?Y7PK>#`+nK%Ue!r|wgZC{GUILOC1FlH!U1v-EhzmkVE>ZNzP$4j@8%bdI))X7Sd z2PNf2+{rLfGN2T|D?)mR29=KbFB1Xj(H~(|;fa;LEk-nsS_fDauXeajUR!!a-E)>A zOC0=6cCUiSHxas%v}B`tl`xseb?hd#cc#+P{$r)`sinhc3g?##BKk~(4X)WObZNGv z(Q5Fl6h6TYL`|u@c*RN)%sFk+F;GHVWMM4OMB&#kD#18Shd}|_`u93Rm+k>00a3wv zk1C4S(nkDvDS=rwsxv4$7>03G?sO=&7#N1x$5H+{{^Kcj%sbnP6HkgGzg|q~eJpZ% zl&RvM$ik}4#lKU;w~tohxEa0ZO_P!=DP<%@a^iqtyFz3&(%!%n_k~!1kASyc(lDM(K%iJ6VHm}gk7IPVE67)+#qcH#%UQ{m~=3&kz1MZMV`U_lq+=s=9! zxb^i%Z^660v2*2g#T37|UBm5>o3*)Iu+ce_yj#C;uC9*2U-e&P(S5|BknJ$UHCuxUnF}1$ zlG(9iSKRkz*u=5Z!-mJLlT!YHUUgru^TyK^sqB%2bhp$j&1Uoh^fT86UL5_!e58S${ z@Q9NNBrwBJDzAJBpEP>5b*sXQD^eVUF)kRH})v($x`SrL@qCfSpAz9x04aJ@YG^FMwg8w9*lVtNOQUlxmqr)?~TMLwLev zd4j}nZuD*e?A+15-o!!Z)!q}jelm=-z){8yUb0eLT88#*o5odsjXOy1yi{}9ZV@te zWPV6lEvuePY~1i;d!1?%bnJ?nZPmlHNo=Ii1XjAO4PCJQ>{D@7b}-1*ZcKh>B&Y;> z3v$bSWw{am#z8IkuqB|PDB@ArEnf6SbwlU0?!=nzu9|HTKNT<^N1cqNGmm+b!*4Am zaP+?wv(aOQBCY6MhKhqDT=&BJK^w>zsxY zJUWVPVc&?xJVjn_`6!|(xATR>REj^h<`1<;66qqbb%EI4GM@p9LDtgGcEOW@djoH3 zDT%8#bEs{_ho$F{nO?R+NqfpxF8fl`RMg zaq$ic=nz%&c7Y-_(`zR_`@wwOH;FQ9*kt3aokd>K;kU7QFmKA%7tQQ|< z>SaDEzasv+j|(j+-$1=XNzw)>c^7Q6S+9)0xDd5%Dy0w0NwB@xL|qMw2p`*efX;eq z2-O0{*=L}T*+{eFqSNKAFoA~)W~H8zP!oE&`2CBgS8`_^3!CStN$=n?nb`5H)X^1L zse6FMk*JnYS`+y83;*E@s-*_1R8C-g5M%U(jdUrkfl~_^VhA)_3ZTk1wIq&x;oAE! z!>n4<*)ckJUW(&^tq*5m}JrAd2p<31x4^a zx~c?NmTs2SL7XZ>+6X_X*@upA--T}_qR{3fJFovv;tdJ>Zo-$jb>#( ztkgXMpvy~6gl8UEF6#Y9+%)irMUZ&|jmSHTGvwqfMY!rLVQH5%vFg3nBc}Z7VTnjl zHi;2?|BOyLv#?=^V2iZ!t$di@_wIsT#c6gCAQxq%E%4VqH&*HZ#xVDJPo35fR&7Z-uW)^2+ww>em$-VzE(!C|g zB7_j7%>{P$E8mc#p*uvn3L}VOlZmvosYp1=uoI44g*o2qFB0Eq)-c81ewZm*@8tyA z5F|DzaR?(UPy>>Y)7Cj+Vn+7!_dma~AWug^7tJ~iw5fByez2q!+DvdM0NC&&lE!al zFXWroTKu)?pA(uLI-;3??hT8nhv-#ctZRUlUUSvfui5+RVvmnSTi(GBBg{c3frOOy z)3l9}5Ap@dH{TvwXk~!f<3$>pOj zG1Cq_50(M~%Tw_kC61x|ag8##_%MW5>x)%XN@fI1z%2|kFWzCc?wnb)I^*NUDIt61_S4D*Gs{nOpO%bXX0^xJaXdtCsBy5|VHA z!6!L3VWgF-r{Y%}z++%(W*h0q^S^#<-t5*Pi7rP&jQ?Vku4%&}->5#`9IC(4V=KA)}inX);!IS-JPg;aF2hnE>)6|j|V^A*l9OV_G&`y%RwhZW3>$n_=k z%w1z{$Wdu0-{97PJ`*xI+w+_4yLyr53Z@|h$3zAufx`CQB5e&pCx&M{X;@;8}G8 zn7t(lEr(eLw>6f=RnsP5K)eKe0XpN1FZaxPyH{az0fl9E9?hSEcx|YDX@q@nsL19A z1zEDgHXC^)E4iJb3AeAYaZ6sJU466!GGAYRJ0B!Q52=tCu^wXe?cm||dIy@aLb{R) z2b|0KvmW8C($+!?d&|OrKTtCYiI*$<2v|O~!fH3`?;kP*Q)EHYqp{~4R67xt){Op` z|FXPrcM*lMmB83VXM7q3BO!+>@a#081RuA(cI!}&u|%qj?G6@ehNC%;VS;iJ;E@C_ ztF9m0Y2R2aT-7x&qz}})^-J$D&KuextpB3*3IBozA(Yj8_0&qyiWvZ6O47WQexvWj!1~gtWxrx zp06OoOhN9L4VfA^ufS7GGmzK-oNM?V+JiW1t~&1JL#ynm~gZ*>lXYP>;nz)&hc&!!uevg*E7Xq?k z29V^FiuZ7sZEVX&EQYNVSPhf`ct>x{wCyqtgNPXi6`6;(|Fq;PC-W$Du+)aT&()}K z_~gE0$ptJ**_)EJHlBj9@Emre7(d;%DB!dS5)UDFr^r$8Kn<*;*9A_Rvs5-Vx@M#g zqF_u|jKW}4N{l1b>o?3BI$_W=)W5QhlJ>+NU|^87hY18kS-#gA*=&kadn4#op@NAP zt?5NZmaX()rQcS*!?`&YyI9~WcIeM!9quqsb~#`iAMT;8!_Qy@55&}j_OJBByXv72 zqp6H%=lNOfu?}5+tYd@dSy^f2@gp21zUCNZ@A@Xh%4vlK+J?G2d^m-sZh3j^3NJHJ z21{Fo;|(d|r3CNY17)rYFA%Ca0l&&Pde2AAeH5i>lO~Cnq)0FlUv`?cn8>VS+^Q-n znGkHC$7r~Vz-JaE&z;D?0)c#bl&2N3IV<&Ww`uczK+s*yEw_SJMYPC+T*s>?D>a23mLz<09w}Fkad4dTvwPKanP3#ri!5l?- zQKA)!%LHl=8dNX~g9snzF8OE=&1K|JVTTJ9gtLwUjfWK4orqE4&9p&K;U?Egm7%8h zKSz^2mmy~Uao1sbL_=GZuqmSsxeOb$dWYt$L+{ZJf`c6~PvgiNXC3kqBPzBYkIj8^ z$%7r%Fqswe%sS{QqZabrAtaZxP>(kmwSaf50|+jXiY%$Xi79bEBuRZ?PT8~dDkKPZ z_MC{+vNUTWJ}qzeZ;qBog9e`B;jN_@svox7ZpUtS;F_)&4?_#4<2L@D7Hf5!Q<@WQ z?-DR)^(6ObkrmVxS>W}cQ!@@Fk#l+ysD)N?kOU=jl&ddQ%`HD-$0neQnM=6^g9_w@ zuf%g%CF>m+v>=$tl#!_D!@>(6+&esuA$w#M)&)5Oy|+0bBm^lHd?-8i<{9*obyV`n z>Rd3kmvYFFU84_$1HveL__ba(<;~2GssZbs0js*1hgK*!b;wqZDiWTy-$)n};2wl- zdo52%2}J5&%#NqV2Z}DeO;p@FT*YNohp~(jR0rHwDPSGeP%Q-2Y>@Afp1PX1dNItQqP2PnvD0N#vd4 zN-Gd*MRA;zw5qH508g8Y*+*|Jj{Abbx(y z;E_~ke&@%;W8ibk5s{t&uL;J-ZX{S`Z-E=7)!yAdOLVM3c0c4HQ!J4BIVc#*kBBX& z&X}^&k)64HhM$I#x%;xiJ)}uZI?@sXNy9@A-&r=D=GqQG73lX`a6yTN8O*Q8GmR5?_^cb((P2!<~Y3#b%vBjAGPnx}wW^wov*bIW&qm272H1;R^2&34;@ezJo~m6miKgysBSa^Sz@z1+B0AbKY@x|a1u7@c zX>LFoCLJly*y5lU5KBU3lC3RicF0#2Nw)Yx9zClvLE?x67-h5{nLWaq`DCL>T_~=o zmdV7AOEiLe|MJgS`Io7lzKD{M4kpdK37f00&|AZppocC3U`jJH+=cp=>ST2}VeBS( zcx01}Ycqut-YZk)M7=tSsM+2E2gEF$(NG4KI zv_g|#tD01KnsGIX8t8JC>46faE91^%^I%_CHFC2p|4OCidaRVE7WGOrQwye%Pxc&k zUQkV1JVhCxsj{MkK3vEogAR}Av4lY^6Y6e2##2l3{ySI@mNeRZ<(j_R0_g&6kDoXIZOBK(6AzL-Z_LB!7ii$hTzHg zh785_o-4!+J2Kp&Ug`)siR@R4I0sNF0SHnc^oy0 z|3N%G@Q#^+t9Xt|aDnuwFIH5QX^^kBxM55(iKD6I|Av;&HhorkpySLmBQ?zKLZbiA zSrP|fOm%fB7QH=rzHqD|Z{dI&2PH5#)OQ?wTFK!KKurhDW%g10W(MSu4l>uQf=y-} z$LG4GdxTsgYWvrWG^HutlnRK`EFxgNl$18sFwal}k4ZIFLBR8tblW=6jQwEgBvc;< zkl*){SZ*Ccv=z7kv5|q2uNMLuq^b6kZcRH6-8i^tNY{1whLoPSs6Wi*#04=gJ{Wea zPe|BQ|Klxg8-{DW*u#orQaK|5C~~yCY(TfZA8Qf5A!(Q+Pym@|e{?HG(Nn+ZwPrX5 z%3fmap?R>;!buEaO0zA~TIS1|*H~cwr1V%q<{@>3%L|Q5<5X`vuh3-mV0^b8IBQ2{ zeA9{*AYdKQgj`_Z^*OvYi zRn3^gB$xYcFuf`G7fVzGrvB|xi`+A(8fkK%D&@Q>7u?y|t@bYwJCI!QitTHb`Tq0k zI9~fGV#^gc25Ky#6N(_Jx<+{k1XV4#U*srGblh&zzv;c^^jK$#jcy!y2N3%Uh)&6& zVXgH`@U?fTF^=8tFm3&l1y)5K2BhpiXqQT_>oPCfYXf3xOea%r+1o*=DSmZ;rmMuG zUGpSqdFptV-ihKH%1Kj!l;ON8=4WAN`dGVVgKnmUF7cp%R+SYdG6f$nR0gD@RJqgl zEHnf9yjD#`iDx~i_RIlj|7qb0Evr~m76IJy=a-yw&TT1eUai!3kbb8h0!tI4&hqt2 z1v!Vr=ySXLNpgoRo;tXqyC+t8z=H~F{Kam?`qxx_s^$zT)PjrgRX;Kws!<+}iqQi9 z3Chgn{$)irkJc`Xbd;4^+xI_w+2eCbKkwdDO#-Tr%IMO8!iK35M&~dYyL|)>*%&%; zG4ywV_VV`k5ebgn(C)7JWbb^o|H?n9=JvUFjfbCK6g!W1_|#*fd<(dRG?oW47_#0d zq%Y`nIGQ^SyS0M(8xcFlV_?z|_QZCVw=15dvJEl=S7-SO@B#(+8SKj5FT;+iQ_u~!@YnuDW#C(I9MZlY^<;eXQ1qfOY;fY{a7NoymW|JC5j0&Q;Y+cj_1nr~U?lUcg((NR9q18jl=$!iaAAh zyN-{=-EAq?jM6TNn#ldNJ?0A?+fkIi=qB>a(m^uxY`7+0Nk$$Y3N{+{1*6>~r!l1y zz#hR!2L6|vb|Oj*)&<+6G!Ml(M$6r-@9~#RF8;d%tBfPH4Ic4Qv3UOIfxKfzQgnCA zAn)F(IhvFKSG!G9UsjkQb3_jx@x&ssPoJIxez9T9YAd%EfpRKV2cs)HWgV=H^ce$( zDNnP$9gwDOK_}Ex{8i2oxMxAPC^YM851IoQNDUjxAo|(ikM!01mIP>uEep5^lNf5W zAb@hxjBuEhzz3CXiose#^GL!6`x$_W7uJq`wfn`r%o>!{kz9=)b3igm&3d^QBqzS7aDw8)F_z$lge9)>&bCWP}6+GmM5J zyNaf?N_O5~Qfa=kCY!jc=|X!$%0VkV7H=|`_SmetVymSGLX#35;97QUBLP*%nSysx zMLVyp;Kgqh*6I!kqBm6IXteCK)YYB_op9aCmr|;?C(vMEJ0BTZ@rif^_*(1;#@fj{ z83rCM>co?BX*L*U=C>gfFo|oUrydbBgwg%m)Qqc%tyg|2bSIRxFM>9lJ#*y8Y>PN< z>>S0lnRZrKuX{{PMY*_>Z*UP0#w1p0yE! zz9n;{cL1tBn32rw{c)XUwG+}lcW#=;`Ed?W)}QrBB=^kMCRBVxYCX|!tZwVOC3{BX zYiXNf)u)_4c}DqocJ70DoeQ4{6%<yeb+I9M)CHOT|*zpFq^)u zSYLvlbb2OZI`x1htmqa%^d8fsT;205wDGl<5&sAaA{`>RU&m2pk6TJ$Kf^%VB= zSd-h>IS|U-@$Z@0_BNiQfyus%FhesEH!4?`*1{7AX|NlYR6%@;g=l9ddADkbnKk(? z9Oqa)^IgJW6J{IOZmc&sA0+)=jl2Yj8J2)`LAXl|CVIDHYAxZ91DGRqNJZz$CYbDn z+Oh{x52OQmVF-Kys9eKz9XBExLl#b z6LCtuV{A>aa~k$UlIfhdxw0& zt4{3+p9c%0p#?*1}C*D zt*R5_`!|DfV_$SFoak%&9-9CH)6_vI+r?BaC;{R2a@A< zhS3yjjOp(7dD*PHGM`L@$_pazjVnP|mMF95U`kp!En9bx6<7*wPLC70hV7A#V4~pe zhs7nJ&9?tRx7tFwMa62J*_cH&9hzo?A8&~~wRsVh8=LU@5>2W7hjhDa$Zo<)L?)KDkKS%GA( z{LnV);)}WK0rfZ+iI{$>MbStyX^!MD>=g2{IQCWab*oSDK)WiCe6J}DmqOm4!#!W! z9TTe4sjQ#5bWBEA=pVhtCYMx|YX~5DkdZ6A>TRgN#B3Rv8?|S?ViEDIldw{}j|_zy zaE>sWB{R%wF+R<$vv7>x!H6|ixS@p+ckGGo6)Y62m|hT~1a}ZNk1=>b6o#^jmN3zW z^Z`vp6Ot%&bPc4?>sJAV54l7zX*7kjr7(B^STH>0JP!=65=#c=_Wn1|-@|f_SZC`g zB_kvn^L2XJG@COO?dDZg3q6}xuKZcJze1UkYJ2@_4&e!I?@w1TXpWOZ-!F)`h(5zr z&DyHu^#%BvHEacgNg{(WHDe+Z6MeMykR`;%7di-{UE1^yGFu5?J32c@QP78;>;K)0 z$&sqR&#T!zqEKhl<``n8fIF{HjvyH{!wWi0wqGq%NxXinoRp7|jAFMrHhPuX##NO` z{K^@;)x;BLt5J}otCZSZEl{-Uq!sVR6#x_BXj1kfpu-HTtMB$Vzp}F+TusUD)3DHV zHH-1W9^C&+cKwoA{5r%mtTqRyMz3;$UTJG7o*XV&r!vPw4sUFztU)0yWcUaf5q?`5tPh6KYlR{$05x5N&-0>u3hzpL&~MmHNoE;WMYKKPu-5zQ``G zp0v5%_!lLbkmR&$_C)UIN0EV4_Y-qkfKjj*qIG7wT6ZN2U7wzk6Sa;(xaJ^F3|21X zl+2`snRpePRffrr6)Y?mW!%0AUiQp~YSwv2eLl%5VnwJqZC|4z>hKD>oJwihZ@LA2 zyeiWN087dzEw!jY4hddtqPW^c@lMKPI@KF3kIU^0vhoMHv78MHEv%&>tbN4*g1ulh z6gSaXj+?!Re7L&CXsve0n#|BD@~^N>$2?5p)qyBDz=js)MN3jua? zNoef!VLB)h?cIdlW@D-D#vkk>&}#ekx-Tk<$T6nR2omLuG;s zq7^`zhh@>4jAr-1s&7iuGOyAXSENN(-A*gr-_2$@&9OF4n!%)Ia*SzeaFv0F4KRA9 zN}f!ECFDcCSVxV-&{9y1a!iK^!%L|K>&mJvZ^tiST6iDskbSvcGf;kuD5jOvS-sT(5{tZW5Nzv-oH=Yp?mktX$o2U>T`;5E>Mz216<%`XccO)Nfg#tVqXLbRUi<3|lK{FBm11&>t z5vH6>xT3D!hEaNjSs5r|Rkqa(dC`3w*N^rTN-1=|mJiQ6+E%juPiv!VW9q^)iCscI!Pe~KZ z;X@`<;CjTY{GLXd&U^tk2@>eB=H?l>p^6DL_CSD{X5ImU0G)$zO?m!!+aelG_J;Bd zvBMO7F*;FIHlR#6B2}??`7l+gVqzU*B`Ujl4K==SKH}~b2Q){87LwQ&a(>Rt3juSq|WYB8(uw;E!C?xXJ=} z2l1GYdt$*ViZGGNZ=usK4NW^aI2 zMZ?EWRR;1jz{+7N`NX~QKVS9IgUr9RW?P*`fM4SP-652lGAb(8aPQN6dBnWxZC0`; z8cU|#AP6j!OFk$_%v}k_V7Xb*);zpLN~>aR9qu+7Gq4H`k*tY^TptihVqWa{R8^Ne z9-^R)ObDhSlb1i{pvA|gWRCkH0i@St6g!aC%xPtYbnhylLqip#0-08_{LChjD(Gda z!JIkfR1kp`QZ+;qPSi=wyUNIpgy}`RgLEntf&wTEX`Knsx5_NL=lA*|+$GHzeM(aZ zWI1Nd`4v(wS9wkVzz=E+DNVU&x6w{nQ)lLKW~m#{j#v@^7C<iV`9xRZ@&S??B#Pj1Y(=q?U%OXem>;HQqRn)OL@z@_#d09rMz4#@ zNB!2dT}|z!;7pHWfb0;Ud+m!uU(X9`W%yagJbm4*yq0dmbOS(DgtUV|Wl zb=7J`hOoHM`~BF4aj`EGkCZ3qqwOT&XAL{1xExu*D0jS{ePuNby!>&eqG|eytK{3J zh&>ir0-a>#2Xqp2|EQjG&Q6n^U@l~zc4SiQAIfp;>O~?<6_GtM3r&s9qS;>b=&u5Y z^)8oXIb{ZkF8Au0)3(2RVhwGP_uf%x(uvj02|DLft1smw!h^m5nXebOv#s9O1;au10;VQMl@_Z@ZTn z^@fK?Koz7c+Nwdh=-($2%zXRrxEMK~Gtzc6s{}Kq3a@h^N~?%5DaOg!x=@~BPWDDT zXmX0Tp>hxXWoH$^RR%EcXiP3NuCwstGAt>zoO>m}=3D%uD9ctO>8(zbE0oP$HcPS* zddyzogz%a7mev%p6mw)01I(6uG-P;9FeHz942c z@tD_EEP!9tAV```!~p9*&_hY848WQDn@yA$hKA7!K{*wpQPwb}lCtWA6d5x4VLCNl z_1Dd@p)r#csQi{cnMBsuF-)y(?Yn|gwIS6gX~B@Z8<>zPMqrgBBw#~wb@?8gW3pFgGWiD9%knBk<{JUHgvEsNT6c~i z59L}hVs(HEcm-h99(OMW02h3dRNcOEK{(N(0I%&;wx-cp0J-<7D~&$qIr0iI^L*$>`S6F*&JQvUN}H~aH)||RH`#g5^`CSv_5!*noXp~-7A!{yf!t?2wMVU zU@^7km|fmT16$SGh?7LxrlBe|o_P3ImcyJHPX?CVv*@1K9!@-MX`lka9@te=P)g&4 z1hMGuN(dIunZ@@+ml-O=tO7nsH2T8h4##xGktF*PVagww6JcQbOveiw6eD(4TH@}f zH@+c~JV-=#aAYNl6`#u%SducY@#fn`529(Pk~Ht$LRpxp&SZwD$<}!RWYwtd6+_k! z61)UvnI&~n+6rz+W;hk6=qiOm_m5O&hx(^()f6f$uQpV@!xuFrwM@bC0zy9`j6U?v z{1hL{0_r4kC|Gl(G|w~jR&WtFH7l0GzN%2XzKdE{CUaHLG|OQolPVLekj1x4h`SGs zsEHqxlLEy}%($XON&~>>iKOUS>%*NQ8o-;N0~a?g47rmsjozn)TVsTRCl?bti>7H>J@|gjcBm*So+TP*-?RSG=>9TR< z9gV)YErU!!wU-)e@~XntMQX?#rs7jeOC(__z{;`}Av80xL)0T%G}I=E(9Ag|#8r`` zh7+3M+wK^CEfXu5axYim6EE9>(G`XP{8&I8%@xIns?G)hK&955b9GOLL2{+?S^gVG1AdDm*wm9$T1jBiUZjubA!!xwC2Spwi07u+P zi0Q+uArt<+d$oT6lCS|vS{j%qTgr5Xn$c5a6Do(E_or^^P^2t@$P*%06+7IXef4hx zExc1l`Gj#6`&NhNkBo_i_(p0pR&StM`J=OS3Z$tcd9fS-5c^8_tCC$1;5;!x2@_7W zHb@A+(hy1(0+hB&57`%OG(~fq<+QHA_nM^bPlb<--bcHN_(cLvrx^yq0EWE_*N&TAVzLF664s`?k%$3zj)Mvt3hIwz3E6qbOs!s3Ti zvoGcqc9~5-+GkRS@0FLA)f)c1V}-dQhlhG%0Ar5Z|HnDpOTpN%M&_oUMxQ^5a`6fO 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 literal 0 HcmV?d00001 diff --git a/res/noguis.raw b/res/noguis.raw new file mode 100755 index 0000000000000000000000000000000000000000..b626121ede248908b620c634727b39d96bbd2d30 GIT binary patch literal 961 zcmZuwO>War5FRhea+KJ9X&ifG$#sabfD2T)KrfJP5W9ysL3fqN4N4Yd;ROX*GLnT) zP^l6E9{^P{i|&XTHE;2tELkwmRuU^^Hh!M}`Q{sdjcC;=io>GlsNP1k{bIigh=dWM zpxWx2hqhhTJGN4N+i?ZCMLR>!5gc-e##efp6A4FeGiXNyRe$>npt`}%&Q`k)Y&oDS z9992wX1jUq%;*!_O$^#1*pCI9DjkS{8kkaLp;C^h zJnc|*na`v37+{)z;A&?-D7}y7`N7eZqZJXJW=R|^0mJMB0YB4Z8O2F<9$%3vXcC>B zJ`7)ZAb6R}K}07{$-VfE+fC;(MOxBFhz^d8dNSACuowg^TqHZS93NSEc0s9J)qUjIiKmo?pze2r8sjYCUH&CnGbPrH+Fit`K~-bUIQtAc-pH9*D=zUy{SmyYW@Ees zqi#!=T;+i`;C=h_m@m9<gjOXohMfcWs7o6}s?4IB7Yk%hZcGzt{ z3Dk%Sibhh z&4Gb#Ibe8za{?(Y{pR?-+4qO_p&M|x1s}x>o!&RY`h|f9)ox2Q{pRw%Id;Qpzzep= zx%C~}cQ3^5Q=A{znaG*?E{fRu^-m^?znkfE$-MW4marQ z>Tt_>MaNn8-PhIP4qS0q5Bxmd!k@9fea)s0yEn`c%IEtR?7O<6YRk#+ZHf zHh76aQ*=3MN~Dez)xs*&!)N3uNNTdP*-H+ZqbojSwJn0W9(2ylZ9+69ORN~{M7^r#rl4hlD3WL*r;Tx<=Y-h62U0N4SR=HYh#KDtXQOnw mYb?2DCd&cnyE4mUYihPlq)2SsmpP!0k)yP1qniqJOn(8tH`0;- literal 0 HcmV?d00001 diff --git a/res/pl1stb.raw b/res/pl1stb.raw new file mode 100755 index 0000000000000000000000000000000000000000..53f91e19d9d4fba079d9e04ead0b06146937e025 GIT binary patch literal 1650 zcmdUuQI5nQ2!=^&b78 z+@R$zo!50`#Ey?;K{^v1_d+>6{7ttQQ-;ohq&iR+elz3^>GbO@ySZpbTC0jc1yYS{ zx(3%KrbHC&UJ2zPCZ7ZFzPQj=Nb2~AF(N=^(;%eM2}Du~Fk<>iC=&H}QVuX8=huDT zEd~uFTKGt?90^OzPIw?x4>5@BUI+6{;^n0uo>Wwxv+^Nn&H6C`d|6nB_I&hU^n3#Q zHg7k_7%dz?Xw?HC-4%}s>v<|x07GPg6u1!>Vj&pOsYp>0uoCnua3dH==cfS~!8*KM WjlLx!6`j+AudNtV{-y`?>+TOlvv61d literal 0 HcmV?d00001 diff --git a/res/pl1sts.pcx b/res/pl1sts.pcx new file mode 100755 index 0000000000000000000000000000000000000000..654c892dad12865f80a5393d347d902996b6d845 GIT binary patch literal 1269 zcmbVMJB}PT6s-AlPs1=4gfC!1$wUTtgjviy?`9kE2s{FV9XOek2XMe6@CeMh=d+ds zm`CVDf`SeD2z2#Ih7uLe86J0xpwX9?t(LRPy2iM3#-lhu3er9{JuXt z$_s&y-DWv_V{rd>w^`uvNpKcCJl+pjZV0st(syS(><>=^np=13&wsS1p}TBWeNS*V z3+@Gr_S&7ExBct8BV%ndXFSfY3|KI<{q6F4Y&S#Ow8I?xD$B@mdwty=+eD&yX8FdwVaX;xHfwrB(hHWurr~~pw=n&hcm3yq`=`Uhdn`XR>;ChZ+uZ{lzFV!Y zP5))d^q+ZF|Lc$ia6kYOP=LyGzybzPKm81x=@ybTTCTI-dfEjL=>!6&S)OSDni8gU|y9|bKl2*yO3$Z12E=s6)4aGnz6DXk1GCnCz#%-PsF n-Bp@evy$cj^j*kONvo1{H71)-`CTTDG6s%PlMZ&ukTL!PEN`7Y literal 0 HcmV?d00001 diff --git a/res/pl1sts.raw b/res/pl1sts.raw new file mode 100755 index 0000000000000000000000000000000000000000..9aa581b1ef93d2936b6453931d1d4e6a5174f621 GIT binary patch literal 608 zcmY+BO^$;w422y+3@Z-N4Xe2Wqa*`6&I6haN2_|3j=JCyeX$KgEs-ETzvmx_i1Lte zS~%adCD?cNWtijlnP5~hDoyx_X*&1?w{4>dMQ>JKtk0uyG|icE&NNQQskHPzX9w>A z;xVR~C@9$;zr4X7;qL$gp@o>qvG8r__uDF%Ls3rUL5EIp|Ft7lZkPj$wG~mm_66_# z$^n7xKn-(*@kRNwU~rdP|H6&^kuC_YX5Bw*X<}~UH&dQu|)rM&p^U106wWPc% Gsr?3$Kuhod literal 0 HcmV?d00001 diff --git a/res/pl2stb.pcx b/res/pl2stb.pcx new file mode 100755 index 0000000000000000000000000000000000000000..f28a3705a45933b6fdc380a9625bb997d45fce01 GIT binary patch literal 1451 zcmbVMOOo3*6znNU6f2bl4v+;(YcEh`UtnatBj5-)0xp3g;0QPZmZUzTaTH9-v9~V_KXu;<_e#5(mcMn`@t&K4vVy$(~dGA9AF~*cq z&bgE_j$^G=DK!iO9zI}7`oGUNT=2Mm{EBsRX`A&GXFT?Y$IobPZFAwjeSg?@6Xk|K z+w(m*w~gJ2Kj=F+)@A9%XaQwcVXwcU^nj9vd7N$?xGFj9y-M{r248 z^gTBJ9`V%fuCKdO({JvRE@e;mK-Zi%9I!uNe>&{Xcl2q&mOd~4278j9eg-W~T$j{^ zMZ>%8)cAF?o~tbI`qcK@t~u?VH>)@JisOvFY`TA74JYoJm(A)2_>AMWC)B^uKB1eD z;~VljCdRaNvx)uThOQ}_Gj8nu53FvR)rD&YU$9zVHtW?D-|#Ds*nc{j0yrQ52`E5i zI$!|!rCR5{QI1SrKeSz0Xb0mV0X9x1`8?Sc z2jmf@LMk0h!rep8(OG`;LKEj`##EBV)M{!CbS2So2P?WnSOX(gEZc!Iv_u=Ftq~{U zcqnL@K`8{e$nv^sLpzlJKN?Mhqt1;Px T%5#}K$`Ck8O*+^yLx%V_VB7HS literal 0 HcmV?d00001 diff --git a/res/pl2stb.raw b/res/pl2stb.raw new file mode 100755 index 0000000000000000000000000000000000000000..eb1a5d549181911af2ed8e39585defcc5b14dccb GIT binary patch literal 1508 zcmbW1YqG*13`Uu03$CL(DR%!GaTDgt6ELH9ZvKFn<4I_0DgTbEUpc$iheX|%gzLWV z3^G8miR#4kQdXNPVi_UvthUJY-2|Z@wb{8RjvM~+iJ~NC&zKqehE(ZH30-`Y4o>tcg zLXZ;543HJ*j3ETUQIF$*h9b)2d7u;XObh|R;Kms=Bx8hd4>Mw8Z|X@IAq7fm`!n;f zhE7B54%EO;Q#|&3S`#P`fA=JNU}O&XneZIA<=C|2PY+)lBatmTLlUOytgMJ@5~h#@ zIdPoQgV?{E&B*c31jx|-Ep)g*sx78`KA!_WAgKQ67cF-AnJwaz*3eF!1O zm{Q6)mr|x_s7>-JcF+`RA4@7rN>X_t^)HypY%u_F_udEA_~!|Q4D;oJ^u4A>9deRtR~?XVZL zSHk^Y=hyAfp4SaKBt4n=-OGUXvRS{ozHU$J%Z$mPJKhuD%Xx<0Zwd7;*9I35p{{$m zeA%;od_8>&9;lPXtts%i>HiqMr+&nu`4anO4jy;6Gdbt6dTLgj$0zJ)*z9}~T?5$HS2}CwGTzUXSc6q#RK{o#LnuX* zgeluvMZ7WA7^k&pZIv>KcaD;+QAC26=p;Kz$~BL5A+;FbSpr4$3i; zj{|L27TUphNPvyANj}fE#SwWzsgOzslW=;-IXcTPpBr(GX3QmNOs%HYKvxnScd(*M zgf%c?#j+hZLrb(#+8S{pj)#Jl83bb@O{CfoCVI{g3ph^-<|(ZVEoVfOtC`x^I^9*8 kTr-oV0QxS>Qc0_lbTuZMP@~ literal 0 HcmV?d00001 diff --git a/res/pl2sts.raw b/res/pl2sts.raw new file mode 100755 index 0000000000000000000000000000000000000000..c5645dedfd512771504f04eb4a3d88f7428ff20c GIT binary patch literal 665 zcmY+?L2`s35Czc22+YcTw%K?M5fFEtCzKnHHkGTGnyPS#{04Ni7nX(3-_S}#ep~`w zOEl`ir9MPm4%RI+gyB%407kl+$=Y$4-QtT8njhBE4Uu^gO~DV=*+On2=QwA`dz!Ex z&o`aEhJa{cV61&2WFq56YHEk|XNA?M#v5nx+(HCsFAIr%O7XElC`B|nH#=+Cj-E=J z*#D)JdIn136zGKW;pl4IqezJ9{&_OWARti>Y9SuChy}PoqJm~ literal 0 HcmV?d00001 diff --git a/res/resetb.pcx b/res/resetb.pcx new file mode 100755 index 0000000000000000000000000000000000000000..6119e5f889586429c72d14d63216bcd99c2e408f GIT binary patch literal 1398 zcmbVMJCY?e5X>=%Km>-4P#(@2<$_;F&=Kkgx`d9PBj^Y+`@NYZ0$8#9)`E_};ODfD zBT}ztW|;s7`t|EpRcB>ZWq&^U;O;|k`xKwx)!nN*E=5FD%`Bzl?m6dDO0BiE)_Wgg z9LF)|j4|%}j=RsWivI65u!Y|-a0$OXAGd(;D!pu;q5KFE+oQN2w&e~ z0$00F@lAlVm+-|CVx#01NOcx$thg?|TS)xptLbf>USvr6`bBC@L^vCJkGrmU|CXW3 zi)d*-!{6fJwmz*6f8bC2jPUL}yx~-f|NO6pHn#aa-f%???wp(Q+}|jl5D!t6O)D)Mwx4&bPbN663$$1it5E z>~l6Fsj+|dB|{`rKXW1f7Dxi8!5j(%WF*rbEac=ynI^~58;P3BHBmL!dtQ|Byn zrO|OmG8q*~p_VMM9k|jG(I`pH&72PfEmIWLN)tJ4DF;1giUOWVL0pumw451>K09Y) n>vT5?xfYXf0Qzo3#U^nynW|mOlJx~C=s`_7FF)yC*-dkv!vlYIrUClR(D^aeNPO7nrTo z0Z-ZEk>r-Tt$Fk6<~2Cp;XOX`;ZRjGbN5n8MATX{v$fWHA7jipkK<#GZ3EGgnSN)Bg<;BdR-&eY-^4*8MW@M zsUiZIm=kM31ZHqY@7R0v&>EK2Tb7>Q8liJyD%9bD=;&!^F1=_E>(zUf5w*Ln1nYW% zE9Fd6>zRo;n6))AQ+K1QH_VP>l(pQeSuqP$S1lse*+HaSOz26s7CwTM#v1$D*?!ql zLXYM zi}f}ffx~emcu~PfwmM~(0u5M&CrUd-s^gTc?HC8h6q^t}?qWvthZ|m%U={Nh+&rmSe#8_8Z_UPu&0j literal 0 HcmV?d00001 diff --git a/res/resets.raw b/res/resets.raw new file mode 100755 index 0000000000000000000000000000000000000000..d3185aeeef17ffad67cd3308d3217bec0a67be47 GIT binary patch literal 380 zcmaKmQ4Rng2txVg{ufS6(^<>5$|ou$F@i6IDZ54ZpjNU$)EUUqSm71BT##?;sYdne ktlZ_0<|ZbWMh+tEb2;M1& literal 0 HcmV?d00001 diff --git a/res/sizes.txt b/res/sizes.txt new file mode 100755 index 0000000..5c01f99 --- /dev/null +++ b/res/sizes.txt @@ -0,0 +1,39 @@ +noguib: 44x44 [Green (hi/lo): 36/235 Orange: 168/31 Neutral:12] + Rainbow (ROYGBP, hi/med/lo): 21,20,19; 168, 31,155; 68,67,66; + 36,35,34; 188,183,181; 81,85,80 +dipswb: 42x34 +pl1stb: 50x33 [Light green: 125] +pl2stb: 52x29 [Light green: 125] +i30hzb: 59x52 [Dk blue: 50, substitute: 49(dk) 188(lght)] +i60hzb: 59x52 +coinub: 45x40 +snapsb: 48x37 +resetb: 58x40 +byebyb: 42x50 +keycnb: 45x45 +noguis: 31x31 +dipsws: 29x23 +pl1sts: 32x19 [Light green: 125] +pl2sts: 35x19 [Light green: 125] +i30hzs: 37x21 [Dk blue: 50, substitute: 49(dk) 188(lght)] +i60hzs: 37x21 +coinus: 18x18 +snapss: 32x17 +resets: 19x20 +byebys: 19x23 +keycns: 28x16 +checks: 23x20 +dswitch: 26x65 [blue: 179-186] +dsbutton: 5x5 +dstext1: 48x7 +dstext2: 80x9 +dstext3: 96x7 +dstext4: 82x9 +dstext5: 60x7 +dstext6: 76x7 +dstext7: 57x7 +dstext8: 33x7 +dstext9: 50x9 +dstext10: 62x7 +dstext11: 65x9 +dstext12: 63x7 diff --git a/res/snapsb.pcx b/res/snapsb.pcx new file mode 100755 index 0000000000000000000000000000000000000000..adfec2cf499ca3293a04a246b904b7a57608b7cf GIT binary patch literal 1368 zcmbVMOK#ja6fCJFAQ|+6N8qBD2J(Sa)8>dHHs{gxPu`2|hy$kKwjU3~Jq(-Mo^x!+FZ~2;zxBX)>i_C)I2cZS z*LM%=>v?+JPvZ@r!w>W39Ch8_kKO)P+j!T#u->fh>wfH5{W=Ccw!Us66BZYTJkN2R${BE)e^;&5ayJuh4+XNwW2i`0}-eqXUy4W zZ-bW@G)0%ArbOsiQ7x=OJ$y!vf}|!po4w?qIlAIQR@)-j*Atv`Ync$%O02=EDH#!~ zDs<(9nz0nunraYnBHmiH))^z2N05}A7)D8l~(39^ZdpXjrs3I;7P7^ZY?W8 zmHo3XTdfVOAIQj8vZ4ZNg0q#dB<`@(ocLp~Y(mw*S>we9m1q&Ek3n;2>^EWYSQJYH z7s@k|{|d@(9IS@~XoO3vNTIBevpvP!cP~I#I9cxhW`_Ac`c4NVYL9)SM<3@PQDFGu8+tr$vo#h1}RW m)ist_E0QGv>aL73*_xVd6DblK_hk;Kb0n3PZFEb4&gmbwQKpLk literal 0 HcmV?d00001 diff --git a/res/snapsb.raw b/res/snapsb.raw new file mode 100755 index 0000000000000000000000000000000000000000..ff7575b22fae32a50d393a4bd02a6ee25608aa8d GIT binary patch literal 1776 zcmeH`OA^B%2!_$K|R~|y}5$mFhF3Q3|`1twFv;g0T7m4t(p;mHEHI5A& z;j2bU8w13P?Dfo(2Z6}T&GUkiu-j}p?#hIBUDiw~S`hC1qa$lYF;Mbd`IO;A`NTAR z08*;Fd zX&vZ`c^PhBfMLXM!?X3o|MTP3Tpq7)=(E}86My%NMdUjCMk*6|hz#t-{5Dd%Y|LTh z_w=Wku>4^bd{4#yQ>zpRKmrQTfKGS70|NFQ8Hhjyc7hgra8QWXe;w38tc`ZK(V<3H zqs<;s_Mm$t6C;qG+@yRn3Pj}*33!V2POpGHEV=!vYR>Y|a zk4i=>II8bmHHvtV;G8<=t(C%C&XT=Yo+OnVv<8+`d)@oa5lJ~&`}HPpSX$eAFG^Bn z{>;lY=OW`rRumemq5^88ca5|x+~a5^bM_pQP_^*R260g(IV9?1(LFlz%{T%M#gV{9 z1zK_(DZBM>0TQ7JJ`a&%9kS&e^+4;;P6dmyd#E)B&nE|5L!cNVB!%f+dQViPQ1Jk- zu4QBS{~ROp`n0>Em1pa1{> literal 0 HcmV?d00001 diff --git a/res/snapss.raw b/res/snapss.raw new file mode 100755 index 0000000000000000000000000000000000000000..6e0aef2d8365bab582f24989617552be8e021f21 GIT binary patch literal 544 zcmZWlOA>=13{4=|UCvUR>Af7UK(#A-78l-uYc&Z_v3mh2uP&i4xz3RUt-qDm z`d)AKO}F~mld?;>`b}3$L^7THqS{5TQQ1)cT)hsmbb+p)?*2m}4V{{P)cp(sg3O*SSyN;gKHubgbhM-j{A3OGHnGA1uijGR}BPD jEd-FS^hoKGGZCmMyWIh!`9VfI!d{R*m#O=yW}ET@^a~&V literal 0 HcmV?d00001 diff --git a/res/thunder.ico b/res/thunder.ico new file mode 100755 index 0000000000000000000000000000000000000000..d172beaceb73ad806d7fc0426b74805ff545789c GIT binary patch literal 766 zcmb`FF%H5o3`O0-KvkhKF-J@+oT04TDq|4~BN@0v#Q|~zR&K!910b1iXw}B4Dk0(Y zJ9%~;H&uud3}aR#_DqS^n75FD_E17|cp{73xLG8TvGzN`V@ck7%#z^GL(H;*FeD@{ zw(K0n{>;nA^*(IyE9dntsE^qUx2L=gIo(WiP#nXes*cX}zesWBE>&mpo@VL-r`zGP ziQ>$))^^a0`o6b(onnPL9i8V@GLNY#m?wq0W+0E-B#Igkm54zFa*$j)Xx8ctgU_fA literal 0 HcmV?d00001 diff --git a/res/thunder.rc b/res/thunder.rc new file mode 100755 index 0000000..f7a9217 --- /dev/null +++ b/res/thunder.rc @@ -0,0 +1,9 @@ +#include "winresrc.h" + +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON1 ICON DISCARDABLE "stargem2.ico" diff --git a/res/unknown.wav b/res/unknown.wav new file mode 100755 index 0000000000000000000000000000000000000000..5fa84e8df70fbe84a68a179dd4ca9d11616420ec GIT binary patch literal 17488 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

fs31d)c$d;167 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 literal 0 HcmV?d00001 diff --git a/src/gui.cpp b/src/gui.cpp new file mode 100755 index 0000000..640b70f --- /dev/null +++ b/src/gui.cpp @@ -0,0 +1,1062 @@ +// +// Thunder Graphic User Interface +// v1.0 (Last build: 8/1/1998) +// +// by Jimmy Hamm +// (C) 1998 Underground Software +// + +#include +#include // Needed for tracelog +#include "SDL.h" // Needed for screen.h +#include "screen.h" +#include "gui.h" +#include "resource.h" // Thunder graphics & sounds + +using namespace std; // Yes! + +// External shit + +extern SDL_Surface * screen; + +extern BYTE my_scr[0x14000]; // Screen buffer... +extern BYTE * gram1; // Game RAM (do here??) +extern BYTE hScrollOffset; // Horizontal scroll offset +extern BYTE vScrollOffset; // Vertical scroll offset +extern DWORD voffsets[8]; +extern BYTE * voice_rom; // PCM data pointer +extern fstream tr; // Tracelog + +// Global shit + +WORD text_life; // How long text is visible +bool show_text; // Whether or not to show text +WORD show_which_msg; // Which message to show +bool show_gui; // Whether or not to show GUI +WORD selection; // Which GUI item currently selected +WORD snd_num; +WORD gui_debounce; // GUI key debounce value +WORD num_coins; // Number of coins dropped +WORD blink = 0; // Used to blink player 1 & 2 start buttons +WORD flash = 23; // Used to flash GUI lights +WORD iline = 0; // Used to roll line +WORD dcurcol = 179; // dipswitch cursor color +int dcurdir = 1; // Initially going up... +bool blink_on = false; +bool game_refresh; // Refresh rate user set +bool do_decrement; // Flag to handle decrement... +bool user_selected_something; // Flag for well, you know... +WORD dswitch; // Which dipswitch is selected... + +// The following are global for the sound routines... + +const float sampleBase = 22050.0/6000.0; // Btwn 5512.5 and 6000 +bool snd_go = false; +bool chan1_go = false, chan2_go = false, chan3_go = false; +bool chan4_go = false, chan5_go = false, chan6_go = false; +BYTE * sndp1, * sndp2, * sndp3, * sndp4, * sndp5, * sndp6; +uint32 rom_pos, end_pos; +uint32 spos1, end_pos1; +uint32 spos2, end_pos2; +uint32 spos3, end_pos3; +uint32 spos4, end_pos4; +uint32 spos5, end_pos5; +uint32 spos6, end_pos6; +float sample1; +uint8 prevSamp1; +int8 delta_x1; +float sample2; +uint8 prevSamp2; +int8 delta_x2; + +BYTE * snd_array[3] = { sunknown, scya, scamera }; // From RESOURCE.H +DWORD snd_lens[3] = { sunknownlen, scyalen, scameralen }; + +// Bitmaps + +BYTE bmp1[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0, + 0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0, + 0,1,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0, + 0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0, + 0,0,1,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }; +BYTE bmp2[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0, + 0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0, + 0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0, + 0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0, + 0,1,1,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }; +BYTE bmp3[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0, + 0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,1,0, + 0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,1,0, + 0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,0,1,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 + }; +BYTE boptions[] = { // 35x9 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0, + 0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0, + 0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,0, + 0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0, + 0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }; +BYTE bn0[] = { + 0,0,0,0,0,0, + 0,0,1,1,0,0, + 0,1,0,0,1,0, + 0,1,0,0,1,0, + 0,1,0,0,1,0, + 0,0,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bn1[] = { + 0,0,0,0,0,0, + 0,0,1,0,0,0, + 0,1,1,0,0,0, + 0,0,1,0,0,0, + 0,0,1,0,0,0, + 0,1,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bn2[] = { + 0,0,0,0,0,0, + 0,1,1,1,0,0, + 0,0,0,0,1,0, + 0,0,1,1,0,0, + 0,1,0,0,0,0, + 0,1,1,1,1,0, + 0,0,0,0,0,0 + }; +BYTE bn3[] = { + 0,0,0,0,0,0, + 0,1,1,1,0,0, + 0,0,0,0,1,0, + 0,1,1,1,0,0, + 0,0,0,0,1,0, + 0,1,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bn4[] = { + 0,0,0,0,0,0, + 0,0,0,1,0,0, + 0,1,0,1,0,0, + 0,1,0,1,0,0, + 0,1,1,1,1,0, + 0,0,0,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bn5[] = { + 0,0,0,0,0,0, + 0,1,1,1,1,0, + 0,1,0,0,0,0, + 0,1,1,1,0,0, + 0,0,0,0,1,0, + 0,1,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bn6[] = { + 0,0,0,0,0,0, + 0,0,1,1,0,0, + 0,1,0,0,0,0, + 0,1,1,1,0,0, + 0,1,0,0,1,0, + 0,0,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bn7[] = { + 0,0,0,0,0,0, + 0,1,1,1,1,0, + 0,0,0,0,1,0, + 0,0,0,1,0,0, + 0,0,1,0,0,0, + 0,0,1,0,0,0, + 0,0,0,0,0,0 + }; +BYTE bn8[] = { + 0,0,0,0,0,0, + 0,0,1,1,0,0, + 0,1,0,0,1,0, + 0,0,1,1,0,0, + 0,1,0,0,1,0, + 0,0,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bn9[] = { + 0,0,0,0,0,0, + 0,0,1,1,0,0, + 0,1,0,0,1,0, + 0,0,1,1,1,0, + 0,0,0,0,1,0, + 0,0,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bnA[] = { + 0,0,0,0,0,0, + 0,0,1,1,0,0, + 0,1,0,0,1,0, + 0,1,1,1,1,0, + 0,1,0,0,1,0, + 0,1,0,0,1,0, + 0,0,0,0,0,0 + }; +BYTE bnB[] = { + 0,0,0,0,0,0, + 0,1,1,1,0,0, + 0,1,0,0,1,0, + 0,1,1,1,0,0, + 0,1,0,0,1,0, + 0,1,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bnC[] = { + 0,0,0,0,0,0, + 0,0,1,1,0,0, + 0,1,0,0,1,0, + 0,1,0,0,0,0, + 0,1,0,0,1,0, + 0,0,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bnD[] = { + 0,0,0,0,0,0, + 0,1,1,1,0,0, + 0,1,0,0,1,0, + 0,1,0,0,1,0, + 0,1,0,0,1,0, + 0,1,1,1,0,0, + 0,0,0,0,0,0 + }; +BYTE bnE[] = { + 0,0,0,0,0,0, + 0,1,1,1,1,0, + 0,1,0,0,0,0, + 0,1,1,1,1,0, + 0,1,0,0,0,0, + 0,1,1,1,1,0, + 0,0,0,0,0,0 + }; +BYTE bnF[] = { + 0,0,0,0,0,0, + 0,1,1,1,1,0, + 0,1,0,0,0,0, + 0,1,1,1,0,0, + 0,1,0,0,0,0, + 0,1,0,0,0,0, + 0,0,0,0,0,0 + }; + +// +// Initialize GUI +// +void InitGUI(void) +{ + num_coins = 0; + gui_debounce = 0; + user_selected_something = false; +} + +// +// Handle key debounce +// +void HandleGUIDebounce(void) +{ + if (gui_debounce) gui_debounce--; // Debounce GUI keys... + do_decrement = !do_decrement; // Called at 60Hz, so skip decrementing blink + if (do_decrement) + { + if (blink) blink--; // Handle blinking stuff (Should prb go in DrawGUI) + + flash-=2; // Handle flashing stuff (Should prb go in DrawGUI) + if (flash == 0xFFFF) flash = 23; + + iline++; + if (iline > 30) iline = 0; // 30 pixels high, going past by 1 + + dcurcol += dcurdir; + if (dcurcol == 186) dcurdir = -1; + if (dcurcol == 179) dcurdir = 1; + } +} + +// +// Set the refresh rate (30/60 Hz) +// +void SetRefreshRate(bool refresh) +{ + game_refresh = refresh; +} + +// +// Whether or not GUI is showing +// +bool ShowGUI(void) { return show_gui; } + +// +// Turn the GUI on +// +void ActivateGUI(void) { show_gui = true; } + +// +// Turn the GUI off +// +void DeactivateGUI(void) { show_gui = false; } + +// +// Draw the small icons... +// +void DrawSmallIcons(WORD icon_not_to_draw) +{ + BYTE * iconmem; + BYTE xl, yl; + BYTE * sIcons[12] = { inoguis, icoinus, ipl1sts, ipl2sts, ii30hzs, ii60hzs, + idipsws, ichecks, ikeycns, isnapss, iresets, ibyebys }; + BYTE xlens[12] = { 31, 18, 32, 35, 37, 37, 29, 23, 28, 32, 19, 19 }; + BYTE ylens[12] = { 31, 18, 19, 19, 21, 21, 23, 20, 16, 17, 20, 23 }; + BYTE xpos[11] = { 33, 48, 63, 78, 104, 0, 184, 210, 225, 240, 255 }; + BYTE iconidx[11] = { 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 6 }; + + if (game_refresh) iconidx[9] = 5; // 60 Hz... + + // Draw small icons 1 to 5 on left, then 11 to 7 on right. + + for(int i=0; i<5; i++) + { + WORD idx = i + icon_not_to_draw; // Get correct start pos. + if (idx > 10) idx -= 11; + + iconmem = sIcons[iconidx[idx]]; + xl = xlens[iconidx[idx]]; yl = ylens[iconidx[idx]]; + + DWORD scadr = hScrollOffset + voffsets[vScrollOffset]; + scadr += 320*((224-yl)/2); // Center vertically + scadr += xpos[i] - (xl/2); // Center around horiz. pos. + WORD bmpptr = 0; + + for(int yy=0; yy5; i--) + { + WORD idx = i + icon_not_to_draw; // Get correct start pos. + if (idx > 10) idx -= 11; + + iconmem = sIcons[iconidx[idx]]; + xl = xlens[iconidx[idx]]; yl = ylens[iconidx[idx]]; + + DWORD scadr = hScrollOffset + voffsets[vScrollOffset]; + scadr += 320*((224-yl)/2); // Center vertically + scadr += xpos[i] - (xl/2); // Center around horiz. pos. + WORD bmpptr = 0; + + for(int yy=0; yy7) scadr += 17*320; // Adjust for DSW #2 + bmpptr = 0; + if (gram1[0x423D+(i<<1)]) scadr += 12; // Adjust position if ON + for(int yy=0; yy<5; yy++) + { + for(int xx=0; xx<5; xx++) + { + my_scr[scadr++] = idsbutton[bmpptr++]; + } + scadr += 315; // Adjust position... + } + } + BYTE dselected_text = dseloff[dswitch]; + for(int i=0; i<13; i++) + { + if (dselected_text != i) + { + scadr = dbase + dtxtoff[i]; + if (i>5) scadr += (73*320); + bmpptr = 0; + for(int yy=0; yy5) scadr += (73*320); + bmpptr = 0; + for(int yy=0; yy7) scadr += 17*320; // Adjust for DSW #2 + for(int xx=0; xx<19; xx++) my_scr[scadr++] = dcurcol; + scadr += 301; + for(int xx=0; xx<5; xx++) + { + my_scr[scadr] = dcurcol; scadr += 18; + my_scr[scadr] = dcurcol; scadr += 302; + } + for(int xx=0; xx<19; xx++) my_scr[scadr++] = dcurcol; + } +} + +// +// The actual GUI display routine +// +void DrawGUI(void) +{ + if (!user_selected_something) // i.e. we're not inside a selection... + { + DrawSmallIcons(selection); // 'selection' is icon *not* to draw + DrawLargeIcon(selection); + } + else + { + if (selection == DIPSWITCH) DrawDipswitch(); + } +} + +// +// User pressed left arrow handler +// +void SelectLeft(void) +{ + if (!gui_debounce) + { + gui_debounce = 6; + if (!user_selected_something) + { + selection++; + if (selection > 10) selection = 0; + } + else + { + if (gram1[0x423D+(dswitch<<1)]) // It's switchable... + {} //SpawnSound(USERSOUND, SCLICK); + else + {} //SpawnSound(USERSOUND, SUNGH); + gram1[0x423D+(dswitch<<1)] = 0; // & turn it off + } + } +} + +// +// User pressed right arrow handler +// +void SelectRight(void) +{ + if (!gui_debounce) + { + gui_debounce = 6; + if (!user_selected_something) + { + selection--; + if (selection > 10) selection = 10; // Unsigned compare + } + else + { + if (!gram1[0x423D+(dswitch<<1)]) // It's switchable... + {} //SpawnSound(USERSOUND, SCLICK); + else + {} //SpawnSound(USERSOUND, SUNGH); + gram1[0x423D+(dswitch<<1)] = 1; // & turn it on + } + } +} + +// +// User pressed Up arrow handler +// +void SelectUp(void) +{ + if (!gui_debounce) + { + gui_debounce = 6; + if (user_selected_something) + { + if (selection == DIPSWITCH) + { + dswitch--; + if (dswitch > 16) dswitch = 16; // Wrap non-int + //snd_num = dswitch; SpawnMsg(MSHOWNUMS); // Temp... + } + } + } +} + +// +// User pressed down arrow handler +// +void SelectDown(void) +{ + if (!gui_debounce) + { + gui_debounce = 6; + if (user_selected_something) + { + if (selection == DIPSWITCH) + { + dswitch++; + if (dswitch > 16) dswitch = 0; + //snd_num = dswitch; SpawnMsg(MSHOWNUMS); // Temp... + } + } + } +} + +// +// User selected something! Handle it! +// +BYTE UserSelectedSomething(void) +{ + //extern BYTE * gram1; + + if (!gui_debounce) + { + gui_debounce = 6; + if (!user_selected_something) // Inside a selection? no... + { + if (selection == NOGUI) // Turn off GUI + { + show_gui = false; + } + if (selection == COINUP) // Coin up machine + { + gram1[0x41A5]++; // Add one coin... (prob. need sep. counter) + num_coins++; + gram1[0x4189] = num_coins/10; // Should be in THUNDER.CPP? + gram1[0x418A] = num_coins - (gram1[0x4189]*10); + } + if (selection == PL1START) // 1 Player start + { + if (num_coins) + { + num_coins--; + show_gui = false; // Shut off GUI only if coined up + } + gram1[0x418C] = 1; // Strobe start location + } + if (selection == PL2START) // 2 Player start + { + if (num_coins > 1) + { + num_coins -= 2; + show_gui = false; + } + } + if (selection == REFRESH) // Toggle refresh rate + { + //SpawnSound(USERSOUND, SCLICK); + } + if (selection == DIPSWITCH) // Edit game settings + { + //SpawnSound(USERSOUND, SBLAH); + user_selected_something = true; + dswitch = 0; // Set at first dipswitch + } + if (selection == OPTIONS) // Edit emulator settings + { + } + if (selection == KEYCONFIG) // Edit game keys + { + } + if (selection == SNAPSHOT) // Snapshot + { + SpawnSound(USERSOUND, SCAMERA); + SnapPCX(screen); + } + if (selection == RESET) // Reset machine + { + //SpawnSound(USERSOUND, SRESET); + } + if (selection == EXIT) + { + SpawnSound(USERSOUND, SCYA); + } + return selection; + } + else // Selected something inside selection... + { + if (selection == DIPSWITCH) + { + if (dswitch == 16) // Selected 'back to GUI' + { + //SpawnSound(USERSOUND, SBLAH2); + user_selected_something = false; + } + else + { + //SpawnSound(USERSOUND, SCLICK); + gram1[0x423D + (dswitch<<1)] = !gram1[0x423D + (dswitch<<1)]; + } + } + return 0xFF; // Nothing for main to do... + } + } + else return 0xFF; // Wasn't debounced, so return invalid +} + +// +// Show byte passed to it +// +void ShowNumbers(int number) +{ + BYTE * bnarray[16] = { bn0, bn1, bn2, bn3, bn4, bn5, bn6, bn7, bn8, bn9, + bnA, bnB, bnC, bnD, bnE, bnF }; + DWORD scadr = hScrollOffset + voffsets[vScrollOffset] + 642 + 2560; + WORD bmpptr = 0; + + BYTE first_dig = number>>4, second_dig = number&0x0F; + for(int y=0; y<7; y++) + { + for(int x=0; x<6; x++) + { + if (bnarray[first_dig][bmpptr++] == 1) my_scr[scadr+x+y*320] = 7; + else my_scr[scadr+x+y*320] = 0; + } + } + bmpptr = 0; scadr += 6; + for(int y=0; y<7; y++) + { + for(int x=0; x<6; x++) + { + if (bnarray[second_dig][bmpptr++] == 1) my_scr[scadr+x+y*320] = 7; + else my_scr[scadr+x+y*320] = 0; + } + } +} + +// +// Spawn a message +// +void SpawnMsg(BYTE msg) +{ + text_life = 60; // 1 second... + show_text = true; // Show the damn thing... + show_which_msg = msg; // And tell it which message to show... +} + +// +// Draw text message +// +void DrawText(void) +{ + if (!text_life) // Kill text if it's time + { + show_text = false; + return; + } + + text_life--; // Your life force is running out... + + // Draw the message here... + DWORD scadr = hScrollOffset + voffsets[vScrollOffset] + 642; + WORD bmpptr = 0; + + for(int y=0; y<7; y++) + { + for(int x=0; x<21; x++) + { + if (show_which_msg == M60FPS) + { + if (bmp1[bmpptr++] == 1) + my_scr[scadr + x + y * 320] = 7; + else + my_scr[scadr + x + y * 320] = 0; + } + else if (show_which_msg == M30FPS) + { + if (bmp2[bmpptr++] == 1) + my_scr[scadr + x + y * 320] = 7; + else + my_scr[scadr + x + y * 320] = 0; + } + else if (show_which_msg == MSNAPSHOT) + { + if (bmp3[bmpptr++] == 1) + my_scr[scadr + x + y * 320] = 7; + else + my_scr[scadr + x + y * 320] = 0; + } + } + } + + if (show_which_msg == MSHOWNUMS) + ShowNumbers(snd_num); +} + +// +// Sound stuff (Will go elsewhere??? Perhaps in sound.cpp?) +// +void SpawnSound(int type, int snd, int channel/* = 0*/) +{ + extern DWORD psg_lens[16]; + extern BYTE * psg_adrs[16]; + extern DWORD voc_lens[32]; + extern BYTE * voc_adrs[32]; + extern DWORD fm_lens[14]; + extern BYTE * fm_adrs[14]; + + snd_num = snd; + SpawnMsg(MSHOWNUMS); + + if (type == GAMESOUND) + { + snd--; // Will that do it??? Yes!!! + + if (channel == 0) + { + // 00 nn ss (nn # of repeats of sample ss) + DWORD st = 0; + + if (snd & 0x40) + { + st = 0x10000; + snd &= 0x0F; + } + + spos1 = (voice_rom[st + (snd << 1)] << 8) | voice_rom[st + (snd << 1) + 1]; + spos1 += st; // Need to add start somewhere... + prevSamp1 = 128; + sample1 = 0; + chan1_go = true; + } + else + { + DWORD st = 0; + + if (snd & 0x40) + { + st = 0x10000; + snd &= 0x0F; + } + + spos2 = (voice_rom[st + (snd << 1)] << 8) | voice_rom[st + (snd << 1) + 1]; + spos2 += st; // Need to add start somewhere... + prevSamp2 = 128; + sample2 = 0; + chan2_go = true; + } + } + else if (type == PSGSOUND) + { + if (snd_num & 0x10) // Second channel? + { + spos3 = 0; + end_pos3 = psg_lens[snd_num & 0x0F]; + sndp3 = psg_adrs[snd_num & 0x0F]; + chan3_go = true; + + if (spos3 == end_pos3) + chan3_go = false; // No sound loaded, so don't do it! + } + else // First channel + { + spos4 = 0; + end_pos4 = psg_lens[snd_num & 0x0F]; + sndp4 = psg_adrs[snd_num & 0x0F]; + chan4_go = true; + + if (spos4 == end_pos4) + chan4_go = false; // No sound loaded, so don't do it! + } + } + else if (type == FMSOUND) + { + spos5 = 0; + end_pos5 = fm_lens[snd_num]; + sndp5 = fm_adrs[snd_num]; + chan5_go = true; + + if (spos5 == end_pos5) + chan5_go = false; // No sound loaded, so don't do it! + } + else if (type == USERSOUND) + { + spos6 = 0; + end_pos6 = snd_lens[snd_num]; // User sound + sndp6 = snd_array[snd_num]; // Load pointer + chan6_go = true; + } +} + +// +// Sound card IRQ handler +// +void SoundFunc(void * userdata, Uint8 * buff, int num) +{ + uint16 cnt = 0, sample; // 0-22 different sounds... + uint8 start_samp1, end_samp1, start_samp2, end_samp2; + uint8 samp1 = 128, samp2 = 128, samp3 = 128, + samp4 = 128, samp5 = 128, samp6 = 128; // Zero samples... + + memset(buff, 128, num); // Kill sound... + + if (chan1_go || chan2_go || chan3_go || chan4_go || chan5_go || chan6_go) + { + while (cnt != num) + { + if (chan1_go) + { + if (sample1 < 1) + { + samp1 = voice_rom[spos1++]; + + if (samp1 == 0xFF) + { + chan1_go = false; + samp1 = 128; // Kill channel 1 if done... + } + else if (samp1 == 0x00) // RLE compression... + { + sample1 += (float)voice_rom[spos1++] * sampleBase; // # of repeats + samp1 = prevSamp1; // Get last good sample + } + else + sample1 += sampleBase; // Keep fractional part intact + } + + prevSamp1 = samp1; // Save last sample value + sample1 -= 1.0; // Decrement repeat counter + } + +// Stretching 5KHz samples to 22KHz: +// numRepeats = 4; +// 6KHz -> 22KHz: 22/6 repeats... + if (chan2_go) + { + if (sample2 < 1) + { + samp2 = voice_rom[spos2++]; + + if (samp2 == 0xFF) + { + chan2_go = false; + samp2 = 128; // Kill channel 2 if done... + } + else if (samp2 == 0x00) // RLE compression... + { + sample2 += (float)voice_rom[spos2++] * sampleBase; // # of repeats + samp2 = prevSamp2; + } + else + sample2 += sampleBase; + } + +// Delta-X values were making the samples sound like crap... +// start_samp2 += delta_x2; + prevSamp2 = samp2; + sample2 -= 1.0; + } + + if (chan3_go) + { + samp3 = sndp3[spos3++]; + if (spos3 == end_pos3) + { + chan3_go = false; samp3 = 128; // Kill channel 3 if done... + } + } + + if (chan4_go) + { + samp4 = sndp4[spos4++]; + if (spos4 == end_pos4) + { + chan4_go = false; samp4 = 128; // Kill channel 4 if done... + } + } + + if (chan5_go) + { + samp5 = sndp5[spos5++]; + if (spos5 == end_pos5) + { + chan5_go = false; samp5 = 128; // Kill channel 5 if done... + } + } + + if (chan6_go) + { + samp6 = sndp6[spos6++]; + + if (spos6 == end_pos6) + chan6_go = false, samp6 = 128; // Kill channel 6... + } + + sample = samp1 + samp2 + samp3 + samp4 + samp5 + samp6 - 640; // Mix 'em... + + if (sample & 0xFF00) // i.e., it overflowed + sample = (sample&0x8000 ? 0x00 : 0xFF); // Clip it + + buff[cnt++] = sample; // & store it... + } + } +} diff --git a/src/gui.h b/src/gui.h new file mode 100755 index 0000000..317dce5 --- /dev/null +++ b/src/gui.h @@ -0,0 +1,67 @@ +// +// GUI.H +// +// by Jimmy Hamm +// (C) 1998 Underground Software +// +/*#define BYTE unsigned char +#define WORD unsigned short int +#define DWORD unsigned long int +#define int8 char +#define int16 short +#define int32 int +#define uint8 unsigned int8 +#define uint16 unsigned int16 +#define uint32 unsigned int32*/ +#include "types.h" + +// Message macros + +#define M60FPS 0 +#define M30FPS 1 +#define MSNAPSHOT 2 +#define MSHOWNUMS 3 + +// Sound routine macros + +#define GAMESOUND 0 +#define USERSOUND 1 +#define PSGSOUND 2 +#define VOCSOUND 3 +#define FMSOUND 4 + +#define SUNKNOWN 0 +#define SCYA 1 +#define SCAMERA 2 + +// UserSelectedSomething icon value macros + +#define NOGUI 0 +#define COINUP 1 +#define PL1START 2 +#define PL2START 3 +#define REFRESH 4 +#define DIPSWITCH 5 +#define OPTIONS 6 +#define KEYCONFIG 7 +#define SNAPSHOT 8 +#define RESET 9 +#define EXIT 10 + +void SpawnMsg(BYTE); +void DrawText(void); +void InitGUI(void); +bool ShowGUI(void); +void DrawGUI(void); +void SelectLeft(void); +void SelectRight(void); +void SelectUp(void); +void SelectDown(void); +BYTE UserSelectedSomething(void); +void SetRefreshRate(bool); +void ActivateGUI(void); +void DeactivateGUI(void); +void HandleGUIDebounce(void); +void SpawnSound(int, int, int channel = 0); +//void SoundFunc(uint8 *, uint16); +void SoundFunc(void *, Uint8 *, int); diff --git a/src/log.cpp b/src/log.cpp new file mode 100755 index 0000000..236d563 --- /dev/null +++ b/src/log.cpp @@ -0,0 +1,54 @@ +// +// Log handler +// +// by James L. Hammons +// + +#include "types.h" +#include "log.h" + +#define MAX_LOG_SIZE 10000000 // Maximum size of log file (10 MB) + +static FILE * log_stream = NULL; +static uint32 logSize = 0; + +bool InitLog(char * path) +{ + log_stream = fopen(path, "wrt"); + + if (log_stream == NULL) + return false; + + return true; +} + +void LogDone(void) +{ + if (log_stream) + fclose(log_stream); +} + +// +// This logger is used mainly to ensure that text gets written to the log file +// even if the program crashes. The performance hit is acceptable in this case! +// +void WriteLog(const char * text, ...) +{ + if (!log_stream) + return; + + va_list arg; + + va_start(arg, text); + logSize += vfprintf(log_stream, text, arg); + + if (logSize > MAX_LOG_SIZE) + { + fflush(log_stream); + fclose(log_stream); + exit(1); + }//*/ + + va_end(arg); + fflush(log_stream); // Make sure that text is written! +} diff --git a/src/log.h b/src/log.h new file mode 100755 index 0000000..4b39b36 --- /dev/null +++ b/src/log.h @@ -0,0 +1,24 @@ +// +// LOG.H +// + +#ifndef __LOG_H__ +#define __LOG_H__ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +bool InitLog(char *); +void LogDone(void); +void WriteLog(const char * text, ...); + +#ifdef __cplusplus +} +#endif + +#endif // __LOG_H__ diff --git a/src/resource.asm b/src/resource.asm new file mode 100755 index 0000000..43a5432 --- /dev/null +++ b/src/resource.asm @@ -0,0 +1,185 @@ +; +; Thunder GUI resources +; +; by Jimmy Hamm +; (C) 1998 Underground Software +; +[SECTION .data] +[GLOBAL _sunknown] +[GLOBAL _scya] +[GLOBAL _scamera] +[GLOBAL _sunknownlen] +[GLOBAL _scyalen] +[GLOBAL _scameralen] + +[GLOBAL _inoguib] +[GLOBAL _idipswb] +[GLOBAL _ipl1stb] +[GLOBAL _ipl2stb] +[GLOBAL _ii30hzb] +[GLOBAL _ii60hzb] +[GLOBAL _icoinub] +[GLOBAL _isnapsb] +[GLOBAL _iresetb] +[GLOBAL _ibyebyb] +[GLOBAL _ikeycnb] + +[GLOBAL _inoguis] +[GLOBAL _idipsws] +[GLOBAL _ipl1sts] +[GLOBAL _ipl2sts] +[GLOBAL _ii30hzs] +[GLOBAL _ii60hzs] +[GLOBAL _icoinus] +[GLOBAL _isnapss] +[GLOBAL _iresets] +[GLOBAL _ibyebys] +[GLOBAL _ikeycns] +[GLOBAL _ichecks] + +[GLOBAL _idswitch] +[GLOBAL _idsbutton] +[GLOBAL _idstext1] +[GLOBAL _idstext2] +[GLOBAL _idstext3] +[GLOBAL _idstext4] +[GLOBAL _idstext5] +[GLOBAL _idstext6] +[GLOBAL _idstext7] +[GLOBAL _idstext8] +[GLOBAL _idstext9] +[GLOBAL _idstext10] +[GLOBAL _idstext11] +[GLOBAL _idstext12] + +; Sounds + +_sunknown DD _sunknownlen+4 +_scya DD _scyalen+4 +_scamera DD _scameralen+4 + +_sunknownlen + incbin "unknown.wav", 54 ; Skip header, keep length +_scyalen + incbin "cya.wav", 54 ; Skip header, keep length +_scameralen + incbin "camera.wav", 54 ; Skip header, keep length + +; Graphics + +_inoguib DD fnoguib +_idipswb DD fdipswb +_ipl1stb DD fpl1stb +_ipl2stb DD fpl2stb +_ii30hzb DD fi30hzb +_ii60hzb DD fi60hzb +_icoinub DD fcoinub +_isnapsb DD fsnapsb +_iresetb DD fresetb +_ibyebyb DD fbyebyb +_ikeycnb DD fkeycnb + +_inoguis DD fnoguis +_idipsws DD fdipsws +_ipl1sts DD fpl1sts +_ipl2sts DD fpl2sts +_ii30hzs DD fi30hzs +_ii60hzs DD fi60hzs +_icoinus DD fcoinus +_isnapss DD fsnapss +_iresets DD fresets +_ibyebys DD fbyebys +_ikeycns DD fkeycns +_ichecks DD fchecks + +_idswitch DD fdswitch +_idsbutton DD fdsbutton +_idstext1 DD fdstext1 +_idstext2 DD fdstext2 +_idstext3 DD fdstext3 +_idstext4 DD fdstext4 +_idstext5 DD fdstext5 +_idstext6 DD fdstext6 +_idstext7 DD fdstext7 +_idstext8 DD fdstext8 +_idstext9 DD fdstext9 +_idstext10 DD fdstext10 +_idstext11 DD fdstext11 +_idstext12 DD fdstext12 + +fnoguib + incbin "noguib.raw" ; 44x44 +fdipswb + incbin "dipswb.raw" ; 42x34 +fpl1stb + incbin "pl1stb.raw" ; 50x33 +fpl2stb + incbin "pl2stb.raw" ; 52x29 [Light green: 125] +fi30hzb + incbin "i30hzb.raw" ; 58x40 +fi60hzb + incbin "i60hzb.raw" ; 58x40 +fcoinub + incbin "coinub.raw" ; 58x40 +fsnapsb + incbin "snapsb.raw" ; 58x40 +fresetb + incbin "resetb.raw" ; 58x40 +fbyebyb + incbin "byebyb.raw" ; 58x40 +fkeycnb + incbin "keycnb.raw" ; 58x40 + +fnoguis + incbin "noguis.raw" ; 44x44 +fdipsws + incbin "dipsws.raw" ; 42x34 +fpl1sts + incbin "pl1sts.raw" ; 50x33 +fpl2sts + incbin "pl2sts.raw" ; 52x29 [Light green: 125] +fi30hzs + incbin "i30hzs.raw" ; 58x40 +fi60hzs + incbin "i60hzs.raw" ; 58x40 +fcoinus + incbin "coinus.raw" ; 58x40 +fsnapss + incbin "snapss.raw" ; 58x40 +fresets + incbin "resets.raw" ; 58x40 +fbyebys + incbin "byebys.raw" ; 58x40 +fkeycns + incbin "keycns.raw" ; 58x40 +fchecks + incbin "checks.raw" ; 58x40 + +fdswitch + incbin "dswitch.raw" ; 26x65 +fdsbutton + incbin "dsbutton.raw" ; 4x4 +fdstext1 + incbin "dstext1.raw" ; 48x7 +fdstext2 + incbin "dstext2.raw" ; 80x9 +fdstext3 + incbin "dstext3.raw" ; 96x7 +fdstext4 + incbin "dstext4.raw" ; 82x9 +fdstext5 + incbin "dstext5.raw" ; 60x7 +fdstext6 + incbin "dstext6.raw" ; 76x7 +fdstext7 + incbin "dstext7.raw" ; 57x7 +fdstext8 + incbin "dstext8.raw" ; 33x7 +fdstext9 + incbin "dstext9.raw" ; 50x9 +fdstext10 + incbin "dstext10.raw" ; 62x7 +fdstext11 + incbin "dstext11.raw" ; 65x9 +fdstext12 + incbin "dstext12.raw" ; 63x7 diff --git a/src/resource.h b/src/resource.h new file mode 100755 index 0000000..a2bd106 --- /dev/null +++ b/src/resource.h @@ -0,0 +1,61 @@ +// +// Resource header file +// +// by Jimmy Hamm +// (C) 1998 Underground Software +// + +#ifdef __cplusplus +extern "C" { +#endif + +extern BYTE * sunknown; +extern BYTE * scya; +extern BYTE * scamera; +extern DWORD sunknownlen; +extern DWORD scyalen; +extern DWORD scameralen; + +extern BYTE * inoguib; +extern BYTE * idipswb; +extern BYTE * ipl1stb; +extern BYTE * ipl2stb; +extern BYTE * ii30hzb; +extern BYTE * ii60hzb; +extern BYTE * icoinub; +extern BYTE * isnapsb; +extern BYTE * iresetb; +extern BYTE * ibyebyb; +extern BYTE * ikeycnb; + +extern BYTE * inoguis; +extern BYTE * idipsws; +extern BYTE * ipl1sts; +extern BYTE * ipl2sts; +extern BYTE * ii30hzs; +extern BYTE * ii60hzs; +extern BYTE * icoinus; +extern BYTE * isnapss; +extern BYTE * iresets; +extern BYTE * ibyebys; +extern BYTE * ikeycns; +extern BYTE * ichecks; + +extern BYTE * idswitch; +extern BYTE * idsbutton; +extern BYTE * idstext1; +extern BYTE * idstext2; +extern BYTE * idstext3; +extern BYTE * idstext4; +extern BYTE * idstext5; +extern BYTE * idstext6; +extern BYTE * idstext7; +extern BYTE * idstext8; +extern BYTE * idstext9; +extern BYTE * idstext10; +extern BYTE * idstext11; +extern BYTE * idstext12; + +#ifdef __cplusplus +} +#endif diff --git a/src/screen.cpp b/src/screen.cpp new file mode 100755 index 0000000..bfd0f89 --- /dev/null +++ b/src/screen.cpp @@ -0,0 +1,625 @@ +// +// Screen Handler +// +// This sets screen to VESA 320x240 LFB so we can use the WHOLE laptop screen +// Now with VESA2 support! +// Also, support routines for video hardware emulation are included +// +// by James L. Hammons +// +// (C) 2003 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------ +// JLH 03/12/2003 Ported this crud to Simple Directmedia Layer +// + +#include +#include +#include // For memset() +#include "SDL.h" +#include "gui.h" +#include "screen.h" + +// Private function prototypes + +void DrawSprites(BYTE priority); +int FindPCXName(void); + +// Private global variables + +BYTE my_scr[0x14000]; // Screen buffer... +BYTE palette[768]; // Screen palette +BYTE ccolor[256][8]; // Character colors +BYTE scolor[128][16]; // Sprite colors +bool charbase; // Character base pointer... +BYTE hScrollOffset; // Horizontal scroll offset +BYTE vScrollOffset; // Vertical scroll offset +BYTE spr_color_index; // Sprite color index +DWORD offsets[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; // Scroll offsets... +DWORD voffsets[8] = { 0, 320, 640, 960, 1280, 1600, 1920, 2240 }; + +extern bool show_text; // Whether or not to show text +extern bool show_scr; // Whether or not to show screen + +// +// Render the NAMCO screen +// +void BlitChar(SDL_Surface * scr, BYTE * chr, BYTE * ram) +{ + if (show_scr) + { + int sx, sy; + DWORD sc_base = ((ram[0x9000] << 8) | ram[0x9001]) + 4; // Adjust hscroll val + hScrollOffset = sc_base & 0x07; // Horiz. scroll offset + sc_base = (sc_base & 0xFFF8) >> 2; // Skip odds.. + BYTE vsc_base = ((ram[0x9002] + 1) & 0xF8) >> 3;// Vertical scroll addr adjust + vScrollOffset = ((ram[0x9002] + 1) & 0x07); // Vertical fine scroll amount + DWORD scp1 = 0x0180 | ((sc_base + 0x04) & 0x7F); /*0x0188;*/ + DWORD scp2 = 0x1180 | ((sc_base + 0x04) & 0x7F); /*0x1188;*/ + DWORD scp3 = 0x2180 | ((sc_base + 0x04) & 0x7F); /*0x2188;*/ + DWORD scp = 0x3208; + scp1 += vsc_base * 0x80; + scp1 &= 0x0FFF; // Set vertical scroll addr + scp2 += vsc_base * 0x80; + scp2 = 0x1000 | (scp2 & 0x0FFF); // Set vertical scroll addr + scp3 += vsc_base * 0x80; + scp3 = 0x2000 | (scp3 & 0x0FFF); // Set vertical scroll addr + + DWORD chBaseOffset = (charbase ? 0x20000 : 0x00000); + + for(sy=0; sy<29; sy++) + { + for(sx=0; sx<37; sx++) + { + BYTE scp_lo = (scp1 + (sx << 1)) & 0x7F;// Let LO byte wrap only... + WORD sp2 = (scp1 & 0xFF80) | scp_lo; + BYTE tile = ram[sp2++]; + BYTE index = ram[sp2] & 0x03; + BYTE color = ram[sp2]; + DWORD chind = chBaseOffset + (((index << 8) + tile) * 64); + DWORD sc_addr = (sx * 8) + (sy * 2560); // Start addr in my_scr[] + + for(int y=0; y<8; y++) + { + for(int x=0; x<8; x++) + my_scr[sc_addr++] = ccolor[color][chr[chind++]]; + + sc_addr += 312; // Do next line... + } + } + + scp1 += 0x80; + scp1 = 0x0000 | (scp1 & 0x0FFF); + } + + DrawSprites(0x40); // Draw sprites at lowest layer... + + chBaseOffset = (charbase ? 0x30000 : 0x10000); + + for(sy=0; sy<29; sy++) + { + for(sx=0; sx<37; sx++) + { + BYTE scp_lo = (scp2 + (sx << 1)) & 0x7F; // Let LO byte wrap only... + WORD sp2 = (scp2 & 0xFF80) | scp_lo; + BYTE tile = ram[sp2++]; + BYTE index = ram[sp2] & 0x03; + BYTE color = ram[sp2]; + DWORD chind = chBaseOffset + (((index << 8) + tile) * 64); + DWORD sc_addr = (sx * 8) + (sy * 2560); // Start addr in my_scr[] + + for(int y=0; y<8; y++) + { + for(int x=0; x<8; x++) + { + if (chr[chind] != 7) + my_scr[sc_addr] = ccolor[color][chr[chind]]; + + sc_addr++; + chind++; + } + + sc_addr += 312; // Do next line... + } + } + + scp2 += 0x80; + scp2 = 0x1000 | (scp2 & 0x0FFF); + } + + DrawSprites(0x80); // Draw sprites under layer #2... + + for(sy=0; sy<29; sy++) + { + for(sx=0; sx<37; sx++) + { + BYTE scp_lo = (scp3 + (sx << 1)) & 0x7F; // Let LO byte wrap only... + WORD sp2 = (scp3 & 0xFF80) | scp_lo; + BYTE tile = ram[sp2++]; + BYTE index = ram[sp2] & 0x03; + BYTE color = ram[sp2]; + DWORD chind = 0x40000 + (((index << 8) + tile) * 64); + DWORD sc_addr = (sx * 8) + (sy * 2560); // Start addr in my_scr[] + + for(int y=0; y<8; y++) + { + for(int x=0; x<8; x++) + { + if (chr[chind] != 7) + my_scr[sc_addr] = ccolor[color][chr[chind]]; + + sc_addr++; + chind++; + } + + sc_addr += 312; // Do next line... + } + } + + scp3 += 0x80; scp3 = 0x2000|(scp3&0x0FFF); + } + + DrawSprites(0xC0); // Draw highest priority sprites... + + for(sy=0; sy<28; sy++) + { + for(sx=0; sx<36; sx++) + { + WORD sp2 = scp + (sx << 1); + BYTE tile = ram[sp2++]; + BYTE index = ram[sp2] & 0x03; + BYTE color = ram[sp2]; + DWORD chind = 0x50000 + (((index << 8) + tile) * 64); + DWORD sc_addr = (sx * 8) + (sy * 2560) + hScrollOffset + voffsets[vScrollOffset]; // Start addr in my_scr[] + + for(int y=0; y<8; y++) + { + for(int x=0; x<8; x++) + { + if (chr[chind] != 7) + my_scr[sc_addr] = ccolor[color][chr[chind]]; + + sc_addr++; + chind++; + } + + sc_addr += 312; // Do next line of char... + } + } + + scp += 0x80; + } + } + + if (show_text) + DrawText(); // Draw a msg if needed... + + if (ShowGUI()) + DrawGUI(); // Show GUI if active... + + if (SDL_LockSurface(scr) < 0) + { +// fprintf(stderr, "Couldn't lock the display surface: %s\n", SDL_GetError()); +// exit(2); + } + + // Screen size is 288 x 224 + + // Fast blit +/* for(int i=0; i<224; i++) + { + memcpy((char *)scr->pixels + scr->pitch * i, + my_scr + (DWORD)(offsets[hScrollOffset]+voffsets[vScrollOffset]) + i * 320, 320); + }//*/ + + // Doubled pixel blit (should be faster now!) + BYTE * pMem = (BYTE *)scr->pixels + ((scr->pitch * 8 + 16) * 2); + DWORD src = (DWORD)(offsets[hScrollOffset] + voffsets[vScrollOffset]), + dst1 = 0, dst2 = scr->pitch; + DWORD srcAdd = 320 - 288, dstAdd = (scr->pitch * 2) - (288 * 2); + + for(int i=0; i<224; i++) + { + for (int j=0; j<288; j++) + { + pMem[dst1] = pMem[dst1 + 1] = pMem[dst2] = pMem[dst2 + 1] = my_scr[src++]; + dst1 += 2; + dst2 += 2; + } + + src += srcAdd; + dst1 += dstAdd; + dst2 += dstAdd; + }//*/ + + // Scanlined pixel blit +/* BYTE * pMem = (BYTE *)scr->pixels + ((scr->pitch * 8 + 16) * 2); + DWORD src = (DWORD)(offsets[hScrollOffset] + voffsets[vScrollOffset]), + dst1 = 0, dst2 = scr->pitch; + DWORD srcAdd = 320 - 288, dstAdd = (scr->pitch * 2) - (288 * 2); + + for(int i=0; i<224; i++) + { + for (int j=0; j<288; j++) + { + pMem[dst1] = pMem[dst1 + 1] = pMem[dst2] = my_scr[src++]; + dst1 += 2; + dst2 += 2; + } + + src += srcAdd; + dst1 += dstAdd; + dst2 += dstAdd; + }//*/ + + SDL_UnlockSurface(scr); + SDL_UpdateRect(scr, 0, 0, 0, 0); +} + +// +// Draw sprites at priority level (new code) +// +void DrawSprites(BYTE priority) +{ + extern BYTE * gram1; // Game RAM space + + for(WORD i=0x5800; i<0x6000; i+=0x10) + { + if ((gram1[i + 8] & 0xC0) == priority) // Check for correct layer... + { + spr_color_index = gram1[i + 6] >> 1; // Set color... + WORD x = ((gram1[i + 6] & 0x01) << 8) | gram1[i + 7]; + + if (x > 512 - 32) + x -= 512; // Handle neg x values + + WORD y = 192 - gram1[i + 9]; + WORD hdr = (gram1[i + 4] & 0x90) << 8 | (gram1[i + 8] & 0x14); + BYTE flip = gram1[i + 4] & 0x20; // Horizontal flip + DWORD spr_num = ((gram1[i + 4] & 0x07) << 9) | ((gram1[i + 5] & 0x7F) << 2); + + Sprite(spr_num, x, y, flip, hdr); // Draw sprite... + } + } +} + +// +// Sprite handler +// +void Sprite(DWORD sprnum, WORD x, WORD y, BYTE flip, WORD spr_id) +{ + extern BYTE * spr_rom; + // To show or not to show a 16x16 block in the 4x4 grid... + bool horiz_bl = false, vert_bl = false; + DWORD sc_addr; + + x += hScrollOffset; // Adjust x-coord + y += vScrollOffset; // Adjust y-coord + + if (spr_id == 0x8004) + { + horiz_bl = true; vert_bl = true; + } + if (spr_id == 0x8000) + { + horiz_bl = true; y += 16; + } + if (spr_id == 0x8010) + { + horiz_bl = true; y += 16; sprnum += 2; + } + if (spr_id == 0x0004) + { + vert_bl = true; + } + if (spr_id == 0x1004) + { + vert_bl = true; sprnum++; + } + if (spr_id == 0x0000) + { + y += 16; + } + if (spr_id == 0x1000) + { + y += 16; sprnum++; + } + if (spr_id == 0x0010) + { + y += 16; sprnum += 2; + } + if (spr_id == 0x1010) + { + y += 16; sprnum += 3; + } + + sprnum <<= 7; // 128 bytes per sprite + + if (!flip) + { + for(WORD sy=0; sy<16; sy++) + { + for(WORD sx=0; sx<16; sx+=2) + { + BYTE b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; + WORD spy = y + sy, spx = x + sx; // Need to optimize this clipping! + + if (spy > 223 || spx > 299) + sc_addr = 0x13FFE; + else + sc_addr = spx + spy * 320; + + if (b1 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it + + sc_addr++; + + if (b2 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it + } + } + + if (horiz_bl) + { + for(WORD sy=0; sy<16; sy++) + { + for(WORD sx=16; sx<32; sx+=2) + { + BYTE b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; + WORD spy = y + sy, spx = x + sx; + + if (spy > 223 || spx > 299) + sc_addr = 0x13FFE; + else + sc_addr = spx + spy * 320; + + if (b1 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it + + sc_addr++; + + if (b2 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it + } + } + } + else + sprnum += 128; // Advance to next... + + if (vert_bl) + { + y += 16; // Do next row... + + for(WORD sy=0; sy<16; sy++) + { + for(WORD sx=0; sx<16; sx+=2) + { + BYTE b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; + WORD spy = y + sy, spx = x + sx; + + if (spy > 223 || spx > 299) + sc_addr = 0x13FFE; + else + sc_addr = spx + spy * 320; + + if (b1 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it + + sc_addr++; + + if (b2 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it + } + } + + if (horiz_bl) + { + for(WORD sy=0; sy<16; sy++) + { + for(WORD sx=16; sx<32; sx+=2) + { + BYTE b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F; + WORD spy = y + sy, spx = x + sx; + + if (spy > 223 || spx > 299) + sc_addr = 0x13FFE; + else + sc_addr = spx + spy * 320; + + if (b1 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it + + sc_addr++; + + if (b2 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it + } + } + } + } + } + else // Flip + { + if (horiz_bl) + { + for(WORD sy=0; sy<16; sy++) + { + for(WORD sx=30; sx!=14; sx-=2) + { + BYTE b1 = spr_rom[sprnum]>>4, b2 = spr_rom[sprnum++]&0x0F; + WORD spy = y+sy, spx = x+sx; + if ((spy>223) || (spx>299)) + sc_addr = 0x13FFE; + else + sc_addr = spx+spy*320; + if (b2 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it + sc_addr++; + if (b1 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it + } + } + } + for(WORD sy=0; sy<16; sy++) + { + for(WORD sx=14; sx!=0xFFFE; sx-=2) + { + BYTE b1 = spr_rom[sprnum]>>4, b2 = spr_rom[sprnum++]&0x0F; + WORD spy = y+sy, spx = x+sx; + if ((spy>223) || (spx>299)) + sc_addr = 0x13FFE; + else + sc_addr = spx+spy*320; + if (b2 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it + sc_addr++; + if (b1 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it + } + } + if (!horiz_bl) sprnum += 128; // If single, skip sprite... + if (vert_bl) + { + y += 16; // Adjust Y coord... + if (horiz_bl) + { + for(WORD sy=0; sy<16; sy++) + { + for(WORD sx=30; sx!=14; sx-=2) + { + BYTE b1 = spr_rom[sprnum]>>4, b2 = spr_rom[sprnum++]&0x0F; + WORD spy = y+sy, spx = x+sx; + if ((spy>223) || (spx>299)) + sc_addr = 0x13FFE; + else + sc_addr = spx+spy*320; + if (b2 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it + sc_addr++; + if (b1 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it + } + } + } + for(WORD sy=0; sy<16; sy++) + { + for(WORD sx=14; sx!=0xFFFE; sx-=2) + { + BYTE b1 = spr_rom[sprnum]>>4, b2 = spr_rom[sprnum++]&0x0F; + WORD spy = y+sy, spx = x+sx; + if ((spy>223) || (spx>299)) + sc_addr = 0x13FFE; + else + sc_addr = spx+spy*320; + if (b2 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it + sc_addr++; + if (b1 != 15) + my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it + } + } + } + } +} + +int FindPCXName() +{ + static int pcxNum = -1; // This needs to go elsewhere... (or does it?) + char filename[30]; + FILE * fr; + + pcxNum++; + + while (pcxNum < 10000) + { + sprintf(filename, "thnd%04i.pcx", pcxNum); + + if ((fr = fopen(filename, "r")) == NULL) + return pcxNum; // file does not exist - we can create it + + pcxNum++; + } + + return -1; +} + +void SnapPCX(SDL_Surface * scr) +{ + char filename[30]; + int i, line; + FILE * fw; + int XMax = 319; // Need to adjust this to handle 288 bytes per line + int YMax = 223; + int bytesPerLine = 320; + + if ((i = FindPCXName()) < 0) + return; // failed... + + sprintf(filename, "thnd%04i.pcx", i); + + if ((fw = fopen(filename, "wb")) == NULL) + return; // failed... + + // Write the header + + fputc(0xA, fw); // pcx signature + fputc(0x5, fw); // version 5 + fputc(0x1, fw); // RLE encoding + fputc(0x8, fw); // bits per pixel + fputc(0, fw); fputc(0, fw); fputc(0, fw); fputc(0, fw); // XMin=0,YMin=0 + fputc(XMax&0xFF, fw); fputc(XMax>>8, fw); + fputc(YMax&0xFF, fw); fputc(YMax>>8, fw); + fputc(0, fw); fputc(0, fw); fputc(0, fw); fputc(0,fw); // unknown DPI + for (i=0; i<48; i++) fputc(0, fw); // EGA color palette + fputc(0, fw); // reserved + fputc(1, fw); // number of bit planes + fputc(bytesPerLine&0xFF, fw); fputc(bytesPerLine>>8, fw); + fputc(1, fw); fputc(0, fw); // palette info - unused + fputc((XMax+1)&0xFF, fw); fputc((XMax+1)>>8, fw); + fputc((YMax+1)&0xFF, fw); fputc((YMax+1)>>8, fw); // screen resolution + for (i=0; i<54; i++) fputc(0, fw); // unused + + // Instead of using the screen, we should use our internal buffer... + SDL_LockSurface(scr); + + DWORD mem = scr->pitch * 8; // Skip first line... WAS:320*8; + for (line=0; line<=YMax; line++) + { + int count; + int last; + int xpos; + BYTE * pMem = (BYTE *)scr->pixels; + + xpos = 0; + while (xpos < bytesPerLine) + { + last = pMem[mem++]; + xpos++; + count = 1; + while (pMem[mem] == last && xpos < bytesPerLine && count < 63) + { + mem++; count++; xpos++; + } + + if (count > 1 || (last&0xC0) == 0xC0) + { + fputc(0xC0 | (count & 0x3F), fw); fputc(last & 0xFF, fw); + } + else fputc(last & 0xFF, fw); + } + mem += (scr->pitch - 320); // Handle non-standard line lengths... + } + + SDL_UnlockSurface(scr); + + // Write the palette + + fputc(0x0C, fw); + for (i=0; i<768; i++) + fputc(palette[i], fw); + + fclose(fw); // success! +} diff --git a/src/screen.h b/src/screen.h new file mode 100755 index 0000000..3d431d9 --- /dev/null +++ b/src/screen.h @@ -0,0 +1,20 @@ +// +// SCREEN.H +// +// This sets screen to Mode X so we can use the WHOLE laptop screen +// (i.e. 320x240) +// +// Tweaked by James L. Hammons +// +// (C) 1997 Underground Software + +#ifndef __SCREEN_H__ +#define __SCREEN_H__ + +#include "types.h" + +void SnapPCX(SDL_Surface *); // Take a PCX snapshot +void BlitChar(SDL_Surface *, BYTE *, BYTE *); // Show NAMCO screen +void Sprite(DWORD, WORD, WORD, BYTE, WORD); // Show sprite on the screen + +#endif // __SCREEN_H__ diff --git a/src/thunder.cpp b/src/thunder.cpp new file mode 100755 index 0000000..6413b4c --- /dev/null +++ b/src/thunder.cpp @@ -0,0 +1,1812 @@ +// +// Thunder: A Rolling Thunder Emulator w/6809 debugger v0.40 +// (Last build: 3/6/2004) +// +// by James L. Hammons +// +// (c) 2004 Underground Software +// + +#define THUNDER_VERSION "0.4.0" +#define THUNDER_BETA_VERSION "6" + +#include +#include +#include +#include +#include +#include +#include +#include // For getch() +#include +#include "SDL.h" // Get yer SDL out...! +#include "types.h" +#include "v6809.h" +#include "screen.h" +#include "gui.h" +#include "log.h" + +using namespace std; // Yes! + +/* +#define ROM1 "RT3-1B.ROM" +#define ROM2 "RT3-2B.ROM" +#define ROM3 "RT3-3.ROM" +#define ROM4 "RT3-4.ROM" +#define ROM5 "RT1-5.ROM" +#define ROM6 "RT1-6.ROM" +#define ROM7 "RT1-7.ROM" +#define ROM8 "RT1-8.ROM" +#define ROM9 "RT1-9.ROM" +#define ROM10 "RT1-10.ROM" +#define ROM11 "RT1-11.ROM" +#define ROM12 "RT1-12.ROM" +#define ROM13 "RT1-13.ROM" +#define ROM14 "RT1-14.ROM" +#define ROM15 "RT1-15.ROM" +#define ROM16 "RT1-16.ROM" +#define ROM17 "RT1-17.ROM" +#define ROM18 "RT1-18.ROM" +#define ROM19 "RT3-19.ROM" +#define ROM20 "RT3-20.ROM" +#define ROM21 "RT1-21.ROM" +#define ROM22 "RT2-22.ROM" +#define PROM1 "RT1-1.BIN" +#define PROM2 "RT1-2.BIN" +#define PROM3 "RT1-3.BIN" +#define PROM4 "RT1-4.BIN" +#define PROM5 "RT1-5.BIN" +*/ +#define ROM1 "rt3-1b.9c" +#define ROM2 "rt3-2b.12c" +#define ROM3 "rt3-3.12d" +#define ROM4 "rt1-4.6b" +#define ROM5 "rt1-5.4r" +#define ROM6 "rt1-6.4s" +#define ROM7 "rt1-7.7r" +#define ROM8 "rt1-8.7s" +#define ROM9 "rt1-9.12h" +#define ROM10 "rt1-10.12k" +#define ROM11 "rt1-11.12l" +#define ROM12 "rt1-12.12m" +#define ROM13 "rt1-13.12p" +#define ROM14 "rt1-14.12r" +#define ROM15 "rt1-15.12t" +#define ROM16 "rt1-16.12u" +#define ROM17 "rt1-17.f1" +#define ROM18 "rt1-18.h1" +#define ROM19 "rt1-19.k1" +#define ROM20 "rt1-20.m1" +#define ROM21 "rt1-21.f3" +#define ROM22 "rt1-22.h3" +#define PROM1 "mb7124e.3r" +#define PROM2 "mb7116e.3s" +#define PROM3 "mb7138h.4v" +#define PROM4 "mb7138h.6v" +#define PROM5 "mb7112e.6u" +#define MCUROM "rt1-mcu.bin" + +// Global defines + +SDL_Surface * screen; + +BYTE * gram, * grom; // Allocate RAM & ROM pointers +BYTE * gram1, * gram2, * grom1, * grom2; // Actual memory +BYTE * grom3, * grom4, * data_rom, * spr_rom, * voice_rom; +BYTE * chr_rom; // Character ROM pointer + +V6809REGS cpu1, cpu2; + +bool trace = false; // ditto... +bool looking_at_rom = true; // true = R1, false = R2 +DWORD banksw1, banksw2; // Bank switch addresses +WORD game_over_switch; // Game over delay +WORD dpc; // Debug pc reg... +bool show_scr = true; // Whether or not to show background +bool enable_cpu = true; // Whether or not to enable CPUs +bool irqGoA = true; // IRQ switch for CPU #1 +bool irqGoB = true; // IRQ switch for CPU #2 + +WORD refresh = 0; // Crappy global screen stuff... +bool refresh2 = true; + +DWORD psg_lens[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +BYTE * psg_adrs[16]; +DWORD voc_lens[32] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +BYTE * voc_adrs[32]; +DWORD fm_lens[14] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +BYTE * fm_adrs[14]; + +fstream tr; // Tracelog hook +WORD pcx; // Where we at? + +static char op_mat1[256] = { + 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, + 0, 0, 5, 5, 0, 0, 4, 4, 0, 5, 8, 0, 8, 5, 6, 6, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 7, 7, 7, 7, 6, 6, 6, 6, 0, 5, 5, 5, 8, 5, 5, 5, + 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 5, 0, 5, + 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 5, 0, 5, + 7, 0, 0, 7, 7, 0, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, + 2, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, + 8, 8, 8, 9, 8, 8, 8, 0, 8, 8, 8, 8, 9, 3, 9, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 8, 8, 8, 9, 8, 8, 8, 0, 8, 8, 8, 8, 9, 0, 9, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, +op_mat2[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2 }, +op_mat3[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +static char mnemonics[256][6] = { + "NEG ","??? ","??? ","COM ","LSR ","??? ","ROR ","ASR ", + "LSL ","ROL ","DEC ","??? ","INC ","TST ","JMP ","CLR ", + "PAGE1","PAGE2","NOP ","SYNC ","??? ","??? ","LBRA ","LBSR ", + "??? ","DAA ","ORCC ","??? ","ANDCC","SEX ","EXG ","TFR ", + "BRA ","BRN ","BHI ","BLS ","BHS ","BLO ","BNE ","BEQ ", + "BVC ","BVS ","BPL ","BMI ","BGE ","BLT ","BGT ","BLE ", + "LEAX ","LEAY ","LEAS ","LEAU ","PSHS ","PULS ","PSHU ","PULU ", + "??? ","RTS ","ABX ","RTI ","CWAI ","MUL ","RESET","SWI ", + "NEGA ","??? ","??? ","COMA ","LSRA ","??? ","RORA ","ASRA ", + "LSLA ","ROLA ","DECA ","??? ","INCA ","TSTA ","??? ","CLRA ", + "NEGB ","??? ","??? ","COMB ","LSRB ","??? ","RORB ","ASRB ", + "LSLB ","ROLB ","DECB ","??? ","INCB ","TSTB ","??? ","CLRB ", + "NEG ","??? ","??? ","COM ","LSR ","??? ","ROR ","ASR ", + "LSL ","ROL ","DEC ","??? ","INC ","TST ","JMP ","CLR ", + "NEG ","??? ","??? ","COM ","LSR ","??? ","ROR ","ASR ", + "LSL ","ROL ","DEC ","??? ","INC ","TST ","JMP ","CLR ", + "SUBA ","CMPA ","SCBA ","SUBD ","ANDA ","BITA ","LDA ","??? ", + "EORA ","ADCA ","ORA ","ADDA ","CMPX ","BSR ","LDX ","??? ", + "SUBA ","CMPA ","SBCA ","SUBD ","ANDA ","BITA ","LDA ","STA ", + "EORA ","ADCA ","ORA ","ADDA ","CMPX ","JSR ","LDX ","STX ", + "SUBA ","CMPA ","SBCA ","SUBD ","ANDA ","BITA ","LDA ","STA ", + "EORA ","ADCA ","ORA ","ADDA ","CMPX ","JSR ","LDX ","STX ", + "SUBA ","CMPA ","SBCA ","SUBD ","ANDA ","BITA ","LDA ","STA ", + "EORA ","ADCA ","ORA ","ADDA ","CMPX ","JSR ","LDX ","STX ", + "SUBB ","CMPB ","SCBB ","ADDD ","ANDB ","BITB ","LDB ","??? ", + "EORB ","ADCB ","ORB ","ADDB ","LDD ","??? ","LDU ","??? ", + "SUBB ","CMPB ","SBCB ","ADDD ","ANDB ","BITB ","LDB ","STB ", + "EORB ","ADCB ","ORB ","ADDB ","LDD ","STD ","LDU ","STU ", + "SUBB ","CMPB ","SBCB ","ADDD ","ANDB ","BITB ","LDB ","STB ", + "EORB ","ADCB ","ORB ","ADDB ","LDD ","STD ","LDU ","STU ", + "SUBB ","CMPB ","SBCB ","ADDD ","ANDB ","BITB ","LDB ","STB ", + "EORB ","ADCB ","ORB ","ADDB ","LDD ","STD ","LDU ","STU " }, +mnemonics2[256][6] = { + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","LBRN ","LBHI ","LBLS ","LBHS ","LBLO ","LBNE ","LBEQ ", + "LBVC ","LBVS ","LBPL ","LBMI ","LBGE ","LBLT ","LBGT ","LBLE ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","SWI2 ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","CMPD ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","CMPY ","??? ","LDY ","??? ", + "??? ","??? ","??? ","CMPD ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","CMPY ","??? ","LDY ","STY ", + "??? ","??? ","??? ","CMPD ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","CMPY ","??? ","LDY ","STY ", + "??? ","??? ","??? ","CMPD ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","CMPY ","??? ","LDY ","STY ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","LDS ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","LDS ","STS ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","LDS ","STS ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","LDS ","STS " }, +mnemonics3[256][6] = { + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","SWI3 ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","CMPU ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","CMPS ","??? ","??? ","??? ", + "??? ","??? ","??? ","CMPU ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","CMPS ","??? ","??? ","??? ", + "??? ","??? ","??? ","CMPU ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","CMPS ","??? ","??? ","??? ", + "??? ","??? ","??? ","CMPU ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","CMPS ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? ", + "??? ","??? ","??? ","??? ","??? ","??? ","??? ","??? " }, +tregs[16][3] = { + "D", "X", "Y", "U", "S", "PC", "??", "??", + "A", "B", "CC", "DP", "??", "??", "??", "??" }, +iregs[4][2] = {"X", "Y", "U", "S" }; + +// +// Fetch a byte out of memory +// +/*BYTE Fetch() +{ +// extern WORD sr, ur, xr, yr; // Needed for tracelog + extern WORD pcr; + BYTE b; + + b = (pcr < 0x8000 ? gram1[pcr] : grom1[pcr]); + pcr++; + + return b; +}*/ + +// +// Fetch a word out of memory (little endian format) +// +/*WORD FetchW() +{ + WORD w = Fetch() << 8; w |= Fetch(); + return w; +}*/ + +// +// Read a byte from memory (without touching PC. Not a Fetch!) +// +BYTE RdMem(WORD addr) +{ + BYTE b; + + if (addr < 0x8000) + { + if (addr > 0x5FFF) + b = data_rom[banksw1 + (addr - 0x6000)]; // Get char data + else + b = gram1[addr]; + } + else + b = grom1[addr]; + + return b; +} + +// +// Write a byte to memory +// +void WrMem(WORD addr, BYTE b) +{ + extern bool charbase; // Needed for screen. Extern it in it?? + //extern WORD sr, ur, xr, yr; // Needed for tracelog + //extern WORD pcr; +/* if ((addr>0x40FF) && (addr<0x4390)) + { + tr << hex << addr << ":" << (int)b; + //for(int i=0; i<32; i++) + //{ + // if (gram1[0x4400+i]<0x10) tr << "0"; + // tr << hex << (WORD)gram1[0x4400+i] << " "; + //} + tr << endl; + }//*/ + + if (addr == 0x6000) + SpawnSound(GAMESOUND, gram1[0x6200], 0); // Do voice chan 1 + if (addr == 0x6400) + SpawnSound(GAMESOUND, gram1[0x6600], 1); // Do voice chan 2 + if (addr == 0x6800) + banksw1 = (DWORD)b << 13; // Set char data bankswitch base address + if (addr > 0x4284 && addr < 0x42A5 && b) + SpawnSound(PSGSOUND, addr - 0x4285); // Do PSG sound on chans 2, 3 + if (addr == 0x4380) + { + SpawnSound(FMSOUND, b); // Do FM sound on channel 4 + if (b == 12) + game_over_switch = 240; // Set game over delay... + } + if (addr < 0x423D || addr > 0x425C) // Protect writes to DSWs + gram1[addr] = b; + if (addr == 0x8800) + charbase = false; // Char banksw1 + if (addr == 0x8C00) + charbase = true; // Char banksw2 + if (addr == 0x8400) // Frame go strobe? VBlank acknowledge? + { + if (refresh++ == 1) // 30 Hz... + { + BlitChar(screen, chr_rom, gram1); + refresh = (refresh2 ? 1 : 0); // 60/30 Hz... + } +// irqGoA = true; // Will this work??? no... + cpu1.cpuFlags |= V6809_ASSERT_LINE_IRQ;//wil wok??? + } +} + +// +// Fetch a byte out of memory (2nd processor) +// +/*BYTE FetchB() +{ +// extern WORD sr, ur, xr, yr; // Needed for tracelog + extern WORD pcrB; + BYTE b; + + if (pcrB<0x8000) + { + if (pcrB<0x2000) + b = gram1[pcrB+0x4000]; + if ((pcrB>0x1FFF) && (pcrB<0x6000)) + b = gram1[pcrB-0x2000]; + if (pcrB>0x5FFF) + b = gram1[pcrB]; + } + else + b = grom2[pcrB]; + pcrB++; + + return b; +} + +// +// Fetch a word out of memory (little endian format) (2nd processor) +// +WORD FetchWB() +{ + WORD w = FetchB() << 8; w |= FetchB(); + return w; +}*/ + +// +// Read a byte from memory (without touching PC. Not a Fetch!) (2nd processor) +// +BYTE RdMemB(WORD addr) +{ +// extern WORD cpu2.s, cpu2.u, cpu2.x, cpu2.y; // Needed for tracelog + BYTE b; + + if (addr < 0x8000) + { + if (addr < 0x2000) + b = gram1[addr + 0x4000]; + if (addr > 0x1FFF && addr < 0x6000) + b = gram1[addr - 0x2000]; + if (addr > 0x5FFF) + b = grom3[banksw2 + (addr - 0x6000)]; // Correct? + } + else + b = grom2[addr]; + +/* if ((addr>0x3FFF) && (addr<0x4400)) tr << "R-" << hex << pcx << ": " + << addr << "-" + << (int)looking_at_rom + << " [" << (int)b + << "] XR:" << xr << " YR:" << yr + << " SR:" << sr << " UR:" << ur + << endl; //*/ + return b; +} + +// +// Write a byte to memory (2nd processor) +// +void WrMemB(WORD addr, BYTE b) +{ + extern bool charbase; + //extern WORD sr, ur, xr, yr; // Needed for tracelog + //extern WORD pcr; +/* if ((addr>0x00FF) && (addr<0x0390)) + { + tr << hex << addr << ":" << (int)b; + //for(int i=0; i<32; i++) + //{ + // if (gram1[0x4400+i]<0x10) tr << "0"; + // tr << hex << (WORD)gram1[0x4400+i] << " "; + //} + tr << endl; + }//*/ + + if (addr == 0x8800) +// irqGoB = true; // Will it work??? no... + cpu2.cpuFlags |= V6809_ASSERT_LINE_IRQ;//wil wok??? + if (addr == 0x6000) + SpawnSound(GAMESOUND, gram1[0x6200], 0); // Do voice chan 1 + if (addr == 0x6400) + SpawnSound(GAMESOUND, gram1[0x6600], 1); // Do voice chan 2 + if (addr > 0x0284 && addr < 0x02A5 && b) + SpawnSound(PSGSOUND, addr - 0x0285); // Do PSG sound on chans 2, 3 + if (addr == 0xD803) + banksw2 = (DWORD)(b & 0x03) << 13; // Set sprite data bank switch + if (addr == 0x0380) + { + SpawnSound(FMSOUND, b); // Do FM sound on chan 4 + if (b == 12) + game_over_switch = 240; // Set game over delay... + } + if (addr < 0x023D || addr > 0x025C) // Protect writes against DSWs + { + if (addr < 0x2000) + gram1[addr + 0x4000] = b; + if (addr > 0x1FFF && addr < 0x6000) + gram1[addr - 0x2000] = b; + if (addr > 0x5FFF) + gram1[addr] = b; + } +} + +// +// Display bytes in mem in hex +// +void DisplayBytes(WORD src, unsigned long dst) +{ + BYTE cnt; + unsigned long i; + + printf("%04X: ", src); + cnt = 0; // Init counter... + if (src > dst) dst += 0x10000; // That should fix the FFFF bug... + for(i=src; i>4], tregs[operand&0x0F]); + } + else + { + tmp[0] = 0; + if (operand&0x01) strcat(tmp, "CC "); + if (operand&0x02) strcat(tmp, "A "); + if (operand&0x04) strcat(tmp, "B "); + if (operand&0x08) strcat(tmp, "DP "); + if (operand&0x10) strcat(tmp, "X "); + if (operand&0x20) strcat(tmp, "Y "); + if (operand&0x40) (((opcode==0x34)||(opcode==0x35)) + ? strcat(tmp, "U ") : strcat(tmp, "S ")); + if (operand&0x80) strcat(tmp, "PC"); + } + sprintf(outbuf, "%s %s", mnem, tmp); + break; } + case 7: // Indexed (the tough one!) + { operand = DFetch(); // Get IDX byte + BYTE reg = ((operand & 0x60) >> 5), idxind = ((operand & 0x10) >> 4), + lo_nyb = (operand & 0x0F), boff; + WORD woff; + + strcpy(tmp, "??"); + if (!(operand & 0x80)) // Hi bit set? Then decode 4 bit offset + { + sprintf(tmp, "(%d),%s", (idxind ? -(16-lo_nyb) : lo_nyb), + iregs[reg]); + } + else // Add the ($nnnn,R) code dude... + { + if (idxind) + { + switch(lo_nyb) + { + case 1: sprintf(tmp, "(,%s++)", iregs[reg]); break; + case 3: sprintf(tmp, "(,--%s)", iregs[reg]); break; + case 4: sprintf(tmp, "(,%s)", iregs[reg]); break; + case 5: sprintf(tmp, "(B,%s)", iregs[reg]); break; + case 6: sprintf(tmp, "(A,%s)", iregs[reg]); break; + case 8: + { boff = DFetch(); sprintf(tmp, "($%02X,%s)", boff, + iregs[reg]); break; } + case 9: + { woff = DFetchW(); sprintf(tmp, "($%04X,%s)", woff, + iregs[reg]); break; } + case 11: sprintf(tmp, "(D,%s)", iregs[reg]); break; + case 12: + { boff = DFetch(); sprintf(tmp, "($%02X,PC)", boff); break; } + case 13: + { woff = DFetchW(); sprintf(tmp, "($%04X,PC)", woff); break; } + case 15: + { woff = DFetchW(); sprintf(tmp, "[$%04X]", woff); break; } + default: strcpy(tmp, "??"); + } + } + else + { + switch(lo_nyb) + { + case 0: sprintf(tmp, ",%s+", iregs[reg]); break; + case 1: sprintf(tmp, ",%s++", iregs[reg]); break; + case 2: sprintf(tmp, ",-%s", iregs[reg]); break; + case 3: sprintf(tmp, ",--%s", iregs[reg]); break; + case 4: sprintf(tmp, ",%s", iregs[reg]); break; + case 5: sprintf(tmp, "(B),%s", iregs[reg]); break; + case 6: sprintf(tmp, "(A),%s", iregs[reg]); break; + case 8: + { boff = DFetch(); sprintf(tmp, "($%02X),%s", boff, + iregs[reg]); break; } + case 9: + { woff = DFetchW(); sprintf(tmp, "($%04X),%s", woff, + iregs[reg]); break; } + case 11: sprintf(tmp, "(D),%s", iregs[reg]); break; + case 12: + { boff = DFetch(); sprintf(tmp, "($%02X),PC", boff); break; } + case 13: + { woff = DFetchW(); sprintf(tmp, "($%04X),PC", woff); break; } + default: strcpy(tmp, "??"); + } + } + } + sprintf(outbuf, "%s %s", mnem, tmp); + break; } + case 8: // Immediate + { operand = DFetch(); // Get IMM byte + sprintf(outbuf, "%s #$%02X", mnem, operand); + break; } + case 9: // Long Immediate + { loperand = DFetchW(); // Get IMM word + sprintf(outbuf, "%s #$%04X", mnem, loperand); + break; } + } + DisplayBytes(dpc, (looking_at_rom ? pcr : pcrB)); // Show bytes + cout << outbuf << endl; // display opcode & addressing, etc + dpc = (looking_at_rom ? pcr : pcrB); // Advance debug PC + pcr = pc_save; pcrB = pcB_save; // Restore PCs +} + +// +// Convert hex to dec +// +WORD htod(char *str) +{ + WORD value = 0; + int len = strlen(str); + + for(int i=0; i='0' && str[i]<='9') + { + value = (value<<4) | (unsigned)(str[i]-'0'); + } + if (str[i]>='a' && str[i]<='f') + { + value = (value<<4) | (unsigned)(str[i]-'a')+10; + } + if (str[i]>='A' && str[i]<='F') + { + value = (value<<4) | (unsigned)(str[i]-'A')+10; + } + } + return(value); +} + +// +// Load 32K file into ROM image space +// +bool Load32KImg(char * filename, WORD address) +{ + ifstream ff; + char ch; + + ff.open(filename, ios::binary | ios::in); // Open 'da file... + if (ff) + { + for(long i=0; i<32768; i++) // Read it in... + { + ff.get(ch); + grom[address+i] = ch; + } + ff.close(); // Close 'da file... + } + return(ff); +} + +// +// Generic Load file into image space +// (No error checking performed! Responsibility of caller!) +// +bool LoadImg(char * filename, BYTE * mem, DWORD address, DWORD length) +{ + ifstream ff; + char path[80]; + char ch; + + strcpy(path, "./ROMs/"); + strcat(path, filename); +// ff.open(filename, ios::binary | ios::in); // Open 'da file... + ff.open(path, ios::binary | ios::in); // Open 'da file... + if (ff) + { + for(DWORD i=0; i>4); + ff2.get(ch); + palette[i+2] = (BYTE)ch; + } + + // Do palette stretching here... I.e. add 0 to hinyb 0, 1 to hinyb 1, etc. + + for(int i=0; i<768; i++) + palette[i] = ((palette[i]<<4)&0xF0) | (palette[i]&0x0F); + + ff1.close(); + ff2.close(); + } + return ff1; +} + +// +// Unpack font data +// +bool UnpackFonts(void) +{ +// BYTE b1, b2, b3; + char b1, b2, b3; + fstream f1, f2; + //0x4000 $800 chars + f1.open("./ROMs/"ROM7, ios::binary | ios::in); + f2.open("./ROMs/"ROM8, ios::binary | ios::in); + if ((!f1) || (!f2)) return false; // Return if not found... + for(long i=0; i<0x40000; i+=64) + { + for(int j=0; j<64; j+=8) + { + f1.get(b1); f1.get(b2); f2.get(b3); + b3 ^= 0xFF; // Invert top data... + chr_rom[i+j] = ((b3 & 0x80) >> 5) | ((b1 & 0x80) >> 6) | ((b1 & 0x08) >> 3); + chr_rom[i+j+1] = ((b3 & 0x40) >> 4) | ((b1 & 0x40) >> 5) | ((b1 & 0x04) >> 2); + chr_rom[i+j+2] = ((b3 & 0x20) >> 3) | ((b1 & 0x20) >> 4) | ((b1 & 0x02) >> 1); + chr_rom[i+j+3] = ((b3 & 0x10) >> 2) | ((b1 & 0x10) >> 3) | (b1 & 0x01); + chr_rom[i+j+4] = ((b3 & 0x08) >> 1) | ((b2 & 0x80) >> 6) | ((b2 & 0x08) >> 3); + chr_rom[i+j+5] = (b3 & 0x04) | ((b2 & 0x40) >> 5) | ((b2 & 0x04) >> 2); + chr_rom[i+j+6] = ((b3 & 0x02) << 1) | ((b2 & 0x20) >> 4) | ((b2 & 0x02) >> 1); + chr_rom[i+j+7] = ((b3 & 0x01) << 2) | ((b2 & 0x10) >> 3) | (b2 & 0x01); + } + } + f1.close(); + f2.close(); + + f1.open("./ROMs/"ROM5, ios::binary | ios::in); + f2.open("./ROMs/"ROM6, ios::binary | ios::in); + for(long i=0x40000; i<0x60000; i+=64) + { + for(int j=0; j<64; j+=8) + { + f1.get(b1); f1.get(b2); f2.get(b3); + b3 ^= 0xFF; // Invert top data + chr_rom[i+j] = ((b3 & 0x80) >> 5) | ((b1 & 0x80) >> 6) | ((b1 & 0x08) >> 3); + chr_rom[i+j+1] = ((b3 & 0x40) >> 4) | ((b1 & 0x40) >> 5) | ((b1 & 0x04) >> 2); + chr_rom[i+j+2] = ((b3 & 0x20) >> 3) | ((b1 & 0x20) >> 4) | ((b1 & 0x02) >> 1); + chr_rom[i+j+3] = ((b3 & 0x10) >> 2) | ((b1 & 0x10) >> 3) | (b1 & 0x01); + chr_rom[i+j+4] = ((b3 & 0x08) >> 1) | ((b2 & 0x80) >> 6) | ((b2 & 0x08) >> 3); + chr_rom[i+j+5] = (b3 & 0x04) | ((b2 & 0x40) >> 5) | ((b2 & 0x04) >> 2); + chr_rom[i+j+6] = ((b3 & 0x02) << 1) | ((b2 & 0x20) >> 4) | ((b2 & 0x02) >> 1); + chr_rom[i+j+7] = ((b3 & 0x01) << 2) | ((b2 & 0x10) >> 3) | (b2 & 0x01); + } + } + f1.close(); + f2.close(); + return true; // Made it! +} + +// +// Get length of sample from WAV format +// +DWORD GetWAVLength(fstream &file) +{ + char ch; + DWORD len; + + file.ignore(16); // Skip header BS + + for(int i=0; i<2; i++) + { + file.get(ch); len = (int)(BYTE)ch; + file.get(ch); len |= (int)(BYTE)ch << 8; + file.get(ch); len |= (int)(BYTE)ch << 16; + file.get(ch); len |= (int)(BYTE)ch << 24; + + file.ignore(len + 4); // Skip intermediate data + } + + file.get(ch); len = (int)(BYTE)ch; // & finally get length of data + file.get(ch); len |= (int)(BYTE)ch << 8; + file.get(ch); len |= (int)(BYTE)ch << 16; + file.get(ch); len |= (int)(BYTE)ch << 24; + + return len; +} + +// +// Load PSG samples from disk +// +void LoadPSGs(void) +{ + char file[40]; + char ch; + DWORD len; + + for(int i=0; i<16; i++) + { + fstream fp; + + psg_adrs[i] = NULL; // Zero out pointer + sprintf(file, "./sounds/psg%i.wav", i); // Create filename + + fp.open(file, ios::binary | ios::in); // Attempt to open it... + + if (fp) + { + len = GetWAVLength(fp); // Get WAV data length... + + psg_adrs[i] = new BYTE[len]; // Attempt to allocate space... + + if (psg_adrs[i] != NULL) + { + for(int j=0; j<(signed)len; j++) + { + fp.get(ch); + psg_adrs[i][j] = ch; // & load it in... + } + + psg_lens[i] = len; + cout << "Found sample file: " << file << " [Length: " << dec << len << "]" << endl; + } + + fp.close(); + } + } +} + +// +// Load FM samples from disk +// +void LoadFMs(void) +{ + char file[200]; + char ch; + DWORD len; + + for(int i=0; i<14; i++) + { + fstream fp; + + fm_adrs[i] = NULL; // Zero out pointer + sprintf(file, "./sounds/fm%i.wav", i); // Create filename + + fp.open(file, ios::binary | ios::in); // Attempt to open it... + + if (fp) + { + len = GetWAVLength(fp); // Get WAV length... + + fm_adrs[i] = new BYTE[len]; // Attempt to allocate space... + + if (fm_adrs[i] != NULL) + { + for(int j=0; j<(signed)len; j++) + { + fp.get(ch); + fm_adrs[i][j] = ch; // & load it in... + } + + fm_lens[i] = len; + cout << "Found sample file: " << file << " [Length: " << dec << len + << "]" << endl; + } + + fp.close(); + } + } +} + +// +// Main loop +// +int main(int argc, char * argv[]) +{ + InitLog("thunder.log"); + +/* extern WORD cpu1.pc, cpu1.s, cpu1.u, cpu1.x, cpu1.y; // Pull in vars from '6809.cpp' + extern BYTE cpu1.a, cpu1.b, cpu1.cc, cpu1.dp; + extern long iclock; + extern bool illegal; + extern WORD cpu2.pc, cpu2.s, cpu2.u, cpu2.x, cpu2.y; // Pull in vars from '6809B.cpp' + extern BYTE cpu2.a, cpu2.b, cpu2.cc, cpu2.dp; + extern long iclockB; + extern bool illegalB; + extern void (* exec_op0[256])(); // Array of page zero opcode functions... + extern void (* exec_op1[256])(); // Array of page one opcode functions... + extern void (* exec_op2[256])(); // Array of page two opcode functions... + extern void (* exec_op0B[256])(); // Array of page zero opcode functions... + extern void (* exec_op1B[256])(); // Array of page one opcode functions... + extern void (* exec_op2B[256])(); // Array of page two opcode functions...*/ + extern bool charbase; // From 'SCREEN.CPP' +// extern unsigned int vesa_memptr; + charbase = false; + + char lbuff[80]; + fstream ff; // Declare fstream without file hooks... + bool brk = false, brk2 = false; // Breakpoint set flag + WORD brkpnt, brkpnt2; // Where the breakpoint is... + bool running; // CPU running state flag... + bool self_test = false; // Self-test switch + bool scr_type = false; // false=chars, true=pixels + WORD debounce = 0; // Key de-bounce counter + WORD fire_debounce = 0; // Fire button debounce counter +// bool refresh2 = true; // Default to 60 Hz... + BYTE x; // General placeholder... + bool active = true; // Program running flag + +// SDL_Surface * screen = NULL; // SDL screen pointer + SDL_Event event; // SDL "event" +// int keyPressed; // SDL key pressed... + BYTE keys[256]; // Keyboard "switch-like" buffer + extern BYTE palette[768]; // Screen physical palette + DWORD ticks, oldTicks; + +// tr.open("exe.log", ios::binary | ios::out); // Tracelog + + cout << endl << "THUNDER beta "THUNDER_BETA_VERSION" "; + cout << "by Jimmy Hamm " << endl; + cout << "Serial #20030313 / Prerelease" << endl; + cout << "(C) 2003 Underground Software" << endl << endl; + + cout << "This emulator is freeware. If you paid for it you were RIPPED OFF" + << endl << endl; + + cout << "Initializing SDL..." << endl; + + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) < 0) + { + cout << "Couldn't initialize SDL: " << SDL_GetError() << endl; + return -1; + } + + SDL_WM_SetCaption("Thunder Beta 6", "Thunder"); + + cout << "Allocating memory..." << endl; +//Does this anyway... set_new_handler(0); // Make 'new' return NULL on failure... + gram1 = new BYTE[0x10000]; + if (gram1 == NULL) { cout << "Could not allocate RAM space #1!" << endl + << "Aborting!" << endl; return -1; } + grom1 = new BYTE[0x10000]; + if (grom1 == NULL) { cout << "Could not allocate ROM space #1!" << endl + << "Aborting!" << endl; return -1; } + gram2 = new BYTE[0x10000]; + if (gram2 == NULL) { cout << "Could not allocate RAM space #2!" << endl + << "Aborting!" << endl; return -1; } + grom2 = new BYTE[0x10000]; + if (grom2 == NULL) { cout << "Could not allocate ROM space #2!" << endl + << "Aborting!" << endl; return -1; } + chr_rom = new BYTE[0x60000]; + if (chr_rom == NULL) { cout << "Could not allocate character RAM!" << endl + << "Aborting!" << endl; return -1; } + grom3 = new BYTE[0x8000]; + if (grom3 == NULL) { cout << "Could not allocate ROM space #4!" << endl + << "Aborting!" << endl; return -1; } + grom4 = new BYTE[0x8000]; + if (grom4 == NULL) { cout << "Could not allocate ROM space #5!" << endl + << "Aborting!" << endl; return -1; } + data_rom = new BYTE[0x40000]; + if (data_rom == NULL) { cout << "Could not allocate ROM level data!" << endl + << "Aborting!" << endl; return -1; } + spr_rom = new BYTE[0x80000]; + if (spr_rom == NULL) { cout << "Could not allocate ROM sprite data!" << endl + << "Aborting!" << endl; return -1; } + voice_rom = new BYTE[0x20000]; + if (voice_rom == NULL) { cout << "Could not allocate ROM voice data!" << endl + << "Aborting!" << endl; return -1; } + + gram = gram1; grom = grom1; // Needed only for debugger + + for(long i=0; i<0x10000; i++) + { + gram[i] = 0; grom[i] = 0; // Zero out memory + gram2[i] = 0; grom2[i] = 0; + } + game_over_switch = 0; // Init game over delay +// cpu1.a = 0; cpu1.b = 0; cpu1.cc = 0; cpu1.dp = 0; cpu1.x = 0; cpu1.y = 0; cpu1.s = 0; ur = 0; cpu1.pc = 0; + + cout << "Loading ROMs..." << endl; +// LoadCMOS(); // Load CMOS at $CC00-$CFFF + if (!ReadColorPROMs()) // Load virtual PROMs + { cout << "Could not open PROM files!" << endl; return -1; } + + if (!LoadImg(ROM1, grom1, 0x8000, 0x8000)) // Load $8000-$FFFF 1st ROM + { cout << "Could not open file '" << ROM1 << "'!" << endl; return -1; } + + if (!LoadImg(ROM2, grom2, 0x8000, 0x8000)) // Load $8000-$FFFF 2nd ROM + { cout << "Could not open file '" << ROM2 << "'!" << endl; return -1; } + + if (!LoadImg(ROM3, grom3, 0, 0x8000)) // Load 3rd ROM into its own space + { cout << "Could not open file '" << ROM3 << "'!" << endl; return -1; } + + if (!LoadImg(ROM4, grom4, 0, 0x8000)) // Load 4rd ROM into its own space + { cout << "Could not open file '" << ROM4 << "'!" << endl; return -1; } + + if (!LoadImg(ROM17, data_rom, 0, 0x10000)) // Load 17th ROM + { cout << "Could not open file '" << ROM17 << "'!" << endl; return -1; } + + if (!LoadImg(ROM18, data_rom, 0x10000, 0x10000)) // Load 18th ROM + { cout << "Could not open file '" << ROM18 << "'!" << endl; return -1; } + + if (!LoadImg(ROM19, data_rom, 0x20000, 0x10000)) // Load 19th ROM + { cout << "Could not open file '" << ROM19 << "'!" << endl; return -1; } + + if (!LoadImg(ROM20, data_rom, 0x30000, 0x10000)) // Load 20th ROM + { cout << "Could not open file '" << ROM20 << "'!" << endl; return -1; } + + if (!LoadImg(ROM9, spr_rom, 0, 0x10000)) // Load 9th ROM + { cout << "Could not open file '" << ROM9 << "'!" << endl; return -1; } + + if (!LoadImg(ROM10, spr_rom, 0x10000, 0x10000)) // Load 10th ROM + { cout << "Could not open file '" << ROM10 << "'!" << endl; return -1; } + + if (!LoadImg(ROM11, spr_rom, 0x20000, 0x10000)) // Load 11th ROM + { cout << "Could not open file '" << ROM11 << "'!" << endl; return -1; } + + if (!LoadImg(ROM12, spr_rom, 0x30000, 0x10000)) // Load 12th ROM + { cout << "Could not open file '" << ROM12 << "'!" << endl; return -1; } + + if (!LoadImg(ROM13, spr_rom, 0x40000, 0x10000)) // Load 13th ROM + { cout << "Could not open file '" << ROM13 << "'!" << endl; return -1; } + + if (!LoadImg(ROM14, spr_rom, 0x50000, 0x10000)) // Load 14th ROM + { cout << "Could not open file '" << ROM14 << "'!" << endl; return -1; } + + if (!LoadImg(ROM15, spr_rom, 0x60000, 0x10000)) // Load 15th ROM + { cout << "Could not open file '" << ROM15 << "'!" << endl; return -1; } + + if (!LoadImg(ROM16, spr_rom, 0x70000, 0x10000)) // Load 16th ROM + { cout << "Could not open file '" << ROM16 << "'!" << endl; return -1; } + + if (!LoadImg(ROM21, voice_rom, 0, 0x10000)) // Load 21st ROM + { cout << "Could not open file '" << ROM21 << "'!" << endl; return -1; } + + if (!LoadImg(ROM22, voice_rom, 0x10000, 0x10000)) // Load 22nd ROM + { cout << "Could not open file '" << ROM22 << "'!" << endl; return -1; } + + if (!UnpackFonts()) // Load 5, 6, 7, 8th ROMs + { + cout << "Could not open font files!" << endl; + return -1; + } + + LoadPSGs(); // Load samples if they're there... + LoadFMs(); + + // Quick 'n' Dirty voice dump (sound 0x0E) +/* DWORD adc = (voice_rom[26]<<8) | voice_rom[27]; + bool doneWitIt = false; + int crh = 0; + while (!doneWitIt) + { + if (voice_rom[adc] < 0x10) tr << "0"; + tr << hex << (int)voice_rom[adc] << " "; + if (crh++ > 24) { crh = 0; tr << endl; } + if ((voice_rom[adc] == 0xFF) && (voice_rom[adc-1] != 0x00)) + doneWitIt = true; + adc++; + }//*/ + + // Set up V6809 execution contexts + + memset(&cpu1, sizeof(V6809REGS), 0); + cpu1.RdMem = RdMem; + cpu1.WrMem = WrMem; + cpu1.cpuFlags |= V6809_ASSERT_LINE_RESET; + + memset(&cpu2, sizeof(V6809REGS), 0); + cpu2.RdMem = RdMemB; + cpu2.WrMem = WrMemB; + cpu2.cpuFlags |= V6809_ASSERT_LINE_RESET; + + bool firstTime = true; // kludge... + +WriteLog("About to go to the main loop...\n"); + while (active) + { + cout << ">"; + if (firstTime) + { + firstTime = false; // crappy kludge... + lbuff[0] = 'r'; + lbuff[1] = 0; + } + else + cin >> lbuff; + + if (lbuff[0] == 'd') + { + if (lbuff[1] != 0) + { + lbuff[0] = 32; + dpc = htod(lbuff); + } + printf("%04X: ", dpc); + WORD pc_save = cpu1.pc, pcB_save = cpu2.pc; + cpu1.pc = dpc; cpu2.pc = dpc; + for(int i=0; i<16; i++) + printf("%02X ", (looking_at_rom ? Fetch() : FetchB())); + cout << " "; + cpu1.pc = dpc; cpu2.pc = dpc; + for(int i=0; i<16; i++) + { + BYTE a = (looking_at_rom ? Fetch() : FetchB()); + if (a<10) cout << (char)(a+48); + if ((a>9) && (a<37)) cout << (char)(a+55); + if (a>36) cout << "."; + } + cout << endl; + dpc = (looking_at_rom ? cpu1.pc : cpu2.pc); + cpu1.pc = pc_save; cpu2.pc = pcB_save; + } + else if (lbuff[0] == 'e') + { + if (lbuff[1] != 0) + { + lbuff[0] = 32; + dpc = htod(lbuff); + } + printf("%04X: ", dpc); + for(int i=0; i<16; i++) printf("%02X ", (BYTE)gram[dpc++]); + cout << endl; + } + else if (lbuff[0] == 'l') + { + if (lbuff[1] != 0) + { + lbuff[0] = 32; + dpc = htod(lbuff); + } + for(int i=0; i<23; i++) + Decode_6809(); + } + else if (lbuff[0] == 't') + { + if (lbuff[1] != 0) + { + lbuff[0] = 32; + dpc = htod(lbuff); + } + if (looking_at_rom) + { + cpu1.pc = dpc; + Decode_6809(); + Execute6809(&cpu1, 1); + dpc = cpu1.pc; + printf("A=%02X B=%02X CC=%02X DP=%02X X=%04X Y=%04X S=%04X U=%04X PC=%04X", + cpu1.a, cpu1.b, cpu1.cc, cpu1.dp, cpu1.x, cpu1.y, cpu1.s, cpu1.u, cpu1.pc); + cout << " iclock=" << cpu1.clock << endl; + } + else + { + cpu2.pc = dpc; + Decode_6809(); + Execute6809(&cpu2, 1); + dpc = cpu2.pc; + printf("A=%02X B=%02X CC=%02X DP=%02X X=%04X Y=%04X S=%04X U=%04X PC=%04X", + cpu2.a, cpu2.b, cpu2.cc, cpu2.dp, cpu2.x, cpu2.y, cpu2.s, cpu2.u, cpu2.pc); + cout << " iclock=" << cpu2.clock << endl; + } + } + else if ((lbuff[0] == 'r') || (lbuff[0] == 'c')) // Run/continue... + { +WriteLog("Executing 'run' command...\n"); + DWORD my_clock = 0; + running = true; // Set running status... + trace = false; + SetRefreshRate(refresh2); // Tell GUI our refresh rate + //for(WORD i=0; i<0x8000; i++) gram2[i] = grom3[i]; //Temp + + if (lbuff[0] == 'r') // If run, then reset CPUs + { +WriteLog("Executing secondary 'run' command...\n"); + gram1[0x4182] = 0xA6; // Temp kludge + gram1[0x4184] = 0xA6; + gram1[0x4183] = 0x00; // More of the same + gram1[0x4185] = 0x00; + banksw1 = 0; // Will this work? + banksw2 = 0; +// iclock = 0; // Reset instr clock #1... + InitGUI(); // Reset # of coins + +/* cpu1.pc = ((grom1[0xFFFE]<<8) | grom1[0xFFFF]); // Reset 6809 #1 + if (lbuff[1] != 0) + { + lbuff[0] = 32; cpu1.pc = htod(lbuff); + } + else cpu1.cc = 0xFF; // Set CC register + + cpu2.pc = ((grom2[0xFFFE]<<8) | grom2[0xFFFF]); // Reset 6809 #2 + cpu2.cc = 0xFF; // Set CC register + while(iclock < 8000) // was 17000, 20000, 5000 + { + Execute6809(&cpu1, 1); Execute6809(&cpu2, 1); + }*/ +WriteLog("--> CPU clock #1: %u\n", cpu1.clock); + // Will *this* help video sync? + while (cpu1.clock < 8000) // was 17000, 20000, 5000 + { + Execute6809(&cpu1, 1); + Execute6809(&cpu2, 1); + } + } + +WriteLog("About to set up screen...\n"); +// if (!SetVESA2()) running = false; // Set up screen + // Set up screen (windowed) + screen = SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE); //video_bpp, videoflags); + if (screen == NULL) + { + cout << "Failed to initialize screen!" << endl; + running = false; + } + + SDL_Color colors[256]; + for(int i=0; i<256; i++) + { + colors[i].r = palette[i*3+0]; + colors[i].g = palette[i*3+1]; + colors[i].b = palette[i*3+2]; + } + SDL_SetPalette(screen, SDL_LOGPAL|SDL_PHYSPAL, colors, 0, 256); + + for(int i=0; i<256; i++) + keys[i] = 0; // Clear keyboard buffer... + + oldTicks = SDL_GetTicks(); + + // This crap SHOULD be in sound.cpp (not yet created)... + SDL_AudioSpec desired, obtained; + desired.freq = 22050; + desired.format = AUDIO_U8; + desired.channels = 1; + desired.samples = 600; + desired.callback = SoundFunc; + desired.userdata = NULL; + // Also, should check to see if it got the hardware it needed, correct sample size, etc. + if (SDL_OpenAudio(&desired, &obtained) < 0) + { + cout << "Couldn't open audio: " << SDL_GetError() << endl; + return -1; + } + SDL_PauseAudio(0); // Get that audio going! + + while (running) + { + HandleGUIDebounce(); // Debounce GUI keys + if (game_over_switch) + { + game_over_switch--; // Countdown... + if (game_over_switch == 0) + gram1[0x4380] = 0; // Kill music! + } + //gram1[0x423D] = self_test; // Reset DSW1-1 + gram1[0x4268] = 0; // Reset Video test + gram1[0x427A] = 0; gram1[0x427C] = 0; + gram1[0x427B] = 0; gram1[0x427D] = 0; + gram1[0x427E] = 0; gram1[0x427F] = 0; + gram1[0x4280] = 0; gram1[0x4281] = 0; + gram1[0x4276] = 0; gram1[0x426A] = 0; + gram1[0x4278] = 0; gram1[0x426C] = 0; + gram1[0x4262] = 0; gram1[0x4260] = 0; + //gram1[0x4247] = 0; + + // SDL key handling... + +// keyPressed = 0; // Reset keypress + while (SDL_PollEvent(&event) != 0) // Bleed out all pending key events... + { + if (event.type == SDL_KEYDOWN) + keys[event.key.keysym.scancode] = 1; + if (event.type == SDL_KEYUP) + keys[event.key.keysym.scancode] = 0; + } + +// { + if (keys[0x01]) + running = false; // ESC to exit... + + if (debounce) + debounce--; // Debounce toggle keys... + else + { + if (keys[0x3B]) + { + self_test = !self_test; // Self-test (F1-toggle) + debounce = 10; // Key debounce value... + } + if (keys[0x3C]) + { + gram1[0x4268] = 1; // Video test (F2) + debounce = 10; // Key debounce value... + } + if (keys[0x58]) + { + scr_type = !scr_type; // Toggle screen (F12) + debounce = 10; // Key debounce value... + } + if (keys[0x3D]) + { + show_scr = !show_scr; // Toggle bkgrnd (F3) + debounce = 10; + } + if (keys[0x40]) + { + enable_cpu = !enable_cpu; // Toggle CPUs (F6) + debounce = 10; + } + if (keys[0x3F]) + { + refresh2 = !refresh2; // Toggle 30/60Hz (F5) + SetRefreshRate(refresh2); // Inform GUI of refresh + if (refresh2) + SpawnMsg(M60FPS); + else + SpawnMsg(M30FPS); + debounce = 10; // Key debounce value... + } + if (keys[0x3E]) // Do PCX snapshot (F4) + { + SpawnSound(USERSOUND, SCAMERA); + SnapPCX(screen); + debounce = 10; + } + if (keys[0x0F]) // Tab active/deactivate GUI + { + if (ShowGUI()) + DeactivateGUI(); + else + ActivateGUI(); + debounce = 10; + } + } + //if (keys[0x3E]) gram1[0x4247] = 1; // Screen hold DS (F4) + if (keys[77+128]) // Right arrow + { + if (ShowGUI()) + SelectRight(); // If GUI active... + else + { + if (!keys[75+128]) // Disallow opposite directions @ same time + gram1[0x427F] = 1; // Stick right + } + } + if (keys[75+128]) + { + if (ShowGUI()) + SelectLeft(); // If GUI active... + else + { + if (!keys[77+128]) // Disallow opposite directions@same time + gram1[0x4281] = 1; // Left arrow + } + } + if (keys[72+128]) + { + if (ShowGUI()) + SelectUp(); // If GUI active... + else + { + if (!keys[80+128]) // Disallow opposite directions@same time + gram1[0x427B] = 1; // Up arrow + } + } + if (keys[80+128]) + { + if (ShowGUI()) + SelectDown(); // If GUI active... + else + { + if (!keys[72+128]) // Disallow opposite directions@same time + gram1[0x427D] = 1; // Down arrow + } + } + if (keys[28]) // Return + { + BYTE retval = UserSelectedSomething(); + if (retval == EXIT) + running = false; + if (retval == REFRESH) + { + refresh2 = !refresh2; + SetRefreshRate(refresh2); + } + } + if (keys[0x02]) + gram1[0x427A] = 1; // (1) + if (keys[0x03]) + gram1[0x427C] = 1; // (2) + if (keys[0x04]) + gram1[0x427E] = 1; // (3) + if (keys[0x06]) + gram1[0x4280] = 1; // (5) + if (keys[0x10]|keys[29]) + gram1[0x4276] = 1; // (Q) Jump + if (keys[0x11]) + gram1[0x426A] = 1; // (W) + if (fire_debounce) + fire_debounce--; + if (keys[0x12]|keys[56]) // (E) Fire + { + if (!fire_debounce) + { + gram1[0x4278] = 1; + if (gram1[0x3F08] == 0xFF) // Ugly kludge for debouncing gun + { + fire_debounce = 8; + } + else + { + fire_debounce = 2; + } + } + } + if (keys[0x13]) + gram1[0x426C] = 1; // (R) + if (keys[0x14]) + gram1[0x4262] = 1; // (T) + if (keys[0x15]) + gram1[0x4260] = 1; // (Y) + if (keys[0x44]) + gram1[0x41A5]++; // Coin? (F10) + if (keys[0x2C]) + gram1[0x4189]++; // ? (Z) credits l dig + if (keys[0x2D]) + gram1[0x418A]++; // ? (X) credits r dig + if (keys[0x2E]) + gram1[0x418C]++; // ? (C) Start + if (keys[0x2F]) + gram1[0x418D]++; // ? (V) + if (keys[0x41]) + SpawnSound(USERSOUND, 0); // Do user sound (F7) +// if (keys[0x42]) +// { +// gram1[0x4380] = 0; // (F8) kill music (this worx) +// charbase = false; // Switch chars out... +// } +// if (keys[0x43]) gram1[0x4285] = 1; // (F9) strobe unknown loc + if (keys[0x45]) // (F11) + { + Execute6809(&cpu1, 10); + Execute6809(&cpu2, 10); + } +// } + if (enable_cpu) + { +/*// if (irqGoA) + cpu1.cpuFlags |= V6809_ASSERT_LINE_IRQ; + + Execute6809(&cpu1, 25000); + cpu1.clock -= 25000; // Remove 25K ticks from clock (in case it overflowed) + +// if (irqGoB) + cpu2.cpuFlags |= V6809_ASSERT_LINE_IRQ; + + Execute6809(&cpu2, 25000); + cpu2.clock -= 25000; // Remove 25K ticks from clock (in case it overflowed)//*/ + + cpu1.cpuFlags |= V6809_ASSERT_LINE_IRQ; + cpu2.cpuFlags |= V6809_ASSERT_LINE_IRQ; + while (cpu1.clock < 25000) + { + // Gay, but what are ya gonna do? + Execute6809(&cpu1, 5); + Execute6809(&cpu2, 5); + } + cpu1.clock -= 25000; // Remove 25K ticks from clock (in case it overflowed) + cpu2.clock -= 25000; // Remove 25K ticks from clock (in case it overflowed)//*/ + +/* while (my_clock < 25000) // Cycles in 60th of a sec at 1.5 Mhz + { + // pcx = cpu1.pc; // Tracelog stuff + if (brk && (cpu1.pc == brkpnt)) + { + running = false; + break; + } + if (brk2 && (cpu2.pc == brkpnt2)) + { + running = false; + break; + } + DWORD prev = iclock; + + BYTE opcode = Fetch(); // Get the opcode + if (opcode == 0x10) + { + exec_op1[Fetch()](); + goto TEXE_NEXT; + } + if (opcode == 0x11) + { + exec_op2[Fetch()](); + goto TEXE_NEXT; + } + exec_op0[opcode](); +TEXE_NEXT: + + if (iclock > 25000) + { + iclock = 0; +// if (irqGoA) +// { + if ((!(cpu1.cc&0x10)) && irqGoA) + { + irqGoA = false; +// if (!(cpu1.cc&0x10)) // Process an interrupt? +// { + cpu1.cc |= 0x80; // Set E + WrMem(--cpu1.s, cpu1.pc&0xFF); WrMem(--cpu1.s, cpu1.pc>>8); // Save all regs... + WrMem(--cpu1.s, cpu1.u&0xFF); WrMem(--cpu1.s, cpu1.u>>8); + WrMem(--cpu1.s, cpu1.y&0xFF); WrMem(--cpu1.s, cpu1.y>>8); + WrMem(--cpu1.s, cpu1.x&0xFF); WrMem(--cpu1.s, cpu1.x>>8); + WrMem(--cpu1.s, cpu1.dp); WrMem(--cpu1.s, cpu1.b); + WrMem(--cpu1.s, cpu1.a); WrMem(--cpu1.s, cpu1.cc); + cpu1.cc |= 0x50; // Set F,I + cpu1.pc = (grom1[0xFFF8]<<8) | grom1[0xFFF9]; // And do it! + // Need to find out why RdMem is returning wrong values here... + } + } +// }//irgGoA + if (iclock > prev) + my_clock += (iclock - prev); // Increment my_clock + + // pcx = cpu2.pc; // Tracelog stuff + opcode = FetchB(); // Get the opcode + if (opcode == 0x10) + { + exec_op1B[FetchB()](); + goto TEXE_NEXT2; + } + if (opcode == 0x11) + { + exec_op2B[FetchB()](); + goto TEXE_NEXT2; + } + exec_op0B[opcode](); +TEXE_NEXT2: + + if (iclockB > 25000)//24550) // Slightly faster IRQs for SUB processor + { + iclockB = 0; +// if (irqGoB) +// { + if ((!(cpu2.cc&0x10)) && irqGoB) + { + irqGoB = false; +// if (!(cpu2.cc&0x10)) // Process an interrupt? +// { + cpu2.cc |= 0x80; // Set E + WrMemB(--cpu2.s, cpu2.pc&0xFF); WrMemB(--cpu2.s, cpu2.pc>>8); // Save all regs... + WrMemB(--cpu2.s, cpu2.u&0xFF); WrMemB(--cpu2.s, cpu2.u>>8); + WrMemB(--cpu2.s, cpu2.y&0xFF); WrMemB(--cpu2.s, cpu2.y>>8); + WrMemB(--cpu2.s, cpu2.x&0xFF); WrMemB(--cpu2.s, cpu2.x>>8); + WrMemB(--cpu2.s, cpu2.dp); WrMemB(--cpu2.s, cpu2.b); + WrMemB(--cpu2.s, cpu2.a); WrMemB(--cpu2.s, cpu2.cc); + cpu2.cc |= 0x50; // Set F,I + cpu2.pc = (grom2[0xFFF8]<<8) | grom2[0xFFF9]; // And do it! + } + } +// } // irqGoB + // if (brk && (cpu1.pc == brkpnt)) running = false; // Stop running! + } + my_clock -= 25000; // Remove frame count from iclock*/ + } // END: enable_cpu +// if (refresh++ == 1) // 30 Hz... +// { +// if (scr_type) +// BlitWilliamsScreen(gram1); // Display the screen... +// else +// BlitChar(screen, chr_rom, gram1); +// refresh = (refresh2 ? 1 : 0); // 60/30 Hz... +// } + + // Speed throttling happens here... + while (SDL_GetTicks() - oldTicks < 16); // Actually, it's 16.66... Need to account for that somehow + oldTicks = SDL_GetTicks(); + } + +// Stop_audio_output(); +// ReleaseTimer(); +// ReleaseKeyboard(); // Release the interrupt... +// RestoreOldMode(); // Restore screen + if (brk && (cpu1.pc == brkpnt)) + cout << "CPU 1: Break at " << hex << cpu1.pc << endl; + if (brk2 && (cpu2.pc == brkpnt2)) + cout << "CPU 2: Break at " << hex << cpu2.pc << endl; + + lbuff[0] = 'q'; // Temp kludge... + } + else if (lbuff[0] == 'b') // Set/clear breakpoint + { + if (lbuff[1] != 0) + { + lbuff[0] = 32; + brkpnt = htod(lbuff); + brk = true; + cout << "Breakpoint #1 set at " << hex << brkpnt << dec << endl; + } + else + { + brk = false; + cout << "Breakpoint cleared" << endl; + } + } + else if (lbuff[0] == 'a') // Set/clear breakpoint #2 + { + if (lbuff[1] != 0) + { + lbuff[0] = 32; + brkpnt2 = htod(lbuff); + brk2 = true; + cout << "Breakpoint #2 set at " << hex << brkpnt2 << dec << endl; + } + else + { + brk2 = false; + cout << "Breakpoint cleared" << endl; + } + } + else if (lbuff[0] == 'i') // Inspect registers + { + printf("CPU1: A=%02X B=%02X CC=%02X DP=%02X X=%04X Y=%04X S=%04X U=%04X PC=%04X", + cpu1.a, cpu1.b, cpu1.cc, cpu1.dp, cpu1.x, cpu1.y, cpu1.s, cpu1.u, cpu1.pc); + cout << " iclk=" << dec << cpu1.clock << endl; + printf("CPU2: A=%02X B=%02X CC=%02X DP=%02X X=%04X Y=%04X S=%04X U=%04X PC=%04X", + cpu2.a, cpu2.b, cpu2.cc, cpu2.dp, cpu2.x, cpu2.y, cpu2.s, cpu2.u, cpu2.pc); + cout << " iclk=" << dec << cpu2.clock << endl; + if (brk) + cout << "Breakpoint #1 set at " << hex << brkpnt << dec << endl; + if (brk2) + cout << "Breakpoint #2 set at " << hex << brkpnt2 << dec << endl; + } + else if (strncmp(lbuff, "swap", 4) == 0) // Swap ROMs + { + looking_at_rom = !looking_at_rom; + cout << "Swapped: Looking at "; + (looking_at_rom ? cout << "ROM #1" : cout << "ROM #2"); + cout << endl; + } + else if (strncmp(lbuff, "seek", 4) == 0) // Seek non-zero bytes in RAM + { + if (lbuff[4] != 0) + { + for(int i=0; i<4; i++) + lbuff[i] = 32; + dpc = htod(lbuff); + } + do + { + x = gram1[dpc++]; + } + while ((x == 0) && (dpc != 0xFFFF)); // Keep going until something found + dpc--; + + printf("%04X: ", dpc); // Show data found... + for(int i=0; i<16; i++) + printf("%02X ", gram1[(WORD)(dpc+i)]); + cout << " "; + for(int i=0; i<16; i++) + { + BYTE a = gram1[dpc++]; + if (a<10) + cout << (char)(a+48); + if ((a>9) && (a<37)) + cout << (char)(a+55); + if (a>36) + cout << "."; + } + cout << endl; + } + else if (lbuff[0] == 'v') // View screen + { +// SetVESA2(); // Set up screen + BlitChar(screen, chr_rom, gram1); + getch(); +// RestoreOldMode(); + } + + if (lbuff[0] == 'q') + active = false; //break; // Quit + } + + SDL_Quit(); // Shut down SDL + + delete[] gram1; // Deallocate RAM & ROM spaces + delete[] grom1; + delete[] gram2; + delete[] grom2; + delete[] chr_rom; + delete[] grom3; + delete[] grom4; + delete[] data_rom; + delete[] spr_rom; + delete[] voice_rom; + + for(int i=0; i<16; i++) + if (psg_adrs[i] != NULL) + delete[] psg_adrs[i]; // Deallocate if loaded + + for(int i=0; i<14; i++) + if (fm_adrs[i] != NULL) + delete[] fm_adrs[i]; // Deallocate if loaded + +// tr.close(); // Close tracelog + LogDone(); + + return 1; +} diff --git a/src/types.h b/src/types.h new file mode 100755 index 0000000..c65b5f5 --- /dev/null +++ b/src/types.h @@ -0,0 +1,39 @@ +// +// TYPES.H +// + +#ifndef __TYPES_H__ +#define __TYPES_H__ + +// This is only good on certain intel 32-bit platforms... +// You may need to tweak to suit your specific platform. + +typedef unsigned char uint8; +typedef signed char int8; +typedef unsigned short uint16; +typedef signed short int16; +typedef unsigned uint32; +typedef signed int32; +typedef unsigned long long uint64; +typedef signed long long int64; + +typedef uint8 UINT8; +typedef int8 INT8; +typedef uint16 UINT16; +typedef int16 INT16; +typedef uint32 UINT32; +typedef int32 INT32; +typedef uint64 UINT64; +typedef int64 INT64; + +typedef uint8 BYTE; +typedef uint16 WORD; +//ugly, ugly kludge +#ifndef __SDLEMU_OPENGL_H__ +typedef uint32 DWORD; +#endif +typedef int8 SBYTE; +typedef int16 SWORD; +typedef int32 SDWORD; + +#endif // __TYPES_H__ diff --git a/src/v6809.cpp b/src/v6809.cpp new file mode 100755 index 0000000..4de9d29 --- /dev/null +++ b/src/v6809.cpp @@ -0,0 +1,2965 @@ +// +// Virtual 6809 v1.2 (Last build: 2/27/2004) +// +// by James L. Hammons +// +// (c) 1997,2004 Underground Software +// + +#include "v6809.h" + +#ifdef __DEBUG__ +#include "dis6809.h" // Temporary... +#include "log.h" // Temporary... +#endif + +// Private global variables + +static V6809REGS regs; +static WORD addr; // Temporary variables common to all funcs... +static BYTE tmp; + +// Private function prototypes + +static int SignedB(BYTE); // Return signed byte from unsigned +static int SignedW(WORD); // Return signed word from unsigned +static WORD FetchW(void); +static WORD RdMemW(WORD addr); +static void WrMemW(WORD addr, WORD w); +static WORD ReadEXG(BYTE); // Read TFR/EXG post byte +static void WriteEXG(BYTE, WORD); // Set TFR/EXG data +static WORD DecodeReg(BYTE); // Decode register data +static WORD DecodeIDX(BYTE); // Decode IDX data + +// This is here because of the stupid forward declaration rule that C++ forces (the C++ compiler +// isn't smart enough to know that the identifiers in the arrays are declared later, it doesn't +// even *try* to see if they're there). + +#define FD(x) static void Op##x(); // FD -> "Forward Declaration" +#define FE(x) static void Op10##x(); +#define FF(x) static void Op11##x(); + +FD(00) FD(03) FD(04) FD(06) FD(07) FD(08) FD(09) FD(0A) FD(0C) FD(0D) FD(0E) FD(0F) FD(10) FD(11) +FD(12) FD(13) FD(16) FD(17) FD(19) FD(1A) FD(1C) FD(1D) FD(1E) FD(1F) FD(20) FD(21) FD(22) FD(23) +FD(24) FD(25) FD(26) FD(27) FD(28) FD(29) FD(2A) FD(2B) FD(2C) FD(2D) FD(2E) FD(2F) FD(30) FD(31) +FD(32) FD(33) FD(34) FD(35) FD(36) FD(37) FD(39) FD(3A) FD(3B) FD(3C) FD(3D) FD(3E) FD(3F) FD(40) +FD(43) FD(44) FD(46) FD(47) FD(48) FD(49) FD(4A) FD(4C) FD(4D) FD(4F) FD(50) FD(53) FD(54) FD(56) +FD(57) FD(58) FD(59) FD(5A) FD(5C) FD(5D) FD(5F) FD(60) FD(63) FD(64) FD(66) FD(67) FD(68) FD(69) +FD(6A) FD(6C) FD(6D) FD(6E) FD(6F) FD(70) FD(73) FD(74) FD(76) FD(77) FD(78) FD(79) FD(7A) FD(7C) +FD(7D) FD(7E) FD(7F) FD(80) FD(81) FD(82) FD(83) FD(84) FD(85) FD(86) FD(88) FD(89) FD(8A) FD(8B) +FD(8C) FD(8D) FD(8E) FD(90) FD(91) FD(92) FD(93) FD(94) FD(95) FD(96) FD(97) FD(98) FD(99) FD(9A) +FD(9B) FD(9C) FD(9D) FD(9E) FD(9F) FD(A0) FD(A1) FD(A2) FD(A3) FD(A4) FD(A5) FD(A6) FD(A7) FD(A8) +FD(A9) FD(AA) FD(AB) FD(AC) FD(AD) FD(AE) FD(AF) FD(B0) FD(B1) FD(B2) FD(B3) FD(B4) FD(B5) FD(B6) +FD(B7) FD(B8) FD(B9) FD(BA) FD(BB) FD(BC) FD(BD) FD(BE) FD(BF) FD(C0) FD(C1) FD(C2) FD(C3) FD(C4) +FD(C5) FD(C6) FD(C8) FD(C9) FD(CA) FD(CB) FD(CC) FD(CE) FD(D0) FD(D1) FD(D2) FD(D3) FD(D4) FD(D5) +FD(D6) FD(D7) FD(D8) FD(D9) FD(DA) FD(DB) FD(DC) FD(DD) FD(DE) FD(DF) FD(E0) FD(E1) FD(E2) FD(E3) +FD(E4) FD(E5) FD(E6) FD(E7) FD(E8) FD(E9) FD(EA) FD(EB) FD(EC) FD(ED) FD(EE) FD(EF) FD(F0) FD(F1) +FD(F2) FD(F3) FD(F4) FD(F5) FD(F6) FD(F7) FD(F8) FD(F9) FD(FA) FD(FB) FD(FC) FD(FD) FD(FE) FD(FF) +FD(__) FD(01) + +FE(21) FE(22) FE(23) FE(24) FE(25) FE(26) FE(27) FE(28) FE(29) FE(2A) FE(2B) FE(2C) FE(2D) FE(2E) +FE(2F) FE(3F) FE(83) FE(8C) FE(8E) FE(93) FE(9C) FE(9E) FE(9F) FE(A3) FE(AC) FE(AE) FE(AF) FE(B3) +FE(BC) FE(BE) FE(BF) FE(CE) FE(DE) FE(DF) FE(EE) FE(EF) FE(FE) FE(FF) + +FF(3F) FF(83) FF(8C) FF(93) FF(9C) FF(A3) FF(AC) FF(B3) FF(BC) + +#undef FD +#undef FE +#undef FF + +// +// Function arrays +// + +// Array of page zero opcode functions... +static void (* exec_op0[256])() = { + Op00, Op01, Op__, Op03, Op04, Op__, Op06, Op07, Op08, Op09, Op0A, Op__, Op0C, Op0D, Op0E, Op0F, + Op10, Op11, Op12, Op13, Op__, Op__, Op16, Op17, Op__, Op19, Op1A, Op__, Op1C, Op1D, Op1E, Op1F, + Op20, Op21, Op22, Op23, Op24, Op25, Op26, Op27, Op28, Op29, Op2A, Op2B, Op2C, Op2D, Op2E, Op2F, + Op30, Op31, Op32, Op33, Op34, Op35, Op36, Op37, Op__, Op39, Op3A, Op3B, Op3C, Op3D, Op3E, Op3F, + Op40, Op__, Op__, Op43, Op44, Op__, Op46, Op47, Op48, Op49, Op4A, Op__, Op4C, Op4D, Op__, Op4F, + Op50, Op__, Op__, Op53, Op54, Op__, Op56, Op57, Op58, Op59, Op5A, Op__, Op5C, Op5D, Op__, Op5F, + Op60, Op__, Op__, Op63, Op64, Op__, Op66, Op67, Op68, Op69, Op6A, Op__, Op6C, Op6D, Op6E, Op6F, + Op70, Op__, Op__, Op73, Op74, Op__, Op76, Op77, Op78, Op79, Op7A, Op__, Op7C, Op7D, Op7E, Op7F, + Op80, Op81, Op82, Op83, Op84, Op85, Op86, Op__, Op88, Op89, Op8A, Op8B, Op8C, Op8D, Op8E, Op__, + Op90, Op91, Op92, Op93, Op94, Op95, Op96, Op97, Op98, Op99, Op9A, Op9B, Op9C, Op9D, Op9E, Op9F, + OpA0, OpA1, OpA2, OpA3, OpA4, OpA5, OpA6, OpA7, OpA8, OpA9, OpAA, OpAB, OpAC, OpAD, OpAE, OpAF, + OpB0, OpB1, OpB2, OpB3, OpB4, OpB5, OpB6, OpB7, OpB8, OpB9, OpBA, OpBB, OpBC, OpBD, OpBE, OpBF, + OpC0, OpC1, OpC2, OpC3, OpC4, OpC5, OpC6, Op__, OpC8, OpC9, OpCA, OpCB, OpCC, Op__, OpCE, Op__, + OpD0, OpD1, OpD2, OpD3, OpD4, OpD5, OpD6, OpD7, OpD8, OpD9, OpDA, OpDB, OpDC, OpDD, OpDE, OpDF, + OpE0, OpE1, OpE2, OpE3, OpE4, OpE5, OpE6, OpE7, OpE8, OpE9, OpEA, OpEB, OpEC, OpED, OpEE, OpEF, + OpF0, OpF1, OpF2, OpF3, OpF4, OpF5, OpF6, OpF7, OpF8, OpF9, OpFA, OpFB, OpFC, OpFD, OpFE, OpFF +}; + +// Array of page one opcode functions... +static void (* exec_op1[256])() = { + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op1021, Op1022, Op1023, Op1024, Op1025, Op1026, Op1027, Op1028, Op1029, Op102A, Op102B, Op102C, Op102D, Op102E, Op102F, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op103F, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op1083, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op108C, Op__, Op108E, Op__, + Op__, Op__, Op__, Op1093, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op109C, Op__, Op109E, Op109F, + Op__, Op__, Op__, Op10A3, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op10AC, Op__, Op10AE, Op10AF, + Op__, Op__, Op__, Op10B3, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op10BC, Op__, Op10BE, Op10BF, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op10CE, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op10DE, Op10DF, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op10EE, Op10EF, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op10FE, Op10FF +}; + +// Array of page two opcode functions... +static void (* exec_op2[256])() = { + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op113F, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op1183, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op118C, Op__, Op__, Op__, + Op__, Op__, Op__, Op1193, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op119C, Op__, Op__, Op__, + Op__, Op__, Op__, Op11A3, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op11AC, Op__, Op__, Op__, + Op__, Op__, Op__, Op11B3, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op11BC, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, + Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__, Op__ +}; + + +// +// Fetch a word out of 6809 memory (little endian format) +// This is a leftover from when fetches were separated from garden variety reads... +// +static WORD FetchW() +{ + WORD w = RdMemW(regs.pc); + regs.pc += 2; + return w; +} +// +// Fetch word function +// +/*WORD FetchW(void) +{ + return (WORD)(regs.RdMem(regs.pc++) << 8) | regs.RdMem(regs.pc++); +}*/ + +// +// Read word from memory function +// +WORD RdMemW(WORD addr) +{ + return (WORD)(regs.RdMem(addr) << 8) | regs.RdMem(addr + 1); +} + +// +// Write word to memory function +// +void WrMemW(WORD addr, WORD w) +{ + regs.WrMem(addr + 0, w >> 8); + regs.WrMem(addr + 1, w & 0xFF); +} + +// +// return signed byte from unsigned +// +int SignedB(BYTE b) +{ + return (b & 0x80 ? b - 256 : b); +} + +// +// return signed word from unsigned +// +int SignedW(WORD w) +{ + return (w & 0x8000 ? w - 65536 : w); +} + +// +// Function to read TFR/EXG post byte +// +WORD ReadEXG(BYTE code) +{ + WORD retval; + + switch (code) + { + case 0: + retval = (regs.a << 8) | regs.b; + break; + case 1: + retval = regs.x; + break; + case 2: + retval = regs.y; + break; + case 3: + retval = regs.u; + break; + case 4: + retval = regs.s; + break; + case 5: + retval = regs.pc; + break; + case 8: + retval = regs.a; + break; + case 9: + retval = regs.b; + break; + case 10: + retval = regs.cc; + break; + case 11: + retval = regs.dp; + break; + default: + retval = 0xFF; + } + + return retval; +} + +// +// Function to set TFR/EXG data +// +void WriteEXG(BYTE code, WORD data) +{ + switch (code) + { + case 0: + regs.a = data >> 8, regs.b = data & 0xFF; break; + case 1: + regs.x = data; break; + case 2: + regs.y = data; break; + case 3: + regs.u = data; break; + case 4: + regs.s = data; break; + case 5: + regs.pc = data; break; + case 8: + regs.a = data & 0xFF; break; + case 9: + regs.b = data & 0xFF; break; + case 10: + regs.cc = data & 0xFF; break; + case 11: + regs.dp = data & 0xFF; break; + } +} + +// +// Function to decode register data +// +WORD DecodeReg(BYTE reg) +{ + WORD retval; + + switch (reg) + { + case 0: + retval = regs.x; break; + case 1: + retval = regs.y; break; + case 2: + retval = regs.u; break; + case 3: + retval = regs.s; break; + } + + return retval; +} + +// +// Function to decode IDX data +// +WORD DecodeIDX(BYTE code) +{ + WORD addr, woff; + BYTE reg = (code & 0x60) >> 5, idxind = (code & 0x10) >> 4, lo_nyb = code & 0x0F; + + if (!(code & 0x80)) // Hi bit unset? Then decode 4 bit offset + addr = DecodeReg(reg) + (idxind ? lo_nyb - 16 : lo_nyb); + else + { + if (idxind) + { + switch (lo_nyb) + { + case 1: + woff = DecodeReg(reg); + addr = RdMemW(woff); + switch (reg) + { + case 0: regs.x += 2; break; + case 1: regs.y += 2; break; + case 2: regs.u += 2; break; + case 3: regs.s += 2; break; + } + break; + case 3: + switch (reg) + { + case 0: regs.x -= 2; break; + case 1: regs.y -= 2; break; + case 2: regs.u -= 2; break; + case 3: regs.s -= 2; break; + } + woff = DecodeReg(reg); + addr = RdMemW(woff); + break; + case 4: + woff = DecodeReg(reg); + addr = RdMemW(woff); + break; + case 5: + woff = DecodeReg(reg) + SignedB(regs.b); + addr = RdMemW(woff); + break; + case 6: + woff = DecodeReg(reg) + SignedB(regs.a); + addr = RdMemW(woff); + break; + case 8: + woff = DecodeReg(reg) + SignedB(regs.RdMem(regs.pc++)); + addr = RdMemW(woff); + break; + case 9: + woff = DecodeReg(reg) + SignedW(FetchW()); + addr = RdMemW(woff); + break; + case 11: + woff = DecodeReg(reg) + SignedW((regs.a << 8) | regs.b); + addr = RdMemW(woff); + break; + case 12: + woff = regs.pc + SignedB(regs.RdMem(regs.pc++)); + addr = RdMemW(woff); + break; + case 13: + woff = regs.pc + SignedW(FetchW()); + addr = RdMemW(woff); + break; + case 15: + woff = FetchW(); + addr = RdMemW(woff); + break; + } + } + else + { + switch (lo_nyb) + { + case 0: + addr = DecodeReg(reg); + switch (reg) + { + case 0: regs.x++; break; + case 1: regs.y++; break; + case 2: regs.u++; break; + case 3: regs.s++; break; + } + break; + case 1: + addr = DecodeReg(reg); + switch (reg) + { + case 0: regs.x += 2; break; + case 1: regs.y += 2; break; + case 2: regs.u += 2; break; + case 3: regs.s += 2; break; + } + break; + case 2: { switch(reg) + { + case 0: regs.x--; break; + case 1: regs.y--; break; + case 2: regs.u--; break; + case 3: regs.s--; break; + } + addr = DecodeReg(reg); break; } + case 3: { switch(reg) + { + case 0: regs.x--; regs.x--; break; + case 1: regs.y--; regs.y--; break; + case 2: regs.u--; regs.u--; break; + case 3: regs.s--; regs.s--; break; + } + addr = DecodeReg(reg); break; } + case 4: { addr = DecodeReg(reg); break; } + case 5: { addr = DecodeReg(reg) + SignedB(regs.b); break; } + case 6: { addr = DecodeReg(reg) + SignedB(regs.a); break; } + case 8: { addr = DecodeReg(reg) + SignedB(regs.RdMem(regs.pc++)); break; } + case 9: { addr = DecodeReg(reg) + SignedW(FetchW()); break; } + case 11: { addr = DecodeReg(reg) + SignedW((regs.a << 8) | regs.b); break; } + case 12: { addr = regs.pc + SignedB(regs.RdMem(regs.pc++)); break; } + case 13: { addr = regs.pc + SignedW(FetchW()); break; } + } + } + } + + return addr; +} + +// +// Page zero instructions... +// + +static void Op00(void) // NEG DP +{ + addr = (regs.dp << 8) | regs.RdMem(regs.pc++); + tmp = 256 - regs.RdMem(addr); + regs.WrMem(addr, tmp); + + (tmp == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp & 0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (tmp > 0x7F ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust carry + + regs.clock += 6; +} + +static void Op01(void) // NEG DP (Undocumented) +{ + Op00(); +} + +static void Op03(void) // COM DP +{ + addr = (regs.dp << 8) | regs.RdMem(regs.pc++); + tmp = 0xFF ^ regs.RdMem(addr); + regs.WrMem(addr, tmp); + + regs.cc &= 0xFD; regs.cc |= 0x01; // CLV SEC + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + + regs.clock += 6; +} + +static void Op04(void) // LSR DP +{ + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); + tmp = regs.RdMem(addr); + (tmp&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift low bit into carry + tmp >>= 1; regs.WrMem(addr, tmp); + regs.cc &= 0xF7; // CLN + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + regs.clock += 6; +} +static void Op06(void) // ROR DP +{ + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); BYTE tmp2 = regs.RdMem(addr); + tmp = (tmp2>>1) + (regs.cc&0x01)*128; + regs.WrMem(addr, tmp); + (tmp2&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; +} +static void Op07(void) // ASR DP +{ + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); tmp = regs.RdMem(addr); + (tmp&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + tmp >>= 1; + if (tmp&0x40) tmp |= 0x80; // Set Neg if it was set + regs.WrMem(addr, tmp); + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; +} +static void Op08(void) // LSL DP +{ + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); // NEEDS OVERFLOW ADJUSTMENT + tmp = regs.RdMem(addr); + (tmp&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + tmp <<= 1; + regs.WrMem(addr, tmp); + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; +} +static void Op09(void) // ROL DP +{ + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); BYTE tmp2 = regs.RdMem(addr); + tmp = (tmp2<<1) + (regs.cc&0x01); + regs.WrMem(addr, tmp); + (tmp2&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + ((tmp2&0x80)^((tmp2<<1)&0x80) ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; +} +static void Op0A(void) // DEC DP +{ + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); + tmp = regs.RdMem(addr) - 1; + regs.WrMem(addr, tmp); + (tmp == 0x7F ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; +} +static void Op0C(void) // INC DP +{ + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); + tmp = regs.RdMem(addr) + 1; + regs.WrMem(addr, tmp); + (tmp == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; +} +static void Op0D(void) // TST DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // CLV + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; +} +static void Op0E(void) // JMP DP +{ + regs.pc = (regs.dp<<8) | regs.RdMem(regs.pc++); + regs.clock += 3; +} +static void Op0F(void) // CLR DP +{ + regs.WrMem((regs.dp<<8)|regs.RdMem(regs.pc++), 0); + regs.cc &= 0xF0; regs.cc |= 0x04; // CLN, SEZ, CLV, CLC + regs.clock += 6; +} + +static void Op10(void) // Page 1 opcode +{ + exec_op1[regs.RdMem(regs.pc++)](); +} + +static void Op11(void) // Page 2 opcode +{ + exec_op2[regs.RdMem(regs.pc++)](); +} + +static void Op12(void) // NOP +{ + regs.clock += 2; +} + +static void Op13(void) // SYNC +{ + regs.clock += 2; +} +static void Op16(void) // LBRA +{ + regs.pc += SignedW(FetchW()); + regs.clock += 5; +} +static void Op17(void) // LBSR +{ + addr = FetchW(); + regs.WrMem(--regs.s, regs.pc&0xFF); regs.WrMem(--regs.s, regs.pc>>8); + regs.pc += SignedW(addr); + regs.clock += 9; +} +static void Op19(void) // DAA +{ + if ((regs.cc&0x20) || ((regs.a&0x0F) > 0x09)) // H set or lo nyb too big? + { + regs.a += 0x06; regs.cc |= 0x20; // Then adjust & set half carry + } + if ((regs.cc&0x01) || (regs.a > 0x9F)) // C set or hi nyb too big? + { + regs.a += 0x60; regs.cc |= 0x01; // Then adjust & set carry + } + regs.cc &= 0xF1; // CL NZV + if (regs.a == 0) regs.cc |= 0x04; // Adjust Zero flag + if (regs.a&0x80) regs.cc |= 0x08; // Adjust Negative flag + regs.clock += 2; +} + +static void Op1A(void) // ORCC # +{ + regs.cc |= regs.RdMem(regs.pc++); + + regs.clock += 3; +} + +static void Op1C(void) // ANDCC # +{ + regs.cc &= regs.RdMem(regs.pc++); + + regs.clock += 3; +} + +static void Op1D(void) // SEX +{ + (regs.b & 0x80 ? regs.a = 0xFF : regs.a = 0x00); + + ((regs.a | regs.b) == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a & 0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + + regs.clock += 2; +} + +static void Op1E(void) // EXG +{ + tmp = regs.RdMem(regs.pc++); + addr = ReadEXG(tmp >> 4); + WriteEXG(tmp >> 4, ReadEXG(tmp & 0xF)); + WriteEXG(tmp & 0xF, addr); + + regs.clock += 8; +} + +static void Op1F(void) // TFR +{ + tmp = regs.RdMem(regs.pc++); + WriteEXG(tmp&0xF, ReadEXG(tmp>>4)); + regs.clock += 7; +} +static void Op20(void) // BRA +{ + regs.pc += SignedB(regs.RdMem(regs.pc++)); // Branch always + regs.clock += 3; +} +static void Op21(void) // BRN +{ + regs.RdMem(regs.pc++); + regs.clock += 3; +} +static void Op22(void) // BHI +{ + tmp = regs.RdMem(regs.pc++); + if (!(regs.cc&0x05)) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op23(void) // BLS +{ + tmp = regs.RdMem(regs.pc++); + if (regs.cc&0x05) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op24(void) // BCC (BHS) +{ + tmp = regs.RdMem(regs.pc++); + if (!(regs.cc&0x01)) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op25(void) // BCS (BLO) +{ + tmp = regs.RdMem(regs.pc++); + if (regs.cc&0x01) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op26(void) // BNE +{ + tmp = regs.RdMem(regs.pc++); + if (!(regs.cc&0x04)) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op27(void) // BEQ +{ + tmp = regs.RdMem(regs.pc++); + if (regs.cc&0x04) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op28(void) // BVC +{ + tmp = regs.RdMem(regs.pc++); + if (!(regs.cc&0x02)) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op29(void) // BVS +{ + tmp = regs.RdMem(regs.pc++); + if (regs.cc&0x02) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op2A(void) // BPL +{ + tmp = regs.RdMem(regs.pc++); + if (!(regs.cc&0x08)) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op2B(void) // BMI +{ + tmp = regs.RdMem(regs.pc++); + if (regs.cc&0x08) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op2C(void) // BGE +{ + tmp = regs.RdMem(regs.pc++); + if (!(((regs.cc&0x08) >> 2) ^ (regs.cc&0x02))) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op2D(void) // BLT +{ + tmp = regs.RdMem(regs.pc++); + if (((regs.cc&0x08) >> 2) ^ (regs.cc&0x02)) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op2E(void) // BGT +{ + tmp = regs.RdMem(regs.pc++); + if (!((regs.cc&0x04) | (((regs.cc&0x08) >> 2) ^ (regs.cc&0x02)))) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op2F(void) // BLE +{ + tmp = regs.RdMem(regs.pc++); + if ((regs.cc&0x04) | (((regs.cc&0x08) >> 2) ^ (regs.cc&0x02))) regs.pc += SignedB(tmp); + regs.clock += 3; +} +static void Op30(void) // LEAX +{ + regs.x = DecodeIDX(regs.RdMem(regs.pc++)); + (regs.x == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + regs.clock += 4; +} +static void Op31(void) // LEAY +{ + regs.y = DecodeIDX(regs.RdMem(regs.pc++)); + (regs.y == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + regs.clock += 4; +} +static void Op32(void) // LEAS +{ + regs.s = DecodeIDX(regs.RdMem(regs.pc++)); + (regs.s == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + regs.clock += 4; +} +static void Op33(void) // LEAU +{ + regs.u = DecodeIDX(regs.RdMem(regs.pc++)); + (regs.u == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + regs.clock += 4; +} +static void Op34(void) // PSHS +{ + tmp = regs.RdMem(regs.pc++); + if (tmp&0x80) { regs.WrMem(--regs.s, regs.pc&0xFF); regs.WrMem(--regs.s, regs.pc>>8); } + if (tmp&0x40) { regs.WrMem(--regs.s, regs.u&0xFF); regs.WrMem(--regs.s, regs.u>>8); } + if (tmp&0x20) { regs.WrMem(--regs.s, regs.y&0xFF); regs.WrMem(--regs.s, regs.y>>8); } + if (tmp&0x10) { regs.WrMem(--regs.s, regs.x&0xFF); regs.WrMem(--regs.s, regs.x>>8); } + if (tmp&0x08) regs.WrMem(--regs.s, regs.dp); + if (tmp&0x04) regs.WrMem(--regs.s, regs.b); + if (tmp&0x02) regs.WrMem(--regs.s, regs.a); + if (tmp&0x01) regs.WrMem(--regs.s, regs.cc); + regs.clock += 5; +} +static void Op35(void) // PULS +{ + tmp = regs.RdMem(regs.pc++); + if (tmp&0x01) regs.cc = regs.RdMem(regs.s++); + if (tmp&0x02) regs.a = regs.RdMem(regs.s++); + if (tmp&0x04) regs.b = regs.RdMem(regs.s++); + if (tmp&0x08) regs.dp = regs.RdMem(regs.s++); + if (tmp&0x10) regs.x = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); + if (tmp&0x20) regs.y = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); + if (tmp&0x40) regs.u = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); + if (tmp&0x80) regs.pc = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); + regs.clock += 5; +} + +static void Op36(void) // PSHU +{ + tmp = regs.RdMem(regs.pc++); + + if (tmp & 0x80) { regs.WrMem(--regs.u, regs.pc & 0xFF); regs.WrMem(--regs.u, regs.pc >> 8); } + if (tmp & 0x40) { regs.WrMem(--regs.u, regs.s & 0xFF); regs.WrMem(--regs.u, regs.s >> 8); } + if (tmp & 0x20) { regs.WrMem(--regs.u, regs.y & 0xFF); regs.WrMem(--regs.u, regs.y >> 8); } + if (tmp & 0x10) { regs.WrMem(--regs.u, regs.x & 0xFF); regs.WrMem(--regs.u, regs.x >> 8); } + if (tmp & 0x08) regs.WrMem(--regs.u, regs.dp); + if (tmp & 0x04) regs.WrMem(--regs.u, regs.b); + if (tmp & 0x02) regs.WrMem(--regs.u, regs.a); + if (tmp & 0x01) regs.WrMem(--regs.u, regs.cc); + + regs.clock += 5; +} + +static void Op37(void) // PULU +{ + tmp = regs.RdMem(regs.pc++); + if (tmp&0x01) regs.cc = regs.RdMem(regs.u++); + if (tmp&0x02) regs.a = regs.RdMem(regs.u++); + if (tmp&0x04) regs.b = regs.RdMem(regs.u++); + if (tmp&0x08) regs.dp = regs.RdMem(regs.u++); + if (tmp&0x10) regs.x = (regs.RdMem(regs.u++)<<8) | regs.RdMem(regs.u++); + if (tmp&0x20) regs.y = (regs.RdMem(regs.u++)<<8) | regs.RdMem(regs.u++); + if (tmp&0x40) regs.s = (regs.RdMem(regs.u++)<<8) | regs.RdMem(regs.u++); + if (tmp&0x80) regs.pc = (regs.RdMem(regs.u++)<<8) | regs.RdMem(regs.u++); + regs.clock += 5; +} +static void Op39(void) // RTS +{ + regs.pc = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); + regs.clock += 5; +} +static void Op3A(void) // ABX +{ + regs.x += regs.b; + regs.clock += 3; +} +static void Op3B(void) // RTI +{ + regs.cc = regs.RdMem(regs.s++); + if (regs.cc&0x80) // If E flag set, pull all regs + { + regs.a = regs.RdMem(regs.s++); regs.b = regs.RdMem(regs.s++); regs.dp = regs.RdMem(regs.s++); + regs.x = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); + regs.y = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); + regs.u = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); + regs.clock += 15; + } + else + { + regs.clock += 6; + } + regs.pc = (regs.RdMem(regs.s++)<<8) | regs.RdMem(regs.s++); +} +static void Op3C(void) // CWAI +{ + regs.cc &= regs.RdMem(regs.pc++); regs.cc |= 0x80; + regs.clock += 1000000; // Force interrupt +} +static void Op3D(void) // MUL +{ + addr = regs.a * regs.b; regs.a = addr>>8; regs.b = addr&0xFF; + (addr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero + (regs.b&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry + regs.clock += 11; +} +static void Op3E(void) // RESET +{ +} +static void Op3F(void) // SWI +{ +} +static void Op40(void) // NEGA +{ + regs.a = 256 - regs.a; + (regs.a > 0x7F ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust carry + (regs.a == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op43(void) // COMA +{ + regs.a ^= 0xFF; + regs.cc &= 0xFD; regs.cc |= 0x01; // CLV, SEC + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op44(void) // LSRA +{ + (regs.a&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift low bit into carry + regs.a >>= 1; + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op46(void) // RORA +{ + tmp = regs.a; regs.a = (tmp>>1) + (regs.cc&0x01)*128; + (tmp&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op47(void) // ASRA +{ + (regs.a&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + regs.a >>= 1; // Do the shift + if (regs.a&0x40) regs.a |= 0x80; // Set neg if it was set + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op48(void) // LSLA [Keep checking from here...] +{ + (regs.a&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + regs.a <<= 1; + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op49(void) // ROLA +{ + tmp = regs.a; regs.a = (tmp<<1) + (regs.cc&0x01); + (tmp&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op4A(void) // DECA +{ + regs.a--; + (regs.a == 0x7F ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op4C(void) // INCA + { + regs.a++; + (regs.a == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op4D(void) // TSTA + { + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op4F(void) // CLRA +{ + regs.a = 0; + regs.cc &= 0xF0; regs.cc |= 0x04; // Set NZVC + regs.clock += 2; +} +static void Op50(void) // NEGB + { + regs.b = 256 - regs.b; +// ((regs.b^tmp)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Adjust H carry + (regs.b == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.b > 0x7F ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust carry + regs.clock += 2; + } +static void Op53(void) // COMB + { + regs.b ^= 0xFF; + regs.cc &= 0xFD; regs.cc |= 0x01; // CLV, SEC + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op54(void) // LSRB + { + (regs.b&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift low bit into carry + regs.b >>= 1; + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op56(void) // RORB + { + tmp = regs.b; regs.b = (regs.b >> 1) + (regs.cc&0x01)*128; + (tmp&0x01 ? regs.cc |=0x01 : regs.cc &= 0xFE); // Shift bit into carry + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op57(void) // ASRB + { + (regs.b&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + regs.b >>= 1; // Do the shift + if (regs.b&0x40) regs.b |= 0x80; // Set neg if it was set + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op58(void) // LSLB + { + (regs.b&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + regs.b <<= 1; + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op59(void) // ROLB +{ + tmp = regs.b; + regs.b = (tmp<<1) + (regs.cc&0x01); + (tmp&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op5A(void) // DECB + { + regs.b--; + (regs.b == 0x7F ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op5C(void) // INCB + { + regs.b++; + (regs.b == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op5D(void) // TSTB + { + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op5F(void) // CLRB + { + regs.b = 0; + regs.cc &= 0xF0; regs.cc |= 0x04; // Set NZVC + regs.clock += 2; + } +static void Op60(void) // NEG IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + tmp = regs.RdMem(addr); BYTE res = 256 - tmp; + regs.WrMem(addr, res); +// ((res^tmp)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Adjust H carry + (res == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (res == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (res&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (res > 0x7F ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust carry + regs.clock += 6; + } +static void Op63(void) // COM IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + tmp = regs.RdMem(addr) ^ 0xFF; + regs.WrMem(addr, tmp); + regs.cc &= 0xFD; regs.cc |= 0x01; // CLV, SEC + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op64(void) // LSR IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + tmp = regs.RdMem(addr); + (tmp&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift low bit into carry + tmp >>= 1; regs.WrMem(addr, tmp); + regs.cc &= 0xF7; // CLN + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + regs.clock += 6; + } +static void Op66(void) // ROR IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + tmp = regs.RdMem(addr); BYTE tmp2 = tmp; + tmp = (tmp >> 1) + (regs.cc&0x01)*128; + regs.WrMem(addr, tmp); + (tmp2&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op67(void) // ASR IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + tmp = regs.RdMem(addr); + (tmp&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + tmp >>= 1; + if (tmp&0x40) tmp |= 0x80; // Set Neg if it was set + regs.WrMem(addr, tmp); + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op68(void) // LSL IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + tmp = regs.RdMem(addr); + (tmp&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + tmp <<= 1; + regs.WrMem(addr, tmp); + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op69(void) // ROL IDX +{ + BYTE tmp2 = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + tmp = (tmp2<<1) + (regs.cc&0x01); + regs.WrMem(addr, tmp); + (tmp2&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; +} +static void Op6A(void) // DEC IDX + { + BYTE tmp; WORD addr; + addr = DecodeIDX(regs.RdMem(regs.pc++)); + tmp = regs.RdMem(addr) - 1; + regs.WrMem(addr, tmp); + (tmp == 0x7F ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op6C(void) // INC IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + tmp = regs.RdMem(addr) + 1; + regs.WrMem(addr, tmp); + (tmp == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op6D(void) // TST IDX + { + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op6E(void) // JMP IDX +{ + regs.pc = DecodeIDX(regs.RdMem(regs.pc++)); + regs.clock += 3; +} +static void Op6F(void) // CLR IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.WrMem(addr, 0); + regs.cc &= 0xF0; regs.cc |= 0x04; // Set NZVC + regs.clock += 6; +} +static void Op70(void) // NEG ABS + { + addr = FetchW(); + tmp = regs.RdMem(addr); BYTE res = 256 - tmp; + regs.WrMem(addr, res); + (res == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (res == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (res&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (res > 0x7F ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust carry + regs.clock += 7; + } +static void Op73(void) // COM ABS + { + addr = FetchW(); + tmp = regs.RdMem(addr) ^ 0xFF; + regs.WrMem(addr, tmp); + regs.cc &= 0xFD; regs.cc |= 0x01; // CLV, SEC + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } +static void Op74(void) // LSR ABS + { + addr = FetchW(); + tmp = regs.RdMem(addr); + (tmp&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift low bit into carry + tmp >>= 1; regs.WrMem(addr, tmp); + regs.cc &= 0xF7; // CLN + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + regs.clock += 7; + } +static void Op76(void) // ROR ABS + { + BYTE tmp; WORD addr; + addr = FetchW(); + tmp = regs.RdMem(addr); BYTE tmp2 = tmp; + tmp = (tmp >> 1) + (regs.cc&0x01)*128; + regs.WrMem(addr, tmp); + (tmp2&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } +static void Op77(void) // ASR ABS + { + BYTE tmp; WORD addr; + addr = FetchW(); + tmp = regs.RdMem(addr); + (tmp&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry + tmp >>= 1; + if (tmp&0x40) tmp |= 0x80; // Set Neg if it was set + regs.WrMem(addr, tmp); + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } +static void Op78(void) // LSL ABS + { + BYTE tmp; WORD addr; + addr = FetchW(); + tmp = regs.RdMem(addr); + (tmp&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + tmp <<= 1; + regs.WrMem(addr, tmp); + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } +static void Op79(void) // ROL ABS +{ + BYTE tmp2 = regs.RdMem(FetchW()); + tmp = (tmp2<<1) + (regs.cc&0x01); + regs.WrMem(addr, tmp); + (tmp2&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; +} +static void Op7A(void) // DEC ABS + { + BYTE tmp; WORD addr; + addr = FetchW(); + tmp = regs.RdMem(addr) - 1; + regs.WrMem(addr, tmp); + (tmp == 0x7F ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } +static void Op7C(void) // INC ABS + { + BYTE tmp; WORD addr; + addr = FetchW(); + tmp = regs.RdMem(addr) + 1; + regs.WrMem(addr, tmp); + (tmp == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } + +static void Op7D(void) // TST ABS +{ + BYTE tmp = regs.RdMem(FetchW()); + + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + + regs.clock += 7; +} + +static void Op7E(void) // JMP ABS +{ + regs.pc = FetchW(); + regs.clock += 3; +} +static void Op7F(void) // CLR ABS + { + regs.WrMem(FetchW(), 0); + regs.cc &= 0xF0; regs.cc |= 0x04; // Set NZVC + regs.clock += 7; + } +static void Op80(void) // SUBA # +{ + BYTE tmp = regs.RdMem(regs.pc++); BYTE as = regs.a; + regs.a -= tmp; + (as < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((as^tmp^regs.a^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op81(void) // CMPA # +{ + tmp = regs.RdMem(regs.pc++); + BYTE db = regs.a - tmp; + (regs.a < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.a^tmp^db^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (db == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (db&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op82(void) // SBCA # +{ + tmp = regs.RdMem(regs.pc++); BYTE as = regs.a; + regs.a = regs.a - tmp - (regs.cc&0x01); + (as < (tmp+(regs.cc&0x01)) ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((as^tmp^regs.a^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void Op83(void) // SUBD # +{ + addr = FetchW(); WORD dr = (regs.a<<8)|regs.b, ds = dr; + dr -= addr; + (ds < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((ds^addr^dr^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (dr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.a = dr>>8; regs.b = dr&0xFF; + regs.clock += 4; +} +static void Op84(void) // ANDA # + { + regs.a &= regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op85(void) // BITA # + { + tmp = regs.a & regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op86(void) // LDA # + { + regs.a = regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op88(void) // EORA # + { + regs.a ^= regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op89(void) // ADCA # +{ + tmp = regs.RdMem(regs.pc++); + addr = (WORD)regs.a + (WORD)tmp + (WORD)(regs.cc&0x01); + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry + ((regs.a^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.a^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.a = addr & 0xFF; // Set accumulator + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative + regs.clock += 2; +} +static void Op8A(void) // ORA # + { + regs.a |= regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void Op8B(void) // ADDA # +{ + tmp = regs.RdMem(regs.pc++); addr = regs.a + tmp; + (addr > 0xFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.a^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.a^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.a = addr & 0xFF; // Set accumulator + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 2; +} +static void Op8C(void) // CMPX # +{ + addr = FetchW(); + WORD dw = regs.x - addr; + (regs.x < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.x^addr^dw^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; +} +static void Op8D(void) // Bregs.s + { + tmp = regs.RdMem(regs.pc++); + regs.WrMem(--regs.s, regs.pc&0xFF); regs.WrMem(--regs.s, regs.pc>>8); + regs.pc += SignedB(tmp); + regs.clock += 7; + } +static void Op8E(void) // LDX # + { + regs.x = FetchW(); + regs.cc &= 0xFD; // CLV + (regs.x == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.x&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 3; + } +static void Op90(void) // SUBA DP + { + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); BYTE as = regs.a; + regs.a -= tmp; + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (as < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((as^tmp^regs.a^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 4; + } +static void Op91(void) // CMPA DP + { + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + BYTE db = regs.a - tmp; + (db == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (db&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.a < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.a^tmp^db^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 4; + } +static void Op92(void) // SBCA DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); BYTE as = regs.a; + regs.a = regs.a - tmp - (regs.cc&0x01); + (as < (tmp+(regs.cc&0x01)) ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((as^tmp^regs.a^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; +} +static void Op93(void) // SUBD DP +{ + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); WORD dr = (regs.a<<8)|regs.b, ds = dr; + WORD adr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + dr -= adr2; + (ds < adr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((ds^adr2^dr^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (dr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.a = dr>>8; regs.b = dr&0xFF; + regs.clock += 6; +} +static void Op94(void) // ANDA DP +{ + regs.a &= regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.a == 0) regs.cc |= 0x04; // Adjust Zero flag + if (regs.a&0x80) regs.cc |= 0x08; // Adjust Negative flag + regs.clock += 4; +} +static void Op95(void) // BITA DP + { + tmp = regs.a & regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void Op96(void) // LDA DP +{ + regs.a = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xF1; // CLN CLZ CLV + if (regs.a == 0) regs.cc |= 0x04; // Set Zero flag + if (regs.a&0x80) regs.cc |= 0x08; // Set Negative flag + regs.clock += 4; +} +static void Op97(void) // STA DP + { + regs.WrMem((regs.dp<<8)|regs.RdMem(regs.pc++), regs.a); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void Op98(void) // EORA DP + { + regs.a ^= regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void Op99(void) // ADCA DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + addr = (WORD)regs.a + (WORD)tmp + (WORD)(regs.cc&0x01); + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry + ((regs.a^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.a^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.a = addr & 0xFF; // Set accumulator + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative + regs.clock += 4; +} +static void Op9A(void) // ORA DP + { + regs.a |= regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void Op9B(void) // ADDA DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + addr = (WORD)regs.a + (WORD)tmp; + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.a^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.a^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflo + regs.a = addr & 0xFF; // Set accumulator + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 4; +} +static void Op9C(void) // CMPX DP + { + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + WORD adr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + WORD dw = regs.x - adr2; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.x < adr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.x^adr2^dw^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 6; + } +static void Op9D(void) // JSR DP + { + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); + regs.WrMem(--regs.s, regs.pc&0xFF); regs.WrMem(--regs.s, regs.pc>>8); + regs.pc = addr; // JSR to DP location... + regs.clock += 7; + } +static void Op9E(void) // LDX DP + { + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); + regs.x = (regs.RdMem(addr) << 8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.x == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.x&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; + } +static void Op9F(void) // STX DP + { + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); + regs.WrMem(addr, regs.x>>8); regs.WrMem(addr+1, regs.x&0xFF); + regs.cc &= 0xFD; // CLV + (regs.x == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.x&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; + } +static void OpA0(void) // SUBA IDX + { + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); BYTE as = regs.a; + regs.a -= tmp; + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (as < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((as^tmp^regs.a^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 4; + } +static void OpA1(void) // CMPA IDX + { + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + BYTE db = regs.a - tmp; + (db == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (db&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.a < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.a^tmp^db^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 4; + } +static void OpA2(void) // SBCA IDX +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); BYTE as = regs.a; + regs.a = regs.a - tmp - (regs.cc&0x01); + (as < (tmp+(regs.cc&0x01)) ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((as^tmp^regs.a^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; +} +static void OpA3(void) // SUBD IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); WORD dr = (regs.a<<8)|regs.b, ds = dr; + WORD adr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + dr -= adr2; + (ds < adr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((ds^adr2^dr^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (dr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.a = dr>>8; regs.b = dr&0xFF; + regs.clock += 6; +} +static void OpA4(void) // ANDA IDX + { + regs.a &= regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpA5(void) // BITA IDX + { + tmp = regs.a & regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpA6(void) // LDA IDX +{ + regs.a = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.a == 0) regs.cc |= 0x04; // Set Zero flag + if (regs.a&0x80) regs.cc |= 0x08; // Set Negative flag + regs.clock += 4; +} +static void OpA7(void) // STA IDX +{ + regs.WrMem(DecodeIDX(regs.RdMem(regs.pc++)), regs.a); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.a == 0) regs.cc |= 0x04; // Set Zero flag + if (regs.a&0x80) regs.cc |= 0x08; // Set Negative flag + regs.clock += 4; +} +static void OpA8(void) // EORA IDX + { + regs.a ^= regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpA9(void) // ADCA IDX +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + addr = (WORD)regs.a + (WORD)tmp + (WORD)(regs.cc&0x01); + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.a^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.a^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflo + regs.a = addr & 0xFF; // Set accumulator + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 4; +} +static void OpAA(void) // ORA IDX +{ + regs.a |= regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; +} +static void OpAB(void) // ADDA IDX +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + addr = (WORD)regs.a + (WORD)tmp; + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.a^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.a^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflo + regs.a = addr & 0xFF; // Set accumulator + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 4; +} +static void OpAC(void) // CMPX IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + WORD dw = regs.x - addr2; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.x < addr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.x^addr2^dw^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 6; +} +static void OpAD(void) // JSR IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.WrMem(--regs.s, regs.pc&0xFF); regs.WrMem(--regs.s, regs.pc>>8); + regs.pc = addr; // Jregs.s directly to IDX ptr + regs.clock += 7; +} +static void OpAE(void) // LDX IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.x = (regs.RdMem(addr) << 8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.x == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.x&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpAF(void) // STX IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.WrMem(addr, regs.x>>8); regs.WrMem(addr+1, regs.x&0xFF); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.x == 0) regs.cc |= 0x04; // Set Zero flag + if (regs.x&0x8000) regs.cc |= 0x08; // Set Negative flag + regs.clock += 5; +} +static void OpB0(void) // SUBA ABS + { + tmp = regs.RdMem(FetchW()); BYTE as = regs.a; + regs.a -= tmp; + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (as < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((as^tmp^regs.a^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 5; + } +static void OpB1(void) // CMPA ABS + { + tmp = regs.RdMem(FetchW()); + BYTE db = regs.a - tmp; + (db == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (db&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.a < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.a^tmp^db^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 5; + } +static void OpB2(void) // SBCA ABS +{ + tmp = regs.RdMem(FetchW()); BYTE as = regs.a; + regs.a = regs.a - tmp - (regs.cc&0x01); + (as < (tmp+(regs.cc&0x01)) ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((as^tmp^regs.a^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpB3(void) // SUBD ABS +{ + addr = FetchW(); WORD dr = (regs.a<<8)|regs.b, ds = dr; + WORD adr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + dr -= adr2; + (ds < adr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((ds^adr2^dr^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + (dr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.a = dr>>8; regs.b = dr&0xFF; + regs.clock += 7; +} +static void OpB4(void) // ANDA ABS +{ + regs.a &= regs.RdMem(FetchW()); + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpB5(void) // BITA ABS +{ + tmp = regs.a & regs.RdMem(FetchW()); + regs.cc &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpB6(void) // LDA ABS +{ + regs.a = regs.RdMem(FetchW()); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpB7(void) // STA ABS +{ + regs.WrMem(FetchW(), regs.a); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpB8(void) // EORA ABS +{ + regs.a ^= regs.RdMem(FetchW()); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpB9(void) // ADCA ABS +{ + tmp = regs.RdMem(FetchW()); + addr = (WORD)regs.a + (WORD)tmp + (WORD)(regs.cc&0x01); + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.a^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.a^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.a = addr; // Set accumulator + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 5; +} +static void OpBA(void) // ORA ABS +{ + regs.a |= regs.RdMem(FetchW()); + regs.cc &= 0xFD; // CLV + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpBB(void) // ADDA ABS +{ + tmp = regs.RdMem(FetchW()); + addr = (WORD)regs.a + (WORD)tmp; + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.a^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.a^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflo + regs.a = addr & 0xFF; // Set accumulator + (regs.a == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 5; +} +static void OpBC(void) // CMPX ABS +{ + addr = FetchW(); WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + WORD dw = regs.x - addr2; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.x < addr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.x^addr2^dw^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 7; +} +static void OpBD(void) // JSR ABS +{ + addr = FetchW(); + regs.WrMem(--regs.s, regs.pc&0xFF); regs.WrMem(--regs.s, regs.pc>>8); + regs.pc = addr; // Go to absolute address (Not indir) + regs.clock += 8; +} + +static void OpBE(void) // LDX ABS +{ +// addr = FetchW(); +// regs.x = (regs.RdMem(addr) << 8) | regs.RdMem(addr+1); + regs.x = RdMemW(FetchW()); + + regs.cc &= 0xFD; // CLV + (regs.x == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.x&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + + regs.clock += 6; +} + +static void OpBF(void) // STX ABS +{ +// addr = FetchW(); +// regs.WrMem(addr, regs.x>>8); regs.WrMem(addr+1, regs.x&0xFF); + WrMemW(FetchW(), regs.x); + + regs.cc &= 0xFD; // CLV + (regs.x == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.x&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + + regs.clock += 6; +} + +static void OpC0(void) // SUBB # + { + tmp = regs.RdMem(regs.pc++); BYTE bs = regs.b; + regs.b -= tmp; + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (bs < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((bs^tmp^regs.b^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 2; + } +static void OpC1(void) // CMPB # + { + tmp = regs.RdMem(regs.pc++); + BYTE db = regs.b - tmp; + (regs.b < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.b^tmp^db^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (db == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (db&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void OpC2(void) // SBCB # +{ + tmp = regs.RdMem(regs.pc++); BYTE bs = regs.b; + regs.b = regs.b - tmp - (regs.cc&0x01); + (bs < (tmp+(regs.cc&0x01)) ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((bs^tmp^regs.b^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; +} +static void OpC3(void) // ADDD # +{ + addr = FetchW(); long dr = ((regs.a<<8)|regs.b)&0xFFFF, ds = dr; + dr += addr; + (dr > 0xFFFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + dr &= 0xFFFF; + (dr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + ((ds^addr^dr^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.a = dr>>8; regs.b = dr&0xFF; + regs.clock += 4; +} +static void OpC4(void) // ANDB # + { + regs.b &= regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void OpC5(void) // BITB # +{ + tmp = regs.b & regs.RdMem(regs.pc++); + regs.cc &= 0xF1; // CLV CLZ CLN + if (tmp == 0) regs.cc |= 0x04; // Set Zero flag + if (tmp&0x80) regs.cc |= 0x08; // Set Negative flag + regs.clock += 2; +} +static void OpC6(void) // LDB # +{ + regs.b = regs.RdMem(regs.pc++); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.b == 0) regs.cc |= 0x04; // Set Zero flag + if (regs.b&0x80) regs.cc |= 0x08; // Set Negative flag + regs.clock += 2; +} +static void OpC8(void) // EORB # + { + regs.b ^= regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void OpC9(void) // ADCB # +{ + tmp = regs.RdMem(regs.pc++); + addr = (WORD)regs.b + (WORD)tmp + (WORD)(regs.cc&0x01); + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.b^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.b^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflo + regs.b = addr & 0xFF; // Set accumulator + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 2; +} +static void OpCA(void) // ORB # + { + regs.b |= regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 2; + } +static void OpCB(void) // ADDB # +{ + tmp = regs.RdMem(regs.pc++); addr = regs.b + tmp; + (addr > 0xFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.b^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.b^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflo + regs.b = addr & 0xFF; // Set accumulator + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 2; +} +static void OpCC(void) // LDD # +{ + regs.a = regs.RdMem(regs.pc++); regs.b = regs.RdMem(regs.pc++); + regs.cc &= 0xFD; // CLV + ((regs.a+regs.b) == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 3; +} +static void OpCE(void) // LDU # +{ + regs.u = FetchW(); + regs.cc &= 0xFD; // CLV + (regs.u == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.u&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 3; +} +static void OpD0(void) // SUBB DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); BYTE bs = regs.b; + regs.b -= tmp; + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (bs < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((bs^tmp^regs.b^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 4; +} +static void OpD1(void) // CMPB DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + BYTE db = regs.b - tmp; + (db == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (db&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.b < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.b^tmp^db^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 4; +} +static void OpD2(void) // SBCB DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); BYTE bs = regs.b; + regs.b = regs.b - tmp - (regs.cc&0x01); + (bs < (tmp+(regs.cc&0x01)) ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((bs^tmp^regs.b^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; +} +static void OpD3(void) // ADDD DP +{ + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); long dr = ((regs.a<<8)|regs.b)&0xFFFF, ds = dr; + WORD adr2 = (regs.RdMem(addr)<<8)|regs.RdMem(addr+1); + dr += adr2; + (dr > 0xFFFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + dr &= 0xFFFF; + (dr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + ((ds^adr2^dr^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.a = dr>>8; regs.b = dr&0xFF; + regs.clock += 6; +} +static void OpD4(void) // ANDB DP + { + regs.b &= regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpD5(void) // BITB DP + { + tmp = regs.b & regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpD6(void) // LDB DP +{ + regs.b = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; +} +static void OpD7(void) // STB DP + { + regs.WrMem((regs.dp<<8)|regs.RdMem(regs.pc++), regs.b); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpD8(void) // EORB DP + { + regs.b ^= regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpD9(void) // ADCB DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + addr = (WORD)regs.b + (WORD)tmp + (WORD)(regs.cc&0x01); + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.b^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.b^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.b = addr; // Set accumulator + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 4; +} +static void OpDA(void) // ORB DP + { + regs.b |= regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpDB(void) // ADDB DP +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); + addr = (WORD)regs.b + (WORD)tmp; + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.b^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.b^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.b = addr & 0xFF; // Set accumulator + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 4; +} +static void OpDC(void) // LDD DP +{ + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + regs.a = regs.RdMem(addr); regs.b = regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + ((regs.a|regs.b) == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpDD(void) // STD DP +{ + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + regs.WrMem(addr, regs.a); regs.WrMem(addr+1, regs.b); + regs.cc &= 0xFD; // CLV + ((regs.a|regs.b) == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpDE(void) // LDU DP +{ + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + regs.u = (regs.RdMem(addr) << 8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.u == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.u&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpDF(void) // STU DP +{ + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + regs.WrMem(addr, regs.u>>8); regs.WrMem(addr+1, regs.u&0xFF); + regs.cc &= 0xFD; // CLV + (regs.u == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.u&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; +} +static void OpE0(void) // SUBB IDX +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); BYTE bs = regs.b; + regs.b -= tmp; + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (bs < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((bs^tmp^regs.b^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 4; +} +static void OpE1(void) // CMPB IDX +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + BYTE db = regs.b - tmp; + (db == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (db&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.b < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.b^tmp^db^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 4; +} +static void OpE2(void) // SBCB IDX +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); BYTE bs = regs.b; + regs.b = regs.b - tmp - (regs.cc&0x01); + (bs < (tmp+(regs.cc&0x01)) ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((bs^tmp^regs.b^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; +} +static void OpE3(void) // ADDD IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); long dr = ((regs.a<<8)|regs.b)&0xFFFF, ds = dr; + WORD adr2 = (regs.RdMem(addr)<<8)|regs.RdMem(addr+1); + dr += adr2; + (dr > 0xFFFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + dr &= 0xFFFF; + (dr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + ((ds^adr2^dr^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.a = dr>>8; regs.b = dr&0xFF; + regs.clock += 6; +} +static void OpE4(void) // ANDB IDX + { + regs.b &= regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpE5(void) // BITB IDX + { + tmp = regs.b & regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpE6(void) // LDB IDX + { + regs.b = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpE7(void) // STB IDX +{ + regs.WrMem(DecodeIDX(regs.RdMem(regs.pc++)), regs.b); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.b == 0) regs.cc |= 0x04; // Adjust Zero flag + if (regs.b&0x80) regs.cc |= 0x08; // Adjust Negative flag + regs.clock += 4; +} +static void OpE8(void) // EORB IDX + { + regs.b ^= regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpE9(void) // ADCB IDX +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + addr = (WORD)regs.b + (WORD)tmp + (WORD)(regs.cc&0x01); + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.b^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.b^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.b = addr; // Set accumulator + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 4; +} +static void OpEA(void) // ORB IDX + { + regs.b |= regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void OpEB(void) // ADDB IDX +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + addr = (WORD)regs.b + (WORD)tmp; + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.b^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.b^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.b = addr; // Set accumulator + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 4; +} +static void OpEC(void) // LDD IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.a = regs.RdMem(addr); regs.b = regs.RdMem(addr+1); + regs.cc &= 0xF1; // CLV CLZ CLN + if (!(regs.a|regs.b)) regs.cc |= 0x04; // Adjust Zero flag + if (regs.a&0x80) regs.cc |= 0x08; // Adjust Negative flag + regs.clock += 5; +} +static void OpED(void) // STD IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.WrMem(addr, regs.a); regs.WrMem(addr+1, regs.b); + regs.cc &= 0xF1; // CLV CLZ CLZ + if (!(regs.a|regs.b)) regs.cc |= 0x04; // Adjust Zero flag + if (regs.a&0x80) regs.cc |= 0x08; // Adjust Negative flag + regs.clock += 5; +} +static void OpEE(void) // LDU IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.u = (regs.RdMem(addr) << 8) | regs.RdMem(addr+1); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.u == 0) regs.cc |= 0x04; // Set Zero flag + if (regs.u&0x8000) regs.cc |= 0x08; // Set Negative flag + regs.clock += 5; +} +static void OpEF(void) // STU IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.WrMem(addr, regs.u>>8); regs.WrMem(addr+1, regs.u&0xFF); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.u == 0) regs.cc |= 0x04; // Set Zero flag + if (regs.u&0x8000) regs.cc |= 0x08; // Set Negative flag + regs.clock += 5; +} +static void OpF0(void) // SUBB ABS + { + tmp = regs.RdMem(FetchW()); BYTE bs = regs.b; + regs.b -= tmp; + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (bs < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((bs^tmp^regs.b^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + } +static void OpF1(void) // CMPB ABS + { + tmp = regs.RdMem(FetchW()); + BYTE db = regs.b - tmp; + (db == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (db&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.b < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.b^tmp^db^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 5; + } +static void OpF2(void) // SBCB ABS +{ + tmp = regs.RdMem(FetchW()); BYTE bs = regs.b; + regs.b = regs.b - tmp - (regs.cc&0x01); + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (bs < tmp ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((bs^tmp^regs.b^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflow + regs.clock += 5; +} +static void OpF3(void) // ADDD ABS +{ + addr = FetchW(); long dr = ((regs.a<<8)|regs.b)&0xFFFF, ds = dr; + WORD adr2 = (regs.RdMem(addr)<<8)|regs.RdMem(addr+1); + dr += adr2; + (dr > 0xFFFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + dr &= 0xFFFF; + (dr == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + ((ds^adr2^dr^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.a = dr>>8; regs.b = dr&0xFF; + regs.clock += 7; +} +static void OpF4(void) // ANDB ABS + { + regs.b &= regs.RdMem(FetchW()); + regs.cc &= 0xFD; // Clear oVerflow flag + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; + } +static void OpF5(void) // BITB ABS + { + tmp = regs.b & regs.RdMem(FetchW()); + regs.cc &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; + } +static void OpF6(void) // LDB ABS + { + regs.b = regs.RdMem(FetchW()); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; + } +static void OpF7(void) // STB ABS + { + regs.WrMem(FetchW(), regs.b); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; + } +static void OpF8(void) // EORB ABS + { + regs.b ^= regs.RdMem(FetchW()); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; + } +static void OpF9(void) // ADCB ABS +{ + tmp = regs.RdMem(FetchW()); + addr = (WORD)regs.b + (WORD)tmp + (WORD)(regs.cc&0x01); + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.b^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.b^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflo + regs.b = addr & 0xFF; // Set accumulator + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 5; +} +static void OpFA(void) // ORB ABS + { + regs.b |= regs.RdMem(FetchW()); + regs.cc &= 0xFD; // CLV + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 5; + } +static void OpFB(void) // ADDB ABS +{ + tmp = regs.RdMem(FetchW()); + addr = (WORD)regs.b + (WORD)tmp; + (addr > 0x00FF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Set Carry flag + ((regs.b^tmp^addr)&0x10 ? regs.cc |= 0x20 : regs.cc &= 0xDF); // Set Half carry + ((regs.b^tmp^addr^(regs.cc<<7))&0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerflo + regs.b = addr & 0xFF; // Set accumulator + (regs.b == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Set Zero flag + (regs.b&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Set Negative flag + regs.clock += 5; +} +static void OpFC(void) // LDD ABS + { + addr = FetchW(); + regs.a = regs.RdMem(addr); regs.b = regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + ((regs.a+regs.b) == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void OpFD(void) // STD ABS + { + addr = FetchW(); + regs.WrMem(addr, regs.a); regs.WrMem(addr+1, regs.b); + regs.cc &= 0xFD; // CLV + ((regs.a+regs.b) == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void OpFE(void) // LDU ABS + { + addr = FetchW(); + regs.u = (regs.RdMem(addr) << 8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.u == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.u&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void OpFF(void) // STU ABS + { + addr = FetchW(); + regs.WrMem(addr, regs.u>>8); regs.WrMem(addr+1, regs.u&0xFF); + regs.cc &= 0xFD; // CLV + (regs.u == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.u&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } + +// +// Page one opcodes' execute code +// + +static void Op1021(void) // LBRN +{ + addr = FetchW(); + regs.clock += 5; +} +static void Op1022(void) // LBHI +{ + addr = FetchW(); + if (!((regs.cc&0x01)|(regs.cc&0x04))) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op1023(void) // LBLS +{ + addr = FetchW(); + if ((regs.cc&0x01)|(regs.cc&0x04)) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op1024(void) // LBCC (LBHS) +{ + addr = FetchW(); + if (!(regs.cc&0x01)) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op1025(void) // LBCS (LBLO) +{ + addr = FetchW(); + if (regs.cc&0x01) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op1026(void) // LBNE +{ + addr = FetchW(); + if (!(regs.cc&0x04)) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op1027(void) // LBEQ +{ + addr = FetchW(); + if (regs.cc&0x04) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op1028(void) // LBVC +{ + addr = FetchW(); + if (!(regs.cc&0x02)) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op1029(void) // LBVS +{ + addr = FetchW(); + if (regs.cc&0x02) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op102A(void) // LBPL +{ + addr = FetchW(); + if (!(regs.cc&0x08)) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op102B(void) // LBMI +{ + addr = FetchW(); + if (regs.cc&0x08) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op102C(void) // LBGE +{ + addr = FetchW(); + if (!(((regs.cc&0x08) >> 2) ^ (regs.cc&0x02))) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op102D(void) // LBLT +{ + addr = FetchW(); + if (((regs.cc&0x08) >> 2) ^ (regs.cc&0x02)) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op102E(void) // LBGT +{ + addr = FetchW(); + if (!((regs.cc&0x04) | (((regs.cc&0x08) >> 2) ^ (regs.cc&0x02)))) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op102F(void) // LBLE +{ + addr = FetchW(); + if ((regs.cc&0x04) | (((regs.cc&0x08) >> 2) ^ (regs.cc&0x02))) regs.pc += SignedW(addr); + regs.clock += 5; +} +static void Op103F(void) // SWI2 (Not yet implemented) +{ + regs.clock += 20; +} +static void Op1083(void) // CMPD # + { + addr = FetchW(); WORD dr = (regs.a<<8)|regs.b; + WORD dw = dr - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (dr < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((dr^addr^dw^((WORD)regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 5; + } +static void Op108C(void) // CMPY # + { + addr = FetchW(); + WORD dw = regs.y - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.y < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.y^addr^dw^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 5; + } +static void Op108E(void) // LDY # + { + regs.y = FetchW(); + regs.cc &= 0xFD; // CLV + (regs.y == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.y&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void Op1093(void) // CMPD DP + { + WORD adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++), dr = (regs.a<<8)|regs.b; + addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); + WORD dw = dr - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (dr < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((dr^addr^dw^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 7; + } +static void Op109C(void) // CMPY DP + { + WORD adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); + addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); + WORD dw = regs.y - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.y < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + ((regs.y^addr^dw^(regs.cc<<15))&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 7; + } + +static void Op109E(void) // LDY DP + { + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + regs.y = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.y == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.y&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } + +static void Op109F(void) // STY DP + { + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + regs.WrMem(addr, regs.y>>8); regs.WrMem(addr+1, regs.y&0xFF); + regs.cc &= 0xFD; // CLV + (regs.y == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.y&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op10A3(void) // CMPD IDX +{ + WORD adr2 = DecodeIDX(regs.RdMem(regs.pc++)), dr = (regs.a<<8)|regs.b; + addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); + WORD dw = dr - addr; + regs.cc &= 0xF0; // CLC CLV CLZ CLN + if (dr < addr) regs.cc |= 0x01; // Set Carry flag + if ((dr^addr^dw^(regs.cc<<15))&0x8000) regs.cc |= 0x02; // Set oVerflow + if (dw == 0) regs.cc |= 0x04; // Set Zero flag + if (dw&0x8000) regs.cc |= 0x08; // Set Negative flag + regs.clock += 7; +} +static void Op10AC(void) // CMPY IDX + { + WORD adr2 = DecodeIDX(regs.RdMem(regs.pc++)); + addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); + WORD dw = regs.y - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.y < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.y^addr^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 7; + } +static void Op10AE(void) // LDY IDX +{ + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.y = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + regs.cc &= 0xF1; // CLV CLZ CLN + if (regs.y == 0) regs.cc |= 0x04; // Adjust Zero flag + if (regs.y&0x8000) regs.cc |= 0x08; // Adjust Negative flag + regs.clock += 6; +} +static void Op10AF(void) // STY IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.WrMem(addr, regs.y>>8); regs.WrMem(addr+1, regs.y&0xFF); + regs.cc &= 0xFD; // CLV + (regs.y == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.y&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op10B3(void) // CMPD ABS + { + addr = FetchW(); WORD dr = (regs.a<<8)|regs.b; + WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + WORD dw = dr - addr2; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (dr < addr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^dr^addr2^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 8; + } +static void Op10BC(void) // CMPY ABS + { + addr = FetchW(); WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + WORD dw = regs.y - addr2; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.y < addr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.y^addr2^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 8; + } +static void Op10BE(void) // LDY ABS + { + addr = FetchW(); + regs.y = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.y == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.y&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } +static void Op10BF(void) // STY ABS + { + addr = FetchW(); + regs.WrMem(addr, regs.y>>8); regs.WrMem(addr+1, regs.y&0xFF); + regs.cc &= 0xFD; // CLV + (regs.y == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.y&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } +static void Op10CE(void) // LDS # + { + regs.s = FetchW(); + regs.cc &= 0xFD; // CLV + (regs.s == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.s&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 4; + } +static void Op10DE(void) // LDS DP + { + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + regs.s = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.s == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.s&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op10DF(void) // STS DP + { + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); + regs.WrMem(addr, regs.s>>8); regs.WrMem(addr+1, regs.s&0xFF); + regs.cc &= 0xFD; // CLV + (regs.s == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.s&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op10EE(void) // LDS IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.s = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.s == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.s&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op10EF(void) // STS IDX + { + addr = DecodeIDX(regs.RdMem(regs.pc++)); + regs.WrMem(addr, regs.s>>8); regs.WrMem(addr+1, regs.s&0xFF); + regs.cc &= 0xFD; // CLV + (regs.s == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.s&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 6; + } +static void Op10FE(void) // LDS ABS + { + addr = FetchW(); + regs.s = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + regs.cc &= 0xFD; // CLV + (regs.s == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.s&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; + } +static void Op10FF(void) // STS ABS +{ + addr = FetchW(); + regs.WrMem(addr, regs.s>>8); regs.WrMem(addr+1, regs.s&0xFF); + regs.cc &= 0xFD; // CLV + (regs.s == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (regs.s&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + regs.clock += 7; +} + +// +// Page two opcodes' execute code +// + +static void Op113F(void) // SWI3 + { + regs.clock += 20; + } +static void Op1183(void) // CMPU # + { + addr = FetchW(); + WORD dw = regs.u - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.u < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.u^addr^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 5; + } +static void Op118C(void) // CMPS # + { + addr = FetchW(); + WORD dw = regs.s - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.s < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.s^addr^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 5; + } +static void Op1193(void) // CMPU DP + { + WORD adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); + addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); + WORD dw = regs.u - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.u < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.u^addr^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 7; + } +static void Op119C(void) // CMPS DP + { + WORD adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); + addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); + WORD dw = regs.s - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.s < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.s^addr^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 7; + } +static void Op11A3(void) // CMPU IDX + { + WORD addr2 = DecodeIDX(regs.RdMem(regs.pc++)); + addr = (regs.RdMem(addr2)<<8) | regs.RdMem(addr2+1); + WORD dw = regs.u - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.u < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.u^addr^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 7; + } +static void Op11AC(void) // CMPS IDX + { + WORD addr2 = DecodeIDX(regs.RdMem(regs.pc++)); + addr = (regs.RdMem(addr2)<<8) | regs.RdMem(addr2+1); + WORD dw = regs.s - addr; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.s < addr ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.s^addr^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 7; + } +static void Op11B3(void) // CMPU ABS + { + addr = FetchW(); WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + WORD dw = regs.u - addr2; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.u < addr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.u^addr2^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 8; + } + +static void Op11BC(void) // CMPS ABS +{ + addr = FetchW(); WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + WORD dw = regs.s - addr2; + (dw == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag + (regs.s < addr2 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag + (((regs.cc<<15)^regs.s^addr2^dw)&0x8000 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // oVerfl + regs.clock += 8; +} + +//temp, for testing... +/*static BYTE backTrace[256]; +static WORD btPC[256]; +static int btPtr = 0;//*/ +static void Op__(void) // Illegal opcode +{ + regs.clock++; +// illegal = true; + regs.cpuFlags |= V6809_STATE_ILLEGAL_INST; +/*WriteLog("V6809: Executed illegal opcode %02X at PC=%04X...\n\nBacktrace:\n\n", regs.RdMem(regs.pc - 1), regs.pc - 1); +for(int i=0; i<256; i++) +{ + dpc = btPC[(btPtr+i)&0xFF]; + Decode_6809(); +}//*/ +} + + +// +// Internal "memcpy" (so we don't have to link with any external libraries!) +// +static void myMemcpy(void * dst, void * src, DWORD size) +{ + BYTE * d = (BYTE *)dst, * s = (BYTE *)src; + + for(DWORD i=0; icpuFlags; + + if (flags & V6809_ASSERT_LINE_RESET) // *** RESET handler *** + { + regs.cc |= (FLAG_F | FLAG_I); // Set F, I + regs.dp = 0; // Reset direct page register + regs.pc = RdMemW(0xFFFE); // And load PC with the RESET vector + context->cpuFlags &= ~V6809_ASSERT_LINE_RESET; + regs.cpuFlags &= ~V6809_ASSERT_LINE_RESET; + } + else if (flags & V6809_ASSERT_LINE_NMI) // *** NMI handler *** + { + regs.cc |= FLAG_E; // Set the Entire flag + + regs.WrMem(--regs.s, regs.pc & 0xFF); // Save all regs... + regs.WrMem(--regs.s, regs.pc >> 8); + regs.WrMem(--regs.s, regs.u & 0xFF); + regs.WrMem(--regs.s, regs.u >> 8); + regs.WrMem(--regs.s, regs.y & 0xFF); + regs.WrMem(--regs.s, regs.y >> 8); + regs.WrMem(--regs.s, regs.x & 0xFF); + regs.WrMem(--regs.s, regs.x >> 8); + regs.WrMem(--regs.s, regs.dp); + regs.WrMem(--regs.s, regs.b); + regs.WrMem(--regs.s, regs.a); + regs.WrMem(--regs.s, regs.cc); + + regs.cc |= (FLAG_I | FLAG_F); // Set IRQ/FIRQ suppress flags + regs.pc = RdMemW(0xFFFC); // And load PC with the NMI vector + regs.clock += 19; + context->cpuFlags &= ~V6809_ASSERT_LINE_NMI;// Reset the asserted line (NMI)... + regs.cpuFlags &= ~V6809_ASSERT_LINE_NMI; // Reset the asserted line (NMI)... + } + else if (flags & V6809_ASSERT_LINE_FIRQ) // *** FIRQ handler *** + { + if (!(regs.cc & FLAG_F)) // Is the FIRQ masked (F == 1)? + { + regs.cc &= ~FLAG_E; // Clear the Entire flag + + regs.WrMem(--regs.s, regs.pc & 0xFF); // Save PC, CC regs... + regs.WrMem(--regs.s, regs.pc >> 8); + regs.WrMem(--regs.s, regs.cc); + + regs.cc |= (FLAG_I | FLAG_F); // Set IRQ/FIRQ suppress flags + regs.pc = RdMemW(0xFFF6); // And load PC with the IRQ vector + regs.clock += 10; + context->cpuFlags &= ~V6809_ASSERT_LINE_FIRQ; // Reset the asserted line (FIRQ)... + regs.cpuFlags &= ~V6809_ASSERT_LINE_FIRQ; // Reset the asserted line (FIRQ)... + } + } + else if (flags & V6809_ASSERT_LINE_IRQ) // *** IRQ handler *** + { + if (!(regs.cc & FLAG_I)) // Is the IRQ masked (I == 1)? + { + regs.cc |= FLAG_E; // Set the Entire flag + + regs.WrMem(--regs.s, regs.pc & 0xFF); // Save all regs... + regs.WrMem(--regs.s, regs.pc >> 8); + regs.WrMem(--regs.s, regs.u & 0xFF); + regs.WrMem(--regs.s, regs.u >> 8); + regs.WrMem(--regs.s, regs.y & 0xFF); + regs.WrMem(--regs.s, regs.y >> 8); + regs.WrMem(--regs.s, regs.x & 0xFF); + regs.WrMem(--regs.s, regs.x >> 8); + regs.WrMem(--regs.s, regs.dp); + regs.WrMem(--regs.s, regs.b); + regs.WrMem(--regs.s, regs.a); + regs.WrMem(--regs.s, regs.cc); + + regs.cc |= FLAG_I; // Specs say that it doesn't affect FIRQ... or FLAG_F [WAS: Set IRQ/FIRQ suppress flags] + regs.pc = RdMemW(0xFFF8); // And load PC with the IRQ vector + regs.clock += 19; + context->cpuFlags &= ~V6809_ASSERT_LINE_IRQ; // Reset the asserted line (IRQ)... + regs.cpuFlags &= ~V6809_ASSERT_LINE_IRQ; // Reset the asserted line (IRQ)... + } + } +/*if (disasm) WriteLog("\tA=%02X B=%02X CC=%02X DP=%02X X=%04X Y=%04X S=%04X U=%04X PC=%04X\n", + regs.a, regs.b, regs.cc, regs.dp, regs.x, regs.y, regs.s, regs.u, regs.pc);//*/ + } +regs.clock += clockSave; + + myMemcpy(context, ®s, sizeof(V6809REGS)); +} diff --git a/src/v6809.h b/src/v6809.h new file mode 100755 index 0000000..f62d1cf --- /dev/null +++ b/src/v6809.h @@ -0,0 +1,58 @@ +// +// Virtual 6809 Header file +// +// by James L. Hammons +// +// (c) 1997, 2004 Underground Software +// + +#ifndef __V6809_H__ +#define __V6809_H__ + +#include "types.h" + +// Useful defines + +#define FLAG_E 0x80 // Entire +#define FLAG_F 0x40 // Fast IRQ +#define FLAG_H 0x20 // Half carry +#define FLAG_I 0x10 // IRQ +#define FLAG_N 0x08 // Negative +#define FLAG_Z 0x04 // Zero +#define FLAG_V 0x02 // oVerflow +#define FLAG_C 0x01 // Carry + +#define V6809_ASSERT_LINE_RESET 0x0001 // v6809 RESET line +#define V6809_ASSERT_LINE_IRQ 0x0002 // v6809 IRQ line +#define V6809_ASSERT_LINE_FIRQ 0x0004 // v6809 FIRQ line +#define V6809_ASSERT_LINE_NMI 0x0008 // v6809 NMI line +#define V6809_STATE_SYNC 0x0010 // v6809 SYNC line +#define V6809_STATE_ILLEGAL_INST 0x0020 // Illegal instruction executed flag + +//#define V6809_START_DEBUG_LOG EQU 0020h // Debug log go (temporary!) + +// Useful structs + +struct V6809REGS +{ + WORD pc; // 6809 PC register + WORD x; // 6809 X index register + WORD y; // 6809 Y index register + WORD s; // 6809 System stack pointer + WORD u; // 6809 User stack pointer + BYTE cc; // 6809 Condition Code register + BYTE a; // 6809 A register + BYTE b; // 6809 B register + BYTE dp; // 6809 Direct Page register + DWORD clock; // 6809 clock +//DWORD _reserved;// BYTE (* Fetch)(WORD&); // Address of BYTE fetch routine + BYTE (* RdMem)(WORD); // Address of BYTE read routine + void (* WrMem)(WORD, BYTE); // Address of BYTE write routine + DWORD cpuFlags; // v6809 IRQ/RESET flags +}; + +// Function prototypes + +void Execute6809(V6809REGS *, DWORD); // Function to execute 6809 instructions + +#endif // __V6809_H__ diff --git a/src/v6809b.cpp b/src/v6809b.cpp new file mode 100755 index 0000000..9e2183f --- /dev/null +++ b/src/v6809b.cpp @@ -0,0 +1,2716 @@ +// Virtual 6809B v1.2P (Last build: 5/30/1998) +// Protected mode version +// +// by James L. Hammons +// +// (c) 1998 Underground Software + +#include "v6809b.h" +#include "v6809.h" // Pull in some funcs... + +// Global defs (needed because functions can only return one value. +// Maybe you could use a struct to pass multiple values, but +// what a pain in the ass! This way makes a little more sense +// to me.) + +WORD pcrB, xrB, yrB, srB, urB; // Double byte registers +BYTE ccrB, arB, brB, dprB; // Single byte registers +long iclockB; // Instruction clock +bool illegalB = false; // Illegal instruction executed flag + +static WORD addr; // Temporary variables common to all funcs... +static BYTE tmp; + +extern BYTE FetchB(); // You need to define these functions +extern WORD FetchWB(); // externally because every hardware situation +extern BYTE RdMemB(WORD); // is going to be different... +extern void WrMemB(WORD, BYTE); + +void (* exec_op0B[256])(); // Array of page zero opcode functions... +void (* exec_op1B[256])(); // Array of page one opcode functions... +void (* exec_op2B[256])(); // Array of page two opcode functions... + +// +// Function to read TFR/EXG post byte +// +WORD ReadEXGB(BYTE code) +{ + WORD retval; + + switch(code) + { + case 0: retval = (arB<<8) | brB; break; + case 1: retval = xrB; break; + case 2: retval = yrB; break; + case 3: retval = urB; break; + case 4: retval = srB; break; + case 5: retval = pcrB; break; + case 8: retval = arB; break; + case 9: retval = brB; break; + case 10: retval = ccrB; break; + case 11: retval = dprB; break; + default: retval = 0xFF; + } + return(retval); +} + +// +// Function to set TFR/EXG data +// +void WriteEXGB(BYTE code, WORD data) +{ + switch(code) + { + case 0: { arB = data>>8; brB = data&0xFF; break; } + case 1: xrB = data; break; + case 2: yrB = data; break; + case 3: urB = data; break; + case 4: srB = data; break; + case 5: pcrB = data; break; + case 8: arB = data&0xFF; break; + case 9: brB = data&0xFF; break; + case 10: ccrB = data&0xFF; break; + case 11: dprB = data&0xFF; break; + } +} + +// +// Function to decode register data +// +WORD DecodeRegB(BYTE reg) +{ + WORD retval; + + switch(reg) + { + case 0: retval = xrB; break; + case 1: retval = yrB; break; + case 2: retval = urB; break; + case 3: retval = srB; break; + } + return(retval); +} + +// +// Function to decode IDX data +// +WORD DecodeIDXB(BYTE code) +{ + WORD addr, woff; + BYTE reg = (code&0x60)>>5, idxind = (code&0x10)>>4, lo_nyb = code&0x0F; + + if (!(code&0x80)) // Hi bit unset? Then decode 4 bit offset + { + addr = DecodeRegB(reg) + (idxind ? lo_nyb-16 : lo_nyb); + } + else + { + if (idxind) + { + switch(lo_nyb) + { + case 1: { woff = DecodeRegB(reg); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); + switch(reg) + { + case 0: xrB++; xrB++; break; + case 1: yrB++; yrB++; break; + case 2: urB++; urB++; break; + case 3: srB++; srB++; break; + } + break; } + case 3: { switch(reg) + { + case 0: xrB--; xrB--; break; + case 1: yrB--; yrB--; break; + case 2: urB--; urB--; break; + case 3: srB--; srB--; break; + } + woff = DecodeRegB(reg); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 4: { woff = DecodeRegB(reg); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 5: { woff = DecodeRegB(reg) + SignedB(brB); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 6: { woff = DecodeRegB(reg) + SignedB(arB); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 8: { woff = DecodeRegB(reg) + SignedB(FetchB()); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 9: { woff = DecodeRegB(reg) + SignedW(FetchWB()); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 11: { woff = DecodeRegB(reg) + SignedW((arB<<8) | brB); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 12: { woff = pcrB + SignedB(FetchB()); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 13: { woff = pcrB + SignedW(FetchWB()); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + case 15: { woff = FetchWB(); + addr = (RdMemB(woff)<<8) | RdMemB(woff+1); break; } + } + } + else + { + switch(lo_nyb) + { + case 0: { addr = DecodeRegB(reg); + switch(reg) + { + case 0: xrB++; break; + case 1: yrB++; break; + case 2: urB++; break; + case 3: srB++; break; + } + break; } + case 1: { addr = DecodeRegB(reg); + switch(reg) + { + case 0: xrB++; xrB++; break; + case 1: yrB++; yrB++; break; + case 2: urB++; urB++; break; + case 3: srB++; srB++; break; + } + break; } + case 2: { switch(reg) + { + case 0: xrB--; break; + case 1: yrB--; break; + case 2: urB--; break; + case 3: srB--; break; + } + addr = DecodeRegB(reg); break; } + case 3: { switch(reg) + { + case 0: xrB--; xrB--; break; + case 1: yrB--; yrB--; break; + case 2: urB--; urB--; break; + case 3: srB--; srB--; break; + } + addr = DecodeRegB(reg); break; } + case 4: { addr = DecodeRegB(reg); break; } + case 5: { addr = DecodeRegB(reg) + SignedB(brB); break; } + case 6: { addr = DecodeRegB(reg) + SignedB(arB); break; } + case 8: { addr = DecodeRegB(reg) + SignedB(FetchB()); break; } + case 9: { addr = DecodeRegB(reg) + SignedW(FetchWB()); break; } + case 11: { addr = DecodeRegB(reg) + SignedW((arB<<8) | brB); break; } + case 12: { addr = pcrB + SignedB(FetchB()); break; } + case 13: { addr = pcrB + SignedW(FetchWB()); break; } + } + } + } + return(addr); +} + +// +// Page zero instructions... +// + +void BOp00(void) // NEG DP +{ + addr = (dprB<<8) | FetchB(); + tmp = 256 - RdMemB(addr); + WrMemB(addr, tmp); + (tmp == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (tmp > 0x7F ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust carry + iclockB += 6; +} +void BOp03(void) // COM DP +{ + addr = (dprB<<8) | FetchB(); + tmp = 0xFF ^ RdMemB(addr); + WrMemB(addr, tmp); + ccrB &= 0xFD; ccrB |= 0x01; // CLV SEC + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp04(void) // LSR DP +{ + addr = (dprB<<8) | FetchB(); + tmp = RdMemB(addr); + (tmp&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift low bit into carry + tmp >>= 1; WrMemB(addr, tmp); + ccrB &= 0xF7; // CLN + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + iclockB += 6; +} +void BOp06(void) // ROR DP +{ + addr = (dprB<<8) | FetchB(); BYTE tmp2 = RdMemB(addr); + tmp = (tmp2>>1) + (ccrB&0x01)*128; + WrMemB(addr, tmp); + (tmp2&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp07(void) // ASR DP +{ + addr = (dprB<<8) | FetchB(); tmp = RdMemB(addr); + (tmp&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + tmp >>= 1; + if (tmp&0x40) tmp |= 0x80; // Set Neg if it was set + WrMemB(addr, tmp); + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp08(void) // LSL DP +{ + addr = (dprB<<8) | FetchB(); // NEEDS OVERFLOW ADJUSTMENT + tmp = RdMemB(addr); + (tmp&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + tmp <<= 1; + WrMemB(addr, tmp); + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp09(void) // ROL DP +{ + addr = (dprB<<8) | FetchB(); BYTE tmp2 = RdMemB(addr); + tmp = (tmp2<<1) + (ccrB&0x01); + WrMemB(addr, tmp); + (tmp2&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + ((tmp2&0x80)^((tmp2<<1)&0x80) ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp0A(void) // DEC DP +{ + addr = (dprB<<8) | FetchB(); + tmp = RdMemB(addr) - 1; + WrMemB(addr, tmp); + (tmp == 0x7F ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp0C(void) // INC DP +{ + addr = (dprB<<8) | FetchB(); + tmp = RdMemB(addr) + 1; + WrMemB(addr, tmp); + (tmp == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp0D(void) // TST DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // CLV + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp0E(void) // JMP DP +{ + pcrB = (dprB<<8) | FetchB(); + iclockB += 3; +} +void BOp0F(void) // CLR DP +{ + WrMemB((dprB<<8)|FetchB(), 0); + ccrB &= 0xF0; ccrB |= 0x04; // CLN, SEZ, CLV, CLC + iclockB += 6; +} +void BOp12(void) // NOP +{ + iclockB += 2; +} +void BOp13(void) // SYNC +{ + iclockB += 2; +} +void BOp16(void) // LBRA +{ + pcrB += SignedW(FetchWB()); + iclockB += 5; +} +void BOp17(void) // LBSR +{ + addr = FetchWB(); + WrMemB(--srB, pcrB&0xFF); WrMemB(--srB, pcrB>>8); + pcrB += SignedW(addr); + iclockB += 9; +} +void BOp19(void) // DAA +{ + /*if ((ccrB&0x20) || ((arB&0x0F) > 0x09)) // H set or lo nyb too big? + { + arB += 0x06; ccrB |= 0x20; // Then adjust & set half carry + } + if ((ccrB&0x01) || (arB > 0x9F)) // C set or hi nyb too big? + { + arB += 0x60; ccrB |= 0x01; // Then adjust & set carry + } + ccrB &= 0xF1; // CL NZV + if (arB == 0) ccrB |= 0x04; // Adjust Zero flag + if (arB&0x80) ccrB |= 0x08; // Adjust Negative flag + iclockB += 2; //*/ + + BYTE msn, lsn; // Will this work?? + WORD t, cf = 0; + msn=arB & 0xf0; lsn=arB & 0x0f; + if( lsn>0x09 || ccrB&0x20 ) cf |= 0x06; + if( msn>0x80 && lsn>0x09 ) cf |= 0x60; + if( msn>0x90 || ccrB&0x01 ) cf |= 0x60; + t = cf + arB; + ccrB &= 0xF1; // CL NZV + //CLR_NZV; /* keep carry from previous operation */ + if (arB == 0) ccrB |= 0x04; // Adjust Zero flag + if (arB&0x80) ccrB |= 0x08; // Adjust Negative flag + //SET_NZ8((byte)t); SET_C8(t); + ccrB |= ((t&0x100)>>8); // Adjust Carry (?) + arB = t; +} +void BOp1A(void) // ORCC # +{ + ccrB |= FetchB(); + iclockB += 3; +} +void BOp1C(void) // ANDCC # +{ + ccrB &= FetchB(); + iclockB += 3; +} +void BOp1D(void) // SEX +{ + (brB&0x80 ? arB = 0xFF : arB = 0x00); + ((arB|brB) == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp1E(void) // EXG +{ + tmp = FetchB(); + addr = ReadEXGB(tmp>>4); WriteEXGB(tmp>>4, ReadEXGB(tmp&0xF)); + WriteEXGB(tmp&0xF, addr); + iclockB += 8; +} +void BOp1F(void) // TFR +{ + tmp = FetchB(); + WriteEXGB(tmp&0xF, ReadEXGB(tmp>>4)); + iclockB += 7; +} +void BOp20(void) // BRA +{ + pcrB += SignedB(FetchB()); // Branch always + iclockB += 3; +} +void BOp21(void) // BRN +{ + FetchB(); + iclockB += 3; +} +void BOp22(void) // BHI +{ + tmp = FetchB(); + if (!(ccrB&0x05)) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp23(void) // BLS +{ + tmp = FetchB(); + if (ccrB&0x05) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp24(void) // BCC (BHS) +{ + tmp = FetchB(); + if (!(ccrB&0x01)) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp25(void) // BCS (BLO) +{ + tmp = FetchB(); + if (ccrB&0x01) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp26(void) // BNE +{ + tmp = FetchB(); + if (!(ccrB&0x04)) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp27(void) // BEQ +{ + tmp = FetchB(); + if (ccrB&0x04) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp28(void) // BVC +{ + tmp = FetchB(); + if (!(ccrB&0x02)) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp29(void) // BVS +{ + tmp = FetchB(); + if (ccrB&0x02) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp2A(void) // BPL +{ + tmp = FetchB(); + if (!(ccrB&0x08)) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp2B(void) // BMI +{ + tmp = FetchB(); + if (ccrB&0x08) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp2C(void) // BGE +{ + tmp = FetchB(); + if (!(((ccrB&0x08) >> 2) ^ (ccrB&0x02))) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp2D(void) // BLT +{ + tmp = FetchB(); + if (((ccrB&0x08) >> 2) ^ (ccrB&0x02)) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp2E(void) // BGT +{ + tmp = FetchB(); + if (!((ccrB&0x04) | (((ccrB&0x08) >> 2) ^ (ccrB&0x02)))) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp2F(void) // BLE +{ + tmp = FetchB(); + if ((ccrB&0x04) | (((ccrB&0x08) >> 2) ^ (ccrB&0x02))) pcrB += SignedB(tmp); + iclockB += 3; +} +void BOp30(void) // LEAX +{ + xrB = DecodeIDXB(FetchB()); + (xrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + iclockB += 4; +} +void BOp31(void) // LEAY +{ + yrB = DecodeIDXB(FetchB()); + (yrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + iclockB += 4; +} +void BOp32(void) // LEAS +{ + srB = DecodeIDXB(FetchB()); + (srB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + iclockB += 4; +} +void BOp33(void) // LEAU +{ + urB = DecodeIDXB(FetchB()); + (urB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + iclockB += 4; +} +void BOp34(void) // PSHS +{ + tmp = FetchB(); + if (tmp&0x80) { WrMemB(--srB, pcrB&0xFF); WrMemB(--srB, pcrB>>8); } + if (tmp&0x40) { WrMemB(--srB, urB&0xFF); WrMemB(--srB, urB>>8); } + if (tmp&0x20) { WrMemB(--srB, yrB&0xFF); WrMemB(--srB, yrB>>8); } + if (tmp&0x10) { WrMemB(--srB, xrB&0xFF); WrMemB(--srB, xrB>>8); } + if (tmp&0x08) WrMemB(--srB, dprB); + if (tmp&0x04) WrMemB(--srB, brB); + if (tmp&0x02) WrMemB(--srB, arB); + if (tmp&0x01) WrMemB(--srB, ccrB); + iclockB += 5; +} +void BOp35(void) // PULS +{ + tmp = FetchB(); + if (tmp&0x01) ccrB = RdMemB(srB++); + if (tmp&0x02) arB = RdMemB(srB++); + if (tmp&0x04) brB = RdMemB(srB++); + if (tmp&0x08) dprB = RdMemB(srB++); + if (tmp&0x10) xrB = (RdMemB(srB++)<<8) | RdMemB(srB++); + if (tmp&0x20) yrB = (RdMemB(srB++)<<8) | RdMemB(srB++); + if (tmp&0x40) urB = (RdMemB(srB++)<<8) | RdMemB(srB++); + if (tmp&0x80) pcrB = (RdMemB(srB++)<<8) | RdMemB(srB++); + iclockB += 5; +} +void BOp36(void) // PSHU +{ + tmp = FetchB(); + if (tmp&0x80) { WrMemB(--urB, pcrB&0xFF); WrMemB(--urB, pcrB>>8); } + if (tmp&0x40) { WrMemB(--urB, srB&0xFF); WrMemB(--urB, srB>>8); } + if (tmp&0x20) { WrMemB(--urB, yrB&0xFF); WrMemB(--urB, yrB>>8); } + if (tmp&0x10) { WrMemB(--urB, xrB&0xFF); WrMemB(--urB, xrB>>8); } + if (tmp&0x08) WrMemB(--urB, dprB); + if (tmp&0x04) WrMemB(--urB, brB); + if (tmp&0x02) WrMemB(--urB, arB); + if (tmp&0x01) WrMemB(--urB, ccrB); + iclockB += 5; +} +void BOp37(void) // PULU +{ + tmp = FetchB(); + if (tmp&0x01) ccrB = RdMemB(urB++); + if (tmp&0x02) arB = RdMemB(urB++); + if (tmp&0x04) brB = RdMemB(urB++); + if (tmp&0x08) dprB = RdMemB(urB++); + if (tmp&0x10) xrB = (RdMemB(urB++)<<8) | RdMemB(urB++); + if (tmp&0x20) yrB = (RdMemB(urB++)<<8) | RdMemB(urB++); + if (tmp&0x40) srB = (RdMemB(urB++)<<8) | RdMemB(urB++); + if (tmp&0x80) pcrB = (RdMemB(urB++)<<8) | RdMemB(urB++); + iclockB += 5; +} +void BOp39(void) // RTS +{ + pcrB = (RdMemB(srB++)<<8) | RdMemB(srB++); + iclockB += 5; +} +void BOp3A(void) // ABX +{ + xrB += brB; + iclockB += 3; +} +void BOp3B(void) // RTI +{ + ccrB = RdMemB(srB++); + if (ccrB&0x80) // If E flag set, pull all regs + { + arB = RdMemB(srB++); brB = RdMemB(srB++); dprB = RdMemB(srB++); + xrB = (RdMemB(srB++)<<8) | RdMemB(srB++); + yrB = (RdMemB(srB++)<<8) | RdMemB(srB++); + urB = (RdMemB(srB++)<<8) | RdMemB(srB++); + iclockB += 15; + } + else + { + iclockB += 6; + } + pcrB = (RdMemB(srB++)<<8) | RdMemB(srB++); +} +void BOp3C(void) // CWAI +{ + ccrB &= FetchB(); ccrB |= 0x80; + iclockB += 1000000; // Force interrupt +} +void BOp3D(void) // MUL +{ + addr = arB * brB; arB = addr>>8; brB = addr&0xFF; + (addr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero + (brB&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry + iclockB += 11; +} +void BOp3E(void) // RESET +{ +} +void BOp3F(void) // SWI +{ +} +void BOp40(void) // NEGA +{ + arB = 256 - arB; + (arB > 0x7F ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust carry + (arB == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp43(void) // COMA +{ + arB ^= 0xFF; + ccrB &= 0xFD; ccrB |= 0x01; // CLV, SEC + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp44(void) // LSRA +{ + (arB&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift low bit into carry + arB >>= 1; + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp46(void) // RORA +{ + tmp = arB; arB = (tmp>>1) + (ccrB&0x01)*128; + (tmp&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp47(void) // ASRA +{ + (arB&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + arB >>= 1; // Do the shift + if (arB&0x40) arB |= 0x80; // Set neg if it was set + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp48(void) // LSLA [Keep checking from here...] +{ + (arB&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + arB <<= 1; + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp49(void) // ROLA +{ + tmp = arB; arB = (tmp<<1) + (ccrB&0x01); + (tmp&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp4A(void) // DECA +{ + arB--; + (arB == 0x7F ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp4C(void) // INCA + { + arB++; + (arB == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp4D(void) // TSTA + { + ccrB &= 0xFD; // Clear oVerflow flag + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp4F(void) // CLRA +{ + arB = 0; + ccrB &= 0xF0; ccrB |= 0x04; // Set NZVC + iclockB += 2; +} +void BOp50(void) // NEGB + { + brB = 256 - brB; +// ((brB^tmp)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Adjust H carry + (brB == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (brB > 0x7F ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust carry + iclockB += 2; + } +void BOp53(void) // COMB + { + brB ^= 0xFF; + ccrB &= 0xFD; ccrB |= 0x01; // CLV, SEC + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp54(void) // LSRB + { + (brB&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift low bit into carry + brB >>= 1; + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp56(void) // RORB + { + tmp = brB; brB = (brB >> 1) + (ccrB&0x01)*128; + (tmp&0x01 ? ccrB |=0x01 : ccrB &= 0xFE); // Shift bit into carry + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp57(void) // ASRB + { + (brB&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + brB >>= 1; // Do the shift + if (brB&0x40) brB |= 0x80; // Set neg if it was set + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp58(void) // LSLB + { + (brB&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + brB <<= 1; + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp59(void) // ROLB +{ + tmp = brB; + brB = (tmp<<1) + (ccrB&0x01); + (tmp&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp5A(void) // DECB + { + brB--; + (brB == 0x7F ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp5C(void) // INCB + { + brB++; + (brB == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp5D(void) // TSTB + { + ccrB &= 0xFD; // Clear oVerflow flag + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp5F(void) // CLRB + { + brB = 0; + ccrB &= 0xF0; ccrB |= 0x04; // Set NZVC + iclockB += 2; + } +void BOp60(void) // NEG IDX + { + addr = DecodeIDXB(FetchB()); + tmp = RdMemB(addr); BYTE res = 256 - tmp; + WrMemB(addr, res); +// ((res^tmp)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Adjust H carry + (res == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (res == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (res&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (res > 0x7F ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust carry + iclockB += 6; + } +void BOp63(void) // COM IDX + { + addr = DecodeIDXB(FetchB()); + tmp = RdMemB(addr) ^ 0xFF; + WrMemB(addr, tmp); + ccrB &= 0xFD; ccrB |= 0x01; // CLV, SEC + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp64(void) // LSR IDX + { + addr = DecodeIDXB(FetchB()); + tmp = RdMemB(addr); + (tmp&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift low bit into carry + tmp >>= 1; WrMemB(addr, tmp); + ccrB &= 0xF7; // CLN + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + iclockB += 6; + } +void BOp66(void) // ROR IDX + { + addr = DecodeIDXB(FetchB()); + tmp = RdMemB(addr); BYTE tmp2 = tmp; + tmp = (tmp >> 1) + (ccrB&0x01)*128; + WrMemB(addr, tmp); + (tmp2&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp67(void) // ASR IDX + { + addr = DecodeIDXB(FetchB()); + tmp = RdMemB(addr); + (tmp&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + tmp >>= 1; + if (tmp&0x40) tmp |= 0x80; // Set Neg if it was set + WrMemB(addr, tmp); + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp68(void) // LSL IDX + { + addr = DecodeIDXB(FetchB()); + tmp = RdMemB(addr); + (tmp&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + tmp <<= 1; + WrMemB(addr, tmp); + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp69(void) // ROL IDX +{ + BYTE tmp2 = RdMemB(DecodeIDXB(FetchB())); + tmp = (tmp2<<1) + (ccrB&0x01); + WrMemB(addr, tmp); + (tmp2&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOp6A(void) // DEC IDX + { + BYTE tmp; WORD addr; + addr = DecodeIDXB(FetchB()); + tmp = RdMemB(addr) - 1; + WrMemB(addr, tmp); + (tmp == 0x7F ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp6C(void) // INC IDX + { + addr = DecodeIDXB(FetchB()); + tmp = RdMemB(addr) + 1; + WrMemB(addr, tmp); + (tmp == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp6D(void) // TST IDX + { + tmp = RdMemB(DecodeIDXB(FetchB())); + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp6E(void) // JMP IDX +{ + pcrB = DecodeIDXB(FetchB()); + iclockB += 3; +} +void BOp6F(void) // CLR IDX +{ + addr = DecodeIDXB(FetchB()); + WrMemB(addr, 0); + ccrB &= 0xF0; ccrB |= 0x04; // Set NZVC + iclockB += 6; +} +void BOp70(void) // NEG ABS + { + addr = FetchWB(); + tmp = RdMemB(addr); BYTE res = 256 - tmp; + WrMemB(addr, res); + (res == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (res == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (res&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (res > 0x7F ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust carry + iclockB += 7; + } +void BOp73(void) // COM ABS + { + addr = FetchWB(); + tmp = RdMemB(addr) ^ 0xFF; + WrMemB(addr, tmp); + ccrB &= 0xFD; ccrB |= 0x01; // CLV, SEC + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp74(void) // LSR ABS + { + addr = FetchWB(); + tmp = RdMemB(addr); + (tmp&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift low bit into carry + tmp >>= 1; WrMemB(addr, tmp); + ccrB &= 0xF7; // CLN + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + iclockB += 7; + } +void BOp76(void) // ROR ABS + { + BYTE tmp; WORD addr; + addr = FetchWB(); + tmp = RdMemB(addr); BYTE tmp2 = tmp; + tmp = (tmp >> 1) + (ccrB&0x01)*128; + WrMemB(addr, tmp); + (tmp2&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp77(void) // ASR ABS + { + BYTE tmp; WORD addr; + addr = FetchWB(); + tmp = RdMemB(addr); + (tmp&0x01 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift bit into carry + tmp >>= 1; + if (tmp&0x40) tmp |= 0x80; // Set Neg if it was set + WrMemB(addr, tmp); + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp78(void) // LSL ABS + { + BYTE tmp; WORD addr; + addr = FetchWB(); + tmp = RdMemB(addr); + (tmp&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + tmp <<= 1; + WrMemB(addr, tmp); + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp79(void) // ROL ABS +{ + BYTE tmp2 = RdMemB(FetchWB()); + tmp = (tmp2<<1) + (ccrB&0x01); + WrMemB(addr, tmp); + (tmp2&0x80 ? ccrB |= 0x01 : ccrB &= 0xFE); // Shift hi bit into carry + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; +} +void BOp7A(void) // DEC ABS + { + BYTE tmp; WORD addr; + addr = FetchWB(); + tmp = RdMemB(addr) - 1; + WrMemB(addr, tmp); + (tmp == 0x7F ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp7C(void) // INC ABS + { + BYTE tmp; WORD addr; + addr = FetchWB(); + tmp = RdMemB(addr) + 1; + WrMemB(addr, tmp); + (tmp == 0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // Adjust oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp7D(void) // TST ABS +{ + BYTE tmp = RdMemB(FetchWB()); + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; +} +void BOp7E(void) // JMP ABS +{ + pcrB = FetchWB(); + iclockB += 3; +} +void BOp7F(void) // CLR ABS + { + WrMemB(FetchWB(), 0); + ccrB &= 0xF0; ccrB |= 0x04; // Set NZVC + iclockB += 7; + } +void BOp80(void) // SUBA # +{ + BYTE tmp = FetchB(); BYTE as = arB; + arB -= tmp; + (as < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((as^tmp^arB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp81(void) // CMPA # +{ + tmp = FetchB(); + BYTE db = arB - tmp; + (arB < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((arB^tmp^db^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (db == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (db&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp82(void) // SBCA # +{ + tmp = FetchB(); BYTE as = arB; + arB = arB - tmp - (ccrB&0x01); + (as < (tmp+(ccrB&0x01)) ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((as^tmp^arB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOp83(void) // SUBD # +{ + addr = FetchWB(); WORD dr = (arB<<8)|brB, ds = dr; + dr -= addr; + (ds < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((ds^addr^dr^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (dr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + arB = dr>>8; brB = dr&0xFF; + iclockB += 4; +} +void BOp84(void) // ANDA # + { + arB &= FetchB(); + ccrB &= 0xFD; // Clear oVerflow flag + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp85(void) // BITA # + { + tmp = arB & FetchB(); + ccrB &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp86(void) // LDA # + { + arB = FetchB(); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp88(void) // EORA # + { + arB ^= FetchB(); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp89(void) // ADCA # +{ + tmp = FetchB(); + addr = (WORD)arB + (WORD)tmp + (WORD)(ccrB&0x01); + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry + ((arB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((arB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + arB = addr & 0xFF; // Set accumulator + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative + iclockB += 2; +} +void BOp8A(void) // ORA # + { + arB |= FetchB(); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOp8B(void) // ADDA # +{ + tmp = FetchB(); addr = arB + tmp; + (addr > 0xFF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((arB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((arB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + arB = addr & 0xFF; // Set accumulator + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 2; +} +void BOp8C(void) // CMPX # +{ + addr = FetchWB(); + WORD dw = xrB - addr; + (xrB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((xrB^addr^dw^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; +} +void BOp8D(void) // BSR + { + tmp = FetchB(); + WrMemB(--srB, pcrB&0xFF); WrMemB(--srB, pcrB>>8); + pcrB += SignedB(tmp); + iclockB += 7; + } +void BOp8E(void) // LDX # + { + xrB = FetchWB(); + ccrB &= 0xFD; // CLV + (xrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (xrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 3; + } +void BOp90(void) // SUBA DP + { + tmp = RdMemB((dprB<<8)|FetchB()); BYTE as = arB; + arB -= tmp; + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (as < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((as^tmp^arB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 4; + } +void BOp91(void) // CMPA DP + { + tmp = RdMemB((dprB<<8)|FetchB()); + BYTE db = arB - tmp; + (db == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (db&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (arB < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((arB^tmp^db^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 4; + } +void BOp92(void) // SBCA DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); BYTE as = arB; + arB = arB - tmp - (ccrB&0x01); + (as < (tmp+(ccrB&0x01)) ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((as^tmp^arB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; +} +void BOp93(void) // SUBD DP +{ + addr = (dprB<<8)|FetchB(); WORD dr = (arB<<8)|brB, ds = dr; + WORD adr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + dr -= adr2; + (ds < adr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((ds^adr2^dr^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (dr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + arB = dr>>8; brB = dr&0xFF; + iclockB += 6; +} +void BOp94(void) // ANDA DP +{ + arB &= RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xF1; // CLV CLZ CLN + if (arB == 0) ccrB |= 0x04; // Adjust Zero flag + if (arB&0x80) ccrB |= 0x08; // Adjust Negative flag + iclockB += 4; +} +void BOp95(void) // BITA DP + { + tmp = arB & RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOp96(void) // LDA DP +{ + arB = RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xF1; // CLN CLZ CLV + if (arB == 0) ccrB |= 0x04; // Set Zero flag + if (arB&0x80) ccrB |= 0x08; // Set Negative flag + iclockB += 4; +} +void BOp97(void) // STA DP + { + WrMemB((dprB<<8)|FetchB(), arB); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOp98(void) // EORA DP + { + arB ^= RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOp99(void) // ADCA DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); + addr = (WORD)arB + (WORD)tmp + (WORD)(ccrB&0x01); + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry + ((arB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((arB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + arB = addr & 0xFF; // Set accumulator + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative + iclockB += 4; +} +void BOp9A(void) // ORA DP + { + arB |= RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOp9B(void) // ADDA DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); + addr = (WORD)arB + (WORD)tmp; + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((arB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((arB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflo + arB = addr & 0xFF; // Set accumulator + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 4; +} +void BOp9C(void) // CMPX DP + { + addr = (dprB<<8)|FetchB(); + WORD adr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + WORD dw = xrB - adr2; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (xrB < adr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((xrB^adr2^dw^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 6; + } +void BOp9D(void) // JSR DP + { + addr = (dprB<<8) | FetchB(); + WrMemB(--srB, pcrB&0xFF); WrMemB(--srB, pcrB>>8); + pcrB = addr; // JSR to DP location... + iclockB += 7; + } +void BOp9E(void) // LDX DP + { + addr = (dprB<<8) | FetchB(); + xrB = (RdMemB(addr) << 8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (xrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (xrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; + } +void BOp9F(void) // STX DP + { + addr = (dprB<<8) | FetchB(); + WrMemB(addr, xrB>>8); WrMemB(addr+1, xrB&0xFF); + ccrB &= 0xFD; // CLV + (xrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (xrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; + } +void BOpA0(void) // SUBA IDX + { + tmp = RdMemB(DecodeIDXB(FetchB())); BYTE as = arB; + arB -= tmp; + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (as < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((as^tmp^arB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 4; + } +void BOpA1(void) // CMPA IDX + { + tmp = RdMemB(DecodeIDXB(FetchB())); + BYTE db = arB - tmp; + (db == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (db&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (arB < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((arB^tmp^db^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 4; + } +void BOpA2(void) // SBCA IDX +{ + tmp = RdMemB(DecodeIDXB(FetchB())); BYTE as = arB; + arB = arB - tmp - (ccrB&0x01); + (as < (tmp+(ccrB&0x01)) ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((as^tmp^arB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; +} +void BOpA3(void) // SUBD IDX +{ + addr = DecodeIDXB(FetchB()); WORD dr = (arB<<8)|brB, ds = dr; + WORD adr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + dr -= adr2; + (ds < adr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((ds^adr2^dr^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (dr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + arB = dr>>8; brB = dr&0xFF; + iclockB += 6; +} +void BOpA4(void) // ANDA IDX + { + arB &= RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // Clear oVerflow flag + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpA5(void) // BITA IDX + { + tmp = arB & RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpA6(void) // LDA IDX +{ + arB = RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xF1; // CLV CLZ CLN + if (arB == 0) ccrB |= 0x04; // Set Zero flag + if (arB&0x80) ccrB |= 0x08; // Set Negative flag + iclockB += 4; +} +void BOpA7(void) // STA IDX +{ + WrMemB(DecodeIDXB(FetchB()), arB); + ccrB &= 0xF1; // CLV CLZ CLN + if (arB == 0) ccrB |= 0x04; // Set Zero flag + if (arB&0x80) ccrB |= 0x08; // Set Negative flag + iclockB += 4; +} +void BOpA8(void) // EORA IDX + { + arB ^= RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpA9(void) // ADCA IDX +{ + tmp = RdMemB(DecodeIDXB(FetchB())); + addr = (WORD)arB + (WORD)tmp + (WORD)(ccrB&0x01); + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((arB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((arB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflo + arB = addr & 0xFF; // Set accumulator + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 4; +} +void BOpAA(void) // ORA IDX +{ + arB |= RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; +} +void BOpAB(void) // ADDA IDX +{ + tmp = RdMemB(DecodeIDXB(FetchB())); + addr = (WORD)arB + (WORD)tmp; + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((arB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((arB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflo + arB = addr & 0xFF; // Set accumulator + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 4; +} +void BOpAC(void) // CMPX IDX +{ + addr = DecodeIDXB(FetchB()); + WORD addr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + WORD dw = xrB - addr2; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (xrB < addr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((xrB^addr2^dw^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 6; +} +void BOpAD(void) // JSR IDX +{ + addr = DecodeIDXB(FetchB()); + WrMemB(--srB, pcrB&0xFF); WrMemB(--srB, pcrB>>8); + pcrB = addr; // JSR directly to IDX ptr + iclockB += 7; +} +void BOpAE(void) // LDX IDX +{ + addr = DecodeIDXB(FetchB()); + xrB = (RdMemB(addr) << 8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (xrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (xrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpAF(void) // STX IDX +{ + addr = DecodeIDXB(FetchB()); + WrMemB(addr, xrB>>8); WrMemB(addr+1, xrB&0xFF); + ccrB &= 0xF1; // CLV CLZ CLN + if (xrB == 0) ccrB |= 0x04; // Set Zero flag + if (xrB&0x8000) ccrB |= 0x08; // Set Negative flag + iclockB += 5; +} +void BOpB0(void) // SUBA ABS + { + tmp = RdMemB(FetchWB()); BYTE as = arB; + arB -= tmp; + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (as < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((as^tmp^arB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 5; + } +void BOpB1(void) // CMPA ABS + { + tmp = RdMemB(FetchWB()); + BYTE db = arB - tmp; + (db == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (db&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (arB < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((arB^tmp^db^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 5; + } +void BOpB2(void) // SBCA ABS +{ + tmp = RdMemB(FetchWB()); BYTE as = arB; + arB = arB - tmp - (ccrB&0x01); + (as < (tmp+(ccrB&0x01)) ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((as^tmp^arB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpB3(void) // SUBD ABS +{ + addr = FetchWB(); WORD dr = (arB<<8)|brB, ds = dr; + WORD adr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + dr -= adr2; + (ds < adr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((ds^adr2^dr^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + (dr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + arB = dr>>8; brB = dr&0xFF; + iclockB += 7; +} +void BOpB4(void) // ANDA ABS +{ + arB &= RdMemB(FetchWB()); + ccrB &= 0xFD; // Clear oVerflow flag + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpB5(void) // BITA ABS +{ + tmp = arB & RdMemB(FetchWB()); + ccrB &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpB6(void) // LDA ABS +{ + arB = RdMemB(FetchWB()); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpB7(void) // STA ABS +{ + WrMemB(FetchWB(), arB); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpB8(void) // EORA ABS +{ + arB ^= RdMemB(FetchWB()); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpB9(void) // ADCA ABS +{ + tmp = RdMemB(FetchWB()); + addr = (WORD)arB + (WORD)tmp + (WORD)(ccrB&0x01); + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((arB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((arB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + arB = addr; // Set accumulator + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 5; +} +void BOpBA(void) // ORA ABS +{ + arB |= RdMemB(FetchWB()); + ccrB &= 0xFD; // CLV + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpBB(void) // ADDA ABS +{ + tmp = RdMemB(FetchWB()); + addr = (WORD)arB + (WORD)tmp; + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((arB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((arB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflo + arB = addr & 0xFF; // Set accumulator + (arB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 5; +} +void BOpBC(void) // CMPX ABS +{ + addr = FetchWB(); WORD addr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + WORD dw = xrB - addr2; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (xrB < addr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((xrB^addr2^dw^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 7; +} +void BOpBD(void) // JSR ABS +{ + addr = FetchWB(); + WrMemB(--srB, pcrB&0xFF); WrMemB(--srB, pcrB>>8); + pcrB = addr; // Go to absolute address (Not indir) + iclockB += 8; +} +void BOpBE(void) // LDX ABS +{ + addr = FetchWB(); + xrB = (RdMemB(addr) << 8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (xrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (xrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; +} +void BOpBF(void) // STX ABS + { + addr = FetchWB(); + WrMemB(addr, xrB>>8); WrMemB(addr+1, xrB&0xFF); + ccrB &= 0xFD; // CLV + (xrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (xrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOpC0(void) // SUBB # + { + tmp = FetchB(); BYTE bs = brB; + brB -= tmp; + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (bs < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((bs^tmp^brB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 2; + } +void BOpC1(void) // CMPB # + { + tmp = FetchB(); + BYTE db = brB - tmp; + (brB < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((brB^tmp^db^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (db == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (db&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOpC2(void) // SBCB # +{ + tmp = FetchB(); BYTE bs = brB; + brB = brB - tmp - (ccrB&0x01); + (bs < (tmp+(ccrB&0x01)) ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((bs^tmp^brB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; +} +void BOpC3(void) // ADDD # +{ + addr = FetchWB(); long dr = ((arB<<8)|brB)&0xFFFF, ds = dr; + dr += addr; + (dr > 0xFFFF ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + dr &= 0xFFFF; + (dr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + ((ds^addr^dr^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + arB = dr>>8; brB = dr&0xFF; + iclockB += 4; +} +void BOpC4(void) // ANDB # + { + brB &= FetchB(); + ccrB &= 0xFD; // Clear oVerflow flag + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOpC5(void) // BITB # +{ + tmp = brB & FetchB(); + ccrB &= 0xF1; // CLV CLZ CLN + if (tmp == 0) ccrB |= 0x04; // Set Zero flag + if (tmp&0x80) ccrB |= 0x08; // Set Negative flag + iclockB += 2; +} +void BOpC6(void) // LDB # +{ + brB = FetchB(); + ccrB &= 0xF1; // CLV CLZ CLN + if (brB == 0) ccrB |= 0x04; // Set Zero flag + if (brB&0x80) ccrB |= 0x08; // Set Negative flag + iclockB += 2; +} +void BOpC8(void) // EORB # + { + brB ^= FetchB(); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOpC9(void) // ADCB # +{ + tmp = FetchB(); + addr = (WORD)brB + (WORD)tmp + (WORD)(ccrB&0x01); + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((brB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((brB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflo + brB = addr & 0xFF; // Set accumulator + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 2; +} +void BOpCA(void) // ORB # + { + brB |= FetchB(); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 2; + } +void BOpCB(void) // ADDB # +{ + tmp = FetchB(); addr = brB + tmp; + (addr > 0xFF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((brB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((brB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflo + brB = addr & 0xFF; // Set accumulator + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 2; +} +void BOpCC(void) // LDD # +{ + arB = FetchB(); brB = FetchB(); + ccrB &= 0xFD; // CLV + ((arB+brB) == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 3; +} +void BOpCE(void) // LDU # +{ + urB = FetchWB(); + ccrB &= 0xFD; // CLV + (urB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (urB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 3; +} +void BOpD0(void) // SUBB DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); BYTE bs = brB; + brB -= tmp; + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (bs < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((bs^tmp^brB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 4; +} +void BOpD1(void) // CMPB DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); + BYTE db = brB - tmp; + (db == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (db&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (brB < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((brB^tmp^db^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 4; +} +void BOpD2(void) // SBCB DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); BYTE bs = brB; + brB = brB - tmp - (ccrB&0x01); + (bs < (tmp+(ccrB&0x01)) ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((bs^tmp^brB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; +} +void BOpD3(void) // ADDD DP +{ + addr = (dprB<<8)|FetchB(); long dr = ((arB<<8)|brB)&0xFFFF, ds = dr; + WORD adr2 = (RdMemB(addr)<<8)|RdMemB(addr+1); + dr += adr2; + (dr > 0xFFFF ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + dr &= 0xFFFF; + (dr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + ((ds^adr2^dr^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + arB = dr>>8; brB = dr&0xFF; + iclockB += 6; +} +void BOpD4(void) // ANDB DP + { + brB &= RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // Clear oVerflow flag + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpD5(void) // BITB DP + { + tmp = brB & RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpD6(void) // LDB DP +{ + brB = RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; +} +void BOpD7(void) // STB DP + { + WrMemB((dprB<<8)|FetchB(), brB); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpD8(void) // EORB DP + { + brB ^= RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpD9(void) // ADCB DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); + addr = (WORD)brB + (WORD)tmp + (WORD)(ccrB&0x01); + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((brB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((brB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + brB = addr; // Set accumulator + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 4; +} +void BOpDA(void) // ORB DP + { + brB |= RdMemB((dprB<<8)|FetchB()); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpDB(void) // ADDB DP +{ + tmp = RdMemB((dprB<<8)|FetchB()); + addr = (WORD)brB + (WORD)tmp; + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((brB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((brB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + brB = addr & 0xFF; // Set accumulator + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 4; +} +void BOpDC(void) // LDD DP +{ + addr = (dprB<<8)|FetchB(); + arB = RdMemB(addr); brB = RdMemB(addr+1); + ccrB &= 0xFD; // CLV + ((arB|brB) == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpDD(void) // STD DP +{ + addr = (dprB<<8)|FetchB(); + WrMemB(addr, arB); WrMemB(addr+1, brB); + ccrB &= 0xFD; // CLV + ((arB|brB) == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpDE(void) // LDU DP +{ + addr = (dprB<<8)|FetchB(); + urB = (RdMemB(addr) << 8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (urB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (urB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpDF(void) // STU DP +{ + addr = (dprB<<8)|FetchB(); + WrMemB(addr, urB>>8); WrMemB(addr+1, urB&0xFF); + ccrB &= 0xFD; // CLV + (urB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (urB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; +} +void BOpE0(void) // SUBB IDX +{ + tmp = RdMemB(DecodeIDXB(FetchB())); BYTE bs = brB; + brB -= tmp; + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (bs < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((bs^tmp^brB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 4; +} +void BOpE1(void) // CMPB IDX +{ + tmp = RdMemB(DecodeIDXB(FetchB())); + BYTE db = brB - tmp; + (db == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (db&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (brB < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((brB^tmp^db^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 4; +} +void BOpE2(void) // SBCB IDX +{ + tmp = RdMemB(DecodeIDXB(FetchB())); BYTE bs = brB; + brB = brB - tmp - (ccrB&0x01); + (bs < (tmp+(ccrB&0x01)) ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((bs^tmp^brB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; +} +void BOpE3(void) // ADDD IDX +{ + addr = DecodeIDXB(FetchB()); long dr = ((arB<<8)|brB)&0xFFFF, ds = dr; + WORD adr2 = (RdMemB(addr)<<8)|RdMemB(addr+1); + dr += adr2; + (dr > 0xFFFF ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + dr &= 0xFFFF; + (dr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + ((ds^adr2^dr^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + arB = dr>>8; brB = dr&0xFF; + iclockB += 6; +} +void BOpE4(void) // ANDB IDX + { + brB &= RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // Clear oVerflow flag + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpE5(void) // BITB IDX + { + tmp = brB & RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpE6(void) // LDB IDX + { + brB = RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpE7(void) // STB IDX +{ + WrMemB(DecodeIDXB(FetchB()), brB); + ccrB &= 0xF1; // CLV CLZ CLN + if (brB == 0) ccrB |= 0x04; // Adjust Zero flag + if (brB&0x80) ccrB |= 0x08; // Adjust Negative flag + iclockB += 4; +} +void BOpE8(void) // EORB IDX + { + brB ^= RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpE9(void) // ADCB IDX +{ + tmp = RdMemB(DecodeIDXB(FetchB())); + addr = (WORD)brB + (WORD)tmp + (WORD)(ccrB&0x01); + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((brB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((brB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + brB = addr; // Set accumulator + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 4; +} +void BOpEA(void) // ORB IDX + { + brB |= RdMemB(DecodeIDXB(FetchB())); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOpEB(void) // ADDB IDX +{ + tmp = RdMemB(DecodeIDXB(FetchB())); + addr = (WORD)brB + (WORD)tmp; + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((brB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((brB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + brB = addr; // Set accumulator + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 4; +} +void BOpEC(void) // LDD IDX +{ + addr = DecodeIDXB(FetchB()); + arB = RdMemB(addr); brB = RdMemB(addr+1); + ccrB &= 0xF1; // CLV CLZ CLN + if (!(arB|brB)) ccrB |= 0x04; // Adjust Zero flag + if (arB&0x80) ccrB |= 0x08; // Adjust Negative flag + iclockB += 5; +} +void BOpED(void) // STD IDX +{ + addr = DecodeIDXB(FetchB()); + WrMemB(addr, arB); WrMemB(addr+1, brB); + ccrB &= 0xF1; // CLV CLZ CLZ + if (!(arB|brB)) ccrB |= 0x04; // Adjust Zero flag + if (arB&0x80) ccrB |= 0x08; // Adjust Negative flag + iclockB += 5; +} +void BOpEE(void) // LDU IDX +{ + addr = DecodeIDXB(FetchB()); + urB = (RdMemB(addr) << 8) | RdMemB(addr+1); + ccrB &= 0xF1; // CLV CLZ CLN + if (urB == 0) ccrB |= 0x04; // Set Zero flag + if (urB&0x8000) ccrB |= 0x08; // Set Negative flag + iclockB += 5; +} +void BOpEF(void) // STU IDX +{ + addr = DecodeIDXB(FetchB()); + WrMemB(addr, urB>>8); WrMemB(addr+1, urB&0xFF); + ccrB &= 0xF1; // CLV CLZ CLN + if (urB == 0) ccrB |= 0x04; // Set Zero flag + if (urB&0x8000) ccrB |= 0x08; // Set Negative flag + iclockB += 5; +} +void BOpF0(void) // SUBB ABS + { + tmp = RdMemB(FetchWB()); BYTE bs = brB; + brB -= tmp; + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (bs < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((bs^tmp^brB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + } +void BOpF1(void) // CMPB ABS + { + tmp = RdMemB(FetchWB()); + BYTE db = brB - tmp; + (db == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (db&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (brB < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((brB^tmp^db^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 5; + } +void BOpF2(void) // SBCB ABS +{ + tmp = RdMemB(FetchWB()); BYTE bs = brB; + brB = brB - tmp - (ccrB&0x01); + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (bs < tmp ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((bs^tmp^brB^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflow + iclockB += 5; +} +void BOpF3(void) // ADDD ABS +{ + addr = FetchWB(); long dr = ((arB<<8)|brB)&0xFFFF, ds = dr; + WORD adr2 = (RdMemB(addr)<<8)|RdMemB(addr+1); + dr += adr2; + (dr > 0xFFFF ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + dr &= 0xFFFF; + (dr == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dr&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + ((ds^adr2^dr^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + arB = dr>>8; brB = dr&0xFF; + iclockB += 7; +} +void BOpF4(void) // ANDB ABS + { + brB &= RdMemB(FetchWB()); + ccrB &= 0xFD; // Clear oVerflow flag + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; + } +void BOpF5(void) // BITB ABS + { + tmp = brB & RdMemB(FetchWB()); + ccrB &= 0xFD; // Clear oVerflow flag + (tmp == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; + } +void BOpF6(void) // LDB ABS + { + brB = RdMemB(FetchWB()); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; + } +void BOpF7(void) // STB ABS + { + WrMemB(FetchWB(), brB); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; + } +void BOpF8(void) // EORB ABS + { + brB ^= RdMemB(FetchWB()); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; + } +void BOpF9(void) // ADCB ABS +{ + tmp = RdMemB(FetchWB()); + addr = (WORD)brB + (WORD)tmp + (WORD)(ccrB&0x01); + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((brB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((brB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflo + brB = addr & 0xFF; // Set accumulator + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 5; +} +void BOpFA(void) // ORB ABS + { + brB |= RdMemB(FetchWB()); + ccrB &= 0xFD; // CLV + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 5; + } +void BOpFB(void) // ADDB ABS +{ + tmp = RdMemB(FetchWB()); + addr = (WORD)brB + (WORD)tmp; + (addr > 0x00FF ? ccrB |= 0x01 : ccrB &= 0xFE); // Set Carry flag + ((brB^tmp^addr)&0x10 ? ccrB |= 0x20 : ccrB &= 0xDF); // Set Half carry + ((brB^tmp^addr^(ccrB<<7))&0x80 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerflo + brB = addr & 0xFF; // Set accumulator + (brB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Set Zero flag + (brB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Set Negative flag + iclockB += 5; +} +void BOpFC(void) // LDD ABS + { + addr = FetchWB(); + arB = RdMemB(addr); brB = RdMemB(addr+1); + ccrB &= 0xFD; // CLV + ((arB+brB) == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOpFD(void) // STD ABS + { + addr = FetchWB(); + WrMemB(addr, arB); WrMemB(addr+1, brB); + ccrB &= 0xFD; // CLV + ((arB+brB) == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (arB&0x80 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOpFE(void) // LDU ABS + { + addr = FetchWB(); + urB = (RdMemB(addr) << 8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (urB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (urB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOpFF(void) // STU ABS + { + addr = FetchWB(); + WrMemB(addr, urB>>8); WrMemB(addr+1, urB&0xFF); + ccrB &= 0xFD; // CLV + (urB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (urB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } + +// +// Page one opcodes' execute code +// + +void BOp1021(void) // LBRN +{ + addr = FetchWB(); + iclockB += 5; +} +void BOp1022(void) // LBHI +{ + addr = FetchWB(); + if (!((ccrB&0x01)|(ccrB&0x04))) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp1023(void) // LBLS +{ + addr = FetchWB(); + if ((ccrB&0x01)|(ccrB&0x04)) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp1024(void) // LBCC (LBHS) +{ + addr = FetchWB(); + if (!(ccrB&0x01)) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp1025(void) // LBCS (LBLO) +{ + addr = FetchWB(); + if (ccrB&0x01) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp1026(void) // LBNE +{ + addr = FetchWB(); + if (!(ccrB&0x04)) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp1027(void) // LBEQ +{ + addr = FetchWB(); + if (ccrB&0x04) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp1028(void) // LBVC +{ + addr = FetchWB(); + if (!(ccrB&0x02)) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp1029(void) // LBVS +{ + addr = FetchWB(); + if (ccrB&0x02) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp102A(void) // LBPL +{ + addr = FetchWB(); + if (!(ccrB&0x08)) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp102B(void) // LBMI +{ + addr = FetchWB(); + if (ccrB&0x08) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp102C(void) // LBGE +{ + addr = FetchWB(); + if (!(((ccrB&0x08) >> 2) ^ (ccrB&0x02))) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp102D(void) // LBLT +{ + addr = FetchWB(); + if (((ccrB&0x08) >> 2) ^ (ccrB&0x02)) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp102E(void) // LBGT +{ + addr = FetchWB(); + if (!((ccrB&0x04) | (((ccrB&0x08) >> 2) ^ (ccrB&0x02)))) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp102F(void) // LBLE +{ + addr = FetchWB(); + if ((ccrB&0x04) | (((ccrB&0x08) >> 2) ^ (ccrB&0x02))) pcrB += SignedW(addr); + iclockB += 5; +} +void BOp103F(void) // SWI2 (Not yet implemented) +{ + iclockB += 20; +} +void BOp1083(void) // CMPD # + { + addr = FetchWB(); WORD dr = (arB<<8)|brB; + WORD dw = dr - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (dr < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((dr^addr^dw^((WORD)ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 5; + } +void BOp108C(void) // CMPY # + { + addr = FetchWB(); + WORD dw = yrB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (yrB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((yrB^addr^dw^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 5; + } +void BOp108E(void) // LDY # + { + yrB = FetchWB(); + ccrB &= 0xFD; // CLV + (yrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (yrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOp1093(void) // CMPD DP + { + WORD adr2 = (dprB<<8)|FetchB(), dr = (arB<<8)|brB; + addr = (RdMemB(adr2)<<8) | RdMemB(adr2+1); + WORD dw = dr - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (dr < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((dr^addr^dw^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 7; + } +void BOp109C(void) // CMPY DP + { + WORD adr2 = (dprB<<8)|FetchB(); + addr = (RdMemB(adr2)<<8) | RdMemB(adr2+1); + WORD dw = yrB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (yrB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + ((yrB^addr^dw^(ccrB<<15))&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 7; + } +void BOp109E(void) // LDY DP + { + addr = (dprB<<8)|FetchB(); + yrB = (RdMemB(addr)<<8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (yrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (yrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp109F(void) // STY DP + { + addr = (dprB<<8)|FetchB(); + WrMemB(addr, yrB>>8); WrMemB(addr+1, yrB&0xFF); + ccrB &= 0xFD; // CLV + (yrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (yrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp10A3(void) // CMPD IDX +{ + WORD adr2 = DecodeIDXB(FetchB()), dr = (arB<<8)|brB; + addr = (RdMemB(adr2)<<8) | RdMemB(adr2+1); + WORD dw = dr - addr; + ccrB &= 0xF0; // CLC CLV CLZ CLN + if (dr < addr) ccrB |= 0x01; // Set Carry flag + if ((dr^addr^dw^(ccrB<<15))&0x8000) ccrB |= 0x02; // Set oVerflow + if (dw == 0) ccrB |= 0x04; // Set Zero flag + if (dw&0x8000) ccrB |= 0x08; // Set Negative flag + iclockB += 7; +} +void BOp10AC(void) // CMPY IDX + { + WORD adr2 = DecodeIDXB(FetchB()); + addr = (RdMemB(adr2)<<8) | RdMemB(adr2+1); + WORD dw = yrB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (yrB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^yrB^addr^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 7; + } +void BOp10AE(void) // LDY IDX +{ + addr = DecodeIDXB(FetchB()); + yrB = (RdMemB(addr)<<8) | RdMemB(addr+1); + ccrB &= 0xF1; // CLV CLZ CLN + if (yrB == 0) ccrB |= 0x04; // Adjust Zero flag + if (yrB&0x8000) ccrB |= 0x08; // Adjust Negative flag + iclockB += 6; +} +void BOp10AF(void) // STY IDX + { + addr = DecodeIDXB(FetchB()); + WrMemB(addr, yrB>>8); WrMemB(addr+1, yrB&0xFF); + ccrB &= 0xFD; // CLV + (yrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (yrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp10B3(void) // CMPD ABS + { + addr = FetchWB(); WORD dr = (arB<<8)|brB; + WORD addr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + WORD dw = dr - addr2; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (dr < addr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^dr^addr2^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 8; + } +void BOp10BC(void) // CMPY ABS + { + addr = FetchWB(); WORD addr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + WORD dw = yrB - addr2; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (yrB < addr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^yrB^addr2^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 8; + } +void BOp10BE(void) // LDY ABS + { + addr = FetchWB(); + yrB = (RdMemB(addr)<<8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (yrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (yrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp10BF(void) // STY ABS + { + addr = FetchWB(); + WrMemB(addr, yrB>>8); WrMemB(addr+1, yrB&0xFF); + ccrB &= 0xFD; // CLV + (yrB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (yrB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp10CE(void) // LDS # + { + srB = FetchWB(); + ccrB &= 0xFD; // CLV + (srB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (srB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 4; + } +void BOp10DE(void) // LDS DP + { + addr = (dprB<<8)|FetchB(); + srB = (RdMemB(addr)<<8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (srB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (srB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp10DF(void) // STS DP + { + addr = (dprB<<8)|FetchB(); + WrMemB(addr, srB>>8); WrMemB(addr+1, srB&0xFF); + ccrB &= 0xFD; // CLV + (srB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (srB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp10EE(void) // LDS IDX + { + addr = DecodeIDXB(FetchB()); + srB = (RdMemB(addr)<<8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (srB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (srB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp10EF(void) // STS IDX + { + addr = DecodeIDXB(FetchB()); + WrMemB(addr, srB>>8); WrMemB(addr+1, srB&0xFF); + ccrB &= 0xFD; // CLV + (srB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (srB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 6; + } +void BOp10FE(void) // LDS ABS + { + addr = FetchWB(); + srB = (RdMemB(addr)<<8) | RdMemB(addr+1); + ccrB &= 0xFD; // CLV + (srB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (srB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; + } +void BOp10FF(void) // STS ABS +{ + addr = FetchWB(); + WrMemB(addr, srB>>8); WrMemB(addr+1, srB&0xFF); + ccrB &= 0xFD; // CLV + (srB == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (srB&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + iclockB += 7; +} + +// +// Page two opcodes' execute code +// + +void BOp113F(void) // SWI3 + { + iclockB += 20; + } +void BOp1183(void) // CMPU # + { + addr = FetchWB(); + WORD dw = urB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (urB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^urB^addr^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 5; + } +void BOp118C(void) // CMPS # + { + addr = FetchWB(); + WORD dw = srB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (srB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^srB^addr^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 5; + } +void BOp1193(void) // CMPU DP + { + WORD adr2 = (dprB<<8)|FetchB(); + addr = (RdMemB(adr2)<<8) | RdMemB(adr2+1); + WORD dw = urB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (urB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^urB^addr^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 7; + } +void BOp119C(void) // CMPS DP + { + WORD adr2 = (dprB<<8)|FetchB(); + addr = (RdMemB(adr2)<<8) | RdMemB(adr2+1); + WORD dw = srB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (srB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^srB^addr^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 7; + } +void BOp11A3(void) // CMPU IDX + { + WORD addr2 = DecodeIDXB(FetchB()); + addr = (RdMemB(addr2)<<8) | RdMemB(addr2+1); + WORD dw = urB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (urB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^urB^addr^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 7; + } +void BOp11AC(void) // CMPS IDX + { + WORD addr2 = DecodeIDXB(FetchB()); + addr = (RdMemB(addr2)<<8) | RdMemB(addr2+1); + WORD dw = srB - addr; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (srB < addr ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^srB^addr^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 7; + } +void BOp11B3(void) // CMPU ABS + { + addr = FetchWB(); WORD addr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + WORD dw = urB - addr2; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (urB < addr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^urB^addr2^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 8; + } +void BOp11BC(void) // CMPS ABS + { + addr = FetchWB(); WORD addr2 = (RdMemB(addr)<<8) | RdMemB(addr+1); + WORD dw = srB - addr2; + (dw == 0 ? ccrB |= 0x04 : ccrB &= 0xFB); // Adjust Zero flag + (dw&0x8000 ? ccrB |= 0x08 : ccrB &= 0xF7); // Adjust Negative flag + (srB < addr2 ? ccrB |= 0x01 : ccrB &= 0xFE); // Adjust Carry flag + (((ccrB<<15)^srB^addr2^dw)&0x8000 ? ccrB |= 0x02 : ccrB &= 0xFD); // oVerfl + iclockB += 8; + } + +void IllegalBOp(void) { iclockB++; illegalB = true; } + +// +// Initialize 6809 function adressess +// +void Init_6809B(void) +{ + for(int i=0; i<256; i++) // Set all functions to illegal + { + exec_op0B[i] = IllegalBOp; + exec_op1B[i] = IllegalBOp; + exec_op2B[i] = IllegalBOp; + } + exec_op0B[0x00] = BOp00; exec_op0B[0x03] = BOp03; exec_op0B[0x04] = BOp04; + exec_op0B[0x06] = BOp06; exec_op0B[0x07] = BOp07; exec_op0B[0x08] = BOp08; + exec_op0B[0x09] = BOp09; exec_op0B[0x0A] = BOp0A; exec_op0B[0x0C] = BOp0C; + exec_op0B[0x0D] = BOp0D; exec_op0B[0x0E] = BOp0E; exec_op0B[0x0F] = BOp0F; + exec_op0B[0x12] = BOp12; exec_op0B[0x13] = BOp13; exec_op0B[0x16] = BOp16; + exec_op0B[0x17] = BOp17; exec_op0B[0x19] = BOp19; exec_op0B[0x1A] = BOp1A; + exec_op0B[0x1C] = BOp1C; exec_op0B[0x1D] = BOp1D; exec_op0B[0x1E] = BOp1E; + exec_op0B[0x1F] = BOp1F; exec_op0B[0x20] = BOp20; exec_op0B[0x21] = BOp21; + exec_op0B[0x22] = BOp22; exec_op0B[0x23] = BOp23; exec_op0B[0x24] = BOp24; + exec_op0B[0x25] = BOp25; exec_op0B[0x26] = BOp26; exec_op0B[0x27] = BOp27; + exec_op0B[0x28] = BOp28; exec_op0B[0x29] = BOp29; exec_op0B[0x2A] = BOp2A; + exec_op0B[0x2B] = BOp2B; exec_op0B[0x2C] = BOp2C; exec_op0B[0x2D] = BOp2D; + exec_op0B[0x2E] = BOp2E; exec_op0B[0x2F] = BOp2F; exec_op0B[0x30] = BOp30; + exec_op0B[0x31] = BOp31; exec_op0B[0x32] = BOp32; exec_op0B[0x33] = BOp33; + exec_op0B[0x34] = BOp34; exec_op0B[0x35] = BOp35; exec_op0B[0x36] = BOp36; + exec_op0B[0x37] = BOp37; exec_op0B[0x39] = BOp39; exec_op0B[0x3A] = BOp3A; + exec_op0B[0x3B] = BOp3B; exec_op0B[0x3C] = BOp3C; exec_op0B[0x3D] = BOp3D; + exec_op0B[0x3E] = BOp3E; exec_op0B[0x3F] = BOp3F; exec_op0B[0x40] = BOp40; + exec_op0B[0x43] = BOp43; exec_op0B[0x44] = BOp44; exec_op0B[0x46] = BOp46; + exec_op0B[0x47] = BOp47; exec_op0B[0x48] = BOp48; exec_op0B[0x49] = BOp49; + exec_op0B[0x4A] = BOp4A; exec_op0B[0x4C] = BOp4C; exec_op0B[0x4D] = BOp4D; + exec_op0B[0x4F] = BOp4F; exec_op0B[0x50] = BOp50; exec_op0B[0x53] = BOp53; + exec_op0B[0x54] = BOp54; exec_op0B[0x56] = BOp56; exec_op0B[0x57] = BOp57; + exec_op0B[0x58] = BOp58; exec_op0B[0x59] = BOp59; exec_op0B[0x5A] = BOp5A; + exec_op0B[0x5C] = BOp5C; exec_op0B[0x5D] = BOp5D; exec_op0B[0x5F] = BOp5F; + exec_op0B[0x60] = BOp60; exec_op0B[0x63] = BOp63; exec_op0B[0x64] = BOp64; + exec_op0B[0x66] = BOp66; exec_op0B[0x67] = BOp67; exec_op0B[0x68] = BOp68; + exec_op0B[0x69] = BOp69; exec_op0B[0x6A] = BOp6A; exec_op0B[0x6C] = BOp6C; + exec_op0B[0x6D] = BOp6D; exec_op0B[0x6E] = BOp6E; exec_op0B[0x6F] = BOp6F; + exec_op0B[0x70] = BOp70; exec_op0B[0x73] = BOp73; exec_op0B[0x74] = BOp74; + exec_op0B[0x76] = BOp76; exec_op0B[0x77] = BOp77; exec_op0B[0x78] = BOp78; + exec_op0B[0x79] = BOp79; exec_op0B[0x7A] = BOp7A; exec_op0B[0x7C] = BOp7C; + exec_op0B[0x7D] = BOp7D; exec_op0B[0x7E] = BOp7E; exec_op0B[0x7F] = BOp7F; + exec_op0B[0x80] = BOp80; exec_op0B[0x81] = BOp81; exec_op0B[0x82] = BOp82; + exec_op0B[0x83] = BOp83; exec_op0B[0x84] = BOp84; exec_op0B[0x85] = BOp85; + exec_op0B[0x86] = BOp86; exec_op0B[0x88] = BOp88; exec_op0B[0x89] = BOp89; + exec_op0B[0x8A] = BOp8A; exec_op0B[0x8B] = BOp8B; exec_op0B[0x8C] = BOp8C; + exec_op0B[0x8D] = BOp8D; exec_op0B[0x8E] = BOp8E; exec_op0B[0x90] = BOp90; + exec_op0B[0x91] = BOp91; exec_op0B[0x92] = BOp92; exec_op0B[0x93] = BOp93; + exec_op0B[0x94] = BOp94; exec_op0B[0x95] = BOp95; exec_op0B[0x96] = BOp96; + exec_op0B[0x97] = BOp97; exec_op0B[0x98] = BOp98; exec_op0B[0x99] = BOp99; + exec_op0B[0x9A] = BOp9A; exec_op0B[0x9B] = BOp9B; exec_op0B[0x9C] = BOp9C; + exec_op0B[0x9D] = BOp9D; exec_op0B[0x9E] = BOp9E; exec_op0B[0x9F] = BOp9F; + exec_op0B[0xA0] = BOpA0; exec_op0B[0xA1] = BOpA1; exec_op0B[0xA2] = BOpA2; + exec_op0B[0xA3] = BOpA3; exec_op0B[0xA4] = BOpA4; exec_op0B[0xA5] = BOpA5; + exec_op0B[0xA6] = BOpA6; exec_op0B[0xA7] = BOpA7; exec_op0B[0xA8] = BOpA8; + exec_op0B[0xA9] = BOpA9; exec_op0B[0xAA] = BOpAA; exec_op0B[0xAB] = BOpAB; + exec_op0B[0xAC] = BOpAC; exec_op0B[0xAD] = BOpAD; exec_op0B[0xAE] = BOpAE; + exec_op0B[0xAF] = BOpAF; exec_op0B[0xB0] = BOpB0; exec_op0B[0xB1] = BOpB1; + exec_op0B[0xB2] = BOpB2; exec_op0B[0xB3] = BOpB3; exec_op0B[0xB4] = BOpB4; + exec_op0B[0xB5] = BOpB5; exec_op0B[0xB6] = BOpB6; exec_op0B[0xB7] = BOpB7; + exec_op0B[0xB8] = BOpB8; exec_op0B[0xB9] = BOpB9; exec_op0B[0xBA] = BOpBA; + exec_op0B[0xBB] = BOpBB; exec_op0B[0xBC] = BOpBC; exec_op0B[0xBD] = BOpBD; + exec_op0B[0xBE] = BOpBE; exec_op0B[0xBF] = BOpBF; exec_op0B[0xC0] = BOpC0; + exec_op0B[0xC1] = BOpC1; exec_op0B[0xC2] = BOpC2; exec_op0B[0xC3] = BOpC3; + exec_op0B[0xC4] = BOpC4; exec_op0B[0xC5] = BOpC5; exec_op0B[0xC6] = BOpC6; + exec_op0B[0xC8] = BOpC8; exec_op0B[0xC9] = BOpC9; exec_op0B[0xCA] = BOpCA; + exec_op0B[0xCB] = BOpCB; exec_op0B[0xCC] = BOpCC; + exec_op0B[0xCE] = BOpCE; exec_op0B[0xD0] = BOpD0; exec_op0B[0xD1] = BOpD1; + exec_op0B[0xD2] = BOpD2; exec_op0B[0xD3] = BOpD3; exec_op0B[0xD4] = BOpD4; + exec_op0B[0xD5] = BOpD5; exec_op0B[0xD6] = BOpD6; exec_op0B[0xD7] = BOpD7; + exec_op0B[0xD8] = BOpD8; exec_op0B[0xD9] = BOpD9; exec_op0B[0xDA] = BOpDA; + exec_op0B[0xDB] = BOpDB; exec_op0B[0xDC] = BOpDC; exec_op0B[0xDD] = BOpDD; + exec_op0B[0xDE] = BOpDE; exec_op0B[0xDF] = BOpDF; exec_op0B[0xE0] = BOpE0; + exec_op0B[0xE1] = BOpE1; exec_op0B[0xE2] = BOpE2; exec_op0B[0xE3] = BOpE3; + exec_op0B[0xE4] = BOpE4; exec_op0B[0xE5] = BOpE5; exec_op0B[0xE6] = BOpE6; + exec_op0B[0xE7] = BOpE7; exec_op0B[0xE8] = BOpE8; exec_op0B[0xE9] = BOpE9; + exec_op0B[0xEA] = BOpEA; exec_op0B[0xEB] = BOpEB; exec_op0B[0xEC] = BOpEC; + exec_op0B[0xED] = BOpED; exec_op0B[0xEE] = BOpEE; exec_op0B[0xEF] = BOpEF; + exec_op0B[0xF0] = BOpF0; + exec_op0B[0xF1] = BOpF1; exec_op0B[0xF2] = BOpF2; exec_op0B[0xF3] = BOpF3; + exec_op0B[0xF4] = BOpF4; exec_op0B[0xF5] = BOpF5; exec_op0B[0xF6] = BOpF6; + exec_op0B[0xF7] = BOpF7; exec_op0B[0xF8] = BOpF8; exec_op0B[0xF9] = BOpF9; + exec_op0B[0xFA] = BOpFA; exec_op0B[0xFB] = BOpFB; exec_op0B[0xFC] = BOpFC; + exec_op0B[0xFD] = BOpFD; exec_op0B[0xFE] = BOpFE; exec_op0B[0xFF] = BOpFF; + + exec_op1B[0x21] = BOp1021; exec_op1B[0x22] = BOp1022; exec_op1B[0x23] = BOp1023; + exec_op1B[0x24] = BOp1024; exec_op1B[0x25] = BOp1025; exec_op1B[0x26] = BOp1026; + exec_op1B[0x27] = BOp1027; exec_op1B[0x28] = BOp1028; exec_op1B[0x29] = BOp1029; + exec_op1B[0x2A] = BOp102A; exec_op1B[0x2B] = BOp102B; exec_op1B[0x2C] = BOp102C; + exec_op1B[0x2D] = BOp102D; exec_op1B[0x2E] = BOp102E; exec_op1B[0x2F] = BOp102F; + exec_op1B[0x3F] = BOp103F; exec_op1B[0x83] = BOp1083; exec_op1B[0x8C] = BOp108C; + exec_op1B[0x8E] = BOp108E; exec_op1B[0x93] = BOp1093; exec_op1B[0x9C] = BOp109C; + exec_op1B[0x9E] = BOp109E; exec_op1B[0x9F] = BOp109F; exec_op1B[0xA3] = BOp10A3; + exec_op1B[0xAC] = BOp10AC; exec_op1B[0xAE] = BOp10AE; exec_op1B[0xAF] = BOp10AF; + exec_op1B[0xB3] = BOp10B3; exec_op1B[0xBC] = BOp10BC; exec_op1B[0xBE] = BOp10BE; + exec_op1B[0xBF] = BOp10BF; exec_op1B[0xCE] = BOp10CE; exec_op1B[0xDE] = BOp10DE; + exec_op1B[0xDF] = BOp10DF; exec_op1B[0xEE] = BOp10EE; exec_op1B[0xEF] = BOp10EF; + exec_op1B[0xFE] = BOp10FE; exec_op1B[0xFF] = BOp10FF; + + exec_op2B[0x3F] = BOp113F; exec_op2B[0x83] = BOp1183; exec_op2B[0x8C] = BOp118C; + exec_op2B[0x93] = BOp1193; exec_op2B[0x9C] = BOp119C; exec_op2B[0xA3] = BOp11A3; + exec_op2B[0xAC] = BOp11AC; exec_op2B[0xB3] = BOp11B3; exec_op2B[0xBC] = BOp11BC; +} + +// +// Function to execute one 6809 instruction +// +void Execute_6809B(long num_of_instrs_to_exec) +{ + for(long i=0; i 24550) // Slightly faster IRQs for SUB processor + { + iclockB = 0; + if (!(ccrB&0x10) /*&& (!inter)*/) // Process an interrupt? + { + ccrB |= 0x80; // Set E + WrMemB(--srB, pcrB&0xFF); WrMemB(--srB, pcrB>>8); // Save all regs... + WrMemB(--srB, urB&0xFF); WrMemB(--srB, urB>>8); + WrMemB(--srB, yrB&0xFF); WrMemB(--srB, yrB>>8); + WrMemB(--srB, xrB&0xFF); WrMemB(--srB, xrB>>8); + WrMemB(--srB, dprB); WrMemB(--srB, brB); + WrMemB(--srB, arB); WrMemB(--srB, ccrB); + ccrB |= 0x50; // Set F,I + pcrB = (RdMemB(0xFFF8)<<8) | RdMemB(0xFFF9); // And do it! + } + } + } +} diff --git a/src/v6809b.h b/src/v6809b.h new file mode 100755 index 0000000..b51dba7 --- /dev/null +++ b/src/v6809b.h @@ -0,0 +1,13 @@ +// Virtual 6809B Header file +// +// by James L. Hammons +// +// (c) 1998 Underground Software + +#define BYTE unsigned char +#define WORD unsigned short int + +// Function prototypes + +void Init_6809B(void); // Initialize function pointers +void Execute_6809B(long); // Function to execute 6809 instructions diff --git a/test/rt5.bat b/test/rt5.bat new file mode 100755 index 0000000..c6f9ea6 --- /dev/null +++ b/test/rt5.bat @@ -0,0 +1,2 @@ +gcc -o rthack5.o -c rthack5.cpp +gcc -s -o rthack5.exe rthack5.o screen.o -lgpp diff --git a/test/rthack.cpp b/test/rthack.cpp new file mode 100755 index 0000000..c21b5a4 --- /dev/null +++ b/test/rthack.cpp @@ -0,0 +1,123 @@ +// Rolling Thunder hacker +// +// Just a simple test... + +#include +#include +#include +#include +#include +#include +#include +#include "screen.h" +// +// Get a word from the current input stream +// +unsigned int GetWord(ifstream &fstr) +{ + unsigned int word = 0; + unsigned char ch; + + fstr.get(ch); word = int(ch) << 8; + fstr.get(ch); word |= (int)ch; + + return(word); +} +// +// Get a double word from the current input stream +// +unsigned long int GetDWord(ifstream &fstr) +{ + unsigned long int dword = 0; + unsigned char ch; + + for(int i=0; i<4; i++) + { + fstr.get(ch); dword <<= 8; dword |= (int)ch; + } + return(dword); +} + +void plot(int x, int y, int c) +{ + extern char far * screen; + + screen[x + y*320] = c; +} + +void main(int argc, char *argv[]) +{ + char pal[768], file[120]; + unsigned char ch; + int i,j; + ifstream ff; // Creates an IFSTREAM but without any file hooks + + strcpy(file, "c:\\games\\romhac~1\\"); + + if (argc == 2) + { + strcat(file, argv[1]); + } + else + { + strcat(file, "r9"); + } + + ff.open(file, ios::binary); // Open as a binary file + + if (!ff) { cerr << "Could not open the file! (Maybe it doesn't exist...)"; + return;} + + SetMode(0x13); // Set up screen... + + pal[0] = 0x3F; pal[1] = 0x00; pal[2] = 0x00; // Red + pal[3] = 0x30; pal[4] = 0x00; pal[5] = 0x00; // Darker Red + pal[6] = 0x28; pal[7] = 0x00; pal[8] = 0x00; // Darkest Red + pal[9] = 0x2f; pal[10] = 0x2f; pal[11] = 0x2F; // Light Grey + pal[12] = 0x1F; pal[13] = 0x1f; pal[14] = 0x1f; // Med Grey + pal[15] = 0x0F; pal[16] = 0x0f; pal[17] = 0x0f; // Dark Grey + pal[18] = 0x3F; pal[19] = 0x30; pal[20] = 0x20; // Peach? + pal[21] = 0x20; pal[22] = 0x20; pal[23] = 0x00; + pal[24] = 0x08; pal[25] = 0x3f; pal[26] = 0x10; + pal[27] = 0x06; pal[28] = 0x06; pal[29] = 0x06; // Dk Dk Dk Grey + pal[30] = 0x08; pal[31] = 0x08; pal[32] = 0x10; // Dk Dk Grey + pal[33] = 0x00; pal[34] = 0x3f; pal[35] = 0x00; + + pal[45] = 0x00; pal[46] = 0x00; pal[47] = 0x00; + + outp(0x03C8, 0); // Tell VGA palette data is coming... + for(int i=0; i<48; i++) + { + outp(0x03C9, pal[i]); // Send it... + } +// setpalette(pal); + + while (!kbhit()) + { + for(int x=0; x<320; x+=32) + { + for(int y=0; y<192; y+=16) + { + for(j=0; j<16; j++) + { + for(i=0; i<16; i+=2) + { + ff.get(ch); int lo = ch & 0x0f; int hi = ch / 16; + plot(x+i, y+j, hi); plot(x+i+1, y+j, lo); + } + } + for(j=0; j<16; j++) + { + for(i=16; i<32; i+=2) + { + ff.get(ch); int lo = ch & 0x0f; int hi = ch / 16; + plot(x+i, y+j, hi); plot(x+i+1, y+j, lo); + } + } + } + } + i = getch(); // Get keyboard char + if (i == 27) break; // ESC aborts... + } + SetMode(0x03); // Reset text mode +} diff --git a/test/rthack.mak b/test/rthack.mak new file mode 100755 index 0000000..63bf017 --- /dev/null +++ b/test/rthack.mak @@ -0,0 +1,7 @@ +INCL = -Ic:\bc5\include;c:\bc5\my_stuff + +rthack.exe: rthack.cpp screen.obj + bcc -3 -ml rthack screen.obj + +screen.obj: screen.cpp + bcc -3 -ml -f287 -vi -c $(INCL) screen.cpp diff --git a/test/rthack2.cpp b/test/rthack2.cpp new file mode 100755 index 0000000..154d6aa --- /dev/null +++ b/test/rthack2.cpp @@ -0,0 +1,143 @@ +// Rolling Thunder hacker #2: character graphics +// + +#include +#include +#include +#include +#include +#include +#include +#include "screen.h" + +// With C++ string constants, you need to use a double backslash in +// order to indicate a single backslash. Confusing? You bet! +// [It's called "escaping the escape character."] + +#define fn1 "c:\\games\\romhac~1\\r7" +#define fn2 "c:\\games\\romhac~1\\r8" + +// Global constants + +char far *screen = (char far *) MK_FP(0xA000,0); + +// Get a word from the current input stream + +unsigned int GetWord(ifstream &fstr) +{ + unsigned int word = 0; + unsigned char ch; + + fstr.get(ch); word = int(ch) << 8; + fstr.get(ch); word |= (int)ch; + + return(word); +} + +// Get a double word from the current input stream + +unsigned long int GetDWord(ifstream &fstr) +{ + unsigned long int dword = 0; + unsigned char ch; + + for(int i=0; i<4; i++) + { + fstr.get(ch); dword <<= 8; dword |= (int)ch; + } + return(dword); +} + +void plot(int x, int y, int c) +{ + screen[x + y*320] = c; +} + +void decode(int b1, int b2, int b3, int xx, int yy) +{ + int cc = ((b1 & 0x80) >> 5) | ((b1 & 0x08) >> 2) | ((b3 & 0x80) >> 7); + plot(xx, yy, cc); + cc = ((b1 & 0x40) >> 4) | ((b1 & 0x04) >> 1) | ((b3 & 0x40) >> 6); + plot(xx+1, yy, cc); + cc = ((b1 & 0x20) >> 3) | (b1 & 0x02) | ((b3 & 0x20) >> 5); + plot(xx+2, yy, cc); + cc = ((b1 & 0x10) >> 2) | ((b1 & 0x01) << 1) | ((b3 & 0x10) >> 4); + plot(xx+3, yy, cc); + cc = ((b2 & 0x80) >> 5) | ((b2 & 0x08) >> 2) | ((b3 & 0x08) >> 3); + plot(xx+4, yy, cc); + cc = ((b2 & 0x40) >> 4) | ((b2 & 0x04) >> 1) | ((b3 & 0x04) >> 2); + plot(xx+5, yy, cc); + cc = ((b2 & 0x20) >> 3) | (b2 & 0x02) | ((b3 & 0x02) >> 1); + plot(xx+6, yy, cc); + cc = ((b2 & 0x10) >> 2) | ((b2 & 0x01) << 1) | (b3 & 0x01); + plot(xx+7, yy, cc); +} + +void main(void) +{ + char pal[768]; + unsigned char ch; + int i, j, x, y; + ifstream ff, ff2; // Creates an IFSTREAM but without any file hooks + + ff.open(fn1, ios::binary); // Open as a binary file + ff2.open(fn2, ios::binary); // ditto + + if (!ff) cerr << "Could not open 'ff'"; + if (!ff2) cerr << "Could not open 'ff2'"; + + setmode(0x13); // Set up VGA screen + +/* for(i=0; i<256; i++) + { + pal[i*3] = (int)random(64); + pal[i*3+1] = (int)random(64); + pal[i*3+2] = (int)random(64); + } + setpalette(); +*/ + while (!kbhit()) + { + for(j=0; j<12; j++) + { + for(i=0; i<8; i++) + { + x = i * 16; y = j * 16; + for(int a=0; a<8; a++) + { + ff.get(ch); int b1 = (int)ch; + ff.get(ch); int b2 = (int)ch; + ff2.get(ch); int b3 = (int)ch; + decode(b1, b2, b3, x, y+a); + } + x += 8; + for(int a=0; a<8; a++) + { + ff.get(ch); int b1 = (int)ch; + ff.get(ch); int b2 = (int)ch; + ff2.get(ch); int b3 = (int)ch; + decode(b1, b2, b3, x, y+a); + } + x = i * 16; y += 8; + for(int a=0; a<8; a++) + { + ff.get(ch); int b1 = (int)ch; + ff.get(ch); int b2 = (int)ch; + ff2.get(ch); int b3 = (int)ch; + decode(b1, b2, b3, x, y+a); + } + x += 8; + for(int a=0; a<8; a++) + { + ff.get(ch); int b1 = (int)ch; + ff.get(ch); int b2 = (int)ch; + ff2.get(ch); int b3 = (int)ch; + decode(b1, b2, b3, x, y+a); + } + } + } + i = getch(); + if (i==27) break; // Break out on ESC + } + setmode(0x03); // Reset text mode +} diff --git a/test/rthack2.mak b/test/rthack2.mak new file mode 100755 index 0000000..85bac84 --- /dev/null +++ b/test/rthack2.mak @@ -0,0 +1,6 @@ +rthack2.exe: rthack2.obj + bcc -Lc:\bc5\lib rthack2.obj screen.obj bidss.lib +rthack2.obj: rthack2.cpp + bcc -c rthack2.cpp +screen.obj: screen.cpp + bcc -c screen.cpp diff --git a/test/rthack3.cpp b/test/rthack3.cpp new file mode 100755 index 0000000..e26115c --- /dev/null +++ b/test/rthack3.cpp @@ -0,0 +1,151 @@ +// Rolling Thunder hacker #3: Title graphics +// + +#include +#include +#include +#include +#include +#include +#include +#include "screen.h" + +// With C++ string constants, you need to use a double backslash in +// order to indicate a single backslash. Confusing? You bet! +// [It's called "escaping the escape character."] + +#define fn1 "c:\\games\\romhac~1\\r5" +#define fn2 "c:\\games\\romhac~1\\r6" + +// Global constants + +char far *screen = (char far *) MK_FP(0xA000,0); + +int scx[128] = { + 0, 1, 2, 3, 4, 5, 6, 7, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 0, 1, 16, 17, 0, 1, + 16, 17, 0, 1, 16, 17, 0, 1, + 16, 17, 0, 1, 16, 17, 0, 1, + 16, 17, 0, 1, 16, 17, 0, 1, + 2, 3, 4, 5, 6, 7, 8, 9, + 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, + 10, 11, 12, 13, 14, 15, 16, 17, + 0, 1, 2, 3, 4, 5, 6, 7, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 8, 9, 10, 11, 12, 13, 14, 15}, scy[128] = { + + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 2, 2, 2, 2, 4, 4, + 1, 1, 3, 3, 3, 3, 5, 5, + 4, 4, 6, 6, 6, 6, 8, 8, + 5, 5, 7, 7, 7, 7, 9, 9, + 8, 8, 8, 8, 8, 8, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, + 8, 8, 8, 8, 8, 8, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, + 10, 10, 10, 10, 10, 10, 10, 10, + 11, 11, 11, 11, 11, 11, 11, 11, + 10, 10, 10, 10, 10, 10, 10, 10, + 11, 11, 11, 11, 11, 11, 11, 11}; + +// Plot point on the screen + +void plot(int x, int y, int c) +{ + screen[x + y*320] = c; +} + +// Decode the color info from three bytes @ xx, yy + +void decode(int b1, int b2, int b3, int xx, int yy) +{ + int cc = ((b1 & 0x80) >> 5) | ((b1 & 0x08) >> 2) | ((b3 & 0x80) >> 7); + plot(xx, yy, cc); + cc = ((b1 & 0x40) >> 4) | ((b1 & 0x04) >> 1) | ((b3 & 0x40) >> 6); + plot(xx+1, yy, cc); + cc = ((b1 & 0x20) >> 3) | (b1 & 0x02) | ((b3 & 0x20) >> 5); + plot(xx+2, yy, cc); + cc = ((b1 & 0x10) >> 2) | ((b1 & 0x01) << 1) | ((b3 & 0x10) >> 4); + plot(xx+3, yy, cc); + cc = ((b2 & 0x80) >> 5) | ((b2 & 0x08) >> 2) | ((b3 & 0x08) >> 3); + plot(xx+4, yy, cc); + cc = ((b2 & 0x40) >> 4) | ((b2 & 0x04) >> 1) | ((b3 & 0x04) >> 2); + plot(xx+5, yy, cc); + cc = ((b2 & 0x20) >> 3) | (b2 & 0x02) | ((b3 & 0x02) >> 1); + plot(xx+6, yy, cc); + cc = ((b2 & 0x10) >> 2) | ((b2 & 0x01) << 1) | (b3 & 0x01); + plot(xx+7, yy, cc); +} + +void main(void) +{ + char pal[768] = {0, 0, 0, 41, 0, 0, 0, 50, 0, 46, 46, 46, + 0, 63, 63, 24, 24, 24, 31, 31, 0, 31, 31, 31}; + unsigned char ch; + int i, j, x, y; + ifstream ff, ff2; // Creates an IFSTREAM but without any file hooks + + ff.open(fn1, ios::binary); // Open as a binary file + ff2.open(fn2, ios::binary); // ditto + + ff.ignore(8*8*32*2); ff2.ignore(8*8*32); + + if (!ff) cerr << "Could not open 'ff'"; + if (!ff2) cerr << "Could not open 'ff2'"; + + setmode(0x13); // Set up VGA screen + + setpalette(pal); // Set the pallete + + while (!kbhit()) + { + for(int in=0; in<128; in++) + { + i = scx[in]; j = scy[in]; + + x = i * 16; y = j * 16; + for(int a=0; a<8; a++) + { + ff.get(ch); int b1 = (int)ch; + ff.get(ch); int b2 = (int)ch; + ff2.get(ch); int b3 = (int)ch; + decode(b1, b2, b3, x, y+a); + } + x += 8; + for(int a=0; a<8; a++) + { + ff.get(ch); int b1 = (int)ch; + ff.get(ch); int b2 = (int)ch; + ff2.get(ch); int b3 = (int)ch; + decode(b1, b2, b3, x, y+a); + } + x = i * 16; y += 8; + for(int a=0; a<8; a++) + { + ff.get(ch); int b1 = (int)ch; + ff.get(ch); int b2 = (int)ch; + ff2.get(ch); int b3 = (int)ch; + decode(b1, b2, b3, x, y+a); + } + x += 8; + for(int a=0; a<8; a++) + { + ff.get(ch); int b1 = (int)ch; + ff.get(ch); int b2 = (int)ch; + ff2.get(ch); int b3 = (int)ch; + decode(b1, b2, b3, x, y+a); + } + } + i = getch(); + if (i==27) break; // Break out on ESC + } + setmode(0x03); // Reset text mode +} diff --git a/test/rthack3.mak b/test/rthack3.mak new file mode 100755 index 0000000..486017c --- /dev/null +++ b/test/rthack3.mak @@ -0,0 +1,6 @@ +rthack3.exe: rthack3.obj + bcc -Lc:\bc5\lib rthack3.obj screen.obj bidss.lib +rthack3.obj: rthack3.cpp + bcc -c rthack3.cpp +screen.obj: screen.cpp + bcc -c screen.cpp diff --git a/test/rthack4.cpp b/test/rthack4.cpp new file mode 100755 index 0000000..1085cbc --- /dev/null +++ b/test/rthack4.cpp @@ -0,0 +1,151 @@ +// Rolling Thunder hacker #4: more character graphics +// +// I *think* that the ROMs R17-R20 are character graphics data encoded: +// +// BYTE 1: char # (0-255) +// BYTE 2: Top 3 bits = charset index (i.e. idx*256) +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include "screen.h" + +// With C++ string constants, you need to use a double backslash in +// order to indicate a single backslash. Confusing? You bet! +// [It's called "escaping the escape character."] + +#define fn1 "c:\\games\\romhac~1\\r5" +#define fn2 "c:\\games\\romhac~1\\r6" +#define fn3 "c:\\games\\romhac~1\\r18" + +// Global shit (shouldn't be, but I can't think of an alternative) + +ifstream ff, ff2, ff3; // Creates IFSTREAMs without any file hooks +char * r7l, * r7r, * r8; // Place holders for our charset + +// Get a word from the current input stream + +unsigned int GetWord(ifstream &fstr) +{ + unsigned int word = 0; + unsigned char ch; + + fstr.get(ch); word = int(ch) << 8; + fstr.get(ch); word |= (int)ch; + + return(word); +} + +// Get a double word from the current input stream + +unsigned long int GetDWord(ifstream &fstr) +{ + unsigned long int dword = 0; + unsigned char ch; + + for(int i=0; i<4; i++) + { + fstr.get(ch); dword <<= 8; dword |= (int)ch; + } + return(dword); +} + +void plot(int x, int y, int c) +{ + extern char * screen; + + screen[x + y*320] = c; +} + +void decode(int b1, int b2, int b3, int xx, int yy) +{ + int cc = ((b3 & 0x80) >> 5) | ((b1 & 0x80) >> 6) | ((b1 & 0x08) >> 3); + plot(xx, yy, cc); + cc = ((b3 & 0x40) >> 4) | ((b1 & 0x40) >> 5) | ((b1 & 0x04) >> 2); + plot(xx+1, yy, cc); + cc = ((b3 & 0x20) >> 3) | ((b1 & 0x20) >> 4) | ((b1 & 0x02) >> 1); + plot(xx+2, yy, cc); + cc = ((b3 & 0x10) >> 2) | ((b1 & 0x10) >> 3) | (b1 & 0x01); + plot(xx+3, yy, cc); + cc = ((b3 & 0x08) >> 1) | ((b2 & 0x80) >> 6) | ((b2 & 0x08) >> 3); + plot(xx+4, yy, cc); + cc = (b3 & 0x04) | ((b2 & 0x40) >> 5) | ((b2 & 0x04) >> 2); + plot(xx+5, yy, cc); + cc = ((b3 & 0x02) << 1) | ((b2 & 0x20) >> 4) | ((b2 & 0x02) >> 1); + plot(xx+6, yy, cc); + cc = ((b3 & 0x01) << 2) | ((b2 & 0x10) >> 3) | (b2 & 0x01); + plot(xx+7, yy, cc); +} + +void PlotChar(int sx, int sy, int chr, int idx) +{ + unsigned char ch; + long chr_index; + + chr_index = (((idx<<8)+chr)<<3); + + for(int i=0; i<8; i++) + { + int b1 = (int)r7l[chr_index]; + int b2 = (int)r7r[chr_index]; + int b3 = (int)r8[chr_index++]; + decode(b1, b2, b3, sx*8, (sy*12)+i); + } +} + +void main(int argc, char *argv[]) +{ + char pal[768]; + unsigned char ch; + int i, j, x, y, index; + + if (argc == 2) index = atoi(argv[1]); + else index = 0; + + set_new_handler(0); // Make 'new' return NULL on failure... + r7l = new char[32768]; r7r = new char[32768]; + r8 = new char[32768]; // Initialize charspaces + + ff.open(fn1, ios::binary); // Open as a binary file + ff2.open(fn2, ios::binary); // ditto + ff3.open(fn3, ios::binary); // ditto + + if (!ff) cerr << "Could not open 'ff'"; // Handle any errors... + if (!ff2) cerr << "Could not open 'ff2'"; + if (!ff3) cerr << "Could not open 'ff3'"; + if (!r7l) cerr << "Could not allocate RAM space #1!"; + if (!r7r) cerr << "Could not allocate RAM space #2!"; + if (!r8) cerr << "Could not allocate RAM space #3!"; + + for(long i=0; i<32768; i++) { ff.get(ch); r7l[i] = ch; + ff.get(ch); r7r[i] = ch; } + for(long i=0; i<32768; i++) { ff2.get(ch); r8[i] = ch; } + + ff.close(); ff2.close(); // Close da filez... + + SetMode(0x13); // Set up VGA screen + + while (!kbhit()) + { + int charact = 0; + + for(j=0; j<16; j++) + { + for(i=0; i<32; i+=2) + { + PlotChar(i, j, charact++, index); + } + } + i = getch(); + if (i==27) break; // Break out on ESC + if (i=='[') index--; // Decrease... + if (i==']') index++; // Increase... + } + SetMode(0x03); // Reset text mode +} diff --git a/test/rthack4.mak b/test/rthack4.mak new file mode 100755 index 0000000..23b3f16 --- /dev/null +++ b/test/rthack4.mak @@ -0,0 +1,14 @@ +.AUTODEPEND +# +# Options +# +INCL = -Ic:\bc5\include;c:\bc5\my_stuff +LIB = -Lc:\bc5\lib +# +# Dependency List +# +rthack4.exe: rthack4.cpp screen.obj + bcc -3 -ml rthack4 screen.obj + +screen.obj: screen.cpp + bcc -3 -ml -f287 -vi -c $(INCL) screen.cpp diff --git a/test/rthack4.txt b/test/rthack4.txt new file mode 100755 index 0000000..138782a --- /dev/null +++ b/test/rthack4.txt @@ -0,0 +1,2 @@ +bcc -ml rthack4 screen.obj + diff --git a/test/rthack5.cpp b/test/rthack5.cpp new file mode 100755 index 0000000..ef7ce64 --- /dev/null +++ b/test/rthack5.cpp @@ -0,0 +1,161 @@ +// Rolling Thunder hacker #5: more character graphics +// +// I *think* that the ROMs R17-R20 are character graphics data encoded: +// +// BYTE 1: char # (0-255) +// BYTE 2: Top 3 bits = charset index (i.e. idx*256) +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include "screen.h" + +// With C++ string constants, you need to use a double backslash in +// order to indicate a single backslash. Confusing? You bet! +// [It's called "escaping the escape character."] + +#define fn1 "rt1-7.rom" +#define fn2 "rt1-8.rom" +#define fn3 "rt1-5.rom" +#define fn4 "rt1-6.rom" + +// Global shit (shouldn't be, but I can't think of an alternative) + +fstream ff, ff2, ff3, ff4, ff5; // Creates FSTREAMs without any file hooks +char * charset, * cs2, * cs3; // Place holders for our charsets + +int main(int argc, char *argv[]) +{ + int idx[8] = { 7, 5, 3, 1, 6, 4, 2, 0 }; + char pal[768], file[120], scr[2016]; + unsigned char ch, ch2; + int x, y, index = 1, scridx, chrsel = 0; + long i; + extern bool transparent; + transparent = false; + + strcpy(file, "rt1-"); + + if (argc == 2) + { + strcat(file, argv[1]); strcat(file, ".rom"); + if (atoi(argv[1]) > 18) file[2] = '3'; + } + else + { + strcat(file, "17.rom"); + } + + set_new_handler(0); // Make 'new' return NULL on failure... + charset = new char[0xC000]; // charspace + if (!charset) cerr << "Could not allocate character RAM!"; + cs2 = new char[0xC000]; // charspace + if (!cs2) cerr << "Could not allocate character RAM!"; + cs3 = new char[0xC000]; // charspace + if (!cs3) cerr << "Could not allocate character RAM!"; + + ff.open(fn1, ios::binary|ios::in); // Open as a binary file + if (!ff) { cerr << "Could not open 'ff'"; // Handle any errors... + return -1; } + ff2.open(fn2, ios::binary|ios::in); // ditto + if (!ff2) { cerr << "Could not open 'ff2'"; + return -1; } + ff4.open(fn3, ios::binary|ios::in); // Open as a binary file + if (!ff) { cerr << "Could not open 'ff'"; // Handle any errors... + return -1; } + ff5.open(fn4, ios::binary|ios::in); // ditto + if (!ff2) { cerr << "Could not open 'ff2'"; + return -1; } + ff3.open(file, ios::binary|ios::in); // ditto + if (!ff3) { cerr << "Could not open '" << file << "'"; + return -1; } + + for(i=0; i<0xC000; i+=3) + { + ff.get(ch); charset[i] = ch; + ff.get(ch); charset[i+1] = ch; + ff2.get(ch); charset[i+2] = ch; + } + for(i=0; i<0xC000; i+=3) + { + ff.get(ch); cs2[i] = ch; + ff.get(ch); cs2[i+1] = ch; + ff2.get(ch); cs2[i+2] = ch; + } + for(i=0; i<0xC000; i+=3) + { + ff4.get(ch); cs3[i] = ch; + ff4.get(ch); cs3[i+1] = ch; + ff5.get(ch); cs3[i+2] = ch; + } + + ff.close(); ff2.close(); ff4.close(); ff5.close(); // Close da filez... + +// for(i=0; i<0xC000; i++) cout << (unsigned int)charset[i] << " "; + + SetModeX(); // Set up VGA screen + + pal[0] = 0x00; pal[1] = 0x00; pal[2] = 0x00; // Black + pal[3] = 0x30; pal[4] = 0x00; pal[5] = 0x00; // Darker Red + pal[6] = 0x28; pal[7] = 0x00; pal[8] = 0x00; // Darkest Red + pal[9] = 0x2f; pal[10] = 0x2f; pal[11] = 0x2F; // Light Grey + pal[12] = 0x1F; pal[13] = 0x1f; pal[14] = 0x1f; // Med Grey + pal[15] = 0x0F; pal[16] = 0x0f; pal[17] = 0x0f; // Dark Grey + pal[18] = 0x3F; pal[19] = 0x30; pal[20] = 0x20; // Peach? + pal[21] = 0x20; pal[22] = 0x20; pal[23] = 0x00; + pal[24] = 0x08; pal[25] = 0x3f; pal[26] = 0x10; + pal[27] = 0x06; pal[28] = 0x06; pal[29] = 0x06; // Dk Dk Dk Grey + pal[30] = 0x08; pal[31] = 0x08; pal[32] = 0x10; // Dk Dk Grey + pal[33] = 0x00; pal[34] = 0x3f; pal[35] = 0x00; + + pal[45] = 0x00; pal[46] = 0x00; pal[47] = 0x00; + + outp(0x03C8, 0); // Tell VGA palette data is coming... + for(i=0; i<48; i++) + { + outp(0x03C9, pal[i]); // Send it... + } + + for(i=0; i<2016; i++) { ff3.get(ch); scr[i] = ch; } + while (1) + { + scridx = 0; + for(x=0; x<36; x+=4) + { + for(y=0; y<28; y++) + { + for(int q=0; q<4; q++) + { + ch = scr[scridx++]; index = (int)((scr[scridx++] >> 5) & 0x07); + if (chrsel == 0) + PlotChar(x+q, y, ch, idx[index], (unsigned char *)charset); + if (chrsel == 1) + PlotChar(x+q, y, ch, idx[index], (unsigned char *)cs2); + if (chrsel == 2) + PlotChar(x+q, y, ch, idx[index], (unsigned char *)cs3); + } + } + } + i = getch(); + if (i==27) break; // Break out on ESC + if (i==32) { for(i=0; i<2016; i++) { ff3.get(ch); scr[i] = ch; } } + if (i=='[') { int temp = idx[0]; for(i=0; i<7; i++) idx[i] = idx[i+1]; + idx[7] = temp; } + if (i==']') { chrsel++; if (chrsel==3) chrsel = 0; } + } + SetMode(0x03); // Reset text mode + ff3.close(); + + scridx = 0; + for(i=0; i<2016; i++) + { printf("%02X ", (unsigned char)scr[i]); + scridx++; if (scridx == 24) {cout << endl; scridx = 0;} + } + delete[] charset; delete[] cs2; delete[] cs3; +} diff --git a/test/snd.bat b/test/snd.bat new file mode 100755 index 0000000..73e69dc --- /dev/null +++ b/test/snd.bat @@ -0,0 +1,2 @@ +gcc -o sound.o -c sound.cpp +gcc -s -o sound.exe sound.o sbdrv.o keyboard.o -lgpp -lstdcxx diff --git a/test/sound.cpp b/test/sound.cpp new file mode 100755 index 0000000..abd2d5c --- /dev/null +++ b/test/sound.cpp @@ -0,0 +1,162 @@ +// Sound player +// (Last build: 7/1/1998) +// +// by James L. Hammons +// +// (c) 1998 Underground Software + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "keyboard.h" +#include "sbdrv.h" // Goes before GUI so it can have access to uint.. + +#define ROM21 "RT1-21.ROM" +#define ROM22 "RT2-22.ROM" + +#define BYTE unsigned char +#define WORD unsigned short int +#define DWORD unsigned long int + +// Global defines + +BYTE * voice_rom; + +fstream tr; // Tracelog hook + +bool snd_go = false; // for sound routines... +uint32 start_pos, end_pos, rom_pos; +uint8 sample; +int8 delta_x; + +// +// Sound stuff (Will go elsewhere???) +// +void SpawnSound(void) +{ + snd_go = true; rom_pos = start_pos; sample = 0; +} +void SoundFunc(uint8 * buff, uint16 num) +{ + uint16 cnt = 0; // 0-22 different sounds... + uint8 start_samp, end_samp; + + memset(buff, 128, num); // Kill sound... + if (snd_go) + { + while (cnt != num) + { + if (sample == 0) + { + start_samp = voice_rom[rom_pos++]; + end_samp = voice_rom[rom_pos]; + delta_x = (end_samp - start_samp) / 4; // Interpolation value... + sample = 4; + } + buff[cnt++] = start_samp; + start_samp += delta_x; + sample--; + if (rom_pos == end_pos) // Reached cutoff yet? + { + snd_go = false; + cnt = num; + } + } + } +} +// +// Generic Load file into image space +// (No error checking performed! Responsibility of caller!) +// +bool LoadImg(char * filename, BYTE * mem, DWORD address, DWORD length) +{ + ifstream ff; + char ch; + + ff.open(filename, ios::binary | ios::in); // Open 'da file... + if (ff) + { + for(DWORD i=0; i +#include +#include +#include +#include +#include +#include +#include "screen.h" + +#define PROM1 "RT1-1.BIN" +#define PROM2 "RT1-2.BIN" +#define PROM3 "RT1-3.BIN" +#define PROM4 "RT1-4.BIN" + +BYTE * grom3, * spr_rom; + +int main(int argc, char *argv[]) +{ + fstream ff1, ff2; + BYTE ch; + BYTE ccolor[256][8]; + BYTE scolor[128][16]; + BYTE statpal[768]; + char file[120]; + + ff1.open(PROM3, ios::binary|ios::in); + if (ff1) + { + for(int i=0; i<256; i++) // Load pallete with PROM values + { + for(int j=0; j<8; j++) + { + ff1.get(ch); + ccolor[i][j] = (BYTE)ch; + } + } + ff1.close(); + } + ff1.open(PROM4, ios::binary|ios::in); + if (ff1) + { + for(int i=0; i<128; i++) // Load pallete with PROM values + { + for(int j=0; j<16; j++) + { + ff1.get(ch); + scolor[i][j] = (BYTE)ch; + } + } + ff1.close(); + } + + ff1.open(PROM1, ios::binary|ios::in); + ff2.open(PROM2, ios::binary|ios::in); + if (ff1) // If open was successful... + { + for(int i=0; i<768; i+=3) + { + ff1.get(ch); + statpal[i] = (BYTE)(ch&0x0F); + statpal[i+1] = (BYTE)(ch>>4); + ff2.get(ch); + statpal[i+2] = (BYTE)ch; + } + // Do palette stretching here... I.e. add 0 to hinyb 0, 1 to hinyb 1, etc + for(int i=0; i<768; i++) + { + statpal[i] <<= 2; + if ((statpal[i]&0xF0) == 1) statpal[i]++; + if ((statpal[i]&0xF0) == 2) statpal[i] += 2; + if ((statpal[i]&0xF0) == 3) statpal[i] += 3; + } + ff1.close(); ff2.close(); + } + + SetModeX(); // Set up screen + for(int i=0; i<256; i++) // Set up RGB colors... + { + outp(0x03C8, i); // Tell VGA palette data is coming... + outp(0x03C9, statpal[i*3]); // Send it... + outp(0x03C9, statpal[i*3+1]); + outp(0x03C9, statpal[i*3+2]); + } + extern BYTE spr_color_index; + + while (!kbhit()) + { + strcpy(file, "c:\\games\\romhac~1\\"); + if (argc == 2) strcat(file, argv[1]); + else strcat(file, "r9"); + + ff1.open(file, ios::binary|ios::in); // Open as a binary file + + if (!ff1) { cerr << "Could not open the file! (Maybe it doesn't exist...)"; + return -1; } + for(int x=0; x<320; x+=32) + { + for(int y=0; y<224; y+=16) + { + for(int j=0; j<16; j++) + { + for(int i=0; i<16; i+=2) + { + ff1.get(ch); int lo = ch & 0x0f; int hi = ch / 16; + Plot(x+i, y+j, scolor[spr_color_index][hi]); + Plot(x+i+1, y+j, scolor[spr_color_index][lo]); + } + } + for(int j=0; j<16; j++) + { + for(int i=16; i<32; i+=2) + { + ff1.get(ch); int lo = ch & 0x0f; int hi = ch / 16; + Plot(x+i, y+j, scolor[spr_color_index][hi]); + Plot(x+i+1, y+j, scolor[spr_color_index][lo]); + } + } + } + } + ff1.close(); + int i = getch(); + if (i==27) break; // Break out on ESC + if (i=='[') spr_color_index--; // Decrease... + if (i==']') spr_color_index++; // Increase... + } + SetMode(0x03); // Reset text mode +} diff --git a/test/union.cpp b/test/union.cpp new file mode 100755 index 0000000..99c32a3 --- /dev/null +++ b/test/union.cpp @@ -0,0 +1,49 @@ +// Union bit fields... + +#include +#include +#include +#include +#include +#include +#include + +union { + struct { + unsigned char C: 1; // Carry flag + unsigned char V: 1; // oVerflow flag + unsigned char Z: 1; // Zero flag + unsigned char N: 1; // Negative flag + unsigned char I: 1; // IRQ flag + unsigned char H: 1; // Half carry flag + unsigned char F: 1; // Fast IRQ flag + unsigned char E: 1; // Entire flag + } flag; + unsigned char byte; } cc; + +union BYTE { + struct { + unsigned char b0: 1; unsigned char b1: 1; unsigned char b2: 1; + unsigned char b3: 1; unsigned char b4: 1; unsigned char b5: 1; + unsigned char b6: 1; unsigned char b7: 1; + } bit; + unsigned char byte; }; + +union WORD { + struct { unsigned char lo: 8; unsigned char hi: 8; } b; + unsigned int word; } hilo; + +void main() +{ + for(int i=0; i<256; i++) + { + cc.byte = i; + cout << cc.flag.E << " " << cc.flag.F << " " + << cc.flag.H << " " << cc.flag.I << " " + << cc.flag.N << " " << cc.flag.Z << " " + << cc.flag.V << " " << cc.flag.C << endl; + } + hilo.word = 0x6A44; + cout << hex << hilo.word << " " + << (int) hilo.b.lo << " " << (int) hilo.b.hi << endl; +} diff --git a/test/wav.cpp b/test/wav.cpp new file mode 100755 index 0000000..9867266 --- /dev/null +++ b/test/wav.cpp @@ -0,0 +1,101 @@ +// WAV file header reader +// (Last build: 7/21/1998) +// +// by James L. Hammons +// +// (c) 1998 Underground Software + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BYTE unsigned char +#define WORD unsigned short int +#define DWORD unsigned long int + +// +// Main loop +// +int main(int argc, char * argv[]) +{ + fstream ff; // Declare fstream without file hooks... + char file[200]; + BYTE ch; + + strcpy(file, ".\\sounds\\"); + + if (argc == 2) + { + strcat(file, argv[1]); + } + else + { + strcat(file, "fm12.wav"); + } + ff.open(file, ios::binary | ios::in); + + cout << "Header: ["; + for(int i=0; i<4; i++) { ff.get(ch); cout << ch; } + cout << "]" << endl; + + DWORD len; + + ff.get(ch); len = (int)ch; + ff.get(ch); len |= (int)ch << 8; + ff.get(ch); len |= (int)ch << 16; + ff.get(ch); len |= (int)ch << 24; + + cout << "Length of header chunk: [" << hex << len << "]" << endl; + + cout << "Header2: ["; + for(int i=0; i<8; i++) { ff.get(ch); cout << ch; } + cout << "]" << endl; + + ff.get(ch); len = (int)ch; + ff.get(ch); len |= (int)ch << 8; + ff.get(ch); len |= (int)ch << 16; + ff.get(ch); len |= (int)ch << 24; + + cout << "Length of header2 chunk: [" << hex << len << "]" << endl; + + for(int i=0; i<(signed)len; i++) + { + ff.get(ch); cout << hex << (int)ch << " "; + } + cout << endl; + + cout << "Header3: ["; + for(int i=0; i<4; i++) { ff.get(ch); cout << ch; } + cout << "]" << endl; + + ff.get(ch); len = (int)ch; + ff.get(ch); len |= (int)ch << 8; + ff.get(ch); len |= (int)ch << 16; + ff.get(ch); len |= (int)ch << 24; + + cout << "Length of header3 chunk: [" << hex << len << "]" << endl; + + for(int i=0; i<(signed)len; i++) + { + ff.get(ch); cout << hex << (int)ch << " "; + } + cout << endl; + + for(int i=0; i<120; i++) + { + ff.get(ch); cout << hex << (int)ch << " "; + } + cout << endl; + + ff.close(); // Close tracelog +} -- 2.37.2

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 G#`q_?$5bN# literal 0 HcmV?d00001 diff --git a/res/keycnb.raw b/res/keycnb.raw new file mode 100755 index 0000000000000000000000000000000000000000..d9964e61d3c314c56fc9794ece1d307c2eec9b15 GIT binary patch literal 2025 zcmcJMZH|Q?3`I#MPr)Cq!u_vtdT(1P6@4a?X$&9ba0*z;pW?IB&7v+(re&?oN%nX6 z1=L+L+-vWHSnc^NCo+MzZKU-|yO2|Oq-*27c8{}=4}x1*2`oTmlxH}T+~@KEo|3>#-r-yFlncwB@=ThX@OP5(|7?z<6!~7oGY3;T zgi<$)W180=Q!-0}Gh gx{)KF4BJMSN|uAlDq*vmEeUlDYL^Z(2TtY4-ZIKJX%{K_APh^VTWg%DzlDW#lqDW%rhTI;ke&as7*LD6}w`F?ebbhScb$$7&2Z3?z&-e>vLJ%^1d$L+y(PHeICn)oA0;JWxM@w)8}&Q z?mD{1}e~j!E_)13V5IZ324C1MUOoS3>xg81QV$D$)9OVXh~Y~B_Qb@ zZBJC91Ldhr$-jc)k;5o))HGTiy^P+n`j*mOiU?vv&gdOuz*1cRAeL{3$gnE ziO>Yg2<3#7+KH{~Xb1X$4HB%z(?e?|2LAK;S&W2nS`y3{Iz}dyO5zd0q!$E*TCl)! z5S2(oy#%#r7I`U%Op#R!A+pIQx4Pv4M%ZPP$&Gbt(xPAa`Sw aui|@^q1rSL-piWM_smvCl^l)++shx8XjOFp literal 0 HcmV?d00001 diff --git a/res/keycns.raw b/res/keycns.raw new file mode 100755 index 0000000000000000000000000000000000000000..13a545188e4a76bc5ba18f6d0e6bf31083eef404 GIT binary patch literal 448 zcmZ9IK@!6-2m`@TFgf`D&n*HwO{xQ7v?EOnQEBl|j|++qx7SnEqCrzVbg9G9vU@~q z2-ED62g~At#)VXj!6H%xJBp-6DwE>@t_U|G_FO>sU!ufIqhkfpl}m%1x+eUsId6c4 zkDuQ+aksq2(O=A!e$Zb*6Fjh9k(Cc*Qg2Vl-FuiRFI=U?D4rEGId?vgWQON0UJ3dF DCN~QI literal 0 HcmV?d00001 diff --git a/res/nogui.pcx b/res/nogui.pcx new file mode 100755 index 0000000000000000000000000000000000000000..ef0ee68a32198959d7e111c3b61c11a492237ce9 GIT binary patch literal 1357 zcmbVM%dO-#5Uh7FU>GLA01Sfx?4gtB5Eud@5SW2x-aLlD5Eue)Bh7Dj4bTq2RtO4U z4|H+f!fOM**cwWsuKrh3{NcNo@4@RQ{yw~Xc;TyaPDE7IdmloGF{YGq&ZU%EYin)a z_ujj;cH1_*{EXrBf3H9A8F%vw9$3vfUD9ek;tq40?#VoG8*d+zx#J3RpFSmX!-ZH{ z2Aa$jE2TF|Z)SZn7c4ZR_;@o{B12qHt2r%`xtz@DW=>|o`3vFYM2(qF#Fz2LMNOyT z)m&beX*|EKZ!ie2uggF1qgjqC@3D^N@?7s8N3$LoZ@_%~U2`z&VKU2snGfdjTu&ED z2bMY%%fWz}VfR#B=G9xTsV#CvD`ayY2?=$~@ z=lvr$!GGF33Irel1!zF0JKzBUERcZ+RA3`$u>}W(c>U&}4q|Pz!;KC#x*Bcvh_VIU zA|o*a!!tHRz8i%-`JO{BvDegF?yV-VHO4Jx=MVx?LTl(9) z?_D*Dc#+_oI_IsG!tahPd$H6cl^nDNwp4rF`o@novGMx z$o!EVg~qPPfZFI?V^}usvA2?W8aNiAYT=y?;-X4&NaV+&dvw;Du?OsmJ%NJ?wB!Ln z+O3BRkO)oid5{$Ape=8xJ6eZ!GFX(;L#;V@K6&J52qa^qBr&~9?}@AwG9KX7wG1y1 z_3Bv;f{+p?)_KvO8n`J)nIMT|lE`jT+Q~T~CJ2!sXlI=jQcgr|=#{;(bh2w5V~t3T g4Ul)Gl`YP;;<`wc)VVK9MB5Tu>BS|#SLl}i1mU>yO#lD@ literal 0 HcmV?d00001 diff --git a/res/noguib.pcx b/res/noguib.pcx new file mode 100755 index 0000000000000000000000000000000000000000..8651b2a24740a0283a99bf56ee2c193ee0e6e915 GIT binary patch literal 2200 zcmbVNyKy8p5PdXMrBZF7Q2Vh7<2=zo5(ohyAOs|V5DR-wBdyPP>Q+Yk zMkDtR>Is*{rv8LFith#ID+}`p?2M6|7_h@m$5AojUX5ZVV6Xn5H+MVeK>NB_%}d0+ zqFK;q#q`hoyzoP}QHdUshXDSJYP?tDE2+qWq#s`;I4#{io|Zg&bwB>L8{a+B4q4xm z=ZbxN9pCNxuCSA=<4rW<()}8JP@U46t8>^%Tq1YOD1GsC2fbp zcIfD}U-(Eu*9Y|7xv#=8YHylN{;f@T@Raz2#SF>rfeY{O+#pUHSHgNB!OnM5+3WDxB+m1Ge8IJNeiT5p4mqv+#52H%-cmw~wB zJpE5|*Z~1ZKmkLb(H-!B1vHR>2n@hPqs9~r9ISVLJ2(TYb=2ZUhas9F>g*Bi6xAs{8xiq@bttc7zZ1ycznm>6t|E+=1- z%bB55MKv%EE+7vT8 zrWzBOKeD1wSrrvq^lcDbf2UG8rlO)bY@Im z6zdfjyKP*Jpy{S;)sbjDpnI2!6<*&{Y8)CwgVL)A%DVLqxh?cTHMwYwPtvMXPdVRF z*D7t@F(3n6mJ|+^>-mi9vL!S%MO;KNs@QQr4Ueqxe7%9Hr&W~wmM#P5S8imZkrCfhx5wx304&0Y6oOTf#Z>ab{&+}>)Y zC{$fRvqQ}otF=HWgt{d7zpcfv#x52VwL6?(?FX#!uy>SJD<4cFmtyfgAVECgS%osK zzC+6&%8P*ZycRf7j6p&hDVuGt=bmpbj5hlCXFV3uFO$+5k?NH!SP1LA{_n-FH=V-x zB>s&up7!P9OVpOX{Pr3C@|$Y-xF06-Z*{_=y$U=7eAcwIs)T^^6uO@+)6Zh*^b-rE Ynw$%k*R@B7~S-po5!T5p5T zd;EOC4<9L|Qc7!WjIq`xN#dMK(=^MnJkQIrTr3tL1R+FKRcJ}Hnyml%Jb}OTwJ2uS zika~B+Ebh$TKA{@BA)k(xbIJ&;FvM(ZqbW7?V?_9ce=f}J6k)!9BZ9k6LKv&!f1m) zr~SCs@t4OqVoImSSL;vV>#O}{caFp5ZaXRwb-7a?p=co5zUIzW%)RIkh}yk=^bGCT zpZd#wZ*x?D7+o%(VH~#$_|v$%&dse}zo?@Tb0S~Q5sewrii*0^^QRk4DXt$*9}N7( zUV;7TH;1_6e~!og#o)p8%JoNViMT}^-JTo_2mTDv_T*NC===DlKN}1WCU=LAVqaqx z-yGbz?f=;MWCJ7rtN*Kojdr~KAo_G?x$@_oc!pVTclf~`3Igm6hW-Wl+@DOD9xYen zUK8@|f&YEv>+P@ng+Gt{F9-g3D;~G*`saJ(z~u=$T1IY9w*A@ucQ=ODThqz?cs%mw zs~)G5TU7cL+I-|MiT3!jy(=Ha;{q-J_^sj}P`kt35u&dq(}y?X&)MGoWZGJGbwQ