From 0363283eb73d2fdaf7d79818771319eeafcb00d0 Mon Sep 17 00:00:00 2001 From: meepingsnesroms Date: Tue, 13 Nov 2018 08:59:36 -0800 Subject: [PATCH] Make multithread defines C89 compliant since the local variable cant be defined in the loop --- qtBuildSystem/Mu/mainwindow.cpp | 2 +- src/emulator.c | 11 +++++++---- src/memoryAccess.c | 6 +++--- src/portability.h | 9 +++++---- src/sed1376.c | 12 ++++++------ 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/qtBuildSystem/Mu/mainwindow.cpp b/qtBuildSystem/Mu/mainwindow.cpp index 542b773..0a30a3e 100644 --- a/qtBuildSystem/Mu/mainwindow.cpp +++ b/qtBuildSystem/Mu/mainwindow.cpp @@ -290,7 +290,7 @@ void MainWindow::on_right_released(){ void MainWindow::on_ctrlBtn_clicked(){ if(!emu.isInited()){ QString sysDir = settings->value("resourceDirectory", "").toString(); - uint32_t error = emu.init(sysDir + "/palmos41-en-m515.rom", QFile(sysDir + "/bootloader-en-m515.rom").exists() ? sysDir + "/bootloader-en-m515.rom" : "", sysDir + "/userdata-en-m515.ram", sysDir + "/sd-en-m515.img", FEATURE_DEBUG); + uint32_t error = emu.init(sysDir + "/palmos41-en-m515.rom", QFile(sysDir + "/bootloader-en-m515.rom").exists() ? sysDir + "/bootloader-en-m515.rom" : "", sysDir + "/userdata-en-m515.ram", sysDir + "/sd-en-m515.img", FEATURE_320x320 | FEATURE_DEBUG); if(error == EMU_ERROR_NONE){ ui->calendar->setEnabled(true); ui->addressBook->setEnabled(true); diff --git a/src/emulator.c b/src/emulator.c index 6569085..8e02e4d 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -599,7 +599,7 @@ void emulatorRunFrame(void){ printf("There are %d audio samples available, %d should be available\n", blip_samples_avail(palmAudioResampler), AUDIO_SAMPLES_PER_FRAME); */ blip_read_samples(palmAudioResampler, palmAudio, AUDIO_SAMPLES_PER_FRAME, true); - MULTITHREAD_LOOP for(samples = 0; samples < AUDIO_SAMPLES_PER_FRAME * 2; samples += 2) + MULTITHREAD_LOOP(samples) for(samples = 0; samples < AUDIO_SAMPLES_PER_FRAME * 2; samples += 2) palmAudio[samples + 1] = palmAudio[samples]; //video @@ -611,14 +611,17 @@ void emulatorRunFrame(void){ uint16_t pixCopyY; //scale original framebuffer to large one if enabled, this alone doesnt increase resolution, that requires a driver - MULTITHREAD_DOUBLE_LOOP for(pixCopyY = 0; pixCopyY < 160; pixCopyY++){ + //scale horizontal + MULTITHREAD_DOUBLE_LOOP(pixCopyX, pixCopyY) for(pixCopyY = 0; pixCopyY < 160; pixCopyY++){ for(pixCopyX = 0; pixCopyX < 160; pixCopyX++){ palmExtendedFramebuffer[pixCopyY * 320 * 2 + pixCopyX * 2] = palmFramebuffer[pixCopyY * 160 + pixCopyX]; palmExtendedFramebuffer[pixCopyY * 320 * 2 + pixCopyX * 2 + 1] = palmFramebuffer[pixCopyY * 160 + pixCopyX]; } - - memcpy(palmExtendedFramebuffer + pixCopyY * 320 * 2 + 320, palmExtendedFramebuffer + pixCopyY * 320 * 2, 320 * sizeof(uint16_t)); } + //scale vertical + MULTITHREAD_LOOP(pixCopyY) for(pixCopyY = 0; pixCopyY < 160; pixCopyY++) + memcpy(palmExtendedFramebuffer + pixCopyY * 320 * 2 + 320, palmExtendedFramebuffer + pixCopyY * 320 * 2, 320 * sizeof(uint16_t)); + //replace all black pixels in 160x160 with those from 320x320 framebuffer memory, only if black in both buffers will the display color be black, this allows all the 160x160 APIs to work on the larger framebuffer seamlessly //DRIVER NEEDS TO BE WRITTEN STILL diff --git a/src/memoryAccess.c b/src/memoryAccess.c index b59b080..30a5c4e 100644 --- a/src/memoryAccess.c +++ b/src/memoryAccess.c @@ -383,14 +383,14 @@ static uint8_t getProperBankType(uint32_t bank){ void setRegisterXXFFAccessMode(void){ uint32_t topByte; - MULTITHREAD_LOOP for(topByte = 0; topByte < 0x100; topByte++) + MULTITHREAD_LOOP(topByte) for(topByte = 0; topByte < 0x100; topByte++) bankType[START_BANK(topByte << 24 | 0x00FFF000)] = CHIP_REGISTERS; } void setRegisterFFFFAccessMode(void){ uint32_t topByte; - MULTITHREAD_LOOP for(topByte = 0; topByte < 0x100; topByte++){ + MULTITHREAD_LOOP(topByte) for(topByte = 0; topByte < 0x100; topByte++){ uint32_t bank = START_BANK(topByte << 24 | 0x00FFF000); bankType[bank] = getProperBankType(bank); } @@ -404,7 +404,7 @@ void setSed1376Attached(bool attached){ void resetAddressSpace(void){ uint32_t bank; - MULTITHREAD_LOOP for(bank = 0; bank < TOTAL_MEMORY_BANKS; bank++) + MULTITHREAD_LOOP(bank) for(bank = 0; bank < TOTAL_MEMORY_BANKS; bank++) bankType[bank] = getProperBankType(bank); flx68000RefreshAddressing(); } diff --git a/src/portability.h b/src/portability.h index 21e449c..47c6cb0 100644 --- a/src/portability.h +++ b/src/portability.h @@ -20,11 +20,12 @@ static inline void swap16BufferIfLittle(uint8_t* buffer, uint64_t count){ //threads #if defined(EMU_MULTITHREADED) -#define MULTITHREAD_LOOP _Pragma("omp parallel for") -#define MULTITHREAD_DOUBLE_LOOP _Pragma("omp parallel for collapse(2)") +#define PRAGMA_STRINGIFY(x) _Pragma(#x) +#define MULTITHREAD_LOOP(x) PRAGMA_STRINGIFY(omp parallel for private(x)) +#define MULTITHREAD_DOUBLE_LOOP(x, y) PRAGMA_STRINGIFY(omp parallel for collapse(2) private(x, y)) #else -#define MULTITHREAD_LOOP -#define MULTITHREAD_DOUBLE_LOOP +#define MULTITHREAD_LOOP(x) +#define MULTITHREAD_DOUBLE_LOOP(x, y) #endif //range capping diff --git a/src/sed1376.c b/src/sed1376.c index 85190ac..1744775 100644 --- a/src/sed1376.c +++ b/src/sed1376.c @@ -167,7 +167,7 @@ void sed1376LoadState(uint8_t* data){ offset += SED1376_FB_SIZE; //refresh LUT - MULTITHREAD_LOOP for(index = 0; index < SED1376_LUT_SIZE; index++) + MULTITHREAD_LOOP(index) for(index = 0; index < SED1376_LUT_SIZE; index++) sed1376OutputLut[index] = makeRgb16FromSed666(sed1376RLut[index], sed1376GLut[index], sed1376BLut[index]); } @@ -336,7 +336,7 @@ void sed1376Render(void){ uint16_t pixelX; uint16_t pixelY; - MULTITHREAD_DOUBLE_LOOP for(pixelY = 0; pixelY < 160; pixelY++) + MULTITHREAD_DOUBLE_LOOP(pixelX, pixelY) for(pixelY = 0; pixelY < 160; pixelY++) for(pixelX = 0; pixelX < 160; pixelX++) palmFramebuffer[pixelY * 160 + pixelX] = renderPixel(pixelX, pixelY); @@ -364,7 +364,7 @@ void sed1376Render(void){ pipEndY = u16Min(pipEndY, 160); screenStartAddress = getPipStartAddress(); lineSize = (sed1376Registers[PIP_LINE_SZ_1] << 8 | sed1376Registers[PIP_LINE_SZ_0]) * 4; - MULTITHREAD_DOUBLE_LOOP for(pixelY = pipStartY; pixelY < pipEndY; pixelY++) + MULTITHREAD_DOUBLE_LOOP(pixelX, pixelY) for(pixelY = pipStartY; pixelY < pipEndY; pixelY++) for(pixelX = pipStartX; pixelX < pipEndX; pixelX++) palmFramebuffer[pixelY * 160 + pixelX] = renderPixel(pixelX, pixelY); } @@ -375,20 +375,20 @@ void sed1376Render(void){ //display inversion if((sed1376Registers[DISP_MODE] & 0x30) == 0x10) - MULTITHREAD_LOOP for(index = 0; index < 160 * 160; index++) + MULTITHREAD_LOOP(index) for(index = 0; index < 160 * 160; index++) palmFramebuffer[index] = ~palmFramebuffer[index]; //backlight level, 0 = 1/4 color intensity, 1 = 1/2 color intensity, 2 = full color intensity switch(palmMisc.backlightLevel){ case 0: - MULTITHREAD_LOOP for(index = 0; index < 160 * 160; index++){ + MULTITHREAD_LOOP(index) for(index = 0; index < 160 * 160; index++){ palmFramebuffer[index] >>= 2; palmFramebuffer[index] &= 0x39E7; } break; case 1: - MULTITHREAD_LOOP for(index = 0; index < 160 * 160; index++){ + MULTITHREAD_LOOP(index) for(index = 0; index < 160 * 160; index++){ palmFramebuffer[index] >>= 1; palmFramebuffer[index] &= 0x7BEF; }