@@ -1353,9 +1353,16 @@ TIMER_CALLBACK_MEMBER(towns_state::towns_delay_cdda)
1353
1353
towns_cdrom_play_cdda (m_cdrom.target ());
1354
1354
}
1355
1355
1356
+ TIMER_CALLBACK_MEMBER (towns_state::towns_delay_seek)
1357
+ {
1358
+ m_towns_cd.extra_status = 0 ;
1359
+ towns_cd_set_status (0x04 ,0x00 ,0x00 ,0x00 );
1360
+ }
1361
+
1356
1362
void towns_state::towns_cdrom_execute_command (cdrom_image_device* device)
1357
1363
{
1358
1364
towns_cdrom_set_irq (TOWNS_CD_IRQ_MPU,0 ); // TODO: this isn't sufficiently tested
1365
+ m_towns_seek_timer->adjust (attotime::never);
1359
1366
if (!device->exists () && (m_towns_cd.command != 0xa0 ))
1360
1367
{ // No CD in drive
1361
1368
if (m_towns_cd.command & 0x20 )
@@ -1372,8 +1379,9 @@ void towns_state::towns_cdrom_execute_command(cdrom_image_device* device)
1372
1379
case 0x00 : // Seek
1373
1380
if (m_towns_cd.command & 0x20 )
1374
1381
{
1375
- m_towns_cd.extra_status = 1 ;
1382
+ m_towns_cd.extra_status = 0 ;
1376
1383
towns_cd_set_status (0x00 ,0x00 ,0x00 ,0x00 );
1384
+ m_towns_seek_timer->adjust (attotime::from_msec (500 ));
1377
1385
}
1378
1386
LOGMASKED (LOG_CD, " CD: Command 0x00: SEEK\n " );
1379
1387
break ;
@@ -1500,10 +1508,6 @@ uint8_t towns_state::towns_cdrom_r(offs_t offset)
1500
1508
{
1501
1509
switch (m_towns_cd.command & 0x9f )
1502
1510
{
1503
- case 0x00 : // seek
1504
- towns_cd_set_status (0x04 ,0x00 ,0x00 ,0x00 );
1505
- m_towns_cd.extra_status = 0 ;
1506
- break ;
1507
1511
case 0x02 : // read
1508
1512
if (m_towns_cd.extra_status == 2 )
1509
1513
towns_cd_set_status (0x22 ,0x00 ,0x00 ,0x00 );
@@ -2356,13 +2360,117 @@ void towns_state::driver_start()
2356
2360
m_towns_intervaltimer2 = timer_alloc (FUNC (towns_state::intervaltimer2_timeout), this );
2357
2361
m_towns_status_timer = timer_alloc (FUNC (towns_state::towns_cd_status_ready), this );
2358
2362
m_towns_cdda_timer = timer_alloc (FUNC (towns_state::towns_delay_cdda), this );
2363
+ m_towns_seek_timer = timer_alloc (FUNC (towns_state::towns_delay_seek), this );
2359
2364
2360
2365
m_video = towns_video_controller ();
2361
2366
m_towns_cd = towns_cdrom_controller ();
2362
2367
m_towns_cd.status = 0x01 ; // CDROM controller ready
2363
2368
m_towns_cd.buffer_ptr = -1 ;
2364
2369
m_towns_cd.read_timer = timer_alloc (FUNC (towns_state::towns_cdrom_read_byte), this );
2365
2370
2371
+ save_item (NAME (m_ftimer));
2372
+ save_item (NAME (m_freerun_timer));
2373
+ save_item (NAME (m_intervaltimer2_period));
2374
+ save_item (NAME (m_intervaltimer2_irqmask));
2375
+ save_item (NAME (m_intervaltimer2_timeout_flag));
2376
+ save_item (NAME (m_intervaltimer2_timeout_flag2));
2377
+ save_item (NAME (m_nmi_mask));
2378
+ save_item (NAME (m_compat_mode));
2379
+ save_item (NAME (m_towns_system_port));
2380
+ save_item (NAME (m_towns_ankcg_enable));
2381
+ save_item (NAME (m_towns_mainmem_enable));
2382
+ save_item (NAME (m_towns_ram_enable));
2383
+ save_pointer (NAME (m_towns_vram), 0x20000 );
2384
+ save_pointer (NAME (m_towns_gfxvram), 0x80000 );
2385
+ save_pointer (NAME (m_towns_txtvram), 0x20000 );;
2386
+ save_item (NAME (m_towns_selected_drive));
2387
+ save_item (NAME (m_towns_fdc_irq6mask));
2388
+ save_pointer (NAME (m_towns_serial_rom), 256 /8 );
2389
+ save_item (NAME (m_towns_srom_position));
2390
+ save_item (NAME (m_towns_srom_clk));
2391
+ save_item (NAME (m_towns_srom_reset));
2392
+ save_item (NAME (m_towns_rtc_select));
2393
+ save_item (NAME (m_towns_rtc_data));
2394
+ save_item (NAME (m_towns_timer_mask));
2395
+ save_item (NAME (m_towns_kb_status));
2396
+ save_item (NAME (m_towns_kb_irq1_enable));
2397
+ save_item (NAME (m_towns_kb_output)); // key output
2398
+ save_item (NAME (m_towns_kb_extend)); // extended key output
2399
+ save_item (NAME (m_towns_fm_irq_flag));
2400
+ save_item (NAME (m_towns_pcm_irq_flag));
2401
+ save_item (NAME (m_towns_pcm_channel_flag));
2402
+ save_item (NAME (m_towns_pcm_channel_mask));
2403
+ save_item (NAME (m_towns_pad_mask));
2404
+ save_item (NAME (m_towns_volume)); // volume ports
2405
+ save_item (NAME (m_towns_volume_select));
2406
+ save_item (NAME (m_towns_scsi_control));
2407
+ save_item (NAME (m_towns_scsi_status));
2408
+ save_item (NAME (m_towns_spkrdata));
2409
+ save_item (NAME (m_pit_out0));
2410
+ save_item (NAME (m_pit_out1));
2411
+ save_item (NAME (m_pit_out2));
2412
+ save_item (NAME (m_serial_irq_source));
2413
+
2414
+ save_item (NAME (m_kb_prev));
2415
+ save_item (NAME (m_prev_pad_mask));
2416
+ save_item (NAME (m_prev_x));
2417
+ save_item (NAME (m_prev_y));
2418
+ save_item (NAME (m_rtc_d));
2419
+ save_item (NAME (m_rtc_busy));
2420
+ save_item (NAME (m_vram_mask));
2421
+ save_item (NAME (m_vram_mask_addr));
2422
+
2423
+ save_item (STRUCT_MEMBER (m_towns_cd, command));
2424
+ save_item (STRUCT_MEMBER (m_towns_cd, status));
2425
+ save_item (STRUCT_MEMBER (m_towns_cd, cmd_status));
2426
+ save_item (STRUCT_MEMBER (m_towns_cd, cmd_status_ptr));
2427
+ save_item (STRUCT_MEMBER (m_towns_cd, extra_status));
2428
+ save_item (STRUCT_MEMBER (m_towns_cd, parameter));
2429
+ save_item (STRUCT_MEMBER (m_towns_cd, mpu_irq_enable));
2430
+ save_item (STRUCT_MEMBER (m_towns_cd, dma_irq_enable));
2431
+ save_item (STRUCT_MEMBER (m_towns_cd, buffer));
2432
+ save_item (STRUCT_MEMBER (m_towns_cd, buffer_ptr));
2433
+ save_item (STRUCT_MEMBER (m_towns_cd, lba_current));
2434
+ save_item (STRUCT_MEMBER (m_towns_cd, lba_last));
2435
+ save_item (STRUCT_MEMBER (m_towns_cd, cdda_current));
2436
+ save_item (STRUCT_MEMBER (m_towns_cd, cdda_length));
2437
+ save_item (STRUCT_MEMBER (m_towns_cd, software_tx));
2438
+
2439
+ save_item (STRUCT_MEMBER (m_video, towns_vram_wplane));
2440
+ save_item (STRUCT_MEMBER (m_video, towns_vram_rplane));
2441
+ save_item (STRUCT_MEMBER (m_video, towns_vram_page_sel));
2442
+ save_item (STRUCT_MEMBER (m_video, towns_palette_select));
2443
+ save_item (STRUCT_MEMBER (m_video, towns_palette_r));
2444
+ save_item (STRUCT_MEMBER (m_video, towns_palette_g));
2445
+ save_item (STRUCT_MEMBER (m_video, towns_palette_b));
2446
+ save_item (STRUCT_MEMBER (m_video, towns_degipal));
2447
+ save_item (STRUCT_MEMBER (m_video, towns_dpmd_flag));
2448
+ save_item (STRUCT_MEMBER (m_video, towns_crtc_mix));
2449
+ save_item (STRUCT_MEMBER (m_video, towns_crtc_sel));
2450
+ save_item (STRUCT_MEMBER (m_video, towns_crtc_reg));
2451
+ save_item (STRUCT_MEMBER (m_video, towns_video_sel));
2452
+ save_item (STRUCT_MEMBER (m_video, towns_video_reg));
2453
+ save_item (STRUCT_MEMBER (m_video, towns_sprite_sel));
2454
+ save_item (STRUCT_MEMBER (m_video, towns_sprite_reg));
2455
+ save_item (STRUCT_MEMBER (m_video, towns_sprite_flag));
2456
+ save_item (STRUCT_MEMBER (m_video, towns_sprite_page));
2457
+ save_item (STRUCT_MEMBER (m_video, towns_tvram_enable));
2458
+ save_item (STRUCT_MEMBER (m_video, towns_kanji_offset));
2459
+ save_item (STRUCT_MEMBER (m_video, towns_kanji_code_h));
2460
+ save_item (STRUCT_MEMBER (m_video, towns_kanji_code_l));
2461
+ save_item (STRUCT_MEMBER (m_video, towns_display_plane));
2462
+ save_item (STRUCT_MEMBER (m_video, towns_display_page_sel));
2463
+ save_item (STRUCT_MEMBER (m_video, towns_vblank_flag));
2464
+ save_item (STRUCT_MEMBER (m_video, towns_layer_ctrl));
2465
+ save_item (NAME (m_video.towns_crtc_layerscr [0 ].min_x ));
2466
+ save_item (NAME (m_video.towns_crtc_layerscr [0 ].max_x ));
2467
+ save_item (NAME (m_video.towns_crtc_layerscr [0 ].min_y ));
2468
+ save_item (NAME (m_video.towns_crtc_layerscr [0 ].max_y ));
2469
+ save_item (NAME (m_video.towns_crtc_layerscr [1 ].min_x ));
2470
+ save_item (NAME (m_video.towns_crtc_layerscr [1 ].max_x ));
2471
+ save_item (NAME (m_video.towns_crtc_layerscr [1 ].min_y ));
2472
+ save_item (NAME (m_video.towns_crtc_layerscr [1 ].max_y ));
2473
+
2366
2474
save_pointer (m_video.towns_crtc_reg ," CRTC registers" ,32 );
2367
2475
save_pointer (m_video.towns_video_reg ," Video registers" ,2 );
2368
2476
0 commit comments