1.1 --- a/pkg/devices/lib/cpm/src/common.cc Thu Apr 04 00:26:27 2024 +0200
1.2 +++ b/pkg/devices/lib/cpm/src/common.cc Thu Apr 04 00:31:36 2024 +0200
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * Common clock functionality.
1.6 *
1.7 - * Copyright (C) 2023 Paul Boddie <paul@boddie.org.uk>
1.8 + * Copyright (C) 2023, 2024 Paul Boddie <paul@boddie.org.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or
1.11 * modify it under the terms of the GNU General Public License as
1.12 @@ -164,10 +164,19 @@
1.13 int
1.14 Control::have_clock(Cpm_regs ®s)
1.15 {
1.16 + bool enabled_via_gate, enabled_via_stop;
1.17 +
1.18 if (_gate.is_defined())
1.19 - return _gate.get_field(regs) == _gate.get_asserted();
1.20 + enabled_via_gate = _gate.get_field(regs) == _gate.get_asserted();
1.21 else
1.22 - return true;
1.23 + enabled_via_gate = true;
1.24 +
1.25 + if (_stop.is_defined())
1.26 + enabled_via_stop = _stop.get_field(regs) == _stop.get_asserted();
1.27 + else
1.28 + enabled_via_stop = true;
1.29 +
1.30 + return enabled_via_gate && enabled_via_stop;
1.31 }
1.32
1.33 void
1.34 @@ -175,6 +184,9 @@
1.35 {
1.36 if (_gate.is_defined())
1.37 _gate.set_field(regs, _gate.get_asserted());
1.38 +
1.39 + if (_stop.is_defined())
1.40 + _stop.set_field(regs, _stop.get_asserted());
1.41 }
1.42
1.43 void
1.44 @@ -182,6 +194,9 @@
1.45 {
1.46 if (_gate.is_defined())
1.47 _gate.set_field(regs, _gate.get_deasserted());
1.48 +
1.49 + if (_stop.is_defined())
1.50 + _stop.set_field(regs, _stop.get_deasserted());
1.51 }
1.52
1.53 void