Tabla de Contenidos

1. Introducción
1.1 Consejos sobre como se debería leer esta documentación
1.2 Copyright, Garantías
1.3 ¿Qué es un CPC?
1.4 ¿Qué cosas te ofrece CPCEMU?
2. Instalación de CPCEMU
2.3 expone algunas razones por las que se debería usar memoria EMS y
2.3 Indicaciones sobre memoria y tarjetas de sonido
2.3.1 Usando Memoria EMS
2.3.2 Definiendo el entorno BLASTER
2.3.3 Definiendo el entorno ULTRASND
3. Diferencias entre el CPC y CPCEMU
3.1 Teclado
3.2 Cargando Programas, Menús
3.2.1 Cargando desde Disco, Menús
3.2.2 Cargando y guardando con el casete
3.2.3 Cargando y guardando snapshots
4. Cambiando la Configuración
4.1 El menú de configuración
4.2 El fichero de configuración
4.3 Parámetros en línea de comandos
5. Transferencia de datos CPC <-> PC
5.1 El disco como intermediario
5.1.1 El programa para transferencia de discos CPCTRANS
5.1.2 La utilidad de formateo y copia 22DISK por SYDEX
5.2 El interface paralelo
5.3 El interface serie
5.4 Otras posibilidades
6. Suministros, Soporte y Reconocimientos
6.1 ¿Dónde conseguir software para el CPC?
6.2 Noticias, intercambio de experiencias
6.3 Si tienes preguntas o sugerencias
6.4 Otros emuladores del Amstrad CPC
6.5 Planes para futuras versiones de CPCEMU
6.6 Reconocimientos
6.7 Marcas registradas
7. Información Interna de CPCEMU
7.1 Lista de contenidos para el capítulo 7
7.2 Minidescripción de las características Internas de CPCEMU
7.2.1 La CPU Z80 (El Procesador)
7.2.2 El Gate Array (El "Co-Procesador")
7.2.3 El PAL (Programmable Logic Array)
7.2.4 El CRTC 6845 (Cathode Ray Tube Controller)
7.2.5 El PIO 8255 (Programmable Input Output)
7.2.6 El PSG AY 3-8912 (Programmable Sound Generator)
7.2.7 El FDC 765 (Floppy Disc Controller)
7.2.8 El interface de impresora Centronics
7.3 El menú de Depuración
7.4 Gestión de la memoria
7.4.1 Una vez más: configuración de EMS
7.4.2 ¿Cómo se ha realizado el Banking?
7.5 Modificación de ROM
7.5.1 Ignorando la ROM con el casete
7.5.2 Modificaciones de la ROM AMSDOS
7.6 Miscelánea
7.6.1 Otra vez: El fichero de configuración
7.6.2 El adaptador paralelo
7.6.3 CPCTRANS
7.7 Estructura de los fichero elegidos para CPCEMU
7.7.1 Imágenes de Disco
7.7.2 Ficheros Snapshot
7.7.3 Cabecera AMSDOS
7.7.4 Fichero de Pokes:
7.8 Histórico Interno
A. Apéndice
A.1 Glosario
A.2 Bibliografía
A.3 Indice

1. Introducción



¡Bienvenido al mundo de los emuladores!

¡¿Cómo?! ¿Que quieres saber qué es CPCEMU, y qué es lo que puedes hacer
con este extraño programa que escribe en amarillo sobre un fondo azul y
que muestra "Syntax Error" después de cada entrada?


Para evitarte largas búsquedas aquí te lo pongo:
CPCEMU emula un Amstrad CPC 464, 664 ó 6128 con muchas
extensiones. En otras palabras, el programa imita el
comportamiento de los ordenadores Amstrad más antiguos
en tu más reciente PC.

¿Con qué propósito?
Veamos, si aún no lo sabes me temo que CPCEMU no te hará falta para nada.

Algunas razones:
- nostalgía (ah, que agradable era mi viejo CPC ...)
- mejores prestaciones comparado con el original
- mejor entorno para el desarrolo de programas
- para jugar
- trabajo (sí, un CPC es suficiente para un simple tratamiento
de textos)
- [ ] <- añade otras razones por
tu cuenta.




1.1 Consejos sobre como se debería leer esta documentación



Lo primero sería darse una vuelta por la ayuda en línea, luego, si
necesitas profundizar o información más precisa, continúa leyendo...


He intentado organizar la documentación de un modo ordenado. Si aún
tienes dudas (¡después de haberla leído varias veces!), puedes ponerte
en contacto conmigo. Por supuesto puedes hacerlo aún cuando tengas
todo perfectamente claro. Mira el capítulo 6 (Fuentes, Soporte, ...)
para ver la manera de contactar.

En el capítulo 1 (Introducción) describo la mejor forma de leer esta
documentación, quién posee el copyright y algunas cosas del CPC en
general.

En el capítulo 2 (Instalación) por fin empieza todo. Se te indicará
como instalar y ejecutar CPCEMU.

El capítulo 3 (Diferencias entre el CPC y CPCEMU) trata las
características del emulador que deberías conocer si ya estás
familiarizado con un CPC real. Fundamentalmente describo el teclado,
los discos, las cintas y los snapshots.

En el capítulo 4 (Cambiando la Configuración) describo como adaptar
CPCEMU a tus necesidades. Puede que para entonces ya seas capaz de
ejecutar tus programas favoritos.

En el capítulo 5 (Transferencia de datos CPC <-> PC) descubrirás como
traspasar tus antiguos programas para el CPC al PC. Más adelante se
describen las utilidades que acompañan a CPCEMU.

En el capítulo 6 (Fuentes, Soporte y Reconocimientos) se te indicará
cómo conseguir la última versión de CPCEMU y a quién acudir si tienes
alguna pregunta.

El capítulo 7 (Información Interna de CPCEMU) es sólo para expertos. La
parte "oficial" del manual de usuario finaliza en el capítulo anterior.
Aquí describo como va uno de aquí para alla programando un emulador, y
qué es necesario saber para realizarlo. También se explica el menú de
depuración, que te permite analizar el procesador y la memoria en
*cualquier* momento durante la emulación. Los usuarios ocasionales
deberían saltarse este capítulo, por lo menos en la primera lectura.

El Apéndice A.1 contiene un glosario con descripciones de los términos
técnicos más importantes. El Apendice A.2 es la bibliografía y el A.3
el índice.



1.2 Copyright, Garantías


CPCEMU ha sido desarrollado por (ver también la sección 6.3):

Marco Vieth
Auf dem Uekern 4
D-33165 Lichtenau
Alemania


CPCEMU es Freeware, lo que significa que puedes pasar el programa a
amigos y conocidos *gratis*. Los mantenedores de archivos tienen
permitido incluir CPCEMU en sus colecciones para "downloading". Los
distribuidores de shareware tienen permitido distribuir CPCEMU,
siempre y cuando sólo cobren una pequeña cantidad por cada copia.
En comparación al Dominio Público, Freeware no significa que es
"gratuito" y puedes hacer lo que te de la gana con el. Yo sigo
manteniendo el copyright.

Tanto el software como la documentación se entregan "como tal", sin
ningún tipo de garantía.


Aunque este programa es freeware, desde luego aceptaría cualquier clase
de apoyo, técnico o financiero.
Para más detalles mira el capítulo 6.



1.3 ¿Qué es un CPC?


Si ya sabes lo que es un CPC sáltate esta sección y continúa leyendo
la 1.4.




¿Sigues aquí?

No quiero meterme en detalles técnicos ahora, en cambio voy a darte una
visión retrospectiva para que puedas comprender mejor qué es un CPC.

CPC es la abreviatura de Colour Personal Computer (Ordenador Personal
en Color). Los ordenadores de este tipo se empezaron a fabricar en 1984
por la compañía británica Amstrad y se vendieron con distinto nombre
en otros países.
Fué la época de los ordenadores domésticos; Commodore C64, Sinclair
Spectrum, Atari 800XL, ... entonces se desveló el CPC 464. Tenía tanta
RAM como el Commodore C64 (en concreto 64 KB), una grabadora de casetes
incorporada y el Locomotive BASIC 1.0. Le siguió el CPC 664, que tenía
incorporada una unidad de disco de 3" y un Locomotive BASIC 1.1
ligeramente ampliado. El CPC 6128 salió en 1985, con 128 KB de RAM y
prácticamente las mismas características que el CPC 664. Los discos de
3" eran extremadamente caros, pero más fiables que los discos de 5.25"
(casi tan fiables como los de 3.5" actuales), y eran notablemente más
rápidos en contraposición a la velocidad de la cinta, muy distinto a
lo que pasaba con el C64 ...
Los tres modelos se vendían con monitor en color o fósforo verde, el
cual llevaba incorporada la fuente de alimentación. Más adelante se
introdujeron dos o tres modelos más (el CPC+ por ejemplo). El BASIC
tenía casi 178 intrucciones potentes y rápidas. Se podía programar
gráficos, sonido e incluso control de interrupciones, todo en BASIC
sin utilizar PEEKs o POKEs. El suministro de software se incrementó
espectacularmente según pasaron los años.




1.4 ¿Qué cosas te ofrece CPCEMU?


La siguiente es una visión general de lo que te ofrece CPCEMU.
En las siguientes secciones de la documentación se profundizará más.


Gráficos del CPC en 3 modos de pantalla diferentes (X x Y x COLORES):
Modo 0: 180x200x16
Modo 1: 320x200x4
Modo 2: 640x200x2
(Con BIOS VESA estos gráficos pueden visualizarse en resoluciones
que van desde 640x400x16 hasta 1280x1024x16, dependiendo del
monitor y la tarjeta VGA que uses.)

Sonido: por el altavoz interno del PC, la Soundblaster (3 canales + ruido,
en estéreo), la Soundblaster (3 canales con sonido FM, en estéreo)
o por la Gravis UltraSound (3 canales + ruido, en estéreo)

Memoria:
ROM: OS, BASIC, AMSDOS, hasta 13 ROMs adicionales (con EMS)
RAM: 64KB, 128KB, hasta 576KB de RAM compatibles con Dk'tronics
(con EMS)

Disco: Imágenes de disco especiales, con extensión .DSK

Casete: Ficheros normales bajo DOS, p.ej. ficheros BASIC y binarios del
CPC con extensiones .BAS y .BIN respectivamente.

Snapshots: Puedes realizar volcados de memoria de programas que se esten
ejecutando para poder continuar con ellos más tarde. Los Snapshots
llevan extensión .SNA .

Velocidad: En un 386/33 con memoria EMS, CPCEMU es más rápido que el
original. Un modo de tiempo real permite ralentizar la emulación
a la velocidad exacta del CPC. Este modo de tiempo real funciona
bien en un 486DX2/66.




2. Instalación de CPCEMU


En este capítulo aprenderás como instalar y ejecutar CPCEMU. La sección

2.3 expone algunas razones por las que se debería usar memoria EMS y

explica como configurar el entorno de la Soundblaster. Más adelante,
en el capítulo 4 (Cambiando la Configuración), se describe la instalación
completa definida por el usuario junto al fichero de configuración



2.1 Ficheros que contiene el paquete CPCEMU

Tienes en tu poder el paquete CPCEMUxx.xxx, el cual contiene los
siguientes ficheros:
(He puesto los directorios entre paréntesis, puesto que ese será el
lugar donde se encontrarán los ficheros después de la instalación.)

COPYMATE.ROM ROM con un programa para copia (ROM)
CPC464.BAT fichero de arranque para el CPC 464
CPC464.ROM ROM (firmware+BASIC) de un CPC 464 (ROM)
CPC664.BAT idem, para el CPC 664
CPC664.ROM (ROM)
CPC6128.BAT idem, para el CPC 6128
CPC6128.ROM (ROM)
CPC6128P.BAT idem, para el CPC 6128 plus
CPCADOS.ROM AMSDOS para todos los CPCs (ROM)
CPCEMU.CFG fichero de configuración para todos los CPCs (o CPCEMU0.CFG)
CPCEMU.DAT fichero de datos de CPCEMU
CPCEMU.DBF fichero de pokes
CPCEMU.EXE el emulador
CPCEMU.HLP la ayuda en línea, prueba a pulsar F1...
CPCEMU.MSG el fichero de mensajes (necesario)
CPCEMU_D.TXT documentación en Alemán
CPCEMU_E.TXT documentación en Inglés
CPCEMU_F.TXT documentación en Francés
CPCEMU_S.TXT documentación en Español (este fichero)
CPCPARA.BAS programa en Locomotive-BASIC para el adaptador paralelo
(UTILITY)
CPCPD1.DSK imagen de disco con algunos programas de Dominio Público
de ejemplo (DISC)
CPCREC.BAS programa en Locomotive-BASIC para recibir programas
(UTILITY)
CPCT0.BAT fichero batch para CPCTRANS.EXE (ejemplo) (UTILITY)
CPCTRANS.CFG fichero de configuración para CPCTRANS (UTILITY)
CPCTRANS.EXE programa para transferir imágenes de disco (UTILITY)
CPMDISKS.DEF definiciones de formato para 22DISK (UTILITY)
FILE_ID.DIZ descripción de archivo para BBSes
INSTALL.BAT fichero batch para la instalación
KCC.BAT fichero de arranque para el KC compact
PCPARA.EXE parte PC del adaptador paralelo (UTILITY)
README_D.TXT Readme en Alemán
README_E.TXT Readme en Inglés
README_F.TXT Readme en Francés
README_S.TXT Readme en Español
ROMGET.BAS programa en Locomotive-BASIC para guardar ROMs (UTILITY)
SNA2GIF.EXE un conversor de snapshot a GIF: consigue las pantallas
de tu CPC...


Se incluyen las ROMs de Amstrad originales. El Firmware tiene copyright
de Locomotive Software; el BASIC tiene copyright de Amstrad. Amstrad y
Locomotive me han dado permiso para distribuir las ROMs con CPCEMU.



2.2 Requisitos del sistema e instalación

Necesitarás como mínimo (no hay límite superior por supuesto)
- PC AT 386 con gráficos VGA
- MS-DOS, posiblemente con EMS, o
Novell DOS (DRDOS) o
Sesión DOS en Windows 95 (o 3.1) o
Sesión DOS en OS/2 2.x.
- Si quieres ejecutar programas desde archivos ZIP, para poder
extraerlos necesitarás el programa PKUNZIP disponible en algún
directorio que este en el path de búsqueda del DOS.


La instalación es muy simple:
Copia el archivo CPCEMUxx.ZIP en tu disco duro y descomprímelo
con el siguiente comando 'PKUNZIP CPCEMUxx.ZIP'. Ejecuta INSTALL.BAT
para crear los subdirectorios necesarios. Arranca CPC464.BAT,
CPC664.BAT o CPC6128.BAT dependiendo del CPC que quieras emular.
Cuando lo ejecutes por primera deberás seleccionar tu idioma, pulsando
"0" se elige Inglés, para elegir otro pulsa otro distinto.
(La configuración se guarda en el directorio TMP como CPCEMU.CFG.)
Después de mostrarse la configuración, aparecerá la conocida pantalla
de inicio del CPC en amarillo y azul.
Puedes salir del emulador con F12 y ver la ayuda en línea con F1.
Lo mejor es que lo pruebes ahora mismo antes de seguir leyendo ...




Si se produce algún error durante la configuración se te llevará al
llamado menú de depuración, del cual puedes salir pulsando 'q' <INTRO>.
En tal caso es útil, algunas veces, redirigir los mensajes de
inicialización a un fichero, p.ej. con el comando 'CPCEMU > INIT.TXT'.
Con esto puedes analizar el problema más adelante.



2.3 Indicaciones sobre memoria y tarjetas de sonido


Lo que viene a continuación te ayudará si deseas una emulación
especialmente rápida, o si tu tarjeta de sonido no es detectada
correctamente.
Si usas Windows 95 sin configuraciones especiales esto no debe
preocuparte. Windows 95 suministra EMS en las sesiones DOS, y
define el entorno BLASTER automáticamente si tu tarjeta de sonido
es una Soundblaster.


2.3.1 Usando Memoria EMS


Es aconsejable tener EMS por hardware o emulada en tu PC (EMS=Expanded
Memory System, que significa Sistema de Memoria Expandida). Esto
incrementa la velocidad de la emulación de manera significativa,
en particular en el BASIC. El EMS simulado es demasiado lento.
Todo lo que necesitas es un EMM (Expanded Memory Manager, que
significa Gestor de Memoria Expandida) que soporte el estándar
LIM 4.0 (LIM EMS 4.0).

Si es posible usar EMS aparecerá un contador de memoria
'EMS xxx Bytes ok.' durante la inicialización.
De lo contrario verás un "Sorry, using conventional memory"
("Lo siento, usando memoria convencional").

Ejemplo bajo OS/2 2.x (valores de configuración para la sesión):
EMS_FRAME_LOCATION = auto
EMS_HIGH_OS_MAP_REGION = 32 (o más)
EMS_LOW_OS_MAP_REGION = 0 (o más)

Ejample bajo DOS en el fichero CONFIG.SYS:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE 1024
...






2.3.2 Definiendo el entorno BLASTER


Para poder escuchar sonido por la Soundblaster debes definir la
variable de entorno BLASTER adecuadamente. Bien usando el programa
'SET-ENV.EXE' (o 'SBTEST.EXE') incluído con tu tarjeta o modificando
el AUTOEXEC.BAT directamente. En el AUTOEXEC.BAT deberías tener una
línea similar a la siguiente:
SET BLASTER=A220 I7 D1 T3

Donde:
A especifica la dirección base (0x220)
I especifica la IRQ (7)
D especifica el canal DMA (1)
T especifica el tipo de tarjeta de sonido:
1 : Soundblaster 1.0/1.5
2 : Soundblaster Pro
3 : Soundblaster 2.0/2.5
4 : Soundblaster Pro 3/Pro 4.0
5 : Soundblaster Pro (Microchannel)
6 : Soundblaster 16

Para las versiones 2,4,5 & 6 se activa el sonido estéreo.

Hay algunos parámetros más que se ignoran:
H especifica el canal DMA de 16 bits para tarjetas de 16 bits (5)
M especifica la dirección base del mixer de la soundblaster (224)
P especifica la dirección del puerto para el MIDI (330)



Si no escuchas sonido prueba a usar A388 (en lugar de A220). Esto
funciona en la tarjeta Media Vision Pro Audio Spectrum 16 y puede
que en otras tarjetas con emulación de SB. También podría funcionar
en una tarjeta Adlib (Joe Cotroneo)




2.3.3 Definiendo el entorno ULTRASND


Para tener sonido en tu GUS (Gravis Ultrasound Classic/ MAX/ACE)
debes tener definida la variable de entorno ULTRASND.

Tu fichero AUTOEXEC.BAT debería contener la línea siguiente:
SET ULTRASND=220,1,1,11,7

Donde el significado de los números es (en el orden mostrado):

220 es la dirección base (0x220)
1 es el canal DMA de la GUS
1 es el canal DMA de la SoundBlaster
11 es la IRQ de la GUS
7 es la IRQ de la SoundBlaster

Lo más importante son la dirección base y la IRQ de la GUS. El resto
de valores deben especificarse para que la emulación funcione
correctamante.




3. Diferencias entre el CPC y CPCEMU


En este capítulo se describen aquellas características que diferencían a
CPCEMU de un CPC real. La sección siguiente explicará qué teclas tienen
un cometido especial durante la emulación, principalmente las teclas de
función. Después se te indicará como cargar desde disco o casete.



3.1 Teclado


Puede que ya hayas notado que las teclas de función del PC no tienen
la misma disposición que las del CPC. Esto provoca una salida extraña
que describo más abajo. También puede que lleves horas buscando la
tecla COPY...
Todas las teclas del CPC están emuladas de alguna forma, puedes estar
seguro de ello. Aquí se desvelan todos los secretos al respecto:

- ALT, ALTgr : COPY en el CPC

- Tecla de PAUSA : detiene el PC hasta que se vuelve a pulsar.
Si las teclas de función del PC dejan de responder es porque
habrás activado la tecla de PAUSA.

- Teclado numérico : Dependiendo del estado de "Bloq Num" el teclado
numérico funciona de distinta forma. Con "Bloq Num" activado el
teclado numérico representa las teclas de función del CPC, de lo
contrario emulará el joystick 0. Si quieres utilizar un joystick
de PC analógico tendrás que calibrarlo primero. (Ver capítulo 4 -
Cambiando la Configuración).

Para completar:
- Av Pág/Re Pág: Mueve la pantalla entera del CPC.
(No me preguntes con qué propósito.)

Y, por supuesto, las teclas de función.
F1 : Tecla de Ayuda en Línea. Podría ser la tecla más importante al
principio.
F2 : Cambia entre la pantalla del CPC (visión normal) y la pantalla de
mensajes (la que tiene un borde rojo). Esta última pantalla puede
mostrar mensajes de control.
F3 : Inserta un disco, ver sección 3.2.1
F4 : Activa y desactiva el sonido
F5 : Carga un snapshot (volcado de memoria), ver sección 3.2.3
F6 : Guarda un snapshot, ver sección 3.2.3
F7 : Menú de configuración, ver sección 4.1
F8 : Reset de hard, actúa como el botón de reset en un CPC (o apagar
el CPC y volver a encenderlo). Usa esto si CTRL+MAYS+ESC deja
de funcionar.
F9 : Permite/desactiva actualización de paleta.
F10 : Menú de depuración, explicado en el capítulo 7. Si entras por
accidente en este menú pulsa 'r' para R)un (ejecutar) o 'q'
para Q)uit (salir)
F11 : Reservada para uso próximo
F12 : Salir del emulador




