Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Auf Speicher 0xB8000 zugreifen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
10.03.2013, 14:53 Uhr
Solomon



Guten Tag!

Ich weiß, dass diese Frage etwas komisch klingt, aber: Kann man auf den 0xB8000 Speicher, auch als Videospeicher bekannt, in einem Code zugreifen, und somit eine eigene printf-Funktion machen?

Ich benutze einen Mac und kompiliere meine Codes mit g++. Es kommt, bei dem folgenden Code, zu keiner Fehlermeldung, während des Kompilieren, aber wenn ich es dann ausführen will, kommt "Segmentation fault 11". Ich weiß, dass wenn sowas angezeigt wird, es bedeutet, dass man versucht, auf Speicher zuzugreifen, auf den man nicht zugreifen kann. Aber kann ich das irgendwie umgehen?

Hier der Code:


C++:
#include <iostream>
using namespace std;

int main()
{
    volatile char *videomem = (char*) 0xB8000;
    char msg[4] = "Hey";
    int i;
    for(i = 0; i < 5; i++)
    {
        *videomem++ = msg[i];
    }
    return 0;
}



Danke im Voraus!

Dieser Post wurde am 10.03.2013 um 14:54 Uhr von Solomon editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.03.2013, 18:09 Uhr
~f.-th.
Gast


Wenn ich mich nicht ganz irre, geht das heute nicht mehr. Da musst du die Betriebssystemfunktionen nutzen.

Das funktionierte noch unter DOS, eventuell auch bis Windows ME. Hab länger schon die alten Programme nicht mehr getestet, die direkt auf den Videospeicher zugriffen. Die funktionierten ab Win2k nicht mehr.

Andere Betriebssysteme, die z.B. auf Linux basieren, hab ich in der letzten Zeit nicht getestet.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.03.2013, 00:15 Uhr
Hans
Library Walker
(Operator)


Hi,
diese Speicherschutzmechanismen sind dazu gedacht, das ein Programm nicht beliebig auf die Hardware zugreifen kann, wie das unter DOS noch möglich (und manchmal auch nötig) war. Und da Unix/Linux immer schon ein Multiusersystem war, haben solche Dinge da noch nie funktioniert. Vom Mac hab ich keine Ahnung, glaube aber nicht, dass es da sehr viel anders aussieht. Von daher wirst um um die Betriebssystemfunktionen nicht herum kommen.

Ausserdem: Wozu willst Du eine eigene printf-Funktion haben? - Standardmässig hat printf doch alles, was man braucht.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.03.2013, 14:01 Uhr
~Solomon
Gast


Will die Schrift in Farben haben.

Danke für eure Antworten! Ich denke darüber nach, dass ich das alles an einem virtuellen Betriebssystem programmiere, da wo es möglich ist. Ich werde mir erstmal kostenlose Alternativen zu DOS suchen mit der Hoffnung, dass so was funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.03.2013, 15:09 Uhr
~f.-th.
Gast


Schrift in Farbe sollte auch mit folgendem möglich sein:
https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/ncurses.3x.html

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.03.2013, 15:17 Uhr
~Solomon
Gast


Vielen Dank für den Link!

Ich habe mir DosBox heruntergeladen mit der Hoffnung, dass es gehen würde (ist halt eine Art DOS-Ersatz). Jetzt kann ich aber keine kompilierte Datei dort öffnen. Wenn ich den Befehl gebe, dass es die Datei öffnen soll, dann bleibt DosBox still. Keine Reaktion. Kann es daran liegen, dass dort nur 16-Bit Programme ausgeführt werden können? Wie kann man bei g++ eine Datei im 16-Bit-Format kompilieren?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.03.2013, 16:26 Uhr
~f.-th.
Gast


Der gcc geht meines Wissens nur für 32 und 64bit.

MAC war immer eine andere Baustelle geschichtlich gesehen. Die hatten Motorola CPU mit einer anderen Speicherverwaltung und ein anders organisiertes Betriebssystem. Bist du sicher das das mit dem Speicher für die Grafikkarte dort überhaupt zutrifft? Erst die jüngsten Versionen der Hardware des MAC gehen in Richtung Intel und das Betriebssystem ist heute von Linux oder BSD abgeleitet? Weisst du wahrscheinlich besser - ich müsste suchen.

