mirror of
https://github.com/jfdelnero/HxCFloppyEmulator.git
synced 2026-09-11 09:02:45 +00:00
211 lines
4.6 KiB
C
211 lines
4.6 KiB
C
/*
|
|
//
|
|
// Copyright (C) 2006-2026 Jean-François DEL NERO
|
|
//
|
|
// This file is part of the HxCFloppyEmulator library
|
|
//
|
|
// HxCFloppyEmulator may be used and distributed without restriction provided
|
|
// that this copyright statement is not removed from the file and that any
|
|
// derivative work contains the original copyright notice and the associated
|
|
// disclaimer.
|
|
//
|
|
// HxCFloppyEmulator is free software; you can redistribute it
|
|
// and/or modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; either version 2
|
|
// of the License, or (at your option) any later version.
|
|
//
|
|
// HxCFloppyEmulator is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
// See the GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with HxCFloppyEmulator; if not, write to the Free Software
|
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
//
|
|
*/
|
|
|
|
#include "internal_floppy.h"
|
|
|
|
|
|
typedef int (*HXCFE_PRINTF_FUNC)(int MSGTYPE, const char * string, ...);
|
|
#define _HXCFE_PRINTF_FUNC_
|
|
|
|
typedef int (*HXCFE_TRACKPOSOUT_FUNC)(unsigned int current,unsigned int total);
|
|
#define _HXCFE_TRACKPOSOUT_FUNC_
|
|
|
|
typedef int (*HXCFE_IMGLDRPROGRESSOUT_FUNC)(unsigned int current,unsigned int total, void * user);
|
|
#define _HXCFE_IMGLDRPROGRESSOUT_FUNC_
|
|
|
|
typedef int (*HXCFE_TDPROGRESSOUT_FUNC)(unsigned int current,unsigned int total,void * td, void * user);
|
|
#define _HXCFE_TDPROGRESSOUT_FUNC_
|
|
|
|
typedef struct _HXCFE
|
|
{
|
|
HXCFE_PRINTF_FUNC hxc_printf;
|
|
HXCFE_TRACKPOSOUT_FUNC hxc_settrackpos;
|
|
|
|
void * image_handlers;
|
|
|
|
void * envvar;
|
|
|
|
void * scriptctx;
|
|
|
|
char * license;
|
|
}HXCFE;
|
|
|
|
#define _HXCFE_
|
|
|
|
|
|
typedef struct _HXCFE_IMGLDR
|
|
{
|
|
HXCFE * hxcfe;
|
|
HXCFE_IMGLDRPROGRESSOUT_FUNC hxc_setprogress;
|
|
void * progress_userdata;
|
|
|
|
int selected_id;
|
|
int selected_subid;
|
|
|
|
}HXCFE_IMGLDR;
|
|
|
|
typedef struct _HXCFE_IMGLDR_FILEINFOS
|
|
{
|
|
int is_dir;
|
|
char path[1024];
|
|
char file_extension[32];
|
|
int file_size;
|
|
unsigned char file_header[512];
|
|
}HXCFE_IMGLDR_FILEINFOS;
|
|
|
|
int32_t hxcfe_preloadImgInfos(HXCFE_IMGLDR * imgldr_ctx, char * imgname, HXCFE_IMGLDR_FILEINFOS * file_infos);
|
|
int32_t hxcfe_imgCheckFileCompatibility( HXCFE_IMGLDR * imgldr_ctx, HXCFE_IMGLDR_FILEINFOS * file_infos, char * loadername, char * fileext, int filesizemod);
|
|
|
|
#define _HXCFE_IMGLDR_
|
|
|
|
typedef struct _HXCFE_XMLLDR
|
|
{
|
|
void * xml_parser;
|
|
void * ad;
|
|
}HXCFE_XMLLDR;
|
|
|
|
#define _HXCFE_XMLLDR_
|
|
|
|
#define MAX_MARKER 32
|
|
|
|
typedef struct _HXCFE_TD_MARKER
|
|
{
|
|
int32_t cell_pos;
|
|
|
|
uint32_t type;
|
|
|
|
uint32_t color;
|
|
|
|
uint32_t flags;
|
|
|
|
}HXCFE_TD_MARKER;
|
|
|
|
typedef struct _HXCFE_TD
|
|
{
|
|
HXCFE * hxcfe;
|
|
|
|
// Window / Display size
|
|
int32_t xsize,ysize;
|
|
|
|
// Zoomed full resolution
|
|
int32_t virtual_xsize,virtual_ysize;
|
|
|
|
// Window x,y position
|
|
int32_t window_xpos,window_ypos;
|
|
|
|
int32_t x_us,y_us;
|
|
int32_t x_start_us;
|
|
uint32_t flags;
|
|
uint32_t * framebuffer;
|
|
uint32_t * layers[16];
|
|
void * sl;
|
|
|
|
uint32_t enabledtrackmode;
|
|
int32_t disk_type;
|
|
int32_t bands_type;
|
|
|
|
uint32_t noloop_trackmode;
|
|
|
|
void * pl;
|
|
|
|
HXCFE_TDPROGRESSOUT_FUNC hxc_setprogress;
|
|
|
|
char * name;
|
|
|
|
void * progress_userdata;
|
|
|
|
HXCFE_TD_MARKER markers[MAX_MARKER];
|
|
|
|
float angle_step;
|
|
}HXCFE_TD;
|
|
|
|
#define _HXCFE_TD_
|
|
|
|
typedef struct pll_stat_
|
|
{
|
|
// current cell size (1 cell size)
|
|
int32_t pump_charge;
|
|
|
|
// current window phase
|
|
int32_t phase;
|
|
|
|
// center value
|
|
int32_t pll_max;
|
|
int32_t pivot;
|
|
int32_t pll_min;
|
|
|
|
int32_t last_error;
|
|
|
|
// last pulse phase
|
|
int32_t lastpulsephase;
|
|
|
|
int tick_freq;
|
|
int pll_min_max_percent;
|
|
|
|
int fast_correction_ratio_n,fast_correction_ratio_d;
|
|
int slow_correction_ratio_n,slow_correction_ratio_d;
|
|
|
|
int inter_band_rejection;
|
|
|
|
int max_pll_error_ticks;
|
|
|
|
int band_mode;
|
|
int bands_separators[16];
|
|
int track;
|
|
int side;
|
|
}pll_stat;
|
|
|
|
typedef struct _HXCFE_FXSA
|
|
{
|
|
HXCFE * hxcfe;
|
|
|
|
// step resolution (ps)
|
|
int32_t steptime;
|
|
|
|
int32_t phasecorrection;
|
|
|
|
int32_t defaultbitrate;
|
|
|
|
int32_t filter;
|
|
int32_t filterpasses;
|
|
|
|
int analysis_window_size;
|
|
int analysis_rev2rev_max_pulses_jitter;
|
|
|
|
pll_stat pll;
|
|
|
|
int out_index_length_us;
|
|
|
|
int weak_cell_threshold;
|
|
|
|
int32_t sector_recovery;
|
|
}HXCFE_FXSA;
|
|
|
|
#define _HXCFE_FXSA_
|
|
|
|
int32_t hxcfe_imgCallProgressCallback( HXCFE_IMGLDR * imgldr_ctx, int32_t cur, int32_t max );
|