This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Messages - Quigibo
Pages: 1 ... 67 68 [69] 70 71 ... 135
1021
« on: July 23, 2010, 01:40:00 pm »
This is just a general warning because I didn't realize how badly I screwed up the text command in the past.
I completely rewrote all of the Text( commands. They now have the exact same syntax as Output( meaning you can display more than one thing per use like Text(2,3,"Hello"," World:",A>Dec) for instance. It also means you can define just the coordinates Text(2,3) or a compressed coordinate Text(3*256+2). The only problem is that I had to redefine the existing "draw text here" command because that was formatted the same way, but it was a relatively new command so hopefully no one has gotten too comfortable with it. To replace it, I will add a new command called "Text " with a space and it will act exactly like "Disp " but for small text. So to reiterate;
Disp <=> Text Output() <=> Text()
They can be used interchangeably and have exactly the same syntax.
The thing I was talking about when I said the old text routines were screwed up is that they were very inefficient and I had 2 sets of routines, one for text anywhere and one for text at the current pen location. Also, the actual coding of the text parsing was quite messy. I combined everything to a single, smaller routine and organized the code and commands to make it more readable. I was using ztrumpet's spider game as an example and it shrunk by almost 100 bytes and text wasn't even a part of that game.
Hopefully I will get one more major optimization before the next release because I had a revelation yesterday. I got to thinking, what's the difference between data and subroutines? There isn't any! So I can mix in all the subroutines with the data as if it was data without having to make a 3rd pass which can save a lot of bytes in the executable. The only side effect to this is that if you are defining 2 blocks of data that are split by a command that uses a subroutine, then the 2 pieces of data are no longer consecutive in memory. I doubt anyone will have a problem with this though because its always good practice to define consecutive data together without interruptions and I've never seen anyone do it wrong in their code.
Anyway, this will be the first Axe release since the 0.2.x versions that features major optimizations that will reduce the size of just about ALL programs.
1022
« on: July 23, 2010, 03:43:59 am »
Those are all related to a known bug which I have already fixed. Since it ends with "}" that is a command that can use the r modifier which is currently causing an error when its done on the last line.
1023
« on: July 22, 2010, 10:56:56 pm »
Well the first one for sure I will add since it can be used for monochrome masking as well, but I'm still not so sure about the other ones since the 2nd one can be written in Axe and the 3rd one seems like a bad idea. They won't be a priority right now or in a near release.
I guess I'll keep the single line coordinate method for Output() and Text() just in case. Also, there is no reason to have a separate 8.8 routine for sin because you can do basically the same thing with this: sin(A/256)*2 The only advantage of a separate routine is to use a little bit of the decimal part to get slightly higher accuracy, but its not going to be that much better.
In other news, I've got archive reading completed and I'm rewriting the tutorial about it because there is a lot of new information to learn about, but lucky no new commands.
1024
« on: July 21, 2010, 05:19:03 pm »
Actually, the grayscale tiles are only double the size, not quadruple. In 4 level grayscale, you only need 16 bytes because there are 4 combinations you can make with the 2 layers of bits. In 3 level, you can 3 of the combinations be colors and the last combination be a transparency or simply unused.
But I agree, this is just for generating a general idea of how the map is going to be layed out and I think the extra gray layer is an unnecessary complexity just for a preview of the map.
1025
« on: July 21, 2010, 05:12:06 pm »
Oh yeah, I'm phasing out the single argument syntax of Output() because the compiler will automatically optimize that for you if the first 2 arguments are constants. I haven't implemented the optimization yet but apparently I must have accidentally cut it out of 0.3.3, it was supposed to be a 0.4.0 change, my bad. Awesome game though! This is very enjoyable to play. Can't believe you made it all in 24 hours
1026
« on: July 21, 2010, 01:13:11 pm »
That's not a .org statement, that's just a unique header name so you don't accidentally import an appvar that's not an Axiom because no further checks are done after that. Its more like the $6DBB used by the TI-OS, which is the AsmPrgm token. If I do decide to merge Axioms with external subs that would kind of invalidate its use for the contest because there would be no way to tell if the generated code was written in Axe or assembly just like the executables. But I suppose if the source for the Axiom were released, it could be compiled using Axe to prove it.
There are other technical limitations though like a size limit for each routine. I think to avoid those, I could have the Axioms just be source code rather than assembled code so they can compile just like regular source code. But the other thing I dislike about merging the Axioms with external subs is that they are not easily modifiable. If you need to make a small change to the Axiom like to change the dimensions of a tile mapper or something, you would have to have the original source code to recompile it. But if you have to do that, I might as well just have a separate way to do external subs with the actual program itself.
1027
« on: July 21, 2010, 01:39:15 am »
Great tutorial Nemo! Here it is in as a full TI-BASIC program. EDIT: Also, I uploaded a converter to go the other way.
1028
« on: July 20, 2010, 10:25:47 pm »
I've finished the popular option "OS var support". You are now able to Create, Read, Modify, or Delete pretty much any OS variable you can think of, even obscure ones like GDBs. The only complication right now is that it is very difficult to read or write to any structure that uses floating points like Reals, Lists, and Matrices. I will probably have to add floating point conversion commands to simplify this, hopefully it will be in the next version, I'm not sure yet. But for now, strings, pictures, programs, and appvars are extremely useful as external variables. The best part is, there is no new syntax, you use the same commands you're already used to and plus the addition of DelVar which is intuitive to use.
I am also half way done with linking and I'm just about to start working on reading from archive, just have to think of the simplest possible way to approach it so its easy to use and not very confusing. It will probably consist of a CopyToRam command and a ReadByte command for the actual reading.
1029
« on: July 20, 2010, 06:09:18 am »
There actually is a way to decompress RLE on the fly for gigantic maps. It's not as efficient as the original RLE, but it allows random access (well random-er at least) to the data in the structure. Its a little complicated, but here is what I am thinking:
First of all, for this to be worth it, each row has to save more than 2 bytes on average, or 4 tiles if you're using this as an alternative to half byte encoding. The way this works, is you only compress each row or column with RLE instead of the entire data. You then keep a list of pointers that each point to the individual rows of the data. The rows themselves are small compared to the whole thing so they can be decompressed on the fly.
Here are some phony numbers: Maps size: 100x100 Tiles: 10,000 Half Byte compression size: 5,000 bytes Each row given RLE compression: 3,000 bytes List of pointers: 200 bytes Combined total size: 3,200 bytes
Average bytes in a row: 30 Average worst case number of operations to get to intended data: 30 ^ This is definitely fast enough for on the fly decompression.
This is valid syntax when defined in this order:
[RLE row 1]->Str0 [RLE row 2]->Str1 [RLE row 3]->Str2 ... [RLE row 100]->Str99 {Str0r,Str1r,...,Str99r}->GDB1
Unfortunately, that list already uses 100 out of the 150 names you're allowed so it might be better to keep track of the cumulative size and use Str0+Offset so that you're only using one name.
1030
« on: July 20, 2010, 01:37:51 am »
Good News:AHA! I think I've found the source of the mysterious DispGraph commands sometimes not re-enabling interrupts!!! http://awurl.com/6nvjrb7L3Probably Calc84Maniac was unaware of this and I think most z80 junkies also don't know about it. It took me days just to find any relevant information on this. Bad News:There doesn't appear to be any way around it that I can see, but maybe someone knows more about this than me. The interrupts might have to be manually re-enabled by the programmer at the end of the routine, but this is a major inconvenience. Good News:1000th Post!
1031
« on: July 19, 2010, 10:22:48 pm »
Its not really something high on my priority list to fix and its not really a bug. The problem is that it requires a lot of extra code to figure out where to start printing from the top of the screen and its much simpler to go just start with the same line. I think the DCS instant goto does this as well if I'm not mistaken. The only easy way to have the scrolling end up looking like it does in TI-BASIC is well... to actually scroll, but I think the convenience of instant goto is more favorable than bottom line error highlighting.
1032
« on: July 19, 2010, 09:53:58 pm »
That's a great idea DJ! I will amend the first post of this topic to list all known bugs even the ones I discover and fix but don't report. I will try to keep the list up to date as new versions come out.
1033
« on: July 19, 2010, 06:45:23 pm »
@Darl That would be a huge inefficiency, but you did remind me of the fix extender idea that I forgot about. You can reset all the fix modes at once by chaining them together like "Fix 0246" for instance to set modes 0,2,4, and 6 in a single line of code for convenience. I might have time to add that next release.
Also another feature I will be adding is "Temporary Pointers" which are similar to static pointers. For times when you only need to use some data exactly once, you will be allowed to do things like Pt-On(X,Y,[0123456789ABCDEF]) to both create the data in memory and return the pointer to that data in a single line. Its just as efficient as regular static pointers but has the advantage of not taking up any extra pointer names so you are less limited by the 150 name limit. This also will apply to Strings, Data(), and the Zeros() commands which can also be used to return temporary pointers.
1034
« on: July 19, 2010, 06:27:23 pm »
Yeah, I have the wrong checksum, I forgot to reset it to zero after generating the program, I've fixed it in now. I'll re-upload it later.
1035
« on: July 19, 2010, 01:33:57 am »
No, they disable them fine on their own, you only need to re-enable them after the command. Adding that extra FnOn is only an extra byte so not a big deal really.
Pages: 1 ... 67 68 [69] 70 71 ... 135
|