mirror of
https://github.com/86Box/86Box.git
synced 2026-02-24 10:28:19 -07:00
Merge branch 'master' into pc98x1
This commit is contained in:
@@ -561,9 +561,6 @@ static void
|
||||
fdc_rate(fdc_t *fdc, int drive)
|
||||
{
|
||||
fdc_update_rate(fdc, drive);
|
||||
#if 0
|
||||
fdc_log("FDD %c: Setting rate: %i, %i, %i (%i, %i)\n", 0x41 + drive, fdc->drvrate[drive], fdc->rate, fdc_get_densel(fdc, drive), fdc->rwc[drive], fdc->densel_force);
|
||||
#endif
|
||||
fdc_log("FDD %c: [%i] Setting rate: %i, %i, %i (%i, %i, %i)\n", 0x41 + drive, fdc->enh_mode, fdc->drvrate[drive], fdc->rate, fdc_get_densel(fdc, drive), fdc->rwc[drive], fdc->densel_force, fdc->densel_polarity);
|
||||
fdd_set_densel(fdc_get_densel(fdc, drive));
|
||||
fdc_log("FDD %c: [%i] Densel: %i\n", 0x41 + drive, fdc->enh_mode, fdc_get_densel(fdc, drive));
|
||||
@@ -596,17 +593,6 @@ fdc_bad_command(fdc_t *fdc)
|
||||
static void
|
||||
fdc_io_command_phase1(fdc_t *fdc, int out)
|
||||
{
|
||||
#if 0
|
||||
int i;
|
||||
|
||||
pclog_toggle_suppr();
|
||||
pclog("%02X ", fdc->processed_cmd);
|
||||
for (i = 0; i < fdc->pnum; i++)
|
||||
pclog("%02X ", fdc->params[i]);
|
||||
pclog("\n");
|
||||
pclog_toggle_suppr();
|
||||
#endif
|
||||
|
||||
fifo_reset(fdc->fifo_p);
|
||||
fdc_rate(fdc, fdc->drive);
|
||||
fdc->head = fdc->params[2];
|
||||
@@ -1125,9 +1111,6 @@ fdc_write(uint16_t addr, uint8_t val, void *priv)
|
||||
fdc->stat = (1 << fdc->drive);
|
||||
if (!(fdc->flags & FDC_FLAG_PCJR))
|
||||
fdc->stat |= 0x80;
|
||||
#if 0
|
||||
fdc->head = (fdc->params[0] & 4) ? 1 : 0;
|
||||
#endif
|
||||
fdc->head = 0; /* TODO: See if this is correct. */
|
||||
fdc->st0 = fdc->params[0] & 0x03;
|
||||
fdc->st0 |= (fdc->params[0] & 4);
|
||||
@@ -1418,7 +1401,6 @@ fdc_read(uint16_t addr, void *priv)
|
||||
default:
|
||||
ret = 0xFF;
|
||||
}
|
||||
// fdc_log("Read FDC %04X %02X\n", addr, ret);
|
||||
fdc_log("[%04X:%08X] Read FDC %04X %02X [%i:%02X]\n", CS, cpu_state.pc, addr, ret, drive, fdc->dor & (0x10 << drive));
|
||||
return ret;
|
||||
}
|
||||
@@ -1628,8 +1610,10 @@ fdc_callback(void *priv)
|
||||
if (fdc->sector == fdc->params[5]) {
|
||||
/* Reached end of track, MT bit is clear */
|
||||
if (!(fdc->command & 0x80)) {
|
||||
fdc->rw_track++;
|
||||
fdc->sector = 1;
|
||||
if (fdc->dma) {
|
||||
fdc->rw_track++;
|
||||
fdc->sector = 1;
|
||||
}
|
||||
if (!(fdc->flags & FDC_FLAG_PCJR) && fdc->dma && (old_sector == 255))
|
||||
fdc_no_dma_end(fdc, compare);
|
||||
else
|
||||
@@ -1638,10 +1622,12 @@ fdc_callback(void *priv)
|
||||
}
|
||||
/* Reached end of track, MT bit is set, head is 1 */
|
||||
if (fdd_get_head(real_drive(fdc, fdc->drive)) == 1) {
|
||||
fdc->rw_track++;
|
||||
fdc->sector = 1;
|
||||
fdc->head &= 0xFE;
|
||||
fdd_set_head(real_drive(fdc, fdc->drive), 0);
|
||||
if (fdc->dma) {
|
||||
fdc->rw_track++;
|
||||
fdc->sector = 1;
|
||||
fdc->head &= 0xFE;
|
||||
fdd_set_head(real_drive(fdc, fdc->drive), 0);
|
||||
}
|
||||
if (!(fdc->flags & FDC_FLAG_PCJR) && fdc->dma && (old_sector == 255))
|
||||
fdc_no_dma_end(fdc, compare);
|
||||
else
|
||||
@@ -1649,8 +1635,6 @@ fdc_callback(void *priv)
|
||||
return;
|
||||
}
|
||||
if (fdd_get_head(real_drive(fdc, fdc->drive)) == 0) {
|
||||
fdc->sector = 1;
|
||||
fdc->head |= 1;
|
||||
fdd_set_head(real_drive(fdc, fdc->drive), 1);
|
||||
if (!fdd_is_double_sided(real_drive(fdc, fdc->drive))) {
|
||||
fdc_noidam(fdc);
|
||||
@@ -1659,6 +1643,8 @@ fdc_callback(void *priv)
|
||||
}
|
||||
} else if (fdc->sector < fdc->params[5])
|
||||
fdc->sector++;
|
||||
else if (fdc->params[5] == 0)
|
||||
fdc->sector++;
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 1);
|
||||
switch (fdc->interrupt) {
|
||||
case 5:
|
||||
@@ -1811,7 +1797,6 @@ void
|
||||
fdc_error(fdc_t *fdc, int st5, int st6)
|
||||
{
|
||||
dma_set_drq(fdc->dma_ch, 0);
|
||||
#if 1
|
||||
timer_disable(&fdc->timer);
|
||||
|
||||
fdc_int(fdc, 1);
|
||||
@@ -1823,6 +1808,10 @@ fdc_error(fdc_t *fdc, int st5, int st6)
|
||||
fdc->st0 |= 0x08;
|
||||
fdc->res[5] = st5;
|
||||
fdc->res[6] = st6;
|
||||
if (fdc->wrong_am) {
|
||||
fdc->res[6] |= 0x40;
|
||||
fdc->wrong_am = 0;
|
||||
}
|
||||
fdc_log("FDC Error: %02X %02X %02X\n", fdc->res[4], fdc->res[5], fdc->res[6]);
|
||||
switch (fdc->interrupt) {
|
||||
case 0x02:
|
||||
@@ -1848,48 +1837,6 @@ fdc_error(fdc_t *fdc, int st5, int st6)
|
||||
}
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 0);
|
||||
fdc->paramstogo = 7;
|
||||
#else
|
||||
switch (fdc->interrupt) {
|
||||
case 0x02:
|
||||
case 0x05:
|
||||
case 0x06:
|
||||
case 0x09:
|
||||
case 0x0C:
|
||||
case 0x11:
|
||||
case 0x16:
|
||||
case 0x19:
|
||||
case 0x1D:
|
||||
fdc->error = 1;
|
||||
fdc->st5 = st5;
|
||||
fdc->st6 = st6;
|
||||
fdc->tc = 1;
|
||||
fdc->stat = 0x10;
|
||||
fdc_callback(fdc);
|
||||
break;
|
||||
default:
|
||||
timer_disable(&fdc->timer);
|
||||
|
||||
fdc_int(fdc, 1);
|
||||
if (!(fdc->flags & FDC_FLAG_PS1))
|
||||
fdc->fintr = 0;
|
||||
fdc->stat = 0xD0;
|
||||
fdc->st0 = fdc->res[4] = 0x40 | (fdd_get_head(real_drive(fdc, fdc->drive)) ? 4 : 0) | fdc->rw_drive;
|
||||
if (fdc->head && !fdd_is_double_sided(real_drive(fdc, fdc->drive)))
|
||||
fdc->st0 |= 0x08;
|
||||
fdc->res[5] = st5;
|
||||
fdc->res[6] = st6;
|
||||
fdc_log("FDC Error: %02X %02X %02X\n", fdc->res[4], fdc->res[5], fdc->res[6]);
|
||||
|
||||
fdc->res[7] = 0;
|
||||
fdc->res[8] = 0;
|
||||
fdc->res[9] = 0;
|
||||
fdc->res[10] = 0;
|
||||
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 0);
|
||||
fdc->paramstogo = 7;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -1298,7 +1298,16 @@ d86f_find_address_mark_fm(int drive, int side, find_t *find, uint16_t req_am, ui
|
||||
find->sync_pos = 0xFFFFFFFF;
|
||||
if (ignore_other_am & 1) {
|
||||
/* Skip mode, let's go back to finding ID. */
|
||||
dev->state -= 2;
|
||||
fdc_set_wrong_am(d86f_fdc);
|
||||
dev->data_find.sync_marks = dev->data_find.bits_obtained = dev->data_find.bytes_obtained = 0;
|
||||
dev->error_condition = 0;
|
||||
dev->state = STATE_IDLE;
|
||||
if (dev->state == STATE_02_READ_DATA)
|
||||
fdc_track_finishread(d86f_fdc, dev->error_condition);
|
||||
else if (dev->state == STATE_11_SCAN_DATA)
|
||||
fdc_sector_finishcompare(d86f_fdc, (dev->satisfying_bytes == ((128 << ((uint32_t) dev->last_sector.id.n)) - 1)) ? 1 : 0);
|
||||
else
|
||||
fdc_sector_finishread(d86f_fdc);
|
||||
} else {
|
||||
/* Not skip mode, process the sector anyway. */
|
||||
fdc_set_wrong_am(d86f_fdc);
|
||||
@@ -1377,7 +1386,16 @@ d86f_find_address_mark_mfm(int drive, int side, find_t *find, uint16_t req_am, u
|
||||
find->sync_pos = 0xFFFFFFFF;
|
||||
if (ignore_other_am & 1) {
|
||||
/* Skip mode, let's go back to finding ID. */
|
||||
dev->state -= 2;
|
||||
fdc_set_wrong_am(d86f_fdc);
|
||||
dev->data_find.sync_marks = dev->data_find.bits_obtained = dev->data_find.bytes_obtained = 0;
|
||||
dev->error_condition = 0;
|
||||
dev->state = STATE_IDLE;
|
||||
if (dev->state == STATE_02_READ_DATA)
|
||||
fdc_track_finishread(d86f_fdc, dev->error_condition);
|
||||
else if (dev->state == STATE_11_SCAN_DATA)
|
||||
fdc_sector_finishcompare(d86f_fdc, (dev->satisfying_bytes == ((128 << ((uint32_t) dev->last_sector.id.n)) - 1)) ? 1 : 0);
|
||||
else
|
||||
fdc_sector_finishread(d86f_fdc);
|
||||
} else {
|
||||
/* Not skip mode, process the sector anyway. */
|
||||
fdc_set_wrong_am(d86f_fdc);
|
||||
|
||||
@@ -120,7 +120,7 @@ typedef struct fdc_t {
|
||||
uint8_t params[15];
|
||||
uint8_t specify[2];
|
||||
uint8_t res[11];
|
||||
uint8_t eot[4];
|
||||
uint16_t eot[4];
|
||||
uint8_t rwc[4];
|
||||
|
||||
uint16_t pcn[4];
|
||||
|
||||
@@ -37,6 +37,7 @@ extern void port_92_add(void *priv);
|
||||
extern void port_92_remove(void *priv);
|
||||
|
||||
extern const device_t port_92_device;
|
||||
extern const device_t port_92_key_device;
|
||||
extern const device_t port_92_inv_device;
|
||||
extern const device_t port_92_word_device;
|
||||
extern const device_t port_92_pci_device;
|
||||
|
||||
@@ -2333,7 +2333,7 @@ machine_at_genoa486_init(const machine_t *model)
|
||||
machine_at_common_init(model);
|
||||
|
||||
device_add(&compaq_genoa_device);
|
||||
device_add(&port_92_device);
|
||||
device_add(&port_92_key_device);
|
||||
|
||||
device_add(&keyboard_at_ami_device);
|
||||
|
||||
|
||||
@@ -465,22 +465,22 @@ vid_poll(void *priv)
|
||||
buffer32->line[l][ef_x + 2] = buffer32->line[l][ef_x + 3] =
|
||||
buffer32->line[l + 1][ef_x] = buffer32->line[l + 1][ef_x + 1] =
|
||||
buffer32->line[l + 1][ef_x + 2] = buffer32->line[l + 1][ef_x + 3] =
|
||||
pcjr->array[((dat >> 12) & pcjr->array[1]) + 16] + 16;
|
||||
pcjr->array[((dat >> 12) & pcjr->array[1] & 0x0f) + 16] + 16;
|
||||
buffer32->line[l][ef_x + 4] = buffer32->line[l][ef_x + 5] =
|
||||
buffer32->line[l][ef_x + 6] = buffer32->line[l][ef_x + 7] =
|
||||
buffer32->line[l + 1][(x << 4) + 12] = buffer32->line[l + 1][(x << 4) + 13] =
|
||||
buffer32->line[l + 1][(x << 4) + 14] = buffer32->line[l + 1][(x << 4) + 15] =
|
||||
pcjr->array[((dat >> 8) & pcjr->array[1]) + 16] + 16;
|
||||
buffer32->line[l + 1][ef_x + 4] = buffer32->line[l + 1][ef_x + 5] =
|
||||
buffer32->line[l + 1][ef_x + 6] = buffer32->line[l + 1][ef_x + 7] =
|
||||
pcjr->array[((dat >> 8) & pcjr->array[1] & 0x0f) + 16] + 16;
|
||||
buffer32->line[l][ef_x + 8] = buffer32->line[l][ef_x + 9] =
|
||||
buffer32->line[l][ef_x + 10] = buffer32->line[l][ef_x + 11] =
|
||||
buffer32->line[l + 1][ef_x + 8] = buffer32->line[l + 1][ef_x + 9] =
|
||||
buffer32->line[l + 1][ef_x + 10] = buffer32->line[l + 1][ef_x + 11] =
|
||||
pcjr->array[((dat >> 4) & pcjr->array[1]) + 16] + 16;
|
||||
pcjr->array[((dat >> 4) & pcjr->array[1] & 0x0f) + 16] + 16;
|
||||
buffer32->line[l][ef_x + 12] = buffer32->line[l][ef_x + 13] =
|
||||
buffer32->line[l][ef_x + 14] = buffer32->line[l][ef_x + 15] =
|
||||
buffer32->line[l + 1][ef_x + 12] = buffer32->line[l + 1][ef_x + 13] =
|
||||
buffer32->line[l + 1][ef_x + 14] = buffer32->line[l + 1][ef_x + 15] =
|
||||
pcjr->array[(dat & pcjr->array[1]) + 16] + 16;
|
||||
pcjr->array[(dat & pcjr->array[1] & 0x0f) + 16] + 16;
|
||||
}
|
||||
break;
|
||||
case 0x03: /*640x200x4*/
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
* The DOSBox Team
|
||||
*
|
||||
* Copyright 2024 Cacodemon345
|
||||
* Copyright 2002-2021 The DOSBox Team
|
||||
* Copyright (C) 2022 The DOSBox Staging Team
|
||||
* Copyright (C) 2002-2021 The DOSBox Team
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
@@ -54,9 +54,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <wchar.h>
|
||||
#include <time.h>
|
||||
#ifndef _WIN32
|
||||
# include <sys/time.h>
|
||||
#endif /* _WIN32 */
|
||||
#include <sys/time.h>
|
||||
#include <stdbool.h>
|
||||
#define HAVE_STDARG_H
|
||||
#include <86box/86box.h>
|
||||
@@ -122,8 +120,7 @@ int network_ndev;
|
||||
netdev_t network_devs[NET_HOST_INTF_MAX];
|
||||
|
||||
/* Local variables. */
|
||||
|
||||
#if defined ENABLE_NETWORK_LOG && !defined(_WIN32)
|
||||
#ifdef ENABLE_NETWORK_LOG
|
||||
int network_do_log = ENABLE_NETWORK_LOG;
|
||||
static FILE *network_dump = NULL;
|
||||
static mutex_t *network_dump_mutex;
|
||||
@@ -149,9 +146,15 @@ network_dump_packet(netpkt_t *pkt)
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
struct {
|
||||
uint32_t ts_sec, ts_usec, incl_len, orig_len;
|
||||
uint32_t ts_sec;
|
||||
uint32_t ts_usec;
|
||||
uint32_t incl_len;
|
||||
uint32_t orig_len;
|
||||
} pcap_packet_hdr = {
|
||||
tv.tv_sec, tv.tv_usec, pkt->len, pkt->len
|
||||
.ts_sec = tv.tv_sec,
|
||||
.ts_usec = tv.tv_usec,
|
||||
.incl_len = pkt->len,
|
||||
.orig_len = pkt->len
|
||||
};
|
||||
|
||||
if (network_dump_mutex)
|
||||
@@ -165,8 +168,9 @@ network_dump_packet(netpkt_t *pkt)
|
||||
if ((written = fwrite(pkt->data, 1, pkt->len, network_dump)) < pkt->len) {
|
||||
network_log("NETWORK: failed to write dump packet data\n");
|
||||
fseek(network_dump, -written - sizeof(pcap_packet_hdr), SEEK_CUR);
|
||||
} else {
|
||||
fflush(network_dump);
|
||||
}
|
||||
fflush(network_dump);
|
||||
}
|
||||
|
||||
if (network_dump_mutex)
|
||||
@@ -219,28 +223,41 @@ network_init(void)
|
||||
|
||||
#ifdef HAS_VDE
|
||||
// Try to load the VDE plug library
|
||||
if(net_vde_prepare()==0) {
|
||||
if (!net_vde_prepare())
|
||||
network_devmap.has_vde = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined ENABLE_NETWORK_LOG && !defined(_WIN32)
|
||||
#ifdef ENABLE_NETWORK_LOG
|
||||
/* Start packet dump. */
|
||||
network_dump = fopen("network.pcap", "wb");
|
||||
|
||||
struct {
|
||||
uint32_t magic_number;
|
||||
uint16_t version_major, version_minor;
|
||||
int32_t thiszone;
|
||||
uint32_t sigfigs, snaplen, network;
|
||||
} pcap_hdr = {
|
||||
0xa1b2c3d4,
|
||||
2, 4,
|
||||
0,
|
||||
0, 65535, 1
|
||||
};
|
||||
fwrite(&pcap_hdr, sizeof(pcap_hdr), 1, network_dump);
|
||||
fflush(network_dump);
|
||||
if (network_dump) {
|
||||
struct {
|
||||
uint32_t magic_number;
|
||||
uint16_t version_major;
|
||||
uint16_t version_minor;
|
||||
int32_t thiszone;
|
||||
uint32_t sigfigs;
|
||||
uint32_t snaplen;
|
||||
uint32_t network;
|
||||
} pcap_hdr = {
|
||||
.magic_number = 0xa1b2c3d4,
|
||||
.version_major = 2,
|
||||
.version_minor = 4,
|
||||
.thiszone = 0,
|
||||
.sigfigs = 0,
|
||||
.snaplen = 65535,
|
||||
.network = 1
|
||||
};
|
||||
if (fwrite(&pcap_hdr, 1, sizeof(pcap_hdr), network_dump) < sizeof(pcap_hdr)) {
|
||||
network_log("NETWORK: failed to write dump header\n");
|
||||
fclose(network_dump);
|
||||
network_dump = NULL;
|
||||
} else {
|
||||
fflush(network_dump);
|
||||
}
|
||||
} else {
|
||||
network_log("NETWORK: failed to open dump file\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -297,10 +314,8 @@ network_queue_put_swap(netqueue_t *queue, netpkt_t *src_pkt)
|
||||
network_log("Discarded zero length packet.\n");
|
||||
} else if (src_pkt->len > NET_MAX_FRAME) {
|
||||
network_log("Discarded oversized packet of len=%d.\n", src_pkt->len);
|
||||
network_dump_packet(src_pkt);
|
||||
} else {
|
||||
network_log("Discarded %d bytes packet because the queue is full.\n", src_pkt->len);
|
||||
network_dump_packet(src_pkt);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
@@ -444,8 +459,9 @@ network_attach(void *card_drv, uint8_t *mac, NETRXCB rx, NETSETLINKSTATE set_lin
|
||||
network_queue_init(&card->queues[i]);
|
||||
}
|
||||
|
||||
if (!strcmp(network_card_get_internal_name(net_cards_conf[net_card_current].device_num), "modem") && net_type >= NET_TYPE_PCAP) {
|
||||
/* Force SLiRP here. Modem only operates on non-Ethernet frames. */
|
||||
if ((!strcmp(network_card_get_internal_name(net_cards_conf[net_card_current].device_num), "modem") ||
|
||||
!strcmp(network_card_get_internal_name(net_cards_conf[net_card_current].device_num), "plip")) && (net_type >= NET_TYPE_PCAP)) {
|
||||
/* Force SLiRP here. Modem and PLIP only operate on non-Ethernet frames. */
|
||||
net_type = NET_TYPE_SLIRP;
|
||||
}
|
||||
|
||||
@@ -501,7 +517,7 @@ network_attach(void *card_drv, uint8_t *mac, NETRXCB rx, NETSETLINKSTATE set_lin
|
||||
free(card->queued_pkt.data);
|
||||
free(card);
|
||||
// Placeholder - insert the error message
|
||||
fatal("Error initializing the network device: Null driver initialization failed");
|
||||
fatal("Error initializing the network device: Null driver initialization failed\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -533,7 +549,7 @@ netcard_close(netcard_t *card)
|
||||
void
|
||||
network_close(void)
|
||||
{
|
||||
#if defined ENABLE_NETWORK_LOG && !defined(_WIN32)
|
||||
#ifdef ENABLE_NETWORK_LOG
|
||||
thread_close_mutex(network_dump_mutex);
|
||||
network_dump_mutex = NULL;
|
||||
#endif
|
||||
@@ -554,7 +570,7 @@ network_reset(void)
|
||||
{
|
||||
ui_sb_update_icon(SB_NETWORK, 0);
|
||||
|
||||
#if defined ENABLE_NETWORK_LOG && !defined(_WIN32)
|
||||
#ifdef ENABLE_NETWORK_LOG
|
||||
network_dump_mutex = thread_create_mutex();
|
||||
#endif
|
||||
|
||||
@@ -598,6 +614,7 @@ network_tx_popv(netcard_t *card, netpkt_t *pkt_vec, int vec_size)
|
||||
for (int i = 0; i < vec_size; i++) {
|
||||
if (!network_queue_get_swap(queue, pkt_vec))
|
||||
break;
|
||||
network_dump_packet(pkt_vec);
|
||||
pkt_count++;
|
||||
pkt_vec++;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#define PORT_92_PCI 4
|
||||
#define PORT_92_RESET 8
|
||||
#define PORT_92_A20 16
|
||||
#define PORT_92_KEY 32
|
||||
|
||||
static uint8_t
|
||||
port_92_readb(uint16_t port, void *priv)
|
||||
@@ -46,7 +47,10 @@ port_92_readb(uint16_t port, void *priv)
|
||||
if (port == 0x92) {
|
||||
/* Return bit 1 directly from mem_a20_alt, so the
|
||||
pin can be reset independently of the device. */
|
||||
ret = (dev->reg & ~0x03) | (mem_a20_alt & 2) | (cpu_alt_reset & 1);
|
||||
if (dev->flags & PORT_92_KEY)
|
||||
ret = (dev->reg & ~0x03) | (mem_a20_key & 2) | (cpu_alt_reset & 1);
|
||||
else
|
||||
ret = (dev->reg & ~0x03) | (mem_a20_alt & 2) | (cpu_alt_reset & 1);
|
||||
|
||||
if (dev->flags & PORT_92_INV)
|
||||
ret |= 0xfc;
|
||||
@@ -94,8 +98,11 @@ port_92_writeb(uint16_t port, uint8_t val, void *priv)
|
||||
|
||||
dev->reg = val & 0x03;
|
||||
|
||||
if ((mem_a20_alt ^ val) & 2) {
|
||||
mem_a20_alt = (val & 2);
|
||||
if (dev->flags & PORT_92_KEY) {
|
||||
mem_a20_key = val & 2;
|
||||
mem_a20_recalc();
|
||||
} else if ((mem_a20_alt ^ val) & 2) {
|
||||
mem_a20_alt = (mem_a20_alt & 0xfd) | (val & 2);
|
||||
mem_a20_recalc();
|
||||
}
|
||||
|
||||
@@ -234,6 +241,20 @@ const device_t port_92_device = {
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t port_92_key_device = {
|
||||
.name = "Port 92 Register (using A20 key)",
|
||||
.internal_name = "port_92_key",
|
||||
.flags = 0,
|
||||
.local = PORT_92_KEY,
|
||||
.init = port_92_init,
|
||||
.close = port_92_close,
|
||||
.reset = NULL,
|
||||
{ .available = NULL },
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t port_92_inv_device = {
|
||||
.name = "Port 92 Register (inverted bits 2-7)",
|
||||
.internal_name = "port_92_inv",
|
||||
|
||||
BIN
src/qt/icons/warning.ico
Normal file
BIN
src/qt/icons/warning.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
@@ -61,7 +61,7 @@ SettingsMachine::SettingsMachine(QWidget *parent)
|
||||
break;
|
||||
}
|
||||
|
||||
auto warning_icon = ui->softFloatWarningIcon->style()->standardIcon(QStyle::SP_MessageBoxWarning);
|
||||
auto warning_icon = QIcon(":/misc/qt/icons/warning.ico");
|
||||
ui->softFloatWarningIcon->setPixmap(warning_icon.pixmap(warning_icon.actualSize(QSize(16, 16))));
|
||||
ui->softFloatWarningIcon->setVisible(false);
|
||||
ui->softFloatWarningText->setVisible(false);
|
||||
|
||||
@@ -63,6 +63,9 @@
|
||||
<file>qt/icons/send_cae.ico</file>
|
||||
<file>qt/icons/settings.ico</file>
|
||||
</qresource>
|
||||
<qresource prefix="/misc">
|
||||
<file>qt/icons/warning.ico</file>
|
||||
</qresource>
|
||||
<qresource prefix="/">
|
||||
<file alias="/texture_vert.spv">qt/texture_vert.spv</file>
|
||||
<file alias="/texture_frag.spv">qt/texture_frag.spv</file>
|
||||
|
||||
@@ -640,8 +640,12 @@ ui_msgbox_header(int flags, void *header, void *message)
|
||||
SDL_MessageBoxData msgdata;
|
||||
SDL_MessageBoxButtonData msgbtn;
|
||||
|
||||
if (!header)
|
||||
header = (void *) ((flags & MBX_ANSI) ? "86Box" : L"86Box");
|
||||
if (!header) {
|
||||
if (flags & MBX_ANSI)
|
||||
header = (void *) "86Box";
|
||||
else
|
||||
header = (void *) L"86Box";
|
||||
}
|
||||
|
||||
msgbtn.buttonid = 1;
|
||||
msgbtn.text = "OK";
|
||||
|
||||
@@ -1341,7 +1341,7 @@ svga_init(const device_t *info, svga_t *svga, void *priv, int memsize,
|
||||
svga->dispontime = 1000ULL << 32;
|
||||
svga->dispofftime = 1000ULL << 32;
|
||||
svga->bpp = 8;
|
||||
svga->vram = calloc(memsize, 1);
|
||||
svga->vram = calloc(memsize + 8, 1);
|
||||
svga->vram_max = memsize;
|
||||
svga->vram_display_mask = svga->vram_mask = memsize - 1;
|
||||
svga->decode_mask = 0x7fffff;
|
||||
|
||||
Reference in New Issue
Block a user