Steven Seagal's Atari ST Web Site

Steem

 

"Knock Off"

  Coming soon! Features, fixes, hacks, etc. for Steem SSE 3.6.0.

Because of the main 'Drive Sound' feature, enhancements that were planned for v3.5.5 are now planned for v3.6.0 instead. There will be no v3.5.5. This explains the repetition of some brags on this page.

RELEASE PLANNED 28/02/2014, 2 YEARS AFTER V3.3.0

 

 
     
 



 

 
     
 

Drive Sound

 
 

 
  This is Steem 3.6's main new feature.
Floppy drive sound emulation was requested before, but I thought, why not
leave it to SainT?
Recently I realised that the Amiga emulator UAE also offers this feature,
it's less exclusive now, and it's still a heavy request.
Delivered.
Problem: it's hard to find correct Atari ST drive samples that weren't
ripped from SainT.
If you can please sample some more realistic Atari sounds and upload
them at atari-forum. Please don't rip SainT's samples.

Technical notes: with DirectSound, it's in fact rather easy, you just play
the sounds when necessary, you don't need to mix them with the PSG (sound
circuit) sound emulation, it's done by the system. The sounds are WAV files
grouped in a new directory, DriveSound, that should be copied into Steem's
main directory.

I don't know how easy or hard that would be in Linux (the feature is Windows-only
for the moment).

Current samples are from an Epson SMD-480L, sampled by Stefan jL.

More about the Unix build here.

 
     
 

P.S.G. emulation

 
  P.S.G. stands for Programmable Sound Generator, it is the ridiculous Yamaha
YM-2149 equipping the Atari ST, the laughing stock of Amiga fanboys.
Though... it has a distinctive sound, after all the 8bit DACs of the Amiga are
nothing special today the day! You have better in your PC. But you (probably)
have no YM-2149.
 
 

 
     
     
  There are now 3 P.S.G. mods in Steem SSE:  
 

 
     
  'P.S.G.' changes the tables used for both "envelope" and "volume".
I don't know where the original Steem values come from, but the
new ones are based on Yamaha doc. The difference isn't dramatic,
it's a bit louder overall.

'Samples' uses another table, done by ljbk, based on actual measurements,
when it's reckoned that samples are being played (check on the "mixer").
Many samples will sound better. Not all, but it may be due to other
emulation issues.

The table can't be used (in Steem) when chip music is mixed with samples, like
in Goldrunner. You don't need to uncheck.

'Filter' was already there before, it's a different, more open, low-pass
filter when sound option 'Monitor Speaker' is selected.
 
     
 

 
 

ST NICCC: STF sound improved!

 
     
 

 
 

Huh! Rha! You want the Barbarian to scream louder!

 
     
     
 

Crazy Cars 2

 
 

 
  The pasti version of this frustrating game also named F40 Pursuit Simulator was the basis for some improvements in Steem SSE: CPU exceptions, 6301 true emu. It worked in v3.3, 3.4, I broke compatibility in v3.5, and restored it in v3.6. A crazy case!

Here's a hint you may not know ( ;) ): press F7 for keyboard/joystick control.

 
 

Download Crazy Cars 2

 
     
     
 

The World is My Oyster STF

 
 

 
  This screen was incorrect in previous versions of Steem because the program sets both bit0 and bit1 (writing '3') of the shift mode (resolution) register. The question was, which one counts? If it's bit0 then the ST will be in medium resolution, if it's bit1 then it will be in high resolution. Now thanks to this demo we know that only bit1 is tested by the GLUE to decide when 'DE' (fetching video RAM) starts.  
 

Download The World is my Oyster

 
     
 

Panic STF

 
 

 
  Another technical demo by LJBK, this worked in Steem 3.2 (though it could lose vertical overscan), and was broken since.

Don't panic, we "fixed" two problems in v3.6.0: "line +2" idiosyncrasies that aren't quite understood yet, and some trouble in the MFP timers.

 
 

Dowload Panic

 
     
 

UMD 8730

 
 

 
  Wondering why this mega music demo didn't work in STF mode I had to add a lot of compile switches in the source to finally find the problem: when the palette values are read, there's some noise in unused bits of the STF.

The bit pattern of a palette value as read on a STF is like this:

0 0 0 0 ? X X X ? X X X ? X X X

instead of:

0 0 0 0 0 X X X 0 X X X 0 X X X

'?' may be 1 or 0, you never know, though it should be linked to the last value of the data bus.

This was already suspected but one was wondering what was the use of emulating this.

Since Steem v3.6.0, we know!

This also changes many "decrunching" screens that were incorrectly rendered as monochrome.

 
 

Download UMD 8730 at atari-mania (9 disks)  pouet (hd version in comments)

 
     
 

Japtro 100%

 
 

 
  The virtual ST would crash at this screen in Steem 3.5 because of some bug in the prefetch timing overhaul. I present no excuses for that, it was clear that such a big change would cause some subtle bugs. Here it's a difference of 2 cycles in instruction CMPI.L #,Dn, found thanks to "powerful prefetch debugging switches".  
 

 
  She's sad but I'm happy! Now it's 100%, STF and STE. While testing this I realised that disk 4 of the demo has some wrong disk images floating around, including in the version offered here up to now, which I think was from the Chaos Engine CD. It's been fixed now (version from pouet was OK).

A note on the demo: it starts very impressive, but the numerous scrolling pics quickly get boring.

 
 

Download Japtro

 
     
 

Second Reality 2013

 
 

 
  Argh! The Timer D hack that has Audio Artistic Demo working was a bit too brutal and would make the music of this fine demo sound worse than intended.  
     
 

Hackabounds Demo (STF WS1)

 
 

 
  This demo revealed 3 problems.

First there was an "internal" bug in Steem when the instruction STOP is used in trace mode. This caused the emulator to skip an instruction, and the instruction in this case would have cleared one register (A0). Because it is skipped, the register would contain data instead of 0 and this data would be used to fill ("clean") the video RAM. You ended up with trash in a repetitive pattern, the content of register A0:

 
 

 
  Next the instructions scroller would shift all the time. It was caused by another CPU timing issue appearing after the prefetch timing overhaul, this time in MOVEM M->R .L. The situation is still not really satisfactory for the MOVEM instructions, prefetch timings aren't where they should be, in order not to break running programs.  
  The main menu will display fine in Wake State mode 1 in current version.  
 

Download Hackabonds Demo

 
     
 

Ishar3 cracktro

 
 

 
  Argh! This intro was broken in v3.5 because of a CPU timing change, that has now been corrected, in the -(A) .W effective address type. On the ST, because of the video RAM being part of system RAM, the main bus is shared with the video circuit, and when the CPU can't access the RAM it must wait. In emulation, we generally round the timing up to a multiple of four. But according to instruction sequence, sometimes you must round, sometimes you mustn't. This should be handled somehow.

In Hatari they use specific pairing functions and tables.

In Steem this is done by 2 macros, INSTRUCTION_TIME() and INSTRUCTION_TIME_ROUND(). Apparently this works as well, but it needs some tuning too. It is not excluded that one day we change the system. Of course it's no little matter.
 
     
  Argh! The remaining part of that mod, the .L version, broke Fullparts (HMD), So we fall back on the specific fixes on ADDL.L -(An),D and ADDA.L -(An),A so that Cernit Trandafir and Summer Delights still work.  
     
 

Board and Sphere (STF WU2)

 
 

 
  Part of the Ventura megademo, this is another case of destabilised Shifter. Apparently there was a bug in the code and programmers adapted the picture to the shift induced by wrong stabilisation. This wouldn't work on STE, that's why you had to press F1. Not sure it would work on all STF either. In Steem 3.6 it will display OK in WU2 mode.

Emulation is still pragmatic (hacky), but the concept used is general: when the Shifter contains X (1-3) extra words (16bit data) in its registers, there are some effects on the display, that is pixel and plane shifts. This is the same concept for cases like this one, Overdrive/Dragon, Death of the Left Border, Omega Full Overscan, and the very different "Bee" demos.

 
 

Download Ventura

 
     
 

