]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/memory.cpp
Fix for bad branch handling in OP.
[virtualjaguar] / src / memory.cpp
index f37168ba9db9cb04bdecc06cbc8fb0a9079aeef8..3782200db00fc401548a17820f699b3c10750b4d 100644 (file)
@@ -1,9 +1,9 @@
 //
 // Jaguar memory and I/O physical (hosted!) memory
 //
-// by James L. Hammons
+// by James Hammons
 //
-// JLH = James L. Hammons
+// JLH = James Hammons
 //
 // WHO  WHEN        WHAT
 // ---  ----------  -----------------------------------------------------------
@@ -23,35 +23,30 @@ the I/O function would take care of any weird stuff...
 Actually: writes would tuck in the value, but reads would have to be handled
 correctly since some registers do not fall on the same address as far as reading
 goes... Still completely doable though. :-)
+
+N.B.: Jaguar RAM is only 2 megs. ROM is 6 megs max, IO is 128K
 */
 
 #include "memory.h"
 
-uint8 jagMemSpace[0xF20000];                                   // The entire memory space of the Jaguar...!
-
-uint8 * jaguarMainRAM = &jagMemSpace[0x000000];
-uint8 * jaguarMainROM = &jagMemSpace[0x800000];
-uint8 * cdRAM         = &jagMemSpace[0xDFFF00];
-uint8 * gpuRAM        = &jagMemSpace[0xF03000];
-uint8 * dspRAM        = &jagMemSpace[0xF1B000];
-
-uint8 jaguarBootROM[0x040000];                                 // 68K CPU BIOS ROM--uses only half of this!
-uint8 jaguarCDBootROM[0x040000];                               // 68K CPU CD BIOS ROM (256K)
-uint8 jaguarDevBootROM1[0x040000];                             // 68K CPU Stubulator 1 ROM--uses only half of this!
-uint8 jaguarDevBootROM2[0x040000];                             // 68K CPU Stubulator 2 ROM--uses only half of this!
-uint8 jaguarDevCDBootROM[0x040000];                            // 68K CPU Dev CD BIOS ROM (256K)
+uint8_t jagMemSpace[0xF20000];                                 // The entire memory space of the Jaguar...!
 
+uint8_t * jaguarMainRAM = &jagMemSpace[0x000000];
+uint8_t * jaguarMainROM = &jagMemSpace[0x800000];
+uint8_t * cdRAM         = &jagMemSpace[0xDFFF00];
+uint8_t * gpuRAM        = &jagMemSpace[0xF03000];
+uint8_t * dspRAM        = &jagMemSpace[0xF1B000];
 
 #if 0
 union Word
 {
-       uint16 word;
+       uint16_t word;
        struct {
                // This changes depending on endianness...
 #ifdef __BIG_ENDIAN__
-               uint8 hi, lo;                                                   // Big endian
+               uint8_t hi, lo;                                                 // Big endian
 #else
-               uint8 lo, hi;                                                   // Little endian
+               uint8_t lo, hi;                                                 // Little endian
 #endif
        };
 };
@@ -60,13 +55,13 @@ union Word
 #if 0
 union DWord
 {
-       uint32 dword;
+       uint32_t dword;
        struct
        {
 #ifdef __BIG_ENDIAN__
-               uint16 hiw, low;
+               uint16_t hiw, low;
 #else
-               uint16 low, hiw;
+               uint16_t low, hiw;
 #endif
        };
 };
@@ -121,19 +116,19 @@ unsigned long ByteSwap1 (unsigned long nLongNumber)
 //Not sure if this is a good approach yet...
 //should be if we use proper aliasing, and htonl and friends...
 #if 1
