Pascal: Ersetzen der Units CRT und DOS durch eigene

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von zatzen »

Hallo!

Ich brauche die Units CRT oder DOS oft nur wegen ein paar Routinen, und diese lassen sich jeweils durch ein paar Zeilen Assembler ersetzen.
Beispielsweise habe ich delay ersetzt durch:

Code: Alles auswählen

function delay(msec: word): bytebool; assembler;
asm
  mov ax, msec;  mov dx, 1000;  mul dx { in Mikrosekunden umrechnen }

  mov cx, dx;  mov dx, ax;
  mov ax, 08600h;  int 15h { BIOS Funktion: Millisekunden Warten, Auflösung ca. 977 µsec }

  mov al, 1;  sbb al, 0
  { Bei Fehler ist CF gesetzt, daher AL = 1 wenn erfolgreich (-> TRUE), sonst 0 bzw. FALSE }
end;
Obiger Code verwendet eine BIOS-Funktion, die erst ab AT-Systemen verfügbar ist. Pascal ist aber XT-Kompatibel, daher konnte es das in seinem delay so nicht nutzen. In meinem Kontext dürfte es egal sein, denn meine Programme erfordern letztlich 386er als Minimum. Evtl. zerlege ich die 1000er Mul noch durch Shift-Faktorisierung. Wenn man's nicht ganz so genau nimmt würde hier natürlich auch einfach ein SHL 10 passen...
**************************
EDIT:
Im Zusammenhang mit anderen Pascal-Funktionen wie Sound oder WriteLn bemerkt DosBox einen Illegal-Write bzw. Read Error, an astronomisch hohen Adressen. Falls jemand oben im Code sieht, wo das Problem liegt, lasst es mich bitte wissen! Ich habe selber schoneinmal so viel herausgefunden, dass das Problem nicht auftritt, wenn ich Interrupt 15h NICHT auslöse. Ich sehe mir diese BIOS-Funktion noch einmal genauer an.
**************************
Für Tastaturinput, auch ohne Warten auf Tastendruck, habe ich ebenfalls eigene Routinen.
Das ganze ist sicherlich idealistisch, aber wenn ich schon für so ein altes System programmiere, dann eben auch sorgfältig, sonst macht das keinen Spaß.
Immerhin schrumpft durch das Einsparen der CRT das kompilierte Programm schonmal um ein paar KB, auch wenn man sagt, dass Pascal immer nur diejenigen Routinen mitkompiliert, die tatsächlich auch verwendet werden. Die CRT fährt wohl einiges an Code für ihre Initialisierung ab, daher auch der alte Fehler mit dem Runtime Error 200, der (vor dem Patch) immer ein Problem war, ob man nun Delay nutzte oder nicht.

Okay, dann habe ich noch eine Frage:
Ich suche derzeit noch Wege, auch die Unit DOS zu umgehen.
setintvec und getintvec dürften jeweils durch eine handvoll Assembler-Zeilen zu ersetzen sein, wie man aber getenv (DOS-Umgebungsvariablen) ersetzt, habe ich bisher nicht herausgefunden. Möglicherweise auch eine BIOS-Funktion?

Hier würde ich mich über Hinweise freuen!

Danke soweit,
Zatzen
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von zatzen »

Update:
Aus dem PSP eines Programmes geht die Adresse der Umgebungsvariablen hervor.
Ich denke, damit komme ich erstmal zurecht.

Was bleibt ist das Rätsel um meine Delay-Funktion.
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von zatzen »

zatzen hat geschrieben:Was bleibt ist das Rätsel um meine Delay-Funktion.
...und auch das hat sich geklärt.
Ich nehme einfach die Funktion 083h, die den Computer nicht anhält, sondern nur nach einer bestimmten Zeit eine Variable im Speicher als Flag ändert. Damit funktioniert alles problemlos. Es ist ein bisschen schade, dass diese BIOS-Funktion von Windows XP nicht unterstützt wird, aber den Abstrich mache ich hier, zumal mit dieser Funktion (INT 15h, AH 83h) auch ein Timing des "bequemen Mannes" mittels Polling realisiert werden kann, wenn man keine Lust hat, den Timer-Interrupt auf eigene Routinen zu setzen, dessen Geschwindigkeit zu ändern und dabei noch dafür zu sorgen, dass die Uhrzeit trotzdem richtig läuft.
Von daher für manche Fälle also eine Alternative.

