Skip to main content
© Niklas 'Tanis of TCB' Malmqvist

 "The American government is making nuclear weapons like  there's
no tomorrow."
                                                      Emo Philips


             "THE ATARI COMPENDIUM" BY SCOTT SANDERS
                     Errata Sheet: 11/1/1993
                           Part 1 of 3
                   (Foreword by Michael Noyce)


 When "The Atari Compendium" was released a couple of years ago I
immediately purchased a copy.  Okay,  my parents bought it for me
as a Christmas present <grin>.  Anyway,  it was a real  god-send.
Never  before had all the offical Atari developers  documentation
been gathered into one comprehensive volume.
 However, it soon came apparent there were many mistakes, errors,
and  omissions  that needed correcting,  and that is  what  these
three errata 'sheets' do.

 Originally one file,  I have split it into three distinct parts.
The  first  part (this file) is the original errata  released  by
Scott Sanders. The second part was compiled by Mark S. Baines, of
"Profile"  fame,   from  various  sources  (credited  after  each
correction).  The  third  part  is a  collection  of  corrections
extracted from "ST Applications".

 I   haven't  changed  the  contents  in  any  way   other   than
reformatting the text for the ST NEWS page viewer and tidying  up
the presentation a bit.
 Finally,  I would like to thank Mark S.  Baines for supplying me
with  the  original file and for his permission to  reproduce  it
here.  In  fact  he  says  you  are  encouraged  to  spread  this
information as much as possible.

                              *****

1.3 (The 260/520/1040ST)
The  original  ST  computers  contained  a  320x200x16  mode,   a
640x200x4 mode, and a 640x400x2 mode (not 640x400x1 as stated).

1.5
The MegaSTe has three serial ports,  not two (one is shared  with
the LAN).

The TT has a 1280x960x2 mode (not 1280x960x1).

1.6
The  Falcon030 may have a 2.5" IDE drive installed,  not a  half-
height drive as stated.

2.3 (Overview)
GEMDOS derives its heritage from CPM 68k (not CPM 86k).

2.4 (GEMDOS Directories)
Each  sub-directory contains a directory named '..' which  refers
to its parent directory. In addition, each sub-directory contains
a directory named '.' which refers to itself.  The root directory
contains neither of these files.

2.5 (Disk Transfer Address)
The DTA structure is never defined. It is as follows:

   typedef struct _dta
   {
        BYTE    d_reserved[21];
        UCHAR   d_attrib;
        UWORD   d_time;
        UWORD   d_date;
        ULONG   d_length;
        BYTE    d_fname[14];
   } DTA;

(Actually,  the  DTA structure is defined (as above)  in  section
2.64 - Fgetdat() - MN)


2.17 (Signal Table - SIGABRT)
The  last  sentence  in  this  table  entry  should  be  "It   is
unrecommended that you catch this signal."

2.23 (GEMDOS Time & Date Functions)
TOS 1.02 is incorrectly referred to as 1.2. Any references to TOS
1.2  should be considered references to TOS 1.02,  likewise  with
TOS 1.04 or TOS 1.06.

2.38 (Dcntl() - FS_INSTALL entry)
The structure fs_descr is defined without the portability macros.
'WORD'  should  be substituted for 'short' and 'LONG'  should  be
substituted for 'long'.

2.51 (Fchmod() - table)
The definition 'S_IRUSER' should be 'S_IRUSR'.

2.54-2.58 (Fcntl() - table)
Several  constant  definitions for the cmd parameter  of  Fcntl()
were  omitted.  The  correct constants are  (note:  TIOCSTOP  was
documented, but the constant listed was incorrect):

   Definition               Constant
   F_SETLKW                 0x0007
   TIOCSTOP                 0x5409
   TIOCGXKEY                0x540D
   TIOCSXKEY                0x540E
   PSETFLAGS                0x5404
   PGETFLAGS                0x5405
   PTRACEGFLAGS             0x5007
   PTRACESFLAGS             0x5006
   PTRACEGO                 0x5008
   PTRACESTEP               0x500A
   PLOADINFO                0x500C
   SHMSETBLK                0x4E01
   SHMGETBLK                0x4E00

