00001 #ifndef LMEM_H 00002 #define LMEM_H 00003 00004 /**********************************************************/ 00005 /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/ 00006 /* 00007 Copyright: 1993 - Grupo de Voz (DAET) ETSII/IT-Bilbao 00008 00009 Nombre fuente................ LMEM.H 00010 Nombre paquete............... - 00011 Lenguaje fuente.............. C (Borland C/C++ 3.1) 00012 Estado....................... Completado 00013 Dependencia Hard/OS.......... Memoria segmentada 00014 Codigo condicional........... - 00015 00016 Codificacion................. Borja Etxebarria 00017 00018 Version dd/mm/aa Autor Proposito de la edicion 00019 ------- -------- -------- ----------------------- 00020 3.0.0 22/02/94 Borja unificacion 64kb y 128kb ---> {kbpage}, etc 00021 2.1.0 20/02/94 Borja funciones fixlen???() 00022 2.0.0 20/02/94 Borja incorporacion de {align} y {granularity} 00023 1.0.1 12/02/94 Borja correccion de bug en macro LMEM2PTR() 00024 1.0.0 06/08/93 Borja Codificacion inicial. 00025 00026 ======================== Contenido ======================== 00027 Fichero de cabecera y definiciones de LMEM.C. 00028 00029 Macros para la conversion entre un puntero estandar (pfVOID) 00030 y un puntero de memoria lineal de 32 bits (UINT32) dependen 00031 del SO y del compilador. 00032 00033 Declaracion de funciones fix??() para la adecuacion de bloques 00034 de memoria en operaciones de transferencia DMA. Utilizan los 00035 tipos y macros definidos anteriormente, y en principio no 00036 necesitan modificarse para compiladores o SO diferentes. 00037 .................... 00038 Header for LMEM.C 00039 00040 Macros to convert a far pointer (pfVOID) to a linear 32 bit 00041 pinter (UINT32). 00042 =========================================================== 00043 */ 00044 /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/ 00045 /**********************************************************/ 00046 00047 #include "tdef.h" /* definicion de tipos fundamentales */ 00048 00049 /**********************************************************/ 00050 00051 #ifdef __cplusplus 00052 extern "C" { 00053 #endif 00054 00055 /**********************************************************/ 00056 /* PTR2LMEM es una macro que debe convertir un puntero p de 00057 tipo pfVOID (es decir, el tipo mas amplio y generico que 00058 contempla el compilador) a un puntero de direccionamiento 00059 lineal (memoria plana) de 32 bits (tipo UINT32). 00060 LMEM2PTR debe hacer lo contrario, convertir un puntero l de 00061 direccionamiento lineal (tipo UINT32) en un puntero de tipo 00062 generico pfVOID de los que utiliza el compilador 00063 .................... 00064 PTR2LMEM converts a far pointer (pfVOID) {p} to a flat 32 bit 00065 pointer (UINT32). 00066 LMEM2PTR is the inverse conversion: flat pointer to far pointer. */ 00067 00068 #include <dos.h> /* para FP_SEG(), FP_OFF() y MK_FP() */ 00069 00070 #define PTR2LMEM(p) ( (((UINT32)FP_SEG((pfVOID)(p)))<<4) + \ 00071 (UINT32)(FP_OFF((pfVOID)(p))) ) 00072 00073 #define LMEM2PTR(l) \ 00074 (MK_FP((UINT16)((((UINT32)(l))>>4)&0xFFFF),(UINT16)(((UINT32)(l))&0x000F))) 00075 00076 /**********************************************************/ 00077 00078 pfVOID fixmem( pfVOID ptr, UINT32 nbytes, UINT16 kbpage, UINT32 align, 00079 UINT32 granularity, UINT32 * lmem, UINT32 * usebytes ); 00080 00081 UINT32 fixlen( pfVOID ptr, UINT32 nbytes, UINT16 kbpage, UINT32 align, 00082 UINT32 granularity ); 00083 00084 /**********************************************************/ 00085 00086 #ifdef __cplusplus 00087 } /* extern "C" */ 00088 #endif 00089 00090 /**********************************************************/ 00091 00092 #endif