25 #define DBG_PROGNAME "OPENCBM.DLL"
58 unsigned int active_number = 1;
71 active_number = strtoul(active, &next, 10);
72 if (next && (next[0] != 0) ) {
74 "is set to the non-numerical value '%s'",
133 #define OFFSETOF(_type, _element) \
134 ((UINT_PTR) (void *) &((_type *)0)->_element)
136 #define GETELEMENT(_type, _structpointer, _elementoffset) \
137 ((_type *)(((char*)(_structpointer)) + (_elementoffset)))
139 #define PLUGIN_POINTER_DEF(_xxx) \
140 { OFFSETOF(plugin_information_t, Plugin._xxx), #_xxx }
142 #define PLUGIN_POINTER_GET(_what, _element) \
143 GEELEMENT(void, _what, _element)
145 #define PLUGIN_POINTER_END() \
172 PLUGIN_POINTER_DEF(opencbm_plugin_init),
173 PLUGIN_POINTER_DEF(opencbm_plugin_uninit),
205 PLUGIN_POINTER_DEF(opencbm_plugin_srq_burst_read ),
206 PLUGIN_POINTER_DEF(opencbm_plugin_srq_burst_write),
207 PLUGIN_POINTER_DEF(opencbm_plugin_srq_burst_read_track),
208 PLUGIN_POINTER_DEF(opencbm_plugin_srq_burst_write_track),
214 PLUGIN_POINTER_DEF(opencbm_plugin_tap_prepare_capture),
215 PLUGIN_POINTER_DEF(opencbm_plugin_tap_prepare_write),
216 PLUGIN_POINTER_DEF(opencbm_plugin_tap_get_sense),
217 PLUGIN_POINTER_DEF(opencbm_plugin_tap_wait_for_stop_sense),
218 PLUGIN_POINTER_DEF(opencbm_plugin_tap_wait_for_play_sense),
219 PLUGIN_POINTER_DEF(opencbm_plugin_tap_motor_on),
220 PLUGIN_POINTER_DEF(opencbm_plugin_tap_motor_off),
221 PLUGIN_POINTER_DEF(opencbm_plugin_tap_start_capture),
222 PLUGIN_POINTER_DEF(opencbm_plugin_tap_start_write),
223 PLUGIN_POINTER_DEF(opencbm_plugin_tap_get_ver),
224 PLUGIN_POINTER_DEF(opencbm_plugin_tap_download_config),
225 PLUGIN_POINTER_DEF(opencbm_plugin_tap_upload_config),
226 PLUGIN_POINTER_DEF(opencbm_plugin_tap_break),
237 PRP_OPTIONAL_ALL_OR_NOTHING
243 { plugin_pointer_to_read_mandatory, PRP_MANDATORY },
244 { plugin_pointer_to_read_optional, PRP_OPTIONAL },
245 { plugin_pointer_to_read_parallel_burst, PRP_OPTIONAL_ALL_OR_NOTHING },
246 { plugin_pointer_to_read_pp_readwrite, PRP_OPTIONAL_ALL_OR_NOTHING },
247 { plugin_pointer_to_read_srq_burst, PRP_OPTIONAL_ALL_OR_NOTHING },
248 { plugin_pointer_to_read_tape, PRP_OPTIONAL_ALL_OR_NOTHING },
249 { NULL, PRP_OPTIONAL }
258 while (pointer_to_read->name) {
260 void ** ptr_to_save = GETELEMENT(
void *, Plugin_information, pointer_to_read->offset);
261 *ptr_to_save = ptr_read;
263 if (ptr_read == NULL) {
271 static int check_plugin_pointer(
276 while (pointer_to_check->name) {
277 void ** ptr_to_check = GETELEMENT(
void *, Plugin_information, pointer_to_check->offset);
279 if (ptr_to_check == NULL) {
283 if (ptr_to_check == NULL) return 1;
289 static
int check_plugin_pointer_all_or_nothing(
297 error = check_plugin_pointer(Plugin_information, pointer_to_check);
298 if (!error)
return 0;
301 while (pointer_to_check->name) {
302 void ** ptr_to_check = GETELEMENT(
void *, Plugin_information, pointer_to_check->offset);
304 if (ptr_to_check != NULL) {
305 DBG_PRINT((
DBG_PREFIX "Plugin entry point %s found, but it should not be available!", pointer_to_check->name));
308 if (ptr_to_check != NULL) return 1;
315 read_plugin_pointer_groups(
322 while (pointer_to_read_group->read_pointer) {
323 read_plugin_pointer(Plugin_information, pointer_to_read_group->read_pointer);
325 switch (pointer_to_read_group->type) {
327 error = error || check_plugin_pointer(Plugin_information, pointer_to_read_group->read_pointer);
332 case PRP_OPTIONAL_ALL_OR_NOTHING:
333 error = error || check_plugin_pointer_all_or_nothing(Plugin_information, pointer_to_read_group->read_pointer);
337 ++pointer_to_read_group;
350 char * plugin_name = NULL;
351 char * plugin_location = NULL;
357 if (configurationFilename == NULL) {
364 if (handle_configuration)
375 "plugins",
"default", &plugin_name);
400 plugin_name,
"location", &plugin_location);
409 plugin_location = NULL;
419 DBG_PRINT((
DBG_PREFIX "Using plugin at '%s'", plugin_location ? plugin_location :
"(none)"));
421 memset(&Plugin_information->
Plugin, 0,
sizeof(Plugin_information->
Plugin));
427 if (!Plugin_information->
Library) {
432 error = read_plugin_pointer_groups(Plugin_information, read_pointer_group);
461 uninitialize_plugin(
void)
463 if (Plugin_information.
Library != NULL)
471 Plugin_information.
Library = NULL;
476 initialize_plugin(
const char *
const Adapter)
483 if (Plugin_information.
Library == NULL)
486 error = initialize_plugin_pointer(&Plugin_information, Adapter);
489 uninitialize_plugin();
529 cbm_split_adapter_in_name_and_port(
char * Adapter,
char ** Port)
531 char * adapter_stripped = NULL;
537 char *p = strchr(Adapter,
':');
545 if (adapter_stripped != NULL) {
558 if (adapter_stripped && adapter_stripped[0] == 0) {
560 adapter_stripped = NULL;
563 return adapter_stripped;
585 const char *ret = NULL;
587 static const char * buffer = NULL;
588 char *adapter_stripped = NULL;
602 adapter_stripped = cbm_split_adapter_in_name_and_port(Adapter, &port);
605 (adapter_stripped == NULL
606 ?
"Using default adapter"
607 :
"Using adapter '%s', that is, adapter '%s' with port '%s'"),
608 Adapter, adapter_stripped, port));
611 error = initialize_plugin(adapter_stripped);
617 ret =
"NO PLUGIN DRIVER!";
652 char number[] =
":0";
656 if (PortNumber >= 0 && PortNumber < 10) {
657 number[1] = PortNumber +
'0';
687 char * adapter_stripped = NULL;
695 adapter_stripped = cbm_split_adapter_in_name_and_port(Adapter, &port);
698 Adapter, adapter_stripped, port));
701 error = initialize_plugin(adapter_stripped);
742 char number[] =
":0";
746 if (PortNumber >= 0 && PortNumber < 10) {
747 number[1] = PortNumber +
'0';
774 uninitialize_plugin();
874 #ifdef DBG_DUMP_RAW_WRITE
914 #ifdef DBG_DUMP_RAW_READ
976 cbm_talk(
CBM_FILE HandleDevice,
unsigned char DeviceAddress,
unsigned char SecondaryAddress)
1013 const void *Filename,
size_t FilenameLength)
1021 if (returnValue == 0)
1025 if(Filename != NULL)
1027 if (FilenameLength == 0)
1030 FilenameLength = strlen(Filename);
1033 if (FilenameLength > 0)
1036 (size_t) (
cbm_raw_write(HandleDevice, Filename, FilenameLength))
1246 unsigned char ret = -1;
1526 void *Buffer,
size_t BufferLength)
1538 if (Buffer && (BufferLength > 0))
1540 char *bufferToWrite = Buffer;
1544 bufferToWrite[--BufferLength] =
'\0';
1548 strncpy(bufferToWrite,
"99, DRIVER ERROR,00,00\r", BufferLength);
1552 if (
cbm_talk(HandleDevice, DeviceAddress, 15) == 0)
1554 unsigned int bytesRead;
1556 bytesRead =
cbm_raw_read(HandleDevice, bufferToWrite, BufferLength - 1);
1562 bufferToWrite[bytesRead] =
'\0';
1567 retValue = atoi(bufferToWrite);
1600 const void *Command,
size_t Size)
1605 rv =
cbm_listen(HandleDevice, DeviceAddress, 15);
1608 Size = (size_t) strlen(Command);
1610 rv = (size_t)
cbm_raw_write(HandleDevice, Command, Size) != Size;
1637 unsigned char ret = 0;
1676 cbm_parallel_burst_read_n(
CBM_FILE HandleDevice,
unsigned char *Buffer,
1677 unsigned int Length)
1686 HandleDevice, Buffer, Length);
1688 for (i = 0; i < Length; i++) {
1689 Buffer[i] = Plugin_information.
Plugin
1699 cbm_parallel_burst_write_n(
CBM_FILE HandleDevice,
unsigned char *Buffer,
1700 unsigned int Length)
1709 HandleDevice, Buffer, Length);
1711 for (i = 0; i < Length; i++) {
1713 HandleDevice, Buffer[i]);
1849 unsigned char ret = 0;
1888 cbm_srq_burst_read_n(
CBM_FILE HandleDevice,
unsigned char *Buffer,
1889 unsigned int Length)
1898 HandleDevice, Buffer, Length);
1900 for (i = 0; i < Length; i++) {
1901 Buffer[i] = Plugin_information.
Plugin
1911 cbm_srq_burst_write_n(
CBM_FILE HandleDevice,
unsigned char *Buffer,
1912 unsigned int Length)
1921 HandleDevice, Buffer, Length);
1923 for (i = 0; i < Length; i++) {
1925 HandleDevice, Buffer[i]);
2334 cbm_tap_break(
CBM_FILE HandleDevice)
2451 void * pointer = NULL;
2455 if (Plugin_information.
Library)
2487 int returnValue = -1;
2530 int returnValue = -1;
void CBMAPIDECL opencbm_plugin_iec_release(CBM_FILE HandleDevice, int Line)
Deactivate a line on the IEC serial bus.
int CBMAPIDECL cbm_get_eoi(CBM_FILE HandleDevice)
Get EOI flag after bus read.
int CBMAPIDECL cbm_tap_prepare_write(CBM_FILE HandleDevice, int *Status)
TAPE: Prepare write.
void CBMAPIDECL opencbm_plugin_driver_close(CBM_FILE HandleDevice)
Closes the driver.
opencbm_plugin_parallel_burst_read_track_t * opencbm_plugin_srq_burst_read_track
#define FUNC_LEAVE_UCHAR(_xxx)
opencbm_plugin_tap_break_t * opencbm_plugin_tap_break
int CBMAPIDECL cbm_talk(CBM_FILE HandleDevice, unsigned char DeviceAddress, unsigned char SecondaryAddress)
Send a TALK on the IEC serial bus.
opencbm_plugin_tap_get_ver_t * opencbm_plugin_tap_get_ver
const char *CBMAPIDECL opencbm_plugin_get_driver_name(const char *const Port)
Get the name of the driver for a specific parallel port.
int CBMAPIDECL opencbm_plugin_driver_open(CBM_FILE *HandleDevice, const char *const Port)
Opens the driver.
int CBMAPIDECL opencbm_plugin_open(CBM_FILE HandleDevice, unsigned char DeviceAddress, unsigned char SecondaryAddress)
Open a file on the IEC serial bus.
opencbm_plugin_parallel_burst_read_n_t * opencbm_plugin_srq_burst_read_n
void * SHARED_OBJECT_HANDLE
@@@
const char *CBMAPIDECL cbm_get_driver_name(int PortNumber)
Get the name of the driver for a specific parallel port.
int CBMAPIDECL cbm_driver_open(CBM_FILE *HandleDevice, int PortNumber)
Opens the driver.
void CBMAPIDECL opencbm_plugin_parallel_burst_write(CBM_FILE HandleDevice, unsigned char Value)
PARBURST: Write to the parallel port.
#define FUNC_LEAVE_INT(_xxx)
int CBMAPIDECL cbm_tap_start_capture(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Buffer_Length, int *Status, int *BytesRead)
TAPE: Start capture.
int CBMAPIDECL cbm_tap_get_ver(CBM_FILE HandleDevice, int *Status)
TAPE: Return tape firmware version.
opencbm_plugin_tap_get_sense_t * opencbm_plugin_tap_get_sense
holds all callbacks of the plugin
char * cbmlibmisc_strdup(const char *const OldString)
Duplicate a given string.
int CBMAPIDECL cbm_listen(CBM_FILE HandleDevice, unsigned char DeviceAddress, unsigned char SecondaryAddress)
Send a LISTEN on the IEC serial bus.
int CBMAPIDECL cbm_tap_wait_for_play_sense(CBM_FILE HandleDevice, int *Status)
Define makros for debugging purposes.
int CBMAPIDECL opencbm_plugin_close(CBM_FILE HandleDevice, unsigned char DeviceAddress, unsigned char SecondaryAddress)
Close a file on the IEC serial bus.
opencbm_plugin_parallel_burst_read_track_var_t * opencbm_plugin_parallel_burst_read_track_var
opencbm_plugin_iec_wait_t * opencbm_plugin_iec_wait
void CBMAPIDECL opencbm_plugin_iec_set(CBM_FILE HandleDevice, int Line)
Activate a line on the IEC serial bus.
void CBMAPIDECL cbm_unlock(CBM_FILE HandleDevice)
Unlock the parallel port for the driver.
opencbm_plugin_iec_dbg_read_t * opencbm_plugin_iec_dbg_read
opencbm_plugin_lock_t * opencbm_plugin_lock
void cbmlibmisc_strfree(const char *String)
Free a string.
opencbm_plugin_iec_dbg_write_t * opencbm_plugin_iec_dbg_write
unsigned char CBMAPIDECL opencbm_plugin_parallel_burst_read(CBM_FILE HandleDevice)
PARBURST: Read from the parallel port.
unsigned char CBMAPIDECL cbm_pp_read(CBM_FILE HandleDevice)
Read a byte from a XP1541/XP1571 cable.
int CBMAPIDECL cbm_device_status(CBM_FILE HandleDevice, unsigned char DeviceAddress, void *Buffer, size_t BufferLength)
Read the drive status from a floppy.
int CBMAPIDECL cbm_iec_dbg_read(CBM_FILE HandleDevice)
Read a byte from the parallel port input register.
opencbm_plugin_iec_release_t * opencbm_plugin_iec_release
opencbm_plugin_parallel_burst_write_t * opencbm_plugin_srq_burst_write
opencbm_plugin_untalk_t * opencbm_plugin_untalk
int CBMAPIDECL cbm_tap_upload_config(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length, int *Status, int *BytesWritten)
TAPE: Upload configuration.
int CBMAPIDECL opencbm_plugin_iec_poll(CBM_FILE HandleDevice)
Read status of all bus lines.
#define DBG_MEMDUMP(_Where, _Buffer, _Count)
output a memory dump to the debugging system
int CBMAPIDECL opencbm_plugin_unlisten(CBM_FILE HandleDevice)
Send an UNLISTEN on the IEC serial bus.
unsigned char CBMAPIDECL cbm_parallel_burst_read(CBM_FILE HandleDevice)
PARBURST: Read from the parallel port.
int CBMAPIDECL cbm_close(CBM_FILE HandleDevice, unsigned char DeviceAddress, unsigned char SecondaryAddress)
Close a file on the IEC serial bus.
opencbm_plugin_tap_start_write_t * opencbm_plugin_tap_start_write
opencbm_plugin_clear_eoi_t * opencbm_plugin_clear_eoi
int CBMAPIDECL opencbm_plugin_raw_write(CBM_FILE HandleDevice, const void *Buffer, size_t Count)
Write data to the IEC serial bus.
opencbm_plugin_pp_read_t * opencbm_plugin_pp_read
int CBMAPIDECL cbm_tap_start_write(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length, int *Status, int *BytesWritten)
TAPE: Start write.
opencbm_plugin_iec_set_t * opencbm_plugin_iec_set
opencbm_plugin_uninit_t * opencbm_plugin_uninit
const char *CBMAPIDECL cbm_get_driver_name_ex(char *Adapter)
Get the name of the driver for a specific parallel port, extended version.
opencbm_plugin_parallel_burst_read_track_t * opencbm_plugin_parallel_burst_read_track
int CBMAPIDECL cbm_iec_dbg_write(CBM_FILE HandleDevice, unsigned char Value)
Write a byte to the parallel port output register.
void * plugin_get_address(SHARED_OBJECT_HANDLE handle, const char *name)
@@@
opencbm_plugin_tap_motor_off_t * opencbm_plugin_tap_motor_off
int CBMAPIDECL cbm_driver_open_ex(CBM_FILE *HandleDevice, char *Adapter)
Opens the driver, extended version.
void CBMAPIDECL cbm_lock(CBM_FILE HandleDevice)
Lock the parallel port for the driver.
opencbm_plugin_iec_setrelease_t * opencbm_plugin_iec_setrelease
int CBMAPIDECL opencbm_plugin_listen(CBM_FILE HandleDevice, unsigned char DeviceAddress, unsigned char SecondaryAddress)
Send a LISTEN on the IEC serial bus.
opencbm_plugin_parallel_burst_write_track_t * opencbm_plugin_parallel_burst_write_track
int CBMAPIDECL cbm_srq_burst_write_track(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length)
PARBURST: Write a complete track.
void CBMAPIDECL cbm_iec_set(CBM_FILE HandleDevice, int Line)
Activate a line on the IEC serial bus.
opencbm_plugin_parallel_burst_read_t * opencbm_plugin_srq_burst_read
void CBMAPIDECL cbm_srq_burst_write(CBM_FILE HandleDevice, unsigned char Value)
PARBURST: Write to the parallel port.
opencbm_plugin_tap_wait_for_stop_sense_t * opencbm_plugin_tap_wait_for_stop_sense
int opencbm_configuration_get_data(opencbm_configuration_handle Handle, const char Section[], const char Entry[], char **ReturnBuffer)
Read data from the configuration file.
int CBMAPIDECL cbm_raw_write(CBM_FILE HandleDevice, const void *Buffer, size_t Count)
Write data to the IEC serial bus.
opencbm_plugin_talk_t * opencbm_plugin_talk
opencbm_plugin_unlock_t * opencbm_plugin_unlock
unsigned char CBMAPIDECL cbm_srq_burst_read(CBM_FILE HandleDevice)
PARBURST: Read from the parallel port.
#define FUNC_LEAVE_PTR(_xxx, _TYPE)
Shared library / DLL for accessing the driver Functions for obtaining the addresses of plugin functio...
int CBMAPIDECL cbm_iec_get(CBM_FILE HandleDevice, int Line)
Get the (logical) state of a line on the IEC serial bus.
void CBMAPIDECL cbm_driver_close(CBM_FILE HandleDevice)
Closes the driver.
int CBMAPIDECL cbm_parallel_burst_read_track(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length)
PARBURST: Read a complete track.
void CBMAPIDECL opencbm_plugin_unlock(CBM_FILE HandleDevice)
Unlock the parallel port for the driver.
Shared library / DLL for accessing the driver Read configuration file.
int CBMAPIDECL cbm_unlisten(CBM_FILE HandleDevice)
Send an UNLISTEN on the IEC serial bus.
opencbm_plugin_init_t * opencbm_plugin_init
void CBMAPIDECL cbm_parallel_burst_write(CBM_FILE HandleDevice, unsigned char Value)
PARBURST: Write to the parallel port.
void CBMAPIDECL cbm_iec_release(CBM_FILE HandleDevice, int Line)
Deactivate a line on the IEC serial bus.
int CBMAPIDECL opencbm_plugin_parallel_burst_read_track(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length)
PARBURST: Read a complete track.
int CBMAPIDECL cbm_srq_burst_read_track(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length)
PARBURST: Read a complete track.
int CBMAPIDECL opencbm_plugin_reset(CBM_FILE HandleDevice)
RESET all devices.
int CBMAPIDECL cbm_tap_download_config(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Buffer_Length, int *Status, int *BytesRead)
TAPE: Download configuration.
int CBMAPIDECL cbm_open(CBM_FILE HandleDevice, unsigned char DeviceAddress, unsigned char SecondaryAddress, const void *Filename, size_t FilenameLength)
Open a file on the IEC serial bus.
unsigned char CBMAPIDECL opencbm_plugin_pp_read(CBM_FILE HandleDevice)
Read a byte from a XP1541/XP1571 cable.
int CBMAPIDECL cbm_tap_get_sense(CBM_FILE HandleDevice, int *Status)
TAPE: Get tape sense.
void CBMAPIDECL opencbm_plugin_iec_setrelease(CBM_FILE HandleDevice, int Set, int Release)
Activate and deactive a line on the IEC serial bus.
int CBMAPIDECL cbm_clear_eoi(CBM_FILE HandleDevice)
Reset the EOI flag.
opencbm_plugin_parallel_burst_write_t * opencbm_plugin_parallel_burst_write
opencbm_plugin_raw_read_t * opencbm_plugin_raw_read
int CBMAPIDECL cbm_raw_read(CBM_FILE HandleDevice, void *Buffer, size_t Count)
Read data from the IEC serial bus.
void plugin_unload(SHARED_OBJECT_HANDLE handle)
@@@
int CBMAPIDECL opencbm_plugin_talk(CBM_FILE HandleDevice, unsigned char DeviceAddress, unsigned char SecondaryAddress)
Send a TALK on the IEC serial bus.
opencbm_plugin_tap_upload_config_t * opencbm_plugin_tap_upload_config
int CBMAPIDECL cbm_reset(CBM_FILE HandleDevice)
RESET all devices.
opencbm_plugin_get_eoi_t * opencbm_plugin_get_eoi
int CBMAPIDECL cbm_iec_wait(CBM_FILE HandleDevice, int Line, int State)
Wait for a line to have a specific state.
opencbm_plugin_tap_motor_on_t * opencbm_plugin_tap_motor_on
char * cbmlibmisc_strndup(const char *const OldString, size_t Length)
Duplicate a prefix of a given string.
opencbm_plugin_tap_wait_for_play_sense_t * opencbm_plugin_tap_wait_for_play_sense
SHARED_OBJECT_HANDLE plugin_load(const char *name)
@@@
int CBMAPIDECL opencbm_plugin_untalk(CBM_FILE HandleDevice)
Send an UNTALK on the IEC serial bus.
int CBMAPIDECL cbm_parallel_burst_read_track_var(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length)
PARBURST: Read a variable length track.
opencbm_plugin_driver_close_t * opencbm_plugin_driver_close
int CBMAPIDECL opencbm_plugin_clear_eoi(CBM_FILE HandleDevice)
Reset the EOI flag.
int CBMAPIDECL cbm_tap_wait_for_stop_sense(CBM_FILE HandleDevice, int *Status)
TAPE: Wait for sense.
opencbm_plugin_tap_download_config_t * opencbm_plugin_tap_download_config
int CBMAPIDECL cbm_exec_command(CBM_FILE HandleDevice, unsigned char DeviceAddress, const void *Command, size_t Size)
Executes a command in the floppy drive.
int CBMAPIDECL cbm_tap_motor_off(CBM_FILE HandleDevice, int *Status)
TAPE: Motor off.
opencbm_plugin_raw_write_t * opencbm_plugin_raw_write
int CBMAPIDECL cbm_parallel_burst_write_track(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length)
PARBURST: Write a complete track.
#define FUNC_LEAVE_STRING(_xxx)
DLL interface for accessing the driver.
opencbm_plugin_pp_write_t * opencbm_plugin_pp_write
opencbm_plugin_listen_t * opencbm_plugin_listen
int CBMAPIDECL opencbm_plugin_iec_wait(CBM_FILE HandleDevice, int Line, int State)
Wait for a line to have a specific state.
opencbm_plugin_unlisten_t * opencbm_plugin_unlisten
int CBMAPIDECL opencbm_plugin_parallel_burst_write_track(CBM_FILE HandleDevice, unsigned char *Buffer, unsigned int Length)
PARBURST: Write a complete track.
opencbm_plugin_parallel_burst_read_t * opencbm_plugin_parallel_burst_read
int CBMAPIDECL cbm_iec_poll(CBM_FILE HandleDevice)
Read status of all bus lines.
opencbm_configuration_handle opencbm_configuration_open(const char *Filename)
Open the configuration file.
opencbm_plugin_parallel_burst_write_track_t * opencbm_plugin_srq_burst_write_track
int CBMAPIDECL cbm_untalk(CBM_FILE HandleDevice)
Send an UNTALK on the IEC serial bus.
opencbm_plugin_tap_prepare_capture_t * opencbm_plugin_tap_prepare_capture
void CBMAPIDECL opencbm_plugin_lock(CBM_FILE HandleDevice)
Lock the parallel port for the driver.
Define makros and functions which account for differences between the different architectures.
opencbm_plugin_parallel_burst_write_n_t * opencbm_plugin_parallel_burst_write_n
const char * configuration_get_default_filename(void)
Get the default filename for the configuration file.
opencbm_plugin_tap_start_capture_t * opencbm_plugin_tap_start_capture
opencbm_plugin_driver_open_t * opencbm_plugin_driver_open
void CBMAPIDECL cbm_iec_setrelease(CBM_FILE HandleDevice, int Set, int Release)
Activate and deactive a line on the IEC serial bus.
int plugin_set_inactive(const char PluginName[])
@@@
int CBMAPIDECL opencbm_plugin_get_eoi(CBM_FILE HandleDevice)
Get EOI flag after bus read.
opencbm_plugin_iec_poll_t * opencbm_plugin_iec_poll
int plugin_is_active(opencbm_configuration_handle Handle, const char PluginName[])
@@@
int CBMAPIDECL opencbm_plugin_raw_read(CBM_FILE HandleDevice, void *Buffer, size_t Count)
Read data from the IEC serial bus.
opencbm_plugin_parallel_burst_write_n_t * opencbm_plugin_srq_burst_write_n
void *CBMAPIDECL cbm_get_plugin_function_address(const char *Functionname)
Get the function pointer for a function in a plugin.
opencbm_plugin_close_t * opencbm_plugin_close
void CBMAPIDECL cbm_pp_write(CBM_FILE HandleDevice, unsigned char Byte)
Write a byte to a XP1541/XP1571 cable.
opencbm_plugin_parallel_burst_read_n_t * opencbm_plugin_parallel_burst_read_n
opencbm_plugin_open_t * opencbm_plugin_open
int CBMAPIDECL cbm_tap_prepare_capture(CBM_FILE HandleDevice, int *Status)
TAPE: Prepare capture.
Some functions for string handling.
int CBMAPIDECL cbm_tap_motor_on(CBM_FILE HandleDevice, int *Status)
TAPE: Motor on.
opencbm_plugin_get_driver_name_t * opencbm_plugin_get_driver_name
opencbm_plugin_reset_t * opencbm_plugin_reset
void CBMAPIDECL opencbm_plugin_pp_write(CBM_FILE HandleDevice, unsigned char Byte)
Write a byte to a XP1541/XP1571 cable.
opencbm_plugin_tap_prepare_write_t * opencbm_plugin_tap_prepare_write
int plugin_set_active(const char PluginName[])
@@@
int opencbm_configuration_close(opencbm_configuration_handle Handle)
Close the configuration file.