mirror of
https://github.com/TomHarte/CLK.git
synced 2025-01-13 22:32:03 +00:00
Increased logging by quite a distance and made an attempt once again to allow the processor some time to supply the first byte when writing before declaring overrun.
This commit is contained in:
parent
0972f19fc5
commit
7d132f81f7
@ -315,12 +315,12 @@ void i8272::posit_event(int event_type) {
|
|||||||
// values in the internal registers.
|
// values in the internal registers.
|
||||||
index_hole_limit_ = 2;
|
index_hole_limit_ = 2;
|
||||||
set_data_mode(DataMode::Scanning);
|
set_data_mode(DataMode::Scanning);
|
||||||
// printf("Seeking %02x %02x %02x %02x\n", cylinder_, head_, sector_, size_);
|
printf("Seeking %02x %02x %02x %02x\n", cylinder_, head_, sector_, size_);
|
||||||
find_next_sector:
|
find_next_sector:
|
||||||
FIND_HEADER();
|
FIND_HEADER();
|
||||||
if(!index_hole_limit_) {
|
if(!index_hole_limit_) {
|
||||||
// Two index holes have passed wihout finding the header sought.
|
// Two index holes have passed wihout finding the header sought.
|
||||||
// printf("Not found\n");
|
printf("Not found\n");
|
||||||
SetNoData();
|
SetNoData();
|
||||||
goto abort_read_write;
|
goto abort_read_write;
|
||||||
}
|
}
|
||||||
@ -329,17 +329,18 @@ void i8272::posit_event(int event_type) {
|
|||||||
// This implies a CRC error in the header; mark as such but continue.
|
// This implies a CRC error in the header; mark as such but continue.
|
||||||
SetDataError();
|
SetDataError();
|
||||||
}
|
}
|
||||||
// printf("Considering %02x %02x %02x %02x\n", header_[0], header_[1], header_[2], header_[3]);
|
printf("Considering %02x %02x %02x %02x\n", header_[0], header_[1], header_[2], header_[3]);
|
||||||
if(header_[0] != cylinder_ || header_[1] != head_ || header_[2] != sector_ || header_[3] != size_) goto find_next_sector;
|
if(header_[0] != cylinder_ || header_[1] != head_ || header_[2] != sector_ || header_[3] != size_) goto find_next_sector;
|
||||||
|
|
||||||
// Branch to whatever is supposed to happen next
|
// Branch to whatever is supposed to happen next
|
||||||
// printf("Proceeding\n");
|
printf("Proceeding\n");
|
||||||
switch(command_[0] & 0x1f) {
|
switch(command_[0] & 0x1f) {
|
||||||
case 0x06: // read data
|
case 0x06: // read data
|
||||||
case 0x0c: // read deleted data
|
case 0x0c: // read deleted data
|
||||||
goto read_data_found_header;
|
goto read_data_found_header;
|
||||||
|
|
||||||
case 0x05: // write data
|
case 0x05: // write data
|
||||||
|
goto write_data_found_header;
|
||||||
case 0x09: // write deleted data
|
case 0x09: // write deleted data
|
||||||
goto write_data_found_header;
|
goto write_data_found_header;
|
||||||
}
|
}
|
||||||
@ -351,7 +352,7 @@ void i8272::posit_event(int event_type) {
|
|||||||
|
|
||||||
// Performs the read data or read deleted data command.
|
// Performs the read data or read deleted data command.
|
||||||
read_data:
|
read_data:
|
||||||
printf("Read data [%02x %02x %02x %02x ... %02x]\n", command_[2], command_[3], command_[4], command_[5], command_[8]);
|
printf("Read [deleted] data [%02x %02x %02x %02x ... %02x]\n", command_[2], command_[3], command_[4], command_[5], command_[8]);
|
||||||
if(!dma_mode_) SetNonDMAExecution();
|
if(!dma_mode_) SetNonDMAExecution();
|
||||||
SET_DRIVE_HEAD_MFM();
|
SET_DRIVE_HEAD_MFM();
|
||||||
read_next_data:
|
read_next_data:
|
||||||
@ -419,7 +420,7 @@ void i8272::posit_event(int event_type) {
|
|||||||
goto post_st012chrn;
|
goto post_st012chrn;
|
||||||
|
|
||||||
write_data:
|
write_data:
|
||||||
printf("Write [deleted] data\n");
|
printf("Write [deleted] data [%02x %02x %02x %02x ... %02x]\n", command_[2], command_[3], command_[4], command_[5], command_[8]);
|
||||||
if(!dma_mode_) SetNonDMAExecution();
|
if(!dma_mode_) SetNonDMAExecution();
|
||||||
SET_DRIVE_HEAD_MFM();
|
SET_DRIVE_HEAD_MFM();
|
||||||
|
|
||||||
@ -438,7 +439,6 @@ void i8272::posit_event(int event_type) {
|
|||||||
|
|
||||||
SetDataDirectionFromProcessor();
|
SetDataDirectionFromProcessor();
|
||||||
SetDataRequest();
|
SetDataRequest();
|
||||||
WAIT_FOR_EVENT(Event::DataWritten);
|
|
||||||
expects_input_ = true;
|
expects_input_ = true;
|
||||||
distance_into_section_ = 0;
|
distance_into_section_ = 0;
|
||||||
|
|
||||||
@ -462,6 +462,11 @@ void i8272::posit_event(int event_type) {
|
|||||||
WAIT_FOR_EVENT(Event::DataWritten);
|
WAIT_FOR_EVENT(Event::DataWritten);
|
||||||
end_writing();
|
end_writing();
|
||||||
|
|
||||||
|
if(sector_ != command_[6] && !ControlMark()) {
|
||||||
|
sector_++;
|
||||||
|
goto write_next_data;
|
||||||
|
}
|
||||||
|
|
||||||
goto post_st012chrn;
|
goto post_st012chrn;
|
||||||
|
|
||||||
// Performs the read ID command.
|
// Performs the read ID command.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user