It is currently Tue Jul 23, 2019 1:59 am

All times are UTC - 7 hours



Forum rules





Post new topic Reply to topic  [ 13 posts ] 
Author Message
PostPosted: Thu Apr 11, 2019 12:13 pm 
Offline

Joined: Sat Oct 06, 2018 10:15 am
Posts: 22
Anyone know which assembler was used by Pan/Anthrox?

I'm looking at his 3dintro source code and was trying to get it to reassemble with my own assembler after modifying some of the directives and I came across the use of the dc.w and dcr.w directives for defining constant words. In the original source the dc.w values are written as high/low byte (big endian) and the dcr.w values are low/high (little endian) in the SMC file. Isn't this reversed since the 65816 is little endian?


Top
 Profile  
 
PostPosted: Thu Apr 11, 2019 2:26 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 4156
Location: A world gone mad
Good thread -- brace for nostaglia!

As you probably recall during the early 90s most of the initial work/code was being done by Amiga folks. Pan was an old C64 and Amiga guy (just like you :-) ). IIRC, he did all his SNES stuff on the Amiga with a cross-assembler.

Below is from a very very old interview with Pan (I can try to pull out the full interview if asked):

Code:
Page 3/9
STC: Which one do you use to program on SNES?
Pan: I'm using an Amiga 4000 with an 68040 processor.
I used to use an A 500 and a laptop 286 to disassemble
until I made my own disassembler on the Amiga.

Close but no cigar.

As for the endian variance of the assembler: Amiga is big endian, 65xxx is little endian. So I suspect the assembler used defaults to big endian and you had to use dcr.w ("r" for "reversed") to get data in little endian. That made me wonder: what assemblers offered the dcr.w pseudo-op?

In one of Pan's old "how to code on the SNES" docs here -- https://github.com/optixx/snes/blob/mas ... /happy.txt -- we find the likely answer: an assembler called SASM for the Amiga:

Code:
Software used to create the Happy New Year demo:

SASM 1.4 by Florian W. Sauer & Stefan M. Schulze;Infernal Byte, INC.
IFF2SNES by Morris of Focus
SINEGEN V1.2  by  ·STARRAY of the MECHANICAL MINDS INC
                  ·CAD MANGO of ITALIAN BAD BOYS
SUPER MAGIC DISASSEMBLER by -Pan- of Anthrox (me! needed for ripping sound)
CLOANTO PERSONAL PAINT (and a disk full of fonts)

Software used to create the Flex demo:

SASM 1.4 by Florian W. Sauer & Stefan M. Schulze;Infernal Byte, INC.
CYBER FONT-EDITOR V1.4  Rel. by Frantic (c) 1991-1992 Sanity Productions
SINEGEN V1.2  by  ·STARRAY of the MECHANICAL MINDS INC
                  ·CAD MANGO of ITALIAN BAD BOYS

Hardware used to create the demos:

Amiga 4000/040
Super ProCom    (the Wildcard was too buggy with the PC-LINK..)
NTSC SNES

I suspect this is the same Florian Sauer given the games/titles/publishers ("Infernal Byte Systems"), and certainly the same pair of guys in this German magazine clipping. This is all further confirmed by a nesdev post from Revenant a few years ago.

So... one may have to scour old Amiga archives to see if one can find a copy of SASM.


Top
 Profile  
 
PostPosted: Thu Apr 11, 2019 4:35 pm 
Offline

Joined: Sat Oct 06, 2018 10:15 am
Posts: 22
koitsu wrote:
So... one may have to scour old Amiga archives to see if one can find a copy of SASM.


I've scoured and failed. If anyone can come up with a copy of SASM or just the manual/instructions I'd like to have a look.


Top
 Profile  
 
PostPosted: Thu Apr 11, 2019 4:43 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 4156
Location: A world gone mad
I'm asking several of my European Amiga buddies if they happen to know where a copy might be.

Otherwise, we might have to go on a "Finding Florian W. Sauer and/or Stefan M. Schulze" quest to see if they happen to have it.


