--- a/src/MMU_timing.h 2017-04-07 23:01:21.434704818 +0200 +++ a/src/MMU_timing.h 2017-04-07 23:00:43.477080792 +0200 @@ -155,8 +155,8 @@ enum { ASSOCIATIVITY = 1 << ASSOCIATIVESHIFT }; enum { BLOCKSIZE = 1 << BLOCKSIZESHIFT }; enum { TAGSHIFT = SIZESHIFT - ASSOCIATIVESHIFT }; - enum { TAGMASK = (u32)(~0 << TAGSHIFT) }; - enum { BLOCKMASK = ((u32)~0 >> (32 - TAGSHIFT)) & (u32)(~0 << BLOCKSIZESHIFT) }; + enum { TAGMASK = (u32)(~0u << TAGSHIFT) }; + enum { BLOCKMASK = ((u32)~0u >> (32 - TAGSHIFT)) & (u32)(~0u << BLOCKSIZESHIFT) }; enum { WORDSIZE = sizeof(u32) }; enum { WORDSPERBLOCK = (1 << BLOCKSIZESHIFT) / WORDSIZE }; enum { DATAPERWORD = WORDSIZE * ASSOCIATIVITY }; --- a/src/SPU.cpp 2017-04-07 23:01:04.719436896 +0200 +++ a/src/SPU.cpp 2017-04-07 23:29:51.989486794 +0200 @@ -468,10 +468,10 @@ | (thischan.format << 5) | ((thischan.status == CHANSTAT_PLAY)?0x80:0) ); - case 0x8: return *(u8*)(thischan.timer + 0); - case 0x9: return *(u8*)(thischan.timer + 1); - case 0xA: return *(u8*)(thischan.loopstart + 0); - case 0xB: return *(u8*)(thischan.loopstart + 1); + case 0x8: return *((u8*)&thischan.timer + 0); + case 0x9: return *((u8*)&thischan.timer + 1); + case 0xA: return *((u8*)&thischan.loopstart + 0); + case 0xB: return *((u8*)&thischan.loopstart + 1); } return 0; } @@ -488,8 +488,8 @@ ); //SOUNDBIAS - case 0x504: return *(u8*)(regs.soundbias + 0); - case 0x505: return *(u8*)(regs.soundbias + 1); + case 0x504: return *((u8*)®s.soundbias + 0); + case 0x505: return *((u8*)®s.soundbias + 1); //SNDCAP0CNT/SNDCAP1CNT case 0x508: @@ -504,24 +504,24 @@ } //SNDCAP0DAD - case 0x510: return *(u8*)(regs.cap[0].dad + 0); - case 0x511: return *(u8*)(regs.cap[0].dad + 1); - case 0x512: return *(u8*)(regs.cap[0].dad + 2); - case 0x513: return *(u8*)(regs.cap[0].dad + 3); + case 0x510: return *((u8*)®s.cap[0].dad + 0); + case 0x511: return *((u8*)®s.cap[0].dad + 1); + case 0x512: return *((u8*)®s.cap[0].dad + 2); + case 0x513: return *((u8*)®s.cap[0].dad + 3); //SNDCAP0LEN - case 0x514: return *(u8*)(regs.cap[0].len + 0); - case 0x515: return *(u8*)(regs.cap[0].len + 1); + case 0x514: return *((u8*)®s.cap[0].len + 0); + case 0x515: return *((u8*)®s.cap[0].len + 1); //SNDCAP1DAD - case 0x518: return *(u8*)(regs.cap[1].dad + 0); - case 0x519: return *(u8*)(regs.cap[1].dad + 1); - case 0x51A: return *(u8*)(regs.cap[1].dad + 2); - case 0x51B: return *(u8*)(regs.cap[1].dad + 3); + case 0x518: return *((u8*)®s.cap[1].dad + 0); + case 0x519: return *((u8*)®s.cap[1].dad + 1); + case 0x51A: return *((u8*)®s.cap[1].dad + 2); + case 0x51B: return *((u8*)®s.cap[1].dad + 3); //SNDCAP1LEN - case 0x51C: return *(u8*)(regs.cap[1].len + 0); - case 0x51D: return *(u8*)(regs.cap[1].len + 1); + case 0x51C: return *((u8*)®s.cap[1].len + 0); + case 0x51D: return *((u8*)®s.cap[1].len + 1); } //switch on address return 0; @@ -584,15 +584,15 @@ } //SNDCAP0DAD - case 0x510: return *(u16*)(regs.cap[0].dad + 0); - case 0x512: return *(u16*)(regs.cap[0].dad + 1); + case 0x510: return *((u16*)®s.cap[0].dad + 0); + case 0x512: return *((u16*)®s.cap[0].dad + 1); //SNDCAP0LEN case 0x514: return regs.cap[0].len; //SNDCAP1DAD - case 0x518: return *(u16*)(regs.cap[1].dad + 0); - case 0x51A: return *(u16*)(regs.cap[1].dad + 1); + case 0x518: return *((u16*)®s.cap[1].dad + 0); + case 0x51A: return *((u16*)®s.cap[1].dad + 1); //SNDCAP1LEN case 0x51C: return regs.cap[1].len; @@ -768,19 +768,19 @@ thischan.keyon = (val >> 7) & 0x01; KeyProbe(chan_num); break; - case 0x4: *(u8*)(thischan.addr + 0) = (val & 0xFC); break; - case 0x5: *(u8*)(thischan.addr + 1) = val; break; - case 0x6: *(u8*)(thischan.addr + 2) = val; break; - case 0x7: *(u8*)(thischan.addr + 3) = (val & 0x07); break; //only 27 bits of this register are used - case 0x8: *(u8*)(thischan.timer + 0) = val; adjust_channel_timer(&thischan); break; - case 0x9: *(u8*)(thischan.timer + 1) = val; adjust_channel_timer(&thischan); break; - - case 0xA: *(u8*)(thischan.loopstart + 0) = val; break; - case 0xB: *(u8*)(thischan.loopstart + 1) = val; break; - case 0xC: *(u8*)(thischan.length + 0) = val; break; - case 0xD: *(u8*)(thischan.length + 1) = val; break; - case 0xE: *(u8*)(thischan.length + 2) = (val & 0x3F); break; //only 22 bits of this register are used - case 0xF: *(u8*)(thischan.length + 3) = 0; break; + case 0x4: *((u8*)&thischan.addr + 0) = (val & 0xFC); break; + case 0x5: *((u8*)&thischan.addr + 1) = val; break; + case 0x6: *((u8*)&thischan.addr + 2) = val; break; + case 0x7: *((u8*)&thischan.addr + 3) = (val & 0x07); break; //only 27 bits of this register are used + case 0x8: *((u8*)&thischan.timer + 0) = val; adjust_channel_timer(&thischan); break; + case 0x9: *((u8*)&thischan.timer + 1) = val; adjust_channel_timer(&thischan); break; + + case 0xA: *((u8*)&thischan.loopstart + 0) = val; break; + case 0xB: *((u8*)&thischan.loopstart + 1) = val; break; + case 0xC: *((u8*)&thischan.length + 0) = val; break; + case 0xD: *((u8*)&thischan.length + 1) = val; break; + case 0xE: *((u8*)&thischan.length + 2) = (val & 0x3F); break; //only 22 bits of this register are used + case 0xF: *((u8*)&thischan.length + 3) = 0; break; } //switch on individual channel regs return; } @@ -800,8 +800,8 @@ break; //SOUNDBIAS - case 0x504: *(u8*)(regs.soundbias + 0) = val; break; - case 0x505: *(u8*)(regs.soundbias + 1) = (val & 0x03); break; + case 0x504: *((u8*)®s.soundbias + 0) = val; break; + case 0x505: *((u8*)®s.soundbias + 1) = (val & 0x03); break; //SNDCAP0CNT/SNDCAP1CNT case 0x508: @@ -818,24 +818,24 @@ } //SNDCAP0DAD - case 0x510: *(u8*)(regs.cap[0].dad + 0) = (val & 0xFC); break; - case 0x511: *(u8*)(regs.cap[0].dad + 1) = val; break; - case 0x512: *(u8*)(regs.cap[0].dad + 2) = val; break; - case 0x513: *(u8*)(regs.cap[0].dad + 3) = (val & 0x07); break; + case 0x510: *((u8*)®s.cap[0].dad + 0) = (val & 0xFC); break; + case 0x511: *((u8*)®s.cap[0].dad + 1) = val; break; + case 0x512: *((u8*)®s.cap[0].dad + 2) = val; break; + case 0x513: *((u8*)®s.cap[0].dad + 3) = (val & 0x07); break; //SNDCAP0LEN - case 0x514: *(u8*)(regs.cap[0].len + 0) = val; break; - case 0x515: *(u8*)(regs.cap[0].len + 1) = val; break; + case 0x514: *((u8*)®s.cap[0].len + 0) = val; break; + case 0x515: *((u8*)®s.cap[0].len + 1) = val; break; //SNDCAP1DAD - case 0x518: *(u8*)(regs.cap[1].dad + 0) = (val & 0xFC); break; - case 0x519: *(u8*)(regs.cap[1].dad + 1) = val; break; - case 0x51A: *(u8*)(regs.cap[1].dad + 2) = val; break; - case 0x51B: *(u8*)(regs.cap[1].dad + 3) = (val & 0x07); break; + case 0x518: *((u8*)®s.cap[1].dad + 0) = (val & 0xFC); break; + case 0x519: *((u8*)®s.cap[1].dad + 1) = val; break; + case 0x51A: *((u8*)®s.cap[1].dad + 2) = val; break; + case 0x51B: *((u8*)®s.cap[1].dad + 3) = (val & 0x07); break; //SNDCAP1LEN - case 0x51C: *(u8*)(regs.cap[1].len + 0) = val; break; - case 0x51D: *(u8*)(regs.cap[1].len + 1) = val; break; + case 0x51C: *((u8*)®s.cap[1].len + 0) = val; break; + case 0x51D: *((u8*)®s.cap[1].len + 1) = val; break; } //switch on address } @@ -864,12 +864,12 @@ thischan.keyon = (val >> 15) & 0x1; KeyProbe(chan_num); break; - case 0x4: *(u16*)(thischan.addr + 0) = (val & 0xFFFC); break; - case 0x6: *(u16*)(thischan.addr + 1) = (val & 0x07FF); break; + case 0x4: *((u16*)&thischan.addr + 0) = (val & 0xFFFC); break; + case 0x6: *((u16*)&thischan.addr + 1) = (val & 0x07FF); break; case 0x8: thischan.timer = val; adjust_channel_timer(&thischan); break; case 0xA: thischan.loopstart = val; break; - case 0xC: *(u16*)(thischan.length + 0) = val; break; - case 0xE: *(u16*)(thischan.length + 1) = (val & 0x003F); break; //only 22 bits of this register are used + case 0xC: *((u16*)&thischan.length + 0) = val; break; + case 0xE: *((u16*)&thischan.length + 1) = (val & 0x003F); break; //only 22 bits of this register are used } //switch on individual channel regs return; } @@ -911,15 +911,15 @@ } //SNDCAP0DAD - case 0x510: *(u16*)(regs.cap[0].dad + 0) = (val & 0xFFFC); break; - case 0x512: *(u16*)(regs.cap[0].dad + 1) = (val & 0x7FFF); break; + case 0x510: *((u16*)®s.cap[0].dad + 0) = (val & 0xFFFC); break; + case 0x512: *((u16*)®s.cap[0].dad + 1) = (val & 0x7FFF); break; //SNDCAP0LEN case 0x514: regs.cap[0].len = val; break; //SNDCAP1DAD - case 0x518: *(u16*)(regs.cap[1].dad + 0) = (val & 0xFFFC); break; - case 0x51A: *(u16*)(regs.cap[1].dad + 1) = (val & 0x7FFF); break; + case 0x518: *((u16*)®s.cap[1].dad + 0) = (val & 0xFFFC); break; + case 0x51A: *((u16*)®s.cap[1].dad + 1) = (val & 0x7FFF); break; //SNDCAP1LEN case 0x51C: regs.cap[1].len = val; break; --- a/src/ctrlssdl.cpp 2017-04-07 23:01:04.720436913 +0200 +++ a/src/ctrlssdl.cpp 2017-04-07 23:31:21.361936442 +0200 @@ -200,7 +200,7 @@ break; case SDL_JOYAXISMOTION: /* Dead zone of 50% */ - if( (abs(event.jaxis.value) >> 14) != 0 ) + if( (std::abs((int)event.jaxis.value) >> 14) != 0 ) { key = ((event.jaxis.which & 15) << 12) | JOY_AXIS << 8 | ((event.jaxis.axis & 127) << 1); if (event.jaxis.value > 0) { @@ -370,7 +370,7 @@ Note: button constants have a 1bit offset. */ case SDL_JOYAXISMOTION: key_code = ((event->jaxis.which & 15) << 12) | JOY_AXIS << 8 | ((event->jaxis.axis & 127) << 1); - if( (abs(event->jaxis.value) >> 14) != 0 ) + if( (std::abs((int)event->jaxis.value) >> 14) != 0 ) { if (event->jaxis.value > 0) key_code |= 1; --- a/src/rasterize.cpp 2017-04-07 23:01:04.712436779 +0200 +++ a/src/rasterize.cpp 2017-04-07 23:22:35.066422239 +0200 @@ -1698,7 +1698,7 @@ { for(unsigned int i = 0; i < rasterizerCores; i++) { - rasterizerUnitTask[i].execute(&execRasterizerUnit, (void *)i); + rasterizerUnitTask[i].execute(&execRasterizerUnit, (void *)(intptr_t)i); } } else --- a/src/wifi.cpp 2017-04-07 23:01:04.720436913 +0200 +++ a/src/wifi.cpp 2017-04-07 23:05:32.737362118 +0200 @@ -314,9 +314,9 @@ #if (WIFI_LOGGING_LEVEL >= 1) #if WIFI_LOG_USE_LOGC - #define WIFI_LOG(level, ...) if(level <= WIFI_LOGGING_LEVEL) LOGC(8, "WIFI: "__VA_ARGS__); + #define WIFI_LOG(level, ...) if(level <= WIFI_LOGGING_LEVEL) LOGC(8, "WIFI: " __VA_ARGS__); #else - #define WIFI_LOG(level, ...) if(level <= WIFI_LOGGING_LEVEL) printf("WIFI: "__VA_ARGS__); + #define WIFI_LOG(level, ...) if(level <= WIFI_LOGGING_LEVEL) printf("WIFI: " __VA_ARGS__); #endif #else #define WIFI_LOG(level, ...) {}