2.77-2.78 (Fsfirst() and Fsnext())
The  DTA structure was never defined.  See the note for page  2.5
above.

2.87 (Pexec())
Pexec() mode 6 is available as of GEMDOS version 0.15.

3.4 (System Startup)
The  Fuji  logo  and hard disk spin-up delay occurs  on  all  TOS
versions past 2.06, not just 2.06 and 3.06 as is stated.

3.8 (Searching for a Cookie)
The example code references the cookie structure members 'cookie'
and 'value' as 'c' and 'v' rather than by their full name.

3.11 (_MCH cookie)
The ST Book '_MCH' cookie contains a value of 0x00010008.

3.12 (FSMC cookie)
The  value  field of the 'FSMC' cookie contains a  pointer  to  a
structure  with information about the current version of GDOS  as
follows:

   typedef struct _gdos_info
   {
        ULONG   gdos_type;
        UWORD   gdos_version;
        WORD    gdos_quality;
   } GDOS_INFO;

The structure member gdos_type will be either '_FSM' for FSMGDOS,
'_FNT' for FONTGDOS, or '_SPD' for SpeedoGDOS.

The   structure  member  gdos_version  contains   the   currently
installed version of GDOS with the major version number being  in
the high byte and the minor version being in the low byte.

The  structure  member gdos_quality is initialized to  0xFFFF  to
indicate  that  printouts  will be  processed  at  the  'default'
quality setting.  Applications may change this value to 0x0000 to
force  GDOS  drivers to output in DRAFT mode or 0x0001  to  force
GDOS  drivers  to output in FINAL mode.  The variable  should  be
restored to 0xFFFF after each print.

3.13 (BIOS Devices)
The Mega STe supports devices 6,  7,  and 9 as Modem 1,  Modem 2,
and  Serial 2 respectively.  Reliable use of BIOS serial  devices
other  than the ST compatible device #1 on a  Falcon030  requires
the  use of the TSR program "FPATCH2.PRG" (available  from  Atari
Developer Support) or a TOS version >4.04.

3.31 (Setexc() - table)
The vector number for TRAP #1 (GEMDOS) is 0x21.

4.16 (The Serial Port)
No mention was made of the Mega STe's serial ports. They bear the
same functionality as serial ports on the TT except that there is
no Serial 1 port on a Mega STe.

The Falcon030 contains an MFP chip,  however,  it is not used  to
control any of the serial devices.

4.23 (Bconmap())
The Falcon030 requires "FPATCH2.PRG" or an installed TOS  version
greater than 4.04 for Bconmap() to work as expected.

4.xx (DSP functions)
Most of the DSP functions contain an incorrect function opcode in
the  'Binding'  section of the function  reference.  The  correct
opcode  for all DSP functions is properly listed in the  'Opcode'
section, however.

4.33 (Dosound())
Dosound(-1) returns a pointer to the sound block of the currently
playing sound or NULL if no sound is currently being played. This
feature is broken in MultiTOS 1.00-1.08.

4.58 (EsetGray())
Mode 0 of EsetGray() causes the low 12 bits of a palette entry to
be interpreted as a TT color. Mode 1 causes the low eight bits of
a palette entry to be interpreted as a gray value between 0-255.

4.59 (EsetPalette())
The correct binding for EsetPalette() is:

   pea     palette
   move.w  count,-(sp)
   move.w  start,-(sp)
   move.w  #$54,-(sp)
   trap    #14
   lea     10(sp),sp

4.61 (Flopfmt())
buf should be a word-aligned pointer to a buffer large enough  to
hold one complete track (not sector as stated).

4.74 (Kbrate())
The correct binding for Kbrate() is:

   move.w  rate,-(sp)
   move.w  delay,-(sp)
   move.w  #$23,-(sp)
   trap    #14
   addq.l  #6,sp

4.80 (Offgibit())
Offgibit()  bit  #7 toggles SCC A between the Serial  2  and  LAN
ports on a TT.

4.81 (Ongibit())
For each bit of mask that is set, that bit will be toggled.

4.86 (Rsconf())
Rsconf()  with a speed parameter of -2 will return the  last  set
baud rate on TOS 1.06 or TOS 1.04 with "TOS14FX2.PRG".

