<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bitchin100.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=78.69.53.223</id>
	<title>Bitchin100 DocGarden - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://bitchin100.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=78.69.53.223"/>
	<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Special:Contributions/78.69.53.223"/>
	<updated>2026-04-29T15:29:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_200_serial_interface&amp;diff=1225</id>
		<title>Model 200 serial interface</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_200_serial_interface&amp;diff=1225"/>
		<updated>2009-03-22T21:19:10Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The BASIC ROM provides access to the serial port. BASIC ROM support is well documented elsewhere. This article covers direct use of the [[80C52]] on the Tandy 200.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Before the serial port can be used, it must be configured both for serial word format (data bits, stop bits, and parity) and baud rate.&lt;br /&gt;
&lt;br /&gt;
=== Select RS232 Port ===&lt;br /&gt;
&lt;br /&gt;
At any given time, either the internal modem or the external RS232 connector may be connected to the UART. This is controllable through software.&lt;br /&gt;
&lt;br /&gt;
For RS232 access, 8155 port B &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt;, bit #3 must be set to 0.&lt;br /&gt;
&lt;br /&gt;
For Modem access, 8155 port B &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt;, bit #3 must be set to 1.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt; is shared with other functions, including power control.&lt;br /&gt;
&lt;br /&gt;
=== Serial Word Format ===&lt;br /&gt;
&lt;br /&gt;
Port &amp;lt;code&amp;gt;$C0&amp;lt;/code&amp;gt; controls the mode configuration and command register.&lt;br /&gt;
&lt;br /&gt;
Mode configuration (Asyncronous)&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0-1 ||	Baud rate devisor		|| 00=*&amp;lt;br&amp;gt; 01=1x&amp;lt;br&amp;gt; 10=16x&amp;lt;br&amp;gt; 11=64x&lt;br /&gt;
|-&lt;br /&gt;
|2-3 ||	Character Length Select		|| Bits:&amp;lt;br/&amp;gt;00 &amp;amp;rarr; 5&amp;lt;br/&amp;gt;01 &amp;amp;rarr; 6&amp;lt;br/&amp;gt;10 &amp;amp;rarr;  7&amp;lt;br/&amp;gt;11 &amp;amp;rarr; 8&lt;br /&gt;
|-&lt;br /&gt;
|4-5 ||	Parity Inhibit			|| 00 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;01 &amp;amp;rarr; Odd parity&amp;lt;br&amp;gt;10 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;11 &amp;amp;rarr; Even parity&lt;br /&gt;
|-&lt;br /&gt;
|6-7 ||	Stop Bits			|| 00 &amp;amp;rarr; Inhibit&amp;lt;br&amp;gt;01 &amp;amp;rarr; 1&amp;lt;br&amp;gt;10 &amp;amp;rarr; 1.5&amp;lt;br&amp;gt;11 &amp;amp;rarr; 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mode configuration (Syncronous)&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0-1 ||	Not used			|| 00&lt;br /&gt;
|-&lt;br /&gt;
|2-3 ||	Character Length Select		|| Bits:&amp;lt;br/&amp;gt;00 &amp;amp;rarr; 5&amp;lt;br/&amp;gt;01 &amp;amp;rarr; 6&amp;lt;br/&amp;gt;10 &amp;amp;rarr;  7&amp;lt;br/&amp;gt;11 &amp;amp;rarr; 8&lt;br /&gt;
|-&lt;br /&gt;
|4-5 ||	Parity Inhibit			|| 00 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;01 &amp;amp;rarr; Odd parity&amp;lt;br&amp;gt;10 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;11 &amp;amp;rarr; Even parity&lt;br /&gt;
|-&lt;br /&gt;
|6   ||	Sync mode			|| 0 &amp;amp;rarr; Internal&amp;lt;br&amp;gt;1 &amp;amp;rarr; External&lt;br /&gt;
|-&lt;br /&gt;
|7   ||	No. of Sync chars		|| 0 &amp;amp;rarr; 2 Bytes&amp;lt;br&amp;gt;1 &amp;amp;rarr; 1 Byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Command register&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0   ||	/TXE				|| 0 &amp;amp;rarr; Disable&amp;lt;br&amp;gt; 1 &amp;amp;rarr; Enable&lt;br /&gt;
|-&lt;br /&gt;
|1   ||	DTR				|| 0 &amp;amp;rarr; 1&amp;lt;br/&amp;gt;1 &amp;amp;rarr; 0&lt;br /&gt;
|-&lt;br /&gt;
|2   ||	RXE				|| 0 &amp;amp;rarr; 0&amp;lt;br/&amp;gt;1 &amp;amp;rarr; 1&lt;br /&gt;
|-&lt;br /&gt;
|3   ||	SBRK				|| 0 &amp;amp;rarr; Normal Operation&amp;lt;br&amp;gt; 1 &amp;amp;rarr; Send BRK char&lt;br /&gt;
|-&lt;br /&gt;
|4   ||	ER				|| 0 &amp;amp;rarr; Normal Operation&amp;lt;br&amp;gt; 1 &amp;amp;rarr; Reset error flag&lt;br /&gt;
|-&lt;br /&gt;
|5   ||	/RTS				|| 0 &amp;amp;rarr; 1&amp;lt;br/&amp;gt;1 &amp;amp;rarr; 0&lt;br /&gt;
|-&lt;br /&gt;
|6   ||	IR				|| 0 &amp;amp;rarr; Normal Operation&amp;lt;br/&amp;gt;1 &amp;amp;rarr; Internal Reset&lt;br /&gt;
|-&lt;br /&gt;
|7   ||	EH				|| 0 &amp;amp;rarr; Normal Operation&amp;lt;br&amp;gt; 1 &amp;amp;rarr; *&lt;br /&gt;
|}&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
--uptohere--&lt;br /&gt;
CPU selection of baud rate is accomplished by loading a divisor into the PIO register through output ports &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B4&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The baud rate selection must be committed by writing &amp;lt;code&amp;gt;$C3&amp;lt;/code&amp;gt; to register &amp;lt;code&amp;gt;$B8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here is a table of some baud rates that may be of interest:&lt;br /&gt;
&lt;br /&gt;
{|  border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
| Baud Rate	|| PIO&amp;lt;br/&amp;gt;Divisor	|| Port &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt;	|| Port &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 75		|| 2048			|| 72				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 110		|| 1396			|| 69				|| 116&lt;br /&gt;
|-&lt;br /&gt;
| 300		|| 512			|| 66				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 600		|| 256			|| 65				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1200		|| 128			|| 64				|| 128&lt;br /&gt;
|-&lt;br /&gt;
| 2400		|| 64			|| 64				|| 64&lt;br /&gt;
|-&lt;br /&gt;
| 4800		|| 32			|| 64				|| 32&lt;br /&gt;
|-&lt;br /&gt;
| 9600		|| 16			|| 64				|| 16&lt;br /&gt;
|-&lt;br /&gt;
| 19200		|| 8			|| 64				|| 8&lt;br /&gt;
|-&lt;br /&gt;
| 38400		|| 4			|| 64				|| 4&lt;br /&gt;
|-&lt;br /&gt;
| 76800		|| 4			|| 64				|| 2&lt;br /&gt;
|-&lt;br /&gt;
| 153600	|| 4			|| 64				|| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I include 76800 and 153600 since they are the highest baud rates that the M100 is capable of. Certainly they are usable for communicating with another Model 100. However since they are not a &amp;quot;known&amp;quot; baud rate, they are less useful for communicating with PCs or other devices.&lt;br /&gt;
&lt;br /&gt;
That said, you may be able to find a device or bitbang GPIO lines to communicate at these rates. I have read that some USB-&amp;gt;Serial adapters are capable of communicating at many more baud rates than the typical built-in serial ports, so there is definitely room for further exploration.&lt;br /&gt;
&lt;br /&gt;
Here is a practical example of using 38400bps using only BASIC code. This program dumps all RAM contents to the serial port.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 1	DEFINTA-Z:&lt;br /&gt;
	OPEN&amp;quot;COM:98N1D&amp;quot;FOROUTPUTAS1:&lt;br /&gt;
	D$=&amp;quot;&amp;quot;:&lt;br /&gt;
	A=FRE(&amp;quot;0&amp;quot;):&lt;br /&gt;
	L=VARPTR(D$)+1:&lt;br /&gt;
	M=L+1:&lt;br /&gt;
	POKEL-1,128:&lt;br /&gt;
	OUT180,4:&lt;br /&gt;
	OUT181,64:&lt;br /&gt;
	OUT184,195:&lt;br /&gt;
	FORI=0TO255:&lt;br /&gt;
		POKEM,128+I/2:&lt;br /&gt;
		POKEL,(IMOD2)*128:&lt;br /&gt;
		PRINT#1,D$;:&lt;br /&gt;
	NEXT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately this BASIC code does not transmit the 32K of data any faster than the 19200bps code. Both take about 33 seconds to transmit the image.&lt;br /&gt;
&lt;br /&gt;
So, here&#039;s an assembly language version of the same program. It transfers your Model 100&#039;s 32K RAM to a serial connection in about 8.5 seconds!&lt;br /&gt;
&lt;br /&gt;
Note that this code obeys the &amp;quot;clear to send&amp;quot; signal from the PC, so given hardware flow control enabled and properly configured on the PC, we should not overrun the remote UART.&lt;br /&gt;
&lt;br /&gt;
Not that if the PC is busy doing something else (like printing to the screen) it might flow control us, and you may not achieve the maximum speed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		.org	64704&lt;br /&gt;
&lt;br /&gt;
		; select RS232 port&lt;br /&gt;
		MVI	A, $25&lt;br /&gt;
		OUT	$BA&lt;br /&gt;
&lt;br /&gt;
		; set up 8N1&lt;br /&gt;
		MVI	A, 28&lt;br /&gt;
		OUT	$D8&lt;br /&gt;
&lt;br /&gt;
		; set up 38400 bps&lt;br /&gt;
		MVI	A, 64&lt;br /&gt;
		OUT	$BD&lt;br /&gt;
		MVI	A, 4&lt;br /&gt;
		OUT	$BC&lt;br /&gt;
		MVI	A, $C3&lt;br /&gt;
		OUT	$B8&lt;br /&gt;
&lt;br /&gt;
		LXI	H,32768&lt;br /&gt;
&lt;br /&gt;
WAITEMPTY:	IN	$D8&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
	&lt;br /&gt;
		MOV	A,M&lt;br /&gt;
		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
		INX	H&lt;br /&gt;
		MOV	A,H&lt;br /&gt;
		ORA	L&lt;br /&gt;
&lt;br /&gt;
		JNZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
		RET&lt;br /&gt;
&lt;br /&gt;
		.END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data Transmission ==&lt;br /&gt;
&lt;br /&gt;
Once configured, sending a character is simply&lt;br /&gt;
&lt;br /&gt;
 		MVI	&#039;A&#039;&lt;br /&gt;
 		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
or, in BASIC,&lt;br /&gt;
&lt;br /&gt;
 OUT 200,ASC(&amp;quot;A&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
In the UART, there is room for two characters: the character currently be transmitted, and the next one. This permits you to ensure there is always one character waiting in the wings.&lt;br /&gt;
&lt;br /&gt;
You should never overflow the transmission buffers. Either do some other work during the &amp;quot;downtime&amp;quot; and/or wait until there is room by polling bit 4 (0x10) of register $D8. The code that follows just does a &amp;quot;busy wait.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 WAITEMPTY:	IN	$D8&lt;br /&gt;
 		ANI	$10&lt;br /&gt;
 		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
When deciding whether the other device is ready to receive you should also consider the Clear To Send (CTS) flow control line described later in this document.&lt;br /&gt;
&lt;br /&gt;
== Data Reception ==&lt;br /&gt;
&lt;br /&gt;
=== BASIC ROM Interrupt 6.5 Handling ===&lt;br /&gt;
&lt;br /&gt;
Whenever the UART receives another character, Interrupt 6.5 is signalled. Then, if interrupts are enabled, the CPU stops what it is doing and CALLs location 0x0034 in the BASIC ROM. This code disables further interrupts and jumps to the location 0x6DAC.&lt;br /&gt;
&lt;br /&gt;
The ISR then jumps to vector 0xFE5C (0xF5FC?) in RAM. Normally this is just a return instruction, but you could hook the interrupt here. [ stack manipulation to avoid/ or include default processing + re-enable interrupts? - TBD ]&lt;br /&gt;
&lt;br /&gt;
=== Polling Interrupt 6.5 ===&lt;br /&gt;
&lt;br /&gt;
Accepting the BASIC ROM&#039;s handling imposes significant overhead. With each interrupt, the instruction pointer must be placed on the stack and a jump performed at minimum. If the BASIC ROM (as opposed to an Option ROM) is switched in, then you will have the overhead of disabling interrupts, a jump to the DR vector, a return instruction, and then the default processing of reading and enqueing the new character. All that, and at this point no useful work has been performed other than to relieve the UART. &lt;br /&gt;
&lt;br /&gt;
For maximum efficiency you may wish to poll Interrupt 6.5 pin rather than accept the overhead of an interrupt. This is made possible by the 8085&#039;s SIM and RIM instructions.&lt;br /&gt;
&lt;br /&gt;
Using the SIM instruction, you can set the interrupt mask such that UART DR (data ready), bit 1, will not trigger an interrupt. Then, you can poll this bit using the RIM instruction ANDing with 0x20 to see if DR is set.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you could disable interrupt processing altogether during your polled routine, but still use RIM to poll. This has the disadvantage of disabling the background ISR. But to achieve higher baud rates, you may not want the background ISR running anyway.&lt;br /&gt;
&lt;br /&gt;
== Flow Control ==&lt;br /&gt;
&lt;br /&gt;
The Model T has full support in hardware for the CTS and RTS flow control lines. In the BASIC ROM, however, it is not implemented. Instead the BASIC ROM relies on slow, kludgy XON/XOFF character escapes. This makes it difficult to transmit or receive binary files since the XON/XOFF characters are reserved for flow control.&lt;br /&gt;
&lt;br /&gt;
Since we are discussing direct control of the UART, we can do better and implement full flow control.&lt;br /&gt;
&lt;br /&gt;
=== Detect Clear to Send (CTS) ===&lt;br /&gt;
&lt;br /&gt;
The CTS line is an input to the Model 100. It indicates whether the device attached to the serial port (or the remote equipment behind it) has room to accept new characters. The device can &amp;quot;flow off&amp;quot; the Model T when its receive buffers are full.&lt;br /&gt;
&lt;br /&gt;
Implementing CTS is easy. The following code performs a busy wait on CTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CTS line is read from bit #5 of I/O address 0xBB. Note that it is inverted; if it is 0, the device is signalling &amp;quot;clear to send.&amp;quot; If 1, the device is attempting to flow us off from transmitting.&lt;br /&gt;
&lt;br /&gt;
=== Request Peer to Send (RTS) ===&lt;br /&gt;
&lt;br /&gt;
The RTS line is an output from the Model 100 to the device connected on the serial port. It is a signal  &amp;quot;requesting&amp;quot; the device to send (or not to send). From the other point of view, the device should transmit if and only if RTS is high. Note that from the device perspective, it sees our RTS as its CTS.&lt;br /&gt;
&lt;br /&gt;
If the device implements hardware flow control, it will not send if our RTS (and probably DTR) signals are low. So, at least we will want to set these two bits.&lt;br /&gt;
&lt;br /&gt;
The RTS and DTR lines are located on I/O register 0xBA (186).&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== Handling Communication Errors ==&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== I/O Map ==&lt;br /&gt;
&lt;br /&gt;
Here, for reference, is the serial I/O map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Direction&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Port&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 7&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;CTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DSR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 5&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DTR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 6&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nb: sense on DSR, CTS seem to be inverted. So CTS ==0 means that it is OK to transmit. A &#039;1&#039; means the device is flowing the Model T off.&lt;br /&gt;
&lt;br /&gt;
nb: Port &amp;lt;code&amp;gt;$BA&amp;lt;/code&amp;gt; is called &amp;quot;Port B&amp;quot; in the Model 100 Technical Reference. It has other functions than UART control, including the critical Power On/Off line. See [[Model 100 Port B]] for the breakdown.&lt;br /&gt;
&lt;br /&gt;
Direction indicates both data flow, and whether to use an &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; instruction to read/write to the given pin.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_200_serial_interface&amp;diff=1224</id>
		<title>Model 200 serial interface</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_200_serial_interface&amp;diff=1224"/>
		<updated>2009-03-22T21:17:09Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The BASIC ROM provides access to the serial port. BASIC ROM support is well documented elsewhere. This article covers direct use of the [[80C52]] on the Tandy 200.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Before the serial port can be used, it must be configured both for serial word format (data bits, stop bits, and parity) and baud rate.&lt;br /&gt;
&lt;br /&gt;
=== Select RS232 Port ===&lt;br /&gt;
&lt;br /&gt;
At any given time, either the internal modem or the external RS232 connector may be connected to the UART. This is controllable through software.&lt;br /&gt;
&lt;br /&gt;
For RS232 access, 8155 port B &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt;, bit #3 must be set to 0.&lt;br /&gt;
&lt;br /&gt;
For Modem access, 8155 port B &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt;, bit #3 must be set to 1.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt; is shared with other functions, including power control.&lt;br /&gt;
&lt;br /&gt;
=== Serial Word Format ===&lt;br /&gt;
&lt;br /&gt;
Port &amp;lt;code&amp;gt;$C0&amp;lt;/code&amp;gt; controls the mode configuration, bit configuration and command register.&lt;br /&gt;
&lt;br /&gt;
Mode configuration&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0-1 ||	Baud rate devisor		|| 00=*&amp;lt;br&amp;gt; 01=1x&amp;lt;br&amp;gt; 10=16x&amp;lt;br&amp;gt; 11=64x&lt;br /&gt;
|-&lt;br /&gt;
|2-3 ||	Character Length Select		|| Bits:&amp;lt;br/&amp;gt;00 &amp;amp;rarr; 5&amp;lt;br/&amp;gt;01 &amp;amp;rarr; 6&amp;lt;br/&amp;gt;10 &amp;amp;rarr;  7&amp;lt;br/&amp;gt;11 &amp;amp;rarr; 8&lt;br /&gt;
|-&lt;br /&gt;
|4-5 ||	Parity Inhibit			|| 00 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;01 &amp;amp;rarr; Odd parity&amp;lt;br&amp;gt;10 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;11 &amp;amp;rarr; Even parity&lt;br /&gt;
|-&lt;br /&gt;
|6-7 ||	Stop Bits			|| 00 &amp;amp;rarr; Inhibit&amp;lt;br&amp;gt;01 &amp;amp;rarr; 1&amp;lt;br&amp;gt;10 &amp;amp;rarr; 1.5&amp;lt;br&amp;gt;11 &amp;amp;rarr; 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit configuration&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0-1 ||	Not used			|| 00&lt;br /&gt;
|-&lt;br /&gt;
|2-3 ||	Character Length Select		|| Bits:&amp;lt;br/&amp;gt;00 &amp;amp;rarr; 5&amp;lt;br/&amp;gt;01 &amp;amp;rarr; 6&amp;lt;br/&amp;gt;10 &amp;amp;rarr;  7&amp;lt;br/&amp;gt;11 &amp;amp;rarr; 8&lt;br /&gt;
|-&lt;br /&gt;
|4-5 ||	Parity Inhibit			|| 00 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;01 &amp;amp;rarr; Odd parity&amp;lt;br&amp;gt;10 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;11 &amp;amp;rarr; Even parity&lt;br /&gt;
|-&lt;br /&gt;
|6   ||	Sync mode			|| 0 &amp;amp;rarr; Internal&amp;lt;br&amp;gt;1 &amp;amp;rarr; External&lt;br /&gt;
|-&lt;br /&gt;
|7   ||	No. of Sync chars		|| 0 &amp;amp;rarr; 2 Bytes&amp;lt;br&amp;gt;1 &amp;amp;rarr; 1 Byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Command register&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0   ||	/TXE				|| 0 &amp;amp;rarr; Disable&amp;lt;br&amp;gt; 1 &amp;amp;rarr; Enable&lt;br /&gt;
|-&lt;br /&gt;
|1   ||	DTR				|| 0 &amp;amp;rarr; 1&amp;lt;br/&amp;gt;1 &amp;amp;rarr; 0&lt;br /&gt;
|-&lt;br /&gt;
|2   ||	RXE				|| 0 &amp;amp;rarr; 0&amp;lt;br/&amp;gt;1 &amp;amp;rarr; 1&lt;br /&gt;
|-&lt;br /&gt;
|3   ||	SBRK				|| 0 &amp;amp;rarr; Normal Operation&amp;lt;br&amp;gt; 1 &amp;amp;rarr; Send BRK char&lt;br /&gt;
|-&lt;br /&gt;
|4   ||	ER				|| 0 &amp;amp;rarr; Normal Operation&amp;lt;br&amp;gt; 1 &amp;amp;rarr; Reset error flag&lt;br /&gt;
|-&lt;br /&gt;
|5   ||	/RTS				|| 0 &amp;amp;rarr; 1&amp;lt;br/&amp;gt;1 &amp;amp;rarr; 0&lt;br /&gt;
|-&lt;br /&gt;
|6   ||	IR				|| 0 &amp;amp;rarr; Normal Operation&amp;lt;br/&amp;gt;1 &amp;amp;rarr; Internal Reset&lt;br /&gt;
|-&lt;br /&gt;
|7   ||	EH				|| 0 &amp;amp;rarr; Normal Operation&amp;lt;br&amp;gt; 1 &amp;amp;rarr; *&lt;br /&gt;
|}&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
--uptohere--&lt;br /&gt;
CPU selection of baud rate is accomplished by loading a divisor into the PIO register through output ports &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B4&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The baud rate selection must be committed by writing &amp;lt;code&amp;gt;$C3&amp;lt;/code&amp;gt; to register &amp;lt;code&amp;gt;$B8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here is a table of some baud rates that may be of interest:&lt;br /&gt;
&lt;br /&gt;
{|  border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
| Baud Rate	|| PIO&amp;lt;br/&amp;gt;Divisor	|| Port &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt;	|| Port &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 75		|| 2048			|| 72				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 110		|| 1396			|| 69				|| 116&lt;br /&gt;
|-&lt;br /&gt;
| 300		|| 512			|| 66				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 600		|| 256			|| 65				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1200		|| 128			|| 64				|| 128&lt;br /&gt;
|-&lt;br /&gt;
| 2400		|| 64			|| 64				|| 64&lt;br /&gt;
|-&lt;br /&gt;
| 4800		|| 32			|| 64				|| 32&lt;br /&gt;
|-&lt;br /&gt;
| 9600		|| 16			|| 64				|| 16&lt;br /&gt;
|-&lt;br /&gt;
| 19200		|| 8			|| 64				|| 8&lt;br /&gt;
|-&lt;br /&gt;
| 38400		|| 4			|| 64				|| 4&lt;br /&gt;
|-&lt;br /&gt;
| 76800		|| 4			|| 64				|| 2&lt;br /&gt;
|-&lt;br /&gt;
| 153600	|| 4			|| 64				|| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I include 76800 and 153600 since they are the highest baud rates that the M100 is capable of. Certainly they are usable for communicating with another Model 100. However since they are not a &amp;quot;known&amp;quot; baud rate, they are less useful for communicating with PCs or other devices.&lt;br /&gt;
&lt;br /&gt;
That said, you may be able to find a device or bitbang GPIO lines to communicate at these rates. I have read that some USB-&amp;gt;Serial adapters are capable of communicating at many more baud rates than the typical built-in serial ports, so there is definitely room for further exploration.&lt;br /&gt;
&lt;br /&gt;
Here is a practical example of using 38400bps using only BASIC code. This program dumps all RAM contents to the serial port.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 1	DEFINTA-Z:&lt;br /&gt;
	OPEN&amp;quot;COM:98N1D&amp;quot;FOROUTPUTAS1:&lt;br /&gt;
	D$=&amp;quot;&amp;quot;:&lt;br /&gt;
	A=FRE(&amp;quot;0&amp;quot;):&lt;br /&gt;
	L=VARPTR(D$)+1:&lt;br /&gt;
	M=L+1:&lt;br /&gt;
	POKEL-1,128:&lt;br /&gt;
	OUT180,4:&lt;br /&gt;
	OUT181,64:&lt;br /&gt;
	OUT184,195:&lt;br /&gt;
	FORI=0TO255:&lt;br /&gt;
		POKEM,128+I/2:&lt;br /&gt;
		POKEL,(IMOD2)*128:&lt;br /&gt;
		PRINT#1,D$;:&lt;br /&gt;
	NEXT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately this BASIC code does not transmit the 32K of data any faster than the 19200bps code. Both take about 33 seconds to transmit the image.&lt;br /&gt;
&lt;br /&gt;
So, here&#039;s an assembly language version of the same program. It transfers your Model 100&#039;s 32K RAM to a serial connection in about 8.5 seconds!&lt;br /&gt;
&lt;br /&gt;
Note that this code obeys the &amp;quot;clear to send&amp;quot; signal from the PC, so given hardware flow control enabled and properly configured on the PC, we should not overrun the remote UART.&lt;br /&gt;
&lt;br /&gt;
Not that if the PC is busy doing something else (like printing to the screen) it might flow control us, and you may not achieve the maximum speed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		.org	64704&lt;br /&gt;
&lt;br /&gt;
		; select RS232 port&lt;br /&gt;
		MVI	A, $25&lt;br /&gt;
		OUT	$BA&lt;br /&gt;
&lt;br /&gt;
		; set up 8N1&lt;br /&gt;
		MVI	A, 28&lt;br /&gt;
		OUT	$D8&lt;br /&gt;
&lt;br /&gt;
		; set up 38400 bps&lt;br /&gt;
		MVI	A, 64&lt;br /&gt;
		OUT	$BD&lt;br /&gt;
		MVI	A, 4&lt;br /&gt;
		OUT	$BC&lt;br /&gt;
		MVI	A, $C3&lt;br /&gt;
		OUT	$B8&lt;br /&gt;
&lt;br /&gt;
		LXI	H,32768&lt;br /&gt;
&lt;br /&gt;
WAITEMPTY:	IN	$D8&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
	&lt;br /&gt;
		MOV	A,M&lt;br /&gt;
		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
		INX	H&lt;br /&gt;
		MOV	A,H&lt;br /&gt;
		ORA	L&lt;br /&gt;
&lt;br /&gt;
		JNZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
		RET&lt;br /&gt;
&lt;br /&gt;
		.END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data Transmission ==&lt;br /&gt;
&lt;br /&gt;
Once configured, sending a character is simply&lt;br /&gt;
&lt;br /&gt;
 		MVI	&#039;A&#039;&lt;br /&gt;
 		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
or, in BASIC,&lt;br /&gt;
&lt;br /&gt;
 OUT 200,ASC(&amp;quot;A&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
In the UART, there is room for two characters: the character currently be transmitted, and the next one. This permits you to ensure there is always one character waiting in the wings.&lt;br /&gt;
&lt;br /&gt;
You should never overflow the transmission buffers. Either do some other work during the &amp;quot;downtime&amp;quot; and/or wait until there is room by polling bit 4 (0x10) of register $D8. The code that follows just does a &amp;quot;busy wait.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 WAITEMPTY:	IN	$D8&lt;br /&gt;
 		ANI	$10&lt;br /&gt;
 		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
When deciding whether the other device is ready to receive you should also consider the Clear To Send (CTS) flow control line described later in this document.&lt;br /&gt;
&lt;br /&gt;
== Data Reception ==&lt;br /&gt;
&lt;br /&gt;
=== BASIC ROM Interrupt 6.5 Handling ===&lt;br /&gt;
&lt;br /&gt;
Whenever the UART receives another character, Interrupt 6.5 is signalled. Then, if interrupts are enabled, the CPU stops what it is doing and CALLs location 0x0034 in the BASIC ROM. This code disables further interrupts and jumps to the location 0x6DAC.&lt;br /&gt;
&lt;br /&gt;
The ISR then jumps to vector 0xFE5C (0xF5FC?) in RAM. Normally this is just a return instruction, but you could hook the interrupt here. [ stack manipulation to avoid/ or include default processing + re-enable interrupts? - TBD ]&lt;br /&gt;
&lt;br /&gt;
=== Polling Interrupt 6.5 ===&lt;br /&gt;
&lt;br /&gt;
Accepting the BASIC ROM&#039;s handling imposes significant overhead. With each interrupt, the instruction pointer must be placed on the stack and a jump performed at minimum. If the BASIC ROM (as opposed to an Option ROM) is switched in, then you will have the overhead of disabling interrupts, a jump to the DR vector, a return instruction, and then the default processing of reading and enqueing the new character. All that, and at this point no useful work has been performed other than to relieve the UART. &lt;br /&gt;
&lt;br /&gt;
For maximum efficiency you may wish to poll Interrupt 6.5 pin rather than accept the overhead of an interrupt. This is made possible by the 8085&#039;s SIM and RIM instructions.&lt;br /&gt;
&lt;br /&gt;
Using the SIM instruction, you can set the interrupt mask such that UART DR (data ready), bit 1, will not trigger an interrupt. Then, you can poll this bit using the RIM instruction ANDing with 0x20 to see if DR is set.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you could disable interrupt processing altogether during your polled routine, but still use RIM to poll. This has the disadvantage of disabling the background ISR. But to achieve higher baud rates, you may not want the background ISR running anyway.&lt;br /&gt;
&lt;br /&gt;
== Flow Control ==&lt;br /&gt;
&lt;br /&gt;
The Model T has full support in hardware for the CTS and RTS flow control lines. In the BASIC ROM, however, it is not implemented. Instead the BASIC ROM relies on slow, kludgy XON/XOFF character escapes. This makes it difficult to transmit or receive binary files since the XON/XOFF characters are reserved for flow control.&lt;br /&gt;
&lt;br /&gt;
Since we are discussing direct control of the UART, we can do better and implement full flow control.&lt;br /&gt;
&lt;br /&gt;
=== Detect Clear to Send (CTS) ===&lt;br /&gt;
&lt;br /&gt;
The CTS line is an input to the Model 100. It indicates whether the device attached to the serial port (or the remote equipment behind it) has room to accept new characters. The device can &amp;quot;flow off&amp;quot; the Model T when its receive buffers are full.&lt;br /&gt;
&lt;br /&gt;
Implementing CTS is easy. The following code performs a busy wait on CTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CTS line is read from bit #5 of I/O address 0xBB. Note that it is inverted; if it is 0, the device is signalling &amp;quot;clear to send.&amp;quot; If 1, the device is attempting to flow us off from transmitting.&lt;br /&gt;
&lt;br /&gt;
=== Request Peer to Send (RTS) ===&lt;br /&gt;
&lt;br /&gt;
The RTS line is an output from the Model 100 to the device connected on the serial port. It is a signal  &amp;quot;requesting&amp;quot; the device to send (or not to send). From the other point of view, the device should transmit if and only if RTS is high. Note that from the device perspective, it sees our RTS as its CTS.&lt;br /&gt;
&lt;br /&gt;
If the device implements hardware flow control, it will not send if our RTS (and probably DTR) signals are low. So, at least we will want to set these two bits.&lt;br /&gt;
&lt;br /&gt;
The RTS and DTR lines are located on I/O register 0xBA (186).&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== Handling Communication Errors ==&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== I/O Map ==&lt;br /&gt;
&lt;br /&gt;
Here, for reference, is the serial I/O map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Direction&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Port&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 7&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;CTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DSR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 5&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DTR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 6&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nb: sense on DSR, CTS seem to be inverted. So CTS ==0 means that it is OK to transmit. A &#039;1&#039; means the device is flowing the Model T off.&lt;br /&gt;
&lt;br /&gt;
nb: Port &amp;lt;code&amp;gt;$BA&amp;lt;/code&amp;gt; is called &amp;quot;Port B&amp;quot; in the Model 100 Technical Reference. It has other functions than UART control, including the critical Power On/Off line. See [[Model 100 Port B]] for the breakdown.&lt;br /&gt;
&lt;br /&gt;
Direction indicates both data flow, and whether to use an &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; instruction to read/write to the given pin.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_200_serial_interface&amp;diff=1223</id>
		<title>Model 200 serial interface</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_200_serial_interface&amp;diff=1223"/>
		<updated>2009-03-22T17:07:39Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The BASIC ROM provides access to the serial port. BASIC ROM support is well documented elsewhere. This article covers direct use of the [[80C52]] on the Tandy 200.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Before the serial port can be used, it must be configured both for serial word format (data bits, stop bits, and parity) and baud rate.&lt;br /&gt;
&lt;br /&gt;
=== Select RS232 Port ===&lt;br /&gt;
&lt;br /&gt;
At any given time, either the internal modem or the external RS232 connector may be connected to the UART. This is controllable through software.&lt;br /&gt;
&lt;br /&gt;
For RS232 access, 8155 port B &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt;, bit #3 must be set to 0.&lt;br /&gt;
&lt;br /&gt;
For Modem access, 8155 port B &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt;, bit #3 must be set to 1.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;$B2&amp;lt;/code&amp;gt; is shared with other functions, including power control.&lt;br /&gt;
&lt;br /&gt;
=== Serial Word Format ===&lt;br /&gt;
&lt;br /&gt;
Port &amp;lt;code&amp;gt;$C0&amp;lt;/code&amp;gt; controls the serial word format.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0-1 ||	Baud rate devisor		|| 00=*&amp;lt;br&amp;gt; 01=1x&amp;lt;br&amp;gt; 10=16x&amp;lt;br&amp;gt; 11=64x&lt;br /&gt;
|-&lt;br /&gt;
|2-3 ||	Character Length Select		|| Bits:&amp;lt;br/&amp;gt;00 &amp;amp;rarr; 5&amp;lt;br/&amp;gt;01 &amp;amp;rarr; 6&amp;lt;br/&amp;gt;10 &amp;amp;rarr;  7&amp;lt;br/&amp;gt;11 &amp;amp;rarr; 8&lt;br /&gt;
|-&lt;br /&gt;
|4-5 ||	Parity Inhibit			|| 00 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;01 &amp;amp;rarr; Odd parity&amp;lt;br&amp;gt;10 &amp;amp;rarr; No Parity&amp;lt;br/&amp;gt;11 &amp;amp;rarr; Even parity&lt;br /&gt;
|-&lt;br /&gt;
|6-7 ||	Character Length Select		|| Bits:&amp;lt;br/&amp;gt;00 &amp;amp;rarr; 5&amp;lt;br/&amp;gt;01 &amp;amp;rarr; 6&amp;lt;br/&amp;gt;10 &amp;amp;rarr;  7&amp;lt;br/&amp;gt;11 &amp;amp;rarr; 8&lt;br /&gt;
|-&lt;br /&gt;
|7-5 ||	Stop Bits			|| 00 &amp;amp;rarr; Inhibit&amp;lt;br&amp;gt;01 &amp;amp;rarr; 1&amp;lt;br&amp;gt;10 &amp;amp;rarr; 1.5&amp;lt;br&amp;gt;11 &amp;amp;rarr; 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
--uptohere--&lt;br /&gt;
CPU selection of baud rate is accomplished by loading a divisor into the PIO register through output ports &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B4&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The baud rate selection must be committed by writing &amp;lt;code&amp;gt;$C3&amp;lt;/code&amp;gt; to register &amp;lt;code&amp;gt;$B8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here is a table of some baud rates that may be of interest:&lt;br /&gt;
&lt;br /&gt;
{|  border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
| Baud Rate	|| PIO&amp;lt;br/&amp;gt;Divisor	|| Port &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt;	|| Port &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 75		|| 2048			|| 72				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 110		|| 1396			|| 69				|| 116&lt;br /&gt;
|-&lt;br /&gt;
| 300		|| 512			|| 66				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 600		|| 256			|| 65				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1200		|| 128			|| 64				|| 128&lt;br /&gt;
|-&lt;br /&gt;
| 2400		|| 64			|| 64				|| 64&lt;br /&gt;
|-&lt;br /&gt;
| 4800		|| 32			|| 64				|| 32&lt;br /&gt;
|-&lt;br /&gt;
| 9600		|| 16			|| 64				|| 16&lt;br /&gt;
|-&lt;br /&gt;
| 19200		|| 8			|| 64				|| 8&lt;br /&gt;
|-&lt;br /&gt;
| 38400		|| 4			|| 64				|| 4&lt;br /&gt;
|-&lt;br /&gt;
| 76800		|| 4			|| 64				|| 2&lt;br /&gt;
|-&lt;br /&gt;
| 153600	|| 4			|| 64				|| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I include 76800 and 153600 since they are the highest baud rates that the M100 is capable of. Certainly they are usable for communicating with another Model 100. However since they are not a &amp;quot;known&amp;quot; baud rate, they are less useful for communicating with PCs or other devices.&lt;br /&gt;
&lt;br /&gt;
That said, you may be able to find a device or bitbang GPIO lines to communicate at these rates. I have read that some USB-&amp;gt;Serial adapters are capable of communicating at many more baud rates than the typical built-in serial ports, so there is definitely room for further exploration.&lt;br /&gt;
&lt;br /&gt;
Here is a practical example of using 38400bps using only BASIC code. This program dumps all RAM contents to the serial port.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 1	DEFINTA-Z:&lt;br /&gt;
	OPEN&amp;quot;COM:98N1D&amp;quot;FOROUTPUTAS1:&lt;br /&gt;
	D$=&amp;quot;&amp;quot;:&lt;br /&gt;
	A=FRE(&amp;quot;0&amp;quot;):&lt;br /&gt;
	L=VARPTR(D$)+1:&lt;br /&gt;
	M=L+1:&lt;br /&gt;
	POKEL-1,128:&lt;br /&gt;
	OUT180,4:&lt;br /&gt;
	OUT181,64:&lt;br /&gt;
	OUT184,195:&lt;br /&gt;
	FORI=0TO255:&lt;br /&gt;
		POKEM,128+I/2:&lt;br /&gt;
		POKEL,(IMOD2)*128:&lt;br /&gt;
		PRINT#1,D$;:&lt;br /&gt;
	NEXT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately this BASIC code does not transmit the 32K of data any faster than the 19200bps code. Both take about 33 seconds to transmit the image.&lt;br /&gt;
&lt;br /&gt;
So, here&#039;s an assembly language version of the same program. It transfers your Model 100&#039;s 32K RAM to a serial connection in about 8.5 seconds!&lt;br /&gt;
&lt;br /&gt;
Note that this code obeys the &amp;quot;clear to send&amp;quot; signal from the PC, so given hardware flow control enabled and properly configured on the PC, we should not overrun the remote UART.&lt;br /&gt;
&lt;br /&gt;
Not that if the PC is busy doing something else (like printing to the screen) it might flow control us, and you may not achieve the maximum speed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		.org	64704&lt;br /&gt;
&lt;br /&gt;
		; select RS232 port&lt;br /&gt;
		MVI	A, $25&lt;br /&gt;
		OUT	$BA&lt;br /&gt;
&lt;br /&gt;
		; set up 8N1&lt;br /&gt;
		MVI	A, 28&lt;br /&gt;
		OUT	$D8&lt;br /&gt;
&lt;br /&gt;
		; set up 38400 bps&lt;br /&gt;
		MVI	A, 64&lt;br /&gt;
		OUT	$BD&lt;br /&gt;
		MVI	A, 4&lt;br /&gt;
		OUT	$BC&lt;br /&gt;
		MVI	A, $C3&lt;br /&gt;
		OUT	$B8&lt;br /&gt;
&lt;br /&gt;
		LXI	H,32768&lt;br /&gt;
&lt;br /&gt;
WAITEMPTY:	IN	$D8&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
	&lt;br /&gt;
		MOV	A,M&lt;br /&gt;
		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
		INX	H&lt;br /&gt;
		MOV	A,H&lt;br /&gt;
		ORA	L&lt;br /&gt;
&lt;br /&gt;
		JNZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
		RET&lt;br /&gt;
&lt;br /&gt;
		.END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data Transmission ==&lt;br /&gt;
&lt;br /&gt;
Once configured, sending a character is simply&lt;br /&gt;
&lt;br /&gt;
 		MVI	&#039;A&#039;&lt;br /&gt;
 		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
or, in BASIC,&lt;br /&gt;
&lt;br /&gt;
 OUT 200,ASC(&amp;quot;A&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
In the UART, there is room for two characters: the character currently be transmitted, and the next one. This permits you to ensure there is always one character waiting in the wings.&lt;br /&gt;
&lt;br /&gt;
You should never overflow the transmission buffers. Either do some other work during the &amp;quot;downtime&amp;quot; and/or wait until there is room by polling bit 4 (0x10) of register $D8. The code that follows just does a &amp;quot;busy wait.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 WAITEMPTY:	IN	$D8&lt;br /&gt;
 		ANI	$10&lt;br /&gt;
 		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
When deciding whether the other device is ready to receive you should also consider the Clear To Send (CTS) flow control line described later in this document.&lt;br /&gt;
&lt;br /&gt;
== Data Reception ==&lt;br /&gt;
&lt;br /&gt;
=== BASIC ROM Interrupt 6.5 Handling ===&lt;br /&gt;
&lt;br /&gt;
Whenever the UART receives another character, Interrupt 6.5 is signalled. Then, if interrupts are enabled, the CPU stops what it is doing and CALLs location 0x0034 in the BASIC ROM. This code disables further interrupts and jumps to the location 0x6DAC.&lt;br /&gt;
&lt;br /&gt;
The ISR then jumps to vector 0xFE5C (0xF5FC?) in RAM. Normally this is just a return instruction, but you could hook the interrupt here. [ stack manipulation to avoid/ or include default processing + re-enable interrupts? - TBD ]&lt;br /&gt;
&lt;br /&gt;
=== Polling Interrupt 6.5 ===&lt;br /&gt;
&lt;br /&gt;
Accepting the BASIC ROM&#039;s handling imposes significant overhead. With each interrupt, the instruction pointer must be placed on the stack and a jump performed at minimum. If the BASIC ROM (as opposed to an Option ROM) is switched in, then you will have the overhead of disabling interrupts, a jump to the DR vector, a return instruction, and then the default processing of reading and enqueing the new character. All that, and at this point no useful work has been performed other than to relieve the UART. &lt;br /&gt;
&lt;br /&gt;
For maximum efficiency you may wish to poll Interrupt 6.5 pin rather than accept the overhead of an interrupt. This is made possible by the 8085&#039;s SIM and RIM instructions.&lt;br /&gt;
&lt;br /&gt;
Using the SIM instruction, you can set the interrupt mask such that UART DR (data ready), bit 1, will not trigger an interrupt. Then, you can poll this bit using the RIM instruction ANDing with 0x20 to see if DR is set.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you could disable interrupt processing altogether during your polled routine, but still use RIM to poll. This has the disadvantage of disabling the background ISR. But to achieve higher baud rates, you may not want the background ISR running anyway.&lt;br /&gt;
&lt;br /&gt;
== Flow Control ==&lt;br /&gt;
&lt;br /&gt;
The Model T has full support in hardware for the CTS and RTS flow control lines. In the BASIC ROM, however, it is not implemented. Instead the BASIC ROM relies on slow, kludgy XON/XOFF character escapes. This makes it difficult to transmit or receive binary files since the XON/XOFF characters are reserved for flow control.&lt;br /&gt;
&lt;br /&gt;
Since we are discussing direct control of the UART, we can do better and implement full flow control.&lt;br /&gt;
&lt;br /&gt;
=== Detect Clear to Send (CTS) ===&lt;br /&gt;
&lt;br /&gt;
The CTS line is an input to the Model 100. It indicates whether the device attached to the serial port (or the remote equipment behind it) has room to accept new characters. The device can &amp;quot;flow off&amp;quot; the Model T when its receive buffers are full.&lt;br /&gt;
&lt;br /&gt;
Implementing CTS is easy. The following code performs a busy wait on CTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CTS line is read from bit #5 of I/O address 0xBB. Note that it is inverted; if it is 0, the device is signalling &amp;quot;clear to send.&amp;quot; If 1, the device is attempting to flow us off from transmitting.&lt;br /&gt;
&lt;br /&gt;
=== Request Peer to Send (RTS) ===&lt;br /&gt;
&lt;br /&gt;
The RTS line is an output from the Model 100 to the device connected on the serial port. It is a signal  &amp;quot;requesting&amp;quot; the device to send (or not to send). From the other point of view, the device should transmit if and only if RTS is high. Note that from the device perspective, it sees our RTS as its CTS.&lt;br /&gt;
&lt;br /&gt;
If the device implements hardware flow control, it will not send if our RTS (and probably DTR) signals are low. So, at least we will want to set these two bits.&lt;br /&gt;
&lt;br /&gt;
The RTS and DTR lines are located on I/O register 0xBA (186).&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== Handling Communication Errors ==&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== I/O Map ==&lt;br /&gt;
&lt;br /&gt;
Here, for reference, is the serial I/O map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Direction&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Port&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 7&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;CTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DSR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 5&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DTR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 6&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nb: sense on DSR, CTS seem to be inverted. So CTS ==0 means that it is OK to transmit. A &#039;1&#039; means the device is flowing the Model T off.&lt;br /&gt;
&lt;br /&gt;
nb: Port &amp;lt;code&amp;gt;$BA&amp;lt;/code&amp;gt; is called &amp;quot;Port B&amp;quot; in the Model 100 Technical Reference. It has other functions than UART control, including the critical Power On/Off line. See [[Model 100 Port B]] for the breakdown.&lt;br /&gt;
&lt;br /&gt;
Direction indicates both data flow, and whether to use an &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; instruction to read/write to the given pin.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_200_serial_interface&amp;diff=1222</id>
		<title>Model 200 serial interface</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_200_serial_interface&amp;diff=1222"/>
		<updated>2009-03-22T16:13:42Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: New page: 82c51&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;82c51&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=MTHD&amp;diff=1058</id>
		<title>MTHD</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=MTHD&amp;diff=1058"/>
		<updated>2009-02-22T17:48:51Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: New page: This project it still under development.  The basic idea for this project is to add a harddrive via the System bus on the 100/102/200&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project it still under development.&lt;br /&gt;
&lt;br /&gt;
The basic idea for this project is to add a harddrive via the [[System bus]] on the 100/102/200&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_DocGarden&amp;diff=1057</id>
		<title>Model T DocGarden</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_DocGarden&amp;diff=1057"/>
		<updated>2009-02-22T17:45:49Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These pages are devoted to the Model T:&lt;br /&gt;
&lt;br /&gt;
TRS-80 Model 100, Tandy Model 102, KC-85, NEC 8201A, NEC 8300, Olivetti M10, Tandy Model 200, and the WP-2&lt;br /&gt;
&lt;br /&gt;
== Classic Article Repubs ==&lt;br /&gt;
&lt;br /&gt;
We hope to republish one or more articles from the Golden Era of the Model T every month:&lt;br /&gt;
&lt;br /&gt;
[[:Category:Model 100 Classics]]&lt;br /&gt;
&lt;br /&gt;
== One-Liners ==&lt;br /&gt;
&lt;br /&gt;
This is a collection of Microsoft BASIC programs that&lt;br /&gt;
* Do something interesting or useful&lt;br /&gt;
* With only a single line of code&lt;br /&gt;
&lt;br /&gt;
One-liners are bite-sized computer programs on a human scale. You are encouraged to type them in manually (by hand) and study their operation.&lt;br /&gt;
&lt;br /&gt;
[[Model 100/102 Compatible One-Liners]]&lt;br /&gt;
&lt;br /&gt;
== Tandy Disk Drive and Emulators ==&lt;br /&gt;
&lt;br /&gt;
TPDD emulators, in concert with a compatible disk clients like&lt;br /&gt;
TS-DOS, TEENY, POWR-DOS, FLOPPY.CO, the Booster Pak, or the &lt;br /&gt;
WP-2 built-in Diskette client are the most &amp;quot;advanced&amp;quot; way to&lt;br /&gt;
accurately and quickly transfer all file types including binary&lt;br /&gt;
files to and from your Model T laptop. There are different&lt;br /&gt;
options for the server side on modern operating systems and&lt;br /&gt;
devices:&lt;br /&gt;
&lt;br /&gt;
=== Servers ===&lt;br /&gt;
&lt;br /&gt;
The [[:Category:TPDD Service|TPDD Services]] implement the &amp;quot;disk drive&amp;quot; end of the TPDD protocol.&lt;br /&gt;
&lt;br /&gt;
=== Clients ===&lt;br /&gt;
&lt;br /&gt;
[[:Category:TPDD Client|TPDD Clients]] are software that runs on your Model T laptop. The communicate with a disk drive or other [[:Category:TPDD Service|TPDD Service]] to save and load files.&lt;br /&gt;
&lt;br /&gt;
=== Real TPDD and TPDD-2 ===&lt;br /&gt;
&lt;br /&gt;
[[Differences]] between TPDD-1 and TPDD-2&lt;br /&gt;
&lt;br /&gt;
== Simple Text File Transfer (No Client) ==&lt;br /&gt;
&lt;br /&gt;
You can use any &amp;quot;terminal program&amp;quot; to transfer text files to&lt;br /&gt;
and from your Model T laptop. Here are some tutorials:&lt;br /&gt;
&lt;br /&gt;
[[Text File Transfer using Hyperterminal]]&lt;br /&gt;
&lt;br /&gt;
[http://web.mac.com/lorddoomicus/Doomd/Blog/Entries/2006/9/10_Connecting_a_Tandy_102_Computer_to_a_Mac.html Text File Transfer to Mac using Z-Term]&lt;br /&gt;
&lt;br /&gt;
== File Storage using MP3 Player ==&lt;br /&gt;
&lt;br /&gt;
[[File storage with mp3 player]]&lt;br /&gt;
&lt;br /&gt;
== Model T Software ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualT]] Model 100/102, T200, NEC 8201A, M10 emulator&lt;br /&gt;
&lt;br /&gt;
[[mtcpm]] CP/M for the Tandy 100/102/200&lt;br /&gt;
&lt;br /&gt;
[[RAM4TH]]&lt;br /&gt;
&lt;br /&gt;
== Model T Hardware Hacks and Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
[[Splitting the Model 100/102/200 case]]&lt;br /&gt;
&lt;br /&gt;
[[Recovering an Unresponsive Laptop]]&lt;br /&gt;
&lt;br /&gt;
[[International Keyboard Support]]&lt;br /&gt;
&lt;br /&gt;
[[Repairing Problem Keys]]&lt;br /&gt;
&lt;br /&gt;
== Model T Hardware Projects ==&lt;br /&gt;
&lt;br /&gt;
[[Remem]] is the ultimate Model T memory upgrade&lt;br /&gt;
&lt;br /&gt;
:[http://lists.bitchin100.com/listinfo.cgi/remem-users-bitchin100.com remem-users mailing list] This is a support list for remem users.&lt;br /&gt;
:[[Remem Software HOWTO&#039;s]]&lt;br /&gt;
&lt;br /&gt;
[[REX]] is a flash OptROM emulator/switcher&lt;br /&gt;
&lt;br /&gt;
[[REX2]] is a upcoming flash OptROM emulator/switcher with support for a 64K all-RAM mode. This permits running with a patched main ROM, or the upcoming [[mtcpm]] (Model T CP/M)&lt;br /&gt;
&lt;br /&gt;
[[NADSBox]] is a stand-alone TPDD emulation device that uses SD cards&lt;br /&gt;
&lt;br /&gt;
[[Mikrokolor]] Is a Color Graphics interface for the Model 100. Allows for 40x80 character graphics/text&lt;br /&gt;
&lt;br /&gt;
[[MTHD]] Is a how to add a Harddrive to your Model T&lt;br /&gt;
&lt;br /&gt;
== Model T Developer Reference ==&lt;br /&gt;
&lt;br /&gt;
[[:Category:Model T Developer Reference]], articles on Model T programming topics&lt;br /&gt;
&lt;br /&gt;
== Other Topics ==&lt;br /&gt;
&lt;br /&gt;
== Model T Links ==&lt;br /&gt;
&lt;br /&gt;
[http://club100.org Rick Hanson&#039;s Club 100]&lt;br /&gt;
&lt;br /&gt;
[http://www.istop.com/%7Esadolph/remem_home.html Steve Adolph&#039;s Remem Site]&lt;br /&gt;
&lt;br /&gt;
[http://sliderule.mraiow.com/wiki/Portable_Computer_Index#T Chris Osburn&#039;s Calculating Instruments]&lt;br /&gt;
&lt;br /&gt;
[http://kenpettit.com/projects.html Ken Pettit&#039;s Model T Projects]&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_System_bus&amp;diff=1037</id>
		<title>Model T System bus</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_System_bus&amp;diff=1037"/>
		<updated>2009-02-21T18:25:10Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The system bus differs on the different models but are very close electrical wise.&lt;br /&gt;
&lt;br /&gt;
The M100 has a 40-pin DIP socket while M102 and T200 have a 20x2 (2.54mm/0.1&amp;quot;) pin array.&lt;br /&gt;
&lt;br /&gt;
The differnet pin arangements cause the pins of the 100 to be numbered differently to the 102/200.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;100&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;102&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;200&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;VDD&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;VDD&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;VDD&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;VDD&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;VDD&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD0&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD6&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;7&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A8&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;8&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A10&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A12&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;10&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A14&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD5&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;11&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD6&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD6&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;12&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/RD&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD7&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD7&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;13&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;IO/M&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A8&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A8&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;14&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ALE&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A9&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A9&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;15&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;CLK&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A10&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A10&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;16&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/A&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A11&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A11&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;17&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;INTR&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A12&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A12&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;18&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A13&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A13&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;19&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;RAMRST&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A14&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A14&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;20&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A15&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A15&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;21&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;22&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;23&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/RD&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/RD&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;24&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;INTA&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/WR&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/WR&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;25&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/RST&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;IO/M&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;IO/M&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;26&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/YO&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;S0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;S0&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;27&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;S1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/ALE&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ALE&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;28&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;S0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;S1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;S1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;29&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/WR&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;CLK&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;CLK&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;30&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Y0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/IOCONT&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;31&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A15&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/A&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;E&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;32&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A13&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/RESET&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;RESET&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;33&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A11&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;INTR&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;INTR&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;34&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A9&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;INTA&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/INTA&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;35&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;DA7&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;36&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;DA5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;37&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;DA3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/RAMRST&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;/RAMRST&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;38&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;DA1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;39&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GND&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;40&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;VCC&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;NC&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_System_bus&amp;diff=1036</id>
		<title>Model T System bus</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_System_bus&amp;diff=1036"/>
		<updated>2009-02-21T17:36:46Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: New page: The system bus differs on the different models but are very close on electrical signals  &amp;lt;table&amp;gt; &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The system bus differs on the different models but are very close on electrical signals&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=MTCPM_Project_HOWTOs&amp;diff=1026</id>
		<title>MTCPM Project HOWTOs</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=MTCPM_Project_HOWTOs&amp;diff=1026"/>
		<updated>2009-02-20T19:48:47Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a list of how to set up all ram mode.&lt;br /&gt;
&lt;br /&gt;
1)  start VT 1.3&lt;br /&gt;
&lt;br /&gt;
2)  emulate M100 or T102, whatever&lt;br /&gt;
&lt;br /&gt;
3)  turn on ReMem emulation -&lt;br /&gt;
Emulation --&amp;gt; Memory options:  select ReMem, click ok&lt;br /&gt;
&lt;br /&gt;
4)  configure ReMem : tools --&amp;gt; remem configuration:&lt;br /&gt;
- first, click Default Map - this will do an initial set up&lt;br /&gt;
- next, on the left column, select MAP0&lt;br /&gt;
- on the second left column, sleect 100-13F OPT&lt;br /&gt;
- on the right, de-check sector lock, De-check RAM CS, check Flash 1&lt;br /&gt;
and check flash 2&lt;br /&gt;
- map data should be unchanged, and read 0x020&lt;br /&gt;
- select copy sequential&lt;br /&gt;
Now, you should see Map 0, 100-13F OPT with data 0x1820, 0x1821 etc&lt;br /&gt;
&lt;br /&gt;
Finally, select Save Map on the left, and close the window.&lt;br /&gt;
&lt;br /&gt;
5)  loading a CP/M image into the &amp;quot;option rom&amp;quot;&lt;br /&gt;
- tools --&amp;gt; memory editor&lt;br /&gt;
- select region RAM&lt;br /&gt;
- File --&amp;gt; load from file&lt;br /&gt;
- enter the full path name for the binary CP/M image&lt;br /&gt;
- start address should be 0x008000&lt;br /&gt;
- select ok&lt;br /&gt;
&lt;br /&gt;
Now, the binary image is loaded at offset 008000 in the RAM region.&lt;br /&gt;
You can check this by scrolling down.&lt;br /&gt;
&lt;br /&gt;
6)  activating the CP/M option rom&lt;br /&gt;
- enter BASIC&lt;br /&gt;
- type OUT 112,1&lt;br /&gt;
(this activates ReMem map 00)&lt;br /&gt;
- type CALL63012&lt;br /&gt;
(this will start the option ROM)&lt;br /&gt;
&lt;br /&gt;
DONE!  you are now running CP/M.&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=MTCPM&amp;diff=1019</id>
		<title>MTCPM</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=MTCPM&amp;diff=1019"/>
		<updated>2009-02-17T20:21:21Z</updated>

		<summary type="html">&lt;p&gt;78.69.53.223: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mtcpm ( Model T CP/M ) is a project to create a working version of CP/M on the Model T.&lt;br /&gt;
&lt;br /&gt;
If you want to help out join the [http://lists.bitchin100.com/listinfo.cgi/mtcpm-bitchin100.com Mtcpm mailing list]&lt;br /&gt;
&lt;br /&gt;
Subversion source code [http://svn.bitchin100.com/mtcpm repository]&lt;br /&gt;
&lt;br /&gt;
To download:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.bitchin100.com/mtcpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Ask on the mailing list if you need commit (check-in) privileges&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Goals and Status&lt;br /&gt;
! Project !! Sub project !! Status !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| Main system || BIOS || bgcolor=&amp;quot;yellow&amp;quot; | Underway || Conout&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| CCP || bgcolor=&amp;quot;yellow&amp;quot; | Underway || Waiting for Conin&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| BDOS || bgcolor=&amp;quot;yellow&amp;quot; | Underway || Some functions&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Filesystems || bgcolor=&amp;quot;yellow&amp;quot; | Underway || Hardware required&lt;br /&gt;
|-&lt;br /&gt;
| Software || Text Editor || bgcolor=&amp;quot;red&amp;quot; | Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| ASM || bgcolor=&amp;quot;red&amp;quot; | Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CP/M Resources ==&lt;br /&gt;
&lt;br /&gt;
[http://www.retroarchive.org/cpm Retroarchive] Archived CP/M binaries and docs&lt;br /&gt;
&lt;br /&gt;
[http://www.cpm.z80.de The Unofficial CP/M Page]&lt;br /&gt;
&lt;br /&gt;
[http://www.seasip.demon.co.uk/Cpm CP/M Main Page]&lt;br /&gt;
&lt;br /&gt;
[[Project HOWTOs]]&lt;/div&gt;</summary>
		<author><name>78.69.53.223</name></author>
	</entry>
</feed>