PutTile16x16 Pixels + Attributes - Printable Version +- Forum (https://www.boriel.com/forum) +-- Forum: Compilers and Computer Languages (https://www.boriel.com/forum/forumdisplay.php?fid=12) +--- Forum: ZX Basic Compiler (https://www.boriel.com/forum/forumdisplay.php?fid=11) +---- Forum: How-To & Tutorials (https://www.boriel.com/forum/forumdisplay.php?fid=13) +---- Thread: PutTile16x16 Pixels + Attributes (/showthread.php?tid=227) Pages:
1
2
|
Re: PutTile16x16 Pixels + Attributes - britlion - 05-31-2010 Okay. This is faster. it's also quite a lot longer! I had to hand time this at about 8.5 seconds for 80 loops. Which means it takes about 5.3 frames to fill the screen once. (Your 8 loop test would take about 42 frames). I can't use the frames counter to time it, because Interrupts HAVE to be disabled. I hope around 3 times faster is good? This could probably be optimized slightly better, I don't think I'm using passed in parameters well. I also think you might be able to see how the fourspriter code was made to go quite a lot faster... Code: SUB putTile(x as uByte, y as uByte, graphicsAddr as uInteger) Re: PutTile16x16 Pixels + Attributes - boriel - 05-31-2010 britlion Wrote:Oh, so it's not passing the first value in the stack - stdcall passes it in the register AND in the stack, which is a little confusing.You CAN, but you SHOULD NOT, unless you really manage the stack yourself. :roll: If you use FASTCALL in a function with 2 or more params, or a function with local vars, it will crash your program. Re: PutTile16x16 Pixels + Attributes - britlion - 05-31-2010 boriel Wrote:You CAN, but you SHOULD NOT, unless you really manage the stack yourself. :roll: If you use FASTCALL in a function with 2 or more params, or a function with local vars, it will crash your program. So YOU get to break all the rules? We kids never have any fun. :-) Understood. Re: PutTile16x16 Pixels + Attributes - LCD - 05-31-2010 britlion Wrote:Okay. This is faster. it's also quite a lot longer!Britlion, this is great! That's what I call "fast". I wonder a bit why the tiles from ROM at position 0 looks different in your version than from mine. I don't care anyyway because I can adapt my BorIDE Tile editor then for it, if the format is different. Now with THAT fast PutTile routine we can write very fast games. Re: PutTile16x16 Pixels + Attributes - britlion - 05-31-2010 LCD Wrote:Britlion, this is great! That's what I call "fast". I wonder a bit why the tiles from ROM at position 0 looks different in your version than from mine. I don't care anyyway because I can adapt my BorIDE Tile editor then for it, if the format is different. Now with THAT fast PutTile routine we can write very fast games. LCD: This isn't exactly well tested yet. It could be putting out bad data. :-) Congratulations on being a beta tester! Re: PutTile16x16 Pixels + Attributes - LCD - 06-01-2010 britlion Wrote:Now it is tested. You have attribute after complete bitmap date, I had Attribute after each Line of date, so I fixed this in my version. Thanks...LCD Wrote:Britlion, this is great! That's what I call "fast". I wonder a bit why the tiles from ROM at position 0 looks different in your version than from mine. I don't care anyyway because I can adapt my BorIDE Tile editor then for it, if the format is different. Now with THAT fast PutTile routine we can write very fast games. Re: PutTile16x16 Pixels + Attributes - britlion - 06-01-2010 I'm glad it's working for you! Didn't realise you had attributes there. Would be too hard to make the code do that, I guess, owing to the method of access. You could do attributes first, or last, but not middle. It did seem to make more sense to go in order of lowest memory address to highest, somehow. You can get about 20% of the tiles changed inside one screen refresh, so it doesn't really matter too much which way round that happens. Glad you like it. Now I'm intrigued as to what you are doing with it.... Re: PutTile16x16 Pixels + Attributes - britlion - 06-01-2010 boriel Wrote:The problem here is __ATTR_ADDR is taking into account a configurable SCREEN_ADDRESS variable (previously discussed here). So if you want your program to work in a variable screen address, you should work considering 0 offset an adding (SCREEN_ADDRESS) at the end, so should change it this way: Boriel - if you put in the limit that any screen address has to be 256-byte aligned (and really, it should be. That's the whole point of INC H going to the next line in a character), then you could just tweak the add A,88 there to add in the "page number" instead.... no? I think that would be a better result, allowing for a variable screen address. Incidentally, why have a variable screen address? For writing to a shadow screen? If it's about other computers....they won't have the screen layout of a spectrum anyway! Re: PutTile16x16 Pixels + Attributes - LCD - 06-01-2010 britlion Wrote:I'm glad it's working for you! Didn't realise you had attributes there. Would be too hard to make the code do that, I guess, owing to the method of access. You could do attributes first, or last, but not middle. It did seem to make more sense to go in order of lowest memory address to highest, somehow. You can get about 20% of the tiles changed inside one screen refresh, so it doesn't really matter too much which way round that happens.No need to change anything, I love it. The 20% change is no problem if I use delta-scrolling (means: draw only tiles if they are changed). The routine is fast enough for my needs. britlion Wrote:Glad you like it. Now I'm intrigued as to what you are doing with it....First, it will be included in the code library of BorIDE together with PutChar and PutBlock, and then I will write one or two games using it. Re: PutTile16x16 Pixels + Attributes - oblo - 11-22-2018 Hi all I'm trying to use britlion's putTile library but I'm getting screen garbage instead of a defined 2x2 UDG. For instance, please look at this code that defines a 2x2 circle: Code: Dim circulo(31) As uByte => { _ Instead of printing a 2x2 circle with an outside square, it prints some screen garbage, including flashing sprites, so I must be reading and/or writing in a wrong memory address. Please, could you tell me what is the right way to deal with putTile and 2x2 sprites? Thanks and regards Re: PutTile16x16 Pixels + Attributes - britlion - 11-23-2018 You don't have enough data, for starters. It's years since I wrote it, so I'm going back to first principles - but right at the very top it says: ' Routine to place a 16 pixel by 16 pixel "Tile" onto the screen at character position x,y from adddress given. ' Data must be in the format of 16 bit rows, followed by attribute data. So, given I think it requires 68 bytes of data, it's clear that since you're only giving it 64 (scratch that. 32), you're going to get some random colour data. Also, I think you are giving it UDG, rather than 16 bit rows? Should be: 0,0, _ 63,252, _ 64,2, _ 67,194 _ 79,242, _ ... ... colour byte, colour byte, colour byte, colour byte I think. You are also doing a DIM of 32 bytes in your code there, and trying to put 64 bytes into it.... - that's a bit weird. So looks like you are actually defining a 1x2 half circle and giving it 32 bytes of extra data that's ignored? That would explain garbage on screen, I think. As well as the data not being ordered correctly. Code: Dim circulo(31) I don't think you should use an array. I don't know what extra data is in the array that might make it break. I'd just use an ASM block with an @pointer in it. Then it's raw data. Re: PutTile16x16 Pixels + Attributes - oblo - 11-23-2018 Thanks britlion, so I forgot to add more data and that's why isn't working I'll try it again, but in the meantime I was testing your FourSpriter (<!-- l --><a class="postlink-local" href="http://www.boriel.com/forum/how-to-tutorials/topic400.html">how-to-tutorials/topic400.html</a><!-- l --> and <!-- l --><a class="postlink-local" href="http://www.boriel.com/forum/how-to-tutorials/topic397.html">how-to-tutorials/topic397.html</a><!-- l -->) and it works very good for what I'm looking for. Cheers |