<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.ninerpedia.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tim</id>
	<title>Ninerpedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://www.ninerpedia.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tim"/>
	<link rel="alternate" type="text/html" href="http://www.ninerpedia.org/wiki/Special:Contributions/Tim"/>
	<updated>2026-05-05T05:54:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://www.ninerpedia.org/index.php?title=Geneve_CRU_definitions&amp;diff=50443</id>
		<title>Geneve CRU definitions</title>
		<link rel="alternate" type="text/html" href="http://www.ninerpedia.org/index.php?title=Geneve_CRU_definitions&amp;diff=50443"/>
		<updated>2021-01-04T23:00:43Z</updated>

		<summary type="html">&lt;p&gt;Tim: Updated 1EF6 notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definitions ==&lt;br /&gt;
&lt;br /&gt;
CRU bits may be tested with the TB command, with the base address in R12. The bit is copied to the EQ flag of the status register so that a JEQ will cause a branch whenever the bit is set.&lt;br /&gt;
&lt;br /&gt;
The bits of the 9901 are tested in positive logic, which means that a low value on the pin will make a TB yield EQ=0, and a high value on the pin makes EQ=1. The signals on the pins may show negative logic themselves. That is, if the joystick button is pressed, a low value is put on the /INT3 input (bit 3), and a TB 3 will make EQ=0, while a not pressed button would be EQ=1.&lt;br /&gt;
&lt;br /&gt;
TMS9901 lines may be configured as inputs (in), outputs (out), and the first 16 addresses may be configured as interrupt inputs (int), triggering an outgoing interrupt if the mask is set to 1 for the respective input. The interrupt mask configuration may be changed as desired; for instance, one could enable interrupts from the real-time clock by setting bit 11 to 1. The setting as shown here is the typical setting when working in MDOS.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;/signal&amp;#039;&amp;#039; means negative logic. The first column is the base address for the respective bit if that bit is addressed without offset. You see that the base address is shifted one bit position to the left. Thus, setting R12 to &amp;gt;0004 and accessing bit 0 is the same as setting R12 to &amp;gt;0000 and accessing bit 2. &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:80%; padding-top:3em&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:lightgray; text-align:center&amp;quot; | TMS 9901&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%; font-weight:bold&amp;quot; | Address&lt;br /&gt;
| style=&amp;quot;width:10%; font-weight:bold&amp;quot; | Bit&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Kind&lt;br /&gt;
| style=&amp;quot;width:10%; font-weight:bold&amp;quot; | Default&lt;br /&gt;
| style=&amp;quot;width:20%: font-weight:bold&amp;quot; | Meaning&lt;br /&gt;
| style=&amp;quot;font-weight:bold&amp;quot; | Modification&lt;br /&gt;
|-&lt;br /&gt;
| 0000&lt;br /&gt;
| 0&lt;br /&gt;
| flag&lt;br /&gt;
| 0&lt;br /&gt;
| Clock mode (/Interrupt mode)&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0002&lt;br /&gt;
| 1&lt;br /&gt;
| int&lt;br /&gt;
| 1&lt;br /&gt;
| /INTA (P-Box, pin 17)&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0004&lt;br /&gt;
| 2&lt;br /&gt;
| int&lt;br /&gt;
| 1&lt;br /&gt;
| /V9938 INT&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0006&lt;br /&gt;
| 3&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick button&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0008&lt;br /&gt;
| 4&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick left&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 000A&lt;br /&gt;
| 5&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick right&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 000C&lt;br /&gt;
| 6&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick down&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 000E&lt;br /&gt;
| 7&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick up&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0010&lt;br /&gt;
| 8&lt;br /&gt;
| int&lt;br /&gt;
| 1&lt;br /&gt;
| [[Geneve keyboard control|/Keyboard scancode available]]&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0012&lt;br /&gt;
| 9&lt;br /&gt;
| in&lt;br /&gt;
| 0&lt;br /&gt;
| (mirrors 003A)&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0014&lt;br /&gt;
| 10&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Left Mouse button (mirrors 0038)&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0016&lt;br /&gt;
| 11&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Real-time clock interrupt (mirrors 0036)&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0018&lt;br /&gt;
| 12&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /INTB (mirrors 0034)&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 001A&lt;br /&gt;
| 13&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| (reflects output 0032)&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 001C&lt;br /&gt;
| 14&lt;br /&gt;
| in&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 001E&lt;br /&gt;
| 15&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| (reflects output 002E)&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0020&lt;br /&gt;
| 16&lt;br /&gt;
| out&lt;br /&gt;
| 0&lt;br /&gt;
| RESET (P-Box, pin 6 (inverted))&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0022&lt;br /&gt;
| 17&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| /V9938 reset&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0024&lt;br /&gt;
| 18&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| Joystick select&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0026&lt;br /&gt;
| 19&lt;br /&gt;
| -&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0028&lt;br /&gt;
| 20&lt;br /&gt;
| - (out)&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
| [[Programmble Flash Memory Expansion | PFM512]] bank-switch 1 of 2&lt;br /&gt;
|-&lt;br /&gt;
| 002A&lt;br /&gt;
| 21&lt;br /&gt;
| -&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 002C&lt;br /&gt;
| 22&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| /Keyboard reset&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 002E&lt;br /&gt;
| 23&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| PAL pin 5 (System clock speed?)&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 0030&lt;br /&gt;
| 24&lt;br /&gt;
| -&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 0032&lt;br /&gt;
| 25&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| Video [[Geneve wait state generation | wait states]] (PAL pin 19)&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 0034&lt;br /&gt;
| 26&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /INTB (P-Box pin 18)&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 0036&lt;br /&gt;
| 27&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Real-time clock interrupt&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 0038&lt;br /&gt;
| 28&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Left mouse button&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 003A&lt;br /&gt;
| 29&lt;br /&gt;
| in (out)&lt;br /&gt;
| 0&lt;br /&gt;
| Connected to GND  &lt;br /&gt;
| [[Programmble Flash Memory Expansion | PFM512]] bank switch 2 of 2&lt;br /&gt;
|- &lt;br /&gt;
| 003C&lt;br /&gt;
| 30&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Keyboard interrupt (mirrors 0010, no int)&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 003E&lt;br /&gt;
| 31&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick up (mirrors 000e)&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:80%; margin-top:3ex&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:lightgray; text-align:center&amp;quot; | Special&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:20%&amp;quot; | 13C0-13FE&lt;br /&gt;
| Single step&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:80%; margin-top:3ex&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgray; text-align:center&amp;quot; | TMS9995&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Address&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Bit&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Default&lt;br /&gt;
| style=&amp;quot;font-weight:bold&amp;quot; | Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 1EE0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| Decrementer in event counter mode (0=in timer mode)&lt;br /&gt;
|-&lt;br /&gt;
| 1EE2&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| Enable decrementer&lt;br /&gt;
|-&lt;br /&gt;
| 1EE4&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| Interrupt level 1 latch&lt;br /&gt;
|-&lt;br /&gt;
| 1EE6&lt;br /&gt;
| 3&lt;br /&gt;
| 0&lt;br /&gt;
| Interrupt level 2 latch&lt;br /&gt;
|-&lt;br /&gt;
| 1EE8&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
| Interrupt level 4 latch&lt;br /&gt;
|-&lt;br /&gt;
| 1EEA&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| not used&lt;br /&gt;
|-&lt;br /&gt;
| 1EEC&lt;br /&gt;
| 6&lt;br /&gt;
| 0 &lt;br /&gt;
| not used&lt;br /&gt;
|-&lt;br /&gt;
| 1EEE&lt;br /&gt;
| 7&lt;br /&gt;
| 0&lt;br /&gt;
| CapsLock flag&lt;br /&gt;
|-&lt;br /&gt;
| 1EF0&lt;br /&gt;
| 8&lt;br /&gt;
| 1&lt;br /&gt;
| [[Geneve keyboard control|Keyboard control]]&lt;br /&gt;
|-&lt;br /&gt;
| 1EF2&lt;br /&gt;
| 9&lt;br /&gt;
| 1&lt;br /&gt;
| [[Geneve keyboard control|Keyboard control]]&lt;br /&gt;
|-&lt;br /&gt;
| 1EF4&lt;br /&gt;
| 10&lt;br /&gt;
| 1&lt;br /&gt;
| Geneve mode (/TI mode)&lt;br /&gt;
|-&lt;br /&gt;
| 1EF6&lt;br /&gt;
| 11&lt;br /&gt;
| 0&lt;br /&gt;
| Direct mode (/Mapper mode) (page F8 locked into &amp;gt;0000-&amp;gt;1fff)&lt;br /&gt;
|-&lt;br /&gt;
| 1EF8&lt;br /&gt;
| 12&lt;br /&gt;
| 1&lt;br /&gt;
| Cartridge rom size (1=8 KiB, 0=16 Kib)&lt;br /&gt;
|-&lt;br /&gt;
| 1EFA&lt;br /&gt;
| 13&lt;br /&gt;
| 1&lt;br /&gt;
| /Protect 6xxx&lt;br /&gt;
|-&lt;br /&gt;
| 1EFC&lt;br /&gt;
| 14&lt;br /&gt;
| 1&lt;br /&gt;
| /Protect 7xxx&lt;br /&gt;
|-&lt;br /&gt;
| 1EFE&lt;br /&gt;
| 15&lt;br /&gt;
| 1&lt;br /&gt;
| /Add [[Geneve wait state generation|wait state]] per memory cycle&lt;br /&gt;
|-&lt;br /&gt;
| 1FDA&lt;br /&gt;
| 125&lt;br /&gt;
| 0&lt;br /&gt;
| Macro Instruction Detect&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The MID flag is set whenever the CPU encounters an unknown opcode. This (together with the interrupt) may be used to implement new &amp;quot;commands&amp;quot; on the application level.&lt;br /&gt;
&lt;br /&gt;
The bits on addresses 1EEA to 1EFE are so-called &amp;#039;&amp;#039;&amp;#039;user-defined internal CRU flags&amp;#039;&amp;#039;&amp;#039;. As such, they are just latches that store the recent setting (0 or 1) and return it when reading the bit again. However, the TMS 9995 processor propagates the setting to the outside world, while ignoring input from there. That is, when we set bit 15 to 1 (here on address 1efe), &lt;br /&gt;
&lt;br /&gt;
* the CPU stores the 1 on the corresponding flag&lt;br /&gt;
* it also outputs the 1 on CRUOUT, with the address bus set to 1EFE, where it may have some specific effect. Here, it turns off [[Geneve wait state generation | wait states]]. &lt;br /&gt;
&lt;br /&gt;
When we test the bit using TB, the processor reads the flag value, but it ignores any incoming bit on CRUIN. This is reasonable, as the address is visible outside, and external devices may attempt to send some value to the CPU. &lt;br /&gt;
&lt;br /&gt;
Obviously these flag bits only make sense when used as outputs. Storing bits for later reading can be done better within the CPU RAM.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
As always, CRU bits are queried and set with special commands. Bits are addressed as offsets to a base address which is stored in Workspace Register 12 (R12). The base address is stored in bits 3-14, so the R12 value is twice as high as the absolute bit address. (Note that bit 15 cannot be used since A15 and CRUOUT share the same line.) Base addresses are commonly noted as register 12 values.&lt;br /&gt;
&lt;br /&gt;
Turn on Geneve mode:&lt;br /&gt;
&lt;br /&gt;
 LI   R12,&amp;gt;1EF4&lt;br /&gt;
 SBO  0&lt;br /&gt;
