Turbo loader de SD2IEC en los C16, Plus4 y C116

Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 26 Sep 2019 12:02

Último mensaje de la página anterior:

BlackHole escribió:...
Un inciso, a raíz de un comentario que hiciste recientemente: los bloques de un disquete tienen 256 bytes, pero 254 son de datos y los otros 2 el puntero al siguiente bloque (un byte para la pista y otro para el sector). Así que si quieres calcular el tamaño de algo, debes dividir entre 254 y redondear hacia arriba.


Si , por eso opté por calcularlo aprox . con 255 y luego ir a esa dirección y buscando manualmente afinar la dirección final.

Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 26 Sep 2019 14:52

BlackHole escribió:...Además en el emulador xplus4.exe de VICE, no me funciona el browser, se queda colgado si intentas cargar algo. ...


El Turboloader hace como de JiffyDos por software, así que imagino que en el emulador necesitarás dejar la rom JiffyDos cargada en la unidad de disco para que todo funcione correctamente.
Yo lo he probado en el C116 real con un SD2IEC y funciona perfectamente. También hay que tener en cuenta que los emuladores de Plus4/c16 no están tan avanzados y pulidos como los de C64. Hay alguno más especializado como el YAPE.

Maniako64
Mensajes: 2
Registrado: 26 Sep 2019 14:04
Agradecimiento recibido: 2 veces

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

Mensajepor Maniako64 » 26 Sep 2019 17:31

Hola.
Soy Maniako (eso pone en el Nick) , el xapuzas de Kikems.
Además de todo eso de 254 bits por sector, hay que restarle 2 más al total ya que los 4 primeros bits del primer sector contienen la dirección del siguiente sector y los de dirección de carga en memoria.

Pero bueno, sigue siendo un mal método de cálculo por que el último sector puede estar casi vacío XD.

El programa de turbo carga que me pasarón, no funciona desde el VICE plus4. Se congela al empezar a leer , aun teniendo la emulación 1541 real activada.

Hay alguno que funcione correctamente en el emulador? .
Así lo hacemos compatible 100%.

Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 26 Sep 2019 20:46

Maniako64 escribió:Hola.
Soy Maniako (eso pone en el Nick) , el xapuzas de Kikems.
Además de todo eso de 254 bits por sector, hay que restarle 2 más al total ya que los 4 primeros bits del primer sector contienen la dirección del siguiente sector y los de dirección de carga en memoria.

Pero bueno, sigue siendo un mal método de cálculo por que el último sector puede estar casi vacío XD.

El programa de turbo carga que me pasarón, no funciona desde el VICE plus4. Se congela al empezar a leer , aun teniendo la emulación 1541 real activada.

Hay alguno que funcione correctamente en el emulador? .
Así lo hacemos compatible 100%.


Plus4emu y Yape parecen más trabajados y completos que el del Xplus4 del Vice, habría que probarlos.

BlackHole
Mensajes: 1201
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 13 veces
Agradecimiento recibido: 270 veces

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

Mensajepor BlackHole » 26 Sep 2019 23:30

kikems escribió:Opción B, cargar solo el SJLoader que es 1 Kb y ya con el turbo activo cargar los otros 10 bloques del FB16 y que se auto ejecute.
Bueno, después de echar un vistazo al desensamblado de la ROM del Plus/4 para ver cómo funciona ese equipo y al código fuente del SJL264 v0.3, he hecho que el turbo de SJL se ejecute y automaticamente busque en el disco un programa llamado "FB" y lo ejecute. Realmente no sé si esto te va a apañar lo que quieres hacer y/o va a suponer un ahorro de tiempo en el proceso. Pero bueno, al menos he pasado el rato. Como estoy programando a ciegas porque el turbo se cuelga en el emulador (ya probé incluso a apuntar hacia una ROM JiffyDOS en la 1541 sin éxito), me gustaría que me dijeras si te funciona.
Adjuntos
sjl264-patched.prg.gz
(990 Bytes) Descargado 7 veces

Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 27 Sep 2019 00:38

BlackHole escribió:
kikems escribió:Opción B, cargar solo el SJLoader que es 1 Kb y ya con el turbo activo cargar los otros 10 bloques del FB16 y que se auto ejecute.
Bueno, después de echar un vistazo al desensamblado de la ROM del Plus/4 para ver cómo funciona ese equipo y al código fuente del SJL264 v0.3, he hecho que el turbo de SJL se ejecute y automaticamente busque en el disco un programa llamado "FB" y lo ejecute. Realmente no sé si esto te va a apañar lo que quieres hacer y/o va a suponer un ahorro de tiempo en el proceso. Pero bueno, al menos he pasado el rato. Como estoy programando a ciegas porque el turbo se cuelga en el emulador (ya probé incluso a apuntar hacia una ROM JiffyDOS en la 1541 sin éxito), me gustaría que me dijeras si te funciona.


