--- title: "Universal LROS/AROS Development Board" type: "article" slug: "universal-lros-aros-development-board" url: "http://localhost/article/universal-lros-aros-development-board/" markdown_url: "http://localhost/article/universal-lros-aros-development-board.md" published_at: "2022-10-07T12:25:08+00:00" modified_at: "2026-08-03T17:40:20+00:00" featured_image: url: "http://localhost/wp-content/uploads/2022/04/20230809-041332.jpg" excerpt: "A Project for Advance TS2068 Users True aficionados of the TS2068 will eventually decide that they want to do something with their cartridge port. Although TIMEX produced a few plug in cartridges, many of us have our own special programs in mind. There will be a few people who need a more versatile board, able…" category: - name: "Sincus News" slug: "sincus-news" taxonomy: "category" url: "http://localhost/category/periodicals/sincus-news/" post_tag: - name: "1984" slug: "year-1984" taxonomy: "post_tag" url: "http://localhost/tag/year-1984/" - name: "Best of Timex/Sinclair 2068 Articles and Documents" slug: "ts2068best" taxonomy: "post_tag" url: "http://localhost/tag/ts2068best/" - name: "Hardware project" slug: "hardware-project" taxonomy: "post_tag" url: "http://localhost/tag/hardware-project/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Wes Brzozowski" slug: "wes-brzozowski" taxonomy: "indiv" url: "http://localhost/indiv/wes-brzozowski/" publication_r: id: 14989 title: "Sincus News" type: "periodical" url: "http://localhost/periodical/sincus-news/" authors: "Wes Brzozowski" authors_r: - name: "Wes Brzozowski" slug: "wes-brzozowski" taxonomy: "indiv" url: "http://localhost/indiv/wes-brzozowski/" volume: "3" issue: "1" issues_articles: - id: 39370 title: "SINCUS v3 n1" type: "issue" url: "http://localhost/issue/sincus-v3-n1/" pages: "8-10" pubdate: "November 1984" related_articles: - id: 45631 title: "Universal LROS/AROS/Development Board Schematic" type: "article" url: "http://localhost/article/universal-lros-aros-development-board-schematic/" archive_link: false gallery: - url: "http://localhost/wp-content/uploads/2022/10/SINCUS-v3-n1_0009.jpg" --- # Universal LROS/AROS Development Board ### A Project for Advance TS2068 Users True aficionados of the TS2068 will eventually decide that they want to do something with their cartridge port. Although TIMEX produced a few plug in cartridges, many of us have our own special programs in mind. There will be a few people who need a more versatile board, able first to be an EPROM cartridge, switchably memory mapped, so that it can function either as an AROS or LROS. (The TS2068 Technical Manual, pp 115-125, explain the difference.) They may also want the option to run it with RAM memory, so that they can develop programs quickly, or copy in SPECTRUM or TS2068 BASIC and immediately make changes in the BASIC interpreter. If the code could be changed, a write protect switch would then be very helpful. Also useful would be a switch to disable the cartridge without unplugging it. There may also be those with highly demanding requirements (and lots of money) who would prefer to run with EEPROM’s (electrically erasable PROM’s), which give the non-volatility of an EPROM and the fast change capability of a RAM memory. The circuit shown will do all of those things! The “untraditional” but perfectly acceptable way of wiring the memory control signals allows compatibility with 2764 EPROMs, 8264 EEPROMs and 6264 static RAMs. All are 8K by 8 memory chips; access times should be 300 nanoseconds or less. The positions of the four switches depend on the type of memory plugged in and how it’s to be used. Before reading further, it is suggested that the reader review the TS2068 Technical Manual, and thoroughly understand the difference between the home memory bank and the cartridge bank, and how to switch various chunks on and off. When running with EPROMs, the write enable switch should always be open. This disables the write mode, which EPROMs won’t use here, anyway. When running with RAM or EEPROM, write enable will be closed when the code is being entered, and probably opened after that. In the open position, it acts as a “write protect” switch, preventing the code in the memories from being accidentally written over. This is particularly important for EEPROMs, that can’t be endlessly written into, as can RAM. There’s an additional write protect function, activated by software, that takes advantage of the TS2068’s bank switching architecture. This will be explained later. Along with another switch (more on that in a moment), the read enable switch must be closed for the cartridge memory to be read by the computer. When the switch is open, the computer won’t be able to “see” the cartridge circuitry, and it is effectively disabled. This is preferable to unplugging the cartridge, since the cartridge connector inside the computer will eventually wear out. In order to read the cartridge memory, however, either the AROS or LROS switch must be closed. When LROS is closed, the memory is read from locations `0000`–`3FFF` in the cartridge bank. This is how it would be set for SPECTRUM emulation. For cartridge based programs that need the BASIC ROM, the AROS switch should be closed instead. The cartridge memory is then mapped from `8000`–`BFFF` in the cartridge bank. When the write enable switch is closed, and RAM or EEPROM memories are installed, it is possible to write into the cartridge. The cartridge is written into from locations `C000`–`FFFF` in the cartridge bank (Note that this is a different area from either of the places the cartridge may be read from. Note also that the cartridge is always read from or written to in the cartridge memory bank, never from the home bank. This means that the cartridge bank must be enabled in whatever memory locations the cartridge is to be used.) At first it may seem strange that the cartridge is written to and read from entirely different memory locations. Yet once we see that the cartridge isn’t intended to be a RAM extension board, it turns out to be a great advantage. Since the circuit is intended to help in developing cartridge software, it’s useful to have an easy way to make small changes in the code already loaded. Since the write addresses start at location `C000` (49152, decimal) it’s very easy to make changes using BASIC. Since the write addresses are at the top of memory, there’s still lots of room for BASIC programs. The lines: ``` CLEAR 49151 OUT 244,192 ``` make the cartridge memory available for POKEing, starting at its first byte at location 49152. When done with the changes, the line ``` OUT 244,0 ``` will disable the cartridge bank, including its write address area at `C000`–`FFFF`. It also acts as the aforementioned “software write protect switch”, since there’s rarely any other reason to enable the write address portion of the cartridge bank. This means that the write enable switch needn’t be open to protect cartridge memory, except in highly unusual circumstances. (Still it wouldn’t hurt.) It may now be obvious why, however simple the circuit is, this project is not for beginners. In order to use (or even debug) the circuit, a fairly thorough technical knowledge of the TS2068 is necessary. As if this weren’t bad enough, the small size of the board will require excellent soldering skills, if you want the cartridge to be small enough so that you can close the door of the cartridge port. In this case, the large amount of wire in the small available space can create heavy “wads” underneath the board, preventing it from fitting, unless you use #30 wire, carefully bundled and tied at various points to keep it spread apart. The bundling scheme will also have to be arranged so as not to have your earlier wiring getting in the way of your later wiring. One final tip; if you install RAM memory, don’t try to LOAD the code from cassette directly into the cartridge memory. It won’t work, since the LOAD routine seems to insist on loading data into the home memory bank. LOAD the code into `8000`–`BFFF` in home memory, open the write addresses using the two BASIC lines given, and then transfer the `8000`–`BFFF` block of code into `C000`–`FFFF`. This transfer is very slow in BASIC, but can be done in a flash in machine code, and quite easily, if the LDIR instruction is used. This ease is only possible because the read and write addresses are different. What’s the gadget good for? Well, to start, it can be used as a SPECTRUM emulator, although it wouldn’t be wise to build one only for that reason, since commercial emulators are simpler, cheaper, and come ready made. However, if you also want to develop new languages for the TS2068, or develop other plug in programs to be later committed to EPROMs, it’s a natural. You can modify the SPECTRUM code to include extra functions like AUTO line numbering and RENUMBER; two functions that should have been included in the TS2068, but weren’t. These will greatly speed up your entry and debugging of BASIC programs, and there’s over 1100 bytes of unused memory in the SPECTRUM 16K BASIC, so there’s lots of room to add them without deleting other things. One very useful feature would be to patch the SPECTRUM LOAD routine to print at the necessary information that would allow you to SAVE a headerless datablock. Headerless blocks are often used in commercial SPECTRUM software to make it difficult to copy. One thing that has me excited is the idea of using the cartridge to modify SPECTRUM BASIC to where all BASIC commands work in 64 column mode!