XMAS-2004 (STE)

 
 

 
  This demo would suddenly stop in Steem because of an unexpected bug in... Microwire (volume & frequency control) emulation.

When this was fixed, there remained a confusing bad screen caused by conditions we're still examining: STE HSCROLL, writing the video counter, etc.

This is "fixed" in v3.6 thanks to hacks. If option 'Hacks' isn't checked that's what you get:

 
 

 
  In fact both fixes are hacks.  
 

Download XMAS 2004

 
     
 

ReDMCSB (Megamax C project)

 
 

 
  I think I fixed a nasty bug in Steem's handling of GEMDOS and hard drive emulation, that is based on command interception. Apparently the command PTerm, that ends a TOS program on the ST, could be intercepted and executed several times in a row in Steem, prematurely closing programs that should be running on. This happened while trying to compile the fantastic reverse engineering project Back to the source: ReDMCSB. The author advised one to use Hatari because it would hang in Steem. No more (v3.6).

The hanging happened at random because it depended on the Timer C and when you started the script.

The change is both simple and dangerous, so if only for that the "beta" status is warranted for a few more weeks.

Notice the new OSD debug info showing the current GEMDOS command if the appropriate Boiler log section is selected.
 
     
 

Super Monaco Grand Prix

 
 

 
  Argh! The game as available on this MSA image has a strange loading procedure that revealed no less than two
bugs in "accurate" floppy disk emulation, bogus "lost data" flag and bogus IRQ with command $D8.
Broken in v3.5.1, fixed in v3.6.0.
 
     
 

Jumping Jackson

 
 

 
  Argh! A stupid bug in floppy drive emulation broke Jumping Jackson MCA
in v3.5.3. Fixed v3.6.0.
While I was looking at this I also finally fixed Automation 239, with the
same game. AFAIK only Steem runs this version, and sometimes it fails.

Update: 6301
The DISABLE MOUSE command causes a last reading of the mouse, which is
sent by the 6301 to the CPU. Without emulating that, the game switches to
a buggy black screen.
The hack I devised for 6301 emulation in this game was annoying because
it implied having the powerful Steem IKBD command analyser run also in
the normal build. I looked again at the problem and found that it was
a matter of having '1' instead of '0' to signal mouse movements.
It will now run without a hack.
 

 
     
 

3615GEN4 HMD Giga

 
 

 
  Argh! This was unwittingly fixed in v3.5.1 and broken in v3.5.3, repaired in v3.6.0.
(the day before release!)
I wondered if Hatari's HBL "jitter" was better than Steem's "wobble", apparently
it is.
STF, WS1
 
 

Download 36.15 Gen4 by HMD

 
     
     
     
 

Option 256KB (Atari 260ST)

 
 

 
  Hey come on, it's just Neochrome! Those Atari ST computers with only 256K existed, they were called 260ST. Normally they also had no TOS in ROM, you had to use a disk, but most were later equipped with TOS roms.

The minimal ROM of the 260 ST is also emulated in Steem since long (I discovered only recently), and in v 3.6 an option to reduce the memory to 256K has been added. Useless? Maybe.

 
     
 

Option 2.5MB

 
 

 
  Same thing, those existed. Especially some 520STE have been upgraded that way: you leave the 512K memory chip where it is and add one 2MB chip.  
     
 

Option SF314/SF354

 
 

 

 
  The SF354 floppy drive of Atari was a single sided one, sold with the first ST computers. It was later superseded by the SF314 double sided drive. Strangely the inferior number is for the superior drive. Those references are valid for external drives anyway.  
     
 

 
     
  I already thought of adding this, but wondered what's the point? Obviously there's one as this has also been requested. And I had just added the option '256K', that is also a downgrade. Why not then?  
     
 

 
     
  Correct emulation! Hmm, reminds me of some woes while adding IPF support to Steem. There are two difficulties in adding this dangerous option to Steem. First, adding the contextual menu in the disk manager when you right click on a drive icon. So it is possible to choose which drive (A or B) will be single sided. Second, conceptually I had called the drive variables SF314 already.  
     
 

 
 

This new option should work with regular ST, MSA, DIM files and with IPF files, and Pasti (STX) if option Hacks is checked (different technique is used for the latter).

It's up to the player to be careful with this option. Because it may be confusing, the option isn't saved.

 
     
 

Option Stop motor

 
  Another Disk manager context option.
This is a hack to stop the motor of some drive if due to a bug in the ST program
or, to be fair, in Steem, it keeps spinning after loading.
 
     
 

 
     
     
     
 

Option 6301: new philosophy

 
  Both the ACIA and the IKBD (also called 6301) are chips involved in keyboard,
mouse and joystick control.

No ACIA/IKBD SSE mods if option '6301' not checked

This is because timings were wrong but the system was somehow adjusted
to them. We can fix some parts of fake ikbd emulation but then some
programs will be reported as not working anymore.

So now, when 6301 option isn't checked, you should get exactly the
same keyboard emulation as in v3.2.
When this option is checked, ACIA emulation is changed, for the
IKBD as well as for MIDI.

This also has the advantage of streamlining the source.
Old code parts have been removed for readability (adding yet more
switches to this mess is almost impossible).

 
     
 

Boiler: Debugger

WARNING!WARNING!WARNING! Competing teams please don't look at this, it's not good for you! WARNING!WARNING!WARNING!

 
     
  Many improvements of v3.6 concern the "boiler", that is the special Steem build that's used to debug or probe ST programs.  
     
 

XY on right click

 
 

 
 

It happened more than once that I was wondering, which line is this? I even had a parameter in the source to select which line not to display, so that identifying it was easier. Now it's even easier. When emulation isn't running, a simple right click in the window will display the guessed coordinates in the status zone.

We assume double height, not max display, borders on, we don't compute this.

 
     
 

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

 
     
  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.  
     
 

Other boiler 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")

- SSE options are persistent

- New option 'Monitor: specific value'
 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.

- New option 'Monitor: address range'
When this is checked, the first two watches (one pair for Read, one
pair for Write) will be considered as the limits of a range to
check.

- 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
 

 
 

Also check the new Boiler page

 
     
 

Code Structure

 
 

 
  This is more boring but in the long term necessary and this is the main reason why the release of v3.6 is delayed a bit.

This time we want a proper C++ structure for the project, working with all supported compilers (and also in Unix) and without breaking anything.

In the screenshot above, the "modules" configurations build the original Steem way, while the other ones are more conform to a classic C++ structure. It's a work in progress.

Notes: there a 0 warnings because warnings have been disabled. This is another TODO. key_table.cpp is an accident.

Update: give up on that, it will be completed one day but not for v3.6.0. At least the way chosen allows one to be progressive.

 
     
     
     
 

Other improvements

 
  - restart DirectX when drawing memory lost: no message box
- select Mega ST4 -> enable hard disk; leaving Mega ST4 mode, preselect colour display
- More intuitive sound volume sliders (logarithmic scale)
- drive led: disable when pasti mode and drive empty: ACSI HDD images
- motor noise: disable when pasti mode and drive empty: ACSI HDD images
- disable "fast STE TOS boot" hack when pasti is on: ACSI HDD images
   It's a bit gross but we lack pasti documentation to do better.
- VSync, Triple buffer: try to avoid crash when switching apps using
DirectX


 
 
     
 

Other Bugfixes

 
  - hard disk handling by pasti when option 'Pasti only for STX' checked
- bugfix DirectX rebuild "surface" when lost (eg after long delay)
- bugfix status bar centred when going to/from fullscreen mode
- bugfix line+20 in large display mode, option 'Hacks': pcsv62im
- bugfix no sound live when recording sound
- ACIA fix: Grumbler
- Shifter tricks bugfix: Pete Mega Four #1
- MFP bugfix: Sinfull Sinuses (just the crash - see v3.52-3.54, worked before)
- hard drive: correct date & time (from Petari)
- Bugfix: bogus value added to PSG emulation when no DMA sound


 
 
     
     
     

 

Previous screen

Games

Demos (1) (2) (3)

Apps

Steem

 

 

 

-