Various fixes, resulting from (more) Linux work.

Upstream commits applied.
This commit is contained in:
waltje
2018-10-08 02:27:07 -04:00
parent 6a6f23fe68
commit 5d6b369df8
15 changed files with 343 additions and 214 deletions

View File

@@ -12,7 +12,7 @@
* it on Windows XP, and possibly also Vista. Use the * it on Windows XP, and possibly also Vista. Use the
* -DANSI_CFG for use on these systems. * -DANSI_CFG for use on these systems.
* *
* Version: @(#)config.c 1.0.34 2018/10/05 * Version: @(#)config.c 1.0.35 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -831,7 +831,7 @@ load_other(const char *cat)
bugger_enabled = !!config_get_int(cat, "bugger_enabled", 0); bugger_enabled = !!config_get_int(cat, "bugger_enabled", 0);
for (c = 0; c < ISAMEM_MAX; c++) { for (c = 0; c < ISAMEM_MAX; c++) {
sprintf(temp, "isamem%d_type", c); sprintf(temp, "isamem%i_type", c);
p = config_get_string(cat, temp, "none"); p = config_get_string(cat, temp, "none");
isamem_type[c] = isamem_get_from_internal_name(p); isamem_type[c] = isamem_get_from_internal_name(p);
@@ -877,7 +877,7 @@ save_other(const char *cat)
config_set_int(cat, "bugger_enabled", bugger_enabled); config_set_int(cat, "bugger_enabled", bugger_enabled);
for (c = 0; c < ISAMEM_MAX; c++) { for (c = 0; c < ISAMEM_MAX; c++) {
sprintf(temp, "isamem%d_type", c); sprintf(temp, "isamem%i_type", c);
if (isamem_type[c] == 0) if (isamem_type[c] == 0)
config_delete_var(cat, temp); config_delete_var(cat, temp);
else else
@@ -1032,7 +1032,7 @@ load_disks(const char *cat)
static void static void
save_disks(const char *cat) save_disks(const char *cat)
{ {
char temp[24], tmp2[64]; char temp[128], tmp2[128];
const char *str; const char *str;
int c; int c;

View File

@@ -8,7 +8,7 @@
* *
* Dynamic Recompiler for Intel x64 systems. * Dynamic Recompiler for Intel x64 systems.
* *
* Version: @(#)codegen_x86-64.c 1.0.2 2018/09/22 * Version: @(#)codegen_x86-64.c 1.0.3 2018/10/07
* *
* Authors: Sarah Walker, <tommowalker@tommowalker.co.uk> * Authors: Sarah Walker, <tommowalker@tommowalker.co.uk>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -940,7 +940,7 @@ void codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t
codeblock_t *block = &codeblock[block_current]; codeblock_t *block = &codeblock[block_current];
uint32_t op_32 = use32; uint32_t op_32 = use32;
uint32_t op_pc = new_pc; uint32_t op_pc = new_pc;
OpFn *op_table = x86_dynarec_opcodes; const OpFn *op_table = x86_dynarec_opcodes;
RecompOpFn *recomp_op_table = recomp_opcodes; RecompOpFn *recomp_op_table = recomp_opcodes;
int opcode_shift = 0; int opcode_shift = 0;
int opcode_mask = 0x3ff; int opcode_mask = 0x3ff;
@@ -1003,7 +1003,7 @@ void codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t
break; break;
case 0xd8: case 0xd8:
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16; op_table = (op_32 & 0x200) ? (OpFn *)x86_dynarec_opcodes_d8_a32 : (OpFn *)x86_dynarec_opcodes_d8_a16;
recomp_op_table = recomp_opcodes_d8; recomp_op_table = recomp_opcodes_d8;
opcode_shift = 3; opcode_shift = 3;
opcode_mask = 0x1f; opcode_mask = 0x1f;

View File

@@ -11,7 +11,7 @@
* *
* NOTE: This code now only supports targets at LUN=0 !! * NOTE: This code now only supports targets at LUN=0 !!
* *
* Version: @(#)scsi_ncr5380.c 1.0.8 2018/10/05 * Version: @(#)scsi_ncr5380.c 1.0.9 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -216,13 +216,15 @@ get_dev_id(uint8_t data)
static int static int
get_cmd_len(int cbyte) get_cmd_len(int cbyte)
{ {
int len; int len = 12;
int group; int group;
group = (cbyte>>5) & 7; group = (cbyte >> 5) & 7;
if (group == 0) len = 6; if (group == 0)
if (group == 1 || group == 2) len = 10; len = 6;
if (group == 1 || group == 2)
len = 10;
return(len); return(len);
} }
@@ -881,6 +883,7 @@ ncr_callback(void *priv)
ncr5380_t *ncr_dev = (ncr5380_t *)priv; ncr5380_t *ncr_dev = (ncr5380_t *)priv;
ncr_t *ncr = &ncr_dev->ncr; ncr_t *ncr = &ncr_dev->ncr;
scsi_device_t *dev = &SCSIDevices[ncr->target_id][ncr->target_lun]; scsi_device_t *dev = &SCSIDevices[ncr->target_id][ncr->target_lun];
int64_t p;
int c = 0; int c = 0;
DEBUG("DMA mode=%d\n", ncr->dma_mode); DEBUG("DMA mode=%d\n", ncr->dma_mode);
@@ -928,50 +931,45 @@ ncr_callback(void *priv)
} }
} }
} else if (ncr->state == STATE_COMMAND) { } else if (ncr->state == STATE_COMMAND) {
int64_t p;
/*Command phase, make sure the ICR ACK bit is set to keep on, /*Command phase, make sure the ICR ACK bit is set to keep on,
because the device must be acknowledged by ICR*/ because the device must be acknowledged by ICR*/
DEBUG("NCR ICR for Command=%02x\n", ncr->bus_host & BUS_ACK); DEBUG("NCR ICR for Command=%02x\n", ncr->bus_host & BUS_ACK);
if (ncr->bus_host & BUS_ACK) { if (ncr->bus_host & BUS_ACK) {
if (ncr->command_pos < get_cmd_len(ncr->command[0])) {
/*Write command byte to the output data register*/ /*Write command byte to the output data register*/
ncr->command[ncr->command_pos++] = BUS_GETDATA(ncr->bus_host); ncr->command[ncr->command_pos++] = BUS_GETDATA(ncr->bus_host);
ncr->new_phase = ncr->cur_bus & SCSI_PHASE_MESSAGE_IN; ncr->new_phase = ncr->cur_bus & SCSI_PHASE_MESSAGE_IN;
ncr->clear_req = 3; ncr->clear_req = 3;
DEBUG("Current bus for command request=%02x\n", ncr->cur_bus & BUS_REQ); DEBUG("NCR: current bus for command request=%02x\n", ncr->cur_bus & BUS_REQ);
ncr->cur_bus &= ~BUS_REQ; ncr->cur_bus &= ~BUS_REQ;
DEBUG("Command pos=%i, output data=%02x\n", ncr->command_pos, BUS_GETDATA(ncr->bus_host)); DEBUG("NCR: Command pos=%i, output data=%02x\n", ncr->command_pos, BUS_GETDATA(ncr->bus_host));
if (get_cmd_len(ncr->command[0]) == ncr->command_pos) { if (get_cmd_len(ncr->command[0]) == ncr->command_pos) {
/*Reset data position to default*/ /*Reset data position to default*/
ncr->data_pos = 0; ncr->data_pos = 0;
dev = &SCSIDevices[ncr->target_id][ncr->target_lun]; dev = &SCSIDevices[ncr->target_id][ncr->target_lun];
DEBUG("SCSI Command 0x%02X for ID %d, status code=%02x\n", ncr->command[0], ncr->target_id, dev->Status); DEBUG("NCR: SCSI Command 0x%02X for ID %d, status code=%02x\n", ncr->command[0], ncr->target_id, dev->Status);
dev->BufferLength = -1; dev->BufferLength = -1;
/*Now, execute the given SCSI command*/ /*Now, execute the given SCSI command*/
scsi_device_command_phase0(ncr->target_id, ncr->target_lun, ncr->command); scsi_device_command_phase0(ncr->target_id, ncr->target_lun, ncr->command);
DEBUG("NCR: SCSI ID %i: Command %02X: Buffer Length %i, SCSI Phase %02X\n", ncr->target_id, ncr->command[0], dev->BufferLength, dev->Phase);
DEBUG("SCSI ID %i: Command %02X: Buffer Length %i, SCSI Phase %02X\n", ncr->target_id, ncr->command[0], dev->BufferLength, dev->Phase);
if (dev->Status != SCSI_STATUS_OK) if (dev->Status != SCSI_STATUS_OK)
ncr_dev->is_non_data_mode = 1; ncr_dev->is_non_data_mode = 1;
if (ncr_dev->is_non_data_mode) { if (ncr_dev->is_non_data_mode) {
ncr_dev->is_non_data_mode = 0; ncr_dev->is_non_data_mode = 0;
ncr->new_phase = SCSI_PHASE_STATUS; ncr->new_phase = SCSI_PHASE_STATUS;
ncr->wait_data = 4; ncr->wait_data = 4;
return; return;
} }
/*If the SCSI phase is Data In or Data Out, allocate the SCSI buffer based on the transfer length of the command*/ /*If the SCSI phase is Data In or Data Out, allocate the SCSI buffer based on the transfer length of the command*/
if (dev->BufferLength && (dev->Phase == SCSI_PHASE_DATA_IN || dev->Phase == SCSI_PHASE_DATA_OUT)) { if (dev->BufferLength && (dev->Phase == SCSI_PHASE_DATA_IN || dev->Phase == SCSI_PHASE_DATA_OUT)) {
dev->CmdBuffer = (uint8_t *)mem_alloc(dev->BufferLength); dev->CmdBuffer = (uint8_t *) malloc(dev->BufferLength);
p = scsi_device_get_callback(ncr->target_id, ncr->target_lun); p = scsi_device_get_callback(ncr->target_id, ncr->target_lun);
if (p <= 0LL) { if (p <= 0LL) {
ncr_dev->temp_period = (int64_t)(dev->BufferLength); ncr_dev->temp_period = (int64_t)(dev->BufferLength);
@@ -983,25 +981,22 @@ ncr_callback(void *priv)
ncr_dev->period = (p / ((double) ncr_dev->temp_period)) * ((double) MIN(64, ncr_dev->temp_period)); ncr_dev->period = (p / ((double) ncr_dev->temp_period)) * ((double) MIN(64, ncr_dev->temp_period));
} }
} }
if (dev->Phase == SCSI_PHASE_DATA_OUT) { if (dev->Phase == SCSI_PHASE_DATA_OUT) {
/* Write direction commands have delayed execution - only execute them after the bus has gotten all the data from the host. */ /* Write direction commands have delayed execution - only execute them after the bus has gotten all the data from the host. */
DEBUG("Next state is data out\n"); DEBUG("NCR: Next state is data out\n");
ncr->new_phase = SCSI_PHASE_DATA_OUT; ncr->new_phase = SCSI_PHASE_DATA_OUT;
ncr->wait_data = 4; ncr->wait_data = 4;
ncr->clear_req = 4; ncr->clear_req = 4;
} else { } else {
/* Other command - execute immediately. */ /* Other command - execute immediately. */
ncr->new_phase = dev->Phase; ncr->new_phase = dev->Phase;
if (ncr->new_phase == SCSI_PHASE_DATA_IN)
if (ncr->new_phase == SCSI_PHASE_DATA_IN) {
scsi_device_command_phase1(ncr->target_id, ncr->target_lun); scsi_device_command_phase1(ncr->target_id, ncr->target_lun);
}
ncr->wait_data = 4; ncr->wait_data = 4;
} }
} }
} }
}
} else if (ncr->state == STATE_DATAIN) { } else if (ncr->state == STATE_DATAIN) {
dev = &SCSIDevices[ncr->target_id][ncr->target_lun]; dev = &SCSIDevices[ncr->target_id][ncr->target_lun];
DEBUG("Data In ACK=%02x\n", ncr->bus_host & BUS_ACK); DEBUG("Data In ACK=%02x\n", ncr->bus_host & BUS_ACK);

View File

@@ -8,7 +8,7 @@
* *
* Intel 82335 SX emulation, used by the Phoenix 386 clone. * Intel 82335 SX emulation, used by the Phoenix 386 clone.
* *
* Version: @(#)i82335.c 1.0.4 2018/09/13 * Version: @(#)i82335.c 1.0.5 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>

View File

@@ -8,7 +8,7 @@
* *
* Oak OTI037C/67/077 emulation. * Oak OTI037C/67/077 emulation.
* *
* Version: @(#)vid_oak_oti.c 1.0.11 2018/10/05 * Version: @(#)vid_oak_oti.c 1.0.12 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -50,9 +50,17 @@
#include "vid_svga.h" #include "vid_svga.h"
#define BIOS_37C_PATH L"video/oti/oti037c/bios.bin" #define BIOS_037C_PATH L"video/oti/oti037c/bios.bin"
//#define BIOS_67_PATH L"video/oti/oti067.bin" //#define BIOS_067_PATH L"video/oti/oti067.bin"
#define BIOS_77_PATH L"video/oti/oti077.vbi" #define BIOS_077_PATH L"video/oti/oti077.vbi"
enum {
OTI_037C = 0,
OTI_067 = 2,
OTI_067_AMA932J,
OTI_077 = 5
};
typedef struct { typedef struct {
@@ -60,6 +68,7 @@ typedef struct {
uint8_t enable_register; uint8_t enable_register;
uint8_t pos; uint8_t pos;
uint8_t indx; uint8_t indx;
uint8_t dipswitch_val;
uint32_t vram_size; uint32_t vram_size;
uint32_t vram_mask; uint32_t vram_mask;
@@ -72,38 +81,52 @@ typedef struct {
} oti_t; } oti_t;
static const video_timings_t oti_timing = {VID_ISA,6,8,16,6,8,16};
static void static void
oti_out(uint16_t addr, uint8_t val, void *priv) oti_out(uint16_t addr, uint8_t val, void *priv)
{ {
oti_t *dev = (oti_t *)priv; oti_t *dev = (oti_t *)priv;
svga_t *svga = &dev->svga; svga_t *svga = &dev->svga;
uint8_t old, idx; uint8_t old, idx, enable;
if (!(dev->enable_register & 1) && addr != 0x03c3) return; INFO("OAK: out(%04x, %02x)\n", addr, val);
if (!dev->chip_id && !(dev->enable_register & 1) && (addr != 0x3C3))
return;
if ((((addr&0xfff0) == 0x03d0 || (addr&0xfff0) == 0x03b0) && addr < 0x3de) && if ((((addr&0xfff0) == 0x03d0 || (addr&0xfff0) == 0x03b0) && addr < 0x3de) &&
!(svga->miscout & 1)) addr ^= 0x60; !(svga->miscout & 1)) addr ^= 0x60;
switch (addr) { switch (addr) {
case 0x03c3: case 0x03c3:
if (! dev->chip_id) {
dev->enable_register = val & 1; dev->enable_register = val & 1;
return; return;
}
break;
case 0x03d4: case 0x03d4:
svga->crtcreg = val; if (dev->chip_id)
svga->crtcreg = val & 0x3f;
else
svga->crtcreg = val; /* FIXME: The BIOS wants to set the test bit? */
return; return;
case 0x03d5: case 0x03d5:
if (svga->crtcreg & 0x20) if (dev->chip_id && (svga->crtcreg & 0x20))
return; return;
if (((svga->crtcreg & 31) < 7) && (svga->crtc[0x11] & 0x80)) idx = svga->crtcreg;
if (! dev->chip_id)
idx &= 0x1f;
if ((idx < 7) && (svga->crtc[0x11] & 0x80))
return; return;
if (((svga->crtcreg & 31) == 7) && (svga->crtc[0x11] & 0x80)) if ((idx == 7) && (svga->crtc[0x11] & 0x80))
val = (svga->crtc[7] & ~0x10) | (val & 0x10); val = (svga->crtc[7] & ~0x10) | (val & 0x10);
old = svga->crtc[svga->crtcreg & 31]; old = svga->crtc[idx];
svga->crtc[svga->crtcreg & 31] = val; svga->crtc[idx] = val;
if (old != val) { if (old != val) {
if ((svga->crtcreg & 31) < 0x0e || (svga->crtcreg & 31) > 0x10) { if ((idx < 0x0e) || (idx > 0x10)) {
svga->fullchange = changeframecount; svga->fullchange = changeframecount;
svga_recalctimings(svga); svga_recalctimings(svga);
} }
@@ -111,22 +134,54 @@ oti_out(uint16_t addr, uint8_t val, void *priv)
break; break;
case 0x03de: case 0x03de:
if (dev->chip_id)
dev->indx = val & 0x1f;
else
dev->indx = val; dev->indx = val;
return; return;
case 0x03df: case 0x03df:
idx = dev->indx & 0x1f; idx = dev->indx;
if (! dev->chip_id)
idx &= 0x1f;
dev->regs[idx] = val; dev->regs[idx] = val;
switch (idx) { switch (idx) {
case 0x0d: case 0x0d:
if (dev->chip_id) { if (dev->chip_id == OTI_067) {
svga->vram_display_mask = (val & 0xc) ? dev->vram_mask : 0x3ffff; svga->vram_display_mask = (val & 0xc) ? dev->vram_mask : 0x3ffff;
if (! (val & 0x80))
svga->vram_display_mask = 0x3ffff;
if ((val & 0x80) && dev->vram_size == 256) if ((val & 0x80) && dev->vram_size == 256)
mem_map_disable(&svga->mapping); mem_map_disable(&svga->mapping);
else else
mem_map_enable(&svga->mapping); mem_map_enable(&svga->mapping);
if (!(val & 0x80)) } else if (dev->chip_id == OTI_077) {
svga->vram_display_mask = 0x3ffff; svga->vram_display_mask = (val & 0xc) ? dev->vram_mask : 0x3ffff;
switch ((val & 0xc0) >> 6) {
case 0x00: /* 256 kB of memory */
default:
enable = (dev->vram_size >= 256);
if (val & 0xc)
svga->vram_display_mask = MIN(dev->vram_mask, 0x3ffff);
break;
case 0x01: /* 1 MB of memory */
case 0x03:
enable = (dev->vram_size >= 1024);
if (val & 0xc)
svga->vram_display_mask = MIN(dev->vram_mask, 0x7ffff);
break;
case 0x02: /* 512 kB of memory */
enable = (dev->vram_size >= 512);
if (val & 0xc)
svga->vram_display_mask = MIN(dev->vram_mask, 0xfffff);
break;
}
if (enable)
mem_map_enable(&svga->mapping);
else
mem_map_disable(&svga->mapping);
} else { } else {
if (val & 0x80) if (val & 0x80)
mem_map_disable(&svga->mapping); mem_map_disable(&svga->mapping);
@@ -152,15 +207,27 @@ oti_in(uint16_t addr, void *priv)
{ {
oti_t *dev = (oti_t *)priv; oti_t *dev = (oti_t *)priv;
svga_t *svga = &dev->svga; svga_t *svga = &dev->svga;
uint8_t ret = 0xff; uint8_t idx, ret = 0xff;
if (!(dev->enable_register & 1) && addr != 0x03c3) return ret; INFO("OAK: in(%04x)", addr);
if (!dev->chip_id && !(dev->enable_register & 1) &&
(addr != 0x3c3)) return 0xff;
if ((((addr&0xfff0) == 0x03d0 || (addr&0xfff0) == 0x03b0) && addr < 0x3de) && if ((((addr&0xfff0) == 0x03d0 || (addr&0xfff0) == 0x03b0) && addr < 0x3de) &&
!(svga->miscout & 1)) addr ^= 0x60; !(svga->miscout & 1)) addr ^= 0x60;
switch (addr) { switch (addr) {
case 0x03c2:
if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x50)
ret = 0;
else
ret = 0x10;
break;
case 0x03c3: case 0x03c3:
if (dev->chip_id)
ret = svga_in(addr, svga);
else
ret = dev->enable_register; ret = dev->enable_register;
break; break;
@@ -169,15 +236,31 @@ oti_in(uint16_t addr, void *priv)
break; break;
case 0x03d5: case 0x03d5:
if (dev->chip_id) {
if (svga->crtcreg & 0x20) if (svga->crtcreg & 0x20)
ret = 0xff; ret = 0xff;
else else
ret = svga->crtc[svga->crtcreg & 31]; ret = svga->crtc[svga->crtcreg];
} else
ret = svga->crtc[svga->crtcreg & 0x1f];
break; break;
case 0x03da: case 0x03da:
if (dev->chip_id) {
ret = svga_in(addr, svga);
break;
}
svga->attrff = 0; svga->attrff = 0;
svga->attrff = 0;
/*
* The OTI-037C BIOS waits for bits 0 and 3 in 0x3da to go
* low, then reads 0x3da again and expects the diagnostic
* bits to equal the current border colour. As I understand
* it, the 0x3da active enable status does not include the
* border time, so this may be an area where OTI-037C is
* not entirely VGA compatible.
*/
svga->cgastat &= ~0x30; svga->cgastat &= ~0x30;
/* copy color diagnostic info from the overscan color register */ /* copy color diagnostic info from the overscan color register */
@@ -210,23 +293,30 @@ oti_in(uint16_t addr, void *priv)
svga->cgastat |= 0x20; svga->cgastat |= 0x20;
break; break;
} }
return svga->cgastat; ret = svga->cgastat;
break;
case 0x03de: case 0x03de:
ret = dev->indx | (dev->chip_id << 5); ret = dev->indx;
if (dev->chip_id)
ret |= (dev->chip_id << 5);
break; break;
case 0x03df: case 0x03df:
if ((dev->indx & 0x1f)==0x10) idx = dev->indx;
ret = 0x18; if (! dev->chip_id)
idx &= 0x1f;
if (idx == 0x10)
ret = dev->dipswitch_val;
else else
ret = dev->regs[dev->indx & 0x1f]; ret = dev->regs[idx];
break; break;
default: default:
ret = svga_in(addr, svga); ret = svga_in(addr, svga);
break; break;
} }
INFO(" = %02x\n", ret);
return(ret); return(ret);
} }
@@ -237,7 +327,8 @@ oti_pos_out(uint16_t addr, uint8_t val, void *priv)
{ {
oti_t *dev = (oti_t *)priv; oti_t *dev = (oti_t *)priv;
if ((val & 8) != (dev->pos & 8)) { INFO("OAK: pos_out(%04x, %02x)\n", addr, val);
if ((val ^ dev->pos) & 8) {
if (val & 8) if (val & 8)
io_sethandler(0x03c0, 32, io_sethandler(0x03c0, 32,
oti_in,NULL,NULL, oti_out,NULL,NULL, dev); oti_in,NULL,NULL, oti_out,NULL,NULL, dev);
@@ -255,6 +346,7 @@ oti_pos_in(uint16_t addr, void *priv)
{ {
oti_t *dev = (oti_t *)priv; oti_t *dev = (oti_t *)priv;
INFO("OAK: pos_in(%04x) = %02x\n", addr, dev->pos);
return(dev->pos); return(dev->pos);
} }
@@ -300,27 +392,63 @@ oti_init(const device_t *info)
memset(dev, 0x00, sizeof(oti_t)); memset(dev, 0x00, sizeof(oti_t));
dev->chip_id = info->local; dev->chip_id = info->local;
dev->dipswitch_val = 0x18;
fn = NULL; fn = NULL;
switch(dev->chip_id) { switch(dev->chip_id) {
case 0: case OTI_037C:
fn = BIOS_37C_PATH; fn = BIOS_037C_PATH;
dev->vram_size = 256;
dev->regs[0] = 0x08; /* FIXME: The BIOS wants to read this at index 0? This index is undocumented. */
break; break;
case 2: case OTI_067:
#ifdef BIOS_67_PATH #ifdef BIOS_067_PATH
fn = BIOS_67_PATH; fn = BIOS_067_PATH;
#else #else
fn = BIOS_77_PATH; fn = BIOS_077_PATH;
#endif #endif
dev->vram_size = device_get_config_int("memory");
/*
* Tell the BIOS the I/O ports are already enabled
* to avoid a double I/O handler mess.
*/
dev->pos = 0x08;
io_sethandler(0x46e8, 1,
oti_pos_in,NULL,NULL, oti_pos_out,NULL,NULL, dev);
break; break;
case 2+128: case OTI_067_AMA932J:
/* Onboard OTI067; ROM set up by machine. */ /* Onboard OTI067; ROM set up by machine. */
dev->chip_id = 2; dev->chip_id = OTI_067;
dev->vram_size = 512;
dev->dipswitch_val |= 0x20;
/*
* Tell the BIOS the I/O ports are already enabled
* to avoid a double I/O handler mess.
*/
dev->pos = 0x08;
io_sethandler(0x46e8, 1,
oti_pos_in,NULL,NULL, oti_pos_out,NULL,NULL, dev);
break; break;
case 5: case OTI_077:
fn = BIOS_77_PATH; fn = BIOS_077_PATH;
dev->vram_size = device_get_config_int("memory");
/*
* Tell the BIOS the I/O ports are already enabled
* to avoid a double I/O handler mess.
*/
dev->pos = 0x08;
io_sethandler(0x46e8, 1,
oti_pos_in,NULL,NULL, oti_pos_out,NULL,NULL, dev);
break; break;
} }
@@ -328,23 +456,21 @@ oti_init(const device_t *info)
rom_init(&dev->bios_rom, fn, rom_init(&dev->bios_rom, fn,
0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
dev->vram_size = device_get_config_int("memory");
dev->vram_mask = (dev->vram_size << 10) - 1; dev->vram_mask = (dev->vram_size << 10) - 1;
INFO("VIDEO: %s (chip=%02x(%i), mem=%i)\n",
info->name, dev->chip_id, info->local, dev->vram_size);
video_inform(VID_TYPE_SPEC, &oti_timing);
svga_init(&dev->svga, dev, dev->vram_size << 10, svga_init(&dev->svga, dev, dev->vram_size << 10,
recalc_timings, oti_in, oti_out, NULL, NULL); recalc_timings, oti_in, oti_out, NULL, NULL);
io_sethandler(0x03c0, 32, io_sethandler(0x03c0, 32,
oti_in,NULL,NULL, oti_out,NULL,NULL, dev); oti_in,NULL,NULL, oti_out,NULL,NULL, dev);
io_sethandler(0x46e8, 1,
oti_pos_in,NULL,NULL, oti_pos_out,NULL,NULL, dev);
dev->svga.miscout = 1; dev->svga.miscout = 1;
/* FIXME: BIOS wants to read this there (undocumented.)*/
dev->regs[0] = 0x08;
return(dev); return(dev);
} }
@@ -363,19 +489,25 @@ oti_close(void *priv)
static int static int
oti037c_available(void) oti037c_available(void)
{ {
return(rom_present(BIOS_37C_PATH)); return(rom_present(BIOS_037C_PATH));
} }
static int static int
oti067_available(void) oti067_available(void)
{ {
#ifdef BIOS_67_PATH #ifdef BIOS_67_PATH
return(rom_present(BIOS_67_PATH)); return(rom_present(BIOS_067_PATH));
#else #else
return(rom_present(BIOS_77_PATH)); return(rom_present(BIOS_077_PATH));
#endif #endif
} }
static int
oti077_available(void)
{
return(rom_present(BIOS_077_PATH));
}
static const device_config_t oti067_config[] = { static const device_config_t oti067_config[] = {
{ {
@@ -397,14 +529,6 @@ static const device_config_t oti067_config[] = {
} }
}; };
static int
oti077_available(void)
{
return(rom_present(BIOS_77_PATH));
}
static const device_config_t oti077_config[] = { static const device_config_t oti077_config[] = {
{ {
"memory", "Memory size", CONFIG_SELECTION, "", 1024, "memory", "Memory size", CONFIG_SELECTION, "", 1024,
@@ -431,19 +555,19 @@ static const device_config_t oti077_config[] = {
const device_t oti037c_device = { const device_t oti037c_device = {
"Oak OTI-037C", "Oak OTI-037C",
DEVICE_ISA, DEVICE_ISA,
0, OTI_037C,
oti_init, oti_close, NULL, oti_init, oti_close, NULL,
oti037c_available, oti037c_available,
speed_changed, speed_changed,
force_redraw, force_redraw,
NULL, NULL,
oti067_config NULL
}; };
const device_t oti067_device = { const device_t oti067_device = {
"Oak OTI-067", "Oak OTI-067",
DEVICE_ISA, DEVICE_ISA,
2, OTI_067,
oti_init, oti_close, NULL, oti_init, oti_close, NULL,
oti067_available, oti067_available,
speed_changed, speed_changed,
@@ -453,21 +577,21 @@ const device_t oti067_device = {
}; };
const device_t oti067_onboard_device = { const device_t oti067_onboard_device = {
"Oak OTI-067 (onboard)", "Onboard Oak OTI-067",
DEVICE_ISA, DEVICE_ISA,
2+128, OTI_067_AMA932J,
oti_init, oti_close, NULL, oti_init, oti_close, NULL,
NULL, NULL,
speed_changed, speed_changed,
force_redraw, force_redraw,
NULL, NULL,
oti067_config NULL
}; };
const device_t oti077_device = { const device_t oti077_device = {
"Oak OTI-077", "Oak OTI-077",
DEVICE_ISA, DEVICE_ISA,
5, OTI_077,
oti_init, oti_close, NULL, oti_init, oti_close, NULL,
oti077_available, oti077_available,
speed_changed, speed_changed,

View File

@@ -11,7 +11,7 @@
* This is intended to be used by another SVGA driver, * This is intended to be used by another SVGA driver,
* and not as a card in it's own right. * and not as a card in it's own right.
* *
* Version: @(#)vid_svga.c 1.0.12 2018/10/05 * Version: @(#)vid_svga.c 1.0.13 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -397,7 +397,6 @@ svga_in(uint16_t addr, void *priv)
break; break;
case 0x3da: case 0x3da:
svga->attrff = 0; svga->attrff = 0;
svga->attrff = 0;
if (svga->cgastat & 0x01) if (svga->cgastat & 0x01)
svga->cgastat &= ~0x30; svga->cgastat &= ~0x30;
@@ -803,7 +802,7 @@ svga_poll(void *p)
int int
svga_init(svga_t *svga, void *p, int memsize, svga_init(svga_t *svga, void *p, int vramsize,
void (*recalctimings_ex)(struct svga_t *svga), void (*recalctimings_ex)(struct svga_t *svga),
uint8_t (*video_in) (uint16_t addr, void *p), uint8_t (*video_in) (uint16_t addr, void *p),
void (*video_out)(uint16_t addr, uint8_t val, void *p), void (*video_out)(uint16_t addr, uint8_t val, void *p),
@@ -833,11 +832,11 @@ svga_init(svga_t *svga, void *p, int memsize,
svga->crtc[6] = 255; svga->crtc[6] = 255;
svga->dispontime = svga->dispofftime = 1000 * (1 << TIMER_SHIFT); svga->dispontime = svga->dispofftime = 1000 * (1 << TIMER_SHIFT);
svga->bpp = 8; svga->bpp = 8;
svga->vram = (uint8_t *)mem_alloc(memsize); svga->vram = (uint8_t *)mem_alloc(vramsize);
svga->vram_max = memsize; svga->vram_max = vramsize;
svga->vram_display_mask = svga->vram_mask = memsize - 1; svga->vram_display_mask = svga->vram_mask = vramsize - 1;
svga->decode_mask = 0x7fffff; svga->decode_mask = 0x7fffff;
svga->changedvram = (uint8_t *)mem_alloc(memsize >> 12); svga->changedvram = (uint8_t *)mem_alloc(0x800000 >> 12);
svga->recalctimings_ex = recalctimings_ex; svga->recalctimings_ex = recalctimings_ex;
svga->video_in = video_in; svga->video_in = video_in;
svga->video_out = video_out; svga->video_out = video_out;

View File

@@ -10,7 +10,7 @@
* *
* FIXME: fix the mem_map_t stuff in mem_read_b() et al! * FIXME: fix the mem_map_t stuff in mem_read_b() et al!
* *
* Version: @(#)m_at_headland.c 1.0.6 2018/09/22 * Version: @(#)m_at_headland.c 1.0.7 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Original by GreatPsycho for PCem. * Original by GreatPsycho for PCem.
@@ -57,7 +57,7 @@
#include "machine.h" #include "machine.h"
#define BIOS_67_AMA932J_PATH L"machines/unknown/ama932j/oti067.bin" #define BIOS_AMA932J_VIDEO_PATH L"machines/unknown/ama932j/oti067.bin"
typedef struct { typedef struct {
@@ -469,8 +469,9 @@ hl_readw(uint16_t addr, void *priv)
static uint8_t static uint8_t
mem_read_b(uint32_t addr, void *priv) mem_read_b(uint32_t addr, void *priv)
{ {
uint16_t *mr = (uint16_t *)priv; mem_map_t *map = (mem_map_t *)priv;
headland_t *dev = NULL; //FIXME: headland_t *dev = (headland_t *)map->dev;
uint16_t *mr = (uint16_t *)map->p2;
uint8_t ret = 0xff; uint8_t ret = 0xff;
addr = get_addr(dev, addr, mr); addr = get_addr(dev, addr, mr);
@@ -484,8 +485,9 @@ mem_read_b(uint32_t addr, void *priv)
static uint16_t static uint16_t
mem_read_w(uint32_t addr, void *priv) mem_read_w(uint32_t addr, void *priv)
{ {
uint16_t *mr = (uint16_t *)priv; mem_map_t *map = (mem_map_t *)priv;
headland_t *dev = NULL; //FIXME: headland_t *dev = (headland_t *)map->dev;
uint16_t *mr = (uint16_t *)map->p2;
uint16_t ret = 0xffff; uint16_t ret = 0xffff;
addr = get_addr(dev, addr, mr); addr = get_addr(dev, addr, mr);
@@ -499,8 +501,9 @@ mem_read_w(uint32_t addr, void *priv)
static uint32_t static uint32_t
mem_read_l(uint32_t addr, void *priv) mem_read_l(uint32_t addr, void *priv)
{ {
uint16_t *mr = (uint16_t *)priv; mem_map_t *map = (mem_map_t *)priv;
headland_t *dev = NULL; //FIXME: headland_t *dev = (headland_t *)map->dev;
uint16_t *mr = (uint16_t *)map->p2;
uint32_t ret = 0xffffffff; uint32_t ret = 0xffffffff;
addr = get_addr(dev, addr, mr); addr = get_addr(dev, addr, mr);
@@ -514,8 +517,9 @@ mem_read_l(uint32_t addr, void *priv)
static void static void
mem_write_b(uint32_t addr, uint8_t val, void *priv) mem_write_b(uint32_t addr, uint8_t val, void *priv)
{ {
uint16_t *mr = (uint16_t *)priv; mem_map_t *map = (mem_map_t *)priv;
headland_t *dev = NULL; //FIXME: headland_t *dev = (headland_t *)map->dev;
uint16_t *mr = (uint16_t *)map->p2;
addr = get_addr(dev, addr, mr); addr = get_addr(dev, addr, mr);
if (addr < ((uint32_t)mem_size << 10)) if (addr < ((uint32_t)mem_size << 10))
@@ -526,8 +530,9 @@ mem_write_b(uint32_t addr, uint8_t val, void *priv)
static void static void
mem_write_w(uint32_t addr, uint16_t val, void *priv) mem_write_w(uint32_t addr, uint16_t val, void *priv)
{ {
uint16_t *mr = (uint16_t *)priv; mem_map_t *map = (mem_map_t *)priv;
headland_t *dev = NULL; //FIXME: headland_t *dev = (headland_t *)map->dev;
uint16_t *mr = (uint16_t *)map->p2;
addr = get_addr(dev, addr, mr); addr = get_addr(dev, addr, mr);
if (addr < ((uint32_t)mem_size << 10)) if (addr < ((uint32_t)mem_size << 10))
@@ -538,8 +543,9 @@ mem_write_w(uint32_t addr, uint16_t val, void *priv)
static void static void
mem_write_l(uint32_t addr, uint32_t val, void *priv) mem_write_l(uint32_t addr, uint32_t val, void *priv)
{ {
uint16_t *mr = (uint16_t *)priv; mem_map_t *map = (mem_map_t *)priv;
headland_t *dev = NULL; //FIXME: headland_t *dev = (headland_t *)map->dev;
uint16_t *mr = (uint16_t *)map->p2;
addr = get_addr(dev, addr, mr); addr = get_addr(dev, addr, mr);
if (addr < ((uint32_t)mem_size << 10)) if (addr < ((uint32_t)mem_size << 10))
@@ -581,22 +587,25 @@ headland_init(headland_t *dev, int ht386)
mem_map_add(&dev->low_mapping, 0, 0x40000, mem_map_add(&dev->low_mapping, 0, 0x40000,
mem_read_b,mem_read_w,mem_read_l, mem_read_b,mem_read_w,mem_read_l,
mem_write_b,mem_write_w,mem_write_l, mem_write_b,mem_write_w,mem_write_l,
ram, MEM_MAPPING_INTERNAL, dev); ram, MEM_MAPPING_INTERNAL, &dev->low_mapping);
mem_map_set_dev(&dev->low_mapping, dev);
if (mem_size > 640) { if (mem_size > 640) {
mem_map_add(&dev->mid_mapping, 0xA0000, 0x60000, mem_map_add(&dev->mid_mapping, 0xA0000, 0x60000,
mem_read_b,mem_read_w,mem_read_l, mem_read_b,mem_read_w,mem_read_l,
mem_write_b,mem_write_w,mem_write_l, mem_write_b,mem_write_w,mem_write_l,
ram + 0xA0000, MEM_MAPPING_INTERNAL, dev); ram + 0xA0000, MEM_MAPPING_INTERNAL, &dev->mid_mapping);
mem_map_enable(&dev->mid_mapping); mem_map_enable(&dev->mid_mapping);
mem_map_set_dev(&dev->mid_mapping, dev);
} }
if (mem_size > 1024) { if (mem_size > 1024) {
mem_map_add(&dev->high_mapping, 0x100000, ((mem_size-1024)*1024), mem_map_add(&dev->high_mapping, 0x100000, ((mem_size-1024)*1024),
mem_read_b,mem_read_w,mem_read_l, mem_read_b,mem_read_w,mem_read_l,
mem_write_b,mem_write_w,mem_write_l, mem_write_b,mem_write_w,mem_write_l,
ram + 0x100000, MEM_MAPPING_INTERNAL, dev); ram + 0x100000, MEM_MAPPING_INTERNAL, &dev->high_mapping);
mem_map_enable(&dev->high_mapping); mem_map_enable(&dev->high_mapping);
mem_map_set_dev(&dev->high_mapping, dev);
} }
for (i = 0; i < 24; i++) { for (i = 0; i < 24; i++) {
@@ -605,8 +614,9 @@ headland_init(headland_t *dev, int ht386)
mem_read_b,mem_read_w,mem_read_l, mem_read_b,mem_read_w,mem_read_l,
mem_write_b,mem_write_w,mem_write_l, mem_write_b,mem_write_w,mem_write_l,
mem_size > 256 + (i << 4) ? ram + 0x40000 + (i << 14) : NULL, mem_size > 256 + (i << 4) ? ram + 0x40000 + (i << 14) : NULL,
MEM_MAPPING_INTERNAL, dev); MEM_MAPPING_INTERNAL, &dev->upper_mapping[i]);
mem_map_enable(&dev->upper_mapping[i]); mem_map_enable(&dev->upper_mapping[i]);
mem_map_set_dev(&dev->upper_mapping[i], dev);
} }
for (i = 0; i < 64; i++) { for (i = 0; i < 64; i++) {
@@ -616,8 +626,12 @@ headland_init(headland_t *dev, int ht386)
mem_read_b,mem_read_w,mem_read_l, mem_read_b,mem_read_w,mem_read_l,
mem_write_b,mem_write_w,mem_write_l, mem_write_b,mem_write_w,mem_write_l,
ram + (((i & 31) + ((i & 31) >= 24 ? 24 : 16)) << 14), ram + (((i & 31) + ((i & 31) >= 24 ? 24 : 16)) << 14),
0, &dev->ems_mr[i]); 0, &dev->ems_mapping[i]);
mem_map_disable(&dev->ems_mapping[i]); mem_map_disable(&dev->ems_mapping[i]);
mem_map_set_dev(&dev->ems_mapping[i], dev);
/* HACK - we need 'mr' in the r/w routines!! */
dev->ems_mapping[i].p2 = &dev->ems_mr[i];
} }
memmap_state_update(dev); memmap_state_update(dev);
@@ -652,9 +666,8 @@ machine_at_ama932j_init(const machine_t *model, void *arg)
dev = headland_common_init(1); dev = headland_common_init(1);
if (video_card == VID_INTERNAL) { if (video_card == VID_INTERNAL) {
rom_init(&dev->vid_bios, BIOS_67_AMA932J_PATH, rom_init(&dev->vid_bios, BIOS_AMA932J_VIDEO_PATH,
0xc0000, 0x8000, 0x7fff, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_INTERNAL);
0, MEM_MAPPING_INTERNAL);
device_add(&oti067_onboard_device); device_add(&oti067_onboard_device);
} }

View File

@@ -8,7 +8,7 @@
* *
* Definitions for the memory interface. * Definitions for the memory interface.
* *
* Version: @(#)mem.h 1.0.10 2018/09/18 * Version: @(#)mem.h 1.0.11 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Sarah Walker, <tommowalker@tommowalker.co.uk> * Sarah Walker, <tommowalker@tommowalker.co.uk>
@@ -78,7 +78,7 @@ typedef struct _memmap_ {
uint32_t flags; uint32_t flags;
void *p; /* backpointer to mapping or device */ void *p; /* backpointer to mapping or device */
void *p2; /* FIXME: temporary hack for Headland --FvK */
void *dev; /* backpointer to memory device */ void *dev; /* backpointer to memory device */
} mem_map_t; } mem_map_t;

View File

@@ -8,7 +8,7 @@
* *
* Main emulator module where most things are controlled. * Main emulator module where most things are controlled.
* *
* Version: @(#)pc.c 1.0.54 2018/10/05 * Version: @(#)pc.c 1.0.55 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -202,6 +202,7 @@ pclog_ex(const char *fmt, va_list ap)
static int seen = 0; static int seen = 0;
static int detect = 1; static int detect = 1;
char temp[PCLOG_BUFF_SIZE]; char temp[PCLOG_BUFF_SIZE];
FILE *fp;
if (fmt == NULL) { if (fmt == NULL) {
/* Initialize. */ /* Initialize. */
@@ -210,22 +211,11 @@ pclog_ex(const char *fmt, va_list ap)
return; return;
} }
if (stdlog == NULL) { /* If a logpath was set, override the default. */
if (log_path[0] != L'\0') { if (log_path[0] != L'\0') {
stdlog = plat_fopen(log_path, L"w"); fp = plat_fopen(log_path, L"w");
if (stdlog == NULL) if (fp != NULL)
#ifdef _WIN32 stdlog = fp;
stdlog = stdout;
#else
stdlog = stderr;
#endif
} else {
#ifdef _WIN32
stdlog = stdout;
#else
stdlog = stderr;
#endif
}
} }
vsprintf(temp, fmt, ap); vsprintf(temp, fmt, ap);
@@ -233,7 +223,7 @@ pclog_ex(const char *fmt, va_list ap)
seen++; seen++;
} else { } else {
if (seen) { if (seen) {
fprintf(stdlog, "*** %d repeats ***\n", seen); fprintf(stdlog, "*** %i repeats ***\n", seen);
} }
seen = 0; seen = 0;
strcpy(buff, temp); strcpy(buff, temp);
@@ -383,18 +373,18 @@ pc_version(const char *platform)
strcpy(emu_fullversion, emu_version); strcpy(emu_fullversion, emu_version);
#if defined(_MSC_VER) #if defined(_MSC_VER)
sprintf(temp, " [VC %d]", _MSC_VER); sprintf(temp, " [VC %i]", _MSC_VER);
#elif defined(__clang_major__) #elif defined(__clang_major__)
sprintf(temp, " [Clang %d.%d.%d]", sprintf(temp, " [Clang %i.%i.%i]",
__clang_major__, __clang_minor__, __clang_patchlevel__); __clang_major__, __clang_minor__, __clang_patchlevel__);
#elif defined(__GNUC__) #elif defined(__GNUC__)
sprintf(temp, " [GCC %d.%d.%d]", sprintf(temp, " [GCC %i.%i.%i]",
__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__); __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
#endif #endif
strcat(emu_fullversion, temp); strcat(emu_fullversion, temp);
#ifdef BUILD #ifdef BUILD
sprintf(temp, " (Build %d", BUILD); sprintf(temp, " (Build %i", BUILD);
strcat(emu_fullversion, temp); strcat(emu_fullversion, temp);
#endif #endif
#ifdef COMMIT #ifdef COMMIT
@@ -514,6 +504,16 @@ pc_setup(int argc, wchar_t *argv[])
*/ */
plat_getcwd(usr_path, sizeof_w(usr_path)); plat_getcwd(usr_path, sizeof_w(usr_path));
/*
* Initialize the 'stdlog' variable, this is
* somewhat platform-specific. On Windows, it
* will always be 'stdout', but on UNIX-based
* systems, it can be 'stderr' for the console
* mode (since 'stdout' is used by the UI),
* and 'stdout' for the GUI versins, etc...
*/
stdlog = (FILE *)argv;
return(0); return(0);
} }
@@ -528,7 +528,9 @@ usage:
plat_console(1); plat_console(1);
#endif #endif
printf("\n%s %s\n", emu_title, emu_fullversion); printf("\n%s %s\n", emu_title, emu_fullversion);
printf("\nUsage: varcem [options] [cfg-file]\n\n"); p = plat_get_basename(argv[0]);
if (*p == L'/' || *p == L'\\') p++;
printf("\nUsage: %ls [options] [cfg-file]\n\n", p);
printf("Valid options are:\n\n"); printf("Valid options are:\n\n");
printf(" -? or --help - show this information\n"); printf(" -? or --help - show this information\n");
printf(" -C or --dumpcfg - dump config file after loading\n"); printf(" -C or --dumpcfg - dump config file after loading\n");
@@ -1245,7 +1247,7 @@ set_screen_size(int x, int y)
double dx, dy, dtx, dty; double dx, dy, dtx, dty;
int vid; int vid;
DEBUG("SetScreenSize(%d, %d) resize=%d\n", x, y, vid_resize); DEBUG("SetScreenSize(%i, %i) resize=%i\n", x, y, vid_resize);
/* Make sure we keep usable values. */ /* Make sure we keep usable values. */
if (x < 320) x = 320; if (x < 320) x = 320;

View File

@@ -8,7 +8,7 @@
* *
* Provide centralized access to the PNG image handler. * Provide centralized access to the PNG image handler.
* *
* Version: @(#)png.c 1.0.3 2018/10/05 * Version: @(#)png.c 1.0.4 2018/10/07
* *
* Author: Fred N. van Kempen, <decwiz@yahoo.com> * Author: Fred N. van Kempen, <decwiz@yahoo.com>
* *
@@ -191,7 +191,8 @@ png_load(void)
ui_msgbox(MBX_ERROR, temp); ui_msgbox(MBX_ERROR, temp);
ERRLOG("PNG: unable to load '%s'; format disabled!\n", fn); ERRLOG("PNG: unable to load '%s'; format disabled!\n", fn);
return(0); return(0);
} } else
INFO("PNG: module '%s' loaded.\n", fn);
#else #else
png_handle = (void *)1; /* just to indicate always therse */ png_handle = (void *)1; /* just to indicate always therse */
#endif #endif

View File

@@ -8,7 +8,7 @@
* *
* Platform main support module for Windows. * Platform main support module for Windows.
* *
* Version: @(#)win.c 1.0.20 2018/10/05 * Version: @(#)win.c 1.0.21 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -206,7 +206,7 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nCmdShow)
pc_version("Windows"); pc_version("Windows");
/* Set up the basic pathname info for the application. */ /* Set up the basic pathname info for the application. */
(void)pc_setup(0, NULL); (void)pc_setup(0, (wchar_t **)stdout);
/* Set this to the default value (windowed mode). */ /* Set this to the default value (windowed mode). */
vid_fullscreen = 0; vid_fullscreen = 0;

View File

@@ -8,7 +8,7 @@
* *
* Handle language support for the platform. * Handle language support for the platform.
* *
* Version: @(#)win_lang.c 1.0.6 2018/10/05 * Version: @(#)win_lang.c 1.0.7 2018/10/07
* *
* Author: Fred N. van Kempen, <decwiz@yahoo.com> * Author: Fred N. van Kempen, <decwiz@yahoo.com>
* *
@@ -119,7 +119,7 @@ plat_lang_scan(void)
lflen = wcslen(LANG_FILE); lflen = wcslen(LANG_FILE);
/* Open the "language modules" directory. */ /* Open the "language modules" directory. */
swprintf(path, sizeof_w(temp), L"%ls%ls", exe_path, LANGUAGE_PATH); swprintf(path, sizeof_w(path), L"%ls%ls", exe_path, LANGUAGE_PATH);
dir = opendir(path); dir = opendir(path);
if (dir != NULL) { if (dir != NULL) {
/* Scan all files, and see if we find a usable one. */ /* Scan all files, and see if we find a usable one. */

View File

@@ -12,7 +12,7 @@
* Windows and UNIX systems, with support for FTDI and Prolific * Windows and UNIX systems, with support for FTDI and Prolific
* USB ports. Support for these has been removed. * USB ports. Support for these has been removed.
* *
* Version: @(#)win_serial.c 1.0.3 2018/05/06 * Version: @(#)win_serial.c 1.0.4 2018/10/07
* *
* Author: Fred N. van Kempen, <decwiz@yahoo.com> * Author: Fred N. van Kempen, <decwiz@yahoo.com>
* *

View File

@@ -8,7 +8,7 @@
* *
* Implementation of the Settings dialog. * Implementation of the Settings dialog.
* *
* Version: @(#)win_settings_disk.h 1.0.14 2018/09/22 * Version: @(#)win_settings_disk.h 1.0.15 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>

View File

@@ -8,7 +8,7 @@
* *
* Implement the user Interface module. * Implement the user Interface module.
* *
* Version: @(#)win_ui.c 1.0.26 2018/10/05 * Version: @(#)win_ui.c 1.0.27 2018/10/07
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -59,11 +59,6 @@
#include "resource.h" #include "resource.h"
#ifndef GWL_WNDPROC
# define GWL_WNDPROC GWLP_WNDPROC
#endif
#define TIMER_1SEC 1 /* ID of the one-second timer */ #define TIMER_1SEC 1 /* ID of the one-second timer */
#define ICONS_MAX 256 /* number of icons we can cache */ #define ICONS_MAX 256 /* number of icons we can cache */
@@ -194,7 +189,7 @@ StatusBarCreate(uintptr_t id)
/* Replace the original procedure with ours. */ /* Replace the original procedure with ours. */
stbar_orig_proc = GetWindowLongPtr(hwndSBAR, GWLP_WNDPROC); stbar_orig_proc = GetWindowLongPtr(hwndSBAR, GWLP_WNDPROC);
SetWindowLongPtr(hwndSBAR, GWL_WNDPROC, (LONG_PTR)sb_dlg_proc); SetWindowLongPtr(hwndSBAR, GWLP_WNDPROC, (LONG_PTR)sb_dlg_proc);
SendMessage(hwndSBAR, SB_SETMINHEIGHT, (WPARAM)SB_HEIGHT, (LPARAM)0); SendMessage(hwndSBAR, SB_SETMINHEIGHT, (WPARAM)SB_HEIGHT, (LPARAM)0);
@@ -563,14 +558,14 @@ plat_set_input(HWND h)
{ {
/* If needed, rest the old one first. */ /* If needed, rest the old one first. */
if (input_orig_hwnd != NULL) { if (input_orig_hwnd != NULL) {
SetWindowLongPtr(input_orig_hwnd, GWL_WNDPROC, SetWindowLongPtr(input_orig_hwnd, GWLP_WNDPROC,
(LONG_PTR)input_orig_proc); (LONG_PTR)input_orig_proc);
} }
/* Redirect the window procedure so we can catch WM_INPUT. */ /* Redirect the window procedure so we can catch WM_INPUT. */
input_orig_proc = GetWindowLongPtr(h, GWLP_WNDPROC); input_orig_proc = GetWindowLongPtr(h, GWLP_WNDPROC);
input_orig_hwnd = h; input_orig_hwnd = h;
SetWindowLongPtr(h, GWL_WNDPROC, (LONG_PTR)input_proc); SetWindowLongPtr(h, GWLP_WNDPROC, (LONG_PTR)input_proc);
} }