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.

Topics - Goplat

Pages: [1]
TI-Nspire / CyberBox
« on: December 27, 2011, 09:23:55 pm »
I wrote this clone of the DOS game CyberBox back in April, but never got around to putting in the finishing touches and releasing it.

Ndless / Idling the CPU
« on: March 14, 2011, 06:27:45 pm »
I noticed a thread on TI-Bank where someone said his TI-Nspire CAS drained a set of batteries by 50% in one day while testing out some programs... Power consumption is a very annoying thing in that you can't ignore it even though it's practically impossible to measure it effectively :(

I suspect that it's mainly the Nspire's 90MHz CPU that can be a power hog, so it's important to make sure we idle it properly when nothing is happening. The way to do this is with the wait-for-interrupt instruction (mcr p15, 0, SBZ, c7, c0, 4), which is executed by the idle() function in libndls. However, this instruction is only useful if the interrupt that wakes the CPU up is acknowledged. Otherwise, next time around, the interrupt controller is already asserting to the CPU that an interrupt is pending, so the instruction just returns immediately.

Presently, Ndless programs run with the CPSR I bit set on the CPU, so the OS's IRQ handler is not run, and IRQs never get acknowledged unless a program does so explicitly. I think libndls should have a delay routine that keeps the CPU idle by acknowledging timer interrupts as they come, something like this:

Code: [Select]
// Idle for n/100 seconds
void delay(int n) {
int irq_mask = *(volatile int *)0xDC000008;
*(volatile int *)0xDC00000C = ~(1 << 19); // Disable all IRQs except timer
for (; n; n--) {
asm ("mcr p15, 0, %0, c7, c0, 4" : : "r" (0)); // Wait for an interrupt to occur
*(volatile int *)0x900A0020 = 1; // Acknowledge timer interrupt at source
*(volatile int *)0xDC000028; // Make interrupt controller stop asserting nIRQ if there aren't any active IRQs left
*(volatile int *)0xDC000008 = irq_mask; // Re-enable disabled IRQs
return 0;

TI-Nspire / TI-Nspire emulator
« on: February 25, 2011, 01:20:07 am »
This topic is the new home for nspire_emu, the TI-Nspire emulator with the highly uncreative name.

Current version: v0.70 (post, download)

TI-Nspire / Java on the TI-Nspire?
« on: January 16, 2011, 05:55:59 pm »
I've discovered that the TI-Nspire's CPU supports a feature called Jazelle which allows Java code to be partially interpreted by hardware, making it significantly faster than it would be with a plain interpreter. Obviously, the 90MB Java runtime environment is never going to fit on the Nspire, but I wonder if it might be practical to port something like J2ME. It seems a shame to let that hardware go to waste ;)

Here's a little test program, that uses Jazelle to calculate 2+2 (impressive, huh? ;D)

Pages: [1]