notas:
- Esta documentación a verano traducida con ayuda de un
programa informático de traducción con el fin de permitir
la utilización del programa CpcAlive a las personas que hablan
solamente el español. Quiere disculpar los errores. Gracias.
Esta documentación so'lo se refiere a la información
necesaria para la utilización del emulador CpcAlive. Una
demostración, programas utilitarios, documentaciones sobre la
explotación
del CPC y sobre las interrupciones Bios y Dos, un
ensamblador Z80 así como un
ensamblador X86 están disponible en el sitio Internet: www.cpcalive.com
- Esta
documentación utiliza dos tipos de notación de los valores hexadecimales. La
primera notación añade la señal "&" ante el valor, ex:&3F. La segunda notación
añade la carta "h" detrás del valor, ex:3Fh. CONTENIDO
I - Presentación
e instalación del emulador CpcAlive
CpcAlive es un emulador de ordenador
Amstrad CPC 6128.
Especificidades
del emulador CpcAlive
* acceso a
las interrupciones del Bios y del Dos mediante
instrucciones añadidas al Z80
* lugar de programación
X86
* BASIC programable
* salidas pantalla al formato BMP y animaciones FLI
* posibilidad de tratar a
partir del interpretador BASIC del CPC, todo fichero presente en el
disco duro u otro
soporte.
* cree salvaguardias ejecutables
* debugger Z80
* compatibilidad: - Dos,Windows 95/98/2000/Me/XP
- procesadores
386 y más.
Inicializacion:
Crea un directorio CpcAlive sobre tu disco duro
y descomprime el fichero CpcAliveV1.09f.zip en este
directorio. = Icono
de lanzamiento del emulador CpcAlive = Icono
de lanzamiento del sistema DOS para Windows
Para
crear un atajo, utilizar el icono nombrado CpcAlive.
Observaciones:
- Un
programa de instalación para Windows está disponible en el sitio Internet:
www.cpcalive.com
- Si
un mensaje "Ems error" se indica, comprobar si se instala a un piloto de
memoria EMS. Llega
a veces con Windows XP que el piloto de memoria EMS no funciona, aunque eso se
indique en las propiedades. En ese caso, reinicializar el ordenador, y
rehacer una prueba.
- Los colores PAPER y PEN 1
se modificaron a la inicialización por razones de
ergonomía (menos cansando para los ojos).
Cargamento a partir de la línea de pedido DOS:
CpcAlive NombreDeFichero[:X]
Es
tan posible utilizar el sintaxis: ! NombreDeFichero[:X ]
El marcador representado por
el carácter X es facultativo, depende del tipo de fichero que debe encargarse. (No
poner espacio entre el nombre de fichero y el marcador).
Cargamento a partir de un fichero de pedidos CpcAlive: NombreDeFichero[:X ]
Cargamento a partir del interpretador BASIC del Cpc: |INPUT,
"NombreDeFichero[:X]"[,@er%]
El parámetro de
vuelta de error @er% es faculatif. Si se pone, el significado de los
valores recuperados en la variable er% son:
0 = ok
1 = error en los
parámetros
2 = camino no encontrado
No olvidar inicializar un er% al
principio del programa o antes el pedido.
p.ej.: 10 er%=0
20
|INPUT,"disque.dsk:A",@er%
30 if er%<>0
then
PRINT"error":STOP
Es posible poner
vario nombre de ficheros a la consecuencia, basta con
separarlos de un espacio. En
este caso, el código de error er% se referirá solamente
al último fichero mencionado. Ha
tan posible de obtener información sobre el último fichero encargado con el siguiente pedido:
info$=string(12,"X"):|INFO,@info$:PRINT info$
II - 1 - Cargamento disquetes
virtuales al formato. DSK -
Hacer seguir el nombre de fichero del marcador:A o:B para elegir el
lector destino. (lector A por defecto)
Cargamento a partir de la línea de pedido DOS:
! NombreDeDisquete:A Cargamento a partir de un fichero de pedidos CpcAlive: NombreDeDisquete:A
Cargamento a partir del interpretador BASIC del Cpc: |INPUT,
"NombreDeDisquete:A"
Este pedido lanza el emulador encargando el disquete virtual
"disque.dsk" en el lector A.
II - 2 - Cargamento ROMs
CPC -
El Cpc 6128 se proporciona en norma de 48Ko (3 bloques de 16Ko cada uno) de
memorias ROM. Uno de estos bloques contiene el sistema de explotación que se
conecta en la zona 0 a 03FFFh (rom inferior). Los dos bloques restantes (BASIC y
sistema disco) se conectan en la zona 0C000h a 0FFFFh (roms superiores). El
sistema puede explotar en esta última zona 252 bloques de 16Ko cada uno. Una
particularidad interesante estos de roms es que pueden recibir instrucciones
BASIC programables (Resident System eXtension).
Para
encargar un fichero en rom, hacer seguir el nombre de fichero del marcador:R. CpcAlive buscará el primer
sitio disponible.
Cargamento a partir de la línea de pedido DOS:
! ROMZ80.ROM:R
Cargamento a partir de un fichero de pedidos CpcAlive:
ROMZ80.ROM:R Cargamento a partir del interpretador BASIC del Cpc:
|INPUT, "ROMZ80.ROM:R":call 0
El
número del sitio de ROM estado cargada puede obtenerse de la siguiente
manera:
info$=string(16,"X"):|INFO,@info$:RomSitio=val("&"+mid$(info$,13,16)):PRINT RomSitio
En
el caso es necesario tener un número de sitio fijo, sustituir a la carta "R" por
el número de sitio deseado. ejemplo a partir de la línea de
pedido DOS: ! ROMZ80.ROM:10
Los
roms serán reconocidos por el sistema CPC solamente después de un
réinitialisation del CPC por ejemplo con un CALL 0 o impulsando la secuencia
de teclas [ CTRL][ALT][Home]. El
emulador acepta instrucciones RSX en la totalidad de los roms
superiores. Los números de roms ya utilizados por la CPC son 0 para la rom BASIC y 7 para la rom disco. Los módulos X86 (véase capítulo "LUGAR DE PROGRAMACIÓN X86") con mnemotecnias utilizan también sitios de roms
Z80. Los roms Z80 con un número de sitio específico deben pues estar cargados
antes de los módulos X86. El mejor medio de evitar los conflictos es encargarlos al principio del fichero
de pedidos ROM INI situado en el directorio principal.
En
la interpretación de un programa en ROM, CpcAlive redirige por defecto los
accesos en escritura del microprocesador Z80 hacia la RAM. El pedido
|UNLOCK,-número de sitio de rom- autoriza los accesos en escritura del
microprocesador Z80 en la ROM especificada. El funcionamiento de la ROM se
vuelve entonces similar a una RAM.
II - 3 - Cargamento ficheros al
formato Intel Hex -
El
formato Intel Hex es línea orientada y utiliza
solamente caracteres ASCII imprimibles.
línea al formato INTEL hex:
:LLAAAA00DDDDCC ; ' : ' = carácter inicial
; LL = taille bloque (2
dígitos hexa)
; AAAA = adresse inicial (4
dígitos hexa)
; 00 = tipo
de registro (00)
; DDDD = datos (2
dígitos hexa para cada octeto de datos)
; CC =
CRC (Checksum) de la línea (2
dígitos hexa)
ejemplo: :18A600000109A62111A6C3D1BC15A6C31EA6C335A6000000004F5049A2 :18A61800D8495049D800DD5603DD5E02DD4605DD4E043E0C4052DD7E97 :18A6300000404810C9D5DD5603DD5E02DD4605DD4E043E0D40524048AD :07A6480010D11213AF12C97B :00000001FF
En
este ejemplo, la primera línea contiene 018h octetos de datos (01h,09h,0A6h...
049h) que se encargarán a partir de la dirección 0A600h. El crc (Checksum) de la línea es
igual a 0A2h. El
emulador ignora el crc normalmente presente a cada final de línea en
la norma Intel Hex. El
tipo de registro igual a 1 indica la última línea del fichero. Esta línea no es
necesaria en los ficheros encargados por el emulador.
Cargamento
en rom:
Para
encargar un fichero al formato intel hex en rom, hacer seguir el nombre de fichero del marcador:X dónde X
representa el número de rom destinatario. P.ej. para encargar en la rom número 10: Cargamento a partir de la línea de pedido DOS:
! FICHERO.HEX:10
Cargamento a partir de un fichero de pedidos CpcAlive:
FICHERO.HEX:10 Cargamento a partir del interpretador BASIC del Cpc:
|INPUT, "FICHERO.HEX:10"
Si la rom no
existe, CpcAlive lo crea. Es tan posible utilizar al
marcador:R (véase cargamento roms)
Cargamento en ram:
El
6128 poseen una memoria de 128 Ko divididos en ocho bloques de 16 Ko
cada uno, numerados de 0 a 7. Sólo cuatro bloques pueden seres conectados
simultáneamente.
Cuadro por el que se muestra la localización de los bloques Ram en foncion del tipo de configuración:
tipo posiciones bloques
0C0h
0,1,2,3
<= configuración
normal
0C1h 0,1,2,7
0C2h 4,5,6,7
0C3h 0,3,2,7
0C4h 0,4,2,3
0C5h 0,5,2,3
0C6h 0,6,2,3
0C7h 0,7,2,3
El sistema de Cpc so'lo explota el primer tipo de
configuración. En esta configuración el bloque 0 ocupa el espacio 0 a 03FFFh de
la memoria, el bloque 1 el espacio 04000h a 07FFFh, el bloque 2 el espacio
08000h a 0BFFFh, el bloque 3 el espacio 0C000h a 0FFFFh. La
pantalla explota el bloque 3. La parte superior del bloque 2 contiene las
variables sistema. La parte inferior del bloque 0 es utilizada por el sistema.
Los programas BASIC son encargados por el sistema a partir de la dirección
0170h. Los datos binarios pueden seres encargadas a partir de la dirección
definida con ayuda del pedido Basic "MEMORY". Si se trata de programas, podrán llamarse con la instrucción "CALL".
Para
encargar un fichero al formato intel hex en ram, hacer seguir el nombre de fichero del marcador:X dónde X
representa el tipo de configuración del Ram destinatario.
Los valores hexadecimales válidos para el cargamento en Ram son:
0C0h, 0C1h, 0C2h, 0C3h, 0C4h, 0C5h, 0C6h et 0C7h Por defecto,
el cargamento se hace en Ram con la configuración 0C0h ejemplo a partir del
interpretador BASIC:
|input,"fichero.hex" para encargar en la ram con la configuración
normal
notas:
- Es posible ver la memoria del Cpc con el emulador CpcAlive utilizando el
pedido |DEBUG,&f a partir del interpretador BASIC.
- colocar en
Ram en los bloques 0,1,2 ó 3 antes de la
inicialización del sistema CPC es inútil
puesto que ésta se borra al comienzo. Para colocar en Ram a partir de la
línea de pedido del DOS, es
necesario que el sistema se haya lanzado luego puesta en víspera
antes.
nota: El ensamblador 8 bites "tasm" es un
ensamblador Z80 que
genera ficheros al
formato Intel hex. Este ensamblador está disponible en el sitio Internet: www.cpcalive.com
II - 4 - Cargamento de ficheros
de pedidos CpcAlive
Los pedidos internos del emulador válidos a partir de la
línea de pedido del sistema DOS o de un fichero de pedidos CpcAlive son:
CpuFast
; selecciona la velocidad máximo - [F12]
CpuSlow
; selecciona la velocidad del ordenador CPC - [F11]
Sleep
; puesta en víspera del
emulador
- [AltGr][S]
Exit
; dejar el
emulador
- [Ctrl][Alt][End]
ROM=X
; selecciona un sitio de ROM (X=256 para el Bios)
RAM=X
; selecciona el tipo de RAM
; ver capítulo II - 1c - "Cargamento en ram"
; para los valores de configuración
disponibles.
:LLAAAA00DDDD ; cargamento
datos. (línea al formato Intel Hex)
CommandEnd (o EndCde) ; indica el final de
un fichero
de pedido. (facultativo)
KeyBoard ; Para
pasar del método "pedidos CpcAlive" al método "emulación teclado". Será posible
restablecer la interpretación del fichero en método "pedido" con la
instrucción |COMMAND.
Los
pedidos CommandEnd, EndCde y KeyBoard restablecen la configuración memoria del CPC
efectiva al lanzamiento del fichero de pedidos.
ejemplo a partir de la
línea de pedido del DOS: Seleccionar la rom BIOS y colocar 2 en 0B13h (modo pantalla
de comienzo), luego seleccionar el velocidad lenta.
! ROM=256 :010B130002 CpuSlow
(no olvidar el espacio entre los pedidos)
nota:
- colocar en
Ram en los bloques 0,1,2 ó 3 antes de la
inicialización del sistema CPC es inútil
puesto que ésta se borra al comienzo. Para colocar en Ram a partir de la
línea de pedido del DOS, es
necesario que el sistema se haya lanzado luego puesta en víspera
antes.
ficheros
de pedidos CpcAlive
Estos ficheros están destinados, como su nombre lo indica, a
encargar el emulador a partir de un fichero. Este fichero debe comenzar
por la secuencia "CDE:" o "CMD:" sin las comillas
(encabezamiento).
Cargamento a partir de la línea de pedido DOS:
! FICHERO.CMD
Cargamento a partir de un fichero de pedidos CpcAlive:
FICHERO.CMD Cargamento a partir del interpretador BASIC del Cpc:
|INPUT, "FICHERO.CMD"
ejemplo1:
CMD: ; encabezamiento
ROM=256 ; seleccionar
rom bios
:010B130002 ; 0B13h=2 (modo pantalla
de comienzo)
CpuSlow ; selección
velocidad
CommandEnd ; indica el final del fichero
de pedido
ejemplo2:
CMD:
ROM=256 ; seleccionar
rom bios
:010B130002 ; 0B13h=2 (modo pantalla
de comienzo)
CpuSlow ; selección
velocidad
KeyBoard ; pasa en
método teclado,
; a partir
aquí de cada
carácter se transmite directamente al teclado
PRINT"ok"
ejemplo3:
PRINT"ok1"
|COMMAND ; pasa en método
"pedidos CpcAlive"
ROM=256 ; seleccionar
rom bios
:010B130002 ; 0B13h=2 (modo pantalla
de comienzo)
CpuSlow ; selección
velocidad
KeyBoard ; pasa en
método teclado,
; a partir
aquí de cada
carácter se transmite directamente al teclado
PRINT"ok2"
Es
tan posible encargar a partir de un fichero de pedidos CpcAlive los siguientes
tipos de ficheros: disquetes virtual al formato.
DSK , ficheros Rom
CPC , ficheros al formato INTEL
hex , ficheros de pedidos CpcAlive , documentos
texto y ficheros
binario . El
traslapo de los ficheros de pedidos CpcAlive se autoriza con los límites de 15 ficheros
máximos (los ficheros de texto incluidos). Un buen ejemplo es el fichero ROM INI que es un fichero de pedido que
se destina a la inicialización del emulador. Es a partir de
éste que están cargados por ejemplo los
roms del Cpc se interpreta Cada línea de la misma manera que
para los pedidos "CpcAlive" a partir de la
línea de pedido DOS. Note la presencia del separador ';' para los comentarios. (no utilizar el pedido "KeyBoard" en el fichero ROM INI). El fichero de pedidos CPC INI situado en el directorio principal es un fichero
usuario que puede recibir pedidos de configuración.
II - 5 - Cargamento de ficheros
al formato texto
En caso de que el tipo de fichero no es reconocido por CpcAlive como
uno de ficheros enumerados más arriba, CpcAlive consideran que
se trata
de un fichero al formato texto.
CpcAlive trata estos ficheros del mani siguiente: se lee cada
carácter del documento, luego enviado al
gestor teclado del sistema CPC. Es
así posible, por ejemplo, transmitir por esta función un fichero BASIC al
formato texto o controlar un programa que vuelve en el emulador.
Cargamento a partir de la línea de pedido DOS:
! ejemplo.bas Cargamento
a partir de un fichero de pedidos CpcAlive:
ejemplo.bas Cargamento a partir del interpretador BASIC del Cpc:
|INPUT, "ejemplo.bas"
Estos pedidos encargan el programa nombrado exemple.bas si existe, a
través el gestor teclado del Cpc en este ejemplo, el fichero
"ejemplo.bas" se
sitúa en el directorio CpcAlive. Si el fichero no existe,
la cadena
"ejemplo.bas" será transmitida al gestor
teclado del Cpc, lo
que desembocará
probablemente sobre un mensaje "Syntax error".
ejemplo a partir del
interpretador BASIC:
MODE 2
10 |INPUT, "FILE_ID.DIZ"
20 LINE INPUT a$:if a$ = "" then |STOP:END ELSE GOTO 20
run
Este ejemplo encarga el documento "FILE_ID. DIZ" hasta que encuentre
una línea vacía. El pedido |STOP firme el fichero.
El
traslapo de los ficheros de texto se autoriza con los límites de 15 ficheros
máximos (los ficheros de pedidos CpcAlive incluidos).
Es posible utilizar al marcador ":D" ('D'atas) para encargar datos en la memoria del Cpc utilizando el siguiente sintaxis:
a partir del interpretador BASIC del Cpc:
|INPUT,"nombre_de_fichero:D,longitud_bloque,dirección_bloque_en_fichero,dirección_cargamento_en_memoria_Cpc"
a partir de un fichero de pedidos CpcAlive:
nombre_de_fichero:D,longitud_bloque,dirección_bloque_en_fichero,dirección_cargamento_en_memoria_Cpc
Pensar por proteger el bloque encargado con el pedido
MEMORY dirección_cargamento - 1. El
tamaño real del bloque estado cargado puede obtenerse de la siguiente
manera: info$=string(16,"X"):|INFO,@info$:LongBloque=val("&"+mid$(info$,13,16))
Es
así posible tratar todo tipo de fichero. El
ejemplo siguiente encarga una imagen BMP (opción de formato OS/2, 16 colores, 180*100 máximo)
y lo indica sobre la pantalla CPC.
10 memory &3FFF:adr=&4000
20 ximg=0:yimg=0:nameimg$="image.bmp":' <<<< X,Y,IMAGE NAME
30 |input,nameimg$+":D,&4100,0,&4000"
40 if peek(adr+&E)+256*peek(adr+&F)<>12 then mode 2:?"OS/2 format only accepted":end
50 x=peek(adr+&18)+256*peek(adr+&19)
60 if x<>4 then mode 2:?"16 colors in image only accepted.":end
70 mode 0:x=0:for i=0 to 45 step 3:|ink,x,peek(adr+&1C+i),peek(adr+&1B+i),peek(adr+&1A+i):x=x+1:next
80 largeur=peek(adr+&12)+256*peek(adr+&13)
90 hauteur=peek(adr+&14)+256*peek(adr+&15)
100 reste=largeur mod 2:x=int(largeur/2)+reste:while x mod 4 <> 0:x=x+1:wend:larbloc=x
110 adr=adr+peek(adr+&A)+256*peek(adr+&B):'adresse image dans fichier
120 for i=0 to hauteur*4 step 4:x=0
130 for j=adr to adr+(int(largeur/2)+reste)
140 pencil=(peek(j) and &F0)/16:plot ximg+x,yimg+i,pencil:plot ximg+x,yimg+i+2,pencil:x=x+4
150 pencil=peek(j) and &F:plot ximg+x,yimg+i,pencil:plot ximg+x,yimg+i+2,pencil:x=x+4
160 next j:adr=adr+larbloc:next i
run
El marcador :D solo tras el nombre de
fichero indica al emulador que debe transmitir el
valor de cada octeto del fichero a través
del teclado del Cpc al formato decimal. Esta
función se desarrolló para permitir tratar fácilmente los datos de un fichero a
partir del interpretador BASIC del CPC.
Como ejemplo, he aquí un pequeño programa cuya
función es leer algunos octetos del fichero ROM.INI y de
indicarlos al formato hexadecimal.
10 MODE 2:window#0,1,80,2,25:window#1,1,80,1,1
20 |INPUT,"ROM.INI:D"
30 for i=0 to 100
40 input#1,a:Print hex$(a, 2)"";
50 next
60 |STOP
run
El pedido |GO,"cadena numerica"[,@er% ] desplaza al indicador de fichero. En este caso, "cadena numerica" representa el valor del desplazamiento con
relación al principio del fichero. El parámetro de vuelta de error @er% es faculatif. Si se pone,
el significado de los valores recuperados en la variable er% son:
0 = ok
1 = error
(No olvidar inicializar un er% al principio del programa o antes del pedido)
p.ej.: |GO,"&100" desplaza al indicador de fichero a
la posición &100. El valor máximo es &FFFFFFFF. El
indicador de fichero quizá también escrito en decimal.
III - Pedidos a partir del interpretador BASIC del Cpc:
Los
pedidos CpcAlive apelables a partir del interpretador BASIC deben precederse de
la barra vertical " | ".
|CpuFast
= selecciona la velocidad máximo - [F12]
|CpuSlow
= selecciona la velocidad del ordenador CPC - [F11]
|CpuSlow,velocidad = cambia velocidad |CpuSlow (0<velocidad<&FFFF)
|Sleep
= puesta en víspera del emulador
-
[AltGr][S]
|Sleep,"mensaje"
= puesta
en vispera con mensaje
|Exit
= dejar el
emulador
- [Ctrl][ALT][End]
|Exit,"mensaje"
= dejar
el emulador con mensaje
|COMMAND
= para pasar del método "teclado" al
método "pedidos CpcAlive". (ver capítulo II apartado - 4 -)
|INPUT, "nombre_de_fichero[:X]"[,@er%]
= ver capítulo II
|INFO,@info$ = carga
el bloque de información del último fichero entrado con
la función |INPUT
o mediante un fichero de pedidos CpcAlive. ej:
|INPUT,"Disk.dsk":info$=string(12,"X"):|INFO,@info$:PRINT info$
|UNLOCK,-número de sitio de rom-
= autoriza los accesos en escritura del
microprocesador Z80
en la ROM especificada. (ver capítulo II apartado - 2 -)
|EJECT,"A" = expulsa
el disquete virtual presente en el lector A
|EJECT,"B" = expulsa
el disquete virtual presente en el lector B
|STOP
= ver capítulo II apartado - 5 -
|GO,"cadena numerica"[,@er% ]
= ver capítulo II apartado - 6 -
|OUTPUT, "NombreDelFicheroDeSalida"[,@er%]
= cambiar el nombre de fichero de salida (ver capítulo IV)
|OUTASCDOS = ver
capítulo V
|OUTASCWIN = ver
capítulo V
|OUTASCOFF
= ver capítulo V
|PRINT, "cadena" = saca
una cadena de caracteres hacia fichero_de_salida.
(pedido equivalente al pedido
PRINT#8,"cadena";)
|LPRINT, "cadena" = saca una cadena de
caracteres hacia fichero_de_salida seguimiento
de una vuelta a la línea.
(pedido equivalente al pedido PRINT#8,"cadena")
|INK,PEN,R,V,A
= cambio color PEN. Las cartas R,
V, A representan los
componentes Rojos, Verdes y Azules (0 a 255)
ex: |INK,0,0,255,0 (PAPER)
|INK,1,255,0,0
(PEN
1)
|INKRESTORE
= res tintas originales
|INKCPC
= tintas normales CPC
|INKSOFT
= tintas CpcAlive (tintas por defecto)
La paleta es la misma que la
paleta normal CPC pero con menos
por
luminosidad, y los valores PAPER y PEN 1 se modifican.
|OBMP, "nombre_de_fichero.BMP"[,@er%]
= fabrica un fichero imagen de la pantalla CPC al formato BMP
- ver pedido |OUTPUT para el significado de los códigos de
errores.
|DEBUG,adress = lance
el debugger cuando la reunión del procesador Z80 los adress
especificados.
|DEBUGSYS,adress = Esto
hace la misma cosa pero para le bios del Cpc (rom inferior).
|DEBUGOFF = pare el debugger
|DUMP,adress = inicializa el dump memoria del debugger
|NODEBUG = prohibido
el debugger
|NOSLEEP = prohibido
el puesta en víspera del emulador
|MAKE,"nombre_de_fichero.EXE"[,@er%]
= cree
una salvaguardia ejecutable (salvaguarde dejando el emulador).
- ver pedido |OUTPUT para el significado de los códigos de
errores.
|MAKEMOVIE,"nombre_de_fichero.EXE"[,@er%]
= cree
una animacione ejecutable (salvaguarde dejando el emulador).
-
cualquier movimiento del teclado poner fin a la
ejecución del archivo producido.
- ver pedido |OUTPUT para el significado de los códigos de
errores.
CALL 0 = inicializa el sistema CPC - [Ctrl][Alt][Home]
nota:
los ficheros creados con los pedidos |MAKE o |MAKEMOVIE no pueden
reelegirse con la función "rename" del sistema DOS. Para reelegir
estos ficheros, utilizar su función interna a partir de la línea de pedido del
DOS: nombre_de_fichero.EXE rename:nuevo_nombre ou nombre_de_fichero.EXE ren:nuevo_nombre (no espacios entre "rename: " y "nuevo_nombre")
Los pedidos CPC deben siempre colocarse en último en la
línea de pedido.
p.ej.: ! PRINT"ok"
Lanza el emulador y hace el pedido PRINT"ok" a el CPC
Caso particular:
El carácter '|' es un pedido Dos. CpcAlive
utiliza pues un carácter de sustitución que el '§' (o
carácter 245).
p.ej.: ! §DISC
Lanza el emulador y hace el pedido |DISC a el CPC.
Esta tecla de sustitución siempre se utilizará en
CpcAlive en
razón de su facilidad de acceso. Puede pues servirte de este "atajo
teclado" a partir de la línea de pedido BASIC del Cpc.
Existe otros caracteres reservados por DOS como el "&" , "<" o ">" no podrán utilizarse en pedidos CPC a partir de la
línea de pedido DOS. Para más información, leer la
documentación del sistema DOS.
Por
defecto la salida impresora del CPC se hace en el fichero CPC.PRN situado en
el directorio principal CpcAlive. Es posible cambiar el nombre del fichero de
salida a partir de la línea de pedido DOS añadiendo el carácter '>' al final de
la línea de lanzamiento seguido del nombre de fichero deseado.
ejemplo:
! PRINT#8,"OK" inscrito la palabra "OK" en el fichero Cpc.prn
! PRINT#8,"OK">test.prn inscrito la palabra "OK" en el fichero
test.prn
Un
único carácter '>' antes del nombre del fichero de salida indica al
DOS que a caso o el nombre del fichero de salida ya existe, este fichero será reconstruye
virgen antes de recibir los datos. (El antiguo fichero de salida
del mismo nombre que se borra sin preaviso... prudencia).
Dos caracteres '
> > ' antes del nombre del fichero de salida indican al DOS que debe conservar el
fichero y poner los nuevos datos a seguir. (No existe por el momento de pedido equivalente
a partir del interpretador BASIC del Cpc)
ejemplo:
! PRINT#8,"OK1":§Exit>test.prn inscrito la palabra "OK1" en el
fichero test.prn
! PRINT#8,"OK2":§Exit>>test.prn inscrito la palabra "OK2"
que debe seguirse en el fichero test.prn
El resultado en el fichero test.prn da:
OK1
OK2
Es
posible cambiar de nombre de fichero de salida a partir del interpretador BASIC
del CPC mecanografiando el siguiente pedido: |OUTPUT, "NombreDelFicheroDeSalida"[,@er%]
El parámetro de vuelta de error @er% es faculatif. Si se pone,
el significado de los valores recuperados en la variable er% son:
0 = ok
1 = error en los parámetros
3 = camino no encontrado
4 = más de ha disponible
5 = acceso rechazado
(No olvidar inicializar un er% al principio del programa o antes del pedido)
Un pequeño programa que redi la salida CATalogue hacia el
fichero de salida:
nota: El
fichero Cpc.prn se vacia a cada lanzamiento del emulador.
V - CARáCTERS ACENTUADOS
Inicialización a partir del DOS para obtener un teclado
acentuado:
! Accent.ini
El fichero Accent.ini
se termina por el pedido |sleep, será
necesario
pues reactivar el emulador a partir del DOS tras esta pedido. El fichero
Accent.ini es un documento texto compuesto de pedidos BASIC
fácilmente el integrable en los programas basics.|OutAscDos y
|OutAscWin a partir del BASIC CPC indican al emulador que
él debe convertir los caracteres 192 a 204 (redefinidos en el
fichero ROM INI) antes de dirigirlos hacia el fichero de salida. Para
operar una conversión texto al formato DOS hacia el fichero de salida utilizar
|OutAscDos. Para operar una conversión texto al formato Windows hacia el fichero de salida utilizar
|OutAscWin. Para cancelar esta conversión utilizar |OutAscOff. Útil si se utiliza del fichero de salida para otra cosa que del
texto. (Pedido por defecto)
Los caracteres se redefinen de la siguiente forma:
carácter:
ë ù
û ô
É é
è ê à
â ç î
ï
ASCII CPC redefinido:
192.193.194.195.196.197.198.199.200.201.202.203.204
ASCII Dos:
137.151.150.147.144.130.138.136.133.131.135.140.139
ASCII windows:
235.249.251.244.201.233.232.234.224.226.231.238.239
ejemplo:
Para convertir el documento "CreaDisc" (que es un documento texto
al formato ASCII DOS) al formato ASCII windows, escrito la secuencia
que
sigue a partir de la línea de pedido DOS:
! Accent.ini
!>CreaDisc.win
Luego a partir del interpretador BASIC del Cpc:
MODE 2
|OutAscWin
10 |INPUT, "CreaDisc"
20 LINE INPUT a$
30 |LPRINT,a$:if a$< >"" then 20
run
El resultado se encuentra en el fichero CreaDisc.win
Atención: Sólo se reconvierten los caracteres redefinidos
más arriba
VI
- ACCESO a
las INTERRUPCIONES del BIOS Y del DOS a
través del microprocesador Z80
Las interrupciones del Bios y del DOS son accesibles gracias a
opcodes específicos al emulador CpcAlive a
través del microprocesador Z80 emulado y una correspondencia
entre los registros Z80 y X86. El
cuadro a continuación que figura la correspondencia de los registros establecida
entre los dos procesadores: registros Z80
registros
X86
F
> F
A
> AL
BC
> CX
DE
> DX
HL
> BX
IX
> SI
IY
> DI
CpcAlive
añade al Z80 nuevos opcodes así como registros nombrados AH, BP, DS y ES
correspondientes a los registros de los procesadores X86.
ejemplo: opcode:
mnemotecnia: función:
040h, 052h LD AH, A
carga el valor del
registro A en el registro X86 AH
040h, 05Bh LD A, AH
encarga el valor del registro
X86 AH en el registro A
040h, 048h, xx INT(xx)
llamada
interrupción número xx
ejemplo de macros
(aquí para el ensamblador 8 bites tasm)
# define LD_AH_A db
040h \ db 052h
# define
LD_A_AH db 040h \ db
05Bh
# define INT(xx)
db 040h \ db 048h \ db xx
ejemplo:
; ** SALIDA PIXEL A través de INT 010H **
OutPix: ld de, 12
;
dato Y
ld bc, 24
; dato X
ld a,
0Ch
; FUNCIÓN 0CH = ESCRIBIR UN PUNTO GRÁFICO
LD_AH_A
; carga el valor del registro A en el registro X86 AH
ld
a,3
; color pedido
INT(010h)
; LLAMADA INTERRUPCIÓN BIOS 010H
ret
notas:
- La correspondencia de los registros Z80-X86 se respeta a la vuelta de
la interrupción
- Es necesario
saber también que el ram CPC se sitúa en el segmento EMS.
- La interrupción del Bios
INT 10H que no acepta que las funciones:
Función 02h // Set cursor position //
Función 03h // Read cursor position //
Función 09h // Write character with color at cursor //
Función 0Ah // Write character with color at cursor //
Función 0Bh // Set color palette //
Función 0Ch // Write graphics pixel at coordinate //
Función 0Dh // Read graphics pixel at coordinate //
Función 0Eh // Write text in teletype mode //
Función 10h - 00h // set individual palette register //
Función 10h - 02h // set all palette registers and border //
Función 10h - 07h // read palette register //
Función 10h - 09h // read palette registers and border //
Función 10h - 10h // set DAC color register //
Función 10h - 12h // set block of DAC color registers //
Función 10h - 15h // read DAC color register //
Función 10h - 17h // read block of DAC color registers //
Función 10h - 1Bh // sum color values to shades of gray //
Función 13h // Write string //
Los registros de paleta corresponden a los 16 pinceles (PEN) del Cpc y los
registros DAC corresponden a 32 tintas (INK) del Cpc. El emulador ignoran la
programación del registro overscan (BORDER) que estará todavía del mismo color
que el fondo de la pantalla (PEN 0).
El fichero Z80IOPix.bas situado en el directorio "EX" es
un ejemplo de pedidos RSX que utilizan las interrupciones
del
Bios. Este fichero es un fichero de pedido CpcAlive. Se incluyen las
explicaciones así como un listado. pedido a partir de la
línea de pedido del Dos: !
EX\Z80IOPix.bas pedido a partir del
interpretador
BASIC: |input,
"EX\Z80IOPix.bas"
Estos
pedidos generan las funciones |OPIX,X,Y,PEN y |IPIX,X,Y,@PEN que
respectivamente escrito y lee un punto gráfico sobre la pantalla a los datos X y Y.
BP,
DS, ES y AH corresponden a los registros del procesador X86. Por defecto
los registros DS y ES dirigen la memoria del Cpc (Segmento Ems).
nota:
Una documentación sobre las interrupciones del bios y del dos,
así como el ensamblador 8 bites "tasm" están disponibles
en cobro a distancia en el sitio Internet: www.cpcalive.com
VII - LUGAR DE PROGRAMACIÓN X86
Es posible programar el emulador CpcAlive
en ensamblador X86. CpcAlive acepta 256 módulos X86. Un
módulo X86 es un programa al formato .EXE o .COM que contiene una tabla de
instalación situada a la dirección 0200h en el código del programa, así como una
tabla pudiendo contener 128 vectores de llamada X86. Los vectores de llamada X86
pueden llamarse con pedidos BASIC o opcodes Z80. El tamaño máximo de un módulo
X86 es de 64K. La tabla de instalación de un
módulo X86 debe constituirse como esto:
org 0200h
db ' X86CPC
'
; 0200h marca (reservado
sistema)
dw
0
; 0206h versión (reservado
sistema)
dw offset X86Vec
; 0208h tabla vectores de entrada
dw
0
; 020Ah reservado
dw
0
; 020Ch reservado
dw
0
; 020Eh reservado
dw offset MnemoTb ; 0210h tabla de los nombres
db
-1
; 0212h (*) recibe
el número de módulo X86
db
-1
; 0213h reservado
db
-1
; 0214h (*) recibe
el número de la rom Z80 asociada
db
-1
; 0215h reservado
dw
0
; 0216h (*) recibe
el primer
lugar CPC accesible (0=ningún lugar accesible)
db
0
; 0218h reservado
dw
0
; 0219h (*) recibe el ems handle asociado
al módulo
dw
0
; 021Bh (*) recibe el número lógico de la primera página 16K del módulo
db
0
; 021Dh (*) recibe el
cantidad de las páginas 16K asignadas al módulo
db 0100h-01Eh dup (0) ; 021Eh reservado
(*) = valor
generado por el sistema
; tabla vectores de entrada
X86Vec dw offset programa1
; 00 1.o programa
dw offset programa2
; 01 2.o programa
;... 128 vectores máximos
; tabla de los nombres (mnemónicos)
MnemoTb db "PROGRAMA","1" or 080h ; |PROGRAMA1
db "PROGRAMA","2" or
080h ;
|PROGRAMA2
db 0
; programas X86 deben declararse en "FAR"
programa1 proc far
;... programa X86
retf
programa1 endp
programa2 proc far
;... programa X86
retf
programa2 endp
Funcionamiento:
Sobre presencia del vector MnemoTb a la dirección 0210h, el emulador genera una
rom Z80 interpretable por el sistema Cpc integrando la tabla de los nombres (MnemoTb) así como sus vectores de
llamada X86. El primer vector de la tabla "X86Vec" que corresponde a la primera
mnemotecnia es el vector de inicialización que se llama a cada inicialización
del sistema Cpc. Cada mnemotecnia corresponde a un vector de esta tabla (en el
orden). El final de cada mnemotecnia se indica gracias a la presencia del bit 7
sobre la última carta de la mnemotecnia. La tabla no debe superar 128
mnemotecnias y debe ser terminada por un octeto nulo. Para utilizar un pedido, bastará con mecanografiar el nombre del pedido precedido de la
señal " barra vertical | " a partir del interpretador BASIC del CPC.
Nota:
Es tan posible llamar las rutinas X86 desde el ram Cpc a través de opcodes
Z80 (véase más partes bajas). En caso de que la utilización de mnemotecnias de
llamada no es necesaria, sustituir al vector "MnemoTb" por un
valor nulo (dirección 0210h).
El fichero X86IOPix.asm situado en el directorio
"EX" es un ejemplo completo. Es
este fichero que generó el módulo X86IOPix.com situado en el mismo directorio
pero pueden compilar le también al formato .EXE pedido a partir de la
línea de pedido del Dos: !
EX\X86IOPix.com
Este
pedido genera las funciones |OPIX,X,Y,PEN y |IPIX,X,Y,@PEN que
respectivamente escrito y lee un punto gráfico sobre la pantalla a los datos X y Y.
Llamar
una rutina X86 a través de opcodes Z80:
La
llamada de una rutina X86 a partir de la memoria del Cpc se hace con
ayuda del opcode 049h siguió del número de módulo, luego del número de vector.
Por ejemplo si se quiere llamar "programa2" (vector número 1) en el ejemplo aquí
arriba, considerando que el emulador haya encargado el módulo al sitio 010h, eso
se dará el opcode Z80: 049h, 010h, 001h El número de módulo se indica a la dirección 0212h de la
tabla de instalación del módulo X86 (véase más arriba). El número de vector
debe incluirse entre 0 y 127. Si el bit 7 se pone, se simulará una instrucción
"RET" a la vuelta de la rutina X86. El funcionamiento se vuelve así similar a
una instrucción de salto "JP".
Los valores de los registros del Z80 se retransmiten a las rutinas X86
de esta manera:
registros
Z80 registros X86
F
> Flags
A
> AL
BC
> CX
DE
> DX
HL
> BX
IX
> SI
IY
> DI
Se
transfieren los registros X86 descréditos en el capítulo anterior también. Los registros de segmento FS y GS están
indeterminados. Los valores de los registros X86 a la vuelta de la rutina se
retransmitirán al Z80 de la misma manera.
El acceso a la memoria del CPC depende del tamaño del modul. En
efecto, se realizan los moduls se encargan y al mismo sitio que la
memoria del CPC. El primer
lugar CPC accesible se indica a la dirección 0216h de la
tabla de instalación del módulo X86. La memoria del CPC se restaura después de cada llamada.
Encargar un modul en el emulador:
a partir de la línea de pedido DOS:
! MODULO.COM
a partir de un fichero de pedidos CpcAlive:
MODULO.COM a partir del interpretador BASIC del Cpc:
|INPUT, "MODULO.COM":call 0
notas:
- Las
direcciones CPC inferiores a 04000h no son nunca accesibles.
- El
periférico de salida normal (stdout) es la pantalla todavía.
- La
interrupción del Bios INT 10H so'lo acepta las funciones descritas en el
capítulo anterior.
- En caso de que no sea necesario que el modul esté inicializado por su primer
vector al comienzo del sistema CPC, es posible utilizar al marcador ":W" (Waggon)
tras el nombre del módulo. El emulador encargará entonces los vectores así como
las mnemotecnias del módulo en la rom Z80 generada por el cargamento del módulo
anterior. Se ahorrarán así sitios de roms Z80. (En caso de que no habría habido
aún módulo encargados anteriormente, el emulador creado un primer vector "sin
efecto" en la rom Z80 asociada al módulo).
VIII -
Sistema CpcAlive
- 1 - Disquete sistema CpcAlive:
Este
sistema (Sistema FreeDos) reconoce los lectores CD y DVD así como los discos duros formateados
según el sistema FAT. El
programa para crear un disquete sistema CpcAlive está
disponible en cobro a distancia sobre el lugar: www.cpcalive.com
- 2 - CD sistema CpcAlive: Este
sistema (Sistema FreeDos) reconoce los lectores CD y DVD así como los discos duros formateados
según el sistema FAT. Una
imagen disco al formato ISO está disponible en cobro a
distancia sobre el lugar: www.cpcalive.com
- 3 -USB flash memória sistema CpcAlive
Este
sistema (Sistema FreeDos) reconoce los lectores CD y DVD así como los discos duros formateados
según el sistema FAT. Los
ficheros para crear una USB flash memória sistema CpcAlive están disponibles en cobro a distancia sobre el lugar: www.cpcalive.com
IX -
PROGRAMAS UTILITARIOS
- 1 - CreaDisc: crea
un disquete virtual virginal al formato dató
Pedido a partir de la línea de pedido DOS: ! CreaDisc
- 2 - AniCrea.exe: AniCrea
es un programa que agrega comandos de la grabación de la
pantalla al emulador y crea animaciones gráficos al formato fli. El
programa AniCrea empieza automáticamente el emulador.
Pedido a partir de la línea de pedido DOS: AniCrea fichero_de_entrada [nombre de la imagen]
fichero_de_entrada=Basic generador
(.BAS)
nombre de la imagen=fichero resultado
(.FLI)
Si
el nombre de la imagen que debe generarse no se define en la línea
pedido del DOS, deberán definirle en el "fichero_de_entrada" con el pedido basic
|ANICREA,"nombre de la imagen"
Pedidos basic:
|ANICREA,"nombre de la imagen"[,@er% ]
-
comience el fichero de animación
El parámetro el @er% de la vuelta del error es
facultativo. Si se pone, la significación de los valores
recuperados en el er% variable es:
0 = ok
1 = parámetros del número del error
3 = manera no encontrada
4 = no más manija disponible
5 = rechazaron el acceso
6 = manija rechazada
(no se olvide de inicializar el er% al principio del programa o antes
de la orden)
El
nombre de la imagen que debe crearse puede también definirse a partir de la
línea de pedido del DOS en segundo parámetro.
|ANISPEED,velocidad de la animación (valores
normales de 0 a 50)
|FRAMEOUT[,@er%
]
- genera una imagen
El parámetro el @er% de la vuelta del error es facultativo.
Si se pone, la significación de los valores recuperados en el
er% variable es:
0 = ok
1 = parámetros del número del error
2 = archivo no abierto
3 = archivo de salida escriben error
|ANICLOSE[,@er%
]
- cierre el fichero de animación
El parámetro el @er% de la vuelta del error es
facultativo. Si se pone, la significación de los valores
recuperados en el er% variable es:
0 = ok
1 = parámetros del número del error
2 = error del archivo de los acces
- El fichero de entrado DEMO.BAS crea la
imagen animada
DEMO.FLI
- La versión registrada del programa AniCrea suprime el
logotipo
sobre las salidas pantalla (BMP y FLI).
Para
la conversión ficheros de animación al formato FLI hacia el formato GIF, ver en
el sitio Internet: www.cpcalive.com
- 3 - Fli2Gif.exe:
leen un archivo de la animación de FLI (para
más información leer la documentación Fli2Gif.doc)
* Las
personas que desean participar pueden fijar su trabajo aquí: cpcalive@aol.com o hacer una subvención aquí (Oficina
Cristiana Francesa de las personas Minusválidas). Gracias.
* Reconocimientos
a los muchos autores de documentaciones por quién se
ha acabado este trabajo.
* ¡Gracias
a Dios!