Bildschirm 40x192 simulieren...
Bildschirm 40x192 simulieren...
Hallo, ich weiss nicht wie ich es anfangen soll...
Ich möchte einen Bildschirm 40 Byte breit und 192 Zeilen hoch simulieren.
Dann möchte ich darin Buchstaben schreiben die 1 Byte breit sind und 8 Byte hoch, bis die Zeile mit 40 Byte voll ist und dann in die nächste Zeile.
Ich weiss nicht , wei ich diesen Screen erstelle und dann am Anfang der Adresse ein Byte hinein Poke?
Wie bekomme ich die Anfangadresse vom Screen zum Poken?
Der Screen soll kein Textfenster sein sondern Grafik ähnlich.
danke.
gruss
Ich möchte einen Bildschirm 40 Byte breit und 192 Zeilen hoch simulieren.
Dann möchte ich darin Buchstaben schreiben die 1 Byte breit sind und 8 Byte hoch, bis die Zeile mit 40 Byte voll ist und dann in die nächste Zeile.
Ich weiss nicht , wei ich diesen Screen erstelle und dann am Anfang der Adresse ein Byte hinein Poke?
Wie bekomme ich die Anfangadresse vom Screen zum Poken?
Der Screen soll kein Textfenster sein sondern Grafik ähnlich.
danke.
gruss
Re: Bildschirm 40x192 simulieren...
das klingt nach C64 , wo man in den Bildschirmspeicher poken musste 
Heutzutage läuft das ein bisschen anders.
Meinst Du jetzt mit 40 Byte Breite 8*40 Pixel ? und wenn dann sind die 192 Byte Höhe wohl etwas extrem oder ?
Du kannst einen WindowedScreen nehmen (wenn du Sprites nutzen möchtest) oder ein CanvasGadget.
Wenn gar keine Eingaben erforderlich sind reicht auch ein ImageGadget... und darauf zeichnen...

Heutzutage läuft das ein bisschen anders.
Meinst Du jetzt mit 40 Byte Breite 8*40 Pixel ? und wenn dann sind die 192 Byte Höhe wohl etwas extrem oder ?
Du kannst einen WindowedScreen nehmen (wenn du Sprites nutzen möchtest) oder ein CanvasGadget.
Wenn gar keine Eingaben erforderlich sind reicht auch ein ImageGadget... und darauf zeichnen...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Bildschirm 40x192 simulieren...
Ähm...192 Linien bzw 24 Byte...
Es sind Eingaben erforderlich.
Kann man also keine Byteadresse erfassen in einem Screen?
gruss
Es sind Eingaben erforderlich.
Kann man also keine Byteadresse erfassen in einem Screen?
gruss
Re: Bildschirm 40x192 simulieren...
2D Drawing Lib ... das suchst in die PB-Hilfe und suchst dort nach dem,
was du brauchst. Geht schneller als hier auf ne Antwort zu warten.
was du brauchst. Geht schneller als hier auf ne Antwort zu warten.

Re: Bildschirm 40x192 simulieren...
Ich nix verstehen!
Wieviel Byte und Linien hoch und breit mal quer?
Ist dieser funkheld vielleicht eine google-Übersetzung von einem Chinesen
oder ein chinesischer google-Übersetzer? Oder einfach nur ein ver(w)irrter junger Mann?
Wieviel Byte und Linien hoch und breit mal quer?
Ist dieser funkheld vielleicht eine google-Übersetzung von einem Chinesen
oder ein chinesischer google-Übersetzer? Oder einfach nur ein ver(w)irrter junger Mann?

Zuletzt geändert von Danilo am 10.12.2011 16:44, insgesamt 1-mal geändert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Re: Bildschirm 40x192 simulieren...
Hast echt recht alder!mirca hat geschrieben:Naja du bist eh ein "-= Anfänger =-" vielleicht liegt es daran
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Re: Bildschirm 40x192 simulieren...
Das klingt nach einem Atari XL Screen... Monochromes Bitmap also. Ganz einfach.
Also ich würde das so machen (bzw so habe ich es gemacht beim Retro-X):
Screendarstellung:
Memory Block erstellen mit 7680 Bytes für monochromes Bitmap
Memory Block erstellen mit 245760 Bytes für 32 Bit Bitmap
Tabellen-memblock erstellen wo für jedes Byte eines Monochrom-Bitmaps 64 Bytes des PC Bitmaps abgespeichert werden, mit 16384 Bytes, und die Daten da vorbereiten (also wie die 8 Pixeln von jeden Byte als 8 Pixeln mit 32 Bit aussehen würden an PC. 8 Monochrompixeln=64 Bytes am PC screen).
Mit loop die Daten des Monochrom-Bitmaps benutzen um den 32 Bit Bitmap offset zu finden und es ins PC Bitmap hineinkopieren mit COPYMEMORY von jeweils 64 Bytes für jeden Monochrom-Byte
Der PC Bitmap kann dann in ein Image kopiert werden. Es wurde mal eine Routine für CopyMemory2Bitmap publiziert. Ich erreiche so einige tausend redraws pro Sekunde.
Das schreiben ist auch einfach, wenn man schon das Monochrom-Bitmap hat und die Fontdaten in einem Memblock. Wenn man den Monochromspeicher wie beim C64 Charweise organisiert, braucht man nur jeweils 8 bytes aus dem Fontspeicher in den Monochromspeicher zu kopieren. Die nächste Zeile wird dann schon automatisch folgen.
Also ich würde das so machen (bzw so habe ich es gemacht beim Retro-X):
Screendarstellung:
Memory Block erstellen mit 7680 Bytes für monochromes Bitmap
Memory Block erstellen mit 245760 Bytes für 32 Bit Bitmap
Tabellen-memblock erstellen wo für jedes Byte eines Monochrom-Bitmaps 64 Bytes des PC Bitmaps abgespeichert werden, mit 16384 Bytes, und die Daten da vorbereiten (also wie die 8 Pixeln von jeden Byte als 8 Pixeln mit 32 Bit aussehen würden an PC. 8 Monochrompixeln=64 Bytes am PC screen).
Mit loop die Daten des Monochrom-Bitmaps benutzen um den 32 Bit Bitmap offset zu finden und es ins PC Bitmap hineinkopieren mit COPYMEMORY von jeweils 64 Bytes für jeden Monochrom-Byte
Der PC Bitmap kann dann in ein Image kopiert werden. Es wurde mal eine Routine für CopyMemory2Bitmap publiziert. Ich erreiche so einige tausend redraws pro Sekunde.
Das schreiben ist auch einfach, wenn man schon das Monochrom-Bitmap hat und die Fontdaten in einem Memblock. Wenn man den Monochromspeicher wie beim C64 Charweise organisiert, braucht man nur jeweils 8 bytes aus dem Fontspeicher in den Monochromspeicher zu kopieren. Die nächste Zeile wird dann schon automatisch folgen.
PB 4.61Beta1 32/64Bit. AMD FX6100, 8 GB RAM, ATI Radeon 5750, Win7 64 (64 bit ist mist weil 16-Bit Programme wie MakeTZX nicht mehr darauf funktionieren).
Re: Bildschirm 40x192 simulieren...
Ju, danke.
Das liesst sich schon mal gut. Es ist ein Screen für den Atari800 40x192.
Mit den Umsetzen kapier ich noch nicht.
Kannst du darüber noch einpaar Sätze schreiben ?
Retro-X ? was ist das. ?
Danke.
gruss
Das liesst sich schon mal gut. Es ist ein Screen für den Atari800 40x192.
Mit den Umsetzen kapier ich noch nicht.
Kannst du darüber noch einpaar Sätze schreiben ?
Retro-X ? was ist das. ?
Danke.
gruss
Re: Bildschirm 40x192 simulieren...
Das habe ich geahnt, die Auflösung der Atari800 ist ja ziemlich einzigartig...funkheld hat geschrieben:Ju, danke.
Das liesst sich schon mal gut. Es ist ein Screen für den Atari800 40x192.
Klar...funkheld hat geschrieben: Mit den Umsetzen kapier ich noch nicht.
Kannst du darüber noch einpaar Sätze schreiben ?
Wenn Farbe 0 weiß ist und Farbe 1 schwarz...
*Bytetable ist die der Speicherbereich wo die Tabelle abgelegt ist.
Schau mal, Bytetable erstelle ich so:
Code: Alles auswählen
dim Col(1)
Col(0)=$FFFFFF
Col(1)=0
For b=0 To 255
adr=b<<5
*Buffer=*Bytetable+adr
PokeL(*Buffer,Col(b>>7&1)):*Buffer+4
PokeL(*Buffer,Col(b>>6&1)):*Buffer+4
PokeL(*Buffer,Col(b>>5&1)):*Buffer+4
PokeL(*Buffer,Col(b>>4&1)):*Buffer+4
PokeL(*Buffer,Col(b>>3&1)):*Buffer+4
PokeL(*Buffer,Col(b>>2&1)):*Buffer+4
PokeL(*Buffer,Col(b>>1&1)):*Buffer+4
PokeL(*Buffer,Col(b&1)):*Buffer+4
Next b
Damit zeichne ich es dann nach *Drawbuffer:
Code: Alles auswählen
Col(0)=$FFFFFF
Col(1)=0
For y=0 To height<<3-1
For x=0 To Width-1
Byte=PeekB(*Buffer)&255
*Buffer+1
CopyMemory(*Bytetable+Byte<<5,*drawbuffer,32)
*drawbuffer+32
Next x
Next y
Code: Alles auswählen
Procedure CopyMemToImage(mem.L,img.L)
Protected bmi.BITMAPINFO
Protected w.L,h.L,hBmp.L,hdc.L
CompilerIf #PB_Compiler_OS=#PB_OS_Windows
If IsImage(img)
w=ImageWidth(img)
h=ImageHeight(img)
hBmp=ImageID(img)
bmi\bmiHeader\biSize =SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = w
bmi\bmiHeader\biHeight =-h
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount =32
bmi\bmiHeader\biCompression =#BI_RGB
io=ImageOutput(img)
hdc=StartDrawing(io)
If SetDIBits_(hdc,hBmp,0,h,mem,bmi,#DIB_RGB_COLORS)
StopDrawing()
ProcedureReturn #True
Else
StopDrawing()
ProcedureReturn #False
EndIf
EndIf
CompilerEndIf
EndProcedure
CopyMemToImage(*Drawbuffer,imagenr)
Retro-X ist meim Programm mit dem man PC Bilder für diverse Retro-Systeme konvertieren kann. Momentan ist die Weiterentwicklung auf Es gelegt. Die letzte Version war Retro-X Alpha 8.0, und hat noch ein paar Bugs.funkheld hat geschrieben: Retro-X ? was ist das. ?
Danke.
gruss
PB 4.61Beta1 32/64Bit. AMD FX6100, 8 GB RAM, ATI Radeon 5750, Win7 64 (64 bit ist mist weil 16-Bit Programme wie MakeTZX nicht mehr darauf funktionieren).