From efb894781e47d0cf21356b97634d45814523f66a Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Thu, 1 Sep 2016 00:02:17 +0200 Subject: [PATCH] Code cleanup Reformatted code for improved readability. Fixed type casting. Selective merge from uae4arm (android) --- src/blkdev.cpp | 1589 +++---- src/custom.cpp | 4 +- src/drawing.cpp | 26 +- src/expansion.cpp | 22 +- src/include/drawing.h | 159 +- src/include/inputdevice.h | 4 +- src/include/options.h | 345 +- src/include/sysdeps.h | 127 +- src/newcpu.cpp | 33 +- src/od-pandora/bsdsocket_host.cpp | 2576 ++++++------ src/od-pandora/gui/EditFilesysVirtual.cpp | 458 +- src/od-pandora/gui/InGameMessage.cpp | 205 +- src/od-pandora/gui/PanelRAM.cpp | 211 +- src/od-pandora/gui/SelectFile.cpp | 607 +-- src/od-pandora/gui/SelectFolder.cpp | 368 +- src/od-pandora/menu/menu_config.cpp | 1015 +++-- src/od-pandora/pandora_gfx.cpp | 29 +- src/od-pandora/pandora_gui.cpp | 1247 +++--- src/od-pandora/pandora_input.cpp | 864 ++-- src/od-pandora/picasso96.cpp | 4631 +++++++++++---------- 20 files changed, 7723 insertions(+), 6797 deletions(-) diff --git a/src/blkdev.cpp b/src/blkdev.cpp index cc522bde..d1a1b717 100644 --- a/src/blkdev.cpp +++ b/src/blkdev.cpp @@ -10,7 +10,7 @@ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" -#include "memory.h" +#include "include/memory.h" #include "blkdev.h" #include "scsidev.h" @@ -19,6 +19,7 @@ #include "td-sdl/thread.h" #include "execio.h" #include "zfile.h" + #ifdef RETROPLATFORM #include "rp.h" #endif @@ -29,7 +30,7 @@ int log_scsiemu = 0; static int scsiemu[MAX_TOTAL_SCSI_DEVICES]; -static struct device_functions *device_func[MAX_TOTAL_SCSI_DEVICES]; +static struct device_functions* device_func[MAX_TOTAL_SCSI_DEVICES]; static int openlist[MAX_TOTAL_SCSI_DEVICES]; static int waspaused[MAX_TOTAL_SCSI_DEVICES]; static int delayed[MAX_TOTAL_SCSI_DEVICES]; @@ -45,63 +46,68 @@ static bool cdimagefileinuse[MAX_TOTAL_SCSI_DEVICES]; static int wasopen[MAX_TOTAL_SCSI_DEVICES]; /* 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)); + int sector = (msf >> 16 & 0xff) * 60 * 75 + (msf >> 8 & 0xff) * 75 + (msf >> 0 & 0xff); sector -= 150; return sector; } /* convert logical sector number -> minutes, seconds and frames */ -int lsn2msf (int sectors) +int lsn2msf(int sectors) { int msf; sectors += 150; - msf = (sectors / (75 * 60)) << 16; - msf |= ((sectors / 75) % 60) << 8; - msf |= (sectors % 75) << 0; + msf = sectors / (75 * 60) << 16; + msf |= sectors / 75 % 60 << 8; + msf |= sectors % 75 << 0; 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); } -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); } -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]; + 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]; @@ -117,7 +123,7 @@ extern struct device_functions devicefunc_win32_ioctl; extern struct device_functions devicefunc_cdimage; -static struct device_functions *devicetable[] = { +static struct device_functions* devicetable[] = { NULL, &devicefunc_cdimage, #ifdef _WIN32 @@ -128,22 +134,27 @@ 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++) { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { scsiemu[i] = false; device_func[i] = NULL; } - if (flags > 0) { + if (flags > 0) + { device_func[0] = devicetable[flags]; scsiemu[0] = true; - } else { - for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { + } + else + { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { scsiemu[i] = false; device_func[i] = NULL; switch (cdscsidevicetype[i]) { - case SCSI_UNIT_IMAGE: + case SCSI_UNIT_IMAGE: device_func[i] = devicetable[SCSI_UNIT_IMAGE]; scsiemu[i] = true; break; @@ -151,11 +162,15 @@ static void install_driver (int flags) } } - for (int j = 1; devicetable[j]; j++) { - if (!driver_installed[j]) { - for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { - if (device_func[i] == devicetable[j]) { - int ok = device_func[i]->openbus (0); + for (int j = 1; devicetable[j]; j++) + { + if (!driver_installed[j]) + { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { + if (device_func[i] == devicetable[j]) + { + int ok = device_func[i]->openbus(0); driver_installed[j] = 1; write_log (_T("%s driver installed, ok=%d\n"), device_func[i]->name, ok); break; @@ -163,12 +178,12 @@ 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++) { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { p->cdslots[i].name[0] = 0; p->cdslots[i].inuse = false; p->cdslots[i].type = SCSI_UNIT_DEFAULT; @@ -176,120 +191,142 @@ 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++) { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { cdscsidevicetype[i] = p->cdslots[i].type; if (p->cdslots[i].inuse == false && p->cdslots[i].name[0] && p->cdslots[i].type != SCSI_UNIT_DISABLED) p->cdslots[i].inuse = true; } - for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { if (cdscsidevicetype[i] != SCSI_UNIT_DEFAULT) continue; - if (p->cdslots[i].inuse || p->cdslots[i].name[0]) { + if (p->cdslots[i].inuse || p->cdslots[i].name[0]) + { cdscsidevicetype[i] = SCSI_UNIT_IMAGE; } } - } -static bool getsem (int unitnum, bool dowait) +static bool getsem(int unitnum, bool dowait) { if (unitsem[unitnum] == NULL) - uae_sem_init (&unitsem[unitnum], 0, 1); + uae_sem_init(&unitsem[unitnum], 0, 1); bool gotit = false; - if (dowait) { + if (dowait) + { uae_sem_wait (&unitsem[unitnum]); gotit = true; - } else { + } + else + { gotit = uae_sem_trywait (&unitsem[unitnum]) == 0; } if (gotit) unitsem_cnt[unitnum]++; if (unitsem_cnt[unitnum] > 1) - write_log (_T("CD: unitsem%d acquire mismatch! cnt=%d\n"), unitnum, unitsem_cnt[unitnum]); + write_log (_T("CD: unitsem%d acquire mismatch! cnt=%d\n"), unitnum, unitsem_cnt[unitnum]); 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) { unitsem_cnt[unitnum]--; if (unitsem_cnt[unitnum] < 0) - write_log (_T("CD: unitsem%d release mismatch! cnt=%d\n"), unitnum, unitsem_cnt[unitnum]); + write_log (_T("CD: unitsem%d release mismatch! cnt=%d\n"), unitnum, unitsem_cnt[unitnum]); uae_sem_post (&unitsem[unitnum]); } -static void sys_command_close_internal (int unitnum) + +static void sys_command_close_internal(int unitnum) { - getsem (unitnum, true); + getsem(unitnum, true); waspaused[unitnum] = 0; if (openlist[unitnum] <= 0) - write_log (_T("BUG unit %d close: opencnt=%d!\n"), unitnum, openlist[unitnum]); - if (device_func[unitnum]) { - device_func[unitnum]->closedev (unitnum); + write_log (_T("BUG unit %d close: opencnt=%d!\n"), unitnum, openlist[unitnum]); + if (device_func[unitnum]) + { + device_func[unitnum]->closedev(unitnum); if (openlist[unitnum] > 0) openlist[unitnum]--; } - freesem (unitnum); - if (openlist[unitnum] == 0) { + freesem(unitnum); + if (openlist[unitnum] == 0) + { uae_sem_destroy (&unitsem[unitnum]); unitsem[unitnum] = 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) { int ret = 0; if (unitsem[unitnum] == NULL) - uae_sem_init (&unitsem[unitnum], 0, 1); - getsem (unitnum, true); + uae_sem_init(&unitsem[unitnum], 0, 1); + getsem(unitnum, true); if (openlist[unitnum]) - write_log (_T("BUG unit %d open: opencnt=%d!\n"), unitnum, openlist[unitnum]); - if (device_func[unitnum]) { - ret = device_func[unitnum]->opendev (unitnum, ident, csu != CD_STANDARD_UNIT_DEFAULT); + write_log (_T("BUG unit %d open: opencnt=%d!\n"), unitnum, openlist[unitnum]); + if (device_func[unitnum]) + { + ret = device_func[unitnum]->opendev(unitnum, ident, csu != CD_STANDARD_UNIT_DEFAULT); if (ret) openlist[unitnum]++; } - 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)) { + 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 (di.media_inserted) + { + if (isaudiotrack(&di.toc, 0)) + { if (*isaudio == 0) *isaudio = drive; 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); - if (crc == 0xe56c340f) { + if (sys_command_cd_read(unitnum, buffer, 21, 1)) + { + crc = get_crc32(buffer, sizeof buffer); + if (crc == 0xe56c340f) + { write_log (_T(" [CD32.TM]")); - if (csu == CD_STANDARD_UNIT_CD32) { + if (csu == CD_STANDARD_UNIT_CD32) + { write_log (_T("\n")); return 1; } } } - if (csu == CD_STANDARD_UNIT_CDTV || csu == CD_STANDARD_UNIT_CD32) { + if (csu == CD_STANDARD_UNIT_CDTV || csu == CD_STANDARD_UNIT_CD32) + { write_log (_T("\n")); return 1; } } } - } else { + } + else + { write_log (_T("no media")); } } @@ -297,63 +334,70 @@ static int getunitinfo (int unitnum, int drive, cd_standard_unit csu, int *isaud return 0; } -static int get_standard_cd_unit2 (cd_standard_unit csu) +static int get_standard_cd_unit2(cd_standard_unit csu) { int unitnum = 0; int isaudio = 0; - if (currprefs.cdslots[unitnum].name[0] || currprefs.cdslots[unitnum].inuse) { - if (currprefs.cdslots[unitnum].name[0]) { - device_func_init (SCSI_UNIT_IMAGE); - if (!sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name, csu)) + if (currprefs.cdslots[unitnum].name[0] || currprefs.cdslots[unitnum].inuse) + { + if (currprefs.cdslots[unitnum].name[0]) + { + device_func_init(SCSI_UNIT_IMAGE); + if (!sys_command_open_internal(unitnum, currprefs.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)) { + 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 (csu); + int unitnum = get_standard_cd_unit2(csu); if (unitnum < 0) return -1; #ifdef RETROPLATFORM rp_cd_device_enable (unitnum, true); #endif delayed[unitnum] = 0; - if (currprefs.cdslots[unitnum].delayed) { + if (currprefs.cdslots[unitnum].delayed) + { delayed[unitnum] = PRE_INSERT_DELAY; } 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) { return openlist[unitnum]; } -int sys_command_open (int unitnum) +int sys_command_open(int unitnum) { - if (openlist[unitnum]) { + if (openlist[unitnum]) + { openlist[unitnum]++; return -1; } waspaused[unitnum] = 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 @@ -362,30 +406,32 @@ int sys_command_open (int unitnum) return v; } -void sys_command_close (int unitnum) +void sys_command_close(int unitnum) { - if (openlist[unitnum] > 1) { + if (openlist[unitnum] > 1) + { openlist[unitnum]--; return; } #ifdef RETROPLATFORM 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); #endif } -void device_func_reset (void) +void device_func_reset(void) { - for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { wasopen[i] = 0; waspaused[i] = false; imagechangetime[i] = 0; @@ -394,45 +440,51 @@ 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; } -void blkdev_entergui (void) +void blkdev_entergui(void) { - for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { waspaused[i] = 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) waspaused[i] = 1; } } } -void blkdev_exitgui (void) + +void blkdev_exitgui(void) { - for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { - if (waspaused[i]) { + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) + { + if (waspaused[i]) + { 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); } } waspaused[i] = 0; } } -void check_prefs_changed_cd (void) +void check_prefs_changed_cd(void) { - if(currprefs.sound_volume_cd == changed_prefs.sound_volume_cd) - return; + if (currprefs.sound_volume_cd == changed_prefs.sound_volume_cd) + return; currprefs.sound_volume_cd = changed_prefs.sound_volume_cd; } -static void check_changes (int unitnum) +static void check_changes(int unitnum) { bool changed = false; bool gotsem = false; @@ -440,10 +492,11 @@ static void check_changes (int unitnum) if (device_func[unitnum] == NULL) return; - if (delayed[unitnum]) { + if (delayed[unitnum]) + { delayed[unitnum]--; if (delayed[unitnum] == 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; } @@ -452,10 +505,11 @@ static void check_changes (int unitnum) if (!changed && changed_prefs.cdslots[unitnum].name[0] == 0 && changed_prefs.cdslots[unitnum].inuse != currprefs.cdslots[unitnum].inuse) changed = true; - if (changed) { + if (changed) + { bool wasimage = currprefs.cdslots[unitnum].name[0] != 0; if (unitsem[unitnum]) - gotsem = getsem (unitnum, true); + gotsem = getsem(unitnum, true); cdimagefileinuse[unitnum] = changed_prefs.cdslots[unitnum].inuse; _tcscpy (newimagefiles[unitnum], changed_prefs.cdslots[unitnum].name); changed_prefs.cdslots[unitnum].name[0] = currprefs.cdslots[unitnum].name[0] = 0; @@ -463,19 +517,21 @@ static void check_changes (int unitnum) int pollmode = 0; imagechangetime[unitnum] = 3 * 50; struct device_info di; - device_func[unitnum]->info (unitnum, &di, 0, -1); + device_func[unitnum]->info(unitnum, &di, 0, -1); if (wasopen[unitnum] >= 0) wasopen[unitnum] = di.open ? 1 : 0; - if (wasopen[unitnum]) { - device_func[unitnum]->closedev (unitnum); + if (wasopen[unitnum]) + { + device_func[unitnum]->closedev(unitnum); wasopen[unitnum] = -1; } write_log (_T("CD: eject (%s) open=%d\n"), pollmode ? _T("slow") : _T("fast"), wasopen[unitnum] ? 1 : 0); #ifdef RETROPLATFORM rp_cd_image_change (unitnum, NULL); #endif - if (gotsem) { - freesem (unitnum); + if (gotsem) + { + freesem(unitnum); gotsem = false; } } @@ -485,18 +541,22 @@ static void check_changes (int unitnum) if (imagechangetime[unitnum] > 0) return; if (unitsem[unitnum]) - gotsem = getsem (unitnum, true); + gotsem = getsem(unitnum, true); _tcscpy (currprefs.cdslots[unitnum].name, newimagefiles[unitnum]); _tcscpy (changed_prefs.cdslots[unitnum].name, newimagefiles[unitnum]); currprefs.cdslots[unitnum].inuse = changed_prefs.cdslots[unitnum].inuse = cdimagefileinuse[unitnum]; newimagefiles[unitnum][0] = 0; write_log (_T("CD: delayed insert '%s' (open=%d,unit=%d)\n"), currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : _T(""), wasopen[unitnum] ? 1 : 0, unitnum); - device_func_init (0); - if (wasopen[unitnum]) { - if (!device_func[unitnum]->opendev (unitnum, currprefs.cdslots[unitnum].name, 0)) { + device_func_init(0); + if (wasopen[unitnum]) + { + if (!device_func[unitnum]->opendev(unitnum, currprefs.cdslots[unitnum].name, 0)) + { write_log (_T("-> device open failed\n")); wasopen[unitnum] = 0; - } else { + } + else + { wasopen[unitnum] = 1; write_log (_T("-> device reopened\n")); } @@ -504,32 +564,34 @@ static void check_changes (int unitnum) #ifdef RETROPLATFORM rp_cd_image_change (unitnum, currprefs.cdslots[unitnum].name); #endif - if (gotsem) { - freesem (unitnum); + if (gotsem) + { + 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 = device_func[unitnum]->exec_out (unitnum, cmd, cmdlen); + uae_u8* p = device_func[unitnum]->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 = device_func[unitnum]->exec_in (unitnum, cmd, cmdlen, &outsize); + uae_u8* p = device_func[unitnum]->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; @@ -538,288 +600,325 @@ 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 = device_func[unitnum]->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 = device_func[unitnum]->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 (device_func[unitnum]->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); + if (device_func[unitnum]->pause == NULL) + { + int as = audiostatus(unitnum); + uae_u8 cmd[10] = {0x4b,0,0,0,0,0,0,0,static_cast(paused ? 0 : 1,0)}; + do_scsi(unitnum, cmd, sizeof cmd); v = as == AUDIO_STATUS_PAUSED; - } else { - v = device_func[unitnum]->pause (unitnum, paused); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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 (device_func[unitnum]->stop == NULL) { - int as = audiostatus (unitnum); + if (device_func[unitnum]->stop == NULL) + { + int as = audiostatus(unitnum); uae_u8 cmd[6] = {0x4e,0,0,0,0,0}; - do_scsi (unitnum, cmd, sizeof cmd); - } else { - device_func[unitnum]->stop (unitnum); + do_scsi(unitnum, cmd, sizeof cmd); } - freesem (unitnum); + else + { + device_func[unitnum]->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; play_end_pos[unitnum] = endlsn; - if (device_func[unitnum]->play == NULL) { + if (device_func[unitnum]->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); + int startmsf = lsn2msf(startlsn); + int endmsf = lsn2msf(endlsn); cmd[0] = 0x47; - cmd[3] = (uae_u8)(startmsf >> 16); - cmd[4] = (uae_u8)(startmsf >> 8); - cmd[5] = (uae_u8)(startmsf >> 0); - 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 = device_func[unitnum]->play (unitnum, startlsn, endlsn, scan, NULL, NULL); + cmd[3] = uae_u8(startmsf >> 16); + cmd[4] = uae_u8(startmsf >> 8); + cmd[5] = uae_u8(startmsf >> 0); + 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; } - freesem (unitnum); + else + { + v = device_func[unitnum]->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 (device_func[unitnum]->play == NULL) - v = sys_command_cd_play (unitnum, startlsn, endlsn, scan); + v = sys_command_cd_play(unitnum, startlsn, endlsn, scan); else - v = device_func[unitnum]->play (unitnum, startlsn, endlsn, scan, statusfunc, subfunc); - freesem (unitnum); + v = device_func[unitnum]->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 (device_func[unitnum]->volume == NULL) v = -1; else - v = device_func[unitnum]->volume (unitnum, volume_left, volume_right); - freesem (unitnum); + v = device_func[unitnum]->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 (device_func[unitnum]->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 = device_func[unitnum]->qcode (unitnum, buf, -1); + if (device_func[unitnum]->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); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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 (device_func[unitnum]->toc == NULL) { + if (device_func[unitnum]->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 = device_func[unitnum]->toc (unitnum, toc); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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 (device_func[unitnum]->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); + if (device_func[unitnum]->read == NULL) + { + uae_u8 cmd1[12] = {0x28, 0, static_cast(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); #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); } #endif - } else { - v = device_func[unitnum]->read (unitnum, data, block, size); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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 (device_func[unitnum]->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 = device_func[unitnum]->rawread (unitnum, data, block, size, sectorsize, 0xffffffff); + if (device_func[unitnum]->rawread == NULL) + { + uae_u8 cmd[12] = {0xbe, 0, static_cast(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); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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 (device_func[unitnum]->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 = device_func[unitnum]->rawread (unitnum, data, block, size, sectorsize, (sectortype << 16) | (scsicmd9 << 8) | subs); + if (device_func[unitnum]->rawread == NULL) + { + uae_u8 cmd[12] = {0xbe, 0, static_cast(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); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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 (device_func[unitnum]->read == NULL) { - uae_u8 cmd[12] = { 0xa8, 0, 0, 0, 0, 0, size >> 24, size >> 16, size >> 8, 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 = device_func[unitnum]->read (unitnum, data, block, size); + if (device_func[unitnum]->read == NULL) + { + uae_u8 cmd[12] = {0xa8, 0, 0, 0, 0, 0, static_cast(size >> 24, size >> 16, size >> 8, 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); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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 (device_func[unitnum]->write == NULL) { + if (device_func[unitnum]->write == NULL) + { v = 0; - } else { - v = device_func[unitnum]->write (unitnum, data, offset, size); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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; - if (failunit (unitnum)) + if (failunit(unitnum)) return -1; if (delayed[unitnum]) return 0; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; - if (device_func[unitnum]->ismedia == NULL) { - uae_u8 cmd[6] = { 0, 0, 0, 0, 0, 0 }; - v = do_scsi (unitnum, cmd, sizeof cmd); - } else { - v = device_func[unitnum]->ismedia (unitnum, quick); + if (device_func[unitnum]->ismedia == NULL) + { + uae_u8 cmd[6] = {0, 0, 0, 0, 0, 0}; + v = do_scsi(unitnum, cmd, sizeof cmd); } - freesem (unitnum); + else + { + v = device_func[unitnum]->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) { - if (failunit (unitnum)) + if (failunit(unitnum)) return NULL; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; if (device_func[unitnum]->info == NULL) return 0; - struct device_info *di2 = device_func[unitnum]->info (unitnum, di, quick, -1); + struct device_info* di2 = device_func[unitnum]->info(unitnum, di, quick, -1); if (di2 && delayed[unitnum]) 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 @@ -827,7 +926,7 @@ 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; @@ -841,14 +940,15 @@ void scsi_atapi_fixup_pre (uae_u8 *scsi_cmd, int *len, uae_u8 **datap, int *data l += 4; scsi_cmd[7] = l >> 8; scsi_cmd[8] = l; - if (cmd == MODE_SELECT_6) { + 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); + memcpy(p + 8, data + 4, datalen - 4); p[0] = 0; p[1] = data[0]; p[2] = data[1]; @@ -859,7 +959,9 @@ void scsi_atapi_fixup_pre (uae_u8 *scsi_cmd, int *len, uae_u8 **datap, int *data datalen += 4; *parm = MODE_SELECT_10; *datap = p; - } else { + } + 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; @@ -872,141 +974,155 @@ void scsi_atapi_fixup_pre (uae_u8 *scsi_cmd, int *len, uae_u8 **datap, int *data *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) { + 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); + 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_u8* scsi_data = as->data; uae_u32 scsi_len = as->len; - uae_u8 *scsi_cmd = as->cmd; + uae_u8* scsi_cmd = as->cmd; uae_u8 cmd; 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) { + 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) { + 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++) { + for (i = 0; i < cdblen; i++) + { write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), cdb[i]); } write_log (_T("\n")); - if (data) { + 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]); + write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), data[i]); if (datalen > 0) - write_log (_T("\n")); + 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]); + 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("\n")); + if (senselen > 0) + { write_log (_T("SENSE: %d,"), senselen); - for (i = 0; i < senselen && i < 32; i++) { + 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; } -static uae_u64 cmd_readx (int unitnum, uae_u8 *dataptr, int offset, int len) + +static uae_u64 cmd_readx(int unitnum, uae_u8* dataptr, int offset, int len) { - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; - int v = device_func[unitnum]->read (unitnum, dataptr, offset, len); - freesem (unitnum); + int v = device_func[unitnum]->read(unitnum, dataptr, offset, len); + freesem(unitnum); if (v) return len; return 0; } -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; } -static void ww (uae_u8 *p, int v) + +static void ww(uae_u8* p, int 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]); } -static int rw (uae_u8 *p) + +static int rw(uae_u8* p) { 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) { + 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); + 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; + dst[6] = addr >> 8; + dst[7] = addr >> 0; - if (point >= 1 && point <= 99) { + if (point >= 1 && point <= 99) + { if (head[2] == 0) head[2] = point; head[3] = point; @@ -1020,26 +1136,27 @@ static int addtocentry (uae_u8 **dstp, int *len, int point, int newpoint, int ms return -1; } -static int scsiemudrv (int unitnum, uae_u8 *cmd) +static int scsiemudrv(int unitnum, uae_u8* cmd) { - if (failunit (unitnum)) + if (failunit(unitnum)) return -1; - if (!getsem (unitnum)) + if (!getsem(unitnum)) return 0; int v = 0; if (device_func[unitnum]->scsiemu) - v = device_func[unitnum]->scsiemu (unitnum, cmd); - freesem (unitnum); + v = device_func[unitnum]->scsiemu(unitnum, cmd); + freesem(unitnum); return v; } -static int scsi_read_cd (int unitnum, uae_u8 *cmd, uae_u8 *data, struct device_info *di) +static int scsi_read_cd(int unitnum, uae_u8* cmd, uae_u8* data, struct device_info* di) { 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); + 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; @@ -1047,11 +1164,11 @@ static int scsi_read_cd (int unitnum, uae_u8 *cmd, uae_u8 *data, struct device_i int subs = cmd[10] & 7; if (len == 0) return 0; - return sys_command_cd_rawread (unitnum, data, start, len, 0, (cmd[1] >> 2) & 7, cmd[9], subs); + return sys_command_cd_rawread(unitnum, data, start, len, 0, (cmd[1] >> 2) & 7, cmd[9], subs); } -static int scsi_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) +static int scsi_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) { uae_u64 len, offset; int lr = 0, ls = 0; @@ -1061,60 +1178,62 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, uae_u8 cmd = cmdbuf[0]; *reply_len = *sense_len = 0; - memset (r, 0, 256); - memset (s, 0, 256); + memset(r, 0, 256); + memset(s, 0, 256); - sys_command_info (unitnum, &di, 1); + sys_command_info(unitnum, &di, 1); - if (cmdbuf[0] == 0) { /* TEST UNIT READY */ - if (nodisk (&di)) + if (cmdbuf[0] == 0) + { /* TEST UNIT READY */ + if (nodisk(&di)) goto nodisk; scsi_len = 0; goto end; } 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, *data_len); + 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, *data_len); switch (cmdbuf[0]) { case 0x12: /* INQUIRY */ - { - if ((cmdbuf[1] & 1) || cmdbuf[2] != 0) - goto err; - len = cmdbuf[4]; - if (cmdbuf[1] >> 5) - goto err; - r[0] = 5; // CDROM - r[1] |= 0x80; // removable - r[2] = 2; /* supports SCSI-2 */ - r[3] = 2; /* response data format */ - r[4] = 32; /* additional length */ - r[7] = 0x20; /* 16 bit bus */ - scsi_len = lr = len < 36 ? (uae_u32)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; + { + if (cmdbuf[1] & 1 || cmdbuf[2] != 0) + goto err; + len = cmdbuf[4]; + if (cmdbuf[1] >> 5) + goto err; + r[0] = 5; // CDROM + r[1] |= 0x80; // removable + r[2] = 2; /* supports SCSI-2 */ + r[3] = 2; /* response data format */ + r[4] = 32; /* additional length */ + r[7] = 0x20; /* 16 bit bus */ + scsi_len = lr = len < 36 ? uae_u32(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; + break; case 0xbe: // READ CD case 0xb9: // READ CD MSF - if (nodisk (&di)) + if (nodisk(&di)) goto nodisk; - scsi_len = scsi_read_cd (unitnum, cmdbuf, scsi_data, &di); + scsi_len = scsi_read_cd(unitnum, cmdbuf, scsi_data, &di); if (scsi_len == -2) goto notdatatrack; if (scsi_len == -1) @@ -1122,145 +1241,166 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, 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) + { + 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; + goto errreq; + } } - } - break; + break; case 0x5a: // MODE SENSE(10) case 0x1a: /* MODE SENSE(6) */ - { - uae_u8 *p; - 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 (cmdbuf[0] == 0x5a) - dbd = 1; - if (log_scsiemu) + { + uae_u8* p; + 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 (cmdbuf[0] == 0x5a) + 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; - p[2] = 0; - p[3] = 0; - p[4] = 0; - p[5] = 0; - p[6] = 0; - p[7] = 0; - p += 8; - } else { - totalsize = 4 - 1; - p[1] = 0; - p[2] = 0; - p[3] = 0; - p += 4; - } - bdsize = 0; - if (!dbd) { - if (nodisk (&di)) - goto nodisk; - uae_u32 blocks = di.sectorspertrack * di.cylinders * di.trackspercylinder; - bdsize = 8; - wl(p + 0, blocks); - wl(p + 4, di.bytespersector); - p += 8; - } - 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 == 3) { - if (nodisk (&di)) - goto nodisk; - p[0] = 3; - p[1] = 24; - p[3] = 1; - p[10] = di.trackspercylinder >> 8; - p[11] = di.trackspercylinder; - p[12] = di.bytespersector >> 8; - p[13] = di.bytespersector; - p[15] = 1; // interleave - p[20] = 0x80; - psize = p[1]; - } else if (pcode == 4) { - if (nodisk (&di)) - goto nodisk; - p[0] = 4; - wl(p + 1, di.cylinders); - p[1] = 24; - p[5] = 1; - wl(p + 13, di.cylinders); - ww(p + 20, 0); - psize = p[1]; - } 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] = 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]; - } else { - if (!pcodeloop) - goto err; - } - totalsize += psize; - p += psize; - if (!pcodeloop) - break; - if (pcode == 0) - break; - pcode++; + p = r; + if (sense10) + { + totalsize = 8 - 2; + p[2] = 0; + p[3] = 0; + p[4] = 0; + p[5] = 0; + p[6] = 0; + p[7] = 0; + p += 8; + } + else + { + totalsize = 4 - 1; + p[1] = 0; + p[2] = 0; + p[3] = 0; + p += 4; + } + bdsize = 0; + if (!dbd) + { + if (nodisk(&di)) + goto nodisk; + uae_u32 blocks = di.sectorspertrack * di.cylinders * di.trackspercylinder; + bdsize = 8; + wl(p + 0, blocks); + wl(p + 4, di.bytespersector); + p += 8; + } 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; + { + 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 == 3) + { + if (nodisk(&di)) + goto nodisk; + p[0] = 3; + p[1] = 24; + p[3] = 1; + p[10] = di.trackspercylinder >> 8; + p[11] = di.trackspercylinder; + p[12] = di.bytespersector >> 8; + p[13] = di.bytespersector; + p[15] = 1; // interleave + p[20] = 0x80; + psize = p[1]; + } + else if (pcode == 4) + { + if (nodisk(&di)) + goto nodisk; + p[0] = 4; + wl(p + 1, di.cylinders); + p[1] = 24; + p[5] = 1; + wl(p + 13, di.cylinders); + ww(p + 20, 0); + psize = p[1]; + } + 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] = 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]; + } + 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 = lr = totalsize + 1; } - scsi_len = lr = totalsize + 1; - } - break; + break; case 0x01: /* REZERO UNIT */ scsi_len = 0; - break; + break; case 0x1d: /* SEND DIAGNOSTICS */ scsi_len = 0; break; @@ -1269,7 +1409,7 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, 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)) + if (nodisk(&di)) goto nodisk; uae_u32 blocks = di.sectorspertrack * di.cylinders * di.trackspercylinder; cyl = di.cylinders; @@ -1277,7 +1417,8 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, cylsec = tracksec = di.trackspercylinder; if (pmi == 0 && lba != 0) goto errreq; - if (pmi) { + if (pmi) + { lba += tracksec * head; lba /= tracksec * head; lba *= tracksec * head; @@ -1285,69 +1426,78 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, lba = blocks; blocks = lba; } - wl (r, blocks); - wl (r + 4, di.bytespersector); + wl(r, blocks); + wl(r + 4, di.bytespersector); scsi_len = lr = 8; } 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; - scsi_len = (uae_u32)cmd_readx (unitnum, scsi_data, offset, len) * di.bytespersector;; - } else { - goto notdatatrack; + { + 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; + scsi_len = uae_u32(cmd_readx(unitnum, scsi_data, offset, len)) * di.bytespersector;; + } + else + { + goto notdatatrack; + } } - } - break; + break; case 0x0a: /* WRITE (6) */ goto readprot; 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; - scsi_len = cmd_readx (unitnum, scsi_data, offset, len) * di.bytespersector; - } else { - goto notdatatrack; + { + 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; + scsi_len = cmd_readx(unitnum, scsi_data, offset, len) * di.bytespersector; + } + else + { + goto notdatatrack; + } } - } - break; + 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); - scsi_len = (uae_u32)cmd_readx (unitnum, scsi_data, offset, len) * di.bytespersector;; - } else { - goto notdatatrack; + { + 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); + scsi_len = uae_u32(cmd_readx(unitnum, scsi_data, offset, len)) * di.bytespersector;; + } + else + { + goto notdatatrack; + } } - } - break; + break; case 0xaa: /* WRITE (12) */ goto readprot; case 0x43: // READ TOC { - if (nodisk (&di)) + if (nodisk(&di)) goto nodisk; - uae_u8 *p = scsi_data; + uae_u8* p = scsi_data; int strack = cmdbuf[6]; int msf = cmdbuf[1] & 2; int format = cmdbuf[2] & 7; @@ -1355,12 +1505,13 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, goto errreq; int maxlen = (cmdbuf[7] << 8) | cmdbuf[8]; struct cd_toc_head ttoc; - if (!sys_command_cd_toc (unitnum, &ttoc)) + if (!sys_command_cd_toc(unitnum, &ttoc)) goto readerr; - struct cd_toc_head *toc = &ttoc; + struct cd_toc_head* toc = &ttoc; if (maxlen < 4) goto errreq; - if (format == 1) { + if (format == 1) + { p[0] = 0; p[1] = 2 + 8; p[2] = 1; @@ -1370,35 +1521,39 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, p[6] = toc->first_track; p[7] = 0; if (msf) - wl (p + 8, lsn2msf (toc->toc[0].address)); + wl(p + 8, lsn2msf(toc->toc[0].address)); else - wl (p + 8 , toc->toc[0].address); + wl(p + 8, toc->toc[0].address); scsi_len = 12; - } else if (format == 2 || format == 0) { + } + 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; + 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)) + if (format == 2) + { + if (!addtocentry(&p2, &maxlen, 0xa0, -1, msf, p, toc)) goto errreq; - if (!addtocentry (&p2, &maxlen, 0xa1, -1, msf, p, toc)) + if (!addtocentry(&p2, &maxlen, 0xa1, -1, msf, p, toc)) goto errreq; - if (!addtocentry (&p2, &maxlen, 0xa2, -1, msf, p, toc)) + if (!addtocentry(&p2, &maxlen, 0xa2, -1, msf, p, toc)) goto errreq; } - while (strack < 100) { - if (!addtocentry (&p2, &maxlen, strack, -1, msf, p, toc)) + while (strack < 100) + { + if (!addtocentry(&p2, &maxlen, strack, -1, msf, p, toc)) goto errreq; strack++; } - if (!addtocentry (&p2, &maxlen, 0xa2, 0xaa, msf, p, toc)) + if (!addtocentry(&p2, &maxlen, 0xa2, 0xaa, msf, p, toc)) goto errreq; int tlen = p2 - (p + 2); p[0] = tlen >> 8; @@ -1407,24 +1562,25 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, } } break; - case 0x42: // READ SUB-CHANNEL + 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 }; + int len = rw(cmdbuf + 7); + uae_u8 buf[SUBQ_SIZE] = {0}; - if (nodisk (&di)) + if (nodisk(&di)) goto nodisk; - sys_command_cd_qcode (unitnum, buf); + 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 (subq && format == 1) + { if (len < 4 + 12) goto errreq; scsi_data[2] = 0; @@ -1432,217 +1588,229 @@ static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, 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); + 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 { + 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; + case 0x1b: // START/STOP + sys_command_cd_stop(unitnum); + scsiemudrv(unitnum, cmdbuf); + scsi_len = 0; break; - case 0x1e: // PREVENT/ALLOW MEDIA REMOVAL - // do nothing - scsi_len = 0; + case 0x1e: // PREVENT/ALLOW MEDIA REMOVAL + // do nothing + scsi_len = 0; break; - case 0x4e: // STOP PLAY/SCAN - if (nodisk (&di)) - goto nodisk; - sys_command_cd_stop (unitnum); - scsi_len = 0; + case 0x4e: // STOP PLAY/SCAN + if (nodisk(&di)) + goto nodisk; + sys_command_cd_stop(unitnum); + scsi_len = 0; break; - case 0xba: // SCAN + case 0xba: // SCAN { - if (nodisk (&di)) + if (nodisk(&di)) goto nodisk; struct cd_toc_head ttoc; - if (!sys_command_cd_toc (unitnum, &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; + 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); + start = lsn2msf(start); if (type == 3) goto errreq; - if (type == 2) { + 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); + sys_command_cd_pause(unitnum, 0); + sys_command_cd_play(unitnum, start, end, scan); scsi_len = 0; } break; - case 0x48: // PLAY AUDIO TRACK/INDEX + case 0x48: // PLAY AUDIO TRACK/INDEX { - if (nodisk (&di)) + 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)) + if (!sys_command_cd_toc(unitnum, &ttoc)) goto readerr; - struct cd_toc_head *toc = &ttoc; + 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)) + 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) + case 0x49: // PLAY AUDIO TRACK RELATIVE (10) + case 0xa9: // PLAY AUDIO TRACK RELATIVE (12) { - if (nodisk (&di)) + if (nodisk(&di)) goto nodisk; - int len = cmd == 0xa9 ? rl (cmdbuf + 6) : rw (cmdbuf + 7); + 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); + 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)) + 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 + case 0x47: // PLAY AUDIO MSF { - if (nodisk (&di)) + 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 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); + int end = msf2lsn(rl(cmdbuf + 5) & 0x00ffffff); if (end > di.toc.lastaddress) end = di.toc.lastaddress; - start = msf2lsn (start); + 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; + 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) + case 0x45: // PLAY AUDIO (10) + case 0xa5: // PLAY AUDIO (12) { - if (nodisk (&di)) + if (nodisk(&di)) goto nodisk; - int start = rl (cmdbuf + 2); + int start = rl(cmdbuf + 2); int len; if (cmd = 0xa5) - len = rl (cmdbuf + 6); + 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)); + 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)) + 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 + case 0xbc: // PLAY CD { - if (nodisk (&di)) + 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 (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)) + 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 + case 0x4b: // PAUSE/RESUME { - if (nodisk (&di)) + if (nodisk(&di)) goto nodisk; - uae_u8 buf[SUBQ_SIZE] = { 0 }; + uae_u8 buf[SUBQ_SIZE] = {0}; int resume = cmdbuf[8] & 1; - sys_command_cd_qcode (unitnum, buf); + 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); + sys_command_cd_pause(unitnum, resume ? 0 : 1); scsi_len = 0; } break; -readprot: + readprot: status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 7; /* DATA PROTECT */ s[12] = 0x27; /* WRITE PROTECTED */ ls = 0x12; break; -nodisk: + nodisk: status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 2; /* NOT READY */ s[12] = 0x3A; /* MEDIUM NOT PRESENT */ ls = 0x12; break; -readerr: + readerr: status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 2; /* NOT READY */ s[12] = 0x11; /* UNRECOVERED READ ERROR */ ls = 0x12; break; -notdatatrack: + notdatatrack: status = 2; s[0] = 0x70; s[2] = 5; @@ -1651,9 +1819,9 @@ notdatatrack: break; default: -err: + err: write_log (_T("CDEMU: unsupported scsi command 0x%02X\n"), cmdbuf[0]); -errreq: + errreq: lr = -1; status = 2; /* CHECK CONDITION */ s[0] = 0x70; @@ -1666,51 +1834,59 @@ end: *data_len = scsi_len; *reply_len = lr; *sense_len = ls; - if (ls) { + if (ls) + { //s[0] |= 0x80; s[7] = ls - 7; // additional sense length } if (cmdbuf[0] && log_scsiemu) - write_log (_T("-> DATAOUT=%d ST=%d SENSELEN=%d\n"), scsi_len, status, ls); + write_log (_T("-> DATAOUT=%d ST=%d SENSELEN=%d\n"), scsi_len, status, ls); return status; } -static int execscsicmd_direct (int unitnum, struct amigascsi *as) +static int execscsicmd_direct(int unitnum, 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 cmd[16] = {0}; uae_u8 replydata[256]; int datalen = as->len; int senselen = as->sense_len; int replylen = 0; - memcpy (cmd, as->cmd, as->cmd_len); + 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; - as->status = scsi_emulate (unitnum, cmd, as->cmd_len, scsi_datap, &datalen, replydata, &replylen, as->sensedata, &senselen); + as->status = scsi_emulate(unitnum, cmd, as->cmd_len, scsi_datap, &datalen, replydata, &replylen, as->sensedata, &senselen); as->cmdactual = as->status != 0 ? 0 : as->cmd_len; /* fake scsi_CmdActual */ - if (as->status) { + if (as->status) + { io_error = IOERR_BadStatus; as->sactual = senselen; as->actual = 0; /* scsi_Actual */ - } else { + } + else + { int i; - if (replylen > 0) { + 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) { + if (datalen < 0) + { io_error = IOERR_NotSpecified; as->actual = 0; /* scsi_Actual */ - } else { + } + else + { as->len = datalen; io_error = 0; as->actual = as->len; /* scsi_Actual */ @@ -1720,57 +1896,61 @@ static int execscsicmd_direct (int unitnum, struct amigascsi *as) return io_error; } -int sys_command_scsi_direct_native (int unitnum, struct amigascsi *as) +int sys_command_scsi_direct_native(int unitnum, struct amigascsi* as) { - if (scsiemu[unitnum]) { - return execscsicmd_direct (unitnum, as); - } else { + if (scsiemu[unitnum]) + { + return execscsicmd_direct(unitnum, as); + } + else + { if (!device_func[unitnum]->exec_direct) return -1; } - int ret = device_func[unitnum]->exec_direct (unitnum, as); + int ret = device_func[unitnum]->exec_direct(unitnum, as); if (!ret && device_func[unitnum]->isatapi(unitnum)) - scsi_atapi_fixup_inquiry (as); + scsi_atapi_fixup_inquiry(as); return ret; } -int sys_command_scsi_direct (int unitnum, uaecptr acmd) +int sys_command_scsi_direct(int unitnum, uaecptr acmd) { int ret, i; - struct amigascsi as = { 0 }; + struct amigascsi as = {0}; uaecptr ap; - addrbank *bank; + addrbank* bank; - ap = get_long (acmd + 0); - as.len = get_long (acmd + 4); + ap = get_long(acmd + 0); + as.len = get_long(acmd + 4); - bank = &get_mem_bank (ap); + bank = &get_mem_bank(ap); if (!bank || !bank->check(ap, as.len)) return IOERR_BADADDRESS; - as.data = bank->xlateaddr (ap); + as.data = bank->xlateaddr(ap); - ap = get_long (acmd + 12); - as.cmd_len = get_word (acmd + 16); + 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++); + 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); + as.flags = get_byte(acmd + 20); + as.sense_len = get_word(acmd + 26); - ret = sys_command_scsi_direct_native (unitnum, &as); + ret = sys_command_scsi_direct_native(unitnum, &as); - put_long (acmd + 8, as.actual); - put_word (acmd + 18, as.cmdactual); - put_byte (acmd + 21, as.status); - put_word (acmd + 28, as.sactual); + put_long(acmd + 8, as.actual); + put_word(acmd + 18, as.cmdactual); + put_byte(acmd + 21, as.status); + put_word(acmd + 28, as.sactual); - if (as.flags & (2 | 4)) { // autosense - ap = get_long (acmd + 22); + 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_byte(ap + i, as.sensedata[i]); } return ret; @@ -1778,7 +1958,7 @@ int sys_command_scsi_direct (int unitnum, uaecptr acmd) #ifdef SAVESTATE -uae_u8 *save_cd (int num, int *len) +uae_u8* save_cd(int num, int* len) { uae_u8 *dstbak, *dst; @@ -1793,18 +1973,18 @@ uae_u8 *save_cd (int num, int *len) save_u32 (currprefs.cdslots[num].type); save_u32 (0); save_u32 (0); - sys_command_cd_qcode (num, play_qcode[num]); + sys_command_cd_qcode(num, play_qcode[num]); for (int i = 0; i < SUBQ_SIZE; i++) - save_u8 (play_qcode[num][i]); + save_u8 (play_qcode[num][i]); save_u32 (play_end_pos[num]); *len = dst - dstbak; return dstbak; } -uae_u8 *restore_cd (int num, uae_u8 *src) +uae_u8* restore_cd(int num, uae_u8* src) { uae_u32 flags; - TCHAR *s; + TCHAR* s; if (num >= MAX_TOTAL_SCSI_DEVICES) return NULL; @@ -1812,14 +1992,17 @@ uae_u8 *restore_cd (int num, uae_u8 *src) 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); + 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) { + if (flags & 8) + { restore_u32 (); for (int i = 0; i < SUBQ_SIZE; i++) play_qcode[num][i] = restore_u8 (); diff --git a/src/custom.cpp b/src/custom.cpp index 74355f4f..df7a4513 100644 --- a/src/custom.cpp +++ b/src/custom.cpp @@ -1,4 +1,4 @@ - /* +/* * UAE - The Un*x Amiga Emulator * * Custom chip emulation @@ -18,7 +18,7 @@ #include "gensound.h" #include "audio.h" #include "sd-pandora/sound.h" -#include "memory.h" +#include "include/memory.h" #include "custom.h" #include "newcpu.h" #include "cia.h" diff --git a/src/drawing.cpp b/src/drawing.cpp index 193cee02..9c5a3f49 100644 --- a/src/drawing.cpp +++ b/src/drawing.cpp @@ -1,12 +1,12 @@ - /* - * UAE - The Un*x Amiga Emulator - * - * Screen drawing functions - * - * Copyright 1995-2000 Bernd Schmidt - * Copyright 1995 Alessandro Bissacco - * Copyright 2000-2008 Toni Wilen - */ +/* + * UAE - The Un*x Amiga Emulator + * + * Screen drawing functions + * + * Copyright 1995-2000 Bernd Schmidt + * Copyright 1995 Alessandro Bissacco + * Copyright 2000-2008 Toni Wilen + */ /* There are a couple of concepts of "coordinates" in this file. @@ -49,11 +49,11 @@ extern int sprite_buffer_res; -static void lores_reset (void) +static void lores_reset(void) { - sprite_buffer_res = (currprefs.chipset_mask & CSMASK_AGA) ? RES_SUPERHIRES : RES_LORES; - if (sprite_buffer_res > currprefs.gfx_resolution) - sprite_buffer_res = currprefs.gfx_resolution; + sprite_buffer_res = (currprefs.chipset_mask & CSMASK_AGA) ? RES_SUPERHIRES : RES_LORES; + if (sprite_buffer_res > currprefs.gfx_resolution) + sprite_buffer_res = currprefs.gfx_resolution; } bool aga_mode; /* mirror of chipset_mask & CSMASK_AGA */ diff --git a/src/expansion.cpp b/src/expansion.cpp index 5ba55b79..078fdab4 100644 --- a/src/expansion.cpp +++ b/src/expansion.cpp @@ -1,20 +1,20 @@ - /* - * UAE - The Un*x Amiga Emulator - * - * AutoConfig (tm) Expansions (ZorroII/III) - * - * Copyright 1996,1997 Stefan Reinauer - * Copyright 1997 Brian King - * - added gfxcard code - * - */ +/* + * UAE - The Un*x Amiga Emulator + * + * AutoConfig (tm) Expansions (ZorroII/III) + * + * Copyright 1996,1997 Stefan Reinauer + * Copyright 1997 Brian King + * - added gfxcard code + * + */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" -#include "memory.h" +#include "include/memory.h" #include "rommgr.h" #include "autoconf.h" #include "newcpu.h" diff --git a/src/include/drawing.h b/src/include/drawing.h index 05ea1254..05886c85 100644 --- a/src/include/drawing.h +++ b/src/include/drawing.h @@ -1,9 +1,10 @@ /* * Data used for communication between custom.c and drawing.c. - * + * * Copyright 1996-1998 Bernd Schmidt */ +#pragma once #define MAX_PLANES 8 /* According to the HRM, pixel data spends a couple of cycles somewhere in the chips @@ -22,40 +23,41 @@ #define lores_shift 0 extern bool aga_mode; -STATIC_INLINE int coord_hw_to_window_x (int x) +STATIC_INLINE int coord_hw_to_window_x(int x) { - x -= DISPLAY_LEFT_SHIFT; - return x; + x -= DISPLAY_LEFT_SHIFT; + return x; } -STATIC_INLINE int coord_window_to_hw_x (int x) +STATIC_INLINE int coord_window_to_hw_x(int x) { - return x + DISPLAY_LEFT_SHIFT; + return x + DISPLAY_LEFT_SHIFT; } -STATIC_INLINE int coord_diw_to_window_x (int x) +STATIC_INLINE int coord_diw_to_window_x(int x) { - return (x - DISPLAY_LEFT_SHIFT + DIW_DDF_OFFSET - 1); + return (x - DISPLAY_LEFT_SHIFT + DIW_DDF_OFFSET - 1); } -STATIC_INLINE int coord_window_to_diw_x (int x) +STATIC_INLINE int coord_window_to_diw_x(int x) { - x = coord_window_to_hw_x (x); - return x - DIW_DDF_OFFSET; + x = coord_window_to_hw_x(x); + return x - DIW_DDF_OFFSET; } extern int framecnt; /* color values in two formats: 12 (OCS/ECS) or 24 (AGA) bit Amiga RGB (color_regs), - * and the native color value; both for each Amiga hardware color register. + * and the native color value; both for each Amiga hardware color register. * * !!! See color_reg_xxx functions below before touching !!! */ -struct color_entry { - uae_u16 color_regs_ecs[32]; - xcolnr acolors[256]; - uae_u32 color_regs_aga[256]; +struct color_entry +{ + uae_u16 color_regs_ecs[32]; + xcolnr acolors[256]; + uae_u32 color_regs_aga[256]; bool borderblank; }; @@ -67,19 +69,20 @@ struct color_entry { #else STATIC_INLINE uae_u16 CONVERT_RGB(uae_u32 c) { - uae_u16 ret; - __asm__ ( - "ubfx r1, %[c], #19, #5 \n\t" - "ubfx r2, %[c], #10, #6 \n\t" - "ubfx %[v], %[c], #3, #5 \n\t" - "orr %[v], %[v], r1, lsl #11 \n\t" - "orr %[v], %[v], r2, lsl #5 \n\t" - : [v] "=r" (ret) : [c] "r" (c) : "r1", "r2" ); - return ret; + uae_u16 ret; + __asm__( + "ubfx r1, %[c], #19, #5 \n\t" + "ubfx r2, %[c], #10, #6 \n\t" + "ubfx %[v], %[c], #3, #5 \n\t" + "orr %[v], %[v], r1, lsl #11 \n\t" + "orr %[v], %[v], r2, lsl #5 \n\t" + : [v] "=r" (ret) : [c] "r" (c) : "r1", + "r2"); + return ret; } #endif -STATIC_INLINE xcolnr getxcolor (int c) +STATIC_INLINE xcolnr getxcolor(int c) { if (aga_mode) return CONVERT_RGB(c); @@ -88,7 +91,7 @@ STATIC_INLINE xcolnr getxcolor (int c) } /* functions for reading, writing, copying and comparing struct color_entry */ -STATIC_INLINE int color_reg_get (struct color_entry *ce, int c) +STATIC_INLINE int color_reg_get(struct color_entry *ce, int c) { if (aga_mode) return ce->color_regs_aga[c]; @@ -96,7 +99,7 @@ STATIC_INLINE int color_reg_get (struct color_entry *ce, int c) return ce->color_regs_ecs[c]; } -STATIC_INLINE void color_reg_set (struct color_entry *ce, int c, int v) +STATIC_INLINE void color_reg_set(struct color_entry *ce, int c, int v) { if (aga_mode) ce->color_regs_aga[c] = v; @@ -105,15 +108,15 @@ STATIC_INLINE void color_reg_set (struct color_entry *ce, int c, int v) } /* ugly copy hack, is there better solution? */ -STATIC_INLINE void color_reg_cpy (struct color_entry *dst, struct color_entry *src) +STATIC_INLINE void color_reg_cpy(struct color_entry *dst, struct color_entry *src) { dst->borderblank = src->borderblank; - if (aga_mode) - /* copy acolors and color_regs_aga */ - memcpy (dst->acolors, src->acolors, sizeof(struct color_entry) - sizeof(uae_u16) * 32); - else - /* copy first 32 acolors and color_regs_ecs */ - memcpy(dst->color_regs_ecs, src->color_regs_ecs, sizeof(uae_u16) * 32 + sizeof(xcolnr) * 32); + if (aga_mode) + /* copy acolors and color_regs_aga */ + memcpy(dst->acolors, src->acolors, sizeof(struct color_entry) - sizeof(uae_u16) * 32); + else + /* copy first 32 acolors and color_regs_ecs */ + memcpy(dst->color_regs_ecs, src->color_regs_ecs, sizeof(uae_u16) * 32 + sizeof(xcolnr) * 32); } /* @@ -126,10 +129,11 @@ STATIC_INLINE void color_reg_cpy (struct color_entry *dst, struct color_entry *s */ #define COLOR_CHANGE_BRDBLANK 0x80000000 -struct color_change { - int linepos; - int regno; - unsigned int value; +struct color_change +{ + int linepos; + int regno; + unsigned int value; }; /* 440 rather than 880, since sprites are always lores. */ @@ -142,15 +146,16 @@ struct color_change { struct sprite_entry { - unsigned short pos; - unsigned short max; - unsigned int first_pixel; - bool has_attached; + unsigned short pos; + unsigned short max; + unsigned int first_pixel; + bool has_attached; }; -union sps_union { - uae_u8 bytes[MAX_SPR_PIXELS]; - uae_u32 words[MAX_SPR_PIXELS / 4]; +union sps_union +{ + uae_u8 bytes[MAX_SPR_PIXELS]; + uae_u32 words[MAX_SPR_PIXELS / 4]; }; extern union sps_union spixstate; @@ -167,27 +172,29 @@ extern struct draw_info curr_drawinfo[2 * (MAXVPOS + 2) + 1]; /* struct decision contains things we save across drawing frames for * comparison (smart update stuff). */ -struct decision { - /* Records the leftmost access of BPL1DAT. */ - int plfleft, plfright, plflinelen; - /* Display window: native coordinates, depend on lores state. */ - int diwfirstword, diwlastword; - int ctable; +struct decision +{ + /* Records the leftmost access of BPL1DAT. */ + int plfleft, plfright, plflinelen; + /* Display window: native coordinates, depend on lores state. */ + int diwfirstword, diwlastword; + int ctable; - uae_u16 bplcon0, bplcon2; - uae_u16 bplcon3, bplcon4; - uae_u8 nr_planes; - uae_u8 bplres; - bool ham_seen; - bool ham_at_start; + uae_u16 bplcon0, bplcon2; + uae_u16 bplcon3, bplcon4; + uae_u8 nr_planes; + uae_u8 bplres; + bool ham_seen; + bool ham_at_start; }; /* Anything related to changes in hw registers during the DDF for one * line. */ -struct draw_info { - int first_sprite_entry, last_sprite_entry; - int first_color_change, last_color_change; - int nr_color_changes, nr_sprites; +struct draw_info +{ + int first_sprite_entry, last_sprite_entry; + int first_color_change, last_color_change; + int nr_color_changes, nr_sprites; }; extern struct decision line_decisions[2 * (MAXVPOS + 2) + 1]; @@ -195,15 +202,15 @@ extern struct decision line_decisions[2 * (MAXVPOS + 2) + 1]; extern uae_u8 line_data[(MAXVPOS + 2) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2]; /* Functions in drawing.c. */ -extern int coord_native_to_amiga_y (int); -extern int coord_native_to_amiga_x (int); +extern int coord_native_to_amiga_y(int); +extern int coord_native_to_amiga_x(int); -extern void hsync_record_line_state (int lineno); -extern void vsync_handle_redraw (void); -extern void vsync_handle_check (void); -extern void init_hardware_for_drawing_frame (void); -extern void reset_drawing (void); -extern void drawing_init (void); +extern void hsync_record_line_state(int lineno); +extern void vsync_handle_redraw(void); +extern void vsync_handle_check(void); +extern void init_hardware_for_drawing_frame(void); +extern void reset_drawing(void); +extern void drawing_init(void); extern unsigned long time_per_frame; extern void adjust_idletime(unsigned long ns_waited); @@ -217,15 +224,15 @@ extern void adjust_idletime(unsigned long ns_waited); extern int inhibit_frame; -STATIC_INLINE void set_inhibit_frame (int bit) +STATIC_INLINE void set_inhibit_frame(int bit) { - inhibit_frame |= 1 << bit; + inhibit_frame |= 1 << bit; } -STATIC_INLINE void clear_inhibit_frame (int bit) +STATIC_INLINE void clear_inhibit_frame(int bit) { - inhibit_frame &= ~(1 << bit); + inhibit_frame &= ~(1 << bit); } -STATIC_INLINE void toggle_inhibit_frame (int bit) +STATIC_INLINE void toggle_inhibit_frame(int bit) { - inhibit_frame ^= 1 << bit; + inhibit_frame ^= 1 << bit; } diff --git a/src/include/inputdevice.h b/src/include/inputdevice.h index 77f796bc..f02b46e3 100644 --- a/src/include/inputdevice.h +++ b/src/include/inputdevice.h @@ -39,8 +39,8 @@ struct inputdevice_functions { void (*unacquire)(int); void (*read)(void); int (*get_num)(void); - TCHAR* (*get_friendlyname)(int); - TCHAR* (*get_uniquename)(int); + const TCHAR* (*get_friendlyname)(int); + const TCHAR* (*get_uniquename)(int); int (*get_widget_num)(int); int (*get_widget_type)(int,int,TCHAR*,uae_u32*); int (*get_widget_first)(int,int); diff --git a/src/include/options.h b/src/include/options.h index 01d04e18..df939654 100644 --- a/src/include/options.h +++ b/src/include/options.h @@ -1,22 +1,24 @@ - /* - * UAE - The Un*x Amiga Emulator - * - * Stuff - * - * Copyright 1995, 1996 Ed Hanway - * Copyright 1995-2001 Bernd Schmidt - */ +/* + * UAE - The Un*x Amiga Emulator + * + * Stuff + * + * Copyright 1995, 1996 Ed Hanway + * Copyright 1995-2001 Bernd Schmidt + */ +#pragma once #define UAEMAJOR 2 #define UAEMINOR 5 #define UAESUBREV 1 extern long int version; -struct strlist { - struct strlist *next; - TCHAR *option, *value; - int unknown; +struct strlist +{ + struct strlist *next; + TCHAR *option, *value; + int unknown; }; #define DEFAULT_JIT_CACHE_SIZE 8192 @@ -35,7 +37,8 @@ struct strlist { #define MAX_INPUT_SUB_EVENT_ALL 9 #define SPARE_SUB_EVENT 8 -struct uae_input_device { +struct uae_input_device +{ TCHAR *name; TCHAR *configname; uae_s16 eventid[MAX_INPUT_DEVICE_EVENTS][MAX_INPUT_SUB_EVENT_ALL]; @@ -49,7 +52,8 @@ struct uae_input_device { #define MAX_JPORTS 4 #define NORMAL_JPORTS 2 #define MAX_JPORTNAME 128 -struct jport { +struct jport +{ int id; int mode; // 0=def,1=mouse,2=joy,3=anajoy,4=lightpen int autofire; @@ -83,135 +87,138 @@ struct floppyslot int dfxtype; }; -struct wh { - int x, y; - int width, height; +struct wh +{ + int x, y; + int width, height; }; #define MOUNT_CONFIG_SIZE 30 -struct uaedev_config_info { - TCHAR devname[MAX_DPATH]; - TCHAR volname[MAX_DPATH]; - TCHAR rootdir[MAX_DPATH]; - bool ishdf; - bool readonly; - int bootpri; - bool autoboot; - bool donotmount; - TCHAR filesys[MAX_DPATH]; +struct uaedev_config_info +{ + TCHAR devname[MAX_DPATH]; + TCHAR volname[MAX_DPATH]; + TCHAR rootdir[MAX_DPATH]; + bool ishdf; + bool readonly; + int bootpri; + bool autoboot; + bool donotmount; + TCHAR filesys[MAX_DPATH]; int cyls; // zero if detected from size - int surfaces; - int sectors; - int reserved; - int blocksize; - int configoffset; - int controller; + int surfaces; + int sectors; + int reserved; + int blocksize; + int configoffset; + int controller; // zero if default int pcyls, pheads, psecs; }; -struct uae_prefs { - struct strlist *all_lines; +struct uae_prefs +{ + struct strlist *all_lines; - TCHAR description[256]; - TCHAR info[256]; - int config_version; + TCHAR description[256]; + TCHAR info[256]; + int config_version; bool socket_emu; - bool start_gui; + bool start_gui; - int produce_sound; - int sound_stereo; - int sound_stereo_separation; - int sound_mixed_stereo_delay; - int sound_freq; - int sound_interpol; - int sound_filter; - int sound_filter_type; + int produce_sound; + int sound_stereo; + int sound_stereo_separation; + int sound_mixed_stereo_delay; + int sound_freq; + int sound_interpol; + int sound_filter; + int sound_filter_type; int sound_volume_cd; - int cachesize; - int optcount[10]; + int cachesize; + int optcount[10]; - int gfx_framerate; - struct wh gfx_size_win; - struct wh gfx_size_fs; - struct wh gfx_size; - int gfx_resolution; + int gfx_framerate; + struct wh gfx_size_win; + struct wh gfx_size_fs; + struct wh gfx_size; + int gfx_resolution; #ifdef RASPBERRY - int gfx_correct_aspect; - int gfx_fullscreen_ratio; - int kbd_led_num; - int kbd_led_scr; - int kbd_led_cap; -#endif + int gfx_correct_aspect; + int gfx_fullscreen_ratio; + int kbd_led_num; + int kbd_led_scr; + int kbd_led_cap; +#endif - bool immediate_blits; + bool immediate_blits; int waiting_blits; - unsigned int chipset_mask; - bool ntscmode; - int chipset_refreshrate; - int collision_level; - int leds_on_screen; - int fast_copper; - int floppy_speed; - int floppy_write_length; - bool tod_hack; + unsigned int chipset_mask; + bool ntscmode; + int chipset_refreshrate; + int collision_level; + int leds_on_screen; + int fast_copper; + int floppy_speed; + int floppy_write_length; + bool tod_hack; int filesys_limit; bool cs_cd32cd; bool cs_cd32c2p; bool cs_cd32nvram; - TCHAR romfile[MAX_DPATH]; - TCHAR romextfile[MAX_DPATH]; + TCHAR romfile[MAX_DPATH]; + TCHAR romextfile[MAX_DPATH]; TCHAR flashfile[MAX_DPATH]; struct cdslot cdslots[MAX_TOTAL_SCSI_DEVICES]; - TCHAR path_floppy[256]; - TCHAR path_hardfile[256]; - TCHAR path_rom[256]; - TCHAR path_cd[256]; + TCHAR path_floppy[256]; + TCHAR path_hardfile[256]; + TCHAR path_rom[256]; + TCHAR path_cd[256]; - int m68k_speed; - int cpu_model; - int fpu_model; - bool cpu_compatible; - bool address_space_24; - int picasso96_modeflags; + int m68k_speed; + int cpu_model; + int fpu_model; + bool cpu_compatible; + bool address_space_24; + int picasso96_modeflags; - uae_u32 z3fastmem_size; - uae_u32 z3fastmem_start; - uae_u32 fastmem_size; - uae_u32 chipmem_size; - uae_u32 bogomem_size; - uae_u32 rtgmem_size; - int rtgmem_type; + uae_u32 z3fastmem_size; + uae_u32 z3fastmem_start; + uae_u32 fastmem_size; + uae_u32 chipmem_size; + uae_u32 bogomem_size; + uae_u32 rtgmem_size; + int rtgmem_type; - int mountitems; - struct uaedev_config_info mountconfig[MOUNT_CONFIG_SIZE]; + int mountitems; + struct uaedev_config_info mountconfig[MOUNT_CONFIG_SIZE]; - int nr_floppies; - struct floppyslot floppyslots[4]; + int nr_floppies; + struct floppyslot floppyslots[4]; - /* Target specific options */ - int pandora_horizontal_offset; - int pandora_vertical_offset; - int pandora_cpu_speed; - int pandora_hide_idle_led; - - int pandora_tapDelay; - int pandora_customControls; + /* Target specific options */ + int pandora_horizontal_offset; + int pandora_vertical_offset; + int pandora_cpu_speed; + int pandora_hide_idle_led; - int key_for_menu; + int pandora_tapDelay; + int pandora_customControls; - /* input */ + int key_for_menu; + + /* input */ struct jport jports[MAX_JPORTS]; int input_selected_setting; - int input_joymouse_multiplier; + int input_joymouse_multiplier; int input_joymouse_deadzone; int input_joystick_deadzone; int input_joymouse_speed; @@ -219,83 +226,95 @@ struct uae_prefs { int input_analog_joystick_offset; int input_autofire_linecnt; int input_mouse_speed; - int input_tablet; + int input_tablet; int input_keyboard_type; struct uae_input_device joystick_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES]; struct uae_input_device mouse_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES]; struct uae_input_device keyboard_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES]; TCHAR input_config_name[GAMEPORT_INPUT_SETTINGS][256]; - }; /* Contains the filename of .uaerc */ -extern void cfgfile_write (struct zfile *, const TCHAR *option, const TCHAR *format,...); -extern void cfgfile_dwrite (struct zfile *, const TCHAR *option, const TCHAR *format,...); -extern void cfgfile_target_write (struct zfile *, const TCHAR *option, const TCHAR *format,...); -extern void cfgfile_target_dwrite (struct zfile *, const TCHAR *option, const TCHAR *format,...); +extern void cfgfile_write(struct zfile *, const TCHAR *option, const TCHAR *format, ...); +extern void cfgfile_dwrite(struct zfile *, const TCHAR *option, const TCHAR *format, ...); +extern void cfgfile_target_write(struct zfile *, const TCHAR *option, const TCHAR *format, ...); +extern void cfgfile_target_dwrite(struct zfile *, const TCHAR *option, const TCHAR *format, ...); -extern void cfgfile_write_bool (struct zfile *f, const TCHAR *option, bool b); -extern void cfgfile_dwrite_bool (struct zfile *f,const TCHAR *option, bool b); -extern void cfgfile_target_write_bool (struct zfile *f, const TCHAR *option, bool b); -extern void cfgfile_target_dwrite_bool (struct zfile *f, const TCHAR *option, bool b); +extern void cfgfile_write_bool(struct zfile *f, const TCHAR *option, bool b); +extern void cfgfile_dwrite_bool(struct zfile *f, const TCHAR *option, bool b); +extern void cfgfile_target_write_bool(struct zfile *f, const TCHAR *option, bool b); +extern void cfgfile_target_dwrite_bool(struct zfile *f, const TCHAR *option, bool b); -extern void cfgfile_write_str (struct zfile *f, const TCHAR *option, const TCHAR *value); -extern void cfgfile_dwrite_str (struct zfile *f, const TCHAR *option, const TCHAR *value); -extern void cfgfile_target_write_str (struct zfile *f, const TCHAR *option, const TCHAR *value); -extern void cfgfile_target_dwrite_str (struct zfile *f, const TCHAR *option, const TCHAR *value); +extern void cfgfile_write_str(struct zfile *f, const TCHAR *option, const TCHAR *value); +extern void cfgfile_dwrite_str(struct zfile *f, const TCHAR *option, const TCHAR *value); +extern void cfgfile_target_write_str(struct zfile *f, const TCHAR *option, const TCHAR *value); +extern void cfgfile_target_dwrite_str(struct zfile *f, const TCHAR *option, const TCHAR *value); -extern struct uaedev_config_info *add_filesys_config (struct uae_prefs *p, int index, - const TCHAR *devname, const TCHAR *volname, const TCHAR *rootdir, bool readonly, - int cyls, int secspertrack, int surfaces, int reserved, - int blocksize, int bootpri, const TCHAR *filesysdir, int hdc, int flags, - int pcyls, int pheads, int psecs); +extern struct uaedev_config_info *add_filesys_config(struct uae_prefs *p, + int index, + const TCHAR *devname, + const TCHAR *volname, + const TCHAR *rootdir, + bool readonly, + int cyls, + int secspertrack, + int surfaces, + int reserved, + int blocksize, + int bootpri, + const TCHAR *filesysdir, + int hdc, + int flags, + int pcyls, + int pheads, + int psecs); -extern void default_prefs (struct uae_prefs *, int); -extern void discard_prefs (struct uae_prefs *, int); -extern int bip_a500 (struct uae_prefs *p, int rom); -extern int bip_a500plus (struct uae_prefs *p, int rom); -extern int bip_a1200 (struct uae_prefs *p, int rom); -extern int bip_a2000 (struct uae_prefs *p, int rom); -extern int bip_a4000 (struct uae_prefs *p, int rom); -extern int bip_cd32 (struct uae_prefs *p, int rom); +extern void default_prefs(struct uae_prefs *, int); +extern void discard_prefs(struct uae_prefs *, int); +extern int bip_a500(struct uae_prefs *p, int rom); +extern int bip_a500plus(struct uae_prefs *p, int rom); +extern int bip_a1200(struct uae_prefs *p, int rom); +extern int bip_a2000(struct uae_prefs *p, int rom); +extern int bip_a4000(struct uae_prefs *p, int rom); +extern int bip_cd32(struct uae_prefs *p, int rom); -int parse_cmdline_option (struct uae_prefs *, TCHAR, const TCHAR *); +int parse_cmdline_option(struct uae_prefs *, TCHAR, const TCHAR *); -extern int cfgfile_yesno (const TCHAR *option, const TCHAR *value, const TCHAR *name, bool *location); -extern int cfgfile_intval (const TCHAR *option, const TCHAR *value, const TCHAR *name, int *location, int scale); -extern int cfgfile_strval (const TCHAR *option, const TCHAR *value, const TCHAR *name, int *location, const TCHAR *table[], int more); -extern int cfgfile_string (const TCHAR *option, const TCHAR *value, const TCHAR *name, TCHAR *location, int maxsz); -extern TCHAR *cfgfile_subst_path (const TCHAR *path, const TCHAR *subst, const TCHAR *file); +extern int cfgfile_yesno(const TCHAR *option, const TCHAR *value, const TCHAR *name, bool *location); +extern int cfgfile_intval(const TCHAR *option, const TCHAR *value, const TCHAR *name, int *location, int scale); +extern int cfgfile_strval(const TCHAR *option, const TCHAR *value, const TCHAR *name, int *location, const TCHAR *table[], int more); +extern int cfgfile_string(const TCHAR *option, const TCHAR *value, const TCHAR *name, TCHAR *location, int maxsz); +extern TCHAR *cfgfile_subst_path(const TCHAR *path, const TCHAR *subst, const TCHAR *file); -extern TCHAR *target_expand_environment (const TCHAR *path); -extern int target_parse_option (struct uae_prefs *, const TCHAR *option, const TCHAR *value); -extern void target_save_options (struct zfile*, struct uae_prefs *); -extern void target_default_options (struct uae_prefs *, int type); -extern void target_fixup_options (struct uae_prefs *); -extern int target_cfgfile_load (struct uae_prefs *, const TCHAR *filename, int type, int isdefault); -extern void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type); +extern TCHAR *target_expand_environment(const TCHAR *path); +extern int target_parse_option(struct uae_prefs *, const TCHAR *option, const TCHAR *value); +extern void target_save_options(struct zfile*, struct uae_prefs *); +extern void target_default_options(struct uae_prefs *, int type); +extern void target_fixup_options(struct uae_prefs *); +extern int target_cfgfile_load(struct uae_prefs *, const TCHAR *filename, int type, int isdefault); +extern void cfgfile_save_options(struct zfile *f, struct uae_prefs *p, int type); -extern int cfgfile_load (struct uae_prefs *p, const TCHAR *filename, int *type, int ignorelink, int userconfig); -extern int cfgfile_save (struct uae_prefs *p, const TCHAR *filename, int); -extern void cfgfile_parse_line (struct uae_prefs *p, TCHAR *, int); -extern int cfgfile_parse_option (struct uae_prefs *p, TCHAR *option, TCHAR *value, int); -extern int cfgfile_get_description (const TCHAR *filename, TCHAR *description); -extern uae_u32 cfgfile_uaelib (int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen); -extern uae_u32 cfgfile_uaelib_modify (uae_u32 mode, uae_u32 parms, uae_u32 size, uae_u32 out, uae_u32 outsize); -extern uae_u32 cfgfile_modify (uae_u32 index, TCHAR *parms, uae_u32 size, TCHAR *out, uae_u32 outsize); -extern void cfgfile_addcfgparam (TCHAR *); +extern int cfgfile_load(struct uae_prefs *p, const TCHAR *filename, int *type, int ignorelink, int userconfig); +extern int cfgfile_save(struct uae_prefs *p, const TCHAR *filename, int); +extern void cfgfile_parse_line(struct uae_prefs *p, TCHAR *, int); +extern int cfgfile_parse_option(struct uae_prefs *p, TCHAR *option, TCHAR *value, int); +extern int cfgfile_get_description(const TCHAR *filename, TCHAR *description); +extern uae_u32 cfgfile_uaelib(int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen); +extern uae_u32 cfgfile_uaelib_modify(uae_u32 mode, uae_u32 parms, uae_u32 size, uae_u32 out, uae_u32 outsize); +extern uae_u32 cfgfile_modify(uae_u32 index, TCHAR *parms, uae_u32 size, TCHAR *out, uae_u32 outsize); +extern void cfgfile_addcfgparam(TCHAR *); extern int cfgfile_configuration_change(int); -extern void fixup_prefs_dimensions (struct uae_prefs *prefs); -extern void fixup_prefs (struct uae_prefs *prefs); -extern void fixup_cpu (struct uae_prefs *prefs); +extern void fixup_prefs_dimensions(struct uae_prefs *prefs); +extern void fixup_prefs(struct uae_prefs *prefs); +extern void fixup_cpu(struct uae_prefs *prefs); -extern void check_prefs_changed_custom (void); -extern void check_prefs_changed_cpu (void); -extern void check_prefs_changed_audio (void); -extern void check_prefs_changed_cd (void); -extern int check_prefs_changed_gfx (void); +extern void check_prefs_changed_custom(void); +extern void check_prefs_changed_cpu(void); +extern void check_prefs_changed_audio(void); +extern void check_prefs_changed_cd(void); +extern int check_prefs_changed_gfx(void); extern struct uae_prefs currprefs, changed_prefs; -extern int machdep_init (void); -extern void machdep_free (void); +extern int machdep_init(void); +extern void machdep_free(void); diff --git a/src/include/sysdeps.h b/src/include/sysdeps.h index 5e007df7..9946f1ea 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 @@ -171,7 +171,10 @@ typedef unsigned char uae_u8; typedef signed char uae_s8; typedef char uae_char; -typedef struct { uae_u8 RGB[3]; } RGB; +typedef struct +{ + uae_u8 RGB[3]; +} RGB; #if SIZEOF_SHORT == 2 typedef unsigned short uae_u16; @@ -218,20 +221,20 @@ 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 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 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. */ @@ -277,7 +280,7 @@ extern TCHAR *utf8u (const char *s); #define FILEFLAG_PURE 0x40 #define REGPARAM2 -#define REGPARAM3 +#define REGPARAM3 #define REGPARAM #define abort() \ @@ -292,63 +295,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 @@ -356,9 +359,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 @@ -378,11 +381,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 @@ -438,14 +441,22 @@ extern void gui_message (const TCHAR *,...); #ifdef ARMV6_ASSEMBLY -STATIC_INLINE uae_u32 do_byteswap_32(uae_u32 v) {__asm__ ( - "rev %0, %0" - : "=r" (v) : "0" (v) ); return v;} +STATIC_INLINE uae_u32 do_byteswap_32(uae_u32 v) +{ + __asm__( + "rev %0, %0" + : "=r" (v) : "0" (v)); + return v; +} -STATIC_INLINE uae_u32 do_byteswap_16(uae_u32 v) {__asm__ ( - "revsh %0, %0\n\t" - "uxth %0, %0" - : "=r" (v) : "0" (v) ); return v;} +STATIC_INLINE uae_u32 do_byteswap_16(uae_u32 v) +{ + __asm__( + "revsh %0, %0\n\t" + "uxth %0, %0" + : "=r" (v) : "0" (v)); + return v; +} #endif @@ -461,9 +472,9 @@ STATIC_INLINE uae_u32 do_byteswap_16(uae_u32 v) {__asm__ ( #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 diff --git a/src/newcpu.cpp b/src/newcpu.cpp index d026b71e..b5071270 100644 --- a/src/newcpu.cpp +++ b/src/newcpu.cpp @@ -2,7 +2,7 @@ * newcpu.cpp - CPU emulation * * Copyright (c) 2010 ARAnyM dev team (see AUTHORS) - * + * * * Inspired by Christian Bauer's Basilisk II * @@ -23,20 +23,20 @@ * along with ARAnyM; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - /* - * UAE - The Un*x Amiga Emulator - * - * MC68000 emulation - * - * (c) 1995 Bernd Schmidt - */ +/* + * UAE - The Un*x Amiga Emulator + * + * MC68000 emulation + * + * (c) 1995 Bernd Schmidt + */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" -#include "memory.h" +#include "include/memory.h" #include "custom.h" #include "newcpu.h" #include "cpu_prefetch.h" @@ -56,7 +56,10 @@ #else /* Need to have these somewhere */ static void build_comp(void) {} -bool check_prefs_changed_comp (void) { return false; } +bool check_prefs_changed_comp(void) +{ + return false; +} #endif /* Opcode of faulting instruction */ @@ -71,8 +74,8 @@ static int last_writeaccess_for_exception_3; static int last_instructionaccess_for_exception_3; int cpu_cycles; -const int areg_byteinc[] = { 1,1,1,1,1,1,1,2 }; -const int imm8_table[] = { 8,1,2,3,4,5,6,7 }; +const int areg_byteinc[] = { 1, 1, 1, 1, 1, 1, 1, 2 }; +const int imm8_table[] = { 8, 1, 2, 3, 4, 5, 6, 7 }; int movem_index1[256]; int movem_index2[256]; @@ -94,14 +97,14 @@ static uae_u16 mmusr_030; static unsigned long int instrcount[65536]; static uae_u16 opcodenums[65536]; -static int compfn (const void *el1, const void *el2) +static int compfn(const void *el1, const void *el2) { return instrcount[*(const uae_u16 *)el1] < instrcount[*(const uae_u16 *)el2]; } -static TCHAR *icountfilename (void) +static TCHAR *icountfilename(void) { - TCHAR *name = getenv ("INSNCOUNT"); + TCHAR *name = getenv("INSNCOUNT"); if (name) return name; return COUNT_INSTRS == 2 ? "frequent.68k" : "insncount"; diff --git a/src/od-pandora/bsdsocket_host.cpp b/src/od-pandora/bsdsocket_host.cpp index c9915673..c9e95f69 100644 --- a/src/od-pandora/bsdsocket_host.cpp +++ b/src/od-pandora/bsdsocket_host.cpp @@ -27,7 +27,7 @@ #include "sysdeps.h" #include "options.h" -#include "memory.h" +#include "include/memory.h" #include "newcpu.h" #include "custom.h" #include "autoconf.h" @@ -40,8 +40,9 @@ volatile int bsd_int_requested; -void bsdsock_fake_int_handler(void) { - STUB(""); +void bsdsock_fake_int_handler(void) +{ + STUB(""); } #else @@ -96,15 +97,15 @@ void bsdsock_fake_int_handler(void) { #define S_GL_result(res) sb->resultval = (res) -uae_u32 bsdthr_Accept_2 (SB); -uae_u32 bsdthr_Recv_2 (SB); -uae_u32 bsdthr_blockingstuff (uae_u32 (*tryfunc)(SB), SB); -uae_u32 bsdthr_SendRecvAcceptConnect (uae_u32 (*tryfunc)(SB), SB); -uae_u32 bsdthr_Send_2 (SB); -uae_u32 bsdthr_Connect_2 (SB); -uae_u32 bsdthr_WaitSelect (SB); -uae_u32 bsdthr_Wait (SB); -void clearsockabort (SB); +uae_u32 bsdthr_Accept_2(SB); +uae_u32 bsdthr_Recv_2(SB); +uae_u32 bsdthr_blockingstuff(uae_u32(*tryfunc)(SB), SB); +uae_u32 bsdthr_SendRecvAcceptConnect(uae_u32(*tryfunc)(SB), SB); +uae_u32 bsdthr_Send_2(SB); +uae_u32 bsdthr_Connect_2(SB); +uae_u32 bsdthr_WaitSelect(SB); +uae_u32 bsdthr_Wait(SB); +void clearsockabort(SB); static uae_sem_t sem_queue; @@ -115,192 +116,264 @@ static uae_sem_t sem_queue; /* * Map host errno to amiga errno */ -static int mapErrno (int e) +static int mapErrno(int e) { - switch (e) { - case EINTR: e = 4; break; - case EDEADLK: e = 11; break; - case EAGAIN: e = 35; break; - case EINPROGRESS: e = 36; break; - case EALREADY: e = 37; break; - case ENOTSOCK: e = 38; break; - case EDESTADDRREQ: e = 39; break; - case EMSGSIZE: e = 40; break; - case EPROTOTYPE: e = 41; break; - case ENOPROTOOPT: e = 42; break; - case EPROTONOSUPPORT: e = 43; break; - case ESOCKTNOSUPPORT: e = 44; break; - case EOPNOTSUPP: e = 45; break; - case EPFNOSUPPORT: e = 46; break; - case EAFNOSUPPORT: e = 47; break; - case EADDRINUSE: e = 48; break; - case EADDRNOTAVAIL: e = 49; break; - case ENETDOWN: e = 50; break; - case ENETUNREACH: e = 51; break; - case ENETRESET: e = 52; break; - case ECONNABORTED: e = 53; break; - case ECONNRESET: e = 54; break; - case ENOBUFS: e = 55; break; - case EISCONN: e = 56; break; - case ENOTCONN: e = 57; break; - case ESHUTDOWN: e = 58; break; - case ETOOMANYREFS: e = 59; break; - case ETIMEDOUT: e = 60; break; - case ECONNREFUSED: e = 61; break; - case ELOOP: e = 62; break; - case ENAMETOOLONG: e = 63; break; - default: break; - } - return e; + switch (e) + { + case EINTR: + e = 4; + break; + case EDEADLK: + e = 11; + break; + case EAGAIN: + e = 35; + break; + case EINPROGRESS: + e = 36; + break; + case EALREADY: + e = 37; + break; + case ENOTSOCK: + e = 38; + break; + case EDESTADDRREQ: + e = 39; + break; + case EMSGSIZE: + e = 40; + break; + case EPROTOTYPE: + e = 41; + break; + case ENOPROTOOPT: + e = 42; + break; + case EPROTONOSUPPORT: + e = 43; + break; + case ESOCKTNOSUPPORT: + e = 44; + break; + case EOPNOTSUPP: + e = 45; + break; + case EPFNOSUPPORT: + e = 46; + break; + case EAFNOSUPPORT: + e = 47; + break; + case EADDRINUSE: + e = 48; + break; + case EADDRNOTAVAIL: + e = 49; + break; + case ENETDOWN: + e = 50; + break; + case ENETUNREACH: + e = 51; + break; + case ENETRESET: + e = 52; + break; + case ECONNABORTED: + e = 53; + break; + case ECONNRESET: + e = 54; + break; + case ENOBUFS: + e = 55; + break; + case EISCONN: + e = 56; + break; + case ENOTCONN: + e = 57; + break; + case ESHUTDOWN: + e = 58; + break; + case ETOOMANYREFS: + e = 59; + break; + case ETIMEDOUT: + e = 60; + break; + case ECONNREFUSED: + e = 61; + break; + case ELOOP: + e = 62; + break; + case ENAMETOOLONG: + e = 63; + break; + default: + break; + } + return e; } /* * Map amiga (s|g)etsockopt level into native one */ -static int mapsockoptlevel (int level) +static int mapsockoptlevel(int level) { - switch (level) { - case 0xffff: - return SOL_SOCKET; - case 0: - return IPPROTO_IP; - case 1: - return IPPROTO_ICMP; - case 2: - return IPPROTO_IGMP; + switch (level) + { + case 0xffff: + return SOL_SOCKET; + case 0: + return IPPROTO_IP; + case 1: + return IPPROTO_ICMP; + case 2: + return IPPROTO_IGMP; #ifdef IPPROTO_IPIP - case 4: - return IPPROTO_IPIP; + case 4: + return IPPROTO_IPIP; #endif - case 6: - return IPPROTO_TCP; - case 8: - return IPPROTO_EGP; - case 12: - return IPPROTO_PUP; - case 17: - return IPPROTO_UDP; - case 22: - return IPPROTO_IDP; + case 6: + return IPPROTO_TCP; + case 8: + return IPPROTO_EGP; + case 12: + return IPPROTO_PUP; + case 17: + return IPPROTO_UDP; + case 22: + return IPPROTO_IDP; #ifdef IPPROTO_TP - case 29: - return IPPROTO_TP; + case 29: + return IPPROTO_TP; #endif - case 98: - return IPPROTO_ENCAP; - default: - DEBUG_LOG ("Unknown sockopt level %d\n", level); - return level; - } + case 98: + return IPPROTO_ENCAP; + default: + DEBUG_LOG("Unknown sockopt level %d\n", level); + return level; + } } /* * Map amiga (s|g)etsockopt optname into native one */ -static int mapsockoptname (int level, int optname) +static int mapsockoptname(int level, int optname) { - switch (level) { + switch (level) + { - case SOL_SOCKET: - switch (optname) { - case 0x0001: - return SO_DEBUG; - case 0x0002: - return SO_ACCEPTCONN; - case 0x0004: - return SO_REUSEADDR; - case 0x0008: - return SO_KEEPALIVE; - case 0x0010: - return SO_DONTROUTE; - case 0x0020: - return SO_BROADCAST; + case SOL_SOCKET: + switch (optname) + { + case 0x0001: + return SO_DEBUG; + case 0x0002: + return SO_ACCEPTCONN; + case 0x0004: + return SO_REUSEADDR; + case 0x0008: + return SO_KEEPALIVE; + case 0x0010: + return SO_DONTROUTE; + case 0x0020: + return SO_BROADCAST; #ifdef SO_USELOOPBACK - case 0x0040: - return SO_USELOOPBACK; + case 0x0040: + return SO_USELOOPBACK; #endif - case 0x0080: - return SO_LINGER; - case 0x0100: - return SO_OOBINLINE; + case 0x0080: + return SO_LINGER; + case 0x0100: + return SO_OOBINLINE; #ifdef SO_REUSEPORT - case 0x0200: - return SO_REUSEPORT; + case 0x0200: + return SO_REUSEPORT; #endif - case 0x1001: - return SO_SNDBUF; - case 0x1002: - return SO_RCVBUF; - case 0x1003: - return SO_SNDLOWAT; - case 0x1004: - return SO_RCVLOWAT; - case 0x1005: - return SO_SNDTIMEO; - case 0x1006: - return SO_RCVTIMEO; - case 0x1007: - return SO_ERROR; - case 0x1008: - return SO_TYPE; + case 0x1001: + return SO_SNDBUF; + case 0x1002: + return SO_RCVBUF; + case 0x1003: + return SO_SNDLOWAT; + case 0x1004: + return SO_RCVLOWAT; + case 0x1005: + return SO_SNDTIMEO; + case 0x1006: + return SO_RCVTIMEO; + case 0x1007: + return SO_ERROR; + case 0x1008: + return SO_TYPE; - default: - DEBUG_LOG ("Invalid setsockopt option %x for level %d\n", - optname, level); - return -1; - } - break; + default: + DEBUG_LOG("Invalid setsockopt option %x for level %d\n", + optname, + level); + return -1; + } + break; - case IPPROTO_IP: - switch (optname) { - case 1: - return IP_OPTIONS; - case 2: - return IP_HDRINCL; - case 3: - return IP_TOS; - case 4: - return IP_TTL; - case 5: - return IP_RECVOPTS; - case 6: - return IP_RECVRETOPTS; - case 8: - return IP_RETOPTS; - case 9: - return IP_MULTICAST_IF; - case 10: - return IP_MULTICAST_TTL; - case 11: - return IP_MULTICAST_LOOP; - case 12: - return IP_ADD_MEMBERSHIP; - - default: - DEBUG_LOG ("Invalid setsockopt option %x for level %d\n", - optname, level); - return -1; - } - break; + case IPPROTO_IP: + switch (optname) + { + case 1: + return IP_OPTIONS; + case 2: + return IP_HDRINCL; + case 3: + return IP_TOS; + case 4: + return IP_TTL; + case 5: + return IP_RECVOPTS; + case 6: + return IP_RECVRETOPTS; + case 8: + return IP_RETOPTS; + case 9: + return IP_MULTICAST_IF; + case 10: + return IP_MULTICAST_TTL; + case 11: + return IP_MULTICAST_LOOP; + case 12: + return IP_ADD_MEMBERSHIP; - case IPPROTO_TCP: - switch (optname) { - case 1: - return TCP_NODELAY; - case 2: - return TCP_MAXSEG; + default: + DEBUG_LOG("Invalid setsockopt option %x for level %d\n", + optname, + level); + return -1; + } + break; - default: - DEBUG_LOG ("Invalid setsockopt option %x for level %d\n", - optname, level); - return -1; - } - break; + case IPPROTO_TCP: + switch (optname) + { + case 1: + return TCP_NODELAY; + case 2: + return TCP_MAXSEG; - default: - DEBUG_LOG ("Unknown level %d\n", level); - return -1; - } + default: + DEBUG_LOG("Invalid setsockopt option %x for level %d\n", + optname, + level); + return -1; + } + break; + + default: + DEBUG_LOG("Unknown level %d\n", level); + return -1; + } } @@ -309,79 +382,83 @@ static int mapsockoptname (int level, int optname) */ static void mapsockoptreturn(int level, int optname, uae_u32 optval, void *buf) { - switch (level) { + switch (level) + { - case SOL_SOCKET: - switch (optname) { - case SO_DEBUG: - case SO_ACCEPTCONN: - case SO_REUSEADDR: - case SO_KEEPALIVE: - case SO_DONTROUTE: - case SO_BROADCAST: + case SOL_SOCKET: + switch (optname) + { + case SO_DEBUG: + case SO_ACCEPTCONN: + case SO_REUSEADDR: + case SO_KEEPALIVE: + case SO_DONTROUTE: + case SO_BROADCAST: #ifdef SO_USELOOPBACK - case SO_USELOOPBACK: + case SO_USELOOPBACK: #endif - case SO_LINGER: - case SO_OOBINLINE: + case SO_LINGER: + case SO_OOBINLINE: #ifdef SO_REUSEPORT - case SO_REUSEPORT: + case SO_REUSEPORT: #endif - case SO_SNDBUF: - case SO_RCVBUF: - case SO_SNDLOWAT: - case SO_RCVLOWAT: - case SO_SNDTIMEO: - case SO_RCVTIMEO: - case SO_TYPE: - put_long (optval, *(int *)buf); - break; + case SO_SNDBUF: + case SO_RCVBUF: + case SO_SNDLOWAT: + case SO_RCVLOWAT: + case SO_SNDTIMEO: + case SO_RCVTIMEO: + case SO_TYPE: + put_long(optval, *static_cast(buf)); + break; - case SO_ERROR: - DEBUG_LOG("New errno is %d\n", mapErrno(*(int *)buf)); - put_long (optval, mapErrno(*(int *)buf)); - break; - default: - break; - } - break; + case SO_ERROR: + DEBUG_LOG("New errno is %d\n", mapErrno(*(int *)buf)); + put_long(optval, mapErrno(*static_cast(buf))); + break; + default: + break; + } + break; - case IPPROTO_IP: - switch (optname) { - case IP_OPTIONS: - case IP_HDRINCL: - case IP_TOS: - case IP_TTL: - case IP_RECVOPTS: - //case IP_RECVRETOPTS: - //case IP_RETOPTS: - case IP_MULTICAST_IF: - case IP_MULTICAST_TTL: - case IP_MULTICAST_LOOP: - case IP_ADD_MEMBERSHIP: - put_long (optval, *(int *)buf); - break; + case IPPROTO_IP: + switch (optname) + { + case IP_OPTIONS: + case IP_HDRINCL: + case IP_TOS: + case IP_TTL: + case IP_RECVOPTS: + //case IP_RECVRETOPTS: + //case IP_RETOPTS: + case IP_MULTICAST_IF: + case IP_MULTICAST_TTL: + case IP_MULTICAST_LOOP: + case IP_ADD_MEMBERSHIP: + put_long(optval, *static_cast(buf)); + break; - default: - break; - } - break; + default: + break; + } + break; - case IPPROTO_TCP: - switch (optname) { - case TCP_NODELAY: - case TCP_MAXSEG: - put_long (optval,*(int *)buf); - break; + case IPPROTO_TCP: + switch (optname) + { + case TCP_NODELAY: + case TCP_MAXSEG: + put_long(optval, *static_cast(buf)); + break; - default: - break; - } - break; + default: + break; + } + break; - default: - break; - } + default: + break; + } } /* @@ -389,113 +466,118 @@ static void mapsockoptreturn(int level, int optname, uae_u32 optval, void *buf) */ static void mapsockoptvalue(int level, int optname, uae_u32 optval, void *buf) { - switch (level) { + switch (level) + { - case SOL_SOCKET: - switch (optname) { - case SO_DEBUG: - case SO_ACCEPTCONN: - case SO_REUSEADDR: - case SO_KEEPALIVE: - case SO_DONTROUTE: - case SO_BROADCAST: + case SOL_SOCKET: + switch (optname) + { + case SO_DEBUG: + case SO_ACCEPTCONN: + case SO_REUSEADDR: + case SO_KEEPALIVE: + case SO_DONTROUTE: + case SO_BROADCAST: #ifdef SO_USELOOPBACK - case SO_USELOOPBACK: + case SO_USELOOPBACK: #endif - case SO_LINGER: - case SO_OOBINLINE: + case SO_LINGER: + case SO_OOBINLINE: #ifdef SO_REUSEPORT - case SO_REUSEPORT: + case SO_REUSEPORT: #endif - case SO_SNDBUF: - case SO_RCVBUF: - case SO_SNDLOWAT: - case SO_RCVLOWAT: - case SO_SNDTIMEO: - case SO_RCVTIMEO: - case SO_TYPE: - case SO_ERROR: - *((int *)buf) = get_long (optval); - break; - default: - break; - } - break; + case SO_SNDBUF: + case SO_RCVBUF: + case SO_SNDLOWAT: + case SO_RCVLOWAT: + case SO_SNDTIMEO: + case SO_RCVTIMEO: + case SO_TYPE: + case SO_ERROR: + *static_cast(buf) = get_long(optval); + break; + default: + break; + } + break; - case IPPROTO_IP: - switch (optname) { - case IP_OPTIONS: - case IP_HDRINCL: - case IP_TOS: - case IP_TTL: - case IP_RECVOPTS: - //case IP_RECVRETOPTS: - //case IP_RETOPTS: - case IP_MULTICAST_IF: - case IP_MULTICAST_TTL: - case IP_MULTICAST_LOOP: - case IP_ADD_MEMBERSHIP: - *((int *)buf) = get_long (optval); - break; + case IPPROTO_IP: + switch (optname) + { + case IP_OPTIONS: + case IP_HDRINCL: + case IP_TOS: + case IP_TTL: + case IP_RECVOPTS: + //case IP_RECVRETOPTS: + //case IP_RETOPTS: + case IP_MULTICAST_IF: + case IP_MULTICAST_TTL: + case IP_MULTICAST_LOOP: + case IP_ADD_MEMBERSHIP: + *static_cast(buf) = get_long(optval); + break; - default: - break; - } - break; + default: + break; + } + break; - case IPPROTO_TCP: - switch (optname) { - case TCP_NODELAY: - case TCP_MAXSEG: - *((int *)buf) = get_long (optval); - break; + case IPPROTO_TCP: + switch (optname) + { + case TCP_NODELAY: + case TCP_MAXSEG: + *static_cast(buf) = get_long(optval); + break; - default: - break; - } - break; + default: + break; + } + break; - default: - break; - } + default: + break; + } } -STATIC_INLINE void fd_zero (uae_u32 fdset, uae_u32 nfds) +STATIC_INLINE void fd_zero(uae_u32 fdset, uae_u32 nfds) { - unsigned int i; + unsigned int i; - for (i = 0; i < nfds; i += 32, fdset += 4) - put_long (fdset, 0); + for (i = 0; i < nfds; i += 32, fdset += 4) + put_long(fdset, 0); } -STATIC_INLINE int bsd_amigaside_FD_ISSET (int n, uae_u32 set) +STATIC_INLINE int bsd_amigaside_FD_ISSET(int n, uae_u32 set) { - uae_u32 foo = get_long (set + (n / 32)); - if (foo & (1 << (n % 32))) { + uae_u32 foo = get_long(set + (n / 32)); + if (foo & (1 << (n % 32))) + { return 1; } - return 0; + return 0; } -STATIC_INLINE void bsd_amigaside_FD_ZERO (uae_u32 set) +STATIC_INLINE void bsd_amigaside_FD_ZERO(uae_u32 set) { - put_long (set, 0); - put_long (set + 4, 0); + put_long(set, 0); + put_long(set + 4, 0); } -STATIC_INLINE void bsd_amigaside_FD_SET (int n, uae_u32 set) +STATIC_INLINE void bsd_amigaside_FD_SET(int n, uae_u32 set) { - set = set + (n / 32); - put_long (set, get_long (set) | (1 << (n % 32))); + set = set + (n / 32); + put_long(set, get_long(set) | (1 << (n % 32))); } #ifdef DEBUG_BSDSOCKET -static void printSockAddr (struct sockaddr_in *in) +static void printSockAddr(struct sockaddr_in *in) { - DEBUG_LOG ("Family %d, ", in->sin_family); - DEBUG_LOG ("Port %d,", ntohs (in->sin_port)); - DEBUG_LOG ("Address %s,", inet_ntoa (in->sin_addr)); + DEBUG_LOG("Family %d, ", in->sin_family); + DEBUG_LOG("Port %d,", ntohs(in->sin_port)); + DEBUG_LOG("Address %s,", inet_ntoa(in->sin_addr)); } #else #define printSockAddr(sockAddr) @@ -504,1244 +586,1418 @@ static void printSockAddr (struct sockaddr_in *in) /* * Copy a sockaddr object from amiga space to native space */ -static int copysockaddr_a2n (struct sockaddr_in *addr, uae_u32 a_addr, unsigned int len) +static int copysockaddr_a2n(struct sockaddr_in *addr, uae_u32 a_addr, unsigned int len) { - if ((len > sizeof (struct sockaddr_in)) || (len < 8)) { - return 1; - } + if ((len > sizeof(struct sockaddr_in)) || (len < 8)) + { + return 1; + } - if (a_addr == 0) { + if (a_addr == 0) + { return 0; - } + } - addr->sin_family = get_byte (a_addr + 1); - addr->sin_port = htons (get_word (a_addr + 2)); - addr->sin_addr.s_addr = htonl (get_long (a_addr + 4)); + addr->sin_family = get_byte(a_addr + 1); + addr->sin_port = htons(get_word(a_addr + 2)); + addr->sin_addr.s_addr = htonl(get_long(a_addr + 4)); - if (len > 8) - memcpy (&addr->sin_zero, get_real_address (a_addr + 8), len - 8); /* Pointless? */ + if (len > 8) + memcpy(&addr->sin_zero, get_real_address(a_addr + 8), len - 8); /* Pointless? */ - return 0; + return 0; } /* * Copy a sockaddr object from native space to amiga space */ -static int copysockaddr_n2a (uae_u32 a_addr, const struct sockaddr_in *addr, unsigned int len) +static int copysockaddr_n2a(uae_u32 a_addr, const struct sockaddr_in *addr, unsigned int len) { - if (len < 8) { + if (len < 8) + { return 1; - } + } - if (a_addr == 0) { + if (a_addr == 0) + { return 0; - } + } - put_byte (a_addr, 0); /* Anyone use this field? */ - put_byte (a_addr + 1, addr->sin_family); - put_word (a_addr + 2, ntohs (addr->sin_port)); - put_long (a_addr + 4, ntohl (addr->sin_addr.s_addr)); + put_byte(a_addr, 0); /* Anyone use this field? */ + put_byte(a_addr + 1, addr->sin_family); + put_word(a_addr + 2, ntohs(addr->sin_port)); + put_long(a_addr + 4, ntohl(addr->sin_addr.s_addr)); - if (len > 8) - memset (get_real_address (a_addr + 8), 0, len - 8); + if (len > 8) + memset(get_real_address(a_addr + 8), 0, len - 8); - return 0; + return 0; } /* * Copy a hostent object from native space to amiga space */ -static void copyHostent (const struct hostent *hostent, SB) +static void copyHostent(const struct hostent *hostent, SB) { - int size = 28; - int i; - int numaddr = 0; - int numaliases = 0; - uae_u32 aptr; + int size = 28; + int i; + int numaddr = 0; + int numaliases = 0; + uae_u32 aptr; - if (hostent->h_name != NULL) - size += strlen(hostent->h_name)+1; + if (hostent->h_name != NULL) + size += strlen(hostent->h_name) + 1; - if (hostent->h_aliases != NULL) - while (hostent->h_aliases[numaliases]) - size += strlen(hostent->h_aliases[numaliases++]) + 5; + if (hostent->h_aliases != NULL) + while (hostent->h_aliases[numaliases]) + size += strlen(hostent->h_aliases[numaliases++]) + 5; - if (hostent->h_addr_list != NULL) { - while (hostent->h_addr_list[numaddr]) - numaddr++; - size += numaddr*(hostent->h_length+4); - } + if (hostent->h_addr_list != NULL) + { + while (hostent->h_addr_list[numaddr]) + numaddr++; + size += numaddr*(hostent->h_length + 4); + } - aptr = sb->hostent + 28 + numaliases * 4 + numaddr * 4; + aptr = sb->hostent + 28 + numaliases * 4 + numaddr * 4; - // transfer hostent to Amiga memory - put_long (sb->hostent + 4, sb->hostent + 20); - put_long (sb->hostent + 8, hostent->h_addrtype); - put_long (sb->hostent + 12, hostent->h_length); - put_long (sb->hostent + 16, sb->hostent + 24 + numaliases*4); + // transfer hostent to Amiga memory + put_long(sb->hostent + 4, sb->hostent + 20); + put_long(sb->hostent + 8, hostent->h_addrtype); + put_long(sb->hostent + 12, hostent->h_length); + put_long(sb->hostent + 16, sb->hostent + 24 + numaliases * 4); - for (i = 0; i < numaliases; i++) - put_long (sb->hostent + 20 + i * 4, addstr (&aptr, hostent->h_aliases[i])); - put_long (sb->hostent + 20 + numaliases * 4, 0); + for (i = 0; i < numaliases; i++) + put_long(sb->hostent + 20 + i * 4, addstr(&aptr, hostent->h_aliases[i])); + put_long(sb->hostent + 20 + numaliases * 4, 0); - for (i = 0; i < numaddr; i++) { - put_long (sb->hostent + 24 + (numaliases + i) * 4, addmem (&aptr, hostent->h_addr_list[i], hostent->h_length)); - } - put_long (sb->hostent + 24 + numaliases * 4 + numaddr * 4, 0); - put_long (sb->hostent, aptr); - addstr (&aptr, hostent->h_name); + for (i = 0; i < numaddr; i++) + { + put_long(sb->hostent + 24 + (numaliases + i) * 4, addmem(&aptr, hostent->h_addr_list[i], hostent->h_length)); + } + put_long(sb->hostent + 24 + numaliases * 4 + numaddr * 4, 0); + put_long(sb->hostent, aptr); + addstr(&aptr, hostent->h_name); - BSDTRACE (("OK (%s)\n",hostent->h_name)); - bsdsocklib_seterrno (sb,0); + BSDTRACE(("OK (%s)\n", hostent->h_name)); + bsdsocklib_seterrno(sb, 0); } /* * Copy a protoent object from native space to Amiga space */ -static void copyProtoent (TrapContext *context, SB, const struct protoent *p) +static void copyProtoent(TrapContext *context, SB, const struct protoent *p) { - size_t size = 16; - int numaliases = 0; - int i; - uae_u32 aptr; + size_t size = 16; + int numaliases = 0; + int i; + uae_u32 aptr; - // compute total size of protoent - if (p->p_name != NULL) - size += strlen (p->p_name) + 1; + // compute total size of protoent + if (p->p_name != NULL) + size += strlen(p->p_name) + 1; - if (p->p_aliases != NULL) - while (p->p_aliases[numaliases]) - size += strlen (p->p_aliases[numaliases++]) + 5; + if (p->p_aliases != NULL) + while (p->p_aliases[numaliases]) + size += strlen(p->p_aliases[numaliases++]) + 5; - if (sb->protoent) { - uae_FreeMem (context, sb->protoent, sb->protoentsize, sb->sysbase); - } + if (sb->protoent) + { + uae_FreeMem(context, sb->protoent, sb->protoentsize, sb->sysbase); + } - sb->protoent = uae_AllocMem (context, size, 0, sb->sysbase); + sb->protoent = uae_AllocMem(context, size, 0, sb->sysbase); - if (!sb->protoent) { - write_log ("BSDSOCK: WARNING - copyProtoent() ran out of Amiga memory (couldn't allocate %d bytes)\n", size); - bsdsocklib_seterrno (sb, 12); // ENOMEM + if (!sb->protoent) + { + write_log("BSDSOCK: WARNING - copyProtoent() ran out of Amiga memory (couldn't allocate %d bytes)\n", size); + bsdsocklib_seterrno(sb, 12); // ENOMEM return; - } + } - sb->protoentsize = size; + sb->protoentsize = size; - aptr = sb->protoent + 16 + numaliases * 4; + aptr = sb->protoent + 16 + numaliases * 4; - // transfer protoent to Amiga memory - put_long (sb->protoent + 4, sb->protoent + 12); - put_long (sb->protoent + 8, p->p_proto); + // transfer protoent to Amiga memory + put_long(sb->protoent + 4, sb->protoent + 12); + put_long(sb->protoent + 8, p->p_proto); - for (i = 0; i < numaliases; i++) - put_long (sb->protoent + 12 + i * 4, addstr (&aptr, p->p_aliases[i])); - put_long (sb->protoent + 12 + numaliases * 4, 0); - put_long (sb->protoent, aptr); - addstr (&aptr, p->p_name); - bsdsocklib_seterrno(sb, 0); + for (i = 0; i < numaliases; i++) + put_long(sb->protoent + 12 + i * 4, addstr(&aptr, p->p_aliases[i])); + put_long(sb->protoent + 12 + numaliases * 4, 0); + put_long(sb->protoent, aptr); + addstr(&aptr, p->p_name); + bsdsocklib_seterrno(sb, 0); } -uae_u32 bsdthr_WaitSelect (SB) +uae_u32 bsdthr_WaitSelect(SB) { - fd_set sets [3]; - int i, s, set, a_s, max; - uae_u32 a_set; - struct timeval tv; - int r; + fd_set sets[3]; + int i, s, set, a_s, max; + uae_u32 a_set; + struct timeval tv; + int r; - DEBUG_LOG ("WaitSelect: %d 0x%x 0x%x 0x%x 0x%x 0x%x\n", sb->nfds, sb->sets [0], sb->sets [1], sb->sets [2], sb->timeout, sb->sigmp); + DEBUG_LOG("WaitSelect: %d 0x%x 0x%x 0x%x 0x%x 0x%x\n", sb->nfds, sb->sets[0], sb->sets[1], sb->sets[2], sb->timeout, sb->sigmp); - if (sb->timeout) - DEBUG_LOG ("WaitSelect: timeout %d %d\n", get_long (sb->timeout), get_long (sb->timeout + 4)); + if (sb->timeout) + DEBUG_LOG("WaitSelect: timeout %d %d\n", get_long(sb->timeout), get_long(sb->timeout + 4)); - FD_ZERO (&sets [0]); - FD_ZERO (&sets [1]); - FD_ZERO (&sets [2]); + FD_ZERO(&sets[0]); + FD_ZERO(&sets[1]); + FD_ZERO(&sets[2]); - /* Set up the abort socket */ - FD_SET (sb->sockabort[0], &sets[0]); - FD_SET (sb->sockabort[0], &sets[2]); - max = sb->sockabort[0]; + /* Set up the abort socket */ + FD_SET(sb->sockabort[0], &sets[0]); + FD_SET(sb->sockabort[0], &sets[2]); + max = sb->sockabort[0]; - for (set = 0; set < 3; set++) { - if (sb->sets [set] != 0) { - a_set = sb->sets [set]; - for (i = 0; i < sb->nfds; i++) { - if (bsd_amigaside_FD_ISSET (i, a_set)) { - s = getsock (sb, i + 1); - DEBUG_LOG ("WaitSelect: AmigaSide %d set. NativeSide %d.\n", i, s); - if (s == -1) { - write_log ("BSDSOCK: WaitSelect() called with invalid descriptor %d in set %d.\n", i, set); - } else { - FD_SET (s, &sets [set]); - if (max < s) max = s; - } - } - } + for (set = 0; set < 3; set++) + { + if (sb->sets[set] != 0) + { + a_set = sb->sets[set]; + for (i = 0; i < sb->nfds; i++) + { + if (bsd_amigaside_FD_ISSET(i, a_set)) + { + s = getsock(sb, i + 1); + DEBUG_LOG("WaitSelect: AmigaSide %d set. NativeSide %d.\n", i, s); + if (s == -1) + { + write_log("BSDSOCK: WaitSelect() called with invalid descriptor %d in set %d.\n", i, set); + } + else + { + FD_SET(s, &sets[set]); + if (max < s) max = s; + } + } + } } - } + } - max++; + max++; - if (sb->timeout) { - tv.tv_sec = get_long (sb->timeout); - tv.tv_usec = get_long (sb->timeout + 4); - } + if (sb->timeout) + { + tv.tv_sec = get_long(sb->timeout); + tv.tv_usec = get_long(sb->timeout + 4); + } - DEBUG_LOG("Select going to select\n"); - r = select (max, &sets [0], &sets [1], &sets [2], (sb->timeout == 0) ? NULL : &tv); - DEBUG_LOG("Select returns %d, errno is %d\n", r, errno); - if( r > 0 ) { - /* Socket told us to abort */ - if (FD_ISSET (sb->sockabort[0], &sets[0])) { - /* read from the pipe to reset it */ - DEBUG_LOG ("WaitSelect aborted from signal\n"); - r = 0; - for (set = 0; set < 3; set++) - if (sb->sets [set] != 0) - bsd_amigaside_FD_ZERO (sb->sets [set]); - clearsockabort (sb); + DEBUG_LOG("Select going to select\n"); + r = select(max, &sets[0], &sets[1], &sets[2], (sb->timeout == 0) ? NULL : &tv); + DEBUG_LOG("Select returns %d, errno is %d\n", r, errno); + if (r > 0) + { + /* Socket told us to abort */ + if (FD_ISSET(sb->sockabort[0], &sets[0])) + { + /* read from the pipe to reset it */ + DEBUG_LOG("WaitSelect aborted from signal\n"); + r = 0; + for (set = 0; set < 3; set++) + if (sb->sets[set] != 0) + bsd_amigaside_FD_ZERO(sb->sets[set]); + clearsockabort(sb); } - else - /* This is perhaps slightly inefficient, but I don't care.. */ - for (set = 0; set < 3; set++) { - a_set = sb->sets [set]; - if (a_set != 0) { - bsd_amigaside_FD_ZERO (a_set); - for (i = 0; i < sb->nfds; i++) { - a_s = getsock (sb, i + 1); - if (a_s != -1) { - if (FD_ISSET (a_s, &sets [set])) { - DEBUG_LOG ("WaitSelect: NativeSide %d set. AmigaSide %d.\n", a_s, i); + else + /* This is perhaps slightly inefficient, but I don't care.. */ + for (set = 0; set < 3; set++) + { + a_set = sb->sets[set]; + if (a_set != 0) + { + bsd_amigaside_FD_ZERO(a_set); + for (i = 0; i < sb->nfds; i++) + { + a_s = getsock(sb, i + 1); + if (a_s != -1) + { + if (FD_ISSET(a_s, &sets[set])) + { + DEBUG_LOG("WaitSelect: NativeSide %d set. AmigaSide %d.\n", a_s, i); - bsd_amigaside_FD_SET (i, a_set); - } - } - } - } - } - } else if (r == 0) { /* Timeout. I think we're supposed to clear the sets.. */ + bsd_amigaside_FD_SET(i, a_set); + } + } + } + } + } + } + else if (r == 0) /* Timeout. I think we're supposed to clear the sets.. */ + { for (set = 0; set < 3; set++) - if (sb->sets [set] != 0) - bsd_amigaside_FD_ZERO (sb->sets [set]); - } - DEBUG_LOG ("WaitSelect: %d(%d)\n", r, errno); - return r; + if (sb->sets[set] != 0) + bsd_amigaside_FD_ZERO(sb->sets[set]); + } + DEBUG_LOG("WaitSelect: %d(%d)\n", r, errno); + return r; } -uae_u32 bsdthr_Accept_2 (SB) +uae_u32 bsdthr_Accept_2(SB) { - int foo, s, s2; - long flags; - struct sockaddr_in addr; - socklen_t hlen = sizeof (struct sockaddr_in); + int foo, s, s2; + long flags; + struct sockaddr_in addr; + socklen_t hlen = sizeof(struct sockaddr_in); - if ((s = accept (sb->s, (struct sockaddr *)&addr, &hlen)) >= 0) { - if ((flags = fcntl (s, F_GETFL)) == -1) - flags = 0; - fcntl (s, F_SETFL, flags & ~O_NONBLOCK); /* @@@ Don't do this if it's supposed to stay nonblocking... */ - s2 = getsd (sb->context, sb, s); - sb->ftable[s2-1] = sb->ftable[sb->len]; /* new socket inherits the old socket's properties */ - DEBUG_LOG ("Accept: AmigaSide %d, NativeSide %d, len %d(%d)", sb->resultval, s, &hlen, get_long (sb->a_addrlen)); - printSockAddr (&addr); - foo = get_long (sb->a_addrlen); - if (foo > 16) - put_long (sb->a_addrlen, 16); - copysockaddr_n2a (sb->a_addr, &addr, foo); - return s2 - 1; - } else { + if ((s = accept(sb->s, reinterpret_cast(&addr), &hlen)) >= 0) + { + if ((flags = fcntl(s, F_GETFL)) == -1) + flags = 0; + fcntl(s, F_SETFL, flags & ~O_NONBLOCK); /* @@@ Don't do this if it's supposed to stay nonblocking... */ + s2 = getsd(sb->context, sb, s); + sb->ftable[s2 - 1] = sb->ftable[sb->len]; /* new socket inherits the old socket's properties */ + DEBUG_LOG("Accept: AmigaSide %d, NativeSide %d, len %d(%d)", sb->resultval, s, &hlen, get_long(sb->a_addrlen)); + printSockAddr(&addr); + foo = get_long(sb->a_addrlen); + if (foo > 16) + put_long(sb->a_addrlen, 16); + copysockaddr_n2a(sb->a_addr, &addr, foo); + return s2 - 1; + } + else + { return -1; - } + } } -uae_u32 bsdthr_Recv_2 (SB) +uae_u32 bsdthr_Recv_2(SB) { - int foo; - int l, i; - if (sb->from == 0) { - foo = recv (sb->s, sb->buf, sb->len, sb->flags /*| MSG_NOSIGNAL*/); - DEBUG_LOG ("recv2, recv returns %d, errno is %d\n", foo, errno); - } else { - struct sockaddr_in addr; - socklen_t l = sizeof (struct sockaddr_in); - i = get_long (sb->fromlen); - copysockaddr_a2n (&addr, sb->from, i); - foo = recvfrom (sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL, (struct sockaddr *)&addr, &l); - DEBUG_LOG ("recv2, recvfrom returns %d, errno is %d\n", foo, errno); - if (foo >= 0) { - copysockaddr_n2a (sb->from, &addr, l); - put_long (sb->fromlen, l); - } - } - return foo; -} - -uae_u32 bsdthr_Send_2 (SB) -{ - if (sb->to == 0) { - uae_u32 r = send (sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL); - return r; - } else { + int foo; + int l, i; + if (sb->from == 0) + { + foo = recv(sb->s, sb->buf, sb->len, sb->flags /*| MSG_NOSIGNAL*/); + DEBUG_LOG("recv2, recv returns %d, errno is %d\n", foo, errno); + } + else + { struct sockaddr_in addr; - int l = sizeof (struct sockaddr_in); - copysockaddr_a2n (&addr, sb->to, sb->tolen); - uae_u32 r = sendto (sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL, (struct sockaddr *)&addr, l); - return r; - } + socklen_t l = sizeof(struct sockaddr_in); + i = get_long(sb->fromlen); + copysockaddr_a2n(&addr, sb->from, i); + foo = recvfrom(sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL, (struct sockaddr *)&addr, &l); + DEBUG_LOG("recv2, recvfrom returns %d, errno is %d\n", foo, errno); + if (foo >= 0) + { + copysockaddr_n2a(sb->from, &addr, l); + put_long(sb->fromlen, l); + } + } + return foo; } -uae_u32 bsdthr_Connect_2 (SB) +uae_u32 bsdthr_Send_2(SB) { - if (sb->action == 1) { + if (sb->to == 0) + { + uae_u32 r = send(sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL); + return r; + } + else + { struct sockaddr_in addr; - int len = sizeof (struct sockaddr_in); + int l = sizeof(struct sockaddr_in); + copysockaddr_a2n(&addr, sb->to, sb->tolen); + uae_u32 r = sendto(sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL, (struct sockaddr *)&addr, l); + return r; + } +} + +uae_u32 bsdthr_Connect_2(SB) +{ + if (sb->action == 1) + { + struct sockaddr_in addr; + int len = sizeof(struct sockaddr_in); int retval; - copysockaddr_a2n (&addr, sb->a_addr, sb->a_addrlen); - retval = connect (sb->s, (struct sockaddr *)&addr, len); - DEBUG_LOG ("Connect returns %d, errno is %d\n", retval, errno); + copysockaddr_a2n(&addr, sb->a_addr, sb->a_addrlen); + retval = connect(sb->s, reinterpret_cast(&addr), len); + DEBUG_LOG("Connect returns %d, errno is %d\n", retval, errno); /* Hack: I need to set the action to something other than * 1 but I know action == 2 does the correct thing */ sb->action = 2; - if (retval == 0) { - errno = 0; + if (retval == 0) + { + errno = 0; } return retval; - } else { + } + else + { int foo; socklen_t bar; - bar = sizeof (foo); - if (getsockopt (sb->s, SOL_SOCKET, SO_ERROR, &foo, &bar) == 0) { - errno = foo; - DEBUG_LOG("Connect status is %d\n", foo); - return (foo == 0) ? 0 : -1; + bar = sizeof(foo); + if (getsockopt(sb->s, SOL_SOCKET, SO_ERROR, &foo, &bar) == 0) + { + errno = foo; + DEBUG_LOG("Connect status is %d\n", foo); + return (foo == 0) ? 0 : -1; } - return -1; - } + return -1; + } } -uae_u32 bsdthr_SendRecvAcceptConnect (uae_u32 (*tryfunc)(SB), SB) +uae_u32 bsdthr_SendRecvAcceptConnect(uae_u32(*tryfunc)(SB), SB) { - uae_u32 r = bsdthr_blockingstuff (tryfunc, sb); - return r; + uae_u32 r = bsdthr_blockingstuff(tryfunc, sb); + return r; } -uae_u32 bsdthr_blockingstuff (uae_u32 (*tryfunc)(SB), SB) +uae_u32 bsdthr_blockingstuff(uae_u32(*tryfunc)(SB), SB) { - int done = 0, foo; - long flags; - int nonblock; - if ((flags = fcntl (sb->s, F_GETFL)) == -1) - flags = 0; - nonblock = (flags & O_NONBLOCK); - fcntl (sb->s, F_SETFL, flags | O_NONBLOCK); - while (!done) { - done = 1; - foo = tryfunc (sb); - if (foo < 0 && !nonblock) { - if ((errno == EAGAIN) || (errno == EWOULDBLOCK) || (errno == EINPROGRESS)) { - fd_set readset, writeset, exceptset; - int maxfd = (sb->s > sb->sockabort[0]) ? sb->s : sb->sockabort[0]; - int num; - - FD_ZERO (&readset); - FD_ZERO (&writeset); - FD_ZERO (&exceptset); + int done = 0, foo; + long flags; + int nonblock; + if ((flags = fcntl(sb->s, F_GETFL)) == -1) + flags = 0; + nonblock = (flags & O_NONBLOCK); + fcntl(sb->s, F_SETFL, flags | O_NONBLOCK); + while (!done) + { + done = 1; + foo = tryfunc(sb); + if (foo < 0 && !nonblock) + { + if ((errno == EAGAIN) || (errno == EWOULDBLOCK) || (errno == EINPROGRESS)) + { + fd_set readset, writeset, exceptset; + int maxfd = (sb->s > sb->sockabort[0]) ? sb->s : sb->sockabort[0]; + int num; - if (sb->action == 3 || sb->action == 6) - FD_SET (sb->s, &readset); - if (sb->action == 2 || sb->action == 1 || sb->action == 4) - FD_SET (sb->s, &writeset); - FD_SET (sb->sockabort[0], &readset); + FD_ZERO(&readset); + FD_ZERO(&writeset); + FD_ZERO(&exceptset); - num = select (maxfd + 1, &readset, &writeset, &exceptset, NULL); - if (num == -1) { - DEBUG_LOG ("Blocking select(%d) returns -1,errno is %d\n", sb->sockabort[0],errno); - fcntl (sb->s, F_SETFL, flags); - return -1; - } + if (sb->action == 3 || sb->action == 6) + FD_SET(sb->s, &readset); + if (sb->action == 2 || sb->action == 1 || sb->action == 4) + FD_SET(sb->s, &writeset); + FD_SET(sb->sockabort[0], &readset); - if (FD_ISSET (sb->sockabort[0], &readset) || FD_ISSET (sb->sockabort[0], &writeset)) { - /* reset sock abort pipe */ - /* read from the pipe to reset it */ - DEBUG_LOG ("select aborted from signal\n"); + num = select(maxfd + 1, &readset, &writeset, &exceptset, NULL); + if (num == -1) + { + DEBUG_LOG("Blocking select(%d) returns -1,errno is %d\n", sb->sockabort[0], errno); + fcntl(sb->s, F_SETFL, flags); + return -1; + } - clearsockabort (sb); - DEBUG_LOG ("Done read\n"); - errno = EINTR; - done = 1; - } else { - done = 0; - } - } else if (errno == EINTR) - done = 1; - } - } - fcntl (sb->s, F_SETFL, flags); - return foo; + if (FD_ISSET(sb->sockabort[0], &readset) || FD_ISSET(sb->sockabort[0], &writeset)) + { + /* reset sock abort pipe */ + /* read from the pipe to reset it */ + DEBUG_LOG("select aborted from signal\n"); + + clearsockabort(sb); + DEBUG_LOG("Done read\n"); + errno = EINTR; + done = 1; + } + else + { + done = 0; + } + } + else if (errno == EINTR) + done = 1; + } + } + fcntl(sb->s, F_SETFL, flags); + return foo; } -static void *bsdlib_threadfunc (void *arg) +static void *bsdlib_threadfunc(void *arg) { - struct socketbase *sb = (struct socketbase *) arg; + struct socketbase *sb = static_cast(arg); - DEBUG_LOG ("THREAD_START\n"); + DEBUG_LOG("THREAD_START\n"); - while (1) { - uae_sem_wait (&sb->sem); + while (1) + { + uae_sem_wait(&sb->sem); - DEBUG_LOG ("Socket thread got action %d (sb=0x%08x)\n", sb->action, sb); + DEBUG_LOG("Socket thread got action %d (sb=0x%08x)\n", sb->action, sb); - switch (sb->action) { - case 0: /* kill thread (CloseLibrary) */ - DEBUG_LOG ("THREAD_END\n"); - uae_sem_destroy (&sb->sem); - return NULL; + switch (sb->action) + { + case 0: /* kill thread (CloseLibrary) */ + DEBUG_LOG("THREAD_END\n"); + uae_sem_destroy(&sb->sem); + return NULL; - case 1: /* Connect */ - sb->resultval = bsdthr_SendRecvAcceptConnect (bsdthr_Connect_2, sb); - break; + case 1: /* Connect */ + sb->resultval = bsdthr_SendRecvAcceptConnect(bsdthr_Connect_2, sb); + break; - /* @@@ Should check (from|to)len so it's 16.. */ - case 2: /* Send[to] */ - sb->resultval = bsdthr_SendRecvAcceptConnect (bsdthr_Send_2, sb); - break; + /* @@@ Should check (from|to)len so it's 16.. */ + case 2: /* Send[to] */ + sb->resultval = bsdthr_SendRecvAcceptConnect(bsdthr_Send_2, sb); + break; - case 3: /* Recv[from] */ - sb->resultval = bsdthr_SendRecvAcceptConnect (bsdthr_Recv_2, sb); - break; + case 3: /* Recv[from] */ + sb->resultval = bsdthr_SendRecvAcceptConnect(bsdthr_Recv_2, sb); + break; - case 4: { /* Gethostbyname */ - struct hostent *tmphostent = gethostbyname ((char *)get_real_address (sb->name)); + case 4: /* Gethostbyname */ + { + struct hostent *tmphostent = gethostbyname(reinterpret_cast(get_real_address(sb->name))); - if (tmphostent) { - copyHostent (tmphostent, sb); - bsdsocklib_setherrno (sb, 0); - } else - SETHERRNO; + if (tmphostent) + { + copyHostent(tmphostent, sb); + bsdsocklib_setherrno(sb, 0); + } + else + SETHERRNO; - break; - } + break; + } - case 5: /* WaitSelect */ - sb->resultval = bsdthr_WaitSelect (sb); - break; + case 5: /* WaitSelect */ + sb->resultval = bsdthr_WaitSelect(sb); + break; - case 6: /* Accept */ - sb->resultval = bsdthr_SendRecvAcceptConnect (bsdthr_Accept_2, sb); - break; + case 6: /* Accept */ + sb->resultval = bsdthr_SendRecvAcceptConnect(bsdthr_Accept_2, sb); + break; - case 7: { - struct hostent *tmphostent = gethostbyaddr (get_real_address (sb->name), sb->a_addrlen, sb->flags); + case 7: + { + struct hostent *tmphostent = gethostbyaddr(reinterpret_cast(get_real_address(sb->name)), sb->a_addrlen, sb->flags); - if (tmphostent) { - copyHostent (tmphostent, sb); - bsdsocklib_setherrno (sb, 0); - } else - SETHERRNO; + if (tmphostent) + { + copyHostent(tmphostent, sb); + bsdsocklib_setherrno(sb, 0); + } + else + SETHERRNO; - break; - } - } - SETERRNO; - SETSIGNAL; - } + break; + } + } + SETERRNO; + SETSIGNAL; + } - return NULL; /* Just to keep GCC happy.. */ + return NULL; /* Just to keep GCC happy.. */ } -void host_connect (TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) +void host_connect(TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { - sb->s = getsock (sb, sd + 1); - if (sb->s == -1) { + sb->s = getsock(sb, sd + 1); + if (sb->s == -1) + { sb->resultval = -1; - bsdsocklib_seterrno (sb, 9); /* EBADF */ + bsdsocklib_seterrno(sb, 9); /* EBADF */ return; - } - sb->a_addr = name; - sb->a_addrlen = namelen; - sb->action = 1; + } + sb->a_addr = name; + sb->a_addrlen = namelen; + sb->action = 1; - uae_sem_post (&sb->sem); + uae_sem_post(&sb->sem); - WAITSIGNAL; + WAITSIGNAL; } -void host_sendto (TrapContext *context, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, uae_u32 flags, uae_u32 to, uae_u32 tolen) +void host_sendto(TrapContext *context, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, uae_u32 flags, uae_u32 to, uae_u32 tolen) { - sb->s = getsock (sb, sd + 1); - if (sb->s == -1) { + sb->s = getsock(sb, sd + 1); + if (sb->s == -1) + { sb->resultval = -1; - bsdsocklib_seterrno (sb, 9); /* EBADF */ + bsdsocklib_seterrno(sb, 9); /* EBADF */ return; - } - sb->buf = get_real_address (msg); - sb->len = len; - sb->flags = flags; - sb->to = to; - sb->tolen = tolen; - sb->action = 2; + } + sb->buf = get_real_address(msg); + sb->len = len; + sb->flags = flags; + sb->to = to; + sb->tolen = tolen; + sb->action = 2; - uae_sem_post (&sb->sem); + uae_sem_post(&sb->sem); - WAITSIGNAL; + WAITSIGNAL; } -void host_recvfrom (TrapContext *context, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, uae_u32 flags, uae_u32 addr, uae_u32 addrlen) +void host_recvfrom(TrapContext *context, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, uae_u32 flags, uae_u32 addr, uae_u32 addrlen) { - int s = getsock (sb, sd + 1); + int s = getsock(sb, sd + 1); - DEBUG_LOG ("Recv[from](%lx, %d, %lx, %ld, %lx, %lx, %d)\n", - sb, sd, msg, len, flags, addr, addrlen); + DEBUG_LOG("Recv[from](%lx, %d, %lx, %ld, %lx, %lx, %d)\n", + sb, + sd, + msg, + len, + flags, + addr, + addrlen); - if (s == -1) { + if (s == -1) + { sb->resultval = -1; - bsdsocklib_seterrno (sb, 9); /* EBADF */; + bsdsocklib_seterrno(sb, 9); /* EBADF */ return; - } + } - sb->s = s; - sb->buf = get_real_address (msg); - sb->len = len; - sb->flags = flags; - sb->from = addr; - sb->fromlen= addrlen; - sb->action = 3; + sb->s = s; + sb->buf = get_real_address(msg); + sb->len = len; + sb->flags = flags; + sb->from = addr; + sb->fromlen = addrlen; + sb->action = 3; - uae_sem_post (&sb->sem); + uae_sem_post(&sb->sem); - WAITSIGNAL; + WAITSIGNAL; } -void host_setsockopt (SB, uae_u32 sd, uae_u32 level, uae_u32 optname, uae_u32 optval, uae_u32 optlen) +void host_setsockopt(SB, uae_u32 sd, uae_u32 level, uae_u32 optname, uae_u32 optval, uae_u32 optlen) { - int s = getsock (sb, sd + 1); - int nativelevel = mapsockoptlevel (level); - int nativeoptname = mapsockoptname(nativelevel, optname); - void *buf; - if (s == -1) { + int s = getsock(sb, sd + 1); + int nativelevel = mapsockoptlevel(level); + int nativeoptname = mapsockoptname(nativelevel, optname); + void *buf; + if (s == -1) + { sb->resultval = -1; - bsdsocklib_seterrno (sb, 9); /* EBADF */; + bsdsocklib_seterrno(sb, 9); /* EBADF */ return; - } + } - if (optval) { + if (optval) + { buf = malloc(optlen); mapsockoptvalue(nativelevel, nativeoptname, optval, buf); - } else { + } + else + { buf = NULL; - } - sb->resultval = setsockopt (s, nativelevel, nativeoptname, buf, optlen); - if (buf) - free(buf); - SETERRNO; + } + sb->resultval = setsockopt(s, nativelevel, nativeoptname, buf, optlen); + if (buf) + free(buf); + SETERRNO; - DEBUG_LOG ("setsockopt: sock %d, level %d, 'name' %d(%d), len %d -> %d, %d\n", - s, level, optname, nativeoptname, optlen, - sb->resultval, errno); + DEBUG_LOG("setsockopt: sock %d, level %d, 'name' %d(%d), len %d -> %d, %d\n", + s, + level, + optname, + nativeoptname, + optlen, + sb->resultval, + errno); } -uae_u32 host_getsockname (SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) +uae_u32 host_getsockname(SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { - int s; - socklen_t len = sizeof (struct sockaddr_in); - struct sockaddr_in addr; + int s; + socklen_t len = sizeof(struct sockaddr_in); + struct sockaddr_in addr; - DEBUG_LOG ("getsockname(%d,0x%lx,%d) -> ", sd, name, len); + DEBUG_LOG("getsockname(%d,0x%lx,%d) -> ", sd, name, len); - s = getsock (sb, sd + 1); + s = getsock(sb, sd + 1); - if (s != -1) { - if (getsockname (s, (struct sockaddr *)&addr, &len)) { + if (s != -1) + { + if (getsockname(s, (struct sockaddr *)&addr, &len)) + { SETERRNO; - DEBUG_LOG ("failed (%d)\n", sb->sb_errno); - } else { + DEBUG_LOG("failed (%d)\n", sb->sb_errno); + } + else + { int a_nl; - DEBUG_LOG ("okay\n"); - a_nl = get_long (namelen); - copysockaddr_n2a (name, &addr, a_nl); + DEBUG_LOG("okay\n"); + a_nl = get_long(namelen); + copysockaddr_n2a(name, &addr, a_nl); if (a_nl > 16) - put_long (namelen, 16); - return 0; - } + put_long(namelen, 16); + return 0; + } } return -1; } -uae_u32 host_getpeername (SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) +uae_u32 host_getpeername(SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { - int s; - socklen_t len = sizeof (struct sockaddr_in); - struct sockaddr_in addr; + int s; + socklen_t len = sizeof(struct sockaddr_in); + struct sockaddr_in addr; - DEBUG_LOG ("getpeername(%d,0x%lx,%d) -> ", sd, name, len); + DEBUG_LOG("getpeername(%d,0x%lx,%d) -> ", sd, name, len); - s = getsock (sb, sd + 1); + s = getsock(sb, sd + 1); - if (s != -1) { - if (getpeername (s, (struct sockaddr *)&addr, &len)) { + if (s != -1) + { + if (getpeername(s, (struct sockaddr *)&addr, &len)) + { SETERRNO; - DEBUG_LOG ("failed (%d)\n", sb->sb_errno); - } else { - int a_nl; - DEBUG_LOG ("okay\n"); - a_nl = get_long (namelen); - copysockaddr_n2a (name, &addr, a_nl); - if (a_nl > 16) - put_long (namelen, 16); - return 0; + DEBUG_LOG("failed (%d)\n", sb->sb_errno); } - } + else + { + int a_nl; + DEBUG_LOG("okay\n"); + a_nl = get_long(namelen); + copysockaddr_n2a(name, &addr, a_nl); + if (a_nl > 16) + put_long(namelen, 16); + return 0; + } + } - return -1; + return -1; } -void host_gethostbynameaddr (TrapContext *context, SB, uae_u32 name, uae_u32 namelen, long addrtype) +void host_gethostbynameaddr(TrapContext *context, SB, uae_u32 name, uae_u32 namelen, long addrtype) { - sb->name = name; - sb->a_addrlen = namelen; - sb->flags = addrtype; - if (addrtype == -1) + sb->name = name; + sb->a_addrlen = namelen; + sb->flags = addrtype; + if (addrtype == -1) sb->action = 4; - else + else sb->action = 7; - uae_sem_post (&sb->sem); + uae_sem_post(&sb->sem); - WAITSIGNAL; + WAITSIGNAL; } -void host_WaitSelect (TrapContext *context, SB, uae_u32 nfds, uae_u32 readfds, uae_u32 writefds, uae_u32 exceptfds, - uae_u32 timeout, uae_u32 sigmp) +void host_WaitSelect(TrapContext *context, + SB, + uae_u32 nfds, + uae_u32 readfds, + uae_u32 writefds, + uae_u32 exceptfds, + uae_u32 timeout, + uae_u32 sigmp) { - uae_u32 wssigs = (sigmp) ? get_long (sigmp) : 0; - uae_u32 sigs; + uae_u32 wssigs = (sigmp) ? get_long(sigmp) : 0; + uae_u32 sigs; - if (wssigs) { - m68k_dreg (regs, 0) = 0; - m68k_dreg (regs, 1) = wssigs; - sigs = CallLib (context, get_long (4), -0x132) & wssigs; // SetSignal() - if (sigs) { - DEBUG_LOG ("WaitSelect preempted by signals 0x%08x\n", sigs & wssigs); - put_long (sigmp, sigs); - // Check for zero address -> otherwise WinUAE crashes - if (readfds) fd_zero (readfds, nfds); - if (writefds) fd_zero (writefds, nfds); - if (exceptfds) fd_zero (exceptfds, nfds); - sb->resultval = 0; - bsdsocklib_seterrno (sb, 0); - return; + if (wssigs) + { + m68k_dreg(regs, 0) = 0; + m68k_dreg(regs, 1) = wssigs; + sigs = CallLib(context, get_long(4), -0x132) & wssigs; // SetSignal() + if (sigs) + { + DEBUG_LOG("WaitSelect preempted by signals 0x%08x\n", sigs & wssigs); + put_long(sigmp, sigs); + // Check for zero address -> otherwise WinUAE crashes + if (readfds) fd_zero(readfds, nfds); + if (writefds) fd_zero(writefds, nfds); + if (exceptfds) fd_zero(exceptfds, nfds); + sb->resultval = 0; + bsdsocklib_seterrno(sb, 0); + return; } - } + } - if (nfds == 0) { - /* No sockets - Just wait on signals */ - m68k_dreg (regs, 0) = wssigs; - sigs = CallLib (context, get_long (4), -0x13e); // Wait() + if (nfds == 0) + { + /* No sockets - Just wait on signals */ + m68k_dreg(regs, 0) = wssigs; + sigs = CallLib(context, get_long(4), -0x13e); // Wait() if (sigmp) - put_long (sigmp, sigs & wssigs); + put_long(sigmp, sigs & wssigs); - if (readfds) fd_zero (readfds, nfds); - if (writefds) fd_zero (writefds, nfds); - if (exceptfds) fd_zero (exceptfds, nfds); + if (readfds) fd_zero(readfds, nfds); + if (writefds) fd_zero(writefds, nfds); + if (exceptfds) fd_zero(exceptfds, nfds); sb->resultval = 0; return; - } + } - sb->nfds = nfds; - sb->sets [0] = readfds; - sb->sets [1] = writefds; - sb->sets [2] = exceptfds; - sb->timeout = timeout; - sb->sigmp = wssigs; - sb->action = 5; + sb->nfds = nfds; + sb->sets[0] = readfds; + sb->sets[1] = writefds; + sb->sets[2] = exceptfds; + sb->timeout = timeout; + sb->sigmp = wssigs; + sb->action = 5; - uae_sem_post (&sb->sem); + uae_sem_post(&sb->sem); - m68k_dreg (regs, 0) = (((uae_u32)1) << sb->signal) | sb->eintrsigs | wssigs; - sigs = CallLib (context, get_long (4), -0x13e); // Wait() + m68k_dreg(regs, 0) = uae_u32(1) << sb->signal | sb->eintrsigs | wssigs; + sigs = CallLib(context, get_long(4), -0x13e); // Wait() - if (sigmp) - put_long (sigmp, sigs & (sb->eintrsigs | wssigs)); + if (sigmp) + put_long(sigmp, sigs & (sb->eintrsigs | wssigs)); - if (sigs & wssigs) { - /* Received the signals we were waiting on */ - DEBUG_LOG ("WaitSelect: got signal(s) %lx\n", sigs); + if (sigs & wssigs) + { + /* Received the signals we were waiting on */ + DEBUG_LOG("WaitSelect: got signal(s) %lx\n", sigs); - if (!(sigs & (((uae_u32)1) << sb->signal))) { - sockabort (sb); - WAITSIGNAL; + if (!(sigs & uae_u32(1) << sb->signal)) + { + sockabort(sb); + WAITSIGNAL; } sb->resultval = 0; - if (readfds) fd_zero (readfds, nfds); - if (writefds) fd_zero (writefds, nfds); - if (exceptfds) fd_zero (exceptfds, nfds); + if (readfds) fd_zero(readfds, nfds); + if (writefds) fd_zero(writefds, nfds); + if (exceptfds) fd_zero(exceptfds, nfds); - bsdsocklib_seterrno (sb, 0); - } else if (sigs & sb->eintrsigs) { - /* Wait select was interrupted */ - DEBUG_LOG ("WaitSelect: interrupted\n"); + bsdsocklib_seterrno(sb, 0); + } + else if (sigs & sb->eintrsigs) + { + /* Wait select was interrupted */ + DEBUG_LOG("WaitSelect: interrupted\n"); - if (!(sigs & (((uae_u32)1) << sb->signal))) { - sockabort (sb); - WAITSIGNAL; + if (!(sigs & uae_u32(1) << sb->signal)) + { + sockabort(sb); + WAITSIGNAL; } sb->resultval = -1; - bsdsocklib_seterrno (sb, mapErrno (EINTR)); - } - clearsockabort(sb); + bsdsocklib_seterrno(sb, mapErrno(EINTR)); + } + clearsockabort(sb); } -void host_accept (TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) +void host_accept(TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { - sb->s = getsock (sb, sd + 1); - if (sb->s == -1) { + sb->s = getsock(sb, sd + 1); + if (sb->s == -1) + { sb->resultval = -1; - bsdsocklib_seterrno (sb, 9); /* EBADF */ + bsdsocklib_seterrno(sb, 9); /* EBADF */ return; - } + } - DEBUG_LOG ("accept(%d, %lx, %lx)\n", sb->s, name, namelen); - sb->a_addr = name; - sb->a_addrlen = namelen; - sb->action = 6; - sb->len = sd; - // used by bsdthr_Accept_2 - sb->context = context; + DEBUG_LOG("accept(%d, %lx, %lx)\n", sb->s, name, namelen); + sb->a_addr = name; + sb->a_addrlen = namelen; + sb->action = 6; + sb->len = sd; + // used by bsdthr_Accept_2 + sb->context = context; - uae_sem_post (&sb->sem); + uae_sem_post(&sb->sem); - WAITSIGNAL; - DEBUG_LOG ("Accept returns %d\n", sb->resultval); + WAITSIGNAL; + DEBUG_LOG("Accept returns %d\n", sb->resultval); } -int host_socket (TrapContext *context, SB, int af, int type, int protocol) +int host_socket(TrapContext *context, SB, int af, int type, int protocol) { - int sd; - int s; + int sd; + int s; - DEBUG_LOG ("socket(%s,%s,%d) -> \n",af == AF_INET ? "AF_INET" : "AF_other", - type == SOCK_STREAM ? "SOCK_STREAM" : type == SOCK_DGRAM ? - "SOCK_DGRAM " : "SOCK_RAW", protocol); + DEBUG_LOG("socket(%s,%s,%d) -> \n", + af == AF_INET ? "AF_INET" : "AF_other", + type == SOCK_STREAM ? "SOCK_STREAM" : type == SOCK_DGRAM ? + "SOCK_DGRAM " : "SOCK_RAW", + protocol); - if ((s = socket (af, type, protocol)) == -1) { + if ((s = socket(af, type, protocol)) == -1) + { SETERRNO; - DEBUG_LOG (" -> failed (%d)\n", sb->sb_errno); + DEBUG_LOG(" -> failed (%d)\n", sb->sb_errno); return -1; - } else { + } + else + { int arg = 1; - sd = getsd (context, sb, s); - setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &arg, sizeof(arg)); - } + sd = getsd(context, sb, s); + setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &arg, sizeof(arg)); + } - sb->ftable[sd-1] = SF_BLOCKING; - DEBUG_LOG (" -> socket returns Amiga %d, NativeSide %d\n", sd - 1, s); - return sd - 1; + sb->ftable[sd - 1] = SF_BLOCKING; + DEBUG_LOG(" -> socket returns Amiga %d, NativeSide %d\n", sd - 1, s); + return sd - 1; } -uae_u32 host_bind (TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) +uae_u32 host_bind(TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { - uae_u32 success = 0; - struct sockaddr_in addr; - int len = sizeof (struct sockaddr_in); - int s; + uae_u32 success = 0; + struct sockaddr_in addr; + int len = sizeof(struct sockaddr_in); + int s; - s = getsock (sb, sd + 1); - if (s == -1) { + s = getsock(sb, sd + 1); + if (s == -1) + { sb->resultval = -1; - bsdsocklib_seterrno (sb, 9); /* EBADF */ + bsdsocklib_seterrno(sb, 9); /* EBADF */ return -1; - } + } - DEBUG_LOG ("bind(%d[%d],0x%lx,%d) -> ", sd, s, name, namelen); - copysockaddr_a2n (&addr, name, namelen); - printSockAddr (&addr); - if ((success = bind (s, (struct sockaddr *)&addr, len)) != 0) { + DEBUG_LOG("bind(%d[%d],0x%lx,%d) -> ", sd, s, name, namelen); + copysockaddr_a2n(&addr, name, namelen); + printSockAddr(&addr); + if ((success = bind(s, reinterpret_cast(&addr), len)) != 0) + { SETERRNO; - DEBUG_LOG ("failed (%d)\n",sb->sb_errno); - } else { - DEBUG_LOG ("OK\n"); - } - return success; + DEBUG_LOG("failed (%d)\n", sb->sb_errno); + } + else + { + DEBUG_LOG("OK\n"); + } + return success; } -uae_u32 host_listen (TrapContext *context, SB, uae_u32 sd, uae_u32 backlog) +uae_u32 host_listen(TrapContext *context, SB, uae_u32 sd, uae_u32 backlog) { - int s; - uae_u32 success = -1; + int s; + uae_u32 success = -1; - DEBUG_LOG ("listen(%d,%d) -> ", sd, backlog); - s = getsock (sb, sd + 1); + DEBUG_LOG("listen(%d,%d) -> ", sd, backlog); + s = getsock(sb, sd + 1); - if (s == -1) { - bsdsocklib_seterrno (sb, 9); + if (s == -1) + { + bsdsocklib_seterrno(sb, 9); return -1; - } + } - if ((success = listen (s, backlog)) != 0) { + if ((success = listen(s, backlog)) != 0) + { SETERRNO; - DEBUG_LOG ("failed (%d)\n", sb->sb_errno); - } else { - DEBUG_LOG ("OK\n"); - } - return success; + DEBUG_LOG("failed (%d)\n", sb->sb_errno); + } + else + { + DEBUG_LOG("OK\n"); + } + return success; } -void host_getprotobyname (TrapContext *context, SB, uae_u32 name) +void host_getprotobyname(TrapContext *context, SB, uae_u32 name) { - struct protoent *p = getprotobyname ((char *)get_real_address (name)); + struct protoent *p = getprotobyname(reinterpret_cast(get_real_address(name))); - DEBUG_LOG ("Getprotobyname(%s)=%lx\n", get_real_address (name), p); + DEBUG_LOG("Getprotobyname(%s)=%lx\n", get_real_address(name), p); - if (p == NULL) { + if (p == NULL) + { SETERRNO; return; - } + } - copyProtoent (context, sb, p); - BSDTRACE (("OK (%s, %d)\n", p->p_name, p->p_proto)); + copyProtoent(context, sb, p); + BSDTRACE(("OK (%s, %d)\n", p->p_name, p->p_proto)); } -void host_getprotobynumber (TrapContext *context, SB, uae_u32 number) +void host_getprotobynumber(TrapContext *context, SB, uae_u32 number) { - struct protoent *p = getprotobynumber(number); - DEBUG_LOG("getprotobynumber(%d)=%lx\n", number, p); + struct protoent *p = getprotobynumber(number); + DEBUG_LOG("getprotobynumber(%d)=%lx\n", number, p); - if (p == NULL) { + if (p == NULL) + { SETERRNO; return; - } + } - copyProtoent (context, sb, p); - BSDTRACE (("OK (%s, %d)\n", p->p_name, p->p_proto)); + copyProtoent(context, sb, p); + BSDTRACE(("OK (%s, %d)\n", p->p_name, p->p_proto)); } -void host_getservbynameport (TrapContext *context, SB, uae_u32 name, uae_u32 proto, uae_u32 type) +void host_getservbynameport(TrapContext *context, SB, uae_u32 name, uae_u32 proto, uae_u32 type) { - struct servent *s = (type) ? - getservbyport (name, (char *)get_real_address (proto)) : - getservbyname ((char *)get_real_address (name), (char *)get_real_address (proto)); - size_t size = 20; - int numaliases = 0; - uae_u32 aptr; - int i; + struct servent *s = (type) ? + getservbyport(name, reinterpret_cast(get_real_address(proto))) : + getservbyname(reinterpret_cast(get_real_address(name)), reinterpret_cast(get_real_address(proto))); + size_t size = 20; + int numaliases = 0; + uae_u32 aptr; + int i; - if (type) { - DEBUG_LOG("Getservbyport(%d, %s) = %lx\n", name, get_real_address (proto), s); - } else { - DEBUG_LOG("Getservbyname(%s, %s) = %lx\n", get_real_address (name), get_real_address (proto), s); - } + if (type) + { + DEBUG_LOG("Getservbyport(%d, %s) = %lx\n", name, get_real_address(proto), s); + } + else + { + DEBUG_LOG("Getservbyname(%s, %s) = %lx\n", get_real_address(name), get_real_address(proto), s); + } - if (s == NULL) { - SETERRNO; - return; - } - - // compute total size of servent - if (s->s_name != NULL) - size += strlen (s->s_name) + 1; - - if (s->s_proto != NULL) - size += strlen (s->s_proto) + 1; - - if (s->s_aliases != NULL) - while (s->s_aliases[numaliases]) - size += strlen (s->s_aliases[numaliases++]) + 5; - - if (sb->servent) { - uae_FreeMem (context, sb->servent, sb->serventsize, sb->sysbase); - } - - sb->servent = uae_AllocMem (context, size, 0, sb->sysbase); - - if (!sb->servent) { - write_log ("BSDSOCK: WARNING - getservby%s() ran out of Amiga memory (couldn't allocate %d bytes)\n",type ? "port" : "name", size); - bsdsocklib_seterrno (sb, 12); // ENOMEM + if (s == NULL) + { + SETERRNO; return; - } + } - sb->serventsize = size; + // compute total size of servent + if (s->s_name != NULL) + size += strlen(s->s_name) + 1; - aptr = sb->servent + 20 + numaliases * 4; + if (s->s_proto != NULL) + size += strlen(s->s_proto) + 1; - // transfer servent to Amiga memory - put_long (sb->servent + 4, sb->servent + 16); - put_long (sb->servent + 8, (unsigned short)htons (s->s_port)); + if (s->s_aliases != NULL) + while (s->s_aliases[numaliases]) + size += strlen(s->s_aliases[numaliases++]) + 5; - for (i = 0; i < numaliases; i++) - put_long (sb->servent + 16 + i * 4, addstr (&aptr, s->s_aliases[i])); - put_long (sb->servent + 16 + numaliases * 4, 0); - put_long (sb->servent, aptr); - addstr (&aptr, s->s_name); - put_long (sb->servent + 12, aptr); - addstr (&aptr, s->s_proto); + if (sb->servent) + { + uae_FreeMem(context, sb->servent, sb->serventsize, sb->sysbase); + } - BSDTRACE (("OK (%s, %d)\n", s->s_name, (unsigned short)htons (s->s_port))); - bsdsocklib_seterrno (sb,0); + sb->servent = uae_AllocMem(context, size, 0, sb->sysbase); + + if (!sb->servent) + { + write_log("BSDSOCK: WARNING - getservby%s() ran out of Amiga memory (couldn't allocate %d bytes)\n", type ? "port" : "name", size); + bsdsocklib_seterrno(sb, 12); // ENOMEM + return; + } + + sb->serventsize = size; + + aptr = sb->servent + 20 + numaliases * 4; + + // transfer servent to Amiga memory + put_long(sb->servent + 4, sb->servent + 16); + put_long(sb->servent + 8, (unsigned short)htons(s->s_port)); + + for (i = 0; i < numaliases; i++) + put_long(sb->servent + 16 + i * 4, addstr(&aptr, s->s_aliases[i])); + put_long(sb->servent + 16 + numaliases * 4, 0); + put_long(sb->servent, aptr); + addstr(&aptr, s->s_name); + put_long(sb->servent + 12, aptr); + addstr(&aptr, s->s_proto); + + BSDTRACE(("OK (%s, %d)\n", s->s_name, (unsigned short)htons(s->s_port))); + bsdsocklib_seterrno(sb, 0); } -int host_sbinit (TrapContext *context, SB) +int host_sbinit(TrapContext *context, SB) { - if (pipe (sb->sockabort) < 0) { + if (pipe(sb->sockabort) < 0) + { return 0; - } + } - if (fcntl (sb->sockabort[0], F_SETFL, O_NONBLOCK) < 0) { - write_log ("Set nonblock failed %d\n", errno); - } + if (fcntl(sb->sockabort[0], F_SETFL, O_NONBLOCK) < 0) + { + write_log("Set nonblock failed %d\n", errno); + } - if (uae_sem_init (&sb->sem, 0, 0)) { - write_log ("BSDSOCK: Failed to create semaphore.\n"); - close (sb->sockabort[0]); - close (sb->sockabort[1]); + if (uae_sem_init(&sb->sem, 0, 0)) + { + write_log("BSDSOCK: Failed to create semaphore.\n"); + close(sb->sockabort[0]); + close(sb->sockabort[1]); return 0; - } + } - /* Alloc hostent buffer */ - sb->hostent = uae_AllocMem (context, 1024, 0, sb->sysbase); - sb->hostentsize = 1024; + /* Alloc hostent buffer */ + sb->hostent = uae_AllocMem(context, 1024, 0, sb->sysbase); + sb->hostentsize = 1024; - /* @@@ The thread should be PTHREAD_CREATE_DETACHED */ - if (uae_start_thread ("bsdsocket", bsdlib_threadfunc, (void *)sb, &sb->thread) == BAD_THREAD) { - write_log ("BSDSOCK: Failed to create thread.\n"); - uae_sem_destroy (&sb->sem); - close (sb->sockabort[0]); - close (sb->sockabort[1]); + /* @@@ The thread should be PTHREAD_CREATE_DETACHED */ + if (uae_start_thread("bsdsocket", bsdlib_threadfunc, static_cast(sb), &sb->thread) == BAD_THREAD) + { + write_log("BSDSOCK: Failed to create thread.\n"); + uae_sem_destroy(&sb->sem); + close(sb->sockabort[0]); + close(sb->sockabort[1]); return 0; - } - return 1; + } + return 1; } -void host_sbcleanup (SB) +void host_sbcleanup(SB) { - int i; + int i; - if (!sb) { - return; - } + if (!sb) + { + return; + } - uae_thread_id thread = sb->thread; - close (sb->sockabort[0]); - close (sb->sockabort[1]); - for (i = 0; i < sb->dtablesize; i++) { - if (sb->dtable[i] != -1) { - close(sb->dtable[i]); + uae_thread_id thread = sb->thread; + close(sb->sockabort[0]); + close(sb->sockabort[1]); + for (i = 0; i < sb->dtablesize; i++) + { + if (sb->dtable[i] != -1) + { + close(sb->dtable[i]); } - } - sb->action = 0; + } + sb->action = 0; - uae_sem_post (&sb->sem); /* destroy happens on socket thread */ + uae_sem_post(&sb->sem); /* destroy happens on socket thread */ - /* We need to join with the socket thread to allow the thread to die - * and clean up resources when the underlying thread layer is pthreads. - * Ideally, this shouldn't be necessary, but, for example, when SDL uses - * pthreads, it always creates joinable threads - and we can't do anything - * about that. */ - uae_wait_thread (thread); + /* We need to join with the socket thread to allow the thread to die + * and clean up resources when the underlying thread layer is pthreads. + * Ideally, this shouldn't be necessary, but, for example, when SDL uses + * pthreads, it always creates joinable threads - and we can't do anything + * about that. */ + uae_wait_thread(thread); } -void host_sbreset (void) +void host_sbreset(void) { - /* TODO */ + /* TODO */ } -uae_u32 host_Inet_NtoA (TrapContext *context, SB, uae_u32 in) +uae_u32 host_Inet_NtoA(TrapContext *context, SB, uae_u32 in) { - char *addr; - struct in_addr ina; - uae_u32 buf; + char *addr; + struct in_addr ina; + uae_u32 buf; - *(uae_u32 *)&ina = htonl (in); + *reinterpret_cast(&ina) = htonl(in); - BSDTRACE (("Inet_NtoA(%x) -> \n", in)); + BSDTRACE(("Inet_NtoA(%x) -> \n", in)); - if ((addr = inet_ntoa(ina)) != NULL) { - buf = m68k_areg (regs, 6) + offsetof (struct UAEBSDBase, scratchbuf); - strncpyha (buf, addr, SCRATCHBUFSIZE); - BSDTRACE ((" -> %s\n", addr)); + if ((addr = inet_ntoa(ina)) != NULL) + { + buf = m68k_areg(regs, 6) + offsetof(struct UAEBSDBase, scratchbuf); + strncpyha(buf, addr, SCRATCHBUFSIZE); + BSDTRACE((" -> %s\n", addr)); return buf; - } else + } + else SETERRNO; - BSDTRACE ((" -> failed (%d)\n", sb->sb_errno)); + BSDTRACE((" -> failed (%d)\n", sb->sb_errno)); - return 0; + return 0; } -uae_u32 host_inet_addr (uae_u32 cp) +uae_u32 host_inet_addr(uae_u32 cp) { - uae_u32 addr; - char *cp_rp; + uae_u32 addr; + char *cp_rp; - cp_rp = (char *)get_real_address (cp); + cp_rp = reinterpret_cast(get_real_address(cp)); - addr = htonl (inet_addr (cp_rp)); + addr = htonl(inet_addr(cp_rp)); - BSDTRACE (("inet_addr(%s) -> 0x%08x\n", cp_rp, addr)); + BSDTRACE(("inet_addr(%s) -> 0x%08x\n", cp_rp, addr)); - return addr; + return addr; } -uae_u32 host_shutdown (SB, uae_u32 sd, uae_u32 how) +uae_u32 host_shutdown(SB, uae_u32 sd, uae_u32 how) { - SOCKET s; + SOCKET s; - BSDTRACE (("shutdown(%d,%d) -> ", sd, how)); - s = getsock (sb, sd + 1); + BSDTRACE(("shutdown(%d,%d) -> ", sd, how)); + s = getsock(sb, sd + 1); - if (s != -1) { - if (shutdown (s, how)) { - SETERRNO; - BSDTRACE (("failed (%d)\n", sb->sb_errno)); - } else { - BSDTRACE (("OK\n")); - return 0; + if (s != -1) + { + if (shutdown(s, how)) + { + SETERRNO; + BSDTRACE(("failed (%d)\n", sb->sb_errno)); } - } + else + { + BSDTRACE(("OK\n")); + return 0; + } + } - return -1; + return -1; } -int host_dup2socket (TrapContext *context, SB, int fd1, int fd2) +int host_dup2socket(TrapContext *context, SB, int fd1, int fd2) { - int s1, s2; + int s1, s2; - BSDTRACE (("dup2socket(%d,%d) -> ", fd1, fd2)); - fd1++; + BSDTRACE(("dup2socket(%d,%d) -> ", fd1, fd2)); + fd1++; - s1 = getsock (sb, fd1); - if (s1 != -1) { - if (fd2 != -1) { - if ((unsigned int) (fd2) >= (unsigned int) sb->dtablesize) { - BSDTRACE (("Bad file descriptor (%d)\n", fd2)); - bsdsocklib_seterrno (sb, 9); /* EBADF */ - } - fd2++; - s2 = getsock (sb, fd2); - if (s2 != -1) { - close (s2); - } - setsd (context, sb, fd2, dup (s1)); - BSDTRACE (("0(%d)\n", getsock (sb, fd2))); - return 0; - } else { - fd2 = getsd (context, sb, 1); - if (fd2 != -1) { - setsd (context, sb, fd2, dup (s1)); - BSDTRACE (("%d(%d)\n", fd2, getsock (sb, fd2))); - return (fd2 - 1); - } else { + s1 = getsock(sb, fd1); + if (s1 != -1) + { + if (fd2 != -1) + { + if (static_cast(fd2) >= static_cast(sb->dtablesize)) + { + BSDTRACE(("Bad file descriptor (%d)\n", fd2)); + bsdsocklib_seterrno(sb, 9); /* EBADF */ + } + fd2++; + s2 = getsock(sb, fd2); + if (s2 != -1) + { + close(s2); + } + setsd(context, sb, fd2, dup(s1)); + BSDTRACE(("0(%d)\n", getsock(sb, fd2))); + return 0; + } + else + { + fd2 = getsd(context, sb, 1); + if (fd2 != -1) + { + setsd(context, sb, fd2, dup(s1)); + BSDTRACE(("%d(%d)\n", fd2, getsock(sb, fd2))); + return (fd2 - 1); + } + else + { BSDTRACE(("-1\n")); return -1; } } - } - BSDTRACE (("-1\n")); - return -1; + } + BSDTRACE(("-1\n")); + return -1; } -uae_u32 host_getsockopt (SB, uae_u32 sd, uae_u32 level, uae_u32 optname, - uae_u32 optval, uae_u32 optlen) +uae_u32 host_getsockopt(SB, + uae_u32 sd, + uae_u32 level, + uae_u32 optname, + uae_u32 optval, + uae_u32 optlen) { - socklen_t len = 0; - int r; - int s; - int nativelevel = mapsockoptlevel(level); - int nativeoptname = mapsockoptname(nativelevel, optname); - void *buf = NULL; - s = getsock (sb, sd + 1); + socklen_t len = 0; + int r; + int s; + int nativelevel = mapsockoptlevel(level); + int nativeoptname = mapsockoptname(nativelevel, optname); + void *buf = NULL; + s = getsock(sb, sd + 1); - if (s == -1) { + if (s == -1) + { bsdsocklib_seterrno(sb, 9); /* EBADF */ return -1; - } + } - if (optlen) { - len = get_long (optlen); + if (optlen) + { + len = get_long(optlen); buf = malloc(len); - if (buf == NULL) { - return -1; + if (buf == NULL) + { + return -1; } - } + } - r = getsockopt (s, nativelevel, nativeoptname, - optval ? buf : NULL, optlen ? &len : NULL); + r = getsockopt(s, + nativelevel, + nativeoptname, + optval ? buf : NULL, + optlen ? &len : NULL); - if (optlen) - put_long (optlen, len); + if (optlen) + put_long(optlen, len); - SETERRNO; - DEBUG_LOG ("getsockopt: sock AmigaSide %d NativeSide %d, level %d, 'name' %x(%d), len %d -> %d, %d\n", - sd, s, level, optname, nativeoptname, len, r, errno); + SETERRNO; + DEBUG_LOG("getsockopt: sock AmigaSide %d NativeSide %d, level %d, 'name' %x(%d), len %d -> %d, %d\n", + sd, + s, + level, + optname, + nativeoptname, + len, + r, + errno); - if (optval) { - if (r == 0) { - mapsockoptreturn(nativelevel, nativeoptname, optval, buf); + if (optval) + { + if (r == 0) + { + mapsockoptreturn(nativelevel, nativeoptname, optval, buf); } - } + } - if (buf != NULL) + if (buf != NULL) free(buf); - return r; + return r; } -uae_u32 host_IoctlSocket (TrapContext *context, SB, uae_u32 sd, uae_u32 request, uae_u32 arg) +uae_u32 host_IoctlSocket(TrapContext *context, SB, uae_u32 sd, uae_u32 request, uae_u32 arg) { - int sock = getsock (sb, sd + 1); - int r, argval = get_long (arg); - long flags; + int sock = getsock(sb, sd + 1); + int r, argval = get_long(arg); + long flags; - if (sock == -1) { + if (sock == -1) + { sb->resultval = -1; - bsdsocklib_seterrno (sb, 9); /* EBADF */ + bsdsocklib_seterrno(sb, 9); /* EBADF */ return -1; - } + } - if ((flags = fcntl (sock, F_GETFL)) == -1) { + if ((flags = fcntl(sock, F_GETFL)) == -1) + { SETERRNO; return -1; - } + } - DEBUG_LOG ("Ioctl code is %lx, flags are %d\n", request, flags); + DEBUG_LOG("Ioctl code is %lx, flags are %d\n", request, flags); - switch (request) { - case 0x8004667B: /* FIOGETOWN */ - sb->ownertask = get_long (arg); - return 0; + switch (request) + { + case 0x8004667B: /* FIOGETOWN */ + sb->ownertask = get_long(arg); + return 0; - case 0x8004667C: /* FIOSETOWN */ - put_long (arg,sb->ownertask); - return 0; - case 0x8004667D: /* FIOASYNC */ + case 0x8004667C: /* FIOSETOWN */ + put_long(arg, sb->ownertask); + return 0; + case 0x8004667D: /* FIOASYNC */ # ifdef O_ASYNC - r = fcntl (sock, F_SETFL, argval ? flags | O_ASYNC : flags & ~O_ASYNC); - return r; + r = fcntl(sock, F_SETFL, argval ? flags | O_ASYNC : flags & ~O_ASYNC); + return r; # else - /* O_ASYNC is only available on Linux and BSD systems */ - r = fcntl (sock, F_GETFL); - return r; + /* O_ASYNC is only available on Linux and BSD systems */ + r = fcntl(sock, F_GETFL); + return r; # endif - case 0x8004667E: /* FIONBIO */ - if (sd == 0) { - printf("WARNING: sd was 0 ???\n"); - sb->resultval = -1; - bsdsocklib_seterrno (sb, 9); /* EBADF */ - return -1; - } - r = fcntl (sock, F_SETFL, argval ? - flags | O_NONBLOCK : flags & ~O_NONBLOCK); - if (argval) { - DEBUG_LOG ("nonblocking\n"); - sb->ftable[sd-1] &= ~SF_BLOCKING; - } else { - DEBUG_LOG ("blocking\n"); - sb->ftable[sd-1] |= SF_BLOCKING; - } - return r; + case 0x8004667E: /* FIONBIO */ + if (sd == 0) + { + printf("WARNING: sd was 0 ???\n"); + sb->resultval = -1; + bsdsocklib_seterrno(sb, 9); /* EBADF */ + return -1; + } + r = fcntl(sock, + F_SETFL, + argval ? + flags | O_NONBLOCK : flags & ~O_NONBLOCK); + if (argval) + { + DEBUG_LOG("nonblocking\n"); + sb->ftable[sd - 1] &= ~SF_BLOCKING; + } + else + { + DEBUG_LOG("blocking\n"); + sb->ftable[sd - 1] |= SF_BLOCKING; + } + return r; - case 0x4004667F: /* FIONREAD */ - r = ioctl (sock, FIONREAD, &flags); - if (r >= 0) { - put_long (arg, flags); - } - return r; + case 0x4004667F: /* FIONREAD */ + r = ioctl(sock, FIONREAD, &flags); + if (r >= 0) + { + put_long(arg, flags); + } + return r; - } /* end switch */ + } /* end switch */ - bsdsocklib_seterrno (sb, EINVAL); - return -1; + bsdsocklib_seterrno(sb, EINVAL); + return -1; } -int host_CloseSocket (TrapContext *context, SB, int sd) +int host_CloseSocket(TrapContext *context, SB, int sd) { - int s = getsock (sb, sd + 1); - int retval; + int s = getsock(sb, sd + 1); + int retval; - if (s == -1) { - bsdsocklib_seterrno (sb, 9); /* EBADF */ + if (s == -1) + { + bsdsocklib_seterrno(sb, 9); /* EBADF */ return -1; - } + } - /* - if (checksd (sb, sd + 1) == 1) { - return 0; - } - */ - DEBUG_LOG ("CloseSocket Amiga: %d, NativeSide %d\n", sd, s); - retval = close (s); - SETERRNO; - releasesock (context, sb, sd + 1); - return retval; + /* + if (checksd (sb, sd + 1) == 1) { + return 0; + } + */ + DEBUG_LOG("CloseSocket Amiga: %d, NativeSide %d\n", sd, s); + retval = close(s); + SETERRNO; + releasesock(context, sb, sd + 1); + return retval; } -void host_closesocketquick (int s) +void host_closesocketquick(int s) { - struct linger l; - l.l_onoff = 0; - l.l_linger = 0; - if(s != -1) { - setsockopt (s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)); - close (s); - } + struct linger l; + l.l_onoff = 0; + l.l_linger = 0; + if (s != -1) + { + setsockopt(s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)); + close(s); + } } -uae_u32 host_gethostname (uae_u32 name, uae_u32 namelen) +uae_u32 host_gethostname(uae_u32 name, uae_u32 namelen) { - uae_u32 r = gethostname ((char *)get_real_address (name), namelen); - return r; + uae_u32 r = gethostname(reinterpret_cast(get_real_address(name)), namelen); + return r; } int init_socket_layer(void) { int result = 0; - if (currprefs.socket_emu) { - if (uae_sem_init(&sem_queue, 0, 1) < 0) { - DEBUG_LOG("Can't create sem %d\n", errno); - return 0; - } - result = 1; - } + if (currprefs.socket_emu) + { + if (uae_sem_init(&sem_queue, 0, 1) < 0) + { + DEBUG_LOG("Can't create sem %d\n", errno); + return 0; + } + result = 1; + } - return result; + return result; } -void clearsockabort (SB) +void clearsockabort(SB) { - int chr; - int num; + int chr; + int num; - while ((num = read (sb->sockabort[0], &chr, sizeof(chr))) >= 0) { - DEBUG_LOG ("Sockabort got %d bytes\n", num); + while ((num = read(sb->sockabort[0], &chr, sizeof(chr))) >= 0) + { + DEBUG_LOG("Sockabort got %d bytes\n", num); ; - } + } } -void sockabort (SB) +void sockabort(SB) { - int chr = 1; - DEBUG_LOG ("Sock abort!!\n"); - write (sb->sockabort[1], &chr, sizeof (chr)); + int chr = 1; + DEBUG_LOG("Sock abort!!\n"); + write(sb->sockabort[1], &chr, sizeof(chr)); } -void locksigqueue (void) +void locksigqueue(void) { - uae_sem_wait(&sem_queue); + uae_sem_wait(&sem_queue); } -void unlocksigqueue (void) +void unlocksigqueue(void) { - uae_sem_post(&sem_queue); + uae_sem_post(&sem_queue); } #endif diff --git a/src/od-pandora/gui/EditFilesysVirtual.cpp b/src/od-pandora/gui/EditFilesysVirtual.cpp index 68651cdc..32d5208a 100644 --- a/src/od-pandora/gui/EditFilesysVirtual.cpp +++ b/src/od-pandora/gui/EditFilesysVirtual.cpp @@ -11,7 +11,7 @@ #include "sysdeps.h" #include "config.h" #include "options.h" -#include "memory.h" +#include "include/memory.h" #include "uae.h" #include "autoconf.h" #include "filesys.h" @@ -22,6 +22,8 @@ #define DIALOG_WIDTH 520 #define DIALOG_HEIGHT 202 +extern std::string volName; + static bool dialogResult = false; static bool dialogFinished = false; @@ -43,38 +45,41 @@ static gcn::TextField *txtBootPri; class FilesysVirtualActionListener : public gcn::ActionListener { - public: - void action(const gcn::ActionEvent& actionEvent) - { - if(actionEvent.getSource() == cmdPath) - { - char tmp[MAX_PATH]; - strncpy(tmp, txtPath->getText().c_str(), MAX_PATH); - wndEditFilesysVirtual->releaseModalFocus(); - if(SelectFolder("Select folder", tmp)) - txtPath->setText(tmp); - wndEditFilesysVirtual->requestModalFocus(); - cmdPath->requestFocus(); - } - else - { - if (actionEvent.getSource() == cmdOK) - { - if(txtDevice->getText().length() <= 0) - { - wndEditFilesysVirtual->setCaption("Please enter a device name."); - return; - } - if(txtVolume->getText().length() <= 0) - { - wndEditFilesysVirtual->setCaption("Please enter a volume name."); - return; - } - dialogResult = true; - } - dialogFinished = true; - } - } +public: + void action(const gcn::ActionEvent& actionEvent) + { + if (actionEvent.getSource() == cmdPath) + { + char tmp[MAX_PATH]; + strncpy(tmp, txtPath->getText().c_str(), MAX_PATH); + wndEditFilesysVirtual->releaseModalFocus(); + if (SelectFolder("Select folder", tmp)) + { + txtPath->setText(tmp); + txtVolume->setText(volName); + } + wndEditFilesysVirtual->requestModalFocus(); + cmdPath->requestFocus(); + } + else + { + if (actionEvent.getSource() == cmdOK) + { + if (txtDevice->getText().length() <= 0) + { + wndEditFilesysVirtual->setCaption("Please enter a device name."); + return; + } + if (txtVolume->getText().length() <= 0) + { + wndEditFilesysVirtual->setCaption("Please enter a volume name."); + return; + } + dialogResult = true; + } + dialogFinished = true; + } + } }; static FilesysVirtualActionListener* filesysVirtualActionListener; @@ -83,232 +88,247 @@ static void InitEditFilesysVirtual(void) { wndEditFilesysVirtual = new gcn::Window("Edit"); wndEditFilesysVirtual->setSize(DIALOG_WIDTH, DIALOG_HEIGHT); - wndEditFilesysVirtual->setPosition((GUI_WIDTH - DIALOG_WIDTH) / 2, (GUI_HEIGHT - DIALOG_HEIGHT) / 2); - wndEditFilesysVirtual->setBaseColor(gui_baseCol + 0x202020); - wndEditFilesysVirtual->setCaption("Volume settings"); - wndEditFilesysVirtual->setTitleBarHeight(TITLEBAR_HEIGHT); - - filesysVirtualActionListener = new FilesysVirtualActionListener(); - + wndEditFilesysVirtual->setPosition((GUI_WIDTH - DIALOG_WIDTH) / 2, (GUI_HEIGHT - DIALOG_HEIGHT) / 2); + wndEditFilesysVirtual->setBaseColor(gui_baseCol + 0x202020); + wndEditFilesysVirtual->setCaption("Volume settings"); + wndEditFilesysVirtual->setTitleBarHeight(TITLEBAR_HEIGHT); + + filesysVirtualActionListener = new FilesysVirtualActionListener(); + cmdOK = new gcn::Button("Ok"); cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10); - cmdOK->setBaseColor(gui_baseCol + 0x202020); - cmdOK->setId("virtOK"); - cmdOK->addActionListener(filesysVirtualActionListener); - + cmdOK->setBaseColor(gui_baseCol + 0x202020); + cmdOK->setId("virtOK"); + cmdOK->addActionListener(filesysVirtualActionListener); + cmdCancel = new gcn::Button("Cancel"); cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10); - cmdCancel->setBaseColor(gui_baseCol + 0x202020); - cmdCancel->setId("virtCancel"); - cmdCancel->addActionListener(filesysVirtualActionListener); + cmdCancel->setBaseColor(gui_baseCol + 0x202020); + cmdCancel->setId("virtCancel"); + cmdCancel->addActionListener(filesysVirtualActionListener); - lblDevice = new gcn::Label("Device Name:"); - lblDevice->setSize(100, LABEL_HEIGHT); - lblDevice->setAlignment(gcn::Graphics::RIGHT); - txtDevice = new gcn::TextField(); - txtDevice->setSize(80, TEXTFIELD_HEIGHT); - txtDevice->setId("virtDev"); + lblDevice = new gcn::Label("Device Name:"); + lblDevice->setSize(100, LABEL_HEIGHT); + lblDevice->setAlignment(gcn::Graphics::RIGHT); + txtDevice = new gcn::TextField(); + txtDevice->setSize(80, TEXTFIELD_HEIGHT); + txtDevice->setId("virtDev"); - lblVolume = new gcn::Label("Volume Label:"); - lblVolume->setSize(100, LABEL_HEIGHT); - lblVolume->setAlignment(gcn::Graphics::RIGHT); - txtVolume = new gcn::TextField(); - txtVolume->setSize(80, TEXTFIELD_HEIGHT); - txtVolume->setId("virtVol"); + lblVolume = new gcn::Label("Volume Label:"); + lblVolume->setSize(100, LABEL_HEIGHT); + lblVolume->setAlignment(gcn::Graphics::RIGHT); + txtVolume = new gcn::TextField(); + txtVolume->setSize(80, TEXTFIELD_HEIGHT); + txtVolume->setId("virtVol"); - lblPath = new gcn::Label("Path:"); - lblPath->setSize(100, LABEL_HEIGHT); - lblPath->setAlignment(gcn::Graphics::RIGHT); - txtPath = new gcn::TextField(); - txtPath->setSize(338, TEXTFIELD_HEIGHT); - txtPath->setEnabled(false); - cmdPath = new gcn::Button("..."); - cmdPath->setSize(SMALL_BUTTON_WIDTH, SMALL_BUTTON_HEIGHT); - cmdPath->setBaseColor(gui_baseCol + 0x202020); - cmdPath->setId("virtPath"); - cmdPath->addActionListener(filesysVirtualActionListener); + lblPath = new gcn::Label("Path:"); + lblPath->setSize(100, LABEL_HEIGHT); + lblPath->setAlignment(gcn::Graphics::RIGHT); + txtPath = new gcn::TextField(); + txtPath->setSize(338, TEXTFIELD_HEIGHT); + txtPath->setEnabled(false); + cmdPath = new gcn::Button("..."); + cmdPath->setSize(SMALL_BUTTON_WIDTH, SMALL_BUTTON_HEIGHT); + cmdPath->setBaseColor(gui_baseCol + 0x202020); + cmdPath->setId("virtPath"); + cmdPath->addActionListener(filesysVirtualActionListener); chkReadWrite = new gcn::UaeCheckBox("Read/Write", true); - chkReadWrite->setId("virtRW"); + chkReadWrite->setId("virtRW"); chkAutoboot = new gcn::UaeCheckBox("Bootable", true); - chkAutoboot->setId("virtAutoboot"); + chkAutoboot->setId("virtAutoboot"); - lblBootPri = new gcn::Label("Boot priority:"); - lblBootPri->setSize(84, LABEL_HEIGHT); - lblBootPri->setAlignment(gcn::Graphics::RIGHT); - txtBootPri = new gcn::TextField(); - txtBootPri->setSize(40, TEXTFIELD_HEIGHT); - txtBootPri->setId("virtBootpri"); - - int posY = DISTANCE_BORDER; - wndEditFilesysVirtual->add(lblDevice, DISTANCE_BORDER, posY); - wndEditFilesysVirtual->add(txtDevice, DISTANCE_BORDER + lblDevice->getWidth() + 8, posY); - wndEditFilesysVirtual->add(chkReadWrite, 250, posY + 1); - posY += txtDevice->getHeight() + DISTANCE_NEXT_Y; - wndEditFilesysVirtual->add(lblVolume, DISTANCE_BORDER, posY); - wndEditFilesysVirtual->add(txtVolume, DISTANCE_BORDER + lblDevice->getWidth() + 8, posY); - wndEditFilesysVirtual->add(chkAutoboot, 250, posY + 1); - wndEditFilesysVirtual->add(lblBootPri, 374, posY); - wndEditFilesysVirtual->add(txtBootPri, 374 + lblBootPri->getWidth() + 8, posY); - posY += txtDevice->getHeight() + DISTANCE_NEXT_Y; - wndEditFilesysVirtual->add(lblPath, DISTANCE_BORDER, posY); - wndEditFilesysVirtual->add(txtPath, DISTANCE_BORDER + lblDevice->getWidth() + 8, posY); - wndEditFilesysVirtual->add(cmdPath, wndEditFilesysVirtual->getWidth() - DISTANCE_BORDER - SMALL_BUTTON_WIDTH, posY); - posY += txtDevice->getHeight() + DISTANCE_NEXT_Y; + lblBootPri = new gcn::Label("Boot priority:"); + lblBootPri->setSize(84, LABEL_HEIGHT); + lblBootPri->setAlignment(gcn::Graphics::RIGHT); + txtBootPri = new gcn::TextField(); + txtBootPri->setSize(40, TEXTFIELD_HEIGHT); + txtBootPri->setId("virtBootpri"); - wndEditFilesysVirtual->add(cmdOK); - wndEditFilesysVirtual->add(cmdCancel); + int posY = DISTANCE_BORDER; + wndEditFilesysVirtual->add(lblDevice, DISTANCE_BORDER, posY); + wndEditFilesysVirtual->add(txtDevice, DISTANCE_BORDER + lblDevice->getWidth() + 8, posY); + wndEditFilesysVirtual->add(chkReadWrite, 250, posY + 1); + posY += txtDevice->getHeight() + DISTANCE_NEXT_Y; + wndEditFilesysVirtual->add(lblVolume, DISTANCE_BORDER, posY); + wndEditFilesysVirtual->add(txtVolume, DISTANCE_BORDER + lblDevice->getWidth() + 8, posY); + wndEditFilesysVirtual->add(chkAutoboot, 250, posY + 1); + wndEditFilesysVirtual->add(lblBootPri, 374, posY); + wndEditFilesysVirtual->add(txtBootPri, 374 + lblBootPri->getWidth() + 8, posY); + posY += txtDevice->getHeight() + DISTANCE_NEXT_Y; + wndEditFilesysVirtual->add(lblPath, DISTANCE_BORDER, posY); + wndEditFilesysVirtual->add(txtPath, DISTANCE_BORDER + lblDevice->getWidth() + 8, posY); + wndEditFilesysVirtual->add(cmdPath, wndEditFilesysVirtual->getWidth() - DISTANCE_BORDER - SMALL_BUTTON_WIDTH, posY); + posY += txtDevice->getHeight() + DISTANCE_NEXT_Y; - gui_top->add(wndEditFilesysVirtual); - - txtDevice->requestFocus(); - wndEditFilesysVirtual->requestModalFocus(); + wndEditFilesysVirtual->add(cmdOK); + wndEditFilesysVirtual->add(cmdCancel); + + gui_top->add(wndEditFilesysVirtual); + + txtDevice->requestFocus(); + wndEditFilesysVirtual->requestModalFocus(); } static void ExitEditFilesysVirtual(void) { - wndEditFilesysVirtual->releaseModalFocus(); - gui_top->remove(wndEditFilesysVirtual); + wndEditFilesysVirtual->releaseModalFocus(); + gui_top->remove(wndEditFilesysVirtual); - delete lblDevice; - delete txtDevice; - delete lblVolume; - delete txtVolume; - delete lblPath; - delete txtPath; - delete cmdPath; - delete chkReadWrite; - delete chkAutoboot; - delete lblBootPri; - delete txtBootPri; - - delete cmdOK; - delete cmdCancel; - delete filesysVirtualActionListener; - - delete wndEditFilesysVirtual; + delete lblDevice; + delete txtDevice; + delete lblVolume; + delete txtVolume; + delete lblPath; + delete txtPath; + delete cmdPath; + delete chkReadWrite; + delete chkAutoboot; + delete lblBootPri; + delete txtBootPri; + + delete cmdOK; + delete cmdCancel; + delete filesysVirtualActionListener; + + delete wndEditFilesysVirtual; } static void EditFilesysVirtualLoop(void) { - while(!dialogFinished) - { - SDL_Event event; - while(SDL_PollEvent(&event)) - { - if (event.type == SDL_KEYDOWN) - { - switch(event.key.keysym.sym) - { - case SDLK_ESCAPE: - dialogFinished = true; - break; - - case SDLK_UP: - if(HandleNavigation(DIRECTION_UP)) - continue; // Don't change value when enter ComboBox -> don't send event to control - break; - - case SDLK_DOWN: - if(HandleNavigation(DIRECTION_DOWN)) - continue; // Don't change value when enter ComboBox -> don't send event to control - break; + while (!dialogFinished) + { + SDL_Event event; + while (SDL_PollEvent(&event)) + { + if (event.type == SDL_KEYDOWN) + { + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + dialogFinished = true; + break; - case SDLK_LEFT: - if(HandleNavigation(DIRECTION_LEFT)) - continue; // Don't change value when enter Slider -> don't send event to control - break; - - case SDLK_RIGHT: - if(HandleNavigation(DIRECTION_RIGHT)) - continue; // Don't change value when enter Slider -> don't send event to control - break; + case SDLK_UP: + if (HandleNavigation(DIRECTION_UP)) + continue; // Don't change value when enter ComboBox -> don't send event to control + break; - case SDLK_PAGEDOWN: - case SDLK_HOME: - event.key.keysym.sym = SDLK_RETURN; - gui_input->pushInput(event); // Fire key down - event.type = SDL_KEYUP; // and the key up - break; - } - } + case SDLK_DOWN: + if (HandleNavigation(DIRECTION_DOWN)) + continue; // Don't change value when enter ComboBox -> don't send event to control + break; - //------------------------------------------------- - // Send event to guichan-controls - //------------------------------------------------- - gui_input->pushInput(event); - } + case SDLK_LEFT: + if (HandleNavigation(DIRECTION_LEFT)) + continue; // Don't change value when enter Slider -> don't send event to control + break; - // Now we let the Gui object perform its logic. - uae_gui->logic(); - // Now we let the Gui object draw itself. - uae_gui->draw(); - // Finally we update the screen. - wait_for_vsync(); - SDL_Flip(gui_screen); - } + case SDLK_RIGHT: + if (HandleNavigation(DIRECTION_RIGHT)) + continue; // Don't change value when enter Slider -> don't send event to control + break; + + case SDLK_PAGEDOWN: + case SDLK_HOME: + event.key.keysym.sym = SDLK_RETURN; + gui_input->pushInput(event); // Fire key down + event.type = SDL_KEYUP; // and the key up + break; + } + } + + //------------------------------------------------- + // Send event to guichan-controls + //------------------------------------------------- + gui_input->pushInput(event); + } + + // Now we let the Gui object perform its logic. + uae_gui->logic(); + // Now we let the Gui object draw itself. + uae_gui->draw(); + // Finally we update the screen. + wait_for_vsync(); + SDL_Flip(gui_screen); + } } bool EditFilesysVirtual(int unit_no) { - struct mountedinfo mi; - struct uaedev_config_info *uci; - std::string strdevname, strvolname, strroot; - char tmp[32]; - - dialogResult = false; - dialogFinished = false; + struct mountedinfo mi; + struct uaedev_config_info *uci; + std::string strdevname, strvolname, strroot; + char tmp[32]; - InitEditFilesysVirtual(); + dialogResult = false; + dialogFinished = false; - if(unit_no >= 0) - { - uci = &changed_prefs.mountconfig[unit_no]; - get_filesys_unitconfig(&changed_prefs, unit_no, &mi); + InitEditFilesysVirtual(); - strdevname.assign(uci->devname); - txtDevice->setText(strdevname); - strvolname.assign(uci->volname); - txtVolume->setText(strvolname); - strroot.assign(uci->rootdir); - txtPath->setText(strroot); - chkReadWrite->setSelected(!uci->readonly); - chkAutoboot->setSelected(uci->bootpri != -128); - snprintf(tmp, 32, "%d", uci->bootpri >= -127 ? uci->bootpri : -127); - txtBootPri->setText(tmp); - } - else - { - CreateDefaultDevicename(tmp); - txtDevice->setText(tmp); - txtVolume->setText(tmp); - strroot.assign(currentDir); - txtPath->setText(strroot); - chkReadWrite->setSelected(true); - txtBootPri->setText("0"); - } + if (unit_no >= 0) + { + uci = &changed_prefs.mountconfig[unit_no]; + get_filesys_unitconfig(&changed_prefs, unit_no, &mi); - EditFilesysVirtualLoop(); - - if(dialogResult) - { - int bp = tweakbootpri(atoi(txtBootPri->getText().c_str()), chkAutoboot->isSelected() ? 1 : 0, 0); - extractPath((char *) txtPath->getText().c_str(), currentDir); - - uci = add_filesys_config(&changed_prefs, unit_no, (char *) txtDevice->getText().c_str(), - (char *) txtVolume->getText().c_str(), (char *) txtPath->getText().c_str(), - !chkReadWrite->isSelected(), 0, 0, 0, 0, 0, bp, 0, 0, 0, 0, 0, 0); - if (uci) - filesys_media_change (uci->rootdir, 1, uci); - } + strdevname.assign(uci->devname); + txtDevice->setText(strdevname); + strvolname.assign(uci->volname); + txtVolume->setText(strvolname); + strroot.assign(uci->rootdir); + txtPath->setText(strroot); + chkReadWrite->setSelected(!uci->readonly); + chkAutoboot->setSelected(uci->bootpri != -128); + snprintf(tmp, 32, "%d", uci->bootpri >= -127 ? uci->bootpri : -127); + txtBootPri->setText(tmp); + } + else + { + CreateDefaultDevicename(tmp); + txtDevice->setText(tmp); + txtVolume->setText(tmp); + strroot.assign(currentDir); + txtPath->setText(strroot); + chkReadWrite->setSelected(true); + txtBootPri->setText("0"); + } - ExitEditFilesysVirtual(); + EditFilesysVirtualLoop(); - return dialogResult; + if (dialogResult) + { + int bp = tweakbootpri(atoi(txtBootPri->getText().c_str()), chkAutoboot->isSelected() ? 1 : 0, 0); + extractPath((char *) txtPath->getText().c_str(), currentDir); + + uci = add_filesys_config(&changed_prefs, + unit_no, + (char *) txtDevice->getText().c_str(), + (char *) txtVolume->getText().c_str(), + (char *) txtPath->getText().c_str(), + !chkReadWrite->isSelected(), + 0, + 0, + 0, + 0, + 0, + bp, + 0, + 0, + 0, + 0, + 0, + 0); + if (uci) + filesys_media_change(uci->rootdir, 1, uci); + } + + ExitEditFilesysVirtual(); + + return dialogResult; } diff --git a/src/od-pandora/gui/InGameMessage.cpp b/src/od-pandora/gui/InGameMessage.cpp index c4966094..c82b19fc 100644 --- a/src/od-pandora/gui/InGameMessage.cpp +++ b/src/od-pandora/gui/InGameMessage.cpp @@ -14,130 +14,131 @@ extern SDL_Surface *prSDLScreen; -extern void flush_screen (); +extern void flush_screen(); static int msg_done = 0; class DoneActionListener : public gcn::ActionListener { - public: - void action(const gcn::ActionEvent& actionEvent) - { - msg_done = 1; - } +public: + void action(const gcn::ActionEvent& actionEvent) + { + msg_done = 1; + } }; static DoneActionListener* doneActionListener; void InGameMessage(const char *msg) { - gcn::Gui* msg_gui; - gcn::SDLGraphics* msg_graphics; - gcn::SDLInput* msg_input; - gcn::contrib::SDLTrueTypeFont* msg_font; - gcn::Color msg_baseCol; + gcn::Gui* msg_gui; + gcn::SDLGraphics* msg_graphics; + gcn::SDLInput* msg_input; + gcn::contrib::SDLTrueTypeFont* msg_font; + gcn::Color msg_baseCol; - gcn::Container* msg_top; - gcn::Window *wndMsg; - gcn::Button* cmdDone; - gcn::TextBox* txtMsg; - - int msgWidth = 260; - int msgHeight = 100; - - msg_graphics = new gcn::SDLGraphics(); - msg_graphics->setTarget(prSDLScreen); - msg_input = new gcn::SDLInput(); - msg_gui = new gcn::Gui(); - msg_gui->setGraphics(msg_graphics); - msg_gui->setInput(msg_input); - - msg_baseCol.r = 192; - msg_baseCol.g = 192; - msg_baseCol.b = 208; + gcn::Container* msg_top; + gcn::Window *wndMsg; + gcn::Button* cmdDone; + gcn::TextBox* txtMsg; - msg_top = new gcn::Container(); - msg_top->setDimension(gcn::Rectangle((prSDLScreen->w - msgWidth) / 2, (prSDLScreen->h - msgHeight) / 2, msgWidth, msgHeight)); - msg_top->setBaseColor(msg_baseCol); - msg_gui->setTop(msg_top); + int msgWidth = 260; + int msgHeight = 100; - TTF_Init(); - msg_font = new gcn::contrib::SDLTrueTypeFont("data/FreeSans.ttf", 10); - gcn::Widget::setGlobalFont(msg_font); + msg_graphics = new gcn::SDLGraphics(); + msg_graphics->setTarget(prSDLScreen); + msg_input = new gcn::SDLInput(); + msg_gui = new gcn::Gui(); + msg_gui->setGraphics(msg_graphics); + msg_gui->setInput(msg_input); + + msg_baseCol.r = 192; + msg_baseCol.g = 192; + msg_baseCol.b = 208; + + msg_top = new gcn::Container(); + msg_top->setDimension(gcn::Rectangle((prSDLScreen->w - msgWidth) / 2, (prSDLScreen->h - msgHeight) / 2, msgWidth, msgHeight)); + msg_top->setBaseColor(msg_baseCol); + msg_gui->setTop(msg_top); + + TTF_Init(); + msg_font = new gcn::contrib::SDLTrueTypeFont("data/FreeSans.ttf", 10); + gcn::Widget::setGlobalFont(msg_font); + + doneActionListener = new DoneActionListener(); - doneActionListener = new DoneActionListener(); - wndMsg = new gcn::Window("Load"); wndMsg->setSize(msgWidth, msgHeight); - wndMsg->setPosition(0, 0); - wndMsg->setBaseColor(msg_baseCol + 0x202020); - wndMsg->setCaption("Information"); - wndMsg->setTitleBarHeight(12); + wndMsg->setPosition(0, 0); + wndMsg->setBaseColor(msg_baseCol + 0x202020); + wndMsg->setCaption("Information"); + wndMsg->setTitleBarHeight(12); cmdDone = new gcn::Button("Ok"); cmdDone->setSize(40, 20); - cmdDone->setBaseColor(msg_baseCol + 0x202020); - cmdDone->addActionListener(doneActionListener); - - txtMsg = new gcn::TextBox(msg); - txtMsg->setEnabled(false); - txtMsg->setPosition(6, 6); - txtMsg->setSize(wndMsg->getWidth() - 16, 46); - txtMsg->setOpaque(false); - - wndMsg->add(txtMsg, 6, 6); - wndMsg->add(cmdDone, (wndMsg->getWidth() - cmdDone->getWidth()) / 2, wndMsg->getHeight() - 38); + cmdDone->setBaseColor(msg_baseCol + 0x202020); + cmdDone->addActionListener(doneActionListener); - msg_top->add(wndMsg); - cmdDone->requestFocus(); - - msg_done = 0; - bool drawn = false; - while(!msg_done) - { - //------------------------------------------------- - // Check user input - //------------------------------------------------- - SDL_Event event; - while(SDL_PollEvent(&event)) - { - if (event.type == SDL_KEYDOWN) - { - switch(event.key.keysym.sym) - { - case SDLK_PAGEDOWN: - case SDLK_HOME: - case SDLK_RETURN: - msg_done = 1; - break; - } - } + txtMsg = new gcn::TextBox(msg); + txtMsg->setEnabled(false); + txtMsg->setPosition(6, 6); + txtMsg->setSize(wndMsg->getWidth() - 16, 46); + txtMsg->setOpaque(false); - //------------------------------------------------- - // Send event to guichan-controls - //------------------------------------------------- - msg_input->pushInput(event); - } + wndMsg->add(txtMsg, 6, 6); + wndMsg->add(cmdDone, (wndMsg->getWidth() - cmdDone->getWidth()) / 2, wndMsg->getHeight() - 38); - // Now we let the Gui object perform its logic. - msg_gui->logic(); - // Now we let the Gui object draw itself. - msg_gui->draw(); - // Finally we update the screen. - //SDL_Flip(prSDLScreen); - flush_screen (); - } + msg_top->add(wndMsg); + cmdDone->requestFocus(); - msg_top->remove(wndMsg); + msg_done = 0; + bool drawn = false; + while (!msg_done) + { + //------------------------------------------------- + // Check user input + //------------------------------------------------- + SDL_Event event; + while (SDL_PollEvent(&event)) + { + if (event.type == SDL_KEYDOWN) + { + switch (event.key.keysym.sym) + { + case SDLK_PAGEDOWN: + case SDLK_HOME: + case SDLK_RETURN: + msg_done = 1; + break; + } + } - delete txtMsg; - delete cmdDone; - delete doneActionListener; - delete wndMsg; - - delete msg_font; - delete msg_top; - - delete msg_gui; - delete msg_input; - delete msg_graphics; + //------------------------------------------------- + // Send event to guichan-controls + //------------------------------------------------- + msg_input->pushInput(event); + } + + // Now we let the Gui object perform its logic. + msg_gui->logic(); + // Now we let the Gui object draw itself. + msg_gui->draw(); + // Finally we update the screen. + if (!drawn) + SDL_Flip(prSDLScreen); + drawn = true; + } + + msg_top->remove(wndMsg); + + delete txtMsg; + delete cmdDone; + delete doneActionListener; + delete wndMsg; + + delete msg_font; + delete msg_top; + + delete msg_gui; + delete msg_input; + delete msg_graphics; } diff --git a/src/od-pandora/gui/PanelRAM.cpp b/src/od-pandora/gui/PanelRAM.cpp index 75b099b7..c937365e 100644 --- a/src/od-pandora/gui/PanelRAM.cpp +++ b/src/od-pandora/gui/PanelRAM.cpp @@ -11,7 +11,7 @@ #include "sysdeps.h" #include "config.h" #include "options.h" -#include "memory.h" +#include "include/memory.h" #include "uae.h" #include "gui.h" #include "gui_handling.h" @@ -33,49 +33,54 @@ static gcn::Label* lblSlowsize; static gcn::Slider* sldSlowmem; static gcn::Label* lblFastmem; static gcn::Label* lblFastsize; -static gcn::Slider* sldFastmem; +static gcn::Slider* sldFastmem; static gcn::Label* lblZ3mem; static gcn::Label* lblZ3size; -static gcn::Slider* sldZ3mem; +static gcn::Slider* sldZ3mem; static gcn::Label* lblGfxmem; static gcn::Label* lblGfxsize; -static gcn::Slider* sldGfxmem; +static gcn::Slider* sldGfxmem; class MemorySliderActionListener : public gcn::ActionListener { - public: - void action(const gcn::ActionEvent& actionEvent) - { - if (actionEvent.getSource() == sldChipmem) { - changed_prefs.chipmem_size = ChipMem_values[(int)(sldChipmem->getValue())]; - if ((changed_prefs.chipmem_size > 0x200000) && (changed_prefs.fastmem_size > 0)) - changed_prefs.fastmem_size = 0; - } - - if (actionEvent.getSource() == sldSlowmem) { - changed_prefs.bogomem_size = SlowMem_values[(int)(sldSlowmem->getValue())]; - } - - if (actionEvent.getSource() == sldFastmem) { - changed_prefs.fastmem_size = FastMem_values[(int)(sldFastmem->getValue())]; - if (changed_prefs.fastmem_size > 0 && changed_prefs.chipmem_size > 0x200000) - changed_prefs.chipmem_size = 0x200000; - } +public: + void action(const gcn::ActionEvent& actionEvent) + { + if (actionEvent.getSource() == sldChipmem) + { + changed_prefs.chipmem_size = ChipMem_values[(int)(sldChipmem->getValue())]; + if ((changed_prefs.chipmem_size > 0x200000) && (changed_prefs.fastmem_size > 0)) + changed_prefs.fastmem_size = 0; + } - if (actionEvent.getSource() == sldZ3mem) { - changed_prefs.z3fastmem_size = FastMem_values[(int)(sldZ3mem->getValue())]; - if (changed_prefs.z3fastmem_size > max_z3fastmem) - changed_prefs.z3fastmem_size = max_z3fastmem; - } + if (actionEvent.getSource() == sldSlowmem) + { + changed_prefs.bogomem_size = SlowMem_values[(int)(sldSlowmem->getValue())]; + } - if (actionEvent.getSource() == sldGfxmem) { - changed_prefs.rtgmem_size = FastMem_values[(int)(sldGfxmem->getValue())]; - changed_prefs.rtgmem_type = 1; - } + if (actionEvent.getSource() == sldFastmem) + { + changed_prefs.fastmem_size = FastMem_values[(int)(sldFastmem->getValue())]; + if (changed_prefs.fastmem_size > 0 && changed_prefs.chipmem_size > 0x200000) + changed_prefs.chipmem_size = 0x200000; + } - RefreshPanelRAM(); - } + if (actionEvent.getSource() == sldZ3mem) + { + changed_prefs.z3fastmem_size = FastMem_values[(int)(sldZ3mem->getValue())]; + if (changed_prefs.z3fastmem_size > max_z3fastmem) + changed_prefs.z3fastmem_size = max_z3fastmem; + } + + if (actionEvent.getSource() == sldGfxmem) + { + changed_prefs.rtgmem_size = FastMem_values[(int)(sldGfxmem->getValue())]; + changed_prefs.rtgmem_type = 1; + } + + RefreshPanelRAM(); + } }; static MemorySliderActionListener* memorySliderActionListener; @@ -83,7 +88,7 @@ static MemorySliderActionListener* memorySliderActionListener; void InitPanelRAM(const struct _ConfigCategory& category) { memorySliderActionListener = new MemorySliderActionListener(); - + lblChipmem = new gcn::Label("Chip:"); sldChipmem = new gcn::Slider(0, 4); sldChipmem->setSize(110, SLIDER_HEIGHT); @@ -147,7 +152,7 @@ void InitPanelRAM(const struct _ConfigCategory& category) grpRAM->add(sldSlowmem, 70, posY); grpRAM->add(lblSlowsize, 70 + sldSlowmem->getWidth() + 12, posY); posY += sldSlowmem->getHeight() + DISTANCE_NEXT_Y; - + grpRAM->add(lblFastmem, 8, posY); grpRAM->add(sldFastmem, 70, posY); grpRAM->add(lblFastsize, 70 + sldFastmem->getWidth() + 12, posY); @@ -166,88 +171,88 @@ void InitPanelRAM(const struct _ConfigCategory& category) grpRAM->setMovable(false); grpRAM->setSize(250, posY + DISTANCE_BORDER); grpRAM->setBaseColor(gui_baseCol); - + category.panel->add(grpRAM); - + RefreshPanelRAM(); } void ExitPanelRAM(void) { - delete lblChipmem; - delete sldChipmem; - delete lblChipsize; - delete lblSlowmem; - delete sldSlowmem; - delete lblSlowsize; - delete lblFastmem; - delete sldFastmem; - delete lblFastsize; - delete lblZ3mem; - delete sldZ3mem; - delete lblZ3size; - delete lblGfxmem; - delete sldGfxmem; - delete lblGfxsize; - delete grpRAM; - delete memorySliderActionListener; + delete lblChipmem; + delete sldChipmem; + delete lblChipsize; + delete lblSlowmem; + delete sldSlowmem; + delete lblSlowsize; + delete lblFastmem; + delete sldFastmem; + delete lblFastsize; + delete lblZ3mem; + delete sldZ3mem; + delete lblZ3size; + delete lblGfxmem; + delete sldGfxmem; + delete lblGfxsize; + delete grpRAM; + delete memorySliderActionListener; } void RefreshPanelRAM(void) { - int i; - - for(i=0; i<5; ++i) - { - if(changed_prefs.chipmem_size == ChipMem_values[i]) - { - sldChipmem->setValue(i); - lblChipsize->setCaption(ChipMem_list[i]); - break; - } - } + int i; - for(i=0; i<5; ++i) - { - if(changed_prefs.bogomem_size == SlowMem_values[i]) - { - sldSlowmem->setValue(i); - lblSlowsize->setCaption(SlowMem_list[i]); - break; - } - } + for (i = 0; i < 5; ++i) + { + if (changed_prefs.chipmem_size == ChipMem_values[i]) + { + sldChipmem->setValue(i); + lblChipsize->setCaption(ChipMem_list[i]); + break; + } + } - for(i=0; i<5; ++i) - { - if(changed_prefs.fastmem_size == FastMem_values[i]) - { - sldFastmem->setValue(i); - lblFastsize->setCaption(FastMem_list[i]); - break; - } - } + for (i = 0; i < 5; ++i) + { + if (changed_prefs.bogomem_size == SlowMem_values[i]) + { + sldSlowmem->setValue(i); + lblSlowsize->setCaption(SlowMem_list[i]); + break; + } + } - for(i=0; i<9; ++i) - { - if(changed_prefs.z3fastmem_size == FastMem_values[i]) - { - sldZ3mem->setValue(i); - lblZ3size->setCaption(FastMem_list[i]); - break; - } - } - sldZ3mem->setEnabled(!changed_prefs.address_space_24); + for (i = 0; i < 5; ++i) + { + if (changed_prefs.fastmem_size == FastMem_values[i]) + { + sldFastmem->setValue(i); + lblFastsize->setCaption(FastMem_list[i]); + break; + } + } - for(i=0; i<6; ++i) - { - if(changed_prefs.rtgmem_size == FastMem_values[i]) - { - sldGfxmem->setValue(i); - lblGfxsize->setCaption(FastMem_list[i]); - break; - } - } - sldGfxmem->setEnabled(!changed_prefs.address_space_24); + for (i = 0; i < 9; ++i) + { + if (changed_prefs.z3fastmem_size == FastMem_values[i]) + { + sldZ3mem->setValue(i); + lblZ3size->setCaption(FastMem_list[i]); + break; + } + } + sldZ3mem->setEnabled(!changed_prefs.address_space_24); + + for (i = 0; i < 6; ++i) + { + if (changed_prefs.rtgmem_size == FastMem_values[i]) + { + sldGfxmem->setValue(i); + lblGfxsize->setCaption(FastMem_list[i]); + break; + } + } + sldGfxmem->setEnabled(!changed_prefs.address_space_24); } diff --git a/src/od-pandora/gui/SelectFile.cpp b/src/od-pandora/gui/SelectFile.cpp index 1c0b7ba4..f61ac801 100644 --- a/src/od-pandora/gui/SelectFile.cpp +++ b/src/od-pandora/gui/SelectFile.cpp @@ -19,7 +19,7 @@ #define DIALOG_WIDTH 520 #define DIALOG_HEIGHT 400 -#ifdef RASPBERRY +#if defined(RASPBERRY) || defined(ANDROID) #define FILE_SELECT_KEEP_POSITION #endif @@ -43,323 +43,323 @@ static gcn::TextField *txtFilename; class SelectFileListModel : public gcn::ListModel { - std::vector dirs; - std::vector files; + std::vector dirs; + std::vector files; - public: - SelectFileListModel(const char * path) - { - changeDir(path); - } - - int getNumberOfElements() - { - return dirs.size() + files.size(); - } - - std::string getElementAt(int i) - { - if(i >= dirs.size() + files.size() || i < 0) - return "---"; - if(i < dirs.size()) - return dirs[i]; - return files[i - dirs.size()]; - } - - void changeDir(const char *path) - { - ReadDirectory(path, &dirs, &files); - if(dirs.size() == 0) - dirs.push_back(".."); - FilterFiles(&files, filefilter); - } +public: + SelectFileListModel(const char * path) + { + changeDir(path); + } - bool isDir(int i) - { - return (i < dirs.size()); - } + int getNumberOfElements() + { + return dirs.size() + files.size(); + } + + std::string getElementAt(int i) + { + if (i >= dirs.size() + files.size() || i < 0) + return "---"; + if (i < dirs.size()) + return dirs[i]; + return files[i - dirs.size()]; + } + + void changeDir(const char *path) + { + ReadDirectory(path, &dirs, &files); + if (dirs.size() == 0) + dirs.push_back(".."); + FilterFiles(&files, filefilter); + } + + bool isDir(int i) + { + return (i < dirs.size()); + } }; static SelectFileListModel *fileList; class FileButtonActionListener : public gcn::ActionListener { - public: - void action(const gcn::ActionEvent& actionEvent) - { - if (actionEvent.getSource() == cmdOK) - { - int selected_item; - selected_item = lstFiles->getSelected(); - if(createNew) - { - char tmp[MAX_PATH]; - if(txtFilename->getText().length() <= 0) - return; - strcpy(tmp, workingDir); - strcat(tmp, "/"); - strcat(tmp, txtFilename->getText().c_str()); - if(strstr(tmp, filefilter[0]) == NULL) - strcat(tmp, filefilter[0]); - if(my_existsfile(tmp) == 1) - return; // File already exists - strcpy(workingDir, tmp); - dialogResult = true; - } - else - { - if(fileList->isDir(selected_item)) - return; // Directory selected -> Ok not possible - strcat(workingDir, "/"); - strcat(workingDir, fileList->getElementAt(selected_item).c_str()); - dialogResult = true; - } - } - dialogFinished = true; - } +public: + void action(const gcn::ActionEvent& actionEvent) + { + if (actionEvent.getSource() == cmdOK) + { + int selected_item; + selected_item = lstFiles->getSelected(); + if (createNew) + { + char tmp[MAX_PATH]; + if (txtFilename->getText().length() <= 0) + return; + strcpy(tmp, workingDir); + strcat(tmp, "/"); + strcat(tmp, txtFilename->getText().c_str()); + if (strstr(tmp, filefilter[0]) == NULL) + strcat(tmp, filefilter[0]); + if (my_existsfile(tmp) == 1) + return; // File already exists + strcpy(workingDir, tmp); + dialogResult = true; + } + else + { + if (fileList->isDir(selected_item)) + return; // Directory selected -> Ok not possible + strcat(workingDir, "/"); + strcat(workingDir, fileList->getElementAt(selected_item).c_str()); + dialogResult = true; + } + } + dialogFinished = true; + } }; static FileButtonActionListener* fileButtonActionListener; -static void checkfoldername (char *current) +static void checkfoldername(char *current) { char *ptr; - char actualpath [MAX_PATH]; + char actualpath[MAX_PATH]; DIR *dir; - + if (dir = opendir(current)) - { - fileList->changeDir(current); - ptr = realpath(current, actualpath); - strcpy(workingDir, ptr); - closedir(dir); + { + fileList->changeDir(current); + ptr = realpath(current, actualpath); + strcpy(workingDir, ptr); + closedir(dir); } - else - strcpy(workingDir, start_path_data); - txtCurrent->setText(workingDir); + else + strcpy(workingDir, start_path_data); + txtCurrent->setText(workingDir); } static void checkfilename(char *current) { - char actfile[MAX_PATH]; - extractFileName(current, actfile); - for(int i=0; igetNumberOfElements(); ++i) - { - if(!fileList->isDir(i) && !strcasecmp(fileList->getElementAt(i).c_str(), actfile)) - { - lstFiles->setSelected(i); - selectedOnStart = i; - break; - } - } + char actfile[MAX_PATH]; + extractFileName(current, actfile); + for (int i = 0; i < fileList->getNumberOfElements(); ++i) + { + if (!fileList->isDir(i) && !strcasecmp(fileList->getElementAt(i).c_str(), actfile)) + { + lstFiles->setSelected(i); + selectedOnStart = i; + break; + } + } } class SelectFileActionListener : public gcn::ActionListener { - public: - void action(const gcn::ActionEvent& actionEvent) - { - int selected_item; - char foldername[256] = ""; +public: + void action(const gcn::ActionEvent& actionEvent) + { + int selected_item; + char foldername[256] = ""; - selected_item = lstFiles->getSelected(); - strcpy(foldername, workingDir); - strcat(foldername, "/"); - strcat(foldername, fileList->getElementAt(selected_item).c_str()); - if(fileList->isDir(selected_item)) - checkfoldername(foldername); - else if(!createNew) - { - strncpy(workingDir, foldername, sizeof(workingDir)); - dialogResult = true; - dialogFinished = true; - } - } + selected_item = lstFiles->getSelected(); + strcpy(foldername, workingDir); + strcat(foldername, "/"); + strcat(foldername, fileList->getElementAt(selected_item).c_str()); + if (fileList->isDir(selected_item)) + checkfoldername(foldername); + else if (!createNew) + { + strncpy(workingDir, foldername, sizeof(workingDir)); + dialogResult = true; + dialogFinished = true; + } + } }; static SelectFileActionListener* selectFileActionListener; static void InitSelectFile(const char *title) { - wndSelectFile = new gcn::Window("Load"); - wndSelectFile->setSize(DIALOG_WIDTH, DIALOG_HEIGHT); - wndSelectFile->setPosition((GUI_WIDTH - DIALOG_WIDTH) / 2, (GUI_HEIGHT - DIALOG_HEIGHT) / 2); - wndSelectFile->setBaseColor(gui_baseCol + 0x202020); - wndSelectFile->setCaption(title); - wndSelectFile->setTitleBarHeight(TITLEBAR_HEIGHT); - - fileButtonActionListener = new FileButtonActionListener(); - - cmdOK = new gcn::Button("Ok"); - cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); - cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10); - cmdOK->setBaseColor(gui_baseCol + 0x202020); - cmdOK->addActionListener(fileButtonActionListener); - - cmdCancel = new gcn::Button("Cancel"); - cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); - cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10); - cmdCancel->setBaseColor(gui_baseCol + 0x202020); - cmdCancel->addActionListener(fileButtonActionListener); + wndSelectFile = new gcn::Window("Load"); + wndSelectFile->setSize(DIALOG_WIDTH, DIALOG_HEIGHT); + wndSelectFile->setPosition((GUI_WIDTH - DIALOG_WIDTH) / 2, (GUI_HEIGHT - DIALOG_HEIGHT) / 2); + wndSelectFile->setBaseColor(gui_baseCol + 0x202020); + wndSelectFile->setCaption(title); + wndSelectFile->setTitleBarHeight(TITLEBAR_HEIGHT); - txtCurrent = new gcn::TextField(); - txtCurrent->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, TEXTFIELD_HEIGHT); - txtCurrent->setPosition(DISTANCE_BORDER, 10); - txtCurrent->setEnabled(false); + fileButtonActionListener = new FileButtonActionListener(); - selectFileActionListener = new SelectFileActionListener(); - fileList = new SelectFileListModel("."); + cmdOK = new gcn::Button("Ok"); + cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); + cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10); + cmdOK->setBaseColor(gui_baseCol + 0x202020); + cmdOK->addActionListener(fileButtonActionListener); - lstFiles = new gcn::ListBox(fileList); - lstFiles->setSize(800, 252); - lstFiles->setBaseColor(gui_baseCol); - lstFiles->setWrappingEnabled(true); - lstFiles->addActionListener(selectFileActionListener); - - scrAreaFiles = new gcn::ScrollArea(lstFiles); - scrAreaFiles->setFrameSize(1); - scrAreaFiles->setPosition(DISTANCE_BORDER, 10 + TEXTFIELD_HEIGHT + 10); - scrAreaFiles->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, 272); - scrAreaFiles->setScrollbarWidth(20); - scrAreaFiles->setBaseColor(gui_baseCol + 0x202020); + cmdCancel = new gcn::Button("Cancel"); + cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); + cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10); + cmdCancel->setBaseColor(gui_baseCol + 0x202020); + cmdCancel->addActionListener(fileButtonActionListener); - if(createNew) - { - scrAreaFiles->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, 272 - TEXTFIELD_HEIGHT - DISTANCE_NEXT_Y); - lblFilename = new gcn::Label("Filename:"); - lblFilename->setSize(80, LABEL_HEIGHT); - lblFilename->setAlignment(gcn::Graphics::LEFT); - lblFilename->setPosition(DISTANCE_BORDER, scrAreaFiles->getY() + scrAreaFiles->getHeight() + DISTANCE_NEXT_Y); - txtFilename = new gcn::TextField(); - txtFilename->setSize(120, TEXTFIELD_HEIGHT); - txtFilename->setId("Filename"); - txtFilename->setPosition(lblFilename->getX() + lblFilename->getWidth() + DISTANCE_NEXT_X, lblFilename->getY()); - - wndSelectFile->add(lblFilename); - wndSelectFile->add(txtFilename); - } - - wndSelectFile->add(cmdOK); - wndSelectFile->add(cmdCancel); - wndSelectFile->add(txtCurrent); - wndSelectFile->add(scrAreaFiles); - - gui_top->add(wndSelectFile); - - lstFiles->requestFocus(); - lstFiles->setSelected(0); - wndSelectFile->requestModalFocus(); + txtCurrent = new gcn::TextField(); + txtCurrent->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, TEXTFIELD_HEIGHT); + txtCurrent->setPosition(DISTANCE_BORDER, 10); + txtCurrent->setEnabled(false); + + selectFileActionListener = new SelectFileActionListener(); + fileList = new SelectFileListModel("."); + + lstFiles = new gcn::ListBox(fileList); + lstFiles->setSize(800, 252); + lstFiles->setBaseColor(gui_baseCol); + lstFiles->setWrappingEnabled(true); + lstFiles->addActionListener(selectFileActionListener); + + scrAreaFiles = new gcn::ScrollArea(lstFiles); + scrAreaFiles->setFrameSize(1); + scrAreaFiles->setPosition(DISTANCE_BORDER, 10 + TEXTFIELD_HEIGHT + 10); + scrAreaFiles->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, 272); + scrAreaFiles->setScrollbarWidth(20); + scrAreaFiles->setBaseColor(gui_baseCol + 0x202020); + + if (createNew) + { + scrAreaFiles->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, 272 - TEXTFIELD_HEIGHT - DISTANCE_NEXT_Y); + lblFilename = new gcn::Label("Filename:"); + lblFilename->setSize(80, LABEL_HEIGHT); + lblFilename->setAlignment(gcn::Graphics::LEFT); + lblFilename->setPosition(DISTANCE_BORDER, scrAreaFiles->getY() + scrAreaFiles->getHeight() + DISTANCE_NEXT_Y); + txtFilename = new gcn::TextField(); + txtFilename->setSize(120, TEXTFIELD_HEIGHT); + txtFilename->setId("Filename"); + txtFilename->setPosition(lblFilename->getX() + lblFilename->getWidth() + DISTANCE_NEXT_X, lblFilename->getY()); + + wndSelectFile->add(lblFilename); + wndSelectFile->add(txtFilename); + } + + wndSelectFile->add(cmdOK); + wndSelectFile->add(cmdCancel); + wndSelectFile->add(txtCurrent); + wndSelectFile->add(scrAreaFiles); + + gui_top->add(wndSelectFile); + + lstFiles->requestFocus(); + lstFiles->setSelected(0); + wndSelectFile->requestModalFocus(); } static void ExitSelectFile(void) { - wndSelectFile->releaseModalFocus(); - gui_top->remove(wndSelectFile); + wndSelectFile->releaseModalFocus(); + gui_top->remove(wndSelectFile); - delete cmdOK; - delete cmdCancel; - delete fileButtonActionListener; - - delete txtCurrent; - delete lstFiles; - delete scrAreaFiles; - delete selectFileActionListener; - delete fileList; - if(createNew) - { - delete lblFilename; - delete txtFilename; - } - - delete wndSelectFile; + delete cmdOK; + delete cmdCancel; + delete fileButtonActionListener; + + delete txtCurrent; + delete lstFiles; + delete scrAreaFiles; + delete selectFileActionListener; + delete fileList; + if (createNew) + { + delete lblFilename; + delete txtFilename; + } + + delete wndSelectFile; } static void SelectFileLoop(void) { - while(!dialogFinished) - { - SDL_Event event; - while(SDL_PollEvent(&event)) - { - if (event.type == SDL_KEYDOWN) - { - switch(event.key.keysym.sym) - { - case SDLK_ESCAPE: - dialogFinished = true; - break; - - case SDLK_LEFT: - { - gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler(); - gcn::Widget* activeWidget = focusHdl->getFocused(); - if(activeWidget == lstFiles) - cmdCancel->requestFocus(); - else if(activeWidget == cmdCancel) - cmdOK->requestFocus(); - else if(activeWidget == cmdOK) - if(createNew) - txtFilename->requestFocus(); - else - lstFiles->requestFocus(); - else if(activeWidget == txtFilename) - lstFiles->requestFocus(); - continue; - } - break; - - case SDLK_RIGHT: - { - gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler(); - gcn::Widget* activeWidget = focusHdl->getFocused(); - if(activeWidget == lstFiles) - if(createNew) - txtFilename->requestFocus(); - else - cmdOK->requestFocus(); - else if(activeWidget == txtFilename) - cmdOK->requestFocus(); - else if(activeWidget == cmdCancel) - lstFiles->requestFocus(); - else if(activeWidget == cmdOK) - cmdCancel->requestFocus(); - continue; - } - break; + while (!dialogFinished) + { + SDL_Event event; + while (SDL_PollEvent(&event)) + { + if (event.type == SDL_KEYDOWN) + { + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + dialogFinished = true; + break; - case SDLK_PAGEDOWN: - case SDLK_HOME: - event.key.keysym.sym = SDLK_RETURN; - gui_input->pushInput(event); // Fire key down - event.type = SDL_KEYUP; // and the key up - break; - } - } + case SDLK_LEFT: + { + gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler(); + gcn::Widget* activeWidget = focusHdl->getFocused(); + if (activeWidget == lstFiles) + cmdCancel->requestFocus(); + else if (activeWidget == cmdCancel) + cmdOK->requestFocus(); + else if (activeWidget == cmdOK) + if (createNew) + txtFilename->requestFocus(); + else + lstFiles->requestFocus(); + else if (activeWidget == txtFilename) + lstFiles->requestFocus(); + continue; + } + break; - //------------------------------------------------- - // Send event to guichan-controls - //------------------------------------------------- - gui_input->pushInput(event); - } + case SDLK_RIGHT: + { + gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler(); + gcn::Widget* activeWidget = focusHdl->getFocused(); + if (activeWidget == lstFiles) + if (createNew) + txtFilename->requestFocus(); + else + cmdOK->requestFocus(); + else if (activeWidget == txtFilename) + cmdOK->requestFocus(); + else if (activeWidget == cmdCancel) + lstFiles->requestFocus(); + else if (activeWidget == cmdOK) + cmdCancel->requestFocus(); + continue; + } + break; - // Now we let the Gui object perform its logic. - uae_gui->logic(); - // Now we let the Gui object draw itself. - uae_gui->draw(); - // Finally we update the screen. - wait_for_vsync(); - SDL_Flip(gui_screen); - - if(!dialogCreated) - { - dialogCreated = true; - if(selectedOnStart >= 0) - scrAreaFiles->setVerticalScrollAmount(selectedOnStart * 19); - } - } + case SDLK_PAGEDOWN: + case SDLK_HOME: + event.key.keysym.sym = SDLK_RETURN; + gui_input->pushInput(event); // Fire key down + event.type = SDL_KEYUP; // and the key up + break; + } + } + + //------------------------------------------------- + // Send event to guichan-controls + //------------------------------------------------- + gui_input->pushInput(event); + } + + // Now we let the Gui object perform its logic. + uae_gui->logic(); + // Now we let the Gui object draw itself. + uae_gui->draw(); + // Finally we update the screen. + wait_for_vsync(); + SDL_Flip(gui_screen); + + if (!dialogCreated) + { + dialogCreated = true; + if (selectedOnStart >= 0) + scrAreaFiles->setVerticalScrollAmount(selectedOnStart * 19); + } + } } #ifdef FILE_SELECT_KEEP_POSITION @@ -368,46 +368,47 @@ static int Already_init = 0; bool SelectFile(const char *title, char *value, const char *filter[], bool create) { - dialogResult = false; - dialogFinished = false; - createNew = create; - filefilter = filter; - dialogCreated = false; - selectedOnStart = -1; + dialogResult = false; + dialogFinished = false; + createNew = create; + filefilter = filter; + dialogCreated = false; + selectedOnStart = -1; - #ifdef FILE_SELECT_KEEP_POSITION - if (Already_init == 0) - { - InitSelectFile(title); - Already_init = 1; - } else - { - strncpy(value,workingDir,MAX_PATH); - gui_top->add(wndSelectFile); - wndSelectFile->setCaption(title); - wndSelectFile->requestModalFocus(); - wndSelectFile->setVisible(true); - gui_top->moveToTop(wndSelectFile); - } - #else - InitSelectFile(title); - #endif - - extractPath(value, workingDir); - checkfoldername(workingDir); - checkfilename(value); - SelectFileLoop(); #ifdef FILE_SELECT_KEEP_POSITION - wndSelectFile->releaseModalFocus(); - wndSelectFile->setVisible(false); + if (Already_init == 0) + { + InitSelectFile(title); + Already_init = 1; + } + else + { + strncpy(value, workingDir, MAX_PATH); + gui_top->add(wndSelectFile); + wndSelectFile->setCaption(title); + wndSelectFile->requestModalFocus(); + wndSelectFile->setVisible(true); + gui_top->moveToTop(wndSelectFile); + } #else - ExitSelectFile(); + InitSelectFile(title); #endif - if(dialogResult) - strncpy(value, workingDir, MAX_PATH); + extractPath(value, workingDir); + checkfoldername(workingDir); + checkfilename(value); + + SelectFileLoop(); #ifdef FILE_SELECT_KEEP_POSITION - else - strncpy(workingDir,value, MAX_PATH); + wndSelectFile->releaseModalFocus(); + wndSelectFile->setVisible(false); +#else + ExitSelectFile(); #endif - return dialogResult; + if (dialogResult) + strncpy(value, workingDir, MAX_PATH); +#ifdef FILE_SELECT_KEEP_POSITION + else + strncpy(workingDir, value, MAX_PATH); +#endif + return dialogResult; } diff --git a/src/od-pandora/gui/SelectFolder.cpp b/src/od-pandora/gui/SelectFolder.cpp index 18c23491..c34163d4 100644 --- a/src/od-pandora/gui/SelectFolder.cpp +++ b/src/od-pandora/gui/SelectFolder.cpp @@ -17,6 +17,7 @@ #define DIALOG_WIDTH 520 #define DIALOG_HEIGHT 400 +std::string volName; static bool dialogResult = false; static bool dialogFinished = false; static char workingDir[MAX_PATH]; @@ -31,84 +32,85 @@ static gcn::TextField *txtCurrent; class ButtonActionListener : public gcn::ActionListener { - public: - void action(const gcn::ActionEvent& actionEvent) - { - if (actionEvent.getSource() == cmdOK) - { - dialogResult = true; - } - dialogFinished = true; - } +public: + void action(const gcn::ActionEvent& actionEvent) + { + if (actionEvent.getSource() == cmdOK) + { + dialogResult = true; + } + dialogFinished = true; + } }; static ButtonActionListener* buttonActionListener; class DirListModel : public gcn::ListModel { - std::vector dirs; + std::vector dirs; - public: - DirListModel(const char * path) - { - changeDir(path); - } - - int getNumberOfElements() - { - return dirs.size(); - } - - std::string getElementAt(int i) - { - if(i >= dirs.size() || i < 0) - return "---"; - return dirs[i]; - } - - void changeDir(const char *path) - { - ReadDirectory(path, &dirs, NULL); - if(dirs.size() == 0) - dirs.push_back(".."); - } +public: + DirListModel(const char * path) + { + changeDir(path); + } + + int getNumberOfElements() + { + return dirs.size(); + } + + std::string getElementAt(int i) + { + if (i >= dirs.size() || i < 0) + return "---"; + return dirs[i]; + } + + void changeDir(const char *path) + { + ReadDirectory(path, &dirs, NULL); + if (dirs.size() == 0) + dirs.push_back(".."); + } }; static DirListModel dirList("."); -static void checkfoldername (char *current) +static void checkfoldername(char *current) { char *ptr; - char actualpath [PATH_MAX]; + char actualpath[PATH_MAX]; DIR *dir; - + if (dir = opendir(current)) - { - dirList = current; - ptr = realpath(current, actualpath); - strcpy(workingDir, ptr); - closedir(dir); + { + dirList = current; + ptr = realpath(current, actualpath); + strcpy(workingDir, ptr); + closedir(dir); } - else - strcpy(workingDir, start_path_data); - txtCurrent->setText(workingDir); + else + strcpy(workingDir, start_path_data); + txtCurrent->setText(workingDir); } class ListBoxActionListener : public gcn::ActionListener { - public: - void action(const gcn::ActionEvent& actionEvent) - { - int selected_item; - char foldername[256] = ""; +public: + void action(const gcn::ActionEvent& actionEvent) + { + int selected_item; + char foldername[256] = ""; - selected_item = lstFolders->getSelected(); - strcpy(foldername, workingDir); - strcat(foldername, "/"); - strcat(foldername, dirList.getElementAt(selected_item).c_str()); - checkfoldername(foldername); - } + selected_item = lstFolders->getSelected(); + strcpy(foldername, workingDir); + strcat(foldername, "/"); + strcat(foldername, dirList.getElementAt(selected_item).c_str()); + volName = dirList.getElementAt(selected_item).c_str(); + checkfoldername(foldername); + } }; static ListBoxActionListener* listBoxActionListener; @@ -117,158 +119,158 @@ static void InitSelectFolder(const char *title) { wndSelectFolder = new gcn::Window("Load"); wndSelectFolder->setSize(DIALOG_WIDTH, DIALOG_HEIGHT); - wndSelectFolder->setPosition((GUI_WIDTH - DIALOG_WIDTH) / 2, (GUI_HEIGHT - DIALOG_HEIGHT) / 2); - wndSelectFolder->setBaseColor(gui_baseCol + 0x202020); - wndSelectFolder->setCaption(title); - wndSelectFolder->setTitleBarHeight(TITLEBAR_HEIGHT); - - buttonActionListener = new ButtonActionListener(); - + wndSelectFolder->setPosition((GUI_WIDTH - DIALOG_WIDTH) / 2, (GUI_HEIGHT - DIALOG_HEIGHT) / 2); + wndSelectFolder->setBaseColor(gui_baseCol + 0x202020); + wndSelectFolder->setCaption(title); + wndSelectFolder->setTitleBarHeight(TITLEBAR_HEIGHT); + + buttonActionListener = new ButtonActionListener(); + cmdOK = new gcn::Button("Ok"); cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10); - cmdOK->setBaseColor(gui_baseCol + 0x202020); - cmdOK->addActionListener(buttonActionListener); - + cmdOK->setBaseColor(gui_baseCol + 0x202020); + cmdOK->addActionListener(buttonActionListener); + cmdCancel = new gcn::Button("Cancel"); cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10); - cmdCancel->setBaseColor(gui_baseCol + 0x202020); - cmdCancel->addActionListener(buttonActionListener); + cmdCancel->setBaseColor(gui_baseCol + 0x202020); + cmdCancel->addActionListener(buttonActionListener); - txtCurrent = new gcn::TextField(); - txtCurrent->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, TEXTFIELD_HEIGHT); - txtCurrent->setPosition(DISTANCE_BORDER, 10); - txtCurrent->setEnabled(false); + txtCurrent = new gcn::TextField(); + txtCurrent->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, TEXTFIELD_HEIGHT); + txtCurrent->setPosition(DISTANCE_BORDER, 10); + txtCurrent->setEnabled(false); - listBoxActionListener = new ListBoxActionListener(); - - lstFolders = new gcn::ListBox(&dirList); - lstFolders->setSize(800, 252); - lstFolders->setBaseColor(gui_baseCol); - lstFolders->setWrappingEnabled(true); - lstFolders->addActionListener(listBoxActionListener); - - scrAreaFolders = new gcn::ScrollArea(lstFolders); - scrAreaFolders->setFrameSize(1); - scrAreaFolders->setPosition(DISTANCE_BORDER, 10 + TEXTFIELD_HEIGHT + 10); - scrAreaFolders->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, 272); - scrAreaFolders->setScrollbarWidth(20); - scrAreaFolders->setBaseColor(gui_baseCol + 0x202020); - - wndSelectFolder->add(cmdOK); - wndSelectFolder->add(cmdCancel); - wndSelectFolder->add(txtCurrent); - wndSelectFolder->add(scrAreaFolders); - - gui_top->add(wndSelectFolder); - - lstFolders->requestFocus(); - lstFolders->setSelected(0); - wndSelectFolder->requestModalFocus(); + listBoxActionListener = new ListBoxActionListener(); + + lstFolders = new gcn::ListBox(&dirList); + lstFolders->setSize(800, 252); + lstFolders->setBaseColor(gui_baseCol); + lstFolders->setWrappingEnabled(true); + lstFolders->addActionListener(listBoxActionListener); + + scrAreaFolders = new gcn::ScrollArea(lstFolders); + scrAreaFolders->setFrameSize(1); + scrAreaFolders->setPosition(DISTANCE_BORDER, 10 + TEXTFIELD_HEIGHT + 10); + scrAreaFolders->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, 272); + scrAreaFolders->setScrollbarWidth(20); + scrAreaFolders->setBaseColor(gui_baseCol + 0x202020); + + wndSelectFolder->add(cmdOK); + wndSelectFolder->add(cmdCancel); + wndSelectFolder->add(txtCurrent); + wndSelectFolder->add(scrAreaFolders); + + gui_top->add(wndSelectFolder); + + lstFolders->requestFocus(); + lstFolders->setSelected(0); + wndSelectFolder->requestModalFocus(); } static void ExitSelectFolder(void) { - wndSelectFolder->releaseModalFocus(); - gui_top->remove(wndSelectFolder); + wndSelectFolder->releaseModalFocus(); + gui_top->remove(wndSelectFolder); - delete cmdOK; - delete cmdCancel; - delete buttonActionListener; - - delete txtCurrent; - delete lstFolders; - delete scrAreaFolders; - delete listBoxActionListener; - - delete wndSelectFolder; + delete cmdOK; + delete cmdCancel; + delete buttonActionListener; + + delete txtCurrent; + delete lstFolders; + delete scrAreaFolders; + delete listBoxActionListener; + + delete wndSelectFolder; } static void SelectFolderLoop(void) { - while(!dialogFinished) - { - SDL_Event event; - while(SDL_PollEvent(&event)) - { - if (event.type == SDL_KEYDOWN) - { - switch(event.key.keysym.sym) - { - case SDLK_ESCAPE: - dialogFinished = true; - break; - - case SDLK_LEFT: - { - gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler(); - gcn::Widget* activeWidget = focusHdl->getFocused(); - if(activeWidget == lstFolders) - cmdCancel->requestFocus(); - else if(activeWidget == cmdCancel) - cmdOK->requestFocus(); - else if(activeWidget == cmdOK) - lstFolders->requestFocus(); - continue; - } - break; - - case SDLK_RIGHT: - { - gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler(); - gcn::Widget* activeWidget = focusHdl->getFocused(); - if(activeWidget == lstFolders) - cmdOK->requestFocus(); - else if(activeWidget == cmdCancel) - lstFolders->requestFocus(); - else if(activeWidget == cmdOK) - cmdCancel->requestFocus(); - continue; - } - break; + while (!dialogFinished) + { + SDL_Event event; + while (SDL_PollEvent(&event)) + { + if (event.type == SDL_KEYDOWN) + { + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + dialogFinished = true; + break; - case SDLK_PAGEDOWN: - case SDLK_HOME: - event.key.keysym.sym = SDLK_RETURN; - gui_input->pushInput(event); // Fire key down - event.type = SDL_KEYUP; // and the key up - break; - } - } + case SDLK_LEFT: + { + gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler(); + gcn::Widget* activeWidget = focusHdl->getFocused(); + if (activeWidget == lstFolders) + cmdCancel->requestFocus(); + else if (activeWidget == cmdCancel) + cmdOK->requestFocus(); + else if (activeWidget == cmdOK) + lstFolders->requestFocus(); + continue; + } + break; - //------------------------------------------------- - // Send event to guichan-controls - //------------------------------------------------- - gui_input->pushInput(event); - } + case SDLK_RIGHT: + { + gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler(); + gcn::Widget* activeWidget = focusHdl->getFocused(); + if (activeWidget == lstFolders) + cmdOK->requestFocus(); + else if (activeWidget == cmdCancel) + lstFolders->requestFocus(); + else if (activeWidget == cmdOK) + cmdCancel->requestFocus(); + continue; + } + break; - // Now we let the Gui object perform its logic. - uae_gui->logic(); - // Now we let the Gui object draw itself. - uae_gui->draw(); - // Finally we update the screen. - wait_for_vsync(); - SDL_Flip(gui_screen); - } + case SDLK_PAGEDOWN: + case SDLK_HOME: + event.key.keysym.sym = SDLK_RETURN; + gui_input->pushInput(event); // Fire key down + event.type = SDL_KEYUP; // and the key up + break; + } + } + + //------------------------------------------------- + // Send event to guichan-controls + //------------------------------------------------- + gui_input->pushInput(event); + } + + // Now we let the Gui object perform its logic. + uae_gui->logic(); + // Now we let the Gui object draw itself. + uae_gui->draw(); + // Finally we update the screen. + wait_for_vsync(); + SDL_Flip(gui_screen); + } } bool SelectFolder(const char *title, char *value) { - dialogResult = false; - dialogFinished = false; - InitSelectFolder(title); - checkfoldername(value); - SelectFolderLoop(); - ExitSelectFolder(); - if(dialogResult) - { - strncpy(value, workingDir, MAX_PATH); - if(value[strlen(value) - 1] != '/') - strcat(value, "/"); - } - return dialogResult; + dialogResult = false; + dialogFinished = false; + InitSelectFolder(title); + checkfoldername(value); + SelectFolderLoop(); + ExitSelectFolder(); + if (dialogResult) + { + strncpy(value, workingDir, MAX_PATH); + if (value[strlen(value) - 1] != '/') + strcat(value, "/"); + } + return dialogResult; } diff --git a/src/od-pandora/menu/menu_config.cpp b/src/od-pandora/menu/menu_config.cpp index 33d66900..22a96adc 100644 --- a/src/od-pandora/menu/menu_config.cpp +++ b/src/od-pandora/menu/menu_config.cpp @@ -24,281 +24,281 @@ static int presetModeId = 2; static void SetPresetMode(int mode, struct uae_prefs *p) { presetModeId = mode; - - switch(mode) + + switch (mode) { - case 0: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 768; - break; - - case 1: - p->gfx_size.height = 216; - p->gfx_size_fs.width = 716; - break; - - case 2: - p->gfx_size.height = 240; - p->gfx_size_fs.width = 640; - break; + case 0: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 768; + break; - case 3: - p->gfx_size.height = 256; - p->gfx_size_fs.width = 600; - break; - - case 4: - p->gfx_size.height = 262; - p->gfx_size_fs.width = 588; - break; - - case 5: - p->gfx_size.height = 270; - p->gfx_size_fs.width = 570; - break; - - case 6: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 640; - break; - - case 7: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 10: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 768; - break; - - case 11: - p->gfx_size.height = 216; - p->gfx_size_fs.width = 716; - break; - - case 12: - p->gfx_size.height = 240; - p->gfx_size_fs.width = 640; - break; + case 1: + p->gfx_size.height = 216; + p->gfx_size_fs.width = 716; + break; - case 13: - p->gfx_size.height = 256; - p->gfx_size_fs.width = 600; - break; - - case 14: - p->gfx_size.height = 262; - p->gfx_size_fs.width = 588; - break; - - case 15: - p->gfx_size.height = 270; - p->gfx_size_fs.width = 570; - break; - - case 16: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 640; - break; - - case 17: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; + case 2: + p->gfx_size.height = 240; + p->gfx_size_fs.width = 640; + break; - case 20: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 21: - p->gfx_size.height = 216; - p->gfx_size_fs.width = 784; - break; - - case 22: - p->gfx_size.height = 240; - p->gfx_size_fs.width = 704; - break; + case 3: + p->gfx_size.height = 256; + p->gfx_size_fs.width = 600; + break; - case 23: - p->gfx_size.height = 256; - p->gfx_size_fs.width = 660; - break; - - case 24: - p->gfx_size.height = 262; - p->gfx_size_fs.width = 640; - break; - - case 25: - p->gfx_size.height = 270; - p->gfx_size_fs.width = 624; - break; - - case 26: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 704; - break; - - case 27: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 30: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 31: - p->gfx_size.height = 216; - p->gfx_size_fs.width = 784; - break; - - case 32: - p->gfx_size.height = 240; - p->gfx_size_fs.width = 704; - break; + case 4: + p->gfx_size.height = 262; + p->gfx_size_fs.width = 588; + break; - case 33: - p->gfx_size.height = 256; - p->gfx_size_fs.width = 660; - break; - - case 34: - p->gfx_size.height = 262; - p->gfx_size_fs.width = 640; - break; - - case 35: - p->gfx_size.height = 270; - p->gfx_size_fs.width = 624; - break; - - case 36: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 704; - break; - - case 37: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 40: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 41: - p->gfx_size.height = 216; - p->gfx_size_fs.width = 800; - break; - - case 42: - p->gfx_size.height = 240; - p->gfx_size_fs.width = 768; - break; + case 5: + p->gfx_size.height = 270; + p->gfx_size_fs.width = 570; + break; - case 43: - p->gfx_size.height = 256; - p->gfx_size_fs.width = 720; - break; - - case 44: - p->gfx_size.height = 262; - p->gfx_size_fs.width = 704; - break; - - case 45: - p->gfx_size.height = 270; - p->gfx_size_fs.width = 684; - break; - - case 46: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 47: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; + case 6: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 640; + break; - case 50: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 51: - p->gfx_size.height = 216; - p->gfx_size_fs.width = 800; - break; - - case 52: - p->gfx_size.height = 240; - p->gfx_size_fs.width = 768; - break; + case 7: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; - case 53: - p->gfx_size.height = 256; - p->gfx_size_fs.width = 720; - break; - - case 54: - p->gfx_size.height = 262; - p->gfx_size_fs.width = 704; - break; - - case 55: - p->gfx_size.height = 270; - p->gfx_size_fs.width = 684; - break; - - case 56: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - case 57: - p->gfx_size.height = 200; - p->gfx_size_fs.width = 800; - break; - - default: - p->gfx_size.height = 240; - p->gfx_size_fs.width = 640; - presetModeId = 2; - break; + case 10: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 768; + break; + + case 11: + p->gfx_size.height = 216; + p->gfx_size_fs.width = 716; + break; + + case 12: + p->gfx_size.height = 240; + p->gfx_size_fs.width = 640; + break; + + case 13: + p->gfx_size.height = 256; + p->gfx_size_fs.width = 600; + break; + + case 14: + p->gfx_size.height = 262; + p->gfx_size_fs.width = 588; + break; + + case 15: + p->gfx_size.height = 270; + p->gfx_size_fs.width = 570; + break; + + case 16: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 640; + break; + + case 17: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 20: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 21: + p->gfx_size.height = 216; + p->gfx_size_fs.width = 784; + break; + + case 22: + p->gfx_size.height = 240; + p->gfx_size_fs.width = 704; + break; + + case 23: + p->gfx_size.height = 256; + p->gfx_size_fs.width = 660; + break; + + case 24: + p->gfx_size.height = 262; + p->gfx_size_fs.width = 640; + break; + + case 25: + p->gfx_size.height = 270; + p->gfx_size_fs.width = 624; + break; + + case 26: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 704; + break; + + case 27: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 30: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 31: + p->gfx_size.height = 216; + p->gfx_size_fs.width = 784; + break; + + case 32: + p->gfx_size.height = 240; + p->gfx_size_fs.width = 704; + break; + + case 33: + p->gfx_size.height = 256; + p->gfx_size_fs.width = 660; + break; + + case 34: + p->gfx_size.height = 262; + p->gfx_size_fs.width = 640; + break; + + case 35: + p->gfx_size.height = 270; + p->gfx_size_fs.width = 624; + break; + + case 36: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 704; + break; + + case 37: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 40: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 41: + p->gfx_size.height = 216; + p->gfx_size_fs.width = 800; + break; + + case 42: + p->gfx_size.height = 240; + p->gfx_size_fs.width = 768; + break; + + case 43: + p->gfx_size.height = 256; + p->gfx_size_fs.width = 720; + break; + + case 44: + p->gfx_size.height = 262; + p->gfx_size_fs.width = 704; + break; + + case 45: + p->gfx_size.height = 270; + p->gfx_size_fs.width = 684; + break; + + case 46: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 47: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 50: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 51: + p->gfx_size.height = 216; + p->gfx_size_fs.width = 800; + break; + + case 52: + p->gfx_size.height = 240; + p->gfx_size_fs.width = 768; + break; + + case 53: + p->gfx_size.height = 256; + p->gfx_size_fs.width = 720; + break; + + case 54: + p->gfx_size.height = 262; + p->gfx_size_fs.width = 704; + break; + + case 55: + p->gfx_size.height = 270; + p->gfx_size_fs.width = 684; + break; + + case 56: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + case 57: + p->gfx_size.height = 200; + p->gfx_size_fs.width = 800; + break; + + default: + p->gfx_size.height = 240; + p->gfx_size_fs.width = 640; + presetModeId = 2; + break; } - - switch(presetModeId / 10) + + switch (presetModeId / 10) { - case 0: - p->gfx_size.width = 320; - break; + case 0: + p->gfx_size.width = 320; + break; - case 1: - p->gfx_size.width = 640; - break; + case 1: + p->gfx_size.width = 640; + break; - case 2: - p->gfx_size.width = 352; - break; + case 2: + p->gfx_size.width = 352; + break; - case 3: - p->gfx_size.width = 704; - break; + case 3: + p->gfx_size.width = 704; + break; - case 4: - p->gfx_size.width = 384; - break; + case 4: + p->gfx_size.width = 384; + break; - case 5: - p->gfx_size.width = 768; - break; + case 5: + p->gfx_size.width = 768; + break; } } @@ -306,16 +306,16 @@ static void SetPresetMode(int mode, struct uae_prefs *p) static void SetDefaultMenuSettings(struct uae_prefs *p) { kickstart = 1; - + SetPresetMode(2, p); } -static void replace(char * str,char replace, char toreplace) +static void replace(char * str, char replace, char toreplace) { - while(*str) - { - if (*str==toreplace) *str=replace; + while (*str) + { + if (*str == toreplace) *str = replace; str++; } } @@ -323,12 +323,12 @@ static void replace(char * str,char replace, char toreplace) int create_configfilename(char *dest, char *basename, int fromDir) { - char *p; + char *p; p = basename + strlen(basename) - 1; - while (*p != '/') + while (*p != '/') p--; p++; - if(fromDir == 0) + if (fromDir == 0) { int len = strlen(p) + 1; char filename[len]; @@ -338,7 +338,7 @@ int create_configfilename(char *dest, char *basename, int fromDir) pch--; if (pch) { - *pch='\0'; + *pch = '\0'; snprintf(dest, 300, "%s/conf/%s.uae", start_path_data, filename); return 1; } @@ -348,7 +348,7 @@ int create_configfilename(char *dest, char *basename, int fromDir) snprintf(dest, 300, "%s/conf/%s.uae", start_path_data, p); return 1; } - + return 0; } @@ -356,309 +356,286 @@ int create_configfilename(char *dest, char *basename, int fromDir) const char *kickstarts_rom_names[] = { "kick12.rom\0", "kick13.rom\0", "kick20.rom\0", "kick31.rom\0", "aros-amiga-m68k-rom.bin\0" }; const char *extended_rom_names[] = { "\0", "\0", "\0", "\0", "aros-amiga-m68k-ext.bin\0" }; const char *kickstarts_names[] = { "KS ROM v1.2\0", "KS ROM v1.3\0", "KS ROM v2.05\0", "KS ROM v3.1\0", "\0" }; -#ifdef ANDROIDSDL +#ifdef ANDROID const char *af_kickstarts_rom_names[] = { "amiga-os-120.rom\0", "amiga-os-130.rom\0", "amiga-os-204.rom\0", "amiga-os-310-a1200.rom\0" }; #endif static bool CheckKickstart(struct uae_prefs *p) { - char kickpath[MAX_DPATH]; - int i; - - // Search via filename - fetch_rompath(kickpath, MAX_DPATH); - strncat(kickpath, kickstarts_rom_names[kickstart], MAX_DPATH); - for(i=0; iPath, kickpath)) - { - // Found it - strncpy(p->romfile, kickpath, sizeof(p->romfile)); - return true; - } - } + char kickpath[MAX_DPATH]; + int i; - // Search via name - if(strlen(kickstarts_names[kickstart]) > 0) - { - for(i=0; iName, kickstarts_names[kickstart], strlen(kickstarts_names[kickstart]))) - { - // Found it - strncpy(p->romfile, lstAvailableROMs[i]->Path, sizeof(p->romfile)); - return true; - } - } - } + // Search via filename + fetch_rompath(kickpath, MAX_DPATH); + strncat(kickpath, kickstarts_rom_names[kickstart], MAX_DPATH); + for (i = 0; i < lstAvailableROMs.size(); ++i) + { + if (!strcasecmp(lstAvailableROMs[i]->Path, kickpath)) + { + // Found it + strncpy(p->romfile, kickpath, sizeof(p->romfile)); + return true; + } + } - return false; + // Search via name + if (strlen(kickstarts_names[kickstart]) > 0) + { + for (i = 0; i < lstAvailableROMs.size(); ++i) + { + if (!strncasecmp(lstAvailableROMs[i]->Name, kickstarts_names[kickstart], strlen(kickstarts_names[kickstart]))) + { + // Found it + strncpy(p->romfile, lstAvailableROMs[i]->Path, sizeof(p->romfile)); + return true; + } + } + } + + return false; } // In this procedure, we use changed_prefs int loadconfig_old(struct uae_prefs *p, const char *orgpath) { - char path[MAX_PATH]; - int cpu_level; - - strcpy(path, orgpath); + char path[MAX_PATH]; + int cpu_level; + + strcpy(path, orgpath); char *ptr = strstr(path, ".uae"); - if(ptr > 0) - { - *(ptr + 1) = '\0'; - strcat(path, "conf"); - } - - FILE *f=fopen(path,"rt"); - if (!f){ - write_log ("No config file %s!\n",path); + if (ptr > 0) + { + *(ptr + 1) = '\0'; + strcat(path, "conf"); + } + + FILE *f = fopen(path, "rt"); + if (!f) + { + write_log("No config file %s!\n", path); return 0; } else { - // Set everthing to default and clear HD settings + // Set everthing to default and clear HD settings default_prefs(p, 0); SetDefaultMenuSettings(p); - + char filebuffer[256]; int dummy; - fscanf(f,"kickstart=%d\n",&kickstart); + fscanf(f, "kickstart=%d\n", &kickstart); #if defined(PANDORA) || defined(ANDROIDSDL) - fscanf(f,"scaling=%d\n",&dummy); + fscanf(f, "scaling=%d\n", &dummy); #else - fscanf(f,"scaling=%d\n",&mainMenu_enableHWscaling); + fscanf(f, "scaling=%d\n", &mainMenu_enableHWscaling); #endif - fscanf(f,"showstatus=%d\n", &p->leds_on_screen); - fscanf(f,"mousemultiplier=%d\n", &p->input_joymouse_multiplier); + fscanf(f, "showstatus=%d\n", &p->leds_on_screen); + fscanf(f, "mousemultiplier=%d\n", &p->input_joymouse_multiplier); p->input_joymouse_multiplier *= 10; #if defined(PANDORA) || defined(ANDROIDSDL) - fscanf(f,"systemclock=%d\n",&dummy); // mainMenu_throttle never changes -> removed - fscanf(f,"syncthreshold=%d\n", &dummy); // timeslice_mode never changes -> removed + fscanf(f, "systemclock=%d\n", &dummy); // mainMenu_throttle never changes -> removed + fscanf(f, "syncthreshold=%d\n", &dummy); // timeslice_mode never changes -> removed #else - fscanf(f,"systemclock=%d\n",&mainMenu_throttle); - fscanf(f,"syncthreshold=%d\n", ×lice_mode); + fscanf(f, "systemclock=%d\n", &mainMenu_throttle); + fscanf(f, "syncthreshold=%d\n", ×lice_mode); #endif - fscanf(f,"frameskip=%d\n", &p->gfx_framerate); - fscanf(f,"sound=%d\n",&p->produce_sound ); - if(p->produce_sound >= 10) - { - p->sound_stereo = 1; - p->produce_sound -= 10; - if(p->produce_sound > 0) - p->produce_sound += 1; - } - else - p->sound_stereo = 0; - fscanf(f,"soundrate=%d\n",&p->sound_freq); - fscanf(f,"autosave=%d\n", &dummy); - fscanf(f,"gp2xclock=%d\n", &dummy); - int joybuffer = 0; - fscanf(f,"joyconf=%d\n",&joybuffer); - fscanf(f,"autofireRate=%d\n",&p->input_autofire_linecnt); - p->input_autofire_linecnt = p->input_autofire_linecnt * 312; - fscanf(f,"autofire=%d\n", &dummy); - fscanf(f,"stylusOffset=%d\n",&dummy); - fscanf(f,"tapDelay=%d\n",&p->pandora_tapDelay); - fscanf(f,"scanlines=%d\n", &dummy); -#if defined(PANDORA) || defined(ANDROIDSDL) - fscanf(f,"ham=%d\n",&dummy); -#else - fscanf(f,"ham=%d\n",&mainMenu_ham); -#endif - fscanf(f,"enableScreenshots=%d\n", &dummy); - fscanf(f,"floppyspeed=%d\n",&p->floppy_speed); - fscanf(f,"drives=%d\n", &p->nr_floppies); - fscanf(f,"videomode=%d\n", &p->ntscmode); - if(p->ntscmode) - p->chipset_refreshrate = 60; + fscanf(f, "frameskip=%d\n", &p->gfx_framerate); + fscanf(f, "sound=%d\n", &p->produce_sound); + if (p->produce_sound >= 10) + { + p->sound_stereo = 1; + p->produce_sound -= 10; + if (p->produce_sound > 0) + p->produce_sound += 1; + } else - p->chipset_refreshrate = 50; - fscanf(f,"mainMenu_cpuSpeed=%d\n",&p->pandora_cpu_speed); - fscanf(f,"presetModeId=%d\n",&presetModeId); - fscanf(f,"moveX=%d\n", &p->pandora_horizontal_offset); - fscanf(f,"moveY=%d\n", &p->pandora_vertical_offset); - fscanf(f,"displayedLines=%d\n",&p->gfx_size.height); - fscanf(f,"screenWidth=%d\n", &p->gfx_size_fs.width); - fscanf(f,"cutLeft=%d\n", &dummy); - fscanf(f,"cutRight=%d\n", &dummy); - fscanf(f,"customControls=%d\n",&p->pandora_customControls); - fscanf(f,"custom_dpad=%d\n",&dummy); - fscanf(f,"custom_up=%d\n",&customControlMap[SDLK_UP]); - fscanf(f,"custom_down=%d\n",&customControlMap[SDLK_DOWN]); - fscanf(f,"custom_left=%d\n",&customControlMap[SDLK_LEFT]); - fscanf(f,"custom_right=%d\n",&customControlMap[SDLK_RIGHT]); - fscanf(f,"custom_A=%d\n",&customControlMap[SDLK_HOME]); - fscanf(f,"custom_B=%d\n",&customControlMap[SDLK_END]); - fscanf(f,"custom_X=%d\n",&customControlMap[SDLK_PAGEDOWN]); - fscanf(f,"custom_Y=%d\n",&customControlMap[SDLK_PAGEUP]); - fscanf(f,"custom_L=%d\n",&customControlMap[SDLK_RSHIFT]); - fscanf(f,"custom_R=%d\n",&customControlMap[SDLK_RCTRL]); - fscanf(f,"cpu=%d\n", &cpu_level); - if(cpu_level > 0) // M68000 - // Was old format - cpu_level = 2; // M68020 - fscanf(f,"chipset=%d\n", &p->chipset_mask); + p->sound_stereo = 0; + fscanf(f, "soundrate=%d\n", &p->sound_freq); + fscanf(f, "autosave=%d\n", &dummy); + fscanf(f, "gp2xclock=%d\n", &dummy); + int joybuffer = 0; + fscanf(f, "joyconf=%d\n", &joybuffer); + fscanf(f, "autofireRate=%d\n", &p->input_autofire_linecnt); + p->input_autofire_linecnt = p->input_autofire_linecnt * 312; + fscanf(f, "autofire=%d\n", &dummy); + fscanf(f, "stylusOffset=%d\n", &dummy); + fscanf(f, "tapDelay=%d\n", &p->pandora_tapDelay); + fscanf(f, "scanlines=%d\n", &dummy); +#if defined(PANDORA) || defined(ANDROIDSDL) + fscanf(f, "ham=%d\n", &dummy); +#else + fscanf(f, "ham=%d\n", &mainMenu_ham); +#endif + fscanf(f, "enableScreenshots=%d\n", &dummy); + fscanf(f, "floppyspeed=%d\n", &p->floppy_speed); + fscanf(f, "drives=%d\n", &p->nr_floppies); + fscanf(f, "videomode=%d\n", &p->ntscmode); + if (p->ntscmode) + p->chipset_refreshrate = 60; + else + p->chipset_refreshrate = 50; + fscanf(f, "mainMenu_cpuSpeed=%d\n", &p->pandora_cpu_speed); + fscanf(f, "presetModeId=%d\n", &presetModeId); + fscanf(f, "moveX=%d\n", &p->pandora_horizontal_offset); + fscanf(f, "moveY=%d\n", &p->pandora_vertical_offset); + fscanf(f, "displayedLines=%d\n", &p->gfx_size.height); + fscanf(f, "screenWidth=%d\n", &p->gfx_size_fs.width); + fscanf(f, "cutLeft=%d\n", &dummy); + fscanf(f, "cutRight=%d\n", &dummy); + fscanf(f, "customControls=%d\n", &p->pandora_customControls); + fscanf(f, "custom_dpad=%d\n", &dummy); + fscanf(f, "custom_up=%d\n", &customControlMap[SDLK_UP]); + fscanf(f, "custom_down=%d\n", &customControlMap[SDLK_DOWN]); + fscanf(f, "custom_left=%d\n", &customControlMap[SDLK_LEFT]); + fscanf(f, "custom_right=%d\n", &customControlMap[SDLK_RIGHT]); + fscanf(f, "custom_A=%d\n", &customControlMap[SDLK_HOME]); + fscanf(f, "custom_B=%d\n", &customControlMap[SDLK_END]); + fscanf(f, "custom_X=%d\n", &customControlMap[SDLK_PAGEDOWN]); + fscanf(f, "custom_Y=%d\n", &customControlMap[SDLK_PAGEUP]); + fscanf(f, "custom_L=%d\n", &customControlMap[SDLK_RSHIFT]); + fscanf(f, "custom_R=%d\n", &customControlMap[SDLK_RCTRL]); + fscanf(f, "cpu=%d\n", &cpu_level); + if (cpu_level > 0) // M68000 + // Was old format + cpu_level = 2; // M68020 + fscanf(f, "chipset=%d\n", &p->chipset_mask); p->immediate_blits = (p->chipset_mask & 0x100) == 0x100; - switch (p->chipset_mask & 0xff) - { - case 1: p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; break; - case 2: p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA; break; - default: p->chipset_mask = CSMASK_ECS_AGNUS; break; - } - fscanf(f,"cpu=%d\n", &p->m68k_speed); - if(p->m68k_speed < 0) - { - // New version of this option - p->m68k_speed = -p->m68k_speed; - } - else - { - // Old version (500 5T 1200 12T 12T2) - if(p->m68k_speed >= 2) - { - // 1200: set to 68020 with 14 MHz - cpu_level = 2; // M68020 - p->m68k_speed--; - if(p->m68k_speed > 2) - p->m68k_speed = 2; - } - } - if(p->m68k_speed == 1) - p->m68k_speed = M68K_SPEED_14MHZ_CYCLES; - if(p->m68k_speed == 2) - p->m68k_speed = M68K_SPEED_25MHZ_CYCLES; - p->cachesize = 0; - p->cpu_compatible = 0; - switch(cpu_level) - { - case 0: - p->cpu_model = 68000; - p->fpu_model = 0; - break; - case 1: - p->cpu_model = 68010; - p->fpu_model = 0; - break; - case 2: - p->cpu_model = 68020; - p->fpu_model = 0; - break; - case 3: - p->cpu_model = 68020; - p->fpu_model = 68881; - break; - case 4: - p->cpu_model = 68040; - p->fpu_model = 68881; - break; - } - - disk_eject(0); - disk_eject(1); - disk_eject(2); - disk_eject(3); - fscanf(f,"df0=%s\n",&filebuffer); - replace(filebuffer,' ','|'); - if(DISK_validate_filename(p, filebuffer, 0, NULL, NULL, NULL)) - strcpy(p->floppyslots[0].df, filebuffer); - else - p->floppyslots[0].df[0] = 0; + switch (p->chipset_mask & 0xff) + { + case 1: + p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; + break; + case 2: + p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA; + break; + default: + p->chipset_mask = CSMASK_ECS_AGNUS; + break; + } + fscanf(f, "cpu=%d\n", &p->m68k_speed); + if (p->m68k_speed < 0) + { + // New version of this option + p->m68k_speed = -p->m68k_speed; + } + else + { + // Old version (500 5T 1200 12T 12T2) + if (p->m68k_speed >= 2) + { + // 1200: set to 68020 with 14 MHz + cpu_level = 2; // M68020 + p->m68k_speed--; + if (p->m68k_speed > 2) + p->m68k_speed = 2; + } + } + if (p->m68k_speed == 1) + p->m68k_speed = M68K_SPEED_14MHZ_CYCLES; + if (p->m68k_speed == 2) + p->m68k_speed = M68K_SPEED_25MHZ_CYCLES; + p->cachesize = 0; + p->cpu_compatible = 0; + switch (cpu_level) + { + case 0: + p->cpu_model = 68000; + p->fpu_model = 0; + break; + case 1: + p->cpu_model = 68010; + p->fpu_model = 0; + break; + case 2: + p->cpu_model = 68020; + p->fpu_model = 0; + break; + case 3: + p->cpu_model = 68020; + p->fpu_model = 68881; + break; + case 4: + p->cpu_model = 68040; + p->fpu_model = 68881; + break; + } + + disk_eject(0); + disk_eject(1); + disk_eject(2); + disk_eject(3); + fscanf(f, "df0=%s\n", &filebuffer); + replace(filebuffer, ' ', '|'); + if (DISK_validate_filename(p, filebuffer, 0, NULL, NULL, NULL)) + strcpy(p->floppyslots[0].df, filebuffer); + else + p->floppyslots[0].df[0] = 0; disk_insert(0, filebuffer); - if(p->nr_floppies > 1) + if (p->nr_floppies > 1) { memset(filebuffer, 0, 256); - fscanf(f,"df1=%s\n",&filebuffer); - replace(filebuffer,' ','|'); - if(DISK_validate_filename(p, filebuffer, 0, NULL, NULL, NULL)) - strcpy(p->floppyslots[1].df, filebuffer); - else - p->floppyslots[1].df[0] = 0; + fscanf(f, "df1=%s\n", &filebuffer); + replace(filebuffer, ' ', '|'); + if (DISK_validate_filename(p, filebuffer, 0, NULL, NULL, NULL)) + strcpy(p->floppyslots[1].df, filebuffer); + else + p->floppyslots[1].df[0] = 0; disk_insert(1, filebuffer); } - if(p->nr_floppies > 2) + if (p->nr_floppies > 2) { memset(filebuffer, 0, 256); - fscanf(f,"df2=%s\n",&filebuffer); - replace(filebuffer,' ','|'); - if(DISK_validate_filename(p, filebuffer, 0, NULL, NULL, NULL)) - strcpy(p->floppyslots[2].df, filebuffer); - else - p->floppyslots[2].df[0] = 0; + fscanf(f, "df2=%s\n", &filebuffer); + replace(filebuffer, ' ', '|'); + if (DISK_validate_filename(p, filebuffer, 0, NULL, NULL, NULL)) + strcpy(p->floppyslots[2].df, filebuffer); + else + p->floppyslots[2].df[0] = 0; disk_insert(2, filebuffer); } - if(p->nr_floppies > 3) + if (p->nr_floppies > 3) { memset(filebuffer, 0, 256); - fscanf(f,"df3=%s\n",&filebuffer); - replace(filebuffer,' ','|'); - if(DISK_validate_filename(p, filebuffer, 0, NULL, NULL, NULL)) - strcpy(p->floppyslots[3].df, filebuffer); - else - p->floppyslots[3].df[0] = 0; + fscanf(f, "df3=%s\n", &filebuffer); + replace(filebuffer, ' ', '|'); + if (DISK_validate_filename(p, filebuffer, 0, NULL, NULL, NULL)) + strcpy(p->floppyslots[3].df, filebuffer); + else + p->floppyslots[3].df[0] = 0; disk_insert(3, filebuffer); } - for(int i=0; i<4; ++i) + for (int i = 0; i < 4; ++i) { - if(i < p->nr_floppies) - p->floppyslots[i].dfxtype = DRV_35_DD; - else - p->floppyslots[i].dfxtype = DRV_NONE; + if (i < p->nr_floppies) + p->floppyslots[i].dfxtype = DRV_35_DD; + else + p->floppyslots[i].dfxtype = DRV_NONE; } - - fscanf(f,"chipmemory=%d\n",&p->chipmem_size); - if(p->chipmem_size < 10) - // Was saved in old format - p->chipmem_size = 0x80000 << p->chipmem_size; - fscanf(f,"slowmemory=%d\n",&p->bogomem_size); - if(p->bogomem_size > 0 && p->bogomem_size < 10) - // Was saved in old format - p->bogomem_size = - (p->bogomem_size <= 2) ? 0x080000 << p->bogomem_size : - (p->bogomem_size == 3) ? 0x180000 : 0x1c0000; - fscanf(f,"fastmemory=%d\n",&p->fastmem_size); - if(p->fastmem_size > 0 && p->fastmem_size < 10) - // Was saved in old format - p->fastmem_size = 0x080000 << p->fastmem_size; -#ifdef ANDROIDSDL - fscanf(f,"onscreen=%d\n",&mainMenu_onScreen); - fscanf(f,"onScreen_textinput=%d\n",&mainMenu_onScreen_textinput); - fscanf(f,"onScreen_dpad=%d\n",&mainMenu_onScreen_dpad); - fscanf(f,"onScreen_button1=%d\n",&mainMenu_onScreen_button1); - fscanf(f,"onScreen_button2=%d\n",&mainMenu_onScreen_button2); - fscanf(f,"onScreen_button3=%d\n",&mainMenu_onScreen_button3); - fscanf(f,"onScreen_button4=%d\n",&mainMenu_onScreen_button4); - fscanf(f,"onScreen_button5=%d\n",&mainMenu_onScreen_button5); - fscanf(f,"onScreen_button6=%d\n",&mainMenu_onScreen_button6); - fscanf(f,"custom_position=%d\n",&mainMenu_custom_position); - fscanf(f,"pos_x_textinput=%d\n",&mainMenu_pos_x_textinput); - fscanf(f,"pos_y_textinput=%d\n",&mainMenu_pos_y_textinput); - fscanf(f,"pos_x_dpad=%d\n",&mainMenu_pos_x_dpad); - fscanf(f,"pos_y_dpad=%d\n",&mainMenu_pos_y_dpad); - fscanf(f,"pos_x_button1=%d\n",&mainMenu_pos_x_button1); - fscanf(f,"pos_y_button1=%d\n",&mainMenu_pos_y_button1); - fscanf(f,"pos_x_button2=%d\n",&mainMenu_pos_x_button2); - fscanf(f,"pos_y_button2=%d\n",&mainMenu_pos_y_button2); - fscanf(f,"pos_x_button3=%d\n",&mainMenu_pos_x_button3); - fscanf(f,"pos_y_button3=%d\n",&mainMenu_pos_y_button3); - fscanf(f,"pos_x_button4=%d\n",&mainMenu_pos_x_button4); - fscanf(f,"pos_y_button4=%d\n",&mainMenu_pos_y_button4); - fscanf(f,"pos_x_button5=%d\n",&mainMenu_pos_x_button5); - fscanf(f,"pos_y_button5=%d\n",&mainMenu_pos_y_button5); - fscanf(f,"pos_x_button6=%d\n",&mainMenu_pos_x_button6); - fscanf(f,"pos_y_button6=%d\n",&mainMenu_pos_y_button6); - fscanf(f,"quick_switch=%d\n",&mainMenu_quickSwitch); - fscanf(f,"FloatingJoystick=%d\n",&mainMenu_FloatingJoystick); -#endif - + + fscanf(f, "chipmemory=%d\n", &p->chipmem_size); + if (p->chipmem_size < 10) + // Was saved in old format + p->chipmem_size = 0x80000 << p->chipmem_size; + fscanf(f, "slowmemory=%d\n", &p->bogomem_size); + if (p->bogomem_size > 0 && p->bogomem_size < 10) + // Was saved in old format + p->bogomem_size = + (p->bogomem_size <= 2) ? 0x080000 << p->bogomem_size : + (p->bogomem_size == 3) ? 0x180000 : 0x1c0000; + fscanf(f, "fastmemory=%d\n", &p->fastmem_size); + if (p->fastmem_size > 0 && p->fastmem_size < 10) + // Was saved in old format + p->fastmem_size = 0x080000 << p->fastmem_size; + fclose(f); } SetPresetMode(presetModeId, p); - CheckKickstart(p); + CheckKickstart(p); return 1; } diff --git a/src/od-pandora/pandora_gfx.cpp b/src/od-pandora/pandora_gfx.cpp index 6acd3a12..4c7bb3f7 100644 --- a/src/od-pandora/pandora_gfx.cpp +++ b/src/od-pandora/pandora_gfx.cpp @@ -15,14 +15,20 @@ #include #include -#include -#include +#include +#ifndef ANDROID +#include +#endif #include -#ifdef ANDROIDSDL +#ifdef ANDROID #include #endif +#ifdef ANDROIDSDL +#include +#endif + #include #include @@ -33,16 +39,16 @@ #define OMAPFB_WAITFORVSYNC_FRAME _IOWR('O', 70, unsigned int) #endif - /* SDL variable for output of emulation */ SDL_Surface *prSDLScreen = NULL; static int fbdev = -1; static unsigned int current_vsync_frame = 0; /* Possible screen modes (x and y resolutions) */ -#define MAX_SCREEN_MODES 6 -static int x_size_table[MAX_SCREEN_MODES] = { 640, 640, 800, 1024, 1152, 1280 }; -static int y_size_table[MAX_SCREEN_MODES] = { 400, 480, 480, 768, 864, 960 }; + +#define MAX_SCREEN_MODES 11 +static int x_size_table[MAX_SCREEN_MODES] = { 640, 640, 720, 800, 800, 960, 1024, 1024, 1280, 1280, 1920 }; +static int y_size_table[MAX_SCREEN_MODES] = { 400, 480, 400, 480, 600, 540, 768, 600, 720, 800, 1080 }; static int red_bits, green_bits, blue_bits; static int red_shift, green_shift, blue_shift; @@ -362,9 +368,10 @@ void flush_screen () } current_vsync_frame += currprefs.gfx_framerate; } - - last_synctime = read_processor_time(); + +// Android swapped SDL_Flip & last_synctime for fixing performance SDL_Flip(prSDLScreen); + last_synctime = read_processor_time(); if(!screen_is_picasso) gfxvidinfo.bufmem = (uae_u8 *)prSDLScreen->pixels; @@ -734,7 +741,7 @@ void picasso_InitResolutions (void) modesList(); DisplayModes = Displays[0].DisplayModes; } -#endif + bool vsync_switchmode (int hz) { @@ -799,7 +806,7 @@ bool target_graphics_buffer_update (void) return true; } -#ifdef PICASSO96 + void gfx_set_picasso_state (int on) { if (on == screen_is_picasso) diff --git a/src/od-pandora/pandora_gui.cpp b/src/od-pandora/pandora_gui.cpp index a61906b9..bc455f1a 100644 --- a/src/od-pandora/pandora_gui.cpp +++ b/src/od-pandora/pandora_gui.cpp @@ -14,7 +14,7 @@ #include "gui.h" #include "od-pandora/gui/SelectorEntry.hpp" #include "gui/gui_handling.h" -#include "memory.h" +#include "include/memory.h" #include "rommgr.h" #include "newcpu.h" #include "custom.h" @@ -34,35 +34,37 @@ #include "td-sdl/thread.h" #ifdef RASPBERRY - #include - #include -#endif RASPBERRY +#include +#include +#endif //RASPBERRY int emulating = 0; extern int screen_is_picasso; -struct gui_msg { - int num; - const char *msg; +struct gui_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." }, +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." }, - { -1, "" } + { -1, "" } }; std::vector ConfigFilesList; @@ -73,407 +75,422 @@ std::vector lstMRUCDList; void AddFileToDiskList(const char *file, int moveToTop) { - int i; - - for(i=0; i= lstMRUDiskList.size()) - lstMRUDiskList.insert(lstMRUDiskList.begin(), file); + int i; - while(lstMRUDiskList.size() > MAX_MRU_DISKLIST) - lstMRUDiskList.pop_back(); + 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(); } void AddFileToCDList(const char *file, int moveToTop) { - int i; - - for(i=0; i= lstMRUCDList.size()) - lstMRUCDList.insert(lstMRUCDList.begin(), file); + int i; - while(lstMRUCDList.size() > MAX_MRU_CDLIST) - lstMRUCDList.pop_back(); + 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(); } 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; +struct romscandata +{ + uae_u8 *keybuf; + int keysize; }; -static struct romdata *scan_single_rom_2 (struct zfile *f) +static struct romdata *scan_single_rom_2(struct zfile *f) { - uae_u8 buffer[20] = { 0 }; - uae_u8 *rombuf; - int cl = 0, size; - struct romdata *rd = 0; + uae_u8 buffer[20] = { 0 }; + uae_u8 *rombuf; + int cl = 0, size; + struct romdata *rd = 0; - zfile_fseek (f, 0, SEEK_END); - size = zfile_ftell (f); - zfile_fseek (f, 0, SEEK_SET); - if (size > 524288 * 2) /* don't skip KICK disks or 1M ROMs */ - return 0; - zfile_fread (buffer, 1, 11, f); - if (!memcmp (buffer, "KICK", 4)) { - zfile_fseek (f, 512, SEEK_SET); - if (size > 262144) - size = 262144; - } else if (!memcmp (buffer, "AMIROMTYPE1", 11)) { - cl = 1; - size -= 11; - } else { - zfile_fseek (f, 0, SEEK_SET); - } - rombuf = xcalloc (uae_u8, size); - if (!rombuf) - return 0; - zfile_fread (rombuf, 1, size, f); - if (cl > 0) { - decode_cloanto_rom_do (rombuf, size, size); - cl = 0; - } - if (!cl) { - rd = getromdatabydata (rombuf, size); - if (!rd && (size & 65535) == 0) { - /* check byteswap */ - int i; - for (i = 0; i < size; i+=2) { - uae_u8 b = rombuf[i]; - rombuf[i] = rombuf[i + 1]; - rombuf[i + 1] = b; - } - rd = getromdatabydata (rombuf, size); - } - } - free (rombuf); - return rd; + zfile_fseek(f, 0, SEEK_END); + size = zfile_ftell(f); + zfile_fseek(f, 0, SEEK_SET); + if (size > 524288 * 2) /* don't skip KICK disks or 1M ROMs */ + return 0; + zfile_fread(buffer, 1, 11, f); + if (!memcmp(buffer, "KICK", 4)) + { + zfile_fseek(f, 512, SEEK_SET); + if (size > 262144) + size = 262144; + } + else if (!memcmp(buffer, "AMIROMTYPE1", 11)) + { + cl = 1; + size -= 11; + } + else + { + zfile_fseek(f, 0, SEEK_SET); + } + rombuf = xcalloc(uae_u8, size); + if (!rombuf) + return 0; + zfile_fread(rombuf, 1, size, f); + if (cl > 0) + { + decode_cloanto_rom_do(rombuf, size, size); + cl = 0; + } + if (!cl) + { + rd = getromdatabydata(rombuf, size); + if (!rd && (size & 65535) == 0) + { + /* check byteswap */ + int i; + for (i = 0; i < size; i += 2) + { + uae_u8 b = rombuf[i]; + rombuf[i] = rombuf[i + 1]; + rombuf[i + 1] = b; + } + rd = getromdatabydata(rombuf, size); + } + } + free(rombuf); + 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]; - - romlist_clear(); - - ClearAvailableROMList(); - fetch_rompath(path, MAX_DPATH); - - load_keyring(&changed_prefs, path); - ReadDirectory(path, NULL, &files); - for(int i=0; i files; + char path[MAX_DPATH]; + + romlist_clear(); + + ClearAvailableROMList(); + fetch_rompath(path, MAX_DPATH); + + load_keyring(&changed_prefs, path); + ReadDirectory(path, NULL, &files); + for (int i = 0; i < files.size(); ++i) + { + char tmppath[MAX_PATH]; + strncpy(tmppath, path, MAX_PATH); + strncat(tmppath, files[i].c_str(), MAX_PATH); + scan_rom(tmppath); + } + int id = 1; - for (;;) { - struct romdata *rd = getromdatabyid (id); + for (;;) + { + struct romdata *rd = getromdatabyid(id); if (!rd) break; if (rd->crc32 == 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" }; - - 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); + 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" }; - // 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); + ClearConfigFileList(); - // 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 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); - } + // 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); - // 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); - } - } + // 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); + + // 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; 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; 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)); + /* filesys hack */ + 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)); + /* filesys hack */ + 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; - - 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); + // 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; - inputdevice_copyconfig (&changed_prefs, &currprefs); - inputdevice_config_change_test(); + 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(); } -int gui_init (void) +int gui_init(void) { - int ret = 0; - - emulating=0; + int ret = 0; - if(lstAvailableROMs.size() == 0) - RescanROMs(); + emulating = 0; - graphics_subshutdown(); - prefs_to_gui(); - run_gui(); - gui_to_prefs(); - if(quit_program < 0) - quit_program = -quit_program; - if(quit_program == UAE_QUIT) - ret = -2; // Quit without start of emulator + if (lstAvailableROMs.size() == 0) + RescanROMs(); + + graphics_subshutdown(); + prefs_to_gui(); + run_gui(); + gui_to_prefs(); + if (quit_program < 0) + quit_program = -quit_program; + if (quit_program == UAE_QUIT) + ret = -2; // Quit without start of emulator setCpuSpeed(); - update_display(&changed_prefs); + update_display(&changed_prefs); - after_leave_gui(); - - emulating=1; - return ret; + after_leave_gui(); + + emulating = 1; + return ret; } void gui_exit(void) @@ -494,7 +511,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); @@ -503,453 +520,459 @@ 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); - - if(strlen(currprefs.floppyslots[0].df) > 0) - extractFileName(currprefs.floppyslots[0].df, tmp); - else - strncpy(tmp, last_loaded_config, MAX_PATH); + fetch_savestatepath(savestate_fname, MAX_DPATH); + fetch_screenshotpath(screenshot_filename, MAX_DPATH); - strncat(savestate_fname, tmp, MAX_DPATH); - strncat(screenshot_filename, tmp, MAX_DPATH); - removeFileExtension(savestate_fname); - removeFileExtension(screenshot_filename); + if (strlen(currprefs.floppyslots[0].df) > 0) + extractFileName(currprefs.floppyslots[0].df, tmp); + else + strncpy(tmp, last_loaded_config, MAX_PATH); - 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; + 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; } -void gui_display (int shortcut) +void gui_display(int shortcut) { if (quit_program != 0) return; - emulating=1; + emulating = 1; pause_sound(); - blkdev_entergui(); + blkdev_entergui(); - if(lstAvailableROMs.size() == 0) - RescanROMs(); - graphics_subshutdown(); - prefs_to_gui(); - run_gui(); - gui_to_prefs(); + if (lstAvailableROMs.size() == 0) + RescanROMs(); + graphics_subshutdown(); + prefs_to_gui(); + run_gui(); + gui_to_prefs(); setCpuSpeed(); // if(quit_program) // screen_is_picasso = 0; - update_display(&changed_prefs); + update_display(&changed_prefs); - /* Clear menu garbage at the bottom of the screen */ + /* Clear menu garbage at the bottom of the screen */ black_screen_now(); resume_sound(); - blkdev_exitgui(); + blkdev_exitgui(); - after_leave_gui(); + after_leave_gui(); - gui_update (); + gui_update(); - gui_purge_events(); - fpscounter_reset(); + gui_purge_events(); + fpscounter_reset(); } - + 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_handle_events (void) +void gui_handle_events(void) { - int i; + int i; Uint8 *keystate = SDL_GetKeyState(NULL); int triggerL = keystate[SDLK_RSHIFT]; int triggerR = keystate[SDLK_RCTRL]; + if (keystate[SDLK_LCTRL] && keystate[SDLK_LSUPER] && (keystate[SDLK_RSUPER] || keystate[SDLK_MENU])) + uae_reset(0, 1); - if(keystate[SDLK_LCTRL] && keystate[SDLK_LSUPER] && (keystate[SDLK_RSUPER] ||keystate[SDLK_MENU])) - uae_reset(0,1); - - // L + R - if(triggerL && triggerR) + // L + R + if (triggerL && triggerR) { - //up - if(keystate[SDLK_UP]) + //up + if (keystate[SDLK_UP]) moveVertical(1); //down - else if(keystate[SDLK_DOWN]) + else if (keystate[SDLK_DOWN]) moveVertical(-1); - //1 - else if(keystate[SDLK_1]) + //1 + else if (keystate[SDLK_1]) { changed_prefs.gfx_size.height = amigaheight_values[0]; update_display(&changed_prefs); } //2 - else if(keystate[SDLK_2]) + else if (keystate[SDLK_2]) { changed_prefs.gfx_size.height = amigaheight_values[1]; update_display(&changed_prefs); } //3 - else if(keystate[SDLK_3]) + else if (keystate[SDLK_3]) { changed_prefs.gfx_size.height = amigaheight_values[2]; update_display(&changed_prefs); } //4 - else if(keystate[SDLK_4]) + else if (keystate[SDLK_4]) { changed_prefs.gfx_size.height = amigaheight_values[3]; update_display(&changed_prefs); } //5 - else if(keystate[SDLK_5]) + else if (keystate[SDLK_5]) { changed_prefs.gfx_size.height = amigaheight_values[4]; update_display(&changed_prefs); } //6 - else if(keystate[SDLK_6]) + else if (keystate[SDLK_6]) { changed_prefs.gfx_size.height = amigaheight_values[5]; update_display(&changed_prefs); } //9 - else if(keystate[SDLK_9]) + else if (keystate[SDLK_9]) { - for(i=0; i 0) - changed_prefs.gfx_size.height = amigaheight_values[i - 1]; - else - changed_prefs.gfx_size.height = amigaheight_values[AMIGAHEIGHT_COUNT - 1]; - break; - } + if (currprefs.gfx_size.height == amigaheight_values[i]) + { + if (i > 0) + changed_prefs.gfx_size.height = amigaheight_values[i - 1]; + else + changed_prefs.gfx_size.height = amigaheight_values[AMIGAHEIGHT_COUNT - 1]; + break; + } } update_display(&changed_prefs); } //0 - else if(keystate[SDLK_0]) + else if (keystate[SDLK_0]) { - for(i=0; i 600) - changed_prefs.gfx_size.width = currprefs.gfx_size.width / 2; - else - changed_prefs.gfx_size.width = currprefs.gfx_size.width * 2; + // Change resolution (lores/hires) + if (currprefs.gfx_size.width > 600) + changed_prefs.gfx_size.width = currprefs.gfx_size.width / 2; + else + changed_prefs.gfx_size.width = currprefs.gfx_size.width * 2; update_display(&changed_prefs); } } - else if(triggerL) + else if (triggerL) { - if(keystate[SDLK_c]) - currprefs.pandora_customControls = !currprefs.pandora_customControls; + if (keystate[SDLK_c]) + currprefs.pandora_customControls = !currprefs.pandora_customControls; - else if(keystate[SDLK_d]) + else if (keystate[SDLK_d]) changed_prefs.leds_on_screen = !currprefs.leds_on_screen; - else if(keystate[SDLK_f]) + else if (keystate[SDLK_f]) changed_prefs.gfx_framerate ? changed_prefs.gfx_framerate = 0 : changed_prefs.gfx_framerate = 1; - else if(keystate[SDLK_s]) - savestate_state = STATE_DOSAVE; + else if (keystate[SDLK_s]) + savestate_state = STATE_DOSAVE; - else if(keystate[SDLK_l]) - { - FILE *f=fopen(savestate_fname, "rb"); - if(f) - { - fclose(f); - savestate_state = STATE_DORESTORE; - } - } + else if (keystate[SDLK_l]) + { + FILE *f = fopen(savestate_fname, "rb"); + if (f) + { + fclose(f); + savestate_state = STATE_DORESTORE; + } + } } } -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) { #ifdef RASPBERRY - #define LED_DFs -2 // Define for any DF* access +#define LED_DFs -2 // Define for any DF* access - unsigned long kbd_led_status; + unsigned long 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; + // 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; - 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) - { - 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; - } - } - ioctl(0, KDSETLED, kbd_led_status); + // Handle power, hd/cd led status + if (led == LED_POWER || led == LED_HD) + { + 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; + } + } + ioctl(0, KDSETLED, kbd_led_status); #endif } -void gui_flicker_led (int led, int unitnum, int status) +void gui_flicker_led(int led, int unitnum, int status) { - static int hd_resetcounter; + static int hd_resetcounter; - switch(led) - { - case -1: // Reset HD and CD - gui_data.hd = 0; - break; - - case LED_POWER: - break; + switch (led) + { + case -1: // Reset HD and CD + gui_data.hd = 0; + break; - case LED_HD: - if (status == 0) { - hd_resetcounter--; - if (hd_resetcounter > 0) - return; - #ifdef RASPBERRY - // HD LED off - gui_led(LED_HD, 0); - #endif - } - #ifdef RASPBERRY - // HD LED on - else gui_led(LED_HD, 1); - #endif - gui_data.hd = status; - hd_resetcounter = 2; - break; - } + case LED_POWER: + break; + + case LED_HD: + if (status == 0) + { + hd_resetcounter--; + if (hd_resetcounter > 0) + return; +#ifdef RASPBERRY + // HD LED off + gui_led(LED_HD, 0); +#endif + } +#ifdef RASPBERRY + // HD LED on + else gui_led(LED_HD, 1); +#endif + gui_data.hd = status; + hd_resetcounter = 2; + break; + } } -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]; - - 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; - } - } + 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; + } + } + } + + if (bRemove) + { + files->erase(files->begin() + q); + --q; + } + } } bool DevicenameExists(const char *name) { - int i; - struct uaedev_config_info *uci; - - for(i=0; idevname && uci->devname[0]) - { - if(!strcmp(uci->devname, name)) - return true; - if(uci->volname != 0 && !strcmp(uci->volname, name)) - return true; - } - } - return false; + for (i = 0; i < MAX_HD_DEVICES; ++i) + { + uci = &changed_prefs.mountconfig[i]; + + if (uci->devname && uci->devname[0]) + { + if (!strcmp(uci->devname, name)) + return true; + if (uci->volname != 0 && !strcmp(uci->volname, name)) + return true; + } + } + return false; } void CreateDefaultDevicename(char *name) { - int freeNum = 0; - bool foundFree = false; - - while(!foundFree && freeNum < 10) - { - sprintf(name, "DH%d", freeNum); - foundFree = !DevicenameExists(name); - ++freeNum; - } + int freeNum = 0; + bool foundFree = false; + + 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 -129; - if (!ab) - return -128; - if (bp < -127) - bp = -127; - return bp; + if (dnm) + return -129; + if (!ab) + return -128; + 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)) { - // RDSK or ADIDE "encoded" RDSK + 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)) + { + // RDSK or ADIDE "encoded" RDSK isrdb = true; break; } } - zfile_fclose (f); - return isrdb; + zfile_fclose(f); + return isrdb; } diff --git a/src/od-pandora/pandora_input.cpp b/src/od-pandora/pandora_input.cpp index 314f82a3..569ca0b9 100644 --- a/src/od-pandora/pandora_input.cpp +++ b/src/od-pandora/pandora_input.cpp @@ -8,7 +8,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; @@ -19,232 +19,256 @@ 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 TCHAR *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 TCHAR *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.jports[0].id == JSEM_MICE + 1 || currprefs.jports[1].id == JSEM_MICE + 1) { - // dPad is mouse - Uint8 *keystate = SDL_GetKeyState(NULL); - int mouseScale = currprefs.input_joymouse_multiplier / 4; - - if(keystate[SDLK_LEFT]) - setmousestate(1, 0, -mouseScale, 0); - if(keystate[SDLK_RIGHT]) - setmousestate(1, 0, mouseScale, 0); - if(keystate[SDLK_UP]) - setmousestate(1, 1, -mouseScale, 0); - if(keystate[SDLK_DOWN]) - setmousestate(1, 1, mouseScale, 0); - - if(!mouseBut1viaCustom) - setmousebuttonstate (1, 0, keystate[SDLK_HOME]); // A button -> left mouse - if(!mouseBut2viaCustom) - setmousebuttonstate (1, 1, keystate[SDLK_END]); // B button -> right mouse - } - - // Nubs as mouse handled in handle_msgpump() + 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); + int mouseScale = currprefs.input_joymouse_multiplier / 4; + + if (keystate[SDLK_LEFT]) + setmousestate(1, 0, -mouseScale, 0); + if (keystate[SDLK_RIGHT]) + setmousestate(1, 0, mouseScale, 0); + if (keystate[SDLK_UP]) + setmousestate(1, 1, -mouseScale, 0); + if (keystate[SDLK_DOWN]) + setmousestate(1, 1, mouseScale, 0); + + if (!mouseBut1viaCustom) + setmousebuttonstate(1, 0, keystate[SDLK_HOME]); // A button -> left mouse + if (!mouseBut2viaCustom) + setmousebuttonstate(1, 1, keystate[SDLK_END]); // B button -> right mouse + } + + // 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 +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 }; -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) +int input_get_default_mouse(struct uae_input_device *uid, int i, int port, int af, bool 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); + 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 TCHAR *get_kb_friendlyname(int kb) { - return strdup("Default Keyboard"); + return strdup("Default Keyboard"); } -static TCHAR *get_kb_uniquename (int kb) +static const TCHAR *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, +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, 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; } @@ -259,337 +283,353 @@ static char JoystickName[MAX_INPUT_DEVICES][80]; 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); + // Keep joystick 0 as Pandora implementation... + 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 ()) - return 1; + //This function is called too many times... we can filter if number of joy is good... + if (nr_joysticks == SDL_NumJoysticks()) + return 1; - nr_joysticks = SDL_NumJoysticks (); - if (nr_joysticks > MAX_INPUT_DEVICES) - nr_joysticks = MAX_INPUT_DEVICES; - for (int cpt; cpt < nr_joysticks; cpt++) - { - Joysticktable[cpt] = SDL_JoystickOpen (cpt); - strncpy(JoystickName[cpt],SDL_JoystickName(cpt),80); - printf("Joystick %i : %s\n",cpt,JoystickName[cpt]); - printf(" Buttons: %i Axis: %i Hats: %i\n",SDL_JoystickNumButtons(Joysticktable[cpt]),SDL_JoystickNumAxes(Joysticktable[cpt]),SDL_JoystickNumHats(Joysticktable[cpt])); - } + nr_joysticks = SDL_NumJoysticks(); + if (nr_joysticks > MAX_INPUT_DEVICES) + nr_joysticks = MAX_INPUT_DEVICES; + for (int cpt; cpt < nr_joysticks; cpt++) + { + Joysticktable[cpt] = SDL_JoystickOpen(cpt); + strncpy(JoystickName[cpt], SDL_JoystickName(cpt), 80); + printf("Joystick %i : %s\n", cpt, JoystickName[cpt]); + printf(" Buttons: %i Axis: %i Hats: %i\n", SDL_JoystickNumButtons(Joysticktable[cpt]), SDL_JoystickNumAxes(Joysticktable[cpt]), SDL_JoystickNumHats(Joysticktable[cpt])); + } - return 1; + 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 TCHAR *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 TCHAR *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) +{ + return MAX_JOY_AXES + MAX_JOY_BUTTONS; +} + +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; +} + +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; +} + +static int get_joystick_flags(int num) +{ + return 0; } -static int get_joystick_widget_num (int joy) -{ - return MAX_JOY_AXES + MAX_JOY_BUTTONS; -} - -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; -} - -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; -} - -static int get_joystick_flags (int num) -{ - 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) - { - Uint8 *keystate = SDL_GetKeyState(NULL); - - if(!keystate[SDLK_RCTRL]) - { // Right shoulder + dPad -> cursor keys - int axis = (keystate[SDLK_LEFT] ? -32767 : (keystate[SDLK_RIGHT] ? 32767 : 0)); - if(!joyXviaCustom) - setjoystickstate (0, 0, axis, 32767); - axis = (keystate[SDLK_UP] ? -32767 : (keystate[SDLK_DOWN] ? 32767 : 0)); - if(!joyYviaCustom) - setjoystickstate (0, 1, axis, 32767); - } - if(!joyButXviaCustom[0]) - setjoybuttonstate (0, 0, keystate[SDLK_PAGEDOWN]); - if(!joyButXviaCustom[1]) - setjoybuttonstate (0, 1, keystate[SDLK_END]); - if(!joyButXviaCustom[2]) - setjoybuttonstate (0, 2, keystate[SDLK_HOME]); - if(!joyButXviaCustom[3]) - setjoybuttonstate (0, 3, keystate[SDLK_PAGEUP]); + for (int joyid = 0; joyid < MAX_JPORTS; joyid++) + // First handle fake joystick from pandora... + if (currprefs.jports[joyid].id == JSEM_JOYS) + { + Uint8 *keystate = SDL_GetKeyState(NULL); - int cd32_start = 0, cd32_ffw = 0, cd32_rwd = 0; - if(keystate[SDLK_LALT]) { // Pandora Start button - if(keystate[SDLK_RSHIFT]) // Left shoulder - cd32_rwd = 1; - else if (keystate[SDLK_RCTRL]) // 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); + if (!keystate[SDLK_RCTRL]) + { + // Right shoulder + dPad -> cursor keys + int axis = (keystate[SDLK_LEFT] ? -32767 : (keystate[SDLK_RIGHT] ? 32767 : 0)); + if (!joyXviaCustom) + setjoystickstate(0, 0, axis, 32767); + axis = (keystate[SDLK_UP] ? -32767 : (keystate[SDLK_DOWN] ? 32767 : 0)); + if (!joyYviaCustom) + setjoystickstate(0, 1, axis, 32767); + } + if (!joyButXviaCustom[0]) + setjoybuttonstate(0, 0, keystate[SDLK_PAGEDOWN]); + if (!joyButXviaCustom[1]) + setjoybuttonstate(0, 1, keystate[SDLK_END]); + if (!joyButXviaCustom[2]) + setjoybuttonstate(0, 2, keystate[SDLK_HOME]); + if (!joyButXviaCustom[3]) + setjoybuttonstate(0, 3, keystate[SDLK_PAGEUP]); - 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[SDLK_RSHIFT]) // Left shoulder + cd32_rwd = 1; + else if (keystate[SDLK_RCTRL]) // 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)); + + // 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)); + } } -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, +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, 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) +int input_get_default_joystick(struct uae_input_device *uid, int num, int port, int af, int mode, bool gp) { - 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) +int input_get_default_joystick_analog(struct uae_input_device *uid, int num, int port, int af) { - 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; - - 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_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_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_RIGHT: - joyXviaCustom = keypressed; - setjoystickstate (0, 0, keypressed ? 32767 : 0, 32767); - break; + switch (code) + { + case REMAP_MOUSEBUTTON_LEFT: + mouseBut1viaCustom = keypressed; + setmousebuttonstate(0, 0, keypressed); + setmousebuttonstate(1, 0, keypressed); + break; - case REMAP_CD32_GREEN: - joyButXviaCustom[2] = keypressed; - setjoybuttonstate (0, 2, keypressed); - break; + case REMAP_MOUSEBUTTON_RIGHT: + mouseBut2viaCustom = keypressed; + setmousebuttonstate(0, 1, keypressed); + setmousebuttonstate(1, 1, keypressed); + break; - case REMAP_CD32_YELLOW: - joyButXviaCustom[3] = keypressed; - setjoybuttonstate (0, 3, keypressed); - break; + case REMAP_JOYBUTTON_ONE: + joyButXviaCustom[0] = keypressed; + setjoybuttonstate(0, 0, keypressed); + break; - case REMAP_CD32_PLAY: - joyButXviaCustom[6] = keypressed; - setjoybuttonstate (0, 6, keypressed); - break; + case REMAP_JOYBUTTON_TWO: + joyButXviaCustom[1] = keypressed; + setjoybuttonstate(0, 1, keypressed); + break; - case REMAP_CD32_FFW: - joyButXviaCustom[5] = keypressed; - setjoybuttonstate (0, 5, keypressed); - break; + case REMAP_JOY_UP: + joyYviaCustom = keypressed; + setjoystickstate(0, 1, keypressed ? -32767 : 0, 32767); + break; - case REMAP_CD32_RWD: - joyButXviaCustom[4] = keypressed; - setjoybuttonstate (0, 4, keypressed); - 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_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_YELLOW: + joyButXviaCustom[3] = keypressed; + setjoybuttonstate(0, 3, 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_RWD: + joyButXviaCustom[4] = keypressed; + setjoybuttonstate(0, 4, keypressed); + break; + } } diff --git a/src/od-pandora/picasso96.cpp b/src/od-pandora/picasso96.cpp index 33e9606a..3561d49b 100644 --- a/src/od-pandora/picasso96.cpp +++ b/src/od-pandora/picasso96.cpp @@ -38,7 +38,7 @@ * I removed some code which handled unsupported modes and formats to make code * easier to read. */ - + #include "sysconfig.h" #include "sysdeps.h" @@ -47,7 +47,7 @@ #include "config.h" #include "options.h" #include "td-sdl/thread.h" -#include "memory.h" +#include "include/memory.h" #include "custom.h" #include "newcpu.h" #include "xwin.h" @@ -82,9 +82,9 @@ static void flushpixels(void); #define P96TRACE(x) #endif -static void REGPARAM2 gfxmem_lputx (uaecptr, uae_u32) REGPARAM; -static void REGPARAM2 gfxmem_wputx (uaecptr, uae_u32) REGPARAM; -static void REGPARAM2 gfxmem_bputx (uaecptr, uae_u32) REGPARAM; +static void REGPARAM2 gfxmem_lputx(uaecptr, uae_u32) REGPARAM; +static void REGPARAM2 gfxmem_wputx(uaecptr, uae_u32) REGPARAM; +static void REGPARAM2 gfxmem_bputx(uaecptr, uae_u32) REGPARAM; static uae_u8 all_ones_bitmap, all_zeros_bitmap; /* yuk */ @@ -94,9 +94,9 @@ static struct PicassoResolution *newmodes = NULL; static int picasso_convert, host_mode; -/* These are the maximum resolutions... They are filled in by GetSupportedResolutions() */ -/* have to fill this in, otherwise problems occur on the Amiga side P96 s/w which expects -/* data here. */ +// These are the maximum resolutions... They are filled in by GetSupportedResolutions() +// have to fill this in, otherwise problems occur on the Amiga side P96 s/w which expects +// data here. */ static struct ScreenResolution planar = { 320, 240 }; static struct ScreenResolution chunky = { 640, 480 }; static struct ScreenResolution hicolour = { 640, 480 }; @@ -110,63 +110,69 @@ int p96vblank; static int uaegfx_old, uaegfx_active; static uae_u32 reserved_gfxmem; static uaecptr uaegfx_resname, - uaegfx_resid, - uaegfx_init, - uaegfx_base, - uaegfx_rom; + uaegfx_resid, + uaegfx_init, + uaegfx_base, + uaegfx_rom; -typedef enum { - BLIT_FALSE, - BLIT_NOR, - BLIT_ONLYDST, - BLIT_NOTSRC, - BLIT_ONLYSRC, - BLIT_NOTDST, - BLIT_EOR, - BLIT_NAND, - BLIT_AND, - BLIT_NEOR, - BLIT_DST, - BLIT_NOTONLYSRC, - BLIT_SRC, - BLIT_NOTONLYDST, - BLIT_OR, - BLIT_TRUE, - BLIT_SWAP = 30 +typedef enum +{ + BLIT_FALSE, + BLIT_NOR, + BLIT_ONLYDST, + BLIT_NOTSRC, + BLIT_ONLYSRC, + BLIT_NOTDST, + BLIT_EOR, + BLIT_NAND, + BLIT_AND, + BLIT_NEOR, + BLIT_DST, + BLIT_NOTONLYSRC, + BLIT_SRC, + BLIT_NOTONLYDST, + BLIT_OR, + BLIT_TRUE, + BLIT_SWAP = 30 } BLIT_OPCODE; #define UAE_RTG_LIBRARY_VERSION 40 #define UAE_RTG_LIBRARY_REVISION 3994 static void checkrtglibrary(void) { - uae_u32 v; - static int checked = FALSE; + uae_u32 v; + static int checked = FALSE; - if (checked) - return; - v = get_long (4); // execbase - v += 378; // liblist - while ((v = get_long(v))) { - uae_u32 v2 = get_long(v + 10); // name - uae_u8 *p; - addrbank *b = &get_mem_bank(v2); - if (!b || !b->check (v2, 12)) - continue; - p = b->xlateaddr(v2); - if (!memcmp(p, "rtg.library\0", 12)) { - uae_u16 ver = get_word(v + 20); - uae_u16 rev = get_word(v + 22); - if (ver * 10000 + rev < UAE_RTG_LIBRARY_VERSION * 10000 + UAE_RTG_LIBRARY_REVISION) { - TCHAR msg[2000]; - sprintf(msg, _T("installed rtg.library: %d.%d, required: %d.%d\n"), ver, rev, UAE_RTG_LIBRARY_VERSION, UAE_RTG_LIBRARY_REVISION); - write_log(msg); - gui_message(msg); - } else { - write_log(_T("P96: rtg.library %d.%d detected\n"), ver, rev); - } - checked = TRUE; - } - } + if (checked) + return; + v = get_long(4); // execbase + v += 378; // liblist + while ((v = get_long(v))) + { + uae_u32 v2 = get_long(v + 10); // name + uae_u8 *p; + addrbank *b = &get_mem_bank(v2); + if (!b || !b->check(v2, 12)) + continue; + p = b->xlateaddr(v2); + if (!memcmp(p, "rtg.library\0", 12)) + { + uae_u16 ver = get_word(v + 20); + uae_u16 rev = get_word(v + 22); + if (ver * 10000 + rev < UAE_RTG_LIBRARY_VERSION * 10000 + UAE_RTG_LIBRARY_REVISION) + { + TCHAR msg[2000]; + sprintf(msg, _T("installed rtg.library: %d.%d, required: %d.%d\n"), ver, rev, UAE_RTG_LIBRARY_VERSION, UAE_RTG_LIBRARY_REVISION); + write_log(msg); + gui_message(msg); + } + else + { + write_log(_T("P96: rtg.library %d.%d detected\n"), ver, rev); + } + checked = TRUE; + } + } } static uae_u32 p2ctab[256][2]; @@ -175,519 +181,558 @@ static int set_gc_called = 0, init_picasso_screen_called = 0; static uaecptr oldscr = 0; -STATIC_INLINE void endianswap (uae_u32 *vp, int bpp) +STATIC_INLINE void endianswap(uae_u32 *vp, int bpp) { - uae_u32 v = *vp; - switch (bpp) - { + uae_u32 v = *vp; + switch (bpp) + { case 2: - *vp = (((v >> 8) & 0x00ff) | (v << 8)) & 0xffff; - break; + *vp = (v >> 8 & 0x00ff) | (v << 8) & 0xffff; + break; case 4: - *vp = ((v >> 24) & 0x000000ff) | ((v >> 8) & 0x0000ff00) | ((v << 8) & 0x00ff0000) | ((v << 24) & 0xff000000); - break; - } + *vp = (v >> 24 & 0x000000ff) | (v >> 8 & 0x0000ff00) | (v << 8 & 0x00ff0000) | (v << 24 & 0xff000000); + break; + default: break; + } } #if P96TRACING_ENABLED /* * Debugging dumps */ -static void DumpModeInfoStructure (uaecptr amigamodeinfoptr) +static void DumpModeInfoStructure(uaecptr amigamodeinfoptr) { - write_log (_T("ModeInfo Structure Dump:\n")); - write_log (_T(" Node.ln_Succ = 0x%x\n"), get_long (amigamodeinfoptr)); - write_log (_T(" Node.ln_Pred = 0x%x\n"), get_long (amigamodeinfoptr + 4)); - write_log (_T(" Node.ln_Type = 0x%x\n"), get_byte (amigamodeinfoptr + 8)); - write_log (_T(" Node.ln_Pri = %d\n"), get_byte (amigamodeinfoptr + 9)); + write_log(_T("ModeInfo Structure Dump:\n")); + write_log(_T(" Node.ln_Succ = 0x%x\n"), get_long(amigamodeinfoptr)); + write_log(_T(" Node.ln_Pred = 0x%x\n"), get_long(amigamodeinfoptr + 4)); + write_log(_T(" Node.ln_Type = 0x%x\n"), get_byte(amigamodeinfoptr + 8)); + write_log(_T(" Node.ln_Pri = %d\n"), get_byte(amigamodeinfoptr + 9)); /*write_log (_T(" Node.ln_Name = %s\n"), uaememptr->Node.ln_Name); */ - write_log (_T(" OpenCount = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_OpenCount)); - write_log (_T(" Active = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_Active)); - write_log (_T(" Width = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_Width)); - write_log (_T(" Height = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_Height)); - write_log (_T(" Depth = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_Depth)); - write_log (_T(" Flags = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_Flags)); - write_log (_T(" HorTotal = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_HorTotal)); - write_log (_T(" HorBlankSize = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_HorBlankSize)); - write_log (_T(" HorSyncStart = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncStart)); - write_log (_T(" HorSyncSize = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSize)); - write_log (_T(" HorSyncSkew = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSkew)); - write_log (_T(" HorEnableSkew = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorEnableSkew)); - write_log (_T(" VerTotal = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_VerTotal)); - write_log (_T(" VerBlankSize = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_VerBlankSize)); - write_log (_T(" VerSyncStart = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncStart)); - write_log (_T(" VerSyncSize = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncSize)); - write_log (_T(" Clock = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_first_union)); - write_log (_T(" ClockDivide = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_second_union)); - write_log (_T(" PixelClock = %d\n"), get_long (amigamodeinfoptr + PSSO_ModeInfo_PixelClock)); + write_log(_T(" OpenCount = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_OpenCount)); + write_log(_T(" Active = %d\n"), get_byte(amigamodeinfoptr + PSSO_ModeInfo_Active)); + write_log(_T(" Width = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_Width)); + write_log(_T(" Height = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_Height)); + write_log(_T(" Depth = %d\n"), get_byte(amigamodeinfoptr + PSSO_ModeInfo_Depth)); + write_log(_T(" Flags = %d\n"), get_byte(amigamodeinfoptr + PSSO_ModeInfo_Flags)); + write_log(_T(" HorTotal = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_HorTotal)); + write_log(_T(" HorBlankSize = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_HorBlankSize)); + write_log(_T(" HorSyncStart = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_HorSyncStart)); + write_log(_T(" HorSyncSize = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_HorSyncSize)); + write_log(_T(" HorSyncSkew = %d\n"), get_byte(amigamodeinfoptr + PSSO_ModeInfo_HorSyncSkew)); + write_log(_T(" HorEnableSkew = %d\n"), get_byte(amigamodeinfoptr + PSSO_ModeInfo_HorEnableSkew)); + write_log(_T(" VerTotal = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_VerTotal)); + write_log(_T(" VerBlankSize = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_VerBlankSize)); + write_log(_T(" VerSyncStart = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_VerSyncStart)); + write_log(_T(" VerSyncSize = %d\n"), get_word(amigamodeinfoptr + PSSO_ModeInfo_VerSyncSize)); + write_log(_T(" Clock = %d\n"), get_byte(amigamodeinfoptr + PSSO_ModeInfo_first_union)); + write_log(_T(" ClockDivide = %d\n"), get_byte(amigamodeinfoptr + PSSO_ModeInfo_second_union)); + write_log(_T(" PixelClock = %d\n"), get_long(amigamodeinfoptr + PSSO_ModeInfo_PixelClock)); } -static void DumpLibResolutionStructure (uaecptr amigalibresptr) +static void DumpLibResolutionStructure(uaecptr amigalibresptr) { - int i; - uaecptr amigamodeinfoptr; - struct LibResolution *uaememptr = (struct LibResolution *)get_mem_bank(amigalibresptr).xlateaddr(amigalibresptr); + int i; + uaecptr amigamodeinfoptr; + struct LibResolution *uaememptr = (struct LibResolution *)get_mem_bank(amigalibresptr).xlateaddr(amigalibresptr); - write_log (_T("LibResolution Structure Dump:\n")); + write_log(_T("LibResolution Structure Dump:\n")); - if (get_long (amigalibresptr + PSSO_LibResolution_DisplayID) == 0xFFFFFFFF) { - write_log (_T(" Finished With LibResolutions...\n")); - } else { - write_log (_T(" Name = %s\n"), uaememptr->P96ID); - write_log (_T(" DisplayID = 0x%x\n"), get_long (amigalibresptr + PSSO_LibResolution_DisplayID)); - write_log (_T(" Width = %d\n"), get_word (amigalibresptr + PSSO_LibResolution_Width)); - write_log (_T(" Height = %d\n"), get_word (amigalibresptr + PSSO_LibResolution_Height)); - write_log (_T(" Flags = %d\n"), get_word (amigalibresptr + PSSO_LibResolution_Flags)); - for (i = 0; i < MAXMODES; i++) { - amigamodeinfoptr = get_long (amigalibresptr + PSSO_LibResolution_Modes + i*4); - write_log (_T(" ModeInfo[%d] = 0x%x\n"), i, amigamodeinfoptr); - if (amigamodeinfoptr) - DumpModeInfoStructure (amigamodeinfoptr); - } - write_log (_T(" BoardInfo = 0x%x\n"), get_long (amigalibresptr + PSSO_LibResolution_BoardInfo)); - } + if (get_long(amigalibresptr + PSSO_LibResolution_DisplayID) == 0xFFFFFFFF) + { + write_log(_T(" Finished With LibResolutions...\n")); + } + else + { + write_log(_T(" Name = %s\n"), uaememptr->P96ID); + write_log(_T(" DisplayID = 0x%x\n"), get_long(amigalibresptr + PSSO_LibResolution_DisplayID)); + write_log(_T(" Width = %d\n"), get_word(amigalibresptr + PSSO_LibResolution_Width)); + write_log(_T(" Height = %d\n"), get_word(amigalibresptr + PSSO_LibResolution_Height)); + write_log(_T(" Flags = %d\n"), get_word(amigalibresptr + PSSO_LibResolution_Flags)); + for (i = 0; i < MAXMODES; i++) + { + amigamodeinfoptr = get_long(amigalibresptr + PSSO_LibResolution_Modes + i * 4); + write_log(_T(" ModeInfo[%d] = 0x%x\n"), i, amigamodeinfoptr); + if (amigamodeinfoptr) + DumpModeInfoStructure(amigamodeinfoptr); + } + write_log(_T(" BoardInfo = 0x%x\n"), get_long(amigalibresptr + PSSO_LibResolution_BoardInfo)); + } } -static TCHAR binary_byte[9] = { 0,0,0,0,0,0,0,0,0 }; +static TCHAR binary_byte[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static TCHAR *BuildBinaryString (uae_u8 value) +static TCHAR *BuildBinaryString(uae_u8 value) { - int i; - for (i = 0; i < 8; i++) { - binary_byte[i] = (value & (1 << (7 - i))) ? '#' : '.'; - } - return binary_byte; + int i; + for (i = 0; i < 8; i++) + { + binary_byte[i] = (value & (1 << (7 - i))) ? '#' : '.'; + } + return binary_byte; } -static void DumpPattern (struct Pattern *patt) +static void DumpPattern(struct Pattern *patt) { - uae_u8 *mem; - int row, col; - for (row = 0; row < (1 << patt->Size); row++) { - mem = patt->Memory + row * 2; - for (col = 0; col < 2; col++) { - write_log (_T("%s "), BuildBinaryString (*mem++)); - } - write_log (_T("\n")); - } + uae_u8 *mem; + int row, col; + for (row = 0; row < (1 << patt->Size); row++) + { + mem = patt->Memory + row * 2; + for (col = 0; col < 2; col++) + { + write_log(_T("%s "), BuildBinaryString(*mem++)); + } + write_log(_T("\n")); + } } -static void DumpTemplate (struct Template *tmp, unsigned long w, unsigned long h) +static void DumpTemplate(struct Template *tmp, unsigned long w, unsigned long h) { uae_u8 *mem = tmp->Memory; - unsigned int row, col, width; - width = (w + 7) >> 3; - write_log (_T("xoffset = %d, bpr = %d\n"), tmp->XOffset, tmp->BytesPerRow); - for (row = 0; row < h; row++) { + unsigned int row, col, width; + width = (w + 7) >> 3; + write_log(_T("xoffset = %d, bpr = %d\n"), tmp->XOffset, tmp->BytesPerRow); + for (row = 0; row < h; row++) + { mem = tmp->Memory + row * tmp->BytesPerRow; - for (col = 0; col < width; col++) { - write_log (_T("%s "), BuildBinaryString (*mem++)); - } - write_log (_T("\n")); - } + for (col = 0; col < width; col++) + { + write_log(_T("%s "), BuildBinaryString(*mem++)); + } + write_log(_T("\n")); + } } static void DumpLine(struct Line *line) { - if (line) { - write_log (_T("Line->X = %d\n"), line->X); - write_log (_T("Line->Y = %d\n"), line->Y); - write_log (_T("Line->Length = %d\n"), line->Length); - write_log (_T("Line->dX = %d\n"), line->dX); - write_log (_T("Line->dY = %d\n"), line->dY); - write_log (_T("Line->sDelta = %d\n"), line->sDelta); - write_log (_T("Line->lDelta = %d\n"), line->lDelta); - write_log (_T("Line->twoSDminusLD = %d\n"), line->twoSDminusLD); - write_log (_T("Line->LinePtrn = %d\n"), line->LinePtrn); - write_log (_T("Line->PatternShift = %d\n"), line->PatternShift); - write_log (_T("Line->FgPen = 0x%x\n"), line->FgPen); - write_log (_T("Line->BgPen = 0x%x\n"), line->BgPen); - write_log (_T("Line->Horizontal = %d\n"), line->Horizontal); - write_log (_T("Line->DrawMode = %d\n"), line->DrawMode); - write_log (_T("Line->Xorigin = %d\n"), line->Xorigin); - write_log (_T("Line->Yorigin = %d\n"), line->Yorigin); - } + if (line) + { + write_log(_T("Line->X = %d\n"), line->X); + write_log(_T("Line->Y = %d\n"), line->Y); + write_log(_T("Line->Length = %d\n"), line->Length); + write_log(_T("Line->dX = %d\n"), line->dX); + write_log(_T("Line->dY = %d\n"), line->dY); + write_log(_T("Line->sDelta = %d\n"), line->sDelta); + write_log(_T("Line->lDelta = %d\n"), line->lDelta); + write_log(_T("Line->twoSDminusLD = %d\n"), line->twoSDminusLD); + write_log(_T("Line->LinePtrn = %d\n"), line->LinePtrn); + write_log(_T("Line->PatternShift = %d\n"), line->PatternShift); + write_log(_T("Line->FgPen = 0x%x\n"), line->FgPen); + write_log(_T("Line->BgPen = 0x%x\n"), line->BgPen); + write_log(_T("Line->Horizontal = %d\n"), line->Horizontal); + write_log(_T("Line->DrawMode = %d\n"), line->DrawMode); + write_log(_T("Line->Xorigin = %d\n"), line->Xorigin); + write_log(_T("Line->Yorigin = %d\n"), line->Yorigin); + } } -static void ShowSupportedResolutions (void) +static void ShowSupportedResolutions(void) { - int i = 0; + int i = 0; - write_log (_T("-----------------\n")); - while (newmodes[i].depth >= 0) { - write_log (_T("%s\n"), newmodes[i].name); - i++; - } - write_log (_T("-----------------\n")); + write_log(_T("-----------------\n")); + while (newmodes[i].depth >= 0) + { + write_log(_T("%s\n"), newmodes[i].name); + i++; + } + write_log(_T("-----------------\n")); } #endif extern uae_u8 *natmem_offset; -static uae_u8 GetBytesPerPixel (uae_u32 RGBfmt) +static uae_u8 GetBytesPerPixel(uae_u32 RGBfmt) { - switch (RGBfmt) - { - case RGBFB_CLUT: - return 1; + switch (RGBfmt) + { + case RGBFB_CLUT: + return 1; - case RGBFB_A8R8G8B8: - case RGBFB_A8B8G8R8: - case RGBFB_R8G8B8A8: - case RGBFB_B8G8R8A8: - return 4; + case RGBFB_A8R8G8B8: + case RGBFB_A8B8G8R8: + case RGBFB_R8G8B8A8: + case RGBFB_B8G8R8A8: + return 4; - case RGBFB_B8G8R8: - case RGBFB_R8G8B8: - return 3; + case RGBFB_B8G8R8: + case RGBFB_R8G8B8: + return 3; - case RGBFB_R5G5B5: - case RGBFB_R5G6B5: - case RGBFB_R5G6B5PC: - case RGBFB_R5G5B5PC: - case RGBFB_B5G6R5PC: - case RGBFB_B5G5R5PC: - return 2; - } - return 0; + case RGBFB_R5G5B5: + case RGBFB_R5G6B5: + case RGBFB_R5G6B5PC: + case RGBFB_R5G5B5PC: + case RGBFB_B5G6R5PC: + case RGBFB_B5G5R5PC: + return 2; + default: return 0; + } } /* * Amiga <-> native structure conversion functions */ -static int CopyRenderInfoStructureA2U (uaecptr amigamemptr, struct RenderInfo *ri) +static int CopyRenderInfoStructureA2U(uaecptr amigamemptr, struct RenderInfo *ri) { - uaecptr memp = get_long (amigamemptr + PSSO_RenderInfo_Memory); + uaecptr memp = get_long(amigamemptr + PSSO_RenderInfo_Memory); - if (valid_address (memp, PSSO_RenderInfo_sizeof)) { - ri->Memory = get_real_address (memp); - ri->BytesPerRow = get_word (amigamemptr + PSSO_RenderInfo_BytesPerRow); - ri->RGBFormat = (RGBFTYPE)get_long (amigamemptr + PSSO_RenderInfo_RGBFormat); - return 1; - } - write_log (_T("ERROR - Invalid RenderInfo memory area...\n")); - return 0; + if (valid_address(memp, PSSO_RenderInfo_sizeof)) + { + ri->Memory = get_real_address(memp); + ri->BytesPerRow = get_word(amigamemptr + PSSO_RenderInfo_BytesPerRow); + ri->RGBFormat = RGBFTYPE(get_long(amigamemptr + PSSO_RenderInfo_RGBFormat)); + return 1; + } + write_log(_T("ERROR - Invalid RenderInfo memory area...\n")); + return 0; } -static int CopyPatternStructureA2U (uaecptr amigamemptr, struct Pattern *pattern) +static int CopyPatternStructureA2U(uaecptr amigamemptr, struct Pattern *pattern) { - uaecptr memp = get_long (amigamemptr + PSSO_Pattern_Memory); - if (valid_address (memp, PSSO_Pattern_sizeof)) { - pattern->Memory = get_real_address (memp); - pattern->XOffset = get_word (amigamemptr + PSSO_Pattern_XOffset); - pattern->YOffset = get_word (amigamemptr + PSSO_Pattern_YOffset); - pattern->FgPen = get_long (amigamemptr + PSSO_Pattern_FgPen); - pattern->BgPen = get_long (amigamemptr + PSSO_Pattern_BgPen); - pattern->Size = get_byte (amigamemptr + PSSO_Pattern_Size); - pattern->DrawMode = get_byte (amigamemptr + PSSO_Pattern_DrawMode); - return 1; - } - write_log (_T("ERROR - Invalid Pattern memory area...\n")); - return 0; + uaecptr memp = get_long(amigamemptr + PSSO_Pattern_Memory); + if (valid_address(memp, PSSO_Pattern_sizeof)) + { + pattern->Memory = get_real_address(memp); + pattern->XOffset = get_word(amigamemptr + PSSO_Pattern_XOffset); + pattern->YOffset = get_word(amigamemptr + PSSO_Pattern_YOffset); + pattern->FgPen = get_long(amigamemptr + PSSO_Pattern_FgPen); + pattern->BgPen = get_long(amigamemptr + PSSO_Pattern_BgPen); + pattern->Size = get_byte(amigamemptr + PSSO_Pattern_Size); + pattern->DrawMode = get_byte(amigamemptr + PSSO_Pattern_DrawMode); + return 1; + } + write_log(_T("ERROR - Invalid Pattern memory area...\n")); + return 0; } -static void CopyColorIndexMappingA2U (uaecptr amigamemptr, struct ColorIndexMapping *cim, int Bpp) +static void CopyColorIndexMappingA2U(uaecptr amigamemptr, struct ColorIndexMapping *cim, int Bpp) { - int i; - cim->ColorMask = get_long (amigamemptr); - for (i = 0; i < 256; i++, amigamemptr += 4) { - uae_u32 v = get_long (amigamemptr + 4); - endianswap (&v, Bpp); - cim->Colors[i] = v; - } + int i; + cim->ColorMask = get_long(amigamemptr); + for (i = 0; i < 256; i++, amigamemptr += 4) + { + uae_u32 v = get_long(amigamemptr + 4); + endianswap(&v, Bpp); + cim->Colors[i] = v; + } } -static int CopyBitMapStructureA2U (uaecptr amigamemptr, struct BitMap *bm) +static int CopyBitMapStructureA2U(uaecptr amigamemptr, struct BitMap *bm) { - int i; + int i; - bm->BytesPerRow = get_word (amigamemptr + PSSO_BitMap_BytesPerRow); - bm->Rows = get_word (amigamemptr + PSSO_BitMap_Rows); - bm->Flags = get_byte (amigamemptr + PSSO_BitMap_Flags); - bm->Depth = get_byte (amigamemptr + PSSO_BitMap_Depth); - - /* ARGH - why is THIS happening? */ - if( bm->Depth > 8 ) - bm->Depth = 8; + bm->BytesPerRow = get_word(amigamemptr + PSSO_BitMap_BytesPerRow); + bm->Rows = get_word(amigamemptr + PSSO_BitMap_Rows); + bm->Flags = get_byte(amigamemptr + PSSO_BitMap_Flags); + bm->Depth = get_byte(amigamemptr + PSSO_BitMap_Depth); - for (i = 0; i < bm->Depth; i++) { - uaecptr plane = get_long (amigamemptr + PSSO_BitMap_Planes + i * 4); - switch (plane) { - case 0: - bm->Planes[i] = &all_zeros_bitmap; - break; - case 0xFFFFFFFF: - bm->Planes[i] = &all_ones_bitmap; - break; - default: - if (valid_address (plane, bm->BytesPerRow * bm->Rows)) - bm->Planes[i] = get_real_address (plane); - else - return 0; - break; - } - } - return 1; + /* ARGH - why is THIS happening? */ + if (bm->Depth > 8) + bm->Depth = 8; + + for (i = 0; i < bm->Depth; i++) + { + uaecptr plane = get_long(amigamemptr + PSSO_BitMap_Planes + i * 4); + switch (plane) + { + case 0: + bm->Planes[i] = &all_zeros_bitmap; + break; + case 0xFFFFFFFF: + bm->Planes[i] = &all_ones_bitmap; + break; + default: + if (valid_address(plane, bm->BytesPerRow * bm->Rows)) + bm->Planes[i] = get_real_address(plane); + else + return 0; + break; + } + } + return 1; } -static int CopyTemplateStructureA2U (uaecptr amigamemptr, struct Template *tmpl) +static int CopyTemplateStructureA2U(uaecptr amigamemptr, struct Template *tmpl) { - uaecptr memp = get_long (amigamemptr + PSSO_Template_Memory); + uaecptr memp = get_long(amigamemptr + PSSO_Template_Memory); - if (valid_address (memp, sizeof(struct Template) )) { - tmpl->Memory = get_real_address (memp); - tmpl->BytesPerRow = get_word (amigamemptr + PSSO_Template_BytesPerRow); - tmpl->XOffset = get_byte (amigamemptr + PSSO_Template_XOffset); - tmpl->DrawMode = get_byte (amigamemptr + PSSO_Template_DrawMode); - tmpl->FgPen = get_long (amigamemptr + PSSO_Template_FgPen); - tmpl->BgPen = get_long (amigamemptr + PSSO_Template_BgPen); - return 1; - } - write_log (_T("ERROR - Invalid Template memory area...\n")); - return 0; + if (valid_address(memp, sizeof(struct Template))) + { + tmpl->Memory = get_real_address(memp); + tmpl->BytesPerRow = get_word(amigamemptr + PSSO_Template_BytesPerRow); + tmpl->XOffset = get_byte(amigamemptr + PSSO_Template_XOffset); + tmpl->DrawMode = get_byte(amigamemptr + PSSO_Template_DrawMode); + tmpl->FgPen = get_long(amigamemptr + PSSO_Template_FgPen); + tmpl->BgPen = get_long(amigamemptr + PSSO_Template_BgPen); + return 1; + } + write_log(_T("ERROR - Invalid Template memory area...\n")); + return 0; } /* list is Amiga address of list, in correct endian format for UAE * node is Amiga address of node, in correct endian format for UAE */ -static void AmigaListAddTail (uaecptr l, uaecptr n) +static void AmigaListAddTail(uaecptr l, uaecptr n) { - put_long (n + 0, l + 4); // n->ln_Succ = (struct Node *)&l->lh_Tail; - put_long (n + 4, get_long (l + 8)); // n->ln_Pred = l->lh_TailPred; - put_long (get_long (l + 8) + 0, n); // l->lh_TailPred->ln_Succ = n; - put_long (l + 8, n); // l->lh_TailPred = n; + put_long(n + 0, l + 4); // n->ln_Succ = (struct Node *)&l->lh_Tail; + put_long(n + 4, get_long(l + 8)); // n->ln_Pred = l->lh_TailPred; + put_long(get_long(l + 8) + 0, n); // l->lh_TailPred->ln_Succ = n; + put_long(l + 8, n); // l->lh_TailPred = n; } /* * Fill a rectangle in the screen. */ -static void do_fillrect_frame_buffer (struct RenderInfo *ri, int X, int Y, - int Width, int Height, uae_u32 Pen, int Bpp) +static void do_fillrect_frame_buffer(struct RenderInfo *ri, + int X, + int Y, + int Width, + int Height, + uae_u32 Pen, + int Bpp) { - int cols; - uae_u8 *dst; - int lines; - int bpr = ri->BytesPerRow; + int cols; + uae_u8 *dst; + int lines; + int bpr = ri->BytesPerRow; - dst = ri->Memory + X * Bpp + Y * ri->BytesPerRow; - endianswap (&Pen, Bpp); - switch (Bpp) - { + dst = ri->Memory + X * Bpp + Y * ri->BytesPerRow; + endianswap(&Pen, Bpp); + switch (Bpp) + { case 1: - for (lines = 0; lines < Height; lines++, dst += bpr) { - memset (dst, Pen, Width); - } - break; + for (lines = 0; lines < Height; lines++, dst += bpr) + { + memset(dst, Pen, Width); + } + break; case 2: - Pen |= Pen << 16; - for (lines = 0; lines < Height; lines++, dst += bpr) { - uae_u32 *p = (uae_u32*)dst; - for (cols = 0; cols < Width / 2; cols++) - *p++ = Pen; - if (Width & 1) - ((uae_u16*)p)[0] = Pen; - } - break; + Pen |= Pen << 16; + for (lines = 0; lines < Height; lines++, dst += bpr) + { + uae_u32 *p = reinterpret_cast(dst); + for (cols = 0; cols < Width / 2; cols++) + *p++ = Pen; + if (Width & 1) + reinterpret_cast(p)[0] = Pen; + } + break; case 3: - for (lines = 0; lines < Height; lines++, dst += bpr) { - uae_u8 *p = (uae_u8*)dst; - for (cols = 0; cols < Width; cols++) { - *p++ = Pen >> 0; - *p++ = Pen >> 8; - *p++ = Pen >> 16; - } - } - break; + for (lines = 0; lines < Height; lines++, dst += bpr) + { + uae_u8 *p = static_cast(dst); + for (cols = 0; cols < Width; cols++) + { + *p++ = Pen >> 0; + *p++ = Pen >> 8; + *p++ = Pen >> 16; + } + } + break; case 4: - for (lines = 0; lines < Height; lines++, dst += bpr) { - uae_u32 *p = (uae_u32*)dst; - for (cols = 0; cols < Width; cols++) - *p++ = Pen; - } - break; - } + for (lines = 0; lines < Height; lines++, dst += bpr) + { + uae_u32 *p = reinterpret_cast(dst); + for (cols = 0; cols < Width; cols++) + *p++ = Pen; + } + break; + default: break; + } } static int framecnt; int p96skipmode = -1; -static int doskip (void) +static int doskip(void) { - if (framecnt >= currprefs.gfx_framerate) - framecnt = 0; - return framecnt > 0; + if (framecnt >= currprefs.gfx_framerate) + framecnt = 0; + return framecnt > 0; } -void picasso_trigger_vblank (void) +void picasso_trigger_vblank(void) { - if (!ABI_interrupt || !uaegfx_base || !interrupt_enabled) - return; - put_long (uaegfx_base + CARD_IRQPTR, ABI_interrupt + PSSO_BoardInfo_SoftInterrupt); - put_byte (uaegfx_base + CARD_IRQFLAG, 1); + if (!ABI_interrupt || !uaegfx_base || !interrupt_enabled) + return; + put_long(uaegfx_base + CARD_IRQPTR, ABI_interrupt + PSSO_BoardInfo_SoftInterrupt); + put_byte(uaegfx_base + CARD_IRQFLAG, 1); } -void picasso_handle_vsync (void) +void picasso_handle_vsync(void) { if (currprefs.rtgmem_size == 0) return; - if (!picasso_on) { - picasso_trigger_vblank (); + if (!picasso_on) + { + picasso_trigger_vblank(); return; } - framecnt++; + framecnt++; - if (doskip () && p96skipmode == 0) { - ; - } else { - flushpixels (); - flush_screen(); - } + if (doskip() && p96skipmode == 0) + { + ; + } + else + { + flushpixels(); + flush_screen(); + } - picasso_trigger_vblank(); + picasso_trigger_vblank(); } static int set_panning_called = 0; -enum { +enum +{ - /* DEST = RGBFB_B8G8R8A8,32 */ - RGBFB_A8R8G8B8_32 = 1, - RGBFB_A8B8G8R8_32, - RGBFB_R8G8B8A8_32, - RGBFB_B8G8R8A8_32, - RGBFB_R8G8B8_32, - RGBFB_B8G8R8_32, - RGBFB_R5G6B5PC_32, - RGBFB_R5G5B5PC_32, - RGBFB_R5G6B5_32, - RGBFB_R5G5B5_32, - RGBFB_B5G6R5PC_32, - RGBFB_B5G5R5PC_32, - RGBFB_CLUT_RGBFB_32, + /* DEST = RGBFB_B8G8R8A8,32 */ + RGBFB_A8R8G8B8_32 = 1, + RGBFB_A8B8G8R8_32, + RGBFB_R8G8B8A8_32, + RGBFB_B8G8R8A8_32, + RGBFB_R8G8B8_32, + RGBFB_B8G8R8_32, + RGBFB_R5G6B5PC_32, + RGBFB_R5G5B5PC_32, + RGBFB_R5G6B5_32, + RGBFB_R5G5B5_32, + RGBFB_B5G6R5PC_32, + RGBFB_B5G5R5PC_32, + RGBFB_CLUT_RGBFB_32, - /* DEST = RGBFB_R5G6B5PC,16 */ - RGBFB_A8R8G8B8_16, - RGBFB_A8B8G8R8_16, - RGBFB_R8G8B8A8_16, - RGBFB_B8G8R8A8_16, - RGBFB_R8G8B8_16, - RGBFB_B8G8R8_16, - RGBFB_R5G6B5PC_16, - RGBFB_R5G5B5PC_16, - RGBFB_R5G6B5_16, - RGBFB_R5G5B5_16, - RGBFB_B5G6R5PC_16, - RGBFB_B5G5R5PC_16, - RGBFB_CLUT_RGBFB_16, + /* DEST = RGBFB_R5G6B5PC,16 */ + RGBFB_A8R8G8B8_16, + RGBFB_A8B8G8R8_16, + RGBFB_R8G8B8A8_16, + RGBFB_B8G8R8A8_16, + RGBFB_R8G8B8_16, + RGBFB_B8G8R8_16, + RGBFB_R5G6B5PC_16, + RGBFB_R5G5B5PC_16, + RGBFB_R5G6B5_16, + RGBFB_R5G5B5_16, + RGBFB_B5G6R5PC_16, + RGBFB_B5G5R5PC_16, + RGBFB_CLUT_RGBFB_16, - /* DEST = RGBFB_CLUT,8 */ - RGBFB_CLUT_8 + /* DEST = RGBFB_CLUT,8 */ + RGBFB_CLUT_8 }; -static int getconvert (int rgbformat, int pixbytes) +static int getconvert(int rgbformat, int pixbytes) { int v = 0; int d = pixbytes; switch (rgbformat) - { + { case RGBFB_CLUT: - if (d == 1) - v = RGBFB_CLUT_8; - else if (d == 2) - v = RGBFB_CLUT_RGBFB_16; - else if (d == 4) - v = RGBFB_CLUT_RGBFB_32; - break; + if (d == 1) + v = RGBFB_CLUT_8; + else if (d == 2) + v = RGBFB_CLUT_RGBFB_16; + else if (d == 4) + v = RGBFB_CLUT_RGBFB_32; + break; case RGBFB_B5G6R5PC: - if (d == 2) - v = RGBFB_B5G6R5PC_16; - else if (d == 4) - v = RGBFB_B5G6R5PC_32; - break; + if (d == 2) + v = RGBFB_B5G6R5PC_16; + else if (d == 4) + v = RGBFB_B5G6R5PC_32; + break; case RGBFB_R5G6B5PC: - if (d == 2) - v = RGBFB_R5G6B5PC_16; - else if (d == 4) - v = RGBFB_R5G6B5PC_32; - break; + if (d == 2) + v = RGBFB_R5G6B5PC_16; + else if (d == 4) + v = RGBFB_R5G6B5PC_32; + break; case RGBFB_R5G5B5PC: - if (d == 4) - v = RGBFB_R5G5B5PC_32; - else if (d == 2) - v = RGBFB_R5G5B5PC_16; - break; + if (d == 4) + v = RGBFB_R5G5B5PC_32; + else if (d == 2) + v = RGBFB_R5G5B5PC_16; + break; case RGBFB_R5G6B5: - if (d == 4) - v = RGBFB_R5G6B5_32; - else - v = RGBFB_R5G6B5_16; - break; + if (d == 4) + v = RGBFB_R5G6B5_32; + else + v = RGBFB_R5G6B5_16; + break; case RGBFB_R5G5B5: - if (d == 4) - v = RGBFB_R5G5B5_32; - else - v = RGBFB_R5G5B5_16; - break; + if (d == 4) + v = RGBFB_R5G5B5_32; + else + v = RGBFB_R5G5B5_16; + break; case RGBFB_B5G5R5PC: - if (d == 4) - v = RGBFB_B5G5R5PC_32; - else - v = RGBFB_B5G5R5PC_16; - break; + if (d == 4) + v = RGBFB_B5G5R5PC_32; + else + v = RGBFB_B5G5R5PC_16; + break; case RGBFB_A8R8G8B8: - if (d == 2) - v = RGBFB_A8R8G8B8_16; - else if (d == 4) - v = RGBFB_A8R8G8B8_32; - break; + if (d == 2) + v = RGBFB_A8R8G8B8_16; + else if (d == 4) + v = RGBFB_A8R8G8B8_32; + break; case RGBFB_R8G8B8: - if (d == 2) - v = RGBFB_R8G8B8_16; - else if (d == 4) - v = RGBFB_R8G8B8_32; - break; + if (d == 2) + v = RGBFB_R8G8B8_16; + else if (d == 4) + v = RGBFB_R8G8B8_32; + break; case RGBFB_B8G8R8: - if (d == 2) - v = RGBFB_B8G8R8_16; - else if (d == 4) - v = RGBFB_B8G8R8_32; - break; + if (d == 2) + v = RGBFB_B8G8R8_16; + else if (d == 4) + v = RGBFB_B8G8R8_32; + break; case RGBFB_A8B8G8R8: - if (d == 2) - v = RGBFB_A8B8G8R8_16; - else if (d == 4) - v = RGBFB_A8B8G8R8_32; - break; + if (d == 2) + v = RGBFB_A8B8G8R8_16; + else if (d == 4) + v = RGBFB_A8B8G8R8_32; + break; case RGBFB_B8G8R8A8: - if (d == 2) - v = RGBFB_B8G8R8A8_16; - else if (d == 4) - v = RGBFB_B8G8R8A8_32; - break; + if (d == 2) + v = RGBFB_B8G8R8A8_16; + else if (d == 4) + v = RGBFB_B8G8R8A8_32; + break; case RGBFB_R8G8B8A8: - if (d == 2) - v = RGBFB_R8G8B8A8_16; - else if (d == 4) - v = RGBFB_R8G8B8A8_32; - break; - } - return v; + if (d == 2) + v = RGBFB_R8G8B8A8_16; + else if (d == 4) + v = RGBFB_R8G8B8A8_32; + break; + default: + return v; + } + return v; } -static void setconvert (void) +static void setconvert(void) { - picasso_convert = getconvert (picasso96_state.RGBFormat, picasso_vidinfo.pixbytes); - host_mode = GetSurfacePixelFormat(); - picasso_palette (); - write_log (_T("RTG conversion: Depth=%d HostRGBF=%d P96RGBF=%d Mode=%d\n"), - picasso_vidinfo.pixbytes, host_mode, picasso96_state.RGBFormat, picasso_convert); + picasso_convert = getconvert(picasso96_state.RGBFormat, picasso_vidinfo.pixbytes); + host_mode = GetSurfacePixelFormat(); + picasso_palette(); + write_log(_T("RTG conversion: Depth=%d HostRGBF=%d P96RGBF=%d Mode=%d\n"), + picasso_vidinfo.pixbytes, + host_mode, + picasso96_state.RGBFormat, + picasso_convert); } /* Clear our screen, since we've got a new Picasso screen-mode, and refresh with the proper contents @@ -696,27 +741,30 @@ static void setconvert (void) * 2. Picasso-->Picasso transition, via SetPanning(). * 3. whenever the graphics code notifies us that the screen contents have been lost. */ -void picasso_refresh (void) +void picasso_refresh(void) { - struct RenderInfo ri; + struct RenderInfo ri; - if (!picasso_on) - return; - setconvert (); + if (!picasso_on) + return; + setconvert(); - /* Make sure that the first time we show a Picasso video mode, we don't blit any crap. - * We can do this by checking if we have an Address yet. - */ - if (picasso96_state.Address) { - /* blit the stuff from our static frame-buffer to the gfx-card */ - ri.Memory = gfxmemory + (picasso96_state.Address - gfxmem_start); - ri.BytesPerRow = picasso96_state.BytesPerRow; - ri.RGBFormat = (RGBFTYPE)picasso96_state.RGBFormat; + /* Make sure that the first time we show a Picasso video mode, we don't blit any crap. + * We can do this by checking if we have an Address yet. + */ + if (picasso96_state.Address) + { + /* blit the stuff from our static frame-buffer to the gfx-card */ + ri.Memory = gfxmemory + (picasso96_state.Address - gfxmem_start); + ri.BytesPerRow = picasso96_state.BytesPerRow; + ri.RGBFormat = RGBFTYPE(picasso96_state.RGBFormat); - flushpixels (); - } else { - write_log (_T("ERROR - picasso_refresh() can't refresh!\n")); - } + flushpixels(); + } + else + { + write_log(_T("ERROR - picasso_refresh() can't refresh!\n")); + } } #define BLT_SIZE 4 @@ -732,7 +780,7 @@ void picasso_refresh (void) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTSRC_32 #define BLT_FUNC(s,d) *d = ~(*s) -#include "p96_blit.cpp" +#include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYSRC_32 #define BLT_FUNC(s,d) *d = (*s) & ~(*d) #include "p96_blit.cpp" @@ -783,7 +831,7 @@ void picasso_refresh (void) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTSRC_24 #define BLT_FUNC(s,d) *d = ~(*s) -#include "p96_blit.cpp" +#include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYSRC_24 #define BLT_FUNC(s,d) *d = (*s) & ~(*d) #include "p96_blit.cpp" @@ -834,7 +882,7 @@ void picasso_refresh (void) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTSRC_16 #define BLT_FUNC(s,d) *d = ~(*s) -#include "p96_blit.cpp" +#include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYSRC_16 #define BLT_FUNC(s,d) *d = (*s) & ~(*d) #include "p96_blit.cpp" @@ -885,7 +933,7 @@ void picasso_refresh (void) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTSRC_8 #define BLT_FUNC(s,d) *d = ~(*s) -#include "p96_blit.cpp" +#include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYSRC_8 #define BLT_FUNC(s,d) *d = (*s) & ~(*d) #include "p96_blit.cpp" @@ -928,135 +976,279 @@ void picasso_refresh (void) /* * Functions to perform an action on the frame-buffer */ -static int do_blitrect_frame_buffer (struct RenderInfo *ri, struct - RenderInfo *dstri, unsigned long srcx, unsigned long srcy, - unsigned long dstx, unsigned long dsty, unsigned long width, unsigned - long height, uae_u8 mask, BLIT_OPCODE opcode) +static int do_blitrect_frame_buffer(struct RenderInfo *ri, + struct + RenderInfo *dstri, + unsigned long srcx, + unsigned long srcy, + unsigned long dstx, + unsigned long dsty, + unsigned long width, + unsigned + long height, + uae_u8 mask, + BLIT_OPCODE opcode) { - uae_u8 *src, *dst; - uae_u8 Bpp = GetBytesPerPixel (ri->RGBFormat); - unsigned long total_width = width * Bpp; + uae_u8 *src, *dst; + uae_u8 Bpp = GetBytesPerPixel(ri->RGBFormat); + unsigned long total_width = width * Bpp; - src = ri->Memory + srcx*Bpp + srcy*ri->BytesPerRow; - dst = dstri->Memory + dstx*Bpp + dsty*dstri->BytesPerRow; + src = ri->Memory + srcx*Bpp + srcy*ri->BytesPerRow; + dst = dstri->Memory + dstx*Bpp + dsty*dstri->BytesPerRow; - if (mask != 0xFF && Bpp > 1) { - write_log (_T("WARNING - BlitRect() has mask 0x%x with Bpp %d.\n"), mask, Bpp); - } + if (mask != 0xFF && Bpp > 1) + { + write_log(_T("WARNING - BlitRect() has mask 0x%x with Bpp %d.\n"), mask, Bpp); + } - P96TRACE ((_T("(%dx%d)=(%dx%d)=(%dx%d)=%d\n"), srcx, srcy, dstx, dsty, width, height, opcode)); - if (mask == 0xFF || Bpp > 1) { + P96TRACE((_T("(%dx%d)=(%dx%d)=(%dx%d)=%d\n"), srcx, srcy, dstx, dsty, width, height, opcode)); + if (mask == 0xFF || Bpp > 1) + { - if(opcode == BLIT_SRC) { - /* handle normal case efficiently */ - if (ri->Memory == dstri->Memory && dsty == srcy) { - unsigned long i; - for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) - memmove (dst, src, total_width); - } else if (dsty < srcy) { - unsigned long i; - for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) - memcpy (dst, src, total_width); - } else { - unsigned long i; - src += (height-1) * ri->BytesPerRow; - dst += (height-1) * dstri->BytesPerRow; - for (i = 0; i < height; i++, src -= ri->BytesPerRow, dst -= dstri->BytesPerRow) - memcpy (dst, src, total_width); - } - return 1; + if (opcode == BLIT_SRC) + { + /* handle normal case efficiently */ + if (ri->Memory == dstri->Memory && dsty == srcy) + { + unsigned long i; + for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) + memmove(dst, src, total_width); + } + else if (dsty < srcy) + { + unsigned long i; + for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) + memcpy(dst, src, total_width); + } + else + { + unsigned long i; + src += (height - 1) * ri->BytesPerRow; + dst += (height - 1) * dstri->BytesPerRow; + for (i = 0; i < height; i++, src -= ri->BytesPerRow, dst -= dstri->BytesPerRow) + memcpy(dst, src, total_width); + } + return 1; - } else if (Bpp == 4) { + } + else if (Bpp == 4) + { - /* 32-bit optimized */ - switch (opcode) - { - case BLIT_FALSE: BLIT_FALSE_32 (PARMS); break; - case BLIT_NOR: BLIT_NOR_32 (PARMS); break; - case BLIT_ONLYDST: BLIT_ONLYDST_32 (PARMS); break; - case BLIT_NOTSRC: BLIT_NOTSRC_32 (PARMS); break; - case BLIT_ONLYSRC: BLIT_ONLYSRC_32 (PARMS); break; - case BLIT_NOTDST: BLIT_NOTDST_32 (PARMS); break; - case BLIT_EOR: BLIT_EOR_32 (PARMS); break; - case BLIT_NAND: BLIT_NAND_32 (PARMS); break; - case BLIT_AND: BLIT_AND_32 (PARMS); break; - case BLIT_NEOR: BLIT_NEOR_32 (PARMS); break; - case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_32 (PARMS); break; - case BLIT_NOTONLYDST: BLIT_NOTONLYDST_32 (PARMS); break; - case BLIT_OR: BLIT_OR_32 (PARMS); break; - case BLIT_TRUE: BLIT_TRUE_32 (PARMS); break; - case BLIT_SWAP: BLIT_SWAP_32 (PARMS); break; - } - } else if (Bpp == 3) { + /* 32-bit optimized */ + switch (opcode) + { + case BLIT_FALSE: + BLIT_FALSE_32(PARMS); + break; + case BLIT_NOR: + BLIT_NOR_32(PARMS); + break; + case BLIT_ONLYDST: + BLIT_ONLYDST_32(PARMS); + break; + case BLIT_NOTSRC: + BLIT_NOTSRC_32(PARMS); + break; + case BLIT_ONLYSRC: + BLIT_ONLYSRC_32(PARMS); + break; + case BLIT_NOTDST: + BLIT_NOTDST_32(PARMS); + break; + case BLIT_EOR: + BLIT_EOR_32(PARMS); + break; + case BLIT_NAND: + BLIT_NAND_32(PARMS); + break; + case BLIT_AND: + BLIT_AND_32(PARMS); + break; + case BLIT_NEOR: + BLIT_NEOR_32(PARMS); + break; + case BLIT_NOTONLYSRC: + BLIT_NOTONLYSRC_32(PARMS); + break; + case BLIT_NOTONLYDST: + BLIT_NOTONLYDST_32(PARMS); + break; + case BLIT_OR: + BLIT_OR_32(PARMS); + break; + case BLIT_TRUE: + BLIT_TRUE_32(PARMS); + break; + case BLIT_SWAP: + BLIT_SWAP_32(PARMS); + break; + } + } + else if (Bpp == 3) + { - /* 24-bit (not very) optimized */ - switch (opcode) - { - case BLIT_FALSE: BLIT_FALSE_24 (PARMS); break; - case BLIT_NOR: BLIT_NOR_24 (PARMS); break; - case BLIT_ONLYDST: BLIT_ONLYDST_24 (PARMS); break; - case BLIT_NOTSRC: BLIT_NOTSRC_24 (PARMS); break; - case BLIT_ONLYSRC: BLIT_ONLYSRC_24 (PARMS); break; - case BLIT_NOTDST: BLIT_NOTDST_24 (PARMS); break; - case BLIT_EOR: BLIT_EOR_24 (PARMS); break; - case BLIT_NAND: BLIT_NAND_24 (PARMS); break; - case BLIT_AND: BLIT_AND_24 (PARMS); break; - case BLIT_NEOR: BLIT_NEOR_24 (PARMS); break; - case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_24 (PARMS); break; - case BLIT_NOTONLYDST: BLIT_NOTONLYDST_24 (PARMS); break; - case BLIT_OR: BLIT_OR_24 (PARMS); break; - case BLIT_TRUE: BLIT_TRUE_24 (PARMS); break; - case BLIT_SWAP: BLIT_SWAP_24 (PARMS); break; - } - - } else if (Bpp == 2) { + /* 24-bit (not very) optimized */ + switch (opcode) + { + case BLIT_FALSE: + BLIT_FALSE_24(PARMS); + break; + case BLIT_NOR: + BLIT_NOR_24(PARMS); + break; + case BLIT_ONLYDST: + BLIT_ONLYDST_24(PARMS); + break; + case BLIT_NOTSRC: + BLIT_NOTSRC_24(PARMS); + break; + case BLIT_ONLYSRC: + BLIT_ONLYSRC_24(PARMS); + break; + case BLIT_NOTDST: + BLIT_NOTDST_24(PARMS); + break; + case BLIT_EOR: + BLIT_EOR_24(PARMS); + break; + case BLIT_NAND: + BLIT_NAND_24(PARMS); + break; + case BLIT_AND: + BLIT_AND_24(PARMS); + break; + case BLIT_NEOR: + BLIT_NEOR_24(PARMS); + break; + case BLIT_NOTONLYSRC: + BLIT_NOTONLYSRC_24(PARMS); + break; + case BLIT_NOTONLYDST: + BLIT_NOTONLYDST_24(PARMS); + break; + case BLIT_OR: + BLIT_OR_24(PARMS); + break; + case BLIT_TRUE: + BLIT_TRUE_24(PARMS); + break; + case BLIT_SWAP: + BLIT_SWAP_24(PARMS); + break; + } - /* 16-bit optimized */ - switch (opcode) - { - case BLIT_FALSE: BLIT_FALSE_16 (PARMS); break; - case BLIT_NOR: BLIT_NOR_16 (PARMS); break; - case BLIT_ONLYDST: BLIT_ONLYDST_16 (PARMS); break; - case BLIT_NOTSRC: BLIT_NOTSRC_16 (PARMS); break; - case BLIT_ONLYSRC: BLIT_ONLYSRC_16 (PARMS); break; - case BLIT_NOTDST: BLIT_NOTDST_16 (PARMS); break; - case BLIT_EOR: BLIT_EOR_16 (PARMS); break; - case BLIT_NAND: BLIT_NAND_16 (PARMS); break; - case BLIT_AND: BLIT_AND_16 (PARMS); break; - case BLIT_NEOR: BLIT_NEOR_16 (PARMS); break; - case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_16 (PARMS); break; - case BLIT_NOTONLYDST: BLIT_NOTONLYDST_16 (PARMS); break; - case BLIT_OR: BLIT_OR_16 (PARMS); break; - case BLIT_TRUE: BLIT_TRUE_16 (PARMS); break; - case BLIT_SWAP: BLIT_SWAP_16 (PARMS); break; - } + } + else if (Bpp == 2) + { - } else if (Bpp == 1) { + /* 16-bit optimized */ + switch (opcode) + { + case BLIT_FALSE: + BLIT_FALSE_16(PARMS); + break; + case BLIT_NOR: + BLIT_NOR_16(PARMS); + break; + case BLIT_ONLYDST: + BLIT_ONLYDST_16(PARMS); + break; + case BLIT_NOTSRC: + BLIT_NOTSRC_16(PARMS); + break; + case BLIT_ONLYSRC: + BLIT_ONLYSRC_16(PARMS); + break; + case BLIT_NOTDST: + BLIT_NOTDST_16(PARMS); + break; + case BLIT_EOR: + BLIT_EOR_16(PARMS); + break; + case BLIT_NAND: + BLIT_NAND_16(PARMS); + break; + case BLIT_AND: + BLIT_AND_16(PARMS); + break; + case BLIT_NEOR: + BLIT_NEOR_16(PARMS); + break; + case BLIT_NOTONLYSRC: + BLIT_NOTONLYSRC_16(PARMS); + break; + case BLIT_NOTONLYDST: + BLIT_NOTONLYDST_16(PARMS); + break; + case BLIT_OR: + BLIT_OR_16(PARMS); + break; + case BLIT_TRUE: + BLIT_TRUE_16(PARMS); + break; + case BLIT_SWAP: + BLIT_SWAP_16(PARMS); + break; + } - /* 8-bit optimized */ - switch (opcode) - { - case BLIT_FALSE: BLIT_FALSE_8 (PARMS); break; - case BLIT_NOR: BLIT_NOR_8 (PARMS); break; - case BLIT_ONLYDST: BLIT_ONLYDST_8 (PARMS); break; - case BLIT_NOTSRC: BLIT_NOTSRC_8 (PARMS); break; - case BLIT_ONLYSRC: BLIT_ONLYSRC_8 (PARMS); break; - case BLIT_NOTDST: BLIT_NOTDST_8 (PARMS); break; - case BLIT_EOR: BLIT_EOR_8 (PARMS); break; - case BLIT_NAND: BLIT_NAND_8 (PARMS); break; - case BLIT_AND: BLIT_AND_8 (PARMS); break; - case BLIT_NEOR: BLIT_NEOR_8 (PARMS); break; - case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_8 (PARMS); break; - case BLIT_NOTONLYDST: BLIT_NOTONLYDST_8 (PARMS); break; - case BLIT_OR: BLIT_OR_8 (PARMS); break; - case BLIT_TRUE: BLIT_TRUE_8 (PARMS); break; - case BLIT_SWAP: BLIT_SWAP_8 (PARMS); break; - } + } + else if (Bpp == 1) + { - } - return 1; - } - return 0; + /* 8-bit optimized */ + switch (opcode) + { + case BLIT_FALSE: + BLIT_FALSE_8(PARMS); + break; + case BLIT_NOR: + BLIT_NOR_8(PARMS); + break; + case BLIT_ONLYDST: + BLIT_ONLYDST_8(PARMS); + break; + case BLIT_NOTSRC: + BLIT_NOTSRC_8(PARMS); + break; + case BLIT_ONLYSRC: + BLIT_ONLYSRC_8(PARMS); + break; + case BLIT_NOTDST: + BLIT_NOTDST_8(PARMS); + break; + case BLIT_EOR: + BLIT_EOR_8(PARMS); + break; + case BLIT_NAND: + BLIT_NAND_8(PARMS); + break; + case BLIT_AND: + BLIT_AND_8(PARMS); + break; + case BLIT_NEOR: + BLIT_NEOR_8(PARMS); + break; + case BLIT_NOTONLYSRC: + BLIT_NOTONLYSRC_8(PARMS); + break; + case BLIT_NOTONLYDST: + BLIT_NOTONLYDST_8(PARMS); + break; + case BLIT_OR: + BLIT_OR_8(PARMS); + break; + case BLIT_TRUE: + BLIT_TRUE_8(PARMS); + break; + case BLIT_SWAP: + BLIT_SWAP_8(PARMS); + break; + } + + } + return 1; + } + return 0; } /* @@ -1066,9 +1258,9 @@ Inputs: a0: struct BoardInfo *bi d7: RGBFTYPE RGBFormat */ -static uae_u32 REGPARAM2 picasso_SetSpritePosition (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetSpritePosition(TrapContext *ctx) { - uaecptr bi = m68k_areg (regs, 0); + uaecptr bi = m68k_areg(regs, 0); boardinfo = bi; return 0; } @@ -1086,9 +1278,9 @@ d7: RGBFTYPE RGBFormat This function changes one of the possible three colors of the hardware sprite. */ -static uae_u32 REGPARAM2 picasso_SetSpriteColor (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetSpriteColor(TrapContext *ctx) { - uaecptr bi = m68k_areg (regs, 0); + uaecptr bi = m68k_areg(regs, 0); boardinfo = bi; return 0; } @@ -1119,11 +1311,11 @@ planes for one image line respectively. You have to double each pixel horizontal used in this case already assume a zoomed sprite, only the sprite data is not zoomed yet. You will have to compensate for this when accounting for hotspot offsets and sprite dimensions. */ -static uae_u32 REGPARAM2 picasso_SetSpriteImage (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetSpriteImage(TrapContext *ctx) { - uaecptr bi = m68k_areg (regs, 0); + uaecptr bi = m68k_areg(regs, 0); boardinfo = bi; - return 0; + return 0; } /* @@ -1135,7 +1327,7 @@ d7: RGBFTYPE RGBFormat This function activates or deactivates the hardware sprite. */ -static uae_u32 REGPARAM2 picasso_SetSprite (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetSprite(TrapContext *ctx) { return 0; } @@ -1155,83 +1347,89 @@ static uae_u32 REGPARAM2 picasso_SetSprite (TrapContext *ctx) * BoardInfo struct supplied by the caller, the rtg.library, for example * the MemoryBase, MemorySize and RegisterBase fields. */ -static void picasso96_alloc2 (TrapContext *ctx); -static uae_u32 REGPARAM2 picasso_FindCard (TrapContext *ctx) +static void picasso96_alloc2(TrapContext *ctx); +static uae_u32 REGPARAM2 picasso_FindCard(TrapContext *ctx) { - uaecptr AmigaBoardInfo = m68k_areg (regs, 0); - /* NOTES: See BoardInfo struct definition in Picasso96 dev info */ + uaecptr AmigaBoardInfo = m68k_areg(regs, 0); + /* NOTES: See BoardInfo struct definition in Picasso96 dev info */ if (!uaegfx_active || !gfxmem_start) - return 0; - if (uaegfx_base) { - put_long (uaegfx_base + CARD_BOARDINFO, AmigaBoardInfo); - } else if (uaegfx_old) { - picasso96_alloc2 (ctx); + return 0; + if (uaegfx_base) + { + put_long(uaegfx_base + CARD_BOARDINFO, AmigaBoardInfo); } - boardinfo = AmigaBoardInfo; + else if (uaegfx_old) + { + picasso96_alloc2(ctx); + } + boardinfo = AmigaBoardInfo; - if (allocated_gfxmem && !picasso96_state.CardFound) { - /* Fill in MemoryBase, MemorySize */ - put_long (AmigaBoardInfo + PSSO_BoardInfo_MemoryBase, gfxmem_start); - put_long (AmigaBoardInfo + PSSO_BoardInfo_MemorySize, allocated_gfxmem - reserved_gfxmem); - picasso96_state.CardFound = 1; /* mark our "card" as being found */ - return -1; - } else - return 0; + if (allocated_gfxmem && !picasso96_state.CardFound) + { + /* Fill in MemoryBase, MemorySize */ + put_long(AmigaBoardInfo + PSSO_BoardInfo_MemoryBase, gfxmem_start); + put_long(AmigaBoardInfo + PSSO_BoardInfo_MemorySize, allocated_gfxmem - reserved_gfxmem); + picasso96_state.CardFound = 1; /* mark our "card" as being found */ + return -1; + } + else + return 0; } -static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res, int width, int height, int depth) +static void FillBoardInfo(uaecptr amigamemptr, struct LibResolution *res, int width, int height, int depth) { - int i; + int i; - switch (depth) - { - case 8: - res->Modes[CHUNKY] = amigamemptr; - break; + switch (depth) + { + case 8: + res->Modes[CHUNKY] = amigamemptr; + break; case 15: case 16: - res->Modes[HICOLOR] = amigamemptr; - break; + res->Modes[HICOLOR] = amigamemptr; + break; case 24: - res->Modes[TRUECOLOR] = amigamemptr; - break; - default: - res->Modes[TRUEALPHA] = amigamemptr; - break; - } - for (i = 0; i < PSSO_ModeInfo_sizeof; i++) - put_byte (amigamemptr + i, 0); + res->Modes[TRUECOLOR] = amigamemptr; + break; + default: + res->Modes[TRUEALPHA] = amigamemptr; + break; + } + for (i = 0; i < PSSO_ModeInfo_sizeof; i++) + put_byte(amigamemptr + i, 0); - put_word (amigamemptr + PSSO_ModeInfo_Width, width); - put_word (amigamemptr + PSSO_ModeInfo_Height, height); - put_byte (amigamemptr + PSSO_ModeInfo_Depth, depth); - put_byte (amigamemptr + PSSO_ModeInfo_Flags, 0); - put_word (amigamemptr + PSSO_ModeInfo_HorTotal, width); - put_word (amigamemptr + PSSO_ModeInfo_HorBlankSize, 0); - put_word (amigamemptr + PSSO_ModeInfo_HorSyncStart, 0); - put_word (amigamemptr + PSSO_ModeInfo_HorSyncSize, 0); - put_byte (amigamemptr + PSSO_ModeInfo_HorSyncSkew, 0); - put_byte (amigamemptr + PSSO_ModeInfo_HorEnableSkew, 0); + put_word(amigamemptr + PSSO_ModeInfo_Width, width); + put_word(amigamemptr + PSSO_ModeInfo_Height, height); + put_byte(amigamemptr + PSSO_ModeInfo_Depth, depth); + put_byte(amigamemptr + PSSO_ModeInfo_Flags, 0); + put_word(amigamemptr + PSSO_ModeInfo_HorTotal, width); + put_word(amigamemptr + PSSO_ModeInfo_HorBlankSize, 0); + put_word(amigamemptr + PSSO_ModeInfo_HorSyncStart, 0); + put_word(amigamemptr + PSSO_ModeInfo_HorSyncSize, 0); + put_byte(amigamemptr + PSSO_ModeInfo_HorSyncSkew, 0); + put_byte(amigamemptr + PSSO_ModeInfo_HorEnableSkew, 0); - put_word (amigamemptr + PSSO_ModeInfo_VerTotal, height); - put_word (amigamemptr + PSSO_ModeInfo_VerBlankSize, 0); - put_word (amigamemptr + PSSO_ModeInfo_VerSyncStart, 0); - put_word (amigamemptr + PSSO_ModeInfo_VerSyncSize, 0); + put_word(amigamemptr + PSSO_ModeInfo_VerTotal, height); + put_word(amigamemptr + PSSO_ModeInfo_VerBlankSize, 0); + put_word(amigamemptr + PSSO_ModeInfo_VerSyncStart, 0); + put_word(amigamemptr + PSSO_ModeInfo_VerSyncSize, 0); - put_byte (amigamemptr + PSSO_ModeInfo_first_union, 98); - put_byte (amigamemptr + PSSO_ModeInfo_second_union, 14); + put_byte(amigamemptr + PSSO_ModeInfo_first_union, 98); + put_byte(amigamemptr + PSSO_ModeInfo_second_union, 14); - put_long (amigamemptr + PSSO_ModeInfo_PixelClock, - width * height * (currprefs.ntscmode ? 60 : 50)); + put_long(amigamemptr + PSSO_ModeInfo_PixelClock, + width * height * (currprefs.ntscmode ? 60 : 50)); } -struct modeids { - int width, height; - int id; +struct modeids +{ + int width, height; + int id; }; static struct modeids mi[] = { - /* "original" modes */ + /* "original" modes */ 320, 200, 0, 320, 240, 1, @@ -1245,7 +1443,7 @@ static struct modeids mi[] = 320, 256, 9, 640, 512,10, - /* new modes */ + /* new modes */ 704, 480, 129, 704, 576, 130, @@ -1293,51 +1491,55 @@ static struct modeids mi[] = 1088, 612, 172, 1152, 648, 173, 1776,1000, 174, - 2560,1440, 175, + 2560,1440, 175, -1,-1,0 }; static int AssignModeID(int w, int h, int *unkcnt) { - int i; + int i; - for (i = 0; mi[i].width > 0; i++) { - if (w == mi[i].width && h == mi[i].height) - return 0x50001000 | (mi[i].id * 0x10000); - } - (*unkcnt)++; - write_log (_T("P96: Non-unique mode %dx%d\n"), w, h); - return 0x51001000 - (*unkcnt) * 0x10000; + for (i = 0; mi[i].width > 0; i++) + { + if (w == mi[i].width && h == mi[i].height) + return 0x50001000 | (mi[i].id * 0x10000); + } + (*unkcnt)++; + write_log(_T("P96: Non-unique mode %dx%d\n"), w, h); + return 0x51001000 - (*unkcnt) * 0x10000; } static uaecptr picasso96_amem, picasso96_amemend; -static void CopyLibResolutionStructureU2A (struct LibResolution *libres, uaecptr amigamemptr) +static void CopyLibResolutionStructureU2A(struct LibResolution *libres, uaecptr amigamemptr) { - int i; + int i; - for (i = 0; i < PSSO_LibResolution_sizeof; i++) - put_byte (amigamemptr + i, 0); - for (i = 0; i < strlen (libres->P96ID); i++) - put_byte (amigamemptr + PSSO_LibResolution_P96ID + i, libres->P96ID[i]); - put_long (amigamemptr + PSSO_LibResolution_DisplayID, libres->DisplayID); - put_word (amigamemptr + PSSO_LibResolution_Width, libres->Width); - put_word (amigamemptr + PSSO_LibResolution_Height, libres->Height); - put_word (amigamemptr + PSSO_LibResolution_Flags, libres->Flags); - for (i = 0; i < MAXMODES; i++) - put_long (amigamemptr + PSSO_LibResolution_Modes + i * 4, libres->Modes[i]); - put_long (amigamemptr + 10, amigamemptr + PSSO_LibResolution_P96ID); - put_long (amigamemptr + PSSO_LibResolution_BoardInfo, libres->BoardInfo); + for (i = 0; i < PSSO_LibResolution_sizeof; i++) + put_byte(amigamemptr + i, 0); + for (i = 0; i < strlen(libres->P96ID); i++) + put_byte(amigamemptr + PSSO_LibResolution_P96ID + i, libres->P96ID[i]); + put_long(amigamemptr + PSSO_LibResolution_DisplayID, libres->DisplayID); + put_word(amigamemptr + PSSO_LibResolution_Width, libres->Width); + put_word(amigamemptr + PSSO_LibResolution_Height, libres->Height); + put_word(amigamemptr + PSSO_LibResolution_Flags, libres->Flags); + for (i = 0; i < MAXMODES; i++) + put_long(amigamemptr + PSSO_LibResolution_Modes + i * 4, libres->Modes[i]); + put_long(amigamemptr + 10, amigamemptr + PSSO_LibResolution_P96ID); + put_long(amigamemptr + PSSO_LibResolution_BoardInfo, libres->BoardInfo); } -static void init_alloc (TrapContext *ctx, int size) +static void init_alloc(TrapContext *ctx, int size) { - picasso96_amem = picasso96_amemend = 0; - if (uaegfx_base) { - int size = get_long (uaegfx_base + CARD_RESLISTSIZE); - picasso96_amem = get_long (uaegfx_base + CARD_RESLIST); - } else if (uaegfx_active) { + picasso96_amem = picasso96_amemend = 0; + if (uaegfx_base) + { + int size = get_long(uaegfx_base + CARD_RESLISTSIZE); + picasso96_amem = get_long(uaegfx_base + CARD_RESLIST); + } + else if (uaegfx_active) + { reserved_gfxmem = size; picasso96_amem = gfxmem_start + allocated_gfxmem - size; } @@ -1345,236 +1547,252 @@ static void init_alloc (TrapContext *ctx, int size) write_log(_T("P96 RESINFO: %08X-%08X (%d,%d)\n"), picasso96_amem, picasso96_amemend, size / PSSO_ModeInfo_sizeof, size); } -static int p96depth (int depth) +static int p96depth(int depth) { - uae_u32 f = currprefs.picasso96_modeflags; - int ok = 0; + uae_u32 f = currprefs.picasso96_modeflags; + int ok = 0; - if (depth == 8 && (f & RGBFF_CLUT)) - ok = 1; - if (depth == 15 && (f & (RGBFF_R5G5B5PC | RGBFF_R5G5B5 | RGBFF_B5G5R5PC))) - ok = 2; - if (depth == 16 && (f & (RGBFF_R5G6B5PC | RGBFF_R5G6B5 | RGBFF_B5G6R5PC))) - ok = 2; - if (depth == 24 && (f & (RGBFF_R8G8B8 | RGBFF_B8G8R8))) - ok = 3; - if (depth == 32 && (f & (RGBFF_A8R8G8B8 | RGBFF_A8B8G8R8 | RGBFF_R8G8B8A8 | RGBFF_B8G8R8A8))) - ok = 4; - return ok; + if (depth == 8 && (f & RGBFF_CLUT)) + ok = 1; + if (depth == 15 && (f & (RGBFF_R5G5B5PC | RGBFF_R5G5B5 | RGBFF_B5G5R5PC))) + ok = 2; + if (depth == 16 && (f & (RGBFF_R5G6B5PC | RGBFF_R5G6B5 | RGBFF_B5G6R5PC))) + ok = 2; + if (depth == 24 && (f & (RGBFF_R8G8B8 | RGBFF_B8G8R8))) + ok = 3; + if (depth == 32 && (f & (RGBFF_A8R8G8B8 | RGBFF_A8B8G8R8 | RGBFF_R8G8B8A8 | RGBFF_B8G8R8A8))) + ok = 4; + return ok; } static int missmodes[] = { 640, 400, 640, 480, 800, 480, -1 }; -static uaecptr uaegfx_card_install (TrapContext *ctx, uae_u32 size); +static uaecptr uaegfx_card_install(TrapContext *ctx, uae_u32 size); -static void picasso96_alloc2 (TrapContext *ctx) +static void picasso96_alloc2(TrapContext *ctx) { - int i, j, size, cnt; - int misscnt, depths; + int i, j, size, cnt; + int misscnt, depths; - xfree (newmodes); - newmodes = NULL; - picasso96_amem = picasso96_amemend = 0; - if (allocated_gfxmem == 0) - return; - misscnt = 0; - newmodes = xmalloc (struct PicassoResolution, MAX_PICASSO_MODES); - size = 0; + xfree(newmodes); + newmodes = NULL; + picasso96_amem = picasso96_amemend = 0; + if (allocated_gfxmem == 0) + return; + misscnt = 0; + newmodes = xmalloc(struct PicassoResolution, MAX_PICASSO_MODES); + size = 0; - depths = 0; - if (p96depth (8)) - depths++; - if (p96depth (15)) - depths++; - if (p96depth (16)) - depths++; - if (p96depth (24)) - depths++; - if (p96depth (32)) - depths++; + depths = 0; + if (p96depth(8)) + depths++; + if (p96depth(15)) + depths++; + if (p96depth(16)) + depths++; + if (p96depth(24)) + depths++; + if (p96depth(32)) + depths++; - i = 0; - while (DisplayModes[i].depth >= 0) { - for (j = 0; missmodes[j * 2] >= 0; j++) { - if (DisplayModes[i].res.width == missmodes[j * 2 + 0] && DisplayModes[i].res.height == missmodes[j * 2 + 1]) { - missmodes[j * 2 + 0] = 0; - missmodes[j * 2 + 1] = 0; - } - } - i++; - } + i = 0; + while (DisplayModes[i].depth >= 0) + { + for (j = 0; missmodes[j * 2] >= 0; j++) + { + if (DisplayModes[i].res.width == missmodes[j * 2 + 0] && DisplayModes[i].res.height == missmodes[j * 2 + 1]) + { + missmodes[j * 2 + 0] = 0; + missmodes[j * 2 + 1] = 0; + } + } + i++; + } - cnt = 0; - i = 0; - while (DisplayModes[i].depth >= 0) { - j = i; - size += PSSO_LibResolution_sizeof; - while (missmodes[misscnt * 2] == 0) - misscnt++; - if (missmodes[misscnt * 2] >= 0) { - int w = DisplayModes[i].res.width; - int h = DisplayModes[i].res.height; - if (w > missmodes[misscnt * 2 + 0] || (w == missmodes[misscnt * 2 + 0] && h > missmodes[misscnt * 2 + 1])) { - struct PicassoResolution *pr = &newmodes[cnt]; - memcpy (pr, &DisplayModes[i], sizeof (struct PicassoResolution)); - pr->res.width = missmodes[misscnt * 2 + 0]; - pr->res.height = missmodes[misscnt * 2 + 1]; - _stprintf (pr->name, _T("%dx%d FAKE"), pr->res.width, pr->res.height); - size += PSSO_ModeInfo_sizeof * depths; - cnt++; - misscnt++; - continue; - } - } - memcpy (&newmodes[cnt], &DisplayModes[i], sizeof (struct PicassoResolution)); - size += PSSO_ModeInfo_sizeof * depths; - i++; - cnt++; - while (DisplayModes[i].depth >= 0 - && DisplayModes[i].res.width == DisplayModes[j].res.width - && DisplayModes[i].res.height == DisplayModes[j].res.height) - i++; - } + cnt = 0; + i = 0; + while (DisplayModes[i].depth >= 0) + { + j = i; + size += PSSO_LibResolution_sizeof; + while (missmodes[misscnt * 2] == 0) + misscnt++; + if (missmodes[misscnt * 2] >= 0) + { + int w = DisplayModes[i].res.width; + int h = DisplayModes[i].res.height; + if (w > missmodes[misscnt * 2 + 0] || (w == missmodes[misscnt * 2 + 0] && h > missmodes[misscnt * 2 + 1])) + { + struct PicassoResolution *pr = &newmodes[cnt]; + memcpy(pr, &DisplayModes[i], sizeof(struct PicassoResolution)); + pr->res.width = missmodes[misscnt * 2 + 0]; + pr->res.height = missmodes[misscnt * 2 + 1]; + _stprintf(pr->name, _T("%dx%d FAKE"), pr->res.width, pr->res.height); + size += PSSO_ModeInfo_sizeof * depths; + cnt++; + misscnt++; + continue; + } + } + memcpy(&newmodes[cnt], &DisplayModes[i], sizeof(struct PicassoResolution)); + size += PSSO_ModeInfo_sizeof * depths; + i++; + cnt++; + while (DisplayModes[i].depth >= 0 + && DisplayModes[i].res.width == DisplayModes[j].res.width + && DisplayModes[i].res.height == DisplayModes[j].res.height) + i++; + } - for (i = 0; Displays[i].name; i++) { - size += PSSO_ModeInfo_sizeof * depths; - } - newmodes[cnt].depth = -1; + for (i = 0; Displays[i].name; i++) + { + size += PSSO_ModeInfo_sizeof * depths; + } + newmodes[cnt].depth = -1; - for (i = 0; i < cnt; i++) { - int depth; - for (depth = 8; depth <= 32; depth++) { - if (!p96depth (depth)) - continue; - switch (depth) { - case 1: - if (newmodes[i].res.width > chunky.width) - chunky.width = newmodes[i].res.width; - if (newmodes[i].res.height > chunky.height) - chunky.height = newmodes[i].res.height; - break; - case 2: - if (newmodes[i].res.width > hicolour.width) - hicolour.width = newmodes[i].res.width; - if (newmodes[i].res.height > hicolour.height) - hicolour.height = newmodes[i].res.height; - break; - case 3: - if (newmodes[i].res.width > truecolour.width) - truecolour.width = newmodes[i].res.width; - if (newmodes[i].res.height > truecolour.height) - truecolour.height = newmodes[i].res.height; - break; - case 4: - if (newmodes[i].res.width > alphacolour.width) - alphacolour.width = newmodes[i].res.width; - if (newmodes[i].res.height > alphacolour.height) - alphacolour.height = newmodes[i].res.height; - break; - } - } - } + for (i = 0; i < cnt; i++) + { + int depth; + for (depth = 8; depth <= 32; depth++) + { + if (!p96depth(depth)) + continue; + switch (depth) + { + case 1: + if (newmodes[i].res.width > chunky.width) + chunky.width = newmodes[i].res.width; + if (newmodes[i].res.height > chunky.height) + chunky.height = newmodes[i].res.height; + break; + case 2: + if (newmodes[i].res.width > hicolour.width) + hicolour.width = newmodes[i].res.width; + if (newmodes[i].res.height > hicolour.height) + hicolour.height = newmodes[i].res.height; + break; + case 3: + if (newmodes[i].res.width > truecolour.width) + truecolour.width = newmodes[i].res.width; + if (newmodes[i].res.height > truecolour.height) + truecolour.height = newmodes[i].res.height; + break; + case 4: + if (newmodes[i].res.width > alphacolour.width) + alphacolour.width = newmodes[i].res.width; + if (newmodes[i].res.height > alphacolour.height) + alphacolour.height = newmodes[i].res.height; + break; + } + } + } - uaegfx_card_install (ctx, size); - init_alloc (ctx, size); + uaegfx_card_install(ctx, size); + init_alloc(ctx, size); } -void picasso96_alloc (TrapContext *ctx) +void picasso96_alloc(TrapContext *ctx) { if (uaegfx_old) return; - uaegfx_resname = ds (_T("uaegfx.card")); - picasso96_alloc2 (ctx); + uaegfx_resname = ds(_T("uaegfx.card")); + picasso96_alloc2(ctx); } -static void inituaegfxfuncs (uaecptr start, uaecptr ABI); -static void inituaegfx (uaecptr ABI) +static void inituaegfxfuncs(uaecptr start, uaecptr ABI); +static void inituaegfx(uaecptr ABI) { - uae_u32 flags; + uae_u32 flags; - write_log (_T("RTG mode mask: %x\n"), currprefs.picasso96_modeflags); - put_word (ABI + PSSO_BoardInfo_BitsPerCannon, 8); - put_word (ABI + PSSO_BoardInfo_RGBFormats, currprefs.picasso96_modeflags); - put_long (ABI + PSSO_BoardInfo_BoardType, picasso96_BT); - put_long (ABI + PSSO_BoardInfo_GraphicsControllerType, picasso96_GCT); - put_long (ABI + PSSO_BoardInfo_PaletteChipType, picasso96_PCT); - put_long (ABI + PSSO_BoardInfo_BoardName, uaegfx_resname); - put_long (ABI + PSSO_BoardInfo_BoardType, 1); + write_log(_T("RTG mode mask: %x\n"), currprefs.picasso96_modeflags); + put_word(ABI + PSSO_BoardInfo_BitsPerCannon, 8); + put_word(ABI + PSSO_BoardInfo_RGBFormats, currprefs.picasso96_modeflags); + put_long(ABI + PSSO_BoardInfo_BoardType, picasso96_BT); + put_long(ABI + PSSO_BoardInfo_GraphicsControllerType, picasso96_GCT); + put_long(ABI + PSSO_BoardInfo_PaletteChipType, picasso96_PCT); + put_long(ABI + PSSO_BoardInfo_BoardName, uaegfx_resname); + put_long(ABI + PSSO_BoardInfo_BoardType, 1); - /* only 1 clock */ - put_long (ABI + PSSO_BoardInfo_PixelClockCount + PLANAR * 4, 1); - put_long (ABI + PSSO_BoardInfo_PixelClockCount + CHUNKY * 4, 1); - put_long (ABI + PSSO_BoardInfo_PixelClockCount + HICOLOR * 4, 1); - put_long (ABI + PSSO_BoardInfo_PixelClockCount + TRUECOLOR * 4, 1); - put_long (ABI + PSSO_BoardInfo_PixelClockCount + TRUEALPHA * 4, 1); + /* only 1 clock */ + put_long(ABI + PSSO_BoardInfo_PixelClockCount + PLANAR * 4, 1); + put_long(ABI + PSSO_BoardInfo_PixelClockCount + CHUNKY * 4, 1); + put_long(ABI + PSSO_BoardInfo_PixelClockCount + HICOLOR * 4, 1); + put_long(ABI + PSSO_BoardInfo_PixelClockCount + TRUECOLOR * 4, 1); + put_long(ABI + PSSO_BoardInfo_PixelClockCount + TRUEALPHA * 4, 1); - /* we have 16 bits for horizontal and vertical timings - hack */ - put_word (ABI + PSSO_BoardInfo_MaxHorValue + PLANAR * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxHorValue + CHUNKY * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxHorValue + HICOLOR * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxHorValue + TRUECOLOR * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxHorValue + TRUEALPHA * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxVerValue + PLANAR * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxVerValue + CHUNKY * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxVerValue + HICOLOR * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxVerValue + TRUECOLOR * 2, 0xffff); - put_word (ABI + PSSO_BoardInfo_MaxVerValue + TRUEALPHA * 2, 0xffff); + /* we have 16 bits for horizontal and vertical timings - hack */ + put_word(ABI + PSSO_BoardInfo_MaxHorValue + PLANAR * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxHorValue + CHUNKY * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxHorValue + HICOLOR * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxHorValue + TRUECOLOR * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxHorValue + TRUEALPHA * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxVerValue + PLANAR * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxVerValue + CHUNKY * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxVerValue + HICOLOR * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxVerValue + TRUECOLOR * 2, 0xffff); + put_word(ABI + PSSO_BoardInfo_MaxVerValue + TRUEALPHA * 2, 0xffff); - flags = get_long (ABI + PSSO_BoardInfo_Flags); - flags &= 0xffff0000; + flags = get_long(ABI + PSSO_BoardInfo_Flags); + flags &= 0xffff0000; if (flags & BIF_NOBLITTER) - write_log (_T("P96: Blitter disabled in devs:monitors/uaegfx!\n")); - flags |= BIF_BLITTER | BIF_NOMEMORYMODEMIX; + write_log(_T("P96: Blitter disabled in devs:monitors/uaegfx!\n")); + flags |= BIF_BLITTER | BIF_NOMEMORYMODEMIX; flags &= ~BIF_HARDWARESPRITE; if (!uaegfx_old) - flags |= BIF_VBLANKINTERRUPT; - if (!(flags & BIF_INDISPLAYCHAIN)) { - write_log (_T("P96: BIF_INDISPLAYCHAIN force-enabled!\n")); + flags |= BIF_VBLANKINTERRUPT; + if (!(flags & BIF_INDISPLAYCHAIN)) + { + write_log(_T("P96: BIF_INDISPLAYCHAIN force-enabled!\n")); flags |= BIF_INDISPLAYCHAIN; } - put_long (ABI + PSSO_BoardInfo_Flags, flags); + put_long(ABI + PSSO_BoardInfo_Flags, flags); - put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 0, planar.width); - put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 2, chunky.width); - put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 4, hicolour.width); - put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 6, truecolour.width); - put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 8, alphacolour.width); - put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 0, planar.height); - put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 2, chunky.height); - put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 4, hicolour.height); - put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 6, truecolour.height); - put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 8, alphacolour.height); - inituaegfxfuncs (uaegfx_rom, ABI); + put_word(ABI + PSSO_BoardInfo_MaxHorResolution + 0, planar.width); + put_word(ABI + PSSO_BoardInfo_MaxHorResolution + 2, chunky.width); + put_word(ABI + PSSO_BoardInfo_MaxHorResolution + 4, hicolour.width); + put_word(ABI + PSSO_BoardInfo_MaxHorResolution + 6, truecolour.width); + put_word(ABI + PSSO_BoardInfo_MaxHorResolution + 8, alphacolour.width); + put_word(ABI + PSSO_BoardInfo_MaxVerResolution + 0, planar.height); + put_word(ABI + PSSO_BoardInfo_MaxVerResolution + 2, chunky.height); + put_word(ABI + PSSO_BoardInfo_MaxVerResolution + 4, hicolour.height); + put_word(ABI + PSSO_BoardInfo_MaxVerResolution + 6, truecolour.height); + put_word(ABI + PSSO_BoardInfo_MaxVerResolution + 8, alphacolour.height); + inituaegfxfuncs(uaegfx_rom, ABI); } -static void addmode (uaecptr AmigaBoardInfo, uaecptr *amem, struct LibResolution *res, int w, int h, const TCHAR *name, int id, int *unkcnt) +static void addmode(uaecptr AmigaBoardInfo, uaecptr *amem, struct LibResolution *res, int w, int h, const TCHAR *name, int id, int *unkcnt) { - int depth; + int depth; - res->DisplayID = id > 0 ? id : AssignModeID (w, h, unkcnt); - res->BoardInfo = AmigaBoardInfo; - res->Width = w; - res->Height = h; - res->Flags = P96F_PUBLIC; - memcpy (res->P96ID, "P96-0:", 6); - if (name) { - char *n2 = ua (name); - strcpy (res->Name, n2); - xfree (n2); - } else { - sprintf (res->Name, "UAE:%4dx%4d", w, h); + res->DisplayID = id > 0 ? id : AssignModeID(w, h, unkcnt); + res->BoardInfo = AmigaBoardInfo; + res->Width = w; + res->Height = h; + res->Flags = P96F_PUBLIC; + memcpy(res->P96ID, "P96-0:", 6); + if (name) + { + char *n2 = ua(name); + strcpy(res->Name, n2); + xfree(n2); + } + else + { + sprintf(res->Name, "UAE:%4dx%4d", w, h); } - for (depth = 8; depth <= 32; depth++) { - if (!p96depth (depth)) - continue; - if(allocated_gfxmem >= w * h * (depth + 7) / 8) { - FillBoardInfo (*amem, res, w, h, depth); - *amem += PSSO_ModeInfo_sizeof; - } - } + for (depth = 8; depth <= 32; depth++) + { + if (!p96depth(depth)) + continue; + if (allocated_gfxmem >= w * h * (depth + 7) / 8) + { + FillBoardInfo(*amem, res, w, h, depth); + *amem += PSSO_ModeInfo_sizeof; + } + } } /**************************************** @@ -1583,50 +1801,52 @@ static void addmode (uaecptr AmigaBoardInfo, uaecptr *amem, struct LibResolution * a2: BoardInfo structure ptr - Amiga-based address in Intel endian-format * */ -static uae_u32 REGPARAM2 picasso_InitCard (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_InitCard(TrapContext *ctx) { - int LibResolutionStructureCount = 0; + int LibResolutionStructureCount = 0; int i, j, unkcnt, cnt; - uaecptr amem; - uaecptr AmigaBoardInfo = m68k_areg (regs, 0); + uaecptr amem; + uaecptr AmigaBoardInfo = m68k_areg(regs, 0); - if (!picasso96_amem) { - write_log (_T("P96: InitCard() but no resolution memory!\n")); - return 0; - } - amem = picasso96_amem; + if (!picasso96_amem) + { + write_log(_T("P96: InitCard() but no resolution memory!\n")); + return 0; + } + amem = picasso96_amem; - inituaegfx (AmigaBoardInfo); + inituaegfx(AmigaBoardInfo); - i = 0; + i = 0; unkcnt = cnt = 0; - while (newmodes[i].depth >= 0) { - struct LibResolution res = { 0 }; + while (newmodes[i].depth >= 0) + { + struct LibResolution res = { 0 }; TCHAR *s; - j = i; - addmode (AmigaBoardInfo, &amem, &res, newmodes[i].res.width, newmodes[i].res.height, NULL, 0, &unkcnt); - s = au (res.Name); - write_log (_T("%2d: %08X %4dx%4d %s\n"), ++cnt, res.DisplayID, res.Width, res.Height, s); - xfree (s); - while (newmodes[i].depth >= 0 - && newmodes[i].res.width == newmodes[j].res.width - && newmodes[i].res.height == newmodes[j].res.height) - i++; + j = i; + addmode(AmigaBoardInfo, &amem, &res, newmodes[i].res.width, newmodes[i].res.height, NULL, 0, &unkcnt); + s = au(res.Name); + write_log(_T("%2d: %08X %4dx%4d %s\n"), ++cnt, res.DisplayID, res.Width, res.Height, s); + xfree(s); + while (newmodes[i].depth >= 0 + && newmodes[i].res.width == newmodes[j].res.width + && newmodes[i].res.height == newmodes[j].res.height) + i++; - LibResolutionStructureCount++; - CopyLibResolutionStructureU2A (&res, amem); + LibResolutionStructureCount++; + CopyLibResolutionStructureU2A(&res, amem); #if P96TRACING_ENABLED && P96TRACING_LEVEL > 1 - DumpLibResolutionStructure(amem); + DumpLibResolutionStructure(amem); #endif - AmigaListAddTail (AmigaBoardInfo + PSSO_BoardInfo_ResolutionsList, amem); - amem += PSSO_LibResolution_sizeof; - } + AmigaListAddTail(AmigaBoardInfo + PSSO_BoardInfo_ResolutionsList, amem); + amem += PSSO_LibResolution_sizeof; + } - if (amem > picasso96_amemend) - write_log (_T("P96: display resolution list corruption %08x<>%08x (%d)\n"), amem, picasso96_amemend, i); + if (amem > picasso96_amemend) + write_log(_T("P96: display resolution list corruption %08x<>%08x (%d)\n"), amem, picasso96_amemend, i); - return -1; + return -1; } /* @@ -1641,34 +1861,39 @@ static uae_u32 REGPARAM2 picasso_InitCard (TrapContext *ctx) * * NOTE: Return the opposite of the switch-state. BDK */ -static uae_u32 REGPARAM2 picasso_SetSwitch (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetSwitch(TrapContext *ctx) { - uae_u16 flag = m68k_dreg (regs, 0) & 0xFFFF; - TCHAR p96text[100]; + uae_u16 flag = m68k_dreg(regs, 0) & 0xFFFF; + TCHAR p96text[100]; - /* Do not switch immediately. Tell the custom chip emulation about the - * desired state, and wait for custom.c to call picasso_enablescreen - * whenever it is ready to change the screen state. */ - picasso_requested_on = flag != 0; - p96text[0] = 0; - if (flag) - _stprintf (p96text, _T("Picasso96 %dx%dx%d (%dx%dx%d)"), - picasso96_state.Width, picasso96_state.Height, picasso96_state.BytesPerPixel * 8, - picasso_vidinfo.width, picasso_vidinfo.height, picasso_vidinfo.pixbytes * 8); - write_log (_T("SetSwitch() - %s\n"), flag ? p96text : _T("amiga")); - /* Put old switch-state in D0 */ - return !flag; + /* Do not switch immediately. Tell the custom chip emulation about the + * desired state, and wait for custom.c to call picasso_enablescreen + * whenever it is ready to change the screen state. */ + picasso_requested_on = flag != 0; + p96text[0] = 0; + if (flag) + _stprintf(p96text, + _T("Picasso96 %dx%dx%d (%dx%dx%d)"), + picasso96_state.Width, + picasso96_state.Height, + picasso96_state.BytesPerPixel * 8, + picasso_vidinfo.width, + picasso_vidinfo.height, + picasso_vidinfo.pixbytes * 8); + write_log(_T("SetSwitch() - %s\n"), flag ? p96text : _T("amiga")); + /* Put old switch-state in D0 */ + return !flag; } static void init_picasso_screen(void); -void picasso_enablescreen (int on) +void picasso_enablescreen(int on) { - if (!init_picasso_screen_called) - init_picasso_screen(); + if (!init_picasso_screen_called) + init_picasso_screen(); - picasso_refresh (); - checkrtglibrary(); + picasso_refresh(); + checkrtglibrary(); } static void resetpalette(void) @@ -1689,43 +1914,45 @@ static void resetpalette(void) * per cannon your board has. So you might have to shift the colors * before writing them to the hardware. */ -static int updateclut (uaecptr clut, int start, int count) +static int updateclut(uaecptr clut, int start, int count) { - int i, changed = 0; - clut += start * 3; - for (i = start; i < start + count; i++) { - int r = get_byte (clut); - int g = get_byte (clut + 1); - int b = get_byte (clut + 2); + int i, changed = 0; + clut += start * 3; + for (i = start; i < start + count; i++) + { + int r = get_byte(clut); + int g = get_byte(clut + 1); + int b = get_byte(clut + 2); - changed |= picasso96_state.CLUT[i].Red != r - || picasso96_state.CLUT[i].Green != g - || picasso96_state.CLUT[i].Blue != b; - if (picasso96_state.CLUT[i].Pad) { + changed |= picasso96_state.CLUT[i].Red != r + || picasso96_state.CLUT[i].Green != g + || picasso96_state.CLUT[i].Blue != b; + if (picasso96_state.CLUT[i].Pad) + { changed = 1; picasso96_state.CLUT[i].Pad = 0; } - picasso96_state.CLUT[i].Red = r; - picasso96_state.CLUT[i].Green = g; - picasso96_state.CLUT[i].Blue = b; - clut += 3; - } - changed |= picasso_palette (); - return changed; + picasso96_state.CLUT[i].Red = r; + picasso96_state.CLUT[i].Green = g; + picasso96_state.CLUT[i].Blue = b; + clut += 3; + } + changed |= picasso_palette(); + return changed; } -static uae_u32 REGPARAM2 picasso_SetColorArray (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetColorArray(TrapContext *ctx) { - /* Fill in some static UAE related structure about this new CLUT setting - * We need this for CLUT-based displays, and for mapping CLUT to hi/true colour */ - uae_u16 start = m68k_dreg (regs, 0); - uae_u16 count = m68k_dreg (regs, 1); - uaecptr boardinfo = m68k_areg (regs, 0); - uaecptr clut = boardinfo + PSSO_BoardInfo_CLUT; + /* Fill in some static UAE related structure about this new CLUT setting + * We need this for CLUT-based displays, and for mapping CLUT to hi/true colour */ + uae_u16 start = m68k_dreg(regs, 0); + uae_u16 count = m68k_dreg(regs, 1); + uaecptr boardinfo = m68k_areg(regs, 0); + uaecptr clut = boardinfo + PSSO_BoardInfo_CLUT; if (start > 256 || start + count > 256) return 0; - updateclut (clut, start, count); - P96TRACE((_T("SetColorArray(%d,%d)\n"), start, count)); - return 1; + updateclut(clut, start, count); + P96TRACE((_T("SetColorArray(%d,%d)\n"), start, count)); + return 1; } /* @@ -1736,33 +1963,37 @@ static uae_u32 REGPARAM2 picasso_SetColorArray (TrapContext *ctx) * e.g. from chunky to TrueColor. Usually, all you have to do is to set * the RAMDAC of your board accordingly. */ -static uae_u32 REGPARAM2 picasso_SetDAC (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetDAC(TrapContext *ctx) { - /* Fill in some static UAE related structure about this new DAC setting - * Lets us keep track of what pixel format the Amiga is thinking about in our frame-buffer */ + /* Fill in some static UAE related structure about this new DAC setting + * Lets us keep track of what pixel format the Amiga is thinking about in our frame-buffer */ - P96TRACE((_T("SetDAC()\n"))); - return 1; + P96TRACE((_T("SetDAC()\n"))); + return 1; } -static void init_picasso_screen (void) +static void init_picasso_screen(void) { - if (set_panning_called) { - picasso96_state.Extent = picasso96_state.Address + picasso96_state.BytesPerRow * picasso96_state.VirtualHeight; - } - if (set_gc_called) { - gfx_set_picasso_modeinfo (picasso96_state.Width, picasso96_state.Height, - picasso96_state.GC_Depth, (RGBFTYPE) picasso96_state.RGBFormat); - set_gc_called = 0; - } - if(( picasso_vidinfo.width == picasso96_state.Width ) && - (picasso_vidinfo.height == picasso96_state.Height ) && - (picasso_vidinfo.depth == (picasso96_state.GC_Depth >> 3) ) && - (picasso_vidinfo.selected_rgbformat == picasso96_state.RGBFormat) ) - { - picasso_refresh (); - } - init_picasso_screen_called = 1; + if (set_panning_called) + { + picasso96_state.Extent = picasso96_state.Address + picasso96_state.BytesPerRow * picasso96_state.VirtualHeight; + } + if (set_gc_called) + { + gfx_set_picasso_modeinfo(picasso96_state.Width, + picasso96_state.Height, + picasso96_state.GC_Depth, + RGBFTYPE(picasso96_state.RGBFormat)); + set_gc_called = 0; + } + if ((picasso_vidinfo.width == picasso96_state.Width) && + (picasso_vidinfo.height == picasso96_state.Height) && + (picasso_vidinfo.depth == (picasso96_state.GC_Depth >> 3)) && + (picasso_vidinfo.selected_rgbformat == picasso96_state.RGBFormat)) + { + picasso_refresh(); + } + init_picasso_screen_called = 1; } @@ -1777,32 +2008,32 @@ static void init_picasso_screen (void) * or linear start adress. They will be set when appropriate by their * own functions. */ -static uae_u32 REGPARAM2 picasso_SetGC (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetGC(TrapContext *ctx) { - /* Fill in some static UAE related structure about this new ModeInfo setting */ - uaecptr AmigaBoardInfo = m68k_areg (regs, 0); - uae_u32 border = m68k_dreg (regs, 0); - uaecptr modeinfo = m68k_areg (regs, 1); + /* Fill in some static UAE related structure about this new ModeInfo setting */ + uaecptr AmigaBoardInfo = m68k_areg(regs, 0); + uae_u32 border = m68k_dreg(regs, 0); + uaecptr modeinfo = m68k_areg(regs, 1); - put_long (AmigaBoardInfo + PSSO_BoardInfo_ModeInfo, modeinfo); - put_word (AmigaBoardInfo + PSSO_BoardInfo_Border, border); + put_long(AmigaBoardInfo + PSSO_BoardInfo_ModeInfo, modeinfo); + put_word(AmigaBoardInfo + PSSO_BoardInfo_Border, border); - picasso96_state.Width = get_word (modeinfo + PSSO_ModeInfo_Width); - picasso96_state.VirtualWidth = picasso96_state.Width; /* in case SetPanning doesn't get called */ + picasso96_state.Width = get_word(modeinfo + PSSO_ModeInfo_Width); + picasso96_state.VirtualWidth = picasso96_state.Width; /* in case SetPanning doesn't get called */ - picasso96_state.Height = get_word (modeinfo + PSSO_ModeInfo_Height); - picasso96_state.VirtualHeight = picasso96_state.Height; /* in case SetPanning doesn't get called */ + picasso96_state.Height = get_word(modeinfo + PSSO_ModeInfo_Height); + picasso96_state.VirtualHeight = picasso96_state.Height; /* in case SetPanning doesn't get called */ - picasso96_state.GC_Depth = get_byte (modeinfo + PSSO_ModeInfo_Depth); - picasso96_state.GC_Flags = get_byte (modeinfo + PSSO_ModeInfo_Flags); + picasso96_state.GC_Depth = get_byte(modeinfo + PSSO_ModeInfo_Depth); + picasso96_state.GC_Flags = get_byte(modeinfo + PSSO_ModeInfo_Flags); - P96TRACE((_T("SetGC(%d,%d,%d,%d)\n"), picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth, border)); - set_gc_called = 1; - picasso96_state.HostAddress = NULL; + P96TRACE((_T("SetGC(%d,%d,%d,%d)\n"), picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth, border)); + set_gc_called = 1; + picasso96_state.HostAddress = NULL; - init_picasso_screen (); - init_hz_p96 (); - return 1; + init_picasso_screen(); + init_hz_p96(); + return 1; } /* @@ -1827,78 +2058,83 @@ static uae_u32 REGPARAM2 picasso_SetGC (TrapContext *ctx) * background here than in SetSwitch() derived functions, * because SetSwitch() is not called for subsequent Picasso screens. */ - + static void picasso_SetPanningInit(void) { - picasso96_state.XYOffset = picasso96_state.Address + (picasso96_state.XOffset * picasso96_state.BytesPerPixel) - + (picasso96_state.YOffset * picasso96_state.BytesPerRow); + picasso96_state.XYOffset = picasso96_state.Address + (picasso96_state.XOffset * picasso96_state.BytesPerPixel) + + (picasso96_state.YOffset * picasso96_state.BytesPerRow); } -static uae_u32 REGPARAM2 picasso_SetPanning (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetPanning(TrapContext *ctx) { - uae_u16 Width = m68k_dreg (regs, 0); - uaecptr start_of_screen = m68k_areg (regs, 1); - uaecptr bi = m68k_areg (regs, 0); - uaecptr bmeptr = get_long (bi + PSSO_BoardInfo_BitMapExtra); /* Get our BoardInfo ptr's BitMapExtra ptr */ - uae_u16 bme_width, bme_height; + uae_u16 Width = m68k_dreg(regs, 0); + uaecptr start_of_screen = m68k_areg(regs, 1); + uaecptr bi = m68k_areg(regs, 0); + uaecptr bmeptr = get_long(bi + PSSO_BoardInfo_BitMapExtra); /* Get our BoardInfo ptr's BitMapExtra ptr */ + uae_u16 bme_width, bme_height; uae_u32 rgbf; - if(oldscr == 0) { - oldscr = start_of_screen; - } - if (oldscr != start_of_screen) { - oldscr = start_of_screen; - } + if (oldscr == 0) + { + oldscr = start_of_screen; + } + if (oldscr != start_of_screen) + { + oldscr = start_of_screen; + } - bme_width = get_word (bmeptr + PSSO_BitMapExtra_Width); - bme_height = get_word (bmeptr + PSSO_BitMapExtra_Height); + bme_width = get_word(bmeptr + PSSO_BitMapExtra_Width); + bme_height = get_word(bmeptr + PSSO_BitMapExtra_Height); rgbf = picasso96_state.RGBFormat; - picasso96_state.Address = start_of_screen; /* Amiga-side address */ - picasso96_state.XOffset = (uae_s16) (m68k_dreg (regs, 1) & 0xFFFF); - picasso96_state.YOffset = (uae_s16) (m68k_dreg (regs, 2) & 0xFFFF); - put_word (bi + PSSO_BoardInfo_XOffset, picasso96_state.XOffset); - put_word (bi + PSSO_BoardInfo_YOffset, picasso96_state.YOffset); - picasso96_state.VirtualWidth = bme_width; - picasso96_state.VirtualHeight = bme_height; - picasso96_state.RGBFormat = m68k_dreg (regs, 7); - picasso96_state.BytesPerPixel = GetBytesPerPixel (picasso96_state.RGBFormat); - picasso96_state.BytesPerRow = picasso96_state.VirtualWidth * picasso96_state.BytesPerPixel; - picasso_SetPanningInit(); + picasso96_state.Address = start_of_screen; /* Amiga-side address */ + picasso96_state.XOffset = uae_s16(m68k_dreg(regs, 1) & 0xFFFF); + picasso96_state.YOffset = uae_s16(m68k_dreg(regs, 2) & 0xFFFF); + put_word(bi + PSSO_BoardInfo_XOffset, picasso96_state.XOffset); + put_word(bi + PSSO_BoardInfo_YOffset, picasso96_state.YOffset); + picasso96_state.VirtualWidth = bme_width; + picasso96_state.VirtualHeight = bme_height; + picasso96_state.RGBFormat = m68k_dreg(regs, 7); + picasso96_state.BytesPerPixel = GetBytesPerPixel(picasso96_state.RGBFormat); + picasso96_state.BytesPerRow = picasso96_state.VirtualWidth * picasso96_state.BytesPerPixel; + picasso_SetPanningInit(); if (rgbf != picasso96_state.RGBFormat) - setconvert (); + setconvert(); - set_panning_called = 1; + set_panning_called = 1; P96TRACE((_T("SetPanning(%d, %d, %d) (%dx%d) Start 0x%x, BPR %d Bpp %d RGBF %d\n"), - Width, picasso96_state.XOffset, picasso96_state.YOffset, - bme_width, bme_height, - start_of_screen, picasso96_state.BytesPerRow, picasso96_state.BytesPerPixel, picasso96_state.RGBFormat)); - init_picasso_screen (); - set_panning_called = 0; + Width, picasso96_state.XOffset, picasso96_state.YOffset, + bme_width, bme_height, + start_of_screen, picasso96_state.BytesPerRow, picasso96_state.BytesPerPixel, picasso96_state.RGBFormat)); + init_picasso_screen(); + set_panning_called = 0; - return 1; + return 1; } -static void do_xor8 (uae_u8 *p, int w, uae_u32 v) +static void do_xor8(uae_u8 *p, int w, uae_u32 v) { - while (ALIGN_POINTER_TO32 (p) != 3 && w) { - *p ^= v; - p++; - w--; - } - while (w >= 2 * 4) { - *((uae_u32*)p) ^= v; - p += 4; - *((uae_u32*)p) ^= v; - p += 4; - w -= 2 * 4; - } - while (w) { - *p ^= v; - p++; - w--; - } + while (ALIGN_POINTER_TO32(p) != 3 && w) + { + *p ^= v; + p++; + w--; + } + while (w >= 2 * 4) + { + *((uae_u32*)p) ^= v; + p += 4; + *((uae_u32*)p) ^= v; + p += 4; + w -= 2 * 4; + } + while (w) + { + *p ^= v; + p++; + w--; + } } /* @@ -1917,40 +2153,41 @@ static void do_xor8 (uae_u8 *p, int w, uae_u32 v) * This function is used to invert a rectangular area on the board. It is called by BltBitMap, * BltPattern and BltTemplate. */ -static uae_u32 REGPARAM2 picasso_InvertRect (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_InvertRect(TrapContext *ctx) { - uaecptr renderinfo = m68k_areg (regs, 1); - unsigned long X = (uae_u16)m68k_dreg (regs, 0); - unsigned long Y = (uae_u16)m68k_dreg (regs, 1); - unsigned long Width = (uae_u16)m68k_dreg (regs, 2); - unsigned long Height = (uae_u16)m68k_dreg (regs, 3); - uae_u8 mask = (uae_u8)m68k_dreg (regs, 4); - int Bpp = GetBytesPerPixel (m68k_dreg (regs, 7)); - uae_u32 xorval; - unsigned int lines; - struct RenderInfo ri; - uae_u8 *uae_mem, *rectstart; - unsigned long width_in_bytes; - uae_u32 result = 0; + uaecptr renderinfo = m68k_areg(regs, 1); + unsigned long X = uae_u16(m68k_dreg(regs, 0)); + unsigned long Y = uae_u16(m68k_dreg(regs, 1)); + unsigned long Width = uae_u16(m68k_dreg(regs, 2)); + unsigned long Height = uae_u16(m68k_dreg(regs, 3)); + uae_u8 mask = uae_u8(m68k_dreg(regs, 4)); + int Bpp = GetBytesPerPixel(m68k_dreg(regs, 7)); + uae_u32 xorval; + unsigned int lines; + struct RenderInfo ri; + uae_u8 *uae_mem, *rectstart; + unsigned long width_in_bytes; + uae_u32 result = 0; - if (NOBLITTER) - return 0; - if (CopyRenderInfoStructureA2U (renderinfo, &ri)) { + if (NOBLITTER) + return 0; + if (CopyRenderInfoStructureA2U(renderinfo, &ri)) + { P96TRACE((_T("InvertRect %dbpp 0x%lx\n"), Bpp, (long)mask)); - if (mask != 0xFF && Bpp > 1) - mask = 0xFF; + if (mask != 0xFF && Bpp > 1) + mask = 0xFF; - xorval = 0x01010101 * (mask & 0xFF); - width_in_bytes = Bpp * Width; - rectstart = uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; + xorval = 0x01010101 * (mask & 0xFF); + width_in_bytes = Bpp * Width; + rectstart = uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; - for (lines = 0; lines < Height; lines++, uae_mem += ri.BytesPerRow) - do_xor8 (uae_mem, width_in_bytes, xorval); - result = 1; - } + for (lines = 0; lines < Height; lines++, uae_mem += ri.BytesPerRow) + do_xor8(uae_mem, width_in_bytes, xorval); + result = 1; + } - return result; /* 1 if supported, 0 otherwise */ + return result; /* 1 if supported, 0 otherwise */ } /*********************************************************** @@ -1966,64 +2203,73 @@ FillRect: * d5: UBYTE Mask * d7: uae_u32 RGBFormat ***********************************************************/ -__attribute__((optimize("O2"))) static uae_u32 REGPARAM2 picasso_FillRect (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_FillRect(TrapContext *ctx) { - uaecptr renderinfo = m68k_areg (regs, 1); - uae_u32 X = (uae_u16)m68k_dreg (regs, 0); - uae_u32 Y = (uae_u16)m68k_dreg (regs, 1); - uae_u32 Width = (uae_u16)m68k_dreg (regs, 2); - uae_u32 Height = (uae_u16)m68k_dreg (regs, 3); - uae_u32 Pen = m68k_dreg (regs, 4); - uae_u8 Mask = (uae_u8)m68k_dreg (regs, 5); - RGBFTYPE RGBFormat = (RGBFTYPE) m68k_dreg (regs, 7); - uae_u8 *oldstart; - int Bpp; - struct RenderInfo ri; - uae_u32 result = 0; + uaecptr renderinfo = m68k_areg(regs, 1); + uae_u32 X = uae_u16(m68k_dreg(regs, 0)); + uae_u32 Y = uae_u16(m68k_dreg(regs, 1)); + uae_u32 Width = uae_u16(m68k_dreg(regs, 2)); + uae_u32 Height = uae_u16(m68k_dreg(regs, 3)); + uae_u32 Pen = m68k_dreg(regs, 4); + uae_u8 Mask = uae_u8(m68k_dreg(regs, 5)); + RGBFTYPE RGBFormat = RGBFTYPE(m68k_dreg(regs, 7)); + uae_u8 *oldstart; + int Bpp; + struct RenderInfo ri; + uae_u32 result = 0; - if (NOBLITTER) - return 0; - if (CopyRenderInfoStructureA2U (renderinfo, &ri) && Y != 0xFFFF) { - Bpp = GetBytesPerPixel (RGBFormat); + if (NOBLITTER) + return 0; + if (CopyRenderInfoStructureA2U(renderinfo, &ri) && Y != 0xFFFF) + { + Bpp = GetBytesPerPixel(RGBFormat); P96TRACE((_T("FillRect(%d, %d, %d, %d) Pen 0x%x BPP %d BPR %d Mask 0x%x\n"), - X, Y, Width, Height, Pen, Bpp, ri.BytesPerRow, Mask)); + X, Y, Width, Height, Pen, Bpp, ri.BytesPerRow, Mask)); - if (Bpp > 1) - Mask = 0xFF; + if (Bpp > 1) + Mask = 0xFF; - if (Mask == 0xFF) { + if (Mask == 0xFF) + { - /* Do the fill-rect in the frame-buffer */ - do_fillrect_frame_buffer (&ri, X, Y, Width, Height, Pen, Bpp); - result = 1; + /* Do the fill-rect in the frame-buffer */ + do_fillrect_frame_buffer(&ri, X, Y, Width, Height, Pen, Bpp); + result = 1; - } else { - - /* We get here only if Mask != 0xFF */ - if (Bpp != 1) { - write_log (_T("WARNING - FillRect() has unhandled mask 0x%x with Bpp %d. Using fall-back routine.\n"), Mask, Bpp); - } else { - Pen &= Mask; - Mask = ~Mask; - oldstart = ri.Memory + Y * ri.BytesPerRow + X * Bpp; - { - uae_u8 *start = oldstart; - uae_u8 *end = start + Height * ri.BytesPerRow; - for (; start != end; start += ri.BytesPerRow) { - uae_u8 *p = start; - unsigned long cols; - for (cols = 0; cols < Width; cols++) { - uae_u32 tmpval = do_get_mem_byte (p + cols) & Mask; - do_put_mem_byte (p + cols, (uae_u8)(Pen | tmpval)); - } - } - } - result = 1; - } - } - } - return result; + } + else + { + + /* We get here only if Mask != 0xFF */ + if (Bpp != 1) + { + write_log(_T("WARNING - FillRect() has unhandled mask 0x%x with Bpp %d. Using fall-back routine.\n"), Mask, Bpp); + } + else + { + Pen &= Mask; + Mask = ~Mask; + oldstart = ri.Memory + Y * ri.BytesPerRow + X * Bpp; + { + uae_u8 *start = oldstart; + uae_u8 *end = start + Height * ri.BytesPerRow; + for (; start != end; start += ri.BytesPerRow) + { + uae_u8 *p = start; + unsigned long cols; + for (cols = 0; cols < Width; cols++) + { + uae_u32 tmpval = do_get_mem_byte(p + cols) & Mask; + do_put_mem_byte(p + cols, (uae_u8)(Pen | tmpval)); + } + } + } + result = 1; + } + } + } + return result; } /* @@ -2050,81 +2296,93 @@ __attribute__((optimize("O2"))) static uae_u32 REGPARAM2 picasso_FillRect (TrapC */ struct blitdata { - struct RenderInfo ri_struct; - struct RenderInfo dstri_struct; - struct RenderInfo *ri; /* Self-referencing pointers */ - struct RenderInfo *dstri; - unsigned long srcx; - unsigned long srcy; - unsigned long dstx; - unsigned long dsty; - unsigned long width; - unsigned long height; - uae_u8 mask; - BLIT_OPCODE opcode; + struct RenderInfo ri_struct; + struct RenderInfo dstri_struct; + struct RenderInfo *ri; /* Self-referencing pointers */ + struct RenderInfo *dstri; + unsigned long srcx; + unsigned long srcy; + unsigned long dstx; + unsigned long dsty; + unsigned long width; + unsigned long height; + uae_u8 mask; + BLIT_OPCODE opcode; } blitrectdata; -STATIC_INLINE int BlitRectHelper( void ) +STATIC_INLINE int BlitRectHelper(void) { - struct RenderInfo *ri = blitrectdata.ri; - struct RenderInfo *dstri = blitrectdata.dstri; - unsigned long srcx = blitrectdata.srcx; - unsigned long srcy = blitrectdata.srcy; - unsigned long dstx = blitrectdata.dstx; - unsigned long dsty = blitrectdata.dsty; - unsigned long width = blitrectdata.width; - unsigned long height = blitrectdata.height; - uae_u8 mask = blitrectdata.mask; - BLIT_OPCODE opcode = blitrectdata.opcode; + struct RenderInfo *ri = blitrectdata.ri; + struct RenderInfo *dstri = blitrectdata.dstri; + unsigned long srcx = blitrectdata.srcx; + unsigned long srcy = blitrectdata.srcy; + unsigned long dstx = blitrectdata.dstx; + unsigned long dsty = blitrectdata.dsty; + unsigned long width = blitrectdata.width; + unsigned long height = blitrectdata.height; + uae_u8 mask = blitrectdata.mask; + BLIT_OPCODE opcode = blitrectdata.opcode; - uae_u8 Bpp = GetBytesPerPixel (ri->RGBFormat); + uae_u8 Bpp = GetBytesPerPixel(ri->RGBFormat); - if (opcode == BLIT_DST) { - write_log ( _T("WARNING: BlitRect() being called with opcode of BLIT_DST\n") ); - return 1; - } + if (opcode == BLIT_DST) + { + write_log(_T("WARNING: BlitRect() being called with opcode of BLIT_DST\n")); + return 1; + } - /* - * If we have no destination RenderInfo, then we're dealing with a single-buffer action, called - * from picasso_BlitRect(). The code in do_blitrect_frame_buffer() deals with the frame-buffer, - * while the do_blit() code deals with the visible screen. - * - * If we have a destination RenderInfo, then we've been called from picasso_BlitRectNoMaskComplete() - * and we need to put the results on the screen from the frame-buffer. - */ - if (dstri == NULL || dstri->Memory == ri->Memory) { - if (mask != 0xFF && Bpp > 1) - mask = 0xFF; - dstri = ri; - } - /* Do our virtual frame-buffer memory first */ - return do_blitrect_frame_buffer (ri, dstri, srcx, srcy, dstx, dsty, width, height, mask, opcode); + /* + * If we have no destination RenderInfo, then we're dealing with a single-buffer action, called + * from picasso_BlitRect(). The code in do_blitrect_frame_buffer() deals with the frame-buffer, + * while the do_blit() code deals with the visible screen. + * + * If we have a destination RenderInfo, then we've been called from picasso_BlitRectNoMaskComplete() + * and we need to put the results on the screen from the frame-buffer. + */ + if (dstri == NULL || dstri->Memory == ri->Memory) + { + if (mask != 0xFF && Bpp > 1) + mask = 0xFF; + dstri = ri; + } + /* Do our virtual frame-buffer memory first */ + return do_blitrect_frame_buffer(ri, dstri, srcx, srcy, dstx, dsty, width, height, mask, opcode); } -STATIC_INLINE int BlitRect (uaecptr ri, uaecptr dstri, - unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, - unsigned long width, unsigned long height, uae_u8 mask, BLIT_OPCODE opcode ) +STATIC_INLINE int BlitRect(uaecptr ri, + uaecptr dstri, + unsigned long srcx, + unsigned long srcy, + unsigned long dstx, + unsigned long dsty, + unsigned long width, + unsigned long height, + uae_u8 mask, + BLIT_OPCODE opcode) { - /* Set up the params */ - CopyRenderInfoStructureA2U( ri, &blitrectdata.ri_struct ); - blitrectdata.ri = &blitrectdata.ri_struct; + /* Set up the params */ + CopyRenderInfoStructureA2U(ri, &blitrectdata.ri_struct); + blitrectdata.ri = &blitrectdata.ri_struct; - if (dstri) { - CopyRenderInfoStructureA2U( dstri, &blitrectdata.dstri_struct ); - blitrectdata.dstri = &blitrectdata.dstri_struct; - } else { - blitrectdata.dstri = NULL; - } - blitrectdata.srcx = srcx; - blitrectdata.srcy = srcy; - blitrectdata.dstx = dstx; - blitrectdata.dsty = dsty; - blitrectdata.width = width; - blitrectdata.height = height; - blitrectdata.mask = mask; - blitrectdata.opcode = opcode; + if (dstri) + { + CopyRenderInfoStructureA2U(dstri, &blitrectdata.dstri_struct); + blitrectdata.dstri = &blitrectdata.dstri_struct; + } + else + { + blitrectdata.dstri = NULL; + } + blitrectdata.srcx = srcx; + blitrectdata.srcy = srcy; + blitrectdata.dstx = dstx; + blitrectdata.dsty = dsty; + blitrectdata.width = width; + blitrectdata.height = height; + blitrectdata.mask = mask; + blitrectdata.opcode = opcode; - return BlitRectHelper(); + return BlitRectHelper(); } /*********************************************************** @@ -2141,23 +2399,23 @@ BlitRect: * d6: UBYTE Mask * d7: uae_u32 RGBFormat ***********************************************************/ -static uae_u32 REGPARAM2 picasso_BlitRect (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_BlitRect(TrapContext *ctx) { - uaecptr renderinfo = m68k_areg (regs, 1); - unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); - unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); - unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); - unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); - unsigned long width = (uae_u16)m68k_dreg (regs, 4); - unsigned long height = (uae_u16)m68k_dreg (regs, 5); - uae_u8 Mask = (uae_u8) m68k_dreg (regs, 6); - uae_u32 result = 0; + uaecptr renderinfo = m68k_areg(regs, 1); + unsigned long srcx = (uae_u16)m68k_dreg(regs, 0); + unsigned long srcy = (uae_u16)m68k_dreg(regs, 1); + unsigned long dstx = (uae_u16)m68k_dreg(regs, 2); + unsigned long dsty = (uae_u16)m68k_dreg(regs, 3); + unsigned long width = (uae_u16)m68k_dreg(regs, 4); + unsigned long height = (uae_u16)m68k_dreg(regs, 5); + uae_u8 Mask = (uae_u8) m68k_dreg(regs, 6); + uae_u32 result = 0; - if (NOBLITTER_BLIT) - return 0; - P96TRACE((_T("BlitRect(%d, %d, %d, %d, %d, %d, 0x%x)\n"), srcx, srcy, dstx, dsty, width, height, Mask)); - result = BlitRect (renderinfo, (uaecptr)NULL, srcx, srcy, dstx, dsty, width, height, Mask, BLIT_SRC); - return result; + if (NOBLITTER_BLIT) + return 0; + P96TRACE((_T("BlitRect(%d, %d, %d, %d, %d, %d, 0x%x)\n"), srcx, srcy, dstx, dsty, width, height, Mask)); + result = BlitRect(renderinfo, uaecptr(NULL), srcx, srcy, dstx, dsty, width, height, Mask, BLIT_SRC); + return result; } /*********************************************************** @@ -2178,51 +2436,51 @@ BlitRectNoMaskComplete: * because the RGBFormat or opcode aren't supported. * OTHERWISE return 1 ***********************************************************/ -static uae_u32 REGPARAM2 picasso_BlitRectNoMaskComplete (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_BlitRectNoMaskComplete(TrapContext *ctx) { - uaecptr srcri = m68k_areg (regs, 1); - uaecptr dstri = m68k_areg (regs, 2); - unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); - unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); - unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); - unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); - unsigned long width = (uae_u16)m68k_dreg (regs, 4); - unsigned long height = (uae_u16)m68k_dreg (regs, 5); - BLIT_OPCODE OpCode = (BLIT_OPCODE)(m68k_dreg (regs, 6) & 0xff); - uae_u32 RGBFmt = m68k_dreg (regs, 7); - uae_u32 result = 0; + uaecptr srcri = m68k_areg(regs, 1); + uaecptr dstri = m68k_areg(regs, 2); + unsigned long srcx = uae_u16(m68k_dreg(regs, 0)); + unsigned long srcy = uae_u16(m68k_dreg(regs, 1)); + unsigned long dstx = uae_u16(m68k_dreg(regs, 2)); + unsigned long dsty = uae_u16(m68k_dreg(regs, 3)); + unsigned long width = uae_u16(m68k_dreg(regs, 4)); + unsigned long height = uae_u16(m68k_dreg(regs, 5)); + BLIT_OPCODE OpCode = BLIT_OPCODE(m68k_dreg(regs, 6) & 0xff); + uae_u32 RGBFmt = m68k_dreg(regs, 7); + uae_u32 result = 0; - if (NOBLITTER_BLIT) - return 0; + if (NOBLITTER_BLIT) + return 0; - P96TRACE((_T("BlitRectNoMaskComplete() op 0x%02x, %08x:(%4d,%4d) --> %08x:(%4d,%4d), wh(%4d,%4d)\n"), - OpCode, get_long (srcri + PSSO_RenderInfo_Memory), srcx, srcy, get_long (dstri + PSSO_RenderInfo_Memory), dstx, dsty, width, height)); - result = BlitRect (srcri, dstri, srcx, srcy, dstx, dsty, width, height, 0xFF, OpCode); - return result; + P96TRACE((_T("BlitRectNoMaskComplete() op 0x%02x, %08x:(%4d,%4d) --> %08x:(%4d,%4d), wh(%4d,%4d)\n"), + OpCode, get_long(srcri + PSSO_RenderInfo_Memory), srcx, srcy, get_long(dstri + PSSO_RenderInfo_Memory), dstx, dsty, width, height)); + result = BlitRect(srcri, dstri, srcx, srcy, dstx, dsty, width, height, 0xFF, OpCode); + return result; } /* NOTE: fgpen MUST be in host byte order */ -STATIC_INLINE void PixelWrite (uae_u8 *mem, int bits, uae_u32 fgpen, int Bpp, uae_u32 mask) +STATIC_INLINE void PixelWrite(uae_u8 *mem, int bits, uae_u32 fgpen, int Bpp, uae_u32 mask) { - switch (Bpp) - { - case 1: - if (mask != 0xFF) - fgpen = (fgpen & mask) | (mem[bits] & ~mask); - mem[bits] = (uae_u8)fgpen; - break; - case 2: - ((uae_u16 *)mem)[bits] = (uae_u16)fgpen; - break; - case 3: - mem[bits * 3 + 0] = fgpen >> 0; - mem[bits * 3 + 1] = fgpen >> 8; - mem[bits * 3 + 2] = fgpen >> 16; - break; - case 4: - ((uae_u32 *)mem)[bits] = fgpen; - break; - } + switch (Bpp) + { + case 1: + if (mask != 0xFF) + fgpen = (fgpen & mask) | (mem[bits] & ~mask); + mem[bits] = uae_u8(fgpen); + break; + case 2: + reinterpret_cast(mem)[bits] = uae_u16(fgpen); + break; + case 3: + mem[bits * 3 + 0] = fgpen >> 0; + mem[bits * 3 + 1] = fgpen >> 8; + mem[bits * 3 + 2] = fgpen >> 16; + break; + case 4: + reinterpret_cast(mem)[bits] = fgpen; + break; + } } /* @@ -2247,147 +2505,158 @@ STATIC_INLINE void PixelWrite (uae_u8 *mem, int bits, uae_u32 fgpen, int Bpp, ua * always 16 pixels (one word) and the height is calculated as 2^Size. The data must be shifted up * and to the left by XOffset and YOffset pixels at the beginning. */ -static uae_u32 REGPARAM2 picasso_BlitPattern (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_BlitPattern(TrapContext *ctx) { - uaecptr rinf = m68k_areg (regs, 1); - uaecptr pinf = m68k_areg (regs, 2); - unsigned long X = (uae_u16)m68k_dreg (regs, 0); - unsigned long Y = (uae_u16)m68k_dreg (regs, 1); - unsigned long W = (uae_u16)m68k_dreg (regs, 2); - unsigned long H = (uae_u16)m68k_dreg (regs, 3); - uae_u8 Mask = (uae_u8) m68k_dreg (regs, 4); - uae_u32 RGBFmt = m68k_dreg (regs, 7); - uae_u8 Bpp = GetBytesPerPixel (RGBFmt); - int inversion = 0; - struct RenderInfo ri; - struct Pattern pattern; - unsigned long rows; - uae_u8 *uae_mem; - int xshift; - unsigned long ysize_mask; - uae_u32 result = 0; + uaecptr rinf = m68k_areg(regs, 1); + uaecptr pinf = m68k_areg(regs, 2); + unsigned long X = uae_u16(m68k_dreg(regs, 0)); + unsigned long Y = uae_u16(m68k_dreg(regs, 1)); + unsigned long W = uae_u16(m68k_dreg(regs, 2)); + unsigned long H = uae_u16(m68k_dreg(regs, 3)); + uae_u8 Mask = uae_u8(m68k_dreg(regs, 4)); + uae_u32 RGBFmt = m68k_dreg(regs, 7); + uae_u8 Bpp = GetBytesPerPixel(RGBFmt); + int inversion = 0; + struct RenderInfo ri; + struct Pattern pattern; + unsigned long rows; + uae_u8 *uae_mem; + int xshift; + unsigned long ysize_mask; + uae_u32 result = 0; - if (NOBLITTER) - return 0; + if (NOBLITTER) + return 0; - if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyPatternStructureA2U (pinf, &pattern)) { - Bpp = GetBytesPerPixel (ri.RGBFormat); - uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset with address */ + if (CopyRenderInfoStructureA2U(rinf, &ri) && CopyPatternStructureA2U(pinf, &pattern)) + { + Bpp = GetBytesPerPixel(ri.RGBFormat); + uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset with address */ - if (pattern.DrawMode & INVERS) - inversion = 1; + if (pattern.DrawMode & INVERS) + inversion = 1; - pattern.DrawMode &= 0x03; - if (Mask != 0xFF) { - if( Bpp > 1 ) - Mask = 0xFF; - result = 1; - } else { - result = 1; - } + pattern.DrawMode &= 0x03; + if (Mask != 0xFF) + { + if (Bpp > 1) + Mask = 0xFF; + result = 1; + } + else + { + result = 1; + } - if (result) { - uae_u32 fgpen, bgpen; - P96TRACE((_T("BlitPattern() xy(%d,%d), wh(%d,%d) draw 0x%x, off(%d,%d), ph %d fg 0x%x bg 0x%x\n"), - X, Y, W, H, pattern.DrawMode, pattern.XOffset, pattern.YOffset, 1 << pattern.Size, pattern.FgPen, pattern.BgPen)); + if (result) + { + uae_u32 fgpen, bgpen; + P96TRACE((_T("BlitPattern() xy(%d,%d), wh(%d,%d) draw 0x%x, off(%d,%d), ph %d fg 0x%x bg 0x%x\n"), + X, Y, W, H, pattern.DrawMode, pattern.XOffset, pattern.YOffset, 1 << pattern.Size, pattern.FgPen, pattern.BgPen)); #if P96TRACING_ENABLED - DumpPattern(&pattern); + DumpPattern(&pattern); #endif - ysize_mask = (1 << pattern.Size) - 1; - xshift = pattern.XOffset & 15; + ysize_mask = (1 << pattern.Size) - 1; + xshift = pattern.XOffset & 15; - fgpen = pattern.FgPen; - endianswap (&fgpen, Bpp); - bgpen = pattern.BgPen; - endianswap (&bgpen, Bpp); + fgpen = pattern.FgPen; + endianswap(&fgpen, Bpp); + bgpen = pattern.BgPen; + endianswap(&bgpen, Bpp); - for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow) { - unsigned long prow = (rows + pattern.YOffset) & ysize_mask; - unsigned int d = do_get_mem_word (((uae_u16 *)pattern.Memory) + prow); - uae_u8 *uae_mem2 = uae_mem; - unsigned long cols; + for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow) + { + unsigned long prow = (rows + pattern.YOffset) & ysize_mask; + unsigned int d = do_get_mem_word(reinterpret_cast(pattern.Memory) + prow); + uae_u8 *uae_mem2 = uae_mem; + unsigned long cols; - if (xshift != 0) - d = (d << xshift) | (d >> (16 - xshift)); + if (xshift != 0) + d = (d << xshift) | (d >> (16 - xshift)); - for (cols = 0; cols < W; cols += 16, uae_mem2 += Bpp * 16) { - long bits; - long max = W - cols; - unsigned int data = d; + for (cols = 0; cols < W; cols += 16, uae_mem2 += Bpp * 16) + { + long bits; + long max = W - cols; + unsigned int data = d; - if (max > 16) - max = 16; + if (max > 16) + max = 16; - switch (pattern.DrawMode) - { - case JAM1: - { - for (bits = 0; bits < max; bits++) { - int bit_set = data & 0x8000; - data <<= 1; - if (inversion) - bit_set = !bit_set; - if (bit_set) - PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); - } - break; - } - case JAM2: - { - for (bits = 0; bits < max; bits++) { - int bit_set = data & 0x8000; - data <<= 1; - if (inversion) - bit_set = !bit_set; - PixelWrite (uae_mem2, bits, bit_set ? fgpen : bgpen, Bpp, Mask); - } - break; - } - case COMP: - { - for (bits = 0; bits < max; bits++) { - int bit_set = data & 0x8000; - data <<= 1; - if (bit_set) { - switch (Bpp) - { - case 1: - { - uae_mem2[bits] ^= 0xff & Mask; - } - break; - case 2: - { - uae_u16 *addr = (uae_u16 *)uae_mem2; - addr[bits] ^= 0xffff; - } - break; - case 3: - { - uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); - do_put_mem_long (addr, do_get_mem_long (addr) ^ 0x00ffffff); - } - break; - case 4: - { - uae_u32 *addr = (uae_u32 *)uae_mem2; - addr[bits] ^= 0xffffffff; - } - break; - } - } - } - break; - } - } - } - } - result = 1; - } - } + switch (pattern.DrawMode) + { + case JAM1: + { + for (bits = 0; bits < max; bits++) + { + int bit_set = data & 0x8000; + data <<= 1; + if (inversion) + bit_set = !bit_set; + if (bit_set) + PixelWrite(uae_mem2, bits, fgpen, Bpp, Mask); + } + break; + } + case JAM2: + { + for (bits = 0; bits < max; bits++) + { + int bit_set = data & 0x8000; + data <<= 1; + if (inversion) + bit_set = !bit_set; + PixelWrite(uae_mem2, bits, bit_set ? fgpen : bgpen, Bpp, Mask); + } + break; + } + case COMP: + { + for (bits = 0; bits < max; bits++) + { + int bit_set = data & 0x8000; + data <<= 1; + if (bit_set) + { + switch (Bpp) + { + case 1: + { + uae_mem2[bits] ^= 0xff & Mask; + } + break; + case 2: + { + uae_u16 *addr = reinterpret_cast(uae_mem2); + addr[bits] ^= 0xffff; + } + break; + case 3: + { + uae_u32 *addr = reinterpret_cast(uae_mem2 + bits * 3); + do_put_mem_long(addr, do_get_mem_long(addr) ^ 0x00ffffff); + } + break; + case 4: + { + uae_u32 *addr = reinterpret_cast(uae_mem2); + addr[bits] ^= 0xffffffff; + } + break; + } + } + } + break; + } + } + } + } + result = 1; + } + } - return result; + return result; } /************************************************* @@ -2409,158 +2678,169 @@ BlitTemplate: * using a single plane of image data which will be expanded to the destination RGBFormat * using ForeGround and BackGround pens as well as draw modes. ***********************************************************************************/ -static uae_u32 REGPARAM2 picasso_BlitTemplate (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_BlitTemplate(TrapContext *ctx) { - uae_u8 inversion = 0; - uaecptr rinf = m68k_areg (regs, 1); - uaecptr tmpl = m68k_areg (regs, 2); - unsigned long X = (uae_u16)m68k_dreg (regs, 0); - unsigned long Y = (uae_u16)m68k_dreg (regs, 1); - unsigned long W = (uae_u16)m68k_dreg (regs, 2); - unsigned long H = (uae_u16)m68k_dreg (regs, 3); - uae_u16 Mask = (uae_u16)m68k_dreg (regs, 4); - struct Template tmp; - struct RenderInfo ri; - unsigned long rows; - int bitoffset; - uae_u8 *uae_mem, Bpp; - uae_u8 *tmpl_base; - uae_u32 result = 0; + uae_u8 inversion = 0; + uaecptr rinf = m68k_areg(regs, 1); + uaecptr tmpl = m68k_areg(regs, 2); + unsigned long X = uae_u16(m68k_dreg(regs, 0)); + unsigned long Y = uae_u16(m68k_dreg(regs, 1)); + unsigned long W = uae_u16(m68k_dreg(regs, 2)); + unsigned long H = uae_u16(m68k_dreg(regs, 3)); + uae_u16 Mask = uae_u16(m68k_dreg(regs, 4)); + struct Template tmp; + struct RenderInfo ri; + unsigned long rows; + int bitoffset; + uae_u8 *uae_mem, Bpp; + uae_u8 *tmpl_base; + uae_u32 result = 0; - if (NOBLITTER) - return 0; + if (NOBLITTER) + return 0; - if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyTemplateStructureA2U (tmpl, &tmp)) { - Bpp = GetBytesPerPixel (ri.RGBFormat); - uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset into address */ + if (CopyRenderInfoStructureA2U(rinf, &ri) && CopyTemplateStructureA2U(tmpl, &tmp)) + { + Bpp = GetBytesPerPixel(ri.RGBFormat); + uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset into address */ - if (tmp.DrawMode & INVERS) - inversion = 1; + if (tmp.DrawMode & INVERS) + inversion = 1; - tmp.DrawMode &= 0x03; + tmp.DrawMode &= 0x03; - if (Mask != 0xFF) { - if (Bpp > 1) - Mask = 0xFF; + if (Mask != 0xFF) + { + if (Bpp > 1) + Mask = 0xFF; - if (tmp.DrawMode == COMP) { - write_log (_T("WARNING - BlitTemplate() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n"), Mask); - return 0; - } else { - result = 1; - } - } else { - result = 1; - } + if (tmp.DrawMode == COMP) + { + write_log(_T("WARNING - BlitTemplate() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n"), Mask); + return 0; + } + result = 1; + } + else + { + result = 1; + } - if (result) { - uae_u32 fgpen, bgpen; + if (result) + { + uae_u32 fgpen, bgpen; - P96TRACE((_T("BlitTemplate() xy(%d,%d), wh(%d,%d) draw 0x%x fg 0x%x bg 0x%x \n"), - X, Y, W, H, tmp.DrawMode, tmp.FgPen, tmp.BgPen)); + P96TRACE((_T("BlitTemplate() xy(%d,%d), wh(%d,%d) draw 0x%x fg 0x%x bg 0x%x \n"), + X, Y, W, H, tmp.DrawMode, tmp.FgPen, tmp.BgPen)); - bitoffset = tmp.XOffset % 8; + bitoffset = tmp.XOffset % 8; #if P96TRACING_ENABLED && P96TRACING_LEVEL > 0 - DumpTemplate(&tmp, W, H); + DumpTemplate(&tmp, W, H); #endif - tmpl_base = tmp.Memory + tmp.XOffset / 8; + tmpl_base = tmp.Memory + tmp.XOffset / 8; - fgpen = tmp.FgPen; - endianswap (&fgpen, Bpp); - bgpen = tmp.BgPen; - endianswap (&bgpen, Bpp); + fgpen = tmp.FgPen; + endianswap(&fgpen, Bpp); + bgpen = tmp.BgPen; + endianswap(&bgpen, Bpp); - for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow, tmpl_base += tmp.BytesPerRow) { - unsigned long cols; - uae_u8 *tmpl_mem = tmpl_base; - uae_u8 *uae_mem2 = uae_mem; - unsigned int data = *tmpl_mem; + for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow, tmpl_base += tmp.BytesPerRow) + { + unsigned long cols; + uae_u8 *tmpl_mem = tmpl_base; + uae_u8 *uae_mem2 = uae_mem; + unsigned int data = *tmpl_mem; - for (cols = 0; cols < W; cols += 8, uae_mem2 += Bpp * 8) { - unsigned int byte; - long bits; - long max = W - cols; + for (cols = 0; cols < W; cols += 8, uae_mem2 += Bpp * 8) + { + unsigned int byte; + long bits; + long max = W - cols; - if (max > 8) - max = 8; + if (max > 8) + max = 8; - data <<= 8; - data |= *++tmpl_mem; - - byte = data >> (8 - bitoffset); + data <<= 8; + data |= * ++tmpl_mem; - switch (tmp.DrawMode) - { - case JAM1: - { - for (bits = 0; bits < max; bits++) { - int bit_set = (byte & 0x80); - byte <<= 1; - if (inversion) - bit_set = !bit_set; - if (bit_set) - PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); - } - break; - } - case JAM2: - { - for (bits = 0; bits < max; bits++) { - int bit_set = (byte & 0x80); - byte <<= 1; - if (inversion) - bit_set = !bit_set; - PixelWrite (uae_mem2, bits, bit_set ? fgpen : bgpen, Bpp, Mask); - } - break; - } - case COMP: - { - for (bits = 0; bits < max; bits++) { - int bit_set = (byte & 0x80); - byte <<= 1; - if (bit_set) { - switch (Bpp) - { - case 1: - { - uae_u8 *addr = uae_mem2; - addr[bits] ^= 0xff; - } - break; - case 2: - { - uae_u16 *addr = (uae_u16 *)uae_mem2; - addr[bits] ^= 0xffff; - } - break; - case 3: - { - uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); - do_put_mem_long (addr, do_get_mem_long (addr) ^ 0x00FFFFFF); - } - break; - case 4: - { - uae_u32 *addr = (uae_u32 *)uae_mem2; - addr[bits] ^= 0xffffffff; - } - break; - } - } - } - break; - } - } - } - } - result = 1; - } - } + byte = data >> (8 - bitoffset); - return 1; + switch (tmp.DrawMode) + { + case JAM1: + { + for (bits = 0; bits < max; bits++) + { + int bit_set = (byte & 0x80); + byte <<= 1; + if (inversion) + bit_set = !bit_set; + if (bit_set) + PixelWrite(uae_mem2, bits, fgpen, Bpp, Mask); + } + break; + } + case JAM2: + { + for (bits = 0; bits < max; bits++) + { + int bit_set = (byte & 0x80); + byte <<= 1; + if (inversion) + bit_set = !bit_set; + PixelWrite(uae_mem2, bits, bit_set ? fgpen : bgpen, Bpp, Mask); + } + break; + } + case COMP: + { + for (bits = 0; bits < max; bits++) + { + int bit_set = (byte & 0x80); + byte <<= 1; + if (bit_set) + { + switch (Bpp) + { + case 1: + { + uae_u8 *addr = uae_mem2; + addr[bits] ^= 0xff; + } + break; + case 2: + { + uae_u16 *addr = (uae_u16 *)uae_mem2; + addr[bits] ^= 0xffff; + } + break; + case 3: + { + uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); + do_put_mem_long(addr, do_get_mem_long(addr) ^ 0x00FFFFFF); + } + break; + case 4: + { + uae_u32 *addr = (uae_u32 *)uae_mem2; + addr[bits] ^= 0xffffffff; + } + break; + } + } + } + break; + } + } + } + } + result = 1; + } + } + + return result; } /* @@ -2571,12 +2851,12 @@ static uae_u32 REGPARAM2 picasso_BlitTemplate (TrapContext *ctx) * This function calculates the amount of bytes needed for a line of * "Width" pixels in the given RGBFormat. */ -static uae_u32 REGPARAM2 picasso_CalculateBytesPerRow (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_CalculateBytesPerRow(TrapContext *ctx) { - uae_u16 width = m68k_dreg (regs, 0); - uae_u32 type = m68k_dreg (regs, 7); - width = GetBytesPerPixel (type) * width; - return width; + uae_u16 width = m68k_dreg(regs, 0); + uae_u32 type = m68k_dreg(regs, 7); + width = GetBytesPerPixel(type) * width; + return width; } /* @@ -2587,85 +2867,98 @@ static uae_u32 REGPARAM2 picasso_CalculateBytesPerRow (TrapContext *ctx) * * NOTE: return the opposite of the state */ -static uae_u32 REGPARAM2 picasso_SetDisplay (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetDisplay(TrapContext *ctx) { - uae_u32 state = m68k_dreg (regs, 0); - P96TRACE ((_T("SetDisplay(%d)\n"), state)); + uae_u32 state = m68k_dreg(regs, 0); + P96TRACE((_T("SetDisplay(%d)\n"), state)); resetpalette(); - return !state; + return !state; } -void init_hz_p96 (void) +void init_hz_p96(void) { - p96vblank = vblank_hz; - p96syncrate = maxvpos_nom * vblank_hz / p96vblank; + p96vblank = vblank_hz; + p96syncrate = maxvpos_nom * vblank_hz / p96vblank; } /* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */ -static void PlanarToChunky (struct RenderInfo *ri, struct BitMap *bm, - unsigned long srcx, unsigned long srcy, - unsigned long dstx, unsigned long dsty, - unsigned long width, unsigned long height, - uae_u8 mask) +static void PlanarToChunky(struct RenderInfo *ri, + struct BitMap *bm, + unsigned long srcx, + unsigned long srcy, + unsigned long dstx, + unsigned long dsty, + unsigned long width, + unsigned long height, + uae_u8 mask) { - int j; + int j; - uae_u8 *PLANAR[8], *image = ri->Memory + dstx * GetBytesPerPixel (ri->RGBFormat) + dsty * ri->BytesPerRow; - int Depth = bm->Depth; - unsigned long rows, bitoffset = srcx & 7; - long eol_offset; + uae_u8 *PLANAR[8], *image = ri->Memory + dstx * GetBytesPerPixel(ri->RGBFormat) + dsty * ri->BytesPerRow; + int Depth = bm->Depth; + unsigned long rows, bitoffset = srcx & 7; + long eol_offset; - /* Set up our bm->Planes[] pointers to the right horizontal offset */ - for (j = 0; j < Depth; j++) { - uae_u8 *p = bm->Planes[j]; - if (p != &all_zeros_bitmap && p != &all_ones_bitmap) - p += srcx / 8 + srcy * bm->BytesPerRow; - PLANAR[j] = p; - if ((mask & (1 << j)) == 0) - PLANAR[j] = &all_zeros_bitmap; - } - eol_offset = (long) bm->BytesPerRow - (long) ((width + 7) >> 3); - for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) { - unsigned long cols; + /* Set up our bm->Planes[] pointers to the right horizontal offset */ + for (j = 0; j < Depth; j++) + { + uae_u8 *p = bm->Planes[j]; + if (p != &all_zeros_bitmap && p != &all_ones_bitmap) + p += srcx / 8 + srcy * bm->BytesPerRow; + PLANAR[j] = p; + if ((mask & (1 << j)) == 0) + PLANAR[j] = &all_zeros_bitmap; + } + eol_offset = long(bm->BytesPerRow) - long((width + 7) >> 3); + for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) + { + unsigned long cols; - for (cols = 0; cols < width; cols += 8) { - int k; - uae_u32 a = 0, b = 0; - unsigned int msk = 0xFF; - long tmp = cols + 8 - width; - if (tmp > 0) { - msk <<= tmp; - b = do_get_mem_long ((uae_u32 *) (image + cols + 4)); - if (tmp < 4) - b &= 0xFFFFFFFF >> (32 - tmp * 8); - else if (tmp > 4) { - a = do_get_mem_long ((uae_u32 *) (image + cols)); - a &= 0xFFFFFFFF >> (64 - tmp * 8); - } - } - for (k = 0; k < Depth; k++) { - unsigned int data; - if (PLANAR[k] == &all_zeros_bitmap) - data = 0; - else if (PLANAR[k] == &all_ones_bitmap) - data = 0xFF; - else { - data = (uae_u8) (do_get_mem_word ((uae_u16 *) PLANAR[k]) >> (8 - bitoffset)); - PLANAR[k]++; - } - data &= msk; - a |= p2ctab[data][0] << k; - b |= p2ctab[data][1] << k; - } - do_put_mem_long ((uae_u32 *) (image + cols), a); - do_put_mem_long ((uae_u32 *) (image + cols + 4), b); - } - for (j = 0; j < Depth; j++) { - if (PLANAR[j] != &all_zeros_bitmap && PLANAR[j] != &all_ones_bitmap) { - PLANAR[j] += eol_offset; - } - } - } + for (cols = 0; cols < width; cols += 8) + { + int k; + uae_u32 a = 0, b = 0; + unsigned int msk = 0xFF; + long tmp = cols + 8 - width; + if (tmp > 0) + { + msk <<= tmp; + b = do_get_mem_long(reinterpret_cast(image + cols + 4)); + if (tmp < 4) + b &= 0xFFFFFFFF >> (32 - tmp * 8); + else if (tmp > 4) + { + a = do_get_mem_long(reinterpret_cast(image + cols)); + a &= 0xFFFFFFFF >> (64 - tmp * 8); + } + } + for (k = 0; k < Depth; k++) + { + unsigned int data; + if (PLANAR[k] == &all_zeros_bitmap) + data = 0; + else if (PLANAR[k] == &all_ones_bitmap) + data = 0xFF; + else + { + data = uae_u8(do_get_mem_word(reinterpret_cast(PLANAR[k])) >> (8 - bitoffset)); + PLANAR[k]++; + } + data &= msk; + a |= p2ctab[data][0] << k; + b |= p2ctab[data][1] << k; + } + do_put_mem_long(reinterpret_cast(image + cols), a); + do_put_mem_long(reinterpret_cast(image + cols + 4), b); + } + for (j = 0; j < Depth; j++) + { + if (PLANAR[j] != &all_zeros_bitmap && PLANAR[j] != &all_ones_bitmap) + { + PLANAR[j] += eol_offset; + } + } + } } /* @@ -2686,116 +2979,135 @@ static void PlanarToChunky (struct RenderInfo *ri, struct BitMap *bm, * on the board. Watch out for plane pointers that are 0x00000000 (represents a plane with all bits "0") * or 0xffffffff (represents a plane with all bits "1"). */ -static uae_u32 REGPARAM2 picasso_BlitPlanar2Chunky (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_BlitPlanar2Chunky(TrapContext *ctx) { - uaecptr bm = m68k_areg (regs, 1); - uaecptr ri = m68k_areg (regs, 2); - unsigned long srcx = (uae_u16) m68k_dreg (regs, 0); - unsigned long srcy = (uae_u16) m68k_dreg (regs, 1); - unsigned long dstx = (uae_u16) m68k_dreg (regs, 2); - unsigned long dsty = (uae_u16) m68k_dreg (regs, 3); - unsigned long width = (uae_u16) m68k_dreg (regs, 4); - unsigned long height = (uae_u16) m68k_dreg (regs, 5); - uae_u8 minterm = m68k_dreg (regs, 6) & 0xFF; - uae_u8 mask = m68k_dreg (regs, 7) & 0xFF; - struct RenderInfo local_ri; - struct BitMap local_bm; - uae_u32 result = 0; + uaecptr bm = m68k_areg(regs, 1); + uaecptr ri = m68k_areg(regs, 2); + unsigned long srcx = (uae_u16) m68k_dreg(regs, 0); + unsigned long srcy = (uae_u16) m68k_dreg(regs, 1); + unsigned long dstx = (uae_u16) m68k_dreg(regs, 2); + unsigned long dsty = (uae_u16) m68k_dreg(regs, 3); + unsigned long width = (uae_u16) m68k_dreg(regs, 4); + unsigned long height = (uae_u16) m68k_dreg(regs, 5); + uae_u8 minterm = m68k_dreg(regs, 6) & 0xFF; + uae_u8 mask = m68k_dreg(regs, 7) & 0xFF; + struct RenderInfo local_ri; + struct BitMap local_bm; + uae_u32 result = 0; - if (NOBLITTER) - return 0; + if (NOBLITTER) + return 0; - if (minterm != 0x0C) { - write_log (_T("ERROR - BlitPlanar2Chunky() has minterm 0x%x, which I don't handle. Using fall-back routine.\n"), - minterm); - } else if (CopyRenderInfoStructureA2U (ri, &local_ri) && CopyBitMapStructureA2U (bm, &local_bm)) { - P96TRACE((_T("BlitPlanar2Chunky(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n"), - srcx, srcy, dstx, dsty, width, height, minterm, mask, local_bm.Depth)); - P96TRACE((_T("P2C - BitMap has %d BPR, %d rows\n"), local_bm.BytesPerRow, local_bm.Rows)); - PlanarToChunky (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, mask); - result = 1; - } - return result; + if (minterm != 0x0C) + { + write_log(_T("ERROR - BlitPlanar2Chunky() has minterm 0x%x, which I don't handle. Using fall-back routine.\n"), + minterm); + } + else if (CopyRenderInfoStructureA2U(ri, &local_ri) && CopyBitMapStructureA2U(bm, &local_bm)) + { + P96TRACE((_T("BlitPlanar2Chunky(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n"), + srcx, srcy, dstx, dsty, width, height, minterm, mask, local_bm.Depth)); + P96TRACE((_T("P2C - BitMap has %d BPR, %d rows\n"), local_bm.BytesPerRow, local_bm.Rows)); + PlanarToChunky(&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, mask); + result = 1; + } + return result; } /* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */ -static void PlanarToDirect (struct RenderInfo *ri, struct BitMap *bm, - unsigned long srcx, unsigned long srcy, - unsigned long dstx, unsigned long dsty, - unsigned long width, unsigned long height, uae_u8 mask, struct ColorIndexMapping *cim) +static void PlanarToDirect(struct RenderInfo *ri, + struct BitMap *bm, + unsigned long srcx, + unsigned long srcy, + unsigned long dstx, + unsigned long dsty, + unsigned long width, + unsigned long height, + uae_u8 mask, + struct ColorIndexMapping *cim) { - int j; - int bpp = GetBytesPerPixel (ri->RGBFormat); - uae_u8 *PLANAR[8]; - uae_u8 *image = ri->Memory + dstx * bpp + dsty * ri->BytesPerRow; - int Depth = bm->Depth; - unsigned long rows; - long eol_offset; + int j; + int bpp = GetBytesPerPixel(ri->RGBFormat); + uae_u8 *PLANAR[8]; + uae_u8 *image = ri->Memory + dstx * bpp + dsty * ri->BytesPerRow; + int Depth = bm->Depth; + unsigned long rows; + long eol_offset; - if( !bpp ) - return; + if (!bpp) + return; - /* Set up our bm->Planes[] pointers to the right horizontal offset */ - for (j = 0; j < Depth; j++) { - uae_u8 *p = bm->Planes[j]; - if (p != &all_zeros_bitmap && p != &all_ones_bitmap) - p += srcx / 8 + srcy * bm->BytesPerRow; - PLANAR[j] = p; - if ((mask & (1 << j)) == 0) - PLANAR[j] = &all_zeros_bitmap; - } + /* Set up our bm->Planes[] pointers to the right horizontal offset */ + for (j = 0; j < Depth; j++) + { + uae_u8 *p = bm->Planes[j]; + if (p != &all_zeros_bitmap && p != &all_ones_bitmap) + p += srcx / 8 + srcy * bm->BytesPerRow; + PLANAR[j] = p; + if ((mask & (1 << j)) == 0) + PLANAR[j] = &all_zeros_bitmap; + } - eol_offset = (long) bm->BytesPerRow - (long) ((width + (srcx & 7)) >> 3); - for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) { - unsigned long cols; - uae_u8 *image2 = image; - unsigned int bitoffs = 7 - (srcx & 7); - int i; + eol_offset = long(bm->BytesPerRow) - long((width + (srcx & 7)) >> 3); + for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) + { + unsigned long cols; + uae_u8 *image2 = image; + unsigned int bitoffs = 7 - (srcx & 7); + int i; - for (cols = 0; cols < width; cols++) { - int v = 0, k; - for (k = 0; k < Depth; k++) { - if (PLANAR[k] == &all_ones_bitmap) - v |= 1 << k; - else if (PLANAR[k] != &all_zeros_bitmap) { - v |= ((*PLANAR[k] >> bitoffs) & 1) << k; - } - } - switch (bpp) - { - case 2: - ((uae_u16 *)image2)[0] = (uae_u16)(cim->Colors[v]); - image2 += 2; - break; - case 3: - image2[0] = cim->Colors[v] >> 0; - image2[1] = cim->Colors[v] >> 8; - image2[2] = cim->Colors[v] >> 16; - image2 += 3; - break; - case 4: - ((uae_u32 *)image2)[0] = cim->Colors[v]; - image2 += 4; - break; - } - bitoffs--; - bitoffs &= 7; - if (bitoffs == 7) { - int k; - for (k = 0; k < Depth; k++) { - if (PLANAR[k] != &all_zeros_bitmap && PLANAR[k] != &all_ones_bitmap) { - PLANAR[k]++; - } - } - } - } + for (cols = 0; cols < width; cols++) + { + int v = 0, k; + for (k = 0; k < Depth; k++) + { + if (PLANAR[k] == &all_ones_bitmap) + v |= 1 << k; + else if (PLANAR[k] != &all_zeros_bitmap) + { + v |= ((*PLANAR[k] >> bitoffs) & 1) << k; + } + } + switch (bpp) + { + case 2: + reinterpret_cast(image2)[0] = uae_u16(cim->Colors[v]); + image2 += 2; + break; + case 3: + image2[0] = cim->Colors[v] >> 0; + image2[1] = cim->Colors[v] >> 8; + image2[2] = cim->Colors[v] >> 16; + image2 += 3; + break; + case 4: + reinterpret_cast(image2)[0] = cim->Colors[v]; + image2 += 4; + break; + } + bitoffs--; + bitoffs &= 7; + if (bitoffs == 7) + { + int k; + for (k = 0; k < Depth; k++) + { + if (PLANAR[k] != &all_zeros_bitmap && PLANAR[k] != &all_ones_bitmap) + { + PLANAR[k]++; + } + } + } + } - for (i = 0; i < Depth; i++) { - if (PLANAR[i] != &all_zeros_bitmap && PLANAR[i] != &all_ones_bitmap) { - PLANAR[i] += eol_offset; - } - } - } + for (i = 0; i < Depth; i++) + { + if (PLANAR[i] != &all_zeros_bitmap && PLANAR[i] != &all_ones_bitmap) + { + PLANAR[i] += eol_offset; + } + } + } } /* @@ -2826,254 +3138,275 @@ static void PlanarToDirect (struct RenderInfo *ri, struct BitMap *bm, * BlitTemplate(). */ -static uae_u32 REGPARAM2 picasso_BlitPlanar2Direct (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_BlitPlanar2Direct(TrapContext *ctx) { - uaecptr bm = m68k_areg (regs, 1); - uaecptr ri = m68k_areg (regs, 2); - uaecptr cim = m68k_areg (regs, 3); - unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); - unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); - unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); - unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); - unsigned long width = (uae_u16)m68k_dreg (regs, 4); - unsigned long height = (uae_u16)m68k_dreg (regs, 5); - uae_u8 minterm = m68k_dreg (regs, 6); - uae_u8 Mask = m68k_dreg (regs, 7); - struct RenderInfo local_ri; - struct BitMap local_bm; - struct ColorIndexMapping local_cim; - uae_u32 result = 0; + uaecptr bm = m68k_areg(regs, 1); + uaecptr ri = m68k_areg(regs, 2); + uaecptr cim = m68k_areg(regs, 3); + unsigned long srcx = uae_u16(m68k_dreg(regs, 0)); + unsigned long srcy = uae_u16(m68k_dreg(regs, 1)); + unsigned long dstx = uae_u16(m68k_dreg(regs, 2)); + unsigned long dsty = uae_u16(m68k_dreg(regs, 3)); + unsigned long width = uae_u16(m68k_dreg(regs, 4)); + unsigned long height = uae_u16(m68k_dreg(regs, 5)); + uae_u8 minterm = m68k_dreg(regs, 6); + uae_u8 Mask = m68k_dreg(regs, 7); + struct RenderInfo local_ri; + struct BitMap local_bm; + struct ColorIndexMapping local_cim; + uae_u32 result = 0; - if (NOBLITTER) - return 0; - if (minterm != 0x0C) { - write_log (_T("WARNING - BlitPlanar2Direct() has unhandled op-code 0x%x. Using fall-back routine.\n"), minterm); - return 0; - } - if (CopyRenderInfoStructureA2U (ri, &local_ri) && CopyBitMapStructureA2U (bm, &local_bm)) { - Mask = 0xFF; - CopyColorIndexMappingA2U (cim, &local_cim, GetBytesPerPixel (local_ri.RGBFormat)); + if (NOBLITTER) + return 0; + if (minterm != 0x0C) + { + write_log(_T("WARNING - BlitPlanar2Direct() has unhandled op-code 0x%x. Using fall-back routine.\n"), minterm); + return 0; + } + if (CopyRenderInfoStructureA2U(ri, &local_ri) && CopyBitMapStructureA2U(bm, &local_bm)) + { + Mask = 0xFF; + CopyColorIndexMappingA2U(cim, &local_cim, GetBytesPerPixel(local_ri.RGBFormat)); P96TRACE((_T("BlitPlanar2Direct(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n"), - srcx, srcy, dstx, dsty, width, height, minterm, Mask, local_bm.Depth)); - PlanarToDirect (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, Mask, &local_cim); - result = 1; - } - return result; + srcx, srcy, dstx, dsty, width, height, minterm, Mask, local_bm.Depth)); + PlanarToDirect(&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, Mask, &local_cim); + result = 1; + } + return result; } #include "statusline.h" -static void statusline (uae_u8 *dst) +static void statusline(uae_u8 *dst) { - int y; - int dst_height, dst_width, pitch; + int y; + int dst_height, dst_width, pitch; - dst_height = picasso96_state.Height; - dst_width = picasso96_state.Width; - pitch = picasso_vidinfo.rowbytes; - for (y = 0; y < TD_TOTAL_HEIGHT; y++) { + dst_height = picasso96_state.Height; + dst_width = picasso96_state.Width; + pitch = picasso_vidinfo.rowbytes; + for (y = 0; y < TD_TOTAL_HEIGHT; y++) + { int line = dst_height - TD_TOTAL_HEIGHT + y; - uae_u8 *buf = dst + line * pitch; - draw_status_line_single (buf, y, dst_width); - } + uae_u8 *buf = dst + line * pitch; + draw_status_line_single(buf, y, dst_width); + } } -static void copyall (uae_u8 *src, uae_u8 *dst) +static void copyall(uae_u8 *src, uae_u8 *dst) { - if (picasso96_state.RGBFormat == RGBFB_R5G6B5) - copy_screen_16bit_swap(dst, src, picasso96_state.Width * picasso96_state.Height * 2); - else if(picasso96_state.RGBFormat == RGBFB_CLUT) - { - int pixels = picasso96_state.Width * picasso96_state.Height; - copy_screen_8bit(dst, src, pixels, picasso_vidinfo.clut); - } - else - copy_screen_32bit_to_16bit_neon(dst, src, picasso96_state.Width * picasso96_state.Height * 4); + if (picasso96_state.RGBFormat == RGBFB_R5G6B5) + copy_screen_16bit_swap(dst, src, picasso96_state.Width * picasso96_state.Height * 2); + else if (picasso96_state.RGBFormat == RGBFB_CLUT) + { + int pixels = picasso96_state.Width * picasso96_state.Height; + copy_screen_8bit(dst, src, pixels, picasso_vidinfo.clut); + } + else + copy_screen_32bit_to_16bit_neon(dst, src, picasso96_state.Width * picasso96_state.Height * 4); } -static void flushpixels (void) +static void flushpixels(void) { - uae_u8 *src = p96ram_start + natmem_offset; - int off = picasso96_state.XYOffset - gfxmem_start; - uae_u8 *src_start = src + off; - uae_u8 *src_end = src + off + picasso96_state.BytesPerRow * picasso96_state.Height; - uae_u8 *dst = NULL; + uae_u8 *src = p96ram_start + natmem_offset; + int off = picasso96_state.XYOffset - gfxmem_start; + uae_u8 *src_start = src + off; + uae_u8 *src_end = src + off + picasso96_state.BytesPerRow * picasso96_state.Height; + uae_u8 *dst = NULL; - if (!picasso_vidinfo.extra_mem || src_start >= src_end) - return; + if (!picasso_vidinfo.extra_mem || src_start >= src_end) + return; - if (doskip () && p96skipmode == 1) - return; + if (doskip() && p96skipmode == 1) + return; - dst = gfx_lock_picasso (); - if (dst == NULL) - return; + dst = gfx_lock_picasso(); + if (dst == NULL) + return; - copyall (src + off, dst); + copyall(src + off, dst); - if(currprefs.leds_on_screen) - statusline (dst); + if (currprefs.leds_on_screen) + statusline(dst); - gfx_unlock_picasso (); + gfx_unlock_picasso(); } -static uae_u32 REGPARAM2 gfxmem_lgetx (uaecptr addr) +static uae_u32 REGPARAM2 gfxmem_lgetx(uaecptr addr) { - uae_u32 *m; + uae_u32 *m; - addr -= gfxmem_start & gfxmem_mask; - addr &= gfxmem_mask; - m = (uae_u32 *)(gfxmemory + addr); - return do_get_mem_long(m); + addr -= gfxmem_start & gfxmem_mask; + addr &= gfxmem_mask; + m = reinterpret_cast(gfxmemory + addr); + return do_get_mem_long(m); } -static uae_u32 REGPARAM2 gfxmem_wgetx (uaecptr addr) +static uae_u32 REGPARAM2 gfxmem_wgetx(uaecptr addr) { - uae_u16 *m; - addr -= gfxmem_start & gfxmem_mask; - addr &= gfxmem_mask; - m = (uae_u16 *)(gfxmemory + addr); - return do_get_mem_word(m); + uae_u16 *m; + addr -= gfxmem_start & gfxmem_mask; + addr &= gfxmem_mask; + m = reinterpret_cast(gfxmemory + addr); + return do_get_mem_word(m); } -static uae_u32 REGPARAM2 gfxmem_bgetx (uaecptr addr) +static uae_u32 REGPARAM2 gfxmem_bgetx(uaecptr addr) { - addr -= gfxmem_start & gfxmem_mask; - addr &= gfxmem_mask; - return gfxmemory[addr]; + addr -= gfxmem_start & gfxmem_mask; + addr &= gfxmem_mask; + return gfxmemory[addr]; } -static void REGPARAM2 gfxmem_lputx (uaecptr addr, uae_u32 l) +static void REGPARAM2 gfxmem_lputx(uaecptr addr, uae_u32 l) { - uae_u32 *m; - addr -= gfxmem_start & gfxmem_mask; - addr &= gfxmem_mask; - m = (uae_u32 *)(gfxmemory + addr); - do_put_mem_long(m, l); + uae_u32 *m; + addr -= gfxmem_start & gfxmem_mask; + addr &= gfxmem_mask; + m = reinterpret_cast(gfxmemory + addr); + do_put_mem_long(m, l); } -static void REGPARAM2 gfxmem_wputx (uaecptr addr, uae_u32 w) +static void REGPARAM2 gfxmem_wputx(uaecptr addr, uae_u32 w) { - uae_u16 *m; - addr -= gfxmem_start & gfxmem_mask; - addr &= gfxmem_mask; - m = (uae_u16 *)(gfxmemory + addr); - do_put_mem_word(m, (uae_u16)w); + uae_u16 *m; + addr -= gfxmem_start & gfxmem_mask; + addr &= gfxmem_mask; + m = reinterpret_cast(gfxmemory + addr); + do_put_mem_word(m, (uae_u16)w); } -static void REGPARAM2 gfxmem_bputx (uaecptr addr, uae_u32 b) +static void REGPARAM2 gfxmem_bputx(uaecptr addr, uae_u32 b) { - addr -= gfxmem_start & gfxmem_mask; - addr &= gfxmem_mask; - gfxmemory[addr] = b; + addr -= gfxmem_start & gfxmem_mask; + addr &= gfxmem_mask; + gfxmemory[addr] = b; } -static int REGPARAM2 gfxmem_check (uaecptr addr, uae_u32 size) +static int REGPARAM2 gfxmem_check(uaecptr addr, uae_u32 size) { - addr -= gfxmem_start; - addr &= gfxmem_mask; - return (addr + size) < allocated_gfxmem; + addr -= gfxmem_start; + addr &= gfxmem_mask; + return (addr + size) < allocated_gfxmem; } -static uae_u8 *REGPARAM2 gfxmem_xlate (uaecptr addr) +static uae_u8 *REGPARAM2 gfxmem_xlate(uaecptr addr) { - addr -= gfxmem_start; - addr &= gfxmem_mask; - return gfxmemory + addr; + addr -= gfxmem_start; + addr &= gfxmem_mask; + return gfxmemory + addr; } -addrbank gfxmem_bank = { - gfxmem_lgetx, gfxmem_wgetx, gfxmem_bgetx, - gfxmem_lputx, gfxmem_wputx, gfxmem_bputx, - gfxmem_xlate, gfxmem_check, NULL, _T("RTG RAM"), - dummy_lgeti, dummy_wgeti, ABFLAG_RAM +addrbank gfxmem_bank = +{ + gfxmem_lgetx, + gfxmem_wgetx, + gfxmem_bgetx, + gfxmem_lputx, + gfxmem_wputx, + gfxmem_bputx, + gfxmem_xlate, + gfxmem_check, + NULL, + _T("RTG RAM"), + dummy_lgeti, + dummy_wgeti, + ABFLAG_RAM }; /* Call this function first, near the beginning of code flow * Place in InitGraphics() which seems reasonable... * Also put it in reset_drawing() for safe-keeping. */ -void InitPicasso96 (void) +void InitPicasso96(void) { int i; - //fastscreen - oldscr = 0; - //fastscreen - memset (&picasso96_state, 0, sizeof (struct picasso96_state_struct)); + //fastscreen + oldscr = 0; + //fastscreen + memset(&picasso96_state, 0, sizeof(struct picasso96_state_struct)); - for (i = 0; i < 256; i++) { - p2ctab[i][0] = (((i & 128) ? 0x01000000 : 0) - | ((i & 64) ? 0x010000 : 0) - | ((i & 32) ? 0x0100 : 0) - | ((i & 16) ? 0x01 : 0)); - p2ctab[i][1] = (((i & 8) ? 0x01000000 : 0) - | ((i & 4) ? 0x010000 : 0) - | ((i & 2) ? 0x0100 : 0) - | ((i & 1) ? 0x01 : 0)); - } + for (i = 0; i < 256; i++) + { + p2ctab[i][0] = (((i & 128) ? 0x01000000 : 0) + | ((i & 64) ? 0x010000 : 0) + | ((i & 32) ? 0x0100 : 0) + | ((i & 16) ? 0x01 : 0)); + p2ctab[i][1] = (((i & 8) ? 0x01000000 : 0) + | ((i & 4) ? 0x010000 : 0) + | ((i & 2) ? 0x0100 : 0) + | ((i & 1) ? 0x01 : 0)); + } } #endif -static uae_u32 REGPARAM2 picasso_SetInterrupt (TrapContext *ctx) +static uae_u32 REGPARAM2 picasso_SetInterrupt(TrapContext *ctx) { - uaecptr bi = m68k_areg (regs, 0); - uae_u32 onoff = m68k_dreg (regs, 0); - interrupt_enabled = onoff; - //write_log (_T("Picasso_SetInterrupt(%08x,%d)\n"), bi, onoff); - return onoff; + uaecptr bi = m68k_areg(regs, 0); + uae_u32 onoff = m68k_dreg(regs, 0); + interrupt_enabled = onoff; + //write_log (_T("Picasso_SetInterrupt(%08x,%d)\n"), bi, onoff); + return onoff; } static uaecptr uaegfx_vblankname, uaegfx_portsname; -static void initvblankABI (uaecptr base, uaecptr ABI) +static void initvblankABI(uaecptr base, uaecptr ABI) { for (int i = 0; i < 22; i++) - put_byte (ABI + PSSO_BoardInfo_HardInterrupt + i, get_byte (base + CARD_PORTSIRQ + i)); + put_byte(ABI + PSSO_BoardInfo_HardInterrupt + i, get_byte(base + CARD_PORTSIRQ + i)); ABI_interrupt = ABI; } -static void initvblankirq (TrapContext *ctx, uaecptr base) +static void initvblankirq(TrapContext *ctx, uaecptr base) { - uaecptr p1 = base + CARD_VBLANKIRQ; - uaecptr p2 = base + CARD_PORTSIRQ; - uaecptr c = base + CARD_IRQCODE; + uaecptr p1 = base + CARD_VBLANKIRQ; + uaecptr p2 = base + CARD_PORTSIRQ; + uaecptr c = base + CARD_IRQCODE; - put_word (p1 + 8, 0x0205); - put_long (p1 + 10, uaegfx_vblankname); - put_long (p1 + 14, base + CARD_IRQFLAG); - put_long (p1 + 18, c); + put_word(p1 + 8, 0x0205); + put_long(p1 + 10, uaegfx_vblankname); + put_long(p1 + 14, base + CARD_IRQFLAG); + put_long(p1 + 18, c); - put_word (p2 + 8, 0x0205); - put_long (p2 + 10, uaegfx_portsname); - put_long (p2 + 14, base + CARD_IRQFLAG); - put_long (p2 + 18, c); + put_word(p2 + 8, 0x0205); + put_long(p2 + 10, uaegfx_portsname); + put_long(p2 + 14, base + CARD_IRQFLAG); + put_long(p2 + 18, c); - put_word (c, 0x4a11); c += 2; // tst.b (a1) CARD_IRQFLAG - put_word (c, 0x670e); c += 2; // beq.s label - put_word (c, 0x4211); c += 2; // clr.b (a1) - put_long (c, 0x2c690008); c += 4; // move.l 8(a1),a6 CARD_IRQEXECBASE - put_long (c, 0x22690004); c += 4; // move.l 4(a1),a1 CARD_IRQPTR - put_long (c, 0x4eaeff4c); c += 4; // jsr Cause(a6) - put_word (c, 0x7000); c += 2; // label: moveq #0,d0 - put_word (c, RTS); // rts + put_word(c, 0x4a11); + c += 2; // tst.b (a1) CARD_IRQFLAG + put_word(c, 0x670e); + c += 2; // beq.s label + put_word(c, 0x4211); + c += 2; // clr.b (a1) + put_long(c, 0x2c690008); + c += 4; // move.l 8(a1),a6 CARD_IRQEXECBASE + put_long(c, 0x22690004); + c += 4; // move.l 4(a1),a1 CARD_IRQPTR + put_long(c, 0x4eaeff4c); + c += 4; // jsr Cause(a6) + put_word(c, 0x7000); + c += 2; // label: moveq #0,d0 + put_word(c, RTS); // rts - m68k_areg (regs, 1) = p1; - m68k_dreg (regs, 0) = 5; /* VERTB */ - CallLib (ctx, get_long (4), -168); /* AddIntServer */ - m68k_areg (regs, 1) = p2; - m68k_dreg (regs, 0) = 3; /* PORTS */ - CallLib (ctx, get_long (4), -168); /* AddIntServer */ + m68k_areg(regs, 1) = p1; + m68k_dreg(regs, 0) = 5; /* VERTB */ + CallLib(ctx, get_long(4), -168); /* AddIntServer */ + m68k_areg(regs, 1) = p2; + m68k_dreg(regs, 0) = 3; /* PORTS */ + CallLib(ctx, get_long(4), -168); /* AddIntServer */ } static uae_u32 REGPARAM2 picasso_SetClock(TrapContext *ctx) { - uaecptr bi = m68k_areg (regs, 0); + uaecptr bi = m68k_areg(regs, 0); P96TRACE((_T("SetClock\n"))); return 0; } static uae_u32 REGPARAM2 picasso_SetMemoryMode(TrapContext *ctx) { - uaecptr bi = m68k_areg (regs, 0); - uae_u32 rgbformat = m68k_dreg (regs, 7); + uaecptr bi = m68k_areg(regs, 0); + uae_u32 rgbformat = m68k_dreg(regs, 7); P96TRACE((_T("SetMemoryMode\n"))); return 0; } @@ -3108,420 +3441,458 @@ static uae_u32 REGPARAM2 picasso_SetMemoryMode(TrapContext *ctx) if (ABI) \ put_long (ABI + func, start); -static void inituaegfxfuncs (uaecptr start, uaecptr ABI) +static void inituaegfxfuncs(uaecptr start, uaecptr ABI) { - if (uaegfx_old) - return; - org (start); + if (uaegfx_old) + return; + org(start); - dw (RTS); - /* ResolvePixelClock + dw(RTS); + /* ResolvePixelClock move.l D0,gmi_PixelClock(a1) ; pass the pixelclock through moveq #0,D0 ; index is 0 move.b #98,gmi_Numerator(a1) ; whatever move.b #14,gmi_Denominator(a1) ; whatever rts - */ - PUTABI (PSSO_BoardInfo_ResolvePixelClock); - dl (0x2340002c); - dw (0x7000); - dl (0x137c0062); dw (0x002a); - dl (0x137c000e); dw (0x002b); - dw (RTS); + */ + PUTABI(PSSO_BoardInfo_ResolvePixelClock); + dl(0x2340002c); + dw(0x7000); + dl(0x137c0062); + dw(0x002a); + dl(0x137c000e); + dw(0x002b); + dw(RTS); - /* GetPixelClock - move.l #CLOCK,D0 ; fill in D0 with our one true pixel clock - rts - */ - PUTABI (PSSO_BoardInfo_GetPixelClock); - dw (0x203c); - dl (100227260); - dw (RTS); + /* GetPixelClock + move.l #CLOCK,D0 ; fill in D0 with our one true pixel clock + rts + */ + PUTABI(PSSO_BoardInfo_GetPixelClock); + dw(0x203c); + dl(100227260); + dw(RTS); - /* CalculateMemory - ; this is simple, because we're not supporting planar modes in UAE - move.l a1,d0 - rts - */ - PUTABI (PSSO_BoardInfo_CalculateMemory); - dw (0x2009); - dw (RTS); + /* CalculateMemory + ; this is simple, because we're not supporting planar modes in UAE + move.l a1,d0 + rts + */ + PUTABI(PSSO_BoardInfo_CalculateMemory); + dw(0x2009); + dw(RTS); - /* GetCompatibleFormats - ; all formats can coexist without any problems, since we don't support planar stuff in UAE - move.l #RGBMASK_8BIT | RGBMASK_15BIT | RGBMASK_16BIT | RGBMASK_24BIT | RGBMASK_32BIT,d0 - rts - */ - PUTABI (PSSO_BoardInfo_GetCompatibleFormats); - dw (0x203c); - dl (RGBMASK_8BIT | RGBMASK_15BIT | RGBMASK_16BIT | RGBMASK_24BIT | RGBMASK_32BIT); - dw (RTS); + /* GetCompatibleFormats + ; all formats can coexist without any problems, since we don't support planar stuff in UAE + move.l #RGBMASK_8BIT | RGBMASK_15BIT | RGBMASK_16BIT | RGBMASK_24BIT | RGBMASK_32BIT,d0 + rts + */ + PUTABI(PSSO_BoardInfo_GetCompatibleFormats); + dw(0x203c); + dl(RGBMASK_8BIT | RGBMASK_15BIT | RGBMASK_16BIT | RGBMASK_24BIT | RGBMASK_32BIT); + dw(RTS); - /* CalculateBytesPerRow (optimized) */ - PUTABI (PSSO_BoardInfo_CalculateBytesPerRow); - dl (0x0c400140); // cmp.w #320,d0 - dw (0x6504); // bcs.s .l1 - calltrap (deftrap (picasso_CalculateBytesPerRow)); - dw (RTS); - dw (0x0c87); dl (0x00000010); // l1: cmp.l #$10,d7 - dw (0x640a); // bcc.s .l2 - dw (0x7200); // moveq #0,d1 - dl (0x123b7010); // move.b table(pc,d7.w),d1 - dw (0x6b04); // bmi.s l3 - dw (0xe368); // lsl.w d1,d0 - dw (RTS); // .l2 - dw (0x3200); // .l3 move.w d0,d1 - dw (0xd041); // add.w d1,d0 - dw (0xd041); // add.w d1,d0 - dw (RTS); - dl (0x0000ffff); // table - dl (0x01010202); - dl (0x02020101); - dl (0x01010100); + /* CalculateBytesPerRow (optimized) */ + PUTABI(PSSO_BoardInfo_CalculateBytesPerRow); + dl(0x0c400140); // cmp.w #320,d0 + dw(0x6504); // bcs.s .l1 + calltrap(deftrap(picasso_CalculateBytesPerRow)); + dw(RTS); + dw(0x0c87); + dl(0x00000010); // l1: cmp.l #$10,d7 + dw(0x640a); // bcc.s .l2 + dw(0x7200); // moveq #0,d1 + dl(0x123b7010); // move.b table(pc,d7.w),d1 + dw(0x6b04); // bmi.s l3 + dw(0xe368); // lsl.w d1,d0 + dw(RTS); // .l2 + dw(0x3200); // .l3 move.w d0,d1 + dw(0xd041); // add.w d1,d0 + dw(0xd041); // add.w d1,d0 + dw(RTS); + dl(0x0000ffff); // table + dl(0x01010202); + dl(0x02020101); + dl(0x01010100); - //RTGCALL2(PSSO_BoardInfo_SetClock, picasso_SetClock); - //RTGCALL2(PSSO_BoardInfo_SetMemoryMode, picasso_SetMemoryMode); - RTGNONE(PSSO_BoardInfo_SetClock); - RTGNONE(PSSO_BoardInfo_SetMemoryMode); - RTGNONE(PSSO_BoardInfo_SetWriteMask); - RTGNONE(PSSO_BoardInfo_SetClearMask); - RTGNONE(PSSO_BoardInfo_SetReadPlane); + //RTGCALL2(PSSO_BoardInfo_SetClock, picasso_SetClock); + //RTGCALL2(PSSO_BoardInfo_SetMemoryMode, picasso_SetMemoryMode); + RTGNONE(PSSO_BoardInfo_SetClock); + RTGNONE(PSSO_BoardInfo_SetMemoryMode); + RTGNONE(PSSO_BoardInfo_SetWriteMask); + RTGNONE(PSSO_BoardInfo_SetClearMask); + RTGNONE(PSSO_BoardInfo_SetReadPlane); #if 1 - RTGNONE(PSSO_BoardInfo_WaitVerticalSync); + RTGNONE(PSSO_BoardInfo_WaitVerticalSync); #else - PUTABI (PSSO_BoardInfo_WaitVerticalSync); - dl (0x48e7203e); // movem.l d2/a5/a6,-(sp) - dl (0x2c68003c); - dw (0x93c9); - dl (0x4eaefeda); - dw (0x2440); - dw (0x70ff); - dl (0x4eaefeb6); - dw (0x7400); - dw (0x1400); - dw (0x6b40); - dw (0x49f9); - dl (uaegfx_base + CARD_VSYNCLIST); - dw (0x47f9); - dl (uaegfx_base + CARD_VSYNCLIST + CARD_VSYNCMAX * 8); - dl (0x4eaeff88); - dw (0xb9cb); - dw (0x6606); - dl (0x4eaeff82); - dw (0x601c); - dw (0x4a94); - dw (0x6704); - dw (0x508c); - dw (0x60ee); - dw (0x288a); - dl (0x29420004); - dl (0x4eaeff82); - dw (0x7000); - dw (0x05c0); - dl (0x4eaefec2); - dw (0x4294); - dw (0x7000); - dw (0x1002); - dw (0x6b04); - dl (0x4eaefeb0); - dl (0x4cdf7c04); - dw (RTS); + PUTABI(PSSO_BoardInfo_WaitVerticalSync); + dl(0x48e7203e); // movem.l d2/a5/a6,-(sp) + dl(0x2c68003c); + dw(0x93c9); + dl(0x4eaefeda); + dw(0x2440); + dw(0x70ff); + dl(0x4eaefeb6); + dw(0x7400); + dw(0x1400); + dw(0x6b40); + dw(0x49f9); + dl(uaegfx_base + CARD_VSYNCLIST); + dw(0x47f9); + dl(uaegfx_base + CARD_VSYNCLIST + CARD_VSYNCMAX * 8); + dl(0x4eaeff88); + dw(0xb9cb); + dw(0x6606); + dl(0x4eaeff82); + dw(0x601c); + dw(0x4a94); + dw(0x6704); + dw(0x508c); + dw(0x60ee); + dw(0x288a); + dl(0x29420004); + dl(0x4eaeff82); + dw(0x7000); + dw(0x05c0); + dl(0x4eaefec2); + dw(0x4294); + dw(0x7000); + dw(0x1002); + dw(0x6b04); + dl(0x4eaefeb0); + dl(0x4cdf7c04); + dw(RTS); #endif - RTGNONE(PSSO_BoardInfo_WaitBlitter); + RTGNONE(PSSO_BoardInfo_WaitBlitter); #if 0 - RTGCALL2(PSSO_BoardInfo_, picasso_); - RTGCALL(PSSO_BoardInfo_, PSSO_BoardInfo_Default, picasso_); - RTGCALLDEFAULT(PSSO_BoardInfo_, PSSO_BoardInfo_Default); + RTGCALL2(PSSO_BoardInfo_, picasso_); + RTGCALL(PSSO_BoardInfo_, PSSO_BoardInfo_Default, picasso_); + RTGCALLDEFAULT(PSSO_BoardInfo_, PSSO_BoardInfo_Default); #endif - RTGCALL(PSSO_BoardInfo_BlitPlanar2Direct, PSSO_BoardInfo_BlitPlanar2DirectDefault, picasso_BlitPlanar2Direct); - RTGCALL(PSSO_BoardInfo_FillRect, PSSO_BoardInfo_FillRectDefault, picasso_FillRect); - RTGCALL(PSSO_BoardInfo_BlitRect, PSSO_BoardInfo_BlitRectDefault, picasso_BlitRect); - RTGCALL(PSSO_BoardInfo_BlitPlanar2Chunky, PSSO_BoardInfo_BlitPlanar2ChunkyDefault, picasso_BlitPlanar2Chunky); - RTGCALL(PSSO_BoardInfo_BlitTemplate, PSSO_BoardInfo_BlitTemplateDefault, picasso_BlitTemplate); - RTGCALL(PSSO_BoardInfo_InvertRect, PSSO_BoardInfo_InvertRectDefault, picasso_InvertRect); - RTGCALL(PSSO_BoardInfo_BlitRectNoMaskComplete, PSSO_BoardInfo_BlitRectNoMaskCompleteDefault, picasso_BlitRectNoMaskComplete); - RTGCALL(PSSO_BoardInfo_BlitPattern, PSSO_BoardInfo_BlitPatternDefault, picasso_BlitPattern); + RTGCALL(PSSO_BoardInfo_BlitPlanar2Direct, PSSO_BoardInfo_BlitPlanar2DirectDefault, picasso_BlitPlanar2Direct); + RTGCALL(PSSO_BoardInfo_FillRect, PSSO_BoardInfo_FillRectDefault, picasso_FillRect); + RTGCALL(PSSO_BoardInfo_BlitRect, PSSO_BoardInfo_BlitRectDefault, picasso_BlitRect); + RTGCALL(PSSO_BoardInfo_BlitPlanar2Chunky, PSSO_BoardInfo_BlitPlanar2ChunkyDefault, picasso_BlitPlanar2Chunky); + RTGCALL(PSSO_BoardInfo_BlitTemplate, PSSO_BoardInfo_BlitTemplateDefault, picasso_BlitTemplate); + RTGCALL(PSSO_BoardInfo_InvertRect, PSSO_BoardInfo_InvertRectDefault, picasso_InvertRect); + RTGCALL(PSSO_BoardInfo_BlitRectNoMaskComplete, PSSO_BoardInfo_BlitRectNoMaskCompleteDefault, picasso_BlitRectNoMaskComplete); + RTGCALL(PSSO_BoardInfo_BlitPattern, PSSO_BoardInfo_BlitPatternDefault, picasso_BlitPattern); - RTGCALL2(PSSO_BoardInfo_SetSwitch, picasso_SetSwitch); - RTGCALL2(PSSO_BoardInfo_SetColorArray, picasso_SetColorArray); - RTGCALL2(PSSO_BoardInfo_SetDAC, picasso_SetDAC); - RTGCALL2(PSSO_BoardInfo_SetGC, picasso_SetGC); - RTGCALL2(PSSO_BoardInfo_SetPanning, picasso_SetPanning); - RTGCALL2(PSSO_BoardInfo_SetDisplay, picasso_SetDisplay); + RTGCALL2(PSSO_BoardInfo_SetSwitch, picasso_SetSwitch); + RTGCALL2(PSSO_BoardInfo_SetColorArray, picasso_SetColorArray); + RTGCALL2(PSSO_BoardInfo_SetDAC, picasso_SetDAC); + RTGCALL2(PSSO_BoardInfo_SetGC, picasso_SetGC); + RTGCALL2(PSSO_BoardInfo_SetPanning, picasso_SetPanning); + RTGCALL2(PSSO_BoardInfo_SetDisplay, picasso_SetDisplay); - RTGCALL2(PSSO_BoardInfo_SetSprite, picasso_SetSprite); - RTGCALL2(PSSO_BoardInfo_SetSpritePosition, picasso_SetSpritePosition); - RTGCALL2(PSSO_BoardInfo_SetSpriteImage, picasso_SetSpriteImage); - RTGCALL2(PSSO_BoardInfo_SetSpriteColor, picasso_SetSpriteColor); + RTGCALL2(PSSO_BoardInfo_SetSprite, picasso_SetSprite); + RTGCALL2(PSSO_BoardInfo_SetSpritePosition, picasso_SetSpritePosition); + RTGCALL2(PSSO_BoardInfo_SetSpriteImage, picasso_SetSpriteImage); + RTGCALL2(PSSO_BoardInfo_SetSpriteColor, picasso_SetSpriteColor); - RTGCALLDEFAULT(PSSO_BoardInfo_ScrollPlanar, PSSO_BoardInfo_ScrollPlanarDefault); - RTGCALLDEFAULT(PSSO_BoardInfo_UpdatePlanar, PSSO_BoardInfo_UpdatePlanarDefault); - RTGCALLDEFAULT(PSSO_BoardInfo_DrawLine, PSSO_BoardInfo_DrawLineDefault); + RTGCALLDEFAULT(PSSO_BoardInfo_ScrollPlanar, PSSO_BoardInfo_ScrollPlanarDefault); + RTGCALLDEFAULT(PSSO_BoardInfo_UpdatePlanar, PSSO_BoardInfo_UpdatePlanarDefault); + RTGCALLDEFAULT(PSSO_BoardInfo_DrawLine, PSSO_BoardInfo_DrawLineDefault); - RTGCALL2(PSSO_BoardInfo_SetInterrupt, picasso_SetInterrupt); + RTGCALL2(PSSO_BoardInfo_SetInterrupt, picasso_SetInterrupt); - write_log (_T("uaegfx.card magic code: %08X-%08X ABI=%08X\n"), start, here (), ABI); + write_log(_T("uaegfx.card magic code: %08X-%08X ABI=%08X\n"), start, here(), ABI); if (ABI) - initvblankABI (uaegfx_base, ABI); + initvblankABI(uaegfx_base, ABI); } -void picasso_reset (void) +void picasso_reset(void) { - if (savestate_state != STATE_RESTORE) { - uaegfx_base = 0; - uaegfx_old = 0; - uaegfx_active = 0; - interrupt_enabled = 0; - reserved_gfxmem = 0; - resetpalette(); - InitPicasso96 (); + if (savestate_state != STATE_RESTORE) + { + uaegfx_base = 0; + uaegfx_old = 0; + uaegfx_active = 0; + interrupt_enabled = 0; + reserved_gfxmem = 0; + resetpalette(); + InitPicasso96(); } } -void uaegfx_install_code (uaecptr start) +void uaegfx_install_code(uaecptr start) { - uaegfx_rom = start; - org (start); - inituaegfxfuncs (start, 0); + uaegfx_rom = start; + org(start); + inituaegfxfuncs(start, 0); } #define UAEGFX_VERSION 3 #define UAEGFX_REVISION 3 -static uae_u32 REGPARAM2 gfx_open (TrapContext *context) +static uae_u32 REGPARAM2 gfx_open(TrapContext *context) { - put_word (uaegfx_base + 32, get_word (uaegfx_base + 32) + 1); - return uaegfx_base; + put_word(uaegfx_base + 32, get_word(uaegfx_base + 32) + 1); + return uaegfx_base; } -static uae_u32 REGPARAM2 gfx_close (TrapContext *context) +static uae_u32 REGPARAM2 gfx_close(TrapContext *context) { - put_word (uaegfx_base + 32, get_word (uaegfx_base + 32) - 1); - return 0; + put_word(uaegfx_base + 32, get_word(uaegfx_base + 32) - 1); + return 0; } -static uae_u32 REGPARAM2 gfx_expunge (TrapContext *context) +static uae_u32 REGPARAM2 gfx_expunge(TrapContext *context) { - return 0; + return 0; } -static uaecptr uaegfx_card_install (TrapContext *ctx, uae_u32 extrasize) +static uaecptr uaegfx_card_install(TrapContext *ctx, uae_u32 extrasize) { - uae_u32 functable, datatable, a2; - uaecptr openfunc, closefunc, expungefunc; - uaecptr findcardfunc, initcardfunc; - uaecptr exec = get_long (4); + uae_u32 functable, datatable, a2; + uaecptr openfunc, closefunc, expungefunc; + uaecptr findcardfunc, initcardfunc; + uaecptr exec = get_long(4); if (uaegfx_old || !gfxmem_start) - return 0; + return 0; - uaegfx_resid = ds (_T("UAE Graphics Card 3.3")); - uaegfx_vblankname = ds (_T("UAE Graphics Card VBLANK")); - uaegfx_portsname = ds (_T("UAE Graphics Card PORTS")); + uaegfx_resid = ds(_T("UAE Graphics Card 3.3")); + uaegfx_vblankname = ds(_T("UAE Graphics Card VBLANK")); + uaegfx_portsname = ds(_T("UAE Graphics Card PORTS")); - /* Open */ - openfunc = here (); - calltrap (deftrap (gfx_open)); dw (RTS); + /* Open */ + openfunc = here(); + calltrap(deftrap(gfx_open)); + dw(RTS); - /* Close */ - closefunc = here (); - calltrap (deftrap (gfx_close)); dw (RTS); + /* Close */ + closefunc = here(); + calltrap(deftrap(gfx_close)); + dw(RTS); - /* Expunge */ - expungefunc = here (); - calltrap (deftrap (gfx_expunge)); dw (RTS); + /* Expunge */ + expungefunc = here(); + calltrap(deftrap(gfx_expunge)); + dw(RTS); - /* FindCard */ - findcardfunc = here (); - calltrap (deftrap (picasso_FindCard)); dw (RTS); + /* FindCard */ + findcardfunc = here(); + calltrap(deftrap(picasso_FindCard)); + dw(RTS); - /* InitCard */ - initcardfunc = here (); - calltrap (deftrap (picasso_InitCard)); dw (RTS); + /* InitCard */ + initcardfunc = here(); + calltrap(deftrap(picasso_InitCard)); + dw(RTS); - functable = here (); - dl (openfunc); - dl (closefunc); - dl (expungefunc); - dl (EXPANSION_nullfunc); - dl (findcardfunc); - dl (initcardfunc); - dl (0xFFFFFFFF); /* end of table */ + functable = here(); + dl(openfunc); + dl(closefunc); + dl(expungefunc); + dl(EXPANSION_nullfunc); + dl(findcardfunc); + dl(initcardfunc); + dl(0xFFFFFFFF); /* end of table */ - datatable = makedatatable (uaegfx_resid, uaegfx_resname, 0x09, -50, UAEGFX_VERSION, UAEGFX_REVISION); + datatable = makedatatable(uaegfx_resid, uaegfx_resname, 0x09, -50, UAEGFX_VERSION, UAEGFX_REVISION); - a2 = m68k_areg (regs, 2); - m68k_areg (regs, 0) = functable; - m68k_areg (regs, 1) = datatable; - m68k_areg (regs, 2) = 0; - m68k_dreg (regs, 0) = CARD_SIZEOF + extrasize; - m68k_dreg (regs, 1) = 0; - uaegfx_base = CallLib (ctx, exec, -0x54); /* MakeLibrary */ - m68k_areg (regs, 2) = a2; - if (!uaegfx_base) - return 0; - m68k_areg (regs, 1) = uaegfx_base; - CallLib (ctx, exec, -0x18c); /* AddLibrary */ - m68k_areg (regs, 1) = EXPANSION_explibname; - m68k_dreg (regs, 0) = 0; - put_long (uaegfx_base + CARD_EXPANSIONBASE, CallLib (ctx, exec, -0x228)); /* OpenLibrary */ - put_long (uaegfx_base + CARD_EXECBASE, exec); - put_long (uaegfx_base + CARD_IRQEXECBASE, exec); - put_long (uaegfx_base + CARD_NAME, uaegfx_resname); - put_long (uaegfx_base + CARD_RESLIST, uaegfx_base + CARD_SIZEOF); - put_long (uaegfx_base + CARD_RESLISTSIZE, extrasize); + a2 = m68k_areg(regs, 2); + m68k_areg(regs, 0) = functable; + m68k_areg(regs, 1) = datatable; + m68k_areg(regs, 2) = 0; + m68k_dreg(regs, 0) = CARD_SIZEOF + extrasize; + m68k_dreg(regs, 1) = 0; + uaegfx_base = CallLib(ctx, exec, -0x54); /* MakeLibrary */ + m68k_areg(regs, 2) = a2; + if (!uaegfx_base) + return 0; + m68k_areg(regs, 1) = uaegfx_base; + CallLib(ctx, exec, -0x18c); /* AddLibrary */ + m68k_areg(regs, 1) = EXPANSION_explibname; + m68k_dreg(regs, 0) = 0; + put_long(uaegfx_base + CARD_EXPANSIONBASE, CallLib(ctx, exec, -0x228)); /* OpenLibrary */ + put_long(uaegfx_base + CARD_EXECBASE, exec); + put_long(uaegfx_base + CARD_IRQEXECBASE, exec); + put_long(uaegfx_base + CARD_NAME, uaegfx_resname); + put_long(uaegfx_base + CARD_RESLIST, uaegfx_base + CARD_SIZEOF); + put_long(uaegfx_base + CARD_RESLISTSIZE, extrasize); - initvblankirq (ctx, uaegfx_base); + initvblankirq(ctx, uaegfx_base); - write_log (_T("uaegfx.card %d.%d init @%08X\n"), UAEGFX_VERSION, UAEGFX_REVISION, uaegfx_base); + write_log(_T("uaegfx.card %d.%d init @%08X\n"), UAEGFX_VERSION, UAEGFX_REVISION, uaegfx_base); uaegfx_active = 1; - return uaegfx_base; + return uaegfx_base; } -uae_u32 picasso_demux (uae_u32 arg, TrapContext *ctx) +uae_u32 picasso_demux(uae_u32 arg, TrapContext *ctx) { - uae_u32 num = get_long (m68k_areg (regs, 7) + 4); + uae_u32 num = get_long(m68k_areg(regs, 7) + 4); - if (uaegfx_base) { - if (num >= 16 && num <= 39) { - write_log (_T("uaelib: obsolete Picasso96 uaelib hook called, call ignored\n")); + if (uaegfx_base) + { + if (num >= 16 && num <= 39) + { + write_log(_T("uaelib: obsolete Picasso96 uaelib hook called, call ignored\n")); return 0; } } - if (!uaegfx_old) { - write_log (_T("uaelib: uaelib hook in use\n")); + if (!uaegfx_old) + { + write_log(_T("uaelib: uaelib hook in use\n")); uaegfx_old = 1; uaegfx_active = 1; } switch (num) { - case 16: return picasso_FindCard (ctx); - case 17: return picasso_FillRect (ctx); - case 18: return picasso_SetSwitch (ctx); - case 19: return picasso_SetColorArray (ctx); - case 20: return picasso_SetDAC (ctx); - case 21: return picasso_SetGC (ctx); - case 22: return picasso_SetPanning (ctx); - case 23: return picasso_CalculateBytesPerRow (ctx); - case 24: return picasso_BlitPlanar2Chunky (ctx); - case 25: return picasso_BlitRect (ctx); - case 26: return picasso_SetDisplay (ctx); - case 27: return picasso_BlitTemplate (ctx); - case 28: return picasso_BlitRectNoMaskComplete (ctx); - case 29: return picasso_InitCard (ctx); - case 30: return picasso_BlitPattern (ctx); - case 31: return picasso_InvertRect (ctx); - case 32: return picasso_BlitPlanar2Direct (ctx); - //case 34: return picasso_WaitVerticalSync (ctx); - case 35: return allocated_gfxmem ? 1 : 0; - case 36: return picasso_SetSprite (ctx); - case 37: return picasso_SetSpritePosition (ctx); - case 38: return picasso_SetSpriteImage (ctx); - case 39: return picasso_SetSpriteColor (ctx); + case 16: + return picasso_FindCard(ctx); + case 17: + return picasso_FillRect(ctx); + case 18: + return picasso_SetSwitch(ctx); + case 19: + return picasso_SetColorArray(ctx); + case 20: + return picasso_SetDAC(ctx); + case 21: + return picasso_SetGC(ctx); + case 22: + return picasso_SetPanning(ctx); + case 23: + return picasso_CalculateBytesPerRow(ctx); + case 24: + return picasso_BlitPlanar2Chunky(ctx); + case 25: + return picasso_BlitRect(ctx); + case 26: + return picasso_SetDisplay(ctx); + case 27: + return picasso_BlitTemplate(ctx); + case 28: + return picasso_BlitRectNoMaskComplete(ctx); + case 29: + return picasso_InitCard(ctx); + case 30: + return picasso_BlitPattern(ctx); + case 31: + return picasso_InvertRect(ctx); + case 32: + return picasso_BlitPlanar2Direct(ctx); + //case 34: return picasso_WaitVerticalSync (ctx); + case 35: + return allocated_gfxmem ? 1 : 0; + case 36: + return picasso_SetSprite(ctx); + case 37: + return picasso_SetSpritePosition(ctx); + case 38: + return picasso_SetSpriteImage(ctx); + case 39: + return picasso_SetSpriteColor(ctx); } return 0; } -void restore_p96_finish (void) +void restore_p96_finish(void) { - init_alloc (NULL, 0); - if (uaegfx_rom && boardinfo) - inituaegfxfuncs (uaegfx_rom, boardinfo); + init_alloc(NULL, 0); + if (uaegfx_rom && boardinfo) + inituaegfxfuncs(uaegfx_rom, boardinfo); #if 0 - if (picasso_requested_on) { + if (picasso_requested_on) + { picasso_on = true; set_gc_called = 1; - init_picasso_screen (); - init_hz_p96 (); - picasso_refresh (); + init_picasso_screen(); + init_hz_p96(); + picasso_refresh(); } #endif } -uae_u8 *restore_p96 (uae_u8 *src) +uae_u8 *restore_p96(uae_u8 *src) { - uae_u32 flags; + uae_u32 flags; int i; - if (restore_u32 () != 2) - return src; - InitPicasso96(); - flags = restore_u32(); - picasso_requested_on = !!(flags & 1); - picasso96_state.SwitchState = picasso_requested_on; - picasso_on = 0; - init_picasso_screen_called = 0; - set_gc_called = !!(flags & 2); - set_panning_called = !!(flags & 4); - interrupt_enabled = !!(flags & 32); - changed_prefs.rtgmem_size = restore_u32(); - picasso96_state.Address = restore_u32(); - picasso96_state.RGBFormat = restore_u32(); - picasso96_state.Width = restore_u16(); - picasso96_state.Height = restore_u16(); - picasso96_state.VirtualWidth = restore_u16(); - picasso96_state.VirtualHeight = restore_u16(); - picasso96_state.XOffset = restore_u16(); - picasso96_state.YOffset = restore_u16(); - picasso96_state.GC_Depth = restore_u8(); - picasso96_state.GC_Flags = restore_u8(); - picasso96_state.BytesPerRow = restore_u16(); - picasso96_state.BytesPerPixel = restore_u8(); - uaegfx_base = restore_u32 (); - uaegfx_rom = restore_u32 (); - boardinfo = restore_u32 (); - if (flags & 64) { - for (i = 0; i < 256; i++) { - picasso96_state.CLUT[i].Red = restore_u8 (); - picasso96_state.CLUT[i].Green = restore_u8 (); - picasso96_state.CLUT[i].Blue = restore_u8 (); + if (restore_u32() != 2) + return src; + InitPicasso96(); + flags = restore_u32(); + picasso_requested_on = !! (flags & 1); + picasso96_state.SwitchState = picasso_requested_on; + picasso_on = 0; + init_picasso_screen_called = 0; + set_gc_called = !! (flags & 2); + set_panning_called = !! (flags & 4); + interrupt_enabled = !! (flags & 32); + changed_prefs.rtgmem_size = restore_u32(); + picasso96_state.Address = restore_u32(); + picasso96_state.RGBFormat = restore_u32(); + picasso96_state.Width = restore_u16(); + picasso96_state.Height = restore_u16(); + picasso96_state.VirtualWidth = restore_u16(); + picasso96_state.VirtualHeight = restore_u16(); + picasso96_state.XOffset = restore_u16(); + picasso96_state.YOffset = restore_u16(); + picasso96_state.GC_Depth = restore_u8(); + picasso96_state.GC_Flags = restore_u8(); + picasso96_state.BytesPerRow = restore_u16(); + picasso96_state.BytesPerPixel = restore_u8(); + uaegfx_base = restore_u32(); + uaegfx_rom = restore_u32(); + boardinfo = restore_u32(); + if (flags & 64) + { + for (i = 0; i < 256; i++) + { + picasso96_state.CLUT[i].Red = restore_u8(); + picasso96_state.CLUT[i].Green = restore_u8(); + picasso96_state.CLUT[i].Blue = restore_u8(); } } - picasso96_state.HostAddress = NULL; - picasso_SetPanningInit(); - picasso96_state.Extent = picasso96_state.Address + picasso96_state.BytesPerRow * picasso96_state.VirtualHeight; - return src; + picasso96_state.HostAddress = NULL; + picasso_SetPanningInit(); + picasso96_state.Extent = picasso96_state.Address + picasso96_state.BytesPerRow * picasso96_state.VirtualHeight; + return src; } -uae_u8 *save_p96 (int *len, uae_u8 *dstptr) +uae_u8 *save_p96(int *len, uae_u8 *dstptr) { - uae_u8 *dstbak,*dst; + uae_u8 *dstbak, *dst; int i; - if (currprefs.rtgmem_size == 0) - return NULL; - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc (uae_u8, 1000); - save_u32 (2); - save_u32 ((picasso_on ? 1 : 0) | (set_gc_called ? 2 : 0) | (set_panning_called ? 4 : 0) | - (interrupt_enabled ? 32 : 0) | 64); - save_u32 (currprefs.rtgmem_size); - save_u32 (picasso96_state.Address); - save_u32 (picasso96_state.RGBFormat); - save_u16 (picasso96_state.Width); - save_u16 (picasso96_state.Height); - save_u16 (picasso96_state.VirtualWidth); - save_u16 (picasso96_state.VirtualHeight); - save_u16 (picasso96_state.XOffset); - save_u16 (picasso96_state.YOffset); - save_u8 (picasso96_state.GC_Depth); - save_u8 (picasso96_state.GC_Flags); - save_u16 (picasso96_state.BytesPerRow); - save_u8 (picasso96_state.BytesPerPixel); - save_u32 (uaegfx_base); - save_u32 (uaegfx_rom); - save_u32 (boardinfo); - for (i = 0; i < 256; i++) { - save_u8 (picasso96_state.CLUT[i].Red); - save_u8 (picasso96_state.CLUT[i].Green); - save_u8 (picasso96_state.CLUT[i].Blue); + if (currprefs.rtgmem_size == 0) + return NULL; + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc(uae_u8, 1000); + save_u32(2); + save_u32((picasso_on ? 1 : 0) | (set_gc_called ? 2 : 0) | (set_panning_called ? 4 : 0) | + (interrupt_enabled ? 32 : 0) | 64); + save_u32(currprefs.rtgmem_size); + save_u32(picasso96_state.Address); + save_u32(picasso96_state.RGBFormat); + save_u16(picasso96_state.Width); + save_u16(picasso96_state.Height); + save_u16(picasso96_state.VirtualWidth); + save_u16(picasso96_state.VirtualHeight); + save_u16(picasso96_state.XOffset); + save_u16(picasso96_state.YOffset); + save_u8(picasso96_state.GC_Depth); + save_u8(picasso96_state.GC_Flags); + save_u16(picasso96_state.BytesPerRow); + save_u8(picasso96_state.BytesPerPixel); + save_u32(uaegfx_base); + save_u32(uaegfx_rom); + save_u32(boardinfo); + for (i = 0; i < 256; i++) + { + save_u8(picasso96_state.CLUT[i].Red); + save_u8(picasso96_state.CLUT[i].Green); + save_u8(picasso96_state.CLUT[i].Blue); } - *len = dst - dstbak; - return dstbak; + *len = dst - dstbak; + return dstbak; } #endif