General Sound : ZX Spectrum
GS is a soundcard, designed for playback of musical modules and individual samples (sound effects).
GS modules are standard 4-channels MOD modules from Amiga and PC. GS samples - both Amiga signed samples and PC unsigned samples.
MOD files player in GS is practically a full analogue of ProTracker on Amiga, and was designed with intensive use of ProTracker v2.1A sources. It supports the whole list of ProTracker`s commands except two ones:
- E01 Filter on This command is Amiga-specific, enables low-pass filter.
- EFX Invert Loop. I haven't seen a player, who supports this command. It's possible, however, that it is supported in some old players.
GS is, in fact, microprocessor complex with its own CPU, ROM, RAM and I/O ports, and it is absolutely independent from Spectrum`s CPU, what makes you able to, for example, load your favourite module, reset Spectrum, load assembler and to write masterpieces with your favourite music in the back-ground. Software in GS ROM plays module invisibly for you. Programming for GS could be squeezed to just several commands, as: Play module, Set global
volume, run sample #09 in channel #02 etc.
Interface with Spectrum
For communication with the rest of the world, GS has 4 registers:
- Command register - it's - right - register of commands, it is port with address 187 (#BB), which is write-enabled. In this port you should write your commands to GS.
- Status register - read-enabled port with address equal to 187 (#BB). Bits of the register: 7 - flag of data, 0 - flag of commands.
This register allows you to determine the GS status, in particular you could know, whether you are able to read or write next data byte, or to give next command etc.
- Data register - port 179 (#B3), available for writing. In this port Spectrum writes data, for example, arguments of commands.
- Output register - port 179 (#B3), available for reading. Spectrum read data from GS from this register.
Command bit in status register is set by hardware after current command has been stored in commands` register. Only GS could reset it to 0, which is a signal about the current stage of processing of a command.
Data bit in status register could be set or reset either by Spectrum's will, or by GS` will: it is set to 1 by hardware when Spectrum writes in data register, and it is reset to 0 after GS has read data from data register. When GS writes in output register, data bit is set to 1 by hard-ware. And after reading by Spectrum from this port, the bit is reset by hardware to 0.
In spite of data register and output register are situated by the only port address, they are two independent registers. Value, which has been stored in one of this registers stays unchanged until new record.
The value of data bit is undefined very often, and it is impossible to make any guesses about its value.
Files for download
- gs-en.zip 33.8kB (2001-09-16 20:10)
- [en] Detailed hardware description.
- gs-ru.zip 22.3kB (2001-01-11 18:22)
- [ru] Detailed hardware description.
- gs104rom.zip 15.1kB (1998-12-06 14:27)
- ROM 1.04 for General Sound.
Links to other pages
- [ru] Short description.