Liberando RAM para programa, ¿por qué falla esto?

Por DarkSchneider

Paladin (941)

Imagen del DarkSchneider

19-03-2014, 15:23

Para liberar espacio en RAM se me ocurrió hacer lo siguiente.

- Usar una RAM mapeada.
- Cambiar el banco asignado a la página 2 (#8000) que por defecto es el 1 al 4.
- Copiar desde la página 3 (#C000), (banco 0 por defecto de la RAM mapeada) #F380-#FFFF a la parte correspondiente de #8000, es decir al final para que los bytes correspondan en su misma posición.
- Devolver la página 2 al banco 1.
- Cambiar la página 3 al banco 4, que supuestamente contiene lo mismo que antes pero sin la parte de disco, como si se arrancara con SHIFT pulsado.
- Cuando quiera guardar en disco, nuevo cambiazo a la página 3 con su banco original.

Nota: el programa BASIC nunca va a superar la página 2, en realidad es para hacerle sitio al compilado Basic Kun + POKEs que pueda usar.

Bien pues se cuelga y reinicia al hacer OUT al final:
OUT &hff,4
(cuelgue y reinicio).

Esto es lo que hago con el sistema recién iniciado, creo que no está nada mal.

Ok
out &hfe,4
for i%=&hf380 to &hffff:poke i%-&h4000,peek(i%):next i
Ok
out &hfe,1
out &hff,4
(cuelgue y reinicio)

¿No se supone que contiene lo mismo para funcionar?. Es más, he probado a iniciar con SHIFT que su HIMEM es #F380 y pasa lo mismo.

Login sesión o register para postear comentarios

Por kabish

Master (223)

Imagen del kabish

08-04-2014, 23:04

Pues así, a bote pronto, debes inhabilitar las interrupciones. En ensamblador es el comando DI. Luego, cuando acabes, las habilitas con EI.

Leete los primeros capítulos de Easymbler y Curso de desproteccion de programas. Ahi te lo explica muy bien.