Show Posts

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 ... 62 63 [64] 65 66 ... 108
946
Hot_Dog, actually, that routine Netham gave will both unlock and write to flash. And I assume it will return with it unlocked. BrandonW find's some pretty weird glitches. :)

947
FloppusMaximus actually got a DMCA about his original flash unlock.

Are you serious? O.O Also when was that? *wonders what was violated by unlocking flash*

Ok, so this is what I remember reading. It was not a DMCA, but it was pretty close. Of course I don't know the whole story (I was 9 when that was posted), so you'll have to get someone older to explain what really happened.

And since I had to go hand copy the link from my old computer, here is the topic that I've had favorited for over a year from which I figured out how to unlock flash. It's by floppusMaximus and you can see on page 2 how cautious everyone is getting. It's pretty vague on the details so it took me quite a while to figure out how to do it...

948
ASM / Re: Keeping the Crystal Timers going
« on: April 20, 2011, 06:59:00 pm »
Yes. Output 9 to port ($32). You want 150 t-states. So 9*16 is 144 which is about what you want. Outputting a 1 will only give you 16 t-states. And since RET takes 10, that leaves you with 6 ;)

949
Yeah, sorry I didn't give you a more specific response. Flash stuff is more IRC talk anyways.

But don't forget, once you get flash unlocked, that's only half the battle. You still have the whole task of actually getting the modifications in the right place. A task during which I have destroyed about 200 wabbitemu OS's and about 10 real calculator OS's. :D

950
With calc84's response. I think that was mostly because you said you were setting your interrupts for once ever 16 cycles. Which he was right, you can't do anything with that. But what you actually meant was more like 150 cycles. So I think that was just a simple misunderstanding.


But with the flash stuff, that's always been an area of hesitation. Changing the OS takes care and the original flash unlocks took several months of research before they were found. So the actual information was originally hard to get. And then, people don't want just anyone to be able to do stuff to the OS because it can lead to problems like flash corruption and deleted certificates. I don't remember where I heard it, but I remember a quote, "If someone can't figure out how to modify the OS, maybe they shouldn't be doing it." I don't necessarily agree with it, but that has been a thought. So that's probably why no one would answer your question about unlocking flash. But you did get the routine eventually though right?

Sorry if that sounds mean, but unlocking flash used to be a touchy subject. FloppusMaximus actually got a DMCA about his original flash unlock.

951
ASM / Re: Keeping the Crystal Timers going
« on: April 20, 2011, 05:16:58 pm »
If you want an interrupt every 150 cycles. You would want to output a 9 with your timer speed being cpu / 16.

And to make sure it keeps going, you need to output to port $31 and maybe $32. The problem with outputting to $32 is that you are doing your interrupt so fast that those extra 20 clock cycles of output are going to add up quick. However, don't miss an interrupt or else $32 is going to loop to $FF.

So for code, this is my recommendation:
Code: [Select]
start:
ex af, af'
ld a, 3 ;3 because you want interrupts, and you want it to loop
out ($31), a
exx

;don't check for which interrupt caused
;only have timers enabled

;do something quick

exx
ex af, af'
ret
end:

And remember, keep the interrupt quick, you've already used 44 of your 150 t-states. Too many more and the real program is going to stop all together.

952
ASM / Re: Create vars in a Parser Hook
« on: April 19, 2011, 11:05:45 pm »
The same code you would use in a program will not work in a parser hook to create vars, so I was just curious about what I had to do...


Xeda, throw a bcall(_closeEditEqu) in front of your parser hook code and it will work fine. The problem is that there are 0 bytes of free ram because the home screen edit buffer is open. All of the problems you are having are caused by Err:Memory's.

953
ASM / Re: Create vars in a Parser Hook
« on: April 19, 2011, 09:26:06 pm »
bcall(_closeEditEqu)

The edit buffer is probably open. If the hook intercepts from the homescreen then you need to close the edit buffer before you can do anything. When you are done, make sure to bcall(_jForceCMDNoChar) or else bad things will happen. Of course you'll have to watch for the cases where the hook is being run from a basic program, then you don't need to do bcall(_closeEditBuffer), and you most certainly don't what to do bcall(_jForceCMDNoChar)

954
TI-Boy SE - Game Boy Emulator For TI-83+SE/84 / Re: Ti-Boy Grayscale
« on: April 19, 2011, 09:22:57 pm »
Oh, haha, darn. I thought I was going to have two breakthroughs in one day.

955
TI-Boy SE - Game Boy Emulator For TI-83+SE/84 / Ti-Boy Grayscale
« on: April 18, 2011, 11:08:57 pm »
Now, I've never actually played Ti-Boy (I should) but I know that the grayscale is not as good as it could be graphics wise. The reason why Ti-Boy can't get great grayscale is because it uses all of the cpu time emulating games. But I think I have found a way to make it work really nice.

For my Chess game, (which people have said has perfect grayscale,) I refresh the screen between 59-61 times per second. Of course the user adjusts this because every calculator is different. And 60 fps takes a pretty big toll, that's 50% of the cpu time. But, another option is to refresh the screen at 30 fps and still match the refresh rate. So essentially, write to the screen buffer, let it get displayed twice then update it again. This method gets some minor scan lines, but it's consistent; there's no flicker.

So to Calc84:
I don't know how you do your grayscale. But if you are using interrupts, make a two stage cycle. Using the crystal timers, make the first stage a static length of 172 at speed $40 (10923Hz) When this interrupt comes back, don't do anything. Then send out a second interrupt of user adjusted length default at 172. When that comes back, update the screen and repeat.

Of course I don't know if this sort of thing is feasible, but if it is, you'll have people talking about how good the grayscale looks :D. (If you get really desperate, you could even refresh at 20 fps, but I don't know how that would look)


Here's a demo to show what I'm talking about:
+ and - adjust delay, 2nd displays delay, and clear quits

956
General Discussion / Re: F**k You
« on: April 18, 2011, 07:34:07 pm »
On one of the local radio stations. They completely remove "fuck", they don't even replace it with "forget." The lyrics are literally, "I see you driving 'round town with the girl I love and I'm like, _____ you. I guess the change in my pocket wasn't enough wasn't enough I'm like, _____ you and _____ her too."

It doesn't even make sense.

957
ASM / Re: Preperation for Custom IM 1 Routine
« on: April 18, 2011, 05:07:34 pm »
There's room on the end of almost all the pages for code. The amount just varies by OS.

But I would say you are much better off just making an IM 2 interrupt that that ends with jp $0038. It has exactly the same benefits as IM 1 interrupts but it is OS version independent. The reason I say this is different OS's do different things down at $0038 and adding code there could be difficult.

958
TI Z80 / Re: GX Grayscale Library
« on: April 17, 2011, 11:46:37 pm »
I think thepenguin made a few grayscale libraries before ;)

however, I don't think there are very many 8 level game besides chips challenge (by calc84) -- and definately NO 16 level ones.

I have made 16 level grayscale before, it's actually how I was first mentioned on this forum - link -, and I must say, it's definitely not flickerless. While from an early standpoint, you might say, "I don't see why this won't work," you are forgetting about one major problem: the LCD refresh rate.

When you are doing 16 level grayscale, you obviously break the screen time up into 15 segments of equal time. Each bit of the shade gets its own share of the time to be on. With bits 3210
3: 8/15
2: 4/15
1: 2/15
0: 1/15
Now the huge problem here is that bit 0 is only on for 1/15 frames. And since the calculator can only go 60 fps, (the driver can go 120-240, but the screen just won't show it), that lowest frequency will turn on 4 times per second. So any pixel with bit 0 set is going to have that 4 Hz flicker go through it. And when 50% of the pixels on the screen have bit 0 set, you get horrible patterns going across the screen. I mean, try tapping your finger 4 times per second, that's what the pixel is going to do. I remember shades 7 and 8 almost looked like they were just turning off and on.

So the bottom line. 8 level works great and you can get near flickerless, 16 level not so much.


But in other news, it's great to see a grayscale library :D  And another reason this probably won't work on the Nspire is because it doesn't have crystal timers. (That was annoying to figure out)

959
ASM / Re: How does B_CALLs know which page to look at?
« on: April 16, 2011, 06:38:41 pm »
Also a ninja for me. So here's my explanation.

Ok, I'll break this down all the way.

bcall(_OP2ExOP5) is actually bcall($4216) which is actually

Code: [Select]
rst 28h
.dw $4216

my previous bcall(killCalculator) is actually bcall($0083) which is actually

Code: [Select]
rst 28h
.dw $0083

When the calculator encounters the rst 28h, it goes to $0028, which takes the next two bytes and parses them.

If the next two bytes are in the $4000 - $7FFF range: It looks on page $1B/$3B/$7B for the location data.
If the next two bytes are in the $0000 - $3FFF range: It looks on the first page of the app that is running for the location data.

The data that it is looking for is going to have this format:
Code: [Select]
.dw address
.db page

So when bcall(_OP2ExOP5) is executed. The OS is going to look on page $7B at $4216 for the data, which happens to be (in 2.53) $C8, $1D, $00. So the calculator is now going to call $1DC8 on page 0.

When bcall(killCalculator) is executed. The OS is going to look at the current app page ($69) at $4083 for the data. Which might be: $00, $40, $01. So the calculator is now going to call $4000 on app page 1, (which might be $68).

960
ASM / Re: How does B_CALLs know which page to look at?
« on: April 16, 2011, 06:25:14 pm »
Yes. For in-app bcalls. You take the <label for the bcall> - $4000. And that's what you throw in bcall. You should probably use some defines to make it less confusing.

Code: [Select]
killCalculatorL:
.dw killRoutine
.db 1
#define killCalculator killCalculatorL-$4000

Edit:
    Ninja'd with a question. But do this for all of them and you should be good.

Pages: 1 ... 62 63 [64] 65 66 ... 108