346
Miscellaneous / Re: How many 8x8 sprites are possible?
« on: April 28, 2014, 01:01:03 pm »
There are 28*8=18,446,744,073,709,551,616 unique monochrome 8*8 sprites.
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. 346
Miscellaneous / Re: How many 8x8 sprites are possible?« on: April 28, 2014, 01:01:03 pm »
There are 28*8=18,446,744,073,709,551,616 unique monochrome 8*8 sprites.
347
TI-Nspire / Re: nGL - a fast (enough) 3D engine for the nspire« on: April 28, 2014, 12:44:35 pm »Maybe it's possible to premultiply the textures, but for 4 different levels of light that's already 2MB for a 512px texture. I don't know, maybe in a later version. I was going to suggest exactly this. Keep in mind that (I believe) a lot of people are happy with the original 16px textures, and with those you could have copies of one texture for all 16 light levels in only 8KB. Of course, if you implemented this for all block types it would start to add up, but it would still only be about 2MB for basically every block in current Minecraft, which includes far more block textures than you'd need with the current set of blocks supported. Also, hi. I normally don't tread outside of 83+/84+ threads, but this is the one thread that I make an exception for and keep track of because your work on this is awesome. Out of curiosity because I don't have an Nspire and couldn't see the statistics anywhere in recent posts, what's the performance of this like relative to the draw distance? 348
TI Z80 / Re: [AXE LIBRARY] GrayLib: (nearly) perfect grayscale« on: April 26, 2014, 08:00:41 am »How does one write text with the small font to the screen using GrayLib? Assuming that you actually mean writing text to the buffers (since direct writing to the screen with the interrupt running would be promptly overwritten), you want to use included gray text printing commands. Set the °GIT (GrayLib Include Text) constant to nonzero (preferably 1) to include the string printing core routines, GStr(), GStrG(), GChar() and GCharG(), and optionally set °GIDEC (GrayLib Include DEC) to include the GDec() and GDecG() routines and/or set °GITOK (GrayLib Include TOK) to include the GTok() and GTokG() routines. Each routine expects the value of the appropriate type to be printed in r1 (or simply given if the routine is a G...G() routine) and the color code to be in r2. One slight deviation to this rule is that the token printing commands expect a pointer to the token to be printed. Because color codes were a structure entirely of my own design, I should probably explain them a bit. The commented version does mention that a color code is of the form 0b0000FFTT, where FF is the fill color and TT is the text color. To clarify that a bit, that means that fill color is a value from 0-3 that represents the desired background color (since text printing clears the area behind it), text color is also a value from 0-3, and the two should be combined into one number of the form fill_color*4+text_color. And to be super clear, the values 0-3 represent increasingly dark colors. When using 3-level grayscale, 0 is white, 1 is gray, and both 2 and 3 are black. When using 4-level grayscale, 0 is white, 1 is light gray, 2 is dark gray, and 3 is black. EDIT: Is it just me or is archive/unarchive broken with GrayLib on? It's possible, I'm not really sure how well those commands handle a third-party interrupt running when they're called. It may just be necessary to temporarily disable grayscale when performing them. Simply using FnOff followed by FnOn may work well enough, but if not, use the full-blown GOff() followed by GOn(). 349
Axe / Re: Axe Q&A« on: April 26, 2014, 07:37:47 am »the stuff is this: Yup, the issue is in the "stuff with E". To read data from inside your program/application, you want to use nib{}r. The nib{} command with no modifier always reads from the $8000-$FFFF address range (RAM), whereas the command with the modifier always reads from whichever range your code resides in: still $8000-$FFFF for programs, but $0000-$7FFF for applications. 350
Axe / Re: Axe Q&A« on: April 25, 2014, 05:56:55 pm »
I can't immediately see any reason why that would be behaving oddly. It might matter what the "stuff with E" is.
Also, since applications aren't modifiable, {GB2} can only be a constant. Why not pull out whatever value it holds as a constant? 351
Reuben Quest / Re: [Beta] Reuben Quest Axe Remake« on: April 25, 2014, 02:29:44 pm »
I was curious, what's the distribution of the 10KB of RAM needed? That sounded like a lot to me, especially considering this had to be a BASIC game that resided in RAM itself in the past.
352
The Axe Parser Project / Re: Bug Reports« on: April 25, 2014, 02:27:36 pm »
It's overclocked? I wouldn't be surprised if that's the issue. Believe it or not, TI had their reasons for capping the speed at 15MHz. The hardware has the framework for controlling two higher speed settings, presumably 20MHz and 25MHz, but they probably scrapped them because they were unstable.
353
ASM / Re: Buffer fliping : messing with display« on: April 25, 2014, 01:54:45 pm »
I'm not convinced that using a custom display routine like that would really save you that much speed. The only possible merit would be if it runs at 15MHz, and that's still a small one.
At 6MHz, even if nothing changed between one frame and the last, my best efforts at prototyping a fast diffing display algorithm that also clears the last frame buffer resulted in something that still runs in about 2/3 of the time that Axe's standard DispGraphClrDraw runs in. That may sound like a big speed boost, but when you take into account the other processing that has to be done each frame, it really isn't. Assuming the current framerate is relatively low (<=30) and that's why you were searching for this boost, the framerate would only improve by about framerate/3 percent; 30fps would become 33fps, 20fps would become 21.3fps, and 10fps would become 10.3fps. The total percentage gains only start becoming substantial above 30fps, but if the framerate is above 30fps, you don't really need the gains anyways. At 15MHz, it might be worth it. With my prototype algorithm, if nothing changed between one frame and the next, it would run in about 1/4 of the time that Axe's standard DispGraphClrDraw runs in. With a relatively low framerate (<=30), it would improve by about framerate*4/5 percent; 30fps would become 37.6fps, 20fps would become 23.1fps, and 10fps would become 10.7fps. But keep in mind that these are numbers for the best case scenario, in which nothing at all has changed between frames. Even if only a quarter of the buffer bytes changed, I suspect those gains would be about cut in half. If about half of the buffer bytes changed, the gains would probably be cut down to a quarter. In conclusion: you'd probably be better off spending your time looking for optimization potential elsewhere, namely in the graphics rendering code itself. If you want to fill me/us in on the kind of computations that are done for graphics on an average frame, I/others might be able to give some ideas. 354
The Axe Parser Project / Re: Bug Reports« on: April 25, 2014, 12:21:51 pm »
Based on how weird that behavior sounds, I'm inclined to agree with your potential determination that it's the calculator/OS, not Axe.
355
Reuben Quest / Re: [Beta] Reuben Quest Axe Remake« on: April 24, 2014, 06:13:11 pm »Be sure to send the App and all three Appvars to your calc. The Appvars must be in archive. Is there some weird reason behind this? Because the GetCalc(NAME,FILE) command for reading from archived variables has also worked with variables in RAM for a while now. In order to re-adjust the greyscale you must delete the appvar GS Just map a key to the GTune() function. Alternatively, you can be a bit more bold and make your own contrast/grayscale controls, in which case I'd advise checking out the source of the GTune() function to see how to properly change contrast and grayscale delay. 356
Axe / Re: Axe Q&A« on: April 24, 2014, 06:04:08 pm »Also it's in the PDF IIRC. There's actually more than Y0-9 but they have different purposes that I don't remember exactly and they're not in the doc, only in the changelog. Yeah. You can use Y1T and Y2T for variables in RAM (not using the file syntax, just normal like GetCalc(...)→Y1T), and if the variable is moved, the pointers will be adjusted to continue to point to the same offset into the variable. Unfortunately, there can only be two of them, because TI (somewhat reasonably) decided to only support two. 357
ASM / Re: 8x+ > ram questions« on: April 23, 2014, 08:33:41 pm »
Are ports 25 and 26 actually bank-specific? I don't see that suggested in their WikiTI documentation, and my hunch was that they weren't. The default values of 10h and 20h seem to make sense with what areas are normally executable.
358
General Calculator Help / Re: ti84+SE keyboard stopped working« on: April 23, 2014, 12:45:58 pm »
Rice is a dessicant, so it tends to absorb moisture from its surroundings. Putting the calculator and rice in an airtight bag only allows the rice to absorb moisture from the calculator once any moisture in the limited amount of air in the bag is absorbed. If you've ever seen rice inside of a salt shaker in a restaurant, it's there to keep the salt dry.
Whether or not this tactic would actually work in this case, I'm not sure. But I've had an iPod touch be in a washing machine for about 5 minutes which seemed as if it had killed it, so I dried it off the outside and put it in a bag with rice. I took it out about a day later to discover that everything except the wifi worked, which was a better outcome than I had feared. 359
Reuben Quest / Re: Reuben Quest Axe Remake« on: April 22, 2014, 03:37:18 pm »I read somewhere in the topic that you used to have an 8*9 Reuben sprite for the map. I can hack Axe's sprite routine in two seconds if you want so that you can use it because it looked better IMO. I can confirm that any sprite routine can be hooked into to support variable height for probably about 40-50 bytes (per routine, although there might be a clever way to combine them). 360
Axe / Re: Axe Q&A« on: April 22, 2014, 12:36:03 pm »
If you haven't already, you can check out pages 14-16 of the Documentation.pdf file included in the Axe download (check out the rest of it, too!). It covers the basics of reading and writing to external variables, and includes a simple example of how to retrieve/save a high score value in an external variable.
One thing it doesn't really mention is that it's a good idea to make sure saved data is archived before exiting, so it will persist through accidental RAM clears. You can do this simply with the Archive command (and then you'll probably want to UnArchive it when your game starts). |
|