1591
Axe / Re: Online Axe command index
« on: December 18, 2010, 03:40:57 pm »
Can you just paste in the actual characters? Like ° and ►?
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. 1591
Axe / Re: Online Axe command index« on: December 18, 2010, 03:40:57 pm »
Can you just paste in the actual characters? Like ° and ►?
1592
Axe / Re: Appvariables for Highscores« on: December 18, 2010, 02:12:43 pm »I'm playing civilization V so it will be later Storing the value to a static pointer would return 0, but storing it to a variable pointer returns the pointer. For example, whereas 0→{Str1} would return 0, 0→{A} would return A. EDIT: And just a side note, storing a two-byte value to a variable pointer, like 0→{A}r, would return A+1. 1593
Axe / Re: Full Normal Slow?« on: December 18, 2010, 01:50:20 pm »
The processor can only run at 6MHz or 15MHz (with 15MHz not being available on the 83PBE). There is no "Slow" speed mode available.
1594
Axe / Re: Appvariables for Highscores« on: December 18, 2010, 10:15:28 am »
Instead of a For() loop, you can use the Fill() command to fill a section of memory with a value. That, and a few other optimizations:
Code: [Select] !If GetCalc(NAME)→H It might be a good idea to check whether or not creating the appvar was successful, though. You wouldn't want the game to proceed, thinking that the appvar exists when it really doesn't. 1596
ASM / Re: [z80] 16-bit * 16-bit = 32-bit Signed Multiplication« on: December 17, 2010, 08:59:27 pm »
Yeah, I already
1597
ASM / Re: [z80] 16-bit * 16-bit = 32-bit Signed Multiplication« on: December 17, 2010, 08:21:16 pm »
I LOVE YOU GOPLAT
EDIT: Well I don't really love you, that would just be creepy since I don't know you. But still, that's a pretty nice method you pointed out. 1598
TI Z80 / Re: YAAR (Yet Another Assembly/Axe Raycaster)« on: December 17, 2010, 06:53:45 pm »
Yes, the textures have a lot to do with it. Even if you don't know assembly, you can probably guess that drawing an untextured wall slice:
Code: [Select] ld de,12 Will run a bit faster than drawing a textured wall slice: Code: [Select] DrawWallSliceLoop: Because of this, my primary optimization goal is to try to do something about this. EDIT: I already have some ideas about how to try to normalize the time drawing a wall slice takes. 1599
TI Z80 / Re: YAAR (Yet Another Assembly/Axe Raycaster)« on: December 17, 2010, 06:17:15 pm »
An update:
The assembly version mostly works now! I say mostly because the raycasting engine works just like the Axe engine, but sometimes it crashes, which I need to look into before releasing it. In the assembly version, I made a lot of optimizations, especially in areas where the full 16-bit spectrum is not needed. The assembly version is about 500 bytes smaller than the Axe version, so it is about 70% of the size of the Axe engine. And by my quick test, it appears that the assembly engine runs about 30% faster than the Axe engine. Unfortunately, by my math, SLOW * 1.3 = STILL SLOW. At 6MHz, I would need about a 100% speed increase for this to run at a decent framerate. And that's with fairly low standards for "decent framerate." I'll be constantly looking into optimizations. (How ever did you do it Peter Bucher...) Just for speed comparison, here are two GIFs of the two engines rendering the same 32 frames at 6MHz with no pixel doubling. As you can see, closer (and thus taller) walls have a habit of killing the FPS.
1600
ASM / [z80] 16-bit * 16-bit = 32-bit Signed Multiplication« on: December 17, 2010, 04:59:42 pm »
This is a somewhat challenging routine I've been trying to develop for z80 assembly. I'm trying to find a way to multiply two signed 16-bit operands together and get a signed 32-bit result.
I already have one working method, although it's fairly hacky. Its general structure is as follows:
Somehow, I get the feeling there are faster and/or more elegant solutions than this. The most elegant solution would just be a modified restoring multiplication algorithm that deals with signed numbers correctly. After having stared down the restoring multiplication algorithm for about the past hour, I don't know how reasonable this is, though. And unless there's some simple change I'm not seeing that would suddenly make this work, any solution of this form would probably consume a lot of extra cycles in each iteration. Something that has occurred to me as a more achievable and probably faster solution, albeit larger, consists of a test that branches into one of three different versions of the restoring multiplication algorithm. Which algorithm to use would be determined based on whether neither, one, or both of the operands are negative. This is the method I am currently trying to develop. After a bit of messing around with the restoring multiplication algorithm, though, I'm still fairly confused about how to form the two modified algorithms that would be needed. Any ideas? 1601
The Axe Parser Project / Re: Assembly Programmers - Help Axe Optimize!« on: December 17, 2010, 01:11:47 am »
Some constant equality checking optimizations. Feel free to extrapolate these optimizations to values that previously weren't optimized because the code would have been too large.
Also, p_Div32768 can be optimized to be the same as p_SLT0 and p_GetBit0. 1602
ASM / Re: F**king stacks! How do they work?« on: December 16, 2010, 11:16:07 pm »
You know ld h,d / ld l,e is faster than push de / pop hl, right?
1603
TI-BASIC / Re: Ti-83+ Ti-Basic: Fastest Way to get the Graph Screen to redraw itself« on: December 16, 2010, 03:26:21 pm »1604
Axe / Re: 24*24 sprites?« on: December 16, 2010, 03:16:05 pm »
Oh, I thought you wanted to split it up into 8x8 sprites so you could then use the built-in sprite routine to draw an array of 8x8 sprites. If you're fine with just copying the 24x24 sprites aligned to byte boundaries on the buffer, then may I suggest a routine like the following:
Syntax: sub(24S, Column (0-9), Row (0-40), Sprite pointer) Code: (Size optimized, 59 bytes, ~0.0014 seconds at 6MHz) [Select] Lbl 24S Code: (Speed optimized, 76 bytes, ~0.0011 seconds at 6MHz) [Select] Lbl 24S
1605
Axe / Re: 24*24 sprites?« on: December 16, 2010, 11:47:22 am »
There would be a way to shuffle around the sprite data at runtime, although that would result in unnecessary code bloating. The best thing to do is to just change the hex code yourself.
How many 24x24 sprites do you have? If it's only a few, you can probably just rearrange it manually. Alternatively, if you post the hex here, I'm sure someone can help you out with rearranging the hex. I would certainly try to help. EDIT: If you have bitmaps of the sprites, those would probably provide the easiest way to convert the sprite into multiple 8x8 sprites. EDIT 2: If you would rather shuffle around the sprite data at runtime, I wrote a routine to do this. The following code will take a 24x24 sprite at Pic1, form its equivalent 8x8 sprites at L₁, and then copy these back to Pic1. The resulting 9 sprites will occur in this order:
Code: [Select] Pic1-3→P The routine is 99 bytes. Although it isn't too large, I myself would pre-rearrange the data and avoid the need for it. |
|||||||||||||
|