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 - FloppusMaximus
Pages: 1 ... 12 13 [14] 15 16 ... 20
196
« on: December 04, 2010, 10:01:10 pm »
Well, one reason why some people use custom fonts is speed. I even saw people using custom font routines that looked exactly like TI fonts just to get the speed increase over TI's slow text routines.
Yeah, that's a good point. I was thinking about it strictly from a design perspective. (Maybe that's another mark of what I consider professionalism: not letting implementation difficulties get in the way of a nice design. ) And I'm not saying custom fonts are always a bad idea, just that they need to be well thought-out. Although, as far as implementation goes, the system text-drawing routines are indeed pretty slow, but LoadPattern is usually fast enough. That's what I normally do for programs that have a lot of text: I use the built-in fonts, but a custom display routine.
197
« on: December 04, 2010, 06:21:31 pm »
oh I see, that answered a lot of my questions. I would like to know more about staggering the updates then, like if adjacent pixels should not be updated at the same time, how would you go about updating some from each buffer in such a way that adjacent ones do not end up getting updated? also I will probably need help with timing stuff when I get that far.
First of all, to do this you're going to need to write your own routine to copy the screen buffer(s) to the display. (To get good performance, the routine will need to be seriously optimized, which is a huge topic unto itself.) Normally, a routine like that would just read the bytes from one buffer, in order, and write them to the LCD driver. Instead, what you want to do is alternate between the buffers somehow. You can do this on a byte-by-byte basis (say, read one byte from buffer A, one from C, one from B, two from C, one from B, and one from C, and repeat.) Or you can do it on a bit-by-bit basis, so each 8x7-pixel block contains pixels from all 3 buffers, arranged like this: ACBCCBCA CBCCBCAC BCCBCACB CCBCACBC CBCACBCC BCACBCCB CACBCCBC
(note that this is just one possible arrangement - you can design your own.) If you rotate this pattern by one bit (or one row) each time the screen updates, you'll see that in 7 updates, each pixel is set to its 'A' value once, its 'B' value twice, and its 'C' value four times. So, for instance, for the first line above, if your 3 buffers contain the byte values x A, x B, and x C, the value you want to display is (x A AND 81h) + (x B AND 24h) + (x C AND 5Ah). I'm not sure what the fastest way would be to compute this; it might help if you used the buffers to store bitwise differences (XORs) between the bit planes, instead of the "actual" x A, x B, and x C values. You'd probably find this easier if you tried writing a 4-level version first. You could ask Calc84maniac for Chips Challenge 83+ source.
Seconding this.
198
« on: December 04, 2010, 05:10:20 pm »
Certainly one major part of making your programs "professional" - maybe even the most important part - is designing a good user interface. That applies to all programs - games, editors, math programs, you name it. It's often a very difficult problem, and it's one that a lot of programmers have a tendency to ignore. 1) No default TI-OS menus, input routine and other type of GUI. Even more professional: custom fonts, but that's not that necessary.
Sad but true: the standard OS menus are quite ugly. I think it's OK, though, for programs like Symbolic, Omnicalc, and Unit Ops, which are designed to be integrated into the OS. For other programs, I definitely recommend emulating the feel of the OS menus (standard repeat rate/delay, numbered/lettered options where possible, arrows to indicate when you're at the top/bottom of the list) but not the look. As for custom fonts, they're OK in some circumstances, but they must be clearly legible. All too often you'll see programmers who have designed their own fonts to try to look cool, while ignoring the primary purpose of text (that being, to convey information that the user can read.) Build smart software. Smart software make extensive (but never read) documentation useless. Smart software make the user feel he has been using it forever even the first time. Smart software subtly suggests. Dumb software impose constraints.
I agree with all of this; these are all good principles for UI design. A screen that adapt what it shows based on previous use is smart.
This I do not agree with. If a program's interface changes every time you run it, that usually makes it harder to use (since you have to re-learn the interface every time, as opposed to a "dumb" interface that you only have to learn once.) Giving the user the option to change aspects of the interface is a good thing. But in my experience, changing stuff around automatically, in an effort to make things easier for the user, almost always does the opposite.
199
« on: November 30, 2010, 09:16:38 pm »
Are you asking about 8-level grayscale specifically, or grayscale in general? Using 8 levels isn't intrinsically any different from 4 levels; it's just that with smaller differences between the levels, any flickering becomes more noticeable.
In general, to display grayscale, you turn pixels on and off very rapidly, and rely on the eye to "average" things out. A pixel that's turned on continuously looks darker than one that's only turned on 67% of the time, which looks darker than one that's turned on 33% of the time.
The most common way of doing this is to have two (or more) separate screen buffers with different "weights". So for 4 levels you'd have two buffers, where buffer B is displayed twice as often as buffer A (which is to say, buffer B is displayed 67% of the time, and buffer A 33% of the time.) For 8 levels, you'd add a third buffer, C, that's displayed twice as often as buffer B (so, buffer C is displayed 57% of the time, B 29% of the time, and A 14% of the time.)
It tends to look better if adjacent pixels don't change at the same time; to avoid that, you can stagger the updates, so instead of displaying one entire buffer at once, 57% of the pixels are being displayed from buffer C, 29% from buffer B, and 14% from buffer A; and you're rotating these sets with each update.
For minimal flickering, you want to synchronize your updates with the LCD driver's refresh rate. This is rather difficult to do. Some clever folks (not me) have mostly solved this problem for the 83+ SE and 84+, using the programmable timers. On the 83+ BE, I don't think it's really possible without carefully tuning your entire program.
I could go on, but which of these subjects in particular are you curious about?
200
« on: November 29, 2010, 11:28:21 pm »
I'll give that a try. Thanks.
201
« on: November 29, 2010, 11:26:16 pm »
Returning to WikiTI:
This topic is inside the Assembly Programming Forum... WikiTI is for Assembly only?
I'm quite confused now, since I made Axe Parser's page :S
WikiTI is for whatever we make it. It is mostly focused on assembly programming because that's where third-party documentation is most needed - TI's documentation barely scratches the surface of what assembly language can do. But there's no reason to exclude other languages. I don't think there's a need to document the Axe language itself - that's what the official documentation is for - but programming tips, example code, and tutorials would be very much welcome.
202
« on: November 29, 2010, 11:11:44 pm »
I might give the audio-from-a-USB-drive idea a try. I guess I need to learn how the MSD protocol works, though. (Does anybody know where to find a 2.5mm-to-3.5mm adapter that fits in an 84+'s link port?)
203
« on: November 25, 2010, 11:38:39 pm »
By the way, TI-73 OSes need to be patched before installing them on TI-83+ hardware, and TI-83+ OSes need to be patched too before installing them on TI-73 hardware.
Why? Are those patches needed only because of the different boot codes, or is there something different with the ports?
If there is something different with the ports, it may come from the same thing that is making thoses ASICs operate in 83 mode here...
Mainly it's the boot code differences. But there are some very minor hardware differences in ports 2 and 16.
204
« on: November 25, 2010, 11:14:00 pm »
Glad to hear! Keep in mind only like 1 minute of audio will fit on a 84+SE, though. I wonder if this could work with USB8x?
Interesting question. Maybe. USB itself would certainly be fast enough, and I assume most Flash drives would be fast enough; the question is whether the calculator CPU is fast enough to push the bits around at the required rate. I'm wondering whether you would need to buffer the data, or whether you could, through some extreme wizardry, read the bytes directly from the USB controller. Either way, it would be an interesting and tricky program to write.
205
« on: November 25, 2010, 12:14:33 am »
Back to the subject of the USB hardware, I've added my documentation for port 91h. It's quite complicated, so I'd very much appreciate any comments or criticism, if there's anything that's unclear. Of course, a lot of the complexity is just because USB itself is horribly complex. But I'd still like to make the documentation as accessible as possible.
I think maybe what we need is, in addition to the detailed port documentation, a nice overview or tutorial to the USB system as a whole. I'd volunteer to write this myself, but, sadly, I doubt I'll have time to do it in the near future. If somebody else wanted to get started, I could probably help fill in some of the details.
206
« on: November 24, 2010, 11:45:22 pm »
Keep in mind that if you do have to modify the hardware to put it into "83+ mode", the regular TI-83 OS may not be able to boot properly in that mode.
207
« on: November 21, 2010, 05:30:29 pm »
Ouch, yeah, that is problematic. The TI-73 Explorer with an 84+-style case ( as seen here) doesn't look so bad, though.
208
« on: November 21, 2010, 05:21:50 pm »
Yes, that's right. (The '=' character can be found in the 2nd+MATH menu, as in the BASIC program editor.) You can also write 'EQU' instead of =, if you prefer.
209
« on: November 21, 2010, 05:15:35 pm »
I don't know, but I guess a logical next step would be to compare that picture with the PCB from a newer 83+ or 73.
210
« on: November 18, 2010, 09:59:49 pm »
As a general matter, you can use the 'asmto8xv' tool to convert .asm and .inc files into Mimas format. In this case, mt3notes.inc uses #define macros instead of normal equates, so to create the file below, I had to change the #defines into equates.
As you probably know, Mimas doesn't currently support macros at all, so instead of this:
song: playsection(startbit) playsection(lastA) playsection(startbit) playsection(lastB) endsong
startbit: note(rest,rest, c3,f2, eighth) note(f2,a2, c3,f2, eighth) ... endsection
you'd need to write something like this:
song: RORG 0 DW startbit DW lastA DW startbit DW lastB DW 0 ; end of song
startbit: DB rest, rest, c3, f2 DW eighth DB f2, a2, c3, f2 DW eighth ... DW 0, 0, 0 ; end of section
I haven't tested this, but it should work. Hope this helps.
Pages: 1 ... 12 13 [14] 15 16 ... 20
|