Forum comments in chronological order
Disclaimer: I am not responsible for what people (other than myself) write in the forums. Please report any abuse, such as insults, slander, spam and illegal material, and I will take appropriate actions. Don't feed the trolls.
Jag tar inget ansvar för det som skrivs i forumet, förutom mina egna inlägg. Vänligen rapportera alla inlägg som bryter mot reglerna, så ska jag se vad jag kan göra. Som regelbrott räknas till exempel förolämpningar, förtal, spam och olagligt material. Mata inte trålarna.
- Jun 2007
- Aug 2007
- Oct 2007
- Nov 2007
- Dec 2007
- Jan 2008
- Feb 2008
- Mar 2008
- Apr 2008
- May 2008
- Jun 2008
- Jul 2008
- Aug 2008
- Sep 2008
- Oct 2008
- Nov 2008
- Dec 2008
- Jan 2009
- Feb 2009
- Mar 2009
- Apr 2009
- May 2009
- Jun 2009
- Jul 2009
- Aug 2009
- Sep 2009
- Oct 2009
- Nov 2009
- Dec 2009
- Jan 2010
- Feb 2010
- Mar 2010
- Apr 2010
- May 2010
- Jun 2010
- Jul 2010
- Aug 2010
- Sep 2010
- Oct 2010
- Nov 2010
- Dec 2010
- Jan 2011
- Feb 2011
- Mar 2011
- Apr 2011
- May 2011
- Jun 2011
- Jul 2011
- Aug 2011
- Sep 2011
- Oct 2011
- Nov 2011
- Dec 2011
- Jan 2012
- Feb 2012
- Mar 2012
- Apr 2012
- May 2012
- Jun 2012
- Jul 2012
- Aug 2012
- Sep 2012
- Oct 2012
- Nov 2012
- Dec 2012
- Jan 2013
- Feb 2013
- Mar 2013
- Apr 2013
- May 2013
- Jun 2013
- Jul 2013
- Aug 2013
- Sep 2013
- Oct 2013
- Nov 2013
- Dec 2013
- Jan 2014
- Feb 2014
- Mar 2014
- Apr 2014
- May 2014
- Jun 2014
- Jul 2014
- Aug 2014
- Sep 2014
- Oct 2014
- Nov 2014
- Dec 2014
- Jan 2015
- Feb 2015
- Mar 2015
- Apr 2015
- May 2015
- Jun 2015
- Jul 2015
- Aug 2015
- Sep 2015
- Oct 2015
- Nov 2015
- Dec 2015
- Jan 2016
- Feb 2016
- Mar 2016
- Apr 2016
- May 2016
- Jun 2016
- Jul 2016
- Aug 2016
- Sep 2016
- Oct 2016
- Nov 2016
- Dec 2016
- Jan 2017
- Feb 2017
- Mar 2017
- Apr 2017
- May 2017
- Jun 2017
- Jul 2017
- Aug 2017
- Sep 2017
- Oct 2017
- Nov 2017
- Dec 2017
- Jan 2018
- Feb 2018
- Mar 2018
- Apr 2018
- May 2018
- Jun 2018
- Jul 2018
- Aug 2018
- Sep 2018
- Oct 2018
- Nov 2018
- Dec 2018
- Jan 2019
- Feb 2019
- Mar 2019
- Apr 2019
- May 2019
- Jun 2019
- Jul 2019
- Aug 2019
- Sep 2019
- Oct 2019
- Nov 2019
- Dec 2019
- Jan 2020
- Feb 2020
- Mar 2020
- Apr 2020
- May 2020
- Jun 2020
- Jul 2020
- Aug 2020
- Sep 2020
- Oct 2020
- Nov 2020
- Dec 2020
- Jan 2021
- Feb 2021
- Mar 2021
- Apr 2021
- May 2021
- Jun 2021
- Jul 2021
- Aug 2021
- Sep 2021
- Oct 2021
- Nov 2021
- Dec 2021
- Jan 2022
- Feb 2022
- Mar 2022
- Apr 2022
- May 2022
- Jun 2022
- Jul 2022
- Aug 2022
- Sep 2022
- Oct 2022
- Nov 2022
- Dec 2022
- Jan 2023
- Feb 2023
- Mar 2023
- Apr 2023
- May 2023
- Jun 2023
- Jul 2023
- Aug 2023
- Sep 2023
- Oct 2023
- Nov 2023
- Dec 2023
- Jan 2024
- Feb 2024
- Mar 2024
- Apr 2024
- May 2024
- Jun 2024
- Jul 2024
- Aug 2024
- Sep 2024
- Oct 2024
- Nov 2024
May 2017
Anonymous
Tue 2-May-2017 23:53
Tue 2-May-2017 23:53
Unfortunately the closest we can get to a SID file from converting is in RSID format, which won't play in a lot of players, especially older ones. Even those that can play it, don't seem to silence the SID when resetting at the end, so you'd have hanging notes. So far all my attempts to bodge in a fix for this have failed.
So, Linus, any chance we could get an official SID version? :)
So, Linus, any chance we could get an official SID version? :)
Anonymous
Sun 7-May-2017 22:25
Sun 7-May-2017 22:25
amazing article!
thank you very much
thank you very much
Anonymous
Sun 7-May-2017 23:09
Sun 7-May-2017 23:09
I have never been this impressed by an oldskool demo before. Thank you sir for your art!
Anonymous
Mon 15-May-2017 00:18
Mon 15-May-2017 00:18
I have tried to build a MIDI synth with similar capabilities on ATmega 32u4 but could not avoid annoying clicks in the audio as the midi signal was processed (takes way too long and halts DAC conversion for a short while). Hats off for putting it all into an ATmega 88... I have no idea how did you do that. What kind of data structure do you keep your "tones"/"pressed keys" ? Only thing that worked reasonably for me is an array of 127 elements, each for one MIDI tone. I tried using an "stack" of pointers but i sometimes needed to move an element from the middle (thats why the "") to the top which took way too long and made an audible click as well. This i tried by using a linked list but the overhead for that was just way too large.
lft
Linus Åkesson
Wed 17-May-2017 22:59
Linus Åkesson
Wed 17-May-2017 22:59
So, Linus, any chance we could get an official SID version? :)
Done & added to the Downloads section.
lft
Linus Åkesson
Thu 18-May-2017 22:29
Linus Åkesson
Thu 18-May-2017 22:29
Thanks!
Generating the sound is done in an interrupt handler, and so is receiving the serial data. The latter interrupt handler just stashes the bytes into a circular buffer. Everything else is handled in main context.
Linked lists. I use one page of memory (256 bytes) as a heap of 3-byte list nodes. One of those bytes is a next-pointer; it can be a byte because the heap is just one page. So there are 85 nodes in the system, starting at offset 1 which makes 0 free to use as a null pointer.
At initialisation, all 85 nodes are chained together into a freelist. Heap allocation is then a simple matter of unlinking the first node in the freelist. Conversely, nodes are freed by unlinking them and putting them back at the head of the freelist.
Generating the sound is done in an interrupt handler, and so is receiving the serial data. The latter interrupt handler just stashes the bytes into a circular buffer. Everything else is handled in main context.
What kind of data structure do you keep your "tones"/"pressed keys"?
Linked lists. I use one page of memory (256 bytes) as a heap of 3-byte list nodes. One of those bytes is a next-pointer; it can be a byte because the heap is just one page. So there are 85 nodes in the system, starting at offset 1 which makes 0 free to use as a null pointer.
At initialisation, all 85 nodes are chained together into a freelist. Heap allocation is then a simple matter of unlinking the first node in the freelist. Conversely, nodes are freed by unlinking them and putting them back at the head of the freelist.
Anonymous
Thu 18-May-2017 23:39
Thu 18-May-2017 23:39
It's like a piece of art, this should be in the Tate modern. Minimalist beauty. Well played sir.
Anonymous
Fri 19-May-2017 23:12
Fri 19-May-2017 23:12
lft wrote:
So, Linus, any chance we could get an official SID version? :)
Done & added to the Downloads section.
(Same guy here)
Thank-you very much, I'm sure I won't be the only one who much appreciates it :)
Anonymous
Sun 21-May-2017 02:58
Sun 21-May-2017 02:58
Hello. This relocate to $6000 why failed? http://csdb.dk/sid/?id=22120
Stranger in a Strange Land. 2800-3985, inic 2848, play 2821, Player routine: Music Assembler (Voice Tracker 4), 4486 byte. sidreloc -p 60 -r 28-39 -k -v, relocation failed, too many mismatching pitches, bad pitches 11635, 4%, zeropage 250-255.
Stranger in a Strange Land. 2800-3985, inic 2848, play 2821, Player routine: Music Assembler (Voice Tracker 4), 4486 byte. sidreloc -p 60 -r 28-39 -k -v, relocation failed, too many mismatching pitches, bad pitches 11635, 4%, zeropage 250-255.
Anonymous
Sun 21-May-2017 03:16
Sun 21-May-2017 03:16
Continue Stranger in a Strange Land. I use -f option, "relocation successful with some mismatching pitches", output file save OK, music OK, no problem. Why did the sidreloc indicate that the relocation is wrong?
lft
Linus Åkesson
Mon 29-May-2017 14:32
Linus Åkesson
Mon 29-May-2017 14:32
Continue Stranger in a Strange Land. I use -f option, "relocation successful with some mismatching pitches", output file save OK, music OK, no problem. Why did the sidreloc indicate that the relocation is wrong?
In short, because it compares the register values, not the sound. I haven't looked into this case in particular, but if the tune writes location-dependent values into the pitch registers when a voice has already faded to silence, the above would be the result.
Why would a tune write location-dependent values into the pitch registers? I have seen this happen when e.g. a drum sound contains an out-of-bounds reference past the end of an arpeggio table, reading instead from an unrelated table of pointers that happens to be located after it. As the tune is relocated, the pointers change, and different pitch values get written.
Anonymous
Tue 30-May-2017 15:51
Tue 30-May-2017 15:51
lft wrote:
Continue Stranger in a Strange Land. I use -f option, "relocation successful with some mismatching pitches", output file save OK, music OK, no problem. Why did the sidreloc indicate that the relocation is wrong?
In short, because it compares the register values, not the sound. I haven't looked into this case in particular, but if the tune writes location-dependent values into the pitch registers when a voice has already faded to silence, the above would be the result.
Why would a tune write location-dependent values into the pitch registers? I have seen this happen when e.g. a drum sound contains an out-of-bounds reference past the end of an arpeggio table, reading instead from an unrelated table of pointers that happens to be located after it. As the tune is relocated, the pointers change, and different pitch values get written.
When do you fix the relocator program?
The program works uncertainly. Error indicate, but no real error, etc.
Anonymous
Tue 30-May-2017 17:06
Tue 30-May-2017 17:06
When do you fix the relocator program?
The program works uncertainly. Error indicate, but no real error, etc.
The program works uncertainly. Error indicate, but no real error, etc.
I don't regard this as an error. It is useful to know when different register values are written, and one can easily override this behaviour with -f, like you did.
That being said, the program is open source, so you can easily amend or modify it yourself.
Anonymous
Wed 31-May-2017 23:34
Wed 31-May-2017 23:34
I dare you, solve this one
http://www.linusakesson.net/games/autosokoban/?v=1&seed=1329696099&level=20
http://www.linusakesson.net/games/autosokoban/?v=1&seed=1329696099&level=20
The level is actually not as difficult as you think.
Using the upper path as a one-way sliding door makes it easy.
To make it more interesting, you can actually eliminate the upper path as a one-way sliding door by adding a wall.
Like this:
#####-----
##--###---
#@--$-####
##-##----#
-#.*.-.$-#
-##$-$-$.#
--#-.$.-##
--#######-
Still relatively easy.