Anleitung: FPC und MSDOS Cross-Compiler

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Anleitung: FPC und MSDOS Cross-Compiler

Beitrag von Mathias »

Ich wollte probieren, ob ich ein MSDOS-Programm hinkriege.

Dazu habe ich folgendes unter WinXP installiert:
ftp://gd.tuwien.ac.at/languages/pascal/fpc/dist/3.0.2/i386-win32/fpc-3.0.2.i386-win32.cross.i8086-msdos.exe
ftp://gd.tuwien.ac.at/languages/pascal/fpc/dist/3.0.2/i386-win32/fpc-3.0.2.i386-win32.exe
Achtung, Links können sich ändern, wen ein neues FPC kommt.

Anschliessend muss man noch
http://www.stack.nl/~marcov/fpc-i8086-msdos-r25379.zip
runterladen.

Aus diesem Archiv kopiert man folgende Dateien in C:\FPC\3.0.0\bin\i386-win32: ( Befinden sich in .\pp16\bin )

Code: Alles auswählen

msdos-wlib.exe
msdos.wlink.exe
wlibd.dll
wlinkd.dll

dann muss man noch die beiden Dateien umbennen

Code: Alles auswählen

msdos-wlib.exe -> wlib.exe
msdos.wlink.exe -> wlink.exe


Zum ausprobieren habe ich ein HelloWorld geschrieben.

Code: Alles auswählen

program test;  // test.pas
uses
  Crt;
var
  i: Integer;
begin
  for i := 1 to 15 do begin
    TextAttr := i;
    WriteLn('Hello World !');
  end;
  WriteLn();
  WriteLn();
  TextAttr:=$07;
  WriteLn('<Taste> = weiter');
  repeat
  until KeyPressed;
end.


Kompilieren muss man es noch mit

Code: Alles auswählen

ppcross8086 -WmLarge test.pas

-WmLarge ist wichtig, wen man das gleiche Speichermodell wie von Turbo-Pascal will.
Macht sich besonders bemerkbar, wen Speicher hin und her schiebt, zB. VRAM. In ASM macht es sich mit LDS und LES bemerkbar.


Anschliessend habe ich die EXE im DOSBox Emulator laufen lassen, und siehe da es hat geklappt. :shock: :D
Zuletzt geändert von Mathias am Di 21. Nov 2017, 18:02, insgesamt 4-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Anleitung: FPC und MSDOS

Beitrag von Marsmännchen »

Sorry, wenn ich blöd nachfragen muss :oops:

Normalerweise baut und kompiliert man sich seine Konsolenapplikationen ja direkt in Lazarus. Also was bewirkt der ganze Aufwand, den du da betreibst?
Ich mag Pascal...

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anleitung: FPC und MSDOS

Beitrag von Mathias »

Du verwechselst Konsole mit MSDOS.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: Anleitung: FPC und MSDOS

Beitrag von Nixsager »

Mathias ic h hätte mal da ein paar Fragen.

1. Gibt es noch eine neue Version für DOS von FP?

2. Wieso hast dur es installiert?

2. Wenn Windows 9X nicht mehr unterstützt wird, wieso dann DOS?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Anleitung: FPC und MSDOS

Beitrag von Marsmännchen »

Mathias hat geschrieben:Du verwechselst Konsole mit MSDOS.

Lässt sich das vielleicht mit wenigen Worten erklären?
Ich mag Pascal...

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Anleitung: FPC und MSDOS

Beitrag von compmgmt »

Marsmännchen hat geschrieben:
Mathias hat geschrieben:Du verwechselst Konsole mit MSDOS.

Lässt sich das vielleicht mit wenigen Worten erklären?

MS-DOS ist ein Betriebssystem. Die Windows Konsole nur ein Terminal. Hier eine genauere Erklärung:

Die Konsole (cmd) ist der Befehlszeilenprozessor unter Windows NT (Windows NT 3.x, NT 4.x, 2000, XP, Vista, 7, 8, 8.1, 10 und die zugehörigen Server-Versionen).
MS-DOS ist ein Betriebssystem. Windows 1.x, 2.x, 3.x und 9x sind nur Grafische Oberflächen für MS-DOS gewesen.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Anleitung: FPC und MSDOS

Beitrag von marcov »

Free Pascal nennt 16-bit dos "msdos". 32-bit Dos ist "go32v2".

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anleitung: FPC und MSDOS

Beitrag von Mathias »

2. Wieso hast dur es installiert?

Ich wollte es einfach mal ausprobieren, so wie ich es im ersten Post geschrieben habe.

Windows 1.x, 2.x, 3.x und 9x sind nur Grafische Oberflächen für MS-DOS gewesen.

Windows Millenium gehört da auch noch dazu. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anleitung: FPC und MSDOS

Beitrag von Mathias »

Ich habe es unterdessen geschaft, das Programm direkt in Lazarus zu kompilieren.

Nur das starten ist ein Problem, ich habe verschiedenes bei Startprogramm ausprobiert,

C:\Programme\DOSBox-0.74\DOSBox.exe
C:\Programme\DOSBox-0.74\DOSBox.exe ($TargetCmdLine)

Wen ich es manuell in der Konsole mit,

Code: Alles auswählen

C:\Programme\DOSBox-0.74\DOSBox.exe  test.exe

mache, wird das Programm in der DOSBox gestartet.

