Making Your Own Pin2000 Game
by cfh@provide.net, 01/18/02.
Copyright 2001-2002 all rights reserved.


    Making Your Own Pin2000 Game!

      So you're a hot-shot PC programmer, and you want a challange? Well here it is! Make your own Pin2000 game. How can you do this? Here are the pieces needed (note this has been really trivialized here; obviously this will require some serious programming work):
      • Revenge from Mars or Star Wars Episode 1 pinball cabinet.
      • PC style computer (almost any will do).
      • PC style monitor (the bigger the better, up to 19 inch).
      • Some programming talent.
      • A RFM or SWE1 playfield to molest/modify (optional, but recommended).

      The basic idea is this. First use a "real time" operating system. Windows is not ideal for this, as a 2 ms update time is needed, and Windows can only guarentee 10 ms (the short update time is a requirement of the pin 2000 watchdog circuit on the driver board). So Linux would work well. Write a program in your favorite language to interface to the pin 2000 driver board, through the parallel port. Draw graphics through a standard monitor card (use a VGA or better style monitor, as there are no monitor drivers for the CGA monitor Williams used). Mount the computer and monitor in the pinball 2000 cabinet. Modify the playfield as desired.

      Parallel Cable interfacing.
      The Power Driver board is accessed through the standard Parallel port of any Personal Computer. A standard Parallel DB25 connector is used from the computer to the driver board. Here are the DB25 pinouts:

     
    FunctionDB25DirectionP2000 Usage
    /Strobe (D0)1output from M.B.Index Reg decode output enable
    D02bi-directionalData to and from I/O board.
    D13bi-directionalData to and from I/O board.
    D24bi-directionalData to and from I/O board.
    D35bi-directionalData to and from I/O board.
    D46bi-directionalData to and from I/O board.
    D57bi-directionalData to and from I/O board.
    D68bi-directionalData to and from I/O board.
    D79bi-directionalData to and from I/O board.
    ACK (D6)10input to M.B.Board ID #
    Busy (D7)11input to M.B.Board ID #
    Paper out (D5)12input to M.B.Board ID #
    Printer Select (D4)13input to M.B.Board ID #
    /Auto Line Feed (D1)14output from M.B.
    Error (D3)15input to M.B.Board ID #
    Initialize (D2)16output from M.B.Index Reg Latch CLK
    /Select (D3)17output from M.B.Data Reg Direction control
    Sig GND18 Sig GND
    Sig GND19 Sig GND
    Sig GND20 Sig GND
    Sig GND21 Sig GND
    Sig GND22 Sig GND
    Sig GND23 Sig GND
    Sig GND24 Sig GND
    Sig GND25 Sig GND

      Parallel Port Bits and Function.
      The parallel port on the mother board should be set to bi-directional mode. This can be done through software, or using a jumper on the mother board. The software setting is done in the CMOS setup when the computer powers up, and should be set to SPP mode.

      The driver board can be controlled through the use of the PC parallel port registers. The parallel port Data register is used for data exchange, and the Status register is not used at all. The Control register is used to control the index register clock and Decode output enable function. It is also used to control the direction of the driver board buffer. Note that parallel ports are generally at 956dec(3BCh) for LPT1 and 888dec(378h) for LPT2.

    Parallel Port Data Register at LPT# + 0,
    Read/Write operation
    Data BitParallel Port FunctionP2000 Function
    D0Data bit 0Data Bit 0
    D1Data bit 1Data Bit 1
    D2Data bit 2Data Bit 2
    D3Data bit 3Data Bit 3
    D4Data bit 4Data Bit 4
    D5Data bit 5Data Bit 5
    D6Data bit 6Data Bit 6
    D7Data bit 7Data Bit 7

    Parallel Port Function Register at LPT# + 1,
    Read operation
    Data BitParallel Port FunctionP2000 Function
    D0ReservedNot Used
    D1ReservedNot Used
    D2ReservedNot Used
    D3Printer ErrorID #
    D4Printer SelectID #
    D5Out of PaperID #
    D6Printer AckID #
    D7Printer BusyID #

    Parallel Port Control Register at LPT# + 2,
    Write operation
    Data BitParallel Port FunctionP2000 Function
    D0/StrobeIndex Reg. Decode Output Enable
    D1/Auto Line FeedNot Used
    D2Initialize PrinterIndex Register Latch Clock
    D3/SelectBuffer Direction Control
    D4ReservedNot Used
    D5Direction (internal only)Not Used
    D6ReservedNot Used
    D7ReservedNot Used

      Index Register Value.
      The driver board index register is a writable latch. This holds the location number of the required board I/O register.

    Index Register Value
    HexDecimalI/O SelectionDirection
    000 + 0Switch-Coinread
    010 + 1Switch-Flipperread
    020 + 2Switch-Dipread
    030 + 3Switch-EOS/DIAread
    040 + 4Switch-Rowread
    050 + 5Switch-Columnwrite
    060 + 6Lamp Row Awrite
    070 + 7Lamp Row Bwrite
    080 + 8Lamp Columnwrite
    090 + 9Solenoid C groupwrite
    0A0 + 10Solenoid B groupwrite
    0B0 + 11Solenoid A groupwrite
    0C0 + 12Solenoid Flipperwrite
    0D0 + 13Solenoid D groupwrite
    0E0 + 14Solenoid Logicwrite
    0F0 + 15Switch -Systemread
    100 + 16Lamp Test Aread
    110 + 17Lamp Test Bread
    120 + 18Fuse Test Aread
    130 + 19Fuse Test Bread
    140 + 20* 
    150 + 21* 
    160 + 22* 
    170 + 23* 
    180 + 24* 
    190 + 25* 
    1A0 + 26* 
    1B0 + 27* 
    1C0 + 28* 
    1D0 + 29* 
    1E0 + 30* 
    1F0 + 31* 
    * Any reads to these locations will return an all highs.
      Any writes to these locations will result in no action.

      The Writing/Reading Sequence.
      Driver board access is done through two sequences of controlling the parallel port and driver board. These two sequences allow the read/write information to get to the driver board through the computer. The sequence is important because faulty operation and parallel port bus contentions could otherwise occur.

      Write Data to the Driver Board Sequence.
      Below describes the sequence of events on the parallel port to apply data to the port, clock it into the index register, then apply data to the port again, and clock it into the I/O register.

      1. Write Parallel Port Data Register with Index Register Value. Value to select proper I/O register.
      2. Write Parallel Port Control Register with a 4h (4d) to set Initialize bit High This clocks the index register high.
      3. Write Parallel Port Control Register with a 0h (0d) to clear Initialize bit Low This clocks the index register LOW.
      4. Write Parallel Port Data Register with I/O data Data that is required to be written to the selected I/O register.
      5. Write Parallel Port Control Register with a 1h to set /strobe bit. This enables the index reg decode output to clock I/O register.
      6. Write Parallel Port Control Register with a 0h to clear /strobe bit. This disables the index reg decode output to to clock I/O register.

      Read Data from Board Sequence.
      Below describes the sequence of events on the parallel port to apply data to the port, clock it into the index register, change direction of the parallel port & direction of buffer & enable index register decoded signal, read the port, change direction of parallel port & direction of buffer, and disable index register decoded signal.

      1. Write Parallel Port Data Register with Index Register Data Value to select proper I/O register.
      2. Write Parallel Port Control Register with a 4h (4d) to set Initialize bit High This clocks the index register high.
      3. Write Parallel Port Control Register with a 0h (0d) to clear Initialize bit Low. This clocks the index register LOW.
      4. Write Parallel Port Control Register with a 29h (41d) to change dir of parallel port and driver data buffer and decode enable sig. This changes the direction of the parallel port, changes the direction of Buffer and enables the index reg decode output.
      5. Read Parallel Port for desired I/O data. Obtain the desired information.
      6. Write Parallel Port Control Register with a 0h to change dir and enable sig. Reset the direction of the port and buffer as well as disable the index reg decode output.

      Special Function Register and Controls.
      Blanking.
      Blanking is controlled through the switch column. By the action of strobing the switches the blanking circuit is held in the non-blanking condition allowing the I/O to function. If the switch matrix strobing of the columns is halted the blanking will be asserted in approximately 2.5 ms thus disabling all power I/O device drivers. The trigger to the blanking circuit is on any low transition of the index register #5 which is the switch column register clock.

      The blanking circuit can be disabled during development by shorting the pins 1 & 3 on connector J1. This should be done under extreme care since any stalled operation of the I/O can cause electrical and/or game feature damage to occur.

      This blanking signal is feed back to the parallel interface cable for use with future expansions on pin 26 of the parallel port cable connection.

      Zero Cross.
      Zero Cross occurs upon each transition of the AC line through 0 voltage. The initial detection circuit generates a pulse of approximate 1.5 ms. This pulse is feed to a synchronization circuit. This circuit latches the zero cross and is read through the index register #0F which is the Switch-System information register. The action of reading the zero cross will clear the latch and ready it for the next zero transition.

      Lamp Test Mode.
      There are two modes of testing the lamps. The first will allow the system to find any missing or burned out lamp positions. The second will allow the system to find any shorted lamp positions.

      By setting the lamp test mode bit to a value of "0" will cause the lamp matrix to function in test mode for missing bulbs or burned out lamps. When the column is activated and the rows are activated any lamp that is missing within the activated column will be indicated by a value of a "1" in the corresponding lamptest register read. A required delay time from column and row activation to reading the lamp test register is 150uS.

      By setting the lamp mode bit to a value of "1" will allow the lamp matrix to function normally as well as allow for indication of a shorted lamp position. This is done by reading the a value of "0" in the corresponding lamptest register read. A required delay time from column and row activation to reading the lamp test register is 300uS.

      Fuse Test.
      By reading the two register it can be determined if a fuse is blown out. Reading a high ("1") will indicate that a fuse is blown or missing. The relay must be energized to check fuses F100-F107 other wise these will appear to be blown.

    Bit Description of I/O register.
    00	Switch-Coin		(Read)
    		D0-coin1			High indicates switch input closure to GND.
    		D1-coin2				"
    		D2-coin3				"
    		D3-coin4				"
    		D4-coin5				"
    		D5-coin6				"
    		D6-coin7				"
    		D7-coin8				"
    
    
    01	Switch-Flipper		(Read)
    		D0- Cabinet Flipper1		High indicates switch input closure to GND.	
    		D1- Cabinet Flipper2			"
    		D2- Cabinet Flipper3			"
    		D3- Cabinet Flipper4			"
    		D4- Cabinet Flipper5			"
    		D5- Cabinet Flipper6			"
    		D6- Cabinet Flipper7			"
    		D7- Cabinet Flipper8			"
    
    02	Switch-Dip	(Read)
    		D0- Dip Switch1			High indicates switch input closure to GND.	
    		D1- Dip Switch2				"
    		D2- Dip Switch3				"
    		D3- Dip Switch4				"
    		D4- Not Used			Read back is high
    		D5- Not Used				"
    		D6- Not Used				"
    		D7- Not Used				"
    
    
    03	Switch-EOS/Diag.	(Read)
    		D0- Diagnostic1			High indicates switch input closure to GND.	
    		D1- Diagnostic2				"
    		D2- Diagnostic3				"
    		D3- Diagnostic4				"
    		D4- E.O.S.1				"
    		D5- E.O.S.2				"
    		D6- E.O.S.3				"
    		D7- E.O.S.4				"
     
    04	Switch-Row		(Read)
    		D0- ROW1			High indicates switch closure to active column
    		D1- ROW2				"
    		D2- ROW3				"
    		D3- ROW4				"
    		D4- ROW5				"
    		D5- ROW6				"
    		D6- ROW7				"
    		D7- ROW8				"
    
    
    05	Switch-Col		(Write)		(Blanking trigger)
    		D0- COLUMN1			Low to active column
    		D1- COLUMN2				"
    		D2- COLUMN3				"
    		D3- COLUMN4				"
    		D4- COLUMN5				"
    		D5- COLUMN6				"
    		D6- COLUMN7				"
    		D7- COLUMN8				"
    
    
    06	Lamp Row-A		(Write)
    		D0- ROW1			High to activate row
    		D1- ROW2				"
    		D2- ROW3				"
    		D3- ROW4				"
    		D4- ROW5				"
    		D5- ROW6				"
    		D6- ROW7				"
    		D7- ROW8				"
    
    
    07	Lamp Row-B		(Write)
    		D0- ROW1			High to activate row
    		D1- ROW2				"
    		D2- ROW3				"
    		D3- ROW4				"
    		D4- ROW5				"
    		D5- ROW6				"
    		D6- ROW7				"
    		D7- ROW8				"
    
     
    08	Lamp Col		(Write)
    		D0- COLUMN1			High to activate column driver
    		D1- COLUMN2				"
    		D2- COLUMN3				"
    		D3- COLUMN4				"
    		D4- COLUMN5				"
    		D5- COLUMN6				"
    		D6- COLUMN7				"
    		D7- COLUMN8				"
    
    
    09	Solenoid-C	(Write)(no diode tie backs)
    		D0- Solenoid Opt 1		High to activate solenoid driver (output low)
    		D1- Solenoid Opt 2				"
    		D2- Solenoid Opt 3				"
    		D3- Solenoid Opt 4				"
    		D4- Solenoid Opt 5				"
    		D5- Solenoid Opt 6				"
    		D6- Solenoid Opt 7				"
    		D7- Solenoid Opt 8				"
    
    
    0A	Solenoid-B		(Write)
    		D0- Solenoid B1			High to activate solenoid driver (output low)
    		D1- Solenoid B2					"
    		D2- Solenoid B3					"
    		D3- Solenoid B4					"
    		D4- Solenoid B5					"
    		D5- Solenoid B6					"
    		D6- Solenoid B7					"
    		D7- Solenoid B8					"
    
    
    0B	Solenoid-A		(Write)
    		D0- Solenoid A1			High to activate solenoid driver (output low)
    		D1- Solenoid A2					"
    		D2- Solenoid A3					"
    		D3- Solenoid A4					"
    		D4- Solenoid A5					"
    		D5- Solenoid A6					"
    		D6- Solenoid A7					"
    		D7- Solenoid A8					"
    
     
    0C	Solenoid-Flipper	(Write)
    		D0- Solenoid Flip1		High to activate solenoid driver (output low)
    		D1- Solenoid Flip2				"
    		D2- Solenoid Flip3				"
    		D3- Solenoid Flip4				"
    		D4- Solenoid Flip5				"
    		D5- Solenoid Flip6				"
    		D6- Solenoid Flip7				"
    		D7- Solenoid Flip8				"
    
    
    0D	Solenoid-D		(Write)(no diode tie backs)
    		D0- Solenoid Flash 1		High to activate solenoid driver (output low)
    		D1- Solenoid Flash 2				"
    		D2- Solenoid Flash 3				"
    		D3- Solenoid Flash 4				"
    		D4- Health LED			High turns LED on
    		D5- Power Relay Control		High turns on relay
    		D6- Coin Counter		High turns counter on
    		D7- Lamp Test Control		High = use mode,  Low = test  mode
    
    
    0E	Solenoid-Logic	(Write)	(very low current sink)
    		D0- Solenoid Logic 1		High to activate logic driver (output low)
    		D1- Solenoid Logic 2				"
    		D2- Solenoid Logic 3				"
    		D3- Solenoid Logic 4				"
    		D4- Solenoid Logic 5				"
    		D5- Solenoid Logic 6				"
    		D6- Solenoid Logic 7				"
    		D7- Solenoid Logic 8				"
    
    
    0F	Switch-System  (Read)
    		D0- Not Used			Read back is high
    		D1- 	"				"
    		D2- 	"				"
    		D3- 	"				"
    		D4- Ticket Notch		Signal a notch in the ticket (For dispencer kit)
    		D5- Ticket Low			Signal low level of tickets (For dispencer kit)
    		D6- Blanking			High indicates outputs enabled
    		D7- Zero Cross			LOW indicates Zero Cross has occurred.
    
     
    10	Lamp matrix A diagnostic
    		D0- Row1		             		
    		D1- Row2			In test mode a "1" will
    		D2- Row3			indicate a missing or burned
    		D3- Row4			out lamp.
    		D4- Row5			
    		D5- Row6			In operation mode a "1" will
    		D6- Row7			indicate a shorted lamp position.
    		D7- Row8		        
    		
    
    11	Lamp matrix B diagnostic
    		D0- Row1		        		
    		D1- Row2			In test mode a "1" will
    		D2- Row3			indicate a missing or burned
    		D3- Row4			out lamp.
    		D4- Row5			
    		D5- Row6			In operation mode a "1" will
    		D6- Row7			indicate a shorted lamp position.
    		D7- Row8		        	
    
    
    12	Fuse A diagnostic
    		D0- Fuse 50V Flipper 1	(F104)		High ("1") indicates blown fuse
    		D1- Fuse 50V Flipper 2	(F105)			"
    		D2- Fuse 50V Flipper 3	(F106)			"
    		D3- Fuse 50V Flipper 4	(F107)			"
    		D4- Fuse 50V Solenoid1	(F103)			"
    		D5- Fuse 50V Solenoid 2	(F102)			"
    		D6- Fuse 50V Solenoid 3	(F101)			"
    		D7- Fuse 50V Solenoid 4	(F100)			"
    
    
    13	Fuse B diagnostic
    		D0- Fuse 20V (F109)			High ("1") indicates blown fuse
    		D1- Fuse 50V main (F110)			"
    		D2- Fuse Lamp Matrix B	(F112)			"
    		D3- Fuse Lamp Matrix A	(F111)			"
    		D4- Not Used				Read back is high
    		D5- 	"					"
    		D6- 	"					"
    		D7- 	"					"
    



End of document.

* Go to Pin2000 Repair document Part One
* Go to the Pin Fix-It Index at http://marvin3m.com/fix.htm
* Go to Marvin's Marvelous Mechanical Museum at http://marvin3m.com