<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.evillabs.net/index.php?action=history&amp;feed=atom&amp;title=OnSpec_90c26</id>
	<title>OnSpec 90c26 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.evillabs.net/index.php?action=history&amp;feed=atom&amp;title=OnSpec_90c26"/>
	<link rel="alternate" type="text/html" href="http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;action=history"/>
	<updated>2026-04-11T14:47:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=167&amp;oldid=prev</id>
		<title>Ezrec: Reverted edits by Uxuduvu (talk) to last revision by Ezrec</title>
		<link rel="alternate" type="text/html" href="http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=167&amp;oldid=prev"/>
		<updated>2010-11-22T18:12:28Z</updated>

		<summary type="html">&lt;p&gt;Reverted edits by &lt;a href=&quot;/index.php/Special:Contributions/Uxuduvu&quot; title=&quot;Special:Contributions/Uxuduvu&quot;&gt;Uxuduvu&lt;/a&gt; (&lt;a href=&quot;/index.php?title=User_talk:Uxuduvu&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Uxuduvu (page does not exist)&quot;&gt;talk&lt;/a&gt;) to last revision by &lt;a href=&quot;/index.php?title=User:Ezrec&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Ezrec (page does not exist)&quot;&gt;Ezrec&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The OnSpec 90c26 was used on Adara and Microtek flatbed scanners in the&lt;br /&gt;
late 1990s as a parallel port to SCSI adapter.&lt;br /&gt;
&lt;br /&gt;
= IBM-style Parallel Port Information =&lt;br /&gt;
&lt;br /&gt;
==Port Registers==&lt;br /&gt;
&lt;br /&gt;
 Port            R/W IOAddr      Bits    Function&lt;br /&gt;
 ----------          ------      -----   ----------------&lt;br /&gt;
 Data Out        W   Base+0      D0-D7   8 LS TTL outputs&lt;br /&gt;
 Status In       R   Base+1      S3-S7   5 LS TTL inputs&lt;br /&gt;
 Control Out     W   Base+2      C0-C3   4 TTL Open Collector outputs&lt;br /&gt;
     &amp;quot;           &amp;quot;     &amp;quot;         C4      internal, IRQ enable&lt;br /&gt;
     &amp;quot;           &amp;quot;     &amp;quot;         C5      internal, Tristate data [PS/2]&lt;br /&gt;
 &lt;br /&gt;
 Data Feedback   R   Base+0      D0-D7   matches Data Out&lt;br /&gt;
 Control Feedbk  R   Base+2      C0-C3   matches Control Out&lt;br /&gt;
     &amp;quot;           &amp;quot;     &amp;quot;         C4      internal, IRQ enable readback&lt;br /&gt;
&lt;br /&gt;
The Feedback registers are for diagnostic purposes (except in bidirectional&lt;br /&gt;
ports, where Data Feedback is used for data input; and the IRQ enable C4).&lt;br /&gt;
&lt;br /&gt;
==Pin signals and register bits==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;= in   DB25    Cent    Name of         Reg&lt;br /&gt;
 =&amp;gt; out  pin     pin     Signal          Bit     Function Notes&lt;br /&gt;
 ------  ----    ----    --------        ---     -----------------------------&lt;br /&gt;
 =&amp;gt;       1       1      -Strobe         C0-     Set Low pulse &amp;gt;0.5 us to send&lt;br /&gt;
 =&amp;gt;       2       2      Data 0          D0      Set to least significant data&lt;br /&gt;
 =&amp;gt;       3       3      Data 1          D1      ...&lt;br /&gt;
 =&amp;gt;       4       4      Data 2          D2      ...&lt;br /&gt;
 =&amp;gt;       5       5      Data 3          D3      ...&lt;br /&gt;
 =&amp;gt;       6       6      Data 4          D4      ...&lt;br /&gt;
 =&amp;gt;       7       7      Data 5          D5      ...&lt;br /&gt;
 =&amp;gt;       8       8      Data 6          D6      ...&lt;br /&gt;
 =&amp;gt;       9       9      Data 7          D7      Set to most significant data&lt;br /&gt;
 &amp;lt;=      10      10      -Ack            S6+ IRQ Low Pulse ~ 5 uS, after accept&lt;br /&gt;
 &amp;lt;=      11      11      +Busy           S7-     High for Busy/Offline/Error&lt;br /&gt;
 &amp;lt;=      12      12      +PaperEnd       S5+     High for out of paper&lt;br /&gt;
 &amp;lt;=      13      13      +SelectIn       S4+     High for printer selected&lt;br /&gt;
 =&amp;gt;      14      14      -AutoFd         C1-     Set Low to autofeed one line&lt;br /&gt;
 &amp;lt;=      15      32      -Error          S3+     Low for Error/Offline/PaperEnd&lt;br /&gt;
 =&amp;gt;      16      31      -Init           C2+     Set Low pulse &amp;gt; 50uS to init&lt;br /&gt;
 =&amp;gt;      17      36      -Select         C3-     Set Low to select printer&lt;br /&gt;
 ==      18-25   19-30,  Ground&lt;br /&gt;
                33,17,16&lt;br /&gt;
