diff --git a/.gitignore b/.gitignore index 10e641c8..638790fc 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,6 @@ Amiberry/VisualGDB/Release-rpi2/Amiberry *.ipch *.db-shm *.db-wal -*.TMP \ No newline at end of file +*.TMP +VisualGDB/VisualGDB/Debug/Amiberry +VisualGDB/VisualGDB/Release/Amiberry \ No newline at end of file diff --git a/VisualGDB/Amiberry/Amiberry.vcxproj b/VisualGDB/Amiberry/Amiberry.vcxproj index 73499592..909ab3b1 100644 --- a/VisualGDB/Amiberry/Amiberry.vcxproj +++ b/VisualGDB/Amiberry/Amiberry.vcxproj @@ -46,7 +46,7 @@ GNUPP14 ../../src;../../src/include;../../src/osdep;../../src/threaddep;=/opt/vc/include;=/opt/vc/include/interface/vmcs_host/linux;=/opt/vc/include/interface/vcos/pthreads;=/usr/local/include/SDL2;=/usr/include/libxml2;%(ClCompile.AdditionalIncludeDirectories) DEBUG=1;_REENTRANT;RASPBERRY;CAPSLOCK_DEBIAN_WORKAROUND;ARMV6T2;PICASSO96;USE_ARMNEON;CPU_arm;ARMV6_ASSEMBLY;PANDORA;WITH_INGAME_WARNING;USE_SDL;ROM_PATH_PREFIX=\"./\";DATA_PREFIX=\"./data/\";SAVE_PREFIX=\"./saves/\";GCCCONSTFUNC="__attribute__((const))";%(ClCompile.PreprocessorDefinitions) - -march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard -pipe -fsingle-precision-constant %(AdditionalOptions) + -march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard -pipe %(AdditionalOptions) -Wl,-gc-sections,-rpath,/usr/local/lib;%(Link.AdditionalLinkerInputs) @@ -78,7 +78,7 @@ GNUPP14 ../../src;../../src/include;../../src/osdep;../../src/threaddep;=/opt/vc/include;=/opt/vc/include/interface/vmcs_host/linux;=/opt/vc/include/interface/vcos/pthreads;=/usr/local/include/SDL2;=/usr/include/libxml2;%(ClCompile.AdditionalIncludeDirectories) NDEBUG=1;RELEASE=1;_REENTRANT;RASPBERRY;CAPSLOCK_DEBIAN_WORKAROUND;ARMV6T2;PICASSO96;USE_ARMNEON;CPU_arm;ARMV6_ASSEMBLY;PANDORA;WITH_INGAME_WARNING;USE_SDL;ROM_PATH_PREFIX=\"./\";DATA_PREFIX=\"./data/\";SAVE_PREFIX=\"./saves/\";GCCCONSTFUNC="__attribute__((const))";%(ClCompile.PreprocessorDefinitions) - -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -pipe -fsingle-precision-constant -fweb %(AdditionalOptions) + -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -pipe -fweb %(AdditionalOptions) true true @@ -96,7 +96,7 @@ GNUPP14 ../../src;../../src/include;../../src/osdep;../../src/threaddep;=/opt/vc/include;=/opt/vc/include/interface/vmcs_host/linux;=/opt/vc/include/interface/vcos/pthreads;=/usr/local/include/SDL2;=/usr/include/libxml2;%(ClCompile.AdditionalIncludeDirectories) NDEBUG=1;RELEASE=1;_REENTRANT;RASPBERRY;CAPSLOCK_DEBIAN_WORKAROUND;PICASSO96;CPU_arm;ARMV6_ASSEMBLY;PANDORA;WITH_INGAME_WARNING;USE_SDL;ROM_PATH_PREFIX=\"./\";DATA_PREFIX=\"./data/\";SAVE_PREFIX=\"./saves/\";GCCCONSTFUNC="__attribute__((const))";%(ClCompile.PreprocessorDefinitions) - -march=armv6zk -mfpu=vfp -mfloat-abi=hard -pipe -fsingle-precision-constant -fweb %(AdditionalOptions) + -march=armv6zk -mfpu=vfp -mfloat-abi=hard -pipe -fweb %(AdditionalOptions) true true diff --git a/src/akiko.cpp b/src/akiko.cpp index 79c080c2..51055b0d 100644 --- a/src/akiko.cpp +++ b/src/akiko.cpp @@ -35,13 +35,13 @@ // 43 48 49 4E 4F 4E 20 20 4F 2D 36 35 38 2D 32 20 32 34 #define FIRMWAREVERSION "CHINON O-658-2 24" -static void irq (void) +static void irq(void) { #if AKIKO_DEBUG_IO > 1 - write_log (_T("Akiko Interrupt\n")); + write_log(_T("Akiko Interrupt\n")); #endif if (!(intreq & 8)) { - INTREQ_0 (0x8000 | 0x0008); + INTREQ_0(0x8000 | 0x0008); } } @@ -58,7 +58,7 @@ static void irq (void) * unnecessarily complex and not 100% correct.. */ -enum i2c { I2C_WAIT, I2C_START, I2C_DEVICEADDR, I2C_WORDADDR, I2C_DATA }; +enum i2c { I2C_WAIT, I2C_START, I2C_DEVICEADDR, I2C_WORDADDR, I2C_DATA }; /* size of EEPROM, don't try to change, * (hardcoded in Kickstart) @@ -76,37 +76,37 @@ static int scl_out, scl_in, scl_dir, oscl, sda_out, sda_in, sda_dir, osda; static int sda_dir_nvram; static int state = I2C_WAIT; -static void nvram_write (int offset, int len) +static void nvram_write(int offset, int len) { struct zfile *f; if (!currprefs.cs_cd32nvram) return; - f = zfile_fopen (currprefs.flashfile, _T("rb+"), ZFD_NORMAL); + f = zfile_fopen(currprefs.flashfile, _T("rb+"), ZFD_NORMAL); if (!f) { - f = zfile_fopen (currprefs.flashfile, _T("wb"), 0); + f = zfile_fopen(currprefs.flashfile, _T("wb"), 0); if (!f) return; - zfile_fwrite (cd32_nvram, NVRAM_SIZE, 1, f); + zfile_fwrite(cd32_nvram, NVRAM_SIZE, 1, f); } - zfile_fseek (f, offset, SEEK_SET); - zfile_fwrite (cd32_nvram + offset, len, 1, f); - zfile_fclose (f); + zfile_fseek(f, offset, SEEK_SET); + zfile_fwrite(cd32_nvram + offset, len, 1, f); + zfile_fclose(f); } -static void nvram_read (void) +static void nvram_read(void) { struct zfile *f; if (!currprefs.cs_cd32nvram) return; - f = zfile_fopen (currprefs.flashfile, _T("rb"), ZFD_NORMAL); - memset (cd32_nvram, 0, NVRAM_SIZE); + f = zfile_fopen(currprefs.flashfile, _T("rb"), ZFD_NORMAL); + memset(cd32_nvram, 0, NVRAM_SIZE); if (!f) return; - zfile_fread (cd32_nvram, NVRAM_SIZE, 1, f); - zfile_fclose (f); + zfile_fread(cd32_nvram, NVRAM_SIZE, 1, f); + zfile_fclose(f); } -static void i2c_do (void) +static void i2c_do(void) { #if AKIKO_DEBUG_NVRAM int i; @@ -118,25 +118,26 @@ static void i2c_do (void) bitcounter = 0; direction = -1; #if AKIKO_DEBUG_NVRAM - write_log (_T("START\n")); + write_log(_T("START\n")); #endif return; - } else if(sda_out && !osda) { /* STOP-condition? */ + } + else if (sda_out && !osda) { /* STOP-condition? */ state = I2C_WAIT; bitcounter = -1; #if AKIKO_DEBUG_NVRAM - write_log (_T("STOP\n")); + write_log(_T("STOP\n")); #endif if (direction > 0) { - memcpy (cd32_nvram + (nvram_address & ~(NVRAM_PAGE_SIZE - 1)), nvram_writetmp, NVRAM_PAGE_SIZE); - nvram_write (nvram_address & ~(NVRAM_PAGE_SIZE - 1), NVRAM_PAGE_SIZE); + memcpy(cd32_nvram + (nvram_address & ~(NVRAM_PAGE_SIZE - 1)), nvram_writetmp, NVRAM_PAGE_SIZE); + nvram_write(nvram_address & ~(NVRAM_PAGE_SIZE - 1), NVRAM_PAGE_SIZE); direction = -1; - gui_flicker_led (LED_MD, 0, 2); + gui_flicker_led(LED_MD, 1); #if AKIKO_DEBUG_NVRAM - write_log (_T("NVRAM write address %04X:"), nvram_address & ~(NVRAM_PAGE_SIZE - 1)); + write_log(_T("NVRAM write address %04X:"), nvram_address & ~(NVRAM_PAGE_SIZE - 1)); for (i = 0; i < NVRAM_PAGE_SIZE; i++) - write_log (_T("%02X"), nvram_writetmp[i]); - write_log (_T("\n")); + write_log(_T("%02X"), nvram_writetmp[i]); + write_log(_T("\n")); #endif } @@ -149,24 +150,27 @@ static void i2c_do (void) if (scl_out && !oscl) { if (bitcounter == 8) { #if AKIKO_DEBUG_NVRAM - write_log (_T("RB %02X "), nvram_byte, M68K_GETPC); + write_log(_T("RB %02X "), nvram_byte, M68K_GETPC); #endif sda_in = 0; /* ACK */ if (direction > 0) { nvram_writetmp[nvram_writeaddr++] = nvram_byte; nvram_writeaddr &= 15; bitcounter = 0; - } else { + } + else { bitcounter = -1; } - } else { + } + else { //write_log (_T("NVRAM received bit %d, offset %d\n"), sda_out, bitcounter); nvram_byte <<= 1; nvram_byte |= sda_out; bitcounter++; } } - } else { + } + else { /* NVRAM -> Amiga */ if (scl_out && !oscl && bitcounter < 8) { if (bitcounter == 0) @@ -178,14 +182,14 @@ static void i2c_do (void) bitcounter++; if (bitcounter == 8) { #if AKIKO_DEBUG_NVRAM - write_log (_T("NVRAM sent byte %02X address %04X PC=%08X\n"), cd32_nvram[nvram_address], nvram_address, M68K_GETPC); + write_log(_T("NVRAM sent byte %02X address %04X PC=%08X\n"), cd32_nvram[nvram_address], nvram_address, M68K_GETPC); #endif nvram_address++; nvram_address &= NVRAM_SIZE - 1; sda_dir_nvram = 0; } } - if(!sda_out && sda_dir && !scl_out) /* ACK from Amiga */ + if (!sda_out && sda_dir && !scl_out) /* ACK from Amiga */ bitcounter = 0; } if (bitcounter >= 0) return; @@ -194,7 +198,7 @@ static void i2c_do (void) { case I2C_DEVICEADDR: if ((nvram_byte & 0xf0) != 0xa0) { - write_log (_T("WARNING: I2C_DEVICEADDR: device address != 0xA0\n")); + write_log(_T("WARNING: I2C_DEVICEADDR: device address != 0xA0\n")); state = I2C_WAIT; return; } @@ -205,26 +209,27 @@ static void i2c_do (void) nvram_address |= ((nvram_byte >> 1) & 3) << 8; state = I2C_WORDADDR; direction = -1; - } else { + } + else { state = I2C_DATA; direction = 0; sda_dir_nvram = 1; } bitcounter = 0; #if AKIKO_DEBUG_NVRAM - write_log (_T("I2C_DEVICEADDR: rw %d, address %02Xxx PC=%08X\n"), nvram_rw, nvram_address >> 8, M68K_GETPC); + write_log(_T("I2C_DEVICEADDR: rw %d, address %02Xxx PC=%08X\n"), nvram_rw, nvram_address >> 8, M68K_GETPC); #endif break; case I2C_WORDADDR: nvram_address &= 0x300; nvram_address |= nvram_byte; #if AKIKO_DEBUG_NVRAM - write_log (_T("I2C_WORDADDR: address %04X PC=%08X\n"), nvram_address, M68K_GETPC); + write_log(_T("I2C_WORDADDR: address %04X PC=%08X\n"), nvram_address, M68K_GETPC); #endif if (direction < 0) { - memcpy (nvram_writetmp, cd32_nvram + (nvram_address & ~(NVRAM_PAGE_SIZE - 1)), NVRAM_PAGE_SIZE); + memcpy(nvram_writetmp, cd32_nvram + (nvram_address & ~(NVRAM_PAGE_SIZE - 1)), NVRAM_PAGE_SIZE); nvram_writeaddr = nvram_address & (NVRAM_PAGE_SIZE - 1); - gui_flicker_led (LED_MD, 0, 1); + gui_flicker_led(LED_MD, 1); } state = I2C_DATA; bitcounter = 0; @@ -233,7 +238,7 @@ static void i2c_do (void) } } -static void akiko_nvram_write (int offset, uae_u32 v) +static void akiko_nvram_write(int offset, uae_u32 v) { int sda; switch (offset) @@ -253,13 +258,13 @@ static void akiko_nvram_write (int offset, uae_u32 v) } sda = sda_out; if (oscl != scl_out || osda != sda) { - i2c_do (); + i2c_do(); oscl = scl_out; osda = sda; } } -static uae_u32 akiko_nvram_read (int offset) +static uae_u32 akiko_nvram_read(int offset) { uae_u32 v = 0; switch (offset) @@ -292,7 +297,7 @@ static int akiko_read_offset, akiko_write_offset; static uae_u32 akiko_result[8]; #if 0 -static void akiko_c2p_do (void) +static void akiko_c2p_do(void) { int i; @@ -308,63 +313,63 @@ static void akiko_c2p_do (void) /* Optimised Chunky-to-Planar algorithm by Mequa */ static uae_u32 akiko_precalc_shift[32]; static uae_u32 akiko_precalc_bytenum[32][8]; -static void akiko_precalculate (void) +static void akiko_precalculate(void) { uae_u32 i, j; for (i = 0; i < 32; i++) { - akiko_precalc_shift [(int)i] = 1 << i; + akiko_precalc_shift[(int)i] = 1 << i; for (j = 0; j < 8; j++) { akiko_precalc_bytenum[(int)i][(int)j] = (i >> 3) + ((7 - j) << 2); } } } -static void akiko_c2p_do (void) +static void akiko_c2p_do(void) { int i; for (i = 0; i < 8; i++) { - akiko_result[i] = (((akiko_buffer[0] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][0]) ) - | (((akiko_buffer[1] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][1]) ) - | (((akiko_buffer[2] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][2]) ) - | (((akiko_buffer[3] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][3]) ) - | (((akiko_buffer[4] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][4]) ) - | (((akiko_buffer[5] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][5]) ) - | (((akiko_buffer[6] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][6]) ) - | (((akiko_buffer[7] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][7]) ) - | (((akiko_buffer[0] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][0]) ) - | (((akiko_buffer[1] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][1]) ) - | (((akiko_buffer[2] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][2]) ) - | (((akiko_buffer[3] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][3]) ) - | (((akiko_buffer[4] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][4]) ) - | (((akiko_buffer[5] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][5]) ) - | (((akiko_buffer[6] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][6]) ) - | (((akiko_buffer[7] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][7]) ) - | (((akiko_buffer[0] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][0])) - | (((akiko_buffer[1] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][1])) - | (((akiko_buffer[2] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][2])) - | (((akiko_buffer[3] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][3])) - | (((akiko_buffer[4] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][4])) - | (((akiko_buffer[5] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][5])) - | (((akiko_buffer[6] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][6])) - | (((akiko_buffer[7] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][7])) - | (((akiko_buffer[0] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][0])) - | (((akiko_buffer[1] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][1])) - | (((akiko_buffer[2] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][2])) - | (((akiko_buffer[3] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][3])) - | (((akiko_buffer[4] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][4])) - | (((akiko_buffer[5] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][5])) - | (((akiko_buffer[6] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][6])) - | (((akiko_buffer[7] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][7])); + akiko_result[i] = (((akiko_buffer[0] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][0])) + | (((akiko_buffer[1] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][1])) + | (((akiko_buffer[2] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][2])) + | (((akiko_buffer[3] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][3])) + | (((akiko_buffer[4] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][4])) + | (((akiko_buffer[5] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][5])) + | (((akiko_buffer[6] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][6])) + | (((akiko_buffer[7] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][7])) + | (((akiko_buffer[0] & akiko_precalc_shift[i + 8]) != 0) << (akiko_precalc_bytenum[i + 8][0])) + | (((akiko_buffer[1] & akiko_precalc_shift[i + 8]) != 0) << (akiko_precalc_bytenum[i + 8][1])) + | (((akiko_buffer[2] & akiko_precalc_shift[i + 8]) != 0) << (akiko_precalc_bytenum[i + 8][2])) + | (((akiko_buffer[3] & akiko_precalc_shift[i + 8]) != 0) << (akiko_precalc_bytenum[i + 8][3])) + | (((akiko_buffer[4] & akiko_precalc_shift[i + 8]) != 0) << (akiko_precalc_bytenum[i + 8][4])) + | (((akiko_buffer[5] & akiko_precalc_shift[i + 8]) != 0) << (akiko_precalc_bytenum[i + 8][5])) + | (((akiko_buffer[6] & akiko_precalc_shift[i + 8]) != 0) << (akiko_precalc_bytenum[i + 8][6])) + | (((akiko_buffer[7] & akiko_precalc_shift[i + 8]) != 0) << (akiko_precalc_bytenum[i + 8][7])) + | (((akiko_buffer[0] & akiko_precalc_shift[i + 16]) != 0) << (akiko_precalc_bytenum[i + 16][0])) + | (((akiko_buffer[1] & akiko_precalc_shift[i + 16]) != 0) << (akiko_precalc_bytenum[i + 16][1])) + | (((akiko_buffer[2] & akiko_precalc_shift[i + 16]) != 0) << (akiko_precalc_bytenum[i + 16][2])) + | (((akiko_buffer[3] & akiko_precalc_shift[i + 16]) != 0) << (akiko_precalc_bytenum[i + 16][3])) + | (((akiko_buffer[4] & akiko_precalc_shift[i + 16]) != 0) << (akiko_precalc_bytenum[i + 16][4])) + | (((akiko_buffer[5] & akiko_precalc_shift[i + 16]) != 0) << (akiko_precalc_bytenum[i + 16][5])) + | (((akiko_buffer[6] & akiko_precalc_shift[i + 16]) != 0) << (akiko_precalc_bytenum[i + 16][6])) + | (((akiko_buffer[7] & akiko_precalc_shift[i + 16]) != 0) << (akiko_precalc_bytenum[i + 16][7])) + | (((akiko_buffer[0] & akiko_precalc_shift[i + 24]) != 0) << (akiko_precalc_bytenum[i + 24][0])) + | (((akiko_buffer[1] & akiko_precalc_shift[i + 24]) != 0) << (akiko_precalc_bytenum[i + 24][1])) + | (((akiko_buffer[2] & akiko_precalc_shift[i + 24]) != 0) << (akiko_precalc_bytenum[i + 24][2])) + | (((akiko_buffer[3] & akiko_precalc_shift[i + 24]) != 0) << (akiko_precalc_bytenum[i + 24][3])) + | (((akiko_buffer[4] & akiko_precalc_shift[i + 24]) != 0) << (akiko_precalc_bytenum[i + 24][4])) + | (((akiko_buffer[5] & akiko_precalc_shift[i + 24]) != 0) << (akiko_precalc_bytenum[i + 24][5])) + | (((akiko_buffer[6] & akiko_precalc_shift[i + 24]) != 0) << (akiko_precalc_bytenum[i + 24][6])) + | (((akiko_buffer[7] & akiko_precalc_shift[i + 24]) != 0) << (akiko_precalc_bytenum[i + 24][7])); } } #endif -static void akiko_c2p_write (int offset, uae_u32 v) +static void akiko_c2p_write(int offset, uae_u32 v) { if (offset == 3) akiko_buffer[akiko_write_offset] = 0; - akiko_buffer[akiko_write_offset] |= v << ( 8 * (3 - offset)); + akiko_buffer[akiko_write_offset] |= v << (8 * (3 - offset)); if (offset == 0) { akiko_write_offset++; akiko_write_offset &= 7; @@ -372,12 +377,12 @@ static void akiko_c2p_write (int offset, uae_u32 v) akiko_read_offset = 0; } -static uae_u32 akiko_c2p_read (int offset) +static uae_u32 akiko_c2p_read(int offset) { uae_u32 v; if (akiko_read_offset == 0 && offset == 3) - akiko_c2p_do (); + akiko_c2p_do(); akiko_write_offset = 0; v = akiko_result[akiko_read_offset]; if (offset == 0) { @@ -484,74 +489,74 @@ static smp_comm_pipe requests; static volatile int akiko_thread_running; static uae_sem_t akiko_sem, sub_sem; -static void checkint (void) +static void checkint(void) { if (cdrom_intreq & cdrom_intena) - irq (); + irq(); } -static void set_status (uae_u32 status) +static void set_status(uae_u32 status) { #if AKIKO_DEBUG_IO if (!(cdrom_intreq & status)) - write_log (_T("Akiko INTREQ %08x (%08x)\n"), status, cdrom_intreq | status); + write_log(_T("Akiko INTREQ %08x (%08x)\n"), status, cdrom_intreq | status); #endif cdrom_intreq |= status; - checkint (); + checkint(); cdrom_led ^= LED_CD_ACTIVE2; } -void rethink_akiko (void) +void rethink_akiko(void) { - checkint (); + checkint(); } -static void cdaudiostop_do (void) +static void cdaudiostop_do(void) { qcode_valid = 0; if (unitnum < 0) return; - sys_command_cd_pause (unitnum, 0); - sys_command_cd_stop (unitnum); + sys_command_cd_pause(unitnum, 0); + sys_command_cd_stop(unitnum); } -static void cdaudiostop (void) +static void cdaudiostop(void) { cdrom_audiostatus = 0; cdrom_audiotimeout = 0; cdrom_paused = 0; cdrom_playing = 0; - write_comm_pipe_u32 (&requests, 0x0104, 1); + write_comm_pipe_u32(&requests, 0x0104, 1); } -static void subfunc (uae_u8 *data, int cnt) +static void subfunc(uae_u8 *data, int cnt) { if (!(cdrom_flags & CDFLAG_SUBCODE)) return; - uae_sem_wait (&sub_sem); + uae_sem_wait(&sub_sem); #if 0 int total = 0; for (int i = 0; i < MAX_SUBCODEBUFFER; i++) { if (subcodebufferinuse[i]) total++; } - write_log (_T("%d "), total); + write_log(_T("%d "), total); #endif if (subcodebufferinuse[subcodebufferoffsetw]) { - memset (subcodebufferinuse, 0,sizeof (subcodebufferinuse)); + memset(subcodebufferinuse, 0, sizeof(subcodebufferinuse)); subcodebufferoffsetw = subcodebufferoffset = 0; - uae_sem_post (&sub_sem); + uae_sem_post(&sub_sem); //write_log (_T("CD32: subcode buffer overflow 1\n")); return; } int offset = subcodebufferoffsetw; while (cnt > 0) { if (subcodebufferinuse[offset]) { - write_log (_T("CD32: subcode buffer overflow 2\n")); + write_log(_T("CD32: subcode buffer overflow 2\n")); break; } subcodebufferinuse[offset] = 1; - memcpy (&subcodebuffer[offset * SUB_CHANNEL_SIZE], data, SUB_CHANNEL_SIZE); + memcpy(&subcodebuffer[offset * SUB_CHANNEL_SIZE], data, SUB_CHANNEL_SIZE); data += SUB_CHANNEL_SIZE; offset++; if (offset >= MAX_SUBCODEBUFFER) @@ -559,10 +564,10 @@ static void subfunc (uae_u8 *data, int cnt) cnt--; } subcodebufferoffsetw = offset; - uae_sem_post (&sub_sem); + uae_sem_post(&sub_sem); } -static int statusfunc (int status) +static int statusfunc(int status) { if (status == -1) return 0; @@ -583,19 +588,19 @@ static int statusfunc (int status) return 0; } -static void cdaudioplay_do (void) +static void cdaudioplay_do(void) { - uae_u32 startlsn = read_comm_pipe_u32_blocking (&requests); - uae_u32 endlsn = read_comm_pipe_u32_blocking (&requests); - uae_u32 scan = read_comm_pipe_u32_blocking (&requests); + uae_u32 startlsn = read_comm_pipe_u32_blocking(&requests); + uae_u32 endlsn = read_comm_pipe_u32_blocking(&requests); + uae_u32 scan = read_comm_pipe_u32_blocking(&requests); qcode_valid = 0; if (unitnum < 0) return; - sys_command_cd_pause (unitnum, 0); - sys_command_cd_play (unitnum, startlsn, endlsn, scan, statusfunc, subfunc); + sys_command_cd_pause(unitnum, 0); + sys_command_cd_play(unitnum, startlsn, endlsn, scan, statusfunc, subfunc); } -static bool isaudiotrack (int startlsn) +static bool isaudiotrack(int startlsn) { struct cd_toc *s = NULL; uae_u32 addr; @@ -611,13 +616,13 @@ static bool isaudiotrack (int startlsn) s++; } if (s && (s->control & 0x0c) == 0x04) { - write_log (_T("tried to play data track %d!\n"), s->track); + write_log(_T("tried to play data track %d!\n"), s->track); return false; } return true; } -static struct cd_toc *get_track (int startlsn) +static struct cd_toc *get_track(int startlsn) { for (int i = cdrom_toc_cd_buffer.first_track_offset + 1; i <= cdrom_toc_cd_buffer.last_track_offset; i++) { struct cd_toc *s = &cdrom_toc_cd_buffer.toc[i]; @@ -629,17 +634,17 @@ static struct cd_toc *get_track (int startlsn) } static int last_play_end; -static int cd_play_audio (int startlsn, int endlsn, int scan) +static int cd_play_audio(int startlsn, int endlsn, int scan) { struct cd_toc *s = NULL; if (!cdrom_toc_cd_buffer.points) return 0; - s = get_track (startlsn); + s = get_track(startlsn); if (s && (s->control & 0x0c) == 0x04) { - s = get_track (startlsn + 150); + s = get_track(startlsn + 150); if (s && (s->control & 0x0c) == 0x04) { - write_log (_T("tried to play data track %d!\n"), s->track); + write_log(_T("tried to play data track %d!\n"), s->track); s++; startlsn = s->paddress; s++; @@ -651,22 +656,22 @@ static int cd_play_audio (int startlsn, int endlsn, int scan) last_play_end = endlsn; cdrom_audiotimeout = 10; cdrom_paused = 0; - write_comm_pipe_u32 (&requests, 0x0110, 0); - write_comm_pipe_u32 (&requests, startlsn, 0); - write_comm_pipe_u32 (&requests, endlsn, 0); - write_comm_pipe_u32 (&requests, scan, 1); + write_comm_pipe_u32(&requests, 0x0110, 0); + write_comm_pipe_u32(&requests, startlsn, 0); + write_comm_pipe_u32(&requests, endlsn, 0); + write_comm_pipe_u32(&requests, scan, 1); return 1; } /* read qcode */ static int last_play_pos; -static int cd_qcode (uae_u8 *d) +static int cd_qcode(uae_u8 *d) { uae_u8 *buf, *s, as; if (d) - memset (d, 0, 11); + memset(d, 0, 11); last_play_pos = 0; buf = qcode_buf; as = buf[1]; @@ -676,7 +681,7 @@ static int cd_qcode (uae_u8 *d) if (cdrom_audiostatus != AUDIO_STATUS_IN_PROGRESS && cdrom_audiostatus != AUDIO_STATUS_PAUSED) return 0; s = buf + 4; - last_play_pos = msf2lsn (fromlongbcd (s + 7)); + last_play_pos = msf2lsn(fromlongbcd(s + 7)); if (!d) return 0; buf[2] = 0; @@ -701,10 +706,10 @@ static int cd_qcode (uae_u8 *d) /* Make sure end of disc position is not missed. */ if (last_play_pos >= cdrom_toc_cd_buffer.lastaddress || cdrom_toc_cd_buffer.lastaddress - last_play_pos < 10) { - int msf = lsn2msf (cdrom_toc_cd_buffer.lastaddress); - d[8] = tobcd ((uae_u8)(msf >> 16)); - d[9] = tobcd ((uae_u8)(msf >> 8)); - d[10] = tobcd ((uae_u8)(msf >> 0)); + int msf = lsn2msf(cdrom_toc_cd_buffer.lastaddress); + d[8] = tobcd((uae_u8)(msf >> 16)); + d[9] = tobcd((uae_u8)(msf >> 8)); + d[10] = tobcd((uae_u8)(msf >> 0)); } } // write_log (_T("%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X\n"), @@ -713,34 +718,34 @@ static int cd_qcode (uae_u8 *d) } /* read toc */ -static int get_cdrom_toc (void) +static int get_cdrom_toc(void) { int j; int datatrack = 0, secondtrack = 0; cdrom_toc_counter = -1; - if (!sys_command_cd_toc (unitnum, &cdrom_toc_cd_buffer)) + if (!sys_command_cd_toc(unitnum, &cdrom_toc_cd_buffer)) return 1; - memset (cdrom_toc_buffer, 0, MAX_TOC_ENTRIES * 13); + memset(cdrom_toc_buffer, 0, MAX_TOC_ENTRIES * 13); cdrom_data_end = -1; for (j = 0; j < cdrom_toc_cd_buffer.points; j++) { struct cd_toc *s = &cdrom_toc_cd_buffer.toc[j]; uae_u8 *d = &cdrom_toc_buffer[j * 13]; int addr = s->paddress; - int msf = lsn2msf (addr); + int msf = lsn2msf(addr); if (s->point == 0xa0 || s->point == 0xa1) msf = s->track << 16; d[1] = (s->adr << 0) | (s->control << 4); - d[3] = s->point < 100 ? tobcd (s->point) : s->point; - d[8] = tobcd ((msf >> 16) & 0xff); - d[9] = tobcd ((msf >> 8) & 0xff); - d[10] = tobcd ((msf >> 0) & 0xff); + d[3] = s->point < 100 ? tobcd(s->point) : s->point; + d[8] = tobcd((msf >> 16) & 0xff); + d[9] = tobcd((msf >> 8) & 0xff); + d[10] = tobcd((msf >> 0) & 0xff); if (s->point == 1 && (s->control & 0x0c) == 0x04) datatrack = 1; if (s->point == 2) secondtrack = addr; } - cdrom_toc_crc = get_crc32 (cdrom_toc_buffer, cdrom_toc_cd_buffer.points * 13); + cdrom_toc_crc = get_crc32(cdrom_toc_buffer, cdrom_toc_cd_buffer.points * 13); if (datatrack) { if (secondtrack) cdrom_data_end = secondtrack; @@ -751,31 +756,31 @@ static int get_cdrom_toc (void) } /* open device */ -static int sys_cddev_open (void) +static int sys_cddev_open(void) { struct device_info di; - unitnum = get_standard_cd_unit (CD_STANDARD_UNIT_CD32); - sys_command_info (unitnum, &di, 0); - write_log (_T("using drive %s (unit %d, media %d)\n"), di.label, unitnum, di.media_inserted); + unitnum = get_standard_cd_unit(CD_STANDARD_UNIT_CD32); + sys_command_info(unitnum, &di, 0); + write_log(_T("using drive %s (unit %d, media %d)\n"), di.label, unitnum, di.media_inserted); /* make sure CD audio is not playing */ - cdaudiostop_do (); + cdaudiostop_do(); return 0; } /* close device */ -static void sys_cddev_close (void) +static void sys_cddev_close(void) { if (unitnum >= 0) { - cdaudiostop_do (); - sys_command_close (unitnum); + cdaudiostop_do(); + sys_command_close(unitnum); } unitnum = -1; } -static int command_lengths[] = { 1,2,1,1,12,2,1,1,4,1,2,-1,-1,-1,-1,-1 }; +static int command_lengths[] = { 1, 2, 1, 1, 12, 2, 1, 1, 4, 1, 2, -1, -1, -1, -1, -1 }; -static int cdrom_start_return_data (int len) +static int cdrom_start_return_data(int len) { if (cdrom_receive_length > 0) return 0; @@ -794,7 +799,7 @@ static int cdrom_start_return_data (int len) more data available) when cdcomrxinx matches cdcomrxcmp */ -static void cdrom_return_data (void) +static void cdrom_return_data(void) { uae_u32 cmd_buf = cdrx_address; int i; @@ -808,36 +813,37 @@ static void cdrom_return_data (void) return; #if AKIKO_DEBUG_IO - write_log (_T("OUT IDX=0x%02X-0x%02X LEN=%d,%08x:"), cdcomrxinx, cdcomrxcmp, cdrom_receive_length, cmd_buf); + write_log(_T("OUT IDX=0x%02X-0x%02X LEN=%d,%08x:"), cdcomrxinx, cdcomrxcmp, cdrom_receive_length, cmd_buf); #endif if (cdrom_receive_offset < 0) { - checksum = 0xff; + checksum = 0xff; for (i = 0; i < cdrom_receive_length; i++) { - checksum -= cdrom_result_buffer[i]; + checksum -= cdrom_result_buffer[i]; #if AKIKO_DEBUG_IO - write_log (_T("%02X "), cdrom_result_buffer[i]); + write_log(_T("%02X "), cdrom_result_buffer[i]); #endif - } + } #if AKIKO_DEBUG_IO - write_log (_T("(%02X)\n"), checksum); + write_log(_T("(%02X)\n"), checksum); #endif cdrom_result_buffer[cdrom_receive_length++] = checksum; cdrom_receive_offset = 0; - } else { + } + else { #if AKIKO_DEBUG_IO - write_log (_T("\n")); + write_log(_T("\n")); #endif } while (cdrom_receive_offset < cdrom_receive_length && cdcomrxinx != cdcomrxcmp) { - put_byte (cmd_buf + cdcomrxinx, cdrom_result_buffer[cdrom_receive_offset]); + put_byte(cmd_buf + cdcomrxinx, cdrom_result_buffer[cdrom_receive_offset]); cdcomrxinx++; cdrom_receive_offset++; } if (cdcomrxinx == cdcomrxcmp) { - set_status (CDINTERRUPT_RXDMADONE); + set_status(CDINTERRUPT_RXDMADONE); #if AKIKO_DEBUG_IO - write_log (_T("RXDMADONE %d/%d\n"), cdrom_receive_offset, cdrom_receive_length); + write_log(_T("RXDMADONE %d/%d\n"), cdrom_receive_offset, cdrom_receive_length); #endif } @@ -845,14 +851,14 @@ static void cdrom_return_data (void) cdrom_receive_length = 0; } -static int cdrom_command_led (void) +static int cdrom_command_led(void) { int v = cdrom_command_buffer[1]; int old = cdrom_led; cdrom_led &= ~LED_CD_ACTIVE; cdrom_led |= (v & 1) ? LED_CD_ACTIVE : 0; if (cdrom_led != old) - gui_flicker_led (LED_CD, 0, cdrom_led); + gui_flicker_led(LED_CD, cdrom_led); if (v & 0x80) { // result wanted? cdrom_result_buffer[0] = cdrom_command; cdrom_result_buffer[1] = (cdrom_led & LED_CD_ACTIVE) ? 1 : 0; @@ -861,29 +867,29 @@ static int cdrom_command_led (void) return 0; } -static int cdrom_command_idle_status (void) +static int cdrom_command_idle_status(void) { cdrom_result_buffer[0] = 0x0a; cdrom_result_buffer[1] = 0x70; return 2; } -static int cdrom_command_media_status (void) +static int cdrom_command_media_status(void) { cdrom_result_buffer[0] = 0x0a; - cdrom_result_buffer[1] = sys_command_ismedia (unitnum, 0) > 0 ? 0x83: 0x80; + cdrom_result_buffer[1] = sys_command_ismedia(unitnum, 0) > 0 ? 0x83 : 0x80; return 2; } /* check if cd drive door is open or closed, return firmware info */ -static int cdrom_command_status (void) +static int cdrom_command_status(void) { cdrom_result_buffer[1] = 0x01; //cdrom_result_buffer[1] = 0x80; door open if (unitnum >= 0) - get_cdrom_toc (); + get_cdrom_toc(); /* firmware info */ - memcpy (cdrom_result_buffer + 2, FIRMWAREVERSION, sizeof FIRMWAREVERSION); + memcpy(cdrom_result_buffer + 2, FIRMWAREVERSION, sizeof FIRMWAREVERSION); cdrom_result_buffer[0] = cdrom_command; cd_initialized = 1; return 20; @@ -891,25 +897,25 @@ static int cdrom_command_status (void) /* return one TOC entry, each TOC entry repeats 3 times */ #define TOC_REPEAT 3 -static int cdrom_return_toc_entry (void) +static int cdrom_return_toc_entry(void) { cdrom_result_buffer[0] = 6; #if AKIKO_DEBUG_IO_CMD - write_log (_T("CD32: TOC entry %d/%d\n"), cdrom_toc_counter / TOC_REPEAT, cdrom_toc_cd_buffer.points); + write_log(_T("CD32: TOC entry %d/%d\n"), cdrom_toc_counter / TOC_REPEAT, cdrom_toc_cd_buffer.points); #endif if (cdrom_toc_cd_buffer.points == 0) { cdrom_result_buffer[1] = CDS_ERROR; return 15; } cdrom_result_buffer[1] = 0; - memcpy (cdrom_result_buffer + 2, cdrom_toc_buffer + (cdrom_toc_counter / TOC_REPEAT) * 13, 13); + memcpy(cdrom_result_buffer + 2, cdrom_toc_buffer + (cdrom_toc_counter / TOC_REPEAT) * 13, 13); cdrom_toc_counter++; if (cdrom_toc_counter / TOC_REPEAT >= cdrom_toc_cd_buffer.points) cdrom_toc_counter = -1; return 15; } -static int checkerr (void) +static int checkerr(void) { if (!cdrom_disk) { cdrom_result_buffer[1] = CH_ERR_NODISK; @@ -918,27 +924,27 @@ static int checkerr (void) return 0; } -static int cdrom_command_stop (void) +static int cdrom_command_stop(void) { cdrom_audiotimeout = 0; cdrom_result_buffer[0] = cdrom_command; - if (checkerr ()) + if (checkerr()) return 2; cdrom_result_buffer[1] = 0; - cdaudiostop (); + cdaudiostop(); return 2; } /* pause CD audio */ -static int cdrom_command_pause (void) +static int cdrom_command_pause(void) { #if AKIKO_DEBUG_IO_CMD - write_log (_T("CD32: pause: %d, %d\n"), cdrom_paused, cdrom_playing); + write_log(_T("CD32: pause: %d, %d\n"), cdrom_paused, cdrom_playing); #endif cdrom_audiotimeout = 0; cdrom_toc_counter = -1; cdrom_result_buffer[0] = cdrom_command; - if (checkerr ()) + if (checkerr()) return 2; cdrom_result_buffer[1] = cdrom_playing ? CDS_PLAYING : 0; if (cdrom_paused) @@ -946,18 +952,18 @@ static int cdrom_command_pause (void) cdrom_paused = 1; if (!cdrom_playing) return 2; - write_comm_pipe_u32 (&requests, 0x0102, 1); + write_comm_pipe_u32(&requests, 0x0102, 1); return 2; } /* unpause CD audio */ -static int cdrom_command_unpause (void) +static int cdrom_command_unpause(void) { #if AKIKO_DEBUG_IO_CMD - write_log (_T("CD32: unpause: %d, %d\n"), cdrom_paused, cdrom_playing); + write_log(_T("CD32: unpause: %d, %d\n"), cdrom_paused, cdrom_playing); #endif cdrom_result_buffer[0] = cdrom_command; - if (checkerr ()) + if (checkerr()) return 2; cdrom_result_buffer[1] = cdrom_playing ? CDS_PLAYING : 0; if (!cdrom_paused) @@ -965,18 +971,18 @@ static int cdrom_command_unpause (void) cdrom_paused = 0; if (!cdrom_playing) return 2; - write_comm_pipe_u32 (&requests, 0x0103, 1); + write_comm_pipe_u32(&requests, 0x0103, 1); return 2; } /* seek head/play CD audio/read data sectors */ -static int cdrom_command_multi (void) +static int cdrom_command_multi(void) { - int seekpos = msf2lsn (fromlongbcd (cdrom_command_buffer + 1)); - int endpos = msf2lsn (fromlongbcd (cdrom_command_buffer + 4)); + int seekpos = msf2lsn(fromlongbcd(cdrom_command_buffer + 1)); + int endpos = msf2lsn(fromlongbcd(cdrom_command_buffer + 4)); if (cdrom_playing) - cdaudiostop (); + cdaudiostop(); cdrom_speed = (cdrom_command_buffer[8] & 0x40) ? 2 : 1; cdrom_result_buffer[0] = cdrom_command; cdrom_result_buffer[1] = 0; @@ -990,39 +996,51 @@ static int cdrom_command_multi (void) int cdrom_data_offset_end = endpos; #endif cdrom_data_offset = seekpos; - cdrom_seek_delay = abs (cdrom_current_sector - cdrom_data_offset); + cdrom_seek_delay = abs(cdrom_current_sector - cdrom_data_offset); if (cdrom_seek_delay < 100) { cdrom_seek_delay = 1; - } else { + } + else { cdrom_seek_delay /= 1000; cdrom_seek_delay += 10; if (cdrom_seek_delay > 100) cdrom_seek_delay = 100; } #if AKIKO_DEBUG_IO_CMD - write_log (_T("READ DATA %06X (%d) - %06X (%d) SPD=%dx PC=%08X\n"), - seekpos, cdrom_data_offset, endpos, cdrom_data_offset_end, cdrom_speed, M68K_GETPC); + write_log(_T("READ DATA %06X (%d) - %06X (%d) SPD=%dx PC=%08X\n"), + seekpos, + cdrom_data_offset, + endpos, + cdrom_data_offset_end, + cdrom_speed, + M68K_GETPC); #endif cdrom_result_buffer[1] |= 0x02; - } else if (cdrom_command_buffer[10] & 4) { /* play audio */ + } + else if (cdrom_command_buffer[10] & 4) { /* play audio */ #if AKIKO_DEBUG_IO_CMD int scan = 0; if (cdrom_command_buffer[7] & 0x04) scan = 1; else if (cdrom_command_buffer[7] & 0x08) scan = -1; - write_log (_T("PLAY FROM %06X (%d) to %06X (%d) SCAN=%d\n"), - seekpos, msf2lsn (seekpos), endpos, msf2lsn (endpos), scan); + write_log(_T("PLAY FROM %06X (%d) to %06X (%d) SCAN=%d\n"), + seekpos, + msf2lsn(seekpos), + endpos, + msf2lsn(endpos), + scan); #endif //cdrom_result_buffer[1] |= CDS_PLAYING; cdrom_playing = 1; - if (!cd_play_audio (seekpos, endpos, 0)) { + if (!cd_play_audio(seekpos, endpos, 0)) { // play didn't start, report it in next status packet cdrom_audiotimeout = -3; } - } else { + } + else { #if AKIKO_DEBUG_IO_CMD - write_log (_T("SEEKTO %06X\n"),seekpos); + write_log(_T("SEEKTO %06X\n"), seekpos); #endif if (seekpos < 150) cdrom_toc_counter = 0; @@ -1032,7 +1050,7 @@ static int cdrom_command_multi (void) return 2; } -static int cdrom_playend_notify (int status) +static int cdrom_playend_notify(int status) { cdrom_result_buffer[0] = 4; if (status < 0) @@ -1045,11 +1063,11 @@ static int cdrom_playend_notify (int status) } /* return subq entry */ -static int cdrom_command_subq (void) +static int cdrom_command_subq(void) { cdrom_result_buffer[0] = cdrom_command; cdrom_result_buffer[1] = 0; - cd_qcode (cdrom_result_buffer + 2); + cd_qcode(cdrom_result_buffer + 2); return 15; } @@ -1061,12 +1079,12 @@ static int cdrom_command_subq (void) CDINTERRUPT_TXDMADONE triggered when cdromtxinx matches cdcomtx. */ -static void cdrom_run_command (void) +static void cdrom_run_command(void) { int i, cmd_len; uae_u8 checksum; #if 0 - uae_u8 *pp = get_real_address (cdtx_address); + uae_u8 *pp = get_real_address(cdtx_address); #endif if (!(cdrom_flags & CDFLAG_TXD)) @@ -1074,15 +1092,15 @@ static void cdrom_run_command (void) if ((cdrom_flags & CDFLAG_ENABLE)) return; if (cdrom_command_active) - return; + return; if (cdrom_receive_length) - return; + return; if (cdcomtxinx == cdcomtxcmp) return; if (cdrom_tx_dma_delay > 0) return; - cdrom_command = get_byte (cdtx_address + cdcomtxinx); + cdrom_command = get_byte(cdtx_address + cdcomtxinx); if (cdrom_command == 0) { cdcomtxinx++; @@ -1095,50 +1113,50 @@ static void cdrom_run_command (void) cmd_len = command_lengths[cdrom_command & 0x0f]; if (cmd_len < 0) { #if AKIKO_DEBUG_IO_CMD - write_log (_T("unknown command %x\n"), cdrom_command & 0x0f); + write_log(_T("unknown command %x\n"), cdrom_command & 0x0f); #endif cdrom_unknown_command = 1; cdrom_command_active = 1; cdrom_command_length = 1; - set_status (CDINTERRUPT_TXDMADONE); + set_status(CDINTERRUPT_TXDMADONE); return; } #if AKIKO_DEBUG_IO_CMD - write_log (_T("IN CMD=%02X IDX=0x%02X-0x%02X LEN=%d:"), cdrom_command & 0x0f, cdcomtxinx, cdcomtxcmp, cmd_len); + write_log(_T("IN CMD=%02X IDX=0x%02X-0x%02X LEN=%d:"), cdrom_command & 0x0f, cdcomtxinx, cdcomtxcmp, cmd_len); #endif checksum = 0; for (i = 0; i < cmd_len + 1; i++) { - cdrom_command_buffer[i] = get_byte (cdtx_address + ((cdcomtxinx + i) & 0xff)); + cdrom_command_buffer[i] = get_byte(cdtx_address + ((cdcomtxinx + i) & 0xff)); checksum += cdrom_command_buffer[i]; #if AKIKO_DEBUG_IO_CMD if (i == cmd_len) - write_log (_T("(%02X) "), cdrom_command_buffer[i]); // checksum + write_log(_T("(%02X) "), cdrom_command_buffer[i]); // checksum else - write_log (_T("%02X "), cdrom_command_buffer[i]); + write_log(_T("%02X "), cdrom_command_buffer[i]); #endif } if (checksum != 0xff) { #if AKIKO_DEBUG_IO_CMD - write_log (_T(" checksum error")); + write_log(_T(" checksum error")); #endif cdrom_checksum_error = 1; //activate_debugger (); } #if AKIKO_DEBUG_IO_CMD - write_log (_T("\n")); + write_log(_T("\n")); #endif cdrom_command_active = 1; cdrom_command_length = cmd_len; - set_status (CDINTERRUPT_TXDMADONE); + set_status(CDINTERRUPT_TXDMADONE); } -static void cdrom_run_command_run (void) +static void cdrom_run_command_run(void) { int len; cdcomtxinx = cdcomtxinx + cdrom_command_length + 1; - memset (cdrom_result_buffer, 0, sizeof (cdrom_result_buffer)); + memset(cdrom_result_buffer, 0, sizeof(cdrom_result_buffer)); if (cdrom_checksum_error || cdrom_unknown_command) { cdrom_result_buffer[0] = (cdrom_command & 0xf0) | 5; @@ -1147,7 +1165,7 @@ static void cdrom_run_command_run (void) else if (cdrom_unknown_command) cdrom_result_buffer[1] |= CH_ERR_BADCOMMAND; len = 2; - cdrom_start_return_data (len); + cdrom_start_return_data(len); return; } @@ -1158,25 +1176,25 @@ static void cdrom_run_command_run (void) cdrom_result_buffer[0] = cdrom_command; break; case 1: - len = cdrom_command_stop (); + len = cdrom_command_stop(); break; case 2: - len = cdrom_command_pause (); + len = cdrom_command_pause(); break; case 3: - len = cdrom_command_unpause (); + len = cdrom_command_unpause(); break; case 4: - len = cdrom_command_multi (); + len = cdrom_command_multi(); break; case 5: - len = cdrom_command_led (); + len = cdrom_command_led(); break; case 6: - len = cdrom_command_subq (); + len = cdrom_command_subq(); break; case 7: - len = cdrom_command_status (); + len = cdrom_command_status(); break; default: len = 0; @@ -1184,11 +1202,11 @@ static void cdrom_run_command_run (void) } if (len == 0) return; - cdrom_start_return_data (len); + cdrom_start_return_data(len); } /* DMA transfer one CD sector */ -static void cdrom_run_read (void) +static void cdrom_run_read(void) { int i, sector, inc; int sec; @@ -1197,7 +1215,7 @@ static void cdrom_run_read (void) if (!(cdrom_flags & CDFLAG_ENABLE)) return; if (!cdrom_pbx) { - set_status (CDINTERRUPT_OVERFLOW); + set_status(CDINTERRUPT_OVERFLOW); return; } if (!(cdrom_flags & CDFLAG_PBX)) @@ -1219,27 +1237,35 @@ static void cdrom_run_read (void) if (sector_buffer_info_1[sec] != 0xff && sector_buffer_info_1[sec] != 0) { uae_u8 buf[2352]; - memcpy (buf, sector_buffer_1 + sec * 2352, 2352); + memcpy(buf, sector_buffer_1 + sec * 2352, 2352); buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = cdrom_sector_counter & 31; for (i = 0; i < 2352; i++) - put_byte (cdrom_addressdata + seccnt * 4096 + i, buf[i]); + put_byte(cdrom_addressdata + seccnt * 4096 + i, buf[i]); for (i = 0; i < 73 * 2; i++) - put_byte (cdrom_addressdata + seccnt * 4096 + 0xc00 + i, 0); + put_byte(cdrom_addressdata + seccnt * 4096 + 0xc00 + i, 0); cdrom_pbx &= ~(1 << seccnt); - set_status (CDINTERRUPT_PBX); - } else { + set_status(CDINTERRUPT_PBX); + } + else { inc = 0; } if (sector_buffer_info_1[sec] != 0xff) sector_buffer_info_1[sec]--; #if AKIKO_DEBUG_IO_CMD - write_log (_T("pbx=%04x sec=%d, scnt=%d -> %d. %d (%04x) %08X\n"), - cdrom_pbx, cdrom_data_offset, cdrom_sector_counter, sector, seccnt, 1 << seccnt, cdrom_addressdata + seccnt * 4096); + write_log(_T("pbx=%04x sec=%d, scnt=%d -> %d. %d (%04x) %08X\n"), + cdrom_pbx, + cdrom_data_offset, + cdrom_sector_counter, + sector, + seccnt, + 1 << seccnt, + cdrom_addressdata + seccnt * 4096); #endif - } else { + } + else { inc = 0; } if (inc) @@ -1248,7 +1274,7 @@ static void cdrom_run_read (void) static int lastmediastate = 0; -static void akiko_handler (bool framesync) +static void akiko_handler(bool framesync) { if (unitnum < 0) return; @@ -1256,12 +1282,12 @@ static void akiko_handler (bool framesync) return; if (mediachanged) { - if (cdrom_start_return_data (0) < 0) { - cdrom_start_return_data (cdrom_command_media_status ()); + if (cdrom_start_return_data(0) < 0) { + cdrom_start_return_data(cdrom_command_media_status()); mediachanged = 0; - get_cdrom_toc (); + get_cdrom_toc(); /* do not remove! first try may fail */ - get_cdrom_toc (); + get_cdrom_toc(); } return; } @@ -1274,44 +1300,45 @@ static void akiko_handler (bool framesync) } if (cdrom_audiotimeout == -1) { // play finished (or disk end) if (cdrom_playing) { - cdaudiostop (); + cdaudiostop(); cdrom_audiotimeout = -2; - } else { + } + else { cdrom_audiotimeout = 0; } } if (cdrom_audiotimeout == -2) { // play end notification - cdrom_start_return_data (cdrom_playend_notify (1)); + cdrom_start_return_data(cdrom_playend_notify(1)); cdrom_audiotimeout = 0; } // play didn't start notification (illegal address) if (cdrom_audiotimeout == -3) { // return error status - cdrom_start_return_data (cdrom_playend_notify (-1)); + cdrom_start_return_data(cdrom_playend_notify(-1)); cdrom_audiotimeout = 0; } /* one toc entry / frame */ if (cdrom_toc_counter >= 0 && !cdrom_command_active && framesync) { - if (cdrom_start_return_data (-1)) { - cdrom_start_return_data (cdrom_return_toc_entry ()); + if (cdrom_start_return_data(-1)) { + cdrom_start_return_data(cdrom_return_toc_entry()); } } } -static void akiko_internal (void) +static void akiko_internal(void) { if (!currprefs.cs_cd32cd) return; - cdrom_return_data (); - cdrom_run_command (); + cdrom_return_data(); + cdrom_run_command(); if (cdrom_command_active > 0) { cdrom_command_active--; if (!cdrom_command_active) - cdrom_run_command_run (); + cdrom_run_command_run(); } } -void AKIKO_hsync_handler (void) +void AKIKO_hsync_handler(void) { bool framesync = false; if (!currprefs.cs_cd32cd || !akiko_inited) @@ -1321,8 +1348,9 @@ void AKIKO_hsync_handler (void) framecounter--; if (framecounter <= 0) { if (cdrom_seek_delay <= 0) { - cdrom_run_read (); - } else { + cdrom_run_read(); + } + else { cdrom_seek_delay--; } framecounter += (float)maxvpos * vblank_hz / (75.0 * cdrom_speed); @@ -1335,7 +1363,7 @@ void AKIKO_hsync_handler (void) subcodecounter--; if (subcodecounter <= 0) { if ((cdrom_flags & CDFLAG_SUBCODE) && cdrom_playing && subcodebufferoffset != subcodebufferoffsetw) { - uae_sem_wait (&sub_sem); + uae_sem_wait(&sub_sem); if (subcodebufferinuse[subcodebufferoffset]) { if (cdrom_subcodeoffset >= 128) cdrom_subcodeoffset = 0; @@ -1343,17 +1371,17 @@ void AKIKO_hsync_handler (void) cdrom_subcodeoffset = 128; // 96 byte subchannel data for (int i = 0; i < SUB_CHANNEL_SIZE; i++) - put_byte (subcode_address + cdrom_subcodeoffset + i, subcodebuffer[subcodebufferoffset * SUB_CHANNEL_SIZE + i]); - put_long (subcode_address + cdrom_subcodeoffset + SUB_CHANNEL_SIZE, 0xffffffff); + put_byte(subcode_address + cdrom_subcodeoffset + i, subcodebuffer[subcodebufferoffset * SUB_CHANNEL_SIZE + i]); + put_long(subcode_address + cdrom_subcodeoffset + SUB_CHANNEL_SIZE, 0xffffffff); subcodebufferinuse[subcodebufferoffset] = 0; cdrom_subcodeoffset += 100; subcodebufferoffset++; if (subcodebufferoffset >= MAX_SUBCODEBUFFER) subcodebufferoffset -= MAX_SUBCODEBUFFER; - set_status (CDINTERRUPT_SUBCODE); + set_status(CDINTERRUPT_SUBCODE); //write_log (_T("*")); } - uae_sem_post (&sub_sem); + uae_sem_post(&sub_sem); } subcodecounter = maxvpos * vblank_hz / (75 * cdrom_speed) - 5; } @@ -1363,12 +1391,12 @@ void AKIKO_hsync_handler (void) if (mediacheckcounter > 0) mediacheckcounter--; - akiko_internal (); - akiko_handler (framesync); + akiko_internal(); + akiko_handler(framesync); } /* cdrom data buffering thread */ -static void *akiko_thread (void *null) +static void *akiko_thread(void *null) { int i; uae_u8 *tmp1; @@ -1376,62 +1404,64 @@ static void *akiko_thread (void *null) int tmp3; int sector; - while (akiko_thread_running || comm_pipe_has_data (&requests)) { + while (akiko_thread_running || comm_pipe_has_data(&requests)) { - if (comm_pipe_has_data (&requests)) { - uae_u32 b = read_comm_pipe_u32_blocking (&requests); + if (comm_pipe_has_data(&requests)) { + uae_u32 b = read_comm_pipe_u32_blocking(&requests); switch (b) { case 0x0102: // pause - sys_command_cd_pause (unitnum, 1); + sys_command_cd_pause(unitnum, 1); break; case 0x0103: // unpause - sys_command_cd_pause (unitnum, 0); + sys_command_cd_pause(unitnum, 0); break; case 0x0104: // stop - cdaudiostop_do (); + cdaudiostop_do(); break; case 0x0105: // mute change - sys_command_cd_volume (unitnum, cdrom_muted ? 0 : 0x7fff, cdrom_muted ? 0 : 0x7fff); + sys_command_cd_volume(unitnum, cdrom_muted ? 0 : 0x7fff, cdrom_muted ? 0 : 0x7fff); break; case 0x0110: // do_play! - sys_command_cd_volume (unitnum, cdrom_muted ? 0 : 0x7fff, cdrom_muted ? 0 : 0x7fff); - cdaudioplay_do (); + sys_command_cd_volume(unitnum, cdrom_muted ? 0 : 0x7fff, cdrom_muted ? 0 : 0x7fff); + cdaudioplay_do(); break; } } if (frame2counter <= 0) { frame2counter = 312 * 50 / 2; - if (unitnum >= 0 && sys_command_cd_qcode (unitnum, qcode_buf)) { + if (unitnum >= 0 && sys_command_cd_qcode(unitnum, qcode_buf)) { qcode_valid = 1; } } if (mediacheckcounter <= 0) { mediacheckcounter = 312 * 50 * 2; - int media = sys_command_ismedia (unitnum, 1); + int media = sys_command_ismedia(unitnum, 1); if (media < 0) { - write_log (_T("CD32: device unit %d lost\n"), unitnum); + write_log(_T("CD32: device unit %d lost\n"), unitnum); media = lastmediastate = cdrom_disk = 0; mediachanged = 1; - cdaudiostop_do (); - } else if (media != lastmediastate) { + cdaudiostop_do(); + } + else if (media != lastmediastate) { if (!media && lastmediastate > 1) { // ignore missing media if statefile restored with cd present if (lastmediastate == 2) - write_log (_T("CD32: CD missing but statefile was stored with CD inserted: faking media present\n")); + write_log(_T("CD32: CD missing but statefile was stored with CD inserted: faking media present\n")); lastmediastate = 3; - } else { - write_log (_T("CD32: media changed = %d\n"), media); - lastmediastate = cdrom_disk = media; - mediachanged = 1; - cdaudiostop_do (); - } - } + } + else { + write_log(_T("CD32: media changed = %d\n"), media); + lastmediastate = cdrom_disk = media; + mediachanged = 1; + cdaudiostop_do(); + } + } } - uae_sem_wait (&akiko_sem); + uae_sem_wait(&akiko_sem); sector = cdrom_current_sector; for (i = 0; i < SECTOR_BUFFER_SIZE; i++) { if (sector_buffer_info_1[i] == 0xff) @@ -1439,69 +1469,70 @@ static void *akiko_thread (void *null) } if (cdrom_data_end > 0 && sector >= 0 && (sector_buffer_sector_1 < 0 || sector < sector_buffer_sector_1 || sector >= sector_buffer_sector_1 + SECTOR_BUFFER_SIZE * 2 / 3 || i != SECTOR_BUFFER_SIZE)) { - int blocks; - memset (sector_buffer_info_2, 0, SECTOR_BUFFER_SIZE); + int blocks; + memset(sector_buffer_info_2, 0, SECTOR_BUFFER_SIZE); #if AKIKO_DEBUG_IO_CMD - write_log (_T("filling buffer sector=%d (max=%d)\n"), sector, cdrom_data_end); + write_log(_T("filling buffer sector=%d (max=%d)\n"), sector, cdrom_data_end); #endif - sector_buffer_sector_2 = sector; - if (sector + SECTOR_BUFFER_SIZE >= cdrom_data_end) - blocks = cdrom_data_end - sector; - else - blocks = SECTOR_BUFFER_SIZE; - int ok = sys_command_cd_rawread (unitnum, sector_buffer_2, sector, blocks, 2352); - if (!ok) { - int offset = 0; - while (offset < SECTOR_BUFFER_SIZE) { - int ok = 0; - if (sector < cdrom_data_end) - ok = sys_command_cd_rawread (unitnum, sector_buffer_2 + offset * 2352, sector, 1, 2352); - sector_buffer_info_2[offset] = ok ? 3 : 0; - offset++; - sector++; - } - } else { - for (int i = 0; i < SECTOR_BUFFER_SIZE; i++) - sector_buffer_info_2[i] = i < blocks ? 3 : 0; + sector_buffer_sector_2 = sector; + if (sector + SECTOR_BUFFER_SIZE >= cdrom_data_end) + blocks = cdrom_data_end - sector; + else + blocks = SECTOR_BUFFER_SIZE; + int ok = sys_command_cd_rawread(unitnum, sector_buffer_2, sector, blocks, 2352); + if (!ok) { + int offset = 0; + while (offset < SECTOR_BUFFER_SIZE) { + int ok = 0; + if (sector < cdrom_data_end) + ok = sys_command_cd_rawread(unitnum, sector_buffer_2 + offset * 2352, sector, 1, 2352); + sector_buffer_info_2[offset] = ok ? 3 : 0; + offset++; + sector++; } - tmp1 = sector_buffer_info_1; - sector_buffer_info_1 = sector_buffer_info_2; - sector_buffer_info_2 = tmp1; - tmp2 = sector_buffer_1; - sector_buffer_1 = sector_buffer_2; - sector_buffer_2 = tmp2; - tmp3 = sector_buffer_sector_1; - sector_buffer_sector_1 = sector_buffer_sector_2; - sector_buffer_sector_2 = tmp3; + } + else { + for (int i = 0; i < SECTOR_BUFFER_SIZE; i++) + sector_buffer_info_2[i] = i < blocks ? 3 : 0; + } + tmp1 = sector_buffer_info_1; + sector_buffer_info_1 = sector_buffer_info_2; + sector_buffer_info_2 = tmp1; + tmp2 = sector_buffer_1; + sector_buffer_1 = sector_buffer_2; + sector_buffer_2 = tmp2; + tmp3 = sector_buffer_sector_1; + sector_buffer_sector_1 = sector_buffer_sector_2; + sector_buffer_sector_2 = tmp3; } - uae_sem_post (&akiko_sem); - sleep_millis (10); + uae_sem_post(&akiko_sem); + sleep_millis(10); } akiko_thread_running = -1; return 0; } -STATIC_INLINE uae_u8 akiko_get_long (uae_u32 v, int offset) +STATIC_INLINE uae_u8 akiko_get_long(uae_u32 v, int offset) { return v >> ((3 - offset) * 8); } -STATIC_INLINE void akiko_put_long (uae_u32 *p, int offset, int v) +STATIC_INLINE void akiko_put_long(uae_u32 *p, int offset, int v) { *p &= ~(0xff << ((3 - offset) * 8)); *p |= v << ((3 - offset) * 8); } -static uae_u32 REGPARAM3 akiko_lget (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 akiko_wget (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 akiko_bget (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 akiko_lgeti (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 akiko_wgeti (uaecptr) REGPARAM; -static void REGPARAM3 akiko_lput (uaecptr, uae_u32) REGPARAM; -static void REGPARAM3 akiko_wput (uaecptr, uae_u32) REGPARAM; -static void REGPARAM3 akiko_bput (uaecptr, uae_u32) REGPARAM; +static uae_u32 REGPARAM3 akiko_lget(uaecptr) REGPARAM; +static uae_u32 REGPARAM3 akiko_wget(uaecptr) REGPARAM; +static uae_u32 REGPARAM3 akiko_bget(uaecptr) REGPARAM; +static uae_u32 REGPARAM3 akiko_lgeti(uaecptr) REGPARAM; +static uae_u32 REGPARAM3 akiko_wgeti(uaecptr) REGPARAM; +static void REGPARAM3 akiko_lput(uaecptr, uae_u32) REGPARAM; +static void REGPARAM3 akiko_wput(uaecptr, uae_u32) REGPARAM; +static void REGPARAM3 akiko_bput(uaecptr, uae_u32) REGPARAM; -static uae_u32 akiko_bget2 (uaecptr addr, int msg) +static uae_u32 akiko_bget2(uaecptr addr, int msg) { uae_u8 v = 0; @@ -1521,7 +1552,7 @@ static uae_u32 akiko_bget2 (uaecptr addr, int msg) case 0x32: case 0x33: if (currprefs.cs_cd32nvram) - v = akiko_nvram_read (addr - 0x30); + v = akiko_nvram_read(addr - 0x30); return v; /* C2P */ @@ -1530,101 +1561,102 @@ static uae_u32 akiko_bget2 (uaecptr addr, int msg) case 0x3a: case 0x3b: if (currprefs.cs_cd32c2p) - v = akiko_c2p_read (addr - 0x38); + v = akiko_c2p_read(addr - 0x38); return v; } - uae_sem_wait (&akiko_sem); + uae_sem_wait(&akiko_sem); switch (addr) { if (currprefs.cs_cd32cd) { /* CDROM control */ - case 0x04: - case 0x05: - case 0x06: - case 0x07: - v = akiko_get_long (cdrom_intreq, addr - 0x04); - break; - case 0x08: - case 0x09: - case 0x0a: - case 0x0b: - v = akiko_get_long (cdrom_intena, addr - 0x08); - break; - case 0x10: - case 0x11: - case 0x12: - case 0x13: - v = akiko_get_long (cdrom_addressdata, addr - 0x10); - break; - case 0x14: - case 0x15: - case 0x16: - case 0x17: - v = akiko_get_long (cdrom_addressmisc, addr - 0x14); - break; - case 0x18: - v = cdrom_subcodeoffset; - break; - case 0x19: - v = cdcomtxinx; - break; - case 0x1a: - v = cdcomrxinx; - break; - case 0x1f: - v = cdcomrxcmp; - break; - case 0x20: - case 0x21: - v = akiko_get_long (cdrom_pbx, addr - 0x20 + 2); - break; - case 0x24: - case 0x25: - case 0x26: - case 0x27: - v = akiko_get_long (cdrom_flags, addr - 0x24); - break; - } else if (addr < 0x30) { + case 0x04: + case 0x05: + case 0x06: + case 0x07: + v = akiko_get_long(cdrom_intreq, addr - 0x04); + break; + case 0x08: + case 0x09: + case 0x0a: + case 0x0b: + v = akiko_get_long(cdrom_intena, addr - 0x08); + break; + case 0x10: + case 0x11: + case 0x12: + case 0x13: + v = akiko_get_long(cdrom_addressdata, addr - 0x10); + break; + case 0x14: + case 0x15: + case 0x16: + case 0x17: + v = akiko_get_long(cdrom_addressmisc, addr - 0x14); + break; + case 0x18: + v = cdrom_subcodeoffset; + break; + case 0x19: + v = cdcomtxinx; + break; + case 0x1a: + v = cdcomrxinx; + break; + case 0x1f: + v = cdcomrxcmp; + break; + case 0x20: + case 0x21: + v = akiko_get_long(cdrom_pbx, addr - 0x20 + 2); + break; + case 0x24: + case 0x25: + case 0x26: + case 0x27: + v = akiko_get_long(cdrom_flags, addr - 0x24); + break; + } + else if (addr < 0x30) { break; } default: - write_log (_T("akiko_bget: unknown address %08X PC=%08X\n"), addr, M68K_GETPC); + write_log(_T("akiko_bget: unknown address %08X PC=%08X\n"), addr, M68K_GETPC); v = 0; break; } - akiko_internal (); - uae_sem_post (&akiko_sem); + akiko_internal(); + uae_sem_post(&akiko_sem); if (msg && addr < 0x30 && AKIKO_DEBUG_IO) - write_log (_T("akiko_bget %08X: %08X %02X\n"), M68K_GETPC, addr, v & 0xff); + write_log(_T("akiko_bget %08X: %08X %02X\n"), M68K_GETPC, addr, v & 0xff); return v; } -static uae_u32 REGPARAM2 akiko_bget (uaecptr addr) +static uae_u32 REGPARAM2 akiko_bget(uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif - return akiko_bget2 (addr, 1); + return akiko_bget2(addr, 1); } -static uae_u32 REGPARAM2 akiko_wget (uaecptr addr) +static uae_u32 REGPARAM2 akiko_wget(uaecptr addr) { uae_u16 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 0xffff; - v = akiko_bget2 (addr + 1, 0); - v |= akiko_bget2 (addr + 0, 0) << 8; + v = akiko_bget2(addr + 1, 0); + v |= akiko_bget2(addr + 0, 0) << 8; if (addr < 0x30 && AKIKO_DEBUG_IO) - write_log (_T("akiko_wget %08X: %08X %04X\n"), M68K_GETPC, addr, v & 0xffff); + write_log(_T("akiko_wget %08X: %08X %04X\n"), M68K_GETPC, addr, v & 0xffff); return v; } -static uae_u32 REGPARAM2 akiko_lget (uaecptr addr) +static uae_u32 REGPARAM2 akiko_lget(uaecptr addr) { uae_u32 v; @@ -1632,24 +1664,24 @@ static uae_u32 REGPARAM2 akiko_lget (uaecptr addr) special_mem |= S_READ; #endif addr &= 0xffff; - v = akiko_bget2 (addr + 3, 0); - v |= akiko_bget2 (addr + 2, 0) << 8; - v |= akiko_bget2 (addr + 1, 0) << 16; - v |= akiko_bget2 (addr + 0, 0) << 24; + v = akiko_bget2(addr + 3, 0); + v |= akiko_bget2(addr + 2, 0) << 8; + v |= akiko_bget2(addr + 1, 0) << 16; + v |= akiko_bget2(addr + 0, 0) << 24; if (addr < 0x30 && (addr != 4 && addr != 8) && AKIKO_DEBUG_IO) - write_log (_T("akiko_lget %08X: %08X %08X\n"), M68K_GETPC, addr, v); + write_log(_T("akiko_lget %08X: %08X %08X\n"), M68K_GETPC, addr, v); return v; } -static void akiko_bput2 (uaecptr addr, uae_u32 v, int msg) +static void akiko_bput2(uaecptr addr, uae_u32 v, int msg) { uae_u32 tmp; addr &= 0xffff; v &= 0xff; - if(msg && addr < 0x30 && AKIKO_DEBUG_IO) - write_log (_T("akiko_bput %08X: %08X=%02X\n"), M68K_GETPC, addr, v & 0xff); + if (msg && addr < 0x30 && AKIKO_DEBUG_IO) + write_log(_T("akiko_bput %08X: %08X=%02X\n"), M68K_GETPC, addr, v & 0xff); switch (addr) { @@ -1658,7 +1690,7 @@ static void akiko_bput2 (uaecptr addr, uae_u32 v, int msg) case 0x32: case 0x33: if (currprefs.cs_cd32nvram) - akiko_nvram_write (addr - 0x30, v); + akiko_nvram_write(addr - 0x30, v); return; case 0x38: @@ -1666,174 +1698,184 @@ static void akiko_bput2 (uaecptr addr, uae_u32 v, int msg) case 0x3a: case 0x3b: if (currprefs.cs_cd32c2p) - akiko_c2p_write (addr - 0x38, v); + akiko_c2p_write(addr - 0x38, v); return; } - uae_sem_wait (&akiko_sem); + uae_sem_wait(&akiko_sem); switch (addr) { if (currprefs.cs_cd32cd) { - case 0x04: - case 0x05: - case 0x06: - case 0x07: - akiko_put_long (&cdrom_intreq, addr - 0x04, v); - break; - case 0x08: - case 0x09: - case 0x0a: - case 0x0b: - akiko_put_long (&cdrom_intena, addr - 0x08, v); - if (addr == 8) - cdrom_intreq &= cdrom_intena; - break; - case 0x10: - case 0x11: - case 0x12: - case 0x13: - akiko_put_long (&cdrom_addressdata, addr - 0x10, v); - cdrom_addressdata &= 0x00fff000; - break; - case 0x14: - case 0x15: - case 0x16: - case 0x17: - akiko_put_long (&cdrom_addressmisc, addr - 0x14, v); - cdrom_addressmisc &= 0x00fffc00; - subcode_address = cdrom_addressmisc | 0x100; - cdrx_address = cdrom_addressmisc; - cdtx_address = cdrom_addressmisc | 0x200; - break; - case 0x18: - cdrom_intreq &= ~CDINTERRUPT_SUBCODE; - break; - case 0x1d: - cdrom_intreq &= ~CDINTERRUPT_TXDMADONE; - cdcomtxcmp = v; - cdrom_tx_dma_delay = 5; - break; - case 0x1f: - cdrom_intreq &= ~CDINTERRUPT_RXDMADONE; - cdcomrxcmp = v; - break; - case 0x20: - case 0x21: - tmp = cdrom_pbx; - akiko_put_long (&cdrom_pbx, addr - 0x20 + 2, v); - cdrom_pbx |= tmp; - cdrom_pbx &= 0xffff; - cdrom_intreq &= ~CDINTERRUPT_PBX; - break; - case 0x24: - case 0x25: - case 0x26: - case 0x27: - tmp = cdrom_flags; - akiko_put_long (&cdrom_flags, addr - 0x24, v); - if ((cdrom_flags & CDFLAG_ENABLE) && !(tmp & CDFLAG_ENABLE)) - cdrom_sector_counter = 0; - if (!(cdrom_flags & CDFLAG_PBX) && (tmp & CDFLAG_PBX)) - cdrom_pbx = 0; - if ((cdrom_flags & CDFLAG_SUBCODE) && !(tmp & CDFLAG_SUBCODE)) { - uae_sem_wait (&sub_sem); - memset (subcodebufferinuse, 0, sizeof subcodebufferinuse); - subcodebufferoffset = subcodebufferoffsetw = 0; - uae_sem_post (&sub_sem); + case 0x04: + case 0x05: + case 0x06: + case 0x07: + akiko_put_long(&cdrom_intreq, addr - 0x04, v); + break; + case 0x08: + case 0x09: + case 0x0a: + case 0x0b: + akiko_put_long(&cdrom_intena, addr - 0x08, v); + if (addr == 8) + cdrom_intreq &= cdrom_intena; + break; + case 0x10: + case 0x11: + case 0x12: + case 0x13: + akiko_put_long(&cdrom_addressdata, addr - 0x10, v); + cdrom_addressdata &= 0x00fff000; + break; + case 0x14: + case 0x15: + case 0x16: + case 0x17: + akiko_put_long(&cdrom_addressmisc, addr - 0x14, v); + cdrom_addressmisc &= 0x00fffc00; + subcode_address = cdrom_addressmisc | 0x100; + cdrx_address = cdrom_addressmisc; + cdtx_address = cdrom_addressmisc | 0x200; + break; + case 0x18: + cdrom_intreq &= ~CDINTERRUPT_SUBCODE; + break; + case 0x1d: + cdrom_intreq &= ~CDINTERRUPT_TXDMADONE; + cdcomtxcmp = v; + cdrom_tx_dma_delay = 5; + break; + case 0x1f: + cdrom_intreq &= ~CDINTERRUPT_RXDMADONE; + cdcomrxcmp = v; + break; + case 0x20: + case 0x21: + tmp = cdrom_pbx; + akiko_put_long(&cdrom_pbx, addr - 0x20 + 2, v); + cdrom_pbx |= tmp; + cdrom_pbx &= 0xffff; + cdrom_intreq &= ~CDINTERRUPT_PBX; + break; + case 0x24: + case 0x25: + case 0x26: + case 0x27: + tmp = cdrom_flags; + akiko_put_long(&cdrom_flags, addr - 0x24, v); + if ((cdrom_flags & CDFLAG_ENABLE) && !(tmp & CDFLAG_ENABLE)) + cdrom_sector_counter = 0; + if (!(cdrom_flags & CDFLAG_PBX) && (tmp & CDFLAG_PBX)) + cdrom_pbx = 0; + if ((cdrom_flags & CDFLAG_SUBCODE) && !(tmp & CDFLAG_SUBCODE)) { + uae_sem_wait(&sub_sem); + memset(subcodebufferinuse, 0, sizeof subcodebufferinuse); + subcodebufferoffset = subcodebufferoffsetw = 0; + uae_sem_post(&sub_sem); + } + break; } - break; - } else if (addr < 0x30) { + else if (addr < 0x30) { break; } default: - write_log (_T("akiko_bput: unknown address %08X=%02X PC=%08X\n"), addr, v & 0xff, M68K_GETPC); + write_log(_T("akiko_bput: unknown address %08X=%02X PC=%08X\n"), addr, v & 0xff, M68K_GETPC); break; } - akiko_internal (); - uae_sem_post (&akiko_sem); + akiko_internal(); + uae_sem_post(&akiko_sem); } -static void REGPARAM2 akiko_bput (uaecptr addr, uae_u32 v) +static void REGPARAM2 akiko_bput(uaecptr addr, uae_u32 v) { #ifdef JIT special_mem |= S_WRITE; #endif - akiko_bput2 (addr, v, 1); + akiko_bput2(addr, v, 1); } -static void REGPARAM2 akiko_wput (uaecptr addr, uae_u32 v) +static void REGPARAM2 akiko_wput(uaecptr addr, uae_u32 v) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 0xfff; - if((addr < 0x30 && AKIKO_DEBUG_IO)) - write_log (_T("akiko_wput %08X: %08X=%04X\n"), M68K_GETPC, addr, v & 0xffff); - akiko_bput2 (addr + 1, v & 0xff, 0); - akiko_bput2 (addr + 0, v >> 8, 0); + if ((addr < 0x30 && AKIKO_DEBUG_IO)) + write_log(_T("akiko_wput %08X: %08X=%04X\n"), M68K_GETPC, addr, v & 0xffff); + akiko_bput2(addr + 1, v & 0xff, 0); + akiko_bput2(addr + 0, v >> 8, 0); } -static void REGPARAM2 akiko_lput (uaecptr addr, uae_u32 v) +static void REGPARAM2 akiko_lput(uaecptr addr, uae_u32 v) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 0xffff; - if(addr < 0x30 && AKIKO_DEBUG_IO) - write_log (_T("akiko_lput %08X: %08X=%08X\n"), M68K_GETPC, addr, v); - akiko_bput2 (addr + 3, (v >> 0) & 0xff, 0); - akiko_bput2 (addr + 2, (v >> 8) & 0xff, 0); - akiko_bput2 (addr + 1, (v >> 16) & 0xff, 0); - akiko_bput2 (addr + 0, (v >> 24) & 0xff, 0); + if (addr < 0x30 && AKIKO_DEBUG_IO) + write_log(_T("akiko_lput %08X: %08X=%08X\n"), M68K_GETPC, addr, v); + akiko_bput2(addr + 3, (v >> 0) & 0xff, 0); + akiko_bput2(addr + 2, (v >> 8) & 0xff, 0); + akiko_bput2(addr + 1, (v >> 16) & 0xff, 0); + akiko_bput2(addr + 0, (v >> 24) & 0xff, 0); } addrbank akiko_bank = { - akiko_lget, akiko_wget, akiko_bget, - akiko_lput, akiko_wput, akiko_bput, - default_xlate, default_check, NULL, _T("Akiko"), - dummy_lgeti, dummy_wgeti, ABFLAG_IO + akiko_lget, + akiko_wget, + akiko_bget, + akiko_lput, + akiko_wput, + akiko_bput, + default_xlate, + default_check, + NULL, + _T("Akiko"), + dummy_lgeti, + dummy_wgeti, + ABFLAG_IO }; -static const uae_u8 patchdata[]={0x0c,0x82,0x00,0x00,0x03,0xe8,0x64,0x00,0x00,0x46}; -static void patchrom (void) +static const uae_u8 patchdata[] = { 0x0c, 0x82, 0x00, 0x00, 0x03, 0xe8, 0x64, 0x00, 0x00, 0x46 }; +static void patchrom(void) { - int i; + int i; if (currprefs.cpu_model > 68020 || currprefs.cachesize || currprefs.m68k_speed != 0) { uae_u8 *p = extendedkickmem_bank.baseaddr; - for (i = 0; i < 524288 - sizeof (patchdata); i++) { - if (!memcmp (p + i, patchdata, sizeof(patchdata))) { - protect_roms (false); + for (i = 0; i < 524288 - sizeof(patchdata); i++) { + if (!memcmp(p + i, patchdata, sizeof(patchdata))) { + protect_roms(false); p[i + 6] = 0x4e; p[i + 7] = 0x71; p[i + 8] = 0x4e; p[i + 9] = 0x71; - protect_roms (true); - write_log (_T("extended rom delay loop patched at 0x%p\n"), i + 6 + 0xe00000); + protect_roms(true); + write_log(_T("extended rom delay loop patched at 0x%p\n"), i + 6 + 0xe00000); return; } } - write_log (_T("couldn't patch extended rom\n")); + write_log(_T("couldn't patch extended rom\n")); } } -static void akiko_cdrom_free (void) +static void akiko_cdrom_free(void) { - sys_cddev_close (); - xfree (sector_buffer_1); - xfree (sector_buffer_2); - xfree (sector_buffer_info_1); - xfree (sector_buffer_info_2); + sys_cddev_close(); + xfree(sector_buffer_1); + xfree(sector_buffer_2); + xfree(sector_buffer_info_1); + xfree(sector_buffer_info_2); sector_buffer_1 = 0; sector_buffer_2 = 0; sector_buffer_info_1 = 0; sector_buffer_info_2 = 0; } -void akiko_reset (void) +void akiko_reset(void) { - cdaudiostop_do (); - nvram_read (); + cdaudiostop_do(); + nvram_read(); state = I2C_WAIT; bitcounter = -1; direction = -1; @@ -1852,58 +1894,58 @@ void akiko_reset (void) cd_initialized = 0; if (akiko_thread_running > 0) { - cdaudiostop (); + cdaudiostop(); akiko_thread_running = 0; - while(akiko_thread_running == 0) - sleep_millis (10); + while (akiko_thread_running == 0) + sleep_millis(10); akiko_thread_running = 0; } - akiko_cdrom_free (); + akiko_cdrom_free(); mediacheckcounter = 0; akiko_inited = false; } -void akiko_free (void) +void akiko_free(void) { - akiko_reset (); - akiko_cdrom_free (); + akiko_reset(); + akiko_cdrom_free(); } -int akiko_init (void) +int akiko_init(void) { if (!currprefs.cs_cd32cd) return 0; - akiko_free (); - akiko_precalculate (); + akiko_free(); + akiko_precalculate(); unitnum = -1; - sys_cddev_open (); - sector_buffer_1 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE * 2352); - sector_buffer_2 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE * 2352); - sector_buffer_info_1 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE); - sector_buffer_info_2 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE); + sys_cddev_open(); + sector_buffer_1 = xmalloc(uae_u8, SECTOR_BUFFER_SIZE * 2352); + sector_buffer_2 = xmalloc(uae_u8, SECTOR_BUFFER_SIZE * 2352); + sector_buffer_info_1 = xmalloc(uae_u8, SECTOR_BUFFER_SIZE); + sector_buffer_info_2 = xmalloc(uae_u8, SECTOR_BUFFER_SIZE); sector_buffer_sector_1 = -1; sector_buffer_sector_2 = -1; - uae_sem_init (&akiko_sem, 0, 1); - uae_sem_init (&sub_sem, 0, 1); + uae_sem_init(&akiko_sem, 0, 1); + uae_sem_init(&sub_sem, 0, 1); if (!savestate_state) { cdrom_playing = cdrom_paused = 0; cdrom_data_offset = -1; } - patchrom (); + patchrom(); if (!akiko_thread_running) { akiko_thread_running = 1; - init_comm_pipe (&requests, 100, 1); - uae_start_thread (_T("akiko"), akiko_thread, 0, NULL); + init_comm_pipe(&requests, 100, 1); + uae_start_thread(_T("akiko"), akiko_thread, 0, NULL); } - gui_flicker_led (LED_HD, 0, -1); + gui_flicker_led(LED_HD, 0); akiko_inited = true; return 1; } #ifdef SAVESTATE -uae_u8 *save_akiko (int *len, uae_u8 *dstptr) +uae_u8 *save_akiko(int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; int i; @@ -1914,102 +1956,102 @@ uae_u8 *save_akiko (int *len, uae_u8 *dstptr) if (dstptr) dstbak = dst = dstptr; else - dstbak = dst = xmalloc (uae_u8, 1000); - save_u16 (0); - save_u16 (0xCAFE); - save_u32 (cdrom_intreq); - save_u32 (cdrom_intena); - save_u32 (0); - save_u32 (cdrom_addressdata); - save_u32 (cdrom_addressmisc); - save_u8 (cdrom_subcodeoffset); - save_u8 (cdcomtxinx); - save_u8 (cdcomrxinx); - save_u8 (0); - save_u8 (0); - save_u8 (cdcomtxcmp); - save_u8 (0); - save_u8 (cdcomrxcmp); - save_u16 ((uae_u16)cdrom_pbx); - save_u16 (0); - save_u32 (cdrom_flags); - save_u32 (0); - save_u32 (0); - save_u32 ((scl_dir ? 0x8000 : 0) | (sda_dir ? 0x4000 : 0)); - save_u32 (0); - save_u32 (0); + dstbak = dst = xmalloc(uae_u8, 1000); + save_u16(0); + save_u16(0xCAFE); + save_u32(cdrom_intreq); + save_u32(cdrom_intena); + save_u32(0); + save_u32(cdrom_addressdata); + save_u32(cdrom_addressmisc); + save_u8(cdrom_subcodeoffset); + save_u8(cdcomtxinx); + save_u8(cdcomrxinx); + save_u8(0); + save_u8(0); + save_u8(cdcomtxcmp); + save_u8(0); + save_u8(cdcomrxcmp); + save_u16((uae_u16)cdrom_pbx); + save_u16(0); + save_u32(cdrom_flags); + save_u32(0); + save_u32(0); + save_u32((scl_dir ? 0x8000 : 0) | (sda_dir ? 0x4000 : 0)); + save_u32(0); + save_u32(0); for (i = 0; i < 8; i++) - save_u32 (akiko_buffer[i]); - save_u8 ((uae_u8)akiko_read_offset); - save_u8 ((uae_u8)akiko_write_offset); + save_u32(akiko_buffer[i]); + save_u8((uae_u8)akiko_read_offset); + save_u8((uae_u8)akiko_write_offset); - save_u32 ((cdrom_playing ? 1 : 0) | (cdrom_paused ? 2 : 0) | (cdrom_disk ? 4 : 0)); + save_u32((cdrom_playing ? 1 : 0) | (cdrom_paused ? 2 : 0) | (cdrom_disk ? 4 : 0)); if (cdrom_playing) - cd_qcode (0); - save_u32 (lsn2msf (last_play_pos)); - save_u32 (lsn2msf (last_play_end)); - save_u8 ((uae_u8)cdrom_toc_counter); + cd_qcode(0); + save_u32(lsn2msf(last_play_pos)); + save_u32(lsn2msf(last_play_end)); + save_u8((uae_u8)cdrom_toc_counter); - save_u8 (cdrom_speed); - save_u8 (cdrom_current_sector); + save_u8(cdrom_speed); + save_u8(cdrom_current_sector); - save_u32 (cdrom_toc_crc); - save_u8 (cdrom_toc_cd_buffer.points); - save_u32 (cdrom_toc_cd_buffer.lastaddress); + save_u32(cdrom_toc_crc); + save_u8(cdrom_toc_cd_buffer.points); + save_u32(cdrom_toc_cd_buffer.lastaddress); *len = dst - dstbak; return dstbak; } -uae_u8 *restore_akiko (uae_u8 *src) +uae_u8 *restore_akiko(uae_u8 *src) { uae_u32 v; int i; - akiko_free (); + akiko_free(); if (!currprefs.cs_cd32cd) { changed_prefs.cs_cd32c2p = changed_prefs.cs_cd32cd = changed_prefs.cs_cd32nvram = true; currprefs.cs_cd32c2p = currprefs.cs_cd32cd = currprefs.cs_cd32nvram = true; - akiko_init (); + akiko_init(); } - restore_u16 (); - restore_u16 (); - cdrom_intreq = restore_u32 (); - cdrom_intena = restore_u32 (); - restore_u32 (); - cdrom_addressdata = restore_u32 (); - cdrom_addressmisc = restore_u32 (); + restore_u16(); + restore_u16(); + cdrom_intreq = restore_u32(); + cdrom_intena = restore_u32(); + restore_u32(); + cdrom_addressdata = restore_u32(); + cdrom_addressmisc = restore_u32(); subcode_address = cdrom_addressmisc | 0x100; cdrx_address = cdrom_addressmisc; cdtx_address = cdrom_addressmisc | 0x200; - cdrom_subcodeoffset = restore_u8 (); - cdcomtxinx = restore_u8 (); - cdcomrxinx = restore_u8 (); - restore_u8 (); - restore_u8 (); - cdcomtxcmp = restore_u8 (); - restore_u8 (); - cdcomrxcmp = restore_u8 (); - cdrom_pbx = restore_u16 (); - restore_u16 (); - cdrom_flags = restore_u32 (); - restore_u32 (); - restore_u32 (); - v = restore_u32 (); + cdrom_subcodeoffset = restore_u8(); + cdcomtxinx = restore_u8(); + cdcomrxinx = restore_u8(); + restore_u8(); + restore_u8(); + cdcomtxcmp = restore_u8(); + restore_u8(); + cdcomrxcmp = restore_u8(); + cdrom_pbx = restore_u16(); + restore_u16(); + cdrom_flags = restore_u32(); + restore_u32(); + restore_u32(); + v = restore_u32(); scl_dir = (v & 0x8000) ? 1 : 0; sda_dir = (v & 0x4000) ? 1 : 0; - restore_u32 (); - restore_u32 (); + restore_u32(); + restore_u32(); for (i = 0; i < 8; i++) - akiko_buffer[i] = restore_u32 (); - akiko_read_offset = restore_u8 (); - akiko_write_offset = restore_u8 (); + akiko_buffer[i] = restore_u32(); + akiko_read_offset = restore_u8(); + akiko_write_offset = restore_u8(); cdrom_playing = cdrom_paused = cdrom_disk = 0; - v = restore_u32 (); + v = restore_u32(); if (v & 1) cdrom_playing = 1; if (v & 2) @@ -2018,46 +2060,45 @@ uae_u8 *restore_akiko (uae_u8 *src) cdrom_disk = 1; lastmediastate = cdrom_disk ? 2 : 0; - last_play_pos = msf2lsn (restore_u32 ()); - last_play_end = msf2lsn (restore_u32 ()); - cdrom_toc_counter = (uae_s8)restore_u8 (); - cdrom_speed = restore_u8 (); - cdrom_current_sector = (uae_s8)restore_u8 (); + last_play_pos = msf2lsn(restore_u32()); + last_play_end = msf2lsn(restore_u32()); + cdrom_toc_counter = (uae_s8)restore_u8(); + cdrom_speed = restore_u8(); + cdrom_current_sector = (uae_s8)restore_u8(); - restore_u32 (); - restore_u8 (); - restore_u32 (); + restore_u32(); + restore_u8(); + restore_u32(); return src; } -void restore_akiko_finish (void) +void restore_akiko_finish(void) { if (!currprefs.cs_cd32cd) return; - sys_cddev_close (); - akiko_init (); - akiko_c2p_do (); - get_cdrom_toc (); - write_comm_pipe_u32 (&requests, 0x0102, 1); // pause - write_comm_pipe_u32 (&requests, 0x0104, 1); // stop - write_comm_pipe_u32 (&requests, 0x0103, 1); // unpause - if (cdrom_playing && isaudiotrack (last_play_pos)) { - write_comm_pipe_u32 (&requests, 0x0103, 1); // unpause - write_comm_pipe_u32 (&requests, 0x0110, 0); // play - write_comm_pipe_u32 (&requests, last_play_pos, 0); - write_comm_pipe_u32 (&requests, last_play_end, 0); - write_comm_pipe_u32 (&requests, 0, 1); + sys_cddev_close(); + akiko_init(); + akiko_c2p_do(); + get_cdrom_toc(); + write_comm_pipe_u32(&requests, 0x0102, 1); // pause + write_comm_pipe_u32(&requests, 0x0104, 1); // stop + write_comm_pipe_u32(&requests, 0x0103, 1); // unpause + if (cdrom_playing && isaudiotrack(last_play_pos)) { + write_comm_pipe_u32(&requests, 0x0103, 1); // unpause + write_comm_pipe_u32(&requests, 0x0110, 0); // play + write_comm_pipe_u32(&requests, last_play_pos, 0); + write_comm_pipe_u32(&requests, last_play_end, 0); + write_comm_pipe_u32(&requests, 0, 1); } cd_initialized = 1; } #endif -void akiko_mute (int muted) +void akiko_mute(int muted) { cdrom_muted = muted; if (unitnum >= 0) - write_comm_pipe_u32 (&requests, 0x0105, 1); + write_comm_pipe_u32(&requests, 0x0105, 1); } - diff --git a/src/audio.cpp b/src/audio.cpp index 47ad45ce..ad2daac1 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -36,10 +36,10 @@ STATIC_INLINE bool isaudio(void) { - return currprefs.produce_sound != 0; + return currprefs.produce_sound != 0; } -STATIC_INLINE bool usehacks (void) +STATIC_INLINE bool usehacks(void) { return currprefs.cpu_model >= 68020 || currprefs.m68k_speed != 0; } @@ -55,28 +55,28 @@ typedef struct { int time, output; } sinc_queue_t; -struct audio_channel_data{ - unsigned int adk_mask; - unsigned int evtime; +struct audio_channel_data { + unsigned int adk_mask; + unsigned int evtime; bool dmaenstore; bool intreq2; bool dr; bool dsr; bool pbufldl; bool dat_written; - uaecptr lc, pt; - int current_sample, last_sample; - int state; - int per; - int vol; - int len, wlen; - uae_u16 dat, dat2; - int sample_accum, sample_accum_time; - int sinc_output_state; - sinc_queue_t sinc_queue[SINC_QUEUE_LENGTH]; - int sinc_queue_time; - int sinc_queue_head; - /* too fast cpu fixes */ + uaecptr lc, pt; + int current_sample, last_sample; + int state; + int per; + int vol; + int len, wlen; + uae_u16 dat, dat2; + int sample_accum, sample_accum_time; + int sinc_output_state; + sinc_queue_t sinc_queue[SINC_QUEUE_LENGTH]; + int sinc_queue_time; + int sinc_queue_head; + /* too fast cpu fixes */ uaecptr ptx; bool ptx_written; bool ptx_tofetch; @@ -85,8 +85,8 @@ struct audio_channel_data{ static struct audio_channel_data audio_channel[4]; int sound_available = 0; -void (*sample_handler) (void); -static void (*sample_prehandler) (unsigned long best_evtime); +void(*sample_handler)(void); +static void(*sample_prehandler)(unsigned long best_evtime); unsigned long scaled_sample_evtime; @@ -96,13 +96,15 @@ static unsigned long next_sample_evtime; typedef uae_s8 sample8_t; #define DO_CHANNEL_1(v, c) do { (v) *= audio_channel[c].vol; } while (0) -STATIC_INLINE int FINISH_DATA (int data, int bits) +STATIC_INLINE int FINISH_DATA(int data, int bits) { if (bits == 16) { return data; - } else if (bits - 16 > 0) { + } + else if (bits - 16 > 0) { data >>= bits - 16; - } else { + } + else { int shift = 16 - bits; data <<= shift; } @@ -122,7 +124,7 @@ static int led_filter_forced, sound_use_filter, sound_use_filter_sinc, led_filte #define DENORMAL_OFFSET (1E-10) static struct filter_state { - float rc1, rc2, rc3, rc4, rc5; + float rc1, rc2, rc3, rc4, rc5; } sound_filter_state[2]; static float a500e_filter1_a0; @@ -130,9 +132,9 @@ static float a500e_filter2_a0; static float filter_a0; /* a500 and a1200 use the same */ enum { - FILTER_NONE = 0, - FILTER_MODEL_A500, - FILTER_MODEL_A1200 + FILTER_NONE = 0, + FILTER_MODEL_A500, + FILTER_MODEL_A1200 }; /* Amiga has two separate filtering circuits per channel, a static RC filter @@ -153,190 +155,191 @@ enum { static int filter(int input, struct filter_state *fs) { - int o; - float normal_output, led_output; + int o; + float normal_output, led_output; - input = (uae_s16)input; - switch (sound_use_filter) { + input = (uae_s16)input; + switch (sound_use_filter) { - case FILTER_MODEL_A500: - fs->rc1 = a500e_filter1_a0 * input + (1 - a500e_filter1_a0) * fs->rc1 + DENORMAL_OFFSET; - fs->rc2 = a500e_filter2_a0 * fs->rc1 + (1-a500e_filter2_a0) * fs->rc2; - normal_output = fs->rc2; + case FILTER_MODEL_A500: + fs->rc1 = a500e_filter1_a0 * input + (1 - a500e_filter1_a0) * fs->rc1 + DENORMAL_OFFSET; + fs->rc2 = a500e_filter2_a0 * fs->rc1 + (1 - a500e_filter2_a0) * fs->rc2; + normal_output = fs->rc2; - fs->rc3 = filter_a0 * normal_output + (1 - filter_a0) * fs->rc3; - fs->rc4 = filter_a0 * fs->rc3 + (1 - filter_a0) * fs->rc4; - fs->rc5 = filter_a0 * fs->rc4 + (1 - filter_a0) * fs->rc5; + fs->rc3 = filter_a0 * normal_output + (1 - filter_a0) * fs->rc3; + fs->rc4 = filter_a0 * fs->rc3 + (1 - filter_a0) * fs->rc4; + fs->rc5 = filter_a0 * fs->rc4 + (1 - filter_a0) * fs->rc5; - led_output = fs->rc5; - break; + led_output = fs->rc5; + break; - case FILTER_MODEL_A1200: - normal_output = input; + case FILTER_MODEL_A1200: + normal_output = input; - fs->rc2 = filter_a0 * normal_output + (1 - filter_a0) * fs->rc2 + DENORMAL_OFFSET; - fs->rc3 = filter_a0 * fs->rc2 + (1 - filter_a0) * fs->rc3; - fs->rc4 = filter_a0 * fs->rc3 + (1 - filter_a0) * fs->rc4; + fs->rc2 = filter_a0 * normal_output + (1 - filter_a0) * fs->rc2 + DENORMAL_OFFSET; + fs->rc3 = filter_a0 * fs->rc2 + (1 - filter_a0) * fs->rc3; + fs->rc4 = filter_a0 * fs->rc3 + (1 - filter_a0) * fs->rc4; - led_output = fs->rc4; - break; + led_output = fs->rc4; + break; case FILTER_NONE: default: return input; - } + } - if (led_filter_on) - o = led_output; - else - o = normal_output; + if (led_filter_on) + o = led_output; + else + o = normal_output; - if (o > 32767) - o = 32767; - else if (o < -32768) - o = -32768; + if (o > 32767) + o = 32767; + else if (o < -32768) + o = -32768; - return o; + return o; } /* Always put the right word before the left word. */ -static void (*put_sound_word_mono_func)(uae_u32 w); -static void (*put_sound_word_stereo_func)(uae_u32 left, uae_u32 right); +static void(*put_sound_word_mono_func)(uae_u32 w); +static void(*put_sound_word_stereo_func)(uae_u32 left, uae_u32 right); static void put_sound_word_stereo_func_filter_mixed(uae_u32 left, uae_u32 right) { uae_u32 rold, lold, tmp; - left = filter (left, &sound_filter_state[0]); - right = filter (right, &sound_filter_state[1]); + left = filter(left, &sound_filter_state[0]); + right = filter(right, &sound_filter_state[1]); - left_word_saved[saved_ptr] = left; - right_word_saved[saved_ptr] = right; + left_word_saved[saved_ptr] = left; + right_word_saved[saved_ptr] = right; - saved_ptr = (saved_ptr + 1) & mixed_stereo_size; + saved_ptr = (saved_ptr + 1) & mixed_stereo_size; - lold = left_word_saved[saved_ptr]; - tmp = (right * mixed_mul2 + lold * mixed_mul1) / MIXED_STEREO_SCALE; + lold = left_word_saved[saved_ptr]; + tmp = (right * mixed_mul2 + lold * mixed_mul1) / MIXED_STEREO_SCALE; - rold = right_word_saved[saved_ptr]; - left = (left * mixed_mul2 + rold * mixed_mul1) / MIXED_STEREO_SCALE; + rold = right_word_saved[saved_ptr]; + left = (left * mixed_mul2 + rold * mixed_mul1) / MIXED_STEREO_SCALE; - PUT_SOUND_WORD_STEREO(left, tmp); + PUT_SOUND_WORD_STEREO(left, tmp); } static void put_sound_word_stereo_func_filter_notmixed(uae_u32 left, uae_u32 right) { - left = filter (left, &sound_filter_state[0]); - right = filter (right, &sound_filter_state[1]); - PUT_SOUND_WORD_STEREO(left, right); + left = filter(left, &sound_filter_state[0]); + right = filter(right, &sound_filter_state[1]); + PUT_SOUND_WORD_STEREO(left, right); } static void put_sound_word_stereo_func_nofilter_mixed(uae_u32 left, uae_u32 right) { uae_u32 rold, lold, tmp; - left_word_saved[saved_ptr] = left; - right_word_saved[saved_ptr] = right; + left_word_saved[saved_ptr] = left; + right_word_saved[saved_ptr] = right; - saved_ptr = (saved_ptr + 1) & mixed_stereo_size; + saved_ptr = (saved_ptr + 1) & mixed_stereo_size; - lold = left_word_saved[saved_ptr]; - tmp = (right * mixed_mul2 + lold * mixed_mul1) / MIXED_STEREO_SCALE; + lold = left_word_saved[saved_ptr]; + tmp = (right * mixed_mul2 + lold * mixed_mul1) / MIXED_STEREO_SCALE; - rold = right_word_saved[saved_ptr]; - left = (left * mixed_mul2 + rold * mixed_mul1) / MIXED_STEREO_SCALE; + rold = right_word_saved[saved_ptr]; + left = (left * mixed_mul2 + rold * mixed_mul1) / MIXED_STEREO_SCALE; - PUT_SOUND_WORD_STEREO(left, tmp); + PUT_SOUND_WORD_STEREO(left, tmp); } static void put_sound_word_stereo_func_nofilter_notmixed(uae_u32 left, uae_u32 right) { - PUT_SOUND_WORD_STEREO(left, right); + PUT_SOUND_WORD_STEREO(left, right); } static void put_sound_word_mono_func_filter(uae_u32 data) { - data = filter (data, &sound_filter_state[0]); - PUT_SOUND_WORD(data); + data = filter(data, &sound_filter_state[0]); + PUT_SOUND_WORD(data); } static void put_sound_word_mono_func_nofilter(uae_u32 data) { - PUT_SOUND_WORD(data); + PUT_SOUND_WORD(data); } static void anti_prehandler(unsigned long best_evtime) { - int i, output; - struct audio_channel_data *acd; + int i, output; + struct audio_channel_data *acd; - /* Handle accumulator antialiasiation */ - for (i = 0; i < 4; i++) { - acd = &audio_channel[i]; - output = (acd->current_sample * acd->vol) & acd->adk_mask; - acd->sample_accum += output * best_evtime; - acd->sample_accum_time += best_evtime; - } + /* Handle accumulator antialiasiation */ + for (i = 0; i < 4; i++) { + acd = &audio_channel[i]; + output = (acd->current_sample * acd->vol) & acd->adk_mask; + acd->sample_accum += output * best_evtime; + acd->sample_accum_time += best_evtime; + } } -STATIC_INLINE void samplexx_anti_handler (int *datasp) +STATIC_INLINE void samplexx_anti_handler(int *datasp) { - int i; - for (i = 0; i < 4; i++) { - datasp[i] = audio_channel[i].sample_accum_time ? (audio_channel[i].sample_accum / audio_channel[i].sample_accum_time) : 0; - audio_channel[i].sample_accum = 0; - audio_channel[i].sample_accum_time = 0; - } + int i; + for (i = 0; i < 4; i++) { + datasp[i] = audio_channel[i].sample_accum_time ? (audio_channel[i].sample_accum / audio_channel[i].sample_accum_time) : 0; + audio_channel[i].sample_accum = 0; + audio_channel[i].sample_accum_time = 0; + } } static void sinc_prehandler(unsigned long best_evtime) { int i, output; - struct audio_channel_data *acd; + struct audio_channel_data *acd; - for (i = 0; i < 4; i++) { - acd = &audio_channel[i]; + for (i = 0; i < 4; i++) { + acd = &audio_channel[i]; int vol = acd->vol; output = (acd->current_sample * vol) & acd->adk_mask; /* if output state changes, record the state change and also * write data into sinc queue for mixing in the BLEP */ - if (acd->sinc_output_state != output) { + if (acd->sinc_output_state != output) { acd->sinc_queue_head = (acd->sinc_queue_head - 1) & (SINC_QUEUE_LENGTH - 1); acd->sinc_queue[acd->sinc_queue_head].time = acd->sinc_queue_time; acd->sinc_queue[acd->sinc_queue_head].output = output - acd->sinc_output_state; - acd->sinc_output_state = output; - } + acd->sinc_output_state = output; + } acd->sinc_queue_time += best_evtime; - } + } } /* this interpolator performs BLEP mixing (bleps are shaped like integrated sinc * functions) with a type of BLEP that matches the filtering configuration. */ -STATIC_INLINE void samplexx_sinc_handler (int *datasp) +STATIC_INLINE void samplexx_sinc_handler(int *datasp) { - int i, n; - int const *winsinc; + int i, n; + int const *winsinc; - if (sound_use_filter_sinc) { - n = (sound_use_filter_sinc == FILTER_MODEL_A500) ? 0 : 2; - if (led_filter_on) - n += 1; - } else { - n = 4; - } - winsinc = winsinc_integral[n]; + if (sound_use_filter_sinc) { + n = (sound_use_filter_sinc == FILTER_MODEL_A500) ? 0 : 2; + if (led_filter_on) + n += 1; + } + else { + n = 4; + } + winsinc = winsinc_integral[n]; - for (i = 0; i < 4; i += 1) { - int j, v; - struct audio_channel_data *acd = &audio_channel[i]; - /* The sum rings with harmonic components up to infinity... */ - int sum = acd->sinc_output_state << 17; - /* ...but we cancel them through mixing in BLEPs instead */ + for (i = 0; i < 4; i += 1) { + int j, v; + struct audio_channel_data *acd = &audio_channel[i]; + /* The sum rings with harmonic components up to infinity... */ + int sum = acd->sinc_output_state << 17; + /* ...but we cancel them through mixing in BLEPs instead */ int offsetpos = acd->sinc_queue_head & (SINC_QUEUE_LENGTH - 1); for (j = 0; j < SINC_QUEUE_LENGTH; j += 1) { int age = acd->sinc_queue_time - acd->sinc_queue[offsetpos].time; @@ -346,182 +349,182 @@ STATIC_INLINE void samplexx_sinc_handler (int *datasp) offsetpos = (offsetpos + 1) & (SINC_QUEUE_LENGTH - 1); } v = sum >> 15; - if (v > 32767) - v = 32767; - else if (v < -32768) - v = -32768; - datasp[i] = v; - } + if (v > 32767) + v = 32767; + else if (v < -32768) + v = -32768; + datasp[i] = v; + } } -static void sample16i_sinc_handler (void) +static void sample16i_sinc_handler(void) { - int datas[4], data1; + int datas[4], data1; - samplexx_sinc_handler (datas); - data1 = datas[0] + datas[3] + datas[1] + datas[2]; - data1 = FINISH_DATA (data1, 18); - set_sound_buffers (); - PUT_SOUND_WORD_MONO (data1); - check_sound_buffers (); + samplexx_sinc_handler(datas); + data1 = datas[0] + datas[3] + datas[1] + datas[2]; + data1 = FINISH_DATA(data1, 18); + set_sound_buffers(); + PUT_SOUND_WORD_MONO(data1); + check_sound_buffers(); } -void sample16_handler (void) +void sample16_handler(void) { uae_u32 data; - if(audio_channel[0].adk_mask) - data = audio_channel[0].current_sample * audio_channel[0].vol; - else - data = 0; - if(audio_channel[1].adk_mask) - data += audio_channel[1].current_sample * audio_channel[1].vol; - if(audio_channel[2].adk_mask) - data += audio_channel[2].current_sample * audio_channel[2].vol; - if(audio_channel[3].adk_mask) - data += audio_channel[3].current_sample * audio_channel[3].vol; + if (audio_channel[0].adk_mask) + data = audio_channel[0].current_sample * audio_channel[0].vol; + else + data = 0; + if (audio_channel[1].adk_mask) + data += audio_channel[1].current_sample * audio_channel[1].vol; + if (audio_channel[2].adk_mask) + data += audio_channel[2].current_sample * audio_channel[2].vol; + if (audio_channel[3].adk_mask) + data += audio_channel[3].current_sample * audio_channel[3].vol; - data = FINISH_DATA (data, 16); - set_sound_buffers (); - PUT_SOUND_WORD_MONO (data); - check_sound_buffers (); + data = FINISH_DATA(data, 16); + set_sound_buffers(); + PUT_SOUND_WORD_MONO(data); + check_sound_buffers(); } /* This interpolator examines sample points when Paula switches the output * voltage and computes the average of Paula's output */ -static void sample16i_anti_handler (void) +static void sample16i_anti_handler(void) { - int datas[4], data1; + int datas[4], data1; - samplexx_anti_handler (datas); - data1 = datas[0] + datas[3] + datas[1] + datas[2]; - data1 = FINISH_DATA (data1, 16); - set_sound_buffers (); - PUT_SOUND_WORD_MONO (data1); - check_sound_buffers (); + samplexx_anti_handler(datas); + data1 = datas[0] + datas[3] + datas[1] + datas[2]; + data1 = FINISH_DATA(data1, 16); + set_sound_buffers(); + PUT_SOUND_WORD_MONO(data1); + check_sound_buffers(); } -static void sample16i_rh_handler (void) +static void sample16i_rh_handler(void) { - unsigned long delta, ratio; + unsigned long delta, ratio; uae_u32 data0 = audio_channel[0].current_sample; uae_u32 data1 = audio_channel[1].current_sample; uae_u32 data2 = audio_channel[2].current_sample; uae_u32 data3 = audio_channel[3].current_sample; - uae_u32 data0p = audio_channel[0].last_sample; - uae_u32 data1p = audio_channel[1].last_sample; - uae_u32 data2p = audio_channel[2].last_sample; - uae_u32 data3p = audio_channel[3].last_sample; + uae_u32 data0p = audio_channel[0].last_sample; + uae_u32 data1p = audio_channel[1].last_sample; + uae_u32 data2p = audio_channel[2].last_sample; + uae_u32 data3p = audio_channel[3].last_sample; uae_u32 data; - DO_CHANNEL_1 (data0, 0); - DO_CHANNEL_1 (data1, 1); - DO_CHANNEL_1 (data2, 2); - DO_CHANNEL_1 (data3, 3); - DO_CHANNEL_1 (data0p, 0); - DO_CHANNEL_1 (data1p, 1); - DO_CHANNEL_1 (data2p, 2); - DO_CHANNEL_1 (data3p, 3); + DO_CHANNEL_1(data0, 0); + DO_CHANNEL_1(data1, 1); + DO_CHANNEL_1(data2, 2); + DO_CHANNEL_1(data3, 3); + DO_CHANNEL_1(data0p, 0); + DO_CHANNEL_1(data1p, 1); + DO_CHANNEL_1(data2p, 2); + DO_CHANNEL_1(data3p, 3); data0 &= audio_channel[0].adk_mask; - data0p &= audio_channel[0].adk_mask; + data0p &= audio_channel[0].adk_mask; data1 &= audio_channel[1].adk_mask; - data1p &= audio_channel[1].adk_mask; + data1p &= audio_channel[1].adk_mask; data2 &= audio_channel[2].adk_mask; - data2p &= audio_channel[2].adk_mask; + data2p &= audio_channel[2].adk_mask; data3 &= audio_channel[3].adk_mask; - data3p &= audio_channel[3].adk_mask; + data3p &= audio_channel[3].adk_mask; - /* linear interpolation and summing up... */ - delta = audio_channel[0].per; - ratio = ((audio_channel[0].evtime % delta) << 8) / delta; - data0 = (data0 * (256 - ratio) + data0p * ratio) >> 8; - delta = audio_channel[1].per; - ratio = ((audio_channel[1].evtime % delta) << 8) / delta; - data0 += (data1 * (256 - ratio) + data1p * ratio) >> 8; - delta = audio_channel[2].per; - ratio = ((audio_channel[2].evtime % delta) << 8) / delta; - data0 += (data2 * (256 - ratio) + data2p * ratio) >> 8; - delta = audio_channel[3].per; - ratio = ((audio_channel[3].evtime % delta) << 8) / delta; - data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8; + /* linear interpolation and summing up... */ + delta = audio_channel[0].per; + ratio = ((audio_channel[0].evtime % delta) << 8) / delta; + data0 = (data0 * (256 - ratio) + data0p * ratio) >> 8; + delta = audio_channel[1].per; + ratio = ((audio_channel[1].evtime % delta) << 8) / delta; + data0 += (data1 * (256 - ratio) + data1p * ratio) >> 8; + delta = audio_channel[2].per; + ratio = ((audio_channel[2].evtime % delta) << 8) / delta; + data0 += (data2 * (256 - ratio) + data2p * ratio) >> 8; + delta = audio_channel[3].per; + ratio = ((audio_channel[3].evtime % delta) << 8) / delta; + data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8; data = data0; - data = FINISH_DATA (data, 16); - set_sound_buffers (); - PUT_SOUND_WORD_MONO (data); - check_sound_buffers(); + data = FINISH_DATA(data, 16); + set_sound_buffers(); + PUT_SOUND_WORD_MONO(data); + check_sound_buffers(); } -static void sample16i_crux_handler (void) +static void sample16i_crux_handler(void) { - uae_u32 data0 = audio_channel[0].current_sample; - uae_u32 data1 = audio_channel[1].current_sample; - uae_u32 data2 = audio_channel[2].current_sample; - uae_u32 data3 = audio_channel[3].current_sample; - uae_u32 data0p = audio_channel[0].last_sample; - uae_u32 data1p = audio_channel[1].last_sample; - uae_u32 data2p = audio_channel[2].last_sample; - uae_u32 data3p = audio_channel[3].last_sample; + uae_u32 data0 = audio_channel[0].current_sample; + uae_u32 data1 = audio_channel[1].current_sample; + uae_u32 data2 = audio_channel[2].current_sample; + uae_u32 data3 = audio_channel[3].current_sample; + uae_u32 data0p = audio_channel[0].last_sample; + uae_u32 data1p = audio_channel[1].last_sample; + uae_u32 data2p = audio_channel[2].last_sample; + uae_u32 data3p = audio_channel[3].last_sample; uae_u32 data; - DO_CHANNEL_1 (data0, 0); - DO_CHANNEL_1 (data1, 1); - DO_CHANNEL_1 (data2, 2); - DO_CHANNEL_1 (data3, 3); - DO_CHANNEL_1 (data0p, 0); - DO_CHANNEL_1 (data1p, 1); - DO_CHANNEL_1 (data2p, 2); - DO_CHANNEL_1 (data3p, 3); + DO_CHANNEL_1(data0, 0); + DO_CHANNEL_1(data1, 1); + DO_CHANNEL_1(data2, 2); + DO_CHANNEL_1(data3, 3); + DO_CHANNEL_1(data0p, 0); + DO_CHANNEL_1(data1p, 1); + DO_CHANNEL_1(data2p, 2); + DO_CHANNEL_1(data3p, 3); - data0 &= audio_channel[0].adk_mask; - data0p &= audio_channel[0].adk_mask; - data1 &= audio_channel[1].adk_mask; - data1p &= audio_channel[1].adk_mask; - data2 &= audio_channel[2].adk_mask; - data2p &= audio_channel[2].adk_mask; - data3 &= audio_channel[3].adk_mask; - data3p &= audio_channel[3].adk_mask; + data0 &= audio_channel[0].adk_mask; + data0p &= audio_channel[0].adk_mask; + data1 &= audio_channel[1].adk_mask; + data1p &= audio_channel[1].adk_mask; + data2 &= audio_channel[2].adk_mask; + data2p &= audio_channel[2].adk_mask; + data3 &= audio_channel[3].adk_mask; + data3p &= audio_channel[3].adk_mask; - { - struct audio_channel_data *cdp; - unsigned long ratio, ratio1; + { + struct audio_channel_data *cdp; + unsigned long ratio, ratio1; #define INTERVAL (scaled_sample_evtime * 3) - cdp = audio_channel + 0; - ratio1 = cdp->per - cdp->evtime; - ratio = (ratio1 << 12) / INTERVAL; - if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) - ratio = 4096; - data0 = (data0 * ratio + data0p * (4096 - ratio)) >> 12; + cdp = audio_channel + 0; + ratio1 = cdp->per - cdp->evtime; + ratio = (ratio1 << 12) / INTERVAL; + if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) + ratio = 4096; + data0 = (data0 * ratio + data0p * (4096 - ratio)) >> 12; - cdp = audio_channel + 1; - ratio1 = cdp->per - cdp->evtime; - ratio = (ratio1 << 12) / INTERVAL; - if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) - ratio = 4096; - data1 = (data1 * ratio + data1p * (4096 - ratio)) >> 12; + cdp = audio_channel + 1; + ratio1 = cdp->per - cdp->evtime; + ratio = (ratio1 << 12) / INTERVAL; + if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) + ratio = 4096; + data1 = (data1 * ratio + data1p * (4096 - ratio)) >> 12; - cdp = audio_channel + 2; - ratio1 = cdp->per - cdp->evtime; - ratio = (ratio1 << 12) / INTERVAL; - if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) - ratio = 4096; - data2 = (data2 * ratio + data2p * (4096 - ratio)) >> 12; + cdp = audio_channel + 2; + ratio1 = cdp->per - cdp->evtime; + ratio = (ratio1 << 12) / INTERVAL; + if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) + ratio = 4096; + data2 = (data2 * ratio + data2p * (4096 - ratio)) >> 12; - cdp = audio_channel + 3; - ratio1 = cdp->per - cdp->evtime; - ratio = (ratio1 << 12) / INTERVAL; - if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) - ratio = 4096; - data3 = (data3 * ratio + data3p * (4096 - ratio)) >> 12; - } - data1 += data2; - data0 += data3; - data0 += data1; + cdp = audio_channel + 3; + ratio1 = cdp->per - cdp->evtime; + ratio = (ratio1 << 12) / INTERVAL; + if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) + ratio = 4096; + data3 = (data3 * ratio + data3p * (4096 - ratio)) >> 12; + } + data1 += data2; + data0 += data3; + data0 += data1; data = data0; - data = FINISH_DATA (data, 16); - set_sound_buffers (); - PUT_SOUND_WORD_MONO (data); - check_sound_buffers (); + data = FINISH_DATA(data, 16); + set_sound_buffers(); + PUT_SOUND_WORD_MONO(data); + check_sound_buffers(); } #ifdef HAVE_STEREO_SUPPORT @@ -529,258 +532,258 @@ static void sample16i_crux_handler (void) /* This interpolator examines sample points when Paula switches the output * voltage and computes the average of Paula's output */ -static void sample16si_anti_handler (void) +static void sample16si_anti_handler(void) { - int datas[4], data1, data2; + int datas[4], data1, data2; - samplexx_anti_handler (datas); - data1 = datas[0] + datas[3]; - data2 = datas[1] + datas[2]; - data1 = FINISH_DATA (data1, 15); - data2 = FINISH_DATA (data2, 15); - set_sound_buffers (); - put_sound_word_stereo_func(data1, data2); - check_sound_buffers (); + samplexx_anti_handler(datas); + data1 = datas[0] + datas[3]; + data2 = datas[1] + datas[2]; + data1 = FINISH_DATA(data1, 15); + data2 = FINISH_DATA(data2, 15); + set_sound_buffers(); + put_sound_word_stereo_func(data1, data2); + check_sound_buffers(); } -static void sample16si_sinc_handler (void) +static void sample16si_sinc_handler(void) { - int datas[4], data1, data2; + int datas[4], data1, data2; - samplexx_sinc_handler (datas); - data1 = datas[0] + datas[3]; - data2 = datas[1] + datas[2]; - data1 = FINISH_DATA (data1, 17); - data2 = FINISH_DATA (data2, 17); - set_sound_buffers (); - put_sound_word_stereo_func(data1, data2); - check_sound_buffers (); + samplexx_sinc_handler(datas); + data1 = datas[0] + datas[3]; + data2 = datas[1] + datas[2]; + data1 = FINISH_DATA(data1, 17); + data2 = FINISH_DATA(data2, 17); + set_sound_buffers(); + put_sound_word_stereo_func(data1, data2); + check_sound_buffers(); } -void sample16s_handler (void) +void sample16s_handler(void) { - uae_u32 data_l = audio_channel[0].adk_mask ? audio_channel[0].current_sample * audio_channel[0].vol : 0; - uae_u32 data_r = audio_channel[1].adk_mask ? audio_channel[1].current_sample * audio_channel[1].vol : 0; - if(audio_channel[2].adk_mask) - data_r += audio_channel[2].current_sample * audio_channel[2].vol; - if(audio_channel[3].adk_mask) - data_l += audio_channel[3].current_sample * audio_channel[3].vol; - data_l = FINISH_DATA(data_l, 15); - data_r = FINISH_DATA(data_r, 15); + uae_u32 data_l = audio_channel[0].adk_mask ? audio_channel[0].current_sample * audio_channel[0].vol : 0; + uae_u32 data_r = audio_channel[1].adk_mask ? audio_channel[1].current_sample * audio_channel[1].vol : 0; + if (audio_channel[2].adk_mask) + data_r += audio_channel[2].current_sample * audio_channel[2].vol; + if (audio_channel[3].adk_mask) + data_l += audio_channel[3].current_sample * audio_channel[3].vol; + data_l = FINISH_DATA(data_l, 15); + data_r = FINISH_DATA(data_r, 15); - set_sound_buffers (); - put_sound_word_stereo_func(data_l, data_r); - check_sound_buffers(); + set_sound_buffers(); + put_sound_word_stereo_func(data_l, data_r); + check_sound_buffers(); } -static void sample16si_crux_handler (void) +static void sample16si_crux_handler(void) { - uae_u32 data0 = audio_channel[0].current_sample; - uae_u32 data1 = audio_channel[1].current_sample; - uae_u32 data2 = audio_channel[2].current_sample; - uae_u32 data3 = audio_channel[3].current_sample; - uae_u32 data0p = audio_channel[0].last_sample; - uae_u32 data1p = audio_channel[1].last_sample; - uae_u32 data2p = audio_channel[2].last_sample; - uae_u32 data3p = audio_channel[3].last_sample; + uae_u32 data0 = audio_channel[0].current_sample; + uae_u32 data1 = audio_channel[1].current_sample; + uae_u32 data2 = audio_channel[2].current_sample; + uae_u32 data3 = audio_channel[3].current_sample; + uae_u32 data0p = audio_channel[0].last_sample; + uae_u32 data1p = audio_channel[1].last_sample; + uae_u32 data2p = audio_channel[2].last_sample; + uae_u32 data3p = audio_channel[3].last_sample; - DO_CHANNEL_1 (data0, 0); - DO_CHANNEL_1 (data1, 1); - DO_CHANNEL_1 (data2, 2); - DO_CHANNEL_1 (data3, 3); - DO_CHANNEL_1 (data0p, 0); - DO_CHANNEL_1 (data1p, 1); - DO_CHANNEL_1 (data2p, 2); - DO_CHANNEL_1 (data3p, 3); + DO_CHANNEL_1(data0, 0); + DO_CHANNEL_1(data1, 1); + DO_CHANNEL_1(data2, 2); + DO_CHANNEL_1(data3, 3); + DO_CHANNEL_1(data0p, 0); + DO_CHANNEL_1(data1p, 1); + DO_CHANNEL_1(data2p, 2); + DO_CHANNEL_1(data3p, 3); - data0 &= audio_channel[0].adk_mask; - data0p &= audio_channel[0].adk_mask; - data1 &= audio_channel[1].adk_mask; - data1p &= audio_channel[1].adk_mask; - data2 &= audio_channel[2].adk_mask; - data2p &= audio_channel[2].adk_mask; - data3 &= audio_channel[3].adk_mask; - data3p &= audio_channel[3].adk_mask; + data0 &= audio_channel[0].adk_mask; + data0p &= audio_channel[0].adk_mask; + data1 &= audio_channel[1].adk_mask; + data1p &= audio_channel[1].adk_mask; + data2 &= audio_channel[2].adk_mask; + data2p &= audio_channel[2].adk_mask; + data3 &= audio_channel[3].adk_mask; + data3p &= audio_channel[3].adk_mask; - { - struct audio_channel_data *cdp; - unsigned long ratio, ratio1; + { + struct audio_channel_data *cdp; + unsigned long ratio, ratio1; #define INTERVAL (scaled_sample_evtime * 3) - cdp = audio_channel + 0; - ratio1 = cdp->per - cdp->evtime; - ratio = (ratio1 << 12) / INTERVAL; - if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) - ratio = 4096; - data0 = (data0 * ratio + data0p * (4096 - ratio)) >> 12; + cdp = audio_channel + 0; + ratio1 = cdp->per - cdp->evtime; + ratio = (ratio1 << 12) / INTERVAL; + if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) + ratio = 4096; + data0 = (data0 * ratio + data0p * (4096 - ratio)) >> 12; - cdp = audio_channel + 1; - ratio1 = cdp->per - cdp->evtime; - ratio = (ratio1 << 12) / INTERVAL; - if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) - ratio = 4096; - data1 = (data1 * ratio + data1p * (4096 - ratio)) >> 12; + cdp = audio_channel + 1; + ratio1 = cdp->per - cdp->evtime; + ratio = (ratio1 << 12) / INTERVAL; + if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) + ratio = 4096; + data1 = (data1 * ratio + data1p * (4096 - ratio)) >> 12; - cdp = audio_channel + 2; - ratio1 = cdp->per - cdp->evtime; - ratio = (ratio1 << 12) / INTERVAL; - if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) - ratio = 4096; - data2 = (data2 * ratio + data2p * (4096 - ratio)) >> 12; + cdp = audio_channel + 2; + ratio1 = cdp->per - cdp->evtime; + ratio = (ratio1 << 12) / INTERVAL; + if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) + ratio = 4096; + data2 = (data2 * ratio + data2p * (4096 - ratio)) >> 12; - cdp = audio_channel + 3; - ratio1 = cdp->per - cdp->evtime; - ratio = (ratio1 << 12) / INTERVAL; - if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) - ratio = 4096; - data3 = (data3 * ratio + data3p * (4096 - ratio)) >> 12; - } - data1 += data2; - data0 += data3; - data0 = FINISH_DATA (data0, 15); - data1 = FINISH_DATA (data1, 15); - set_sound_buffers (); - put_sound_word_stereo_func(data0, data1); - check_sound_buffers (); + cdp = audio_channel + 3; + ratio1 = cdp->per - cdp->evtime; + ratio = (ratio1 << 12) / INTERVAL; + if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) + ratio = 4096; + data3 = (data3 * ratio + data3p * (4096 - ratio)) >> 12; + } + data1 += data2; + data0 += data3; + data0 = FINISH_DATA(data0, 15); + data1 = FINISH_DATA(data1, 15); + set_sound_buffers(); + put_sound_word_stereo_func(data0, data1); + check_sound_buffers(); } -static void sample16si_rh_handler (void) +static void sample16si_rh_handler(void) { - unsigned long delta, ratio; + unsigned long delta, ratio; - uae_u32 data0 = audio_channel[0].current_sample; - uae_u32 data1 = audio_channel[1].current_sample; - uae_u32 data2 = audio_channel[2].current_sample; - uae_u32 data3 = audio_channel[3].current_sample; - uae_u32 data0p = audio_channel[0].last_sample; - uae_u32 data1p = audio_channel[1].last_sample; - uae_u32 data2p = audio_channel[2].last_sample; - uae_u32 data3p = audio_channel[3].last_sample; + uae_u32 data0 = audio_channel[0].current_sample; + uae_u32 data1 = audio_channel[1].current_sample; + uae_u32 data2 = audio_channel[2].current_sample; + uae_u32 data3 = audio_channel[3].current_sample; + uae_u32 data0p = audio_channel[0].last_sample; + uae_u32 data1p = audio_channel[1].last_sample; + uae_u32 data2p = audio_channel[2].last_sample; + uae_u32 data3p = audio_channel[3].last_sample; - DO_CHANNEL_1 (data0, 0); - DO_CHANNEL_1 (data1, 1); - DO_CHANNEL_1 (data2, 2); - DO_CHANNEL_1 (data3, 3); - DO_CHANNEL_1 (data0p, 0); - DO_CHANNEL_1 (data1p, 1); - DO_CHANNEL_1 (data2p, 2); - DO_CHANNEL_1 (data3p, 3); + DO_CHANNEL_1(data0, 0); + DO_CHANNEL_1(data1, 1); + DO_CHANNEL_1(data2, 2); + DO_CHANNEL_1(data3, 3); + DO_CHANNEL_1(data0p, 0); + DO_CHANNEL_1(data1p, 1); + DO_CHANNEL_1(data2p, 2); + DO_CHANNEL_1(data3p, 3); - data0 &= audio_channel[0].adk_mask; - data0p &= audio_channel[0].adk_mask; - data1 &= audio_channel[1].adk_mask; - data1p &= audio_channel[1].adk_mask; - data2 &= audio_channel[2].adk_mask; - data2p &= audio_channel[2].adk_mask; - data3 &= audio_channel[3].adk_mask; - data3p &= audio_channel[3].adk_mask; + data0 &= audio_channel[0].adk_mask; + data0p &= audio_channel[0].adk_mask; + data1 &= audio_channel[1].adk_mask; + data1p &= audio_channel[1].adk_mask; + data2 &= audio_channel[2].adk_mask; + data2p &= audio_channel[2].adk_mask; + data3 &= audio_channel[3].adk_mask; + data3p &= audio_channel[3].adk_mask; - /* linear interpolation and summing up... */ - delta = audio_channel[0].per; - ratio = ((audio_channel[0].evtime % delta) << 8) / delta; - data0 = (data0 * (256 - ratio) + data0p * ratio) >> 8; - delta = audio_channel[1].per; - ratio = ((audio_channel[1].evtime % delta) << 8) / delta; - data1 = (data1 * (256 - ratio) + data1p * ratio) >> 8; - delta = audio_channel[2].per; - ratio = ((audio_channel[2].evtime % delta) << 8) / delta; - data1 += (data2 * (256 - ratio) + data2p * ratio) >> 8; - delta = audio_channel[3].per; - ratio = ((audio_channel[3].evtime % delta) << 8) / delta; - data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8; - data0 = FINISH_DATA (data0, 15); - data1 = FINISH_DATA (data1, 15); - set_sound_buffers (); - put_sound_word_stereo_func(data0, data1); - check_sound_buffers (); + /* linear interpolation and summing up... */ + delta = audio_channel[0].per; + ratio = ((audio_channel[0].evtime % delta) << 8) / delta; + data0 = (data0 * (256 - ratio) + data0p * ratio) >> 8; + delta = audio_channel[1].per; + ratio = ((audio_channel[1].evtime % delta) << 8) / delta; + data1 = (data1 * (256 - ratio) + data1p * ratio) >> 8; + delta = audio_channel[2].per; + ratio = ((audio_channel[2].evtime % delta) << 8) / delta; + data1 += (data2 * (256 - ratio) + data2p * ratio) >> 8; + delta = audio_channel[3].per; + ratio = ((audio_channel[3].evtime % delta) << 8) / delta; + data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8; + data0 = FINISH_DATA(data0, 15); + data1 = FINISH_DATA(data1, 15); + set_sound_buffers(); + put_sound_word_stereo_func(data0, data1); + check_sound_buffers(); } #else -void sample16s_handler (void) +void sample16s_handler(void) { - sample16_handler (); + sample16_handler(); } -static void sample16si_crux_handler (void) +static void sample16si_crux_handler(void) { - sample16i_crux_handler (); + sample16i_crux_handler(); } -static void sample16si_rh_handler (void) +static void sample16si_rh_handler(void) { - sample16i_rh_handler (); + sample16i_rh_handler(); } #endif static int audio_work_to_do; -static void zerostate (int nr) +static void zerostate(int nr) { struct audio_channel_data *cdp = audio_channel + nr; - cdp->state = 0; - cdp->evtime = MAX_EV; + cdp->state = 0; + cdp->evtime = MAX_EV; cdp->intreq2 = 0; cdp->dmaenstore = false; cdp->dmaofftime_active = 0; } -static void schedule_audio (void) +static void schedule_audio(void) { unsigned long best = MAX_EV; - int i; + int i; eventtab[ev_audio].active = 0; - for (i = 0; i < 4; i++) { - struct audio_channel_data *cdp = audio_channel + i; + for (i = 0; i < 4; i++) { + struct audio_channel_data *cdp = audio_channel + i; if (cdp->evtime != MAX_EV) { if (best > cdp->evtime) { best = cdp->evtime; - eventtab[ev_audio].active = 1; - } - } - } + eventtab[ev_audio].active = 1; + } + } + } - eventtab[ev_audio].evtime = get_cycles () + best; + eventtab[ev_audio].evtime = get_cycles() + best; } -static void audio_event_reset (void) +static void audio_event_reset(void) { int i; - last_cycles = get_cycles (); + last_cycles = get_cycles(); next_sample_evtime = scaled_sample_evtime; - if (!isrestore ()) { - for (i = 0; i < 4; i++) - zerostate (i); + if (!isrestore()) { + for (i = 0; i < 4; i++) + zerostate(i); } - schedule_audio (); - events_schedule (); + schedule_audio(); + events_schedule(); } void audio_deactivate(void) { - gui_data.sndbuf_status = 3; - gui_data.sndbuf = 0; + gui_data.sndbuf_status = 3; + gui_data.sndbuf = 0; audio_work_to_do = 0; - pause_sound_buffer (); - clear_sound_buffers(); - audio_event_reset(); + pause_sound_buffer(); + clear_sound_buffers(); + audio_event_reset(); } int audio_activate(void) { - int ret = 0; - if (!audio_work_to_do) { - restart_sound_buffer(); - ret = 1; - audio_event_reset(); - } - audio_work_to_do = 4 * maxvpos_nom * 50; - return ret; + int ret = 0; + if (!audio_work_to_do) { + restart_sound_buffer(); + ret = 1; + audio_event_reset(); + } + audio_work_to_do = 4 * maxvpos_nom * 50; + return ret; } STATIC_INLINE int is_audio_active(void) { - return audio_work_to_do; + return audio_work_to_do; } -uae_u16 audio_dmal (void) +uae_u16 audio_dmal(void) { uae_u16 dmal = 0; for (int nr = 0; nr < 4; nr++) { @@ -794,24 +797,24 @@ uae_u16 audio_dmal (void) return dmal; } -static int isirq (int nr) +static int isirq(int nr) { - return INTREQR() & (0x80 << nr); + return INTREQR() & (0x80 << nr); } -static void setirq (int nr, int which) +static void setirq(int nr, int which) { - INTREQ_0 (0x8000 | (0x80 << nr)); + INTREQ_0(0x8000 | (0x80 << nr)); } -static void newsample (int nr, sample8_t sample) +static void newsample(int nr, sample8_t sample) { struct audio_channel_data *cdp = audio_channel + nr; - cdp->last_sample = cdp->current_sample; - cdp->current_sample = sample; + cdp->last_sample = cdp->current_sample; + cdp->current_sample = sample; } -STATIC_INLINE void setdr (int nr) +STATIC_INLINE void setdr(int nr) { struct audio_channel_data *cdp = audio_channel + nr; cdp->dr = true; @@ -820,7 +823,7 @@ STATIC_INLINE void setdr (int nr) } } -static void loaddat (int nr, bool modper) +static void loaddat(int nr, bool modper) { struct audio_channel_data *cdp = audio_channel + nr; int audav = adkcon & (0x01 << nr); @@ -835,32 +838,34 @@ static void loaddat (int nr, bool modper) cdp[1].per = cdp->dat * CYCLE_UNIT; else cdp[1].per = PERIOD_MIN * CYCLE_UNIT; - } else if (audav) { + } + else if (audav) { cdp[1].vol = cdp->dat; cdp[1].vol &= 127; if (cdp[1].vol > 64) cdp[1].vol = 64; } - } else { + } + else { cdp->dat2 = cdp->dat; } } -static void loaddat (int nr) +static void loaddat(int nr) { - loaddat (nr, false); + loaddat(nr, false); } -STATIC_INLINE void loadper (int nr) +STATIC_INLINE void loadper(int nr) { struct audio_channel_data *cdp = audio_channel + nr; cdp->evtime = cdp->per; if (cdp->evtime < CYCLE_UNIT) - write_log (_T("LOADPER%d bug %d\n"), nr, cdp->evtime); + write_log(_T("LOADPER%d bug %d\n"), nr, cdp->evtime); } -static void audio_state_channel2 (int nr, bool perfin) +static void audio_state_channel2(int nr, bool perfin) { struct audio_channel_data *cdp = audio_channel + nr; bool chan_ena = (dmacon & DMA_MASTER) && (dmacon & (1 << nr)); @@ -868,29 +873,29 @@ static void audio_state_channel2 (int nr, bool perfin) int audav = adkcon & (0x01 << nr); int audap = adkcon & (0x10 << nr); int napnav = (!audav && !audap) || audav; - int hpos = current_hpos (); + int hpos = current_hpos(); cdp->dmaenstore = chan_ena; if (currprefs.produce_sound == 0) { - zerostate (nr); + zerostate(nr); return; } - audio_activate (); + audio_activate(); if ((cdp->state == 2 || cdp->state == 3) && usehacks()) { - if (!chan_ena && old_dma) { - // DMA switched off, state=2/3 and "too fast CPU": set flag + if (!chan_ena && old_dma) { + // DMA switched off, state=2/3 and "too fast CPU": set flag cdp->dmaofftime_active = true; } if (cdp->dmaofftime_active && !old_dma && chan_ena) { // We are still in state=2/3 and program is going to re-enable // DMA. Force state to zero to prevent CPU timed DMA wait // routines in common tracker players to lose notes. - newsample (nr, (cdp->dat2 >> 0) & 0xff); -// if (napnav) -// setirq (nr, 91); - zerostate (nr); + newsample(nr, (cdp->dat2 >> 0) & 0xff); + // if (napnav) + // setirq (nr, 91); + zerostate(nr); } } @@ -909,32 +914,35 @@ static void audio_state_channel2 (int nr, bool perfin) if (cdp->wlen > 2) cdp->ptx_tofetch = true; cdp->dsr = true; - } else if (cdp->dat_written && !isirq (nr)) { + } + else if (cdp->dat_written && !isirq(nr)) { cdp->state = 2; - setirq (nr, 0); - loaddat (nr); + setirq(nr, 0); + loaddat(nr); if (usehacks() && cdp->per < 10 * CYCLE_UNIT) { // make sure audio.device AUDxDAT startup returns to idle state before DMA is enabled - newsample (nr, (cdp->dat2 >> 0) & 0xff); - zerostate (nr); - } else { - cdp->pbufldl = true; - audio_state_channel2 (nr, false); + newsample(nr, (cdp->dat2 >> 0) & 0xff); + zerostate(nr); } - } else { - zerostate (nr); + else { + cdp->pbufldl = true; + audio_state_channel2(nr, false); + } + } + else { + zerostate(nr); } break; case 1: cdp->evtime = MAX_EV; if (!chan_ena) { - zerostate (nr); + zerostate(nr); return; } if (!cdp->dat_written) return; - setirq (nr, 10); - setdr (nr); + setirq(nr, 10); + setdr(nr); if (cdp->wlen != 1) cdp->wlen = (cdp->wlen - 1) & 0xffff; cdp->state = 5; @@ -942,7 +950,7 @@ static void audio_state_channel2 (int nr, bool perfin) case 5: cdp->evtime = MAX_EV; if (!chan_ena) { - zerostate (nr); + zerostate(nr); return; } if (!cdp->dat_written) @@ -951,126 +959,128 @@ static void audio_state_channel2 (int nr, bool perfin) cdp->ptx_written = 0; cdp->lc = cdp->ptx; } - loaddat (nr); + loaddat(nr); if (napnav) - setdr (nr); + setdr(nr); cdp->state = 2; - loadper (nr); + loadper(nr); cdp->pbufldl = true; cdp->intreq2 = 0; - audio_state_channel2 (nr, false); + audio_state_channel2(nr, false); break; case 2: if (cdp->pbufldl) { - newsample (nr, (cdp->dat2 >> 8) & 0xff); - loadper (nr); + newsample(nr, (cdp->dat2 >> 8) & 0xff); + loadper(nr); cdp->pbufldl = false; } if (!perfin) return; if (audap) - loaddat (nr, true); + loaddat(nr, true); if (chan_ena) { if (audap) - setdr (nr); + setdr(nr); if (cdp->intreq2 && audap) - setirq (nr, 21); - } else { + setirq(nr, 21); + } + else { if (audap) - setirq (nr, 22); + setirq(nr, 22); } cdp->pbufldl = true; cdp->state = 3; - audio_state_channel2 (nr, false); + audio_state_channel2(nr, false); break; case 3: if (cdp->pbufldl) { - newsample (nr, (cdp->dat2 >> 0) & 0xff); - loadper (nr); + newsample(nr, (cdp->dat2 >> 0) & 0xff); + loadper(nr); cdp->pbufldl = false; } if (!perfin) return; if (chan_ena) { - loaddat (nr); + loaddat(nr); if (cdp->intreq2 && napnav) - setirq (nr, 31); + setirq(nr, 31); if (napnav) - setdr (nr); - } else { - if (isirq (nr)) { - zerostate (nr); + setdr(nr); + } + else { + if (isirq(nr)) { + zerostate(nr); return; } - loaddat (nr); + loaddat(nr); if (napnav) - setirq (nr, 32); + setirq(nr, 32); } cdp->intreq2 = 0; cdp->pbufldl = true; cdp->state = 2; - audio_state_channel2 (nr, false); + audio_state_channel2(nr, false); break; } } -static void audio_state_channel (int nr, bool perfin) +static void audio_state_channel(int nr, bool perfin) { struct audio_channel_data *cdp = audio_channel + nr; - audio_state_channel2 (nr, perfin); + audio_state_channel2(nr, perfin); cdp->dat_written = false; } -void audio_state_machine (void) +void audio_state_machine(void) { - update_audio (); + update_audio(); for (int nr = 0; nr < 4; nr++) { struct audio_channel_data *cdp = audio_channel + nr; - audio_state_channel2 (nr, false); + audio_state_channel2(nr, false); cdp->dat_written = false; } - schedule_audio (); - events_schedule (); + schedule_audio(); + events_schedule(); } -void audio_reset (void) +void audio_reset(void) { - int i; - struct audio_channel_data *cdp; + int i; + struct audio_channel_data *cdp; - reset_sound (); - memset(sound_filter_state, 0, sizeof sound_filter_state); - if (!isrestore ()) { - for (i = 0; i < 4; i++) { - cdp = &audio_channel[i]; - memset (cdp, 0, sizeof *audio_channel); - cdp->per = PERIOD_MAX - 1; - cdp->vol = 0; - cdp->evtime = MAX_EV; - } - } + reset_sound(); + memset(sound_filter_state, 0, sizeof sound_filter_state); + if (!isrestore()) { + for (i = 0; i < 4; i++) { + cdp = &audio_channel[i]; + memset(cdp, 0, sizeof *audio_channel); + cdp->per = PERIOD_MAX - 1; + cdp->vol = 0; + cdp->evtime = MAX_EV; + } + } - last_cycles = get_cycles (); - next_sample_evtime = scaled_sample_evtime; + last_cycles = get_cycles(); + next_sample_evtime = scaled_sample_evtime; - schedule_audio (); - events_schedule (); + schedule_audio(); + events_schedule(); } -static int sound_prefs_changed (void) +static int sound_prefs_changed(void) { - if (changed_prefs.produce_sound != currprefs.produce_sound - || changed_prefs.sound_stereo != currprefs.sound_stereo - || changed_prefs.sound_freq != currprefs.sound_freq) - return 1; + if (changed_prefs.produce_sound != currprefs.produce_sound + || changed_prefs.sound_stereo != currprefs.sound_stereo + || changed_prefs.sound_freq != currprefs.sound_freq) + return 1; - if (changed_prefs.sound_stereo_separation != currprefs.sound_stereo_separation - || changed_prefs.sound_mixed_stereo_delay != currprefs.sound_mixed_stereo_delay - || changed_prefs.sound_interpol != currprefs.sound_interpol - || changed_prefs.sound_filter != currprefs.sound_filter - || changed_prefs.sound_filter_type != currprefs.sound_filter_type) - return -1; - return 0; + if (changed_prefs.sound_stereo_separation != currprefs.sound_stereo_separation + || changed_prefs.sound_mixed_stereo_delay != currprefs.sound_mixed_stereo_delay + || changed_prefs.sound_interpol != currprefs.sound_interpol + || changed_prefs.sound_filter != currprefs.sound_filter + || changed_prefs.sound_filter_type != currprefs.sound_filter_type) + return -1; + return 0; } /* This computes the 1st order low-pass filter term b0. @@ -1080,252 +1090,257 @@ static int sound_prefs_changed (void) #endif static float rc_calculate_a0(int sample_rate, int cutoff_freq) { - float omega; - /* The BLT correction formula below blows up if the cutoff is above nyquist. */ - if (cutoff_freq >= sample_rate / 2) - return 1.0; + float omega; + /* The BLT correction formula below blows up if the cutoff is above nyquist. */ + if (cutoff_freq >= sample_rate / 2) + return 1.0; - omega = 2 * M_PI * cutoff_freq / sample_rate; - /* Compensate for the bilinear transformation. This allows us to specify the - * stop frequency more exactly, but the filter becomes less steep further - * from stopband. */ - omega = tan(omega / 2) * 2; - return 1 / (1 + 1 / omega); + omega = 2 * M_PI * cutoff_freq / sample_rate; + /* Compensate for the bilinear transformation. This allows us to specify the + * stop frequency more exactly, but the filter becomes less steep further + * from stopband. */ + omega = tan(omega / 2) * 2; + return 1 / (1 + 1 / omega); } -void check_prefs_changed_audio (void) +void check_prefs_changed_audio(void) { - int ch; + int ch; - if (sound_available) { - ch = sound_prefs_changed (); + if (sound_available) { + ch = sound_prefs_changed(); if (ch > 0) { - clear_sound_buffers (); + clear_sound_buffers(); } if (ch) { - set_audio (); - audio_activate (); + set_audio(); + audio_activate(); } } } void set_audio(void) { - int old_mixed_size = mixed_stereo_size; - int sep, delay; - int ch; + int old_mixed_size = mixed_stereo_size; + int sep, delay; + int ch; - ch = sound_prefs_changed (); - if (ch >= 0) - close_sound (); + ch = sound_prefs_changed(); + if (ch >= 0) + close_sound(); currprefs.produce_sound = changed_prefs.produce_sound; currprefs.sound_stereo = changed_prefs.sound_stereo; currprefs.sound_freq = changed_prefs.sound_freq; - currprefs.sound_stereo_separation = changed_prefs.sound_stereo_separation; - currprefs.sound_mixed_stereo_delay = changed_prefs.sound_mixed_stereo_delay; + currprefs.sound_stereo_separation = changed_prefs.sound_stereo_separation; + currprefs.sound_mixed_stereo_delay = changed_prefs.sound_mixed_stereo_delay; currprefs.sound_interpol = changed_prefs.sound_interpol; - currprefs.sound_filter = changed_prefs.sound_filter; - currprefs.sound_filter_type = changed_prefs.sound_filter_type; + currprefs.sound_filter = changed_prefs.sound_filter; + currprefs.sound_filter_type = changed_prefs.sound_filter_type; - if (ch >= 0) { - if (currprefs.produce_sound >= 2) { - if (!init_audio ()) { - if (! sound_available) { - write_log (_T("Sound is not supported.\n")); - } else { - write_log (_T("Sorry, can't initialize sound.\n")); - currprefs.produce_sound = 1; - /* So we don't do this every frame */ - changed_prefs.produce_sound = 1; - } - } - } - next_sample_evtime = scaled_sample_evtime; - last_cycles = get_cycles (); - compute_vsynctime (); - } else { - sound_volume (0); - } + if (ch >= 0) { + if (currprefs.produce_sound >= 2) { + if (!init_audio()) { + if (!sound_available) { + write_log(_T("Sound is not supported.\n")); + } + else { + write_log(_T("Sorry, can't initialize sound.\n")); + currprefs.produce_sound = 1; + /* So we don't do this every frame */ + changed_prefs.produce_sound = 1; + } + } + } + next_sample_evtime = scaled_sample_evtime; + last_cycles = get_cycles(); + compute_vsynctime(); + } + else { + sound_volume(0); + } - sep = (currprefs.sound_stereo_separation = changed_prefs.sound_stereo_separation) * 3 / 2; - if (sep >= 15) - sep = 16; - delay = currprefs.sound_mixed_stereo_delay = changed_prefs.sound_mixed_stereo_delay; - mixed_mul1 = MIXED_STEREO_SCALE / 2 - sep; - mixed_mul2 = MIXED_STEREO_SCALE / 2 + sep; + sep = (currprefs.sound_stereo_separation = changed_prefs.sound_stereo_separation) * 3 / 2; + if (sep >= 15) + sep = 16; + delay = currprefs.sound_mixed_stereo_delay = changed_prefs.sound_mixed_stereo_delay; + mixed_mul1 = MIXED_STEREO_SCALE / 2 - sep; + mixed_mul2 = MIXED_STEREO_SCALE / 2 + sep; mixed_stereo_size = delay > 0 ? (1 << delay) - 1 : 0; mixed_on = sep < MIXED_STEREO_MAX || mixed_stereo_size > 0; - if (mixed_on && old_mixed_size != mixed_stereo_size) { - saved_ptr = 0; - memset (right_word_saved, 0, sizeof right_word_saved); - } + if (mixed_on && old_mixed_size != mixed_stereo_size) { + saved_ptr = 0; + memset(right_word_saved, 0, sizeof right_word_saved); + } - led_filter_forced = -1; // always off - sound_use_filter = sound_use_filter_sinc = 0; - if (currprefs.sound_filter) { - if (currprefs.sound_filter == FILTER_SOUND_ON) - led_filter_forced = 1; - if (currprefs.sound_filter == FILTER_SOUND_EMUL) - led_filter_forced = 0; - if (currprefs.sound_filter_type == FILTER_SOUND_TYPE_A500) - sound_use_filter = FILTER_MODEL_A500; - else if (currprefs.sound_filter_type == FILTER_SOUND_TYPE_A1200) - sound_use_filter = FILTER_MODEL_A1200; - } - a500e_filter1_a0 = rc_calculate_a0(currprefs.sound_freq, 6200); - a500e_filter2_a0 = rc_calculate_a0(currprefs.sound_freq, 20000); - filter_a0 = rc_calculate_a0(currprefs.sound_freq, 7000); - led_filter_audio(); + led_filter_forced = -1; // always off + sound_use_filter = sound_use_filter_sinc = 0; + if (currprefs.sound_filter) { + if (currprefs.sound_filter == FILTER_SOUND_ON) + led_filter_forced = 1; + if (currprefs.sound_filter == FILTER_SOUND_EMUL) + led_filter_forced = 0; + if (currprefs.sound_filter_type == FILTER_SOUND_TYPE_A500) + sound_use_filter = FILTER_MODEL_A500; + else if (currprefs.sound_filter_type == FILTER_SOUND_TYPE_A1200) + sound_use_filter = FILTER_MODEL_A1200; + } + a500e_filter1_a0 = rc_calculate_a0(currprefs.sound_freq, 6200); + a500e_filter2_a0 = rc_calculate_a0(currprefs.sound_freq, 20000); + filter_a0 = rc_calculate_a0(currprefs.sound_freq, 7000); + led_filter_audio(); - /* Select the right interpolation method. */ - if (sample_handler == sample16_handler - || sample_handler == sample16i_crux_handler - || sample_handler == sample16i_rh_handler - || sample_handler == sample16i_sinc_handler - || sample_handler == sample16i_anti_handler) + /* Select the right interpolation method. */ + if (sample_handler == sample16_handler + || sample_handler == sample16i_crux_handler + || sample_handler == sample16i_rh_handler + || sample_handler == sample16i_sinc_handler + || sample_handler == sample16i_anti_handler) { - sample_handler = (currprefs.sound_interpol == 0 ? sample16_handler - : currprefs.sound_interpol == 3 ? sample16i_rh_handler - : currprefs.sound_interpol == 4 ? sample16i_crux_handler - : currprefs.sound_interpol == 2 ? sample16i_sinc_handler - : sample16i_anti_handler); - } else if (sample_handler == sample16s_handler - || sample_handler == sample16si_crux_handler - || sample_handler == sample16si_rh_handler - || sample_handler == sample16si_sinc_handler - || sample_handler == sample16si_anti_handler) - { - sample_handler = (currprefs.sound_interpol == 0 ? sample16s_handler - : currprefs.sound_interpol == 3 ? sample16si_rh_handler - : currprefs.sound_interpol == 4 ? sample16si_crux_handler - : currprefs.sound_interpol == 2 ? sample16si_sinc_handler - : sample16si_anti_handler); - } - sample_prehandler = NULL; - if (sample_handler == sample16si_sinc_handler || sample_handler == sample16i_sinc_handler) { - sample_prehandler = sinc_prehandler; - sound_use_filter_sinc = sound_use_filter; - sound_use_filter = 0; - } else if (sample_handler == sample16si_anti_handler || sample_handler == sample16i_anti_handler) { - sample_prehandler = anti_prehandler; - } + sample_handler = (currprefs.sound_interpol == 0 ? sample16_handler + : currprefs.sound_interpol == 3 ? sample16i_rh_handler + : currprefs.sound_interpol == 4 ? sample16i_crux_handler + : currprefs.sound_interpol == 2 ? sample16i_sinc_handler + : sample16i_anti_handler); + } + else if (sample_handler == sample16s_handler + || sample_handler == sample16si_crux_handler + || sample_handler == sample16si_rh_handler + || sample_handler == sample16si_sinc_handler + || sample_handler == sample16si_anti_handler) + { + sample_handler = (currprefs.sound_interpol == 0 ? sample16s_handler + : currprefs.sound_interpol == 3 ? sample16si_rh_handler + : currprefs.sound_interpol == 4 ? sample16si_crux_handler + : currprefs.sound_interpol == 2 ? sample16si_sinc_handler + : sample16si_anti_handler); + } + sample_prehandler = NULL; + if (sample_handler == sample16si_sinc_handler || sample_handler == sample16i_sinc_handler) { + sample_prehandler = sinc_prehandler; + sound_use_filter_sinc = sound_use_filter; + sound_use_filter = 0; + } + else if (sample_handler == sample16si_anti_handler || sample_handler == sample16i_anti_handler) { + sample_prehandler = anti_prehandler; + } - if(currprefs.sound_stereo) { - if(currprefs.sound_filter) { - if(mixed_on) - put_sound_word_stereo_func = put_sound_word_stereo_func_filter_mixed; - else - put_sound_word_stereo_func = put_sound_word_stereo_func_filter_notmixed; - } - else { - if(mixed_on) - put_sound_word_stereo_func = put_sound_word_stereo_func_nofilter_mixed; - else - put_sound_word_stereo_func = put_sound_word_stereo_func_nofilter_notmixed; - } - } - else { - if(currprefs.sound_filter) { - put_sound_word_mono_func = put_sound_word_mono_func_filter; - } - else { - put_sound_word_mono_func = put_sound_word_mono_func_nofilter; - } - } + if (currprefs.sound_stereo) { + if (currprefs.sound_filter) { + if (mixed_on) + put_sound_word_stereo_func = put_sound_word_stereo_func_filter_mixed; + else + put_sound_word_stereo_func = put_sound_word_stereo_func_filter_notmixed; + } + else { + if (mixed_on) + put_sound_word_stereo_func = put_sound_word_stereo_func_nofilter_mixed; + else + put_sound_word_stereo_func = put_sound_word_stereo_func_nofilter_notmixed; + } + } + else { + if (currprefs.sound_filter) { + put_sound_word_mono_func = put_sound_word_mono_func_filter; + } + else { + put_sound_word_mono_func = put_sound_word_mono_func_nofilter; + } + } - if (currprefs.produce_sound == 0) { - eventtab[ev_audio].active = 0; - events_schedule (); - } else { - audio_activate (); - schedule_audio (); - events_schedule (); - } + if (currprefs.produce_sound == 0) { + eventtab[ev_audio].active = 0; + events_schedule(); + } + else { + audio_activate(); + schedule_audio(); + events_schedule(); + } } -void update_audio (void) +void update_audio(void) { - unsigned long int n_cycles = 0; + unsigned long int n_cycles = 0; - if (!isaudio()) - goto end; - if (isrestore ()) - goto end; - if (!is_audio_active()) - goto end; + if (!isaudio()) + goto end; + if (isrestore()) + goto end; + if (!is_audio_active()) + goto end; - n_cycles = get_cycles () - last_cycles; - while (n_cycles > 0) { + n_cycles = get_cycles() - last_cycles; + while (n_cycles > 0) { unsigned long int best_evtime = n_cycles; - unsigned long rounded; - int i; + unsigned long rounded; + int i; - for (i = 0; i < 4; i++) { - if (audio_channel[i].evtime != MAX_EV && best_evtime > audio_channel[i].evtime) - best_evtime = audio_channel[i].evtime; - } + for (i = 0; i < 4; i++) { + if (audio_channel[i].evtime != MAX_EV && best_evtime > audio_channel[i].evtime) + best_evtime = audio_channel[i].evtime; + } - rounded = next_sample_evtime; + rounded = next_sample_evtime; - if (currprefs.produce_sound > 1 && best_evtime > rounded) - best_evtime = rounded; + if (currprefs.produce_sound > 1 && best_evtime > rounded) + best_evtime = rounded; - /* Decrease time-to-wait counters */ - next_sample_evtime -= best_evtime; + /* Decrease time-to-wait counters */ + next_sample_evtime -= best_evtime; - if (sample_prehandler && (currprefs.produce_sound > 1)) { - sample_prehandler(best_evtime / CYCLE_UNIT); - } + if (sample_prehandler && (currprefs.produce_sound > 1)) { + sample_prehandler(best_evtime / CYCLE_UNIT); + } - for (i = 0; i < 4; i++) { - if (audio_channel[i].evtime != MAX_EV) - audio_channel[i].evtime -= best_evtime; - } + for (i = 0; i < 4; i++) { + if (audio_channel[i].evtime != MAX_EV) + audio_channel[i].evtime -= best_evtime; + } - n_cycles -= best_evtime; + n_cycles -= best_evtime; - /* Test if new sample needs to be outputted */ - if ((rounded == best_evtime) && (currprefs.produce_sound > 1)) { - next_sample_evtime += scaled_sample_evtime; - (*sample_handler) (); - } + /* Test if new sample needs to be outputted */ + if ((rounded == best_evtime) && (currprefs.produce_sound > 1)) { + next_sample_evtime += scaled_sample_evtime; + (*sample_handler)(); + } - for (i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { if (audio_channel[i].evtime == 0) { - audio_state_channel (i, true); + audio_state_channel(i, true); if (audio_channel[i].evtime == 0) { - write_log (_T("evtime==0 sound bug channel %d\n"), i); + write_log(_T("evtime==0 sound bug channel %d\n"), i); audio_channel[i].evtime = MAX_EV; } } - } + } } end: - last_cycles = get_cycles () - n_cycles; + last_cycles = get_cycles() - n_cycles; } -void audio_evhandler (void) +void audio_evhandler(void) { - update_audio (); - schedule_audio (); + update_audio(); + schedule_audio(); } -void audio_hsync (void) +void audio_hsync(void) { - if (!isaudio()) - return; + if (!isaudio()) + return; if (audio_work_to_do > 0) { - audio_work_to_do--; - if (audio_work_to_do == 0) - audio_deactivate(); - } + audio_work_to_do--; + if (audio_work_to_do == 0) + audio_deactivate(); + } - update_audio(); + update_audio(); } -void AUDxDAT (int nr, uae_u16 v) +void AUDxDAT(int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; int chan_ena = (dmacon & DMA_MASTER) && (dmacon & (1 << nr)); @@ -1337,70 +1352,74 @@ void AUDxDAT (int nr, uae_u16 v) if (cdp->wlen == 1) { cdp->wlen = cdp->len; cdp->intreq2 = true; - } else { + } + else { cdp->wlen = (cdp->wlen - 1) & 0xffff; } } - } else { - audio_activate (); - update_audio (); - audio_state_channel (nr, false); - schedule_audio (); - events_schedule (); + } + else { + audio_activate(); + update_audio(); + audio_state_channel(nr, false); + schedule_audio(); + events_schedule(); } cdp->dat_written = false; } -void audio_dmal_do (int nr, bool reset) +void audio_dmal_do(int nr, bool reset) { struct audio_channel_data *cdp = audio_channel + nr; - uae_u16 dat = chipmem_wget_indirect (cdp->pt); - cdp->pt += 2; + uae_u16 dat = chipmem_wget_indirect(cdp->pt); + cdp->pt += 2; if (reset) cdp->pt = cdp->lc; cdp->ptx_tofetch = false; - AUDxDAT (nr, dat); + AUDxDAT(nr, dat); } -void AUDxLCH (int nr, uae_u16 v) +void AUDxLCH(int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; - audio_activate(); - update_audio (); - // someone wants to update PT but DSR has not yet been processed. - // too fast CPU and some tracker players: enable DMA, CPU delay, update AUDxPT with loop position + audio_activate(); + update_audio(); + // someone wants to update PT but DSR has not yet been processed. + // too fast CPU and some tracker players: enable DMA, CPU delay, update AUDxPT with loop position if (usehacks() && ((cdp->ptx_tofetch && cdp->state == 1) || cdp->ptx_written)) { cdp->ptx = cdp->lc; cdp->ptx_written = true; - } else { - cdp->lc = (cdp->lc & 0xffff) | ((uae_u32)v << 16); - } + } + else { + cdp->lc = (cdp->lc & 0xffff) | ((uae_u32)v << 16); + } } -void AUDxLCL (int nr, uae_u16 v) +void AUDxLCL(int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; - audio_activate(); - update_audio (); + audio_activate(); + update_audio(); if (usehacks() && ((cdp->ptx_tofetch && cdp->state == 1) || cdp->ptx_written)) { cdp->ptx = cdp->lc; cdp->ptx_written = true; - } else { - cdp->lc = (cdp->lc & ~0xffff) | (v & 0xFFFE); - } + } + else { + cdp->lc = (cdp->lc & ~0xffff) | (v & 0xFFFE); + } } -void AUDxPER (int nr, uae_u16 v) +void AUDxPER(int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; unsigned long per; - audio_activate(); - update_audio (); + audio_activate(); + update_audio(); per = v * CYCLE_UNIT; - if (per == 0) - per = PERIOD_MAX - 1; + if (per == 0) + per = PERIOD_MAX - 1; if (per < PERIOD_MIN * CYCLE_UNIT) { /* smaller values would cause extremely high cpu usage */ @@ -1413,116 +1432,116 @@ void AUDxPER (int nr, uae_u16 v) per = PERIOD_MIN_NONCE * CYCLE_UNIT; } - if (cdp->per == PERIOD_MAX - 1 && per != PERIOD_MAX - 1) { - cdp->evtime = CYCLE_UNIT; - if (isaudio()) { - schedule_audio (); - events_schedule (); - } - } - cdp->per = per; + if (cdp->per == PERIOD_MAX - 1 && per != PERIOD_MAX - 1) { + cdp->evtime = CYCLE_UNIT; + if (isaudio()) { + schedule_audio(); + events_schedule(); + } + } + cdp->per = per; } -void AUDxLEN (int nr, uae_u16 v) +void AUDxLEN(int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; - audio_activate(); - update_audio (); - cdp->len = v; + audio_activate(); + update_audio(); + cdp->len = v; } -void AUDxVOL (int nr, uae_u16 v) +void AUDxVOL(int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; // 7 bit register in Paula. v &= 127; if (v > 64) v = 64; - audio_activate(); - update_audio (); - cdp->vol = v; + audio_activate(); + update_audio(); + cdp->vol = v; } -void audio_update_adkmasks (void) +void audio_update_adkmasks(void) { - static int prevcon = -1; - unsigned long t = adkcon | (adkcon >> 4); + static int prevcon = -1; + unsigned long t = adkcon | (adkcon >> 4); - audio_channel[0].adk_mask = (((t >> 0) & 1) - 1); - audio_channel[1].adk_mask = (((t >> 1) & 1) - 1); - audio_channel[2].adk_mask = (((t >> 2) & 1) - 1); - audio_channel[3].adk_mask = (((t >> 3) & 1) - 1); - if ((prevcon & 0xff) != (adkcon & 0xff)) { - audio_activate(); - prevcon = adkcon; - } + audio_channel[0].adk_mask = (((t >> 0) & 1) - 1); + audio_channel[1].adk_mask = (((t >> 1) & 1) - 1); + audio_channel[2].adk_mask = (((t >> 2) & 1) - 1); + audio_channel[3].adk_mask = (((t >> 3) & 1) - 1); + if ((prevcon & 0xff) != (adkcon & 0xff)) { + audio_activate(); + prevcon = adkcon; + } } -int init_audio (void) +int init_audio(void) { - return init_sound (); + return init_sound(); } -void led_filter_audio (void) +void led_filter_audio(void) { - led_filter_on = 0; - if (led_filter_forced > 0 || (gui_data.powerled && led_filter_forced >= 0)) - led_filter_on = 1; + led_filter_on = 0; + if (led_filter_forced > 0 || (gui_data.powerled && led_filter_forced >= 0)) + led_filter_on = 1; } -void restore_audio_finish (void) +void restore_audio_finish(void) { - last_cycles = get_cycles (); - schedule_audio (); - events_schedule (); + last_cycles = get_cycles(); + schedule_audio(); + events_schedule(); } -uae_u8 *restore_audio (int nr, uae_u8 *src) +uae_u8 *restore_audio(int nr, uae_u8 *src) { - struct audio_channel_data *acd = audio_channel + nr; + struct audio_channel_data *acd = audio_channel + nr; - zerostate (nr); - acd->state = restore_u8 (); - acd->vol = restore_u8 (); - acd->intreq2 = restore_u8 () ? true : false; - uae_u8 flags = restore_u8 (); + zerostate(nr); + acd->state = restore_u8(); + acd->vol = restore_u8(); + acd->intreq2 = restore_u8() ? true : false; + uae_u8 flags = restore_u8(); acd->dr = acd->dsr = false; if (flags & 1) acd->dr = true; if (flags & 2) acd->dsr = true; - acd->len = restore_u16 (); - acd->wlen = restore_u16 (); - uae_u16 p = restore_u16 (); - acd->per = p ? p * CYCLE_UNIT : PERIOD_MAX; - acd->dat = acd->dat2 = restore_u16 (); - acd->lc = restore_u32 (); - acd->pt = restore_u32 (); - acd->evtime = restore_u32 (); + acd->len = restore_u16(); + acd->wlen = restore_u16(); + uae_u16 p = restore_u16(); + acd->per = p ? p * CYCLE_UNIT : PERIOD_MAX; + acd->dat = acd->dat2 = restore_u16(); + acd->lc = restore_u32(); + acd->pt = restore_u32(); + acd->evtime = restore_u32(); acd->dmaenstore = (dmacon & DMA_MASTER) && (dmacon & (1 << nr)); - return src; + return src; } -uae_u8 *save_audio (int nr, int *len, uae_u8 *dstptr) +uae_u8 *save_audio(int nr, int *len, uae_u8 *dstptr) { struct audio_channel_data *acd = audio_channel + nr; - uae_u8 *dst, *dstbak; + uae_u8 *dst, *dstbak; - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc (uae_u8, 100); - save_u8 (acd->state); - save_u8 (acd->vol); - save_u8 (acd->intreq2); - save_u8 ((acd->dr ? 1 : 0) | (acd->dsr ? 2 : 0) | 0x80); - save_u16 (acd->len); - save_u16 (acd->wlen); - save_u16 (acd->per == PERIOD_MAX ? 0 : acd->per / CYCLE_UNIT); - save_u16 (acd->dat); - save_u32 (acd->lc); - save_u32 (acd->pt); - save_u32 (acd->evtime); - *len = dst - dstbak; - return dstbak; -} + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc(uae_u8, 100); + save_u8(acd->state); + save_u8(acd->vol); + save_u8(acd->intreq2); + save_u8((acd->dr ? 1 : 0) | (acd->dsr ? 2 : 0) | 0x80); + save_u16(acd->len); + save_u16(acd->wlen); + save_u16(acd->per == PERIOD_MAX ? 0 : acd->per / CYCLE_UNIT); + save_u16(acd->dat); + save_u32(acd->lc); + save_u32(acd->pt); + save_u32(acd->evtime); + *len = dst - dstbak; + return dstbak; +} \ No newline at end of file diff --git a/src/blkdev.cpp b/src/blkdev.cpp index 0306f2e7..1a12f173 100644 --- a/src/blkdev.cpp +++ b/src/blkdev.cpp @@ -72,7 +72,7 @@ static int wasopen[MAX_TOTAL_SCSI_DEVICES]; static bool dev_init; /* convert minutes, seconds and frames -> logical sector number */ -int msf2lsn (int msf) +int msf2lsn(int msf) { int sector = (((msf >> 16) & 0xff) * 60 * 75 + ((msf >> 8) & 0xff) * 75 + ((msf >> 0) & 0xff)); sector -= 150; @@ -80,7 +80,7 @@ int msf2lsn (int msf) } /* convert logical sector number -> minutes, seconds and frames */ -int lsn2msf (int sectors) +int lsn2msf(int sectors) { int msf; sectors += 150; @@ -90,45 +90,45 @@ int lsn2msf (int sectors) return msf; } -uae_u8 frombcd (uae_u8 v) +uae_u8 frombcd(uae_u8 v) { return (v >> 4) * 10 + (v & 15); } -uae_u8 tobcd (uae_u8 v) +uae_u8 tobcd(uae_u8 v) { return ((v / 10) << 4) | (v % 10); } -int fromlongbcd (uae_u8 *p) +int fromlongbcd(uae_u8 *p) { - return (frombcd (p[0]) << 16) | (frombcd (p[1]) << 8) | (frombcd (p[2]) << 0); + return (frombcd(p[0]) << 16) | (frombcd(p[1]) << 8) | (frombcd(p[2]) << 0); } -void tolongbcd (uae_u8 *p, int v) +void tolongbcd(uae_u8 *p, int v) { - p[0] = tobcd ((v >> 16) & 0xff); - p[1] = tobcd ((v >> 8) & 0xff); - p[2] = tobcd ((v >> 0) & 0xff); + p[0] = tobcd((v >> 16) & 0xff); + p[1] = tobcd((v >> 8) & 0xff); + p[2] = tobcd((v >> 0) & 0xff); } -static struct cd_toc *gettoc (struct cd_toc_head *th, int block) +static struct cd_toc *gettoc(struct cd_toc_head *th, int block) { for (int i = th->first_track_offset + 1; i <= th->last_track_offset; i++) { struct cd_toc *t = &th->toc[i]; if (block < t->paddress) - return t - 1; + return t - 1; } return &th->toc[th->last_track_offset]; } -int isaudiotrack (struct cd_toc_head *th, int block) +int isaudiotrack(struct cd_toc_head *th, int block) { - struct cd_toc *t = gettoc (th, block); + struct cd_toc *t = gettoc(th, block); if (!t) return 0; return (t->control & 0x0c) != 4; } -int isdatatrack (struct cd_toc_head *th, int block) +int isdatatrack(struct cd_toc_head *th, int block) { - return !isaudiotrack (th, block); + return !isaudiotrack(th, block); } static int cdscsidevicetype[MAX_TOTAL_SCSI_DEVICES]; @@ -155,7 +155,7 @@ static struct device_functions *devicetable[] = { }; static int driver_installed[6]; -static void install_driver (int flags) +static void install_driver(int flags) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct blkdevstate *st = &state[i]; @@ -166,17 +166,18 @@ static void install_driver (int flags) if (flags > 0) { state[0].device_func = devicetable[flags]; state[0].scsiemu = true; - } else { + } + else { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct blkdevstate *st = &state[i]; st->scsiemu = false; st->device_func = NULL; switch (cdscsidevicetype[i]) { - case SCSI_UNIT_IMAGE: - st->device_func = devicetable[SCSI_UNIT_IMAGE]; - st->scsiemu = true; - break; + case SCSI_UNIT_IMAGE: + st->device_func = devicetable[SCSI_UNIT_IMAGE]; + st->scsiemu = true; + break; } } } @@ -186,9 +187,9 @@ static void install_driver (int flags) for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct blkdevstate *st = &state[i]; if (st->device_func == devicetable[j]) { - int ok = st->device_func->openbus (0); + int ok = st->device_func->openbus(0); driver_installed[j] = 1; - write_log (_T("%s driver installed, ok=%d\n"), st->device_func->name, ok); + write_log(_T("%s driver installed, ok=%d\n"), st->device_func->name, ok); break; } } @@ -197,7 +198,7 @@ static void install_driver (int flags) } -void blkdev_default_prefs (struct uae_prefs *p) +void blkdev_default_prefs(struct uae_prefs *p) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { p->cdslots[i].name[0] = 0; @@ -207,7 +208,7 @@ void blkdev_default_prefs (struct uae_prefs *p) } } -void blkdev_fix_prefs (struct uae_prefs *p) +void blkdev_fix_prefs(struct uae_prefs *p) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { cdscsidevicetype[i] = p->cdslots[i].type; @@ -225,145 +226,148 @@ void blkdev_fix_prefs (struct uae_prefs *p) } -static bool getsem (int unitnum, bool dowait) +static bool getsem(int unitnum, bool dowait) { struct blkdevstate *st = &state[unitnum]; if (st->sema == NULL) - uae_sem_init (&st->sema, 0, 1); + uae_sem_init(&st->sema, 0, 1); bool gotit = false; if (dowait) { - uae_sem_wait (&st->sema); + uae_sem_wait(&st->sema); gotit = true; - } else { - gotit = uae_sem_trywait (&st->sema) == 0; + } + else { + gotit = uae_sem_trywait(&st->sema) == 0; } if (gotit) st->sema_cnt++; if (st->sema_cnt > 1) - write_log (_T("CD: unitsem%d acquire mismatch! cnt=%d\n"), unitnum, st->sema_cnt); + write_log(_T("CD: unitsem%d acquire mismatch! cnt=%d\n"), unitnum, st->sema_cnt); return gotit; } -static bool getsem (int unitnum) +static bool getsem(int unitnum) { - return getsem (unitnum, false); + return getsem(unitnum, false); } -static void freesem (int unitnum) +static void freesem(int unitnum) { struct blkdevstate *st = &state[unitnum]; st->sema_cnt--; if (st->sema_cnt < 0) - write_log (_T("CD: unitsem%d release mismatch! cnt=%d\n"), unitnum, st->sema_cnt); - uae_sem_post (&st->sema); + write_log(_T("CD: unitsem%d release mismatch! cnt=%d\n"), unitnum, st->sema_cnt); + uae_sem_post(&st->sema); } -static void sys_command_close_internal (int unitnum) +static void sys_command_close_internal(int unitnum) { struct blkdevstate *st = &state[unitnum]; - getsem (unitnum, true); + getsem(unitnum, true); st->waspaused = 0; if (st->isopen <= 0) - write_log (_T("BUG unit %d close: opencnt=%d!\n"), unitnum, st->isopen); + write_log(_T("BUG unit %d close: opencnt=%d!\n"), unitnum, st->isopen); if (st->device_func) { - state[unitnum].device_func->closedev (unitnum); + state[unitnum].device_func->closedev(unitnum); if (st->isopen > 0) st->isopen--; } - freesem (unitnum); + freesem(unitnum); if (st->isopen == 0) { - uae_sem_destroy (&st->sema); + uae_sem_destroy(&st->sema); st->sema = NULL; } } -static int sys_command_open_internal (int unitnum, const TCHAR *ident, cd_standard_unit csu) +static int sys_command_open_internal(int unitnum, const TCHAR *ident, cd_standard_unit csu) { struct blkdevstate *st = &state[unitnum]; int ret = 0; if (st->sema == NULL) - uae_sem_init (&st->sema, 0, 1); - getsem (unitnum, true); + uae_sem_init(&st->sema, 0, 1); + getsem(unitnum, true); if (st->isopen) - write_log (_T("BUG unit %d open: opencnt=%d!\n"), unitnum, st->isopen); + write_log(_T("BUG unit %d open: opencnt=%d!\n"), unitnum, st->isopen); if (st->device_func) { - ret = state[unitnum].device_func->opendev (unitnum, ident, csu != CD_STANDARD_UNIT_DEFAULT); + ret = state[unitnum].device_func->opendev(unitnum, ident, csu != CD_STANDARD_UNIT_DEFAULT); if (ret) st->isopen++; } - freesem (unitnum); + freesem(unitnum); return ret; } -static int getunitinfo (int unitnum, int drive, cd_standard_unit csu, int *isaudio) +static int getunitinfo(int unitnum, int drive, cd_standard_unit csu, int *isaudio) { struct device_info di; - if (sys_command_info (unitnum, &di, 0)) { - write_log (_T("Scanning drive %s: "), di.label); + if (sys_command_info(unitnum, &di, 0)) { + write_log(_T("Scanning drive %s: "), di.label); if (di.media_inserted) { - if (isaudiotrack (&di.toc, 0)) { + if (isaudiotrack(&di.toc, 0)) { if (*isaudio == 0) *isaudio = drive; - write_log (_T("CDA")); + write_log(_T("CDA")); } uae_u8 buffer[2048]; - if (sys_command_cd_read (unitnum, buffer, 16, 1)) { - if (!memcmp (buffer + 8, "CDTV", 4) || !memcmp (buffer + 8, "CD32", 4) || !memcmp (buffer + 8, "COMM", 4)) { + if (sys_command_cd_read(unitnum, buffer, 16, 1)) { + if (!memcmp(buffer + 8, "CDTV", 4) || !memcmp(buffer + 8, "CD32", 4) || !memcmp(buffer + 8, "COMM", 4)) { uae_u32 crc; - write_log (_T("CD32 or CDTV")); - if (sys_command_cd_read (unitnum, buffer, 21, 1)) { - crc = get_crc32 (buffer, sizeof buffer); + write_log(_T("CD32 or CDTV")); + if (sys_command_cd_read(unitnum, buffer, 21, 1)) { + crc = get_crc32(buffer, sizeof buffer); if (crc == 0xe56c340f) { - write_log (_T(" [CD32.TM]")); + write_log(_T(" [CD32.TM]")); if (csu == CD_STANDARD_UNIT_CD32) { - write_log (_T("\n")); + write_log(_T("\n")); return 1; } } } if (csu == CD_STANDARD_UNIT_CDTV || csu == CD_STANDARD_UNIT_CD32) { - write_log (_T("\n")); + write_log(_T("\n")); return 1; } } } - } else { - write_log (_T("no media")); + } + else { + write_log(_T("no media")); } } - write_log (_T("\n")); + write_log(_T("\n")); return 0; } -static int get_standard_cd_unit2 (struct uae_prefs *p, cd_standard_unit csu) +static int get_standard_cd_unit2(struct uae_prefs *p, cd_standard_unit csu) { int unitnum = 0; int isaudio = 0; if (p->cdslots[unitnum].name[0] || p->cdslots[unitnum].inuse) { if (p->cdslots[unitnum].name[0]) { - device_func_init (SCSI_UNIT_IMAGE); - if (!sys_command_open_internal (unitnum, p->cdslots[unitnum].name, csu)) + device_func_init(SCSI_UNIT_IMAGE); + if (!sys_command_open_internal(unitnum, p->cdslots[unitnum].name, csu)) goto fallback; - } else { + } + else { goto fallback; } return unitnum; } fallback: - device_func_init (SCSI_UNIT_IMAGE); - if (!sys_command_open_internal (unitnum, _T(""), csu)) { - write_log (_T("image mounter failed to open as empty!?\n")); + device_func_init(SCSI_UNIT_IMAGE); + if (!sys_command_open_internal(unitnum, _T(""), csu)) { + write_log(_T("image mounter failed to open as empty!?\n")); return -1; } return unitnum; } -int get_standard_cd_unit (cd_standard_unit csu) +int get_standard_cd_unit(cd_standard_unit csu) { - int unitnum = get_standard_cd_unit2 (&currprefs, csu); + int unitnum = get_standard_cd_unit2(&currprefs, csu); if (unitnum < 0) return -1; struct blkdevstate *st = &state[unitnum]; #ifdef RETROPLATFORM - rp_cd_device_enable (unitnum, true); + rp_cd_device_enable(unitnum, true); #endif st->delayed = 0; if (currprefs.cdslots[unitnum].delayed) { @@ -372,23 +376,23 @@ int get_standard_cd_unit (cd_standard_unit csu) return unitnum; } -void close_standard_cd_unit (int unitnum) +void close_standard_cd_unit(int unitnum) { - sys_command_close (unitnum); + sys_command_close(unitnum); } -int sys_command_isopen (int unitnum) +int sys_command_isopen(int unitnum) { struct blkdevstate *st = &state[unitnum]; return st->isopen; } -int sys_command_open (int unitnum) +int sys_command_open(int unitnum) { struct blkdevstate *st = &state[unitnum]; - blkdev_fix_prefs (&currprefs); + blkdev_fix_prefs(&currprefs); if (!dev_init) { - device_func_init (0); + device_func_init(0); dev_init = true; } @@ -397,16 +401,16 @@ int sys_command_open (int unitnum) return -1; } st->waspaused = 0; - int v = sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : NULL, CD_STANDARD_UNIT_DEFAULT); + int v = sys_command_open_internal(unitnum, currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : NULL, CD_STANDARD_UNIT_DEFAULT); if (!v) return 0; #ifdef RETROPLATFORM - rp_cd_device_enable (unitnum, true); + rp_cd_device_enable(unitnum, true); #endif return v; } -void sys_command_close (int unitnum) +void sys_command_close(int unitnum) { struct blkdevstate *st = &state[unitnum]; if (st->isopen > 1) { @@ -414,21 +418,21 @@ void sys_command_close (int unitnum) return; } #ifdef RETROPLATFORM - rp_cd_device_enable (unitnum, false); + rp_cd_device_enable(unitnum, false); #endif - sys_command_close_internal (unitnum); + sys_command_close_internal(unitnum); } -void blkdev_cd_change (int unitnum, const TCHAR *name) +void blkdev_cd_change(int unitnum, const TCHAR *name) { struct device_info di; - sys_command_info (unitnum, &di, 1); + sys_command_info(unitnum, &di, 1); #ifdef RETROPLATFORM - rp_cd_image_change (unitnum, name); + rp_cd_image_change(unitnum, name); #endif } -void device_func_reset (void) +void device_func_reset(void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct blkdevstate *st = &state[i]; @@ -441,63 +445,63 @@ void device_func_reset (void) } } -int device_func_init (int flags) +int device_func_init(int flags) { - blkdev_fix_prefs (&currprefs); - install_driver (flags); + blkdev_fix_prefs(&currprefs); + install_driver(flags); return 1; } -bool blkdev_get_info (struct uae_prefs *p, int unitnum, struct device_info *di) +bool blkdev_get_info(struct uae_prefs *p, int unitnum, struct device_info *di) { bool open = true, opened = false, ok = false; struct blkdevstate *st = &state[unitnum]; if (!st->isopen) { - blkdev_fix_prefs (p); - install_driver (0); + blkdev_fix_prefs(p); + install_driver(0); opened = true; - open = sys_command_open_internal (unitnum, p->cdslots[unitnum].name[0] ? p->cdslots[unitnum].name : NULL, CD_STANDARD_UNIT_DEFAULT) != 0; + open = sys_command_open_internal(unitnum, p->cdslots[unitnum].name[0] ? p->cdslots[unitnum].name : NULL, CD_STANDARD_UNIT_DEFAULT) != 0; } if (open) { - ok = sys_command_info (unitnum, di, true) != 0; + ok = sys_command_info(unitnum, di, true) != 0; } if (open && opened) - sys_command_close_internal (unitnum); + sys_command_close_internal(unitnum); return ok; } -void blkdev_entergui (void) +void blkdev_entergui(void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct blkdevstate *st = &state[i]; st->waspaused = 0; struct device_info di; - if (sys_command_info (i, &di, 1)) { - if (sys_command_cd_pause (i, 1) == 0) + if (sys_command_info(i, &di, 1)) { + if (sys_command_cd_pause(i, 1) == 0) st->waspaused = 1; } } } -void blkdev_exitgui (void) +void blkdev_exitgui(void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct blkdevstate *st = &state[i]; if (st->waspaused) { struct device_info di; - if (sys_command_info (i, &di, 1)) { - sys_command_cd_pause (i, 0); + if (sys_command_info(i, &di, 1)) { + sys_command_cd_pause(i, 0); } } st->waspaused = 0; } } -void check_prefs_changed_cd (void) +void check_prefs_changed_cd(void) { currprefs.sound_volume_cd = changed_prefs.sound_volume_cd; } -static void check_changes (int unitnum) +static void check_changes(int unitnum) { struct blkdevstate *st = &state[unitnum]; bool changed = false; @@ -509,11 +513,11 @@ static void check_changes (int unitnum) if (st->delayed) { st->delayed--; if (st->delayed == 0) - write_log (_T("CD: startup delayed insert '%s'\n"), currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : _T("")); + write_log(_T("CD: startup delayed insert '%s'\n"), currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : _T("")); return; } - if (_tcscmp (changed_prefs.cdslots[unitnum].name, currprefs.cdslots[unitnum].name) != 0) + if (_tcscmp(changed_prefs.cdslots[unitnum].name, currprefs.cdslots[unitnum].name) != 0) changed = true; if (!changed && changed_prefs.cdslots[unitnum].name[0] == 0 && changed_prefs.cdslots[unitnum].inuse != currprefs.cdslots[unitnum].inuse) changed = true; @@ -521,27 +525,27 @@ static void check_changes (int unitnum) if (changed) { bool wasimage = currprefs.cdslots[unitnum].name[0] != 0; if (st->sema) - gotsem = getsem (unitnum, true); + gotsem = getsem(unitnum, true); st->cdimagefileinuse = changed_prefs.cdslots[unitnum].inuse; - _tcscpy (st->newimagefile, changed_prefs.cdslots[unitnum].name); + _tcscpy(st->newimagefile, changed_prefs.cdslots[unitnum].name); changed_prefs.cdslots[unitnum].name[0] = currprefs.cdslots[unitnum].name[0] = 0; currprefs.cdslots[unitnum].inuse = changed_prefs.cdslots[unitnum].inuse; int pollmode = 0; st->imagechangetime = 3 * 50; struct device_info di; - st->device_func->info (unitnum, &di, 0, -1); + st->device_func->info(unitnum, &di, 0, -1); if (st->wasopen >= 0) st->wasopen = di.open ? 1 : 0; if (st->wasopen) { - st->device_func->closedev (unitnum); + st->device_func->closedev(unitnum); st->wasopen = -1; } - write_log (_T("CD: eject (%s) open=%d\n"), pollmode ? _T("slow") : _T("fast"), st->wasopen ? 1 : 0); + write_log(_T("CD: eject (%s) open=%d\n"), pollmode ? _T("slow") : _T("fast"), st->wasopen ? 1 : 0); #ifdef RETROPLATFORM - rp_cd_image_change (unitnum, NULL); + rp_cd_image_change(unitnum, NULL); #endif if (gotsem) { - freesem (unitnum); + freesem(unitnum); gotsem = false; } } @@ -551,52 +555,53 @@ static void check_changes (int unitnum) if (st->imagechangetime > 0) return; if (st->sema) - gotsem = getsem (unitnum, true); - _tcscpy (currprefs.cdslots[unitnum].name, st->newimagefile); - _tcscpy (changed_prefs.cdslots[unitnum].name, st->newimagefile); + gotsem = getsem(unitnum, true); + _tcscpy(currprefs.cdslots[unitnum].name, st->newimagefile); + _tcscpy(changed_prefs.cdslots[unitnum].name, st->newimagefile); currprefs.cdslots[unitnum].inuse = changed_prefs.cdslots[unitnum].inuse = st->cdimagefileinuse; st->newimagefile[0] = 0; - write_log (_T("CD: delayed insert '%s' (open=%d,unit=%d)\n"), currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : _T(""), st->wasopen ? 1 : 0, unitnum); - device_func_init (0); + write_log(_T("CD: delayed insert '%s' (open=%d,unit=%d)\n"), currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : _T(""), st->wasopen ? 1 : 0, unitnum); + device_func_init(0); if (st->wasopen) { - if (!st->device_func->opendev (unitnum, currprefs.cdslots[unitnum].name, 0)) { - write_log (_T("-> device open failed\n")); + if (!st->device_func->opendev(unitnum, currprefs.cdslots[unitnum].name, 0)) { + write_log(_T("-> device open failed\n")); st->wasopen = 0; - } else { + } + else { st->wasopen = 1; - write_log (_T("-> device reopened\n")); + write_log(_T("-> device reopened\n")); } } st->mediawaschanged = true; #ifdef RETROPLATFORM - rp_cd_image_change (unitnum, currprefs.cdslots[unitnum].name); + rp_cd_image_change(unitnum, currprefs.cdslots[unitnum].name); #endif if (gotsem) { - freesem (unitnum); + freesem(unitnum); gotsem = false; } } -void blkdev_vsync (void) +void blkdev_vsync(void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) - check_changes (i); + check_changes(i); } -static int do_scsi (int unitnum, uae_u8 *cmd, int cmdlen) +static int do_scsi(int unitnum, uae_u8 *cmd, int cmdlen) { - uae_u8 *p = state[unitnum].device_func->exec_out (unitnum, cmd, cmdlen); + uae_u8 *p = state[unitnum].device_func->exec_out(unitnum, cmd, cmdlen); return p != NULL; } -static int do_scsi (int unitnum, uae_u8 *cmd, int cmdlen, uae_u8 *out, int outsize) +static int do_scsi(int unitnum, uae_u8 *cmd, int cmdlen, uae_u8 *out, int outsize) { - uae_u8 *p = state[unitnum].device_func->exec_in (unitnum, cmd, cmdlen, &outsize); + uae_u8 *p = state[unitnum].device_func->exec_in(unitnum, cmd, cmdlen, &outsize); if (p) - memcpy (out, p, outsize); + memcpy(out, p, outsize); return p != NULL; } -static int failunit (int unitnum) +static int failunit(int unitnum) { if (unitnum < 0 || unitnum >= MAX_TOTAL_SCSI_DEVICES) return 1; @@ -605,68 +610,70 @@ static int failunit (int unitnum) return 0; } -static int audiostatus (int unitnum) +static int audiostatus(int unitnum) { - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; - uae_u8 cmd[10] = {0x42,2,0x40,1,0,0,0,(uae_u8)(DEVICE_SCSI_BUFSIZE>>8),(uae_u8)(DEVICE_SCSI_BUFSIZE&0xff),0}; - uae_u8 *p = state[unitnum].device_func->exec_in (unitnum, cmd, sizeof (cmd), 0); - freesem (unitnum); + uae_u8 cmd[10] = { 0x42, 2, 0x40, 1, 0, 0, 0, (uae_u8)(DEVICE_SCSI_BUFSIZE >> 8), (uae_u8)(DEVICE_SCSI_BUFSIZE & 0xff), 0 }; + uae_u8 *p = state[unitnum].device_func->exec_in(unitnum, cmd, sizeof(cmd), 0); + freesem(unitnum); if (!p) return 0; return p[1]; } /* pause/unpause CD audio */ -int sys_command_cd_pause (int unitnum, int paused) +int sys_command_cd_pause(int unitnum, int paused) { - if (failunit (unitnum)) + if (failunit(unitnum)) return -1; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; int v; if (state[unitnum].device_func->pause == NULL) { - int as = audiostatus (unitnum); - uae_u8 cmd[10] = {0x4b,0,0,0,0,0,0,0,paused?0:1,0}; - do_scsi (unitnum, cmd, sizeof cmd); + int as = audiostatus(unitnum); + uae_u8 cmd[10] = { 0x4b, 0, 0, 0, 0, 0, 0, 0, paused ? static_cast(0) : static_cast(1), 0 }; + do_scsi(unitnum, cmd, sizeof cmd); v = as == AUDIO_STATUS_PAUSED; - } else { - v = state[unitnum].device_func->pause (unitnum, paused); } - freesem (unitnum); + else { + v = state[unitnum].device_func->pause(unitnum, paused); + } + freesem(unitnum); return v; } /* stop CD audio */ -void sys_command_cd_stop (int unitnum) +void sys_command_cd_stop(int unitnum) { - if (failunit (unitnum)) + if (failunit(unitnum)) return; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return; if (state[unitnum].device_func->stop == NULL) { - int as = audiostatus (unitnum); - uae_u8 cmd[6] = {0x4e,0,0,0,0,0}; - do_scsi (unitnum, cmd, sizeof cmd); - } else { - state[unitnum].device_func->stop (unitnum); + int as = audiostatus(unitnum); + uae_u8 cmd[6] = { 0x4e, 0, 0, 0, 0, 0 }; + do_scsi(unitnum, cmd, sizeof cmd); } - freesem (unitnum); + else { + state[unitnum].device_func->stop(unitnum); + } + freesem(unitnum); } /* play CD audio */ -int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int scan) +int sys_command_cd_play(int unitnum, int startlsn, int endlsn, int scan) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; state[unitnum].play_end_pos = endlsn; if (state[unitnum].device_func->play == NULL) { - uae_u8 cmd[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; - int startmsf = lsn2msf (startlsn); - int endmsf = lsn2msf (endlsn); + uae_u8 cmd[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + int startmsf = lsn2msf(startlsn); + int endmsf = lsn2msf(endlsn); cmd[0] = 0x47; cmd[3] = (uae_u8)(startmsf >> 16); cmd[4] = (uae_u8)(startmsf >> 8); @@ -674,223 +681,234 @@ int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int scan) cmd[6] = (uae_u8)(endmsf >> 16); cmd[7] = (uae_u8)(endmsf >> 8); cmd[8] = (uae_u8)(endmsf >> 0); - v = do_scsi (unitnum, cmd, sizeof cmd) ? 0 : 1; - } else { - v = state[unitnum].device_func->play (unitnum, startlsn, endlsn, scan, NULL, NULL); + v = do_scsi(unitnum, cmd, sizeof cmd) ? 0 : 1; } - freesem (unitnum); + else { + v = state[unitnum].device_func->play(unitnum, startlsn, endlsn, scan, NULL, NULL); + } + freesem(unitnum); return v; } /* play CD audio with subchannels */ -int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc) +int sys_command_cd_play(int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->play == NULL) - v = sys_command_cd_play (unitnum, startlsn, endlsn, scan); + v = sys_command_cd_play(unitnum, startlsn, endlsn, scan); else - v = state[unitnum].device_func->play (unitnum, startlsn, endlsn, scan, statusfunc, subfunc); - freesem (unitnum); + v = state[unitnum].device_func->play(unitnum, startlsn, endlsn, scan, statusfunc, subfunc); + freesem(unitnum); return v; } /* set CD audio volume */ -uae_u32 sys_command_cd_volume (int unitnum, uae_u16 volume_left, uae_u16 volume_right) +uae_u32 sys_command_cd_volume(int unitnum, uae_u16 volume_left, uae_u16 volume_right) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->volume == NULL) v = -1; else - v = state[unitnum].device_func->volume (unitnum, volume_left, volume_right); - freesem (unitnum); + v = state[unitnum].device_func->volume(unitnum, volume_left, volume_right); + freesem(unitnum); return v; } /* read qcode */ -int sys_command_cd_qcode (int unitnum, uae_u8 *buf) +int sys_command_cd_qcode(int unitnum, uae_u8 *buf) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->qcode == NULL) { - uae_u8 cmd[10] = {0x42,2,0x40,1,0,0,0,(uae_u8)(SUBQ_SIZE>>8),(uae_u8)(SUBQ_SIZE&0xff),0}; - v = do_scsi (unitnum, cmd, sizeof cmd, buf, SUBQ_SIZE); - } else { - v = state[unitnum].device_func->qcode (unitnum, buf, -1); + uae_u8 cmd[10] = { 0x42, 2, 0x40, 1, 0, 0, 0, (uae_u8)(SUBQ_SIZE >> 8), (uae_u8)(SUBQ_SIZE & 0xff), 0 }; + v = do_scsi(unitnum, cmd, sizeof cmd, buf, SUBQ_SIZE); } - freesem (unitnum); + else { + v = state[unitnum].device_func->qcode(unitnum, buf, -1); + } + freesem(unitnum); return v; -}; +} +; /* read table of contents */ -int sys_command_cd_toc (int unitnum, struct cd_toc_head *toc) +int sys_command_cd_toc(int unitnum, struct cd_toc_head *toc) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->toc == NULL) { uae_u8 buf[4 + 8 * 103]; int size = sizeof buf; - uae_u8 cmd [10] = { 0x43,0,2,0,0,0,0,(uae_u8)(size>>8),(uae_u8)(size&0xff),0}; - if (do_scsi (unitnum, cmd, sizeof cmd, buf, size)) { + uae_u8 cmd[10] = { 0x43, 0, 2, 0, 0, 0, 0, (uae_u8)(size >> 8), (uae_u8)(size & 0xff), 0 }; + if (do_scsi(unitnum, cmd, sizeof cmd, buf, size)) { // toc parse to do v = 0; } v = 0; - } else { - v = state[unitnum].device_func->toc (unitnum, toc); } - freesem (unitnum); + else { + v = state[unitnum].device_func->toc(unitnum, toc); + } + freesem(unitnum); return v; } /* read one cd sector */ -int sys_command_cd_read (int unitnum, uae_u8 *data, int block, int size) +int sys_command_cd_read(int unitnum, uae_u8 *data, int block, int size) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->read == NULL) { - uae_u8 cmd1[12] = { 0x28, 0, block >> 24, block >> 16, block >> 8, block >> 0, 0, size >> 8, size >> 0, 0, 0, 0 }; - v = do_scsi (unitnum, cmd1, sizeof cmd1, data, size * 2048); + + uae_u8 cmd1[12] = { 0x28, 0, static_cast(block >> 24), static_cast(block >> 16), static_cast(block >> 8), static_cast(block >> 0), 0, static_cast(size >> 8), static_cast(size >> 0), 0, 0, 0 }; + v = do_scsi(unitnum, cmd1, sizeof cmd1, data, size * 2048); #if 0 if (!v) { uae_u8 cmd2[12] = { 0xbe, 0, block >> 24, block >> 16, block >> 8, block >> 0, size >> 16, size >> 8, size >> 0, 0x10, 0, 0 }; - v = do_scsi (unitnum, cmd2, sizeof cmd2, data, size * 2048); + v = do_scsi(unitnum, cmd2, sizeof cmd2, data, size * 2048); } #endif - } else { - v = state[unitnum].device_func->read (unitnum, data, block, size); } - freesem (unitnum); + else { + v = state[unitnum].device_func->read(unitnum, data, block, size); + } + freesem(unitnum); return v; } -int sys_command_cd_rawread (int unitnum, uae_u8 *data, int block, int size, int sectorsize) +int sys_command_cd_rawread(int unitnum, uae_u8 *data, int block, int size, int sectorsize) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return -1; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->rawread == NULL) { - uae_u8 cmd[12] = { 0xbe, 0, block >> 24, block >> 16, block >> 8, block >> 0, size >> 16, size >> 8, size >> 0, 0x10, 0, 0 }; - v = do_scsi (unitnum, cmd, sizeof cmd, data, size * sectorsize); - } else { - v = state[unitnum].device_func->rawread (unitnum, data, block, size, sectorsize, 0xffffffff); + uae_u8 cmd[12] = { 0xbe, 0, static_cast(block >> 24), static_cast(block >> 16), static_cast(block >> 8), static_cast(block >> 0), static_cast(size >> 16), static_cast(size >> 8), static_cast(size >> 0), 0x10, 0, 0}; + v = do_scsi(unitnum, cmd, sizeof cmd, data, size * sectorsize); } - freesem (unitnum); + else { + v = state[unitnum].device_func->rawread(unitnum, data, block, size, sectorsize, 0xffffffff); + } + freesem(unitnum); return v; } -int sys_command_cd_rawread (int unitnum, uae_u8 *data, int block, int size, int sectorsize, uae_u8 sectortype, uae_u8 scsicmd9, uae_u8 subs) +int sys_command_cd_rawread(int unitnum, uae_u8 *data, int block, int size, int sectorsize, uae_u8 sectortype, uae_u8 scsicmd9, uae_u8 subs) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return -1; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->rawread == NULL) { - uae_u8 cmd[12] = { 0xbe, 0, block >> 24, block >> 16, block >> 8, block >> 0, size >> 16, size >> 8, size >> 0, 0x10, 0, 0 }; - v = do_scsi (unitnum, cmd, sizeof cmd, data, size * sectorsize); - } else { - v = state[unitnum].device_func->rawread (unitnum, data, block, size, sectorsize, (sectortype << 16) | (scsicmd9 << 8) | subs); + uae_u8 cmd[12] = { 0xbe, 0, static_cast(block >> 24), static_cast(block >> 16), static_cast(block >> 8), static_cast(block >> 0), static_cast(size >> 16), static_cast(size >> 8), static_cast(size >> 0), 0x10, 0, 0}; + v = do_scsi(unitnum, cmd, sizeof cmd, data, size * sectorsize); } - freesem (unitnum); + else { + v = state[unitnum].device_func->rawread(unitnum, data, block, size, sectorsize, (sectortype << 16) | (scsicmd9 << 8) | subs); + } + freesem(unitnum); return v; } /* read block */ -int sys_command_read (int unitnum, uae_u8 *data, int block, int size) +int sys_command_read(int unitnum, uae_u8 *data, int block, int size) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->read == NULL) { - uae_u8 cmd[12] = { 0xa8, 0, 0, 0, 0, 0, size >> 24, size >> 16, size >> 8, size >> 0, 0, 0 }; + uae_u8 cmd[12] = { 0xa8, 0, 0, 0, 0, 0, static_cast(size >> 24), static_cast(size >> 16), static_cast(size >> 8), static_cast(size >> 0), 0, 0}; cmd[2] = (uae_u8)(block >> 24); cmd[3] = (uae_u8)(block >> 16); cmd[4] = (uae_u8)(block >> 8); cmd[5] = (uae_u8)(block >> 0); - v = do_scsi (unitnum, cmd, sizeof cmd, data, size * 2048); - } else { - v = state[unitnum].device_func->read (unitnum, data, block, size); + v = do_scsi(unitnum, cmd, sizeof cmd, data, size * 2048); } - freesem (unitnum); + else { + v = state[unitnum].device_func->read(unitnum, data, block, size); + } + freesem(unitnum); return v; } /* write block */ -int sys_command_write (int unitnum, uae_u8 *data, int offset, int size) +int sys_command_write(int unitnum, uae_u8 *data, int offset, int size) { int v; - if (failunit (unitnum)) + if (failunit(unitnum)) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->write == NULL) { v = 0; - } else { - v = state[unitnum].device_func->write (unitnum, data, offset, size); } - freesem (unitnum); + else { + v = state[unitnum].device_func->write(unitnum, data, offset, size); + } + freesem(unitnum); return v; } -int sys_command_ismedia (int unitnum, int quick) +int sys_command_ismedia(int unitnum, int quick) { int v; struct blkdevstate *st = &state[unitnum]; - if (failunit (unitnum)) + if (failunit(unitnum)) return -1; if (st->delayed) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (state[unitnum].device_func->ismedia == NULL) { uae_u8 cmd[6] = { 0, 0, 0, 0, 0, 0 }; - v = do_scsi (unitnum, cmd, sizeof cmd); - } else { - v = state[unitnum].device_func->ismedia (unitnum, quick); + v = do_scsi(unitnum, cmd, sizeof cmd); } - freesem (unitnum); + else { + v = state[unitnum].device_func->ismedia(unitnum, quick); + } + freesem(unitnum); return v; } -struct device_info *sys_command_info_session (int unitnum, struct device_info *di, int quick, int session) +struct device_info *sys_command_info_session(int unitnum, struct device_info *di, int quick, int session) { struct blkdevstate *st = &state[unitnum]; - if (failunit (unitnum)) + if (failunit(unitnum)) return NULL; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (st->device_func->info == NULL) return 0; - struct device_info *di2 = st->device_func->info (unitnum, di, quick, -1); + struct device_info *di2 = st->device_func->info(unitnum, di, quick, -1); if (di2) st->type = di2->type; if (di2 && st->delayed) di2->media_inserted = 0; - freesem (unitnum); + freesem(unitnum); return di2; } -struct device_info *sys_command_info (int unitnum, struct device_info *di, int quick) +struct device_info *sys_command_info(int unitnum, struct device_info *di, int quick) { - return sys_command_info_session (unitnum, di, quick, -1); + return sys_command_info_session(unitnum, di, quick, -1) ; } #define MODE_SELECT_6 0x15 @@ -898,1206 +916,1239 @@ struct device_info *sys_command_info (int unitnum, struct device_info *di, int q #define MODE_SELECT_10 0x55 #define MODE_SENSE_10 0x5a -void scsi_atapi_fixup_pre (uae_u8 *scsi_cmd, int *len, uae_u8 **datap, int *datalenp, int *parm) +void scsi_atapi_fixup_pre(uae_u8 *scsi_cmd, int *len, uae_u8 **datap, int *datalenp, int *parm) { - uae_u8 cmd, *p, *data = *datap; - int l, datalen = *datalenp; + uae_u8 cmd, + *p, + *data = *datap ; + int l, + datalen = *datalenp ; - *parm = 0; - cmd = scsi_cmd[0]; - if (cmd != MODE_SELECT_6 && cmd != MODE_SENSE_6) - return; - l = scsi_cmd[4]; - if (l > 4) - l += 4; - scsi_cmd[7] = l >> 8; - scsi_cmd[8] = l; - if (cmd == MODE_SELECT_6) { - scsi_cmd[0] = MODE_SELECT_10; - scsi_cmd[9] = scsi_cmd[5]; - scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = scsi_cmd[6] = 0; - *len = 10; - p = xmalloc (uae_u8, 8 + datalen + 4); - if (datalen > 4) - memcpy (p + 8, data + 4, datalen - 4); - p[0] = 0; - p[1] = data[0]; - p[2] = data[1]; - p[3] = data[2]; - p[4] = p[5] = p[6] = 0; - p[7] = data[3]; - if (l > 8) - datalen += 4; - *parm = MODE_SELECT_10; - *datap = p; - } else { - scsi_cmd[0] = MODE_SENSE_10; - scsi_cmd[9] = scsi_cmd[5]; - scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = scsi_cmd[6] = 0; - if (l > 8) - datalen += 4; - *datap = xmalloc (uae_u8, datalen); - *len = 10; - *parm = MODE_SENSE_10; - } - *datalenp = datalen; + *parm = 0 ; + cmd = scsi_cmd[0] ; + if(cmd != MODE_SELECT_6 && cmd != MODE_SENSE_6) + return ; + l = scsi_cmd[4] ; + if(l > 4) + l += 4 ; + scsi_cmd[7] = l >> 8 ; + scsi_cmd[8] = l ; + if(cmd == MODE_SELECT_6) { + scsi_cmd[0] = MODE_SELECT_10 ; + scsi_cmd[9] = scsi_cmd[5] ; + scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = scsi_cmd[6] = 0 ; + *len = 10 ; + p = xmalloc(uae_u8, 8 + datalen + 4) ; + if(datalen > 4) + memcpy(p + 8, data + 4, datalen - 4) ; +p[0] = 0 ; +p[1] = data[0] ; +p[2] = data[1] ; +p[3] = data[2] ; +p[4] = p[5] = p[6] = 0 ; +p[7] = data[3] ; +if(l > 8) + datalen += 4 ; +*parm = MODE_SELECT_10 ; +*datap = p ; +} else { + scsi_cmd[0] = MODE_SENSE_10 ; + scsi_cmd[9] = scsi_cmd[5] ; + scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = scsi_cmd[6] = 0 ; + if(l > 8) + datalen += 4 ; +*datap = xmalloc(uae_u8, datalen) ; +*len = 10 ; +*parm = MODE_SENSE_10 ; +} +*datalenp = datalen ; } -void scsi_atapi_fixup_post (uae_u8 *scsi_cmd, int len, uae_u8 *olddata, uae_u8 *data, int *datalenp, int parm) +void scsi_atapi_fixup_post(uae_u8 *scsi_cmd, int len, uae_u8 *olddata, uae_u8 *data, int *datalenp, int parm) { - int datalen = *datalenp; - if (!data || !datalen) - return; - if (parm == MODE_SENSE_10) { - olddata[0] = data[1]; - olddata[1] = data[2]; - olddata[2] = data[3]; - olddata[3] = data[7]; - datalen -= 4; - if (datalen > 4) - memcpy (olddata + 4, data + 8, datalen - 4); - *datalenp = datalen; - } + int datalen = *datalenp ; + if(!data || !datalen) + return ; + if(parm == MODE_SENSE_10) { + olddata[0] = data[1] ; + olddata[1] = data[2] ; + olddata[2] = data[3] ; + olddata[3] = data[7] ; + datalen -= 4 ; + if(datalen > 4) + memcpy(olddata + 4, data + 8, datalen - 4) ; +*datalenp = datalen ; +} } -static void scsi_atapi_fixup_inquiry (struct amigascsi *as) +static void scsi_atapi_fixup_inquiry(struct amigascsi *as) { - uae_u8 *scsi_data = as->data; - uae_u32 scsi_len = as->len; - uae_u8 *scsi_cmd = as->cmd; - uae_u8 cmd; + uae_u8 *scsi_data = as->data ; + uae_u32 scsi_len = as->len ; + uae_u8 *scsi_cmd = as->cmd ; + uae_u8 cmd ; - cmd = scsi_cmd[0]; + cmd = scsi_cmd[0] ; /* CDROM INQUIRY: most Amiga programs expect ANSI version == 2 * (ATAPI normally responds with zero) */ - if (cmd == 0x12 && scsi_len > 2 && scsi_data) { - uae_u8 per = scsi_data[0]; - uae_u8 b = scsi_data[2]; - /* CDROM and ANSI version == 0 ? */ - if ((per & 31) == 5 && (b & 7) == 0) { - b |= 2; - scsi_data[2] = b; - } - } + if(cmd == 0x12 && scsi_len > 2 && scsi_data) { + uae_u8 per = scsi_data[0] ; + uae_u8 b = scsi_data[2] ; + /* CDROM and ANSI version == 0 ? */ + if((per & 31) == 5 && (b & 7) == 0) { + b |= 2 ; + scsi_data[2] = b ; +} +} } -void scsi_log_before (uae_u8 *cdb, int cdblen, uae_u8 *data, int datalen) +void scsi_log_before(uae_u8 *cdb, int cdblen, uae_u8 *data, int datalen) { - int i; - for (i = 0; i < cdblen; i++) { - write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), cdb[i]); - } - write_log (_T("\n")); - if (data) { - write_log (_T("DATAOUT: %d\n"), datalen); - for (i = 0; i < datalen && i < 100; i++) - write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), data[i]); - if (datalen > 0) - write_log (_T("\n")); - } + int i ; + for(i = 0 ; i < cdblen ; i++) { + write_log(_T("%s%02X"), i > 0 ? _T(".") : _T(""), cdb[i]) ; +} +write_log(_T("\n")) ; +if(data) { + write_log(_T("DATAOUT: %d\n"), datalen) ; + for(i = 0 ; i < datalen && i < 100 ; i++) + write_log(_T("%s%02X"), i > 0 ? _T(".") : _T(""), data[i]) ; +if(datalen > 0) + write_log(_T("\n")) ; +} } -void scsi_log_after (uae_u8 *data, int datalen, uae_u8 *sense, int senselen) +void scsi_log_after(uae_u8 *data, int datalen, uae_u8 *sense, int senselen) { - int i; - write_log (_T("DATAIN: %d\n"), datalen); - for (i = 0; i < datalen && i < 100 && data; i++) - write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), data[i]); - if (data && datalen > 0) - write_log (_T("\n")); - if (senselen > 0) { - write_log (_T("SENSE: %d,"), senselen); - for (i = 0; i < senselen && i < 32; i++) { - write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), sense[i]); - } - write_log (_T("\n")); - } + int i ; + write_log(_T("DATAIN: %d\n"), datalen) ; + for(i = 0 ; i < datalen && i < 100 && data ; i++) + write_log(_T("%s%02X"), i > 0 ? _T(".") : _T(""), data[i]) ; + if(data && datalen > 0) + write_log(_T("\n")) ; + if(senselen > 0) { + write_log(_T("SENSE: %d,"), senselen) ; + for(i = 0 ; i < senselen && i < 32 ; i++) { + write_log(_T("%s%02X"), i > 0 ? _T(".") : _T(""), sense[i]) ; +} +write_log(_T("\n")) ; +} } -static bool nodisk (struct device_info *di) +static bool nodisk(struct device_info *di) { - return di->media_inserted == 0; + return di->media_inserted == 0 ; } -static int cmd_readx (int unitnum, uae_u8 *dataptr, int offset, int len) +static int cmd_readx(int unitnum, uae_u8 *dataptr, int offset, int len) { - if (!getsem (unitnum)) - return 0; - int v = state[unitnum].device_func->read (unitnum, dataptr, offset, len); - freesem (unitnum); - if (v >= 0) - return len; - return v; + if(!getsem(unitnum)) + return 0 ; + int v = state[unitnum].device_func->read(unitnum, dataptr, offset, len) ; + freesem(unitnum) ; + if(v >= 0) + return len ; + return v ; } -static void wl (uae_u8 *p, int v) +static void wl(uae_u8 *p, int v) { - p[0] = v >> 24; - p[1] = v >> 16; - p[2] = v >> 8; - p[3] = v; + p[0] = v >> 24 ; + p[1] = v >> 16 ; + p[2] = v >> 8 ; + p[3] = v ; } -static void ww (uae_u8 *p, int v) +static void ww(uae_u8 *p, int v) { - p[0] = v >> 8; - p[1] = v; + p[0] = v >> 8 ; + p[1] = v ; } -static int rl (uae_u8 *p) +static int rl(uae_u8 *p) { - return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]); + return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]) ; } -static int rw (uae_u8 *p) +static int rw(uae_u8 *p) { - return (p[0] << 8) | (p[1]); + return (p[0] << 8) | (p[1]) ; } -static void stopplay (int unitnum) +static void stopplay(int unitnum) { - sys_command_cd_stop (unitnum); + sys_command_cd_stop(unitnum) ; } -static int addtocentry (uae_u8 **dstp, int *len, int point, int newpoint, int msf, uae_u8 *head, struct cd_toc_head *th) +static int addtocentry(uae_u8 **dstp, int *len, int point, int newpoint, int msf, uae_u8 *head, struct cd_toc_head *th) { - uae_u8 *dst = *dstp; + uae_u8 *dst = *dstp ; - for (int i = 0; i < th->points; i++) { - struct cd_toc *t = &th->toc[i]; - if (t->point == point) { - if (*len < 8) - return 0; - int addr = t->paddress; - if (msf) - addr = lsn2msf (addr); - dst[0] = 0; - dst[1] = (t->adr << 4) | t->control; - dst[2] = newpoint >= 0 ? newpoint : point; - dst[3] = 0; - dst[4] = addr >> 24; - dst[5] = addr >> 16; - dst[6] = addr >> 8; - dst[7] = addr >> 0; + for(int i = 0 ; i < th->points ; i++) { + struct cd_toc *t = &th->toc[i] ; + if(t->point == point) { + if(*len < 8) + return 0 ; + int addr = t->paddress ; + if(msf) + addr = lsn2msf(addr) ; + dst[0] = 0 ; + dst[1] = (t->adr << 4) | t->control ; + dst[2] = newpoint >= 0 ? newpoint : point ; + dst[3] = 0 ; + dst[4] = addr >> 24 ; + dst[5] = addr >> 16 ; + dst[6] = addr >> 8 ; + dst[7] = addr >> 0 ; - if (point >= 1 && point <= 99) { - if (head[2] == 0) - head[2] = point; - head[3] = point; - } - - *len -= 8; - *dstp = dst + 8; - return 1; - } - } - return -1; + if(point >= 1 && point <= 99) { + if(head[2] == 0) + head[2] = point ; + head[3] = point ; } -static int scsiemudrv (int unitnum, uae_u8 *cmd) -{ - if (failunit (unitnum)) - return -1; - if (!getsem (unitnum)) - return 0; - int v = 0; - if (state[unitnum].device_func->scsiemu) - v = state[unitnum].device_func->scsiemu (unitnum, cmd); - freesem (unitnum); - return v; + *len -= 8 ; + *dstp = dst + 8 ; + return 1 ; +} +} +return - 1 ; } -static int scsi_read_cd (int unitnum, uae_u8 *cmd, uae_u8 *data, struct device_info *di) +static int scsiemudrv(int unitnum, uae_u8 *cmd) { - struct blkdevstate *st = &state[unitnum]; - int msf = cmd[0] == 0xb9; - int start = msf ? msf2lsn (rl (cmd + 2) & 0x00ffffff) : rl (cmd + 2); - int len = rl (cmd + 5) & 0x00ffffff; - if (msf) { - int end = msf2lsn (len); - len = end - start; - if (len < 0) - return -1; - } - int subs = cmd[10] & 7; - if (len == 0) - return 0; - int v = sys_command_cd_rawread (unitnum, data, start, len, 0, (cmd[1] >> 2) & 7, cmd[9], subs); - if (v > 0) - st->current_pos = start + len; - return v; + if(failunit(unitnum)) + return - 1 ; + if(!getsem(unitnum)) + return 0 ; + int v = 0 ; + if(state[unitnum].device_func->scsiemu) + v = state[unitnum].device_func->scsiemu(unitnum, cmd) ; + freesem(unitnum) ; + return v ; } -static int scsi_read_cd_data (int unitnum, uae_u8 *scsi_data, uae_u32 offset, uae_u32 len, struct device_info *di, int *scsi_len) +static int scsi_read_cd(int unitnum, uae_u8 *cmd, uae_u8 *data, struct device_info *di) { - struct blkdevstate *st = &state[unitnum]; - if (len == 0) { - if (offset >= di->sectorspertrack * di->cylinders * di->trackspercylinder) - return -1; - *scsi_len = 0; - return 0; - } else { - if (len * di->bytespersector > SCSI_DATA_BUFFER_SIZE) - return -3; - if (offset >= di->sectorspertrack * di->cylinders * di->trackspercylinder) - return -1; - int v = cmd_readx (unitnum, scsi_data, offset, len) * di->bytespersector; - if (v > 0) { - st->current_pos = offset + len; - *scsi_len = v; - return 0; - } - return -2; - } + struct blkdevstate *st = &state[unitnum] ; + int msf = cmd[0] == 0xb9 ; + int start = msf ? msf2lsn(rl(cmd + 2) & 0x00ffffff) : rl(cmd + 2) ; + int len = rl(cmd + 5) & 0x00ffffff ; + if(msf) { + int end = msf2lsn(len) ; + len = end - start ; + if(len < 0) + return - 1 ; +} +int subs = cmd[10] & 7 ; +if(len == 0) + return 0 ; +int v = sys_command_cd_rawread(unitnum, data, start, len, 0, (cmd[1] >> 2) & 7, cmd[9], subs) ; +if(v > 0) + st->current_pos = start + len ; +return v ; } -int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, - uae_u8 *scsi_data, int *data_len, uae_u8 *r, int *reply_len, uae_u8 *s, int *sense_len, bool atapi) +static int scsi_read_cd_data(int unitnum, uae_u8 *scsi_data, uae_u32 offset, uae_u32 len, struct device_info *di, int *scsi_len) { - struct blkdevstate *st = &state[unitnum]; - uae_u32 len, offset; - int lr = 0, ls = 0; - int scsi_len = -1; - int v; - int status = 0; - struct device_info di; - uae_u8 cmd = cmdbuf[0]; - int dlen; + struct blkdevstate *st = &state[unitnum] ; + if(len == 0) { + if(offset >= di->sectorspertrack * di->cylinders * di->trackspercylinder) + return - 1 ; +*scsi_len = 0 ; +return 0 ; +} else { + if(len * di->bytespersector > SCSI_DATA_BUFFER_SIZE) + return - 3 ; +if(offset >= di->sectorspertrack * di->cylinders * di->trackspercylinder) + return - 1 ; +int v = cmd_readx(unitnum, scsi_data, offset, len) * di->bytespersector ; +if(v > 0) { + st->current_pos = offset + len ; + *scsi_len = v ; + return 0 ; +} +return - 2 ; +} +} - if (cmd == 0x03) { /* REQUEST SENSE */ - st->mediawaschanged = false; - return 0; - } +int scsi_cd_emulate(int unitnum, + uae_u8 *cmdbuf, + int scsi_cmd_len, + uae_u8 *scsi_data, + int *data_len, + uae_u8 *r, + int *reply_len, + uae_u8 *s, + int *sense_len, + bool atapi) +{ + struct blkdevstate *st = &state[unitnum] ; + uae_u32 len, + offset ; + int lr = 0, + ls = 0 ; + int scsi_len = -1 ; + int v ; + int status = 0 ; + struct device_info di ; + uae_u8 cmd = cmdbuf[0] ; + int dlen ; + + if(cmd == 0x03) { /* REQUEST SENSE */ + st->mediawaschanged = false ; + return 0 ; +} - dlen = *data_len; - *reply_len = *sense_len = 0; +dlen = *data_len ; +*reply_len = *sense_len = 0 ; - sys_command_info (unitnum, &di, 1); + sys_command_info(unitnum, &di, 1) ; - if (log_scsiemu) { - write_log (_T("SCSIEMU %d: %02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X CMDLEN=%d DATA=%08X LEN=%d\n"), unitnum, - cmdbuf[0], cmdbuf[1], cmdbuf[2], cmdbuf[3], cmdbuf[4], cmdbuf[5], cmdbuf[6], - cmdbuf[7], cmdbuf[8], cmdbuf[9], cmdbuf[10], cmdbuf[11], - scsi_cmd_len, scsi_data, dlen); - } + if(log_scsiemu) { + write_log(_T("SCSIEMU %d: %02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X CMDLEN=%d DATA=%08X LEN=%d\n"), + unitnum, + cmdbuf[0], + cmdbuf[1], + cmdbuf[2], + cmdbuf[3], + cmdbuf[4], + cmdbuf[5], + cmdbuf[6], + cmdbuf[7], + cmdbuf[8], + cmdbuf[9], + cmdbuf[10], + cmdbuf[11], + scsi_cmd_len, + scsi_data, + dlen) ; +} // media changed and not inquiry - if (st->mediawaschanged && cmd != 0x12) { - if (log_scsiemu) { - write_log (_T("SCSIEMU %d: MEDIUM MAY HAVE CHANGED STATE\n")); - } - lr = -1; - status = 2; /* CHECK CONDITION */ - s[0] = 0x70; - s[2] = 6; /* UNIT ATTENTION */ - s[12] = 0x28; /* MEDIUM MAY HAVE CHANGED */ - ls = 0x12; - if (cmd == 0x00) - st->mediawaschanged = false; - goto end; - } - - switch (cmdbuf[0]) - { - case 0x00: /* TEST UNIT READY */ - if (nodisk (&di)) - goto nodisk; - scsi_len = 0; - break; - case 0x1e: /* PREVENT/ALLOW MEDIUM REMOVAL */ - scsi_len = 0; - break; - case 0xbd: /* MECHANISM STATUS */ - len = (cmdbuf[8] << 8) | cmdbuf[9]; - if (len > 8) - len = 8; - scsi_len = len; - r[2] = st->current_pos >> 16; - r[3] = st->current_pos >> 8; - r[4] = st->current_pos >> 0; - break; - case 0x12: /* INQUIRY */ - { - if ((cmdbuf[1] & 1) || cmdbuf[2] != 0) - goto err; - len = cmdbuf[4]; - if (cmdbuf[1] >> 5) { - r[0] = 0x7f; - } else { - r[0] = 5; // CDROM - } - r[1] |= 0x80; // removable - r[2] = 2; /* supports SCSI-2 */ - r[3] = 2; /* response data format */ - if (atapi) - r[3] |= 3 << 5; // atapi transport version - r[4] = 32; /* additional length */ - r[7] = 0; - scsi_len = lr = len < 36 ? len : 36; - r[2] = 2; - r[3] = 2; - char *s = ua (di.vendorid); - memcpy (r + 8, s, strlen (s)); - xfree (s); - s = ua (di.productid); - memcpy (r + 16, s, strlen (s)); - xfree (s); - s = ua (di.revision); - memcpy (r + 32, s, strlen (s)); - xfree (s); - for (int i = 8; i < 36; i++) { - if (r[i] == 0) - r[i] = 32; - } - } - break; - case 0xbe: // READ CD - case 0xb9: // READ CD MSF - if (nodisk (&di)) - goto nodisk; - scsi_len = scsi_read_cd (unitnum, cmdbuf, scsi_data, &di); - if (scsi_len == -2) - goto notdatatrack; - if (scsi_len == -1) - goto errreq; - break; - case 0x55: // MODE SELECT(10) - case 0x15: // MODE SELECT(6) - { - uae_u8 *p; - bool mode10 = cmdbuf[0] == 0x55; - p = scsi_data + 4; - if (mode10) - p += 4; - int pcode = p[0] & 0x3f; - if (pcode == 14) { // CD audio control - uae_u16 vol_left = (p[9] << 7) | (p[9] >> 1); - uae_u16 vol_right = (p[11] << 7) | (p[11] >> 1); - sys_command_cd_volume (unitnum, vol_left, vol_right); - scsi_len = 0; - } else { - if (log_scsiemu) - write_log (_T("MODE SELECT PC=%d not supported\n"), pcode); - goto errreq; - } - } - break; - case 0x5a: // MODE SENSE(10) - case 0x1a: /* MODE SENSE(6) */ - { - uae_u8 *p; - int maxlen; - bool pcodeloop = false; - bool sense10 = cmdbuf[0] == 0x5a; - int psize, totalsize, bdsize; - int pc = cmdbuf[2] >> 6; - int pcode = cmdbuf[2] & 0x3f; - int dbd = cmdbuf[1] & 8; - - if (atapi) { - if (!sense10) - goto err; - dbd = 1; - } - if (log_scsiemu) - write_log (_T("MODE SENSE PC=%d CODE=%d DBD=%d\n"), pc, pcode, dbd); - p = r; - if (sense10) { - totalsize = 8 - 2; - maxlen = (cmdbuf[7] << 8) | cmdbuf[8]; - p[2] = 0; - p[3] = 0; - p[4] = 0; - p[5] = 0; - p[6] = 0; - p[7] = 0; - p += 8; - } else { - totalsize = 4 - 1; - maxlen = cmdbuf[4]; - p[1] = 0; - p[2] = 0; - p[3] = 0; - p += 4; - } - bdsize = 0; - if (!dbd) { - wl(p + 0, 0); - wl(p + 4, di.bytespersector); - bdsize = 8; - p += bdsize; - } - if (pcode == 0x3f) { - pcode = 1; // page = 0 must be last - pcodeloop = true; - } - for (;;) { - psize = 0; - if (pcode == 0) { - p[0] = 0; - p[1] = 0; - p[2] = 0x20; - p[3] = 0; - psize = 4; - } else if (pcode == 14) { // CD audio control - uae_u32 vol = sys_command_cd_volume (unitnum, 0xffff, 0xffff); - p[0] = 0x0e; - p[1] = 0x0e; - p[2] = 4|1; - p[3] = 4; - p[6] = 0; - p[7] = 75; - p[8] = 1; - p[9] = pc == 0 ? (vol >> 7) & 0xff : 0xff; - p[10] = 2; - p[11] = pc == 0 ? (vol >> (16 + 7)) & 0xff : 0xff; - psize = p[1] + 2; - } else if (pcode == 0x2a) { // cd/dvd capabilities - p[0] = 0x2a; - p[1] = 0x18; - p[2] = 1; // | 0x10 | 0x20; // read: CD-R/DVD-ROM/DVD-R - p[3] = 0; // write: nothing - p[4] = 0x40 | 0x20 | 0x10 | 0x01; - p[5] = 0x08 | 0x04 | 0x02 | 0x01; - p[6] = (1 << 5) | 0x10; // type = tray, eject supported - p[7] = 3; // separate channel mute and volume - p[8] = 2; p[9] = 0; - p[10] = 0xff; p[11] = 0xff; // number of volume levels - p[12] = 4; p[13] = 0; // "1M buffer" - p[14] = 2; p[15] = 0; - p[16] = 0; - p[17] = 0; - p[18] = p[19] = 0; - p[20] = p[21] = 0; - p[22] = p[23] = 0; - psize = p[1] + 2; - } else { - if (!pcodeloop) - goto err; - } - totalsize += psize; - p += psize; - if (!pcodeloop) - break; - if (pcode == 0) - break; - pcode++; - if (pcode == 0x3f) - pcode = 0; - } - if (sense10) { - totalsize += bdsize; - r[6] = bdsize >> 8; - r[7] = bdsize & 0xff; - r[0] = totalsize >> 8; - r[1] = totalsize & 0xff; - } else { - totalsize += bdsize; - r[3] = bdsize & 0xff; - r[0] = totalsize & 0xff; - } - scsi_len = totalsize + 1; - if (scsi_len > maxlen) - scsi_len = maxlen; - lr = scsi_len; - } - break; - case 0x01: /* REZERO UNIT */ - scsi_len = 0; - break; - case 0x1d: /* SEND DIAGNOSTICS */ - scsi_len = 0; - break; - case 0x25: /* READ CAPACITY */ - { - int pmi = cmdbuf[8] & 1; - uae_u32 lba = (cmdbuf[2] << 24) | (cmdbuf[3] << 16) | (cmdbuf[4] << 8) | cmdbuf[5]; - int cyl, cylsec, head, tracksec; - if (nodisk (&di)) - goto nodisk; - uae_u32 blocks = di.sectorspertrack * di.cylinders * di.trackspercylinder - 1; - cyl = di.cylinders; - head = 1; - cylsec = tracksec = di.trackspercylinder; - if (pmi == 0 && lba != 0) - goto errreq; - if (pmi) { - lba += tracksec * head; - lba /= tracksec * head; - lba *= tracksec * head; - if (lba > blocks) - lba = blocks; - blocks = lba; - } - wl (r, blocks); - wl (r + 4, di.bytespersector); - scsi_len = lr = 8; - } - break; - case 0x0b: /* SEEK (6) */ - { - if (nodisk (&di)) - goto nodisk; - stopplay (unitnum); - offset = ((cmdbuf[1] & 31) << 16) | (cmdbuf[2] << 8) | cmdbuf[3]; - struct cd_toc *t = gettoc (&di.toc, offset); - v = scsi_read_cd_data (unitnum, scsi_data, offset, 0, &di, &scsi_len); - if (v == -1) - goto outofbounds; - } - break; - case 0x08: /* READ (6) */ - { - if (nodisk (&di)) - goto nodisk; - stopplay (unitnum); - offset = ((cmdbuf[1] & 31) << 16) | (cmdbuf[2] << 8) | cmdbuf[3]; - struct cd_toc *t = gettoc (&di.toc, offset); - if ((t->control & 0x0c) == 0x04) { - len = cmdbuf[4]; - if (!len) - len = 256; - v = scsi_read_cd_data (unitnum, scsi_data, offset, len, &di, &scsi_len); - if (v == -1) - goto outofbounds; - if (v == -2) - goto readerr; - if (v == -3) - goto toolarge; - } else { - goto notdatatrack; - } - } - break; - case 0x0a: /* WRITE (6) */ - goto readprot; - case 0x2b: /* SEEK (10) */ - { - if (nodisk (&di)) - goto nodisk; - stopplay (unitnum); - offset = rl (cmdbuf + 2); - struct cd_toc *t = gettoc (&di.toc, offset); - v = scsi_read_cd_data (unitnum, scsi_data, offset, 0, &di, &scsi_len); - if (v == -1) - goto outofbounds; - } - break; - case 0x28: /* READ (10) */ - { - if (nodisk (&di)) - goto nodisk; - stopplay (unitnum); - offset = rl (cmdbuf + 2); - struct cd_toc *t = gettoc (&di.toc, offset); - if ((t->control & 0x0c) == 0x04) { - len = rl (cmdbuf + 7 - 2) & 0xffff; - v = scsi_read_cd_data (unitnum, scsi_data, offset, len, &di, &scsi_len); - if (v == -1) - goto outofbounds; - if (v == -2) - goto readerr; - if (v == -3) - goto toolarge; - } else { - goto notdatatrack; - } - } - break; - case 0x2a: /* WRITE (10) */ - goto readprot; - case 0xa8: /* READ (12) */ - { - if (nodisk (&di)) - goto nodisk; - stopplay (unitnum); - offset = rl (cmdbuf + 2); - struct cd_toc *t = gettoc (&di.toc, offset); - if ((t->control & 0x0c) == 0x04) { - len = rl (cmdbuf + 6); - v = scsi_read_cd_data (unitnum, scsi_data, offset, len, &di, &scsi_len); - if (v == -1) - goto outofbounds; - if (v == -2) - goto readerr; - if (v == -3) - goto toolarge; - } else { - goto notdatatrack; - } - } - break; - case 0xaa: /* WRITE (12) */ - goto readprot; - case 0x51: /* READ DISC INFORMATION */ - { - struct cd_toc_head ttoc; - int maxlen = (cmdbuf[7] << 8) | cmdbuf[8]; - if (nodisk (&di)) - goto nodisk; - if (!sys_command_cd_toc (unitnum, &ttoc)) - goto readerr; - struct cd_toc_head *toc = &ttoc; - uae_u8 *p = scsi_data; - p[0] = 0; - p[1] = 34 - 2; - p[2] = 2 | (3 << 2); // complete cd rom, last session is complete - p[3] = toc->first_track; - p[4] = 1; - p[5] = toc->first_track; - p[6] = toc->last_track; - wl (p + 16, lsn2msf (toc->lastaddress)); - wl (p + 20, 0x00ffffff); - scsi_len = p[1] + 2; - if (scsi_len > maxlen) - scsi_len = maxlen; - } - break; - case 0x52: /* READ TRACK INFORMATION */ - { - struct cd_toc_head ttoc; - int maxlen = (cmdbuf[7] << 8) | cmdbuf[8]; - if (nodisk (&di)) - goto nodisk; - if (!sys_command_cd_toc (unitnum, &ttoc)) - goto readerr; - struct cd_toc_head *toc = &ttoc; - uae_u8 *p = scsi_data; - int lsn; - if (cmdbuf[1] & 1) { - int track = cmdbuf[5]; - lsn = toc->toc[track].address; - } else { - lsn = rl (p + 2); - } - struct cd_toc *t = gettoc (toc, lsn); - p[0] = 0; - p[1] = 28 - 2; - p[2] = t->track; - p[3] = 1; - p[5] = t->control; - p[6] = 0; // data mode, fixme - wl (p + 8, t->address); - wl (p + 24, t[1].address - t->address); - scsi_len = p[1] + 2; - if (scsi_len > maxlen) - scsi_len = maxlen; - } - break; - case 0x43: // READ TOC - { - if (nodisk (&di)) - goto nodisk; - uae_u8 *p = scsi_data; - int strack = cmdbuf[6]; - int msf = cmdbuf[1] & 2; - int format = cmdbuf[2] & 7; - if (format >= 3) - goto errreq; - int maxlen = (cmdbuf[7] << 8) | cmdbuf[8]; - int maxlen2 = maxlen; - struct cd_toc_head ttoc; - if (!sys_command_cd_toc (unitnum, &ttoc)) - goto readerr; - struct cd_toc_head *toc = &ttoc; - if (maxlen < 4) - goto errreq; - if (format == 1) { - p[0] = 0; - p[1] = 2 + 8; - p[2] = 1; - p[3] = 1; - p[4] = 0; - p[5] = (toc->toc[0].adr << 4) | toc->toc[0].control; - p[6] = toc->first_track; - p[7] = 0; - if (msf) - wl (p + 8, lsn2msf (toc->toc[0].address)); - else - wl (p + 8 , toc->toc[0].address); - scsi_len = 12; - } else if (format == 2 || format == 0) { - if (format == 2 && !msf) - goto errreq; - if (strack == 0) - strack = toc->first_track; - if (format == 0 && strack >= 100 && strack != 0xaa) - goto errreq; - uae_u8 *p2 = p + 4; - p[2] = 0; - p[3] = 0; - maxlen -= 4; - if (format == 2) { - if (!addtocentry (&p2, &maxlen, 0xa0, -1, msf, p, toc)) - break; - if (!addtocentry (&p2, &maxlen, 0xa1, -1, msf, p, toc)) - break; - if (!addtocentry (&p2, &maxlen, 0xa2, -1, msf, p, toc)) - break; - } - while (strack < 100) { - if (!addtocentry (&p2, &maxlen, strack, -1, msf, p, toc)) - break; - strack++; - } - addtocentry (&p2, &maxlen, 0xa2, 0xaa, msf, p, toc); - int tlen = p2 - (p + 2); - p[0] = tlen >> 8; - p[1] = tlen >> 0; - scsi_len = tlen + 2; - if (scsi_len > maxlen2) - scsi_len = maxlen2; - } - } - break; - case 0x42: // READ SUB-CHANNEL - { - int msf = cmdbuf[1] & 2; - int subq = cmdbuf[2] & 0x40; - int format = cmdbuf[3]; - int track = cmdbuf[6]; - int len = rw (cmdbuf + 7); - uae_u8 buf[SUBQ_SIZE] = { 0 }; - - if (nodisk (&di)) - goto nodisk; - sys_command_cd_qcode (unitnum, buf); - if (len < 4) - goto errreq; - scsi_len = 4; - scsi_data[0] = 0; - scsi_data[1] = buf[1]; - if (subq && format == 1) { - if (len < 4 + 12) - goto errreq; - scsi_data[2] = 0; - scsi_data[3] = 12; - scsi_len += 12; - scsi_data[4] = 1; - scsi_data[5] = (buf[4 + 0] << 4) | (buf[4 + 0] >> 4); - scsi_data[6] = frombcd (buf[4 + 1]); // track - scsi_data[7] = frombcd (buf[4 + 2]); // index - int reladdr = fromlongbcd (&buf[4 + 3]); - int absaddr = fromlongbcd (&buf[4 + 7]); - if (!msf) { - reladdr = msf2lsn (reladdr); - absaddr = msf2lsn (absaddr); - } - wl (scsi_data + 8, absaddr); - wl (scsi_data + 12, reladdr); - } else { - scsi_data[2] = 0; - scsi_data[3] = 0; - } - } - break; - case 0x1b: // START/STOP - sys_command_cd_stop (unitnum); - scsiemudrv (unitnum, cmdbuf); - scsi_len = 0; - break; - case 0x4e: // STOP PLAY/SCAN - if (nodisk (&di)) - goto nodisk; - sys_command_cd_stop (unitnum); - scsi_len = 0; - break; - case 0xba: // SCAN - { - if (nodisk (&di)) - goto nodisk; - struct cd_toc_head ttoc; - if (!sys_command_cd_toc (unitnum, &ttoc)) - goto readerr; - struct cd_toc_head *toc = &ttoc; - int scan = (cmdbuf[1] & 0x10) ? -1 : 1; - int start = rl (cmdbuf + 1) & 0x00ffffff; - int end = scan > 0 ? toc->lastaddress : toc->toc[toc->first_track_offset].paddress; - int type = cmdbuf[9] >> 6; - if (type == 1) - start = lsn2msf (start); - if (type == 3) - goto errreq; - if (type == 2) { - if (toc->first_track_offset + start >= toc->last_track_offset) - goto errreq; - start = toc->toc[toc->first_track_offset + start].paddress; - } - sys_command_cd_pause (unitnum, 0); - sys_command_cd_play (unitnum, start, end, scan); - scsi_len = 0; - } - break; - case 0x48: // PLAY AUDIO TRACK/INDEX - { - if (nodisk (&di)) - goto nodisk; - int strack = cmdbuf[4]; - int etrack = cmdbuf[7]; - struct cd_toc_head ttoc; - if (!sys_command_cd_toc (unitnum, &ttoc)) - goto readerr; - struct cd_toc_head *toc = &ttoc; - if (strack < toc->first_track || strack > toc->last_track || - etrack < toc->first_track || etrack > toc->last_track || - strack > etrack) - goto errreq; - int start = toc->toc[toc->first_track_offset + strack - 1].paddress; - int end = etrack == toc->last_track ? toc->lastaddress : toc->toc[toc->first_track_offset + etrack - 1 + 1].paddress; - sys_command_cd_pause (unitnum, 0); - if (!sys_command_cd_play (unitnum, start, end, 0)) - goto notdatatrack; - scsi_len = 0; - } - break; - case 0x49: // PLAY AUDIO TRACK RELATIVE (10) - case 0xa9: // PLAY AUDIO TRACK RELATIVE (12) - { - if (nodisk (&di)) - goto nodisk; - int len = cmd == 0xa9 ? rl (cmdbuf + 6) : rw (cmdbuf + 7); - int track = cmd == 0xa9 ? cmdbuf[10] : cmdbuf[6]; - if (track < di.toc.first_track || track > di.toc.last_track) - goto errreq; - int start = di.toc.toc[di.toc.first_track_offset + track - 1].paddress; - int rel = rl (cmdbuf + 2); - start += rel; - int end = start + len; - if (end > di.toc.lastaddress) - end = di.toc.lastaddress; - if (len > 0) { - sys_command_cd_pause (unitnum, 0); - if (!sys_command_cd_play (unitnum, start, start + len, 0)) - goto notdatatrack; - } - scsi_len = 0; - } - break; - case 0x47: // PLAY AUDIO MSF - { - if (nodisk (&di)) - goto nodisk; - int start = rl (cmdbuf + 2) & 0x00ffffff; - if (start == 0x00ffffff) { - uae_u8 buf[SUBQ_SIZE] = { 0 }; - sys_command_cd_qcode (unitnum, buf); - start = fromlongbcd (buf + 4 + 7); - } - int end = msf2lsn (rl (cmdbuf + 5) & 0x00ffffff); - if (end > di.toc.lastaddress) - end = di.toc.lastaddress; - start = msf2lsn (start); - if (start > end) - goto errreq; - if (start < end) - sys_command_cd_pause (unitnum, 0); - if (!sys_command_cd_play (unitnum, start, end, 0)) - goto notdatatrack; - scsi_len = 0; - } - break; - case 0x45: // PLAY AUDIO (10) - case 0xa5: // PLAY AUDIO (12) - { - if (nodisk (&di)) - goto nodisk; - int start = rl (cmdbuf + 2); - int len; - if (cmd == 0xa5) - len = rl (cmdbuf + 6); - else - len = rw (cmdbuf + 7); - if (len > 0) { - if (start == -1) { - uae_u8 buf[SUBQ_SIZE] = { 0 }; - sys_command_cd_qcode (unitnum, buf); - start = msf2lsn (fromlongbcd (buf + 4 + 7)); - } - int end = start + len; - if (end > di.toc.lastaddress) - end = di.toc.lastaddress; - sys_command_cd_pause (unitnum, 0); - if (!sys_command_cd_play (unitnum, start, end, 0)) - goto notdatatrack; - } - scsi_len = 0; - } - break; - case 0xbc: // PLAY CD - { - if (nodisk (&di)) - goto nodisk; - int start = -1; - int end = -1; - if (cmdbuf[1] & 2) { - start = msf2lsn (rl (cmdbuf + 2) & 0x00ffffff); - end = msf2lsn (rl (cmdbuf + 5) & 0x00ffffff); - } else { - start = rl (cmdbuf + 2); - end = start + rl (cmdbuf + 6); - } - if (end > di.toc.lastaddress) - end = di.toc.lastaddress; - if (start > end) - goto errreq; - if (start < end) { - sys_command_cd_pause (unitnum, 0); - if (!sys_command_cd_play (unitnum, start, end, 0)) - goto notdatatrack; - } - } - break; - case 0x4b: // PAUSE/RESUME - { - if (nodisk (&di)) - goto nodisk; - uae_u8 buf[SUBQ_SIZE] = { 0 }; - int resume = cmdbuf[8] & 1; - sys_command_cd_qcode (unitnum, buf); - if (buf[1] != AUDIO_STATUS_IN_PROGRESS && buf[1] != AUDIO_STATUS_PAUSED) - goto errreq; - sys_command_cd_pause (unitnum, resume ? 0 : 1); - scsi_len = 0; - } - break; - case 0x35: /* SYNCRONIZE CACHE (10) */ - scsi_len = 0; - break; - - default: -err: - write_log (_T("CDEMU: unsupported scsi command 0x%02X\n"), cmdbuf[0]); -readprot: - status = 2; /* CHECK CONDITION */ - s[0] = 0x70; - s[2] = 5; - s[12] = 0x20; /* INVALID COMMAND */ - ls = 0x12; - break; -nodisk: - status = 2; /* CHECK CONDITION */ - s[0] = 0x70; - s[2] = 2; /* NOT READY */ - s[12] = 0x3A; /* MEDIUM NOT PRESENT */ - ls = 0x12; - break; -readerr: - status = 2; /* CHECK CONDITION */ - s[0] = 0x70; - s[2] = 2; /* NOT READY */ - s[12] = 0x11; /* UNRECOVERED READ ERROR */ - ls = 0x12; - break; -notdatatrack: - status = 2; - s[0] = 0x70; - s[2] = 5; - s[12] = 0x64; /* ILLEGAL MODE FOR THIS TRACK */ - ls = 0x12; - break; -outofbounds: - status = 2; /* CHECK CONDITION */ - s[0] = 0x70; - s[2] = 5; /* ILLEGAL REQUEST */ - s[12] = 0x21; /* LOGICAL BLOCK OUT OF RANGE */ - ls = 0x12; - break; -toolarge: - write_log (_T("CDEMU: too large scsi data tranfer %d > %d\n"), len, dlen); - status = 2; /* CHECK CONDITION */ - s[0] = 0x70; - s[2] = 2; /* NOT READY */ - s[12] = 0x11; /* UNRECOVERED READ ERROR */ - ls = 0x12; - break; -errreq: - lr = -1; - status = 2; /* CHECK CONDITION */ - s[0] = 0x70; - s[2] = 5; /* ILLEGAL REQUEST */ - s[12] = 0x24; /* ILLEGAL FIELD IN CDB */ - ls = 0x12; - break; - } -end: - *data_len = scsi_len; - *reply_len = lr; - *sense_len = ls; - if (ls) { - //s[0] |= 0x80; - s[7] = ls - 7; // additional sense length - if (log_scsiemu) { - write_log (_T("-> SENSE STATUS: KEY=%d ASC=%02X ASCQ=%02X\n"), s[2], s[12], s[13]); - } - } - if (cmdbuf[0] && log_scsiemu) - write_log (_T("-> DATAOUT=%d ST=%d SENSELEN=%d\n"), scsi_len, status, ls); - return status; + if(st->mediawaschanged && cmd != 0x12) { + if(log_scsiemu) { + write_log(_T("SCSIEMU %d: MEDIUM MAY HAVE CHANGED STATE\n")) ; +} +lr = -1 ; +status = 2 ; /* CHECK CONDITION */ +s[0] = 0x70 ; +s[2] = 6 ; /* UNIT ATTENTION */ +s[12] = 0x28 ; /* MEDIUM MAY HAVE CHANGED */ +ls = 0x12 ; +if(cmd == 0x00) + st->mediawaschanged = false ; +goto end ; } -static int execscsicmd_direct (int unitnum, int type, struct amigascsi *as) + switch(cmdbuf[0]) { - int io_error = 0; - uae_u8 *scsi_datap, *scsi_datap_org; - uae_u32 scsi_cmd_len_orig = as->cmd_len; - uae_u8 cmd[16] = { 0 }; - uae_u8 replydata[256] = { 0 }; - int datalen = as->len; - int senselen = as->sense_len; - int replylen = 0; + case 0x00 : /* TEST UNIT READY */ + if(nodisk(&di)) + goto nodisk ; + scsi_len = 0 ; + break ; + case 0x1e : /* PREVENT/ALLOW MEDIUM REMOVAL */ + scsi_len = 0 ; + break ; + case 0xbd : /* MECHANISM STATUS */ + len = (cmdbuf[8] << 8) | cmdbuf[9] ; + if(len > 8) + len = 8 ; + scsi_len = len ; + r[2] = st->current_pos >> 16 ; + r[3] = st->current_pos >> 8 ; + r[4] = st->current_pos >> 0 ; + break ; + case 0x12 : /* INQUIRY */ +{ + if((cmdbuf[1] & 1) || cmdbuf[2] != 0) + goto err ; +len = cmdbuf[4] ; +if(cmdbuf[1] >> 5) { + r[0] = 0x7f ; +} else { + r[0] = 5 ; // CDROM +} +r[1] |= 0x80 ; // removable +r[2] = 2 ; /* supports SCSI-2 */ +r[3] = 2 ; /* response data format */ +if(atapi) + r[3] |= 3 << 5 ; // atapi transport version +r[4] = 32 ; /* additional length */ +r[7] = 0 ; +scsi_len = lr = len < 36 ? len : 36 ; +r[2] = 2 ; +r[3] = 2 ; +char *s = ua(di.vendorid) ; +memcpy(r + 8, s, strlen(s)) ; +xfree(s) ; +s = ua(di.productid) ; +memcpy(r + 16, s, strlen(s)) ; +xfree(s) ; +s = ua(di.revision) ; +memcpy(r + 32, s, strlen(s)) ; +xfree(s) ; +for(int i = 8 ; i < 36 ; i++) { + if(r[i] == 0) + r[i] = 32 ; +} +} +break ; +case 0xbe : // READ CD +case 0xb9 : // READ CD MSF + if(nodisk(&di)) + goto nodisk ; +scsi_len = scsi_read_cd(unitnum, cmdbuf, scsi_data, &di) ; +if(scsi_len == -2) + goto notdatatrack ; +if(scsi_len == -1) + goto errreq ; +break ; +case 0x55 : // MODE SELECT(10) +case 0x15 : // MODE SELECT(6) +{ + uae_u8 *p ; + bool mode10 = cmdbuf[0] == 0x55 ; + p = scsi_data + 4 ; + if(mode10) + p += 4 ; +int pcode = p[0] & 0x3f ; +if(pcode == 14) { // CD audio control + uae_u16 vol_left = (p[9] << 7) | (p[9] >> 1) ; + uae_u16 vol_right = (p[11] << 7) | (p[11] >> 1) ; + sys_command_cd_volume(unitnum, vol_left, vol_right) ; + scsi_len = 0 ; +} else { + if(log_scsiemu) + write_log(_T("MODE SELECT PC=%d not supported\n"), pcode) ; + goto errreq ; +} +} +break ; +case 0x5a : // MODE SENSE(10) +case 0x1a : /* MODE SENSE(6) */ +{ + uae_u8 *p ; + int maxlen ; + bool pcodeloop = false ; + bool sense10 = cmdbuf[0] == 0x5a ; + int psize, + totalsize, + bdsize ; + int pc = cmdbuf[2] >> 6 ; + int pcode = cmdbuf[2] & 0x3f ; + int dbd = cmdbuf[1] & 8 ; - memcpy (cmd, as->cmd, as->cmd_len); - scsi_datap = scsi_datap_org = as->len ? as->data : 0; - if (as->sense_len > 32) - as->sense_len = 32; + if(atapi) { + if(!sense10) + goto err ; + dbd = 1 ; +} +if(log_scsiemu) + write_log(_T("MODE SENSE PC=%d CODE=%d DBD=%d\n"), pc, pcode, dbd) ; +p = r ; +if(sense10) { + totalsize = 8 - 2 ; + maxlen = (cmdbuf[7] << 8) | cmdbuf[8] ; + p[2] = 0 ; + p[3] = 0 ; + p[4] = 0 ; + p[5] = 0 ; + p[6] = 0 ; + p[7] = 0 ; + p += 8 ; +} else { + totalsize = 4 - 1 ; + maxlen = cmdbuf[4] ; + p[1] = 0 ; + p[2] = 0 ; + p[3] = 0 ; + p += 4 ; +} +bdsize = 0 ; +if(!dbd) { + wl(p + 0, 0) ; + wl(p + 4, di.bytespersector) ; + bdsize = 8 ; + p += bdsize ; +} +if(pcode == 0x3f) { + pcode = 1 ; // page = 0 must be last + pcodeloop = true ; +} +for(; ;) { + psize = 0 ; + if(pcode == 0) { + p[0] = 0 ; + p[1] = 0 ; + p[2] = 0x20 ; + p[3] = 0 ; + psize = 4 ; +} else if(pcode == 14) { // CD audio control + uae_u32 vol = sys_command_cd_volume(unitnum, 0xffff, 0xffff) ; + p[0] = 0x0e ; + p[1] = 0x0e ; + p[2] = 4 | 1 ; + p[3] = 4 ; + p[6] = 0 ; + p[7] = 75 ; + p[8] = 1 ; + p[9] = pc == 0 ? (vol >> 7) & 0xff : 0xff ; + p[10] = 2 ; + p[11] = pc == 0 ? (vol >> (16 + 7)) & 0xff : 0xff ; + psize = p[1] + 2 ; +} else if(pcode == 0x2a) { // cd/dvd capabilities + p[0] = 0x2a ; + p[1] = 0x18 ; + p[2] = 1 ; // | 0x10 | 0x20; // read: CD-R/DVD-ROM/DVD-R + p[3] = 0 ; // write: nothing + p[4] = 0x40 | 0x20 | 0x10 | 0x01 ; + p[5] = 0x08 | 0x04 | 0x02 | 0x01 ; + p[6] = (1 << 5) | 0x10 ; // type = tray, eject supported + p[7] = 3 ; // separate channel mute and volume + p[8] = 2 ; p[9] = 0 ; + p[10] = 0xff ; p[11] = 0xff ; // number of volume levels + p[12] = 4 ; p[13] = 0 ; // "1M buffer" + p[14] = 2 ; p[15] = 0 ; + p[16] = 0 ; + p[17] = 0 ; + p[18] = p[19] = 0 ; + p[20] = p[21] = 0 ; + p[22] = p[23] = 0 ; + psize = p[1] + 2 ; +} else { + if(!pcodeloop) + goto err ; +} + totalsize += psize ; + p += psize ; + if(!pcodeloop) + break ; +if(pcode == 0) + break ; +pcode++ ; +if(pcode == 0x3f) + pcode = 0 ; +} + if(sense10) { + totalsize += bdsize ; + r[6] = bdsize >> 8 ; + r[7] = bdsize & 0xff ; + r[0] = totalsize >> 8 ; + r[1] = totalsize & 0xff ; +} else { + totalsize += bdsize ; + r[3] = bdsize & 0xff ; + r[0] = totalsize & 0xff ; +} +scsi_len = totalsize + 1 ; +if(scsi_len > maxlen) + scsi_len = maxlen ; +lr = scsi_len ; +} +break ; +case 0x01 : /* REZERO UNIT */ + scsi_len = 0 ; +break ; +case 0x1d : /* SEND DIAGNOSTICS */ + scsi_len = 0 ; + break ; +case 0x25 : /* READ CAPACITY */ +{ + int pmi = cmdbuf[8] & 1 ; + uae_u32 lba = (cmdbuf[2] << 24) | (cmdbuf[3] << 16) | (cmdbuf[4] << 8) | cmdbuf[5] ; + int cyl, + cylsec, + head, + tracksec ; + if(nodisk(&di)) + goto nodisk ; + uae_u32 blocks = di.sectorspertrack * di.cylinders * di.trackspercylinder - 1 ; + cyl = di.cylinders ; + head = 1 ; + cylsec = tracksec = di.trackspercylinder ; + if(pmi == 0 && lba != 0) + goto errreq ; + if(pmi) { + lba += tracksec * head ; + lba /= tracksec * head ; + lba *= tracksec * head ; + if(lba > blocks) + lba = blocks ; + blocks = lba ; +} +wl(r, blocks) ; +wl(r + 4, di.bytespersector) ; +scsi_len = lr = 8 ; +} +break ; +case 0x0b : /* SEEK (6) */ +{ + if(nodisk(&di)) + goto nodisk ; + stopplay(unitnum) ; + offset = ((cmdbuf[1] & 31) << 16) | (cmdbuf[2] << 8) | cmdbuf[3] ; + struct cd_toc *t = gettoc(&di.toc, offset) ; + v = scsi_read_cd_data(unitnum, scsi_data, offset, 0, &di, &scsi_len) ; + if(v == -1) + goto outofbounds ; +} +break ; +case 0x08 : /* READ (6) */ +{ + if(nodisk(&di)) + goto nodisk ; +stopplay(unitnum) ; +offset = ((cmdbuf[1] & 31) << 16) | (cmdbuf[2] << 8) | cmdbuf[3] ; +struct cd_toc *t = gettoc(&di.toc, offset) ; +if((t->control & 0x0c) == 0x04) { + len = cmdbuf[4] ; + if(!len) + len = 256 ; + v = scsi_read_cd_data(unitnum, scsi_data, offset, len, &di, &scsi_len) ; + if(v == -1) + goto outofbounds ; + if(v == -2) + goto readerr ; + if(v == -3) + goto toolarge ; +} else { + goto notdatatrack ; +} +} +break ; +case 0x0a : /* WRITE (6) */ + goto readprot ; +case 0x2b : /* SEEK (10) */ +{ + if(nodisk(&di)) + goto nodisk ; + stopplay(unitnum) ; + offset = rl(cmdbuf + 2) ; + struct cd_toc *t = gettoc(&di.toc, offset) ; + v = scsi_read_cd_data(unitnum, scsi_data, offset, 0, &di, &scsi_len) ; + if(v == -1) + goto outofbounds ; +} +break ; +case 0x28 : /* READ (10) */ +{ + if(nodisk(&di)) + goto nodisk ; +stopplay(unitnum) ; +offset = rl(cmdbuf + 2) ; +struct cd_toc *t = gettoc(&di.toc, offset) ; +if((t->control & 0x0c) == 0x04) { + len = rl(cmdbuf + 7 - 2) & 0xffff ; + v = scsi_read_cd_data(unitnum, scsi_data, offset, len, &di, &scsi_len) ; + if(v == -1) + goto outofbounds ; + if(v == -2) + goto readerr ; + if(v == -3) + goto toolarge ; +} else { + goto notdatatrack ; +} +} +break ; +case 0x2a : /* WRITE (10) */ + goto readprot ; +case 0xa8 : /* READ (12) */ +{ + if(nodisk(&di)) + goto nodisk ; +stopplay(unitnum) ; +offset = rl(cmdbuf + 2) ; +struct cd_toc *t = gettoc(&di.toc, offset) ; +if((t->control & 0x0c) == 0x04) { + len = rl(cmdbuf + 6) ; + v = scsi_read_cd_data(unitnum, scsi_data, offset, len, &di, &scsi_len) ; + if(v == -1) + goto outofbounds ; + if(v == -2) + goto readerr ; + if(v == -3) + goto toolarge ; +} else { + goto notdatatrack ; +} +} +break ; +case 0xaa : /* WRITE (12) */ + goto readprot ; +case 0x51 : /* READ DISC INFORMATION */ +{ + struct cd_toc_head ttoc ; + int maxlen = (cmdbuf[7] << 8) | cmdbuf[8] ; + if(nodisk(&di)) + goto nodisk ; + if(!sys_command_cd_toc(unitnum, &ttoc)) + goto readerr ; + struct cd_toc_head *toc = &ttoc ; + uae_u8 *p = scsi_data ; + p[0] = 0 ; + p[1] = 34 - 2 ; + p[2] = 2 | (3 << 2) ; // complete cd rom, last session is complete + p[3] = toc->first_track ; + p[4] = 1 ; + p[5] = toc->first_track ; + p[6] = toc->last_track ; + wl(p + 16, lsn2msf(toc->lastaddress)) ; + wl(p + 20, 0x00ffffff) ; + scsi_len = p[1] + 2 ; + if(scsi_len > maxlen) + scsi_len = maxlen ; +} +break ; +case 0x52 : /* READ TRACK INFORMATION */ +{ + struct cd_toc_head ttoc ; + int maxlen = (cmdbuf[7] << 8) | cmdbuf[8] ; + if(nodisk(&di)) + goto nodisk ; + if(!sys_command_cd_toc(unitnum, &ttoc)) + goto readerr ; + struct cd_toc_head *toc = &ttoc ; + uae_u8 *p = scsi_data ; + int lsn ; + if(cmdbuf[1] & 1) { + int track = cmdbuf[5] ; + lsn = toc->toc[track].address ; +} else { + lsn = rl(p + 2) ; +} +struct cd_toc *t = gettoc(toc, lsn) ; +p[0] = 0 ; +p[1] = 28 - 2 ; +p[2] = t->track ; +p[3] = 1 ; +p[5] = t->control ; +p[6] = 0 ; // data mode, fixme +wl(p + 8, t->address) ; +wl(p + 24, t[1].address - t->address) ; +scsi_len = p[1] + 2 ; +if(scsi_len > maxlen) + scsi_len = maxlen ; +} +break ; +case 0x43 : // READ TOC +{ + if(nodisk(&di)) + goto nodisk ; + uae_u8 *p = scsi_data ; + int strack = cmdbuf[6] ; + int msf = cmdbuf[1] & 2 ; + int format = cmdbuf[2] & 7 ; + if(format >= 3) + goto errreq ; + int maxlen = (cmdbuf[7] << 8) | cmdbuf[8] ; + int maxlen2 = maxlen ; + struct cd_toc_head ttoc ; + if(!sys_command_cd_toc(unitnum, &ttoc)) + goto readerr ; + struct cd_toc_head *toc = &ttoc ; + if(maxlen < 4) + goto errreq ; + if(format == 1) { + p[0] = 0 ; + p[1] = 2 + 8 ; + p[2] = 1 ; + p[3] = 1 ; + p[4] = 0 ; + p[5] = (toc->toc[0].adr << 4) | toc->toc[0].control ; + p[6] = toc->first_track ; + p[7] = 0 ; + if(msf) + wl(p + 8, lsn2msf(toc->toc[0].address)) ; + else + wl(p + 8, toc->toc[0].address) ; + scsi_len = 12 ; +} else if(format == 2 || format == 0) { + if(format == 2 && !msf) + goto errreq ; + if(strack == 0) + strack = toc->first_track ; + if(format == 0 && strack >= 100 && strack != 0xaa) + goto errreq ; + uae_u8 *p2 = p + 4 ; + p[2] = 0 ; + p[3] = 0 ; + maxlen -= 4 ; + if(format == 2) { + if(!addtocentry(&p2, &maxlen, 0xa0, -1, msf, p, toc)) + break ; + if(!addtocentry(&p2, &maxlen, 0xa1, -1, msf, p, toc)) + break ; + if(!addtocentry(&p2, &maxlen, 0xa2, -1, msf, p, toc)) + break ; +} +while(strack < 100) { + if(!addtocentry(&p2, &maxlen, strack, -1, msf, p, toc)) + break ; + strack++ ; +} +addtocentry(&p2, &maxlen, 0xa2, 0xaa, msf, p, toc) ; +int tlen = p2 - (p + 2) ; +p[0] = tlen >> 8 ; +p[1] = tlen >> 0 ; +scsi_len = tlen + 2 ; +if(scsi_len > maxlen2) + scsi_len = maxlen2 ; +} +} +break ; +case 0x42 : // READ SUB-CHANNEL +{ + int msf = cmdbuf[1] & 2 ; + int subq = cmdbuf[2] & 0x40 ; + int format = cmdbuf[3] ; + int track = cmdbuf[6] ; + int len = rw(cmdbuf + 7) ; + uae_u8 buf[SUBQ_SIZE] = { 0 } ; + + if(nodisk(&di)) + goto nodisk ; + sys_command_cd_qcode(unitnum, buf) ; + if(len < 4) + goto errreq ; +scsi_len = 4 ; +scsi_data[0] = 0 ; +scsi_data[1] = buf[1] ; +if(subq && format == 1) { + if(len < 4 + 12) + goto errreq ; + scsi_data[2] = 0 ; + scsi_data[3] = 12 ; + scsi_len += 12 ; + scsi_data[4] = 1 ; + scsi_data[5] = (buf[4 + 0] << 4) | (buf[4 + 0] >> 4) ; + scsi_data[6] = frombcd(buf[4 + 1]) ; // track + scsi_data[7] = frombcd(buf[4 + 2]) ; // index + int reladdr = fromlongbcd(&buf[4 + 3]) ; + int absaddr = fromlongbcd(&buf[4 + 7]) ; + if(!msf) { + reladdr = msf2lsn(reladdr) ; + absaddr = msf2lsn(absaddr) ; +} +wl(scsi_data + 8, absaddr) ; +wl(scsi_data + 12, reladdr) ; +} else { + scsi_data[2] = 0 ; + scsi_data[3] = 0 ; +} +} +break ; +case 0x1b : // START/STOP + sys_command_cd_stop(unitnum) ; + scsiemudrv(unitnum, cmdbuf) ; + scsi_len = 0 ; +break ; +case 0x4e : // STOP PLAY/SCAN + if(nodisk(&di)) + goto nodisk ; + sys_command_cd_stop(unitnum) ; + scsi_len = 0 ; +break ; +case 0xba : // SCAN +{ + if(nodisk(&di)) + goto nodisk ; + struct cd_toc_head ttoc ; + if(!sys_command_cd_toc(unitnum, &ttoc)) + goto readerr ; + struct cd_toc_head *toc = &ttoc ; + int scan = (cmdbuf[1] & 0x10) ? -1 : 1 ; + int start = rl(cmdbuf + 1) & 0x00ffffff ; + int end = scan > 0 ? toc->lastaddress : toc->toc[toc->first_track_offset].paddress ; + int type = cmdbuf[9] >> 6 ; + if(type == 1) + start = lsn2msf(start) ; + if(type == 3) + goto errreq ; + if(type == 2) { + if(toc->first_track_offset + start >= toc->last_track_offset) + goto errreq ; + start = toc->toc[toc->first_track_offset + start].paddress ; +} +sys_command_cd_pause(unitnum, 0) ; +sys_command_cd_play(unitnum, start, end, scan) ; +scsi_len = 0 ; +} +break ; +case 0x48 : // PLAY AUDIO TRACK/INDEX +{ + if(nodisk(&di)) + goto nodisk ; + int strack = cmdbuf[4] ; + int etrack = cmdbuf[7] ; + struct cd_toc_head ttoc ; + if(!sys_command_cd_toc(unitnum, &ttoc)) + goto readerr ; + struct cd_toc_head *toc = &ttoc ; + if(strack < toc->first_track || strack > toc->last_track || + etrack < toc->first_track || etrack > toc->last_track || + strack > etrack) + goto errreq ; + int start = toc->toc[toc->first_track_offset + strack - 1].paddress ; + int end = etrack == toc->last_track ? toc->lastaddress : toc->toc[toc->first_track_offset + etrack - 1 + 1].paddress ; + sys_command_cd_pause(unitnum, 0) ; + if(!sys_command_cd_play(unitnum, start, end, 0)) + goto notdatatrack ; + scsi_len = 0 ; +} +break ; +case 0x49 : // PLAY AUDIO TRACK RELATIVE (10) +case 0xa9 : // PLAY AUDIO TRACK RELATIVE (12) +{ + if(nodisk(&di)) + goto nodisk ; + int len = cmd == 0xa9 ? rl(cmdbuf + 6) : rw(cmdbuf + 7) ; + int track = cmd == 0xa9 ? cmdbuf[10] : cmdbuf[6] ; + if(track < di.toc.first_track || track > di.toc.last_track) + goto errreq ; + int start = di.toc.toc[di.toc.first_track_offset + track - 1].paddress ; + int rel = rl(cmdbuf + 2) ; + start += rel ; + int end = start + len ; + if(end > di.toc.lastaddress) + end = di.toc.lastaddress ; + if(len > 0) { + sys_command_cd_pause(unitnum, 0) ; + if(!sys_command_cd_play(unitnum, start, start + len, 0)) + goto notdatatrack ; +} +scsi_len = 0 ; +} +break ; +case 0x47 : // PLAY AUDIO MSF +{ + if(nodisk(&di)) + goto nodisk ; + int start = rl(cmdbuf + 2) & 0x00ffffff ; + if(start == 0x00ffffff) { + uae_u8 buf[SUBQ_SIZE] = { 0 } ; + sys_command_cd_qcode(unitnum, buf) ; + start = fromlongbcd(buf + 4 + 7) ; +} +int end = msf2lsn(rl(cmdbuf + 5) & 0x00ffffff) ; +if(end > di.toc.lastaddress) + end = di.toc.lastaddress ; +start = msf2lsn(start) ; +if(start > end) + goto errreq ; +if(start < end) + sys_command_cd_pause(unitnum, 0) ; + if(!sys_command_cd_play(unitnum, start, end, 0)) + goto notdatatrack ; +scsi_len = 0 ; +} +break ; +case 0x45 : // PLAY AUDIO (10) +case 0xa5 : // PLAY AUDIO (12) +{ + if(nodisk(&di)) + goto nodisk ; + int start = rl(cmdbuf + 2) ; + int len ; + if(cmd == 0xa5) + len = rl(cmdbuf + 6) ; + else + len = rw(cmdbuf + 7) ; + if(len > 0) { + if(start == -1) { + uae_u8 buf[SUBQ_SIZE] = { 0 } ; + sys_command_cd_qcode(unitnum, buf) ; + start = msf2lsn(fromlongbcd(buf + 4 + 7)) ; +} +int end = start + len ; +if(end > di.toc.lastaddress) + end = di.toc.lastaddress ; +sys_command_cd_pause(unitnum, 0) ; +if(!sys_command_cd_play(unitnum, start, end, 0)) + goto notdatatrack ; +} +scsi_len = 0 ; +} +break ; +case 0xbc : // PLAY CD +{ + if(nodisk(&di)) + goto nodisk ; + int start = -1 ; + int end = -1 ; + if(cmdbuf[1] & 2) { + start = msf2lsn(rl(cmdbuf + 2) & 0x00ffffff) ; + end = msf2lsn(rl(cmdbuf + 5) & 0x00ffffff) ; +} else { + start = rl(cmdbuf + 2) ; + end = start + rl(cmdbuf + 6) ; +} +if(end > di.toc.lastaddress) + end = di.toc.lastaddress ; +if(start > end) + goto errreq ; +if(start < end) { + sys_command_cd_pause(unitnum, 0) ; + if(!sys_command_cd_play(unitnum, start, end, 0)) + goto notdatatrack ; +} +} +break ; +case 0x4b : // PAUSE/RESUME +{ + if(nodisk(&di)) + goto nodisk ; + uae_u8 buf[SUBQ_SIZE] = { 0 } ; + int resume = cmdbuf[8] & 1 ; + sys_command_cd_qcode(unitnum, buf) ; + if(buf[1] != AUDIO_STATUS_IN_PROGRESS && buf[1] != AUDIO_STATUS_PAUSED) + goto errreq ; + sys_command_cd_pause(unitnum, resume ? 0 : 1) ; + scsi_len = 0 ; +} +break ; +case 0x35 : /* SYNCRONIZE CACHE (10) */ + scsi_len = 0 ; +break ; + + default : +err : + write_log(_T("CDEMU: unsupported scsi command 0x%02X\n"), cmdbuf[0]) ; +readprot : + status = 2 ; /* CHECK CONDITION */ + s[0] = 0x70 ; + s[2] = 5 ; + s[12] = 0x20 ; /* INVALID COMMAND */ + ls = 0x12 ; + break ; +nodisk : + status = 2 ; /* CHECK CONDITION */ + s[0] = 0x70 ; + s[2] = 2 ; /* NOT READY */ + s[12] = 0x3A ; /* MEDIUM NOT PRESENT */ + ls = 0x12 ; + break ; +readerr : + status = 2 ; /* CHECK CONDITION */ + s[0] = 0x70 ; + s[2] = 2 ; /* NOT READY */ + s[12] = 0x11 ; /* UNRECOVERED READ ERROR */ + ls = 0x12 ; + break ; +notdatatrack : + status = 2 ; + s[0] = 0x70 ; + s[2] = 5 ; + s[12] = 0x64 ; /* ILLEGAL MODE FOR THIS TRACK */ + ls = 0x12 ; + break ; +outofbounds : + status = 2 ; /* CHECK CONDITION */ + s[0] = 0x70 ; + s[2] = 5 ; /* ILLEGAL REQUEST */ + s[12] = 0x21 ; /* LOGICAL BLOCK OUT OF RANGE */ + ls = 0x12 ; + break ; +toolarge : + write_log(_T("CDEMU: too large scsi data tranfer %d > %d\n"), len, dlen) ; + status = 2 ; /* CHECK CONDITION */ + s[0] = 0x70 ; + s[2] = 2 ; /* NOT READY */ + s[12] = 0x11 ; /* UNRECOVERED READ ERROR */ + ls = 0x12 ; + break ; +errreq : + lr = -1 ; + status = 2 ; /* CHECK CONDITION */ + s[0] = 0x70 ; + s[2] = 5 ; /* ILLEGAL REQUEST */ + s[12] = 0x24 ; /* ILLEGAL FIELD IN CDB */ + ls = 0x12 ; + break ; +} +end : + *data_len = scsi_len ; + *reply_len = lr ; + *sense_len = ls ; + if(ls) { + //s[0] |= 0x80; + s[7] = ls - 7 ; // additional sense length + if(log_scsiemu) { + write_log(_T("-> SENSE STATUS: KEY=%d ASC=%02X ASCQ=%02X\n"), s[2], s[12], s[13]) ; +} +} +if(cmdbuf[0] && log_scsiemu) + write_log(_T("-> DATAOUT=%d ST=%d SENSELEN=%d\n"), scsi_len, status, ls) ; +return status ; +} + +static int execscsicmd_direct(int unitnum, int type, struct amigascsi *as) +{ + int io_error = 0 ; + uae_u8 *scsi_datap, + *scsi_datap_org ; + uae_u32 scsi_cmd_len_orig = as->cmd_len ; + uae_u8 cmd[16] = { 0 } ; + uae_u8 replydata[256] = { 0 } ; + int datalen = as->len ; + int senselen = as->sense_len ; + int replylen = 0 ; + + memcpy(cmd, as->cmd, as->cmd_len) ; + scsi_datap = scsi_datap_org = as->len ? as->data : 0 ; + if(as->sense_len > 32) + as->sense_len = 32 ; /* never report media change state if uaescsi.device */ - state[unitnum].mediawaschanged = false; + state[unitnum].mediawaschanged = false ; - switch (type) - { - case INQ_ROMD: - as->status = scsi_cd_emulate (unitnum, cmd, as->cmd_len, scsi_datap, &datalen, replydata, &replylen, as->sensedata, &senselen, false); - break; - default: - as->status = 2; - break; - } - - as->cmdactual = as->status != 0 ? 0 : as->cmd_len; /* fake scsi_CmdActual */ - if (as->status) { - io_error = IOERR_BadStatus; - as->sactual = senselen; - as->actual = 0; /* scsi_Actual */ - } else { - int i; - if (replylen > 0) { - for (i = 0; i < replylen; i++) - scsi_datap[i] = replydata[i]; - datalen = replylen; - } - for (i = 0; i < as->sense_len; i++) - as->sensedata[i] = 0; - if (datalen < 0) { - io_error = IOERR_NotSpecified; - as->actual = 0; /* scsi_Actual */ - } else { - as->len = datalen; - io_error = 0; - as->actual = as->len; /* scsi_Actual */ - } - } - - return io_error; + switch(type) +{ + case INQ_ROMD : + as->status = scsi_cd_emulate(unitnum, cmd, as->cmd_len, scsi_datap, &datalen, replydata, &replylen, as->sensedata, &senselen, false) ; + break ; + default : + as->status = 2 ; + break ; } -int sys_command_scsi_direct_native (int unitnum, int type, struct amigascsi *as) -{ - struct blkdevstate *st = &state[unitnum]; - if (st->scsiemu || (type >= 0 && st->type != type)) { - return execscsicmd_direct (unitnum, type, as); - } else { - if (!st->device_func->exec_direct) - return -1; - } - int ret = st->device_func->exec_direct (unitnum, as); - if (!ret && st->device_func->isatapi(unitnum)) - scsi_atapi_fixup_inquiry (as); - return ret; + as->cmdactual = as->status != 0 ? 0 : as->cmd_len ; /* fake scsi_CmdActual */ + if(as->status) { + io_error = IOERR_BadStatus ; + as->sactual = senselen ; + as->actual = 0 ; /* scsi_Actual */ +} else { + int i ; + if(replylen > 0) { + for(i = 0 ; i < replylen ; i++) + scsi_datap[i] = replydata[i] ; + datalen = replylen ; +} +for(i = 0 ; i < as->sense_len ; i++) + as->sensedata[i] = 0 ; +if(datalen < 0) { + io_error = IOERR_NotSpecified ; + as->actual = 0 ; /* scsi_Actual */ +} else { + as->len = datalen ; + io_error = 0 ; + as->actual = as->len ; /* scsi_Actual */ +} } -int sys_command_scsi_direct (int unitnum, int type, uaecptr acmd) + return io_error ; +} + +int sys_command_scsi_direct_native(int unitnum, int type, struct amigascsi *as) { - int ret, i; - struct amigascsi as = { 0 }; - uaecptr ap; - addrbank *bank; + struct blkdevstate *st = &state[unitnum] ; + if(st->scsiemu || (type >= 0 && st->type != type)) { + return execscsicmd_direct(unitnum, type, as) ; +} else { + if(!st->device_func->exec_direct) + return - 1 ; +} +int ret = st->device_func->exec_direct(unitnum, as) ; +if(!ret && st->device_func->isatapi(unitnum)) + scsi_atapi_fixup_inquiry(as) ; +return ret ; +} - ap = get_long (acmd + 0); - as.len = get_long (acmd + 4); +int sys_command_scsi_direct(int unitnum, int type, uaecptr acmd) +{ + int ret, + i ; + struct amigascsi as = { 0 } ; + uaecptr ap ; + addrbank *bank ; - bank = &get_mem_bank (ap); - if (!bank || !bank->check(ap, as.len)) - return IOERR_BADADDRESS; - as.data = bank->xlateaddr (ap); + ap = get_long(acmd + 0) ; + as.len = get_long(acmd + 4) ; - ap = get_long (acmd + 12); - as.cmd_len = get_word (acmd + 16); - if (as.cmd_len > sizeof as.cmd) - return IOERR_BADLENGTH; - for (i = 0; i < as.cmd_len; i++) - as.cmd[i] = get_byte (ap++); - while (i < sizeof as.cmd) - as.cmd[i++] = 0; - as.flags = get_byte (acmd + 20); - as.sense_len = get_word (acmd + 26); + bank = &get_mem_bank(ap) ; + if(!bank || !bank->check(ap, as.len)) + return IOERR_BADADDRESS ; + as.data = bank->xlateaddr(ap) ; - ret = sys_command_scsi_direct_native (unitnum, type, &as); + ap = get_long(acmd + 12) ; + as.cmd_len = get_word(acmd + 16) ; + if(as.cmd_len > sizeof as.cmd) + return IOERR_BADLENGTH ; + for(i = 0 ; i < as.cmd_len ; i++) + as.cmd[i] = get_byte(ap++) ; + while(i < sizeof as.cmd) + as.cmd[i++] = 0 ; + as.flags = get_byte(acmd + 20) ; + as.sense_len = get_word(acmd + 26) ; - put_long (acmd + 8, as.actual); - put_word (acmd + 18, as.cmdactual); - put_byte (acmd + 21, as.status); - put_word (acmd + 28, as.sactual); + ret = sys_command_scsi_direct_native(unitnum, type, &as) ; - if (as.flags & (2 | 4)) { // autosense - ap = get_long (acmd + 22); - for (i = 0; i < as.sactual && i < as.sense_len; i++) - put_byte (ap + i, as.sensedata[i]); - } + put_long(acmd + 8, as.actual) ; + put_word(acmd + 18, as.cmdactual) ; + put_byte(acmd + 21, as.status) ; + put_word(acmd + 28, as.sactual) ; - return ret; + if(as.flags & (2 | 4)) { // autosense + ap = get_long(acmd + 22) ; + for(i = 0 ; i < as.sactual && i < as.sense_len ; i++) + put_byte(ap + i, as.sensedata[i]) ; +} + + return ret ; } #ifdef SAVESTATE -uae_u8 *save_cd (int num, int *len) +uae_u8 *save_cd(int num, int *len) { - struct blkdevstate *st = &state[num]; - uae_u8 *dstbak, *dst; + struct blkdevstate *st = &state[num] ; + uae_u8 *dstbak, + *dst ; - memset(st->play_qcode, 0, SUBQ_SIZE); - if (!currprefs.cdslots[num].inuse || num >= MAX_TOTAL_SCSI_DEVICES) - return NULL; - if (!currprefs.cs_cd32cd) - return NULL; - dstbak = dst = xmalloc (uae_u8, 4 + 256 + 4 + 4); - save_u32 (4 | 8); - save_path (currprefs.cdslots[num].name, SAVESTATE_PATH_CD); - save_u32 (currprefs.cdslots[num].type); - save_u32 (0); - save_u32 (0); - sys_command_cd_qcode (num, st->play_qcode); - for (int i = 0; i < SUBQ_SIZE; i++) - save_u8 (st->play_qcode[i]); - save_u32 (st->play_end_pos); - *len = dst - dstbak; - return dstbak; + memset(st->play_qcode, 0, SUBQ_SIZE) ; + if(!currprefs.cdslots[num].inuse || num >= MAX_TOTAL_SCSI_DEVICES) + return NULL ; + if(!currprefs.cs_cd32cd) + return NULL ; + dstbak = dst = xmalloc(uae_u8, 4 + 256 + 4 + 4) ; + save_u32(4 | 8) ; + save_path(currprefs.cdslots[num].name, SAVESTATE_PATH_CD) ; + save_u32(currprefs.cdslots[num].type) ; + save_u32(0) ; + save_u32(0) ; + sys_command_cd_qcode(num, st->play_qcode) ; + for(int i = 0 ; i < SUBQ_SIZE ; i++) + save_u8(st->play_qcode[i]) ; + save_u32(st->play_end_pos) ; + *len = dst - dstbak ; + return dstbak ; } -uae_u8 *restore_cd (int num, uae_u8 *src) +uae_u8 *restore_cd(int num, uae_u8 *src) { - struct blkdevstate *st = &state[num]; - uae_u32 flags; - TCHAR *s; + struct blkdevstate *st = &state[num] ; + uae_u32 flags ; + TCHAR *s ; - if (num >= MAX_TOTAL_SCSI_DEVICES) - return NULL; - flags = restore_u32 (); - s = restore_path (SAVESTATE_PATH_CD); - int type = restore_u32 (); - restore_u32 (); - if (flags & 4) { - if (currprefs.cdslots[num].name[0] == 0 || zfile_exists (s)) { - _tcscpy (changed_prefs.cdslots[num].name, s); - _tcscpy (currprefs.cdslots[num].name, s); - } - changed_prefs.cdslots[num].type = currprefs.cdslots[num].type = type; - } - if (flags & 8) { - restore_u32 (); - for (int i = 0; i < SUBQ_SIZE; i++) - st->play_qcode[i] = restore_u8 (); - st->play_end_pos = restore_u32 (); - } - return src; + if(num >= MAX_TOTAL_SCSI_DEVICES) + return NULL ; + flags = restore_u32() ; + s = restore_path(SAVESTATE_PATH_CD) ; + int type = restore_u32() ; + restore_u32() ; + if(flags & 4) { + if(currprefs.cdslots[num].name[0] == 0 || zfile_exists(s)) { + _tcscpy(changed_prefs.cdslots[num].name, s) ; + _tcscpy(currprefs.cdslots[num].name, s) ; +} +changed_prefs.cdslots[num].type = currprefs.cdslots[num].type = type ; +} +if(flags & 8) { + restore_u32() ; + for(int i = 0 ; i < SUBQ_SIZE ; i++) + st->play_qcode[i] = restore_u8() ; +st->play_end_pos = restore_u32() ; +} +return src ; } #endif - diff --git a/src/blkdev_cdimage.cpp b/src/blkdev_cdimage.cpp index 3935f76e..e4344ee1 100644 --- a/src/blkdev_cdimage.cpp +++ b/src/blkdev_cdimage.cpp @@ -109,7 +109,7 @@ static int bus_open; static volatile int cdimage_unpack_thread, cdimage_unpack_active; static smp_comm_pipe unpack_pipe; -static struct cdunit *unitisopen (int unitnum) +static struct cdunit *unitisopen(int unitnum) { struct cdunit *cdu = &cdunits[unitnum]; if (cdu->open) @@ -118,7 +118,7 @@ static struct cdunit *unitisopen (int unitnum) } -static struct cdtoc *findtoc (struct cdunit *cdu, int *sectorp) +static struct cdtoc *findtoc(struct cdunit *cdu, int *sectorp) { int i; int sector; @@ -144,35 +144,36 @@ static struct cdtoc *findtoc (struct cdunit *cdu, int *sectorp) return NULL; } -static int do_read (struct cdunit *cdu, struct cdtoc *t, uae_u8 *data, int sector, int offset, int size) +static int do_read(struct cdunit *cdu, struct cdtoc *t, uae_u8 *data, int sector, int offset, int size) { if (t->enctype == ENC_CHD) { #ifdef WITH_CHD return read_partial_sector(cdu->chd_cdf, data, sector + t->offset, 0, offset, size) == CHDERR_NONE; #endif - } else if (t->handle) { + } + else if (t->handle) { int ssize = t->size + t->skipsize; - zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize + offset, SEEK_SET); - return zfile_fread (data, 1, size, t->handle) == size; + zfile_fseek(t->handle, t->offset + (uae_u64)sector * ssize + offset, SEEK_SET); + return zfile_fread(data, 1, size, t->handle) == size; } return 0; } // WOHOO, library that supports virtual file access functions. Perfect! -static void flac_metadata_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) +static void flac_metadata_callback(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; if (t->data) return; - if(metadata->type == FLAC__METADATA_TYPE_STREAMINFO) { + if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO) { t->filesize = metadata->data.stream_info.total_samples * (metadata->data.stream_info.bits_per_sample / 8) * metadata->data.stream_info.channels; } } -static void flac_error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) +static void flac_error_callback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) { return; } -static FLAC__StreamDecoderWriteStatus flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data) +static FLAC__StreamDecoderWriteStatus flac_write_callback(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; uae_u16 *p = (uae_u16*)(t->data + t->writeoffset); @@ -183,71 +184,83 @@ static FLAC__StreamDecoderWriteStatus flac_write_callback (const FLAC__StreamDec } return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } -static FLAC__StreamDecoderReadStatus file_read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) +static FLAC__StreamDecoderReadStatus file_read_callback(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; - if (zfile_ftell (t->handle) >= zfile_size (t->handle)) + if (zfile_ftell(t->handle) >= zfile_size(t->handle)) return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; - return zfile_fread (buffer, *bytes, 1, t->handle) ? FLAC__STREAM_DECODER_READ_STATUS_CONTINUE : FLAC__STREAM_DECODER_READ_STATUS_ABORT; + return zfile_fread(buffer, *bytes, 1, t->handle) ? FLAC__STREAM_DECODER_READ_STATUS_CONTINUE : FLAC__STREAM_DECODER_READ_STATUS_ABORT; } -static FLAC__StreamDecoderSeekStatus file_seek_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) +static FLAC__StreamDecoderSeekStatus file_seek_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; - zfile_fseek (t->handle, absolute_byte_offset, SEEK_SET); + zfile_fseek(t->handle, absolute_byte_offset, SEEK_SET); return FLAC__STREAM_DECODER_SEEK_STATUS_OK; } -static FLAC__StreamDecoderTellStatus file_tell_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) +static FLAC__StreamDecoderTellStatus file_tell_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; - *absolute_byte_offset = zfile_ftell (t->handle); + *absolute_byte_offset = zfile_ftell(t->handle); return FLAC__STREAM_DECODER_TELL_STATUS_OK; } -static FLAC__StreamDecoderLengthStatus file_len_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) +static FLAC__StreamDecoderLengthStatus file_len_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; - *stream_length = zfile_size (t->handle); + *stream_length = zfile_size(t->handle); return FLAC__STREAM_DECODER_LENGTH_STATUS_OK; } -static FLAC__bool file_eof_callback (const FLAC__StreamDecoder *decoder, void *client_data) +static FLAC__bool file_eof_callback(const FLAC__StreamDecoder *decoder, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; - return zfile_ftell (t->handle) >= zfile_size (t->handle); + return zfile_ftell(t->handle) >= zfile_size(t->handle); } -static void flac_get_size (struct cdtoc *t) +static void flac_get_size(struct cdtoc *t) { - FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new (); + FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new(); if (decoder) { - FLAC__stream_decoder_set_md5_checking (decoder, false); - int init_status = FLAC__stream_decoder_init_stream (decoder, - &file_read_callback, &file_seek_callback, &file_tell_callback, - &file_len_callback, &file_eof_callback, - &flac_write_callback, &flac_metadata_callback, &flac_error_callback, t); - FLAC__stream_decoder_process_until_end_of_metadata (decoder); - FLAC__stream_decoder_delete (decoder); + FLAC__stream_decoder_set_md5_checking(decoder, false); + int init_status = FLAC__stream_decoder_init_stream(decoder, + &file_read_callback, + &file_seek_callback, + &file_tell_callback, + &file_len_callback, + &file_eof_callback, + &flac_write_callback, + &flac_metadata_callback, + &flac_error_callback, + t); + FLAC__stream_decoder_process_until_end_of_metadata(decoder); + FLAC__stream_decoder_delete(decoder); } } -static uae_u8 *flac_get_data (struct cdtoc *t) +static uae_u8 *flac_get_data(struct cdtoc *t) { - write_log (_T("FLAC: unpacking '%s'..\n"), zfile_getname (t->handle)); + write_log(_T("FLAC: unpacking '%s'..\n"), zfile_getname(t->handle)); t->writeoffset = 0; - FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new (); + FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new(); if (decoder) { - FLAC__stream_decoder_set_md5_checking (decoder, false); - int init_status = FLAC__stream_decoder_init_stream (decoder, - &file_read_callback, &file_seek_callback, &file_tell_callback, - &file_len_callback, &file_eof_callback, - &flac_write_callback, &flac_metadata_callback, &flac_error_callback, t); - FLAC__stream_decoder_process_until_end_of_stream (decoder); - FLAC__stream_decoder_delete (decoder); - write_log (_T("FLAC: %s unpacked\n"), zfile_getname (t->handle)); + FLAC__stream_decoder_set_md5_checking(decoder, false); + int init_status = FLAC__stream_decoder_init_stream(decoder, + &file_read_callback, + &file_seek_callback, + &file_tell_callback, + &file_len_callback, + &file_eof_callback, + &flac_write_callback, + &flac_metadata_callback, + &flac_error_callback, + t); + FLAC__stream_decoder_process_until_end_of_stream(decoder); + FLAC__stream_decoder_delete(decoder); + write_log(_T("FLAC: %s unpacked\n"), zfile_getname(t->handle)); } return t->data; } -void sub_to_interleaved (const uae_u8 *s, uae_u8 *d) +void sub_to_interleaved(const uae_u8 *s, uae_u8 *d) { - for (int i = 0; i < 8 * 12; i ++) { + for (int i = 0; i < 8 * 12; i++) { int dmask = 0x80; int smask = 1 << (7 - (i & 7)); (*d) = 0; @@ -258,9 +271,9 @@ void sub_to_interleaved (const uae_u8 *s, uae_u8 *d) d++; } } -void sub_to_deinterleaved (const uae_u8 *s, uae_u8 *d) +void sub_to_deinterleaved(const uae_u8 *s, uae_u8 *d) { - for (int i = 0; i < 8 * 12; i ++) { + for (int i = 0; i < 8 * 12; i++) { int dmask = 0x80; int smask = 1 << (7 - (i / 12)); (*d) = 0; @@ -272,57 +285,59 @@ void sub_to_deinterleaved (const uae_u8 *s, uae_u8 *d) } } -static int getsub_deinterleaved (uae_u8 *dst, struct cdunit *cdu, struct cdtoc *t, int sector) +static int getsub_deinterleaved(uae_u8 *dst, struct cdunit *cdu, struct cdtoc *t, int sector) { int ret = 0; - uae_sem_wait (&cdu->sub_sem); + uae_sem_wait(&cdu->sub_sem); if (t->subcode) { if (t->enctype == ENC_CHD) { #ifdef WITH_CHD const cdrom_track_info *cti = t->chdtrack; - ret = do_read (cdu, t, dst, sector, cti->datasize, cti->subsize); + ret = do_read(cdu, t, dst, sector, cti->datasize, cti->subsize); if (ret) ret = t->subcode; #endif - } else if (t->subhandle) { + } + else if (t->subhandle) { int offset = 0; int totalsize = SUB_CHANNEL_SIZE; if (t->skipsize) { totalsize += t->size; offset = t->size; } - zfile_fseek (t->subhandle, (uae_u64)sector * totalsize + t->suboffset + offset, SEEK_SET); - if (zfile_fread (dst, SUB_CHANNEL_SIZE, 1, t->subhandle) > 0) + zfile_fseek(t->subhandle, (uae_u64)sector * totalsize + t->suboffset + offset, SEEK_SET); + if (zfile_fread(dst, SUB_CHANNEL_SIZE, 1, t->subhandle) > 0) ret = t->subcode; - } else { - memcpy (dst, t->subdata + sector * SUB_CHANNEL_SIZE + t->suboffset, SUB_CHANNEL_SIZE); + } + else { + memcpy(dst, t->subdata + sector * SUB_CHANNEL_SIZE + t->suboffset, SUB_CHANNEL_SIZE); ret = t->subcode; } } if (!ret) { - memset (dst, 0, SUB_CHANNEL_SIZE); + memset(dst, 0, SUB_CHANNEL_SIZE); // regenerate Q-subchannel uae_u8 *s = dst + 12; s[0] = (t->ctrl << 4) | (t->adr << 0); - s[1] = tobcd (t - &cdu->toc[0] + 1); - s[2] = tobcd (1); - int msf = lsn2msf (sector); - tolongbcd (s + 7, msf); - msf = lsn2msf (sector - t->address - 150); - tolongbcd (s + 3, msf); + s[1] = tobcd(t - &cdu->toc[0] + 1); + s[2] = tobcd(1); + int msf = lsn2msf(sector); + tolongbcd(s + 7, msf); + msf = lsn2msf(sector - t->address - 150); + tolongbcd(s + 3, msf); ret = 2; } if (ret == 1) { uae_u8 tmp[SUB_CHANNEL_SIZE]; - memcpy (tmp, dst, SUB_CHANNEL_SIZE); - sub_to_deinterleaved (tmp, dst); + memcpy(tmp, dst, SUB_CHANNEL_SIZE); + sub_to_deinterleaved(tmp, dst); ret = 2; } - uae_sem_post (&cdu->sub_sem); + uae_sem_post(&cdu->sub_sem); return ret; } -static void dosub (struct cdunit *cdu, uae_u8 *subbuf) +static void dosub(struct cdunit *cdu, uae_u8 *subbuf) { uae_u8 subbuf2[SUB_CHANNEL_SIZE]; @@ -330,55 +345,58 @@ static void dosub (struct cdunit *cdu, uae_u8 *subbuf) return; if (!subbuf) { - memset (subbuf2, 0, sizeof subbuf2); - cdu->cdda_subfunc (subbuf2, 1); + memset(subbuf2, 0, sizeof subbuf2); + cdu->cdda_subfunc(subbuf2, 1); return; } - sub_to_interleaved (subbuf, subbuf2); - cdu->cdda_subfunc (subbuf2, 1); + sub_to_interleaved(subbuf, subbuf2); + cdu->cdda_subfunc(subbuf2, 1); } -static int setstate (struct cdunit *cdu, int state) +static int setstate(struct cdunit *cdu, int state) { cdu->cdda_play_state = state; if (cdu->cdda_statusfunc) - return cdu->cdda_statusfunc (cdu->cdda_play_state); + return cdu->cdda_statusfunc(cdu->cdda_play_state); return 0; } -static void *cdda_unpack_func (void *v) +static void *cdda_unpack_func(void *v) { cdimage_unpack_thread = 1; mp3decoder *mp3dec = NULL; for (;;) { - uae_u32 cduidx = read_comm_pipe_u32_blocking (&unpack_pipe); + uae_u32 cduidx = read_comm_pipe_u32_blocking(&unpack_pipe); if (cdimage_unpack_thread == 0) break; - uae_u32 tocidx = read_comm_pipe_u32_blocking (&unpack_pipe); + uae_u32 tocidx = read_comm_pipe_u32_blocking(&unpack_pipe); struct cdunit *cdu = &cdunits[cduidx]; struct cdtoc *t = &cdu->toc[tocidx]; if (t->handle) { // force unpack if handle points to delayed zipped file - uae_s64 pos = zfile_ftell (t->handle); - zfile_fseek (t->handle, -1, SEEK_END); + uae_s64 pos = zfile_ftell(t->handle); + zfile_fseek(t->handle, -1, SEEK_END); uae_u8 b; - zfile_fread (&b, 1, 1, t->handle); - zfile_fseek (t->handle, pos, SEEK_SET); + zfile_fread(&b, 1, 1, t->handle); + zfile_fseek(t->handle, pos, SEEK_SET); if (!t->data && (t->enctype == AUDENC_MP3 || t->enctype == AUDENC_FLAC)) { - t->data = xcalloc (uae_u8, t->filesize + 2352); + t->data = xcalloc(uae_u8, t->filesize + 2352); cdimage_unpack_active = 1; if (t->data) { if (t->enctype == AUDENC_MP3) { if (!mp3dec) { try { mp3dec = new mp3decoder(); - } catch (exception) { }; + } + catch (exception) {} + ; } if (mp3dec) - t->data = mp3dec->get (t->handle, t->data, t->filesize); - } else if (t->enctype == AUDENC_FLAC) { - flac_get_data (t); + t->data = mp3dec->get(t->handle, t->data, t->filesize); + } + else if (t->enctype == AUDENC_FLAC) { + flac_get_data(t); } } } @@ -390,20 +408,20 @@ static void *cdda_unpack_func (void *v) return 0; } -static void audio_unpack (struct cdunit *cdu, struct cdtoc *t) +static void audio_unpack(struct cdunit *cdu, struct cdtoc *t) { // do this even if audio is not compressed, t->handle also could be // compressed and we want to unpack it in background too while (cdimage_unpack_active == 1) - Sleep (10); + Sleep(10); cdimage_unpack_active = 0; - write_comm_pipe_u32 (&unpack_pipe, cdu - &cdunits[0], 0); - write_comm_pipe_u32 (&unpack_pipe, t - &cdu->toc[0], 1); + write_comm_pipe_u32(&unpack_pipe, cdu - &cdunits[0], 0); + write_comm_pipe_u32(&unpack_pipe, t - &cdu->toc[0], 1); while (cdimage_unpack_active == 0) - Sleep (10); + Sleep(10); } -static void *cdda_play_func (void *v) +static void *cdda_play_func(void *v) { int cdda_pos; int num_sectors = CDDA_BUFFERS; @@ -419,13 +437,13 @@ static void *cdda_play_func (void *v) cdu->thread_active = true; while (cdu->cdda_play == 0) - Sleep (10); + Sleep(10); oldplay = -1; bufon[0] = bufon[1] = 0; bufnum = 0; - cda_audio *cda = new cda_audio (num_sectors); + cda_audio *cda = new cda_audio(num_sectors); while (cdu->cdda_play > 0) { @@ -437,29 +455,37 @@ static void *cdda_play_func (void *v) idleframes = 0; silentframes = 0; foundsub = false; - _ftime (&tb1); + _ftime(&tb1); cdda_pos = cdu->cdda_start; oldplay = cdu->cdda_play; sector = cdu->cd_last_pos = cdda_pos; - t = findtoc (cdu, §or); + t = findtoc(cdu, §or); if (!t) { sector = cdu->cd_last_pos = cdda_pos + 2 * 75; - t = findtoc (cdu, §or); + t = findtoc(cdu, §or); if (!t) { - write_log (_T("IMAGE CDDA: illegal sector number %d\n"), cdu->cdda_start); - setstate (cdu, AUDIO_STATUS_PLAY_ERROR); - } else { - audio_unpack (cdu, t); + write_log(_T("IMAGE CDDA: illegal sector number %d\n"), cdu->cdda_start); + setstate(cdu, AUDIO_STATUS_PLAY_ERROR); } - } else { - write_log (_T("IMAGE CDDA: playing from %d to %d, track %d ('%s', offset %lld, secoffset %d (%d))\n"), - cdu->cdda_start, cdu->cdda_end, t->track, t->fname, t->offset, sector, t->index1); + else { + audio_unpack(cdu, t); + } + } + else { + write_log(_T("IMAGE CDDA: playing from %d to %d, track %d ('%s', offset %lld, secoffset %d (%d))\n"), + cdu->cdda_start, + cdu->cdda_end, + t->track, + t->fname, + t->offset, + sector, + t->index1); oldtrack = t->track; - audio_unpack (cdu, t); + audio_unpack(cdu, t); } idleframes = cdu->cdda_delay_frames; while (cdu->cdda_paused && cdu->cdda_play > 0) { - Sleep (10); + Sleep(10); idleframes = -1; } @@ -469,21 +495,22 @@ static void *cdda_play_func (void *v) bool seenindex = false; for (sector = cdda_pos - 200; sector < cdda_pos; sector++) { int sec = sector; - t = findtoc (cdu, &sec); + t = findtoc(cdu, &sec); if (t) { uae_u8 subbuf[SUB_CHANNEL_SIZE]; - getsub_deinterleaved (subbuf, cdu, t, sector); + getsub_deinterleaved(subbuf, cdu, t, sector); if (seenindex) { for (int i = 2 * SUB_ENTRY_SIZE; i < SUB_CHANNEL_SIZE; i++) { if (subbuf[i]) { // non-zero R-W subchannels int diff = cdda_pos - sector + 2; - write_log (_T("-> CD+G start pos fudge -> %d (%d)\n"), sector, -diff); + write_log(_T("-> CD+G start pos fudge -> %d (%d)\n"), sector, -diff); idleframes -= diff; cdda_pos = sector; break; } } - } else if (subbuf[0] == 0xff) { // P == 1? + } + else if (subbuf[0] == 0xff) { // P == 1? seenindex = true; } } @@ -491,21 +518,21 @@ static void *cdda_play_func (void *v) } cdda_pos -= idleframes; - _ftime (&tb2); + _ftime(&tb2); diff = (tb2.time * (uae_s64)1000 + tb2.millitm) - (tb1.time * (uae_s64)1000 + tb1.millitm); diff -= cdu->cdda_delay; if (idleframes >= 0 && diff < 0 && cdu->cdda_play > 0) - Sleep (-diff); - setstate (cdu, AUDIO_STATUS_IN_PROGRESS); + Sleep(-diff); + setstate(cdu, AUDIO_STATUS_IN_PROGRESS); sector = cdda_pos; - struct cdtoc *t1 = findtoc (cdu, §or); + struct cdtoc *t1 = findtoc(cdu, §or); int tsector = cdda_pos + 2 * 75; - struct cdtoc *t2 = findtoc (cdu, &tsector); + struct cdtoc *t2 = findtoc(cdu, &tsector); if (t1 != t2) { for (sector = cdda_pos; sector < cdda_pos + 2 * 75; sector++) { int sec = sector; - t = findtoc (cdu, &sec); + t = findtoc(cdu, &sec); if (t == t2) break; silentframes++; @@ -518,9 +545,9 @@ static void *cdda_play_func (void *v) if (!cdu->cdda_play) goto end; - if (idleframes <= 0 && cdda_pos >= cdu->cdda_start && !isaudiotrack (&cdu->di.toc, cdda_pos)) { - setstate (cdu, AUDIO_STATUS_PLAY_ERROR); - write_log (_T("IMAGE CDDA: attempted to play data track %d\n"), cdda_pos); + if (idleframes <= 0 && cdda_pos >= cdu->cdda_start && !isaudiotrack(&cdu->di.toc, cdda_pos)) { + setstate(cdu, AUDIO_STATUS_PLAY_ERROR); + write_log(_T("IMAGE CDDA: attempted to play data track %d\n"), cdda_pos); goto end; // data track? } @@ -529,75 +556,82 @@ static void *cdda_play_func (void *v) int sector, cnt; int dofinish = 0; - gui_flicker_led (LED_CD, cdu->di.unitnum - 1, LED_CD_AUDIO); + gui_flicker_led(LED_CD, LED_CD_AUDIO); - memset (cda->buffers[bufnum], 0, num_sectors * 2352); + memset(cda->buffers[bufnum], 0, num_sectors * 2352); for (cnt = 0; cnt < num_sectors && cdu->cdda_play > 0; cnt++) { uae_u8 *dst = cda->buffers[bufnum] + cnt * 2352; uae_u8 subbuf[SUB_CHANNEL_SIZE]; sector = cdda_pos; - memset (subbuf, 0, SUB_CHANNEL_SIZE); + memset(subbuf, 0, SUB_CHANNEL_SIZE); - t = findtoc (cdu, §or); + t = findtoc(cdu, §or); if (t) { if (t->track != oldtrack) { oldtrack = t->track; - write_log (_T("IMAGE CDDA: track %d ('%s', offset %lld, secoffset %d (%d))\n"), - t->track, t->fname, t->offset, sector, t->index1); - audio_unpack (cdu, t); + write_log(_T("IMAGE CDDA: track %d ('%s', offset %lld, secoffset %d (%d))\n"), + t->track, + t->fname, + t->offset, + sector, + t->index1); + audio_unpack(cdu, t); } if (!(t->ctrl & 4)) { if (t->enctype == ENC_CHD) { #ifdef WITH_CHD - do_read (cdu, t, dst, sector, 0, t->size); - for (int i = 0; i < 2352; i+=2) { + do_read(cdu, t, dst, sector, 0, t->size); + for (int i = 0; i < 2352; i += 2) { uae_u8 p; p = dst[i + 0]; dst[i + 0] = dst[i + 1]; - dst[i +1] = p; + dst[i + 1] = p; } #endif - } else if (t->handle) { - int totalsize = t->size + t->skipsize; + } + else if (t->handle) { + int totalsize = t->size + t->skipsize; int offset = t->offset; if (offset >= 0) { - if ((t->enctype == AUDENC_MP3 || t->enctype == AUDENC_FLAC) && t->data) { + if ((t->enctype == AUDENC_MP3 || t->enctype == AUDENC_FLAC) && t->data) { if (t->filesize >= sector * totalsize + offset + t->size) - memcpy (dst, t->data + sector * totalsize + offset, t->size); - } else if (t->enctype == AUDENC_PCM) { + memcpy(dst, t->data + sector * totalsize + offset, t->size); + } + else if (t->enctype == AUDENC_PCM) { if (sector * totalsize + offset + totalsize < t->filesize) { - zfile_fseek (t->handle, (uae_u64)sector * totalsize + offset, SEEK_SET); - zfile_fread (dst, t->size, 1, t->handle); + zfile_fseek(t->handle, (uae_u64)sector * totalsize + offset, SEEK_SET); + zfile_fread(dst, t->size, 1, t->handle); } - } - } - } + } + } + } } - getsub_deinterleaved (subbuf, cdu, t, cdda_pos); + getsub_deinterleaved(subbuf, cdu, t, cdda_pos); } if (idleframes > 0 || silentframes > 0) { - if (idleframes > 0) { - idleframes--; - memset (subbuf, 0, SUB_CHANNEL_SIZE); + if (idleframes > 0) { + idleframes--; + memset(subbuf, 0, SUB_CHANNEL_SIZE); } if (silentframes > 0) silentframes--; - memset (dst, 0, 2352); + memset(dst, 0, 2352); } if (cdda_pos < cdu->cdda_start && cdu->cdda_scan == 0) - memset (dst, 0, 2352); + memset(dst, 0, 2352); - dosub (cdu, subbuf); + dosub(cdu, subbuf); if (cdu->cdda_scan) { cdda_pos += cdu->cdda_scan; if (cdda_pos < 0) cdda_pos = 0; - } else { + } + else { cdda_pos++; } @@ -610,16 +644,16 @@ static void *cdda_play_func (void *v) cdu->cd_last_pos = cdda_pos; bufon[bufnum] = 1; - cda->setvolume (currprefs.sound_volume_cd, cdu->cdda_volume[0], cdu->cdda_volume[1]); - if (!cda->play (bufnum)) { + cda->setvolume(currprefs.sound_volume_cd, cdu->cdda_volume[0], cdu->cdda_volume[1]); + if (!cda->play(bufnum)) { if (cdu->cdda_play > 0) - setstate (cdu, AUDIO_STATUS_PLAY_ERROR); + setstate(cdu, AUDIO_STATUS_PLAY_ERROR); goto end; } if (dofinish) { if (cdu->cdda_play >= 0) - setstate (cdu, AUDIO_STATUS_PLAY_COMPLETE); + setstate(cdu, AUDIO_STATUS_PLAY_COMPLETE); cdu->cdda_play = -1; cdda_pos = cdu->cdda_end + 1; } @@ -628,34 +662,34 @@ static void *cdda_play_func (void *v) if (bufon[0] == 0 && bufon[1] == 0) { while (cdu->cdda_paused && cdu->cdda_play == oldplay) - Sleep (10); + Sleep(10); } bufnum = 1 - bufnum; } end: - cda->wait (0); - cda->wait (1); + cda->wait(0); + cda->wait(1); while (cdimage_unpack_active == 1) - Sleep (10); + Sleep(10); delete cda; cdu->cdda_play = 0; - write_log (_T("IMAGE CDDA: thread killed\n")); + write_log(_T("IMAGE CDDA: thread killed\n")); cdu->thread_active = false; return NULL; } -static void cdda_stop (struct cdunit *cdu) +static void cdda_stop(struct cdunit *cdu) { if (cdu->cdda_play != 0) { cdu->cdda_play = -1; while (cdu->cdda_play && cdu->thread_active) { - Sleep (10); + Sleep(10); } cdu->cdda_play = 0; } @@ -664,35 +698,35 @@ static void cdda_stop (struct cdunit *cdu) } -static int command_pause (int unitnum, int paused) +static int command_pause(int unitnum, int paused) { - struct cdunit *cdu = unitisopen (unitnum); + struct cdunit *cdu = unitisopen(unitnum); if (!cdu) return -1; int old = cdu->cdda_paused; if ((paused && cdu->cdda_play) || !paused) - cdu->cdda_paused = paused; + cdu->cdda_paused = paused; return old; } -static int command_stop (int unitnum) +static int command_stop(int unitnum) { - struct cdunit *cdu = unitisopen (unitnum); + struct cdunit *cdu = unitisopen(unitnum); if (!cdu) return 0; - cdda_stop (cdu); + cdda_stop(cdu); return 1; } -static int command_play (int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc) +static int command_play(int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc) { - struct cdunit *cdu = unitisopen (unitnum); + struct cdunit *cdu = unitisopen(unitnum); if (!cdu) return 0; if (cdu->cdda_play) { cdu->cdda_play = -1; while (cdu->thread_active) - Sleep (10); + Sleep(10); cdu->cdda_play = 0; } cdu->cd_last_pos = startlsn; @@ -701,25 +735,25 @@ static int command_play (int unitnum, int startlsn, int endlsn, int scan, play_s cdu->cdda_subfunc = subfunc; cdu->cdda_statusfunc = statusfunc; cdu->cdda_scan = scan > 0 ? 10 : (scan < 0 ? 10 : 0); - cdu->cdda_delay = setstate (cdu, -1); - cdu->cdda_delay_frames = setstate (cdu, -2); - setstate (cdu, AUDIO_STATUS_NOT_SUPPORTED); - if (!isaudiotrack (&cdu->di.toc, startlsn)) { - setstate (cdu, AUDIO_STATUS_PLAY_ERROR); + cdu->cdda_delay = setstate(cdu, -1); + cdu->cdda_delay_frames = setstate(cdu, -2); + setstate(cdu, AUDIO_STATUS_NOT_SUPPORTED); + if (!isaudiotrack(&cdu->di.toc, startlsn)) { + setstate(cdu, AUDIO_STATUS_PLAY_ERROR); return 0; } if (!cdu->thread_active) { - uae_start_thread (_T("cdimage_cdda_play"), cdda_play_func, cdu, NULL); + uae_start_thread(_T("cdimage_cdda_play"), cdda_play_func, cdu, NULL); while (!cdu->thread_active) - Sleep (10); + Sleep(10); } cdu->cdda_play++; return 1; } -static int command_qcode (int unitnum, uae_u8 *buf, int sector) +static int command_qcode(int unitnum, uae_u8 *buf, int sector) { - struct cdunit *cdu = unitisopen (unitnum); + struct cdunit *cdu = unitisopen(unitnum); if (!cdu) return 0; @@ -729,7 +763,7 @@ static int command_qcode (int unitnum, uae_u8 *buf, int sector) int pos; int status; - memset (buf, 0, SUBQ_SIZE); + memset(buf, 0, SUBQ_SIZE); p = buf; status = cdu->cdda_play_state; @@ -759,16 +793,16 @@ static int command_qcode (int unitnum, uae_u8 *buf, int sector) } if (!td) return 0; - getsub_deinterleaved (subbuf, cdu, td, pos); - memcpy (p, subbuf + 12, 12); + getsub_deinterleaved(subbuf, cdu, td, pos); + memcpy(p, subbuf + 12, 12); // write_log (_T("%6d %02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x\n"), // pos, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11]); return 1; } -static uae_u32 command_volume (int unitnum, uae_u16 volume_left, uae_u16 volume_right) +static uae_u32 command_volume(int unitnum, uae_u16 volume_left, uae_u16 volume_right) { - struct cdunit *cdu = unitisopen (unitnum); + struct cdunit *cdu = unitisopen(unitnum); if (!cdu) return -1; uae_u32 old = (cdu->cdda_volume[1] << 16) | (cdu->cdda_volume[0] << 0); @@ -777,62 +811,65 @@ static uae_u32 command_volume (int unitnum, uae_u16 volume_left, uae_u16 volume_ return old; } -extern void encode_l2 (uae_u8 *p, int address); +extern void encode_l2(uae_u8 *p, int address); -static int command_rawread (int unitnum, uae_u8 *data, int sector, int size, int sectorsize, uae_u32 extra) +static int command_rawread(int unitnum, uae_u8 *data, int sector, int size, int sectorsize, uae_u32 extra) { int ret = 0; - struct cdunit *cdu = unitisopen (unitnum); + struct cdunit *cdu = unitisopen(unitnum); if (!cdu) return 0; int asector = sector; - struct cdtoc *t = findtoc (cdu, §or); + struct cdtoc *t = findtoc(cdu, §or); int ssize = t->size + t->skipsize; if (!t) goto end; - cdda_stop (cdu); + cdda_stop(cdu); if (sectorsize > 0) { if (sectorsize == 2352 && t->size == 2048) { // 2048 -> 2352 while (size-- > 0) { - memset (data, 0, 16); - do_read (cdu, t, data + 16, sector, 0, 2048); - encode_l2 (data, sector + 150); + memset(data, 0, 16); + do_read(cdu, t, data + 16, sector, 0, 2048); + encode_l2(data, sector + 150); sector++; asector++; data += sectorsize; ret += sectorsize; } - } else if (sectorsize == 2048 && t->size == 2352) { + } + else if (sectorsize == 2048 && t->size == 2352) { // 2352 -> 2048 while (size-- > 0) { uae_u8 b = 0; - do_read (cdu, t, &b, sector, 15, 1); - do_read (cdu, t, data, sector, b == 2 ? 24 : 16, sectorsize); + do_read(cdu, t, &b, sector, 15, 1); + do_read(cdu, t, data, sector, b == 2 ? 24 : 16, sectorsize); sector++; asector++; data += sectorsize; ret += sectorsize; } - } else if (sectorsize == 2336 && t->size == 2352) { + } + else if (sectorsize == 2336 && t->size == 2352) { // 2352 -> 2336 while (size-- > 0) { uae_u8 b = 0; - do_read (cdu, t, &b, sector, 15, 1); + do_read(cdu, t, &b, sector, 15, 1); if (b != 2 && b != 0) // MODE0 or MODE2 only allowed return 0; - do_read (cdu, t, data, sector, 16, sectorsize); + do_read(cdu, t, data, sector, 16, sectorsize); sector++; asector++; data += sectorsize; ret += sectorsize; } - } else if (sectorsize == t->size) { + } + else if (sectorsize == t->size) { // no change - while (size -- > 0) { - do_read (cdu, t, data, sector, 0, sectorsize); + while (size-- > 0) { + do_read(cdu, t, data, sector, 0, sectorsize); sector++; asector++; data += sectorsize; @@ -841,7 +878,8 @@ static int command_rawread (int unitnum, uae_u8 *data, int sector, int size, int } cdu->cd_last_pos = asector; - } else { + } + else { uae_u8 sectortype = extra >> 16; uae_u8 cmd9 = extra >> 8; @@ -856,7 +894,7 @@ static int command_rawread (int unitnum, uae_u8 *data, int sector, int size, int goto end; } - if (isaudiotrack (&cdu->di.toc, sector)) { + if (isaudiotrack(&cdu->di.toc, sector)) { if (sectortype != 0 && sectortype != 1) { ret = -2; goto end; @@ -866,19 +904,21 @@ static int command_rawread (int unitnum, uae_u8 *data, int sector, int size, int goto end; } for (int i = 0; i < size; i++) { - do_read (cdu, t, data, sector, 0, t->size); + do_read(cdu, t, data, sector, 0, t->size); uae_u8 *p = data + t->size; if (subs) { uae_u8 subdata[SUB_CHANNEL_SIZE]; - getsub_deinterleaved (subdata, cdu, t, sector); + getsub_deinterleaved(subdata, cdu, t, sector); if (subs == 4) { // all, de-interleaved - memcpy (p, subdata, SUB_CHANNEL_SIZE); + memcpy(p, subdata, SUB_CHANNEL_SIZE); p += SUB_CHANNEL_SIZE; - } else if (subs == 2) { // q-only - memcpy (p, subdata + SUB_ENTRY_SIZE, SUB_ENTRY_SIZE); + } + else if (subs == 2) { // q-only + memcpy(p, subdata + SUB_ENTRY_SIZE, SUB_ENTRY_SIZE); p += SUB_ENTRY_SIZE; - } else if (subs == 1) { // all, interleaved - sub_to_interleaved (subdata, p); + } + else if (subs == 1) { // all, interleaved + sub_to_interleaved(subdata, p); p += SUB_CHANNEL_SIZE; } } @@ -893,30 +933,32 @@ end: } // this only supports 2048 byte sectors -static int command_read (int unitnum, uae_u8 *data, int sector, int numsectors) +static int command_read(int unitnum, uae_u8 *data, int sector, int numsectors) { - struct cdunit *cdu = unitisopen (unitnum); + struct cdunit *cdu = unitisopen(unitnum); if (!cdu) return 0; - struct cdtoc *t = findtoc (cdu, §or); + struct cdtoc *t = findtoc(cdu, §or); if (!t) return 0; - cdda_stop (cdu); + cdda_stop(cdu); if (t->size == 2048) { while (numsectors-- > 0) { - do_read (cdu, t, data, sector, 0, 2048); + do_read(cdu, t, data, sector, 0, 2048); data += 2048; sector++; } - } else { + } + else { while (numsectors-- > 0) { if (t->size == 2352) { uae_u8 b = 0; - do_read (cdu, t, &b, sector, 15, 1); + do_read(cdu, t, &b, sector, 15, 1); // 2 = MODE2 - do_read (cdu, t, data, sector, b == 2 ? 24 : 16, 2048); - } else { - do_read (cdu, t, data, sector, 16, 2048); + do_read(cdu, t, data, sector, b == 2 ? 24 : 16, 2048); + } + else { + do_read(cdu, t, data, sector, 16, 2048); } data += 2048; sector++; @@ -926,19 +968,19 @@ static int command_read (int unitnum, uae_u8 *data, int sector, int numsectors) return 1; } -static int command_toc (int unitnum, struct cd_toc_head *th) +static int command_toc(int unitnum, struct cd_toc_head *th) { - struct cdunit *cdu = unitisopen (unitnum); + struct cdunit *cdu = unitisopen(unitnum); if (!cdu) return 0; int i; - memset (&cdu->di.toc, 0, sizeof (struct cd_toc_head)); + memset(&cdu->di.toc, 0, sizeof(struct cd_toc_head)); if (!cdu->tracks) return 0; - memset (th, 0, sizeof (struct cd_toc_head)); + memset(th, 0, sizeof(struct cd_toc_head)); struct cd_toc *toc = &th->toc[0]; th->first_track = 1; th->last_track = cdu->tracks; @@ -973,27 +1015,27 @@ static int command_toc (int unitnum, struct cd_toc_head *th) toc->paddress = th->lastaddress; toc++; - memcpy (&cdu->di.toc, th, sizeof (struct cd_toc_head)); + memcpy(&cdu->di.toc, th, sizeof(struct cd_toc_head)); return 1; } -static void skipspace (TCHAR **s) +static void skipspace(TCHAR **s) { - while (_istspace (**s)) + while (_istspace(**s)) (*s)++; } -static void skipnspace (TCHAR **s) +static void skipnspace(TCHAR **s) { - while (!_istspace (**s)) + while (!_istspace(**s)) (*s)++; } -static TCHAR *nextstring (TCHAR **sp) +static TCHAR *nextstring(TCHAR **sp) { TCHAR *s; TCHAR *out = NULL; - skipspace (sp); + skipspace(sp); s = *sp; if (*s == '\"') { s++; @@ -1001,22 +1043,23 @@ static TCHAR *nextstring (TCHAR **sp) while (*s && *s != '\"') s++; *s++ = 0; - } else if (*s) { + } + else if (*s) { out = s; - skipnspace (&s); + skipnspace(&s); *s++ = 0; } *sp = s; return out; } -static int readval (const TCHAR *s) +static int readval(const TCHAR *s) { int base = 10; TCHAR *endptr; - if (s[0] == '0' && _totupper (s[1]) == 'X') + if (s[0] == '0' && _totupper(s[1]) == 'X') s += 2, base = 16; - return _tcstol (s, &endptr, base); + return _tcstol(s, &endptr, base); } #define MEDIA_DESCRIPTOR "MEDIA DESCRIPTOR" @@ -1046,71 +1089,71 @@ static int readval (const TCHAR *s) #pragma pack(1) typedef struct { - uae_u8 signature[16]; /* "MEDIA DESCRIPTOR" */ - uae_u8 version[2]; /* Version ? */ - uae_u16 medium_type; /* Medium type */ - uae_u16 num_sessions; /* Number of sessions */ - uae_u16 __dummy1__[2]; /* Wish I knew... */ - uae_u16 bca_len; /* Length of BCA data (DVD-ROM) */ - uae_u32 __dummy2__[2]; - uae_u32 bca_data_offset; /* Offset to BCA data (DVD-ROM) */ - uae_u32 __dummy3__[6]; /* Probably more offsets */ - uae_u32 disc_structures_offset; /* Offset to disc structures */ - uae_u32 __dummy4__[3]; /* Probably more offsets */ - uae_u32 sessions_blocks_offset; /* Offset to session blocks */ - uae_u32 dpm_blocks_offset; /* offset to DPM data blocks */ + uae_u8 signature[16]; /* "MEDIA DESCRIPTOR" */ + uae_u8 version[2]; /* Version ? */ + uae_u16 medium_type; /* Medium type */ + uae_u16 num_sessions; /* Number of sessions */ + uae_u16 __dummy1__[2]; /* Wish I knew... */ + uae_u16 bca_len; /* Length of BCA data (DVD-ROM) */ + uae_u32 __dummy2__[2]; + uae_u32 bca_data_offset; /* Offset to BCA data (DVD-ROM) */ + uae_u32 __dummy3__[6]; /* Probably more offsets */ + uae_u32 disc_structures_offset; /* Offset to disc structures */ + uae_u32 __dummy4__[3]; /* Probably more offsets */ + uae_u32 sessions_blocks_offset; /* Offset to session blocks */ + uae_u32 dpm_blocks_offset; /* offset to DPM data blocks */ } MDS_Header; /* length: 88 bytes */ typedef struct { - uae_s32 session_start; /* Session's start address */ - uae_s32 session_end; /* Session's end address */ - uae_u16 session_number; /* (Unknown) */ - uae_u8 num_all_blocks; /* Number of all data blocks. */ - uae_u8 num_nontrack_blocks; /* Number of lead-in data blocks */ - uae_u16 first_track; /* Total number of sessions in image? */ - uae_u16 last_track; /* Number of regular track data blocks. */ - uae_u32 __dummy2__; /* (unknown) */ - uae_u32 tracks_blocks_offset; /* Offset of lead-in+regular track data blocks. */ + uae_s32 session_start; /* Session's start address */ + uae_s32 session_end; /* Session's end address */ + uae_u16 session_number; /* (Unknown) */ + uae_u8 num_all_blocks; /* Number of all data blocks. */ + uae_u8 num_nontrack_blocks; /* Number of lead-in data blocks */ + uae_u16 first_track; /* Total number of sessions in image? */ + uae_u16 last_track; /* Number of regular track data blocks. */ + uae_u32 __dummy2__; /* (unknown) */ + uae_u32 tracks_blocks_offset; /* Offset of lead-in+regular track data blocks. */ } MDS_SessionBlock; /* length: 24 bytes */ typedef struct { - uae_u8 mode; /* Track mode */ - uae_u8 subchannel; /* Subchannel mode */ - uae_u8 adr_ctl; /* Adr/Ctl */ - uae_u8 __dummy2__; /* Track flags? */ - uae_u8 point; /* Track number. (>0x99 is lead-in track) */ + uae_u8 mode; /* Track mode */ + uae_u8 subchannel; /* Subchannel mode */ + uae_u8 adr_ctl; /* Adr/Ctl */ + uae_u8 __dummy2__; /* Track flags? */ + uae_u8 point; /* Track number. (>0x99 is lead-in track) */ - uae_u32 __dummy3__; - uae_u8 min; /* Min */ - uae_u8 sec; /* Sec */ - uae_u8 frame; /* Frame */ - uae_u32 extra_offset; /* Start offset of this track's extra block. */ - uae_u16 sector_size; /* Sector size. */ + uae_u32 __dummy3__; + uae_u8 min; /* Min */ + uae_u8 sec; /* Sec */ + uae_u8 frame; /* Frame */ + uae_u32 extra_offset; /* Start offset of this track's extra block. */ + uae_u16 sector_size; /* Sector size. */ - uae_u8 __dummy4__[18]; - uae_u32 start_sector; /* Track start sector (PLBA). */ - uae_u64 start_offset; /* Track start offset. */ - uae_u8 session; /* Session or index? */ - uae_u8 __dummy5__[3]; - uae_u32 footer_offset; /* Start offset of footer. */ - uae_u8 __dummy6__[24]; + uae_u8 __dummy4__[18]; + uae_u32 start_sector; /* Track start sector (PLBA). */ + uae_u64 start_offset; /* Track start offset. */ + uae_u8 session; /* Session or index? */ + uae_u8 __dummy5__[3]; + uae_u32 footer_offset; /* Start offset of footer. */ + uae_u8 __dummy6__[24]; } MDS_TrackBlock; /* length: 80 bytes */ typedef struct { - uae_u32 pregap; /* Number of sectors in pregap. */ - uae_u32 length; /* Number of sectors in track. */ + uae_u32 pregap; /* Number of sectors in pregap. */ + uae_u32 length; /* Number of sectors in track. */ } MDS_TrackExtraBlock; /* length: 8 bytes */ typedef struct { - uae_u32 filename_offset; /* Start offset of image filename. */ - uae_u32 widechar_filename; /* Seems to be set to 1 if widechar filename is used */ - uae_u32 __dummy1__; - uae_u32 __dummy2__; + uae_u32 filename_offset; /* Start offset of image filename. */ + uae_u32 widechar_filename; /* Seems to be set to 1 if widechar filename is used */ + uae_u32 __dummy1__; + uae_u32 __dummy2__; } MDS_Footer; /* length: 16 bytes */ #pragma pack() -static int parsemds (struct cdunit *cdu, struct zfile *zmds, const TCHAR *img) +static int parsemds(struct cdunit *cdu, struct zfile *zmds, const TCHAR *img) { MDS_Header *head; struct cdtoc *t; @@ -1118,26 +1161,26 @@ static int parsemds (struct cdunit *cdu, struct zfile *zmds, const TCHAR *img) uae_u64 size; MDS_SessionBlock *sb; - write_log (_T("MDS TOC: '%s'\n"), img); - size = zfile_size (zmds); - mds = xmalloc (uae_u8, size); + write_log(_T("MDS TOC: '%s'\n"), img); + size = zfile_size(zmds); + mds = xmalloc(uae_u8, size); if (!mds) goto end; - if (zfile_fread (mds, size, 1, zmds) != 1) + if (zfile_fread(mds, size, 1, zmds) != 1) goto end; head = (MDS_Header*)mds; - if (!memcmp (&head, MEDIA_DESCRIPTOR, strlen (MEDIA_DESCRIPTOR))) + if (!memcmp(&head, MEDIA_DESCRIPTOR, strlen(MEDIA_DESCRIPTOR))) goto end; if (head->version[0] != 1) { - write_log (_T("unsupported MDS version %d, only v.1 supported\n"), head->version[0]); + write_log(_T("unsupported MDS version %d, only v.1 supported\n"), head->version[0]); goto end; } sb = (MDS_SessionBlock*)(mds + head->sessions_blocks_offset); cdu->tracks = sb->last_track - sb->first_track + 1; for (int i = 0; i < sb->num_all_blocks; i++) { - MDS_TrackBlock *tb = (MDS_TrackBlock*)(mds + sb->tracks_blocks_offset + i * sizeof (MDS_TrackBlock)); + MDS_TrackBlock *tb = (MDS_TrackBlock*)(mds + sb->tracks_blocks_offset + i * sizeof(MDS_TrackBlock)); int point = tb->point; int tracknum = -1; if (point == 0xa2) @@ -1164,29 +1207,29 @@ static int parsemds (struct cdunit *cdu, struct zfile *zmds, const TCHAR *img) if (footer) { TCHAR *fname = NULL; if (footer->widechar_filename == 0) - fname = au ((char*)(mds + footer->filename_offset)); + fname = au((char*)(mds + footer->filename_offset)); else - fname = my_strdup ((TCHAR*)(mds + footer->filename_offset)); + fname = my_strdup((TCHAR*)(mds + footer->filename_offset)); if (fname[0] == '*' && fname[1] == '.') { TCHAR newname[MAX_DPATH]; - _tcscpy (newname, img); - TCHAR *ext = _tcsrchr (newname, '.'); + _tcscpy(newname, img); + TCHAR *ext = _tcsrchr(newname, '.'); if (ext) - _tcscpy (ext, fname + 1); - xfree (fname); - fname = my_strdup (newname); + _tcscpy(ext, fname + 1); + xfree(fname); + fname = my_strdup(newname); } - t->handle = zfile_fopen (fname, _T("rb"), ZFD_NORMAL); - t->fname = my_strdup (fname); + t->handle = zfile_fopen(fname, _T("rb"), ZFD_NORMAL); + t->fname = my_strdup(fname); if (t->handle) - t->filesize = zfile_size (t->handle); + t->filesize = zfile_size(t->handle); } if (tb->subchannel && t->handle) { t->suboffset = t->size; t->subcode = 1; // interleaved - t->subhandle = zfile_dup (t->handle); + t->subhandle = zfile_dup(t->handle); t->skipsize = SUB_CHANNEL_SIZE; t->size -= SUB_CHANNEL_SIZE; } @@ -1196,68 +1239,68 @@ static int parsemds (struct cdunit *cdu, struct zfile *zmds, const TCHAR *img) } end: - xfree (mds); + xfree(mds); return cdu->tracks; } #ifdef WITH_CHD -static int parsechd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) +static int parsechd(struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) { chd_error err; struct cdrom_file *cdf; - struct zfile *f = zfile_dup (zcue); + struct zfile *f = zfile_dup(zcue); if (!f) return 0; chd_file *cf = new chd_file(); err = cf->open(f, false, NULL); if (err != CHDERR_NONE) { - write_log (_T("CHD '%s' err=%d\n"), zfile_getname (zcue), err); - zfile_fclose (f); + write_log(_T("CHD '%s' err=%d\n"), zfile_getname(zcue), err); + zfile_fclose(f); return 0; } - if (!(cdf = cdrom_open (cf))) { - write_log (_T("Couldn't open CHD '%s' as CD\n"), zfile_getname (zcue)); - cf->close (); - zfile_fclose (f); + if (!(cdf = cdrom_open(cf))) { + write_log(_T("Couldn't open CHD '%s' as CD\n"), zfile_getname(zcue)); + cf->close(); + zfile_fclose(f); return 0; } cdu->chd_f = cf; cdu->chd_cdf = cdf; - const cdrom_toc *stoc = cdrom_get_toc (cdf); + const cdrom_toc *stoc = cdrom_get_toc(cdf); cdu->tracks = stoc->numtrks; - uae_u32 hunkcnt = cf->hunk_count (); - uae_u32 hunksize = cf->hunk_bytes (); + uae_u32 hunkcnt = cf->hunk_count(); + uae_u32 hunksize = cf->hunk_bytes(); uae_u32 cbytes; chd_codec_type compr; - for (int i = 0; i tracks; i++) { + for (int i = 0; i < cdu->tracks; i++) { int size; const cdrom_track_info *strack = &stoc->tracks[i]; struct cdtoc *dtrack = &cdu->toc[i]; dtrack->address = strack->physframeofs; dtrack->offset = strack->chdframeofs; - dtrack->adr = cdrom_get_adr_control (cdf, i) >> 4; - dtrack->ctrl = cdrom_get_adr_control (cdf, i) & 15; + dtrack->adr = cdrom_get_adr_control(cdf, i) >> 4; + dtrack->ctrl = cdrom_get_adr_control(cdf, i) & 15; switch (strack->trktype) { - case CD_TRACK_MODE1: - case CD_TRACK_MODE2_FORM1: - size = 2048; + case CD_TRACK_MODE1: + case CD_TRACK_MODE2_FORM1: + size = 2048; break; - case CD_TRACK_MODE1_RAW: - case CD_TRACK_MODE2_RAW: - case CD_TRACK_AUDIO: - default: - size = 2352; + case CD_TRACK_MODE1_RAW: + case CD_TRACK_MODE2_RAW: + case CD_TRACK_AUDIO: + default: + size = 2352; break; - case CD_TRACK_MODE2: - case CD_TRACK_MODE2_FORM_MIX: - size = 2336; + case CD_TRACK_MODE2: + case CD_TRACK_MODE2_FORM_MIX: + size = 2336; break; - case CD_TRACK_MODE2_FORM2: - size = 2324; + case CD_TRACK_MODE2_FORM2: + size = 2324; break; } dtrack->suboffset = size; @@ -1265,8 +1308,8 @@ static int parsechd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) dtrack->chdtrack = strack; dtrack->size = size; dtrack->enctype = ENC_CHD; - dtrack->fname = my_strdup (zfile_getname (zcue)); - dtrack->filesize = cf->logical_bytes (); + dtrack->fname = my_strdup(zfile_getname(zcue)); + dtrack->filesize = cf->logical_bytes(); dtrack->track = i + 1; dtrack[1].address = dtrack->address + strack->frames; if (cf->hunk_info(dtrack->offset * CD_FRAME_SIZE / hunksize, compr, cbytes) == CHDERR_NONE) { @@ -1278,11 +1321,11 @@ static int parsechd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) b += '0'; } if (b < ' ' || b >= 127) - b = '.'; + b = '.'; tmp[j] = b; } tmp[4] = 0; - dtrack->extrainfo = my_strdup (tmp); + dtrack->extrainfo = my_strdup(tmp); } } @@ -1290,7 +1333,7 @@ static int parsechd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) } #endif -static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) +static int parseccd(struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) { int mode; int num, tracknum, trackmode; @@ -1300,46 +1343,48 @@ static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) struct zfile *zimg, *zsub; TCHAR fname[MAX_DPATH]; - write_log (_T("CCD TOC: '%s'\n"), img); - _tcscpy (fname, zfile_getname(zcue)); - TCHAR *ext = _tcsrchr (fname, '.'); + write_log(_T("CCD TOC: '%s'\n"), img); + _tcscpy(fname, zfile_getname(zcue)); + TCHAR *ext = _tcsrchr(fname, '.'); if (ext) *ext = 0; - _tcscat (fname, _T(".img")); - zimg = zfile_fopen (fname, _T("rb"), ZFD_NORMAL); + _tcscat(fname, _T(".img")); + zimg = zfile_fopen(fname, _T("rb"), ZFD_NORMAL); if (!zimg) { - write_log (_T("CCD: can't open '%s'\n"), fname); + write_log(_T("CCD: can't open '%s'\n"), fname); return 0; } - ext = _tcsrchr (fname, '.'); + ext = _tcsrchr(fname, '.'); if (ext) *ext = 0; - _tcscat (fname, _T(".sub")); - zsub = zfile_fopen (fname, _T("rb"), ZFD_NORMAL); + _tcscat(fname, _T(".sub")); + zsub = zfile_fopen(fname, _T("rb"), ZFD_NORMAL); if (zsub) - write_log (_T("CCD: '%s' detected\n"), fname); + write_log(_T("CCD: '%s' detected\n"), fname); num = -1; mode = -1; for (;;) { TCHAR buf[MAX_DPATH], *p; - if (!zfile_fgets (buf, sizeof buf / sizeof (TCHAR), zcue)) + if (!zfile_fgets(buf, sizeof buf / sizeof(TCHAR), zcue)) break; p = buf; - skipspace (&p); - if (!_tcsnicmp (p, _T("[DISC]"), 6)) { + skipspace(&p); + if (!_tcsnicmp(p, _T("[DISC]"), 6)) { mode = 1; - } else if (!_tcsnicmp (p, _T("[ENTRY "), 7)) { + } + else if (!_tcsnicmp(p, _T("[ENTRY "), 7)) { t = NULL; mode = 2; - num = readval (p + 7); + num = readval(p + 7); if (num < 0) break; adr = control = -1; gotlba = false; - } else if (!_tcsnicmp (p, _T("[TRACK "), 7)) { + } + else if (!_tcsnicmp(p, _T("[TRACK "), 7)) { mode = 3; - tracknum = readval (p + 7); + tracknum = readval(p + 7); trackmode = -1; if (tracknum <= 0 || tracknum > 99) break; @@ -1348,8 +1393,8 @@ static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) if (mode < 0) continue; if (mode == 1) { - if (!_tcsnicmp (p, _T("TocEntries="), 11)) { - cdu->tracks = readval (p + 11) - 3; + if (!_tcsnicmp(p, _T("TocEntries="), 11)) { + cdu->tracks = readval(p + 11) - 3; if (cdu->tracks <= 0 || cdu->tracks > 99) break; } @@ -1360,12 +1405,13 @@ static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) if (mode == 2) { - if (!_tcsnicmp (p, _T("SESSION="), 8)) { - if (readval (p + 8) != 1) + if (!_tcsnicmp(p, _T("SESSION="), 8)) { + if (readval(p + 8) != 1) mode = -1; continue; - } else if (!_tcsnicmp (p, _T("POINT="), 6)) { - tracknum = readval (p + 6); + } + else if (!_tcsnicmp(p, _T("POINT="), 6)) { + tracknum = readval(p + 6); if (tracknum <= 0) break; if (tracknum >= 0xa0 && tracknum != 0xa2) { @@ -1377,12 +1423,12 @@ static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) t = &cdu->toc[tracknum - 1]; continue; } - if (!_tcsnicmp (p, _T("ADR="), 4)) - adr = readval (p + 4); - if (!_tcsnicmp (p, _T("CONTROL="), 8)) - control = readval (p + 8); - if (!_tcsnicmp (p, _T("PLBA="), 5)) { - lba = readval (p + 5); + if (!_tcsnicmp(p, _T("ADR="), 4)) + adr = readval(p + 4); + if (!_tcsnicmp(p, _T("CONTROL="), 8)) + control = readval(p + 8); + if (!_tcsnicmp(p, _T("PLBA="), 5)) { + lba = readval(p + 5); gotlba = true; } if (gotlba && adr >= 0 && control >= 0) { @@ -1397,32 +1443,33 @@ static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) t->enctype = AUDENC_PCM; if (zsub) { t->subcode = 2; - t->subhandle = zfile_dup (zsub); + t->subhandle = zfile_dup(zsub); t->suboffset = 0; } if (zimg) { - t->handle = zfile_dup (zimg); - t->fname = my_strdup (zfile_getname (zimg)); + t->handle = zfile_dup(zimg); + t->fname = my_strdup(zfile_getname(zimg)); } mode = -1; } - } else if (mode == 3) { + } + else if (mode == 3) { - if (!_tcsnicmp (p, _T("MODE="), 5)) - trackmode = _tstol (p + 5); + if (!_tcsnicmp(p, _T("MODE="), 5)) + trackmode = _tstol(p + 5); if (trackmode < 0 || trackmode > 2) continue; } } - zfile_fclose (zimg); - zfile_fclose (zsub); + zfile_fclose(zimg); + zfile_fclose(zsub); return cdu->tracks; } -static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) +static int parsecue(struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) { int tracknum, pregap, postgap, lastpregap, lastpostgap; int newfile, secoffset; @@ -1447,48 +1494,50 @@ static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) lastpostgap = 0; fnametypeid = AUDENC_NONE; - write_log (_T("CUE TOC: '%s'\n"), img); + write_log(_T("CUE TOC: '%s'\n"), img); for (;;) { TCHAR buf[MAX_DPATH], *p; - if (!zfile_fgets (buf, sizeof buf / sizeof (TCHAR), zcue)) + if (!zfile_fgets(buf, sizeof buf / sizeof(TCHAR), zcue)) break; p = buf; - skipspace (&p); + skipspace(&p); - if (!_tcsnicmp (p, _T("FILE"), 4)) { + if (!_tcsnicmp(p, _T("FILE"), 4)) { p += 4; - xfree (fname); - fname = my_strdup (nextstring (&p)); - fnametype = nextstring (&p); + xfree(fname); + fname = my_strdup(nextstring(&p)); + fnametype = nextstring(&p); fnametypeid = AUDENC_NONE; if (!fnametype) break; - if (_tcsicmp (fnametype, _T("BINARY")) && _tcsicmp (fnametype, _T("WAVE")) && _tcsicmp (fnametype, _T("MP3")) && _tcsicmp (fnametype, _T("FLAC"))) { - write_log (_T("CUE: unknown file type '%s' ('%s')\n"), fnametype, fname); + if (_tcsicmp(fnametype, _T("BINARY")) && _tcsicmp(fnametype, _T("WAVE")) && _tcsicmp(fnametype, _T("MP3")) && _tcsicmp(fnametype, _T("FLAC"))) { + write_log(_T("CUE: unknown file type '%s' ('%s')\n"), fnametype, fname); } fnametypeid = AUDENC_PCM; - if (!_tcsicmp (fnametype, _T("MP3"))) + if (!_tcsicmp(fnametype, _T("MP3"))) fnametypeid = AUDENC_MP3; - else if (!_tcsicmp (fnametype, _T("FLAC"))) + else if (!_tcsicmp(fnametype, _T("FLAC"))) fnametypeid = AUDENC_FLAC; fileoffset = 0; newfile = 1; ctrl = 0; - } else if (!_tcsnicmp (p, _T("FLAGS"), 5)) { + } + else if (!_tcsnicmp(p, _T("FLAGS"), 5)) { ctrl &= ~(1 | 2 | 8); for (;;) { - TCHAR *f = nextstring (&p); + TCHAR *f = nextstring(&p); if (!f) break; - if (!_tcsicmp (f, _T("PRE"))) + if (!_tcsicmp(f, _T("PRE"))) ctrl |= 1; - if (!_tcsicmp (f, _T("DCP"))) + if (!_tcsicmp(f, _T("DCP"))) ctrl |= 2; - if (!_tcsicmp (f, _T("4CH"))) + if (!_tcsicmp(f, _T("4CH"))) ctrl |= 8; } - } else if (!_tcsnicmp (p, _T("TRACK"), 5)) { + } + else if (!_tcsnicmp(p, _T("TRACK"), 5)) { int size; TCHAR *tracktype; @@ -1496,25 +1545,26 @@ static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) index0 = -1; lastpregap = 0; lastpostgap = 0; - tracknum = _tstoi (nextstring (&p)); - tracktype = nextstring (&p); + tracknum = _tstoi(nextstring(&p)); + tracktype = nextstring(&p); if (!tracktype) break; size = 2352; - if (!_tcsicmp (tracktype, _T("AUDIO"))) { + if (!_tcsicmp(tracktype, _T("AUDIO"))) { ctrl &= ~4; - } else { + } + else { ctrl |= 4; - if (!_tcsicmp (tracktype, _T("MODE1/2048"))) + if (!_tcsicmp(tracktype, _T("MODE1/2048"))) size = 2048; - else if (!_tcsicmp (tracktype, _T("MODE1/2352"))) + else if (!_tcsicmp(tracktype, _T("MODE1/2352"))) size = 2352; - else if (!_tcsicmp (tracktype, _T("MODE2/2336")) || !_tcsicmp (tracktype, _T("CDI/2336"))) + else if (!_tcsicmp(tracktype, _T("MODE2/2336")) || !_tcsicmp(tracktype, _T("CDI/2336"))) size = 2336; - else if (!_tcsicmp (tracktype, _T("MODE2/2352")) || !_tcsicmp (tracktype, _T("CDI/2352"))) + else if (!_tcsicmp(tracktype, _T("MODE2/2352")) || !_tcsicmp(tracktype, _T("CDI/2352"))) size = 2352; else { - write_log (_T("CUE: unknown tracktype '%s' ('%s')\n"), tracktype, fname); + write_log(_T("CUE: unknown tracktype '%s' ('%s')\n"), tracktype, fname); } } if (tracknum >= 1 && tracknum <= 99) { @@ -1528,17 +1578,17 @@ static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) } newfile = 0; - ztrack = zfile_fopen (fname, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); + ztrack = zfile_fopen(fname, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); if (!ztrack) { TCHAR tmp[MAX_DPATH]; - _tcscpy (tmp, fname); - p = tmp + _tcslen (tmp); + _tcscpy(tmp, fname); + p = tmp + _tcslen(tmp); while (p > tmp) { if (*p == '/' || *p == '\\') { - ztrack = zfile_fopen (p + 1, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); + ztrack = zfile_fopen(p + 1, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); if (ztrack) { - xfree (fname); - fname = my_strdup (p + 1); + xfree(fname); + fname = my_strdup(p + 1); } break; } @@ -1548,15 +1598,15 @@ static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) if (!ztrack) { TCHAR tmp[MAX_DPATH]; TCHAR *s2; - _tcscpy (tmp, zfile_getname (zcue)); - s2 = _tcsrchr (tmp, '\\'); + _tcscpy(tmp, zfile_getname(zcue)); + s2 = _tcsrchr(tmp, '\\'); if (!s2) - s2 = _tcsrchr (tmp, '/'); + s2 = _tcsrchr(tmp, '/'); if (s2) { s2[0] = 0; - _tcscat (tmp, FSDB_DIR_SEPARATOR_S); - _tcscat (tmp, fname); - ztrack = zfile_fopen (tmp, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); + _tcscat(tmp, FSDB_DIR_SEPARATOR_S); + _tcscat(tmp, fname); + ztrack = zfile_fopen(tmp, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); } } t->track = tracknum; @@ -1564,46 +1614,50 @@ static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) t->adr = 1; t->handle = ztrack; t->size = size; - t->fname = my_strdup (fname); + t->fname = my_strdup(fname); if (tracknum > cdu->tracks) cdu->tracks = tracknum; if (t->handle) - t->filesize = zfile_size (t->handle); + t->filesize = zfile_size(t->handle); } - } else if (!_tcsnicmp (p, _T("PREGAP"), 6)) { + } + else if (!_tcsnicmp(p, _T("PREGAP"), 6)) { TCHAR *tt; int tn; p += 6; - tt = nextstring (&p); - tn = _tstoi (tt) * 60 * 75; - tn += _tstoi (tt + 3) * 75; - tn += _tstoi (tt + 6); + tt = nextstring(&p); + tn = _tstoi(tt) * 60 * 75; + tn += _tstoi(tt + 3) * 75; + tn += _tstoi(tt + 6); pregap += tn; lastpregap = tn; - } else if (!_tcsnicmp (p, _T("POSTGAP"), 7)) { + } + else if (!_tcsnicmp(p, _T("POSTGAP"), 7)) { struct cdtoc *t = &cdu->toc[tracknum - 1]; TCHAR *tt; int tn; p += 7; - tt = nextstring (&p); - tn = _tstoi (tt) * 60 * 75; - tn += _tstoi (tt + 3) * 75; - tn += _tstoi (tt + 6); + tt = nextstring(&p); + tn = _tstoi(tt) * 60 * 75; + tn += _tstoi(tt + 3) * 75; + tn += _tstoi(tt + 6); postgap += tn; lastpostgap = tn; - } else if (!_tcsnicmp (p, _T("INDEX"), 5)) { + } + else if (!_tcsnicmp(p, _T("INDEX"), 5)) { int idxnum; int tn = 0; TCHAR *tt; p += 5; - idxnum = _tstoi (nextstring (&p)); - tt = nextstring (&p); - tn = _tstoi (tt) * 60 * 75; - tn += _tstoi (tt + 3) * 75; - tn += _tstoi (tt + 6); + idxnum = _tstoi(nextstring(&p)); + tt = nextstring(&p); + tn = _tstoi(tt) * 60 * 75; + tn += _tstoi(tt + 3) * 75; + tn += _tstoi(tt + 6); if (idxnum == 0) { index0 = tn; - } else if (idxnum == 1 && tracknum >= 1 && tracknum <= 99) { + } + else if (idxnum == 1 && tracknum >= 1 && tracknum <= 99) { struct cdtoc *t = &cdu->toc[tracknum - 1]; if (!t->address) { t->address = tn + secoffset; @@ -1628,38 +1682,41 @@ static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) if (fnametypeid == AUDENC_PCM && t->handle) { struct zfile *zf = t->handle; uae_u8 buf[16] = { 0 }; - zfile_fread (buf, 12, 1, zf); - if (!memcmp (buf, "RIFF", 4) && !memcmp (buf + 8, "WAVE", 4)) { + zfile_fread(buf, 12, 1, zf); + if (!memcmp(buf, "RIFF", 4) && !memcmp(buf + 8, "WAVE", 4)) { int size; for (;;) { - memset (buf, 0, sizeof buf); - if (zfile_fread (buf, 8, 1, zf) != 1) + memset(buf, 0, sizeof buf); + if (zfile_fread(buf, 8, 1, zf) != 1) break; size = (buf[4] << 0) | (buf[5] << 8) | (buf[6] << 16) | (buf[7] << 24); - if (!memcmp (buf, "data", 4)) + if (!memcmp(buf, "data", 4)) break; if (size <= 0) break; - zfile_fseek (zf, size, SEEK_CUR); + zfile_fseek(zf, size, SEEK_CUR); } - t->offset += zfile_ftell (zf); + t->offset += zfile_ftell(zf); t->filesize = size; } t->enctype = fnametypeid; - } else if (fnametypeid == AUDENC_MP3 && t->handle) { + } + else if (fnametypeid == AUDENC_MP3 && t->handle) { if (!mp3dec) { try { mp3dec = new mp3decoder(); - } catch (exception) { } + } + catch (exception) {} } if (mp3dec) { t->offset = 0; - t->filesize = mp3dec->getsize (t->handle); + t->filesize = mp3dec->getsize(t->handle); if (t->filesize) t->enctype = fnametypeid; } - } else if (fnametypeid == AUDENC_FLAC && t->handle) { - flac_get_size (t); + } + else if (fnametypeid == AUDENC_FLAC && t->handle) { + flac_get_size(t); if (t->filesize) t->enctype = fnametypeid; } @@ -1677,14 +1734,14 @@ static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) size /= t->size; cdu->toc[cdu->tracks].address = t->address + (int)size; - xfree (fname); + xfree(fname); delete mp3dec; return cdu->tracks; } -static int parse_image (struct cdunit *cdu, const TCHAR *img) +static int parse_image(struct cdunit *cdu, const TCHAR *img) { struct zfile *zcue; int i; @@ -1695,19 +1752,19 @@ static int parse_image (struct cdunit *cdu, const TCHAR *img) cdu->tracks = 0; if (!img) return 0; - zcue = zfile_fopen (img, _T("rb"), ZFD_ARCHIVE | ZFD_CD | ZFD_DELAYEDOPEN); + zcue = zfile_fopen(img, _T("rb"), ZFD_ARCHIVE | ZFD_CD | ZFD_DELAYEDOPEN); if (!zcue) return 0; - ext = _tcsrchr (zfile_getname (zcue), '.'); + ext = _tcsrchr(zfile_getname(zcue), '.'); if (ext) { TCHAR curdir[MAX_DPATH]; TCHAR oldcurdir[MAX_DPATH], *p; ext++; oldcurdir[0] = 0; - _tcscpy (curdir, img); - p = curdir + _tcslen (curdir); + _tcscpy(curdir, img); + p = curdir + _tcslen(curdir); while (p > curdir) { if (*p == '/' || *p == '\\') break; @@ -1715,76 +1772,81 @@ static int parse_image (struct cdunit *cdu, const TCHAR *img) } *p = 0; if (p > curdir) - my_setcurrentdir (curdir, oldcurdir); + my_setcurrentdir(curdir, oldcurdir); - if (!_tcsicmp (ext, _T("cue"))) - parsecue (cdu, zcue, img); - else if (!_tcsicmp (ext, _T("ccd"))) - parseccd (cdu, zcue, img); - else if (!_tcsicmp (ext, _T("mds"))) - parsemds (cdu, zcue, img); + if (!_tcsicmp(ext, _T("cue"))) + parsecue(cdu, zcue, img); + else if (!_tcsicmp(ext, _T("ccd"))) + parseccd(cdu, zcue, img); + else if (!_tcsicmp(ext, _T("mds"))) + parsemds(cdu, zcue, img); #ifdef WITH_CHD - else if (!_tcsicmp (ext, _T("chd"))) - parsechd (cdu, zcue, img); + else if (!_tcsicmp(ext, _T("chd"))) + parsechd(cdu, zcue, img); #endif if (oldcurdir[0]) - my_setcurrentdir (oldcurdir, NULL); + my_setcurrentdir(oldcurdir, NULL); } if (!cdu->tracks) { - uae_u64 siz = zfile_size (zcue); + uae_u64 siz = zfile_size(zcue); if (siz >= 16384 && ((siz % 2048) == 0 || (siz % 2352) == 0)) { struct cdtoc *t = &cdu->toc[0]; cdu->tracks = 1; t->ctrl = 4; t->adr = 1; - t->fname = my_strdup (img); + t->fname = my_strdup(img); t->handle = zcue; t->size = (siz % 2048) == 0 ? 2048 : 2352; t->filesize = siz; t->track = 1; - write_log (_T("CD: plain CD image mounted!\n")); + write_log(_T("CD: plain CD image mounted!\n")); cdu->toc[1].address = t->address + (int)(t->filesize / t->size); zcue = NULL; } } if (!cdu->tracks) - write_log (_T("CD: couldn't mount '%s'!\n"), img); + write_log(_T("CD: couldn't mount '%s'!\n"), img); for (i = 0; i <= cdu->tracks; i++) { struct cdtoc *t = &cdu->toc[i]; uae_u32 msf; if (t->pregap) { - msf = lsn2msf (t->pregap - 150); - write_log (_T(" PREGAP : %02d:%02d:%02d\n"), (msf >> 16) & 0x7fff, (msf >> 8) & 0xff, (msf >> 0) & 0xff); + msf = lsn2msf(t->pregap - 150); + write_log(_T(" PREGAP : %02d:%02d:%02d\n"), (msf >> 16) & 0x7fff, (msf >> 8) & 0xff, (msf >> 0) & 0xff); } if (t->index1) { - msf = lsn2msf (t->index1 - 150); - write_log (_T(" INDEX1 : %02d:%02d:%02d\n"), (msf >> 16) & 0x7fff, (msf >> 8) & 0xff, (msf >> 0) & 0xff); + msf = lsn2msf(t->index1 - 150); + write_log(_T(" INDEX1 : %02d:%02d:%02d\n"), (msf >> 16) & 0x7fff, (msf >> 8) & 0xff, (msf >> 0) & 0xff); } if (i < cdu->tracks) - write_log (_T("%2d: "), i + 1); + write_log(_T("%2d: "), i + 1); else - write_log (_T(" ")); - msf = lsn2msf (t->address); - write_log (_T("%7d %02d:%02d:%02d"), - t->address, (msf >> 16) & 0x7fff, (msf >> 8) & 0xff, (msf >> 0) & 0xff); + write_log(_T(" ")); + msf = lsn2msf(t->address); + write_log(_T("%7d %02d:%02d:%02d"), + t->address, + (msf >> 16) & 0x7fff, + (msf >> 8) & 0xff, + (msf >> 0) & 0xff); if (i < cdu->tracks) { - write_log (_T(" %s %x %10lld %10lld %s%s"), - (t->ctrl & 4) ? _T("DATA ") : (t->subcode ? _T("CDA+SUB") : _T("CDA ")), - t->ctrl, t->offset, t->filesize, + write_log(_T(" %s %x %10lld %10lld %s%s"), + (t->ctrl & 4) ? _T("DATA ") : (t->subcode ? _T("CDA+SUB") : _T("CDA ")), + t->ctrl, + t->offset, + t->filesize, t->extrainfo ? t->extrainfo : _T(""), t->handle == NULL && t->enctype != ENC_CHD ? _T("[FILE ERROR]") : _T("")); - } - write_log (_T("\n")); + } + write_log(_T("\n")); if (i < cdu->tracks) - write_log (_T(" - %s\n"), t->fname); + write_log(_T(" - %s\n"), t->fname); if (t->handle && !t->filesize) - t->filesize = zfile_size (t->handle); + t->filesize = zfile_size(t->handle); if (t->postgap) { - msf = lsn2msf (t->postgap - 150); - write_log (_T(" POSTGAP: %02d:%02d:%02d\n"), (msf >> 16) & 0x7fff, (msf >> 8) & 0xff, (msf >> 0) & 0xff); + msf = lsn2msf(t->postgap - 150); + write_log(_T(" POSTGAP: %02d:%02d:%02d\n"), (msf >> 16) & 0x7fff, (msf >> 8) & 0xff, (msf >> 0) & 0xff); } } @@ -1792,11 +1854,11 @@ static int parse_image (struct cdunit *cdu, const TCHAR *img) cdu->cdsize = (uae_u64)cdu->toc[cdu->tracks].address * cdu->blocksize; - zfile_fclose (zcue); + zfile_fclose(zcue); return 1; } -static int ismedia (int unitnum, int quick) +static int ismedia(int unitnum, int quick) { struct cdunit *cdu = &cdunits[unitnum]; if (!cdu->enabled) @@ -1804,10 +1866,10 @@ static int ismedia (int unitnum, int quick) return cdu->tracks > 0 ? 1 : 0; } -static struct device_info *info_device (int unitnum, struct device_info *di, int quick, int session) +static struct device_info *info_device(int unitnum, struct device_info *di, int quick, int session) { struct cdunit *cdu = &cdunits[unitnum]; - memset (di, 0, sizeof (struct device_info)); + memset(di, 0, sizeof(struct device_info)); if (!cdu->enabled) return NULL; di->open = cdu->open; @@ -1821,135 +1883,151 @@ static struct device_info *info_device (int unitnum, struct device_info *di, int di->cylinders = 1; di->trackspercylinder = 1; di->sectorspertrack = (int)(cdu->cdsize / di->bytespersector); - if (ismedia (unitnum, 1)) { + if (ismedia(unitnum, 1)) { di->media_inserted = 1; - _tcscpy (di->mediapath, cdu->imgname); + _tcscpy(di->mediapath, cdu->imgname); } - memset (&di->toc, 0, sizeof (struct cd_toc_head)); - command_toc (unitnum, &di->toc); + memset(&di->toc, 0, sizeof(struct cd_toc_head)); + command_toc(unitnum, &di->toc); di->write_protected = 1; di->type = INQ_ROMD; di->unitnum = unitnum + 1; if (di->mediapath[0]) { - _tcscpy (di->label, _T("IMG:")); - _tcscat (di->label, di->mediapath); - } else { - _tcscpy (di->label, _T("IMG:")); + _tcscpy(di->label, _T("IMG:")); + _tcscat(di->label, di->mediapath); } - _tcscpy (di->vendorid, _T("UAE")); - _stprintf (di->productid, _T("SCSICD%d"), unitnum); - _tcscpy (di->revision, _T("1.0")); + else { + _tcscpy(di->label, _T("IMG:")); + } + _tcscpy(di->vendorid, _T("UAE")); + _stprintf(di->productid, _T("SCSICD%d"), unitnum); + _tcscpy(di->revision, _T("1.0")); di->backend = _T("IMAGE"); return di; } -static void unload_image (struct cdunit *cdu) +static void unload_image(struct cdunit *cdu) { int i; - for (i = 0; i < sizeof cdu->toc / sizeof (struct cdtoc); i++) { + for (i = 0; i < sizeof cdu->toc / sizeof(struct cdtoc); i++) { struct cdtoc *t = &cdu->toc[i]; - zfile_fclose (t->handle); + zfile_fclose(t->handle); if (t->handle != t->subhandle) - zfile_fclose (t->subhandle); - xfree (t->fname); - xfree (t->data); - xfree (t->subdata); - xfree (t->extrainfo); + zfile_fclose(t->subhandle); + xfree(t->fname); + xfree(t->data); + xfree(t->subdata); + xfree(t->extrainfo); } #ifdef WITH_CHD - cdrom_close (cdu->chd_cdf); + cdrom_close(cdu->chd_cdf); cdu->chd_cdf = NULL; if (cdu->chd_f) cdu->chd_f->close(); cdu->chd_f = NULL; #endif - memset (cdu->toc, 0, sizeof cdu->toc); + memset(cdu->toc, 0, sizeof cdu->toc); cdu->tracks = 0; cdu->cdsize = 0; } -static int open_device (int unitnum, const TCHAR *ident, int flags) +static int open_device(int unitnum, const TCHAR *ident, int flags) { struct cdunit *cdu = &cdunits[unitnum]; int ret = 0; if (!cdu->open) { - uae_sem_init (&cdu->sub_sem, 0, 1); + uae_sem_init(&cdu->sub_sem, 0, 1); cdu->imgname[0] = 0; if (ident) - _tcscpy (cdu->imgname, ident); - parse_image (cdu, ident); + _tcscpy(cdu->imgname, ident); + parse_image(cdu, ident); cdu->open = true; cdu->enabled = true; cdu->cdda_volume[0] = 0x7fff; cdu->cdda_volume[1] = 0x7fff; if (cdimage_unpack_thread == 0) { - init_comm_pipe (&unpack_pipe, 10, 1); - uae_start_thread (_T("cdimage_unpack"), cdda_unpack_func, NULL, NULL); + init_comm_pipe(&unpack_pipe, 10, 1); + uae_start_thread(_T("cdimage_unpack"), cdda_unpack_func, NULL, NULL); while (cdimage_unpack_thread == 0) - Sleep (10); + Sleep(10); } ret = 1; } - blkdev_cd_change (unitnum, cdu->imgname); + blkdev_cd_change(unitnum, cdu->imgname); return ret; } -static void close_device (int unitnum) +static void close_device(int unitnum) { struct cdunit *cdu = &cdunits[unitnum]; if (cdu->open) { - cdda_stop (cdu); + cdda_stop(cdu); cdu->open = false; if (cdimage_unpack_thread) { cdimage_unpack_thread = 0; - write_comm_pipe_u32 (&unpack_pipe, -1, 0); - write_comm_pipe_u32 (&unpack_pipe, -1, 1); + write_comm_pipe_u32(&unpack_pipe, -1, 0); + write_comm_pipe_u32(&unpack_pipe, -1, 1); while (cdimage_unpack_thread == 0) - Sleep (10); + Sleep(10); cdimage_unpack_thread = 0; - destroy_comm_pipe (&unpack_pipe); + destroy_comm_pipe(&unpack_pipe); } - unload_image (cdu); - uae_sem_destroy (&cdu->sub_sem); + unload_image(cdu); + uae_sem_destroy(&cdu->sub_sem); } - blkdev_cd_change (unitnum, cdu->imgname); + blkdev_cd_change(unitnum, cdu->imgname); } -static void close_bus (void) +static void close_bus(void) { if (!bus_open) { - write_log (_T("IMAGE close_bus() when already closed!\n")); + write_log(_T("IMAGE close_bus() when already closed!\n")); return; } for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct cdunit *cdu = &cdunits[i]; if (cdu->open) - close_device (i); + close_device(i); cdu->enabled = false; } bus_open = 0; - write_log (_T("IMAGE driver closed.\n")); + write_log(_T("IMAGE driver closed.\n")); } -static int open_bus (int flags) +static int open_bus(int flags) { if (bus_open) { - write_log (_T("IOCTL open_bus() more than once!\n")); + write_log(_T("IOCTL open_bus() more than once!\n")); return 1; } bus_open = 1; - write_log (_T("Image driver open.\n")); + write_log(_T("Image driver open.\n")); return 1; } struct device_functions devicefunc_cdimage = { _T("IMAGE"), - open_bus, close_bus, open_device, close_device, info_device, - 0, 0, 0, - command_pause, command_stop, command_play, command_volume, command_qcode, - command_toc, command_read, command_rawread, 0, - 0, ismedia, 0 -}; + open_bus, + close_bus, + open_device, + close_device, + info_device, + 0, + 0, + 0, + command_pause, + command_stop, + command_play, + command_volume, + command_qcode, + command_toc, + command_read, + command_rawread, + 0, + 0, + ismedia, + 0 +}; \ No newline at end of file diff --git a/src/bsdsocket.cpp b/src/bsdsocket.cpp index 13e4c4a7..4f046c6f 100644 --- a/src/bsdsocket.cpp +++ b/src/bsdsocket.cpp @@ -36,270 +36,270 @@ static uae_u32 SockLibBase; /* ObtainSocket()/ReleaseSocket() public socket pool */ struct sockd { - long sockpoolids[SOCKPOOLSIZE]; - SOCKET_TYPE sockpoolsocks[SOCKPOOLSIZE]; - uae_u32 sockpoolflags[SOCKPOOLSIZE]; + long sockpoolids[SOCKPOOLSIZE]; + SOCKET_TYPE sockpoolsocks[SOCKPOOLSIZE]; + uae_u32 sockpoolflags[SOCKPOOLSIZE]; }; static long curruniqid = 65536; static struct sockd *sockdata; -uae_u32 strncpyha (uae_u32 dst, const uae_char *src, int size) +uae_u32 strncpyha(uae_u32 dst, const uae_char *src, int size) { - uae_u32 res = dst; - if (!addr_valid (_T("strncpyha"), dst, size)) - return res; - while (size--) - { - put_byte (dst++, *src); - if (!*src++) - return res; - } - return res; + uae_u32 res = dst; + if (!addr_valid(_T("strncpyha"), dst, size)) + return res; + while (size--) + { + put_byte(dst++, *src); + if (!*src++) + return res; + } + return res; } -uae_u32 addstr (uae_u32 * dst, const TCHAR *src) +uae_u32 addstr(uae_u32 * dst, const TCHAR *src) { - uae_u32 res = *dst; - int len; - char *s = ua (src); - len = strlen (s) + 1; - strcpyha_safe (*dst, s); - (*dst) += len; - xfree (s); - return res; + uae_u32 res = *dst; + int len; + char *s = ua(src); + len = strlen(s) + 1; + strcpyha_safe(*dst, s); + (*dst) += len; + xfree(s); + return res; } -uae_u32 addstr_ansi (uae_u32 * dst, const uae_char *src) +uae_u32 addstr_ansi(uae_u32 * dst, const uae_char *src) { - uae_u32 res = *dst; - int len; - len = strlen (src) + 1; - strcpyha_safe (*dst, src); - (*dst) += len; - return res; + uae_u32 res = *dst; + int len; + len = strlen(src) + 1; + strcpyha_safe(*dst, src); + (*dst) += len; + return res; } -uae_u32 addmem (uae_u32 * dst, const uae_char *src, int len) +uae_u32 addmem(uae_u32 * dst, const uae_char *src, int len) { - uae_u32 res = *dst; + uae_u32 res = *dst; - if (!src) - return 0; - memcpyha_safe (*dst, (uae_u8*)src, len); - (*dst) += len; + if (!src) + return 0; + memcpyha_safe(*dst, (uae_u8*)src, len); + (*dst) += len; - return res; + return res; } /* Get current task */ -static uae_u32 gettask (TrapContext *context) +static uae_u32 gettask(TrapContext *context) { - uae_u32 currtask, a1 = m68k_areg (regs, 1); - TCHAR *tskname; + uae_u32 currtask, a1 = m68k_areg(regs, 1); + TCHAR *tskname; - m68k_areg (regs, 1) = 0; - currtask = CallLib (context, get_long (4), -0x126); /* FindTask */ + m68k_areg(regs, 1) = 0; + currtask = CallLib(context, get_long(4), -0x126); /* FindTask */ - m68k_areg (regs, 1) = a1; + m68k_areg(regs, 1) = a1; - tskname = au((char*)get_real_address (get_long (currtask + 10))); - BSDTRACE ((_T("[%s] "), tskname)); - xfree (tskname); - return currtask; + tskname = au((char*)get_real_address(get_long(currtask + 10))); + BSDTRACE((_T("[%s] "), tskname)); + xfree(tskname); + return currtask; } /* errno/herrno setting */ -void bsdsocklib_seterrno (SB, int sb_errno) +void bsdsocklib_seterrno(SB, int sb_errno) { - sb->sb_errno = sb_errno; - if (sb->sb_errno >= 1001 && sb->sb_errno <= 1005) - bsdsocklib_setherrno(sb,sb->sb_errno-1000); - if (sb->errnoptr) - { - switch (sb->errnosize) - { - case 1: - put_byte (sb->errnoptr, sb_errno); - break; - case 2: - put_word (sb->errnoptr, sb_errno); - break; - case 4: - put_long (sb->errnoptr, sb_errno); - } - } + sb->sb_errno = sb_errno; + if (sb->sb_errno >= 1001 && sb->sb_errno <= 1005) + bsdsocklib_setherrno(sb, sb->sb_errno - 1000); + if (sb->errnoptr) + { + switch (sb->errnosize) + { + case 1: + put_byte(sb->errnoptr, sb_errno); + break; + case 2: + put_word(sb->errnoptr, sb_errno); + break; + case 4: + put_long(sb->errnoptr, sb_errno); + } + } } -void bsdsocklib_setherrno (SB, int sb_herrno) +void bsdsocklib_setherrno(SB, int sb_herrno) { - sb->sb_herrno = sb_herrno; + sb->sb_herrno = sb_herrno; - if (sb->herrnoptr) - { - switch (sb->herrnosize) - { - case 1: - put_byte (sb->herrnoptr, sb_herrno); - break; - case 2: - put_word (sb->herrnoptr, sb_herrno); - break; - case 4: - put_long (sb->herrnoptr, sb_herrno); - } - } + if (sb->herrnoptr) + { + switch (sb->herrnosize) + { + case 1: + put_byte(sb->herrnoptr, sb_herrno); + break; + case 2: + put_word(sb->herrnoptr, sb_herrno); + break; + case 4: + put_long(sb->herrnoptr, sb_herrno); + } + } } -uae_u32 callfdcallback (TrapContext *context, SB, uae_u32 fd, uae_u32 action) +uae_u32 callfdcallback(TrapContext *context, SB, uae_u32 fd, uae_u32 action) { - uae_u32 v; - if (!sb->fdcallback) - return 0; - BSDTRACE((_T("FD_CALLBACK(%d,%d) "), fd, action)); - m68k_dreg (regs, 0) = fd; - m68k_dreg (regs, 1) = action; - v = CallFunc (context, sb->fdcallback); - BSDTRACE((_T(" -> %d\n"), v)); - return v; + uae_u32 v; + if (!sb->fdcallback) + return 0; + BSDTRACE((_T("FD_CALLBACK(%d,%d) "), fd, action)); + m68k_dreg(regs, 0) = fd; + m68k_dreg(regs, 1) = action; + v = CallFunc(context, sb->fdcallback); + BSDTRACE((_T(" -> %d\n"), v)); + return v; } BOOL checksd(TrapContext *context, SB, int sd) { - int iCounter; - SOCKET s; + int iCounter; + SOCKET s; - s = getsock(sb,sd); - if (s != INVALID_SOCKET) - { - for (iCounter = 1; iCounter <= sb->dtablesize; iCounter++) - { - if (iCounter != sd) - { - if (getsock(sb,iCounter) == s) - { - releasesock(context, sb, sd); - return TRUE; - } - } - } - for (iCounter = 0; iCounter < SOCKPOOLSIZE; iCounter++) - { - if (s == sockdata->sockpoolsocks[iCounter]) - return TRUE; - } - } - BSDTRACE((_T("checksd FALSE s 0x%x sd %d\n"),s,sd)); - return FALSE; + s = getsock(sb, sd); + if (s != INVALID_SOCKET) + { + for (iCounter = 1; iCounter <= sb->dtablesize; iCounter++) + { + if (iCounter != sd) + { + if (getsock(sb, iCounter) == s) + { + releasesock(context, sb, sd); + return TRUE; + } + } + } + for (iCounter = 0; iCounter < SOCKPOOLSIZE; iCounter++) + { + if (s == sockdata->sockpoolsocks[iCounter]) + return TRUE; + } + } + BSDTRACE((_T("checksd FALSE s 0x%x sd %d\n"), s, sd)); + return FALSE; } void setsd(TrapContext *context, SB, int sd, SOCKET_TYPE s) { - callfdcallback (context, sb, sd - 1, FDCB_ALLOC); - sb->dtable[sd - 1] = s; + callfdcallback(context, sb, sd - 1, FDCB_ALLOC); + sb->dtable[sd - 1] = s; } /* Socket descriptor/opaque socket handle management */ -int getsd (TrapContext *context, SB, SOCKET_TYPE s) +int getsd(TrapContext *context, SB, SOCKET_TYPE s) { - int i, fdcb; - SOCKET_TYPE *dt = sb->dtable; + int i, fdcb; + SOCKET_TYPE *dt = sb->dtable; - /* return socket descriptor if already exists */ - for (i = sb->dtablesize; i--;) - { - if (dt[i] == s) - return i + 1; - } + /* return socket descriptor if already exists */ + for (i = sb->dtablesize; i--;) + { + if (dt[i] == s) + return i + 1; + } - /* create new table entry */ - fdcb = 0; - for (i = 0; i < sb->dtablesize; i++) - { - if (dt[i] == -1) - { - if (callfdcallback (context, sb, i, FDCB_CHECK)) - { - /* fd was allocated by link lib */ - dt[i] = -2; - continue; - } - dt[i] = s; - sb->ftable[i] = SF_BLOCKING; - return i + 1; - } - else if (dt[i] == -2) - { - fdcb = 1; - } - } - /* recheck callback allocated FDs */ - if (fdcb) - { - for (i = 0; i < sb->dtablesize; i++) - { - if (dt[i] == -2) - { - if (!callfdcallback (context, sb, i, FDCB_CHECK)) - { - dt[i] = s; - sb->ftable[i] = SF_BLOCKING; - return i + 1; - } - } - } - } + /* create new table entry */ + fdcb = 0; + for (i = 0; i < sb->dtablesize; i++) + { + if (dt[i] == -1) + { + if (callfdcallback(context, sb, i, FDCB_CHECK)) + { + /* fd was allocated by link lib */ + dt[i] = -2; + continue; + } + dt[i] = s; + sb->ftable[i] = SF_BLOCKING; + return i + 1; + } + else if (dt[i] == -2) + { + fdcb = 1; + } + } + /* recheck callback allocated FDs */ + if (fdcb) + { + for (i = 0; i < sb->dtablesize; i++) + { + if (dt[i] == -2) + { + if (!callfdcallback(context, sb, i, FDCB_CHECK)) + { + dt[i] = s; + sb->ftable[i] = SF_BLOCKING; + return i + 1; + } + } + } + } - /* descriptor table full. */ - bsdsocklib_seterrno (sb, 24); /* EMFILE */ + /* descriptor table full. */ + bsdsocklib_seterrno(sb, 24); /* EMFILE */ - return -1; + return -1; } -SOCKET_TYPE getsock (SB, int sd) +SOCKET_TYPE getsock(SB, int sd) { - if ((unsigned int) (sd - 1) >= (unsigned int) sb->dtablesize) - { - BSDTRACE ((_T("Invalid Socket Descriptor (%d)\n"), sd)); - bsdsocklib_seterrno (sb, 38); /* ENOTSOCK */ - return -1; - } - if (sb->dtable[sd - 1] == INVALID_SOCKET) - { - struct socketbase *sb1, *nsb; - uaecptr ot; - if (!addr_valid (_T("getsock1"), sb->ownertask + 10, 4)) - return -1; - ot = get_long (sb->ownertask + 10); - if (!addr_valid (_T("getsock2"), ot, 1)) - return -1; - // Fix for Newsrog (All Tasks of Newsrog using the same dtable) - for (sb1 = socketbases; sb1; sb1 = nsb) - { - uaecptr ot1; - if (!addr_valid (_T("getsock3"), sb1->ownertask + 10, 4)) - break; - ot1 = get_long (sb1->ownertask + 10); - if (!addr_valid (_T("getsock4"), ot1, 1)) - break; - if (strcmp((char*)get_real_address (ot1), (char*)get_real_address (ot)) == 0) - { - // Task with same name already exists -> use same dtable - if (sb1->dtable[sd - 1] != INVALID_SOCKET) - return sb1->dtable[sd - 1]; - } - nsb = sb1->next; - } - } - return sb->dtable[sd - 1]; + if ((unsigned int)(sd - 1) >= (unsigned int) sb->dtablesize) + { + BSDTRACE((_T("Invalid Socket Descriptor (%d)\n"), sd)); + bsdsocklib_seterrno(sb, 38); /* ENOTSOCK */ + return -1; + } + if (sb->dtable[sd - 1] == INVALID_SOCKET) + { + struct socketbase *sb1, *nsb; + uaecptr ot; + if (!addr_valid(_T("getsock1"), sb->ownertask + 10, 4)) + return -1; + ot = get_long(sb->ownertask + 10); + if (!addr_valid(_T("getsock2"), ot, 1)) + return -1; + // Fix for Newsrog (All Tasks of Newsrog using the same dtable) + for (sb1 = socketbases; sb1; sb1 = nsb) + { + uaecptr ot1; + if (!addr_valid(_T("getsock3"), sb1->ownertask + 10, 4)) + break; + ot1 = get_long(sb1->ownertask + 10); + if (!addr_valid(_T("getsock4"), ot1, 1)) + break; + if (strcmp((char*)get_real_address(ot1), (char*)get_real_address(ot)) == 0) + { + // Task with same name already exists -> use same dtable + if (sb1->dtable[sd - 1] != INVALID_SOCKET) + return sb1->dtable[sd - 1]; + } + nsb = sb1->next; + } + } + return sb->dtable[sd - 1]; } -void releasesock (TrapContext *context, SB, int sd) +void releasesock(TrapContext *context, SB, int sd) { - if ((unsigned int) (sd - 1) < (unsigned int) sb->dtablesize) - { - sb->dtable[sd - 1] = -1; - callfdcallback (context, sb, sd - 1, FDCB_FREE); - } + if ((unsigned int)(sd - 1) < (unsigned int) sb->dtablesize) + { + sb->dtable[sd - 1] = -1; + callfdcallback(context, sb, sd - 1, FDCB_FREE); + } } /* Signal queue */ @@ -309,1019 +309,1123 @@ struct socketbase *sbsigqueue; volatile int bsd_int_requested; #endif -void addtosigqueue (SB, int events) +void addtosigqueue(SB, int events) { - locksigqueue (); + locksigqueue(); - if (events) - sb->sigstosend |= sb->eventsigs; - else - sb->sigstosend |= ((uae_u32) 1) << sb->signal; + if (events) + sb->sigstosend |= sb->eventsigs; + else + sb->sigstosend |= ((uae_u32) 1) << sb->signal; - if (!sb->dosignal) - { - sb->nextsig = sbsigqueue; - sbsigqueue = sb; - } - sb->dosignal = 1; + if (!sb->dosignal) + { + sb->nextsig = sbsigqueue; + sbsigqueue = sb; + } + sb->dosignal = 1; - bsd_int_requested |= 1; + bsd_int_requested |= 1; - unlocksigqueue (); + unlocksigqueue(); } void bsdsock_fake_int_handler(void) { - locksigqueue (); + locksigqueue(); - bsd_int_requested = 0; + bsd_int_requested = 0; - if (sbsigqueue != NULL) - { - SB; + if (sbsigqueue != NULL) + { + SB; - for (sb = sbsigqueue; sb; sb = sb->nextsig) - { - if (sb->dosignal == 1) - { - uae_Signal (sb->ownertask, sb->sigstosend); - sb->sigstosend = 0; - } - sb->dosignal = 0; - } + for (sb = sbsigqueue; sb; sb = sb->nextsig) + { + if (sb->dosignal == 1) + { + uae_Signal(sb->ownertask, sb->sigstosend); + sb->sigstosend = 0; + } + sb->dosignal = 0; + } - sbsigqueue = NULL; - } + sbsigqueue = NULL; + } - unlocksigqueue (); + unlocksigqueue(); } -void waitsig (TrapContext *context, SB) +void waitsig(TrapContext *context, SB) { - long sigs; - m68k_dreg (regs, 0) = (((uae_u32) 1) << sb->signal) | sb->eintrsigs; - if ((sigs = CallLib (context, sb->sysbase, -0x13e)) & sb->eintrsigs) /* Wait */ - { - sockabort (sb); - bsdsocklib_seterrno (sb, 4); /* EINTR */ + long sigs; + m68k_dreg(regs, 0) = (((uae_u32) 1) << sb->signal) | sb->eintrsigs; + if ((sigs = CallLib(context, sb->sysbase, -0x13e)) & sb->eintrsigs) /* Wait */ + { + sockabort(sb); + bsdsocklib_seterrno(sb, 4); /* EINTR */ - // Set signal - m68k_dreg (regs, 0) = sigs; - m68k_dreg (regs, 1) = sb->eintrsigs; - sigs = CallLib (context, sb->sysbase, -0x132); /* SetSignal() */ + // Set signal + m68k_dreg(regs, 0) = sigs; + m68k_dreg(regs, 1) = sb->eintrsigs; + sigs = CallLib(context, sb->sysbase, -0x132); /* SetSignal() */ - sb->eintr = 1; - } - else - sb->eintr = 0; + sb->eintr = 1; + } + else + sb->eintr = 0; } -void cancelsig (TrapContext *context, SB) +void cancelsig(TrapContext *context, SB) { - locksigqueue (); - if (sb->dosignal) - sb->dosignal = 2; - unlocksigqueue (); + locksigqueue(); + if (sb->dosignal) + sb->dosignal = 2; + unlocksigqueue(); - m68k_dreg (regs, 0) = 0; - m68k_dreg (regs, 1) = ((uae_u32) 1) << sb->signal; - CallLib (context, sb->sysbase, -0x132); /* SetSignal() */ + m68k_dreg(regs, 0) = 0; + m68k_dreg(regs, 1) = ((uae_u32) 1) << sb->signal; + CallLib(context, sb->sysbase, -0x132); /* SetSignal() */ } /* Allocate and initialize per-task state structure */ -static struct socketbase *alloc_socketbase (TrapContext *context) +static struct socketbase *alloc_socketbase(TrapContext *context) { - SB; - int i; + SB; + int i; - if ((sb = xcalloc (struct socketbase, 1)) != NULL) - { - sb->ownertask = gettask (context); - sb->sysbase = get_long (4); + if ((sb = xcalloc(struct socketbase, 1)) != NULL) + { + sb->ownertask = gettask(context); + sb->sysbase = get_long(4); - m68k_dreg (regs, 0) = -1; - sb->signal = CallLib (context, sb->sysbase, -0x14A); /* AllocSignal */ + m68k_dreg(regs, 0) = -1; + sb->signal = CallLib(context, sb->sysbase, -0x14A); /* AllocSignal */ - if (sb->signal == -1) - { - write_log (_T("bsdsocket: ERROR: Couldn't allocate signal for task 0x%lx.\n"), sb->ownertask); - free (sb); - return NULL; - } - m68k_dreg (regs, 0) = SCRATCHBUFSIZE; - m68k_dreg (regs, 1) = 0; + if (sb->signal == -1) + { + write_log(_T("bsdsocket: ERROR: Couldn't allocate signal for task 0x%lx.\n"), sb->ownertask); + free(sb); + return NULL; + } + m68k_dreg(regs, 0) = SCRATCHBUFSIZE; + m68k_dreg(regs, 1) = 0; - sb->dtablesize = DEFAULT_DTABLE_SIZE; - /* @@@ check malloc() result */ - sb->dtable = (SOCKET*)malloc (sb->dtablesize * sizeof (*sb->dtable)); - sb->ftable = (int*)malloc (sb->dtablesize * sizeof (*sb->ftable)); + sb->dtablesize = DEFAULT_DTABLE_SIZE; + /* @@@ check malloc() result */ + sb->dtable = (SOCKET*)malloc(sb->dtablesize * sizeof(*sb->dtable)); + sb->ftable = (int*)malloc(sb->dtablesize * sizeof(*sb->ftable)); - for (i = sb->dtablesize; i--;) - sb->dtable[i] = -1; + for (i = sb->dtablesize; i--;) + sb->dtable[i] = -1; - sb->eintrsigs = 0x1000; /* SIGBREAKF_CTRL_C */ + sb->eintrsigs = 0x1000; /* SIGBREAKF_CTRL_C */ - sb->logfacility = 1 << 3; /* LOG_USER */ - sb->logmask = 0xff; + sb->logfacility = 1 << 3; /* LOG_USER */ + sb->logmask = 0xff; - if (!host_sbinit (context, sb)) - { - /* @@@ free everything */ - return NULL; - } + if (!host_sbinit(context, sb)) + { + /* @@@ free everything */ + return NULL; + } - locksigqueue(); + locksigqueue(); - if (socketbases) - sb->next = socketbases; - socketbases = sb; + if (socketbases) + sb->next = socketbases; + socketbases = sb; - unlocksigqueue(); + unlocksigqueue(); - return sb; - } - return NULL; + return sb; + } + return NULL; } -STATIC_INLINE struct socketbase *get_socketbase (TrapContext *context) +STATIC_INLINE struct socketbase *get_socketbase(TrapContext *context) { - return (struct socketbase*)get_pointer (m68k_areg (regs, 6) + offsetof (struct UAEBSDBase, sb)); + return (struct socketbase*)get_pointer(m68k_areg(regs, 6) + offsetof(struct UAEBSDBase, sb)); } -static void free_socketbase (TrapContext *context) +static void free_socketbase(TrapContext *context) { - struct socketbase *sb, *nsb; + struct socketbase *sb, *nsb; - if ((sb = get_socketbase (context)) != NULL) - { - m68k_dreg (regs, 0) = sb->signal; - CallLib (context, sb->sysbase, -0x150); /* FreeSignal */ + if ((sb = get_socketbase(context)) != NULL) + { + m68k_dreg(regs, 0) = sb->signal; + CallLib(context, sb->sysbase, -0x150); /* FreeSignal */ - if (sb->hostent) - { - m68k_areg (regs, 1) = sb->hostent; - m68k_dreg (regs, 0) = sb->hostentsize; - CallLib (context, sb->sysbase, -0xD2); /* FreeMem */ + if (sb->hostent) + { + m68k_areg(regs, 1) = sb->hostent; + m68k_dreg(regs, 0) = sb->hostentsize; + CallLib(context, sb->sysbase, -0xD2); /* FreeMem */ - } - if (sb->protoent) - { - m68k_areg (regs, 1) = sb->protoent; - m68k_dreg (regs, 0) = sb->protoentsize; - CallLib (context, sb->sysbase, -0xD2); /* FreeMem */ + } + if (sb->protoent) + { + m68k_areg(regs, 1) = sb->protoent; + m68k_dreg(regs, 0) = sb->protoentsize; + CallLib(context, sb->sysbase, -0xD2); /* FreeMem */ - } - if (sb->servent) - { - m68k_areg (regs, 1) = sb->servent; - m68k_dreg (regs, 0) = sb->serventsize; - CallLib (context, sb->sysbase, -0xD2); /* FreeMem */ + } + if (sb->servent) + { + m68k_areg(regs, 1) = sb->servent; + m68k_dreg(regs, 0) = sb->serventsize; + CallLib(context, sb->sysbase, -0xD2); /* FreeMem */ - } - host_sbcleanup (sb); + } + host_sbcleanup(sb); - free (sb->dtable); - free (sb->ftable); + free(sb->dtable); + free(sb->ftable); - locksigqueue (); + locksigqueue(); - if (sb == socketbases) - socketbases = sb->next; - else - { - for (nsb = socketbases; nsb; nsb = nsb->next) - { - if (sb == nsb->next) - { - nsb->next = sb->next; - break; - } - } - } + if (sb == socketbases) + socketbases = sb->next; + else + { + for (nsb = socketbases; nsb; nsb = nsb->next) + { + if (sb == nsb->next) + { + nsb->next = sb->next; + break; + } + } + } #if 1 - if (sb == sbsigqueue) - sbsigqueue = sb->next; - else - { - for (nsb = sbsigqueue; nsb; nsb = nsb->next) - { - if (sb == nsb->next) - { - nsb->next = sb->next; - break; - } - } - } + if (sb == sbsigqueue) + sbsigqueue = sb->next; + else + { + for (nsb = sbsigqueue; nsb; nsb = nsb->next) + { + if (sb == nsb->next) + { + nsb->next = sb->next; + break; + } + } + } #endif - unlocksigqueue (); + unlocksigqueue(); - free (sb); - } + free(sb); + } } -static uae_u32 REGPARAM2 bsdsocklib_Expunge (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Expunge(TrapContext *context) { - BSDTRACE ((_T("Expunge() -> [ignored]\n"))); - return 0; + BSDTRACE((_T("Expunge() -> [ignored]\n"))); + return 0; } static uae_u32 functable, datatable, inittable; -static uae_u32 REGPARAM2 bsdsocklib_Open (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Open(TrapContext *context) { - uae_u32 result = 0; - int opencount; - SB; + uae_u32 result = 0; + int opencount; + SB; - BSDTRACE ((_T("OpenLibrary() -> "))); + BSDTRACE((_T("OpenLibrary() -> "))); - if ((sb = alloc_socketbase (context)) != NULL) - { - put_word (SockLibBase + 32, opencount = get_word (SockLibBase + 32) + 1); + if ((sb = alloc_socketbase(context)) != NULL) + { + put_word(SockLibBase + 32, opencount = get_word(SockLibBase + 32) + 1); - m68k_areg (regs, 0) = functable; - m68k_areg (regs, 1) = datatable; - m68k_areg (regs, 2) = 0; - m68k_dreg (regs, 0) = sizeof (struct UAEBSDBase); - m68k_dreg (regs, 1) = 0; - result = CallLib (context, sb->sysbase, -0x54); /* MakeLibrary */ + m68k_areg(regs, 0) = functable; + m68k_areg(regs, 1) = datatable; + m68k_areg(regs, 2) = 0; + m68k_dreg(regs, 0) = sizeof(struct UAEBSDBase); + m68k_dreg(regs, 1) = 0; + result = CallLib(context, sb->sysbase, -0x54); /* MakeLibrary */ - put_pointer (result + offsetof (struct UAEBSDBase, sb), sb); + put_pointer(result + offsetof(struct UAEBSDBase, sb), sb); - BSDTRACE ((_T("%0x [%d]\n"), result, opencount)); - } - else - BSDTRACE ((_T("failed (out of memory)\n"))); + BSDTRACE((_T("%0x [%d]\n"), result, opencount)); + } + else + BSDTRACE((_T("failed (out of memory)\n"))); - return result; + return result; } -static uae_u32 REGPARAM2 bsdsocklib_Close (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Close(TrapContext *context) { - int opencount; + int opencount; - uae_u32 base = m68k_areg (regs, 6); - uae_u32 negsize = get_word (base + 16); + uae_u32 base = m68k_areg(regs, 6); + uae_u32 negsize = get_word(base + 16); - free_socketbase (context); + free_socketbase(context); - put_word (SockLibBase + 32, opencount = get_word (SockLibBase + 32) - 1); + put_word(SockLibBase + 32, opencount = get_word(SockLibBase + 32) - 1); - m68k_areg (regs, 1) = base - negsize; - m68k_dreg (regs, 0) = negsize + get_word (base + 18); - CallLib (context, get_long (4), -0xD2); /* FreeMem */ + m68k_areg(regs, 1) = base - negsize; + m68k_dreg(regs, 0) = negsize + get_word(base + 18); + CallLib(context, get_long(4), -0xD2); /* FreeMem */ - BSDTRACE ((_T("CloseLibrary() -> [%d]\n"), opencount)); + BSDTRACE((_T("CloseLibrary() -> [%d]\n"), opencount)); - return 0; + return 0; } /* socket(domain, type, protocol)(d0/d1/d2) */ -static uae_u32 REGPARAM2 bsdsocklib_socket (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_socket(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_socket (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), - m68k_dreg (regs, 2)); + struct socketbase *sb = get_socketbase(context); + return host_socket(context, + sb, + m68k_dreg(regs, 0), + m68k_dreg(regs, 1), + m68k_dreg(regs, 2)); } /* bind(s, name, namelen)(d0/a0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_bind (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_bind(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_bind (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), - m68k_dreg (regs, 1)); + struct socketbase *sb = get_socketbase(context); + return host_bind(context, + sb, + m68k_dreg(regs, 0), + m68k_areg(regs, 0), + m68k_dreg(regs, 1)); } /* listen(s, backlog)(d0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_listen (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_listen(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_listen (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); + struct socketbase *sb = get_socketbase(context); + return host_listen(context, sb, m68k_dreg(regs, 0), m68k_dreg(regs, 1)); } /* accept(s, addr, addrlen)(d0/a0/a1) */ -static uae_u32 REGPARAM2 bsdsocklib_accept (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_accept(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_accept (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); - return sb->resultval; + struct socketbase *sb = get_socketbase(context); + host_accept(context, sb, m68k_dreg(regs, 0), m68k_areg(regs, 0), m68k_areg(regs, 1)); + return sb->resultval; } /* connect(s, name, namelen)(d0/a0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_connect (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_connect(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_connect (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1)); - return sb->sb_errno ? -1 : 0; + struct socketbase *sb = get_socketbase(context); + host_connect(context, sb, m68k_dreg(regs, 0), m68k_areg(regs, 0), m68k_dreg(regs, 1)); + return sb->sb_errno ? -1 : 0; } /* sendto(s, msg, len, flags, to, tolen)(d0/a0/d1/d2/a1/d3) */ -static uae_u32 REGPARAM2 bsdsocklib_sendto (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_sendto(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_sendto (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), - m68k_dreg (regs, 2), m68k_areg (regs, 1), m68k_dreg (regs, 3)); - return sb->resultval; + struct socketbase *sb = get_socketbase(context); + host_sendto(context, + sb, + m68k_dreg(regs, 0), + m68k_areg(regs, 0), + m68k_dreg(regs, 1), + m68k_dreg(regs, 2), + m68k_areg(regs, 1), + m68k_dreg(regs, 3)); + return sb->resultval; } /* send(s, msg, len, flags)(d0/a0/d1/d2) */ -static uae_u32 REGPARAM2 bsdsocklib_send (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_send(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_sendto (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), - m68k_dreg (regs, 2), 0, 0); - return sb->resultval; + struct socketbase *sb = get_socketbase(context); + host_sendto(context, + sb, + m68k_dreg(regs, 0), + m68k_areg(regs, 0), + m68k_dreg(regs, 1), + m68k_dreg(regs, 2), + 0, + 0); + return sb->resultval; } /* recvfrom(s, buf, len, flags, from, fromlen)(d0/a0/d1/d2/a1/a2) */ -static uae_u32 REGPARAM2 bsdsocklib_recvfrom (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_recvfrom(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_recvfrom (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), - m68k_dreg (regs, 2), m68k_areg (regs, 1), m68k_areg (regs, 2)); - return sb->resultval; + struct socketbase *sb = get_socketbase(context); + host_recvfrom(context, + sb, + m68k_dreg(regs, 0), + m68k_areg(regs, 0), + m68k_dreg(regs, 1), + m68k_dreg(regs, 2), + m68k_areg(regs, 1), + m68k_areg(regs, 2)); + return sb->resultval; } /* recv(s, buf, len, flags)(d0/a0/d1/d2) */ -static uae_u32 REGPARAM2 bsdsocklib_recv (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_recv(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_recvfrom (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), - m68k_dreg (regs, 2), 0, 0); - return sb->resultval; + struct socketbase *sb = get_socketbase(context); + host_recvfrom(context, + sb, + m68k_dreg(regs, 0), + m68k_areg(regs, 0), + m68k_dreg(regs, 1), + m68k_dreg(regs, 2), + 0, + 0); + return sb->resultval; } /* shutdown(s, how)(d0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_shutdown (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_shutdown(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_shutdown (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); + struct socketbase *sb = get_socketbase(context); + return host_shutdown(sb, m68k_dreg(regs, 0), m68k_dreg(regs, 1)); } /* setsockopt(s, level, optname, optval, optlen)(d0/d1/d2/a0/d3) */ -static uae_u32 REGPARAM2 bsdsocklib_setsockopt (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_setsockopt(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_setsockopt (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), - m68k_areg (regs, 0), m68k_dreg (regs, 3)); - return sb->resultval; + struct socketbase *sb = get_socketbase(context); + host_setsockopt(sb, + m68k_dreg(regs, 0), + m68k_dreg(regs, 1), + m68k_dreg(regs, 2), + m68k_areg(regs, 0), + m68k_dreg(regs, 3)); + return sb->resultval; } /* getsockopt(s, level, optname, optval, optlen)(d0/d1/d2/a0/a1) */ -static uae_u32 REGPARAM2 bsdsocklib_getsockopt (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getsockopt(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_getsockopt (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), - m68k_areg (regs, 0), m68k_areg (regs, 1)); + struct socketbase *sb = get_socketbase(context); + return host_getsockopt(sb, + m68k_dreg(regs, 0), + m68k_dreg(regs, 1), + m68k_dreg(regs, 2), + m68k_areg(regs, 0), + m68k_areg(regs, 1)); } /* getsockname(s, hostname, namelen)(d0/a0/a1) */ -static uae_u32 REGPARAM2 bsdsocklib_getsockname (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getsockname(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_getsockname (sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); + struct socketbase *sb = get_socketbase(context); + return host_getsockname(sb, m68k_dreg(regs, 0), m68k_areg(regs, 0), m68k_areg(regs, 1)); } /* getpeername(s, hostname, namelen)(d0/a0/a1) */ -static uae_u32 REGPARAM2 bsdsocklib_getpeername (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getpeername(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_getpeername (sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); + struct socketbase *sb = get_socketbase(context); + return host_getpeername(sb, m68k_dreg(regs, 0), m68k_areg(regs, 0), m68k_areg(regs, 1)); } /* *------ generic system calls related to sockets */ /* IoctlSocket(d, request, argp)(d0/d1/a0) */ -static uae_u32 REGPARAM2 bsdsocklib_IoctlSocket (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_IoctlSocket(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_IoctlSocket (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_areg (regs, 0)); + struct socketbase *sb = get_socketbase(context); + return host_IoctlSocket(context, sb, m68k_dreg(regs, 0), m68k_dreg(regs, 1), m68k_areg(regs, 0)); } /* *------ AmiTCP/IP specific stuff */ /* CloseSocket(d)(d0) */ -static uae_u32 REGPARAM2 bsdsocklib_CloseSocket (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_CloseSocket(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_CloseSocket (context, sb, m68k_dreg (regs, 0)); + struct socketbase *sb = get_socketbase(context); + return host_CloseSocket(context, sb, m68k_dreg(regs, 0)); } /* WaitSelect(nfds, readfds, writefds, execptfds, timeout, maskp)(d0/a0/a1/a2/a3/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_WaitSelect (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_WaitSelect(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_WaitSelect (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1), - m68k_areg (regs, 2), m68k_areg (regs, 3), m68k_dreg (regs, 1)); - return sb->resultval; + struct socketbase *sb = get_socketbase(context); + host_WaitSelect(context, + sb, + m68k_dreg(regs, 0), + m68k_areg(regs, 0), + m68k_areg(regs, 1), + m68k_areg(regs, 2), + m68k_areg(regs, 3), + m68k_dreg(regs, 1)); + return sb->resultval; } /* SetSocketSignals(SIGINTR, SIGIO, SIGURG)(d0/d1/d2) */ -static uae_u32 REGPARAM2 bsdsocklib_SetSocketSignals (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_SetSocketSignals(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); + struct socketbase *sb = get_socketbase(context); - BSDTRACE ((_T("SetSocketSignals(0x%08lx,0x%08lx,0x%08lx) -> "), m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2))); - sb->eintrsigs = m68k_dreg (regs, 0); - sb->eventsigs = m68k_dreg (regs, 1); + BSDTRACE((_T("SetSocketSignals(0x%08lx,0x%08lx,0x%08lx) -> "), m68k_dreg(regs, 0), m68k_dreg(regs, 1), m68k_dreg(regs, 2))); + sb->eintrsigs = m68k_dreg(regs, 0); + sb->eventsigs = m68k_dreg(regs, 1); - return 0; + return 0; } /* SetDTableSize(size)(d0) */ -static uae_u32 bsdsocklib_SetDTableSize (SB, int newSize) +static uae_u32 bsdsocklib_SetDTableSize(SB, int newSize) { - int *newdtable; - int *newftable; - unsigned int *newmtable; - int i; + int *newdtable; + int *newftable; + unsigned int *newmtable; + int i; - if (newSize < sb->dtablesize) - { - /* I don't support lowering the size */ - return 0; - } + if (newSize < sb->dtablesize) + { + /* I don't support lowering the size */ + return 0; + } - newdtable = xcalloc (int, newSize); - newftable = xcalloc (int, newSize); - newmtable = xcalloc (unsigned int, newSize); + newdtable = xcalloc(int, newSize); + newftable = xcalloc(int, newSize); + newmtable = xcalloc(unsigned int, newSize); - if (newdtable == NULL || newftable == NULL || newmtable == NULL) - { - sb->resultval = -1; - bsdsocklib_seterrno(sb, ENOMEM); - free (newdtable); - free (newftable); - free (newmtable); - return -1; - } + if (newdtable == NULL || newftable == NULL || newmtable == NULL) + { + sb->resultval = -1; + bsdsocklib_seterrno(sb, ENOMEM); + free(newdtable); + free(newftable); + free(newmtable); + return -1; + } - memcpy (newdtable, sb->dtable, sb->dtablesize * sizeof(*sb->dtable)); - memcpy (newftable, sb->ftable, sb->dtablesize * sizeof(*sb->ftable)); - memcpy (newmtable, sb->mtable, sb->dtablesize * sizeof(*sb->mtable)); - for (i = sb->dtablesize + 1; i < newSize; i++) - newdtable[i] = -1; + memcpy(newdtable, sb->dtable, sb->dtablesize * sizeof(*sb->dtable)); + memcpy(newftable, sb->ftable, sb->dtablesize * sizeof(*sb->ftable)); + memcpy(newmtable, sb->mtable, sb->dtablesize * sizeof(*sb->mtable)); + for (i = sb->dtablesize + 1; i < newSize; i++) + newdtable[i] = -1; - sb->dtablesize = newSize; - free(sb->dtable); - free(sb->ftable); - free(sb->mtable); - sb->dtable = (SOCKET*)newdtable; - sb->ftable = newftable; - sb->mtable = newmtable; - sb->resultval = 0; - return 0; + sb->dtablesize = newSize; + free(sb->dtable); + free(sb->ftable); + free(sb->mtable); + sb->dtable = (SOCKET*)newdtable; + sb->ftable = newftable; + sb->mtable = newmtable; + sb->resultval = 0; + return 0; } -static int sockpoolindex (long id) +static int sockpoolindex(long id) { - int i; + int i; - for (i = 0; i < SOCKPOOLSIZE; i++) - if (sockdata->sockpoolids[i] == id) - return i; - return -1; + for (i = 0; i < SOCKPOOLSIZE; i++) + if (sockdata->sockpoolids[i] == id) + return i; + return -1; } /* ObtainSocket(id, domain, type, protocol)(d0/d1/d2/d3) */ -static uae_u32 REGPARAM2 bsdsocklib_ObtainSocket (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_ObtainSocket(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - int sd; - long id; - SOCKET_TYPE s; - int i; + struct socketbase *sb = get_socketbase(context); + int sd; + long id; + SOCKET_TYPE s; + int i; - id = m68k_dreg (regs, 0); + id = m68k_dreg(regs, 0); - BSDTRACE ((_T("ObtainSocket(%d,%d,%d,%d) -> "), id, m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_dreg (regs, 3))); + BSDTRACE((_T("ObtainSocket(%d,%d,%d,%d) -> "), id, m68k_dreg(regs, 1), m68k_dreg(regs, 2), m68k_dreg(regs, 3))); - i = sockpoolindex (id); + i = sockpoolindex(id); - if (i == -1) - { - BSDTRACE ((_T("[invalid key]\n"))); - return -1; - } - s = sockdata->sockpoolsocks[i]; + if (i == -1) + { + BSDTRACE((_T("[invalid key]\n"))); + return -1; + } + s = sockdata->sockpoolsocks[i]; - sd = getsd (context, sb, s); + sd = getsd(context, sb, s); - BSDTRACE ((_T(" -> Socket=%d\n"), sd)); + BSDTRACE((_T(" -> Socket=%d\n"), sd)); - if (sd != -1) - { - sb->ftable[sd - 1] = sockdata->sockpoolflags[i]; - callfdcallback (context, sb, sd - 1, FDCB_ALLOC); - sockdata->sockpoolids[i] = UNIQUE_ID; - return sd - 1; - } + if (sd != -1) + { + sb->ftable[sd - 1] = sockdata->sockpoolflags[i]; + callfdcallback(context, sb, sd - 1, FDCB_ALLOC); + sockdata->sockpoolids[i] = UNIQUE_ID; + return sd - 1; + } - return -1; + return -1; } /* ReleaseSocket(fd, id)(d0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_ReleaseSocket (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_ReleaseSocket(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - int sd; - long id; - SOCKET_TYPE s; - int i; - uae_u32 flags; + struct socketbase *sb = get_socketbase(context); + int sd; + long id; + SOCKET_TYPE s; + int i; + uae_u32 flags; - sd = m68k_dreg (regs, 0); - id = m68k_dreg (regs, 1); + sd = m68k_dreg(regs, 0); + id = m68k_dreg(regs, 1); - sd++; - BSDTRACE ((_T("ReleaseSocket(%d,%d) -> "), sd, id)); + sd++; + BSDTRACE((_T("ReleaseSocket(%d,%d) -> "), sd, id)); - s = getsock (sb, sd); + s = getsock(sb, sd); - if (s != -1) - { - flags = sb->ftable[sd - 1]; + if (s != -1) + { + flags = sb->ftable[sd - 1]; - if (flags & REP_ALL) - { - write_log (_T("bsdsocket: ERROR: ReleaseSocket() is not supported for sockets with async event notification enabled!\n")); - return -1; - } - releasesock (context, sb, sd); + if (flags & REP_ALL) + { + write_log(_T("bsdsocket: ERROR: ReleaseSocket() is not supported for sockets with async event notification enabled!\n")); + return -1; + } + releasesock(context, sb, sd); - if (id == UNIQUE_ID) - { - for (;;) - { - if (sockpoolindex (curruniqid) == -1) - break; - curruniqid += 129; - if ((unsigned long) (curruniqid + 1) < 65536) - curruniqid += 65537; - } + if (id == UNIQUE_ID) + { + for (;;) + { + if (sockpoolindex(curruniqid) == -1) + break; + curruniqid += 129; + if ((unsigned long)(curruniqid + 1) < 65536) + curruniqid += 65537; + } - id = curruniqid; - } - else if (id < 0 && id > 65535) - { - if (sockpoolindex (id) != -1) - { - BSDTRACE ((_T("[unique ID already exists]\n"))); - return -1; - } - } - i = sockpoolindex (-1); + id = curruniqid; + } + else if (id < 0 && id > 65535) + { + if (sockpoolindex(id) != -1) + { + BSDTRACE((_T("[unique ID already exists]\n"))); + return -1; + } + } + i = sockpoolindex(-1); - if (i == -1) - { - BSDTRACE ((_T("-1\n"))); - write_log (_T("bsdsocket: ERROR: Global socket pool overflow\n")); - return -1; - } - sockdata->sockpoolids[i] = id; - sockdata->sockpoolsocks[i] = s; - sockdata->sockpoolflags[i] = flags; + if (i == -1) + { + BSDTRACE((_T("-1\n"))); + write_log(_T("bsdsocket: ERROR: Global socket pool overflow\n")); + return -1; + } + sockdata->sockpoolids[i] = id; + sockdata->sockpoolsocks[i] = s; + sockdata->sockpoolflags[i] = flags; - BSDTRACE ((_T("id %d s 0x%x\n"), id,s)); - } - else - { - BSDTRACE ((_T("[invalid socket descriptor]\n"))); - return -1; - } + BSDTRACE((_T("id %d s 0x%x\n"), id, s)); + } + else + { + BSDTRACE((_T("[invalid socket descriptor]\n"))); + return -1; + } - return id; + return id; } /* ReleaseCopyOfSocket(fd, id)(d0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_ReleaseCopyOfSocket (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_ReleaseCopyOfSocket(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - int sd; - long id; - SOCKET_TYPE s; - int i; - uae_u32 flags; + struct socketbase *sb = get_socketbase(context); + int sd; + long id; + SOCKET_TYPE s; + int i; + uae_u32 flags; - sd = m68k_dreg (regs, 0); - id = m68k_dreg (regs, 1); + sd = m68k_dreg(regs, 0); + id = m68k_dreg(regs, 1); - sd++; - BSDTRACE ((_T("ReleaseSocket(%d,%d) -> "), sd, id)); + sd++; + BSDTRACE((_T("ReleaseSocket(%d,%d) -> "), sd, id)); - s = getsock (sb, sd); + s = getsock(sb, sd); - if (s != -1) - { - flags = sb->ftable[sd - 1]; + if (s != -1) + { + flags = sb->ftable[sd - 1]; - if (flags & REP_ALL) - { - write_log (_T("bsdsocket: ERROR: ReleaseCopyOfSocket() is not supported for sockets with async event notification enabled!\n")); - return -1; - } - if (id == UNIQUE_ID) - { - for (;;) - { - if (sockpoolindex (curruniqid) == -1) - break; - curruniqid += 129; - if ((unsigned long) (curruniqid + 1) < 65536) - curruniqid += 65537; - } - id = curruniqid; - } - else if (id < 0 && id > 65535) - { - if (sockpoolindex (id) != -1) - { - BSDTRACE ((_T("[unique ID already exists]\n"))); - return -1; - } - } - i = sockpoolindex (-1); + if (flags & REP_ALL) + { + write_log(_T("bsdsocket: ERROR: ReleaseCopyOfSocket() is not supported for sockets with async event notification enabled!\n")); + return -1; + } + if (id == UNIQUE_ID) + { + for (;;) + { + if (sockpoolindex(curruniqid) == -1) + break; + curruniqid += 129; + if ((unsigned long)(curruniqid + 1) < 65536) + curruniqid += 65537; + } + id = curruniqid; + } + else if (id < 0 && id > 65535) + { + if (sockpoolindex(id) != -1) + { + BSDTRACE((_T("[unique ID already exists]\n"))); + return -1; + } + } + i = sockpoolindex(-1); - if (i == -1) - { - BSDTRACE ((_T("-1\n"))); - write_log (_T("bsdsocket: ERROR: Global socket pool overflow\n")); - return -1; - } - sockdata->sockpoolids[i] = id; - sockdata->sockpoolsocks[i] = s; - sockdata->sockpoolflags[i] = flags; + if (i == -1) + { + BSDTRACE((_T("-1\n"))); + write_log(_T("bsdsocket: ERROR: Global socket pool overflow\n")); + return -1; + } + sockdata->sockpoolids[i] = id; + sockdata->sockpoolsocks[i] = s; + sockdata->sockpoolflags[i] = flags; - BSDTRACE ((_T("id %d s 0x%x\n"), id,s)); + BSDTRACE((_T("id %d s 0x%x\n"), id, s)); - } - else - { + } + else + { - BSDTRACE ((_T("[invalid socket descriptor]\n"))); - return -1; - } + BSDTRACE((_T("[invalid socket descriptor]\n"))); + return -1; + } - return id; + return id; } /* Errno()() */ -static uae_u32 REGPARAM2 bsdsocklib_Errno (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Errno(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - BSDTRACE ((_T("Errno() -> %d\n"), sb->sb_errno)); - return sb->sb_errno; + struct socketbase *sb = get_socketbase(context); + BSDTRACE((_T("Errno() -> %d\n"), sb->sb_errno)); + return sb->sb_errno; } /* SetErrnoPtr(errno_p, size)(a0/d0) */ -static uae_u32 REGPARAM2 bsdsocklib_SetErrnoPtr (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_SetErrnoPtr(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - uae_u32 errnoptr = m68k_areg (regs, 0), size = m68k_dreg (regs, 0); + struct socketbase *sb = get_socketbase(context); + uae_u32 errnoptr = m68k_areg(regs, 0), size = m68k_dreg(regs, 0); - BSDTRACE ((_T("SetErrnoPtr(0x%lx,%d) -> "), errnoptr, size)); + BSDTRACE((_T("SetErrnoPtr(0x%lx,%d) -> "), errnoptr, size)); - if (size == 1 || size == 2 || size == 4) - { - sb->errnoptr = errnoptr; - sb->errnosize = size; - BSDTRACE ((_T("OK\n"))); - return 0; - } - bsdsocklib_seterrno (sb, 22); /* EINVAL */ + if (size == 1 || size == 2 || size == 4) + { + sb->errnoptr = errnoptr; + sb->errnosize = size; + BSDTRACE((_T("OK\n"))); + return 0; + } + bsdsocklib_seterrno(sb, 22); /* EINVAL */ - return -1; + return -1; } /* *------ inet library calls related to inet address manipulation */ /* Inet_NtoA(in)(d0) */ -static uae_u32 REGPARAM2 bsdsocklib_Inet_NtoA (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Inet_NtoA(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_Inet_NtoA (context, sb, m68k_dreg (regs, 0)); + struct socketbase *sb = get_socketbase(context); + return host_Inet_NtoA(context, sb, m68k_dreg(regs, 0)); } /* inet_addr(cp)(a0) */ -static uae_u32 REGPARAM2 bsdsocklib_inet_addr (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_inet_addr(TrapContext *context) { - return host_inet_addr (m68k_areg (regs, 0)); + return host_inet_addr(m68k_areg(regs, 0)); } /* Inet_LnaOf(in)(d0) */ -static uae_u32 REGPARAM2 bsdsocklib_Inet_LnaOf (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Inet_LnaOf(TrapContext *context) { - write_log (_T("bsdsocket: UNSUPPORTED: Inet_LnaOf()\n")); - return 0; + write_log(_T("bsdsocket: UNSUPPORTED: Inet_LnaOf()\n")); + return 0; } /* Inet_NetOf(in)(d0) */ -static uae_u32 REGPARAM2 bsdsocklib_Inet_NetOf (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Inet_NetOf(TrapContext *context) { - write_log (_T("bsdsocket: UNSUPPORTED: Inet_NetOf()\n")); - return 0; + write_log(_T("bsdsocket: UNSUPPORTED: Inet_NetOf()\n")); + return 0; } /* Inet_MakeAddr(net, host)(d0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_Inet_MakeAddr (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Inet_MakeAddr(TrapContext *context) { - write_log (_T("bsdsocket: UNSUPPORTED: Inet_MakeAddr()\n")); - return 0; + write_log(_T("bsdsocket: UNSUPPORTED: Inet_MakeAddr()\n")); + return 0; } /* inet_network(cp)(a0) */ -static uae_u32 REGPARAM2 bsdsocklib_inet_network (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_inet_network(TrapContext *context) { - return host_inet_addr (m68k_areg (regs, 0)); + return host_inet_addr(m68k_areg(regs, 0)); } /* *------ gethostbyname etc */ /* gethostbyname(name)(a0) */ -static uae_u32 REGPARAM2 bsdsocklib_gethostbyname (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_gethostbyname(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_gethostbynameaddr (context, sb, m68k_areg (regs, 0), 0, -1); - return sb->sb_herrno ? 0 : sb->hostent; + struct socketbase *sb = get_socketbase(context); + host_gethostbynameaddr(context, sb, m68k_areg(regs, 0), 0, -1); + return sb->sb_herrno ? 0 : sb->hostent; } /* gethostbyaddr(addr, len, type)(a0/d0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_gethostbyaddr (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_gethostbyaddr(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_gethostbynameaddr (context, sb, m68k_areg (regs, 0), m68k_dreg (regs, 0), m68k_dreg (regs, 1)); - return sb->sb_herrno ? 0 : sb->hostent; + struct socketbase *sb = get_socketbase(context); + host_gethostbynameaddr(context, sb, m68k_areg(regs, 0), m68k_dreg(regs, 0), m68k_dreg(regs, 1)); + return sb->sb_herrno ? 0 : sb->hostent; } /* getnetbyname(name)(a0) */ -static uae_u32 REGPARAM2 bsdsocklib_getnetbyname (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getnetbyname(TrapContext *context) { - write_log (_T("bsdsocket: UNSUPPORTED: getnetbyname()\n")); - return 0; + write_log(_T("bsdsocket: UNSUPPORTED: getnetbyname()\n")); + return 0; } /* getnetbyaddr(net, type)(d0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_getnetbyaddr (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getnetbyaddr(TrapContext *context) { - write_log (_T("bsdsocket: UNSUPPORTED: getnetbyaddr()\n")); - return 0; + write_log(_T("bsdsocket: UNSUPPORTED: getnetbyaddr()\n")); + return 0; } /* getservbyname(name, proto)(a0/a1) */ -static uae_u32 REGPARAM2 bsdsocklib_getservbyname (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getservbyname(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_getservbynameport (context, sb, m68k_areg (regs, 0), m68k_areg (regs, 1), 0); - return sb->sb_errno ? 0 : sb->servent; + struct socketbase *sb = get_socketbase(context); + host_getservbynameport(context, sb, m68k_areg(regs, 0), m68k_areg(regs, 1), 0); + return sb->sb_errno ? 0 : sb->servent; } /* getservbyport(port, proto)(d0/a0) */ -static uae_u32 REGPARAM2 bsdsocklib_getservbyport (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getservbyport(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_getservbynameport (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), 1); - return sb->sb_errno ? 0 : sb->servent; + struct socketbase *sb = get_socketbase(context); + host_getservbynameport(context, sb, m68k_dreg(regs, 0), m68k_areg(regs, 0), 1); + return sb->sb_errno ? 0 : sb->servent; } /* getprotobyname(name)(a0) */ -static uae_u32 REGPARAM2 bsdsocklib_getprotobyname (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getprotobyname(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_getprotobyname (context, sb, m68k_areg (regs, 0)); - return sb->sb_errno ? 0 : sb->protoent; + struct socketbase *sb = get_socketbase(context); + host_getprotobyname(context, sb, m68k_areg(regs, 0)); + return sb->sb_errno ? 0 : sb->protoent; } /* getprotobynumber(proto)(d0) */ -static uae_u32 REGPARAM2 bsdsocklib_getprotobynumber (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getprotobynumber(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - host_getprotobynumber (context, sb, m68k_dreg (regs, 0)); - return sb->sb_errno ? 0 : sb->protoent; + struct socketbase *sb = get_socketbase(context); + host_getprotobynumber(context, sb, m68k_dreg(regs, 0)); + return sb->sb_errno ? 0 : sb->protoent; } /* *------ AmiTCP/IP 1.1 extensions */ /* Dup2Socket(fd1, fd2)(d0/d1) */ -static uae_u32 REGPARAM2 bsdsocklib_Dup2Socket (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_Dup2Socket(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - return host_dup2socket (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); + struct socketbase *sb = get_socketbase(context); + return host_dup2socket(context, sb, m68k_dreg(regs, 0), m68k_dreg(regs, 1)); } -static uae_u32 REGPARAM2 bsdsocklib_sendmsg (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_sendmsg(TrapContext *context) { - write_log (_T("bsdsocket: UNSUPPORTED: sendmsg()\n")); - return 0; + write_log(_T("bsdsocket: UNSUPPORTED: sendmsg()\n")); + return 0; } -static uae_u32 REGPARAM2 bsdsocklib_recvmsg (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_recvmsg(TrapContext *context) { - write_log (_T("bsdsocket: UNSUPPORTED: recvmsg()\n")); - return 0; + write_log(_T("bsdsocket: UNSUPPORTED: recvmsg()\n")); + return 0; } -static uae_u32 REGPARAM2 bsdsocklib_gethostname (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_gethostname(TrapContext *context) { - return host_gethostname (m68k_areg (regs, 0), m68k_dreg (regs, 0)); + return host_gethostname(m68k_areg(regs, 0), m68k_dreg(regs, 0)); } -static uae_u32 REGPARAM2 bsdsocklib_gethostid (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_gethostid(TrapContext *context) { - write_log (_T("bsdsocket: WARNING: Process '%s' calls deprecated function gethostid() - returning 127.0.0.1\n"), - get_real_address (get_long (gettask (context) + 10))); - return 0x7f000001; + write_log(_T("bsdsocket: WARNING: Process '%s' calls deprecated function gethostid() - returning 127.0.0.1\n"), + get_real_address(get_long(gettask(context) + 10))); + return 0x7f000001; } static const TCHAR *errortexts[] = { - _T("No error"), _T("Operation not permitted"), _T("No such file or directory"), - _T("No such process"), _T("Interrupted system call"), _T("Input/output error"), _T("Device not configured"), - _T("Argument list too long"), _T("Exec format error"), _T("Bad file descriptor"), _T("No child processes"), - _T("Resource deadlock avoided"), _T("Cannot allocate memory"), _T("Permission denied"), _T("Bad address"), - _T("Block device required"), _T("Device busy"), _T("Object exists"), _T("Cross-device link"), - _T("Operation not supported by device"), _T("Not a directory"), _T("Is a directory"), _T("Invalid argument"), - _T("Too many open files in system"), _T("Too many open files"), _T("Inappropriate ioctl for device"), - _T("Text file busy"), _T("File too large"), _T("No space left on device"), _T("Illegal seek"), - _T("Read-only file system"), _T("Too many links"), _T("Broken pipe"), _T("Numerical argument out of domain"), - _T("Result too large"), _T("Resource temporarily unavailable"), _T("Operation now in progress"), - _T("Operation already in progress"), _T("Socket operation on non-socket"), _T("Destination address required"), - _T("Message too long"), _T("Protocol wrong type for socket"), _T("Protocol not available"), - _T("Protocol not supported"), _T("Socket type not supported"), _T("Operation not supported"), - _T("Protocol family not supported"), _T("Address family not supported by protocol family"), - _T("Address already in use"), _T("Can't assign requested address"), _T("Network is down"), - _T("Network is unreachable"), _T("Network dropped connection on reset"), _T("Software caused connection abort"), - _T("Connection reset by peer"), _T("No buffer space available"), _T("Socket is already connected"), - _T("Socket is not connected"), _T("Can't send after socket shutdown"), _T("Too many references: can't splice"), - _T("Connection timed out"), _T("Connection refused"), _T("Too many levels of symbolic links"), - _T("File name too long"), _T("Host is down"), _T("No route to host"), _T("Directory not empty"), - _T("Too many processes"), _T("Too many users"), _T("Disc quota exceeded"), _T("Stale NFS file handle"), - _T("Too many levels of remote in path"), _T("RPC struct is bad"), _T("RPC version wrong"), - _T("RPC prog. not avail"), _T("Program version wrong"), _T("Bad procedure for program"), _T("No locks available"), - _T("Function not implemented"), _T("Inappropriate file type or format"), _T("PError 0") + _T("No error"), + _T("Operation not permitted"), + _T("No such file or directory"), + _T("No such process"), + _T("Interrupted system call"), + _T("Input/output error"), + _T("Device not configured"), + _T("Argument list too long"), + _T("Exec format error"), + _T("Bad file descriptor"), + _T("No child processes"), + _T("Resource deadlock avoided"), + _T("Cannot allocate memory"), + _T("Permission denied"), + _T("Bad address"), + _T("Block device required"), + _T("Device busy"), + _T("Object exists"), + _T("Cross-device link"), + _T("Operation not supported by device"), + _T("Not a directory"), + _T("Is a directory"), + _T("Invalid argument"), + _T("Too many open files in system"), + _T("Too many open files"), + _T("Inappropriate ioctl for device"), + _T("Text file busy"), + _T("File too large"), + _T("No space left on device"), + _T("Illegal seek"), + _T("Read-only file system"), + _T("Too many links"), + _T("Broken pipe"), + _T("Numerical argument out of domain"), + _T("Result too large"), + _T("Resource temporarily unavailable"), + _T("Operation now in progress"), + _T("Operation already in progress"), + _T("Socket operation on non-socket"), + _T("Destination address required"), + _T("Message too long"), + _T("Protocol wrong type for socket"), + _T("Protocol not available"), + _T("Protocol not supported"), + _T("Socket type not supported"), + _T("Operation not supported"), + _T("Protocol family not supported"), + _T("Address family not supported by protocol family"), + _T("Address already in use"), + _T("Can't assign requested address"), + _T("Network is down"), + _T("Network is unreachable"), + _T("Network dropped connection on reset"), + _T("Software caused connection abort"), + _T("Connection reset by peer"), + _T("No buffer space available"), + _T("Socket is already connected"), + _T("Socket is not connected"), + _T("Can't send after socket shutdown"), + _T("Too many references: can't splice"), + _T("Connection timed out"), + _T("Connection refused"), + _T("Too many levels of symbolic links"), + _T("File name too long"), + _T("Host is down"), + _T("No route to host"), + _T("Directory not empty"), + _T("Too many processes"), + _T("Too many users"), + _T("Disc quota exceeded"), + _T("Stale NFS file handle"), + _T("Too many levels of remote in path"), + _T("RPC struct is bad"), + _T("RPC version wrong"), + _T("RPC prog. not avail"), + _T("Program version wrong"), + _T("Bad procedure for program"), + _T("No locks available"), + _T("Function not implemented"), + _T("Inappropriate file type or format"), + _T("PError 0") }; -static uae_u32 errnotextptrs[sizeof (errortexts) / sizeof (*errortexts)]; -static const uae_u32 number_sys_error = sizeof (errortexts) / sizeof (*errortexts); +static uae_u32 errnotextptrs[sizeof(errortexts) / sizeof(*errortexts)]; +static const uae_u32 number_sys_error = sizeof(errortexts) / sizeof(*errortexts); /* *------ syslog functions */ /* Syslog(level, format, ap)(d0/a0/a1) */ -static uae_u32 REGPARAM2 bsdsocklib_vsyslog (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_vsyslog(TrapContext *context) { #if 0 - struct socketbase *sb = get_socketbase (context); - uae_char format_dst[512]; - char out[256]; - TCHAR *s; - uae_u8 paramtable[32 * 4]; - int paramcnt, len; - uae_char *found = NULL; + struct socketbase *sb = get_socketbase(context); + uae_char format_dst[512]; + char out[256]; + TCHAR *s; + uae_u8 paramtable[32 * 4]; + int paramcnt, len; + uae_char *found = NULL; - uae_u32 level = m68k_dreg (regs, 0); - uaecptr format = m68k_areg (regs, 0); - uaecptr params = m68k_areg (regs, 1); + uae_u32 level = m68k_dreg(regs, 0); + uaecptr format = m68k_areg(regs, 0); + uaecptr params = m68k_areg(regs, 1); - strcpyah_safe (format_dst, format, sizeof format_dst); + strcpyah_safe(format_dst, format, sizeof format_dst); - ((uae_u8**)paramtable)[0] = (uae_u8*)format_dst; - paramcnt = 4; - for (int i = 0; format_dst[i]; i++) - { - if (format_dst[i] == '%') - { - if (found) - found = NULL; - else - found = &format_dst[i]; - len = 4; - } - else if (found) - { - char c = toupper (format_dst[i]); - if (c < 'A' || c > 'Z') - continue; - if (c == 'H') - { - len = 2; - continue; - } - if (c == 'M') - { - int err = sb->sb_errno; - if (sb->sb_errno < 0 || sb->sb_errno >= sizeof (errortexts) / sizeof (*errortexts)) - err = sizeof (errortexts) / sizeof (*errortexts) - 1; - int errlen = _tcslen (errortexts[err]) - (&format_dst[i] - found); - memmove (&format_dst[i] + errlen, &format_dst[i] + 1, strlen (&format_dst[i] + 1) + 1); - ua_copy (found, sizeof format_dst, errortexts[err]); - i += errlen - 1; - continue; - } + ((uae_u8**)paramtable)[0] = (uae_u8*)format_dst; + paramcnt = 4; + for (int i = 0; format_dst[i]; i++) + { + if (format_dst[i] == '%') + { + if (found) + found = NULL; + else + found = &format_dst[i]; + len = 4; + } + else if (found) + { + char c = toupper(format_dst[i]); + if (c < 'A' || c > 'Z') + continue; + if (c == 'H') + { + len = 2; + continue; + } + if (c == 'M') + { + int err = sb->sb_errno; + if (sb->sb_errno < 0 || sb->sb_errno >= sizeof(errortexts) / sizeof(*errortexts)) + err = sizeof(errortexts) / sizeof(*errortexts) - 1; + int errlen = _tcslen(errortexts[err]) - (&format_dst[i] - found); + memmove(&format_dst[i] + errlen, &format_dst[i] + 1, strlen(&format_dst[i] + 1) + 1); + ua_copy(found, sizeof format_dst, errortexts[err]); + i += errlen - 1; + continue; + } - if (c == 'P' || c == 'S' || c == 'N') - { - uaecptr pt = get_long (params); - if (!valid_address (pt, 2)) - goto end; - ((uae_u8**)(paramtable + paramcnt))[0] = get_real_address (pt); - params += 4; - paramcnt += sizeof (uae_u8*); - } - else - { - if (len == 2) - ((uae_u16*)(paramtable + paramcnt))[0] = get_word (params); - else - ((uae_u32*)(paramtable + paramcnt))[0] = get_long (params); - params += len; - paramcnt += len; - } - found = NULL; - } - } + if (c == 'P' || c == 'S' || c == 'N') + { + uaecptr pt = get_long(params); + if (!valid_address(pt, 2)) + goto end; + ((uae_u8**)(paramtable + paramcnt))[0] = get_real_address(pt); + params += 4; + paramcnt += sizeof(uae_u8*); + } + else + { + if (len == 2) + ((uae_u16*)(paramtable + paramcnt))[0] = get_word(params); + else + ((uae_u32*)(paramtable + paramcnt))[0] = get_long(params); + params += len; + paramcnt += len; + } + found = NULL; + } + } - va_list parms; - va_start (parms, paramtable); - _vsnprintf (out, sizeof out, format_dst, parms); - va_end (parms); + va_list parms; + va_start(parms, paramtable); + _vsnprintf(out, sizeof out, format_dst, parms); + va_end(parms); - s = au (out); - write_log (_T("SYSLOG: %s\n"), s); - xfree (s); + s = au(out); + write_log(_T("SYSLOG: %s\n"), s); + xfree(s); end: #endif - return 0; + return 0; } static const TCHAR *herrortexts[] = { - _T("No error"), _T("Unknown host"), _T("Host name lookup failure"), _T("Unknown server error"), - _T("No address associated with name") + _T("No error"), + _T("Unknown host"), + _T("Host name lookup failure"), + _T("Unknown server error"), + _T("No address associated with name") }; -static uae_u32 herrnotextptrs[sizeof (herrortexts) / sizeof (*herrortexts)]; -static const uae_u32 number_host_error = sizeof (herrortexts) / sizeof (*herrortexts); +static uae_u32 herrnotextptrs[sizeof(herrortexts) / sizeof(*herrortexts)]; +static const uae_u32 number_host_error = sizeof(herrortexts) / sizeof(*herrortexts); static const TCHAR *sana2io_errlist[] = { - _T("No error"), /* S2ERR_NO_ERROR */ - _T("Resource allocation failure"), /* S2ERR_NO_RESOURCES */ - _T("Unknown error code (2)"), - _T("Invalid argument"), /* S2ERR_BAD_ARGUMENT */ - _T("Inappropriate state"), /* S2ERR_BAD_STATE */ - _T("Invalid address"), /* S2ERR_BAD_ADDRESS */ - _T("Requested packet too large"), /* S2ERR_MTU_EXCEEDED */ - _T("Unknown error (7)"), - _T("Command is not supporter"), /* S2ERR_NOT_SUPPORTED */ - _T("Driver software error detected"), /* S2ERR_SOFTWARE */ - _T("Device driver is offline"), /* S2ERR_OUTOFSERVICE */ - _T("Transmission attempt failed") /* S2ERR_TX_FAILURE */ + _T("No error"), /* S2ERR_NO_ERROR */ + _T("Resource allocation failure"), /* S2ERR_NO_RESOURCES */ + _T("Unknown error code (2)"), + _T("Invalid argument"), /* S2ERR_BAD_ARGUMENT */ + _T("Inappropriate state"), /* S2ERR_BAD_STATE */ + _T("Invalid address"), /* S2ERR_BAD_ADDRESS */ + _T("Requested packet too large"), /* S2ERR_MTU_EXCEEDED */ + _T("Unknown error (7)"), + _T("Command is not supporter"), /* S2ERR_NOT_SUPPORTED */ + _T("Driver software error detected"), /* S2ERR_SOFTWARE */ + _T("Device driver is offline"), /* S2ERR_OUTOFSERVICE */ + _T("Transmission attempt failed") /* S2ERR_TX_FAILURE */ }; -static uae_u32 sana2iotextptrs[sizeof (sana2io_errlist) / sizeof (*sana2io_errlist)]; -static const uae_u32 number_sana2io_error = sizeof (sana2io_errlist) / sizeof (*sana2io_errlist); +static uae_u32 sana2iotextptrs[sizeof(sana2io_errlist) / sizeof(*sana2io_errlist)]; +static const uae_u32 number_sana2io_error = sizeof(sana2io_errlist) / sizeof(*sana2io_errlist); static const TCHAR *sana2wire_errlist[] = { - _T("Generic error: 0"), /* S2WERR_GENERIC_ERROR */ - _T("Unit not configured"), /* S2WERR_NOT_CONFIGURED */ - _T("Unit is currently online"), /* S2WERR_UNIT_ONLINE */ - _T("Unit is currently offline"), /* S2WERR_UNIT_OFFLINE */ - _T("Protocol already tracked"), /* S2WERR_ALREADY_TRACKED */ - _T("Protocol not tracked"), /* S2WERR_NOT_TRACKED */ - _T("Buff management function error"), /* S2WERR_BUFF_ERROR */ - _T("Source address error"), /* S2WERR_SRC_ADDRESS */ - _T("Destination address error"), /* S2WERR_DST_ADDRESS */ - _T("Broadcast address error"), /* S2WERR_BAD_BROADCAST */ - _T("Multicast address error"), /* S2WERR_BAD_MULTICAST */ - _T("Multicast address list full"), /* S2WERR_MULTICAST_FULL */ - _T("Unsupported event class"), /* S2WERR_BAD_EVENT */ - _T("Statdata failed sanity check"), /* S2WERR_BAD_STATDATA */ - _T("Unknown wire error (14)"), - _T("Attempt to config twice"), /* S2WERR_IS_CONFIGURED */ - _T("Null pointer detected"), /* S2WERR_NULL_POINTER */ - _T("tx failed - too many retries"), /* S2WERR_TOO_MANY_RETIRES */ - _T("Driver fixable HW error") /* S2WERR_RCVREL_HDW_ERR */ + _T("Generic error: 0"), /* S2WERR_GENERIC_ERROR */ + _T("Unit not configured"), /* S2WERR_NOT_CONFIGURED */ + _T("Unit is currently online"), /* S2WERR_UNIT_ONLINE */ + _T("Unit is currently offline"), /* S2WERR_UNIT_OFFLINE */ + _T("Protocol already tracked"), /* S2WERR_ALREADY_TRACKED */ + _T("Protocol not tracked"), /* S2WERR_NOT_TRACKED */ + _T("Buff management function error"), /* S2WERR_BUFF_ERROR */ + _T("Source address error"), /* S2WERR_SRC_ADDRESS */ + _T("Destination address error"), /* S2WERR_DST_ADDRESS */ + _T("Broadcast address error"), /* S2WERR_BAD_BROADCAST */ + _T("Multicast address error"), /* S2WERR_BAD_MULTICAST */ + _T("Multicast address list full"), /* S2WERR_MULTICAST_FULL */ + _T("Unsupported event class"), /* S2WERR_BAD_EVENT */ + _T("Statdata failed sanity check"), /* S2WERR_BAD_STATDATA */ + _T("Unknown wire error (14)"), + _T("Attempt to config twice"), /* S2WERR_IS_CONFIGURED */ + _T("Null pointer detected"), /* S2WERR_NULL_POINTER */ + _T("tx failed - too many retries"), /* S2WERR_TOO_MANY_RETIRES */ + _T("Driver fixable HW error") /* S2WERR_RCVREL_HDW_ERR */ }; -static uae_u32 sana2wiretextptrs[sizeof (sana2wire_errlist) / sizeof (*sana2wire_errlist)]; -static const uae_u32 number_sana2wire_error = sizeof (sana2wire_errlist) / sizeof (*sana2wire_errlist); +static uae_u32 sana2wiretextptrs[sizeof(sana2wire_errlist) / sizeof(*sana2wire_errlist)]; +static const uae_u32 number_sana2wire_error = sizeof(sana2wire_errlist) / sizeof(*sana2wire_errlist); static const TCHAR *io_errlist[] = { - _T("Unknown error"), /* 0 */ - _T("Device or unit failed to open"), /* IOERR_OPENFAIL */ - _T("Request aborted"), /* IOERR_ABORTED */ - _T("Command not supported by device"), /* IOERR_NOCMD */ - _T("Invalid length"), /* IOERR_BADLENGTH */ - _T("Invalid address"), /* IOERR_BADADDRESS */ - _T("Requested unit is busy"), /* IOERR_UNITBUSY */ - _T("Hardware self-test failed") /* IOERR_SELFTEST */ + _T("Unknown error"), /* 0 */ + _T("Device or unit failed to open"), /* IOERR_OPENFAIL */ + _T("Request aborted"), /* IOERR_ABORTED */ + _T("Command not supported by device"), /* IOERR_NOCMD */ + _T("Invalid length"), /* IOERR_BADLENGTH */ + _T("Invalid address"), /* IOERR_BADADDRESS */ + _T("Requested unit is busy"), /* IOERR_UNITBUSY */ + _T("Hardware self-test failed") /* IOERR_SELFTEST */ }; -static uae_u32 iotextptrs[sizeof (io_errlist) / sizeof (*io_errlist)]; -static const uae_u32 number_io_error = sizeof (io_errlist) / sizeof (*io_errlist); +static uae_u32 iotextptrs[sizeof(io_errlist) / sizeof(*io_errlist)]; +static const uae_u32 number_io_error = sizeof(io_errlist) / sizeof(*io_errlist); static const TCHAR * const strErr = _T("Errlist lookup error"); @@ -1373,596 +1477,673 @@ static uae_u32 strErrptr; #define LOG_FACMASK 0x03f8 -static void tagcopy (uae_u32 currtag, uae_u32 currval, uae_u32 tagptr, uae_u32 * ptr) +static void tagcopy(uae_u32 currtag, uae_u32 currval, uae_u32 tagptr, uae_u32 * ptr) { - switch (currtag & 0x8001) - { - case 0x0000: /* SBTM_GETVAL */ - put_long (tagptr + 4, ptr ? *ptr : 0); - break; - case 0x8000: /* SBTM_GETREF */ - put_long (currval, ptr ? *ptr : 0); - break; - case 0x0001: /* SBTM_SETVAL */ - if (ptr) - *ptr = currval; - break; - default: /* SBTM_SETREF */ - if (ptr) - *ptr = get_long (currval); - break; - } + switch (currtag & 0x8001) + { + case 0x0000: /* SBTM_GETVAL */ + put_long(tagptr + 4, ptr ? *ptr : 0); + break; + case 0x8000: /* SBTM_GETREF */ + put_long(currval, ptr ? *ptr : 0); + break; + case 0x0001: /* SBTM_SETVAL */ + if (ptr) + *ptr = currval; + break; + default: /* SBTM_SETREF */ + if (ptr) + *ptr = get_long(currval); + break; + } } -static uae_u32 REGPARAM2 bsdsocklib_SocketBaseTagList (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_SocketBaseTagList(TrapContext *context) { - struct socketbase *sb = get_socketbase (context); - uae_u32 tagptr = m68k_areg (regs, 0); - uae_u32 tagsprocessed = 0; - uae_u32 currtag; - uae_u32 currval; + struct socketbase *sb = get_socketbase(context); + uae_u32 tagptr = m68k_areg(regs, 0); + uae_u32 tagsprocessed = 0; + uae_u32 currtag; + uae_u32 currval; - BSDTRACE ((_T("SocketBaseTagList("))); + BSDTRACE((_T("SocketBaseTagList("))); - for (;;) - { - currtag = get_long (tagptr); - currval = get_long (tagptr + 4); - tagsprocessed++; + for (;;) + { + currtag = get_long(tagptr); + currval = get_long(tagptr + 4); + tagsprocessed++; - if (!(currtag & TAG_USER)) - { + if (!(currtag & TAG_USER)) + { - switch (currtag) - { - case TAG_DONE: - BSDTRACE ((_T("TAG_DONE"))); - tagsprocessed = 0; - goto done; - case TAG_IGNORE: - BSDTRACE ((_T("TAG_IGNORE"))); - break; - case TAG_MORE: - BSDTRACE ((_T("TAG_MORE(0x%lx)"), currval)); - tagptr = currval; - break; - case TAG_SKIP: - BSDTRACE ((_T("TAG_SKIP(%d)"), currval)); - tagptr += currval * 8; - break; - default: - write_log (_T("bsdsocket: WARNING: Unsupported tag type (%08x) in SocketBaseTagList(%x)\n"), - currtag, m68k_areg (regs, 0)); - goto done; - } + switch (currtag) + { + case TAG_DONE: + BSDTRACE((_T("TAG_DONE"))); + tagsprocessed = 0; + goto done; + case TAG_IGNORE: + BSDTRACE((_T("TAG_IGNORE"))); + break; + case TAG_MORE: + BSDTRACE((_T("TAG_MORE(0x%lx)"), currval)); + tagptr = currval; + break; + case TAG_SKIP: + BSDTRACE((_T("TAG_SKIP(%d)"), currval)); + tagptr += currval * 8; + break; + default: + write_log(_T("bsdsocket: WARNING: Unsupported tag type (%08x) in SocketBaseTagList(%x)\n"), + currtag, + m68k_areg(regs, 0)); + goto done; + } - } - else - { + } + else + { - BSDTRACE ((_T("SBTM_"))); - BSDTRACE ((currtag & 0x0001 ? _T("SET") : _T("GET"))); - BSDTRACE ((currtag & 0x8000 ? _T("REF(") : _T("VAL("))); + BSDTRACE((_T("SBTM_"))); + BSDTRACE((currtag & 0x0001 ? _T("SET") : _T("GET"))); + BSDTRACE((currtag & 0x8000 ? _T("REF(") : _T("VAL("))); - switch ((currtag >> 1) & SBTS_CODE) - { - case SBTC_BREAKMASK: - BSDTRACE ((_T("SBTC_BREAKMASK),0x%x,0x%x"), currval, sb->eintrsigs)); - tagcopy (currtag, currval, tagptr, &sb->eintrsigs); - break; - case SBTC_SIGIOMASK: - BSDTRACE ((_T("SBTC_SIGIOMASK),0x%x,0x%x"), currval, sb->eventsigs)); - tagcopy (currtag, currval, tagptr, &sb->eventsigs); - break; - case SBTC_SIGURGMASK: - BSDTRACE ((_T("SBTC_SIGURGMASK),0x%x"), currval)); - break; - case SBTC_SIGEVENTMASK: - BSDTRACE ((_T("SBTC_SIGEVENTMASK),0x%x,0x%x"), currval, sb->eventsigs)); - tagcopy (currtag, currval, tagptr, &sb->eventsigs); - break; - case SBTC_ERRNO: - BSDTRACE ((_T("SBTC_ERRNO),%x,%d"), currval, sb->sb_errno)); - tagcopy (currtag, currval, tagptr, (uae_u32*)&sb->sb_errno); - break; - case SBTC_HERRNO: - BSDTRACE ((_T("SBTC_HERRNO),%x,%d"), currval, sb->sb_herrno)); - tagcopy (currtag, currval, tagptr, (uae_u32*)&sb->sb_herrno); - break; - case SBTC_DTABLESIZE: - BSDTRACE ((_T("SBTC_DTABLESIZE),0x%lx"), currval)); - if (currtag & 1) - { - bsdsocklib_SetDTableSize(sb, currval); - } - else - { - put_long (tagptr + 4, sb->dtablesize); - } - break; + switch ((currtag >> 1) & SBTS_CODE) + { + case SBTC_BREAKMASK: + BSDTRACE((_T("SBTC_BREAKMASK),0x%x,0x%x"), currval, sb->eintrsigs)); + tagcopy(currtag, currval, tagptr, &sb->eintrsigs); + break; + case SBTC_SIGIOMASK: + BSDTRACE((_T("SBTC_SIGIOMASK),0x%x,0x%x"), currval, sb->eventsigs)); + tagcopy(currtag, currval, tagptr, &sb->eventsigs); + break; + case SBTC_SIGURGMASK: + BSDTRACE((_T("SBTC_SIGURGMASK),0x%x"), currval)); + break; + case SBTC_SIGEVENTMASK: + BSDTRACE((_T("SBTC_SIGEVENTMASK),0x%x,0x%x"), currval, sb->eventsigs)); + tagcopy(currtag, currval, tagptr, &sb->eventsigs); + break; + case SBTC_ERRNO: + BSDTRACE((_T("SBTC_ERRNO),%x,%d"), currval, sb->sb_errno)); + tagcopy(currtag, currval, tagptr, (uae_u32*)&sb->sb_errno); + break; + case SBTC_HERRNO: + BSDTRACE((_T("SBTC_HERRNO),%x,%d"), currval, sb->sb_herrno)); + tagcopy(currtag, currval, tagptr, (uae_u32*)&sb->sb_herrno); + break; + case SBTC_DTABLESIZE: + BSDTRACE((_T("SBTC_DTABLESIZE),0x%lx"), currval)); + if (currtag & 1) + { + bsdsocklib_SetDTableSize(sb, currval); + } + else + { + put_long(tagptr + 4, sb->dtablesize); + } + break; - case SBTC_FDCALLBACK: - BSDTRACE ((_T("SBTC_FDCALLBACK),%08x"), currval)); - tagcopy (currtag, currval, tagptr, &sb->fdcallback); - break; + case SBTC_FDCALLBACK: + BSDTRACE((_T("SBTC_FDCALLBACK),%08x"), currval)); + tagcopy(currtag, currval, tagptr, &sb->fdcallback); + break; - case SBTC_LOGSTAT: - BSDTRACE ((_T("SBTC_LOGSTAT),%08x"), currval)); - tagcopy (currtag, currval, tagptr, &sb->logstat); - sb->logstat &= 0xff; - break; - case SBTC_LOGTAGPTR: - BSDTRACE ((_T("SBTC_LOGTAGPTR),%08x"), currval)); - tagcopy (currtag, currval, tagptr, &sb->logptr); - break; - case SBTC_LOGFACILITY: - BSDTRACE ((_T("SBTC_LOGFACILITY),%08x"), currval)); - if (((currtag & 1) && currval != 0 && (currval & ~LOG_FACMASK)) || !(currtag & 1)) - tagcopy (currtag, currval, tagptr, &sb->logfacility); - break; - case SBTC_LOGMASK: - BSDTRACE ((_T("SBTC_LOGMASK),%08x"), currval)); - tagcopy (currtag, currval, tagptr, &sb->logmask); - sb->logmask &= 0xff; - break; + case SBTC_LOGSTAT: + BSDTRACE((_T("SBTC_LOGSTAT),%08x"), currval)); + tagcopy(currtag, currval, tagptr, &sb->logstat); + sb->logstat &= 0xff; + break; + case SBTC_LOGTAGPTR: + BSDTRACE((_T("SBTC_LOGTAGPTR),%08x"), currval)); + tagcopy(currtag, currval, tagptr, &sb->logptr); + break; + case SBTC_LOGFACILITY: + BSDTRACE((_T("SBTC_LOGFACILITY),%08x"), currval)); + if (((currtag & 1) && currval != 0 && (currval & ~LOG_FACMASK)) || !(currtag & 1)) + tagcopy(currtag, currval, tagptr, &sb->logfacility); + break; + case SBTC_LOGMASK: + BSDTRACE((_T("SBTC_LOGMASK),%08x"), currval)); + tagcopy(currtag, currval, tagptr, &sb->logmask); + sb->logmask &= 0xff; + break; - case SBTC_IOERRNOSTRPTR: - if (currtag & 1) - { - BSDTRACE ((_T("IOERRNOSTRPTR),invalid"))); - goto done; - } - else - { - unsigned long ulTmp; - if (currtag & 0x8000) /* SBTM_GETREF */ - { - ulTmp = get_long (currval); - } - else /* SBTM_GETVAL */ - { - ulTmp = currval; - } - BSDTRACE ((_T("IOERRNOSTRPTR),%d"), ulTmp)); - if (ulTmp < number_sys_error) - { - tagcopy (currtag, currval, tagptr, &iotextptrs[ulTmp]); - } - else - { - tagcopy (currtag, currval, tagptr, &strErrptr); - } - } - break; - case SBTC_S2ERRNOSTRPTR: - if (currtag & 1) - { - BSDTRACE ((_T("S2ERRNOSTRPTR),invalid"))); - goto done; - } - else - { - unsigned long ulTmp; - if (currtag & 0x8000) /* SBTM_GETREF */ - { - ulTmp = get_long (currval); - } - else /* SBTM_GETVAL */ - { - ulTmp = currval; - } - BSDTRACE ((_T("S2ERRNOSTRPTR),%d"), ulTmp)); - if (ulTmp < number_sys_error) - { - tagcopy (currtag, currval, tagptr, &sana2iotextptrs[ulTmp]); - } - else - { - tagcopy (currtag, currval, tagptr, &strErrptr); - } - } - break; - case SBTC_S2WERRNOSTRPTR: - if (currtag & 1) - { - BSDTRACE ((_T("S2WERRNOSTRPTR),invalid"))); - goto done; - } - else - { - unsigned long ulTmp; - if (currtag & 0x8000) /* SBTM_GETREF */ - { - ulTmp = get_long (currval); - } - else /* SBTM_GETVAL */ - { - ulTmp = currval; - } - BSDTRACE ((_T("S2WERRNOSTRPTR),%d"), ulTmp)); - if (ulTmp < number_sys_error) - { - tagcopy (currtag, currval, tagptr, &sana2wiretextptrs[ulTmp]); - } - else - { - tagcopy (currtag, currval, tagptr, &strErrptr); - } - } - break; - case SBTC_ERRNOSTRPTR: - if (currtag & 1) - { - BSDTRACE ((_T("ERRNOSTRPTR),invalid"))); - goto done; - } - else - { - unsigned long ulTmp; - if (currtag & 0x8000) /* SBTM_GETREF */ - { - ulTmp = get_long (currval); - } - else /* SBTM_GETVAL */ - { - ulTmp = currval; - } - BSDTRACE ((_T("ERRNOSTRPTR),%d"), ulTmp)); - if (ulTmp < number_sys_error) - { - tagcopy (currtag, currval, tagptr, &errnotextptrs[ulTmp]); - } - else - { - tagcopy (currtag, currval, tagptr, &strErrptr); - } - } - break; - case SBTC_HERRNOSTRPTR: - if (currtag & 1) - { - BSDTRACE ((_T("HERRNOSTRPTR),invalid"))); - goto done; - } - else - { - unsigned long ulTmp; - if (currtag & 0x8000) /* SBTM_GETREF */ - { - ulTmp = get_long (currval); - } - else /* SBTM_GETVAL */ - { - ulTmp = currval; - } - BSDTRACE ((_T("HERRNOSTRPTR),%d"), ulTmp)); - if (ulTmp < number_host_error) - { - tagcopy (currtag, currval, tagptr, &herrnotextptrs[ulTmp]); - } - else - { - tagcopy (currtag, currval, tagptr, &strErrptr); - } - } - break; + case SBTC_IOERRNOSTRPTR: + if (currtag & 1) + { + BSDTRACE((_T("IOERRNOSTRPTR),invalid"))); + goto done; + } + else + { + unsigned long ulTmp; + if (currtag & 0x8000) /* SBTM_GETREF */ + { + ulTmp = get_long(currval); + } + else /* SBTM_GETVAL */ + { + ulTmp = currval; + } + BSDTRACE((_T("IOERRNOSTRPTR),%d"), ulTmp)); + if (ulTmp < number_sys_error) + { + tagcopy(currtag, currval, tagptr, &iotextptrs[ulTmp]); + } + else + { + tagcopy(currtag, currval, tagptr, &strErrptr); + } + } + break; + case SBTC_S2ERRNOSTRPTR: + if (currtag & 1) + { + BSDTRACE((_T("S2ERRNOSTRPTR),invalid"))); + goto done; + } + else + { + unsigned long ulTmp; + if (currtag & 0x8000) /* SBTM_GETREF */ + { + ulTmp = get_long(currval); + } + else /* SBTM_GETVAL */ + { + ulTmp = currval; + } + BSDTRACE((_T("S2ERRNOSTRPTR),%d"), ulTmp)); + if (ulTmp < number_sys_error) + { + tagcopy(currtag, currval, tagptr, &sana2iotextptrs[ulTmp]); + } + else + { + tagcopy(currtag, currval, tagptr, &strErrptr); + } + } + break; + case SBTC_S2WERRNOSTRPTR: + if (currtag & 1) + { + BSDTRACE((_T("S2WERRNOSTRPTR),invalid"))); + goto done; + } + else + { + unsigned long ulTmp; + if (currtag & 0x8000) /* SBTM_GETREF */ + { + ulTmp = get_long(currval); + } + else /* SBTM_GETVAL */ + { + ulTmp = currval; + } + BSDTRACE((_T("S2WERRNOSTRPTR),%d"), ulTmp)); + if (ulTmp < number_sys_error) + { + tagcopy(currtag, currval, tagptr, &sana2wiretextptrs[ulTmp]); + } + else + { + tagcopy(currtag, currval, tagptr, &strErrptr); + } + } + break; + case SBTC_ERRNOSTRPTR: + if (currtag & 1) + { + BSDTRACE((_T("ERRNOSTRPTR),invalid"))); + goto done; + } + else + { + unsigned long ulTmp; + if (currtag & 0x8000) /* SBTM_GETREF */ + { + ulTmp = get_long(currval); + } + else /* SBTM_GETVAL */ + { + ulTmp = currval; + } + BSDTRACE((_T("ERRNOSTRPTR),%d"), ulTmp)); + if (ulTmp < number_sys_error) + { + tagcopy(currtag, currval, tagptr, &errnotextptrs[ulTmp]); + } + else + { + tagcopy(currtag, currval, tagptr, &strErrptr); + } + } + break; + case SBTC_HERRNOSTRPTR: + if (currtag & 1) + { + BSDTRACE((_T("HERRNOSTRPTR),invalid"))); + goto done; + } + else + { + unsigned long ulTmp; + if (currtag & 0x8000) /* SBTM_GETREF */ + { + ulTmp = get_long(currval); + } + else /* SBTM_GETVAL */ + { + ulTmp = currval; + } + BSDTRACE((_T("HERRNOSTRPTR),%d"), ulTmp)); + if (ulTmp < number_host_error) + { + tagcopy(currtag, currval, tagptr, &herrnotextptrs[ulTmp]); + } + else + { + tagcopy(currtag, currval, tagptr, &strErrptr); + } + } + break; - case SBTC_ERRNOBYTEPTR: - BSDTRACE ((_T("SBTC_ERRNOBYTEPTR),0x%lx"), currval)); - tagcopy (currtag, currval, tagptr, &sb->errnoptr); - sb->errnosize = 1; - break; - case SBTC_ERRNOWORDPTR: - BSDTRACE ((_T("SBTC_ERRNOWORDPTR),0x%lx"), currval)); - tagcopy (currtag, currval, tagptr, &sb->errnoptr); - sb->errnosize = 2; - break; - case SBTC_ERRNOLONGPTR: - BSDTRACE ((_T("SBTC_ERRNOLONGPTR),0x%lx"), currval)); - tagcopy (currtag, currval, tagptr, &sb->errnoptr); - sb->errnosize = 4; - break; - case SBTC_HERRNOLONGPTR: - BSDTRACE ((_T("SBTC_HERRNOLONGPTR),0x%lx"), currval)); - tagcopy (currtag, currval, tagptr, &sb->herrnoptr); - sb->herrnosize = 4; - break; - default: - write_log (_T("bsdsocket: WARNING: Unsupported tag type (%08x=%d) in SocketBaseTagList(%x)\n"), - currtag, (currtag / 2) & SBTS_CODE, m68k_areg (regs, 0)); - goto done; - } - } + case SBTC_ERRNOBYTEPTR: + BSDTRACE((_T("SBTC_ERRNOBYTEPTR),0x%lx"), currval)); + tagcopy(currtag, currval, tagptr, &sb->errnoptr); + sb->errnosize = 1; + break; + case SBTC_ERRNOWORDPTR: + BSDTRACE((_T("SBTC_ERRNOWORDPTR),0x%lx"), currval)); + tagcopy(currtag, currval, tagptr, &sb->errnoptr); + sb->errnosize = 2; + break; + case SBTC_ERRNOLONGPTR: + BSDTRACE((_T("SBTC_ERRNOLONGPTR),0x%lx"), currval)); + tagcopy(currtag, currval, tagptr, &sb->errnoptr); + sb->errnosize = 4; + break; + case SBTC_HERRNOLONGPTR: + BSDTRACE((_T("SBTC_HERRNOLONGPTR),0x%lx"), currval)); + tagcopy(currtag, currval, tagptr, &sb->herrnoptr); + sb->herrnosize = 4; + break; + default: + write_log(_T("bsdsocket: WARNING: Unsupported tag type (%08x=%d) in SocketBaseTagList(%x)\n"), + currtag, + (currtag / 2) & SBTS_CODE, + m68k_areg(regs, 0)); + goto done; + } + } - BSDTRACE ((_T(","))); - tagptr += 8; - } + BSDTRACE((_T(","))); + tagptr += 8; + } done: - BSDTRACE ((_T(") -> %d\n"), tagsprocessed)); + BSDTRACE((_T(") -> %d\n"), tagsprocessed)); - return tagsprocessed; + return tagsprocessed; } -static uae_u32 REGPARAM2 bsdsocklib_GetSocketEvents (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_GetSocketEvents(TrapContext *context) { #ifdef _WIN32 - struct socketbase *sb = get_socketbase (context); - int i; - int flags; - uae_u32 ptr = m68k_areg (regs, 0); + struct socketbase *sb = get_socketbase(context); + int i; + int flags; + uae_u32 ptr = m68k_areg(regs, 0); - BSDTRACE ((_T("GetSocketEvents(0x%x) -> "), ptr)); + BSDTRACE((_T("GetSocketEvents(0x%x) -> "), ptr)); - for (i = sb->dtablesize; i--; sb->eventindex++) - { - if (sb->eventindex >= sb->dtablesize) - sb->eventindex = 0; + for (i = sb->dtablesize; i--; sb->eventindex++) + { + if (sb->eventindex >= sb->dtablesize) + sb->eventindex = 0; - if (sb->mtable[sb->eventindex]) - { - flags = sb->ftable[sb->eventindex] & SET_ALL; - if (flags) - { - sb->ftable[sb->eventindex] &= ~SET_ALL; - put_long (m68k_areg (regs, 0), flags >> 8); - BSDTRACE ((_T("%d (0x%x)\n"), sb->eventindex + 1, flags >> 8)); - return sb->eventindex; // xxx - } - } - } + if (sb->mtable[sb->eventindex]) + { + flags = sb->ftable[sb->eventindex] & SET_ALL; + if (flags) + { + sb->ftable[sb->eventindex] &= ~SET_ALL; + put_long(m68k_areg(regs, 0), flags >> 8); + BSDTRACE((_T("%d (0x%x)\n"), sb->eventindex + 1, flags >> 8)); + return sb->eventindex; // xxx + } + } + } #endif - BSDTRACE ((_T("-1\n"))); - return -1; + BSDTRACE((_T("-1\n"))); + return -1; } -static uae_u32 REGPARAM2 bsdsocklib_getdtablesize (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_getdtablesize(TrapContext *context) { - return get_socketbase (context)->dtablesize; + return get_socketbase(context)->dtablesize; } -static uae_u32 REGPARAM2 bsdsocklib_null (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_null(TrapContext *context) { - return 0; + return 0; } -static uae_u32 REGPARAM2 bsdsocklib_init (TrapContext *context) +static uae_u32 REGPARAM2 bsdsocklib_init(TrapContext *context) { - uae_u32 tmp1; - int i; + uae_u32 tmp1; + int i; - write_log (_T("Creating UAE bsdsocket.library 4.1\n")); - if (SockLibBase) - bsdlib_reset (); + write_log(_T("Creating UAE bsdsocket.library 4.1\n")); + if (SockLibBase) + bsdlib_reset(); - m68k_areg (regs, 0) = functable; - m68k_areg (regs, 1) = datatable; - m68k_areg (regs, 2) = 0; - m68k_dreg (regs, 0) = LIBRARY_SIZEOF; - m68k_dreg (regs, 1) = 0; - tmp1 = CallLib (context, m68k_areg (regs, 6), -0x54); /* MakeLibrary */ + m68k_areg(regs, 0) = functable; + m68k_areg(regs, 1) = datatable; + m68k_areg(regs, 2) = 0; + m68k_dreg(regs, 0) = LIBRARY_SIZEOF; + m68k_dreg(regs, 1) = 0; + tmp1 = CallLib(context, m68k_areg(regs, 6), -0x54); /* MakeLibrary */ - if (!tmp1) - { - write_log (_T("bsdoscket: FATAL: Cannot create bsdsocket.library!\n")); - return 0; - } - m68k_areg (regs, 1) = tmp1; - CallLib (context, m68k_areg (regs, 6), -0x18c); /* AddLibrary */ - SockLibBase = tmp1; + if (!tmp1) + { + write_log(_T("bsdoscket: FATAL: Cannot create bsdsocket.library!\n")); + return 0; + } + m68k_areg(regs, 1) = tmp1; + CallLib(context, m68k_areg(regs, 6), -0x18c); /* AddLibrary */ + SockLibBase = tmp1; - /* Install error strings in Amiga memory */ - tmp1 = 0; - for (i = number_sys_error; i--;) - tmp1 += _tcslen (errortexts[i]) + 1; - for (i = number_host_error; i--;) - tmp1 += _tcslen (herrortexts[i]) + 1; - for (i = number_sana2io_error; i--;) - tmp1 += _tcslen (sana2io_errlist[i]) + 1; - for (i = number_sana2wire_error; i--;) - tmp1 += _tcslen (sana2wire_errlist[i]) + 1; - tmp1 += _tcslen (strErr) + 1; + /* Install error strings in Amiga memory */ + tmp1 = 0; + for (i = number_sys_error; i--;) + tmp1 += _tcslen(errortexts[i]) + 1; + for (i = number_host_error; i--;) + tmp1 += _tcslen(herrortexts[i]) + 1; + for (i = number_sana2io_error; i--;) + tmp1 += _tcslen(sana2io_errlist[i]) + 1; + for (i = number_sana2wire_error; i--;) + tmp1 += _tcslen(sana2wire_errlist[i]) + 1; + tmp1 += _tcslen(strErr) + 1; - m68k_dreg (regs, 0) = tmp1; - m68k_dreg (regs, 1) = 0; - tmp1 = CallLib (context, m68k_areg (regs, 6), -0xC6); /* AllocMem */ + m68k_dreg(regs, 0) = tmp1; + m68k_dreg(regs, 1) = 0; + tmp1 = CallLib(context, m68k_areg(regs, 6), -0xC6); /* AllocMem */ - if (!tmp1) - { - write_log (_T("bsdsocket: FATAL: Ran out of memory while creating bsdsocket.library!\n")); - return 0; - } + if (!tmp1) + { + write_log(_T("bsdsocket: FATAL: Ran out of memory while creating bsdsocket.library!\n")); + return 0; + } - for (i = 0; i < (int) (number_sys_error); i++) - errnotextptrs[i] = addstr (&tmp1, errortexts[i]); - for (i = 0; i < (int) (number_host_error); i++) - herrnotextptrs[i] = addstr (&tmp1, herrortexts[i]); - for (i = 0; i < (int) (number_sana2io_error); i++) - sana2iotextptrs[i] = addstr (&tmp1, sana2io_errlist[i]); - for (i = 0; i < (int) (number_sana2wire_error); i++) - sana2wiretextptrs[i] = addstr (&tmp1, sana2wire_errlist[i]); - strErrptr = addstr (&tmp1, strErr); + for (i = 0; i < (int)(number_sys_error); i++) + errnotextptrs[i] = addstr(&tmp1, errortexts[i]); + for (i = 0; i < (int)(number_host_error); i++) + herrnotextptrs[i] = addstr(&tmp1, herrortexts[i]); + for (i = 0; i < (int)(number_sana2io_error); i++) + sana2iotextptrs[i] = addstr(&tmp1, sana2io_errlist[i]); + for (i = 0; i < (int)(number_sana2wire_error); i++) + sana2wiretextptrs[i] = addstr(&tmp1, sana2wire_errlist[i]); + strErrptr = addstr(&tmp1, strErr); #if 0 - /* @@@ someone please implement a proper interrupt handler setup here :) */ - tmp1 = here (); - calltrap (deftrap2 (bsdsock_int_handler, TRAPFLAG_EXTRA_STACK | TRAPFLAG_NO_RETVAL, "bsdsock_int_handler")); - dw (0x4ef9); - dl (get_long (context->regs.vbr + 0x78)); - put_long (context->regs.vbr + 0x78, tmp1); + /* @@@ someone please implement a proper interrupt handler setup here :) */ + tmp1 = here(); + calltrap(deftrap2(bsdsock_int_handler, TRAPFLAG_EXTRA_STACK | TRAPFLAG_NO_RETVAL, "bsdsock_int_handler")); + dw(0x4ef9); + dl(get_long(context->regs.vbr + 0x78)); + put_long(context->regs.vbr + 0x78, tmp1); #endif - m68k_dreg (regs, 0) = 1; - return 0; + m68k_dreg(regs, 0) = 1; + return 0; } -void bsdlib_reset (void) +void bsdlib_reset(void) { - SB, *nsb; - int i; + SB, *nsb; + int i; - if (!SockLibBase) - return; + if (!SockLibBase) + return; - SockLibBase = 0; + SockLibBase = 0; - write_log (_T("BSDSOCK: cleanup start..\n")); - host_sbcleanup (NULL); - for (sb = socketbases; sb; sb = nsb) - { - nsb = sb->next; + write_log(_T("BSDSOCK: cleanup start..\n")); + host_sbcleanup(NULL); + for (sb = socketbases; sb; sb = nsb) + { + nsb = sb->next; - write_log (_T("BSDSOCK: cleanup start socket %x\n"), sb); - host_sbcleanup (sb); + write_log(_T("BSDSOCK: cleanup start socket %x\n"), sb); + host_sbcleanup(sb); - free (sb->dtable); - free (sb->ftable); + free(sb->dtable); + free(sb->ftable); - free (sb); - } - write_log (_T("BSDSOCK: cleanup end\n")); + free(sb); + } + write_log(_T("BSDSOCK: cleanup end\n")); - socketbases = NULL; + socketbases = NULL; #if 1 - sbsigqueue = NULL; + sbsigqueue = NULL; #endif - for (i = 0; i < SOCKPOOLSIZE; i++) - { - if (sockdata->sockpoolids[i] != UNIQUE_ID) - { - sockdata->sockpoolids[i] = UNIQUE_ID; - host_closesocketquick (sockdata->sockpoolsocks[i]); - } - } + for (i = 0; i < SOCKPOOLSIZE; i++) + { + if (sockdata->sockpoolids[i] != UNIQUE_ID) + { + sockdata->sockpoolids[i] = UNIQUE_ID; + host_closesocketquick(sockdata->sockpoolsocks[i]); + } + } - host_sbreset (); - write_log (_T("BSDSOCK: cleanup finished\n")); + host_sbreset(); + write_log(_T("BSDSOCK: cleanup finished\n")); } static const TrapHandler sockfuncs[] = { - bsdsocklib_init, bsdsocklib_Open, bsdsocklib_Close, bsdsocklib_Expunge, - bsdsocklib_socket, bsdsocklib_bind, bsdsocklib_listen, bsdsocklib_accept, - bsdsocklib_connect, bsdsocklib_sendto, bsdsocklib_send, bsdsocklib_recvfrom, bsdsocklib_recv, - bsdsocklib_shutdown, bsdsocklib_setsockopt, bsdsocklib_getsockopt, bsdsocklib_getsockname, - bsdsocklib_getpeername, bsdsocklib_IoctlSocket, bsdsocklib_CloseSocket, bsdsocklib_WaitSelect, - bsdsocklib_SetSocketSignals, bsdsocklib_getdtablesize, bsdsocklib_ObtainSocket, bsdsocklib_ReleaseSocket, - bsdsocklib_ReleaseCopyOfSocket, bsdsocklib_Errno, bsdsocklib_SetErrnoPtr, bsdsocklib_Inet_NtoA, - bsdsocklib_inet_addr, bsdsocklib_Inet_LnaOf, bsdsocklib_Inet_NetOf, bsdsocklib_Inet_MakeAddr, - bsdsocklib_inet_network, bsdsocklib_gethostbyname, bsdsocklib_gethostbyaddr, bsdsocklib_getnetbyname, - bsdsocklib_getnetbyaddr, bsdsocklib_getservbyname, bsdsocklib_getservbyport, bsdsocklib_getprotobyname, - bsdsocklib_getprotobynumber, bsdsocklib_vsyslog, bsdsocklib_Dup2Socket, bsdsocklib_sendmsg, - bsdsocklib_recvmsg, bsdsocklib_gethostname, bsdsocklib_gethostid, bsdsocklib_SocketBaseTagList, - bsdsocklib_GetSocketEvents + bsdsocklib_init, + bsdsocklib_Open, + bsdsocklib_Close, + bsdsocklib_Expunge, + bsdsocklib_socket, + bsdsocklib_bind, + bsdsocklib_listen, + bsdsocklib_accept, + bsdsocklib_connect, + bsdsocklib_sendto, + bsdsocklib_send, + bsdsocklib_recvfrom, + bsdsocklib_recv, + bsdsocklib_shutdown, + bsdsocklib_setsockopt, + bsdsocklib_getsockopt, + bsdsocklib_getsockname, + bsdsocklib_getpeername, + bsdsocklib_IoctlSocket, + bsdsocklib_CloseSocket, + bsdsocklib_WaitSelect, + bsdsocklib_SetSocketSignals, + bsdsocklib_getdtablesize, + bsdsocklib_ObtainSocket, + bsdsocklib_ReleaseSocket, + bsdsocklib_ReleaseCopyOfSocket, + bsdsocklib_Errno, + bsdsocklib_SetErrnoPtr, + bsdsocklib_Inet_NtoA, + bsdsocklib_inet_addr, + bsdsocklib_Inet_LnaOf, + bsdsocklib_Inet_NetOf, + bsdsocklib_Inet_MakeAddr, + bsdsocklib_inet_network, + bsdsocklib_gethostbyname, + bsdsocklib_gethostbyaddr, + bsdsocklib_getnetbyname, + bsdsocklib_getnetbyaddr, + bsdsocklib_getservbyname, + bsdsocklib_getservbyport, + bsdsocklib_getprotobyname, + bsdsocklib_getprotobynumber, + bsdsocklib_vsyslog, + bsdsocklib_Dup2Socket, + bsdsocklib_sendmsg, + bsdsocklib_recvmsg, + bsdsocklib_gethostname, + bsdsocklib_gethostid, + bsdsocklib_SocketBaseTagList, + bsdsocklib_GetSocketEvents }; static const TCHAR * const funcnames[] = { - _T("bsdsocklib_init"), _T("bsdsocklib_Open"), _T("bsdsocklib_Close"), _T("bsdsocklib_Expunge"), - _T("bsdsocklib_socket"), _T("bsdsocklib_bind"), _T("bsdsocklib_listen"), _T("bsdsocklib_accept"), - _T("bsdsocklib_connect"), _T("bsdsocklib_sendto"), _T("bsdsocklib_send"), _T("bsdsocklib_recvfrom"), _T("bsdsocklib_recv"), - _T("bsdsocklib_shutdown"), _T("bsdsocklib_setsockopt"), _T("bsdsocklib_getsockopt"), _T("bsdsocklib_getsockname"), - _T("bsdsocklib_getpeername"), _T("bsdsocklib_IoctlSocket"), _T("bsdsocklib_CloseSocket"), _T("bsdsocklib_WaitSelect"), - _T("bsdsocklib_SetSocketSignals"), _T("bsdsocklib_getdtablesize"), _T("bsdsocklib_ObtainSocket"), _T("bsdsocklib_ReleaseSocket"), - _T("bsdsocklib_ReleaseCopyOfSocket"), _T("bsdsocklib_Errno"), _T("bsdsocklib_SetErrnoPtr"), _T("bsdsocklib_Inet_NtoA"), - _T("bsdsocklib_inet_addr"), _T("bsdsocklib_Inet_LnaOf"), _T("bsdsocklib_Inet_NetOf"), _T("bsdsocklib_Inet_MakeAddr"), - _T("bsdsocklib_inet_network"), _T("bsdsocklib_gethostbyname"), _T("bsdsocklib_gethostbyaddr"), _T("bsdsocklib_getnetbyname"), - _T("bsdsocklib_getnetbyaddr"), _T("bsdsocklib_getservbyname"), _T("bsdsocklib_getservbyport"), _T("bsdsocklib_getprotobyname"), - _T("bsdsocklib_getprotobynumber"), _T("bsdsocklib_vsyslog"), _T("bsdsocklib_Dup2Socket"), _T("bsdsocklib_sendmsg"), - _T("bsdsocklib_recvmsg"), _T("bsdsocklib_gethostname"), _T("bsdsocklib_gethostid"), _T("bsdsocklib_SocketBaseTagList"), - _T("bsdsocklib_GetSocketEvents") + _T("bsdsocklib_init"), + _T("bsdsocklib_Open"), + _T("bsdsocklib_Close"), + _T("bsdsocklib_Expunge"), + _T("bsdsocklib_socket"), + _T("bsdsocklib_bind"), + _T("bsdsocklib_listen"), + _T("bsdsocklib_accept"), + _T("bsdsocklib_connect"), + _T("bsdsocklib_sendto"), + _T("bsdsocklib_send"), + _T("bsdsocklib_recvfrom"), + _T("bsdsocklib_recv"), + _T("bsdsocklib_shutdown"), + _T("bsdsocklib_setsockopt"), + _T("bsdsocklib_getsockopt"), + _T("bsdsocklib_getsockname"), + _T("bsdsocklib_getpeername"), + _T("bsdsocklib_IoctlSocket"), + _T("bsdsocklib_CloseSocket"), + _T("bsdsocklib_WaitSelect"), + _T("bsdsocklib_SetSocketSignals"), + _T("bsdsocklib_getdtablesize"), + _T("bsdsocklib_ObtainSocket"), + _T("bsdsocklib_ReleaseSocket"), + _T("bsdsocklib_ReleaseCopyOfSocket"), + _T("bsdsocklib_Errno"), + _T("bsdsocklib_SetErrnoPtr"), + _T("bsdsocklib_Inet_NtoA"), + _T("bsdsocklib_inet_addr"), + _T("bsdsocklib_Inet_LnaOf"), + _T("bsdsocklib_Inet_NetOf"), + _T("bsdsocklib_Inet_MakeAddr"), + _T("bsdsocklib_inet_network"), + _T("bsdsocklib_gethostbyname"), + _T("bsdsocklib_gethostbyaddr"), + _T("bsdsocklib_getnetbyname"), + _T("bsdsocklib_getnetbyaddr"), + _T("bsdsocklib_getservbyname"), + _T("bsdsocklib_getservbyport"), + _T("bsdsocklib_getprotobyname"), + _T("bsdsocklib_getprotobynumber"), + _T("bsdsocklib_vsyslog"), + _T("bsdsocklib_Dup2Socket"), + _T("bsdsocklib_sendmsg"), + _T("bsdsocklib_recvmsg"), + _T("bsdsocklib_gethostname"), + _T("bsdsocklib_gethostid"), + _T("bsdsocklib_SocketBaseTagList"), + _T("bsdsocklib_GetSocketEvents") }; -static uae_u32 sockfuncvecs[sizeof (sockfuncs) / sizeof (*sockfuncs)]; +static uae_u32 sockfuncvecs[sizeof(sockfuncs) / sizeof(*sockfuncs)]; static uae_u32 res_name, res_id, res_init; -uaecptr bsdlib_startup (uaecptr resaddr) +uaecptr bsdlib_startup(uaecptr resaddr) { - if (res_name == 0 || !currprefs.socket_emu) - return resaddr; - put_word (resaddr + 0x0, 0x4AFC); - put_long (resaddr + 0x2, resaddr); - put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ - put_word (resaddr + 0xA, 0x8004); /* RTF_AUTOINIT, RT_VERSION */ - put_word (resaddr + 0xC, 0x0970); /* NT_LIBRARY, RT_PRI */ - put_long (resaddr + 0xE, res_name); - put_long (resaddr + 0x12, res_id); - put_long (resaddr + 0x16, res_init); - resaddr += 0x1A; - return resaddr; + if (res_name == 0 || !currprefs.socket_emu) + return resaddr; + put_word(resaddr + 0x0, 0x4AFC); + put_long(resaddr + 0x2, resaddr); + put_long(resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ + put_word(resaddr + 0xA, 0x8004); /* RTF_AUTOINIT, RT_VERSION */ + put_word(resaddr + 0xC, 0x0970); /* NT_LIBRARY, RT_PRI */ + put_long(resaddr + 0xE, res_name); + put_long(resaddr + 0x12, res_id); + put_long(resaddr + 0x16, res_init); + resaddr += 0x1A; + return resaddr; } -void bsdlib_install (void) +void bsdlib_install(void) { - int i; + int i; - if (!sockdata) - { - sockdata = xcalloc (struct sockd, 1); - for (i = 0; i < SOCKPOOLSIZE; i++) - sockdata->sockpoolids[i] = UNIQUE_ID; - } + if (!sockdata) + { + sockdata = xcalloc(struct sockd, 1); + for (i = 0; i < SOCKPOOLSIZE; i++) + sockdata->sockpoolids[i] = UNIQUE_ID; + } - if (!init_socket_layer ()) - { - res_name = 0; - res_id = 0; - return; - } + if (!init_socket_layer()) + { + res_name = 0; + res_id = 0; + return; + } - res_name = ds (_T("bsdsocket.library")); - res_id = ds (_T("UAE bsdsocket.library 4.1")); + res_name = ds(_T("bsdsocket.library")); + res_id = ds(_T("UAE bsdsocket.library 4.1")); - for (i = 0; i < (int) (sizeof (sockfuncs) / sizeof (sockfuncs[0])); i++) - { - sockfuncvecs[i] = here (); - calltrap (deftrap2 (sockfuncs[i], TRAPFLAG_EXTRA_STACK, funcnames[i])); - dw (RTS); - } + for (i = 0; i < (int)(sizeof(sockfuncs) / sizeof(sockfuncs[0])); i++) + { + sockfuncvecs[i] = here(); + calltrap(deftrap2(sockfuncs[i], TRAPFLAG_EXTRA_STACK, funcnames[i])); + dw(RTS); + } - /* FuncTable */ - functable = here (); - for (i = 1; i < 4; i++) - dl (sockfuncvecs[i]); /* Open / Close / Expunge */ - dl (EXPANSION_nullfunc); /* Null */ - for (i = 4; i < (int) (sizeof (sockfuncs) / sizeof (sockfuncs[0])); i++) - dl (sockfuncvecs[i]); - dl (0xFFFFFFFF); /* end of table */ + /* FuncTable */ + functable = here(); + for (i = 1; i < 4; i++) + dl(sockfuncvecs[i]); /* Open / Close / Expunge */ + dl(EXPANSION_nullfunc); /* Null */ + for (i = 4; i < (int)(sizeof(sockfuncs) / sizeof(sockfuncs[0])); i++) + dl(sockfuncvecs[i]); + dl(0xFFFFFFFF); /* end of table */ - /* DataTable */ - datatable = here (); - dw (0xE000); /* INITBYTE */ - dw (0x0008); /* LN_TYPE */ - dw (0x0900); /* NT_LIBRARY */ - dw (0xE000); /* INITBYTE */ - dw (0x0009); /* LN_PRI */ - dw (0xCE00); /* -50 */ - dw (0xC000); /* INITLONG */ - dw (0x000A); /* LN_NAME */ - dl (res_name); - dw (0xE000); /* INITBYTE */ - dw (0x000E); /* LIB_FLAGS */ - dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ - dw (0xD000); /* INITWORD */ - dw (0x0014); /* LIB_VERSION */ - dw (0x0004); - dw (0xD000); - dw (0x0016); /* LIB_REVISION */ - dw (0x0001); - dw (0xC000); - dw (0x0018); /* LIB_IDSTRING */ - dl (res_id); - dl (0x00000000); /* end of table */ + /* DataTable */ + datatable = here(); + dw(0xE000); /* INITBYTE */ + dw(0x0008); /* LN_TYPE */ + dw(0x0900); /* NT_LIBRARY */ + dw(0xE000); /* INITBYTE */ + dw(0x0009); /* LN_PRI */ + dw(0xCE00); /* -50 */ + dw(0xC000); /* INITLONG */ + dw(0x000A); /* LN_NAME */ + dl(res_name); + dw(0xE000); /* INITBYTE */ + dw(0x000E); /* LIB_FLAGS */ + dw(0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ + dw(0xD000); /* INITWORD */ + dw(0x0014); /* LIB_VERSION */ + dw(0x0004); + dw(0xD000); + dw(0x0016); /* LIB_REVISION */ + dw(0x0001); + dw(0xC000); + dw(0x0018); /* LIB_IDSTRING */ + dl(res_id); + dl(0x00000000); /* end of table */ - res_init = here (); - dl (512); - dl (functable); - dl (datatable); - dl (*sockfuncvecs); + res_init = here(); + dl(512); + dl(functable); + dl(datatable); + dl(*sockfuncvecs); - write_log (_T("bsdsocket.library installed\n")); + write_log(_T("bsdsocket.library installed\n")); } -#endif /* ! BSDSOCKET */ +#endif /* ! BSDSOCKET */ \ No newline at end of file diff --git a/src/cfgfile.cpp b/src/cfgfile.cpp index 90048c3e..997b4421 100644 --- a/src/cfgfile.cpp +++ b/src/cfgfile.cpp @@ -29,7 +29,7 @@ #include "blkdev.h" #include "calc.h" #include "gfxboard.h" -#include "SDL_keysym.h" +//#include "SDL_keysym.h" static int config_newfilesystem; static struct strlist *temp_lines; diff --git a/src/include/blkdev.h b/src/include/blkdev.h index fd976ee1..2355bb3a 100644 --- a/src/include/blkdev.h +++ b/src/include/blkdev.h @@ -67,17 +67,17 @@ struct cd_toc_head struct device_info { bool open; - int type; - int media_inserted; - int removable; - int write_protected; - int cylinders; - int trackspercylinder; - int sectorspertrack; - int bytespersector; - int bus, target, lun; - int unitnum; - TCHAR label[MAX_DPATH]; + int type; + int media_inserted; + int removable; + int write_protected; + int cylinders; + int trackspercylinder; + int sectorspertrack; + int bytespersector; + int bus, target, lun; + int unitnum; + TCHAR label[MAX_DPATH]; TCHAR mediapath[MAX_DPATH]; TCHAR vendorid[10]; TCHAR productid[18]; @@ -88,44 +88,44 @@ struct device_info { struct amigascsi { - uae_u8 *data; - uae_s32 len; - uae_u8 cmd[16]; - uae_s32 cmd_len; - uae_u8 flags; - uae_u8 sensedata[256]; - uae_u16 sense_len; - uae_u16 cmdactual; - uae_u8 status; - uae_u16 actual; - uae_u16 sactual; + uae_u8 *data; + uae_s32 len; + uae_u8 cmd[16]; + uae_s32 cmd_len; + uae_u8 flags; + uae_u8 sensedata[256]; + uae_u16 sense_len; + uae_u16 cmdactual; + uae_u8 status; + uae_u16 actual; + uae_u16 sactual; }; -typedef int (*check_bus_func)(int flags); -typedef int (*open_bus_func)(int flags); -typedef void (*close_bus_func)(void); -typedef int (*open_device_func)(int, const TCHAR*, int); -typedef void (*close_device_func)(int); +typedef int(*check_bus_func)(int flags); +typedef int(*open_bus_func)(int flags); +typedef void(*close_bus_func)(void); +typedef int(*open_device_func)(int, const TCHAR*, int); +typedef void(*close_device_func)(int); typedef struct device_info* (*info_device_func)(int, struct device_info*, int, int); typedef uae_u8* (*execscsicmd_out_func)(int, uae_u8*, int); typedef uae_u8* (*execscsicmd_in_func)(int, uae_u8*, int, int*); -typedef int (*execscsicmd_direct_func)(int, struct amigascsi*); +typedef int(*execscsicmd_direct_func)(int, struct amigascsi*); -typedef void (*play_subchannel_callback)(uae_u8*, int); -typedef int (*play_status_callback)(int); +typedef void(*play_subchannel_callback)(uae_u8*, int); +typedef int(*play_status_callback)(int); -typedef int (*pause_func)(int, int); -typedef int (*stop_func)(int); -typedef int (*play_func)(int, int, int, int, play_status_callback, play_subchannel_callback); -typedef uae_u32 (*volume_func)(int, uae_u16, uae_u16); -typedef int (*qcode_func)(int, uae_u8*, int); -typedef int (*toc_func)(int, struct cd_toc_head*); -typedef int (*read_func)(int, uae_u8*, int, int); -typedef int (*rawread_func)(int, uae_u8*, int, int, int, uae_u32); -typedef int (*write_func)(int, uae_u8*, int, int); -typedef int (*isatapi_func)(int); -typedef int (*ismedia_func)(int, int); -typedef int (*scsiemu_func)(int, uae_u8*); +typedef int(*pause_func)(int, int); +typedef int(*stop_func)(int); +typedef int(*play_func)(int, int, int, int, play_status_callback, play_subchannel_callback); +typedef uae_u32(*volume_func)(int, uae_u16, uae_u16); +typedef int(*qcode_func)(int, uae_u8*, int); +typedef int(*toc_func)(int, struct cd_toc_head*); +typedef int(*read_func)(int, uae_u8*, int, int); +typedef int(*rawread_func)(int, uae_u8*, int, int, int, uae_u32); +typedef int(*write_func)(int, uae_u8*, int, int); +typedef int(*isatapi_func)(int); +typedef int(*ismedia_func)(int, int); +typedef int(*scsiemu_func)(int, uae_u8*); struct device_functions { const TCHAR *name; @@ -157,58 +157,66 @@ struct device_functions { extern int device_func_init(int flags); extern void device_func_reset(void); -extern int sys_command_open (int unitnum); -extern void sys_command_close (int unitnum); -extern int sys_command_isopen (int unitnum); -extern struct device_info *sys_command_info (int unitnum, struct device_info *di, int); -extern int sys_command_cd_pause (int unitnum, int paused); -extern void sys_command_cd_stop (int unitnum); -extern int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int); -extern int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc); -extern uae_u32 sys_command_cd_volume (int unitnum, uae_u16 volume_left, uae_u16 volume_right); -extern int sys_command_cd_qcode (int unitnum, uae_u8*); -extern int sys_command_cd_toc (int unitnum, struct cd_toc_head*); -extern int sys_command_cd_read (int unitnum, uae_u8 *data, int block, int size); -extern int sys_command_cd_rawread (int unitnum, uae_u8 *data, int sector, int size, int sectorsize); -extern int sys_command_cd_rawread (int unitnum, uae_u8 *data, int sector, int size, int sectorsize, uae_u8 scsicmd9, uae_u8 subs); -extern int sys_command_read (int unitnum, uae_u8 *data, int block, int size); -extern int sys_command_write (int unitnum, uae_u8 *data, int block, int size); -extern int sys_command_scsi_direct_native (int unitnum, int type, struct amigascsi *as); -extern int sys_command_scsi_direct (int unitnum, int type, uaecptr request); -extern int sys_command_ismedia (int unitnum, int quick); -extern struct device_info *sys_command_info_session (int unitnum, struct device_info *di, int, int); -extern bool blkdev_get_info (struct uae_prefs *p, int unitnum, struct device_info *di); +extern int sys_command_open(int unitnum); +extern void sys_command_close(int unitnum); +extern int sys_command_isopen(int unitnum); +extern struct device_info *sys_command_info(int unitnum, struct device_info *di, int); +extern int sys_command_cd_pause(int unitnum, int paused); +extern void sys_command_cd_stop(int unitnum); +extern int sys_command_cd_play(int unitnum, int startlsn, int endlsn, int); +extern int sys_command_cd_play(int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc); +extern uae_u32 sys_command_cd_volume(int unitnum, uae_u16 volume_left, uae_u16 volume_right); +extern int sys_command_cd_qcode(int unitnum, uae_u8*); +extern int sys_command_cd_toc(int unitnum, struct cd_toc_head*); +extern int sys_command_cd_read(int unitnum, uae_u8 *data, int block, int size); +extern int sys_command_cd_rawread(int unitnum, uae_u8 *data, int sector, int size, int sectorsize); +extern int sys_command_cd_rawread(int unitnum, uae_u8 *data, int sector, int size, int sectorsize, uae_u8 scsicmd9, uae_u8 subs); +extern int sys_command_read(int unitnum, uae_u8 *data, int block, int size); +extern int sys_command_write(int unitnum, uae_u8 *data, int block, int size); +extern int sys_command_scsi_direct_native(int unitnum, int type, struct amigascsi *as); +extern int sys_command_scsi_direct(int unitnum, int type, uaecptr request); +extern int sys_command_ismedia(int unitnum, int quick); +extern struct device_info *sys_command_info_session(int unitnum, struct device_info *di, int, int); +extern bool blkdev_get_info(struct uae_prefs *p, int unitnum, struct device_info *di); -extern void scsi_atapi_fixup_pre (uae_u8 *scsi_cmd, int *len, uae_u8 **data, int *datalen, int *parm); -extern void scsi_atapi_fixup_post (uae_u8 *scsi_cmd, int len, uae_u8 *olddata, uae_u8 *data, int *datalen, int parm); +extern void scsi_atapi_fixup_pre(uae_u8 *scsi_cmd, int *len, uae_u8 **data, int *datalen, int *parm); +extern void scsi_atapi_fixup_post(uae_u8 *scsi_cmd, int len, uae_u8 *olddata, uae_u8 *data, int *datalen, int parm); -extern void scsi_log_before (uae_u8 *cdb, int cdblen, uae_u8 *data, int datalen); -extern void scsi_log_after (uae_u8 *data, int datalen, uae_u8 *sense, int senselen); +extern void scsi_log_before(uae_u8 *cdb, int cdblen, uae_u8 *data, int datalen); +extern void scsi_log_after(uae_u8 *data, int datalen, uae_u8 *sense, int senselen); -extern int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, - uae_u8 *scsi_data, int *data_len, uae_u8 *r, int *reply_len, uae_u8 *s, int *sense_len, bool atapi); +extern int scsi_cd_emulate(int unitnum, + uae_u8 *cmdbuf, + int scsi_cmd_len, + uae_u8 *scsi_data, + int *data_len, + uae_u8 *r, + int *reply_len, + uae_u8 *s, + int *sense_len, + bool atapi); -extern void blkdev_vsync (void); +extern void blkdev_vsync(void); -extern int msf2lsn (int msf); -extern int lsn2msf (int lsn); -extern uae_u8 frombcd (uae_u8 v); -extern uae_u8 tobcd (uae_u8 v); -extern int fromlongbcd (uae_u8 *p); -extern void tolongbcd (uae_u8 *p, int v); +extern int msf2lsn(int msf); +extern int lsn2msf(int lsn); +extern uae_u8 frombcd(uae_u8 v); +extern uae_u8 tobcd(uae_u8 v); +extern int fromlongbcd(uae_u8 *p); +extern void tolongbcd(uae_u8 *p, int v); -extern void blkdev_default_prefs (struct uae_prefs *p); -extern void blkdev_fix_prefs (struct uae_prefs *p); -extern int isaudiotrack (struct cd_toc_head*, int block); -extern int isdatatrack (struct cd_toc_head*, int block); +extern void blkdev_default_prefs(struct uae_prefs *p); +extern void blkdev_fix_prefs(struct uae_prefs *p); +extern int isaudiotrack(struct cd_toc_head*, int block); +extern int isdatatrack(struct cd_toc_head*, int block); enum cd_standard_unit { CD_STANDARD_UNIT_DEFAULT, CD_STANDARD_UNIT_AUDIO, CD_STANDARD_UNIT_CDTV, CD_STANDARD_UNIT_CD32 }; -extern int get_standard_cd_unit (enum cd_standard_unit csu); -extern void close_standard_cd_unit (int); -extern void blkdev_cd_change (int unitnum, const TCHAR *name); +extern int get_standard_cd_unit(enum cd_standard_unit csu); +extern void close_standard_cd_unit(int); +extern void blkdev_cd_change(int unitnum, const TCHAR *name); -extern void blkdev_entergui (void); -extern void blkdev_exitgui (void); +extern void blkdev_entergui(void); +extern void blkdev_exitgui(void); -#endif /* BLKDEV_H */ +#endif /* BLKDEV_H */ \ No newline at end of file diff --git a/src/include/gui.h b/src/include/gui.h index d9c1ba05..d94df1ff 100644 --- a/src/include/gui.h +++ b/src/include/gui.h @@ -6,15 +6,15 @@ * Copyright 1996 Bernd Schmidt */ -extern int gui_init (void); -extern int gui_update (void); -extern void gui_exit (void); -extern void gui_led (int, int); -extern void gui_filename (int, const TCHAR *); -extern void gui_flicker_led (int, int); -extern void gui_disk_image_change (int, const TCHAR *, bool writeprotected); +extern int gui_init(void); +extern int gui_update(void); +extern void gui_exit(void); +extern void gui_led(int, int); +extern void gui_filename(int, const TCHAR *); +extern void gui_flicker_led(int, int); +extern void gui_disk_image_change(int, const TCHAR *, bool writeprotected); extern unsigned int gui_ledstate; -extern void gui_display (int shortcut); +extern void gui_display(int shortcut); extern bool no_gui; @@ -43,33 +43,33 @@ extern bool no_gui; struct gui_info { - bool drive_motor[4]; /* motor on off */ - uae_u8 drive_track[4]; /* rw-head track */ - bool drive_writing[4]; /* drive is writing */ - bool drive_disabled[4]; /* drive is disabled */ - bool powerled; /* state of power led */ - uae_s8 drive_side; /* floppy side */ - uae_s8 hd; /* harddrive */ - uae_s8 cd; /* CD */ - bool cpu_halted; - int fps; - int sndbuf, sndbuf_status; - TCHAR df[4][256]; /* inserted image */ - uae_u32 crc32[4]; /* crc32 of image */ + bool drive_motor[4]; /* motor on off */ + uae_u8 drive_track[4]; /* rw-head track */ + bool drive_writing[4]; /* drive is writing */ + bool drive_disabled[4]; /* drive is disabled */ + bool powerled; /* state of power led */ + uae_s8 drive_side; /* floppy side */ + uae_s8 hd; /* harddrive */ + uae_s8 cd; /* CD */ + bool cpu_halted; + int fps; + int sndbuf, sndbuf_status; + TCHAR df[4][256]; /* inserted image */ + uae_u32 crc32[4]; /* crc32 of image */ }; #define NUM_LEDS (LED_MAX) #define VISIBLE_LEDS 6 extern struct gui_info gui_data; -extern void fetch_configurationpath (char *out, int size); +extern void fetch_configurationpath(char *out, int size); extern void set_configurationpath(char *newpath); extern void set_rompath(char *newpath); -extern void fetch_rp9path (char *out, int size); +extern void fetch_rp9path(char *out, int size); extern void fetch_savestatepath(char *out, int size); extern void fetch_screenshotpath(char *out, int size); -extern void extractFileName(const char * str,char *buffer); +extern void extractFileName(const char * str, char *buffer); extern void extractPath(char *str, char *buffer); extern void removeFileExtension(char *filename); extern void ReadConfigFileList(void); @@ -79,9 +79,9 @@ extern void ClearAvailableROMList(void); #include #include typedef struct { - char Name[MAX_PATH]; - char Path[MAX_PATH]; - int ROMType; + char Name[MAX_PATH]; + char Path[MAX_PATH]; + int ROMType; } AvailableROM; extern std::vector lstAvailableROMs; @@ -98,18 +98,32 @@ extern void AddFileToCDList(const char *file, int moveToTop); extern const int amigawidth_values[AMIGAWIDTH_COUNT]; extern const int amigaheight_values[AMIGAHEIGHT_COUNT]; -void notify_user (int msg); -int translate_message (int msg, TCHAR *out); +void notify_user(int msg); +int translate_message(int msg, TCHAR *out); typedef enum { - NUMSG_NEEDEXT2, NUMSG_NOROM, NUMSG_NOROMKEY, - NUMSG_KSROMCRCERROR, NUMSG_KSROMREADERROR, NUMSG_NOEXTROM, - NUMSG_MODRIP_NOTFOUND, NUMSG_MODRIP_FINISHED, NUMSG_MODRIP_SAVE, - NUMSG_KS68EC020, NUMSG_KS68020, NUMSG_KS68030, - NUMSG_ROMNEED, NUMSG_EXPROMNEED, NUMSG_NOZLIB, NUMSG_STATEHD, - NUMSG_NOCAPS, NUMSG_OLDCAPS, NUMSG_KICKREP, NUMSG_KICKREPNO, + NUMSG_NEEDEXT2, + NUMSG_NOROM, + NUMSG_NOROMKEY, + NUMSG_KSROMCRCERROR, + NUMSG_KSROMREADERROR, + NUMSG_NOEXTROM, + NUMSG_MODRIP_NOTFOUND, + NUMSG_MODRIP_FINISHED, + NUMSG_MODRIP_SAVE, + NUMSG_KS68EC020, + NUMSG_KS68020, + NUMSG_KS68030, + NUMSG_ROMNEED, + NUMSG_EXPROMNEED, + NUMSG_NOZLIB, + NUMSG_STATEHD, + NUMSG_NOCAPS, + NUMSG_OLDCAPS, + NUMSG_KICKREP, + NUMSG_KICKREPNO, NUMSG_KS68030PLUS } notify_user_msg; #ifdef WITH_LOGGING extern void ShowLiveInfo(char *msg); -#endif +#endif \ No newline at end of file diff --git a/src/include/sysdeps.h b/src/include/sysdeps.h index dae4d0c2..a7b4642f 100644 --- a/src/include/sysdeps.h +++ b/src/include/sysdeps.h @@ -112,8 +112,8 @@ using namespace std; #define S_ISDIR(val) (S_IFDIR & val) struct utimbuf { - time_t actime; - time_t modtime; + time_t actime; + time_t modtime; }; #endif @@ -141,8 +141,8 @@ struct utimbuf #define utime(file,time) 0 struct utimbuf { - time_t actime; - time_t modtime; + time_t actime; + time_t modtime; }; #endif @@ -218,22 +218,22 @@ typedef uae_u32 uaecptr; #ifdef HAVE_STRDUP #define my_strdup strdup #else -extern TCHAR *my_strdup (const TCHAR*s); +extern TCHAR *my_strdup(const TCHAR*s); #endif -extern TCHAR *my_strdup_ansi (const char*); -extern void my_trim (TCHAR*); -extern TCHAR *my_strdup_trim (const TCHAR*); -extern TCHAR *au (const char*); -extern char *ua (const TCHAR*); -extern TCHAR *au_fs (const char*); -extern char *ua_fs (const TCHAR*, int); -extern char *ua_copy (char *dst, int maxlen, const TCHAR *src); -extern TCHAR *au_copy (TCHAR *dst, int maxlen, const char *src); -extern char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src, int defchar); -extern TCHAR *au_fs_copy (TCHAR *dst, int maxlen, const char *src); -extern char *uutf8 (const TCHAR *s); -extern TCHAR *utf8u (const char *s); +extern TCHAR *my_strdup_ansi(const char*); +extern void my_trim(TCHAR*); +extern TCHAR *my_strdup_trim(const TCHAR*); +extern TCHAR *au(const char*); +extern char *ua(const TCHAR*); +extern TCHAR *au_fs(const char*); +extern char *ua_fs(const TCHAR*, int); +extern char *ua_copy(char *dst, int maxlen, const TCHAR *src); +extern TCHAR *au_copy(TCHAR *dst, int maxlen, const char *src); +extern char *ua_fs_copy(char *dst, int maxlen, const TCHAR *src, int defchar); +extern TCHAR *au_fs_copy(TCHAR *dst, int maxlen, const char *src); +extern char *uutf8(const TCHAR *s); +extern TCHAR *utf8u(const char *s); /* We can only rely on GNU C getting enums right. Mickeysoft VSC++ is known * to have problems, and it's likely that other compilers choke too. */ @@ -294,63 +294,63 @@ extern TCHAR *utf8u (const char *s); #ifdef DONT_HAVE_POSIX #define access posixemu_access -extern int posixemu_access (const TCHAR *, int); +extern int posixemu_access(const TCHAR *, int); #define open posixemu_open -extern int posixemu_open (const TCHAR *, int, int); +extern int posixemu_open(const TCHAR *, int, int); #define close posixemu_close -extern void posixemu_close (int); +extern void posixemu_close(int); #define read posixemu_read -extern int posixemu_read (int, TCHAR *, int); +extern int posixemu_read(int, TCHAR *, int); #define write posixemu_write -extern int posixemu_write (int, const TCHAR *, int); +extern int posixemu_write(int, const TCHAR *, int); #undef lseek #define lseek posixemu_seek -extern int posixemu_seek (int, int, int); +extern int posixemu_seek(int, int, int); #define stat(a,b) posixemu_stat ((a), (b)) -extern int posixemu_stat (const TCHAR *, STAT *); +extern int posixemu_stat(const TCHAR *, STAT *); #define mkdir posixemu_mkdir -extern int mkdir (const TCHAR *, int); +extern int mkdir(const TCHAR *, int); #define rmdir posixemu_rmdir -extern int posixemu_rmdir (const TCHAR *); +extern int posixemu_rmdir(const TCHAR *); #define unlink posixemu_unlink -extern int posixemu_unlink (const TCHAR *); +extern int posixemu_unlink(const TCHAR *); #define truncate posixemu_truncate -extern int posixemu_truncate (const TCHAR *, long int); +extern int posixemu_truncate(const TCHAR *, long int); #define rename posixemu_rename -extern int posixemu_rename (const TCHAR *, const TCHAR *); +extern int posixemu_rename(const TCHAR *, const TCHAR *); #define chmod posixemu_chmod -extern int posixemu_chmod (const TCHAR *, int); +extern int posixemu_chmod(const TCHAR *, int); #define tmpnam posixemu_tmpnam -extern void posixemu_tmpnam (TCHAR *); +extern void posixemu_tmpnam(TCHAR *); #define utime posixemu_utime -extern int posixemu_utime (const TCHAR *, struct utimbuf *); +extern int posixemu_utime(const TCHAR *, struct utimbuf *); #define opendir posixemu_opendir -extern DIR * posixemu_opendir (const TCHAR *); +extern DIR * posixemu_opendir(const TCHAR *); #define readdir posixemu_readdir -extern struct dirent* readdir (DIR *); +extern struct dirent* readdir(DIR *); #define closedir posixemu_closedir -extern void closedir (DIR *); +extern void closedir(DIR *); /* This isn't the best place for this, but it fits reasonably well. The logic * is that you probably don't have POSIX errnos if you don't have the above * functions. */ -extern long dos_errno (void); +extern long dos_errno(void); #endif #ifdef DONT_HAVE_STDIO -extern FILE *stdioemu_fopen (const TCHAR *, const TCHAR *); +extern FILE *stdioemu_fopen(const TCHAR *, const TCHAR *); #define fopen(a,b) stdioemu_fopen(a, b) -extern int stdioemu_fseek (FILE *, int, int); +extern int stdioemu_fseek(FILE *, int, int); #define fseek(a,b,c) stdioemu_fseek(a, b, c) -extern int stdioemu_fread (TCHAR *, int, int, FILE *); +extern int stdioemu_fread(TCHAR *, int, int, FILE *); #define fread(a,b,c,d) stdioemu_fread(a, b, c, d) -extern int stdioemu_fwrite (const TCHAR *, int, int, FILE *); +extern int stdioemu_fwrite(const TCHAR *, int, int, FILE *); #define fwrite(a,b,c,d) stdioemu_fwrite(a, b, c, d) -extern int stdioemu_ftell (FILE *); +extern int stdioemu_ftell(FILE *); #define ftell(a) stdioemu_ftell(a) -extern int stdioemu_fclose (FILE *); +extern int stdioemu_fclose(FILE *); #define fclose(a) stdioemu_fclose(a) #endif @@ -358,9 +358,9 @@ extern int stdioemu_fclose (FILE *); #ifdef DONT_HAVE_MALLOC #define malloc(a) mallocemu_malloc(a) -extern void *mallocemu_malloc (int size); +extern void *mallocemu_malloc(int size); #define free(a) mallocemu_free(a) -extern void mallocemu_free (void *ptr); +extern void mallocemu_free(void *ptr); #endif @@ -380,11 +380,11 @@ extern void mallocemu_free (void *ptr); #define write_log(FORMATO, RESTO...) #define write_log_standard(FORMATO, RESTO...) #else -extern void write_log (const TCHAR *format,...); +extern void write_log(const TCHAR *format, ...); extern FILE *debugfile; #endif -extern void console_out (const TCHAR *, ...); -extern void gui_message (const TCHAR *,...); +extern void console_out(const TCHAR *, ...); +extern void gui_message(const TCHAR *, ...); #ifndef O_BINARY #define O_BINARY 0 @@ -484,9 +484,9 @@ STATIC_INLINE uae_u32 do_byteswap_16(uae_u32 v) { #define xrealloc(T, TP, N) realloc(TP, sizeof (T) * (N)) #if 0 -extern void *xmalloc (size_t); -extern void *xcalloc (size_t, size_t); -extern void xfree (const void*); +extern void *xmalloc(size_t); +extern void *xcalloc(size_t, size_t); +extern void xfree(const void*); #endif #else @@ -498,4 +498,4 @@ extern void xfree (const void*); #endif -#define DBLEQU(f, i) (abs ((f) - (i)) < 0.000001) +#define DBLEQU(f, i) (abs ((f) - (i)) < 0.000001) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index aeae090f..587a3264 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -656,7 +656,6 @@ static int real_main2 (int argc, TCHAR **argv) printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); abort(); } - ; sdlWindow = SDL_CreateWindow("Amiberry v2", SDL_WINDOWPOS_UNDEFINED, diff --git a/src/osdep/pandora.cpp b/src/osdep/pandora.cpp index c7e66af6..454ba786 100644 --- a/src/osdep/pandora.cpp +++ b/src/osdep/pandora.cpp @@ -23,7 +23,7 @@ #include "options.h" #include "threaddep/thread.h" #include "gui.h" -#include "include/memory.h" +#include "memory.h" #include "newcpu.h" #include "custom.h" #include "xwin.h" @@ -96,10 +96,6 @@ void reinit_amiga(void) device_func_reset (); memory_cleanup (); -// At this point, there might run some threads from bsdsocket. -// write_log("Threads in reinit_amiga():\n"); -// dbg_list_threads(); - currprefs = changed_prefs; /* force sound settings change */ currprefs.produce_sound = 0; @@ -258,7 +254,7 @@ void target_default_options (struct uae_prefs *p, int type) p->picasso96_modeflags = RGBFF_CLUT | RGBFF_R5G6B5 | RGBFF_R8G8B8A8; - memset(customControlMap, 0, sizeof(customControlMap)); +// memset(customControlMap, 0, sizeof(customControlMap)); } @@ -268,16 +264,16 @@ void target_save_options(struct zfile *f, struct uae_prefs *p) cfgfile_write(f, "pandora.hide_idle_led", "%d", p->pandora_hide_idle_led); cfgfile_write(f, "pandora.tap_delay", "%d", p->pandora_tapDelay); cfgfile_write(f, "pandora.custom_controls", "%d", p->pandora_customControls); - cfgfile_write(f, "pandora.custom_up", "%d", customControlMap[VK_UP]); - cfgfile_write(f, "pandora.custom_down", "%d", customControlMap[VK_DOWN]); - cfgfile_write(f, "pandora.custom_left", "%d", customControlMap[VK_LEFT]); - cfgfile_write(f, "pandora.custom_right", "%d", customControlMap[VK_RIGHT]); - cfgfile_write(f, "pandora.custom_a", "%d", customControlMap[VK_A]); - cfgfile_write(f, "pandora.custom_b", "%d", customControlMap[VK_B]); - cfgfile_write(f, "pandora.custom_x", "%d", customControlMap[VK_X]); - cfgfile_write(f, "pandora.custom_y", "%d", customControlMap[VK_Y]); - cfgfile_write(f, "pandora.custom_l", "%d", customControlMap[VK_L]); - cfgfile_write(f, "pandora.custom_r", "%d", customControlMap[VK_R]); +// cfgfile_write(f, "pandora.custom_up", "%d", customControlMap[VK_UP]); +// cfgfile_write(f, "pandora.custom_down", "%d", customControlMap[VK_DOWN]); +// cfgfile_write(f, "pandora.custom_left", "%d", customControlMap[VK_LEFT]); +// cfgfile_write(f, "pandora.custom_right", "%d", customControlMap[VK_RIGHT]); +// cfgfile_write(f, "pandora.custom_a", "%d", customControlMap[VK_A]); +// cfgfile_write(f, "pandora.custom_b", "%d", customControlMap[VK_B]); +// cfgfile_write(f, "pandora.custom_x", "%d", customControlMap[VK_X]); +// cfgfile_write(f, "pandora.custom_y", "%d", customControlMap[VK_Y]); +// cfgfile_write(f, "pandora.custom_l", "%d", customControlMap[VK_L]); +// cfgfile_write(f, "pandora.custom_r", "%d", customControlMap[VK_R]); cfgfile_write(f, "pandora.move_x", "%d", p->pandora_horizontal_offset); cfgfile_write(f, "pandora.move_y", "%d", p->pandora_vertical_offset); } @@ -299,16 +295,16 @@ int target_parse_option(struct uae_prefs *p, const char *option, const char *val || cfgfile_intval(option, value, "hide_idle_led", &p->pandora_hide_idle_led, 1) || cfgfile_intval(option, value, "tap_delay", &p->pandora_tapDelay, 1) || cfgfile_intval(option, value, "custom_controls", &p->pandora_customControls, 1) - || cfgfile_intval(option, value, "custom_up", &customControlMap[VK_UP], 1) - || cfgfile_intval(option, value, "custom_down", &customControlMap[VK_DOWN], 1) - || cfgfile_intval(option, value, "custom_left", &customControlMap[VK_LEFT], 1) - || cfgfile_intval(option, value, "custom_right", &customControlMap[VK_RIGHT], 1) - || cfgfile_intval(option, value, "custom_a", &customControlMap[VK_A], 1) - || cfgfile_intval(option, value, "custom_b", &customControlMap[VK_B], 1) - || cfgfile_intval(option, value, "custom_x", &customControlMap[VK_X], 1) - || cfgfile_intval(option, value, "custom_y", &customControlMap[VK_Y], 1) - || cfgfile_intval(option, value, "custom_l", &customControlMap[VK_L], 1) - || cfgfile_intval(option, value, "custom_r", &customControlMap[VK_R], 1) +// || cfgfile_intval(option, value, "custom_up", &customControlMap[VK_UP], 1) +// || cfgfile_intval(option, value, "custom_down", &customControlMap[VK_DOWN], 1) +// || cfgfile_intval(option, value, "custom_left", &customControlMap[VK_LEFT], 1) +// || cfgfile_intval(option, value, "custom_right", &customControlMap[VK_RIGHT], 1) +// || cfgfile_intval(option, value, "custom_a", &customControlMap[VK_A], 1) +// || cfgfile_intval(option, value, "custom_b", &customControlMap[VK_B], 1) +// || cfgfile_intval(option, value, "custom_x", &customControlMap[VK_X], 1) +// || cfgfile_intval(option, value, "custom_y", &customControlMap[VK_Y], 1) +// || cfgfile_intval(option, value, "custom_l", &customControlMap[VK_L], 1) +// || cfgfile_intval(option, value, "custom_r", &customControlMap[VK_R], 1) || cfgfile_intval(option, value, "move_x", &p->pandora_horizontal_offset, 1) || cfgfile_intval(option, value, "move_y", &p->pandora_vertical_offset, 1) ); @@ -665,20 +661,20 @@ void loadAdfDir(void) } -int currVSyncRate = 0; -bool SetVSyncRate(int hz) -{ - char cmd[64]; - - if(currVSyncRate != hz) - { - snprintf((char*)cmd, 64, "sudo /usr/pandora/scripts/op_lcdrate.sh %d", hz); - system(cmd); - currVSyncRate = hz; - return true; - } - return false; -} +//int currVSyncRate = 0; +//bool SetVSyncRate(int hz) +//{ +// char cmd[64]; +// +// if(currVSyncRate != hz) +// { +// snprintf((char*)cmd, 64, "sudo /usr/pandora/scripts/op_lcdrate.sh %d", hz); +// system(cmd); +// currVSyncRate = hz; +// return true; +// } +// return false; +//} void target_reset (void) { @@ -869,7 +865,7 @@ int handle_msgpump (void) default: if (currprefs.pandora_customControls) { - keycode = customControlMap[rEvent.key.keysym.sym]; +// keycode = customControlMap[rEvent.key.keysym.sym]; if (keycode < 0) { // Simulate mouse or joystick @@ -926,7 +922,7 @@ int handle_msgpump (void) default: if (currprefs.pandora_customControls) { - keycode = customControlMap[rEvent.key.keysym.sym]; +// keycode = customControlMap[rEvent.key.keysym.sym]; if (keycode < 0) { // Simulate mouse or joystick diff --git a/src/osdep/pandora_gfx.cpp b/src/osdep/pandora_gfx.cpp index a6d06e63..16d9ae41 100644 --- a/src/osdep/pandora_gfx.cpp +++ b/src/osdep/pandora_gfx.cpp @@ -549,42 +549,42 @@ static int save_thumb(char *path) bool vsync_switchmode (int hz) { - int changed_height = changed_prefs.gfx_size.height; - - if (hz >= 55) - hz = 60; - else - hz = 50; - - if(hz == 50 && currVSyncRate == 60) - { - // Switch from NTSC -> PAL - switch(changed_height) { - case 200: changed_height = 240; break; - case 216: changed_height = 262; break; - case 240: changed_height = 270; break; - case 256: changed_height = 270; break; - case 262: changed_height = 270; break; - case 270: changed_height = 270; break; - } - } - else if(hz == 60 && currVSyncRate == 50) - { - // Switch from PAL -> NTSC - switch(changed_height) { - case 200: changed_height = 200; break; - case 216: changed_height = 200; break; - case 240: changed_height = 200; break; - case 256: changed_height = 216; break; - case 262: changed_height = 216; break; - case 270: changed_height = 240; break; - } - } - - if(changed_height == currprefs.gfx_size.height && hz == currprefs.chipset_refreshrate) - return true; - - changed_prefs.gfx_size.height = changed_height; +// int changed_height = changed_prefs.gfx_size.height; +// +// if (hz >= 55) +// hz = 60; +// else +// hz = 50; +// +// if(hz == 50 && currVSyncRate == 60) +// { +// // Switch from NTSC -> PAL +// switch(changed_height) { +// case 200: changed_height = 240; break; +// case 216: changed_height = 262; break; +// case 240: changed_height = 270; break; +// case 256: changed_height = 270; break; +// case 262: changed_height = 270; break; +// case 270: changed_height = 270; break; +// } +// } +// else if(hz == 60 && currVSyncRate == 50) +// { +// // Switch from PAL -> NTSC +// switch(changed_height) { +// case 200: changed_height = 200; break; +// case 216: changed_height = 200; break; +// case 240: changed_height = 200; break; +// case 256: changed_height = 216; break; +// case 262: changed_height = 216; break; +// case 270: changed_height = 240; break; +// } +// } +// +// if(changed_height == currprefs.gfx_size.height && hz == currprefs.chipset_refreshrate) +// return true; +// +// changed_prefs.gfx_size.height = changed_height; return true; } diff --git a/src/osdep/pandora_gui.cpp b/src/osdep/pandora_gui.cpp index 6aef3d87..e88a1530 100644 --- a/src/osdep/pandora_gui.cpp +++ b/src/osdep/pandora_gui.cpp @@ -2,8 +2,8 @@ #include #include #include -#include -#include +#include +#include #include "sysconfig.h" #include "sysdeps.h" #include "config.h" @@ -30,12 +30,12 @@ #include "filesys.h" #include "autoconf.h" #include "blkdev.h" -#include "SDL.h" +#include #include "threaddep/thread.h" #ifdef RASPBERRY - #include - #include +#include +#include #endif int emulating = 0; @@ -43,26 +43,26 @@ int emulating = 0; extern int screen_is_picasso; struct gui_msg { - int num; - const char *msg; + int num; + const char *msg; }; struct gui_msg gui_msglist[] = { - { NUMSG_NEEDEXT2, "The software uses a non-standard floppy disk format. You may need to use a custom floppy disk image file instead of a standard one. This message will not appear again." }, - { NUMSG_NOROM, "Could not load system ROM, trying system ROM replacement." }, - { NUMSG_NOROMKEY, "Could not find system ROM key file." }, - { NUMSG_KSROMCRCERROR, "System ROM checksum incorrect. The system ROM image file may be corrupt." }, - { NUMSG_KSROMREADERROR, "Error while reading system ROM." }, - { NUMSG_NOEXTROM, "No extended ROM found." }, - { NUMSG_KS68EC020, "The selected system ROM requires a 68EC020 or later CPU." }, - { NUMSG_KS68020, "The selected system ROM requires a 68020 or later CPU." }, - { NUMSG_KS68030, "The selected system ROM requires a 68030 CPU." }, - { NUMSG_STATEHD, "WARNING: Current configuration is not fully compatible with state saves." }, - { NUMSG_KICKREP, "You need to have a floppy disk (image file) in DF0: to use the system ROM replacement." }, - { NUMSG_KICKREPNO, "The floppy disk (image file) in DF0: is not compatible with the system ROM replacement functionality." }, - { NUMSG_ROMNEED, "One of the following system ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs." }, - { NUMSG_EXPROMNEED, "One of the following expansion boot ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs." }, + { NUMSG_NEEDEXT2, "The software uses a non-standard floppy disk format. You may need to use a custom floppy disk image file instead of a standard one. This message will not appear again." }, + { NUMSG_NOROM, "Could not load system ROM, trying system ROM replacement." }, + { NUMSG_NOROMKEY, "Could not find system ROM key file." }, + { NUMSG_KSROMCRCERROR, "System ROM checksum incorrect. The system ROM image file may be corrupt." }, + { NUMSG_KSROMREADERROR, "Error while reading system ROM." }, + { NUMSG_NOEXTROM, "No extended ROM found." }, + { NUMSG_KS68EC020, "The selected system ROM requires a 68EC020 or later CPU." }, + { NUMSG_KS68020, "The selected system ROM requires a 68020 or later CPU." }, + { NUMSG_KS68030, "The selected system ROM requires a 68030 CPU." }, + { NUMSG_STATEHD, "WARNING: Current configuration is not fully compatible with state saves." }, + { NUMSG_KICKREP, "You need to have a floppy disk (image file) in DF0: to use the system ROM replacement." }, + { NUMSG_KICKREPNO, "The floppy disk (image file) in DF0: is not compatible with the system ROM replacement functionality." }, + { NUMSG_ROMNEED, "One of the following system ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs." }, + { NUMSG_EXPROMNEED, "One of the following expansion boot ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs." }, - { -1, "" } + { -1, "" } }; std::vector ConfigFilesList; @@ -73,79 +73,79 @@ std::vector lstMRUCDList; void AddFileToDiskList(const char *file, int moveToTop) { - int i; + int i; - for(i=0; i= lstMRUDiskList.size()) - lstMRUDiskList.insert(lstMRUDiskList.begin(), file); + for (i = 0; i < lstMRUDiskList.size(); ++i) + { + if (!strcasecmp(lstMRUDiskList[i].c_str(), file)) + { + if (moveToTop) + { + lstMRUDiskList.erase(lstMRUDiskList.begin() + i); + lstMRUDiskList.insert(lstMRUDiskList.begin(), file); + } + break; + } + } + if (i >= lstMRUDiskList.size()) + lstMRUDiskList.insert(lstMRUDiskList.begin(), file); - while(lstMRUDiskList.size() > MAX_MRU_DISKLIST) - lstMRUDiskList.pop_back(); + while (lstMRUDiskList.size() > MAX_MRU_DISKLIST) + lstMRUDiskList.pop_back(); } void AddFileToCDList(const char *file, int moveToTop) { - int i; + int i; - for(i=0; i= lstMRUCDList.size()) - lstMRUCDList.insert(lstMRUCDList.begin(), file); + for (i = 0; i < lstMRUCDList.size(); ++i) + { + if (!strcasecmp(lstMRUCDList[i].c_str(), file)) + { + if (moveToTop) + { + lstMRUCDList.erase(lstMRUCDList.begin() + i); + lstMRUCDList.insert(lstMRUCDList.begin(), file); + } + break; + } + } + if (i >= lstMRUCDList.size()) + lstMRUCDList.insert(lstMRUCDList.begin(), file); - while(lstMRUCDList.size() > MAX_MRU_CDLIST) - lstMRUCDList.pop_back(); + while (lstMRUCDList.size() > MAX_MRU_CDLIST) + lstMRUCDList.pop_back(); } void ClearAvailableROMList(void) { - while(lstAvailableROMs.size() > 0) - { - AvailableROM *tmp = lstAvailableROMs[0]; - lstAvailableROMs.erase(lstAvailableROMs.begin()); - delete tmp; - } + while (lstAvailableROMs.size() > 0) + { + AvailableROM *tmp = lstAvailableROMs[0]; + lstAvailableROMs.erase(lstAvailableROMs.begin()); + delete tmp; + } } -static void addrom(struct romdata *rd, char *path) +static void addrom(struct romdata *rd, const char *path) { - AvailableROM *tmp; - char tmpName[MAX_DPATH]; - tmp = new AvailableROM(); - getromname(rd, tmpName); - strncpy(tmp->Name, tmpName, MAX_PATH); - if(path != NULL) - strncpy(tmp->Path, path, MAX_PATH); - tmp->ROMType = rd->type; - lstAvailableROMs.push_back(tmp); - romlist_add(path, rd); + AvailableROM *tmp; + char tmpName[MAX_DPATH]; + tmp = new AvailableROM(); + getromname(rd, tmpName); + strncpy(tmp->Name, tmpName, MAX_PATH); + if (path != NULL) + strncpy(tmp->Path, path, MAX_PATH); + tmp->ROMType = rd->type; + lstAvailableROMs.push_back(tmp); + romlist_add(path, rd); } struct romscandata { - uae_u8 *keybuf; - int keysize; + uae_u8 *keybuf; + int keysize; }; static struct romdata *scan_single_rom_2(struct zfile *f) @@ -198,262 +198,263 @@ static struct romdata *scan_single_rom_2(struct zfile *f) return rd; } -static struct romdata *scan_single_rom (char *path) +static struct romdata *scan_single_rom(char *path) { - struct zfile *z; - char tmp[MAX_DPATH]; - struct romdata *rd; + struct zfile *z; + char tmp[MAX_DPATH]; + struct romdata *rd; - strcpy (tmp, path); - rd = getromdatabypath(path); - if (rd && rd->crc32 == 0xffffffff) - return rd; - z = zfile_fopen (path, "rb", ZFD_NORMAL); - if (!z) - return 0; - return scan_single_rom_2 (z); + strcpy(tmp, path); + rd = getromdatabypath(path); + if (rd && rd->crc32 == 0xffffffff) + return rd; + z = zfile_fopen(path, "rb", ZFD_NORMAL); + if (!z) + return 0; + return scan_single_rom_2(z); } static int isromext(char *path) { - char *ext; - int i; + char *ext; + int i; - if (!path) - return 0; - ext = strrchr (path, '.'); - if (!ext) - return 0; - ext++; + if (!path) + return 0; + ext = strrchr(path, '.'); + if (!ext) + return 0; + ext++; - if (!stricmp (ext, "rom") || !stricmp (ext, "adf") || !stricmp (ext, "key") - || !stricmp (ext, "a500") || !stricmp (ext, "a1200") || !stricmp (ext, "a4000")) - return 1; - for (i = 0; uae_archive_extensions[i]; i++) { - if (!stricmp (ext, uae_archive_extensions[i])) - return 1; - } - return 0; + if (!stricmp(ext, "rom") || !stricmp(ext, "adf") || !stricmp(ext, "key") + || !stricmp(ext, "a500") || !stricmp(ext, "a1200") || !stricmp(ext, "a4000")) + return 1; + for (i = 0; uae_archive_extensions[i]; i++) { + if (!stricmp(ext, uae_archive_extensions[i])) + return 1; + } + return 0; } -static int scan_rom_2 (struct zfile *f, void *dummy) +static int scan_rom_2(struct zfile *f, void *dummy) { - char *path = zfile_getname(f); - struct romdata *rd; + char *path = zfile_getname(f); + struct romdata *rd; - if (!isromext(path)) - return 0; - rd = scan_single_rom_2(f); - if (rd) - addrom (rd, path); - return 0; + if (!isromext(path)) + return 0; + rd = scan_single_rom_2(f); + if (rd) + addrom(rd, path); + return 0; } static void scan_rom(char *path) { - struct romdata *rd; + struct romdata *rd; - if (!isromext(path)) { - //write_log("ROMSCAN: skipping file '%s', unknown extension\n", path); - return; - } - rd = getarcadiarombyname(path); - if (rd) - addrom(rd, path); - else - zfile_zopen (path, scan_rom_2, 0); + if (!isromext(path)) { + //write_log("ROMSCAN: skipping file '%s', unknown extension\n", path); + return; + } + rd = getarcadiarombyname(path); + if (rd) + addrom(rd, path); + else + zfile_zopen(path, scan_rom_2, 0); } void RescanROMs(void) { - std::vector files; - char path[MAX_DPATH]; + std::vector files; + char path[MAX_DPATH]; - romlist_clear(); + romlist_clear(); - ClearAvailableROMList(); - fetch_rompath(path, MAX_DPATH); + ClearAvailableROMList(); + fetch_rompath(path, MAX_DPATH); - load_keyring(&changed_prefs, path); - ReadDirectory(path, NULL, &files); - for(int i=0; icrc32 == 0xffffffff && strncmp(rd->model, "AROS", 4) == 0) - addrom (rd, ":AROS"); + addrom(rd, ":AROS"); id++; } } static void ClearConfigFileList(void) { - while(ConfigFilesList.size() > 0) - { - ConfigFileInfo *tmp = ConfigFilesList[0]; - ConfigFilesList.erase(ConfigFilesList.begin()); - delete tmp; - } + while (ConfigFilesList.size() > 0) + { + ConfigFileInfo *tmp = ConfigFilesList[0]; + ConfigFilesList.erase(ConfigFilesList.begin()); + delete tmp; + } } void ReadConfigFileList(void) { - char path[MAX_PATH]; - std::vector files; - const char *filter_rp9[] = { ".rp9", "\0" }; - const char *filter_uae[] = { ".uae", "\0" }; - const char *filter_conf[] = { ".conf", "\0" }; + char path[MAX_PATH]; + std::vector files; + const char *filter_rp9[] = { ".rp9", "\0" }; + const char *filter_uae[] = { ".uae", "\0" }; + const char *filter_conf[] = { ".conf", "\0" }; - ClearConfigFileList(); + ClearConfigFileList(); - // Add built-in configs: A500 - ConfigFileInfo *buildin = new ConfigFileInfo(); - strcpy(buildin->FullPath, ""); - strcpy(buildin->Name, "Amiga 500"); - strcpy(buildin->Description, _T("Built-in, A500, OCS, 512KB")); - buildin->BuildInID = BUILDINID_A500; - ConfigFilesList.push_back(buildin); + // Add built-in configs: A500 + ConfigFileInfo *buildin = new ConfigFileInfo(); + strcpy(buildin->FullPath, ""); + strcpy(buildin->Name, "Amiga 500"); + strcpy(buildin->Description, _T("Built-in, A500, OCS, 512KB")); + buildin->BuildInID = BUILDINID_A500; + ConfigFilesList.push_back(buildin); - // A1200 - buildin = new ConfigFileInfo(); - strcpy(buildin->FullPath, ""); - strcpy(buildin->Name, "Amiga 1200"); - strcpy(buildin->Description, _T("Built-in, A1200")); - buildin->BuildInID = BUILDINID_A1200; - ConfigFilesList.push_back(buildin); + // A1200 + buildin = new ConfigFileInfo(); + strcpy(buildin->FullPath, ""); + strcpy(buildin->Name, "Amiga 1200"); + strcpy(buildin->Description, _T("Built-in, A1200")); + buildin->BuildInID = BUILDINID_A1200; + ConfigFilesList.push_back(buildin); - // CD32 - buildin = new ConfigFileInfo(); - strcpy(buildin->FullPath, ""); - strcpy(buildin->Name, "CD32"); - strcpy(buildin->Description, _T("Built-in")); - buildin->BuildInID = BUILDINID_CD32; - ConfigFilesList.push_back(buildin); + // CD32 + buildin = new ConfigFileInfo(); + strcpy(buildin->FullPath, ""); + strcpy(buildin->Name, "CD32"); + strcpy(buildin->Description, _T("Built-in")); + buildin->BuildInID = BUILDINID_CD32; + ConfigFilesList.push_back(buildin); - // Read rp9 files - fetch_rp9path(path, MAX_PATH); - ReadDirectory(path, NULL, &files); - FilterFiles(&files, filter_rp9); - for (int i=0; iFullPath, path, MAX_DPATH); - strcat(tmp->FullPath, files[i].c_str()); - strncpy(tmp->Name, files[i].c_str(), MAX_DPATH); - removeFileExtension(tmp->Name); - strcpy(tmp->Description, _T("rp9")); - tmp->BuildInID = BUILDINID_NONE; - ConfigFilesList.push_back(tmp); - } + // Read rp9 files + fetch_rp9path(path, MAX_PATH); + ReadDirectory(path, NULL, &files); + FilterFiles(&files, filter_rp9); + for (int i = 0; i < files.size(); ++i) + { + ConfigFileInfo *tmp = new ConfigFileInfo(); + strncpy(tmp->FullPath, path, MAX_DPATH); + strcat(tmp->FullPath, files[i].c_str()); + strncpy(tmp->Name, files[i].c_str(), MAX_DPATH); + removeFileExtension(tmp->Name); + strcpy(tmp->Description, _T("rp9")); + tmp->BuildInID = BUILDINID_NONE; + ConfigFilesList.push_back(tmp); + } - // Read standard config files - fetch_configurationpath(path, MAX_PATH); - ReadDirectory(path, NULL, &files); - FilterFiles(&files, filter_uae); - for (int i=0; iFullPath, path, MAX_DPATH); - strcat(tmp->FullPath, files[i].c_str()); - strncpy(tmp->Name, files[i].c_str(), MAX_DPATH); - removeFileExtension(tmp->Name); - cfgfile_get_description(tmp->FullPath, tmp->Description); - tmp->BuildInID = BUILDINID_NONE; - ConfigFilesList.push_back(tmp); - } + // Read standard config files + fetch_configurationpath(path, MAX_PATH); + ReadDirectory(path, NULL, &files); + FilterFiles(&files, filter_uae); + for (int i = 0; i < files.size(); ++i) + { + ConfigFileInfo *tmp = new ConfigFileInfo(); + strncpy(tmp->FullPath, path, MAX_DPATH); + strcat(tmp->FullPath, files[i].c_str()); + strncpy(tmp->Name, files[i].c_str(), MAX_DPATH); + removeFileExtension(tmp->Name); + cfgfile_get_description(tmp->FullPath, tmp->Description); + tmp->BuildInID = BUILDINID_NONE; + ConfigFilesList.push_back(tmp); + } - // Read also old style configs - ReadDirectory(path, NULL, &files); - FilterFiles(&files, filter_conf); - for (int i=0; iFullPath, path, MAX_DPATH); - strcat(tmp->FullPath, files[i].c_str()); - strncpy(tmp->Name, files[i].c_str(), MAX_DPATH); - removeFileExtension(tmp->Name); - strcpy(tmp->Description, "Old style configuration file"); - tmp->BuildInID = BUILDINID_NONE; - for(int j=0; jName, tmp->Name)) - { - // Config in new style already in list - delete tmp; - tmp = NULL; - break; - } - } - if(tmp != NULL) - ConfigFilesList.push_back(tmp); - } - } + // Read also old style configs + ReadDirectory(path, NULL, &files); + FilterFiles(&files, filter_conf); + for (int i = 0; i < files.size(); ++i) + { + if (strcmp(files[i].c_str(), "adfdir.conf")) + { + ConfigFileInfo *tmp = new ConfigFileInfo(); + strncpy(tmp->FullPath, path, MAX_DPATH); + strcat(tmp->FullPath, files[i].c_str()); + strncpy(tmp->Name, files[i].c_str(), MAX_DPATH); + removeFileExtension(tmp->Name); + strcpy(tmp->Description, "Old style configuration file"); + tmp->BuildInID = BUILDINID_NONE; + for (int j = 0; j < ConfigFilesList.size(); ++j) + { + if (!strcmp(ConfigFilesList[j]->Name, tmp->Name)) + { + // Config in new style already in list + delete tmp; + tmp = NULL; + break; + } + } + if (tmp != NULL) + ConfigFilesList.push_back(tmp); + } + } } ConfigFileInfo* SearchConfigInList(const char *name) { - for(int i=0; iName, name, MAX_DPATH)) - return ConfigFilesList[i]; - } - return NULL; + for (int i = 0; i < ConfigFilesList.size(); ++i) + { + if (!strncasecmp(ConfigFilesList[i]->Name, name, MAX_DPATH)) + return ConfigFilesList[i]; + } + return NULL; } static void prefs_to_gui() { /* filesys hack */ - changed_prefs.mountitems = currprefs.mountitems; - memcpy(&changed_prefs.mountconfig, &currprefs.mountconfig, MOUNT_CONFIG_SIZE * sizeof (struct uaedev_config_info)); + changed_prefs.mountitems = currprefs.mountitems; + memcpy(&changed_prefs.mountconfig, &currprefs.mountconfig, MOUNT_CONFIG_SIZE * sizeof(struct uaedev_config_info)); } -static void gui_to_prefs (void) +static void gui_to_prefs(void) { /* filesys hack */ - currprefs.mountitems = changed_prefs.mountitems; - memcpy(&currprefs.mountconfig, &changed_prefs.mountconfig, MOUNT_CONFIG_SIZE * sizeof (struct uaedev_config_info)); + currprefs.mountitems = changed_prefs.mountitems; + memcpy(&currprefs.mountconfig, &changed_prefs.mountconfig, MOUNT_CONFIG_SIZE * sizeof(struct uaedev_config_info)); } static void after_leave_gui(void) { // Check if we have to set or clear autofire - int new_af = (changed_prefs.input_autofire_linecnt == 0) ? 0 : 1; - int update = 0; - int num; + int new_af = (changed_prefs.input_autofire_linecnt == 0) ? 0 : 1; + int update = 0; + int num; - for(num = 0; num < 2; ++num) { - if(changed_prefs.jports[num].id == JSEM_JOYS && changed_prefs.jports[num].autofire != new_af) { - changed_prefs.jports[num].autofire = new_af; - update = 1; - } - } - if(update) - inputdevice_updateconfig(NULL, &changed_prefs); + for (num = 0; num < 2; ++num) { + if (changed_prefs.jports[num].id == JSEM_JOYS && changed_prefs.jports[num].autofire != new_af) { + changed_prefs.jports[num].autofire = new_af; + update = 1; + } + } + if (update) + inputdevice_updateconfig(NULL, &changed_prefs); - inputdevice_copyconfig (&changed_prefs, &currprefs); - inputdevice_config_change_test(); + inputdevice_copyconfig(&changed_prefs, &currprefs); + inputdevice_config_change_test(); } -int gui_init (void) +int gui_init(void) { int ret = 0; + emulating = 0; if (lstAvailableROMs.size() == 0) @@ -492,7 +493,7 @@ void gui_purge_events(void) SDL_Event event; SDL_Delay(150); // Strangely PS3 controller always send events, so we need a maximum number of event to purge. - while(SDL_PollEvent(&event) && counter < 50) + while (SDL_PollEvent(&event) && counter < 50) { counter++; SDL_Delay(10); @@ -501,46 +502,46 @@ void gui_purge_events(void) } -int gui_update (void) +int gui_update(void) { - char tmp[MAX_PATH]; + char tmp[MAX_PATH]; - fetch_savestatepath(savestate_fname, MAX_DPATH); - fetch_screenshotpath(screenshot_filename, MAX_DPATH); + fetch_savestatepath(savestate_fname, MAX_DPATH); + fetch_screenshotpath(screenshot_filename, MAX_DPATH); - if(strlen(currprefs.floppyslots[0].df) > 0) - extractFileName(currprefs.floppyslots[0].df, tmp); - else - strncpy(tmp, last_loaded_config, MAX_PATH); + if (strlen(currprefs.floppyslots[0].df) > 0) + extractFileName(currprefs.floppyslots[0].df, tmp); + else + strncpy(tmp, last_loaded_config, MAX_PATH); - strncat(savestate_fname, tmp, MAX_DPATH); - strncat(screenshot_filename, tmp, MAX_DPATH); - removeFileExtension(savestate_fname); - removeFileExtension(screenshot_filename); + strncat(savestate_fname, tmp, MAX_DPATH); + strncat(screenshot_filename, tmp, MAX_DPATH); + removeFileExtension(savestate_fname); + removeFileExtension(screenshot_filename); - switch(currentStateNum) - { - case 1: - strcat(savestate_fname,"-1.uss"); - strcat(screenshot_filename,"-1.png"); - break; - case 2: - strcat(savestate_fname,"-2.uss"); - strcat(screenshot_filename,"-2.png"); - break; - case 3: - strcat(savestate_fname,"-3.uss"); - strcat(screenshot_filename,"-3.png"); - break; - default: - strcat(savestate_fname,".uss"); - strcat(screenshot_filename,".png"); - } - return 0; + switch (currentStateNum) + { + case 1: + strcat(savestate_fname, "-1.uss"); + strcat(screenshot_filename, "-1.png"); + break; + case 2: + strcat(savestate_fname, "-2.uss"); + strcat(screenshot_filename, "-2.png"); + break; + case 3: + strcat(savestate_fname, "-3.uss"); + strcat(screenshot_filename, "-3.png"); + break; + default: + strcat(savestate_fname, ".uss"); + strcat(screenshot_filename, ".png"); + } + return 0; } -void gui_display (int shortcut) +void gui_display(int shortcut) { if (quit_program != 0) return; @@ -550,10 +551,11 @@ void gui_display (int shortcut) if (lstAvailableROMs.size() == 0) RescanROMs(); - graphics_subshutdown(); + prefs_to_gui(); run_gui(); gui_to_prefs(); + update_display(&changed_prefs); /* Clear menu garbage at the bottom of the screen */ @@ -574,147 +576,140 @@ void gui_display (int shortcut) void moveVertical(int value) { changed_prefs.pandora_vertical_offset += value; - if(changed_prefs.pandora_vertical_offset < -16) + if (changed_prefs.pandora_vertical_offset < -16) changed_prefs.pandora_vertical_offset = -16; - else if(changed_prefs.pandora_vertical_offset > 16) + else if (changed_prefs.pandora_vertical_offset > 16) changed_prefs.pandora_vertical_offset = 16; } -void gui_disk_image_change (int unitnum, const char *name, bool writeprotected) +void gui_disk_image_change(int unitnum, const char *name, bool writeprotected) { } -void gui_led (int led, int on) +void gui_led(int led, int on) { -#define LED_ALL -1 // Define for all LEDs + unsigned char kbd_led_status; - unsigned char kbd_led_status; + // Check current prefs/ update if changed + if (currprefs.kbd_led_num != changed_prefs.kbd_led_num) currprefs.kbd_led_num = changed_prefs.kbd_led_num; + if (currprefs.kbd_led_scr != changed_prefs.kbd_led_scr) currprefs.kbd_led_scr = changed_prefs.kbd_led_scr; + if (currprefs.kbd_led_cap != changed_prefs.kbd_led_cap) currprefs.kbd_led_cap = changed_prefs.kbd_led_cap; - // Check current prefs/ update if changed - if (currprefs.kbd_led_num != changed_prefs.kbd_led_num) currprefs.kbd_led_num = changed_prefs.kbd_led_num; - if (currprefs.kbd_led_scr != changed_prefs.kbd_led_scr) currprefs.kbd_led_scr = changed_prefs.kbd_led_scr; - if (currprefs.kbd_led_cap != changed_prefs.kbd_led_cap) currprefs.kbd_led_cap = changed_prefs.kbd_led_cap; + ioctl(0, KDGETLED, &kbd_led_status); - ioctl(0, KDGETLED, &kbd_led_status); + // Handle floppy led status + if (led == LED_DF0 || led == LED_DF1 || led == LED_DF2 || led == LED_DF3) + { + if (currprefs.kbd_led_num == led || currprefs.kbd_led_num == LED_DFs) + { + if (on) kbd_led_status |= LED_NUM; + else kbd_led_status &= ~LED_NUM; + } + if (currprefs.kbd_led_scr == led || currprefs.kbd_led_scr == LED_DFs) + { + if (on) kbd_led_status |= LED_SCR; + else kbd_led_status &= ~LED_SCR; + } + } - // Handle floppy led status - if (led == LED_DF0 || led == LED_DF1 || led == LED_DF2 || led == LED_DF3) - { - if (currprefs.kbd_led_num == led || currprefs.kbd_led_num == LED_DFs) - { - if (on) kbd_led_status |= LED_NUM; - else kbd_led_status &= ~LED_NUM; - } - if (currprefs.kbd_led_scr == led || currprefs.kbd_led_scr == LED_DFs) - { - if (on) kbd_led_status |= LED_SCR; - else kbd_led_status &= ~LED_SCR; - } - } - - // Handle power, hd/cd led status - if (led == LED_POWER || led == LED_HD || led == LED_CD) - { - if (currprefs.kbd_led_num == led) - { - if (on) kbd_led_status |= LED_NUM; - else kbd_led_status &= ~LED_NUM; - } - if (currprefs.kbd_led_scr == led) - { - if (on) kbd_led_status |= LED_SCR; - else kbd_led_status &= ~LED_SCR; - } - } + // Handle power, hd/cd led status + if (led == LED_POWER || led == LED_HD || led == LED_CD) + { + if (currprefs.kbd_led_num == led) + { + if (on) kbd_led_status |= LED_NUM; + else kbd_led_status &= ~LED_NUM; + } + if (currprefs.kbd_led_scr == led) + { + if (on) kbd_led_status |= LED_SCR; + else kbd_led_status &= ~LED_SCR; + } + } - // Handle all LEDs off - if (led == LED_ALL) { - kbd_led_status &= ~LED_NUM; - kbd_led_status &= ~LED_SCR; - } - ioctl(0, KDSETLED, kbd_led_status); + ioctl(0, KDSETLED, kbd_led_status); } -void gui_flicker_led (int led, int unitnum, int status) +void gui_flicker_led(int led, int status) { #ifdef RASPBERRY - gui_led(led, status); + gui_led(led, status); #endif } -void gui_filename (int num, const char *name) +void gui_filename(int num, const char *name) { } -void gui_message (const char *format,...) +void gui_message(const char *format, ...) { - char msg[2048]; - va_list parms; + char msg[2048]; + va_list parms; - va_start (parms, format); - vsprintf( msg, format, parms ); - va_end (parms); + va_start(parms, format); + vsprintf(msg, format, parms); + va_end(parms); - InGameMessage(msg); + InGameMessage(msg); } -void notify_user (int msg) +void notify_user(int msg) { - int i=0; - while(gui_msglist[i].num >= 0) - { - if(gui_msglist[i].num == msg) - { - gui_message(gui_msglist[i].msg); - break; - } - ++i; - } + int i = 0; + while (gui_msglist[i].num >= 0) + { + if (gui_msglist[i].num == msg) + { + gui_message(gui_msglist[i].msg); + break; + } + ++i; + } } -int translate_message (int msg, TCHAR *out) +int translate_message(int msg, TCHAR *out) { - int i=0; - while(gui_msglist[i].num >= 0) - { - if(gui_msglist[i].num == msg) - { - strcpy(out, gui_msglist[i].msg); - return 1; - } - ++i; - } - return 0; + int i = 0; + while (gui_msglist[i].num >= 0) + { + if (gui_msglist[i].num == msg) + { + strcpy(out, gui_msglist[i].msg); + return 1; + } + ++i; + } + return 0; } void FilterFiles(std::vector *files, const char *filter[]) { - for (int q=0; qsize(); q++) - { - std::string tmp = (*files)[q]; + for (int q = 0; q < files->size(); q++) + { + std::string tmp = (*files)[q]; - bool bRemove = true; - for(int f=0; filter[f] != NULL && strlen(filter[f]) > 0; ++f) - { - if(tmp.size() >= strlen(filter[f])) - { - if(!strcasecmp(tmp.substr(tmp.size() - strlen(filter[f])).c_str(), filter[f])) - { - bRemove = false; - break; - } - } - } + bool bRemove = true; + for (int f = 0; filter[f] != NULL && strlen(filter[f]) > 0; ++f) + { + if (tmp.size() >= strlen(filter[f])) + { + if (!strcasecmp(tmp.substr(tmp.size() - strlen(filter[f])).c_str(), filter[f])) + { + bRemove = false; + break; + } + } + } - if(bRemove) - { - files->erase(files->begin() + q); - --q; - } - } + if (bRemove) + { + files->erase(files->begin() + q); + --q; + } + } } @@ -743,49 +738,49 @@ bool DevicenameExists(const char *name) void CreateDefaultDevicename(char *name) { - int freeNum = 0; - bool foundFree = false; + int freeNum = 0; + bool foundFree = false; - while(!foundFree && freeNum < 10) - { - sprintf(name, "DH%d", freeNum); - foundFree = !DevicenameExists(name); - ++freeNum; - } + while (!foundFree && freeNum < 10) + { + sprintf(name, "DH%d", freeNum); + foundFree = !DevicenameExists(name); + ++freeNum; + } } -int tweakbootpri (int bp, int ab, int dnm) +int tweakbootpri(int bp, int ab, int dnm) { - if (dnm) - return BOOTPRI_NOAUTOMOUNT; - if (!ab) - return BOOTPRI_NOAUTOBOOT; - if (bp < -127) - bp = -127; - return bp; + if (dnm) + return BOOTPRI_NOAUTOMOUNT; + if (!ab) + return BOOTPRI_NOAUTOBOOT; + if (bp < -127) + bp = -127; + return bp; } -bool hardfile_testrdb (const TCHAR *filename) +bool hardfile_testrdb(const TCHAR *filename) { bool isrdb = false; - struct zfile *f = zfile_fopen (filename, _T("rb"), ZFD_NORMAL); + struct zfile *f = zfile_fopen(filename, _T("rb"), ZFD_NORMAL); uae_u8 tmp[8]; int i; if (!f) return false; for (i = 0; i < 16; i++) { - zfile_fseek (f, i * 512, SEEK_SET); - memset (tmp, 0, sizeof tmp); - zfile_fread (tmp, 1, sizeof tmp, f); - if (!memcmp (tmp, "RDSK\0\0\0", 7) || !memcmp (tmp, "DRKS\0\0", 6) || (tmp[0] == 0x53 && tmp[1] == 0x10 && tmp[2] == 0x9b && tmp[3] == 0x13 && tmp[4] == 0 && tmp[5] == 0)) { + zfile_fseek(f, i * 512, SEEK_SET); + memset(tmp, 0, sizeof tmp); + zfile_fread(tmp, 1, sizeof tmp, f); + if (!memcmp(tmp, "RDSK\0\0\0", 7) || !memcmp(tmp, "DRKS\0\0", 6) || (tmp[0] == 0x53 && tmp[1] == 0x10 && tmp[2] == 0x9b && tmp[3] == 0x13 && tmp[4] == 0 && tmp[5] == 0)) { // RDSK or ADIDE "encoded" RDSK isrdb = true; break; } } - zfile_fclose (f); - return isrdb; -} + zfile_fclose(f); + return isrdb; +} \ No newline at end of file diff --git a/src/osdep/pandora_input.cpp b/src/osdep/pandora_input.cpp index 177cc634..e7d38b34 100644 --- a/src/osdep/pandora_input.cpp +++ b/src/osdep/pandora_input.cpp @@ -9,7 +9,7 @@ static int joyXviaCustom = 0; static int joyYviaCustom = 0; -static int joyButXviaCustom[7] = { 0, 0, 0, 0, 0, 0, 0}; +static int joyButXviaCustom[7] = { 0, 0, 0, 0, 0, 0, 0 }; static int mouseBut1viaCustom = 0; static int mouseBut2viaCustom = 0; @@ -20,233 +20,247 @@ static int mouseBut2viaCustom = 0; #define FIRST_MOUSE_BUTTON MAX_MOUSE_AXES -static int init_mouse (void) +static int init_mouse(void) { - return 1; + return 1; } -static void close_mouse (void) +static void close_mouse(void) { } -static int acquire_mouse (int num, int flags) +static int acquire_mouse(int num, int flags) { - return 1; + return 1; } -static void unacquire_mouse (int num) +static void unacquire_mouse(int num) { } -static int get_mouse_num (void) +static int get_mouse_num(void) { - return 2; + return 2; } -static TCHAR *get_mouse_friendlyname (int mouse) +static const char *get_mouse_friendlyname(int mouse) { - if(mouse == 0) - return "Nubs as mouse"; - else - return "dPad as mouse"; + if (mouse == 0) + return "Nubs as mouse"; + else + return "dPad as mouse"; } -static TCHAR *get_mouse_uniquename (int mouse) +static const char *get_mouse_uniquename(int mouse) { - if(mouse == 0) - return "MOUSE0"; - else - return "MOUSE1"; + if (mouse == 0) + return "MOUSE0"; + else + return "MOUSE1"; } -static int get_mouse_widget_num (int mouse) +static int get_mouse_widget_num(int mouse) { - return MAX_MOUSE_AXES + MAX_MOUSE_BUTTONS; + return MAX_MOUSE_AXES + MAX_MOUSE_BUTTONS; } -static int get_mouse_widget_first (int mouse, int type) +static int get_mouse_widget_first(int mouse, int type) { - switch (type) { - case IDEV_WIDGET_BUTTON: - return FIRST_MOUSE_BUTTON; - case IDEV_WIDGET_AXIS: - return FIRST_MOUSE_AXIS; - case IDEV_WIDGET_BUTTONAXIS: - return MAX_MOUSE_AXES + MAX_MOUSE_BUTTONS; - } - return -1; + switch (type) { + case IDEV_WIDGET_BUTTON: + return FIRST_MOUSE_BUTTON; + case IDEV_WIDGET_AXIS: + return FIRST_MOUSE_AXIS; + case IDEV_WIDGET_BUTTONAXIS: + return MAX_MOUSE_AXES + MAX_MOUSE_BUTTONS; + } + return -1; } -static int get_mouse_widget_type (int mouse, int num, TCHAR *name, uae_u32 *code) +static int get_mouse_widget_type(int mouse, int num, TCHAR *name, uae_u32 *code) { - if (num >= MAX_MOUSE_AXES && num < MAX_MOUSE_AXES + MAX_MOUSE_BUTTONS) { - if (name) - sprintf (name, "Button %d", num + 1 - MAX_MOUSE_AXES); - return IDEV_WIDGET_BUTTON; - } else if (num < MAX_MOUSE_AXES) { - if (name) { - if(num == 0) - sprintf (name, "X Axis"); - else if (num == 1) - sprintf (name, "Y Axis"); - else - sprintf (name, "Axis %d", num + 1); - } - return IDEV_WIDGET_AXIS; - } - return IDEV_WIDGET_NONE; + if (num >= MAX_MOUSE_AXES && num < MAX_MOUSE_AXES + MAX_MOUSE_BUTTONS) { + if (name) + sprintf(name, "Button %d", num + 1 - MAX_MOUSE_AXES); + return IDEV_WIDGET_BUTTON; + } + else if (num < MAX_MOUSE_AXES) { + if (name) { + if (num == 0) + sprintf(name, "X Axis"); + else if (num == 1) + sprintf(name, "Y Axis"); + else + sprintf(name, "Axis %d", num + 1); + } + return IDEV_WIDGET_AXIS; + } + return IDEV_WIDGET_NONE; } -static void read_mouse (void) +static void read_mouse(void) { - if(currprefs.input_tablet > TABLET_OFF) { - // Mousehack active - int x, y; - SDL_GetMouseState(&x, &y); - setmousestate(0, 0, x, 1); - setmousestate(0, 1, y, 1); - } + if (currprefs.input_tablet > TABLET_OFF) { + // Mousehack active + int x, y; + SDL_GetMouseState(&x, &y); + setmousestate(0, 0, x, 1); + setmousestate(0, 1, y, 1); + } - if(currprefs.jports[0].id == JSEM_MICE + 1 || currprefs.jports[1].id == JSEM_MICE + 1) { - // dPad is mouse -// Uint8 *keystate = SDL_GetKeyState(NULL); - const Uint8 *keystate = SDL_GetKeyboardState(NULL); - int mouseScale = currprefs.input_joymouse_multiplier / 4; + if (currprefs.jports[0].id == JSEM_MICE + 1 || currprefs.jports[1].id == JSEM_MICE + 1) { + // dPad is mouse + const Uint8 *keystate = SDL_GetKeyboardState(NULL); + int mouseScale = currprefs.input_joymouse_multiplier / 4; - if(keystate[VK_LEFT]) - setmousestate(1, 0, -mouseScale, 0); - if(keystate[VK_RIGHT]) - setmousestate(1, 0, mouseScale, 0); - if(keystate[VK_UP]) - setmousestate(1, 1, -mouseScale, 0); - if(keystate[VK_DOWN]) - setmousestate(1, 1, mouseScale, 0); + if (keystate[VK_LEFT]) + setmousestate(1, 0, -mouseScale, 0); + if (keystate[VK_RIGHT]) + setmousestate(1, 0, mouseScale, 0); + if (keystate[VK_UP]) + setmousestate(1, 1, -mouseScale, 0); + if (keystate[VK_DOWN]) + setmousestate(1, 1, mouseScale, 0); - if(!mouseBut1viaCustom) - setmousebuttonstate (1, 0, keystate[VK_A]); // A button -> left mouse - if(!mouseBut2viaCustom) - setmousebuttonstate (1, 1, keystate[VK_B]); // B button -> right mouse - } + if (!mouseBut1viaCustom) + setmousebuttonstate(1, 0, keystate[VK_A]); // A button -> left mouse + if (!mouseBut2viaCustom) + setmousebuttonstate(1, 1, keystate[VK_B]); // B button -> right mouse + } - // Nubs as mouse handled in handle_msgpump() + // Nubs as mouse handled in handle_msgpump() } -static int get_mouse_flags (int num) +static int get_mouse_flags(int num) { - return 0; + return 0; } struct inputdevice_functions inputdevicefunc_mouse = { - init_mouse, close_mouse, acquire_mouse, unacquire_mouse, read_mouse, - get_mouse_num, get_mouse_friendlyname, get_mouse_uniquename, - get_mouse_widget_num, get_mouse_widget_type, - get_mouse_widget_first, - get_mouse_flags + init_mouse, + close_mouse, + acquire_mouse, + unacquire_mouse, + read_mouse, + get_mouse_num, + get_mouse_friendlyname, + get_mouse_uniquename, + get_mouse_widget_num, + get_mouse_widget_type, + get_mouse_widget_first, + get_mouse_flags }; -static void setid (struct uae_input_device *uid, int i, int slot, int sub, int port, int evt, bool gp) +static void setid(struct uae_input_device *uid, int i, int slot, int sub, int port, int evt, bool gp) { if (gp) - inputdevice_sparecopy (&uid[i], slot, 0); - uid[i].eventid[slot][sub] = evt; - uid[i].port[slot][sub] = port + 1; + inputdevice_sparecopy(&uid[i], slot, 0); + uid[i].eventid[slot][sub] = evt; + uid[i].port[slot][sub] = port + 1; } -static void setid_af (struct uae_input_device *uid, int i, int slot, int sub, int port, int evt, int af, bool gp) +static void setid_af(struct uae_input_device *uid, int i, int slot, int sub, int port, int evt, int af, bool gp) { - setid (uid, i, slot, sub, port, evt, gp); - uid[i].flags[slot][sub] &= ~ID_FLAG_AUTOFIRE_MASK; - if (af >= JPORT_AF_NORMAL) - uid[i].flags[slot][sub] |= ID_FLAG_AUTOFIRE; + setid(uid, i, slot, sub, port, evt, gp); + uid[i].flags[slot][sub] &= ~ID_FLAG_AUTOFIRE_MASK; + if (af >= JPORT_AF_NORMAL) + uid[i].flags[slot][sub] |= ID_FLAG_AUTOFIRE; } -int input_get_default_mouse (struct uae_input_device *uid, int i, int port, int af, bool gp, bool wheel, bool joymouseswap) +int input_get_default_mouse(struct uae_input_device *uid, int i, int port, int af, bool gp, bool wheel, bool joymouseswap) { - setid (uid, i, ID_AXIS_OFFSET + 0, 0, port, port ? INPUTEVENT_MOUSE2_HORIZ : INPUTEVENT_MOUSE1_HORIZ, gp); - setid (uid, i, ID_AXIS_OFFSET + 1, 0, port, port ? INPUTEVENT_MOUSE2_VERT : INPUTEVENT_MOUSE1_VERT, gp); - setid_af (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af, gp); - setid (uid, i, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON, gp); + setid(uid, i, ID_AXIS_OFFSET + 0, 0, port, port ? INPUTEVENT_MOUSE2_HORIZ : INPUTEVENT_MOUSE1_HORIZ, gp); + setid(uid, i, ID_AXIS_OFFSET + 1, 0, port, port ? INPUTEVENT_MOUSE2_VERT : INPUTEVENT_MOUSE1_VERT, gp); + setid_af(uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af, gp); + setid(uid, i, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON, gp); - if (i == 0) - return 1; - return 0; + if (i == 0) + return 1; + return 0; } -static int init_kb (void) +static int init_kb(void) { - return 1; + return 1; } -static void close_kb (void) +static void close_kb(void) { } -static int acquire_kb (int num, int flags) +static int acquire_kb(int num, int flags) { - return 1; + return 1; } -static void unacquire_kb (int num) +static void unacquire_kb(int num) { } -static void read_kb (void) +static void read_kb(void) { } -static int get_kb_num (void) +static int get_kb_num(void) { - return 1; + return 1; } -static TCHAR *get_kb_friendlyname (int kb) +static const char *get_kb_friendlyname(int kb) { - return strdup("Default Keyboard"); + return strdup("Default Keyboard"); } -static TCHAR *get_kb_uniquename (int kb) +static const char *get_kb_uniquename(int kb) { - return strdup("KEYBOARD0"); + return strdup("KEYBOARD0"); } -static int get_kb_widget_num (int kb) +static int get_kb_widget_num(int kb) { - return 255; + return 255; } -static int get_kb_widget_first (int kb, int type) +static int get_kb_widget_first(int kb, int type) { - return 0; + return 0; } -static int get_kb_widget_type (int kb, int num, TCHAR *name, uae_u32 *code) +static int get_kb_widget_type(int kb, int num, TCHAR *name, uae_u32 *code) { - if(code) - *code = num; - return IDEV_WIDGET_KEY; + if (code) + *code = num; + return IDEV_WIDGET_KEY; } -static int get_kb_flags (int num) +static int get_kb_flags(int num) { - return 0; + return 0; } struct inputdevice_functions inputdevicefunc_keyboard = { - init_kb, close_kb, acquire_kb, unacquire_kb, read_kb, - get_kb_num, get_kb_friendlyname, get_kb_uniquename, - get_kb_widget_num, get_kb_widget_type, + init_kb, + close_kb, + acquire_kb, + unacquire_kb, + read_kb, + get_kb_num, + get_kb_friendlyname, + get_kb_uniquename, + get_kb_widget_num, + get_kb_widget_type, get_kb_widget_first, get_kb_flags }; -int input_get_default_keyboard (int num) +int input_get_default_keyboard(int num) { - if (num == 0) { - return 1; - } - return 0; + if (num == 0) { + return 1; + } + return 0; } @@ -264,13 +278,13 @@ static char IsPS3Controller[MAX_INPUT_DEVICES]; static SDL_Joystick* Joysticktable[MAX_INPUT_DEVICES]; -static int get_joystick_num (void) +static int get_joystick_num(void) { // Keep joystick 0 as Pandora implementation... - return (nr_joysticks + 1); + return (nr_joysticks + 1); } -static int init_joystick (void) +static int init_joystick(void) { //This function is called too many times... we can filter if number of joy is good... if (nr_joysticks == SDL_NumJoysticks()) @@ -299,329 +313,338 @@ static int init_joystick (void) return 1; } -static void close_joystick (void) +static void close_joystick(void) { - for (int cpt; cpt < nr_joysticks; cpt++) - { - SDL_JoystickClose (Joysticktable[cpt]); - } + for (int cpt; cpt < nr_joysticks; cpt++) + { + SDL_JoystickClose(Joysticktable[cpt]); + } } -static int acquire_joystick (int num, int flags) +static int acquire_joystick(int num, int flags) { - return 1; + return 1; } -static void unacquire_joystick (int num) +static void unacquire_joystick(int num) { } -static TCHAR *get_joystick_friendlyname (int joy) +static const char *get_joystick_friendlyname(int joy) { - if (joy == 0) - return "dPad as joystick"; - else - return JoystickName[joy - 1]; + if (joy == 0) + return "dPad as joystick"; + else + return JoystickName[joy - 1]; } -static TCHAR *get_joystick_uniquename (int joy) +static const char *get_joystick_uniquename(int joy) { - if (joy == 0) - return "JOY0"; - if (joy == 1) - return "JOY1"; - if (joy == 2) - return "JOY2"; - if (joy == 3) - return "JOY3"; - if (joy == 4) - return "JOY4"; - if (joy == 5) - return "JOY5"; - if (joy == 6) - return "JOY6"; + if (joy == 0) + return "JOY0"; + if (joy == 1) + return "JOY1"; + if (joy == 2) + return "JOY2"; + if (joy == 3) + return "JOY3"; + if (joy == 4) + return "JOY4"; + if (joy == 5) + return "JOY5"; + if (joy == 6) + return "JOY6"; - return "JOY7"; + return "JOY7"; } -static int get_joystick_widget_num (int joy) +static int get_joystick_widget_num(int joy) { - return MAX_JOY_AXES + MAX_JOY_BUTTONS; + return MAX_JOY_AXES + MAX_JOY_BUTTONS; } -static int get_joystick_widget_first (int joy, int type) +static int get_joystick_widget_first(int joy, int type) { - switch (type) { - case IDEV_WIDGET_BUTTON: - return FIRST_JOY_BUTTON; - case IDEV_WIDGET_AXIS: - return FIRST_JOY_AXIS; - case IDEV_WIDGET_BUTTONAXIS: - return MAX_JOY_AXES + MAX_JOY_BUTTONS; - } - return -1; + switch (type) { + case IDEV_WIDGET_BUTTON: + return FIRST_JOY_BUTTON; + case IDEV_WIDGET_AXIS: + return FIRST_JOY_AXIS; + case IDEV_WIDGET_BUTTONAXIS: + return MAX_JOY_AXES + MAX_JOY_BUTTONS; + } + return -1; } -static int get_joystick_widget_type (int joy, int num, TCHAR *name, uae_u32 *code) +static int get_joystick_widget_type(int joy, int num, TCHAR *name, uae_u32 *code) { - if (num >= MAX_JOY_AXES && num < MAX_JOY_AXES + MAX_JOY_BUTTONS) { - if (name) { - switch(num) - { - case FIRST_JOY_BUTTON: - sprintf (name, "Button X/CD32 red"); - break; - case FIRST_JOY_BUTTON + 1: - sprintf (name, "Button B/CD32 blue"); - break; - case FIRST_JOY_BUTTON + 2: - sprintf (name, "Button A/CD32 green"); - break; - case FIRST_JOY_BUTTON + 3: - sprintf (name, "Button Y/CD32 yellow"); - break; - case FIRST_JOY_BUTTON + 4: - sprintf (name, "CD32 start"); - break; - case FIRST_JOY_BUTTON + 5: - sprintf (name, "CD32 ffw"); - break; - case FIRST_JOY_BUTTON + 6: - sprintf (name, "CD32 rwd"); - break; - } - } - return IDEV_WIDGET_BUTTON; - } else if (num < MAX_JOY_AXES) { - if (name) { - if(num == 0) - sprintf (name, "X Axis"); - else if (num == 1) - sprintf (name, "Y Axis"); - else - sprintf (name, "Axis %d", num + 1); - } - return IDEV_WIDGET_AXIS; - } - return IDEV_WIDGET_NONE; + if (num >= MAX_JOY_AXES && num < MAX_JOY_AXES + MAX_JOY_BUTTONS) { + if (name) { + switch (num) + { + case FIRST_JOY_BUTTON: + sprintf(name, "Button X/CD32 red"); + break; + case FIRST_JOY_BUTTON + 1: + sprintf(name, "Button B/CD32 blue"); + break; + case FIRST_JOY_BUTTON + 2: + sprintf(name, "Button A/CD32 green"); + break; + case FIRST_JOY_BUTTON + 3: + sprintf(name, "Button Y/CD32 yellow"); + break; + case FIRST_JOY_BUTTON + 4: + sprintf(name, "CD32 start"); + break; + case FIRST_JOY_BUTTON + 5: + sprintf(name, "CD32 ffw"); + break; + case FIRST_JOY_BUTTON + 6: + sprintf(name, "CD32 rwd"); + break; + } + } + return IDEV_WIDGET_BUTTON; + } + else if (num < MAX_JOY_AXES) { + if (name) { + if (num == 0) + sprintf(name, "X Axis"); + else if (num == 1) + sprintf(name, "Y Axis"); + else + sprintf(name, "Axis %d", num + 1); + } + return IDEV_WIDGET_AXIS; + } + return IDEV_WIDGET_NONE; } -static int get_joystick_flags (int num) +static int get_joystick_flags(int num) { - return 0; + return 0; } -static void read_joystick (void) +static void read_joystick(void) { - for (int joyid = 0; joyid < MAX_JPORTS ; joyid ++) - // First handle fake joystick from pandora... - if(currprefs.jports[joyid].id == JSEM_JOYS) - { -// const Uint8 *keystate = SDL_GetKeyboardState(NULL); -// -// if(!keystate[VK_R]) -// { // Right shoulder + dPad -> cursor keys -// int axis = (keystate[VK_LEFT] ? -32767 : (keystate[VK_RIGHT] ? 32767 : 0)); -// if(!joyXviaCustom) -// setjoystickstate (0, 0, axis, 32767); -// axis = (keystate[VK_UP] ? -32767 : (keystate[VK_DOWN] ? 32767 : 0)); -// if(!joyYviaCustom) -// setjoystickstate (0, 1, axis, 32767); -// } -// if(!joyButXviaCustom[0]) -// setjoybuttonstate (0, 0, keystate[VK_X]); -// if(!joyButXviaCustom[1]) -// setjoybuttonstate (0, 1, keystate[VK_B]); -// if(!joyButXviaCustom[2]) -// setjoybuttonstate (0, 2, keystate[VK_A]); -// if(!joyButXviaCustom[3]) -// setjoybuttonstate (0, 3, keystate[VK_Y]); -// -// int cd32_start = 0, cd32_ffw = 0, cd32_rwd = 0; -// if(keystate[SDLK_LALT]) { // Pandora Start button -// if(keystate[VK_L]) // Left shoulder -// cd32_rwd = 1; -// else if (keystate[VK_R]) // Right shoulder -// cd32_ffw = 1; -// else -// cd32_start = 1; -// } -// if(!joyButXviaCustom[6]) -// setjoybuttonstate (0, 6, cd32_start); -// if(!joyButXviaCustom[5]) -// setjoybuttonstate (0, 5, cd32_ffw); -// if(!joyButXviaCustom[4]) -// setjoybuttonstate (0, 4, cd32_rwd); - } - else if (jsem_isjoy(joyid,&currprefs) != -1) - { - // Now we handle real SDL joystick... - int hostjoyid = currprefs.jports[joyid].id - JSEM_JOYS -1; - int hat = SDL_JoystickGetHat(Joysticktable[hostjoyid],0); - int val = SDL_JoystickGetAxis(Joysticktable[hostjoyid], 0); + for (int joyid = 0; joyid < MAX_JPORTS; joyid++) + // First handle fake joystick from pandora... + if (currprefs.jports[joyid].id == JSEM_JOYS) + { +// const Uint8 *keystate = SDL_GetKeyboardState(NULL); + +// if (!keystate[VK_R]) +// { // Right shoulder + dPad -> cursor keys +// int axis = (keystate[VK_LEFT] ? -32767 : (keystate[VK_RIGHT] ? 32767 : 0)); +// if (!joyXviaCustom) +// setjoystickstate(0, 0, axis, 32767); +// axis = (keystate[VK_UP] ? -32767 : (keystate[VK_DOWN] ? 32767 : 0)); +// if (!joyYviaCustom) +// setjoystickstate(0, 1, axis, 32767); +// } +// if (!joyButXviaCustom[0]) +// setjoybuttonstate(0, 0, keystate[VK_X]); +// if (!joyButXviaCustom[1]) +// setjoybuttonstate(0, 1, keystate[VK_B]); +// if (!joyButXviaCustom[2]) +// setjoybuttonstate(0, 2, keystate[VK_A]); +// if (!joyButXviaCustom[3]) +// setjoybuttonstate(0, 3, keystate[VK_Y]); - if (hat & SDL_HAT_RIGHT) - setjoystickstate (hostjoyid + 1, 0, 32767, 32767); - else - if (hat & SDL_HAT_LEFT) - setjoystickstate (hostjoyid + 1, 0, -32767, 32767); - else - setjoystickstate (hostjoyid + 1, 0, val, 32767); - val = SDL_JoystickGetAxis(Joysticktable[hostjoyid], 1); - if (hat & SDL_HAT_UP) - setjoystickstate (hostjoyid + 1, 1, -32767, 32767); - else - if (hat & SDL_HAT_DOWN) - setjoystickstate (hostjoyid + 1, 1, 32767, 32767); - else - setjoystickstate (hostjoyid + 1, 1, val, 32767); + int cd32_start = 0, cd32_ffw = 0, cd32_rwd = 0; +// if (keystate[SDLK_LALT]) { // Pandora Start button +// if (keystate[VK_L]) // Left shoulder +// cd32_rwd = 1; +// else if (keystate[VK_R]) // Right shoulder +// cd32_ffw = 1; +// else +// cd32_start = 1; +// } + if (!joyButXviaCustom[6]) + setjoybuttonstate(0, 6, cd32_start); + if (!joyButXviaCustom[5]) + setjoybuttonstate(0, 5, cd32_ffw); + if (!joyButXviaCustom[4]) + setjoybuttonstate(0, 4, cd32_rwd); + } + else if (jsem_isjoy(joyid, &currprefs) != -1) + { + // Now we handle real SDL joystick... + int hostjoyid = currprefs.jports[joyid].id - JSEM_JOYS - 1; + int hat = SDL_JoystickGetHat(Joysticktable[hostjoyid], 0); + int val = SDL_JoystickGetAxis(Joysticktable[hostjoyid], 0); - setjoybuttonstate (hostjoyid + 1, 0, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 0) & 1) ); - setjoybuttonstate (hostjoyid + 1, 1, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 1) & 1) ); - setjoybuttonstate (hostjoyid + 1, 2, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 2) & 1) ); - setjoybuttonstate (hostjoyid + 1, 3, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 3) & 1) ); + if (hat & SDL_HAT_RIGHT) + setjoystickstate(hostjoyid + 1, 0, 32767, 32767); + else + if (hat & SDL_HAT_LEFT) + setjoystickstate(hostjoyid + 1, 0, -32767, 32767); + else + setjoystickstate(hostjoyid + 1, 0, val, 32767); + val = SDL_JoystickGetAxis(Joysticktable[hostjoyid], 1); + if (hat & SDL_HAT_UP) + setjoystickstate(hostjoyid + 1, 1, -32767, 32767); + else + if (hat & SDL_HAT_DOWN) + setjoystickstate(hostjoyid + 1, 1, 32767, 32767); + else + setjoystickstate(hostjoyid + 1, 1, val, 32767); - // cd32 start, ffw, rwd - setjoybuttonstate (hostjoyid + 1, 4, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 4) & 1) ); - setjoybuttonstate (hostjoyid + 1, 5, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 5) & 1) ); - setjoybuttonstate (hostjoyid + 1, 6, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 6) & 1) ); + setjoybuttonstate(hostjoyid + 1, 0, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 0) & 1)); + setjoybuttonstate(hostjoyid + 1, 1, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 1) & 1)); + setjoybuttonstate(hostjoyid + 1, 2, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 2) & 1)); + setjoybuttonstate(hostjoyid + 1, 3, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 3) & 1)); - if (IsPS3Controller[hostjoyid]) - { - setjoybuttonstate (hostjoyid + 1, 0, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 13) & 1) ); - setjoybuttonstate (hostjoyid + 1, 1, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 14) & 1) ); + // cd32 start, ffw, rwd + setjoybuttonstate(hostjoyid + 1, 4, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 4) & 1)); + setjoybuttonstate(hostjoyid + 1, 5, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 5) & 1)); + setjoybuttonstate(hostjoyid + 1, 6, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 6) & 1)); - // Simulate a top with button 4 - if ( SDL_JoystickGetButton(Joysticktable[hostjoyid], 4)) - setjoystickstate (hostjoyid + 1, 1, -32767, 32767); - // Simulate a right with button 5 - if ( SDL_JoystickGetButton(Joysticktable[hostjoyid], 5)) - setjoystickstate (hostjoyid + 1, 0, 32767, 32767); - // Simulate a bottom with button 6 - if ( SDL_JoystickGetButton(Joysticktable[hostjoyid], 6)) - setjoystickstate (hostjoyid + 1, 1, 32767, 32767); - // Simulate a left with button 7 - if ( SDL_JoystickGetButton(Joysticktable[hostjoyid], 7)) - setjoystickstate (hostjoyid + 1, 0, -32767, 32767); - } - } + if (IsPS3Controller[hostjoyid]) + { + setjoybuttonstate(hostjoyid + 1, 0, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 13) & 1)); + setjoybuttonstate(hostjoyid + 1, 1, (SDL_JoystickGetButton(Joysticktable[hostjoyid], 14) & 1)); + + // Simulate a top with button 4 + if (SDL_JoystickGetButton(Joysticktable[hostjoyid], 4)) + setjoystickstate(hostjoyid + 1, 1, -32767, 32767); + // Simulate a right with button 5 + if (SDL_JoystickGetButton(Joysticktable[hostjoyid], 5)) + setjoystickstate(hostjoyid + 1, 0, 32767, 32767); + // Simulate a bottom with button 6 + if (SDL_JoystickGetButton(Joysticktable[hostjoyid], 6)) + setjoystickstate(hostjoyid + 1, 1, 32767, 32767); + // Simulate a left with button 7 + if (SDL_JoystickGetButton(Joysticktable[hostjoyid], 7)) + setjoystickstate(hostjoyid + 1, 0, -32767, 32767); + } + } } struct inputdevice_functions inputdevicefunc_joystick = { - init_joystick, close_joystick, acquire_joystick, unacquire_joystick, - read_joystick, get_joystick_num, get_joystick_friendlyname, get_joystick_uniquename, - get_joystick_widget_num, get_joystick_widget_type, + init_joystick, + close_joystick, + acquire_joystick, + unacquire_joystick, + read_joystick, + get_joystick_num, + get_joystick_friendlyname, + get_joystick_uniquename, + get_joystick_widget_num, + get_joystick_widget_type, get_joystick_widget_first, get_joystick_flags }; -int input_get_default_joystick (struct uae_input_device *uid, int num, int port, int af, int mode, bool gp, bool joymouseswap) +int input_get_default_joystick(struct uae_input_device *uid, int num, int port, int af, int mode, bool gp, bool joymouseswap) { - int h, v; + int h, v; - h = port ? INPUTEVENT_JOY2_HORIZ : INPUTEVENT_JOY1_HORIZ;; - v = port ? INPUTEVENT_JOY2_VERT : INPUTEVENT_JOY1_VERT; + h = port ? INPUTEVENT_JOY2_HORIZ : INPUTEVENT_JOY1_HORIZ; + ; + v = port ? INPUTEVENT_JOY2_VERT : INPUTEVENT_JOY1_VERT; - setid (uid, num, ID_AXIS_OFFSET + 0, 0, port, h, gp); - setid (uid, num, ID_AXIS_OFFSET + 1, 0, port, v, gp); + setid(uid, num, ID_AXIS_OFFSET + 0, 0, port, h, gp); + setid(uid, num, ID_AXIS_OFFSET + 1, 0, port, v, gp); - setid_af (uid, num, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af, gp); - setid (uid, num, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON, gp); - setid (uid, num, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_3RD_BUTTON : INPUTEVENT_JOY1_3RD_BUTTON, gp); + setid_af(uid, num, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af, gp); + setid(uid, num, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON, gp); + setid(uid, num, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_3RD_BUTTON : INPUTEVENT_JOY1_3RD_BUTTON, gp); - if (mode == JSEM_MODE_JOYSTICK_CD32) { - setid_af (uid, num, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_CD32_RED : INPUTEVENT_JOY1_CD32_RED, af, gp); - setid (uid, num, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_CD32_BLUE : INPUTEVENT_JOY1_CD32_BLUE, gp); - setid (uid, num, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_CD32_GREEN : INPUTEVENT_JOY1_CD32_GREEN, gp); - setid (uid, num, ID_BUTTON_OFFSET + 3, 0, port, port ? INPUTEVENT_JOY2_CD32_YELLOW : INPUTEVENT_JOY1_CD32_YELLOW, gp); - setid (uid, num, ID_BUTTON_OFFSET + 4, 0, port, port ? INPUTEVENT_JOY2_CD32_RWD : INPUTEVENT_JOY1_CD32_RWD, gp); - setid (uid, num, ID_BUTTON_OFFSET + 5, 0, port, port ? INPUTEVENT_JOY2_CD32_FFW : INPUTEVENT_JOY1_CD32_FFW, gp); - setid (uid, num, ID_BUTTON_OFFSET + 6, 0, port, port ? INPUTEVENT_JOY2_CD32_PLAY : INPUTEVENT_JOY1_CD32_PLAY, gp); - } - if (num == 0) { - return 1; - } - return 0; + if (mode == JSEM_MODE_JOYSTICK_CD32) { + setid_af(uid, num, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_CD32_RED : INPUTEVENT_JOY1_CD32_RED, af, gp); + setid(uid, num, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_CD32_BLUE : INPUTEVENT_JOY1_CD32_BLUE, gp); + setid(uid, num, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_CD32_GREEN : INPUTEVENT_JOY1_CD32_GREEN, gp); + setid(uid, num, ID_BUTTON_OFFSET + 3, 0, port, port ? INPUTEVENT_JOY2_CD32_YELLOW : INPUTEVENT_JOY1_CD32_YELLOW, gp); + setid(uid, num, ID_BUTTON_OFFSET + 4, 0, port, port ? INPUTEVENT_JOY2_CD32_RWD : INPUTEVENT_JOY1_CD32_RWD, gp); + setid(uid, num, ID_BUTTON_OFFSET + 5, 0, port, port ? INPUTEVENT_JOY2_CD32_FFW : INPUTEVENT_JOY1_CD32_FFW, gp); + setid(uid, num, ID_BUTTON_OFFSET + 6, 0, port, port ? INPUTEVENT_JOY2_CD32_PLAY : INPUTEVENT_JOY1_CD32_PLAY, gp); + } + if (num == 0) { + return 1; + } + return 0; } -int input_get_default_joystick_analog (struct uae_input_device *uid, int num, int port, int af, bool joymouseswap) +int input_get_default_joystick_analog(struct uae_input_device *uid, int num, int port, int af, bool joymouseswap) { - return 0; + return 0; } void SimulateMouseOrJoy(int code, int keypressed) { - switch(code) { - case REMAP_MOUSEBUTTON_LEFT: - mouseBut1viaCustom = keypressed; - setmousebuttonstate (0, 0, keypressed); - setmousebuttonstate (1, 0, keypressed); - break; + switch (code) { + case REMAP_MOUSEBUTTON_LEFT: + mouseBut1viaCustom = keypressed; + setmousebuttonstate(0, 0, keypressed); + setmousebuttonstate(1, 0, keypressed); + break; - case REMAP_MOUSEBUTTON_RIGHT: - mouseBut2viaCustom = keypressed; - setmousebuttonstate (0, 1, keypressed); - setmousebuttonstate (1, 1, keypressed); - break; + case REMAP_MOUSEBUTTON_RIGHT: + mouseBut2viaCustom = keypressed; + setmousebuttonstate(0, 1, keypressed); + setmousebuttonstate(1, 1, keypressed); + break; - case REMAP_JOYBUTTON_ONE: - joyButXviaCustom[0] = keypressed; - setjoybuttonstate (0, 0, keypressed); - break; + case REMAP_JOYBUTTON_ONE: + joyButXviaCustom[0] = keypressed; + setjoybuttonstate(0, 0, keypressed); + break; - case REMAP_JOYBUTTON_TWO: - joyButXviaCustom[1] = keypressed; - setjoybuttonstate (0, 1, keypressed); - break; + case REMAP_JOYBUTTON_TWO: + joyButXviaCustom[1] = keypressed; + setjoybuttonstate(0, 1, keypressed); + break; - case REMAP_JOY_UP: - joyYviaCustom = keypressed; - setjoystickstate (0, 1, keypressed ? -32767 : 0, 32767); - break; + case REMAP_JOY_UP: + joyYviaCustom = keypressed; + setjoystickstate(0, 1, keypressed ? -32767 : 0, 32767); + break; - case REMAP_JOY_DOWN: - joyYviaCustom = keypressed; - setjoystickstate (0, 1, keypressed ? 32767 : 0, 32767); - break; + case REMAP_JOY_DOWN: + joyYviaCustom = keypressed; + setjoystickstate(0, 1, keypressed ? 32767 : 0, 32767); + break; - case REMAP_JOY_LEFT: - joyXviaCustom = keypressed; - setjoystickstate (0, 0, keypressed ? -32767 : 0, 32767); - break; + case REMAP_JOY_LEFT: + joyXviaCustom = keypressed; + setjoystickstate(0, 0, keypressed ? -32767 : 0, 32767); + break; - case REMAP_JOY_RIGHT: - joyXviaCustom = keypressed; - setjoystickstate (0, 0, keypressed ? 32767 : 0, 32767); - break; + case REMAP_JOY_RIGHT: + joyXviaCustom = keypressed; + setjoystickstate(0, 0, keypressed ? 32767 : 0, 32767); + break; - case REMAP_CD32_GREEN: - joyButXviaCustom[2] = keypressed; - setjoybuttonstate (0, 2, keypressed); - break; + case REMAP_CD32_GREEN: + joyButXviaCustom[2] = keypressed; + setjoybuttonstate(0, 2, keypressed); + break; - case REMAP_CD32_YELLOW: - joyButXviaCustom[3] = keypressed; - setjoybuttonstate (0, 3, keypressed); - break; + case REMAP_CD32_YELLOW: + joyButXviaCustom[3] = keypressed; + setjoybuttonstate(0, 3, keypressed); + break; - case REMAP_CD32_PLAY: - joyButXviaCustom[6] = keypressed; - setjoybuttonstate (0, 6, keypressed); - break; + case REMAP_CD32_PLAY: + joyButXviaCustom[6] = keypressed; + setjoybuttonstate(0, 6, keypressed); + break; - case REMAP_CD32_FFW: - joyButXviaCustom[5] = keypressed; - setjoybuttonstate (0, 5, keypressed); - break; + case REMAP_CD32_FFW: + joyButXviaCustom[5] = keypressed; + setjoybuttonstate(0, 5, keypressed); + break; - case REMAP_CD32_RWD: - joyButXviaCustom[4] = keypressed; - setjoybuttonstate (0, 4, keypressed); - break; - } -} + case REMAP_CD32_RWD: + joyButXviaCustom[4] = keypressed; + setjoybuttonstate(0, 4, keypressed); + break; + } +} \ No newline at end of file diff --git a/src/osdep/sysconfig.h b/src/osdep/sysconfig.h index 7aed776b..09c4a5ca 100644 --- a/src/osdep/sysconfig.h +++ b/src/osdep/sysconfig.h @@ -521,4 +521,4 @@ typedef unsigned short USHORT; #define _vsntprintf(w,x,y,z) vsnprintf(w,x,y,z) #define _strtoui64(x,y,z) strtoll(x,y,z) #define _istalnum(x) isalnum(x) -#define _tcsspn(x,y) strspn(x,y) +#define _tcsspn(x,y) strspn(x,y) \ No newline at end of file diff --git a/src/osdep/target.h b/src/osdep/target.h index a1d879e0..d9a0a188 100644 --- a/src/osdep/target.h +++ b/src/osdep/target.h @@ -19,24 +19,19 @@ extern int emulating; extern int z3_start_adr; extern int rtg_start_adr; -extern int currVSyncRate; - void run_gui(void); void InGameMessage(const char *msg); void wait_for_vsync(void); void saveAdfDir(void); -bool SetVSyncRate(int hz); -//void setCpuSpeed(void); -//void resetCpuSpeed(void); void update_display(struct uae_prefs *); void black_screen_now(void); -void graphics_subshutdown (void); +void graphics_subshutdown(void); void moveVertical(int value); void pandora_stop_sound(void); -void keyboard_settrans (void); +void keyboard_settrans(void); int translate_pandora_keys(int symbol, int *modifier); void SimulateMouseOrJoy(int code, int keypressed); @@ -60,15 +55,15 @@ extern void alloc_AmigaMem(void); void reinit_amiga(void); int count_HDs(struct uae_prefs *p); extern void gui_force_rtarea_hdchange(void); -extern bool hardfile_testrdb (const TCHAR *filename); +extern bool hardfile_testrdb(const TCHAR *filename); #ifdef __cplusplus - extern "C" { +extern "C" { #endif - void trace_begin (void); - void trace_end (void); + void trace_begin(void); + void trace_end(void); #ifdef __cplusplus - } +} #endif @@ -104,5 +99,5 @@ STATIC_INLINE size_t uae_strlcpy(char *dst, const char *src, size_t size) STATIC_INLINE int max(int x, int y) { - return x > y ? x : y; -} + return x > y ? x : y; +} \ No newline at end of file