Recently I was messing around with the tiny DIY consoles a lot, such as Gamebuino, Arduboy, and ESPboy (even made a tracker for the latter). This led me to thinking how much things feels wrong in most of these, or that I'd like to be done in a different way. For one, they're all tied to a proprietary hardware that gets modified or obsoleted as the time goes, and today it is quite difficult to make a correctly functioning Gamebuino or Arduboy without a kit, using of the shelf parts. Like, you have to burn a custom bootloader with an ISP programmer, and the bootloader is not compatible with the modern AVR chip revisions - does not exactly feel like an Arduino based project anymore.

Eventually I came up with the thought: why not design a platform like these the way I'd like to see it - I totally capable to do it. Hence this idea was born, to make a virtual platform that is strictly 1-bit in the media output (visuals, sound), much like Arduboy, but that is prone to the hardware compatibility issues, like CHIP8, and can be both interesting OR easy to program. I plan to design it as an emulator (virtual machine), then make my own custom hardware implementation (MCU based, emulation driven as well). All open source, of course.

I would call this thing 1-BOY and steal the 1-bit forum header design for its own logo. I'm totally sure not many outside our community will get interested with it, but whatever. We deserved to have our own 1-bit platform, after all.

The basics are:

128x64 1-bit display, can be LCD, OLED or TFT in the hardware implementation (unified frame buffer access only, no direct control)
1-bit stereo sound
8 buttons (D-Pad, A/B, L/R shoulders)
Z80 core at some higher-than-normal frequency
64K of RAM
Programmable interrupts
Some extras

Yep, much like ZX Spectrum or TI calcs, but in a portable console shape and DIY. It could be programmed directly in Z80 assembly, as we like it, or in C using SDCC and a custom library to handle sprites etc. It does not consider huge games, because no one is going to make those for such a basic device anyways (but an overlay loading is considered in the extras).


Now the interesting question is the sound system. I can see plenty of ways how to design it in a most interesting way to explore it later - we basically can have anything we couldn't with the real hardware. However, unlike the hardware that could go insane bit flip frequencies, it will be always affected by the sample rate, and considering the hardware version of it is going to run at a less than stellar cheap MCU at first (something like 160-240 MIPS), it won't be too high.

Possible ideas I've had. I'm not sure which one to stick to:

1) A register with 8 output bits, each acting as a beeper. Two additional registers to control each of the bits, to direct it to the left, right, center, or mute. Like, %BBBBBBBB (8 beeper output), %LLLLLLLL and %RRRRRRRR (routing to L/R outputs). This way we could have 8 channels without the need to mix them, they're summed at the output. That's the old PDP-1 inspired way that had 4 mono channels in the early 1-bit music experiments.

2) Just two output bits, L/R, but with an optional reset counters that will drop it back to 0 after a given number of ticks since writing an 1. Basically a hardware narrow pulse technique. That is, you write 200 in the Lcounter, write 1 to the L channel, and it stays 1 for 200 CPU t-states.

3) Alternative implementation to 2, instead of traditional output bits just write a value to a counter, and it'll set output level for the given amount of time. 255 to keep 1 indefinitely, 0 to force output reset.

4) A buffered beeper. L/R bits, but you can feed them with new bits at any rate, and they'll get played back at a fixed rate. That's probably the most robust system for an emulator-based implementation, as we can set that fixed rate to, say, 44100, matching the actual sample rate, and we can also have a modified Z80 core with all t-states reduced to 1. However, I can't get my head around it yet, how difficult it would be in the actual use.

5) Any other ideas that would move sound generation away from Z80 core. I believe this is less interesting approach, as it leaves not much to explore and exploit. Something like a 3-8 chained PITs, much like PC speaker, but multichannel and with ability to set pulse duration.

A programmable timer, like, NMI or IRQ, can be also set to the emulation output sample rate (that may be configurable), so the software sound synth could be interrupt-driven, given the virtual Z80 have enough time to run it that frequent. But it works more towards Squeeker and Phaser like engines, kinda leaving out the pin pulse ones (depends on the sample rate).

27

(10 replies, posted in Sinclair)

Oh, sorry, here's the text dump. You can dump any module like that with File > Export command stream > Export text.

28

(10 replies, posted in Sinclair)

Wow. Sounds reasonable!

In meanwhile, I found one actual FUR module for the QuadTone engine. May come handy for tests.

29

(10 replies, posted in Sinclair)

Furnace does feature some kind of debug stream dump, which may be used for conversion purpose, although I'm not really understand what's going on there. For QuadTone it looks like this:

# Furnace Command Stream

[Information]
name: 
author: 
category: 
system: ZX Spectrum (beeper only, QuadTone engine)

[SubSongInformation]
name: 
tickRate: 60.000000

[SysDefinition]

