Hallo, guten Tag.
Ich habe ein Bild Mode 2 erstellt mit JavaCPC-Paint als test.scr
80x200 (16000 ohne den Header). Header wird von JavaCPC mit 512 Byte dazu erstellt.
Wie kann ich dieses test.scr jetzt bitte einlesen in &c000 mit FutureOS ?
Danke.
Folgendermaßen (also ich gehe mal davon auf, dass das Bild einen Header hat):
- Disc unter FutureOS einlegen,
- DIRectory einlesen, DIR icon oder Taste 'd'
- Bild-Datei anklicken
- Nun auf das TYPE Icon klicken oder Taste 'v' für view
- Im Type Menu die 1 drücken (Datei anzeigen)
- Der Header wird angezeigt, Space drücken
- Und nun kann mit den Cursor-Tasten sowohl der Bildschirm Modus (0-3) als auch das Bild-Format eingestellt werden. :winke0002:
Danke für die Info.
Ich wollte bitte das Bild laden in einem Spiel auf Tastendruck , also nicht vorher.
Ah, alles klar. Dazu hänge ich Dir mal den Source von 'Lade Hintergrund Bild' an.
Das Programm läd ein Bild ins Erweiterungs-RAM. Von dort aus kann es dann später angezeigt werden.
Falls Du einen anderen Source Code brauchst, lasse es mich wissen. :smiley027:
Hallo , danke für deine Unterlagen.
Habe noch schnell einen spezifische Source gemacht, um ein Bild ins Video-RAM zu laden. Wie geht das?
- Programm assemblieren
- FutureOS starten und auf Laufwerk A klicken, um DIR einzulesen
- Nach &9000 springen (z.B. im Monitor)
Bild wird gezeigt, dann Taste, Rückkehr zum OS
Funktioniert was nicht? Dann bitte melden :)
Es funktioniert nicht so.
Bei ASM heisst das Bild : LBI DB &00,"TEST-PICSCR"
Auf der DSK heisst das Bild : "TEST-PIC.SCR"
Ich habe es umbenannt.
Funtioniert trotzdem nicht.
Auch nicht im MONITOR.
Es wäre schön wenn du mal das ganze Bild in &c000 laden könntest
damit ich es einmal dort sehe.
Und dann mit Tastendruck zurück gehe nach FutureOS :
-------------------------
LD HL,WATA ;Warte auf Tastendruck
CALL ROM_C
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.
Das Programm tut ganz genau was Du willst, und es funktioniert auch. Bitte den Anweisungen in meinem vorigen Post folgen.
Wenn Du das Bild umbenennst, dann kann es natürlich vom Programm nicht gefunden werden.
Unter FutureOS gibt es keinen Punkt zwischen Dateinamen und Extension, auf diese Weise kann man Dateien freier und schöner benennen.
Also, ich hänge Dir die DSK nochmals an, und zwar mit dem Programm fertig assembliert.
Bitte einfach '-Test' starten. (Der Source Code ist 'LadeBild.MAX'
Danke für die Hilfe. :smiley027: :smiley027: :smiley027:
Es funktioniert jetzt super, habe es mit pasmo.exe compiliert.
Wusste nicht das der Name 8 Buchstaben sein muss.
Kann jetzt mehrere SCR mit Tastendruck durchschalten.
Man kann schon eine kleine Geschichte machen mit Bildern(Screens)
--------------------------------
ORG &9000 ; 97 Zeilen
;In diesem Beispiel wird ein Bild von Laufwerk A geladen
;Das Inhaltsverzeichnis von LW A muss bereits eingelesen sein!
;Lade ein Beispiel-Bild --> Warte auf Tastendruck --> Zurueck zum OS!
LADE_BILD
LD HL,S80X25
CALL ROM_A ;Setze Bildschirm auf 80 Zeichen & 25 Zeilen
LD A,(REG_PC+1) ;A = Quell-Medium von dem das Hauptprogramm gestartet wurde
ld a,0 ;In diesem Beispiel wird das Medium = Laufwerk A gesetzt #########
;Im fertigen Programm muss diese Zeile ^ entfernt werden #########
LD (MEDIUM),A ;Sichere Quell-Medium A..O (0-14) des zu ladenden Bildes
LD DE,LBI1 ;Zeiger auf Namen des Bildes
CALL LABI ;Bild laden
LD HL,WATA ;Warte auf Tastendruck
CALL ROM_C
LD DE,LBI2 ;Zeiger auf Namen des Bildes
CALL LABI ;Bild laden
LD HL,WATA ;Warte auf Tastendruck
CALL ROM_C
LD DE,LBI3 ;Zeiger auf Namen des Bildes
CALL LABI ;Bild laden
LD HL,WATA ;Warte auf Tastendruck
CALL ROM_C
LD HL,S64X32 ;Setze Bildschirm auf 64 Zeichen und 32 Zeilen
CALL ROM_A
LD HL,TUR_E ;-> Ruecksprung zum OS
JP ROM_D
;Name des zu ladenden Bildes
;
LBI1
DB &00,"BILD0001SCR" ;User-Nummer + Name + Extension
LBI2
DB &00,"BILD0002SCR" ;User-Nummer + Name + Extension
LBI3
DB &00,"BILD0003SCR" ;User-Nummer + Name + Extension
;Name des Quell-Mediums des Bildes
;
MEDIUM
DB &00
;Bild nach &C000 laden!
;
;Einsprung
;---------
; DE = Zeiger auf User + Name + Extent des Bildes
;(MEDIUM) = Quell-Medium des Bildes 0-14 (A-O)
;
;Aussprung
;---------
;A = &FF --> Bild wurde korrekt geladen
;A <> &FF --> Beim Laden ist ein Fehler aufgetreten
LABI
LD A,&02
LD (REG08_4),A ;Laden in Hauptspeicher
LD HL,&C000
LD (REG16_3),HL ;Ziel-Adresse &C000 = Video RAM
LD A,(MEDIUM) ;Quell-Medium
LD IX,LADE_N
CALL ROM_A2C ;Lade Bild
INC A
JR NZ,LB_ERR ;A<>&FF --> Fehler beim Laden!
LD BC,&FA7E
LD A,(MO_ST)
OUT (C),A ;Laufwerks-Motoren ausschalten
LD A,&FF
RET ;A = &FF --> Bild wurde erfolgreich geladen!
;Fehler beim Laden
LB_ERR
LD BC,&FA7E
LD A,(MO_ST)
OUT (C),A
XOR A
RET
;EQUates
REG_PC EQU &B8DA ;RAM
REG08_4 EQU &B8E0
REG16_3 EQU &B8EA
MO_ST EQU &B97F
ROM_A EQU &FF00 ;ROMs A-M
ROM_C EQU &FF0C
ROM_D EQU &FF12
ROM_A2C EQU &FF2A
S64X32 EQU &D5A8 ;ROM A
S80X25 EQU &D60E
WATA EQU &FD38 ;ROM C
LADE_N EQU &FD5C
TUR_E EQU &FE9D ;ROM D
------------------------------------
Danke.
Hallo guten Tag.
Gibt es bitte zwei Bereiche für 16kb die man mit Grafik-SCR bearbeiten/füllen kann und umschalten kann? Beide sichtbar schalten nach Wahl?
Oder von den einen Bereich kopieren zum anderen Bereich &c000?
Danke
Hallo , guten Tag.
Ich kann mit deinem Programm auch Mode 1 einstellen und ein Farbiges Bild SCR anzeigen.
Ist der Kopf bitte richtig dafür? Es funktioniert aber.
Wie kann ich jetzt bitte dieses INK und Border dafür einstellen in FutureOs?
Ich habe die 26 Farben von hier mit RGB für mein Malprogramm zusammengestellt:
https://www.cpcwiki.eu/index.php/CPC_Palette
Wenn ich ein SCR herstelle wird dafür eine PAL-Datei hergestellt.
Wie kann man die bitte in FutureOs nutzen?
Danke.
---------------------------
LD A,&81 ;Dieser Wert symbolisiert MODE 1 (siehe Bits 1 und 0)
;Beide ROMs sind eingeschalten (Bits 3 und 2)
LD (RAMCHAR),A ;Wert aus Register A in OS RAM-Variable RAMCHAR schreiben
LD B,&7F ;Via Port &7Fxx ist das Gate-Array erreichbar
OUT (C),A ;Wert aus Register A an Port in BC (=&7Fxx) schicken
;Damit auf MODE 1 und ROM Zeichensatz schalten
----------------------------
Quote from: cpcman on 12. January 2024, 16:39:54Hallo guten Tag.
Gibt es bitte zwei Bereiche für 16kb die man mit Grafik-SCR bearbeiten/füllen kann und umschalten kann? Beide sichtbar schalten nach Wahl?
Oder von den einen Bereich kopieren zum anderen Bereich &c000?
Danke
Das ist gar kein Problem, man läßt sich vom OS einfach einen 16 KB Block im E-RAM suchen und reservieren. Und dort kann man dann ein Bild reinladen.
Bei einer 512 KB Erweiterung ist so für ca. 30 Bilder Platz
Will man die Bilder d&4000 nach &C000 (also LD HL,&4000:LD DE,&4000:LD BC,&4000:LDIR)
Dazu kann ich ja mal einen Beispiel-Code machen.
Hat jemand gerade ein DSK da mit ein paar Beispielbildern?
Quote from: cpcman on 13. January 2024, 09:46:03Ich habe die 26 Farben von hier mit RGB für mein Malprogramm zusammengestellt:
https://www.cpcwiki.eu/index.php/CPC_Palette
Wenn ich ein SCR herstelle wird dafür eine PAL-Datei hergestellt.
Wie kann man die bitte in FutureOs nutzen?
Ja, genau das ist die Farbtabelle. Wie man Farben einstellt, dafür gibt's Beispiele in der OS-LIB. Die hänge ich hier mal an.
Relevante Beispiele:
;---=== Set Screen Colors of Border, Paper and Pens // CLear Screen ===---;
NN = any 8 Bit value &00-&FF /// Enter correct value for NN in Source!
;For selecting a COLOR please use hardware numbers, see table HWFW
;set BORDER color
;
;changes AF, BC
LD BC,&7F10 ;border
OUT (C),C
LD A,NN ;new hardware border color &40-&5F
OUT (C),A ;see table
LD (BORDER),A ;write color in RAM
;set PAPER color
;
;changes AF, BC
LD BC,&7F00 ;INK 0
OUT (C),C
LD A,NN
OUT (C),A
LD (INK_0),A ;new hardware paper color &40-&5F
;set PEN 1 color
;
;changes AF, BC
LD BC,&7F01 ;INK 1
OUT (C),C
LD A,NN
OUT (C),A
LD (INK_1),A ;new INK 1 color &40-&5F
;set PEN 2 color
;
;changes AF, BC
LD BC,&7F02 ;INK 2
OUT (C),C
LD A,NN
OUT (C),A
LD (INK_2),A ;new INK 2 color &40-&5F
;set PEN 3 color
;
;changes AF, BC
LD BC,&7F03 ;INK 3
OUT (C),C
LD A,NN
OUT (C),A
LD (INK_3),A ;new INK 3 color &40-&5F
;hardware color values, equivalent to
;BASIC colors from 0 to 26(31) ordered.
;
;Hardware-Farbwerte, entsprechend den
;OS Farben von 0 bis 26(31) geordnet.
HWFW
; 0 1 2 3 4 5 6 7
DB &54,&44,&55,&5C,&58,&5D,&4C,&45
; 8 9 10 11 12 13 14 15
DB &4D,&56,&46,&57,&5E,&40,&5F,&4E
; 16 17 18 19 20 21 22 23
DB &47,&4F,&52,&42,&53,&5A,&59,&5B
; 24 25 26 *27 *28 *29 *30 *31
DB &4A,&43,&4B,&44,&4D,&59,&47,&4F
;BASIC color values from 0 to 26, ordered
;through hardware color values &40-&5F
;
;OS Farbwerte von 0 bis 26, nach den
;Hardware-Farbwerten &40-&5F geordnet
OSSW DB 13 ;&40
DB 27 ;&41 ***
DB 19 ;&42
DB 25 ;&43
DB 01 ;&44
DB 07 ;&45
DB 10 ;&46
DB 16 ;&47
DB 28 ;&48 ***
DB 29 ;&49 ***
DB 24 ;&4A
DB 26 ;&4B
DB 06 ;&4C
DB 08 ;&4D
DB 15 ;&4E
DB 17 ;&4F
DB 30 ;&50 ***
DB 31 ;&51 ***
DB 18 ;&52
DB 20 ;&53
DB 00 ;&54
DB 02 ;&55
DB 09 ;&56
DB 11 ;&57
DB 04 ;&58
DB 22 ;&59
DB 21 ;&5A
DB 23 ;&5B
DB 03 ;&5C
DB 05 ;&5D
DB 12 ;&5E
DB 14 ;&5F
Also ganz einfach:
LD BC,&7F00 + 0...15 ;Pen auswählen 0-15 (16 = Border)
OUT (C),C
LD BC,&7F00 + &40...&5F ;Farbert auswählen 64-95 (Farbwert, siehe Tabelle oben)
Eine
PAL Datei zu laden und zu analysieren, das ist sicher auch möglich. Sag mir bitte welches Programm diese .PAL Datei erzeugt hat. Ist es die vom OCP ART Studio? Könntest Du bitte mal ein Beispiel davon anhängen? Dann kann ich die analysieren.
Hier sind bitte 3 Bilder für Mode 2 in der Zip.
Wie funkioniert das bitte bei 512kb und bei 4MB?
Das ist meine Idee die 3 Bilder zuladen in die 512kb:
Umsetzen kann ich es leider nicht.
-------------------------------------------
LD BC,&7FC4 ;new RAM (between &4000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
Bild1 in &4000-&7000 laden
LD BC,&7FC0 ;new RAM (between &c000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
LD BC,&7FC5 ;new RAM (between &4000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
Bild2 in &4000-&7000 laden
LD BC,&7FC0 ;new RAM (between &c000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
LD BC,&7FC6 ;new RAM (between &4000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
Bild3 in &4000-&7000 laden
LD BC,&7FC0 ;new RAM (between &c000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
--------------------------------
Bilder zurück:
--------------------------------
LD BC,&7FC4 ;new RAM (between &4000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
Bild1 von &4000 nach &C000 kopieren
LD BC,&7FC5 ;new RAM (between &4000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
Bild2 von &4000 nach &C000 kopieren
LD BC,&7FC6 ;new RAM (between &4000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
Bild3 von &4000 nach &C000 kopieren
-------------------------------------
Danke.
Ja, so würde man es unter anderen Betriebssystemen machen. :smiley027:
Unter FutureOS kann man aber auch die Speicherverwaltung das mit der Erweiterungs-RAMs (E-RAMs) erledigen lassen.
Anbei ein DSK, der neue Source ist in 'PIC4ERAM.MAX'. Das Programm 'PIC4ERAM.64K' kann direkt gestartet werden. Zuerst lädt es ein Bild in ein freies E-RAM und nach Tastendruck wird das Bild angezeigt.
(Anmerkung: In diesem Fall werden Bilder mit 16 KB - also ohne Header-Record - verwendet. Das spaart Platz auf Disketten und mach vieles einfacher. Ein Beispiel für klassische 17 KB Bilder - also mit Header - würde beim Laden in RAM Variable REG16_3 den Wert &3f80 anstatt &4000 schreiben. So würde der Header ab &3F80 ins RAM kommen und das Bild beginnt dann ab &4000 im E-RAM wie gewollt).
Der Source ist erst mal auf Englisch. Vielleicht schaffe ich das später den auf Deutsch zu übersetzen ;) :)
Danke für die Hilfe.
Danke , habe es mit pasmo.exe compiliert und läuft wunderbar.
Kannst du es bitte einmal für das RAM 512KB um ändern damit ich
bitte 3 Bilder einladen kann :
LD BC,&7FC4/C5/C6 ;new RAM (between &4000)
LD (AKT_RAM),BC ;switch it on
OUT (C),C
Vielen Dank.
So hier wie versprochen die Deutsche Version:
BILDERAM.MAX ist der Quellcode
BILDERAM.64K ist das ausführbare Programm
Das Programm ist von Haus aus kompatibel zu 512 KB Erweiterungs-RAM, es nutzt frei Blöcke.
Um mehr als ein Bild zu laden, bzw. anzuzeigen kann man ja Teile des Programms vervielfachen. Das wäre:
- Freien 16 KB E-RAM Block reservieren
- Bild in E-RAM laden
- Bild anzeigen
- Pro Bild einige Variablen: Dateinamen und E-RAM Auswahl + Zeiger auf XRAM Variable
Probier mal aus ob Du das für drei Bilder hinbekommst, ich schaue es mir gerne die kommenden Tage mal an. :)
Danke für deine Hilfe.
Es Funktioniert mit dem einen SCR, habe es mit pasmo.exe compiliert.
Wie kann man es bitte machen ohne alles zu vervielfachen ?
Danke.
Indem Du eine Schleife programmierst. Wobei sich das bei drei Bilden nicht lohnt. Ohne Schleife würdest Du das Programm für drei Bilder etwa folgendermaßen abändern:
Freies RAM reservieren x3:
LD HL,EFER ;Search free 16 KB E-RAM block
CALL ROM_A
JR Z,END_P ;No free E-RAM left --> End Program
LD (E_RAM),A ;Store newly found target E-RAM select
LD (XR_ERM),HL ;Store pointer to XRAM_? variable. Enables to free E-RAM later
;
LD HL,EFER
CALL ROM_A
JR Z,END_P
LD (E_RAM2),A ;eigene Variable!!!
LD (XR_ERM2),HL ;eigene Variable!!!
;
LD HL,EFER
CALL ROM_A
JR Z,END_P
LD (E_RAM3),A ;eigene Variable!!!
LD (XR_ERM3),HL ;eigene Variable!!!
;...
Bilder Laden x3:
LD HL,(E_RAM) ;Get previously found target E-RAM select
LD (AKT_RAM),HL ;and prepare OS variable for 'Load Picture into E-RAM'
LD DE,P_N ;Pointer to name of picture
CALL LABIER ;Load the picture
;
LD HL,(E_RAM2) ;eigene Variable!!!
LD (AKT_RAM),HL
LD DE,P_N2 ;eigener Dateiname!!!
CALL LABIER
;
LD HL,(E_RAM3) ;eigene Variable!!!
LD (AKT_RAM),HL
LD DE,P_N3 ;eigener Dateiname!!!
CALL LABIER
;...
Bilder anzeigen x3:
LD BC,(E_RAM) ;Select E-RAM which contains picture and bank it in at &4000
OUT (C),C
CALL SHOW_PIC ;Neues Unterprogramm 'Bild anzeigen'
;
LD BC,(E_RAM2) ;eigene Variable!
OUT (C),C
CALL SHOW_PIC
;
LD BC,(E_RAM3) ;eigene Variable!
OUT (C),C
CALL SHOW_PIC
;...
;Bild aus E-RAM anzeigen
;
SHOW_PIC LD HL,&4000 ;Source address = Begin of E-RAM
;
LD DE,&C000 ;Target address = Begin of V-RAM
LD BC,&4000 ;Length = 16 KB
LD IX,F_MOVE ;Quick Copy OS function in ROM C
CALL ROM_A2C ;Copy 16 KB picture from &4000 to &C000 quicker than 'LDIR'
LD BC,&7FC0 ;Bank in Main RAM
OUT (C),C
RET
Am Ende E-RAM wieder freigeben x3:
LD A,&01
LD HL,(XR_ERM) ;Read pointer to E-RAM XRAM_? variable
LD (HL),A ;Free 16 KB E-RAM of the temporary stored picture
;
LD HL,(XR_ERM2) ;eigene Variable!!!
LD (HL),A
;
LD HL,(XR_ERM3) ;eigene Variable!!!
LD (HL),A
Danke für deine Hilfe.
Kann jetzt 3 Bilder laden und anzeigen mit Tastendruck aus dem E-RAM.
Hatte mir diese beiden Programme angeschaut wo du 43 Bilder in den E-RAM packst und wieder anzeigst. Da war ich nicht durchgestiegen.
Aber große Leistung...
P4M.MAX
LPR00.MAX
Danke, Danke, bin immer gerne da um zu helfen. Hauptsache Du hast Spaß am Erschaffen von CPC Produktionen. :jubelaola: