1084 lines
39 KiB
Plaintext
1084 lines
39 KiB
Plaintext
!tex \documentstyle[11pt]{article}
|
|
!stg @subject "Documentation"
|
|
!english
|
|
!title Documentation of the
|
|
!programimage ..\img\firebee.img
|
|
!program FIREBEE - FIRETOS
|
|
!version Version Boot 2.01, Drivers 1.01
|
|
!date (!today)
|
|
!author Didier MEQUIGNON
|
|
!email aniplay@wanadoo.fr
|
|
!use_auto_subtocs [info,html,stg,tvh,win]
|
|
!use_auto_subsubtocs [info,html,stg,tvh,win]
|
|
!no_effects [asc]
|
|
!begin_document
|
|
!maketitle
|
|
!tableofcontents
|
|
|
|
!node Presentation
|
|
|
|
The Firebee use a Coldfire V4e at 266 MHz (MCF5475) and an FPGA for emulate obsolete
|
|
Atari devices and add new features (DSP ?) in the future. Today for new FPGA feature,
|
|
there are just a DVI-I port connected to him (Videl ACP extended modes without
|
|
hardware acceleration).
|
|
|
|
!image ..\img\schema.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
Some new devices are connected to the Coldfire :
|
|
|
|
!begin_itemize
|
|
!item USB controller on his PCI bus.
|
|
!item AC97 audio codec on his AC-LINK interface.
|
|
!item EDID from monitor to his I2C interface.
|
|
!item Ethernet 10/100.
|
|
!end_itemize
|
|
|
|
|
|
!subnode Coldfire V4e
|
|
|
|
This coldfire like all the members of his familly is a microcontroller, there are :
|
|
|
|
!begin_itemize
|
|
!item Two Fast Ethernet Controllers (FEC 10/100), but only the first is used on
|
|
the Firebee.
|
|
!item Four Programmable Serial Controllers (PSC), the first port is the highspeed
|
|
serial port, the third port is for the AC97 audio codec.
|
|
!item A PCI controller connnected to an USB host controller, the PCI configured
|
|
at 33MHz on the Firebee.
|
|
!item An USB slave device not used on the Firebee.
|
|
!item A Flexbus connected to the FPGA and 8 MB of Flash memory (multiplexd bus,
|
|
same frequency than the PCI).
|
|
!item A Memory Controller connected to 512MB of SDRAM memory.
|
|
!item An I2C interface connected to the DVI-I port.
|
|
!item An DSPI interface connected to the SD-Card socket.
|
|
!item A multichannel DMA (used for example for the AC97).
|
|
!item 6 Timers.
|
|
!end_itemize
|
|
|
|
!image ..\img\v4e.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
|
|
!subnode TOS 4.04
|
|
|
|
The TOS404 for FIREBEE use the CF68KLIB (68060 emulation) and use :
|
|
|
|
!begin_itemize
|
|
!item Timers and MFP (FPGA emulation).
|
|
!item Serial ports (MFP FPGA emulation and PSC0 from Coldfire).
|
|
!item Serial port for IKBD with Eiffel.
|
|
!item ACIA for original IKBD (FPGA emulation).
|
|
!item ACIA for MIDI (FPGA emulation).
|
|
!item Ethernet 10/100.
|
|
!item PCI: USB / Radeon (USB support mouse & keyboard, and mass storage) with
|
|
plug & play feature.
|
|
!item CompactFlash (FPGA emulation).
|
|
!item SD-Card (using DSPI).
|
|
!item Atari Falcon IDE / SCSI (FPGA emulation, SCSI not implemented).
|
|
!item Coldfire DMA.
|
|
!item MMU.
|
|
!item PSG (YAMAHA - FPGA emulation)
|
|
!item Atari Floppy (FPGA emulation, only reading works)
|
|
!item RTC (PIC & FPGA emulation)
|
|
!item Videl ACP extended modes with EDID probing (monitor detection)
|
|
!item AC97 Sound.
|
|
!end_itemize
|
|
|
|
The TOS has four parts :
|
|
|
|
!begin_itemize
|
|
!item The original TOS 4.04.
|
|
!item The boot who can start from reset, initialize the board, start the CF68KLIB,
|
|
apply the patches to the TOS, add some XBIOS and boot disk parts rewrited, and
|
|
start the PCI BIOS.
|
|
!item The CF68KLIB for a 68060 emulation.
|
|
!item The driver part (AC97, Radeon, DMA, USB, Video ACP, rewrited VDI, TCP/IP stack,
|
|
etc ...).
|
|
!end_itemize
|
|
|
|
|
|
!node TOS in Flash
|
|
|
|
!subnode Start TOS
|
|
|
|
The TOS located at 0xE0400000 need an FPGA init before start.
|
|
There are 3 solutions for start the TOS from reset (from 0xE0000000) :
|
|
|
|
!begin_itemize
|
|
!item dBUG who has Ethernet support (TOS easy to update without risk,
|
|
see 'Load TOS with dBUG')
|
|
!item BAS the original solution of Fredi (but sound not works under TOS).
|
|
!item The TOS himself with the rescue TOS who initialize the FPGA.
|
|
!end_itemize
|
|
|
|
NOTE: Only the 2 latest solutions can also start EMUTOS.
|
|
|
|
|
|
!subnode Drivers
|
|
|
|
The drivers part on the Firebee add features to TOS :
|
|
|
|
!begin_itemize
|
|
!item AC97 driver.
|
|
!item Videl ACP externded modes driver (256 /65K / 16M colors) with EDID
|
|
monitor detection.
|
|
!item USB driver.
|
|
!item SD-Card driver (thanks to Fredi).
|
|
!item DMA driver.
|
|
!item Flash driver.
|
|
!item Fast Ethernet Controller (FEC) driver.
|
|
!item Ethernet PHY driver (tranceiver).
|
|
!item VDI/fVDI replacement.
|
|
!item X86 emulator (for a graphic card initialization).
|
|
!item ATI Radeon driver.
|
|
!item XBIOS GSXB driver.
|
|
!item BDOS (GEMDOS replacement).
|
|
!item TCP/IP stack (LwIP/FreeRTOS) with TFTP, FTP, Telnet, HTTP servers
|
|
(you can see screen like a VNC server).
|
|
!item GlueSTiK and socket interfaces (from cookies 'STiK' and 'SOCK').
|
|
!item Real time OS (FreeRTOS) with DBUG task.
|
|
!item 68K/Coldfire disassembler.
|
|
!end_itemize
|
|
|
|
|
|
!subnode Technical (boot)
|
|
|
|
This is a TOS 4.04 patched by the boot (2.0+), in this order there are :
|
|
|
|
!begin_itemize
|
|
!item Board initialization (Coldfire and ACP registers).
|
|
!item The copy of the TOS in SDRAM after apply the patches.
|
|
!item The initialization of the MMU. All the ST-RAM is in
|
|
writethrough and the SDRAM declaration in copyback.
|
|
!item Start the CF68KLIB, TOS is a task for FreeRTOS (driver part).
|
|
!item The installation of the cookies '_CPU', '_FPU', '_CF_'.
|
|
!item The patchs for cache, MMU, address in 0x00FFxxxx, and the
|
|
instructions movep replaced.
|
|
!item The bombs inside exceptions displayed with texts in clear of a crash.
|
|
!item The XBIOS function 0xC60A to 0xC60D (temperature, parameters in
|
|
Flash, cache...), and the DSP (functions with handshake).
|
|
!item The needful patchs for the blitter, the system fonts and the Atari
|
|
logo copied at the top of the ST-RAM.
|
|
!item The replacement of the XBIOS Bconout routine (display texts).
|
|
!item Check and fix the modecode get from NVM.
|
|
!item Start the PCI BIOS and the drivers.
|
|
!item The display of the V4e's type (revision, mask and frequency).
|
|
!item The declaration of the SDRAM to the TOS.
|
|
!item The initialization of the SDRAM, and the MB/s during writing
|
|
displayed.
|
|
!item The fastram buffer created and his cookie '_FRB'.
|
|
!item The extended fastram buffer created and his cookie 'XFRB'.
|
|
!item The patch for the boot order of the drives IDE and SCSI (8 choices).
|
|
!item Extra boot features :
|
|
!begin_itemize
|
|
!item Add SCSIDRV and XHDI protocols.
|
|
!item Add identify device procedure for SCSI and IDE drives, the boot wait
|
|
if a removable drive is not ready.
|
|
!item Add IDE slave support.
|
|
!item Add CompactFlash support.
|
|
!item Add combined MSDOS/TOS root and partition support, this feature
|
|
support byte swapping needed by MSDOS format and search a *.SYS for
|
|
load the disk driver.
|
|
!item Add speed test for bootables devices.
|
|
!item Start internal hard disk driver if no bootable disk as an external
|
|
driver.
|
|
!end_itemize
|
|
!item The patch for the boot menu.
|
|
!item The displays redirection of the AUTO programs to a file boot.log.
|
|
!item The patch for the Pexec function for the copyback (cpush after the
|
|
relocation).
|
|
!item The blitter patchs of the VDI functions, vro_cpyfm, vr_trnfm, and
|
|
vrt_cpyfm for work in SDRAM (an intermediate buffer inside ST-RAM is used).
|
|
!item The AES patchs for change the Newdesk buffer of 4 KB to 32 KB.
|
|
!item Scan-codes used with the Eiffel card :
|
|
!begin_itemize
|
|
!item PAGE UP/DOWN.
|
|
!item PRINT SCREEN.
|
|
!item POWER (set 2 only, Eiffel 1.0.5).
|
|
!item VOLUME UP/DOWN (set 2 only, Eiffel 1.0.5).
|
|
!end_itemize
|
|
!end_itemize
|
|
|
|
|
|
!subnode Boot menu
|
|
|
|
There are two boot menu on the Firebee :
|
|
|
|
!begin_itemize
|
|
!item The original use the NVRAM OS setting, the TOS is started.
|
|
!item The second can start EMUTOS in native mode or a TOS to test after board
|
|
initialization. Switches or TOS source area (normal or rescue) change the
|
|
content of this menu.
|
|
!end_itemize
|
|
|
|
|
|
!subsubnode Original boot menu (TOS started)
|
|
|
|
The TOS can replace magxboot (MagiC) in the AUTO folder for a fast boot
|
|
(no programs inside the AUTO folder to start). You can enable a boot menu
|
|
with the configuration CPX. This menu arrives if the entry of the favourite
|
|
OS inside is <> '-'.
|
|
|
|
You can select TOS, or MagiC, value is stored inside the NVM.
|
|
|
|
With MagiC, the TOS try to found MAGIC.RAM inside the main directory
|
|
of the boot folder.
|
|
|
|
Sure you can always use MAGXBOOT.PRG or ATABOOT.PRG inside the AUTO
|
|
folder.
|
|
|
|
(!B)
|
|
IMPORTANT MOTE : In the current status of emulation, MagiC can't run on Firebee.
|
|
(!b)
|
|
|
|
|
|
!subsubnode Firebee boot menu (after board init)
|
|
|
|
Boot menu and rescue features context is the result of the switches.
|
|
SW6 and SW5 are inside the cookie '_SWI':
|
|
|
|
!begin_itemize
|
|
!item B7: (1) SW6 DOWN, (0) SW6 UP.
|
|
!item B6: (1) SW5 DOWN, (0) SW5 UP.
|
|
!item B0: (1) rescue TOS started from 0xE0000000 (replace BAS or dBUG).
|
|
!end_itemize
|
|
|
|
SW6 up is the normal usage.
|
|
|
|
SW6 down allows to TOS to start FTP (build option), HTTP, TFTP servers and create a Ram-Disk
|
|
actually in B (this feature is also possible with dBUG at 0xE0000000).
|
|
|
|
SW5 up is the normal usage for start the TOS at 0xE0400000 (same usage inside BAS or dBUG at
|
|
0xE0000000) and a boot menu has 2 choices TOS or EMUTOS (TOS by default).
|
|
|
|
SW5 down is the rescue mode, TOS at 0xE0000000 continue to run and a boot menu displays 3 choices :
|
|
|
|
!begin_itemize
|
|
!item TOS404 (at 0xE0000000 - boot) => TOS rescue (default choice)
|
|
!item EMUTOS (at 0xE0600000)
|
|
!item TOS404 (at 0xE0400000 - normal) => TOS to test
|
|
!end_itemize
|
|
|
|
(!B)
|
|
IT'S IMPORTANT TO FLASH ONLY AT 0xE0000000 AN OFFICIAL STABLE RELEASE OF THE TOS (rescuetos.hex)
|
|
OR CONTINUE TO USE DBUG OR BAS AT 0xE0000000.
|
|
(!b)
|
|
|
|
NOTES :
|
|
|
|
!begin_itemize
|
|
!item If BAS used for start the TOS, SW5 and SW6 must be up, else you start EMUTOS or nothing.
|
|
!item If dBUG used for start the TOS, SW5 must be up, else you must use the command 'go E0400000'.
|
|
!end_itemize
|
|
|
|
|
|
!node Flash Tool
|
|
|
|
!subnode Use Flash Tool
|
|
|
|
!image ..\img\flash1.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
The main task of this program is to put TOS binary (.BIN) or Srecord files
|
|
(.HEX) inside the flash.
|
|
|
|
Since the BOOT v2.0, it's possible to load separate files for the TOS404, the
|
|
BOOT and the PCI drivers:
|
|
!begin_itemize
|
|
!item FIRETOS.HEX: contains BOOT + TOS404 + Atari Diagnostics (must disappear).
|
|
!item BOOT_FIREBEE.HEX: contains the BOOT (must arrive).
|
|
!item DRIVERS_FIREBEE.HEX: contains the PCI drivers (GPL licence, not in this archive).
|
|
!item TOS404.BIN (not in the archive): just for put the TOS in flash, in the
|
|
case of FIRETOS.HEX isn't used.
|
|
!end_itemize
|
|
|
|
NOTE : A binary file (.BIN) has a target address fixed at 0xE0400000.
|
|
|
|
|
|
!node Configuration
|
|
|
|
!subnode Introduction
|
|
|
|
The Firebee's configuration is set with a CPX, used normally with XCONTROL,
|
|
ZCONTROL, or COPS.
|
|
|
|
This CPX allows to :
|
|
|
|
!begin_itemize
|
|
!item Configure the Non Volatile Memory.
|
|
!item Configure the boot in Flash Eprom.
|
|
!item Measure MIPS.
|
|
!item See the load of the system (MiNT or MagiC only).
|
|
!item See the Firebee temperature (need and Eiffel card inside the same box).
|
|
!item Blank the monitor after a delay.
|
|
!end_itemize
|
|
|
|
!image ..\img\cpx3.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
There are five common buttons on this CPX :
|
|
|
|
!begin_itemize
|
|
!item Save : Button for save adjustments on the disk.
|
|
!item Load : Button for load adjustments saved on the disk.
|
|
!item OK : Button for validate the values changed into the non volatile
|
|
ram and the flash parameters.
|
|
!item Cancel : Button for not change values to the configuration.
|
|
!item i : Button for display informations (authors).
|
|
!end_itemize
|
|
|
|
For check get a CPU average load, blank the screen, or get the
|
|
temperature (with Eiffel) the CPX :
|
|
|
|
!begin_itemize
|
|
!item Under TOS create a desk-accessory CT60TEMP.ACC (sorry for the name ;-) )
|
|
and ask to reboot.
|
|
!item Under MiNT create the program CT60TEMP.APP and start this program.
|
|
!item Under MagiC start a thread.
|
|
!end_itemize
|
|
|
|
|
|
!subnode Average load
|
|
|
|
!image ..\img\cpx1.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
At this page you can see for MiNT and MagiC :
|
|
|
|
!begin_itemize
|
|
!item The current value of CPU average load.
|
|
!item The level of CPU average load.
|
|
!item The curve of CPU average load during the last hour. Without MiNT 1.11
|
|
or more, this curve is very approximate.
|
|
!end_itemize
|
|
|
|
|
|
!subnode Temperature
|
|
|
|
!image ..\img\cpx2.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
At this page you can see the Firebee's temperature during the last hour if
|
|
you have an Eiffel card (with the cookie 'Temp'). This curve is normally
|
|
in blue and change to magenta if the fan works (set to on by the Effeil card).
|
|
|
|
The green curve, the 68060 temperature value, and the trigger level are not used
|
|
because there are no sensor on the Coldfire (it's a 68060 feature).
|
|
|
|
|
|
!subnode Memory / uP
|
|
|
|
!image ..\img\cpx3.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
At this page you can :
|
|
|
|
!begin_itemize
|
|
|
|
!item See the total capacity of the ST-Ram.
|
|
|
|
!item See the total capacity of the Fast-Ram.
|
|
|
|
!item See the number of free bytes for the ST-Ram.
|
|
|
|
!item See the number of free bytes for the Fast-Ram.
|
|
|
|
!item See the number of millions instructions by second worked out by the
|
|
microprocessor (BogoMips).
|
|
|
|
!item Select with/without FPU.
|
|
|
|
|
|
!subnode Boot
|
|
|
|
!image ..\img\cpx4.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
At this page you can :
|
|
|
|
!begin_itemize
|
|
!item Select the boot order on the IDE and SCSI drives (8 choices).
|
|
!item Select at boot the operating system by default.
|
|
!item Select at boot the SCSI arbitration.
|
|
!item Select at boot the SCSI identificator (0 to 7).
|
|
!item Set the delay at boot in seconds (used for timeout with the boot menu).
|
|
!item Set the default speed of the highspeed serial port used also for debug.
|
|
!item Under TOS, remove the caches during 5 seconds when a program is
|
|
started or remove the copyback alert box.
|
|
!item Redirect displays of the AUTO folder's programs to a file boot.log.
|
|
!item Get a debug file video.log.
|
|
!item Swap the two IDE ports (CompactFlash and IDE).
|
|
!end_itemize
|
|
|
|
NOTES :
|
|
|
|
!begin_itemize
|
|
!item Theses settings are writed inside the NVRAM or flash parameters with
|
|
the 'OK' button.
|
|
!item If you use the CompactFlash as drive or want use the internal driver,
|
|
please use only new boot (the old boot is the original boot of the TOS 4.04).
|
|
!end_itemize
|
|
|
|
|
|
!subnode Stop/Misc
|
|
|
|
!image ..\img\cpx5.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
At this page you can :
|
|
|
|
!begin_itemize
|
|
!item Set a delay for blank monitor (disabled if set to 0).
|
|
!item Set 3 last bytes of MAC address, begin is 00:CF:54.
|
|
!item Set board IP address.
|
|
!item Set host IP address (for TFTP).
|
|
!end_itemize
|
|
|
|
NOTES :
|
|
|
|
!begin_itemize
|
|
!item The delay is saved inside the CPX with the 'Save' button
|
|
(and not in NVRAM or flash parameters). It's CT60TEMP.ACC/APP features.
|
|
!item The ethernet parameters are writed in the flash parameters with
|
|
the 'OK' button. If the valuse are 255/FF or 0, dBUG setting are used.
|
|
!item The default gateway address is 0.0.0.0.
|
|
!item The default path/filename for TFTP is /home/firebee.hex.
|
|
!end_itemize
|
|
|
|
|
|
!subnode Langage
|
|
|
|
!image ..\img\cpx6.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
At this page you can :
|
|
|
|
!begin_itemize
|
|
!item Select at boot the language by default.
|
|
!item Select at boot the keyboard type.
|
|
!item Select at boot the date format.
|
|
!item Select at boot the time format 12 or 24 hours.
|
|
!item Select at boot the date separator.
|
|
!end_itemize
|
|
|
|
NOTE : Theses settings are writed inside the NVRAM with the 'OK' button.
|
|
|
|
|
|
!subnode Video
|
|
|
|
!image ..\img\cpx7.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
With the default TOS404 (Videl/Blitter) modes you can :
|
|
|
|
!begin_itemize
|
|
!item Select at boot the monitor type.
|
|
!item Select at boot the display's mode : NTSC = 60 Hz, PAL = 50 Hz.
|
|
!item Select at boot the screen resolution.
|
|
!item Select at boot the numbers of colors.
|
|
!item Select at boot the ST compatibility mode.
|
|
!item Select at boot the overscan mode on TV.
|
|
!item Replace the NVRAM reading by TOS values saved in the Flash and use the
|
|
IKBD clock instead of the RTC. This feature is for fix NVM problems caused
|
|
by a battery failure.
|
|
!end_itemize
|
|
|
|
NOTES :
|
|
|
|
!begin_itemize
|
|
!item Theses settings are writed inside the NVRAM with the 'OK' button
|
|
!item Because there are no blitter actually inside the FPGA emulation
|
|
you can't see/use theses settings.
|
|
!end_itemize
|
|
|
|
|
|
!image ..\img\cpx7_acp.img
|
|
!begin_verbatim
|
|
|
|
!end_verbatim
|
|
|
|
If the video display use the Radeon or extended ACP modes (screen above
|
|
0x01000000) you can :
|
|
|
|
!begin_itemize
|
|
!item Select at boot the screen resolution, if the prefered video mode is
|
|
found on the monitor, the mode added to the list.
|
|
!item Select at boot the numbers of colors (256/65K/16M).
|
|
!item Select at boot the monitor layout on the Radeon board (MON.1,MON.2) :
|
|
!begin_itemize
|
|
!item DEFAULT (automatic mode)
|
|
!item CRT,NONE
|
|
!item CRT,CRT
|
|
!item CRT,TMDS
|
|
!item TMDS,CRT
|
|
!item TMDS,TMDS
|
|
!end_itemize
|
|
!item Select using DMA for boost display (this feature is used only for
|
|
the Radeon board, because the Flexbus has troubles sometimes with ACP video).
|
|
!item Replace the NVRAM reading by TOS values saved in the Flash and use the
|
|
IKBD clock instead of the RTC.
|
|
!end_itemize
|
|
|
|
NOTE : The Radeon/ACP mode not overwrite the Videl mode, the mode is
|
|
writed inside a flash parameter with the 'OK' button.
|
|
|
|
|
|
!subnode CT60TEMP.APP
|
|
|
|
This program is created by the CPX. For get a CPU average load, blank
|
|
the screen, or get the temperature (with Eiffel) the CPX :
|
|
|
|
!begin_itemize
|
|
!item Under TOS create a desk-accessory CT60TEMP.ACC and ask to reboot.
|
|
!item Under MiNT create the program CT60TEMP.APP and start this program.
|
|
!item Under MagiC start a thread.
|
|
!end_itemize
|
|
|
|
Some is the solution used (thead, accessory or application), it's
|
|
possible to use the multimedia keys features of the Eiffel PS/2 interface
|
|
(http://eiffel3.atari.org), especially with the set number 2 PS/2. The
|
|
(!B) POWER (!b) key start a stop after a shutdown procedure.
|
|
|
|
If CT60TEMP.APP is used under MagiC or MiNT (for MagiC boot under TOS and
|
|
copy CT60TEMP.ACC to CT60TEMP.APP), by using environment variables, it's
|
|
possible to use others multimedia keys of the Eiffel PS/2 interface :
|
|
|
|
!begin_itemize
|
|
!item (!B) WWW HOME : (!b) Start the internet navigator with the
|
|
environment variable BROWSER.
|
|
!item (!B) E-MAIL : (!b) Start the email program with the environment
|
|
variable MAILER.
|
|
!item (!B) WWW SEARCH : (!b) Start the internet navigator with the
|
|
environment variable BROWSER with the home page of Google.
|
|
!item (!B) MY COMPUTER : (!b) Start the hypertexte viewer with the
|
|
environment variable HELPVIEWER with the documentation of the CT60.
|
|
!end_itemize
|
|
|
|
You must install the program E_TEMP.PRG inside the AUTO folder (the
|
|
'Eiff' cookie is used).
|
|
|
|
|
|
!subnode BubbleGEM
|
|
|
|
Under a multitasking operating system (for example MagiC, MultiTOS,
|
|
Geneva etc) BubbleGEM can be placed in the auto start folder where it
|
|
will be automatically started as a GEM program on booting the system.
|
|
|
|
Under single TOS BubbleGEM can be run as a desk accessory by renaming
|
|
BUBBLE.APP to BUBBLE.ACC and copying it to the root directory of your
|
|
boot partition, then rebooting.
|
|
|
|
BubbleGEM-aware programs send a message and pass a character string to
|
|
BubbleGEM if the user clicks with the right mouse button on an icon,
|
|
button or window area. BubbleGEM then displays the character string,
|
|
formatted in a cute speech bubble which remains displayed until the user
|
|
moves the mouse pointer to another window area, or until the user clicks
|
|
again to burst the bubble.
|
|
|
|
Optionally bubbles can be displayed by clicking and holding down the
|
|
right mouse button; in this case the bubble bursts as soon as the
|
|
button is released again.
|
|
|
|
While a bubble is open two keyboard shortcuts are active:
|
|
!begin_verbatim
|
|
<CTRL C> : The content of the bubble is copied to the clipboard and
|
|
the bubble remains open.
|
|
<CTRL X> : The content of the bubble is copied to the clipboard and
|
|
the bubble is closed.
|
|
!end_verbatim
|
|
|
|
The author of BubbleGEM is Thomas Much; his email address is:
|
|
|
|
Thomas.Much@stud.uni-karlsruhe.de
|
|
|
|
|
|
!node Cache
|
|
|
|
!subnode The Coldfire's V4e caches
|
|
|
|
There are two caches of 32KB inside the Coldfire V4e, data and instruction.
|
|
|
|
The ST-RAM is in writethrough, at each time than the Coldfire write to the
|
|
RAM, he write in the same time than the data cache.
|
|
|
|
The TT-RAM is in copyback, the Coldfire write always inside his data cache,
|
|
he write in the memory the old data of his cache for found some place for
|
|
the new data.
|
|
|
|
The Coldfire has also an instruction cache, witch the direct link with the
|
|
data cache is only the memory. The result is than it's possible to obtain
|
|
incoherency between the data cache and the instruction cache. The example
|
|
is the excecution of a relocated program, without precaution and without
|
|
system call this is a crash.
|
|
|
|
|
|
!subnode GENERAL6.CPX
|
|
|
|
This CPX is a patched version of the Falcon GENERAL.CPX for the TOS
|
|
060. The cache on/off selection now uses XBIOS calls.
|
|
|
|
|
|
!subnode XCONTROL, ZCONTROL, COPS, and SDRAM in copyback
|
|
|
|
!begin_itemize
|
|
|
|
!item COPS only flush caches after load the CPX and works fine.
|
|
|
|
!item ZCONTROL works under MiNT 1.16/Xaaes.
|
|
|
|
!item XCONTROL crashes.
|
|
|
|
!item The rebuilded XCONTROL.ACC fix this problem.
|
|
|
|
!end_itemize
|
|
|
|
|
|
!subnode PARX.SYS modules and the copyback
|
|
|
|
If a program who use PARX.SYS crashes at start, you can try to remove the
|
|
caches with GENERAL6.CPX, load the program and set to on the caches
|
|
after. For example PICCOLO works with this method.
|
|
|
|
A global solution is to remove the caches during 5 seconds when a program
|
|
is started under TOS with the Boot menu inside the configuration CPX, but
|
|
this method penalize all programs.
|
|
|
|
|
|
!subnode TSR programs who crashes in the AUTO folder
|
|
|
|
Like CPX, the programs who not uses the Pexec function for load
|
|
modules crashes with the SDRAM in copyback, so the best way is to load
|
|
the program in ST-RAM (cache in writethrough). You can use FILEINFO.CPX
|
|
for change the flags.
|
|
|
|
For example you must remove TT-ram flags of METAXBS.PRG (Metados)
|
|
because when the OVL modules are loaded there are no flush after
|
|
relocation, it's not compatible with the SDRAM and the CPU cache in
|
|
copyback.
|
|
|
|
A global solution is to remove the caches during 5 seconds when a program
|
|
is started under TOS with the Boot menu inside the configuration CPX, but
|
|
this method penalize all programs.
|
|
|
|
|
|
!subnode Programs packed by Ice
|
|
|
|
The TOS test the programs packed by Ice, there are a patch for flush
|
|
caches (inside the Pexec function). Without this patch, programs packed by
|
|
Ice crashes with the copyback cache (SDRAM). This problem is not solved
|
|
under MagiC or MiNT.
|
|
|
|
|
|
!node Compatibility
|
|
|
|
!subnode Crashes
|
|
|
|
!subsubnode Crashes with the Coldfire
|
|
|
|
The TOS use the CF68KLIB for emulate the 68060, when the instruction or
|
|
the adressing mode not exist there are no problem the CF68KLIB can do his job.
|
|
But with some instructions there are no exception for the CF68KLIB, excepted
|
|
with a complete virtual CPU (like 68KEMU) who slow down the program, the
|
|
solution is to modify sources, if it's not possible the TOS has a solution
|
|
(a patcher inside Pexec) because 95% of problems are Pure C programs :
|
|
|
|
!begin_itemize
|
|
!item A byte push/pop on stack has 2 bytes aligment on a 68K, not on the Coldfire.
|
|
!item There are no exception for 64 bits instructions mul/div.
|
|
!item Atari line A is MAC instruction on Coldfire (not specific to Pure C programs).
|
|
!end_itemize
|
|
|
|
The TOS test Pure C programs (during Pexec) and try to replace theses instructions
|
|
by unused opcode (Line A) who are handled by te CF68KLIB :
|
|
|
|
!begin_itemize
|
|
!item Line A 0xA000-0xA00F already used for mac instructions replaced by opcode 0xA920-0xA92F.
|
|
!item move.b DX,-(SP) replaced by opcode 0xA910-0xA917.
|
|
!item move.b (SP)+,DX replaced by opcode 0xA918-0xA91F.
|
|
!item move.b (AX),-(SP) replaced by opcode 0xA930-0xA937.
|
|
!item move.b (SP)+,(AX) replaced by opcode 0xA938-0xA93F.
|
|
!item move.b d(AX),-(SP) replaced by opcode 0xA9B0-0xA9B7.
|
|
!item move.b (SP)+,d(AX) replaced by opcode 0xA9B8-0xA9BF.
|
|
!item move.b abs.l,-(SP) replaced by opcode 0xA9F1.
|
|
!item move.b d(PC),-(SP) replaced by opcode 0xA9F2.
|
|
!item move.b (SP)+,abs.l replaced by opcode 0xA9F9.
|
|
!item mulu/s.l ea,dh:dl replaced by opcode 0xABC0-0xABFF.
|
|
!item divu/s.l ea:dr:dq replaced by opcode 0xAFC0-0xAFFF.
|
|
!end_itemize
|
|
|
|
NOTE : This solution can't work with modules not loaded with Pexec or Pure C
|
|
programs who havn't signature.
|
|
|
|
|
|
!subsubnode Crashes with caches
|
|
|
|
You can try to remove the caches with GENERAL6.CPX, start the program who
|
|
causes crashes, load the program and set to on the caches after.
|
|
|
|
You can use FILEINFO.CPX for change the flags and force the program to
|
|
use ST-RAM.
|
|
|
|
For more informations, you can read the part 'Cache'.
|
|
|
|
|
|
!subnode Solutions
|
|
|
|
!begin_table [|l|l|l|] !hline
|
|
(!B)Software(!b) !! (!B)Problem(!b) !! (!B)Solution(!b)
|
|
!hline
|
|
HD Driver !! Crashes !! Use only HDDRUTIL for create
|
|
!! !! partitions and use the internal
|
|
!! !! driver (1GB TOS/DOS partitions).
|
|
!hline
|
|
NVDI 5 !! Not works !! Rename all NVDIDRV*.SYS to
|
|
!! !! NVDIDRV*.SY (for example).
|
|
!! !! Replace hex sequence 48E7E0E0A000
|
|
!! !! by 48E7E0E0A920 inside all
|
|
!! !! OFF*.NOD files.
|
|
!hline
|
|
MagiC 6 !! Not works !! Use MiNT ;-)
|
|
!hline
|
|
Picollo !! Crashes !! Remove the caches during start
|
|
D2D !! Crashes !! or remove the Fast-Ram flags
|
|
Gemview !! Crashes !! or use the cache delay inside
|
|
Gembench !! Crashes !! the configuration CPX under TOS.
|
|
Swiftel Photo !! Crashes !!
|
|
!hline
|
|
Xcontrol !! Crashes !! Use the rebuilded version.
|
|
!hline
|
|
!end_table
|
|
|
|
!begin_table [|l|l|l|] !hline
|
|
(!B)Hard(!b) !! (!B)Problem(!b) !! (!B)Solution(!b)
|
|
!hline
|
|
DSP !! DSP errors !! Not implemented inside the FPGA.
|
|
!! !! Disable DSP.
|
|
!hline
|
|
Sound !! No sound !! Replace the BAS by dBUG or rescue TOS.
|
|
!hline
|
|
Display !! Slow !! Decrease size, there are no hardware
|
|
!! !! acceleration (blitter) with the Videl
|
|
!! !! FPGA emulation, or use a Radeon on PCI bus.
|
|
!hline
|
|
Ethernet !! Not works !! Load the latest FPGA file with FLASH060.
|
|
!hline
|
|
USB !! Not works !! Fix the 3V3 voltage.
|
|
!hline
|
|
USB stick !! Not works !! Load the PCI bus for example with a
|
|
!! !! Radeon board ;-)
|
|
!hline
|
|
Adapter !! Destroyed !! Use an ATX power supply or a DC adapter
|
|
!! !! with a minimum of 1.5 A.
|
|
!hline
|
|
Floppy !! Writing not !! Use an SD-Card or wait an FPGA update.
|
|
!! works !!
|
|
!hline
|
|
Monitor !! not works !! Try another monitor or wait an FPGA or/and
|
|
!! !! TOS drivers update.
|
|
!hline
|
|
SCSI !! Not works !! Not implemented inside the FPGA.
|
|
!! !! Use an IDE drive.
|
|
!hline
|
|
Radeon !! Not works !! Use a Radeon for PC. TOS use an X86 emulator
|
|
for MAC !! !! for initialize the board.
|
|
!hline
|
|
Radeon 7000 !! DVI not work !! Clocks over 135 MHz have heat isues with DVI
|
|
(RV100) !! !! on RV100.
|
|
!! !! Now high modes are rejected (drivers V1.01).
|
|
!hline
|
|
!end_table
|
|
|
|
|
|
!node Annexes
|
|
|
|
!subnode TOS Keyboard shortcuts
|
|
|
|
!begin_verbatim
|
|
CTRL: If pressed before the Atari logo, jump the bios PCI.
|
|
Boot without AUTO folder and ACC.
|
|
ALT: If pressed before the Atari logo, jump the bios PCI.
|
|
Remove cache if pressed before the SDRAM init.
|
|
Boot without disk if pressed after.
|
|
SHIFTL-SHIFTR: Boot without SDRAM if pressed before the Atari logo.
|
|
SHIFTL: Displays infos about the SDRAM module.
|
|
CTRL-ALT-UNDO: NVM and Flash Parameters init if pressed during the
|
|
memory test until the Reset. You need to set the delay
|
|
at boot to 60 seconds with the configuration CPX
|
|
(oups can't work with the Firebee boot menu).
|
|
!end_verbatim
|
|
|
|
|
|
!subnode Load TOS with dBUG
|
|
|
|
For load firetos.hex (the TOS) with an host TFTP server with dBUG cmds :
|
|
|
|
The 1st time, set TFTP vars (for example) :
|
|
|
|
!begin_itemize
|
|
!item set server 192.168.1.1 (host IP server)
|
|
!item set client 192.168.1.2 (FIREBEE IP)
|
|
!item set filename /home/firetos_firebee.hex
|
|
!item set filetype S-Record
|
|
!item set baud 19200
|
|
!end_itemize
|
|
|
|
After just use :
|
|
|
|
!begin_itemize
|
|
!item dn -o 20000000
|
|
!item fl w E0400000 400000 f0000
|
|
!item go E0400000 (or go)
|
|
!end_itemize
|
|
|
|
Or if jou want preserve flash :
|
|
|
|
!begin_itemize
|
|
!item dn -o 20000000
|
|
!item go 4000000 (or go)
|
|
!end_itemize
|
|
|
|
The TOS can start from anywere (-o is for add an offset and put the
|
|
S-record file in SDRAM), the boot part copy and apply patches to
|
|
the original TOS and uncompress the driver part to the target address
|
|
(0x00E00000). If the source address is equal to the target address
|
|
(0x00E00000), the boot has a jump to 0xE0400000.
|
|
|
|
WARNING : The ethernet part of dBUG need a clock on the PHY, so if the
|
|
FLASH above 0xE7000000 is destroyed ethernet can't work!
|
|
|
|
NOTE : If the BAS is installed, it's possible to use ethernet without
|
|
dBUG with some limitations (3 flash parameters used) :
|
|
|
|
!begin_itemize
|
|
!item You can change only the 3 lastest bytes of the MAC address with
|
|
the CPX (stop/misc menu), begin is 00:CF:54
|
|
!item You can change board IP and host IP with the CPX (stop/misc menu).
|
|
!item The netmask is automatic if the choice is CPX setting.
|
|
!item The default gateway is 0.0.0.0.
|
|
!item The default path/filename for TFTP is /home/firebee.hex.
|
|
!item If the board IP address is at 0.0.0.0 or 255.255.255.255 dBUG
|
|
setting are used for board IP / gateway / netmask / path/filename.
|
|
!item If the host IP address is at 0.0.0.0 or 255.255.255.255 dBUG
|
|
setting are used for host IP.
|
|
!item If the 3 last bytes of MAC address are 00:00:00 or FF:FF:FF dBUG
|
|
setting are used.
|
|
!end_itemize
|
|
|
|
|
|
!subnode DBUG task
|
|
|
|
This DBUG task use the highspeed serial port, this is the list of CF68KLIB,
|
|
LWIP and FreeRTOS commands :
|
|
|
|
!begin_verbatim
|
|
Command Description Syntax
|
|
cb Clear Breakpoint cb <index>
|
|
db Define Breakpoint db <addr> <-c|t value> <-r addr..> <-i> <-m>
|
|
dm Display Memory dm begin <end>
|
|
dis Disassemble dis <addr>
|
|
dr Display Registers CF68KLIB dr
|
|
go Execute, Insert Breakpt go
|
|
lb List Breakpoints lb
|
|
pm Patch Memory pm addr <data>
|
|
qt Query Tasks qt
|
|
st Single Step (after db) st <count>
|
|
cat Concatenate File(s) cat file(s)
|
|
chdir Change Directory chdir dir
|
|
chmod Change Attibutes chmod filename attributes
|
|
cp Copy File cp source dest
|
|
ls List Directory ls <dir>
|
|
mkdir Make Directory mkdir dir
|
|
mv Rename File mv source dest
|
|
rm Remove File rm file
|
|
rmdir Remove Directory rmdir dir
|
|
arp Address Resol. Protocol arp <-a> <host>
|
|
ifconfig Interface Configuration ifconfig <-a> <interface> ...
|
|
ping Ping ping <-n echos> <-w delay> host
|
|
netstat Network Stats netstat
|
|
cache Cache cache on/off
|
|
debug Debug CF68KLIB debug on/off <count (0:infinite)>
|
|
inter Interrupts CF68KLIB inter <on/off/abort>
|
|
reset System Reset reset
|
|
trap Traps CF68KLIB trap on/off <count (0:infinite)>
|
|
help Help help <cmd>
|
|
!end_verbatim
|
|
|
|
Excepted debug commands, it's also possible to use these commands with Telnet.
|
|
You can set the baudrate of the highspeed serial port with the CPX.
|
|
|
|
Usage example :
|
|
|
|
!begin_verbatim
|
|
> qt
|
|
Name TID Prio Status Sys/User Stack #
|
|
------------------------------------------------------------
|
|
ROOT F1006C 0A Ready 3987/NU/4096 0
|
|
IDLE F141D0 00 Ready 4067/NU/4096 1
|
|
lwIP0 F18510 1E Blocked 3977/NU/4096 2
|
|
lwIP1 F1C750 1E Suspend 4003/NU/4096 3
|
|
TELNETd F208B4 0F Suspend 3998/NU/4096 4
|
|
FTPd F26EDC 0A Blocked 4000/NU/4096 5
|
|
TFTPd F2B040 0A Suspend 3944/NU/4096 6
|
|
HTTPd F2F1A4 0A Suspend 4024/NU/4096 7
|
|
TOS F33308 05 Ready 4073/NU/4096 8
|
|
DBUG F3746C 14 Ready 3004/NU/4096 9
|
|
HMES F3BCF0 0A Ready 4004/NU/4096 10
|
|
HT01 F3FF58 09 Suspend 3981/NU/4096 11
|
|
HT02 F440BC 09 Suspend 3981/NU/4096 12
|
|
HT03 F48220 09 Suspend 3981/NU/4096 13
|
|
HT04 F4C384 09 Suspend 3981/NU/4096 14
|
|
HT05 F504E8 09 Suspend 3981/NU/4096 15
|
|
USBT F54D08 06 Ready 4035/NU/4096 16
|
|
USBd F591D0 1F Suspend 3003/NU/4096 17
|
|
=> qt command displays FreeRTOS tasks, the TOS himself is a task.
|
|
Only the TOS use the CF68KLIB.
|
|
|
|
> inter
|
|
int
|
|
NATIVE/RTOS CF68KLIB/TOS LEV PRI INTERRUPTS
|
|
OFF OFF 1 0 Edge port 1 Int(65)
|
|
OFF OFF 2 0 Edge port 2 Int(66)
|
|
OFF OFF 3 0 Edge port 3 Int(67)
|
|
OFF OFF 4 0 Edge port 4 Int(68)
|
|
OFF OFF 5 0 Edge port 5 Int(69)
|
|
OFF OFF 6 0 Edge port 6 Int(70)
|
|
OFF OFF 7 0 Edge port 7 Int(71)
|
|
OFF OFF 0 0 DSPI Int(89)
|
|
OFF OFF 0 0 DSPI Int(90)
|
|
OFF OFF 0 0 DSPI Int(91)
|
|
OFF OFF 0 0 DSPI Int(92)
|
|
OFF OFF 0 0 DSPI Int(93)
|
|
OFF OFF 0 0 DSPI Int(94)
|
|
OFF OFF 0 0 DSPI Int(95)
|
|
OFF OFF 0 0 PSC3 Int(96)
|
|
OFF OFF 0 0 PSC2 Int(97)
|
|
OFF OFF 0 0 PSC1 Int(98)
|
|
OFF ON 6 5 PSC0 Int(99)
|
|
OFF OFF 0 0 Comm Timer Int(100)
|
|
OFF OFF 0 0 SEC Int(101)
|
|
OFF OFF 0 0 FEC1 Int(102)
|
|
ON ON 5 1 FEC0 Int(103)
|
|
OFF OFF 0 0 I2C Int(104)
|
|
OFF OFF 0 0 PCIARB Int(105)
|
|
OFF OFF 0 0 CBPCI Int(106)
|
|
OFF OFF 0 0 XLBPCI Int(107)
|
|
ON ON 7 7 XLBARB Int(111)
|
|
ON ON 6 0 DMA Int(112)
|
|
OFF OFF 0 0 CAN0 ERROR Int(113)
|
|
OFF OFF 0 0 CAN0 BUSOFF Int(114)
|
|
OFF OFF 0 0 CAN0 MBOR Int(115)
|
|
OFF OFF 0 0 SLT1 Int(117)
|
|
ON ON 6 7 SLT0 Int(118)
|
|
OFF ON 6 4 CAN1 ERROR Int(119)
|
|
OFF ON 6 4 CAN1 BUSOFF Int(120)
|
|
OFF ON 6 4 CAN1 MBOR Int(121)
|
|
OFF OFF 0 0 GPT3 Int(123)
|
|
OFF OFF 0 0 GPT2 Int(124)
|
|
OFF OFF 0 0 GPT1 Int(125)
|
|
OFF OFF 0 0 GPT0 Int(126)
|
|
=> By default TOS interrupts not works without CF68KLIB
|
|
(excepted the TOS himself), so some interrupts are disabled
|
|
out of the TOS task.
|
|
!end_verbatim
|
|
|
|
'db' install a breakpoint, without address db install a breakpoint
|
|
at the beginning of the program during Pexec (BDOS feature).
|
|
|
|
|
|
!subnode Firebee MMU mapping
|
|
|
|
!begin_verbatim
|
|
00000000 - 00CF0000 : STRAM 13 MB (cache in writethrough)
|
|
00D00000 - 00DFFFFF : Mirror FPGA 1MB VIDEO RAM (cache in writethrough)
|
|
00E00000 - 00EFFFFF : TOS404 1 MB (write protected)
|
|
00F00000 - 00F01FFF : Mirror FPGA - ATARI IDE (8K)
|
|
00F02000 - 00F0FFFF : invalid (bus error)
|
|
00F10000 - 00F9FFFF : USB descriptors memory, DMA from PCI (no cache)
|
|
00FA0000 - 00FBFFFF : invalid (bus error)
|
|
00FC0000 - 00FEFFFF : TOS404 192 KB (write protected)
|
|
00FF0000 - 00FF7FFF : invalid (bus error)
|
|
00FF8000 - 00FFFFFF : Mirror FPGA - ATARI I/O (32K - no cache)
|
|
01000000 - 1FFFFFFF : SDRAM 496 MB (cache in copyback)
|
|
20000000 - 3FFFFFFF : invalid (bus error)
|
|
40000000 - 7FFFFFFF : FPGA FBCS4 VIDEO RAM
|
|
80000000 - BFFFFFFF : PCI MEM (1024 MB)
|
|
C0000000 - CFFFFFFF : invalid (bus error)
|
|
D0000000 - DFFFFFFF : PCI I/O (256 MB)
|
|
E0000000 - E07FFFFF : FBCS0 flash 8 MB (flash parameters at 0xE04F0000)
|
|
E0800000 - EFFFFFFF : invalid (bus error)
|
|
F0000000 - F7FFFFFF : FPGA FBCS2 ACP I/O
|
|
F8000000 - FBFFFFFF : FPGA FBCS3 SRAM
|
|
FC000000 - FEFFFFFF : invalid (bus error)
|
|
FF000000 - FF01FFFF : MBAR coldfire (no cache)
|
|
FF020000 - FF03FFFF : invalid (bus error)
|
|
FF040000 - FF04FFFF : MMU_BASE coldfire (no cache)
|
|
FF050000 - FFEFFFFF : invalid (bus error)
|
|
FFF00000 - FFFFFFFF : FPGA FBCS1 - ATARI IDE - ATARI I/O (1MB - no cache)
|
|
!end_verbatim
|
|
|
|
|
|
!subnode LWIP socket cookie 'SOCK'
|
|
|
|
!begin_verbatim
|
|
typedef struct socket_cookie
|
|
{
|
|
long version; /* 0x0101 for example */
|
|
long magic; /* 'SOCK' */
|
|
int (*socket)(int domain, int type, int protocol);
|
|
int (*bind)(int s, struct sockaddr *name, socklen_t namelen);
|
|
int (*listen)(int s, int backlog);
|
|
int (*accept)(int s, struct sockaddr *addr, socklen_t *addrlen);
|
|
int (*connect)(int s, struct sockaddr *name, socklen_t namelen);
|
|
int (*write)(int s, void *dataptr, int size);
|
|
int (*send)(int s, void *dataptr, int size, unsigned int flags);
|
|
int (*sendto)(int s, void *dataptr, int size, unsigned int flags, struct sockaddr *to, socklen_t tolen);
|
|
int (*read)(int s, void *mem, int len);
|
|
int (*recv)(int s, void *mem, int len, unsigned int flags);
|
|
int (*recvfrom)(int s, void *mem, int len, unsigned int flags, struct sockaddr *from, socklen_t *fromlen);
|
|
int (*shutdown)(int s, int how);
|
|
int (*close)(int s);
|
|
int (*getsockname)(int s, struct sockaddr *name, socklen_t *namelen);
|
|
int (*getpeername)(int s, struct sockaddr *name, socklen_t *namelen);
|
|
int (*getsockopt)(int s, int level, int optname, void *optval, socklen_t *optlen);
|
|
int (*setsockopt)(int s, int level, int optname, const void *optval, socklen_t optlen);
|
|
int (*select)(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct timeval *timeout);
|
|
int (*ioctlsocket)(int s, long cmd, void *argp);
|
|
struct hostent *(*gethostbyname)(const char *name);
|
|
int (*geterrno)(void);
|
|
} SOCKET_COOKIE;
|
|
!end_verbatim
|
|
|
|
|
|
!node Contacts
|
|
|
|
!begin_verbatim
|
|
Flash Tool, Configuration, and system :
|
|
Didier MEQUIGNON
|
|
aniplay@wanadoo.fr
|
|
!end_verbatim
|
|
|
|
!end_document
|