Bildschirm 40x192 simulieren...

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
funkheld
Beiträge: 647
Registriert: 31.12.2009 11:58

Bildschirm 40x192 simulieren...

Beitrag 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
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Bildschirm 40x192 simulieren...

Beitrag 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...
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​​
funkheld
Beiträge: 647
Registriert: 31.12.2009 11:58

Re: Bildschirm 40x192 simulieren...

Beitrag von funkheld »

Ähm...192 Linien bzw 24 Byte...
Es sind Eingaben erforderlich.

Kann man also keine Byteadresse erfassen in einem Screen?

gruss
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Bildschirm 40x192 simulieren...

Beitrag 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. :wink:
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Bildschirm 40x192 simulieren...

Beitrag 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? :D
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
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 10:59, insgesamt 1-mal geändert.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Bildschirm 40x192 simulieren...

Beitrag von Danilo »

mirca hat geschrieben:Naja du bist eh ein "-= Anfänger =-" vielleicht liegt es daran :mrgreen:
Hast echt recht alder!
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
LCD
Beiträge: 107
Registriert: 23.01.2008 13:13
Wohnort: Wien

Re: Bildschirm 40x192 simulieren...

Beitrag 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.
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).
funkheld
Beiträge: 647
Registriert: 31.12.2009 11:58

Re: Bildschirm 40x192 simulieren...

Beitrag 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
LCD
Beiträge: 107
Registriert: 23.01.2008 13:13
Wohnort: Wien

Re: Bildschirm 40x192 simulieren...

Beitrag 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.
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).
Antworten