Memory Full - Buffer - LOAD

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
MoteroV4
Forero habitual
Forero habitual
Mensajes: 106
Registrado: Jue 02 May , 2019 9:26 pm

Memory Full - Buffer - LOAD

Mensajepor MoteroV4 » Sab 10 Oct , 2020 8:33 am

Muy buenas. Tengo un problema de "Memory Full" de novato. Estoy terminando mi 1er juego, para la CPCRetrodev. Consta de 2 partes, una en BASIC, aprox. unos 20KB y otra es un Binario de aprox. 18KB en ASM con funciones de la CPCTelera, gráficos, música, etc. De momento en total 38KB, pero necesitaré llegar probablemente a los 42KB.

El problema es que el programa Basic realiza la carga del Binario al principio y ha empezado a darme el error Memory Full en la línea que intenta cargar el Bin. Cuando casca hago un ?Fre(0) => 4067.

Investigando en otros libros, parece ser que AMSDOS para tratar con archivos reduce automáticamente y momentáneamente HIMEM en 4096 bytes, o sea, LOAD crea un buffer temporal de 2KB para entrada de datos desde el disco y otros ¿¿2KB para salida???. Estos 2KB últimos ni siquiera los voy a utilizar, ya que no grabo nada.

Mi pregunta es ¿con lo caro que está el byte en serio se pierden 4KB a la basura por intentar cargar un archivo? ¿solo se pueden cargar en total un máximo de 38KB en RAM?

Se me ocurre que podría comprimir parte del ASM, reservar esa zona del buffer y cuando termine de cargar todo y se libere, descomprimir en dicha zona.
O quizás hacer mi propia rutina de carga desde ASM, y se pudiera quitar al menos el buffer de 2KB de salida a disco.

¿Alguna idea? :giveup:

Gracias.

Avatar de Usuario
6128
Moderador
Moderador
Mensajes: 7917
Registrado: Lun 12 Dic , 2005 6:08 pm

Re: Memory Full - Buffer - LOAD

Mensajepor 6128 » Sab 10 Oct , 2020 6:48 pm

No soy experto en programación pero creo que las 2 opciones que planteas (comprimir/descomprimir o crear tu propia rutina de carga) te pueden valer. No hay otra solución o yo la desconozco.
A ver si algún otro compañero de foto lo aclara mejor.

trocoloco
Megaforero
Megaforero
Mensajes: 335
Registrado: Lun 16 Abr , 2007 11:02 am

Re: Memory Full - Buffer - LOAD

Mensajepor trocoloco » Sab 10 Oct , 2020 9:59 pm

¿Puedes enseñarnos el cargador en Basic que tienes para ver si vemos algo que a lo mejor se te haya escapado?

Si tu juego te va a ocupar 42kb y vas justo de memoria para no pisar el firmware, siempre tienes la opción de comprimir los archivos. Incluso cargar datos en la zona de memoria de video y después realojarlo a la parte que le corresponda.

Avatar de Usuario
MoteroV4
Forero habitual
Forero habitual
Mensajes: 106
Registrado: Jue 02 May , 2019 9:26 pm

Re: Memory Full - Buffer - LOAD

Mensajepor MoteroV4 » Dom 11 Oct , 2020 2:40 am

Gracias por responder 6128 y Trocoloco.
Con respecto a la parte cargador es el propio programa en Basic de 20KB el que carga el BIN CPCTelera y una fuente al principio:

Código: Seleccionar todo

10 SYMBOL AFTER 47
15 h=HIMEM+1
20 LOAD"spaceage.fnt",h
1 'Basic por debajo de &5000
30 MEMORY &4FFF
40 LOAD"simon.bin",&5000
50 DEFINT a-z:RANDOMIZE TIME:main=&89F1
...

El BIN lo he movido de sitio, ahora empieza en &5000 y termina en &97F5, quedando libre por arriba 2174bytes (las fuentes limitan a &A073).

El BAS me muestra libre con un FRE(0)=6275bytes, que no son reales, puesto que no carga el bin en cuanto baja de 4096, cascando en línea 40.

Me apunto a la solución de Trocoloco: =D>
Desde Basic cargaré el .FNT y el .BIN en sus correspondientes sitios, dejando el buffer de disco fijo y asignado con Memory:

Código: Seleccionar todo

OPENOUT "Dummy"
MEMORY HIMEM-1
CLOSEOUT
Crearé en CPCtelera un 2º proyecto BIN desglosando rutinas o sprites del 1er BIN hasta llenarlo con 4KB. Lo cargaré con Basic temporalmente en memoria de video &C000. Mediante una rutina en el Main del 1er proyecto BIN transferiré el 2º BIN desde video a la mencionada vieja zona del buffer de disco, inservible, una vez ya se cargó todo.
Adjuntos
Snap 2020-10-11, 00_29_35.png

trocoloco
Megaforero
Megaforero
Mensajes: 335
Registrado: Lun 16 Abr , 2007 11:02 am

Re: Memory Full - Buffer - LOAD

Mensajepor trocoloco » Lun 12 Oct , 2020 7:39 pm

Nada hombre, me alegro que pueda servirte para presentar tu juego. Suerte en la Retrodev y ya mismo vamos a estar jugándolo :D


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic