From 91d7affc233a97da68f886b663f440399c3a0037 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Wed, 23 Apr 2025 01:31:43 +0200 Subject: [PATCH] kout --- arch/serial.cc | 15 +++++++++------ device/serialstream.cc | 5 ++++- device/serialstream.h | 3 +++ device/textstream.cc | 3 --- main.cc | 39 +++++++++++++++++++++++++++------------ object/stringbuffer.cc | 6 +++++- tools/qemu.mk | 2 +- 7 files changed, 49 insertions(+), 24 deletions(-) diff --git a/arch/serial.cc b/arch/serial.cc index 2a6b2bc..8b7e5df 100644 --- a/arch/serial.cc +++ b/arch/serial.cc @@ -40,10 +40,13 @@ char Serial::readReg(RegisterIndex reg) { } int Serial::write(char out) { - // TODO: Implement - if(readReg(LINE_STATUS_REGISTER) & TRANSMITTER_EMPTY){ - writeReg(TRANSMIT_BUFFER_REGISTER, out); - return out; - } - return -1; + //TODO fix behavior when \r\n ist actually sent + if(out == '\n') + write('\r'); + + if(readReg(LINE_STATUS_REGISTER) & TRANSMITTER_EMPTY){ + writeReg(TRANSMIT_BUFFER_REGISTER, out); + return out; + } + return -1; } diff --git a/device/serialstream.cc b/device/serialstream.cc index bb029f1..6d3f7e9 100644 --- a/device/serialstream.cc +++ b/device/serialstream.cc @@ -5,8 +5,11 @@ SerialStream::SerialStream(ComPort port, BaudRate baud_rate, DataBits data_bits, StopBits stop_bits, Parity parity) :Serial(port, baud_rate, data_bits, stop_bits, parity) {} +SerialStream kout = SerialStream(); + void SerialStream::flush() { - print(buffer, strlen(buffer)); + print(buffer, pos); + pos = 0; } // https://stackoverflow.com/questions/3440726/what-is-the-proper-way-of-implementing-a-good-itoa-function diff --git a/device/serialstream.h b/device/serialstream.h index 83450ee..5e1122b 100644 --- a/device/serialstream.h +++ b/device/serialstream.h @@ -141,3 +141,6 @@ class SerialStream : public OutputStream, public Serial { */ void print(char* str, int length); }; + +extern SerialStream kout; + diff --git a/device/textstream.cc b/device/textstream.cc index b7dd125..0a210d3 100644 --- a/device/textstream.cc +++ b/device/textstream.cc @@ -15,7 +15,4 @@ TextStream::TextStream(unsigned from_col, void TextStream::flush() { print(buffer,pos); pos = 0; - - - } diff --git a/main.cc b/main.cc index a6c23e7..37e36d6 100644 --- a/main.cc +++ b/main.cc @@ -38,18 +38,33 @@ extern "C" int main() { //Serial s = Serial(); //s.write('a'); - // test SerialStream - SerialStream ss = SerialStream(); - ss.print("test", 4); - ss.setAttribute(SerialStream::UNDERSCORE); - ss.print("test", 4); - ss.setAttribute(SerialStream::RESET); - ss.setForeground(SerialStream::MAGENTA); - ss.print("test", 4); - ss.setBackground(SerialStream::CYAN); - ss.print("test", 4); - ss.setPos(10, 10); - ss.print("test", 4); + //// test SerialStream + //SerialStream ss = SerialStream(); + //ss.print("test", 4); + //ss.setAttribute(SerialStream::UNDERSCORE); + //ss.print("test", 4); + //ss.setAttribute(SerialStream::RESET); + //ss.setForeground(SerialStream::MAGENTA); + //ss.print("test", 4); + //ss.setBackground(SerialStream::CYAN); + //ss.print("test", 4); + //ss.setPos(10, 10); + //ss.print("test", 4); + + kout << "Test -> " << endl; + kout << "bool: " << true << " -> true" << endl; + kout << "zero: " << 0 << " -> 0" << endl; + kout << "binary: " << bin << 42 << dec << " -> 0b101010" << endl; + kout << "octal: " << oct << 42 << dec << " -> 052" << endl; + kout << "hex: " << hex << 42 << dec << " -> 0x2a" << endl; + kout << "uint64_t max: " << ~((uint64_t)0) << " -> 18446744073709551615" << endl; + kout << "int64_t max: " << ~(1ll<<63) << " -> 9223372036854775807" << endl; + kout << "int64_t min: " << (1ll<<63) << " -> -9223372036854775808" << endl; + kout << "some int64_t: " << (-1234567890123456789) << " -> -1234567890123456789" << endl; + kout << "some int64_t: " << (1234567890123456789) << " -> 1234567890123456789" << endl; + kout << "pointer: " << reinterpret_cast(1994473406541717165ull) + << " -> 0x1badcafefee1dead" << endl; + kout << "smiley: " << static_cast(1) << endl; /* Start application processors * To avoid unexpected behaviour, make sure that interrupts are not diff --git a/object/stringbuffer.cc b/object/stringbuffer.cc index c0f0903..bbdb312 100644 --- a/object/stringbuffer.cc +++ b/object/stringbuffer.cc @@ -1,3 +1,7 @@ #include "stringbuffer.h" -void Stringbuffer::put(char c) { (void)c; } +void Stringbuffer::put(char c) { + buffer[pos++] = c; + if(pos > 80) + flush(); +} diff --git a/tools/qemu.mk b/tools/qemu.mk index 7526310..af6fbff 100644 --- a/tools/qemu.mk +++ b/tools/qemu.mk @@ -59,7 +59,7 @@ kvm: all # Execute Qemu with activated GDB stub and directly connect GDB to the spawned Qemu. gdb: all - ${VERBOSE} $(GDB) "$(DBGKERNEL)" \ + ${VERBOSE} cgdb -d $(GDB) "$(DBGKERNEL)" \ -ex "set arch $(DBGARCH)" \ -ex "target remote | exec $(QEMU) -gdb stdio $(QEMUKERNEL) -smp $(QEMUCPUS) -S $(QEMUFLAGS) $(DBGFLAGS)"