From 87647f03b4d7cf53948ed8f9f25ad30da5e596bf Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Thu, 23 Jul 2009 19:59:46 +0000 Subject: [PATCH] Scrubbed all traces of BYTE, WORD, & DWORD out of the code, remove unnecessary v6809 core files. --- makefile | 2 +- res/thunder.rc | 18 +- src/gui.cpp | 195 ++-- src/gui.h | 26 +- src/resource.h | 101 +- src/thunder.cpp | 222 ++-- src/types.h | 44 +- src/v6809.cpp | 374 +++---- src/v6809.h | 30 +- src/v6809b.cpp | 2716 ----------------------------------------------- src/v6809b.h | 13 - 11 files changed, 501 insertions(+), 3240 deletions(-) delete mode 100755 src/v6809b.cpp delete mode 100755 src/v6809b.h diff --git a/makefile b/makefile index 4b5bfdf..d0f50c7 100755 --- a/makefile +++ b/makefile @@ -117,7 +117,7 @@ obj/%.o: src/%.cpp @$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@ obj/%.o: src/%.asm - nasm -f elf32 -I res/ $< -o $@ + nasm -f elf32 -I ./res/ $< -o $@ # *** sigh *** yet another variable... !!! FIX !!! # nasm -f coff $< -o $@ diff --git a/res/thunder.rc b/res/thunder.rc index f7a9217..22b02cc 100755 --- a/res/thunder.rc +++ b/res/thunder.rc @@ -1,9 +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" +#include "winresrc.h" + +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON1 ICON DISCARDABLE "thunder.ico" diff --git a/src/gui.cpp b/src/gui.cpp index 2305ea6..cd21ca5 100755 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -11,11 +11,12 @@ // JLH 07/23/2009 Added changelog ;-) // +#include "gui.h" + #include #include // Needed for tracelog -#include "SDL.h" // Needed for screen.h +//#include "SDL.h" // Needed for screen.h #include "screen.h" -#include "gui.h" #include "resource.h" // Thunder graphics & sounds using namespace std; // Yes! @@ -24,34 +25,34 @@ using namespace std; // Yes! 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 uint8 my_scr[0x14000]; // Screen buffer... +extern uint8 * gram1; // Game RAM (do here??) +extern uint8 hScrollOffset; // Horizontal scroll offset +extern uint8 vScrollOffset; // Vertical scroll offset +extern uint32 voffsets[8]; +extern uint8 * voice_rom; // PCM data pointer extern fstream tr; // Tracelog // Global shit -WORD text_life; // How long text is visible +uint16 text_life; // How long text is visible bool show_text; // Whether or not to show text -WORD show_which_msg; // Which message to show +uint16 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 +uint16 selection; // Which GUI item currently selected +uint16 snd_num; +uint16 gui_debounce; // GUI key debounce value +uint16 num_coins; // Number of coins dropped +uint16 blink = 0; // Used to blink player 1 & 2 start buttons +uint16 flash = 23; // Used to flash GUI lights +uint16 iline = 0; // Used to roll line +uint16 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... +uint16 dswitch; // Which dipswitch is selected... // The following are global for the sound routines... @@ -59,7 +60,7 @@ 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; +uint8 * sndp1, * sndp2, * sndp3, * sndp4, * sndp5, * sndp6; uint32 rom_pos, end_pos; uint32 spos1, end_pos1; uint32 spos2, end_pos2; @@ -74,12 +75,12 @@ float sample2; uint8 prevSamp2; int8 delta_x2; -BYTE * snd_array[3] = { sunknown, scya, scamera }; // From RESOURCE.H -DWORD snd_lens[3] = { sunknownlen, scyalen, scameralen }; +uint8 * snd_array[3] = { sunknown, scya, scamera }; // From RESOURCE.H +uint32 snd_lens[3] = { sunknownlen, scyalen, scameralen }; // Bitmaps -BYTE bmp1[] = { +uint8 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, @@ -88,7 +89,7 @@ BYTE bmp1[] = { 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[] = { +uint8 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, @@ -97,7 +98,7 @@ BYTE bmp2[] = { 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[] = { +uint8 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, @@ -106,7 +107,7 @@ BYTE bmp3[] = { 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 +uint8 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, @@ -117,7 +118,7 @@ BYTE boptions[] = { // 35x9 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[] = { +uint8 bn0[] = { 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, @@ -126,7 +127,7 @@ BYTE bn0[] = { 0,0,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bn1[] = { +uint8 bn1[] = { 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,0,0,0, @@ -135,7 +136,7 @@ BYTE bn1[] = { 0,1,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bn2[] = { +uint8 bn2[] = { 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, @@ -144,7 +145,7 @@ BYTE bn2[] = { 0,1,1,1,1,0, 0,0,0,0,0,0 }; -BYTE bn3[] = { +uint8 bn3[] = { 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, @@ -153,7 +154,7 @@ BYTE bn3[] = { 0,1,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bn4[] = { +uint8 bn4[] = { 0,0,0,0,0,0, 0,0,0,1,0,0, 0,1,0,1,0,0, @@ -162,7 +163,7 @@ BYTE bn4[] = { 0,0,0,1,0,0, 0,0,0,0,0,0 }; -BYTE bn5[] = { +uint8 bn5[] = { 0,0,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,0, @@ -171,7 +172,7 @@ BYTE bn5[] = { 0,1,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bn6[] = { +uint8 bn6[] = { 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,0,0, @@ -180,7 +181,7 @@ BYTE bn6[] = { 0,0,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bn7[] = { +uint8 bn7[] = { 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,1,0, @@ -189,7 +190,7 @@ BYTE bn7[] = { 0,0,1,0,0,0, 0,0,0,0,0,0 }; -BYTE bn8[] = { +uint8 bn8[] = { 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, @@ -198,7 +199,7 @@ BYTE bn8[] = { 0,0,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bn9[] = { +uint8 bn9[] = { 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, @@ -207,7 +208,7 @@ BYTE bn9[] = { 0,0,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bnA[] = { +uint8 bnA[] = { 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, @@ -216,7 +217,7 @@ BYTE bnA[] = { 0,1,0,0,1,0, 0,0,0,0,0,0 }; -BYTE bnB[] = { +uint8 bnB[] = { 0,0,0,0,0,0, 0,1,1,1,0,0, 0,1,0,0,1,0, @@ -225,7 +226,7 @@ BYTE bnB[] = { 0,1,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bnC[] = { +uint8 bnC[] = { 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, @@ -234,7 +235,7 @@ BYTE bnC[] = { 0,0,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bnD[] = { +uint8 bnD[] = { 0,0,0,0,0,0, 0,1,1,1,0,0, 0,1,0,0,1,0, @@ -243,7 +244,7 @@ BYTE bnD[] = { 0,1,1,1,0,0, 0,0,0,0,0,0 }; -BYTE bnE[] = { +uint8 bnE[] = { 0,0,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,0, @@ -252,7 +253,7 @@ BYTE bnE[] = { 0,1,1,1,1,0, 0,0,0,0,0,0 }; -BYTE bnF[] = { +uint8 bnF[] = { 0,0,0,0,0,0, 0,1,1,1,1,0, 0,1,0,0,0,0, @@ -321,16 +322,16 @@ void DeactivateGUI(void) { show_gui = false; } // // Draw the small icons... // -void DrawSmallIcons(WORD icon_not_to_draw) +void DrawSmallIcons(uint16 icon_not_to_draw) { - BYTE * iconmem; - BYTE xl, yl; - BYTE * sIcons[12] = { inoguis, icoinus, ipl1sts, ipl2sts, ii30hzs, ii60hzs, + uint8 * iconmem; + uint8 xl, yl; + uint8 * 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 }; + uint8 xlens[12] = { 31, 18, 32, 35, 37, 37, 29, 23, 28, 32, 19, 19 }; + uint8 ylens[12] = { 31, 18, 19, 19, 21, 21, 23, 20, 16, 17, 20, 23 }; + uint8 xpos[11] = { 33, 48, 63, 78, 104, 0, 184, 210, 225, 240, 255 }; + uint8 iconidx[11] = { 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 6 }; if (game_refresh) iconidx[9] = 5; // 60 Hz... @@ -338,44 +339,44 @@ void DrawSmallIcons(WORD icon_not_to_draw) for(int i=0; i<5; i++) { - WORD idx = i + icon_not_to_draw; // Get correct start pos. + uint16 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]; + uint32 scadr = hScrollOffset + voffsets[vScrollOffset]; scadr += 320*((224-yl)/2); // Center vertically scadr += xpos[i] - (xl/2); // Center around horiz. pos. - WORD bmpptr = 0; + uint16 bmpptr = 0; for(int yy=0; yy5; i--) { - WORD idx = i + icon_not_to_draw; // Get correct start pos. + uint16 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]; + uint32 scadr = hScrollOffset + voffsets[vScrollOffset]; scadr += 320*((224-yl)/2); // Center vertically scadr += xpos[i] - (xl/2); // Center around horiz. pos. - WORD bmpptr = 0; + uint16 bmpptr = 0; for(int yy=0; yy>4, second_dig = number&0x0F; + uint8 first_dig = number>>4, second_dig = number&0x0F; for(int y=0; y<7; y++) { for(int x=0; x<6; x++) @@ -801,7 +802,7 @@ void ShowNumbers(int number) // // Spawn a message // -void SpawnMsg(BYTE msg) +void SpawnMsg(uint8 msg) { text_life = 60; // 1 second... show_text = true; // Show the damn thing... @@ -822,8 +823,8 @@ void DrawText(void) text_life--; // Your life force is running out... // Draw the message here... - DWORD scadr = hScrollOffset + voffsets[vScrollOffset] + 642; - WORD bmpptr = 0; + uint32 scadr = hScrollOffset + voffsets[vScrollOffset] + 642; + uint16 bmpptr = 0; for(int y=0; y<7; y++) { @@ -862,12 +863,12 @@ void DrawText(void) // 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]; + extern uint32 psg_lens[16]; + extern uint8 * psg_adrs[16]; + extern uint32 voc_lens[32]; + extern uint8 * voc_adrs[32]; + extern uint32 fm_lens[14]; + extern uint8 * fm_adrs[14]; snd_num = snd; SpawnMsg(MSHOWNUMS); @@ -879,7 +880,7 @@ void SpawnSound(int type, int snd, int channel/* = 0*/) if (channel == 0) { // 00 nn ss (nn # of repeats of sample ss) - DWORD st = 0; + uint32 st = 0; if (snd & 0x40) { @@ -895,7 +896,7 @@ void SpawnSound(int type, int snd, int channel/* = 0*/) } else { - DWORD st = 0; + uint32 st = 0; if (snd & 0x40) { diff --git a/src/gui.h b/src/gui.h index 317dce5..7193b73 100755 --- a/src/gui.h +++ b/src/gui.h @@ -1,19 +1,15 @@ // // GUI.H // -// by Jimmy Hamm -// (C) 1998 Underground Software +// by James L. Hammmons +// (C) 1998, 2009 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*/ + +#ifndef __GUI_H__ +#define __GUI_H__ + #include "types.h" +#include "SDL.h" // Message macros @@ -42,13 +38,13 @@ #define PL2START 3 #define REFRESH 4 #define DIPSWITCH 5 -#define OPTIONS 6 +#define OPTIONS 6 #define KEYCONFIG 7 #define SNAPSHOT 8 #define RESET 9 #define EXIT 10 -void SpawnMsg(BYTE); +void SpawnMsg(uint8); void DrawText(void); void InitGUI(void); bool ShowGUI(void); @@ -57,7 +53,7 @@ void SelectLeft(void); void SelectRight(void); void SelectUp(void); void SelectDown(void); -BYTE UserSelectedSomething(void); +uint8 UserSelectedSomething(void); void SetRefreshRate(bool); void ActivateGUI(void); void DeactivateGUI(void); @@ -65,3 +61,5 @@ void HandleGUIDebounce(void); void SpawnSound(int, int, int channel = 0); //void SoundFunc(uint8 *, uint16); void SoundFunc(void *, Uint8 *, int); + +#endif // __GUI_H__ diff --git a/src/resource.h b/src/resource.h index a2bd106..8df3291 100755 --- a/src/resource.h +++ b/src/resource.h @@ -1,61 +1,66 @@ // // Resource header file // -// by Jimmy Hamm -// (C) 1998 Underground Software +// by James L. Hammons +// (C) 1998, 2009 Underground Software // +#ifndef __RESOURCE_H__ +#define __RESOURCE_H__ + #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; +extern uint8 * sunknown; +extern uint8 * scya; +extern uint8 * scamera; +extern uint32 sunknownlen; +extern uint32 scyalen; +extern uint32 scameralen; + +extern uint8 * inoguib; +extern uint8 * idipswb; +extern uint8 * ipl1stb; +extern uint8 * ipl2stb; +extern uint8 * ii30hzb; +extern uint8 * ii60hzb; +extern uint8 * icoinub; +extern uint8 * isnapsb; +extern uint8 * iresetb; +extern uint8 * ibyebyb; +extern uint8 * ikeycnb; + +extern uint8 * inoguis; +extern uint8 * idipsws; +extern uint8 * ipl1sts; +extern uint8 * ipl2sts; +extern uint8 * ii30hzs; +extern uint8 * ii60hzs; +extern uint8 * icoinus; +extern uint8 * isnapss; +extern uint8 * iresets; +extern uint8 * ibyebys; +extern uint8 * ikeycns; +extern uint8 * ichecks; + +extern uint8 * idswitch; +extern uint8 * idsbutton; +extern uint8 * idstext1; +extern uint8 * idstext2; +extern uint8 * idstext3; +extern uint8 * idstext4; +extern uint8 * idstext5; +extern uint8 * idstext6; +extern uint8 * idstext7; +extern uint8 * idstext8; +extern uint8 * idstext9; +extern uint8 * idstext10; +extern uint8 * idstext11; +extern uint8 * idstext12; #ifdef __cplusplus } #endif + +#endif // __RESOURCE_H__ diff --git a/src/thunder.cpp b/src/thunder.cpp index b6776d5..fde0f3e 100755 --- a/src/thunder.cpp +++ b/src/thunder.cpp @@ -11,7 +11,7 @@ // JLH 07/23/2009 Added changelog ;-) // -#define THUNDER_VERSION "0.5.0" +#define THUNDER_VERSION "0.9.9" #include #include @@ -95,36 +95,36 @@ using namespace std; // Yes! 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 +uint8 * gram, * grom; // Allocate RAM & ROM pointers +uint8 * gram1, * gram2, * grom1, * grom2; // Actual memory +uint8 * grom3, * grom4, * data_rom, * spr_rom, * voice_rom; +uint8 * chr_rom; // Character ROM pointer V6809REGS cpu1, cpu2; bool trace1 = 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... +uint32 banksw1, banksw2; // Bank switch addresses +uint16 game_over_switch; // Game over delay +uint16 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... +uint16 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, +uint32 psg_lens[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +uint8 * psg_adrs[16]; +uint32 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]; +uint8 * voc_adrs[32]; +uint32 fm_lens[14] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +uint8 * fm_adrs[14]; fstream tr; // Tracelog hook -WORD pcx; // Where we at? +uint16 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, @@ -284,9 +284,9 @@ iregs[4][2] = {"X", "Y", "U", "S" }; // // Read a byte from memory (without touching PC. Not a Fetch!) // -BYTE RdMem(WORD addr) +uint8 RdMem(uint16 addr) { - BYTE b; + uint8 b; if (addr < 0x8000) { @@ -304,18 +304,18 @@ BYTE RdMem(WORD addr) // // Write a byte to memory // -void WrMem(WORD addr, BYTE b) +void WrMem(uint16 addr, uint8 b) { extern bool charbase; // Needed for screen. Extern it in it?? - //extern WORD sr, ur, xr, yr; // Needed for tracelog - //extern WORD pcr; + //extern uint16 sr, ur, xr, yr; // Needed for tracelog + //extern uint16 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 << hex << (uint16)gram1[0x4400+i] << " "; //} tr << endl; }//*/ @@ -325,7 +325,7 @@ void WrMem(WORD addr, BYTE b) 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 + banksw1 = (uint32)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) @@ -355,10 +355,10 @@ void WrMem(WORD addr, BYTE b) // // Read a byte from memory (without touching PC. Not a Fetch!) (2nd processor) // -BYTE RdMemB(WORD addr) +uint8 RdMemB(uint16 addr) { -// extern WORD cpu2.s, cpu2.u, cpu2.x, cpu2.y; // Needed for tracelog - BYTE b; +// extern uint16 cpu2.s, cpu2.u, cpu2.x, cpu2.y; // Needed for tracelog + uint8 b; if (addr < 0x8000) { @@ -385,18 +385,18 @@ BYTE RdMemB(WORD addr) // // Write a byte to memory (2nd processor) // -void WrMemB(WORD addr, BYTE b) +void WrMemB(uint16 addr, uint8 b) { extern bool charbase; - //extern WORD sr, ur, xr, yr; // Needed for tracelog - //extern WORD pcr; + //extern uint16 sr, ur, xr, yr; // Needed for tracelog + //extern uint16 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 << hex << (uint16)gram1[0x4400+i] << " "; //} tr << endl; }//*/ @@ -411,7 +411,7 @@ void WrMemB(WORD addr, BYTE b) 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 + banksw2 = (uint32)(b & 0x03) << 13; // Set sprite data bank switch if (addr == 0x0380) { SpawnSound(FMSOUND, b); // Do FM sound on chan 4 @@ -432,9 +432,9 @@ void WrMemB(WORD addr, BYTE b) // // Display bytes in mem in hex // -void DisplayBytes(WORD src, unsigned long dst) +void DisplayBytes(uint16 src, unsigned long dst) { - BYTE cnt; + uint8 cnt; unsigned long i; printf("%04X: ", src); @@ -442,7 +442,7 @@ void DisplayBytes(WORD src, unsigned long dst) if (src > dst) dst += 0x10000; // That should fix the FFFF bug... for(i=src; i> 5), idxind = ((operand & 0x10) >> 4), + uint8 reg = ((operand & 0x60) >> 5), idxind = ((operand & 0x10) >> 4), lo_nyb = (operand & 0x0F), boff; - WORD woff; + uint16 woff; strcpy(tmp, "??"); if (!(operand & 0x80)) // Hi bit set? Then decode 4 bit offset @@ -620,9 +620,9 @@ void Decode_6809() // // Convert hex to dec // -WORD htod(char *str) +uint16 htod(char *str) { - WORD value = 0; + uint16 value = 0; int len = strlen(str); for(int i=0; i>4); + palette[i] = (uint8)(ch&0x0F); + palette[i+1] = (uint8)(ch>>4); ff2.get(ch); - palette[i+2] = (BYTE)ch; + palette[i+2] = (uint8)ch; } // Do palette stretching here... I.e. add 0 to hinyb 0, 1 to hinyb 1, etc. @@ -758,7 +758,7 @@ bool ReadColorPROMs(void) // bool UnpackFonts(void) { -// BYTE b1, b2, b3; +// uint8 b1, b2, b3; char b1, b2, b3; fstream f1, f2; //0x4000 $800 chars @@ -810,27 +810,27 @@ bool UnpackFonts(void) // // Get length of sample from WAV format // -DWORD GetWAVLength(fstream &file) +uint32 GetWAVLength(fstream &file) { char ch; - DWORD len; + uint32 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.get(ch); len = (int)(uint8)ch; + file.get(ch); len |= (int)(uint8)ch << 8; + file.get(ch); len |= (int)(uint8)ch << 16; + file.get(ch); len |= (int)(uint8)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; + file.get(ch); len = (int)(uint8)ch; // & finally get length of data + file.get(ch); len |= (int)(uint8)ch << 8; + file.get(ch); len |= (int)(uint8)ch << 16; + file.get(ch); len |= (int)(uint8)ch << 24; return len; } @@ -842,7 +842,7 @@ void LoadPSGs(void) { char file[40]; char ch; - DWORD len; + uint32 len; for(int i=0; i<16; i++) { @@ -857,7 +857,7 @@ void LoadPSGs(void) { len = GetWAVLength(fp); // Get WAV data length... - psg_adrs[i] = new BYTE[len]; // Attempt to allocate space... + psg_adrs[i] = new uint8[len]; // Attempt to allocate space... if (psg_adrs[i] != NULL) { @@ -883,7 +883,7 @@ void LoadFMs(void) { char file[200]; char ch; - DWORD len; + uint32 len; for(int i=0; i<14; i++) { @@ -898,7 +898,7 @@ void LoadFMs(void) { len = GetWAVLength(fp); // Get WAV length... - fm_adrs[i] = new BYTE[len]; // Attempt to allocate space... + fm_adrs[i] = new uint8[len]; // Attempt to allocate space... if (fm_adrs[i] != NULL) { @@ -925,12 +925,12 @@ 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 uint16 cpu1.pc, cpu1.s, cpu1.u, cpu1.x, cpu1.y; // Pull in vars from '6809.cpp' + extern uint8 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 uint16 cpu2.pc, cpu2.s, cpu2.u, cpu2.x, cpu2.y; // Pull in vars from '6809B.cpp' + extern uint8 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... @@ -946,22 +946,22 @@ int main(int argc, char * argv[]) 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... + uint16 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 + uint16 debounce = 0; // Key de-bounce counter + uint16 fire_debounce = 0; // Fire button debounce counter // bool refresh2 = true; // Default to 60 Hz... - BYTE x; // General placeholder... + uint8 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; + uint8 keys[256]; // Keyboard "switch-like" buffer + extern uint8 palette[768]; // Screen physical palette + uint32 ticks, oldTicks; // tr.open("exe.log", ios::binary | ios::out); // Tracelog @@ -985,34 +985,34 @@ int main(int argc, char * argv[]) cout << "Allocating memory..." << endl; //Does this anyway... set_new_handler(0); // Make 'new' return NULL on failure... - gram1 = new BYTE[0x10000]; + gram1 = new uint8[0x10000]; if (gram1 == NULL) { cout << "Could not allocate RAM space #1!" << endl << "Aborting!" << endl; return -1; } - grom1 = new BYTE[0x10000]; + grom1 = new uint8[0x10000]; if (grom1 == NULL) { cout << "Could not allocate ROM space #1!" << endl << "Aborting!" << endl; return -1; } - gram2 = new BYTE[0x10000]; + gram2 = new uint8[0x10000]; if (gram2 == NULL) { cout << "Could not allocate RAM space #2!" << endl << "Aborting!" << endl; return -1; } - grom2 = new BYTE[0x10000]; + grom2 = new uint8[0x10000]; if (grom2 == NULL) { cout << "Could not allocate ROM space #2!" << endl << "Aborting!" << endl; return -1; } - chr_rom = new BYTE[0x60000]; + chr_rom = new uint8[0x60000]; if (chr_rom == NULL) { cout << "Could not allocate character RAM!" << endl << "Aborting!" << endl; return -1; } - grom3 = new BYTE[0x8000]; + grom3 = new uint8[0x8000]; if (grom3 == NULL) { cout << "Could not allocate ROM space #4!" << endl << "Aborting!" << endl; return -1; } - grom4 = new BYTE[0x8000]; + grom4 = new uint8[0x8000]; if (grom4 == NULL) { cout << "Could not allocate ROM space #5!" << endl << "Aborting!" << endl; return -1; } - data_rom = new BYTE[0x40000]; + data_rom = new uint8[0x40000]; if (data_rom == NULL) { cout << "Could not allocate ROM level data!" << endl << "Aborting!" << endl; return -1; } - spr_rom = new BYTE[0x80000]; + spr_rom = new uint8[0x80000]; if (spr_rom == NULL) { cout << "Could not allocate ROM sprite data!" << endl << "Aborting!" << endl; return -1; } - voice_rom = new BYTE[0x20000]; + voice_rom = new uint8[0x20000]; if (voice_rom == NULL) { cout << "Could not allocate ROM voice data!" << endl << "Aborting!" << endl; return -1; } @@ -1096,7 +1096,7 @@ int main(int argc, char * argv[]) LoadFMs(); // Quick 'n' Dirty voice dump (sound 0x0E) -/* DWORD adc = (voice_rom[26]<<8) | voice_rom[27]; +/* uint32 adc = (voice_rom[26]<<8) | voice_rom[27]; bool doneWitIt = false; int crh = 0; while (!doneWitIt) @@ -1144,7 +1144,7 @@ WriteLog("About to go to the main loop...\n"); dpc = htod(lbuff); } printf("%04X: ", dpc); - WORD pc_save = cpu1.pc, pcB_save = cpu2.pc; + uint16 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())); @@ -1152,7 +1152,7 @@ WriteLog("About to go to the main loop...\n"); cpu1.pc = dpc; cpu2.pc = dpc; for(int i=0; i<16; i++) { - BYTE a = (looking_at_rom ? Fetch() : FetchB()); + uint8 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 << "."; @@ -1169,7 +1169,7 @@ WriteLog("About to go to the main loop...\n"); dpc = htod(lbuff); } printf("%04X: ", dpc); - for(int i=0; i<16; i++) printf("%02X ", (BYTE)gram[dpc++]); + for(int i=0; i<16; i++) printf("%02X ", (uint8)gram[dpc++]); cout << endl; } else if (lbuff[0] == 'l') @@ -1213,11 +1213,11 @@ WriteLog("About to go to the main loop...\n"); else if ((lbuff[0] == 'r') || (lbuff[0] == 'c')) // Run/continue... { WriteLog("Executing 'run' command...\n"); - DWORD my_clock = 0; + uint32 my_clock = 0; running = true; // Set running status... trace1 = false; SetRefreshRate(refresh2); // Tell GUI our refresh rate - //for(WORD i=0; i<0x8000; i++) gram2[i] = grom3[i]; //Temp + //for(uint16 i=0; i<0x8000; i++) gram2[i] = grom3[i]; //Temp if (lbuff[0] == 'r') // If run, then reset CPUs { @@ -1445,7 +1445,7 @@ WriteLog("About to enter main loop...\n"); } if (keys[28]) // Return { - BYTE retval = UserSelectedSomething(); + uint8 retval = UserSelectedSomething(); if (retval == EXIT) running = false; if (retval == REFRESH) @@ -1640,11 +1640,11 @@ BlitChar(screen, chr_rom, gram1); printf("%04X: ", dpc); // Show data found... for(int i=0; i<16; i++) - printf("%02X ", gram1[(WORD)(dpc+i)]); + printf("%02X ", gram1[(uint16)(dpc+i)]); cout << " "; for(int i=0; i<16; i++) { - BYTE a = gram1[dpc++]; + uint8 a = gram1[dpc++]; if (a<10) cout << (char)(a+48); if ((a>9) && (a<37)) diff --git a/src/types.h b/src/types.h index c65b5f5..51bcbcd 100755 --- a/src/types.h +++ b/src/types.h @@ -1,39 +1,25 @@ // // TYPES.H // +// by James L. Hammons +// (C) 2009 Underground Software +// +// Now that C/C++ has stardard sizes, this is much more precise. We still do +// this because we don't like typing _t on the back of our types. :-) +// #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; +#include -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; +typedef uint8_t uint8; +typedef int8_t int8; +typedef uint16_t uint16; +typedef int16_t int16; +typedef uint32_t uint32; +typedef int32_t int32; +typedef uint64_t uint64; +typedef int64_t int64; #endif // __TYPES_H__ diff --git a/src/v6809.cpp b/src/v6809.cpp index 4de9d29..894476f 100755 --- a/src/v6809.cpp +++ b/src/v6809.cpp @@ -16,20 +16,20 @@ // Private global variables static V6809REGS regs; -static WORD addr; // Temporary variables common to all funcs... -static BYTE tmp; +static uint16 addr; // Temporary variables common to all funcs... +static uint8 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 +static int SignedB(uint8); // Return signed byte from unsigned +static int SignedW(uint16); // Return signed word from unsigned +static uint16 FetchW(void); +static uint16 RdMemW(uint16 addr); +static void WrMemW(uint16 addr, uint16 w); +static uint16 ReadEXG(uint8); // Read TFR/EXG post byte +static void WriteEXG(uint8, uint16); // Set TFR/EXG data +static uint16 DecodeReg(uint8); // Decode register data +static uint16 DecodeIDX(uint8); // 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 @@ -136,32 +136,32 @@ static void (* exec_op2[256])() = { // 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() +static uint16 FetchW() { - WORD w = RdMemW(regs.pc); + uint16 w = RdMemW(regs.pc); regs.pc += 2; return w; } // // Fetch word function // -/*WORD FetchW(void) +/*uint16 FetchW(void) { - return (WORD)(regs.RdMem(regs.pc++) << 8) | regs.RdMem(regs.pc++); + return (uint16)(regs.RdMem(regs.pc++) << 8) | regs.RdMem(regs.pc++); }*/ // // Read word from memory function // -WORD RdMemW(WORD addr) +uint16 RdMemW(uint16 addr) { - return (WORD)(regs.RdMem(addr) << 8) | regs.RdMem(addr + 1); + return (uint16)(regs.RdMem(addr) << 8) | regs.RdMem(addr + 1); } // // Write word to memory function // -void WrMemW(WORD addr, WORD w) +void WrMemW(uint16 addr, uint16 w) { regs.WrMem(addr + 0, w >> 8); regs.WrMem(addr + 1, w & 0xFF); @@ -170,7 +170,7 @@ void WrMemW(WORD addr, WORD w) // // return signed byte from unsigned // -int SignedB(BYTE b) +int SignedB(uint8 b) { return (b & 0x80 ? b - 256 : b); } @@ -178,7 +178,7 @@ int SignedB(BYTE b) // // return signed word from unsigned // -int SignedW(WORD w) +int SignedW(uint16 w) { return (w & 0x8000 ? w - 65536 : w); } @@ -186,9 +186,9 @@ int SignedW(WORD w) // // Function to read TFR/EXG post byte // -WORD ReadEXG(BYTE code) +uint16 ReadEXG(uint8 code) { - WORD retval; + uint16 retval; switch (code) { @@ -232,7 +232,7 @@ WORD ReadEXG(BYTE code) // // Function to set TFR/EXG data // -void WriteEXG(BYTE code, WORD data) +void WriteEXG(uint8 code, uint16 data) { switch (code) { @@ -262,9 +262,9 @@ void WriteEXG(BYTE code, WORD data) // // Function to decode register data // -WORD DecodeReg(BYTE reg) +uint16 DecodeReg(uint8 reg) { - WORD retval; + uint16 retval; switch (reg) { @@ -284,10 +284,10 @@ WORD DecodeReg(BYTE reg) // // Function to decode IDX data // -WORD DecodeIDX(BYTE code) +uint16 DecodeIDX(uint8 code) { - WORD addr, woff; - BYTE reg = (code & 0x60) >> 5, idxind = (code & 0x10) >> 4, lo_nyb = code & 0x0F; + uint16 addr, woff; + uint8 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); @@ -460,7 +460,7 @@ static void Op04(void) // LSR DP } static void Op06(void) // ROR DP { - addr = (regs.dp<<8) | regs.RdMem(regs.pc++); BYTE tmp2 = regs.RdMem(addr); + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); uint8 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 @@ -492,7 +492,7 @@ static void Op08(void) // LSL DP } static void Op09(void) // ROL DP { - addr = (regs.dp<<8) | regs.RdMem(regs.pc++); BYTE tmp2 = regs.RdMem(addr); + addr = (regs.dp<<8) | regs.RdMem(regs.pc++); uint8 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 @@ -525,8 +525,8 @@ 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 + (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 @@ -557,7 +557,7 @@ static void Op12(void) // NOP } static void Op13(void) // SYNC -{ +{ regs.clock += 2; } static void Op16(void) // LBRA @@ -583,7 +583,7 @@ static void Op19(void) // DAA 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 == 0) regs.cc |= 0x04; // Adjust Zero flag if (regs.a&0x80) regs.cc |= 0x08; // Adjust Negative flag regs.clock += 2; } @@ -848,7 +848,7 @@ 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 @@ -897,7 +897,7 @@ static void Op48(void) // LSLA [Keep checking from here...] (regs.a&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag regs.clock += 2; } -static void Op49(void) // ROLA +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 @@ -935,7 +935,7 @@ static void Op4F(void) // CLRA 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 @@ -1005,7 +1005,7 @@ static void Op5A(void) // DECB static void Op5C(void) // INCB { regs.b++; - (regs.b == 0x80 ? regs.cc |= 0x02 : regs.cc &= 0xFD); // Adjust oVerflow flag + (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; @@ -1024,9 +1024,9 @@ static void Op5F(void) // CLRB regs.clock += 2; } static void Op60(void) // NEG IDX - { + { addr = DecodeIDX(regs.RdMem(regs.pc++)); - tmp = regs.RdMem(addr); BYTE res = 256 - tmp; + tmp = regs.RdMem(addr); uint8 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 @@ -1058,7 +1058,7 @@ static void Op64(void) // LSR IDX static void Op66(void) // ROR IDX { addr = DecodeIDX(regs.RdMem(regs.pc++)); - tmp = regs.RdMem(addr); BYTE tmp2 = tmp; + tmp = regs.RdMem(addr); uint8 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 @@ -1091,7 +1091,7 @@ static void Op68(void) // LSL IDX } static void Op69(void) // ROL IDX { - BYTE tmp2 = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); + uint8 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 @@ -1101,7 +1101,7 @@ static void Op69(void) // ROL IDX } static void Op6A(void) // DEC IDX { - BYTE tmp; WORD addr; + uint8 tmp; uint16 addr; addr = DecodeIDX(regs.RdMem(regs.pc++)); tmp = regs.RdMem(addr) - 1; regs.WrMem(addr, tmp); @@ -1111,7 +1111,7 @@ static void Op6A(void) // DEC IDX regs.clock += 6; } static void Op6C(void) // INC IDX - { + { addr = DecodeIDX(regs.RdMem(regs.pc++)); tmp = regs.RdMem(addr) + 1; regs.WrMem(addr, tmp); @@ -1123,8 +1123,8 @@ static void Op6C(void) // INC IDX 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 + (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 @@ -1140,9 +1140,9 @@ static void Op6F(void) // CLR IDX regs.clock += 6; } static void Op70(void) // NEG ABS - { + { addr = FetchW(); - tmp = regs.RdMem(addr); BYTE res = 256 - tmp; + tmp = regs.RdMem(addr); uint8 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 @@ -1172,9 +1172,9 @@ static void Op74(void) // LSR ABS } static void Op76(void) // ROR ABS { - BYTE tmp; WORD addr; + uint8 tmp; uint16 addr; addr = FetchW(); - tmp = regs.RdMem(addr); BYTE tmp2 = tmp; + tmp = regs.RdMem(addr); uint8 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 @@ -1184,7 +1184,7 @@ static void Op76(void) // ROR ABS } static void Op77(void) // ASR ABS { - BYTE tmp; WORD addr; + uint8 tmp; uint16 addr; addr = FetchW(); tmp = regs.RdMem(addr); (tmp&0x01 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift bit into carry @@ -1197,7 +1197,7 @@ static void Op77(void) // ASR ABS } static void Op78(void) // LSL ABS { - BYTE tmp; WORD addr; + uint8 tmp; uint16 addr; addr = FetchW(); tmp = regs.RdMem(addr); (tmp&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into carry @@ -1209,7 +1209,7 @@ static void Op78(void) // LSL ABS } static void Op79(void) // ROL ABS { - BYTE tmp2 = regs.RdMem(FetchW()); + uint8 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 @@ -1219,7 +1219,7 @@ static void Op79(void) // ROL ABS } static void Op7A(void) // DEC ABS { - BYTE tmp; WORD addr; + uint8 tmp; uint16 addr; addr = FetchW(); tmp = regs.RdMem(addr) - 1; regs.WrMem(addr, tmp); @@ -1229,8 +1229,8 @@ static void Op7A(void) // DEC ABS regs.clock += 7; } static void Op7C(void) // INC ABS - { - BYTE tmp; WORD addr; + { + uint8 tmp; uint16 addr; addr = FetchW(); tmp = regs.RdMem(addr) + 1; regs.WrMem(addr, tmp); @@ -1242,10 +1242,10 @@ static void Op7C(void) // INC ABS static void Op7D(void) // TST ABS { - BYTE tmp = regs.RdMem(FetchW()); + uint8 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 + (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; } @@ -1262,8 +1262,8 @@ static void Op7F(void) // CLR ABS regs.clock += 7; } static void Op80(void) // SUBA # -{ - BYTE tmp = regs.RdMem(regs.pc++); BYTE as = regs.a; +{ + uint8 tmp = regs.RdMem(regs.pc++); uint8 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 @@ -1274,7 +1274,7 @@ static void Op80(void) // SUBA # static void Op81(void) // CMPA # { tmp = regs.RdMem(regs.pc++); - BYTE db = regs.a - tmp; + uint8 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 @@ -1283,7 +1283,7 @@ static void Op81(void) // CMPA # } static void Op82(void) // SBCA # { - tmp = regs.RdMem(regs.pc++); BYTE as = regs.a; + tmp = regs.RdMem(regs.pc++); uint8 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 @@ -1293,7 +1293,7 @@ static void Op82(void) // SBCA # } static void Op83(void) // SUBD # { - addr = FetchW(); WORD dr = (regs.a<<8)|regs.b, ds = dr; + addr = FetchW(); uint16 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 @@ -1337,10 +1337,10 @@ static void Op88(void) // EORA # static void Op89(void) // ADCA # { tmp = regs.RdMem(regs.pc++); - addr = (WORD)regs.a + (WORD)tmp + (WORD)(regs.cc&0x01); + addr = (uint16)regs.a + (uint16)tmp + (uint16)(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^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 @@ -1355,11 +1355,11 @@ static void Op8A(void) // ORA # 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^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 @@ -1368,7 +1368,7 @@ static void Op8B(void) // ADDA # static void Op8C(void) // CMPX # { addr = FetchW(); - WORD dw = regs.x - addr; + uint16 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 @@ -1391,8 +1391,8 @@ static void Op8E(void) // LDX # regs.clock += 3; } static void Op90(void) // SUBA DP - { - tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); BYTE as = regs.a; + { + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); uint8 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 @@ -1403,7 +1403,7 @@ static void Op90(void) // SUBA DP static void Op91(void) // CMPA DP { tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); - BYTE db = regs.a - tmp; + uint8 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 @@ -1412,7 +1412,7 @@ static void Op91(void) // CMPA DP } static void Op92(void) // SBCA DP { - tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); BYTE as = regs.a; + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); uint8 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 @@ -1422,8 +1422,8 @@ static void Op92(void) // SBCA DP } 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); + addr = (regs.dp<<8)|regs.RdMem(regs.pc++); uint16 dr = (regs.a<<8)|regs.b, ds = dr; + uint16 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 @@ -1475,10 +1475,10 @@ static void Op98(void) // EORA DP 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 = (uint16)regs.a + (uint16)tmp + (uint16)(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^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 @@ -1493,12 +1493,12 @@ static void Op9A(void) // ORA DP 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 = (uint16)regs.a + (uint16)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^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 @@ -1507,8 +1507,8 @@ static void Op9B(void) // ADDA DP 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; + uint16 adr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + uint16 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 @@ -1541,8 +1541,8 @@ static void Op9F(void) // STX DP regs.clock += 5; } static void OpA0(void) // SUBA IDX - { - tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); BYTE as = regs.a; + { + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); uint8 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 @@ -1553,7 +1553,7 @@ static void OpA0(void) // SUBA IDX static void OpA1(void) // CMPA IDX { tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); - BYTE db = regs.a - tmp; + uint8 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 @@ -1562,7 +1562,7 @@ static void OpA1(void) // CMPA IDX } static void OpA2(void) // SBCA IDX { - tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); BYTE as = regs.a; + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); uint8 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 @@ -1572,8 +1572,8 @@ static void OpA2(void) // SBCA IDX } 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); + addr = DecodeIDX(regs.RdMem(regs.pc++)); uint16 dr = (regs.a<<8)|regs.b, ds = dr; + uint16 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 @@ -1625,10 +1625,10 @@ static void OpA8(void) // EORA IDX 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 = (uint16)regs.a + (uint16)tmp + (uint16)(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^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 @@ -1643,12 +1643,12 @@ static void OpAA(void) // ORA IDX regs.clock += 4; } static void OpAB(void) // ADDA IDX -{ +{ tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); - addr = (WORD)regs.a + (WORD)tmp; + addr = (uint16)regs.a + (uint16)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^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 @@ -1657,8 +1657,8 @@ static void OpAB(void) // ADDA IDX 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; + uint16 addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + uint16 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 @@ -1691,8 +1691,8 @@ static void OpAF(void) // STX IDX regs.clock += 5; } static void OpB0(void) // SUBA ABS - { - tmp = regs.RdMem(FetchW()); BYTE as = regs.a; + { + tmp = regs.RdMem(FetchW()); uint8 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 @@ -1703,7 +1703,7 @@ static void OpB0(void) // SUBA ABS static void OpB1(void) // CMPA ABS { tmp = regs.RdMem(FetchW()); - BYTE db = regs.a - tmp; + uint8 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 @@ -1712,7 +1712,7 @@ static void OpB1(void) // CMPA ABS } static void OpB2(void) // SBCA ABS { - tmp = regs.RdMem(FetchW()); BYTE as = regs.a; + tmp = regs.RdMem(FetchW()); uint8 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 @@ -1722,8 +1722,8 @@ static void OpB2(void) // SBCA ABS } 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); + addr = FetchW(); uint16 dr = (regs.a<<8)|regs.b, ds = dr; + uint16 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 @@ -1775,10 +1775,10 @@ static void OpB8(void) // EORA ABS static void OpB9(void) // ADCA ABS { tmp = regs.RdMem(FetchW()); - addr = (WORD)regs.a + (WORD)tmp + (WORD)(regs.cc&0x01); + addr = (uint16)regs.a + (uint16)tmp + (uint16)(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^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 @@ -1793,9 +1793,9 @@ static void OpBA(void) // ORA ABS regs.clock += 5; } static void OpBB(void) // ADDA ABS -{ +{ tmp = regs.RdMem(FetchW()); - addr = (WORD)regs.a + (WORD)tmp; + addr = (uint16)regs.a + (uint16)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 @@ -1806,8 +1806,8 @@ static void OpBB(void) // ADDA ABS } static void OpBC(void) // CMPX ABS { - addr = FetchW(); WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); - WORD dw = regs.x - addr2; + addr = FetchW(); uint16 addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + uint16 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 @@ -1818,7 +1818,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.pc = addr; // Go to absolute address (Not indir) regs.clock += 8; } @@ -1849,8 +1849,8 @@ static void OpBF(void) // STX ABS } static void OpC0(void) // SUBB # - { - tmp = regs.RdMem(regs.pc++); BYTE bs = regs.b; + { + tmp = regs.RdMem(regs.pc++); uint8 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 @@ -1861,7 +1861,7 @@ static void OpC0(void) // SUBB # static void OpC1(void) // CMPB # { tmp = regs.RdMem(regs.pc++); - BYTE db = regs.b - tmp; + uint8 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 @@ -1870,7 +1870,7 @@ static void OpC1(void) // CMPB # } static void OpC2(void) // SBCB # { - tmp = regs.RdMem(regs.pc++); BYTE bs = regs.b; + tmp = regs.RdMem(regs.pc++); uint8 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 @@ -1925,10 +1925,10 @@ static void OpC8(void) // EORB # static void OpC9(void) // ADCB # { tmp = regs.RdMem(regs.pc++); - addr = (WORD)regs.b + (WORD)tmp + (WORD)(regs.cc&0x01); + addr = (uint16)regs.b + (uint16)tmp + (uint16)(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^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 @@ -1943,11 +1943,11 @@ static void OpCA(void) // ORB # 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^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 @@ -1970,8 +1970,8 @@ static void OpCE(void) // LDU # regs.clock += 3; } static void OpD0(void) // SUBB DP -{ - tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); BYTE bs = regs.b; +{ + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); uint8 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 @@ -1982,7 +1982,7 @@ static void OpD0(void) // SUBB DP static void OpD1(void) // CMPB DP { tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); - BYTE db = regs.b - tmp; + uint8 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 @@ -1991,7 +1991,7 @@ static void OpD1(void) // CMPB DP } static void OpD2(void) // SBCB DP { - tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); BYTE bs = regs.b; + tmp = regs.RdMem((regs.dp<<8)|regs.RdMem(regs.pc++)); uint8 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 @@ -2002,7 +2002,7 @@ static void OpD2(void) // SBCB DP 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); + uint16 adr2 = (regs.RdMem(addr)<<8)|regs.RdMem(addr+1); dr += adr2; (dr > 0xFFFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag dr &= 0xFFFF; @@ -2055,10 +2055,10 @@ static void OpD8(void) // EORB DP 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 = (uint16)regs.b + (uint16)tmp + (uint16)(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^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 @@ -2073,12 +2073,12 @@ static void OpDA(void) // ORB DP 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 = (uint16)regs.b + (uint16)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^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 @@ -2121,8 +2121,8 @@ static void OpDF(void) // STU DP regs.clock += 5; } static void OpE0(void) // SUBB IDX -{ - tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); BYTE bs = regs.b; +{ + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); uint8 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 @@ -2133,7 +2133,7 @@ static void OpE0(void) // SUBB IDX static void OpE1(void) // CMPB IDX { tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); - BYTE db = regs.b - tmp; + uint8 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 @@ -2142,7 +2142,7 @@ static void OpE1(void) // CMPB IDX } static void OpE2(void) // SBCB IDX { - tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); BYTE bs = regs.b; + tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); uint8 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 @@ -2153,7 +2153,7 @@ static void OpE2(void) // SBCB IDX 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); + uint16 adr2 = (regs.RdMem(addr)<<8)|regs.RdMem(addr+1); dr += adr2; (dr > 0xFFFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag dr &= 0xFFFF; @@ -2206,10 +2206,10 @@ static void OpE8(void) // EORB IDX 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 = (uint16)regs.b + (uint16)tmp + (uint16)(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^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 @@ -2224,12 +2224,12 @@ static void OpEA(void) // ORB IDX regs.clock += 4; } static void OpEB(void) // ADDB IDX -{ +{ tmp = regs.RdMem(DecodeIDX(regs.RdMem(regs.pc++))); - addr = (WORD)regs.b + (WORD)tmp; + addr = (uint16)regs.b + (uint16)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^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 @@ -2272,8 +2272,8 @@ static void OpEF(void) // STU IDX regs.clock += 5; } static void OpF0(void) // SUBB ABS - { - tmp = regs.RdMem(FetchW()); BYTE bs = regs.b; + { + tmp = regs.RdMem(FetchW()); uint8 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 @@ -2283,7 +2283,7 @@ static void OpF0(void) // SUBB ABS static void OpF1(void) // CMPB ABS { tmp = regs.RdMem(FetchW()); - BYTE db = regs.b - tmp; + uint8 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 @@ -2292,7 +2292,7 @@ static void OpF1(void) // CMPB ABS } static void OpF2(void) // SBCB ABS { - tmp = regs.RdMem(FetchW()); BYTE bs = regs.b; + tmp = regs.RdMem(FetchW()); uint8 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 @@ -2303,7 +2303,7 @@ static void OpF2(void) // SBCB ABS 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); + uint16 adr2 = (regs.RdMem(addr)<<8)|regs.RdMem(addr+1); dr += adr2; (dr > 0xFFFF ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Adjust Carry flag dr &= 0xFFFF; @@ -2356,10 +2356,10 @@ static void OpF8(void) // EORB ABS static void OpF9(void) // ADCB ABS { tmp = regs.RdMem(FetchW()); - addr = (WORD)regs.b + (WORD)tmp + (WORD)(regs.cc&0x01); + addr = (uint16)regs.b + (uint16)tmp + (uint16)(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^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 @@ -2372,14 +2372,14 @@ static void OpFA(void) // ORB ABS (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 = (uint16)regs.b + (uint16)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^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 @@ -2521,18 +2521,18 @@ static void Op103F(void) // SWI2 (Not yet implemented) } static void Op1083(void) // CMPD # { - addr = FetchW(); WORD dr = (regs.a<<8)|regs.b; - WORD dw = dr - addr; + addr = FetchW(); uint16 dr = (regs.a<<8)|regs.b; + uint16 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 + ((dr^addr^dw^((uint16)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; + uint16 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 @@ -2549,9 +2549,9 @@ static void Op108E(void) // LDY # } static void Op1093(void) // CMPD DP { - WORD adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++), dr = (regs.a<<8)|regs.b; + uint16 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; + uint16 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 @@ -2560,9 +2560,9 @@ static void Op1093(void) // CMPD DP } static void Op109C(void) // CMPY DP { - WORD adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); + uint16 adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); - WORD dw = regs.y - addr; + uint16 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 @@ -2591,9 +2591,9 @@ static void Op109F(void) // STY DP } static void Op10A3(void) // CMPD IDX { - WORD adr2 = DecodeIDX(regs.RdMem(regs.pc++)), dr = (regs.a<<8)|regs.b; + uint16 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; + uint16 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 @@ -2603,9 +2603,9 @@ static void Op10A3(void) // CMPD IDX } static void Op10AC(void) // CMPY IDX { - WORD adr2 = DecodeIDX(regs.RdMem(regs.pc++)); + uint16 adr2 = DecodeIDX(regs.RdMem(regs.pc++)); addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); - WORD dw = regs.y - addr; + uint16 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 @@ -2632,9 +2632,9 @@ static void Op10AF(void) // STY IDX } 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; + addr = FetchW(); uint16 dr = (regs.a<<8)|regs.b; + uint16 addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + uint16 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 @@ -2643,8 +2643,8 @@ static void Op10B3(void) // CMPD ABS } static void Op10BC(void) // CMPY ABS { - addr = FetchW(); WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); - WORD dw = regs.y - addr2; + addr = FetchW(); uint16 addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + uint16 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 @@ -2684,7 +2684,7 @@ static void Op10DE(void) // LDS DP 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; + regs.clock += 6; } static void Op10DF(void) // STS DP { @@ -2743,7 +2743,7 @@ static void Op113F(void) // SWI3 static void Op1183(void) // CMPU # { addr = FetchW(); - WORD dw = regs.u - addr; + uint16 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 @@ -2753,7 +2753,7 @@ static void Op1183(void) // CMPU # static void Op118C(void) // CMPS # { addr = FetchW(); - WORD dw = regs.s - addr; + uint16 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 @@ -2762,9 +2762,9 @@ static void Op118C(void) // CMPS # } static void Op1193(void) // CMPU DP { - WORD adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); + uint16 adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); - WORD dw = regs.u - addr; + uint16 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 @@ -2773,9 +2773,9 @@ static void Op1193(void) // CMPU DP } static void Op119C(void) // CMPS DP { - WORD adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); + uint16 adr2 = (regs.dp<<8)|regs.RdMem(regs.pc++); addr = (regs.RdMem(adr2)<<8) | regs.RdMem(adr2+1); - WORD dw = regs.s - addr; + uint16 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 @@ -2784,9 +2784,9 @@ static void Op119C(void) // CMPS DP } static void Op11A3(void) // CMPU IDX { - WORD addr2 = DecodeIDX(regs.RdMem(regs.pc++)); + uint16 addr2 = DecodeIDX(regs.RdMem(regs.pc++)); addr = (regs.RdMem(addr2)<<8) | regs.RdMem(addr2+1); - WORD dw = regs.u - addr; + uint16 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 @@ -2795,9 +2795,9 @@ static void Op11A3(void) // CMPU IDX } static void Op11AC(void) // CMPS IDX { - WORD addr2 = DecodeIDX(regs.RdMem(regs.pc++)); + uint16 addr2 = DecodeIDX(regs.RdMem(regs.pc++)); addr = (regs.RdMem(addr2)<<8) | regs.RdMem(addr2+1); - WORD dw = regs.s - addr; + uint16 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 @@ -2806,8 +2806,8 @@ static void Op11AC(void) // CMPS IDX } static void Op11B3(void) // CMPU ABS { - addr = FetchW(); WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); - WORD dw = regs.u - addr2; + addr = FetchW(); uint16 addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + uint16 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 @@ -2817,8 +2817,8 @@ static void Op11B3(void) // CMPU ABS static void Op11BC(void) // CMPS ABS { - addr = FetchW(); WORD addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); - WORD dw = regs.s - addr2; + addr = FetchW(); uint16 addr2 = (regs.RdMem(addr)<<8) | regs.RdMem(addr+1); + uint16 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 @@ -2827,8 +2827,8 @@ static void Op11BC(void) // CMPS ABS } //temp, for testing... -/*static BYTE backTrace[256]; -static WORD btPC[256]; +/*static uint8 backTrace[256]; +static uint16 btPC[256]; static int btPtr = 0;//*/ static void Op__(void) // Illegal opcode { @@ -2847,23 +2847,23 @@ for(int i=0; i<256; i++) // // Internal "memcpy" (so we don't have to link with any external libraries!) // -static void myMemcpy(void * dst, void * src, DWORD size) +static void myMemcpy(void * dst, void * src, uint32 size) { - BYTE * d = (BYTE *)dst, * s = (BYTE *)src; + uint8 * d = (uint8 *)dst, * s = (uint8 *)src; - for(DWORD i=0; icpuFlags; + uint32 flags = context->cpuFlags; if (flags & V6809_ASSERT_LINE_RESET) // *** RESET handler *** { diff --git a/src/v6809.h b/src/v6809.h index f62d1cf..6ad4424 100755 --- a/src/v6809.h +++ b/src/v6809.h @@ -35,24 +35,24 @@ 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 + uint16 pc; // 6809 PC register + uint16 x; // 6809 X index register + uint16 y; // 6809 Y index register + uint16 s; // 6809 System stack pointer + uint16 u; // 6809 User stack pointer + uint8 cc; // 6809 Condition Code register + uint8 a; // 6809 A register + uint8 b; // 6809 B register + uint8 dp; // 6809 Direct Page register + uint32 clock; // 6809 clock +//uint32 _reserved;// uint8 (* Fetch)(uint16&); // Address of uint8 fetch routine + uint8 (* RdMem)(uint16); // Address of uint8 read routine + void (* WrMem)(uint16, uint8); // Address of uint8 write routine + uint32 cpuFlags; // v6809 IRQ/RESET flags }; // Function prototypes -void Execute6809(V6809REGS *, DWORD); // Function to execute 6809 instructions +void Execute6809(V6809REGS *, uint32); // Function to execute 6809 instructions #endif // __V6809_H__ diff --git a/src/v6809b.cpp b/src/v6809b.cpp deleted file mode 100755 index 9e2183f..0000000 --- a/src/v6809b.cpp +++ /dev/null @@ -1,2716 +0,0 @@ -// 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 deleted file mode 100755 index b51dba7..0000000 --- a/src/v6809b.h +++ /dev/null @@ -1,13 +0,0 @@ -// 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 -- 2.37.2