Dos GO32V2: Buffer an Int 13h übergeben

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Dos GO32V2: Buffer an Int 13h übergeben

Beitrag von RSE »

Hallo!

Ich probiere gerade in der Turbo Pascal ähnlichen IDE im Dos ein Partitionsprogramm unter Benutzung des INT 13h zu programmieren. Manchen Funktionen des INT 13h muss man einen Buffer übergeben, weil sie so viele Daten liefern (z.B. die Funktion AH=48h). Dieser wird mittels Segment:Offset in die Register DS:SI übergeben:

Code: Alles auswählen

{$asmMode Intel}
{$Mode ObjFPC}
{$F+}
...
var
  S, O: Word;
  p: Pointer;
begin
  getmem(p,$1A);
  try
    S := LongWord(p) div 16;
    O := LongWord(p) mod 16;
    asm
      MOV AX, S
      PUSH DS
      MOV DS, AX  // wenn ich diese Zeile auskommentiere, gibt es keinen Runtime-Error
      POP DS
    end ['AX','DS'];
  finally
    freemem(p,$1A);
  end;
end;
Unter der Annahme, dass getmem den Speicher unter DOS sowieso im 1MB-Bereich reserviert, sollten Segment und Offset so korrekt berechnet sein. Das Problem ist aber nun, dass das Programm immer Runtime-Errors gibt, wenn ich S an das Register DS übergeben will, egal wie ich es mache.
Wo liegt mein Fehler? Funkt FPC zwischen PUSH und POP noch dazwischen und erwartet im DS einen anderen Wert?
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Dos GO32V2: Buffer an Int 13h übergeben

Beitrag von RSE »

Wo genau sollte ich die Frage am Besten stellen, hier is ja vielleicht nich so ganz die optimale Stelle im Internet...
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Dos GO32V2: Buffer an Int 13h übergeben

Beitrag von theo »

Vielleicht auf die Mailinglist fpc-pascal@lists.freepascal.org
http://www.freepascal.org/maillist.var" onclick="window.open(this.href);return false;

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Dos GO32V2: Buffer an Int 13h übergeben

Beitrag von RSE »

Ich hab eine Stelle speziell für Assembler gefunden, leider offenbar nicht allzu oft besucht:
http://community.freepascal.org:10000/b ... m_id=24089

Mit Mailinglisten hab ich schlechte Erfahrungen gemacht:
1. bekommt man jede Menge Müll, den man nicht haben will (der "andere" gewollte Verkehr dort)
2. bekommt man jede Menge Spam (das, was man auf der Mailingliste nicht haben will)
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Dos GO32V2: Buffer an Int 13h übergeben

Beitrag von theo »

Afaik kannst du dich registrieren und nach dem Abklären deiner Frage ankreuzen, dass du die Mails nicht mehr haben willst.
Du bleibst aber registriert (wenn du willst).

Antworten