El SJL carga pero cuando va a buscar el FB desde disco el basic da un error de "?undef´d statement error in 2017", el loader termina de cargar y funciona, falla al intentar cargar el FB ya que si miro la ram no ha llegado a cargarlo.

BlackHole
Mensajes: 1201
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 13 veces
Agradecimiento recibido: 270 veces

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

Mensajepor BlackHole » 27 Sep 2019 01:43

Pregunta tonta... ¿el dispositivo SD2IEC se identifica como unidad 8? Es que lo tenía así forzado.

Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 27 Sep 2019 08:58

BlackHole escribió:Pregunta tonta... ¿el dispositivo SD2IEC se identifica como unidad 8? Es que lo tenía así forzado.

Si, desde el basic del plus4 puedes usar un load”fb”,8,1 como en el c64 pero también es común usar el comando dload”fb (cerrando o sin cerrar comillas) que tira automáticamente de la primera unidad de disco disponible.

De cara al ordenador las unidades sd2iec se comportan como una unidad de disco normal que no tiene ni ram , ni cpu, por tanto los turboloaders y rutinas q se apoyarán en enviar datos a la ram de la unidad y que usarán el procesador de la disquetera, no funcionan. Sería algo parecido a usar el vice sin activar la emulación completa de disquetera.
Para compensar esa deficiencia, las sd2iec interpretan los comandos jiffydos y los turboloaders basados en IRQ ( que son los que incorporan la mayoría de producciones actuales, para tener la máxima compatibilidad con todos los dispositivos posibles).

BlackHole
Mensajes: 1201
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 13 veces
Agradecimiento recibido: 270 veces

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

Mensajepor BlackHole » 27 Sep 2019 11:37

Lo decía porque he visto SD2IEC (en RetroParla exactamente) que por defecto están en la unidad 9 ó 10. El error de "Undefined Statement" parece que es una mala interpretación del comando RUN cuando se llama desde código máquina, en vez desde BASIC. Seguí las instrucciones del propio código fuente del CBM File Browser, pero parece que hay que inicializar otras cosas antes y no lo hice en mi parche de arriba. Mejor voy a escoger el último dispositivo usado en vez de forzar la unidad 8, así me curo en salud. El comando DIRECTORY y los comandos DLOAD/DSAVE también fuerzan la unidad 8 y sacan el error "Device not present" si no hay.

Sé como funcionan las unidades SD2IEC y las posibilidades dependen de su firmware interno. Estos chismes interpretan secuencias de bytes enviados supuestamente a la memoria interna de una unidad 1541 (que interceptan pero no ejecutan) para intentar identificar el turbo que el anfitrión (el ordenador) está intentando usar. Por cierto, muchos SD2IEC vienen con firmware 0.10.1/0.10.2/0.10.3 de hace 8 años en vez del final 1.0.0 del 21 de Enero de 2018 que incluye muchos más turbos.

Edito: He probado otra ROM JiffyDOS de 16 KB en el emulador xplus4 de VICE 3.2, asegurandome de elegir una 1541 en vez de la 1551 por defecto, y ahora sí funciona todo.

sjl-patched-v2.prg.gz
Turbo parcheado para autocargar CBM File Browser
(998 Bytes) Descargado 49 veces

test.d64.gz
Turbo + File Browser + Pack 4 juegos
(100.7 KiB) Descargado 13 veces

Contenido Oculto
Este foro requiere que este registrado e identificado para ver el contenido oculto.
Adjuntos
JiffyDOS_C1541.bin.gz
ROM JiffyDOS para disquetera 1541
(11.81 KiB) Descargado 11 veces

Maniako64
Mensajes: 2
Registrado: 26 Sep 2019 14:04
Agradecimiento recibido: 2 veces

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

Mensajepor Maniako64 » 27 Sep 2019 14:22

Fantástico. Menos trabajo para mí XD.
A decir verdad cuesta un poco averiguar algunas cosillas sobre el kernel de este máquina, si vienés del C=64 confunde un poco.

Pero es fantástico saltar a una rutina del kernel y que sin más, imprima todo el ASCII que venga debajo hasta encontrar un cero y desde allí, sigue ejecutando el siguiente mnemonico.

Hay mejora en tiempos de carga?
Alguien con cronómetro?

Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 27 Sep 2019 16:38

