This file contains an overview of the Atmos runtime system as it comes with the cc65 C compiler. It describes the memory layout, Atmos-specific header files, available drivers, and any pitfalls specific to that platform.
Please note that Atmos-specific functions are just mentioned here, they are described in detail in the separate function reference. Even functions marked as "platform dependent" may be available on more than one platform. Please see the function reference for more information.
The standard binary output format generated by the linker for the Atmos target
is a machine language program with a one-line BASIC stub that jumps to the
machine-language part through CALL
. It has one sacrificial byte attached
to the end (a bug in the Oric ROM means that BASIC can put a variable on top
of the last byte that was loaded). It has a 24-byte tape header. A file can
be CLOADed as a BASIC program, and started by typing RUN
. The standard
load address is $501.
In the standard setup, cc65-generated programs use the memory from $0501 to $9800; so, nearly 37K of memory (including the stack) is available. ROM calls are possible without further precautions.
If your program needs more memory, and it won't use TGI graphics, then you can
use the ld65 command-line option, -D __GRAB__=1
, when building the
program, to include the graphics screen RAM. Then, nearly 44K of memory
($0501 to $B400) is available.
Special locations:
The C runtime stack is located at $97FF (or $B3FF), and grows downwards.
The C heap is located at the end of the program, and grows towards the C runtime stack.
Programs containing Atmos-specific code may use the atmos.h
header file.
The functions listed below are special for the Atmos. See the function reference for declaration and usage.
The following pseudo variables declared in the atmos.h
header file do allow
access to hardware located in the address space. Some variables are
structures; accessing the struct fields will access the chip registers.
VIA
Access to the VIA (Versatile Interface Adapter) chip is available via the
VIA
variable. The structure behind this variable is explained in _6522.h
.
Note: Since the Atmos doesn't have working disk I/O (see section "Limitations"), the available drivers cannot be loaded at runtime (so the term "loadable drivers" is somewhat misleading). Instead, the drivers have to be statically linked. While this may seem overhead, it has two advantages:
The names in the parentheses denote the symbols to be used for static linking of the drivers.
The default drivers, tgi_stddrv (tgi_static_stddrv)
,
point to atmos-240-200-2.tgi (atmos_240_200_2_tgi)
.
atmos-228-200-3.tgi (atmos_228_200_3_tgi)
This driver was written by Greg King and Stefan Haubenthal. It features a resolution of 228×200 with a palette of two colors that can be chosen from the Atmos's eight colors. The driver supports a third palette-"color" that actually "flips" the pixel (it becomes the other color) that is on the screen under the graphics cursor.
atmos-240-200-2.tgi (atmos_240_200_2_tgi)
This driver was written by Stefan Haubenthal and Greg King. It features a resolution of 240×200 with black and white colors. It is the default graphics driver for the Atmos.
No extended memory drivers are currently available for the Atmos.
atmos-pase.joy (atmos_pase_joy)
Supports two standard joysticks connected to a P.A.S.E. / Altai interface of the Atmos.
atmos-ijk.joy (atmos_ijk_joy)
Supports two standard joysticks connected to an IJK interface of the Atmos.
No mouse drivers are currently available for the Atmos.
atmos-acia.ser (atmos_acia_ser)
Driver for the Telestrat integrated serial controller and the Atmos with a serial add-on. Supports up to 19200 baud, requires hardware flow control (RTS/CTS) and does interrupt driven receives. Note that, because of the peculiarities of the 6551 chip, together with the use of the NMI, transmits are not interrupt driven; and, the transceiver blocks if the receiver asserts flow control because of a full buffer.
The existing library for the Atmos doesn't implement C file I/O. There are
hacks for the read()
and write()
routines in place, which will make
functions work that read from stdin
and write to stdout
and
stderr
(such as printf()
). However, those functions have some
shortcomings which won't be fixed, because they're going to be replaced
anyway.
To be more concrete, that limitation means that you cannot use any of the following functions (and a few others):
They are defined to be FUNCT + a number key.
The keyboard's "CAPS Lock" mode is turned off while the program is running. The previous mode (usually, CAPS Lock turned on [because Oric BASIC keywords must be UPPER-case]) is restored when the program stops.
Command-line arguments can be passed to main()
. Since that is not
supported directly by BASIC, the following syntax was chosen:
RUN:REM arg1 " ARG2 IS QUOTED" ARG3 "" ARG5
CAPS
lock off (tap CTRL-T) when you want to type
lower-case arguments (but, RUN
and REM
must be UPPER-case).main()
is the program name.Usually, a cc65-built program just will sit quietly in memory, after it is
CLOADed. It waits for you to start it (by typing BASIC's RUN
command).
But, if you want to create a program that will start running immediately after
it is loaded, then you can use the linker command-line option
-D __AUTORUN__=$C7
.
The runtime for the Atmos uses routines marked as .INTERRUPTOR
for
interrupt handlers. Such routines must be written as simple machine language
subroutines and will be called automatically by the interrupt handler code
when they are linked into a program. See the discussion of the .CONDES
feature in the
assembler manual.
This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: