1 /* libspectrum.h: the library for dealing with ZX Spectrum emulator files 2 Copyright (c) 2001-2007 Philip Kendall, Darren Salt, Fredrick Meunier 3 4 $Id: libspectrum.h.in 4836 2012-12-31 15:40:10Z zubzero $ 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License along 17 with this program; if not, write to the Free Software Foundation, Inc., 18 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 20 Author contact information: 21 22 E-mail: philip-fuse@shadowmagic.org.uk 23 24 */ 25 26 /* NB: This file is autogenerated from libspectrum.h.in. Do not edit 27 unless you know what you're doing */ 28 29 #ifndef LIBSPECTRUM_LIBSPECTRUM_H 30 #define LIBSPECTRUM_LIBSPECTRUM_H 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif /* #ifdef __cplusplus */ 35 36 #include <stdarg.h> 37 #include <stddef.h> 38 #include <stdlib.h> 39 #include <stdio.h> 40 41 #ifdef _WIN32 42 43 /* Exclude rarely used stuff from Windows headers */ 44 #ifndef WIN32_LEAN_AND_MEAN 45 46 #define WIN32_LEAN_AND_MEAN /**/ 47 #include <windows.h> 48 #undef WIN32_LEAN_AND_MEAN 49 50 #else 51 52 #include <windows.h> 53 54 #endif /* #ifndef WIN32_LEAN_AND_MEAN */ 55 56 #ifdef LIBSPECTRUM_EXPORTS 57 #define WIN32_DLL __declspec( dllexport ) 58 #else /* #ifdef LIBSPECTRUM_EXPORTS */ 59 #define WIN32_DLL __declspec( dllimport ) 60 #endif /* #ifdef LIBSPECTRUM_EXPORTS */ 61 62 #else /* #ifdef _WIN32 */ 63 64 #define WIN32_DLL 65 66 #endif /* #ifdef _WIN32 */ 67 68 #undef WIN32_DLL 69 #define WIN32_DLL 70 71 #ifdef __GNUC__ 72 #define DEPRECATED __attribute__((deprecated)) 73 #else /* #ifdef __GNUC__ */ 74 #define DEPRECATED 75 #endif /* #ifdef __GNUC__ */ 76 77 78 /* Standard typedefs */ 79 #include <stdint.h> 80 81 typedef uint8_t libspectrum_byte; 82 typedef int8_t libspectrum_signed_byte; 83 typedef uint16_t libspectrum_word; 84 typedef int16_t libspectrum_signed_word; 85 typedef uint32_t libspectrum_dword; 86 typedef int32_t libspectrum_signed_dword; 87 typedef uint64_t libspectrum_qword; 88 typedef int64_t libspectrum_signed_qword; 89 90 /* glib replacement (if necessary) */ 91 #ifndef FALSE 92 #define FALSE (0) 93 #endif 94 95 #ifndef TRUE 96 #define TRUE (!FALSE) 97 #endif 98 99 typedef char gchar; 100 typedef int gint; 101 typedef long glong; 102 typedef gint gboolean; 103 typedef unsigned int guint; 104 typedef unsigned long gulong; 105 typedef const void * gconstpointer; 106 typedef void * gpointer; 107 108 typedef struct _GSList GSList; 109 110 struct _GSList { 111 gpointer data; 112 GSList *next; 113 }; 114 115 typedef void (*GFunc) (gpointer data, 116 gpointer user_data); 117 118 typedef gint (*GCompareFunc) (gconstpointer a, 119 gconstpointer b); 120 121 typedef void (*GDestroyNotify) (gpointer data); 122 123 typedef void (*GFreeFunc) (gpointer data); 124 125 126 WIN32_DLL GSList *g_slist_insert_sorted (GSList *list, 127 gpointer data, 128 GCompareFunc func); 129 130 WIN32_DLL GSList *g_slist_insert (GSList *list, 131 gpointer data, 132 gint position); 133 134 WIN32_DLL GSList *g_slist_append (GSList *list, 135 gpointer data); 136 137 WIN32_DLL GSList *g_slist_prepend (GSList *list, 138 gpointer data); 139 140 WIN32_DLL GSList *g_slist_remove (GSList *list, 141 gconstpointer data); 142 143 WIN32_DLL GSList *g_slist_last (GSList *list); 144 145 WIN32_DLL GSList *g_slist_reverse (GSList *list); 146 147 WIN32_DLL GSList *g_slist_delete_link (GSList *list, 148 GSList *link); 149 150 WIN32_DLL guint g_slist_length (GSList *list); 151 152 WIN32_DLL void g_slist_foreach (GSList *list, 153 GFunc func, 154 gpointer user_data); 155 156 WIN32_DLL void g_slist_free (GSList *list); 157 158 WIN32_DLL GSList *g_slist_nth (GSList *list, 159 guint n); 160 161 WIN32_DLL GSList *g_slist_find_custom (GSList *list, 162 gconstpointer data, 163 GCompareFunc func ); 164 165 WIN32_DLL gint g_slist_position (GSList *list, 166 GSList *llink); 167 168 typedef struct _GHashTable GHashTable; 169 170 typedef guint (*GHashFunc) (gconstpointer key); 171 172 typedef void (*GHFunc) (gpointer key, 173 gpointer value, 174 gpointer user_data); 175 176 typedef gboolean (*GHRFunc) (gpointer key, 177 gpointer value, 178 gpointer user_data); 179 180 WIN32_DLL gint g_int_equal (gconstpointer v, 181 gconstpointer v2); 182 WIN32_DLL guint g_int_hash (gconstpointer v); 183 184 WIN32_DLL gint g_str_equal (gconstpointer v, 185 gconstpointer v2); 186 WIN32_DLL guint g_str_hash (gconstpointer v); 187 188 WIN32_DLL GHashTable *g_hash_table_new (GHashFunc hash_func, 189 GCompareFunc key_compare_func); 190 191 WIN32_DLL GHashTable *g_hash_table_new_full (GHashFunc hash_func, 192 GCompareFunc key_equal_func, 193 GDestroyNotify key_destroy_func, 194 GDestroyNotify value_destroy_func); 195 196 WIN32_DLL void g_hash_table_destroy (GHashTable *hash_table); 197 198 WIN32_DLL void g_hash_table_insert (GHashTable *hash_table, 199 gpointer key, 200 gpointer value); 201 202 WIN32_DLL gpointer g_hash_table_lookup (GHashTable *hash_table, 203 gconstpointer key); 204 205 WIN32_DLL void g_hash_table_foreach (GHashTable *hash_table, 206 GHFunc func, 207 gpointer user_data); 208 209 WIN32_DLL guint g_hash_table_foreach_remove (GHashTable *hash_table, 210 GHRFunc func, 211 gpointer user_data); 212 213 WIN32_DLL guint g_hash_table_size (GHashTable *hash_table); 214 215 typedef struct _GArray GArray; 216 217 struct _GArray { 218 /* Public */ 219 gchar *data; 220 size_t len; 221 222 /* Private */ 223 guint element_size; 224 size_t allocated; 225 }; 226 227 WIN32_DLL GArray* g_array_new( gboolean zero_terminated, gboolean clear, 228 guint element_size ); 229 #define g_array_append_val(a,v) g_array_append_vals( a, &(v), 1 ); 230 WIN32_DLL GArray* g_array_append_vals( GArray *array, gconstpointer data, guint len ); 231 #define g_array_index(a,t,i) (*(((t*)a->data)+i)) 232 WIN32_DLL GArray* g_array_set_size( GArray *array, guint length ); 233 WIN32_DLL gchar* g_array_free( GArray *array, gboolean free_segment ); 234 235 #define GINT_TO_POINTER(i) ((gpointer) (glong)(i)) 236 #define GPOINTER_TO_INT(p) ((gint) (glong)(p)) 237 #define GPOINTER_TO_UINT(p) ((guint) (gulong)(p)) 238 239 /* 240 * General libspectrum routines 241 */ 242 243 /* Error handling */ 244 245 /* The various errors which can occur */ 246 typedef enum libspectrum_error { 247 248 LIBSPECTRUM_ERROR_NONE = 0, 249 250 LIBSPECTRUM_ERROR_WARNING, 251 252 LIBSPECTRUM_ERROR_MEMORY, 253 LIBSPECTRUM_ERROR_UNKNOWN, 254 LIBSPECTRUM_ERROR_CORRUPT, 255 LIBSPECTRUM_ERROR_SIGNATURE, 256 LIBSPECTRUM_ERROR_SLT, /* .slt data found at end of a .z80 file */ 257 LIBSPECTRUM_ERROR_INVALID, /* Invalid parameter supplied */ 258 259 LIBSPECTRUM_ERROR_LOGIC = -1, 260 261 } libspectrum_error; 262 263 /* Library capabilities */ 264 265 /* Initialisation */ 266 267 WIN32_DLL libspectrum_error libspectrum_init( void ); 268 WIN32_DLL void libspectrum_end( void ); 269 270 /* Version checking */ 271 272 WIN32_DLL int libspectrum_check_version( const char *version ); 273 WIN32_DLL const char *libspectrum_version( void ); 274 WIN32_DLL const char *libspectrum_gcrypt_version( void ); 275 276 /* Error handling */ 277 typedef libspectrum_error 278 (*libspectrum_error_function_t)( libspectrum_error error, 279 const char *format, va_list ap ); 280 281 extern WIN32_DLL libspectrum_error_function_t libspectrum_error_function; 282 283 WIN32_DLL libspectrum_error 284 libspectrum_default_error_function( libspectrum_error error, 285 const char *format, va_list ap ); 286 287 /* Memory allocators */ 288 289 typedef void* (*libspectrum_malloc_fn_t)( size_t size ); 290 typedef void* (*libspectrum_calloc_fn_t)( size_t nmemb, size_t size ); 291 typedef void* (*libspectrum_realloc_fn_t)( void *ptr, size_t size ); 292 typedef void (*libspectrum_free_fn_t)( void *ptr ); 293 294 typedef struct libspectrum_mem_vtable_t { 295 libspectrum_malloc_fn_t malloc; 296 libspectrum_calloc_fn_t calloc; 297 libspectrum_realloc_fn_t realloc; 298 libspectrum_free_fn_t free; 299 } libspectrum_mem_vtable_t; 300 301 WIN32_DLL void* libspectrum_malloc( size_t size ); 302 WIN32_DLL void* libspectrum_calloc( size_t nmemb, size_t size ); 303 WIN32_DLL void* libspectrum_realloc( void *ptr, size_t size ); 304 WIN32_DLL void libspectrum_free( void *ptr ); 305 306 WIN32_DLL void libspectrum_mem_set_vtable( libspectrum_mem_vtable_t *table ); 307 308 /* Attempt to identify a given file */ 309 310 /* Various types of file we might manage to identify */ 311 typedef enum libspectrum_id_t { 312 313 /* These types present in all versions of libspectrum */ 314 315 LIBSPECTRUM_ID_UNKNOWN = 0, /* Unidentified file */ 316 LIBSPECTRUM_ID_RECORDING_RZX, /* RZX input recording */ 317 LIBSPECTRUM_ID_SNAPSHOT_SNA, /* .sna snapshot */ 318 LIBSPECTRUM_ID_SNAPSHOT_Z80, /* .z80 snapshot */ 319 LIBSPECTRUM_ID_TAPE_TAP, /* Z80-style .tap tape image */ 320 LIBSPECTRUM_ID_TAPE_TZX, /* TZX tape image */ 321 322 /* Below here, present only in 0.1.1 and later */ 323 324 /* The next entry is deprecated in favour of the more specific 325 LIBSPECTRUM_ID_DISK_CPC and LIBSPECTRUM_ID_DISK_ECPC */ 326 LIBSPECTRUM_ID_DISK_DSK, /* .dsk +3 disk image */ 327 328 LIBSPECTRUM_ID_DISK_SCL, /* .scl TR-DOS disk image */ 329 LIBSPECTRUM_ID_DISK_TRD, /* .trd TR-DOS disk image */ 330 LIBSPECTRUM_ID_CARTRIDGE_DCK, /* .dck Timex cartridge image */ 331 332 /* Below here, present only in 0.2.0 and later */ 333 334 LIBSPECTRUM_ID_TAPE_WARAJEVO, /* Warajevo-style .tap tape image */ 335 336 LIBSPECTRUM_ID_SNAPSHOT_PLUSD, /* DISCiPLE/+D snapshot */ 337 LIBSPECTRUM_ID_SNAPSHOT_SP, /* .sp snapshot */ 338 LIBSPECTRUM_ID_SNAPSHOT_SNP, /* .snp snapshot */ 339 LIBSPECTRUM_ID_SNAPSHOT_ZXS, /* .zxs snapshot (zx32) */ 340 LIBSPECTRUM_ID_SNAPSHOT_SZX, /* .szx snapshot (Spectaculator) */ 341 342 /* Below here, present only in 0.2.1 and later */ 343 344 LIBSPECTRUM_ID_COMPRESSED_BZ2, /* bzip2 compressed file */ 345 LIBSPECTRUM_ID_COMPRESSED_GZ, /* gzip compressed file */ 346 347 /* Below here, present only in 0.2.2 and later */ 348 349 LIBSPECTRUM_ID_HARDDISK_HDF, /* .hdf hard disk image */ 350 LIBSPECTRUM_ID_CARTRIDGE_IF2, /* .rom Interface 2 cartridge image */ 351 352 /* Below here, present only in 0.3.0 and later */ 353 354 LIBSPECTRUM_ID_MICRODRIVE_MDR, /* .mdr microdrive cartridge */ 355 LIBSPECTRUM_ID_TAPE_CSW, /* .csw tape image */ 356 LIBSPECTRUM_ID_TAPE_Z80EM, /* Z80Em tape image */ 357 358 /* Below here, present only in 0.4.0 and later */ 359 360 LIBSPECTRUM_ID_TAPE_WAV, /* .wav tape image */ 361 LIBSPECTRUM_ID_TAPE_SPC, /* SP-style .spc tape image */ 362 LIBSPECTRUM_ID_TAPE_STA, /* Speculator-style .sta tape image */ 363 LIBSPECTRUM_ID_TAPE_LTP, /* Nuclear ZX-style .ltp tape image */ 364 LIBSPECTRUM_ID_COMPRESSED_XFD, /* xfdmaster (Amiga) compressed file */ 365 LIBSPECTRUM_ID_DISK_IMG, /* .img DISCiPLE/+D disk image */ 366 LIBSPECTRUM_ID_DISK_MGT, /* .mgt DISCiPLE/+D disk image */ 367 368 /* Below here, present only in 0.5.0 and later */ 369 370 LIBSPECTRUM_ID_DISK_UDI, /* .udi generic disk image */ 371 LIBSPECTRUM_ID_DISK_FDI, /* .fdi generic disk image */ 372 LIBSPECTRUM_ID_DISK_CPC, /* .dsk plain CPC +3 disk image */ 373 LIBSPECTRUM_ID_DISK_ECPC, /* .dsk extended CPC +3 disk image */ 374 LIBSPECTRUM_ID_DISK_SAD, /* .sad generic disk image */ 375 LIBSPECTRUM_ID_DISK_TD0, /* .td0 generic disk image */ 376 377 LIBSPECTRUM_ID_DISK_OPD, /* .opu/.opd Opus Discovery disk image */ 378 379 LIBSPECTRUM_ID_TAPE_PZX, /* PZX tape image */ 380 381 LIBSPECTRUM_ID_AUX_POK, /* POKE file */ 382 383 } libspectrum_id_t; 384 385 /* And 'classes' of file */ 386 typedef enum libspectrum_class_t { 387 388 LIBSPECTRUM_CLASS_UNKNOWN, 389 390 LIBSPECTRUM_CLASS_CARTRIDGE_TIMEX, /* Timex cartridges */ 391 LIBSPECTRUM_CLASS_DISK_PLUS3, /* +3 disk */ 392 LIBSPECTRUM_CLASS_DISK_TRDOS, /* TR-DOS disk */ 393 LIBSPECTRUM_CLASS_DISK_OPUS, /* Opus Discovery disk*/ 394 LIBSPECTRUM_CLASS_RECORDING, /* Input recording */ 395 LIBSPECTRUM_CLASS_SNAPSHOT, /* Snapshot */ 396 LIBSPECTRUM_CLASS_TAPE, /* Tape */ 397 398 /* Below here, present only in 0.2.1 and later */ 399 400 LIBSPECTRUM_CLASS_COMPRESSED, /* A compressed file */ 401 402 /* Below here, present only in 0.2.2 and later */ 403 404 LIBSPECTRUM_CLASS_HARDDISK, /* A hard disk image */ 405 LIBSPECTRUM_CLASS_CARTRIDGE_IF2, /* Interface 2 cartridges */ 406 407 /* Below here, present only in 0.3.0 and later */ 408 409 LIBSPECTRUM_CLASS_MICRODRIVE, /* Microdrive cartridges */ 410 411 /* Below here, present only in 0.4.0 and later */ 412 413 LIBSPECTRUM_CLASS_DISK_PLUSD, /* DISCiPLE/+D disk image */ 414 415 /* Below here, present only in 0.5.0 and later */ 416 417 LIBSPECTRUM_CLASS_DISK_GENERIC, /* generic disk image */ 418 419 LIBSPECTRUM_CLASS_AUXILIARY, /* auxiliary supported file */ 420 421 } libspectrum_class_t; 422 423 WIN32_DLL libspectrum_error 424 libspectrum_identify_file( libspectrum_id_t *type, const char *filename, 425 const unsigned char *buffer, size_t length ); 426 427 WIN32_DLL libspectrum_error 428 libspectrum_identify_file_with_class( 429 libspectrum_id_t *type, libspectrum_class_t *libspectrum_class, 430 const char *filename, const unsigned char *buffer, size_t length ); 431 432 WIN32_DLL libspectrum_error 433 libspectrum_identify_file_raw( libspectrum_id_t *type, const char *filename, 434 const unsigned char *buffer, size_t length ); 435 436 WIN32_DLL libspectrum_error 437 libspectrum_identify_class( libspectrum_class_t *libspectrum_class, 438 libspectrum_id_t type ); 439 440 /* Different Spectrum variants and their capabilities */ 441 442 /* The machine types we can handle */ 443 typedef enum libspectrum_machine { 444 445 LIBSPECTRUM_MACHINE_48, 446 LIBSPECTRUM_MACHINE_TC2048, 447 LIBSPECTRUM_MACHINE_128, 448 LIBSPECTRUM_MACHINE_PLUS2, 449 LIBSPECTRUM_MACHINE_PENT, 450 LIBSPECTRUM_MACHINE_PLUS2A, 451 LIBSPECTRUM_MACHINE_PLUS3, 452 453 /* Used by libspectrum_tape_guess_hardware if we can't work out what 454 hardware should be used */ 455 LIBSPECTRUM_MACHINE_UNKNOWN, 456 457 LIBSPECTRUM_MACHINE_16, 458 LIBSPECTRUM_MACHINE_TC2068, 459 460 LIBSPECTRUM_MACHINE_SCORP, 461 LIBSPECTRUM_MACHINE_PLUS3E, 462 LIBSPECTRUM_MACHINE_SE, 463 464 LIBSPECTRUM_MACHINE_TS2068, 465 466 LIBSPECTRUM_MACHINE_PENT512, 467 LIBSPECTRUM_MACHINE_PENT1024, 468 469 LIBSPECTRUM_MACHINE_48_NTSC, 470 471 LIBSPECTRUM_MACHINE_128E, 472 473 } libspectrum_machine; 474 475 WIN32_DLL const char* libspectrum_machine_name( libspectrum_machine type ); 476 477 /* The various capabilities of the different machines */ 478 extern WIN32_DLL const int 479 LIBSPECTRUM_MACHINE_CAPABILITY_AY; /* AY-3-8192 */ 480 extern WIN32_DLL const int 481 LIBSPECTRUM_MACHINE_CAPABILITY_128_MEMORY; /* 128-style memory paging */ 482 extern WIN32_DLL const int 483 LIBSPECTRUM_MACHINE_CAPABILITY_PLUS3_MEMORY; /* +3-style memory paging */ 484 extern WIN32_DLL const int 485 LIBSPECTRUM_MACHINE_CAPABILITY_PLUS3_DISK; /* +3-style disk drive */ 486 extern WIN32_DLL const int 487 LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_MEMORY; /* Timex-style memory paging */ 488 extern WIN32_DLL const int 489 LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_VIDEO; /* Timex-style video modes */ 490 extern WIN32_DLL const int 491 LIBSPECTRUM_MACHINE_CAPABILITY_TRDOS_DISK; /* TRDOS-style disk drive */ 492 extern WIN32_DLL const int 493 LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_DOCK; /* T[SC]2068-style cartridge port */ 494 extern WIN32_DLL const int 495 LIBSPECTRUM_MACHINE_CAPABILITY_SINCLAIR_JOYSTICK; 496 /* Sinclair-style joystick ports */ 497 extern WIN32_DLL const int 498 LIBSPECTRUM_MACHINE_CAPABILITY_KEMPSTON_JOYSTICK; 499 /* Kempston-style joystick ports */ 500 extern WIN32_DLL const int 501 LIBSPECTRUM_MACHINE_CAPABILITY_SCORP_MEMORY; /* Scorpion-style memory paging */ 502 extern WIN32_DLL const int 503 LIBSPECTRUM_MACHINE_CAPABILITY_EVEN_M1; 504 /* M1 cycles always start on even tstate counts */ 505 extern WIN32_DLL const int 506 LIBSPECTRUM_MACHINE_CAPABILITY_SE_MEMORY; /* SE-style memory paging */ 507 extern WIN32_DLL const int 508 LIBSPECTRUM_MACHINE_CAPABILITY_NTSC; /* NTSC display */ 509 extern WIN32_DLL const int 510 LIBSPECTRUM_MACHINE_CAPABILITY_PENT512_MEMORY; /* Pentagon 512 memory paging */ 511 extern WIN32_DLL const int 512 LIBSPECTRUM_MACHINE_CAPABILITY_PENT1024_MEMORY; 513 /* Pentagon 1024 memory paging */ 514 515 /* Get the capabilities of a machine */ 516 WIN32_DLL int libspectrum_machine_capabilities( libspectrum_machine type ); 517 518 /* Get the timings of a machine */ 519 WIN32_DLL libspectrum_dword 520 libspectrum_timings_processor_speed( libspectrum_machine machine ); 521 WIN32_DLL libspectrum_dword 522 libspectrum_timings_ay_speed( libspectrum_machine machine ); 523 WIN32_DLL libspectrum_word 524 libspectrum_timings_left_border( libspectrum_machine machine ); 525 WIN32_DLL libspectrum_word 526 libspectrum_timings_horizontal_screen( libspectrum_machine machine ); 527 WIN32_DLL libspectrum_word 528 libspectrum_timings_right_border( libspectrum_machine machine ); 529 WIN32_DLL libspectrum_word 530 libspectrum_timings_horizontal_retrace( libspectrum_machine machine ); 531 WIN32_DLL libspectrum_word 532 libspectrum_timings_top_border( libspectrum_machine machine ); 533 WIN32_DLL libspectrum_word 534 libspectrum_timings_vertical_screen( libspectrum_machine machine ); 535 WIN32_DLL libspectrum_word 536 libspectrum_timings_bottom_border( libspectrum_machine machine ); 537 WIN32_DLL libspectrum_word 538 libspectrum_timings_vertical_retrace( libspectrum_machine machine ); 539 WIN32_DLL libspectrum_word 540 libspectrum_timings_interrupt_length( libspectrum_machine machine ); 541 WIN32_DLL libspectrum_word 542 libspectrum_timings_top_left_pixel( libspectrum_machine machine ); 543 WIN32_DLL libspectrum_word 544 libspectrum_timings_tstates_per_line( libspectrum_machine machine ); 545 WIN32_DLL libspectrum_word 546 libspectrum_timings_lines_per_frame( libspectrum_machine machine ); 547 WIN32_DLL libspectrum_dword 548 libspectrum_timings_tstates_per_frame( libspectrum_machine machine ); 549 550 /* Creator information */ 551 552 typedef struct libspectrum_creator libspectrum_creator; 553 554 WIN32_DLL libspectrum_creator* 555 libspectrum_creator_alloc( void ); 556 WIN32_DLL libspectrum_error 557 libspectrum_creator_free( libspectrum_creator *creator ); 558 559 WIN32_DLL libspectrum_error 560 libspectrum_creator_set_program( libspectrum_creator *creator, 561 const char *program ); 562 WIN32_DLL const char * 563 libspectrum_creator_program( libspectrum_creator *creator ); 564 565 WIN32_DLL libspectrum_error 566 libspectrum_creator_set_major( libspectrum_creator *creator, 567 libspectrum_word major ); 568 WIN32_DLL libspectrum_word 569 libspectrum_creator_major( libspectrum_creator *creator ); 570 571 WIN32_DLL libspectrum_error 572 libspectrum_creator_set_minor( libspectrum_creator *creator, 573 libspectrum_word minor ); 574 WIN32_DLL libspectrum_word 575 libspectrum_creator_minor( libspectrum_creator *creator ); 576 577 WIN32_DLL libspectrum_error 578 libspectrum_creator_set_competition_code( libspectrum_creator *creator, 579 libspectrum_dword competition_code ); 580 WIN32_DLL libspectrum_dword 581 libspectrum_creator_competition_code( libspectrum_creator *creator ); 582 583 WIN32_DLL libspectrum_error 584 libspectrum_creator_set_custom( libspectrum_creator *creator, 585 libspectrum_byte *data, size_t length ); 586 587 WIN32_DLL libspectrum_byte * 588 libspectrum_creator_custom( libspectrum_creator *creator ); 589 590 WIN32_DLL size_t 591 libspectrum_creator_custom_length( libspectrum_creator *creator ); 592 593 /* 594 * Snap handling routines 595 */ 596 597 typedef struct libspectrum_snap libspectrum_snap; 598 599 WIN32_DLL libspectrum_snap* libspectrum_snap_alloc( void ); 600 WIN32_DLL libspectrum_error libspectrum_snap_free( libspectrum_snap *snap ); 601 602 /* Read in a snapshot, optionally guessing what type it is */ 603 WIN32_DLL libspectrum_error 604 libspectrum_snap_read( libspectrum_snap *snap, const libspectrum_byte *buffer, 605 size_t length, libspectrum_id_t type, 606 const char *filename ); 607 608 /* Write a snapshot */ 609 WIN32_DLL libspectrum_error 610 libspectrum_snap_write( libspectrum_byte **buffer, size_t *length, 611 int *out_flags, libspectrum_snap *snap, 612 libspectrum_id_t type, libspectrum_creator *creator, 613 int in_flags ); 614 615 /* The flags that can be given to libspectrum_snap_write() */ 616 extern WIN32_DLL const int LIBSPECTRUM_FLAG_SNAPSHOT_NO_COMPRESSION; 617 extern WIN32_DLL const int LIBSPECTRUM_FLAG_SNAPSHOT_ALWAYS_COMPRESS; 618 619 /* The flags that may be returned from libspectrum_snap_write() */ 620 extern WIN32_DLL const int LIBSPECTRUM_FLAG_SNAPSHOT_MINOR_INFO_LOSS; 621 extern WIN32_DLL const int LIBSPECTRUM_FLAG_SNAPSHOT_MAJOR_INFO_LOSS; 622 623 /* The joystick types we can handle */ 624 typedef enum libspectrum_joystick { 625 626 LIBSPECTRUM_JOYSTICK_NONE, 627 628 LIBSPECTRUM_JOYSTICK_CURSOR, 629 LIBSPECTRUM_JOYSTICK_KEMPSTON, 630 LIBSPECTRUM_JOYSTICK_SINCLAIR_1, 631 LIBSPECTRUM_JOYSTICK_SINCLAIR_2, 632 LIBSPECTRUM_JOYSTICK_TIMEX_1, 633 LIBSPECTRUM_JOYSTICK_TIMEX_2, 634 LIBSPECTRUM_JOYSTICK_FULLER, 635 636 } libspectrum_joystick; 637 638 WIN32_DLL const char* libspectrum_joystick_name( libspectrum_joystick type ); 639 640 extern WIN32_DLL const int LIBSPECTRUM_JOYSTICK_INPUT_NONE; 641 extern WIN32_DLL const int LIBSPECTRUM_JOYSTICK_INPUT_KEYBOARD; 642 extern WIN32_DLL const int LIBSPECTRUM_JOYSTICK_INPUT_JOYSTICK_1; 643 extern WIN32_DLL const int LIBSPECTRUM_JOYSTICK_INPUT_JOYSTICK_2; 644 645 /* Accessor functions */ 646 WIN32_DLL libspectrum_machine libspectrum_snap_machine( libspectrum_snap *snap ); 647 WIN32_DLL void libspectrum_snap_set_machine( libspectrum_snap *snap, libspectrum_machine machine ); 648 WIN32_DLL libspectrum_byte libspectrum_snap_a( libspectrum_snap *snap ); 649 WIN32_DLL void libspectrum_snap_set_a( libspectrum_snap *snap, libspectrum_byte a ); 650 WIN32_DLL libspectrum_byte libspectrum_snap_f( libspectrum_snap *snap ); 651 WIN32_DLL void libspectrum_snap_set_f( libspectrum_snap *snap, libspectrum_byte f ); 652 WIN32_DLL libspectrum_word libspectrum_snap_bc( libspectrum_snap *snap ); 653 WIN32_DLL void libspectrum_snap_set_bc( libspectrum_snap *snap, libspectrum_word bc ); 654 WIN32_DLL libspectrum_word libspectrum_snap_de( libspectrum_snap *snap ); 655 WIN32_DLL void libspectrum_snap_set_de( libspectrum_snap *snap, libspectrum_word de ); 656 WIN32_DLL libspectrum_word libspectrum_snap_hl( libspectrum_snap *snap ); 657 WIN32_DLL void libspectrum_snap_set_hl( libspectrum_snap *snap, libspectrum_word hl ); 658 WIN32_DLL libspectrum_byte libspectrum_snap_a_( libspectrum_snap *snap ); 659 WIN32_DLL void libspectrum_snap_set_a_( libspectrum_snap *snap, libspectrum_byte a_ ); 660 WIN32_DLL libspectrum_byte libspectrum_snap_f_( libspectrum_snap *snap ); 661 WIN32_DLL void libspectrum_snap_set_f_( libspectrum_snap *snap, libspectrum_byte f_ ); 662 WIN32_DLL libspectrum_word libspectrum_snap_bc_( libspectrum_snap *snap ); 663 WIN32_DLL void libspectrum_snap_set_bc_( libspectrum_snap *snap, libspectrum_word bc_ ); 664 WIN32_DLL libspectrum_word libspectrum_snap_de_( libspectrum_snap *snap ); 665 WIN32_DLL void libspectrum_snap_set_de_( libspectrum_snap *snap, libspectrum_word de_ ); 666 WIN32_DLL libspectrum_word libspectrum_snap_hl_( libspectrum_snap *snap ); 667 WIN32_DLL void libspectrum_snap_set_hl_( libspectrum_snap *snap, libspectrum_word hl_ ); 668 WIN32_DLL libspectrum_word libspectrum_snap_ix( libspectrum_snap *snap ); 669 WIN32_DLL void libspectrum_snap_set_ix( libspectrum_snap *snap, libspectrum_word ix ); 670 WIN32_DLL libspectrum_word libspectrum_snap_iy( libspectrum_snap *snap ); 671 WIN32_DLL void libspectrum_snap_set_iy( libspectrum_snap *snap, libspectrum_word iy ); 672 WIN32_DLL libspectrum_byte libspectrum_snap_i( libspectrum_snap *snap ); 673 WIN32_DLL void libspectrum_snap_set_i( libspectrum_snap *snap, libspectrum_byte i ); 674 WIN32_DLL libspectrum_byte libspectrum_snap_r( libspectrum_snap *snap ); 675 WIN32_DLL void libspectrum_snap_set_r( libspectrum_snap *snap, libspectrum_byte r ); 676 WIN32_DLL libspectrum_word libspectrum_snap_sp( libspectrum_snap *snap ); 677 WIN32_DLL void libspectrum_snap_set_sp( libspectrum_snap *snap, libspectrum_word sp ); 678 WIN32_DLL libspectrum_word libspectrum_snap_pc( libspectrum_snap *snap ); 679 WIN32_DLL void libspectrum_snap_set_pc( libspectrum_snap *snap, libspectrum_word pc ); 680 WIN32_DLL libspectrum_word libspectrum_snap_memptr( libspectrum_snap *snap ); 681 WIN32_DLL void libspectrum_snap_set_memptr( libspectrum_snap *snap, libspectrum_word memptr ); 682 WIN32_DLL libspectrum_byte libspectrum_snap_iff1( libspectrum_snap *snap ); 683 WIN32_DLL void libspectrum_snap_set_iff1( libspectrum_snap *snap, libspectrum_byte iff1 ); 684 WIN32_DLL libspectrum_byte libspectrum_snap_iff2( libspectrum_snap *snap ); 685 WIN32_DLL void libspectrum_snap_set_iff2( libspectrum_snap *snap, libspectrum_byte iff2 ); 686 WIN32_DLL libspectrum_byte libspectrum_snap_im( libspectrum_snap *snap ); 687 WIN32_DLL void libspectrum_snap_set_im( libspectrum_snap *snap, libspectrum_byte im ); 688 WIN32_DLL libspectrum_dword libspectrum_snap_tstates( libspectrum_snap *snap ); 689 WIN32_DLL void libspectrum_snap_set_tstates( libspectrum_snap *snap, libspectrum_dword tstates ); 690 WIN32_DLL int libspectrum_snap_halted( libspectrum_snap *snap ); 691 WIN32_DLL void libspectrum_snap_set_halted( libspectrum_snap *snap, int halted ); 692 WIN32_DLL int libspectrum_snap_last_instruction_ei( libspectrum_snap *snap ); 693 WIN32_DLL void libspectrum_snap_set_last_instruction_ei( libspectrum_snap *snap, int last_instruction_ei ); 694 WIN32_DLL int libspectrum_snap_last_instruction_set_f( libspectrum_snap *snap ); 695 WIN32_DLL void libspectrum_snap_set_last_instruction_set_f( libspectrum_snap *snap, int last_instruction_set_f ); 696 WIN32_DLL libspectrum_byte libspectrum_snap_out_ula( libspectrum_snap *snap ); 697 WIN32_DLL void libspectrum_snap_set_out_ula( libspectrum_snap *snap, libspectrum_byte out_ula ); 698 WIN32_DLL libspectrum_byte libspectrum_snap_out_128_memoryport( libspectrum_snap *snap ); 699 WIN32_DLL void libspectrum_snap_set_out_128_memoryport( libspectrum_snap *snap, libspectrum_byte out_128_memoryport ); 700 WIN32_DLL libspectrum_byte libspectrum_snap_out_plus3_memoryport( libspectrum_snap *snap ); 701 WIN32_DLL void libspectrum_snap_set_out_plus3_memoryport( libspectrum_snap *snap, libspectrum_byte out_plus3_memoryport ); 702 WIN32_DLL libspectrum_byte libspectrum_snap_out_ay_registerport( libspectrum_snap *snap ); 703 WIN32_DLL void libspectrum_snap_set_out_ay_registerport( libspectrum_snap *snap, libspectrum_byte out_ay_registerport ); 704 WIN32_DLL libspectrum_byte libspectrum_snap_ay_registers( libspectrum_snap *snap, int idx ); 705 WIN32_DLL void libspectrum_snap_set_ay_registers( libspectrum_snap *snap, int idx, libspectrum_byte ay_registers ); 706 WIN32_DLL libspectrum_byte libspectrum_snap_out_scld_hsr( libspectrum_snap *snap ); 707 WIN32_DLL void libspectrum_snap_set_out_scld_hsr( libspectrum_snap *snap, libspectrum_byte out_scld_hsr ); 708 WIN32_DLL libspectrum_byte libspectrum_snap_out_scld_dec( libspectrum_snap *snap ); 709 WIN32_DLL void libspectrum_snap_set_out_scld_dec( libspectrum_snap *snap, libspectrum_byte out_scld_dec ); 710 WIN32_DLL int libspectrum_snap_interface1_active( libspectrum_snap *snap ); 711 WIN32_DLL void libspectrum_snap_set_interface1_active( libspectrum_snap *snap, int interface1_active ); 712 WIN32_DLL int libspectrum_snap_interface1_paged( libspectrum_snap *snap ); 713 WIN32_DLL void libspectrum_snap_set_interface1_paged( libspectrum_snap *snap, int interface1_paged ); 714 WIN32_DLL int libspectrum_snap_interface1_drive_count( libspectrum_snap *snap ); 715 WIN32_DLL void libspectrum_snap_set_interface1_drive_count( libspectrum_snap *snap, int interface1_drive_count ); 716 WIN32_DLL int libspectrum_snap_interface1_custom_rom( libspectrum_snap *snap ); 717 WIN32_DLL void libspectrum_snap_set_interface1_custom_rom( libspectrum_snap *snap, int interface1_custom_rom ); 718 WIN32_DLL libspectrum_byte * libspectrum_snap_interface1_rom( libspectrum_snap *snap, int idx ); 719 WIN32_DLL void libspectrum_snap_set_interface1_rom( libspectrum_snap *snap, int idx, libspectrum_byte* interface1_rom ); 720 WIN32_DLL size_t libspectrum_snap_interface1_rom_length( libspectrum_snap *snap, int idx ); 721 WIN32_DLL void libspectrum_snap_set_interface1_rom_length( libspectrum_snap *snap, int idx, size_t interface1_rom_length ); 722 WIN32_DLL int libspectrum_snap_beta_active( libspectrum_snap *snap ); 723 WIN32_DLL void libspectrum_snap_set_beta_active( libspectrum_snap *snap, int beta_active ); 724 WIN32_DLL int libspectrum_snap_beta_paged( libspectrum_snap *snap ); 725 WIN32_DLL void libspectrum_snap_set_beta_paged( libspectrum_snap *snap, int beta_paged ); 726 WIN32_DLL int libspectrum_snap_beta_autoboot( libspectrum_snap *snap ); 727 WIN32_DLL void libspectrum_snap_set_beta_autoboot( libspectrum_snap *snap, int beta_autoboot ); 728 WIN32_DLL int libspectrum_snap_beta_drive_count( libspectrum_snap *snap ); 729 WIN32_DLL void libspectrum_snap_set_beta_drive_count( libspectrum_snap *snap, int beta_drive_count ); 730 WIN32_DLL int libspectrum_snap_beta_custom_rom( libspectrum_snap *snap ); 731 WIN32_DLL void libspectrum_snap_set_beta_custom_rom( libspectrum_snap *snap, int beta_custom_rom ); 732 WIN32_DLL int libspectrum_snap_beta_direction( libspectrum_snap *snap ); 733 WIN32_DLL void libspectrum_snap_set_beta_direction( libspectrum_snap *snap, int beta_direction ); 734 WIN32_DLL libspectrum_byte libspectrum_snap_beta_system( libspectrum_snap *snap ); 735 WIN32_DLL void libspectrum_snap_set_beta_system( libspectrum_snap *snap, libspectrum_byte beta_system ); 736 WIN32_DLL libspectrum_byte libspectrum_snap_beta_track( libspectrum_snap *snap ); 737 WIN32_DLL void libspectrum_snap_set_beta_track( libspectrum_snap *snap, libspectrum_byte beta_track ); 738 WIN32_DLL libspectrum_byte libspectrum_snap_beta_sector( libspectrum_snap *snap ); 739 WIN32_DLL void libspectrum_snap_set_beta_sector( libspectrum_snap *snap, libspectrum_byte beta_sector ); 740 WIN32_DLL libspectrum_byte libspectrum_snap_beta_data( libspectrum_snap *snap ); 741 WIN32_DLL void libspectrum_snap_set_beta_data( libspectrum_snap *snap, libspectrum_byte beta_data ); 742 WIN32_DLL libspectrum_byte libspectrum_snap_beta_status( libspectrum_snap *snap ); 743 WIN32_DLL void libspectrum_snap_set_beta_status( libspectrum_snap *snap, libspectrum_byte beta_status ); 744 WIN32_DLL libspectrum_byte * libspectrum_snap_beta_rom( libspectrum_snap *snap, int idx ); 745 WIN32_DLL void libspectrum_snap_set_beta_rom( libspectrum_snap *snap, int idx, libspectrum_byte* beta_rom ); 746 WIN32_DLL int libspectrum_snap_plusd_active( libspectrum_snap *snap ); 747 WIN32_DLL void libspectrum_snap_set_plusd_active( libspectrum_snap *snap, int plusd_active ); 748 WIN32_DLL int libspectrum_snap_plusd_paged( libspectrum_snap *snap ); 749 WIN32_DLL void libspectrum_snap_set_plusd_paged( libspectrum_snap *snap, int plusd_paged ); 750 WIN32_DLL int libspectrum_snap_plusd_drive_count( libspectrum_snap *snap ); 751 WIN32_DLL void libspectrum_snap_set_plusd_drive_count( libspectrum_snap *snap, int plusd_drive_count ); 752 WIN32_DLL int libspectrum_snap_plusd_custom_rom( libspectrum_snap *snap ); 753 WIN32_DLL void libspectrum_snap_set_plusd_custom_rom( libspectrum_snap *snap, int plusd_custom_rom ); 754 WIN32_DLL int libspectrum_snap_plusd_direction( libspectrum_snap *snap ); 755 WIN32_DLL void libspectrum_snap_set_plusd_direction( libspectrum_snap *snap, int plusd_direction ); 756 WIN32_DLL libspectrum_byte libspectrum_snap_plusd_control( libspectrum_snap *snap ); 757 WIN32_DLL void libspectrum_snap_set_plusd_control( libspectrum_snap *snap, libspectrum_byte plusd_control ); 758 WIN32_DLL libspectrum_byte libspectrum_snap_plusd_track( libspectrum_snap *snap ); 759 WIN32_DLL void libspectrum_snap_set_plusd_track( libspectrum_snap *snap, libspectrum_byte plusd_track ); 760 WIN32_DLL libspectrum_byte libspectrum_snap_plusd_sector( libspectrum_snap *snap ); 761 WIN32_DLL void libspectrum_snap_set_plusd_sector( libspectrum_snap *snap, libspectrum_byte plusd_sector ); 762 WIN32_DLL libspectrum_byte libspectrum_snap_plusd_data( libspectrum_snap *snap ); 763 WIN32_DLL void libspectrum_snap_set_plusd_data( libspectrum_snap *snap, libspectrum_byte plusd_data ); 764 WIN32_DLL libspectrum_byte libspectrum_snap_plusd_status( libspectrum_snap *snap ); 765 WIN32_DLL void libspectrum_snap_set_plusd_status( libspectrum_snap *snap, libspectrum_byte plusd_status ); 766 WIN32_DLL libspectrum_byte * libspectrum_snap_plusd_rom( libspectrum_snap *snap, int idx ); 767 WIN32_DLL void libspectrum_snap_set_plusd_rom( libspectrum_snap *snap, int idx, libspectrum_byte* plusd_rom ); 768 WIN32_DLL libspectrum_byte * libspectrum_snap_plusd_ram( libspectrum_snap *snap, int idx ); 769 WIN32_DLL void libspectrum_snap_set_plusd_ram( libspectrum_snap *snap, int idx, libspectrum_byte* plusd_ram ); 770 WIN32_DLL int libspectrum_snap_opus_active( libspectrum_snap *snap ); 771 WIN32_DLL void libspectrum_snap_set_opus_active( libspectrum_snap *snap, int opus_active ); 772 WIN32_DLL int libspectrum_snap_opus_paged( libspectrum_snap *snap ); 773 WIN32_DLL void libspectrum_snap_set_opus_paged( libspectrum_snap *snap, int opus_paged ); 774 WIN32_DLL int libspectrum_snap_opus_drive_count( libspectrum_snap *snap ); 775 WIN32_DLL void libspectrum_snap_set_opus_drive_count( libspectrum_snap *snap, int opus_drive_count ); 776 WIN32_DLL int libspectrum_snap_opus_custom_rom( libspectrum_snap *snap ); 777 WIN32_DLL void libspectrum_snap_set_opus_custom_rom( libspectrum_snap *snap, int opus_custom_rom ); 778 WIN32_DLL int libspectrum_snap_opus_direction( libspectrum_snap *snap ); 779 WIN32_DLL void libspectrum_snap_set_opus_direction( libspectrum_snap *snap, int opus_direction ); 780 WIN32_DLL libspectrum_byte libspectrum_snap_opus_track( libspectrum_snap *snap ); 781 WIN32_DLL void libspectrum_snap_set_opus_track( libspectrum_snap *snap, libspectrum_byte opus_track ); 782 WIN32_DLL libspectrum_byte libspectrum_snap_opus_sector( libspectrum_snap *snap ); 783 WIN32_DLL void libspectrum_snap_set_opus_sector( libspectrum_snap *snap, libspectrum_byte opus_sector ); 784 WIN32_DLL libspectrum_byte libspectrum_snap_opus_data( libspectrum_snap *snap ); 785 WIN32_DLL void libspectrum_snap_set_opus_data( libspectrum_snap *snap, libspectrum_byte opus_data ); 786 WIN32_DLL libspectrum_byte libspectrum_snap_opus_status( libspectrum_snap *snap ); 787 WIN32_DLL void libspectrum_snap_set_opus_status( libspectrum_snap *snap, libspectrum_byte opus_status ); 788 WIN32_DLL libspectrum_byte libspectrum_snap_opus_data_reg_a( libspectrum_snap *snap ); 789 WIN32_DLL void libspectrum_snap_set_opus_data_reg_a( libspectrum_snap *snap, libspectrum_byte opus_data_reg_a ); 790 WIN32_DLL libspectrum_byte libspectrum_snap_opus_data_dir_a( libspectrum_snap *snap ); 791 WIN32_DLL void libspectrum_snap_set_opus_data_dir_a( libspectrum_snap *snap, libspectrum_byte opus_data_dir_a ); 792 WIN32_DLL libspectrum_byte libspectrum_snap_opus_control_a( libspectrum_snap *snap ); 793 WIN32_DLL void libspectrum_snap_set_opus_control_a( libspectrum_snap *snap, libspectrum_byte opus_control_a ); 794 WIN32_DLL libspectrum_byte libspectrum_snap_opus_data_reg_b( libspectrum_snap *snap ); 795 WIN32_DLL void libspectrum_snap_set_opus_data_reg_b( libspectrum_snap *snap, libspectrum_byte opus_data_reg_b ); 796 WIN32_DLL libspectrum_byte libspectrum_snap_opus_data_dir_b( libspectrum_snap *snap ); 797 WIN32_DLL void libspectrum_snap_set_opus_data_dir_b( libspectrum_snap *snap, libspectrum_byte opus_data_dir_b ); 798 WIN32_DLL libspectrum_byte libspectrum_snap_opus_control_b( libspectrum_snap *snap ); 799 WIN32_DLL void libspectrum_snap_set_opus_control_b( libspectrum_snap *snap, libspectrum_byte opus_control_b ); 800 WIN32_DLL libspectrum_byte * libspectrum_snap_opus_rom( libspectrum_snap *snap, int idx ); 801 WIN32_DLL void libspectrum_snap_set_opus_rom( libspectrum_snap *snap, int idx, libspectrum_byte* opus_rom ); 802 WIN32_DLL libspectrum_byte * libspectrum_snap_opus_ram( libspectrum_snap *snap, int idx ); 803 WIN32_DLL void libspectrum_snap_set_opus_ram( libspectrum_snap *snap, int idx, libspectrum_byte* opus_ram ); 804 WIN32_DLL int libspectrum_snap_custom_rom( libspectrum_snap *snap ); 805 WIN32_DLL void libspectrum_snap_set_custom_rom( libspectrum_snap *snap, int custom_rom ); 806 WIN32_DLL size_t libspectrum_snap_custom_rom_pages( libspectrum_snap *snap ); 807 WIN32_DLL void libspectrum_snap_set_custom_rom_pages( libspectrum_snap *snap, size_t custom_rom_pages ); 808 WIN32_DLL libspectrum_byte * libspectrum_snap_roms( libspectrum_snap *snap, int idx ); 809 WIN32_DLL void libspectrum_snap_set_roms( libspectrum_snap *snap, int idx, libspectrum_byte* roms ); 810 WIN32_DLL size_t libspectrum_snap_rom_length( libspectrum_snap *snap, int idx ); 811 WIN32_DLL void libspectrum_snap_set_rom_length( libspectrum_snap *snap, int idx, size_t rom_length ); 812 WIN32_DLL libspectrum_byte * libspectrum_snap_pages( libspectrum_snap *snap, int idx ); 813 WIN32_DLL void libspectrum_snap_set_pages( libspectrum_snap *snap, int idx, libspectrum_byte* pages ); 814 WIN32_DLL libspectrum_byte * libspectrum_snap_slt( libspectrum_snap *snap, int idx ); 815 WIN32_DLL void libspectrum_snap_set_slt( libspectrum_snap *snap, int idx, libspectrum_byte* slt ); 816 WIN32_DLL size_t libspectrum_snap_slt_length( libspectrum_snap *snap, int idx ); 817 WIN32_DLL void libspectrum_snap_set_slt_length( libspectrum_snap *snap, int idx, size_t slt_length ); 818 WIN32_DLL libspectrum_byte * libspectrum_snap_slt_screen( libspectrum_snap *snap ); 819 WIN32_DLL void libspectrum_snap_set_slt_screen( libspectrum_snap *snap, libspectrum_byte* slt_screen ); 820 WIN32_DLL int libspectrum_snap_slt_screen_level( libspectrum_snap *snap ); 821 WIN32_DLL void libspectrum_snap_set_slt_screen_level( libspectrum_snap *snap, int slt_screen_level ); 822 WIN32_DLL int libspectrum_snap_zxatasp_active( libspectrum_snap *snap ); 823 WIN32_DLL void libspectrum_snap_set_zxatasp_active( libspectrum_snap *snap, int zxatasp_active ); 824 WIN32_DLL int libspectrum_snap_zxatasp_upload( libspectrum_snap *snap ); 825 WIN32_DLL void libspectrum_snap_set_zxatasp_upload( libspectrum_snap *snap, int zxatasp_upload ); 826 WIN32_DLL int libspectrum_snap_zxatasp_writeprotect( libspectrum_snap *snap ); 827 WIN32_DLL void libspectrum_snap_set_zxatasp_writeprotect( libspectrum_snap *snap, int zxatasp_writeprotect ); 828 WIN32_DLL libspectrum_byte libspectrum_snap_zxatasp_port_a( libspectrum_snap *snap ); 829 WIN32_DLL void libspectrum_snap_set_zxatasp_port_a( libspectrum_snap *snap, libspectrum_byte zxatasp_port_a ); 830 WIN32_DLL libspectrum_byte libspectrum_snap_zxatasp_port_b( libspectrum_snap *snap ); 831 WIN32_DLL void libspectrum_snap_set_zxatasp_port_b( libspectrum_snap *snap, libspectrum_byte zxatasp_port_b ); 832 WIN32_DLL libspectrum_byte libspectrum_snap_zxatasp_port_c( libspectrum_snap *snap ); 833 WIN32_DLL void libspectrum_snap_set_zxatasp_port_c( libspectrum_snap *snap, libspectrum_byte zxatasp_port_c ); 834 WIN32_DLL libspectrum_byte libspectrum_snap_zxatasp_control( libspectrum_snap *snap ); 835 WIN32_DLL void libspectrum_snap_set_zxatasp_control( libspectrum_snap *snap, libspectrum_byte zxatasp_control ); 836 WIN32_DLL size_t libspectrum_snap_zxatasp_pages( libspectrum_snap *snap ); 837 WIN32_DLL void libspectrum_snap_set_zxatasp_pages( libspectrum_snap *snap, size_t zxatasp_pages ); 838 WIN32_DLL size_t libspectrum_snap_zxatasp_current_page( libspectrum_snap *snap ); 839 WIN32_DLL void libspectrum_snap_set_zxatasp_current_page( libspectrum_snap *snap, size_t zxatasp_current_page ); 840 WIN32_DLL libspectrum_byte * libspectrum_snap_zxatasp_ram( libspectrum_snap *snap, int idx ); 841 WIN32_DLL void libspectrum_snap_set_zxatasp_ram( libspectrum_snap *snap, int idx, libspectrum_byte* zxatasp_ram ); 842 WIN32_DLL int libspectrum_snap_zxcf_active( libspectrum_snap *snap ); 843 WIN32_DLL void libspectrum_snap_set_zxcf_active( libspectrum_snap *snap, int zxcf_active ); 844 WIN32_DLL int libspectrum_snap_zxcf_upload( libspectrum_snap *snap ); 845 WIN32_DLL void libspectrum_snap_set_zxcf_upload( libspectrum_snap *snap, int zxcf_upload ); 846 WIN32_DLL libspectrum_byte libspectrum_snap_zxcf_memctl( libspectrum_snap *snap ); 847 WIN32_DLL void libspectrum_snap_set_zxcf_memctl( libspectrum_snap *snap, libspectrum_byte zxcf_memctl ); 848 WIN32_DLL size_t libspectrum_snap_zxcf_pages( libspectrum_snap *snap ); 849 WIN32_DLL void libspectrum_snap_set_zxcf_pages( libspectrum_snap *snap, size_t zxcf_pages ); 850 WIN32_DLL libspectrum_byte * libspectrum_snap_zxcf_ram( libspectrum_snap *snap, int idx ); 851 WIN32_DLL void libspectrum_snap_set_zxcf_ram( libspectrum_snap *snap, int idx, libspectrum_byte* zxcf_ram ); 852 WIN32_DLL int libspectrum_snap_interface2_active( libspectrum_snap *snap ); 853 WIN32_DLL void libspectrum_snap_set_interface2_active( libspectrum_snap *snap, int interface2_active ); 854 WIN32_DLL libspectrum_byte * libspectrum_snap_interface2_rom( libspectrum_snap *snap, int idx ); 855 WIN32_DLL void libspectrum_snap_set_interface2_rom( libspectrum_snap *snap, int idx, libspectrum_byte* interface2_rom ); 856 WIN32_DLL int libspectrum_snap_dock_active( libspectrum_snap *snap ); 857 WIN32_DLL void libspectrum_snap_set_dock_active( libspectrum_snap *snap, int dock_active ); 858 WIN32_DLL libspectrum_byte libspectrum_snap_exrom_ram( libspectrum_snap *snap, int idx ); 859 WIN32_DLL void libspectrum_snap_set_exrom_ram( libspectrum_snap *snap, int idx, libspectrum_byte exrom_ram ); 860 WIN32_DLL libspectrum_byte * libspectrum_snap_exrom_cart( libspectrum_snap *snap, int idx ); 861 WIN32_DLL void libspectrum_snap_set_exrom_cart( libspectrum_snap *snap, int idx, libspectrum_byte* exrom_cart ); 862 WIN32_DLL libspectrum_byte libspectrum_snap_dock_ram( libspectrum_snap *snap, int idx ); 863 WIN32_DLL void libspectrum_snap_set_dock_ram( libspectrum_snap *snap, int idx, libspectrum_byte dock_ram ); 864 WIN32_DLL libspectrum_byte * libspectrum_snap_dock_cart( libspectrum_snap *snap, int idx ); 865 WIN32_DLL void libspectrum_snap_set_dock_cart( libspectrum_snap *snap, int idx, libspectrum_byte* dock_cart ); 866 WIN32_DLL int libspectrum_snap_issue2( libspectrum_snap *snap ); 867 WIN32_DLL void libspectrum_snap_set_issue2( libspectrum_snap *snap, int issue2 ); 868 WIN32_DLL size_t libspectrum_snap_joystick_active_count( libspectrum_snap *snap ); 869 WIN32_DLL void libspectrum_snap_set_joystick_active_count( libspectrum_snap *snap, size_t joystick_active_count ); 870 WIN32_DLL libspectrum_joystick libspectrum_snap_joystick_list( libspectrum_snap *snap, int idx ); 871 WIN32_DLL void libspectrum_snap_set_joystick_list( libspectrum_snap *snap, int idx, libspectrum_joystick joystick_list ); 872 WIN32_DLL int libspectrum_snap_joystick_inputs( libspectrum_snap *snap, int idx ); 873 WIN32_DLL void libspectrum_snap_set_joystick_inputs( libspectrum_snap *snap, int idx, int joystick_inputs ); 874 WIN32_DLL int libspectrum_snap_kempston_mouse_active( libspectrum_snap *snap ); 875 WIN32_DLL void libspectrum_snap_set_kempston_mouse_active( libspectrum_snap *snap, int kempston_mouse_active ); 876 WIN32_DLL int libspectrum_snap_simpleide_active( libspectrum_snap *snap ); 877 WIN32_DLL void libspectrum_snap_set_simpleide_active( libspectrum_snap *snap, int simpleide_active ); 878 WIN32_DLL int libspectrum_snap_divide_active( libspectrum_snap *snap ); 879 WIN32_DLL void libspectrum_snap_set_divide_active( libspectrum_snap *snap, int divide_active ); 880 WIN32_DLL int libspectrum_snap_divide_eprom_writeprotect( libspectrum_snap *snap ); 881 WIN32_DLL void libspectrum_snap_set_divide_eprom_writeprotect( libspectrum_snap *snap, int divide_eprom_writeprotect ); 882 WIN32_DLL int libspectrum_snap_divide_paged( libspectrum_snap *snap ); 883 WIN32_DLL void libspectrum_snap_set_divide_paged( libspectrum_snap *snap, int divide_paged ); 884 WIN32_DLL libspectrum_byte libspectrum_snap_divide_control( libspectrum_snap *snap ); 885 WIN32_DLL void libspectrum_snap_set_divide_control( libspectrum_snap *snap, libspectrum_byte divide_control ); 886 WIN32_DLL size_t libspectrum_snap_divide_pages( libspectrum_snap *snap ); 887 WIN32_DLL void libspectrum_snap_set_divide_pages( libspectrum_snap *snap, size_t divide_pages ); 888 WIN32_DLL libspectrum_byte * libspectrum_snap_divide_eprom( libspectrum_snap *snap, int idx ); 889 WIN32_DLL void libspectrum_snap_set_divide_eprom( libspectrum_snap *snap, int idx, libspectrum_byte* divide_eprom ); 890 WIN32_DLL libspectrum_byte * libspectrum_snap_divide_ram( libspectrum_snap *snap, int idx ); 891 WIN32_DLL void libspectrum_snap_set_divide_ram( libspectrum_snap *snap, int idx, libspectrum_byte* divide_ram ); 892 WIN32_DLL int libspectrum_snap_fuller_box_active( libspectrum_snap *snap ); 893 WIN32_DLL void libspectrum_snap_set_fuller_box_active( libspectrum_snap *snap, int fuller_box_active ); 894 WIN32_DLL int libspectrum_snap_melodik_active( libspectrum_snap *snap ); 895 WIN32_DLL void libspectrum_snap_set_melodik_active( libspectrum_snap *snap, int melodik_active ); 896 WIN32_DLL int libspectrum_snap_specdrum_active( libspectrum_snap *snap ); 897 WIN32_DLL void libspectrum_snap_set_specdrum_active( libspectrum_snap *snap, int specdrum_active ); 898 WIN32_DLL libspectrum_signed_byte libspectrum_snap_specdrum_dac( libspectrum_snap *snap ); 899 WIN32_DLL void libspectrum_snap_set_specdrum_dac( libspectrum_snap *snap, libspectrum_signed_byte specdrum_dac ); 900 WIN32_DLL int libspectrum_snap_spectranet_active( libspectrum_snap *snap ); 901 WIN32_DLL void libspectrum_snap_set_spectranet_active( libspectrum_snap *snap, int spectranet_active ); 902 WIN32_DLL int libspectrum_snap_spectranet_paged( libspectrum_snap *snap ); 903 WIN32_DLL void libspectrum_snap_set_spectranet_paged( libspectrum_snap *snap, int spectranet_paged ); 904 WIN32_DLL int libspectrum_snap_spectranet_paged_via_io( libspectrum_snap *snap ); 905 WIN32_DLL void libspectrum_snap_set_spectranet_paged_via_io( libspectrum_snap *snap, int spectranet_paged_via_io ); 906 WIN32_DLL int libspectrum_snap_spectranet_nmi_flipflop( libspectrum_snap *snap ); 907 WIN32_DLL void libspectrum_snap_set_spectranet_nmi_flipflop( libspectrum_snap *snap, int spectranet_nmi_flipflop ); 908 WIN32_DLL int libspectrum_snap_spectranet_programmable_trap_active( libspectrum_snap *snap ); 909 WIN32_DLL void libspectrum_snap_set_spectranet_programmable_trap_active( libspectrum_snap *snap, int spectranet_programmable_trap_active ); 910 WIN32_DLL int libspectrum_snap_spectranet_programmable_trap_msb( libspectrum_snap *snap ); 911 WIN32_DLL void libspectrum_snap_set_spectranet_programmable_trap_msb( libspectrum_snap *snap, int spectranet_programmable_trap_msb ); 912 WIN32_DLL int libspectrum_snap_spectranet_all_traps_disabled( libspectrum_snap *snap ); 913 WIN32_DLL void libspectrum_snap_set_spectranet_all_traps_disabled( libspectrum_snap *snap, int spectranet_all_traps_disabled ); 914 WIN32_DLL int libspectrum_snap_spectranet_rst8_trap_disabled( libspectrum_snap *snap ); 915 WIN32_DLL void libspectrum_snap_set_spectranet_rst8_trap_disabled( libspectrum_snap *snap, int spectranet_rst8_trap_disabled ); 916 WIN32_DLL int libspectrum_snap_spectranet_deny_downstream_a15( libspectrum_snap *snap ); 917 WIN32_DLL void libspectrum_snap_set_spectranet_deny_downstream_a15( libspectrum_snap *snap, int spectranet_deny_downstream_a15 ); 918 WIN32_DLL int libspectrum_snap_spectranet_page_a( libspectrum_snap *snap ); 919 WIN32_DLL void libspectrum_snap_set_spectranet_page_a( libspectrum_snap *snap, int spectranet_page_a ); 920 WIN32_DLL int libspectrum_snap_spectranet_page_b( libspectrum_snap *snap ); 921 WIN32_DLL void libspectrum_snap_set_spectranet_page_b( libspectrum_snap *snap, int spectranet_page_b ); 922 WIN32_DLL libspectrum_word libspectrum_snap_spectranet_programmable_trap( libspectrum_snap *snap ); 923 WIN32_DLL void libspectrum_snap_set_spectranet_programmable_trap( libspectrum_snap *snap, libspectrum_word spectranet_programmable_trap ); 924 WIN32_DLL libspectrum_byte * libspectrum_snap_spectranet_w5100( libspectrum_snap *snap, int idx ); 925 WIN32_DLL void libspectrum_snap_set_spectranet_w5100( libspectrum_snap *snap, int idx, libspectrum_byte* spectranet_w5100 ); 926 WIN32_DLL libspectrum_byte * libspectrum_snap_spectranet_flash( libspectrum_snap *snap, int idx ); 927 WIN32_DLL void libspectrum_snap_set_spectranet_flash( libspectrum_snap *snap, int idx, libspectrum_byte* spectranet_flash ); 928 WIN32_DLL libspectrum_byte * libspectrum_snap_spectranet_ram( libspectrum_snap *snap, int idx ); 929 WIN32_DLL void libspectrum_snap_set_spectranet_ram( libspectrum_snap *snap, int idx, libspectrum_byte* spectranet_ram ); 930 WIN32_DLL int libspectrum_snap_late_timings( libspectrum_snap *snap ); 931 WIN32_DLL void libspectrum_snap_set_late_timings( libspectrum_snap *snap, int late_timings ); 932 WIN32_DLL int libspectrum_snap_zx_printer_active( libspectrum_snap *snap ); 933 WIN32_DLL void libspectrum_snap_set_zx_printer_active( libspectrum_snap *snap, int zx_printer_active ); 934 935 /* 936 * Tape handling routines 937 */ 938 939 /* The various types of block available */ 940 typedef enum libspectrum_tape_type { 941 942 /* Values must be the same as used in the .tzx format */ 943 944 LIBSPECTRUM_TAPE_BLOCK_ROM = 0x10, 945 LIBSPECTRUM_TAPE_BLOCK_TURBO, 946 LIBSPECTRUM_TAPE_BLOCK_PURE_TONE, 947 LIBSPECTRUM_TAPE_BLOCK_PULSES, 948 LIBSPECTRUM_TAPE_BLOCK_PURE_DATA, 949 LIBSPECTRUM_TAPE_BLOCK_RAW_DATA, 950 951 LIBSPECTRUM_TAPE_BLOCK_GENERALISED_DATA = 0x19, 952 953 LIBSPECTRUM_TAPE_BLOCK_PAUSE = 0x20, 954 LIBSPECTRUM_TAPE_BLOCK_GROUP_START, 955 LIBSPECTRUM_TAPE_BLOCK_GROUP_END, 956 LIBSPECTRUM_TAPE_BLOCK_JUMP, 957 LIBSPECTRUM_TAPE_BLOCK_LOOP_START, 958 LIBSPECTRUM_TAPE_BLOCK_LOOP_END, 959 960 LIBSPECTRUM_TAPE_BLOCK_SELECT = 0x28, 961 962 LIBSPECTRUM_TAPE_BLOCK_STOP48 = 0x2a, 963 LIBSPECTRUM_TAPE_BLOCK_SET_SIGNAL_LEVEL, 964 965 LIBSPECTRUM_TAPE_BLOCK_COMMENT = 0x30, 966 LIBSPECTRUM_TAPE_BLOCK_MESSAGE, 967 LIBSPECTRUM_TAPE_BLOCK_ARCHIVE_INFO, 968 LIBSPECTRUM_TAPE_BLOCK_HARDWARE, 969 970 LIBSPECTRUM_TAPE_BLOCK_CUSTOM = 0x35, 971 972 LIBSPECTRUM_TAPE_BLOCK_CONCAT = 0x5a, 973 974 /* Past here are block types not in the .tzx format */ 975 976 LIBSPECTRUM_TAPE_BLOCK_RLE_PULSE = 0x100, 977 978 /* PZX format blocks */ 979 LIBSPECTRUM_TAPE_BLOCK_PULSE_SEQUENCE, 980 LIBSPECTRUM_TAPE_BLOCK_DATA_BLOCK, 981 982 } libspectrum_tape_type; 983 984 typedef struct libspectrum_tape_block libspectrum_tape_block; 985 typedef struct libspectrum_tape_block_state libspectrum_tape_block_state; 986 typedef struct libspectrum_tape_generalised_data_symbol_table libspectrum_tape_generalised_data_symbol_table; 987 988 /* Something to step through all the blocks in a tape */ 989 typedef struct _GSList *libspectrum_tape_iterator; 990 991 /* Some flags */ 992 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_BLOCK; /* End of block */ 993 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_STOP; /* Stop tape */ 994 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_STOP48; /* Stop tape if in 48K mode */ 995 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_NO_EDGE; /* Edge isn't really an edge */ 996 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_LEVEL_LOW; /* Set level low */ 997 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_LEVEL_HIGH; /* Set level high */ 998 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_LENGTH_SHORT;/* Short edge; 999 used for loader acceleration */ 1000 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_LENGTH_LONG; /* Long edge; 1001 used for loader acceleration */ 1002 extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_TAPE; /* Tape has finished */ 1003 1004 /* The states which a block can be in */ 1005 typedef enum libspectrum_tape_state_type { 1006 1007 LIBSPECTRUM_TAPE_STATE_INVALID = 0, 1008 1009 LIBSPECTRUM_TAPE_STATE_PILOT, /* Pilot pulses */ 1010 LIBSPECTRUM_TAPE_STATE_SYNC1, /* First sync pulse */ 1011 LIBSPECTRUM_TAPE_STATE_SYNC2, /* Second sync pulse */ 1012 LIBSPECTRUM_TAPE_STATE_DATA1, /* First edge of a data bit */ 1013 LIBSPECTRUM_TAPE_STATE_DATA2, /* Second edge of a data bit */ 1014 LIBSPECTRUM_TAPE_STATE_PAUSE, /* The pause at the end of a block */ 1015 LIBSPECTRUM_TAPE_STATE_TAIL, /* The pulse at the end of a block */ 1016 1017 } libspectrum_tape_state_type; 1018 1019 /* Routines to manipulate tape blocks */ 1020 WIN32_DLL libspectrum_tape_block* 1021 libspectrum_tape_block_alloc( libspectrum_tape_type type ); 1022 WIN32_DLL libspectrum_error 1023 libspectrum_tape_block_free( libspectrum_tape_block *block ); 1024 WIN32_DLL libspectrum_tape_type 1025 libspectrum_tape_block_type( libspectrum_tape_block *block ); 1026 WIN32_DLL libspectrum_error 1027 libspectrum_tape_block_set_type( libspectrum_tape_block *block, 1028 libspectrum_tape_type type ); 1029 1030 WIN32_DLL libspectrum_error 1031 libspectrum_tape_block_init( libspectrum_tape_block *block, 1032 libspectrum_tape_block_state *state ); 1033 1034 WIN32_DLL libspectrum_error 1035 libspectrum_tape_block_description( char *buffer, size_t length, 1036 libspectrum_tape_block *block ); 1037 1038 WIN32_DLL int 1039 libspectrum_tape_block_metadata( libspectrum_tape_block *block ); 1040 1041 WIN32_DLL libspectrum_dword 1042 libspectrum_tape_block_length( libspectrum_tape_block *block ); 1043 1044 /* Accessor functions */ 1045 WIN32_DLL libspectrum_dword libspectrum_tape_block_bit_length( libspectrum_tape_block *block ); 1046 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bit_length( libspectrum_tape_block *block, libspectrum_dword bit_length ); 1047 WIN32_DLL libspectrum_dword libspectrum_tape_block_bit0_length( libspectrum_tape_block *block ); 1048 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bit0_length( libspectrum_tape_block *block, libspectrum_dword bit0_length ); 1049 WIN32_DLL libspectrum_dword libspectrum_tape_block_bit1_length( libspectrum_tape_block *block ); 1050 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bit1_length( libspectrum_tape_block *block, libspectrum_dword bit1_length ); 1051 WIN32_DLL size_t libspectrum_tape_block_bits_in_last_byte( libspectrum_tape_block *block ); 1052 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bits_in_last_byte( libspectrum_tape_block *block, size_t bits_in_last_byte ); 1053 WIN32_DLL size_t libspectrum_tape_block_bits_per_data_symbol( libspectrum_tape_block *block ); 1054 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bits_per_data_symbol( libspectrum_tape_block *block, size_t bits_per_data_symbol ); 1055 WIN32_DLL size_t libspectrum_tape_block_count( libspectrum_tape_block *block ); 1056 WIN32_DLL libspectrum_error libspectrum_tape_block_set_count( libspectrum_tape_block *block, size_t count ); 1057 WIN32_DLL libspectrum_byte * libspectrum_tape_block_data( libspectrum_tape_block *block ); 1058 WIN32_DLL libspectrum_error libspectrum_tape_block_set_data( libspectrum_tape_block *block, libspectrum_byte* data ); 1059 WIN32_DLL size_t libspectrum_tape_block_data_length( libspectrum_tape_block *block ); 1060 WIN32_DLL libspectrum_error libspectrum_tape_block_set_data_length( libspectrum_tape_block *block, size_t data_length ); 1061 WIN32_DLL libspectrum_tape_generalised_data_symbol_table * libspectrum_tape_block_data_table( libspectrum_tape_block *block ); 1062 WIN32_DLL libspectrum_error libspectrum_tape_block_set_data_table( libspectrum_tape_block *block, libspectrum_tape_generalised_data_symbol_table* data_table ); 1063 WIN32_DLL int libspectrum_tape_block_ids( libspectrum_tape_block *block, size_t idx ); 1064 WIN32_DLL libspectrum_error libspectrum_tape_block_set_ids( libspectrum_tape_block *block, int *ids ); 1065 WIN32_DLL int libspectrum_tape_block_offset( libspectrum_tape_block *block ); 1066 WIN32_DLL libspectrum_error libspectrum_tape_block_set_offset( libspectrum_tape_block *block, int offset ); 1067 WIN32_DLL int libspectrum_tape_block_offsets( libspectrum_tape_block *block, size_t idx ); 1068 WIN32_DLL libspectrum_error libspectrum_tape_block_set_offsets( libspectrum_tape_block *block, int *offsets ); 1069 WIN32_DLL libspectrum_dword libspectrum_tape_block_pause( libspectrum_tape_block *block ); 1070 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pause( libspectrum_tape_block *block, libspectrum_dword pause ); 1071 WIN32_DLL libspectrum_dword libspectrum_tape_block_pause_tstates( libspectrum_tape_block *block ); 1072 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pause_tstates( libspectrum_tape_block *block, libspectrum_dword pause_tstates ); 1073 WIN32_DLL libspectrum_dword libspectrum_tape_block_pilot_length( libspectrum_tape_block *block ); 1074 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pilot_length( libspectrum_tape_block *block, libspectrum_dword pilot_length ); 1075 WIN32_DLL size_t libspectrum_tape_block_pilot_pulses( libspectrum_tape_block *block ); 1076 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pilot_pulses( libspectrum_tape_block *block, size_t pilot_pulses ); 1077 WIN32_DLL libspectrum_word libspectrum_tape_block_pilot_repeats( libspectrum_tape_block *block, size_t idx ); 1078 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pilot_repeats( libspectrum_tape_block *block, libspectrum_word *pilot_repeats ); 1079 WIN32_DLL libspectrum_byte libspectrum_tape_block_pilot_symbols( libspectrum_tape_block *block, size_t idx ); 1080 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pilot_symbols( libspectrum_tape_block *block, libspectrum_byte *pilot_symbols ); 1081 WIN32_DLL libspectrum_tape_generalised_data_symbol_table * libspectrum_tape_block_pilot_table( libspectrum_tape_block *block ); 1082 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pilot_table( libspectrum_tape_block *block, libspectrum_tape_generalised_data_symbol_table* pilot_table ); 1083 WIN32_DLL libspectrum_dword libspectrum_tape_block_pulse_length( libspectrum_tape_block *block ); 1084 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pulse_length( libspectrum_tape_block *block, libspectrum_dword pulse_length ); 1085 WIN32_DLL libspectrum_dword libspectrum_tape_block_scale( libspectrum_tape_block *block ); 1086 WIN32_DLL libspectrum_error libspectrum_tape_block_set_scale( libspectrum_tape_block *block, libspectrum_dword scale ); 1087 WIN32_DLL libspectrum_dword libspectrum_tape_block_pulse_lengths( libspectrum_tape_block *block, size_t idx ); 1088 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pulse_lengths( libspectrum_tape_block *block, libspectrum_dword *pulse_lengths ); 1089 WIN32_DLL size_t libspectrum_tape_block_pulse_repeats( libspectrum_tape_block *block, size_t idx ); 1090 WIN32_DLL libspectrum_error libspectrum_tape_block_set_pulse_repeats( libspectrum_tape_block *block, size_t *pulse_repeats ); 1091 WIN32_DLL libspectrum_dword libspectrum_tape_block_sync1_length( libspectrum_tape_block *block ); 1092 WIN32_DLL libspectrum_error libspectrum_tape_block_set_sync1_length( libspectrum_tape_block *block, libspectrum_dword sync1_length ); 1093 WIN32_DLL libspectrum_dword libspectrum_tape_block_sync2_length( libspectrum_tape_block *block ); 1094 WIN32_DLL libspectrum_error libspectrum_tape_block_set_sync2_length( libspectrum_tape_block *block, libspectrum_dword sync2_length ); 1095 WIN32_DLL libspectrum_dword libspectrum_tape_block_tail_length( libspectrum_tape_block *block ); 1096 WIN32_DLL libspectrum_error libspectrum_tape_block_set_tail_length( libspectrum_tape_block *block, libspectrum_dword tail_length ); 1097 WIN32_DLL char * libspectrum_tape_block_text( libspectrum_tape_block *block ); 1098 WIN32_DLL libspectrum_error libspectrum_tape_block_set_text( libspectrum_tape_block *block, char* text ); 1099 WIN32_DLL char * libspectrum_tape_block_texts( libspectrum_tape_block *block, size_t idx ); 1100 WIN32_DLL libspectrum_error libspectrum_tape_block_set_texts( libspectrum_tape_block *block, char* *texts ); 1101 WIN32_DLL int libspectrum_tape_block_types( libspectrum_tape_block *block, size_t idx ); 1102 WIN32_DLL libspectrum_error libspectrum_tape_block_set_types( libspectrum_tape_block *block, int *types ); 1103 WIN32_DLL int libspectrum_tape_block_values( libspectrum_tape_block *block, size_t idx ); 1104 WIN32_DLL libspectrum_error libspectrum_tape_block_set_values( libspectrum_tape_block *block, int *values ); 1105 WIN32_DLL int libspectrum_tape_block_level( libspectrum_tape_block *block ); 1106 WIN32_DLL libspectrum_error libspectrum_tape_block_set_level( libspectrum_tape_block *block, int level ); 1107 WIN32_DLL libspectrum_byte libspectrum_tape_block_bit0_pulse_count( libspectrum_tape_block *block ); 1108 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bit0_pulse_count( libspectrum_tape_block *block, libspectrum_byte bit0_pulse_count ); 1109 WIN32_DLL libspectrum_byte libspectrum_tape_block_bit1_pulse_count( libspectrum_tape_block *block ); 1110 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bit1_pulse_count( libspectrum_tape_block *block, libspectrum_byte bit1_pulse_count ); 1111 WIN32_DLL libspectrum_word libspectrum_tape_block_bit0_pulses( libspectrum_tape_block *block, size_t idx ); 1112 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bit0_pulses( libspectrum_tape_block *block, libspectrum_word *bit0_pulses ); 1113 WIN32_DLL libspectrum_word libspectrum_tape_block_bit1_pulses( libspectrum_tape_block *block, size_t idx ); 1114 WIN32_DLL libspectrum_error libspectrum_tape_block_set_bit1_pulses( libspectrum_tape_block *block, libspectrum_word *bit1_pulses ); 1115 1116 /* A linked list of tape blocks */ 1117 typedef struct libspectrum_tape libspectrum_tape; 1118 1119 WIN32_DLL libspectrum_tape* libspectrum_tape_alloc( void ); 1120 WIN32_DLL libspectrum_error libspectrum_tape_clear( libspectrum_tape *tape ); 1121 WIN32_DLL libspectrum_error libspectrum_tape_free( libspectrum_tape *tape ); 1122 1123 /* Read in a tape file, optionally guessing what sort of file it is */ 1124 WIN32_DLL libspectrum_error 1125 libspectrum_tape_read( libspectrum_tape *tape, const libspectrum_byte *buffer, 1126 size_t length, libspectrum_id_t type, 1127 const char *filename ); 1128 1129 /* Write a tape file */ 1130 WIN32_DLL libspectrum_error 1131 libspectrum_tape_write( libspectrum_byte **buffer, size_t *length, 1132 libspectrum_tape *tape, libspectrum_id_t type ); 1133 1134 /* Does this tape structure actually contain a tape? */ 1135 WIN32_DLL int libspectrum_tape_present( const libspectrum_tape *tape ); 1136 1137 WIN32_DLL libspectrum_error 1138 libspectrum_tape_get_next_edge( libspectrum_dword *tstates, int *flags, 1139 libspectrum_tape *tape ); 1140 1141 /* Get the current block from the tape */ 1142 WIN32_DLL libspectrum_tape_block * 1143 libspectrum_tape_current_block( libspectrum_tape *tape ); 1144 1145 /* Get the state of the active block on the tape */ 1146 WIN32_DLL libspectrum_tape_state_type 1147 libspectrum_tape_state( libspectrum_tape *tape ); 1148 1149 /* Set the state of the active block on the tape */ 1150 WIN32_DLL libspectrum_error 1151 libspectrum_tape_set_state( libspectrum_tape *tape, 1152 libspectrum_tape_state_type state ); 1153 1154 /* Peek at the next block on the tape */ 1155 WIN32_DLL libspectrum_tape_block * 1156 libspectrum_tape_peek_next_block( libspectrum_tape *tape ); 1157 1158 /* Peek at the last block on the tape */ 1159 WIN32_DLL libspectrum_tape_block * 1160 libspectrum_tape_peek_last_block( libspectrum_tape *tape ); 1161 1162 /* Cause the next block on the tape to be active, initialise it 1163 and return it */ 1164 WIN32_DLL libspectrum_tape_block * 1165 libspectrum_tape_select_next_block( libspectrum_tape *tape ); 1166 1167 /* Get the position on the tape of the current block */ 1168 WIN32_DLL libspectrum_error 1169 libspectrum_tape_position( int *n, libspectrum_tape *tape ); 1170 1171 /* Select the nth block on the tape */ 1172 WIN32_DLL libspectrum_error 1173 libspectrum_tape_nth_block( libspectrum_tape *tape, int n ); 1174 1175 /* Append a block to the current tape */ 1176 WIN32_DLL void 1177 libspectrum_tape_append_block( libspectrum_tape *tape, 1178 libspectrum_tape_block *block ); 1179 1180 WIN32_DLL void 1181 libspectrum_tape_remove_block( libspectrum_tape *tape, 1182 libspectrum_tape_iterator it ); 1183 1184 WIN32_DLL libspectrum_error 1185 libspectrum_tape_insert_block( libspectrum_tape *tape, 1186 libspectrum_tape_block *block, 1187 size_t position ); 1188 1189 /*** Routines for iterating through a tape ***/ 1190 1191 WIN32_DLL libspectrum_tape_block * 1192 libspectrum_tape_iterator_init( libspectrum_tape_iterator *iterator, 1193 libspectrum_tape *tape ); 1194 1195 WIN32_DLL libspectrum_tape_block * 1196 libspectrum_tape_iterator_current( libspectrum_tape_iterator iterator ); 1197 1198 WIN32_DLL libspectrum_tape_block * 1199 libspectrum_tape_iterator_next( libspectrum_tape_iterator *iterator ); 1200 1201 /*** Routines for handling the TZX generalised data block symbol table 1202 structure ***/ 1203 1204 typedef enum libspectrum_tape_generalised_data_symbol_edge_type { 1205 1206 LIBSPECTRUM_TAPE_GENERALISED_DATA_SYMBOL_EDGE = 0x00, 1207 LIBSPECTRUM_TAPE_GENERALISED_DATA_SYMBOL_NO_EDGE, 1208 LIBSPECTRUM_TAPE_GENERALISED_DATA_SYMBOL_LOW, 1209 LIBSPECTRUM_TAPE_GENERALISED_DATA_SYMBOL_HIGH, 1210 1211 } libspectrum_tape_generalised_data_symbol_edge_type; 1212 1213 typedef struct libspectrum_tape_generalised_data_symbol libspectrum_tape_generalised_data_symbol; 1214 1215 WIN32_DLL libspectrum_dword libspectrum_tape_generalised_data_symbol_table_symbols_in_block( const libspectrum_tape_generalised_data_symbol_table *table ); 1216 WIN32_DLL libspectrum_byte libspectrum_tape_generalised_data_symbol_table_max_pulses( const libspectrum_tape_generalised_data_symbol_table *table ); 1217 WIN32_DLL libspectrum_word libspectrum_tape_generalised_data_symbol_table_symbols_in_table( const libspectrum_tape_generalised_data_symbol_table *table ); 1218 WIN32_DLL libspectrum_tape_generalised_data_symbol* libspectrum_tape_generalised_data_symbol_table_symbol( const libspectrum_tape_generalised_data_symbol_table *table, size_t which ); 1219 1220 WIN32_DLL libspectrum_tape_generalised_data_symbol_edge_type libspectrum_tape_generalised_data_symbol_type( const libspectrum_tape_generalised_data_symbol *symbol ); 1221 WIN32_DLL libspectrum_word libspectrum_tape_generalised_data_symbol_pulse( const libspectrum_tape_generalised_data_symbol *symbol, size_t which ); 1222 1223 1224 /* 1225 * Input recording routines 1226 */ 1227 1228 typedef struct libspectrum_rzx libspectrum_rzx; 1229 1230 WIN32_DLL libspectrum_rzx* libspectrum_rzx_alloc( void ); 1231 WIN32_DLL libspectrum_error libspectrum_rzx_free( libspectrum_rzx *rzx ); 1232 1233 WIN32_DLL void 1234 libspectrum_rzx_start_input( libspectrum_rzx *rzx, libspectrum_dword tstates ); 1235 WIN32_DLL libspectrum_error 1236 libspectrum_rzx_stop_input( libspectrum_rzx *rzx ); 1237 WIN32_DLL libspectrum_error 1238 libspectrum_rzx_add_snap( libspectrum_rzx *rzx, libspectrum_snap *snap, int automatic ); 1239 WIN32_DLL libspectrum_error 1240 libspectrum_rzx_rollback( libspectrum_rzx *rzx, libspectrum_snap **snap ); 1241 WIN32_DLL libspectrum_error 1242 libspectrum_rzx_rollback_to( libspectrum_rzx *rzx, libspectrum_snap **snap, 1243 size_t which ); 1244 1245 WIN32_DLL libspectrum_error 1246 libspectrum_rzx_store_frame( libspectrum_rzx *rzx, size_t instructions, 1247 size_t count, libspectrum_byte *in_bytes ); 1248 1249 WIN32_DLL libspectrum_error 1250 libspectrum_rzx_start_playback( libspectrum_rzx *rzx, int which, 1251 libspectrum_snap **snap ); 1252 WIN32_DLL libspectrum_error 1253 libspectrum_rzx_playback_frame( libspectrum_rzx *rzx, int *finished, libspectrum_snap **snap ); 1254 WIN32_DLL libspectrum_error 1255 libspectrum_rzx_playback( libspectrum_rzx *rzx, libspectrum_byte *byte ); 1256 1257 /* Get and set the tstate counter */ 1258 WIN32_DLL size_t libspectrum_rzx_tstates( libspectrum_rzx *rzx ); 1259 1260 /* Get the current frame's instruction count */ 1261 WIN32_DLL size_t libspectrum_rzx_instructions( libspectrum_rzx *rzx ); 1262 1263 WIN32_DLL libspectrum_dword libspectrum_rzx_get_keyid( libspectrum_rzx *rzx ); 1264 1265 typedef struct libspectrum_signature { 1266 1267 /* Where in the buffer is the signed data? */ 1268 const libspectrum_byte *start; ptrdiff_t length; 1269 1270 /* Signature parameters not stored as libgcrypt is not present */ 1271 1272 } libspectrum_signature; 1273 1274 WIN32_DLL libspectrum_error 1275 libspectrum_rzx_get_signature( libspectrum_rzx *rzx, 1276 libspectrum_signature *signature ); 1277 1278 typedef struct libspectrum_rzx_dsa_key { 1279 1280 /* The standard DSA parameters, represented as hex strings with MSB first. 1281 Set x = NULL for a public key */ 1282 const char *p, *q, *g, *y, *x; 1283 1284 } libspectrum_rzx_dsa_key; 1285 1286 WIN32_DLL libspectrum_error 1287 libspectrum_rzx_read( libspectrum_rzx *rzx, const libspectrum_byte *buffer, 1288 size_t length ); 1289 1290 WIN32_DLL libspectrum_error 1291 libspectrum_rzx_write( libspectrum_byte **buffer, size_t *length, 1292 libspectrum_rzx *rzx, libspectrum_id_t snap_format, 1293 libspectrum_creator *creator, int compress, 1294 libspectrum_rzx_dsa_key *key ); 1295 1296 /* Something to step through all the blocks in an input recording */ 1297 typedef struct _GSList *libspectrum_rzx_iterator; 1298 1299 /* The block types which can appear in RZX files */ 1300 typedef enum libspectrum_rzx_block_id { 1301 1302 LIBSPECTRUM_RZX_CREATOR_BLOCK = 0x10, 1303 1304 LIBSPECTRUM_RZX_SIGN_START_BLOCK = 0x20, 1305 LIBSPECTRUM_RZX_SIGN_END_BLOCK = 0x21, 1306 1307 LIBSPECTRUM_RZX_SNAPSHOT_BLOCK = 0x30, 1308 1309 LIBSPECTRUM_RZX_INPUT_BLOCK = 0x80, 1310 1311 } libspectrum_rzx_block_id; 1312 1313 WIN32_DLL void 1314 libspectrum_rzx_insert_snap( libspectrum_rzx *rzx, libspectrum_snap *snap, 1315 int where ); 1316 1317 WIN32_DLL libspectrum_rzx_iterator 1318 libspectrum_rzx_iterator_begin( libspectrum_rzx *rzx ); 1319 WIN32_DLL libspectrum_rzx_iterator 1320 libspectrum_rzx_iterator_next( libspectrum_rzx_iterator it ); 1321 1322 WIN32_DLL libspectrum_rzx_block_id 1323 libspectrum_rzx_iterator_get_type( libspectrum_rzx_iterator it ); 1324 WIN32_DLL size_t 1325 libspectrum_rzx_iterator_get_frames( libspectrum_rzx_iterator it ); 1326 1327 WIN32_DLL void 1328 libspectrum_rzx_iterator_delete( libspectrum_rzx *rzx, 1329 libspectrum_rzx_iterator it ); 1330 WIN32_DLL libspectrum_snap* 1331 libspectrum_rzx_iterator_get_snap( libspectrum_rzx_iterator it ); 1332 WIN32_DLL int 1333 libspectrum_rzx_iterator_snap_is_automatic( libspectrum_rzx_iterator it ); 1334 1335 /* 1336 * Microdrive image handling routines 1337 */ 1338 1339 typedef struct libspectrum_microdrive libspectrum_microdrive; 1340 1341 #define LIBSPECTRUM_MICRODRIVE_BLOCK_MAX 254 1342 #define LIBSPECTRUM_MICRODRIVE_HEAD_LEN 15 1343 #define LIBSPECTRUM_MICRODRIVE_DATA_LEN 512 1344 #define LIBSPECTRUM_MICRODRIVE_BLOCK_LEN ( LIBSPECTRUM_MICRODRIVE_HEAD_LEN + \ 1345 LIBSPECTRUM_MICRODRIVE_HEAD_LEN + \ 1346 LIBSPECTRUM_MICRODRIVE_DATA_LEN + 1 ) 1347 #define LIBSPECTRUM_MICRODRIVE_CARTRIDGE_LENGTH \ 1348 ( LIBSPECTRUM_MICRODRIVE_BLOCK_MAX * LIBSPECTRUM_MICRODRIVE_BLOCK_LEN ) 1349 1350 /* Constructor/destructor */ 1351 1352 WIN32_DLL libspectrum_microdrive* 1353 libspectrum_microdrive_alloc( void ); 1354 WIN32_DLL libspectrum_error 1355 libspectrum_microdrive_free( libspectrum_microdrive *microdrive ); 1356 1357 /* Accessors */ 1358 1359 WIN32_DLL libspectrum_byte 1360 libspectrum_microdrive_data( const libspectrum_microdrive *microdrive, 1361 size_t which ); 1362 WIN32_DLL void 1363 libspectrum_microdrive_set_data( libspectrum_microdrive *microdrive, 1364 size_t which, libspectrum_byte data ); 1365 1366 WIN32_DLL int 1367 libspectrum_microdrive_write_protect( const libspectrum_microdrive *microdrive ); 1368 WIN32_DLL void 1369 libspectrum_microdrive_set_write_protect( libspectrum_microdrive *microdrive, 1370 int write_protect ); 1371 1372 WIN32_DLL libspectrum_byte 1373 libspectrum_microdrive_cartridge_len( const libspectrum_microdrive *microdrive ); 1374 WIN32_DLL void 1375 libspectrum_microdrive_set_cartridge_len( libspectrum_microdrive *microdrive, 1376 libspectrum_byte len ); 1377 1378 /* .mdr format routines */ 1379 1380 WIN32_DLL int 1381 libspectrum_microdrive_checksum( libspectrum_microdrive *microdrive, 1382 libspectrum_byte what ); 1383 WIN32_DLL libspectrum_error 1384 libspectrum_microdrive_mdr_read( libspectrum_microdrive *microdrive, 1385 libspectrum_byte *buffer, size_t length ); 1386 WIN32_DLL void 1387 libspectrum_microdrive_mdr_write( const libspectrum_microdrive *microdrive, 1388 libspectrum_byte **buffer, size_t *length ); 1389 1390 /* 1391 * Timex DOCK/EXROM handling routines 1392 */ 1393 1394 /* The types of memory which this bank will page into */ 1395 typedef enum libspectrum_dck_bank { 1396 LIBSPECTRUM_DCK_BANK_DOCK = 0, 1397 LIBSPECTRUM_DCK_BANK_EXROM = 254, 1398 LIBSPECTRUM_DCK_BANK_HOME = 255 1399 } libspectrum_dck_bank; 1400 1401 /* The type of one 8Kb page */ 1402 typedef enum libspectrum_dck_page_type { 1403 LIBSPECTRUM_DCK_PAGE_NULL = 0, 1404 LIBSPECTRUM_DCK_PAGE_RAM_EMPTY, 1405 LIBSPECTRUM_DCK_PAGE_ROM, 1406 LIBSPECTRUM_DCK_PAGE_RAM 1407 } libspectrum_dck_page_type; 1408 1409 /* One set of 8 x 8Kb pages */ 1410 typedef struct libspectrum_dck_block { 1411 libspectrum_dck_bank bank; 1412 libspectrum_dck_page_type access[8]; 1413 libspectrum_byte *pages[8]; 1414 } libspectrum_dck_block; 1415 1416 /* A number of 8 x 8Kb page sets */ 1417 /* FIXME: Remove the arbitrary limit on the number of banks */ 1418 typedef struct libspectrum_dck { 1419 libspectrum_dck_block *dck[256]; /* dck block data */ 1420 } libspectrum_dck; 1421 1422 WIN32_DLL libspectrum_dck* libspectrum_dck_alloc( void ); 1423 WIN32_DLL libspectrum_error 1424 libspectrum_dck_free( libspectrum_dck *dck, int keep_pages ); 1425 1426 /* Read in a DCK file */ 1427 1428 WIN32_DLL libspectrum_error 1429 libspectrum_dck_read( libspectrum_dck *dck, const libspectrum_byte *buffer, 1430 size_t length ); 1431 1432 WIN32_DLL libspectrum_error 1433 libspectrum_dck_read2( libspectrum_dck *dck, const libspectrum_byte *buffer, 1434 size_t length, const char *filename ); 1435 1436 /* 1437 * Crypto functions 1438 */ 1439 1440 WIN32_DLL libspectrum_error 1441 libspectrum_verify_signature( libspectrum_signature *signature, 1442 libspectrum_rzx_dsa_key *key ); 1443 WIN32_DLL libspectrum_error 1444 libspectrum_signature_free( libspectrum_signature *signature ); 1445 1446 /* 1447 * IDE hard disk handling routines 1448 */ 1449 1450 typedef enum libspectrum_ide_databus { 1451 1452 LIBSPECTRUM_IDE_DATA8, 1453 LIBSPECTRUM_IDE_DATA16, 1454 LIBSPECTRUM_IDE_DATA16_BYTESWAP, 1455 LIBSPECTRUM_IDE_DATA16_DATA2, 1456 1457 } libspectrum_ide_databus; 1458 1459 typedef enum libspectrum_ide_unit { 1460 1461 LIBSPECTRUM_IDE_MASTER = 0, 1462 LIBSPECTRUM_IDE_SLAVE = 1, 1463 1464 } libspectrum_ide_unit; 1465 1466 typedef enum libspectrum_ide_register { 1467 1468 LIBSPECTRUM_IDE_REGISTER_DATA = 0, 1469 LIBSPECTRUM_IDE_REGISTER_ERROR_FEATURE = 1, 1470 LIBSPECTRUM_IDE_REGISTER_SECTOR_COUNT = 2, 1471 LIBSPECTRUM_IDE_REGISTER_SECTOR = 3, 1472 LIBSPECTRUM_IDE_REGISTER_CYLINDER_LOW = 4, 1473 LIBSPECTRUM_IDE_REGISTER_CYLINDER_HIGH = 5, 1474 LIBSPECTRUM_IDE_REGISTER_HEAD_DRIVE = 6, 1475 LIBSPECTRUM_IDE_REGISTER_COMMAND_STATUS = 7, 1476 LIBSPECTRUM_IDE_REGISTER_DATA2 = 8, 1477 1478 } libspectrum_ide_register; 1479 1480 typedef struct libspectrum_ide_channel libspectrum_ide_channel; 1481 1482 WIN32_DLL libspectrum_ide_channel* 1483 libspectrum_ide_alloc( libspectrum_ide_databus databus ); 1484 WIN32_DLL libspectrum_error 1485 libspectrum_ide_free( libspectrum_ide_channel *chn ); 1486 1487 WIN32_DLL libspectrum_error 1488 libspectrum_ide_insert( libspectrum_ide_channel *chn, 1489 libspectrum_ide_unit unit, 1490 const char *filename ); 1491 WIN32_DLL libspectrum_error 1492 libspectrum_ide_commit( libspectrum_ide_channel *chn, 1493 libspectrum_ide_unit unit ); 1494 WIN32_DLL int 1495 libspectrum_ide_dirty( libspectrum_ide_channel *chn, 1496 libspectrum_ide_unit unit ); 1497 WIN32_DLL libspectrum_error 1498 libspectrum_ide_eject( libspectrum_ide_channel *chn, 1499 libspectrum_ide_unit unit ); 1500 1501 WIN32_DLL libspectrum_error 1502 libspectrum_ide_reset( libspectrum_ide_channel *chn ); 1503 1504 WIN32_DLL libspectrum_byte 1505 libspectrum_ide_read( libspectrum_ide_channel *chn, 1506 libspectrum_ide_register reg ); 1507 1508 WIN32_DLL void 1509 libspectrum_ide_write( libspectrum_ide_channel *chn, 1510 libspectrum_ide_register reg, 1511 libspectrum_byte data ); 1512 1513 #ifdef __cplusplus 1514 }; 1515 #endif /* #ifdef __cplusplus */ 1516 1517 #endif /* #ifndef LIBSPECTRUM_LIBSPECTRUM_H */ 1518