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
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'.
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).
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_OVERSCAN_MED_RES 0x40
#define TRICK_BLACK_LINE 0x80
#define TRICK_TOP_OVERSCAN 0x100
#define TRICK_BOTTOM_OVERSCAN 0x200
#define TRICK_BOTTOM_OVERSCAN_60HZ 0x400
#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
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
- disk track info gives command in slow mode
- marginal improvements
- New SSE menu title
- Display current interrupt (yeah!)
- Keep CPU TRACE on if log is suspended (plus #define for not
stopping the log anyway)
- More useful reporting of Timer B and reverse video active timers
better res, sync values at start of frame
- New Shifter browser
- New DMA sound
- New option 'Dump 6301 RAM'
- New option '68030 stack frame'. It's
interesting to check if
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.).|
|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.
-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
-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
-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
Games (1) (2)
Demos (1) (2) (3) (4)