Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Avatar de Usuario
ferix
Mensajes: 1009
Registrado: 28 May 2012 21:01
Agradecimiento recibido: 8 veces

Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor ferix » 07 Jul 2012 11:23

Hola a todos.

Abrimos este hilo para tratar de impulsar un nuevo proyecto en RW.

Este proyecto surge de una discusión sobre si sería posible o no utilizar CP/M en un 48k (y por extensión un 128k que no sea un +2 o +3) y las posibles soluciones para conseguirlo: ¿ CP/M para Spectrum 48 K ?

Sí os habéis leído el hilo, comprobareis que para que esto sea posible, necesitamos un modo de "quitarnos de en medio" a la rom y sustituirla por ram.

Este requerimiento viene dado porque CP/M utiliza los 256 primeros bytes (de 0x0000 a 0x00ff, conocida como página 0) para colocar la tabla de saltos de las funciones de la BIOS (la parte de código específico de la máquina que hace el trabajo sucio para CP/M), y que en el caso del spectrum está ocupada con código rom no reemplazable.
También se situan ahí algunos buffers y estructuras básicas del sistema. Además, los programas de usuario suelen cargarse a partir de esa página (0x0100 en adelante), por tanto es imprescindible que al menos en esta zona de memoria esté presente algo de ram.

Y esto solo es posible mediante hardware, ya que el 48k no dispone de mapeo de memoria, y en el caso del 128k, aunque dispone de él, no está disponible en la zona de la rom.

Según han investigado nuestros foreros, en su día un producto comercial, el cual no me queda claro que saliese finalmente al mercado, utilizaba el truco de "engañar" a la cpu controlando la linea A15, lo que hacía que toda la ram quedase mapeada en la zona baja del espacio de direcciones.

Aunque ingenioso el método, no tengo claro que permitiese utilizar mucho más de 32k de memoria para todo el sistema (incluida la bios), y no es tampoco un sistema muy flexible. A esto hay que sumarle que aunque puedas correr CP/M, si no va unido a un sistema de almacenamiento no secuencial (como un sistema de disco) no es más que una curiosidad (vale ron, ya sabemos que puede funcionar con cassette, pero no es práctico ;) ).

Y es por esto, que me decidí a aportar una nueva solución.

Ahora, a lo interesante. El proyecto puede ser dividido en dos partes:

- La parte de hardware, necesaria para poder utilizar CP/M
- La parte software, el interfaz entre CP/M y el spectrum

La parte hardware (como hemos visto) se compone básicamente de un circuito que sea capaz de sustituir la rom por ram en el momento que nosotros veamos necesario, y en caso de ser posible, que proporcione también un método de almacenamiento no secuencial que permita explotar el sistema operativo.

La parte software está compuesta por otras tres:

- El sistema básico de control: es la parte que toma el control del spectrum y realiza las configuraciones básicas del sistema.
- La BIOS: Se encarga de ejecutar las operaciones necesarias sobre la máquina requeridas por el sistema operativo (algo así como los drivers de un s.o. actual).
- El sistema de carga: Realiza la carga del sistema operativo, y en nuestro caso también de la BIOS (paso previo).

Bueno, después de este ladrillo, paso a comentar el estado actual del proyecto.

Por el momento, nos encontramos en la fase de desarrollo del hardware, la cual, por suerte, está a punto de convertirse en algo tangible. Disponemos ya de un diseño de interface que nos soluciona por doble partida el problema de la ram y del almacenamiento mediante 16k de ram que sustituyen a la rom y un interface para tarjetas SD/MMC que pueden ser utilizadas como disco de sistema.
Además de esto, el interface dispone de una pequeña rom que nos permitirá cargar el sistema operativo u otras roms.

En cuanto estén disponibles los prototipos y estos funcionen correctamente, publicaremos toda la información necesaria para que la gente pueda montarse el suyo propio, y de paso echar una mano con el proyecto.

PD:
Todo el que esté interesado en ser "testeador" que lo diga, necesitamos gente que pruebe cosas.

