Anleitung: FPC und MSDOS Cross-Compiler

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
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 »

Nixsager hat geschrieben:Mathias ic h hätte mal da ein paar Fragen.

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


Fast jeder Version hat eine Dos Release. Bis 3.0 war das go32v2 (32-bit dosextender), und ein Paar Versionen hatten auch provisorischen Unterstützung für andere Dosextender (wdosx, pmode)

Seit 3.0 gibt es zwei Dos targets, das 32-bit Go32v2, und das neuen 16-bits MSDOS Target. Das msdostarget hat mehrere RTLs fuer die unterschiedliche Memorymodels (tiny/small/medium/compact/large/huge)

2. Wenn Windows 9X nicht mehr unterstützt wird, wieso dann DOS?


Weil windows 9x geteilt war mit "Windows" RTL (also Windows XP+, NT4 und win2000 sind mittlerweile auch deprecated). Das gab nur ärger mit die Unicode Änderungen in 3.0.x, und keiner wollte dauerhaft daran arbeiten (zb mit ein eigenständiges Win9x target)

Schon mit 2.6.x gab es immer ärger mit Win9x, niemand testete damit bis der Release schon fertiggestellt war. Mann möchte es nur nutzen, niemand wollte daran arbeiten.

Mathias
Beiträge: 6193
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 versuchte ein altes TP-Programm zu kompilieren.

Die Array, welche auf Ports zeigt zB. Port[$123] werden nicht erkannt.
Mem[$A000:0000] hingegen schon. Somit ist FPC und MSDOS keine Ersatz für TP, wen man Systemnahe programmieren will.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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 »

Wenn du es so eng nimmst mit Kompatibilität, darf ich dann annehmen das du explizit TP Mode gesetzt hast? ({$mode tp} oder -So)

Sonst versuche mal "ports" am uses Klausel hinzufügen, aber ich glaub das soll in richtigen TP Mode automatisch passieren. Ist alles aber über 10 Jahre her, also kann mich irren.

Und welcher Target nutzt du genau? Go32v2 oder msdos ?

Freepascal ist ein kompatibeler Kompiler, aber kein Emulator. Es gibt ein paar ausnahmen auf die generellen Kompatibilität. (genau so wie underschiedliche TP Versionen auch nicht 100% kompatibel zu einander sind)

Mathias
Beiträge: 6193
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 »

Sonst versuche mal "ports" am uses Klausel hinzufügen

Dies hat genutzt.

inline wird auch nicht erkannt.

Code: Alles auswählen

    asm
      DB $fb
    end;
//    Inline( $FB ); 

Dies habe ich durch asm ersetzt.

Somit hat es eine EXE gegeben.
Aber richtig funktionieren tut sie nicht in der DOSBox, das Bild wird verzehrt und stürzt anschliessend ab. Könnte evtl. ein String/Unicode-Problem sein.
Es hat viele Stellen mit direkten Speicher-Zugriffen, Ports, etc.

Die original EXE, welch ich mit TP erzeugt hatte funktioniert ohne Fehler.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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 »

Mathias hat geschrieben:Die original EXE, welch ich mit TP erzeugt hatte funktioniert ohne Fehler.


Wie gesagt, FPC ist kein exacter Emulator, aber ein kompatibler Kompiler.

Funktionieren mit TP ist kein Garantie für Korrektheit des Programs, wenn der origineller Kode inkorrect ist, aber das nicht bemerkbar ist in TP (zb weil es kaum optimiert) kann es sein das es mit andere Kompiler raus kommt.

Mathias
Beiträge: 6193
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 »

Funktionieren mit TP ist kein Garantie für Korrektheit des Programs, wenn der origineller Kode inkorrect ist, aber das nicht bemerkbar ist in TP

Ich denke, das du da recht hast, als Programmier-Anfänger hatte ich rechte Murks mit TP gemacht.
Hauptsache, es funktionierte. :roll:

ZB. hatte ich Stringlängen so ermittelt:

Code: Alles auswählen

l := byte(s[0]);

In heutiger Sicht ein Murks. :oops:

Und so was rächt sich heute. :wink:
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 »

Dann sag einem mal der Murks macht, was daran so falsch ist, und wie man es besser macht (ohne Length zu nutzen)?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Mathias
Beiträge: 6193
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 »

Dann versuche mal mit einem neuem Pascal so was zu übersetzen.

Code: Alles auswählen

var
  s: string;
begin
  s := '1234567890';
  ShowMessage(IntToStr(byte(s[0])));   
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 »

Super nicht das was ich wollte. ;)

Lassen wir mal außen vor, das ich von Zeigern keine Ahnug habe.

Code: Alles auswählen

 
Function Length (Const S : LongString) : Longint;
 
begin
  Length:=PLongint(S)^;
end;
 

Was für FPC machen, wenn es dir Anweisung ausführen würde?
FPC scheint es auch nicht viel anders zu machen.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Mathias
Beiträge: 6193
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 denke, es gibt irgendwelche Konflikte mit der unit crt und gewissen int $10 Aufrufen.
Es wird GotoXY verwendet. Und es werden zB. der Rahmen des Haupt-Menus mit int $10 Aufrufen gezeichnet.
Wen ich das heute machen würde, da würde ich direkt in den VRAM schreiben.

Hier sind solche int $10 Aufrufe gelistet: https://en.wikipedia.org/wiki/INT_10H
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 »

Darf man mal sehen um was es sich handelt, was du gemacht hast?

Zu den Interuptlisten. Da gibt es ein paar gute.
Ich mache meine ganze Textausgabe über sie. Ob das so gut und effektiv ist weiß ich nicht.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Anleitung: FPC und MSDOS

Beitrag von Michl »

Mathias hat geschrieben:Dann versuche mal mit einem neuem Pascal so was zu übersetzen.

Code: Alles auswählen

var
  s: string;
begin
  s := '1234567890';
  ShowMessage(IntToStr(byte(s[0])));   
Das funktioniert heute immer noch mit {$H-} (Strings als ShortStrings definiert).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Mathias
Beiträge: 6193
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 »

Darf man mal sehen um was es sich handelt, was du gemacht hast?

Ich lade mal das Programm hoch, inklusive der neuen EXE.
Dateianhänge
PACMAN.zip
(57.96 KiB) 58-mal heruntergeladen
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 hat geschrieben:

Code: Alles auswählen

l := byte(s[0]);

In heutiger Sicht ein Murks. :oops:

Noch mal für Dumme.
Was ist daran Murks bzw. nicht Pascal-Konform.

Unter TP weil es kein Overload gibt, gibt es kein 'Length' für Arrays.
Und 'SetLength' gibt es auch nicht. Aber das kann man sich ja auf dem umgekehrten Wege machen.
Nur weiß ich nicht ob TP mit Größenänderungen eines Array klar kommt.

Nachtrag:
Leider doch nicht so einfach wie erhofft.
Nebenbei, hat einer eine Idee wie man die Größe von Arrays ändern und auslesen kann?
Zuletzt geändert von Nixsager am Fr 28. Okt 2016, 15:31, insgesamt 1-mal geändert.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Mathias
Beiträge: 6193
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 »

Der umgekehrte Weg geht auch, da die Laenge des Stringes vorgegeben ist.

In der Regel ist dies 256Byte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten