Hallo , guten Tag.
Vielen Dank das du meine vielen Fragen noch beantwortest für FutureOS.
Meine neue Aufgabe:
Ich möchte ein SCR-Bild vom E-RAM im Speicher &0000 hin packen , dann mit einem sogenannten Sprite oder anderes ausstatten im Hintergrund und dann fertig nach &c000 copieren.
Oder wie sieht bitte ein umschalten aus &0000>&c000>&0000
Das Bild aus dem E-RAM soll dann die Basis sein.
Diesen Text habe ich gefunden in der Beschreibung von FutureOs:
-Weiterhin steht der gesamte Bereich ab &0000 im ersten Block zur Verfügung, so lassen sich 2 Bildschirme realisieren .......
Wie sieht bitte diese Lösung aus?
Wie werden bitte die ROMS gesetzt?
Danke.
Bin mir nicht ganz sicher was Du meinst... aber ich versuchs mal...
Bild vom E-RAM nach &0000 kopieren, dann bearbeiten, und dann nach &C000 kopieren:
LD BC,(E_RAM) ;RAM Auswahl des Bildes in BC holen, BC = &7F??
OUT (C),C ;E-RAM des Bildes von &4000 bis &7FFF einblenden
;
LD HL,&4000 ;Start-Adresse des E-RAMs
LD DE,&0000 ;Ziel-Adresse ist 0
LD BC,&4000 ;Laenge = 16 KB
LD IX,F_MOVE ;IX = Zeiger auf super schnelle Kopier Funktion in ROM C
CALL ROM_A2C ;OS Funktion 'F_MOVE' aufrufen und damit das Bild nach 0 kopieren
;
LD BC,&7FC0 ;BC = RAM Auswahl für den Hautpspeicher
OUT (C),C ;Die ersten 64 KB wieder einblenden
; Hier erfolgt nur die Bildbearbeitung ab Adresse &0000, z.B. Sprite reinsetzen
LD HL,&0000 ;Start-Adresse des Bildes ist &0000
LD DE,&C000 ;Ziel-Adresse ist das Video-RAM ab &C000
LD BC,&4000 ;Laenge = 16 KB
LD IX,F_MOVE ;IX = Zeiger auf super schnelle Kopier Funktion in ROM C
CALL ROM_A2C ;OS Funktion 'F_MOVE' aufrufen und damit das Bild nach 0 kopieren
Bildschirme umschalten:
;Start des Video-RAMs ab &C000 setzen
;
LD BC,&BC0C ;CRTC Register 12
OUT (C),C ;selektieren
LD BC,&BD30 ;Wert &30 an den CRTC schicken
OUT (C),C ; und zwar an das zuvor selektiert Register 12
;Start des Video-RAMs ab &8000 setzen
;
LD BC,&BC0C ;CRTC Register 12
OUT (C),C ;selektieren
LD BC,&BD20 ;Wert &20 an den CRTC schicken
OUT (C),C ; und zwar an das zuvor selektiert Register 12
;Start des Video-RAMs ab &4000 setzen
;
LD BC,&BC0C ;CRTC Register 12
OUT (C),C ;selektieren
LD BC,&BD10 ;Wert &10 an den CRTC schicken
OUT (C),C ; und zwar an das zuvor selektiert Register 12
;Start des Video-RAMs ab &0000 setzen
;
LD BC,&BC0C ;CRTC Register 12
OUT (C),C ;selektieren
LD BC,&BD00 ;Wert &00 an den CRTC schicken
OUT (C),C ; und zwar an das zuvor selektiert Register 12
Hoffe das hilft! :smiley027:
Danke erstmal für deine Hilfe.
Ich hatte den Text gefunden oben in der FuturOS-Hilfe das man 2 Screens einrichten kann.
Nennt man das Doppelbuffering?
Danke.
Ja, die Doppel-Pufferung ist wenn man in einen Bildschirm schreibt und den anderen in der selben Zeit anzeigt.
Permanent ganze Bildschirme verschieben kostet allerdings viel Zeit. Es ist also am besten nicht immer alle neu zu machen. Aber zum testen ist es erstmal egal. Kommt immer darauf an was Du machen willst.
Super... es funktioniert.
Habe "Bild 1" aus dem E-RAM nach &0000 kopiert und dann 3x ab &0000 (oben links) den Wert 255 reingeschrieben und dann ab nach &c000.
Nur dieses Austeigen funktioniert nicht mehr:
LD HL,S64X32 ;Setze Bildschirm auf 64 Zeichen und 32 Zeilen CALL ROM_A
LD HL,TUR_E ;-> Ruecksprung zum OS
JP ROM_D
Danke.
Was bedeuten bitte diese neuen Start :
------------------------------------------
-;Start des Video-RAMs ab &C000 setzen
LD BC,&BC0C ;CRTC Register 12
OUT (C),C ;selektieren
LD BC,&BD30 ;Wert &30 an den CRTC schicken
OUT (C),C ; und zwar an das zuvor selektiert Register 12
;Start des Video-RAMs ab &8000 setzen
LD BC,&BC0C ;CRTC Register 12
OUT (C),C ;selektieren
LD BC,&BD20 ;Wert &20 an den CRTC schicken
OUT (C),C ; und zwar an das zuvor selektiert Register 12
;Start des Video-RAMs ab &4000 setzen
LD BC,&BC0C ;CRTC Register 12
OUT (C),C ;selektieren
LD BC,&BD10 ;Wert &10 an den CRTC schicken
OUT (C),C ; und zwar an das zuvor selektiert Register 12
;Start des Video-RAMs ab &0000 setzen
;
LD BC,&BC0C ;CRTC Register 12
OUT (C),C ;selektieren
LD BC,&BD00 ;Wert &00 an den CRTC schicken
OUT (C),C ; und zwar an das zuvor selektiert Register 12
------------------------------------------
Danke.
Damit kann man den Start des Video-RAMs an die Start-Adressen der vier 16 KB Blöcke verlegen, aus denen die 64 KB Hauptspeicher besteht.
Tippe es mal in BASIC ein, dann siehst Du es.
Quote from: cpcman on 16. January 2024, 15:55:10Nur dieses Aussteigen funktioniert nicht mehr:
LD HL,S64X32 ;Setze Bildschirm auf 64 Zeichen und 32 Zeilen CALL ROM_A
call rom_a
LD HL,TUR_E ;-> Ruecksprung zum OS
JP ROM_D
Da hat Dein Programm einen Fehler: Zwischen zweiter und dritter Zeile fehlt ja auch ein CALL ROM_A. Habe es in dem Zitat von Dir verbessert. S.o.
Hallo, danke.
Funktioniert Super.
Immer wieder gerne :)