Jump to content

patjomki

Members
  • Content Count

    207
  • Joined

Everything posted by patjomki

  1. I continue to ask my questions in this thread as I think they fit there very well 😀 https://atariage.com/forums/topic/295770-my-pokey-experiments-using-nonstandard-settings/
  2. Oh. That was a misunderstanding from my side. For me PCM, PDM and PWM are still mysteries. I thought I could try the following method? Picture is from here: https://de.wikipedia.org/wiki/Pulsweitenmodulation I mean, if I generate square waves with pokey like the pink graph the loudspeaker should produce a sinus wave like the green graph, right?
  3. I don't want to go the way of a digitracker. First of all the maximum resolution is 6 bit and even with 4 bits only at a frequency of 8Mhz you get 8000 sample values which means a little bit less than 4K for just a single 1 second tone which isn't even enough for a lot of instruments, e.g. piano more than 2 seconds for a single tone, apart from the fact that a single player can use more than one key at a time, so you have to use more samples (-> even more memory consumption) or calculate them which leads to no cpu time left for more than digisound (and of course we already have inertia, Protracker and Neotracker). So I want to got the chiptracker way. Yes, we already have RMT but if I understood correctly it doesn't support different waveforms. Btw, it's a tragedy that both Raster and Analmux died when they were so young. 😥 First step of my goal is to have sawtooth, triangle, rectangle with variable pulse width modulation and most important sine waveforms. Therefore I try to program the volume bits. Second step is to add ADSR envelopes but that's another story. And thanks again for the explanation, all of your answers help a lot to understand pokey more and more. Please don't misunderstand if I am telling things you already know (e.g. the needed ram for sampling in my calculation above) but for me programming sounds on the xl is completely new so I just want to make sure I don't make some false assumptions. Feel free to correct me whenever I write something wrong. Perhaps one way to go would be: https://en.wikipedia.org/wiki/Pulse-width_modulation like you suggested in this thread: In the meantime I also found the following threads: https://atariage.com/forums/topic/278463-pwm-experiments/page/2/#comments https://atariage.com/forums/topic/295770-my-pokey-experiments-using-nonstandard-settings/ https://atariage.com/forums/topic/216807-complete-pokey-note-table-for-all-distortion-settings/
  4. Ok, don't know what I did first time but now I got it working. Thank you.
  5. Couldn't get this method to work. But since using the volume bits with AUDC works I now have a solution for playing pauses. So now that I can play rectangle tones and pauses I try to fix another issue (of course in assembler and not in basic due to timing reasons). Compared to the sid pokey can only produce rectangle sounds. So in order to have different waveforms I try to simulate those waveforms with using the volume bits of AUDC. How can this be done correctly? Example: Let's say I would play a rectangle sound with 100Hz (it's not a real note but I'm using this frequency in my example to make it easier to explain what my problem is), this means that pokey produces a rectangle wave 100 times a second. So pokey starts the sound with the volume stored in audc then after half of the period of oscillation (0.005 seconds pokey) automatically sets the volume to zero then after a complete period of oscillation (0.005 seconds multiplied by 2 = 0.01 seconds) again with the volume stored in audc etc. Is that right? To put it in other words if this is true pokey produces a rectangle wave with a fixed pulse width modulation. So let's assume I want to have a 100Hz sawtooth wave instead which means that I have to simulate it with software (volume bits). For this I would start a timer of 100Hz which begins to play a tone with a volume of 9 (example to keep it easy again because this means 10 volume steps (0 to 9)) at a frequency of 100Hz. Then the sawtooth emulation starts by reducing the volume every 0.001 seconds so that after 0.01 seconds the volume would reach zero. BUT due to the fact that pokey already sets the volume to zero after 0.005 seconds one half of my sawtooth is cut even though the volume is still 5. Does that mean that in order to avoid this situation I have I to keep the speed of my timer but play a lower tone (50Hz instead of 100Hz) so that my sawtooth wave reaches 0 at the same time when the pokey sets the volume to 0 and then my timer triggers again and plays the rectangle sound (50Hz) again with a volume of 9? I have attached a picture to show what I mean.
  6. Didn't know that 0 is a valid value. Thanks a lot for that info. Now I play the adsr envelope with zeroing the AUDC register when I want to have a a silent note (aka: pause) et voilà: clicks are gone.
  7. Hi, I try to use different sound envelopes. Due to the fact that Pokey doesn't have ADSR registers I need to adjust the volume register (AUDC1, $D201/53761) manually. This works fine when playing tunes but when I try to play a pause (e.g. frequency 0 for AUDF1, $D200/53760) the speaker produces a knocking sound. Here is an example in ATARI Basic (to keep it simple there are no sound envelopes): 10 POKE 53775,3:REM POKEY INIT PART 1 20 POKE 53768,0:REM POKEY INIT PART 2 30 POKE 53760,0:REM AUDF1 = 0 MEANS NO SOUND 40 POKE 53761,15+160:REM VOLUME TO THE MAX AND PURE RECTANGLE SOUND 99 REM MAIN LOOP 100 FOR I=0 TO 100:NEXT I 110 POKE 53761,160:REM VOLUME TO ZERO BUT STILL RECTANGLE 120 FOR I=0 TO 100:NEXT I 130 POKE 53761,15+160 VOLUME AGAIN TO MAX STILL RECTANGLE 140 GOTO 100 Any ideas why this happens?
  8. Sorry I neither use cc65 nor Mad Pascal. Plain mads/wudsn. 😀
  9. @Heaven: Thanks for the explanation of your wait code. Another question regarding custom font: When OS is OFF $2f4 (CHBAS) and $d409 (CHBASE) do not work. So you first have to copy your font data back to a memory location in the first 48K to use your font (and switch OS ON of course)? @flashjazzcat: Ah, think I finally understood. Supposed my program code does not exceed ~14K and I put it into shadow ram below the OS I have the normal ram for pure data (48K minus zeropage minus page 1 (stackpage)), right? What about pages 2 to 6 ($200 - $6ff)? I think I can use them similar to ram areas $c000... and $d800... as long as the OS is OFF? And what about page 7 ($700 to ???) and beyond where DOS is located?
  10. Regarding 14K: Understood. $d000-$d7ff is unavailable on a stock machine. So I can have an area from $c000-$cfff (4K chunk) and an area from $d800-$fff9 (~10K chunk as the last 6 bytes are where the interrupt routines are located). What I do not get: What is the advantage of loading e.g. level 2 (14K) of my game to $4000, moving 4K to $c0000 and 10K to $d800, then load level 1 (14K) again to $4000 and finally start my game instead of loading only level 1 (14K) to $4000 and when I reach level 2 load the next level data (14K) to $4000 from disk? @heaven: why do you wait until $14 (RTCLOK) indicates that a vbl occured (in Movedata)?
  11. Well, actually I already read that thread (that's the reason why reading and writing to Shadow RAM is no problem) but couldn't find a solution for my task. The only thing I could find was: To be honest I don't understand your idea of running the mainline program under the OS. Which INIT segments are necessary to enable that? P.S.: Why only 14K?
  12. Hi all, I try to find a meaningful use for the RAM below the ROM of the ATARI 8-Bit computers as one of my programs in development needs more than 48K. I can read and write to the RAM from adress $c000 and beyond so that is no problem (interrupt handling is a different story but to keep things easy just think about my program as if all interrupts are disabled). Due to the fact that you can only use this part of the memory when the OS is OFF I want to fill this part of the RAM with additional level data, Player-Missile data, character sets etc. and copy it when necessary to a RAM area that can be used when the OS is ON. But when I initiate the ram area with an org statement ---------------------------- org $c000 ; RAM under ROM dta $01,$02,$03,$04 ; etc. ---------------------------- it is obvious that this cannot work because when I load my .xex file from DOS the OS is still ON. So one solution could be to fill my level data, Player-Missile data, character set to a different part of the memory ($8000 for example) then load my .xex file, switch the OS OFF, copy all the data from $8000... to $C000..., switch the OS ON again and load the data that was missing with OS loading commands to $8000... Well, apart from the fact that this seems to be a little bit complicated it also just takes too much time to copy 16K of data and there is no advantage to reading additional level data etc. from disk later in the program. So my idea is to have a little loader program that just switches OS OFF and loads 16K to $c0000... switches OS ON and reads the rest of the program but then again when there is no OS present how can I load the content of a file to a designated ram area? Or is there another solution?
  13. I also like the 600XL most. It is fascinating to see how many of the modern upgrades fit into the small case of a 600XL. I also have a stereo pokey, U1MB, VBXE and pCovox in my 600XL. Unforunately there isn't enough space left in it for a rapidus so for that purpose I have an 800XL as my main machine but the 600XL looks better IMHO.
  14. Well, (old) PC joysticks are not that impressive but controlling driving games (1:43 min) with a steering wheel looks promising.
  15. Nice. Someone connected standard pc gear to an atari 800XL (and other ancient computers). Shoot me with a light gun if old.
  16. Scuttlebutt http://eweguo.ownit.nu/scuttlebutt/
  17. 1. davidcalgary29 - 1 cart 2. xrbrevin - 1 cart 3. skriegel - 2 carts 4. Marius - 2 carts 5. brenski - 1 cart 6. AtariSociety - 1 cart 7. Mathy - 2 carts 8. Haightc - 1 cart 9. Markk - 1 cart 10. Sleepy - 2 carts 11. Nezgar - 1 cart 12. Gunstar - 1 cart 13. Chaosfaktor - 1 cart 14. Wadeford - 1 cart 15. sanny - 1 cart 16. DNA128k - 1 cart 17. Senor Rossie - 3 carts 18. KlasO - 2 carts 19. NML32 - 1 cart 20. CharlieChaplin - 1 cart. 21. slx - 1 cart 22. David_P - 1 cart 23. Rainier - 1 cart 24. AtariPortal - 2 carts 25. patjomki - 1 cart
  18. Good decision. And I think there is enough room for your upgrade plans. I have a PAL 600XL/64K and there was enough room for an ultimate 1mb, a p-covox, a vbxe, a stereo pokey pcb and an internal sio2pc (usb-version).
  19. Perhaps. For me this combination works: Wine 3.03 (stable), Mac OS X 10.13.6 and Altirra 3.10.
  20. Nice mockup. What about the moving man? PMGs or preshifted soft sprites?
  21. Unfortunately the author of the original doesn't have time for a conversion. Apart from that Spectrum version seems to be possible 1:1 but what about the C64 version? José?
  22. I found a gap in the a8 library. It's Scuttle Butt (http://eweguo.ownit.nu/scuttlebutt/). The game is funny, unique and challenging. The C64 version is by far superior to the spectrum version but either of them converted would be a nice addition to the a8 library and the source code is available. What do you think?
×
×
  • Create New...