Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > Adding SID Music to Compiled Basic
2019-09-04 16:06
MrElijahGardner
Account closed

Registered: Jul 2019
Posts: 7
Adding SID Music to Compiled Basic

I'm working on a new game. Here is an older video clip as the game has progressed quite a bit since then.
https://youtube.com/watch?v=o9wBsf8FM88

It is written in basic and then compiled. How can I go about adding Sid Music to it? Any suggestions?

Thanks in Advance
2019-09-04 16:34
TheRyk

Registered: Mar 2009
Posts: 2067
If you want to do the music in BASIC too, I suggest playing around with the examples on C64-Demo Disk. Doing music in BASIC (and sometimes listening even more) is quite painful, though ^^

But as you compile it anyway, it makes much more sense to do your music in whatever tracker you like and build a mini ML routine that initializes the .SID file and sets up an IRQ ensuring stable playing once per frame. Make sure that neither that little ML routine nor your music data collides with RAM used by main code (which depends on what compiler you use). Normally $C000 to $CFFF is the easiest/safest area for such ML code assessed by BASIC programmes. Also don't f--k up zero page registers which are used as BASIC vectors (or make sure to save and restore those ZP regs in case they are clobbered).
2019-09-04 16:47
Count Zero

Registered: Jan 2003
Posts: 1821
If you plan on composing the music yourself - Soundmonitor V1.0 (or one of the Rockmonitor versions) - sys49152 and you are ready to go :)

Just sayin' as Soundmonitor was likely done with BASIC in mind. Other composers surely outperform Soundmonitor and it's horrible raster time usage :)
2019-09-04 17:09
TheRyk

Registered: Mar 2009
Posts: 2067
sound monitor also wastes a lot of RAM, 12kB is pretty normal, even for shorter tunes, modern trackers waste normally less than one third, and Sound Mon range is normally $a000-$cfff, especially the RAM from $a000-$bfff can be used way more efficiently, e.g. for gfx data.

but it's true, those files are pretty easy to handle from BASIC, and (no matter how bulky, complicated and antiquated they are from today's perspective) there's a bunch of old tunes to pick from some of which are quite cool. (iAN will disagree hehe)
2019-09-04 17:17
MrElijahGardner
Account closed

Registered: Jul 2019
Posts: 7
I already have a Sid file

The raw SID data, which loads to 4096 ($1000)
To initialise the tune, you JSR $1000 (or SYS 4096)
To play once per frame, you JSR $1003 (SYS 4099)

My compiled program starts at 8200.

My next two questions are what is the best way to load the SID program into memory. Data Statements?

Then how to do that once per frame in compiled BASIC
2019-09-04 17:22
TheRyk

Registered: Mar 2009
Posts: 2067
We need to know which compiler you use.
With Blitz!/Austro etc. $1000 is an area you can't use easily.
You'd need to relocate your music somewhere higher than $9fff, e.g. by using Sidreloc V1.0

Basic Boss is a different story, there you can manipulate range of BASIC memory, i.e. set basic start higher, thus $1000 would be possible area for music.
2019-09-04 17:23
MrElijahGardner
Account closed

Registered: Jul 2019
Posts: 7
I'm using Basic 64 It will let me change the program start memory
2019-09-04 17:38
TheRyk

Registered: Mar 2009
Posts: 2067
Doing sth exactly once a frame in BASIC (even compiled) is tricky at least. That's why some mini ML part called only once via SYS and then setting up an IRQ would help.

An uncompiled example how to load ML code (and a .SID-file is nothing but ML code plus data) into areas outside of BASIC memory can be found here:
http://c64games.de/phpseiten/spieledetail.php?filnummer=336
Check out the very first 2 blocks file in the first disk image of the ZIP
It does nothing but loading 5 files ML, Charset ("Zeichen"), Sprites and Sounds and title screen into RAM higher than $9FFF and finally loading the MAIN code ("MF-PRG")
2019-09-04 18:11
MrElijahGardner
Account closed

Registered: Jul 2019
Posts: 7
Thanks for the example of loading the multiple files. That is easy I can handle that no problem.

My assembly skills are garbage. I know there isnt much to doing an IRQ but not really sure where to start. Is there an example you can point me to.

It would be really awesome if there was an easy way just to poke the IRQ routine into memory to then call the play once per frame part.
2019-09-04 18:32
TWW

Registered: Jul 2009
Posts: 541
Well documented IRQ routine:

https://codebase64.org/doku.php?id=base:introduction_to_raster_..

EDIT: Use 0315/0315 instead of fffe/ffff and #$37 insted of #$35 for setting $01.
2019-09-04 19:26
MrElijahGardner
Account closed

Registered: Jul 2019
Posts: 7
#$35 for setting $01? This is because we don't want to turn the rom and kernal off correct? I'm not sure why we even need to mess with this address?

Use 0315/0315 instead of fffe/ffff? What is the address of interrupt code referring too?

I wasn't kidding when I said assembly isn't one of my strong point. I'm going to keep plugging away. All the help so far has been great.
 
... 5 posts hidden. Click here to view all posts....
 
Previous - 1 | 2 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
zscs
Alakran_64
Freeze/Blazon
GI-Joe/MYD!
Jetboy/Elysium
Mike
Guests online: 148
Top Demos
1 Next Level  (9.8)
2 Mojo  (9.7)
3 Coma Light 13  (9.7)
4 Edge of Disgrace  (9.6)
5 Comaland 100%  (9.6)
6 No Bounds  (9.6)
7 Uncensored  (9.6)
8 Wonderland XIV  (9.6)
9 Bromance  (9.6)
10 Memento Mori  (9.6)
Top onefile Demos
1 It's More Fun to Com..  (9.7)
2 Party Elk 2  (9.7)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.5)
5 Rainbow Connection  (9.5)
6 TRSAC, Gabber & Pebe..  (9.5)
7 Onscreen 5k  (9.5)
8 Wafer Demo  (9.5)
9 Dawnfall V1.1  (9.5)
10 Quadrants  (9.5)
Top Groups
1 Oxyron  (9.3)
2 Nostalgia  (9.3)
3 Booze Design  (9.3)
4 Censor Design  (9.3)
5 Crest  (9.3)
Top Organizers
1 Burglar  (9.9)
2 Sixx  (9.8)
3 hedning  (9.7)
4 Irata  (9.7)
5 MWS  (9.6)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.048 sec.