3.2 Cargando Programas, Menús


En esta sección aprenderás como cargar programas desde disco, casete o
snapshots. Obviamente se aplica lo mismo en el caso de guardar. También
se describe como usar el menú.



3.2.1 Cargando desde Disco, Menús


En circunstancias normales el AMSDOS (DOS de Amstrad) está activado,
y todas las instrucciones para trabajo con ficheros usan el disco.
No hace falta que insertes un disco del CPC real en la unidad del PC
cada vez que accedas a un fichero (eso sin tener en cuenta que,
posiblemente, todos tus discos del CPC son de 3").
Para conseguir mayor velocidad se copia el contenido de un disco del
CPC a la conocida como imagen de disco. Este fichero puede encontrarse
en cualquier parte del disco duro (o en un disquete de alta densidad).

Aquí tienes algunas instrucciones BASIC del AMSDOS:
- CAT <INTRO> : visualiza el catálogo

- Con 'RUN"<nombre de fichero>"' se carga y arranca un programa.
Pueden omitirse las comillas finales. Esta instrucción es útil para
los programas BASIC que tienen extensión .BAS, y en muchos casos
para programas binarios con extensión .BIN .

Un modo simple de ejecutar un programa es:
1. Meter el nombre del fichero, p.ej. 'disc' *sin* pulsar <INTRO>
2. Mantén pulsada la tecla CTRL y pulsa cursor-izquierda (una vez
hecho esto el cursor debe haberse movido a la primera columna)
3. Con la tecla CTRL aún pulsada dale a la tecla INTRO que está en
el teclado numérico (ahora debe aparecer RUN"disc y el programa
deberá ejecutarse)

- LOAD"<nombre de fichero>" carga un programa pero sin arrancarlo.
Puedes inspeccionar los programas en BASIC con LIST y ejecutarlos
con RUN. Normalmente los programas binarios no se cargarán con
LOAD, se puede intentar usar la instrucción MEMORY primero,
p.ej. 'MEMORY &1fff'.

- SAVE"<nombre de fichero>" guarda un programa BASIC. Para programas
binarios hay que especificar algunos parámetros más, p.ej.
'SAVE"<nombrefichero>",b,&c000,&4000' guardará el contenido de la
pantalla.

- MERGE"<nombre de fichero>" es otra posibilidad. Combina un programa
BASIC con otro que ya este en memoria en ese momento.


Algunas instrucciones especiales del AMSDOS se introducen
precediéndolas del carácter "|":
- |A, |B para seleccionar la unidad (se puede conseguir lo mismo
con |DRIVE,0 ó 1)
- |DIR,"<comodín nombre de fichero>" para ver el directorio.
Nota importante: Se debe usar lo siguiente en un CPC 464:
a$="<comodín nombre de fichero>" : |DIR,@a$
- |ERA,"<nombre de fichero>" para borrar un fichero.
Nota importante: Se debe usar lo siguiente en un CPC 464:
a$="<nombre de fichero>" : |ERA,@a$
- |REN,"<nombre nuevo>","<nombre antiguo>" para renombrar un fichero.
Nota importante: Se debe usar lo siguiente en un CPC 464:
a$="<nombre nuevo>" : b$="<nombre antiguo>" : |REN,@a$,@b$
- |TAPE para activar el casete. Se explica en la siguiente sección.
- |DISC para volver al disco
Hay algunas instrucciones más pero no son tan importantes.



El Menú de Inserción de Discos

Hasta ahora sólo podías usar un disco, el que estaba ya "metido" en
la unidad. Para insertar otro disco tan solo debes pulsar F3 y
aparecerá el siguiente menú:

Insertar Disco
Número de Unidad 0
Seleccionar Cara 0
Protección contra Escritura 0
Autoarranque 1

Con las teclas de cursor <arriba/abajo> puedes seleccionar una línea.
También puedes realizar esto pulsando letras (para volver con <SUPR>).
Para cambiar los números usa las teclas de cursor <izquierda/derecha>
o mediante introducción directa de dígitos.
Con <INTRO> en cualquier línea (p.ej. la primera) se aceptan los
cambios. Para descartarlos pulsa <ESC>.
"Número de Unidad" es la unidad deseada (0=A, 1=B); "Seleccionar Cara"
es para cambiar de cara en los discos de doble cara, no tiene ningún
efecto cuando se usa en discos de simple cara.
Con "Protección contra Escritura" se puede marcar un disco como
protegido contra escritura. (0=No, 1=Si, protegido contra escritura).
Si "Autoarranque" está activado, se ejecuta automáticamente el primer
programa BASIC que haya en el disco nada más insertarlo (como
alternativa: DISC.BAS).



El Menú de Selección de Ficheros

Pulsa <INTRO> y aparecerá el directorio de la unidad de disco.
Selecciona un nuevo disco de la forma descrita más arriba.

Si ya hay un disco metido dentro de la unidad no hace falta que lo
saques como hay que hacer con el real. Esto se hace automáticamente.
En la parte baja de la pantalla se muestra este disco.

Verás como máximo 15 ficheros, en caso de haber más aparecerá "[]".
- <INICIO> se coloca en el primer fichero, <FIN> en el último
- <Re Pág/Av Pág> para moverse por páginas dentro de la lista
- <INTRO> acepta el fichero seleccionado, <ESC> cancela.
También puedes seleccionar nombres directamente pulsando las letras
iniciales de éstos.

Si estás usando un ratón puedes pinchar "[]" para <página arriba>,
"[]" para <página abajo>, "[<]" para <cursor izquierda>, "[>]" para
<cursor derecha> y [ok] para <intro>.
Usa "[þ]" como <ESC>. Usa el botón derecho del ratón para seleccionar
una línea.

".." es el directorio anterior; [A], [B], ... son las unidades
disponibles.
Procura seleccionar unidades de disquete que tengan uno metido. De lo
contrario podrías tener problemas.

También es posible insertar discos que esten dentro de archivos ZIP.
Selecciona un archivo ZIP pulsando <INTRO> y se mostrará su contenido
como si se tratara de un directorio normal. Si eliges un fichero de
un archivo ZIP éste se extrae automáticamente a un fichero temporal.
Para que esto funcione, hace falta que el programa PKUNZIP se encuentre
en algún directorio del path de búsqueda del DOS, o en el directorio
de CPCEMU.
Los ficheros temporales se borran automáticamente cuando ya no se
necesitan. Los cambios *no* se escriben en el archivo ZIP. Si guardas
algo en una imagen de disco que está dentro de un ZIP se perderá al
insertar otro disco. Si quieres realizar cambios en imágenes de disco
que están dentro de archivos ZIP, deberás extraerlas antes de entrar
en CPCEMU.

El proceso para crear imágenes de disco a partir de discos tuyos del
CPC se explica en el capítulo 5 (Transferencia de datos CPC <-> PC).




3.2.2 Cargando y guardando con el casete


¿Qué es realmente un casete para CPCEMU?
Los ficheros de casete no son más que ficheros normales en directorios
del DOS.
Una vez metida la instrucción '|TAPE' todas las instrucciones BASIC
para manejo de ficheros hacen referencia al casete. Pero ojo, sólo
las que no empiezan con el caracter "|".
En está situación es posible usar las instrucciones explicadas en
la sección anterior (CAT, RUN", LOAD", SAVE", MERGE") con el casete.
Si omites el nombre del fichero aparecerá el menú de selección de
ficheros tal como se describe en la sección previa.
Con SAVE"" puedes bien sobreescribir un fichero que ya existe o
crear uno nuevo especificando su nombre en la última línea donde
aparece "(new file)".

Obviamente puedes cargar programas que esten dentro de archivos ZIP,
a su vez que guardarlos se ignora.

¡La única forma de tener una unidad de casete tan sofisticada es con
el emulador!



3.2.3 Cargando y guardando snapshots


Los snapshots son volcados de memoria que no solamente guardan
el contenido actual de la memoria, sino que también se guarda el
estado interno de los chips de hardware, p.ej. el procesador.
En cualquier momento puedes interrumpir el programa que se este
ejecutando y guardarlo como snapshot. Más adelante puedes cargarlo
y continuar en la misma posición en la que lo interrumpiste.
Para crear un snapshot se usa la tecla F6. Hay que especificar el
tamaño del snapshot, bien 64K o 128K. Los snapshots de 128K sólo
tienen sentido si se está utilizando en ese momento el segundo
banco de memoria. En este último caso se usaría "128K Snapshot = 1",
donde 1=Si.

El menú de selección de snapshots es el mismo que el ya descrito
con el de discos, con el añadido de lo comentado para el casete
(3.2.1 y 3.2.2).

Para cargar un snapshot ya creado se usa la tecla F5.




4. Cambiando la Configuración


En este capítulo se te mostrará como configurar CPCEMU para adaptarlo
a tus necesidades.
Se explican el menú de configuración, el fichero de configuración y los
parámetros en línea de comandos.



4.1 El menú de configuración


Esta es la forma más simple de realizar ajustes en CPCEMU. Sin embargo,
este menú no te permite modificar todas las opciones. Por poner un
ejemplo, si deseas usar ROMs adicionales tendrás que usar el fichero
de configuración, explicado en la sección 4.2.

Como ya se mencionó en la sección del teclado, para entrar en el menú de
configuración hay que usar la tecla F7. Hecho esto aparecerá el siguiente
menú:

Opción: Valor: Breve descripción:
___Emulación
Retardo Emulación 0
Velocidad Emulación 1
Frecuencia Interrupción 300
Reanudar Interrupción 0
Tiempo Real 0

___Pantalla
Monitor Color 1
Actualizar Multimodo 0
Cambio Paleta 1
Desplazar Pantalla 0
Modo Video 0
Posición VSYNC 5

___Sonido
Sonido Activado 1
Dispositivo Sonido 3
Retardo SB 35
Retardo0 SB 6
Buffer DMA SB 128
Vel Muestreo SB 0
SB Estéreo 0

___Control
Calibrar JOY0
Calibrar JOY1
Idioma Teclado 3
Ratón Activado 1

___Opciones PPI
Fabricante 7
PPI 50Hz 1
PPI Señal Expansión 1

___Miscelánea
AMSDOS Desactivado 0
AMSDOS Acelerado 1
Máscara Ruptura 3
EMS Activada 1
Idioma 3
Desvío Cinta 1
Tamaño RAM 128
Modelo CPC 2
Mostrar Configuración 0
Cargar Configuración
Reiniciar Emulación
Guardar Configuración
Fichero de Pokes fichero con trucos para juegos
Shell al DOS
Continuar


Modifica los valores de las opciones tal como se explicó en 3.2.1.


Retardo Emulación
Esta opción permite ralentizar la emulación si ésta es demasiado
rápida.
0 significa sin retardo, 100 un retardo pequeño, 300 algo más ...

Velocidad Emulación
0 = emulación del Z80 lenta
1 = emulación del Z80 rápida

Frecuencia Interrupción
Sirve para cambiar la frecuencia a la que que se generan las
interrupciones.
En un CPC real ésta es simpre de 300 Hertzios. Si incrementas este
valor muchos programas darán la impresión de ir más rápido, pero hay
menos capacidad de cálculo entre dos interrupciones. Si tienes un
ordenador lento deberías reducir este valor a 100 o 200 algunas
veces. Los valores posibles van desde 18 hasta 600.
Para información más detallada mira el capítulo 7.

Reanudar Interrupción
Esta es otra de esas opciones que no pueden explicarse si no se tienen
suficientes conocimientos técnicos. Si no hay memoria EMS disponible
esta opción se pone a 0, lo que significa que las interrupciones
pueden ignorarse. Por supuesto esto no es lo más adecuado, pero con
1 la emulación se ralentiza mucho. Con EMS está opción es 1, de modo
que CPCEMU procura manejar todas y cada una de las interrupciones.
Nota importante:
Parece ser que CP/M Plus funciona solamente teniendo EMS y ¡con esta
opción = 0 !
Para información más detallada mira el capítulo 7.

Tiempo Real
Activa el CPC en tiempo real. El emulador realiza esperas según
convenga para ser igual de rápido que un CPC real.

Monitor Color
Emulación de monitor en fósforo verde o en color mediante cambio
de paleta.

Actualizar Multimodo
Si tienes programas que usan varios modos de pantalla simultáneos
activa esta opción. De esta forma CPCEMU intentará manejarlo
correctamente.
Por defecto esta opción está desactivada porque no funciona
adecuadamente en todos los casos.

Cambio Paleta
Pon esta opción a 0 para desactivar los cambios de paleta. Esto viene
bien cuando es difícil ver lo que aparece en pantalla debido a los
continuos parpadeos de la misma.
Si pulsas la tecla F8 para provocar un reset de hardware esta opción
se pone a 1 automáticamente.
Consejo: Si la actualización de paleta está desactivada y los colores
de pantalla son erróneos prueba a pulsar F2 dos veces seguidas.

Desplazar Pantalla
Sirve para especificar el número de líneas que debería desplazarse
la pantalla del CPC.
Normalmente esta opción no hace falta. Se consigue el mismo efecto
pulsando las teclas <Re Pág> y <Av Pág>. Valores posibles:
0=sin desplazamiento, hasta 25.

Modo Video
Especifica el modo de video de la tarjeta VGA.
0 = 640x200x16 (por defecto)
1 = 640x350x16
2 = 640x480x16
y si tu tarjeta tiene BIOS VESA, principalmente:
3 = 800x600x16
4 = 1024x768x16
5 = 1280x1024x16
...
AVISO:
¡Usa modos de vídeo >= 3 sólo si tu monitor soporta esas resoluciones!
¡Si ves que hace unos ruidos raros desactiva ese modo inmediatamente!
De todas formas, esto podría pasar sólo en monitores antiguos.

Posición VSYNC
De normal esta opción no te hará falta, pero no pasa nada por probarla.
Por cada vez que se actualiza la pantalla hay un haz vertical con un
bit especial activado, es el conocido como bit VSYNC (sincronización
vertical). Mediante esta opción puedes especificar la posición en la
que se produce el VSYNC. Los valores posibles son de 0 a 5. Para
información más detallada mira el capítulo

Sonido Activado
Activa el sonido. 1=activado, 0=desactivado. Otra forma de conseguirlo
es pulsando la tecla F4.

Dispositivo Sonido
Especifica el dispositivo para la salida de sonido:
0 = none
1 = Altavoz interno del PC
2 = Soundblaster (Pro), sonido FM
3 = Soundblaster (Pro), sonido digital, gracias a Ulrich Doewich
4 = GUS (Gravis Ultrasound), gracias a Ulrich Doewich

Retardo SB
Retardo para la tarjeta Soundblaster.
Especifica el tiempo de retardo después de un acceso a la tarjeta
de sonido para escritura.
Con valores pequeños (p.ej. 0) se incrementa la velocidad en la salida
del sonido. Si se producen problemas con tu tarjeta de sonido usa el
valor 35.

Retardo0 SB
Otro retardo para la Soundblaster. No lo cambies.

Buffer DMA SB
Especifica el tamaño del buffer para el sonido digital de la
Soundblaster.

Vel Muestreo SB
Especifica el ratio de muestreo para el sonido digital de la
Soundblaster.
0=22kHz, 1=44kHz

SB Estéreo
Activa o desactiva el sonido estéreo.

Calibrar JOY0
Es muy probable que ya conozcas esto por otros programas en los que
primero hay que calibrar el joystick analógico del PC. Elige esta
opción pulsando <INTRO>, mueve el joystick a la esquina superior
izquierda, luego a la esquina inferior derecha.
A continuación se te mostrarán algunos valores. Si vas usar el
joystick frecuentemente es mejor que te apuntes estos valores
y los escribas en el fichero de configuración (mira la siguiente
sección). De todas formas tendrías que volver a calibrarlo si
modificas la frecuencia de reloj.

Calibrar JOY1
Se aplica lo mismo que en Calibrar JOY0, pero para el joystick 1.

Idioma Teclado
Mediante esta opción se puede seleccionar un esquema de teclado de
otros paises.
0 = UK, por defecto
1 = GR, Teclado "estilo Alemán". Por desgracia es imposible conseguir
un teclado completamente Alemán, ya que las teclas obtenidas
mediante MAYS no pueden sustituirse por las obtenidas sin MAYS.
Aún y todo la "Z" y la "Y" estan intercambiadas, y hay algunos
caracteres más modificados.
2 = FR, Teclado "estilo Francés". Después de añadir el teclado Alemán
el Francés no iba a ser menos. Se ha conseguido implementar
algunas partes del teclado AZERTY. Pero se dan los mismos
problemas que en el Alemán.
3 = SP, Teclado "estilo Español"

Ratón Activado
Posibilita el uso del ratón en los menús.

Fabricante
El nombre del fabricante que aparece en la pantalla de inicio.
0 = Isp
1 = Triumph
2 = Saisho
3 = Solavox
4 = Awa
5 = Schneider
6 = Orion
7 = Amstrad

PPI 50Hz
El CPC es capaz de funcionar a
0 - 60 Hz, o
1 - 50 Hz (el usado en Alemania, Francia)
Cuando se produce un reset se verifica el bit 4 del puerto B del PPI,
y el CRTC se inicializa adecuadamente.
Déjalo en 50 Hz.

PPI Señal Expansión
Algunas tarjetas de expansión activan esta señal.
En el CPC 464 está activada cuando tiene conectada una unidad de disco.
En el CPC 6128 está siempre activada.

AMSDOS Desactivado
Impide la inicialización del AMSDOS. Esto viene bien para cargar
programas del casete sin tener que introducir la orden '|TAPE'
cada vez.
Es cierto que también se podría poner como comentario la línea del
AMSDOS en el ROM_BLOCK (con ROM_BLOCK se puede especificar la ROM
a cargar), pero tiene el inconveniente de que el AMSDOS no se
encuentra presente en el sistema.
Mediante esta opción se consigue que el AMSDOS este disponible para
algunos programas que lo requieren.

AMSDOS Acelerado
Posibilita realizar modificaciones en la ROM del AMSDOS para acelerar
los accesos al disco.
Esto se consigue minimizando los tiempos de espera para el motor
de la unidad de disco, que no son necesarios en el emulador.

Máscara Ruptura
Esta opción es sólo para depuración. Con el valor 3 del fichero
de configuración se suprimen varios errores provocados por
instrucciones ilegales.
¡No cambies este valor!

EMS Activada
Permite el uso de memoria EMS (Expanded Memory System).
Si no hay EMS disponible o no hay suficiente, CPCEMU usa memoria
convencional automáticamente.
Para información de EMS más detallada consulta 2.3.1 y el capítulo 7.

Idioma
Idioma para los mensajes de ayuda.
0=UK (Inglés)
1=GR (Alemán)
2=FR (Francés)
3=SP (Español)

Desvío Cinta
Posibilita el uso del casete.
Hay información más detallada del CASETE en el capítulo 7.

Modelo CPC
Especifica el modelo de CPC a usar
0 = CPC 464
1 = CPC 664
2 = CPC 6128
3 = CPC 464+ (?)
4 = CPC 6128+ (?)
5 = KC compact
Para usar los modelos del 3 al 5 debes especificar antes, en el fichero
CPCEMU.CFG, las imágenes ROM.

Mostrar Configuración
Permite que se muestre la configuración cuando se arranca el emulador.

Cargar Configuración
Carga un fichero de configuración guardado con "Guardar Configuración".
Algunas opciones pueden no tener efecto hasta que elijas "Reiniciar
Emulación".

Reiniciar Emulación
Con esta opción puedes reiniciar la emulación con nuevos valores después
de cargar un fichero de configuración con "Cargar Configuración".

Guardar Configuración
Guarda la configuración actual.
Ten en cuenta que no puedes sobreescribir el fichero de configuración
maestro CPCEMU.CFG.

Fichero de Pokes
¿Estás con un juego que no puedes terminar? Prueba a usar esta opción.
Si el juego está en la lista puedes hacerlo más fácil obteniendo vidas
infinitas, p.ej. También puedes ampliar la lista (CPCEMU.DBF) añadiendo
tus propios pokes. Mira en el capítulo 7 la descripción de este
fichero.

Shell al DOS
Abre un shell de DOS con mucha memoria libre, del cual puedes salir
con 'EXIT'.

Continuar
Acepta los valores introducidos y continúa con la emulación.
Puedes realizar lo mismo pulsando <INTRO> en cualquier línea que
tenga un valor.





4.2 El fichero de configuración


Aquí se muestra otra forma de configurar CPCEMU.
Por defecto, lo primero que CPCEMU hace es leer el fichero de
configuración CPCEMU.CFG.
Fíjate que cuando se arranca CPCEMU con un fichero CPCxxx.BAT, el
fichero de configuración se localiza en el directorio TMP. Esto
permite usar configuraciones definidas por el usuario incluso
cuando CPCEMU está en un CD-ROM.
A continuación se explica la estructura de este fichero de modo que
puedas usar tus propias ROMs, cambiar el idioma del teclado
permanentemente, etc...


Echa un vistazo al fichero CPCEMU.CFG:

;CPCEMU.CFG - The Configuration File for CPCEMU (v1.5)
;Marco Vieth, 20.11.1997
;
;standard configuration for CPC 464, 664, 6128, 464+, 6128+, KC compact
;
SHOW_CONFIG=0 ;should the configuration be displayed?
CPC_TYPE = 2 ;CPC 6128, if no command line parameter -t
...

Con tan sólo estas líneas puede verse cual es la estructura básica:
Los comentarios empiezan por punto y coma (";"). Las opciones se
modifican escribiendo una palabra clave seguida de "=" y de un
<valor>. El <valor> depende de la palabra clave y es una cadena o
un número. Los números pueden especificarse en notación decimal,
hexadecimal ("0x") o binaria ("%").

Una vez conocido el significado de las palabras clave podrás adaptar
los valores a tus necesidades con un editor de texto.


La mayoría de las palabras clave ya las conoces por el menú de
configuración.
En primer lugar la lista de todas las palabras clave ordenadas
alfabéticamente:


#ENDIF
#IFCPC
AMSDOS_DISABLED (AMSDOS_Desactivado)
AMSDOS_SPEEDUP (AMSDOS_Acelerado)
BREAK_MASK (Máscara_Ruptura)
COLOUR_SCREEN (Monitor_Color)
COMPANY_NAME (Fabricante)
CPC_TYPE (Modelo_CPC)
DATA_FILE
DRIVE_A
DRIVE_A_AUTOSTART
DRIVE_A_SIDE
DRIVE_A_WRITEPROT
DRIVE_B
DRIVE_B_AUTOSTART
DRIVE_B_SIDE
DRIVE_B_WRITEPROT
EMS_ENABLED (EMS Activada)
EMULATION_DELAY (Retardo Emulación)
EMULATION_SPEED (Velocidad Emulación)
HELP_FILE
INTERRUPT_FREQUENCY (Frecuencia Interrupción)
INTERRUPT_RESUME (Reanudar Interrupción)
JOY0_CALIBRATE (Calibrar JOY0)
JOY1_CALIBRATE (Calibrar JOY1)
KBD_LANGUAGE (Idioma Teclado)
LANGUAGE (Idioma)
MOUSE_ENABLED (Ratón Activado)
MULTIMODE_UPDATE (Actualizar Multimodo)
PALETTE_CHANGE (Cambio Paleta)
POKE_DATABASE (Fichero de Pokes)
PPI_50HZ (PPI 50Hz)
PPI_EXP_SIGNAL (PPI Señal Expansión)
PRINTER
RAM_SIZE (Tamaño RAM)
REALTIME (Tiempo Real)
ROM_BLOCK
ROM_PATH
SB_DELAY (Retardo SB)
SB_DELAY0 (Retardo0 SB)
SB_DMA_BUF (Buffer DMA SB)
SB_SAMPLE_RATE (Vel Muestreo SB)
SB_STEREO (SB Estéreo)
SCREEN_OFFSET (Desplazar Pantalla)
SHOW_CONFIG (Mostrar Configuración)
SNAPSHOT
SOUND_DEVICE (Dispositivo Sonido)
SOUND_ENABLED (Sonido Activado)
TAPE_BYPASS (Desvío Cinta)
TAPE_PATH
TMP_PATH
VIDEO_MODE (Modo Video)
VSYNC_POSITION (Posición VSYNC)


En segundo lugar el significado de las nuevas palabras clave:


- #ENDIF, #IFCPC
Instrucciones de control para la configuración condicional dependiendo
del CPC deseado:
#IFCPC <modelo de CPC> ... #ENDIF
Para <modelo de CPC> son válidos todos los valores de "CPC_TYPE"
(Modelo_CPC).
En consecuencia sólo se necesita un fichero de configuración para
todos los CPCs.
Los ficheros batch CPC464.BAT, CPC664.BAT y CPC6128.BAT seleccionan
el modelo deseado mediante parámetros en la línea de comandos. Estos
se explican en la sección siguiente.

- DATA_FILE = "<path+nombre de fichero>" (Fichero de Datos)
Especifica el fichero de datos (CPCEMU.DAT).

- DRIVE_A = "<path+nombre de fichero>" (Unidad A)
Indica el path donde se encuentran las imágenes de disco. Si se
especifica un nombre de fichero junto al path, éste se insertará
automáticamente en la unidad A.
La sección 3.2.1 explica como Cargar y Guardar en Disco.

- DRIVE_A_AUTOSTART = 0,1 (Unidad A Autoarranque)
Cuando se inserta una imagen de disco se ejecuta automáticamente el
primer programa BASIC que haya en el disco. Si existe DISC.BAS en el
disco será éste el que se ejecute.
Puedes utilizar la orden |DIR del AMSDOS para mirar cuál el el primer
programa BASIC.

- DRIVE_A_SIDE = 0,1 (Unidad A Cara)
En los formatos de doble cara cuando se selecciona la cara 1, se inserta
la cara (B).

- DRIVE_A_WRITEPROT = 0,1 (Unidad A Protección contra Escritura)
La imagen de disco se inserta protegida contra escritura, por tanto
es de sólo lectura.
Esto viene bien si la imagen de disco está en un soporte de sólo lectura
(p.ej. CD-ROM).

- DRIVE_B = "<path+nombre de fichero>" (Unidad B)
Lo mismo que en DRIVE_A, pero para la unidad B.

- DRIVE_B_AUTOSTART = 0,1 (Unidad B Autoarranque)
Lo mismo que en DRIVE_A_AUTOSTART, pero para la unidad B.

- DRIVE_B_SIDE = 0,1 (Unidad B Cara)
Lo mismo que en DRIVE_A_SIDE, pero para la unidad B.

- DRIVE_B_WRITEPROT = 0,1 (Unidad B Protección contra Escritura)
Lo mismo que en DRIVE_A_WRITEPROT, pero para la unidad B.

- HELP_FILE = "<path+nombre de fichero>" (Fichero de Ayuda)
Especifica el path y nombre del fichero de ayuda (CPCEMU.HLP)

- JOY0_CALIBRATE = <xcen>, <ycen>, <xdead>, <ydead>
Sirve para definir un calibrado de tu joystick analógico.
Utiliza los valores mostrados después de calibrar el joystick en el
menú de configuración (mira la sección 4.1, Calibrar_JOY0)
Esta palabra clave requiere 4 valores. Debes especificarlos todos
siempre. Poniendo los 4 valores a cero significa que no está
calibrado.

- JOY1_CALIBRATE = <xcen>, <ycen>, <xdead>, <ydead>
Lo mismo que en JOY0_CALIBRATE.

- POKE_DATABASE = "<path+nombre de fichero>"
Especifica el fichero de pokes (CPCEMU.DBF).

- PRINTER = "<path+nombre de fichero>" (Impresora)
Indica el fichero de impresora donde se vuelcan todas los datos
dirigidos a la impresora.
Este fichero se borra cada vez que se inicia la emulación.
Al salir del emulador puedes imprimirlo con
'COPY <nombre de fichero> prn:'.
Puedes usar la impresora directamente con PRINTER="prn".

- ROM_BLOCK = <número de ROM>, "<nombre de fichero>", <posición de ROM>
(Bloque ROM)
Indica qué ROM ha de cargarse y dónde.
Repite esta línea para cada ROM que quieras cargar.
El número máximo de ROMs son unas 20, usando EMS.

- <número de ROM> es el número asignado a la ROM, esto significa que se
selecciona mediante 'OUT &DF00,<Número ROM>' .
Los valores posibles son los siguientes:
0 : ROM de primer plano (p.ej. BASIC)
1 - 251 : ROMs de segundo plano. En un CPC 664/6128 las ROMs
1-15 se inicializan con el reset automáticamente
(en un CPC 464 sólo las 1-7).
La ROM del AMSDOS lleva siempre el número 7.
255 : ROM baja (p.ej. OS; sólo lleva este número en el
emulador).
- <nombre de fichero> es un fichero que se encuentra en el directorio
ROM_PATH, que es donde se hayan todas las ROMs.

- <posición de ROM> normalmente es 0. Si un fichero contiene más de una
ROM, ésta es la posición de la ROM deseada 0, 1, 2, ...
ROM_BLOCK = 255, "CPC6128.ROM", 0
ROM_BLOCK = 0 , "CPC6128.ROM", 1
La ROM baja y la ROM de primer plano se cargan una después de la
otra desde el mismo fichero.

- ROM_PATH = "<path>" (Path ROM)
Indica el path de las imágenes ROM. En el fichero de configuración
este path se especifica como ".\ROM". Las ROMs como ficheros
individuales se definen con la palabra clave ROM_BLOCK.

- SNAPSHOT = "<path+nombre de fichero>"
Indica el path para los snapshots. Si se especifica un nombre de
fichero junto al path, éste snapshot se cargará automáticamente al
arrancar el emulador.
Para información más detallada mira la sección 3.2.3.

- TAPE_PATH = "<path>" (Path Cinta)
Indica el path de los ficheros de cinta. En el fichero de configuración
este path se especifica como ".\TAPE".
Para información más detallada mira la sección 3.2.2.

- TMP_PATH = "<path>" (Path TMP)
Especifica el path para ficheros temporales. Tiene relevancia sólo si
se seleccionan ficheros dentro de un archivo ZIP y CPCEMU tiene que
extraerlos con PKUNZIP.




4.3 Parámetros en línea de comandos


Como ya sabrás por otros programas también es posible usar parámetros
en la línea de comandos con CPCEMU. De momento sólo hay unos pocos.


Ejecuta CPCxxx.BAT con las siguientes opciones:
/f : usa el modo rápido (por defecto)
/s : usa el modo lento
/d : usa el modo de depuración, explicado en el capítulo 7
/x : desactiva el uso de EMS
/c <file>: especifica otro fichero de configuración, sustituyendo
al usado por defecto CPCEMU.CFG. Ver sección 4.2.
/t <modelo>: indica el modelo de CPC deseado 464, 664, 6128, 464+,
6128+ o KC compact con /t 0 a /t 5 respectivamente.
/h : muestra una pantalla de ayuda

La opción "/d" se usa automáticamente cuando se especifica una opción
desconocida.
En lugar de "/" puede usarse también "-", como en UNIX.




5. Transferencia de datos CPC <-> PC


¿Qué se puede hacer con un buen emulador si no se tienen programas para el,
o si no se vislumbra la posibilidad de traspasar programas del CPC al PC?
En el capítulo 6 (Suministro, ...) se listan algunos sitios ftp donde puede
encontrarse software para el CPC.
Este capítulo trata de la transferencia de software del CPC al PC.
Se describen algunas utilidades para los distintos métodos de realizar
esto (disco, mediante interface paralelo o serie).




5.1 El disco como intermediario


Esta es la forma más simple de transferir software del CPC al PC. Lo
único que hace falta es una segunda unidad de discos del CPC con el
tamaño adecuado. Tamaño adecuado significa que los discos que use deben
encajar también en la unidad del PC. (Si no es así, aún se podría
intentar conectar una unidad de 3" al PC.) Al PC se le engaña, para que
reconozca los discos formateados con el CPC, con una utilidad llamada
CPCTRANS.



5.1.1 El programa para transferencia de discos CPCTRANS


He desarrollado CPCTRANS para crear imágenes de disco a partir de
discos del CPC.
Tiene soporte para formatos de CPC estándares, así como para formatos
Vortex de doble cara.
¡CPCTRANS no está preparado para transferir discos protegidos contra
copia!
Si se ejecuta CPCTRANS sin parámetros se visualizará una breve ayuda.
CPCTRANS es similar a la orden COPY del DOS:
'CPCTRANS <origen> <destino> <opciones>'.
Ejemplos:
'CPCTRANS B: DISK1.DSK' copia el disco de la unidad B a la imágen de
disco DISK1.DSK. Si ésta no existe se creará.
'CPCTRANS DISK1.DSK B:' escribe la imagen de disco de vuelta al disco
de la unidad B.

Este primer ejemplo sólo funciona con el formato DATA.
Para copiar otros formatos hay que usar una opción:
/f 0 : formato DATA (por defecto)
/f 1 : formato DATA, doble cara
/f 2 : formato SYSTEM
/f 3 : formato SYSTEM, doble cara
/f 4 : formato VORTEX, doble cara
/f 5 : desconocido, CPCTRANS intenta averiguarlo
/f 6 : +3DOS
Fíjate que hay un espacio entre "/f" y el número.
Si usas un formato DATA o SYSTEM de doble cara podrás elegir la cara
A o B en el menú de disco (3.2.1).

Cuando se vaya a escribir una imagen de disco de vuelta, ¡el disco que
está en la unidad debe tener el mismo formato! Para formatear con
formatos simples puede usarse 22DISK, explicado en la siguiente sección.

Para copiar la cara B de un disco se usa la opción "/s 1"
Con 'CPCTRANS B: DISK1.DSK /s 1' se copia sólo la cara B del disco,
con 'CPCTRANS DISK1.DSK B: /s 1' se escribe de vuelta.

La opción "/v" activa la "verificación", de esta forma CPCTRANS
comprueba que la copia es correcta. Por supuesto esto hace más lento
el proceso, pero se incrementa la seguridad.

La opción "/t <número>" indica el númbero de pistas a copiar.
Normalmente es 40 pistas, sólo en los formatos VORTEX es de 80.

La opción "/q" (formateo rápido) es una característica con la se puede
formatear una imagen de disco, en lugar de copiar datos en ella.
No obstante se debe especificar primero una unidad válida como
parámetro.
Ejemplo:
'CPCTRANS a: SYSTEM.DSK /f 2 /q' formatea SYSTEM.DSK como imagen
de disco con formato SYSTEM.



5.1.2 La utilidad de formateo y copia 22DISK por SYDEX


Este programa se distribuye como shareware. Con las definiciones
adecuadas se pueden usar ¡casi todos los formatos CP/M!
Por desgracia sólo los formatos del CPC no están incluídos con la
versión de evaluación de 22DISK. Por tanto he definido yo los formatos
en el fichero CPMDISKS.DEF. Este fichero lo encontrarás en el
subdirectorio UTILITY.
¿Qué es lo que se puede hacer con 22DISK?
Pueden transferirse ficheros individuales entre formatos DOS y no DOS
de un lado para otro, formatear discos y cosas por el estilo.
Copia los ficheros del CPC en el sirectorio TAPE. Mira en la sección
3.2.2 la explicación de cómo cargarlos.



5.2 El interface paralelo


Si no tienes segunda unidad en tu CPC, puedes realizar las transferencias
mediante el interface paralelo. La idea original proviene de Gilles
Molinari, además también ha escrito algunos programas en Turbo Pascal.
Pero probablemente perteneces al grupo de usuarios que no tienen un
compilador de Turbo Pascal en su CPC, por lo que de poco te serviría
tener el código fuente en Pascal. Debido a esto he re-escrito las
utilidades en Locomotive BASIC, y las he apliado añadiendo la dirección
PC->CPC.
Por tanto es posible transferir ficheros entre el CPC y el PC ¡de un lado
para otro!
El CPC y el PC se enlazan mediante sus respectivos interfaces paralelos.

Si tienes un CPC 6128 con conector Centronics y lo comparas con el de
impresora te darás cuenta que el CPC y el PC se enlazan perfectamente
¡usando un cable de impresora de PC estándar! Un momento, no hagas eso
ahora, continúa leyendo.
Parece ser que únicamente los CPC Schneider incluían conector Centronics.
Si tienes un Amstrad CPC 6128 con conector simple, o un CPC 464, 664,
usa el diagrama que hay al final de esta sección.

Lo primero de todo es superar dos obstáculos:
1. construir un adaptador simple
2. meter un pequeño programa en el CPC

¡Alto! ¡No te saltes lo demás!

Ambos pasos son muy fáciles, ya que
1. es posible realizarlo sin tener que soldar y
2. es realmente muy corto (unas 30 líneas de BASIC)

Para el paso 2.
El programa que necesitas se llama CPCREC.BAS y está en el directorio
UTILITY.
Está guardado en ASCII, por lo que puedes imprimirlo sin problemas y
teclearlo en el CPC.
Su cometido es parecido al de una cuerda fina que se mete en una tubería
para luego servir de guía a un cable grueso.
En nuestro caso, la cuerda fina es CPCREC.BAS, que sirve para recibir
ficheros desde el PC.
Con esta pequeña utilidad se puede transferir CPCPARA.BAS (el cable
grueso) al CPC. Con CPCPARA.BAS se puede recibir y enviar. Por lo que
una vez trasferido al CPC ya no hará falta para nada CPCREC.BAS.
Por lado del PC se usa PCPARA.EXE, también incluído en el directorio
UTILITY.

Antes de que teclees CPCREC.BAS echa un vistazo al paso 1:


El adaptador paralelo

Hace falta tener un adaptador entre el cable de impresora del PC y el
conector de impresora del PC.
La forma más sencilla es usar una caja para cableado de tipo RS-232, la
cual tiene un conector D-Sub macho de 25 pines (clavija) y un conector
D-Sub hembra de 25 pines (enchufe).
Puede realizarse cualquier tipo de conexión entre ambos lados conectando
cables cortos en esta caja. Normalmente esta caja se usa - como su propio
nombre indica - para adaptar interfaces RS-232. Las conexiones en serie
no suelen funcionan a la primera, para que sepas.
Este adaptador lo usamos en sentido inverso, esto es, la clavija es para
el lado del PC y el enchufe para el cable de impresora.

Conéctalos ahora:

Clavija para el conector de Enchufe para el cable de
impresora del PC impresora
(lado izquierdo): (lado derecho):

Pin 2 --------------- Pin 11
Pin 10 --------------- Pin 8
Pin 11 --------------- Pin 1
Pin 12 --------------- Pin 7
Pin 13 --------------- Pin 6
Pin 15 --------------- Pin 5
Pin 19 --------------- Pin 19


Como puedes ver no hacen faltan los 25 cables, sólo 7 de ellos.

Aunque la caja para cableado es barata, si se compra en una empresa de
electrónica de venta por correo, puede salir más barato todavía usando
una caja para jumper. En este caso habría que soldar los cables. La forma
más barata es comprar una clavija D-Sub de 25 pines, un enchufe D-Sub de
25 pines, una caja y algunos cables.

En este momento asumo que ya has conectado ambos ordenadores y que tienes
el programa CPCREC.BAS en el CPC.
¿Qué es lo siguiente?

1. En el CPC : Ejecuta CPCREC.BAS (después de habelo guardado)
2. En el PC : Ejecuta 'PCPARA /s CPCPARA.BAS'

La cosa se pone interesante, si no aparece ningún mensaje de error en el
PC es que todo funciona correctamente, el fichero debe estar en el CPC.

Si el PC no envía nada y da un mensaje de error, es posible que la
conexión no este bien.
Si está enviando ("Sending block xx"), pero aparecen mensajes de error
de vez en cuando, puede que tu PC sea, bien demasiado rápido, bien
demasiado lento. En la dirección PC->CPC es muy importante la medición
del tiempo, tenlo en cuenta.
En mi 386/33 tengo que quitar la memoria EMS, de lo contrario es
demasiado lento. En un ordenador muy rápido podría hacer falta usar el
botón de turbo.
Utiliza el programa bajo DOS puro, ni OS/2 ni Windows.

Si no funciona en absoluto comunícamelo.
Mientras tanto puedes ir tecleando el programa CPCPARA.BAS, el cual es
algo más largo. La dirección CPC->PC funciona siempre, también bajo OS/2,
debido a que es prácticamente lo mismo que imprimir. El PC se comporta
como una impresora.

Ahora asumo que ya tienes CPCPARA.BAS en el CPC.
Hay que transferir ficheros del CPC al PC de la siguiente forma:
1. En el PC : Ejecuta 'PCPARA /r'.
2. En el CPC : Ejecuta CPCPARA, selecciona S)end (Enviar) e introduce
todos los ficheros que quieras transferir. (Ejecuta 'PCPARA /r' para
cada fichero que quieras transferir, CPCPARA se ejecuta en un bucle
sin fin.)


Po tanto, usa PCPARA de la siguiente manera:
- PCPARA /r : inicia PCPARA en modo de recepción
- PCPARA /s <fichero> : envía el <fichero> al CPC, si usas 'TRM:' como
fichero entrarás en modo terminal.

Todos los programas del directorio UTILITY muestran una pequeña
descripción de sus opciones si los ejecutas sin especificar ningún
parámetro.


AVISO:
Aún cuando la construcción es muy simple, no puedo garantizar que no
se pueda dañar algo, si el puerto de impresora del CPC queda dañado
después de todo es una pena y más bien un accidente desafortunado.
Es muy posible que también se hubiera dañado por la simple conexión
de una impresora.
Por ejemplo, tengo conocimiento de un antiguo usuario de CPC cuyo
teclado dejó de funcionar correctamente de un día para otro.
Después de repararlo le dijeron que no debía conectar el joystick
¡mientras el ordenador estaba encendido!
(¿¡¿ No sé, yo siempre lo he hecho así ?!?)

Donde estaba:
Yo he construído el adaptador con éxito. Y algunas veces incluso me
he "olvidado" de insertar el adaptador en la conexión y no he tenido
ningún problema.





Diagramas por David Chapeau, en caso de que tu CPC no tenga conector
Centronics:

34 <- - - - - - - - 18 \
______________________ |
| ________________ | |
| |________________| | - | ---> Conector de impresora (Hembra) al CPC
|______________________| |
|
17 < - - - - - - - - 1 |
|
|||||||||||||||||| |
|||||||||||||||||| \
|||||||||||||||||| > Cable "CPC 6128 a DMP 2160"
|||||||||||||||||| /
|||||||||||||||||| |
|
1 - - - - - - - - > 18 |
________________________ |
\ ______________ / |
\ |______________| / - | ---> Conector Centronics (Macho)
\__________________/ |
|
19 - - - - - - - -> 36 /



18 < - - - - - - - - 1 \
________________________ |
\ ______________ / |
\ |______________| / - | ---> Conector Centronics (Hembra)
\__________________/ |
|
36 <- - - - - - - - 19 |
|
|||||||||||||||||| |
|||||||||||||||||| \
|||||||||||||||||| > Adaptador Paralelo del PC
|||||||||||||||||| /
|||||||||||||||||| |
|
1 - - - - - - - - > 13 |
________________________ |
\ .................. / |
\ ................ / - | ---> Conector Sub-D (Macho) al PC (LPT1)
\__________________/ |
|
14 - - - - - - - -> 25 /


13 < - - - - - - - - 1 \
________________________ |
\ .................. / |
\ ................ / - | ---> Conector Sub-D (Hembra)
\__________________/ |
|
25 <- - - - - - - - 14 |
|
|||||||||||||||||| |
|||||||||||||||||| \
|||||||||||||||||| > "Caja para cableado" RS 232
|||||||||||||||||| /
|||||||||||||||||| |
|
1 - - - - - - - - > 13 |
________________________ |
\ .................. / |
\ ................ / - | ---> Conector Sub-D (Macho) al PC (LPT1)
\__________________/ |
|
14 - - - - - - - -> 25 /



Conector Centronics Centronics Conector Conector Conector
Impresora (Hembra) (Macho) Sub-D Sub-D Sub-D

1 --------- 1 1 --------- 1 11 --------- 2
. . 8 --------- 10
. . 1 --------- 11
. . 7 --------- 12
17 --------- 17 14 --------- 14 6 --------- 13
18 --------- 19 19 --------- 19 5 --------- 15
. 21 --------- 20 19 --------- 19
. 23 --------- 21
. 25 --------- 22
34 --------- 35 27 --------- 23
29 --------- 24
30 --------- 25
31 --------- 16
32 --------- 15
33 --------- 18
36 --------- 17



Velocidad de transferencia CPCPARA -> PCPARA (v1.1):

Tiempo para transferir un bloque de 0x4000 Bytes del CPC al PC con el
adaptador paralelo:

Origen en el CPC: bytes/s: bit/s:
Fichero de disco: 1600 12800

Bloque de memoria: 2240 17920

Bloque de memoria, sin ints.: 2445 19560
(poke &b941,&c9 en el CPC 6128)

El bloque enviado estaba controlado en BASIC (dentro de CPCPARA):
defstr a:a="test.$$$":call sstr,@a
a=string$(&80):for i=1 to &80:call sstr,@a:next:call sbyte,0:stop


Puedes leer información más detallada acerca del adaptador paralelo en
el capítulo 7.



5.3 El interface serie


Si posees un interface serie en tu CPC desde luego puedes usarlo
para transferencias de datos al PC.



5.4 Otras posibilidades


Hay otros métodos más exóticos de poner el software en el PC.

- Conectar la unidad de 3" al PC. Algunos modelos (antiguos) deberían
encajar en un conector de 5.25".

- Mediante un desvío hacía el Spectrum+3: leer el disco de 3" en el
Spectrum+3, convertirlo al formato del Spectrum y usar una utilidad
para leerlo en el PC. Esta utilidad está disponible en el emulador
de Spectrum Z80 hecho por Gerton Lunter.

- Cuando es necesario obtener la ROM tu mismo, alguien me comentó este
método:
El quitó el chip de la ROM del CPC y lo colocó en lugar de la BIOS de
la VGA. Con un pequeño programa fue capaz de leer el contenido.

- ¿Tal vez tú puedas encontrar otras formas?




6. Suministros, Soporte y Reconocimientos


En este capítulo podrás averiguar dónde conseguir software para el CPC,
y a quién preguntar en caso de dudas. Más aún, hago mención de otros
emuladores para el Amstrad.


6.1 ¿Dónde conseguir software para el CPC?


Si tienes acceso a Internet esto no supone ningún problema.
De forma parecida a los emuladores de Spectrum existen una serie
de colecciones "anónimas" donde puedes obtener software para el CPC
mediante FTP o WWW.


FTP

- ftp.nvg.unit.no:/pub/cpc, gracias a Arnt Gulbrandsen por
crear el lugar, y a Noel Llopis por su mantenimiento,
una de las colecciones más grandes de programs para el CPC;
envía lo que tengas a /pub/cpc/incoming

- sunshine.informatik.uni-wuerzburg.de:/pub/joscho/cpcemu
mirror de ftp.nvg.unit.no. Enviar preguntas, comentarios y demás a
joscho@informatik.uni-wuerzburg.de
Si tienes problemas accediendo a Noruega puedes intentarlo con éste.

- ftp://ftp.lip6.fr/pub/amstrad, gracias a Remy Card,
ftp://ftp.lip6.fr/pub/amstrad/frontend/menu.htm (HTML)
- todas las preguntas concernientes a este sitio deben dirigirse a
roussin@genesis8.frmug.org
Todos los ficheros provienen de 'Genesis the 8bit generation BBS'
(ver más abajo)

- ftp.demon.co.uk:/pub/cpm, gracias a Paul Martin
ficheros del CP/M específicos para el amstrad
Paul Martin (pm@nowster.demon.co.uk) enviará a cualquiera, que pueda
probar poseer una copia original del disco Amstrad CP/M Plus, las
imágenes ROM binarias de sus "CP/M Plus ROMs" gratuitamente.

- oak.oakland.edu : /Simtel/msdos/emulator/cpcemu15.zip

- otros mirrors de Simtel:
ftp.ibp.fr : /pub3/pc/SimTel/msdos/emulator/
ftp.demon.co.uk : /simtel/msdos.
ftp.uni-paderborn.de


WWW

- http://andercheran.aiind.upv.es/~amstrad
and an UK mirror: http://www.dcs.warwick.ac.uk/~divine/~amstrad/

- ...



BBS

- Aspects (2:250/107) : +44 1617920260, en el Reino Unido, sysop Dave
Gorski, V32b, CPCEMU v1.2, programas (la mayoría en basic),

- Genesis the 8bit generation (2:320/220) : +33 1 53 95 32 43, en
Francia, hasta VFC, sysop : Emmanuel Roussin.
últimas versiones de emuladores, ROMs qwerty y azerty del 6128,
freeware, shareware, PD, revistas en disco, pokes, soluciones, demos
y unos cuantos juegos comerciales (con el permiso de sus respectivos
autores).
De momento hay unos 29,5 Mo de programas comprimidos en zip. Los
usuarios de fido pueden hacer "file request" de ALLFILES.ZIP, y a
partir de ahí lo que sea de interés.

- ZNODE 51 : + 49 89 961 45 75, en Alemania, desde las 15:00 hasta las
3:00 CET (MEZ), hasta V32b, ficheros de CPC

- ...



6.2 Noticias, intercambio de experiencias


¿Quieres tener siempre la última versión de CPCEMU?
¿Quieres estar informado si se publica una nueva?

De momento se ha puesto en marcha un grupo de noticias ¡específicamente
para el CPC!
Se llama

comp.sys.amstrad.8bit.

En el encontrarás charlas acerca de los CPCs (y también del CPCEMU),
y puedes comentar tus experiencias con los CPCs.

Hay una FAQ (preguntas más frecuentes) disponible en este grupo
(ftp://ftp.lip6.fr/pub/amstrad/amstrad.htm, FAQ en HTML).

Si no puedes leer el grupo de noticias por cualquier razón, escríbeme
un email.
Encontrarás mi dirección en la próxima sección.
Por supuesto también puedes usar correo normal para hacerme preguntas
(o a David, mirar más abajo), pero por favor no te olvides del franqueo
de vuelta.


Si me envías una contribución me sentiré obligado a enviarte la última
versión por lo menos una o dos veces.




6.3 Si tienes preguntas o sugerencias



Puedes escribirme directamente a:

Marco Vieth
Auf dem Uekern 4
D-33165 Lichtenau
Alemania

Teléfono: +49-5292-1366 (sólo fines de semana)

Internet: cpcemu@hotmail.com
(ali@uni-paderborn.de)

Como probablemente ya habrás deducido, leyendo mi dirección de
Internet, he estudiado Ciencia de las Computadoras en la Universidad
de Paderborn. Terminé en la primavera de 1997.



En caso de que hables inglés también puedes escribirle a David Cantrell:

David Cantrell
116, London Road
Bexhill-on-sea
East Sussex
TN39 4AA
Inglaterra

Phone: +44-1424-221015

Internet: david@diablo.eimages.co.uk
ftp://ftp.eimages.co.uk/users/davidc/cpc/
http://www.ThePentagon.com/NukeEmUp/uaug


David se ha ofrecido a ayudarme a contestar el "montón de cartas".
El ha escaneado el manual de firmware del CPC, de forma que cualquiera
puede obtenerlo en formato electrónico.




Aunque este programa es Freeware aceptaría cualquier clase de apoyo,
financiero o técnico.
(unos 30-50 Marcos alemanes sería lo apropiado.)
(Eso equivale a unos 20-33 Dólares americanos o 13-21 Libras esterlinas.)

Aún en el caso de que no se me envíe dinero, suelo reponder a todas las
cartas e intento recordar todas las sugerencias (estoy seguro de que
David hace lo mismo).
Por eso no tengas reparos en enviarme tus comentarios.



6.4 Otros emuladores del Amstrad CPC


A comienzos de 1994 pensaba que CPCEMU era el único emulador para el
Amstrad CPC. Ahora tengo conocimiento de otros tres:

- SIMCPC:
Presumiblemente el primer emulador de CPC escrito.
Emulador de CPC para PC/XT/AT (c) 1989, 90 por GHE, Aachen.
Sólo en blanco y negro, pero con ROMs adicionales;
tan sólo una "muestra de humor".

- CPC2PCxx:
En desarrolo desde Octubre de 1993 por Paco Lopez (España), y está
disponible ahora en algunos sitios. Está escrito completamente en
modo protegido y usa el mismo formato de disco que CPCEMU.

- CPE:
En desarrolo por Bernd Schmidt. Mediante el uso de un modo de video
especial de 50 hertzios, algunos bloques de colores están reproducidos
exactamante.
Un CPE2 especial de 256 colores muestra bloques de colores con más
de 50 hertzios.
También soportado: Modos múltiples, overscan.
Ultima versión: v5.2.



6.5 Planes para futuras versiones de CPCEMU



- overscan
- mejoras en modos múltiples
- centrado de pantalla en modos de alta resolución
- scroll por hardware rápido
- los teclados US no tienen "<>", ALTgr
- simular el puerto de expansión del CPC
- cargar discos del CPC directamente
- cargar cintas del CPC directamente (mediante el puerto de impresora
o la tarjeta Soundblaster)
- transferir imágenes de disco enteras mediante el adaptador paralelo
- control de volumen para la Soundblaster
- emulación de digiblaster
- teclas de joystick redefinibles
- usar el ratón como joystick
- autodetección de .SNA y .DSK

Puede que nunca lo realice debido a que tengo trabajo "de verdad"...



6.6 Reconocimientos


- Agradecimiento especial para Juergen Weber, no sólo por muchos
consejos y sugerencias, también, y especialmente, por la rápida
emulación del Z80 de su emulador de CP/M ZSIM.

Juergen G. Weber
Wiesentalstrasse 1
74523 Schwaebisch Hall
Alemania

email: weberj@dia.informatik.uni-stuttgart.de


- También gracias a Bernd Schmidt. Debido a que Bernd ha escrito su
propio emulador hemos tenido los mismos problemas muchas veces. Sólo
si intentas escribir un emulador de este tipo tú mismo puedes hacerte
una idea de los detalles que causan problemas.
No hay información del CPC disponible, lo que condiciona enormemente.
La mayoría de comportamientos del CPC hay que detectarlos por medio
de experiementos con un CPC real.

- Gracias a Ulrich Doewich por incluir sonido para la Gravis UltraSound
en el emulator y leerse completamente la documentación. Ulrich ha
escrito una herramienta similar a CPCTRANS. Busca CPDREAD con el cual
se pueden leer también discos protegidos contra copia.

- Gracias a Emmanuel Roussin por su esfuerzo infatigable por el CPC.
El realizó los pasos básicos para crear el grupo de noticias y me
prestó su Multiface II durante meses, de modo que pudiera incluirlo
en el emulador de alguna forma.

- Gracias a Arnt Gulbrandsen por el fuente de su JPP, donde encontré
ideas para el controlador de teclado y la rutina de joystick.
A propósito, JPP es un emulador de Spectrum muy bueno.

- Gracias a Martin Zacho por aportar una rutina de joystick.

- Gracias a Fernando J. Echevarrieta Fernandez por apuntar el primero
que la versión v0.8 no emulaba un CPC 664.

- Gracias a Gilles Molinari por su programa para transferencia por el
puerto paralelo.

- Gracias a Paul Martin por corregir la documentación en Inglés de la
versión 1.0.

- Gracias a Mark Haigh-Hutchinson por su esfuerzo en hacer los programas
de la compañía Vortex de dominio público.

- Gracias a Martin Young por sus excelentes ideas de como emular un Z80.

- Gracias a Linh Hsiesh por muchas ideas para mejoras, la mayoría de las
cuales se habrán incorporado ya.

- Gracias a Fred Harris por escribir una carta a AMSTRAD acerca de
las ROMs.

- Gracias a Amstrad, especialmente a Cliff Lawson por permitirme
distribur la ROM del BASIC. Amstrad retiene el copyright.

Amstrad plc, Brentwood House,
169 Kings Road, Brentwood,
Essex CM14 4EF

- Gracias a Richard Clayton de Locomotive por permitirme distribur
la ROM del Firmware. Locomotive retiene el copyright.

- Y gracias a los usuarios por enviarme sugerencias o aportar ideas.
Sin ellos CPCEMU tal vez no habría alcanzado la versión 1.0




6.7 Marcas registradas


CP/M, CP/M 2.2 y DRDOS son marcas registradas de Digital Research.
MS-DOS es marcas registrada de Microsoft.
IBM PC, PC-XT, PC-AT y OS/2 son marcas registradas de International
Business Machines.
CPC, AMSDOS por Amstrad,
BORLAND C, TASM (Turbo Assembler) por Borland,
22DISK por SYDEX
Soundblaster por Creative Labs
...





------------------------------------------------------------------------------



7. Información Interna de CPCEMU



Este capítulo da información más detallada y contesta la pregunta,
"¿POR QUE haría yo esto o aquello ahora?"
También se describe el potente menú de depuración. Asimismo encontrarás
las estructuras de las imágenes de disco y los ficheros snapshot.
Esta información no está orientada a los usuarios de CPCEMU sin
conocimiento de los interiores de un CPC. Podría ser útil alguna vez.
He colocado esta información al final, incluso después de las marcas
registradas, en un intento por mostrar su "relativa insignificancia".
Si no te gusta leer frases ininteligibles e información desordenada,
¡no sigas leyendo!
Ve directamente al Apéndice.



AVISO: ¡ Continúa leyendo a tu propio riesgo !





7.1 Lista de contenidos para el capítulo 7




7.2 Minidescripción de las características Internas de CPCEMU



¿Qué grado de compatibilidad tiene CPCEMU realmente?



7.2.1 La CPU Z80 (El Procesador)


+ Todas las instrucciones del Z80 están emuladas, incluyendo las
conocidas como ilegales.
Puedes elegir entre una emulación lenta del Z80 escrita en C y una
emulación del Z80 rápida escrita en ensamblador por Jurgen Weber.
Mediante la técnica COCPU cada instrución del Z80 se emula
simultáneamente por la versión lenta y la rápida, de esta forma se
ralentiza mucho, pero comparando los registros después de cada
instrucción se han encontrado muchos errores. Obviamente esto
se ha usado sólamente durante el desarrolo del programa.
+ Instrucciones adicionales 'ED FC xx' sólo las conoce el emulador.
Entre ellas la de ruptura de usuario 'ED FC FC USER &BCFC'.

- No hay un temporizador exacto de las instrucciones sino calibración
de tiempo en el modo tiempo real.



7.2.2 El Gate Array (El "Co-Procesador")


+ Los 32 colores del CPC (27 diferentes)
+ Los tres modos de video (X x Y x COLORES):
modo 0 = 160x200x16
modo 1 = 320x200x4
modo 2 = 640x200x2
+ Banking de ROM (16KB OS, 16KB BASIC, 16KB AMSDOS y ROMs adicionales)

- Parpadeo en los haces de colores



7.2.3 El PAL (Programmable Logic Array)


El PAL se encuentra lógicamente en la misma dirección que el gate array
pero en hardware distinto a éste.

+ Banking de RAM (128 KB, hasta 576 KB) con memoria EMS o convencional.
Con emulación mediante EMS los bloques se mapean por hardware, de modo
que la velocidad es adecuada. CPCEMU proporciona una RAM de expansión
compatible Dk'tronics de hasta 576 KB.

- Sin EMS, el banking de RAM es muy lento, puesto que los bloques de
memoria han de moverse de aquí para alla en la memoria base del PC.
Además, tan sólo se dispone de 128 KB RAM.




7.2.4 El CRTC 6845 (Cathode Ray Tube Controller)


+ Base y desplazamiento de pantalla para scroll por hardware
+ Varios tamaños de pantalla desde 0x0 hasta 80x25 con los registros
1 y 6 del CRTC
+ Direfentes tamaños de carácteres (1..7) con el registro 9 del CRTC
+ Múltiples modos (usan otros registros)

- El Overscan no está aún implementado



7.2.5 El PIO 8255 (Programmable Input Output)


+ Teclado (connectado al PSG)
+ Emulación de VSYNC: Un bit que se activa entre dos interrupciones
durante un refresco de pantalla. Puedes cambiar su posición.
+ El casete es muy rápido, ignorar la ROM permite acceder a cualquier
fichero del DOS.

- El bit VSYNC está activado demasiado tiempo
- Los puertos de casete no están emulados, por lo que la mayoría de los
programas que acceden a los puertos directamente no funcionan.


7.2.6 El PSG AY 3-8912 (Programmable Sound Generator)


+ Bien por el altavoz interno del speaker (pésimo, puesto que
los 3 canales se combinan en uno y el volumen no puede cambiarse),
o por una tarjeta GUS o Soundblaster. Cualquier sonido digital con
todo el ruido o la parte FM compatible Adlib sin ruido.

- Sin sonido digital o demasiado bajo.


7.2.7 El FDC 765 (Floppy Disc Controller)


+ Todos los comandos FDC necesarios para controlar dos unidades A y B
(incluyendo lectura/escritura de sector, búsqueda/formateo de pista,
lectura de sector-ID, ...)
Formatos de disco muy flexibles (hasta 18 sectores por pista).
Incluyendo formatos de doble cara, p.ej. VORTEX.

- No están soportados los formatos de protección contra copia
complicados.



7.2.8 El interface de impresora Centronics


+ Salida de impresora, con parche para impresoras de 8-bits, redirigida
a un fichero definido en PRINTER.




7.3 El menú de Depuración


Se muestra el juego completo de registros de la CPU y puede modificarse.
Puedes "volcar" la memoria, desensamblarla o modificarla. Puedes
cargar o guardar áreas en memoria. Y la cosa más interesante:
¡Puedes ejecutar paso a paso los programas!
(Parecido a un depurador de verdad.)


Breve descripción del menú de depuración

R)un T)race S)tep A)ssem D)ump I)nput L)oad saV)e M)ode F)ast Q)uit
AF=0000 BC=0000 DE=0000 HL=0000 IX=0000 IY=0000 SP=0000 PC=0000 IR=0000
AF'=0000 BC'=0000 DE'=0000 HL'=0000 IFF1=0 IFF2=0 IMD=0 NZ NC PO P
0000 : 01 89 7F LD BC,&7F89
-f->

La primera línea muestra los comandos disponibles, usa las letras
mayúsculas.
Las dos siguientes líneas muestran los valores actuales de los
registros del Z80.
La siguiente desensambla la instrucción que hay en ese momento en
la posición PC y la última es un indicador de espera para meter
tus comandos.
(la 'f' indica que estás usando la CPU rápida.)


Preliminares

Los parámetros entre corchetes son opcionales [opt].
Usa sólo valores hexadecimales, p.ej. <dirección> = 0000-ffff
"<ret>" indica que estás en un modo especial. Puedes pulsar <intro>
para continuar. <Cadena><Intro> mantiene este modo
(usar p.ej. b<intro>).
Las letras son comandos, muchas veces seguidos de una dirección
opcional.
Entre la letra y esta dirección debe haber un espacio o tabulador.
Sin una dirección se toma por defecto el PC (contador de programa).


Breve descripción de los commandos

R)un: (Ejecutar)
r [<dirección>] : comienza la emulación a partir de PC o de una dirección
opcional
Ejemplos:
-f-> r comienza la emulación a partir de PC
-f-> r 100 pone PC a 0x100 y comienza la emulación

T)race (trazar dentro de): (Trazar)
t [<dirección>] : ejecuta sólo la instrucción mostrada en ese momento.
Usar <intro> para continuar en este modo, y así sucesivamente.
<cadena><intro> vuelve al estado normal.
Todos los comandos de un solo paso se ejecutan en la CPU lenta (incluso
cuando se muestra "-f->"), debido a que ya no hay contador en la CPU
rápida.

