Turbo loader de SD2IEC en los C16, Plus4 y C116

BlackHole
Mensajes: 1114
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 11 veces
Agradecimiento recibido: 237 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor BlackHole » 28 Sep 2019 03:32

Último mensaje de la página anterior:

Bien, el ejecutable oficial del SJLoader para equipos de la gama Commodore 264 (Commodore 16, Commodore 116 y Commodore Plus/4) llamado sjl264 light v0.3 ocupaba desde la posición $1001 de inicio del BASIC en estas 3 máquinas, hasta la posición $1429, ambas inclusive. Por lo tanto a partir de la posición $142A tenemos sitio de sobra para maniobrar lo que queramos. El código del parche es muy muy sencillo y lo detallo a continuación.

142A  A9 01       LDA #$01
142C A6 AE LDX $AE
142E A0 01 LDY #$01
1430 20 BA FF JSR $FFBA
1433 A9 02 LDA #$02
1435 A0 14 LDY #$14
1437 A2 5A LDX #$5A
1439 20 BD FF JSR $FFBD
143C A2 11 LDX #$11
143E BD 4A 14 LDA $144A,X
1441 9D DC 06 STA $06DC,X
1444 CA DEX
1445 10 F7 BPL $143E
1447 4C DC 06 JMP $06DC
144A A9 00 LDA #$00
144C 20 D5 FF JSR $FFD5
144F B0 06 BCS $1457
1451 20 BE 8B JSR $8BBE
1454 4C EA 8B JMP $8BEA
1457 4C 25 80 JMP $8025
145A 46 42 ;FB en ASCII

La rutina en $FFBA se llama SETLFS y configura un fichero lógico para ser abierto. En el registro X almacenamos la unidad desde la que cargar, y la posición $AE de la página cero almacenaba la última unidad usada para cargar el propio programa SJLoader, así que lo aprovechamos y eso nos permitirá usar otra unidad. El registro Y guarda la dirección secundaria. Es el valor que ponemos cuando hacemos LOAD "*",8,1 y ese 1 indica que el fichero se cargará en la dirección almacenada en su cabecera.

La rutina en $FFBD se llama SETNAM y configura el nombre asociado al fichero que acabamos de abrir. El registro A guarda la longitud del nombre, en este caso 2 letras, y el par X/Y guarda la dirección de 16 bits donde se almacena el nombre, en este caso $145A donde tenemos almacenado "FB" en ASCII. Si queremos cargar "FB16" habríamos de poner un 4 en el acumulador, y anadir los ASCII para "16" en la posición $145C a continuación de "FB".

Como pensamos sobreescribir toda esta zona con el programa a cargar, tenemos que mover código a una zona que quede a salvo. Lo conseguimos moviendo 18 bytes desde la posición $144A a la posición $06DC y saltamos a ésta última. ¿Por qué estos valores? En otra parte del programa SJLoader he visto que se ha movido código a esa zona hasta la posición $06DB y en el manual de referencia se indica que la zona $065E-$06EB es RAM disponible para código del usuario.

Ya en el código que hemos movido a $06DC, llamamos a la rutina del Kernal en $FFD5 que se llama LOAD. El registro A a 0 indica que cargamos, mientras que a otro valor diferente a cero indicaría que verificamos. Antes de poder usar esta rutina LOAD hemos tenido que llamar adecuadamente a SETLFS y SETNAM. Si la carga es exitosa vuelve con el CARRY a cero. Si ha habido un error (porque no exista el fichero o la unidad, o porque hemos abortado la carga con RUN/STOP) vuelve con el CARRY a uno. Si es este último caso, saltamos a $8025, que es una rutina de inicialización de BASIC que hace un NEW (no se borra la memoria, simplemente borra el puntero de inicio del programa). Si todo va bien, llamamos a $8BBE y $8BEA que inicializa los punteros y entra en el bucle principal de interpretación del BASIC, como si hubiésemos hecho un RUN. Estos valores los he sacado del código fuente del FB.

Para que el SJLoader salte a nuestro código, cambiamos el JMP $8025 con el que acababa (haciendo un NEW) por un JMP $142A. La parte de carga de ficheros es exactamente igual al Commodore 64 y sigue las normas de programación impuestas por CBM, comparte los punteros de rutinas del Kernal accesibles por el usuario. Todo lo demás lo he tenido que mirar en manuales de referencia del Plus/4, porque era la primera vez en la vida que me encontraba con esta máquina y desconocía el entorno.

Avatar de Usuario
Chema
Mensajes: 2249
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1858 veces
Agradecimiento recibido: 593 veces
Contactar:

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor Chema » 28 Sep 2019 09:00

Madre qué hilo más interesante. Y se me había pasado por completo. Enhorabuena por el curro!

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor kikems » 28 Sep 2019 09:28

Se me ocurre alguna mejora más. Si queréis las planteo y vamos viendo si podemos llevar la herramienta un paso más allá.

Avatar de Usuario
minter
Mensajes: 2533
Registrado: 22 Jul 2014 18:51
Agradecido : 2384 veces
Agradecimiento recibido: 1041 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor minter » 28 Sep 2019 12:33

Chema escribió:Madre qué hilo más interesante. Y se me había pasado por completo. Enhorabuena por el curro!

Pues claro que se te ha pasado, si se lo han currado en 5 días.
Como se ha notado el cracker que lleva blackhole dentro. Carreras a contrareloj para crackear antes que nadie. -507

A mí no me ha dado tiempo ni a arrancar el emulador.

Un hilo la mar de majo (ya se me está pegando el cantabro. -507 )