&lt;br /&gt;
or, equivalently&lt;br /&gt;
&lt;br /&gt;
 LI   R12,&amp;gt;1EE0&lt;br /&gt;
 SBO  10&lt;br /&gt;
&lt;br /&gt;
since &amp;gt;1EE0 + 2·10 = &amp;gt;1EE0 + &amp;gt;14 = &amp;gt;1EF4&lt;br /&gt;
&lt;br /&gt;
(bit numbers are often given in decimal notation)&lt;br /&gt;
&lt;br /&gt;
The LDCR and STCR commands are used to write or read multiple CRU bits. The base address is automatically incremented for each bit transfer. Bit transfers begin at the &amp;#039;&amp;#039;least significant bit&amp;#039;&amp;#039;. Note that it is relevant whether less than 9 bits are transferred: If less, the memory location is treated as a byte address, if more, as a word address.&lt;br /&gt;
&lt;br /&gt;
 LI   R12,&amp;gt;0006&lt;br /&gt;
 STCR R0,5&lt;br /&gt;
&lt;br /&gt;
reads the five joystick lines, storing the bits in the least significant five bits of the high byte of R0, with bit 3 at the right.&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x &lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | up&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | down&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | right&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | left&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | but&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we had transferred 9 bits, all bits as shown above are shifted to the right by 8 positions (starting at the very right bit).&lt;br /&gt;
&lt;br /&gt;
 LI   R12,&amp;gt;1EF0&lt;br /&gt;
 LI   R1,&amp;gt;F100   * binary: 11110001&lt;br /&gt;
 LDCR R1,8&lt;br /&gt;
&lt;br /&gt;
This enables the keyboard clock, not clearing the input register, activating TI mode and mapping, cartridges have 8K, no write protection to 6xxx and 7xxx, and no wait states.&lt;br /&gt;
[[Category:Geneve]]&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://www.ninerpedia.org/index.php?title=TIDIR&amp;diff=50005</id>
		<title>TIDIR</title>
		<link rel="alternate" type="text/html" href="http://www.ninerpedia.org/index.php?title=TIDIR&amp;diff=50005"/>
		<updated>2017-03-04T22:12:30Z</updated>

		<summary type="html">&lt;p&gt;Tim: Corrected name on page from TIDIR to TI99DIR  [uncertain how to change title]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TI99DIR is a Windows program (built with Windows XP) written by Fred Kaal for use with PC emulators of the TI99/4a. It runs perfectly in Linux with the WINE emulator. Fred released the program for free use by anyone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tidir.png|400px|thumb|right|screenshot of TI99DIR in action]]&lt;br /&gt;
&lt;br /&gt;
TI99/4a emulators running on a PC can use a PC file to represent a TI file, or to represent a TI disk. There are several formats of TI Disk from single sided single density upwards, but the emulators use basically two different ways of representing TI disks as files.&lt;br /&gt;
&lt;br /&gt;
TI99DIR allows you to create emulated TI disks and move files between them, or convert disk format. It can access files creates with Barry Boone&amp;#039;s [[Archiver]].&lt;br /&gt;
&lt;br /&gt;
TI99DIR directly allows you to examine the contents of an emulated TI disk, including reading DV80 files, listing programs, and since v4.2a viewing TI Artist pictures. &lt;br /&gt;
&lt;br /&gt;
Since v5.2b it has been able to show MyArt images.&lt;br /&gt;
&lt;br /&gt;
Supports compact Flash disk image copying for the nanoPEB and Compact Flash 7 devices.&lt;br /&gt;
&lt;br /&gt;
Fred&amp;#039;s current web page with the current TI DIR (6.2a) is at:&lt;br /&gt;
&lt;br /&gt;
http://www.ti99-geek.nl/    (Projects-&amp;gt; Ti99Dir)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fred was inducted into the TI99ers Hall of Fame on June 24, 2007&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://www.ninerpedia.org/index.php?title=TIDIR&amp;diff=50004</id>
		<title>TIDIR</title>
		<link rel="alternate" type="text/html" href="http://www.ninerpedia.org/index.php?title=TIDIR&amp;diff=50004"/>
		<updated>2017-03-04T22:09:49Z</updated>

		<summary type="html">&lt;p&gt;Tim: Updated website to current page. Reference latest version.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TIDIR is a Windows program (built with Windows XP) written by Fred Kaal for use with PC emulators of the TI99/4a. It runs perfectly in Linux with the WINE emulator. Fred released the program for free use by anyone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tidir.png|400px|thumb|right|screenshot of TIDIR in action]]&lt;br /&gt;
