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:

Page Flipping in SCREEN 13 Mode unter QBASIC?

 
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
zwergnase



Anmeldungsdatum: 03.01.2006
Beiträge: 26
Wohnort: Frankfurt am Main

BeitragVerfasst am: 21.07.2006, 12:11    Titel: Page Flipping in SCREEN 13 Mode unter QBASIC? Antworten mit Zitat

Weiß jemand vielleicht wie ich page flipping im SCREEN 13 Modus unter QBASIC realisiere? Der Modus unterstützt ja leider keine Seiten. Also hab ich n Array erzeugt. In das ich zeichnen kann, Double buffering hab ich damit schon realisiert. lächeln
Um page flipping anzuwenden muss ich ja dafür sorgen das der Zeiger der auf den auszugebenden Speicherbereich zeigt, also im Normalfall $HA000
jetzt auf meinen vom Array reservierten Speicher wechselt. Wie aber mach ich so was? Kann man das mit QBASIC machen, oder ist da ASM nötig?

Martin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 21.07.2006, 12:38    Titel: Antworten mit Zitat

Hi,

also mit QBasic direkt geht das leider nicht.

Eine Möglichkeit wäre die AK-LIB zu verwenden:
http://www.iconsoft.de/download/ak15.zip

Dabei handelt es sich um eine SVGA-LIB mit VESA-Unterstützung.
Dort kannst du mit dem Grafikmodus &H12E auch deine 320x200x256 realisieren und hast dazu noch echte zusätzliche Bildschirmseiten.
Diese können dann mit den Befehlen
Code:

CALL XSCREEN (&H12E)      ' setzt den Grafikmodus 320x200x256
CALL SET.VIEW.PAGE(0)     ' 0 = die Seite die momentan zu sehen sein soll
CALL SET.WORK.PAGE(0)     ' 0 = die Seite auf der du arbeitest

gesetzt werden.

Eine Anleitung ist beim zip-Archiv dabei.


Ob man den RAM-Pointer &HA000 auch woanders hinsetzen kann per ASM müßte ich selber nochma nachschauen. Dürfte aber eigentlich nur eine Umleitung des DMA-Kanals sein wenn ich mich nicht stark täusche.

MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
zwergnase



Anmeldungsdatum: 03.01.2006
Beiträge: 26
Wohnort: Frankfurt am Main

BeitragVerfasst am: 21.07.2006, 13:07    Titel: Danke für den Tip Antworten mit Zitat

Hallo und danke für die schnelle Antwort. Die lib ist sicher ne gute Lösung.
Wollte allerdings auch mas über die Vorgänge in meinem Computer erfahren.
Deshalb dacht ich mir das ich das selbst erledige, wenn das ganze nicht mit riesigem Aufwand verbunden ist. Aber so wie sich das anhört scheint das ja net so schwer zu sein. Also ASM!!
Weis einer vieleicht wie man das realisieren kann in ASM?

Martin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 21.07.2006, 13:19    Titel: Antworten mit Zitat

Wenn das hier einer weiß, dann A.K.! grinsen
_________________

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
zwergnase



Anmeldungsdatum: 03.01.2006
Beiträge: 26
Wohnort: Frankfurt am Main

BeitragVerfasst am: 21.07.2006, 14:13    Titel: Eventuelles Problem mit VideoRAM begrenzung Antworten mit Zitat

Mir ist da noch was aufgefallen.
Beim Page flipping wird ja normalerweise zwischen zwei Speicherbereichen im VideoRAM der Grafikkarte umgeschaltet. Im SCREEN 13 benötigt eine Seite ja den gesammten zur verfügung gestelleten Grafikspeicher, weshalb keine Seiten zur Verfügung gestellt werden. Das bedeutet ja aber das ich um page flipping hinzubekommen zwischen dem Speicher der Grafikkarte und dem Arbeitsspeicher schalten muss. Geht das ohne Probleme? Ist das langsamer als das umschalten im Grafikspeicher?
Ist das dann vieleicht sogar langsamer als double buffering?

Martin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 21.07.2006, 14:55    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Wenn das hier einer weiß, dann A.K.! grinsen


immer ruhig mit den jungen Pferden. grinsen


B2T:
Also per ASM sollte das möglich sein.
Meine Idee wäre es (wenn man den DMA mal weglässt) sich einfach eine MEMCOPY-Routine in ASM fertig zumachen.
Das ganze in debug.exe schreiben und in QB einbinden und mit CALL ABSOLUTE aufrufen.

DEF SEG = varseg(prog$)
CALL ABSOLUTE (datseg%, datoff%, sadd(prog$))

Code:

    PUSH DS
    PUSH BP
    MOV BP, SP

    MOV DS,[BP+0A]           ' DS:SI mit dem Ram-Pointer der virtuellen
    MOV SI,[BP+08]           ' Seite laden (Aus Übergabe)

    MOV AX,A000              ' ES:DI mit dem VRam-Pointer laden
    MOV ES,AX                ' A000:0000
    XOR DI,DI                   

    MOV CX,FA00              ' CX als Zähler mit 64000 (320x200) laden
    CLD                      ' Direction-Flag löschen

N1:
    LODSW                    ' Word aus Datenbereich laden (AX = [DS:SI])
    ES:                      ' Word aus VRam laden (BX = [ES:DI])
    MOV BX,[DI]
    XCHG AX,BX               ' SWAP AX, BX
    MOV [DI],BX              ' getauschtes Word wieder nach [ES:DI]
    DS:                      ' getauschtes Word wieder nach [DS:SI-2]
    MOV [SI-2],AX            ' (lodsw bewirkt eine SI-Inkrementierung um 2)
    INC DI                   ' DI = DI + 2, (INC sollte schneller sein als ADD)
    INC DI
LOOP N1
   
POP BP
POP DS
RETF


so sollte das gehen. Jedesmal wenn du das aufrufst wird der Inhalt des VRAM mit dem deines eigenen Datenfeldes ausgetauscht und umgekehrt.
Zum Einbinden dieses Programmes hier eine Anleitung:
http://www.iconsoft.de/index.php?show=tutorial_asm

Das Programm selber ist ungetestet, sollte aber laufen.

MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
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