S)tep (paso adelante): (Paso)
s [<dirección>] : ejecuta la siguiente instrucción.
Más bien todas las instrucciones hasta que PC se iguala a la siguiente
instrucción. Esto puede llevar mucho tiempo, p.e después de un 'Ret'.
En este caso F10 puede ser útil (como de costumbre).
Todos los comandos de un solo paso se ejecutan en la CPU lenta (incluso
cuando se muestra "-f->"), debido a que ya no hay contador en la CPU
rápida.

A)ssemble (en realidad desensamblar): (Ensamblar)
a [<dirección>] : desensambla las 16 instrucciones siguientes.
Usa <intro> para continuar en este modo, y así sucesivamente.
<cadena><intro> vuelve al modo normal.

D)ump: (Volcar)
d [<dirección>] : muestra un volcado hex/ASCII de los siguientes 256
bytes a partir de dirección (o PC).
Usa <intro> para continuar en este modo, y así sucesivamente.
<cadena><intro> vuelve al modo normal.

I)nput (modificando memoria): (Entrada)
i [<dirección>] : muestra la dirección de memoria en la que se está
en ese momento con su valor correspondiente, el cual puedes aceptar
con <intro> o cambiar con <valor-hex><intro>.
Sal de este modo introduciendo un número incorrecto como '-1':
-1<intro> .