&lt;br /&gt;
Note: Some cables, ports, or connectors may not connect all grounds.&lt;br /&gt;
Centronics pins 19-30 and 33 are &amp;quot;twisted pair return&amp;quot; grounds, while&lt;br /&gt;
17 is &amp;quot;chassis ground&amp;quot; and 16 is &amp;quot;logic ground&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;lt;= In&amp;quot; and &amp;quot;=&amp;gt; Out&amp;quot; are defined from the viewpoint of the PC, not the&lt;br /&gt;
printer.  The IRQ line (-Ack/S6+) is positive edge triggered, but only&lt;br /&gt;
enabled if C4 is 1.&lt;br /&gt;
&lt;br /&gt;
Here&amp;#039;s the same data grouped for ease of reference by Control Out and Status&lt;br /&gt;
In registers and pins.  (Data Out is straightforward in previous table).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;= in   DB25    Cent    Name of         Reg&lt;br /&gt;
 =&amp;gt; out  pin     pin     Signal          Bit     Function Notes&lt;br /&gt;
 ------  ----    ----    --------        ---     ------------------------------&lt;br /&gt;
 =&amp;gt;      17      36      -Select         C3-     Set Low to select printer&lt;br /&gt;
 =&amp;gt;      16      31      -Init           C2+     Set Low pulse &amp;gt; 50uS to init&lt;br /&gt;
 =&amp;gt;      14      14      -AutoFd         C1-     Set Low to autofeed one line&lt;br /&gt;
 =&amp;gt;       1       1      -Strobe         C0-     Set Low pulse &amp;gt; 0.5 us to send&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;=      11      11      +Busy           S7-     High for Busy/Offline/Error&lt;br /&gt;
 &amp;lt;=      10      10      -Ack            S6+ IRQ Low Pulse ~ 5 uS, after accept&lt;br /&gt;
 &amp;lt;=      12      12      +PaperEnd       S5+     High for out of paper&lt;br /&gt;
 &amp;lt;=      13      13      +SelectIn       S4+     High for printer selected&lt;br /&gt;
 &amp;lt;=      15      32      -Error          S3+     Low for Error/Offline/PaperEnd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Physical Layer Protocol =&lt;br /&gt;
