Hardware-Simulator-MIX
view release on metacpan or search on metacpan
lib/Hardware/Simulator/MIX.pm view on Meta::CPAN
# DIV requires 10 additional time units
$self->{time} += 10;
return 1;
}
# Usage: $self->wait_until_device_ready($devnum)
#
# Used only before IN/OUT operations.
#
# If the device is busy, that is, the current time - last started < delay,
# increase the current time, so that the device would be ready
sub wait_until_device_ready
{
my ($self, $devnum) = @_;
return if $devnum < 0 || $devnum > 19;
my $devstat = @{$self->{devstat}}[$devnum];
my $laststarted = $devstat->{laststarted};
# See whether the device is still busy
if ($self->{time} - $laststarted < $devstat->{delay})
{
# advance the current system time to the point
# that the device would be ready
$self->{time} = $laststarted + $devstat->{delay};
}
}
sub X_INPUT {
my ($self, $c, $f, $r, $l, $i, $a, $m) = @_;
lib/Hardware/Simulator/MIX.pm view on Meta::CPAN
$self->set_disk_pos($f);
} elsif ($f == U_PAPERTAPE) {
$self->rewind_paper_tape;
} else {
$self->{status} = MIX_ERROR;
$self->{message} = "invalid ioc for device(#$f)";
}
return 1;
}
# Jump when device busy: always no busy
sub X_JBUS {
my ($self, $c, $f, $r, $l, $i, $a, $m) = @_;
return 1;
}
sub X_JMP_COND {
my ($self, $c, $f, $r, $l, $i, $a, $m) = @_;
return 0 if $f > 9;
my $ok = 1;
( run in 0.232 second using v1.01-cache-2.11-cpan-87723dcf8b7 )