/**************************************************/
/***                                            ***/
/***     Test VDF NEC UPD16312 ou equi          ***/
/***       Copyright X.Fenard  2009             ***/
/***                                            ***/
/***         version 20090914                   ***/
/***   											***/
/***   											***/
/***   											***/
/***                                            ***/
/**************************************************/
#include <stdio.h>
#include <conio.h>
#include "VFD_test.h"

char Strobe,Clock,Data;
	static char Nadress;

char HexSeg[16]= {0x01,0x4F,0x12,0x06,0x4C,0x24,0x60,0x0F,0x00,0x0C,0x72,0x66,0x5C,0x34,0x70,0x7f};

/*** retw	119,124,57	; A, B, C
	retw	94,121,113	; D, E, F ***/



void VFDInit()
{
VFDSend(0x00,0); /* Init  mode 4 digits 16 segments ou 8/8  */
VFDSend(0x01,0); /* Init  mode 5 digits 16 segments ou 10/8 */

VFDSend(0x44,0);	/* mode " 01UU XYWW " X:Test=1,nor=0 Y: adresInc=0 WW:cmd 00memoire_seg   */
/* VFDAdress(0);  		 adress " 11UA AAAA " adresse */
VFDLuminosite(7); 	/* liminosite min */
Nadress=0;
}

void VFDAdress(char adress)
{
char adresse=adress;
adresse=(adress&0x1F)|0xC0; /* adress " 11UA AAAA " adresse */
VFDSend(adresse,1);
}

/*Reglage luminosite   */
void VFDLuminosite(char lum)
{
char luminosite=lum;
if (luminosite!=0) luminosite=0x08| ((luminosite-1)&0x07);   
luminosite=(luminosite&0x0F)|0x80; /* adress " 10UU NAAA " N:ON/OFF AAALum */
VFDSend(luminosite,0);
}


/* void VFDData(char data)
{
VFDAdress(Nadress);
VFDSend(data,1);
VFDSend(0x40,0);
Nadress=Nadress+1; 
} */

/*   */
/*Ecriture en ram affichage */
void VFDDataPoke(char adresse,char data)
{
adresse=(adresse&0x1F)|0xC0; /* adress " 11UA AAAA " adresse */
VFDSend(adresse,1);
VFDSend(data,0); 
}

/*Ecriture d'un nombre en ram affichage   */
void VFDNumbPoke(char adresse,char data)
{
	char N;
	N= HexSeg[data&0xF];	
	N=(N&0x40)|(N&0x20)|((N&0x10)>>2)|((N&0x08)>>3)|((N&0x04)>>1)|((N&0x02)<<3)|((N&0x01)<<3);
	N=N^0xFF;
	N=N&0x7F;
VFDDataPoke(adresse,N);
}




/*** ENvoie la commande en serie   ***/
void VFDSend( char Commande,char mode)
{
char T;
printf("%x ",Commande);
Strobe=0;
VFDSendP();
	for (T=1;T!=0; T=T<<1) 
	{ /* printf("%x",T); */
	Data= Commande &T;VFDSendP();Clock=0; VFDSendP();Clock=1;VFDSendP();}	
Strobe=1; if(mode)Strobe=0;	/* data */
VFDSendP();
printf("\n");
}

char VFDReceive()
{
char T,Commande;
	for (T=1;T!=0; T=T<<1) 
	{ Commande=Commande>>1;
	Clock=0; VFDSendP();Clock=1;VFDSendP(); 
	if (ParaInStatus()&0x01) Commande=Commande|0x80;
	}	
printf("\n");
return(Commande);
}



void VFDSendP()
{
char K=0;
if (Strobe) K=K|0x04;	/* DB25 pin4 */
if (Clock) K=K|0x02;	/* DB25 pin3 */
if (Data) K=K|0x01;		/* DB25 pin2 */
ParaOutData (K);
printf ("%x",K); /* Un delai  */
}




	/* 		DB25 	34Pt
	DB0		pin2 	14
	DB1		pin3 	16
	DB2		pin4 	18
	DB3		pin5	20
	DB4		pin6	24
	DB5		pin7	26
	DB6		pin8	30
	DB7		pin9	32
		pin18..25	04	masse
		
		pin1 08		out strobe
		pin11 22	in busy
		pin12 12	in paper out
		pin13 28	inselect
		pin14 10	out autofeed
		
(STATUS);
     reg & 0x40)==0) m_pin10=0;     
     reg & 0x80)==0) m_pin11=0;     
     reg & 0x20)==0) m_pin12=0;         
     reg & 0x10)==0) m_pin13=0;     
     reg & 0x08)==0) m_pin15=0;     		

(CONTROL);
     reg & 0x01)==0) m_pin1=0;     
     reg & 0x02)==0) m_pin14=0;    
     reg & 0x04)==0) m_pin16=0;    
     reg & 0x08)==0) m_pin17=0;    
		
nappe lecteur DVD afficheur 		
noir 1 pin 9 strobe
2 pin 8 clk
3 pin 6 din


			*/

