Jump to content
IGNORED

SV2k17 256 Bytes of Blues


ivop

Recommended Posts

Hi!

 

That's an acceptable change IMHO. Still sounds good and almost the same. Here's 196 :) Changes the bass instrument slightly (sixth value played is now $c0 instead of $c2).

 

Another possibility is merging pentatonic and chord, but that would change the lead melody, because the order of pentatonic would be different. Would save another 3 bytes.

 

Edit: on the other hand, perhaps some people are already hearing something different than I do and the sv2k17 attendants did, because of a different ROM. The page that's played was selected for its melody from the 800XL stock ROM.

I managed to remove 3 more bytes!

 

- only read "bassc,x" one time, simplify *3/2 logic.

 

now at 193 bytes...

mus256.asm

  • Like 3
Link to comment
Share on other sites

the flavor of this is starting to change, not sure if it's going to far when the it starts sounding different like this... change in sound started before the last posted reduction.

it is interesting how far you can take this before it either breaks or becomes different all together.

Edited by _The Doctor__
Link to comment
Share on other sites

I found the slightly longer hi-hat sound and slightly shorter bass sound acceptable (being the original "artist" of this song), but, for example, changing the order of the pentatonic table completely changes the melody and as such I found it not acceptable.

It's indeed interesting where something becomes too different to be called more or less the same.

  • Like 2
Link to comment
Share on other sites

186 bytes by using INC as RMW equivalent of storing zero.

185 bytes by reordering the delay loop to save the CLC. Means there is a difference of 1 frame for two of the channels - may the artist decide of that is acceptable :-)

 

(Sounds the same for me, but hey, I released ISO on the VCS with 15 kHz humming and didn't even notice because I am too old for to hear that anymore ;-) )

mus256-186B.zip

mus256-185B.zip

  • Like 3
Link to comment
Share on other sites

Hi!

 

188 bytes (merged drum and blues table as this is simpler than my suggested 2 bit per pattern compression)

I reordered the tables and restore the two table approach for the chords, now chords sound exactly as original and it's two bytes shorter, at 186.

 

EDIT: I would merge the changes by JAC! now!

mus256.asm

  • Like 2
Link to comment
Share on other sites

Hi!

 

186 bytes by using INC as RMW equivalent of storing zero.

185 bytes by reordering the delay loop to save the CLC. Means there is a difference of 1 frame for two of the channels - may the artist decide of that is acceptable :-)

 

(Sounds the same for me, but hey, I released ISO on the VCS with 15 kHz humming and didn't even notice because I am too old for to hear that anymore ;-) )

Attached file incorporates your first change, giving 184 bytes. I did not add your second change as I think it sound different enough, and it's only one byte less.

 

I tried interleaving the tables, changing the order of patterns, and many combinations, but could not get the code smaller. More eyes are necessary :-)

mus256.asm

mus256.xex

Edited by dmsc
  • Like 1
Link to comment
Share on other sites

...now chords sound exactly as original and...

 

Yes, besides the slightly shorter bass envelope and slightly longer hi-hat, the introduction of calculating arpeggio(n)=n*3/2 introduced another slight difference with the original. I forgot to mention that at the time. Two arpeggios were identical, but one was off by two. But now the tables are reintroduced and it's exactly the same again :)

  • Like 2
Link to comment
Share on other sites

Hi!

 

183 bytes: moved and reversed the (combined) blues pattern to the lower page boundary. No need for X initialisation any more.

Good idea!!

 

Now, if you displace the blues pattern by tree and invert the drums patter table, you can join the last tree entries (that are zero) with the hat-closed instrument table.

 

So, three bytes less, now it is 180 bytes.

mus256.asm

mus256.xex

  • Like 5
Link to comment
Share on other sites

Hi!

 

Reordered the assignment of channels and a different way to activate the melody after 12 bars. 178 bytes.

As the code is shorter still, I could move the drums frequency table to zero-page (one byte less) and using a proper alignment of the tables replace the CLC+ADC with EOR (another byte less), so it's now 176 bytes!

mus256.asm

mus256.176.xex

  • Like 5
Link to comment
Share on other sites

X-mas is near, so I decided to use opcodes with more X's ;-) OK, they are considered illegal and unstable . But I rather see that as "not well documented and challenging".

 

LDA:AND#:TAX optimized to LAX:ANX. I always wanted to try that out. Tested on real Atari 65XE to ensure my assumption about the stability is this specific case is correct.
Because and A and X have the same value due to the LAX, environment dependent constant in "A = (A | CONST) & X & #{imm}" does not matter".

 

174 bytes.

 

 

mus256-174B.zip

  • Like 3
Link to comment
Share on other sites

The problem with illegal opcodes is that they work with one chip and not another based on manufacturer and timing edges.. please see visual 6502 page about this... progress is slow on mapping these out even to this day, most people don't have all the equipment to check everything out.... my stance is a real world answer should be good enough... so long as we have each chip in each Atari platform we can see what should and should not be used and deem opcodes that are stable by our Atari machines. to be sure only opcodes valid across all the working variations should then be considered accepted... another issue is the abuse to the chip when 3 things tie together repeatedly, really getting hammered so to speak.... that brings in a thermal dynamic also noted in a way on the site...

If it fails in one or has thermal issues it should not be used...

Edited by _The Doctor__
Link to comment
Share on other sites

Hi!

 

X-mas is near, so I decided to use opcodes with more X's ;-) OK, they are considered illegal and unstable . But I rather see that as "not well documented and challenging".

 

LDA:AND#:TAX optimized to LAX:ANX. I always wanted to try that out. Tested on real Atari 65XE to ensure my assumption about the stability is this specific case is correct.

Because and A and X have the same value due to the LAX, environment dependent constant in "A = (A | CONST) & X & #{imm}" does not matter".

 

174 bytes.

Good!

 

About your comment in the source on running in real hardware, yes, some DOS don't disable serial I/O before running a binary. The attached ATR with BW-DOS can be used in real hardware to run the demos, as BW-DOS does clear POKEY registers.

mus256.atr

Link to comment
Share on other sites

Nice. I was about to flash SDX, because that is what they use for the compo machine, too. And it appears to properly reset POKEY, too (or not touch it at all when loading from HDD). But this is even better.

 

@Doctor: I'm well aware the nature of the different illegal opcode and in fact have been using them on different platforms for 3 decades "when I gets hard". In in fact I found exactly one occasion when one behaved differently on different boards for the same hardware. Some are well known and researched, some not. http://csdb.dk/release/?id=152327is the best reference as of today.

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...