www.cpcalive.com
Cliquer ici pour la documentation française
Click here for english documentation





                                                                                                                                                                                                                       
* CpcAlive V1.08b *  DOCUMENTATION*
                                                                                                                                                                                                                        nota: Esta documentación so'lo se refiere a la información necesaria para la utilización del emulador CpcAlive. Una demostración, de las 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
II - Mandos a partir de la línea de mando DOS
CpcAlive [fichero_de_entrada[:X ]] [mando CpcAlive] [mando Cpc] [>fichero_de_salida]
    - 1 - [ fichero_de_entrada[:X ]]
     
    - 1a - Cargamento disquetes virtuales al formato. DSK -
        - 1b - Cargamento  ROMs CPC -
        - 1c - Cargamento ficheros al formato INTEL hex  -
        - 1d - Cargamento de ficheros de mandos
        - 1e - Cargamento de ficheros al formato texto
    - 2 - [mando CPC]
    - 3 - [ > fichero_de_salida]
III - Mandos a partir del interpretador BASIC de la CPC
IV - Marcador:D
V - CARáCTERS ACENTUADOS
VI - ACCESO a las INTERRUPCIONES del BIOS y del DOS con el PROCESADOR Z80
VII - LUGAR DE PROGRAMACIÓN X86
VIII - PROGRAMAS UTILITARIOS
    - 1 - CreaDisc.bas: crea un disquete virtual virginal al formato dató
    - 2 - AniCrea.exe: crea un archivo de la animación de FLI
    - 3 - Fli2Gif.exe: leen un archivo de la animación de FLI
IX - EVOLUCIÓN CPCALIVE


                                                                                                                                                                                                                      

I - Inicializaciones CpcAlive:
Crea un directorio CpcAlive sobre tu disco duro y descomprime el fichero CpcAliveV1.08b.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]


- 1 - [ fichero_de_entrada[:X ]]
~~~~~~~~~~~~~~~~~~~~~~~

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. Este 256 roms son muy reconocidas por el sistema CPC

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, "Z
ROM.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:

                tipo      posiciones bloques
                0C0h          0,1,2,3
                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

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.

nota:
La apertura de un fichero texto cierra definitivamente el fichero texto anteriormente abierto si allí tuviera uno.



- 2 - [mando CPC] = mando CPC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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:

10 POKE &BB5C, PEEK(&BD2D):POKE &BB5B, PEEK (&BD2C)
20 CAT
30 CALL &BD37:|DISC
RUN


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.
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 0100h-018h dup (0)   ; 0218h reservado 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.


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 del DOS: AniCrea fichero_de_entrado [fichero_de_salida]
fichero_de_entrado=Basic generador (.BAS)
fichero_de_salida=fichero resultado (.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



 IX- EVOLUCIÓN CPCALIVE

V1.08b          13/04/2006   importante corrección 
V1.08            08/04/2006 
 - integración total de la puesta en práctica de las instrucciones RSX
                                          en el 
lugar de programación X86
                                        - mejora gestión teclado
                                        - importandes correcciones
V1.07MMM   08/12/2005  - Más funciones Bios y Dos aceptadas.
V1.07MM      19/11/2005  - correcciones
V1.07M         16/11/2005  - corrección lugar de programación X86
V1.07L          10/11/2005  - integración lugar de programación X86
V1.07k          27/09/2005  - mejora interpretador de pedidos
V1.07j           28/07/2005  - acceso interrupciones Bios y DOS mediante instrucciones Z80
V1.07i                07/2005   - adición modula de creación de ficheros de animaciones FLI
V1.07h               05/2005   - adición paleta de 262144 colores
                                        -
adición |INK,PEN,R,G,B y |INKRESTORE mandos
V1.07g              04/2005    - adición de los ficheros .PIF de inicialización
                                          de la sistema MS-DOS para Win9X.
V1.07               04/2005    - adición de los ficheros .PIF de inicialización
                                          de la sistema MS-DOS para Windows XP.
V1.06               03/2005
   - corrección gestión pantalla.
V1.05               02/2005    - distintas correcciones.
V1.04               02/2005    - corrección error cargamento ficheros dsk (formato ancho)
V1.03               01/2005    - corrección error a V1.02 (cargamento disquetes virtuales imposibles
                                          con los marcadores:A o :B)
V1.02               01/2005    - acepta notación con prefijo "&" para valores hexadecimales."
                                        - acepta notación con prefijo "&X" para valores binarios.
                                        - corrección errores:
                                          * valores décimales>9999 aceptados.
                                          * el mando "EndCde" restablece la configuración memoria efectiva
                                             al lanzamiento de un fichero de mando.
V1.01               01/2005    - correcciones CpcAlive.doc capítulo 3 y 4.
                                        - corrección algunos errores.
V1.0                12/2004     - primera difusión

END