TEST OF BYTE ABSOLUTE $A0000000; wie funktioniert das in TP?

  • Wie funktioniert das bitte :

    TEST OF BYTE ABSOLUTE $A0000000;


    Wie kann die Adresse TEST erhöhen und wie kann man bitte ein Byte an diese neue Adresse übergeben ?


    Danke.

  • Das funktioniert so nicht, was du suchst ist ein Zeiger.


    ich schau mal kurz


    EDITH: in deinem Falle könntest du z.b. mit MEM[Segment: Offset] arbeiten; Also z.b.


    ansonsten geht z.b.


    uses System;

    var x:^byte


    x:=SEGA000; //ich weiß grad nicht wie ich dem Zeiger direkt eine Adresse geben kann :-/

    inc(x);

    x^:=dein Wert den du ausgeben willst.


    Absolute ist wiederrum nützlich wenn du Variablen aufteilen willst, z.b.


    var wort:word;

    var bite:array[0..1]of byte Absolute wort;


    damit lässt sich einfach auf das Hi und Lo byte der Variable wort zugreifen.

    Von allen Dingen auf Erden ist die Intelligenz am gerechtesten verteilt: Jeder glaubt, er hätte genug davon.

    4 Mal editiert, zuletzt von Dosenware ()

  • Hast du dazu mal Kontext? Das sieht mir nach Pascal aus, aber die Syntax ist mir nicht geläufig.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Es ist Turbo Pascal 6.0


    Der Compiler spuckt auch keine Fehlermeldung aus.


    Ich kann im ModeX-VGA an dieser Stelle nur mit einer kompletter Adresse spielen ohne Segment.



    Borlande c:

    VGA[active_page+(y<<6)+(y<<4)+(x>>2)]=color;


    Und dieses Funktioniert nicht mit der Pixelübergabe mit dem Segment beim Mode x:

    Mem [vgapage:activ_page+(y shl 6)+(y shl 4)+(x shr 2)] :=c;


    Es wird so keine Pixel übertragen.

    Es muss wie du auch sagst ein Zeiger sein.


    das ist das Program für den Mode x in TP

    und so in Borland c++ welches funktioniert mit dem Mode x wo ich die beiden Seiten mit 2 Linien fülle und dann immer umschalten kann:






    Gruss

    7 Mal editiert, zuletzt von funkheld ()

  • Ähm, was schreibst du auf den Ports rum?

    EDITH: sehe schon, höhere Auflösung, Bankswitching

    EDITH2: aber warum bei Mode 13h - der passt doch in die 64k - Zeichnest du Offscreen?

    EDITH3: Achso MODE X


    schau mal oben in meinen Beitrag... da ist noch ein kleines Demoprogramm...


    EDIT:

    Code
    procedure SetPixel(x: word; y: word; c: byte);
    
    begin
    {port[seq_addr] :=$02;
    portw[seq_data]:= (x and 3) shl 1;}
    Mem [vgapage:{activ_page+}(y shl 6)+(y shl 4)+(x shr 2)] :=c;
    end;

    funktioniert: ich vermute die Daten landen in der falschen Page, bzw das MEM läuft über - 320x240Pixel sind ~76kb dort sind aber nur 16Bitwerte zulässig

    bzw. über Port machst du ja einen Seitenwechsel - aber beim eigentlichen Zugriff ignorierst du das...

    Von allen Dingen auf Erden ist die Intelligenz am gerechtesten verteilt: Jeder glaubt, er hätte genug davon.

    5 Mal editiert, zuletzt von Dosenware ()

  • Hmm..danke.

    Ich habe die Auflösunf 320x200.


    Meinst du den Seitenwechsel hier : vgapage = $a000; beim Segment?


    Wie müsste dann bitte der 64kb Seitenwechsel hier statt finden im Segment : $a000 Seite 1 , $...... Seite 2 bis Seite 4 ?


    Danke.

  • Ich weis jetzt nicht wie du die Seiten eingestellt hast, von den Werten her schauts nach 16000 bytes aus (müssten eigentlich bei 16kb 16384bytes sein, oder lassen sich tatsächlich genau 16000 bytes einstellen)

    aber du müstest:


    _offset:=pixel_pro_Zeile*y+x;

    page:=_offset div Seitengröße

    _offset:=_offset-page*Seitengröße


    rechnen.Ich finde leider nicht mehr mein Apfelmännchen, da hatte ich 1024x768x16bit und entsprechend viele Seitenwechsel...

    PS. und bei _offset aufpassen wegen überläufen... (bei word gilt: 65535+1=0)

    Von allen Dingen auf Erden ist die Intelligenz am gerechtesten verteilt: Jeder glaubt, er hätte genug davon.

  • Das geht nur mit 16000Byte für die Seitenwahl . Hat was mit der Bitverschiebung zu tun in jeder Seite.

    Jede Grafikseite kann mit 64000Pixel gefüllt werden ergibt 256kb.


    Mit diesem C-Programm schreibe ich auf einer Seite eine Linie rot und auf der anderen Seite 64000 gelbe Pixel.

    Taste Q und Taste W.


    Mit der Taste F kann ich dann zwischen beiden Seiten Umschalten.


    Die Seiten sind im Mode X : 0; 16000; 32000; 48000; Seite 1-4.

    Ich kann alle Seiten mischen .

    Mein Muster unten sind Seite 2 und 3 , die ich dann wechselseitig in den Vordergrund setze.


    Die Dateiendung txt umbenennen in exe.



    Das Programm habe ich umgeschrieben für TP, funktioniert aber nicht in TP.

  • Ich habe das Sytem komplett neu aufgebaut für Mode x für mich in TP. Hat etliche Stunden gedauert.


    Habe hier und da neue Befehle entdeckt die man nicht im Zusammenhang findet weil das eigentliche Mode X nicht benutzt wurde als einzelnen Screen umschalten

    oder kopieren. Dadurch kam eine Befehlssuppe zustande durch die verschiedenen Ansprüche die nicht die Grundidee vertraten wie das ABC.


    Auch die ASM-Code Schlangen für Mode X vertraten immer verschiedene Ideen aber nicht das Grundprinzip.


    Ich habe für das Mode X in TP kein ASM genutzt, weil das TP schon schön schnell ist.


    Gruss

    2 Mal editiert, zuletzt von funkheld ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!