Tras una temporada investigando aquí y allá, se me ha hecho muy cuesta arriba documentar toda la parte necesaria. En primer lugar hay que explicar que Atari presentó en el CES de 1985 sus prototipos de Atari ST que en ese momento ejecutaban CP/M68K puro y duro.
Si alguien tiene el diskette o las imágenes de disco con el CP/M68K para ST me haría un gran favor, ya os digo que si las hay y rulaban por ahí, pero les perdí la pista. Es posible que viendo otros OS pueda terminar de entender porque no me termina de funcionar. Os cuento lo que trae ese diskette, que seguramente estará preservado en la colección de algún aficionado a los ST, ya aparecerá.... y si lo conseguimos antes, pues hale, bienvenido todo.
El diskette que comento tiene el CP/M68K, un interprete de BASIC, los binarios que vienen con el CP/M, STAT, PIP y cuatro cosas más, con lo que tampoco se podría hacer mucho sin tener otros programas para ejecutar, pero contando con el BASIC ya era algo, ¿ si ?.
Tras estudiar las estructuras de los fuentes de CP/M68K y del Atari Development Kit ( basado en el compilador Alcyon ) creo que tenemos los ingredientes necesarios para hacer un intento. Las partes fundamentales del Alcyon
Atari se dio cuenta que si quería competir con IBM y Apple no podía lanzar una máquina con una versión de CP/M, aunque este fuera para el Motorola 68000, ya que su propio nombre sonaba a obsoleto y viejo, a pasado. Por eso mismo tomaron la base del CP/M68K y reescribieron todo lo necesario para tener lo que conocemos como TOS ( The Operating System )... si te interesa el asunto pues puedes si gustas continuar leyendo y ver si de alguna manera alguien puede contribuir con detalles que seguramente se me están pasando o no veo. La ayuda va a ser siempre muy agradecida.
Todas las necesidades de CP/M68K son un conjunto de rutinas dependientes de la BIOS de la máquina que interactúan con el hardware. El antiguo compilador Alcyon C del sistema de desarrollo Atari produce código de objeto compatible con CP/M-68k, por lo que es posible realizar un desarrollo cruzado en TOS. Si, sobre el propio ST y para ello sirve el ZIP que he puesto más abajo, para usar como un HD GEMDOS.
Se puede empezar creando rutinas de BIOS que simplemente hagan llamadas a la XBIOS del ST, no parece difícil, pero definitivamente si parece tedioso. Quizá sea mejor escribir una BIOS nueva para el ST partiendo de las que ya tenemos de ejemplo.
Las herramientas
Código: Seleccionar todo
AR68 Creates and modifies object module libraries
AS68 Processes assembly language source modules to create relocatable object module library files
DUMP Displays files in hexadecimal and ASCII notation
LINK68 A linker that combines assembled or compiled object modules with other modules from a runtime library
LO68 Another linker
NM68 Prints the symbol table of an object or command file
RELOC Converts relocatable object modules from one format to another
SENDC68 Converts a command file to the Motorola S-record format
SID-68K Tests and debugs programs
SIZE68 Displays the size of each program segment within one or more command files
XREF Creates a table of the symbols defined and referenced by object files
Todo es una cuestión de BIOS.
La BIOS es la parte del CP/M que garantiza la independencia del sistema operativo del hardware. Por ello las extensiones van a ser necesarias en la BIOS siempre que el hardware de sistema se modifique fundamentalmente. De momento no tenemos una BIOS para CP/M68K que nos funcione en un ST como tal, vamos a tener que reescribirla o adaptar las que ya tenemos, puesto que en Atari hicieron ciertas modificaciones a lo que se conoce tradicionalmente como CP/M68K, lo que pasa que son mínimas pero están ahí.
Los TRAPs estándar del CP/M68K
Código: Seleccionar todo
TRAP &A000 - MacOS calls
TRAP &F000 - CoPro calls
TRAP 0 - Unix calls OS/9 calls
TRAP 1 - Indirect Unix calls Atari ST GEMDOS BDOS
TRAP 2 - CP/M BDOS calls
TRAP 3 - CP/M BIOS calls
TRAP 4
TRAP 5
TRAP 6
TRAP 7
TRAP 8
TRAP 9
TRAP 10
TRAP 11
TRAP 12
TRAP 13 - Atari ST BIOS OS/9 C I/O
TRAP 14 - Atari ST XBIOS
TRAP 15 - OS/9 Floating point
-------+----------------------------------------------------------------+-----
########Trap Instruction Vectors (Trap #n = Vector number + 32 + n) ######
-------+----------------------------------------------------------------+-----
$000080|Trap #0 |SD
$000084|Trap #1 (GemDOS) |SD
$000088|Trap #2 (AES/VDI) |SD
$00008C|Trap #3 |SD
$000090|Trap #4 |SD
$000094|Trap #5 |SD
$000098|Trap #6 |SD
$00009C|Trap #7 |SD
$0000A0|Trap #8 |SD
$0000A4|Trap #9 |SD
$0000A8|Trap #10 |SD
$0000AC|Trap #11 |SD
$0000B0|Trap #12 |
$0000B4|Trap #13 (BIOS) |SD
$0000B8|Trap #14 (XBIOS) |SD
-------+----------------------------------------------------------------+-----
FUNCIONES DE GEMDOS, BIOS Y XBIOS y de como funciona el Atari ST
El sistema operativo (TOS) tiene muchas funciones convenientes construidas, listo para ser utilizado por los programadores. Estos pueden ser aproximadamente divididos en los que pertenecen a GEMDOS, BIOS y XBIOS.
Las llamadas GEMDOS son invocadas por el comando mnemónico TRAP # 1. Entonces, el sistema operativo saltará a través del vector GEMDOS en la dirección $ 84
$ 01 CONIN
Esta función se usa para obtener una tecla pulsada. CONSOLE IN
MOVE.W # 1, - (SP)
TRAP # 1
ADDQ.L # 2, SP
Las llamadas a la BIOS son invocadas por el comando mnemónico TRAP # 13. Entonces, el sistema operativo saltará a través del vector BIOS en la dirección $ B4.
RWABS
Esta es la función universal para leer y escribir sectores de y desde al disco duro y al disquete. Esta es también el núcleo de la rutina detrás de las llamadas XBIOS floprd y flopwr. La dirección de esta rutina se encuentra en la variable del sistema hdv_rw
XBIOS
XBIOS ofrece funciones más cómodas para ser utilizadas por el programador. Estas llamadas son invocadas por el comando mnemotécnico TRAP. # 14, en cuyo momento el sistema operativo saltará a través del Vector de XBIOS ubicado en la dirección $ B8
http://www.bighole.nl/pub/mirror/homepa ... _traps.htm
http://deunstg.free.fr/sct1/hardware.htm
Por tanto vamos a nombrar desde ya el posible fichero resultante de BIOS para el Atari ST como STBIOS.S, de esta forma no lo confundimos con otras BIOS que existen y que seguramente tengamos que revisar para poder armar una nueva que nos funcione en el ST.
No hay problema con el tema del acceso a los ficheros, desde ST con Hatari se puede hacer todo sobre un directorio que ejerza de HD. Incluiré un ZIP con todo lo básico y listo para que todos puedan probar y hacer lo que quieran.
Sabemos que la dirección de arranque de la TOS en ROM es $E00000, pero desde disco se puede arrancar desde cualquer dirección / sitio.
$E00000 Start of ROM OS (for version 1.4 and above)
$FA0000 Start of cartridge memory mapped ROM
$FC0000 Start of ROM OS (for versions below 1.4)
En el ST, una llamada BIOS se implementa como una instrucción TRAP en lenguaje de máquina 68000. Todos los parámetros necesarios, incluido el número de llamada del BIOS, se pasan a la pila.
Para la BIOS y su ensamblaje vamos a necesitar disponer de los siguientes ficheros.
STBIOS.S {aun no existe y es el que tendremos que escribir }, CPMLIB y CPM.REL
EDITRDK.68K
AS68.68K y AS68SYMB.DAT
LO68.68K, SIZE68.68K y RELOC.68K
Claro, en CP/M68K y segun la versión y la compilación los binarios pueden tener las siguientes extensiones.
[ 68K ] [ REL ] [ PRG ]
En el caso del ST son PRG o TOS, pero esto de momento no importa, simplemente tomamos nota.
Aquí sería el momento idoneo para hacer los cambios o extensiones a la BIOS. Se debe tener cuidado de no cambiar los ficheros originales y trabajar siempre en una copia. Los cambios se pueden hacer en cualquier editor de textos, tanto desde PC como desde ST.
C> EDITRDK STBIOS.S
Una vez que tengamos el fichero más o menos preparado y después de los cambios es cuando el fuente debe traducirse a lenguaje máquina.
C> AS68 STBIOS.S > STBIOS.LST
Esto nos creará el archivo STBIOS.O y el listado STBIOS.LST ( que tarda un ratín ). La nueva BIOS ahora debería estar vinculada al núcleo del sistema CP/M68K.
C> LO68 -R -UCPM -O CPM.REL CPMLIB STBIOS.O
Esto crea el archivo CPM.REL, cuyo tamaño determinaremos en el siguiente paso. Esto es necesario para que luego se pueda determinar la dirección de carga absoluta.
C> SIZE68 CPM.REL
En la última columna, el tamaño se muestra como un valor hexadecimal. Este valor se resta de la dirección de memoria deseada más alta y se agrega 1.
Un ejemplo:
Longitud determinada de CPM.REL = $0E325
512 KByte de memoria para CP/M = $7FFFF
Dirección de carga determinada = $7FFFF - $0E325 + $00001 = $71CDB
En un Atari ST se nos mostrará de esta manera:
Una vez que se ha corregido la dirección de carga, las direcciones relativas en el archivo CPM.REL se pueden convertir en direcciones absolutas. Esto crea el CPM.SYS final que solo es ejecutable en la dirección calculada.
C> RELOC -B71CDB CPM.REL CPM.SYS
Finalmente se copia el archivo CPM.SYS en un disquete de arranque y reiniciamos el ST, junto con el resto de ficheros necesarios debería de poder arrancar siempre y cuando la BIOS sirva. Tenemos ejemplos y una base desde la que trabajar, quizá esta sea la peor parte, ya que el resto es básicamente estándar sin cambios.
Definición de la dirección de carga en CP/M68K
Anteriormente vimos cómo calcular la dirección de carga absoluta exacta para CP/M68K y como convertir CPM.REL en CPM.SYS. Si no se tiene que usar necesariamente la RAM en el último byte, también puede ir de una manera más simple y especificar un valor fijo como la dirección de carga. Esto tiene la ventaja de que el método también se puede usar como archivos SUBMIT.
128 kB RAM = 18000
256 kB RAM = 38000
384 kB RAM = 58000
512 kB RAM = 78000
640 kB RAM = 98000
768 kB RAM = B8000
Aplicado al ejemplo anterior, uno simplemente usaría la dirección fija en el comando RELOC . La determinación de la longitud con SIZE68 y el cálculo de la dirección de carga ya no es necesaria. Por tanto ha de tenerse muy en cuenta para cuando reescribamos STBIOS, en el ejemplo actual de STBIOS, siga siendo 3335 bytes para realizar más ajustes antes de tener que cambiar el archivo SUBMIT. Hay que ir verificando el tamaño del archivo CPM.REL durante el desarrollo de vez en cuando con SIZE68.
C> RELOC -B18000 CPM.REL CPM.SYS
Sobre la memoria, al contar con 512KBytes de base, sin duda podemos dotar el sistema con más RAM. La memoria restante se integra automáticamente como Ramdisk G:. ó M:
FICHEROS SUBMIT
Para simplificar y acelerar todo el proceso de traducción, vinculación y recarga, se proporcionan archivos SUBMIT en los que se resumen todos los comandos necesarios. Ya hay creados archivos para todos los valores de las tablas anteriores, ejemplos y fuentes. Para crear este archivo, simplemente:
Código: Seleccionar todo
C> EDITRDK MAKE256.SUB
AS68 -I AS68INIT
AS68 STBIOS.S
LO68 -R -UCPM -O CPM.REL CPMLIB STBIOS.O
RELOC -Bxxxxx CPM.REL CPM.SYS
Posteriormente, el archivo resultante CPM.SYS, podemos llevarlo a floppy para una prueba de arranque. Si siempre usamos la misma configuración de memoria, podemos eliminar la primera línea de archivos SUBMIT, lo que os permite ahorrar unos segundos más. Después de completar el proceso, los archivos STBIOS.O y STBIOS.REL permanecen en el RAMDISK y pueden eliminarse o copiarse al disquete según sea necesario.
La extensión .REL puede ser 68K, PRG, etc...
Cambios y mejoras en los archivos de inicio para ST
A ver, no nos engañemos. En Atari ST el mero hecho de ensamblar un CP/M68K es bastante complejo y mucho más hacerlo funcionar. Esto consta de varios pasos que intentaremos documentarlos y probarlos aquí. Todo comienza cuando encendemos el ST con el floppy que hemos creado y el programa básico toma el control. De nuevo, necesitamos un disco de trabajo con los siguientes archivos:
STBOOT.S y STLDRB.S
STLIB y EDITRDK.68K
AS68.68K y AS68SYMB.DAT
LO68.68K y XPUTBOOT.68K
Básicamente, también podemos crear un disquete con todos los archivos necesarios para ambos métodos y usar este disco cada vez que se cambie algo en el sistema. Ahora se pueden hacer los cambios necesarios en los ficheros fuente. Después de hacer los cambios a los fuentes, por supuesto, estos deben ser traducidos primero.
C> AS68 -f -p STLDRB.S > STLDRB.LST
C> AS68 -f -p STBOOT.S > STBOOT.LST
Esto crea los dos archivos de objeto STBOOT.O y STLDRB.O. Luego, las nuevas rutinas se deben vincular con el Cargador CP/M68K.
B> LO68 -f -s -t400 -u LDR -o CPMLDR.SYS STBOOT.O STIB STLDRB.O
Ahora el CPMLDR.SYS debería estar listo y se puede escribir en el boot sector del diskete que usemos para el sistema.
C> XPUTBOOT CPMLDR.SYS A
Los cambios pueden probarse con una valiente apretón del RESET.
Secuencia del proceso de arranque en el Atari ST
Dado que la BIOS del ST no está implementada en CPM.SYS, hay que ir comprobando si lo que ya tenemos funciona y es compatible, el arranque es un poco más complicado que con las implementaciones normales de CP/M68K. Durante la carga, debe buscarse la posición absoluta del programa básico y eso me está dando bastantes quebraderos.
FLOPPY START lee las pistas del sistema del disquete en la memoria
Esto iniciará el programa STBOOT desde un disquete
STBOOT busca en la memoria el programa básico
Luego se inicia el cargador BIOS STLDRB (subconjunto del BIOS)
STLDRB luego carga el CP / M real y lo inicia
Esta es toda la teoría, adjunto el directorio GEMDOS con el podéis ir haciendo vuetras pruebas y pesquisas.
BASE e INFO
Si os ponéis a repasar el source veréis que los cambios sobre la versión de CP/M68K y la de AtariST son MINIMOS.
El TOS de Atari ST es en muchos aspectos funcionalmente igual que el CP/M68K, con extensiones para manejar ratón, sonido, interfaz MIDI, un teclado inteligente y los puertos para joysticks. El administrador de entorno de gráficos ( GEM ) proporciona soporte adicional monousuario de ventanas y comunicaciones a través de extensiones VDI y AES, que manejan los gráficos y un entorno de aplicaciones.
La capacidad de transporte del programa se mantiene dividiendo los sistemas operativos en máquinas independientes ( BDOS, VDI y AES ) y utilidades básicas de entrada / salida dependientes de la máquina ( BIOS y rutinas de línea A ).
La BIOS consta de todas las rutinas de I/O dependientes de la máquina y además proporciona acceso a las rutinas de línea A para gráficos rápidos.
http://www.bighole.nl/pub/mirror/homepa ... uide_2.htm
Aquí he ido descubriendo muchas cosas que necesitaba. Parece ser que para que el ST pueda transferir el arranque desde el disco antes de invocar el GEM debe estar con el sector de boot en formato IBM PC...!
Así que durante el arranque, el sector de boot se carga en un buffer y se comprueba si el boot sector tiene un word con checksum de #$1234. Si es satisfactorio, se realiza un salto de subrutina al principio del código independiente de su posición en el búfer. Debería de producirse una llamada a get BIOS parameter block, que hace que se lea el boot sector, devolviendo un error en caso que algún campo de los parámetros críticos están a cero. Además de un número de serie de 24 bit, el cual se escribe mientras el proceso de formateo, se usa para determinar cuando un disco ha sido cambiado. Finalmente protobt, que es una llamada de la extended BIOS (18), se usa para crear el sector de arranque, el cual debería ser track 0, cara 0, sector 1.
Enlaces y refencias al post:
Documentación original del DRI:
http://www.retroarchive.org/docs/software/cpm68.html
http://www.retroarchive.org/cpm/archive ... ource.html
http://retrospec.sgn.net/users/tomcat/m ... ernals.htm
http://toshyp.atari.org/en/00300a.html
http://info-coach.fr/atari/software/_fd ... sector.txt
https://mikro.naprvyraz.sk/docs/GEM/TOS.TXT
http://leonard.oxg.free.fr/articles/mul ... atari.html
http://info-coach.fr/atari/software/FD- ... fd_soft_bs
http://www.bighole.nl/pub/mirror/homepa ... uide_2.htm
http://home.earthlink.net/~schultdw/cpm68/index.html
http://mdfs.net/Software/Tube/68000/68k.txt
http://oldcpusrus.xepb.org/my68mon.txt
Continuará en nuevos posts.
Si hubiera que optar a una opción basada en S-RECORDS ( método Ferix ) también sería factible hacer simplemente un loader y ya está. El CP/M68K es tan básico que solo consta de las cosas necesarias para que funcione el micro.
Hay estos documentos que sería bueno tener controlados.:
Atari ST BIOS Technical Reference Manual
Line A-Technical Reference Manual
Engineering Hardware Specification of the Atari ST Computer System
Digital Reseearch C Language Programming Guide for CPM/68K
CP/M-68K Operation System Programmer's Guide
GEM Programmer's Guide Volume 1 : VDI
GEM Programmer's Guide Volume 2 : AES
Introduction to GEM Programming
Kermit User's Guide
MicroEmacs Screen Editor Tutorial
Misc ST Info and Appenix's and Updates
Source Book for Atari Logo
Atari 520 ST Owner's Manual
POR FAVOR:
Si dispones de información o tienes algo , SUBELO !!!!