83Plus:Ports:20

From WikiTI
Jump to: navigation, search
This port only exists as a distinct port on the TI-83 Plus Silver Edition, the TI-84 Plus, and the TI-84 Plus Silver Edition. On the standard TI-83 Plus, it acts as a shadow of port 00.

Synopsis

Port Number: 20h

Function: CPU Speed Port

This port controls the calculator's CPU speed. The CPU can be set to run at either 6MHz or 15MHz with this port.

Read Values

  • 00h : The CPU is running at 6MHz.
  • 01h: The CPU is running at 15MHz.

Write Values

  • 00h : Set the CPU speed to 6MHz.
  • 01h: Set the CPU speed to 15MHz.

Comments

This port is not available on the normal TI-83+. On the normal TI-83+ this port is a shadow of Port 00h.

This port can contain values of 2 and 3, but the difference in speed is negligible. Michal_V has indicated that values 2 and 3 were intended for use with 20 MHz and 25 MHz speeds, but this functionality was left out before production began. Using the crystal timers I came to these approximate values.

Port Contents CPU Clock Speed
00 ~6.089 mhz
01 ~14.965 mhz
02 ~14.980 mhz
03 ~14.990 mhz

I suggest still using 1 as the speed setting value since the speed of the other values may change in the future---unlikely as that may be---, which could seriously mess up your screen routines, or even cause opcode fetches to fail if required delay states are not configured. The slightly extra speed observed is due to capacitance of the unused pins. These modes are distinguished by LCD delaying hardware, ports 29-2C.

Newer models (with new TA1 ASICs with fewer pins) don't show any difference between 01~03, suggesting that the extra pins for speeds 02 and 03 don't exist. Furthermore, the speed is closer to 16 MHz than it is to 15 MHz, even slightly above it on 4 out of 5 calculators I've tested.

You can actually re-enable the extra values on production models with the TA3 ASIC if you find the right pins. On the TI-83+SE, there are helpful solder pads on the PCB; on the TI-84+/C/SE, you have to solder directly to the ASIC. You'll need to find a set of six pins, where one is a ground shared by a capacitor and two resistors, the next is connected to a capacitor, the next is connected to a resistor, the next two are not connected (solder to these pins), and the last is connected to another resistor. On the TA3 ASIC, they're pins 66-72, with 70 and 71 being the pins you want to tap (there are 144 pins, the side with #1 will be marked in some special way, and they're numbered counter-clockwise). On the TA1 ASIC, there are no known pins for this. Experiments on the TI-83+SE showed that the ASIC was unstable above about 22-23 MHz. The flash chip is only rated for 20 MHz, which could explain the instability.

Example

 in a, (2)
 and 80h
 jp z, NoCPUGoverner
 rlca ;Move the 1 bit in bit 7 to bit 0 (80h -> 01h)
 out (20h), a
NoCPUGoverner:

Michael Vincent documented another method to set the CPU speed (which is probably faster than my example).

in a, (2)
 rla
 sbc a, a
 out (20h), a

The only side effect of this is that on the TI-83+ Basic this will cause both linkport lines to go high - which shouldn't matter too much if you're not using the linkport at that time, especially since both lines are high normally... the_mad_joob discovered that this method will switch to CPU speed 3, not 1. That speed may not be fully supported software-wise, most notably because the default delays provided by ports $29>$2C|$2E|$2F vary from one speed to another.

the_mad_joob documented yet another method which switches to speed 1 instead without using jumps

in a,($02)
 rlca
 and %00000001
 out ($20),a

Credits and Contributions

  • Michael Vincent: Documentation and his faster approach as found here.
  • the_mad_joob