-
Using the MPF-1P Printer and PicoRAM 6116 simultaneously
04/13/2024 at 19:46 • 0 commentsLet's print out a solution for the Towers of Hanoi with 5 disks:
-
The Towers of Hanoi on the MPF-1P!
04/12/2024 at 17:53 • 0 comments -
Next-Level Software Development with PicoRAM 6116
02/26/2024 at 05:56 • 0 commentsPicoRAM 6116 is taking Microprofessor MPF-1B software development to the next level - instead of keying in hex codes with the monitor, use a comfortable state-of-the.art Z80 assembler on the PC or Mac, assemble / compile the HEX file there, put it on SD card, and feed it to the Microprofessor! In this video I am developing a "Towers of Hanoi" program for the MPF-1B (recursive version) using asm80.com:
-
Github repo available!
12/27/2023 at 17:08 • 0 comments -
Firmware v1.1 Release - "6116.INI File" Support
12/26/2023 at 22:42 • 0 commentsGiven the difference in ADC level configuration for the MPF-1P and MPF-1B, I decided to make these configurable. PicoRAM 6116 now reads the 6116.INI file on startup. The file specifies the machine type (MPF-1B or MPF-1P), ADC analog levels for the 5 buttons, 4 auto-load programs for the 4 banks which are loaded on startup, and one more flag (0 or 1) which can be used to debug / determine the voltage ADC levels for the analog buttons. If 1 is used, PicoRAM enters a "debugging loop" which constantly prints the ADC value on the display. The user can then press the buttons and note the values to be specified in the INI file for button configuration.
I am attaching two 6116.INI files to the files section of the project (one for the MPF-1B, one for the MPF-1P). These need to be renamed as 6116.INI.
This is the 6116.INI file for the MPF-1B - note that the file requires UNIX EOL (i.e., single LF EOL):
MPF-1B D00 C00 900 700 300 100 CLOCK.MPF DICE2.MPF COUNTER2.MPF EGGTIME.MPF 0
-
PicoRAM and the Microprofessor MPF-IP (One Plus)
12/25/2023 at 16:08 • 0 commentsTo my surprise, PicoRAM 6116 () worked almost out of the box on the faster (Z80A-driven) MPF-IP. The only thing I needed to adjust was the analog input for reading the UI buttons - VCC is much more noisy on the MPF-IP; I guess that's because of the VFD. Also, this is Rev. 4 now of the PCB - the little bodge wire pulls down the WAIT line of the Z80. I hence no longer have to hold the Microprofessor in RESET while operating the PicoRAM (or during boot / power cycle).
-
Final PCB revision assembled and confirmed working
12/24/2023 at 15:29 • 0 commentsThe final PCB just arrived - assembled, and tested. Looking good. I am now using the free GPIO (28) from the Pico to pull down the Microprofessor's WAIT line low. Previously, to power cycle the Microprofessor, I needed to hold down the Microprofessor's RESET button to prevent it from accessing the SRAM emulation before the Pico was up and running. Obviously, it takes a bit of time for the Pico to power up - by the time the SRAM emulation was up and running, the Microprofessor had already crashed if not held in RESET otherwise. Now, upon power cycle / reset, I am pulling down WAIT and it is released when the SRAM emulation is up and running. This allows me to power cycle and reset without having to hold down the Microprofessor's RESET button. The WAIT line is on Pin 37 of the Microprofessor expansion pin header.
The firmware might still get tweaked and improved here and there, but the hardware part of this project is done. I am satisfied with the current revision - of course, it's not perfect, but what is? -
Thanks to Hackster.io for covering the project!
12/20/2023 at 02:35 • 0 comments -
Byte Order in the ASCII HEX Files Corrected
12/19/2023 at 07:43 • 0 commentsTurns out that the bytes in the generated ASCII HEX files were "out of order" because the internal memory addresses of PicoRAM 6116 don't match the linear order of the physical address space. Well, the Microprofessor obviously doesn't care as long as the address (re-)mapping is consistent (and it was) - but once you export this "internally garbled" memory content to an ASCII HEX file all your bytes are out of order and you don't recognize your program any longer. And editing on the PC becomes impossible, of course.
So, I needed some masking and bit shifting before writing the HEX file - this is doing the trick:
for (uint32_t b = 0; b < 2048; b++) { uint32_t i = ((b & 0b00000000000000000000000000100000) ? 1 : 0) << 0x5 | ((b & 0b00000000000000000000000001000000) ? 1 : 0) << 0x0 | ((b & 0b00000000000000000000000010000000) ? 1 : 0) << 0x1 | ((b & 0b00000000000000000000000100000000) ? 1 : 0) << 0x2 | ((b & 0b00000000000000000000001000000000) ? 1 : 0) << 0x3 | ((b & 0b00000000000000000000010000000000) ? 1 : 0) << 0x4 | ((b & 0b00000000000000000000000000000001) ? 1 : 0) << 0x6 | ((b & 0b00000000000000000000000000000010) ? 1 : 0) << 0x7 | ((b & 0b00000000000000000000000000000100) ? 1 : 0) << 0x8 | ((b & 0b00000000000000000000000000001000) ? 1 : 0) << 0x9 | ((b & 0b00000000000000000000000000010000) ? 1 : 0) << 0xA ; sdram[b] = ram[cur_bank][i]; }
The order of the bytes in the sdram array then matches the byte order in the physical address space and what is observed by the user with the MPF-1B monitor program. Hence, I can now write ASCII HEX files on the PC, using an assembler, or a simple text editor, in a natural way.
I have updated the firmware file in the files section here.
Also, I extended the ASCII HEX file format so that I can specify a start address (origin, via @<address> in the file), and partial HEX files are fine as well (i.e., you don't have to specify 2048 Bytes, fewer are fine - obviously, it would be super annoying of having to add hundreds of zero bytes just for padding your program to fill the memory). In addition, the reader is now accepting upper and lower case HEX characters (A-F, a-f), just to facilitate editing with a text editor on the PC (CAPS LOCK and HEX doesn't go together well, as you are losing the numbers with CAPS LOCK!)
Here are a few example programs illustrating the file format:
Simple Counter: 3e 00 3c f5 21 00 19 cd 78 06 f1 f5 dd 21 00 19 cd 24 06 f1 18 ec Simple Counter with Sound starting at address 0x1900 (instead of default which is 0x1800): @1900 3e 00 3c f5 21 00 19 cd 78 06 f1 f5 dd 21 00 19 cd 24 06 f1 f5 21 0a 00 4f cd e4 05 f1 18 e3 00 ASCII HEX saved by PicoRAM (full memory dump): 3E 00 3C F5 21 00 19 CD 78 06 F1 F5 DD 21 00 19 CD 24 06 F1 F5 21 0A 00 4F CD E4 05 F1 18 E3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 01 19 86 06 1C 18 08 4D 00 00 B6 1F B7 1F 86 06 77 06 10 06 1B 06 E4 00 00 00 00 00 00 00 00 8F BA FD FD FF 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9F 1F 00 00 00 00 00 00 00 00 00 00 00 18 00 18 FF FF FF 00 00 A5 00 00 00 00 FF F3 C9 00 66 00 55 44 2F 00 00 00 00 00 00 00 00 00 00 00 00 00
Note that the PicoRAM-generated HEX dumps always contain a few bytes at the end - these are the MPF-1B's monitor variables and Z80 stack!
-
First Demo Video Online! Microprofessor MPF-1B and PicoRAM 6116
12/17/2023 at 18:52 • 0 comments