Edito:
Como "side effect", el interface diseñado para ejecutar CP/M puede servir para más cosas, como cargar rom's parcheadas y/o cargar programas desde la SD/MMC.

Edito de nuevo:

Se me ha olvidado comentar que necesitamos también gente con experiencia en programación del z80, y si es además con el spectrum, mejor que mejor.
De todos modos, cualquiera que quiera o pueda aportar ideas o soluciones es bienvenido.

Avatar de Usuario
[UFO]
Mensajes: 610
Registrado: 02 Jun 2011 21:18

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor [UFO] » 07 Jul 2012 12:13

Ya estoy deseando ver el desarrollo de este gran proyecto. Mucho ánimo y suerte, compañeros!

tolaemon
Mensajes: 205
Registrado: 30 Jul 2011 21:09
Agradecido : 11 veces
Agradecimiento recibido: 3 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor tolaemon » 07 Jul 2012 12:49

Parece un gran proyecto! Felcicidades por el trabajo hecho hasta ahora y animos!

Avatar de Usuario
ron
Mensajes: 18440
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1608 veces
Agradecimiento recibido: 1337 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor ron » 07 Jul 2012 15:50

Enhorabuena por la iniciativa Ferix !!! Agradecido y mucho !!!

jojo073

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor jojo073 » 07 Jul 2012 17:56

Vamos a seguir este proyecto con interés... lamentablemente mis conocimientos en programación son muy escasos y están muy abandonados... pero tienes todo mi apoyo...

suerte, esperamos ver los resultados

dancresp
Mensajes: 5366
Registrado: 13 Nov 2010 02:08
Agradecido : 167 veces
Agradecimiento recibido: 296 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor dancresp » 08 Jul 2012 09:35

Hombre, el tema es interesante pero complejo.

El problema del SPECTRUM com el CP/M no se reduce a recolocar la ROM, ya que, por ejemplo, un CP/M decente usa 80 columnas y una memoria de pantalla de 2KB en modo carácter. Todo esto no existe en el SPECTRUM y mediante "ñapas" puedes dejarlo en 52 caracteres. Tipo OSBORNE-1, pero mucho software o no funcionara bien o no se verá bien.

Con todo, ¿no sería más fácil intentar adaptar la versión del +3?

Avatar de Usuario
ferix
Mensajes: 1009
Registrado: 28 May 2012 21:01
Agradecimiento recibido: 8 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor ferix » 08 Jul 2012 18:42

dancresp, esos problemas que comentas los tiene también el +3, y no tiene problema en ejecutar CP/M. Otra cosa es lo bonito que quede en pantalla...

Básicamente el CP/M para funcionar solo necesita una BIOS y un cargador.
Es decir, el CP/M puede ser el mismo que el del +3. Otra cosa sería aprovechar el cargador del +3 y su BIOS.

Probablemente se pueda hacer así, pero habría que eliminar todo el código del mapeo de memoria, y rezar para que no haga cosas raras con los bancos de memoria, pero obviamente es mejor que empezar de 0.
Luego está el tema del acceso a disco, que habría que cambiarlo/parchearlo también.

Por suerte disponemos de emuladores que nos permiten cargar el CP/M (no lo he probado, lo supongo) y realizar volcados de memoria, muy útiles para encontrar las rutinas a modificar.

Pero de momento, estamos con la parte del hard ;)

mcleod_ideafix
Mensajes: 925
Registrado: 13 Ene 2012 09:45

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor mcleod_ideafix » 08 Jul 2012 18:42

dancresp escribió:Con todo, ¿no sería más fácil intentar adaptar la versión del +3?


Yo voy más allá: creo que sería más fácil (y barato) usar un +2A ó +3 como sistema base, ya que:
- Ya incorpora un sistema para poner RAM en el espacio de ROM
- Tiene 128K
- Puede paginarse la RAM de forma que los 64K del espacio direccionable puedan usarse para almancenar programas y datos, y no haya ni un solo byte ocupando pantalla
- Tiene dos pantallas, así que puede hacerse como con el CP/M original del +3, que se solapan entre sí, de forma que tienes 80 columnas sin perder legibilidad.
- Puedes usar un DivIDE o el ZXMMC como soporte de almacenamiento, con lo que no hay que reinventar ningún periférico.

El único fallo que le veo a usar esta aproximación es que el CP/M que se implementara aquí no podría ser autobootable (bueno, si se usa el DivIDE podría ser casi-autobootable)

Pero imagino que esto sería desvirtuar por completo el espíritu del proyecto. Por otra parte, modificar el CP/M existente no lo veo factible por dos razones:
- Hacerle ingeniería inversa a un software de ese calibre tiene, a mi juicio, más trabajo que hacerlo de 0.
- El resultado de esa modificación no podría ser distribuido libremente porque seguiría estando licenciado por Locomotive Software, que no permite su distribución. Sólo se podría distribuir el parche a aplicar en el soft original.
Cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista.

Avatar de Usuario
ferix
Mensajes: 1009
Registrado: 28 May 2012 21:01
Agradecimiento recibido: 8 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor ferix » 08 Jul 2012 19:28

Bueno, vamos por partes.

El +3 ya dispone de un CP/M. Así que no tiene sentido reinventar la rueda. El objetivo de este proyecto son el 48k y si es posible el 128k original.

Lo que mencionas sobre el +3 ya lo había tenido en cuenta. De hecho, lo comenté en el anterior hilo. A pesar de eso, hay otras implementeaciones con el mismo problema de pantalla y corren el CP/M perfectamente (el PCW, por ejemplo).

Y luego, el interfaz si es autobootable. De hecho dispone de una rom para poder arrancar el sistema, y como el diseño final incorpora un lector de tarjetas SD/MMC, puede cargarse cualquier cosa desde una tarjeta SD/MMC.

Es más, la idea del interface no se limita solo al CP/M, sino a dotar también al 48k de un medio de almacenamiento externo "barato".

Avatar de Usuario
ferix
Mensajes: 1009
Registrado: 28 May 2012 21:01
Agradecimiento recibido: 8 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor ferix » 09 Jul 2012 15:31

Bueno, ahora una preguntilla para los que tienen más experiencia en el diseño de hard para spectrum (mcleod_ideafix, ¿estas ahi? :P )

Necesito un par de puertos de I/O para el lector de tarjetas, y tengo claro que puertos no "chafar" (básicamente, los de la ULA y los del teclado) peeeero... tampoco quiero utilizar un puerto que se utilice para otra cosa (interface kempston, por ejemplo).

¿Podeis sugerime un puerto "seguro"?, y ¿que tipo de decodificación me recomendais?¿parcial solo de los 8 primeros bits de dirección, o completa de los 16?

Eso es todo... por ahora. :P

mcleod_ideafix
Mensajes: 925
Registrado: 13 Ene 2012 09:45

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor mcleod_ideafix » 09 Jul 2012 16:40

Aquí tienes una lista de puertos compilada por Velesoft:
http://velesoft.speccy.cz/zxporty-cz.htm

Los dos últimos proyectos de hardware "serios" (Spectranet y ULA+) han adoptado un acuerdo de uso de puertos libres. Es más o menos el siguiente:

Se usan puertos de 16 bits, de la forma xx3B . Este puerto se ha elegido porque sus 8 bits menos significativos sólamente colisionan con la ZX Printer, y hay un hack muy sencillo para evitar este último caso.

Ahora, para asignar qué valores se ponen en la parte alta del bus, cada "fabricante" ha reservado sus propios valores:
- Spectranet: reserva los valores 02 y 03. Es decir, fija el bit 9 a 1 y usa el bit 8 para seleccionar dos posibles puertos.
- ULAPlus: reserva los valores BF y FF. Es decir, fija el bit 15 a 1, y usa el bit 14 para seleccionar dos posibles puertos.

Tu implementación podría, por ejemplo, usar un valor tal que haga que tanto el bit 9 como el 15 sean 0 (así no colisiona con ninguno de estos dos aparatejos), y luego usar otro bit para elegir un puerto u otro.

Por ejemplo... el puerto 203B y el puerto 303B. En ambos, el bit que se fija a 1 es el bit 13. El bit 12 vale 1 ó 0 para elegir un puerto u otro de los dos disponibles.

No encuentro ahora mismo el documento que define este "estándar", pero vamos, los tiros van por ahí.
Cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista.

Avatar de Usuario
ferix
Mensajes: 1009
Registrado: 28 May 2012 21:01
Agradecimiento recibido: 8 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor ferix » 09 Jul 2012 16:46

Hmm... interesante... muchas gracias :D

Avatar de Usuario
ferix
Mensajes: 1009
Registrado: 28 May 2012 21:01
Agradecimiento recibido: 8 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor ferix » 10 Jul 2012 16:02

Bueno, encontré el documento al que hacía referencia mcleod_ideafix, así que lo pego aquí por si alguien más está interesado:

ZXI interface standard

Y continuamos para bingo...

mcleod_ideafix
Mensajes: 925
Registrado: 13 Ene 2012 09:45

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor mcleod_ideafix » 10 Jul 2012 22:58

Eeeeeeeeeeeeeeese era, sí señor :) ¡Gracias!
Cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista.

Avatar de Usuario
FloppySoftware
Mensajes: 220
Registrado: 21 Oct 2016 15:10
Agradecido : 35 veces
Agradecimiento recibido: 39 veces
Contactar:

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor FloppySoftware » 10 Jul 2012 23:45

Hola a tod@s,

Me acabo de presentar, así que éste es uno de mis primeros mensajes.

Me gusta mucho que se hable tanto de CP/M por aquí, pues soy un fan desde hace años de dicho sistema operativo.

En cuanto al proyecto que os traéis entre manos, tan sólo deciros que CP/M espera que la RAM sea contígua, con una posible salvedad respecto al BIOS:

ZERO PAGE - ha de comenzar siempre en 0000H
TPA - ha de comenzar siempre en 0100H
BDOS - el corazón de CP/M
BIOS - adaptado a la máquina en particular.

Es en la BIOS donde se puede intercalar cualquier ROM,
memoria de pantalla, etc., pero en el resto de
secciones es imposible.

Esto es válido para CP/M 1.x o CP/M 2.x, pues CP/M 3.x es otra historia.

CP/M 3 (Plus) puede funcionar en modo no bancado (al estilo de las versiones anteriores), o en modo bancado (con bancos de memoria como en el PCW, por ejemplo).

En modo bancado la cosa cambia bastante, pero a costa de mayor complejidad, se logra una TPA bastante mayor, necesitando de más RAM, obviamente.

Os recomiendo:

http://www.seasip.demon.co.uk/ - toneladas de información técnica acerca de CP/M.

http://www.cpm.z80.de/ - código fuente de varias versiones de CP/M.

Saludos.
Developing software since 1987 - http://www.floppysoftware.es

Avatar de Usuario
ferix
Mensajes: 1009
Registrado: 28 May 2012 21:01
Agradecimiento recibido: 8 veces

Re: Nuevo proyecto RetroWiki: CP/M en ZX Spectrum 48k/128k

Mensajepor ferix » 11 Jul 2012 11:03

Bienvenido al proyecto, FloppySoftware.

La verdad es que si es cierto que el TPA tiene que estár obligatoriamente a partir de 0x0100, se nos complica el asunto.

El problema es que el buffer de pantalla está en 0x4000, con lo cual nos cae justo en el medio de la memoria (una vez reemplazada la rom).

Estoy tratando de buscar una solución, pero de momento lo veo complicado. Continuaré investigando.

Ahh, y gracias por los links, aunque ya están más que controlados ;)


Volver a “Desarrollos y Proyectos RW”

¿Quién está conectado?

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