The character cell VGA controller is tested and working in isolation, so today I'm working on integrating it with the rest of the system.

Progress on the assembly code that'll handle command line-oriented display drawing. This test is done on the emulator, NOT on a real monitor with real hardware, yet.

Time is scarce this week, but the challenge is to finish getting line-oriented display routines finished and working in the emulator.

The last piece of work for the week: interrupts.

I hadn't planned to add these yet, but realized when starting video routines that there'll now be two consumers of serial port input data, the io processing and the video output. Doing the setup in an interrupt seems like a good way to loosely couple them.

Now for a couple days off to do other important things.

Showing the new single step capability of the CPU and the machine code monitor. When stepping through the instructions, the monitor prints the address and opcode of the next instruction, and the updated CPU state.

Today's plan is to implement the st(ep) monitor command for single stepping through user programs, then bring the emulator to parity with the current hardware in preparation to write video drawing routines.

Any volunteers for the around? I am interested in the Free Software Foundation and wondering what kind of work volunteers have done in the past, particularly if it was in their local communities.

Today I implemented the machine code monitor "jm" command, which allows the user to resume program execution at a new address.

I've been hesitant to publish the source of my work-in-progress
, self-conscious to show my inexperience in assembler design
and HDL. But part of a growth mindset is recognizing there's always something
more to know; there are 2+ topics in which any person is a novice for every
topic in which that person is an expert. So I've published the git repo,
licensed under GPLv3:

US citizens, if you don't use your public library, consider giving it another look this year. Show more

More work on the assembler today. 16-bit labels don't correctly expand into upper byte and lower bytes when pseudo-instructions are used. And we need to be able to do simple arithmetic with operands, like $0314+$01.

Working on these things today.

I fixed all know bugs and major performance issues yesterday. Today, I'll spend a few hours improving the machine code monitor and assembler before taking a couple days off to catch up on other things.

The first version of the VGA controller will support an 80x60 monochrome character cell display. This is actually reasonably close to the finished product, so I'll table it for now. There's some more work to do on the computer before I integrate the VGA controller with it.

Success drawing bitmapped characters, so I'm off to write a program to convert a font sprite sheet to a Verilog memory file.

Successful first VGA test. Next is to display a bitmap, then start working on displaying characters from a bitmapped font.

I'm working on generating a valid VGA signal for the first time today.

More progress on the MCmon.

The CPU now suspends execution of a program on the "brk" instruction and transfers control to the monitor, which prints the CPU state and waits for input.

The "mr" command reads memory from the specified address. The new "mw" command writes a value to a memory location. The video demonstrates overwriting the ">" character in the prompt with a "*" character. The following prompt shows the result of the change.

Among the most fundamental userland programs is the machine code monitor, by which the user can analyze and modify the computer's state. So that's the first program I'm writing for my . Here it is doing a memory read:

Spent all last night and this morning trying to get RS232 over USB working on the new UP5K board, with no success. Until I figure it out, this will have to do: using the icestick only as a UART bridge.

Show more

Fosstodon is a Mastodon instance that is open to anyone who is interested in technology; particularly free & open source software.