Top
 Profile  
 
PostPosted: Thu Apr 11, 2019 7:29 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 4156
Location: A world gone mad
Swedish Amiga buddies: "looks like SASM was part of a commercial pack of SNES dev tools of some sort. it was available on underground gamer and uploaded to various places a few times, but all links seem to be dead. I saw traces of people getting upset when other people shared it". So it was either a commercial or shareware assembler of some sort. That probably explains why it's so hard to come by, even in 2019.

I'll keep digging/asking around. Hoping I get lucky...


Top
 Profile  
 
PostPosted: Thu Apr 11, 2019 8:18 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 4156
Location: A world gone mad
After much sleuthing on the part of 3 or 4 people, the software has been obtained -- original .adf file and all. It's literally only available on a single place on the Internet (that we can find), and there are a *ton* of wrong turns (there's like 3 or 4 different assemblers called "SASM", or use the term "SASM" to refer to something completely unrelated to the Amiga assembler).


Top
 Profile  
 
PostPosted: Thu Apr 11, 2019 9:48 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 4156
Location: A world gone mad
The ADF file was partially corrupt/messed up, caused by some BBS board person shoving a board NFO advertisement at the start of the disk or some such. Swedish Amiga buddies managed to clean that off. The results are a 99% functional disk, except for a single file, libs/ilbm.library, which is corrupt (they tell me that this file is very common/easy to find). Everything else seems valid. Listing:

Code:
----------------------------- -------- -------- -- -- -- ---------------- -----------------------------------------
 Content list                |  Size  | CRC32  |BA|HR|SQ|      Date      | Information                             |
----------------------------- -------- -------- -- -- -- ---------------- -----------------------------------------
AREXX/                       |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
AREXX/edit.rexx              |     535|C58691D0|OK|OK|OK|1993.05.22 11:53|                                         |
AREXX/readme                 |     125|985EC352|OK|OK|OK|1993.05.22 11:53|                                         |
AREXX/RX                     |     968|2197BC3C|OK|OK|OK|1993.05.22 11:53|                                         |
AREXX/sasmrexx.ced           |   1.044|E47E2C8C|OK|OK|OK|1993.05.22 11:53|                                         |
c/                           |   <DIR>|        |OK|OK|  |1993.05.22 12:05|                                         |
c/Avail                      |     728|6F625A2A|OK|OK|OK|1993.05.22 12:04|                                         |
c/Copy                       |   5.580|44EE4764|OK|OK|OK|1993.05.22 12:04|                                         |
c/Date                       |   1.092|8874837E|OK|OK|OK|1993.05.22 12:04|                                         |
c/Delete                     |   1.972|4CB94C30|OK|OK|OK|1993.05.22 12:05|                                         |
c/Dir                        |   3.440|B0E16DC3|OK|OK|OK|1993.05.22 12:04|                                         |
c/Info                       |   1.980|28FA90C7|OK|OK|OK|1993.05.22 12:04|                                         |
c/List                       |   5.108|97F0A24C|OK|OK|OK|1993.05.22 12:04|                                         |
c/MakeDir                    |     464|91007707|OK|OK|OK|1993.05.22 12:04|                                         |
c/Rename                     |   1.140|4EB10625|OK|OK|OK|1993.05.22 12:04|                                         |
c/Type                       |   2.284|DF4AC612|OK|OK|OK|1993.05.22 11:53|                                         |
c/Version                    |   3.488|F064C464|OK|OK|OK|1993.05.22 12:04|                                         |
demo/                        |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
demo/display                 |  24.028|0A4C5526|OK|OK|OK|1993.05.22 11:53|                                         |
demo/ibs.iff                 |  14.650|E53AE667|OK|OK|OK|1993.05.22 11:53|                                         |
demo/intro.txt               |     726|6C44E273|OK|OK|OK|1993.05.22 11:53|                                         |
devs/                        |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
devs/system-configuration    |     232|F5206E72|OK|OK|OK|1993.05.22 11:53|                                         |
examples/                    |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
examples/conditional.s       |     828|6358BD9C|OK|OK|OK|1993.05.22 11:53|                                         |
examples/cpu.s               |   3.913|E6FADE7F|OK|OK|OK|1993.05.22 11:53|                                         |
examples/ds.s                |     802|BB1277E1|OK|OK|OK|1993.05.22 11:53|                                         |
examples/exp.s               |     897|7323C575|OK|OK|OK|1993.05.22 11:53|                                         |
examples/fwdref.s            |   1.487|001C7C5D|OK|OK|OK|1993.05.22 11:53|                                         |
examples/hdma.s              |     680|AEB70657|OK|OK|OK|1993.05.22 11:53|                                         |
examples/labels.s            |   9.331|9AF6420F|OK|OK|OK|1993.05.22 11:53|                                         |
examples/localmem.s          |     623|3DE49D95|OK|OK|OK|1993.05.22 11:53|                                         |
examples/longstrings.s       |  25.164|870B45B4|OK|OK|OK|1993.05.22 11:53|                                         |
examples/macro.s             |     381|0BD50B53|OK|OK|OK|1993.05.22 11:53|                                         |
examples/recmacro.s          |     673|6CDB3D12|OK|OK|OK|1993.05.22 11:53|                                         |
examples/recursiv.s          |     301|8DB24239|OK|OK|OK|1993.05.22 11:53|                                         |
examples/recursiv2.s         |  46.339|DA2D709C|OK|OK|OK|1993.05.22 11:53|                                         |
examples/rep.s               |   1.228|F561DE59|OK|OK|OK|1993.05.22 11:53|                                         |
examples/rts.lha             |   3.042|7106351E|OK|OK|OK|1993.05.22 11:53|                                         |
examples/set.s               |   1.280|807E88E2|OK|OK|OK|1993.05.22 11:53|                                         |
examples/simplemacro.s       |     434|6D963A43|OK|OK|OK|1993.05.22 11:53|                                         |
examples/strings.s           |   1.113|AF9A93E4|OK|OK|OK|1993.05.22 11:53|                                         |
examples/structure.s         |     576|FE68EA5C|OK|OK|OK|1993.05.22 11:53|                                         |
include/                     |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
include/cartridge.i          |     726|AABD44CE|OK|OK|OK|1993.05.22 11:53|                                         |
include/cpuregs.i            |   1.437|01959A73|OK|OK|OK|1993.05.22 11:53|                                         |
include/ppuregs.i            |   1.690|95A69C62|OK|OK|OK|1993.05.22 11:53|                                         |
include/readme               |      55|8E47AC7A|OK|OK|OK|1993.05.22 11:53|                                         |
include/resethandler.i       |   1.580|A3E2C540|OK|OK|OK|1993.05.22 11:53|                                         |
include/setupregs.i          |   1.879|3196A928|OK|OK|OK|1993.05.22 11:53|                                         |
include/vectors.i            |     642|2C0D6E88|OK|OK|OK|1993.05.22 11:53|                                         |
libs/                        |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
libs/arp.library             |  17.100|6E6926E3|OK|OK|OK|1993.05.22 11:53|                                         |
libs/iff.library             |   2.716|61145C68|OK|OK|OK|1993.05.22 11:53|                                         |
libs/iffparse.library        |   7.964|D03E3616|OK|OK|OK|1993.05.22 11:53|                                         |
libs/ilbm.library            |   6.920|00000000|OK|OK|KO|1993.05.22 11:53|Sect 1413 seq 15 => Data block corrupted |
libs/mathieeedoubbas.library |   5.244|BE651FBD|OK|OK|OK|1993.05.22 11:53|                                         |
order/                       |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
order/bugreport.txt          |   1.150|851E3684|OK|OK|OK|1993.05.22 11:53|                                         |
order/register.txt           |     959|69D403BA|OK|OK|OK|1993.05.22 11:53|                                         |
s/                           |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
s/startup-sequence           |      46|EFC81784|OK|OK|OK|1993.05.22 11:53|                                         |
snesdemo/                    |   <DIR>|        |OK|OK|  |1993.05.22 11:53|                                         |
snesdemo/.project            |      26|F1EB861A|OK|OK|OK|1993.05.22 11:53|                                         |
snesdemo/music.s             |   3.897|FB80D2C5|OK|OK|OK|1993.05.22 11:53|                                         |
snesdemo/music.smc           |  98.816|A084858E|OK|OK|OK|1993.05.22 11:53|                                         |
snesdemo/MUSIC1.BIN          |  32.768|798649EA|OK|OK|OK|1993.05.22 11:53|                                         |
snesdemo/MUSIC2.BIN          |  32.768|06049DED|OK|OK|OK|1993.05.22 11:53|                                         |
snesdemo/readme              |      71|264013C3|OK|OK|OK|1993.05.22 11:53|                                         |
tools/                       |   <DIR>|        |OK|OK|  |1993.05.22 12:06|                                         |
tools/CPU                    |   3.652|0178A18C|OK|OK|OK|1993.05.22 11:53|                                         |
tools/csh                    |  58.100|710335A5|OK|OK|OK|1993.05.22 11:53|                                         |
tools/readme                 |     113|4F92D007|OK|OK|OK|1993.05.22 12:07|                                         |
tools/SetRamsey              |   5.148|A5806B4D|OK|OK|OK|1993.05.22 11:53|                                         |
tools/smc13                  |  20.168|729F2D1D|OK|OK|OK|1993.05.22 11:53|                                         |
tools/snes_reset             |      72|41A6F62E|OK|OK|OK|1993.05.22 12:05|                                         |
tools/user-startup           |     144|D257CE04|OK|OK|OK|1993.05.22 11:53|                                         |
tools/v-snd110.lzh           |  45.337|B57787E0|OK|OK|OK|1993.05.22 11:53|                                         |
tools/wbtoback               |     104|42AFBA20|OK|OK|OK|1993.05.22 11:53|                                         |
tools/WBtoFront              |     104|FF15D961|OK|OK|OK|1993.05.22 11:53|                                         |
evil.smc                     | 131.584|621744E8|OK|OK|OK|1993.05.22 11:53|                                         |
manual.readme                |  26.991|AAF46BD9|OK|OK|OK|1993.05.22 11:53|                                         |
sasm                         |  90.108|F3B34F59|OK|OK|OK|1993.05.22 11:53|                                         |
----------------------------- -------- -------- -- -- -- ---------------- -----------------------------------------

manual.readme is probably going to be most relevant, but a lot of the other macro packs and routines I imagine will come in handy, in case it's all you need.

sasm is the actual binary. I don't have WinUAE set up. It looks like it requires a 68030. It contains SNES register documentation; the register documentation looks akin to what is here except in all uppercase (I've seen this document many times over). There's some SASM HELP command-line syntax bits that I suspect can show that information, plus info on registers, opcodes, etc... I suspect there is an easter egg somewhere relating to the word fuck, where it tells you a silly story with references to the Amiga chips/ICs, as well as custom ones like Agnus etc. -- Edit: the register docs/dump, easter egg, etc. most likely relate to context help when editing 65816 code using "an AREXX-compatible editor like CygnusEd". (This will likely mean more to Amiga folks than me)

tools/ is filled with stuff that doesn't quite make any sense to me; the tools/v-snd110.lzh archive is a transfer utility for the Amiga, for SuperCom/MagiCom copiers. The contained-within file Send110.doc has details, and pinout diagrams for the SuperCom/MagiCom COM port to Amiga LPT port (if you just want to transfer data to the copier), but for reading/dumping you have to wire up an additional 6 wires to the 2nd Amiga joystick port (yes I said joystick). I had no idea this was how people were doing copier file transfers on the Amiga back then (file dated February 1993), I only had familiarity with the PC (and wrote my own transfer utility as well).

The stuff under snesdemo/ should look familiar... it's the ripped music engine/data from RoboCop 3, along with an SMC file (and source) to play it back. Why it's amusing to *me* is this: these are the exact music1.bin + music2.bin files you gave me back in the early 90s when I was doing my SNES docs, to use alongside my old "iNFiNiTY" demo. The source file there is completely different, but... wow... talk about coming full circle!

snesdemo/music.smc is certainly "early homebrew" of sorts. You get a black screen with bsnes-plus 0.73.3a (non-accuracy), but with accuracy you'll get a kind of busted fading in/out blue screen (the visuals change per power-cycle). I assume the source to this is snesdemo/music.s. If that's the case, absolutely no SNES register initialisation is being done so no wonder everything is wrong. The code tinkers with CGRAM/palette and the mosaic register, but obviously isn't working quite right due to the aforementioned, so I'm not sure what the effect is supposed to be exactly. The music playback code itself is actually just a bunch of dc.b statements of 65816 code (cute), but whatever. In my version, I quoted the music playback code as being taken from "ZOOM.ASM" but tweaked/optimised by me. I distantly remember the original ZOOM.ASM code doing something with mosaic, so maybe it was a fixed or different version of this same code.

Finally: evil.smc is quite literally a demo for SASM itself, one I've never seen before. SNES9x doesn't play it correctly (the shrinking/growing diamond is a bunch of gobbledegook), but bsnes-plus (both accuracy and non-accuracy) can. There is something slightly amiss with the music/sound code (a tone plays occasionally/randomly), so it could just be a bug -- but since I don't know how this demo originally behaved/sounded, hard to say -- but it's cool anyway. There's no source to this one, best I can tell. I've attached that here too.


Attachments:
evil.smc.zip [22.42 KiB]
Downloaded 135 times
manual.readme.txt [26.35 KiB]
Downloaded 131 times
Top
 Profile  
 
PostPosted: Thu Apr 11, 2019 10:15 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 4156
Location: A world gone mad
Attachment:
sasm-export.png
sasm-export.png [ 14.08 KiB | Viewed 4866 times ]


Top
 Profile  
 
PostPosted: Thu Apr 11, 2019 10:24 pm 
Offline
User avatar

Joined: Sun Sep 19, 2004 9:28 pm
Posts: 4156
Location: A world gone mad
The assembler turns out to be shareware. Taken from the manual:

Code:
This software package is shareware.  When you find it usfull and you're
working with it a lot, please feel free to send $50.00 to the authors
address.  You will then get free updates, a full version of SASM (including
SPC700 assembly and a MC68000 version...) and a well done, binded TeX
manual.  So don't be a foul and register.  You'll find a registeration
sheet on the disk in the 'order' directory.

Since no programming author can guarantee that his software package is bug
free, you'll use this software package on your own risk.  The authors are
not responsible in any form for anything that will happen during the use of
SASM.  But overall we can say the product runs stable, it's deeply debugged
and tested.  If you find any kind of bug, we would be pleased if you send
us a bugreport in.  You'll find a bugreport sheet also on this disk, again
in the 'order' directory. Please attach sample sourcecode to reproduce the
bug. Every person who'll send a real bug, will be get some piece of my SNES
sourcecodes, just to make sure that i will receive the bug reports.

 Florian W. Sauer
 Hachumerstr. 48
 3205 Bockenem 1
      Germany      <- thats the answer to bad english spelling :)

...

KNOWN BUGS
----------

Yep, there are some, but they are fixed in the full version, just for me to
get some money!  :)

- MACRO calls, MACRO definition and Conditional Assembly MUST NOT start at
  lines with local labels in. That will cause a crash. Simply use a complete
  line for a locallabel with no other information.

- LIST Option included only in the full version.

The disk image in question is exactly that version, so I think distributing it here is OK. Attached is a .zip file of the fixed ADF image mentioned above, as well as my personal Dropbox links to both 1) the .zip file of the ADF, and 2) a .zip file of the extracted disk contents. Remember, libs\ilbm.library is corrupt/bad, so find a working copy elsewhere.


P.S. -- The reason the filename is SASMV14-2 rather than SASMV14 is because the latter was that of the corrupt ADF. Consider -2 to mean "fixed/repaired"; it's not a version or sub-release number or anything.


Attachments:
SASMV14-2.adf.zip [410.99 KiB]
Downloaded 132 times
Top
 Profile  
 
PostPosted: Fri Apr 12, 2019 9:03 am 
Offline

Joined: Sat Oct 06, 2018 10:15 am
Posts: 22
My brother was more of an Amiga fan than I ever was and I do recall him showing me SASM (the name Florian Sauer sounded familiar to me). Now that you've uncovered some new old material, could there possibly be more SNES material to be recovered from the Amiga world? My older SNES days revolved around PC/DOS/Windows but never the Amiga. Even on the Internet at that time I don't remember coming across many Amiga users that were into the SNES, atleast not in North America. You're going to have to delve back into the European demo scene to dig for more!

My history in the demo scene was more as a BBS sysop, PC coding.
https://demozoo.org/productions/23388/ Load up the old DOSBOX for that one.
As well I did a short stint in the ANSI art scene.
https://demozoo.org/groups/22737/ I've got stuff in mist1094

Memories...


Top
 Profile  
 
PostPosted: Fri Apr 12, 2019 9:33 am 
Offline
User avatar

Joined: Fri May 08, 2015 7:17 pm
Posts: 2536
Location: DIGDUG
I imagine RE ing SNES in 1994... before the internet was much of a thing... would have been insanely hard.

It's not like you could buy a book on SNES programming, nor could you take a college course in it.

_________________
nesdoug.com -- blog/tutorial on programming for the NES


Top
 Profile  
 
PostPosted: Fri Apr 12, 2019 2:47 pm 
Offline

Joined: Sat Oct 06, 2018 10:15 am
Posts: 22
koitsu wrote:
The stuff under snesdemo/ should look familiar... it's the ripped music engine/data from RoboCop 3, along with an SMC file (and source) to play it back. Why it's amusing to *me* is this: these are the exact music1.bin + music2.bin files you gave me back in the early 90s when I was doing my SNES docs, to use alongside my old "iNFiNiTY" demo. The source file there is completely different, but... wow... talk about coming full circle!

snesdemo/music.smc is certainly "early homebrew" of sorts. You get a black screen with bsnes-plus 0.73.3a (non-accuracy), but with accuracy you'll get a kind of busted fading in/out blue screen (the visuals change per power-cycle). I assume the source to this is snesdemo/music.s. If that's the case, absolutely no SNES register initialisation is being done so no wonder everything is wrong. The code tinkers with CGRAM/palette and the mosaic register, but obviously isn't working quite right due to the aforementioned, so I'm not sure what the effect is supposed to be exactly. The music playback code itself is actually just a bunch of dc.b statements of 65816 code (cute), but whatever. In my version, I quoted the music playback code as being taken from "ZOOM.ASM" but tweaked/optimised by me. I distantly remember the original ZOOM.ASM code doing something with mosaic, so maybe it was a fixed or different version of this same code.


If you go back and look in "zoom.asm" you'll see the initials FWS, Florian W. Sauer. The zoom.asm was just proof that snesasm could actually produce a working SMC. I think I found the original files not on an Amiga or PC scene source but from an Atari ST BBS! So there could of been SNES coding going on not just in the Amiga or PC scene in the early 90's, but also from the Atari ST scene.

Look here, https://www.mobygames.com/developer/shots/developerId,54939/, both were part of Infernal Byte Systems.


Top
 Profile  
 
PostPosted: Fri Apr 12, 2019 3:34 pm 
Offline

Joined: Sun Mar 19, 2006 9:44 pm
Posts: 998
Location: Japan
Thanks, Koitsu, for tracking down the SASM ADF! You really should play around with an Amiga some more -- I think you might enjoy the experience. :)

_________________
http://www.chrismcovell.com


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 13 posts ] 

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group