&lt;br /&gt;
TI99/4a emulators running on a PC can use a PC file to represent a TI file, or to represent a TI disk. There are several formats of TI Disk from single sided single density upwards, but the emulators use basically two different ways of representing TI disks as files.&lt;br /&gt;
&lt;br /&gt;
TIDIR allows you to create emulated TI disks and move files between them, or convert disk format. It can access files creates with Barry Boone&amp;#039;s [[Archiver]].&lt;br /&gt;
&lt;br /&gt;
TIDIR directly allows you to examine the contents of an emulated TI disk, including reading DV80 files, listing programs, and since v4.2a viewing TI Artist pictures. &lt;br /&gt;
&lt;br /&gt;
Since v5.2b it has been able to show MyArt images.&lt;br /&gt;
&lt;br /&gt;
Supports compact Flash disk image copying for the nanoPEB and Compact Flash 7 devices.&lt;br /&gt;
&lt;br /&gt;
Fred&amp;#039;s current web page with the current TI DIR (6.2a) is at:&lt;br /&gt;
&lt;br /&gt;
http://www.ti99-geek.nl/    (Projects-&amp;gt; Ti99Dir)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fred was inducted into the TI99ers Hall of Fame on June 24, 2007&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://www.ninerpedia.org/index.php?title=Memory_Image_format_E/A_Module&amp;diff=49999</id>
		<title>Memory Image format E/A Module</title>
		<link rel="alternate" type="text/html" href="http://www.ninerpedia.org/index.php?title=Memory_Image_format_E/A_Module&amp;diff=49999"/>
		<updated>2017-02-02T17:05:55Z</updated>

		<summary type="html">&lt;p&gt;Tim: Changed maximum length of memory image from 8198 to 8192.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The memory dump format is a headered [[Formats#ROM_dump_formats|ROM dump format]] from the memory chips from the CPU address space, used for loading program files using Editor / Assembler cartridge option 5. &lt;br /&gt;
&lt;br /&gt;
The contents of these files are taken from the CPU address space, so there must be meta-data about the origin of the data. In fact, these files are commonly 8192 bytes long, that is, 6 bytes for header information plus maximum data size of 8186 bytes.  &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:60em; text-align:center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:4em&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width:7em&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;width:7em&amp;quot; | 1 &lt;br /&gt;
| style=&amp;quot;width:7em&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;width:7em&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;width:7em&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;width:7em&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;width:7em&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;width:7em&amp;quot; | 7&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 1px solid black; padding:0.2ex&amp;quot; | Flag&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 1px solid black; padding:0.2ex&amp;quot; | Length&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 1px solid black; padding:0.2ex&amp;quot; | Address&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 1px solid black; padding:0.2ex&amp;quot; | Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; colspan=&amp;quot;8&amp;quot; style=&amp;quot;border: 1px solid black; padding:0.2ex&amp;quot; | Data&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| end&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Flag&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;FFFF: More files are following; &amp;gt;0000: This is the last file&lt;br /&gt;
&lt;br /&gt;
Note: The last character of the file name of the following file is incremented by one.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Length&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This word specifies the *total* size of data. Is is the sum of the header size (6 bytes) plus the length of data. If the file is larger, only the given length of data is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Memory address in the CPU address space.&lt;br /&gt;
&lt;br /&gt;
== Other Headered Dump File Formats ==&lt;br /&gt;
* [[GRAM Karte format|GRAM Karte]] (Mechatronic, West-Germany)&lt;br /&gt;
* [[GRAM Kracker format |GRAM Kracker]] (Millers Graphics, USA)&lt;br /&gt;
* [[GRAM Simulator format|GRAM Simulator]] (TI Gebruikers Groep, Netherlands)&lt;br /&gt;
* [[Module Simulator format|Module Simulator]] (Texas Instruments)&lt;br /&gt;
* [[Memory Image format Easybug|Memory Image Easybug]] (Texas Instruments)&lt;br /&gt;
* [[RAM Module Handler format|RAM Module Handler]] (E.P. Rebel, Netherlands)&lt;br /&gt;
* [[DSR RAM Handler format|DSR RAM Handler]] (E.P. Rebel, Netherlands)&lt;br /&gt;
&lt;br /&gt;
[[Category:File Format]]&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://www.ninerpedia.org/index.php?title=Geneve_CRU_definitions&amp;diff=48370</id>
		<title>Geneve CRU definitions</title>
		<link rel="alternate" type="text/html" href="http://www.ninerpedia.org/index.php?title=Geneve_CRU_definitions&amp;diff=48370"/>
		<updated>2014-09-06T05:47:11Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* Definitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definitions ==&lt;br /&gt;
&lt;br /&gt;
CRU bits may be tested with the TB command, with the base address in R12. The bit is copied to the EQ flag of the status register so that a JEQ will cause a branch whenever the bit is set.&lt;br /&gt;
&lt;br /&gt;
The bits of the 9901 are tested in positive logic, which means that a low value on the pin will make a TB yield EQ=0, and a high value on the pin makes EQ=1. The signals on the pins may show negative logic themselves. That is, if the joystick button is pressed, a low value is put on the /INT3 input (bit 3), and a TB 3 will make EQ=0, while a not pressed button would be EQ=1.&lt;br /&gt;
&lt;br /&gt;
TMS9901 lines may be configured as inputs (in), outputs (out), and the first 16 addresses may be configured as interrupt inputs (int), triggering an outgoing interrupt if the mask is set to 1 for the respective input. The interrupt mask configuration may be changed as desired; for instance, one could enable interrupts from the real-time clock by setting bit 11 to 1. The setting as shown here is the typical setting when working in MDOS.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;/signal&amp;#039;&amp;#039; means negative logic. The first column is the base address for the respective bit if that bit is addressed without offset. You see that the base address is shifted one bit position to the left. Thus, setting R12 to &amp;gt;0004 and accessing bit 0 is the same as setting R12 to &amp;gt;0000 and accessing bit 2. &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:70%; padding-top:3em&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; style=&amp;quot;background-color:lightgray; text-align:center&amp;quot; | TMS 9901&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Address&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Bit&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Kind&lt;br /&gt;
| style=&amp;quot;width:10%; font-weight:bold&amp;quot; | Default&lt;br /&gt;
| style=&amp;quot;font-weight:bold&amp;quot; | Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0000&lt;br /&gt;
| 0&lt;br /&gt;
| flag&lt;br /&gt;
| 0&lt;br /&gt;
| Clock mode (/Interrupt mode)&lt;br /&gt;
|-&lt;br /&gt;
| 0002&lt;br /&gt;
| 1&lt;br /&gt;
| int&lt;br /&gt;
| 1&lt;br /&gt;
| /INTA (P-Box, pin 17)&lt;br /&gt;
|-&lt;br /&gt;
| 0004&lt;br /&gt;
| 2&lt;br /&gt;
| int&lt;br /&gt;
| 1&lt;br /&gt;
| /V9938 INT&lt;br /&gt;
|-&lt;br /&gt;
| 0006&lt;br /&gt;
| 3&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick button&lt;br /&gt;
|-&lt;br /&gt;
| 0008&lt;br /&gt;
| 4&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick left&lt;br /&gt;
|-&lt;br /&gt;
| 000A&lt;br /&gt;
| 5&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick right&lt;br /&gt;
|-&lt;br /&gt;
| 000C&lt;br /&gt;
| 6&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick down&lt;br /&gt;
|-&lt;br /&gt;
| 000E&lt;br /&gt;
| 7&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick up&lt;br /&gt;
|-&lt;br /&gt;
| 0010&lt;br /&gt;
| 8&lt;br /&gt;
| int&lt;br /&gt;
| 1&lt;br /&gt;
| [[Geneve keyboard control|/Keyboard scancode available]]&lt;br /&gt;
|-&lt;br /&gt;
| 0012&lt;br /&gt;
| 9&lt;br /&gt;
| in&lt;br /&gt;
| 0&lt;br /&gt;
| (mirrors 003A)&lt;br /&gt;
|-&lt;br /&gt;
| 0014&lt;br /&gt;
| 10&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Left Mouse button (mirrors 0038)&lt;br /&gt;
|-&lt;br /&gt;
| 0016&lt;br /&gt;
| 11&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Real-time clock interrupt (mirrors 0036)&lt;br /&gt;
|-&lt;br /&gt;
| 0018&lt;br /&gt;
| 12&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /INTB (mirrors 0034)&lt;br /&gt;
|-&lt;br /&gt;
| 001A&lt;br /&gt;
| 13&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| (reflects output 0032)&lt;br /&gt;
|-&lt;br /&gt;
| 001C&lt;br /&gt;
| 14&lt;br /&gt;
| in&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 001E&lt;br /&gt;
| 15&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| (reflects output 002E)&lt;br /&gt;
|-&lt;br /&gt;
| 0020&lt;br /&gt;
| 16&lt;br /&gt;
| out&lt;br /&gt;
| 0&lt;br /&gt;
| RESET (P-Box, pin 6 (inverted))&lt;br /&gt;
|-&lt;br /&gt;
| 0022&lt;br /&gt;
| 17&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| /V9938 reset&lt;br /&gt;
|-&lt;br /&gt;
| 0024&lt;br /&gt;
| 18&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| Joystick select&lt;br /&gt;
|-&lt;br /&gt;
| 0026&lt;br /&gt;
| 19&lt;br /&gt;
| -&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 0028&lt;br /&gt;
| 20&lt;br /&gt;
| - (out)&lt;br /&gt;
| 0&lt;br /&gt;
|  (PFM512 bank-switch 1 of 2)&lt;br /&gt;
|-&lt;br /&gt;
| 002A&lt;br /&gt;
| 21&lt;br /&gt;
| -&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 002C&lt;br /&gt;
| 22&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| /Keyboard reset&lt;br /&gt;
|- &lt;br /&gt;
| 002E&lt;br /&gt;
| 23&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| PAL pin 5 (System clock speed?)&lt;br /&gt;
|- &lt;br /&gt;
| 0030&lt;br /&gt;
| 24&lt;br /&gt;
| -&lt;br /&gt;
| 0&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| 0032&lt;br /&gt;
| 25&lt;br /&gt;
| out&lt;br /&gt;
| 1&lt;br /&gt;
| Video [[Geneve wait state generation | wait states]] (PAL pin 19)&lt;br /&gt;
|- &lt;br /&gt;
| 0034&lt;br /&gt;
| 26&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /INTB (P-Box pin 18)&lt;br /&gt;
|- &lt;br /&gt;
| 0036&lt;br /&gt;
| 27&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Real-time clock interrupt&lt;br /&gt;
|- &lt;br /&gt;
| 0038&lt;br /&gt;
| 28&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Left mouse button&lt;br /&gt;
|- &lt;br /&gt;
| 003A&lt;br /&gt;
| 29&lt;br /&gt;
| in (out)&lt;br /&gt;
| 0&lt;br /&gt;
| Connected to GND  (PFM512 bank switch 2 of 2)&lt;br /&gt;
|- &lt;br /&gt;
| 003C&lt;br /&gt;
| 30&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Keyboard interrupt (mirrors 0010, no int)&lt;br /&gt;
|- &lt;br /&gt;
| 003E&lt;br /&gt;
| 31&lt;br /&gt;
| in&lt;br /&gt;
| 1&lt;br /&gt;
| /Joystick up (mirrors 000e)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:70%; margin-top:3ex&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:lightgray; text-align:center&amp;quot; | Special&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:20%&amp;quot; | 13C0-13FE&lt;br /&gt;
| Single step&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:70%; margin-top:3ex&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgray; text-align:center&amp;quot; | TMS9995&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Address&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Bit&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Default&lt;br /&gt;
| style=&amp;quot;font-weight:bold&amp;quot; | Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 1EE0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| Decrementer in event counter mode (0=in timer mode)&lt;br /&gt;
|-&lt;br /&gt;
| 1EE2&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| Enable decrementer&lt;br /&gt;
|-&lt;br /&gt;
| 1EE4&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| Interrupt level 1 latch&lt;br /&gt;
|-&lt;br /&gt;
| 1EE6&lt;br /&gt;
| 3&lt;br /&gt;
| 0&lt;br /&gt;
| Interrupt level 2 latch&lt;br /&gt;
|-&lt;br /&gt;
| 1EE8&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
| Interrupt level 4 latch&lt;br /&gt;
|-&lt;br /&gt;
| 1EEA&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| not used&lt;br /&gt;
|-&lt;br /&gt;
| 1EEC&lt;br /&gt;
| 6&lt;br /&gt;
| 0 &lt;br /&gt;
| not used&lt;br /&gt;
|-&lt;br /&gt;
| 1EEE&lt;br /&gt;
| 7&lt;br /&gt;
| 0&lt;br /&gt;
| CapsLock flag&lt;br /&gt;
|-&lt;br /&gt;
| 1EF0&lt;br /&gt;
| 8&lt;br /&gt;
| 1&lt;br /&gt;
| [[Geneve keyboard control|Keyboard control]]&lt;br /&gt;
|-&lt;br /&gt;
| 1EF2&lt;br /&gt;
| 9&lt;br /&gt;
| 1&lt;br /&gt;
| [[Geneve keyboard control|Keyboard control]]&lt;br /&gt;
|-&lt;br /&gt;
| 1EF4&lt;br /&gt;
| 10&lt;br /&gt;
| 1&lt;br /&gt;
| Geneve mode (/TI mode)&lt;br /&gt;
|-&lt;br /&gt;
| 1EF6&lt;br /&gt;
| 11&lt;br /&gt;
| 0&lt;br /&gt;
| Direct mode (/Mapper mode)&lt;br /&gt;
|-&lt;br /&gt;
| 1EF8&lt;br /&gt;
| 12&lt;br /&gt;
| 1&lt;br /&gt;
| Cartridge rom size (1=8 KiB, 0=16 Kib)&lt;br /&gt;
|-&lt;br /&gt;
| 1EFA&lt;br /&gt;
| 13&lt;br /&gt;
| 1&lt;br /&gt;
| /Protect 6xxx&lt;br /&gt;
|-&lt;br /&gt;
| 1EFC&lt;br /&gt;
| 14&lt;br /&gt;
| 1&lt;br /&gt;
| /Protect 7xxx&lt;br /&gt;
|-&lt;br /&gt;
| 1EFE&lt;br /&gt;
| 15&lt;br /&gt;
| 1&lt;br /&gt;
| /Add [[Geneve wait state generation|wait state]] per memory cycle&lt;br /&gt;
|-&lt;br /&gt;
| 1FDA&lt;br /&gt;
| 125&lt;br /&gt;
| 0&lt;br /&gt;
| Macro Instruction Detect&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The MID flag is set whenever the CPU encounters an unknown opcode. This (together with the interrupt) may be used to implement new &amp;quot;commands&amp;quot; on the application level.&lt;br /&gt;
&lt;br /&gt;
The bits on addresses 1EEA to 1EFE are so-called &amp;#039;&amp;#039;&amp;#039;user-defined internal CRU flags&amp;#039;&amp;#039;&amp;#039;. As such, they are just latches that store the recent setting (0 or 1) and return it when reading the bit again. However, the TMS 9995 processor propagates the setting to the outside world, while ignoring input from there. That is, when we set bit 15 to 1 (here on address 1efe), &lt;br /&gt;
&lt;br /&gt;
* the CPU stores the 1 on the corresponding flag&lt;br /&gt;
* it also outputs the 1 on CRUOUT, with the address bus set to 1EFE, where it may have some specific effect. Here, it turns off [[Geneve wait state generation | wait states]]. &lt;br /&gt;
&lt;br /&gt;
When we test the bit using TB, the processor reads the flag value, but it ignores any incoming bit on CRUIN. This is reasonable, as the address is visible outside, and external devices may attempt to send some value to the CPU. &lt;br /&gt;
&lt;br /&gt;
Obviously these flag bits only make sense when used as outputs. Storing bits for later reading can be done better within the CPU RAM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PFM512 boot device modification replaces the standard 16KiB 28-pin boot EPROM with a 512KiB 32-pin Atmel 29c040 flash chip.  The chip is visible in four 128KiB banks residing at memory pages 0xf0 - 0xff.  Each page is selected via two re-purposed (normally unused) 9901 outputs:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:70%; margin-top:3ex&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgray; text-align:center&amp;quot; | PFM512 Bank Selection&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | cru 0x28&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | cru 0x3A&lt;br /&gt;
| style=&amp;quot;width:15%; font-weight:bold&amp;quot; | Bank&lt;br /&gt;
| style=&amp;quot;font-weight:bold&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| Bank 0 [[Default]]&lt;br /&gt;
| Boot code and Operating System&lt;br /&gt;
|-&lt;br /&gt;
| 0 &lt;br /&gt;
| 1 &lt;br /&gt;
| Bank 2&lt;br /&gt;
| Flashdisk bank #1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| Bank 1  &lt;br /&gt;
| Flashdisk bank #2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| Bank 3&lt;br /&gt;
| Flashdisk bank #3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
As always, CRU bits are queried and set with special commands. Bits are addressed as offsets to a base address which is stored in Workspace Register 12 (R12). The base address is stored in bits 3-14, so the R12 value is twice as high as the absolute bit address. (Note that bit 15 cannot be used since A15 and CRUOUT share the same line.) Base addresses are commonly noted as register 12 values.&lt;br /&gt;
&lt;br /&gt;
Turn on Geneve mode:&lt;br /&gt;
&lt;br /&gt;
 LI   R12,&amp;gt;1EF4&lt;br /&gt;
 SBO  0&lt;br /&gt;
&lt;br /&gt;
or, equivalently&lt;br /&gt;
&lt;br /&gt;
 LI   R12,&amp;gt;1EE0&lt;br /&gt;
 SBO  10&lt;br /&gt;
&lt;br /&gt;
since &amp;gt;1EE0 + 2·10 = &amp;gt;1EE0 + &amp;gt;14 = &amp;gt;1EF4&lt;br /&gt;
&lt;br /&gt;
(bit numbers are often given in decimal notation)&lt;br /&gt;
&lt;br /&gt;
The LDCR and STCR commands are used to write or read multiple CRU bits. The base address is automatically incremented for each bit transfer. Bit transfers begin at the &amp;#039;&amp;#039;least significant bit&amp;#039;&amp;#039;. Note that it is relevant whether less than 9 bits are transferred: If less, the memory location is treated as a byte address, if more, as a word address.&lt;br /&gt;
&lt;br /&gt;
 LI   R12,&amp;gt;0006&lt;br /&gt;
 STCR R0,5&lt;br /&gt;
&lt;br /&gt;
reads the five joystick lines, storing the bits in the least significant five bits of the high byte of R0, with bit 3 at the right.&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x &lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | up&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | down&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | right&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | left&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | but&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
| style=&amp;quot;width:4%; border: 1px solid black; text-align:center&amp;quot; | x&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If we had transferred 9 bits, all bits as shown above are shifted to the right by 8 positions (starting at the very right bit).&lt;br /&gt;
&lt;br /&gt;
 LI   R12,&amp;gt;1EF0&lt;br /&gt;
 LI   R1,&amp;gt;F100   * binary: 11110001&lt;br /&gt;
 LDCR R1,8&lt;br /&gt;
&lt;br /&gt;
This enables the keyboard clock, not clearing the input register, activating TI mode and mapping, cartridges have 8K, no write protection to 6xxx and 7xxx, and no wait states.&lt;br /&gt;
[[Category:Geneve]]&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
</feed>