Una de las mejoras que quiero hacer en el software de uFLASH es poder grabar una imagen de 64Kb (o incluso más), actualmente el límite está en unos 61Kb debido al uso de la función malloc que asigna un buffer dentro del mismo segmento de datos:
Código: Seleccionar todo
if ((buf = (unsigned char *) calloc (*rom_size, 1)) == NULL) {
printf("ERROR: Failed to allocate %u bytes for input buffer: %s.\n",
*rom_size, strerror(errno));
exit(5);
}
Si se trata de asignar más memoria con este método provoca fallo y no se lleva a cabo. He intentado usar la función halloc disponible en Watcom C junto con un puntero tipo far*, parece que sí se asigna la memoria pero no estoy convencido de que lo haya hecho bien... no tengo muy claro cómo el programa selecciona el segmento y offsets adecuados para su gestión. Además hay otro problema, me interesa que después se pueda leer un fichero de 64Kb (o más) y guardarlo en dicho buffer pero la función fread parece que no acepta punteros de tipo far*. La cuestión es, alguien conoce un método que me pueda mostrar con un ejemplo que cargue un fichero de 64Kb o más y lo guarde en memoria en diferentes segmentos y se pueda acceder a éstos sin problema en un programa de MS-DOS de 16 bits que corre en un 8088? Por más que trato de buscar en Internet no encuentro nada.
Por cierto, la opción de ir cargando desde el fichero en bloques menores para almacenar en memoria no me interesa utilizar, quiero seguir conservando la posibilidad de hacer cambio en caliente de la mitad de memoria a flashear, y una vez hecho el cambio no es posible hacer llamadas a la BIOS (las lecturas de disco la hacen) y debe estar todo precargado en memoria.