Página 1 de 1

Hacer un dot command de ESXDOS con ZX-basic

Publicado: 10 Sep 2016, 01:11
por Uto
Hola,

Hace poco presenté ZXUC, una utilidad para configurar varias de las opciones de ZX-Uno

https://github.com/Utodev/ZXCU

Dicha utilidad se distribuye como código fuente y en un .tap listo para ser cargado con ESXDOS (o por EAR si queréis).

Me gustaría poder compilarlo como un comando de ESXDOS, pero no lo consigo. He intentado indicarle al compilador de ZX Basic (http://www.boriel.com/wiki/en/index.php/ZXBasic) el "org" adecuado, y he probado varias opciones de compilación, pero no hay manera, cuando lo ejecuto bien se me cuelga, bien no hace nada de nada (me sale un OK y de vuelta al prompt).

¿Alguien ha hecho algo así alguna vez o se le ocurre que podría estar fallando?

Re: Hacer un dot command de ESXDOS con ZX-basic

Publicado: 10 Sep 2016, 12:35
por BlackHole
Uto escribió:Me gustaría poder compilarlo como un comando de ESXDOS, pero no lo consigo.
Yo lo que no consigo encontrar son las instrucciones para desarrollar en ese sistema.
¿Por qué la web http://www.esxdos.org es tan cutre? :? No hay nada salvo un ZIP en el que no hay info dentro.

No es que falte la información para desarrolladores, es que ni siquiera hay información para los usuarios.
Es que por no haber, no hay ni siquiera una página describiendo qué es, qué hace y para qué sirve eso del ESXDOS... paso.

Re: Hacer un dot command de ESXDOS con ZX-basic

Publicado: 10 Sep 2016, 12:40
por jltursan
Cierto, cuando Uto dice que esta indocumentado es que es eso, nothing de nothing.

¿Has probado a desensamblar el más sencillo de los que funcionan?

Salvo que los comandos oficiales estén "registrados" en algún lado del ESXDOS y no permita la ejecución de ninguno nuevo, no se me ocurre ninguna razón por la que si mimetizas la arquitectura de uno original no te vaya a funcionar.

Además de lo del registro, se me ocurren otras razones como por ejemplo que la pila debas definirla en una zona concreta, que tengas que inicializar la pila previamente con algún contenido concreto, que algún registro deba cargarse con algún valor concreto, en fin, unas cuantas cosas que analizando (probablemente) el comienzo del código se debería ver.

Otra cosa a probar podría ser apoderarse del código de ese sencillo desensamblado y parchearlo con tu "Hello world" al comienzo o donde corresponda para ver si así ya obedece. Lo ejecutarías como el dot-command original pero debería sacar tu mensaje...

No puede ser tan difícil desentrañar este misterio :popcorn:

Re: Hacer un dot command de ESXDOS con ZX-basic

Publicado: 10 Sep 2016, 13:31
por zup
A mi lo primero que se me ocurre es que quizás el BASIC está prohibido. ¿Estás seguro de que el divide pagina sobre RAM?

Lo que quiero decir es que probablemente el divide pagine el ESXDOS sobre ROM, machacando las rutinas del BASIC. Si tu programa hace alguna llamada a rutinas de la ROM puede que caiga sobre el código paginado por el divide y la líe.

En cualquier caso, velesoft parece ser el gurú de estas cosas. Intenta colgar el mensaje en WOS a ver si te responden.

Re: Hacer un dot command de ESXDOS con ZX-basic

Publicado: 11 Sep 2016, 10:49
por Uto
Hola,

Gracias por las respuestas pero creo que no me he explicado bien. Ya sé cómo hacer un dot command e incluso algunas funciones de esxdos en asm, al final es compilar a raw y ponerle org... 2000h si no recuerdo mal.

El problema lo tengo cuando trato de usar el compilador de ZX básic de Boriel, ojo no Básic Sinclair, que es con lo que está hecho ZXUC. Aunque le ponga ORG 2000h, el binario resultante no va. ZXUC no usa ninguna función de ESXDOS por lo que no es por eso, y aunque he visto que obviamente el compilador le mete sus librerías con lo que da un binario grande, no es más grande que los más grandes que trae ESXDOS de serie.

De hecho creo que incluso probé un Hello World en zxbasic y no va.

Escribo aquí por ver si hay quien tenga experiencia con zxbasic, porque pregunte en el foro de zxbasic y no obtuve respuesta :(

Re: Hacer un dot command de ESXDOS con ZX-basic

Publicado: 11 Sep 2016, 11:11
por zup
Supongo que la respuesta sería correr tu código en un depurador. Siguiendo mi teoría, yo probaría a correr ese código en ZX Spin, poniendo breakpoints condicionales que te indiquen cuándo PC salta a sitios no previstos.

Re: Hacer un dot command de ESXDOS con ZX-basic

Publicado: 11 Sep 2016, 16:53
por mcleod_ideafix
Para empezar, un dot command corre sin soporte de la ROM de Sinclair, así que cualquier cosita que quieras hacer y que implique llamar a una rutina de la ROM original no funciona, exceptuando la RST 10h, que esa sí que funciona. Para el resto, hay un RST, no recuerdo cuál, que te permite llamar indirectamente a una rutina de la ROM del Spectrum.

Así que para tu primera prueba en ZXB no imprimas nada. Haz algo más sencillo, tal como, por ejemplo, rellenar la pantalla de un color concreto. Es decir, algo que no implique usar rutinas de la ROM.

Comprueba también que en el ejecutable que obtienes, nada del runtime que lo acompaña llame a ROM. Si fuera el caso, sustituye ese runtime por otro que no use la ROM, o no uses ningún runtime en absoluto.

Re: Hacer un dot command de ESXDOS con ZX-basic

Publicado: 12 Sep 2016, 08:38
por na_th_an
Si mal no recuerdo, ZXB no usaba nada de la ROM, al menos para el PRINT. Debe estar más relacionado con el uso de la pila o la memoria de cadenas. Deberías hablar directamente con Boriel.

Re: Hacer un dot command de ESXDOS con ZX-basic

Publicado: 12 Sep 2016, 12:39
por Uto
Hmmm... puede ser algo de la ROM o quizá la memoria de cadenas o incluso la memoria de variables, las que sean. Entra dentro de lo posible que ZXBasic use la memoria contigua al código para zona de variables, y quizá esté cayendo ya en una zona no escribible.

Boriel supongo que ha visto mi pregunta en los foros de ZXBasic, pero voy a intentar contactarle directo a ver :-)