commit 8c5bf38666cd659095cadae21f01c35eb33bde29 Author: jdg Date: Wed Sep 8 21:36:37 2021 +0200 First commit 20/04/1996 diff --git a/DEMO.CPP b/DEMO.CPP new file mode 100644 index 0000000..502b8bb --- /dev/null +++ b/DEMO.CPP @@ -0,0 +1,254 @@ +#include +#include +#include +#include +#include + + +#include "c:\backup\fuentes\prn_cnt\prn_cnt.h" + +#define INICIO 40 +#define AMPLIACION 1 + +// S T R U C T U R E S ////////////////////////////////////////////////////// + +typedef struct worm_typ + { + int y; // current y position of worm + int color; // color of worm + int speed; // speed of worm + int counter; // counter + + } worm, *worm_ptr; + +worm worms[90]; // used to make the screen melt + +unsigned int far *clock = (unsigned int far *)0x0000046C; // pointer to internal + // 18.2 clicks/sec + +////////////////////////////////////////////////////////////////////////////// + +void Melt( void ); +void InitScreen(void); +void RemapLeds(void); +void RemapInputs(void); +void cInfoMundo(void); + +void main(void) +{ + char buffer[4096]; + char key2; + int key = 0; + + gettext(1, 1, 80, 25, buffer); + setcursortype(_NOCURSOR); + + Melt(); + InitScreen(); + + + Lpt_usado = 1; /* Decimos que estamos usando el LPT1 */ + + /* Hay un archivo de registros? + SI: LO UTILIZA PARA SABER QUE SALIDAS ESTA ACTIVADAS + NO: LAS RESETEA + */ + if ( Register( LEER, "demo.std" ) != ok ) + Reset_all(); + + RemapLeds(); + while( key != 27 ) + { + while( !kbhit() ) { + RemapInputs(); + cInfoMundo(); + }; + key = getch(); + key = key - '0'; + if ( key > 0 && key < 9 ) + { + + /* LEE EL ESTADO DE LA SALIDA INDICADA POR EL USUARIO */ + key2 = Lee_Salida( (unsigned char)(key-1) + INICIO ); + + /* ESCRIBE EL ESTADO CONTRARIO (leido antes) DE LA SALIDA + INDICADA POR EL USUARIO, ANTES. */ + Escribe_Salida( (unsigned char)(key-1+INICIO), (char)!key2 ); + RemapLeds(); + } + else key = key + '0'; + + }; + + + /* SI TODAS LAS SALIDAS ESTAN A CERO LAS RESETEA ( por simple formalidad ) + DE LO CONTRARIO GUARDA EL ESTADO DE LOS REGISTROS EN "demo.std" */ + if ( Lee_Salidas( AMPLIACION, NULL ) == 0 ) + Reset_all(); + else + Register( ESCRIBIR, "demo.std" ); + + puttext(1, 1, 80, 25, buffer); +} + + +void cInfoMundo(void) +{ + static char state, pulse = 0; + + gotoxy( 2, 12 ); + textcolor( state % 16 ); cprintf("I"); + textcolor( ++state % 16 ); cprintf("n"); + textcolor( state % 16 ); cprintf("f"); + textcolor( ++state % 16 ); cprintf("o"); + textcolor( state % 16 ); cprintf("M"); + textcolor( ++state % 16 ); cprintf("u"); + textcolor( state % 16 ); cprintf("n"); + textcolor( ++state % 16 ); cprintf("d"); + textcolor( state % 16 ); cprintf("o"); + +} + +void RemapLeds(void) +{ +gotoxy(22,9); +unsigned char i; + +for( i=0; i<8; i++) +{ + if ( Lee_Salida( i + INICIO ) ) + textcolor( LIGHTGREEN ); + else + textcolor( LIGHTRED ); + cprintf("м "); +} +} + +void RemapInputs(void) +{ +int i; + +for( i=0; i<8; i++) +{ + gotoxy((29+(i*2)),15-i); + if ( Lee_Entrada( i + INICIO ) ) + { + textcolor( LIGHTGREEN ); + cprintf("м"); + } else { + textcolor( LIGHTRED ); + cprintf("м"); + } +} +} + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +//// ////////////////////////////////////////////////////////////////// +//// //////////////////////////////////////////////////////////////////////// +//// ////// // // // // // // // //// ///////// +//// //// // // // // ////// // /// // // // // / //////// +//// ////// // // // // ////// // /// // // // ///////// //////// +//// ////// // // // // // // // // // ///////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +//////// ///////////// //////////////// ////// // /////////// +//////// ///////////// /// ////////////////// ////////// // /////////// +//////// // ////// /// // // // // // // // /// +//// // ////// //////// // // // ////// // // /////// /// +//// // // ///////// /////// // // // // // // // /// +//// // ////// /////// // // // // // // // /// +////////////////////////////////////////////////////////////////////////////// +void InitScreen(void) +{ +clrscr(); +gotoxy(1,1); +/* +cprintf("Grafista:џџџџJDџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ_____џџџџџџџџџџџџџџџџџ"); +cprintf("\r\nProgramador:џJDџџџџџџџџџџџџџџџџџлл___________________/|||||/|_џџџџџџџџџџџџџџџ"); +cprintf("\r\n џџџџџџџџџџJoshuaџџџџџџџџџџџ/џССџк===Пџџџџџџџџџџџџ|/#####|//џџџџџџџџџџџџџџџ"); +cprintf("\r\nHardware:џџџџLopezџџџџџџџџџџ/џТТТТТТТџџџџџџџџџџџТТТТТТТџџџџ/џџџџџџџџџџџџџџџџџ"); +cprintf("\r\n џџџџџџџџџџMillanџџџџџџџ/џ_______џџџџџџџџџџ_______џџџџџ/џџџџџџџџџџџџџџџџџџџ"); +cprintf("\r\nџџџ џџџџџџџ џ џџ /џ/_______/|џџџџџџџ/_______/|џџ/џџџџџџџџџџџџџџџџџџџџџ"); +cprintf("\r\nџџџџџџџџџ џ џ /џџ|Т_Т_Т_Т|/џџџџџџџ|Т_Т_Т_Т|/џ/џџџџџџџџџџџџџџџџџџџџџџџ"); +cprintf("\r\nBienbenidosџaџunaџџџ/џџ________________ џџмџџџџџџџџ/џџџџџџџџџџџџџџџџџџџџџџџџџ"); +cprintf("\r\nnuevaџera, /џџмџм мџм м мџм мџ /џмџСк===Пџ/џџPulsaџunџnЃmeroџdelџ(0-7)"); +cprintf("\r\nџbienvenidosџaџџ/џџ/_С_С_С_С_С_С_С_С/џмџСк===Пџ/џџparaџactivar/desactivarџlaџ"); +cprintf("\r\n џџџџџџџ/џџ____џџџџџ џџџџмџСк===Пџ/џџsalidaџcorrespondiente.џџџџџџ"); +cprintf("\r\nџInfoMundoџџ/џџ/џJDџ/|џџџ џџџмџСк===Пџ/џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ"); +cprintf("\r\n /џџ/___џ/џ!џџ џџџмџСк===Пџ/џџџLasџledџindicanџelџestadoџџџџџџџ"); +cprintf("\r\n џџ/џџџ|____|!џџџ џмџСк===Пџ/џџџdeџlasџentradas.џџџџџџџџџџџџџџџџџџ"); +cprintf("\r\n /џџџ________________џџмџСк===Пџ/џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ"); +cprintf("\r\nџџџџ/џџџ/________________/|џСк===Пџ/џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ"); +cprintf("\r\nџџ/џџџџ|џ.џ.џ.џ.џ.џ.џ.џ.џ|/ /џџџџProgramaџejemploџenџmodoџTEXTO.џverџ1.1"); +cprintf("\r\n/______џ\\џ.џ.џ.џ.џ.џ.џ.џ/______/џџџџџџInfoMundoџ1996џ(c).џ_-љFuTuReџViSiOnљ-_"); +cprintf("\r\n ------------- џџџџ"); +*/ + + +textcolor(WHITE);cprintf("Grafista:џџџџJDџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ");textcolor(BLUE); cprintf("_____џџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\nProgramador:џJDџџџџџџџџџџџџџџџџџ");textcolor(YELLOW+BLINK); cprintf("лл");textcolor(GREEN); cprintf("___________________");textcolor(BLUE); cprintf("/|||||/|");textcolor(GREEN); cprintf("_џџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\n џџџџџџџџџџJoshuaџџџџџџџџџџџ");textcolor(GREEN); cprintf("/");textcolor(LIGHTGRAY); cprintf("џССџк");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("Пџџџџџџџџџџџџ");textcolor(BLUE); cprintf("|/#####|/");textcolor(GREEN); cprintf("/џџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\nHardware:џџџџLopezџџџџџџџџџџ");textcolor(GREEN); cprintf("/");textcolor(MAGENTA); cprintf("џТТТТТТТџџџџџџџџџџџТТТТТТТџ");textcolor(GREEN); cprintf("џџџ/џџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\n џџџџџџџџџџMillanџџџџџџџ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џ_______џџџџџџџџџџ_______џџџ");textcolor(GREEN); cprintf("џџ/џџџџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\nџџџ џџџџџџџ џ џџ ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џ/_______/|џџџџџџџ/_______/|џ");textcolor(GREEN); cprintf("џ/џџџџџџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\nџџџџџџџџџ џ џ ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џџ|");textcolor(LIGHTGRAY); cprintf("Т");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("Т");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("Т");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("Т");textcolor(DARKGRAY); cprintf("|/џџџџџџџ|");textcolor(LIGHTGRAY); cprintf("Т");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("Т");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("Т");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("Т");textcolor(DARKGRAY); cprintf("|/");textcolor(GREEN); cprintf("џ/џџџџџџџџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\nBienbenidosџaџunaџџџ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џџ________________ џџмџџџџџџџ");textcolor(GREEN); cprintf("џ/џџџџџџџџџџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\nnuevaџera, ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џџмџм мџм м мџм мџ /џмџ");textcolor(LIGHTGRAY); cprintf("Ск");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("П");textcolor(GREEN); cprintf("џ/џџ");textcolor(WHITE); cprintf("PulsaџunџnЃmeroџdelџ(0-7)"); +textcolor(WHITE);cprintf("\r\nџbienvenidosџaџџ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џџ/_");textcolor(LIGHTGRAY); cprintf("С");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("С");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("С");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("С");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("С");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("С");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("С");textcolor(DARKGRAY); cprintf("_");textcolor(LIGHTGRAY); cprintf("С"); textcolor(DARKGRAY); cprintf("/џмџ");textcolor(LIGHTGRAY); cprintf("Ск");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("П");textcolor(GREEN); cprintf("џ/џџ");textcolor(WHITE); cprintf("paraџactivar/desactivarџlaџ"); +textcolor(WHITE);cprintf("\r\n џџџџџџџ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џџ____џџџџџ џџџџмџ");textcolor(LIGHTGRAY); cprintf("Ск");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("П");textcolor(GREEN); cprintf("џ/џџ");textcolor(WHITE); cprintf("salidaџcorrespondiente.џџџџџџ"); +textcolor(WHITE);cprintf("\r\nџInfoMundoџџ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џџ/џJDџ/|џџџ џџџмџ");textcolor(LIGHTGRAY); cprintf("Ск");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("П");textcolor(GREEN); cprintf("џ/џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\n ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џџ/___џ/џ");textcolor(LIGHTGRAY); cprintf("!");textcolor(DARKGRAY); cprintf("џџ џџџмџ");textcolor(LIGHTGRAY); cprintf("Ск");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("П");textcolor(GREEN); cprintf("џ/џџџ");textcolor(WHITE); cprintf("Lasџledџindicanџelџestadoџџџџџџџ"); +textcolor(WHITE);cprintf("\r\n џџ");textcolor(GREEN); cprintf("/");textcolor(DARKGRAY); cprintf("џџџ|____|");textcolor(LIGHTGRAY); cprintf("!");textcolor(DARKGRAY); cprintf("џџџ џмџ");textcolor(LIGHTGRAY); cprintf("Ск");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("П");textcolor(GREEN); cprintf("џ/џџџ");textcolor(WHITE); cprintf("deџlasџentradas.џџџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\n ");textcolor(GREEN); cprintf("/");textcolor(BLUE); cprintf("џџџ________________џ");textcolor(DARKGRAY); cprintf("џмџ");textcolor(LIGHTGRAY); cprintf("Ск");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("П");textcolor(GREEN); cprintf("џ/џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\nџџџџ");textcolor(GREEN); cprintf("/");textcolor(BLUE); cprintf("џџџ/________________/|");textcolor(LIGHTGRAY); cprintf("џСк");textcolor(CYAN); cprintf("===");textcolor(LIGHTGRAY); cprintf("Пџ");textcolor(GREEN); cprintf("/џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ"); +textcolor(WHITE);cprintf("\r\nџџ");textcolor(GREEN); cprintf("/");textcolor(BLUE); cprintf("џџџ|џ.џ.џ.џ.џ.џ.џ.џ.џ|/ ");textcolor(GREEN); cprintf("/");textcolor(WHITE); cprintf("џџџџProgramaџejemploџenџmodoџTEXTO.џverџ1.1"); +textcolor(WHITE);cprintf("\r\n");textcolor(GREEN); cprintf("/_____џ");textcolor(BLUE); cprintf("\\џ.џ.џ.џ.џ.џ.џ.џ/");textcolor(GREEN); cprintf("______/");textcolor(WHITE); cprintf("џџџџџџInfoMundoџ1996џ(c).џ_-љFuTuReџViSiOnљ-_"); +textcolor(BLUE); cprintf("\r\n ------------- џџџџ"); + +} + +////////////////////////////////////////////////////////////////////////////// +void Melt( void ) +{ + +int index,ticks=0; + +for (index=1; index< 81; index++) + { + worms[index].speed = 3 + rand()%9; + worms[index].y = 0; + worms[index].counter = 0; + gotoxy( index, 1 ); + cprintf(" "); + } + +while(++ticks<290) + { + delay(10); + + for (index=1; index<81; index++) + { + if (++worms[index].counter == worms[index].speed) + { + worms[index].counter = 0; + if (worms[index].y < 25) + { + gotoxy( index, worms[index].y ); + cprintf("ў"); + gotoxy( index, worms[index].y-1 ); + cprintf(" "); + worms[index].y++; + } else { + gotoxy( index, 24 ); + cprintf(" "); + } + } + } + if (!(ticks % 500)) + { + for (index=1; index<81; index++) + worms[index].speed--; + } + } +} diff --git a/DEMO.EXE b/DEMO.EXE new file mode 100644 index 0000000..d4e27b4 Binary files /dev/null and b/DEMO.EXE differ diff --git a/DEMO.GIF b/DEMO.GIF new file mode 100644 index 0000000..3cf1cef Binary files /dev/null and b/DEMO.GIF differ diff --git a/DEMO.PRJ b/DEMO.PRJ new file mode 100644 index 0000000..6e9adb1 Binary files /dev/null and b/DEMO.PRJ differ diff --git a/FONDO.TXT b/FONDO.TXT new file mode 100644 index 0000000..0e57c28 --- /dev/null +++ b/FONDO.TXT @@ -0,0 +1,27 @@ +/* + +Grafista: JD _____ +Programador: JD лл___________________/|||||/|_ + Joshua / СС к===П |/%%%%%|// +Hardware: Lopez / ТТТТТТТ ТТТТТТТ / + Millan / _______ _______ / + / /_______/| /_______/| / + / |Т_Т_Т_Т|/ |Т_Т_Т_Т|/ / +Bienbenidos a una / ________________ м / +nueva era, / м м м м м м м м / м Ск===П / Pulsa un nЃmero del ( 0-7 ) + bienvenidos a / /_С_С_С_С_С_С_С_С/ м Ск===П / para activar/desactivar la + / ____ /| /| м Ск===П / salida correspondiente. + InfoMundo / / JD /| /| /| м Ск===П / + / /___ / ! /| /| м Ск===П / Las led indican el estado + / |____|! | | м Ск===П / de las entradas. + / ________________ м Ск===П / + / /________________/| Ск===П / + / | . . . . . . . . |/ / Programa ejemplo en modo TEXTO. ver 1.1 +/______ \ . . . . . . . /______/ InfoMundo 1996 (c). _-љFuTuRe ViSiOnљ-_ + ------------- + + + + + +*/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d27b2b --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#PRN_DEMO + + +*20/04/1996* + +ToDo: wwtcf? + + +![screenshot](/PRN_DEMO.png "Screenshot") diff --git a/SOFT_DOC.TXT b/SOFT_DOC.TXT new file mode 100644 index 0000000..670636e --- /dev/null +++ b/SOFT_DOC.TXT @@ -0,0 +1,384 @@ + + + + 8i8o DocumentaciЂn + del Software + + Indice + + + 1 Ј Que software incluye el kit ? + 2 DescripciЂn de comandos. + 3 Primeros pasos. + + + 4 CreaciЂn de un programa ejemplo DEMO.C + + 5 Preguntas y Respuestas. + 6 Puntos de consulta directa. + + + + + NOTA: + Todas las referencias que se hagan aqui a la programaciЂn + seran basadas en el lenguaje C, ya que para otros lenguajes + las librerias a utilizar seran las mismas, asi como los + nombre y operaciones internas de las funciones. + + +------------------------------------------------------------------------------- + Ј Que software incluye el kit ? + + + Disco 1: [CONTENIDO] + + + soft_doc.txt DocumentaciЂn del software ( texto MS-DOS ). + hard_doc.txt DocumentaciЂn del hardware ( texto MS-DOS ). + softhard.hlp D. Software y Hardware ( Formato WinHELP ). + + InfoMund.gif Imagen del logotipo de InfoMundo + 8i8o_pb .gif Imagen del circuito prototipo 8i8o_pb + conexion.txt Ideas de conexiones frecuentes. + catalogo.txt Lista de productos ofrecidos por InfoMundo. + + lib_tc\prn_cnt?.lib Librerias en C, para Tiny, Medium, Compact, Large y Huge . + prn_cnt .h Cabeceras para las librerias. + demo .c Demo completo de una utilizaciЂn global. + demo .exe Programa demo.c compilado + kit .c Programa ejemplo. + + lib_cp\prn_cnt .lib Librerias para Clipper. + prn_cnt .h Cabeceras de las librerias. + io .prj Fuente en clipper ( para escribir y leer ). + + lib_vb\prn_cnt .vbx Librerias en Visual Basic ( ver 3.0 >> ). + puertos .dll .DLL para el control de los puertos en VB. + control .bas DemostraciЂn de las librerias para VB. + + infomund\infomund.hlp Archivo en formato winHELP, que habla de IM + +------------------------------------------------------------------------------- + DescripciЂn de comandos. + +л> Init_all л> Register +л> Reset_all +л> Lee_Salidas л> Lee_Salida +л> Escribe_Salidas л> Escribe_Salida +л> Lee_Entradas л> Lee_Entrada + + + /**************************************************************************\ +| | +| Esta rutina debe ser llamada al iniciar el programa que use las librerias. | +| | +| Es la encargada de poner a cero todas la salidas, al principio y al salir. | +| | +| | +| Parametros de Entrada: ( ninguno ) | +| Parametros de Salida: | +| OK Todo ha ido bien. | +| ERROR_EN_ATEXIT Error registrando funciЂn | +| FUNCION_YA_REGISTRADA No es la 1І vez | +| | + \**************************************************************************/ + +л> int Init_all(void); + + /**************************************************************************\ +| | +| WARNING: | +| El uso de la siguiente funciЂn esta indicada solo para usuarios | +| experimentados, se debe usar en lugar de la funciЂn anterior. | +| | +| Parametros de Entrada: | +| ( LEER/ESCRIBIR ) // L/E los registros del fich| +| ( %s ) // _ero %s | +| | +| Parametros de Salida: | +| 1 Ok! OK | +| -1 Fallo desconocido FALLO_DESCONOCIDO | +| -2 Archivo no existe NO_ARCHIVO | +| -3 Error archivo no valido ARCHIVO_INCORRECTO | +| | + \**************************************************************************/ + +л> int Register( char leer_escribir, char *file ); + + /**************************************************************************\ +| | +| Resetea todas las salidas y las pone a cero. | +| | + \**************************************************************************/ + +л> void Reset_all(void); + + + /**************************************************************************\ +| | +| Obtiene el estado de las salidas ( On/Off ), de la ampliacion AMPL. | +| | +| Parametros de Entrada: | +| ampl AmpliaciЂn donde debemos mirar | +| estados Puntero a estructura con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, solo se devolvera el char de salida. | + \**************************************************************************/ + +л> unsigned char Lee_Salidas( char ampl, ESTADOS *estados ); + + /**************************************************************************\ +| | +| Obtiene el estado de una salida ( On/Off ), cualquiera. | +| | +| Parametros de Entrada: | +| salida ( Si 1 ampl. 0 a 7 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + +л> unsigned char Lee_Salida( char salida ); + + /**************************************************************************\ +| | +| Escribe la variable 'estados' ( On/Off ), en la ampliacion AMPL. | +| | +| Parametros de Entrada: | +| ampl AmpliaciЂn donde debemos mirar | +| estados Puntero a estructura con los estados | +| estadosb Byte con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, se utilizar  el char con los estados. | + \**************************************************************************/ + +л> unsigned char Escribe_Salidas( char ampl, ESTADOS *estados, char estadosb ); + + /**************************************************************************\ +| | +| Parametros de Entrada: | +| salida ( Si 1 ampl. 0 a 3 ) | +| ( Si 10 ampl. 0 a 80 ) | +| estado ( ON / OFF ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + +л> unsigned char Escribe_Salida( char salida, char estado ); + + + /**************************************************************************\ +| | +| Lee las entradas y la almacena en la variable estados. | +| | +| Parametros de Entrada: | +| ampl AmpliaciЂn donde debemos mirar | +| estados Puntero a estructura con los estados | +| | +| Parametros de Salida: | +| char 1Byte con los estados | +| | +| NOTA: si &estados es NULL, solo se devolvera el char de salida. | + \**************************************************************************/ + +л> unsigned char Lee_Entradas( char ampl, ESTADOS *estados ); + + /**************************************************************************\ +| | +| Lee una entrada cualquiera. | +| | +| Parametros de Entrada: | +| entrada ( Si 1 ampl. 0 a 7 ) | +| ( Si 10 ampl. 0 a 80 ) | +| | +| Parametros de Salida: | +| char 1Byte con el estado | +| | + \**************************************************************************/ + +л> unsigned char Lee_Entrada( char entrada ); + + +------------------------------------------------------------------------------- + Primeros pasos. + + En esta secciЂn describiremos los principios b sicos para utilizar + nuestro Software. + + Junto con el programa tenemos que crear un proyecto en el que se + incluyan nuestro programa y la libreria correspondiente al modelo + de memoria que estemos utilizando. + + En primer lugar antes de empezar a realizar operaciones con el 8i8o + deberemos indicar en que puerto se encuentra, cargando la variable + + л> Lpt_usado = [1:Ltp1, 2:Lpt2, 3:Lpt3] + + acto seguido debemos resetear todas las salidas: + + л> #include "prn_cnt" + + л> void main( void ) + л> { + л> Lpt_usado = 1; + л> reset_all(); + л> } + + la funcion reset_all, puede ser sustituida por 'Register', esta + ultima esta indicada cuando se ha salido voluntariamente de su + programa y quiere guardar en un archivo el estado de las salidas, + de modo que al volver a entrar todo siga igual, sin ninguna + alteraciЂn. ( Para que al salir del programa no se reseteen las + salidas, basta con no llamar a la funcion reset_all ). + + para escribir en el '8i8o' podemos utilizar una de las dos + funciones disponibles: + + 'Escribe_Salida' o 'Escribe_Salidas' la diferencia + reside en que a la primera le indicamos la salida fЁsica y el + estado ON, OFF. La segunda sirve para poner en el estado que deseemos + la ampliaciЂn, es decir, seleccionar el estado de los 8 bit's de golpe. + + л> #include + л> #include "prn_cnt" + + л> void main( void ) + л> { + л> int salida, estado; + л> Lpt_usado = 1; + л> reset_all(); + + + л> do{ + л> printf( "\n Introduzca Salida y Estado [1:ON, 0:OFF] " ); + л> printf( "\n estado > 1 Termina el Programa. " ); + л> scanf ( "%d %d", &salida, &estado ); + л> Escribe_Salida( salida, estado ); + л> }while( estado<=1 ); + + л> } + + + las funciones destinadas a la lectura se usan de igual forma que + las anteriores para la escritura, existiendo igualmente dos funciones + para leer una salida determinada o leer una ampliaciЂn de golpe, + seЄalar que las entras al '8i8o' pueden funcionar directamente como + buses de datos digitales y no solo analЂgicos. + + + л> #include + л> #include "prn_cnt" + + л> void main( void ) + л> { + л> unsigned char estados; + л> Lpt_usado = 1; + л> reset_all(); + + + л> cprintf( "\n Pulse una tecla para acabar " ); + л> cprintf( "\n 1 entrada de datos ON " ); + л> cprintf( "\n 0 entrada de datos OFF " ); + л> do{ + л> gotoxy( 10, 15 ); + л> estados = Lee_Salidas( 1, NULL ); + printf( "\n%d %d %d %d %d %d %d %d", ( estado & 0x80 ) != 0, + ( estado & 0x40 ) != 0, + ( estado & 0x20 ) != 0, + ( estado & 0x10 ) != 0, + + ( estado & 0x08 ) != 0, + ( estado & 0x04 ) != 0, + ( estado & 0x02 ) != 0, + ( estado & 0x01 ) != 0 ); + + л> }while( !kbhit() ); + + л> } + + Como puedes ver, la programaciЂn de nuestro dispositivo es tan + sencilla como decir donde y que queremos hacer. El limite esta + en tu imaginaciЂn y conocimientos. + +------------------------------------------------------------------------------- + CreaciЂn de un programa ejemplo DEMO.C + +Vea fichero DEMO.C + +Puntos importantes: + + -Realiza una lectura continua del bus de entrada + -Controla la 1Ї ampliaciЂn del 8i8o + -Al entrar comprueba que no se hubiera entrado + antes, recordando el estado de las salidas, register, + si al salir, todas las salidas estan a cero, se + elimina el archivo register, para que al volver a + entrar se reseteen las salidas. + + + +------------------------------------------------------------------------------- + Preguntas y Respuestas + + + Bien, de momento ninguno de nuestros clientes nos han planteado ninguna + respuesta, y esperamos que siga siendo asi, ya que eso es seЄal de la + buena documentaciЂn incluida y el sencillo manejo del '8i8o'. + + De todas formas si tiene alguna pregunta, no dude en realizarnosla. + Aprovecho para realizar unas cuantas: + + + Ј Que complementos tengo para mi '8i8o' ? + + Para saber que complementos, puede adquirir para su '8i8o' solo tiene + que editar el fichero CATALOGO.TXT. + + + Ј Quien es la asociaciЂn InfoMundo ? + + Abre el fichero infomund.hlp, y enterate de quienes somos, que hacemos, + y por que no, unete a nosotros, colaborando en proyectos y debates. + +------------------------------------------------------------------------------- + Puntos de consulta directa. + + Puedes dirigirte a nosotros via e-mail: + + infomundo@arrakis.es + guill@galileo.fie.us.es + + por tel‚fono: + + a los propios Creadores del 8i8o : + + Francisco Lopez [hardware] -------> 568 xx xx + Francisco Millan [hardware] -------> 568 xx xx + Jos‚ David Guill‚n [software] -------> 561 xx xx + Josue [software] -------> 568 xx xx + + a nuestra BBS: + + 8 nodos : xX XXx xX + + + + +------------------------------------------------------------------------------- + F I N +------------------------------------------------------------------------------- +eof file. + + + diff --git a/VIDEOC~1.TXT b/VIDEOC~1.TXT new file mode 100644 index 0000000..d524a38 --- /dev/null +++ b/VIDEOC~1.TXT @@ -0,0 +1,69 @@ +/* +Bit 5 --> Indica con 0 que empieza un sincronismo de pantalla +Bit 6 --> Indica que empieza una linea ( cuando esta a 0 ) +Bit 4 --> Indica si es par o impar (0-1) + +Bit 0 }-> Commutador +Bit 1 }-> Video + + + + + USO: video [LINEA_INICIO] [LINEA_FIN] [TIEMPO_RETARDO_MICRO_SEG] +*/ + + +#include +#include +#include +#include + +void main( int argc, char *argv[] ) +{ + int LineaINI, LineaFIN; + char LineaPI; + double RETARDO; + + if ( argc < 4 ) + { + sprintf( "\nERROR de parametros: video [LINEA_INICIO] [LINEA_FIN] [TIEMPO_RETARDO_MICRO_SEG]\n"); + return; + } + + LineaINI = atoi( argv[1] ); + LineaFIN = atoi( argv[2] ); + Retardo = atod( argv[3] ); + + do { + + // Esperamos a que empieze un sincronismo de pantalla + while( inportb(888) & 32 ); + + // Mira si son lineas pares o impares e inicializa el contador de nК de lэnea + if ( inportb(888) & 16 ) + LineaPI = 1; + else + LineaPI = 0; + + while( linea < 313 ) + { + if ( !(inport( 888 ) & 64) ) + { + linea += 2; + if ( LineaINI <= linea && linea <= LineaFIN ) + { + outportb( 888, F2 ); + + // Perdemos "Retardo" micro-segundos + while( (clock() - SegINI)<<3 < Retardo ); + + outportb( 888, F1 ); + } + } + }; + + } while ( !kbhit() ); + + + while( kbhit() ) getch(); +} \ No newline at end of file