[Stream]
>> TICK 0
  0: HINT_ARPEGGIO 0 0
  0: NOTE_ON 45 2
  1: HINT_ARPEGGIO 0 0
  1: NOTE_ON 40 2
  2: HINT_ARPEGGIO 0 0
  2: NOTE_ON 24 2
  3: HINT_ARPEGGIO 0 0
  3: NOTE_ON 31 2
  4: HINT_ARPEGGIO 0 0
  4: NOTE_ON 24 2
>> TICK 12
  0: NOTE_ON 57 2
  1: NOTE_ON 52 2
  2: NOTE_ON 24 2
  3: NOTE_ON 31 2
>> TICK 24
  0: NOTE_ON 43 2
  1: NOTE_ON 41 2
  2: NOTE_ON 24 2
  3: NOTE_ON 31 2
  4: NOTE_ON 24 2
>> TICK 36
  0: NOTE_ON 55 2
  1: NOTE_ON 53 2
  2: NOTE_ON 24 2
  3: NOTE_ON 31 2
>> TICK 48
  0: NOTE_ON 41 2
  1: NOTE_ON 43 2
  2: NOTE_ON 24 2
  3: NOTE_ON 31 2
  4: NOTE_ON 24 2

30

(10 replies, posted in Sinclair)

Yep, this one if from Furnace. The description says: 'another ZX Spectrum beeper system with full PWM pulses and 3-level volume per channel. It also has a pitchable overlay sample channel'.

A problem with Furnace, though, is that is has support for a lot of chips and platforms that is implemented inside the tracker only, i.e. you can't export some data/code and play it on the real hardware. I don't know about this engine, how exactly it has been designed (my bet it is does not exist as Z80 code and is not really within the actual possibilities), but for example, it has a PET support with the notes lower than 245 Hz, but without a proper exporter. So my guess is they're assuming it is possible, but at the moment it is a mis-named virtual target. Either engine has WAV export only.

31

(130 replies, posted in Sinclair)

Sorry, guys, was sick the whole holidays, and skipped the compo altogether. Congrats everyone for keeping it alive!

32

(16 replies, posted in Other Platforms)

v1.2 is up. It got a single step Undo, a file manager, and instrument pairing. That is, you can pair any instrument with any other, getting modulation effects. It increases polyphony to 8 voices, because why not - we don't often have a chance to do it in our 8-bit implementations.

33

(16 replies, posted in Other Platforms)

Promoted the current version to v1.11 with minor changes and fixes, as I have a number of bigger ones in the works.

34

(16 replies, posted in Other Platforms)

Wow, sounds sick!

Not too sure about the number keys, maybe a specific scenario to reproduce the issue? Does it happens all around, or at a particular screen such as order or pattern editor?

35

(16 replies, posted in Other Platforms)

You need to have /fonts/ and /data/ in the same directory with the executable, if they're not found, it won't be able to load fonts and will close. Missing ebt.cfg is just a warning, it will report it and continue to work. When you'll change something in the CONF for first time, it'll create the config file and stop giving this warning.

36

(16 replies, posted in Other Platforms)

I haven't tried it with Linux just yet, but it should be trivial, as it does not use any third-party components besides SDL2. So this untested makefile may work. Please try it if it is not too much hassle. I'll get to it eventually, but I don't have an easy to access Linux environment at the moment.

I also have a report it works just fine with WINE.

Edit: Actually, attempted to make it work. It compiles and starts, although it crashes on me right away, but so does 1tracker in the same install (lubuntu in VirtualBox). I uploaded the WIP in place of the release, you may try it out.

Edit: fixed it up some more, now it fully works under Linux.

37

(16 replies, posted in Other Platforms)

EBT has been updated to v1.1. It is easier to use on a PC now, as it uses a different control layout, and supports PC keyboard. A custom made keyboard technically can be also attached to the device, and it is possible to support it, which opens up interesting possibilities too.

Changes are:

- Play option removed from SONG screen
- Name and author fields are added to the song file, can be set from the SONG screen
- Squeeze function added to optimize song data
- Some waveforms tuned up to match the original wtbeep, to allow easy conversion between two
- Stereo panning reworked a bit, allowing 9 positions left-to-right instead of 3
- Default panning settings are added
- An option to swap the LFT/RGT buttons
- A crash course section added into the manual
- Two cursor colors swapped to make it more visible with blinking off
- Play/Stop info line is only shown while the RGT button is held down
- 32 extra waveforms added, including various noise and modulation effects
- Sound synthesizer and music player separated into two independent entities
- A standalone player code that stores data in the program memory

Hardware-specific:

- LovyanGFX display library supported
- 2.0 inch TFT display support (ST7789V) for a custom built EBTboy

SDL build specific:

