{"id":13838974,"url":"https://github.com/electrified/rc2014-ym2149","last_synced_at":"2026-01-24T23:28:21.628Z","repository":{"id":65726658,"uuid":"87002951","full_name":"electrified/rc2014-ym2149","owner":"electrified","description":"KiCad schematics and gerbers for a YM sound card for the RC2014. See it in action here: https://www.youtube.com/watch?v=-iLwi9FagFE","archived":false,"fork":false,"pushed_at":"2025-07-06T12:32:35.000Z","size":20362,"stargazers_count":67,"open_issues_count":2,"forks_count":17,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-07-06T13:37:24.136Z","etag":null,"topics":["kicad","pcb-layout","rc2014","retrocomputing","z80"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/electrified.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-04-02T17:28:16.000Z","updated_at":"2025-07-06T12:32:38.000Z","dependencies_parsed_at":"2024-01-15T19:45:41.108Z","dependency_job_id":"f71c3c24-d292-43e6-8fc8-a073f5d18585","html_url":"https://github.com/electrified/rc2014-ym2149","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/electrified/rc2014-ym2149","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electrified%2Frc2014-ym2149","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electrified%2Frc2014-ym2149/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electrified%2Frc2014-ym2149/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electrified%2Frc2014-ym2149/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/electrified","download_url":"https://codeload.github.com/electrified/rc2014-ym2149/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electrified%2Frc2014-ym2149/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28738991,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T22:12:27.248Z","status":"ssl_error","status_checked_at":"2026-01-24T22:12:10.529Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kicad","pcb-layout","rc2014","retrocomputing","z80"],"created_at":"2024-08-04T16:00:43.703Z","updated_at":"2026-01-24T23:28:19.410Z","avatar_url":"https://github.com/electrified.png","language":"HTML","funding_links":[],"categories":["Hardware"],"sub_categories":["Sound"],"readme":"# YM2149F/AY-3-8190 Sound card for the RC2014 computer - Revision 6.1\n\nThe `head` of this repository contains the latest version - currently **Rev 6.1**. Please check the version of your board, and select the appropriate tag from the right to get the documentation for your board. e.g [go here for the **Rev 5** (most common) docs](https://github.com/electrified/rc2014-ym2149/tree/4b8af5396633bc87178b81087cec0f71b8307908)\n\n![Picture of the board](./R61-board-pic.jpg?raw=true)\n\nVideo demonstration: https://www.youtube.com/watch?v=-iLwi9FagFE\n\n## The board\nThis is a YM2149F/AY-3-8910 sound card for the RC2014 Z80 8-bit computer. It adds the ability to play music on your RC2014!\n\n## What can you use this for?\n* Playing music for MSX or ColecoVision Super Game Module compatible software (you may also want a TMS9918A board)\n* Playing music ripped from spectrum games\n* Playing Spectrum Protracker 2/3 and tunes in MYM format\n* Adding music to your own games\n* Making music from BASIC or ASM!\n\n\n## Features\n\n* Stereo Line out, with golden ratio mixer.\n* Header for the 2 8-bit I/O ports. These could be used for reading from joysticks, additional serial ports, LED indicators etc.\n* Both YM2149F and AY-3-8910 ICs may be used\n* Supported in RomWBW\n* Possible to jumper to the same IO port as the ZX Spectrum AY\n* Known to work on the standard RC2014 setup, as well as on Steve Cousin's SC126 and SC130\n* Divides the RC2014 clock by 2 or 4 using flip flops to bring it under the 2Mhz max clock speed of the AY.\n* Supports enabling the YM2149F's internal clock divider. This means that bus speeds up to 16Mhz could be supported without overclocking the chip. (AY does not have this feature)\n* [George Beckett](https://twitter.com/markgbeckett/) has done some great work getting the board working on the [Minstrel 4th Jupiter Ace compatible computer](https://www.thefuturewas8bit.com/minstrel4th.html). See [his repository here](https://github.com/markgbeckett/jupiter_ace/tree/master/rc2014_sound_card) for information. \n\n## History\nThe Yamaha YM2149F and General Instrument AY-3-8910 are popular sound chips that were used in a wide variety of computers and arcade machines in the 1980s and 1990s. The most notable of those being the ZX Spectrum 128, Atari ST and MSX computers.\n\n## Construction Steps\n\n0. If you have bought one of Spencer's kits, obtain a YM2149 chip from your local friendly eBay seller :)\n1. Verify the components supplied in the kit match up with [bill of materials](https://github.com/electrified/rc2014-ym2149/blob/master/README.md#bill-of-materials)\n2. Solder the components to the board, matching the components in the [BOM](https://github.com/electrified/rc2014-ym2149/blob/master/README.md#bill-of-materials) to the component references printed on the PCB, starting with the lowest height ones first e.g. bypass capacitors and resistors, then moving on to IC sockets, pin headers and do the electrolytic capacitors and output jack last.\n3. Insert the ICs in their sockets. The component reference marking on the PCB (e.g. U1) is nearest to pin 1 for all ICs\n4. If you have a Z80 based system, configure the jumpers on the board so it looks like the picture in the README. This will ensure it is at the right IO address.\n5. Insert board into backplane/SBC\n6. Boot into RomWBW ensure you have the \"tune.com\" application (it's not included in the ROM drive but should be on the disk images)\n7. Find some music to play. There are some example files in https://github.com/wwarthen/RomWBW/tree/dev/Source/Apps/Tune/Tunes that you could transfer to the system.\n8. Use tune.com to play the music file. If you download the RomWBW*-Package.zip corresponding to whatever version of RomWBW you are using the from the releases page here https://github.com/wwarthen/RomWBW/releases, the tune.com executable will be in the `Binary/Apps` directory.\n\n## Bill Of Materials\n\n![Picture of the board](./r61-board-render.png?raw=true)\n\nQty|Schematic Reference|Description\n---|-------------------|-----------\n2|U1 U2| 16 pin DIP socket 2.54 mm pin pitch, 7.62 mm wide\n1|U5|\t40 pin DIP socket, 2.54mm pin pitch, 15.24mm wide\n1|U5|\tYamaha YM2149F or General Instrument AY-3-8910\n1|U4|\t74HCT74\n2|U3 U4| 14 pin DIP socket 2.54 mm pin pitch, 7.62 mm wide\n1|U3|\t74HCT00\n2|U1 U2| 74HCT138\n2|R6 R7| 1k6 ohm 1/4 watt metal film resistor\n2|R4 R5| 1k ohm 1/4 watt metal film resistor\n3|R1 R2 R3|\t3k ohm 1/4 watt metal film resistor\n1|P1|\t40 pin right angled 2.54mm header\n1|CON1|\t3 or 5 pin 3.5mm PCB mount jack socket (e.g. SJ1-3525N - mouser part 710-860020472001)\n2|C6 C7| 4.7uF electrolytic capacitor\n5|C1 C2 C3 C4 C5|\t0.1uF ceramic capacitor 2.54 mm pin pitch\n7|JP1-5 JP8-JP9| 3 x 1 straight pin header 2.54 mm pin pitch\n1|JP7| 2 x 1 straight pin header 2.54 mm pin pitch\n1|JP6| 9 x 2 straight pin header 2.54 mm pin pitch\n1|J2| 9 x 2 straight pin header 2.54 mm pin pitch\n1|X1| Half size Oscillator socket (or DIP-8 socket with middle pins removed)\n5|Various|Jumpers\n\nThe majority of the components are widely available, however both the AY-3-8910 and YM2194F are unfortunately not in production any more, but reclaimed chips are available fairly plentifully on eBay from suppliers in China. I would suggest using a standard 40 pin DIL socket for the AY as they are more accommodating to bent/soldered pins than a turned pin ones.\n\n## Addressing\n\nThe board contains a set of jumpers to select the address at which the sound chip will respond to commands.  The jumpers settings are described in detail below.\n\n\"Normal\" or MSX addressing mode is recommended.\n\n### Normal/MSX/ColecoVision addressing\nMSX mode uses standard 8-bit port addressing. This board allows the base address to be any value from 00-F0 (MSX uses A0 and ColecoVision SGM uses 50 for the PSG's base address). Different ports in the lower nybble are used for reading and writing the address and data registers.  Writing to port `X0h` selects the PSG register. Writing to port `X1h` writes the selected PSG register value and reading port `X2h` reads the selected PSG register value.\n\ni.e. for MSX:\nConfigure base address: A0h\nRegister write address: A0h\nData write address: A1h\nData read address: A2h\n\nand ColecoVision\nConfigure base address: 50h\nRegister write address: 50h\nData write address: 51h\nData read address: 52h\n\n### ZX Spectrum addressing\nZX Spectrum mode uses an uncommon 16-bit I/O addressing scheme for the PSG. This is possible since the Z80 puts the value of the B register on the upper 8 bits of the address bus when performing an `IN r, (C)` or `OUT (C), r` instruction.  Setting `A15` to `1` and `A1` to `0` enables the PSG and `A14` distinguishes between PSG address and data registers. To select a PSG register, set `BC` to `FFFDh` and use `OUT (C), r` to select the address in r. To write a value to the selected PSG register set `BC` to `BFFDh` and use `OUT (C), r` to write the value in r. To read the selected PSG register value, set `BC` to `FFFDh` and use `IN r, (C)`. Note that r must be A, D, E, H, or L since B and C are required for addressing.  Also note that `OUT (n), A` and `IN A, (n)` instructions won't work since they put the value of A on the upper 8 bits of the address bus.\n\n\n### Compatibility with Rev 5\nREV6 no longer supports the `D0/D8` addresses used by default in REV5 and earlier.  REV6 introduced MSX-compatible addressing and supporting addresses used by REV5 and earlier would have required additional chips. This seems like a fair tradeoff since existing software that uses the original default addresses for this board is minimal compared to software that uses the MSX or Spectrum addressing schemes.\n\nNote: Pin 1 on each jumper is identified by having square pad.\n\n### JP1-JP3\nSelect between MSX and ZX Spectrum decoding. All 3 jumpers should all be set to either MSX or ZX Spectrum mode. For Spectrum mode, JP6 must also be set in position 17-18.  Mixing modes on different jumpers will result in nonsensical address decoding.\n\npins                 |description\n---------------------|--------------\n1-2 (Left Position)  | Normal/MSX/ColecoVision\n2-3 (Right Position) | ZX Spectrum\n\n\n### JP5\nSelects the upper or lower half of the address range selected by JP6.\n\npins                 | description\n---------------------|------------\n1-2 (Left position)  | Upper (odd) half\n2-3 (Right position) | Lower (even) half\n\n### JP6\nSelects the base address for MSX addressing mode. For Spectrum addressing, the rightmost position (17-18) must be used.  MSX addressing can use any base address from 00-F0, where JP6 selects the 3 most significant bits.  JP5 is used to set `A4`, thus selecting the lower or upper half of the range chosen by JP5.\n\npins|with JP5 on 1\u00262\n----|------------\n1-2 (Bottom most position) | 0x00\n3-4 | 0x20\n5-6 | 0x40\n7-8 | 0x60\n9-10 | 0x80\n11-12 | 0xA0 (MSX Compatible)\n13-14 | 0xC0\n15-16 | 0xE0\n17-18 (Top most position) | Spectrum Mode\n\npins|with JP5 on 2\u00263\n----|------------\n1-2 (Bottom most position) | 0x10\n3-4 | 0x30\n5-6 | 0x50 (ColecoVision SGM compatible)\n7-8 | 0x70\n9-10 | 0x90\n11-12 | 0xB0\n13-14 | 0xD0\n15-16 | 0xF0\n17-18 (Top most position) | Spectrum Mode\n\n### JP7\n\nYM2149 only, internally halve clock if jumpered\n\n### JP8\n\nUse bus clock or onboard oscillator\n\npins|description\n----|------------\n1-2 | Oscillator\n2-3 | Bus clock\n\n\n### JP9\nClock divisor. Divides the bus or oscillator \n\npins|description\n----|------------\n1-2 | Divide by 2\n2-3 | Divide by 4 - Default\n\n\n## Outputs\n\nCON1 - 3.5mm audio out\n\nJ2 - 2 8 bit I/O ports\n\n\n## How to use from BASIC\n\nSee the BASIC programs in ```player/test```. ```descend.bas``` plays some descending tones, ```io_in.bas``` demonstrates reading from the IO port, and ```io_out.bas``` demonstrates writing to an IO port.\n\n## How to use from RomWBW\n\nWayne has incorporated a player called \"Tune\" into RomWBW that will play PT2, PT3 and MYM files. See here for the source: https://github.com/wwarthen/RomWBW/tree/master/Source/Apps/Tune. It should be present within RomWBW disk images.\n\nAlternatively start the Microsoft BASIC interpreter mbasic, and refer to the above BASIC examples.\n\n## MSX Configuration\n\n#A0 (write) \tRegister write port\n#A1 (write) \tValue write port\n#A2 (read) \tValue read port\n\n## Sources for music to play\n\nZXArt is my favourite site: https://zxart.ee/eng/music/mainpage/\n\nhttp://zxtunes.com/ is another massive collection.\n\nhttp://ftp.kameli.net/pub/mym/ has a collection of MYM files\n\nThis tool compresses YMs to MYMs, which makes a lot of music available: http://osdk.org/index.php?page=documentation\u0026subpage=ym2mym although your mileage may vary, I found some YMs weren't convertible.\n\nThis is a large archive of YM tunes to try with the above tool: ftp://ftp.modland.com/pub/modules/YM/\n\nThe CPC Power site has a lot of Amstrad YMs: https://www.cpc-power.com/index.php?page=database\n\nThere are some PT2s, PT3s and YMs on Sergei Bulba's site: http://bulba.untergrund.net/music_e.htm (although a lot of tunes in other formats)\n\n## Credits\n* Some ideas and the golden ratio output mixing were taken from the Melodik 2 design here: http://hw.speccy.cz/melodik2.html\n* MSX decoding, many thanks to J.B. Langston\n\n## License\n\nCopyright Ed Brindley 2017-2022.\n\nThis source describes Open Hardware and is licensed under the CERN-OHL-P v2\nYou may redistribute and modify this documentation and make products using it under the terms of the CERN-OHL-P v2 (https:/cern.ch/cern-ohl). This documentation is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN-OHL-P v2 for applicable conditions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectrified%2Frc2014-ym2149","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felectrified%2Frc2014-ym2149","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectrified%2Frc2014-ym2149/lists"}