05-29-2010, 10:12 AM
This will put Tiles of 2x2 characters with attributes on screen, and is not restricted to use a particular number of tiles, as it uses a memory pointer to the adress of tile in memory, and it is almost fast enough for games (until someone will write a ASM version)
Note: Lines(23) is used for screen adress calculation. I used only 24 bytes for this table (without bAND function I need a Table for this). not using a array but InLine ASM DEFB data can save 3 bytes.
POKE and PEEK UINTEGER use two-Byte transfer, so this is much faster than transfer of a single byte.
Screen adress calculation is splited (so variable A had to be created) because of a calculation problem. Usualy I would write these lines:
as:
but it does not work (yet)
also if y is not uinteger but ubyte type, scr value is calculated wrong, so even if y is in range of ubyte, do not change it as binary shifts on Ubyte also results in a ubyte.
Note: Lines(23) is used for screen adress calculation. I used only 24 bytes for this table (without bAND function I need a Table for this). not using a array but InLine ASM DEFB data can save 3 bytes.
POKE and PEEK UINTEGER use two-Byte transfer, so this is much faster than transfer of a single byte.
Screen adress calculation is splited (so variable A had to be created) because of a calculation problem. Usualy I would write these lines:
Code:
a=peek(@lines+y+3)
scr=(a<<5)+x+16384
Code:
scr=peek(@lines+y+3)<<5+x+16384
also if y is not uinteger but ubyte type, scr value is calculated wrong, so even if y is in range of ubyte, do not change it as binary shifts on Ubyte also results in a ubyte.
Code:
Dim lines(23) As uByte => { _
0,1,2,3,4,5,6,7,64,65,66,67,68,69,70,71,128,129,130,131,132,133,134,135 }
sub puttile(x as Uinteger,y as Uinteger,adr as Uinteger)
dim scr as Uinteger
dim a as Uinteger
a=peek(@lines+y+3)
scr=(a<<5)+x+16384
poke Uinteger scr,peek(Uinteger,adr)
poke Uinteger scr+256,peek(Uinteger,adr+2)
poke Uinteger scr+512,peek(Uinteger,adr+4)
poke Uinteger scr+768,peek(Uinteger,adr+6)
poke Uinteger scr+1024,peek(Uinteger,adr+8)
poke Uinteger scr+1280,peek(Uinteger,adr+10)
poke Uinteger scr+1536,peek(Uinteger,adr+12)
poke Uinteger scr+1792,peek(Uinteger,adr+14)
poke Uinteger 22528+x+(y<<5),peek(Uinteger,adr+32)
a=peek(@lines+y+4)
scr=(a<<5)+x+16384
poke Uinteger scr,peek(Uinteger,adr+16)
poke Uinteger scr+256,peek(Uinteger,adr+18)
poke Uinteger scr+512,peek(Uinteger,adr+20)
poke Uinteger scr+768,peek(Uinteger,adr+22)
poke Uinteger scr+1024,peek(Uinteger,adr+24)
poke Uinteger scr+1280,peek(Uinteger,adr+26)
poke Uinteger scr+1536,peek(Uinteger,adr+28)
poke Uinteger scr+1792,peek(Uinteger,adr+30)
poke Uinteger 22560+x+(y<<5),peek(Uinteger,adr+34)
End sub
dim x,y as ubyte
dim adr as Uinteger
adr=0
for y=0 to 11
for x=0 to 15
puttile(x<<1,y<<1,adr)
'adr=adr+36
next x
next y
end
------------------------------------------------------------
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!