src/mess/machine/c1571.c
| r7327 | r7328 | |
| 11 | 11 | |
| 12 | 12 | TODO: |
| 13 | 13 | |
| 14 | | - autoboot does not work when fast serial is used |
| 15 | | - disk insert routine is not run |
| 14 | - fast serial mode is broken, bytes get skipped |
| 16 | 15 | - 1541/1571 Alignment shows drive speed as 266 rpm, should be 310 |
| 17 | 16 | - CP/M disks |
| 18 | 17 | - power/activity LEDs |
| r7327 | r7328 | |
| 75 | 74 | int byte; /* byte ready */ |
| 76 | 75 | int mode; /* mode (0 = write, 1 = read) */ |
| 77 | 76 | int side; /* disk side select */ |
| 77 | int clock; /* clock speed */ |
| 78 | 78 | |
| 79 | 79 | /* interrupts */ |
| 80 | 80 | int via0_irq; /* VIA #0 interrupt request */ |
| r7327 | r7328 | |
| 182 | 182 | c1571->bit_count = 0; |
| 183 | 183 | byte = 1; |
| 184 | 184 | |
| 185 | | if (!(c1571->data & 0xff)) |
| 185 | c1571->yb = c1571->data & 0xff; |
| 186 | |
| 187 | if (!c1571->yb) |
| 186 | 188 | { |
| 187 | 189 | /* simulate weak bits with randomness */ |
| 188 | | c1571->data = (c1571->data & 0xff00) | (mame_rand(machine) & 0xff); |
| 190 | c1571->yb = mame_rand(machine) & 0xff; |
| 189 | 191 | } |
| 190 | 192 | } |
| 191 | 193 | |
| r7327 | r7328 | |
| 444 | 446 | c1571_t *c1571 = get_safe_token(device->owner); |
| 445 | 447 | |
| 446 | 448 | /* 1/2 MHz */ |
| 447 | | UINT32 clock = BIT(data, 5) ? XTAL_16MHz/8 : XTAL_16MHz/16; |
| 449 | int clock_1_2 = BIT(data, 5); |
| 450 | |
| 451 | if (c1571->clock != clock_1_2) |
| 452 | { |
| 453 | UINT32 clock = clock_1_2 ? XTAL_16MHz/8 : XTAL_16MHz/16; |
| 448 | 454 | |
| 449 | | c1571->cpu->set_clock(clock); |
| 450 | | c1571->cia->set_clock(clock); |
| 451 | | c1571->via0->set_clock(clock); |
| 452 | | c1571->via1->set_clock(clock); |
| 455 | c1571->cpu->set_clock(clock); |
| 456 | c1571->cia->set_clock(clock); |
| 457 | c1571->via0->set_clock(clock); |
| 458 | c1571->via1->set_clock(clock); |
| 453 | 459 | |
| 460 | c1571->clock = clock_1_2; |
| 461 | } |
| 462 | |
| 454 | 463 | /* fast serial direction */ |
| 455 | 464 | c1571->ser_dir = BIT(data, 1); |
| 456 | 465 | iec_data_w(device->owner); |
| r7327 | r7328 | |
| 594 | 603 | |
| 595 | 604 | c1571_t *c1571 = get_safe_token(device->owner); |
| 596 | 605 | |
| 597 | | return c1571->data & 0xff; |
| 606 | return c1571->yb; |
| 598 | 607 | } |
| 599 | 608 | |
| 600 | 609 | static WRITE8_DEVICE_HANDLER( yb_w ) |
| r7327 | r7328 | |
| 613 | 622 | PA7 YB7 |
| 614 | 623 | |
| 615 | 624 | */ |
| 625 | |
| 626 | c1571_t *c1571 = get_safe_token(device->owner); |
| 627 | |
| 628 | c1571->yb = data; |
| 616 | 629 | } |
| 617 | 630 | |
| 618 | 631 | static READ8_DEVICE_HANDLER( via1_pb_r ) |