Jump to content

pavros

Members
  • Posts

    61
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by pavros

  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.
  15. I don't mind if anyone enhances IKEE but I'm reluctant to give out the source code. There is 48k of standard 130XE memory still unused. It allows for adding about 20 packed background pictures including their DLI code. IKEE just checks GTIA PAL register. I didn't consider such PAL/NTSC hybrid hardware. I will do it next time I release something for A8. Btw, have you also changed quartz resonator to fit PAL timing? I'm curious because it would probably affect color signal generation by NTSC GTIA.
  16. There is 48k left for further enhancements.
  17. "Completely reverse engineered and upgraded" is the right answer. That's true except collision detection. Collisions are detected based on relative positions and current animations frames of the fighters. For each animation frame there are one or two vulnerable areas defined. The areas are smaller for FULL POINT and larger for HALF POINT detection. The width of the areas is defined with single pixel precision and range from 2 to 7 pixels.
  18. The original version makes use of entire 48k memory and there is simply no place for additional features. It would be possible to make enhanced version to work on 64k with all new features but it would require the background pictures were loaded from diskette. The xex version with all new features requires 80k (uses one bank of extra memory). It runs also on 64k but some of new features are not available (see the list of changes above).
  19. List of changes against the original 128k: One-on-one game modes for one and two players. The game may be unlimited or limited to selected number of rounds. If rounds limit is set then the winner is the one who collects more points from all rounds in total. The rounds limit cannot be set at bonus round, e.g. 4, 9, 13, 18, etc. After reaching rounds limit the final round is finished with MATCH OVER message followed by WHITE WINS or RED WINS depending on the winner (except draw state). The limit setting is visible in one-on-one mode only but it may be changed in any game mode. Weapon dodging mode. Meant for a practice. Three attempts - first on highest difficulty level, second on medium level and third on lowest level. The highest level attempt requires 10 successful dodges, the medium - 6 and the lowest - 3. CONTROL-C key combination turns collision detection off. The sequence of directions of flying weapon is immutable and symmetric for white and red fighter. That's why there is a possibility to practise with both white and red. While regular game in first bonus round with flying weapon there is a lowest difficulty level applied - 3 successful dodges required and 300 points to collect, in second bonus round - medium difficulty level and 600 points to collect, in third and all next bonus rounds - highest difficulty level and 1000 points to collect. In the original there were only two difficulty levels. In lower level 15 successful dodges were required, in higher level - 20. In both cases 2000 points were to be collected. Draw when some points are collected is signalized with DRAW message. If no points have been collected the message is not displayed. Draw while one player tournament (a basic mode existing yet in the original) does not cause game ending. Help (HELP key). The help text comes partially (joystick control and scoring) from a cover of the original. While displaying help screens sound settings may be changed. Help screens may be entered at any time. Additional background - London - coming from C64 version (having 8 backgrounds). The picture requires 8 DLIs while each of 7 existing backgrounds required only 3. Perhaps that's why it was not added to the original. Adding this picture caused a need to modify several existing DLI handlers. The Sydney picture is slightly different than in the original. It's more close to the one from C64 version as well as the one from the IK demo for Atari (the one without any sound and having 3 backgrounds switched with OPTION). Background pictures are stored in memory in crunched form and so there is no need to load them from the drive during game. Changing current location to the next one (N key) or any one (B key plus numeric key for backround number). The change may be forced at anytime during demo or in course of fight during game. Freezing current location - blocking possibility to change it automatically or manually. Pause at anytime. During pause all the game settings (except background) may be changed as well as help screens may be entered. Displaying ranking table at anytime during demo (R key). Sound modes (switched with M key): 0 - stereo 1 - mono 2 - dual mono (mono on two POKEYs) 3 - dual mono music + stereo sfx 4 - stereo music + dual mono sfx CONTROL-M key combination restores default mode which is stereo (0) in case of two POKEYs and mono (1) in case of one POKEY. Stereo sfx means that the effect is louder audible at the same side the fighter finds himself on screen. There are 5 screen areas differing in stereo channels balance. The music is not interrupted while changing background. Bass channel (16-bit) is not interrupted while playing sfx samples. Bass channel (16-bit) has been moved from POKEY channels 1 and 2 to channels 3 and 4 as compared to the original. It was necessary in order to allow simultanous playing sfx samples (of playing rate set in POKEY channel 1) and music bass channel. The sfx samples are played on POKEY channels 1, 2 and 3. Improved music player routine. In first bars of the music the channels 1 and 2 are playing exactly the same. In the original their phases are not fixed which gives randomly a loud square wave or no sound at all or triangle wave as a sum of two square waves shifted of 90 degrees in phase against each other or all intermediate effects. In the improved player routine the channels 1 and 2 are always shifted of 90 degrees in phase against each other which gives triangle wave. The effect is audible in mono mode only. Turning music on or off is remembered and taken into consideration at each starting the game, no matter if other keys have been pressed in the meantime. TV system is detected and some settings dependent on it (timer speed, music player speed, animation speed, sfx sample playing rate) are adjusted accordingly. Several fixes related to background change and fighter animation synchronization against VBL frame and garbage showing up sometime on screen. Several fixes related to playing sfx samples. Several fixes related to problems arising from random blocking NMI by IRQ. 64k: One-on-one game modes for one and two players. The game is unlimited. While regular game in first bonus round with flying weapon there is a lowest difficulty level applied - 3 successful dodges required and 300 points to collect, in second bonus round - medium difficulty level and 600 points to collect, in third and all next bonus rounds - highest difficulty level and 1000 points to collect. In the original there were only two difficulty levels. In lower level 15 successful dodges were required, in higher level - 20. In both cases 2000 points were to be collected. Draw when some points are collected is signalized with DRAW message. If no points have been collected the message is not displayed. Draw while one player tournament (a basic mode existing yet in the original) does not cause game ending. The Sydney picture is slightly different than in the original. It's more close to the one from C64 version as well as the one from the IK demo for Atari (the one without any sound and having 3 backgrounds switched with OPTION). Background pictures are stored in memory in crunched form and so there is no need to load them from the drive during game. Changing current location to the next one (N key). The change may be forced in course of fight only. Freezing current location - blocking possibility to change it automatically or manually. Pause - in course of fight only. The music is not interrupted while changing background. Wykrywany jest system TV i ustawienia zależne od niego są odpowiednio korygowane (prędkość odmierzania czasu, odtwarzania muzyki, animacji, częstotliwość sampli). TV system is detected and some settings dependent on it (timer speed, music player speed, animation speed, sfx sample playing rate) are adjusted accordingly. Several fixes related to background change and fighter animation synchronization against VBL frame and garbage showing up sometime on screen. Several fixes related to playing sfx samples. Several fixes related to problems arising from random blocking NMI by IRQ. The game stops loading when all the data needed for operation on 64k is in memory. Last 6.5k of data in xex file is ignored.
  20. Screenshots I should have added in first post.
  21. @bfollet: Neither the colors nor the position of text at the bottom have changed compared to the original version for NTSC - World Karate Championship. Well, except the Sydney's sky color. That's why I think it should look good on real NTSC hardware. BTW, please try View/Overscan Mode/Extended in Altirra. @tjlazer: Yes, The C64 version had 8 backdrops where London was the one missing in A8 version. @Wrathchild: No :-)
  22. The game works on 64k but most of new features are not available then. I will provide a list of features available for 64k and 128k soon.
×
×
  • Create New...