nota: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
CONTENIDO
I
- Inicializaciones CpcAlive:
Crea un directorio CpcAlive sobre tu disco duro
y descomprime el fichero CpcAliveV1.08c.zip en este
directorio.
= Icono
de lanzamiento del emulador CpcAlive = Icono
de lanzamiento del sistema DOS para Windows
Si lanza a CpcAlive y un mensaje "Ems error" se
indica, vuelve a cerrar la ventana y presiona el icono de lanzamiento con el botón derecho del ratón y
selecciona: "Proprieties", "Memory", "EMS Memory>AUTO". Otra
solución consiste en hacer la misma cosa con el fichero "_ default.pif" del
directorio "WINDOWS" (fichero nombrado "_ default" proveído de un icono MS-DOS).
Windows autorizará así la utilización de la memoria Ems para todos los programas
DOS.
Observaciones:
- Los roms Amstrad tienen un
copyright, no puede pues utilizar normalmente el programa CpcAlive
solamente si posea un ordenador Amstrad CPC 6128 en
estado de funcionar.
- Los colores PAPER y PEN 1
se modificaron a la inicialización por razones de
ergonomía (menos cansando para los ojos).
II - Mandos
a partir de la línea de mando DOS:
CpcAlive [fichero_de_entrada[:X
]] [mando CpcAlive] [mando Cpc]
[>fichero_de_salida]
o ! [fichero_de_entrada[:X
]] [mando CpcAlive] [mando Cpc]
[>fichero_de_salida]
fichero_de_entrada = disquete virtual al formato.
DSK
(véase capítulo -1a-)
o fichero Rom
CPC
(véase capítulo -1b-)
o fichero al formato INTEL
hex (véase capítulo
-1c-)
o fichero de
mando
(véase capítulo -1d-)
o documento
texto
(véase capítulo -1e-)
X = ver capítulos 1a, 1b y
1c
notas:
- Los mandos de cargamento de ficheros
están tan disponibles
a partir de el interpretador BASIC de
la CPC con la instrucción:
|INPUT,
"fichero_de_entrada[: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 mando.
p.ej.: 10 er%=0
20
|INPUT,
"disque.dsk",@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.
- 1a - 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)
p.ej.: ! disque.dsk:A
Este mando lanza el emulador encargando el disquete virtual
"disque.dsk" en el lector A.
nota: no hay espacio
entre el nombre de fichero y el marcador.
- 1b - Cargamento ROMs
CPC -
Hacer seguir el nombre de fichero del marcador:R. CpcAlive buscará el primer
sitio disponible.
CpcAlive acepta 256 roms superiores. Todas
estos roms pueden recibir instrucciones RSX.
Encargar un rom en el emulador: 3 soluciones
- Cargamento a partir de la línea de pedido DOS:
! ZROM.ROM:R
- Cargamento a partir de un fichero de pedidos CpcAlive:
ZROM.ROM:R
- Cargamento a partir del interpretador BASIC de la CPC:
|INPUT, "ZROM.ROM:R":call 0
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: ! ZRom.rom:10
notas:
- Los números de roms ya utilizados por la CPC son 0 para la rom BASIC y 7 para la rom disco
- El
cargamento de los roms con el mando |INPUT a partir de no tendrá al
interpretador BASIC en cuenta por el sistema CPC solamente
aprés un réinitialisation de la CPC por ejemplo con uno CALL 0 o
apoyando en las teclas [Ctrl][Alt][Home]-
- - 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.
- 1c - Cargamento ficheros al
formato INTEL hex -
Cargamento
en rom: Hacer seguir el nombre de fichero del marcador:X dónde X
representa el número de rom destinatario.
p.ej.: ! hex.obj:10 para encargar en la rom número 10
notas: - mismas
observaciones que para los ficheros ROMs
- si la rom no
existe, CpcAlive lo crea. En este caso, es entonces posible utilizar al
marcador:R (véase cargamento roms)
Cargamento 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
Cuadro por el que se muestra la localización de los bloques Ram en foncion del tipo de configuración:
nota: - Por defecto,
el cargamento se hace en Ram con la configuración 0C0h
- 1d - Cargamento de ficheros
de mandos
Los mandos internos del emulador válidos a partir de la
línea de mando del sistema DOS o de un fichero de mandos CpcAlive son:
CpuFast
; velocidad máximo
CpuSlow
; velocidad normal (velocidad del ordenador CPC)
Sleep
; puesta en víspera del
emulador [AltGr][S]
Exit
; dejar el
emulador
[Ctrl][Alt][End]
ROM=X
; seleccionar ROM X (256 para el Bios)
RAM=X
; seleccionar tipo RAM X
:LLAAAA00DDDD ; línea al formato INTEL hex
; para info:
LL=taille bloque, AAAA=adresse inicial, 00 siempre 00, DDDD=datas
ejemplo a partir de la
línea de mando del DOS: Seleccionar la rom BASIC y colocar 255 en 0C380h (WIDTH
255), luego seleccionar el velocidad lenta.
! ROM=0 :01C38000FF CpuSlow
(no olvidar el espacio entre los mandos)
nota:
- se lanza la
línea de mando se interpreta luego del systéme.
- los mandos deben seres
separadas por un espacio.
- el crc normalmente
presente en la norma INTEL Hex no es obligatorio
aquí.
- 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 (excepto direcciones 0BE00h
à
0BFFFh). Para colocar en Ram a partir de la
línea de mando del DOS, es
necesario que el sistema se haya lanzado luego puesta en víspera
antes.
- CpcAlive fuerza
déja el "WIDTH 255" a la inicialización en el fichero
ROM. INI
ficheros
de mandos
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:" sin las comillas
(encabezamiento).
Un buen ejemplo es el fichero ROM INI que es un fichero de mando que
se destina a la inicialización del emulador. Es a partir de
éste que están cargados por ejemplo los
roms de la CPC se interpreta Cada línea de la misma manera que
para los mandos "CpcAlive" a partir de la
línea de mando DOS. Note la presencia del separador ';' para los comentarios.
Se
añaden dos pedidos internos:
EndCde : indica el final de un fichero
de mando. (facultativo)
(restablece la configuración memoria efectiva al lanzamiento del
fichero de mando)
KeyBoard : Para pasar del método "mandos
CpcAlive" al
método teclado.
Es decir, que a
ir de este mando, no se interpretará el fichero
ya
como un fichero de mando pero como un fichero al formato
texto.
(véase capítulo -
1e -)(no utilizar este mando en el fichero ROM INI)
Utilizar el mando "|COMMAND"
para pasar del método teclado
al
método "mandos
CpcAlive".
ejemplo1:
CDE:
; entête
ROM=256 ; seleccionar
rom bios
:010B130002 ; 0B13h=2 (modo pantalla
de comienzo)
CpuSlow ; selección
velocidad
EndCde ;
explotación el fichero de mando
ejemplo2:
CDE:
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
"mandos 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"
El fichero de pedidos CPC INI situado en el directorio principal es un fichero
usuario que puede recibir pedidos de configuración.
- 1e - 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 de mani
simple. Se lee cada
carácter del documento, luego enviado al
gestor teclado del sistema CPC. Puede pues
transmitir por esta función un fichero BASIC al
formato texto o incluso encargar
un programa volviendo déja en el emulador a partir de
un fichero
texto.
ejemplo a partir de la
línea de mando del Dos:
! ejemplo.bas
Este mando encarga el programa nombrado exemple.bas si existe, a
través el gestor teclado de la 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 de la 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 mando |STOP firme el fichero.
Los mandos CPC deben siempre colocarse en último en la
línea de mando.
p.ej.: ! PRINT"ok"
Lanza el emulador y hace el mando PRINT"ok" a la CPC, a través
del gestor teclado de la CPC.
Caso particular:
El carácter '|' es un mando 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 mando |DISC a la CPC.
Observación:
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 mando del BASIC de la CPC.
Existe otros caracteres reservados por DOS como el '<' o '>'
que no pouront pues seres utilizados como mando CPC a partir de la
línea de mando DOS. Para más información, leer la
documentación del sistema DOS.
- 3 - [ > fichero_de_salida]
~~~~~~~~~~~~~~~~~~~~~~
Por defecto la salida impresora de la CPC se hace en el fichero
CPC.PRN situado en el directorio CPCALIVE.
Este mando redi esta salida hacia el fichero_de_salida.
El mando equivalente a partir del interpretador CPC es el siguiente:
|OUTPUT, "fichero_de_salida"[,@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
mando)
ejemplo a partir de la
línea de mando del Dos:
! 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
notas:
- Un
único carácter '>' antes de 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 de fichier_de_so indican al DOS que debe conservar el
fichero y poner los nuevos datos a seguir. (No existe por el momento de
mando equivalente
a partir del interpretador BASIC de la CPC)
- El
fichero Cpc.prn se vacia a cada lanzamiento del emulador.
ejemplo a partir de la
línea de mando del Dos:
! 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
Un pequeño programa que redi la salida CATalogue hacia el
fichero de salida:
III -
Mandos a partir del interpretador BASIC de la CPC:
|CpuFast
= velocidad máximo
|CpuSlow
= velocidad normal (velocidad del ordenador CPC)
|Sleep
= puesta en víspera del emulador [AltGr][S]
|Exit
= dejar el
emulador
[Ctrl][ALT][End]
|COMMAND
= para pasar del método "teclado" al
método "mandos CpcAlive".
(ver capítulo II apartado - 1d -)
|INPUT, "nombre_de_fichero[:X]"[,@er%]
= ver capítulo II apartado - 1 -
|STOP
= ver capítulo II apartado - 1e -
|GO, "chaine"[,@er% ] = ver capítulo IV "
|OUTPUT, "fichero_de_salida"[,@er%]
= ver capítulo II apartado - 4 -
|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.
(Mando equivalente al mando
PRINT#8,"cadena";)
|LPRINT, "cadena" = saca una cadena de
caracteres hacia fichero_de_salida seguimiento
de una vuelta a la línea.
(Mando equivalente al mando PRINT#8,"cadena")
|INK,PEN,R,V,B
= cambio color PEN. Las cartas R,
V, B 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 a
comienzo.
|OBMP, "nombre_de_fichero"[,@er%]
= fabrica un fichero imagen de la pantalla CPC al formato BMP
- ver mando |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.
|DEBUGOFF = pare el debugger
|DUMP,adress = inicializa el dump memoria del debugger
CALL 0 = inicializa sistema CPC [Ctrl][Alt][Home]
IV -
Marcador:D
El marcador :D ('D'atas) tras el nombre de
fichero indica al emulador que debe transmitir el
valor de cada octeto del fichero a través
del teclado de la CPC al formato decimal. Esta función a verano
desarrollada para permitir tratar
fácilmente los datos de un fichero a
partir del interpretador BASIC de la 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 mando |GO, "cadena"[,@er% ] desplaza al indicador de fichero.
En este caso, "cadena" 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
mando)
p.ej.: |GO, "&100" desplaza al indicador de fichero a
la posición &100.
El valor máximo es &FFFFFFFF
Este valor quizá también escrito en
decimal.
V - CARáCTERS ACENTUADOS
Inicialización a partir del DOS para obtener un teclado
acentuado:
! Accent.ini
Atención:
El fichero Accent.ini se termina por el mando |sleep, será
necesario
pues reactivar el emulador a partir del DOS tras esta mando.
El fichero Accent.ini es un documento texto compuesto de mandos 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:
|OutAscDos
Para operar una conversión texto al formato Windows hacia el fichero_de_salida:
|OutAscWin
Para cancelar esta conversión: |OutAscOff (Mando por defecto)
(Útil si se utiliza del fichero_de_salida para otra cosa que del
texto).
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.bas" (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 mando DOS:
! Accent.ini
!>CreaDisc.win
Luego a partir del interpretador BASIC de la CPC:
MODE 2
|OutAscWin
10 |INPUT, "CreaDisc.bas"
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.
Cuadro de correspondencias: registros Z80
registros
X86
F
> F
A
> AL
BC
> CX
DE
> DX
HL
> BX
IX
> SI
IY
> DI
CpcAlive añade un registro al Z80 nombrado AH que corresponde
al
registro AH de los procesadores X86, y tres nuevos opcodes.
opcode:
mnemotecnia: función:
040h, 052h LD AH, A
carga el valor del
registro A en el pseudo registro AH
040h, 05Bh LD A, AH
encarga el valor del pseudo registro
AH en el registro A
040h, 049h, 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 049h \ 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 pseudo registro AH
ld
a,3
; color pedido
INT(010h)
; LLAMADA INTERRUPCIÓN BIOS 010H
ret
La correspondencia de los registros Z80-X86 se respeta a la vuelta de
la interrupción exepto para los registros IX e IY que no se
modifican nunca. Si los segmentos ES y DS son
necesario en entrada, refieren al ram (o rom) de la CPC. Las
raras funciones Bios o DOS que devuelven valores de salida en los
registros de segmento o en los registros DI y SI no son
utilizable, así como 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 //
nota:
Los registros de paleta corresponden a los 16 pinceles (PEN) de la CPC y los
registros DAC corresponden a 32 tintas (INK) de la 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).
Es necesario
saber también que el ram CPC se sitúa en el segmento EMS.
El fichero Z80IOPix.bas situado en el directorio "EX" es
un ejemplo de mandos RSX que utilizan las interrupciones
del
Bios. Este fichero es un fichero de pedido CpcAlive. Se incluyen las
explicaciones así como un listado. mando a partir de la
línea de mando del Dos: !
EX\Z80IOPix.bas mando a partir del
interpretador
BASIC: |input,
"EX\Z80IOPix.bas"
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 de 64K.
Un módulo es un programa al formato. EXE o .COM con una tabla situada a la
dirección 0200h en el código del programa. Esta tabla
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
sistema
dw
0
; 020Ch reservado
sistema
dw
0
; 020Eh reservado
sistema
dw offset MnemoTb ; 0210h tabla mnemónicos
db
-1
; 0212h (*) recibe
el número de módulo X86
db
-1
; 0213h reservado
sistema
db
-1
; 0214h (*) recibe
el número de la rom Z80 asociada
db
-1
; 0215h reservado
sistema
dw
0
; 0216h (*) recibe
el primer
lugar CPC accesible (0=ningún lugar accesible)
db
0
; 0218h reservado
sistema
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
sistema
(*) = valor
generado por el sistema
; tabla mnemónicos
MnemoTb db "MNEMO","1" or 080h ; |MNEMO1
db "MNEMO","2" or
080h ;
|MNEMO2
db 0
; tabla vectores de entrada
X86Vec dw offset programa1
; 00 1.o programa
dw offset programa2
; 01 2.o programa
;... 128 vectores máximos
; 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 integrando la tabla de mnemotecnias (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.
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 mando a partir de la
línea de mando del Dos: !
EX\X86IOPix.com
Encargar un modul en el emulador: 3 soluciones
- Cargamento a partir de la línea de mando DOS:
! MODULO.COM
- Cargamento a partir de un fichero de mandos CpcAlive:
MODULO.COM
- Cargamento a partir del interpretador BASIC de la CPC:
|INPUT, "MODULO.COM":call 0
Llamar
una rutina X86 a través de opcodes Z80:
La
llamada de una rutina X86 a partir del ram (o rom) de la 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
nota:
-
El número de módulo se indica a la dirección 0212h de la tabla 'X86CPC' (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
Los registros de segmento CS,DS y ES dirigen la memoria de la
CPC.
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.
Se
transfiere el pseudo registro Z80 AH descrito en el capítulo anterior
también
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 'X86CPC'
La memoria del CPC se restaura después de cada llamada.
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 -
PROGRAMAS UTILITARIOS
- 1 - CreaDisc.bas: crea
un disquete virtual virginal al formato dató Orden que empieza con la línea de
comando del DOS:
! CreaDisc.bas >disquette.dsk
- 2 - AniCrea.exe: cree un
archivo de la animación de FLI
Sintaxis básico:
|ANICREA,"fichero_de_salida"[,@er% ]
-
comience el archivo de salida
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)
|ANISPEED, velocidad de la animación
|FRAMEOUT[,@er%
]
- crea 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%
]
- archivo de salida cercano
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 mando DOS "AniCrea demo.bas" crea el fichero animación
DEMO.FLI
- 3 - Fli2Gif.exe:
leen un archivo de la animación de FLI (para
más información leer la documentación Fli2Gif.doc)
Llamada
almas de desarrolladores
Me haré una alegría de difundir sus programas utilitarios
o pequeñas demostraciones
en las versiones siguientes de CpcAlive. Pueden fijarlos
aquí: cpcalive@aol.com Se les
informará de las nuevas versiones de CpcAlive. Gracias por
adelantado
CpcAlive
es un programa share.
Las personas que desean participar pueden hacer una
subvención libre aquí: Office Chrétien des personnes Handicapées
(Oficina Cristiana de las personas Minusválidas)
(Asociación sin vínculo con el autor del programa CpcAlive)
La versión registrada suprime
el logotipo sobre las salidas pantalla (BMP y FLI)
Para recibirlo, basta con devolver una imagen obtenida por escáner del recibo fiscal aquí: cpcalive@aol.com
gracias