home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / crossplatform / transfer / misc / cbm-printer-to-ibm < prev    next >
Encoding:
Text File  |  1996-11-16  |  6.1 KB  |  164 lines

  1. sUBJECT: rE: cbm PRINTER TO ibm
  2. nEWSGROUPS: COMP.SYS.CBM
  3. dATE: tHU, 14 nOV 1996 20:50:17 -0800
  4. oRGANIZATION: nORTEL iNFORMATION nETWORKS
  5. pATH: NNTP.HUT.FI!NEWS.FUNET.FI!NEWSFEED.SUNET.SE!NEWS00.SUNET.SE!SUNIC!NEWS.SPRINTLINK.NET!NEWS-PEER.SPRINTLINK.NET!NEWS.MATHWORKS.COM!NEWSGATE.DUKE.EDU!INTERPATH!NEWS.INTERPATH.NET!NEWS.INTERPATH.NET!NEWS1.NORTEL.NET!NEWS
  6. lINES: 147
  7. mESSAGE-id: <328bf689.67eb@SANTEL.NET>
  8. rEFERENCES: <pINE.sol.3.91.961108234539.26708e-100000@ATL1>
  9. nntp-pOSTING-hOST: FILTER-SANT.NORTEL.NET
  10. mIME-vERSION: 1.0
  11. cONTENT-tYPE: TEXT/PLAIN; CHARSET=US-ASCII
  12. cONTENT-tRANSFER-eNCODING: 7BIT
  13. x-mAILER: mOZILLA 2.02e-kit  (wIN16; u)
  14. cONTENT-dISPOSITION: INLINE; FILENAME="c64topc.txt"
  15.  
  16. tHIS ARTICLE DESCRIBES HOW TO CONNECT A cOMMODORE 64 COMPATIBLE PRINTER TO
  17. AN ibm pc COMPATIBLE COMPUTER.  tHE INFORMATION ORIGINALLY APPEARED IN AN
  18. ARTICLE THAT i WROTE FOR THE tECH fORUM SECTION OF THE mARCH 1995 ISSUE OF
  19. nUTS & vOLTS MAGAZINE.  tHIS INFORMATION MAY BE USED AND DISTRIBUTED SO
  20. LONG AS PROPER CREDIT IS GIVEN TO THE AUTHOR AND nUTS & vOLTS MAGAZINE.
  21. cOPYRIGHT (c) 1995 BY jOHN kEYERLEBER AND nUTS & vOLTS mAGAZINE.
  22.  
  23. tHE PROBLEM WITH cOMMODORE 64 COMPATIBLE PRINTERS IS THAT THESE DEVICES USE
  24. THE cOMMODORE SYNCHRONOUS SERIAL INTERFACE TO COMMUNICATE WITH THE c64.  aN
  25. ibm pc COMPATIBLE PRINTER PORT IS A PARALLEL INTERFACE, HOWEVER IT IS
  26. POSSIBLE TO USE THIS PARALLEL PORT TO EMULATE THE c64 SERIAL INTERFACE BY
  27. CONSTRUCTING A SPECIAL CABLE AND WRITING A LITTLE BIT OF SOFTWARE.
  28.  
  29. tHE CABLE IS USED TO CONNECT THE pc db25 PIN PARALLEL PRINTER PORT TO THE 6
  30. PIN din SERIAL PORT ON THE c64 COMPATIBLE PRINTER.  tHE PARTS NEEDED ARE
  31. ONE db25 MALE CONNECTOR (rADIO sHACK #276-1429), ONE 6 PIN din PLUG (rs
  32. #274-020), AND SOME SIX CONDUCTOR CABLE (rs #278-874 OR EQUIVALENT).  nOTE
  33. THAT THE CABLE LENGTH SHOULD BE KEPT TO LESS THAN SIX FEET.  tHE WIRING
  34. CONNECTIONS AND SIGNAL DESCRIPTIONS FOR THIS CABLE ARE GIVEN AS FOLLOWS:
  35.  
  36. cOMMODORE 64 din PLUG PIN:    pARALLEL PRINTER db25 CONNECTOR PIN:
  37.      1 (srq in)                    2 (data0)
  38.      2 (gnd)                  20 (gnd)
  39.      3 (ser atn)                   3 (data1)
  40.      4 (ser clk)                   4 (data2)
  41.      5 (ser dat)                   5 (data3) AND 11 (busy)
  42.      6 (rst)                  6 (data4)
  43.  
  44. tHE SOFTWARE USES THE pc PARALLEL PORT TO EMULATE A c64 SERIAL PORT.  tHE
  45. EXAMPLE PROGRAM, c64.c (lISTING 1), IS WRITTEN IN bORLAND'S tURBO c.  iT
  46. READS INPUT AND SENDS EACH CHARACTER TO THE PRINTER.  iT CAN BE USED AS A
  47. FILTER IN AN ms-dos COMMAND LINE PIPE.  fOR EXAMPLE, dos COMMANDS SUCH AS:
  48. DIR {$7c} C64 WOULD PRINT A DIRECTORY LISTING, OR TYPE A_FILE {$7c} C64 WOULD PRINT
  49. THE CONTENTS OF A FILE.
  50.  
  51. i HAVE ALSO WRITTEN AN ms-dos DEVICE DRIVER WHICH CAN BE USED TO ALLOW ANY
  52. pc APPLICATION TO PRINT TO A c64 COMPATIBLE PRINTER, AND IT SUPPORTS
  53. MULTIPLE PRINTERS CONNECTED TO A SINGLE pc PARALLEL PORT.  tHE LISTING FOR
  54. THIS SOFTWARE IS TOO LENGTHY TO PRINT, HOWEVER i WILL MAKE THIS SOFTWARE
  55. AND ASSEMBLED CABLES AVAILABLE TO cOMMODORE 64 ENTHUSIASTS FOR A NOMINAL
  56. CHARGE; JUST WRITE ME FOR DETAILS.  wITH THESE c64 COMPATIBLE PRINTERS
  57. OFTEN SELLING FOR LESS THAN $25 AT GARAGE SALES AND FLEA MARKETS, IT'S EASY
  58. TO ADD A COUPLE OF ADDITIONAL "SCRATCH" PRINTERS TO ANY pc SYSTEM.
  59.  
  60. jOHN kEYERLEBER
  61. 26300 cHARDONVIEW dRIVE
  62. cLEVELAND, oh  44143
  63. (216) 261-9676
  64. e-MAIL:  JKEYERLEBER@BAILEY.COM
  65.  
  66. lISTING 1:
  67.  
  68. #INCLUDE <STDIO.H>
  69. #INCLUDE <CTYPE.H>
  70. #INCLUDE <DOS.H>
  71.  
  72. #DEFINE   portadr   0X378     // lpt1=0X378, lpt2 = 0X278
  73. #DEFINE   printadr  0X04      // c64 COMPATIBLE PRINTER ADDRESS
  74. #DEFINE   srq       0X01      // c64 srq in SIGNAL
  75. #DEFINE   atn       0X02      // c64 atn SIGNAL
  76. #DEFINE   clk       0X04      // c64 clk SIGNAL
  77. #DEFINE   datout    0X08      // c64 dat SIGNAL (OUTPUT)
  78. #DEFINE   datin     0X80      // c64 dat SIGNAL (INPUT)
  79. #DEFINE   rst       0X10      // c64 rst SIGNAL
  80.  
  81. // FUNCTION PROTOTYPES
  82. VOID INITC64(VOID);
  83. VOID PUTC64(UNSIGNED CHAR);
  84. VOID PUTS64(CHAR *);
  85. VOID PUTBYTE(UNSIGNED CHAR, UNSIGNED CHAR);
  86.  
  87. // FUNCTION MAIN() LOOPS TO READ INPUT CHARACTERS AND SEND THEM TO THE PRINTER
  88. VOID MAIN(VOID)
  89. {$7b}
  90.      CHAR BUFF[128], *PTR;
  91.  
  92.      INITC64();
  93.      WHILE(FGETS(BUFF, 80, STDIN))
  94.      {$7b}
  95.           FOR(PTR = BUFF; *PTR; PUTC64(*PTR++));
  96.      {$7d}
  97. {$7d}
  98.  
  99. // FUNCTION INIT64() INITIALIZES THE DRIVER AND THE c64 COMPATIBLE PRINTER
  100. VOID INITC64(VOID)
  101. {$7b}
  102.      // SET INITIAL PORT OUTPUT VALUE TO ALL BITS HIGH
  103.      OUTPORTB(portadr, rst {$7c} srq {$7c} atn {$7c} clk {$7c} datout);
  104.  
  105.      // SET INTERFACE TO OUTPUT
  106.      OUTPORTB(portadr + 2, 0X00);
  107.  
  108.      // INITIALIZE PRINTER: rst=0, THEN rst=1
  109.      OUTPORTB(portadr, srq {$7c} atn {$7c} clk {$7c} datout);
  110.      DELAY(250);
  111.      OUTPORTB(portadr, rst {$7c} srq {$7c} atn {$7c} clk {$7c} datout);
  112.      DELAY(2250);
  113.  
  114.      // sET PRINTER TO LISTENER: atn AND clk LOW, PRINTER WILL ack WITH dat LOW
  115.      OUTPORTB(portadr, rst {$7c} srq {$7c} datout);
  116.      WHILE(!(INPORTB(portadr + 1) & datin));
  117.  
  118.      // sEND PRINTER ADDRESS (CURRENTLY SET FOR ADDRESS 4)
  119.      PUTBYTE(0X20 {$7c} printadr, 0);
  120.  
  121.      // sEND PRINTER MODE
  122.      PUTBYTE(0X67, 0);
  123. {$7d}
  124.  
  125. // FUNCTION PUTC64() SENDS A BYTE OF DATA (BYTEVAL) TO THE c64 COMPATIBLE PRINTER
  126. VOID PUTC64(UNSIGNED CHAR BYTEVAL)
  127. {$7b}
  128.      // cHECK FOR UPPER/LOWER CASE CONVERSION
  129.      IF (ISALPHA(BYTEVAL))
  130.      {$7b}
  131.           BYTEVAL = (ISUPPER(BYTEVAL)) ? TOLOWER(BYTEVAL) : TOUPPER(BYTEVAL);
  132.      {$7d}
  133.      // sEND CHARACTER
  134.      PUTBYTE(BYTEVAL, atn);
  135. {$7d}
  136.  
  137. // FUNCTION PUTBYTE CLOCKS THE ACTUAL BYTE TO THE c64 COMPATIBLE PRINTER BIT BY BIT
  138. VOID PUTBYTE(UNSIGNED CHAR BYTEVAL, UNSIGNED CHAR MODE)
  139. {$7b}
  140.      REGISTER INT BITLOOP;
  141.  
  142.      // sET clk HIGH, PRINTER WILL ack WITH dat HIGH
  143.      OUTPORTB(portadr, rst {$7c} srq {$7c} clk {$7c} datout {$7c} MODE);
  144.      WHILE(INPORTB(portadr + 1) & datin);
  145.  
  146.      // lOOP TO OUTPUT BITS OF DATA
  147.      DELAY(1);
  148.      FOR (BITLOOP=0; BITLOOP<8; BITLOOP++)
  149.      {$7b}
  150.           OUTPORTB(portadr, rst {$7c} srq {$7c} ((BYTEVAL & 1) ? datout : 0) {$7c} MODE);
  151.           DELAY(1);
  152.           OUTPORTB(portadr, rst {$7c} srq {$7c} clk {$7c} ((BYTEVAL & 1) ? datout : 0) {$7c} MODE);
  153.           DELAY(1);
  154.           BYTEVAL >>= 1;
  155.      {$7d}
  156.  
  157.      // sET clk LOW AND dat HIGH FOR END OF BYTE, PRINTER WILL ack WITH dat LOW
  158.      OUTPORTB(portadr, rst {$7c} srq {$7c} datout {$7c} MODE);
  159.      WHILE(!(INPORTB(portadr + 1) & datin));
  160. {$7d}
  161.  
  162.  
  163.  
  164.