Falls es jemanden interessiert, hier noch der Code der neuen Delay-Function:

Code: Alles auswählen

function delay2(msec: word): wordbool; assembler;
asm
  mov ax, ds; mov es, ax;  lea bx, timeflag { Adresse globale Variable im Programm einlesen }
  mov timeflag, 0 { Flagvariable nullen }

  mov ax, msec; mov dx, 1000; mul dx { msec in usec umrechnen }
  mov cx, dx; mov dx, ax  { Mikrosekunden CX:DX }
  mov ax, 08300h; int 15h { BIOS: Flag nach Zeitintervall setzen }

  mov ax, 0
  jc @ende  { wenn bereits aktiv (CF gesetzt), function mit FALSE beenden }
  inc ax    { sonst mit TRUE }

  @loop: mov cx, es:[bx]; jcxz @loop { warten bis timeflag <> 0 }

  @ende:
end;
mov ax, 13h
int 10h

while vorne_frei do vor;
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von markusk »

Hi,

geht es Dir hier nur um Einsparung von Speicherplatz? Also ich wüsste auch wie man diverse Pascal-Funktionen in Assembler formuliert (z.B. die von Dir erwähnten Funktion getIntVec, setIntVec oder der Zugriff auf die Environment-Strings) und hab das auch schon öfters gemacht, aber wann immer ich Pascal-Funktionen verwenden kann verwende ich diese (mittlerweile) auch und mache mir nicht (mehr) die Mühe die jeweilige Funktion in Assembler zu formulieren.

Ich bin auch der Typ der anstatt Library-Funktionen lieber selbstgeschriebene Funktionen verwendet, aber es gibt echt Fälle in denen ich lieber auf die Pascal-Funktionen zurückgreife weil die Umsetzung in Assembler einfach zu zeitaufwendig ist. Vor allem bei Pascal-Funktionen die man an Performance kaum noch relevant übertreffen kann.

Ich wickle beispielsweise die Ausgabe von Debug-Meldungen aus meinen Assembler-Routinen heraus immer indirekt über die Writeln-Funktion ab weil man die Ausgabe dann beispielsweise auch schön formatieren kann und auch die Verarbeitung von unterschiedlichsten Datentypen kein Problem ist)

Jeder der in Assembler mal probiert hat sich eine formatierte Logmeldung bestehend aus unterschiedlichen Datentypen zu bauen wird wissen was das für eine Frickelei ist.

Wenn ich hingegen rein in Assembler programmiere hab ich diese Möglichkeiten natürlich nicht. Aber dass man komplette Programme wirklich zu 100% in Assembler schreibt ist wohl eher die Ausnahme, die meisten meiner Programme sind Kombinationen aus Turbo Pascal und Assembler (wohlgemerkt kein Inline-Assembler sondern immer separate Assembler-Module die getrennt übersetzt und dann hinzu gelinkt werden, mir ist das einfach lieber als die Inline-Methode)

lg, Markus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von zatzen »

Hallo Markus, danke für die Antwort!

Die Einsparung von Speicherplatz ist ehrlich gesagt nicht wirklich nötig, da ich gerade an einem Projekt arbeite, welches sowieso am Ende mit großen Datenmengen zu tun haben wird. Es geht ganz allgemein auch darum, spezielle Routinen zu schreiben, die Pascal in seinen Units so nicht mitbringt. Daraus mache ich mir eigene Units und bringe da noch ein paar evtl. sogar bessere Ersatzroutinen rein, um auf CRT oder DOS ganz verzichten zu können, aber nicht zu müssen - deswegen heisst meine Routine dann auch delay2 und kollidiert nicht mit delay der CRT.
Ein kleines Beispiel ist noch eine Alternative zu "KeyPressed", die im Gegensatz zur CRT-Funktion keinen Interrupt verwendet:

Code: Alles auswählen

function EvenFasterKeyPressed: wordbool; assembler;
asm
 xor ax, ax; mov es, ax
 mov ax, es:[41ah] 
 xor ax, es:[41ch]
end;
Nicht auf meinem Mist gewachsen (nur in "mein" Format gebracht) sondern hier gesehen: https://guru-home.dyndns.org/schnelle-Taste.html

Mühevoll wäre es ja nicht, die eigenen Routinen zu verwenden, weil ich diese in Units ablegen würde die ich jederzeit einbinden kann.
Es macht mir letzlich einfach Spaß, kleine Assembler-Routinen möglichst optimal zu schreiben, auch wenn es von der Performance her nicht wirklich nötig wäre.

Bei WriteLn stimme ich Dir absolut zu. Hier wäre es wohl ziemlich blödsinnig, diese Funktion ersetzen zu wollen. Und ich nutze sie auch meist beim Debuggen.
In vielen Fällen genügt für die Bildschirmausgabe aber eine simple String-Ausgabe, und das geht im Textmodus extrem viel schneller, wenn man einfach direkt in den Bildschirmspeicher(Textmodus) schreibt. Soetwas bringt Pascal von Haus aus meines Wissens nicht mit, und hier lohnen sich dann eigene Routinen.

Nein, ich programmiere auch nicht rein in Assembler, sondern Pascal mit Assembler. Anders als Du aber mit dem "Inline" bzw. direktem Code zwischen "asm" und "end". Das finde ich sehr flexibel.
Weil mir Assembler-Programmierung großen Spaß macht, mache ich tendentiell alle Routinen in Assembler, wenn sie gegenüber Pascal-Code nicht übermäßig groß, komplex oder ohne bedeutsamen Performance-Vorteil würden.

Grüße
Frank
mov ax, 13h
int 10h

while vorne_frei do vor;
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von markusk »

Hallo!

Coole Sache das mit der KeyPressed Funktion ohne Interrupt!

Um nochmal auf Writeln zurückzukommen: Ich hab sie im Rahmen einer selbstprogrammierten Fensterverwaltung zwar in dem Sinne nicht neu programmiert, aber die Arbeitsweise etwas modifiziert. Dadurch war es möglich sämtliche Ausgaben über Write / Writeln direkt in ein Fenster zu leiten ohne mir eine eigene Ausgaberoutine für die Ausgaben in einem Fenster schreiben zu müssen. Dadurch konnte ich alle Vorteile von Writeln wie gehabt auch innerhalb der Fenster nutzen.

In meiner Modifizierung hab ich die Ausgabe auf die Fenstergrenzen beschränkt und beispielsweise auch den Fensterbereich nach oben gescrollt wenn die Ausgabe über den unteren Fensterrand hinausging.

Lg, Markus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von zatzen »

Hallo Markus!

Ich finde vor allem die Entdeckung dieses Timers interessant, der nach einer vorgebenen Zeit selbständig ein Flag setzt.
Für Timing-Aufgaben, die mit Polling realisiert werden dürfen, ist das eine sehr bequeme und weniger störanfällige Alternative dazu, den 18,2 Sekunden Timer zu verstellen und den Interrupt auf eigene Routinen zu setzen.
Falls ich mal einen eigenen AdLib-Tracker programmiere, werde ich dieses einfach umzusetzende Timing dort wohl nutzen.

Write(Ln) gibt ja nicht nur auf dem Bildschirm aus, sondern kann auch in Dateien schreiben.
Ich weiss ja nicht, wie Du die Funktion geändert hast. Den Maschinencode modifiziert?

Ich brauchte eine sehr schnelle Ausgabe für meinen "ZSM-Player". Falls Dich der interessiert, guck mal hier in etwas ältere Themen.

Grüße
Frank
mov ax, 13h
int 10h

while vorne_frei do vor;
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von markusk »

zatzen hat geschrieben: Fr 16. Jun 2023, 21:09
Write(Ln) gibt ja nicht nur auf dem Bildschirm aus, sondern kann auch in Dateien schreiben.
Ich weiss ja nicht, wie Du die Funktion geändert hast. Den Maschinencode modifiziert?
Hallo Frank!

Nein, den Maschinencode hab ich nicht modifiziert, aber Turbo Pascal bietet da von sich aus eine (wie ich finde) sehr coole Möglichkeit die Arbeitsweise von Write(Ln) sowie von Read(Ln) zu modifizieren.

