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