296
340
|| SMR_DW_INT(m, &dummy) < 0
297
341
|| SMR_B_INT(m, (int *)&(drive->byte_ready_level)) < 0
298
342
|| SMR_B_INT(m, &(drive->clock_frequency)) < 0
299
|| SMR_W_INT(m, &(drive->current_half_track)) < 0
300
|| SMR_DW(m, &(detach_clk[i])) < 0
301
|| SMR_B(m, &(drive->diskID1)) < 0
302
|| SMR_B(m, &(drive->diskID2)) < 0
303
|| SMR_B_INT(m, &(drive->extend_image_policy)) < 0
304
|| SMR_B_INT(m, &dummy) < 0
305
|| SMR_DW_UINT(m, &(drive->GCR_head_offset)) < 0
306
|| SMR_B(m, &(drive->GCR_read)) < 0
307
|| SMR_B(m, &(drive->GCR_write_value)) < 0
308
|| SMR_B_INT(m, &(drive->idling_method)) < 0
309
|| SMR_B_INT(m, &dummy) < 0
310
|| SMR_B_INT(m, &(drive->parallel_cable)) < 0
311
|| SMR_B_INT(m, &(drive->read_only)) < 0
312
|| SMR_DW(m, &(drive->snap_rotation_last_clk)) < 0
313
|| SMR_DW(m, &rotation_table_ptr[i]) < 0
314
|| SMR_DW_UINT(m, &(drive->type)) < 0
316
snapshot_module_close(m);
343
|| SMR_W_INT(m, &half_track[i]) < 0
344
|| SMR_DW(m, &(detach_clk[i])) < 0
345
|| SMR_B(m, (BYTE *)&dummy) < 0
346
|| SMR_B(m, (BYTE *)&dummy) < 0
347
|| SMR_B_INT(m, &(drive->extend_image_policy)) < 0
348
|| SMR_B_INT(m, &dummy) < 0
349
|| SMR_DW_UINT(m, &(drive->GCR_head_offset)) < 0
350
|| SMR_B(m, &(drive->GCR_read)) < 0
351
|| SMR_B(m, &(drive->GCR_write_value)) < 0
352
|| SMR_B_INT(m, &(drive->idling_method)) < 0
353
|| SMR_B_INT(m, &dummy) < 0
354
|| SMR_B_INT(m, &(drive->parallel_cable)) < 0
355
|| SMR_B_INT(m, &(drive->read_only)) < 0
356
|| SMR_DW(m, &(drive->snap_rotation_last_clk)) < 0
357
|| SMR_DW(m, &rotation_table_ptr[i]) < 0
358
|| SMR_DW_UINT(m, &(drive->type)) < 0
360
snapshot_module_close(m);
364
/* Partially read 1.1 snapshots */
365
} else if (major_version == 1 && minor_version == 1) {
368
|| SMR_DW(m, &(attach_clk[i])) < 0
369
|| SMR_B_INT(m, (int *)&(drive->byte_ready_level)) < 0
370
|| SMR_B_INT(m, &(drive->clock_frequency)) < 0
371
|| SMR_W_INT(m, &half_track[i]) < 0
372
|| SMR_DW(m, &(detach_clk[i])) < 0
373
|| SMR_B(m, (BYTE *)&dummy) < 0
374
|| SMR_B(m, (BYTE *)&dummy) < 0
375
|| SMR_B_INT(m, &(drive->extend_image_policy)) < 0
376
|| SMR_DW_UINT(m, &(drive->GCR_head_offset)) < 0
377
|| SMR_B(m, &(drive->GCR_read)) < 0
378
|| SMR_B(m, &(drive->GCR_write_value)) < 0
379
|| SMR_B_INT(m, &(drive->idling_method)) < 0
380
|| SMR_B_INT(m, &(drive->parallel_cable)) < 0
381
|| SMR_B_INT(m, &(drive->read_only)) < 0
382
|| SMR_DW(m, &rotation_table_ptr[i]) < 0
383
|| SMR_DW_UINT(m, &(drive->type)) < 0
385
|| SMR_DW_UL(m, &(drive->snap_accum)) < 0
386
|| SMR_DW(m, &(drive->snap_rotation_last_clk)) < 0
387
|| SMR_DW_INT(m, &(drive->snap_bit_counter)) < 0
388
|| SMR_DW_INT(m, &(drive->snap_zero_count)) < 0
389
|| SMR_W_INT(m, &(drive->snap_last_read_data)) < 0
390
|| SMR_B(m, &(drive->snap_last_write_data)) < 0
391
|| SMR_DW_INT(m, &(drive->snap_seed)) < 0
393
snapshot_module_close(m);
397
/* Partially read 1.2 snapshots */
398
} else if (major_version == 1 && minor_version == 2) {
401
|| SMR_DW(m, &(attach_clk[i])) < 0
402
|| SMR_B_INT(m, (int *)&(drive->byte_ready_level)) < 0
403
|| SMR_B_INT(m, &(drive->clock_frequency)) < 0
404
|| SMR_W_INT(m, &half_track[i]) < 0
405
|| SMR_DW(m, &(detach_clk[i])) < 0
406
|| SMR_B(m, (BYTE *)&dummy) < 0
407
|| SMR_B(m, (BYTE *)&dummy) < 0
408
|| SMR_B_INT(m, &(drive->extend_image_policy)) < 0
409
|| SMR_DW_UINT(m, &(drive->GCR_head_offset)) < 0
410
|| SMR_B(m, &(drive->GCR_read)) < 0
411
|| SMR_B(m, &(drive->GCR_write_value)) < 0
412
|| SMR_B_INT(m, &(drive->idling_method)) < 0
413
|| SMR_B_INT(m, &(drive->parallel_cable)) < 0
414
|| SMR_B_INT(m, &(drive->read_only)) < 0
415
|| SMR_DW(m, &rotation_table_ptr[i]) < 0
416
|| SMR_DW_UINT(m, &(drive->type)) < 0
418
|| SMR_DW_UL(m, &(drive->snap_accum)) < 0
419
|| SMR_DW(m, &(drive->snap_rotation_last_clk)) < 0
420
|| SMR_DW_INT(m, &(drive->snap_bit_counter)) < 0
421
|| SMR_DW_INT(m, &(drive->snap_zero_count)) < 0
422
|| SMR_W_INT(m, &(drive->snap_last_read_data)) < 0
423
|| SMR_B(m, &(drive->snap_last_write_data)) < 0
424
|| SMR_DW_INT(m, &(drive->snap_seed)) < 0
425
|| SMR_DW(m, &(drive->snap_speed_zone)) < 0
426
|| SMR_DW(m, &(drive->snap_ue7_dcba)) < 0
427
|| SMR_DW(m, &(drive->snap_ue7_counter)) < 0
428
|| SMR_DW(m, &(drive->snap_uf4_counter)) < 0
429
|| SMR_DW(m, &(drive->snap_fr_randcount)) < 0
430
|| SMR_DW(m, &(drive->snap_filter_counter)) < 0
431
|| SMR_DW(m, &(drive->snap_filter_state)) < 0
432
|| SMR_DW(m, &(drive->snap_filter_last_state)) < 0
433
|| SMR_DW(m, &(drive->snap_write_flux)) < 0
434
|| SMR_DW(m, &(drive->snap_PulseHeadPosition)) < 0
435
|| SMR_DW(m, &(drive->snap_xorShift32)) < 0
437
snapshot_module_close(m);
441
} else if (major_version == 1 && minor_version == 3) {
444
|| SMR_DW(m, &(attach_clk[i])) < 0
445
|| SMR_B_INT(m, (int *)&(drive->byte_ready_level)) < 0
446
|| SMR_B_INT(m, &(drive->clock_frequency)) < 0
447
|| SMR_W_INT(m, &half_track[i]) < 0
448
|| SMR_DW(m, &(detach_clk[i])) < 0
449
|| SMR_B(m, (BYTE *)&dummy) < 0
450
|| SMR_B(m, (BYTE *)&dummy) < 0
451
|| SMR_B_INT(m, &(drive->extend_image_policy)) < 0
452
|| SMR_DW_UINT(m, &(drive->GCR_head_offset)) < 0
453
|| SMR_B(m, &(drive->GCR_read)) < 0
454
|| SMR_B(m, &(drive->GCR_write_value)) < 0
455
|| SMR_B_INT(m, &(drive->idling_method)) < 0
456
|| SMR_B_INT(m, &(drive->parallel_cable)) < 0
457
|| SMR_B_INT(m, &(drive->read_only)) < 0
458
|| SMR_DW(m, &rotation_table_ptr[i]) < 0
459
|| SMR_DW_UINT(m, &(drive->type)) < 0
461
|| SMR_DW_UL(m, &(drive->snap_accum)) < 0
462
|| SMR_DW(m, &(drive->snap_rotation_last_clk)) < 0
463
|| SMR_DW_INT(m, &(drive->snap_bit_counter)) < 0
464
|| SMR_DW_INT(m, &(drive->snap_zero_count)) < 0
465
|| SMR_W_INT(m, &(drive->snap_last_read_data)) < 0
466
|| SMR_B(m, &(drive->snap_last_write_data)) < 0
467
|| SMR_DW_INT(m, &(drive->snap_seed)) < 0
468
|| SMR_DW(m, &(drive->snap_speed_zone)) < 0
469
|| SMR_DW(m, &(drive->snap_ue7_dcba)) < 0
470
|| SMR_DW(m, &(drive->snap_ue7_counter)) < 0
471
|| SMR_DW(m, &(drive->snap_uf4_counter)) < 0
472
|| SMR_DW(m, &(drive->snap_fr_randcount)) < 0
473
|| SMR_DW(m, &(drive->snap_filter_counter)) < 0
474
|| SMR_DW(m, &(drive->snap_filter_state)) < 0
475
|| SMR_DW(m, &(drive->snap_filter_last_state)) < 0
476
|| SMR_DW(m, &(drive->snap_write_flux)) < 0
477
|| SMR_DW(m, &(drive->snap_PulseHeadPosition)) < 0
478
|| SMR_DW(m, &(drive->snap_xorShift32)) < 0
479
|| SMR_DW(m, &(drive->snap_so_delay)) < 0
481
snapshot_module_close(m);
322
488
|| SMR_DW(m, &(attach_clk[i])) < 0
323
489
|| SMR_B_INT(m, (int *)&(drive->byte_ready_level)) < 0
324
490
|| SMR_B_INT(m, &(drive->clock_frequency)) < 0
325
|| SMR_W_INT(m, &(drive->current_half_track)) < 0
491
|| SMR_W_INT(m, &half_track[i]) < 0
326
492
|| SMR_DW(m, &(detach_clk[i])) < 0
327
|| SMR_B(m, &(drive->diskID1)) < 0
328
|| SMR_B(m, &(drive->diskID2)) < 0
493
|| SMR_B(m, (BYTE *)&dummy) < 0
494
|| SMR_B(m, (BYTE *)&dummy) < 0
329
495
|| SMR_B_INT(m, &(drive->extend_image_policy)) < 0
330
496
|| SMR_DW_UINT(m, &(drive->GCR_head_offset)) < 0
331
497
|| SMR_B(m, &(drive->GCR_read)) < 0
343
509
|| SMR_W_INT(m, &(drive->snap_last_read_data)) < 0
344
510
|| SMR_B(m, &(drive->snap_last_write_data)) < 0
345
511
|| SMR_DW_INT(m, &(drive->snap_seed)) < 0
512
|| SMR_DW(m, &(drive->snap_speed_zone)) < 0
513
|| SMR_DW(m, &(drive->snap_ue7_dcba)) < 0
514
|| SMR_DW(m, &(drive->snap_ue7_counter)) < 0
515
|| SMR_DW(m, &(drive->snap_uf4_counter)) < 0
516
|| SMR_DW(m, &(drive->snap_fr_randcount)) < 0
517
|| SMR_DW(m, &(drive->snap_filter_counter)) < 0
518
|| SMR_DW(m, &(drive->snap_filter_state)) < 0
519
|| SMR_DW(m, &(drive->snap_filter_last_state)) < 0
520
|| SMR_DW(m, &(drive->snap_write_flux)) < 0
521
|| SMR_DW(m, &(drive->snap_PulseHeadPosition)) < 0
522
|| SMR_DW(m, &(drive->snap_xorShift32)) < 0
523
|| SMR_DW(m, &(drive->snap_so_delay)) < 0
524
|| SMR_DW(m, &(drive->snap_cycle_index)) < 0
525
|| SMR_DW(m, &(drive->snap_ref_advance)) < 0
526
|| SMR_DW(m, &(drive->snap_req_ref_cycles)) < 0
347
528
snapshot_module_close(m);
353
534
/* this one is new, so don't test so stay compatible with old snapshots */
354
535
for (i = 0; i < 2; i++) {
355
536
drive = drive_context[i]->drive;
356
537
SMR_DW(m, &(attach_detach_clk[i]));
359
540
/* these are even newer */
360
541
for (i = 0; i < 2; i++) {
361
542
drive = drive_context[i]->drive;
362
543
SMR_B_INT(m, (int *)&(drive->byte_ready_edge));
363
544
SMR_B_INT(m, (int *)&(drive->byte_ready_active));
366
547
snapshot_module_close(m);
369
550
rotation_table_set(rotation_table_ptr);
371
for (i = 0; i < 2; i++) {
372
drive = drive_context[i]->drive;
373
drive->GCR_track_start_ptr = (drive->gcr->data
374
+ ((drive->current_half_track / 2 - 1)
375
* NUM_MAX_BYTES_TRACK));
376
if (drive->type != DRIVE_TYPE_1570
377
&& drive->type != DRIVE_TYPE_1571
378
&& drive->type != DRIVE_TYPE_1571CR) {
379
if (drive->type == DRIVE_TYPE_1581) {
380
resources_set_int("MachineVideoStandard", sync_factor);
383
resources_set_int("MachineVideoStandard", sync_factor);
388
552
drive = drive_context[0]->drive;
389
553
switch (drive->type) {
390
554
case DRIVE_TYPE_1541:
449
617
/* Clear parallel cable before undumping parallel port values. */
450
parallel_cable_drive_write(0xff, PARALLEL_WRITE, 0);
451
parallel_cable_drive_write(0xff, PARALLEL_WRITE, 1);
618
for (i = 0; i < DRIVE_PC_NUM; i++) {
619
parallel_cable_drive_write(i, 0xff, PARALLEL_WRITE, 0);
620
parallel_cable_drive_write(i, 0xff, PARALLEL_WRITE, 1);
453
623
for (i = 0; i < 2; i++) {
454
624
drive = drive_context[i]->drive;
455
625
if (drive->enable) {
456
if (drivecpu_snapshot_read_module(drive_context[i], s) < 0)
626
if (drive->type == DRIVE_TYPE_2000 || drive->type == DRIVE_TYPE_4000) {
627
if (drivecpu65c02_snapshot_read_module(drive_context[i], s) < 0)
630
if (drivecpu_snapshot_read_module(drive_context[i], s) < 0)
458
633
if (machine_drive_snapshot_read(drive_context[i], s) < 0)
463
638
if (drive_snapshot_read_image_module(s, 0) < 0
464
|| drive_snapshot_read_gcrimage_module(s, 0) < 0)
639
|| drive_snapshot_read_gcrimage_module(s, 0) < 0
640
|| drive_snapshot_read_p64image_module(s, 0) < 0) {
466
643
if (drive_snapshot_read_image_module(s, 1) < 0
467
|| drive_snapshot_read_gcrimage_module(s, 1) < 0)
469
if (drive_snapshot_read_rom_module(s, 0) < 0)
471
if (drive_snapshot_read_rom_module(s, 1) < 0)
474
for (i = 0; i < 2; i++)
475
drive_current_track_size_set(drive_context[i]->drive);
644
|| drive_snapshot_read_gcrimage_module(s, 1) < 0
645
|| drive_snapshot_read_p64image_module(s, 1) < 0) {
648
if (driverom_snapshot_read(s, drive_context[0]->drive) < 0) {
651
if (driverom_snapshot_read(s, drive_context[1]->drive) < 0) {
477
655
for (i = 0; i < 2; i++) {
478
656
drive = drive_context[i]->drive;
761
if (major_version > GCRIMAGE_SNAP_MAJOR
762
|| minor_version > GCRIMAGE_SNAP_MINOR) {
959
if (major_version != GCRIMAGE_SNAP_MAJOR
960
|| minor_version != GCRIMAGE_SNAP_MINOR) {
763
961
log_error(drive_snapshot_log,
764
"Snapshot module version (%d.%d) newer than %d.%d.",
765
major_version, minor_version,
766
GCRIMAGE_SNAP_MAJOR, GCRIMAGE_SNAP_MINOR);
962
"Snapshot module version (%d.%d) not supported.",
963
major_version, minor_version);
964
snapshot_module_close(m);
769
tmpbuf = lib_malloc(MAX_TRACKS_1571 * 4);
772
|| SMR_BA(m, drive->gcr->data,
773
sizeof(drive->gcr->data)) < 0
774
|| SMR_BA(m, drive->gcr->speed_zone,
775
sizeof(drive->gcr->speed_zone)) < 0
776
|| SMR_BA(m, tmpbuf, MAX_TRACKS_1571 * 4) < 0) {
779
snapshot_module_close(m);
970
|| SMR_DW(m, &num_half_tracks) < 0
971
|| num_half_tracks > MAX_GCR_TRACKS) {
972
snapshot_module_close(m);
976
for (i = 0; i < num_half_tracks; i++) {
978
if (SMR_DW(m, &track_size) < 0
979
|| track_size > NUM_MAX_MEM_BYTES_TRACK) {
980
snapshot_module_close(m);
985
if (drive->gcr->tracks[i].data == NULL) {
986
drive->gcr->tracks[i].data = lib_calloc(1, track_size);
987
} else if (drive->gcr->tracks[i].size != track_size) {
988
drive->gcr->tracks[i].data = lib_realloc(drive->gcr->tracks[i].data, track_size);
990
memset(drive->gcr->tracks[i].data, 0, track_size);
992
if (drive->gcr->tracks[i].data) {
993
lib_free(drive->gcr->tracks[i].data);
994
drive->gcr->tracks[i].data = NULL;
997
data = drive->gcr->tracks[i].data;
998
drive->gcr->tracks[i].size = track_size;
1000
if (track_size && SMR_BA(m, data, track_size) < 0) {
1001
snapshot_module_close(m);
1005
for (; i < MAX_GCR_TRACKS; i++) {
1006
if (drive->gcr->tracks[i].data) {
1007
lib_free(drive->gcr->tracks[i].data);
1008
drive->gcr->tracks[i].data = NULL;
1009
drive->gcr->tracks[i].size = 0;
784
1012
snapshot_module_close(m);
787
for (i = 0; i < MAX_TRACKS_1571; i++)
788
drive->gcr->track_size[i] = tmpbuf[i * 4] + (tmpbuf[i * 4 + 1] << 8)
789
+ (tmpbuf[i * 4 + 2] << 16)
790
+ (tmpbuf[i * 4 + 3] << 24);
794
1014
drive->GCR_image_loaded = 1;
1015
drive->complicated_image_loaded = 1; /* TODO: verify if it's really like this */
795
1016
drive->image = NULL;
800
1021
/* -------------------------------------------------------------------- */
802
#define ROM_SNAP_MAJOR 1
803
#define ROM_SNAP_MINOR 0
805
static int drive_snapshot_write_rom_module(snapshot_t *s, unsigned int dnr)
1022
/* read/write P64 disk image snapshot module */
1024
#define P64IMAGE_SNAP_MAJOR 1
1025
#define P64IMAGE_SNAP_MINOR 0
1027
static int drive_snapshot_write_p64image_module(snapshot_t *s, unsigned int dnr)
807
1029
char snap_module_name[10];
808
1030
snapshot_module_t *m;
1032
TP64MemoryStream P64MemoryStreamInstance;
813
1035
drive = drive_context[dnr]->drive;
815
sprintf(snap_module_name, "DRIVEROM%i", dnr);
817
m = snapshot_module_create(s, snap_module_name, ROM_SNAP_MAJOR,
822
switch (drive->type) {
823
case DRIVE_TYPE_1541:
824
base = &(drive->rom[0x4000]);
825
len = DRIVE_ROM1541_SIZE;
827
case DRIVE_TYPE_1541II:
828
base = &(drive->rom[0x4000]);
829
len = DRIVE_ROM1541II_SIZE;
831
case DRIVE_TYPE_1551:
833
len = DRIVE_ROM1551_SIZE;
835
case DRIVE_TYPE_1570:
837
len = DRIVE_ROM1571_SIZE;
839
case DRIVE_TYPE_1571:
841
len = DRIVE_ROM1571_SIZE;
843
case DRIVE_TYPE_1571CR:
845
len = DRIVE_ROM1571_SIZE;
847
case DRIVE_TYPE_1581:
849
len = DRIVE_ROM1581_SIZE;
851
case DRIVE_TYPE_2031:
852
base = &(drive->rom[0x4000]);
853
len = DRIVE_ROM2031_SIZE;
855
case DRIVE_TYPE_2040:
856
base = &(drive->rom[DRIVE_ROM_SIZE - DRIVE_ROM2040_SIZE]);
857
len = DRIVE_ROM2040_SIZE;
859
case DRIVE_TYPE_3040:
860
base = &(drive->rom[DRIVE_ROM_SIZE - DRIVE_ROM3040_SIZE]);
861
len = DRIVE_ROM3040_SIZE;
863
case DRIVE_TYPE_4040:
864
base = &(drive->rom[DRIVE_ROM_SIZE - DRIVE_ROM4040_SIZE]);
865
len = DRIVE_ROM4040_SIZE;
867
case DRIVE_TYPE_1001:
868
case DRIVE_TYPE_8050:
869
case DRIVE_TYPE_8250:
870
base = &(drive->rom[0x4000]);
871
len = DRIVE_ROM1001_SIZE;
877
if (SMW_BA(m, base, len) < 0) {
879
snapshot_module_close(m);
882
if (snapshot_module_close(m) < 0)
1036
sprintf(snap_module_name, "P64IMAGE%i", dnr);
1038
m = snapshot_module_create(s, snap_module_name, GCRIMAGE_SNAP_MAJOR,
1039
GCRIMAGE_SNAP_MINOR);
1044
P64Image = (void*)drive->p64;
1046
if (P64Image == NULL) {
1048
snapshot_module_close(m);
1053
P64MemoryStreamCreate(&P64MemoryStreamInstance);
1054
P64MemoryStreamClear(&P64MemoryStreamInstance);
1055
if (!P64ImageWriteToStream(P64Image,&P64MemoryStreamInstance)) {
1056
P64MemoryStreamDestroy(&P64MemoryStreamInstance);
1060
if (SMW_DW(m, P64MemoryStreamInstance.Size) < 0 ||
1061
SMW_BA(m, P64MemoryStreamInstance.Data, P64MemoryStreamInstance.Size) < 0) {
1063
snapshot_module_close(m);
1065
P64MemoryStreamDestroy(&P64MemoryStreamInstance);
1069
P64MemoryStreamDestroy(&P64MemoryStreamInstance);
1071
if (snapshot_module_close(m) < 0) {
887
static int drive_snapshot_read_rom_module(snapshot_t *s, unsigned int dnr)
1078
static int drive_snapshot_read_p64image_module(snapshot_t *s, unsigned int dnr)
889
1080
BYTE major_version, minor_version;
890
1081
snapshot_module_t *m;
891
1082
char snap_module_name[10];
1085
TP64MemoryStream P64MemoryStreamInstance;
896
1089
drive = drive_context[dnr]->drive;
898
sprintf(snap_module_name, "DRIVEROM%i", dnr);
1090
sprintf(snap_module_name, "P64IMAGE%i", dnr);
900
1092
m = snapshot_module_open(s, snap_module_name,
901
1093
&major_version, &minor_version);
905
if (major_version > ROM_SNAP_MAJOR || minor_version > ROM_SNAP_MINOR) {
1098
P64Image = (void*)drive->p64;
1100
if (P64Image == NULL) {
1102
snapshot_module_close(m);
1107
if (major_version > P64IMAGE_SNAP_MAJOR
1108
|| minor_version > P64IMAGE_SNAP_MINOR) {
906
1109
log_error(drive_snapshot_log,
907
1110
"Snapshot module version (%d.%d) newer than %d.%d.",
908
1111
major_version, minor_version,
909
ROM_SNAP_MAJOR, ROM_SNAP_MINOR);
912
switch (drive->type) {
913
case DRIVE_TYPE_1541:
914
base = &(drive->rom[0x4000]);
915
len = DRIVE_ROM1541_SIZE;
917
case DRIVE_TYPE_1541II:
918
base = &(drive->rom[0x4000]);
919
len = DRIVE_ROM1541II_SIZE;
921
case DRIVE_TYPE_1551:
923
len = DRIVE_ROM1551_SIZE;
925
case DRIVE_TYPE_1570:
927
len = DRIVE_ROM1571_SIZE;
929
case DRIVE_TYPE_1571:
931
len = DRIVE_ROM1571_SIZE;
933
case DRIVE_TYPE_1571CR:
935
len = DRIVE_ROM1571_SIZE;
937
case DRIVE_TYPE_1581:
939
len = DRIVE_ROM1581_SIZE;
941
case DRIVE_TYPE_2031:
942
base = &(drive->rom[0x4000]);
943
len = DRIVE_ROM2031_SIZE;
945
case DRIVE_TYPE_2040:
946
base = &(drive->rom[DRIVE_ROM_SIZE - DRIVE_ROM2040_SIZE]);
947
len = DRIVE_ROM2040_SIZE;
949
case DRIVE_TYPE_3040:
950
base = &(drive->rom[DRIVE_ROM_SIZE - DRIVE_ROM3040_SIZE]);
951
len = DRIVE_ROM3040_SIZE;
953
case DRIVE_TYPE_4040:
954
base = &(drive->rom[DRIVE_ROM_SIZE - DRIVE_ROM4040_SIZE]);
955
len = DRIVE_ROM4040_SIZE;
957
case DRIVE_TYPE_1001:
958
case DRIVE_TYPE_8050:
959
case DRIVE_TYPE_8250:
960
base = &(drive->rom[0x4000]);
961
len = DRIVE_ROM1001_SIZE;
967
if (SMR_BA(m, base, len) < 0) {
969
snapshot_module_close(m);
973
machine_drive_rom_do_checksum(dnr);
1112
P64IMAGE_SNAP_MAJOR, P64IMAGE_SNAP_MINOR);
1115
if (SMR_DW(m, &size) < 0) {
1117
snapshot_module_close(m);
1122
tmpbuf = lib_malloc(size);
1124
if (SMR_BA(m, tmpbuf, size) < 0) {
1126
snapshot_module_close(m);
1132
P64MemoryStreamCreate(&P64MemoryStreamInstance);
1133
P64MemoryStreamClear(&P64MemoryStreamInstance);
1134
P64MemoryStreamWrite(&P64MemoryStreamInstance,tmpbuf,size);
1135
P64MemoryStreamSeek(&P64MemoryStreamInstance,0);
1136
if (!P64ImageReadFromStream(P64Image,&P64MemoryStreamInstance)) {
1138
snapshot_module_close(m);
1141
P64MemoryStreamDestroy(&P64MemoryStreamInstance);
1145
P64MemoryStreamDestroy(&P64MemoryStreamInstance);
975
1147
snapshot_module_close(m);
1152
drive->P64_image_loaded = 1;
1153
drive->complicated_image_loaded = 1;
1154
drive->image = NULL;