Bei den Intel basierenden CPU stimmt das mit dem Grafikspeicher ja auch nur bei den ersten Genrationen. Bei den aktuellen Programmen ist der Speicher vielleicht nur virtuell an der von dir vermuteten Adresse.

Bei einigen der Motherboards der letzten Jahre steht im Handbuch extra dabei das DOS nicht mehr funktionieren soll?

Wenn du einen C++ Compiler suchst der 16bit noch kann:
Die alten Borland - ob du die unterm MAC zum laufen bekommst? STL ist da nicht.
Visual-Studio 1.5 - auch ein Oldie mit altem eigenwilligem C++.
Digital-Mars - da müsste ich erst sehen ob man die Versionen noch mit STL für DOS zusammen bringt?
Open Watcom - da kennt sich Hans besser aus. Läuft unter Windows 2000 und später und kann bis zur Version 1.7 (?) DOS als Zielplattform bauen. STL da fehlt noch relativ viel. Vielleicht kann der Testdownload ja mehr?

Oder brauchst du noch einen alten PC mit DOS? Bis zum Pentium 2 oder den AMD k6 könnten deine geplanten Programme noch laufen. DOS kann nur 512MB Festplattenpartition! Speicher weiss ich nicht mehr, aber der war auch kleiner wie heute üblich. Dann, wenn du zeitkritische Sachen einbaust ärgert dich eventuell das 2k-Problem.
FreeDOS kann eventuell mehr - musst du selbst suchen.

Das ist was mir auf die Schnelle ohne Recherche einfällt.

Nimm NCurses

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.03.2013, 19:12 Uhr
Hans
Library Walker
(Operator)


Hi,

Open Watcom läuft bei mir auch unter Windoof-Vista und kann auch in der 1.9er Version noch für DOS übersetzen. Da sind auch diverse DOS-Extender dabei, mit denen ich mich aber noch nie beschäftigt habe. Und ja, auf die STL sollte man da verzichten, weil die vieeel zu unvollständig implementiert ist; wie eigentlich der gesamte C++ '98 Standard. Genaueres steht auf der Projekt-Webseite.

Ansonsten hat man farbigen Text unter DOS mittels ANSI-Escape-Sequenzen (wozu ein spezieller Treiber (ansi.sys) installiert sein musste) und putchar() bzw. puts() produziert. Die Compiler von Borland hatten auch eine Bibliothek namens conio.h, die spezielle Befehle für solche Zwecke zur Verfügung stellte.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.03.2013, 19:46 Uhr
~Solomon
Gast


Ich danke euch für die Antworten, aber ich muss sagen: Ich will wirklich eine eigene print-Funktion programmieren. Aber nur aus dem Grund, weil ich eine eigenentwickelte print-Funktion machen will, die mir sehr viele Funktionen bietet, wie Farbauswahl, Koordinaten. Das wäre möglich, indem ich mit dem Videospeicher arbeiten würde. Da auf der DosBox ich nur Turbo C verwenden kann, welches total, mir fällt kein Wort dafür ein, ist, versuche ich FreeDOS auf einem Simulator zu laden. Hoffentlich wird es bei FreeDOS klappen.

Das ist aber nur eine "Vorstufe" zur eigentlichen "Mission": Ein Betriebssystem auf C++ und C. Ich habe früher bereits Pseudo-Betriebssysteme in purem NASM programmiert. Pseudo, weil die keine Funktionen hatten, die ein Betriebssystem braucht, wie FAT 12 und ähnliches. Da ich C++ relativ gut kann, lerne ich momentan NASM. Früher war es so, dass ich dort einen Text eintippte und ich schaute, was passierte. Heute will ich über NASM genauso so viel wissen wie über C++, mindestens. Da ich aber jetzt schon etwas ungeduldig bin, versuche ich bereits jetzt, Funktionen auf C++ zu programmieren, die später für mein Betriebssystem sehr sinnvoll sein werden. Und das sind halt Funktionen, bei denen man auf den Speicher zugreifen kann.

Erstmal werde ich versuchen, eine Art Terminal-Simulator zu programmieren. Dann versuche ich mithilfe von Assembler einen Bootloader zu programmieren, der vom Real Mode zum Protected Mode wechselt und somit zugriff auf meine C++ Datei hat, auch bekannt als Startdatei für meinen Terminal-Simulator.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.03.2013, 19:49 Uhr
~Solomon
Gast



Code:
auf C++ und C


Tut mir leid, ich meine auf C++ und Assembler (NASM)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: