-
New LM80C firmware R1.16 with new LM80C DOS 1.05
03/28/2021 at 09:31 • 0 commentsThe development of my Z80 homebrew computer LM80C continues. This time the LM80C DOS 1.05 is out with newer BASIC statements to manage SEQUENTIAL FILES. with OPEN/CLOSE/PUT/GET/EOF. In this short video you can see the creation of a file, the storing of some data, and the following operation of reading. The new SEQ file has been added to distinguish such files.
The new firmware is available from the official GitHub repo
-
LM80C DOS
03/08/2021 at 17:19 • 0 commentsHere we are! The LM80C DOS is finally out! This is the first DOS (Disk Operating System) for my homebrew computer comes in an initial stage, maybe a little raw but almost functional. I've implemented the LOAD, SAVE, ERASE, FILES, and DISK commands:
- LOAD & SAVE can load/save BASIC & binary (memory portions) files, and single disk sectors, too;
- ERASE deletes a file on the disk;
- FILES lists the files of a disk;
- DISK can do several job: it's used to initialize (format) a disk, creating a new file system; it can rewrite the Master sector; it can rename the disk.
Obviously, for "disk" I mean a Compact Flash card. More easier, faster, and bigger than an old floppy disk drive.
More functions will come, as I will have some spare time to expand the DOS.
For the syntax of the commands please refer to the LM80C BASIC reference manual, for the details of the implementation, please refer to the Hardware reference guide, while for the wirings, please refer to the schematics.
The new firmwares for LM80C Color Computer and the LM80C 64K Color Computer can be downloaded by the official GitHub repo.
-
New firmware releases for 32K and 64K models
01/01/2021 at 10:55 • 0 commentsHappy new year and happy new firmwares for the LM80C Color Computers.
LM80C: new firmware release 3.16:
- Code revision to comply with the assembler SJASMPLUS
- Moved equates for BASIC workspace area into a separated file
- Serial buffer overrun revision
- Fixed a bug into the serial code: the incoming chars were print on screen even if the cursor was off (i.e., in indirect mode)
- Added key auto-repeat
- Added support for INSERT key to insert a space between text by moving the chars after the cursor position
- LIST now manage ending line number correctly, so that it won't list the line after the one passed as argument anymore
- BASIC support for serial channel B
- Preliminary support for external mass storage (stubs for ERASE, FILES, LOAD, SAVE commands)
- Mechanism to enable/disable the 512-byte buffer for mass storage I/O operations (by pressing SHIFT while logo is shown on startup) - AT THE MOMENT, DISABLED BY DEFAULT INTO CODE
LM80C 64K: new firmware release 1.01
- Code revision to comply with the assembler SJASMPLUS
- Moved equates for BASIC workspace area into a separated file
LM80C 64K: new firmware release 1.02
- Fixed a bug into the serial code: the incoming chars were print on screen even if the cursor was off (i.e., in indirect mode)
Grab them at the official LM80C Github repo.
-
LM80C 64K Color Computer
12/29/2020 at 18:41 • 0 commentsVery big XMas news for every fan of my LM80C Z80-based homebrew computer! After some months of development, today I finally released the firmware and schematics of a new version of my computer, the LM80C 64K Color Computer. As you can imagine, the main improvement is the RAM, grown from 32 to 64KB. After the BASIC has been loaded, about 43K are free for user programs. If you want to work with machine language, the whole amount of RAM is available to the user. Another improvement is the ability to switch between 2 VRAM banks, to keep at the same moment 2 complete video buffers ready to be used.
Also, there are several improvements on the software side:
- improved mechanism to manage the serial buffer overrun, when the remote device sends data too quickly;
- new key auto-repeat to help typing;
- added support for INSERT key, to insert empty spaces into the text lines to add new chars w/o overwriting the rest;
- improved LIST command: now, if the user asks to list until a line that it's not present into memory, now the listing is halted at the line immediately before the missing one;
- added support to BASIC for serial channel B;
- code revision to comply with the Z8DK assembler;
- preliminary support for an external mass storage device (Compact Flash);
- mechanism to enable/disable the I/O buffer of the DOS, to recover 512 bytes.
Source code, precompiled firmware, and schematics are available at my Github repo.
[caption id="attachment_1903" align="aligncenter" width="300"] LM80C 64K Color Computer: prototype on breadboard[/caption] -
New firmware R3.15 with ELSE statement
11/21/2020 at 17:32 • 0 commentsAnother firmware upgrade, the new R3.15 release introduces a simple yet important feature, the ELSE statement. So, now it is possible to write conditional branches on just 1 single row instead of having to divide them over multiple lines.
Let's consider the code below:
10 IF A<10 THEN PRINT "TOO LESS":GOTO 30 20 PRINT "THAT'OK 30 ... more code ...
It can now be put on a single line:
10 IF A<10 THEN PRINT "TOO LESS":ELSE PRINT "THAT'S OK"
Apart this, there is also a new man text displayed at boot, to inform the user about the firmware release, the copyright notices and the bytes free.
The new firmware can be grabbed from the official LM80C Github repo.
-
New firmware R3.14 with Flood Fill
10/20/2020 at 17:36 • 0 commentsHello everybody. Nice release, today, for the LM80C Color Computer. The new firmware R3.14 comes with an interesting feature: the flood fill algorithm, to fill connected areas in graphic mode!
Here's a little video to show the new PAINT command in action:
Grab and burn the new firmware from the official Github repo.
-
New firmware R3.13.8
10/01/2020 at 14:33 • 0 commentsAnother firmware release, to fix a minor bug and to implement a new feature:
- Fixed a little bug in COLOR statement: it didn't store the foreground color set by the user;
- Now PLOT, CIRCLE, and DRAW statements accept color "0" to draw pixels with background color, i.e. reset pixels that are on;
- Code cleaning
Every single ROM is available ready-to-be-flashed on my Github repo.
-
New firmware R3.13.7
10/01/2020 at 14:30 • 0 commentsNew firmware release 3.13.7:
- Fixed a bug into the new cursor management routine: now the cursor won't appear during PRINTing anymore;
- Fixed a bug into the comma tabulation: now the max. allowed number of columns is calculated dinamically, according to the screen width
The new firmware is available from my GitHub repo, as usual.
-
New firmware R3.13.6
09/10/2020 at 15:58 • 0 commentsAnother minor release for the LM80C firmware. Let me introduce you the new 3.13.6:
- Changed the cursor management routine: now the cursor is visible when being moved.
- Now when the computer is software reset, the NMI is disabled before restart.
- When printing with "comma" separator, 10 spaces are introduced between items.
As usual, the new firmware is available from my Github repo.
-
LM80C Color Computer 64K
08/30/2020 at 09:44 • 0 commentsHello everybody. After a while I’m back with interesting news! I’m glad to introduce you the LM80C Color Computer 64K. This is the V2 release of my homebrew computer built around the Zilog Z80 CPU. A lot of things are changed since V1 hardware, most importantly the main RAM, increased to 64K.
LM80C 64K
Since the Z80 can address only 64K of memory, to be able to address the 32K ROM and the 64K RAM a trick has been used. Other computers of the past, like the C64 for example, had 64K of RAM but to let the computer be user-friendly the developers adopted bank switching mechanisms to disable the ROM or the RAM or to switch between them in particular conditions: on the C64, if the user tried to wrote in a memoery area used by the system, the operating system disabled the ROM, wrote on the underlying RAM, then re-enabled the ROM. I decided to solve the problem using a different approach: instead of jump between RAM and ROM according to the situation, I simply copied the whole ROM contents into the RAM.
When the user powers up the computer, the usual check to see if it’s a cold or warm start is performed. For a cold start, the bootloader copies the firmware from the first bank of 32K memory (occupied at startup by a ROM chip) into the second bank (from $8000). Then, jumps into the RAM continuing to execute the switching code, that disables the ROM bank and enables another 32K RAM bank. Now, it copies the whole firmware again on the first bank (from $0000) and then resume the original boot code. The bank switching is performed using a PIO line, so with just a simple OUT instruction. I also want to disappoint who thinks that the operation is too slow: by using the LDIR instrucion of the Z80, the double transfer (from ROM to RAM, and then from RAM to ROM) only takes 0.2 seconds!
In this way, the BASIC interpreter can access all the memory left free (about 44K). If the user need the whole amount of memory RAM (64K) for his/her needs, he/she just has to write a little loader in a portion of the RAM and simply overwrite the original firmware.
But that is not the only change. Now the VDP can benefit of 2x 16K VRAM banks to store 2 different video buffers and a serial switch to isolate the serial port in case the computer hasn’t opened the serial line yet. The trick is the same used for the ROM/RAM switching: a PIO line wired up to an address pin of the VRAM chip.
Lastly, I’ve added a 4066 Switch to isolate the SIO pins when the serial line is not used or is disabled for any special event (i.e. buffer overrun).
Here are the complet set of features of the new hardware:
- CPU: Zilog Z80@3.68 MHz
- Main memory:
- 32K ROM with LM80C BASIC (an extended version of Microsoft BASIC 4.7) with special instructions to manage graphics and sound
- 64K SRAM, of which 44K available under BASIC
- Graphics:
- VDP TMS9918A
- 32K VRAM (2x 16K banks)
- 256×192@15 colors
- 32 sprites (monoc.)
- Sound:
- YM2149F (or AY-3-8910)
- 3 analog channels
- 8 octaves
- 2×8-bit ports (used to read an external keyboard)
- I/O:
- Z80 SIO (2x serial ports with software-programmable bps)
- Z80 PIO (2x 8-bit parallel ports – of which one is used to set up the system peripherals)
- Z80 CTC (timer/counter, used to provide serial clock and system tick mechanism)
LM80C 64K protoboard
Here is a little video of the power up of the system:
Code and schematics will come soon on my Github repo.