Dazu kommen später bestimmt noch einige Fragen...
...aber zunächst geht es um Grundsätzliches.
Dazu kommen sp„ter bestimmt noch einige Fragen...
Da ich ahne wohin der Kurs Dich fhrt
Wenn es sp„ter um die Frage linken geht, achte darauf alles statisch
zu linken. Die executables sind dann zwar grӇer und brauchen
vielleicht mehr RAM, aber es entf„llt das Problem sp„ter die passenden "DLLs" zu beschaffen.
Von Pascal habe ich auch keinen Plan, wie von so vielem.
Ich sehe aber das dort auch Assembler Code drin ist
und eine Fehlermeldung geht in Richtung fehlendes Register. Das Wort Register kommt im Zusammenhang in einer IFDEF OS Variable vor.
Ich wrde im ersten Schritt schauen, ob die OS Variable richtig
gesetzt ist und somit berhaupt die Definition von Register
durchgefhrt wird.
Ich versuche gerade, ein (ur-) altes Turbo-Pascal Programm (LList)============== Nun kommt mein Senf: ===============
unter Linux zu compilieren und dann auch zum Laufen zu bekommen.
Mov ah, $4d;
Int $21;
Dafür habe ich eine Lösung gefunden:
{$asmMode intel}
an den Anfang jeder Unit, die Assembler-Code enthält. Läuft!
und eine Fehlermeldung geht in Richtung fehlendes Register. Das
Wort Register kommt im Zusammenhang in einer IFDEF OS Variable
vor.
Diese OS Variablen werden nirgends gesetzt, sondern scheinbar während
der Laufzeit ausgewertet. Auch die IFDEF's in meinem Fall kommen erst während der Laufzeit zum Tragen.
Mov ah, $4d;
Int $21;
INT 21h ruft eine DOS-Funktion auf, das geht so natuerlich nicht unter Linux.
Dann ist das imho die erste Baustelle. Das k”nnte Dir sonst an jeder Stelle auf die Fsse fallen. Wenn ich das richtig sehe fhrt das
letzte ELSE jeweils auf Code fr DOS. Sollte der inkompatibel mit
Linux sein, brauchst Du dafr funktionierenden IF Linux Code.
Mov ah, $4d;
Int $21;
INT 21h ruft eine DOS-Funktion auf, das geht so natuerlich nicht unter GS>> Linux.
Davon habe ich leider keine Ahnung. :-/
Mov ah, $4d;
Int $21;
INT 21h ruft eine DOS-Funktion auf, das geht so natuerlich nicht unter GS>>> Linux.
Davon habe ich leider keine Ahnung. :-/
Die Soft-Interrupts, die mit INT aufgerufen werden, sind quasi die
DOS-API.
Obiger Code fragt bei DOS an, warum das zuletzt gestartete Programm
beendet wurde. Nach dem Aufruf steht im Register AL der Returncode des Programms und im Register AH ein Wert, der angibt ob normales Ende (0), Abbrucht mit Ctrl+C (1), schwerer Fehler (2) oder ob es quasi gekillt
wurde (3).
Zeug, das man mit 14 gelernt hat und nie mehr vergisst ;)
..."stirbt" unter freepascal mit diesen Fehlern:Klar.
==========snip==========Downgraden ist das Zauberwort.
Free Pascal Compiler version 3.2.2+dfsg-9ubuntu1 [2022/04/11] for
x86_64 Copyright (c) 1993-2021 by Florian Klaempfl and others Target
OS: Linux for x86-64 Compiling MKDOS.PAS MKB.DEF(7,2)Ist ganz klar aus der Fehlermeldung ersichtlich. Viel Spass beim suchen und bauen der Umgebung. Das ganze ist nicht so trivial. Freepascal kann sowohl in einer windowed, als auch Dos-Box kompatibel kompiliert werden.
Und weg... BernhardBye/2 Torsten
Free Pascal Compiler version 3.2.2+dfsg-9ubuntu1 [2022/04/11] forDowngraden ist das Zauberwort.
x86_64 Copyright (c) 1993-2021 by Florian Klaempfl and others
Target
Du ben”tigst die entsprechende Lora-BBS MSDos-Pas in der Dos-Box im
x86 ohne -64
Das ist ja genau das, was ich *nicht* wollte! All' das laeuft aktuell in einer eCS VM auf einem Server mit VMWare.
Ich wollte das alles aber nativ unter Linux zum Laufen bekommen;
Das ist ja genau das, was ich *nicht* wollte! All' das laeuft
aktuell in einer eCS VM auf einem Server mit VMWare. Ich wollte
das alles aber nativ unter Linux zum Laufen bekommen;
Du koenntest es mit DOSBox laufen lassen, wenn es nicht viel
CPU-Leistung braucht.
Mov ah, $4d;
Int $21;
INT 21h ruft eine DOS-Funktion auf, das geht so natuerlich nicht unter Linux.
Aber das will ich doch gar nicht! Ich wollte ein uraltes
Pascal-Programm (darüber wurde ausgiebig diskutiert) *nativ* unter
Linux laufen lassen.
Solche INT aufrufe werden ja wohl in mehr als einem DOS Programmen vorkommen, gibt es da noch keine Migrationsloesung, eine API oder einen Wrapper, der solchen Code entsprechend ersetzen kann?
Aber das will ich doch gar nicht! Ich wollte ein uraltes
Pascal-Programm (darber wurde ausgiebig diskutiert) *nativ*
unter Linux laufen lassen.
Es geht also eher darum eine Software funktionsf„hig zu archivieren,
als eine funktionelle Aufgabe zu erfllen?
Warum soll ich eine OS/2-VM gegen eine DOS-Box tauschen?
Warum soll ich eine OS/2-VM gegen eine DOS-Box tauschen?
Um unnoetigen Ballast loszuwerden. Statt ein ganzes OS staendig
mitlaufen zu lassen, fuehrst Du nur das DOS-Programm kurz aus
mit dosbox -c tolle.exe -c exit
Warum soll ich eine OS/2-VM gegen eine DOS-Box tauschen?
Um unnoetigen Ballast loszuwerden. Statt ein ganzes OS staendig
mitlaufen zu lassen,
Es geht also eher darum eine Software funktionsfähig zu
archivieren, als eine funktionelle Aufgabe zu erfüllen?
Es geht *nicht* um archivieren, es geht *nicht* um Erfüllung einer
Aufgabe um der Aufgabe willen.
ES GEHT UM NATIVE LINUX-UNTERSTÜTZUNG!
Warum soll ich eine OS/2-VM gegen eine DOS-Box tauschen?
Erst nach dem Absenden meiner ersten Antwort ist mir ein zweiter Gedankenfehler eingefallen: Ich tausche dann OS/2 in einer VM gegen
Linux in einer VM...
Erst nach dem Absenden meiner ersten Antwort ist mir ein zweiter
Gedankenfehler eingefallen: Ich tausche dann OS/2 in einer VM
gegen Linux in einer VM...
N”, Du wolltest doch NATIV LINUX, also nix VM Server, Linux direkt
aufs Blech und dann alles was geht mit Linux, sowie die Ausnahmen dann
mit Emulator oder VM abdecken.
Meine Idee war, daß OS/2 "irgendwann" nicht mehr laufen könnte und ich
auf ein aktuelles OS (Linux) umsteigen wollen würde. Das meinte ich
mit "nativ". Und da möchte ich, wenn möglich, alles umziehen.
Wie ich aber schon ein paar Mal schrieb, das Projekt ist eh gestorben.
Wie ich aber schon ein paar Mal schrieb, das Projekt ist eh
gestorben.
K”nnen wir uns vielleicht auf "vorrbergehend pausiert" einigen? ;-)
Ganz ehrlich, ich habe nicht mehr die Energie, so etwas umzusetzen...
Moin All!
Ich versuche gerade, ein (ur-) altes Turbo-Pascal Programm (LList) unter Linux zu compilieren und dann auch zum Laufen zu bekommen.
Dazu kommen spaeter bestimmt noch einige Fragen...
...aber zunaechst geht es um Grundsaetzliches.
Diese Unit:
=== Anfang des Imports der Datei <MKDOS.PAS> ===
Unit MKDos;
{$I MKB.Def}
Interface
Function GetDosDate: LongInt;
Function GetDOW: Word;
Function GetResultCode: Integer;
Implementation
Uses
{$IFDEF WINDOWS}
WinDos;
{$ELSE}
Dos;
{$ENDIF}
{$IFDEF OS2}
Function GetResultCode: Integer;
Begin
GetResultCode := DosExitCode
End;
{$ELSE}
Function GetResultCode: Integer;
Var
Result: Byte;
{$IFNDEF BASMINT}
{$IFDEF WINDOWS}
Regs: TRegisters;
{$ELSE}
Regs: Registers;
{$ENDIF}
{$ENDIF}
Begin
{$IFDEF BASMINT}
Asm
Mov ah, $4d;
Int $21;
Cmp ah, $00;
je @JRes;
Neg ah;
Mov Result, ah;
jmp @JRes2;
@JRes:
Mov Result, al;
@JRes2:
End;
{$ELSE}
Regs.ah := $4d;
MsDos(Regs);
If Regs.ah <> 0 Then
Result := - Regs.ah
Else
Result := Regs.al;
{$ENDIF}
GetResultCode := Result;
End;
{$ENDIF}
Function GetDosDate: LongInt;
Var
{$IFDEF WINDOWS}
DT: TDateTime;
{$ELSE}
DT: DateTime;
{$ENDIF}
DosDate: LongInt;
{$IFDEF VIRTUALPASCAL}
DOW: longint;
{$ELSE}
DOW: Word;
{$ENDIF}
Begin
GetDate(DT.Year, DT.Month, DT.Day, DOW);
GetTime(DT.Hour, DT.Min, DT.Sec, DOW);
PackTime(DT, DosDate);
GetDosDate := DosDate;
End;
Function GetDOW: Word;
Var
{$IFDEF WINDOWS}
DT: TDateTime;
{$ELSE}
DT: DateTime;
{$ENDIF}
{$IFDEF VIRTUALPASCAL}
DOW: longint;
{$ELSE}
DOW: Word;
{$ENDIF}
Begin
GetDate(DT.Year, DT.Month, DT.Day, DOW);
GetDOW := DOW;
End;
End.
=== Ende des Imports der Datei <MKDOS.PAS> ===
..."stirbt" unter freepascal mit diesen Fehlern:
==========snip==========
Free Pascal Compiler version 3.2.2+dfsg-9ubuntu1 [2022/04/11] for x86_64 Copyright (c) 1993-2021 by Florian Klaempfl and others Target OS: Linux for x86-64
Compiling MKDOS.PAS
MKB.DEF(7,2) Warning: Unsupported switch "$L" MKB.DEF(14,5) Note: Ignored compiler switch "$F" MKDOS.PAS(34,11) Error: Identifier not found "Registers" MKDOS.PAS(34,20) Error: Error in type definition MKDOS.PAS(53,8) Error: Illegal qualifier MKDOS.PAS(54,3) Error:
Identifier not found "MsDos" MKDOS.PAS(55,11) Error: Illegal qualifier MKDOS.PAS(56,22) Error: Illegal qualifier MKDOS.PAS(58,20) Error: Illegal qualifier MKDOS.PAS(104) Fatal: There were 7 errors compiling module, stopping Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode
==========snap==========
Das Alles sagt mir leider gar nichts, da ich von Pascal keine Ahnung habe...
Und weg... Bernhard--- WinPoint 411.0
... MAILBOX: Uptime is 164d 00h 41m 59s (BT-Uptime/OS2, V1.5)
--- GoldED+/OS2 1.1.52220220504
* Origin: REALITY.SYS corrupted! Reboot universe? (Y/n) (2:240/9190)
hast Du es hinbekommen, oder soll ich es mir mal anschauen?
Mov ah, $4d;
Int $21;
Sysop: | Angel Ripoll |
---|---|
Location: | Madrid, Spain |
Users: | 11 |
Nodes: | 8 (0 / 8) |
Uptime: | 38:00:02 |
Calls: | 479 |
Files: | 14,070 |
Messages: | 62,222 |