mirror of
https://github.com/TomHarte/CLK.git
synced 2025-08-08 14:25:05 +00:00
Make an attempt at providing varied sense interrupt statuses.
This commit is contained in:
@@ -114,8 +114,8 @@ class Status {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void end_sense_interrupt_status(int drive) {
|
void end_sense_interrupt_status(int drive, int head) {
|
||||||
status_[0] = uint8_t(drive);
|
status_[0] = uint8_t(drive | (head << 2));
|
||||||
main_status_ &= ~(1 << drive);
|
main_status_ &= ~(1 << drive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -709,7 +709,7 @@ void i8272::posit_event(int event_type) {
|
|||||||
// If a drive was found, return its results. Otherwise return a single 0x80.
|
// If a drive was found, return its results. Otherwise return a single 0x80.
|
||||||
if(found_drive != -1) {
|
if(found_drive != -1) {
|
||||||
drives_[found_drive].phase = Drive::NotSeeking;
|
drives_[found_drive].phase = Drive::NotSeeking;
|
||||||
status_.end_sense_interrupt_status(found_drive);
|
status_.end_sense_interrupt_status(found_drive, 0);
|
||||||
status_.set(Status0::SeekEnded);
|
status_.set(Status0::SeekEnded);
|
||||||
|
|
||||||
result_stack_ = { drives_[found_drive].head_position, status_[0]};
|
result_stack_ = { drives_[found_drive].head_position, status_[0]};
|
||||||
|
@@ -83,8 +83,19 @@ class FloppyController {
|
|||||||
|
|
||||||
case Command::SenseInterruptStatus:
|
case Command::SenseInterruptStatus:
|
||||||
pic_.apply_edge<6>(false);
|
pic_.apply_edge<6>(false);
|
||||||
// results_.serialise(status_, 0);
|
|
||||||
results_.serialise_none();
|
if(interrupting_drives_) {
|
||||||
|
int drive = 3;
|
||||||
|
while(!(interrupting_drives_ & (1 << drive))) {
|
||||||
|
--drive;
|
||||||
|
}
|
||||||
|
interrupting_drives_ &= ~(1 << drive);
|
||||||
|
|
||||||
|
status_.end_sense_interrupt_status(drive, 0);
|
||||||
|
results_.serialise(status_, 10);
|
||||||
|
} else {
|
||||||
|
results_.serialise_none();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,6 +132,7 @@ class FloppyController {
|
|||||||
decoder_.clear();
|
decoder_.clear();
|
||||||
status_.reset();
|
status_.reset();
|
||||||
pic_.apply_edge<6>(true);
|
pic_.apply_edge<6>(true);
|
||||||
|
interrupting_drives_ = 0xf;
|
||||||
|
|
||||||
using MainStatus = Intel::i8272::MainStatus;
|
using MainStatus = Intel::i8272::MainStatus;
|
||||||
status_.set(MainStatus::DataReady, true);
|
status_.set(MainStatus::DataReady, true);
|
||||||
@@ -136,6 +148,7 @@ class FloppyController {
|
|||||||
Intel::i8272::CommandDecoder decoder_;
|
Intel::i8272::CommandDecoder decoder_;
|
||||||
Intel::i8272::Status status_;
|
Intel::i8272::Status status_;
|
||||||
Intel::i8272::Results results_;
|
Intel::i8272::Results results_;
|
||||||
|
int interrupting_drives_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class KeyboardController {
|
class KeyboardController {
|
||||||
|
@@ -62,7 +62,7 @@
|
|||||||
</Testables>
|
</Testables>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
enableASanStackUseAfterReturn = "YES"
|
enableASanStackUseAfterReturn = "YES"
|
||||||
|
Reference in New Issue
Block a user