<?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=Jhoger</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=Jhoger"/>
	<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Special:Contributions/Jhoger"/>
	<updated>2026-04-12T14:16:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4555</id>
		<title>LaddieCon</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4555"/>
		<updated>2024-04-30T23:10:12Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* LaddieAlpha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is a Model 100 disk drive emulator written for Microsoft .NET. However it does depend on&lt;br /&gt;
the Win32 API for access to the serial port. So it is completely portable to any Microsoft operating&lt;br /&gt;
system running .NET ;-) . This is for historical reasons only... when LaddieCon was written, there was no&lt;br /&gt;
serial port API in .NET. If you need a TPDD emulator for a POSIX system, you should be using [[DLPlus]] or LaddieAlpha.&lt;br /&gt;
&lt;br /&gt;
Note that LaddieCon does NOT support TS-DOS directory extensions, but LaddieAlpha does.&lt;br /&gt;
&lt;br /&gt;
To run LaddieCon, you need to have installed the .NET Framework redistributable from Microsoft.&lt;br /&gt;
Most likely if your system is up-to-date on patches this is already done.&lt;br /&gt;
&lt;br /&gt;
== Download LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/windows/LaddieCon.exe Download LaddieCon]&lt;br /&gt;
&lt;br /&gt;
== Running LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
On your laptop, you must be running a TPDD client. TPDD clients include TS-DOS, TEENY, POWR-DOS, FLOPPY.CO or the WP-2 Disk mode.&lt;br /&gt;
&lt;br /&gt;
REX Manager is also a TPDD client, though it is limited to transferring 32K image files rather than individual .DO and .CO files.&lt;br /&gt;
&lt;br /&gt;
For the physical connection, you need a &amp;quot;null modem&amp;quot; wired serial cable to connect to a serial port on your Windows PC. You need to know which numbered COM port you are using on the PC side.&lt;br /&gt;
&lt;br /&gt;
LADDIECON.EXE runs on a Windows computer, on top of the .Net Framework. To start it,&lt;br /&gt;
&lt;br /&gt;
Click Start -&amp;gt; Run -&amp;gt; cmd.exe&lt;br /&gt;
&lt;br /&gt;
Assuming LADDIECON.EXE is saved at c:\tools\laddiecon.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
For the M100/T102/T200:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 6&lt;br /&gt;
&lt;br /&gt;
For the WP-2:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here I put &#039;com1.&#039; For your setup, the number may well be different.&lt;br /&gt;
&lt;br /&gt;
If you are using a Tandy WP-2 word processor, make sure to change the &#039;6&#039; to an &#039;8&#039;. This is important because the WP-2 uses an 8.2 style (8 characters for the base name, 2 characters for extension) filename, while the Model 10x and 200 use a 6.2 style filename. If you don&#039;t set this properly, you will get weird behavior.&lt;br /&gt;
&lt;br /&gt;
When you press ENTER, laddiecon should run until you hit CTRL-C. It won&#039;t appear to &amp;quot;do anything.&amp;quot; It is completely &amp;quot;remote controlled&amp;quot; by your disk client on the Model T laptop.&lt;br /&gt;
&lt;br /&gt;
== LaddieCon and Vista ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is reported to work with Vista. However, you must run &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; in &amp;quot;Administrator Mode.&amp;quot; Also, your USB adapter must have a driver that is compatible with Vista.&lt;br /&gt;
&lt;br /&gt;
To enable &amp;quot;Run As Administrator:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Find your &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; executable with Windows Explorer.&lt;br /&gt;
# Right click on &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039;&lt;br /&gt;
# Select Properties-&amp;gt;Compatibility Tab&lt;br /&gt;
# Check the &#039;Run as Administrator&#039; option.&lt;br /&gt;
&lt;br /&gt;
Note: if anyone knows a more fine-grained way to permit &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; to access&lt;br /&gt;
the COM port without using Administrator Mode, please note it here.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for a USB-&amp;gt;serial adapter known to work with Vista, the following have been tested:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USBGEAR U232-P9AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also, Chris Fezzler reports this device as working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Gigaware 6-Ft. USB-A to Serial Cable&lt;br /&gt;
SKU Model:26-949&lt;br /&gt;
Driver Date 6/25/2007&lt;br /&gt;
Driver Version 3.1.0.0&lt;br /&gt;
Provider: Prolific Technologies&lt;br /&gt;
Purchased at Radio Shack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please add any other adapters you verify work with Vista and LaddieCon.&lt;br /&gt;
&lt;br /&gt;
The following devices are known not to work with Vista:&lt;br /&gt;
&lt;br /&gt;
* Belkin USB-to-Serial cable &#039;&#039;&#039;Model F5U109&#039;&#039;&#039;.  Despite having Vista driver, was unsuccessful in getting it to work.&lt;br /&gt;
&lt;br /&gt;
== LaddieAlpha ==&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha is a &amp;quot;cross platform&amp;quot; build of LaddieCon file service that works on both .NET and mono. So you can run the same LaddieCon on Windows, Linux and Mac boxes!&lt;br /&gt;
&lt;br /&gt;
* Runs cross-platform&lt;br /&gt;
* Implements TS-DOS/Desklink directory extensions&lt;br /&gt;
* Maps/fixes up extensions presented to TS-DOS so .DO&#039;s misnamed .BA don&#039;t crash your laptop&lt;br /&gt;
* Maps/fixes up filenames so you can load/save TXT, HTM, etc. files as .DO files&lt;br /&gt;
* Supports 8.3 filename format for use with Model T CP/M&lt;br /&gt;
* It supports TCP connections [[Connecting NEWDOS to Wimodem232]]&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/linux/LaddieAlpha.EXE Download LaddieAlpha]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE COM1 6 [[-ext=xxxx|-win32|-baud=xxxxx|-resp=sz|-req=len|-ver]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default, -ext is set to 2 which is the extension length for the Model T. The only other value of use is 3, for CP/M support 8.3 support.&lt;br /&gt;
&lt;br /&gt;
-baud is for setting the baud rate. Default is 19200&lt;br /&gt;
&lt;br /&gt;
-resp and -req are an experimental feature for setting larger packet sizes to increase throughput. -resp sets the maximum # bytes LaddieAlpha will read in file-write request. -req is the maximum length of a file-read reply from LaddieAlpha. You probably don&#039;t need these settings. You would need a special client (special TS-DOS, etc.) for compatibility &lt;br /&gt;
&lt;br /&gt;
-win32 makes LaddieAlpha use the Win32 serial API directly through .NET Interop, rather than the Serial framework API. Sometimes I use this to see if a problem is in the Serial framework object. You probably don&#039;t need this option.&lt;br /&gt;
&lt;br /&gt;
-ver is to print the version block. This will crash on some systems if the assembly needs/hasn&#039;t been granted permission to access its file metadata.&lt;br /&gt;
&lt;br /&gt;
Example for CP/M support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE COM1 8 -ext=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Linux invocation for use with a Model 100/102/200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mono ./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your executable has execute permissions for your user / group, you can usually leave out invoking Mono, the shell will do it for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reliable Text-Only Transfers ==&lt;br /&gt;
&lt;br /&gt;
If you are only transferring text files, Hyperterminal is known to be a reliable way to transfer files even at 19200 using XON/XOFF protocol. Note that saving and loading text files via the TEXT application is much faster than TELCOM, because TEXT does not scroll the text to the screen as it captures.&lt;br /&gt;
&lt;br /&gt;
See [[Text File Transfer using Hyperterminal]] for details instructions on getting Hyperterminal working.&lt;br /&gt;
&lt;br /&gt;
[[Category:TPDD Service]] [[Category:File Transfer]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4554</id>
		<title>LaddieCon</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4554"/>
		<updated>2024-04-30T23:05:28Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* LaddieAlpha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is a Model 100 disk drive emulator written for Microsoft .NET. However it does depend on&lt;br /&gt;
the Win32 API for access to the serial port. So it is completely portable to any Microsoft operating&lt;br /&gt;
system running .NET ;-) . This is for historical reasons only... when LaddieCon was written, there was no&lt;br /&gt;
serial port API in .NET. If you need a TPDD emulator for a POSIX system, you should be using [[DLPlus]] or LaddieAlpha.&lt;br /&gt;
&lt;br /&gt;
Note that LaddieCon does NOT support TS-DOS directory extensions, but LaddieAlpha does.&lt;br /&gt;
&lt;br /&gt;
To run LaddieCon, you need to have installed the .NET Framework redistributable from Microsoft.&lt;br /&gt;
Most likely if your system is up-to-date on patches this is already done.&lt;br /&gt;
&lt;br /&gt;
== Download LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/windows/LaddieCon.exe Download LaddieCon]&lt;br /&gt;
&lt;br /&gt;
== Running LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
On your laptop, you must be running a TPDD client. TPDD clients include TS-DOS, TEENY, POWR-DOS, FLOPPY.CO or the WP-2 Disk mode.&lt;br /&gt;
&lt;br /&gt;
REX Manager is also a TPDD client, though it is limited to transferring 32K image files rather than individual .DO and .CO files.&lt;br /&gt;
&lt;br /&gt;
For the physical connection, you need a &amp;quot;null modem&amp;quot; wired serial cable to connect to a serial port on your Windows PC. You need to know which numbered COM port you are using on the PC side.&lt;br /&gt;
&lt;br /&gt;
LADDIECON.EXE runs on a Windows computer, on top of the .Net Framework. To start it,&lt;br /&gt;
&lt;br /&gt;
Click Start -&amp;gt; Run -&amp;gt; cmd.exe&lt;br /&gt;
&lt;br /&gt;
Assuming LADDIECON.EXE is saved at c:\tools\laddiecon.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
For the M100/T102/T200:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 6&lt;br /&gt;
&lt;br /&gt;
For the WP-2:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here I put &#039;com1.&#039; For your setup, the number may well be different.&lt;br /&gt;
&lt;br /&gt;
If you are using a Tandy WP-2 word processor, make sure to change the &#039;6&#039; to an &#039;8&#039;. This is important because the WP-2 uses an 8.2 style (8 characters for the base name, 2 characters for extension) filename, while the Model 10x and 200 use a 6.2 style filename. If you don&#039;t set this properly, you will get weird behavior.&lt;br /&gt;
&lt;br /&gt;
When you press ENTER, laddiecon should run until you hit CTRL-C. It won&#039;t appear to &amp;quot;do anything.&amp;quot; It is completely &amp;quot;remote controlled&amp;quot; by your disk client on the Model T laptop.&lt;br /&gt;
&lt;br /&gt;
== LaddieCon and Vista ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is reported to work with Vista. However, you must run &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; in &amp;quot;Administrator Mode.&amp;quot; Also, your USB adapter must have a driver that is compatible with Vista.&lt;br /&gt;
&lt;br /&gt;
To enable &amp;quot;Run As Administrator:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Find your &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; executable with Windows Explorer.&lt;br /&gt;
# Right click on &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039;&lt;br /&gt;
# Select Properties-&amp;gt;Compatibility Tab&lt;br /&gt;
# Check the &#039;Run as Administrator&#039; option.&lt;br /&gt;
&lt;br /&gt;
Note: if anyone knows a more fine-grained way to permit &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; to access&lt;br /&gt;
the COM port without using Administrator Mode, please note it here.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for a USB-&amp;gt;serial adapter known to work with Vista, the following have been tested:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USBGEAR U232-P9AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also, Chris Fezzler reports this device as working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Gigaware 6-Ft. USB-A to Serial Cable&lt;br /&gt;
SKU Model:26-949&lt;br /&gt;
Driver Date 6/25/2007&lt;br /&gt;
Driver Version 3.1.0.0&lt;br /&gt;
Provider: Prolific Technologies&lt;br /&gt;
Purchased at Radio Shack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please add any other adapters you verify work with Vista and LaddieCon.&lt;br /&gt;
&lt;br /&gt;
The following devices are known not to work with Vista:&lt;br /&gt;
&lt;br /&gt;
* Belkin USB-to-Serial cable &#039;&#039;&#039;Model F5U109&#039;&#039;&#039;.  Despite having Vista driver, was unsuccessful in getting it to work.&lt;br /&gt;
&lt;br /&gt;
== LaddieAlpha ==&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha is a &amp;quot;cross platform&amp;quot; build of LaddieCon file service that works on both .NET and mono. So you can run the same LaddieCon on Windows, Linux and Mac boxes!&lt;br /&gt;
&lt;br /&gt;
* Runs cross-platform&lt;br /&gt;
* Implements TS-DOS/Desklink directory extensions&lt;br /&gt;
* Maps/fixes up extensions presented to TS-DOS so .DO&#039;s misnamed .BA don&#039;t crash your laptop&lt;br /&gt;
* Maps/fixes up filenames so you can load/save TXT, HTM, etc. files as .DO files&lt;br /&gt;
* Supports 8.3 filename format for use with Model T CP/M&lt;br /&gt;
* It supports TCP connections [[Connecting NEWDOS to Wimodem232]]&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/linux/LaddieAlpha.EXE Download LaddieAlpha]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE COM1 6 [[-ext=xxxx|-win32|-baud=xxxxx|-resp=sz|-req=len]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default, -ext is set to 2 which is the extension length for the Model T. The only other value of use is 3, for CP/M support 8.3 support.&lt;br /&gt;
&lt;br /&gt;
-baud is for setting the baud rate. Default is 19200&lt;br /&gt;
&lt;br /&gt;
-resp and -req are an experimental feature for setting larger packet sizes to increase throughput. -resp sets the maximum # bytes LaddieAlpha will read in file-write request. -req is the maximum length of a file-read reply from LaddieAlpha. You probably don&#039;t need these settings. You would need a special client (special TS-DOS, etc.) for compatibility &lt;br /&gt;
&lt;br /&gt;
-win32 makes LaddieAlpha use the Win32 serial API directly through .NET Interop, rather than the Serial framework API. Sometimes I use this to see if a problem is in the Serial framework object. You probably don&#039;t need this option.&lt;br /&gt;
&lt;br /&gt;
Example for CP/M support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE COM1 8 -ext=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Linux invocation for use with a Model 100/102/200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mono ./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your executable has execute permissions for your user / group, you can usually leave out invoking Mono, the shell will do it for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reliable Text-Only Transfers ==&lt;br /&gt;
&lt;br /&gt;
If you are only transferring text files, Hyperterminal is known to be a reliable way to transfer files even at 19200 using XON/XOFF protocol. Note that saving and loading text files via the TEXT application is much faster than TELCOM, because TEXT does not scroll the text to the screen as it captures.&lt;br /&gt;
&lt;br /&gt;
See [[Text File Transfer using Hyperterminal]] for details instructions on getting Hyperterminal working.&lt;br /&gt;
&lt;br /&gt;
[[Category:TPDD Service]] [[Category:File Transfer]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4553</id>
		<title>LaddieCon</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4553"/>
		<updated>2024-04-30T23:02:44Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* LaddieAlpha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is a Model 100 disk drive emulator written for Microsoft .NET. However it does depend on&lt;br /&gt;
the Win32 API for access to the serial port. So it is completely portable to any Microsoft operating&lt;br /&gt;
system running .NET ;-) . This is for historical reasons only... when LaddieCon was written, there was no&lt;br /&gt;
serial port API in .NET. If you need a TPDD emulator for a POSIX system, you should be using [[DLPlus]] or LaddieAlpha.&lt;br /&gt;
&lt;br /&gt;
Note that LaddieCon does NOT support TS-DOS directory extensions, but LaddieAlpha does.&lt;br /&gt;
&lt;br /&gt;
To run LaddieCon, you need to have installed the .NET Framework redistributable from Microsoft.&lt;br /&gt;
Most likely if your system is up-to-date on patches this is already done.&lt;br /&gt;
&lt;br /&gt;
== Download LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/windows/LaddieCon.exe Download LaddieCon]&lt;br /&gt;
&lt;br /&gt;
== Running LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
On your laptop, you must be running a TPDD client. TPDD clients include TS-DOS, TEENY, POWR-DOS, FLOPPY.CO or the WP-2 Disk mode.&lt;br /&gt;
&lt;br /&gt;
REX Manager is also a TPDD client, though it is limited to transferring 32K image files rather than individual .DO and .CO files.&lt;br /&gt;
&lt;br /&gt;
For the physical connection, you need a &amp;quot;null modem&amp;quot; wired serial cable to connect to a serial port on your Windows PC. You need to know which numbered COM port you are using on the PC side.&lt;br /&gt;
&lt;br /&gt;
LADDIECON.EXE runs on a Windows computer, on top of the .Net Framework. To start it,&lt;br /&gt;
&lt;br /&gt;
Click Start -&amp;gt; Run -&amp;gt; cmd.exe&lt;br /&gt;
&lt;br /&gt;
Assuming LADDIECON.EXE is saved at c:\tools\laddiecon.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
For the M100/T102/T200:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 6&lt;br /&gt;
&lt;br /&gt;
For the WP-2:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here I put &#039;com1.&#039; For your setup, the number may well be different.&lt;br /&gt;
&lt;br /&gt;
If you are using a Tandy WP-2 word processor, make sure to change the &#039;6&#039; to an &#039;8&#039;. This is important because the WP-2 uses an 8.2 style (8 characters for the base name, 2 characters for extension) filename, while the Model 10x and 200 use a 6.2 style filename. If you don&#039;t set this properly, you will get weird behavior.&lt;br /&gt;
&lt;br /&gt;
When you press ENTER, laddiecon should run until you hit CTRL-C. It won&#039;t appear to &amp;quot;do anything.&amp;quot; It is completely &amp;quot;remote controlled&amp;quot; by your disk client on the Model T laptop.&lt;br /&gt;
&lt;br /&gt;
== LaddieCon and Vista ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is reported to work with Vista. However, you must run &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; in &amp;quot;Administrator Mode.&amp;quot; Also, your USB adapter must have a driver that is compatible with Vista.&lt;br /&gt;
&lt;br /&gt;
To enable &amp;quot;Run As Administrator:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Find your &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; executable with Windows Explorer.&lt;br /&gt;
# Right click on &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039;&lt;br /&gt;
# Select Properties-&amp;gt;Compatibility Tab&lt;br /&gt;
# Check the &#039;Run as Administrator&#039; option.&lt;br /&gt;
&lt;br /&gt;
Note: if anyone knows a more fine-grained way to permit &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; to access&lt;br /&gt;
the COM port without using Administrator Mode, please note it here.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for a USB-&amp;gt;serial adapter known to work with Vista, the following have been tested:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USBGEAR U232-P9AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also, Chris Fezzler reports this device as working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Gigaware 6-Ft. USB-A to Serial Cable&lt;br /&gt;
SKU Model:26-949&lt;br /&gt;
Driver Date 6/25/2007&lt;br /&gt;
Driver Version 3.1.0.0&lt;br /&gt;
Provider: Prolific Technologies&lt;br /&gt;
Purchased at Radio Shack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please add any other adapters you verify work with Vista and LaddieCon.&lt;br /&gt;
&lt;br /&gt;
The following devices are known not to work with Vista:&lt;br /&gt;
&lt;br /&gt;
* Belkin USB-to-Serial cable &#039;&#039;&#039;Model F5U109&#039;&#039;&#039;.  Despite having Vista driver, was unsuccessful in getting it to work.&lt;br /&gt;
&lt;br /&gt;
== LaddieAlpha ==&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha is a &amp;quot;cross platform&amp;quot; build of LaddieCon file service that works on both .NET and mono. So you can run the same LaddieCon on Windows, Linux and Mac boxes!&lt;br /&gt;
&lt;br /&gt;
* Runs cross-platform&lt;br /&gt;
* Implements TS-DOS/Desklink directory extensions&lt;br /&gt;
* Maps/fixes up extensions presented to TS-DOS so .DO&#039;s misnamed .BA don&#039;t crash your laptop&lt;br /&gt;
* Maps/fixes up filenames so you can load/save TXT, HTM, etc. files as .DO files&lt;br /&gt;
* Supports 8.3 filename format for use with Model T CP/M&lt;br /&gt;
* It supports TCP connections [[Connecting NEWDOS to Wimodem232]]&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/linux/LaddieAlpha.EXE Download LaddieAlpha]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE COM1 6 [[-ext=xxxx|-win32|-baud=xxxxx|-resp=sz|-req=len]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default, -ext is set to 2 which is the extension length for the Model T. The only other value of use is 3, for CP/M support 8.3 support.&lt;br /&gt;
&lt;br /&gt;
-baud is for setting the baud rate.&lt;br /&gt;
&lt;br /&gt;
-resp and -req are an experimental feature for setting larger packet sizes to increase throughput. -resp sets the maximum # bytes LaddieAlpha will read in file-write request. -req is the maximum length of a file-read reply from LaddieAlpha. You probably don&#039;t need these settings. You would need a special client (special TS-DOS, etc.) for compatibility &lt;br /&gt;
&lt;br /&gt;
Example for CP/M support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE COM1 8 -ext=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Linux invocation for use with a Model 100/102/200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mono ./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your executable has execute permissions for your user / group, you can usually leave out invoking Mono, the shell will do it for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reliable Text-Only Transfers ==&lt;br /&gt;
&lt;br /&gt;
If you are only transferring text files, Hyperterminal is known to be a reliable way to transfer files even at 19200 using XON/XOFF protocol. Note that saving and loading text files via the TEXT application is much faster than TELCOM, because TEXT does not scroll the text to the screen as it captures.&lt;br /&gt;
&lt;br /&gt;
See [[Text File Transfer using Hyperterminal]] for details instructions on getting Hyperterminal working.&lt;br /&gt;
&lt;br /&gt;
[[Category:TPDD Service]] [[Category:File Transfer]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4552</id>
		<title>LaddieCon</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4552"/>
		<updated>2024-04-30T23:01:42Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* LaddieAlpha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is a Model 100 disk drive emulator written for Microsoft .NET. However it does depend on&lt;br /&gt;
the Win32 API for access to the serial port. So it is completely portable to any Microsoft operating&lt;br /&gt;
system running .NET ;-) . This is for historical reasons only... when LaddieCon was written, there was no&lt;br /&gt;
serial port API in .NET. If you need a TPDD emulator for a POSIX system, you should be using [[DLPlus]] or LaddieAlpha.&lt;br /&gt;
&lt;br /&gt;
Note that LaddieCon does NOT support TS-DOS directory extensions, but LaddieAlpha does.&lt;br /&gt;
&lt;br /&gt;
To run LaddieCon, you need to have installed the .NET Framework redistributable from Microsoft.&lt;br /&gt;
Most likely if your system is up-to-date on patches this is already done.&lt;br /&gt;
&lt;br /&gt;
== Download LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/windows/LaddieCon.exe Download LaddieCon]&lt;br /&gt;
&lt;br /&gt;
== Running LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
On your laptop, you must be running a TPDD client. TPDD clients include TS-DOS, TEENY, POWR-DOS, FLOPPY.CO or the WP-2 Disk mode.&lt;br /&gt;
&lt;br /&gt;
REX Manager is also a TPDD client, though it is limited to transferring 32K image files rather than individual .DO and .CO files.&lt;br /&gt;
&lt;br /&gt;
For the physical connection, you need a &amp;quot;null modem&amp;quot; wired serial cable to connect to a serial port on your Windows PC. You need to know which numbered COM port you are using on the PC side.&lt;br /&gt;
&lt;br /&gt;
LADDIECON.EXE runs on a Windows computer, on top of the .Net Framework. To start it,&lt;br /&gt;
&lt;br /&gt;
Click Start -&amp;gt; Run -&amp;gt; cmd.exe&lt;br /&gt;
&lt;br /&gt;
Assuming LADDIECON.EXE is saved at c:\tools\laddiecon.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
For the M100/T102/T200:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 6&lt;br /&gt;
&lt;br /&gt;
For the WP-2:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here I put &#039;com1.&#039; For your setup, the number may well be different.&lt;br /&gt;
&lt;br /&gt;
If you are using a Tandy WP-2 word processor, make sure to change the &#039;6&#039; to an &#039;8&#039;. This is important because the WP-2 uses an 8.2 style (8 characters for the base name, 2 characters for extension) filename, while the Model 10x and 200 use a 6.2 style filename. If you don&#039;t set this properly, you will get weird behavior.&lt;br /&gt;
&lt;br /&gt;
When you press ENTER, laddiecon should run until you hit CTRL-C. It won&#039;t appear to &amp;quot;do anything.&amp;quot; It is completely &amp;quot;remote controlled&amp;quot; by your disk client on the Model T laptop.&lt;br /&gt;
&lt;br /&gt;
== LaddieCon and Vista ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is reported to work with Vista. However, you must run &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; in &amp;quot;Administrator Mode.&amp;quot; Also, your USB adapter must have a driver that is compatible with Vista.&lt;br /&gt;
&lt;br /&gt;
To enable &amp;quot;Run As Administrator:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Find your &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; executable with Windows Explorer.&lt;br /&gt;
# Right click on &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039;&lt;br /&gt;
# Select Properties-&amp;gt;Compatibility Tab&lt;br /&gt;
# Check the &#039;Run as Administrator&#039; option.&lt;br /&gt;
&lt;br /&gt;
Note: if anyone knows a more fine-grained way to permit &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; to access&lt;br /&gt;
the COM port without using Administrator Mode, please note it here.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for a USB-&amp;gt;serial adapter known to work with Vista, the following have been tested:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USBGEAR U232-P9AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also, Chris Fezzler reports this device as working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Gigaware 6-Ft. USB-A to Serial Cable&lt;br /&gt;
SKU Model:26-949&lt;br /&gt;
Driver Date 6/25/2007&lt;br /&gt;
Driver Version 3.1.0.0&lt;br /&gt;
Provider: Prolific Technologies&lt;br /&gt;
Purchased at Radio Shack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please add any other adapters you verify work with Vista and LaddieCon.&lt;br /&gt;
&lt;br /&gt;
The following devices are known not to work with Vista:&lt;br /&gt;
&lt;br /&gt;
* Belkin USB-to-Serial cable &#039;&#039;&#039;Model F5U109&#039;&#039;&#039;.  Despite having Vista driver, was unsuccessful in getting it to work.&lt;br /&gt;
&lt;br /&gt;
== LaddieAlpha ==&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha is a &amp;quot;cross platform&amp;quot; build of LaddieCon file service that works on both .NET and mono. So you can run the same LaddieCon on Windows, Linux and Mac boxes!&lt;br /&gt;
&lt;br /&gt;
* Runs cross-platform&lt;br /&gt;
* Implements TS-DOS/Desklink directory extensions&lt;br /&gt;
* Maps/fixes up extensions presented to TS-DOS so .DO&#039;s misnamed .BA don&#039;t crash your laptop&lt;br /&gt;
* Maps/fixes up filenames so you can load/save TXT, HTM, etc. files as .DO files&lt;br /&gt;
* Supports 8.3 filename format for use with Model T CP/M&lt;br /&gt;
* It supports TCP connections [[Connecting NEWDOS to Wimodem232]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE COM1 6 [[-ext=xxxx|-win32|-baud=xxxxx|-resp=sz|-req=len]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default, -ext is set to 2 which is the extension length for the Model T. The only other value of use is 3, for CP/M support 8.3 support.&lt;br /&gt;
&lt;br /&gt;
-baud is for setting the baud rate.&lt;br /&gt;
&lt;br /&gt;
-resp and -req are an experimental feature for setting larger packet sizes to increase throughput. -resp sets the maximum # bytes LaddieAlpha will read in file-write request. -req is the maximum length of a file-read reply from LaddieAlpha. You probably don&#039;t need these settings. You would need a special client (special TS-DOS, etc.) for compatibility &lt;br /&gt;
&lt;br /&gt;
Example for CP/M support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE COM1 8 -ext=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/linux/LaddieAlpha.EXE Download and test LaddieAlpha]&lt;br /&gt;
&lt;br /&gt;
Example Linux invocation for use with a Model 100/102/200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mono ./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your executable has execute permissions for your user / group, you can usually leave out invoking Mono, the shell will do it for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reliable Text-Only Transfers ==&lt;br /&gt;
&lt;br /&gt;
If you are only transferring text files, Hyperterminal is known to be a reliable way to transfer files even at 19200 using XON/XOFF protocol. Note that saving and loading text files via the TEXT application is much faster than TELCOM, because TEXT does not scroll the text to the screen as it captures.&lt;br /&gt;
&lt;br /&gt;
See [[Text File Transfer using Hyperterminal]] for details instructions on getting Hyperterminal working.&lt;br /&gt;
&lt;br /&gt;
[[Category:TPDD Service]] [[Category:File Transfer]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4551</id>
		<title>LaddieCon</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4551"/>
		<updated>2024-04-30T23:00:51Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* LaddieAlpha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is a Model 100 disk drive emulator written for Microsoft .NET. However it does depend on&lt;br /&gt;
the Win32 API for access to the serial port. So it is completely portable to any Microsoft operating&lt;br /&gt;
system running .NET ;-) . This is for historical reasons only... when LaddieCon was written, there was no&lt;br /&gt;
serial port API in .NET. If you need a TPDD emulator for a POSIX system, you should be using [[DLPlus]] or LaddieAlpha.&lt;br /&gt;
&lt;br /&gt;
Note that LaddieCon does NOT support TS-DOS directory extensions, but LaddieAlpha does.&lt;br /&gt;
&lt;br /&gt;
To run LaddieCon, you need to have installed the .NET Framework redistributable from Microsoft.&lt;br /&gt;
Most likely if your system is up-to-date on patches this is already done.&lt;br /&gt;
&lt;br /&gt;
== Download LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/windows/LaddieCon.exe Download LaddieCon]&lt;br /&gt;
&lt;br /&gt;
== Running LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
On your laptop, you must be running a TPDD client. TPDD clients include TS-DOS, TEENY, POWR-DOS, FLOPPY.CO or the WP-2 Disk mode.&lt;br /&gt;
&lt;br /&gt;
REX Manager is also a TPDD client, though it is limited to transferring 32K image files rather than individual .DO and .CO files.&lt;br /&gt;
&lt;br /&gt;
For the physical connection, you need a &amp;quot;null modem&amp;quot; wired serial cable to connect to a serial port on your Windows PC. You need to know which numbered COM port you are using on the PC side.&lt;br /&gt;
&lt;br /&gt;
LADDIECON.EXE runs on a Windows computer, on top of the .Net Framework. To start it,&lt;br /&gt;
&lt;br /&gt;
Click Start -&amp;gt; Run -&amp;gt; cmd.exe&lt;br /&gt;
&lt;br /&gt;
Assuming LADDIECON.EXE is saved at c:\tools\laddiecon.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
For the M100/T102/T200:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 6&lt;br /&gt;
&lt;br /&gt;
For the WP-2:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here I put &#039;com1.&#039; For your setup, the number may well be different.&lt;br /&gt;
&lt;br /&gt;
If you are using a Tandy WP-2 word processor, make sure to change the &#039;6&#039; to an &#039;8&#039;. This is important because the WP-2 uses an 8.2 style (8 characters for the base name, 2 characters for extension) filename, while the Model 10x and 200 use a 6.2 style filename. If you don&#039;t set this properly, you will get weird behavior.&lt;br /&gt;
&lt;br /&gt;
When you press ENTER, laddiecon should run until you hit CTRL-C. It won&#039;t appear to &amp;quot;do anything.&amp;quot; It is completely &amp;quot;remote controlled&amp;quot; by your disk client on the Model T laptop.&lt;br /&gt;
&lt;br /&gt;
== LaddieCon and Vista ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is reported to work with Vista. However, you must run &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; in &amp;quot;Administrator Mode.&amp;quot; Also, your USB adapter must have a driver that is compatible with Vista.&lt;br /&gt;
&lt;br /&gt;
To enable &amp;quot;Run As Administrator:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Find your &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; executable with Windows Explorer.&lt;br /&gt;
# Right click on &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039;&lt;br /&gt;
# Select Properties-&amp;gt;Compatibility Tab&lt;br /&gt;
# Check the &#039;Run as Administrator&#039; option.&lt;br /&gt;
&lt;br /&gt;
Note: if anyone knows a more fine-grained way to permit &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; to access&lt;br /&gt;
the COM port without using Administrator Mode, please note it here.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for a USB-&amp;gt;serial adapter known to work with Vista, the following have been tested:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USBGEAR U232-P9AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also, Chris Fezzler reports this device as working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Gigaware 6-Ft. USB-A to Serial Cable&lt;br /&gt;
SKU Model:26-949&lt;br /&gt;
Driver Date 6/25/2007&lt;br /&gt;
Driver Version 3.1.0.0&lt;br /&gt;
Provider: Prolific Technologies&lt;br /&gt;
Purchased at Radio Shack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please add any other adapters you verify work with Vista and LaddieCon.&lt;br /&gt;
&lt;br /&gt;
The following devices are known not to work with Vista:&lt;br /&gt;
&lt;br /&gt;
* Belkin USB-to-Serial cable &#039;&#039;&#039;Model F5U109&#039;&#039;&#039;.  Despite having Vista driver, was unsuccessful in getting it to work.&lt;br /&gt;
&lt;br /&gt;
== LaddieAlpha ==&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha is a &amp;quot;cross platform&amp;quot; build of LaddieCon file service that works on both .NET and mono. So you can run the same LaddieCon on Windows, Linux and Mac boxes!&lt;br /&gt;
&lt;br /&gt;
* Runs cross-platform&lt;br /&gt;
* Implements TS-DOS/Desklink directory extensions&lt;br /&gt;
* Maps/fixes up extensions presented to TS-DOS so .DO&#039;s misnamed .BA don&#039;t crash your laptop&lt;br /&gt;
* Maps/fixes up filenames so you can load/save TXT, HTM, etc. files as .DO files&lt;br /&gt;
* Supports 8.3 filename format for use with Model T CP/M&lt;br /&gt;
* It supports TCP connections [[Connecting NEWDOS to Wimodem232]]&lt;br /&gt;
&lt;br /&gt;
.\LaddieAlpha.EXE COM1 6 [[-ext=xxxx|-win32|-baud=xxxxx|-resp=sz|-req=len]]&lt;br /&gt;
&lt;br /&gt;
By default, -ext is set to 2 which is the extension length for the Model T. The only other value of use is 3, for CP/M support 8.3 support.&lt;br /&gt;
&lt;br /&gt;
-baud is for setting the baud rate.&lt;br /&gt;
&lt;br /&gt;
-resp and -req are an experimental feature for setting larger packet sizes to increase throughput. -resp sets the maximum # bytes LaddieAlpha will read in file-write request. -req is the maximum length of a file-read reply from LaddieAlpha. You probably don&#039;t need these settings. You would need a special client (special TS-DOS, etc.) for compatibility &lt;br /&gt;
&lt;br /&gt;
Example for CP/M support:&lt;br /&gt;
&lt;br /&gt;
.\LaddieAlpha.EXE COM1 8 -ext=3&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/linux/LaddieAlpha.EXE Download and test LaddieAlpha]&lt;br /&gt;
&lt;br /&gt;
Example Linux invocation for use with a Model 100/102/200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mono ./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your executable has execute permissions for your user / group, you can usually leave out invoking Mono, the shell will do it for you.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reliable Text-Only Transfers ==&lt;br /&gt;
&lt;br /&gt;
If you are only transferring text files, Hyperterminal is known to be a reliable way to transfer files even at 19200 using XON/XOFF protocol. Note that saving and loading text files via the TEXT application is much faster than TELCOM, because TEXT does not scroll the text to the screen as it captures.&lt;br /&gt;
&lt;br /&gt;
See [[Text File Transfer using Hyperterminal]] for details instructions on getting Hyperterminal working.&lt;br /&gt;
&lt;br /&gt;
[[Category:TPDD Service]] [[Category:File Transfer]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4550</id>
		<title>LaddieCon</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=4550"/>
		<updated>2024-04-30T22:46:25Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is a Model 100 disk drive emulator written for Microsoft .NET. However it does depend on&lt;br /&gt;
the Win32 API for access to the serial port. So it is completely portable to any Microsoft operating&lt;br /&gt;
system running .NET ;-) . This is for historical reasons only... when LaddieCon was written, there was no&lt;br /&gt;
serial port API in .NET. If you need a TPDD emulator for a POSIX system, you should be using [[DLPlus]] or LaddieAlpha.&lt;br /&gt;
&lt;br /&gt;
Note that LaddieCon does NOT support TS-DOS directory extensions, but LaddieAlpha does.&lt;br /&gt;
&lt;br /&gt;
To run LaddieCon, you need to have installed the .NET Framework redistributable from Microsoft.&lt;br /&gt;
Most likely if your system is up-to-date on patches this is already done.&lt;br /&gt;
&lt;br /&gt;
== Download LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/windows/LaddieCon.exe Download LaddieCon]&lt;br /&gt;
&lt;br /&gt;
== Running LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
On your laptop, you must be running a TPDD client. TPDD clients include TS-DOS, TEENY, POWR-DOS, FLOPPY.CO or the WP-2 Disk mode.&lt;br /&gt;
&lt;br /&gt;
REX Manager is also a TPDD client, though it is limited to transferring 32K image files rather than individual .DO and .CO files.&lt;br /&gt;
&lt;br /&gt;
For the physical connection, you need a &amp;quot;null modem&amp;quot; wired serial cable to connect to a serial port on your Windows PC. You need to know which numbered COM port you are using on the PC side.&lt;br /&gt;
&lt;br /&gt;
LADDIECON.EXE runs on a Windows computer, on top of the .Net Framework. To start it,&lt;br /&gt;
&lt;br /&gt;
Click Start -&amp;gt; Run -&amp;gt; cmd.exe&lt;br /&gt;
&lt;br /&gt;
Assuming LADDIECON.EXE is saved at c:\tools\laddiecon.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
For the M100/T102/T200:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 6&lt;br /&gt;
&lt;br /&gt;
For the WP-2:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here I put &#039;com1.&#039; For your setup, the number may well be different.&lt;br /&gt;
&lt;br /&gt;
If you are using a Tandy WP-2 word processor, make sure to change the &#039;6&#039; to an &#039;8&#039;. This is important because the WP-2 uses an 8.2 style (8 characters for the base name, 2 characters for extension) filename, while the Model 10x and 200 use a 6.2 style filename. If you don&#039;t set this properly, you will get weird behavior.&lt;br /&gt;
&lt;br /&gt;
When you press ENTER, laddiecon should run until you hit CTRL-C. It won&#039;t appear to &amp;quot;do anything.&amp;quot; It is completely &amp;quot;remote controlled&amp;quot; by your disk client on the Model T laptop.&lt;br /&gt;
&lt;br /&gt;
== LaddieCon and Vista ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is reported to work with Vista. However, you must run &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; in &amp;quot;Administrator Mode.&amp;quot; Also, your USB adapter must have a driver that is compatible with Vista.&lt;br /&gt;
&lt;br /&gt;
To enable &amp;quot;Run As Administrator:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Find your &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; executable with Windows Explorer.&lt;br /&gt;
# Right click on &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039;&lt;br /&gt;
# Select Properties-&amp;gt;Compatibility Tab&lt;br /&gt;
# Check the &#039;Run as Administrator&#039; option.&lt;br /&gt;
&lt;br /&gt;
Note: if anyone knows a more fine-grained way to permit &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; to access&lt;br /&gt;
the COM port without using Administrator Mode, please note it here.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for a USB-&amp;gt;serial adapter known to work with Vista, the following have been tested:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USBGEAR U232-P9AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also, Chris Fezzler reports this device as working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Gigaware 6-Ft. USB-A to Serial Cable&lt;br /&gt;
SKU Model:26-949&lt;br /&gt;
Driver Date 6/25/2007&lt;br /&gt;
Driver Version 3.1.0.0&lt;br /&gt;
Provider: Prolific Technologies&lt;br /&gt;
Purchased at Radio Shack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please add any other adapters you verify work with Vista and LaddieCon.&lt;br /&gt;
&lt;br /&gt;
The following devices are known not to work with Vista:&lt;br /&gt;
&lt;br /&gt;
* Belkin USB-to-Serial cable &#039;&#039;&#039;Model F5U109&#039;&#039;&#039;.  Despite having Vista driver, was unsuccessful in getting it to work.&lt;br /&gt;
&lt;br /&gt;
== LaddieAlpha ==&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha is a&amp;quot;cross platform&amp;quot; build of LaddieCon that works on both .NET and mono. So you can run the same LaddieCon on Windows, Linux and Mac boxes!&lt;br /&gt;
&lt;br /&gt;
* Runs cross-platform&lt;br /&gt;
* Implements TS-DOS/Desklink directory extensions&lt;br /&gt;
* Maps/fixes up extensions presented to TS-DOS so .DO&#039;s misnamed .BA don&#039;t crash your laptop&lt;br /&gt;
* Supports 8.3 filename format for use with Model T CP/M&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/linux/LaddieAlpha.EXE Download and test LaddieAlpha]&lt;br /&gt;
&lt;br /&gt;
Example Linux invocation for use with a Model 100/102/200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mono ./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reliable Text-Only Transfers ==&lt;br /&gt;
&lt;br /&gt;
If you are only transferring text files, Hyperterminal is known to be a reliable way to transfer files even at 19200 using XON/XOFF protocol. Note that saving and loading text files via the TEXT application is much faster than TELCOM, because TEXT does not scroll the text to the screen as it captures.&lt;br /&gt;
&lt;br /&gt;
See [[Text File Transfer using Hyperterminal]] for details instructions on getting Hyperterminal working.&lt;br /&gt;
&lt;br /&gt;
[[Category:TPDD Service]] [[Category:File Transfer]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Peeking_the_Option_ROM_From_a_BASIC_Program&amp;diff=4231</id>
		<title>Peeking the Option ROM From a BASIC Program</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Peeking_the_Option_ROM_From_a_BASIC_Program&amp;diff=4231"/>
		<updated>2022-12-22T19:42:30Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The question came up on Facebook as to whether you can read the contents of an Option ROM from BASIC. The short answer is not really, or at least, not without some work.&lt;br /&gt;
&lt;br /&gt;
Why? The 8085 has a 65536 byte address space. That space is apportioned between ROM at the bottom and RAM at the top. The 32K Option ROM, when enabled, occupies the same address space as the 32K main ROM. When the Option ROM is running, the BASIC ROM isn’t, and vice versa,, because all their jumps, internal data references and interrupt handlers are located to execute in the same space: the lower 32,768 bytes of the 8085 CPU’s address space. The upper 32K of the address space is permanently devoted to the RAM.&lt;br /&gt;
&lt;br /&gt;
OK, well, BASIC has an OUT I/O routine and BASIC has a PEEK routine. To switch to the option ROM, you OUT 1 to I/O register 224. To switch back you OUT 0 to I/O register 224. So knowing just enough to get ourselves in trouble, a naive approach to PEEKing the option ROM would be:&lt;br /&gt;
  OUT 224,1:?PEEK(0): OUT224,0&lt;br /&gt;
to print the first byte of the Option ROM, and because I&#039;m almost clever, I of course switch back to the Main ROM at the end of it like a good BASIC citizen.&lt;br /&gt;
&lt;br /&gt;
Workey? No. No workey.&lt;br /&gt;
&lt;br /&gt;
The problem is that the BASIC interpreter will abruptly disappear with OUT 224,1. Boom. Poof. Gone. So the BASIC interpreter loop that executes your BASIC program line by line, token by token, will never get to anything after the first OUT... it will instead lock-up or, perhaps, crash spectacularly.&lt;br /&gt;
&lt;br /&gt;
Because of that, I don&#039;t think there&#039;s any way to PEEK the option ROM from pure BASIC. But rather than let that hurdle stop us, instead, we need to contrive some machine code with no ROM dependencies and embed it in our BASIC program. This code will run completely from RAM, which always stays mapped in, so our code can swap the standard ROM out and the Option ROM in without causing a crash.&lt;br /&gt;
&lt;br /&gt;
So we’re writing a machine language (ML) subroutine. We can interface ML with BASIC. BASIC gives us a way to invoke a ML subroutine, the “CALL” function. We will design a routine we can CALL, passing along the address of the Option ROM location we want, and get back the byte value that is at that offset in the Option ROM.&lt;br /&gt;
&lt;br /&gt;
How does CALL work? The CALL statement takes three parameters: a subroutine entry point, an 8-bit parameter, and a 16-bit parameter. The subroutine is called, and the parameters are passed in the A and HL registers, respectively. At the end of the subroutine, CALL’ed code must effectuate return to the BASIC interpreter, leaving the stack as it found it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clearly, we need to pass the address to PEEK. The 16-bit parameter could be good for that. We don’t have any use for an 8-bit input to our subroutine. But what about passing back the byte &amp;quot;PEEKed&amp;quot;? That&#039;s an &amp;quot;out&amp;quot; parameter. It sure would have been great if Microsoft had made CALL return a 8 or 16-bit value.&lt;br /&gt;
&lt;br /&gt;
But it is not so, and the BASIC ROM is literally etched in stone for many of our machines.&lt;br /&gt;
&lt;br /&gt;
Oh well. No point in crying into our cereal about it... we just need to put our thinking caps back on. What we can do instead is pass a parameter array of integers as our 16-bit value. That is, instead of passing one value, we pass a value that refers (a reference) to a modifiable object.&lt;br /&gt;
&lt;br /&gt;
A single array reference can convey an arbitrary number of values and pointers. And since we&#039;re passing a reference to the array object, the variables at each index of the array can be modified by the ML routine, supporting &amp;quot;in&amp;quot; and &amp;quot;out&amp;quot; parameters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DIM P%(2)&lt;br /&gt;
&#039; P%(0): return value&lt;br /&gt;
P%(1) = 1000 : &#039; Address in Option ROM to peek&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So assuming our subroutine is at address PK% (we’ll get to that later), an invocation of our subroutine to find out what’s at address 1000 of the Option ROM would look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
P%(1) = 1000: CALL PK%, 0,VARPTR(P%(0)): ?P%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
So now that we know what we want the routine to do and how we will invoke it, let&#039;s code it.&lt;br /&gt;
&lt;br /&gt;
For each line I will show the assembly instruction, as well as the hex and what I call Funny Hex for each instruction. Funny Hex is like hex but ABCDEF are represented by :;&amp;lt;=&amp;gt;? , for simplified conversion. Any character in Funny Hex, you can subtract 48 (ASCII encoding of zero) and it will give you a value between 0 and 15&lt;br /&gt;
&lt;br /&gt;
First I need to resolve a level of indirection on the value of HL to load the “address” parameter into the HL register. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; HL starts as the address of the integer parameter array&lt;br /&gt;
; Load HL with param[1] since it&#039;s the address to peek&lt;br /&gt;
  XCHG  ; $EB  &amp;gt;;&lt;br /&gt;
  INX D ; $13  13  ; uh oh, need a listable alternative&lt;br /&gt;
  INX D ; $13  13  ; again&lt;br /&gt;
  LHLI  ; $ED  &amp;gt;=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That was my first cut at that... and it would work, but $13 is an unprintable ASCII control character (^S / DC3/ XOFF). We have an opportunity here to craft code that can be embedded directly into a BASIC string, execute in place, and have no LIST or EDIT issues. That makes for much shorter BASIC code, with no &amp;quot;poke loop&amp;quot; overhead and no need to run from ALT-LCD. To do that, we need all instructions (and operands!) we use to be ASCII 32 (printable space) or higher.&lt;br /&gt;
&lt;br /&gt;
So to avoid problems we instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  PUSH H ; $E5 &amp;gt;5&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  XCHG   ; $EB &amp;gt;;&lt;br /&gt;
  LHLI   ; $ED &amp;gt;=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; we&#039;re going to set the 224 ($E0) register to 1 to switch in the option rom&lt;br /&gt;
  XRA A  ; $AF :?  &lt;br /&gt;
  INR A  ; $3C 3&amp;lt;&lt;br /&gt;
&lt;br /&gt;
; disable interrupts so the hardware won&#039;t interrupt us. I’m not sure if this is actually necessary, since Option ROMs have their own interrupt handlers.&lt;br /&gt;
  DI     ; $F3 ?3&lt;br /&gt;
&lt;br /&gt;
; Switch in the option ROM&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0  &lt;br /&gt;
&lt;br /&gt;
; L &amp;lt;- option ROM byte referenced by HL&lt;br /&gt;
  MOV L,M ; $6E 6&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Switch back to the standard ROM (same I/O register as we used to enable, but with A=0 instead of A=1)&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0&lt;br /&gt;
&lt;br /&gt;
; restore interrupts&lt;br /&gt;
  EI      ; $FB ?;&lt;br /&gt;
&lt;br /&gt;
; load the peeked value into HL (high byte is always zero)&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  MOV H,A ; $67 67&lt;br /&gt;
&lt;br /&gt;
; Address of parameter array (references the first parameter) is on stack, restore it&lt;br /&gt;
  POP D   ; $D1 =1&lt;br /&gt;
&lt;br /&gt;
; pass the peeked value as the return value&lt;br /&gt;
  SHLI    ; $D9 =9&lt;br /&gt;
&lt;br /&gt;
; return to the BASIC interpreter&lt;br /&gt;
  RET     ; $C9 &amp;lt;9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full assembly:&lt;br /&gt;
&lt;br /&gt;
  PUSH H ; $E5 &amp;gt;5&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  XCHG   ; $EB &amp;gt;;&lt;br /&gt;
  LHLI   ; $ED &amp;gt;=&lt;br /&gt;
  XRA A  ; $AF :?  &lt;br /&gt;
  INR A  ; $3C 3&amp;lt;&lt;br /&gt;
  DI     ; $F3 ?3&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0  &lt;br /&gt;
  MOV L,M ; $6E 6&amp;gt;&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0&lt;br /&gt;
  EI      ; $FB ?;&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  MOV H,A ; $67 67&lt;br /&gt;
  POP D   ; $D1 =1&lt;br /&gt;
  SHLI    ; $D9 =9&lt;br /&gt;
  RET     ; $C9 &amp;lt;9&lt;br /&gt;
&lt;br /&gt;
That works out to 20 bytes of machine code.&lt;br /&gt;
&lt;br /&gt;
Here’s a 7-bit ASCII encoded BASIC program that modifies an embedded string to hold the subroutine. Run it once, and it will do the work of converting the Funny Hex into a safe binary string (note I had to split the Funny Hex string to avoid a Mediawiki crash).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100 DEFINT A-K:DEFSTR S-Z&lt;br /&gt;
105 U=&amp;quot;####################&amp;quot;&lt;br /&gt;
110 S=&amp;quot;&amp;gt;52323&amp;gt;;&amp;gt;=:?3&amp;lt;&amp;quot;+&amp;quot;?3=3&amp;gt;06&amp;gt;:?=3&amp;gt;0?;:?67=1=9&amp;lt;9#&amp;quot;&lt;br /&gt;
112 K=256%&lt;br /&gt;
120 A=VARPTR(S)+1:A=PEEK(A)+K*(PEEK(A+1)+K*(PEEK(A+1)&amp;gt;127)):T=&amp;quot;&amp;quot;:C=0&lt;br /&gt;
125 D=VARPTR(U)+1:D=PEEK(D)+K*(PEEK(D+1)+K*(PEEK(D+1)&amp;gt;127))&lt;br /&gt;
126 E=D&lt;br /&gt;
130 C=PEEK(A)-48:IFC=-13GOTO160:ELSEC=16*C+PEEK(A+1)-48:T=T+CHR$(C):A=A+2:POKEE,C:E=E+1:GOTO 130&lt;br /&gt;
160 REM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run it and LIST it, and line 105 will now look like this:&lt;br /&gt;
&lt;br /&gt;
[[File:OptROMPeek.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Very compact… although we used a POKE loop to produce it (to avoid having to type graphic characters), you don’t need to keep the POKEr. Think of it as bootstrap, or a stage rocket. So now you can remove lines 110, 120, 126, 130, retaining the execute in place string ML and the CALL address computation.&lt;br /&gt;
&lt;br /&gt;
Now to try it… add some test code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
170 DIMP%(2)&lt;br /&gt;
180 P%(1)=3&lt;br /&gt;
190 CALL D,0,VARPTR(P%(0))&lt;br /&gt;
200 PRINTP%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This code declares a parameter array, sets the Option ROM address to peek to 3, and does the CALL. The PEEK’d value is returned in P%(0).&lt;br /&gt;
&lt;br /&gt;
The full BASIC sample code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100 DEFINT A-K:DEFSTR S-Z&lt;br /&gt;
105 U=&amp;quot;####################&amp;quot;&lt;br /&gt;
110 S=&amp;quot;&amp;gt;52323&amp;gt;;&amp;gt;=:?3&amp;lt;&amp;quot;+&amp;quot;?3=3&amp;gt;06&amp;gt;:?=3&amp;gt;0?;:?67=1=9&amp;lt;9#&amp;quot;:K=256%&lt;br /&gt;
120 A=VARPTR(S)+1:A=PEEK(A)+K*(PEEK(A+1)+K*(PEEK(A+1)&amp;gt;127)):T=&amp;quot;&amp;quot;:C=0&lt;br /&gt;
125 D=VARPTR(U)+1:D=PEEK(D)+K*(PEEK(D+1)+K*(PEEK(D+1)&amp;gt;127)):E=D&lt;br /&gt;
130 C=PEEK(A)-48:IFC=-13GOTO160:ELSEC=16*C+PEEK(A+1)-48:T=T+CHR$(C):A=A+2:POKEE,C:E=E+1:GOTO 130&lt;br /&gt;
160 REM&lt;br /&gt;
170 DIMP%(2)&lt;br /&gt;
180 P%(1)=3&lt;br /&gt;
190 CALLD,0,VARPTR(P%(0))&lt;br /&gt;
200 PRINTP%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the made code in Unicode, I guess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100 DEFINT A-K:DEFSTR S-Z&lt;br /&gt;
105 U=&amp;quot;å##ëí¯&amp;lt;óÓàn¯Óàû¯gÑÙÉ&amp;quot;&lt;br /&gt;
112 K=256%&lt;br /&gt;
125 D=VARPTR(U)+1:D=PEEK(D)+K*(PEEK(D+1)+K*(PEEK(D+1)&amp;gt;127))&lt;br /&gt;
160 REM&lt;br /&gt;
170 DIMP%(2)&lt;br /&gt;
180 P%(1)=3&lt;br /&gt;
190 CALLD,0,VARPTR(P%(0))&lt;br /&gt;
200 PRINTP%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this code does seem to paste right into CloudT, CLOAD and run. There (to Unicode) and Back Again.&lt;br /&gt;
&lt;br /&gt;
Other possible approaches would be to copy a whole 16-bit word from the Option ROM rather than just a byte at a time. Or even better, you could pass a source offset, a buffer address and size to copy from the Option ROM in one fell swoop. Or maybe you want the output already in hex, ready to display or dump out the serial port. I leave these enhancements as an exercise for the reader. &lt;br /&gt;
&lt;br /&gt;
Also you may want to try building safe ML strings by hand. It’s possible! You will want to make a table for yourself of all the instruction opcodes, including a cheat sheet of how to type graphical characters. You can have a look at the [[8085_Reference]] for the full instruction set.&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Peeking_the_Option_ROM_From_a_BASIC_Program&amp;diff=4230</id>
		<title>Peeking the Option ROM From a BASIC Program</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Peeking_the_Option_ROM_From_a_BASIC_Program&amp;diff=4230"/>
		<updated>2022-12-22T08:24:46Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The question came up on Facebook as to whether you can read the contents of an Option ROM from BASIC. The short answer is not really, or at least, not without some work.&lt;br /&gt;
&lt;br /&gt;
Why? The 8085 has a 65536 byte address space. That space is apportioned between ROM at the bottom and RAM at the top. The 32K Option ROM, when enabled, occupies the same address space as the 32K main ROM. When the Option ROM is running, the BASIC ROM isn’t, and vice versa,, because they all their jumps, internal data references and interrupt handlers are located to execute in the same space: the lower 32,768 bytes of the 8085 CPU’s address space. The upper 32K of the address space is permanently devoted to the RAM.&lt;br /&gt;
&lt;br /&gt;
OK, well, BASIC has an OUT I/O routine and BASIC has a PEEK routine. To switch to the option ROM, you OUT 1 to I/O register 224. To switch back you OUT 0 to I/O register 224. So knowing just enough to get ourselves in trouble, a naive approach to PEEKing the option ROM would be:&lt;br /&gt;
  OUT 224,1:?PEEK(0): OUT224,0&lt;br /&gt;
to print the first byte of the Option ROM, and because I&#039;m almost clever, I of course switch back to the Main ROM at the end of it like a good BASIC citizen.&lt;br /&gt;
&lt;br /&gt;
Workey? No. No workey.&lt;br /&gt;
&lt;br /&gt;
The problem is that the BASIC interpreter will abruptly disappear with OUT 224,1. Boom. Poof. Gone. So the BASIC interpreter loop that executes your BASIC program line by line, token by token, will never get to anything after the first OUT... it will instead lock-up or, perhaps, crash spectacularly.&lt;br /&gt;
&lt;br /&gt;
Because of that, I don&#039;t think there&#039;s any way to PEEK the option ROM from pure BASIC. But rather than let that hurdle stop us, instead, we need to contrive some machine code with no ROM dependencies and embed it in our BASIC program. This code will run completely from RAM, which always runs from the same place, so it can swap the standard ROM out and the Option ROM in without causing a crash.&lt;br /&gt;
&lt;br /&gt;
So we’re writing a machine language (ML) subroutine. We can interface ML with BASIC. BASIC gives us a way to invoke a ML subroutine, the “CALL” function. We will design a routine we can CALL, passing along the address of the Option ROM location we want, and get back the byte value that is at that offset in the Option ROM.&lt;br /&gt;
&lt;br /&gt;
How does CALL work? The CALL statement takes three parameters: a subroutine entry point, an 8-bit parameter, and a 16-bit parameter. The subroutine is called, and the parameters are passed in the A and HL registers, respectively. At the end of the subroutine, CALL’ed code must effectuate return to the BASIC interpreter, leaving the stack as it found it!.&lt;br /&gt;
&lt;br /&gt;
Clearly, we need to pass the address to PEEK. The 16-bit parameter could be good for that. We don’t have any use for an 8-bit input to our subroutine. But what about passing back the byte &amp;quot;PEEKed&amp;quot;? That&#039;s an &amp;quot;out&amp;quot; parameter. It sure would have been great if Microsoft had made CALL return a 8 or 16-bit value.&lt;br /&gt;
&lt;br /&gt;
But it is not so, and the BASIC ROM is literally etched in stone for many of our machines.&lt;br /&gt;
&lt;br /&gt;
Oh well. No point in crying into our cereal about it... we just need to put our thinking cap back on. What we can do instead is pass a parameter array of integers as our 16-bit value. That is, instead of passing one value, we pass a value that refers (a reference) to a modifiable object.&lt;br /&gt;
&lt;br /&gt;
A single array reference can convey an arbitrary number of values and pointers. And since we&#039;re passing a reference to the array object, the variables at each index of the array can be modified by the ML routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DIM P%(2)&lt;br /&gt;
&#039; P%(0): return value&lt;br /&gt;
P%(1) = 1000 : &#039; Address in Option ROM to peek&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So assuming our subroutine is at address PK% (we’ll get to that later), an invocation of our subroutine to find out what’s at address 1000 of the Option ROM would look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
P%(1) = 1000: CALL PK%, VARPTR(P%(0)): ?P%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
So now that we know what we want the routine to do, and how we will invoke it, let&#039;s code it.&lt;br /&gt;
&lt;br /&gt;
For each line I will show the assembly instruction, as well as the hex and what I call Funny Hex for each instruction. Funny Hex is like hex but ABCDEF are represented by :;&amp;lt;=&amp;gt;? , for simplified conversion. Any character in Funny Hex, you can subtract 48 (ASCII encoding of zero) and it will give you a value between 0 and 15&lt;br /&gt;
&lt;br /&gt;
First I need to get resolve a level of indirection on the value of HL to load the “address” parameter into the HL register. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; HL starts as the address of the integer parameter array, in C-speak, &amp;amp;param[0]&lt;br /&gt;
; Load HL with param[1] since it&#039;s the address to peek&lt;br /&gt;
  XCHG  ; $EB  &amp;gt;;&lt;br /&gt;
  INX D ; $13  13  ; uh oh, need a listable alternative&lt;br /&gt;
  INX D ; $13  13  ; again&lt;br /&gt;
  LHLI  ; $ED  &amp;gt;=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That was my first cut at that... and it would work, but $13 is an unprintable ASCII control character (^S / DC3/ XOFF). We have an opportunity here to craft code that can be embedded directly into a BASIC string, execute in place, and have no LIST or EDIT issues. That makes for much shorter BASIC code, with no &amp;quot;poke loop&amp;quot; overhead and no need to run from ALT-LCD. To do that, we need all instructions (and operands!) we use to be 32 (printable space) or higher.&lt;br /&gt;
&lt;br /&gt;
So to avoid problems we instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  PUSH H ; $E5 &amp;gt;5&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  XCHG   ; $EB &amp;gt;;&lt;br /&gt;
  LHLI   ; $ED &amp;gt;=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; we&#039;re going to set the 224 ($E0) register to 1 to switch in the option rom&lt;br /&gt;
  XRA A  ; $AF :?  &lt;br /&gt;
  INR A  ; $3C 3&amp;lt;&lt;br /&gt;
&lt;br /&gt;
; disable interrupts so the hardware won&#039;t interrupt us. I’m not sure if this is actually necessary, since Option ROMs have their own interrupt handlers.&lt;br /&gt;
  DI     ; $F3 ?3&lt;br /&gt;
&lt;br /&gt;
; Switch in the option ROM&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0  &lt;br /&gt;
&lt;br /&gt;
; L &amp;lt;- option ROM byte referenced by HL&lt;br /&gt;
  MOV L,M ; $6E 6&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Switch back to the standard ROM (same I/O register as we used to enable, but with A=0 instead of A=1)&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0&lt;br /&gt;
&lt;br /&gt;
; restore interrupts&lt;br /&gt;
  EI      ; $FB ?;&lt;br /&gt;
&lt;br /&gt;
; load the peeked value into HL (high byte is always zero)&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  MOV H,A ; $67 67&lt;br /&gt;
&lt;br /&gt;
; Address of parameter array (references the first parameter) is on stack, restore it&lt;br /&gt;
  POP D   ; $D1 =1&lt;br /&gt;
&lt;br /&gt;
; pass the peeked value as the return value&lt;br /&gt;
  SHLI    ; $D9 =9&lt;br /&gt;
&lt;br /&gt;
; return to the BASIC interpreter&lt;br /&gt;
  RET     ; $C9 &amp;lt;9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full assembly:&lt;br /&gt;
&lt;br /&gt;
  PUSH H ; $E5 &amp;gt;5&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  XCHG   ; $EB &amp;gt;;&lt;br /&gt;
  LHLI   ; $ED &amp;gt;=&lt;br /&gt;
  XRA A  ; $AF :?  &lt;br /&gt;
  INR A  ; $3C 3&amp;lt;&lt;br /&gt;
  DI     ; $F3 ?3&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0  &lt;br /&gt;
  MOV L,M ; $6E 6&amp;gt;&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0&lt;br /&gt;
  EI      ; $FB ?;&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  MOV H,A ; $67 67&lt;br /&gt;
  POP D   ; $D1 =1&lt;br /&gt;
  SHLI    ; $D9 =9&lt;br /&gt;
  RET     ; $C9 &amp;lt;9&lt;br /&gt;
&lt;br /&gt;
That works out to 20 bytes of machine code.&lt;br /&gt;
&lt;br /&gt;
Here’s a 7-bit ASCII encoded BASIC program that modifies an embedded string to hold the subroutine. Run it once, and it will do the work of converting the Funny Hex into a safe binary string (note I had to split the Funny Hex string to avoid a Mediawiki crash).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100 DEFINT A-K:DEFSTR S-Z&lt;br /&gt;
105 U=&amp;quot;####################&amp;quot;&lt;br /&gt;
110 S=&amp;quot;&amp;gt;52323&amp;gt;;&amp;gt;=:?3&amp;lt;&amp;quot;+&amp;quot;?3=3&amp;gt;06&amp;gt;:?=3&amp;gt;0?;:?67=1=9&amp;lt;9#&amp;quot;&lt;br /&gt;
112 K=256%&lt;br /&gt;
120 A=VARPTR(S)+1:A=PEEK(A)+K*(PEEK(A+1)+K*(PEEK(A+1)&amp;gt;127)):T=&amp;quot;&amp;quot;:C=0&lt;br /&gt;
125 D=VARPTR(U)+1:D=PEEK(D)+K*(PEEK(D+1)+K*(PEEK(D+1)&amp;gt;127))&lt;br /&gt;
126 E=D&lt;br /&gt;
130 C=PEEK(A)-48:IFC=-13GOTO160:ELSEC=16*C+PEEK(A+1)-48:T=T+CHR$(C):A=A+2:POKEE,C:E=E+1:GOTO 130&lt;br /&gt;
160 REM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run it and LIST it, and line 105 will now look like this:&lt;br /&gt;
&lt;br /&gt;
[[File:OptROMPeek.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Very compact… although we used a POKE loop to produce it (to avoid having to type graphic characters), you don’t need to keep the POKEr. Think of it as bootstrap, or a stage rocket. So now you can remove lines 110, 120, 126, 130, retaining the execute in place string ML and the CALL address computation.&lt;br /&gt;
&lt;br /&gt;
Now to try it… add some test code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
170 DIMP%(2)&lt;br /&gt;
180 P%(1)=3&lt;br /&gt;
190 CALL D,0,VARPTR(P%(0))&lt;br /&gt;
200 PRINTP%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This code declares a parameter array, sets the Option ROM address to peek to 3, and does the CALL. The PEEK’d value is returned in P%(0).&lt;br /&gt;
&lt;br /&gt;
The full BASIC sample code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100 DEFINT A-K:DEFSTR S-Z&lt;br /&gt;
105 U=&amp;quot;####################&amp;quot;&lt;br /&gt;
110 S=&amp;quot;&amp;gt;52323&amp;gt;;&amp;gt;=:?3&amp;lt;&amp;quot;+&amp;quot;?3=3&amp;gt;06&amp;gt;:?=3&amp;gt;0?;:?67=1=9&amp;lt;9#&amp;quot;:K=256%&lt;br /&gt;
120 A=VARPTR(S)+1:A=PEEK(A)+K*(PEEK(A+1)+K*(PEEK(A+1)&amp;gt;127)):T=&amp;quot;&amp;quot;:C=0&lt;br /&gt;
125 D=VARPTR(U)+1:D=PEEK(D)+K*(PEEK(D+1)+K*(PEEK(D+1)&amp;gt;127)):E=D&lt;br /&gt;
130 C=PEEK(A)-48:IFC=-13GOTO160:ELSEC=16*C+PEEK(A+1)-48:T=T+CHR$(C):A=A+2:POKEE,C:E=E+1:GOTO 130&lt;br /&gt;
160 REM&lt;br /&gt;
170 DIMP%(2)&lt;br /&gt;
180 P%(1)=3&lt;br /&gt;
190 CALLD,0,VARPTR(P%(0))&lt;br /&gt;
200 PRINTP%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the made code in Unicode, I guess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100 DEFINT A-K:DEFSTR S-Z&lt;br /&gt;
105 U=&amp;quot;å##ëí¯&amp;lt;óÓàn¯Óàû¯gÑÙÉ&amp;quot;&lt;br /&gt;
112 K=256%&lt;br /&gt;
125 D=VARPTR(U)+1:D=PEEK(D)+K*(PEEK(D+1)+K*(PEEK(D+1)&amp;gt;127))&lt;br /&gt;
160 REM&lt;br /&gt;
170 DIMP%(2)&lt;br /&gt;
180 P%(1)=3&lt;br /&gt;
190 CALLD,0,VARPTR(P%(0))&lt;br /&gt;
200 PRINTP%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this code does seem to paste right into CloudT, CLOAD and run. There (to Unicode) and Back Again.&lt;br /&gt;
&lt;br /&gt;
Other possible approaches would be to copy a whole 16-bit word from the Option ROM rather than just a byte at a time. Or even better, you could pass an source offset, a buffer address and size to copy from the Option ROM in one fell swoop. Or maybe you want the output already in hex, ready to display or dump out the serial port. I leave these enhancements as an exercise for the reader. &lt;br /&gt;
&lt;br /&gt;
Also you may want to try building safe ML strings by hand. It’s possible! You will want to make a table for yourself of all the instruction opcodes, including a cheat sheet of how to type graphical characters. You can have a look at the [[8085_Reference]] for the full instruction set.&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Peeking_the_Option_ROM_From_a_BASIC_Program&amp;diff=4229</id>
		<title>Peeking the Option ROM From a BASIC Program</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Peeking_the_Option_ROM_From_a_BASIC_Program&amp;diff=4229"/>
		<updated>2022-12-22T08:21:24Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The question came up on Facebook as to whether you can read the contents of an Option ROM from BASIC. The short answer is not really, or at least, not without some work.&lt;br /&gt;
&lt;br /&gt;
Why? The 8085 has a 65536 byte address space. That space is apportioned between ROM at the bottom and RAM at the top. The 32K Option ROM, when enabled, occupies the same address space as the 32K main ROM. When the Option ROM is running, the BASIC ROM isn’t, and vice versa,, because they all their jumps, internal data references and interrupt handlers are located to execute in the same space: the lower 32,768 bytes of the 8085 CPU’s address space. The upper 32K of the address space is permanently devoted to the RAM.&lt;br /&gt;
&lt;br /&gt;
OK, well, BASIC has an OUT I/O routine and BASIC has a PEEK routine. To switch to the option ROM, you OUT 1 to I/O register 224. To switch back you OUT 0 to I/O register 224. So knowing just enough to get ourselves in trouble, a naive approach to PEEKing the option ROM would be:&lt;br /&gt;
  OUT 224,1:?PEEK(0): OUT224,0&lt;br /&gt;
to print the first byte of the Option ROM, and because I&#039;m almost clever, I of course switch back to the Main ROM at the end of it like a good BASIC citizen.&lt;br /&gt;
&lt;br /&gt;
Workey? No. No workey.&lt;br /&gt;
&lt;br /&gt;
The problem is that the BASIC interpreter will abruptly disappear with OUT 224,1. Boom. Poof. Gone. So the BASIC interpreter loop that executes your BASIC program line by line, token by token, will never get to anything after the first OUT... it will instead lock-up or, perhaps, crash spectacularly.&lt;br /&gt;
&lt;br /&gt;
Because of that, I don&#039;t think there&#039;s any way to PEEK the option ROM from pure BASIC. But rather than let that hurdle stop us, instead, we need to contrive some machine code with no ROM dependencies and embed it in our BASIC program. This code will run completely from RAM, which always runs from the same place, so it can swap the standard ROM out and the Option ROM in without causing a crash.&lt;br /&gt;
&lt;br /&gt;
So we’re writing a machine language (ML) subroutine. We can interface ML with BASIC. BASIC gives us a way to invoke a ML subroutine, the “CALL” function. We will design a routine we can CALL, passing along the address of the Option ROM location we want, and get back the byte value that is at that offset in the Option ROM.&lt;br /&gt;
&lt;br /&gt;
How does CALL work? The CALL statement takes three parameters: a subroutine entry point, an 8-bit parameter, and a 16-bit parameter. The subroutine is called, and the parameters are passed in the A and HL registers, respectively. At the end of the subroutine, CALL’ed code must effectuate return to the BASIC interpreter, leaving the stack as it found it!.&lt;br /&gt;
&lt;br /&gt;
Clearly, we need to pass the address to PEEK. The 16-bit parameter could be good for that. We don’t have any use for an 8-bit input to our subroutine. But what about passing back the byte &amp;quot;PEEKed&amp;quot;? That&#039;s an &amp;quot;out&amp;quot; parameter. It sure would have been great if Microsoft had made CALL return a 8 or 16-bit value.&lt;br /&gt;
&lt;br /&gt;
But it is not so, and the BASIC ROM is literally etched in stone for many of our machines.&lt;br /&gt;
&lt;br /&gt;
Oh well. No point in crying into our cereal about it... we just need to put our thinking cap back on. What we can do instead is pass a parameter array of integers as our 16-bit value. That is, instead of passing one value, we pass a value that refers (a reference) to a modifiable object.&lt;br /&gt;
&lt;br /&gt;
A single array reference can convey an arbitrary number of values and pointers. And since we&#039;re passing a reference to the array object, the variables at each index of the array can be modified by the ML routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DIM P%(2)&lt;br /&gt;
&#039; P%(0): return value&lt;br /&gt;
P%(1) = 1000 : &#039; Address in Option ROM to peek&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So assuming our subroutine is at address PK% (we’ll get to that later), an invocation of our subroutine to find out what’s at address 1000 of the Option ROM would look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
P%(1) = 1000: CALL PK%, VARPTR(P%(0)): ?P%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
So now that we know what we want the routine to do, and how we will invoke it, let&#039;s code it.&lt;br /&gt;
&lt;br /&gt;
For each line I will show the assembly instruction, as well as the hex and what I call Funny Hex for each instruction. Funny Hex is like hex but ABCDEF are represented by :;&amp;lt;=&amp;gt;? , for simplified conversion. Any character in Funny Hex, you can subtract 48 (ASCII encoding of zero) and it will give you a value between 0 and 15&lt;br /&gt;
&lt;br /&gt;
First I need to get resolve a level of indirection on the value of HL to load the “address” parameter into the HL register. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; HL starts as the address of the integer parameter array, in C-speak, &amp;amp;param[0]&lt;br /&gt;
; Load HL with param[1] since it&#039;s the address to peek&lt;br /&gt;
  XCHG  ; $EB  &amp;gt;;&lt;br /&gt;
  INX D ; $13  13  ; uh oh, need a listable alternative&lt;br /&gt;
  INX D ; $13  13  ; again&lt;br /&gt;
  LHLI  ; $ED  &amp;gt;=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That was my first cut at that... and it would work, but $13 is an unprintable ASCII control character (^S / DC3/ XOFF). We have an opportunity here to craft code that can be embedded directly into a BASIC string, execute in place, and have no LIST or EDIT issues. That makes for much shorter BASIC code, with no &amp;quot;poke loop&amp;quot; overhead and no need to run from ALT-LCD. To do that, we need all instructions (and operands!) we use to be 32 (printable space) or higher.&lt;br /&gt;
&lt;br /&gt;
So to avoid problems we instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  PUSH H ; $E5 &amp;gt;5&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  XCHG   ; $EB &amp;gt;;&lt;br /&gt;
  LHLI   ; $ED &amp;gt;=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; we&#039;re going to set the 224 ($E0) register to 1 to switch in the option rom&lt;br /&gt;
  XRA A  ; $AF :?  &lt;br /&gt;
  INR A  ; $3C 3&amp;lt;&lt;br /&gt;
&lt;br /&gt;
; disable interrupts so the hardware won&#039;t interrupt us. I’m not sure if this is actually necessary, since Option ROMs have their own interrupt handlers.&lt;br /&gt;
  DI     ; $F3 ?3&lt;br /&gt;
&lt;br /&gt;
; Switch in the option ROM&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0  &lt;br /&gt;
&lt;br /&gt;
; L &amp;lt;- option ROM byte referenced by HL&lt;br /&gt;
  MOV L,M ; $6E 6&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Switch back to the standard ROM (same I/O register as we used to enable, but with A=0 instead of A=1)&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0&lt;br /&gt;
&lt;br /&gt;
; restore interrupts&lt;br /&gt;
  EI      ; $FB ?;&lt;br /&gt;
&lt;br /&gt;
; load the peeked value into HL (high byte is always zero)&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  MOV H,A ; $67 67&lt;br /&gt;
&lt;br /&gt;
; Address of parameter array (references the first parameter) is on stack, restore it&lt;br /&gt;
  POP D   ; $D1 =1&lt;br /&gt;
&lt;br /&gt;
; pass the peeked value as the return value&lt;br /&gt;
  SHLI    ; $D9 =9&lt;br /&gt;
&lt;br /&gt;
; return to the BASIC interpreter&lt;br /&gt;
  RET     ; $C9 &amp;lt;9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full assembly:&lt;br /&gt;
&lt;br /&gt;
  PUSH H ; $E5 &amp;gt;5&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  XCHG   ; $EB &amp;gt;;&lt;br /&gt;
  LHLI   ; $ED &amp;gt;=&lt;br /&gt;
  XRA A  ; $AF :?  &lt;br /&gt;
  INR A  ; $3C 3&amp;lt;&lt;br /&gt;
  DI     ; $F3 ?3&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0  &lt;br /&gt;
  MOV L,M ; $6E 6&amp;gt;&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0&lt;br /&gt;
  EI      ; $FB ?;&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  MOV H,A ; $67 67&lt;br /&gt;
  POP D   ; $D1 =1&lt;br /&gt;
  SHLI    ; $D9 =9&lt;br /&gt;
  RET     ; $C9 &amp;lt;9&lt;br /&gt;
&lt;br /&gt;
That works out to 20 bytes of machine code.&lt;br /&gt;
&lt;br /&gt;
Here’s a 7-bit ASCII encoded BASIC program that modifies an embedded string to hold the subroutine. Run it once, and it will do the work of converting the Funny Hex into a safe binary string (note I had to split the Funny Hex string to avoid a Mediawiki crash).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100 DEFINT A-K:DEFSTR S-Z&lt;br /&gt;
105 U=&amp;quot;####################&amp;quot;&lt;br /&gt;
110 S=&amp;quot;&amp;gt;52323&amp;gt;;&amp;gt;=:?3&amp;lt;&amp;quot;+&amp;quot;?3=3&amp;gt;06&amp;gt;:?=3&amp;gt;0?;:?67=1=9&amp;lt;9#&amp;quot;&lt;br /&gt;
112 K=256%&lt;br /&gt;
120 A=VARPTR(S)+1:A=PEEK(A)+K*(PEEK(A+1)+K*(PEEK(A+1)&amp;gt;127)):T=&amp;quot;&amp;quot;:C=0&lt;br /&gt;
125 D=VARPTR(U)+1:D=PEEK(D)+K*(PEEK(D+1)+K*(PEEK(D+1)&amp;gt;127))&lt;br /&gt;
126 E=D&lt;br /&gt;
130 C=PEEK(A)-48:IFC=-13GOTO160:ELSEC=16*C+PEEK(A+1)-48:T=T+CHR$(C):A=A+2:POKEE,C:E=E+1:GOTO 130&lt;br /&gt;
160 REM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Peeking_the_Option_ROM_From_a_BASIC_Program&amp;diff=4228</id>
		<title>Peeking the Option ROM From a BASIC Program</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Peeking_the_Option_ROM_From_a_BASIC_Program&amp;diff=4228"/>
		<updated>2022-12-22T08:05:52Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Created page with &amp;quot;The question came up on Facebook as to whether you can read the contents of an Option ROM from BASIC. The short answer is not really, or at least, not without some work.  Why?...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The question came up on Facebook as to whether you can read the contents of an Option ROM from BASIC. The short answer is not really, or at least, not without some work.&lt;br /&gt;
&lt;br /&gt;
Why? The 8085 has a 65536 byte address space. That space is apportioned between ROM at the bottom and RAM at the top. The 32K Option ROM, when enabled, occupies the same address space as the 32K main ROM. When the Option ROM is running, the BASIC ROM isn’t, and vice versa,, because they all their jumps, internal data references and interrupt handlers are located to execute in the same space: the lower 32,768 bytes of the 8085 CPU’s address space. The upper 32K of the address space is permanently devoted to the RAM.&lt;br /&gt;
&lt;br /&gt;
OK, well, BASIC has an OUT I/O routine and BASIC has a PEEK routine. To switch to the option ROM, you OUT 1 to I/O register 224. To switch back you OUT 0 to I/O register 224. So knowing just enough to get ourselves in trouble, a naive approach to PEEKing the option ROM would be:&lt;br /&gt;
  OUT 224,1:?PEEK(0): OUT224,0&lt;br /&gt;
to print the first byte of the Option ROM, and because I&#039;m almost clever, I of course switch back to the Main ROM at the end of it like a good BASIC citizen.&lt;br /&gt;
&lt;br /&gt;
Workey? No. No workey.&lt;br /&gt;
&lt;br /&gt;
The problem is that the BASIC interpreter will abruptly disappear with OUT 224,1. Boom. Poof. Gone. So the BASIC interpreter loop that executes your BASIC program line by line, token by token, will never get to anything after the first OUT... it will instead lock-up or, perhaps, crash spectacularly.&lt;br /&gt;
&lt;br /&gt;
Because of that, I don&#039;t think there&#039;s any way to PEEK the option ROM from pure BASIC. But rather than let that hurdle stop us, instead, we need to contrive some machine code with no ROM dependencies and embed it in our BASIC program. This code will run completely from RAM, which always runs from the same place, so it can swap the standard ROM out and the Option ROM in without causing a crash.&lt;br /&gt;
&lt;br /&gt;
So we’re writing a machine language (ML) subroutine. We can interface ML with BASIC. BASIC gives us a way to invoke a ML subroutine, the “CALL” function. We will design a routine we can CALL, passing along the address of the Option ROM location we want, and get back the byte value that is at that offset in the Option ROM.&lt;br /&gt;
&lt;br /&gt;
How does CALL work? The CALL statement takes three parameters: a subroutine entry point, an 8-bit parameter, and a 16-bit parameter. The subroutine is called, and the parameters are passed in the A and HL registers, respectively. At the end of the subroutine, CALL’ed code must effectuate return to the BASIC interpreter, leaving the stack as it found it!.&lt;br /&gt;
&lt;br /&gt;
Clearly, we need to pass the address to PEEK. The 16-bit parameter could be good for that. We don’t have any use for an 8-bit input to our subroutine. But what about passing back the byte &amp;quot;PEEKed&amp;quot;? That&#039;s an &amp;quot;out&amp;quot; parameter. It sure would have been great if Microsoft had made CALL return a 8 or 16-bit value.&lt;br /&gt;
&lt;br /&gt;
But it is not so, and the BASIC ROM is literally etched in stone for many of our machines.&lt;br /&gt;
&lt;br /&gt;
Oh well. No point in crying into our cereal about it... we just need to put our thinking cap back on. What we can do instead is pass a parameter array of integers as our 16-bit value. That is, instead of passing one value, we pass a value that refers (a reference) to a modifiable object.&lt;br /&gt;
&lt;br /&gt;
A single array reference can convey an arbitrary number of values and pointers. And since we&#039;re passing a reference to the array object, the variables at each index of the array can be modified by the ML routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DIM P%(2)&lt;br /&gt;
&#039; P%(0): return value&lt;br /&gt;
P%(1) = 1000 : &#039; Address in Option ROM to peek&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So assuming our subroutine is at address PK% (we’ll get to that later), an invocation of our subroutine to find out what’s at address 1000 of the Option ROM would look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
P%(1) = 1000: CALL PK%, VARPTR(P%(0)): ?P%(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
So now that we know what we want the routine to do, and how we will invoke it, let&#039;s code it.&lt;br /&gt;
&lt;br /&gt;
For each line I will show the assembly instruction, as well as the hex and what I call Funny Hex for each instruction. Funny Hex is like hex but ABCDEF are represented by :;&amp;lt;=&amp;gt;? , for simplified conversion. Any character in Funny Hex, you can subtract 48 (ASCII encoding of zero) and it will give you a value between 0 and 15&lt;br /&gt;
&lt;br /&gt;
First I need to get resolve a level of indirection on the value of HL to load the “address” parameter into the HL register. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; HL starts as the address of the integer parameter array, in C-speak, &amp;amp;param[0]&lt;br /&gt;
; Load HL with param[1] since it&#039;s the address to peek&lt;br /&gt;
  XCHG  ; $EB  &amp;gt;;&lt;br /&gt;
  INX D ; $13  13  ; uh oh, need a listable alternative&lt;br /&gt;
  INX D ; $13  13  ; again&lt;br /&gt;
  LHLI  ; $ED  &amp;gt;=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That was my first cut at that... and it would work, but $13 is an unprintable ASCII control character (^S / DC3/ XOFF). We have an opportunity here to craft code that can be embedded directly into a BASIC string, execute in place, and have no LIST or EDIT issues. That makes for much shorter BASIC code, with no &amp;quot;poke loop&amp;quot; overhead and no need to run from ALT-LCD. To do that, we need all instructions (and operands!) we use to be 32 (printable space) or higher.&lt;br /&gt;
&lt;br /&gt;
So to avoid problems we instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  PUSH H ; $E5 &amp;gt;5&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  XCHG   ; $EB &amp;gt;;&lt;br /&gt;
  LHLI   ; $ED &amp;gt;=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; we&#039;re going to set the 224 ($E0) register to 1 to switch in the option rom&lt;br /&gt;
  XRA A  ; $AF :?  &lt;br /&gt;
  INR A  ; $3C 3&amp;lt;&lt;br /&gt;
&lt;br /&gt;
; disable interrupts so the hardware won&#039;t interrupt us. I’m not sure if this is actually necessary, since Option ROMs have their own interrupt handlers.&lt;br /&gt;
  DI     ; $F3 ?3&lt;br /&gt;
&lt;br /&gt;
; Switch in the option ROM&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0  &lt;br /&gt;
&lt;br /&gt;
; L &amp;lt;- option ROM byte referenced by HL&lt;br /&gt;
  MOV L,M ; $6E 6&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Switch back to the standard ROM (same I/O register as we used to enable, but with A=0 instead of A=1)&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0&lt;br /&gt;
&lt;br /&gt;
; restore interrupts&lt;br /&gt;
  EI      ; $FB ?;&lt;br /&gt;
&lt;br /&gt;
; load the peeked value into HL (high byte is always zero)&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  MOV H,A ; $67 67&lt;br /&gt;
&lt;br /&gt;
; Address of parameter array (references the first parameter) is on stack, restore it&lt;br /&gt;
  POP D   ; $D1 =1&lt;br /&gt;
&lt;br /&gt;
; pass the peeked value as the return value&lt;br /&gt;
  SHLI    ; $D9 =9&lt;br /&gt;
&lt;br /&gt;
; return to the BASIC interpreter&lt;br /&gt;
  RET     ; $C9 &amp;lt;9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full assembly:&lt;br /&gt;
&lt;br /&gt;
  PUSH H ; $E5 &amp;gt;5&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  INX H  ; $23 23&lt;br /&gt;
  XCHG   ; $EB &amp;gt;;&lt;br /&gt;
  LHLI   ; $ED &amp;gt;=&lt;br /&gt;
  XRA A  ; $AF :?  &lt;br /&gt;
  INR A  ; $3C 3&amp;lt;&lt;br /&gt;
  DI     ; $F3 ?3&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0  &lt;br /&gt;
  MOV L,M ; $6E 6&amp;gt;&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  OUT 224 ; $D3 $E0 / =3 &amp;gt;0&lt;br /&gt;
  EI      ; $FB ?;&lt;br /&gt;
  XRA A   ; $AF :?&lt;br /&gt;
  MOV H,A ; $67 67&lt;br /&gt;
  POP D   ; $D1 =1&lt;br /&gt;
  SHLI    ; $D9 =9&lt;br /&gt;
  RET     ; $C9 &amp;lt;9&lt;br /&gt;
&lt;br /&gt;
That works out to 20 bytes of machine code.&lt;br /&gt;
&lt;br /&gt;
Here’s a 7-bit ASCII encoded BASIC program that modifies an embedded string to hold the subroutine. Run it once, and it will do the work of converting the Funny Hex into a safe binary string.&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=File:OptROMPeek.png&amp;diff=4227</id>
		<title>File:OptROMPeek.png</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=File:OptROMPeek.png&amp;diff=4227"/>
		<updated>2022-12-22T08:02:25Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: ML Program to PEEK the Option ROM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ML Program to PEEK the Option ROM&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=NEC_8508A&amp;diff=3281</id>
		<title>NEC 8508A</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=NEC_8508A&amp;diff=3281"/>
		<updated>2020-06-27T03:29:26Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Jhoger moved page NEC 8508A to NEC 8508A RAM/ROM Cartridge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[NEC 8508A RAM/ROM Cartridge]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=NEC_8508A_RAM/ROM_Cartridge&amp;diff=3280</id>
		<title>NEC 8508A RAM/ROM Cartridge</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=NEC_8508A_RAM/ROM_Cartridge&amp;diff=3280"/>
		<updated>2020-06-27T03:29:26Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Jhoger moved page NEC 8508A to NEC 8508A RAM/ROM Cartridge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ROM/RAM Cartridge for NEC 8500&lt;br /&gt;
&lt;br /&gt;
Can be powered by coin cell or adapter.&lt;br /&gt;
&lt;br /&gt;
[[File:NEC_8508A_ROM_Slots.jpeg|500px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Nec8508a_battery_port.jpg|500px]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=NEC_8508A_RAM/ROM_Cartridge&amp;diff=3279</id>
		<title>NEC 8508A RAM/ROM Cartridge</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=NEC_8508A_RAM/ROM_Cartridge&amp;diff=3279"/>
		<updated>2020-06-27T03:29:08Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ROM/RAM Cartridge for NEC 8500&lt;br /&gt;
&lt;br /&gt;
Can be powered by coin cell or adapter.&lt;br /&gt;
&lt;br /&gt;
[[File:NEC_8508A_ROM_Slots.jpeg|500px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Nec8508a_battery_port.jpg|500px]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=File:Nec8508a_battery_port.jpg&amp;diff=3278</id>
		<title>File:Nec8508a battery port.jpg</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=File:Nec8508a_battery_port.jpg&amp;diff=3278"/>
		<updated>2020-06-27T03:27:31Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Picture of battery port area of NEC 8508a RAM/ROM cartridge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Picture of battery port area of NEC 8508a RAM/ROM cartridge&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=NEC_8508A_RAM/ROM_Cartridge&amp;diff=3277</id>
		<title>NEC 8508A RAM/ROM Cartridge</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=NEC_8508A_RAM/ROM_Cartridge&amp;diff=3277"/>
		<updated>2020-06-27T03:26:18Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ROM/RAM Cartridge for NEC 8500&lt;br /&gt;
&lt;br /&gt;
Can be powered by coin cell or adapter.&lt;br /&gt;
&lt;br /&gt;
[[File:NEC_8508A_ROM_Slots.jpeg|500px]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=File:NEC_8508A_ROM_Slots.jpeg&amp;diff=3276</id>
		<title>File:NEC 8508A ROM Slots.jpeg</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=File:NEC_8508A_ROM_Slots.jpeg&amp;diff=3276"/>
		<updated>2020-06-27T03:24:02Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Picture of rom slots in NEC 8508A ROM/RAM cartridge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Picture of rom slots in NEC 8508A ROM/RAM cartridge&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=NEC_8508A_RAM/ROM_Cartridge&amp;diff=3275</id>
		<title>NEC 8508A RAM/ROM Cartridge</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=NEC_8508A_RAM/ROM_Cartridge&amp;diff=3275"/>
		<updated>2020-06-27T03:23:25Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Created page with &amp;quot;ROM/RAM Cartridge for NEC 8500  Can be powered by coin cell or adapter.  File:NEC_8508A_ROM_Slots.jpeg&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ROM/RAM Cartridge for NEC 8500&lt;br /&gt;
&lt;br /&gt;
Can be powered by coin cell or adapter.&lt;br /&gt;
&lt;br /&gt;
[[File:NEC_8508A_ROM_Slots.jpeg]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2984</id>
		<title>Connecting NEWDOS to Wimodem232</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2984"/>
		<updated>2020-03-29T08:17:36Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
There are various RS232 to Wifi dongles around now.&lt;br /&gt;
They allow you to establish a TCP connection to a PC from your Model T serial port.&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha offers a TCP listening mode to support direct connections. But any TPDD emulator, or a real TPDD can work if you&lt;br /&gt;
have enough software to rig it up.&lt;br /&gt;
&lt;br /&gt;
This article describes how to connect NEWDOS -&amp;gt; Wimodem232 -&amp;gt; LaddieAlpha in TCP mode.&lt;br /&gt;
&lt;br /&gt;
[http://www.club100.org/memfiles/index.php?&amp;amp;direction=0&amp;amp;order=&amp;amp;directory=Ken%20Pettit/NewDos/VER5.05 NEWDOS 5.05]&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
1. Update firmware on Wimodem232. Be aware that the Wimodem232 may switch baud rates, generally to 300 baud after this and you need to change baud rates in TELCOM to match.&lt;br /&gt;
&lt;br /&gt;
2. Up the baud on Wimodm232 to 600 baud. This is the fastest baud TELCOM can interact with Wimodem and not lose characters.&lt;br /&gt;
&lt;br /&gt;
Note that you don&#039;t HAVE to do this. But, say you need to inject a TPDD client like TEENY. To do that without running a Telnet server on my PC, I used Putty to Telnet to the Wimodem232, to the Model T at 600 baud. Then anything I paste into the Putty session is received by the Model T. In one case I used the Download function in TELCOM to capture TEENYX.DO into a file, which I then loaded into BASIC. But to do that, I needed to be at 600 baud and I needed to know the IP address of the Wimodem232.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t care to connect TO the Wimodem, and already have your TPDD client loaded, you can skip to step 5.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT&amp;lt;ENTER&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
AT*B600&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Re-enter TELCOM at 600 baud&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stat 48N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Determine your IP address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATI&lt;br /&gt;
...&lt;br /&gt;
IP:192.168.1.66&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note down your IP address.&lt;br /&gt;
&lt;br /&gt;
5. Switch baud to 19200bps for TPDD mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT*B19200&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Re-enter TELCOM at 19200bps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F8 (Bye)&lt;br /&gt;
Disconnect? Y&lt;br /&gt;
Stat 98N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Launch LaddieAlpha.EXE&lt;br /&gt;
&lt;br /&gt;
With a command prompt open, and from whatever directory you have a copy of LaddieAlpha, run it in tcp listener mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means, listen on all IP addresses at port 8085.&lt;br /&gt;
You can pick any unprivileged port, you can give a specific IP address.&lt;br /&gt;
Note: network security best practices and configuring your firewall is out of scope for this article. Depending on your operating system, you will need to ALLOW the inbound TCP connection on port 8085. Otherwise you will simply find the Wimodem232 is unable to connect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Find the IP address of your PC&lt;br /&gt;
&lt;br /&gt;
On Windows, use ipconfig, Linux, ifconfig, etc.&lt;br /&gt;
&lt;br /&gt;
In my case it was 192.168.1.85&lt;br /&gt;
&lt;br /&gt;
9. Dial LaddieAlpha&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATDT 192.168.1.85:8085&lt;br /&gt;
CONNECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
Connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Launch NEWDOS in appropriate delay mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BASIC&lt;br /&gt;
CALL 63012,2,2&lt;br /&gt;
F4 (Disk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that I sometimes have issues where this gets stuck.&lt;br /&gt;
Generally to fix I exit NEWDOS, go into TELCOM, Stat 98N1D, Term, F8-Bye, and re-launch NEWDOS with CALL 63012,2,2 and this resolves the handshake issue.&lt;br /&gt;
&lt;br /&gt;
Note Note: to run NEWDOS in delay mode, you have to use the CALL every time. Launching from TS-DOS entry on the menu will start with no delay, and it won&#039;t work!&lt;br /&gt;
&lt;br /&gt;
There is information in Ken&#039;s documentation on how to change the TS-DOS launcher to incorporate the delay.&lt;br /&gt;
&lt;br /&gt;
== Quick Launch ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a small launcher program to make connection easier. This avoids having to go into TELCOM and remember any commands.&lt;br /&gt;
Remember though, it expects the WiModem232 to already be in 19200bps mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Type in the following, using your listener&#039;s IP and port:&lt;br /&gt;
&lt;br /&gt;
10 OPEN&amp;quot;COM:98N1E&amp;quot;FOROUTPUTAS1:PRINT#1,&amp;quot;&lt;br /&gt;
ATDT 192.168.1.85:8085&amp;quot;:CLOSE1:CALL63013&lt;br /&gt;
,2,2:MENU&lt;br /&gt;
&lt;br /&gt;
SAVE&amp;quot;DIAL&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then when you want to connect to the TCP listener and launch TS-DOS, just put the widebar cursor over DIAL.BA and hit ENTER&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2983</id>
		<title>Connecting NEWDOS to Wimodem232</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2983"/>
		<updated>2020-03-29T05:45:03Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
There are various RS232 to Wifi dongles around now.&lt;br /&gt;
They allow you to establish a TCP connection to a PC from your Model T serial port.&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha offers a TCP listening mode to support direct connections. But any TPDD emulator, or a real TPDD can work if you&lt;br /&gt;
have enough software to rig it up.&lt;br /&gt;
&lt;br /&gt;
This article describes how to connect NEWDOS -&amp;gt; Wimodem232 -&amp;gt; LaddieAlpha in TCP mode.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
1. Update firmware on Wimodem232. Be aware that the Wimodem232 may switch baud rates, generally to 300 baud after this and you need to change baud rates in TELCOM to match.&lt;br /&gt;
&lt;br /&gt;
2. Up the baud on Wimodm232 to 600 baud. This is the fastest baud TELCOM can interact with Wimodem and not lose characters.&lt;br /&gt;
&lt;br /&gt;
Note that you don&#039;t HAVE to do this. But, say you need to inject a TPDD client like TEENY. To do that without running a Telnet server on my PC, I used Putty to Telnet to the Wimodem232, to the Model T at 600 baud. Then anything I paste into the Putty session is received by the Model T. In one case I used the Download function in TELCOM to capture TEENYX.DO into a file, which I then loaded into BASIC. But to do that, I needed to be at 600 baud and I needed to know the IP address of the Wimodem232.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t care to connect TO the Wimodem, and already have your TPDD client loaded, you can skip to step 5.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT&amp;lt;ENTER&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
AT*B600&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Re-enter TELCOM at 600 baud&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stat 48N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Determine your IP address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATI&lt;br /&gt;
...&lt;br /&gt;
IP:192.168.1.66&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note down your IP address.&lt;br /&gt;
&lt;br /&gt;
5. Switch baud to 19200bps for TPDD mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT*B19200&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Re-enter TELCOM at 19200bps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F8 (Bye)&lt;br /&gt;
Disconnect? Y&lt;br /&gt;
Stat 98N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Launch LaddieAlpha.EXE&lt;br /&gt;
&lt;br /&gt;
With a command prompt open, and from whatever directory you have a copy of LaddieAlpha, run it in tcp listener mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means, listen on all IP addresses at port 8085.&lt;br /&gt;
You can pick any unprivileged port, you can give a specific IP address.&lt;br /&gt;
Note: network security best practices and configuring your firewall is out of scope for this article. Depending on your operating system, you will need to ALLOW the inbound TCP connection on port 8085. Otherwise you will simply find the Wimodem232 is unable to connect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Find the IP address of your PC&lt;br /&gt;
&lt;br /&gt;
On Windows, use ipconfig, Linux, ifconfig, etc.&lt;br /&gt;
&lt;br /&gt;
In my case it was 192.168.1.85&lt;br /&gt;
&lt;br /&gt;
9. Dial LaddieAlpha&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATDT 192.168.1.85:8085&lt;br /&gt;
CONNECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
Connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Launch NEWDOS in appropriate delay mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BASIC&lt;br /&gt;
CALL 63012,2,2&lt;br /&gt;
F4 (Disk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that I sometimes have issues where this gets stuck.&lt;br /&gt;
Generally to fix I exit NEWDOS, go into TELCOM, Stat 98N1D, Term, F8-Bye, and re-launch NEWDOS with CALL 63012,2,2 and this resolves the handshake issue.&lt;br /&gt;
&lt;br /&gt;
Note Note: to run NEWDOS in delay mode, you have to use the CALL every time. Launching from TS-DOS entry on the menu will start with no delay, and it won&#039;t work!&lt;br /&gt;
&lt;br /&gt;
There is information in Ken&#039;s documentation on how to change the TS-DOS launcher to incorporate the delay.&lt;br /&gt;
&lt;br /&gt;
== Quick Launch ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a small launcher program to make connection easier. This avoids having to go into TELCOM and remember any commands.&lt;br /&gt;
Remember though, it expects the WiModem232 to already be in 19200bps mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Type in the following, using your listener&#039;s IP and port:&lt;br /&gt;
&lt;br /&gt;
10 OPEN&amp;quot;COM:98N1E&amp;quot;FOROUTPUTAS1:PRINT#1,&amp;quot;&lt;br /&gt;
ATDT 192.168.1.85:8085&amp;quot;:CLOSE1:CALL63013&lt;br /&gt;
,2,2:MENU&lt;br /&gt;
&lt;br /&gt;
SAVE&amp;quot;DIAL&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then when you want to connect to the TCP listener and launch TS-DOS, just put the widebar cursor over DIAL.BA and hit ENTER&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2982</id>
		<title>Connecting NEWDOS to Wimodem232</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2982"/>
		<updated>2020-03-29T05:40:12Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
There are various RS232 to Wifi dongles around now.&lt;br /&gt;
They allow you to establish a TCP connection to a PC from your Model T serial port.&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha offers a TCP listening mode to support direct connections. But any TPDD emulator, or a real TPDD can work if you&lt;br /&gt;
have enough software to rig it up.&lt;br /&gt;
&lt;br /&gt;
This article describes how to connect NEWDOS -&amp;gt; Wimodem232 -&amp;gt; LaddieAlpha in TCP mode.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
1. Update firmware on Wimodem232. Be aware that the Wimodem232 may switch baud rates, generally to 300 baud after this and you need to change baud rates in TELCOM to match.&lt;br /&gt;
&lt;br /&gt;
2. Up the baud on Wimodm232 to 600 baud. This is the fastest baud TELCOM can interact with Wimodem and not lose characters.&lt;br /&gt;
&lt;br /&gt;
Note that you don&#039;t HAVE to do this. But, say you need to inject a TPDD client like TEENY. To do that without running a Telnet server on my PC, I used Putty to Telnet to the Wimodem232, to the Model T at 600 baud. Then anything I paste into the Putty session is received by the Model T. In one case I used the Download function in TELCOM to capture TEENYX.DO into a file, which I then loaded into BASIC. But to do that, I needed to be at 600 baud and I needed to know the IP address of the Wimodem232.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t care to connect TO the Wimodem, and already have your TPDD client loaded, you can skip to step 5.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT&amp;lt;ENTER&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
AT*B600&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Re-enter TELCOM at 600 baud&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stat 48N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Determine your IP address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATI&lt;br /&gt;
...&lt;br /&gt;
IP:192.168.1.66&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note down your IP address.&lt;br /&gt;
&lt;br /&gt;
5. Switch baud to 19200bps for TPDD mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT*B19200&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Re-enter TELCOM at 19200bps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F8 (Bye)&lt;br /&gt;
Disconnect? Y&lt;br /&gt;
Stat 98N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Launch LaddieAlpha.EXE&lt;br /&gt;
&lt;br /&gt;
With a command prompt open, and from whatever directory you have a copy of LaddieAlpha, run it in tcp listener mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means, listen on all IP addresses at port 8085.&lt;br /&gt;
You can pick any unprivileged port, you can give a specific IP address.&lt;br /&gt;
Note: network security best practices and configuring your firewall is out of scope for this article. Depending on your operating system, you will need to ALLOW the inbound TCP connection on port 8085. Otherwise you will simply find the Wimodem232 is unable to connect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Find the IP address of your PC&lt;br /&gt;
&lt;br /&gt;
On Windows, use ipconfig, Linux, ifconfig, etc.&lt;br /&gt;
&lt;br /&gt;
In my case it was 192.168.1.85&lt;br /&gt;
&lt;br /&gt;
9. Dial LaddieAlpha&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATDT 192.168.1.85:8085&lt;br /&gt;
CONNECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
Connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Launch NEWDOS in appropriate delay mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BASIC&lt;br /&gt;
CALL 63012,2,2&lt;br /&gt;
F4 (Disk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that I sometimes have issues where this gets stuck.&lt;br /&gt;
Generally to fix I exit NEWDOS, go into TELCOM, Stat 98N1D, Term, F8-Bye, and re-launch NEWDOS with CALL 63012,2,2 and this resolves the handshake issue.&lt;br /&gt;
&lt;br /&gt;
Note Note: to run NEWDOS in delay mode, you have to use the CALL every time. Launching from TS-DOS entry on the menu will start with no delay, and it won&#039;t work!&lt;br /&gt;
&lt;br /&gt;
There is information in Ken&#039;s documentation on how to change the TS-DOS launcher to incorporate the delay.&lt;br /&gt;
&lt;br /&gt;
== Quick Launch ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a small launcher program to make connection easier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Type in the following, using your listener&#039;s IP and port:&lt;br /&gt;
&lt;br /&gt;
10 OPEN&amp;quot;COM:98N1E&amp;quot;FOROUTPUTAS1:PRINT#1,&amp;quot;&lt;br /&gt;
ATDT 192.168.1.85:8085&amp;quot;:CLOSE1:CALL63013&lt;br /&gt;
,2,2:MENU&lt;br /&gt;
&lt;br /&gt;
SAVE&amp;quot;DIAL&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then when you want to connect to the TCP listener and launch TS-DOS, just put the widebar cursor over DIAL.BA and hit ENTER&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2981</id>
		<title>Connecting NEWDOS to Wimodem232</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2981"/>
		<updated>2020-03-29T02:21:53Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
There are various RS232 to Wifi dongles around now.&lt;br /&gt;
They allow you to establish a TCP connection to a PC from your Model T serial port.&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha offers a TCP listening mode to support direct connections. But any TPDD emulator, or a real TPDD can work if you&lt;br /&gt;
have enough software to rig it up.&lt;br /&gt;
&lt;br /&gt;
This article describes how to connect NEWDOS -&amp;gt; Wimodem232 -&amp;gt; LaddieAlpha in TCP mode.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
1. Update firmware on Wimodem232. Be aware that the Wimodem232 may switch baud rates, generally to 300 baud after this and you need to change baud rates in TELCOM to match.&lt;br /&gt;
&lt;br /&gt;
2. Up the baud on Wimodm232 to 600 baud. This is the fastest baud TELCOM can interact with Wimodem and not lose characters.&lt;br /&gt;
&lt;br /&gt;
Note that you don&#039;t HAVE to do this. But, say you need to inject a TPDD client like TEENY. To do that without running a Telnet server on my PC, I used Putty to Telnet to the Wimodem232, to the Model T at 600 baud. Then anything I paste into the Putty session is received by the Model T. In one case I used the Download function in TELCOM to capture TEENYX.DO into a file, which I then loaded into BASIC. But to do that, I needed to be at 600 baud and I needed to know the IP address of the Wimodem232.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t care to connect TO the Wimodem, and already have your TPDD client loaded, you can skip to step 5.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT&amp;lt;ENTER&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
AT*B600&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Re-enter TELCOM at 600 baud&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stat 48N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Determine your IP address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATI&lt;br /&gt;
...&lt;br /&gt;
IP:192.168.1.66&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note down your IP address.&lt;br /&gt;
&lt;br /&gt;
5. Switch baud to 19200bps for TPDD mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT*B19200&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Re-enter TELCOM at 19200bps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F8 (Bye)&lt;br /&gt;
Disconnect? Y&lt;br /&gt;
Stat 98N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Launch LaddieAlpha.EXE&lt;br /&gt;
&lt;br /&gt;
With a command prompt open, and from whatever directory you have a copy of LaddieAlpha, run it in tcp listener mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means, listen on all IP addresses at port 8085.&lt;br /&gt;
You can pick any unprivileged port, you can give a specific IP address.&lt;br /&gt;
Note: network security best practices and configuring your firewall is out of scope for this article. Depending on your operating system, you will need to ALLOW the inbound TCP connection on port 8085. Otherwise you will simply find the Wimodem232 is unable to connect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Find the IP address of your PC&lt;br /&gt;
&lt;br /&gt;
On Windows, use ipconfig, Linux, ifconfig, etc.&lt;br /&gt;
&lt;br /&gt;
In my case it was 192.168.1.85&lt;br /&gt;
&lt;br /&gt;
9. Dial LaddieAlpha&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATDT 192.168.1.85:8085&lt;br /&gt;
CONNECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
Connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Launch NEWDOS in appropriate delay mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BASIC&lt;br /&gt;
CALL 63012,2,2&lt;br /&gt;
F4 (Disk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that I sometimes have issues where this gets stuck.&lt;br /&gt;
Generally to fix I exit NEWDOS, go into TELCOM, Stat 98N1D, Term, F8-Bye, and re-launch NEWDOS with CALL 63012,2,2 and this resolves the handshake issue.&lt;br /&gt;
&lt;br /&gt;
Note Note: to run NEWDOS in delay mode, you have to use the CALL every time. Launching from TS-DOS entry on the menu will start with no delay, and it won&#039;t work!&lt;br /&gt;
&lt;br /&gt;
There is information in Ken&#039;s documentation on how to change the TS-DOS launcher to incorporate the delay.&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2980</id>
		<title>Connecting NEWDOS to Wimodem232</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2980"/>
		<updated>2020-03-29T02:21:38Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
There are various RS232 to Wifi dongles around now.&lt;br /&gt;
They allow you to establish a TCP connection to a PC from your Model T serial port.&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha offers a TCP listening mode to support direct connections. But any TPDD emulator, or a real TPDD can work if you&lt;br /&gt;
have enough software to rig it up.&lt;br /&gt;
&lt;br /&gt;
This article describes how to connect NEWDOS -&amp;gt; Wimodem232 -&amp;gt; LaddieAlpha in TCP mode.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
1. Update firmware on Wimodem232. Be aware that the Wimodem232 may switch baud rates, generally to 300 baud after this and you need to change baud rates in TELCOM to match.&lt;br /&gt;
&lt;br /&gt;
2. Up the baud on Wimodm232 to 600 baud. This is the fastest baud TELCOM can interact with Wimodem and not lose characters.&lt;br /&gt;
&lt;br /&gt;
Note that you don&#039;t HAVE to do this. But, say you need to inject a TPDD client like TEENY. To do that without running a Telnet server on my PC, I used Putty to Telnet to the Wimodem232, to the Model T at 600 baud. Then anything I paste into the Putty session is received by the Model T. In one case I used the Download function in TELCOM to capture TEENYX.DO into a file, which I then loaded into BASIC. But to do that, I needed to be at 600 baud and I needed to know the IP address of the Wimodem232.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t care to connect TO the Wimodem, and already gave your TPDD client loaded, you can skip to step 5.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT&amp;lt;ENTER&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
AT*B600&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Re-enter TELCOM at 600 baud&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stat 48N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Determine your IP address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATI&lt;br /&gt;
...&lt;br /&gt;
IP:192.168.1.66&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note down your IP address.&lt;br /&gt;
&lt;br /&gt;
5. Switch baud to 19200bps for TPDD mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT*B19200&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Re-enter TELCOM at 19200bps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F8 (Bye)&lt;br /&gt;
Disconnect? Y&lt;br /&gt;
Stat 98N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Launch LaddieAlpha.EXE&lt;br /&gt;
&lt;br /&gt;
With a command prompt open, and from whatever directory you have a copy of LaddieAlpha, run it in tcp listener mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means, listen on all IP addresses at port 8085.&lt;br /&gt;
You can pick any unprivileged port, you can give a specific IP address.&lt;br /&gt;
Note: network security best practices and configuring your firewall is out of scope for this article. Depending on your operating system, you will need to ALLOW the inbound TCP connection on port 8085. Otherwise you will simply find the Wimodem232 is unable to connect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Find the IP address of your PC&lt;br /&gt;
&lt;br /&gt;
On Windows, use ipconfig, Linux, ifconfig, etc.&lt;br /&gt;
&lt;br /&gt;
In my case it was 192.168.1.85&lt;br /&gt;
&lt;br /&gt;
9. Dial LaddieAlpha&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATDT 192.168.1.85:8085&lt;br /&gt;
CONNECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
Connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Launch NEWDOS in appropriate delay mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BASIC&lt;br /&gt;
CALL 63012,2,2&lt;br /&gt;
F4 (Disk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that I sometimes have issues where this gets stuck.&lt;br /&gt;
Generally to fix I exit NEWDOS, go into TELCOM, Stat 98N1D, Term, F8-Bye, and re-launch NEWDOS with CALL 63012,2,2 and this resolves the handshake issue.&lt;br /&gt;
&lt;br /&gt;
Note Note: to run NEWDOS in delay mode, you have to use the CALL every time. Launching from TS-DOS entry on the menu will start with no delay, and it won&#039;t work!&lt;br /&gt;
&lt;br /&gt;
There is information in Ken&#039;s documentation on how to change the TS-DOS launcher to incorporate the delay.&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2979</id>
		<title>Connecting NEWDOS to Wimodem232</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2979"/>
		<updated>2020-03-29T02:20:17Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
There are various RS232 to Wifi dongles around now.&lt;br /&gt;
They allow you to establish a TCP connection to a PC from your Model T serial port.&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha offers a TCP listening mode to support direct connections. But any TPDD emulator, or a real TPDD can work if you&lt;br /&gt;
have enough software to rig it up.&lt;br /&gt;
&lt;br /&gt;
This article describes how to connect NEWDOS -&amp;gt; Wimodem232 -&amp;gt; LaddieAlpha in TCP mode.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
1. Update firmware on Wimodem232. Be aware that the Wimodem232 may switch baud rates, generally to 300 baud after this and you need to change baud rates in TELCOM to match.&lt;br /&gt;
&lt;br /&gt;
2. Up the baud on Wimodm232 to 600 baud. This is the fastest baud TELCOM can interact with Wimodem and not lose characters.&lt;br /&gt;
&lt;br /&gt;
Note that you don&#039;t HAVE to do this. But, say you need to inject a TPDD client like TEENY. To do that without running a Telnet server on my PC, I used Putty to Telnet to the Wimodem232, to the Model T at 600 baud. Then anything I paste into the Putty session is received by the Model T. In one case I used the Download function in TELCOM to capture TEENYX.DO into a file, which I then loaded into BASIC. But to do that, I needed to be at 600 baud and I needed to know the IP address of the Wimodem232.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT&amp;lt;ENTER&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
AT*B600&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Re-enter TELCOM at 600 baud&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stat 48N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Determine your IP address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATI&lt;br /&gt;
...&lt;br /&gt;
IP:192.168.1.66&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note down your IP address.&lt;br /&gt;
&lt;br /&gt;
5. Switch baud to 19200bps for TPDD mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT*B19200&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Re-enter TELCOM at 19200bps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F8 (Bye)&lt;br /&gt;
Disconnect? Y&lt;br /&gt;
Stat 98N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Launch LaddieAlpha.EXE&lt;br /&gt;
&lt;br /&gt;
With a command prompt open, and from whatever directory you have a copy of LaddieAlpha, run it in tcp listener mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means, listen on all IP addresses at port 8085.&lt;br /&gt;
You can pick any unprivileged port, you can give a specific IP address.&lt;br /&gt;
Note: network security best practices and configuring your firewall is out of scope for this article. Depending on your operating system, you will need to ALLOW the inbound TCP connection on port 8085. Otherwise you will simply find the Wimodem232 is unable to connect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Find the IP address of your PC&lt;br /&gt;
&lt;br /&gt;
On Windows, use ipconfig, Linux, ifconfig, etc.&lt;br /&gt;
&lt;br /&gt;
In my case it was 192.168.1.85&lt;br /&gt;
&lt;br /&gt;
9. Dial LaddieAlpha&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATDT 192.168.1.85:8085&lt;br /&gt;
CONNECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
Connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Launch NEWDOS in appropriate delay mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BASIC&lt;br /&gt;
CALL 63012,2,2&lt;br /&gt;
F4 (Disk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that I sometimes have issues where this gets stuck.&lt;br /&gt;
Generally to fix I exit NEWDOS, go into TELCOM, Stat 98N1D, Term, F8-Bye, and re-launch NEWDOS with CALL 63012,2,2 and this resolves the handshake issue.&lt;br /&gt;
&lt;br /&gt;
Note Note: to run NEWDOS in delay mode, you have to use the CALL every time. Launching from TS-DOS entry on the menu will start with no delay, and it won&#039;t work!&lt;br /&gt;
&lt;br /&gt;
There is information in Ken&#039;s documentation on how to change the TS-DOS launcher to incorporate the delay.&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2978</id>
		<title>Connecting NEWDOS to Wimodem232</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Connecting_NEWDOS_to_Wimodem232&amp;diff=2978"/>
		<updated>2020-03-29T01:30:10Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Created page with &amp;quot; == Overview ==  There are various RS232 to Wifi dongles around now. They allow you to establish a TCP connection to a PC from your Model T serial port.  LaddieAlpha offers a ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
There are various RS232 to Wifi dongles around now.&lt;br /&gt;
They allow you to establish a TCP connection to a PC from your Model T serial port.&lt;br /&gt;
&lt;br /&gt;
LaddieAlpha offers a TCP listening mode to support direct connections. But any TPDD emulator, or a real TPDD can work if you&lt;br /&gt;
have enough software to rig it up.&lt;br /&gt;
&lt;br /&gt;
This article describes how to connect NEWDOS -&amp;gt; Wimodem232 -&amp;gt; LaddieAlpha in TCP mode.&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
1. Update firmware on Wimodem232. Be aware that the Wimodem232 may switch baud rates, generally to 300 baud after this and you need to change baud rates in TELCOM to match.&lt;br /&gt;
&lt;br /&gt;
2. Up the baud on Wimodm232 to 600 baud. This is the fastest baud TELCOM can interact with Wimodem and not lose characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT&amp;lt;ENTER&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
AT*B600&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Re-enter TELCOM at 600 baud&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stat 48N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Determine your IP address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATI&lt;br /&gt;
...&lt;br /&gt;
IP:192.168.1.66&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note down your IP address.&lt;br /&gt;
&lt;br /&gt;
5. Switch baud to 19200bps for TPDD mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT*B19200&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Re-enter TELCOM at 19200bps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F8 (Bye)&lt;br /&gt;
Disconnect? Y&lt;br /&gt;
Stat 98N1D&lt;br /&gt;
Term&lt;br /&gt;
AT&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Launch LaddieAlpha.EXE&lt;br /&gt;
&lt;br /&gt;
With a command prompt open, and from whatever directory you have a copy of LaddieAlpha, run it in tcp listener mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means, listen on all IP addresses at port 8085.&lt;br /&gt;
You can pick any unprivileged port, you can give a specific IP address.&lt;br /&gt;
Note: network security best practices and configuring your firewall is out of scope for this article. Depending on your operating system, you will need to ALLOW the inbound TCP connection on port 8085. Otherwise you will simply find the Wimodem232 is unable to connect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Find the IP address of your PC&lt;br /&gt;
&lt;br /&gt;
On Windows, use ipconfig, Linux, ifconfig, etc.&lt;br /&gt;
&lt;br /&gt;
In my case it was 192.168.1.85&lt;br /&gt;
&lt;br /&gt;
9. Dial LaddieAlpha&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATDT 192.168.1.85:8085&lt;br /&gt;
CONNECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\projects\modelt\laddiealpha &amp;gt; .\LaddieAlpha.EXE tcp://*:8085&lt;br /&gt;
================================================================================&lt;br /&gt;
LaddieAlpha Tandy Portable Disk Drive Emulator (Speaker To Machines, Inc.)&lt;br /&gt;
Built        : 3/28/2020 2:08:10 PM&lt;br /&gt;
File Version : 2.1.0.0&lt;br /&gt;
Version      : 2.1.0.0&lt;br /&gt;
Copyright    : Copyright c Speaker To Machines, Inc. 2014&lt;br /&gt;
Working Dir  : C:\projects\modelt\laddiealpha&lt;br /&gt;
================================================================================&lt;br /&gt;
Configure listener&lt;br /&gt;
Waiting for TCP connection...&lt;br /&gt;
Connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Launch NEWDOS in appropriate delay mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BASIC&lt;br /&gt;
CALL 63012,2,2&lt;br /&gt;
F4 (Disk)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that I sometimes have issues where this gets stuck.&lt;br /&gt;
Generally to fix I exit NEWDOS, go into TELCOM, Stat 98N1D, Term, F8-Bye, and re-launch NEWDOS with CALL 63012,2,2 and this resolves the handshake issue.&lt;br /&gt;
&lt;br /&gt;
Note Note: to run NEWDOS in delay mode, you have to use the CALL every time. Launching from TS-DOS entry on the menu will start with no delay, and it won&#039;t work!&lt;br /&gt;
&lt;br /&gt;
There is information in Ken&#039;s documentation on how to change the TS-DOS launcher to incorporate the delay.&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TPDD_Base_Protocol&amp;diff=2977</id>
		<title>TPDD Base Protocol</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TPDD_Base_Protocol&amp;diff=2977"/>
		<updated>2019-12-12T23:17:41Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* General Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Reference ==&lt;br /&gt;
&lt;br /&gt;
Note that this information was taken from Compuserve archives. Some stuff has been fixed. The best way to understand the protocol is to look at existing code like LaddieAlpha or DLPlus.&lt;br /&gt;
&lt;br /&gt;
If you have changes please suggest or make them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;Disks are single sided 3.5 inch standard disks&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;PDD1 - 40 tracks 2 sectors 1280 bytes/sector (100K/disk)&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;PDD2 - 80 tracks 2 sectors 1280 bytes/sector (200K/disk treated as two banks of 100k&lt;br /&gt;
each)&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;Maximum file size = 64k. &amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;Maximum number of directory entries (files) is 40 for PDD1 and 80 for PDD2.&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;File names are maximum 24 characters (padded with trailing blanks) although Tandy always&lt;br /&gt;
used 6 for filename and 2 for filetype, with period seperator (i.e. XXXXXX.TT)&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;All communications with drive are at 19,200 bps. PDD1 has dip switches so this can drop&lt;br /&gt;
to 9600bps. PDD2 is auto sensing down to 1200bps (??? - can anyone confirm this?).&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Format ==&lt;br /&gt;
&lt;br /&gt;
All commands are in a request/return format (half-duplex)&lt;br /&gt;
&lt;br /&gt;
General request format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;TT&amp;gt;preamble type length data checksum&amp;lt;/TT&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General return format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;TT&amp;gt;type length data checksum&amp;lt;/TT&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Type ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;(all values are in HEX)&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|  WIDTH=&amp;quot;100%&amp;quot; BORDER=&amp;quot;1&amp;quot; &lt;br /&gt;
! &amp;amp;nbsp;command &lt;br /&gt;
! &amp;amp;nbsp;request &lt;br /&gt;
! &amp;amp;nbsp;return&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;directory ref &lt;br /&gt;
| &amp;amp;nbsp;00&lt;br /&gt;
| &amp;amp;nbsp;11 12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;open file&lt;br /&gt;
| &amp;amp;nbsp;01&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;close file&lt;br /&gt;
| &amp;amp;nbsp;02&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;read file&lt;br /&gt;
| &amp;amp;nbsp;03&lt;br /&gt;
| &amp;amp;nbsp;10 12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;write file&lt;br /&gt;
| &amp;amp;nbsp;04&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;delete file&lt;br /&gt;
| &amp;amp;nbsp;05&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;format disk&lt;br /&gt;
| &amp;amp;nbsp;06 *&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;drive status&lt;br /&gt;
| &amp;amp;nbsp;07 *&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;drive condition&lt;br /&gt;
| &amp;amp;nbsp;0C *&lt;br /&gt;
| &amp;amp;nbsp;15&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp; rename file&lt;br /&gt;
| &amp;amp;nbsp;0D&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;* PDD2 treats the disk as two banks of 100k each. All commands except these two must&lt;br /&gt;
specify the bank number as part of the request. The above commands reference BANK 0. To&lt;br /&gt;
reference BANK 1 you must add 40 HEX to these values (bit 6 = bank number). E.G. &#039;open&lt;br /&gt;
file&#039; becomes 41 for BANK 1.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Request Command details ==&lt;br /&gt;
&lt;br /&gt;
=== Type 00 - Directory Reference ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;    2   1  1  24             1           1           1      bytes&lt;br /&gt;
 +----+--+--+--------------+----------+------------+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;00&amp;amp;#124;1a&amp;amp;#124; filename     &amp;amp;#124;attribute &amp;amp;#124;search form &amp;amp;#124;chksum&amp;amp;#124; &lt;br /&gt;
 +----+--+--+--------------+----------+------------+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 00h*&lt;br /&gt;
* length - length of data 1ah (26 decimal)&lt;br /&gt;
* filename - padded with blanks&lt;br /&gt;
* attribute - specify &#039;F&#039; (not used normally)&lt;br /&gt;
* search form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
* 00h - reference file for open or delete&lt;br /&gt;
* 01h - request first directory block&lt;br /&gt;
* 02h - request next directory block&lt;br /&gt;
* 03h - request previous directory block&lt;br /&gt;
* 04h - end directory reference&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 01 - Open file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1  1     1      bytes&lt;br /&gt;
 +----+--+--+------+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;01&amp;amp;#124;01&amp;amp;#124; mode &amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 01h&lt;br /&gt;
* length - length of data 01h (1 decimal)&lt;br /&gt;
* mode -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
* 01h - open new file for WRITE&lt;br /&gt;
* 02h - open existing file for APPEND&lt;br /&gt;
* 03h - open existing file for READ&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 02 - Close file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;02&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 02h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 03 - Read file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;03&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 03h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 04 - Write file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1   1-128  1       bytes&lt;br /&gt;
 +----+--+---+------+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;04&amp;amp;#124;01-&amp;amp;#124;data  &amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 &amp;amp;#124;    &amp;amp;#124;  &amp;amp;#124; 80&amp;amp;#124;      &amp;amp;#124;      &amp;amp;#124;&lt;br /&gt;
 +----+--+---+------+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 04&lt;br /&gt;
* length - length of data 01h-80h (actual length of data)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 05 - Delete file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;05&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 05h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 06 - Format Disk ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;06&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 06h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 07 - Drive Status ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
   2   1  1  1        bytes&amp;lt;&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;07&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 07h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 0C - Drive Condition ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;0C&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 0Ch&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 0D - Rename file ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
   2   1  1  24     1       1       bytes&amp;lt;&lt;br /&gt;
 +----+--+--+-------+------+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;0D&amp;amp;#124;19&amp;amp;#124;newname&amp;amp;#124;attrib&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+-------+------+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 0D&lt;br /&gt;
* length - length of data 19h (25 decimal)&lt;br /&gt;
* newname - new name for the file&lt;br /&gt;
* attribute- not used (specify &#039;F&#039;)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
== Return Command Details ==&lt;br /&gt;
=== Type 10 - Read file Return ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 1  1   0-128       1      bytes&lt;br /&gt;
 +--+---+----------+-----+&lt;br /&gt;
 &amp;amp;#124;10&amp;amp;#124;00-&amp;amp;#124; file data&amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 &amp;amp;#124;  &amp;amp;#124; 80&amp;amp;#124;          &amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 +--+---+----------+-----+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* return - type 10&lt;br /&gt;
* length - length of data 00h-80h (0-128 decimal)&amp;lt;UL&amp;gt;&amp;lt;LI&amp;gt;if length is equal to 80h there may be more data - you must issue another read command&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;if length is less than 80h then this is last block&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&lt;br /&gt;
* file data - data read from file&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 11 - Directory reference return ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 1  1   24       1      2    1    1       bytes&lt;br /&gt;
 +--+--+--------+------+----+----+-----+&lt;br /&gt;
 &amp;amp;#124;11&amp;amp;#124;1c&amp;amp;#124;filename&amp;amp;#124;attrib&amp;amp;#124;size&amp;amp;#124;free&amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 +--+--+--------+------+----+----+-----+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* return - type 11h&lt;br /&gt;
* length - length of data 1Ch (28 decimal)&lt;br /&gt;
* filename - file name - if no name specied is 00H. If at end of directory is 00H.&lt;br /&gt;
* attribute - not used&lt;br /&gt;
* size - size of file, big endian format&lt;br /&gt;
* free - number of free sectors (multiply by 1280 for bytes)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 12 - Normal Return ===&lt;br /&gt;
&amp;lt;PRE&amp;gt; 1  1  1      1      bytes&lt;br /&gt;
 +--+--+-----+-----+&lt;br /&gt;
 &amp;amp;#124;12&amp;amp;#124;01&amp;amp;#124;error&amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 +--+--+-----+-----+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* return - type 12h&lt;br /&gt;
* length - length of data 01h&lt;br /&gt;
* error code-&lt;br /&gt;
&lt;br /&gt;
{|  WIDTH=&amp;quot;100%&amp;quot; BORDER=&amp;quot;1&amp;quot; &lt;br /&gt;
| &amp;amp;nbsp;00 - normal (no error)&lt;br /&gt;
| &amp;amp;nbsp;10 - file does not exist&lt;br /&gt;
| &amp;amp;nbsp;11 - file exists&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;30 - no filename&lt;br /&gt;
| &amp;amp;nbsp;31 - dir search error&lt;br /&gt;
| &amp;amp;nbsp;35 - bank error&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;36 - parameter error&lt;br /&gt;
| &amp;amp;nbsp;37 - open format mismatch&lt;br /&gt;
| &amp;amp;nbsp;3f - end of file&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;40 - no start mark&lt;br /&gt;
| &amp;amp;nbsp;41 - crc check error in ID&lt;br /&gt;
| &amp;amp;nbsp;42 - sector length error&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;44 - format verify error&lt;br /&gt;
| &amp;amp;nbsp;46 - format interruption&lt;br /&gt;
| &amp;amp;nbsp;47 - erase offset error&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;49 - crc check error in data&lt;br /&gt;
| &amp;amp;nbsp;4a - sector number error&lt;br /&gt;
| &amp;amp;nbsp;4b - read data timeout&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;4d - sector number error&lt;br /&gt;
| &amp;amp;nbsp;50 - disk write protect&lt;br /&gt;
| &amp;amp;nbsp;5e - un-initilized disk&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;60 - directory full&lt;br /&gt;
| &amp;amp;nbsp;61 - disk full&lt;br /&gt;
| &amp;amp;nbsp;6e - file too long&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;70 - no disk&lt;br /&gt;
| &amp;amp;nbsp;71 - disk change error&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 15 - Drive Condition Return ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 1  1  1          1      bytes&lt;br /&gt;
 +--+--+---------+-----+&lt;br /&gt;
 &amp;amp;#124;15&amp;amp;#124;01&amp;amp;#124;condition&amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 +--+--+---------+-----+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* return - type 15h&lt;br /&gt;
* length - length of data 01h&lt;br /&gt;
* condition- bit values&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;         7 6 5 4 3 2 1 0    bit&lt;br /&gt;
        +-+-+-+-+-+-+-+-+&lt;br /&gt;
    MSB &amp;amp;#124;0&amp;amp;#124;0&amp;amp;#124;0&amp;amp;#124;0&amp;amp;#124;x&amp;amp;#124;x&amp;amp;#124;x&amp;amp;#124;x&amp;amp;#124; LSB&lt;br /&gt;
        +-+-+-+-+-+-+-+-+&lt;br /&gt;
                 &amp;amp;#124; &amp;amp;#124; &amp;amp;#124; &amp;amp;#124;&lt;br /&gt;
                 &amp;amp;#124; &amp;amp;#124; &amp;amp;#124; +--power (0=normal 1=low)&lt;br /&gt;
                 &amp;amp;#124; &amp;amp;#124; +----write protect (0=not prot 1=prot)&lt;br /&gt;
                 &amp;amp;#124; +------disk out (0=disk in 1=disk out)&lt;br /&gt;
                 +--------disk change status (0=not changed 1=changed)&amp;lt;/PRE&amp;gt;&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2&amp;gt;Sequence of Events&amp;lt;/H2&amp;gt;&lt;br /&gt;
{|  WIDTH=&amp;quot;100%&amp;quot; &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Get directory&amp;lt;/I&amp;gt;&lt;br /&gt;
| req 00 search form 01&amp;lt;BR&amp;gt;&lt;br /&gt;
req 00 search form 02 (repeat as needed)&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Write file&amp;lt;/I&amp;gt;&lt;br /&gt;
| req 00 search form 00&amp;lt;BR&amp;gt;&lt;br /&gt;
req 01 mode 01 or 02&amp;lt;BR&amp;gt;&lt;br /&gt;
req 04 (repeat as needed)&amp;lt;BR&amp;gt;&lt;br /&gt;
req 02&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Read file&amp;lt;/I&amp;gt;&lt;br /&gt;
| req 00 search form 00&amp;lt;BR&amp;gt;&lt;br /&gt;
req 01 mode 03&amp;lt;BR&amp;gt;&lt;br /&gt;
req 03 (repeat as needed)&amp;lt;BR&amp;gt;&lt;br /&gt;
req 02&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Rename file&amp;lt;/I&amp;gt;&lt;br /&gt;
| req 00 search form 00&amp;lt;BR&amp;gt;&lt;br /&gt;
req 0d&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Delete file&amp;lt;/I&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;req 00 search form 00&amp;lt;BR&amp;gt;&lt;br /&gt;
req 05&lt;br /&gt;
|}&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2&amp;gt;Calculating Checksum&amp;lt;/H2&amp;gt;&amp;lt;P&amp;gt;The check sum is &amp;amp;quot;the one&#039;s complement of the least significant byte of the number&lt;br /&gt;
of bytes from the block format through the data block&amp;amp;quot;. Most people (me included)&lt;br /&gt;
don&#039;t understand what that involves if you have to calculate it. Fortunately I found an&lt;br /&gt;
example of how to do this and so I&#039;m passing it on to you.&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;Checksum=(sum-of-bytes MOD 256) XOR 255&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;where bytes = the bytes including the Request Type, Length and all Data fields&lt;br /&gt;
(but not including the preamble).&amp;lt;/P&amp;gt;&amp;lt;HR&amp;gt;&amp;lt;H2&amp;gt;Using this Information&amp;lt;/H2&amp;gt;&amp;lt;P&amp;gt;A lot of the above commands can be set up in advance since there is no variable part to&lt;br /&gt;
calculate. Some commands must have the length and checksum calculate as the data is built&lt;br /&gt;
but the others don&#039;t. Here&#039;s how I set up some of the commands in my program:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Close$   = &amp;quot;ZZ&amp;quot;+Chr$(2)+Chr$(0)+Chr$(253)&lt;br /&gt;
Dir1$    = &amp;quot;ZZ&amp;quot;+Chr$(0)+Chr$(26)+Space$(24)+&amp;quot;F&amp;quot;+Chr$(1)+Chr$(158)&lt;br /&gt;
Dir2$    = &amp;quot;ZZ&amp;quot;+Chr$(0)+Chr$(26)+Space$(24)+&amp;quot;F&amp;quot;+Chr$(2)+Chr$(157)&lt;br /&gt;
Status$  = &amp;quot;ZZ&amp;quot;+Chr$(7)+Chr$(0)+Chr$(248)+Chr$(13)&lt;br /&gt;
Format$  = &amp;quot;ZZ&amp;quot;+Chr$(6)+Chr$(0)+Chr$(249)+Chr$(13)&lt;br /&gt;
Erase$   = &amp;quot;ZZ&amp;quot;+Chr$(5)+Chr$(0)+Chr$(250)&lt;br /&gt;
Seek$(1) = &amp;quot;ZZ&amp;quot;+Chr$(1)+Chr$(1)+Chr$(1)+Chr$(252)&lt;br /&gt;
Seek$(2) = &amp;quot;ZZ&amp;quot;+Chr$(1)+Chr$(1)+Chr$(2)+Chr$(251)&lt;br /&gt;
Seek$(3) = &amp;quot;ZZ&amp;quot;+Chr$(1)+Chr$(1)+Chr$(3)+Chr$(250)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;The above commands can be sent directly without any calculating to speed up your&lt;br /&gt;
program. &amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TPDD_Base_Protocol&amp;diff=2976</id>
		<title>TPDD Base Protocol</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TPDD_Base_Protocol&amp;diff=2976"/>
		<updated>2019-12-12T23:17:05Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Reference ==&lt;br /&gt;
&lt;br /&gt;
Note that this information was taken from Compuserve archives. Some stuff has been fixed.&lt;br /&gt;
&lt;br /&gt;
If you have changes please suggest or make them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;Disks are single sided 3.5 inch standard disks&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;PDD1 - 40 tracks 2 sectors 1280 bytes/sector (100K/disk)&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;PDD2 - 80 tracks 2 sectors 1280 bytes/sector (200K/disk treated as two banks of 100k&lt;br /&gt;
each)&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;Maximum file size = 64k. &amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;Maximum number of directory entries (files) is 40 for PDD1 and 80 for PDD2.&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;File names are maximum 24 characters (padded with trailing blanks) although Tandy always&lt;br /&gt;
used 6 for filename and 2 for filetype, with period seperator (i.e. XXXXXX.TT)&amp;lt;/LI&amp;gt;&lt;br /&gt;
  &amp;lt;LI&amp;gt;All communications with drive are at 19,200 bps. PDD1 has dip switches so this can drop&lt;br /&gt;
to 9600bps. PDD2 is auto sensing down to 1200bps (??? - can anyone confirm this?).&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Format ==&lt;br /&gt;
&lt;br /&gt;
All commands are in a request/return format (half-duplex)&lt;br /&gt;
&lt;br /&gt;
General request format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;TT&amp;gt;preamble type length data checksum&amp;lt;/TT&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
General return format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;TT&amp;gt;type length data checksum&amp;lt;/TT&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command Type ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P ALIGN=&amp;quot;CENTER&amp;quot;&amp;gt;(all values are in HEX)&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|  WIDTH=&amp;quot;100%&amp;quot; BORDER=&amp;quot;1&amp;quot; &lt;br /&gt;
! &amp;amp;nbsp;command &lt;br /&gt;
! &amp;amp;nbsp;request &lt;br /&gt;
! &amp;amp;nbsp;return&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;directory ref &lt;br /&gt;
| &amp;amp;nbsp;00&lt;br /&gt;
| &amp;amp;nbsp;11 12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;open file&lt;br /&gt;
| &amp;amp;nbsp;01&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;close file&lt;br /&gt;
| &amp;amp;nbsp;02&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;read file&lt;br /&gt;
| &amp;amp;nbsp;03&lt;br /&gt;
| &amp;amp;nbsp;10 12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;write file&lt;br /&gt;
| &amp;amp;nbsp;04&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;delete file&lt;br /&gt;
| &amp;amp;nbsp;05&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;format disk&lt;br /&gt;
| &amp;amp;nbsp;06 *&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;drive status&lt;br /&gt;
| &amp;amp;nbsp;07 *&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;drive condition&lt;br /&gt;
| &amp;amp;nbsp;0C *&lt;br /&gt;
| &amp;amp;nbsp;15&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp; rename file&lt;br /&gt;
| &amp;amp;nbsp;0D&lt;br /&gt;
| &amp;amp;nbsp;12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;* PDD2 treats the disk as two banks of 100k each. All commands except these two must&lt;br /&gt;
specify the bank number as part of the request. The above commands reference BANK 0. To&lt;br /&gt;
reference BANK 1 you must add 40 HEX to these values (bit 6 = bank number). E.G. &#039;open&lt;br /&gt;
file&#039; becomes 41 for BANK 1.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Request Command details ==&lt;br /&gt;
&lt;br /&gt;
=== Type 00 - Directory Reference ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;    2   1  1  24             1           1           1      bytes&lt;br /&gt;
 +----+--+--+--------------+----------+------------+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;00&amp;amp;#124;1a&amp;amp;#124; filename     &amp;amp;#124;attribute &amp;amp;#124;search form &amp;amp;#124;chksum&amp;amp;#124; &lt;br /&gt;
 +----+--+--+--------------+----------+------------+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 00h*&lt;br /&gt;
* length - length of data 1ah (26 decimal)&lt;br /&gt;
* filename - padded with blanks&lt;br /&gt;
* attribute - specify &#039;F&#039; (not used normally)&lt;br /&gt;
* search form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
* 00h - reference file for open or delete&lt;br /&gt;
* 01h - request first directory block&lt;br /&gt;
* 02h - request next directory block&lt;br /&gt;
* 03h - request previous directory block&lt;br /&gt;
* 04h - end directory reference&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 01 - Open file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1  1     1      bytes&lt;br /&gt;
 +----+--+--+------+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;01&amp;amp;#124;01&amp;amp;#124; mode &amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 01h&lt;br /&gt;
* length - length of data 01h (1 decimal)&lt;br /&gt;
* mode -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
* 01h - open new file for WRITE&lt;br /&gt;
* 02h - open existing file for APPEND&lt;br /&gt;
* 03h - open existing file for READ&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 02 - Close file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;02&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 02h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 03 - Read file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;03&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 03h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 04 - Write file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1   1-128  1       bytes&lt;br /&gt;
 +----+--+---+------+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;04&amp;amp;#124;01-&amp;amp;#124;data  &amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 &amp;amp;#124;    &amp;amp;#124;  &amp;amp;#124; 80&amp;amp;#124;      &amp;amp;#124;      &amp;amp;#124;&lt;br /&gt;
 +----+--+---+------+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 04&lt;br /&gt;
* length - length of data 01h-80h (actual length of data)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 05 - Delete file ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;05&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 05h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 06 - Format Disk ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;06&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 06h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 07 - Drive Status ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
   2   1  1  1        bytes&amp;lt;&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;07&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 07h&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 0C - Drive Condition ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
   2   1  1  1        bytes&lt;br /&gt;
 +----+--+--+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;0C&amp;amp;#124;00&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 0Ch&lt;br /&gt;
* length - length of data 00h (no data field)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 0D - Rename file ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
   2   1  1  24     1       1       bytes&amp;lt;&lt;br /&gt;
 +----+--+--+-------+------+------+&lt;br /&gt;
 &amp;amp;#124;5a5a&amp;amp;#124;0D&amp;amp;#124;19&amp;amp;#124;newname&amp;amp;#124;attrib&amp;amp;#124;chksum&amp;amp;#124;&lt;br /&gt;
 +----+--+--+-------+------+------+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Preamble - always &#039;ZZ&#039;&lt;br /&gt;
* request - type 0D&lt;br /&gt;
* length - length of data 19h (25 decimal)&lt;br /&gt;
* newname - new name for the file&lt;br /&gt;
* attribute- not used (specify &#039;F&#039;)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
== Return Command Details ==&lt;br /&gt;
=== Type 10 - Read file Return ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 1  1   0-128       1      bytes&lt;br /&gt;
 +--+---+----------+-----+&lt;br /&gt;
 &amp;amp;#124;10&amp;amp;#124;00-&amp;amp;#124; file data&amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 &amp;amp;#124;  &amp;amp;#124; 80&amp;amp;#124;          &amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 +--+---+----------+-----+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* return - type 10&lt;br /&gt;
* length - length of data 00h-80h (0-128 decimal)&amp;lt;UL&amp;gt;&amp;lt;LI&amp;gt;if length is equal to 80h there may be more data - you must issue another read command&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;if length is less than 80h then this is last block&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&lt;br /&gt;
* file data - data read from file&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 11 - Directory reference return ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 1  1   24       1      2    1    1       bytes&lt;br /&gt;
 +--+--+--------+------+----+----+-----+&lt;br /&gt;
 &amp;amp;#124;11&amp;amp;#124;1c&amp;amp;#124;filename&amp;amp;#124;attrib&amp;amp;#124;size&amp;amp;#124;free&amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 +--+--+--------+------+----+----+-----+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* return - type 11h&lt;br /&gt;
* length - length of data 1Ch (28 decimal)&lt;br /&gt;
* filename - file name - if no name specied is 00H. If at end of directory is 00H.&lt;br /&gt;
* attribute - not used&lt;br /&gt;
* size - size of file, big endian format&lt;br /&gt;
* free - number of free sectors (multiply by 1280 for bytes)&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 12 - Normal Return ===&lt;br /&gt;
&amp;lt;PRE&amp;gt; 1  1  1      1      bytes&lt;br /&gt;
 +--+--+-----+-----+&lt;br /&gt;
 &amp;amp;#124;12&amp;amp;#124;01&amp;amp;#124;error&amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 +--+--+-----+-----+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* return - type 12h&lt;br /&gt;
* length - length of data 01h&lt;br /&gt;
* error code-&lt;br /&gt;
&lt;br /&gt;
{|  WIDTH=&amp;quot;100%&amp;quot; BORDER=&amp;quot;1&amp;quot; &lt;br /&gt;
| &amp;amp;nbsp;00 - normal (no error)&lt;br /&gt;
| &amp;amp;nbsp;10 - file does not exist&lt;br /&gt;
| &amp;amp;nbsp;11 - file exists&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;30 - no filename&lt;br /&gt;
| &amp;amp;nbsp;31 - dir search error&lt;br /&gt;
| &amp;amp;nbsp;35 - bank error&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;36 - parameter error&lt;br /&gt;
| &amp;amp;nbsp;37 - open format mismatch&lt;br /&gt;
| &amp;amp;nbsp;3f - end of file&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;40 - no start mark&lt;br /&gt;
| &amp;amp;nbsp;41 - crc check error in ID&lt;br /&gt;
| &amp;amp;nbsp;42 - sector length error&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;44 - format verify error&lt;br /&gt;
| &amp;amp;nbsp;46 - format interruption&lt;br /&gt;
| &amp;amp;nbsp;47 - erase offset error&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;49 - crc check error in data&lt;br /&gt;
| &amp;amp;nbsp;4a - sector number error&lt;br /&gt;
| &amp;amp;nbsp;4b - read data timeout&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;4d - sector number error&lt;br /&gt;
| &amp;amp;nbsp;50 - disk write protect&lt;br /&gt;
| &amp;amp;nbsp;5e - un-initilized disk&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;60 - directory full&lt;br /&gt;
| &amp;amp;nbsp;61 - disk full&lt;br /&gt;
| &amp;amp;nbsp;6e - file too long&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;70 - no disk&lt;br /&gt;
| &amp;amp;nbsp;71 - disk change error&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
=== Type 15 - Drive Condition Return ===&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 1  1  1          1      bytes&lt;br /&gt;
 +--+--+---------+-----+&lt;br /&gt;
 &amp;amp;#124;15&amp;amp;#124;01&amp;amp;#124;condition&amp;amp;#124;cksum&amp;amp;#124;&lt;br /&gt;
 +--+--+---------+-----+&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* return - type 15h&lt;br /&gt;
* length - length of data 01h&lt;br /&gt;
* condition- bit values&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;         7 6 5 4 3 2 1 0    bit&lt;br /&gt;
        +-+-+-+-+-+-+-+-+&lt;br /&gt;
    MSB &amp;amp;#124;0&amp;amp;#124;0&amp;amp;#124;0&amp;amp;#124;0&amp;amp;#124;x&amp;amp;#124;x&amp;amp;#124;x&amp;amp;#124;x&amp;amp;#124; LSB&lt;br /&gt;
        +-+-+-+-+-+-+-+-+&lt;br /&gt;
                 &amp;amp;#124; &amp;amp;#124; &amp;amp;#124; &amp;amp;#124;&lt;br /&gt;
                 &amp;amp;#124; &amp;amp;#124; &amp;amp;#124; +--power (0=normal 1=low)&lt;br /&gt;
                 &amp;amp;#124; &amp;amp;#124; +----write protect (0=not prot 1=prot)&lt;br /&gt;
                 &amp;amp;#124; +------disk out (0=disk in 1=disk out)&lt;br /&gt;
                 +--------disk change status (0=not changed 1=changed)&amp;lt;/PRE&amp;gt;&lt;br /&gt;
* checksum - see below for calculating&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2&amp;gt;Sequence of Events&amp;lt;/H2&amp;gt;&lt;br /&gt;
{|  WIDTH=&amp;quot;100%&amp;quot; &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Get directory&amp;lt;/I&amp;gt;&lt;br /&gt;
| req 00 search form 01&amp;lt;BR&amp;gt;&lt;br /&gt;
req 00 search form 02 (repeat as needed)&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Write file&amp;lt;/I&amp;gt;&lt;br /&gt;
| req 00 search form 00&amp;lt;BR&amp;gt;&lt;br /&gt;
req 01 mode 01 or 02&amp;lt;BR&amp;gt;&lt;br /&gt;
req 04 (repeat as needed)&amp;lt;BR&amp;gt;&lt;br /&gt;
req 02&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Read file&amp;lt;/I&amp;gt;&lt;br /&gt;
| req 00 search form 00&amp;lt;BR&amp;gt;&lt;br /&gt;
req 01 mode 03&amp;lt;BR&amp;gt;&lt;br /&gt;
req 03 (repeat as needed)&amp;lt;BR&amp;gt;&lt;br /&gt;
req 02&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Rename file&amp;lt;/I&amp;gt;&lt;br /&gt;
| req 00 search form 00&amp;lt;BR&amp;gt;&lt;br /&gt;
req 0d&lt;br /&gt;
|- &lt;br /&gt;
| &amp;amp;nbsp;&amp;lt;I&amp;gt;Delete file&amp;lt;/I&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;req 00 search form 00&amp;lt;BR&amp;gt;&lt;br /&gt;
req 05&lt;br /&gt;
|}&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2&amp;gt;Calculating Checksum&amp;lt;/H2&amp;gt;&amp;lt;P&amp;gt;The check sum is &amp;amp;quot;the one&#039;s complement of the least significant byte of the number&lt;br /&gt;
of bytes from the block format through the data block&amp;amp;quot;. Most people (me included)&lt;br /&gt;
don&#039;t understand what that involves if you have to calculate it. Fortunately I found an&lt;br /&gt;
example of how to do this and so I&#039;m passing it on to you.&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;Checksum=(sum-of-bytes MOD 256) XOR 255&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;where bytes = the bytes including the Request Type, Length and all Data fields&lt;br /&gt;
(but not including the preamble).&amp;lt;/P&amp;gt;&amp;lt;HR&amp;gt;&amp;lt;H2&amp;gt;Using this Information&amp;lt;/H2&amp;gt;&amp;lt;P&amp;gt;A lot of the above commands can be set up in advance since there is no variable part to&lt;br /&gt;
calculate. Some commands must have the length and checksum calculate as the data is built&lt;br /&gt;
but the others don&#039;t. Here&#039;s how I set up some of the commands in my program:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Close$   = &amp;quot;ZZ&amp;quot;+Chr$(2)+Chr$(0)+Chr$(253)&lt;br /&gt;
Dir1$    = &amp;quot;ZZ&amp;quot;+Chr$(0)+Chr$(26)+Space$(24)+&amp;quot;F&amp;quot;+Chr$(1)+Chr$(158)&lt;br /&gt;
Dir2$    = &amp;quot;ZZ&amp;quot;+Chr$(0)+Chr$(26)+Space$(24)+&amp;quot;F&amp;quot;+Chr$(2)+Chr$(157)&lt;br /&gt;
Status$  = &amp;quot;ZZ&amp;quot;+Chr$(7)+Chr$(0)+Chr$(248)+Chr$(13)&lt;br /&gt;
Format$  = &amp;quot;ZZ&amp;quot;+Chr$(6)+Chr$(0)+Chr$(249)+Chr$(13)&lt;br /&gt;
Erase$   = &amp;quot;ZZ&amp;quot;+Chr$(5)+Chr$(0)+Chr$(250)&lt;br /&gt;
Seek$(1) = &amp;quot;ZZ&amp;quot;+Chr$(1)+Chr$(1)+Chr$(1)+Chr$(252)&lt;br /&gt;
Seek$(2) = &amp;quot;ZZ&amp;quot;+Chr$(1)+Chr$(1)+Chr$(2)+Chr$(251)&lt;br /&gt;
Seek$(3) = &amp;quot;ZZ&amp;quot;+Chr$(1)+Chr$(1)+Chr$(3)+Chr$(250)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;The above commands can be sent directly without any calculating to speed up your&lt;br /&gt;
program. &amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=2974</id>
		<title>LaddieCon</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=2974"/>
		<updated>2019-05-01T05:18:13Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Removed protection from &amp;quot;LaddieCon&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is a Model 100 disk drive emulator written for Microsoft .NET. However it does depend on&lt;br /&gt;
the Win32 API for access to the serial port. So it is completely portable to any Microsoft operating&lt;br /&gt;
system running .NET ;-) . This is for historical reasons only... when LaddieCon was written, there was no&lt;br /&gt;
serial port API in .NET. If you need a TPDD emulator for a POSIX system, you should be using [[DLPlus]] or LaddieAlpha.&lt;br /&gt;
&lt;br /&gt;
Note that LaddieCon does NOT support TS-DOS directory extensions, but LaddieAlpha does.&lt;br /&gt;
&lt;br /&gt;
To run LaddieCon, you need to have installed the .NET Framework redistributable from Microsoft.&lt;br /&gt;
Most likely if your system is up-to-date on patches this is already done.&lt;br /&gt;
&lt;br /&gt;
== Download LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/windows/LaddieCon.exe Download LaddieCon]&lt;br /&gt;
&lt;br /&gt;
== Running LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
On your laptop, you must be running a TPDD client. TPDD clients include TS-DOS, TEENY, POWR-DOS, FLOPPY.CO or the WP-2 Disk mode.&lt;br /&gt;
&lt;br /&gt;
REX Manager is also a TPDD client, though it is limited to transferring 32K image files rather than individual .DO and .CO files.&lt;br /&gt;
&lt;br /&gt;
For the physical connection, you need a &amp;quot;null modem&amp;quot; wired serial cable to connect to a serial port on your Windows PC. You need to know which numbered COM port you are using on the PC side.&lt;br /&gt;
&lt;br /&gt;
LADDIECON.EXE runs on a Windows computer, on top of the .Net Framework. To start it,&lt;br /&gt;
&lt;br /&gt;
Click Start -&amp;gt; Run -&amp;gt; cmd.exe&lt;br /&gt;
&lt;br /&gt;
Assuming LADDIECON.EXE is saved at c:\tools\laddiecon.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
For the M100/T102/T200:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 6&lt;br /&gt;
&lt;br /&gt;
For the WP-2:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here I put &#039;com1.&#039; For your setup, the number may well be different.&lt;br /&gt;
&lt;br /&gt;
If you are using a Tandy WP-2 word processor, make sure to change the &#039;6&#039; to an &#039;8&#039;. This is important because the WP-2 uses an 8.2 style (8 characters for the base name, 2 characters for extension) filename, while the Model 10x and 200 use a 6.2 style filename. If you don&#039;t set this properly, you will get weird behavior.&lt;br /&gt;
&lt;br /&gt;
When you press ENTER, laddiecon should run until you hit CTRL-C. It won&#039;t appear to &amp;quot;do anything.&amp;quot; It is completely &amp;quot;remote controlled&amp;quot; by your disk client on the Model T laptop.&lt;br /&gt;
&lt;br /&gt;
== LaddieCon and Vista ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is reported to work with Vista. However, you must run &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; in &amp;quot;Administrator Mode.&amp;quot; Also, your USB adapter must have a driver that is compatible with Vista.&lt;br /&gt;
&lt;br /&gt;
To enable &amp;quot;Run As Administrator:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Find your &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; executable with Windows Explorer.&lt;br /&gt;
# Right click on &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039;&lt;br /&gt;
# Select Properties-&amp;gt;Compatibility Tab&lt;br /&gt;
# Check the &#039;Run as Administrator&#039; option.&lt;br /&gt;
&lt;br /&gt;
Note: if anyone knows a more fine-grained way to permit &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; to access&lt;br /&gt;
the COM port without using Administrator Mode, please note it here.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for a USB-&amp;gt;serial adapter known to work with Vista, the following have been tested:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USBGEAR U232-P9AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also, Chris Fezzler reports this device as working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Gigaware 6-Ft. USB-A to Serial Cable&lt;br /&gt;
SKU Model:26-949&lt;br /&gt;
Driver Date 6/25/2007&lt;br /&gt;
Driver Version 3.1.0.0&lt;br /&gt;
Provider: Prolific Technologies&lt;br /&gt;
Purchased at Radio Shack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please add any other adapters you verify work with Vista and LaddieCon.&lt;br /&gt;
&lt;br /&gt;
The following devices are known not to work with Vista:&lt;br /&gt;
&lt;br /&gt;
* Belkin USB-to-Serial cable &#039;&#039;&#039;Model F5U109&#039;&#039;&#039;.  Despite having Vista driver, was unsuccessful in getting it to work.&lt;br /&gt;
&lt;br /&gt;
== LaddieAlpha ==&lt;br /&gt;
&lt;br /&gt;
More info to come. This is a new &amp;quot;cross platform&amp;quot; build of LaddieCon that works on both .NET and mono. So you can run the same LaddieCon on Windows, Linux and Mac boxes!&lt;br /&gt;
&lt;br /&gt;
Advantages of LaddieAlpha over LaddieCon:&lt;br /&gt;
&lt;br /&gt;
* Runs cross-platform&lt;br /&gt;
* Implements TS-DOS/Desklink directory extensions&lt;br /&gt;
* Maps/fixes up extensions presented to TS-DOS so .DO&#039;s misnamed .BA don&#039;t crash your laptop&lt;br /&gt;
&lt;br /&gt;
The only disadvantage of LaddieAlpha is that it won&#039;t run on Windows 98 (that is, the .NET version it requires was never ported by Microsoft to Windows 98).&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/linux/LaddieAlpha.EXE Download and test LaddieAlpha]&lt;br /&gt;
&lt;br /&gt;
Example Linux invocation for use with a Model 100/102/200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mono ./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: On OSX, If you get an error about libMonoPosixHelper.dylib, mono may be finding the wrong shared library.&lt;br /&gt;
&lt;br /&gt;
You need to edit the file /opt/local/etc/mono/config and change the relevant line as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;lt;dllmap dll=&amp;quot;MonoPosixHelper&amp;quot; target=&amp;quot;/opt/local/lib/libMonoPosixHelper.dylib&amp;quot;/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;!--dllmap dll=&amp;quot;MonoPosixHelper&amp;quot; target=&amp;quot;libMonoPosixHelper.dylib&amp;quot; os=&amp;quot;!windows&amp;quot; /--&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reliable Text-Only Transfers ==&lt;br /&gt;
&lt;br /&gt;
If you are only transferring text files, Hyperterminal is known to be a reliable way to transfer files even at 19200 using XON/XOFF protocol. Note that saving and loading text files via the TEXT application is much faster than TELCOM, because TEXT does not scroll the text to the screen as it captures.&lt;br /&gt;
&lt;br /&gt;
See [[Text File Transfer using Hyperterminal]] for details instructions on getting Hyperterminal working.&lt;br /&gt;
&lt;br /&gt;
[[Category:TPDD Service]] [[Category:File Transfer]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=CloudT_Web_Emulator&amp;diff=2973</id>
		<title>CloudT Web Emulator</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=CloudT_Web_Emulator&amp;diff=2973"/>
		<updated>2019-03-04T00:47:48Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:CloudT.png]]&lt;br /&gt;
&lt;br /&gt;
CloudT is the &amp;quot;instant gratification&amp;quot; Model 100 emulator written completely in JavaScript.&lt;br /&gt;
&lt;br /&gt;
To use it just enter the following link into any browser:&lt;br /&gt;
&lt;br /&gt;
[https://bitchin100.com/CloudT https://bitchin100.com/CloudT]&lt;br /&gt;
&lt;br /&gt;
It is not the best emulator (VirtualT is the best), but it is the only emulator that will run on an iPhone or iPad, the only emulator you can sneak onto any new smart device you may want to buy while you&#039;re device shopping at the store. It&#039;s the only emulator you can use on PCs you&#039;re not allowed to install software to, say at the library or internet cafe.&lt;br /&gt;
&lt;br /&gt;
If you want a quick fix of Model T goodness, it&#039;s a good URL to remember.&lt;br /&gt;
&lt;br /&gt;
Its features are:&lt;br /&gt;
&lt;br /&gt;
* Loads instantly in your browser&lt;br /&gt;
* Can be saved with an icon on your device home screen as a full screen &amp;quot;web app&amp;quot; on both iOS and Android devices&lt;br /&gt;
* Once you load the first time, runs &amp;quot;Offline&amp;quot; (no internet connection required)&lt;br /&gt;
* It remembers your in-memory files from the last time you used it&lt;br /&gt;
* Runs on mobile devices including iPhones&lt;br /&gt;
* Compatible with the BASIC &amp;quot;SOUND&amp;quot; command&lt;br /&gt;
* Can load files to/from local drive&lt;br /&gt;
* Can load files to/from Google Drive&lt;br /&gt;
* Files pulled into the emulator show up on a &amp;quot;virtual tape&amp;quot; at the bottom of the screen. You process them (or create them) using the usual cassette commands (CLOAD, CSAVE, etc)&lt;br /&gt;
* Option ROMs are available from a drop down list&lt;br /&gt;
&lt;br /&gt;
== Virtual Tape ==&lt;br /&gt;
&lt;br /&gt;
CloudT creates a special &amp;quot;virtual tape&amp;quot; as a bridge between your CloudT and your PC file system, or web storage. Files on the Virtual Tape are shown at the bottom of the screen if you scroll down. If nothing is on the Virtual Tape you won&#039;t see anything there.&lt;br /&gt;
&lt;br /&gt;
When you CSAVE a file on a real Model 100, it is turned into a series of digital packets, which are encoded as an audio signal you can capture on a cassette tape.&lt;br /&gt;
&lt;br /&gt;
But when you CSAVE in CloudT, the digital packets are captured by the emulator and converted into in-memory files in a Virtual Tape at the bottom of your screen.&lt;br /&gt;
&lt;br /&gt;
This sounds complicated but once you get used to the concept, it is easy to understand.&lt;br /&gt;
&lt;br /&gt;
The Virtual Tape is a &amp;quot;queue.&amp;quot; Files are served &amp;quot;first in, first out&amp;quot;. The idea is similar to when you line up at the grocery store or bank. The first person in the line is the first person served. The next person into the line enters at the end of the line and their business will be addressed after every person that entered the line before them.&lt;br /&gt;
&lt;br /&gt;
Conceptually, like a line at the bank, although you enter the queue at the end, all the action happens at the front.&lt;br /&gt;
&lt;br /&gt;
New files CSAVEd to the Virtual Tape get staged (in programmer jargon, &amp;quot;enqueued&amp;quot;) at the end of the tape.&lt;br /&gt;
&lt;br /&gt;
If you CLOAD from the Virtual Tape, it will serve staged files from the front of the list, and the file you CLOAD will be removed from the list.&lt;br /&gt;
&lt;br /&gt;
Once a file is in the Virtual Tape, you can click icons on the screen to download it directly to your computer, or save it to the cloud (Google Drive).&lt;br /&gt;
&lt;br /&gt;
[[File:Virtual Tape.png]]&lt;br /&gt;
&lt;br /&gt;
== Staging a File from the Clipboard ==&lt;br /&gt;
&lt;br /&gt;
There is a text field below the keyboard. You can paste into this field and click the button &amp;quot;Add Plain Text&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This will create a .DO file in the Virtual Tape.&lt;br /&gt;
&lt;br /&gt;
== Adding a File from Club100 ==&lt;br /&gt;
&lt;br /&gt;
Say you&#039;re at http://club100.org/library/libgam.html&lt;br /&gt;
&lt;br /&gt;
You want to load the game CHESS.100&lt;br /&gt;
&lt;br /&gt;
Hover your mouse over the CHESS.100 link. Right click and choose &amp;quot;Copy Link Address&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Go to your tab containing CloudT.&lt;br /&gt;
&lt;br /&gt;
Click Add URL.&lt;br /&gt;
&lt;br /&gt;
Click on the field.&lt;br /&gt;
&lt;br /&gt;
Hit Ctrl-V to paste the link.&lt;br /&gt;
&lt;br /&gt;
Click OK.&lt;br /&gt;
&lt;br /&gt;
Look at the end of the screen, you&#039;ll see ALIENS.BA in the Virtual Tape area.&lt;br /&gt;
&lt;br /&gt;
== Adding a File from Google Drive ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentation&lt;br /&gt;
&lt;br /&gt;
== Accessing the Virtual Tape Queue ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentation&lt;br /&gt;
&lt;br /&gt;
== Saving a File to Your Hard Drive ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentaton&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=CloudT_Web_Emulator&amp;diff=2972</id>
		<title>CloudT Web Emulator</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=CloudT_Web_Emulator&amp;diff=2972"/>
		<updated>2019-03-04T00:39:46Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* Virtual Tape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:CloudT.png]]&lt;br /&gt;
&lt;br /&gt;
CloudT is the &amp;quot;instant gratification&amp;quot; Model 100 emulator written completely in JavaScript.&lt;br /&gt;
&lt;br /&gt;
To use it just enter the following link into any browser:&lt;br /&gt;
&lt;br /&gt;
[https://bitchin100.com/CloudT https://bitchin100.com/CloudT]&lt;br /&gt;
&lt;br /&gt;
It is not the best emulator (VirtualT is the best), but it is the only emulator that will run on an iPhone or iPad, the only emulator you can sneak onto any new smart device you may want to buy while you&#039;re device shopping at the store. It&#039;s the only emulator you can use on PCs you&#039;re not allowed to install software to, say at the library or internet cafe.&lt;br /&gt;
&lt;br /&gt;
If you want a quick fix of Model T goodness, it&#039;s a good URL to remember.&lt;br /&gt;
&lt;br /&gt;
Its features are:&lt;br /&gt;
&lt;br /&gt;
* Loads instantly in your browser&lt;br /&gt;
* Once you load the first time, runs &amp;quot;Offline&amp;quot; (no internet connection required)&lt;br /&gt;
* It remembers your in-memory files from the last time you used it&lt;br /&gt;
* Runs on mobile devices including iPhones&lt;br /&gt;
* Compatible with the BASIC &amp;quot;SOUND&amp;quot; command&lt;br /&gt;
* Can load files to/from local drive&lt;br /&gt;
* Can load files to/from Google Drive&lt;br /&gt;
* Files pulled into the emulator show up on a &amp;quot;virtual tape&amp;quot; at the bottom of the screen. You process them (or create them) using the usual cassette commands (CLOAD, CSAVE, etc)&lt;br /&gt;
* Option ROMs are available from a drop down list&lt;br /&gt;
&lt;br /&gt;
== Virtual Tape ==&lt;br /&gt;
&lt;br /&gt;
CloudT creates a special &amp;quot;virtual tape&amp;quot; as a bridge between your CloudT and your PC file system, or web storage. Files on the Virtual Tape are shown at the bottom of the screen if you scroll down. If nothing is on the Virtual Tape you won&#039;t see anything there.&lt;br /&gt;
&lt;br /&gt;
When you CSAVE a file on a real Model 100, it is turned into a series of digital packets, which are encoded as an audio signal you can capture on a cassette tape.&lt;br /&gt;
&lt;br /&gt;
But when you CSAVE in CloudT, the digital packets are captured by the emulator and converted into in-memory files in a Virtual Tape at the bottom of your screen.&lt;br /&gt;
&lt;br /&gt;
This sounds complicated but once you get used to the concept, it is easy to understand.&lt;br /&gt;
&lt;br /&gt;
The Virtual Tape is a &amp;quot;queue.&amp;quot; Files are served &amp;quot;first in, first out&amp;quot;. The idea is similar to when you line up at the grocery store or bank. The first person in the line is the first person served. The next person into the line enters at the end of the line and their business will be addressed after every person that entered the line before them.&lt;br /&gt;
&lt;br /&gt;
Conceptually, like a line at the bank, although you enter the queue at the end, all the action happens at the front.&lt;br /&gt;
&lt;br /&gt;
New files CSAVEd to the Virtual Tape get staged (in programmer jargon, &amp;quot;enqueued&amp;quot;) at the end of the tape.&lt;br /&gt;
&lt;br /&gt;
If you CLOAD from the Virtual Tape, it will serve staged files from the front of the list, and the file you CLOAD will be removed from the list.&lt;br /&gt;
&lt;br /&gt;
Once a file is in the Virtual Tape, you can click icons on the screen to download it directly to your computer, or save it to the cloud (Google Drive).&lt;br /&gt;
&lt;br /&gt;
[[File:Virtual Tape.png]]&lt;br /&gt;
&lt;br /&gt;
== Staging a File from the Clipboard ==&lt;br /&gt;
&lt;br /&gt;
There is a text field below the keyboard. You can paste into this field and click the button &amp;quot;Add Plain Text&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This will create a .DO file in the Virtual Tape.&lt;br /&gt;
&lt;br /&gt;
== Adding a File from Club100 ==&lt;br /&gt;
&lt;br /&gt;
Say you&#039;re at http://club100.org/library/libgam.html&lt;br /&gt;
&lt;br /&gt;
You want to load the game CHESS.100&lt;br /&gt;
&lt;br /&gt;
Hover your mouse over the CHESS.100 link. Right click and choose &amp;quot;Copy Link Address&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Go to your tab containing CloudT.&lt;br /&gt;
&lt;br /&gt;
Click Add URL.&lt;br /&gt;
&lt;br /&gt;
Click on the field.&lt;br /&gt;
&lt;br /&gt;
Hit Ctrl-V to paste the link.&lt;br /&gt;
&lt;br /&gt;
Click OK.&lt;br /&gt;
&lt;br /&gt;
Look at the end of the screen, you&#039;ll see ALIENS.BA in the Virtual Tape area.&lt;br /&gt;
&lt;br /&gt;
== Adding a File from Google Drive ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentation&lt;br /&gt;
&lt;br /&gt;
== Accessing the Virtual Tape Queue ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentation&lt;br /&gt;
&lt;br /&gt;
== Saving a File to Your Hard Drive ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentaton&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=CloudT_Web_Emulator&amp;diff=2971</id>
		<title>CloudT Web Emulator</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=CloudT_Web_Emulator&amp;diff=2971"/>
		<updated>2019-03-04T00:36:21Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:CloudT.png]]&lt;br /&gt;
&lt;br /&gt;
CloudT is the &amp;quot;instant gratification&amp;quot; Model 100 emulator written completely in JavaScript.&lt;br /&gt;
&lt;br /&gt;
To use it just enter the following link into any browser:&lt;br /&gt;
&lt;br /&gt;
[https://bitchin100.com/CloudT https://bitchin100.com/CloudT]&lt;br /&gt;
&lt;br /&gt;
It is not the best emulator (VirtualT is the best), but it is the only emulator that will run on an iPhone or iPad, the only emulator you can sneak onto any new smart device you may want to buy while you&#039;re device shopping at the store. It&#039;s the only emulator you can use on PCs you&#039;re not allowed to install software to, say at the library or internet cafe.&lt;br /&gt;
&lt;br /&gt;
If you want a quick fix of Model T goodness, it&#039;s a good URL to remember.&lt;br /&gt;
&lt;br /&gt;
Its features are:&lt;br /&gt;
&lt;br /&gt;
* Loads instantly in your browser&lt;br /&gt;
* Once you load the first time, runs &amp;quot;Offline&amp;quot; (no internet connection required)&lt;br /&gt;
* It remembers your in-memory files from the last time you used it&lt;br /&gt;
* Runs on mobile devices including iPhones&lt;br /&gt;
* Compatible with the BASIC &amp;quot;SOUND&amp;quot; command&lt;br /&gt;
* Can load files to/from local drive&lt;br /&gt;
* Can load files to/from Google Drive&lt;br /&gt;
* Files pulled into the emulator show up on a &amp;quot;virtual tape&amp;quot; at the bottom of the screen. You process them (or create them) using the usual cassette commands (CLOAD, CSAVE, etc)&lt;br /&gt;
* Option ROMs are available from a drop down list&lt;br /&gt;
&lt;br /&gt;
== Virtual Tape ==&lt;br /&gt;
&lt;br /&gt;
CloudT creates a special &amp;quot;virtual tape&amp;quot; as a bridge between your CloudT and your PC file system, or web storage. Files on the Virtual Tape are shown at the bottom of the screen if you scroll down. If nothing is on the Virtual Tape you won&#039;t see anything there.&lt;br /&gt;
&lt;br /&gt;
When you CSAVE a file on a real Model 100, it would is turned into a series of digital packets, which are encoded as an audio signal you can capture on a cassette tape.&lt;br /&gt;
&lt;br /&gt;
But when you CSAVE in CloudT, the file digital packets are captured by the emulator and converted into in-memory files in a Virtual Tape list at the bottom of your screen.&lt;br /&gt;
&lt;br /&gt;
This sounds complicated but once you get used to the concept, it is easy to understand.&lt;br /&gt;
&lt;br /&gt;
The Virtual Tape is a &amp;quot;queue.&amp;quot; Files are served &amp;quot;first in, first out&amp;quot;. The idea is similar to when you line up a the grocery store or bank. The first person in the line is the first person served. The next person into the line enters at the end of the line and will be addressed after every person that entered the line before them.&lt;br /&gt;
&lt;br /&gt;
Conceptually, like a line at the bank, although you enter the queue at the end, all the action happens at the front.&lt;br /&gt;
&lt;br /&gt;
New files CSAVEd to the Virtual Tape get staged (in programmer jargon, &amp;quot;enqueued&amp;quot;) at the end of the tape.&lt;br /&gt;
&lt;br /&gt;
If you CLOAD from the Virtual Tape, it will serve staged files from the front of the list, and the file you CLOAD will be removed from the list.&lt;br /&gt;
&lt;br /&gt;
Once a file is in the Virtual Tape, you can click icons on the screen to download it directly to your computer, or save it to the cloud (Google Drive).&lt;br /&gt;
&lt;br /&gt;
[[File:Virtual Tape.png]]&lt;br /&gt;
&lt;br /&gt;
== Staging a File from the Clipboard ==&lt;br /&gt;
&lt;br /&gt;
There is a text field below the keyboard. You can paste into this field and click the button &amp;quot;Add Plain Text&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This will create a .DO file in the Virtual Tape.&lt;br /&gt;
&lt;br /&gt;
== Adding a File from Club100 ==&lt;br /&gt;
&lt;br /&gt;
Say you&#039;re at http://club100.org/library/libgam.html&lt;br /&gt;
&lt;br /&gt;
You want to load the game CHESS.100&lt;br /&gt;
&lt;br /&gt;
Hover your mouse over the CHESS.100 link. Right click and choose &amp;quot;Copy Link Address&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Go to your tab containing CloudT.&lt;br /&gt;
&lt;br /&gt;
Click Add URL.&lt;br /&gt;
&lt;br /&gt;
Click on the field.&lt;br /&gt;
&lt;br /&gt;
Hit Ctrl-V to paste the link.&lt;br /&gt;
&lt;br /&gt;
Click OK.&lt;br /&gt;
&lt;br /&gt;
Look at the end of the screen, you&#039;ll see ALIENS.BA in the Virtual Tape area.&lt;br /&gt;
&lt;br /&gt;
== Adding a File from Google Drive ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentation&lt;br /&gt;
&lt;br /&gt;
== Accessing the Virtual Tape Queue ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentation&lt;br /&gt;
&lt;br /&gt;
== Saving a File to Your Hard Drive ==&lt;br /&gt;
&lt;br /&gt;
Feature implemented, need documentaton&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=CloudT_Web_Emulator&amp;diff=2970</id>
		<title>CloudT Web Emulator</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=CloudT_Web_Emulator&amp;diff=2970"/>
		<updated>2019-03-04T00:20:07Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Created page with &amp;quot;File:CloudT.png  CloudT is the &amp;quot;instant gratification&amp;quot; Model 100 emulator written completely in JavaScript.  It is not the best emulator (VirtualT is the best), but it is ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:CloudT.png]]&lt;br /&gt;
&lt;br /&gt;
CloudT is the &amp;quot;instant gratification&amp;quot; Model 100 emulator written completely in JavaScript.&lt;br /&gt;
&lt;br /&gt;
It is not the best emulator (VirtualT is the best), but it is the only emulator that will run on an iPhone or iPad, the only emulator you can sneak onto any new smart device you may want to buy while you&#039;re device shopping at the store. It&#039;s the only emulator you can use on PCs you&#039;re not allowed to install software to, say at the library or internet cafe.&lt;br /&gt;
&lt;br /&gt;
If you want a quick fix of Model T goodness, it&#039;s a good URL to remember.&lt;br /&gt;
&lt;br /&gt;
Its features are:&lt;br /&gt;
&lt;br /&gt;
* Loads instantly in your browser&lt;br /&gt;
* Once you load the first time, runs &amp;quot;Offline&amp;quot;&lt;br /&gt;
* Runs on mobile devices including iPhones&lt;br /&gt;
* Compatible with the BASIC &amp;quot;SOUND&amp;quot; command&lt;br /&gt;
* Can load files to/from local drive&lt;br /&gt;
* Can load files to/from Google Drive&lt;br /&gt;
* Files pulled into the emulator show up on a &amp;quot;virtual tape&amp;quot; at the bottom of the screen. You process them (or create them) using the usual cassette commands (CLOAD, CSAVE, etc)&lt;br /&gt;
* Option ROMs are available from a drop down list&lt;br /&gt;
&lt;br /&gt;
== Virtual Tape ==&lt;br /&gt;
&lt;br /&gt;
CloudT creates a special &amp;quot;virtual tape&amp;quot; as a bridge between your CloudT and your PC file system, or web storage. Files on the Virtual Tape are shown at the bottom of the screen if you scroll down. If nothing is on the Virtual Tape you won&#039;t see anything there.&lt;br /&gt;
&lt;br /&gt;
When you CSAVE a file on a real Model 100, it would is turned into a series of digital packets, which are encoded as an audio signal you can capture on a cassette tape.&lt;br /&gt;
&lt;br /&gt;
But when you CSAVE in CloudT, the file digital packets are captured by the emulator and converted into in-memory files in a Virtual Tape list at the bottom of your screen.&lt;br /&gt;
&lt;br /&gt;
This sounds complicated but once you get used to the concept, it is easy to understand.&lt;br /&gt;
&lt;br /&gt;
The Virtual Tape is a &amp;quot;queue.&amp;quot; Files are served &amp;quot;first in, first out&amp;quot;. The idea is similar to when you line up a the grocery store or bank. The first person in the line is the first person served. The next person into the line enters at the end of the line and will be addressed after every person that entered the line before them.&lt;br /&gt;
&lt;br /&gt;
Conceptually, like a line at the bank, although you enter the queue at the end, all the action happens at the front.&lt;br /&gt;
&lt;br /&gt;
New files CSAVEd to the Virtual Tape show up (in programmer jargon, &amp;quot;enqueued&amp;quot;) at the end of the tape.&lt;br /&gt;
&lt;br /&gt;
If you CLOAD from the Virtual Tape, it will serve files from the front of the list, and the file you CLOAD will be removed from the list.&lt;br /&gt;
&lt;br /&gt;
Once a file is in the Virtual Tape, you can click icons on the screen to download it directly to your computer, or save it to the cloud (Google Drive).&lt;br /&gt;
&lt;br /&gt;
[[File:Virtual Tape.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding a File from the Clipboard ==&lt;br /&gt;
&lt;br /&gt;
== Adding a File from Club100 ==&lt;br /&gt;
&lt;br /&gt;
== Adding a File from Google Drive ==&lt;br /&gt;
&lt;br /&gt;
== Accessing the Virtual Tape Queue ==&lt;br /&gt;
&lt;br /&gt;
== Saving a File to Your Hard Drive ==&lt;br /&gt;
&lt;br /&gt;
==&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=File:CloudT.png&amp;diff=2969</id>
		<title>File:CloudT.png</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=File:CloudT.png&amp;diff=2969"/>
		<updated>2019-03-04T00:19:08Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Main screen of CloudT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Main screen of CloudT&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=File:Virtual_Tape.png&amp;diff=2968</id>
		<title>File:Virtual Tape.png</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=File:Virtual_Tape.png&amp;diff=2968"/>
		<updated>2019-03-04T00:15:39Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Explication on CloudT&amp;#039;s virtual tape feature&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Explication on CloudT&#039;s virtual tape feature&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Bitchin100_DocGarden&amp;diff=2967</id>
		<title>Bitchin100 DocGarden</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Bitchin100_DocGarden&amp;diff=2967"/>
		<updated>2019-02-26T23:14:18Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitchin100 DocGarden is the site for enthusiasts to share documentation, notes, reviews and links to other projects and software related to [[True Portable Definition|True Portable Laptops]].&lt;br /&gt;
&lt;br /&gt;
== [[Model T DocGarden|Model T]] ==&lt;br /&gt;
&lt;br /&gt;
These pages are dedicated to [[Model T DocGarden|TRS-80 Model 100]], workalikes (Kyocera, NEC, Olivetti) and the Tandy 200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:lightyellow;padding:1em;border-style:solid;font-siz&lt;br /&gt;
e:105%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Club 100 Mailing List&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Official Club100 Mailing List is hosted here!&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Go to the [http://lists.bitchin100.com/listinfo.cgi/m100-bitchin100.com User Page] and subscribe to the list.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;To send email to the list, just send it to m100@lists.bitchin100.com&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other Interesting Machines ==&lt;br /&gt;
&lt;br /&gt;
* [[Tandy WP-2 DocGarden|Tandy WP-2]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambridge Z88 DocGarden|Cambridge Z88]]&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad NC-100/200 DocGarden|Amstrad NC-100/200]]&lt;br /&gt;
&lt;br /&gt;
* [[Epson PX-8 Geneva DocGarden|Epson PX-8 Geneva]]&lt;br /&gt;
&lt;br /&gt;
* [[NEC 8500, Starlet]]&lt;br /&gt;
&lt;br /&gt;
== 16, 32 or 64-bit bus Machines ==&lt;br /&gt;
&lt;br /&gt;
Please contribute documentation on any machines you feel fit the [[True Portable Definition|TPD]].&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Bitchin100_DocGarden&amp;diff=2966</id>
		<title>Bitchin100 DocGarden</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Bitchin100_DocGarden&amp;diff=2966"/>
		<updated>2019-02-26T23:13:54Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitchin100 DocGarden is the site for enthusiasts to share documentation, notes, reviews and links to other projects and software related to [[True Portable Definition|True Portable Laptops]].&lt;br /&gt;
&lt;br /&gt;
== [[Model T DocGarden|Model T]] ==&lt;br /&gt;
&lt;br /&gt;
These pages are dedicated to [[Model T DocGarden|TRS-80 Model 100]], workalikes (Kyocera, NEC, Olivetti) and the Tandy 200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:lightyellow;padding:1em;border-style:solid;font-siz&lt;br /&gt;
e:105%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;IMPORTANT ANNOUNCEMENT&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Official Club100 Mailing List is hosted here!&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Go to the [http://lists.bitchin100.com/listinfo.cgi/m100-bitchin100.com User Page] and subscribe to the list.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;To send email to the list, just send it to m100@lists.bitchin100.com&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other Interesting Machines ==&lt;br /&gt;
&lt;br /&gt;
* [[Tandy WP-2 DocGarden|Tandy WP-2]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambridge Z88 DocGarden|Cambridge Z88]]&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad NC-100/200 DocGarden|Amstrad NC-100/200]]&lt;br /&gt;
&lt;br /&gt;
* [[Epson PX-8 Geneva DocGarden|Epson PX-8 Geneva]]&lt;br /&gt;
&lt;br /&gt;
* [[NEC 8500, Starlet]]&lt;br /&gt;
&lt;br /&gt;
== 16, 32 or 64-bit bus Machines ==&lt;br /&gt;
&lt;br /&gt;
Please contribute documentation on any machines you feel fit the [[True Portable Definition|TPD]].&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_100_Screen_Escapes&amp;diff=2965</id>
		<title>Model 100 Screen Escapes</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_100_Screen_Escapes&amp;diff=2965"/>
		<updated>2019-02-18T02:38:09Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Nonprinting characters&lt;br /&gt;
!Name&lt;br /&gt;
!Hex&lt;br /&gt;
!Description&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|BELL&lt;br /&gt;
|0x07&lt;br /&gt;
|Beep tone&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|BACKSPACE&lt;br /&gt;
|0x08&lt;br /&gt;
|Backspace&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|HRZTAB&lt;br /&gt;
|0x09&lt;br /&gt;
|Horizontal tab: move to next tab position&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|LF&lt;br /&gt;
|0x0A&lt;br /&gt;
|Linefeed&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|VERTTAB&lt;br /&gt;
|0x0B&lt;br /&gt;
|Vertical tab: home cursor to (Row, Column) = (1,1)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|FF&lt;br /&gt;
|0x0C&lt;br /&gt;
|Form feed&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CR&lt;br /&gt;
|0x0D&lt;br /&gt;
|Carriage return&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ESC&lt;br /&gt;
|0x1B&lt;br /&gt;
|Start of escape sequence&lt;br /&gt;
|None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Screen Escapes: Precede with 0x1B / CHR$(27)&lt;br /&gt;
!Name&lt;br /&gt;
!Hex&lt;br /&gt;
!Char&lt;br /&gt;
!Description&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|CURUP&lt;br /&gt;
|0x41&lt;br /&gt;
|A&lt;br /&gt;
|Move cursor up one row unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURDWN&lt;br /&gt;
|0x42&lt;br /&gt;
|B&lt;br /&gt;
|Move cursor down one row unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURRIGHT&lt;br /&gt;
|0x43&lt;br /&gt;
|C&lt;br /&gt;
|Move cursor right one column unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURLEFT&lt;br /&gt;
|0x44&lt;br /&gt;
|D&lt;br /&gt;
|Move cursor left one column unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CLRSCR&lt;br /&gt;
|0x45&lt;br /&gt;
|E&lt;br /&gt;
|Clears screen, homes cursor. Escaped synonym for 0x0C.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|HOME&lt;br /&gt;
|0x46&lt;br /&gt;
|H&lt;br /&gt;
|Home the cursor. Sets cursor to (Row, Column) = (1,1)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERAEOS&lt;br /&gt;
|0x4A&lt;br /&gt;
|J&lt;br /&gt;
|Erase from cursor to end of screen&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERAEOL&lt;br /&gt;
|0x4B&lt;br /&gt;
|K&lt;br /&gt;
|Erase from cursor to end of line&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|INSLIN&lt;br /&gt;
|0x4C&lt;br /&gt;
|L&lt;br /&gt;
|Insert a blank line on LCD at current cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|DELLIN&lt;br /&gt;
|0x4D&lt;br /&gt;
|M&lt;br /&gt;
|Delete line on LCD at current cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURON&lt;br /&gt;
|0x50&lt;br /&gt;
|P&lt;br /&gt;
|Turn on cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CUROFF&lt;br /&gt;
|0x51&lt;br /&gt;
|Q&lt;br /&gt;
|Turn off cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|SETSYS&lt;br /&gt;
|0x54&lt;br /&gt;
|T&lt;br /&gt;
|Set system line (lock LCD row 8)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|RSTSYS&lt;br /&gt;
|0x55&lt;br /&gt;
|U&lt;br /&gt;
|Reset system line (unlock LCD row 8)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|LOCK&lt;br /&gt;
|0x56&lt;br /&gt;
|V&lt;br /&gt;
|Lock LCD display (no scrolling)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|UNLOCK&lt;br /&gt;
|0x57&lt;br /&gt;
|W&lt;br /&gt;
|Unlock LCD display (allow scrolling)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|REDRAW&lt;br /&gt;
|0x58&lt;br /&gt;
|X&lt;br /&gt;
|Redraw the screen&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURPOS&lt;br /&gt;
|0x59 [0-based row + 32] [0-based col + 32]&lt;br /&gt;
|Y&lt;br /&gt;
|Position cursor at (Row, Column)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CLRSC2&lt;br /&gt;
|0x6A&lt;br /&gt;
|j&lt;br /&gt;
|Clears screen, homes cursor. Another escaped synonym for 0x0C.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERSLIN&lt;br /&gt;
|0x6C&lt;br /&gt;
|l (lowercase-L)&lt;br /&gt;
|Erase entire line containing cursor.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ENTREV&lt;br /&gt;
|0x70&lt;br /&gt;
|p&lt;br /&gt;
|Turn on reverse character mode&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|EXTREV&lt;br /&gt;
|0x71&lt;br /&gt;
|q&lt;br /&gt;
|Turn off reverse character mode&lt;br /&gt;
|None&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_100_Screen_Escapes&amp;diff=2964</id>
		<title>Model 100 Screen Escapes</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_100_Screen_Escapes&amp;diff=2964"/>
		<updated>2019-02-18T02:35:43Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Nonprinting characters&lt;br /&gt;
!Name&lt;br /&gt;
!Hex&lt;br /&gt;
!Description&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|BELL&lt;br /&gt;
|0x07&lt;br /&gt;
|Beep tone&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|BACKSPACE&lt;br /&gt;
|0x08&lt;br /&gt;
|Backspace&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|HRZTAB&lt;br /&gt;
|0x09&lt;br /&gt;
|Horizontal tab: move to next tab position&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|LF&lt;br /&gt;
|0x0A&lt;br /&gt;
|Linefeed&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|VERTTAB&lt;br /&gt;
|0x0B&lt;br /&gt;
|Vertical tab: home cursor to (Row, Column) = (1,1)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|FF&lt;br /&gt;
|0x0C&lt;br /&gt;
|Form feed&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CR&lt;br /&gt;
|0x0D&lt;br /&gt;
|Carriage return&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ESC&lt;br /&gt;
|0x1B&lt;br /&gt;
|Start of escape sequence&lt;br /&gt;
|None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Screen Escapes: Precede with 0x1A / CHR$(27)&lt;br /&gt;
!Name&lt;br /&gt;
!Hex&lt;br /&gt;
!Char&lt;br /&gt;
!Description&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|CURUP&lt;br /&gt;
|0x41&lt;br /&gt;
|A&lt;br /&gt;
|Move cursor up one row unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURDWN&lt;br /&gt;
|0x42&lt;br /&gt;
|B&lt;br /&gt;
|Move cursor down one row unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURRIGHT&lt;br /&gt;
|0x43&lt;br /&gt;
|C&lt;br /&gt;
|Move cursor right one column unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURLEFT&lt;br /&gt;
|0x44&lt;br /&gt;
|D&lt;br /&gt;
|Move cursor left one column unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CLRSCR&lt;br /&gt;
|0x45&lt;br /&gt;
|E&lt;br /&gt;
|Clears screen, homes cursor. Escaped synonym for 0x0C.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|HOME&lt;br /&gt;
|0x46&lt;br /&gt;
|H&lt;br /&gt;
|Home the cursor. Sets cursor to (Row, Column) = (1,1)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERAEOS&lt;br /&gt;
|0x4A&lt;br /&gt;
|J&lt;br /&gt;
|Erase from cursor to end of screen&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERAEOL&lt;br /&gt;
|0x4B&lt;br /&gt;
|K&lt;br /&gt;
|Erase from cursor to end of line&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|INSLIN&lt;br /&gt;
|0x4C&lt;br /&gt;
|L&lt;br /&gt;
|Insert a blank line on LCD at current cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|DELLIN&lt;br /&gt;
|0x4D&lt;br /&gt;
|M&lt;br /&gt;
|Delete line on LCD at current cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURON&lt;br /&gt;
|0x50&lt;br /&gt;
|P&lt;br /&gt;
|Turn on cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CUROFF&lt;br /&gt;
|0x51&lt;br /&gt;
|Q&lt;br /&gt;
|Turn off cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|SETSYS&lt;br /&gt;
|0x54&lt;br /&gt;
|T&lt;br /&gt;
|Set system line (lock LCD row 8)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|RSTSYS&lt;br /&gt;
|0x55&lt;br /&gt;
|U&lt;br /&gt;
|Reset system line (unlock LCD row 8)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|LOCK&lt;br /&gt;
|0x56&lt;br /&gt;
|V&lt;br /&gt;
|Lock LCD display (no scrolling)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|UNLOCK&lt;br /&gt;
|0x57&lt;br /&gt;
|W&lt;br /&gt;
|Unlock LCD display (allow scrolling)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|REDRAW&lt;br /&gt;
|0x58&lt;br /&gt;
|X&lt;br /&gt;
|Redraw the screen&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURPOS&lt;br /&gt;
|0x59 [0-based row + 32] [0-based col + 32]&lt;br /&gt;
|Y&lt;br /&gt;
|Position cursor at (Row, Column)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CLRSC2&lt;br /&gt;
|0x6A&lt;br /&gt;
|j&lt;br /&gt;
|Clears screen, homes cursor. Another escaped synonym for 0x0C.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERSLIN&lt;br /&gt;
|0x6C&lt;br /&gt;
|l (lowercase-L)&lt;br /&gt;
|Erase entire line containing cursor.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ENTREV&lt;br /&gt;
|0x70&lt;br /&gt;
|p&lt;br /&gt;
|Turn on reverse character mode&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|EXTREV&lt;br /&gt;
|0x71&lt;br /&gt;
|q&lt;br /&gt;
|Turn off reverse character mode&lt;br /&gt;
|None&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_100_Screen_Escapes&amp;diff=2963</id>
		<title>Model 100 Screen Escapes</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_100_Screen_Escapes&amp;diff=2963"/>
		<updated>2019-02-18T02:30:53Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Change TBD to Notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Nonprinting characters&lt;br /&gt;
!Name&lt;br /&gt;
!Hex&lt;br /&gt;
!Description&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|BELL&lt;br /&gt;
|0x07&lt;br /&gt;
|Beep tone&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|BACKSPACE&lt;br /&gt;
|0x08&lt;br /&gt;
|Backspace&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|HRZTAB&lt;br /&gt;
|0x09&lt;br /&gt;
|Horizontal tab: move to next tab position&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|LF&lt;br /&gt;
|0x0A&lt;br /&gt;
|Linefeed&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|VERTTAB&lt;br /&gt;
|0x0B&lt;br /&gt;
|Vertical tab: home cursor to (Row, Column) = (1,1)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|FF&lt;br /&gt;
|0x0C&lt;br /&gt;
|Form feed&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CR&lt;br /&gt;
|0x0D&lt;br /&gt;
|Carriage return&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ESC&lt;br /&gt;
|0x1B&lt;br /&gt;
|Start of escape sequence&lt;br /&gt;
|None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Screen Escapes: Precede with 0x1A / CHR$(27)&lt;br /&gt;
!Name&lt;br /&gt;
!Hex&lt;br /&gt;
!Char&lt;br /&gt;
!Description&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|CURUP&lt;br /&gt;
|0x41&lt;br /&gt;
|A&lt;br /&gt;
|Move cursor up one row unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURDWN&lt;br /&gt;
|0x42&lt;br /&gt;
|B&lt;br /&gt;
|Move cursor down one row unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURRIGHT&lt;br /&gt;
|0x43&lt;br /&gt;
|C&lt;br /&gt;
|Move cursor right one column unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURLEFT&lt;br /&gt;
|0x44&lt;br /&gt;
|D&lt;br /&gt;
|Move cursor left one column unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CLRSCR&lt;br /&gt;
|0x45&lt;br /&gt;
|E&lt;br /&gt;
|Clears screen, homes cursor. Escaped synonym for 0x0C.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|HOME&lt;br /&gt;
|0x46&lt;br /&gt;
|H&lt;br /&gt;
|Home the cursor. Sets cursor to (Row, Column) = (1,1)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERAEOS&lt;br /&gt;
|0x4A&lt;br /&gt;
|J&lt;br /&gt;
|Erase from cursor to end of screen&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERAEOL&lt;br /&gt;
|0x4B&lt;br /&gt;
|K&lt;br /&gt;
|Erase from cursor to end of line&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|INSLIN&lt;br /&gt;
|0x4C&lt;br /&gt;
|L&lt;br /&gt;
|Insert a blank line on LCD at current cursor (what if in middle of line?)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|DELLIN&lt;br /&gt;
|0x4D&lt;br /&gt;
|M&lt;br /&gt;
|Delete line on LCD at current cursor (what if in middle of line?)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURON&lt;br /&gt;
|0x50&lt;br /&gt;
|P&lt;br /&gt;
|Turn on cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CUROFF&lt;br /&gt;
|0x51&lt;br /&gt;
|Q&lt;br /&gt;
|Turn off cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|SETSYS&lt;br /&gt;
|0x54&lt;br /&gt;
|T&lt;br /&gt;
|Set system line (lock LCD row 8)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|RSTSYS&lt;br /&gt;
|0x55&lt;br /&gt;
|U&lt;br /&gt;
|Reset system line (unlock LCD row 8)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|LOCK&lt;br /&gt;
|0x56&lt;br /&gt;
|V&lt;br /&gt;
|Lock LCD display (no scrolling)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|UNLOCK&lt;br /&gt;
|0x57&lt;br /&gt;
|W&lt;br /&gt;
|Unlock LCD display (allow scrolling)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|REDRAW&lt;br /&gt;
|0x58&lt;br /&gt;
|X&lt;br /&gt;
|Redraw the screen&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURPOS&lt;br /&gt;
|0x59 [0-based row + 32] [0-based col + 32]&lt;br /&gt;
|Y&lt;br /&gt;
|Position cursor at (Row, Column)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CLRSC2&lt;br /&gt;
|0x6A&lt;br /&gt;
|j&lt;br /&gt;
|Clears screen, homes cursor. Another escaped synonym for 0x0C.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERSLIN&lt;br /&gt;
|0x6C&lt;br /&gt;
|l (lowercase-L)&lt;br /&gt;
|Erase entire line containing cursor.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ENTREV&lt;br /&gt;
|0x70&lt;br /&gt;
|p&lt;br /&gt;
|Turn on reverse character mode&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|EXTREV&lt;br /&gt;
|0x71&lt;br /&gt;
|q&lt;br /&gt;
|Turn off reverse character mode&lt;br /&gt;
|None&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_100_Screen_Escapes&amp;diff=2962</id>
		<title>Model 100 Screen Escapes</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_100_Screen_Escapes&amp;diff=2962"/>
		<updated>2019-02-18T01:43:39Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Created page with &amp;quot;{| class=&amp;quot;wikitable&amp;quot; |+Nonprinting characters !Name !Hex !Description !TBD |- |BELL |0x07 |Beep tone |None |- |BACKSPACE |0x08 |Backspace |None |- |HRZTAB |0x09 |Horizontal ta...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Nonprinting characters&lt;br /&gt;
!Name&lt;br /&gt;
!Hex&lt;br /&gt;
!Description&lt;br /&gt;
!TBD&lt;br /&gt;
|-&lt;br /&gt;
|BELL&lt;br /&gt;
|0x07&lt;br /&gt;
|Beep tone&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|BACKSPACE&lt;br /&gt;
|0x08&lt;br /&gt;
|Backspace&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|HRZTAB&lt;br /&gt;
|0x09&lt;br /&gt;
|Horizontal tab: move to next tab position&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|LF&lt;br /&gt;
|0x0A&lt;br /&gt;
|Linefeed&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|VERTTAB&lt;br /&gt;
|0x0B&lt;br /&gt;
|Vertical tab: home cursor to (Row, Column) = (1,1)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|FF&lt;br /&gt;
|0x0C&lt;br /&gt;
|Form feed&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CR&lt;br /&gt;
|0x0D&lt;br /&gt;
|Carriage return&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ESC&lt;br /&gt;
|0x1B&lt;br /&gt;
|Start of escape sequence&lt;br /&gt;
|None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Screen Escapes: Precede with 0x1A / CHR$(27)&lt;br /&gt;
!Name&lt;br /&gt;
!Hex&lt;br /&gt;
!Char&lt;br /&gt;
!Description&lt;br /&gt;
!TBD&lt;br /&gt;
|-&lt;br /&gt;
|CURUP&lt;br /&gt;
|0x41&lt;br /&gt;
|A&lt;br /&gt;
|Move cursor up one row unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURDWN&lt;br /&gt;
|0x42&lt;br /&gt;
|B&lt;br /&gt;
|Move cursor down one row unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURRIGHT&lt;br /&gt;
|0x43&lt;br /&gt;
|C&lt;br /&gt;
|Move cursor right one column unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURLEFT&lt;br /&gt;
|0x44&lt;br /&gt;
|D&lt;br /&gt;
|Move cursor left one column unless already at edge&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CLRSCR&lt;br /&gt;
|0x45&lt;br /&gt;
|E&lt;br /&gt;
|Clears screen, homes cursor. Escaped synonym for 0x0C.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|HOME&lt;br /&gt;
|0x46&lt;br /&gt;
|H&lt;br /&gt;
|Home the cursor. Sets cursor to (Row, Column) = (1,1)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERAEOS&lt;br /&gt;
|0x4A&lt;br /&gt;
|J&lt;br /&gt;
|Erase from cursor to end of screen&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERAEOL&lt;br /&gt;
|0x4B&lt;br /&gt;
|K&lt;br /&gt;
|Erase from cursor to end of line&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|INSLIN&lt;br /&gt;
|0x4C&lt;br /&gt;
|L&lt;br /&gt;
|Insert a blank line on LCD at current cursor (what if in middle of line?)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|DELLIN&lt;br /&gt;
|0x4D&lt;br /&gt;
|M&lt;br /&gt;
|Delete line on LCD at current cursor (what if in middle of line?)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURON&lt;br /&gt;
|0x50&lt;br /&gt;
|P&lt;br /&gt;
|Turn on cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CUROFF&lt;br /&gt;
|0x51&lt;br /&gt;
|Q&lt;br /&gt;
|Turn off cursor&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|SETSYS&lt;br /&gt;
|0x54&lt;br /&gt;
|T&lt;br /&gt;
|Set system line (lock LCD row 8)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|RSTSYS&lt;br /&gt;
|0x55&lt;br /&gt;
|U&lt;br /&gt;
|Reset system line (unlock LCD row 8)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|LOCK&lt;br /&gt;
|0x56&lt;br /&gt;
|V&lt;br /&gt;
|Lock LCD display (no scrolling)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|UNLOCK&lt;br /&gt;
|0x57&lt;br /&gt;
|W&lt;br /&gt;
|Unlock LCD display (allow scrolling)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|REDRAW&lt;br /&gt;
|0x58&lt;br /&gt;
|X&lt;br /&gt;
|Redraw the screen&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CURPOS&lt;br /&gt;
|0x59 [0-based row + 32] [0-based col + 32]&lt;br /&gt;
|Y&lt;br /&gt;
|Position cursor at (Row, Column)&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|CLRSC2&lt;br /&gt;
|0x6A&lt;br /&gt;
|j&lt;br /&gt;
|Clears screen, homes cursor. Another escaped synonym for 0x0C.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ERSLIN&lt;br /&gt;
|0x6C&lt;br /&gt;
|l (lowercase-L)&lt;br /&gt;
|Erase entire line containing cursor.&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|ENTREV&lt;br /&gt;
|0x70&lt;br /&gt;
|p&lt;br /&gt;
|Turn on reverse character mode&lt;br /&gt;
|None&lt;br /&gt;
|-&lt;br /&gt;
|EXTREV&lt;br /&gt;
|0x71&lt;br /&gt;
|q&lt;br /&gt;
|Turn off reverse character mode&lt;br /&gt;
|None&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=M100_CP/M&amp;diff=2926</id>
		<title>M100 CP/M</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=M100_CP/M&amp;diff=2926"/>
		<updated>2017-09-12T16:09:57Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Created page with &amp;quot;Placeholder for M100 CP/M content&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Placeholder for M100 CP/M content&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TPDD_Design_Notes&amp;diff=2918</id>
		<title>TPDD Design Notes</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TPDD_Design_Notes&amp;diff=2918"/>
		<updated>2016-11-30T06:50:39Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* Update: Work Completed! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The initial purpose is to document an effort to reverse engineer the TPDD and TPDD-2, in order to get a better understanding of the protocols that they support.&lt;br /&gt;
&lt;br /&gt;
== Major silicon components ==&lt;br /&gt;
&lt;br /&gt;
According to the schematics of the TPDD and TPDD-2, the major components of interest are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;HD6301: CPU (a 6800 derivative with 128 bytes of onboard RAM, 4K of onboard ROM and a UART). Datasheet: [[Media:Hd6301.pdf‎]]&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;uPD449G (TPDD) / HM6117 (TPPD-2): RAM&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;uPD65002: CMOS Gate Array&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Initial Thoughts ==&lt;br /&gt;
&lt;br /&gt;
The idea for dumping the ROM of the TPDD came from the IPL boot code of the TPDD (need to check that this is the same for TPDD-2): &lt;br /&gt;
&lt;br /&gt;
 10 OPEN &amp;quot;COM:88N1DNN&amp;quot; FOR OUTPUT AS #1&lt;br /&gt;
 20 PRINT #1, &amp;quot;S10985157C00AD7EF08B3AS901FE&amp;quot;&lt;br /&gt;
 30 LOAD &amp;quot;COM:88N1ENN&amp;quot;, R&lt;br /&gt;
&lt;br /&gt;
It was noted that line 20 is [http://en.wikipedia.org/wiki/S-record S Record format], and breaks down as:&lt;br /&gt;
&lt;br /&gt;
 S1 09 8515 7C 00 AD 7E F0 8B 3A &lt;br /&gt;
 S9 01 FE&lt;br /&gt;
&lt;br /&gt;
which translates to &amp;quot;starting at address 8515, load the bytes 7C 00 AD 7E F0 8B&amp;quot;, then terminate.  Note that the termination record (&amp;quot;S9&amp;quot;) is shorter than normal as it is missing the address component (possibly legal, but unusual).&lt;br /&gt;
&lt;br /&gt;
The BASIC program then loads a program from the serial port (in this case, attached TPDD).&lt;br /&gt;
&lt;br /&gt;
Given that we know the CPU type of the TPDD, disassembling those bytes gives:&lt;br /&gt;
&lt;br /&gt;
 8515 INC  $00AD&lt;br /&gt;
 8518 JMP  F08B&lt;br /&gt;
&lt;br /&gt;
These locations match up with what is known from the datasheet of the HD6301 (internal RAM maps from $0080 to $00FF, internal ROM maps from $F000 to $FFFF).&lt;br /&gt;
&lt;br /&gt;
The question is, what else could we do with that line 20?  Could we possibly coerce the TPDD into spilling its ROM contents over the serial port?&lt;br /&gt;
&lt;br /&gt;
Current thoughts on plans of attack are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Seeing how much wiggle room there is in the boot code space (i.e. how much extra can we upload?)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;How the uploaded boot code interacts with the boot sequence&lt;br /&gt;
 &amp;lt;UL&amp;gt;&amp;lt;LI&amp;gt;at what point does the uploaded code get executed?  Are we patching a known location that the ROM calls? (is location 8515 magical?)?&amp;lt;/LI&amp;gt;&lt;br /&gt;
 &amp;lt;LI&amp;gt;(partly related to above) what triggers the execution? On receipt of the S9 record?&amp;lt;/LI&amp;gt;&lt;br /&gt;
 &amp;lt;LI&amp;gt;what is the significance of address $00AD?&amp;lt;/LI&amp;gt;&lt;br /&gt;
 &amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update: Work Completed! ==&lt;br /&gt;
&lt;br /&gt;
[[:file:PDD Reverse Engineering.zip|PDD Reverse Engineering]]&lt;br /&gt;
&lt;br /&gt;
From Darren Clark:&lt;br /&gt;
&lt;br /&gt;
Hello all,&lt;br /&gt;
I see on the Wiki that someone was working on trying to dump the ROM on the PDD, but that page was last updated in 2009. Well I took the challenge and wrote this little program to try it.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also posted the S-REC too so anybody can try it. In order to get the S-REC to work do the following:&lt;br /&gt;
&lt;br /&gt;
# Switch your PDD to 9600 BUAD, the switches on the bottom need to be set to ON.&lt;br /&gt;
# Connect your PDD to a PC and connect with Hyper Terminal or another terminal program.&lt;br /&gt;
# Settings are 9600-8-n-1, no flow control. Set the line delay and character delay to 20mS, otherwise we&#039;re pushing data to the CPU too fast and will get a blinking light.&lt;br /&gt;
# Paste each line of the S-REC into the terminal program, but do not include the CR/LF (i.e. only highlight the text).&lt;br /&gt;
# If the Low Battery light starts blinking, start over because something bad happened (like accidently included a CR/LF).&lt;br /&gt;
# When the last line is pasted &amp;quot;S901FE&amp;quot;, this triggers the program running in the ROM to jump to address 0x8515 and execute the program&lt;br /&gt;
# The ROM (F000-FFFF) is now dumped to the terminal program in the following format:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        F000:0F 8E 87 FF 86 FC 97 00&lt;br /&gt;
        F008:86 34 97 02 86 FF 97 04&lt;br /&gt;
        F010:97 05 86 A0 B7 40 00 F6&lt;br /&gt;
        F018:40 01 C4 F0 37 54 54 54&lt;br /&gt;
        F020:54 CE FF B7 3A A6 00 97&lt;br /&gt;
        F028:80 B7 40 01 86 10 97 01&lt;br /&gt;
        F030:86 0C 97 10 86 0A 97 11&lt;br /&gt;
        F038:CE 00 81 CC 00 7F BD F9&lt;br /&gt;
        F040:AD 72 FF 86 C6 64 BD F9&lt;br /&gt;
        F048:BC BD F4 51 33 C1 D0 24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darren Clark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TPDD_Design_Notes&amp;diff=2917</id>
		<title>TPDD Design Notes</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TPDD_Design_Notes&amp;diff=2917"/>
		<updated>2016-11-30T06:45:20Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The initial purpose is to document an effort to reverse engineer the TPDD and TPDD-2, in order to get a better understanding of the protocols that they support.&lt;br /&gt;
&lt;br /&gt;
== Major silicon components ==&lt;br /&gt;
&lt;br /&gt;
According to the schematics of the TPDD and TPDD-2, the major components of interest are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;HD6301: CPU (a 6800 derivative with 128 bytes of onboard RAM, 4K of onboard ROM and a UART). Datasheet: [[Media:Hd6301.pdf‎]]&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;uPD449G (TPDD) / HM6117 (TPPD-2): RAM&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;uPD65002: CMOS Gate Array&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Initial Thoughts ==&lt;br /&gt;
&lt;br /&gt;
The idea for dumping the ROM of the TPDD came from the IPL boot code of the TPDD (need to check that this is the same for TPDD-2): &lt;br /&gt;
&lt;br /&gt;
 10 OPEN &amp;quot;COM:88N1DNN&amp;quot; FOR OUTPUT AS #1&lt;br /&gt;
 20 PRINT #1, &amp;quot;S10985157C00AD7EF08B3AS901FE&amp;quot;&lt;br /&gt;
 30 LOAD &amp;quot;COM:88N1ENN&amp;quot;, R&lt;br /&gt;
&lt;br /&gt;
It was noted that line 20 is [http://en.wikipedia.org/wiki/S-record S Record format], and breaks down as:&lt;br /&gt;
&lt;br /&gt;
 S1 09 8515 7C 00 AD 7E F0 8B 3A &lt;br /&gt;
 S9 01 FE&lt;br /&gt;
&lt;br /&gt;
which translates to &amp;quot;starting at address 8515, load the bytes 7C 00 AD 7E F0 8B&amp;quot;, then terminate.  Note that the termination record (&amp;quot;S9&amp;quot;) is shorter than normal as it is missing the address component (possibly legal, but unusual).&lt;br /&gt;
&lt;br /&gt;
The BASIC program then loads a program from the serial port (in this case, attached TPDD).&lt;br /&gt;
&lt;br /&gt;
Given that we know the CPU type of the TPDD, disassembling those bytes gives:&lt;br /&gt;
&lt;br /&gt;
 8515 INC  $00AD&lt;br /&gt;
 8518 JMP  F08B&lt;br /&gt;
&lt;br /&gt;
These locations match up with what is known from the datasheet of the HD6301 (internal RAM maps from $0080 to $00FF, internal ROM maps from $F000 to $FFFF).&lt;br /&gt;
&lt;br /&gt;
The question is, what else could we do with that line 20?  Could we possibly coerce the TPDD into spilling its ROM contents over the serial port?&lt;br /&gt;
&lt;br /&gt;
Current thoughts on plans of attack are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Seeing how much wiggle room there is in the boot code space (i.e. how much extra can we upload?)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;How the uploaded boot code interacts with the boot sequence&lt;br /&gt;
 &amp;lt;UL&amp;gt;&amp;lt;LI&amp;gt;at what point does the uploaded code get executed?  Are we patching a known location that the ROM calls? (is location 8515 magical?)?&amp;lt;/LI&amp;gt;&lt;br /&gt;
 &amp;lt;LI&amp;gt;(partly related to above) what triggers the execution? On receipt of the S9 record?&amp;lt;/LI&amp;gt;&lt;br /&gt;
 &amp;lt;LI&amp;gt;what is the significance of address $00AD?&amp;lt;/LI&amp;gt;&lt;br /&gt;
 &amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update: Work Completed! ==&lt;br /&gt;
&lt;br /&gt;
[[:file:PDD Reverse Engineering.zip|PDD Reverse Engineering]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=File:PDD_Reverse_Engineering.zip&amp;diff=2916</id>
		<title>File:PDD Reverse Engineering.zip</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=File:PDD_Reverse_Engineering.zip&amp;diff=2916"/>
		<updated>2016-11-30T06:42:02Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: ROM dump of Tandy Portable Disk Drive&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ROM dump of Tandy Portable Disk Drive&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Template:Extension_DPL&amp;diff=2581</id>
		<title>Template:Extension DPL</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Template:Extension_DPL&amp;diff=2581"/>
		<updated>2014-11-16T01:12:53Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: Template:Extension DPL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;This page was automatically created. It serves as an anchor page for all &#039;&#039;&#039;[[Special:WhatLinksHere/Template:Extension_DPL|invocations]]&#039;&#039;&#039; of [http://mediawiki.org/wiki/Extension:DynamicPageList Extension:DynamicPageList (DPL)].&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Recovering_an_Unresponsive_Laptop&amp;diff=2570</id>
		<title>Recovering an Unresponsive Laptop</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Recovering_an_Unresponsive_Laptop&amp;diff=2570"/>
		<updated>2013-09-25T21:48:18Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* Clear the RAM File System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every once in a while, someone comes to the TRS-80 Model 100 mailing&lt;br /&gt;
list asking how to recover a laptop they bought off ebay that is&lt;br /&gt;
unresponsive to the power button.&lt;br /&gt;
&lt;br /&gt;
== Clear the RAM File System ==&lt;br /&gt;
&lt;br /&gt;
Although the Model T laptops use standard AA batteries, understand that there is an internal battery soldered to the motherboard that maintains power to the RAM even when the main batteries are dead or removed.&lt;br /&gt;
&lt;br /&gt;
Often with units that have sat unused for awhile these problems occur:&lt;br /&gt;
&lt;br /&gt;
* the nicad is drained&lt;br /&gt;
* the RAM is in some random state&lt;br /&gt;
* the contrast knob is in some random state&lt;br /&gt;
&lt;br /&gt;
You need to resolve all three, but you need to do it in the right&lt;br /&gt;
order. Almost always you can recover a Model T without resorting to&lt;br /&gt;
more serious troubleshooting.&lt;br /&gt;
&lt;br /&gt;
# Leave the laptop plugged in to the wallcube overnight with Memory Power switch on, and the power off. I don&#039;t think it matters whether you use good AA&#039;s or the wallcube at this point.&lt;br /&gt;
# Let the unit sit with the Memory Power button off and no plug or other cables connected or batteries in the battery compartment for about 15 minutes in order to clear the RAM.&lt;br /&gt;
# Turn the memory power switch back on, reinstall the AA batteries and/or connect the power cable&lt;br /&gt;
# With the power-button ON, hold down Ctrl-shift-break simultaneously, and hit reset button to clear the RAM&lt;br /&gt;
&lt;br /&gt;
Now fiddle with the contrast knob. Hopefully you will see the normal Model 100 main menu.&lt;br /&gt;
&lt;br /&gt;
== Check the Display ==&lt;br /&gt;
&lt;br /&gt;
In rarer cases, the problem is a bad display, or problematic (internal) display connection. If the &amp;quot;clear RAM&amp;quot; steps above do not resolve the issues, the display is the next thing to check.&lt;br /&gt;
&lt;br /&gt;
To diagnose this problem,&lt;br /&gt;
# Perform cold-boot (CTRL-BREAK-Reset)&lt;br /&gt;
# Hit the Enter key&lt;br /&gt;
# Type &amp;quot;beep&amp;quot; (without quotes) and hit Enter again&lt;br /&gt;
The machine will make a beep sound if it is actually working (meaning it has a bad LCD or bad LCD connection). Your recourse at this stage is to find a replacement display. Club100 or another community member may be able to help you.&lt;br /&gt;
&lt;br /&gt;
If it doesn&#039;t work you could have multiple problems, including a bad display, bad keyboard, or a problem with the mainboard.&lt;br /&gt;
&lt;br /&gt;
== Otherwise ==&lt;br /&gt;
&lt;br /&gt;
If none of the steps above lead you to a resolution, then more serious troubleshooting begins. Head over to the Model 100 mailing list (you can subscribe at [http://club100.org/list.html Model 100 Mailing List] )&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Hardware Hacking]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Recovering_an_Unresponsive_Laptop&amp;diff=2569</id>
		<title>Recovering an Unresponsive Laptop</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Recovering_an_Unresponsive_Laptop&amp;diff=2569"/>
		<updated>2013-09-25T21:45:37Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* Clear the RAM File System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every once in a while, someone comes to the TRS-80 Model 100 mailing&lt;br /&gt;
list asking how to recover a laptop they bought off ebay that is&lt;br /&gt;
unresponsive to the power button.&lt;br /&gt;
&lt;br /&gt;
== Clear the RAM File System ==&lt;br /&gt;
&lt;br /&gt;
Although the Model T laptops use standard AA batteries, understand that there is an internal battery soldered to the motherboard that maintains power to the RAM even when the main batteries are dead or removed.&lt;br /&gt;
&lt;br /&gt;
Often with units that have sat unused for awhile these problems occur:&lt;br /&gt;
&lt;br /&gt;
* the nicad is drained&lt;br /&gt;
* the RAM is in some random state&lt;br /&gt;
* the contrast knob is in some random state&lt;br /&gt;
&lt;br /&gt;
You need to resolve all three, but you need to do it in the right&lt;br /&gt;
order. Almost always you can recover a Model T without resorting to&lt;br /&gt;
more serious troubleshooting.&lt;br /&gt;
&lt;br /&gt;
# Leave the laptop plugged in to the wallcube overnight with Memory Power switch on, and the power off. I don&#039;t think it matters whether you use good AA&#039;s or the wallcube at this point.&lt;br /&gt;
# Let the unit sit with the Memory Power button off and no plug or other cables connected or batteries in the battery compartment for about 15 minutes in order to clear the RAM.&lt;br /&gt;
# Turn the memory power switch back on&lt;br /&gt;
# With the power-button ON, hold down Ctrl-shift-break simultaneously, and hit reset button to clear the RAM&lt;br /&gt;
&lt;br /&gt;
Now fiddle with the contrast knob. Hopefully you will see the normal Model 100 main menu.&lt;br /&gt;
&lt;br /&gt;
== Check the Display ==&lt;br /&gt;
&lt;br /&gt;
In rarer cases, the problem is a bad display, or problematic (internal) display connection. If the &amp;quot;clear RAM&amp;quot; steps above do not resolve the issues, the display is the next thing to check.&lt;br /&gt;
&lt;br /&gt;
To diagnose this problem,&lt;br /&gt;
# Perform cold-boot (CTRL-BREAK-Reset)&lt;br /&gt;
# Hit the Enter key&lt;br /&gt;
# Type &amp;quot;beep&amp;quot; (without quotes) and hit Enter again&lt;br /&gt;
The machine will make a beep sound if it is actually working (meaning it has a bad LCD or bad LCD connection). Your recourse at this stage is to find a replacement display. Club100 or another community member may be able to help you.&lt;br /&gt;
&lt;br /&gt;
If it doesn&#039;t work you could have multiple problems, including a bad display, bad keyboard, or a problem with the mainboard.&lt;br /&gt;
&lt;br /&gt;
== Otherwise ==&lt;br /&gt;
&lt;br /&gt;
If none of the steps above lead you to a resolution, then more serious troubleshooting begins. Head over to the Model 100 mailing list (you can subscribe at [http://club100.org/list.html Model 100 Mailing List] )&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Hardware Hacking]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=2563</id>
		<title>LaddieCon</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=LaddieCon&amp;diff=2563"/>
		<updated>2012-10-19T00:40:49Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: /* LaddieAlpha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is a Model 100 disk drive emulator written for Microsoft .NET. However it does depend on&lt;br /&gt;
the Win32 API for access to the serial port. So it is completely portable to any Microsoft operating&lt;br /&gt;
system running .NET ;-) . This is for historical reasons only... when LaddieCon was written, there was no&lt;br /&gt;
serial port API in .NET. If you need a TPDD emulator for a POSIX system, you should be using [[DLPlus]] or LaddieAlpha.&lt;br /&gt;
&lt;br /&gt;
Note that LaddieCon does NOT support TS-DOS directory extensions, but LaddieAlpha does.&lt;br /&gt;
&lt;br /&gt;
To run LaddieCon, you need to have installed the .NET Framework redistributable from Microsoft.&lt;br /&gt;
Most likely if your system is up-to-date on patches this is already done.&lt;br /&gt;
&lt;br /&gt;
== Download LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/windows/LaddieCon.exe Download LaddieCon]&lt;br /&gt;
&lt;br /&gt;
== Running LaddieCon ==&lt;br /&gt;
&lt;br /&gt;
On your laptop, you must be running a TPDD client. TPDD clients include TS-DOS, TEENY, POWR-DOS, FLOPPY.CO or the WP-2 Disk mode.&lt;br /&gt;
&lt;br /&gt;
REX Manager is also a TPDD client, though it is limited to transferring 32K image files rather than individual .DO and .CO files.&lt;br /&gt;
&lt;br /&gt;
For the physical connection, you need a &amp;quot;null modem&amp;quot; wired serial cable to connect to a serial port on your Windows PC. You need to know which numbered COM port you are using on the PC side.&lt;br /&gt;
&lt;br /&gt;
LADDIECON.EXE runs on a Windows computer, on top of the .Net Framework. To start it,&lt;br /&gt;
&lt;br /&gt;
Click Start -&amp;gt; Run -&amp;gt; cmd.exe&lt;br /&gt;
&lt;br /&gt;
Assuming LADDIECON.EXE is saved at c:\tools\laddiecon.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
For the M100/T102/T200:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 6&lt;br /&gt;
&lt;br /&gt;
For the WP-2:&lt;br /&gt;
&lt;br /&gt;
c:\tools\laddiecon.exe com1 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here I put &#039;com1.&#039; For your setup, the number may well be different.&lt;br /&gt;
&lt;br /&gt;
If you are using a Tandy WP-2 word processor, make sure to change the &#039;6&#039; to an &#039;8&#039;. This is important because the WP-2 uses an 8.2 style (8 characters for the base name, 2 characters for extension) filename, while the Model 10x and 200 use a 6.2 style filename. If you don&#039;t set this properly, you will get weird behavior.&lt;br /&gt;
&lt;br /&gt;
When you press ENTER, laddiecon should run until you hit CTRL-C. It won&#039;t appear to &amp;quot;do anything.&amp;quot; It is completely &amp;quot;remote controlled&amp;quot; by your disk client on the Model T laptop.&lt;br /&gt;
&lt;br /&gt;
== LaddieCon and Vista ==&lt;br /&gt;
&lt;br /&gt;
LaddieCon is reported to work with Vista. However, you must run &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; in &amp;quot;Administrator Mode.&amp;quot; Also, your USB adapter must have a driver that is compatible with Vista.&lt;br /&gt;
&lt;br /&gt;
To enable &amp;quot;Run As Administrator:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Find your &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; executable with Windows Explorer.&lt;br /&gt;
# Right click on &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039;&lt;br /&gt;
# Select Properties-&amp;gt;Compatibility Tab&lt;br /&gt;
# Check the &#039;Run as Administrator&#039; option.&lt;br /&gt;
&lt;br /&gt;
Note: if anyone knows a more fine-grained way to permit &#039;&#039;&#039;laddiecon.exe&#039;&#039;&#039; to access&lt;br /&gt;
the COM port without using Administrator Mode, please note it here.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re looking for a USB-&amp;gt;serial adapter known to work with Vista, the following have been tested:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;USBGEAR U232-P9AP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Also, Chris Fezzler reports this device as working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Gigaware 6-Ft. USB-A to Serial Cable&lt;br /&gt;
SKU Model:26-949&lt;br /&gt;
Driver Date 6/25/2007&lt;br /&gt;
Driver Version 3.1.0.0&lt;br /&gt;
Provider: Prolific Technologies&lt;br /&gt;
Purchased at Radio Shack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please add any other adapters you verify work with Vista and LaddieCon.&lt;br /&gt;
&lt;br /&gt;
The following devices are known not to work with Vista:&lt;br /&gt;
&lt;br /&gt;
* Belkin USB-to-Serial cable &#039;&#039;&#039;Model F5U109&#039;&#039;&#039;.  Despite having Vista driver, was unsuccessful in getting it to work.&lt;br /&gt;
&lt;br /&gt;
== LaddieAlpha ==&lt;br /&gt;
&lt;br /&gt;
More info to come. This is a new &amp;quot;cross platform&amp;quot; build of LaddieCon that works on both .NET and mono. So you can run the same LaddieCon on Windows, Linux and Mac boxes!&lt;br /&gt;
&lt;br /&gt;
Advantages of LaddieAlpha over LaddieCon:&lt;br /&gt;
&lt;br /&gt;
* Runs cross-platform&lt;br /&gt;
* Implements TS-DOS/Desklink directory extensions&lt;br /&gt;
* Maps/fixes up extensions presented to TS-DOS so .DO&#039;s misnamed .BA don&#039;t crash your laptop&lt;br /&gt;
&lt;br /&gt;
The only disadvantage of LaddieAlpha is that it won&#039;t run on Windows 98 (that is, the .NET version it requires was never ported by Microsoft to Windows 98).&lt;br /&gt;
&lt;br /&gt;
[http://bitchin100.com/files/linux/LaddieAlpha.EXE Download and test LaddieAlpha]&lt;br /&gt;
&lt;br /&gt;
Example Linux invocation for use with a Model 100/102/200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mono ./LaddieAlpha.EXE /dev/ttyUSB0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: On OSX, If you get an error about libMonoPosixHelper.dylib, mono may be finding the wrong shared library.&lt;br /&gt;
&lt;br /&gt;
You need to edit the file /opt/local/etc/mono/config and change the relevant line as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;lt;dllmap dll=&amp;quot;MonoPosixHelper&amp;quot; target=&amp;quot;/opt/local/lib/libMonoPosixHelper.dylib&amp;quot;/&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;!--dllmap dll=&amp;quot;MonoPosixHelper&amp;quot; target=&amp;quot;libMonoPosixHelper.dylib&amp;quot; os=&amp;quot;!windows&amp;quot; /--&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reliable Text-Only Transfers ==&lt;br /&gt;
&lt;br /&gt;
If you are only transferring text files, Hyperterminal is known to be a reliable way to transfer files even at 19200 using XON/XOFF protocol. Note that saving and loading text files via the TEXT application is much faster than TELCOM, because TEXT does not scroll the text to the screen as it captures.&lt;br /&gt;
&lt;br /&gt;
See [[Text File Transfer using Hyperterminal]] for details instructions on getting Hyperterminal working.&lt;br /&gt;
&lt;br /&gt;
[[Category:TPDD Service]] [[Category:File Transfer]]&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Setting_up_RN42_Bluetooth_on_Linux&amp;diff=2562</id>
		<title>Setting up RN42 Bluetooth on Linux</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Setting_up_RN42_Bluetooth_on_Linux&amp;diff=2562"/>
		<updated>2012-09-05T18:31:13Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Open a terminal prompt&lt;br /&gt;
jhoger@hegemon:~$ hcitool scan&lt;br /&gt;
Scanning ...&lt;br /&gt;
	00:06:66:43:02:81	RN42-0281&lt;br /&gt;
&lt;br /&gt;
Get the &amp;quot;Channel&amp;quot; using the sdptool program:&lt;br /&gt;
&lt;br /&gt;
jhoger@hegemon:~$ sdptool records 00:06:66:43:02:81&lt;br /&gt;
Service Name: SPP&lt;br /&gt;
Service RecHandle: 0x10000&lt;br /&gt;
Service Class ID List:&lt;br /&gt;
  &amp;quot;Serial Port&amp;quot; (0x1101)&lt;br /&gt;
Protocol Descriptor List:&lt;br /&gt;
  &amp;quot;L2CAP&amp;quot; (0x0100)&lt;br /&gt;
  &amp;quot;RFCOMM&amp;quot; (0x0003)&lt;br /&gt;
    Channel: 1&lt;br /&gt;
Language Base Attr List:&lt;br /&gt;
  code_ISO639: 0x656e&lt;br /&gt;
  encoding:    0x6a&lt;br /&gt;
  base_offset: 0x100&lt;br /&gt;
&lt;br /&gt;
jhoger@hegemon:~$&lt;br /&gt;
&lt;br /&gt;
Edit /etc/bluetooth/rfcomm.conf&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# RFCOMM configuration file.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
rfcomm0 {&lt;br /&gt;
        # Automatically bind the device at startup&lt;br /&gt;
        bind no;&lt;br /&gt;
&lt;br /&gt;
        # Bluetooth address of the device&lt;br /&gt;
        device 00:06:66:43:02:81;&lt;br /&gt;
&lt;br /&gt;
        # RFCOMM channel for the connection&lt;br /&gt;
        channel 1;&lt;br /&gt;
&lt;br /&gt;
        # Description of the connection&lt;br /&gt;
        comment &amp;quot;Model T Bluetooth&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
jhoger@hegemon:~$ rfcomm bind rfcomm0&lt;br /&gt;
&lt;br /&gt;
jhoger@hegemon:~$ minicom -b 38400 -D /dev/rfcomm0&lt;br /&gt;
&lt;br /&gt;
Light should come on red, and you should be able to communicate with the BT radio via HTERM.&lt;br /&gt;
&lt;br /&gt;
Or, you can run with LaddieAlpha:&lt;br /&gt;
Use HTERM to set the baud rate to 19200bps:&lt;br /&gt;
$$$&lt;br /&gt;
su,19200&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
mono LaddieAlpha.exe /dev/rfcomm0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Setting_up_RN42_Bluetooth_on_Linux&amp;diff=2561</id>
		<title>Setting up RN42 Bluetooth on Linux</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Setting_up_RN42_Bluetooth_on_Linux&amp;diff=2561"/>
		<updated>2012-09-05T18:28:28Z</updated>

		<summary type="html">&lt;p&gt;Jhoger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Open a terminal prompt&lt;br /&gt;
jhoger@hegemon:~$ hcitool scan&lt;br /&gt;
Scanning ...&lt;br /&gt;
	00:06:66:43:02:81	RN42-0281&lt;br /&gt;
&lt;br /&gt;
Get the &amp;quot;Channel&amp;quot; using the sdptool program:&lt;br /&gt;
&lt;br /&gt;
jhoger@hegemon:~$ sdptool records 00:06:66:43:02:81&lt;br /&gt;
Service Name: SPP&lt;br /&gt;
Service RecHandle: 0x10000&lt;br /&gt;
Service Class ID List:&lt;br /&gt;
  &amp;quot;Serial Port&amp;quot; (0x1101)&lt;br /&gt;
Protocol Descriptor List:&lt;br /&gt;
  &amp;quot;L2CAP&amp;quot; (0x0100)&lt;br /&gt;
  &amp;quot;RFCOMM&amp;quot; (0x0003)&lt;br /&gt;
    Channel: 1&lt;br /&gt;
Language Base Attr List:&lt;br /&gt;
  code_ISO639: 0x656e&lt;br /&gt;
  encoding:    0x6a&lt;br /&gt;
  base_offset: 0x100&lt;br /&gt;
&lt;br /&gt;
jhoger@hegemon:~$&lt;br /&gt;
&lt;br /&gt;
Edit /etc/bluetooth/rfcomm.conf&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# RFCOMM configuration file.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
rfcomm0 {&lt;br /&gt;
        # Automatically bind the device at startup&lt;br /&gt;
        bind no;&lt;br /&gt;
&lt;br /&gt;
        # Bluetooth address of the device&lt;br /&gt;
        device 00:06:66:43:02:81;&lt;br /&gt;
&lt;br /&gt;
        # RFCOMM channel for the connection&lt;br /&gt;
        channel 1;&lt;br /&gt;
&lt;br /&gt;
        # Description of the connection&lt;br /&gt;
        comment &amp;quot;Model T Bluetooth&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
jhoger@hegemon:~$ rfcomm bind rfcomm0&lt;br /&gt;
&lt;br /&gt;
jhoger@hegemon:~$ minicom -b 38400 -D /dev/rfcomm0&lt;br /&gt;
&lt;br /&gt;
Light should come on red, and you should be able to communicate with the BT radio via HTERM.&lt;br /&gt;
&lt;br /&gt;
Or, you can run with LaddieAlpha:&lt;br /&gt;
&lt;br /&gt;
mono LaddieAlpha.exe /dev/rfcomm0 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jhoger</name></author>
	</entry>
</feed>