Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

PSET vs. POKE in Screen 12

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 20.10.2005, 12:19    Titel: PSET vs. POKE in Screen 12 Antworten mit Zitat

Hallo.

Ich hab im Internet eine POKE-Routine für das Setzen von Pixeln in Screen 12 gefunden, aber bei mir ist die viiiiiel langsamer als QB's PSET-Befehl. Naja, wer's mal bei sich auf dem Rechner ausprobieren möchte findet ein Vergleichsprogramm (inkl. BAS+EXE) hier: Download lächeln

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
mjs



Anmeldungsdatum: 26.09.2005
Beiträge: 75
Wohnort: Adelheidsdorf

BeitragVerfasst am: 20.10.2005, 21:20    Titel: Antworten mit Zitat

Wenn du nur einen einzelnen Pixel setzen möchtest, könnte folgendes schneller sein, da die Funktion nur 1x PEEK und 1x POKE braucht:

Code:
DECLARE SUB pset12 (x AS INTEGER, y AS INTEGER, c AS INTEGER)
DEFINT A-Z

DIM SHARED bitmask(0 TO 7) AS INTEGER
mask = 256
FOR i = 0 TO 7
    mask = mask / 2
    bitmask(i) = mask
NEXT

SCREEN 12
CLS

FOR x = 0 TO 15
    pset12 x, 0, x
    pset12 x, x, x
NEXT

SLEEP
WHILE LEN(INKEY$): WEND

SUB pset12 (x AS INTEGER, y AS INTEGER, c AS INTEGER)

    DEF SEG = &HA000

    ' Enable write access for all planes
    OUT &H3C4, &H2
    OUT &H3C5, &HF

    ' Write mask
    OUT &H3CE, &H8
    OUT &H3CF, bitmask(x AND 7)

    ' Write mode 2
    OUT &H3CE, &H5
    OUT &H3CF, 2

    ' Overwrite mode
    OUT &H3CE, &H3
    OUT &H3CF, 0

    ofs = y * 80 + x \ 8
    dummy = PEEK(ofs) ' required to fill VGA read latches
    POKE ofs, c

END SUB


Wenn du sicherstellen kannst, dass DEF SEG und die VGA-Zugriffs-Modi sich nicht ändern, kannst du die ja aus der Funktion auslagern, was diese Funktion zusätzlich beschläunigen sollte.

Gruß,
Mark
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 20.10.2005, 22:02    Titel: Antworten mit Zitat

Hallo.

Danke für den Tipp. lächeln Das Setzen der Pixel funktioniert auch, bloß die Textausgabe will nicht mehr so richtig funktionieren, wenn vorher so Pixel gesetzt wurden: neutral



Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
mjs



Anmeldungsdatum: 26.09.2005
Beiträge: 75
Wohnort: Adelheidsdorf

BeitragVerfasst am: 21.10.2005, 00:31    Titel: Antworten mit Zitat

Kein Problem. Einfach "write mode" auf 0 setzen und "write mask" auf 255. Um ganz sicher zu gehen, sollte man noch den Schreib-Zugriff für alle Planes erlauben und den Overwrite-Modus aktivieren.

Code:
' Enable write access for all planes
OUT &H3C4, &H2
OUT &H3C5, &HF

' Write mask
OUT &H3CE, &H8
OUT &H3CF, &HFF

' Write mode 0
OUT &H3CE, &H5
OUT &H3CF, 0

' Overwrite mode
OUT &H3CE, &H3
OUT &H3CF, 0


Danach funktioniert QB's Textausgabe wie gewohnt.

Gruß,
Mark
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 21.10.2005, 11:04    Titel: Antworten mit Zitat

Funktioniert super! lächeln

Nur auf meinem seltsamen Computer ist PSET immer noch fast doppelt so schnell. :/ Ich werd's mal auf einem anderen Computer mit DOS-Startdiskette versuchen.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz