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
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
Gruss