mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 01:48:21 -07:00
Merge remote-tracking branch 'upstream/master' into feature/mtrr
This commit is contained in:
@@ -439,7 +439,7 @@ pc_init(int argc, char *argv[])
|
||||
}
|
||||
if (!strncmp(exe_path, "/private/var/folders/", 21)) {
|
||||
ui_msgbox_header(MBX_FATAL, L"App Translocation", EMU_NAME_W L" cannot determine the emulated machine's location due to a macOS security feature. Please move the " EMU_NAME_W L" app to another folder (not /Applications), or make a copy of it and open that copy instead.");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
#elif !defined(_WIN32)
|
||||
/* Grab the actual path if we are an AppImage. */
|
||||
@@ -874,7 +874,6 @@ pc_init_modules(void)
|
||||
if (machine == -1) {
|
||||
fatal("No available machines\n");
|
||||
exit(-1);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -897,7 +896,6 @@ pc_init_modules(void)
|
||||
if (gfxcard[0] == -1) {
|
||||
fatal("No available video cards\n");
|
||||
exit(-1);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -183,12 +183,12 @@ cdrom_interface_has_config(int cdinterface)
|
||||
const device_t *dev = cdrom_interface_get_device(cdinterface);
|
||||
|
||||
if (dev == NULL)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if (!device_has_config(dev))
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -257,7 +257,9 @@ int
|
||||
cdrom_lba_to_msf_accurate(int lba)
|
||||
{
|
||||
int pos;
|
||||
int m, s, f;
|
||||
int m;
|
||||
int s;
|
||||
int f;
|
||||
|
||||
pos = lba + 150;
|
||||
f = pos % 75;
|
||||
@@ -401,7 +403,9 @@ cdrom_stop(cdrom_t *dev)
|
||||
void
|
||||
cdrom_seek(cdrom_t *dev, uint32_t pos, uint8_t vendor_type)
|
||||
{
|
||||
int m, s, f;
|
||||
int m;
|
||||
int s;
|
||||
int f;
|
||||
|
||||
if (!dev)
|
||||
return;
|
||||
@@ -498,7 +502,9 @@ uint8_t
|
||||
cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf)
|
||||
{
|
||||
track_info_t ti;
|
||||
int m = 0, s = 0, f = 0;
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
|
||||
if (dev->cd_status == CD_STATUS_DATA_ONLY)
|
||||
return 0;
|
||||
@@ -570,7 +576,9 @@ cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf)
|
||||
uint8_t
|
||||
cdrom_audio_track_search(cdrom_t *dev, uint32_t pos, int type, uint8_t playbit)
|
||||
{
|
||||
int m = 0, s = 0, f = 0;
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
|
||||
if (dev->cd_status == CD_STATUS_DATA_ONLY)
|
||||
return 0;
|
||||
@@ -615,7 +623,9 @@ cdrom_audio_track_search(cdrom_t *dev, uint32_t pos, int type, uint8_t playbit)
|
||||
uint8_t
|
||||
cdrom_audio_play_toshiba(cdrom_t *dev, uint32_t pos, int type)
|
||||
{
|
||||
int m = 0, s = 0, f = 0;
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
|
||||
if (dev->cd_status == CD_STATUS_DATA_ONLY)
|
||||
return 0;
|
||||
@@ -657,7 +667,9 @@ cdrom_audio_play_toshiba(cdrom_t *dev, uint32_t pos, int type)
|
||||
uint8_t
|
||||
cdrom_audio_scan(cdrom_t *dev, uint32_t pos, int type)
|
||||
{
|
||||
int m = 0, s = 0, f = 0;
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
|
||||
if (dev->cd_status == CD_STATUS_DATA_ONLY)
|
||||
return 0;
|
||||
@@ -712,7 +724,10 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf)
|
||||
{
|
||||
uint8_t ret;
|
||||
subchannel_t subc;
|
||||
int pos = 1, m, s, f;
|
||||
int pos = 1;
|
||||
int m;
|
||||
int s;
|
||||
int f;
|
||||
uint32_t dat;
|
||||
|
||||
dev->ops->get_subchannel(dev, dev->seek_pos, &subc);
|
||||
@@ -895,9 +910,13 @@ static int
|
||||
read_toc_normal(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf)
|
||||
{
|
||||
track_info_t ti;
|
||||
int i, len = 4;
|
||||
int m, s, f;
|
||||
int first_track, last_track;
|
||||
int i;
|
||||
int len = 4;
|
||||
int m;
|
||||
int s;
|
||||
int f;
|
||||
int first_track;
|
||||
int last_track;
|
||||
uint32_t temp;
|
||||
|
||||
cdrom_log("read_toc_normal(%08X, %08X, %02X, %i)\n", dev, b, start_track, msf);
|
||||
@@ -978,7 +997,10 @@ static int
|
||||
read_toc_session(cdrom_t *dev, unsigned char *b, int msf)
|
||||
{
|
||||
track_info_t ti;
|
||||
int len = 4, m, s, f;
|
||||
int len = 4;
|
||||
int m;
|
||||
int s;
|
||||
int f;
|
||||
uint32_t temp;
|
||||
|
||||
cdrom_log("read_toc_session(%08X, %08X, %i)\n", dev, b, msf);
|
||||
@@ -1027,8 +1049,9 @@ static int
|
||||
read_toc_raw(cdrom_t *dev, unsigned char *b)
|
||||
{
|
||||
track_info_t ti;
|
||||
int i, len = 4;
|
||||
int first_track, last_track;
|
||||
int len = 4;
|
||||
int first_track;
|
||||
int last_track;
|
||||
|
||||
cdrom_log("read_toc_raw(%08X, %08X)\n", dev, b);
|
||||
|
||||
@@ -1037,7 +1060,7 @@ read_toc_raw(cdrom_t *dev, unsigned char *b)
|
||||
/* Bytes 2 and 3 = Number of first and last sessions */
|
||||
b[2] = b[3] = 1;
|
||||
|
||||
for (i = 0; i <= last_track; i++) {
|
||||
for (int i = 0; i <= last_track; i++) {
|
||||
dev->ops->get_track_info(dev, i + 1, 0, &ti);
|
||||
|
||||
cdrom_log(" tracks(%i) = %02X, %02X, %i:%02i.%02i\n", i, ti.attr, ti.number, ti.m, ti.s, ti.f);
|
||||
@@ -1061,8 +1084,10 @@ static int
|
||||
read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf)
|
||||
{
|
||||
track_info_t ti;
|
||||
int i, len = 4;
|
||||
int first_track, last_track;
|
||||
int i;
|
||||
int len = 4;
|
||||
int first_track;
|
||||
int last_track;
|
||||
uint32_t temp;
|
||||
|
||||
cdrom_log("read_toc_sony(%08X, %08X, %02X, %i)\n", dev, b, start_track, msf);
|
||||
@@ -1173,7 +1198,8 @@ void
|
||||
cdrom_get_track_buffer(cdrom_t *dev, uint8_t *buf)
|
||||
{
|
||||
track_info_t ti;
|
||||
int first_track, last_track;
|
||||
int first_track;
|
||||
int last_track;
|
||||
|
||||
if (dev != NULL) {
|
||||
dev->ops->get_tracks(dev, &first_track, &last_track);
|
||||
@@ -1196,7 +1222,8 @@ void
|
||||
cdrom_get_q(cdrom_t *dev, uint8_t *buf, int *curtoctrk, uint8_t mode)
|
||||
{
|
||||
track_info_t ti;
|
||||
int first_track, last_track;
|
||||
int first_track;
|
||||
int last_track;
|
||||
|
||||
if (dev != NULL) {
|
||||
dev->ops->get_tracks(dev, &first_track, &last_track);
|
||||
@@ -1254,8 +1281,11 @@ uint8_t
|
||||
cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, int type)
|
||||
{
|
||||
track_info_t ti;
|
||||
int first_track, last_track;
|
||||
int m = 0, s = 0, f = 0;
|
||||
int first_track;
|
||||
int last_track;
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
|
||||
dev->ops->get_tracks(dev, &first_track, &last_track);
|
||||
|
||||
@@ -1583,10 +1613,15 @@ int
|
||||
cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf, int cdrom_sector_type,
|
||||
int cdrom_sector_flags, int *len, uint8_t vendor_type)
|
||||
{
|
||||
uint8_t *b, *temp_b;
|
||||
uint32_t msf, lba;
|
||||
int audio = 0, mode2 = 0;
|
||||
int m, s, f;
|
||||
uint8_t *b;
|
||||
uint8_t *temp_b;
|
||||
uint32_t msf;
|
||||
uint32_t lba;
|
||||
int audio = 0;
|
||||
int mode2 = 0;
|
||||
int m;
|
||||
int s;
|
||||
int f;
|
||||
|
||||
if (dev->cd_status == CD_STATUS_EMPTY)
|
||||
return 0;
|
||||
@@ -1763,9 +1798,8 @@ void
|
||||
cdrom_hard_reset(void)
|
||||
{
|
||||
cdrom_t *dev;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CDROM_NUM; i++) {
|
||||
for (uint8_t i = 0; i < CDROM_NUM; i++) {
|
||||
dev = &cdrom[i];
|
||||
if (dev->bus_type) {
|
||||
cdrom_log("CD-ROM %i: Hard reset\n", i);
|
||||
@@ -1798,9 +1832,8 @@ void
|
||||
cdrom_close(void)
|
||||
{
|
||||
cdrom_t *dev;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CDROM_NUM; i++) {
|
||||
for (uint8_t i = 0; i < CDROM_NUM; i++) {
|
||||
dev = &cdrom[i];
|
||||
|
||||
if (dev->bus_type == CDROM_BUS_SCSI)
|
||||
|
||||
@@ -84,7 +84,8 @@ static void
|
||||
image_get_subchannel(cdrom_t *dev, uint32_t lba, subchannel_t *subc)
|
||||
{
|
||||
cd_img_t *img = (cd_img_t *) dev->image;
|
||||
TMSF rel_pos, abs_pos;
|
||||
TMSF rel_pos;
|
||||
TMSF abs_pos;
|
||||
|
||||
cdi_get_audio_sub(img, lba, &subc->attr, &subc->track, &subc->index,
|
||||
&rel_pos, &abs_pos);
|
||||
@@ -102,17 +103,19 @@ static int
|
||||
image_get_capacity(cdrom_t *dev)
|
||||
{
|
||||
cd_img_t *img = (cd_img_t *) dev->image;
|
||||
int first_track, last_track;
|
||||
int number, c;
|
||||
int first_track;
|
||||
int last_track;
|
||||
int number;
|
||||
unsigned char attr;
|
||||
uint32_t address = 0, lb = 0;
|
||||
uint32_t address = 0;
|
||||
uint32_t lb = 0;
|
||||
|
||||
if (!img)
|
||||
return 0;
|
||||
|
||||
cdi_get_audio_tracks_lba(img, &first_track, &last_track, &lb);
|
||||
|
||||
for (c = 0; c <= last_track; c++) {
|
||||
for (int c = 0; c <= last_track; c++) {
|
||||
cdi_get_audio_track_info_lba(img, 0, c + 1, &number, &address, &attr);
|
||||
if (address > lb)
|
||||
lb = address;
|
||||
@@ -127,8 +130,11 @@ image_is_track_audio(cdrom_t *dev, uint32_t pos, int ismsf)
|
||||
cd_img_t *img = (cd_img_t *) dev->image;
|
||||
uint8_t attr;
|
||||
TMSF tmsf;
|
||||
int m, s, f;
|
||||
int number, track;
|
||||
int m;
|
||||
int s;
|
||||
int f;
|
||||
int number;
|
||||
int track;
|
||||
|
||||
if (!img || (dev->cd_status == CD_STATUS_DATA_ONLY))
|
||||
return 0;
|
||||
|
||||
@@ -202,14 +202,13 @@ track_file_close(track_t *trk)
|
||||
static void
|
||||
cdi_clear_tracks(cd_img_t *cdi)
|
||||
{
|
||||
int i;
|
||||
track_file_t *last = NULL;
|
||||
track_t *cur = NULL;
|
||||
|
||||
if ((cdi->tracks == NULL) || (cdi->tracks_num == 0))
|
||||
return;
|
||||
|
||||
for (i = 0; i < cdi->tracks_num; i++) {
|
||||
for (int i = 0; i < cdi->tracks_num; i++) {
|
||||
cur = &cdi->tracks[i];
|
||||
|
||||
/* Make sure we do not attempt to close a NULL file. */
|
||||
@@ -321,8 +320,8 @@ cdi_get_audio_track_info_lba(cd_img_t *cdi, int end, int track, int *track_num,
|
||||
int
|
||||
cdi_get_track(cd_img_t *cdi, uint32_t sector)
|
||||
{
|
||||
int i;
|
||||
track_t *cur, *next;
|
||||
track_t *cur;
|
||||
track_t *next;
|
||||
|
||||
/* There must be at least two tracks - data and lead out. */
|
||||
if (cdi->tracks_num < 2)
|
||||
@@ -330,7 +329,7 @@ cdi_get_track(cd_img_t *cdi, uint32_t sector)
|
||||
|
||||
/* This has a problem - the code skips the last track, which is
|
||||
lead out - is that correct? */
|
||||
for (i = 0; i < (cdi->tracks_num - 1); i++) {
|
||||
for (int i = 0; i < (cdi->tracks_num - 1); i++) {
|
||||
cur = &cdi->tracks[i];
|
||||
next = &cdi->tracks[i + 1];
|
||||
if ((cur->start <= sector) && (sector < next->start))
|
||||
@@ -368,12 +367,17 @@ cdi_read_sector(cd_img_t *cdi, uint8_t *buffer, int raw, uint32_t sector)
|
||||
{
|
||||
size_t length;
|
||||
int track = cdi_get_track(cdi, sector) - 1;
|
||||
uint64_t sect = (uint64_t) sector, seek;
|
||||
uint64_t sect = (uint64_t) sector;
|
||||
uint64_t seek;
|
||||
track_t *trk;
|
||||
int track_is_raw, ret;
|
||||
int raw_size, cooked_size;
|
||||
int track_is_raw;
|
||||
int ret;
|
||||
int raw_size;
|
||||
int cooked_size;
|
||||
uint64_t offset = 0ULL;
|
||||
int m = 0, s = 0, f = 0;
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
|
||||
if (track < 0)
|
||||
return 0;
|
||||
@@ -428,9 +432,10 @@ cdi_read_sector(cd_img_t *cdi, uint8_t *buffer, int raw, uint32_t sector)
|
||||
int
|
||||
cdi_read_sectors(cd_img_t *cdi, uint8_t *buffer, int raw, uint32_t sector, uint32_t num)
|
||||
{
|
||||
int sector_size, success = 1;
|
||||
int sector_size;
|
||||
int success = 1;
|
||||
uint8_t *buf;
|
||||
uint32_t buf_len, i;
|
||||
uint32_t buf_len;
|
||||
|
||||
/* TODO: This fails to account for Mode 2. Shouldn't we have a function
|
||||
to get sector size? */
|
||||
@@ -438,7 +443,7 @@ cdi_read_sectors(cd_img_t *cdi, uint8_t *buffer, int raw, uint32_t sector, uint3
|
||||
buf_len = num * sector_size;
|
||||
buf = (uint8_t *) malloc(buf_len * sizeof(uint8_t));
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
for (uint32_t i = 0; i < num; i++) {
|
||||
success = cdi_read_sector(cdi, &buf[i * sector_size], raw, sector + i);
|
||||
if (!success)
|
||||
break;
|
||||
@@ -461,7 +466,8 @@ cdi_read_sector_sub(cd_img_t *cdi, uint8_t *buffer, uint32_t sector)
|
||||
{
|
||||
int track = cdi_get_track(cdi, sector) - 1;
|
||||
track_t *trk;
|
||||
uint64_t s = (uint64_t) sector, seek;
|
||||
uint64_t s = (uint64_t) sector;
|
||||
uint64_t seek;
|
||||
|
||||
if (track < 0)
|
||||
return 0;
|
||||
@@ -550,7 +556,8 @@ cdi_track_push_back(cd_img_t *cdi, track_t *trk)
|
||||
int
|
||||
cdi_load_iso(cd_img_t *cdi, const char *filename)
|
||||
{
|
||||
int error, ret = 2;
|
||||
int error;
|
||||
int ret = 2;
|
||||
track_t trk;
|
||||
|
||||
cdi->tracks = NULL;
|
||||
@@ -698,7 +705,9 @@ static int
|
||||
cdi_cue_get_frame(uint64_t *frames, char **line)
|
||||
{
|
||||
char temp[128];
|
||||
int min, sec, fr;
|
||||
int min;
|
||||
int sec;
|
||||
int fr;
|
||||
int success;
|
||||
|
||||
success = cdi_cue_get_buffer(temp, line, 0);
|
||||
@@ -717,7 +726,8 @@ cdi_cue_get_frame(uint64_t *frames, char **line)
|
||||
static int
|
||||
cdi_cue_get_flags(track_t *cur, char **line)
|
||||
{
|
||||
char temp[128], temp2[128];
|
||||
char temp[128];
|
||||
char temp2[128];
|
||||
int success;
|
||||
|
||||
success = cdi_cue_get_buffer(temp, line, 0);
|
||||
@@ -738,7 +748,8 @@ static int
|
||||
cdi_add_track(cd_img_t *cdi, track_t *cur, uint64_t *shift, uint64_t prestart, uint64_t *total_pregap, uint64_t cur_pregap)
|
||||
{
|
||||
/* Frames between index 0 (prestart) and 1 (current track start) must be skipped. */
|
||||
uint64_t skip, temp;
|
||||
uint64_t skip;
|
||||
uint64_t temp;
|
||||
track_t *prev = NULL;
|
||||
|
||||
/* Skip *MUST* be calculated even if prestart is 0. */
|
||||
@@ -805,16 +816,23 @@ int
|
||||
cdi_load_cue(cd_img_t *cdi, const char *cuefile)
|
||||
{
|
||||
track_t trk;
|
||||
char pathname[MAX_FILENAME_LENGTH], filename[MAX_FILENAME_LENGTH];
|
||||
char pathname[MAX_FILENAME_LENGTH];
|
||||
char filename[MAX_FILENAME_LENGTH];
|
||||
char temp[MAX_FILENAME_LENGTH];
|
||||
uint64_t shift = 0ULL, prestart = 0ULL;
|
||||
uint64_t cur_pregap = 0ULL, total_pregap = 0ULL;
|
||||
uint64_t frame = 0ULL, index;
|
||||
int i, success;
|
||||
int error, can_add_track = 0;
|
||||
uint64_t shift = 0ULL;
|
||||
uint64_t prestart = 0ULL;
|
||||
uint64_t cur_pregap = 0ULL;
|
||||
uint64_t total_pregap = 0ULL;
|
||||
uint64_t frame = 0ULL;
|
||||
uint64_t index;
|
||||
int success;
|
||||
int error;
|
||||
int can_add_track = 0;
|
||||
FILE *fp;
|
||||
char buf[MAX_LINE_LENGTH], ansi[MAX_FILENAME_LENGTH];
|
||||
char *line, *command;
|
||||
char buf[MAX_LINE_LENGTH];
|
||||
char ansi[MAX_FILENAME_LENGTH];
|
||||
char *line;
|
||||
char *command;
|
||||
char *type;
|
||||
|
||||
cdi->tracks = NULL;
|
||||
@@ -842,7 +860,7 @@ cdi_load_cue(cd_img_t *cdi, const char *cuefile)
|
||||
|
||||
/* Do two iterations to make sure to nuke even if it's \r\n or \n\r,
|
||||
but do checks to make sure we're not nuking other bytes. */
|
||||
for (i = 0; i < 2; i++) {
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
if (strlen(buf) > 0) {
|
||||
if (buf[strlen(buf) - 1] == '\n')
|
||||
buf[strlen(buf) - 1] = '\0';
|
||||
@@ -1035,13 +1053,11 @@ cdi_load_cue(cd_img_t *cdi, const char *cuefile)
|
||||
int
|
||||
cdi_has_data_track(cd_img_t *cdi)
|
||||
{
|
||||
int i;
|
||||
|
||||
if ((cdi == NULL) || (cdi->tracks == NULL))
|
||||
return 0;
|
||||
|
||||
/* Data track has attribute 0x14. */
|
||||
for (i = 0; i < cdi->tracks_num; i++) {
|
||||
for (int i = 0; i < cdi->tracks_num; i++) {
|
||||
if (cdi->tracks[i].attr == DATA_TRACK)
|
||||
return 1;
|
||||
}
|
||||
@@ -1052,13 +1068,11 @@ cdi_has_data_track(cd_img_t *cdi)
|
||||
int
|
||||
cdi_has_audio_track(cd_img_t *cdi)
|
||||
{
|
||||
int i;
|
||||
|
||||
if ((cdi == NULL) || (cdi->tracks == NULL))
|
||||
return 0;
|
||||
|
||||
/* Audio track has attribute 0x14. */
|
||||
for (i = 0; i < cdi->tracks_num; i++) {
|
||||
for (int i = 0; i < cdi->tracks_num; i++) {
|
||||
if (cdi->tracks[i].attr == AUDIO_TRACK)
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -301,7 +301,8 @@ viso_fill_fn_short(char *data, const viso_entry_t *entry, viso_entry_t **entries
|
||||
{
|
||||
/* Get name and extension length. */
|
||||
const char *ext_pos = strrchr(entry->basename, '.');
|
||||
int name_len, ext_len;
|
||||
int name_len;
|
||||
int ext_len;
|
||||
if (ext_pos) {
|
||||
name_len = ext_pos - entry->basename;
|
||||
ext_len = strlen(ext_pos);
|
||||
@@ -472,7 +473,9 @@ viso_fill_time(uint8_t *data, time_t time, int format, int longform)
|
||||
static int
|
||||
viso_fill_dir_record(uint8_t *data, viso_entry_t *entry, viso_t *viso, int type)
|
||||
{
|
||||
uint8_t *p = data, *q, *r;
|
||||
uint8_t *p = data;
|
||||
uint8_t *q;
|
||||
uint8_t *r;
|
||||
|
||||
*p++ = 0; /* size (filled in later) */
|
||||
*p++ = 0; /* extended attribute length */
|
||||
@@ -650,9 +653,9 @@ viso_read(void *p, uint8_t *buffer, uint64_t seek, size_t count)
|
||||
/* Handle reads in a sector by sector basis. */
|
||||
while (count > 0) {
|
||||
/* Determine the current sector, offset and remainder. */
|
||||
uint32_t sector = seek / viso->sector_size,
|
||||
sector_offset = seek % viso->sector_size,
|
||||
sector_remain = MIN(count, viso->sector_size - sector_offset);
|
||||
uint32_t sector = seek / viso->sector_size;
|
||||
uint32_t sector_offset = seek % viso->sector_size;
|
||||
uint32_t sector_remain = MIN(count, viso->sector_size - sector_offset);
|
||||
|
||||
/* Handle sector. */
|
||||
if (sector < viso->metadata_sectors) {
|
||||
@@ -736,7 +739,8 @@ viso_close(void *p)
|
||||
remove(nvr_path(viso->tf.fn));
|
||||
#endif
|
||||
|
||||
viso_entry_t *entry = viso->root_dir, *next_entry;
|
||||
viso_entry_t *entry = viso->root_dir;
|
||||
viso_entry_t *next_entry;
|
||||
while (entry) {
|
||||
if (entry->file)
|
||||
fclose(entry->file);
|
||||
@@ -760,7 +764,8 @@ viso_init(const char *dirname, int *error)
|
||||
|
||||
/* Initialize our data structure. */
|
||||
viso_t *viso = (viso_t *) calloc(1, sizeof(viso_t));
|
||||
uint8_t *data = NULL, *p;
|
||||
uint8_t *data = NULL;
|
||||
uint8_t *p;
|
||||
*error = 1;
|
||||
if (viso == NULL)
|
||||
goto end;
|
||||
@@ -785,9 +790,15 @@ viso_init(const char *dirname, int *error)
|
||||
|
||||
/* Set up directory traversal. */
|
||||
cdrom_image_viso_log("VISO: Traversing directories:\n");
|
||||
viso_entry_t *entry, *last_entry, *dir, *last_dir, *eltorito_dir = NULL, *eltorito_entry = NULL;
|
||||
viso_entry_t *entry;
|
||||
viso_entry_t *last_entry;
|
||||
viso_entry_t *dir;
|
||||
viso_entry_t *last_dir;
|
||||
viso_entry_t *eltorito_dir = NULL;
|
||||
viso_entry_t *eltorito_entry = NULL;
|
||||
struct dirent *readdir_entry;
|
||||
int len, eltorito_others_present = 0;
|
||||
int len;
|
||||
int eltorito_others_present = 0;
|
||||
size_t dir_path_len;
|
||||
uint64_t eltorito_offset = 0;
|
||||
uint8_t eltorito_type = 0;
|
||||
@@ -1445,8 +1456,8 @@ next_entry:
|
||||
/* Go through files, assigning sectors to them. */
|
||||
cdrom_image_viso_log("VISO: Assigning sectors to files:\n");
|
||||
size_t base_factor = viso->sector_size / orig_sector_size;
|
||||
viso_entry_t *prev_entry = viso->root_dir,
|
||||
**entry_map_p = viso->entry_map;
|
||||
viso_entry_t *prev_entry = viso->root_dir;
|
||||
viso_entry_t **entry_map_p = viso->entry_map;
|
||||
entry = prev_entry->next;
|
||||
while (entry) {
|
||||
/* Skip this entry if it corresponds to a directory. */
|
||||
@@ -1512,7 +1523,8 @@ next_entry:
|
||||
if (!viso->metadata)
|
||||
goto end;
|
||||
fseeko64(viso->tf.file, 0, SEEK_SET);
|
||||
uint64_t metadata_size = viso->metadata_sectors * viso->sector_size, metadata_remain = metadata_size;
|
||||
uint64_t metadata_size = viso->metadata_sectors * viso->sector_size;
|
||||
uint64_t metadata_remain = metadata_size;
|
||||
while (metadata_remain > 0)
|
||||
metadata_remain -= fread(viso->metadata + (metadata_size - metadata_remain), 1, MIN(metadata_remain, viso->sector_size), viso->tf.file);
|
||||
|
||||
|
||||
21
src/config.c
21
src/config.c
@@ -1196,7 +1196,6 @@ load_hard_disks(void)
|
||||
ini_section_delete_var(cat, temp);
|
||||
|
||||
memset(hdd[c].fn, 0x00, sizeof(hdd[c].fn));
|
||||
memset(hdd[c].prev_fn, 0x00, sizeof(hdd[c].prev_fn));
|
||||
sprintf(temp, "hdd_%02i_fn", c + 1);
|
||||
p = ini_section_get_string(cat, temp, "");
|
||||
|
||||
@@ -1229,6 +1228,13 @@ load_hard_disks(void)
|
||||
}
|
||||
path_normalize(hdd[c].fn);
|
||||
|
||||
sprintf(temp, "hdd_%02i_vhd_blocksize", c + 1);
|
||||
hdd[c].vhd_blocksize = ini_section_get_int(cat, temp, 0);
|
||||
|
||||
sprintf(temp, "hdd_%02i_vhd_parent", c + 1);
|
||||
p = ini_section_get_string(cat, temp, "");
|
||||
strncpy(hdd[c].vhd_parent, p, sizeof(hdd[c].vhd_parent) - 1);
|
||||
|
||||
/* If disk is empty or invalid, mark it for deletion. */
|
||||
if (!hdd_is_valid(c)) {
|
||||
sprintf(temp, "hdd_%02i_parameters", c + 1);
|
||||
@@ -2806,6 +2812,19 @@ save_hard_disks(void)
|
||||
} else
|
||||
ini_section_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "hdd_%02i_vhd_blocksize", c + 1);
|
||||
if (hdd_is_valid(c) && (hdd[c].vhd_blocksize > 0))
|
||||
ini_section_set_int(cat, temp, hdd[c].vhd_blocksize);
|
||||
else
|
||||
ini_section_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "hdd_%02i_vhd_parent", c + 1);
|
||||
if (hdd_is_valid(c) && hdd[c].vhd_parent[0]) {
|
||||
path_normalize(hdd[c].vhd_parent);
|
||||
ini_section_set_string(cat, temp, hdd[c].vhd_parent);
|
||||
} else
|
||||
ini_section_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "hdd_%02i_speed", c + 1);
|
||||
if (!hdd_is_valid(c) || (hdd[c].bus != HDD_BUS_IDE && hdd[c].bus != HDD_BUS_ESDI))
|
||||
ini_section_delete_var(cat, temp);
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
* each 8x256 lookup table is 16k. */
|
||||
#ifndef CRC64SPEED_DUAL
|
||||
static uint64_t crc64_table[8][256] = {{0}};
|
||||
static void *crc64_table_little = NULL, *crc64_table_big = NULL;
|
||||
static void *crc64_table_little = NULL;
|
||||
static void *crc64_table_big = NULL;
|
||||
static const bool dual = false;
|
||||
#else
|
||||
static uint64_t crc64_table_little[8][256] = {{0}};
|
||||
|
||||
@@ -401,6 +401,14 @@ mm67_read(uint16_t port, void *priv)
|
||||
picintc(1 << dev->irq);
|
||||
break;
|
||||
|
||||
case MM67_AL_MSEC:
|
||||
ret = dev->nvr.regs[reg] & 0xf0;
|
||||
break;
|
||||
|
||||
case MM67_AL_DOW:
|
||||
ret = dev->nvr.regs[reg] & 0x0f;
|
||||
break;
|
||||
|
||||
default:
|
||||
ret = dev->nvr.regs[reg];
|
||||
break;
|
||||
@@ -477,6 +485,14 @@ mm67_write(uint16_t port, uint8_t val, void *priv)
|
||||
isartc_log("RTC: write test=%02x\n", val);
|
||||
break;
|
||||
|
||||
case MM67_AL_MSEC:
|
||||
dev->nvr.regs[reg] = val & 0xf0;
|
||||
break;
|
||||
|
||||
case MM67_AL_DOW:
|
||||
dev->nvr.regs[reg] = val & 0x0f;
|
||||
break;
|
||||
|
||||
default:
|
||||
dev->nvr.regs[reg] = val;
|
||||
break;
|
||||
|
||||
@@ -174,12 +174,12 @@ hdc_has_config(int hdc)
|
||||
const device_t *dev = hdc_get_device(hdc);
|
||||
|
||||
if (dev == NULL)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if (!device_has_config(dev))
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -172,16 +172,19 @@ get_sector(esdi_t *esdi, off64_t *addr)
|
||||
drive_t *drive = &esdi->drives[esdi->drive_sel];
|
||||
int heads = drive->cfg_hpc;
|
||||
int sectors = drive->cfg_spt;
|
||||
int c, h, s, sector;
|
||||
int c;
|
||||
int h;
|
||||
int s;
|
||||
int sector;
|
||||
|
||||
if (esdi->head > heads) {
|
||||
esdi_at_log("esdi_get_sector: past end of configured heads\n");
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (esdi->sector >= sectors + 1) {
|
||||
esdi_at_log("esdi_get_sector: past end of configured sectors\n");
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
sector = esdi->sector ? esdi->sector : 1;
|
||||
@@ -203,7 +206,7 @@ get_sector(esdi_t *esdi, off64_t *addr)
|
||||
*addr = ((((off64_t) c * drive->real_hpc) + h) * drive->real_spt) + s;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Move to the next sector using CHS addressing. */
|
||||
@@ -253,7 +256,8 @@ static void
|
||||
esdi_write(uint16_t port, uint8_t val, void *priv)
|
||||
{
|
||||
esdi_t *esdi = (esdi_t *) priv;
|
||||
double seek_time, xfer_time;
|
||||
double seek_time;
|
||||
double xfer_time;
|
||||
off64_t addr;
|
||||
|
||||
esdi_at_log("WD1007 write(%04x, %02x)\n", port, val);
|
||||
@@ -452,7 +456,7 @@ esdi_readw(uint16_t port, void *priv)
|
||||
}
|
||||
}
|
||||
|
||||
return (temp);
|
||||
return temp;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -498,7 +502,7 @@ esdi_read(uint16_t port, void *priv)
|
||||
|
||||
esdi_at_log("WD1007 read(%04x) = %02x\n", port, temp);
|
||||
|
||||
return (temp);
|
||||
return temp;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -820,13 +824,13 @@ esdi_rom_write(uint32_t addr, uint8_t val, void *p)
|
||||
static void *
|
||||
wd1007vse1_init(const device_t *info)
|
||||
{
|
||||
int c, d;
|
||||
int c;
|
||||
|
||||
esdi_t *esdi = malloc(sizeof(esdi_t));
|
||||
memset(esdi, 0x00, sizeof(esdi_t));
|
||||
|
||||
c = 0;
|
||||
for (d = 0; d < HDD_NUM; d++) {
|
||||
for (uint8_t d = 0; d < HDD_NUM; d++) {
|
||||
if ((hdd[d].bus == HDD_BUS_ESDI) && (hdd[d].esdi_channel < ESDI_NUM)) {
|
||||
loadhd(esdi, hdd[d].esdi_channel, d, hdd[d].fn);
|
||||
|
||||
@@ -858,7 +862,7 @@ wd1007vse1_init(const device_t *info)
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
|
||||
return (esdi);
|
||||
return esdi;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -866,9 +870,8 @@ wd1007vse1_close(void *priv)
|
||||
{
|
||||
esdi_t *esdi = (esdi_t *) priv;
|
||||
drive_t *drive;
|
||||
int d;
|
||||
|
||||
for (d = 0; d < 2; d++) {
|
||||
for (uint8_t d = 0; d < 2; d++) {
|
||||
drive = &esdi->drives[d];
|
||||
|
||||
hdd_image_close(drive->hdd_num);
|
||||
|
||||
@@ -868,7 +868,7 @@ esdi_read(uint16_t port, void *priv)
|
||||
break;
|
||||
}
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -987,7 +987,7 @@ esdi_readw(uint16_t port, void *priv)
|
||||
switch (port & 7) {
|
||||
case 0: /*Status Interface Register*/
|
||||
if (dev->status_pos >= dev->status_len)
|
||||
return (0);
|
||||
return 0;
|
||||
ret = dev->status_data[dev->status_pos++];
|
||||
if (dev->status_pos >= dev->status_len) {
|
||||
dev->status &= ~STATUS_STATUS_OUT_FULL;
|
||||
@@ -999,7 +999,7 @@ esdi_readw(uint16_t port, void *priv)
|
||||
fatal("esdi_readw port=%04x\n", port);
|
||||
}
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1117,7 +1117,8 @@ esdi_init(const device_t *info)
|
||||
{
|
||||
drive_t *drive;
|
||||
esdi_t *dev;
|
||||
int c, i;
|
||||
uint8_t c;
|
||||
uint8_t i;
|
||||
|
||||
dev = malloc(sizeof(esdi_t));
|
||||
if (dev == NULL)
|
||||
@@ -1178,7 +1179,7 @@ esdi_init(const device_t *info)
|
||||
/* Set the reply timer. */
|
||||
timer_add(&dev->timer, esdi_callback, dev, 0);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1186,11 +1187,10 @@ esdi_close(void *priv)
|
||||
{
|
||||
esdi_t *dev = (esdi_t *) priv;
|
||||
drive_t *drive;
|
||||
int d;
|
||||
|
||||
dev->drives[0].present = dev->drives[1].present = 0;
|
||||
|
||||
for (d = 0; d < 2; d++) {
|
||||
for (uint8_t d = 0; d < 2; d++) {
|
||||
drive = &dev->drives[d];
|
||||
|
||||
hdd_image_close(drive->hdd_num);
|
||||
|
||||
@@ -176,7 +176,8 @@ static uint8_t ide_qua_pnp_rom[] = {
|
||||
};
|
||||
|
||||
ide_t *ide_drives[IDE_NUM];
|
||||
int ide_ter_enabled = 0, ide_qua_enabled = 0;
|
||||
int ide_ter_enabled = 0;
|
||||
int ide_qua_enabled = 0;
|
||||
|
||||
static void ide_atapi_callback(ide_t *ide);
|
||||
static void ide_callback(void *priv);
|
||||
@@ -389,9 +390,9 @@ ide_irq_update(ide_t *ide)
|
||||
void
|
||||
ide_padstr(char *str, const char *src, int len)
|
||||
{
|
||||
int i, v;
|
||||
int v;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
for (int i = 0; i < len; i++) {
|
||||
if (*src != '\0')
|
||||
v = *src++;
|
||||
else
|
||||
@@ -412,9 +413,7 @@ ide_padstr(char *str, const char *src, int len)
|
||||
void
|
||||
ide_padstr8(uint8_t *buf, int buf_size, const char *src)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < buf_size; i++) {
|
||||
for (int i = 0; i < buf_size; i++) {
|
||||
if (*src != '\0')
|
||||
buf[i] = *src++;
|
||||
else
|
||||
@@ -488,7 +487,9 @@ ide_hd_identify(ide_t *ide)
|
||||
{
|
||||
char device_identify[9] = { '8', '6', 'B', '_', 'H', 'D', '0', '0', 0 };
|
||||
|
||||
uint32_t d_hpc, d_spt, d_tracks;
|
||||
uint32_t d_hpc;
|
||||
uint32_t d_spt;
|
||||
uint32_t d_tracks;
|
||||
uint64_t full_size = (((uint64_t) hdd[ide->hdd_num].tracks) * hdd[ide->hdd_num].hpc * hdd[ide->hdd_num].spt);
|
||||
|
||||
device_identify[6] = (ide->hdd_num / 10) + 0x30;
|
||||
@@ -577,7 +578,12 @@ ide_hd_identify(ide_t *ide)
|
||||
static void
|
||||
ide_identify(ide_t *ide)
|
||||
{
|
||||
int d, i, max_pio, max_sdma, max_mdma, max_udma;
|
||||
int d;
|
||||
int i;
|
||||
int max_pio;
|
||||
int max_sdma;
|
||||
int max_mdma;
|
||||
int max_udma;
|
||||
ide_t *ide_other = ide_drives[ide->channel ^ 1];
|
||||
|
||||
ide_log("IDE IDENTIFY or IDENTIFY PACKET DEVICE on board %i (channel %i)\n", ide->board, ide->channel);
|
||||
@@ -674,7 +680,8 @@ ide_identify(ide_t *ide)
|
||||
static off64_t
|
||||
ide_get_sector(ide_t *ide)
|
||||
{
|
||||
uint32_t heads, sectors;
|
||||
uint32_t heads;
|
||||
uint32_t sectors;
|
||||
|
||||
if (ide->lba)
|
||||
return (off64_t) ide->lba_addr;
|
||||
@@ -749,8 +756,11 @@ ide_set_signature(ide_t *ide)
|
||||
static int
|
||||
ide_set_features(ide_t *ide)
|
||||
{
|
||||
uint8_t features, features_data;
|
||||
int mode, submode, max;
|
||||
uint8_t features;
|
||||
uint8_t features_data;
|
||||
int mode;
|
||||
int submode;
|
||||
int max;
|
||||
|
||||
features = ide->cylprecomp;
|
||||
features_data = ide->secount;
|
||||
@@ -836,7 +846,8 @@ ide_set_features(ide_t *ide)
|
||||
void
|
||||
ide_set_sector(ide_t *ide, int64_t sector_num)
|
||||
{
|
||||
unsigned int cyl, r;
|
||||
unsigned int cyl;
|
||||
unsigned int r;
|
||||
if (ide->lba) {
|
||||
ide->head = (sector_num >> 24);
|
||||
ide->cylinder = (sector_num >> 8);
|
||||
@@ -942,7 +953,8 @@ ide_atapi_command_bus(ide_t *ide)
|
||||
static void
|
||||
ide_atapi_callback(ide_t *ide)
|
||||
{
|
||||
int out, ret = 0;
|
||||
int out;
|
||||
int ret = 0;
|
||||
|
||||
switch (ide->sc->packet_status) {
|
||||
case PHASE_IDLE:
|
||||
@@ -1326,7 +1338,8 @@ ide_write_devctl(uint16_t addr, uint8_t val, void *priv)
|
||||
{
|
||||
ide_board_t *dev = (ide_board_t *) priv;
|
||||
|
||||
ide_t *ide, *ide_other;
|
||||
ide_t *ide;
|
||||
ide_t *ide_other;
|
||||
int ch;
|
||||
uint8_t old;
|
||||
|
||||
@@ -1428,7 +1441,8 @@ ide_writeb(uint16_t addr, uint8_t val, void *priv)
|
||||
{
|
||||
ide_board_t *dev = (ide_board_t *) priv;
|
||||
|
||||
ide_t *ide, *ide_other;
|
||||
ide_t *ide;
|
||||
ide_t *ide_other;
|
||||
int ch;
|
||||
|
||||
ch = dev->cur_dev;
|
||||
@@ -1455,9 +1469,15 @@ ide_writeb(uint16_t addr, uint8_t val, void *priv)
|
||||
}
|
||||
ide->cylprecomp = val;
|
||||
|
||||
/* The ATA-3 specification says this register is the parameter for the
|
||||
command and is unclear as to whether or not it's written to both
|
||||
devices at once. Writing it to both devices at once breaks CD boot
|
||||
on the AMI Apollo. */
|
||||
#ifdef WRITE_PARAM_TO_BOTH_DEVICES
|
||||
if (ide_other->type == IDE_ATAPI)
|
||||
ide_other->sc->features = val;
|
||||
ide_other->cylprecomp = val;
|
||||
#endif
|
||||
return;
|
||||
|
||||
case 0x2: /* Sector count */
|
||||
@@ -1907,7 +1927,8 @@ ide_readb(uint16_t addr, void *priv)
|
||||
{
|
||||
ide_board_t *dev = (ide_board_t *) priv;
|
||||
|
||||
int ch, absent = 0;
|
||||
int ch;
|
||||
int absent = 0;
|
||||
ide_t *ide;
|
||||
|
||||
ch = dev->cur_dev;
|
||||
@@ -2164,7 +2185,8 @@ atapi_error_no_ready(ide_t *ide)
|
||||
static void
|
||||
ide_callback(void *priv)
|
||||
{
|
||||
int snum, ret = 0;
|
||||
int snum;
|
||||
int ret = 0;
|
||||
|
||||
ide_t *ide = (ide_t *) priv;
|
||||
|
||||
@@ -2574,8 +2596,10 @@ id_not_found:
|
||||
uint8_t
|
||||
ide_read_ali_75(void)
|
||||
{
|
||||
ide_t *ide0, *ide1;
|
||||
int ch0, ch1;
|
||||
ide_t *ide0;
|
||||
ide_t *ide1;
|
||||
int ch0;
|
||||
int ch1;
|
||||
uint8_t ret = 0x00;
|
||||
|
||||
ch0 = ide_boards[0]->cur_dev;
|
||||
@@ -2598,8 +2622,10 @@ ide_read_ali_75(void)
|
||||
uint8_t
|
||||
ide_read_ali_76(void)
|
||||
{
|
||||
ide_t *ide0, *ide1;
|
||||
int ch0, ch1;
|
||||
ide_t *ide0;
|
||||
ide_t *ide1;
|
||||
int ch0;
|
||||
int ch1;
|
||||
uint8_t ret = 0x00;
|
||||
|
||||
ch0 = ide_boards[0]->cur_dev;
|
||||
@@ -2737,7 +2763,7 @@ static void
|
||||
ide_board_close(int board)
|
||||
{
|
||||
ide_t *dev;
|
||||
int c, d;
|
||||
int c;
|
||||
|
||||
ide_log("ide_board_close(%i)\n", board);
|
||||
|
||||
@@ -2751,7 +2777,7 @@ ide_board_close(int board)
|
||||
ide_clear_bus_master(board);
|
||||
|
||||
/* Close hard disk image files (if previously open) */
|
||||
for (d = 0; d < 2; d++) {
|
||||
for (uint8_t d = 0; d < 2; d++) {
|
||||
c = (board << 1) + d;
|
||||
|
||||
ide_boards[board]->ide[d] = NULL;
|
||||
@@ -2791,9 +2817,13 @@ static void
|
||||
ide_board_setup(int board)
|
||||
{
|
||||
ide_t *dev;
|
||||
int c, d;
|
||||
int ch, is_ide, valid_ch;
|
||||
int min_ch, max_ch;
|
||||
int c;
|
||||
int d;
|
||||
int ch;
|
||||
int is_ide;
|
||||
int valid_ch;
|
||||
int min_ch;
|
||||
int max_ch;
|
||||
|
||||
min_ch = (board << 1);
|
||||
max_ch = min_ch + 1;
|
||||
@@ -3009,7 +3039,7 @@ ide_init(const device_t *info)
|
||||
break;
|
||||
}
|
||||
|
||||
return (ide_drives);
|
||||
return ide_drives;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3041,7 +3071,8 @@ ide_drive_reset(int d)
|
||||
static void
|
||||
ide_board_reset(int board)
|
||||
{
|
||||
int d, min, max;
|
||||
int min;
|
||||
int max;
|
||||
|
||||
ide_log("Resetting IDE board %i...\n", board);
|
||||
|
||||
@@ -3050,7 +3081,7 @@ ide_board_reset(int board)
|
||||
min = (board << 1);
|
||||
max = min + 2;
|
||||
|
||||
for (d = min; d < max; d++)
|
||||
for (int d = min; d < max; d++)
|
||||
ide_drive_reset(d);
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,8 @@ cmd640_set_irq(int channel, void *priv)
|
||||
static void
|
||||
cmd640_ide_handlers(cmd640_t *dev)
|
||||
{
|
||||
uint16_t main, side;
|
||||
uint16_t main;
|
||||
uint16_t side;
|
||||
|
||||
ide_pri_disable();
|
||||
|
||||
|
||||
@@ -96,7 +96,8 @@ cmd646_bus_master_dma(int channel, uint8_t *data, int transfer_length, int out,
|
||||
static void
|
||||
cmd646_ide_handlers(cmd646_t *dev)
|
||||
{
|
||||
uint16_t main, side;
|
||||
uint16_t main;
|
||||
uint16_t side;
|
||||
int irq_mode[2] = { 0, 0 };
|
||||
|
||||
ide_pri_disable();
|
||||
|
||||
@@ -302,7 +302,8 @@ sff_bus_master_dma(int channel, uint8_t *data, int transfer_length, int out, voi
|
||||
char *sop;
|
||||
#endif
|
||||
|
||||
int force_end = 0, buffer_pos = 0;
|
||||
int force_end = 0;
|
||||
int buffer_pos = 0;
|
||||
|
||||
#ifdef ENABLE_SFF_LOG
|
||||
sop = out ? "Read" : "Writ";
|
||||
|
||||
@@ -177,35 +177,35 @@ get_sector(mfm_t *mfm, off64_t *addr)
|
||||
diagnostics v2.07 will error with: ERROR 152 - SYSTEM BOARD. */
|
||||
if (drive->curcyl != mfm->cylinder) {
|
||||
st506_at_log("WD1003(%d) sector: wrong cylinder\n");
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mfm->head > drive->cfg_hpc) {
|
||||
st506_at_log("WD1003(%d) get_sector: past end of configured heads\n",
|
||||
mfm->drvsel);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mfm->sector >= drive->cfg_spt + 1) {
|
||||
st506_at_log("WD1003(%d) get_sector: past end of configured sectors\n",
|
||||
mfm->drvsel);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* We should check this in the SET_DRIVE_PARAMETERS command! --FvK */
|
||||
if (mfm->head > drive->hpc) {
|
||||
st506_at_log("WD1003(%d) get_sector: past end of heads\n", mfm->drvsel);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mfm->sector >= drive->spt + 1) {
|
||||
st506_at_log("WD1003(%d) get_sector: past end of sectors\n", mfm->drvsel);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
*addr = ((((off64_t) mfm->cylinder * drive->cfg_hpc) + mfm->head) * drive->cfg_spt) + (mfm->sector - 1);
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Move to the next sector using CHS addressing. */
|
||||
@@ -468,7 +468,7 @@ mfm_readw(uint16_t port, void *priv)
|
||||
}
|
||||
}
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -517,7 +517,7 @@ mfm_read(uint16_t port, void *priv)
|
||||
|
||||
st506_at_log("WD1003 read(%04x) = %02x\n", port, ret);
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -689,14 +689,14 @@ static void *
|
||||
mfm_init(const device_t *info)
|
||||
{
|
||||
mfm_t *mfm;
|
||||
int c, d;
|
||||
int c;
|
||||
|
||||
st506_at_log("WD1003: ISA MFM/RLL Fixed Disk Adapter initializing ...\n");
|
||||
mfm = malloc(sizeof(mfm_t));
|
||||
memset(mfm, 0x00, sizeof(mfm_t));
|
||||
|
||||
c = 0;
|
||||
for (d = 0; d < HDD_NUM; d++) {
|
||||
for (uint8_t d = 0; d < HDD_NUM; d++) {
|
||||
if ((hdd[d].bus == HDD_BUS_MFM) && (hdd[d].mfm_channel < MFM_NUM)) {
|
||||
loadhd(mfm, hdd[d].mfm_channel, d, hdd[d].fn);
|
||||
|
||||
@@ -722,16 +722,15 @@ mfm_init(const device_t *info)
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
|
||||
return (mfm);
|
||||
return mfm;
|
||||
}
|
||||
|
||||
static void
|
||||
mfm_close(void *priv)
|
||||
{
|
||||
mfm_t *mfm = (mfm_t *) priv;
|
||||
int d;
|
||||
|
||||
for (d = 0; d < 2; d++) {
|
||||
for (uint8_t d = 0; d < 2; d++) {
|
||||
drive_t *drive = &mfm->drives[d];
|
||||
|
||||
hdd_image_close(drive->hdd_num);
|
||||
|
||||
@@ -369,7 +369,7 @@ get_sector(hdc_t *dev, drive_t *drive, off64_t *addr)
|
||||
if (!drive->present) {
|
||||
/* No need to log this. */
|
||||
dev->error = dev->nr_err;
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
@@ -387,19 +387,19 @@ get_sector(hdc_t *dev, drive_t *drive, off64_t *addr)
|
||||
st506_xt_log("ST506: get_sector: past end of configured heads\n");
|
||||
#endif
|
||||
dev->error = ERR_ILLEGAL_ADDR;
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
if (dev->sector >= drive->cfg_spt) {
|
||||
#ifdef ENABLE_ST506_XT_LOG
|
||||
st506_xt_log("ST506: get_sector: past end of configured sectors\n");
|
||||
#endif
|
||||
dev->error = ERR_ILLEGAL_ADDR;
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
*addr = ((((off64_t) dev->cylinder * drive->cfg_hpc) + dev->head) * drive->cfg_spt) + dev->sector;
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -446,12 +446,12 @@ get_chs(hdc_t *dev, drive_t *drive)
|
||||
* result in an ERR_ILLEGAL_ADDR. --FvK
|
||||
*/
|
||||
drive->cylinder = drive->cfg_cyl - 1;
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
drive->cylinder = dev->cylinder;
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1217,7 +1217,7 @@ st506_read(uint16_t port, void *priv)
|
||||
}
|
||||
st506_xt_log("ST506: read(%04x) = %02x\n", port, ret);
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Write to one of the registers. */
|
||||
@@ -1287,7 +1287,8 @@ static void
|
||||
mem_write(uint32_t addr, uint8_t val, void *priv)
|
||||
{
|
||||
hdc_t *dev = (hdc_t *) priv;
|
||||
uint32_t ptr, mask = 0;
|
||||
uint32_t ptr;
|
||||
uint32_t mask = 0;
|
||||
|
||||
/* Ignore accesses to anything below the configured address,
|
||||
needed because of the emulator's 4k mapping granularity. */
|
||||
@@ -1317,7 +1318,8 @@ static uint8_t
|
||||
mem_read(uint32_t addr, void *priv)
|
||||
{
|
||||
hdc_t *dev = (hdc_t *) priv;
|
||||
uint32_t ptr, mask = 0;
|
||||
uint32_t ptr;
|
||||
uint32_t mask = 0;
|
||||
uint8_t ret = 0xff;
|
||||
|
||||
/* Ignore accesses to anything below the configured address,
|
||||
@@ -1373,7 +1375,7 @@ mem_read(uint32_t addr, void *priv)
|
||||
else
|
||||
ret = dev->bios_rom.rom[addr];
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1467,12 +1469,11 @@ static void
|
||||
set_switches(hdc_t *dev, hd_type_t *hdt, int num)
|
||||
{
|
||||
drive_t *drive;
|
||||
int c, d;
|
||||
int e;
|
||||
|
||||
dev->switches = 0x00;
|
||||
|
||||
for (d = 0; d < MFM_NUM; d++) {
|
||||
for (uint8_t d = 0; d < MFM_NUM; d++) {
|
||||
drive = &dev->drives[d];
|
||||
|
||||
if (!drive->present) {
|
||||
@@ -1481,7 +1482,7 @@ set_switches(hdc_t *dev, hd_type_t *hdt, int num)
|
||||
continue;
|
||||
}
|
||||
|
||||
for (c = 0; c < num; c++) {
|
||||
for (int c = 0; c < num; c++) {
|
||||
/* Does the Xebec also support more than 4 types? */
|
||||
if ((drive->spt == hdt[c].spt) && (drive->hpc == hdt[c].hpc) && (drive->tracks == hdt[c].tracks)) {
|
||||
/* Olivetti M24/M240: Move the upper 2 bites up by 2 bits, as the
|
||||
@@ -1511,7 +1512,8 @@ st506_init(const device_t *info)
|
||||
{
|
||||
char *fn = NULL;
|
||||
hdc_t *dev;
|
||||
int i, c;
|
||||
int i;
|
||||
int c;
|
||||
|
||||
dev = (hdc_t *) malloc(sizeof(hdc_t));
|
||||
memset(dev, 0x00, sizeof(hdc_t));
|
||||
@@ -1703,7 +1705,7 @@ st506_init(const device_t *info)
|
||||
dev->drives[c].cfg_spt = dev->drives[c].spt;
|
||||
}
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1711,9 +1713,8 @@ st506_close(void *priv)
|
||||
{
|
||||
hdc_t *dev = (hdc_t *) priv;
|
||||
drive_t *drive;
|
||||
int d;
|
||||
|
||||
for (d = 0; d < MFM_NUM; d++) {
|
||||
for (uint8_t d = 0; d < MFM_NUM; d++) {
|
||||
drive = &dev->drives[d];
|
||||
|
||||
hdd_image_close(drive->hdd_num);
|
||||
|
||||
@@ -308,25 +308,25 @@ get_sector(hdc_t *dev, drive_t *drive, off64_t *addr)
|
||||
xta_log("%s: get_sector: wrong cylinder %d/%d\n",
|
||||
dev->name, drive->cur_cyl, dev->track);
|
||||
dev->sense = ERR_ILLADDR;
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (dev->head >= drive->hpc) {
|
||||
xta_log("%s: get_sector: past end of heads\n", dev->name);
|
||||
dev->sense = ERR_ILLADDR;
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (dev->sector >= drive->spt) {
|
||||
xta_log("%s: get_sector: past end of sectors\n", dev->name);
|
||||
dev->sense = ERR_ILLADDR;
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Calculate logical address (block number) of desired sector. */
|
||||
*addr = ((((off64_t) dev->track * drive->hpc) + dev->head) * drive->spt) + dev->sector;
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -375,10 +375,11 @@ do_seek(hdc_t *dev, drive_t *drive, int cyl)
|
||||
static void
|
||||
do_format(hdc_t *dev, drive_t *drive, dcb_t *dcb)
|
||||
{
|
||||
int start_cyl, end_cyl;
|
||||
int start_hd, end_hd;
|
||||
int start_cyl;
|
||||
int end_cyl;
|
||||
int start_hd;
|
||||
int end_hd;
|
||||
off64_t addr;
|
||||
int h, s;
|
||||
|
||||
/* Get the parameters from the DCB. */
|
||||
if (dcb->cmd == CMD_FORMAT_DRIVE) {
|
||||
@@ -413,8 +414,8 @@ do_fmt:
|
||||
* data to fill the sectors with, so we will use
|
||||
* that at least.
|
||||
*/
|
||||
for (h = start_hd; h < end_hd; h++) {
|
||||
for (s = 0; s < drive->spt; s++) {
|
||||
for (int h = start_hd; h < end_hd; h++) {
|
||||
for (uint8_t s = 0; s < drive->spt; s++) {
|
||||
/* Set the sector we need to write. */
|
||||
dev->head = h;
|
||||
dev->sector = s;
|
||||
@@ -901,7 +902,7 @@ hdc_read(uint16_t port, void *priv)
|
||||
break;
|
||||
}
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Write to one of the controller registers. */
|
||||
@@ -970,7 +971,7 @@ xta_init(const device_t *info)
|
||||
char *bios_rev = NULL;
|
||||
char *fn = NULL;
|
||||
hdc_t *dev;
|
||||
int c, i;
|
||||
int c;
|
||||
int max = XTA_NUM;
|
||||
|
||||
/* Allocate and initialize device block. */
|
||||
@@ -1007,7 +1008,7 @@ xta_init(const device_t *info)
|
||||
|
||||
/* Load any disks for this device class. */
|
||||
c = 0;
|
||||
for (i = 0; i < HDD_NUM; i++) {
|
||||
for (uint8_t i = 0; i < HDD_NUM; i++) {
|
||||
if ((hdd[i].bus == HDD_BUS_XTA) && (hdd[i].xta_channel < max)) {
|
||||
drive = &dev->drives[hdd[i].xta_channel];
|
||||
|
||||
@@ -1051,7 +1052,7 @@ xta_init(const device_t *info)
|
||||
/* Create a timer for command delays. */
|
||||
timer_add(&dev->timer, hdc_callback, dev, 0);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1059,14 +1060,13 @@ xta_close(void *priv)
|
||||
{
|
||||
hdc_t *dev = (hdc_t *) priv;
|
||||
drive_t *drive;
|
||||
int d;
|
||||
|
||||
/* Remove the I/O handler. */
|
||||
io_removehandler(dev->base, 4,
|
||||
hdc_read, NULL, NULL, hdc_write, NULL, NULL, dev);
|
||||
|
||||
/* Close all disks and their images. */
|
||||
for (d = 0; d < XTA_NUM; d++) {
|
||||
for (uint8_t d = 0; d < XTA_NUM; d++) {
|
||||
drive = &dev->drives[d];
|
||||
|
||||
hdd_image_close(drive->hdd_num);
|
||||
|
||||
@@ -145,7 +145,7 @@ xtide_init(const device_t *info)
|
||||
xtide_read, NULL, NULL,
|
||||
xtide_write, NULL, NULL, xtide);
|
||||
|
||||
return (xtide);
|
||||
return xtide;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -177,7 +177,7 @@ xtide_at_init(const device_t *info)
|
||||
|
||||
device_add(&ide_isa_2ch_device);
|
||||
|
||||
return (xtide);
|
||||
return xtide;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -208,7 +208,7 @@ xtide_acculogic_init(const device_t *info)
|
||||
xtide_read, NULL, NULL,
|
||||
xtide_write, NULL, NULL, xtide);
|
||||
|
||||
return (xtide);
|
||||
return xtide;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -239,7 +239,7 @@ xtide_at_ps2_init(const device_t *info)
|
||||
|
||||
device_add(&ide_isa_2ch_device);
|
||||
|
||||
return (xtide);
|
||||
return xtide;
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
@@ -41,23 +41,23 @@ hdd_init(void)
|
||||
/* Clear all global data. */
|
||||
memset(hdd, 0x00, sizeof(hdd));
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
hdd_string_to_bus(char *str, int cdrom)
|
||||
{
|
||||
if (!strcmp(str, "none"))
|
||||
return (HDD_BUS_DISABLED);
|
||||
return HDD_BUS_DISABLED;
|
||||
|
||||
if (!strcmp(str, "mfm") || !strcmp(str, "rll")) {
|
||||
if (cdrom) {
|
||||
no_cdrom:
|
||||
ui_msgbox_header(MBX_ERROR, (wchar_t *) IDS_2131, (wchar_t *) IDS_4099);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (HDD_BUS_MFM);
|
||||
return HDD_BUS_MFM;
|
||||
}
|
||||
|
||||
/* FIXME: delete 'rll' in a year or so.. --FvK */
|
||||
@@ -65,40 +65,40 @@ no_cdrom:
|
||||
if (cdrom)
|
||||
goto no_cdrom;
|
||||
|
||||
return (HDD_BUS_ESDI);
|
||||
return HDD_BUS_ESDI;
|
||||
}
|
||||
|
||||
if (!strcmp(str, "ide_pio_only"))
|
||||
return (HDD_BUS_IDE);
|
||||
return HDD_BUS_IDE;
|
||||
|
||||
if (!strcmp(str, "ide"))
|
||||
return (HDD_BUS_IDE);
|
||||
return HDD_BUS_IDE;
|
||||
|
||||
if (!strcmp(str, "atapi_pio_only"))
|
||||
return (HDD_BUS_ATAPI);
|
||||
return HDD_BUS_ATAPI;
|
||||
|
||||
if (!strcmp(str, "atapi"))
|
||||
return (HDD_BUS_ATAPI);
|
||||
return HDD_BUS_ATAPI;
|
||||
|
||||
if (!strcmp(str, "eide"))
|
||||
return (HDD_BUS_IDE);
|
||||
return HDD_BUS_IDE;
|
||||
|
||||
if (!strcmp(str, "xta"))
|
||||
return (HDD_BUS_XTA);
|
||||
return HDD_BUS_XTA;
|
||||
|
||||
if (!strcmp(str, "atide"))
|
||||
return (HDD_BUS_IDE);
|
||||
return HDD_BUS_IDE;
|
||||
|
||||
if (!strcmp(str, "ide_pio_and_dma"))
|
||||
return (HDD_BUS_IDE);
|
||||
return HDD_BUS_IDE;
|
||||
|
||||
if (!strcmp(str, "atapi_pio_and_dma"))
|
||||
return (HDD_BUS_ATAPI);
|
||||
return HDD_BUS_ATAPI;
|
||||
|
||||
if (!strcmp(str, "scsi"))
|
||||
return (HDD_BUS_SCSI);
|
||||
return HDD_BUS_SCSI;
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *
|
||||
@@ -136,22 +136,22 @@ hdd_bus_to_string(int bus, int cdrom)
|
||||
break;
|
||||
}
|
||||
|
||||
return (s);
|
||||
return s;
|
||||
}
|
||||
|
||||
int
|
||||
hdd_is_valid(int c)
|
||||
{
|
||||
if (hdd[c].bus == HDD_BUS_DISABLED)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if (strlen(hdd[c].fn) == 0)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if ((hdd[c].tracks == 0) || (hdd[c].hpc == 0) || (hdd[c].spt == 0))
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
double
|
||||
@@ -204,8 +204,9 @@ static void
|
||||
hdd_readahead_update(hard_disk_t *hdd)
|
||||
{
|
||||
uint64_t elapsed_cycles;
|
||||
double elapsed_us, seek_time;
|
||||
uint32_t max_read_ahead, i;
|
||||
double elapsed_us;
|
||||
double seek_time;
|
||||
uint32_t max_read_ahead;
|
||||
uint32_t space_needed;
|
||||
|
||||
hdd_cache_t *cache = &hdd->cache;
|
||||
@@ -219,7 +220,7 @@ hdd_readahead_update(hard_disk_t *hdd)
|
||||
|
||||
seek_time = 0.0;
|
||||
|
||||
for (i = 0; i < max_read_ahead; i++) {
|
||||
for (uint32_t i = 0; i < max_read_ahead; i++) {
|
||||
seek_time += hdd_seek_get_time(hdd, segment->ra_addr, HDD_OP_READ, 1, elapsed_us - seek_time);
|
||||
if (seek_time > elapsed_us)
|
||||
break;
|
||||
@@ -252,7 +253,8 @@ static void
|
||||
hdd_writecache_update(hard_disk_t *hdd)
|
||||
{
|
||||
uint64_t elapsed_cycles;
|
||||
double elapsed_us, seek_time;
|
||||
double elapsed_us;
|
||||
double seek_time;
|
||||
|
||||
if (hdd->cache.write_pending) {
|
||||
elapsed_cycles = tsc - hdd->cache.write_start_time;
|
||||
@@ -383,13 +385,12 @@ static void
|
||||
hdd_cache_init(hard_disk_t *hdd)
|
||||
{
|
||||
hdd_cache_t *cache = &hdd->cache;
|
||||
uint32_t i;
|
||||
|
||||
cache->ra_segment = 0;
|
||||
cache->ra_ongoing = 0;
|
||||
cache->ra_start_time = 0;
|
||||
|
||||
for (i = 0; i < cache->num_segments; i++) {
|
||||
for (uint32_t i = 0; i < cache->num_segments; i++) {
|
||||
cache->segments[i].valid = 0;
|
||||
cache->segments[i].lru = 0;
|
||||
cache->segments[i].id = i;
|
||||
@@ -401,12 +402,13 @@ hdd_cache_init(hard_disk_t *hdd)
|
||||
static void
|
||||
hdd_zones_init(hard_disk_t *hdd)
|
||||
{
|
||||
uint32_t lba = 0, track = 0;
|
||||
uint32_t i, tracks;
|
||||
uint32_t lba = 0;
|
||||
uint32_t track = 0;
|
||||
uint32_t tracks;
|
||||
double revolution_usec = 60.0 / (double) hdd->rpm * 1000000.0;
|
||||
hdd_zone_t *zone;
|
||||
|
||||
for (i = 0; i < hdd->num_zones; i++) {
|
||||
for (uint32_t i = 0; i < hdd->num_zones; i++) {
|
||||
zone = &hdd->zones[i];
|
||||
zone->start_sector = lba;
|
||||
zone->start_track = track;
|
||||
@@ -467,10 +469,15 @@ void
|
||||
hdd_preset_apply(int hdd_id)
|
||||
{
|
||||
hard_disk_t *hd = &hdd[hdd_id];
|
||||
double revolution_usec, zone_percent;
|
||||
uint32_t disk_sectors, sectors_per_surface, cylinders, cylinders_per_zone;
|
||||
uint32_t total_sectors = 0, i;
|
||||
uint32_t spt, zone_sectors;
|
||||
double revolution_usec;
|
||||
double zone_percent;
|
||||
uint32_t disk_sectors;
|
||||
uint32_t sectors_per_surface;
|
||||
uint32_t cylinders;
|
||||
uint32_t cylinders_per_zone;
|
||||
uint32_t total_sectors = 0;
|
||||
uint32_t spt;
|
||||
uint32_t zone_sectors;
|
||||
|
||||
if (hd->speed_preset >= hdd_preset_get_num())
|
||||
hd->speed_preset = 0;
|
||||
@@ -503,7 +510,7 @@ hdd_preset_apply(int hdd_id)
|
||||
hd->phy_cyl = cylinders;
|
||||
cylinders_per_zone = cylinders / preset->zones;
|
||||
|
||||
for (i = 0; i < preset->zones; i++) {
|
||||
for (uint32_t i = 0; i < preset->zones; i++) {
|
||||
zone_percent = i * 100 / (double) preset->zones;
|
||||
|
||||
if (i < preset->zones - 1) {
|
||||
|
||||
@@ -107,7 +107,7 @@ image_is_hdx(const char *s, int check_signature)
|
||||
if (fread(&signature, 1, 8, f) != 8)
|
||||
fatal("image_is_hdx(): Error reading signature\n");
|
||||
fclose(f);
|
||||
if (signature == 0xD778A82044445459ll)
|
||||
if (signature == 0xD778A82044445459LL)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
@@ -143,7 +143,11 @@ hdd_image_calc_chs(uint32_t *c, uint32_t *h, uint32_t *s, uint32_t size)
|
||||
/* Calculate the geometry from size (in MB), using the algorithm provided in
|
||||
"Virtual Hard Disk Image Format Specification, Appendix: CHS Calculation" */
|
||||
uint64_t ts = ((uint64_t) size) << 11LL;
|
||||
uint32_t spt, heads, cyl, cth;
|
||||
uint32_t spt;
|
||||
uint32_t heads;
|
||||
uint32_t cyl;
|
||||
uint32_t cth;
|
||||
|
||||
if (ts > 65535 * 16 * 255)
|
||||
ts = 65535 * 16 * 255;
|
||||
|
||||
@@ -180,7 +184,7 @@ prepare_new_hard_disk(uint8_t id, uint64_t full_size)
|
||||
uint64_t target_size = (full_size + hdd_images[id].base) - ftello64(hdd_images[id].file);
|
||||
|
||||
uint32_t size;
|
||||
uint32_t t, i;
|
||||
uint32_t t;
|
||||
|
||||
t = (uint32_t) (target_size >> 20); /* Amount of 1 MB blocks. */
|
||||
size = (uint32_t) (target_size & 0xfffff); /* 1 MB mask. */
|
||||
@@ -195,7 +199,7 @@ prepare_new_hard_disk(uint8_t id, uint64_t full_size)
|
||||
|
||||
/* First, write all the 1 MB blocks. */
|
||||
if (t > 0) {
|
||||
for (i = 0; i < t; i++) {
|
||||
for (uint32_t i = 0; i < t; i++) {
|
||||
fseek(hdd_images[id].file, 0, SEEK_END);
|
||||
fwrite(empty_sector_1mb, 1, 1048576, hdd_images[id].file);
|
||||
pclog("#");
|
||||
@@ -224,9 +228,7 @@ prepare_new_hard_disk(uint8_t id, uint64_t full_size)
|
||||
void
|
||||
hdd_image_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < HDD_NUM; i++)
|
||||
for (uint8_t i = 0; i < HDD_NUM; i++)
|
||||
memset(&hdd_images[i], 0, sizeof(hdd_image_t));
|
||||
}
|
||||
|
||||
@@ -235,10 +237,12 @@ hdd_image_load(int id)
|
||||
{
|
||||
uint32_t sector_size = 512;
|
||||
uint32_t zero = 0;
|
||||
uint64_t signature = 0xD778A82044445459ll;
|
||||
uint64_t signature = 0xD778A82044445459LL;
|
||||
uint64_t full_size = 0;
|
||||
uint64_t spt = 0, hpc = 0, tracks = 0;
|
||||
int c, ret;
|
||||
uint64_t spt = 0;
|
||||
uint64_t hpc = 0;
|
||||
uint64_t tracks = 0;
|
||||
int ret;
|
||||
uint64_t s = 0;
|
||||
char *fn = hdd[id].fn;
|
||||
int is_hdx[2] = { 0, 0 };
|
||||
@@ -306,7 +310,7 @@ hdd_image_load(int id)
|
||||
fwrite(&(hdd[id].spt), 1, 4, hdd_images[id].file);
|
||||
fwrite(&(hdd[id].hpc), 1, 4, hdd_images[id].file);
|
||||
fwrite(&(hdd[id].tracks), 1, 4, hdd_images[id].file);
|
||||
for (c = 0; c < 0x3f8; c++)
|
||||
for (uint16_t c = 0; c < 0x3f8; c++)
|
||||
fwrite(&zero, 1, 4, hdd_images[id].file);
|
||||
hdd_images[id].type = HDD_IMAGE_HDI;
|
||||
} else if (is_hdx[0]) {
|
||||
@@ -330,11 +334,35 @@ hdd_image_load(int id)
|
||||
full_size = ((uint64_t) hdd[id].spt) * ((uint64_t) hdd[id].hpc) * ((uint64_t) hdd[id].tracks) << 9LL;
|
||||
hdd_images[id].last_sector = (full_size >> 9LL) - 1;
|
||||
|
||||
hdd_images[id].vhd = mvhd_create_fixed(fn, geometry, &vhd_error, NULL);
|
||||
if (hdd_images[id].vhd == NULL)
|
||||
fatal("hdd_image_load(): VHD: Could not create VHD : %s\n", mvhd_strerr(vhd_error));
|
||||
if (hdd[id].vhd_blocksize || hdd[id].vhd_parent[0]) {
|
||||
MVHDCreationOptions options;
|
||||
retry_vhd:
|
||||
options.block_size_in_sectors = hdd[id].vhd_blocksize;
|
||||
options.path = fn;
|
||||
options.size_in_bytes = 0;
|
||||
options.geometry = geometry;
|
||||
if (hdd[id].vhd_parent[0]) {
|
||||
options.type = MVHD_TYPE_DIFF;
|
||||
options.parent_path = hdd[id].vhd_parent;
|
||||
} else {
|
||||
options.type = MVHD_TYPE_DYNAMIC;
|
||||
options.parent_path = NULL;
|
||||
}
|
||||
|
||||
hdd_images[id].vhd = mvhd_create_ex(options, &vhd_error);
|
||||
} else {
|
||||
hdd_images[id].vhd = mvhd_create_fixed(fn, geometry, &vhd_error, NULL);
|
||||
}
|
||||
if (hdd_images[id].vhd == NULL) {
|
||||
/* Don't lock out if the parent of a differential VHD doesn't exist. */
|
||||
if (hdd[id].vhd_parent[0]) {
|
||||
hdd[id].vhd_parent[0] = '\0';
|
||||
goto retry_vhd;
|
||||
}
|
||||
fatal("hdd_image_load(): VHD: Could not create VHD : %s\n", mvhd_strerr(vhd_error));
|
||||
}
|
||||
hdd_images[id].type = HDD_IMAGE_VHD;
|
||||
|
||||
return 1;
|
||||
} else {
|
||||
hdd_images[id].type = HDD_IMAGE_RAW;
|
||||
@@ -425,9 +453,12 @@ hdd_image_load(int id)
|
||||
fatal("hdd_image_load(): VHD: Parent/child timestamp mismatch for VHD file '%s'\n", fn);
|
||||
}
|
||||
|
||||
hdd[id].tracks = hdd_images[id].vhd->footer.geom.cyl;
|
||||
hdd[id].hpc = hdd_images[id].vhd->footer.geom.heads;
|
||||
hdd[id].spt = hdd_images[id].vhd->footer.geom.spt;
|
||||
hdd[id].tracks = hdd_images[id].vhd->footer.geom.cyl;
|
||||
hdd[id].hpc = hdd_images[id].vhd->footer.geom.heads;
|
||||
hdd[id].spt = hdd_images[id].vhd->footer.geom.spt;
|
||||
hdd[id].vhd_blocksize = (hdd_images[id].vhd->footer.disk_type == MVHD_TYPE_FIXED) ? 0 : (hdd_images[id].vhd->sparse.block_sz / MVHD_SECTOR_SIZE);
|
||||
if (hdd_images[id].vhd->parent && hdd_images[id].vhd->parent->filename[0])
|
||||
strncpy(hdd[id].vhd_parent, hdd_images[id].vhd->parent->filename, sizeof(hdd[id].vhd_parent) - 1);
|
||||
full_size = ((uint64_t) hdd[id].spt) * ((uint64_t) hdd[id].hpc) * ((uint64_t) hdd[id].tracks) << 9LL;
|
||||
hdd_images[id].type = HDD_IMAGE_VHD;
|
||||
/* If we're here, this means there is a valid VHD footer in the
|
||||
@@ -560,8 +591,6 @@ hdd_image_zero(uint8_t id, uint32_t sector, uint32_t count)
|
||||
int non_transferred_sectors = mvhd_format_sectors(hdd_images[id].vhd, sector, count);
|
||||
hdd_images[id].pos = sector + count - non_transferred_sectors - 1;
|
||||
} else {
|
||||
uint32_t i = 0;
|
||||
|
||||
memset(empty_sector, 0, 512);
|
||||
|
||||
if (fseeko64(hdd_images[id].file, ((uint64_t) (sector) << 9LL) + hdd_images[id].base, SEEK_SET) == -1) {
|
||||
@@ -569,7 +598,7 @@ hdd_image_zero(uint8_t id, uint32_t sector, uint32_t count)
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
if (feof(hdd_images[id].file))
|
||||
break;
|
||||
|
||||
@@ -626,9 +655,6 @@ hdd_image_unload(uint8_t id, int fn_preserve)
|
||||
|
||||
hdd_images[id].last_sector = -1;
|
||||
|
||||
memset(hdd[id].prev_fn, 0, sizeof(hdd[id].prev_fn));
|
||||
if (fn_preserve)
|
||||
strcpy(hdd[id].prev_fn, hdd[id].fn);
|
||||
memset(hdd[id].fn, 0, sizeof(hdd[id].fn));
|
||||
}
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ const uint8_t mo_command_flags[0x100] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
static uint64_t mo_mode_sense_page_flags = (GPMODEP_ALL_PAGES);
|
||||
static uint64_t mo_mode_sense_page_flags = GPMODEP_ALL_PAGES;
|
||||
|
||||
static const mode_sense_pages_t mo_mode_sense_pages_default =
|
||||
// clang-format off
|
||||
@@ -306,9 +306,7 @@ mo_log(const char *fmt, ...)
|
||||
int
|
||||
find_mo_for_channel(uint8_t channel)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
|
||||
for (i = 0; i < MO_NUM; i++) {
|
||||
for (uint8_t i = 0; i < MO_NUM; i++) {
|
||||
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel == channel))
|
||||
return i;
|
||||
}
|
||||
@@ -340,8 +338,8 @@ int
|
||||
mo_load(mo_t *dev, char *fn)
|
||||
{
|
||||
int is_mdi;
|
||||
uint32_t size = 0;
|
||||
unsigned int i, found = 0;
|
||||
uint32_t size = 0;
|
||||
unsigned int found = 0;
|
||||
|
||||
is_mdi = image_is_mdi(fn);
|
||||
|
||||
@@ -366,7 +364,7 @@ mo_load(mo_t *dev, char *fn)
|
||||
dev->drv->base = 0x1000;
|
||||
}
|
||||
|
||||
for (i = 0; i < KNOWN_MO_TYPES; i++) {
|
||||
for (uint8_t i = 0; i < KNOWN_MO_TYPES; i++) {
|
||||
if (size == (mo_types[i].sectors * mo_types[i].bytes_per_sector)) {
|
||||
found = 1;
|
||||
dev->drv->medium_size = mo_types[i].sectors;
|
||||
@@ -584,9 +582,6 @@ mo_mode_sense(mo_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, uint8_t block
|
||||
|
||||
pf = mo_mode_sense_page_flags;
|
||||
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
|
||||
uint8_t msplen;
|
||||
|
||||
page &= 0x3f;
|
||||
@@ -602,14 +597,14 @@ mo_mode_sense(mo_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, uint8_t block
|
||||
buf[pos++] = (dev->drv->sector_size & 0xff);
|
||||
}
|
||||
|
||||
for (i = 0; i < 0x40; i++) {
|
||||
for (uint8_t i = 0; i < 0x40; i++) {
|
||||
if ((page == GPMODE_ALL_PAGES) || (page == i)) {
|
||||
if (pf & (1LL << ((uint64_t) page))) {
|
||||
buf[pos++] = mo_mode_sense_read(dev, page_control, i, 0);
|
||||
msplen = mo_mode_sense_read(dev, page_control, i, 1);
|
||||
buf[pos++] = msplen;
|
||||
mo_log("MO %i: MODE SENSE: Page [%02X] length %i\n", dev->id, i, msplen);
|
||||
for (j = 0; j < msplen; j++)
|
||||
for (uint8_t j = 0; j < msplen; j++)
|
||||
buf[pos++] = mo_mode_sense_read(dev, page_control, i, 2 + j);
|
||||
}
|
||||
}
|
||||
@@ -621,7 +616,8 @@ mo_mode_sense(mo_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, uint8_t block
|
||||
static void
|
||||
mo_update_request_length(mo_t *dev, int len, int block_len)
|
||||
{
|
||||
int bt, min_len = 0;
|
||||
int bt;
|
||||
int min_len = 0;
|
||||
|
||||
dev->max_transfer_len = dev->request_length;
|
||||
|
||||
@@ -696,7 +692,8 @@ mo_bus_speed(mo_t *dev)
|
||||
static void
|
||||
mo_command_common(mo_t *dev)
|
||||
{
|
||||
double bytes_per_second, period;
|
||||
double bytes_per_second;
|
||||
double period;
|
||||
|
||||
dev->status = BUSY_STAT;
|
||||
dev->phase = 1;
|
||||
@@ -944,7 +941,6 @@ static int
|
||||
mo_blocks(mo_t *dev, int32_t *len, int first_batch, int out)
|
||||
{
|
||||
*len = 0;
|
||||
int i;
|
||||
|
||||
if (!dev->sector_len) {
|
||||
mo_command_complete(dev);
|
||||
@@ -961,7 +957,7 @@ mo_blocks(mo_t *dev, int32_t *len, int first_batch, int out)
|
||||
|
||||
*len = dev->requested_blocks * dev->drv->sector_size;
|
||||
|
||||
for (i = 0; i < dev->requested_blocks; i++) {
|
||||
for (int i = 0; i < dev->requested_blocks; i++) {
|
||||
if (fseek(dev->drv->f, dev->drv->base + (dev->sector_pos * dev->drv->sector_size) + (i * dev->drv->sector_size), SEEK_SET) == 1)
|
||||
break;
|
||||
|
||||
@@ -1283,11 +1279,14 @@ static void
|
||||
mo_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
{
|
||||
mo_t *dev = (mo_t *) sc;
|
||||
int pos = 0, block_desc = 0;
|
||||
int pos = 0;
|
||||
int block_desc = 0;
|
||||
int ret;
|
||||
int32_t len, max_len;
|
||||
int32_t len;
|
||||
int32_t max_len;
|
||||
int32_t alloc_length;
|
||||
int size_idx, idx = 0;
|
||||
int size_idx;
|
||||
int idx = 0;
|
||||
unsigned preamble_len;
|
||||
char device_identify[9] = { '8', '6', 'B', '_', 'M', 'O', '0', '0', 0 };
|
||||
int32_t blen = 0;
|
||||
@@ -1769,7 +1768,7 @@ mo_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
case GPCMD_ERASE_10:
|
||||
case GPCMD_ERASE_12:
|
||||
/*Relative address*/
|
||||
if ((cdb[1] & 1))
|
||||
if (cdb[1] & 1)
|
||||
previous_pos = dev->sector_pos;
|
||||
|
||||
switch (cdb[0]) {
|
||||
@@ -1782,7 +1781,7 @@ mo_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
}
|
||||
|
||||
/*Erase all remaining sectors*/
|
||||
if ((cdb[1] & 4)) {
|
||||
if (cdb[1] & 4) {
|
||||
/* Cannot have a sector number when erase all*/
|
||||
if (dev->sector_len) {
|
||||
mo_invalid_field(dev);
|
||||
@@ -1852,15 +1851,18 @@ mo_phase_data_out(scsi_common_t *sc)
|
||||
{
|
||||
mo_t *dev = (mo_t *) sc;
|
||||
|
||||
uint16_t block_desc_len, pos;
|
||||
uint16_t block_desc_len;
|
||||
uint16_t pos;
|
||||
uint16_t param_list_len;
|
||||
|
||||
uint8_t error = 0;
|
||||
uint8_t page, page_len;
|
||||
uint8_t page;
|
||||
uint8_t page_len;
|
||||
|
||||
uint32_t i = 0;
|
||||
|
||||
uint8_t hdr_len, val, old_val, ch;
|
||||
uint8_t hdr_len;
|
||||
uint8_t val;
|
||||
uint8_t old_val;
|
||||
uint8_t ch;
|
||||
|
||||
int len = 0;
|
||||
|
||||
@@ -1918,7 +1920,7 @@ mo_phase_data_out(scsi_common_t *sc)
|
||||
if (!(mo_mode_sense_page_flags & (1LL << ((uint64_t) page))))
|
||||
error |= 1;
|
||||
else {
|
||||
for (i = 0; i < page_len; i++) {
|
||||
for (uint8_t i = 0; i < page_len; i++) {
|
||||
ch = mo_mode_sense_pages_changeable.pages[page][i + 2];
|
||||
val = dev->buffer[pos + i];
|
||||
old_val = dev->ms_pages_saved.pages[page][i + 2];
|
||||
@@ -2104,10 +2106,10 @@ void
|
||||
mo_hard_reset(void)
|
||||
{
|
||||
mo_t *dev;
|
||||
int c;
|
||||
uint8_t scsi_id, scsi_bus;
|
||||
uint8_t scsi_id;
|
||||
uint8_t scsi_bus;
|
||||
|
||||
for (c = 0; c < MO_NUM; c++) {
|
||||
for (uint8_t c = 0; c < MO_NUM; c++) {
|
||||
if ((mo_drives[c].bus_type == MO_BUS_ATAPI) || (mo_drives[c].bus_type == MO_BUS_SCSI)) {
|
||||
mo_log("MO hard_reset drive=%d\n", c);
|
||||
|
||||
@@ -2154,10 +2156,10 @@ void
|
||||
mo_close(void)
|
||||
{
|
||||
mo_t *dev;
|
||||
int c;
|
||||
uint8_t scsi_id, scsi_bus;
|
||||
uint8_t scsi_id;
|
||||
uint8_t scsi_bus;
|
||||
|
||||
for (c = 0; c < MO_NUM; c++) {
|
||||
for (uint8_t c = 0; c < MO_NUM; c++) {
|
||||
if (mo_drives[c].bus_type == MO_BUS_SCSI) {
|
||||
scsi_bus = (mo_drives[c].scsi_device_id >> 4) & 0x0f;
|
||||
scsi_id = mo_drives[c].scsi_device_id & 0x0f;
|
||||
|
||||
@@ -460,9 +460,7 @@ zip_log(const char *fmt, ...)
|
||||
int
|
||||
find_zip_for_channel(uint8_t channel)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
|
||||
for (i = 0; i < ZIP_NUM; i++) {
|
||||
for (uint8_t i = 0; i < ZIP_NUM; i++) {
|
||||
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel == channel))
|
||||
return i;
|
||||
}
|
||||
@@ -753,9 +751,6 @@ zip_mode_sense(zip_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, uint8_t blo
|
||||
else
|
||||
pf = zip_mode_sense_page_flags;
|
||||
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
|
||||
uint8_t msplen;
|
||||
|
||||
page &= 0x3f;
|
||||
@@ -771,14 +766,14 @@ zip_mode_sense(zip_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, uint8_t blo
|
||||
buf[pos++] = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < 0x40; i++) {
|
||||
for (uint8_t i = 0; i < 0x40; i++) {
|
||||
if ((page == GPMODE_ALL_PAGES) || (page == i)) {
|
||||
if (pf & (1LL << ((uint64_t) page))) {
|
||||
buf[pos++] = zip_mode_sense_read(dev, page_control, i, 0);
|
||||
msplen = zip_mode_sense_read(dev, page_control, i, 1);
|
||||
buf[pos++] = msplen;
|
||||
zip_log("ZIP %i: MODE SENSE: Page [%02X] length %i\n", dev->id, i, msplen);
|
||||
for (j = 0; j < msplen; j++)
|
||||
for (uint8_t j = 0; j < msplen; j++)
|
||||
buf[pos++] = zip_mode_sense_read(dev, page_control, i, 2 + j);
|
||||
}
|
||||
}
|
||||
@@ -790,7 +785,8 @@ zip_mode_sense(zip_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, uint8_t blo
|
||||
static void
|
||||
zip_update_request_length(zip_t *dev, int len, int block_len)
|
||||
{
|
||||
int bt, min_len = 0;
|
||||
int bt;
|
||||
int min_len = 0;
|
||||
|
||||
dev->max_transfer_len = dev->request_length;
|
||||
|
||||
@@ -865,7 +861,8 @@ zip_bus_speed(zip_t *dev)
|
||||
static void
|
||||
zip_command_common(zip_t *dev)
|
||||
{
|
||||
double bytes_per_second, period;
|
||||
double bytes_per_second;
|
||||
double period;
|
||||
|
||||
dev->status = BUSY_STAT;
|
||||
dev->phase = 1;
|
||||
@@ -1122,7 +1119,6 @@ static int
|
||||
zip_blocks(zip_t *dev, int32_t *len, int first_batch, int out)
|
||||
{
|
||||
*len = 0;
|
||||
int i;
|
||||
|
||||
if (!dev->sector_len) {
|
||||
zip_command_complete(dev);
|
||||
@@ -1139,7 +1135,7 @@ zip_blocks(zip_t *dev, int32_t *len, int first_batch, int out)
|
||||
|
||||
*len = dev->requested_blocks << 9;
|
||||
|
||||
for (i = 0; i < dev->requested_blocks; i++) {
|
||||
for (int i = 0; i < dev->requested_blocks; i++) {
|
||||
if (fseek(dev->drv->f, dev->drv->base + (dev->sector_pos << 9) + (i << 9), SEEK_SET) == 1)
|
||||
break;
|
||||
|
||||
@@ -1355,12 +1351,15 @@ static void
|
||||
zip_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
{
|
||||
zip_t *dev = (zip_t *) sc;
|
||||
int pos = 0, block_desc = 0;
|
||||
int pos = 0;
|
||||
int block_desc = 0;
|
||||
int ret;
|
||||
int32_t len, max_len;
|
||||
int32_t len;
|
||||
int32_t max_len;
|
||||
int32_t alloc_length;
|
||||
uint32_t i = 0;
|
||||
int size_idx, idx = 0;
|
||||
int size_idx;
|
||||
int idx = 0;
|
||||
unsigned preamble_len;
|
||||
int32_t blen = 0;
|
||||
int32_t *BufLen;
|
||||
@@ -2032,18 +2031,25 @@ zip_phase_data_out(scsi_common_t *sc)
|
||||
{
|
||||
zip_t *dev = (zip_t *) sc;
|
||||
|
||||
uint16_t block_desc_len, pos;
|
||||
uint16_t block_desc_len;
|
||||
uint16_t pos;
|
||||
uint16_t param_list_len;
|
||||
|
||||
uint8_t error = 0;
|
||||
uint8_t page, page_len;
|
||||
uint8_t page;
|
||||
uint8_t page_len;
|
||||
|
||||
uint32_t i = 0;
|
||||
|
||||
uint8_t hdr_len, val, old_val, ch;
|
||||
uint8_t hdr_len;
|
||||
uint8_t val;
|
||||
uint8_t old_val;
|
||||
uint8_t ch;
|
||||
|
||||
uint32_t last_to_write = 0;
|
||||
uint32_t c, h, s;
|
||||
uint32_t c;
|
||||
uint32_t h;
|
||||
uint32_t s;
|
||||
|
||||
int len = 0;
|
||||
|
||||
@@ -2325,10 +2331,10 @@ void
|
||||
zip_hard_reset(void)
|
||||
{
|
||||
zip_t *dev;
|
||||
int c;
|
||||
uint8_t scsi_id, scsi_bus;
|
||||
uint8_t scsi_id;
|
||||
uint8_t scsi_bus;
|
||||
|
||||
for (c = 0; c < ZIP_NUM; c++) {
|
||||
for (uint8_t c = 0; c < ZIP_NUM; c++) {
|
||||
if ((zip_drives[c].bus_type == ZIP_BUS_ATAPI) || (zip_drives[c].bus_type == ZIP_BUS_SCSI)) {
|
||||
zip_log("ZIP hard_reset drive=%d\n", c);
|
||||
|
||||
@@ -2375,10 +2381,10 @@ void
|
||||
zip_close(void)
|
||||
{
|
||||
zip_t *dev;
|
||||
int c;
|
||||
uint8_t scsi_bus, scsi_id;
|
||||
uint8_t scsi_bus;
|
||||
uint8_t scsi_id;
|
||||
|
||||
for (c = 0; c < ZIP_NUM; c++) {
|
||||
for (uint8_t c = 0; c < ZIP_NUM; c++) {
|
||||
if (zip_drives[c].bus_type == ZIP_BUS_SCSI) {
|
||||
scsi_bus = (zip_drives[c].scsi_device_id >> 4) & 0x0f;
|
||||
scsi_id = zip_drives[c].scsi_device_id & 0x0f;
|
||||
|
||||
@@ -146,7 +146,7 @@ fdc_card_available(int card)
|
||||
if (fdc_cards[card].device)
|
||||
return (device_available(fdc_cards[card].device));
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const device_t *
|
||||
@@ -159,7 +159,7 @@ int
|
||||
fdc_card_has_config(int card)
|
||||
{
|
||||
if (!fdc_cards[card].device)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
return (device_has_config(fdc_cards[card].device) ? 1 : 0);
|
||||
}
|
||||
@@ -177,11 +177,11 @@ fdc_card_get_from_internal_name(char *s)
|
||||
|
||||
while (fdc_cards[c].device != NULL) {
|
||||
if (!strcmp((char *) fdc_cards[c].device->internal_name, s))
|
||||
return (c);
|
||||
return c;
|
||||
c++;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -710,7 +710,9 @@ fdc_write(uint16_t addr, uint8_t val, void *priv)
|
||||
{
|
||||
fdc_t *fdc = (fdc_t *) priv;
|
||||
|
||||
int drive, i, drive_num;
|
||||
int drive;
|
||||
int i;
|
||||
int drive_num;
|
||||
|
||||
fdc_log("Write FDC %04X %02X\n", addr, val);
|
||||
|
||||
@@ -1630,7 +1632,7 @@ fdc_callback(void *priv)
|
||||
fdc_poll_readwrite_finish(fdc, compare);
|
||||
return;
|
||||
}
|
||||
if ((fdd_get_head(real_drive(fdc, fdc->drive)) == 0)) {
|
||||
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);
|
||||
@@ -1883,7 +1885,7 @@ fdc_is_verify(fdc_t *fdc)
|
||||
int
|
||||
fdc_data(fdc_t *fdc, uint8_t data, int last)
|
||||
{
|
||||
int i, result = 0;
|
||||
int result = 0;
|
||||
int n;
|
||||
|
||||
if (fdc->deleted & 2) {
|
||||
@@ -1945,7 +1947,7 @@ fdc_data(fdc_t *fdc, uint8_t data, int last)
|
||||
if (fdc->fifobufpos > 0)
|
||||
fdc->fifobufpos = 0;
|
||||
|
||||
for (i = 0; i <= n; i++) {
|
||||
for (int i = 0; i <= n; i++) {
|
||||
result = dma_channel_write(fdc->dma_ch, fdc->fifobuf[i]);
|
||||
|
||||
if (result & DMA_OVER) {
|
||||
@@ -2057,7 +2059,7 @@ fdc_writeprotect(fdc_t *fdc)
|
||||
int
|
||||
fdc_getdata(fdc_t *fdc, int last)
|
||||
{
|
||||
int i, data = 0;
|
||||
int data = 0;
|
||||
|
||||
if ((fdc->flags & FDC_FLAG_PCJR) || !fdc->dma) {
|
||||
if ((fdc->flags & FDC_FLAG_PCJR) || !fdc->fifo || (fdc->tfifo < 1)) {
|
||||
@@ -2085,7 +2087,7 @@ fdc_getdata(fdc_t *fdc, int last)
|
||||
}
|
||||
} else {
|
||||
if (fdc->fifobufpos == 0) {
|
||||
for (i = 0; i <= fdc->tfifo; i++) {
|
||||
for (int i = 0; i <= fdc->tfifo; i++) {
|
||||
data = dma_channel_read(fdc->dma_ch);
|
||||
fdc->fifobuf[i] = data;
|
||||
|
||||
@@ -2242,7 +2244,6 @@ fdc_remove(fdc_t *fdc)
|
||||
void
|
||||
fdc_reset(void *priv)
|
||||
{
|
||||
int i = 0;
|
||||
uint8_t default_rwc;
|
||||
|
||||
fdc_t *fdc = (fdc_t *) priv;
|
||||
@@ -2313,7 +2314,7 @@ fdc_reset(void *priv)
|
||||
|
||||
current_drive = 0;
|
||||
|
||||
for (i = 0; i < FDD_NUM; i++)
|
||||
for (uint8_t i = 0; i < FDD_NUM; i++)
|
||||
ui_sb_update_icon(SB_FLOPPY | i, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -80,12 +80,14 @@ char *fdd_image_history[FDD_NUM][FLOPPY_IMAGE_HISTORY];
|
||||
|
||||
pc_timer_t fdd_poll_time[FDD_NUM];
|
||||
|
||||
static int fdd_notfound = 0,
|
||||
driveloaders[FDD_NUM];
|
||||
static int fdd_notfound = 0;
|
||||
static int driveloaders[FDD_NUM];
|
||||
|
||||
int writeprot[FDD_NUM], fwriteprot[FDD_NUM],
|
||||
fdd_changed[FDD_NUM], ui_writeprot[FDD_NUM] = { 0, 0, 0, 0 },
|
||||
drive_empty[FDD_NUM] = { 1, 1, 1, 1 };
|
||||
int writeprot[FDD_NUM];
|
||||
int fwriteprot[FDD_NUM];
|
||||
int fdd_changed[FDD_NUM];
|
||||
int ui_writeprot[FDD_NUM] = { 0, 0, 0, 0 };
|
||||
int drive_empty[FDD_NUM] = { 1, 1, 1, 1 };
|
||||
|
||||
DRIVE drives[FDD_NUM];
|
||||
|
||||
@@ -296,9 +298,7 @@ fdd_current_track(int drive)
|
||||
void
|
||||
fdd_set_densel(int densel)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
for (i = 0; i < FDD_NUM; i++) {
|
||||
for (uint8_t i = 0; i < FDD_NUM; i++) {
|
||||
if (drive_types[fdd[i].type].flags & FLAG_INVERT_DENSEL)
|
||||
fdd[i].densel = densel ^ 1;
|
||||
else
|
||||
@@ -451,7 +451,8 @@ fdd_get_densel(int drive)
|
||||
void
|
||||
fdd_load(int drive, char *fn)
|
||||
{
|
||||
int c = 0, size;
|
||||
int c = 0;
|
||||
int size;
|
||||
char *p;
|
||||
FILE *f;
|
||||
|
||||
@@ -593,9 +594,7 @@ fdd_get_bitcell_period(int rate)
|
||||
void
|
||||
fdd_reset(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < FDD_NUM; i++) {
|
||||
for (uint8_t i = 0; i < FDD_NUM; i++) {
|
||||
drives[i].id = i;
|
||||
timer_add(&(fdd_poll_time[i]), fdd_poll, &drives[i], 0);
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ static const uint8_t encoded_mfm[64] = {
|
||||
static d86f_t *d86f[FDD_NUM];
|
||||
static uint16_t CRCTable[256];
|
||||
static fdc_t *d86f_fdc;
|
||||
uint64_t poly = 0x42F0E1EBA9EA3693ll; /* ECMA normal */
|
||||
uint64_t poly = 0x42F0E1EBA9EA3693LL; /* ECMA normal */
|
||||
|
||||
uint16_t d86f_side_flags(int drive);
|
||||
int d86f_is_mfm(int drive);
|
||||
@@ -261,7 +261,8 @@ d86f_log(const char *fmt, ...)
|
||||
static void
|
||||
setup_crc(uint16_t poly)
|
||||
{
|
||||
int c = 256, bc;
|
||||
int c = 256;
|
||||
int bc;
|
||||
uint16_t temp;
|
||||
|
||||
while (c--) {
|
||||
@@ -283,7 +284,8 @@ void
|
||||
d86f_destroy_linked_lists(int drive, int side)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
sector_t *s, *t;
|
||||
sector_t *s;
|
||||
sector_t *t;
|
||||
|
||||
if (dev == NULL)
|
||||
return;
|
||||
@@ -432,7 +434,9 @@ d86f_side_flags(int drive)
|
||||
uint16_t
|
||||
d86f_track_flags(int drive)
|
||||
{
|
||||
uint16_t dr, rr, tf;
|
||||
uint16_t dr;
|
||||
uint16_t rr;
|
||||
uint16_t tf;
|
||||
|
||||
tf = d86f_handler[drive].side_flags(drive);
|
||||
rr = tf & 0x67;
|
||||
@@ -468,10 +472,12 @@ uint32_t
|
||||
common_get_raw_size(int drive, int side)
|
||||
{
|
||||
double rate = 0.0;
|
||||
double rpm, rpm_diff;
|
||||
double rpm;
|
||||
double rpm_diff;
|
||||
double size = 100000.0;
|
||||
int mfm;
|
||||
int rm, ssd;
|
||||
int rm;
|
||||
int ssd;
|
||||
uint32_t extra_bc = 0;
|
||||
|
||||
mfm = d86f_is_mfm(drive);
|
||||
@@ -601,7 +607,8 @@ int
|
||||
d86f_get_array_size(int drive, int side, int words)
|
||||
{
|
||||
int array_size;
|
||||
int hole, rm;
|
||||
int hole;
|
||||
int rm;
|
||||
int ssd;
|
||||
|
||||
rm = d86f_get_rpm_mode(drive);
|
||||
@@ -692,7 +699,8 @@ d86f_get_array_size(int drive, int side, int words)
|
||||
int
|
||||
d86f_valid_bit_rate(int drive)
|
||||
{
|
||||
int hole, rate;
|
||||
int hole;
|
||||
int rate;
|
||||
|
||||
rate = fdc_get_bit_rate(d86f_fdc);
|
||||
hole = (d86f_handler[drive].disk_flags(drive) & 6) >> 1;
|
||||
@@ -786,7 +794,8 @@ uint32_t
|
||||
d86f_get_data_len(int drive)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
uint32_t i, ret = 128;
|
||||
uint32_t i;
|
||||
uint32_t ret = 128;
|
||||
|
||||
if (dev->req_sector.id.n)
|
||||
ret = (uint32_t) 128 << dev->req_sector.id.n;
|
||||
@@ -930,7 +939,9 @@ d86f_encode_byte(int drive, int sync, decoded_t b, decoded_t prev_b)
|
||||
uint8_t bits89AB = prev_b.nibbles.nibble0;
|
||||
uint8_t bits7654 = b.nibbles.nibble1;
|
||||
uint8_t bits3210 = b.nibbles.nibble0;
|
||||
uint16_t encoded_7654, encoded_3210, result;
|
||||
uint16_t encoded_7654;
|
||||
uint16_t encoded_3210;
|
||||
uint16_t result;
|
||||
|
||||
if (encoding > 1)
|
||||
return 0xffff;
|
||||
@@ -1246,7 +1257,7 @@ d86f_find_address_mark_fm(int drive, int side, find_t *find, uint16_t req_am, ui
|
||||
return;
|
||||
}
|
||||
|
||||
if ((wrong_am) && (dev->last_word[side] == wrong_am)) {
|
||||
if (wrong_am && (dev->last_word[side] == wrong_am)) {
|
||||
dev->data_find.sync_marks = dev->data_find.bits_obtained = dev->data_find.bytes_obtained = 0;
|
||||
dev->error_condition = 0;
|
||||
dev->state = STATE_IDLE;
|
||||
@@ -1311,7 +1322,7 @@ d86f_find_address_mark_mfm(int drive, int side, find_t *find, uint16_t req_am, u
|
||||
return;
|
||||
}
|
||||
|
||||
if ((wrong_am) && (dev->last_word[side] == wrong_am) && (find->sync_marks >= 3)) {
|
||||
if (wrong_am && (dev->last_word[side] == wrong_am) && (find->sync_marks >= 3)) {
|
||||
dev->data_find.sync_marks = dev->data_find.bits_obtained = dev->data_find.bytes_obtained = 0;
|
||||
dev->error_condition = 0;
|
||||
dev->state = STATE_IDLE;
|
||||
@@ -1469,7 +1480,8 @@ uint8_t
|
||||
d86f_get_data(int drive, int base)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
int data, byte_count;
|
||||
int data;
|
||||
int byte_count;
|
||||
|
||||
if (fdd_get_turbo(drive) && (dev->version == 0x0063))
|
||||
byte_count = dev->turbo_pos;
|
||||
@@ -1749,8 +1761,13 @@ void
|
||||
d86f_write_direct_common(int drive, int side, uint16_t byte, uint8_t type, uint32_t pos)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
uint16_t encoded_byte = 0, mask_data, mask_surface, mask_hole, mask_fuzzy;
|
||||
decoded_t dbyte, dpbyte;
|
||||
uint16_t encoded_byte = 0;
|
||||
uint16_t mask_data;
|
||||
uint16_t mask_surface;
|
||||
uint16_t mask_hole;
|
||||
uint16_t mask_fuzzy;
|
||||
decoded_t dbyte;
|
||||
decoded_t dpbyte;
|
||||
|
||||
if (fdc_get_diswr(d86f_fdc))
|
||||
return;
|
||||
@@ -2062,7 +2079,8 @@ static uint8_t
|
||||
d86f_sector_flags(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
sector_t *s, *t;
|
||||
sector_t *s;
|
||||
sector_t *t;
|
||||
|
||||
if (dev->last_side_sector[side]) {
|
||||
s = dev->last_side_sector[side];
|
||||
@@ -2169,7 +2187,6 @@ d86f_turbo_format(int drive, int side, int nop)
|
||||
int dat;
|
||||
uint16_t sc;
|
||||
uint16_t dtl;
|
||||
int i;
|
||||
|
||||
sc = fdc_get_format_sectors(d86f_fdc);
|
||||
dtl = 128 << fdc_get_format_n(d86f_fdc);
|
||||
@@ -2187,7 +2204,7 @@ d86f_turbo_format(int drive, int side, int nop)
|
||||
}
|
||||
} else if (dev->datac == 4) {
|
||||
if (!nop) {
|
||||
for (i = 0; i < dtl; i++)
|
||||
for (uint16_t i = 0; i < dtl; i++)
|
||||
d86f_handler[drive].write_data(drive, side, i, dev->fill);
|
||||
}
|
||||
|
||||
@@ -2213,7 +2230,8 @@ int
|
||||
d86f_sector_is_present(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
sector_t *s, *t;
|
||||
sector_t *s;
|
||||
sector_t *t;
|
||||
|
||||
if (dev->last_side_sector[side]) {
|
||||
s = dev->last_side_sector[side];
|
||||
@@ -2354,7 +2372,8 @@ void
|
||||
d86f_poll(int drive)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
int mfm, side;
|
||||
int mfm;
|
||||
int side;
|
||||
|
||||
side = fdd_get_head(drive);
|
||||
if (!fdd_is_double_sided(drive))
|
||||
@@ -2750,11 +2769,18 @@ void
|
||||
d86f_construct_encoded_buffer(int drive, int side)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
uint32_t i = 0;
|
||||
|
||||
/* *_fuzm are fuzzy bit masks, *_holm are hole masks, dst_neim are masks is mask for bits that are neither fuzzy nor holes in both,
|
||||
and src1_d and src2_d are filtered source data. */
|
||||
uint16_t src1_fuzm, src2_fuzm, dst_fuzm, src1_holm, src2_holm, dst_holm, dst_neim, src1_d, src2_d;
|
||||
uint16_t src1_fuzm;
|
||||
uint16_t src2_fuzm;
|
||||
uint16_t dst_fuzm;
|
||||
uint16_t src1_holm;
|
||||
uint16_t src2_holm;
|
||||
uint16_t dst_holm;
|
||||
uint16_t dst_neim;
|
||||
uint16_t src1_d;
|
||||
uint16_t src2_d;
|
||||
uint32_t len;
|
||||
uint16_t *dst = dev->track_encoded_data[side];
|
||||
uint16_t *dst_s = dev->track_surface_data[side];
|
||||
@@ -2764,7 +2790,7 @@ d86f_construct_encoded_buffer(int drive, int side)
|
||||
uint16_t *src2_s = dev->thin_track_surface_data[1][side];
|
||||
len = d86f_get_array_size(drive, side, 1);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
for (uint32_t i = 0; i < len; i++) {
|
||||
/* The two bits differ. */
|
||||
if (d86f_has_surface_desc(drive)) {
|
||||
/* Source image has surface description data, so we have some more handling to do. */
|
||||
@@ -2799,8 +2825,8 @@ void
|
||||
d86f_decompose_encoded_buffer(int drive, int side)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
uint32_t i = 0;
|
||||
uint16_t temp, temp2;
|
||||
uint16_t temp;
|
||||
uint16_t temp2;
|
||||
uint32_t len;
|
||||
uint16_t *dst = dev->track_encoded_data[side];
|
||||
uint16_t *src1 = dev->thin_track_encoded_data[0][side];
|
||||
@@ -2810,7 +2836,7 @@ d86f_decompose_encoded_buffer(int drive, int side)
|
||||
dst = d86f_handler[drive].encoded_data(drive, side);
|
||||
len = d86f_get_array_size(drive, side, 1);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
for (uint32_t i = 0; i < len; i++) {
|
||||
if (d86f_has_surface_desc(drive)) {
|
||||
/* Source image has surface description data, so we have some more handling to do.
|
||||
We need hole masks for both buffers. Holes have data bit clear and surface bit set. */
|
||||
@@ -2901,10 +2927,10 @@ void
|
||||
d86f_zero_track(int drive)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
int sides, side;
|
||||
int sides;
|
||||
sides = d86f_get_sides(drive);
|
||||
|
||||
for (side = 0; side < sides; side++) {
|
||||
for (int side = 0; side < sides; side++) {
|
||||
if (d86f_has_surface_desc(drive))
|
||||
memset(dev->track_surface_data[side], 0, 106096);
|
||||
memset(dev->track_encoded_data[side], 0, 106096);
|
||||
@@ -2916,7 +2942,8 @@ d86f_seek(int drive, int track)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
int sides;
|
||||
int side, thin_track;
|
||||
int side;
|
||||
int thin_track;
|
||||
sides = d86f_get_sides(drive);
|
||||
|
||||
/* If the drive has thick tracks, shift the track number by 1. */
|
||||
@@ -2995,8 +3022,9 @@ void
|
||||
d86f_write_tracks(int drive, FILE **f, uint32_t *track_table)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
int sides, fdd_side;
|
||||
int side, thin_track;
|
||||
int sides;
|
||||
int fdd_side;
|
||||
int side;
|
||||
int logical_track = 0;
|
||||
uint32_t *tbl;
|
||||
tbl = dev->track_offset;
|
||||
@@ -3011,7 +3039,7 @@ d86f_write_tracks(int drive, FILE **f, uint32_t *track_table)
|
||||
if (sides == 2)
|
||||
d86f_decompose_encoded_buffer(drive, 1);
|
||||
|
||||
for (thin_track = 0; thin_track < 2; thin_track++) {
|
||||
for (uint8_t thin_track = 0; thin_track < 2; thin_track++) {
|
||||
for (side = 0; side < sides; side++) {
|
||||
fdd_set_head(drive, side);
|
||||
|
||||
@@ -3060,7 +3088,8 @@ d86f_writeback(int drive)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
uint8_t header[32];
|
||||
int header_size, size;
|
||||
int header_size;
|
||||
int size;
|
||||
#ifdef D86F_COMPRESS
|
||||
uint32_t len;
|
||||
int ret = 0;
|
||||
@@ -3264,8 +3293,8 @@ void
|
||||
d86f_common_format(int drive, int side, int rate, uint8_t fill, int proxy)
|
||||
{
|
||||
d86f_t *dev = d86f[drive];
|
||||
uint32_t i = 0;
|
||||
uint16_t temp, temp2;
|
||||
uint16_t temp;
|
||||
uint16_t temp2;
|
||||
uint32_t array_size;
|
||||
|
||||
if (writeprot[drive]) {
|
||||
@@ -3297,7 +3326,7 @@ d86f_common_format(int drive, int side, int rate, uint8_t fill, int proxy)
|
||||
|
||||
if (d86f_has_surface_desc(drive)) {
|
||||
/* Preserve the physical holes but get rid of the fuzzy bytes. */
|
||||
for (i = 0; i < array_size; i++) {
|
||||
for (uint32_t i = 0; i < array_size; i++) {
|
||||
temp = dev->track_encoded_data[side][i] ^ 0xffff;
|
||||
temp2 = dev->track_surface_data[side][i];
|
||||
temp &= temp2;
|
||||
@@ -3366,7 +3395,6 @@ d86f_export(int drive, char *fn)
|
||||
d86f_t *temp86;
|
||||
FILE *f;
|
||||
int tracks = 86;
|
||||
int i;
|
||||
int inc = 1;
|
||||
uint32_t magic = 0x46423638;
|
||||
uint16_t version = 0x020C;
|
||||
@@ -3393,7 +3421,7 @@ d86f_export(int drive, char *fn)
|
||||
if (!fdd_doublestep_40(drive))
|
||||
inc = 2;
|
||||
|
||||
for (i = 0; i < tracks; i += inc) {
|
||||
for (int i = 0; i < tracks; i += inc) {
|
||||
if (inc == 2)
|
||||
fdd_do_seek(drive, i >> 1);
|
||||
else
|
||||
@@ -3426,7 +3454,6 @@ d86f_load(int drive, char *fn)
|
||||
d86f_t *dev = d86f[drive];
|
||||
uint32_t magic = 0;
|
||||
uint32_t len = 0;
|
||||
int i = 0, j = 0;
|
||||
#ifdef D86F_COMPRESS
|
||||
char temp_file_name[2048];
|
||||
uint16_t temp = 0;
|
||||
@@ -3501,11 +3528,11 @@ d86f_load(int drive, char *fn)
|
||||
(void) !fread(&(dev->disk_flags), 2, 1, dev->f);
|
||||
|
||||
if (d86f_has_surface_desc(drive)) {
|
||||
for (i = 0; i < 2; i++)
|
||||
for (uint8_t i = 0; i < 2; i++)
|
||||
dev->track_surface_data[i] = (uint16_t *) malloc(53048 * sizeof(uint16_t));
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
for (j = 0; j < 2; j++)
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
for (uint8_t j = 0; j < 2; j++)
|
||||
dev->thin_track_surface_data[i][j] = (uint16_t *) malloc(53048 * sizeof(uint16_t));
|
||||
}
|
||||
}
|
||||
@@ -3750,11 +3777,9 @@ d86f_load(int drive, char *fn)
|
||||
void
|
||||
d86f_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
setup_crc(0x1021);
|
||||
|
||||
for (i = 0; i < FDD_NUM; i++)
|
||||
for (uint8_t i = 0; i < FDD_NUM; i++)
|
||||
d86f[i] = NULL;
|
||||
}
|
||||
|
||||
@@ -3767,8 +3792,6 @@ d86f_set_fdc(void *fdc)
|
||||
void
|
||||
d86f_close(int drive)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
char temp_file_name[2048];
|
||||
d86f_t *dev = d86f[drive];
|
||||
|
||||
@@ -3779,15 +3802,15 @@ d86f_close(int drive)
|
||||
memcpy(temp_file_name, drive ? nvr_path("TEMP$$$1.$$$") : nvr_path("TEMP$$$0.$$$"), 26);
|
||||
|
||||
if (d86f_has_surface_desc(drive)) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
if (dev->track_surface_data[i]) {
|
||||
free(dev->track_surface_data[i]);
|
||||
dev->track_surface_data[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
for (j = 0; j < 2; j++) {
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
for (uint8_t j = 0; j < 2; j++) {
|
||||
if (dev->thin_track_surface_data[i][j]) {
|
||||
free(dev->thin_track_surface_data[i][j]);
|
||||
dev->thin_track_surface_data[i][j] = NULL;
|
||||
@@ -3828,23 +3851,21 @@ d86f_setup(int drive)
|
||||
void
|
||||
d86f_destroy(int drive)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
d86f_t *dev = d86f[drive];
|
||||
|
||||
if (dev == NULL)
|
||||
return;
|
||||
|
||||
if (d86f_has_surface_desc(drive)) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
if (dev->track_surface_data[i]) {
|
||||
free(dev->track_surface_data[i]);
|
||||
dev->track_surface_data[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
for (j = 0; j < 2; j++) {
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
for (uint8_t j = 0; j < 2; j++) {
|
||||
if (dev->thin_track_surface_data[i][j]) {
|
||||
free(dev->thin_track_surface_data[i][j]);
|
||||
dev->thin_track_surface_data[i][j] = NULL;
|
||||
|
||||
@@ -398,7 +398,7 @@ fdd_sector_size_code(int size)
|
||||
break;
|
||||
}
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -410,15 +410,13 @@ fdd_sector_code_size(uint8_t code)
|
||||
int
|
||||
fdd_bps_valid(uint16_t bps)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= 8; i++) {
|
||||
for (uint8_t i = 0; i <= 8; i++) {
|
||||
if (bps == (128 << i)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -435,5 +433,5 @@ fdd_interleave(int sector, int skew, int spt)
|
||||
adjusted_r += (adjust + add);
|
||||
}
|
||||
|
||||
return (adjusted_r);
|
||||
return adjusted_r;
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ disk_flags(int drive)
|
||||
*/
|
||||
temp_disk_flags |= 0x800;
|
||||
|
||||
return (temp_disk_flags);
|
||||
return temp_disk_flags;
|
||||
}
|
||||
|
||||
static uint16_t
|
||||
@@ -143,34 +143,34 @@ side_flags(int drive)
|
||||
*/
|
||||
temp_side_flags |= 0x08;
|
||||
|
||||
return (temp_side_flags);
|
||||
return temp_side_flags;
|
||||
}
|
||||
|
||||
static int
|
||||
fdi_density(void)
|
||||
{
|
||||
if (!fdc_is_mfm(fdi_fdc))
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
switch (fdc_get_bit_rate(fdi_fdc)) {
|
||||
case 0:
|
||||
return (2);
|
||||
return 2;
|
||||
|
||||
case 1:
|
||||
return (1);
|
||||
return 1;
|
||||
|
||||
case 2:
|
||||
return (1);
|
||||
return 1;
|
||||
|
||||
case 3:
|
||||
case 5:
|
||||
return (3);
|
||||
return 3;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int32_t
|
||||
@@ -207,14 +207,15 @@ extra_bit_cells(int drive, int side)
|
||||
raw_size = is_300_rpm ? 100000 : 83333;
|
||||
}
|
||||
|
||||
return ((dev->tracklen[side][density] - raw_size));
|
||||
return (dev->tracklen[side][density] - raw_size);
|
||||
}
|
||||
|
||||
static void
|
||||
read_revolution(int drive)
|
||||
{
|
||||
fdi_t *dev = fdi[drive];
|
||||
int c, den, side;
|
||||
int c;
|
||||
int den;
|
||||
int track = dev->track;
|
||||
|
||||
if (track > dev->lasttrack) {
|
||||
@@ -227,7 +228,7 @@ read_revolution(int drive)
|
||||
}
|
||||
|
||||
for (den = 0; den < 4; den++) {
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
for (int side = 0; side < dev->sides; side++) {
|
||||
c = fdi2raw_loadtrack(dev->h,
|
||||
(uint16_t *) dev->track_data[side][den],
|
||||
(uint16_t *) dev->track_timing[side][den],
|
||||
|
||||
@@ -129,16 +129,21 @@ get_raw_tsize(int side_flags, int slower_rpm)
|
||||
break;
|
||||
}
|
||||
|
||||
return (size);
|
||||
return size;
|
||||
}
|
||||
|
||||
static int
|
||||
track_is_xdf(int drive, int side, int track)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
int i, effective_sectors, xdf_sectors;
|
||||
int high_sectors, low_sectors;
|
||||
int max_high_id, expected_high_count, expected_low_count;
|
||||
int i;
|
||||
int effective_sectors;
|
||||
int xdf_sectors;
|
||||
int high_sectors;
|
||||
int low_sectors;
|
||||
int max_high_id;
|
||||
int expected_high_count;
|
||||
int expected_low_count;
|
||||
uint8_t *r_map;
|
||||
uint8_t *n_map;
|
||||
|
||||
@@ -148,16 +153,16 @@ track_is_xdf(int drive, int side, int track)
|
||||
dev->xdf_ordered_pos[i][side] = 0;
|
||||
|
||||
if (dev->tracks[track][side].params[2] & 0xC0)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if ((dev->tracks[track][side].params[3] != 16) && (dev->tracks[track][side].params[3] != 19))
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
r_map = (uint8_t *) (dev->buffer + dev->tracks[track][side].r_map_offs);
|
||||
|
||||
if (!track) {
|
||||
if (dev->tracks[track][side].params[4] != 2)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if (!side) {
|
||||
max_high_id = (dev->tracks[track][side].params[3] == 19) ? 0x8B : 0x88;
|
||||
@@ -183,10 +188,10 @@ track_is_xdf(int drive, int side, int track)
|
||||
return ((dev->tracks[track][side].params[3] == 19) ? 2 : 1);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
return 0;
|
||||
} else {
|
||||
if (dev->tracks[track][side].params[4] != 0xFF)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
n_map = (uint8_t *) (dev->buffer + dev->tracks[track][side].n_map_offs);
|
||||
|
||||
@@ -203,31 +208,29 @@ track_is_xdf(int drive, int side, int track)
|
||||
|
||||
if ((effective_sectors == 3) && (xdf_sectors == 3)) {
|
||||
dev->current_side_flags[side] = 0x28;
|
||||
return (1); /* 5.25" 2HD XDF */
|
||||
return 1; /* 5.25" 2HD XDF */
|
||||
}
|
||||
|
||||
if ((effective_sectors == 4) && (xdf_sectors == 4)) {
|
||||
dev->current_side_flags[side] = 0x08;
|
||||
return (2); /* 3.5" 2HD XDF */
|
||||
return 2; /* 3.5" 2HD XDF */
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
track_is_interleave(int drive, int side, int track)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
int i, effective_sectors;
|
||||
int effective_sectors;
|
||||
char *r_map;
|
||||
int track_spt;
|
||||
|
||||
effective_sectors = 0;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
for (uint16_t i = 0; i < 256; i++)
|
||||
dev->interleave_ordered_pos[i][side] = 0;
|
||||
|
||||
track_spt = dev->tracks[track][side].params[3];
|
||||
@@ -235,15 +238,15 @@ track_is_interleave(int drive, int side, int track)
|
||||
r_map = dev->buffer + dev->tracks[track][side].r_map_offs;
|
||||
|
||||
if (dev->tracks[track][side].params[2] & 0xC0)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if (track_spt != 21)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if (dev->tracks[track][side].params[4] != 2)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < track_spt; i++) {
|
||||
for (int i = 0; i < track_spt; i++) {
|
||||
if ((r_map[i] >= 1) && (r_map[i] <= track_spt)) {
|
||||
effective_sectors++;
|
||||
dev->interleave_ordered_pos[(int) r_map[i]][side] = i;
|
||||
@@ -251,9 +254,9 @@ track_is_interleave(int drive, int side, int track)
|
||||
}
|
||||
|
||||
if (effective_sectors == track_spt)
|
||||
return (1);
|
||||
return 1;
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -282,8 +285,11 @@ imd_seek(int drive, int track)
|
||||
uint8_t id[4] = { 0, 0, 0, 0 };
|
||||
uint8_t type;
|
||||
imd_t *dev = imd[drive];
|
||||
int sector, current_pos;
|
||||
int side, c = 0, h, n;
|
||||
int sector;
|
||||
int current_pos;
|
||||
int c = 0;
|
||||
int h;
|
||||
int n;
|
||||
int ssize = 512;
|
||||
int track_rate = 0;
|
||||
int track_gap2 = 22;
|
||||
@@ -329,7 +335,7 @@ imd_seek(int drive, int track)
|
||||
if (track > dev->track_count)
|
||||
return;
|
||||
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
for (int side = 0; side < dev->sides; side++) {
|
||||
if (!dev->tracks[track][side].is_present)
|
||||
continue;
|
||||
|
||||
@@ -460,7 +466,7 @@ side_flags(int drive)
|
||||
side = fdd_get_head(drive);
|
||||
sflags = dev->current_side_flags[side];
|
||||
|
||||
return (sflags);
|
||||
return sflags;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -468,8 +474,13 @@ set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
int track = dev->track;
|
||||
int i, sc, sh, sn;
|
||||
char *c_map = NULL, *h_map = NULL, *r_map = NULL, *n_map = NULL;
|
||||
int sc;
|
||||
int sh;
|
||||
int sn;
|
||||
char *c_map = NULL;
|
||||
char *h_map = NULL;
|
||||
char *r_map = NULL;
|
||||
char *n_map = NULL;
|
||||
uint8_t id[4] = { 0, 0, 0, 0 };
|
||||
sc = dev->tracks[track][side].params[1];
|
||||
sh = dev->tracks[track][side].params[2];
|
||||
@@ -487,7 +498,7 @@ set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
if (c != dev->track)
|
||||
return;
|
||||
|
||||
for (i = 0; i < dev->tracks[track][side].params[3]; i++) {
|
||||
for (uint8_t i = 0; i < dev->tracks[track][side].params[3]; i++) {
|
||||
id[0] = (sh & 0x80) ? c_map[i] : sc;
|
||||
id[1] = (sh & 0x40) ? h_map[i] : (sh & 1);
|
||||
id[2] = r_map[i];
|
||||
@@ -502,17 +513,17 @@ static void
|
||||
imd_writeback(int drive)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
int side;
|
||||
int track = dev->track;
|
||||
int i = 0;
|
||||
char *n_map = 0;
|
||||
uint8_t h, n, spt;
|
||||
uint8_t h;
|
||||
uint8_t n;
|
||||
uint8_t spt;
|
||||
uint32_t ssize;
|
||||
|
||||
if (writeprot[drive])
|
||||
return;
|
||||
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
for (int side = 0; side < dev->sides; side++) {
|
||||
if (dev->tracks[track][side].is_present) {
|
||||
fseek(dev->f, dev->tracks[track][side].file_offs, SEEK_SET);
|
||||
h = dev->tracks[track][side].params[2];
|
||||
@@ -530,7 +541,7 @@ imd_writeback(int drive)
|
||||
n_map = dev->buffer + dev->tracks[track][side].n_map_offs;
|
||||
fwrite(n_map, 1, spt, dev->f);
|
||||
}
|
||||
for (i = 0; i < spt; i++) {
|
||||
for (uint8_t i = 0; i < spt; i++) {
|
||||
ssize = (n == 0xFF) ? n_map[i] : n;
|
||||
ssize = 128 << ssize;
|
||||
fwrite(dev->buffer + dev->tracks[track][side].sector_data_offs[i], 1, ssize, dev->f);
|
||||
@@ -546,7 +557,7 @@ poll_read_data(int drive, int side, uint16_t pos)
|
||||
int type = dev->current_data[side][0];
|
||||
|
||||
if ((type == 0) || (type > 8))
|
||||
return (0xf6); /* Should never happen. */
|
||||
return 0xf6; /* Should never happen. */
|
||||
|
||||
if (type & 1)
|
||||
return (dev->current_data[side][pos + 1]);
|
||||
@@ -574,13 +585,14 @@ format_conditions(int drive)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
int track = dev->track;
|
||||
int side, temp;
|
||||
int side;
|
||||
int temp;
|
||||
|
||||
side = fdd_get_head(drive);
|
||||
temp = (fdc_get_format_sectors(imd_fdc) == dev->tracks[track][side].params[3]);
|
||||
temp = temp && (fdc_get_format_n(imd_fdc) == dev->tracks[track][side].params[4]);
|
||||
|
||||
return (temp);
|
||||
return temp;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -613,7 +625,8 @@ imd_load(int drive, char *fn)
|
||||
uint32_t minimum_gap4 = 0;
|
||||
uint8_t converted_rate;
|
||||
uint8_t type;
|
||||
int size_diff, gap_sum;
|
||||
int size_diff;
|
||||
int gap_sum;
|
||||
|
||||
d86f_unregister(drive);
|
||||
|
||||
@@ -708,7 +721,7 @@ imd_load(int drive, char *fn)
|
||||
|
||||
dev->tracks[track][side].side_flags = (buffer2[0] % 3);
|
||||
if (!dev->tracks[track][side].side_flags)
|
||||
dev->disk_flags |= (0x02);
|
||||
dev->disk_flags |= 0x02;
|
||||
dev->tracks[track][side].side_flags |= (!(buffer2[0] - dev->tracks[track][side].side_flags) ? 0 : 8);
|
||||
mfm = dev->tracks[track][side].side_flags & 8;
|
||||
track_total = mfm ? 146 : 73;
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
typedef struct {
|
||||
FILE *f;
|
||||
uint8_t track_data[2][50000];
|
||||
uint8_t track_data[2][688128];
|
||||
int sectors, tracks, sides;
|
||||
uint8_t sector_size;
|
||||
int xdf_type; /* 0 = not XDF, 1-5 = one of the five XDF types */
|
||||
@@ -71,10 +71,10 @@ static fdc_t *img_fdc;
|
||||
|
||||
static double bit_rate_300;
|
||||
static char *ext;
|
||||
static uint8_t first_byte,
|
||||
second_byte,
|
||||
third_byte,
|
||||
fourth_byte;
|
||||
static uint8_t first_byte;
|
||||
static uint8_t second_byte;
|
||||
static uint8_t third_byte;
|
||||
static uint8_t fourth_byte;
|
||||
static uint8_t fdf_suppress_final_byte = 0; /* This is hard-coded to 0 -
|
||||
* if you really need to read
|
||||
* those NT 3.1 Beta floppy
|
||||
@@ -339,43 +339,41 @@ sector_size_code(int sector_size)
|
||||
{
|
||||
switch (sector_size) {
|
||||
case 128:
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
case 256:
|
||||
return (1);
|
||||
return 1;
|
||||
|
||||
default:
|
||||
case 512:
|
||||
return (2);
|
||||
return 2;
|
||||
|
||||
case 1024:
|
||||
return (3);
|
||||
return 3;
|
||||
|
||||
case 2048:
|
||||
return (4);
|
||||
return 4;
|
||||
|
||||
case 4096:
|
||||
return (5);
|
||||
return 5;
|
||||
|
||||
case 8192:
|
||||
return (6);
|
||||
return 6;
|
||||
|
||||
case 16384:
|
||||
return (7);
|
||||
return 7;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
bps_is_valid(uint16_t bps)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= 8; i++) {
|
||||
for (uint8_t i = 0; i <= 8; i++) {
|
||||
if (bps == (128 << i))
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -385,13 +383,13 @@ first_byte_is_valid(uint8_t first_byte)
|
||||
case 0x60:
|
||||
case 0xE9:
|
||||
case 0xEB:
|
||||
return (1);
|
||||
return 1;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define xdf_img_sector xdf_img_layout[current_xdft][!is_t0][sector]
|
||||
@@ -410,7 +408,7 @@ interleave(int sector, int skew, int track_spt)
|
||||
if (skewed_i & 1)
|
||||
adjusted_r += (adjust + add);
|
||||
|
||||
return (adjusted_r);
|
||||
return adjusted_r;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -418,7 +416,7 @@ write_back(int drive)
|
||||
{
|
||||
img_t *dev = img[drive];
|
||||
int ssize = 128 << ((int) dev->sector_size);
|
||||
int side, size;
|
||||
int size;
|
||||
|
||||
if (dev->f == NULL)
|
||||
return;
|
||||
@@ -428,7 +426,7 @@ write_back(int drive)
|
||||
|
||||
if (fseek(dev->f, dev->base + (dev->track * dev->sectors * ssize * dev->sides), SEEK_SET) == -1)
|
||||
pclog("IMG write_back(): Error seeking to the beginning of the file\n");
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
for (int side = 0; side < dev->sides; side++) {
|
||||
size = dev->sectors * ssize;
|
||||
if (fwrite(dev->track_data[side], 1, size, dev->f) != size)
|
||||
fatal("IMG write_back(): Error writing data\n");
|
||||
@@ -485,7 +483,7 @@ format_conditions(int drive)
|
||||
temp = temp && (fdc_get_format_n(img_fdc) == dev->sector_size);
|
||||
temp = temp && (dev->xdf_type == 0);
|
||||
|
||||
return (temp);
|
||||
return temp;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -496,7 +494,16 @@ img_seek(int drive, int track)
|
||||
int current_xdft = dev->xdf_type - 1;
|
||||
int read_bytes = 0;
|
||||
uint8_t id[4] = { 0, 0, 0, 0 };
|
||||
int is_t0, sector, current_pos, img_pos, sr, sside, total, array_sector, buf_side, buf_pos;
|
||||
int is_t0;
|
||||
int sector;
|
||||
int current_pos;
|
||||
int img_pos;
|
||||
int sr;
|
||||
int sside;
|
||||
int total;
|
||||
int array_sector;
|
||||
int buf_side;
|
||||
int buf_pos;
|
||||
int ssize = 128 << ((int) dev->sector_size);
|
||||
uint32_t cur_pos = 0;
|
||||
|
||||
@@ -647,7 +654,10 @@ img_load(int drive, char *fn)
|
||||
uint8_t bpb_mid; /* Media type ID. */
|
||||
uint8_t bpb_sectors;
|
||||
uint8_t bpb_sides;
|
||||
uint8_t cqm, ddi, fdf, fdi;
|
||||
uint8_t cqm;
|
||||
uint8_t ddi;
|
||||
uint8_t fdf;
|
||||
uint8_t fdi;
|
||||
uint16_t comment_len = 0;
|
||||
int16_t block_len = 0;
|
||||
uint32_t cur_pos = 0;
|
||||
@@ -661,7 +671,6 @@ img_load(int drive, char *fn)
|
||||
int temp_rate;
|
||||
int guess = 0;
|
||||
int size;
|
||||
int i;
|
||||
|
||||
ext = path_get_extension(fn);
|
||||
|
||||
@@ -1152,7 +1161,7 @@ jump_if_fdf:
|
||||
temp_rate = 0xFF;
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
for (uint8_t i = 0; i < 6; i++) {
|
||||
if ((dev->sectors <= maximum_sectors[dev->sector_size][i]) || (dev->sectors == xdf_sectors[dev->sector_size][i])) {
|
||||
bit_rate_300 = bit_rates_300[i];
|
||||
temp_rate = rates[i];
|
||||
|
||||
@@ -125,10 +125,11 @@ static void
|
||||
handle(json_t *dev, char *name, char *str)
|
||||
{
|
||||
sector_t *sec = NULL;
|
||||
uint32_t l, pat;
|
||||
uint32_t l;
|
||||
uint32_t pat;
|
||||
uint8_t *p;
|
||||
char *sp;
|
||||
int i, s;
|
||||
int s;
|
||||
|
||||
/* Point to the currently selected sector. */
|
||||
sec = &dev->sects[dev->track][dev->side][dev->dmf - 1];
|
||||
@@ -163,7 +164,7 @@ handle(json_t *dev, char *name, char *str)
|
||||
sec->data = (uint8_t *) malloc(sec->size);
|
||||
p = sec->data;
|
||||
s = (sec->size / sizeof(uint32_t));
|
||||
for (i = 0; i < s; i++) {
|
||||
for (int i = 0; i < s; i++) {
|
||||
l = pat;
|
||||
*p++ = (l & 0x000000ff);
|
||||
l >>= 8;
|
||||
@@ -207,18 +208,21 @@ unexpect(int c, int state, int level)
|
||||
static int
|
||||
load_image(json_t *dev)
|
||||
{
|
||||
char buff[4096], name[32];
|
||||
int c, i, j, state, level;
|
||||
char buff[4096];
|
||||
char name[32];
|
||||
int c;
|
||||
int state;
|
||||
int level;
|
||||
char *ptr;
|
||||
|
||||
if (dev->f == NULL) {
|
||||
json_log("JSON: no file loaded!\n");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Initialize. */
|
||||
for (i = 0; i < NTRACKS; i++) {
|
||||
for (j = 0; j < NSIDES; j++)
|
||||
for (uint16_t i = 0; i < NTRACKS; i++) {
|
||||
for (uint8_t j = 0; j < NSIDES; j++)
|
||||
memset(dev->sects[i][j], 0x00, sizeof(sector_t));
|
||||
}
|
||||
dev->track = dev->side = dev->dmf = 0; /* "dmf" is "sector#" */
|
||||
@@ -375,7 +379,7 @@ load_image(json_t *dev)
|
||||
dev->tracks = dev->track;
|
||||
dev->sides = dev->side;
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Seek the heads to a track, and prepare to read data from that track. */
|
||||
@@ -384,9 +388,13 @@ json_seek(int drive, int track)
|
||||
{
|
||||
uint8_t id[4] = { 0, 0, 0, 0 };
|
||||
json_t *dev = images[drive];
|
||||
int side, sector;
|
||||
int rate, gap2, gap3, pos;
|
||||
int ssize, rsec, asec;
|
||||
int rate;
|
||||
int gap2;
|
||||
int gap3;
|
||||
int pos;
|
||||
int ssize;
|
||||
int rsec;
|
||||
int asec;
|
||||
|
||||
if (dev->f == NULL) {
|
||||
json_log("JSON: seek: no file loaded!\n");
|
||||
@@ -412,7 +420,7 @@ json_seek(int drive, int track)
|
||||
return;
|
||||
}
|
||||
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
for (uint8_t side = 0; side < dev->sides; side++) {
|
||||
/* Get transfer rate for this side. */
|
||||
rate = dev->track_flags & 0x07;
|
||||
if (!rate && (dev->track_flags & 0x20))
|
||||
@@ -428,7 +436,7 @@ json_seek(int drive, int track)
|
||||
|
||||
pos = d86f_prepare_pretrack(drive, side, 0);
|
||||
|
||||
for (sector = 0; sector < dev->spt[track][side]; sector++) {
|
||||
for (uint8_t sector = 0; sector < dev->spt[track][side]; sector++) {
|
||||
rsec = dev->sects[track][side][sector].sector;
|
||||
asec = sector;
|
||||
|
||||
@@ -473,7 +481,6 @@ static void
|
||||
set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
{
|
||||
json_t *dev = images[drive];
|
||||
int i;
|
||||
|
||||
dev->sector[side] = 0;
|
||||
|
||||
@@ -485,7 +492,7 @@ set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
dev->side = side;
|
||||
|
||||
/* Now loop over all sector ID's on this side to find our sector. */
|
||||
for (i = 0; i < dev->spt[c][side]; i++) {
|
||||
for (uint8_t i = 0; i < dev->spt[c][side]; i++) {
|
||||
if ((dev->sects[dev->track][side][i].track == c) && (dev->sects[dev->track][side][i].side == h) && (dev->sects[dev->track][side][i].sector == r) && (dev->sects[dev->track][side][i].size == n)) {
|
||||
dev->sector[side] = i;
|
||||
}
|
||||
@@ -514,7 +521,6 @@ json_load(int drive, char *fn)
|
||||
int temp_rate;
|
||||
sector_t *sec;
|
||||
json_t *dev;
|
||||
int i;
|
||||
|
||||
/* Just in case- remove ourselves from 86F. */
|
||||
d86f_unregister(drive);
|
||||
@@ -571,7 +577,7 @@ json_load(int drive, char *fn)
|
||||
|
||||
temp_rate = 0xff;
|
||||
sec = &dev->sects[0][0][0];
|
||||
for (i = 0; i < 6; i++) {
|
||||
for (uint8_t i = 0; i < 6; i++) {
|
||||
if (dev->spt[0][0] > fdd_max_sectors[sec->size][i])
|
||||
continue;
|
||||
|
||||
@@ -667,7 +673,6 @@ void
|
||||
json_close(int drive)
|
||||
{
|
||||
json_t *dev = images[drive];
|
||||
int t, h, s;
|
||||
|
||||
if (dev == NULL)
|
||||
return;
|
||||
@@ -676,10 +681,10 @@ json_close(int drive)
|
||||
d86f_unregister(drive);
|
||||
|
||||
/* Release all the sector buffers. */
|
||||
for (t = 0; t < 256; t++) {
|
||||
for (h = 0; h < 2; h++) {
|
||||
for (uint16_t t = 0; t < 256; t++) {
|
||||
for (uint8_t h = 0; h < 2; h++) {
|
||||
memset(dev->sects[t][h], 0x00, sizeof(sector_t));
|
||||
for (s = 0; s < 256; s++) {
|
||||
for (uint16_t s = 0; s < 256; s++) {
|
||||
if (dev->sects[t][h][s].data != NULL)
|
||||
free(dev->sects[t][h][s].data);
|
||||
dev->sects[t][h][s].data = NULL;
|
||||
|
||||
@@ -103,9 +103,9 @@ static int
|
||||
get_track_index(int drive, int side, int track)
|
||||
{
|
||||
mfm_t *dev = mfm[drive];
|
||||
int i, ret = -1;
|
||||
int ret = -1;
|
||||
|
||||
for (i = 0; i < dev->total_tracks; i++) {
|
||||
for (int i = 0; i < dev->total_tracks; i++) {
|
||||
if ((dev->tracks[i].track_no == track) && (dev->tracks[i].side_no == side)) {
|
||||
ret = i;
|
||||
break;
|
||||
@@ -119,9 +119,9 @@ static int
|
||||
get_adv_track_index(int drive, int side, int track)
|
||||
{
|
||||
mfm_t *dev = mfm[drive];
|
||||
int i, ret = -1;
|
||||
int ret = -1;
|
||||
|
||||
for (i = 0; i < dev->total_tracks; i++) {
|
||||
for (int i = 0; i < dev->total_tracks; i++) {
|
||||
if ((dev->adv_tracks[i].track_no == track) && (dev->adv_tracks[i].side_no == side)) {
|
||||
ret = i;
|
||||
break;
|
||||
@@ -154,7 +154,8 @@ get_adv_track_bitrate(int drive, int side, int track, int *br, int *rpm)
|
||||
static void
|
||||
set_disk_flags(int drive)
|
||||
{
|
||||
int br = 250, rpm = 300;
|
||||
int br = 250;
|
||||
int rpm = 300;
|
||||
mfm_t *dev = mfm[drive];
|
||||
uint16_t temp_disk_flags = 0x1080; /* We ALWAYS claim to have extra bit cells, even if the actual amount is 0;
|
||||
Bit 12 = 1, bits 6, 5 = 0 - extra bit cells field specifies the entire
|
||||
@@ -203,7 +204,8 @@ set_side_flags(int drive, int side)
|
||||
{
|
||||
mfm_t *dev = mfm[drive];
|
||||
uint16_t temp_side_flags = 0;
|
||||
int br = 250, rpm = 300;
|
||||
int br = 250;
|
||||
int rpm = 300;
|
||||
|
||||
if (dev->hdr.if_type & 0x80)
|
||||
get_adv_track_bitrate(drive, side, dev->cur_track, &br, &rpm);
|
||||
@@ -264,8 +266,10 @@ static uint32_t
|
||||
get_raw_size(int drive, int side)
|
||||
{
|
||||
mfm_t *dev = mfm[drive];
|
||||
int track_index, is_300_rpm;
|
||||
int br = 250, rpm = 300;
|
||||
int track_index;
|
||||
int is_300_rpm;
|
||||
int br = 250;
|
||||
int rpm = 300;
|
||||
|
||||
if (dev->hdr.if_type & 0x80) {
|
||||
track_index = get_adv_track_index(drive, side, dev->cur_track);
|
||||
@@ -319,8 +323,10 @@ void
|
||||
mfm_read_side(int drive, int side)
|
||||
{
|
||||
mfm_t *dev = mfm[drive];
|
||||
int track_index, track_size;
|
||||
int track_bytes, ret;
|
||||
int track_index;
|
||||
int track_size;
|
||||
int track_bytes;
|
||||
int ret;
|
||||
|
||||
if (dev->hdr.if_type & 0x80)
|
||||
track_index = get_adv_track_index(drive, side, dev->cur_track);
|
||||
@@ -382,7 +388,7 @@ mfm_load(int drive, char *fn)
|
||||
{
|
||||
mfm_t *dev;
|
||||
double dbr;
|
||||
int i, size;
|
||||
int size;
|
||||
|
||||
writeprot[drive] = fwriteprot[drive] = 1;
|
||||
|
||||
@@ -427,7 +433,7 @@ mfm_load(int drive, char *fn)
|
||||
dev->hdr.tracks_no >>= 1;
|
||||
dev->hdr.sides_no <<= 1;
|
||||
|
||||
for (i = 0; i < dev->total_tracks; i++) {
|
||||
for (int i = 0; i < dev->total_tracks; i++) {
|
||||
if (dev->hdr.if_type & 0x80) {
|
||||
dev->adv_tracks[i].side_no <<= 1;
|
||||
dev->adv_tracks[i].side_no |= (dev->adv_tracks[i].track_no & 1);
|
||||
|
||||
@@ -237,11 +237,11 @@ dsk_identify(int drive)
|
||||
|
||||
fdd_image_read(drive, header, 0, 2);
|
||||
if (header[0] == 'T' && header[1] == 'D')
|
||||
return (1);
|
||||
return 1;
|
||||
else if (header[0] == 't' && header[1] == 'd')
|
||||
return (1);
|
||||
return 1;
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -259,7 +259,7 @@ state_data_read(td0dsk_t *state, uint8_t *buf, uint16_t size)
|
||||
fatal("TD0: Error reading data in state_data_read()\n");
|
||||
state->fdd_file_offset += size;
|
||||
|
||||
return (size);
|
||||
return size;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -277,7 +277,7 @@ state_next_word(td0dsk_t *state)
|
||||
state->getlen += 8;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* get one bit */
|
||||
@@ -293,9 +293,9 @@ state_GetBit(td0dsk_t *state)
|
||||
state->getbuf <<= 1;
|
||||
state->getlen--;
|
||||
if (i < 0)
|
||||
return (1);
|
||||
return 1;
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* get a byte */
|
||||
@@ -305,7 +305,7 @@ state_GetByte(td0dsk_t *state)
|
||||
uint16_t i;
|
||||
|
||||
if (state_next_word(state) != 0)
|
||||
return (-1);
|
||||
return -1;
|
||||
|
||||
i = state->getbuf;
|
||||
state->getbuf <<= 8;
|
||||
@@ -319,7 +319,8 @@ state_GetByte(td0dsk_t *state)
|
||||
static void
|
||||
state_StartHuff(td0dsk_t *state)
|
||||
{
|
||||
int i, j;
|
||||
int i;
|
||||
int j;
|
||||
|
||||
for (i = 0; i < N_CHAR; i++) {
|
||||
state->freq[i] = 1;
|
||||
@@ -343,8 +344,11 @@ state_StartHuff(td0dsk_t *state)
|
||||
static void
|
||||
state_reconst(td0dsk_t *state)
|
||||
{
|
||||
int16_t i, j, k;
|
||||
uint16_t f, l;
|
||||
int16_t i;
|
||||
int16_t j;
|
||||
int16_t k;
|
||||
uint16_t f;
|
||||
uint16_t l;
|
||||
|
||||
/* halven cumulative freq for leaf nodes */
|
||||
j = 0;
|
||||
@@ -385,7 +389,10 @@ state_reconst(td0dsk_t *state)
|
||||
static void
|
||||
state_update(td0dsk_t *state, int c)
|
||||
{
|
||||
int i, j, k, l;
|
||||
int i;
|
||||
int j;
|
||||
int k;
|
||||
int l;
|
||||
|
||||
if (state->freq[R] == MAX_FREQ)
|
||||
state_reconst(state);
|
||||
@@ -444,14 +451,16 @@ state_DecodeChar(td0dsk_t *state)
|
||||
|
||||
state_update(state, c);
|
||||
|
||||
return (c);
|
||||
return c;
|
||||
}
|
||||
|
||||
static int16_t
|
||||
state_DecodePosition(td0dsk_t *state)
|
||||
{
|
||||
int16_t bit;
|
||||
uint16_t i, j, c;
|
||||
uint16_t i;
|
||||
uint16_t j;
|
||||
uint16_t c;
|
||||
|
||||
/* decode upper 6 bits from given table */
|
||||
if ((bit = state_GetByte(state)) < 0)
|
||||
@@ -476,15 +485,13 @@ state_DecodePosition(td0dsk_t *state)
|
||||
static void
|
||||
state_init_Decode(td0dsk_t *state)
|
||||
{
|
||||
int i;
|
||||
|
||||
state->getbuf = 0;
|
||||
state->getlen = 0;
|
||||
state->tdctl.ibufcnt = state->tdctl.ibufndx = 0; /* input buffer is empty */
|
||||
state->tdctl.bufcnt = 0;
|
||||
|
||||
state_StartHuff(state);
|
||||
for (i = 0; i < N - F; i++)
|
||||
for (uint16_t i = 0; i < N - F; i++)
|
||||
state->text_buf[i] = ' ';
|
||||
|
||||
state->tdctl.r = N - F;
|
||||
@@ -494,13 +501,14 @@ state_init_Decode(td0dsk_t *state)
|
||||
static int
|
||||
state_Decode(td0dsk_t *state, uint8_t *buf, int len)
|
||||
{
|
||||
int16_t c, pos;
|
||||
int16_t c;
|
||||
int16_t pos;
|
||||
int count; /* was an unsigned long, seems unnecessary */
|
||||
|
||||
for (count = 0; count < len;) {
|
||||
if (state->tdctl.bufcnt == 0) {
|
||||
if ((c = state_DecodeChar(state)) < 0)
|
||||
return (count); /* fatal error */
|
||||
return count; /* fatal error */
|
||||
if (c < 256) {
|
||||
*(buf++) = c & 0xff;
|
||||
state->text_buf[state->tdctl.r++] = c & 0xff;
|
||||
@@ -508,7 +516,7 @@ state_Decode(td0dsk_t *state, uint8_t *buf, int len)
|
||||
count++;
|
||||
} else {
|
||||
if ((pos = state_DecodePosition(state)) < 0)
|
||||
return (count); /* fatal error */
|
||||
return count; /* fatal error */
|
||||
state->tdctl.bufpos = (state->tdctl.r - pos - 1) & (N - 1);
|
||||
state->tdctl.bufcnt = c - 255 + THRESHOLD;
|
||||
state->tdctl.bufndx = 0;
|
||||
@@ -530,7 +538,7 @@ state_Decode(td0dsk_t *state, uint8_t *buf, int len)
|
||||
}
|
||||
}
|
||||
|
||||
return (count); /* count == len, success */
|
||||
return count; /* count == len, success */
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
@@ -578,7 +586,7 @@ get_raw_tsize(int side_flags, int slower_rpm)
|
||||
break;
|
||||
}
|
||||
|
||||
return (size);
|
||||
return size;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -586,15 +594,19 @@ td0_initialize(int drive)
|
||||
{
|
||||
td0_t *dev = td0[drive];
|
||||
uint8_t header[12];
|
||||
int fm, head, track;
|
||||
int fm;
|
||||
int head;
|
||||
int track;
|
||||
int track_count = 0;
|
||||
int head_count = 0;
|
||||
int track_spt, track_spt_adjusted;
|
||||
int track_spt;
|
||||
int track_spt_adjusted;
|
||||
int offset = 0;
|
||||
int density = 0;
|
||||
int temp_rate = 0;
|
||||
uint32_t file_size;
|
||||
uint16_t len, rep;
|
||||
uint16_t len;
|
||||
uint16_t rep;
|
||||
td0dsk_t disk_decode;
|
||||
uint8_t *hs;
|
||||
uint16_t size;
|
||||
@@ -606,12 +618,15 @@ td0_initialize(int drive)
|
||||
int32_t raw_tsize = 0;
|
||||
uint32_t minimum_gap3 = 0;
|
||||
uint32_t minimum_gap4 = 0;
|
||||
int i, j, k;
|
||||
int size_diff, gap_sum;
|
||||
int i;
|
||||
int j;
|
||||
int k;
|
||||
int size_diff;
|
||||
int gap_sum;
|
||||
|
||||
if (dev->f == NULL) {
|
||||
td0_log("TD0: Attempted to initialize without loading a file first\n");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fseek(dev->f, 0, SEEK_END);
|
||||
@@ -619,12 +634,12 @@ td0_initialize(int drive)
|
||||
|
||||
if (file_size < 12) {
|
||||
td0_log("TD0: File is too small to even contain the header\n");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (file_size > TD0_MAX_BUFSZ) {
|
||||
td0_log("TD0: File exceeds the maximum size\n");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fseek(dev->f, 0, SEEK_SET);
|
||||
@@ -652,14 +667,14 @@ td0_initialize(int drive)
|
||||
if (track_spt == 255) {
|
||||
/* Empty file? */
|
||||
td0_log("TD0: File has no tracks\n");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
density = (header[5] >> 1) & 3;
|
||||
|
||||
if (density == 3) {
|
||||
td0_log("TD0: Unknown density\n");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -737,7 +752,7 @@ td0_initialize(int drive)
|
||||
size = 128 << hs[3];
|
||||
if ((total_size + size) >= TD0_MAX_BUFSZ) {
|
||||
td0_log("TD0: Processed buffer overflow\n");
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (hs[4] & 0x30)
|
||||
@@ -747,7 +762,7 @@ td0_initialize(int drive)
|
||||
switch (hs[8]) {
|
||||
default:
|
||||
td0_log("TD0: Image uses an unsupported sector data encoding: %i\n", hs[8]);
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
case 0:
|
||||
memcpy(dbuf, &dev->imagebuf[offset], size);
|
||||
@@ -862,7 +877,7 @@ td0_initialize(int drive)
|
||||
|
||||
td0_log("TD0: File loaded: %i tracks, %i sides, disk flags: %02X, side flags: %02X, %02X, GAP3 length: %02X\n", dev->tracks, dev->sides, dev->disk_flags, dev->current_side_flags[0], dev->current_side_flags[1], dev->gap3_len);
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static uint16_t
|
||||
@@ -883,19 +898,19 @@ side_flags(int drive)
|
||||
side = fdd_get_head(drive);
|
||||
sflags = dev->current_side_flags[side];
|
||||
|
||||
return (sflags);
|
||||
return sflags;
|
||||
}
|
||||
|
||||
static void
|
||||
set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
{
|
||||
td0_t *dev = td0[drive];
|
||||
int i = 0, cyl = c;
|
||||
int cyl = c;
|
||||
|
||||
dev->current_sector_index[side] = 0;
|
||||
if (cyl != dev->track)
|
||||
return;
|
||||
for (i = 0; i < dev->track_spt[cyl][side]; i++) {
|
||||
for (uint8_t i = 0; i < dev->track_spt[cyl][side]; i++) {
|
||||
if ((dev->sects[cyl][side][i].track == c) && (dev->sects[cyl][side][i].head == h) && (dev->sects[cyl][side][i].sector == r) && (dev->sects[cyl][side][i].size == n)) {
|
||||
dev->current_sector_index[side] = i;
|
||||
}
|
||||
@@ -915,9 +930,14 @@ track_is_xdf(int drive, int side, int track)
|
||||
{
|
||||
td0_t *dev = td0[drive];
|
||||
uint8_t id[4] = { 0, 0, 0, 0 };
|
||||
int i, effective_sectors, xdf_sectors;
|
||||
int high_sectors, low_sectors;
|
||||
int max_high_id, expected_high_count, expected_low_count;
|
||||
int i;
|
||||
int effective_sectors;
|
||||
int xdf_sectors;
|
||||
int high_sectors;
|
||||
int low_sectors;
|
||||
int max_high_id;
|
||||
int expected_high_count;
|
||||
int expected_low_count;
|
||||
|
||||
effective_sectors = xdf_sectors = high_sectors = low_sectors = 0;
|
||||
|
||||
@@ -976,23 +996,24 @@ track_is_xdf(int drive, int side, int track)
|
||||
|
||||
if ((effective_sectors == 3) && (xdf_sectors == 3)) {
|
||||
dev->current_side_flags[side] = 0x28;
|
||||
return (1); /* 5.25" 2HD XDF */
|
||||
return 1; /* 5.25" 2HD XDF */
|
||||
}
|
||||
|
||||
if ((effective_sectors == 4) && (xdf_sectors == 4)) {
|
||||
dev->current_side_flags[side] = 0x08;
|
||||
return (2); /* 3.5" 2HD XDF */
|
||||
return 2; /* 3.5" 2HD XDF */
|
||||
}
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
track_is_interleave(int drive, int side, int track)
|
||||
{
|
||||
td0_t *dev = td0[drive];
|
||||
int i, effective_sectors;
|
||||
int i;
|
||||
int effective_sectors;
|
||||
int track_spt;
|
||||
|
||||
effective_sectors = 0;
|
||||
@@ -1003,7 +1024,7 @@ track_is_interleave(int drive, int side, int track)
|
||||
track_spt = dev->track_spt[track][side];
|
||||
|
||||
if (track_spt != 21)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < track_spt; i++) {
|
||||
if ((dev->sects[track][side][i].track == track) && (dev->sects[track][side][i].head == side) && (dev->sects[track][side][i].sector >= 1) && (dev->sects[track][side][i].sector <= track_spt) && (dev->sects[track][side][i].size == 2)) {
|
||||
@@ -1013,18 +1034,18 @@ track_is_interleave(int drive, int side, int track)
|
||||
}
|
||||
|
||||
if (effective_sectors == track_spt)
|
||||
return (1);
|
||||
return 1;
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
td0_seek(int drive, int track)
|
||||
{
|
||||
td0_t *dev = td0[drive];
|
||||
int side;
|
||||
uint8_t id[4] = { 0, 0, 0, 0 };
|
||||
int sector, current_pos;
|
||||
int sector;
|
||||
int current_pos;
|
||||
int ssize = 512;
|
||||
int track_rate = 0;
|
||||
int track_gap2 = 22;
|
||||
@@ -1037,7 +1058,8 @@ td0_seek(int drive, int track)
|
||||
int ordered_pos = 0;
|
||||
int real_sector = 0;
|
||||
int actual_sector = 0;
|
||||
int fm, sector_adjusted;
|
||||
int fm;
|
||||
int sector_adjusted;
|
||||
|
||||
if (dev->f == NULL)
|
||||
return;
|
||||
@@ -1064,7 +1086,7 @@ td0_seek(int drive, int track)
|
||||
return;
|
||||
}
|
||||
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
for (int side = 0; side < dev->sides; side++) {
|
||||
track_rate = dev->current_side_flags[side] & 7;
|
||||
/* Make sure 300 kbps @ 360 rpm is treated the same as 250 kbps @ 300 rpm. */
|
||||
if (!track_rate && (dev->current_side_flags[side] & 0x20))
|
||||
@@ -1234,7 +1256,6 @@ void
|
||||
td0_close(int drive)
|
||||
{
|
||||
td0_t *dev = td0[drive];
|
||||
int i, j, k;
|
||||
|
||||
if (dev == NULL)
|
||||
return;
|
||||
@@ -1246,18 +1267,18 @@ td0_close(int drive)
|
||||
if (dev->processed_buf)
|
||||
free(dev->processed_buf);
|
||||
|
||||
for (i = 0; i < 256; i++) {
|
||||
for (j = 0; j < 2; j++) {
|
||||
for (k = 0; k < 256; k++)
|
||||
for (uint16_t i = 0; i < 256; i++) {
|
||||
for (uint8_t j = 0; j < 2; j++) {
|
||||
for (uint16_t k = 0; k < 256; k++)
|
||||
dev->sects[i][j][k].data = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 256; i++) {
|
||||
for (uint16_t i = 0; i < 256; i++) {
|
||||
memset(dev->side_flags[i], 0, 4);
|
||||
memset(dev->track_in_file[i], 0, 2);
|
||||
memset(dev->calculated_gap3_lengths[i], 0, 2);
|
||||
for (j = 0; j < 2; j++)
|
||||
for (uint8_t j = 0; j < 2; j++)
|
||||
memset(dev->sects[i][j], 0, sizeof(td0_sector_t));
|
||||
}
|
||||
|
||||
|
||||
@@ -188,7 +188,8 @@ struct node {
|
||||
};
|
||||
typedef struct node NODE;
|
||||
|
||||
static uint8_t temp, temp2;
|
||||
static uint8_t temp;
|
||||
static uint8_t temp2;
|
||||
|
||||
static uint8_t *
|
||||
expand_tree(uint8_t *stream, NODE *node)
|
||||
@@ -280,8 +281,9 @@ sign_extend8(uint32_t v)
|
||||
static void
|
||||
fdi_decode(uint8_t *stream, int size, uint8_t *out)
|
||||
{
|
||||
int i;
|
||||
uint8_t sign_extend, sixteen_bit, sub_stream_shift;
|
||||
uint8_t sign_extend;
|
||||
uint8_t sixteen_bit;
|
||||
uint8_t sub_stream_shift;
|
||||
NODE root;
|
||||
NODE *current_node;
|
||||
|
||||
@@ -310,7 +312,7 @@ fdi_decode(uint8_t *stream, int size, uint8_t *out)
|
||||
|
||||
/* sub-stream data decode */
|
||||
temp2 = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
uint32_t v;
|
||||
uint8_t decode = 1;
|
||||
current_node = &root;
|
||||
@@ -462,8 +464,7 @@ bit_dedrop(FDI *fdi)
|
||||
static void
|
||||
byte_add(FDI *fdi, uint8_t v)
|
||||
{
|
||||
int i;
|
||||
for (i = 7; i >= 0; i--)
|
||||
for (int8_t i = 7; i >= 0; i--)
|
||||
bit_add(fdi, v & (1 << i));
|
||||
}
|
||||
/* add one word */
|
||||
@@ -477,24 +478,21 @@ word_add(FDI *fdi, uint16_t v)
|
||||
static void
|
||||
byte_mfm_add(FDI *fdi, uint8_t v)
|
||||
{
|
||||
int i;
|
||||
for (i = 7; i >= 0; i--)
|
||||
for (int8_t i = 7; i >= 0; i--)
|
||||
bit_mfm_add(fdi, v & (1 << i));
|
||||
}
|
||||
/* add multiple bytes and mfm encode them */
|
||||
static void
|
||||
bytes_mfm_add(FDI *fdi, uint8_t v, int len)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < len; i++)
|
||||
for (int i = 0; i < len; i++)
|
||||
byte_mfm_add(fdi, v);
|
||||
}
|
||||
/* add one mfm encoded word and re-mfm encode it */
|
||||
static void
|
||||
word_post_mfm_add(FDI *fdi, uint16_t v)
|
||||
{
|
||||
int i;
|
||||
for (i = 14; i >= 0; i -= 2)
|
||||
for (int8_t i = 14; i >= 0; i -= 2)
|
||||
bit_mfm_add(fdi, v & (1 << i));
|
||||
}
|
||||
|
||||
@@ -557,7 +555,8 @@ s09(FDI *fdi)
|
||||
static void
|
||||
s0a(FDI *fdi)
|
||||
{
|
||||
int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1];
|
||||
int i;
|
||||
int bits = (fdi->track_src[0] << 8) | fdi->track_src[1];
|
||||
uint8_t b;
|
||||
fdi->track_src += 2;
|
||||
fdi2raw_log("s0a:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8));
|
||||
@@ -578,7 +577,8 @@ s0a(FDI *fdi)
|
||||
static void
|
||||
s0b(FDI *fdi)
|
||||
{
|
||||
int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536;
|
||||
int i;
|
||||
int bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536;
|
||||
uint8_t b;
|
||||
fdi->track_src += 2;
|
||||
fdi2raw_log("s0b:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8));
|
||||
@@ -599,7 +599,8 @@ s0b(FDI *fdi)
|
||||
static void
|
||||
s0c(FDI *fdi)
|
||||
{
|
||||
int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1];
|
||||
int i;
|
||||
int bits = (fdi->track_src[0] << 8) | fdi->track_src[1];
|
||||
uint8_t b;
|
||||
fdi->track_src += 2;
|
||||
bit_drop_next(fdi);
|
||||
@@ -621,7 +622,8 @@ s0c(FDI *fdi)
|
||||
static void
|
||||
s0d(FDI *fdi)
|
||||
{
|
||||
int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536;
|
||||
int i;
|
||||
int bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536;
|
||||
uint8_t b;
|
||||
fdi->track_src += 2;
|
||||
bit_drop_next(fdi);
|
||||
@@ -854,10 +856,11 @@ static void
|
||||
amiga_data(FDI *fdi, uint8_t *secbuf)
|
||||
{
|
||||
uint16_t mfmbuf[4 + 512];
|
||||
uint32_t dodd, deven, dck;
|
||||
int i;
|
||||
uint32_t dodd;
|
||||
uint32_t deven;
|
||||
uint32_t dck;
|
||||
|
||||
for (i = 0; i < 512; i += 4) {
|
||||
for (uint16_t i = 0; i < 512; i += 4) {
|
||||
deven = ((secbuf[i + 0] << 24) | (secbuf[i + 1] << 16)
|
||||
| (secbuf[i + 2] << 8) | (secbuf[i + 3]));
|
||||
dodd = deven >> 1;
|
||||
@@ -869,7 +872,7 @@ amiga_data(FDI *fdi, uint8_t *secbuf)
|
||||
mfmbuf[(i >> 1) + 256 + 5] = (uint16_t) deven;
|
||||
}
|
||||
dck = 0;
|
||||
for (i = 4; i < 4 + 512; i += 2)
|
||||
for (uint32_t i = 4; i < 4 + 512; i += 2)
|
||||
dck ^= (mfmbuf[i] << 16) | mfmbuf[i + 1];
|
||||
deven = dodd = dck;
|
||||
dodd >>= 1;
|
||||
@@ -880,17 +883,19 @@ amiga_data(FDI *fdi, uint8_t *secbuf)
|
||||
mfmbuf[2] = (uint16_t) (deven >> 16);
|
||||
mfmbuf[3] = (uint16_t) deven;
|
||||
|
||||
for (i = 0; i < 4 + 512; i++)
|
||||
for (uint32_t i = 0; i < 4 + 512; i++)
|
||||
word_post_mfm_add(fdi, mfmbuf[i]);
|
||||
}
|
||||
|
||||
static void
|
||||
amiga_sector_header(FDI *fdi, uint8_t *header, uint8_t *data, int sector, int untilgap)
|
||||
{
|
||||
uint8_t headerbuf[4], databuf[16];
|
||||
uint32_t deven, dodd, hck;
|
||||
uint8_t headerbuf[4];
|
||||
uint8_t databuf[16];
|
||||
uint32_t deven;
|
||||
uint32_t dodd;
|
||||
uint32_t hck;
|
||||
uint16_t mfmbuf[24];
|
||||
int i;
|
||||
|
||||
byte_mfm_add(fdi, 0);
|
||||
byte_mfm_add(fdi, 0);
|
||||
@@ -918,7 +923,7 @@ amiga_sector_header(FDI *fdi, uint8_t *header, uint8_t *data, int sector, int un
|
||||
mfmbuf[1] = (uint16_t) dodd;
|
||||
mfmbuf[2] = (uint16_t) (deven >> 16);
|
||||
mfmbuf[3] = (uint16_t) deven;
|
||||
for (i = 0; i < 16; i += 4) {
|
||||
for (uint8_t i = 0; i < 16; i += 4) {
|
||||
deven = ((databuf[i] << 24) | (databuf[i + 1] << 16)
|
||||
| (databuf[i + 2] << 8) | (databuf[i + 3]));
|
||||
dodd = deven >> 1;
|
||||
@@ -930,7 +935,7 @@ amiga_sector_header(FDI *fdi, uint8_t *header, uint8_t *data, int sector, int un
|
||||
mfmbuf[(i >> 1) + 8 + 5] = (uint16_t) deven;
|
||||
}
|
||||
hck = 0;
|
||||
for (i = 0; i < 4 + 16; i += 2)
|
||||
for (uint32_t i = 0; i < 4 + 16; i += 2)
|
||||
hck ^= (mfmbuf[i] << 16) | mfmbuf[i + 1];
|
||||
deven = dodd = hck;
|
||||
dodd >>= 1;
|
||||
@@ -941,7 +946,7 @@ amiga_sector_header(FDI *fdi, uint8_t *header, uint8_t *data, int sector, int un
|
||||
mfmbuf[22] = (uint16_t) (deven >> 16);
|
||||
mfmbuf[23] = (uint16_t) deven;
|
||||
|
||||
for (i = 0; i < 4 + 16 + 4; i++)
|
||||
for (uint32_t i = 0; i < 4 + 16 + 4; i++)
|
||||
word_post_mfm_add(fdi, mfmbuf[i]);
|
||||
}
|
||||
|
||||
@@ -1025,11 +1030,10 @@ static uint16_t
|
||||
ibm_crc(uint8_t byte, int reset)
|
||||
{
|
||||
static uint16_t crc;
|
||||
int i;
|
||||
|
||||
if (reset)
|
||||
crc = 0xcdb4;
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
if (crc & 0x8000) {
|
||||
crc <<= 1;
|
||||
if (!(byte & 0x80))
|
||||
@@ -1047,7 +1051,6 @@ ibm_crc(uint8_t byte, int reset)
|
||||
static void
|
||||
ibm_data(FDI *fdi, uint8_t *data, uint8_t *crc, int len)
|
||||
{
|
||||
int i;
|
||||
uint8_t crcbuf[2];
|
||||
uint16_t crcv = 0;
|
||||
|
||||
@@ -1056,7 +1059,7 @@ ibm_data(FDI *fdi, uint8_t *data, uint8_t *crc, int len)
|
||||
word_add(fdi, 0x4489);
|
||||
byte_mfm_add(fdi, 0xfb);
|
||||
ibm_crc(0xfb, 1);
|
||||
for (i = 0; i < len; i++) {
|
||||
for (int i = 0; i < len; i++) {
|
||||
byte_mfm_add(fdi, data[i]);
|
||||
crcv = ibm_crc(data[i], 0);
|
||||
}
|
||||
@@ -1075,7 +1078,6 @@ ibm_sector_header(FDI *fdi, uint8_t *data, uint8_t *crc, int secnum, int pre)
|
||||
uint8_t secbuf[5];
|
||||
uint8_t crcbuf[2];
|
||||
uint16_t crcv;
|
||||
int i;
|
||||
|
||||
if (pre)
|
||||
bytes_mfm_add(fdi, 0, 12);
|
||||
@@ -1103,7 +1105,7 @@ ibm_sector_header(FDI *fdi, uint8_t *data, uint8_t *crc, int secnum, int pre)
|
||||
crcbuf[1] = (uint8_t) crcv;
|
||||
}
|
||||
/* data */
|
||||
for (i = 0; i < 5; i++)
|
||||
for (uint8_t i = 0; i < 5; i++)
|
||||
byte_mfm_add(fdi, secbuf[i]);
|
||||
/* crc */
|
||||
byte_mfm_add(fdi, crcbuf[0]);
|
||||
@@ -1263,11 +1265,9 @@ static decode_described_track_func decode_sectors_described_track[] = {
|
||||
static void
|
||||
track_amiga(struct fdi *fdi, int first_sector, int max_sector)
|
||||
{
|
||||
int i;
|
||||
|
||||
bit_add(fdi, 0);
|
||||
bit_drop_next(fdi);
|
||||
for (i = 0; i < max_sector; i++) {
|
||||
for (int i = 0; i < max_sector; i++) {
|
||||
amiga_sector_header(fdi, 0, 0, first_sector, max_sector - i);
|
||||
amiga_data(fdi, fdi->track_src + first_sector * 512);
|
||||
first_sector++;
|
||||
@@ -1279,7 +1279,7 @@ track_amiga(struct fdi *fdi, int first_sector, int max_sector)
|
||||
static void
|
||||
track_atari_st(struct fdi *fdi, int max_sector)
|
||||
{
|
||||
int i, gap3 = 0;
|
||||
int gap3 = 0;
|
||||
uint8_t *p = fdi->track_src;
|
||||
|
||||
switch (max_sector) {
|
||||
@@ -1291,7 +1291,7 @@ track_atari_st(struct fdi *fdi, int max_sector)
|
||||
break;
|
||||
}
|
||||
s15(fdi);
|
||||
for (i = 0; i < max_sector; i++) {
|
||||
for (int i = 0; i < max_sector; i++) {
|
||||
byte_mfm_add(fdi, 0x4e);
|
||||
byte_mfm_add(fdi, 0x4e);
|
||||
ibm_sector_header(fdi, 0, 0, fdi->current_track, 1);
|
||||
@@ -1304,7 +1304,7 @@ track_atari_st(struct fdi *fdi, int max_sector)
|
||||
static void
|
||||
track_pc(struct fdi *fdi, int max_sector)
|
||||
{
|
||||
int i, gap3;
|
||||
int gap3;
|
||||
uint8_t *p = fdi->track_src;
|
||||
|
||||
switch (max_sector) {
|
||||
@@ -1319,7 +1319,7 @@ track_pc(struct fdi *fdi, int max_sector)
|
||||
break;
|
||||
}
|
||||
s11(fdi);
|
||||
for (i = 0; i < max_sector; i++) {
|
||||
for (int i = 0; i < max_sector; i++) {
|
||||
byte_mfm_add(fdi, 0x4e);
|
||||
byte_mfm_add(fdi, 0x4e);
|
||||
ibm_sector_header(fdi, 0, 0, fdi->current_track, 1);
|
||||
@@ -1402,9 +1402,15 @@ static decode_normal_track_func decode_normal_track[] = {
|
||||
static void
|
||||
fix_mfm_sync(FDI *fdi)
|
||||
{
|
||||
int i, pos, off1, off2, off3, mask1, mask2, mask3;
|
||||
int pos;
|
||||
int off1;
|
||||
int off2;
|
||||
int off3;
|
||||
int mask1;
|
||||
int mask2;
|
||||
int mask3;
|
||||
|
||||
for (i = 0; i < fdi->mfmsync_offset; i++) {
|
||||
for (int i = 0; i < fdi->mfmsync_offset; i++) {
|
||||
pos = fdi->mfmsync_buffer[i];
|
||||
off1 = (pos - 1) >> 3;
|
||||
off2 = (pos + 1) >> 3;
|
||||
@@ -1464,7 +1470,7 @@ fdi_decompress(int pulses, uint8_t *sizep, uint8_t *src, int *dofree)
|
||||
uint32_t *dst2;
|
||||
int len = size & 0x3fffff;
|
||||
uint8_t *dst;
|
||||
int mode = size >> 22, i;
|
||||
int mode = size >> 22;
|
||||
|
||||
*dofree = 0;
|
||||
if (mode == 0 && pulses * 2 > len)
|
||||
@@ -1472,7 +1478,7 @@ fdi_decompress(int pulses, uint8_t *sizep, uint8_t *src, int *dofree)
|
||||
if (mode == 0) {
|
||||
dst2 = (uint32_t *) src;
|
||||
dst = src;
|
||||
for (i = 0; i < pulses; i++) {
|
||||
for (int i = 0; i < pulses; i++) {
|
||||
*dst2++ = get_u32(src);
|
||||
src += 4;
|
||||
}
|
||||
@@ -1526,9 +1532,7 @@ static int totaldiv;
|
||||
static void
|
||||
init_array(uint32_t standard_MFM_2_bit_cell_size, int nb_of_bits)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < FDI_MAX_ARRAY; i++) {
|
||||
for (uint8_t i = 0; i < FDI_MAX_ARRAY; i++) {
|
||||
psarray[i].size = standard_MFM_2_bit_cell_size; /* That is (total track length / 50000) for Amiga double density */
|
||||
total += psarray[i].size;
|
||||
psarray[i].number_of_bits = nb_of_bits;
|
||||
@@ -1672,11 +1676,18 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_
|
||||
uint32_t adjusted_pulse;
|
||||
uint32_t standard_MFM_2_bit_cell_size = totalavg / 50000;
|
||||
uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500;
|
||||
int real_size, i, j, nexti, eodat, outstep, randval;
|
||||
int real_size;
|
||||
int i;
|
||||
int j;
|
||||
int nexti;
|
||||
int eodat;
|
||||
int outstep;
|
||||
int randval;
|
||||
int indexoffset = *indexoffsetp;
|
||||
uint8_t *d = fdi->track_dst_buffer;
|
||||
uint16_t *pt = fdi->track_dst_buffer_timing;
|
||||
uint32_t ref_pulse, pulse;
|
||||
uint32_t ref_pulse;
|
||||
uint32_t pulse;
|
||||
int32_t jitter;
|
||||
|
||||
/* detects a long-enough stable pulse coming just after another stable pulse */
|
||||
@@ -1714,7 +1725,9 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_
|
||||
/* gets the next long-enough pulse (this may require more than one pulse) */
|
||||
pulse = 0;
|
||||
while (pulse < ((avg_size / 4) - (avg_size / 16))) {
|
||||
uint32_t avg_pulse, min_pulse, max_pulse;
|
||||
uint32_t avg_pulse;
|
||||
uint32_t min_pulse;
|
||||
uint32_t max_pulse;
|
||||
i++;
|
||||
if (i >= pulses)
|
||||
i = 0;
|
||||
@@ -1742,7 +1755,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_
|
||||
randval = rand();
|
||||
if (randval < (RAND_MAX / 2)) {
|
||||
if (randval > (RAND_MAX / 4)) {
|
||||
if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8)))
|
||||
if (randval <= ((3LL * (uint64_t) RAND_MAX) / 8))
|
||||
randval = (2 * randval) - (RAND_MAX / 4);
|
||||
else
|
||||
randval = (4 * randval) - RAND_MAX;
|
||||
@@ -1751,7 +1764,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_
|
||||
} else {
|
||||
randval -= RAND_MAX / 2;
|
||||
if (randval > (RAND_MAX / 4)) {
|
||||
if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8)))
|
||||
if (randval <= ((3LL * (uint64_t) RAND_MAX) / 8))
|
||||
randval = (2 * randval) - (RAND_MAX / 4);
|
||||
else
|
||||
randval = (4 * randval) - RAND_MAX;
|
||||
@@ -1777,7 +1790,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_
|
||||
randval = rand();
|
||||
if (randval < (RAND_MAX / 2)) {
|
||||
if (randval > (RAND_MAX / 4)) {
|
||||
if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8)))
|
||||
if (randval <= ((3LL * (uint64_t) RAND_MAX) / 8))
|
||||
randval = (2 * randval) - (RAND_MAX / 4);
|
||||
else
|
||||
randval = (4 * randval) - RAND_MAX;
|
||||
@@ -1786,7 +1799,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_
|
||||
} else {
|
||||
randval -= RAND_MAX / 2;
|
||||
if (randval > (RAND_MAX / 4)) {
|
||||
if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8)))
|
||||
if (randval <= ((3LL * (uint64_t) RAND_MAX) / 8))
|
||||
randval = (2 * randval) - (RAND_MAX / 4);
|
||||
else
|
||||
randval = (4 * randval) - RAND_MAX;
|
||||
@@ -1899,14 +1912,14 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_
|
||||
static void
|
||||
fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uint16_t *out)
|
||||
{
|
||||
uint16_t *pt2, *pt;
|
||||
uint16_t *pt2;
|
||||
uint16_t *pt;
|
||||
double avg_bit_len;
|
||||
int i;
|
||||
|
||||
avg_bit_len = (double) totalavg / (double) bitoffset;
|
||||
pt2 = fdi->track_dst_buffer_timing;
|
||||
pt = out;
|
||||
for (i = 0; i < bitoffset / 8; i++) {
|
||||
for (int i = 0; i < bitoffset / 8; i++) {
|
||||
double v = (pt2[0] + pt2[1] + pt2[2] + pt2[3] + pt2[4] + pt2[5] + pt2[6] + pt2[7]) / 8.0;
|
||||
v = 1000.0 * v / avg_bit_len;
|
||||
*pt++ = (uint16_t) v;
|
||||
@@ -1921,12 +1934,25 @@ decode_lowlevel_track(FDI *fdi, int track, struct fdi_cache *cache)
|
||||
{
|
||||
uint8_t *p1;
|
||||
uint32_t *p2;
|
||||
uint32_t *avgp, *minp = 0, *maxp = 0;
|
||||
uint32_t *avgp;
|
||||
uint32_t *minp = 0;
|
||||
uint32_t *maxp = 0;
|
||||
uint8_t *idxp = 0;
|
||||
uint32_t maxidx, totalavg, weakbits;
|
||||
int i, j, len, pulses, indexoffset;
|
||||
int avg_free, min_free = 0, max_free = 0, idx_free;
|
||||
int idx_off1 = 0, idx_off2 = 0, idx_off3 = 0;
|
||||
uint32_t maxidx;
|
||||
uint32_t totalavg;
|
||||
uint32_t weakbits;
|
||||
int i;
|
||||
int j;
|
||||
int len;
|
||||
int pulses;
|
||||
int indexoffset;
|
||||
int avg_free;
|
||||
int min_free = 0;
|
||||
int max_free = 0;
|
||||
int idx_free;
|
||||
int idx_off1 = 0;
|
||||
int idx_off2 = 0;
|
||||
int idx_off3 = 0;
|
||||
|
||||
p1 = fdi->track_src;
|
||||
pulses = get_u32(p1);
|
||||
@@ -2056,13 +2082,11 @@ static int bit_rate_table[16] = { 125, 150, 250, 300, 500, 1000 };
|
||||
void
|
||||
fdi2raw_header_free(FDI *fdi)
|
||||
{
|
||||
int i;
|
||||
|
||||
fdi_free(fdi->mfmsync_buffer);
|
||||
fdi_free(fdi->track_src_buffer);
|
||||
fdi_free(fdi->track_dst_buffer);
|
||||
fdi_free(fdi->track_dst_buffer_timing);
|
||||
for (i = 0; i < MAX_TRACKS; i++) {
|
||||
for (uint8_t i = 0; i < MAX_TRACKS; i++) {
|
||||
struct fdi_cache *c = &fdi->cache[i];
|
||||
if (c->idx_free)
|
||||
fdi_free(c->idxp);
|
||||
@@ -2130,8 +2154,11 @@ fdi2raw_get_tpi(FDI *fdi)
|
||||
FDI *
|
||||
fdi2raw_header(FILE *f)
|
||||
{
|
||||
long i, offset, oldseek;
|
||||
uint8_t type, size;
|
||||
long i;
|
||||
long offset;
|
||||
long oldseek;
|
||||
uint8_t type;
|
||||
uint8_t size;
|
||||
FDI *fdi;
|
||||
|
||||
fdi2raw_log("ALLOC: memory allocated %d\n", fdi_allocated);
|
||||
@@ -2204,7 +2231,8 @@ static int
|
||||
fdi2raw_loadrevolution_2(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm)
|
||||
{
|
||||
struct fdi_cache *cache = &fdi->cache[track];
|
||||
int len, i, idx;
|
||||
int len;
|
||||
int idx;
|
||||
|
||||
memset(fdi->track_dst_buffer, 0, MAX_DST_BUFFER);
|
||||
idx = cache->indexoffset;
|
||||
@@ -2218,7 +2246,7 @@ fdi2raw_loadrevolution_2(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int
|
||||
*multirev = 1;
|
||||
*tracklength = len;
|
||||
|
||||
for (i = 0; i < (len + 15) / (2 * 8); i++) {
|
||||
for (int i = 0; i < (len + 15) / (2 * 8); i++) {
|
||||
uint8_t *data = fdi->track_dst_buffer + i * 2;
|
||||
*mfmbuf++ = 256 * *data + *(data + 1);
|
||||
}
|
||||
@@ -2239,7 +2267,7 @@ int
|
||||
fdi2raw_loadtrack(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm)
|
||||
{
|
||||
uint8_t *p;
|
||||
int outlen, i;
|
||||
int outlen;
|
||||
struct fdi_cache *cache = &fdi->cache[track];
|
||||
|
||||
track ^= fdi->reversed_side;
|
||||
@@ -2285,7 +2313,7 @@ fdi2raw_loadtrack(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track,
|
||||
|
||||
outlen = handle_sectors_described_track(fdi);
|
||||
|
||||
} else if ((fdi->track_type & 0xf0)) {
|
||||
} else if (fdi->track_type & 0xf0) {
|
||||
|
||||
zxx(fdi);
|
||||
outlen = -1;
|
||||
@@ -2309,7 +2337,7 @@ fdi2raw_loadtrack(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track,
|
||||
if (cache->lowlevel)
|
||||
return fdi2raw_loadrevolution_2(fdi, mfmbuf, tracktiming, track, tracklength, indexoffsetp, multirev, mfm);
|
||||
*tracklength = fdi->out;
|
||||
for (i = 0; i < ((*tracklength) + 15) / (2 * 8); i++) {
|
||||
for (int i = 0; i < ((*tracklength) + 15) / (2 * 8); i++) {
|
||||
uint8_t *data = fdi->track_dst_buffer + i * 2;
|
||||
*mfmbuf++ = 256 * *data + *(data + 1);
|
||||
}
|
||||
|
||||
@@ -154,8 +154,8 @@ typedef struct {
|
||||
|
||||
void *priv;
|
||||
|
||||
char fn[1024], /* Name of current image file */
|
||||
prev_fn[1024]; /* Name of previous image file */
|
||||
char fn[1024]; /* Name of current image file */
|
||||
char vhd_parent[1041]; /* Differential VHD parent file */
|
||||
|
||||
uint32_t res0, pad1,
|
||||
base,
|
||||
@@ -176,6 +176,7 @@ typedef struct {
|
||||
uint32_t cur_addr;
|
||||
|
||||
uint32_t speed_preset;
|
||||
uint32_t vhd_blocksize;
|
||||
|
||||
double avg_rotation_lat_usec;
|
||||
double full_stroke_usec;
|
||||
|
||||
@@ -163,6 +163,8 @@
|
||||
# define IDS_DYNAREC IDS_2163
|
||||
#endif
|
||||
#define IDS_2166 2166 // "Video card #2 ""%hs"" is not..."
|
||||
#define IDS_2167 2167 // "Network driver initialization failed"
|
||||
#define IDS_2168 2168 // "The network configuration will be switched to the null driver"
|
||||
|
||||
#define IDS_4096 4096 // "Hard disk (%s)"
|
||||
#define IDS_4097 4097 // "%01i:%01i"
|
||||
@@ -271,7 +273,7 @@
|
||||
|
||||
#define IDS_LANG_ENUS IDS_7168
|
||||
|
||||
#define STR_NUM_2048 118
|
||||
#define STR_NUM_2048 120
|
||||
// UNUSED: #define STR_NUM_3072 11
|
||||
#define STR_NUM_4096 40
|
||||
#define STR_NUM_4352 6
|
||||
|
||||
@@ -64,6 +64,9 @@
|
||||
#define NET_PERIOD_10M 0.8
|
||||
#define NET_PERIOD_100M 0.08
|
||||
|
||||
/* Error buffers for network driver init */
|
||||
#define NET_DRV_ERRBUF_SIZE 384
|
||||
|
||||
enum {
|
||||
NET_LINK_DOWN = (1 << 1),
|
||||
NET_LINK_TEMP_DOWN = (1 << 2),
|
||||
@@ -118,7 +121,7 @@ typedef struct _netcard_t netcard_t;
|
||||
|
||||
typedef struct netdrv_t {
|
||||
void (*notify_in)(void *priv);
|
||||
void *(*init)(const netcard_t *card, const uint8_t *mac_addr, void *priv);
|
||||
void *(*init)(const netcard_t *card, const uint8_t *mac_addr, void *priv, char *netdrv_errbuf);
|
||||
void (*close)(void *priv);
|
||||
void *priv;
|
||||
} netdrv_t;
|
||||
|
||||
@@ -23,7 +23,7 @@ typedef struct {
|
||||
uint8_t m, ctrl,
|
||||
read_status, latch,
|
||||
s1_det, l_det,
|
||||
bcd, pad;
|
||||
bcd, incomplete;
|
||||
|
||||
uint16_t rl;
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ uint8_t
|
||||
log2i(uint32_t i)
|
||||
{
|
||||
uint8_t ret = 0;
|
||||
while ((i >>= 1))
|
||||
while (i >>= 1)
|
||||
ret++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -282,8 +282,9 @@ flash_writel(uint32_t addr, uint32_t val, void *p)
|
||||
static void
|
||||
intel_flash_add_mappings(flash_t *dev)
|
||||
{
|
||||
int max = 2, i = 0;
|
||||
uint32_t base, fbase;
|
||||
int max = 2;
|
||||
uint32_t base;
|
||||
uint32_t fbase;
|
||||
uint32_t sub = 0x20000;
|
||||
|
||||
if (biosmask == 0x7ffff) {
|
||||
@@ -294,7 +295,7 @@ intel_flash_add_mappings(flash_t *dev)
|
||||
max = 4;
|
||||
}
|
||||
|
||||
for (i = 0; i < max; i++) {
|
||||
for (int i = 0; i < max; i++) {
|
||||
if (biosmask == 0x7ffff)
|
||||
base = 0x80000 + (i << 16);
|
||||
else if (biosmask == 0x3ffff)
|
||||
|
||||
@@ -90,12 +90,11 @@ FILE *
|
||||
rom_fopen(const char *fn, char *mode)
|
||||
{
|
||||
char temp[1024];
|
||||
rom_path_t *rom_path;
|
||||
FILE *fp = NULL;
|
||||
|
||||
if (strstr(fn, "roms/") == fn) {
|
||||
/* Relative path */
|
||||
for (rom_path = &rom_paths; rom_path != NULL; rom_path = rom_path->next) {
|
||||
for (rom_path_t *rom_path = &rom_paths; rom_path != NULL; rom_path = rom_path->next) {
|
||||
path_append_filename(temp, rom_path->path, fn + 5);
|
||||
|
||||
if ((fp = plat_fopen(temp, mode)) != NULL) {
|
||||
@@ -114,11 +113,10 @@ int
|
||||
rom_getfile(char *fn, char *s, int size)
|
||||
{
|
||||
char temp[1024];
|
||||
rom_path_t *rom_path;
|
||||
|
||||
if (strstr(fn, "roms/") == fn) {
|
||||
/* Relative path */
|
||||
for (rom_path = &rom_paths; rom_path != NULL; rom_path = rom_path->next) {
|
||||
for (rom_path_t *rom_path = &rom_paths; rom_path != NULL; rom_path = rom_path->next) {
|
||||
path_append_filename(temp, rom_path->path, fn + 5);
|
||||
|
||||
if (rom_present(temp)) {
|
||||
@@ -147,10 +145,10 @@ rom_present(char *fn)
|
||||
f = rom_fopen(fn, "rb");
|
||||
if (f != NULL) {
|
||||
(void) fclose(f);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
@@ -212,7 +210,7 @@ rom_load_linear_oddeven(const char *fn, uint32_t addr, int sz, int off, uint8_t
|
||||
|
||||
if (f == NULL) {
|
||||
rom_log("ROM: image '%s' not found\n", fn);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Make sure we only look at the base-256K offset. */
|
||||
@@ -236,7 +234,7 @@ rom_load_linear_oddeven(const char *fn, uint32_t addr, int sz, int off, uint8_t
|
||||
|
||||
(void) fclose(f);
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Load a ROM BIOS from its chips, interleaved mode. */
|
||||
@@ -247,7 +245,7 @@ rom_load_linear(const char *fn, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
|
||||
if (f == NULL) {
|
||||
rom_log("ROM: image '%s' not found\n", fn);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Make sure we only look at the base-256K offset. */
|
||||
@@ -265,7 +263,7 @@ rom_load_linear(const char *fn, uint32_t addr, int sz, int off, uint8_t *ptr)
|
||||
|
||||
(void) fclose(f);
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Load a ROM BIOS from its chips, linear mode with high bit flipped. */
|
||||
@@ -276,7 +274,7 @@ rom_load_linear_inverted(const char *fn, uint32_t addr, int sz, int off, uint8_t
|
||||
|
||||
if (f == NULL) {
|
||||
rom_log("ROM: image '%s' not found\n", fn);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Make sure we only look at the base-256K offset. */
|
||||
@@ -289,7 +287,7 @@ rom_load_linear_inverted(const char *fn, uint32_t addr, int sz, int off, uint8_t
|
||||
(void) fseek(f, 0, SEEK_END);
|
||||
if (ftell(f) < sz) {
|
||||
(void) fclose(f);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ptr != NULL) {
|
||||
@@ -303,7 +301,7 @@ rom_load_linear_inverted(const char *fn, uint32_t addr, int sz, int off, uint8_t
|
||||
|
||||
(void) fclose(f);
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Load a ROM BIOS from its chips, interleaved mode. */
|
||||
@@ -312,7 +310,6 @@ rom_load_interleaved(const char *fnl, const char *fnh, uint32_t addr, int sz, in
|
||||
{
|
||||
FILE *fl = rom_fopen(fnl, "rb");
|
||||
FILE *fh = rom_fopen(fnh, "rb");
|
||||
int c;
|
||||
|
||||
if (fl == NULL || fh == NULL) {
|
||||
if (fl == NULL)
|
||||
@@ -324,7 +321,7 @@ rom_load_interleaved(const char *fnl, const char *fnh, uint32_t addr, int sz, in
|
||||
else
|
||||
(void) fclose(fh);
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Make sure we only look at the base-256K offset. */
|
||||
@@ -337,7 +334,7 @@ rom_load_interleaved(const char *fnl, const char *fnh, uint32_t addr, int sz, in
|
||||
if (ptr != NULL) {
|
||||
(void) fseek(fl, off, SEEK_SET);
|
||||
(void) fseek(fh, off, SEEK_SET);
|
||||
for (c = 0; c < sz; c += 2) {
|
||||
for (int c = 0; c < sz; c += 2) {
|
||||
ptr[addr + c] = fgetc(fl) & 0xff;
|
||||
ptr[addr + c + 1] = fgetc(fh) & 0xff;
|
||||
}
|
||||
@@ -346,7 +343,7 @@ rom_load_interleaved(const char *fnl, const char *fnh, uint32_t addr, int sz, in
|
||||
(void) fclose(fh);
|
||||
(void) fclose(fl);
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -428,8 +425,10 @@ bios_readl(uint32_t addr, void *priv)
|
||||
static void
|
||||
bios_add(void)
|
||||
{
|
||||
int temp_cpu_type, temp_cpu_16bitbus = 1;
|
||||
int temp_is286 = 0, temp_is6117 = 0;
|
||||
int temp_cpu_type;
|
||||
int temp_cpu_16bitbus = 1;
|
||||
int temp_is286 = 0;
|
||||
int temp_is6117 = 0;
|
||||
|
||||
if (/*AT && */ cpu_s) {
|
||||
temp_cpu_type = cpu_s->cpu_type;
|
||||
@@ -482,7 +481,7 @@ bios_load(const char *fn1, const char *fn2, uint32_t addr, int sz, int off, int
|
||||
{
|
||||
uint8_t ret = 0;
|
||||
uint8_t *ptr = NULL;
|
||||
int i, old_sz = sz;
|
||||
int old_sz = sz;
|
||||
|
||||
/*
|
||||
f0000, 65536 = prepare 64k rom starting at f0000, load 64k bios at 0000
|
||||
@@ -512,7 +511,7 @@ bios_load(const char *fn1, const char *fn2, uint32_t addr, int sz, int off, int
|
||||
|
||||
if (!bios_only && (flags & FLAG_REP) && (old_sz >= 65536) && (sz < old_sz)) {
|
||||
old_sz /= sz;
|
||||
for (i = 0; i < (old_sz - 1); i++) {
|
||||
for (int i = 0; i < (old_sz - 1); i++) {
|
||||
rom_log("Copying ptr[%08X] to ptr[%08X]\n", addr - biosaddr, i * sz);
|
||||
memcpy(&(ptr[i * sz]), &(ptr[addr - biosaddr]), sz);
|
||||
}
|
||||
@@ -591,7 +590,7 @@ rom_init(rom_t *rom, const char *fn, uint32_t addr, int sz, int mask, int off, u
|
||||
NULL, NULL, NULL,
|
||||
rom->rom, flags | MEM_MAPPING_ROM_WS, rom);
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -620,7 +619,7 @@ rom_init_oddeven(rom_t *rom, const char *fn, uint32_t addr, int sz, int mask, in
|
||||
NULL, NULL, NULL,
|
||||
rom->rom, flags | MEM_MAPPING_ROM_WS, rom);
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -647,5 +646,5 @@ rom_init_interleaved(rom_t *rom, const char *fnl, const char *fnh, uint32_t addr
|
||||
NULL, NULL, NULL,
|
||||
rom->rom, flags | MEM_MAPPING_ROM_WS, rom);
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
#include <86box/mem.h>
|
||||
#include <86box/smram.h>
|
||||
|
||||
static smram_t *base_smram, *last_smram;
|
||||
static smram_t *base_smram;
|
||||
static smram_t *last_smram;
|
||||
|
||||
static uint8_t use_separate_smram = 0;
|
||||
static uint8_t smram[0x40000];
|
||||
@@ -135,7 +136,8 @@ smram_writel(uint32_t addr, uint32_t val, void *priv)
|
||||
void
|
||||
smram_backup_all(void)
|
||||
{
|
||||
smram_t *temp_smram = base_smram, *next;
|
||||
smram_t *temp_smram = base_smram;
|
||||
smram_t *next;
|
||||
|
||||
while (temp_smram != NULL) {
|
||||
temp_smram->old_host_base = temp_smram->host_base;
|
||||
@@ -150,7 +152,8 @@ smram_backup_all(void)
|
||||
void
|
||||
smram_recalc_all(int ret)
|
||||
{
|
||||
smram_t *temp_smram = base_smram, *next;
|
||||
smram_t *temp_smram = base_smram;
|
||||
smram_t *next;
|
||||
|
||||
if (base_smram == NULL)
|
||||
return;
|
||||
@@ -316,7 +319,8 @@ smram_disable(smram_t *smr)
|
||||
void
|
||||
smram_disable_all(void)
|
||||
{
|
||||
smram_t *temp_smram = base_smram, *next;
|
||||
smram_t *temp_smram = base_smram;
|
||||
smram_t *next;
|
||||
|
||||
while (temp_smram != NULL) {
|
||||
smram_disable(temp_smram);
|
||||
@@ -339,7 +343,7 @@ smram_enable_ex(smram_t *smr, uint32_t host_base, uint32_t ram_base, uint32_t si
|
||||
|
||||
if ((size != 0x00000000) && (flags_normal || flags_smm)) {
|
||||
smr->host_base = host_base;
|
||||
smr->ram_base = ram_base,
|
||||
smr->ram_base = ram_base;
|
||||
smr->size = size;
|
||||
|
||||
mem_mapping_set_addr(&(smr->mapping), smr->host_base, smr->size);
|
||||
|
||||
@@ -92,7 +92,9 @@ comp_ui16_rev(const void *elem1, const void *elem2)
|
||||
void
|
||||
spd_populate(uint16_t *rows, uint8_t slot_count, uint16_t total_size, uint16_t min_module_size, uint16_t max_module_size, uint8_t enable_asym)
|
||||
{
|
||||
uint8_t row, next_empty_row, split, i;
|
||||
uint8_t row;
|
||||
uint8_t next_empty_row;
|
||||
uint8_t split;
|
||||
uint16_t asym;
|
||||
|
||||
/* Populate rows with modules in power-of-2 capacities. */
|
||||
@@ -138,7 +140,7 @@ spd_populate(uint16_t *rows, uint8_t slot_count, uint16_t total_size, uint16_t m
|
||||
|
||||
/* Find next empty row. */
|
||||
next_empty_row = 0;
|
||||
for (i = row + 1; i < slot_count && !next_empty_row; i++) {
|
||||
for (uint8_t i = row + 1; i < slot_count && !next_empty_row; i++) {
|
||||
if (!rows[i])
|
||||
next_empty_row = i;
|
||||
}
|
||||
@@ -176,8 +178,13 @@ spd_write_part_no(char *part_no, char *type, uint16_t size)
|
||||
void
|
||||
spd_register(uint8_t ram_type, uint8_t slot_mask, uint16_t max_module_size)
|
||||
{
|
||||
uint8_t slot, slot_count, row, i;
|
||||
uint16_t min_module_size, rows[SPD_MAX_SLOTS], asym;
|
||||
uint8_t slot;
|
||||
uint8_t slot_count;
|
||||
uint8_t row;
|
||||
uint8_t i;
|
||||
uint16_t min_module_size;
|
||||
uint16_t rows[SPD_MAX_SLOTS];
|
||||
uint16_t asym;
|
||||
spd_edo_t *edo_data;
|
||||
spd_sdram_t *sdram_data;
|
||||
|
||||
@@ -336,8 +343,11 @@ spd_register(uint8_t ram_type, uint8_t slot_mask, uint16_t max_module_size)
|
||||
void
|
||||
spd_write_drbs(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint8_t drb_unit)
|
||||
{
|
||||
uint8_t row, dimm, drb, apollo = 0;
|
||||
uint16_t size, rows[SPD_MAX_SLOTS];
|
||||
uint8_t dimm;
|
||||
uint8_t drb;
|
||||
uint8_t apollo = 0;
|
||||
uint16_t size;
|
||||
uint16_t rows[SPD_MAX_SLOTS];
|
||||
|
||||
/* Special case for VIA Apollo Pro family, which jumps from 5F to 56. */
|
||||
if (reg_max < reg_min) {
|
||||
@@ -353,7 +363,7 @@ spd_write_drbs(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint8_t drb_unit
|
||||
|
||||
/* Write DRBs for each row. */
|
||||
spd_log("SPD: Writing DRBs... regs=[%02X:%02X] unit=%d\n", reg_min, reg_max, drb_unit);
|
||||
for (row = 0; row <= (reg_max - reg_min); row++) {
|
||||
for (uint8_t row = 0; row <= (reg_max - reg_min); row++) {
|
||||
dimm = (row >> 1);
|
||||
size = 0;
|
||||
|
||||
@@ -392,8 +402,11 @@ spd_write_drbs(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint8_t drb_unit
|
||||
void
|
||||
spd_write_drbs_with_ext(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint8_t drb_unit)
|
||||
{
|
||||
uint8_t row, dimm, drb;
|
||||
uint16_t size, row_val = 0, rows[SPD_MAX_SLOTS];
|
||||
uint8_t dimm;
|
||||
uint8_t drb;
|
||||
uint16_t size;
|
||||
uint16_t row_val = 0;
|
||||
uint16_t rows[SPD_MAX_SLOTS];
|
||||
int shift;
|
||||
|
||||
/* No SPD: split SIMMs into pairs as if they were "DIMM"s. */
|
||||
@@ -404,7 +417,7 @@ spd_write_drbs_with_ext(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint8_t
|
||||
|
||||
/* Write DRBs for each row. */
|
||||
spd_log("SPD: Writing DRBs... regs=[%02X:%02X] unit=%d\n", reg_min, reg_max, drb_unit);
|
||||
for (row = 0; row <= (reg_max - reg_min); row++) {
|
||||
for (uint8_t row = 0; row <= (reg_max - reg_min); row++) {
|
||||
dimm = (row >> 1);
|
||||
size = 0;
|
||||
|
||||
@@ -441,9 +454,10 @@ spd_write_drbs_with_ext(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint8_t
|
||||
void
|
||||
spd_write_drbs_interleaved(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint8_t drb_unit)
|
||||
{
|
||||
uint8_t row, dimm;
|
||||
uint8_t dimm;
|
||||
uint8_t drb;
|
||||
uint16_t size, size_acc = 0;
|
||||
uint16_t size;
|
||||
uint16_t size_acc = 0;
|
||||
uint16_t rows[SPD_MAX_SLOTS];
|
||||
|
||||
/* No SPD: split SIMMs into pairs as if they were "DIMM"s. */
|
||||
@@ -454,7 +468,7 @@ spd_write_drbs_interleaved(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint
|
||||
|
||||
/* Write DRBs for each row. */
|
||||
spd_log("SPD: Writing DRBs... regs=[%02X:%02X] unit=%d\n", reg_min, reg_max, drb_unit);
|
||||
for (row = 0; row <= (reg_max - reg_min); row += 2) {
|
||||
for (uint8_t row = 0; row <= (reg_max - reg_min); row += 2) {
|
||||
dimm = (row >> 2);
|
||||
size = 0;
|
||||
|
||||
@@ -493,7 +507,8 @@ spd_write_drbs_interleaved(uint8_t *regs, uint8_t reg_min, uint8_t reg_max, uint
|
||||
void
|
||||
spd_write_drbs_ali1621(uint8_t *regs, uint8_t reg_min, uint8_t reg_max)
|
||||
{
|
||||
uint8_t dimm, drb;
|
||||
uint8_t dimm;
|
||||
uint8_t drb;
|
||||
uint16_t size;
|
||||
uint16_t rows[SPD_MAX_SLOTS];
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ static char flash_path[1024];
|
||||
#define SST39LF080 0xd800
|
||||
#define SST39LF016 0xd900
|
||||
|
||||
/*
|
||||
#if 0
|
||||
// 16 wide
|
||||
#define SST39WF400 0x272f
|
||||
#define SST39WF400B 0x272e
|
||||
@@ -103,7 +103,7 @@ static char flash_path[1024];
|
||||
#define SST39LF400 0x2780
|
||||
#define SST39LF800 0x2781
|
||||
#define SST39LF160 0x2782
|
||||
*/
|
||||
#endif
|
||||
|
||||
#define SST49LF002 0x5700
|
||||
#define SST49LF020 0x6100
|
||||
@@ -150,7 +150,8 @@ sst_sector_erase(sst_t *dev, uint32_t addr)
|
||||
static void
|
||||
sst_new_command(sst_t *dev, uint32_t addr, uint8_t val)
|
||||
{
|
||||
uint32_t base = 0x00000, size = dev->size;
|
||||
uint32_t base = 0x00000;
|
||||
uint32_t size = dev->size;
|
||||
|
||||
if (dev->command_state == 5)
|
||||
switch (val) {
|
||||
@@ -230,11 +231,10 @@ static void
|
||||
sst_page_write(void *priv)
|
||||
{
|
||||
sst_t *dev = (sst_t *) priv;
|
||||
int i;
|
||||
|
||||
if (dev->last_addr != 0xffffffff) {
|
||||
dev->page_base = dev->last_addr & dev->page_mask;
|
||||
for (i = 0; i < 128; i++) {
|
||||
for (uint8_t i = 0; i < 128; i++) {
|
||||
if (dev->page_dirty[i]) {
|
||||
if (((dev->page_base + i) < 0x2000) && (dev->bbp_first_8k & 0x01))
|
||||
continue;
|
||||
@@ -419,14 +419,15 @@ sst_readl(uint32_t addr, void *p)
|
||||
static void
|
||||
sst_add_mappings(sst_t *dev)
|
||||
{
|
||||
int i = 0, count;
|
||||
uint32_t base, fbase;
|
||||
int count;
|
||||
uint32_t base;
|
||||
uint32_t fbase;
|
||||
uint32_t root_base;
|
||||
|
||||
count = dev->size >> 16;
|
||||
root_base = 0x100000 - dev->size;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
for (int i = 0; i < count; i++) {
|
||||
base = root_base + (i << 16);
|
||||
fbase = base & biosmask;
|
||||
|
||||
|
||||
@@ -252,7 +252,6 @@ void mtr_init(const char *json_file) {
|
||||
}
|
||||
|
||||
void mtr_shutdown(void) {
|
||||
int i;
|
||||
#ifndef MTR_ENABLED
|
||||
return;
|
||||
#endif
|
||||
@@ -266,7 +265,7 @@ void mtr_shutdown(void) {
|
||||
f = 0;
|
||||
free(event_buffer);
|
||||
event_buffer = 0;
|
||||
for (i = 0; i < STRING_POOL_SIZE; i++) {
|
||||
for (uint8_t i = 0; i < STRING_POOL_SIZE; i++) {
|
||||
if (str_pool[i]) {
|
||||
free(str_pool[i]);
|
||||
str_pool[i] = 0;
|
||||
@@ -275,8 +274,7 @@ void mtr_shutdown(void) {
|
||||
}
|
||||
|
||||
const char *mtr_pool_string(const char *str) {
|
||||
int i;
|
||||
for (i = 0; i < STRING_POOL_SIZE; i++) {
|
||||
for (uint8_t i = 0; i < STRING_POOL_SIZE; i++) {
|
||||
if (!str_pool[i]) {
|
||||
str_pool[i] = (char*)malloc(strlen(str) + 1);
|
||||
strcpy(str_pool[i], str);
|
||||
|
||||
@@ -473,7 +473,9 @@ static int
|
||||
elnkReceiveLocked(void *priv, uint8_t *src, int size)
|
||||
{
|
||||
threec501_t *dev = (threec501_t *) priv;
|
||||
int is_padr = 0, is_bcast = 0, is_mcast = 0;
|
||||
int is_padr = 0;
|
||||
int is_bcast = 0;
|
||||
int is_mcast = 0;
|
||||
bool fLoopback = dev->RcvCmd.adr_match == EL_BCTL_LOOPBACK;
|
||||
|
||||
union {
|
||||
@@ -644,7 +646,7 @@ elnkAsyncTransmit(threec501_t *dev)
|
||||
return;
|
||||
}
|
||||
|
||||
if (((dev->AuxCmd.buf_ctl != EL_BCTL_XMT_RCV) && (dev->AuxCmd.buf_ctl != EL_BCTL_LOOPBACK))) {
|
||||
if ((dev->AuxCmd.buf_ctl != EL_BCTL_XMT_RCV) && (dev->AuxCmd.buf_ctl != EL_BCTL_LOOPBACK)) {
|
||||
#ifdef ENABLE_3COM501_LOG
|
||||
threec501_log("3Com501: Nope, not in xmit-then-receive or loopback state\n");
|
||||
#endif
|
||||
@@ -656,8 +658,8 @@ elnkAsyncTransmit(threec501_t *dev)
|
||||
*/
|
||||
do {
|
||||
/* Don't send anything when the link is down. */
|
||||
if ((!elnkIsLinkUp(dev)
|
||||
&& dev->cLinkDownReported > ELNK_MAX_LINKDOWN_REPORTED))
|
||||
if (!elnkIsLinkUp(dev)
|
||||
&& dev->cLinkDownReported > ELNK_MAX_LINKDOWN_REPORTED)
|
||||
break;
|
||||
|
||||
bool const fLoopback = dev->AuxCmd.buf_ctl == EL_BCTL_LOOPBACK;
|
||||
@@ -925,7 +927,7 @@ threec501_read(uint16_t addr, void *priv)
|
||||
#ifdef ENABLE_3COM501_LOG
|
||||
threec501_log("3Com501: read addr %x, value %x\n", addr & 0x0f, retval);
|
||||
#endif
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -1130,7 +1132,7 @@ threec501_nic_init(const device_t *info)
|
||||
|
||||
timer_add(&dev->timer_restore, elnkR3TimerRestore, dev, 0);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -239,7 +239,7 @@ threec503_nic_lo_read(uint16_t addr, void *priv)
|
||||
break;
|
||||
}
|
||||
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -611,7 +611,7 @@ threec503_nic_init(const device_t *info)
|
||||
/* Attach ourselves to the network module. */
|
||||
dev->dp8390->card = network_attach(dev->dp8390, dev->dp8390->physaddr, dp8390_rx, NULL);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -63,13 +63,13 @@ mcast_index(const void *dst)
|
||||
{
|
||||
#define POLYNOMIAL 0x04c11db6
|
||||
uint32_t crc = 0xffffffffL;
|
||||
int carry, i, j;
|
||||
int carry;
|
||||
uint8_t b;
|
||||
uint8_t *ep = (uint8_t *) dst;
|
||||
|
||||
for (i = 6; --i >= 0;) {
|
||||
for (int8_t i = 6; --i >= 0;) {
|
||||
b = *ep++;
|
||||
for (j = 8; --j >= 0;) {
|
||||
for (int8_t j = 8; --j >= 0;) {
|
||||
carry = ((crc & 0x80000000L) ? 1 : 0) ^ (b & 0x01);
|
||||
crc <<= 1;
|
||||
b >>= 1;
|
||||
@@ -93,7 +93,6 @@ mcast_index(const void *dst)
|
||||
uint32_t
|
||||
dp8390_chipmem_read(dp8390_t *dev, uint32_t addr, unsigned int len)
|
||||
{
|
||||
int i;
|
||||
uint32_t retval = 0;
|
||||
|
||||
#ifdef ENABLE_DP8390_LOG
|
||||
@@ -104,7 +103,7 @@ dp8390_chipmem_read(dp8390_t *dev, uint32_t addr, unsigned int len)
|
||||
dp8390_log("DP8390: Chipmem Read Address=%04x\n", addr);
|
||||
|
||||
/* ROM'd MAC address */
|
||||
for (i = 0; i < len; i++) {
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
if ((addr >= dev->mem_start) && (addr < dev->mem_end))
|
||||
retval |= (uint32_t) (dev->mem[addr - dev->mem_start]) << (i << 3);
|
||||
else if (addr < dev->macaddr_size)
|
||||
@@ -116,14 +115,12 @@ dp8390_chipmem_read(dp8390_t *dev, uint32_t addr, unsigned int len)
|
||||
addr++;
|
||||
}
|
||||
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
dp8390_chipmem_write(dp8390_t *dev, uint32_t addr, uint32_t val, unsigned len)
|
||||
{
|
||||
int i;
|
||||
|
||||
#ifdef ENABLE_DP8390_LOG
|
||||
if ((len > 1) && (addr & (len - 1)))
|
||||
dp8390_log("DP8390: unaligned chipmem word write\n");
|
||||
@@ -131,7 +128,7 @@ dp8390_chipmem_write(dp8390_t *dev, uint32_t addr, uint32_t val, unsigned len)
|
||||
|
||||
dp8390_log("DP8390: Chipmem Write Address=%04x\n", addr);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
if ((addr < dev->mem_start) || (addr >= dev->mem_end)) {
|
||||
dp8390_log("DP8390: out-of-bounds chipmem write, %04X\n", addr);
|
||||
return;
|
||||
@@ -152,7 +149,7 @@ dp8390_read_cr(dp8390_t *dev)
|
||||
retval = (((dev->CR.pgsel & 0x03) << 6) | ((dev->CR.rdma_cmd & 0x07) << 3) | (dev->CR.tx_packet << 2) | (dev->CR.start << 1) | (dev->CR.stop));
|
||||
dp8390_log("DP8390: read CR returns 0x%02x\n", retval);
|
||||
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -270,8 +267,10 @@ dp8390_rx_common(void *priv, uint8_t *buf, int io_len)
|
||||
static uint8_t bcast_addr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
uint8_t pkthdr[4];
|
||||
uint8_t *startptr;
|
||||
int pages, avail;
|
||||
int idx, nextpage;
|
||||
int pages;
|
||||
int avail;
|
||||
int idx;
|
||||
int nextpage;
|
||||
int endbytes;
|
||||
|
||||
if (io_len != 60)
|
||||
@@ -427,7 +426,7 @@ dp8390_page0_read(dp8390_t *dev, uint32_t off, unsigned int len)
|
||||
/* encountered with win98 hardware probe */
|
||||
dp8390_log("DP8390: bad length! Page0 read from register 0x%02x, len=%u\n",
|
||||
off, len);
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
switch (off) {
|
||||
@@ -503,7 +502,7 @@ dp8390_page0_read(dp8390_t *dev, uint32_t off, unsigned int len)
|
||||
dp8390_log("DP8390: Page0 read from register 0x%02x, value=0x%02x\n", off,
|
||||
retval);
|
||||
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -730,7 +729,7 @@ dp8390_page1_read(dp8390_t *dev, uint32_t off, unsigned int len)
|
||||
default:
|
||||
dp8390_log("DP8390: Page1 read register 0x%02x out of range\n",
|
||||
off);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -812,7 +811,7 @@ dp8390_page2_read(dp8390_t *dev, uint32_t off, unsigned int len)
|
||||
case 0x0b:
|
||||
dp8390_log("DP8390: reserved Page2 read - register 0x%02x\n",
|
||||
off);
|
||||
return (0xff);
|
||||
return 0xff;
|
||||
|
||||
case 0x0c: /* RCR */
|
||||
return ((dev->RCR.monitor << 5) | (dev->RCR.promisc << 4) | (dev->RCR.multicast << 3) | (dev->RCR.broadcast << 2) | (dev->RCR.runts_ok << 1) | (dev->RCR.errors_ok));
|
||||
@@ -832,7 +831,7 @@ dp8390_page2_read(dp8390_t *dev, uint32_t off, unsigned int len)
|
||||
break;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -931,7 +930,8 @@ dp8390_set_id(dp8390_t *dev, uint8_t id0, uint8_t id1)
|
||||
void
|
||||
dp8390_reset(dp8390_t *dev)
|
||||
{
|
||||
int i, max, shift = 0;
|
||||
int max;
|
||||
int shift = 0;
|
||||
|
||||
if (dev->flags & DP8390_FLAG_EVEN_MAC)
|
||||
shift = 1;
|
||||
@@ -939,7 +939,7 @@ dp8390_reset(dp8390_t *dev)
|
||||
max = 16 << shift;
|
||||
|
||||
/* Initialize the MAC address area by doubling the physical address */
|
||||
for (i = 0; i < max; i++) {
|
||||
for (int i = 0; i < max; i++) {
|
||||
if (i < (6 << shift))
|
||||
dev->macaddr[i] = dev->physaddr[i >> shift];
|
||||
else /* Signature */
|
||||
|
||||
@@ -251,7 +251,7 @@ asic_read(nic_t *dev, uint32_t off, unsigned int len)
|
||||
break;
|
||||
}
|
||||
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -316,7 +316,7 @@ page3_read(nic_t *dev, uint32_t off, unsigned int len)
|
||||
return (dev->_9346cr);
|
||||
|
||||
case 0x3: /* CONFIG0 */
|
||||
return (0x00); /* Cable not BNC */
|
||||
return 0x00; /* Cable not BNC */
|
||||
|
||||
case 0x5: /* CONFIG2 */
|
||||
return (dev->config2 & 0xe0);
|
||||
@@ -329,12 +329,12 @@ page3_read(nic_t *dev, uint32_t off, unsigned int len)
|
||||
|
||||
case 0xe: /* 8029ASID0 */
|
||||
if (dev->board == NE2K_RTL8029AS)
|
||||
return (0x29);
|
||||
return 0x29;
|
||||
break;
|
||||
|
||||
case 0xf: /* 8029ASID1 */
|
||||
if (dev->board == NE2K_RTL8029AS)
|
||||
return (0x80);
|
||||
return 0x80;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -342,7 +342,7 @@ page3_read(nic_t *dev, uint32_t off, unsigned int len)
|
||||
}
|
||||
|
||||
nelog(3, "%s: Page3 read register 0x%02x attempted\n", dev->name, off);
|
||||
return (0x00);
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -409,7 +409,7 @@ nic_read(nic_t *dev, uint32_t addr, unsigned len)
|
||||
break;
|
||||
}
|
||||
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -711,7 +711,7 @@ nic_pci_read(int func, int addr, void *priv)
|
||||
|
||||
nelog(2, "%s: PCI_Read(%d, %04x) = %02x\n", dev->name, func, addr, ret);
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1095,7 +1095,7 @@ nic_init(const device_t *info)
|
||||
nelog(1, "%s: %s attached IO=0x%X IRQ=%d\n", dev->name,
|
||||
dev->is_pci ? "PCI" : "ISA", dev->base_address, dev->base_irq);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -158,7 +158,7 @@ net_null_thread(void *priv)
|
||||
#endif
|
||||
|
||||
void *
|
||||
net_null_init(const netcard_t *card, const uint8_t *mac_addr, void *priv)
|
||||
net_null_init(const netcard_t *card, const uint8_t *mac_addr, void *priv, char *netdrv_errbuf)
|
||||
{
|
||||
net_null_log("Null Network: Init\n");
|
||||
|
||||
@@ -221,4 +221,4 @@ const netdrv_t net_null_drv = {
|
||||
&net_null_init,
|
||||
&net_null_close,
|
||||
NULL
|
||||
};
|
||||
};
|
||||
|
||||
@@ -357,7 +357,7 @@ int
|
||||
net_pcap_prepare(netdev_t *list)
|
||||
{
|
||||
char errbuf[PCAP_ERRBUF_SIZE];
|
||||
pcap_if_t *devlist, *dev;
|
||||
pcap_if_t *devlist;
|
||||
int i = 0;
|
||||
|
||||
/* Try loading the DLL. */
|
||||
@@ -379,7 +379,7 @@ net_pcap_prepare(netdev_t *list)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
for (dev = devlist; dev != NULL; dev = dev->next) {
|
||||
for (pcap_if_t *dev = devlist; dev != NULL; dev = dev->next) {
|
||||
if (i >= (NET_HOST_INTF_MAX - 1))
|
||||
break;
|
||||
|
||||
@@ -405,7 +405,16 @@ net_pcap_prepare(netdev_t *list)
|
||||
/* Release the memory. */
|
||||
f_pcap_freealldevs(devlist);
|
||||
|
||||
return (i);
|
||||
return i;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy error message to the error buffer
|
||||
* and log if enabled.
|
||||
*/
|
||||
void net_pcap_error(char *errbuf, const char *message) {
|
||||
strncpy(errbuf, message, NET_DRV_ERRBUF_SIZE);
|
||||
pcap_log("PCAP: %s\n", message);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -416,18 +425,19 @@ net_pcap_prepare(netdev_t *list)
|
||||
* tries to attach to the network module.
|
||||
*/
|
||||
void *
|
||||
net_pcap_init(const netcard_t *card, const uint8_t *mac_addr, void *priv)
|
||||
net_pcap_init(const netcard_t *card, const uint8_t *mac_addr, void *priv, char *netdrv_errbuf)
|
||||
{
|
||||
char errbuf[PCAP_ERRBUF_SIZE];
|
||||
char *str;
|
||||
char filter_exp[255];
|
||||
struct bpf_program fp;
|
||||
char errbuf_prep[NET_DRV_ERRBUF_SIZE];
|
||||
|
||||
char *intf_name = (char *) priv;
|
||||
|
||||
/* Did we already load the library? */
|
||||
if (libpcap_handle == NULL) {
|
||||
pcap_log("PCAP: net_pcap_init without handle.\n");
|
||||
net_pcap_error(netdrv_errbuf, "net_pcap_init without handle");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -440,7 +450,7 @@ net_pcap_init(const netcard_t *card, const uint8_t *mac_addr, void *priv)
|
||||
|
||||
/* Get the value of our capture interface. */
|
||||
if ((intf_name[0] == '\0') || !strcmp(intf_name, "none")) {
|
||||
pcap_log("PCAP: no interface configured!\n");
|
||||
net_pcap_error(netdrv_errbuf, "No interface configured");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -451,7 +461,8 @@ net_pcap_init(const netcard_t *card, const uint8_t *mac_addr, void *priv)
|
||||
memcpy(pcap->mac_addr, mac_addr, sizeof(pcap->mac_addr));
|
||||
|
||||
if ((pcap->pcap = f_pcap_create(intf_name, errbuf)) == NULL) {
|
||||
pcap_log(" Unable to open device: %s!\n", intf_name);
|
||||
snprintf(errbuf_prep, NET_DRV_ERRBUF_SIZE, " Unable to open device: %s!\n", intf_name);
|
||||
net_pcap_error(netdrv_errbuf, errbuf_prep);
|
||||
free(pcap);
|
||||
return NULL;
|
||||
}
|
||||
@@ -469,7 +480,8 @@ net_pcap_init(const netcard_t *card, const uint8_t *mac_addr, void *priv)
|
||||
pcap_log("PCAP: error setting snaplen\n");
|
||||
|
||||
if (f_pcap_activate((void *) pcap->pcap) != 0) {
|
||||
pcap_log("PCAP: failed pcap_activate");
|
||||
snprintf(errbuf_prep, NET_DRV_ERRBUF_SIZE, "%s", (char *)f_pcap_geterr(pcap->pcap));
|
||||
net_pcap_error(netdrv_errbuf, errbuf_prep);
|
||||
f_pcap_close((void *) pcap->pcap);
|
||||
free(pcap);
|
||||
return NULL;
|
||||
@@ -484,13 +496,15 @@ net_pcap_init(const netcard_t *card, const uint8_t *mac_addr, void *priv)
|
||||
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
|
||||
if (f_pcap_compile((void *) pcap->pcap, &fp, filter_exp, 0, 0xffffffff) != -1) {
|
||||
if (f_pcap_setfilter((void *) pcap->pcap, &fp) != 0) {
|
||||
pcap_log("PCAP: error installing filter (%s) !\n", filter_exp);
|
||||
snprintf(errbuf_prep, NET_DRV_ERRBUF_SIZE, "Error installing filter (%s)\n", filter_exp);
|
||||
net_pcap_error(netdrv_errbuf, errbuf_prep);
|
||||
f_pcap_close((void *) pcap->pcap);
|
||||
free(pcap);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
pcap_log("PCAP: could not compile filter (%s) : %s!\n", filter_exp, f_pcap_geterr((void *) pcap->pcap));
|
||||
snprintf(errbuf_prep, NET_DRV_ERRBUF_SIZE, "Could not compile filter (%s) : %s!\n", filter_exp, (char *)f_pcap_geterr((void *) pcap->pcap));
|
||||
net_pcap_error(netdrv_errbuf, errbuf_prep);
|
||||
f_pcap_close((void *) pcap->pcap);
|
||||
free(pcap);
|
||||
return NULL;
|
||||
|
||||
@@ -446,7 +446,8 @@ pcnetIsLinkUp(nic_t *dev)
|
||||
static __inline int
|
||||
pcnetTmdLoad(nic_t *dev, TMD *tmd, uint32_t addr, int fRetIfNotOwn)
|
||||
{
|
||||
uint8_t ownbyte, bytes[4] = { 0, 0, 0, 0 };
|
||||
uint8_t ownbyte;
|
||||
uint8_t bytes[4] = { 0, 0, 0, 0 };
|
||||
uint16_t xda[4];
|
||||
uint32_t xda32[4];
|
||||
|
||||
@@ -539,7 +540,8 @@ pcnetTmdStorePassHost(nic_t *dev, TMD *tmd, uint32_t addr)
|
||||
static __inline int
|
||||
pcnetRmdLoad(nic_t *dev, RMD *rmd, uint32_t addr, int fRetIfNotOwn)
|
||||
{
|
||||
uint8_t ownbyte, bytes[4] = { 0, 0, 0, 0 };
|
||||
uint8_t ownbyte;
|
||||
uint8_t bytes[4] = { 0, 0, 0, 0 };
|
||||
uint16_t rda[4];
|
||||
uint32_t rda32[4];
|
||||
|
||||
@@ -654,10 +656,10 @@ lnc_mchash(const uint8_t *ether_addr)
|
||||
{
|
||||
#define LNC_POLYNOMIAL 0xEDB88320UL
|
||||
uint32_t crc = 0xFFFFFFFF;
|
||||
int idx, bit;
|
||||
int bit;
|
||||
uint8_t data;
|
||||
|
||||
for (idx = 0; idx < ETHER_ADDR_LEN; idx++) {
|
||||
for (uint8_t idx = 0; idx < ETHER_ADDR_LEN; idx++) {
|
||||
for (data = *ether_addr++, bit = 0; bit < MULTICAST_FILTER_LEN; bit++) {
|
||||
crc = (crc >> 1) ^ (((crc ^ data) & 1) ? LNC_POLYNOMIAL : 0);
|
||||
data >>= 1;
|
||||
@@ -915,7 +917,6 @@ pcnetUpdateIrq(nic_t *dev)
|
||||
static void
|
||||
pcnetInit(nic_t *dev)
|
||||
{
|
||||
int i;
|
||||
pcnet_log(3, "%s: pcnetInit: init_addr=%#010x\n", dev->name, PHYSADDR(dev, CSR_IADR(dev)));
|
||||
|
||||
/** @todo Documentation says that RCVRL and XMTRL are stored as two's complement!
|
||||
@@ -956,7 +957,7 @@ pcnetInit(nic_t *dev)
|
||||
#undef PCNET_INIT
|
||||
|
||||
size_t cbRxBuffers = 0;
|
||||
for (i = CSR_RCVRL(dev); i >= 1; i--) {
|
||||
for (int i = CSR_RCVRL(dev); i >= 1; i--) {
|
||||
RMD rmd;
|
||||
uint32_t rdaddr = PHYSADDR(dev, pcnetRdraAddr(dev, i));
|
||||
|
||||
@@ -1200,8 +1201,10 @@ pcnetCalcPacketLen(nic_t *dev, int cb)
|
||||
static int
|
||||
pcnetReceiveNoSync(void *priv, uint8_t *buf, int size)
|
||||
{
|
||||
nic_t *dev = (nic_t *) priv;
|
||||
int is_padr = 0, is_bcast = 0, is_ladr = 0;
|
||||
nic_t *dev = (nic_t *) priv;
|
||||
int is_padr = 0;
|
||||
int is_bcast = 0;
|
||||
int is_ladr = 0;
|
||||
uint32_t iRxDesc;
|
||||
int cbPacket;
|
||||
uint8_t buf1[60];
|
||||
@@ -1266,7 +1269,8 @@ pcnetReceiveNoSync(void *priv, uint8_t *buf, int size)
|
||||
uint8_t *src = &dev->abRecvBuf[8];
|
||||
uint32_t crda = CSR_CRDA(dev);
|
||||
uint32_t next_crda;
|
||||
RMD rmd, next_rmd;
|
||||
RMD rmd;
|
||||
RMD next_rmd;
|
||||
|
||||
/*
|
||||
* Ethernet framing considers these two octets to be
|
||||
@@ -1473,8 +1477,8 @@ pcnetAsyncTransmit(nic_t *dev)
|
||||
break;
|
||||
|
||||
/* Don't continue sending packets when the link is down. */
|
||||
if ((!pcnetIsLinkUp(dev)
|
||||
&& dev->cLinkDownReported > PCNET_MAX_LINKDOWN_REPORTED))
|
||||
if (!pcnetIsLinkUp(dev)
|
||||
&& dev->cLinkDownReported > PCNET_MAX_LINKDOWN_REPORTED)
|
||||
break;
|
||||
|
||||
pcnet_log(3, "%s: TMDLOAD %#010x\n", dev->name, PHYSADDR(dev, CSR_CXDA(dev)));
|
||||
@@ -1488,7 +1492,7 @@ pcnetAsyncTransmit(nic_t *dev)
|
||||
const int cb = 4096 - tmd.tmd1.bcnt;
|
||||
pcnet_log(3, "%s: pcnetAsyncTransmit: stp&enp: cb=%d xmtrc=%#x\n", dev->name, cb, CSR_XMTRC(dev));
|
||||
|
||||
if ((pcnetIsLinkUp(dev) || fLoopback)) {
|
||||
if (pcnetIsLinkUp(dev) || fLoopback) {
|
||||
|
||||
/* From the manual: ``A zero length buffer is acceptable as
|
||||
* long as it is not the last buffer in a chain (STP = 0 and
|
||||
@@ -2024,7 +2028,10 @@ static uint16_t
|
||||
pcnet_mii_readw(nic_t *dev, uint16_t miiaddr)
|
||||
{
|
||||
uint16_t val;
|
||||
int autoneg, duplex, fast, isolate;
|
||||
int autoneg;
|
||||
int duplex;
|
||||
int fast;
|
||||
int isolate;
|
||||
|
||||
/* If the DANAS (BCR32.7) bit is set, the MAC does not do any
|
||||
* auto-negotiation and the PHY must be set up explicitly. DANAS
|
||||
@@ -2238,7 +2245,7 @@ pcnet_byte_read(nic_t *dev, uint32_t addr)
|
||||
|
||||
pcnet_log(3, "%s: pcnet_word_read: addr = %04x, val = %04x, DWIO not set = %04x\n", dev->name, addr & 0x0f, val, !BCR_DWIO(dev));
|
||||
|
||||
return (val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static uint16_t
|
||||
@@ -2276,7 +2283,7 @@ pcnet_word_read(nic_t *dev, uint32_t addr)
|
||||
skip_update_irq:
|
||||
pcnet_log(3, "%s: pcnet_word_read: addr = %04x, val = %04x, DWIO not set = %04x\n", dev->name, addr & 0x0f, val, !BCR_DWIO(dev));
|
||||
|
||||
return (val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2300,7 +2307,7 @@ pcnet_dword_write(nic_t *dev, uint32_t addr, uint32_t val)
|
||||
/* switch device to dword i/o mode */
|
||||
pcnet_bcr_writew(dev, BCR_BSBC, pcnet_bcr_readw(dev, BCR_BSBC) | 0x0080);
|
||||
pcnet_log(3, "%s: device switched into dword i/o mode\n", dev->name);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
@@ -2334,7 +2341,7 @@ pcnet_dword_read(nic_t *dev, uint32_t addr)
|
||||
|
||||
skip_update_irq:
|
||||
pcnet_log(3, "%s: Read Long mode, addr = %08x, val = %08x\n", dev->name, addr, val);
|
||||
return (val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2424,7 +2431,7 @@ pcnet_read(nic_t *dev, uint32_t addr, int len)
|
||||
}
|
||||
|
||||
pcnet_log(3, "%s: value in read - %08x\n", dev->name, retval);
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -2682,7 +2689,7 @@ pcnet_pci_read(int func, int addr, void *p)
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3005,7 +3012,7 @@ pcnet_init(const device_t *info)
|
||||
|
||||
timer_add(&dev->timer_restore, pcnetTimerRestore, dev, 0);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -384,7 +384,7 @@ static int slirp_card_num = 2;
|
||||
|
||||
/* Initialize SLiRP for use. */
|
||||
void *
|
||||
net_slirp_init(const netcard_t *card, const uint8_t *mac_addr, void *priv)
|
||||
net_slirp_init(const netcard_t *card, const uint8_t *mac_addr, void *priv, char *netdrv_errbuf)
|
||||
{
|
||||
slirp_log("SLiRP: initializing...\n");
|
||||
net_slirp_t *slirp = calloc(1, sizeof(net_slirp_t));
|
||||
@@ -410,12 +410,16 @@ net_slirp_init(const netcard_t *card, const uint8_t *mac_addr, void *priv)
|
||||
slirp->slirp = slirp_init(0, 1, net, mask, host, 0, ipv6_dummy, 0, ipv6_dummy, NULL, NULL, NULL, NULL, dhcp, dns, ipv6_dummy, NULL, NULL, &slirp_cb, slirp);
|
||||
if (!slirp->slirp) {
|
||||
slirp_log("SLiRP: initialization failed\n");
|
||||
snprintf(netdrv_errbuf, NET_DRV_ERRBUF_SIZE, "SLiRP initialization failed");
|
||||
free(slirp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Set up port forwarding. */
|
||||
int udp, external, internal, i = 0;
|
||||
int udp;
|
||||
int i = 0;
|
||||
int external;
|
||||
int internal;
|
||||
char category[32];
|
||||
snprintf(category, sizeof(category), "SLiRP Port Forwarding #%d", card->card_num + 1);
|
||||
char key[20];
|
||||
|
||||
@@ -235,6 +235,15 @@ void net_vde_in_available(void *priv) {
|
||||
net_event_set(&vde->tx_event);
|
||||
}
|
||||
|
||||
//+
|
||||
// Copy error message to the error buffer
|
||||
// and log if enabled.
|
||||
//-
|
||||
void net_vde_error(char *errbuf, const char *message) {
|
||||
strncpy(errbuf, message, NET_DRV_ERRBUF_SIZE);
|
||||
vde_log("VDE: %s\n", message);
|
||||
}
|
||||
|
||||
//+
|
||||
// Initialize VDE for use
|
||||
// At this point the vdeplug library is already loaded
|
||||
@@ -242,19 +251,18 @@ void net_vde_in_available(void *priv) {
|
||||
// mac_addr: MAC address we are using
|
||||
// priv: Name of the VDE contol socket directory
|
||||
//-
|
||||
void *net_vde_init(const netcard_t *card, const uint8_t *mac_addr, void *priv) {
|
||||
void *net_vde_init(const netcard_t *card, const uint8_t *mac_addr, void *priv, char *netdrv_errbuf) {
|
||||
struct vde_open_args vde_args;
|
||||
int i;
|
||||
|
||||
char *socket_name = (char *) priv;
|
||||
|
||||
if (libvde_handle == NULL) {
|
||||
vde_log("VDE: net_vde_init without library handle!\n");
|
||||
net_vde_error(netdrv_errbuf, "net_vde_init without library handle");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((socket_name[0] == '\0') || !strcmp(socket_name, "none")) {
|
||||
vde_log("VDE: No socket name configured!\n");
|
||||
net_vde_error(netdrv_errbuf, "No socket name configured");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -271,23 +279,15 @@ void *net_vde_init(const netcard_t *card, const uint8_t *mac_addr, void *priv) {
|
||||
// We are calling vde_open_real(), not the vde_open() macro...
|
||||
if ((vde->vdeconn = f_vde_open(socket_name, VDE_DESCRIPTION,
|
||||
LIBVDEPLUG_INTERFACE_VERSION, &vde_args)) == NULL) {
|
||||
vde_log("VDE: Unable to open socket %s (%s)!\n", socket_name, strerror(errno));
|
||||
char buf[NET_DRV_ERRBUF_SIZE];
|
||||
snprintf(buf, NET_DRV_ERRBUF_SIZE, "Unable to open socket %s (%s)", socket_name, strerror(errno));
|
||||
net_vde_error(netdrv_errbuf, buf);
|
||||
free(vde);
|
||||
//+
|
||||
// There is a bug upstream that causes an uncontrolled crash if the network is not
|
||||
// properly initialized.
|
||||
// To avoid that crash, we tell the user we cannot continue and exit the program.
|
||||
// TODO: Once there is a solution for the mentioned crash, this should be removed
|
||||
// and/or replaced by proper error handling code.
|
||||
//-
|
||||
// fatal("Could not open the specified VDE socket (%s). Please fix your networking configuration.", socket_name);
|
||||
// It makes no sense to issue this warning since the program will crash anyway...
|
||||
// ui_msgbox_header(MBX_WARNING, (wchar_t *) IDS_2167, (wchar_t *) IDS_2168);
|
||||
return NULL;
|
||||
}
|
||||
vde_log("VDE: Socket opened (%s).\n", socket_name);
|
||||
|
||||
for(i=0; i < VDE_PKT_BATCH; i++) {
|
||||
for(uint8_t i = 0; i < VDE_PKT_BATCH; i++) {
|
||||
vde->pktv[i].data = calloc(1, NET_MAX_FRAME);
|
||||
}
|
||||
vde->pkt.data = calloc(1,NET_MAX_FRAME);
|
||||
|
||||
@@ -194,9 +194,9 @@ wd_ram_write(uint32_t addr, uint8_t val, void *priv)
|
||||
static int
|
||||
wd_get_irq_index(wd_t *dev)
|
||||
{
|
||||
uint8_t i, irq = 255;
|
||||
uint8_t irq = 255;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
if (we_int_table[i] == dev->irq)
|
||||
irq = i;
|
||||
}
|
||||
@@ -285,7 +285,7 @@ wd_smc_read(wd_t *dev, uint32_t off)
|
||||
wdlog("%s: ASIC read addr=0x%02x, value=0x%04x\n",
|
||||
dev->name, (unsigned) off, (unsigned) retval);
|
||||
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -423,7 +423,7 @@ wd_read(uint16_t addr, void *priv, int len)
|
||||
}
|
||||
}
|
||||
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -776,7 +776,7 @@ wd_init(const device_t *info)
|
||||
dev->base_address, dev->irq, dev->ram_addr);
|
||||
}
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -442,6 +442,9 @@ network_attach(void *card_drv, uint8_t *mac, NETRXCB rx, NETSETLINKSTATE set_lin
|
||||
card->card_num = net_card_current;
|
||||
card->byte_period = NET_PERIOD_10M;
|
||||
|
||||
char net_drv_error[NET_DRV_ERRBUF_SIZE];
|
||||
wchar_t tempmsg[NET_DRV_ERRBUF_SIZE * 2];
|
||||
|
||||
for (int i = 0; i < NET_QUEUE_COUNT; i++) {
|
||||
network_queue_init(&card->queues[i]);
|
||||
}
|
||||
@@ -449,17 +452,17 @@ network_attach(void *card_drv, uint8_t *mac, NETRXCB rx, NETSETLINKSTATE set_lin
|
||||
switch (net_cards_conf[net_card_current].net_type) {
|
||||
case NET_TYPE_SLIRP:
|
||||
card->host_drv = net_slirp_drv;
|
||||
card->host_drv.priv = card->host_drv.init(card, mac, NULL);
|
||||
card->host_drv.priv = card->host_drv.init(card, mac, NULL, net_drv_error);
|
||||
break;
|
||||
|
||||
case NET_TYPE_PCAP:
|
||||
card->host_drv = net_pcap_drv;
|
||||
card->host_drv.priv = card->host_drv.init(card, mac, net_cards_conf[net_card_current].host_dev_name);
|
||||
card->host_drv.priv = card->host_drv.init(card, mac, net_cards_conf[net_card_current].host_dev_name, net_drv_error);
|
||||
break;
|
||||
#ifdef HAS_VDE
|
||||
case NET_TYPE_VDE:
|
||||
card->host_drv = net_vde_drv;
|
||||
card->host_drv.priv = card->host_drv.init(card, mac, net_cards_conf[net_card_current].host_dev_name);
|
||||
card->host_drv.priv = card->host_drv.init(card, mac, net_cards_conf[net_card_current].host_dev_name, net_drv_error);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
@@ -474,13 +477,14 @@ network_attach(void *card_drv, uint8_t *mac, NETRXCB rx, NETSETLINKSTATE set_lin
|
||||
|
||||
if(net_cards_conf[net_card_current].net_type != NET_TYPE_NONE) {
|
||||
// We're here because of a failure
|
||||
// Placeholder to display a msgbox about falling back to null
|
||||
ui_msgbox(MBX_ERROR | MBX_ANSI, "Network driver initialization failed. Falling back to NULL driver.");
|
||||
swprintf(tempmsg, sizeof_w(tempmsg), L"%ls:<br /><br />%s<br /><br />%ls", plat_get_string(IDS_2167), net_drv_error, plat_get_string(IDS_2168));
|
||||
ui_msgbox(MBX_ERROR, tempmsg);
|
||||
net_cards_conf[net_card_current].net_type = NET_TYPE_NONE;
|
||||
}
|
||||
|
||||
// Init null driver
|
||||
card->host_drv = net_null_drv;
|
||||
card->host_drv.priv = card->host_drv.init(card, mac, NULL);
|
||||
card->host_drv.priv = card->host_drv.init(card, mac, NULL, net_drv_error);
|
||||
// Set link state to disconnected by default
|
||||
network_connect(card->card_num, 0);
|
||||
ui_sb_update_icon_state(SB_NETWORK | card->card_num, 1);
|
||||
@@ -548,15 +552,13 @@ network_close(void)
|
||||
void
|
||||
network_reset(void)
|
||||
{
|
||||
int i = -1;
|
||||
|
||||
ui_sb_update_icon(SB_NETWORK, 0);
|
||||
|
||||
#if defined ENABLE_NETWORK_LOG && !defined(_WIN32)
|
||||
network_dump_mutex = thread_create_mutex();
|
||||
#endif
|
||||
|
||||
for (i = 0; i < NET_CARD_MAX; i++) {
|
||||
for (uint8_t i = 0; i < NET_CARD_MAX; i++) {
|
||||
if (!network_dev_available(i)) {
|
||||
continue;
|
||||
}
|
||||
@@ -652,15 +654,13 @@ network_is_connected(int id)
|
||||
int
|
||||
network_dev_to_id(char *devname)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
for (i = 0; i < network_ndev; i++) {
|
||||
for (int i = 0; i < network_ndev; i++) {
|
||||
if (!strcmp((char *) network_devs[i].device, devname)) {
|
||||
return (i);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return (-1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* UI */
|
||||
@@ -669,7 +669,7 @@ network_dev_available(int id)
|
||||
{
|
||||
int available = (net_cards_conf[id].device_num > 0);
|
||||
|
||||
if ((net_cards_conf[id].net_type == NET_TYPE_PCAP && (network_dev_to_id(net_cards_conf[id].host_dev_name) <= 0)))
|
||||
if (net_cards_conf[id].net_type == NET_TYPE_PCAP && (network_dev_to_id(net_cards_conf[id].host_dev_name) <= 0))
|
||||
available = 0;
|
||||
|
||||
// TODO: Handle VDE device
|
||||
@@ -696,7 +696,7 @@ network_card_available(int card)
|
||||
if (net_cards[card])
|
||||
return (device_available(net_cards[card]));
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* UI */
|
||||
@@ -711,7 +711,7 @@ int
|
||||
network_card_has_config(int card)
|
||||
{
|
||||
if (!net_cards[card])
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
return (device_has_config(net_cards[card]) ? 1 : 0);
|
||||
}
|
||||
@@ -731,9 +731,9 @@ network_card_get_from_internal_name(char *s)
|
||||
|
||||
while (net_cards[c] != NULL) {
|
||||
if (!strcmp((char *) net_cards[c]->internal_name, s))
|
||||
return (c);
|
||||
return c;
|
||||
c++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ static int
|
||||
get_devlist(capdev_t *list)
|
||||
{
|
||||
char errbuf[PCAP_ERRBUF_SIZE];
|
||||
pcap_if_t *devlist, *dev;
|
||||
pcap_if_t *devlist;
|
||||
int i = 0;
|
||||
|
||||
/* Retrieve the device list from the local machine */
|
||||
@@ -96,7 +96,7 @@ get_devlist(capdev_t *list)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
for (dev = devlist; dev != NULL; dev = dev->next) {
|
||||
for (pcap_if_t *dev = devlist; dev != NULL; dev = dev->next) {
|
||||
strcpy(list->device, dev->name);
|
||||
if (dev->description)
|
||||
strcpy(list->description, dev->description);
|
||||
@@ -109,7 +109,7 @@ get_devlist(capdev_t *list)
|
||||
/* Release the memory. */
|
||||
f_pcap_freealldevs(devlist);
|
||||
|
||||
return (i);
|
||||
return i;
|
||||
}
|
||||
|
||||
/* Simple HEXDUMP routine for raw data. */
|
||||
@@ -127,7 +127,7 @@ hex_dump(unsigned char *bufp, int len)
|
||||
printf("%04lx %02x", addr, c);
|
||||
else
|
||||
printf(" %02x", c);
|
||||
asci[(addr & 15)] = (uint8_t) isprint(c) ? c : '.';
|
||||
asci[addr & 15] = (uint8_t) isprint(c) ? c : '.';
|
||||
if ((++addr % 16) == 0) {
|
||||
asci[16] = '\0';
|
||||
printf(" | %s |\n", asci);
|
||||
@@ -137,7 +137,7 @@ hex_dump(unsigned char *bufp, int len)
|
||||
if (addr % 16) {
|
||||
while (addr % 16) {
|
||||
printf(" ");
|
||||
asci[(addr & 15)] = ' ';
|
||||
asci[addr & 15] = ' ';
|
||||
addr++;
|
||||
}
|
||||
asci[16] = '\0';
|
||||
@@ -166,7 +166,7 @@ eth_prhdr(unsigned char *ptr)
|
||||
type = (ptr[12] << 8) | ptr[13];
|
||||
printf(" type %04x\n", type);
|
||||
|
||||
return (14);
|
||||
return 14;
|
||||
}
|
||||
|
||||
/* Capture packets from the network, and print them. */
|
||||
@@ -189,7 +189,7 @@ start_cap(char *dev)
|
||||
temp);
|
||||
if (pcap == NULL) {
|
||||
fprintf(stderr, "Pcap: open_live(%s): %s\n", dev, temp);
|
||||
return (2);
|
||||
return 2;
|
||||
}
|
||||
|
||||
printf("Listening on '%s'..\n", dev);
|
||||
@@ -217,19 +217,17 @@ start_cap(char *dev)
|
||||
/* All done, close up. */
|
||||
f_pcap_close(pcap);
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Show a list of available network interfaces. */
|
||||
static void
|
||||
show_devs(capdev_t *list, int num)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (num > 0) {
|
||||
printf("Available network interfaces:\n\n");
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
for (int i = 0; i < num; i++) {
|
||||
printf(" %d - %s\n", i + 1, list->device);
|
||||
if (list->description[0] != '\0')
|
||||
printf(" (%s)\n", list->description);
|
||||
@@ -247,7 +245,8 @@ int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
capdev_t interfaces[32];
|
||||
int numdev, i;
|
||||
int numdev;
|
||||
int i;
|
||||
|
||||
/* Try loading the DLL. */
|
||||
#ifdef _WIN32
|
||||
@@ -263,7 +262,7 @@ main(int argc, char **argv)
|
||||
#else
|
||||
fprintf(stderr, "Unable to load libpcap.so !\n");
|
||||
#endif
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Get the list. */
|
||||
@@ -275,7 +274,7 @@ main(int argc, char **argv)
|
||||
|
||||
dynld_close(pcap_handle);
|
||||
|
||||
return (numdev);
|
||||
return numdev;
|
||||
}
|
||||
|
||||
/* Assume argument to be the interface number to listen on. */
|
||||
@@ -285,7 +284,7 @@ main(int argc, char **argv)
|
||||
|
||||
dynld_close(pcap_handle);
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Looks good, go and listen.. */
|
||||
@@ -293,5 +292,5 @@ main(int argc, char **argv)
|
||||
|
||||
dynld_close(pcap_handle);
|
||||
|
||||
return (i);
|
||||
return i;
|
||||
}
|
||||
|
||||
@@ -787,7 +787,6 @@ pic_irq_ack(void)
|
||||
/* If we are on AT, IRQ 2 is pending, and we cannot find a pending IRQ on PIC 2, fatal out. */
|
||||
fatal("IRQ %i pending on AT without a pending IRQ on PIC %i (normal)\n", pic.interrupt, pic.interrupt);
|
||||
exit(-1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
pic.interrupt |= 0x40; /* Mark slave pending. */
|
||||
@@ -818,7 +817,6 @@ picinterrupt(void)
|
||||
/* If we are on AT, IRQ 2 is pending, and we cannot find a pending IRQ on PIC 2, fatal out. */
|
||||
fatal("IRQ %i pending on AT without a pending IRQ on PIC %i (normal)\n", pic.interrupt, pic.interrupt);
|
||||
exit(-1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
pic.interrupt |= 0x40; /* Mark slave pending. */
|
||||
|
||||
30
src/pit.c
30
src/pit.c
@@ -139,6 +139,9 @@ ctr_load_count(ctr_t *ctr)
|
||||
pit_log("ctr->count = %i\n", l);
|
||||
ctr->null_count = 0;
|
||||
ctr->newcount = !!(l & 1);
|
||||
|
||||
/* Undocumented feature - writing MSB after reload after writing LSB causes an instant reload. */
|
||||
ctr->incomplete = !!(ctr->wm & 0x80);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -146,16 +149,13 @@ ctr_tick(ctr_t *ctr)
|
||||
{
|
||||
uint8_t state = ctr->state;
|
||||
|
||||
if (state == 1) {
|
||||
if ((state & 0x03) == 0x01) {
|
||||
/* This is true for all modes */
|
||||
ctr_load_count(ctr);
|
||||
ctr->state = 2;
|
||||
if ((ctr->m & 0x07) == 0x01)
|
||||
ctr->state++;
|
||||
if (((ctr->m & 0x07) == 0x01) && (ctr->state == 2))
|
||||
ctr_set_out(ctr, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (ctr->m & 0x07) {
|
||||
} else switch (ctr->m & 0x07) {
|
||||
case 0:
|
||||
/* Interrupt on terminal count */
|
||||
switch (state) {
|
||||
@@ -176,11 +176,6 @@ ctr_tick(ctr_t *ctr)
|
||||
case 1:
|
||||
/* Hardware retriggerable one-shot */
|
||||
switch (state) {
|
||||
case 1:
|
||||
ctr_load_count(ctr);
|
||||
ctr->state = 2;
|
||||
ctr_set_out(ctr, 0);
|
||||
break;
|
||||
case 2:
|
||||
if (ctr->count >= 1) {
|
||||
ctr_decrease_count(ctr);
|
||||
@@ -191,6 +186,7 @@ ctr_tick(ctr_t *ctr)
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
case 6:
|
||||
ctr_decrease_count(ctr);
|
||||
break;
|
||||
}
|
||||
@@ -267,6 +263,7 @@ ctr_tick(ctr_t *ctr)
|
||||
if ((ctr->gate != 0) || (ctr->m != 4)) {
|
||||
switch (state) {
|
||||
case 0:
|
||||
case 6:
|
||||
ctr_decrease_count(ctr);
|
||||
break;
|
||||
case 2:
|
||||
@@ -310,9 +307,12 @@ static void
|
||||
ctr_set_state_1(ctr_t *ctr)
|
||||
{
|
||||
uint8_t mode = (ctr->m & 0x03);
|
||||
int do_reload = !!ctr->incomplete || (ctr->state == 0);
|
||||
|
||||
if ((mode == 0) || ((mode > 1) && (ctr->state == 0)))
|
||||
ctr->state = 1;
|
||||
ctr->incomplete = 0;
|
||||
|
||||
if (do_reload)
|
||||
ctr->state = 1 + ((mode == 1) << 2);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -607,6 +607,8 @@ pit_write(uint16_t addr, uint8_t val, void *priv)
|
||||
}
|
||||
}
|
||||
|
||||
extern uint8_t *ram;
|
||||
|
||||
static uint8_t
|
||||
pit_read(uint16_t addr, void *priv)
|
||||
{
|
||||
|
||||
@@ -110,7 +110,6 @@ png_write_gray(char *fn, int inv, uint8_t *pix, int16_t w, int16_t h)
|
||||
png_structp png = NULL;
|
||||
png_infop info = NULL;
|
||||
png_bytep row;
|
||||
int16_t x, y;
|
||||
FILE *fp;
|
||||
|
||||
/* Create the image file. */
|
||||
@@ -127,7 +126,7 @@ error:
|
||||
(&png, &info);
|
||||
if (fp != NULL)
|
||||
(void) fclose(fp);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Initialize PNG stuff. */
|
||||
@@ -159,8 +158,8 @@ error:
|
||||
row = (png_bytep) malloc(PNGFUNC(get_rowbytes)(png, info));
|
||||
|
||||
/* Process all scanlines in the image. */
|
||||
for (y = 0; y < h; y++) {
|
||||
for (x = 0; x < w; x++) {
|
||||
for (int16_t y = 0; y < h; y++) {
|
||||
for (int16_t x = 0; x < w; x++) {
|
||||
/* Copy the pixel data. */
|
||||
if (inv)
|
||||
row[x] = 255 - pix[(y * w) + x];
|
||||
@@ -185,7 +184,7 @@ error:
|
||||
/* Clean up. */
|
||||
(void) fclose(fp);
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Write the given BITMAP-format image as an 8-bit RGBA PNG image file. */
|
||||
|
||||
@@ -442,7 +442,6 @@ static void
|
||||
fill_palette(uint8_t redmax, uint8_t greenmax, uint8_t bluemax, uint8_t colorID, escp_t *dev)
|
||||
{
|
||||
uint8_t colormask;
|
||||
int i;
|
||||
|
||||
double red = (double) redmax / (double) 30.9;
|
||||
double green = (double) greenmax / (double) 30.9;
|
||||
@@ -450,7 +449,7 @@ fill_palette(uint8_t redmax, uint8_t greenmax, uint8_t bluemax, uint8_t colorID,
|
||||
|
||||
colormask = colorID <<= 5;
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
for (uint8_t i = 0; i < 32; i++) {
|
||||
dev->palcol[i + colormask].r = 255 - (uint8_t) floor(red * (double) i);
|
||||
dev->palcol[i + colormask].g = 255 - (uint8_t) floor(green * (double) i);
|
||||
dev->palcol[i + colormask].b = 255 - (uint8_t) floor(blue * (double) i);
|
||||
@@ -460,8 +459,6 @@ fill_palette(uint8_t redmax, uint8_t greenmax, uint8_t bluemax, uint8_t colorID,
|
||||
static void
|
||||
reset_printer(escp_t *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* TODO: these should be configurable. */
|
||||
dev->color = COLOR_BLACK;
|
||||
dev->curr_x = dev->curr_y = 0.0;
|
||||
@@ -501,7 +498,7 @@ reset_printer(escp_t *dev)
|
||||
|
||||
new_page(dev, 0, 1);
|
||||
|
||||
for (i = 0; i < 32; i++)
|
||||
for (uint8_t i = 0; i < 32; i++)
|
||||
dev->horizontal_tabs[i] = i * 8.0 * (1.0 / dev->cpi);
|
||||
dev->num_horizontal_tabs = 32;
|
||||
dev->num_vertical_tabs = -1;
|
||||
@@ -646,11 +643,13 @@ update_font(escp_t *dev)
|
||||
static int
|
||||
process_char(escp_t *dev, uint8_t ch)
|
||||
{
|
||||
double new_x, new_y;
|
||||
double new_x;
|
||||
double new_y;
|
||||
double move_to;
|
||||
double unit_size;
|
||||
double reverse;
|
||||
double new_top, new_bottom;
|
||||
double new_top;
|
||||
double new_bottom;
|
||||
uint16_t rel_move;
|
||||
int16_t i;
|
||||
|
||||
@@ -788,7 +787,6 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
case 0x2e:
|
||||
fatal("ESC/P: Print Raster Graphics (2E) command is not implemented.\nTerminating the emulator to avoid endless PNG generation.\n");
|
||||
exit(-1);
|
||||
return 1;
|
||||
|
||||
default:
|
||||
escp_log("ESC/P: Unknown command ESC %c (0x%02x). Unable to skip parameters.\n",
|
||||
@@ -1562,19 +1560,19 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
return 1;
|
||||
|
||||
default:
|
||||
/* This is a printable character -> print it. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* This is a printable character -> print it. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
handle_char(escp_t *dev, uint8_t ch)
|
||||
{
|
||||
FT_UInt char_index;
|
||||
uint16_t pen_x, pen_y;
|
||||
uint16_t line_start, line_y;
|
||||
uint16_t pen_x;
|
||||
uint16_t pen_y;
|
||||
uint16_t line_start;
|
||||
uint16_t line_y;
|
||||
double x_advance;
|
||||
|
||||
if (dev->page == NULL)
|
||||
@@ -1689,15 +1687,15 @@ static void
|
||||
blit_glyph(escp_t *dev, unsigned destx, unsigned desty, int8_t add)
|
||||
{
|
||||
FT_Bitmap *bitmap = &dev->fontface->glyph->bitmap;
|
||||
unsigned x, y;
|
||||
uint8_t src, *dst;
|
||||
uint8_t src;
|
||||
uint8_t *dst;
|
||||
|
||||
/* check if freetype is available */
|
||||
if (ft_lib == NULL)
|
||||
return;
|
||||
|
||||
for (y = 0; y < bitmap->rows; y++) {
|
||||
for (x = 0; x < bitmap->width; x++) {
|
||||
for (unsigned int y = 0; y < bitmap->rows; y++) {
|
||||
for (unsigned int x = 0; x < bitmap->width; x++) {
|
||||
src = *(bitmap->buffer + x + y * bitmap->pitch);
|
||||
/* ignore background, and respect page size */
|
||||
if (src > 0 && (destx + x < (unsigned) dev->page->w) && (desty + y < (unsigned) dev->page->h)) {
|
||||
@@ -1724,9 +1722,8 @@ draw_hline(escp_t *dev, unsigned from_x, unsigned to_x, unsigned y, int8_t broke
|
||||
{
|
||||
unsigned breakmod = dev->dpi / 15;
|
||||
unsigned gapstart = (breakmod * 4) / 5;
|
||||
unsigned x;
|
||||
|
||||
for (x = from_x; x <= to_x; x++) {
|
||||
for (unsigned int x = from_x; x <= to_x; x++) {
|
||||
/* Skip parts if broken line or going over the border. */
|
||||
if ((!broken || (x % breakmod <= gapstart)) && (x < dev->page->w)) {
|
||||
if (y > 0 && (y - 1) < dev->page->h)
|
||||
@@ -1856,7 +1853,6 @@ print_bit_graph(escp_t *dev, uint8_t ch)
|
||||
{
|
||||
uint8_t pixel_w; /* width of the "pixel" */
|
||||
uint8_t pixel_h; /* height of the "pixel" */
|
||||
unsigned i, j, xx, yy;
|
||||
double old_y;
|
||||
|
||||
dev->bg_column[dev->bg_bytes_read++] = ch;
|
||||
@@ -1877,14 +1873,14 @@ print_bit_graph(escp_t *dev, uint8_t ch)
|
||||
pixel_h = dev->dpi / dev->bg_v_density > 0 ? dev->dpi / dev->bg_v_density : 1;
|
||||
}
|
||||
|
||||
for (i = 0; i < dev->bg_bytes_per_column; i++) {
|
||||
for (uint8_t i = 0; i < dev->bg_bytes_per_column; i++) {
|
||||
/* for each byte */
|
||||
for (j = 128; j != 0; j >>= 1) {
|
||||
for (uint8_t j = 128; j != 0; j >>= 1) {
|
||||
/* for each bit */
|
||||
if (dev->bg_column[i] & j) {
|
||||
/* draw a "pixel" */
|
||||
for (xx = 0; xx < pixel_w; xx++) {
|
||||
for (yy = 0; yy < pixel_h; yy++) {
|
||||
for (uint8_t xx = 0; xx < pixel_w; xx++) {
|
||||
for (uint8_t yy = 0; yy < pixel_h; yy++) {
|
||||
if (((PIXX + xx) < (unsigned) dev->page->w) && ((PIXY + yy) < (unsigned) dev->page->h))
|
||||
*((uint8_t *) dev->page->pixels + (PIXX + xx) + (PIXY + yy) * dev->page->pitch) |= (dev->color | 0x1f);
|
||||
}
|
||||
@@ -1983,7 +1979,7 @@ read_status(void *priv)
|
||||
if (!dev->ack)
|
||||
ret |= 0x40;
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void *
|
||||
@@ -1991,7 +1987,6 @@ escp_init(void *lpt)
|
||||
{
|
||||
const char *fn = PATH_FREETYPE_DLL;
|
||||
escp_t *dev;
|
||||
int i;
|
||||
|
||||
/* Dynamically load FreeType. */
|
||||
if (ft_handle == NULL) {
|
||||
@@ -2047,7 +2042,7 @@ escp_init(void *lpt)
|
||||
memset(dev->page->pixels, 0x00, (size_t) dev->page->pitch * dev->page->h);
|
||||
|
||||
/* Initialize parameters. */
|
||||
for (i = 0; i < 32; i++) {
|
||||
for (uint8_t i = 0; i < 32; i++) {
|
||||
dev->palcol[i].r = 255;
|
||||
dev->palcol[i].g = 255;
|
||||
dev->palcol[i].b = 255;
|
||||
@@ -2082,7 +2077,7 @@ escp_init(void *lpt)
|
||||
timer_add(&dev->pulse_timer, pulse_timer, dev, 0);
|
||||
timer_add(&dev->timeout_timer, timeout_timer, dev, 0);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -143,7 +143,9 @@ convert_to_pdf(ps_t *dev)
|
||||
{
|
||||
volatile int code;
|
||||
void *instance = NULL;
|
||||
char input_fn[1024], output_fn[1024], *gsargv[9];
|
||||
char input_fn[1024];
|
||||
char output_fn[1024];
|
||||
char *gsargv[9];
|
||||
|
||||
strcpy(input_fn, dev->printer_path);
|
||||
path_slash(input_fn);
|
||||
@@ -323,7 +325,7 @@ ps_read_status(void *p)
|
||||
if (!dev->ack)
|
||||
ret |= 0x40;
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void *
|
||||
@@ -362,7 +364,7 @@ ps_init(void *lpt)
|
||||
|
||||
reset_ps(dev);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -138,7 +138,6 @@ static void
|
||||
dump_page(prnt_t *dev)
|
||||
{
|
||||
char path[1024];
|
||||
uint16_t x, y;
|
||||
uint8_t ch;
|
||||
FILE *fp;
|
||||
|
||||
@@ -162,8 +161,8 @@ dump_page(prnt_t *dev)
|
||||
if (ftell(fp) != 0)
|
||||
fputc('\014', fp);
|
||||
|
||||
for (y = 0; y < dev->curr_y; y++) {
|
||||
for (x = 0; x < dev->page->w; x++) {
|
||||
for (uint16_t y = 0; y < dev->curr_y; y++) {
|
||||
for (uint16_t x = 0; x < dev->page->w; x++) {
|
||||
ch = dev->page->chars[(y * dev->page->w) + x];
|
||||
if (ch == 0x00) {
|
||||
/* End of line marker. */
|
||||
@@ -329,7 +328,7 @@ process_char(prnt_t *dev, uint8_t ch)
|
||||
}
|
||||
|
||||
/* Just a printable character. */
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -416,7 +415,7 @@ read_status(void *priv)
|
||||
if (!dev->ack)
|
||||
ret |= 0x40;
|
||||
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void *
|
||||
@@ -443,7 +442,7 @@ prnt_init(void *lpt)
|
||||
timer_add(&dev->pulse_timer, pulse_timer, dev, 0);
|
||||
timer_add(&dev->timeout_timer, timeout_timer, dev, 0);
|
||||
|
||||
return (dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% pod dokonalými ot./m"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Výchozí nastavení systému)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% unterhalb der perfekten Drehzahl"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Systemstandard)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% below perfect RPM"
|
||||
msgid "(System Default)"
|
||||
msgstr "(System Default)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% below perfect RPM"
|
||||
msgid "(System Default)"
|
||||
msgstr "(System Default)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% por debajo de RPM perfectas"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Por defecto del sistema)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,10 @@ msgstr "2% alle täydellisen RPM:n"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Järjestelmän oletus)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "Précision RPM de moins 2%"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Défaut du système)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% ispod savršenog broja okretaja"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Zadana postavka operativnog sustava)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2%-kal a tökéletes RPM alatt"
|
||||
msgid "(System Default)"
|
||||
msgstr "(A rendszer nyelve)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "RPM 2% sotto perfezione"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Predefinito del sistema)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2%低い回転数"
|
||||
msgid "(System Default)"
|
||||
msgstr "(システム既定値)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% 낮은 회전수"
|
||||
msgid "(System Default)"
|
||||
msgstr "(시스템 기본값)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% poniżej idealnych obrotów"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Domyślne ustawienie systemowe)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% abaixo das RPM perfeita"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Padrão do sistema)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "RPM 2% abaixo do RPM perfeito"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Padrão do sistema)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "На 2% медленнее точного RPM"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Системный)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "2% pod popolnimi obrati"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Sistemsko privzeto)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "mükemmel RPM değerinin 2% altı"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Sistem Varsayılanı)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "На 2% повільніше точного RPM"
|
||||
msgid "(System Default)"
|
||||
msgstr "(Системний)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1219,3 +1219,9 @@ msgstr "低于标准转速的 2%"
|
||||
msgid "(System Default)"
|
||||
msgstr "(系统默认)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -1218,3 +1218,10 @@ msgstr "低於標準轉速的 2%"
|
||||
|
||||
msgid "(System Default)"
|
||||
msgstr "(系統預設)"
|
||||
|
||||
msgid "Failed to initialize network driver"
|
||||
msgstr "Failed to initialize network driver"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "The network configuration will be switched to the null driver"
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ D3D9Renderer::finalize()
|
||||
if (d3d9) {
|
||||
d3d9->Release();
|
||||
d3d9 = nullptr;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -113,7 +113,8 @@ void
|
||||
D3D9Renderer::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
IDirect3DSurface9 *backbuffer = nullptr;
|
||||
RECT srcRect, dstRect;
|
||||
RECT srcRect;
|
||||
RECT dstRect;
|
||||
HRESULT result = d3d9dev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);
|
||||
|
||||
if (FAILED(result)) {
|
||||
|
||||
@@ -36,7 +36,8 @@ private:
|
||||
IDirect3DDevice9Ex *d3d9dev = nullptr;
|
||||
IDirect3DSurface9 *d3d9surface = nullptr;
|
||||
|
||||
std::atomic<bool> surfaceInUse { false }, finalized { false };
|
||||
std::atomic<bool> surfaceInUse { false };
|
||||
std::atomic<bool> finalized { false };
|
||||
bool alreadyInitialized = false;
|
||||
int m_monitor_index = 0;
|
||||
};
|
||||
|
||||
@@ -66,7 +66,8 @@ DeviceConfig::~DeviceConfig()
|
||||
static QStringList
|
||||
EnumerateSerialDevices()
|
||||
{
|
||||
QStringList serialDevices, ttyEntries;
|
||||
QStringList serialDevices;
|
||||
QStringList ttyEntries;
|
||||
QByteArray devstr(1024, 0);
|
||||
#ifdef Q_OS_LINUX
|
||||
QDir class_dir("/sys/class/tty/");
|
||||
@@ -108,7 +109,9 @@ DeviceConfig::ConfigureDevice(const _device_ *device, int instance, Settings *se
|
||||
{
|
||||
DeviceConfig dc(settings);
|
||||
dc.setWindowTitle(QString("%1 Device Configuration").arg(device->name));
|
||||
int c, d, p, q;
|
||||
int c;
|
||||
int p;
|
||||
int q;
|
||||
|
||||
device_context_t device_context;
|
||||
device_set_context(&device_context, device, instance);
|
||||
@@ -216,7 +219,7 @@ DeviceConfig::ConfigureDevice(const _device_ *device, int instance, Settings *se
|
||||
c = q = 0;
|
||||
for (auto *bios = config->bios; (bios != nullptr) && (bios->name != nullptr) && (strlen(bios->name) > 0); ++bios) {
|
||||
p = 0;
|
||||
for (d = 0; d < bios->files_no; d++)
|
||||
for (int d = 0; d < bios->files_no; d++)
|
||||
p += !!rom_present(const_cast<char *>(bios->files[d]));
|
||||
if (p == bios->files_no) {
|
||||
int row = Models::AddEntry(model, bios->name, q);
|
||||
|
||||
@@ -75,7 +75,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent)
|
||||
uint64_t size = ((uint64_t) hdd_table[i][0]) * hdd_table[i][1] * hdd_table[i][2];
|
||||
uint32_t size_mb = size >> 11LL;
|
||||
// QString text = QString("%1 MiB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]);
|
||||
QString text = QString::asprintf(tr("%u MB (CHS: %i, %i, %i)").toUtf8().constData(), (size_mb), (hdd_table[i][0]), (hdd_table[i][1]), (hdd_table[i][2]));
|
||||
QString text = QString::asprintf(tr("%u MB (CHS: %i, %i, %i)").toUtf8().constData(), size_mb, (hdd_table[i][0]), (hdd_table[i][1]), (hdd_table[i][2]));
|
||||
Models::AddEntry(model, text, i);
|
||||
}
|
||||
Models::AddEntry(model, tr("Custom..."), 127);
|
||||
@@ -312,7 +312,7 @@ HarddiskDialog::onCreateNewFile()
|
||||
ui->progressBar->setEnabled(true);
|
||||
setResult(QDialog::Rejected);
|
||||
quint64 size = ui->lineEditSize->text().toULongLong() << 20U;
|
||||
if (size > 0x1FFFFFFE00ll) {
|
||||
if (size > 0x1FFFFFFE00LL) {
|
||||
QMessageBox::critical(this, tr("Disk image too large"), tr("Disk images cannot be larger than 127 GB."));
|
||||
return;
|
||||
}
|
||||
@@ -357,7 +357,7 @@ HarddiskDialog::onCreateNewFile()
|
||||
if (img_format == IMG_FMT_HDI) { /* HDI file */
|
||||
QDataStream stream(&file);
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
if (size >= 0x100000000ll) {
|
||||
if (size >= 0x100000000LL) {
|
||||
QMessageBox::critical(this, tr("Disk image too large"), tr("HDI disk images cannot be larger than 4 GB."));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -141,7 +141,8 @@ HardwareRenderer::paintGL()
|
||||
{
|
||||
m_context->makeCurrent(this);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
QVector<QVector2D> verts, texcoords;
|
||||
QVector<QVector2D> verts;
|
||||
QVector<QVector2D> texcoords;
|
||||
QMatrix4x4 mat;
|
||||
mat.setToIdentity();
|
||||
mat.ortho(QRectF(0, 0, (qreal) width(), (qreal) height()));
|
||||
|
||||
@@ -355,15 +355,14 @@ static int
|
||||
hdd_count(int bus)
|
||||
{
|
||||
int c = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < HDD_NUM; i++) {
|
||||
for (uint8_t i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus == bus) {
|
||||
c++;
|
||||
}
|
||||
}
|
||||
|
||||
return (c);
|
||||
return c;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -86,8 +86,10 @@ void qt_set_sequence_auto_mnemonic(bool b);
|
||||
void
|
||||
main_thread_fn()
|
||||
{
|
||||
uint64_t old_time, new_time;
|
||||
int drawits, frames;
|
||||
uint64_t old_time;
|
||||
uint64_t new_time;
|
||||
int drawits;
|
||||
int frames;
|
||||
|
||||
QThread::currentThread()->setPriority(QThread::HighestPriority);
|
||||
framecountx = 0;
|
||||
|
||||
@@ -48,7 +48,9 @@ extern "C" {
|
||||
#include <86box/machine.h>
|
||||
#include <86box/vid_ega.h>
|
||||
#include <86box/version.h>
|
||||
//#include <86box/acpi.h> /* Requires timer.h include, which conflicts with Qt headers */
|
||||
#if 0
|
||||
#include <86box/acpi.h> /* Requires timer.h include, which conflicts with Qt headers */
|
||||
#endif
|
||||
extern atomic_int acpi_pwrbut_pressed;
|
||||
extern int acpi_enabled;
|
||||
|
||||
@@ -413,19 +415,19 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
newVidApi = RendererStack::Renderer::Software;
|
||||
break;
|
||||
case 1:
|
||||
newVidApi = (RendererStack::Renderer::OpenGL);
|
||||
newVidApi = RendererStack::Renderer::OpenGL;
|
||||
break;
|
||||
case 2:
|
||||
newVidApi = (RendererStack::Renderer::OpenGLES);
|
||||
newVidApi = RendererStack::Renderer::OpenGLES;
|
||||
break;
|
||||
case 3:
|
||||
newVidApi = (RendererStack::Renderer::OpenGL3);
|
||||
newVidApi = RendererStack::Renderer::OpenGL3;
|
||||
break;
|
||||
case 4:
|
||||
newVidApi = (RendererStack::Renderer::Vulkan);
|
||||
newVidApi = RendererStack::Renderer::Vulkan;
|
||||
break;
|
||||
case 5:
|
||||
newVidApi = (RendererStack::Renderer::Direct3D9);
|
||||
newVidApi = RendererStack::Renderer::Direct3D9;
|
||||
break;
|
||||
#ifdef USE_VNC
|
||||
case 6:
|
||||
|
||||
@@ -241,7 +241,7 @@ MediaHistoryManager::addImageToHistory(int index, ui::MediaType type, const QStr
|
||||
}
|
||||
|
||||
// Pop any extras
|
||||
if ((device_history.size() > MAX_PREV_IMAGES)) {
|
||||
if (device_history.size() > MAX_PREV_IMAGES) {
|
||||
device_history.pop_back();
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,8 @@ private:
|
||||
[[nodiscard]] const master_list_t &getMasterList() const;
|
||||
void setMasterList(const master_list_t &masterList);
|
||||
|
||||
device_index_list_t index_list, empty_device_index_list;
|
||||
device_index_list_t index_list;
|
||||
device_index_list_t empty_device_index_list;
|
||||
|
||||
// Return a blank, initialized image history list
|
||||
master_list_t &blankImageHistory(master_list_t &initialized_master_list) const;
|
||||
|
||||
@@ -61,10 +61,12 @@ struct disk_size_t {
|
||||
|
||||
static const disk_size_t disk_sizes[14] = {
|
||||
// clang-format off
|
||||
// { 1, 1, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 250k 8" */
|
||||
// { 1, 2, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 500k 8" */
|
||||
// { 1, 1, 2, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 616k 8" */
|
||||
// { 1, 2, 0, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 1232k 8" */
|
||||
#if 0
|
||||
{ 1, 1, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 250k 8" */
|
||||
{ 1, 2, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 500k 8" */
|
||||
{ 1, 1, 2, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 616k 8" */
|
||||
{ 1, 2, 0, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 1232k 8" */
|
||||
#endif
|
||||
{ 0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 2, 2, 1, 64 }, /* 160k */
|
||||
{ 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 2, 2, 1, 64 }, /* 180k */
|
||||
{ 0, 2, 2, 1, 0, 40, 8, 2, 0xff, 2, 2, 1, 112 }, /* 320k */
|
||||
@@ -79,8 +81,10 @@ static const disk_size_t disk_sizes[14] = {
|
||||
{ 2, 2, 3, 1, 0, 80, 36, 2, 0xf0, 2, 2, 9, 240 }, /* 2.88M */
|
||||
{ 0, 64, 0, 0, 0, 96, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 100 */
|
||||
{ 0, 64, 0, 0, 0, 239, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 250 */
|
||||
// { 0, 8, 0, 0, 0, 963, 32, 2, 0, 0, 0, 0, 0 }, /* LS-120 */
|
||||
// { 0, 32, 0, 0, 0, 262, 56, 2, 0, 0, 0, 0, 0 } /* LS-240 */
|
||||
#if 0
|
||||
{ 0, 8, 0, 0, 0, 963, 32, 2, 0, 0, 0, 0, 0 }, /* LS-120 */
|
||||
{ 0, 32, 0, 0, 0, 262, 56, 2, 0, 0, 0, 0, 0 } /* LS-240 */
|
||||
#endif
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
@@ -264,7 +268,8 @@ NewFloppyDialog::create86f(const QString &filename, const disk_size_t &disk_size
|
||||
uint32_t index_hole_pos = 0;
|
||||
uint32_t tarray[512];
|
||||
uint32_t array_size;
|
||||
uint32_t track_base, track_size;
|
||||
uint32_t track_base;
|
||||
uint32_t track_size;
|
||||
int i;
|
||||
uint32_t shift = 0;
|
||||
|
||||
@@ -644,11 +649,13 @@ bool
|
||||
NewFloppyDialog::createMoSectorImage(const QString &filename, int8_t disk_size, FileType type, QProgressDialog &pbar)
|
||||
{
|
||||
const mo_type_t *dp = &mo_types[disk_size];
|
||||
uint32_t total_size = 0, total_size2;
|
||||
uint32_t total_size = 0;
|
||||
uint32_t total_size2;
|
||||
uint32_t total_sectors = 0;
|
||||
uint32_t sector_bytes = 0;
|
||||
uint16_t base = 0x1000;
|
||||
uint32_t pbar_max = 0, blocks_num;
|
||||
uint32_t pbar_max = 0;
|
||||
uint32_t blocks_num;
|
||||
|
||||
QFile file(filename);
|
||||
if (!file.open(QIODevice::WriteOnly)) {
|
||||
|
||||
@@ -48,7 +48,9 @@
|
||||
# include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
// static QByteArray buf;
|
||||
#if 0
|
||||
static QByteArray buf;
|
||||
#endif
|
||||
extern QElapsedTimer elapsed_timer;
|
||||
extern MainWindow *main_window;
|
||||
QElapsedTimer elapsed_timer;
|
||||
@@ -145,7 +147,9 @@ void
|
||||
do_stop(void)
|
||||
{
|
||||
cpu_thread_run = 0;
|
||||
// main_window->close();
|
||||
#if 0
|
||||
main_window->close();
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
@@ -249,7 +253,7 @@ path_get_filename(char *s)
|
||||
c--;
|
||||
}
|
||||
|
||||
return (s);
|
||||
return s;
|
||||
#else
|
||||
auto idx = QByteArray::fromRawData(s, strlen(s)).lastIndexOf(QDir::separator().toLatin1());
|
||||
if (idx >= 0) {
|
||||
@@ -353,7 +357,8 @@ void
|
||||
plat_pause(int p)
|
||||
{
|
||||
static wchar_t oldtitle[512];
|
||||
wchar_t title[1024], paused_msg[512];
|
||||
wchar_t title[1024];
|
||||
wchar_t paused_msg[512];
|
||||
|
||||
if (p == dopause) {
|
||||
#ifdef Q_OS_WINDOWS
|
||||
@@ -602,6 +607,8 @@ ProgSettings::reloadStrings()
|
||||
translatedstrings[IDS_2143] = QCoreApplication::translate("", "Monitor in sleep mode").toStdWString();
|
||||
translatedstrings[IDS_2121] = QCoreApplication::translate("", "No ROMs found").toStdWString();
|
||||
translatedstrings[IDS_2056] = QCoreApplication::translate("", "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory.").toStdWString();
|
||||
translatedstrings[IDS_2167] = QCoreApplication::translate("", "Failed to initialize network driver").toStdWString();
|
||||
translatedstrings[IDS_2168] = QCoreApplication::translate("", "The network configuration will be switched to the null driver").toStdWString();
|
||||
|
||||
auto flsynthstr = QCoreApplication::translate("", " is required for FluidSynth MIDI output.");
|
||||
if (flsynthstr.contains("libfluidsynth")) {
|
||||
|
||||
@@ -55,7 +55,11 @@ RendererCommon::onResize(int width, int height)
|
||||
destination.setRect(0, 0, width, height);
|
||||
return;
|
||||
}
|
||||
double dx, dy, dw, dh, gsr;
|
||||
double dx;
|
||||
double dy;
|
||||
double dw;
|
||||
double dh;
|
||||
double gsr;
|
||||
|
||||
double hw = width;
|
||||
double hh = height;
|
||||
|
||||
@@ -41,7 +41,8 @@ public:
|
||||
protected:
|
||||
bool eventDelegate(QEvent *event, bool &result);
|
||||
|
||||
QRect source { 0, 0, 0, 0 }, destination;
|
||||
QRect source { 0, 0, 0, 0 };
|
||||
QRect destination;
|
||||
QWidget *parentWidget { nullptr };
|
||||
|
||||
std::vector<std::atomic_flag> buf_usage;
|
||||
|
||||
@@ -58,10 +58,13 @@ double mouse_x_error = 0.0, mouse_y_error = 0.0;
|
||||
}
|
||||
|
||||
struct mouseinputdata {
|
||||
atomic_int deltax, deltay, deltaz;
|
||||
atomic_int deltax;
|
||||
atomic_int deltay;
|
||||
atomic_int deltaz;
|
||||
atomic_int mousebuttons;
|
||||
atomic_bool mouse_tablet_in_proximity;
|
||||
std::atomic<double> x_abs, y_abs;
|
||||
std::atomic<double> x_abs;
|
||||
std::atomic<double> y_abs;
|
||||
};
|
||||
static mouseinputdata mousedata;
|
||||
|
||||
@@ -435,7 +438,7 @@ RendererStack::createRenderer(Renderer renderer)
|
||||
QTimer::singleShot(0, this, [this]() { switchRenderer(Renderer::Software); });
|
||||
current.reset(nullptr);
|
||||
break;
|
||||
};
|
||||
}
|
||||
rendererWindow = hw;
|
||||
connect(this, &RendererStack::blitToRenderer, hw, &VulkanWindowRenderer::onBlit, Qt::QueuedConnection);
|
||||
connect(hw, &VulkanWindowRenderer::rendererInitialized, [=]() {
|
||||
|
||||
@@ -103,7 +103,14 @@ private:
|
||||
|
||||
Ui::RendererStack *ui;
|
||||
|
||||
int x, y, w, h, sx, sy, sw, sh;
|
||||
int x;
|
||||
int y;
|
||||
int w;
|
||||
int h;
|
||||
int sx;
|
||||
int sy;
|
||||
int sw;
|
||||
int sh;
|
||||
|
||||
int currentBuf = 0;
|
||||
int isMouseDown = 0;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user