mirror of
https://github.com/buserror/mii_emu.git
synced 2024-11-22 16:33:01 +00:00
191 lines
4.3 KiB
C
191 lines
4.3 KiB
C
|
/*
|
||
|
* mii_settings.h
|
||
|
*
|
||
|
* Copyright (C) 2023 Michel Pollet <buserror@gmail.com>
|
||
|
*
|
||
|
* SPDX-License-Identifier: MIT
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* This file defines the configuration data model for the emulator, it is
|
||
|
* made so it can be included without having to include the emulator's
|
||
|
* own headers.
|
||
|
* This way the dialog/ui can still be tested without having to link
|
||
|
* against the emulator, using the mui_playground test.
|
||
|
*/
|
||
|
#pragma once
|
||
|
|
||
|
#include <stdint.h>
|
||
|
|
||
|
#include "bsd_queue.h"
|
||
|
#include "c_array.h"
|
||
|
|
||
|
#define MII_PATH_SIZE_MAX 256
|
||
|
|
||
|
typedef struct mii_config_line_t {
|
||
|
unsigned int ignore : 1,
|
||
|
section : 1,
|
||
|
number; // line number in file
|
||
|
char * key;
|
||
|
char * value;
|
||
|
char line[];
|
||
|
} mii_config_line_t;
|
||
|
|
||
|
DECLARE_C_ARRAY(mii_config_line_t*, mii_config_array, 16);
|
||
|
|
||
|
typedef struct mii_config_file_t {
|
||
|
char * path;
|
||
|
mii_config_array_t line;
|
||
|
} mii_config_file_t;
|
||
|
|
||
|
typedef struct mii_drive_conf_t {
|
||
|
unsigned long flags;
|
||
|
char disk[MII_PATH_SIZE_MAX];
|
||
|
} mii_drive_conf_t;
|
||
|
|
||
|
typedef struct mii_1mb_conf_t {
|
||
|
unsigned long slot_id : 3,
|
||
|
use_default : 1,
|
||
|
reserved;
|
||
|
mii_drive_conf_t drive;
|
||
|
} mii_1mb_conf_t;
|
||
|
|
||
|
typedef struct mii_2dsk_conf_t {
|
||
|
unsigned long slot_id : 3, reserved;
|
||
|
mii_drive_conf_t drive[2];
|
||
|
} mii_2dsk_conf_t;
|
||
|
|
||
|
typedef struct mii_ssc_conf_t {
|
||
|
uint8_t kind; // device, pty, socket
|
||
|
int socket_port;
|
||
|
char device[MII_PATH_SIZE_MAX];
|
||
|
// rom/card configuration
|
||
|
unsigned int baud, bits, parity, stop;
|
||
|
} mii_ssc_conf_t;
|
||
|
|
||
|
typedef struct mii_joystick_conf_t {
|
||
|
// /dev/input/js0 if empty
|
||
|
char device[MII_PATH_SIZE_MAX];
|
||
|
unsigned int buttons[2];
|
||
|
unsigned int axes[2];
|
||
|
} mii_joystick_conf_t;
|
||
|
|
||
|
typedef struct mii_loadbin_conf_t {
|
||
|
uint16_t active: 1, audo_reload : 1;
|
||
|
uint16_t bank; // unused for now
|
||
|
uint16_t addr; // address in bank
|
||
|
char path[MII_PATH_SIZE_MAX];
|
||
|
} mii_loadbin_conf_t;
|
||
|
|
||
|
enum mii_mui_driver_e {
|
||
|
MII_SLOT_DRIVER_NONE = 0,
|
||
|
MII_SLOT_DRIVER_SMARTPORT,
|
||
|
MII_SLOT_DRIVER_DISK2,
|
||
|
MII_SLOT_DRIVER_MOUSE,
|
||
|
MII_SLOT_DRIVER_SUPERSERIAL,
|
||
|
MII_SLOT_DRIVER_ROM1MB,
|
||
|
MII_SLOT_DRIVER_COUNT
|
||
|
};
|
||
|
|
||
|
// This is obviously not made to be terribly compact.
|
||
|
typedef struct mii_machine_config_t {
|
||
|
uint32_t reboot_on_load : 1,
|
||
|
load_defaults : 1,
|
||
|
audio_muted : 1,
|
||
|
no_slot_clock : 1,
|
||
|
titan_accelerator : 1;
|
||
|
uint32_t video_mode;
|
||
|
mii_joystick_conf_t joystick;
|
||
|
struct {
|
||
|
uint16_t driver;
|
||
|
union {
|
||
|
mii_2dsk_conf_t smartport;
|
||
|
mii_2dsk_conf_t disk2;
|
||
|
mii_1mb_conf_t rom1mb;
|
||
|
mii_ssc_conf_t ssc;
|
||
|
} conf;
|
||
|
} slot[7];
|
||
|
} mii_machine_config_t;
|
||
|
|
||
|
struct mui_window_t;
|
||
|
struct mui_t;
|
||
|
|
||
|
/*
|
||
|
* These are passed to the window action proc when the dialogs have
|
||
|
* been validated and closed. The matching config structures have been
|
||
|
* updated and can be used to update the emulator's configuration.
|
||
|
*/
|
||
|
enum mii_mui_dialog_e {
|
||
|
MII_MUI_SLOTS_SAVE = FCC('S','L','O','T'),
|
||
|
MII_MUI_LOADBIN_SAVE = FCC('B','I','N',' '),
|
||
|
MII_MUI_1MB_SAVE = FCC('1','M','B',' '),
|
||
|
MII_MUI_DISK2_SAVE = FCC('2','D','S','K'),
|
||
|
MII_MUI_SMARTPORT_SAVE = FCC('S','M','P','T'),
|
||
|
};
|
||
|
|
||
|
struct mui_window_t *
|
||
|
mii_mui_configure_slots(
|
||
|
struct mui_t *mui,
|
||
|
mii_machine_config_t *config);
|
||
|
mui_window_t *
|
||
|
mii_mui_configure_slot(
|
||
|
struct mui_t *mui,
|
||
|
mii_machine_config_t *config,
|
||
|
int slot_id);
|
||
|
|
||
|
struct mui_window_t *
|
||
|
mii_mui_load_binary(
|
||
|
struct mui_t *mui,
|
||
|
mii_loadbin_conf_t *config);
|
||
|
struct mui_window_t *
|
||
|
mii_mui_load_1mbrom(
|
||
|
struct mui_t *mui,
|
||
|
mii_1mb_conf_t *config);
|
||
|
|
||
|
enum mii_mui_2dsk_e {
|
||
|
MII_2DSK_DISKII = 0,
|
||
|
MII_2DSK_SMARTPORT,
|
||
|
};
|
||
|
|
||
|
struct mui_window_t *
|
||
|
mii_mui_load_2dsk(
|
||
|
struct mui_t *mui,
|
||
|
mii_2dsk_conf_t *config,
|
||
|
uint8_t drive_kind);
|
||
|
|
||
|
/*
|
||
|
* Config file related
|
||
|
*/
|
||
|
mii_config_line_t *
|
||
|
mii_config_get_section(
|
||
|
mii_config_file_t * cf,
|
||
|
const char * section,
|
||
|
bool add );
|
||
|
mii_config_line_t *
|
||
|
mii_config_get(
|
||
|
mii_config_file_t * cf,
|
||
|
mii_config_line_t * section,
|
||
|
const char * key);
|
||
|
mii_config_line_t *
|
||
|
mii_config_set(
|
||
|
mii_config_file_t * cf,
|
||
|
mii_config_line_t * section,
|
||
|
const char * key,
|
||
|
const char * value);
|
||
|
int
|
||
|
mii_settings_save(
|
||
|
mii_config_file_t * cf);
|
||
|
int
|
||
|
mii_settings_load(
|
||
|
mii_config_file_t * cf,
|
||
|
const char * path,
|
||
|
const char * file );
|
||
|
int
|
||
|
mii_emu_save(
|
||
|
mii_config_file_t * cf,
|
||
|
mii_machine_config_t * config );
|
||
|
int
|
||
|
mii_emu_load(
|
||
|
mii_config_file_t * cf,
|
||
|
mii_machine_config_t * config );
|