minimal keyboard app

This commit is contained in:
2025-12-03 04:28:54 +01:00
parent 2c911a3c87
commit 63f56ae02c
2 changed files with 43 additions and 37 deletions

View File

@@ -76,7 +76,7 @@ extern "C" int main() {
* Therefore activate the LAPIC timer in level 1/2 after initialization
* (just before schedule())
*/
//LAPIC::Timer::activate();
LAPIC::Timer::activate();
DBG_VERBOSE << "Schedule..." << endl;
// Schedule first app

View File

@@ -9,41 +9,47 @@ extern TextStream kout;
extern Semaphore koutsem;
void KeyboardApplication::action() { // NOLINT
const unsigned line = 10 + 2;
for (unsigned column = 0;; ++column) {
Key key;
{
Guarded g = Guard::enter();
g.vault().keys_sem.p(g.vault());
assert(g.vault().keys.consume(key) && "No key but sem returned!");
}
if (key.valid()) {
if (column >= CGA::COLUMNS - 1) {
column = 0;
koutsem.p(Guard::enter().vault());
for (unsigned offset = 0; offset < 3; offset++) {
for (unsigned column = 0; column < CGA::COLUMNS; ++column) {
CGA::show(column, line + offset, ' ');
}
}
koutsem.v(Guard::enter().vault());
}
koutsem.p(Guard::enter().vault());
kout.setPos(column, line);
kout << static_cast<char>(key.ascii());
kout.flush();
koutsem.v(Guard::enter().vault());
}
for (unsigned offset = 0; offset < 3; offset++) {
{
Guarded g = Guard::enter();
g.vault().bellringer.sleep(g.vault(), 10);
koutsem.p(g.vault());
}
kout.setPos(column, line + offset);
kout << static_cast<char>(key.ascii());
kout.flush();
koutsem.v(Guard::enter().vault());
}
while(1){
char msg[11];
if(read(0, msg, 10))
write(0, msg, 10);
}
//const unsigned line = 10 + 2;
//for (unsigned column = 0;; ++column) {
// Key key;
// {
// Guarded g = Guard::enter();
// g.vault().keys_sem.p(g.vault());
// assert(g.vault().keys.consume(key) && "No key but sem returned!");
// }
// if (key.valid()) {
// if (column >= CGA::COLUMNS - 1) {
// column = 0;
// koutsem.p(Guard::enter().vault());
// for (unsigned offset = 0; offset < 3; offset++) {
// for (unsigned column = 0; column < CGA::COLUMNS; ++column) {
// CGA::show(column, line + offset, ' ');
// }
// }
// koutsem.v(Guard::enter().vault());
// }
// koutsem.p(Guard::enter().vault());
// kout.setPos(column, line);
// kout << static_cast<char>(key.ascii());
// kout.flush();
// koutsem.v(Guard::enter().vault());
// }
// for (unsigned offset = 0; offset < 3; offset++) {
// {
// Guarded g = Guard::enter();
// g.vault().bellringer.sleep(g.vault(), 10);
// koutsem.p(g.vault());
// }
// kout.setPos(column, line + offset);
// kout << static_cast<char>(key.ascii());
// kout.flush();
// koutsem.v(Guard::enter().vault());
// }
//}
}