Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

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

Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von funkheld »

Hallo, guten Tag.
Ich lese hier ein Charset vom C64 ein und habe ein Screen 40x24 Byte eingerichtet.
Lese aus dem Charset den Buchstaben raus und stelle ihn dann dar im Screen.
Bei jeden Tastendruck wird ein Char dargestellt und nach 40 Buchstaben kommt der Zeilenumbruch.

Es funktioniert auch wunderbar.
Für jede Zeile habe ich dieses gemacht:

Code: Alles auswählen

For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc0)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc0=zc0+1
      If zc0 > 39
        zc0=0
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
Wie kann man es kompakter machen , ohne das ich 24x so etwas machen muss (für jede Zeile 1x)?

Code: Alles auswählen

Global zahl.a,zahl0.a,charbyte.a
Global zc0.l,zc1.l,zc2.l,zc3.l,zc4.l,zc5.l,zc6.l,zc7.l
Global zc8.l,zc9.l,zc10.l,zc11.l,zc12.l,zc13.l,zc14.l,zc15.l
Global zc16.l,zc17.l,zc18.l,zc19.l,zc20.l,zc21.l,zc22.l,zc23.l
Global z.l,zy.l,zx.l,scr_z.l
Global result.s,text_s.s

Global charmem.l,scr_buffer.l

charmem=AllocateMemory (1024)
scr_buffer = AllocateMemory(960)

Declare read_char()
Declare screen()

Enumeration
  #Window_0
  #img
  #b_cls
  #str_char 
EndEnumeration

Macro SetBit(Value, Bit, State)
  ( (Value) & ~(1<<(Bit)) | (State)<<(Bit) )
EndMacro

Macro GetBit(Value, Bit)
  ( (Value)>>(Bit) & 1 )
EndMacro

OpenWindow(#Window_0, 10, 50,800,600, "canvas", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
CanvasGadget(#img, 10,10,640,384)

ButtonGadget(#b_cls, 670,10, 40, 25, "cls")
StringGadget(#str_char,730, 10 ,40, 22, "")

zc0=0
zc1=0
zc2=0
zc3=0
zc4=0
zc5=0
zc6=0
zc7=0
zc8=0
zc9=0
zc10=0
zc11=0
zc12=0
zc13=0
zc14=0
zc15=0
zc16=0
zc17=0
zc18=0
zc19=0
zc20=0
zc21=0
zc22=0
zc23=0

read_char()

For z=0 To 960
  PokeA(scr_buffer+z,32)
Next
screen()

InitKeyboard()
Repeat
  Event = WaitWindowEvent(1) 
  
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      
      If EventGadget = #b_cls
        For z=0 To 959
          PokeA(scr_buffer+z,32)
        Next
        scr_z=0
        screen()
      EndIf
      
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
  
  ExamineKeyboard()
  result=KeyboardInkey()
  
  If result
    zahl=Asc(result)-64
    PokeA(scr_buffer+scr_z,zahl)
    scr_z=scr_z+1
    
    If scr_z > 959
      scr_z=0
    EndIf
    
    text_s=""
    text_s + Str(zahl)
    SetGadgetText(#str_char, text_s)
    
    screen() 
  EndIf
ForEver

Procedure screen()
  StartDrawing(CanvasOutput(#img))
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc0)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc0=zc0+1
      If zc0 > 39
        zc0=0
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc1)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc1=zc1+1
      If zc1 > 79
        zc1=40
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+16,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+16,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc2)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc2=zc2+1
      If zc2 > 119
        zc2=80
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+32,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+32,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc3)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc3=zc3+1
      If zc3 > 159
        zc3=120
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+48,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+48,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc4)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc4=zc4+1
      If zc4 > 199
        zc4=160
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+64,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+64,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc5)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc5=zc5+1
      If zc5 > 239
        zc5=200
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+80,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+80,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc6)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc6=zc6+1
      If zc6 > 279
        zc6=240
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+96,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+96,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc7)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc7=zc7+1
      If zc7 > 319
        zc7=280
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+112,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+112,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next 
  
  ;----------------------------------------------------------
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc8)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc8=zc8+1
      If zc8 > 359
        zc8=320
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+128,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+128,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc9)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc9=zc9+1
      If zc9 > 399
        zc9=360
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+144,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+144,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc10)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc10=zc10+1
      If zc10 > 439
        zc10=400
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+160,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+160,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc11)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc11=zc11+1
      If zc11 > 479
        zc11=440
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+176,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+176,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc12)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc12=zc12+1
      If zc12 > 519
        zc12=480
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+192,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+192,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc13)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc13=zc13+1
      If zc13 > 559
        zc13=520
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+208,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+208,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc14)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc14=zc14+1
      If zc14 > 599
        zc14=560
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+224,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+224,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc15)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc15=zc15+1
      If zc15 > 639
        zc15=600
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+240,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+240,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next 
  
  ;----------------------------------------------------------------
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc16)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc16=zc16+1
      If zc16 > 679
        zc16=640
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+256,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+256,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc17)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc17=zc17+1
      If zc17 > 719
        zc17=680
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+272,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+272,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc18)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc18=zc18+1
      If zc18 > 759
        zc18=720
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+288,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+288,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc19)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc19=zc19+1
      If zc19 > 799
        zc19=760
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+304,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+304,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc20)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc20=zc20+1
      If zc20 > 839
        zc20=800
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+320,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+320,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc21)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc21=zc21+1
      If zc21 > 879
        zc21=840
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+336,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+336,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc22)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc22=zc22+1
      If zc22 > 919
        zc22=880
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+352,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+352,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next
  
  For zy=0 To 7   
    For z1=0 To 639 Step 8
      charbyte=PeekA(scr_buffer+zc23)
      zahl0=PeekA(charmem+(charbyte*8+zy))  
      zc23=zc23+1
      If zc23 > 959
        zc23=920
      EndIf 
      For zx=0 To 7
        If getbit(zahl0,7-zx)=1
          Box((zx+z1)*2,zy*2+368,2,2,RGB(0,0,255))
        Else
          Box((zx+z1)*2,zy*2+368,2,2,RGB(255,255,255))
        EndIf
      Next 
    Next 
  Next 
  StopDrawing()
