{"id":44664283,"url":"https://github.com/ifilot/p2000t-ram-expansion-board","last_synced_at":"2026-02-15T00:14:57.198Z","repository":{"id":201051960,"uuid":"706846377","full_name":"ifilot/p2000t-ram-expansion-board","owner":"ifilot","description":"RAM expansion board for the P2000T","archived":false,"fork":false,"pushed_at":"2025-08-09T13:09:15.000Z","size":14389,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-09T15:07:14.112Z","etag":null,"topics":["hardware","kicad","p2000t","philips","philips-p2000t","ram"],"latest_commit_sha":null,"homepage":"https://philips-p2000t.nl/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ifilot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-10-18T18:21:28.000Z","updated_at":"2025-04-05T19:17:34.000Z","dependencies_parsed_at":"2023-10-23T21:31:51.872Z","dependency_job_id":"c6e6e5d5-7ff1-453e-b4c9-83bc257511bb","html_url":"https://github.com/ifilot/p2000t-ram-expansion-board","commit_stats":{"total_commits":22,"total_committers":1,"mean_commits":22.0,"dds":0.0,"last_synced_commit":"f55488d862e94e1aaee60823f00f9673ad51b8f1"},"previous_names":["ifilot/p2000t-ram-expansion-board"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/ifilot/p2000t-ram-expansion-board","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifilot%2Fp2000t-ram-expansion-board","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifilot%2Fp2000t-ram-expansion-board/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifilot%2Fp2000t-ram-expansion-board/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifilot%2Fp2000t-ram-expansion-board/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ifilot","download_url":"https://codeload.github.com/ifilot/p2000t-ram-expansion-board/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifilot%2Fp2000t-ram-expansion-board/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29461560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T22:42:09.113Z","status":"ssl_error","status_checked_at":"2026-02-14T22:42:05.053Z","response_time":53,"last_error":"SSL_read: 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":["hardware","kicad","p2000t","philips","philips-p2000t","ram"],"created_at":"2026-02-15T00:14:56.608Z","updated_at":"2026-02-15T00:14:57.192Z","avatar_url":"https://github.com/ifilot.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# P2000T RAM expansion board\r\n\r\n[![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/ifilot/p2000t-ram-expansion-board?label=version)](https://github.com/ifilot/p2000t-ram-expansion-board/releases/tag/v0.1.1)\r\n[![Build](https://github.com/ifilot/p2000t-ram-expansion-board/actions/workflows/build.yml/badge.svg)](https://github.com/ifilot/p2000t-ram-expansion-board/actions/workflows/build.yml)\r\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\r\n[![License: CC-BY-NC-SA-4.0](https://img.shields.io/badge/license-CC--BY--NC--SA--4.0-lightgrey)](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en)\r\n[![discord](https://img.shields.io/discord/1167925678868541451?logo=discord\u0026logoColor=white)](https://discord.gg/YtzJTWYAxy)\r\n\r\n## Table of contents\r\n\r\n* [Purpose](#purpose)\r\n* [Memory lay-out](#memory-lay-out)\r\n* [Installation](#installation)\r\n* [Testing the expansion board](#testing-the-expansion-board)\r\n* [Schematic](#schematic)\r\n* [Bill of materials](#bill-of-materials)\r\n* [Testing bank switching in BASIC](#testing-bank-switching-in-basic)\r\n* [Files](#files)\r\n* [Alternative RAM expansions](#alternative-ram-expansions)\r\n  * [SMD-128KiB version](#smd-128kib-version)\r\n  * [SMD-CPLD-128KiB version](#smd-cpld-128kib-version)\r\n  * [SMD-CPLD-512KiB version](#smd-cpld-512kib-version)\r\n  * [THT-1056 KiB expansion](#tht-1056-kib-expansion)\r\n  * [THT-2080 KiB expansion](#tht-2080-kib-expansion)\r\n* [License](#license)\r\n\r\n\u003e [!TIP] \r\n\u003e Have questions or comments about the **P2000T RAM expansion**? Join\r\n\u003e the conversation and chat with the developers on our [Discord\r\n\u003e server](https://discord.gg/YtzJTWYAxy).\r\n\r\n## Purpose\r\n\r\nThis repository provides several RAM expansion boards for the Philips P2000T,\r\nranging from 64 KiB to over 2 MiB. Options vary in complexity (THT, SMD, CPLD),\r\nso choose a board that fits your soldering skills and tools. A RAM tester\r\nutility is included to verify proper installation and functionality after\r\nassembly.\r\n\r\n\u003e [!IMPORTANT]\r\n\u003e This repository includes various RAM expansion PCBs for the P2000T. Your\r\n\u003e choice should depend on your soldering skills (THT or SMD) and available\r\n\u003e tools (e.g. CPLD programmer). Review this README to find a board that\r\n\u003e matches your comfort level before starting a build. \r\n\r\n![ram expansion board](img/ram_expansion_placement_02.jpg)\r\n\r\n## Memory lay-out\r\n\r\nThe memory lay-out of the P2000T is organized as shown in the table below\r\n\r\n| Address       | Description      |\r\n| ------------- | ---------------- |\r\n| 0x0000-0x1000 | Monitor rom      |\r\n| 0x1000-0x4FFF | Cartridge        |\r\n| 0x5000-0x5FFF | Video memory     |\r\n| 0x6000-0x9FFF | RAM memory       |\r\n| 0xA000-0xDFFF | 16 KiB expansion |\r\n| 0xE000-0xFFFF | 8 KiB banks      |\r\n\r\nFor the default 16 KiB stock model, only the memory at `0x6000-0x9FFF` is\r\navailable. The most simple expansion board adds 64k memory such that an\r\nadditional 16 KiB of RAM is available at `0xA000-0xDFFF` and another 48 KiB\r\nusing bank switching. Bank switching means that you can only access 8 KiB of the\r\n48 KiB at a time, depending on the value of a register which can be accessed via\r\nan `OUT` instruction at `0x94`. This register can hold values of `0-5`,\r\namounting to 6x8 KiB = 48 KiB of bankable memory.\r\n\r\n## Installation\r\n\r\nTo install the expansion board, you need to plug in the expansion board on the\r\ncorresponding expansion 2x20 male pin header on the male board. This pin header\r\nis found directly behind the cartridge slots. Furthermore, you need to solder\r\na GND and a 5V line onto the power PCB (see image below) and insert that in the\r\nscrew terminal of the expansion board.\r\n\r\n\u003e [!WARNING]  \r\n\u003e Please check carefully that the polarity is correct. Although the board comes\r\n\u003e with reverse polarity protection in the form of a diode, it is always better\r\n\u003e to check twice before turning on the power.\r\n\r\nIn the image below, you see a GND (black) and a 5V (red) line attached to the\r\npower PCB. Please ensure you solder the lines to the correct pins and check\r\nwith a multimeter before connecting to the RAM expansion board.\r\n\r\n![attaching GND and 5V wire to power PCB](img/ram_expansion_power.jpg)\r\n\r\nConsult the image below for the correct voltages between the pins.\r\n\r\n![voltages on the power PCB](img/voltage_indicator_power_rail.png)\r\n\r\n\u003e [!WARNING]  \r\n\u003e Please check with a multimeter that you did not short-circuit any of the power\r\n\u003e lines on the POWER PCB. Please check this at least two times before turning on\r\n\u003e your P2000T. Short-circuiting of any of the power rails can cause permanent\r\n\u003e damage your machine.\r\n\r\n## Testing the expansion board\r\n\r\nThis repository comes bundled with a RAM testing utility. Write the RAM testing\r\nutility to a SLOT1 cartridge and boot your P2000T with this program in SLOT1.\r\nThe RAM testing utility will perform an extensive test of the memory and show\r\nany errors it encounters.\r\n\r\n![completed RAM test](img/ramtester.png)\r\n\r\n## Schematic\r\n\r\nThe schematic for the RAM expansion board is shown below. The ram expansion\r\nboard essentially hosts two 32 KiB RAM chips and a bank register. Using a small\r\nset of additional logic chips, the line decoding and bank switching is handled.\r\n\r\n![voltages on the power PCB](pcb/p2000t-ram-expansion-board/p2000t-ram-expansion-board.svg)\r\n\r\n## Bill of materials\r\n\r\n* 1x74HC00 (quad NAND-gate)\r\n* 1x74HC04 (hex inverter)\r\n* 1x74HC32 (quad OR-gate)\r\n* 1x74HC157 (quad 2-input multiplexer)\r\n* 1x74HC173 (quad positive edge triggered D-type flip-flop)\r\n* 1x74HC688 (8-bit magnitude comparator)\r\n* 1x74HC245 (octal bus transceiver)\r\n* 2x62256 (32 KiB SRAM)\r\n* 1x220uF capacitor (100uF also works)\r\n* 8x0.1uF capacitor\r\n* 1x1N4148 diode\r\n* 1x 40 pin female pin header (2x20 pins; 2.54mm spacing)\r\n* 1x screw terminal\r\n\r\n**Unpopulated PCB**\r\n\r\n![Unpopulated RAM board](img/ram_expansion_board_01.jpg)\r\n\r\n**Populated PCB**\r\n\r\n![Populated RAM board](img/ram_expansion_board_02.jpg)\r\n\r\n## Testing bank switching in BASIC\r\n\r\nIf you want to test the bank switching functionality in BASIC, you can use\r\nthe following instructions after booting the machine.\r\n\r\nFirst, we need to set the top of BASIC to `0x9000`.\r\n\r\n```\r\nCLEAR 50,\u0026H9000\r\n```\r\n\r\nThe reason we do this is to ensure that the stack is not residing at the top 8\r\nKiB because those bytes will become inaccessible after bank switching. Next, we\r\nwill first write a value to memory address `0xE000`, check that this value is\r\nproperly written, change to another bank and read from the same memory address.\r\nA different value should be returned (typically 0). Next, we write a different\r\nvalue to the `0xE000` and change bank to the initial bank. The original value\r\nshould now be correctly retrieved. The procedure is performed using the\r\nfollowing (very small) snippet of BASIC code.\r\n\r\n```\r\n10 POKE \u0026HE000,42\r\n20 PRINT(PEEK(\u0026HE000))\r\n30 OUT \u0026H94,1\r\n40 PRINT(PEEK(\u0026HE000))\r\n50 POKE \u0026HE000,43\r\n60 OUT \u0026H94,0\r\n70 PRINT(PEEK(\u0026HE000))\r\n```\r\nAfter entering in these instructions, type `RUN`. The output of this code should\r\nbe something similar to the code as shown below. The second value might be\r\npotentially different, depending on earlier memory operations, though is\r\nexpected to be a zero on a fresh boot of the machine.\r\n\r\n```\r\n42\r\n0\r\n42\r\n```\r\n\r\n## Files\r\n\r\n* [KiCad schematics](pcb/p2000t-ram-expansion-board)\r\n* [RAM tester utility](ramtester)\r\n\r\n## Alternative RAM expansions\r\n\r\n### SMD-128KiB version\r\n\r\nNext to the 64 KiB memory expansion using\r\n[DIP](https://en.wikipedia.org/wiki/Dual_in-line_package) chips, there is also a\r\n128 KiB memory expansion using\r\n[SMD](https://en.wikipedia.org/wiki/Surface-mount_technology) chips. Because of\r\nthe typical lower price of this last category of chips, this memory expansion is\r\na bit cheaper to produce. It does require you to be proficient in soldering on\r\nSMD components.\r\n\r\nThe 128 KiB memory expansion uses a single `CY62128ELL-45SX` 128 KiB memory\r\nchip. The lower 16 KiB of this chip can be accessed at `0xA000-0xDFFF`. The\r\nremaining 112 KiB are available as 14 banks of 8 KiB each at `0xE000-0xFFFF`.\r\nSimilar to the other memory expansion boards, bank switching proceeds by writing\r\na value to I/O port `0x94`. One can also read back the current bank from this\r\nport.\r\n\r\nThe source files for this board can be found\r\n[here](pcb/p2000t-ram-expansion-board-128kb-smd/).\r\n\r\n**Unpopulated PCB**\r\n\r\n![Unpopulated RAM board](img/ram_expansion_board_128_01.jpg)\r\n\r\n**Populated PCB**\r\n\r\n![Populated RAM board](img/ram_expansion_board_128_02.jpg)\r\n\r\n**Installed PCB**\r\n\r\n![Installed 1056 KiB RAM board](img/ram_expansion_board_128_03.jpg)\r\n\r\n### SMD-CPLD-128KiB version\r\n\r\nTo cut down costs even further, there is also a CUPL version. Besides the\r\n`CY62128ELL-45SX`, the PCB only hosts one other chip: a `ATF1502`. All glue\r\nlogic required for the RAM expansion board is basically programmed on this chip.\r\n\r\nThe source files for this board can be found\r\n[here](pcb/p2000t-ram-expansion-board-128-512-smd-cpld).\r\n\r\n**Unpopulated PCB**\r\n\r\n![Unpopulated RAM board](img/ram_expansion_board_128_cpld-01.jpg)\r\n\r\n**Populated PCB**\r\n\r\n![Populated RAM board](img/ram_expansion_board_128_cpld-02.jpg)\r\n\r\n### SMD-CPLD-512KiB version\r\n\r\nMoving beyond the 128 KiB limit, there is also a versatile SMD-type board\r\nthat admits 1-4 `CY62128ELL-45SX` 128 KiB memory chips.\r\n\r\nThe source files for this board can be found\r\n[here](pcb/p2000t-ram-expansion-board-128-512-smd-cpld).\r\n\r\n**Installed PCB**\r\n\r\n![Installed RAM board](img/ram_expansion_board_512_01.jpg)\r\n\r\n**Populated PCB**\r\n\r\n![Populated RAM board](img/ram_expansion_board_512_02.jpg)\r\n\r\n### THT-1056 KiB expansion\r\n\r\nThis board uses a single 32 KiB static RAM chip to provide 2x16 KiB on\r\n`0xA000-0xDFFF` and two 512 KiB static RAM chips to provide another 128x8 KiB on\r\n`0xE000-0xFFFF`. The way this board works is very similar to the regular 64 KiB\r\nboard. The highest bit in the bank register toggle the 16 KiB banking while the\r\nlower 7 bits provide the banking for the 8 KiB of memory.\r\n\r\nThe source files for this board can be found\r\n[here](pcb/p2000t-ram-expansion-board-1056kb/).\r\n\r\n**Unpopulated PCB**\r\n\r\n![Unpopulated RAM board](img/ram_expansion_board_1056_04.png)\r\n\r\n**Populated PCB**\r\n\r\n![Populated RAM board](img/ram_expansion_board_1056_05.png)\r\n\r\n**Installed PCB**\r\n\r\n![Installed 1056 KiB RAM board](img/ram_expansion_board_1056_01.jpg)\r\n\r\n### THT-2080 KiB expansion\r\n\r\nThis board uses a single 32 KiB static RAM chip to provide 2x16 KiB on\r\n`0xA000-0xDFFF` and four 512 KiB static RAM chips to provide another 256x8 KiB\r\non `0xE000-0xFFFF`. This board requires two bank registers, one 8-bit bank\r\nregister exposed on I/O port `0x94` and another two-bit bank register on I/O\r\nport `0x95` (only one bit of the two-bit bank register is used).\r\n\r\nThe source files for this board can be found\r\n[here](pcb/p2000t-ram-expansion-board-2080kb/).\r\n\r\n**Populated PCB**\r\n\r\n![Populated RAM board](img/ram_expansion_board_2080_01.jpg)\r\n\r\n**Installed PCB**\r\n\r\n![Installed 2080 KiB RAM board](img/ram_expansion_board_2080_02.jpg)\r\n\r\n## License\r\n\r\n* All source code, i.e. the [ram tester utility](ramtester)\r\n  are released under a [GPLv3 license](https://www.gnu.org/licenses/gpl-3.0.html).\r\n* The hardware files (KiCad schematics) are released under the \r\n  [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) license.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifilot%2Fp2000t-ram-expansion-board","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fifilot%2Fp2000t-ram-expansion-board","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifilot%2Fp2000t-ram-expansion-board/lists"}