Seite 1 von 1
Bildschirm 40x192 simulieren...
Verfasst: 08.12.2011 18:39
von funkheld
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
Re: Bildschirm 40x192 simulieren...
Verfasst: 08.12.2011 19:59
von Bisonte
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...
Re: Bildschirm 40x192 simulieren...
Verfasst: 08.12.2011 21:01
von funkheld
Ähm...192 Linien bzw 24 Byte...
Es sind Eingaben erforderlich.
Kann man also keine Byteadresse erfassen in einem Screen?
gruss
Re: Bildschirm 40x192 simulieren...
Verfasst: 08.12.2011 21:08
von PMV
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.

Re: Bildschirm 40x192 simulieren...
Verfasst: 10.12.2011 16:39
von Danilo
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?

GELÖSCHT
Verfasst: 10.12.2011 16:42
von mirca
GELÖSCHT
Re: Bildschirm 40x192 simulieren...
Verfasst: 10.12.2011 16:45
von Danilo
mirca hat geschrieben:Naja du bist eh ein "-= Anfänger =-" vielleicht liegt es daran

Hast echt recht alder!
Re: Bildschirm 40x192 simulieren...
Verfasst: 01.02.2012 03:03
von LCD
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.
Re: Bildschirm 40x192 simulieren...
Verfasst: 01.02.2012 15:07
von funkheld
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
Re: Bildschirm 40x192 simulieren...
Verfasst: 14.02.2012 02:56
von LCD
funkheld hat geschrieben:Ju, danke.
Das liesst sich schon mal gut. Es ist ein Screen für den Atari800 40x192.
Das habe ich geahnt, die Auflösung der Atari800 ist ja ziemlich einzigartig...
funkheld hat geschrieben:
Mit den Umsetzen kapier ich noch nicht.
Kannst du darüber noch einpaar Sätze schreiben ?
Klar...
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
Zum Zeichnen
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
Und vom Drawbuffer ins Image mit:
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)
funkheld hat geschrieben:
Retro-X ? was ist das. ?
Danke.
gruss
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.