EndProcedure

Procedure read_char()
  If ReadFile(0, "d:\purebasic\pebi-pure\data\charset1.bin")
    z=0
    
    While Eof(0) = 0
      charbyte=ReadByte(0)
      PokeA(charmem+z,charbyte)
      z=z+1
    Wend
    
    CloseFile(0)
  EndIf
EndProcedure
Danke.
Gruss
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von Bisonte »

"d:\purebasic\pebi-pure\data\charset1.bin" diese datei wäre jetzt hilfreich gewesen.

Allerdings meine ich mich zu erinnern, das das beim C64 mit Speicherstellen war.
Ah genau. Poke1024, Wert, war damals das erste Zeichen oben Links.
Nun hat man 40 Zeichen weiter Poke1064, Wert ein zeichen "gepoket" und war damit in der zweiten zeile usw.

So kann man es hier auch machen.

Und nebenbei : InitKeyboard und ExamineKeyboard braucht man bei CanvasGadget nicht... Das war doch für
Screens gedacht.... oder nicht ?
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von Mijikai »

Die fehlende Datei (wie bereits erwähnt) inklusive Informationen zum Dateiformat wären hilfreich.
(Der Beispielcode sollte natürlich auch funktional sein.)
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von funkheld »

Danke, habe jetzt eine Lösung gefunden.

Poke und Peek habe ich mal zum Test eingebunden.
Die Speicherzellen gehen von 0-1023 bei mir im Screen (40x24)

Geht auch per Keyboardtasten.

Charset 8x8 Byte (1024 Byte in den Datazeilen)
Man kann die auch selber ändern.

Gruss

Code: Alles auswählen

Global zahl.a,zahl0.a,charbyte.a
Global zc0.l,zc1.l,zc2.l
Global z.l,zz.l,zy.l,zx.l,scr_z.l,zeile.l
Global result.s,text_s.s
Global wh.l,assc.l,scr_zp.l

Global charmem.l,scr_buffer.l

charmem=AllocateMemory (1024)
scr_buffer = AllocateMemory(960)

Declare read_char()
Declare screen()
Declare poke(scr_zp,zahl)
Declare peek(scr_zp)

Enumeration
  #Window_0
  #img
  #b_cls
  #str_char 
  #b_poke
  #b_peek
EndEnumeration

