Buenas, como estoy como Gil con la burra con el EP128 me propuse desarrollar un programa para resolver sudokus, de cualquier dificultad. Lo de los sudokus siempre me ha molado y decidí tirar por ahí.
Empecé a programarlo con el IS-BASIC y lo cierto es que me impresionó como BASIC, estructurado y potente, pero es lento como el caballo del malo. Cuando el código ya fue cogiendo tamaño empecé a echar de menos un editor: lo de editar a pelo las lineas y no poder cortar y pegar bloques completos de código (entiendo que esto no se puede hacer en IS-BASIC) terminó pudiendo conmigo.
Decidí empezar de cero en otro lenguaje y miré el Hisoft Pascal, pero nuevamente lo de editar era una pesadilla. Entonces descubrí Turbo Pascal 3 bajo ISDOS CP/M 80 y ahí que me fui, un editor útil pero evidentemente limitado acorde a los tiempos en los que se desarrolló. La experiencia ha sido fantástica, una herramienta muy poderosa para la época.
Llegados a este punto ya no se puede decir que sea un desarrollo sobre EP, si no sobre CP/M 80 pero nuestro adorado Enterprise lo corre, con lo que me vale.
Tras todo el proceso no tengo claro cuales son las limitaciones de memoria del ISDOS y si se puede usar toda la memoria disponible en el EP para desarrollos. Tiendo a pensar que no, que CP/M 80 no puede por diseño usar esos teóricos 4 Mb máximos de EP.
Voy a adjuntar el código en un empaquetado por si alguien le quiere echar un ojo y también el ejecutable CP/M 80 por si alguien lo quiere probar en otra máquina sin compilar.
Esta es la relación de ficheros del empaquetado:
SUDOKU.CPM -> Evidentemente el ejecutable compilado. Debe ser renombrado a SUDOKU.COM. Parece que el servidor me impedía subir un ZIP con un .COM dentro.
SUDOKU.PAS -> el fuente principal que incluye los otros
UTILS.PAS -> rutinas auxiliares que utilizan otros fuentes del programa
CHECK.PAS -> rutinas que se encargan de identificar las situaciones que permiten eliminar candidatos en las celdas sin resolver
REMOVE.PAS -> rutinas que se emplean en ir eliminando el número de candidatos por celda sin resolver
BOARD.TXT -> fichero desde el que el programa lee el sudoku a resolver. Se emplean 0's para las celdas vacías a resolver
Espero que os guste para quien tenga curiosidad. Si alguien encuentra un error o un sudoku que no se llega a resolver, estaré encantado de revisar el código.
SUDOKU
Re: SUDOKU
Siendo para CP/M, ¿podría llegar a correr en otro sistema con CP/M? Es más, tengo entendido que MSX-DOS2 es compatible con CP/M. He intentado ejecutar el compilado en un emulador de MSX con 2MB de mapped ram, pero me da error de que no hay suficiente memoria.
Re: SUDOKU
No tengo mucha experiencia sobre CP/M pero creo que sí, que cualquier COM generado para CP/M 80 debería funcionar en CP/M 80 en otro HW que lo soporte.
Que se pronuncie alguien con experiencia al respecto. Es evidente que no puede ser un problema de memoria insuficiente.
Que se pronuncie alguien con experiencia al respecto. Es evidente que no puede ser un problema de memoria insuficiente.
Re: SUDOKU
Buenas, alguien sabe cómo se redirecciona la salida estándar en CP/M? Para volcar lo que se muestra en pantalla a un fichero, como se suele hacer en otros sistemas tipo ... DIR > list.txt
Puede que tenga que ver con el comando MODE y los dispositicos AUX: LST: PUN: etc, pero no lo he conseguido
Puede que tenga que ver con el comando MODE y los dispositicos AUX: LST: PUN: etc, pero no lo he conseguido
Re: SUDOKU
En esta página hablan mucho de pascal en MSX y hay descargas de compiladorescarmeloco escribió:Siendo para CP/M, ¿podría llegar a correr en otro sistema con CP/M? Es más, tengo entendido que MSX-DOS2 es compatible con CP/M. He intentado ejecutar el compilado en un emulador de MSX con 2MB de mapped ram, pero me da error de que no hay suficiente memoria.
http://pascal.hansotten.com/delphi/turbo-pascal-on-cpm-msx-dos-and-ms-dos/
Re: SUDOKU
Añado la versión BASIC del programa. Eso sí, la ejecución es lentísima, puede tardar casi una hora en resolver un sudoku complejo lo que la versión compilada se ventila en minutos.