From 3572f7a34db780be304f0b7c83148ddc6beb88b8 Mon Sep 17 00:00:00 2001 From: waltje Date: Mon, 16 Oct 2017 04:54:41 -0400 Subject: [PATCH] Minor fixes for C/C++ inter-operation. --- src/bugger.h | 11 +++++++- src/cdrom/cdrom.c | 8 +++--- src/cdrom/cdrom.h | 55 ++++++++++++++++++++-------------------- src/cdrom/cdrom_image.cc | 4 +++ src/cdrom/cdrom_image.h | 2 -- src/device.h | 11 +++++++- src/floppy/floppy.h | 17 +++++++------ src/ibm.h | 14 +++++++--- src/network/network.c | 4 +-- src/network/network.h | 4 +-- src/plat.h | 4 ++- src/scsi/scsi.h | 5 ++-- 12 files changed, 87 insertions(+), 52 deletions(-) diff --git a/src/bugger.h b/src/bugger.h index 1d4dfb841..a4135648c 100644 --- a/src/bugger.h +++ b/src/bugger.h @@ -15,9 +15,10 @@ * * Definitions for the BUGGER card. * - * Version: @(#)bugger.h 1.0.3 2017/04/07 + * Version: @(#)bugger.h 1.0.4 2017/10/15 * * Author: Fred N. van Kempen, + * * Copyright 1989-2017 Fred N. van Kempen. */ #ifndef BUGGER_H @@ -29,9 +30,17 @@ #define BUGGER_ADDRLEN 4 +#ifdef __cplusplus +extern "C" { +#endif + /* Functions. */ extern void bugger_init(void); extern void bugger_remove(void); +#ifdef __cplusplus +} +#endif + #endif /*BUGGER_H*/ diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index 44971974a..e5a256bb7 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -9,7 +9,7 @@ * Implementation of the CD-ROM drive with SCSI(-like) * commands, for both ATAPI and SCSI usage. * - * Version: @(#)cdrom.c 1.0.17 2017/10/14 + * Version: @(#)cdrom.c 1.0.18 2017/10/15 * * Author: Miran Grca, * @@ -50,8 +50,10 @@ #define ABRT_ERR 0x04 /* Command aborted */ #define MCR_ERR 0x08 /* Media change request */ -cdrom_t cdrom[CDROM_NUM]; -cdrom_drive_t cdrom_drives[CDROM_NUM]; +cdrom_t cdrom[CDROM_NUM]; +cdrom_image_t cdrom_image[CDROM_NUM]; +cdrom_ioctl_t cdrom_ioctl[CDROM_NUM]; +cdrom_drive_t cdrom_drives[CDROM_NUM]; uint8_t atapi_cdrom_drives[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; uint8_t scsi_cdrom_drives[16][8] = { { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, diff --git a/src/cdrom/cdrom.h b/src/cdrom/cdrom.h index d9b3f46e9..78d3fba50 100644 --- a/src/cdrom/cdrom.h +++ b/src/cdrom/cdrom.h @@ -9,7 +9,7 @@ * Implementation of the CD-ROM drive with SCSI(-like) * commands, for both ATAPI and SCSI usage. * - * Version: @(#)cdrom.h 1.0.2 2017/10/12 + * Version: @(#)cdrom.h 1.0.3 2017/10/15 * * Author: Miran Grca, * @@ -198,34 +198,37 @@ extern cdrom_t cdrom[CDROM_NUM]; extern cdrom_drive_t cdrom_drives[CDROM_NUM]; extern uint8_t atapi_cdrom_drives[8]; extern uint8_t scsi_cdrom_drives[16][8]; - cdrom_image_t cdrom_image[CDROM_NUM]; - cdrom_ioctl_t cdrom_ioctl[CDROM_NUM]; +extern cdrom_image_t cdrom_image[CDROM_NUM]; +extern cdrom_ioctl_t cdrom_ioctl[CDROM_NUM]; -extern int (*ide_bus_master_read)(int channel, uint8_t *data, int transfer_length); -extern int (*ide_bus_master_write)(int channel, uint8_t *data, int transfer_length); -extern void (*ide_bus_master_set_irq)(int channel); -extern void ioctl_close(uint8_t id); +#define cdrom_sense_error cdrom[id].sense[0] +#define cdrom_sense_key cdrom[id].sense[2] +#define cdrom_asc cdrom[id].sense[12] +#define cdrom_ascq cdrom[id].sense[13] +#define cdrom_drive cdrom_drives[id].host_drive -extern uint32_t cdrom_mode_sense_get_channel(uint8_t id, int channel); -extern uint32_t cdrom_mode_sense_get_volume(uint8_t id, int channel); -extern void build_atapi_cdrom_map(void); -extern void build_scsi_cdrom_map(void); -extern int cdrom_CDROM_PHASE_to_scsi(uint8_t id); -extern int cdrom_atapi_phase_to_scsi(uint8_t id); -extern void cdrom_command(uint8_t id, uint8_t *cdb); -extern void cdrom_phase_callback(uint8_t id); -extern uint32_t cdrom_read(uint8_t channel, int length); -extern void cdrom_write(uint8_t channel, uint32_t val, int length); #ifdef __cplusplus extern "C" { #endif -int cdrom_lba_to_msf_accurate(int lba); +extern int (*ide_bus_master_read)(int channel, uint8_t *data, int transfer_length); +extern int (*ide_bus_master_write)(int channel, uint8_t *data, int transfer_length); +extern void (*ide_bus_master_set_irq)(int channel); +extern void ioctl_close(uint8_t id); -#ifdef __cplusplus -} -#endif +extern uint32_t cdrom_mode_sense_get_channel(uint8_t id, int channel); +extern uint32_t cdrom_mode_sense_get_volume(uint8_t id, int channel); +extern void build_atapi_cdrom_map(void); +extern void build_scsi_cdrom_map(void); +extern int cdrom_CDROM_PHASE_to_scsi(uint8_t id); +extern int cdrom_atapi_phase_to_scsi(uint8_t id); +extern void cdrom_command(uint8_t id, uint8_t *cdb); +extern void cdrom_phase_callback(uint8_t id); +extern uint32_t cdrom_read(uint8_t channel, int length); +extern void cdrom_write(uint8_t channel, uint32_t val, int length); + +extern int cdrom_lba_to_msf_accurate(int lba); extern void cdrom_close(uint8_t id); extern void cdrom_reset(uint8_t id); @@ -237,15 +240,13 @@ extern void cdrom_insert(uint8_t id); extern int find_cdrom_for_scsi_id(uint8_t scsi_id, uint8_t scsi_lun); extern int cdrom_read_capacity(uint8_t id, uint8_t *cdb, uint8_t *buffer, uint32_t *len); -#define cdrom_sense_error cdrom[id].sense[0] -#define cdrom_sense_key cdrom[id].sense[2] -#define cdrom_asc cdrom[id].sense[12] -#define cdrom_ascq cdrom[id].sense[13] -#define cdrom_drive cdrom_drives[id].host_drive - extern void cdrom_global_init(void); extern void cdrom_global_reset(void); extern void cdrom_hard_reset(void); +#ifdef __cplusplus +} +#endif + #endif /*EMU_CDROM_H*/ diff --git a/src/cdrom/cdrom_image.cc b/src/cdrom/cdrom_image.cc index a2da43dee..6a22a9414 100644 --- a/src/cdrom/cdrom_image.cc +++ b/src/cdrom/cdrom_image.cc @@ -42,6 +42,10 @@ int cdrom_image_do_log = 0; CDROM_Interface_Image* cdimg[CDROM_NUM] = { NULL, NULL, NULL, NULL }; + +extern "C" void pclog(const char *fmt, ...); + + void cdrom_image_log(const char *format, ...) { #ifdef ENABLE_CDROM_IMAGE_LOG diff --git a/src/cdrom/cdrom_image.h b/src/cdrom/cdrom_image.h index 4ea4cb78f..415956e56 100644 --- a/src/cdrom/cdrom_image.h +++ b/src/cdrom/cdrom_image.h @@ -19,8 +19,6 @@ extern void image_close(uint8_t id); void update_status_bar_icon_state(int tag, int state); extern void cdrom_set_null_handler(uint8_t id); -void pclog(const char *format, ...); - #ifdef __cplusplus } #endif diff --git a/src/device.h b/src/device.h index d3460555a..ae8db2308 100644 --- a/src/device.h +++ b/src/device.h @@ -9,11 +9,12 @@ * Implementation of the generic device interface to handle * all devices attached to the emulator. * - * Version: @(#)device.h 1.0.3 2017/10/04 + * Version: @(#)device.h 1.0.4 2017/10/15 * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, + * * Copyright 2008-2016 Sarah Walker. * Copyright 2016,2017 Miran Grca. * Copyright 2017 Fred N. van Kempen. @@ -92,6 +93,10 @@ typedef struct _device_ { } device_t; +#ifdef __cplusplus +extern "C" { +#endif + extern void device_init(void); extern void device_add(device_t *d); extern void device_close_all(void); @@ -117,5 +122,9 @@ extern int device_is_valid(device_t *device, int machine_flags); extern int machine_get_config_int(char *s); extern char *machine_get_config_string(char *s); +#ifdef __cplusplus +} +#endif + #endif /*EMU_DEVICE_H*/ diff --git a/src/floppy/floppy.h b/src/floppy/floppy.h index 28d9a47aa..03bc68dfb 100644 --- a/src/floppy/floppy.h +++ b/src/floppy/floppy.h @@ -9,10 +9,11 @@ * Generic floppy disk interface that communicates with the * other handlers. * - * Version: @(#)floppy.h 1.0.3 2017/09/03 + * Version: @(#)floppy.h 1.0.4 2017/10/15 * * Authors: Sarah Walker, * Miran Grca, + * * Copyright 2008-2017 Sarah Walker. * Copyright 2016,2017 Miran Grca. */ @@ -176,17 +177,17 @@ void d86f_reset_index_hole_pos(int drive, int side); uint16_t d86f_prepare_pretrack(int drive, int side, int iso); uint16_t d86f_prepare_sector(int drive, int side, int prev_pos, uint8_t *id_buf, uint8_t *data_buf, int data_len, int gap2, int gap3, int deleted, int bad_crc); -int gap3_sizes[5][8][48]; +extern int gap3_sizes[5][8][48]; void null_writeback(int drive); void null_write_data(int drive, int side, uint16_t pos, uint8_t data); int null_format_conditions(int drive); void d86f_unregister(int drive); -uint8_t dmf_r[21]; -uint8_t xdf_physical_sectors[2][2]; -uint8_t xdf_gap3_sizes[2][2]; -uint16_t xdf_trackx_spos[2][8]; +extern uint8_t dmf_r[21]; +extern uint8_t xdf_physical_sectors[2][2]; +extern uint8_t xdf_gap3_sizes[2][2]; +extern uint16_t xdf_trackx_spos[2][8]; typedef struct { @@ -200,8 +201,8 @@ typedef union xdf_id_t id; } xdf_sector_t; -xdf_sector_t xdf_img_layout[2][2][46]; -xdf_sector_t xdf_disk_layout[2][2][38]; +extern xdf_sector_t xdf_img_layout[2][2][46]; +extern xdf_sector_t xdf_disk_layout[2][2][38]; uint32_t td0_get_raw_tsize(int side_flags, int slower_rpm); diff --git a/src/ibm.h b/src/ibm.h index d671fff9b..288224314 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -10,7 +10,7 @@ * * !!!NOTE!!! The goal is to GET RID of this file. Do NOT add stuff !! * - * Version: @(#)ibm.h 1.0.8 2017/10/04 + * Version: @(#)ibm.h 1.0.9 2017/10/15 * * Authors: Sarah Walker, * Miran Grca, @@ -129,7 +129,7 @@ typedef union MMX_REG int8_t sb[8]; } MMX_REG; -struct +struct _cpustate_ { x86reg regs[8]; @@ -235,7 +235,7 @@ extern uint8_t *pccache2; void loadseg(uint16_t seg, x86seg *s); void loadcs(uint16_t seg); -union +union _cr0_ { uint32_t l; uint16_t w; @@ -597,6 +597,10 @@ extern int scale; /* Function prototypes. */ +#ifdef __cplusplus +extern "C" { +#endif + extern void pclog(const char *format, ...); extern void fatal(const char *format, ...); extern wchar_t *pc_concat(wchar_t *str); @@ -648,6 +652,10 @@ extern void x86ts(char *s, uint16_t error); extern void x87_dumpregs(void); extern void x87_reset(void); +#ifdef __cplusplus +} +#endif + /* Configuration values. */ #define SERIAL_MAX 2 diff --git a/src/network/network.c b/src/network/network.c index f6866def0..ca89f19b4 100644 --- a/src/network/network.c +++ b/src/network/network.c @@ -12,7 +12,7 @@ * it should be malloc'ed and then linked to the NETCARD def. * Will be done later. * - * Version: @(#)network.c 1.0.13 2017/10/09 + * Version: @(#)network.c 1.0.14 2017/10/15 * * Author: Fred N. van Kempen, * @@ -107,7 +107,7 @@ network_attach(void *dev, uint8_t *mac, NETRXCB rx) if (network_card == 0) return(ret); /* Save the card's callback info. */ - net_cards[network_card].private = dev; + net_cards[network_card].priv = dev; net_cards[network_card].rx = rx; /* Start the platform module. */ diff --git a/src/network/network.h b/src/network/network.h index 4c6103468..bb533900d 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -8,7 +8,7 @@ * * Definitions for the network module. * - * Version: @(#)network.h 1.0.7 2017/06/03 + * Version: @(#)network.h 1.0.8 2017/10/15 * * Author: Fred N. van Kempen, */ @@ -35,7 +35,7 @@ typedef struct { char name[64]; char internal_name[32]; device_t *device; - void *private; + void *priv; int (*poll)(void *); NETRXCB rx; } netcard_t; diff --git a/src/plat.h b/src/plat.h index 1e0d0a9e9..ff5c9ed62 100644 --- a/src/plat.h +++ b/src/plat.h @@ -8,7 +8,7 @@ * * Define the various platform support functions. * - * Version: @(#)plat.h 1.0.7 2017/10/14 + * Version: @(#)plat.h 1.0.8 2017/10/15 * * Authors: Miran Grca, * Fred N. van Kempen, @@ -25,6 +25,7 @@ extern "C" { #endif /* Global variables residing in the platform module. */ +extern int dopause; /* System-related functions. */ @@ -38,6 +39,7 @@ extern int dir_check_exist(wchar_t *path); extern int dir_create(wchar_t *path); extern void leave_fullscreen(void); +extern void plat_pc_reset(int hard); extern void plat_pause(int p); diff --git a/src/scsi/scsi.h b/src/scsi/scsi.h index 5535846b0..1f6bb1cde 100644 --- a/src/scsi/scsi.h +++ b/src/scsi/scsi.h @@ -8,11 +8,12 @@ * * SCSI controller handler header. * - * Version: @(#)scsi_h 1.0.7 2017/10/07 + * Version: @(#)scsi_h 1.0.8 2017/10/15 * * Authors: TheCollector1995, * Miran Grca, * Fred N. van Kempen, + * * Copyright 2016,2017 TheCollector1995. * Copyright 2016,2017 Miran Grca. * Copyright 2017 Fred N. van Kempen. @@ -215,7 +216,7 @@ extern uint8_t SCSIStatus; extern uint8_t SCSIPhase; extern uint8_t scsi_cdrom_id; -struct { +struct _scsisense_ { uint8_t SenseBuffer[18]; uint8_t SenseLength; uint8_t UnitAttention;