&lt;br /&gt;
==PS/2 and Nibble Modes==&lt;br /&gt;
&lt;br /&gt;
===Sending a Command===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
| D0-D7 || &amp;lt;= Command Byte &lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x0D (lower #STROBE, #INIT, and #SELECT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x0D (lower #STROBE, #INIT, and #SELECT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sending a Value===&lt;br /&gt;
&lt;br /&gt;
{| border=1 &lt;br /&gt;
| D0-D7 || &amp;lt;= Value Byte&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x07 (lower #STROBE, #INIT, and #AUTOFD)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Read a Register (Nibble Mode)===&lt;br /&gt;
&lt;br /&gt;
{|  border=1&lt;br /&gt;
| D0-D7 || &amp;lt;= Command Byte &lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x0D (lower #STROBE, #INIT, and #SELECT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x0D (lower #STROBE, #INIT, and #SELECT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x06 (lower #AUTOFD and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| S3-S7 || &amp;gt;= Status Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x06 (lower #AUTOFD and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| S3-S7 || &amp;gt;= Status Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Read Value = (Status Byte 1 &amp;gt;&amp;gt; 4) &amp;amp;amp; 0xf) | (Status Byte 2 &amp;amp; 0xf0)&lt;br /&gt;
&lt;br /&gt;
===Read a Register (PS/2 Mode)===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
| D0-D7 || &amp;lt;= Command Byte &lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x0D (lower #STROBE, #INIT, and #SELECT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x0D (lower #STROBE, #INIT, and #SELECT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3, Tristate Enable || &amp;lt;= 0x26 (tristate data, #AUTOFD, and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;gt;= Read Value&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Writing Register===&lt;br /&gt;
&lt;br /&gt;
{|  border=1&lt;br /&gt;
| D0-D7 || &amp;lt;= Register Byte &lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x0D (lower #STROBE, #INIT, and #SELECT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x0D (lower #STROBE, #INIT, and #SELECT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;lt;= Value Byte&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x07 (lower #STROBE, #INIT, and #AUTOFD)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Writing a Block===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;lt;= Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x07 (lower #STROBE, #AUTOFD, and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;lt;= Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| ... &lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;lt;= Byte N is even&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x07 (lower #STROBE, #AUTOFD, and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;lt;= Byte N is odd&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Reading a Block (Nibble)===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x06 (lower #AUTOFD and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| S3-S7 || &amp;gt;= Status Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x06 (lower #AUTOFD and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| S3-S7 || &amp;gt;= Status Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|- &lt;br /&gt;
| || Read Value = (Status Byte 1 &amp;gt;&amp;gt; 4) &amp;amp;amp; 0xf) &amp;amp;pipe; (Status Byte 2 &amp;amp;amp; 0xf0)&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Reading a Block (PS/2)===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x24 (Tristate, lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;gt;= Read Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x26 (tristate, lower #INIT and #AUTOFD)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;gt;= Read Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x24 (tristate, lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;gt;= Read Byte N even&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x26 (tristate, lower #INIT and #AUTOFD)&lt;br /&gt;
|-&lt;br /&gt;
| D0-D7 || &amp;gt;= Read Byte N odd&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EPP Modes==&lt;br /&gt;
&lt;br /&gt;
===Sending a Command===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
| ADDR || &amp;lt;= Command Byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sending a Value===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
| DATA || &amp;lt;= Value Byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing a Register===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
| ADDR || &amp;lt;= Register Byte&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #RESET)&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= Value Byte&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #RESET)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading a Register ===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
| ADDR || &amp;lt;= Register Byte&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3, Tristate Enable || &amp;lt;= 0x24 (tristate data, lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;gt;= Read Value&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Writing a Block ===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #STROBE and #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= Data Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= Data Byte 1&lt;br /&gt;
|-&lt;br /&gt;
...&lt;br /&gt;
| DATA || &amp;lt;= Data Byte N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading a Block ===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 Tristate || &amp;lt;= 0x24 (Tristate, lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| DATA || =&amp;gt; Data Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| DATA || =&amp;gt; Data Byte 1&lt;br /&gt;
|-&lt;br /&gt;
...&lt;br /&gt;
| DATA || =&amp;gt; Data Byte N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Link Connection ==&lt;br /&gt;
&lt;br /&gt;
=== Connect Link ===&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
| DATA || &amp;lt;= 0xFE&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0xAA&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x55&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x00&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x87&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x78&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x20&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #INIT and #STROBE)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0xFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 Nibble_Command(2)&lt;br /&gt;
 Nibble_Value(0)&lt;br /&gt;
 Nibble_Command(2)&lt;br /&gt;
 NIbble_Value(IsNibbleMode ? 0 : 1)&lt;br /&gt;
 Write_Register(2, IsNibbleMode ? 0 : 1)&lt;br /&gt;
&lt;br /&gt;
=== Disconnect Link ===&lt;br /&gt;
&lt;br /&gt;
 Write_Register(3, 0)&lt;br /&gt;
 Write_Register(7, 0x48)&lt;br /&gt;
 Command(4)&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
| DATA || &amp;lt;= 0xFE&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0xAA&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x55&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x00&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x87&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x78&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0x30&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x05 (lower #INIT and #STROBE)&lt;br /&gt;
|-&lt;br /&gt;
| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;br /&gt;
|-&lt;br /&gt;
| DATA || &amp;lt;= 0xFF&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
= OnSpec 90c26 Registers =&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! Register !! Type !! Comments&lt;br /&gt;
| 0x00 || R/W || B0-B6: SCSI Target&amp;lt;br&amp;gt;B7: Initiator Mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || R/W || B0: SCSI Connected/Busy (R/O)&lt;br /&gt;
&amp;lt;br&amp;gt;B1: SCSI Enable&lt;br /&gt;
&amp;lt;br&amp;gt;B4: SCSI Bus State REQ (R/O)&lt;br /&gt;
&amp;lt;br&amp;gt;B5: SCSI Bus State MSG (R/O)&lt;br /&gt;
&amp;lt;br&amp;gt;B6: SCSI Bus State CD (R/O)&lt;br /&gt;
&amp;lt;br&amp;gt;B7: SCSI Bus State IO (R/O)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || R/W || B0: Bi-Direction Mode Enable&lt;br /&gt;
&amp;lt;br&amp;gt;B5: Read SCSI Bus status into Register 0x01&lt;br /&gt;
&amp;lt;br&amp;gt;B7: SCSI Mode Enable&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || W ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || R || ASIC Version &lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || W || B3: Unknown&amp;lt;br&amp;gt;B6: Unknown&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
= Link Layer Protocol =&lt;/div&gt;</summary>
		<author><name>Ezrec</name></author>
	</entry>
	<entry>
		<id>http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=165&amp;oldid=prev</id>
		<title>Ezrec: /* Physical Layer Protocol */</title>
		<link rel="alternate" type="text/html" href="http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=165&amp;oldid=prev"/>
		<updated>2006-12-21T16:57:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Physical Layer Protocol&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;amp;diff=165&amp;amp;oldid=140&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Ezrec</name></author>
	</entry>
	<entry>
		<id>http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=140&amp;oldid=prev</id>
		<title>67.163.245.119: /* Reading a Register */</title>
		<link rel="alternate" type="text/html" href="http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=140&amp;oldid=prev"/>
		<updated>2006-12-21T16:12:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Reading a Register&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:12, 21 December 2006&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l233&quot;&gt;Line 233:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 233:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| C0-C3 || &amp;lt;= 0x04 (lower #INIT)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;= Link Layer Protocol =&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>67.163.245.119</name></author>
	</entry>
	<entry>
		<id>http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=139&amp;oldid=prev</id>
		<title>67.163.245.119: /* Protocol */</title>
		<link rel="alternate" type="text/html" href="http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=139&amp;oldid=prev"/>
		<updated>2006-12-21T16:10:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Protocol&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;amp;diff=139&amp;amp;oldid=138&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>67.163.245.119</name></author>
	</entry>
	<entry>
		<id>http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=138&amp;oldid=prev</id>
		<title>67.163.245.119 at 15:42, 21 December 2006</title>
		<link rel="alternate" type="text/html" href="http://www.evillabs.net/index.php?title=OnSpec_90c26&amp;diff=138&amp;oldid=prev"/>
		<updated>2006-12-21T15:42:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The OnSpec 90c26 was used on Adara and Microtek flatbed scanners in the&lt;br /&gt;
late 1990s as a parallel port to SCSI adapter.&lt;br /&gt;
&lt;br /&gt;
= IBM-style Parallel Port Information =&lt;br /&gt;
&lt;br /&gt;
==Port Registers==&lt;br /&gt;
&lt;br /&gt;
 Port            R/W IOAddr      Bits    Function&lt;br /&gt;
 ----------          ------      -----   ----------------&lt;br /&gt;
 Data Out        W   Base+0      D0-D7   8 LS TTL outputs&lt;br /&gt;
 Status In       R   Base+1      S3-S7   5 LS TTL inputs&lt;br /&gt;
 Control Out     W   Base+2      C0-C3   4 TTL Open Collector outputs&lt;br /&gt;
     &amp;quot;           &amp;quot;     &amp;quot;         C4      internal, IRQ enable&lt;br /&gt;
     &amp;quot;           &amp;quot;     &amp;quot;         C5      internal, Tristate data [PS/2]&lt;br /&gt;
 &lt;br /&gt;
 Data Feedback   R   Base+0      D0-D7   matches Data Out&lt;br /&gt;
 Control Feedbk  R   Base+2      C0-C3   matches Control Out&lt;br /&gt;
     &amp;quot;           &amp;quot;     &amp;quot;         C4      internal, IRQ enable readback&lt;br /&gt;
&lt;br /&gt;
The Feedback registers are for diagnostic purposes (except in bidirectional&lt;br /&gt;
ports, where Data Feedback is used for data input; and the IRQ enable C4).&lt;br /&gt;
&lt;br /&gt;
==Pin signals and register bits==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;= in   DB25    Cent    Name of         Reg&lt;br /&gt;
 =&amp;gt; out  pin     pin     Signal          Bit     Function Notes&lt;br /&gt;
 ------  ----    ----    --------        ---     -----------------------------&lt;br /&gt;
 =&amp;gt;       1       1      -Strobe         C0-     Set Low pulse &amp;gt;0.5 us to send&lt;br /&gt;
 =&amp;gt;       2       2      Data 0          D0      Set to least significant data&lt;br /&gt;
 =&amp;gt;       3       3      Data 1          D1      ...&lt;br /&gt;
 =&amp;gt;       4       4      Data 2          D2      ...&lt;br /&gt;
 =&amp;gt;       5       5      Data 3          D3      ...&lt;br /&gt;
 =&amp;gt;       6       6      Data 4          D4      ...&lt;br /&gt;
 =&amp;gt;       7       7      Data 5          D5      ...&lt;br /&gt;
 =&amp;gt;       8       8      Data 6          D6      ...&lt;br /&gt;
 =&amp;gt;       9       9      Data 7          D7      Set to most significant data&lt;br /&gt;
 &amp;lt;=      10      10      -Ack            S6+ IRQ Low Pulse ~ 5 uS, after accept&lt;br /&gt;
 &amp;lt;=      11      11      +Busy           S7-     High for Busy/Offline/Error&lt;br /&gt;
 &amp;lt;=      12      12      +PaperEnd       S5+     High for out of paper&lt;br /&gt;
 &amp;lt;=      13      13      +SelectIn       S4+     High for printer selected&lt;br /&gt;
 =&amp;gt;      14      14      -AutoFd         C1-     Set Low to autofeed one line&lt;br /&gt;
 &amp;lt;=      15      32      -Error          S3+     Low for Error/Offline/PaperEnd&lt;br /&gt;
 =&amp;gt;      16      31      -Init           C2+     Set Low pulse &amp;gt; 50uS to init&lt;br /&gt;
 =&amp;gt;      17      36      -Select         C3-     Set Low to select printer&lt;br /&gt;
 ==      18-25   19-30,  Ground&lt;br /&gt;
                33,17,16&lt;br /&gt;
&lt;br /&gt;
Note: Some cables, ports, or connectors may not connect all grounds.&lt;br /&gt;
Centronics pins 19-30 and 33 are &amp;quot;twisted pair return&amp;quot; grounds, while&lt;br /&gt;
17 is &amp;quot;chassis ground&amp;quot; and 16 is &amp;quot;logic ground&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;lt;= In&amp;quot; and &amp;quot;=&amp;gt; Out&amp;quot; are defined from the viewpoint of the PC, not the&lt;br /&gt;
printer.  The IRQ line (-Ack/S6+) is positive edge triggered, but only&lt;br /&gt;
enabled if C4 is 1.&lt;br /&gt;
&lt;br /&gt;
Here&amp;#039;s the same data grouped for ease of reference by Control Out and Status&lt;br /&gt;
In registers and pins.  (Data Out is straightforward in previous table).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;= in   DB25    Cent    Name of         Reg&lt;br /&gt;
 =&amp;gt; out  pin     pin     Signal          Bit     Function Notes&lt;br /&gt;
 ------  ----    ----    --------        ---     ------------------------------&lt;br /&gt;
 =&amp;gt;      17      36      -Select         C3-     Set Low to select printer&lt;br /&gt;
 =&amp;gt;      16      31      -Init           C2+     Set Low pulse &amp;gt; 50uS to init&lt;br /&gt;
 =&amp;gt;      14      14      -AutoFd         C1-     Set Low to autofeed one line&lt;br /&gt;
 =&amp;gt;       1       1      -Strobe         C0-     Set Low pulse &amp;gt; 0.5 us to send&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;=      11      11      +Busy           S7-     High for Busy/Offline/Error&lt;br /&gt;
 &amp;lt;=      10      10      -Ack            S6+ IRQ Low Pulse ~ 5 uS, after accept&lt;br /&gt;
 &amp;lt;=      12      12      +PaperEnd       S5+     High for out of paper&lt;br /&gt;
 &amp;lt;=      13      13      +SelectIn       S4+     High for printer selected&lt;br /&gt;
 &amp;lt;=      15      32      -Error          S3+     Low for Error/Offline/PaperEnd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;/div&gt;</summary>
		<author><name>67.163.245.119</name></author>
	</entry>
</feed>