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

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

Mensajepor ferix » 11 Jul 2012 11:03

Último mensaje de la página anterior:

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 ;)

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 12:12

Bueno, investigando un poco, creo que he dado con una posible solución.

Efectivamente, el TPA empieza a partir de 0x0100, con lo cual el buffer de pantalla nos cogería en medio, pero resulta que el primer programa que carga el CP/M es el CCP (CONSOLE COMMAND PROCESSOR) y que siempre está en memoria.

El resto de programas se cargan siempre a partir del CCP, que ocupa unos pocos kilobytes (3,1K en la versión 3 de CP/M).
Ahora viene el truco. Si "inflamos" el CCP hasta que llegue a la zona de 22k (16k iniciales + 6k de buffer de video), los subsiguientes programas se cargarán a partir de la zona "chunga". Como solo hemos inflado el programa, este espacio seguirá vacío y podrá seguir utilizándose el buffer de pantalla sin problema.

El problema de está en que ahora tenemos un montón de memoria desperdiciada (15ks menos lo que ocupe el CCP), pero no todo es malo, ya que nos sirve para solucionar otro problema.

Como hemos visto, los programas de CP/M esperan un display de 80 columnas, y se lo vamos a dar ;)
Mi idea es crear un buffer de pantalla de 80 columnas (con caracteres de 4x8, como en el modo de 64 columnas) dónde el CP/M (a través de la BIOS) escribe lo que le da la gana, y luego, mediante una rutina de interrupción, copiamos una ventana seleccionable de ese buffer en el buffer de pantalla. Este buffer ocuparía sobre 8 kilobytes (si descartamos atributos).
Por supuesto, hay que darle al usuario una forma de seleccionar que parte de esa ventana visualizar, por ejemplo mediante una combinación de teclas.

El resto de memoría, si es que sobra algo, podría utilizarse para buffer de disco o cualquier otra cosa.

¿Que os parece?

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

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

Mensajepor mcleod_ideafix » 11 Jul 2012 14:13

ferix escribió:Bueno, investigando un poco, creo que he dado con una posible solución.

Efectivamente, el TPA empieza a partir de 0x0100, con lo cual el buffer de pantalla nos cogería en medio, pero resulta que el primer programa que carga el CP/M es el CCP (CONSOLE COMMAND PROCESSOR) y que siempre está en memoria.

El resto de programas se cargan siempre a partir del CCP...


Pues... corregidme si me equivoco, pero creo que todos los programas para CP/M deben comenzar en 0x0100. Por otra parte, el CCP... ¿siempre está en memoria? Es que de CP/M no controlo casi nada, pero de MS DOS sí que recuerdo cosas, y como sabeis, MS DOS (sobre todo la 1.0) es una evolución del CP/M. En concreto:
- Los .COM del MS DOS son como los .COM del CP/M, y en ambos casos, el programa comienza en 0x0100
- El procesador de comandos (el COMMAND.COM del MS DOS) tiene una parte residente en memoria y otra "transient" que se ubica en lo alto del todo de la memoria. Es decir, no está el 100% siempre en memoria.
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 » 11 Jul 2012 15:34

mcleod_ideafix escribió:Pues... corregidme si me equivoco, pero creo que todos los programas para CP/M deben comenzar en 0x0100. Por otra parte, el CCP... ¿siempre está en memoria? Es que de CP/M no controlo casi nada, pero de MS DOS sí que recuerdo cosas, y como sabeis, MS DOS (sobre todo la 1.0) es una evolución del CP/M. En concreto:
- Los .COM del MS DOS son como los .COM del CP/M, y en ambos casos, el programa comienza en 0x0100
- El procesador de comandos (el COMMAND.COM del MS DOS) tiene una parte residente en memoria y otra "transient" que se ubica en lo alto del todo de la memoria. Es decir, no está el 100% siempre en memoria.


He estado mirando varios manuales de CP/M, y he sacado esa conclusión, pero perfectamente puedo equivocarme.

Y sí, el CCP es como el COMMAND.COM. Tiene una parte fija o residente y otra que carga cada vez que le devuelven el control.

De todas formas, seguiré investigando, porque como no consigamos "quitar" el buffer de pantalla del medio, la mejor solución va a ser la de "trapichear" con la linea A15...

Aún así, no entiendo muy bien como quedaría la cosa, porque invirtiendo la linea A15 la rom quedaría justo a la mitad, y después un cacho de ram... Suponiendo que la BIOS se coloque en esa nueva zona alta, nos quedan "solo" 32K para programas...

En caso de tener que optar por esta opción, estaría mejor conseguir ese por de CP/M y analizarlo para poder replicar el hardware, que se me antoja más sencillo.

Venga, venga, opiniones ;)

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 » 11 Jul 2012 16:01

Hola,

En CP/M 1 y 2, el CCP carga justo debajo del BDOS,
es decir, en memoria "alta".

Si el programa de usuario no ha cargado encima del CCP,
con un RET podemos volver al mismo, pero jamás se tiene que dar por hecho.

Lo normal es que tras cada finalización de programa, el CCP haya de recargarse.

En CP/M 3, el CCP carga en 0100H, y siempre se recarga tras cada finalización de programa.

En el PCW por ejemplo, el CCP está en un banco de memoria, y se recarga desde allí para no tener que estar accediendo al disco contínuamente.

El CCP no tiene ninguna parte residente. Las únicas partes residentes de CP/M son el BDOS y el BIOS. Y en CP/M 1 y 2, todo el CP/M (incluidos BDOS y BIOS) se cargan de nuevo tras un arranque en caliente (WARMBOOT - JP 0000H, o función 0 del BDOS).

Todos los programas COM cargan en 0100H.

Los únicos programas reubicables son los que tienen formato PRL, pero se suelen utilizar únicamente para extensiones al sistema en CP/M 3. En CP/Ms anteriores no es posible utilizarlos si no es a través de utilidades externas. Se diseñaron inicialmente para MP/M, la versión multitarea y multiusuario de CP/M.

Por cierto, el CP/M no requiere una pantalla de ninguna resolución en especial. De hecho, no requiere ni pantalla, con una impresora de líneas o teletipo, basta.

Tan sólo CP/M 3 lleva la pista de las filas y columnas de pantalla, y sólo para edición del CCP y poca cosa más.

Precisamente, una de las pegas de CP/M es que no tiene prácticamente ningún control sobre la pantalla, lo que dificulta la portabilidad de los programas que la utilicen de forma distinta a una impresora de líneas (posicionamiento del cursor, etc.).


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 16:05

Vaya, vaya... pues se me ha jodido el invento... :P (perdón por la expresión)...

Ok, entonces toca mirar en la fuente original.

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 » 11 Jul 2012 16:19

Hola de nuevo,

También se ha de mirar el uso que haga el ordenador de las interrupciones.

Algunos programas estándar de CP/M han sido parcheados (DDT, SID) pues chocan en el uso de posiciones de la página cero.

Esto es un problema menor, pero los ordenadores que hacen uso de interrupciones no enmascarables, chocan con el FCB almacenado en la página cero, y prácticamente todos los programas utilizan dicho FCB.

No tengo ni idea de cómo funciona el Spectrum en ese sentido, lo digo por si es de utilidad.

Por otra parte, hay sistemas en los que se ha implementado
el CP/M cambiando la ubicación de partes del mismo por problemas como el que comentas de la ROM, memoria de pantalla, etc.

El problema con dichos CP/M adaptados, es que precisan
de software especialmente desarrollado para ellos, puesto
que las versiones estándard (incluidas las utilidades
de CP/M como PIP, etc.) no pueden funcionar en ellos
por lo anteriormente comentado.
Developing software since 1987 - http://www.floppysoftware.es

Avatar de Usuario
ron
Mensajes: 18467
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1641 veces
Agradecimiento recibido: 1364 veces

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

Mensajepor ron » 11 Jul 2012 19:18

NO me ha dado tiempo a repasar si hemos citado ya esta web:

How do I write my own version of CP/M for my own hardware or computer or emulator?

The CP/M OS consists of an operating system with a BIOS section; utility programs; a booting program; a FORMAT program. The CP/M operating system and utilities have no hardware dependencies other than the processor. CP/M will run on any system for which a BIOS is written and with the proper processor. The FORMAT, BIOS and BOOT MUST be written specifically to support specific hardware.


entonces...

People new to CP/M in the 21st century often expect to find a computer and an operating environment something like Linux or Windows: everything ready to go, hard drives, networking, graphical windows, and so forth. But CP/M was written in the mid-1970's before most everything like that was available on inexpensive computers. CP/M assumes some serial or parallel ports, a printer, a text (not graphical) serial terminal, and a floppy disk drive. That's it. It assumes you have to install it onto a brand new computer by writing the "basic I/O system" or BIOS yourself - and it gives you the tools to do so. These tools are by today's standards very minimal: a text editor, an assembler, a copy program, a debugger. But they were sufficient, and they, and the manuals, were included with the OS. That system and methodology allowed CP/M to dominate computing in the mid 1970's and for years afterward. Later CP/M versions had more features and a few more tools, but the principle of "here's what you need to put this OS on your own computer for the first time" persisted.


cpm_bootstrap.rar

En el documento adjunto se incluye el documento en RTF se muestran los detalles de como generar una versión de CP/M para un determinado sistema.

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 19:28

Gracias ron, esta no la había visto todavía, aunque tenia claro como portar el CP/M...

Por ahora el problema está en que no podemos usar toda la ram como nosotros queremos... salvo que además de la ROM, mapeemos también parte de la ram... estoy trabajando en ello ;)

Ahh, por cierto. ¿Alguien me puede decir si la ULA activa MREQ cuando accede a la ram?. Me da que no, y sería una forma de detectar los ciclos de la ULA, para poder trastear con la ram...

P.D.:
Por si hay algún interesado, estoy viendo también la posibilidad de portar CP/M a una máquina 68000

Avatar de Usuario
ron
Mensajes: 18467
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1641 veces
Agradecimiento recibido: 1364 veces

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

Mensajepor ron » 11 Jul 2012 20:01

ferix escribió:P.D.:
Por si hay algún interesado, estoy viendo también la posibilidad de portar CP/M a una máquina 68000


Si quieres un CP/M68K, el mismo TOS del Atari ST es CP/M68K. jejejeje de hecho finalmente conseguí el programa de consola para usar el TOS con comandos.

Unas reseñas históricas por aquí.


Y lo del CP/M68K, por aquí suena. Y aquí también.

http://www.thebattles.net/sage/


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 20:07

Bueno... mi idea en realidad está enfocada al Amiga ;)


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

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

Mensajepor mcleod_ideafix » 11 Jul 2012 20:28

ferix escribió:Ahh, por cierto. ¿Alguien me puede decir si la ULA activa MREQ cuando accede a la ram?. Me da que no, y sería una forma de detectar los ciclos de la ULA, para poder trastear con la ram...


Quien activa MREQ es el procesador. La ULA recibe MREQ como señal de entrada, para saber cuándo se está haciendo un acceso a memoria contenida. Los "ciclos de la ULA" si por tales te estás refiriendo a cuándo la ULA accede a la memoria para formar la imagen de pantalla, usan señales que no están disponibles en el bus trasero.
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 » 11 Jul 2012 20:31

mcleod_ideafix escribió:Quien activa MREQ es el procesador. La ULA recibe MREQ como señal de entrada, para saber cuándo se está haciendo un acceso a memoria contenida. Los "ciclos de la ULA" si por tales te estás refiriendo a cuándo la ULA accede a la memoria para formar la imagen de pantalla, usan señales que no están disponibles en el bus trasero.


Ya, por eso mismo preguntaba. Si se detecta un acceso a memoria y no se activa MREQ, quiere decir que es la ULA la que accede a ella... o así lo entiendo yo.

Al final va a ser que si le meto una sram de 32k y opción a páginar la ram "contenida"... pero estoy viendo como.

Avatar de Usuario
ron
Mensajes: 18467
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1641 veces
Agradecimiento recibido: 1364 veces

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

Mensajepor ron » 11 Jul 2012 21:17

ferix escribió:Bueno... mi idea en realidad está enfocada al Amiga ;)


La EmuTOS que han montado sobre Amiga, aunque aun le queda mucho que pulir ya es una alternativa a tener en cuenta.

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 21:48

Si, pero no es un port nativo... :P

Avatar de Usuario
ron
Mensajes: 18467
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1641 veces
Agradecimiento recibido: 1364 veces

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

Mensajepor ron » 12 Jul 2012 00:55

ferix escribió:Si, pero no es un port nativo... :P

ahí me has dao, xD !nazox

Lo raro es que no exista nada, nativo claro !!! :) !haha

Avatar de Usuario
VooD
Mensajes: 931
Registrado: 11 Abr 2011 22:19
Ubicación: Málaga
Agradecido : 12 veces
Agradecimiento recibido: 54 veces

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

Mensajepor VooD » 12 Jul 2012 01:56

ron escribió:Si quieres un CP/M68K, el mismo TOS del Atari ST es CP/M68K. jejejeje de hecho finalmente conseguí el programa de consola para usar el TOS con comandos.

¿Seguro? Juraría haber leído que al principio lo estaban utilizando, pero que luego decidieron usar otra cosa.
Yo también tenía por ahí una shell para Atari ST, pero para mí que estaba implementada desde 0, además creo que jamás pude probar ningún programa en modo texto con ella :(

Mmm, acabo de mirar en la Wikipedia inglesa y dicen que al final hicieron un OS nuevo (supongo que algo de cp/m aprovecharían), con soporte para subdirectorios y llamadas: GEMDOS.

Aunque lo que me ha dejado con el culo torcío ha sido esto:

Idris

No tenía ni la más mínima idea de que algo así existiera para Atari ST desde tan temprano.


Volver a “Desarrollos y Proyectos RW”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados