mirror of
https://github.com/86Box/86Box.git
synced 2026-02-26 14:03:16 -07:00
Merge branch 'master' of ssh://github.com/86Box/86Box into feature/mtrr
This commit is contained in:
@@ -71,7 +71,7 @@ typedef int (*NETSETLINKSTATE)(void *);
|
||||
|
||||
typedef struct netpkt {
|
||||
void *priv;
|
||||
uint8_t *data;
|
||||
uint8_t data[65536]; /* Maximum length + 1 to round up to the nearest power of 2. */
|
||||
int len;
|
||||
|
||||
struct netpkt *prev, *next;
|
||||
|
||||
50
src/mem.c
50
src/mem.c
@@ -691,7 +691,7 @@ writemembl(uint32_t addr, uint8_t val)
|
||||
mem_mapping_t *map;
|
||||
mem_logical_addr = addr;
|
||||
|
||||
if (page_lookup[addr>>12]) {
|
||||
if (page_lookup[addr>>12] && page_lookup[addr>>12]->write_b) {
|
||||
page_lookup[addr>>12]->write_b(addr, val, page_lookup[addr>>12]);
|
||||
return;
|
||||
}
|
||||
@@ -799,7 +799,7 @@ writememwl(uint32_t addr, uint16_t val)
|
||||
}
|
||||
}
|
||||
|
||||
if (page_lookup[addr>>12]) {
|
||||
if (page_lookup[addr>>12] && page_lookup[addr>>12]->write_w) {
|
||||
page_lookup[addr>>12]->write_w(addr, val, page_lookup[addr>>12]);
|
||||
return;
|
||||
}
|
||||
@@ -918,7 +918,7 @@ writememll(uint32_t addr, uint32_t val)
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (page_lookup[addr>>12]) {
|
||||
if (page_lookup[addr>>12] && page_lookup[addr>>12]->write_l) {
|
||||
page_lookup[addr>>12]->write_l(addr, val, page_lookup[addr>>12]);
|
||||
return;
|
||||
}
|
||||
@@ -1033,7 +1033,7 @@ writememql(uint32_t addr, uint64_t val)
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (page_lookup[addr>>12]) {
|
||||
if (page_lookup[addr>>12] && page_lookup[addr>>12]->write_l) {
|
||||
page_lookup[addr>>12]->write_l(addr, val, page_lookup[addr>>12]);
|
||||
page_lookup[addr>>12]->write_l(addr + 4, val >> 32, page_lookup[addr>>12]);
|
||||
return;
|
||||
@@ -1190,7 +1190,7 @@ writememwl(uint32_t seg, uint32_t addr, uint16_t val)
|
||||
}
|
||||
}
|
||||
|
||||
if (page_lookup[addr2>>12]) {
|
||||
if (page_lookup[addr2>>12] && page_lookup[addr2>>12]->write_w) {
|
||||
page_lookup[addr2>>12]->write_w(addr2, val, page_lookup[addr2>>12]);
|
||||
return;
|
||||
}
|
||||
@@ -1312,7 +1312,7 @@ writememll(uint32_t seg, uint32_t addr, uint32_t val)
|
||||
}
|
||||
}
|
||||
|
||||
if (page_lookup[addr2>>12]) {
|
||||
if (page_lookup[addr2>>12] && page_lookup[addr2>>12]->write_l) {
|
||||
page_lookup[addr2>>12]->write_l(addr2, val, page_lookup[addr2>>12]);
|
||||
return;
|
||||
}
|
||||
@@ -1429,7 +1429,7 @@ writememql(uint32_t seg, uint32_t addr, uint64_t val)
|
||||
}
|
||||
}
|
||||
|
||||
if (page_lookup[addr2>>12]) {
|
||||
if (page_lookup[addr2>>12] && page_lookup[addr2>>12]->write_l) {
|
||||
page_lookup[addr2>>12]->write_l(addr2, val, page_lookup[addr2>>12]);
|
||||
page_lookup[addr2>>12]->write_l(addr2 + 4, val >> 32, page_lookup[addr2>>12]);
|
||||
return;
|
||||
@@ -2439,7 +2439,7 @@ mem_a20_init(void)
|
||||
void
|
||||
mem_reset(void)
|
||||
{
|
||||
uint32_t c, m;
|
||||
uint32_t c, m, m2;
|
||||
|
||||
m = 1024UL * mem_size;
|
||||
if (ram != NULL) {
|
||||
@@ -2460,23 +2460,21 @@ mem_reset(void)
|
||||
m = 4096;
|
||||
} else {
|
||||
/* 80386+; maximum address space is 4GB. */
|
||||
if (is486) {
|
||||
/* We need this since there might be BIOS execution at the end of RAM,
|
||||
which could break the recompiler if there's not enough page elements. */
|
||||
m = 1048576;
|
||||
} else {
|
||||
m = (mem_size + 384) >> 2;
|
||||
if ((m << 2) < (mem_size + 384))
|
||||
m++;
|
||||
if (m < 4096)
|
||||
m = 4096;
|
||||
}
|
||||
m = 1048576;
|
||||
}
|
||||
} else {
|
||||
/* 8088/86; maximum address space is 1MB. */
|
||||
m = 256;
|
||||
}
|
||||
|
||||
/* Calculate the amount of pages used by RAM, so that we can
|
||||
give all the pages above this amount NULL write handlers. */
|
||||
m2 = (mem_size + 384) >> 2;
|
||||
if ((m2 << 2) < (mem_size + 384))
|
||||
m2++;
|
||||
if (m2 < 4096)
|
||||
m2 = 4096;
|
||||
|
||||
/*
|
||||
* Allocate and initialize the (new) page table.
|
||||
* We only do this if the size of the page table has changed.
|
||||
@@ -2552,9 +2550,17 @@ mem_log("MEM: reset: new pages=%08lx, pages_sz=%i\n", pages, pages_sz);
|
||||
|
||||
for (c = 0; c < pages_sz; c++) {
|
||||
pages[c].mem = &ram[c << 12];
|
||||
pages[c].write_b = mem_write_ramb_page;
|
||||
pages[c].write_w = mem_write_ramw_page;
|
||||
pages[c].write_l = mem_write_raml_page;
|
||||
if (c < m) {
|
||||
pages[c].write_b = mem_write_ramb_page;
|
||||
pages[c].write_w = mem_write_ramw_page;
|
||||
pages[c].write_l = mem_write_raml_page;
|
||||
} else {
|
||||
/* Make absolute sure non-RAM pages have NULL handlers so the
|
||||
memory read/write handlers know to ignore them. */
|
||||
pages[c].write_b = NULL;
|
||||
pages[c].write_w = NULL;
|
||||
pages[c].write_l = NULL;
|
||||
}
|
||||
#ifdef USE_NEW_DYNAREC
|
||||
pages[c].evict_prev = EVICT_NOT_IN_LIST;
|
||||
pages[c].byte_dirty_mask = &byte_dirty_mask[c * 64];
|
||||
|
||||
@@ -230,7 +230,6 @@ network_queue_put(int tx, void *priv, uint8_t *data, int len)
|
||||
temp = (netpkt_t *) malloc(sizeof(netpkt_t));
|
||||
memset(temp, 0, sizeof(netpkt_t));
|
||||
temp->priv = priv;
|
||||
temp->data = (uint8_t *) malloc(len);
|
||||
memcpy(temp->data, data, len);
|
||||
temp->len = len;
|
||||
temp->prev = last_pkt[tx];
|
||||
@@ -266,8 +265,6 @@ network_queue_advance(int tx)
|
||||
return;
|
||||
|
||||
first_pkt[tx] = temp->next;
|
||||
if (temp->data != NULL)
|
||||
free(temp->data);
|
||||
free(temp);
|
||||
|
||||
if (first_pkt[tx] == NULL)
|
||||
@@ -284,8 +281,6 @@ network_queue_clear(int tx)
|
||||
return;
|
||||
|
||||
do {
|
||||
if (temp->data != NULL)
|
||||
free(temp->data);
|
||||
free(temp);
|
||||
temp = temp->next;
|
||||
} while (temp != NULL);
|
||||
|
||||
@@ -89,8 +89,8 @@ win_mouse_handle(PRAWINPUT raw)
|
||||
* seems to work fine for RDP on Windows 10
|
||||
* Not sure about other environments.
|
||||
*/
|
||||
mousestate.dx += (state.lLastX - x)/100;
|
||||
mousestate.dy += (state.lLastY - y)/100;
|
||||
mousestate.dx += (state.lLastX - x)/25;
|
||||
mousestate.dy += (state.lLastY - y)/25;
|
||||
x=state.lLastX;
|
||||
y=state.lLastY;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user