Autor Tema: Grabar/Salvar Estado de Juegos con pi1541?  (Leído 528 veces)

Bobafett

  • Commodorista
  • ***
  • Mensajes: 97
  • SYS 0
    • Ver Perfil
Grabar/Salvar Estado de Juegos con pi1541?
« en: Junio 07, 2023, 17:51:07 »
Saludos,

Tengo una duda. Hay forma de salvar/guardar el estado de un juego con la pi1541? Es decir, hay juegos que nativamente no tienen opcion de guardar la partida. Los emuladores lo hacen, pero no se como hacerlo con la Pi1541 o si sencillamente no es posible.

Gracias.
.::Boba Fett::.
::Commodore 64::

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Grabar/Salvar Estado de Juegos con pi1541?
« Respuesta #1 en: Junio 07, 2023, 23:56:02 »
No es posible hacerlo con la pi1541, o con cualquier otro emulador de disco. Lo único que puede hacerlo es un cartucho.
Guardar o cargar el estado del C64 require poder acceder a su memoria. El puerto serie no tiene, por sí msmo, esa capacidad. De la misma forma que poner un pendrive en un ordenador no hace nada por sí mismo.
Lo que se conecta por el puerto de cartucho, en realidad se convierte en una extensión de la placa del c64. Está conectado al bus de datos y direcciones,además de otras líneas de control. Usando una de estas líneas , la de DMA, un cartucho puede detener al procesador, y tener acceso de lectura/escritura a toda la memoria del c64 (cargar o salvar estado).

Dany

  • Commodoremaníaco
  • ****
  • Mensajes: 112
  • SYS 0
    • Ver Perfil
Re:Grabar/Salvar Estado de Juegos con pi1541?
« Respuesta #2 en: Junio 08, 2023, 12:11:56 »
Sería posible hacer un frezzeo en .CRT, en lugar de .D64?

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Grabar/Salvar Estado de Juegos con pi1541?
« Respuesta #3 en: Junio 08, 2023, 20:06:30 »
Lo que se va a guardar es un volcado de RAM, que no es ni un .D64 ni un .CRT.
Un .CRT tiene que contener un programa , ya que el ordenador va a ceder la ejecución al cartucho (un D64 no tiene que tener un programa necesariamente).
Sí sería posible crear un CRT que lo que haga sea ejecutar un código que lo que haga sea
restaurar un estado que tenga almacenado.

Dany

  • Commodoremaníaco
  • ****
  • Mensajes: 112
  • SYS 0
    • Ver Perfil
Re:Grabar/Salvar Estado de Juegos con pi1541?
« Respuesta #4 en: Junio 09, 2023, 02:02:25 »
pero los freezeos sí te los graba como un "disco" no? Vamos, va directo a la 1541... (A eso me refería con .D64)

Ostras pos molaría un montón algo que te hiciera freezeos a CRT, para hacer save points en los juegos coñazo. Hasta hoy día los hacía a disco, teniendo que recargar cada vez que me mataban, y luego, a vecces no me funcionaban, porque claro, el juego intentaba "reenganchar" el disco del juego en D64 cada ver que cargaba una nueva fase después del Freezeo, y a veces como digo, no reenganchaba, no sé por qué, y no hacía ni el intento de cargar. Supongo que tendría que ver con el turbo de la multicarga, y con el "estado" en el que deja la disquetera un freezeo...

Por cierto, en varios directos lo he dicho, no me quiero comprar ningún cartucho nuevo, estoy esperando el tuyo :D Eso de cargar juegos por Bluetooth va a ser la repanocha... CRT también?

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Grabar/Salvar Estado de Juegos con pi1541?
« Respuesta #5 en: Junio 13, 2023, 23:44:36 »
Claro, es a lo que me refiero. Los freezeos se graban en disco, porque son datos, y en la época, los datos sólo se podían guardar en disco...Ahora se podrían guardar en la SD, o en la memoria flash del micro. Pero habría que rehacer el cartucho del freezer.
Mirando la documentación de los snapshots del vice (https://vice-emu.sourceforge.io/vice_9.html#SEC283), se ven los "modulos" que escriben su estado en un snapshot.

Citar
MAINCPU   6502   The Main CPU - although it is a 6510, only the 6502 core is saved here
C64MEM   Memory   Holds the RAM contents of the C64. Also the CPU I/O register contents are saved here.
C64ROM   ROM images   Dump of the system ROMs
VIC-II   656*   The VIC-II of the C64/128
CIA1   6526   The CIA for the interrupts and the keyboard
CIA2   6526   The CIA for the userport, IEC-bus and RS232.
SID   6581   The SID sound chip of the C64/C128
REU*      The RAM Extension Unit state (optional)
ACIA1   6551   An ACIA (RS232 interface) at $DE00 (optional)
TPI   6525   A TPI at $DF00 for a parallel IEEE488 interface (optional)
*   Drive modules   The emulated drive(s) have their own modules see section 9.2.1.6 Drive modules

Restaurar el estado completo de una máquina real no es sólo leer la memoria, y volverla a escribir. Por ejemplo, restaurar la máquina a exactamente la misma línea de raster en la que se encontraba
en la captura puede ser importante...Cuando hay dispositivos mapeados en memoria (el VIC-II, el SID, las CIAs), pueden tener estados internos (por ejemplo, el punto de ADSR en el que se encuentra una nota en el SID), valores de sólo lectura, posiciones que al leer, lees un registro diferente que cuando escribes...
Y todo eso, sin contar con fastloaders cargados en la propia diskettera, que es un ordenador aparte, y que el cartucho no puede "congelar".

En la época, se sacaba un cartucho freezer que a lo mejor funcionaba con el 80% de los juegos, y listo. Hoy en día, si sacas eso, tienes un github lleno de gente quejándose de que el cartucho, cuando se usa en la fase 10 del juego X, no funciona.
Depurar ese tipo de cosas es muy muy tedioso...Vamos, yo no me metería a hacer eso..

El cartucho (o, mejor dicho, el "cacharro", porque son más cosas) en el que trabajo...Es sólo una forma de pasar tiempo con el C64 como otra cualquiera..Cuando empiece a funcionar como quiero, publicaré el código, pero mi intención no es (para nada) diseñar una placa fácil de replicar y ponerme a soldar placas para vender...No me interesa eso.. Píllate una ultimate ya :-D.
El test que me funciona es precisamente enviar CRTs por bluetooth desde un explorador en el móvil, pero no de la forma en que quiero que ocurra. Ahora funciona con una conexión directa entre el cartucho y el movil. Lo que quiero es que el movil se conecte a una placa, que redirija los comandos al cartucho, a la diskettera, a la cinta, o a lo que sea que puedas tener conectado.
Esa misma placa, me sirve para que emule la cinta, y es en lo que estoy, cuando el nuevo curro me deja algo de tiempo :-P

Dany

  • Commodoremaníaco
  • ****
  • Mensajes: 112
  • SYS 0
    • Ver Perfil
Re:Grabar/Salvar Estado de Juegos con pi1541?
« Respuesta #6 en: Junio 14, 2023, 01:13:09 »
Nah, no quiero Ultimate (aunque siempre que me dicen que me pille una, mi contestación ERA "Nah, me espero a que Dashian saque lo suyo" jajaja), pero entiendo que no te quieras poner a hacer las cosas "más allá de los planos" :D

javierglez

  • Commodore Master
  • *****
  • Mensajes: 453
  • terminator not seen
    • Ver Perfil
Re:Grabar/Salvar Estado de Juegos con pi1541?
« Respuesta #7 en: Junio 14, 2023, 12:32:05 »
Por ejemplo, restaurar la máquina a exactamente la misma línea de raster en la que se encontraba
en la captura puede ser importante...
Me has hecho pensar en este articulo, me parece que es bastante conocido, sobre las interrupciones raster estables.
https://www.antimon.org/dl/c64/code/stable.txt
Aparentemente las interrupciones raster pueden dar lugar a ese trozo de línea parpadeante que se ve en algunos juegos.

Una manera de sincronizar una posición fija dentro de la línea raster es coordinando la interrupción del VIC con otra del timer. 

El autor del articulo dice que eso lo inventó él, a partir de un trabajo similar que hizo en el VIC20, que no tiene interrupciones raster sí se puede leer su posicion y con un poco de paciencia sincronizar y utilizar después las interrupciones del timer.

Yo en el C64 no lo he probado pero en el VIC20 sí y la verdad es que parece magia que van pasando los minutos y no pierde la sincronización, ni siquiera un ciclo que es una millonesima de segundo.

Sí, estamos tan acostumbrados al emulador que olvidamos que en la máquina real la vida sigue.