Jemand eine Idee, was ich bei Startprogramm eingeben muss.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Anleitung: FPC und MSDOS

Beitrag von Marsmännchen »

compmgmt hat geschrieben:Die Konsole (cmd) ist der Befehlszeilenprozessor unter Windows NT (Windows NT 3.x, NT 4.x, 2000, XP, Vista, 7, 8, 8.1, 10 und die zugehörigen Server-Versionen).
MS-DOS ist ein Betriebssystem. Windows 1.x, 2.x, 3.x und 9x sind nur Grafische Oberflächen für MS-DOS gewesen.


Danke :D . Dass DOS eine BS ist, war mir klar, schließlich habe ich es selbst noch auf meinen 386er SX gehabt (incl. Win 3.11 und Office 4.2... = 42 Disketten zu installieren :roll: ). Aber meine Vorstellung der Konsole/Eingabeaufforderung war völlig falsch. Ich dachte, das wäre eine Art DOS in der Box. Man lernt nie aus 8)
Ich mag Pascal...

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anleitung: FPC und MSDOS

Beitrag von Mathias »

Das ist schon dast wie in Turbo-Pascal Zeiten. 8)

Code: Alles auswählen

program test;
{$ASMMODE   intel}
uses
  Crt;
begin
  asm
    mov ax,$13  // Grafik-Modus mit 256 Farben
    int $10
  end;
  repeat
    Mem[$A000:random(64000)] := random(256);
  until KeyPressed;
end.

Demnächst probiere ich mal, ob ich ein älteres Programm kompilieren kann, welches ich dazumal mit TB entwickelt habe und Assembler enthält. :idea:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Anleitung: FPC und MSDOS

Beitrag von compmgmt »

Mathias hat geschrieben:
Windows 1.x, 2.x, 3.x und 9x sind nur Grafische Oberflächen für MS-DOS gewesen.

Windows Millenium gehört da auch noch dazu. :wink:

Windows Me gehört zu 9x :wink:
"Microsoft Windows Me ist das letzte von Microsoft veröffentlichte Betriebssystem aus der Windows-9x-Linie, die auf MS-DOS aufsetzt." (https://de.wikipedia.org/wiki/Microsoft_Windows_Millennium_Edition)

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: Anleitung: FPC und MSDOS

Beitrag von Nixsager »

Marsmännchen hat geschrieben:Ich dachte, das wäre eine Art DOS in der Box. Man lernt nie aus 8)

So weit ich mich nicht irre, ist das ab Windows XP in der 32 Bit-Version so.
Bei den Dos-Windows ist das glaube ich anders.
Ich verstehe nicht, wieso DOS-Programme bei 64 den Bit-Versionen nicht gehen.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Anleitung: FPC und MSDOS

Beitrag von compmgmt »

Nixsager hat geschrieben:
Marsmännchen hat geschrieben:Ich dachte, das wäre eine Art DOS in der Box. Man lernt nie aus 8)

So weit ich mich nicht irre, ist das ab Windows XP in der 32 Bit-Version so.
Bei den Dos-Windows ist das glaube ich anders.
Ich verstehe nicht, wieso DOS-Programme bei 64 den Bit-Versionen nicht gehen.

ab Windows 3 wurde DOS-Windows und Windows NT parallel programmiert. Windows NT war schon immer 32-Bit. Ab Windows 3 für DOS (oder 95, ich weiß es nicht genau) gab es ein sogenanntes "386 enhanced module". Dadruch lief eine 32-Bit grafische Oberfläche auf einem 16-Bit MS-DOS (ich weiß aber nicht wie genau das technisch funktioniert hat).

Warum 16-Bit Programme auf 64-Bit Windows nicht laufen, kann ich dir sagen.

Unter einem 32-Bit Windows gibt es ein WOW (Windows on Windows), welches 16-Bit Programme ausführen kann. Zusätzlich gibt es hier noch die NTVDM (New Technology Virtual DOS Machine), welche ein MS-DOS emuliert.
Unter einem 64-Bit Windows gibt es ein WOW64 (Windows on Windows64), welches 32-Bit Programme ausführen kann.

Um 16-Bit Programme unter Win64 ausführen zu können müsste man also ein Windows on Windows on Windows haben.

EDIT: die cmd.exe (Eingabeaufforderung) eine PE-Win32-Anwendung, command.com (DOS Prompt) ist eine COM-Anwendung. Mehr dazu hier:
https://de.wikipedia.org/wiki/Portable_Executable
https://de.wikipedia.org/wiki/COM-Datei

EDIT 2: Der PersistentHandler für die Dateiendungen exe und com sind die gleichen, d.h. com und exe Dateien sind identisch. Trotzdem ist die command.com eine DOS-EXE (MZ), während die cmd.exe eine NT-EXE (PE) ist.
Zuletzt geändert von compmgmt am Mo 24. Okt 2016, 19:11, insgesamt 1-mal geändert.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anleitung: FPC und MSDOS

Beitrag von Mathias »

Ich verstehe nicht, wieso DOS-Programme bei 64 den Bit-Versionen nicht gehen.
Weil M$ dies nicht für nötig hält, technisch kein Problem.
In dieser Richtung ist Linux mit Wine sogar kompatibler als M$ selbst, dort laufen 16,32 und 64Bit Programme. Immerhin gibt es noch den DOSBox Emulator, da laufen auch echte DOS-Programme.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten