src/mess/machine/upd765.c
| r8639 | r8640 | |
| 236 | 236 | fdc->FDC_main &= ~0x080; |
| 237 | 237 | } |
| 238 | 238 | |
| 239 | static int upd765_get_rdy(running_device *device) |
| 240 | { |
| 241 | upd765_t *fdc = get_safe_token(device); |
| 242 | |
| 243 | if (fdc->rdy_pin == UPD765_RDY_PIN_CONNECTED) |
| 244 | { |
| 245 | running_device *img = current_image(device); |
| 246 | return floppy_drive_get_flag_state(img, FLOPPY_DRIVE_READY); |
| 247 | } |
| 248 | else |
| 249 | return 1; |
| 250 | } |
| 251 | |
| 239 | 252 | static void upd765_seek_complete(running_device *device) |
| 240 | 253 | { |
| 241 | 254 | /* tested on Amstrad CPC */ |
| r8639 | r8640 | |
| 299 | 312 | fdc->upd765_status[0] = 0x20; |
| 300 | 313 | |
| 301 | 314 | /* drive ready? */ |
| 302 | | if (img != NULL && floppy_drive_get_flag_state(img, FLOPPY_DRIVE_READY)) |
| 315 | if (img != NULL && upd765_get_rdy(device)) |
| 303 | 316 | { |
| 304 | 317 | /* recalibrate? */ |
| 305 | 318 | if (fdc->upd765_flags & UPD765_SEEK_OPERATION_IS_RECALIBRATE) |
| r8639 | r8640 | |
| 496 | 509 | fdc->ncn = 0; |
| 497 | 510 | |
| 498 | 511 | /* if drive is already at track 0, or drive is not ready */ |
| 499 | | if (img == NULL || floppy_tk00_r(img) == CLEAR_LINE || |
| 500 | | (!floppy_drive_get_flag_state(img, FLOPPY_DRIVE_READY)) |
| 501 | | ) |
| 512 | if (img == NULL || floppy_tk00_r(img) == CLEAR_LINE || (!upd765_get_rdy(device))) |
| 502 | 513 | { |
| 503 | 514 | /* seek completed */ |
| 504 | 515 | // upd765_seek_complete(device); |
| r8639 | r8640 | |
| 551 | 562 | signed_tracks = fdc->ncn - fdc->pcn[fdc->drive]; |
| 552 | 563 | |
| 553 | 564 | /* if no tracks to seek, or drive is not ready, seek is complete */ |
| 554 | | if (img == NULL || (signed_tracks==0) || (!floppy_drive_get_flag_state(img, FLOPPY_DRIVE_READY))) |
| 565 | if (img == NULL || (signed_tracks==0) || (!upd765_get_rdy(device))) |
| 555 | 566 | { |
| 556 | 567 | upd765_seek_complete(device); |
| 557 | 568 | } |
| r8639 | r8640 | |
| 960 | 971 | upd765_t *fdc = get_safe_token(device); |
| 961 | 972 | running_device *img = current_image(device); |
| 962 | 973 | |
| 963 | | if (!(floppy_drive_get_flag_state(img, FLOPPY_DRIVE_READY))) |
| 974 | if (!upd765_get_rdy(device)) |
| 964 | 975 | { |
| 965 | 976 | fdc->upd765_status[0] = 0x0c0 | (1<<4) | fdc->drive | (fdc->side<<2); |
| 966 | 977 | fdc->upd765_status[1] = 0x00; |
| r8639 | r8640 | |
| 1152 | 1163 | static void upd765_write_data(running_device *device) |
| 1153 | 1164 | { |
| 1154 | 1165 | upd765_t *fdc = get_safe_token(device); |
| 1155 | | if (!(floppy_drive_get_flag_state(current_image(device), FLOPPY_DRIVE_READY))) |
| 1166 | if (!upd765_get_rdy(device)) |
| 1156 | 1167 | { |
| 1157 | 1168 | fdc->upd765_status[0] = 0x0c0 | (1<<4) | fdc->drive | (fdc->side<<2); |
| 1158 | 1169 | fdc->upd765_status[1] = 0x00; |
| r8639 | r8640 | |
| 1879 | 1890 | fdc->upd765_status[3] |= !floppy_tk00_r(img) << 4; |
| 1880 | 1891 | fdc->upd765_status[3] |= !floppy_wpt_r(img) << 6; |
| 1881 | 1892 | |
| 1882 | | if (floppy_drive_get_flag_state(img, FLOPPY_DRIVE_READY)) |
| 1893 | if (upd765_get_rdy(device)) |
| 1883 | 1894 | { |
| 1884 | 1895 | fdc->upd765_status[3] |= 0x20; |
| 1885 | 1896 | } |
| r8639 | r8640 | |
| 1909 | 1920 | fdc->upd765_status[2] = 0; |
| 1910 | 1921 | |
| 1911 | 1922 | /* drive ready? */ |
| 1912 | | if (floppy_drive_get_flag_state(img, FLOPPY_DRIVE_READY)) |
| 1923 | if (upd765_get_rdy(device)) |
| 1913 | 1924 | { |
| 1914 | 1925 | /* is disk inserted? */ |
| 1915 | 1926 | device_image_interface *image = dynamic_cast<device_image_interface *>( img); |