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)
#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
_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]) {
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;
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)
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)
_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);
}