Steven Seagal's Atari ST Web Site



"Belly of the BeaST"

  The Boiler is Steem's impressive debugger. This page showcases improvements made on it in the SSE version. This isn't a manual for the Boiler.

It is available here.

Some features are buggy, there's not all what you may want, but I develop this for my own needs.

The Boiler build is also called the "debug build", but it's meant to peer into
Atari ST programs, not Steem itself. It's not a "debug build" like you have for
example in Visual C++. As far as the compiler is concerned, it is a "release
It is available only in Windows.
It makes very good use of all Windows GUI possibilities. This is the work of
Steem authors, the SSE version merely adds on it.
There never was much documentation for the Boiler. People using it are supposed
to be familiar with debuggers and with the ST.



  Copy code in clipboard

In an instruction or memory browser, if you right click on the 'Dump->' button,
500 bytes of ST RAM are copied or disassembled into the clipboard. Then you can
paste wherever you want. This feature uses some code found on the internet.

The log has been neglected in the SSE version. For example, border effects are
not logged. It is recommended to suspend logging (I wonder what machine the
Steem authors had!), or to carefully select your options.


However an alternative 'Trace' system is used in the SSE version.
You can command the output by selecting log options.
This parallel system was developed because I'm more familiar with it and
I wanted it to work in the 'non-boiler', debug build of Visual C++, in
the IDE output window or a file at choice.
Each time you quit the boiler, the traces are available in the file
It is already well developed for: crash, FDC, IKBD, IO and init somewhat.
'Suspend logging' won't suspend the traces. This is commanded by option
'Output TRACE to file'.

OSD Info

I found it useful for my own needs, when some events happen a short string
is displayed on the top left part of the screen, for example:

Trace CPU is in trace mode (indicating some code protection)
Write SDP STE-only video counter write used

The info so displayed is hardcoded. The macro TRACE_OSD is used.


A message box will appear when an "assert" fails during execution, with
the usual options. 'Abort' can spare you a crash, 'Ignore' will ignore all
subsequent asserts (they will still be written in the trace file).

Shifter tricks

Log section Video.
For each VBL, the eventual "shifter tricks" are summarised and traced. The mask,
inspired by Hatari, currently is (changed in v3.5.3):

#define TRICK_LINE_PLUS_26 0x001
#define TRICK_LINE_PLUS_2 0x02
#define TRICK_LINE_MINUS_106 0x04
#define TRICK_LINE_MINUS_2 0x08
#define TRICK_LINE_PLUS_44 0x10
#define TRICK_4BIT_SCROLL 0x20
#define TRICK_BLACK_LINE 0x80
#define TRICK_TOP_OVERSCAN 0x100
#define TRICK_LINE_PLUS_20 0x800
#define TRICK_0BYTE_LINE 0x1000
#define TRICK_STABILISER 0x2000
#define TRICK_WRITE_SDP 0x4000
#define TRICK_WRITE_SDP_POST_DE 0x8000
#define TRICK_UNSTABLE 0x10000
#define TRICK_LINE_PLUS_24 0x20000
#define TRICK_NEO 0x40000//tests

Plus & minus mean bytes more or less fetched in the video RAM.
Eg 'left off' = 'line +26'

Each time you stop emulation, a file 'shifter_tricks.txt' is issued, giving a
report of all shifter events (palette, sync, shift mode, blitter) of the last
frame with their timing. This helped me a lot.
It's always the same file used. You don't need to quit the boiler.
What info is displayed is hardcoded and commanded by switches in SSE.h:
#define SS_SHIFTER_EVENTS // recording all shifter events in a frame
//#define SS_SHIFTER_EVENTS_PAL // also for palette
//#define SS_SHIFTER_EVENTS_READ_SDP // also for read SDP
#define SS_SHIFTER_EVENTS_BYTES // scanline length
#define SS_SHIFTER_EVENTS_ON_STOP // each time we stop emulation
#define SS_SHIFTER_EVENTS_TRICKS // "bordermask"

Changes in v3.5

- removed DIV & Pasti log options (use FDC instead of Pasti),
replaced with some new options
- some log options also work for TRACE.txt
The best developed are Crash, FDC, IKBD
New ones have been added:
Floppy data dumps all DMA transfers
Image info
IPF sector info
This needs to be reorganised
- 6301 trace now common with Steem (TRACE.txt)
- PSG filter option didn't work in Boiler
- improved message box (abort retry ignore)
- fixed autosave shifter tricks


- debug info as OSD - not optional, it's #define SS_OSD_DEBUG_MESSAGE,
and is commanded by TRACE_OSD(...) (printf format)
- removed shortcut for 'save shifter tricks report' as this is done on
each stop.
- disk track info gives command in slow mode

- marginal improvements



- New SSE menu title

- Display current interrupt (yeah!)

It tries to figure out which interrupt if any is being
executed when the Boiler is stopped.
MAIN means the CPU isn't executing an interrupt
OVF means 'Overflow', interrupts keep coming without corresponding
RTE. This happens with a lot of programs that directly manipulate the
stack. Even the TOS does it on bus error.
That's why Steem's original interrupt_depth variables quickly goes
all the way.
For this reason, a click on the control will reset it if in
overflow. If not, it will show previous interrupt. So much power!
We try to guess interrupt when "overflow", there's a '?' after the
name of the interrupt in that case.


- Keep CPU TRACE on if log is suspended (plus #define for not stopping the log anyway)

- OSD mentions 60hz frames

- Wipe TRACE.txt on option "Wipe Logfile", also works with "Wipe On Reset"

- More useful reporting of Timer B and reverse video active timers

- "shifter_tricks": better res, sync values at start of frame

- "shifter_tricks": report video counter at start of every scanline
with "fetching"

- remove useless 'a' and 'd' parameters (PSG sound filter)

- big register letters (question of taste)

- "other SP" renamed A7#2 and moved

- SR's hex value also given (before, only bits)

- Boiler mouse wheel scrolling (yeah!)
Long requested I think, the mouse wheel will now scroll the memory and
instruction browsers. Shift or left button command 'scroll page'.
As an unexpected bonus, it also works in the main Boiler.

- New 'Vectors' browser

- New Shifter browser

- New DMA sound browser

- New options to mute PSG channels

- Display shifter draw pointer in timings page

- Display shift mode and sync in timings page

- New option 'Run to RTS'

- Shortcut for blazing Step Over ("fast forward")

- New option 'Dump 6301 RAM'

- New option '68030 stack frame'. It's interesting to check if
programs are compatible with Falcon or TT computers. From Petari.

- New browser 6301 true emu



Coordinates and video address on right click

  But what we compute now, the (approximate) video RAM address of the pixel you click!  


The mouse is at ST video memory address $F9FFE, scan line 51 pixel 63

  It's even supposed to work when the left border has been removed. It won't take all shifter tricks into account however.  
  Let's see it in action on Cool STE, where the screen is made up of 2 distinct zones, a picture in low res and a scroller in med res. The STE's ability to set the video pointer on the fly is used (contrary to The Pawn etc.).  


A beast

  Here are the computed addresses, above the scroller, on the scroller, below the scroller:  
  To implement the feature I was a bit lazy and just recorded the pointer on each scanline. But for such a case, it's the only sane way, it's not possible to compute from the start of frame without some other sort of recording.  

Monitor: specify value



"Stop only if greater than $0FFF"


For this to work switch the option on in the SSE menu.

  When the option is checked and you set a watch Steem will look
at the 'find' box and interpret the string there as a condition.
You must set the condition first.
Only the last condition you typed in any memory browser counts:
internally, there's only room for one by design.
One comparison character (=,!,<,>) is required.
Value must be a WORD in hexadecimal, without $
You may for example type >0FFF, then click in the monitor column to
add the watch.

NOTE: I've debugged this feature but there may be more trouble, please report and be specific.


Monitor: address range



"Stop if write in the range $8-$2C"

  When this is checked, the first two watches will be considered as the limits of a range to check.  

Control Mask Browser


  Click there to open the Control Mask Browser, which is a fake memory browser. The addresses don't matter. The data at those addresses are bit fields where you can make choices by just clicking in the field.


If for example, you check 'bytes', the TRACE file will contain all bytes read or written by the floppy drive.
If you check trace, you will know each time the CPU is set in trace mode. Etc. Can't describe it all.


-Fixes in 'monitor for value', should work better for .L writes now
-Instruction browsers called "Instructions", not "Memory"
-shifter_tricks now called FrameReport because it may be more than
just the Shifter
-internal changes, making "Shifter events" "frame events", same reason
-Boiler fake IO: taking advantage of the impressive Boiler GUI to
control some internal control masks as if they were part of the IO map.
[As presented above]
This will maximize control while minimising code.
Option SSE/Control mask browser
This will control:
Frame Report (former shifter events)
Some TRACE (log section may still apply)
-transfer mute sound options to fake io
-transfer some log options to fake io
-User can choose a scanline to report events each frame,
Type value on left of 'Go' button and click button once.
OSD will also show shifter tricks for that line.
-Timers: show when timer B is used as line counter or not
-Display double register A7 as USP and SSP
-Display "other" A7 stack
Handy feature, in the SSE menu you may decide which version
of A7=SP, USP or SSP will be displayed. As usual USP or SSP depends
on supervisor bit.
-Improved floppy traces


-Boiler bugfix 'Control mask browser' keeps its name at reload

-Minor changes

- More options in control mask browser
- Some debugging of IO R/W detection
- Fix crash if drag icon on boiler icon
- CPU Trace refactoring: "step" and "breakpoint" will work on the instruction being traced
- TRACE.txt: date and time of each runtime
-Mute sound: PSG noise, envelope; DMA
-Far user-friendlier IO trace, you must also select chips you want
to trace (MMU, MFP, Floppy, Shifter...) -> no more bloated TRACE
-Better CPU trace (with registers and stack if you want)
-Pseudo-stack based on interception of push/pop
It's useful to trace only PC
-Names of internal ST/TOS variables in low memory
-Show 'vectors' in the 'reg' column of memory browsers/boiler
eg: the address where the VBI routine starts



-BLiT mentioned in instruction history
-flush TRACE.txt on stop
-do BLiT in step by step mode (dangerous fix?)
-Pseudo stack moved to SSE menu title
-Control mask browser: MFM traces
-Control mask browser: CPU traces cycles and value of memory held in
address registers
-Remove 68030 stack frame, we emulate STF, STE, not the rest

-Monitor/log also in TRACE.txt + some debugging

-bugfix FDC IRQ trace was deactivated
-better separation FDC/image info trace

-new option to output a frame report at once
-new interrupt browsers (caution! can crash if invalid address)
-timings in history list

-auto save frame report when using 'Go' to line

-Improved blit mode behaviour when tracing
-Don't redraw monochrome screen on stop/trace (Monoscreen, Time Slices...)

-New menu Log2 for still more options
-Restored log for shift and sync mode changes
-bugfix wrong CPU timings reported when "unrounding" happened
-bugfix spurious ST crash on logging monitored IO address (long standing, 3.2!)
-bugfix blit mode "better trace" broke Lethal Xcess
-trap logging in TRACE.txt (as in steem.log)
-Drive OSD: no image type anymore




Games (1) (2)

Demos (1) (2) (3) (4)