- Irrelevant config options such as sound output device are not displayed
- 128x128 and 240x340 modes support, with 8x8 and 15x16 fonts
- Main control keys are remapped
- Direct keyboard support added, for entering numbers, letters, and better navigation

38

(16 replies, posted in Other Platforms)

While a new version in the works, a small demo of what it is capable of (at least). I tuned up the sound synthesis code to match up the wtbeep's waveforms closely, so it was easy to port Freezing Point.

https://www.youtube.com/watch?v=N1X9BQW1AZw

39

(16 replies, posted in Other Platforms)

Sure, I'm working on getting some demos made, as well as improving it even further. Don't have much time myself, but hopefully will do some music using it eventually.

40

(16 replies, posted in Other Platforms)

A new project of mine. A LSDJ-inspired tracker for a portable DIY device called ESPboy. The device is based on a cheap IoT microcontroller ESP8266, which is quite powerful (up to 160 MIPS), yet limited in the resources compared to many other similar devices. It uses a 128x128 color TFT screen, so the interface s even more crammed than the LSDJ's.

http://shiru.untergrund.net/temp1/ebt_ui.png

The software sound engine is vaguely connected to our 1-bit stuff: it is based on the wtbeep engine. It takes the best of it, and improves the sound quality using the device's power. It features four channels with a clean sound. It also features an actual volume and stereo left/center/right controls, so it is not really 1-bit anymore, but there are 4 volume levels only, and no volume envelopes, so it still sounds similar to the 1-bit stuff.

The tracker engine features single-channel patterns of variable lengths (you can mix up different lengths in an order position), and MOD-like effects with up to two effects per note.

The package includes the ESPboy binary, a Windows SDL build (should be easily portable to Linux and such, but not ready-to-use yet), the source code of course, and a detailed PDF instructions. Released under WTFPL.

No demo songs yet.

Download

Also, there is github, but it will be lagging behind I bit, I think.

41

(5 replies, posted in General Discussion)

Furnace tracker it is. It supports a gazillion of platforms. Not sure how did they get the low notes, tho, can't find a low level export there. Perhaps it is in-tracker only at the moment.

42

(3 replies, posted in Sinclair)

I think (not really sure) I've seen an editor that has been used to make this demo, but I can't recall where it potentially could've get it. Perhaps it was on a forum back in the day.

Edit: oh yeah, it is actually mentioned in the comments. The link is dead, but archive.org saves the day: https://zx-pk.ru/threads/5577-redaktor- … uzyki.html

43

(164 replies, posted in Sinclair)

Confirmed, the script got broken a bit during the recent updates. Re-uploaded the archive with a fixed one.

As we're focusing on actual old platforms that only has one bit to flip, and not many trying to do VSTs, I think, no one tried to do min/max. Although I believe it will sound exactly the same, just having an unwanted DC offset that will result in a pop at beginning and end of a track.

45

(4 replies, posted in Sinclair)

Not really related, but a nice visualization of what is going on for each of the channels: https://www.youtube.com/watch?v=F1e2MOeo5eU

I think we should try to extract at least the sound loop code somehow, and replace everything else with the traditional pattern structure. This way we'll get the iconic sound at least, even though with a high memory consumption.

46

(164 replies, posted in Sinclair)

it certainly should be possible at cost of some sound quality. IM2 is used there to avoid having a loop counter inside the sample loop, because the whole thing is very heavy on register use. The counter instead located inside IM2 handler and it breaks the sample loop once it played enough frames.

47

(164 replies, posted in Sinclair)

Yeah, it has quite a non-trivial exit routine, overlooked some things. Fixed, re-download the main archive.

48

(164 replies, posted in Sinclair)

Another update. In order to cover more of the digital/sample-based Spectrum engines I'm doing some changes in the sound backend. I encapsulated Game_Music_Emu into an intermediate library called PlayLayer. At the moment it only uses GME, but the GME has been modified by me, so it is forked from the main version. Now there is Covox, Stereo Covox, and SounDrive support in GME's AY emulator, so you can use these devices in Sample Tracker engine now.

PlayLayer's purpose is to simplify adding other container formats without adding them into GME. I can just add any emu/player I want into this library, and it'll decide whatever should be used to play a data chunk. The intent behind it is that in order to support 128K+ sample-based engines I need to use a container other than AY, and a regular emulator Z80/SNA snapshot seems to be a reasonable choice, so this may be added eventually, without integrating it inside GME (which would be a major headache).

49

(164 replies, posted in Sinclair)

Fixed it, replace this file in the /engines/ directory.

50

(164 replies, posted in Sinclair)

Yeah, it is a bug. Actually I didn't test TAP/SCL exports, and I forgot they (the BASIC part) were hard-coded for #8000 blocks.

Will fix it soon. It is just not very easy to generate BASIC code from a program, it has quite a complicated structure.

For now you can MERGE the loader and replace the 32768 to 25088, it'll work.