Difference between revisions of "83Plus:Ports:20"
m |
NonstickAtom (Talk | contribs) m (Added another cpu speed switch documented by the_mad_joob) |
||
(11 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:83Plus:Ports:By Address|20 - CPU Speed Port]] [[Category:83Plus:Ports:By Name|CPU Speed Port]] | [[Category:83Plus:Ports:By Address|20 - CPU Speed Port]] [[Category:83Plus:Ports:By Name|CPU Speed Port]] | ||
+ | {{SE-Only Port|00}} | ||
+ | |||
== Synopsis == | == Synopsis == | ||
'''Port Number:''' 20h | '''Port Number:''' 20h | ||
'''Function:''' CPU Speed Port | '''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. | This port controls the calculator's CPU speed. The CPU can be set to run at either 6MHz or 15MHz with this port. | ||
Line 11: | Line 11: | ||
=== Read Values === | === Read Values === | ||
* 00h : The CPU is running at 6MHz. | * 00h : The CPU is running at 6MHz. | ||
− | * 01h: | + | * 01h: The CPU is running at 15MHz. |
=== Write Values === | === Write Values === | ||
− | * 00h : Set the CPU to 6MHz. | + | * 00h : Set the CPU speed to 6MHz. |
− | * 01h: Set the CPU to 15MHz. | + | * 01h: Set the CPU speed to 15MHz. |
== Comments == | == Comments == | ||
This port is not available on the normal TI-83+. On the normal TI-83+ this port is a shadow of [[83Plus:Ports:00|Port 00h]]. | This port is not available on the normal TI-83+. On the normal TI-83+ this port is a shadow of [[83Plus:Ports:00|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. | ||
+ | {| width="30%" border="1" cellspacing="1" bgcolor="white" | ||
+ | | width="40%" | Port Contents | ||
+ | | width="60%" | CPU Clock Speed | ||
+ | |- | ||
+ | | width="40%" | 00 | ||
+ | | width="60%" | ~6.089 mhz | ||
+ | |- | ||
+ | | width="40%" | 01 | ||
+ | | width="60%" | ~14.965 mhz | ||
+ | |- | ||
+ | | width="40%" | 02 | ||
+ | | width="60%" | ~14.980 mhz | ||
+ | |- | ||
+ | | width="40%" | 03 | ||
+ | | width="60%" | ~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 == | == Example == | ||
Line 34: | Line 57: | ||
out (20h), a</nowiki> | out (20h), a</nowiki> | ||
− | 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, | + | 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 | ||
+ | <nowiki>in a,($02) | ||
+ | rlca | ||
+ | and %00000001 | ||
+ | out ($20),a</nowiki> | ||
== Credits and Contributions == | == Credits and Contributions == | ||
* '''Michael Vincent:''' Documentation and his faster approach as found [http://michaelv.org/programs/calcs/ports/port20.html here]. | * '''Michael Vincent:''' Documentation and his faster approach as found [http://michaelv.org/programs/calcs/ports/port20.html here]. | ||
+ | * '''the_mad_joob''' |
Latest revision as of 10:32, 9 December 2020
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. |
Contents
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