Paolo Amoroso's Journal

Tech projects, hobby programming, and geeky thoughts of Paolo Amoroso

The V20-MBC homebrew computer I ordered finally arrived and I started checking it out.

The V20-MBC is a single-board computer by the same maker of the Z80-MBC2. Most of the design is common to both. However, unlike the Z80-MBC2, instead of a Z80 the V20-MBC has a Nec V20 chip that implements the instruction sets of the Intel 8080, which runs CP/M-80 2.2 on the V20-MBC, and the Intel 8088 with CP/M-86 1.1.

I got a V20-MBC Black Edition. It's a version of the V20-MBC with higher quality parts and a black PCB that, along with most of the other components also black, makes for a slick look:

V20-MBC homebrew computer.

I already love the device. These notes are my early impressions, but I'll continue sharing my experience with the V20-MBC.

Hardware

Both homebrew computers have similar size and layout and are accessed the same way, i.e. with a terminal emulator running on a desktop computer, a Chromebox in my case, connected via a USB serial line. Here is the setup, with the Chromebox at the top:

V20-MBC homebrew computer connected to a Chromebox.

The performance of the 8088 of the Nec V20 under CP/M-86 is noticeably better than the Z80-based Z80-MBC2. I estimate CP/M-86 software on the V20-MBC is 2-3X as fast as CP/M-80 programs on the Z80-MBC2.

Software

The V20-MBC is operated the same way as the Z80-MBC2, except for a couple of differences.

To account for the two CPUs, the boot and configuration menu duplicates the entries that load executable code. This is the menu in a Minicom terminal emulator session under Crostini Linux on the Chromebox:

V20-MBC boot and configuration menu.

There are two options for uploading an executable in Intel HEX format to run on the bare hardware with no operating system, iLoad for 8086 code and iLoad-80 for Intel 8080 code. Similarly, Autoboot automatically boots a designated 8086 binary, Autoboot-80 an 8080 one.

Although I never used CP/M-86 before, thanks to my prior experience with CP/M-80 the 16-bit operating system looks familiar and I already feel productive. Aside from the additional transient commands of CP/M-86, the only major difference is executable program files have the .CMD extension instead of .COM as on CP/M-80. This screenshot of the A: drive directory shows the extensions:

CP/M-86 session on a V20-MBC homebrew computer.

Issues

A quick check reveals some CP/M-86 files are missing, such as the TOD.CMD and ASSIGN.CMD transient commands. This is not unexpected as the Z80-MBC2 is also missing some files, e.g. STAT.COM and the Turbo Pascal sample .PAS sources. No big deal, it's easy to find and download suitable replacements.

#v20mbc #sbc #retrocomputing

Discuss... Email | Reply @amoroso@fosstodon.org

Back when the Pixel 4 XL was Google's latest Android flagship, JR Raphael wrote a great piece on the insanity of smartphone screen notches and holes: The enduring absurdity of our smartphone bezel obsession. He pointed out the compromises punching holes into and cutting out screen areas in the name of no bezels imposes for little or no design gain, which often defeats the whole point of making those changes in the first place.

In the later article No, the Pixel 4’s bezels are not a major crime against smartphone design, Andy Boxall discussed why having bezels is not an issue and the dislike for bezels is largely irrational.

Beyond aesthetics, there are drawbacks to using a device with thin or no bezels.

I can’t tell how many times I inadvertently touched unwanted user interface elements of apps on my old Pixel 2 XL phone and my current Pixel 4 XL, which have some bezel. For example when I grab the device ringing for an incoming call, which often results in a declined call because I touch the wrong areas close to the edges of the screen.

Bezels actually have advantages as they can accommodate the parts screen notches and holes house, such as cameras and sensors.

I use only Google phones, despise screen notches and holes, and wish Google focused on substantial features such as improving optical zoom (Super Res Zoom doesn’t qualify) rather than chasing questionable design decisions and fads with collateral damage like missing bezels.

The Pixel 4 XL was Google's last phone with bezels and no screen mutilations. What I hoped was a fad turned into a design trend and later Pixels came with screen holes.

My Pixel 4 XL is close to the end of life and I need to replace it with the upcoming Pixel 7 Pro. Guess what? It has a screen hole, I'll have to deal with it and get the device anyway.

Stop mutilating screens. I want my bezels back.

#Android

Discuss... Email | Reply @amoroso@fosstodon.org

I couldn't resist. I ordered an assembled V20-MBC Black Edition kit with 1 MB RAM, a homebrew computer by the same prolific maker of the Z80-MBC2. The devices share the same design, except instead of a Z80 like the Z80-MBC2 the V20-MBC features a Nec V20 bundling the 8088 and 8080 CPUs.

It's exactly what I needed, the perfect match for running my Assembly code on actual hardware and a complement to the Z80-MBC2.

Suite8080, my suite of Intel 8080 Assembly cross-development tools, includes the assembler I use for my 8080 programs executed on the Z80-MBC2 under CP/M-80, and now also on the V20-MBC as native 8080 code. I also set up an x86 Assembly cross-development environment to create 8086 code that will run on the V20-MBC under CP/M-86. And, of course, the Z80-MBC2 lets me run Z80-specific projects.

The shipping is on its way to me, I'll share my experience with the V20-MBC.

#v20mbc #retrocomputing #sbc #x86

Discuss... Email | Reply @amoroso@fosstodon.org

The Z80-MBC2 homebrew Z80 computer is a living retrocomputing museum that runs early microcomputer operating systems such as CP/M, QP/M, and UCSD p-System. Since the latter is the one I know least, I explore it with the Z80-MBC2.

