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 ... 28 29 [30] 31 32 ... 135
436
« on: May 22, 2011, 11:27:05 pm »
Hmm... the problem with the new constants runs deeper than I thought. The normal static pointers optimize with the assumption they will eventually be replaced by a value within the normal pointer range during the second pass since their actual value is unknown during the first pass. Constants on the other hand ARE known on the first pass and this replacement model doesn't work in that case since the value is never updated during the next pass. Therefore, this requires me to modify some very core routines.
So because I'll be rewriting this part anyway, I might finally add a request from a while ago which was to allow static variables to be used before they're defined. So you can put data at the end of your program instead of only the beginning. This has some drawbacks however: First, it will be harder to debug errors. Since the compiler won't know if a symbol is defined until the end of the source, it would not be able to scroll to the specific place it was used and would instead have to just display "Missing: Str1A" for example, just like labels. Secondly, it uses up an extra symbol in the symbol table for each use until its finally defined. As an example of this, here is the symbol count for this program:
:.TEST :Str1 ;1 Symbol :Str1 ;2 Symbols :Str1 ;3 Symbols :"H"->Str1 ;Now defined, so 1 symbol from now on :Str1 ;1 Symbol :Str1 ;1 Symbol :Str1 ;1 Symbol I'm guessing this will result in a lot of "MAX SYMBOLS" errors if people start using this too much since you only get 153 symbols to use. What are everyone's thoughts about this? Is it worth the extra effort? I feel like most people who would use this would want to use it on large programs in which case they would probably run out of symbols anyway and be forced to move them back on top, which is a very annoying process.
437
« on: May 22, 2011, 05:14:53 pm »
Thanks for those! I was actually thinking of changing the 3 level grayscale to be row major too so I'm probably going to be using a whole new routine for that.
438
« on: May 22, 2011, 01:46:23 am »
Not Axe's "B" the assembly "b". The way pause works is it runs a loop which executes b number of times, which is then repeated pause number of times. The thing is, after each loop, b is reset to 256. But since b is not set to anything the first time, it could be any number. So each cycle of "Pause 5" could look something like this:
loop 100 loop 256 loop 256 loop 256 loop 256
So the first iteration could be any random number of cycles. But you generally never need to worry about that because you don't normally call pause with such low numbers.
439
« on: May 20, 2011, 09:57:04 pm »
The best solution is to flip them before compiling so they can be in the right order as well when reading the sprite. Its also faster during runtime, but could use more memory, depending on how many sprites you use.
440
« on: May 20, 2011, 09:51:58 pm »
I think I'll release a new version soon just to fix bugs again.
441
« on: May 19, 2011, 09:07:53 pm »
Yeah, this game looks very polished and well animated. Excellent job! Another solution to the 8kb problem by the way is to just compile it as an application if you're not using self-modifying code, that gives 16kb.
@thepenguin77: There are a lot of ways assembly programmers can help the language if you're interested in that. In the developers section of the zip file, there's z80 source to every routine used in the parser. I'm constantly trying to optimize, improve, and add new ones. So if you have ideas there I'd love to hear them. There are also Axioms (Like CrabCake) which are language extensions written in assembly to add new commands to Axe programs. These are also documented in the developers folder and are fairly easy to make and use.
442
« on: May 19, 2011, 07:10:07 pm »
Yes, I'm using spasm, I'll keep the must be in ram thing in mind, and what token should I use then?
Any unused token is fine, I definitely recommend tokens on the [vars] "Zoom..." menu when possible since those are guaranteed no to used by Axe in any future update. Also, only the initial program has to be in ram. Once its converted to an appvar, it can be in ram or archive. You could bypass the conversion yourself actually if you change one of the bytes in the 8xp file, but that's more complicated.
443
« on: May 19, 2011, 07:01:31 pm »
1) By the looks of your code, you are using SPASM right? TASM doesn't hande the .org statement correctly so that wouldn't work. 2) If compiled to a program, it must be in RAM so that Axe can convert it to an appvar for you. 3) You cannot use tGetkey as your token since Axe already uses this, regardless of the rr modifier.
Everything else looks correct though...
444
« on: May 19, 2011, 05:24:52 pm »
Hmmm, I did forget to mention that very big interrupt routines (such as those with Dispgraph) can be problems, so a huge routine should start with FnOff and end with FnOn.
Axe automatically adds this for you. When you're in an interrupt routine, the interrupts are turned off until it returns to the rest of the main program. All DispGraph commands are interrupt safe I believe.
445
« on: May 19, 2011, 02:58:00 am »
For my calculator with a bad LCD, if I don't include the "out" commands as part of my T-state count between LCD commands, my calc stops glitching at exactly 59 T-states but I have heard 1 report that it got an occasion glitch at this speed so 60 is more conservative. This corresponds to 71 and 72 T-states respectively if you include the out command in your count. I'm not sure how the delay ports affect these speeds.
446
« on: May 19, 2011, 02:50:47 am »
Compiled axe programs are already asm. Hot_Dog, why do you need the AxesOff? Couldn't you do something similar to what I do with the app header where you call the main program as a subroutine. Something like this: AxesOn: #asm code here call mainprog AxesOff: #asm code here ret MainProg:
That way you only need one command at the beginning and the users could use ret just like they're used to. I don't know how the source looks though, so maybe there is something preventing this I don't know about? Anyway, nice job!
447
« on: May 19, 2011, 02:34:14 am »
Yeah that's perfectly fine, and you probably won't lose originality points for it either if this is the first time anything similar has been ported to the 83/84 series calculators before. But if it is some kind of variant of a very common game for calculators, I would add in some new features just to make sure you have something unique.
448
« on: May 18, 2011, 04:44:58 pm »
Am I the only one who pronounces jr as "jur"? I think ldir as "elder" is normal. But a lot of these I instinctively pronounce as what they stand for. Like I generally say "compare" for cp and "rotate right" for rr, etc. instead of reading the actual letters.
449
« on: May 18, 2011, 03:03:13 am »
Yeah, I guess I'll add it then. Found an optimization for it too; b is zero at the end of the djnz so it can be used to zero the h register which saves a byte and 3 cycles.
450
« on: May 17, 2011, 06:52:21 pm »
I found the bug to the big endian reading/writing. It just happened this version so it wasn't around before. Its because I added the No-Op command which uses the illegal command size 0. A zero normally signifies an immediate replacement when found right after a command and the no-op was right after the swap command so it was trying to replace pars of the swap command with the last thing in "ans" which would be the constant. So I've moved the no-op operation to the top of the file instead so that its never trailing another command. I realize I could just slap on the label to any zero byte in the file, but I'm trying to keep it readable.
Pages: 1 ... 28 29 [30] 31 32 ... 135
|