Und zwar spricht Turbo Pascal die Ein- / Ausgabekanäle über sogenannte Dateivariablen an, das sind Datenstrukturen in denen unter anderem Pointer auf diverse Funktionen wie Open, Close, InOut und Flush vermerkt sind.

Und diese Pointer kann man (ähnlich wie bei Interrupts) auf eigene Pascal Funktionen umleiten und in denen dann ggf. die ursprünglichen Funktionen aufrufen oder auch nicht, je nach Anwendungsfall.

Das hab ich über Michael Tischer‘s Buch Turbo Pascal intern gelernt und dort wird auch ein echt cooler Anwendungsfall gezeigt, nämlich das Protokollieren von sämtlichen Ausgaben über Write(Ln) sowie von Eingaben über Read(Ln) in einer Datei ohne auch nur eine einzige zusätzliche Anweisung oder Änderung in dem Programm in dem die Protokollierung genutzt werden soll. Man muß nur die Unit über uses einbinden und das war‘s!

Cool oder? Und diese Möglichkeit kommt auch bei der Fensterverwaltung zum Einsatz, indem auf eine eigene Routine umgeleitet wird welche bei der Ausgabe die Fenstergrenzen berücksichtigt und gleich direkt in den Video RAM schreibt.

Ich find das Buch echt grenzgenial weil da echt viel Hintergrundwissen vermittelt wird und zeigt was mit Turbo Pascal (vor allem in Kombination mit Assembler) alles möglich ist.

Lg, Markus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von zatzen »

Hallo Markus,

Klar ist das ne coole Sache, ich habe selber bloß noch keine komplex Formatierte Ausgabe für Spezialfälle wie Fenster gebraucht, da hatte ich mir mal vor über 25 Jahren für ein Programm eine Assembler-Unit mit Allerlei Fensterkram selber gebaut...

Eine automatische Protokollierung aller WriteLn/ReadLn-Vorgänge, ja das ist praktisch, wenn man es braucht.

Vielleicht gibt es soetwas in Bezug auf Dateioperationen, d.h. wenn man statt normalem Dateizugriff auf einzelne Dateien lieber alles aus einer einzigen großen Datei lesen will, die man vorher zusammenkompiliert hat.

Ich muss aber sagen dass mir dieses ganze technische Gebrassel eigentlich Spaß macht und ich mir gerne selber meine Spezialroutinen schreibe. Es muss bei mir nicht schnell gehen, und so einen Programmierstil wie heutzutage, wo man sich für ein klitzekleines Tool direkt an einem dutzend Librarys bedient und eine 5 MB EXE hat die eigentlich nur 5 KB groß sein müsste... Nicht so mein Ding, war jetzt auch etwas übertrieben, und ich will damit auch nicht sagen dass es in Deinem Fall in die Richtung geht, aber ich denke, Du verstehst was ich meine.

Ich finde es letztenendes umso interessanter, je mehr Code des Programms wirklich selbst geschrieben ist, z.B. in Assembler, so dass man das Programm notfalls auch ohne eine Entwicklungsumgebung wie Pascal kompilieren kann.
Aber das treibe ich auch nicht auf die Spitze sondern mache das tendentiell nur wie hier nach dem Prinzip "Units durch eigene ersetzen", und etwa Dateioperationen wie BlockRead muss ich nicht unbedingt selbst programmiert haben.


Ganz allgemein frage ich mich übrigens: Arbeitet hier niemand im Forum an etwas größeren Projekten? Hat wirklich niemand Lust, ein Spiel zu programmieren, vielleicht auch im Team?
Ich denke, ich mache zu diesem Thema mal einen neuen Thread.
mov ax, 13h
int 10h

while vorne_frei do vor;
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von markusk »