L)oad (cargando un programa): (Cargar)
l [<dirección>] : aparece un indicador para que introduzcas un nombre
de fichero <nombre> y lo carga desde el directorio TAPE_PATH a
<dirección>
Es capaz de reconocer una cabecera AMSDOS.
Si pulsas <Intro> en el indicador aparecerá el más que conocido
menú de selección de ficheros ...
Ejemplos:
-f-> l<intro> demo<intro> :
carga fichero 'demo' al PC actual
-f-> l a000<Intro> miprog<Intro> :
carga fichero 'miprog' a la dirección 0xA000

saV)e (guardando un programa): (Guardar)
v [<dirección>] : aparece un indicador para que introduzcas un nombre
<nombre> y la longitud del bloque de memoria. Este bloque se guarda
desde <dirección> (o PC) como fichero binario en el directorio
TAPE_PATH, el cual incluye una cabecera AMSDOS.
Ejemplo:
-f-> v<intro> demo<intro> 4000<intro> :
guarda fichero "demo" desde PC con longitud 0x4000.

M)ode (cambiando el modo de video): (Modo)
m : Cambia el modo de video: visualización de registros, desensamblado
de instructiones activado/desactivado.

F)ast (seleccionando el tipo de emulación): (Rápido)
f : Intercambia la emulación rápida del Z80 (desarrollada en ensamblador
por Juergen Weber, por defecto) y la lenta (escrita en C).
El indicativo cambia a "-f->" para rápida y "-s->" para lenta.
Todos los comandos r, s, y t se refieren al tipo de emulación
elegida en ese momento.

Q)uit (saliendo del programa): (Salir)
q : sale del emulador.


Manipulación de registros

Además de los comandos de una letra puedes cambiar los valores de los
registros con la siguiente sintaxis: '<registro>=<valor-hex>'
Ejemplos:
- af=345 : pone el registro AF a 0x0345
- pc=a000 : pone le contador de programa a 0xA000

También puedes escribir '<registro><espacio><valor-hex>'.
Puedes modificar todos los registros mostrados, p.ej.
AF, BC, DE, HL, IX, IY, SP, PC, IR, AF', BC', DE', HL',
y también IFF1, IFF2 y IMD.





7.4 Gestión de la memoria



7.4.1 Una vez más: configuración de EMS


Necesitas un gestor de memoria expandida que soporte el estándar
LIM 4.0 (LIM EMS 4.0). Este gestor de memoria debe suministrar páginas
EMS extensas en cualquier región, ya que CPCEMU buscará 6 páginas
físicas en direcciones contiguas. Si el uso de EMS es posible aparecerá
un contador de memoria 'EMS xxx Bytes ok.' durante la inicialización

Se te indicó que usarás los siguientes parámetros bajo OS/2:

EMS_FRAME_LOCATION = auto
EMS_HIGH_OS_MAP_REGION = 32 (o más)
EMS_LOW_OS_MAP_REGION = 0 (o más)

¿Qué significa eso?
"Low region" es para páginas EMS en memoria convencional. Si CPCEMU
ha de usar estas páginas pon al menos 6*16KB = 84KB.

"High region" es para páginas EMS por encima de los 640K, añadidos
a los 64KB del marco estándard. Pon al menos 2*16KB = 32KB.


Para DOS Se te indicó que incluyeras las siguientes líneas en tu
CONFIG.SYS:

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE 1024
...

Modifica el 1024, dependiendo de la cantidad de memoria disponible en
tu ordenador.

Comentarios:
EMM386 suministra varias páginas extra en memoria convencional.
La dirección mínima puede cambiarse con la opción /B=<segmento>
(por defecto es 4000).
Con /P<número>=<segmento> es posible cambiar los segmentos de
páginas físicas.




7.4.2 ¿Cómo se ha realizado el Banking?


El Banking se usa para permitir que algunos ordenadores domésticos
tengan RAM y ROM en las mismas direcciones. De modo que la lectura
se haga en ROM y la escritura en RAM. El Amtrad CPC tiene 64K de RAM,
una ROM de 16K en 0-3fff y otra en c000-ffff:

0 RAM 0000-3fff
1 RAM 4000-7fff
2 RAM 8000-bfff
4 RAM c000-ffff
L ROM 0000-3fff
U ROM c000-ffff

La idea básica es tener diferentes segmentos y desplazamientos para
leer y escribir. Para cada acceso de lectura se añade un
desplazamiento de lectura a la dirección deseada, y se hace lo mismo
con un desplazamiento de escritura para cada acceso de escritura.

estado 0 estado 1

bloque 5 M L c W 0 <
bloque 4 M W C c W C c | intercambio
bloque 3 M W 8 b c W 8 a c | en el cambio
bloque 2 M W 4 b c W 4 a c | de estado
bloque 1 M W 0 b L a c <
bloque 0 M U b U a


(M = memoria convencional o páginas EMS físicas)

a = ROM baja activada, ROM alta activada
b = ROM baja desactivada, ROM alta activada
c = ROM baja activada, ROM alta desactivada
W = ROM baja desactivada, ROM alta desactivada

Para cambiar de uno a otro estado el bloque '0' y el 'L' deben
intercambiarse. Para banking de RAM un '0' nuevo debe intercambiarse
con el viejo. La selección de ROM se realiza copiando la nueva ROM
a 'U'.

Con memoria EMS, el banking se realiza por el hardware de EMS (o por
su emulación). Esto incrementa la velocidad de la emulación en BASIC
y en CP/M Plus. Ahora puedes comprender porqué se hacen necesarios
6 páginas físicas de EMS contiguas; el marco estándar de 4 páginas
es insuficiente.





7.5 Modificación de ROM



7.5.1 Ignorando la ROM con el casete


Introduciendo el comando '|TAPE', o si la ROM AMSDOS está desactivada,
se direcciona el casete. Los accesos del casete se transforman en
acceso a ficheros de un directorio. Esta redirección se consigue
ignorando una ROM.
Con 'TAPE_BYPASS=1' activas que se ignore la ROM en los vectores
del casete.
Si CPCEMU encuentra una ROM conocida de un CPC 464/664/6128, ésta
se modifica según el caso. Es necesario ignorar la ROM si quieres
usar el casete.

Algunas instrucciones especiales están implementadas en la emulación
del Z80. Estas realizan llamadas a funciones especiales que sólo
están soportadas por el emulador. Tales funciones se introducen
directamente en la ROM, por lo que sigue siendo posible parchear
los vectores de la RAM.

Están disponibles las siguientes instruciones:
ED FC xx USER &BCxx (sólo válidos para algunos vectores de la RAM)
Parecido a una instrucción de llamada a una función interna.
Los siguientes valores para xx son legales:
65 : CASSETTE INIT (BC65)
77 : CASSETTE IN OPEN (BC77)
7A : CASSETTE IN CLOSE
7D : CASSETTE IN ABANDON
80 : CASSETTE IN CHAR
83 : CASSETTE IN DIRECT
86 : CASSETTE RETURN
89 : CASSETTE TEST EOF
8C : CASSETTE OUT OPEN
8F : CASSETTE OUT CLOSE
92 : CASSETTE OUT ABANDON
95 : CASSETTE OUT CHAR
98 : CASSETTE OUT DIRECT
9B : CASSETTE CATALOG

Además de eso, puedes utilizar la instrucción de ruptura de usuario
ED FC FC USER &BCFC. Esto detiene la emulación enseguida.



7.5.2 Modificaciones de la ROM AMSDOS


- Con 'AMSDOS_DISABLE=1' inhabilitas la inicialización del AMSDOS.
Por lo que se desactiva el parcheo de los vectores de casete por
la ROM AMSDOS. (Luego los vectores de casete siguen apuntando al
casete, aun cuando la ROM AMSDOS se inicialice.) Esto es necesario
si quieres seguir cargando de casete después de un reset de disco,
pero sin haber introducido el comando '|TAPE' antes.
(Esto se hace con 'poke &CCF2,&18: poke &CCF3,&05' en la ROM AMSDOS.)
Las instrucciones para sector no se ven afectadas, ya que siempre
direccionan el disco.

- 'AMSDOS_SPEEDUP=1' habilita una modificación de la ROM AMSDOS, la
cual minimiza los tiempos de espera del motor lo que redunda en un
acceso a disco más rápido.
(La gestión de estas cosas la reliza DOS, por lo que no son
necesarios los bucles de espera.)
Los bytes siguientes se modifican en la ROM AMSDOS:
poke &C5D4,&01 :'tiempo de carga del motor
poke &C5D8,&01 :'tiempo de formateo de pista
poke &C5D9,&01 :'espera corta
poke &C5DA,&01 :'espera corta
poke &C602,&01 :'sólo 1 reintento en caso de error
poke &C784,&01 :'búsqueda rápida
poke &C7E2,&01 :'búsqueda rápida




7.6 Miscelánea




7.6.1 Otra vez: El fichero de configuración


Puede que recuerdes que los comentarios empiezan con punto y coma ';',
y pueden comenzar en cualquier sitio de una línea. El resto de la línea
se ignora.
Los blancos, tabuladores, nuevas líneas y ';' son delimitadores, y no
importa cuantos uses.
Muchas de las definiciones tienen la forma sintáctica
<palabra-clave> '=' <valor> {T}
{T} es una secuencia de al menos un delimitador.
Ejemplo:
ROM_PATH = ".\ROM"

<número> puede especificarse en formato decimal, hexadecimal (con 0x)
o binario (%).
<nombrepath> puede tener una longitud de hasta 80 caracteres y
<nombre de fichero> hasta 20 caracteres.

Información suplementaria para seleccionar palabras-clave:


BREAK_MASK = <número> (3)

De cara a depuración sólo.
Algunos eventos interrumpen la emulación normal. Con esta flag
puedes desactivar tales eventos. ¡Usalo con precaución!
Deja todos los bits activados excepto aquellos para los eventos
que no quieras que ocurran.
b2 = 0 -> desactiva la visualización de errores en el puerto (usa 3)
¡El significado de los bits puede cambiar más adelante!





7.6.2 El adaptador paralelo


Lo primero, la construcción del adaptador, ahora con descripción
funcional:


PC D-SUB Cent. CPC Función
-------------------------------- ---------------------------
GND 19 ---- 19 GND GND
BUSY 11 <--- 1 -STROBE Synchro (Dato disponible)
-ACK 10 <--- 8 D6 |
PE 12 <--- 7 D5 | Data
SELECT 13 <--- 6 D4 |
-ERROR 15 <--- 5 D3 |
D0 2 ---> 11 BUSY Synchro (Listo para recibir)


Dirección CPC->PC

De normal el adaptador está diseñado para esta dirección solamente.
El envío en un CPC es, en principio, lo mismo que imprimir en una
impresora en línea. Si el PC activa Not-BUSY (no ocupado), el CPC
escribe un nibble (4 bits de un byte) al puerto, activa STROBE como
señal de que el dato ya está ahí, y lo desactiva a continuación. De
modo que el PC tan solo necesita desactivar BUSY (con D0), esperar
el STROBE (su línea BUSY) y tomar el nibble (de la línea de entrada
impresora->PC), y activar BUSY.
Pregunta: ¿Por qué no enviar 8 bits en paralelo?
Respuesta:
1. El puerto de impresora del PC debe reprogramarse para la entrada
y no estoy seguro de que esto sea posible en todos los PCs y
2. El CPC tan solo tiene un puerto de impresora de 7 bits.


Dirección PC->CPC

Un día me planteé la posibilidad de enviar datos en la otra dirección.
Desgraciadamente el CPC únicamente tiene una sola línea de entrada en
el puerto de impresora, llamada señal BUSY. Así que no mejoraría la
situación si se intentara diseñar un adaptador mejor para esta
dirección.
Por lo tanto, toma lo que ya tienes y sácale todo lo que puedas
desarrollando un protocolo más sofisticado.
Un interface serie también tiene una única línea de entrada para cada
dirección.
Pero, el interface serie usa sincronización por hardware, normalmente
mediante cuarzo, y ambos lados han de usar exactamente la misma
velocidad en baudios (p.ej. 1200 baudios).
Es muy complicado hacer todo eso por software solamente.
¿Qué puedo hacer?
La idea es aprovechar la ventaja de velocidad del PC respecto del CPC.
Cada byte se divide en 8 bits y se transmiten en serie, el PC tiene
que activar la línea BUSY según cada caso.
Durante estos 8 bits el CPC funciona a su máxima velocidad y el PC ha
de adaptarse a ésta. El CPC escribe una "solicitud de bit" con una
instrucción en ensamblador. En ese momento el PC debe reaccionar
puntualmente activando la línea BUSY de acuerdo al siguiente bit.
Puesto que con la siguiente-excepto-una (?) instrucción el CPC
lo leerá.
Para no tener que inhabilitar las interrupciones durante toda la
transferencia se establece una conexión por cada byte.
El CPC dice "¡Oye, envíame algo¡", y el PC responde "De acuerdo,
pero esperaré hasta que tu lo quieras." activando la línea BUSY.
El proceso entero está protegido con un temporizador, de modo que
ningún extremo pueda bloquearse cuando este esperando una señal
que nunca se ha enviado.
Por esto puedes salir de los programs con <ESC> o <CRTC>+<BREAK>
en cualquier momento.




7.6.3 CPCTRANS


Otra opción no mencionada es "/d 0" or "/d 1". Con 1 se selecciona
un modo especial de doble paso, en unidades de 80 pistas cada
segunda pista se omite al trabajar con discos de 40 pistas.
Esta opción no debería hacer falta, ya que CPCTRANS cambia
automáticamente a doble paso cundo detecta un disco de 5.25" de
360 KB.

Normalmente es muy simple leer o escribir sectores usando la BIOS.
Pero la BIOS no puede manejar la cara B de discos con marca-cabezal = 0.
Por esto tuve que programar las funciones del FDC yo mismo, con la
ayuda del fuente del MINIX como esquema base. Desgraciadamente el
fuente del MINIX contiene algunos errores, y la temporización en
partes críticas estaba hecha mediante simples bucles de retardo,
posiblemente diseñados para un procesador 8086.




7.7 Estructura de los fichero elegidos para CPCEMU



7.7.1 Imágenes de Disco


Las imágenes de disco se componen de un bloque de información de
disco de 0x100 bytes, y para cada pista un bloque de información de
pista de 0x100 bytes, seguido de los datos para cada sector en esa
pista.
El nuevo formato extendido de disco está orientado a los discos
protegidos contra copia. Las partes que son nuevas en el formato
extendido están marcadas con *E*
(sacado de nuestra Propuesta de Formato Extendido de DISCO, Rev.5.)


El bloque de Información de Disco
Byte (hex): Significado:
00 - 21 "MV - CPCEMU Disk-File\r\nDisk-Info\r\n"
("MV - CPC" es lo distintivo)
*E* "EXTENDED CPC DSK File\r\n\Disk-Info\r\n"
*E* ("EXTENDED" es lo distintivo)
22 - 2F sin usar (0)
*E* creador del DSK (nombre de la utilidad) (¡no hace falta
que termine en \0 !)
30 número de pistas (40, 42, puede que 80)
31 número de cabezales (1 ó 2)
32 - 33 tamaño de una pista (incluyendo los 0x100 bytes de la
información de pista)
Con 9 sectores * 0x200 bytes + 0x100 bytes por pista
info = 0x1300.
*E* sin usar (0)
34 - FF sin usar (0)
*E* bytes altos de los tamaños de pista para todas las pistas
(calculado de la misma forma que 32-33 para el formato
normal).
Para formatos de una sola cara la tabla contiene los
tamaños de pista de una sola cara, de lo contrario es
para dos caras alternantes.
Un tamaño con valor 0 indica una pista sin formato.
Tamaño real de los datos de la pista =
= valores de la tabla * 256
Hay que tener en cuenta siempre que la imagen contiene
256 bytes adicionales por cada información de pista.


El bloque de Información de Pista (para cada pista)
Byte (hex): Significado:
00 - 0C Track-Info\r\n
0D - 0F sin usar (0)
10 número de pista (0 al número de pistas-1)
11 número de cabezal (0 or 1)
12 - 13 sin usar (0)
Parámetros del formato de pista:
14 BPS (bytes por sector) (2 para 0x200 bytes)
15 SPT (sectores por pista) (9, como mucho 18)
16 Formato GAP#3 (gap para formatear; 0x4E)
17 Byte de relleno (byte de relleno para formatear; 0xE5)
Información del sector (para cada sector de una vez):
18+i número de pista \
19+i número de cabezal | información ID del sector
1A+i número de Sector |
1B+i BPS /
1C+i Código de error en estado 1 (0)
1D+i Código de error en estado 2 (0)
1E+i,1F+i sin usar (0)
*E* Tamaño de los datos del sector en bytes (pequeña notación
final)
Esto permite distintos tamaños de sector en una pista.
Se calcula como (0x0080 << BPS reales).


Anotaciones:
Los datos del sector deben estar a continuación del bloque de
información de pista en el orden de los IDs de los sectores.
No puede omitirse ninguna pista o sector.
En los formatos de doble cara las pistas son alternativas,
p.ej. pista 0 cabezal 0, pista 0 cabezal 1, pista 1 ...
Usa CPCTRANS para copiar discos del CPC con este formato.



7.7.2 Ficheros Snapshot


Los ficheros snapshot se componen de una cabecera de 0x100 bytes
y un volcado de memoria.

La cabecera Snapshot:
Byte (hex): Significado:
00 - 07 'MV - SNA' (como distintivo)
08 - 0F sin usar (0)
10 versión de snapshot (2, antes 1)
11 - 1A registros Z80 AF, BC, DE, HL, R, I
1B - 1C flags Z80 IFF0, IFF1 (0=desactivado, 1=activado)
1D - 24 registros Z80 IX, IY, SP, PC
25 modo de interrupción del Z80 IMD (0 - 2)
26 - 2D registros Z80 AF', BC', DE', HL'
2E Gate Array: número de registro de tinta
2F - 3F Gate Array: valor de registro de tinta (0, 1, ..., 15, 16)
40 Gate Array: registro de multi configuración
41 Gate Array: registro de configuración de RAM
42 CRTC: registro de dirección
43 - 54 CRTC: registro de datos (0, 1, ..., 17)
55 Número de ROM alta
56 - 59 PIO: puerto A, puerto B, puerto C, puerto de control
5A PSG: registro de dirección
5B - 6A PSG: registro de datos (0, 1, ..., 15)
6B - 6C tamaño del volcado de memoria (64K ó 128K)
(los parámetros siguientes aparecen sólo en snapshot con versión 2.0
en adelante:)
6D modelo de CPC en el que se ha generado el snapshot
(0=CPC 464, 1=CPC 664, 2=CPC 6128, 3 = desconocido)
6E número de interrupción (0..5), la última interrupción
ocurrida durante un ciclo de refresco de pantalla.
6F - 74 6 bytes multimodo, por tanto modos de pantalla (0..2)
para las interrupciones 0..5.
75 - FF sin usar (0), puede que más adelante para configuración
de emuladores





7.7.3 Cabecera AMSDOS


Byte (hex): Significado:
00 número de usuario (0 , valores posibles 0-15)
01 - 0F nombre de fichero+extensión (posiblemente rellenado con 0)
10 número de bloque (0)
11 flag del último bloque (0)
12 tipo de fichero (0=basic, 1=basic protegido, 2=binario,...)
13 - 14 tamaño del bloque (0)
15 - 16 dirección de carga (0-FFFF)
17 primera flag de bloque (0)
18 - 19 tamaño lógico (0-FFFF)
1A - 1B dirección de entrada (0-FFFF)
1C - 3F de uso libre para el usuario (0)
40 - 42 tamaño real de un fichero (1-FFFFFF)
43 - 44 checksum de los bytes 00-42
45 - 7F sin usar (valores aleatorios del buffer del sector)

Anotación:
Hay una cabecera al principio de todos los ficheros que no son ASCII.
Se le identifica calculando el checksum.
Los bytes 00-3F se originan en el "area de casete", donde los ficheros
se habrán distribuído en bloques.
Los bytes 12, 15-16, 1A-1B, 40-42, 43-44 son necesarios.


7.7.4 Fichero de Pokes:


Un elemento (una línea) se compone de 7 partes, cada un encerrada
entre '"', y separadas por comas.
1. número de la parte (1 caracter, 0-F):
El primer elemento tiene número 0 y es seleccionable.
Si un programa necesita más de un poke el resto de elementos tiene
los números 1, 2, ...
2. Nombre del programa (hasta 20 caracteres)
3. Descripción (hasta 20 caracteres)
4. Tipo (1 caracter):
('t'=Cinta, 'd'=disco, 'a'=todos), actualmente ignorado.
5. Dirección del poke (4 caracteres, hexadecimal):
Especifica la posición de memoria a modificarse
6. Byte para el poke (2 caracteres, hexadecimal o '??'):
Si es '??' debes introducir un valor, p.ej. número de vidas.
7. Byte antiguo (2 caracteres, hexadecimal o '??'):
Permite verificar si el poke modifica el entorno correcto.
Si el byte en esa dirección es distinto al byte antiguo, se muestra
un mensaje de aviso. No hay verificación cuando se usa '??'.

Ejemplo:
"0","Devils Crown","oxígeno infinito","t","863b","00","??"
"1","","","t","863c","00","??"
"2","","","t","863d","00","??"

Aquí se mustran tres pokes para el programa "Devils Crown", los tres
van juntos. Los valores antiguos se desconocen por lo que el byte
antiguo es '??'.
Puedes omitir el nombre y la descripción en los elementos siguientes.





7.8 Histórico Interno



Z80EMU (sólo un Z80 con poco CPC)

- v1.0 (1991)
primera versión en Pascal (sólo emulación del Z80)
- v1.2 (12/8/1992 - 16/8/1992)
primera versión en C (traducido con TPTC)
problemas en el Z80: ADD HL..., DAA, LDIR activaban P-flag
incorrectamente. BIT... activaba Z-flag incorrectamente, las
intrucciones rotate activaban Z-flag y S-flag incorrectamente;
ya es posible usar ROMs.
- v1.3 (18/8/1992)
direccionamiento de puerto errónea: byte bajo incorrecto. Nueva gestión
de memoria con RAM de 128 KB y ROM de 32 KB
- v2.0 (18/8/1992 - 22/8/1992)
implementada la ténica de COCPU para encontrar errores (la COCPU usa
memoria aparte y sólo se activa en un modo especial de depuración).
problemas en el Z80: AND... activa H-flag incorrectamente,
CPI... activa N-flag incorrectamente. Anteriormente la pantalla sólo
estaba en blanco y negro, ahora ya es azul y amarillo como en un CPC
real.
- v2.1 (25/8/1992 - 27/8/1992)
Emulación de todos los pinceles, colores en todos los modos. La
escritura se realiza sólo en la pantalla activa, que es la que tu
ves. La COCPU encontró un error: todas las instrucciones que contenían
(IX+zz) con una separación negativa ¡ eran erróneas ! Se había olvidado
tomar el "caracter signo".
- v2.2 (30/8/1992 - 3/9/1992)
Nueva rutina de teclado, la paleta se actualiza sin parpadeos
(esperando el HSYNC).
Se introduce la "ROM necesaria" con COPYMATE.
- v2.3 (15/9/1992 - 19/9/1992)
Emulación de FDC para cargar/guardar sectores. La COCPU encontró un
error: LD XH,... era LD H,...
- v2.3b (19/9/1992)
Se realiza actualización de pantalla sólo si la pantalla está en
los bloques de RAM 0..3 (y no 4..7);
Se hace el puerto FCxx un alias para FBxx (para CP/M Plus). En ese
momento no sabía que OUTI... pre-decrementaba el registro B.
- v2.4 test (25/10/1992)
Ya sólo se desea emular el registro R (para "DEFINE"). Ahora la
actualización de pantalla se realiza cada interrupción nth y no
por cada byte individual escrito en memoria.
(Aún muy lento, debido a que está todo hecho en C). Nueva gestión
de memoria con bloques alineados a segmentos.
- v2.5 test (31/10/1992)
Se cambia la gestión de memoria. Scroll por hardware y tamaños
diferentes de pantalla son ya posibles.
- v2.6 test (5/11/1992)
Nuevo controlador de teclado por Arnt Gulbrandsen: son posibles todas las
combinaciones de teclas. Actualización de pantalla en ensamblador.
- v2.7 test
Intento sin éxito de incluir la rápida emulación del Z80 de Juergen
Weber.
- v2.8
Mejorada la actualización de Pantalla: Sólo las partes que cambian
son modificadas en pantalla.
- v2.9
Se usa el Timer del PC para generar interrupciones con 300 Hertzios.
La emulación rápida funciona sólo si no se usa banking de ROM.

