Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


pavros last won the day on December 20 2009

pavros had the most liked content!

Community Reputation

98 Excellent

About pavros

  • Rank
    Star Raider

Profile Information

  • Gender
  • Location

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. An explanation of instability of C distortion based on 4-bit polycounter can be found in this thread:
  2. An explanation of instability of C distortion based on 4-bit polycounter can be found in this thread:
  3. While dealing with 16-bit frequency divisors and C distortion in order to keep synchronization with poly4 counter (keep sampling track) additional requirement must be met. It is atomicity of change of frequency divisor against timer reloading. There are two approaches possible. First one is to guarantee the atomicity by using IRQ on 16-bit channel (2 or 4). The IRQ handler is called right after timer reloading and there is a lot of time to make a change of both bytes of frequency divisor before next timer reloading. The second approach is just to re-synchronize (reset sapling track) on each note change.
  4. Attaching an example of bass based on C distortion, which is cut out of sound track of IK+ game. It lasts for couple of minutes and loops. I also encourage you to play with bass tester from package attached to first post, especially with piano using chromatic scale (switched with key "9") and active accurate phase modulation (key "zero") while two channels are playing. ikp_bass.xex
  5. Hi Guys, You are absolutely right about the reason of the click. Indeed, two subsequent pulses may happen one after another closer than expected as the order of sampled elements of poly4 sequence changes depending on the frequency setting. What is also very important, we need to remember that the moment when a timer reloads with new frequency setting is different than the moment when we put a new frequency value to AUDFx register. The delay from register's modification to actual timer reloading may take up to whole sampling cycle i.e. 1/5 of the C distortion wave period of previously set frequency. This delay also has an impact on which bit/element of poly4 sequence will be sampled first after changing the frequency. I assume that we modify POKEY registers at each VBLK interrupt (so with 50 or 60Hz rate). Let's call a single 20ms period between two subsequent VBLKs a frame. Let's also assume that we are mostly interested in very low frequencies 50-100Hz and we are only interested in sound of T1 timbre (with a pulse lasting 20% of cycle time). The solution would be eliminating the next pulse of the T1. Unfortunately there is no good method for doing that. As mentioned by Rybags, one of the solutions is to decrease the volume of the signal for one frame. This solution is actually good for channel 1 and 2 only. As channels 3 and 4 have negated output and for 4/5 of each period a high state is sustained, setting the volume to 0 during the single frame will cause a 20ms negative pulse which will result in a click. Even if this method is applied to channel 1 or 2, there may still an issue happen. When the volume is restored after one frame, it may coincide with another pulse and the effect will be reduced length of the pulse which may result in a click because of different set of generated harmonics. This only means that the method is not perfect. There is another solution which could be applied to channels 3 and 4. This is using frequency divisors which cause poly4 "sampling pause" - the divisors which are multiples of 15. I refer to them in my article as divisors belonging to P4 set. The lowest value belonging to the P4 set is just 15, for which a value of 14 must be written to AUDFx register. Using this "sampling pause" effect we will mute the output of the channel. We should put a P4 value for two subsequent frames to guarantee that it will last for at least one frame. This is related to the possible delay between writting a value to AUDFx and reloading the timer with this value, what I've already mentioned. So after two frames where we write 14 to AUDFx we can only set it to desired frequency divisor. Unfortunately, this method is not perfect either. We may be unlucky and apply "sampling pause" during the pulse of T1. This will result in unwanted up to 40ms pulse (up to 2 frames). Still, we have a 20% chance it will happen. If we used a first method with setting volume to 0 we would get 100% change to generate a 20ms long pulse. So, the reason why the second method is not perfect is because we don't know which element of poly4 sequence is currently sampled. We can only know it just after the synchronization of the counters but we don't want of course to use it on every note change. Please experiment a bit with both methods and let me know the results.
  6. Hi guys! I've put english version of all materials in dedicated thread here:
  7. Some time ago I finished working on a document where I describe results of my research on the POKEY's C distortion. It says about the rules related to generating the distortion as well as about the ways to stabilize bass sounds referred to as C bass (or "Donkey Kong" bass by Synthpopalooza). The instability issue has been already mentioned in the threads: http://atariage.com/forums/topic/116835-polycounter-reset-on-pokey http://atariage.com/forums/topic/212280-pokey-question-distortion-12-donkey-kong-bass Beside the document there is an excel file attached, which is a supplement for the study and contains POKEY frequency/note tables for all its clocks. There are also slides which I was presenting on WAPNIAK party in 2017 and a Bass Tester program which allows you to play a bit with the C distortion in practice. The program is compiled in three versions differing in the method of counter synchronization - two variants of first method and the second metod. The Bass Tester is provided together with its complete source code. On screen you will see what keys can be used for various settings. The manual is actually included in the slides. If used under the Altirra emulator, it's worth turning on the Audio Monitor to watch oscillograms. What is not mentioned in the manual is key 0 which toggles accurate phase modulation. I hope you will find it all useful. c-distortion.zip
  8. Hi Rachel, Here are another ATR images that would allow you to load XEX files. AutorunFirstXex_90SD_blank.zip ChaosLoader_90SD_blank.zip
  9. I'm sure it's technically possible. Where can I find any specs of AtariMax cartridge (regarding bank switching)?
  10. Well, the single animation frame may be up to 40 pixels wide and the code preparing "the cover" assumes that clothing pixels may appear in any of 40 columns. In practice there may be feet and head of the figter at utmost positions which do not require covering. So you may be right that the clothing's maximum width is 31 pixels. I've never analysed it.
  11. Interesting ideas, but I think they would not fit the game title. It looks like there is a need for new fighting game for A8 - more close to Mortal Combat .
  12. Hmm. Then your POKEY is clocked as for NTSC, but ok - the difference in PAL and NTSC clock we can consider negligible. Anyway, in my opinion the mod should also contain GTIA PAL register modification as reading this register is an official way to check machine's TV system. Such mod is relativly simple and could be done using single GAL chip. This approach would be more correct than patching all the software which checks TV system according to the specs.
  13. All PMG objects are in use. The maximum width of fighter's figure is 40 pixels.
  14. There are 27 (out of 57) animation frames assigned vulnerable areas. Single animation frame is assigned 2 to 6 vulnerable areas. Maximum 2 areas are exposed per single attact technique of the opponent.
  • Create New...