On UCSD p-System the user runs programs and manages the system through a series of hierarchical menus, unlike the command interpreters of other operating systems. Navigating the menus down the hierarchy is easy, but sometimes I'm not sure how to get up one level. Pressing the Q key works most of the times, but occasionally nothing happens and I get stuck.

Running UCSD p-System gives a sense of how slow the output is on serial terminals. For example, a demo program to plot an ASCII sine wave takes almost 20 seconds over a 115200 bps serial line to the 8 MHz Z80-MBC2.

It's best demonstrated by a screencast I recorded, which shows the output as well as the menus. In the video the Z80-MBC2 runs in a Minicom terminal emulator session under Crostini Linux on my Chromebox.

#z80mbc2 #retrocomputing #sbc

Discuss... Email | Reply @amoroso@fosstodon.org

I don’t like algorithms deciding what ends up in my reading feed. For my content consumption I want platforms that don't filter but deliver all the content from all the sources I want, and only those sources.

This is why my information hub is an RSS feed reader, Feedly. In addition, since running my own email newsletter for some time, I have been subscribing to a growing number of newsletters on a variety of topics. From technology and software development, to content creation and publishing.

Here are the newsletters I subscribe to. I prefer niche, obscure, or unique sources, so I hope this list will help you discover valuable content that’s not mainstream.

I'll keep the list up to date.

#newsletters

Discuss... Email | Reply @amoroso@fosstodon.org

I cross-develop CP/M programs on Linux with the Suite8080 assembler and run them on a number of platforms, from software emulators to the Z80-MBC2 computer. But to test the code I use an emulator for Linux called ANSI CP/M Emulator and disk image tool, or just CPM.

CPM is unique in that it reduces development and testing friction. The emulator can execute CP/M programs stored on the Linux file system by passing CP/M executable files as arguments, such as:

$ cpm cpmprog

where cpm is the emulator and cpmprog.com is a .COM file on Linux. In addition, the current Linux directory appears as the A: drive from CP/M, so any .COM files there on Linux can be executed from CP/M like this:

A>cpmprog

Again, cpmprog.com is a .COM file on Linux.

This feature shortens the development cycle, as the emulator can access program files cross-assembled on the same file system it runs on.

Other emulators require copying files to disk images and mounting the images from the emulated environment. And before they can be run on the Z80-MBC2 or other hardware, CP/M programs need to be transferred via XMODEM or other means.

Once a .COM program is tested and debugged, I run it on richer CP/M environments like the z80pack emulator or the Z80-MBC2.

#retrocomputing #cpm

Discuss... Email | Reply @amoroso@fosstodon.org

If you lived through the personal computer revolution of the 1980s, you may have read some books that got you hooked with programming. These works led the reader through the intellectual adventure of using computing to explore interesting problem domains.

Two recent Python books bring back this fascination and excitement with programming, Impractical Python Projects: Playful Programming Activities to Make You Smarter and the sequel Real-World Python: A Hacker's Guide to Solving Problems with Code, both by Lee Vaughan and published by No Starch Press.

They are not Python tutorials or guides. Instead, they present stimulating coding projects for non-programmers who want to use Python for doing experiments, test theories, or simulate natural phenomena. This includes professionals who are not software developers but use programming to solve problems in science and engineering. And, of course, hobbyists.

Exploring and understanding the problem domain is an integral part of the books' projects along with coding. This is unlike typical programming books where the examples are often trivial, have little or no domain depth, and are stripped of everything but the essentials.

The science and engineering Vaughan's books cover include some great projects that match my interest in astronomy and space. For example, Impractical Python Projects has chapters on estimating alien civilizations, simulating a volcano on Jupiter’s moon Io, simulating orbital maneuvers, and stacking planetary images. Real-World Python discusses re-discovering Pluto, plotting the Apollo 8 lunar trajectory, selecting martian landing sites, and detecting exoplanets.

The sample code is straightforward, clear, and hints at how much can be done with little code. Since the books are not language tutorials, they focus on prototyping and exploration rather than building large and maintainable systems.

#Python #books

Discuss... Email | Reply @amoroso@fosstodon.org

Over the three years I ran my discontinued Blogger blog I published 146 posts. In just seven months I published 151 posts on this new blog hosted at Write.as, which drives home the superiority of Write.as as a frictionless blogging platform.

#blogging

Discuss... Email | Reply @amoroso@fosstodon.org

I ported to Intel 8080 Assembly the Z80-MBC2 Z80 code of the led blink demo, assembled it with the Suite8080 assembler, and uploaded the HEX binary to the Z80-MBC2. Instead of printing a message to the console and blinking the User led, the program made the led turn on and the board reset, booting up the default operating system.

I have no tools to debug software that runs on the bare metal. So the next step is to investigate these clues, starting from a comparison of the Z80 and 8080 sources.

#Assembly #z80mbc2 #Suite8080

Discuss... Email | Reply @amoroso@fosstodon.org

The conventional blogging wisdom is to address the readers as you and avoid writing in first person. This is supposedly friendlier and makes the readers feel at the center of attention.

I use you sparingly. For example, when I write how-to or instructional material, ask something, or try to persuade. Most of the times I write in first person. It's a natural way of sharing with fellow tech enthusiasts my direct experience and projects, the steps I take, the thought processes I go through, the setbacks.

There's another reason I rarely address readers as you.

You may come across as a marketing or SEO tool. The insincere intention of pleasing and luring readers to sell something — products, ads, attention — and monetize blogs.

My readers can cut through the BS and know when I feels right.

#blogging

Discuss... Email | Reply @amoroso@fosstodon.org

Enter your email to subscribe to updates.