CPCEMU (ahora un CPC)
- v0.2 (23/12/1992), continuación de Z80EMU v2.9
Después de casi 4 horas analizando con el Turbo Debugger, he encontrado
el fallo que bloqueaba la emulación rápida: PUSH ES en lugar de PUSH DS.
- v0.3 (28/12/1992 - 29/12/1992)
Activar N-flag para INI, OUTI. En el Z80 rápido CPI activa las flags
erróneas. RL (HL) utilizaba lectura de segmento (en DS) en lugar de
escritura de segmento (en ES). LD A,R ahora produce números aleatorios.
Se incorporan todas las rutinas de Casete (aunque CASSETTE IN CHAR era
incorrecto).
- v0.4 (1/1/1993)
IN A,(n): A a b8..b15 (en lugar de B). Configuración de RAM 0xC3:
corregida a 0,3,2,7 (para CP/M Plus). El KC-Compact (un compatible CPC
del antiguo DDR) usa los puertos EE00 - EE3D, ¿pero para qué?
- v0.5 (28/1/1993 - 8/2/1993)
INIR,... el incremento del regsitro R depende de B, no de BC.
CASSETTE IN CHAR arreglado (parche erróneo para el CPC 6128).
- v0.6 (23.3.1993 - 24.5.1993)
Alguien comentó que las instrucciones OUTI ¡pre-decrementaban el
registro B! Se compilan las partes en C con código 386 (con Borland
C++ v3.1). Las imágenes de disco llevan el sufijo .DSK. CPCREAD.PAS
corregido (el cabezal no se inicializaba a 0) y convertido a CPCREAD.C.
Mejorado el direccionamiento de puertos del PIO (la CPU puede leer,
incluso cuando el puerto está programado para salida, ...)
- v0.7 (26/7/1993 - 29/8/1993) (no publicada)
Fuente renovado completamente, modularizado, ... Fichero de
configuración, es posible incluir más ROMs. Cambiado el nombre de
la compañía de 'Schneider' a 'Amstrad'. (Se puede seleccionar entre
varios nombres.) Error en el banking de RAM removido. Nueva
documentación en Alemán.
- v0.8 (30/8/1993 - 9/9/1993)
Emulación lenta: mejoradas las instrucciones con paridad mediante el uso
de una tabla que no sólo sirve para paridad. Z80: Se ignora ED xx con
xx ilegales. Nueva documentación en Inglés.
- v0.8a (10/9/1993 - 15/9/1993)
Error grave en la emulación rápida: Si se ejecuta una instrucción
DD CB xx y se produce una interrupción, ¡la instrucción se ignora!
- v0.8b (16/9/1993 - 21/9/1993)
Implementado un VSYNC "real", si VSYNC_CT = 0. Problema en el puerto
PIO A arreglado: OUT &F400,xx con el Puerto A en modo de entrada era
ignorado. Nueva rutina para joystick de Martin Zacho.
- v0.8c (22/9/1993 - 13/12/1993)
Verificada la documentación con "ispell". La emulación no comenzaba si
"USE_JOYSTICK=1" y no había un joystick disponible (PUSH AX en el sitio
equivocado). Emulación lenta: DAA corregido (los corchetes habían
desaparecido desde la versión v0.8). Parche erróneo para el CPC 664
en la rutina de interrupciones. Este parche reemplazaba EI con NOP
para evitar el problema con EI (activar las interrupciones una
instrucción más tarde). Ahora corregido para todos los CPCs.
- v0.8d (14/12/1993 - 29/12/1993)
Emulación de FDC re-escrita para formatos de doble cara. CPCTRANS
sustituye al antiguo CPCREAD y permite leer discos Vortex una vez
instalado el parche 720KB.COM. Aparte de eso, se pueden escribir
imágenes de disco de vuelta al disco. Nueva selección de ficheros
al pulsar F3. Se introducen algunos alias para direcciones de puertos,
p.ej. &7000 - &7f00 para direccionar el gate array, &0c00, &1c00, &2c00,
&3c00, &bc00 para el CRTC. Se activa la emulación del registro R.
- v0.9 alfa (30/12/1993 - 20/1/1994)
Memoria EMS posible con una configuración especial de EMS/UMB. Dígitos
binarios en el fichero de configuración. Direccionamiento del banking
de RAM arreglado: el emulador aceptaba &d0-&ff como &c0-&c7.
Ahora hasta 576 KB de RAM con EMS.
- v0.9b (21/1/1994 - 31/1/1994)
Uso de EMS simplificado mediante EMS extendida (o LIM EMS 4.0) con más
de 4 páginas físicas de EMS. Selección de ficheros añadida a 'l' (menú
de depuración), RUN" .
- v0.9c (1/2/1994 - 29/4/1994)
Algo de sonido pésimo por el altavoz interno del PC (desactivarlo con
F4). Selección de ficheros también con 'v'; corregida la documentación
en Inglés; sonido por Soundblaster (puede mejorarse); nuevo CPCTRANS
con línea de comandos, acceso directo al FDC; testeado el adaptador
paralelo y mejorado el software. Z80 rápido: INC (HL), DEC (HL),
INC (IX+n), DEC (IX+n) para RAM por debajo de la ROM arreglado.
PgUp, PgDn para mover pantallas demasiado grandes; se muestran partes
de pantallas overscan.
Ahora es posible: snapshots de 64K.
- v0.9d (30/4/1994 - 12/5/1994)
Las interrupciones durante DI no se omiten, y éstas ya no se activan
directamente después de una instrucción EI. Nuevas funciones para el
color: ahora sin nieve en OS/2. Z80 rápido: incrementada la velocidad
de lectura de código.

- v1.0 (13/5/1994 - 20/5/1994)
Mejorada la parte de pantalla: direfentes tamaños de caracter desde 1
hasta 8. Selección de ficheros añadida a SAVE" , añadida selección
rápida pulsando una letra. Mejorado CPCTRANS con una opción de
verificación. Nuevo menú de configuración pulsando F7. De este modo
se puede desactivar el parpadeo de color.

- v1.0a (21/5/1994 - 9/6/1994)
Mejorado el menú de configuración con entrada directa o teclas de
cursor, añadido esquema de teclado Alemán, añadida opción de retardo
simple. Visualización correcta de tamaños de pantalla más pequeños
(sin trozos de las más grandes). Mejorada la parte rápida del Z80:
RRA,RLA, ... más rápidos, instrucciones CB xx más rápidas. Añadidas
más instrucciones ilegales (ED xx). ¡ Faltaban LD D,XH y LD YL,YH !
Corregido CPDR, CPIR con BC=0 (0 equivale a 65536 en un Z80, pero
¡si que es 0 para el prefijo REPE del 80x86!). Corregidas las flags
DAA. Nuevo software para el adaptador paralelo: ahora es posible
enviar al CPC. Gracias a Bernd Schmidt por apuntarme que una
interrupción incrementa el registro R en 1. Con esta ayuda la
emulación del registro del puerto C del PIO se ha mejorado.

