Aktuelle Zeit: 24.11.2017 04:12

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 15.07.2017 13:50 
Offline

Registriert: 31.12.2009 11:58
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:
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:
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 15.07.2017 14:00 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
"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 5.45 LTS / 5.61 (Windows x86/x64) | Windows10 Pro x64 | Z87-PLUS | i7 4770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 15.07.2017 17:21 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Die fehlende Datei (wie bereits erwähnt) inklusive Informationen zum Dateiformat wären hilfreich.
(Der Beispielcode sollte natürlich auch funktional sein.)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 17.07.2017 11:48 
Offline

Registriert: 31.12.2009 11:58
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:
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



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 17.07.2017 12:53 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
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 5.45 LTS / 5.61 (Windows x86/x64) | Windows10 Pro x64 | Z87-PLUS | i7 4770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 17.07.2017 19:39 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
funkheld hat geschrieben:
...

Code:
...
  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 ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 18.07.2017 09:09 
Offline

Registriert: 31.12.2009 11:58
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 18.07.2017 09:26 
Offline

Registriert: 31.12.2009 11:58
"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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 18.07.2017 09:32 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
funkheld hat geschrieben:
https://www.forum64.de/index.php?thread/75716-bildschirm-vom-eigenen-emulator-den-ich-bauen-m%C3%B6chte/#post1166880

ZeHa kennt dich wohl schon. :mrgreen:

_________________
BildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen 40x24 Zeilen mit Byte-Char 8x8 vom C64.
BeitragVerfasst: 18.07.2017 09:33 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
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 5.45 LTS / 5.61 (Windows x86/x64) | Windows10 Pro x64 | Z87-PLUS | i7 4770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye