Hmm, that's going to be a bit tricky. Unfortunately the disassembly is barely commented so it's kinda hard to tell what the code does by just quickly looking at it. Basically what you'd need to do is this: Find out which part makes up the main sound loop (I'm guessing lines 90-204). Count the cycles for this code. Calculate how many times you need to loop to get a 50 Hz rate. Set up a loop counter based on that. Afaict the AF' register is unused, so you could use A' to count, ie. before line 90 you set up A' with the correct value. Then just before line 204 you decrement A and then do a JP NZ instead of the JP. The fall-through (Z condition) should then jump to the former interrupt code.
152 2022-10-20 13:59:19
Re: MicroBeast (not bee!) (3 replies, posted in Other Platforms)
Looking great! Is that a VHS case you're using there?
I'm not a hardware guy so my understanding of the audio circuit is minimal, but I'm guessing the filter should give a nice, bassy sound?
Regarding which audio engine to use as a showcase, the best option would be to write a new one, of course
So we could make proper use of those 8 MHz. I would actually be up for coding something, but I'm going to be pretty busy for the next month and a half, so I can't promise any quick results. That said, please post details about how to address the beeper in code, so I can start scheming.
In the meantime, I would recommend to go with one of the Squeeker-type engines. Shiru's Squat (available in his 1tracker) is probably a good starting point. The advantage here is that Squeeker-type engines use only one output command per sound loop, so you don't need to be too concerned about keeping multiple outputs properly aligned. Basically just stuff a bunch of wait states somewhere into the sound loop to adjust for the higher clock speed. Pretty much every newer ZX Spectrum beeper engine has the cycles for the sound loop counted out in the source code, so you just need to find that and multiply by 8/3.5 to get the number of cycles you need for your machine.
153 2022-10-20 13:45:09
Re: Welcome to the 1-Bit Forum (aka The Introduction Thread) (52 replies, posted in General Discussion)
Hi Andy, welcome aboard. We aren't the most busy place on the internet, so replies might be a bit slow to come in at times. Please don't let the deter you from posting though, I'm definitely interested in your project!
154 2022-10-03 21:32:25
Re: Chronos... (8 replies, posted in Sinclair)
Would be great if he got a massive bout of nostalgia and caught the 1-bit bug once more after listening to your album, hehehehe!
155 2022-10-03 21:27:13
Re: next gen engine ideas (135 replies, posted in Sinclair)
I've been toying with a very promising new engine design that makes it possible to use computation-heavy effects, while also eliminating row transition noise. I don't have time to develop this into a full engine at the moment, but I thought I'd share the idea in case anybody else wants to play with it.
The design revolves around using a crude scheduler to implement basic multi-threading. Within every iteration of the sound loop, the scheduler allots a fixed portion of the available cpu time to the main thread, which updates frequency counters and calculates the output value(s) for the next iteration. The rest is allotted to a variable pool of secondary threads, which run consecutively in between each main thread run. In other words, our sound loop consists of two parts - the first part is always the same and runs all those updates that are required on each sound loop iteration. The second part runs varying tasks that do not require fast updates, for example counting length, computing some effect, or reading in note data.
The scheduler is implemented by pointing the stack pointer to the music data, and then simply RETurning after the main thread. To keep the music data size manageable, we need to implement sequence loops and subroutines as abstract operations running as secondary threads. Ideally we'd do nested subroutines, however that's a bit expensive to compute and in some cases one could probably get away without nesting. No nesting basically mirrors the sequence/pattern approach we normally use. The following example would play two notes over and over again:
sequence
dw set_note_ch1, some_note
dw init_loop, #3fe ; set note length
dw jump_sub, delay
dw set_note_ch1, some_other_note
dw init_loop, #3fe ; set note length
dw jump_sub, delay
dw jump_seq, sequence
delay
dw do_nothing
dw loop, delay
dw returnNow, that may seem like a rather inefficient way to just do
seq
dw pattern
dw seq_end
dw seq
pattern
dw length, note
dw length, other_note
db ptn_endPerhaps it makes more sense to pick a certain number of threads, and think of the time they will take as your refresh rate/tick length, eg.
...
dw set_note, note
dw init_loop, #80 ; 0x80 * 0x10 + 3 = 0x803 loops/ca. 8 ticks (so we can get away with just an 8-bit length counter)
dw jump_sub, fx01
dw set_note, other_note
dw init_loop, #40
dw jump_sub, fx02
...
fx01
dw calculate_expensive_fx_part1
dw calculate_expensive_fx_part2
dw do_something_else
dw jump_sub, delay11
dw loop, l1 ; 16
fx02
dw calculate_other_expensive_fx_part1
dw calculate_other_expensive_fx_part2
dw calculate_other_expensive_fx_part3
dw calculate_other_expensive_fx_part4
dw do_something_else
dw jump_sub, delay9
dw loop, l1
delay11
dw do_nothing
dw do_nothing
delay9
dw do_nothing
dw do_nothing
dw do_nothing
dw do_nothing
dw do_nothing
dw do_nothing
dw do_nothing
dw do_nothing
dw returnStill expensive in terms of data size, but essentially we can now run things that we used to run in the outer sound loop (so, every 256*innter_loop_length t) at a much faster rate without affecting sound. This allows us to do stuff like fast&precise slides/vibrato and all sorts of variable-rate modulation effects. Also with recursive subroutines, you could actually have subroutines that generate subroutines... I think one could go pretty wild with this.
156 2022-10-03 17:14:55
Topic: Transactor - more PET stuff (2 replies, posted in Other Platforms)
https://www.youtube.com/watch?v=w9DfLcCqpnU
Lol, we actually won the oldskool compo at Deadline with this. Found out only once it was too late that the boys are screwing around with the vblank irq, which affects the timing of the music, but oh well... Own sound engine with 3 modes: standard shift register sound, software bass, software bass with crude duty control. Also sorry, no greetz.
157 2022-10-03 17:08:25
Re: 1-bit on the Vtech Laser210/310 and VZ200/VZ300 Z80 computers. (43 replies, posted in Other Platforms)
Hey, where'd the rest of the post go? Don't worry about being off-topic, there's no rule against OT on 1-bit forum, hehe.
In any case, that sounds lovely.
158 2022-10-03 17:03:58
Re: Microbee computer (11 replies, posted in Other Platforms)
Hahaha nice, I love it!
159 2022-09-23 20:02:40
Re: 1-bit on the Vtech Laser210/310 and VZ200/VZ300 Z80 computers. (43 replies, posted in Other Platforms)
Yesss, I love these shed videos! The thought that there's someone on the complete opposite side of the planet listening to 1-bit sounds in a shed out in the countryside is just fantastic. If you don't mind asking, whereabouts in AU are you based?
160 2022-09-23 19:55:41
Re: Microbee computer (11 replies, posted in Other Platforms)
Yay, sounds great indeed! Almost cleaner than on Spectrum. I wonder if it's like this on actual hardware.
What's the process for loading stuff up in MESS?
161 2022-09-12 16:38:22
Re: Microbee computer (11 replies, posted in Other Platforms)
I've heard about this machine before! Fat chance I'll ever see one here in good ol Europe though ![]()
ArcadeDB claims that sound emulation in MAME is "good", at least for the base 16k machine (though I've found that to not always be true for other machines), so it might well worth to give it a try. I've dabbled with MAME quite a bit, so If you were to upload a .tap or .dat or whatever the go-to emulator format is, I could try to work out how to load it.
162 2022-09-06 19:55:00
Re: 1tracker v0.47 (166 replies, posted in Sinclair)
Thanks! I can confirm it works. Interesting to see this in action, in any case. I'll have to play more with it to see how I'll use it in practise. No time right now but winter is coming...
Edit: Just as I was writing the above, I thought of something. I recently composed a somewhat longer track directly in asm. As I went along, I found myself relying more and more on macros, up to a point where almost the entire track was completely macro-ized. Now, I could definitely imagine using reference blocks in a similar fashion, ie. create a "fake" kick or whatever, give that a name, then improve it later on and use Ctrl-Shift-P to update all the occurances.
However, there are two problems with this. First of all, I've been using a lot of parametric macros as well, eg. for a variable starting pitch on a kick. This could work with the block ref system if a ref update would (optionally) ignore all data in the child blocks that do not match the parent.
The second problem is more serious. Basically, I wouldn't want to create a seperate block for each kick in the track - that would completely defeat the main purpose that blocks currently serve, which is quick navigation and easy copy/pasting of song sections. So basically this would require ref blocks to be a separate thing from the current block sections.
Well, just throwing out some ideas here, obviously nothing really thought out.
163 2022-09-06 17:45:01
Re: 1tracker v0.47 (166 replies, posted in Sinclair)
Trying to get this to work, not sure what I'm doing wrong. I create a block, name it "intro", then move the cursor to a new position, type Ctrl+Q intro, nothing happens.
Btw I think it would be a good idea to move down the help page description for Ctrl-F to where the other block commands are explained. Also, for "copy or insert an existing block by typing in its name", you could omit the "in".
164 2022-08-30 20:16:48
Re: SillyVenture 1-bit Compo (43 replies, posted in Atari)
I stumbled across it on HackerNews, so quite likely it either came from there or Hackaday.
165 2022-08-30 20:12:43
Re: 1tracker v0.47 (166 replies, posted in Sinclair)
I also got an idea for another big improvement to the pattern-less system, a link for the already defined named blocks, but I'm still not exactly sure how to implement it interface-wise. It certainly would be a front-end side feature, so no changes needed for the engine scripts. Basically, we already have blocks of variable length and with an optional name. That name can be used as a reference for a 'link' that would synchronize contents of the same-sized same-named blocks. So you would be able to edit one block, and it automatically updates all linked blocks.
I'd need more information on this to make an informed judgement, but generally I think that's a terrain that needs to be treaded very carefully. With automatic updates, there's a risk that you'd accidentally destroy part of your work. Also, 1tracker's current copy/paste-centric approach has the advantage of encouraging variation. When I copy a section and later change some detail in one section, I'll usually apply the changes slightly differently in other copies of that section, often not even deliberately. Happy little accidents, to say it with Bob Ross. For me, it's one of the great strengths of 1tracker. I would possibly be more happy if the updates were manual, that is, you select a source block and one or more target blocks and then issue a command to sync them up.
Generally speaking, I've fully embraced the post-pattern age, haha. My latest pet peeve is actually something else - ticks. And I don't mean the ones that crawl around in the forest trying to kill you with a myriad of diseases. Yeah, those suck, too. Literally. Anyway. Having to deal with ticks aka row length aka speed is annoying. So you start to work on a melody or whatever. Now you want to add some ornaments, so you Ctrl-E that sucker a couple of times. Add yer ornaments, but now you want to save RAM so you optimize the rows. Now all your blocks have odd lengths and it becomes really hard to keep track of where the block borders should be when you move around stuff.
Leaving aside the implications of row transition noise, I think it boils down to this: You always want Speed 1 resolution (especially for 1- and 2-channel engines), but a) you don't want rows with no changes in your output data and b) you don't want all those rows cluttering your tracker view. a) can be solved by having the compiler collapse empty rows, so the big question is how to solve b). I haven't been able to come up with any good solutions yet, it's just something I keep thinking about.
Btw I believe 1tracker's RowOpt feature is wonky. The following:
Sp T
02 C-4
.. ...
.. ...
.. ...
03 D-4
.. ...
.. ...
.. ...
04 E-4will be optimized to
04 C-4
04 ...
04 D-4
04 ...
04 E-4which is obviously incorrect.
166 2022-08-18 20:21:24
Re: Chronos... (8 replies, posted in Sinclair)
Yes, I think just take the synth core would be the best option. From what is disassembled so far I can't really tell how much work that would be, though.
167 2022-08-18 20:15:32
Re: SillyVenture 1-bit Compo (43 replies, posted in Atari)
The problem is that a) MIC output is on average VERY quiet compared to EAR (-0.3V vs -5V and b) MIC output differs wildly across Speccy board revisions (let alone across models). So it's not that useful by itself, but I want to try and use MIC for reverb one day.
Edit: I tried it on my 48k (board rev 4B iirc), it was barely audible.
168 2022-08-18 20:11:46
Re: Chronos... (8 replies, posted in Sinclair)
That's a great find mate, thanks a lot for sharing!
The music data here is made up of four components [...]
That's ... scary. I've barely ever gotten a few half-way decent squeaks out of YS 3-channel component, lol. Perhaps the data format could be normalized a bit, though? Maybe it could even streamline the loader part a bit. Anyway, hope ZoomTen gets back to untangeling the rest at some point.
169 2022-08-18 19:49:13
Re: 1tracker v0.47 (166 replies, posted in Sinclair)
The Side track feature is fantastic! I didn't know that I wanted it, but now that I know what it is, I totally want it. 1tracker once again innovating the tracker space.
The Main and Side tracks can be played separately or mixed together.
I don't fully understand this part. I know I can turn Side track playback on or off with Ctrl+F5, but what's the intended workflow to listen just to the Side Track? Mark the entire track and do Ctrl+T?
How would it be to have a possibility to somehow swap/copy/blend a section the current side buffer contents at an arbitrary position or even another track? I guess that would require some sort of visual representation of the Side tracks though. Perhaps have 3 display options: Side tracks off; show the all side tracks next to the Main track view; or show all side track columns next to their respective main track column. Side tracks would be shown in a different color, but otherwise act as regular tracks as far as editing is concerned.
Also since when has 1tracker had this RowOpt feature? Only noticed it now, that's great to have, too.
Still problems with peskysoundzx, on first run:
engines/peskysoundzx.1te (459, 1) : INFO : Compiling void Compile(uint, uint, uint, uint)
[1] 15724 segmentation fault ./1trackerAlso the z80ass error persists, unfortunately.
170 2022-08-18 16:17:07
Re: SillyVenture 1-bit Compo (43 replies, posted in Atari)
Oh, actually you're reminded me one interesting topic. I recall someone already attempted it, but generally it is totally underexplored, I believe. The idea is to generate audio using the video output. Like, we often put colored strips to the screen when a beeper engine is working (because Spectrum shares border color selection with the sound output bit). These strips actually produce voltage changes in the video signal at audible frequencies. It is possible to display patterns on the screen that will produce certain tones, and by changing the patterns it is possible to play music.
Like this? https://github.com/luamfb/tempest-lcd
I also faintly recall nitro2k1 doing something along those lines on Gameboy.
171 2022-08-13 20:39:44
Re: SillyVenture 1-bit Compo (43 replies, posted in Atari)
Awesome tune Shiru, hyperactivity at it's best hehe. Too bad there weren't any more entries. You're welcome to blame me for that, too, though on the other hand you'd have steamrolled me with this one
172 2022-08-10 11:09:28
Re: SillyVenture 1-bit Compo (43 replies, posted in Atari)
From what I remember SV isn't super strict with these deadlines. They are more there to motivate people to send stuff earlier than last minute, but I don't think they actually refuse entries that arrive later. I've definitely send stuff past the deadline before.
173 2022-08-08 21:39:25
Re: Area 5150 MS-DOS 8088 demo and a single channel PCM engine (4 replies, posted in Other Platforms)
Haha, I was watching the demo (the live yt version, hoping a proper recording will appear soon) and thinking: "Hmm, this music sounds really Shiru-like. But it can't be. I wonder who did it.". And then the credits rolled... Turned out great, really good interplay with the visuals.
I don't quite understand about the MOD end part. Wouldn't the best approach be to take the whole song and have the converter chop it up to create an optimal set of sample data? Or was there no time to build an "intelligent" converter for this?
174 2022-07-18 19:53:57
Re: SillyVenture 1-bit Compo (43 replies, posted in Atari)
Thanks for the info! I'll try to make a Squat tune for the GTIA compo but I can't guarantee anything.
175 2022-06-30 15:14:35
Re: 1Bit Serenity (5 replies, posted in Sinclair)
I finally got around to listening to it, dammit. Fantastic little release! Serenity sounds like it could have been an intro for Space Beeps
Love the arps galore on Mech Dance.