]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Show full memory map in hardware info panel when emulation is running.
authorToni Wilen <twilen@winuae.net>
Fri, 10 Mar 2023 18:16:16 +0000 (20:16 +0200)
committerToni Wilen <twilen@winuae.net>
Fri, 10 Mar 2023 18:16:16 +0000 (20:16 +0200)
expansion.cpp
include/autoconf.h
od-win32/win32gui.cpp

index a5deafae34153cd44b17b219525cbe77fb23fab3..ac65082b1b2cdef2719c15561c7b8104a6a46e63 100644 (file)
@@ -2761,6 +2761,115 @@ void free_expansion_bank(addrbank *bank)
        bank->reserved_size = 0;
 }
 
+struct autoconfig_info *expansion_get_bank_data(struct uae_prefs *p, uaecptr *addrp)
+{
+       uaecptr addr = *addrp;
+       static struct autoconfig_info acid;
+       struct autoconfig_info *aci = NULL;
+
+       if (addr >= 0x01000000 && currprefs.address_space_24) {
+               return NULL;
+       }
+       for (;;) {
+               addrbank *ab = &get_mem_bank(addr);
+               if (ab && ab != &dummy_bank) {
+                       aci = expansion_get_autoconfig_by_address(p, addr, 0);
+                       if (aci && expansion_get_autoconfig_by_address(p, addr - 1, 0) != aci) {
+                               addrbank *ab2 = ab;
+                               struct autoconfig_info *aci2;
+                               int size = 0;
+                               for (;;) {
+                                       addr += 65536;
+                                       size += 65536;
+                                       ab2 = &get_mem_bank(addr);
+                                       aci2 = expansion_get_autoconfig_by_address(p, addr, 0);
+                                       if (ab != ab2) {
+                                               break;
+                                       }
+                                       if (aci2 != aci) {
+                                               break;
+                                       }
+                                       if (aci->size > 0 && size >= aci->size) {
+                                               break;
+                                       }
+                               }
+                               *addrp = addr;
+                               return aci;
+                       }
+                       uaecptr addr2 = addr;
+                       aci = &acid;
+                       memset(aci, 0, sizeof(struct autoconfig_info));
+                       aci->autoconfig_bytes[0] = 0xff;
+                       if (ab->sub_banks) {
+                               uaecptr saddr = addr;
+                               uaecptr saddr1 = saddr;
+                               uaecptr saddr2 = saddr;
+                               addrbank *sab1 = get_sub_bank(&saddr1);
+                               for (;;) {
+                                       saddr2 = saddr1 + 1;
+                                       addrbank *sab2 = get_sub_bank(&saddr2);
+                                       if (sab1 != sab2 || (saddr1 & 65535) == 65535) {
+                                               aci->addrbank = sab1;
+                                               aci->start = addr;
+                                               aci->size = saddr2 - addr;
+                                               if (sab1->name) {
+                                                       _tcscpy(aci->name, sab1->name);
+                                               }
+                                               addr = saddr2;
+                                               *addrp = addr;
+                                               break;
+                                       }
+                                       saddr1++;
+                               }
+                               if (aci->addrbank == &dummy_bank) {
+                                       addr = saddr2;
+                                       continue;
+                               }
+                               return aci;
+                       } else {
+                               aci->addrbank = ab;
+                               aci->start = addr;
+                               aci->size = ab->allocated_size;
+                               if (ab->name) {
+                                       _tcscpy(aci->name, ab->name);
+                               }
+                               addrbank *ab2 = ab;
+                               int size = 0;
+                               for (;;) {
+                                       addr += 65536;
+                                       size += 65536;
+                                       ab2 = &get_mem_bank(addr);
+                                       if (ab != ab2) {
+                                               break;
+                                       }
+                                       if (aci->size > 0 && size >= aci->size) {
+                                               break;
+                                       }
+                               }
+                       }
+                       if (aci->size == 0) {
+                               aci->size = addr - addr2;
+                       }
+                       *addrp = addr;
+                       return aci;
+               }
+
+               for (;;) {
+                       addr += 65536;
+                       if (addr >= 0x01000000 && currprefs.address_space_24) {
+                               return NULL;
+                       }
+                       if (addr < 65536) {
+                               return NULL;
+                       }
+                       ab = &get_mem_bank(addr);
+                       if (ab != NULL && ab != &dummy_bank) {
+                               break;
+                       }
+               }
+       }
+}
+
 struct autoconfig_info *expansion_get_autoconfig_data(struct uae_prefs *p, int index)
 {
        if (index >= cardno)
index de95e08733f209485a780183e1e0a82be617850b..887bb4ff0cfa63a2ed87cf60d52149d7c778a6e4 100644 (file)
@@ -156,6 +156,7 @@ extern void expansion_generate_autoconfig_info(struct uae_prefs *p);
 extern struct autoconfig_info *expansion_get_autoconfig_info(struct uae_prefs*, int romtype, int devnum);
 extern struct autoconfig_info *expansion_get_autoconfig_data(struct uae_prefs *p, int index);
 extern struct autoconfig_info *expansion_get_autoconfig_by_address(struct uae_prefs *p, uaecptr addr, int index);
+extern struct autoconfig_info *expansion_get_bank_data(struct uae_prefs *p, uaecptr *addr);
 extern void expansion_set_autoconfig_sort(struct uae_prefs *p);
 extern int expansion_autoconfig_move(struct uae_prefs *p, int index, int direction, bool test);
 extern bool expansion_can_move(struct uae_prefs *p, int index);
index 4ca383b9909db561d29db591d9bb5fbca32e6fbe..fe931a179a17f0be088820a36a55be75e1bef7d4 100644 (file)
@@ -4658,7 +4658,7 @@ static int clicked_entry = -1;
 #define MISC1_COLUMNS 1
 #define MAX_COLUMN_HEADING_WIDTH 20
 #define CD_COLUMNS 3
-#define BOARD_COLUMNS 5
+#define BOARD_COLUMNS 6
 
 #define LV_LOADSAVE 1
 #define LV_HARDDISK 2
@@ -5007,8 +5007,9 @@ static void InitializeListView (HWND hDlg)
                _tcscpy(column_heading[0], _T("Type"));
                _tcscpy(column_heading[1], _T("Name"));
                _tcscpy(column_heading[2], _T("Start"));
-               _tcscpy(column_heading[3], _T("Size"));
-               _tcscpy(column_heading[4], _T("ID"));
+               _tcscpy(column_heading[3], _T("End"));
+               _tcscpy(column_heading[4], _T("Size"));
+               _tcscpy(column_heading[5], _T("ID"));
 
        } else if (hDlg == pages[HARDDISK_ID]) {
 
@@ -5115,17 +5116,25 @@ static void InitializeListView (HWND hDlg)
 
        if (lv_type == LV_BOARD) {
 
+               listview_column_width[0] = MulDiv(40, dpi, 72);
                listview_column_width[1] = MulDiv(200, dpi, 72);
                listview_column_width[2] = MulDiv(90, dpi, 72);
                listview_column_width[3] = MulDiv(90, dpi, 72);
                listview_column_width[4] = MulDiv(90, dpi, 72);
+               listview_column_width[5] = MulDiv(90, dpi, 72);
                i = 0;
                if (full_property_sheet)
                        expansion_generate_autoconfig_info(&workprefs);
                uaecptr highest_expamem = 0;
+               uaecptr addr = 0;
                for (;;) {
                        TCHAR tmp[200];
-                       struct autoconfig_info *aci = expansion_get_autoconfig_data(full_property_sheet ? &workprefs : &currprefs, i);
+                       struct autoconfig_info *aci = NULL;
+                       if (full_property_sheet) {
+                               aci = expansion_get_autoconfig_data(&workprefs, i);
+                       } else {
+                               aci = expansion_get_bank_data(&currprefs, &addr);
+                       }
                        if (aci) {
                                if (aci->zorro == 3 && aci->size != 0 && aci->start + aci->size > highest_expamem)
                                        highest_expamem = aci->start + aci->size;
@@ -5144,7 +5153,7 @@ static void InitializeListView (HWND hDlg)
                                if (expansion_can_move(&workprefs, i))
                                        lvstruct.lParam |= 1;
                                // outside or crosses 2G "border"
-                               if (aci->zorro == 3 && aci->start + aci->size > 0x80000000 || aci->start + aci->size < aci->start)
+                               if (aci->zorro == 3 && (aci->start + aci->size > 0x80000000 || aci->start + aci->size < aci->start))
                                        lvstruct.lParam |= 2;
                                // outside or crosses 4G "border"
                                if (aci->zorro == 3 && aci->start == 0xffffffff)
@@ -5166,13 +5175,17 @@ static void InitializeListView (HWND hDlg)
                        result = ListView_InsertItem(list, &lvstruct);
                        tmp[0] = 0;
                        TCHAR *s = tmp;
-                       if (aci && aci->parent_of_previous) {
-                               _tcscat(s, _T(" - "));
+                       if (full_property_sheet) {
+                               if (aci && aci->parent_of_previous) {
+                                       _tcscat(s, _T(" - "));
+                               }
+                               if (aci && (aci->parent_address_space || aci->parent_romtype) && !aci->parent_of_previous) {
+                                       _tcscat(s, _T("? "));
+                               }
                        }
-                       if (aci && (aci->parent_address_space || aci->parent_romtype) && !aci->parent_of_previous)
-                               _tcscat(s, _T("? "));
-                       if (aci)
+                       if (aci && aci->name) {
                                _tcscat(s, aci->name);
+                       }
                        ListView_SetItemText(list, result, 1, tmp);
                        if (aci) {
                                if (aci->start != 0xffffffff)
@@ -5181,17 +5194,22 @@ static void InitializeListView (HWND hDlg)
                                        _tcscpy(tmp, _T("-"));
                                ListView_SetItemText(list, result, 2, tmp);
                                if (aci->size != 0)
-                                       _stprintf(tmp, _T("0x%08x"), aci->size);
+                                       _stprintf(tmp, _T("0x%08x"), aci->start + aci->size - 1);
                                else
                                        _tcscpy(tmp, _T("-"));
                                ListView_SetItemText(list, result, 3, tmp);
+                               if (aci->size != 0)
+                                       _stprintf(tmp, _T("0x%08x"), aci->size);
+                               else
+                                       _tcscpy(tmp, _T("-"));
+                               ListView_SetItemText(list, result, 4, tmp);
                                if (aci->autoconfig_bytes[0] != 0xff)
                                        _stprintf(tmp, _T("0x%04x/0x%02x"),
                                        (aci->autoconfig_bytes[4] << 8) | aci->autoconfig_bytes[5], aci->autoconfig_bytes[1]);
                                else
                                        _tcscpy(tmp, _T("-"));
-                               ListView_SetItemText(list, result, 4, tmp);
-                       } else {
+                               ListView_SetItemText(list, result, 5, tmp);
+                       } else if (full_property_sheet) {
                                _stprintf(tmp, _T("0x%08x"), highest_expamem);
                                ListView_SetItemText(list, result, 2, tmp);
                        }