P.P.Enlarger By DevSter ----------------------- Parallel Port port expander. Expands the Parallel Port by 24 lines, using the Intel 82C55 Programmable IO Chip. Parallel Port Schematic: \------------------------------------------/ Male Side - Component Side \ 13 12 11 10 09 08 07 06 05 04 03 02 01 / \ 25 24 23 22 21 20 19 18 17 16 15 14 / \------------------------------------/ parallel Port Pins and Functions Pin Function Address Bit Direction Inverted ---------------------------------------------------------------------------- 1 Strobe LPT + 2 0 IN/OUT YES 2 Data 0 LPT + 0 0 IN/OUT 3 Data 1 LPT + 0 1 IN/OUT 4 Data 2 LPT + 0 2 IN/OUT 5 Data 3 LPT + 0 3 IN/OUT 6 Data 4 LPT + 0 4 IN/OUT 7 Data 5 LPT + 0 5 IN/OUT 8 Data 6 LPT + 0 6 IN/OUT 9 Data 7 LPT + 0 7 IN/OUT 10 Acknowledge LPT + 1 6 IN 11 Busy LPT + 1 7 IN YES 12 Paper Out LPT + 1 5 IN 13 Select LPT + 1 4 IN 14 Line Feed LPT + 2 1 IN/OUT YES 15 Fault LPT + 1 3 IN 16 Initialize LPT + 2 2 IN/OUT 17 Select Printer LPT + 2 3 IN/OUT YES 18-25 Ground Parallel Port Control Registers: LPT + 2, Bit 5: 1 - Enable Bi-Directional Port 0 - Disable " Parallel Port Addresses: $378 - $37F :LPT 1 $278 - $27F :LPT 2 +------------+ 2 >--------------------|D0 PA0-7|===========> PORT A 3 >--------------------|D1 | 4 >--------------------|D2 PB0-7|===========> PORT B 5 >--------------------|D3 | 6 >--------------------|d4 PC0-7|===========> PORT C 7 >--------------------|D5 | 8 >--------------------|D6 | 9 >--------------------|D7 | | | GND >--|CS | 1 >--------------------|RD | 14 >--------------------|WR | | | 16 >--------------------|A0 | 17 >--------------------|A1 +5V|--< VCC | | GND >--|RST GND|--< GND +------------+ Using the expander: LPT + 0: Data bus LPT + 2, Bit 0: 82C55 RD Strobe - Inverted! LPT + 2, Bit 1: 82C55 WR Strobe - Inverted! LPT + 2, Bit 2: 82C55 Adress 0 LPT + 2, Bit 3: 82C55 Adress 1 - Inverted! Truh Table: LPT + 2 Data | Adress 1 | Adress 0 | RD | WR | Operation --------------------------------------------------------------------- 41 / $29 | 1 | 0 | 1 | 0 | Port A Read 42 / $2A | 1 | 0 | 0 | 1 | Port A Write 45 / $2D | 1 | 1 | 1 | 0 | Port B Read 46 / $2E | 1 | 1 | 0 | 1 | Port B Write 33 / $21 | 0 | 0 | 1 | 0 | Port C Read 34 / $22 | 0 | 0 | 0 | 1 | Port C Write 37 / $25 | 0 | 1 | 1 | 0 | Read Control Byte 38 / $26 | 0 | 1 | 0 | 1 | Write Control Byte 32 / $20 | X | X | 0 | 0 | Disable Control Byte Operating Modes in 82C55 MODE 0: Control | Port A | Port B | Port C (Upper) | Port C (Lower) -------------------------------------------------------------- 128 / $80 | OUT | OUT | OUT | OUT 129 / $81 | OUT | OUT | OUT | IN 130 / $82 | OUT | IN | OUT | OUT 131 / $83 | OUT | IN | OUT | IN 136 / $88 | OUT | OUT | IN | OUT 137 / $89 | OUT | OUT | IN | IN 138 / $8A | OUT | IN | IN | OUT 139 / $8B | OUT | IN | IN | IN 144 / $90 | IN | OUT | OUT | OUT 145 / $91 | IN | OUT | OUT | IN 146 / $92 | IN | IN | OUT | OUT 147 / $93 | IN | IN | OUT | IN 152 / $98 | IN | OUT | IN | OUT 153 / $99 | IN | OUT | IN | IN 154 / $9A | IN | IN | IN | OUT 155 / $9B | IN | IN | IN | IN Simple GW-BASIC Code: 110 LET LPT=&H378 120 REM DISABLE, OR NO READS/WRITES 100 OUT LPT+2,32 110 WHILE INKEY$="":WEND 130 REM MAKE ALL PORTS OUTPUT, AND MAKE THEM ALL $55 140 OUT LPT+0,128 150 OUT LPT+2,38:OUT LPT+2,32 160 OUT LPT+0,&H55 170 OUT LPT+2,42:OUT LPT+2,32 180 OUT LPT+0,&H55 190 OUT LPT+2,46:OUT LPT+2,32 200 OUT LPT+0,&H55 210 OUT LPT+2,34:OUT LPT+2,32 220 WHILE INKEY$="":WEND 230 REM NOW, MAKE PORT B INPUT, AND DISPLAY THE STATUS ON THE SCREEN 240 OUT LPT+0,130 250 OUT LPT+2,38:OUT LPT+2,32 260 OUT LPT+2,45:LET STATUS=IN(LPT+0):OUT LPT+2,32 270 WHILE INKEY$="" 280 PRINT "PORT B:"+HEX$(STATUS) 290 OUT LPT+2,45 300 LET NEWSTATUS=IN(LPT+0) 310 OUT LPT+2,32 320 IF NEWSTATUS<>STATUS THEN GOTO 290 330 WEND 340 REM THAT'S ALL FOLKS! Created by Joseph Norman - http://devster.netfirms.com