19#ifndef __DC_MAPLE_MIE_H
20#define __DC_MAPLE_MIE_H
66#define MIE_JVS_PLAYER_SLOTS 2
67#define MIE_JVS_ANALOG_CHANNELS 8
68#define MIE_JVS_ANALOG_RAW_MASK (GENMASK(6, 0) | GENMASK(15, 8))
69#define MIE_JVS_COIN_SLOTS 2
70#define MIE_JVS_PANEL_DIP_COUNT 4
71#define MIE_JVS_OUTPUT_COUNT 24
72#define MIE_EEPROM_SIZE 128
91#define MIE_JVS_SW1_BIT BIT(8)
92#define MIE_JVS_SW2_BIT BIT(9)
93#define MIE_JVS_RIGHT_BIT BIT(10)
94#define MIE_JVS_LEFT_BIT BIT(11)
95#define MIE_JVS_DOWN_BIT BIT(12)
96#define MIE_JVS_UP_BIT BIT(13)
97#define MIE_JVS_SERVICE_BIT BIT(14)
98#define MIE_JVS_START_BIT BIT(15)
99#define MIE_JVS_SW9_BIT BIT(0)
100#define MIE_JVS_SW10_BIT BIT(1)
101#define MIE_JVS_SW11_BIT BIT(2)
102#define MIE_JVS_SW12_BIT BIT(3)
103#define MIE_JVS_SW13_BIT BIT(4)
104#define MIE_JVS_SW14_BIT BIT(5)
105#define MIE_JVS_SW15_BIT BIT(6)
106#define MIE_JVS_SW16_BIT BIT(7)
107#define MIE_JVS_COIN_INSERT_BIT BIT(0)
108#define MIE_JVS_PANEL_DIP1_BIT BIT(0)
109#define MIE_JVS_PANEL_DIP2_BIT BIT(1)
110#define MIE_JVS_PANEL_DIP3_BIT BIT(2)
111#define MIE_JVS_PANEL_DIP4_BIT BIT(3)
112#define MIE_JVS_PANEL_TEST_BIT BIT(0)
113#define MIE_JVS_PANEL_SERVICE_BIT BIT(1)
114#define MIE_JVS_SYS_TILT3_BIT BIT(4)
115#define MIE_JVS_SYS_TILT2_BIT BIT(5)
116#define MIE_JVS_SYS_TILT1_BIT BIT(6)
117#define MIE_JVS_SYS_TEST_BIT BIT(7)
126#define MIE_JVS_COIN_STUFF 0x4000
127#define MIE_JVS_COIN_COUNTER_BREAK 0x8000
128#define MIE_JVS_COIN_BUSY (MIE_JVS_COIN_STUFF | MIE_JVS_COIN_COUNTER_BREAK)
129#define MIE_JVS_COIN_DEC_LIMIT 0x1000
148typedef struct mie_jvs_coin_slot {
159typedef struct mie_jvs_player_sw {
186typedef struct mie_jvs_panel_dip {
205typedef struct mie_jvs_system {
221typedef struct mie_jvs_panel {
242typedef struct mie_jvs_inputs {
274typedef struct mie_state {
348typedef enum mie_jvs_input {
397typedef struct mie_analog_axis_calib {
406typedef struct mie_analog_calib {
418typedef enum mie_analog_calib_step {
526#define MIE_JVS_OUTPUT_MASK(index) BIT(31 - (index))
529#define MIE_JVS_OUTPUT_ALL GENMASK(31, 32 - MIE_JVS_OUTPUT_COUNT)
532#define MIE_JVS_OUTPUT_MASK_COUNT(count) GENMASK(31, 32 - (count))
817void mie_shutdown(
void);
818void mie_init_scan(
void);
819void mie_scan_complete(
void);
Various common macros used throughout the codebase.
Definitions for using the controller device.
void mie_analog_calib_cancel(void)
Cancel a running calibration session.
int mie_analog_norm_accel(uint16_t raw)
Normalize a raw JVS accelerator value.
mie_analog_calib_step_t
Interactive calibration step.
Definition mie.h:418
int mie_analog_norm_brake(uint16_t raw)
Normalize a raw JVS brake value.
bool mie_analog_calib_capture(void)
Confirm the current step and advance the session.
void mie_analog_calib_reset(void)
Clear the active calibration and any running session.
bool mie_analog_calib_valid(void)
Check whether the active calibration has usable ranges.
int mie_analog_norm_wheel(uint16_t raw)
Normalize a raw JVS wheel value.
const mie_analog_calib_t * mie_analog_calib_get(void)
Get the active driver calibration.
void mie_analog_calib_start(void)
Start the interactive calibration session.
void mie_analog_calib_set(const mie_analog_calib_t *calib)
Install a calibration set.
mie_analog_calib_step_t mie_analog_calib_current(void)
Query the current calibration step.
bool mie_analog_calib_active(void)
Check whether a calibration session is running.
@ MIE_ANALOG_CALIB_BRAKE
Release then fully press brake.
Definition mie.h:423
@ MIE_ANALOG_CALIB_ACCEL
Release then fully press accelerator.
Definition mie.h:422
@ MIE_ANALOG_CALIB_WHEEL
Turn the wheel fully both ways.
Definition mie.h:420
@ MIE_ANALOG_CALIB_IDLE
No session running.
Definition mie.h:419
@ MIE_ANALOG_CALIB_WHEEL_CENTER
Hold the wheel centered.
Definition mie.h:421
int mie_btn_callback(uint32_t btns, mie_btn_callback_t cb)
Set an automatic mapped button press callback.
void(* mie_btn_callback_t)(uint32_t btns)
Mapped controller button callback type.
Definition mie.h:343
void(* mie_jvs_callback_t)(mie_jvs_input_t input, uint32_t mask)
Native JVS input callback type.
Definition mie.h:366
int mie_jvs_callback(mie_jvs_input_t input, uint32_t mask, mie_jvs_callback_t cb)
Set an automatic native JVS input callback.
mie_jvs_input_t
Native JVS input source for mie_jvs_callback().
Definition mie.h:348
@ MIE_JVS_IN_COIN2
Coin slot 2 (COIN SW 2) meter insert.
Definition mie.h:355
@ MIE_JVS_IN_COIN1
Coin slot 1 (COIN SW 1) meter insert.
Definition mie.h:354
@ MIE_JVS_IN_PANEL_DIP
Cabinet DIP switches.
Definition mie.h:352
@ MIE_JVS_IN_P1
Player 1 switch bank.
Definition mie.h:350
@ MIE_JVS_IN_P2
Player 2 switch bank.
Definition mie.h:351
@ MIE_JVS_IN_PANEL_PSW
Cabinet panel service switches.
Definition mie.h:353
@ MIE_JVS_IN_SYSTEM
JVS SWINP system switch byte.
Definition mie.h:349
uint16_t mie_get_coin_meter(uint8_t slot)
Read cached coin slot meter.
bool mie_coin_add(uint8_t slot, uint16_t amount, bool block)
Send JVS COINADD (0x35) for a coin slot.
bool mie_read_coin_input(mie_jvs_coin_slot_t *out, int max_slots)
Copy cached coin slot state from the last poll.
bool mie_coin_decrease(uint8_t slot, uint16_t amount, bool block)
Send JVS COINDEC (0x30) for a coin slot.
char * mie_get_id(char *dst)
Read the MIE board identifier string.
uint16_t mie_eeprom_crc16(const uint8_t *buf, size_t size)
Compute Sega NAOMI EEPROM CRC-16.
bool mie_set_eeprom(uint8_t *eeprom)
Write the MIE on-board EEPROM.
bool mie_get_eeprom(void *dst)
Read the MIE on-board EEPROM.
bool mie_init_fw(const char *fw_path)
Initialize MIE/JVS, uploading Z80 firmware when needed.
void mie_eeprom_fix_crc(uint8_t *eeprom)
Recompute NAOMI EEPROM CRC fields in a 128-byte buffer.
#define MIE_JVS_ANALOG_CHANNELS
Number of JVS analog channels.
Definition mie.h:67
#define MIE_JVS_COIN_SLOTS
Max JVS coin slots.
Definition mie.h:69
void(* mie_cont_map_fn_t)(const mie_jvs_inputs_t *jvs, cont_state_t *cont)
JVS inputs to Dreamcast controller mapper.
Definition mie.h:321
void mie_set_cont_map(mie_cont_map_fn_t fn)
Install a custom JVS-to-controller mapper.
bool mie_jvs_set_output(uint8_t index, bool on, bool block)
Set a single JVS general purpose output.
uint8_t mie_jvs_driver_outputs(void)
Number of JVS outputs reported by the I/O board.
bool mie_jvs_set_outputs(uint32_t outputs, bool block)
Set all JVS general purpose outputs at once.
uint32_t mie_jvs_get_outputs(void)
Get the cached JVS general purpose output state.
mie_port0_mode_t
NAOMI port A wiring mode.
Definition mie.h:433
mie_port0_mode_t mie_port0_mode(void)
Query NAOMI port A wiring mode.
@ MIE_PORT0_JVS
Port A is MIE/JVS bridge.
Definition mie.h:435
@ MIE_PORT0_MAPLE
Port A is standard Maple autodetect.
Definition mie.h:436
@ MIE_PORT0_UNKNOWN
Probing not finished yet.
Definition mie.h:434
Maple Bus driver interface.
static uint8_t block[4096]
Definition mke2fs.c:45
Macros to help dealing with register fields.
Controller state structure.
Definition controller.h:145
Per-axis JVS analog calibration data.
Definition mie.h:397
uint16_t min
Raw value at the minimum position.
Definition mie.h:398
uint16_t center
Raw center value (wheel only).
Definition mie.h:399
uint16_t max
Raw value at the maximum position.
Definition mie.h:400
Wheel and pedal calibration set.
Definition mie.h:406
mie_analog_axis_calib_t brake
Brake pedal calibration.
Definition mie.h:409
mie_analog_axis_calib_t accel
Accelerator pedal calibration.
Definition mie.h:408
mie_analog_axis_calib_t wheel
Steering wheel calibration.
Definition mie.h:407
Parsed JVS coin slot state.
Definition mie.h:148
uint16_t raw
Raw 16-bit COININP word.
Definition mie.h:149
uint16_t count
Last good meter (status bits cleared).
Definition mie.h:150
Panel DIP switch bank.
Definition mie.h:186
uint8_t sw3
DIP switch 3 value.
Definition mie.h:192
uint8_t sw4
DIP switch 4 value.
Definition mie.h:193
uint8_t raw
Raw DIP switch byte.
Definition mie.h:188
uint8_t sw1
DIP switch 1 value.
Definition mie.h:190
uint8_t sw2
DIP switch 2 value.
Definition mie.h:191
Cabinet panel switches.
Definition mie.h:221
mie_jvs_panel_dip_t dip
Cabinet DIP switches.
Definition mie.h:222
uint8_t test
Panel test switch (PSW1).
Definition mie.h:226
uint8_t service
Panel service switch (PSW2).
Definition mie.h:227
uint8_t raw
Raw panel service switch byte.
Definition mie.h:224
One player JVS switch bank.
Definition mie.h:159
uint16_t start
Start switch (JVS SW8).
Definition mie.h:178
uint16_t raw
Raw 16-bit JVS switch word.
Definition mie.h:161
uint16_t service
Service switch (JVS SW7).
Definition mie.h:177
uint16_t left
Left switch (JVS SW4).
Definition mie.h:174
uint16_t sw10
Push switch 4 value.
Definition mie.h:164
uint16_t sw15
Push switch 9 value.
Definition mie.h:169
uint16_t sw1
Push switch 2 value.
Definition mie.h:171
uint16_t down
Down switch (JVS SW5).
Definition mie.h:175
uint16_t sw2
Push switch 1 value.
Definition mie.h:172
uint16_t sw16
Push switch 10 value.
Definition mie.h:170
uint16_t sw9
Push switch 3 value.
Definition mie.h:163
uint16_t up
Up switch (JVS SW6).
Definition mie.h:176
uint16_t sw14
Push switch 8 value.
Definition mie.h:168
uint16_t sw12
Push switch 6 value.
Definition mie.h:166
uint16_t right
Right switch (JVS SW3).
Definition mie.h:173
uint16_t sw13
Push switch 7 value.
Definition mie.h:167
uint16_t sw11
Push switch 5 value.
Definition mie.h:165
JVS SWINP system switch byte.
Definition mie.h:205
uint8_t tilt1
Tilt switch 1.
Definition mie.h:212
uint8_t tilt3
Tilt switch 3.
Definition mie.h:210
uint8_t tilt2
Tilt switch 2.
Definition mie.h:211
uint8_t test
Test switch.
Definition mie.h:213
uint8_t raw
Raw JVS system switch byte.
Definition mie.h:207
MIE device status.
Definition mie.h:274
cont_state_t cont
Mapped Dreamcast controller state.
Definition mie.h:275
mie_jvs_inputs_t jvs
Native JVS input state.
Definition mie.h:276