- v1.1a (10/6/1994 - )
Surge una nueva era para CPCEMU: ¡Amstrad ha permitido el uso de las
ROMs!
Cambios en el fichero de configuración: ROM_BLOCKS -> ROM_BLOCK,
DISC_BYPASS -> DISABLE_ADOS, ya no hace falta un espacio de separación
para '='. Cambios en la parte del sonido, en la parte gráfica: tamaño
vertical por el VGA-CRTC. La calibración del Joystick se encuentra ahora
en el menú de configuración, se han mejorado las rutinas de casete para
guardar. Mejorada la parte del FDC: ahora puede usarse COPYMATE. Puede
insertarse discos con formato distinto al de datos (data) sin error de
lectura (sin búsqueda de la pista 0). Un retardo más en CPCTRANS,
espero que yano haga falta usar el botón de turbo; formateo de imágenes
de disco. Corregido una vez más el puerto C del PIO: se desactiva
después de out &7f00,n. Grandes cambios en el fichero de configuración:
Ahora con configuración condicional (#IFCPC, #ENDIF). Cambiadas algunas
palabras clave (VSYNC_CT -> /, DISC_PATH -> /, SNAP_PATH -> SNAPSHOT,
DRV_A -> DRIVE_A, DRV_B -> DRIVE_B). Craga de programas desde archivos
ZIP. Hace falta PKUNZIP.

- v1.1b (17/8/1994 - 2/9/1994)
Se introducen los multimodos, eso significa que puede haber varios
modos de pantalla simultáneos en la misma pantalla. La actualización
de pantalla se ha dividido en hasta 6 áreas, cada una de ellas se
actualiza cuando se produce una interrupción. (Puede mejorarse.)
Ahora es posible: Snapshots de 128K, ampliado para multimodos.
CPCPARA mejorado: Ahora pueden transferirse ficheros binarios con
cabecera. Se ha incluido detección del CPC 6128 Plus. Se han incluido
más alias para puertos.

- v1.2 (3/9/1994 - )
Esta versión se publicó. Fundamentalmente hay cambios en el menú de
ayuda.

- v1.2a (27/9/1994 - ) (estuvo disponible como UPD12A.ZIP)
Selección de Ficheros: Sólo se muestran las unidades disponibles.
Y: Con el driver ANSI.SYS el fondo de algunos textos era negro.
TMP_PATH: Se puede especificar una unidad sin path.
Shell de DOS (F7): CPCEMU se mueve primero a XMS, EMS o disco, de modo
que hay mucha más memoria en el shell de DOS. (Esta caracteríastica
se ha tomado del Programa de Dominio Público SWAP300.ZIP por Marty
Del Vecchio.)
La actualización de pantalla podría corromperse si el ancho de
pantalla no era divisible por 4.
Otra versión de CPCEMU para lograr más velocidad si cabe: C2.EXE. Usa
una gestión de memoria distinta, con dos marcos de EMS de 64KB cada.
Uno para lectura y otro para escritura. Pero funciona únicamente con
EMS.
Las ROMs también tienen (c) de Locomotive Software, no sólo de Amstrad.

- v1.2b ( )
No había sonido estéreo en una Soundblaster Pro, incluso si así lo
ponía la configuración. Si no se encontraba una Soundblaster no había
sonido hasta que se usaba USE_SB=0.
Z80 rápido: Cambiados algunos accesos word a accesos byte.
Es un poco más lento pero no bloquea el ordenador cada vez que se
realiza un acceso word a la dirección 0xffff.
Z80 rápido: Corregido el problema con EI HALT DI: La dirección a HALT
era metida en la stack en lugar de la de DI.
Documentación en Inglés corregida.
Mejorados CPCPARA y PCPARA v1.1: test del adaptador test, mucha más
velocidad en CPC->PC: approx. ¡1600 bytes por segundo leyendo de
disco! (486/66) llegaron a medirse.
De este modo pueden transferirse ¡16KB en 10 segundos! Gracias a Klaus
Weber por apuntarme que era demasiado lento.
En PCPARA había un DELAY(1) después de cada nibble para esperar un
milisegundo. Esto no hace falta.

- v1.2c (28/2/1995 - ) (estuvo disponible como UPD12C.ZIP)
Algunas partes de CPCEMU re-escritas en C++. Esto permite funciones
inline e interface mejorado para mantener un mejor control del
proyecto.

- v1.2d (16/3/1995 - ) (sólo para 'subscriptores' del mailing list)
Z80 rápido: Cambios internos no visibles para el usuario, excepto un
pequeño incremento de velocidad. Ahora todos los datos se mantienen
en el segmento de datos en lugar del segmento de código.
Por fin se introdujo el modo absolutamente necesario para ordenadores
rápidos: 'realtime CPC' ('CPC a velocidad real') (Seleccionable en el
menú de configuración o con REALTIME=1).

- v1.3 (16/4/1995 - )
Fichero de pokes para pokear fácilmente, documentación en
Francés, comando para formateo en el FDC (re-formatea imágenes de
disco del mismo tamaño), nuevo sistema de manús con soporte de ratón
(MOUSE=1), pueden insertarse imágenes de disco con atributo de
sólo-lectura (deben insertarse como "read only"), menú de depuración:
añadido 'find'

- v1.3a (30/4/1995 - ) (estuvo disponible como UPD13A.ZIP)
Con la versión v1.3 Boulder Dash no funcionaba, aún cuando sí lo
hacía en la v1.2. El modo 2 de interrupciones del Z80 no estaba
simulado correctamente (omitido PUSH/POP). La emulación lenta del
Z80 tenía un bug parecido.
CPCTRANS: Opción -f 6 activada.

- v1.3b (20/5/1995 - ) (está disponible como UPD13B.ZIP)
Algunos usuarios comunicaron que no había sonido en la Soundblaster
desde la versión 1.3.

- v1.4 (v1.3c)
Soporte de sonido GUS por Ulrich Doewich; ayuda en línea en Inglés,
Alemán, Francés y Español; documentación en Francés completa;
soporte para 2 joysticks; modos de video VESA para altas resoluciones;
mejorado el menú y el fichero de configuración; añadidas opciones para
cargar y guardar en el menú de configuración; mejoradas las rutinas
del FDC para formatos no estándares; formato de disco extendido;
colores y teclas configurables por el usuario;
CPCTRANS mejorado (v2.3); nuevo SNA2GIF (v1.1);
emulación del Z80 rápida: algunas veces la pantalla no se borraba
completamente después de un reset (problema con HALT);



CPCEMU está escrito en C++ y ensamblador, usando Borland C 3.1 con
optimización para 386 y Turbo Assembler. Para Depuración se ha usado
el Turbo Debugger.
Los colores se obtuvieron mediante el programa VGAMETER por J. Stephen
Shattuck, Jr., con el CPC conectado a un TV mediante un adaptador Scart.



------------------------------------------------------------------------



(A partir de este punto puedes continuar leyendo sin ningún riesgo.)



A. Apéndice




A.1 Glosario


Aquí se explican algunos términos relacionados con ordenadores. No pretendo
dar definiciones completas o precisas. Los términos se describen desde el
punto de vista del CPC.
Las referencias se marcan con "»".


386/33 (AT 386/33)
Abreviación de »PC AT con procesador 80386, a velocidad de 33 MHz.
Debido al "alto" índice de velocidad debería ser un 386DX con un bus de
datos de 32 bits, real, no el barato 386SX con bus de datos de 16 bits.

AMSDOS (DOS de Amstrad)
»DOS desarrollado por »Amstrad, para los ordenadores »CPC.

Amstrad
Fabricante de ordenadores Británico, el cual ha diseñado los »CPCs.

Archivo
Almacenamiento de ficheros.
O: Un fichero que incluye otros varios.
En archivos »ZIP los ficheros se comprimen antes de ser incluídos.

ASCII (Abreviación de: American Standard Code of Information Interchange,
que significa Código Estándar Americano para Intercambio de Información)
En un ordenador todos los caracteres y números se representan internamente
como números.
La mayoría de los ordenadores usan ASCII, con la letra "A" codificada como
65. El »PC y el »CPC también usan ASCII. En el »Locomotive-BASIC puede
guardarse un fichero ASCII tecleando 'SAVE"<nombre de fichero>",A'.

BASIC (Abreviación de: beginners all purpose symbolic instruction code,
que significa Código de Instrucciones Simbólicas para cualquier propósito
orientado a Principiantes)
Ampliamente usado, lenguaje de programación, fácil de aprender, para
ordenadores domésticos y personales. Antes cada ordenador tenía que
tener su propio dialecto BASIC.
Los BASICs modernos permiten programación estructurada, de forma que ya
no se está obligado a programar "código espagueti".
Asimismo el »CPC tiene su propio BASIC, el Locomotive BASIC por la
compañía del mismo nombre.

BBS

C64:
Ordenador doméstico hecho por la compañía Commodore con 64 KB de »RAM,
muy popular.
Debido a la inmensa cantidad de software que tenía disponible fue
"el ordenador para juegos" muchos años. Más tarde fue apartado en
importancia por el Commodore AMIGA, pero a pesar de estar obsoleto
sobrevivió un poco más.

Caja para cableado
Un adaptador para realizar cualquier conexión entre dos conectores
mediante el uso de cables cortos. En comparación a la »caja para jumper,
los cables no necesitan estar soldados.

Caja para jumper
Un adaptador para realizar cualquier conexión entre dos conectores
usando cables cortos que han de estar soldados.
Ver también »Caja para cableado.

Chips hardware
Componentes dentro del ordenador, p.ej. procesador, chips de memoria,
controlador de la unidad de disco, ...
Dentro del CPC se encuentra el procesador Z80, el Gate Array, el CRTC
6845 para direccionamiento de la memoria de pantalla, el PIO 8255 para
entrada/salida, el chip de sonido PSG AY 3-8912, el controlador de la
unidad de disco FDC 765, ...

Configuración
Aquí: Configurar un programa para sus propias necesidades.
Puede realizarse con el »Menú de configuración o un fichero de
configuración.

Controlador de teclado
Un programa al que se llama cuando el teclado genera una »interrupción.
El controlador toma el número de la tecla que se ha pulsado o soltado.

CPC (Abreviación de: Colour Personal Computer,
que significa Ordenador Personal a Color)
Desarrollado por la compañía »Amstrad, estuvo disponible en varios
modelos.
Vuelve a leer la introducción.

CPC puerto de impresora
Interface Centronics del »CPC para conectar una impresora.
Desgraciadamente los diseñadores del CPC fueron demasiado ahorrativos:
Tan sólo tenía 7 bits.
Mediante un pequeño cable era posible ampliarlo a 8. Para conseguirlo
el puerto de casete se "desaprovechaba", no siendo necesario para
imprimir.

CPC manual de firmware
Libro acerca del »CPC, describía especialmete el interface del sistema
operativo del CPC.

CPC grupo de noticias
Grupo de noticias sólo para el »CPC. Su nombre es "comp.os.amstrad.8bit"
y se creó en agosto de 1994.

CP/M Plus (Abreviación de: control program for microcomputers,
que significa programa de control para microordenadores)
Sistema operativo de la compañía Digital Research, orientado
principalmente a microordenadores de 8 bits. Ampliamente usado hasta
que IBM decidió usar MS-DOS para sus PCs.
El CP/M Plus (CP/M 3.0) fue el sucesor del CP/M 2.2 y fue incluído en
el paquete de software para el »CPC 6128.

CTRL/MAYS/ESC (control/mayúsculas/escape)
"Combinación de tres dedos" en un »CPC para provocar un reset.
Es parecido a la combinación 'CTRL/ALT/Del' para reset en un PC.
Algunos programas bloquean tal reset de forma que hay que apagar el
ordenador o usar el botón de reset. Los CPCs no tenían ese botón,
pero era fácil construir uno.
En CPCEMU la tecla de función F8 es el botón de reset.

Cursor
Caracter en la pantalla que muestra la posición de escritura actual.
En algún lugar del teclado hay unas teclas de cursor que sirven para
moverlo por la pantalla.

D-Sub
Conectores con una forma especial.

Definiciones de formato
Definiciones de formatos de disco.

Dirección Base
Esto hay que especificarlo en muchas »configuraciones si se posee una
tarjeta de sonido.
CPCEMU busca en una »variable de entorno.

Dk'tronics
Compañía Británica que ofrecía extensiones del hardware para el »CPC,
p.ej. expansiones de memoria.

DMA (Abreviación de: Direct Memory Access,
que significa Acceso Directo a Memoria)
Acceso directo a la memoria del ordenador sin usar el procesador.
Se usa con unidades de disco, pero para ahorrar costes no se
implementó en los CPCs.
La tarjeta Soundblaster también puede usar un canal DMA, leyendo datos
de sonido digital "a través" de el.

DOS (Abreviación de: disk operating system,
que significa sistema operativo de disco)
Siatema operativo orientado al disco, p.ej. AMSDOS, DRDOS, MS-DOS.
Hoy en día es sinónimo para MS-DOS.

DRDOS
»DOS compatible MS-DOS por la compañía Digital Research.

E-Mail (Abreviación de: Electronic Mail,
que significa Correo Electrónico)
Usar un ordenador como buzón de correo.


EMM (Abreviación de: Expanded Memory Manager,
que significa Gestor de Memoria Expandida)
Parecido a »EMS.

EMS (Abreviación de: Expanded Memory System,
que significa Sistema de Memoria Expandida)
Ampliación de memoria para el »PC, sirve para sobrepasar el límite de
640KB.
Con la técnica de banking otras páginas de memoria se mapean en una
ventana EMS. EMS fue desarrollado por Lotus, Intel y Microsoft, por
esto es conocida como LIM-EMS.
Hay EMS por hardware, emulada y simulada.
Tarjetas de memoria especiales suministran EMS por hardware,
principalmente usado en viejos PCs XT.
En un PC AT con al menos procesador 80386 es posible tener EMS emulada
usando el mecanismo de paginación para el banking.
Este tipo está suministrado por el EMM386.EXE y debería usarse para
incremetar la velocidad de CPCEMU.
La EMS simulada es demasiado lenta, tiene que copiar las páginas de
memoria.

Emular
Imitación de un sistema (hardware o software) por otro.
El sistema imitador calcula los mismos resultados basados en los mismos
datos que el sistema imitado.
CPCEMU emula un »CPC en un »PC.

Emulador
El sistema que »emula otro.

Fichero
Colección de datos que están todos juntos. En el »CPC hay ficheros de
varios tipos, p.e ficheros BASIC con programas BASIC, normalmente con
la extensión '.BAS', ficheros ASCII con cualquier texto, y ficheros
binarios con todo tipo de bytes, normalmente con la extensión '.BIN'.
Los ficheros binarios pueden contener programas en código máquina o
cualquier otro dato.

Fichero BASIC
Ver »Fichero.

Fichero Batch
Contiene instrucciones que normalmente se teclean en el ordenador. Si se
realiza una llamada a tal fichero, las instrucciones se van ejecutando
una por una, incluso cuando tu las introduces.

Fichero Binario
Ver »Fichero.

Frecuencia de reloj
Mide la velocidad del procesador conectado al ordenador. Determina
la velocidad del procesador de manera significativa. Hoy en día el
procesador 486DX2/66 funciona a una velocidad interna de 66 MHz.
El Z80A en el »CPC tiene una velocidad de 4 MHz, funcionando de hecho
a 3.3 MHz ya que tiene que esperar periódicamente al refresco de
pantalla.

FTP (Abreviación de: File Transfer Protocol,
que significa Protocolo para Transferencia de Ficheros)
Un protocolo para transferir ficheros en una red de ordenadores.
Al programa que ejecuta este protocolo también se le suele llamar "FTP".

Hardware
Partes de un ordenador que pueden "tocarse", p.ej. periféricos como la
impresora, monitor; internos como el procesador y otros »chips hardware.

Imagen ROM
Fichero con el contenido de una »ROM. Si lees el contenido de una ROM y
escribes los bytes en un fichero obtienes una imagen ROM.

Inicializar
Rellenar la memoria con valores específicos, de modo que las variables
queden definidas.

Interface
Conexión de un ordenador a sus periféricos o desde un programa a otro.
Por tanto hay interfaces hardware y software.
El también llamado interface Centronics es un interface paralelo,
trasfiere los bits de un byte en paralelo. Con los interfaces serie es
necesario transferir los bits de uno en uno.

Internet
Una Internet está compuesta de varias sub-redes de ordenadores.
Aquí: *La* Internet, es una red de ordenadores mundial para comunicación.

Interrupción
Si el procesador recibe una señal con prioridad alta, interrumpe el
programa que se está ejecutando y llama a un controlador especial para
interrupciones. Cuando termina continúa con el programa interrumpido.
En un PC hay distintas señales de interrupción, p.ej. cuando se pulsa
una tecla, cuando un temporizador finaliza, cuando llegan datos
procedentes del interface serie (p.ej. cuando se mueve el ratón)
cuando la tarjeta de sonido termina de tocar su última muestra y
necesita más datos, ...
Al Z80 en el CPC se le interrumpe unas 300 veces por segundo.

LIM estándar (Abreviación de: Lotus Intel Microsoft)
Expansión de memoria (»EMS), desarrollada por Lotus, Intel y Microsoft.

Locomotive
Compañía Británica que escribió el »BASIC de los »CPCs.

Mailing list
Un servicio mío, mediante el cual yo añado tu dirección email a una
lista. De esta forma serás informado de novedades relacionadas con
CPCEMU.

Menú de configuración
Para cambiar los »parametros de un programa, de modo que funcione de
forma distinta.
Puedes decirle al menú de configuración que tienes una tarjeta de sonido,
que quieres usar un joystick, ...

Microchannel
Arquitectura de bus especial.

MS-DOS (Abreviación de: Microsoft Disk Operating System,
que significa Sistema Operativo de Disco de Microsoft)
Sistema operativo, desarrollado por la compañía Microsoft para
procesadores de 16 bits (8086). El sistema operativo más popular en el PC.
Sigue usándose en los procesadores de 32 bits 80386 y 80486.

Multi Modos
Técnica de programación que permite tener distintos modos de pantalla
simultáneamente en la pantalla. El modo de pantalla se cambia durante
un refresco de pantalla más de una vez. En el CPC se obtienen zonas con
alta resolución y pocos colores, y zonas con baja resolución y muchos
colores.

Multiface II (Abreviación de: Multipurpose Interface,
que significa Interace Multipropósito)
Una extensión hardware para el CPC. permite interrumpir cualquier
programa en cualquier momento y analizarlo o guardarlo.
Desarrollado por la compañía Británica Romantic Robot.

Número de Interrupción IRQ (IRQ=Abreviación de: Interrupt Request,
que significa Petición de Interrupción)
En un PC las distintas »interrupciones tienen asignados números
diferentes.
Por ejemplo, la interrupción del teclado tiene el número 9,
la interrupción del temporizador tiene el número 8. Si se pulsa una
tecla el teclado envía una petición de interrupción al procesador,
de modo que éste este informado.

OS (Abreviación de: Operating System,
Significa Sistema Operativo)
Programa necesario para usar un ordenador. Suministra funciones básicas
a las aplicaciones. Los nuevos sistemas operativos realizan complicadas
tareas como programación de eventos en sistemas multitarea, ...

Overscan
Es el borde que está alrededor de la zona de escritura en pantalla.
En el PC es muy pequeño pero se le puede cambiar el color, p.ej. en
CPCEMU con 'BORDER 10'. En el CPC el overscan es mucho más amplio,
por esto los programadores han buscado la forma de escribir en el.
Mediante trucos de programación es posible escribir en toda la
pantalla.
A esta técnica de programación se le llama overscan.

Parámetro
Variable con un significado específico, el comportamiento del programa
se basa en esto.

Parámetro en línea de comandos
Parámetro que se especifica en la línea de comandos después del
fichero al que se quiere llamar.

Path de Búsqueda en DOS
El DOS usa un path compuesto por subdirectorios para buscar un fichero.
Esta especificado en la »variable de entorno 'PATH'.

PC (Abreviación de: Personal Computer,
que significa Ordenador Personal)
Ordenador con un microprocesador como procesador (o CPU=central processing
unit, que significa unidad central de proceso). Hoy en día es sinónimo del
IBM PC con procesador 8086 ó 8088.
Los PC AT (advanced technology, que significa tecnología avanzada) son
ordenadores con procesador 80286, 80386 ó 80486.

PEEKs y POKEs:
Instrucciones »BASIC para modificar la memoria directamente.
'PEEK(<dirección>)' se usa para leer un byte de memoria,
'POKE <dirección>,<número>' modifica la memoria. Los programas con
muchos PEEKs y POKEs son difíciles de comprender, pero algunas veces
es necesario superar los límites del BASIC, especialmente si el BASIC
tiene pocas instrucciones.

PKUNZIP
Programa de PK-Software para descomprimir archivos »ZIP.

RAM (Abreviación de: Random Access Memory,
que significa Memoria de Acceso Aleatorio).
Chip de memoria. Memoria del ordenador.
Los CPCs tienen bien 64KB (kilo bytes) de RAM o 128KB. Con extensiones
hardware podían llegar a tener hasta 576KB de RAM.


Representaciones numéricas
Dependiendo de la base elegida hay distintas representaciones para el
mismo número.
Es bien conocida la representación decimal con base 10 y los dígitos del
0 al 9.
Los ordenadores usan la representación binaria (base 2) con los dígitos
0 y 1. Los programadores prefieren la representación hexadecimal con
base 16, ya que 16 es una potencia de 2 (2 elevado a 4). Por esto las
representaciones pueden calcularse fácilmente de una a otra. Además un
byte necesita sólo 2 dígitos (0 a 9, A a F) en la notación hexadecimal.

ROM (Abreviación de: read-only-memory,
que significa memoria de sólo lectura).
Chip de memory. Memoria que sólo puede leerse pero no modificarse.
Está disponible nada más encender el ordenador.
Los CPCs tienen 16KB de ROM del »OS, 16KB de ROM del »BASIC y 16KB de ROM
para el AMSDOS.

RS-232
Interface serie para conectar monitores o impresoras al ordenador.
(RS 232 C).

Schneider
Compañía Alemana, fue la que vendió los CPCs en Alemania.

Screen mode

Scroll por hardware
Mover la pantalla sin que el procesador tenga que copair de una parte a
otra. El procesador sólo tiene que modificar la dirección base de la
pantalla, el resto lo hace el »chip hardware.

Sesión DOS en OS/2
Una ventana, bajo el sistema operativo de 32 bits de IBM, donde se
pueden ejecutar programas DOS. La también conocida como
"DOS compatibility box" (ventana de compatibilidad DOS).

SIMTEL
Un archivo enorme de software que está en USA.
El Depósito de Software Simtel (SimTel Software Repository) lo
mantiene Coast to Coast Telecommunications, Inc. (CCT) en su servidor
de »Internet situado en "SimTel.Coast.NET". Este archivo tiene mirrors
(copias) en otros lugares. Uno de los mirrors es la Universidad de
Oakland situado en "OAK.Oakland.Edu".

Snapshots
Un volcado de memoria completado con estados internos de los »chips
hardware.
Este contiene la descripción completa de un estado momentáneo del
ordenador.
Si el snapshot se vuelve a cargar el ordenador vuelve al estado que
está descrito en el snapshot.
Por tanto es similar a un snapshot (foto) real, solo que dentro del
ordenador.

Software
Programas de un sistema computerizado.

Soundblaster
Tarjeta de sonido de la compañía Creative Labs.

Spectrum
El Sinclair Spectrum es un ordenador doméstico desarrollado por la
compañía Sinclair.

Compilador de Turbo Pascal
Pascal es un lenguaje de programación de alto nivel que permite
programación estructurada, hoy en día es usado en muchos centros de
enseñanza.
Si alguien habla de Pascal, puede que se refiera más a Turbo Pascal,
aún cuando éste es sólo un Pascal extendido hecho por la compañía
Borland. El compilador de Turbo Pascal es particularmente rápido
porque compila el programa en una sola pasada.

Utilidad
Programa muy útil.

Variable de entorno BLASTER
Ver »Variable de entorno.

VGA (Abreviación de: Video Graphics Array,
que significa Vector para Gráficos de Video)
Gráficos estándar en el PC. Sucesor de la CGA (Colour Graphics
Adapter, que significa Adaptador para Gráficos en Color), de la MCGA
(Multi Colour Graphics Adapter, que significa Adaptador para Gráficos
en Multiples Colores) y EGA (Enhanced Graphics Adapter, que significa
Adaptador para Gráficos Mejorado). Ampliado a la SVGA (Super VGA) con
resoluciones mayores.

VGA-BIOS (Abreviación de: VGA Basic Input Output Operating System,
que significa Sistema Operativo Básico de Entrada Salida para la VGA)
El sistema operativo para la tarjeta gráfica »VGA.

Windows
Algo que puede ponerse en »DOS.

Z80
Un procesador de 8 bits desarrolado por la compañía Zilog. Es compatible
con el 8080 de Intel y fue muy popular.
En el »CPC hay un Z80A que funciona a una velocidad de 4 MHz.

Z80, instrucciones
Instrucciones máquina que el »Z80 entiende.
No son más que cifras numéricas, por lo que para recordarlas más
fácilmente se crearon los mnemonicos, que son traducidos por un
ensamblador en códigos binarios.
La instrucción "LD A,B" carga el registro A con el conenido del
registro B y es lo mismo que el código binario 0x78.

ZIP
Un proceso especial de comprimir »ficheros.
Los »archivos llevan la extensión "ZIP".





A.2 Bibliografía



El manual del CPC es indispensable para principiantes del CPC:
- Spital Ivor und Perry, Roland und Poel, William und Lawson,Cliff:
CPC 6128 Benutzerhandbuch, Schneider Computer Division 1985,
Originalausgabe (c) 1985 (my one contains 1895)
by AMSOFT, AMSTRAD Consumer Electronics plc and Locomotive
Software Ltd.

Un listado de la ROM muy bien comentado, con capítulos iniciales que
tratan especialmente del CPC por el lado del software:
- Janneck, Joern W. und Mossakowski,Till: ROM-Listing CPC 464/664/6128,
Markt & Technik Verlag 1986

Por el contrario: mal estructurado, comentado extrañamente, trata más
el lado del hardware:
- Brueckmann, Englisch, Gertis: CPC 464 Intern mit kommentiertem
ROM-Listing, Data Becker 1985

Es bueno aprender C, con muchos ejercicios:
- Kellay, Al and Pohl, Ira: A Book on C, Second Edition, 1990 by
Benjamin/Cummings Publishing Company, Inc.

El libro estándar de C++:
- Stroustrup, Bjarne: The C++ Programming Language, Second Edition,
Addison-Wesley, 1992

Otro buen libro de C++:
- Eckel, Bruce: C++ Inside & Out, 1993 by Osborne McGraw-Hill

Consejos, como escribir un manual legible y bueno, nos lo da:
- Boedicker, Dagmar: Handbuch-Knigge, Software Handbuecher schreiben
und beurteilen. Wissenschaftsverlag 1990





A.3 Indice


Los números detrás de los elementos muestran el capítulo en el cual están
descritos.

(incompleto)

#ENDIF 4.2
#IFCPC 4.2
22DISK 5.1.2
Adaptador, paralelo 5.2
AMSDOS_DI 4.2
AMSDOS_SPDUP 4.2
BLASTER Entorno 2.3.2
BREAK_MASK 4.2
Casete 3.2.2
COLOUR 4.2
CPC 1.3
CPC Grupo de noticias 6.2
CPCEMU.CFG 4.2
CPCPARA.BAS 5.2
CPCREC.BAS 5.2
CPCTRANS.EXE 5.1.1
DELAY 4.2
Disco 3.2.1
DRIVE_A 4.2
DRIVE_B 4.2
EMS_EI 4.2
Fichero de configuración 4.2
Imagen de disco 3.2.1
INT_FREQ 4.2
INT_RESUME 4.2
JOY_CALIBRATE 4.2
KBD_LANGUAGE 4.2
Keyboard 3.1
Memoria EMS 2.3.1
Menú de depuración 7.3
Menú de configuración 4.1
Menus 3.2.1
Multi Modo 4.1
MULTIMODE 4.2
PCPARA.EXE 5.2
PIO_PORT_B 4.2
PRINTER 4.2
RAM_SIZE 4.2
ROM_BLOCK 4.2
ROM_PATH 4.2
SBLASTER 4.2
SB_DELAY 4.2
SHOW_CONFIG 4.2
SNAPSHOT 4.2
Snapshot 3.2.3
SOUND 4.2
Soundblaster 2.3.2
TAPE_BYPASS 4.2
TAPE_PATH 4.2
TMP_PATH 4.2
Teclas de función 3.1
VSYNC Bit 4.1


------------------------------------------------------------------------------
final
------