Hey, so some of you already knew this, but I'm working on a TI-Boy iteration for the TI-84+ CE. Still Game Boy only and no Game Boy Color, at least for now, but I'm bringing in automatic colorization like when you play GB games on a real GBC.
Thanks to the extra RAM in this system I'm able to get all fancy with dynamic recompilation for the CPU and use caches to speed up graphics rendering, so the end result is an emulator that can actually hit fullspeed and 60 frames per second for some games, and fullspeed with frameskip for others. Not to mention, unlike previous versions of TI-Boy I'm implementing accurate cycle timing in the emulation, which is dramatically improving ROM compatibility.
I can get into more of the specifics of how it works under the hood in future posts, if you want to hear it. This thread could become a sort of development blog, I suppose.
As for remaining emulation features, I do want to implement Real Time Clock emulation for cartridges that support it, as well as basic emulation for the link port hardware that prevents games from freezing when attempting to start a transfer. There's also a bug in partial-frame sprite rendering that I need to address, and probably other things I haven't thought of yet.
On the user interface side, I still need to put in support for saving the current configuration (e.g. frameskip and palette settings), either on a global or per-game basis. Save states would be nice too, but I'm not sure if they need to be in the initial release.
At any rate, I've put up a preview video that you can view in glorious 60FPS
I'm proud to announce the first beta release of SPASM-ng! Alberthrocks forked SPASM (Spencer's Assembler) to make some bug fixes, and I forked his fork to add eZ80 support!
Now you can use the -E option to enable eZ80 mode, with all of the new instructions and opcode suffixes. It assembles in ADL (24-bit) mode by default, but you can change this behavior with the new .ASSUME directive. There are also new .DL and .LONG directives for defining 24-bit data. In addition, the assembler behaves just the same as it always has for z80 code when assembling without the -E option.
Hopefully this assembler will prove useful for the advent of the TI-84+CE. I know it's what I'll be using!
Excuse me while I do a little self-promotion here. I'm part of a small video game reviewing group on Youtube and we've just posted my first review! Views and subscribers will be much appreciated, of course, as well as feedback. Anyway, the video review is below, and the game will be released later today.
Let's start this off with a release of TI-Boy CSE Alpha 0.0.01! For the uninitiated, this is a Game Boy emulator for the TI-84+ C Silver Edition (Game Boy Color is not supported).
At least for now, this will be a forum-only release in case I've made any terrible mistakes. (Hopefully not, but you never know!) I'd greatly appreciate feedback on any issues you may encounter.
Advantages over TI-Boy SE:
Displays the full 160x144 resolution of the Game Boy screen
12 custom color palettes selectable, based on the palettes available for Game Boy games when played on the Game Boy Color
Disadvantages against TI-Boy SE:
A bit slower due to the 16-bit full-resolution graphics output.
No audio output support.
Next on the to-do list is probably to implement a proper fullscreen scaling mode. It's currently only half-implemented, with horizontal scaling but no vertical scaling.
Edit: Whoops, I forgot to compile makeapp statically. Updated, so reportedly it works now.
Now that a CSE-compatible Wabbitemu came out (thanks Buckeye!) I continued working on the ROM-based TI-Boy CSE implementation (by ROM-based I mean I built it as a TI-84+CSE rom image) and finished off the (unscaled) graphics. Then DrDnar supplied me with a flash unlock exploit so I was able to port over the setup/teardown code from TI-Boy Beta, and I'm surprised to say I can actually run it on my TI-84+CSE!
There are still a few issues with this, like it doesn't properly handle the CSE-specific data on the extra RAM pages yet, so there's probably some corruption going on. I also need to put in a proper splash/loading screen and a better exit screen, plus port over Makeapp and modify my paging code accordingly.
As far as performance goes, it's certainly not as fast as the latest TI-Boy SE Beta, but I'd say it's still playable, perhaps on the level of TI-Boy SE Alpha. Unfortunately there's not much I can do about that, without some sort of crazy dynamic recompilation or something (maybe I'll actually implement that one of these days, but I'd rather put out something that works first).
Sadly, it's not likely that I'll be supporting audio in TI-Boy CSE, because it won't play well with my optimized graphics code. But you never know, I also said that for TI-Boy SE Beta, and I proved myself wrong on that. Here's hoping!
So, for a while now I've been working on a secret project (or perhaps not-so-secret if you've been on IRC at the right times). This is a clone/remake of the 8-bit sequel to the Steins;Gate anime/visual novel. Even though it's a non-canon spinoff, it does contain major spoilers for the original Steins;Gate story. It might not make sense unless you've watched/played Steins;Gate, which I highly recommend doing! (The anime is available for purchase or streaming online, and the visual novel is available for preorder here).
The game I'm cloning is meant to emulate the environment of old 8-bit computers in an old-school text adventure, which includes the low color depth and legacy sound hardware. The original game allowed selection of 6 different computers to emulate, each with slightly different graphics and music arrangements, but this port I'm simply basing on the TI-84+CSE constraints. I've included vector graphics display with 8-bit color as well as sound output through the I/O link port, using one of the simpler arrangements from the original game (this can be enabled through the options menu).
The demo available here contains the entire first segment of the game up until the opening credits, which should be the length of the free demo of the PC version. This includes 9 background music tracks (out of 18 total) and 16 different CG images, as well as 3 different endings. Just send the app to your TI-84 Plus C Silver Edition, and off you go!
Command entry (this stuff should be intuitive, but it's here just in case): ALPHA: Press to switch between letter and number entry 2ND: Hold to type capital letters or switch predefined commands F1-F5: Paste a predefined command (as shown onscreen) Letters/Numbers: Type characters Left/Right: Move cursor Up/Down: Recall previous entries DEL: Delete a character CLEAR: Delete all characters ENTER: Submit command
Spoiler For Command tips:
Here are some tips when entering commands in the game, because it can be slightly confusing. I've tried to make this version a bit more lenient than the original game as to what commands you can enter, but it helps to have the text adventure mindset.
There are usually three rules that valid commands follow: 1) If you want to move in a direction, simply type the direction. (left, right, front, back, up, down, etc.) 2) If you want to perform an action, simply type the action. (look, talk, eat, etc.) 3) If you want to perform an action on a certain object, type the action then the object. (look poster, kick can, etc.)
Spoiler For Using audio output:
In order to listen to the music in the game, you will need either a 2.5mm male to 3.5mm female adapter to plug in headphones to the I/O port, or else a pair of headphones that has a 2.5mm jack.
You will also need to enable audio output through the in-game options menu. You can either enable music only or both music and text sound effects, depending on your preference.
I just made an awesome discovery. It's possible to effectively halve the horizontal resolution of the screen on the TI-84+CSE, while still filling up the entire area of the screen, which means asm game programmers can double their framerate at a small visual cost.
This will even allow for double-buffering, where you draw to the offscreen area and then swap it in instantly, preventing flickering. My method uses partial images and interlaced output.
More detailed information on how to implement: Enable two partial images, where one is displayed at column 0 and the other is displayed at column 160. Both partial images should be set to the same 160 columns of GRAM which you want to display. (When enabling the partial images, disable the base image.) Then turn on interlaced output (bit 10 of register 1).
So, I've been planning on releasing the TI-Boy beta on ticalc for a while now, but I think the readme could be improved for "the masses", so to speak. Any input on this is much appreciated
TI-Boy SE Beta 0.2.04 by calc84maniac (Outside The Box Programming)
Table of Contents: * Disclaimer * Overview * New features in the Beta version * Creating APPs * Sending APPs * Controls * Frequently Asked Questions (READ THESE BEFORE ASKING YOURSELF) * Credits * Version History
Disclaimer: This is a beta piece of software (though a well-tested one). The creator is not held responsible for any damages caused. Use at your own risk! TI-Boy will temporarily replace part of the TI-OS, for greater speed and more available RAM. An automatic recovery feature is included in the case of a crash. Nonetheless, this program is not likely to permanently brick your calculator. The most damage it might cause is a RAM clear and/or an OS reinstall.
Overview: TI-Boy SE is a Game Boy emulator (no Game Boy Color support) for the TI-83+SE, TI-84+, and TI-84+SE calculators. Do not expect incredible compatibility. This was rewritten from scratch since the Alpha version, specifically to support newer TI-84+/TI-84+SE calculators (which have smaller RAM chips). TI-83+ and TI-Nspire are not supported, and never will be.
New features in the Beta version: * Works on all black-and-white TI-84+ models * Better game compatibility * Significantly faster CPU emulation * Has four zoom levels (100%, 75%, 60%, 50%) * More intuitive zooming controls (pressing Plus and Minus!) * Black-and-white zoom modes use dithering to increase visual quality * Supports 4-channel sound output * Recovers RAM data in the case of a crash
Creating APPs: Note: Any warnings given about pages beginning with FFh can be safely ignored, because TI-Boy patches the defragmentation glitch in the TI-OS.
Method 1: Drag-and-drop Open the TI-Boy folder, then drag a Game Boy ROM file onto tiboy_makeapp.exe. A command-line window should open. If the ROM opened successfully, the program will request a name for the APP. Type it in and press Enter. Watch the console output for any compatibility warnings. Method 2: Run the EXE Open the tiboy_makeapp.exe directly. A command-line window should open and ask for a ROM filename. You may have to enter the entire filepath. If the ROM opened successfully, the program will request a name for the APP. Type it in and press Enter. Watch the console output for any compatibility warnings. Method 3: Command-line arguments Open a command-line window and navigate to the TI-Boy folder. Enter in the following format: tiboy_makeapp romfilename.gb AppName Watch the console output for any compatibility warnings.
Sending APPs: Use TI-Connect or other compatible linking software. Note: Not all TI-Boy APPs can fit on non-Silver Edition calculators (see FAQ). People have reported problems sending some APPs over Direct USB (a solution is being looked into). Sending over Silverlink seems to work, though.
Running TI-Boy: Open the APPs menu, and start the APP. It should display the loading screen. Do not remove a battery while this is loading, or you will have to reinstall the TI-OS. Then, start playing! (See controls below.) To quit, press the ON button. Quitting takes a few seconds as it restores the TI-OS. Again, do not remove a battery during this step. If the emulator freezes and pressing ON does not cause it to quit (which does work in most cases), feel free to remove a battery. TI-Boy will automatically restore the TI-OS and your previous RAM contents if this happens.
Controls: Arrows: Game Boy D-Pad 2ND: Game Boy "A" ALPHA: Game Boy "B" MODE: Game Boy "START" XT0n: Game Boy "SELECT" ON: Game Boy power switch (exit the emulator)
CLEAR: Teacher Key or Battery Saver (suspends emulation and turns off the screen) STAT: Toggle sound emulation (default is off). See FAQ for more information. * (Times): Increase LCD contrast / (Divide): Decrease LCD contrast + (Plus): Zoom in - (Minus): Zoom out Numpad: Move view F2,F3,F4 (WINDOW,ZOOM,TRACE): Light,Normal,Dark monochrome modes (smooth zoom) F5 (GRAPH): Grayscale mode (rough zoom) . (Decimal): Follow next sprite in the internal list (selected sprite will flash for a few frames) 5: Center view on selected sprite 0: Turn off sprite follower (-): Set frameskip (hold the negation key and press a number 0-9 to set the value)
Frequently Asked Questions: Q. Sound emulation? What's up with that? A. When sound emulation is turned on, TI-Boy will to the best of its ability emulate the Game Boy sound hardware and output sound waves to the I/O data port. However, this comes at a performance cost. There are 4 channels that are emulated, and 2 are outputted to each ear. There is no volume control.
Q. How do I listen to the sound? A. You will need a 2.5mm-male to 3.5mm-female adapter to plug in standard headphones/speakers to the I/O data port. It is recommended that you plug in the headphones after starting TI-Boy (because the homescreen responds very slowly when headphones are plugged in).
Q. How big are the APPs? A. Generally, take the size of the ROM and add 16KB (16384 bytes). Sometimes you might get lucky and have a smaller APP if there is a lot of empty space in the ROM. Pay attention to the size displayed when tiboy_makeapp.exe finishes.
Q. Will xxxx ROM fit on my calculator? A. If you have a Silver Edition, ROMs up to 1MB (1024KB) in size will fit. If you have a normal TI-84+, ROMs up to 256KB in size will fit. Make sure to delete useless APPs from your calculator if needed.
Q. So the compatibility issues with newer calculators are fixed? A. Mostly. There is still not enough RAM to emulate cartridges which use 32KB RAM, added to all the RAM in the Game Boy itself. Thankfully, such cartridges are few and far between. Also, such games that do not use all of that RAM, such as Pokemon Red/Blue/Yellow, can run with no issues.
Q. Which calculators have a large enough RAM chip for this RAM-hogging game I want to play? A. All TI-83+SE calculators have the larger RAM chips. TI-84+SE calculators have larger RAM chips if they were manufactured before around April 2007. To be more specific, check the back of your calculator. The last part of the serial number should be in the format X-MMYYR, where MM is the month, YY is the year, and R is the revision. For example, S-0207G means manufactured in February 2007 with revision G. Revisions G and earlier have the larger RAM chips, and revisions H and later have the smaller RAM chips. If the revision letter is missing, that means it is before revision A (and should work).
Q. What exactly does TI-Boy do to my calculator when it runs? Why the warnings? A. TI-Boy needs part of the Flash (Archive) memory which is taken by the TI-OS. So, it backs up this section of the OS and puts its own data there. Also, this is where your RAM is backed up in the case of a crash. When TI-Boy exits, the OS is put completely back to normal. There are two reasons for doing this: 1) The emulator becomes quite a bit faster and simpler if GameBoy data can be in the space normally taken by the OS. 2) Having control of this memory space allows automatic recovery in the case of a crash.
Q. Does tiboy_makeapp convert Game Boy ROMs into native TI code? A. No. The ROM is slightly rearranged to fit into an APP and bundled with the emulator code. Converting to native TI code is infeasible for many reasons.
Q. My calculator died! It's all your fault! A. Don't panic! To send a new OS, hold DEL while inserting a battery to bring up the Send OS screen. And make sure to report the bug, because we don't want this sort of thing to happen, now do we? ;)
Q. Where is xxxx feature? A. Be patient, there's a reason this is a beta. I'll probably get around to it (as long as it's within reason).
Q. xxxx ROM doesn't work! A. Sorry, but specific game compatibility is at the bottom of my to-do list at the moment.
Q. how do i tern on my caclulater A. ...
Credits: calc84maniac for coding/design thepenguin77 for clean flash unlock hack FloppusMaximus for Rabbitsign (app signer). Source code can be found at http://www.ticalc.org/archives/files/fileinfo/383/38392.html Omnimaga for all the awesome community support
Version History: Beta 0.2.04: * First official beta release on ticalc. * makeapp.exe updates: - Name changed to tiboy_makeapp.exe. - Compiled against librabbitsign, so it no longer requires a separate rabbitsign executable. - As a result, the program no longer calls the system() function which was making some users' antivirus software very angry. - The tiboy.bin file is also now baked into the executable. Beta 0.2.03: * Rearranged code and data to allow using 16KB of cartridge RAM on all calculators. This means that Pokemon Red/Blue/Yellow can be run on all calculators! * Games that have 32KB of cartridge RAM but only use the first 8KB, 16KB, or 24KB will now only save to 1, 2, or 3 appvars respectively. * Fixed a waitloop detection error, speeding up parts of some games like Kirby's Dream Land. Beta 0.2.02: * The STAT behavior is fixed for real, cycling through all 3 modes within each scanline. Beta 0.2.01: * Timer emulation is more accurate relative to emulation speed, fixes Super Mario Land freezing. * More STAT compatibility. Now it cycles through all 3 modes. Beta 0.2.00: * Rearranged some code/data, allowing TI-84 Pocket.fr compatibility and freeing some RAM. * Reimplemented waitloop detection, which should eat much less CPU time per frame now. * Rendering tricks are more reliably detected, fixing graphics in parts of some games. * Emulator control keys are checked more often, improving responsiveness. Also, sprite tracking selection improved. * Added custom frameskip settings. * GPU speed is more accurate when sound is enabled, speeding up parts of some games. * Timer emulation is more accurate, fixes music in Super Mario Land among other things. * Extremely high-pitched sounds are changed to a slightly lower pitch, which should prevent freezes. * Bit 1 of STAT is now toggled at every scanline from 0 to 143, which fixes some games. * makeapp.exe updates: - Allow manual special character entry in app names, by typing \XY (XY is a hexadecimal character value) Beta 0.1.07: * Fixed some small bugs introduced in Beta 0.1.06. Beta 0.1.06: * Added support for 4-channel sound. Beta 0.1.05: * Added some support for low-priority sprites, i.e. sprites can be displayed behind the background tilemap. Fixes quite a few graphical glitches! * Fixed a cartridge RAM mapping glitch, which fixes compatibility with TI-Boy Alpha 4-appvar saves. Breaks compatibility with TI-Boy Beta 4-appvar saves. Beta 0.1.04: * Added timer check in RET opcodes, which significantly increases framerate in Pokemon textboxes. Beta 0.1.03: * Added light and dark monochrome palettes * Reincluded the defragmentation OS glitch patch so APPs won't get corrupted if pages start with 0xFF. * makeapp.exe updates: - Internal appnames are padded with spaces instead of null bytes for better linking software compatibility. - Trailing pages filled with 0x00 or 0xFF bytes are now removed from ROMs. This saves a lot of space in certain ROMs (e.g. saves 304KB in Pokemon Red). Beta 0.1.02: * Save files are archived upon exit. * Fixed glitch in which only the first 8KB is loaded from a 32KB save. * Fixed very bad glitch in 32KB saving caused by bcall(_DelVarArc) trashing (OP1). * Pressing Select no longer causes a false press of B on some calculators. * makeapp.exe updates: - Output app is now always placed in the same folder as the exe. - APPs which have 32KB saves now have a maximum of 7 characters in their names (because the save data goes into 4 separate appvars which need unique names) Beta 0.1.01: * TI-Boy no longer makes a resident patch to the OS (so the OS stays valid and there are no conflicts with other patches). * Flash writing is now done in 6MHz mode so it works on slower flash chips. * makeapp.exe updates: - Spaces in ROM filename now handled correctly when program is run with no arguments. - Searches for tiboy.bin and rabbitsign in the same folder as the exe. - Displays number of pages in generated APP. Beta 0.1.00: * First public beta (on omnimaga.org)
This is a GBA emulator ported by myself from the source code of gpSP2X by Exophase and notaz. It runs on TI-Nspire CX only, black-and-white models are not supported. Current version: Alpha 0.11 Download link
I may edit this post more with more info in the future.
I decided to continue my releases in a topic in the TI-Boy section because I feel like the topic in the News section is too hard to find. I'll post a link to this thread at the beginning and end of the news thread and then lock it.
So, here is Beta 0.2.01! I fixed the Super Mario Land freezing glitch (which was caused by the timers being emulated too quickly relative to the CPU speed) and fixed more games that use the STAT register.
Hey guys, if you have a copy of Mario Kart 7, I made an Omnimaga community that we can join to more easily race each other! For those who care, it's 100cc Grand Prix and All Items. The community code is 33-0368-8971-0644, so let's go play the game!
Well, might as well let people start testing this now. There are still some features to add and bugs to fix, but nothing that really prevents running the emulator as it is.
Here's TI-Boy SE Beta 0.1.00! This version brings compatibility with all TI-84 Plus models including newer hardware revisions, meaning that there are no more extra RAM issues! Speed was also greatly improved.
I figured it's about time to make a topic about the eventual 8-bit math mode that will be included in Axe. Post any suggestions, ideas, etc.
Here are mine. About the syntax, I was considering the possibility of enclosing 8-bit expressions with single quotes. But then I found out those are currently in used as 'CHAR' constants. So my other idea is using inverted brackets, like so: ]8-bit stuff goes here[
ld a,(var_A) add a,5 ld (var_A),a The compiler should keep track of whether the "last answer" is 8-bit or 16-bit, and do a conversion if operating with a different bit length.
ld a,(var_A) add a,5 ld l,a ld h,0 ld (var_B),hl Perhaps it could also be possible to force signed conversion, like so (the value will be interpreted as -128 to 127): ]A+5[r->B
ld a,(var_A) add a,5 ld l,a rla sbc a,a ld h,a ld (var_B),hl Using memory read brackets {} in 8-bit mode should force 16-bit mode within the brackets. Example: ]A+{P+1->P}->A[
ld a,(var_A) push af ;save A in case it will get overwritten (seems to be an Axe standard) ld hl,(var_P) inc hl ld (var_P),hl pop af add a,(hl) ld (var_A),a That's all for now! Direct comments, questions, concerns to your local Netham45.
Well, when I got back from my two-week math camp, I found that my laptop's hard drive had died.
Yes, epic (hard drive) failure.
Unfortunately, this hard drive contained all of my TI-Nspire projects. It did not contain any z80 projects of importance other than the work-in-progress version of TI-Boy, which I had put on my flash drive anyway in case I had computer access at camp.
All recovery efforts have failed. Only about 1.3GB of the drive was recoverable, and I really doubt any of my projects are there.
But hey, now I have the chance to start anew. I'm planning on getting a new laptop, and perhaps I can actually set up a proper Nspire C development environment. I can probably code better now due to more experience. I think I'm going to be fine.