zatzen hat geschrieben: So 25. Jun 2023, 22:59
Ich muss aber sagen dass mir dieses ganze technische Gebrassel eigentlich Spaß macht und ich mir gerne selber meine Spezialroutinen schreibe. Es muss bei mir nicht schnell gehen, und so einen Programmierstil wie heutzutage, wo man sich für ein klitzekleines Tool direkt an einem dutzend Librarys bedient und eine 5 MB EXE hat die eigentlich nur 5 KB groß sein müsste... Nicht so mein Ding, war jetzt auch etwas übertrieben, und ich will damit auch nicht sagen dass es in Deinem Fall in die Richtung geht, aber ich denke, Du verstehst was ich meine.
Hi Frank,

ich weiß genau was Du meinst, ich bin total gleich eingestellt, ich programmiere mir lieber meine eigenen Routinen als mir meine Programme aus irgendwelchen Libraries zusammen zu stoppeln. Klar, man ist in einem Bruchteil der Zeit fertig, aber mir geht's nicht darum dass ich schnell fertig bin sondern darum mein Know How zu erweitern und das funktioniert nun mal nur dadurch dass man eigene Programme / Libraries schreibt.

Ich hatte beispielsweise immer eine Abneigung gegen IDEs die einem Code generieren und deswegen hab ich mir zu meinen Java Zeiten meine UIs auch immer von Hand programmiert. Sicher war's mehr Schreibarbeit, aber erstens lernt man viel dabei und zweitens erspart man sich den ganzen Overhead den der Codegenerator erzeugt.

Und ich hab einfach viel mehr Freude daran wenn ich weiß ich hab etwas ganz allein nach meinen Vorstellungen auf die Beine gestellt und nicht nur Code von anderen entsprechend meinen Anforderungen zusammengeführt.

Die von mir vorhin angesprochenen Möglichkeiten welche Turbo Pascal in Bezug auf Write(Ln) bietet finde ich zwar cool, aber so wie Du habe ich (außer jetzt bei meiner Fensterverwaltung) nie den Bedarf nach solchen Funktionalitäten. Toll es einmal gesehen zu haben und im Hinterkopf zu behalten, aber im Allgemeinen versuche ich ebenfalls nur die absoluten Basisfunktionalitäten wie z.B. Ein- und Ausgabe zu nutzen und den Rest je nach Bedarf durch selbst geschriebene Routinen zu ergänzen.

lg, Markus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von zatzen »

Hallo Markus,

man kann seine eigenen Routinen ja auch immer wieder verwenden und spart somit auch Zeit, nur mit dem Unterschied, dass man wirklich versteht was die Routinen machen, und dass man sie bei Bedarf auch noch optimieren und anpassen kann - klar.

Ich habe als Kind mit QBASIC angefangen, und da wird der Code ja schon korrigiert bevor man kompiliert.
Daran hatte ich mich gewöhnt und habe mich dann beim Umstieg auf Pascal erstmal etwas verloren gefühlt.
Am Anfang ging es mir aber auch eher nur um das Ergebnis, später wurde Assembler dann für soetwas wie Sprite-Routinen mit Transparenz ein notwendiges Übel, und dann aber auch bald eine Faszination für sich. Also ziemlich früh kam bei mir die Faszination für Datenstrukturen auf, sobald man das alles besser selbst bestimmen konnte und nicht mehr so eingeschränkt war von QBASIC Arrays und Befehlen wie PUT (Grafik) als einzige Möglichkeit.

Ich empfinde gerade Programmieren für Dos als etwas überholt, da heutige Windows-Systeme gewissermaßen ein direkter Nachfahre von Dos sind, während beim C64 oder Amiga die Zeit bis heute stehengeblieben ist. Allerdings habe ich nunmal für Dos Programmieren gelernt, und man kann eben die Hardware direkt und unkompliziert ansteuern, das macht es für mich weiterhin attraktiv, und auch die technischen Beschränkungen inspirieren mich mehr, als dass sie mich behindern.
Manchmal denke ich mir, es ist als Hobby, angesichts der heutigen Relevanz, vergleichbar mit Teppichknüpfen, nur irgendwie doch kreativer.

Jedenfalls habe ich die Zeit Anfang-Mitte der 90er kreativ-programmierend miterlebt, nur leider erstmal in QBASIC.
1997 kam bei mir dann Pascal und auch Assembler dazu, das war schon ein großer Schritt nach vorne, nur habe ich damals Assembler noch nicht so gut durchblickt, etwa soetwas, dass Flags von Befehlen wie MOV nicht beeinflusst werden, und man deshalb auch mit MOV-Befehlen dazwischen z.B. einen Vergleich mehrfach auswerten kann (CF, ZF, was auch immer) ohne erneut prüfen zu müssen.

lg, Frank
mov ax, 13h
int 10h

while vorne_frei do vor;
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von markusk »

Hallo Frank!

Mit QBASIC hab ich nie gearbeitet, auf dem PC bin ich in Bezug auf BASIC nur mit GW-BASIC in Berührung gekommen. Ich hab damals vom Commodore C16 auf den PC gewechselt und da war GW-BASIC angesichts des ja doch sehr mächtigen Befehlsumfangs eine ganz neue Welt.

Bald darauf hab ich mit Turbo Pascal angefangen, hab auch mit Turbo C / C++ gearbeitet, aber irgendwie hat mir Turbo Pascal immer besser gefallen, vor allem in Kombination mit Assembler.

Einer der Gründe warum mir die Programmierung unter DOS heutzutage fast noch mehr Spaß macht als damals ist die Tatsache daß man es mit einem finalen System zu tun hat. Da MS-DOS incl. der kommerziellen Anwendungen ja nicht mehr weiterentwickelt wird fällt der ganze Aktualisierungs-Wahnsinn weg und man kann sich voll und ganz darauf konzentrieren sich innerhalb der Grenzen die der letzte Stand eben bietet auszutoben.

Auch ich empfinde die technischen Beschränkungen mehr als reizvolle Herausforderung als ein Hindernis. Daher auch mein Interesse für die Programmierung von TSR-Programmen da man gerade hier mit den Beschränkungen des Systems konfrontiert wird. Lange Zeit war mir dir eigentliche Natur des grundlegenden Problems (fehlende Reentranz) nicht ganz klar weil es in den Informationsquellen die mir zur Verfügung standen nicht ausreichend klar beschrieben war.

In einem Buch zur professionellen Turbo Pascal Programmierung fand ich dann die fehlenden Puzzle-Teile die dann alle noch verbliebenen Unklarheiten beseitigt haben.

Für mich ist die DOS-Programmierung neben einem Hobby das mir sehr viel Spaß macht auch eine willkommene entschleunigende Abwechslung zu den Tätigkeiten im Beruf (Software-Entwickler im Bereich C / Java sowie 3rd Level Support)

lg, Markus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Pascal: Ersetzen der Units CRT und DOS durch eigene

Beitrag von zatzen »

Ich nutze heute, um soetwas wie Tools zu programmieren, Freepascal.
Dabei ist es mir ziemlich egal, was wirklich "unter der Haube" passiert, Hauptsache die Tools funktionieren, und man hat hier den Vorteil von mind. 2 GB Speicher, den man simpel und bequem in Arrays (auch dynamisch) anlegen kann, und man hat den Vorteil dass man aktuelle Hardware mehr oder weniger ausreizt bzgl. der Geschwindigkeit. Und man braucht keinen Emulator bemühen.

Daher bleibt für Dos-Anwendungen bei mir bis auf einige Ausnahmen nur noch soetwas wie Spiele übrig.

Ich habe übrigens noch nicht die Geduld aufgebracht, in Freepascal Grafik und Ton auszugeben, d.h. nicht einfach nach dem Prinzip "zeige dieses JPG an oder spiele diese MP3", sondern wirklich so, dass man die Daten selbstbestimmt in den Speicher lädt, modifizieren kann, und dann gezielt anzeigen/abspielen kann, ganz so wie das in Dos geht.
Das wäre aber schon eine geniale Sache im Grunde, wenn man mal weniger idealistisch unterwegs ist und einfach nur mal ein funktionierendes Programm mit Up-To-Date Multimedia machen will.

Dos als finales System, so habe ich das noch gar nicht gesehen, sondern bisher eben nur C64 oder Amiga als ein System betrachtet, das quasi schon von Beginn an fix war, d.h für sich einen Standard setzte.
Bisher habe ich nur über den Emulator DosBox eine gewisse feste Instanz gesehen.
mov ax, 13h
int 10h

while vorne_frei do vor;
Antworten