Ports mit Turbo Pascal abfragen

  • Hallo zusammen,


    zur Zeit programmiere ich mit Turbo Pascal ein
    kleines Spiel für den Joyce. Aktuell unterstützt mein Programm als
    Eingabemedium nur die Tastatur. Da ich ein DK'Tronics Joystick und Sound
    Interface besitze, würde ich auch gerne die Joystickeingabe
    realisieren. Leider sind meine Versuche aber bislang gescheitert.
    Vielleicht weiß hier jemand Rat?


    Unter Mallard Basic kann ich mit dem folgenden Programm den Joystick erfolgreich ansprechen:


    Code
    10 OUT 170,7
    20 OUT 171,63
    30 OUT 170,14
    40 J=INP(169)
    50 IF J=251 THEN  PRINT "links"
    60 IF J=247 THEN  PRINT "rechts"
    70 IF J=239 THEN  PRINT "unten"
    80 IF J=223 THEN  PRINT "oben"
    90 IF J=191 THEN  PRINT "Feuer"
    100 GOTO 30


    Ich habe versucht das kleine Testprogramm unter Turbo Pascal nachzubilden, leider wird aber stets der Wert 255 zurückgeliefert:



    Die Beschreibung zum Interface findet man hier:
    http://www.cpcwiki.eu/forum/nc…ion=dlattach;attach=13949
    Leider enthält sie nur Beispiele in Basic und Maschinencode und nicht zu Turbo Pascal.



    Viele Grüße,
    Marcus

  • Hallo zusammen,


    wenn ich die Schleife um eine Zeile Joy:=0; ergänze, bleibt das Ergebnis leider gleich, bios(169) liefert immer den selben Wert. Ich denke, dass meine Fehler in den anderen bios-Befehlen liegt. Ich bin mir da auch äußerst unsicher, ob ich überhaupt auf dem richtigen Weg bin, von daher wäre ich auch über eine auf dem Apple II mit Turbo Pascal erstellte Lösung dankbar.


    Viele Grüße,
    Marcus

  • Die Wertzuweisung in Turbo Pascal erfolgt über := , soweit ist das schon richtig.


    Ich bin mir nur nicht sicher, ob die Basic Befehle "OUT" und "INP" in Turbo Pascal mit dem Befehl "BIOS" nachgebildet werden können.
    Mit dem Zugriff auf Maschinenroutinen, Speicherbereiche und Ports kenne ich mich leider nicht aus.
    Ich habe noch etwas im Netz gesucht und bin auf folgenden Artikel gestoßen:
    http://www.cirsovius.de/CPM/Pr…/Interface/Interface.html
    In dem Artikel ist ein kleines Turbo Pascal zu finden, die dem die Baudrate der serielle Schnittstelle eingestellt wird. Hierfür wird eine Feldvariable "port" verwendet. Dabei handelt es sich offenbar um eine fest definierte Variable, die nicht explizit deklariert werden muss. Ich denke ich werde hiermit mal etwas rumprobieren.

  • Ich hab einfach bei gidf.de ;) "turbo-pascal cpm" eingegeben und bin recht schnell auf ein PDF des TP3 Manuals gestoßen, dass auch Seit 291,
    das vordefinierte Port-Array beschreibt, gleich nach dem vordefinierten Mem-Array. http://bitsavers.trailing-edge…Reference_Manual_1986.pdf


    Da wird das recht schön erklärt. Ich hab mein Wissen über Pascal auch aus dem originalen TP 3.0 Handbuch. Die waren damals noch echt gut gemacht.


    Das Genie beherrscht das Chaos

  • Ich bin mir nur nicht sicher, ob die Basic Befehle "OUT" und "INP" in Turbo Pascal mit dem Befehl "BIOS" nachgebildet werden können.


    Ich vermute auch, dass hier das Problem zu suchen ist.


    Die BIOS Funktion sollte dazu dienen, vom BIOS bereitgestellte Funktionen, z.B. "Bildschirm löschen", "Zeichen ausgeben", etc. aufzurufen - beim PC wurde, wenn ich mich korrekt erinnere, dazu das erste Argument in den entsprechenden Software-Interrupt umgewandelt, die weiteren Parameter in Regsitern als Parameter für die Interrupt-Routine zur Verfügung gestellt.


    Ein IN und OUT sollte sich mittels "port" realisieren lassen.


    aus


    10 OUT 170,7
    20 OUT 171,63
    30 OUT 170,14


    wird dann:


    port[170] := 7;
    port[171] := 63;
    port[170] := 14;


    ein


    Joy:=bios(169);


    müsste entsprechend in


    Joy:=port[169];


    umgewandelt werden.

  • Herzlichen Dank für die Unterstützung!


    Die Realisierung mittels "port" hat das gewünschte Ergebnis gebracht!


    Auch das TP3 Handbuch wird mir sicher noch wertvolle Hilfe leisten.


    Ich finde es wirklich klasse wie schnell man hier auch für 30 Jahre alte Systeme Hilfe erhält!



    Viele Grüße,
    Marcus