Macro SetBit(Value, Bit, State)
  ( (Value) & ~(1<<(Bit)) | (State)<<(Bit) )
EndMacro

Macro GetBit(Value, Bit)
  ( (Value)>>(Bit) & 1 )
EndMacro

InitKeyboard()
OpenConsole()

OpenWindow(#Window_0, 10, 50,800,600, "canvas", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
CanvasGadget(#img, 10,10,640,384)

ButtonGadget(#b_cls, 670,10, 40, 25, "cls")
StringGadget(#str_char,730, 10 ,40, 22, "")

ButtonGadget(#b_poke, 670,100, 40, 25, "poke")
ButtonGadget(#b_peek, 670,130, 40, 25, "peek")

zc0=0
zc1=0
zc2=0
zeile=0

Restore charset1
For z=0 To 1023
  Read.a charbyte
  PokeA(charmem+z,charbyte)
Next  

For z=0 To 960
  PokeA(scr_buffer+z,32)
Next
screen()

Repeat
  Event = WaitWindowEvent(1) 
  
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      
      If EventGadget = #b_cls
        For z=0 To 959
          PokeA(scr_buffer+z,32)
        Next
        scr_z=0
        screen()
      EndIf
      
      If EventGadget = #b_poke
        For z=0 To 127
          poke(z,z)
        Next  
      EndIf
      
      If EventGadget = #b_peek
        For z=0 To 127
          erg=peek(z)
          PrintN(Str(erg))
        Next
      EndIf
      
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
  
  ExamineKeyboard()
  result=KeyboardInkey()
  
  If result
    zahl=Asc(result)-64
    PokeA(scr_buffer+scr_z,zahl)
    scr_z=scr_z+1
    
    If scr_z > 959
      scr_z=0
    EndIf
    
    text_s=""
    text_s + Str(zahl)
    SetGadgetText(#str_char, text_s)
    
    screen() 
  EndIf
ForEver

Procedure poke(scr_zp,zahl)
  PokeA(scr_buffer+scr_zp-1,zahl)
  screen()
EndProcedure

Procedure peek(scr_zp)
  erg=PeekA(scr_buffer+scr_zp-1)
  ProcedureReturn erg
EndProcedure

Procedure screen()
  StartDrawing(CanvasOutput(#img))
  
  For zz=0 To 23
    zeile=zz*16
    zc1= (zz+1)*40-1
    zc2= zz*40
    
    For zy=0 To 7   
      For z1=0 To 639 Step 8
        zc0=zc0+1
        If zc0 > zc1
          zc0=zc2
        EndIf 
        charbyte=PeekA(scr_buffer+zc0)
        zahl0=PeekA(charmem+(charbyte*8+zy))  
        
        For zx=0 To 7
          If getbit(zahl0,7-zx)=1
            Box((zx+z1)*2,zy*2+zeile,2,2,RGB(0,0,255))
          Else
            Box((zx+z1)*2,zy*2+zeile,2,2,RGB(255,255,255))
          EndIf
        Next 
      Next 
    Next  
  Next  
  StopDrawing()
EndProcedure

DataSection
charset1:
Data.a  60, 102, 110, 110, 96, 98, 60, 0, 24, 60, 102, 126, 102, 102, 102, 0, 124, 102, 102, 124
Data.a  102, 102, 124, 0, 60, 102, 96, 96, 96, 102, 60, 0, 120, 108, 102, 102, 102, 108, 120, 0
Data.a  126, 96, 96, 120, 96, 96, 126, 0, 126, 96, 96, 120, 96, 96, 96, 0, 60, 102, 96, 110
Data.a  102, 102, 60, 0, 102, 102, 102, 126, 102, 102, 102, 0, 60, 24, 24, 24, 24, 24, 60, 0
Data.a  30, 12, 12, 12, 12, 108, 56, 0, 102, 108, 120, 112, 120, 108, 102, 0, 96, 96, 96, 96
Data.a  96, 96, 126, 0, 99, 119, 127, 107, 99, 99, 99, 0, 102, 118, 126, 126, 110, 102, 102, 0
Data.a  60, 102, 102, 102, 102, 102, 60, 0, 124, 102, 102, 124, 96, 96, 96, 0, 60, 102, 102, 102
Data.a  102, 60, 14, 0, 124, 102, 102, 124, 120, 108, 102, 0, 60, 102, 96, 60, 6, 102, 60, 0
Data.a  126, 24, 24, 24, 24, 24, 24, 0, 102, 102, 102, 102, 102, 102, 60, 0, 102, 102, 102, 102
Data.a  102, 60, 24, 0, 99, 99, 99, 107, 127, 119, 99, 0, 102, 102, 60, 24, 60, 102, 102, 0
Data.a  102, 102, 102, 60, 24, 24, 24, 0, 126, 6, 12, 24, 48, 96, 126, 0, 60, 48, 48, 48
Data.a  48, 48, 60, 0, 12, 18, 48, 124, 48, 98, 252, 0, 60, 12, 12, 12, 12, 12, 60, 0
Data.a  0, 24, 60, 126, 24, 24, 24, 24, 0, 16, 48, 127, 127, 48, 16, 0, 0, 0, 0, 0
Data.a  0, 0, 0, 0, 24, 24, 24, 24, 0, 0, 24, 0, 102, 102, 102, 0, 0, 0, 0, 0
Data.a  102, 102, 255, 102, 255, 102, 102, 0, 24, 62, 96, 60, 6, 124, 24, 0, 98, 102, 12, 24
Data.a  48, 102, 70, 0, 60, 102, 60, 56, 103, 102, 63, 0, 6, 12, 24, 0, 0, 0, 0, 0
Data.a  12, 24, 48, 48, 48, 24, 12, 0, 48, 24, 12, 12, 12, 24, 48, 0, 0, 102, 60, 255
Data.a  60, 102, 0, 0, 0, 24, 24, 126, 24, 24, 0, 0, 0, 0, 0, 0, 0, 24, 24, 48
Data.a  0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 3, 6, 12
Data.a  24, 48, 96, 0, 60, 102, 110, 118, 102, 102, 60, 0, 24, 24, 56, 24, 24, 24, 126, 0
Data.a  60, 102, 6, 12, 48, 96, 126, 0, 60, 102, 6, 28, 6, 102, 60, 0, 6, 14, 30, 102
Data.a  127, 6, 6, 0, 126, 96, 124, 6, 6, 102, 60, 0, 60, 102, 96, 124, 102, 102, 60, 0
Data.a  126, 102, 12, 24, 24, 24, 24, 0, 60, 102, 102, 60, 102, 102, 60, 0, 60, 102, 102, 62
Data.a  6, 102, 60, 0, 0, 0, 24, 0, 0, 24, 0, 0, 0, 0, 24, 0, 0, 24, 24, 48
Data.a  14, 24, 48, 96, 48, 24, 14, 0, 0, 0, 126, 0, 126, 0, 0, 0, 112, 24, 12, 6
Data.a  12, 24, 112, 0, 60, 102, 6, 12, 24, 0, 24, 0, 0, 0, 0, 255, 255, 0, 0, 0
Data.a  8, 28, 62, 127, 127, 28, 62, 0, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 255
Data.a  255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0
Data.a  0, 0, 0, 0, 255, 255, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 12, 12, 12, 12
Data.a  12, 12, 12, 12, 0, 0, 0, 224, 240, 56, 24, 24, 24, 24, 28, 15, 7, 0, 0, 0
Data.a  24, 24, 56, 240, 224, 0, 0, 0, 192, 192, 192, 192, 192, 192, 255, 255, 192, 224, 112, 56
Data.a  28, 14, 7, 3, 3, 7, 14, 28, 56, 112, 224, 192, 255, 255, 192, 192, 192, 192, 192, 192
Data.a  255, 255, 3, 3, 3, 3, 3, 3, 0, 60, 126, 126, 126, 126, 60, 0, 0, 0, 0, 0
Data.a  0, 255, 255, 0, 54, 127, 127, 127, 62, 28, 8, 0, 96, 96, 96, 96, 96, 96, 96, 96
Data.a  0, 0, 0, 7, 15, 28, 24, 24, 195, 231, 126, 60, 60, 126, 231, 195, 0, 60, 126, 102
Data.a  102, 126, 60, 0, 24, 24, 102, 102, 24, 24, 60, 0, 6, 6, 6, 6, 6, 6, 6, 6
Data.a  8, 28, 62, 127, 62, 28, 8, 0, 24, 24, 24, 255, 255, 24, 24, 24, 192, 192, 48, 48
Data.a  192, 192, 48, 48, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 3, 62, 118, 54, 54, 0
Data.a  255, 127, 63, 31, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 240, 240, 240, 240
Data.a  240, 240, 240, 240, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0
Data.a  0, 0, 0, 0, 0, 0, 0, 255, 192, 192, 192, 192, 192, 192, 192, 192, 204, 204, 51, 51
Data.a  204, 204, 51, 51, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 204, 204, 51, 51
Data.a  255, 254, 252, 248, 240, 224, 192, 128, 3, 3, 3, 3, 3, 3, 3, 3, 24, 24, 24, 31
Data.a  31, 24, 24, 24, 0, 0, 0, 0, 15, 15, 15, 15, 24, 24, 24, 31, 31, 0, 0, 0
Data.a  0, 0, 0, 248, 248, 24, 24, 24, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 31
Data.a  31, 24, 24, 24, 24, 24, 24, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 24, 24, 24
Data.a  24, 24, 24, 248, 248, 24, 24, 24, 192, 192, 192, 192, 192, 192, 192, 192, 224, 224, 224, 224
Data.a  224, 224, 224, 224, 7, 7, 7, 7, 7, 7, 7, 7, 255, 255, 0, 0, 0, 0, 0, 0
Data.a  255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 3, 3, 3, 3
Data.a  3, 3, 255, 255, 0, 0, 0, 0, 240, 240, 240, 240, 15, 15, 15, 15, 0, 0, 0, 0
Data.a  24, 24, 24, 248, 248, 0, 0, 0, 240, 240, 240, 240, 0, 0, 0, 0, 240, 240, 240, 240
Data.a  15, 15, 15, 15
EndDataSection

Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von Bisonte »

Der Code funktioniert nicht ! Es wird bei ExamineKeyBoard() ausgestiegen... Du benutzt keinen Screen, sondern ein CanvasGadget,
daher kannst du die "Screen" spezifischen Befehle nicht benutzen.
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von Mijikai »

funkheld hat geschrieben:...

Code: Alles auswählen

...
  For zz=0 To 23
    zeile=zz*16
    zc1= (zz+1)*40-1
    zc2= zz*40
    
    For zy=0 To 7   
      For z1=0 To 639 Step 8
        zc0=zc0+1
        If zc0 > zc1
          zc0=zc2
        EndIf 
        charbyte=PeekA(scr_buffer+zc0)
        zahl0=PeekA(charmem+(charbyte*8+zy))  
        
        For zx=0 To 7
          If getbit(zahl0,7-zx)=1
            Box((zx+z1)*2,zy*2+zeile,2,2,RGB(0,0,255))
          Else
            Box((zx+z1)*2,zy*2+zeile,2,2,RGB(255,255,255))
          EndIf
        Next 
      Next 
    Next  
  Next  
  StopDrawing()
EndProcedure
...
Warum ? -> For zz=0 To 23
und nicht -> For zz=0 To 3 (schneller aber mit gleichem Ergebnis)

Gibt es Informationen zum Dateiformat ?
Wie wird ein Buchstabe gelesen ?
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von funkheld »

Mein Code mit Peek und Poke funktioniert oben.
Habe ihn zum Test hier selber noch einmal rauskopiert und in Purebasic geladen.

https://www.forum64.de/index.php?thread ... ost1166880

Gruss
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von funkheld »

"For zz=0 To 23" nehme ich weil ja 24 Zeilen vorhanden sind.

Wenn jetzt ein Poke(955,2) auftaucht ist er ja in der Zeile 24 bzw "0 To 23".

Gruss
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von RSBasic »

ZeHa kennt dich wohl schon. :mrgreen:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.

Beitrag von Bisonte »

Oh'la'la... ein Emulator soll das werden...

Ich sag es gern auch nochmal: PureBasic 5.60 und dein Code hier aus dem Forum in die IDE kopiert. Funktioniert nicht !

ExamineKeyboard() löst die Fehlermeldung :

[ERROR] OpenScreen() Or OpenWindowedScreen() must be called before using any Keyboard commands.

Und wenn es wirklich ein Emulator werden soll, brauchst du definitiv einen Screen...
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Antworten