P.D:Y eso que Blackhole no sabe informatica. -507

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor kikems » 28 Sep 2019 23:09

La mejora que se puede hacer ahora, creo que parte de tocar el source del FB16.
El caso es que con el Turbo activado y una vez dentro del FileBrowse del SD2IEC los PRG cargan a toda velocidad, pero cuando entramos en una imagen D64 y queremos volver al basic con esa imagen montada para ejecutarla hay que pulsar Q para salir del Filebrowser y en ese momento del volver al basic el turbo de desactiva. Como el turbo sigue estando en la memoria, así que si escribimos y ejecutamos SYS 1525 volvemos a activar el Turbo manualmente y a continuación ya podemos continuar cargando los contenidos del disco virtual D64 a velocidad de Turbo.
Al volver a basic desde el FileBrowser también se pierde la cualidad de activar/desactivar el turbo pulsando F1, hay que hacerlo mediante el SYS1525.

La mejora que propongo sería modificar el FB16 para que al volver al basic ( pulsando la Q ) con una imagen D64 montada, no pierda el turbo.

BlackHole
Mensajes: 1114
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 11 veces
Agradecimiento recibido: 237 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor BlackHole » 29 Sep 2019 01:27

No sé si será por el emulador, pero cuando salgo de FB al BASIC con la tecla Q, las teclas de función a mí sí me siguen funcionando. Lo que no hace es entrar dentro de los archivos D64 para "montarlos" y ver qué hay dentro. Pero bueno, leyendo las fuentes del FileBrowser 1.6, se ve rápidamente cómo se comporta y lo que hace es resetear los vectores a los valores por defecto del sistema. Por poderse quitar, pues supongo que se puede quitar.

https://www.nightfallcrew.com/21/08/2013/cbm-filebrowser-v1-6-by-nbla000/

Edito: Lo que veo es que a la hora de salir de FB, se recupera una copia de seguridad de las palabras asociadas a las teclas de función, que se había guardado previamente porque por alguna razón el programa FB usa 16 bytes de ese área para otras cosas. Puede que al entrar dentro de un D64 y salir del programa, esa copia de seguridad esté dañada... pero como en el emulador no puedo entrar dentro de los D64, no sé qué falla. Cuando le doy al ENTER estando un fichero D64 en primer lugar, me vuelve a mostrar los contenidos del mismo directorio. Pero es que quizás algo va mal en la emulación IEC en el VICE, porque el FB tampoco me arranca PRGs del disco duro que con LOAD o DLOAD sí puedo cargar.

marcos64
Mensajes: 235
Registrado: 08 Nov 2018 10:31
Agradecido : 42 veces
Agradecimiento recibido: 53 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor marcos64 » 29 Sep 2019 10:12

BlackHole escribió:la emulación IEC en el VICE


El VICE no es una buena opcion para emular al Plus/4. Prueba el YAPE (si no lo has hecho ya).
http://marcos64.orgfree.com/
Actualizacion 22/4/2018: Actualizada Load'N'Run numero 5 con nuevos TAPs y PRGs.

BlackHole
Mensajes: 1114
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 11 veces
Agradecimiento recibido: 237 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor BlackHole » 29 Sep 2019 11:54

marcos64: No había probado el YAPE y efectivamente es mejor emulador, pero el soporte IEC es limitado. A la hora de mostrar ficheros a cargar hacia el ordenador, solo lista PRGs, así que tampoco permite al FB entrar en un D64 porque ni siquiera le informa de su existencia... por lo tanto tampoco he podido replicar el comportamiento que dice kikems que obtiene, pues al salir del FB las teclas de función siguen intactas. Si fuerzo una 1541 con la ROM de JiffyDOS en el YAPE y ejecuto SDLoader antes que el FileBrowser, al salir de FB me ejecuta SYS 1525 para activar/desactivar el turbo cuando pulso F1. Si intento ejecutar SDLoader sin soporte JiffyDOS pues se cuelga todo como en el VICE, ya lo vimos. Si se ejecutan los emuladores sin soporte de ambas "Function ROM" (alta y baja) pues la tecla F1 muestra el comando "GRAPHIC".

marcos64
Mensajes: 235
Registrado: 08 Nov 2018 10:31
Agradecido : 42 veces
Agradecimiento recibido: 53 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor marcos64 » 29 Sep 2019 14:54

Has probado a (des)activar las opciones True Drive emulation y/o Virtual device traps en el VICE?
http://marcos64.orgfree.com/
Actualizacion 22/4/2018: Actualizada Load'N'Run numero 5 con nuevos TAPs y PRGs.

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor kikems » 29 Sep 2019 16:37

He estado probando más detenidamente y no hace falta entrar en un D64, con entrar al FB16 y salir en cualquier directorio , al volver a basic pierde el turbo. Eso si, volviendo al basic desde directorios no pierde la función de activar/desactivar el turbo pulsando F1 , cosa q si se pierde al entrar al un D64.

Avatar de Usuario
kikems
Mensajes: 3391
Registrado: 30 May 2013 19:23
Agradecido : 978 veces
Agradecimiento recibido: 1348 veces

Re: Turbo loader de SD2IEC en los C16, Plus4 y C116

Mensajepor kikems » 02 Nov 2019 11:55

Blackhole, que sepas que he publicado tu SJL parcheado en el Puls4World y están encantados con la herramienta y muy agradecidos con el trabajo. No están acostumbrados a que alguien haga algo para sus máquinas ( fuera de los 4 o 5 coders habituales que tienen en la plataforma ) y cualquier aportación la agradecen enormemente.


Volver a “Commodore 16 - Plus 4”

¿Quién está conectado?

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