Cuando llegue a casa ,por la noche, lo pruebo de nuevo en la máquina real.
Me encantan estos hilos, donde se despliega vuestro potencial. Además de contribuir a crear cosas útiles para la comunidad, a los que deseamos aprender algo, nos resulta un campo de experimentación la mar de entretenido.
Como decía el otro día Blackhole.... ¿para qué vale?... para entretenernos y disfrutar un rato con estos viejos sistemas.

Avatar de Usuario
minter
Mensajes: 3130
Registrado: 22 Jul 2014 18:51
Agradecido : 3612 veces
Agradecimiento recibido: 1481 veces

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

Mensajepor minter » 27 Sep 2019 19:25


Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 27 Sep 2019 20:47



Bueno, en este caso intentarlo es fundamental, aprender en el proceso y entretenerse con ello, conseguirlo o no, casi es secundario. -thumbup

marcos64
Mensajes: 504
Registrado: 08 Nov 2018 10:31
Agradecido : 89 veces
Agradecimiento recibido: 186 veces

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

Mensajepor marcos64 » 27 Sep 2019 21:34

El mejor emulador de los TED es el Yape: http://yape.homeserver.hu/

Y creo que no deberiais poner la ROM del JiffyDOS porque aun se vende. Ademas, quien la quiera la puede encontrar buscando un ratito...
http://marcos64.orgfree.com/
Actualizacion 22/4/2018: Actualizada Load'N'Run numero 5 con nuevos TAPs y PRGs.

Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 28 Sep 2019 00:22

Ahora funciona perfectamente.

Inicialmente no me funcionaba ya que BlackHole hace una llamada al programa llamado FB y en la distribución del CBM Browser se suele usar un programa llamado FB que es un cargador de basic que funciona en todos los basic de Commodore y en función al Commodore que detecta ( C16/plus4, Vic20, C64, 64DTV o C128 ) luego hace cargar otro ejecutable específico para cada plataforma que en este caso se llama FB16. Yo tenía metidos en la raíz del disco el SJL v2 de blackhole, el FB de basic y luego el FB16 específico de la plataforma y al ejecutar el SJL parcheado de BlackHole, salen letritas en colores parpadeando en pantalla. He borrado el programa basic FB y he renombrado el FB16 a FB, como lo tenía Blackhole en su disco de test y todo ha funcionado perfectamente.
BlackHole ya sé que soy un pesado, ahora te pediría el mismo ejecutable V2 pero que llame al archivo FB16, así la gente no lo confundirá con el FB de basic, como me ha pasado a mí y así no hay que renombrar nada , simplemente extraer el FB16 de la distribución que corresponda del CBM Browser y listo.

Respecto a la pregunta que plantea Maniako de test de velocidad, he grabado video de ambas soluciones desde la acción de carga hasta que se muestra el listado del FileBrowser y he sacado los tiempos de carga.
El programa de Maniako es básicamente el SJL + el FB16 metidos en el mismo ejecutable y por tanto son aprox 15 bloques a cargar desde cero sin fastloader ni nada, que tarda unos 10 segundos.
La opción alternativa que habíamos planteado, es la que ha ejecutado BlackHole modificando el SJL que ocupaba unos 4 bloques , ejecutarlo y ya de ahí en adelante con el turbo activado , cargar automáticamente el FB16, de unos 10 bloques, y lo ejecuta. El tiempo de carga de ambas aplicaciones es de 3-4 segundos.
Como se puede ver la diferencia de tiempos básicamente radica en cargar los 10 bloques del FB16 con turbo y sin turbo.

Avatar de Usuario
kikems
Mensajes: 4170
Registrado: 30 May 2013 19:23
Agradecido : 1465 veces
Agradecimiento recibido: 1905 veces

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

Mensajepor kikems » 28 Sep 2019 00:27

Tanto a Maniako como a Blackhole os agradezco enormemente vuestra contribución y esfuerzo en este hilo. Ahora para los que estamos ansiosos por aprender me gustaría ver si podéis explicar, en la medida de lo posible, qué procedimiento habéis seguido , en qué direcciones de memoria habéis buscado, qué herramientas habéis usado para llegar a resolver cada una de ambas soluciones. Bajo mi punto de vista ese es el objetivo final de este hilo y la parte más interesante del mismo, ya que ver dichos procedimientos puede ayudar a otros a aprender algo y quizá en un futuro alguno pueda aplicar lo aprendido a alguna otra utilidad o programa.

BlackHole
Mensajes: 1201
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 13 veces
Agradecimiento recibido: 270 veces

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

Mensajepor BlackHole » 28 Sep 2019 03:32

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.


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