trunk/src/mess/machine/64h156.c
| r18360 | r18361 | |
| 394 | 394 | m_buffer_pos(0), |
| 395 | 395 | m_bit_pos(0), |
| 396 | 396 | m_bit_count(0), |
| 397 | | m_stp(-1), |
| 398 | 397 | m_mtr(0), |
| 399 | 398 | m_accl(1), |
| 400 | 399 | m_ds(0), |
| r18360 | r18361 | |
| 450 | 449 | save_item(NAME(m_cycles_until_next_bit)); |
| 451 | 450 | save_item(NAME(m_zero_count)); |
| 452 | 451 | save_item(NAME(m_cycles_until_random_flux)); |
| 453 | | save_item(NAME(m_stp)); |
| 454 | 452 | save_item(NAME(m_mtr)); |
| 455 | 453 | save_item(NAME(m_accl)); |
| 456 | 454 | save_item(NAME(m_ds)); |
| r18360 | r18361 | |
| 656 | 654 | |
| 657 | 655 | void c64h156_device::stp_w(int data) |
| 658 | 656 | { |
| 659 | | if (m_mtr && (m_stp != data)) |
| 657 | if (m_mtr) |
| 660 | 658 | { |
| 661 | | int tracks = 0; |
| 662 | | |
| 663 | | switch (m_stp) |
| 659 | int track = floppy_drive_get_current_track(m_image); |
| 660 | int tracks = (data - track) & 0x03; |
| 661 | |
| 662 | if (tracks == 3) |
| 664 | 663 | { |
| 665 | | case 0: if (data == 1) tracks++; else if (data == 3) tracks--; break; |
| 666 | | case 1: if (data == 2) tracks++; else if (data == 0) tracks--; break; |
| 667 | | case 2: if (data == 3) tracks++; else if (data == 1) tracks--; break; |
| 668 | | case 3: if (data == 0) tracks++; else if (data == 2) tracks--; break; |
| 664 | tracks = -1; |
| 669 | 665 | } |
| 670 | 666 | |
| 671 | | if (tracks != 0) |
| 667 | if (tracks == -1 || tracks == 1) |
| 672 | 668 | { |
| 673 | 669 | // step read/write head |
| 674 | 670 | floppy_drive_seek(m_image, tracks); |
| r18360 | r18361 | |
| 676 | 672 | // read new track data |
| 677 | 673 | read_current_track(); |
| 678 | 674 | } |
| 679 | | |
| 680 | | m_stp = data; |
| 681 | 675 | } |
| 682 | 676 | } |
| 683 | 677 | |