+==================================================+ + DR. JIM'S MARVELLOUS MARIO JUKEBOX + +==================================================+ + By Jim Waterman, 11-18 December 2023 for WOOT! + + for all models of 128K Spectrum + +==================================================+ + All music originally composed by + + Koji Kondo, 1985-1988 + +==================================================+ Introductory waffle ------------------- Following the successes of the Grand Gargoyle's Quest (2020) and Fantastic Final Fantasy (2022) editions of the jukeboxes made with the PLAY command in 128 BASIC (which very few of us ever used, let alone learned to do so properly...), Dr. Jim in association with WOOT! presents the third in the series, and the biggest one yet: the Marvellous Mario Jukebox! This brings together all the various background tunes and tuneful sound effects from the three games in the Super Mario Bros. series for the NES. Well... "three of the four", because you might well argue that Super Mario Bros. 2 in Japan was rather different from what we in the West (i.e. Yurop and 'MURICA) were treated to - and that was effectively the world's first ROM hack of the original. When I say "Super Mario Bros. 2" I mean the Western version ("actually, it's a ROM hack of Yume Kojo: Doki Doki Panic..." "...well, ACKSHYUALLY, it was always supposed to be a Mario game in the first place..." and so on, and so on, and so on, ad infinitum, ad nauseam). Either way, YOU KNOW THE THREE GAMES I MEAN. Mario runs and jumps and stomps on walking mushrooms and turtles in one, picks up wandering masked things in the second, and does a bit of both in the third if you think about it. What to do with the program --------------------------- LOAD it in 128K mode, with (Tape) Loader or LOAD "" in 128/+3 BASIC. Don't forget LOAD "t:" first if you've got a +3. If you use 48 BASIC or any 48K Spectrum, you will get a very rude message telling you that you've been a brainlet. Don't blame me for your mistakes. The program will auto-run: press the letter of the tune on the menu to hear it, and press ENTER to scroll round to the next menu. There are four menu pages in all. Also, there are a couple of TOP SECRET EASTER EGG TUNES (...yes, there are Easter eggs in some supermarkets already, before Christmas... no, really!), which you'll most likely have to examine the listing to find, or get lucky. *************************************************************************** * VERY IMPORTANT: * * The one thing the program doesn't specify - because it'd have wrecked * * the screens - is to PRESS *AND HOLD* ENTER to get back to the menu! * *************************************************************************** In other words, hold down ENTER and wait for the point where there's an unavoidable small break in the sound. Don't just press BREAK and start again, because you'll be stuck with an editor that's been smashed to smithereens by the custom character set, and you'll have to POKE 23607,60 without being able to see what you're doing to recover the situation! Again, don't blame me if you screw up. Note also, if there are tunes that are absolutely identical in two games (e.g. the Starman theme in the first and third games), it will only be listed once, with the earlier game. Technical waffle ---------------- All of these soundtracks have been cynically cribbed from some sheet music found on t'interwebnet, which nobody outside of the hardcore end of geekdom even knew about in the days of the NES. So, I should give a lot of credit not just to the great and legendary Koji Kondo - the original composer - but also to the user "XiaoMigros" on MuseScore, who's made piano-suitable versions of all these tunes. See here: https://musescore.com/user/33605901/sets/5168720 And individually: https://musescore.com/user/33605901/scores/6642763 - Super Mario Bros. https://musescore.com/user/33605901/scores/8528330 - Super Mario Bros. 2 https://musescore.com/user/33605901/scores/6831481 - Super Mario Bros. 3 The NES had a very primitive sound chip, with two square waves, a triangular wave and a noise channel - but that's still more than the AY-3-8912 in the 128K Spectrum, which had three square waves and that's your lot. So, by means of a compromise, I've dropped the "drum" soundtrack (i.e. the noise channel) from these re-compositions, except where there's so much empty space that it seemed like the right thing to do to fill the space with a bit of white noise courtesy of the "M" switch. Most of these are just a straightforward use of the sound as-is, with the top line playing at "V15", the second at "V13" and the bass at "V12" - though in some cases it was a better idea to use the "U"/"X"/"W" switches for some rudimentary effects. The only one that really got away was the fading echo effect on the World 7 Map Theme in Super Mario Bros. 3 - using the "W7" waveform it sounded all wrong because there's no way to specify how much to fade in and out each time. Overall, some of these sound better than others - and the later the game is, the more likely it will be that there are deviations from the original. This is the first time I've ever tried to put music code in arrays. Surprisingly, PLAY ignores any spaces at the end of each array line, but sometimes they had to be manually cut out if I had to concatenate two array lines together. For those still trying to learn the use of the PLAY command, you'll either have to look at my other two jukeboxes - which put the PLAY code in visible strings in the listing - or print out the array S$ (of which there are three, one for each game, of different dimensions). Furthermore, in the end this was such a big chungus program that I was forced to use the RAM disc. The three arrays for the music from each game can't all exist in memory at the same time - there's a total of 43,424 bytes so each array has to be loaded in every time it's needed. There is no need for two separate programs for the 128K/+2 and +3/+2A as there is an address PEEKed that marks the difference between the two model classes, and the program will automatically select the line with the correct SAVE ! or SAVE "m:" syntax, as required. DO NOT attempt to edit the SAVE ! lines on a +3/+2A, as the +3 BASIC editor will not recognise the line and it will have to be discarded outright! Don't blame me if... you know the score by now. If anyone noticed - say, by hacking into the loader program - yes, that is a temporary character set held in a REM statement that will never display properly if listed, and a short LDIR routine to jam it into the correct part of memory is held in a second REM. It's a convenient way of getting some elementary machine code in the loader that allows me to PRINT the loading screen in the background and then load some attributes on top of it. The animated loading screen was made with Dave Hughes' "Flashdance", provided as part of WOOT! 2020, then further edited with ZX Paintbrush to get rid of the FLASH bits on the right hand side of the screen that's static and needs some text. Anyway, that's all I've got for today... ...AND THE MASTER SWORD SLEEPS... FOREVER! ...wait... wrong game. Oh well. Go away now.