note:
This documentation relates about information necessary to use the
CpcAlive emulator. A demonstration, documentations about Cpc
exploitation and Bios/Dos interruptions, a Z80 assembler and a X86 assembler are
available on the internet site: www.cpcalive.com
I
-
CpcAlive Initializations:
Create a CpcAlive directory on your hard
disk and decompress the
file CpcAliveV1.08b.zip in this directory.
= Icon to launch CpcAlive = Icon to launch the "Windows Dos" system.
For launch CpcAlive from the desktop, create a short cut with the icon named CpcAlive.
If you launch CpcAlive and you
obtain
an "Ems error" message: EMS memory is emulated with "Windows Dos" but it is not
set by defect with some windows versions. ("Windows Dos" is the Dos name wich is provide
with windows XP)
To correct the problem, close the window, click on the icon with
right mouse bouton
and select
"Proprieties", "Memory", "EMS Memory>AUTO". Another solution is to do the same thing with the file "_default.pif" in the "WINDOWS" directory (it
is the file named "_default" with the MS-DOS icon).
Notes: - Amstrad roms ares copyrighted, you cannot
thus normally use CpcAlive only if you have an Amstrad Cpc
6128 computer in a position to function.
- colors PAPER and PEN 1 were modified with
initialization for ergonomic reason (less
tiring for eyes).
input_file = virtual diskette with format DSK
(see chapter - 1a -)
or
Cpc rom file
(see chapter - 1b -)
or
intel hex file
(see chapter - 1c -)
or
command file
(see chapter - 1d -)
or
text document
(see chapter - 1e -)
X
= see chapters 1a, 1b and 1c
Syntax from the
Cpc
Basic Interpreter:
All input files commands are also
available from the Cpc basic interpreter with instruction: |INPUT,"input_file[:X]"[,@er%]
The error return parameter @er% is facultatif.
If
it is put, the significance of the values recovered in the variable er%
are:
0 = ok
1 = error number parameters
2 = way not found
(don't forget initialize er% at the program beginning or
before the command)
ex:
10
er%=0
20 |INPUT,"Disc.dsk",@er%
30 if er%<>0 then
PRINT"ERROR":STOP
It is possible to put several file names at the continuation. They must
be separated by a space character. In this case, the error
code er% will relate to
the last file mentioned.
- 1a - Loading virtual
diskettes files (.DSK) -
Make follow the file
name of the ":A" or ":B" markers to choose the
Cpc drive destination.(drive A by defect)
example
starting from the Dos command line:
! disc.dsk:A
This command launch the emulator and load the virtual diskette
"disc.dsk" in drive A. note:
no space betwen the file name and the marker.
- 1b - Loading Cpc roms
files -
Make follow the file name by the ":R" marker. CpcAlive
will seek the first area available.
CpcAlive accept 256 roms. All these roms ares recognized by
the Cpc system. To load a rom
in the emulator: 3 solutions
- Loading starting from the Dos command line:
! ROM.ROM:R
- Loading starting from a CpcAlive command file:
ROM.ROM:R
- Loading starting from the Cpc BASIC interpreter:
|INPUT, "ROM.ROM:R"
If it is necessary to have a fixed
area number, you can replace the letter letter "R" with an area number (0<area number <256). example
starting from the Dos command line: ! z80rom.rom:10
notes:
- All markers must be write with capital letters.
- The areas numbers used by the Cpc system are 0 for BASIC rom and 7 for DISC rom
- The X86 modules (see
chapter "X86 Environment") with mnemonics use also Z80 roms sites. Z80 roms
with a site specific number must be loaded before the X86 modules. The best way is to indicate them at the
beginning of the command file ROM.INI located in the principal repertory.
- Roms loading with |INPUT command will be
reconize by the
Cpc system only after a Cpc reboot, for example by a
CALL 0 or by pressing on [Ctrl][Alt][Home] keys
in
the same time.
- 1c - Loading intel hex
files -
Loading
in rom:
Make follow the file name by the ":X" marker where X represent the
rom recipient number.
example
starting from the Dos command line:
!
hex.obj:10 for loading in rom number 10
note:
If the destination rom
does not exist, CpcAlive create it. In this case it is possible to use
the :R marker (see chapter "Loading Cpc roms files")
Loading
in ram: Make follow the file name by the ":X" marker where X
represents the
ram recipient configuration type. Valids hexadecimal
values
for loading in RAM are:
0C0h, 0C1h, 0C2h, 0C3h, 0C4h, 0C5h, 0C6h and 0C7h
Table showing ram blocks positioning in foncion
of the configuration type:
note:
- By defect, the loading is done in RAM with 0C0h configuration.
example
starting from the Cpc BASIC interpreter
|input,"hex.obj"
In this case, the file hex.obj is loaded in the standard Cpc configuration memory.
- 1d - Loading command files
The intern
emulator valid orders starting from the Dos
system command line or a CpcAlive command file are:
CpuFast
; maximum speed
CpuSlow
; normal speed (speed of the Cpc
computer)
Sleep
; emulator
sleeping
state [AltGr][S]
Exit
;
to leave emulator [Ctrl][Alt][End]
ROM=X
; select ROM X (256 for the Bios)
RAM=X
; select RAM X type
; see chapter II
paragraph - 1c - "Loading
in ram"
; for ram configuration values.
:LLAAAA00DDDD ; intel hex line
; for information: LL=block size
;
AAAA=Starting adress
;
00 always 00
;
DDDD=datas
example
starting from the Dos command line:
Select the BIOS rom and poke the value 2 in 0B13h adress
(start screen mode) and select slow speed emulation:
! ROM=256 :010B130002 CpuSlow
(Don't forget spaces between commands.)
If a CpcAlive command is not reconized, this command and the
rest of the line is interpreted like a Cpc command. You can by this way
adding one or more Cpc commands at the end of the line. (Only from the
Dos interpreter. From CpcAlive commands files, use the "keyboard"
command).
example:
! ROM=256 :010B130002 CpuSlow
PRINT"OK"
notes:
- orders owe beings separated by a space.
- the crc normally present in intel hex standard is not obligatory here.
- put values in RAM blocks 0,1,2 ou 3 before the Cpc
system initialization is useless because this
blocks are cleared with starting (except
0BE00h to 0BFFFh addresses). To put values in
RAM
from the Dos
command line, the system could be launched and put in
sleeping mode previously.
command files
These files are intended, as their name indicates it, to command the
emulator from a file. This file must start with
"CDE:" sequence without guillemets (header). A good example
is the ROM.INI file which is a command file intended for the
emulator initialization. It is from this one that for example the Cpc
roms are loaded. Each line is interpreted like "CpcAlive"
commands
starting from the Dos command line. Note the separator ';'
for comments.
Two internal orders more ares available in this files:
EndCde: indicate the end of a
command file. (facultatif)
Keyboard: going from the COMMAND mode to
the
KEYBOARD mode.
After this order, the file
will not be interpreted any more like a command file
but like a text file (see
chapter - 1e -)
Use the keyword "|Command"
to go back in
COMMAND mode.
(!do not use the command
"KeyBoard" in the ROM.INI file.)
exemple
1:
Select
the BIOS rom and poke the value 2 in 0B13h adress
(start screen mode) and select slow speed:
CDE:
; header
ROM=256 ;
select rom bios
:010B130002 ; poke the value 2 in
0B13h adress
(start screen mode)
CpuSlow ; speed
selection
EndCde ; close
the
command file
exemple 2:
CDE:
; header
ROM=256 ;
select rom bios
:010B130002 ; poke the value 2 in
0B13h adress
(start screen mode)
CpuSlow ; speed
selection
Keyboard ; swap
in keyboard
mode
; (starting
from here
each character is
transmitted
; directly
to the Cpc keyboard manager)
PRINT"OK"
exemple 3:
PRINT"OK1"
|COMMAND ; going from the KEYBOARD mode
to the
COMMAND mode.
ROM=256 ;
select rom bios
:010B130002 ; poke the value 2 in
0B13h adress
(start screen mode)
CpuSlow ; speed
selection
Keyboard ; swap
in keyboard
mode
; (starting
from here
each character is
transmitted
; directly
to the Cpc keyboard manager)
PRINT"OK2 "
The
command file CPC.INI located in the principal repertory is a file user which can receive configuration commands.
- 1e - Loading text files
(KeyBoard simulation)
If the file type is not recognized by CpcAlive
as being one of files detailed higher, CpcAlive considers that it is a
text file. CpcAlive treats these files simply. Each character
of the document is
read and sent to the Cpc keyboard manager. You can thus transmit by
this function a BASIC file with text format or pilot a software running
into the emulator.
example
starting from the Dos command line:
!
exemple.bas
This order load the text named "exemple.bas"
through the Cpc keyboard manager. This file must be in text format. In
this example it must be in the
CpcAlive directory or a path directory. If the
file does not exist, the
chain "exemple.bas" will be transmitted to the Cpc keyboard manager and
will probably emerge on a "Syntax error" message.
example
starting from the Cpc BASIC interpreter:
mode 2
10 |Input,"FILE_ID.DIZ"
20 line input a$:if a$="" then |STOP:end else goto 20
run
This example load the document "FILE_ID.DIZ" until it meet one blank
line. The order |STOP close the file.
note:
A text file opening close definitively
the text file previously open if there were one.
The Cpc orders must always be placed at the last of the command line.
ex:
! PRINT"ok"
Launch the emulator and places the order PRINT"ok" through the Cpc
keaboard manager.
Particular
case:
The '|' character is a Dos command. CpcAlive
uses
thus a substitution character which is the '§' than you can
obtained with the [ALT][245] keyboard sequence from the Dos command
line. (If you obtain another character
than '§' on your screen it is not important. The most
important is the [ALT][245] keyboard sequence to obtain the
ascii character number 245 in the Dos
command line)
ex:
! §DISC
Launch the emulator and place the order |DISC in Cpc keyboard manager.
Note:
There are other reserved characters
by Dos
like ' < ' or ' > ' which can't be used for Cpc
commands from the Dos command line. For more information read
the Dos system documentation.
- 3 -
[>output_file]
~~~~~~~~~~~~~~~~~~~~~
By defect the Cpc printing output is done in file CPC.PRN located
in CpcAlive directory.
This order redirects this exit towards the output_file. The equivalent
order starting from the Cpc interpreter is as follows:
|OUTPUT, "output_file"[,@er% ]
The error return parameter @er% is facultatif. If it is put, the
significance of the values recovered in the variable er% are:
0 = ok
1 = error number parameters
3 = way not found
4 = no more handle available
5 = refused access
(don't forget to initialize er% at the beginning of the program or
before the order)
example
starting from the Dos command line:
! PRINT#8, "OK"
register word "OK" in the file Cpc.prn
! PRINT#8, "OK">test.prn register word" OK "in the
file test.prn
notes:
- Only one character ' > ' before output_file indicates to the Dos
system that if the output_file name already
exists, this file
will be recreate virgin before receiving datas. (the old one
output_file with the same name being delete without notice...
warning).
Two characters ' > > ' before output_file indicates to the Dos
system that it must preserve the file and put new datas to be
followed. (There does not exist at time equivalent order
starting from the Cpc BASIC interpreter)
- The
Cpc.prn file is emptied with each launching of the emulator.
example
starting from the Dos command line:
! PRINT#8, "OK1":§Exit>test.prn
register word "OK1"in the file test.prn
! PRINT#8, "OK2":§Exit>>test.prn
register word "OK2"follow in the file
test.prn
The result in the file test.prn gives:
OK1
OK2
A small
program which redirect the CATalogue output towards the output file:
10 POKE &BB5C,PEEK(&BD2D):POKE &BB5B,PEEK(&BD2C)
20 CAT
30 CALL &BD37:|DISC
RUN
III
-
Commands from the Cpc basic interpreter:
|CpuFast
= maximum speed
|CpuSlow
= normal speed (speed of the Cpc computer)
|Sleep
= emulator in
sleeping mode [AltGr][S]
|Exit
=
to leave emulator [Ctrl][Alt][End]
|Command
= going from the KEYBOARD mode to the
COMMAND mode.
(see chapter II
paragraph - 1d - )
|INPUT, "file_name[:X]"[,@er% ]
= see chapter II
paragraph - 1 -
|STOP
= see chapter II
paragraph - 1e -
|GO, "chain"[,@er% ] = see chapter IV
|OUTPUT, "output_file"[,@er% ]
= see chapter II paragraph - 4
-
|OUTASCDOS = see chapter
V
|OUTASCWIN = see chapter
V
|OUTASCOFF = see
chapter V
|PRINT, "chains" = output character
string towards output_file.
(Order equivalent to
the order PRINT#8,"chains";)
|LPRINT, "chains" = output character string
towards output_file followed by a carriadge
return.
(Order equivalent to
the order PRINT#8,"chains")
|INK,PEN,R,G,B
= change
PEN color. Letters R,G,B représents Red,Green and Blue values (0
to 255)
ex: |INK,0,0,255,0 (change PAPER color)
ex: |INK,1,255,0,0 (change PEN
1 color)
|INKRESTORE = restore
originals Cpc inks.
|INKCPC
= standard cpc inks
|INKSOFT
= CpcAlive inks (inks by defect)
The pallet is the same as the standard pallet
Cpc but with less
luminosity, and values
Paper and PEN 1 are modified with starting.
|OBMP, "nom_de_fichier"[,@er% ]
= create a file image of
the Cpc screen (BMP format).
- see |OUTPUT
command for error codes significance.
CALL 0 =
réinit
System Cpc [Ctrl][Alt][Home]
IV-
':D' Marker (like 'D'atas)
The ":D" marker (like 'D'atas) following
the file name
indicates to the emulator that it
must transmit the value in decimal format of each
byte of the file through the
Cpc keyboard manager.This function as been
developed to easily treat datas from a file with the Cpc
BASIC interpreter.
Here, a
small program whose function is
reading some bytes of ROM.INI file and print them in
hexadecimal format:
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 i
60 |STOP
run
The order |GO, "chain"[,@er% ] move the file pointer.
In this case,
"chain" represent the displacement value compared
to the file beginning. The error return parameter @er% is facultatif.
If it is
put, the values significance
recovered in the variable er% are:
0 = ok
1 = error
(don't forget to initialize er% at the program beginning or before the
command)
example
starting from the Cpc BASIC interpreter:
|GO,"&100"
Moves the file pointer to the position &100. The maximum value is
&FFFFFFFF and can be write in
decimal.
V -
ACCENTUED
CHARACTERS
See french or spanish documentation
VI
- BIOS AND DOS INTERRUPTIONS ACCESS TROUGH Z80
Bios and Dos interruptions are accessible with CpcAlive specifics
opcodes through the emulated Z80 microprocessor and a correspondence
between the Z80 and X86 registers.
Correspondences table: Z80 registers
X86
registers
F
> Flags
A
> AL
BC
> CX
DE
> DX
HL
> BX
IX
> SI
IY
> DI
CpcAlive adds a Z80 register named AH corresponding to the X86 register
AH, and three new opcodes.
opcode:
mnemonics: function:
040h,
052h LD AH, A
load the value of register
A in pseudo register AH
040h, 05Bh LD A, AH
load the value of pseudo register
AH in register A
040h, 049h, xx INT(xx)
call
interruption number xx
example of macros
(here for the assembler 8 bits 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
example:
; ** OUTPUT PIXEL
THROUGH INT 010H **
OutPix: ld de, 12
;
coordinate Y
ld bc, 24
; coordinate X
ld a,
0Ch
; FUNCTION 0CH = WRITE A GRAPHIC POINT
LD_AH_A
; load the value of register A in
; pseudo register AH
ld
a,3
; color requested
INT(010h)
; CALL INTERRUPTION BIOS 010H
ret
notes:
- The Z80-X86 correspondence registers is
respected with the return of the interruption except for the registers
IX and IY which are never modified. If segments
ES and DS are necessary in entry, they refer to the RAM (or
Rom) of the cpc. The rare Bios functions returns values in the segment
registers or registers DI and SI are not usable.
- The standard output peripheral is always the screen.
- The Bios interruption INT 10H accept only the functions:
Function 02h // Set cursor position //
Function 03h // Read cursor position //
Function 09h // Write character with color at cursor //
Function 0Ah // Write character with color at cursor //
Function 0Bh // Set color palette //
Function 0Ch // Write graphics pixel at coordinate //
Function 0Dh // Read graphics pixel at coordinate //
Function 0Eh // Write text in teletype mode //
Function 10h - 00h // set individual palette register //
Function 10h - 02h // set all palette registers and border //
Function 10h - 07h // read palette register //
Function 10h - 09h // read palette registers and border //
Function 10h - 10h // set DAC color register //
Function 10h - 12h // set block of DAC color registers //
Function 10h - 15h // read DAC color register //
Function 10h - 17h // read block of DAC color registers //
Function 10h - 1Bh // sum color values to shades of gray //
Function 13h // Write string //
notes: - the palette
registers correspond to the 16 Cpc pens and DAC registers correspond to the 32 Cpc inks.
- the border always correspond to the Pen 0 with CpcAlive.
It should be also known that the cpc Ram is located in the EMS
memory segment. (in case where some equilibrists would
venture touching ems functions).
The Z80IOPix.bas file located in the "EX" directory is an
orders RSX example using the Bios interruptions.
This
file is a text file éditable with a text
editor. Explanations and listing are included. command starting from the
Dos command line: !
EX\Z80IOPix.bas command starting from the Cpc BASIC
interpreter: |input, "EX\Z80IOPix.bas"
note:
Documentations about Bios and Dos interruptions and the Z80 assembler
"tasm" are available on onternet site: www.cpcalive.com
VII - X86 ENVIRONMENT
It is possible to program the CpcAlive
emulator with X86 instructions.
CpcAlive accept 256 64K modules.
A module is a .EXE or .COM format program with a table located at the
address 0200h in the program code. This table must be made like this:
org 0200h
db '
X86CPC'
; 0200h mark
dw
0
; 0206h version
dw offset X86Vec ; 0208h entry
vectors table
dw
0
; 020Ah reserved system
dw
0
; 020Ch reserved system
dw
0
; 020Eh reserved system
dw offset MnemoTb ; 0210h offset mnemonics
db
-1
; 0212h receipt the X86 module number
db
-1
; 0213h reserved system
db
-1
; 0214h reçeipt the Z80 rom number associated
db
-1
; 0215h reserved system
dw
0
; 0216h reçeipt the first Cpc accessible
adress (0=no adress accessible)
db 0100h-018h dup (0) ; 0218h reserved system
; mnemonics table
MnemoTb db "MNEMO","1" or 080h ; |MNEMO1
db "MNEMO","2" or
080h ;
|MNEMO2
db 0
; entry vectors table
X86Vec dw offset program1
; 00 1st program
dw offset program2
; 01 2nd program
;... 128 vectors maximum
; X86 programs must be declared in "far"
program1 proc far ; ** CALLED BY THE BASIC INSTRUCTION |MNEMO1 **
;... code X86
retf
program1 endp
program2 proc far ; ** CALLED BY THE BASIC INSTRUCTION |MNEMO2 **
;... code X86
retf
program2 endp
Operation: On presence of the MnemoTb vector to the address 0210h,
the emulator generates a Z80 rom integrating the mnemonics table
(MnemoTb) with its X86 call vectors. The first vector of the table
"X86Vec" corresponding to the first mnemonics is the vector of
initialization which is called with each initialization of the Cpc
system. Each mnemonics corresponds to a vector of this table (in the
order). The end of each mnemonics is indicated with the bit 7 on the last
letter of the mnemonics. The table should not exceed 128 mnemonics and
must be finished by a null byte.
Note:
It is also possible also to call the X86 routines from the Cpc memory through
Z80 opcodes (see below). If mnemonics are
not necessary, replace the vector "MnemoTb" by a null
word (address 0210h).
The file X86IOPix.asm located in
directory
"EX" is a complete example. It has generate the module X86IOPix.com
in the same directory but it can also be compilated
with format .EXE command starting from
the
Dos command line: !
EX\X86IOPix.com
To load a
module in the emulator: 3 solutions
- Loading starting from the Dos command line:
! MODULE.COM
- Loading starting from a CpcAlive command file:
MODULE.COM
- Loading starting from the Cpc BASIC interpreter:
|INPUT, "MODULE.COM":call 0
To call a X86 program from the Z80 memory:
The call of a X86 program from the Cpc RAM (or ROM) is done using the
opcode 049h followed module number, then vector number. For example if you want to call "program2" (vector number 1) in the example
above, considering that the system has load the module in the area 010h,
that will give the Z80 opcode: 049h, 010h, 001h
notes:
- The module number is indicated to the address 0212h of the X86 environmental table.
- The vector number must be
between 0 and 127. If the bit 7 is set, a "RET" will be simulated after the
instruction. The instruction operation becomes similar than a "JP"
instruction.
The Z80 registers values are retransmitted with the X86
programs like
this: Z80 registers
X86
registers
F
> Flags
A
> AL
BC
> CX
DE
> DX
HL
> BX
IX
> SI
IY
> DI
The pseudo Z80 register AH is also transfered.
CS,DS and ES registers address the Cpc memory.
FS and GS registers are undefined.
X86 registers values returned by the program will be
retransmitted to the Z80 with the same way.
The Cpc memory access depends about the module size because modules are
activated in the same area.The first Cpc accessible
adress is indicated to the address 0216h in the environmental table X86.
notes:
- The
Cpc addresses lower than 04000h are never accessible from a X86 module.
- The
Bios interruption INT 10H accept only the functions described in the
preceding chapter.
- The standard output peripheral is always the screen.
VIII
-
UTILITY SOFTWARES
- 1 - CreaDisc.bas: create
a virgin
virtual diskette.
(data formatted) Order
starting from the Dos command line:
! CreaDisc.bas>diskette_name.dsk
- 2 - AniCrea.exe: create a
FLI animation file
Dos syntax: AniCrea input_file [output_file]
input_file=Basic file generator (.BAS)
output_file=Animation file result (.FLI)
Basic syntax:
|ANICREA,OUTPUT_NAME$[,@er%] -
start output file
The error return parameter @er% is facultatif. If it is put,
the
significance of the values recovered in the variable er% are:
0 = ok
1 = error number parameters
3 = way not found
4 = no more handle available
5 = refused access
6 = refused handle
(don't forget to initialize er% at the beginning of the program or
before the order)
|ANISPEED,animation play speed between 0 to 65535
|FRAMEOUT[,@er%]
- generate a frame
The error return parameter @er% is facultatif. If it is put,
the
significance of the values recovered in the variable er% are:
0 = ok
1 = error number parameters
2 = file not open
3 = output file write error
|ANICLOSE[,@er%]
- close output file
The error return parameter @er% is facultatif. If it is put,
the
significance of the values recovered in the variable er% are:
0 = ok
1 = error number parameters
2 = acces file error
The command "AniCrea demo.bas" from the Dos command line create the file DEMO.FLI
- 3 - Fli2Gif.exe: read a
FLI animation file (for more information read the Fli2Gif.doc file)
Developer soulscall If
you have the idea to develop some softwares or
little demonstrations for
CpcAlive, I would be enjoy to include them in next version or on the site of CpcAlive . You can
post them here: cpcalive@aol.com .You'ld be informed about CpcAlive new versions. Thank you
CpcAlive
is now shareware.
People who wish to take part can make a free gift
here: Office Chrétien des personnes Handicapées
(Handicaped People Christian Office)
(Association without bond with
the author of the software CpcAlive)
The registered version removes the logo on the outputs
screen files (BMP & FLI)
To receive it, return a scan image of the tax receipt here: cpcalive@aol.com
thank you
IX -
CPCALIVE EVOLUTION
V1.08b 13/04/2005 - important correction
V1.08 08/04/2005 - total
integration of the implementation
of RSX
instructions in the X86 environment
- improvement keyboard
management
- important corrections
V1.07MMM 08/12/2005 - more Bios and Dos fonctions accepted
V1.07MM 19/11/2005 - corrections
V1.07M 16/11/2005 - correction
X86 programmation environment
V1.07L 10/11/2005 - integration
X86 programmation environment
V1.07k 27/09/2005 -
improvement CpcAlive commands interpreter
V1.07j 28/07/2005
- Bios
and Dos interruptions access
trough Z80 instructions
V1.07i
07/2005 - addition
FLI animation file generator modul
V1.07h
05/2005 - pallets 262144
colors
- addition
|INK,PEN,R,G,B and |INKRESTORE orders
V1.07g
04/2005 - addition
.PIF
files for Win9X DosBox configuration.
V1.07
04/2005 -
addition .PIF
files for WinXP DosBox configuration.
V1.01 to V1.06
- corrections
V1.0
12/2004 -
first diffusion