1. Aufgabe BS 07/08

Anfangsprobleme

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

1. Aufgabe BS 07/08
Hi Leute,

Ich hab’ ein paar Anfangsprobleme bei dieser Aufgabe:

1.) Ich bekomme ständig den Fehler: “undefined Reference to ‘operator new(unsigned int)’”
Also, wenn ich das hier machen will:

index = new IO_Port(0x3d4);
data = new IO_Port(0x3d5);

Kann es sein, dass man zuerst einen “new-Operator” definieren muss? Wenn ich es ohne new-Operator, also ohne Zeiger machen möchte, funktioniert es auch nicht!
Kann mir da mal jemand weiterhelfen?

2.) Ich hab’ noch nicht ganz verstanden, wie man die show-Methode der cgascr-Klasse implementieren soll!
Also wie man den Cursor setzt, ist mir glaub’ ich klar: man rechnet den Offset aus, schiebt den Offset in einen Union. Dann schreibt man erstmal auf’s Port für’s Steuerregister die Nummer des Steuerregisters, also Beispiel ‘14’, und dann auf das Port für’s Datenregister das high-Byte des Unions. Dasselbe für’s Register ‘15’ nur mit low-Byte. Was genau muss ich denn jetzt tun, um noch die Attribut-Werte für das auszugebende Zeichen in den Graphik-karten-speicher ab Adresse ‘0xb3000’ zu schreiben?

Danke für die Hilfe


Warum willst du das denn als Pointer haben?
Warum auf dem Heap?

Mach’s doch einfach als Globale Varbiable oder als Instanzvariable deiner Klasse.


Schau doch einfach mal in keyctrl.h/keyctrl.cc. Dort ist eine mögliche Lösung zu sehen. Ansonsten kannst du die Ports auch als lokale Variable innerhalb einer Methode anlegen:

IO_Port VariablenName(PortNummer);

Vielen Danke für eure schnellen Antworten! Aber ich habe trotzdem noch Probleme.

In keyctrl.h werden die Port als const definiert:

const IO_Port ctrl_port;
const IO_Port data_port;

Soweit klar! Aber wo werden denn die Adressen für die IO_Port-klasse übergeben?
Bzw. falls das nicht implementiert ist, wie krieg’ ich das hin, wenn ich das genauso über
const-variablen machen möchte? Funktioniert bei mir überhaupt nicht!
Der Linker is dauernd nur am meckern…

PS: mit Richie’s Tipp geht es. Aber wie geht es, als const?


Ok, es hat sich erledigt! :blush: Danke


Wie macht ihr das denn mit dem Testen! Zum Beispiel wenn ihr cga_screen testen wollt? Einfach bochs aufrufen und das system-image übergeben bringts ja glaub’ net so wirklich, um konkret Fehler zu finden!

Bin ich eigentlich der einzige, der hier Probleme hat?


bochs-gdb und dann durch die entsprechenden Stellen durchsteppen.
Allerdings hilft Nachdenken oft mehr…


Hi,

zumindest gibt es keinen new-Operator, weil wir ja kein Betriebssystem und keine Laufzeitbibliothek haben, welche sich normalerweise um einen Heap (auf dem per „new“ angelegte Objekte liegen) kuemmern. Es wird im Rahmen von OOStuBS auch nie einen geben (aber evtl. in AOStuBS, was in der OSE-Uebung im SS entwickelt wird). Also muessen alle Objekte statisch angelegt werden, entweder lokal auf dem Stack oder global im Datensegment; das haengt natuerlich von dem Anwendungsfall ab.

const bedeutet, dass das Objekt nicht veraendert werden darf. Speziell bedeutet das auch, dass an diesem Objekt nur Methoden aufgerufen werden duerfen, die wiederum als const deklariert worden sind. Das bedeutet eben, dass sie den Objektzustand nicht veraendern, was wiederum vom Compiler sichergestellt wird.

Es gibt pro Zeichen auf dem 80x25-Bildschirm 2 Bytes: 1 Byte ASCII-Zeichen, 1 Byte entsprechendes Attribut. Die folgen immer abwechselnd ab 0xb8000 (nicht 0xb3000!). Ein kleiner Auszug:

0xb8000 Zeichen des Zeichens der 1. Spalte, 1. Zeile
0xb8001 Attribute des Zeichens der 1. Spalte, 1. Zeile
0xb8002 Zeichen des Zeichens der 2. Spalte, 1. Zeile
0xb8003 Attribute des Zeichens der 2. Spalte, 1. Zeile
[…]

Alles klar?

Gerade die erste Aufgabe laesst sich noch recht gut mit bochs testen, spaeter wird das evtl. nicht mehr so einfach. Wenn du dazu Hilfe brauchst, schreib nochmal konkreter, wo die Probleme liegen.

Ganz sicher nicht. Es gibt sicher noch viele, die nicht schreiben, und ausserdem einige, die noch nicht angefangen haben :].

An dieser Stelle der Aufruf: Wenn es Probleme gibt, schreibt hier oder fragt in der Uebung oder kommt bei Julio oder mir vorbei!

Gruesse und bis morgen/uebermorgen in der Uebung,
-Wanja