mirror of
https://github.com/livingcomputermuseum/UniBone.git
synced 2026-05-01 13:57:19 +00:00
Big summer rework:
Interrupt and DMA system now handles multiple levels and multiple devices in parallel Interrupt Register changes synced with INTR transaction DL11 and KW11 clock pass the ZDLDI0 diagnostic. Devices can now be enabled and disabled individually.
This commit is contained in:
@@ -32,9 +32,8 @@
|
||||
#include "device.hpp"
|
||||
#define _PARAMETER_CPP_
|
||||
|
||||
|
||||
parameter_c::parameter_c(parameterized_c *parameterized, string name, string shortname,
|
||||
bool readonly, string unit, string format, string info) {
|
||||
bool readonly, string unit, string format, string info) {
|
||||
this->parameterized = parameterized;
|
||||
this->name = name;
|
||||
this->shortname = shortname;
|
||||
@@ -53,8 +52,7 @@ parameter_c::~parameter_c() {
|
||||
|
||||
// to be implemented in subclass
|
||||
void parameter_c::parse(string text) {
|
||||
throw bad_parameter_parse(
|
||||
"parameter_c::parse(" + text + ") to be implemented in subclass");
|
||||
throw bad_parameter_parse("parameter_c::parse(" + text + ") to be implemented in subclass");
|
||||
}
|
||||
|
||||
// convert to text
|
||||
@@ -74,21 +72,20 @@ parameter_string_c::~parameter_string_c() {
|
||||
}
|
||||
|
||||
void parameter_string_c::set(string new_value) {
|
||||
|
||||
|
||||
if (value == new_value)
|
||||
return ; // call "on_change" only on change
|
||||
this->new_value = new_value ;
|
||||
return; // call "on_change" only on change
|
||||
this->new_value = new_value;
|
||||
// reject parsed value, if device parameter check complains
|
||||
if (parameterized == NULL || parameterized->on_param_changed(this))
|
||||
value = new_value;
|
||||
}
|
||||
|
||||
|
||||
// string parsing is just copying
|
||||
void parameter_string_c::parse(string text) {
|
||||
if (readonly)
|
||||
throw bad_parameter_readonly("Parameter \"" + name + "\" is read-only");
|
||||
set(text) ;
|
||||
set(text);
|
||||
}
|
||||
|
||||
string *parameter_string_c::render() {
|
||||
@@ -96,20 +93,19 @@ string *parameter_string_c::render() {
|
||||
return &printbuffer;
|
||||
}
|
||||
|
||||
parameter_bool_c::parameter_bool_c(parameterized_c *parameterized, string name, string shortname,
|
||||
parameter_bool_c::parameter_bool_c(parameterized_c *parameterized, string name,
|
||||
string shortname,
|
||||
bool readonly, string info) :
|
||||
parameter_c(parameterized, name, shortname, readonly, "", "", info) {
|
||||
value = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void parameter_bool_c::set(bool new_value) {
|
||||
if (value == new_value)
|
||||
return ; // call "on_change" only on change
|
||||
|
||||
return; // call "on_change" only on change
|
||||
|
||||
// reject parsed value, if device parameter check complains
|
||||
this->new_value = new_value ;
|
||||
this->new_value = new_value;
|
||||
if (parameterized == NULL || parameterized->on_param_changed(this))
|
||||
value = new_value;
|
||||
}
|
||||
@@ -130,7 +126,7 @@ void parameter_bool_c::parse(string text) {
|
||||
new_value = false;
|
||||
else
|
||||
throw bad_parameter_parse("Illegal boolean expression \"" + text + "\"");
|
||||
set(new_value) ;
|
||||
set(new_value);
|
||||
}
|
||||
|
||||
string *parameter_bool_c::render() {
|
||||
@@ -150,12 +146,11 @@ parameter_unsigned_c::parameter_unsigned_c(parameterized_c *parameterized, strin
|
||||
value = 0;
|
||||
}
|
||||
|
||||
|
||||
void parameter_unsigned_c::set(unsigned new_value) {
|
||||
if (value == new_value)
|
||||
return ; // call "on_change" only on change
|
||||
|
||||
this->new_value = new_value ;
|
||||
return; // call "on_change" only on change
|
||||
|
||||
this->new_value = new_value;
|
||||
// reject parsed value, if device parameter check complains
|
||||
if (parameterized == NULL || parameterized->on_param_changed(this))
|
||||
value = new_value;
|
||||
@@ -168,12 +163,11 @@ void parameter_unsigned_c::parse(string text) {
|
||||
TRIM_STRING(text);
|
||||
new_value = strtol(text.c_str(), &endptr, base);
|
||||
if (*endptr)
|
||||
throw bad_parameter_parse(
|
||||
"Format error in \"" + text + "\" at \"" + *endptr + "\"");
|
||||
throw bad_parameter_parse("Format error in \"" + text + "\" at \"" + *endptr + "\"");
|
||||
if (new_value & ~BitmaskFromLen32[bitwidth]) //
|
||||
throw bad_parameter_parse(
|
||||
"Number " + to_string(new_value) + " exceeds bitwidth " + to_string(bitwidth));
|
||||
set(new_value) ;
|
||||
set(new_value);
|
||||
}
|
||||
|
||||
string *parameter_unsigned_c::render() {
|
||||
@@ -194,9 +188,9 @@ parameter_unsigned64_c::parameter_unsigned64_c(parameterized_c *parameterized, s
|
||||
|
||||
void parameter_unsigned64_c::set(uint64_t new_value) {
|
||||
if (value == new_value)
|
||||
return ; // call "on_change" only on change
|
||||
|
||||
this->new_value = new_value ;
|
||||
return; // call "on_change" only on change
|
||||
|
||||
this->new_value = new_value;
|
||||
// reject parsed value, if device parameter check complains
|
||||
if (parameterized == NULL || parameterized->on_param_changed(this))
|
||||
value = new_value;
|
||||
@@ -209,12 +203,11 @@ void parameter_unsigned64_c::parse(string text) {
|
||||
TRIM_STRING(text);
|
||||
new_value = strtoll(text.c_str(), &endptr, base);
|
||||
if (*endptr)
|
||||
throw bad_parameter_parse(
|
||||
"Format error in \"" + text + "\" at \"" + *endptr + "\"");
|
||||
throw bad_parameter_parse("Format error in \"" + text + "\" at \"" + *endptr + "\"");
|
||||
if (new_value & ~BitmaskFromLen64[bitwidth]) //
|
||||
throw bad_parameter_parse(
|
||||
"Number " + to_string(new_value) + " exceeds bitwidth " + to_string(bitwidth));
|
||||
set(new_value) ;
|
||||
set(new_value);
|
||||
}
|
||||
|
||||
string *parameter_unsigned64_c::render() {
|
||||
@@ -224,7 +217,6 @@ string *parameter_unsigned64_c::render() {
|
||||
return &printbuffer;
|
||||
}
|
||||
|
||||
|
||||
// add reference to parameter. It will be automatically deleted
|
||||
parameter_c *parameterized_c::param_add(parameter_c *param) {
|
||||
parameter.push_back(param);
|
||||
@@ -247,4 +239,3 @@ parameter_c *parameterized_c::param_by_name(string name) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user