-uint32 & butch     = *((uint32 *)&jagMemSpace[0xDFFF00]);      // base of Butch == interrupt control register, R/W
-uint32 & dscntrl   = *((uint32 *)&jagMemSpace[0xDFFF04]);      // DSA control register, R/W
-uint16 & ds_data   = *((uint16 *)&jagMemSpace[0xDFFF0A]);      // DSA TX/RX data, R/W
-uint32 & i2cntrl   = *((uint32 *)&jagMemSpace[0xDFFF10]);      // i2s bus control register, R/W
-uint32 & sbcntrl   = *((uint32 *)&jagMemSpace[0xDFFF14]);      // CD subcode control register, R/W
-uint32 & subdata   = *((uint32 *)&jagMemSpace[0xDFFF18]);      // Subcode data register A
-uint32 & subdatb   = *((uint32 *)&jagMemSpace[0xDFFF1C]);      // Subcode data register B
-uint32 & sb_time   = *((uint32 *)&jagMemSpace[0xDFFF20]);      // Subcode time and compare enable (D24)
-uint32 & fifo_data = *((uint32 *)&jagMemSpace[0xDFFF24]);      // i2s FIFO data
-uint32 & i2sdat2   = *((uint32 *)&jagMemSpace[0xDFFF28]);      // i2s FIFO data (old)
-uint32 & unknown   = *((uint32 *)&jagMemSpace[0xDFFF2C]);      // Seems to be some sort of I2S interface
+uint32_t & butch     = *((uint32_t *)&jagMemSpace[0xDFFF00]);  // base of Butch == interrupt control register, R/W
+uint32_t & dscntrl   = *((uint32_t *)&jagMemSpace[0xDFFF04]);  // DSA control register, R/W
+uint16_t & ds_data   = *((uint16_t *)&jagMemSpace[0xDFFF0A]);  // DSA TX/RX data, R/W
+uint32_t & i2cntrl   = *((uint32_t *)&jagMemSpace[0xDFFF10]);  // i2s bus control register, R/W
+uint32_t & sbcntrl   = *((uint32_t *)&jagMemSpace[0xDFFF14]);  // CD subcode control register, R/W
+uint32_t & subdata   = *((uint32_t *)&jagMemSpace[0xDFFF18]);  // Subcode data register A
+uint32_t & subdatb   = *((uint32_t *)&jagMemSpace[0xDFFF1C]);  // Subcode data register B
+uint32_t & sb_time   = *((uint32_t *)&jagMemSpace[0xDFFF20]);  // Subcode time and compare enable (D24)
+uint32_t & fifo_data = *((uint32_t *)&jagMemSpace[0xDFFF24]);  // i2s FIFO data
+uint32_t & i2sdat2   = *((uint32_t *)&jagMemSpace[0xDFFF28]);  // i2s FIFO data (old)
+uint32_t & unknown   = *((uint32_t *)&jagMemSpace[0xDFFF2C]);  // Seems to be some sort of I2S interface
 #else
-uint32 butch, dscntrl, ds_data, i2cntrl, sbcntrl, subdata, subdatb, sb_time, fifo_data, i2sdat2, unknown;
+uint32_t butch, dscntrl, ds_data, i2cntrl, sbcntrl, subdata, subdatb, sb_time, fifo_data, i2sdat2, unknown;
 #endif
 
 #warning "Need to separate out this stuff (or do we???)"
@@ -154,119 +149,120 @@ uint32 butch, dscntrl, ds_data, i2cntrl, sbcntrl, subdata, subdatb, sb_time, fif
 // Actually, considering that "byteswap.h" doesn't exist elsewhere, the above
 // is probably our best bet here. Just need to rename them to ESAFExx().
 
