Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Music on hardware in real-time via serial interface support / Motorola 6800 Client version #7

Open
MythalCorp opened this issue Sep 29, 2023 · 1 comment

Comments

@MythalCorp
Copy link

Hello

AT2 permit to play Music on hardware in real-time via serial interface and a Z80 client launched on the Amstrad
Do you think on day to write a Motorola 68000 version of this Z80 client ?
https://www.julien-nevo.com/arkostracker/index.php/music-on-hardware-in-real-time/

I think this feature is great, and listening to the music directly on the original material is wonderfull !
I am unfortunately not an experienced coder, just a beginner musician, but if I can help test it is with pleasure!

@MythalCorp MythalCorp changed the title Music on hardware in real-time via serial interface / Motorola 6800 Client version Music on hardware in real-time via serial interface support / Motorola 6800 Client version Sep 29, 2023
@ggnkua
Copy link
Owner

ggnkua commented Sep 29, 2023

Hi there,

From a quick glance it doesn't seem too difficult to do. Provided that we can lower the baud rate to something that the ST can handle, like 19200 or (more difficult) 38400 baud. The communication protocol also doesn't seem difficult either.

To be honest, I'm not really motivated to do this kind of work right now. But I'm not completely dismissing the idea. So I will keep the ticket open, in the hopes of me or someone else implementing the ST client for this.

Just for reference, I'll copy the format description below:

= Format description

This describes the format when PSG registers are sent from AT2 to a client via serial communication.

All 16/32 bits numbers are little-endian encoded.

== Initialization

This can be called at any time to specify the hardware. It should be sent at least once before a first frame is played.

 db #ff
 dw replay frequency in hz (50, 25, etc.).
 db psgCount (>=1)

For each PSG:

 dd <32 bits little-endian PSG clock> (1000000 for an Amstrad CPC).
 
== Frame

One frame may contain several PSGs data.
PSGs that are not encoded, though unlikely, are considered the same values are before.

The frame management _could_ be diff-based. However, this would be problematic in case of frame-skip. Nowadays serial connections are fast, this shouldn't be a bother.

The hardware envelope is always sent. It is up to the client to dismiss it if the R13 didn't change, unless Retrig is set.

 db #fe

Loop as long as `PsgIndex != 255`:

 db psg Index (>=0) or 255 = end
 db r0, r2, r4              ;LSB of software periods.
 db r11, r12                ;Hardware periods.
 db r1 | r3 << 4            ;MSB of software period for channel 1 and 2.
 db r8_4b | r5 << 4         ;Volume channel 1 (4b only) + MSB of software period for channel 3.
 db r9_4b | r10_4b << 4     ;Volume channel 2 + 3 (4b only).
 db r6 | r8_5 << 5 | r9_5 << 6 | r10_5 << 7  ;Noise + bit 5 of each volume.
 db r7_6b + retrig? << 5    ;Mixer (6 bits) + Retrig? (1 if yes).
 db r13                     ;Hardware envelope (0-15).

== Stop sound

 db #fd

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants