(c) Peter Popovec
Warning .. this data is  not a  realy  docummentation for  primax  hardware. 
ALL this  is only my suppose. 
Comments to 
All this is obtained  from logs of trafic  betwen scanner and  windows
driver. I  use  WIN 3.11 driver files

Communication betven scanner and  computer start with wake_up with F9
parameter. Next wake_up with A9 and one or  more epp write or  read
operation. Finaly slepp up with A0 parameter is sendet to scanner.

Many thanks to Gustaf Kröling  for correction in this
file.


(0x00);	R
// this is the ASIC type 
- (E3 for  my Primax Colorado 600p)

(0x01); 	is no accessed from WIN driver

(0x02);	RW	only ff or 00 is R/W in this register. Always 
		negation of prevous read is  stored in register.
(0x03);	RW
		bit 7,6 divisor for [1D] and [1B] 00 = divide by 1 
						  01 = divide by 2
						  10 = divide by 3
						  11 = divide by 4
		bit 0 alwais 1
		bit 1 ??? 
		bit 2 always 1
		bit 3 always 1 
		bit 4 always 0 ?
		bit 5 ?? 

(0x04);	RW	3E full RGB, 7E grayscale (only red ? )
		bit 0 asic test
		bit 1 NoLineOffset
		bit 2 Refresh
		bit 3 RefreshForever
		bit 4,5 WaitDelay
		bit 6,7 Scan mode   00 = RGB full 24 bit, 8 bit per color  
				    01 = Red only 8 bit from red channel
//PP experimental tests
				    01 = 8 bit from  green channel (not red) 
				    10 = one (???) channel 16 bit per pixel, 
				         (hight 4 bit always zero), 
				         reading from FIFO first byte hight bytes, next low bites
 
				    11 = 16 bits per chanel, full RGB pixel

(0x05);	RW	I read only number 82 from this register
			(posible speed of cartridge ?)

(0x06);	RW	motor control ?

			80
			63,6f reverse move ? pxscan

			60

			63
			72	//start motor for scan ?
			62	//stop ?
			03,17 reverz ? 03,0f ? (see pxscan ...)
			63,77	//go home to optoswitch
			bit 4 = GO ?
			bit 2 = reverz ?? 

// sometimes also controls the lamp                                             
// 0x03 for 30, 75, 100 dpiy                                                    
// 0x23 for 150 dpiy                                                            
// 0x63 for 200, 250, 300  dpiy        
from win driver .. 
0x02
0x03
0x0F
0x13
0x17
0x60
0x62
0x63
0x6B
0x6F
0x72
0x73
0x77
0x80
0x81










(0x07);	RW - cartridge	msb y distance (motor ..) 
(0x08);	RW - cartridge	lsb
// physical movement in number of steps at 600 steps/inch   


Motor Back Steps (Scanning)
(0x09);	RW	I read only 14h from this  bud in one case 0Ah
		Write  to this: Only 14h  
		
// Motor Trigger Period High Byte (Unit: 0.5 us)
(0x0A);	W	msb	values: 2000,5610 or 2805 
(0x0B);	W	lsb

// Sensor Status
(0x0C);	RW	read:
			bit 7RW  1= lamp on / 0 = lamp off R/W
			bit 6   ?????? scan status
			bit 5	always 0 HwSelfTest

			bit 4	??????   FifoEmpty

			bit 3 	after motor is up, this bit is set if  motor
				is in target position ?? (wait for carrtidge
				move to home ?) Finish flag
			bit 2R	cartridge in target pposition or  motor is 
				stopped. Home sensor

			bit 1	always 0 Motor Stop
			bit 0 	always 1 Motor move

in scan: 85, C5,c5....C5 D5
or: C5.C5.. D5 D1... D9 ?
or C1..c1..D1 .. D9 ?


(0x0D);	RW	ADC ...	
            unsigned SDI        :1;
            unsigned SDO        :1;     // data to scanner adc ( = SDI of adc )
            unsigned SCLK       :1;
            unsigned CS         :1;     // = SEN on adc?
            unsigned Reserved   :1;
            unsigned WmVsmp     :3;     // VSMP = Video SAMPle sync pulse, whatever it m

-------------------------- Table  control ? ------------------------
(0x0E); W	hsb	adres
(0x0F); W	msb	adres
(0x10); W	lsb     adres

		(24 bit adres register for  tables ???)
- If tables  is holding in memory the  first part  in memory is
- reserved for tables and  second part  for  FIFO (256k mem. )                                                         

(0x11); RW	FIFO read/write (block operation)

Data size
(0x12);	R	msb	numbers of byte in FIFO
(0x13);	R	lsb	numbers of byte in FIFO


-----------------------------------------------------------------
(0x14);	RW	(msb	offset X for scanning)
(0x15);	RW	(lsb	offses X for scanning)
(0x16);	RW	xmax msb or xcount
(0x17);	RW	xmax lsb or xcount
//scanning width

(0x18);	R	I read only E1 .. 
// scanner model

(0x19);	W	only 14h or 10h  
// involved in stepping  

(0x1A);	RW	8 or 38h

(0x1B);	RW	msb resolution A (bits 3..0) (bits 7..4) = msb for [1C]
(0x1C);	RW	lsb of resolution in DPI ?? 
(0x1D);	RW	lsb resolution A

(0x1E);		Is no accessed  from WIN driver

(0x1F);	W	00-> (no other number)

---------------------- TABLES -------------------------------------
Write  to 0x11 register (adres set up for write is done  by  registers 
0x0e,0x0f,0x10)
			calibration		scan
0000	12288 bytes	standart table		recalculated  color table
			3x 4096 bytes		3 x 4096 bytes

3000	24567 bytes	zeros (only 20288 bytes) 24576 bytes (808080...) ??.
	
X direction table 		      
9000	36864 bytes	zeros			3 x 12288 bytes ...
						(or 12288,9670,12288 bytes)