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 - thepenguin77
Pages: 1 ... 38 39 [40] 41 42 ... 108
586
« on: September 20, 2011, 07:38:21 pm »
I was surprised at how fast thepenguin responded.
You can't see it yet (due to post count), but we have a IRC client embedded in the page. This leads to very quick replies to posts. As far as the amount of ram the calculators actually have, you are right, it is not 24KB, that is just the amount that TI advertises to the public and is the amount officially supported for saving user variables and such. However, you don't have to listen to TI's demands when programming, so, in reality the old calculators had 128KB of ram and the new ones have 48KB of ram (8 and 3 16KB pages.) While the z80 is an 8 bit processor, it still has 16 bit registers inside of it, and this includes the Program Counter. At any given time, the processor is addressing 64KB of data, which is split up into 16KB banks. The first bank is always operating system code, then, the next 3 banks can be switched however the programmer wishes, this includes a range of 128 flash pages and 8/3 ram pages. By default, one of the banks is flash, and the other two are the working memory. (Which is where the 24KB comes into play.) We think, (at least I do) that the main reason that TI cut the extra ram was purely to save money. It was not an attack against the GameBoy emulator because although we found out about the cuts a year or two ago, the actual change in manufacturing happened in 2007, which was long before the emulator. If you want some better pictures, check out datamath.org. They have a good comparison of the 83+ and 84+ here. I can't get GameBoy games on my calculator, but I did afterall buy it to use for school(my first graphing calculator!)
Actually, calc84maniac released a version that allows you to play gameboy games on the calculators wthout the extra ram, you'll have to look around the site for it, (he might have even put it on ticalc.org). The only problem though is that some games, like pokemon, have an extra 32KB of memory in the cartridge, and since the calculators only have 48KB of memory, I think you can see the problem. Edit (to your ninja): Flash memory cannot be used efficiently as ram because it can only be erased 64KB at a time. You can write as many 0's to it as you want, but to write a 1 requires a full sector reset. It is also very slow, a full sector program takes about 3 seconds. Edit 2: After a bit of googling, I think the smaller chip you found is our beloved crystal. This thing runs the internal clock as well as a set of super precise timers that are available to assembly programmers. This description fits since that chip only appears to have 2 leads.
587
« on: September 20, 2011, 04:08:32 pm »
Welcome, it's nice to see some one so excited to figure this out. However, not to be rude, but we have kind of already discovered the things you just mentioned. For instance, We know that there have been 3 major revisions of the ASIC which can be determined through an internal port. For more information on the different revisions, check out this topic over at UTI. As far as when the extra ram was eliminated, we are also pretty certain about when that happened. For one, the final ASIC revision has fewer pins than the previous versions. Then, using the chart I linked to over at UTI as well as a more recent study conducted by DrDnar, we have determined that the exact time TI cut out the ram was between hardware revisions G and H. You were right, the chip labeled Spansion is indeed the ROM, it's actually Flash memory though, so it can be changed programmatically. (DrDnar's topic has a lot of info on it.) As for the smaller chip, I'm not sure, I'm sure some one with more hardware knowledge could tell you. A few other things, 1) the 83+ and 84+ are actually pretty different hardware wise, however 2) The 83+SE, 84+BE, and 84+SE all are exceptionally similar, so similar in fact that recently, we have begun to reason that the 84+BE and 84+SE are the exact same hardware except for the Flash memory and case color. (Lastly, again not being rude, people typically don't like double posts here. You're find because you're new, but next time, just edit the post or add a few returns in.)
588
« on: September 20, 2011, 03:51:35 pm »
As far as I've noticed, the only time downrating gets to be a problem is when someone gets downrated and they make a production out of it... I could be wrong, though.
I agree. I like the rating system, but I don't think an individual post's rating should really be discussed. If some one makes a negative comment, but is not really bad enough for a moderator to take action on, a -1 on that post would let the author know that in general, that kind of behavior isn't what's expected at Omnimaga. If some one gets a big negative on a post, then they should just realize that what they did offended people, and try not to do it again. I think the rating system is a good way to provide subtle clues as to what should and shouldn't be posted here. The only times I see it being a problem is if some one starts accusing other people of downrating their posts and makes a big deal out of it. But then, it is really the person doing the accusing who is abusing the system.
589
« on: September 20, 2011, 03:32:12 pm »
I have a suggestion. On the font view screen (the one that appears when you press ALPHA whilst editing a char) you currently clear and then refill the screen whenever the cursor is moved. I came up with a way to fix that. Instead of clearing the screen every time, all you have to do it print the char and the char to its left in black-on-white, then move the cursor, then do whatever! I even wrote an Axe program that'll do it! Lemme know if you'd like it.
I know that . Maybe you should hear the background behind the font editor. When I first made it, I figured people would just press +/- and *// to navigate. Then, I got the awesome idea to display all the characters and let you pick one. Of course, since this was just a menu, I didn't spend that much time on it. It did it's purpose, and I was happy with it. When I made it, I didn't think many people would use it. Now however, I realized that everyone uses the chart every time and no one uses the controls I added. (look at those absolutes) This also explains why the editor starts out editing, and not viewing the list. Now you know.
590
« on: September 18, 2011, 06:56:55 pm »
Well, I must answer with eventually. I work on stuff in phases, so when this pops back up, you'll see a ton of updates.
591
« on: September 18, 2011, 05:09:09 pm »
As for the add and adc, there seem to be quite a few programmers (not here, of course) who misused the add instruction. For example, the code for the Pac Man machine (yes, it was a z80 too.) has a lot of "ccf \ add b". They still have no excuse.
Actually, you'll notice that instead of doing the stupid subtraction with B, they should have just done CP 9 since they restore A
592
« on: September 18, 2011, 04:12:09 pm »
Most of the stuff here is stuff anyone would do if they had little experience,...
but still: only TI does 'or a \ adc a, c'. Everyone that knows what a z80 is uses 'add a, c'.
Don't forget about LD B, 1 \ SUB B.
593
« on: September 18, 2011, 02:23:20 pm »
Another thing, sla a should probably be add a,a (and like you said, the programmer probably didn't know about add )
Good call
594
« on: September 18, 2011, 01:27:11 am »
A while ago when I was making my boot code 1.03 exploit, I was looking through the app security code when I found absolutely horrendous code. The whole system of app trials appears to be written by someone who has been programming z80 for less than a week. The worst part though is that this person was assigned to write code that protects paid apps and is run on a privileged page. But of all the app trials code, this one routine just sticks out as the worst TI code I've ever seen.
Here it is in it's entirety:
transformA: push bc ld c, 11h sub c jp nc, loc_4F03 or a adc a, c cp 0 jr z, loc_4F03 cp 1 jr z, loc_4F03 ld b, a dec b ld a, 2
loc_4EFA: sla a djnz loc_4EFA ld b, 1 sub b jr loc_4F05
loc_4F03: ld a, 0
loc_4F05: pop bc ret
First off, what is the purpose of this routine? It is a really complicated way to calculate the number of trials an app should have, I'll show the code that calls it at the end. But let's try to figure out what this routine does. (To be honest, I didn't figure it out until just now.)
The expected results are given by this table: if A = 0-16 result = 2^A - 1 if A >= 17 result = 0
However, since the result is returned in A, the real table is: if A = 0-8 result = 2^A - 1 if A >= 9-16 result = 255 if A >= 17 result = 0
Now, let's break this down and see where they went so wrong.
transformA: push bc ld c, 11h sub c jp nc, loc_4F03 or a adc a, c
When you see this, your expected response should be "wtf." What are they doing? First off, why don't they just do CP 11h \ JR NC, loc_4F03? Then, why do they use ADC? I honestly believe the person who wrote this code didn't know that ADD existed.
cp 0 jr z, loc_4F03 cp 1 jr z, loc_4F03 ld b, a dec b ld a, 2
Again, horrible. CP 0 is a no. CP 1 is acceptable, but DEC A is preferred. And would you look at that, they DEC A anyways!
loc_4EFA: sla a djnz loc_4EFA ld b, 1 sub b jr loc_4F05
They actually did the loop correct, which is a surprise. But what on earth are they doing at the end. Again, I don't think this programmer knew that you are allowed to do actions to A, like ADD and SUB. But the worst part is that they could have used DEC A, but what really sets this apart is that they have already used DEC once! It's not like they didn't know it existed.
loc_4F03: ld a, 0
loc_4F05: pop bc ret
They finally wrap it up with this. XOR A would be preferred, but the programmer probably didn't know what XOR does.
For comparison, here's how the routine should look:
transformA: or a ret z cp 11h jr c, notOver17 xor a ret notOver17: ld b, a ;b is trash anyways ld a, 1 shiftLoop: add a, a djnz shiftLoop dec a ret
Ok, but it doesn't stop there, here's the code that calls it.
call getCertByte
loc_4E55: push af ld b, 9 sub b jr c, loc_4E6B pop af ld b, 8 sub b call transfromA ld d, a ld a, 8 call transformA ld e, a jr loc_4E72
loc_4E6B: ld d, 0 pop af call transformA ld e, a
loc_4E72:
It should be noted that LD A, 8 \ CALL transformA is the equivalent of LD A, 255.
Well, I hope you enjoyed that. Hopefully this will help to explain the dislike of TI that the more advanced assembly programmers share. It is code like this that causes Err:Version and Err:Bad Address, and the OS is full of it.
Edit: Hey, what an awesome post to be number 1000.
595
« on: September 17, 2011, 02:10:41 pm »
You would make a program like this.
/cut
And then make it "Run on zStart" with ON + 0. I attached an assembled version.
This will install the hooks of the apps when I quit zStart, right ? And this will not interfere with zStart's hooks (because installing Symbolic kills zStart's hooks: I can't run archived progs) ?
Yeah, I forgot about that, Symbolic has a parser hook which is the basis of how it works, as of now, the best thing I can say without getting super complicated would be to run programs with ON + Enter. Sorry about that.
596
« on: September 17, 2011, 01:01:07 pm »
[Feature Wishlist] -Allow Symbolic -Allow Graph3 -Make the ability to run GUIs (read spoiler for more informations about what I think about)
Official support for graph3 and Symbolic would be pretty tough because I'd have a mess with the hook chaining. However, what you want to do isn't hard. You would make a program like this. ld hl, symbolicName rst 20h bcall(_findApp) jr c, noSymbolic
ld hl, $43B7 bcall(_enableRawKeyHook) ld hl, $43E1 bcall(_enableTokenHook) ;straight from symbolic ld hl, $47D0 bcall(_enableParserHook) noSymbolic: ld hl, graph3Name rst 20h bcall(_findApp) jr c, noGraph3
ld hl, $4083 bcall(_enableYEquHook) ;straight from graph3 ld hl, $4087 bcall(_enableWindowHook) ld hl, $408B bcall(_enableGraphHook) ld hl, $408F bcall(_enableAppChangeHook)
noGraph3: ret
symbolicName: .db appObj, "Symbolic " ;the apps probably have spaces graph3Name: ; after their names .db appObj, "Graph3 "
And then make it "Run on zStart" with ON + 0. I attached an assembled version. -Make the ability to run GUIs (read spoiler for more informations about what I think about)
I think you mean APIs, (application programming interface) and yes I've thought about it. It wouldn't be hard at all, but it would have to be after I go two pages due to the space it would take.
597
« on: September 15, 2011, 03:02:17 pm »
I code like this:
That's... definitely an interesting way of coding. You managed to code asm like basic in a way. Of course the obvious drawback with that technique is that you have a lot less flexibility with what you can do and your actual code size will be enormous. (For instance, if you want to display something with d = x and e = y, that's an entirely different macro you'll have to code for.) The macro doesnt really help until you have the actual routine, though.
My guess is that he's using the ION routines or something similar.
598
« on: September 14, 2011, 05:26:39 pm »
yea, but not like this. to me, this always happens: TI-connect can't find the divice OR: ti-divice detected, but couldn't get status But now, it connects as it should, and when I send something to it, it starts the transfer, interrupts the transfer and says 'ti-device detected, but couldn't get status'. I never had this with my previous OS
EDIT: now it says 'transfer failed, a retry may be succesfull', but a retry isn't sucessfull, nor a 10th retry...
I got the same problem can someone help me?
Hopefully, I wrote an awesome tutorial on Ti-Connect, which can be found here.
599
« on: September 13, 2011, 08:53:00 pm »
Life doesn't do anything out of the ordinary, so although that was the cause on the surface, what actually happened was much deeper. However, the Nspire is not my area of expertise, so I can't help much. (At the very least, it makes me happy that people are running my programs)
600
« on: September 13, 2011, 03:50:17 pm »
virtual desktops! (Or multiple desktops!)
The main problem I have with that is that the homescreen doesn't really even remember that much. For instance, an AP chem test half way though the year will easily take the equivalent of 4 homescreen buffers. So I think to do this, I would have to increase the OS's command history. And of course, this would create a whole new area of the extra memory that people can't touch, and that would be no fun Is it possible to make a shortcut to compile with axe inside the program editor. When I'm done making changes, it'd be nice if I could compile from the editor instead of going to the program's name in the editor again.
I didn't do that because the program editor is not a friendly place. Yes, I could close the currently editing program and compile it, but reopening the program seamlessly would not be easy at all. A very effective alternative would be: Set a compile shortcut for that program (ON + nuimber in edit menu). Then, whenever you quit the program, just press that shortcut on the homescreen. Of course this isn't quite as nice for single use programs, but, it's as nice as I can make it without some serious hacking. I made an interesting font. It's based off one of my favorite fonts, which just happens to be my new coding font: Cloister Black.
How on earth do you code with that? But I am glad to see a custom font.
Pages: 1 ... 38 39 [40] 41 42 ... 108
|