4.92 (Setscreen())
If  any parameter of Setscreen() is -1,  then the value  is  left
unchanged.

4.94 (Sndstatus())
Sndstatus() is available when bit #2 of the '_SND' cookie is set.

4.96 (Soundcmd() - table)
The  sample  rates generated by using a  TT  compatible  prescale
value  with SETPRESCALE are incorrectly identified in MHz  rather
than KHz.

4.97 (Supexec())
The  function  pointer  taken  by  Supexec()  was  not   properly
prototyped.  Supexec() takes a pointer to a function accepting no
arguments and returning a LONG.

4.99 (VgetRGB())
VgetRGB() is available when the '_VDO' cookie contains a value of
0x00030000 or higher.

4.100 (VsetMask())
The opcode for VsetMask() is 92 (0x5C).

4.101 (VsetMode())
Vsetmode() should be VsetMode().  In addition,  a value of -1 for
the mode parameter will return the current mode setting.

5.10 (The IKBD Controller - Kbdvbase())
The  chain of events that occurs when an IKBD event is  generated
is  incorrectly documented.  When an interrupt occurs  on  either
6850 chip (IKBD or MIDI), the following chain of events happen:

1. The  system interrupt handler installed in MFP #4  is  called.
   This routine determines which 6850 caused the interrupt.

2. If  the MIDI 6850 caused the interrupt,  midisys()  is  called
   immediately.  midisys()  checks the MIDI control register  for
   either  an error condition or a data byte.  If a data byte  is
   available,  it  is  placed in the low byte of d0 and  sent  to
   midivec(). If an error occurred, vmiderr() is called.

3. If  the Keyboard 6850 generated the  interrupt,  ikbdsys()  is
   called immediately.  The ikbdsys() handler checks for an error
   condition  or  the availability of a data byte.  If  an  error
   condition  exists,   vkbderr()  is  called.   Otherwise,   the
   ikbdsys()  handler reads data byte(s) as necessary to  form  a
   complete  'packet' depending on what generated  the  interrupt
   (joystick, mouse, or keyboard).

4. If  the  ikbdsys() handler receives a keyboard make  or  break
   code,   it  handles  the  packet  internally.  Otherwise,  the
   address  of  the packet is passed  to  statvec(),  mousevec(),
   clockvec(), or joyvec().

Handler  vectors may be altered by modifying the structure  whose
address  is  returned  by  Kbdvbase() or  by  using  Mfpint()  as
appropriate.

5.22 (Falcon030 Video Modes)
The  Falcon030  is capable of producing a wide variety  of  video
modes.  The  table represents those accessible from  the  Desktop
only.

6.5 (Applications)
The sample code contains an error. Replace the lines:

   if(_AESglobal[0] == -1)
        menu_register( ap_id, menu_title);

with:

   if(_AESglobal[1] == -1)
        menu_register( ap_id, menu_title);

6.30 (The Desktop Window)
Calling wind_get( 0,  WF_WORKXYWH,  ...) will return the size  of
the  desktop  work area minus the menu bar  (not  WF_PREVXYWH  as
stated).

6.37 (_aes)
The  _aes binding should list the arrays _addrin and _addrout  as
being of type '.ds.l', not '.ds.w'.

6.51 (appl_init())
appl_init() may return a value of -1 which indicates that the AES
failed  to initialize the application.  GEM applications may  not
make any AES or VDI calls unless appl_init() succeeds.

6.53 (appl_search())
The  type  parameter  will  be filled in with  the  value  10  to
indicate the current system shell.

6.53 (appl_tplay()/appl_trecord())
These  functions require a patch (available from Atari)  to  work
under TOS 1.0.

6.59 (evnt_button())
evnt_button( 0x101,  0x03,  0x00,  ...  ) may be used to wait for
either  the left or right mouse button.  This method  works  with
evnt_multi() as well.

6.65 (evnt_mesag() - table)
The  AC_OPEN  message contains the menu  identifier  returned  by
menu_register() in msg[4]. msg[3] is unused.

6.73 (form_alert())
Each  line of an alert may be as many as 30 characters long  (not
40 as is stated).

6.99 (menu_attach())
If you remove a menu with menu_bar(), all attachments are cleared
and must be reset upon reenabling the menu.

The MENU structure is missing a member.  It should be defined  as
follows:

   typedef struct _menu
   {
        OBJECT  *mn_tree;
        WORD    mn_menu;
        WORD    mn_item;
        WORD    mn_scroll;
        WORD    mn_keystate;
   } MENU;

mn_keystate  is unused with menu_attach() but is used  to  return
the current keyboard state in menu_popup().

6.124 (rsrc_rcfix())
rsrc_rcfix() is available as of AES version 4.0 and higher.

6.136 (shel_read())
The  last sentence of the 'Parameters' section  should  be:  "The
first BYTE of the command line indicates the length of the string
which actually begins at &tail[1]."

6.138 (shel_write() - table)
shel_write() mode 1 should have a wisgr paramater of 0 to  launch
a  TOS  application  or a wisgr parameter of 1 to  launch  a  GEM
application.

6.145 (wind_create() - table)
The  SMALLER  attribute shows the correct mask but  an  incorrect
bit. The correct bit is 14.

6.156 (wind_update())
The first sentence of page 6.156 should read:

As of AES version 4.0,  you may logically OR a mask of 0x0100  to
either BEG_UPDATE or BEG_MCTRL.

7.4 (VDI Device Identification Numbers - table)
The "MEMORY.SYS" driver should always be assigned to device #61.

7.35 (v_clswk())
v_clswk() closes a physical workstation.

7.60 (v_opnvwk())
v_opnvwk() opens a virtual workstation.

7.113 (vqt_name())
As  of  SpeedoGDOS  version 4.20,  this call will  return  the  a
modified  font index for GDOS bitmap fonts to  avoid  conflicting
with  outline font indexes.  The index will be added to 5000  for
bitmap fonts.

11.13 (Illustration)
The version of Pagestream shown is actually 2.2, not 2.1.

11.15 (The File Menu)
If  a menu item 'Recall' appears,  it should appear  between  the
'Open' command(s) and 'Save' command(s).

11.23 (Application Software)
The '_IDT' cookie does not contain any information that could  be
used  to  determine a nation's currency symbol.  Use  the  '_AKP'
cookie  if  present  (or the OSHEADER if not)  to  determine  the
country for which this version of TOS was compiled (and thus  the
correct symbol).

Applications  (like  entertainment  software)  should  place  any
data/configuration  files in a sub-directory of  the  application
folder.  Only directly reveal those files which the user may have
to launch or manipulate.

B.6 (Memory Map)
The SCC vectors are present on a Mega STe.

B.7 (System Variables)
The availability of system variables depends on the installed TOS
version,  not  the computer as might be implied by the layout  of
the table. The columns next to system variables were shaded based
upon the release of TOS which is most often associated with  that
computer as follows:

   Computer            TOS Version
   ST                  1.00 or 1.04
   Mega ST             1.02
   STe                 1.06
   Mega STe            2.0x
   TT030               3.0x
   Falcon030           4.0x

B.15 (_longframe)
This  system variable is valid on an ST as well (it  will  simply
contain 0).

B.15 (kcl_hook)
This  vector is jumped through with the keycode contained in  the
low byte of d0.

B.16 (0x00E00000)
The operating system ROM's moved to this address as of TOS 1.06.

B.16 (0x00FC0000)
This  block of memory extends to  0x00FEFFFF,  not  FF7FFFF.  The
memory  between  0x00FF0000  and 0xFF7FFF  is  reserved  for  the
operating system.

B.30 (MFP)
The MFP is present on a Falcon, however it is not used for serial
communications.

C.6 (Image Compression)
.IMG files do not always contain a vertical replication count  at
the beginning of every scanline. 

Disclaimer
The text of the articles is identical to the originals like they appeared in old ST NEWS issues. Please take into consideration that the author(s) was (were) a lot younger and less responsible back then. So bad jokes, bad English, youthful arrogance, insults, bravura, over-crediting and tastelessness should be taken with at least a grain of salt. Any contact and/or payment information, as well as deadlines/release dates of any kind should be regarded as outdated. Due to the fact that these pages are not actually contained in an Atari executable here, references to scroll texts, featured demo screens and hidden articles may also be irrelevant.