Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by kliepatsch

  1. That sounds quite impressive. Will these conversions be part of some kind of "universal" player?
  2. What do you mean by garbage collection and how does it relate to music? Just curious.
  3. From what I can tell, Tim Follin didn't use PCM, and if he used the independent frequencies feature, I haven't noticed that either. There is, however, a fourth difference and that is the per-channel clipping in the 2612. Tim Follin made heavy use of that in e.g. the second track in the video to give some distortion/warmth to the bass, keys and for some B3 organ like sounds. This can't be done with the 2151 afaik.
  4. Just came across this: It is made with a different FM chip, the YM2612. Whereas the previously mentioned AfterBurner soundtrack definitely made heavy use of samples (not only drums but also the guitars), this example here is, as far as I can tell, only FM sound. I am totally blown away by what Tim Follin could do with 6 FM channels. And just from reading the specs, the YM2151 should be mostly on par with the capabilities of the YM2612 (except for small little details and perhaps sound quality). I think that not much is holding the X16 back from delivering THIS sound, which I find very humiliating.
  5. Well, I personally don't like (yet) to extract things that are used only once. It feels messy to me. But the example above makes the code very easy to understand. It took me only a few seconds to understand what you are doing. I wonder what's better: commenting code (e.g. giving headlines to sections of code) or writing macros with explanatory names Edit: or even use descriptive names for labels
  6. Just tested it, and that's what happens in Python 2. In Python 3 it does indeed write a binary file. In Python 2 it is "bytearray()" instead of "bytes()", then it works as intended. Not sure why "bytes()" doesn't throw an error in Python 2. Partially true. You can convert other things into bytearrays. E.g. appending a 16-bit integer to a bytearray is existing_bytearray += (65535).to_bytes(2,"little") where the argument 2 states that it should become 2 bytes, and "little" or "big" endian can be used. There's also an option for signed integers. Strings can be dealt with as existing_bytearray += ("hello world").encode("utf-8") Although encoding strings to PETSCII may require some extra code...
  7. I think everyone can use whatever they know for this kind of task. Albeit admittedly some tools allow for more comfort than a Hex editor. I am using Python for generating binary data. It would look like this struct_1 = [12, 13, 14] struct_2 = [0, 80, 0, 90, 0, 100] data = struct_1 + struct_2 + struct_1 # appending data is as easy as this. data_bytes = bytes(data) f = open("DATA.BIN","wb") # "wb" stands for write binary f.write(data_bytes) f.close()
  8. I personally have not used the Kernal's SAVE routine, rather only sequential file writing using CHROUT into a file. And I have gotten that to work only with SD card images. Since LOAD, however, does (somewhat) work with the host filesystem, it's not obvious to me why SAVE shouldn't also work. What is the string that you are passing to the SAVE routine? Does the file you are trying to write to already exist? Edit: just saw it, "savegame.bin" When saving files with the CHROUT method, I pass "@0:savegame.bin,s,w" The @ symbol says that any existing file with that name should be overridden. The ",s" says that it's a sequential file (not sure if that applies if you are SAVEing) and ",w" to tell the drive that I intend to write to the file. I don't know if any of this is necessary when using SAVE, but hey, more options to try out Edit 2: is the filename string residing in RAM bank 1? If so, I could imagine (according to what Ed Minchau said) that SAVE tries to read the filename but it is not there since it is reading from bank 0 instead. So you would need to put the file name into main RAM.
  9. You're right, I tried it and even the sound works correctly. That's kinda funny, actually. But I can't think of anything you can do to make it work from the SD card right now.
  10. Hmm ... I don't know which programs you are referring to. There are two different types of loading files. One, where the target address from the .BIN file (the first two bytes) is used, and another one where the program itself decides (at runtime) where the program is loaded in memory. The latter is known to be broken in the latest official emulator (R38) when trying to load from an SD card, unfortunately. It could be the case that your programs are trying to load files that way and therefore do not succeed. That red spot in the top right typically indicates disk activity. From what is known about that emulator bug I could imagine that your programs are suffering from it. The file is loaded at address 0, and depending on how large it is, the program that is running gets overridden, causing the X16 to crash. If that's the case, I'm afraid that at the moment, you cannot use those programs from the SD card.
  11. To be able to load programs from the SD card, you have to start the emulator from the command line like this: x16emu -sdcard sdcard.img That way, all files on the image are visible to the emulator. They can then be loaded like LOAD"MYPROG.PRG" .BIN files could be loaded the same way, as long as they are loaded to the address that is stored in the files themselves (the first two bytes in .BIN files often determine the address where the file is loaded). But I think most programs will take care of loading the necessary .BIN files themselves.
  12. Thank you for the nice tutorial! Very clear and well explained. I have one question: does the tutorial also work when the load address and the first two bytes of the "B1.PRG" file mismatch? According to the C64 KERNAL documentation, the address in the file should be ignored. I have a case where I want to load a file at a specific address, but the file itself does not "know" where it's gonna be loaded. So I set the first two bytes in that file to zero. Thing is: the file appears to always be loaded at address zero, and the address I put into .X .Y before calling LOAD seems to have no effect whatsoever. I have messed around a while and couldn't get it to work as intended. Could this be a KERNAL bug? Edit: ah well ... it was THAT bug. Sorry for the spam
  13. I like DosBox ... Not sure if that counts as "retro" Since I like soothing games more than action loaded ones, I have played a lot of Settlers and The Secret of Monkey Island.
  14. As promised, here is a quite a big update to Concerto. The most notable changes are: Concerto is now licensed under the BSD-2-clause license: You can use it in your own open AND closed source projects! The YM2151 is now integrated into Concerto. Freely combine VERA-PSG and YM2151 to create your sounds! You can even modulate the pitch of the YM2151! Reduced number of PSG oscillators per timbre from 6 down to 4 for lighter memory usage. Load/Save named single timbres and banks (a bank is the entirety of all 32 timbres that can be loaded at the same time). Filename editing made possible by adapting code from the awesome VTUI library made by @JimmyDansbo Factory sounds are included (load bank "FACTORY" from SD card to view them). Internal optimizations, the PSG sound slightly changed compared to previous versions. Cleaned up UI from unused stuff I have NOT added support for the YM2151's internal LFO. For the time being, Concerto's own LFO can at least do vibrato, even though it doesn't sound as nice as the native LFO (I guess), but let's keep things simple for now. The last things I want to add before going v1.0 are automation of volume and vibrato (similar to the already implemented pitchbend). Unfortunately, I haven't gotten loading of FACTORY.COB (the sounds that come with concerto) in the "Try it now" section to work. It works flawlessly locally with an SD card image loaded. I have read that the filename extension must be whitelisted in order for it to work. I read that ".SEQ" and ".PRG" are okay. I have also seen ".BIN" being used successfully in the Web emulator. I have tried using ".BIN" earlier today, but with no success. I am using the Kernal routines to load and save. Maybe I am doing something wrong there? Do I need to set the secondary address to a specific value for it to work? If you have an SD card image loaded into your emulator, and the FACTORY.COB file is on there, you can enter the file name "FACTORY" in Concerto (no extension needed, Concerto adds that for you) and click "LOAD BANK". Then you can view all the sounds that I made so far.
  15. You understood correctly, that on its own, Concerto is kind of incomplete, since you cannot make music with it alone. Once I get to version 1.0, I might consider creating some sort of simple player format as you imagine. In the meantime, Concerto does have an API to play notes and to control the pitch of the notes (e.g. do pitch slides). Since I do not expect this API to change significantly (I only plan to add to it), people can already use Concerto as it is. (Of course, questions on how to use it are always welcome) Even though I haven't tried making sound effects for games yet, I certainly think that Concerto offers plenty of options to create nice sound effects. The combination of VERA and YM2151 is able to produce some very juicy stuff (including drum sounds), and I think that it also benefits the creation of sound effects. If you plan to use Concerto for music in a game anyway, then it might be nice also for sound effects. However, if you *just* want sound effects, then I would consider Concerto an overkill, as the binary is not exactly lightweight. If memory constraints play a role, then dedicated sound routines would be much more efficient. Flexibility always comes at a cost. Concerto offers a lot of flexibility
  16. I think this is a very lightweight music player in terms of CPU. If you leave the graphics of the demo away, I would guess you barely notice that the X16 is doing something. It boils down to how Yazwho implemented the instruments. Well, and there's the fact that graphics and music both mess with the VERA registers. But if at an interrupt, you save the vera address at the beginning and restore it at the end, music and graphics should work flawlessly next to each other.
  17. That player only existed in the first version of Concerto and was intended to be a cheap way to show it off. The song length was limited to 256 bytes and the snippets were hard coded into the program. But I am thinking about reintroducing something similar, extended so that longer songs could be played, as well. We'll see...
  18. Quick note here that I am making good progress towards integrating the YM2151 into Concerto. In fact, it is already working and it is just a bunch of these pesky little details that need sorting out. Expect an update in the next couple of weeks.
  19. Thanks all for the replies. @Ender's explanation is the most convincing one to me
  20. Hi all, I looked into various open source licenses. There are, roughly speaking, two categories of open source licenses: Permissive licenses (MIT, Apache 2.0, BSD, ...), which permit recipients of the code to do whatever they please, under some minor conditions like e.g. providing a copy the original license with their derived work. "Copyleft" licenses, most notably GPL. They require that derivative works are published under the same license, so recipients of the code cannot publish a closed source derivative of the original work. Then there are "licenses" that declare a piece of work to be public domain, so that anyone can do everything and does not even need to credit the authors (such as Unlicense or CC0). Now, I am looking for a permissive license which permits recipients to do anything they please as long as they credit the authors for the original work, without going through the hassle of providing a copy of the original license. Essentially something like https://creativecommons.org/licenses/by/4.0/ But I haven't seen CC-BY being used for code, so I thought there might be a good reason why it isn't? Any thoughts or experiences? Thanks in advance
  21. Have a look at this thread: Essentially, due to legal issues it is unlikely that the case design will be released to the public, sadly. Edit: "Legal issues" is perhaps too strong ... See following posts
  22. Well, I don't know if the single X16 video I made counts as "good-looking" ... I bet rather not. Anyway, I use Blender as a video editor. It's free, open source, and quite powerful. Of course, its primary purpose is 3D modelling and animation, but from my limited perspective, it is a capable video editor, too. I know a lot of people use DaVinci Resolve, which is a dedicated video editor and has also a feature-rich free version.
  23. As I understand, this request has been addressed, according to the programmer's reference guide: https://github.com/commanderx16/x16-docs/blob/master/Commander X16 Programmer's Reference Guide.md#custom-keyboard-scan-code-handler I am, however, uncertain as to which emulator version this applies to. I'd suspect the not yet released R39. In a quick test, I couldn't get the example to run on my official R38 emulator @Stefan ?
  24. I can recommend the nice tutorials made by @DusanStrakl at his blog: https://www.8bitcoding.com/p/commander-x16.html?m=1 I think these may be what you are looking for. If I find time later I might try to answer some of your questions directly Edit: Jimmy was faster.
  25. Thanks, that may explain why the PSG is overall relatively quiet.
  • Create New...

Important Information

Please review our Terms of Use