-uint16 & memcon1   = *((uint16 *)&jagMemSpace[0xF00000]);
-uint16 & memcon2   = *((uint16 *)&jagMemSpace[0xF00002]);
-uint16 & hc        = *((uint16 *)&jagMemSpace[0xF00004]);
-uint16 & vc        = *((uint16 *)&jagMemSpace[0xF00006]);
-uint16 & lph       = *((uint16 *)&jagMemSpace[0xF00008]);
-uint16 & lpv       = *((uint16 *)&jagMemSpace[0xF0000A]);
-uint64 & obData    = *((uint64 *)&jagMemSpace[0xF00010]);
-uint32 & olp       = *((uint32 *)&jagMemSpace[0xF00020]);
-uint16 & obf       = *((uint16 *)&jagMemSpace[0xF00026]);
-uint16 & vmode     = *((uint16 *)&jagMemSpace[0xF00028]);
-uint16 & bord1     = *((uint16 *)&jagMemSpace[0xF0002A]);
-uint16 & bord2     = *((uint16 *)&jagMemSpace[0xF0002C]);
-uint16 & hp        = *((uint16 *)&jagMemSpace[0xF0002E]);
-uint16 & hbb       = *((uint16 *)&jagMemSpace[0xF00030]);
-uint16 & hbe       = *((uint16 *)&jagMemSpace[0xF00032]);
-uint16 & hs        = *((uint16 *)&jagMemSpace[0xF00034]);
-uint16 & hvs       = *((uint16 *)&jagMemSpace[0xF00036]);
-uint16 & hdb1      = *((uint16 *)&jagMemSpace[0xF00038]);
-uint16 & hdb2      = *((uint16 *)&jagMemSpace[0xF0003A]);
-uint16 & hde       = *((uint16 *)&jagMemSpace[0xF0003C]);
-uint16 & vp        = *((uint16 *)&jagMemSpace[0xF0003E]);
-uint16 & vbb       = *((uint16 *)&jagMemSpace[0xF00040]);
-uint16 & vbe       = *((uint16 *)&jagMemSpace[0xF00042]);
-uint16 & vs        = *((uint16 *)&jagMemSpace[0xF00044]);
-uint16 & vdb       = *((uint16 *)&jagMemSpace[0xF00046]);
-uint16 & vde       = *((uint16 *)&jagMemSpace[0xF00048]);
-uint16 & veb       = *((uint16 *)&jagMemSpace[0xF0004A]);
-uint16 & vee       = *((uint16 *)&jagMemSpace[0xF0004C]);
-uint16 & vi        = *((uint16 *)&jagMemSpace[0xF0004E]);
-uint16 & pit0      = *((uint16 *)&jagMemSpace[0xF00050]);
-uint16 & pit1      = *((uint16 *)&jagMemSpace[0xF00052]);
-uint16 & heq       = *((uint16 *)&jagMemSpace[0xF00054]);
-uint32 & bg        = *((uint32 *)&jagMemSpace[0xF00058]);
-uint16 & int1      = *((uint16 *)&jagMemSpace[0xF000E0]);
-uint16 & int2      = *((uint16 *)&jagMemSpace[0xF000E2]);
-uint8  * clut      =   (uint8 *) &jagMemSpace[0xF00400];
-uint8  * lbuf      =   (uint8 *) &jagMemSpace[0xF00800];
-uint32 & g_flags   = *((uint32 *)&jagMemSpace[0xF02100]);
-uint32 & g_mtxc    = *((uint32 *)&jagMemSpace[0xF02104]);
-uint32 & g_mtxa    = *((uint32 *)&jagMemSpace[0xF02108]);
-uint32 & g_end     = *((uint32 *)&jagMemSpace[0xF0210C]);
-uint32 & g_pc      = *((uint32 *)&jagMemSpace[0xF02110]);
-uint32 & g_ctrl    = *((uint32 *)&jagMemSpace[0xF02114]);
-uint32 & g_hidata  = *((uint32 *)&jagMemSpace[0xF02118]);
-uint32 & g_divctrl = *((uint32 *)&jagMemSpace[0xF0211C]);
-uint32 g_remain;                                                               // Dual register with $F0211C
-uint32 & a1_base   = *((uint32 *)&jagMemSpace[0xF02200]);
-uint32 & a1_flags  = *((uint32 *)&jagMemSpace[0xF02204]);
-uint32 & a1_clip   = *((uint32 *)&jagMemSpace[0xF02208]);
-uint32 & a1_pixel  = *((uint32 *)&jagMemSpace[0xF0220C]);
-uint32 & a1_step   = *((uint32 *)&jagMemSpace[0xF02210]);
-uint32 & a1_fstep  = *((uint32 *)&jagMemSpace[0xF02214]);
-uint32 & a1_fpixel = *((uint32 *)&jagMemSpace[0xF02218]);
-uint32 & a1_inc    = *((uint32 *)&jagMemSpace[0xF0221C]);
-uint32 & a1_finc   = *((uint32 *)&jagMemSpace[0xF02220]);
-uint32 & a2_base   = *((uint32 *)&jagMemSpace[0xF02224]);
-uint32 & a2_flags  = *((uint32 *)&jagMemSpace[0xF02228]);
-uint32 & a2_mask   = *((uint32 *)&jagMemSpace[0xF0222C]);
-uint32 & a2_pixel  = *((uint32 *)&jagMemSpace[0xF02230]);
-uint32 & a2_step   = *((uint32 *)&jagMemSpace[0xF02234]);
-uint32 & b_cmd     = *((uint32 *)&jagMemSpace[0xF02238]);
-uint32 & b_count   = *((uint32 *)&jagMemSpace[0xF0223C]);
-uint64 & b_srcd    = *((uint64 *)&jagMemSpace[0xF02240]);
-uint64 & b_dstd    = *((uint64 *)&jagMemSpace[0xF02248]);
-uint64 & b_dstz    = *((uint64 *)&jagMemSpace[0xF02250]);
-uint64 & b_srcz1   = *((uint64 *)&jagMemSpace[0xF02258]);
-uint64 & b_srcz2   = *((uint64 *)&jagMemSpace[0xF02260]);
-uint64 & b_patd    = *((uint64 *)&jagMemSpace[0xF02268]);
-uint32 & b_iinc    = *((uint32 *)&jagMemSpace[0xF02270]);
-uint32 & b_zinc    = *((uint32 *)&jagMemSpace[0xF02274]);
-uint32 & b_stop    = *((uint32 *)&jagMemSpace[0xF02278]);
-uint32 & b_i3      = *((uint32 *)&jagMemSpace[0xF0227C]);
-uint32 & b_i2      = *((uint32 *)&jagMemSpace[0xF02280]);
-uint32 & b_i1      = *((uint32 *)&jagMemSpace[0xF02284]);
-uint32 & b_i0      = *((uint32 *)&jagMemSpace[0xF02288]);
-uint32 & b_z3      = *((uint32 *)&jagMemSpace[0xF0228C]);
-uint32 & b_z2      = *((uint32 *)&jagMemSpace[0xF02290]);
-uint32 & b_z1      = *((uint32 *)&jagMemSpace[0xF02294]);
-uint32 & b_z0      = *((uint32 *)&jagMemSpace[0xF02298]);
-uint16 & jpit1     = *((uint16 *)&jagMemSpace[0xF10000]);
-uint16 & jpit2     = *((uint16 *)&jagMemSpace[0xF10002]);
-uint16 & jpit3     = *((uint16 *)&jagMemSpace[0xF10004]);
-uint16 & jpit4     = *((uint16 *)&jagMemSpace[0xF10006]);
-uint16 & clk1      = *((uint16 *)&jagMemSpace[0xF10010]);
-uint16 & clk2      = *((uint16 *)&jagMemSpace[0xF10012]);
-uint16 & clk3      = *((uint16 *)&jagMemSpace[0xF10014]);
-uint16 & j_int     = *((uint16 *)&jagMemSpace[0xF10020]);
-uint16 & asidata   = *((uint16 *)&jagMemSpace[0xF10030]);
-uint16 & asictrl   = *((uint16 *)&jagMemSpace[0xF10032]);
-uint16 asistat;                                                                        // Dual register with $F10032
-uint16 & asiclk    = *((uint16 *)&jagMemSpace[0xF10034]);
-uint16 & joystick  = *((uint16 *)&jagMemSpace[0xF14000]);
-uint16 & joybuts   = *((uint16 *)&jagMemSpace[0xF14002]);
-uint32 & d_flags   = *((uint32 *)&jagMemSpace[0xF1A100]);
-uint32 & d_mtxc    = *((uint32 *)&jagMemSpace[0xF1A104]);
-uint32 & d_mtxa    = *((uint32 *)&jagMemSpace[0xF1A108]);
-uint32 & d_end     = *((uint32 *)&jagMemSpace[0xF1A10C]);
-uint32 & d_pc      = *((uint32 *)&jagMemSpace[0xF1A110]);
-uint32 & d_ctrl    = *((uint32 *)&jagMemSpace[0xF1A114]);
-uint32 & d_mod     = *((uint32 *)&jagMemSpace[0xF1A118]);
-uint32 & d_divctrl = *((uint32 *)&jagMemSpace[0xF1A11C]);
-uint32 d_remain;                                                               // Dual register with $F0211C
-uint32 & d_machi   = *((uint32 *)&jagMemSpace[0xF1A120]);
-uint16 & ltxd      = *((uint16 *)&jagMemSpace[0xF1A148]);
-uint16 lrxd;                                                                   // Dual register with $F1A148
-uint16 & rtxd      = *((uint16 *)&jagMemSpace[0xF1A14C]);
-uint16 rrxd;                                                                   // Dual register with $F1A14C
-uint8  & sclk      = *((uint8 *) &jagMemSpace[0xF1A150]);
-uint8 sstat;                                                                   // Dual register with $F1A150
-uint32 & smode     = *((uint32 *)&jagMemSpace[0xF1A154]);
+// Look at <endian.h> and see if that header is portable or not.
 
-// Memory debugging identifiers
+uint16_t & memcon1   = *((uint16_t *)&jagMemSpace[0xF00000]);
+uint16_t & memcon2   = *((uint16_t *)&jagMemSpace[0xF00002]);
+uint16_t & hc        = *((uint16_t *)&jagMemSpace[0xF00004]);
+uint16_t & vc        = *((uint16_t *)&jagMemSpace[0xF00006]);
+uint16_t & lph       = *((uint16_t *)&jagMemSpace[0xF00008]);
+uint16_t & lpv       = *((uint16_t *)&jagMemSpace[0xF0000A]);
+uint64_t & obData    = *((uint64_t *)&jagMemSpace[0xF00010]);
+uint32_t & olp       = *((uint32_t *)&jagMemSpace[0xF00020]);
+uint16_t & obf       = *((uint16_t *)&jagMemSpace[0xF00026]);
+uint16_t & vmode     = *((uint16_t *)&jagMemSpace[0xF00028]);
+uint16_t & bord1     = *((uint16_t *)&jagMemSpace[0xF0002A]);
+uint16_t & bord2     = *((uint16_t *)&jagMemSpace[0xF0002C]);
+uint16_t & hp        = *((uint16_t *)&jagMemSpace[0xF0002E]);
+uint16_t & hbb       = *((uint16_t *)&jagMemSpace[0xF00030]);
+uint16_t & hbe       = *((uint16_t *)&jagMemSpace[0xF00032]);
+uint16_t & hs        = *((uint16_t *)&jagMemSpace[0xF00034]);
+uint16_t & hvs       = *((uint16_t *)&jagMemSpace[0xF00036]);
+uint16_t & hdb1      = *((uint16_t *)&jagMemSpace[0xF00038]);
+uint16_t & hdb2      = *((uint16_t *)&jagMemSpace[0xF0003A]);
+uint16_t & hde       = *((uint16_t *)&jagMemSpace[0xF0003C]);
+uint16_t & vp        = *((uint16_t *)&jagMemSpace[0xF0003E]);
+uint16_t & vbb       = *((uint16_t *)&jagMemSpace[0xF00040]);
+uint16_t & vbe       = *((uint16_t *)&jagMemSpace[0xF00042]);
+uint16_t & vs        = *((uint16_t *)&jagMemSpace[0xF00044]);
+uint16_t & vdb       = *((uint16_t *)&jagMemSpace[0xF00046]);
+uint16_t & vde       = *((uint16_t *)&jagMemSpace[0xF00048]);
+uint16_t & veb       = *((uint16_t *)&jagMemSpace[0xF0004A]);
+uint16_t & vee       = *((uint16_t *)&jagMemSpace[0xF0004C]);
+uint16_t & vi        = *((uint16_t *)&jagMemSpace[0xF0004E]);
+uint16_t & pit0      = *((uint16_t *)&jagMemSpace[0xF00050]);
+uint16_t & pit1      = *((uint16_t *)&jagMemSpace[0xF00052]);
+uint16_t & heq       = *((uint16_t *)&jagMemSpace[0xF00054]);
+uint32_t & bg        = *((uint32_t *)&jagMemSpace[0xF00058]);
+uint16_t & int1      = *((uint16_t *)&jagMemSpace[0xF000E0]);
+uint16_t & int2      = *((uint16_t *)&jagMemSpace[0xF000E2]);
+uint8_t  * clut      =   (uint8_t *) &jagMemSpace[0xF00400];
+uint8_t  * lbuf      =   (uint8_t *) &jagMemSpace[0xF00800];
+uint32_t & g_flags   = *((uint32_t *)&jagMemSpace[0xF02100]);
+uint32_t & g_mtxc    = *((uint32_t *)&jagMemSpace[0xF02104]);
+uint32_t & g_mtxa    = *((uint32_t *)&jagMemSpace[0xF02108]);
+uint32_t & g_end     = *((uint32_t *)&jagMemSpace[0xF0210C]);
+uint32_t & g_pc      = *((uint32_t *)&jagMemSpace[0xF02110]);
+uint32_t & g_ctrl    = *((uint32_t *)&jagMemSpace[0xF02114]);
+uint32_t & g_hidata  = *((uint32_t *)&jagMemSpace[0xF02118]);
+uint32_t & g_divctrl = *((uint32_t *)&jagMemSpace[0xF0211C]);
+uint32_t g_remain;                                                             // Dual register with $F0211C
+uint32_t & a1_base   = *((uint32_t *)&jagMemSpace[0xF02200]);
+uint32_t & a1_flags  = *((uint32_t *)&jagMemSpace[0xF02204]);
+uint32_t & a1_clip   = *((uint32_t *)&jagMemSpace[0xF02208]);
+uint32_t & a1_pixel  = *((uint32_t *)&jagMemSpace[0xF0220C]);
+uint32_t & a1_step   = *((uint32_t *)&jagMemSpace[0xF02210]);
+uint32_t & a1_fstep  = *((uint32_t *)&jagMemSpace[0xF02214]);
+uint32_t & a1_fpixel = *((uint32_t *)&jagMemSpace[0xF02218]);
+uint32_t & a1_inc    = *((uint32_t *)&jagMemSpace[0xF0221C]);
+uint32_t & a1_finc   = *((uint32_t *)&jagMemSpace[0xF02220]);
+uint32_t & a2_base   = *((uint32_t *)&jagMemSpace[0xF02224]);
+uint32_t & a2_flags  = *((uint32_t *)&jagMemSpace[0xF02228]);
+uint32_t & a2_mask   = *((uint32_t *)&jagMemSpace[0xF0222C]);
+uint32_t & a2_pixel  = *((uint32_t *)&jagMemSpace[0xF02230]);
+uint32_t & a2_step   = *((uint32_t *)&jagMemSpace[0xF02234]);
+uint32_t & b_cmd     = *((uint32_t *)&jagMemSpace[0xF02238]);
+uint32_t & b_count   = *((uint32_t *)&jagMemSpace[0xF0223C]);
+uint64_t & b_srcd    = *((uint64_t *)&jagMemSpace[0xF02240]);
+uint64_t & b_dstd    = *((uint64_t *)&jagMemSpace[0xF02248]);
+uint64_t & b_dstz    = *((uint64_t *)&jagMemSpace[0xF02250]);
+uint64_t & b_srcz1   = *((uint64_t *)&jagMemSpace[0xF02258]);
+uint64_t & b_srcz2   = *((uint64_t *)&jagMemSpace[0xF02260]);
+uint64_t & b_patd    = *((uint64_t *)&jagMemSpace[0xF02268]);
+uint32_t & b_iinc    = *((uint32_t *)&jagMemSpace[0xF02270]);
+uint32_t & b_zinc    = *((uint32_t *)&jagMemSpace[0xF02274]);
+uint32_t & b_stop    = *((uint32_t *)&jagMemSpace[0xF02278]);
+uint32_t & b_i3      = *((uint32_t *)&jagMemSpace[0xF0227C]);
+uint32_t & b_i2      = *((uint32_t *)&jagMemSpace[0xF02280]);
+uint32_t & b_i1      = *((uint32_t *)&jagMemSpace[0xF02284]);
+uint32_t & b_i0      = *((uint32_t *)&jagMemSpace[0xF02288]);
+uint32_t & b_z3      = *((uint32_t *)&jagMemSpace[0xF0228C]);
+uint32_t & b_z2      = *((uint32_t *)&jagMemSpace[0xF02290]);
+uint32_t & b_z1      = *((uint32_t *)&jagMemSpace[0xF02294]);
+uint32_t & b_z0      = *((uint32_t *)&jagMemSpace[0xF02298]);
+uint16_t & jpit1     = *((uint16_t *)&jagMemSpace[0xF10000]);
+uint16_t & jpit2     = *((uint16_t *)&jagMemSpace[0xF10002]);
+uint16_t & jpit3     = *((uint16_t *)&jagMemSpace[0xF10004]);
+uint16_t & jpit4     = *((uint16_t *)&jagMemSpace[0xF10006]);
+uint16_t & clk1      = *((uint16_t *)&jagMemSpace[0xF10010]);
+uint16_t & clk2      = *((uint16_t *)&jagMemSpace[0xF10012]);
+uint16_t & clk3      = *((uint16_t *)&jagMemSpace[0xF10014]);
+uint16_t & j_int     = *((uint16_t *)&jagMemSpace[0xF10020]);
+uint16_t & asidata   = *((uint16_t *)&jagMemSpace[0xF10030]);
+uint16_t & asictrl   = *((uint16_t *)&jagMemSpace[0xF10032]);
+uint16_t asistat;                                                                      // Dual register with $F10032
+uint16_t & asiclk    = *((uint16_t *)&jagMemSpace[0xF10034]);
+uint16_t & joystick  = *((uint16_t *)&jagMemSpace[0xF14000]);
+uint16_t & joybuts   = *((uint16_t *)&jagMemSpace[0xF14002]);
+uint32_t & d_flags   = *((uint32_t *)&jagMemSpace[0xF1A100]);
+uint32_t & d_mtxc    = *((uint32_t *)&jagMemSpace[0xF1A104]);
+uint32_t & d_mtxa    = *((uint32_t *)&jagMemSpace[0xF1A108]);
+uint32_t & d_end     = *((uint32_t *)&jagMemSpace[0xF1A10C]);
+uint32_t & d_pc      = *((uint32_t *)&jagMemSpace[0xF1A110]);
+uint32_t & d_ctrl    = *((uint32_t *)&jagMemSpace[0xF1A114]);
+uint32_t & d_mod     = *((uint32_t *)&jagMemSpace[0xF1A118]);
+uint32_t & d_divctrl = *((uint32_t *)&jagMemSpace[0xF1A11C]);
+uint32_t d_remain;                                                             // Dual register with $F0211C
+uint32_t & d_machi   = *((uint32_t *)&jagMemSpace[0xF1A120]);
+uint16_t & ltxd      = *((uint16_t *)&jagMemSpace[0xF1A148]);
+uint16_t lrxd;                                                                 // Dual register with $F1A148
+uint16_t & rtxd      = *((uint16_t *)&jagMemSpace[0xF1A14C]);
+uint16_t rrxd;                                                                 // Dual register with $F1A14C
+uint8_t  & sclk      = *((uint8_t *) &jagMemSpace[0xF1A150]);
+uint8_t sstat;                                                                 // Dual register with $F1A150
+uint32_t & smode     = *((uint32_t *)&jagMemSpace[0xF1A154]);
 
-const char * whoName[9] =
-       { "Unknown", "Jaguar", "DSP", "GPU", "TOM", "JERRY", "M68K", "Blitter", "OP" };
+// Memory debugging identifiers
 
+const char * whoName[10] =
+       { "Unknown", "Jaguar", "DSP", "GPU", "TOM", "JERRY", "M68K", "Blitter", "OP", "Debugger" };