Wednesday, November 3, 2021

Keyboard for OMEGA MSX Computer : no 'magic' smoke :-)

Until now, I have carried out my developments on this USB keyboard interface by powering the board using a laboratory power supply. As I have pretty much finished the software embedded in the STM32 processor, it's time to see what it looks like on the OMEGA board.

This is what the final assembly looks like:



The interface LED responds well to pressing keys on the USB keyboard. It remains to be seen if this works well with the OMEGA board.

As a USB keyboard does not really take the specific keys of the MSX keyboard, I planned the use of specific keys of the USB keyboard like ALT, CTRL etc ...


Friday, September 24, 2021

A better keyboard for the µPF--2

After having imagined several solutions to obtain an acceptable keyboard for the µPF - 2, I ended up using key caps which it is possible to label:


For the moment I have not printed the labels of the keys in color, it would have been nicer, but the result is quite practical. This keyboard has nothing to do with what the original kit offers : https://www.kswichit.com/Z80/Z80.html.


Wednesday, June 30, 2021

Time for the µPF--2.

The µPF--2 


When I developed this µPF - 1 / B compatible board, I wanted from the start to add a specialized time management circuit. So I installed a DS3231. This circuit is interesting because it is very precise. It also offers RESET management that I used as a master reset of the board. 



This DS3231 operates using the I2C bus. Obviously, this bus must be implemented in the FPGA. That shouldn't be a problem. I thought I would find a usable 'piece of code' on the web. In fact it was not a good idea. The codes found are often complex and above all undocumented.

Therefore, the best solution was to implement the I2C protocol myself. That's what I did. It is not very complicated, but not necessarily straightforward.




After a short period of development, I got the bus to work perfectly and was able to configure and read this real time clock circuit:



At this point, I have tested all the hardware functionality of this project. I also rewrote a lot of the system. It only remains for me to integrate all these developments in a 'clean' way.

I am beginning to see the end of this subject ...

Friday, May 21, 2021

µPF--2 is able to use the IOM board

New step in the production of the µPF--1 compatible board: the use of the PIO of the IOM expansion. 

https://fjkraan.home.xs4all.nl/comp/mpf1


In fact, I picked up this 'supposedly' new extension a few years ago on eBay for a low price. Obviously, when it was powered, the general voltage was only 4.6V.

One of the RS232 drivers was problematic. So I removed it from the board and also changed the 5V regulator because the 7805 regulator which undoubtedly heated, only delivered 4.8V. The 5V restored, I connected the board to the µPF--2 and after some modifications of a small test program, I was able to run the famous basic 'Hello World' : the lighting of the three leds.


Yep, after 34 years, I am able to play with it again.




Thursday, May 13, 2021

MSX Omega computer : USB keyboard interface.

A few weeks ago, I talked about Sergey Kiselev's MSX2 compatible processor board project and the choice I made not to build the keyboard for reasons of overall system cost. 


Not everyone will agree with this choice, but for me, the main thing is to be able to have fun in retro-computing without breaking the bank. I
n fact, I specially studied an adapter for this MSX board to allow the use of a standard USB keyboard:


As usual, after a few days of waiting, I received the PCB:


This board is not particularly easy to assemble by hand because of the two integrated circuits with very thin and close legs. But with a little patience and skill, here we are. First I powered this adapter and plugged in a USB keyboard. I was able to observe the lighting of the keyboard connection LED as well as its flashing each time a key was pressed on the keyboard. It seems to me to be a very good start since the reaction of the USB control IC corresponds to what is indicated in the datasheet. In principle, all that remains is to program the processor to provide the parallel code expected by the MSX board.

A small additional check was carried out to verify that this adapter board fits correctly on the OMEGA board:


Note that I chose a raised USB connector to allow easy insertion of the keyboard connector. My adapter looks perfect! In fact, I have to quickly program it because without a keyboard it is obviously impossible to use the OMEGA computer.

However, for some time I received a Carnivor cartridge to allow me to copy programs or games to it and finally test the proper functioning of the OMEGA board:

At least I have already been able to test that this cartridge fits correctly into the connectors of the OMEGA:


I may also have to find a joystick for this machine. Otherwise it will be difficult for me to really test the games ...




Wednesday, May 12, 2021

µPF--2, a µPF--1 clone.

Since a few months, I have been in the process of recreating the well-known µPF--1 microprocessor kit :

Wilipedia.
In fact, this kit has already been recreated, by Wichit Sirichote with the addition of downloading binary files from a PC via a serial interface. 


This solution, more modern than the original kit seems perfect, except that it has some drawbacks and a small operating problem. First, the serial interface comes in the form of a Standard RS232C interface. It would have been really more interesting to offer a serial interface via a USB port. This would have greatly facilitated the use of this kit. On the other hand, the fact that it is the Z80 processor which fully manages the serial interface, the maximum throughput remains very low, at around 1200 Bauds and receives erroneous characters randomly. Downloading even small files takes too long and is unreliable.

Also, I decided to redevelop this kit by offering a much more efficient USB hardware serial interface. I added a serial interface for an external keyboard. The original Wichit Sirichote keyboard being totally unusable. The switches used are not intended for this type of use.

I also added some possibilities and modified the software system accordingly. This allowed me to recreate the kit on a standard FPGA board:

This new system works very well, but on the one hand the FPGA board used is generic and not really suitable for the intended use. This FPGA board also does not offer a USB serial port and the expansion port is not suitable for setting up Z80 type extensions.

So I decided to recreate a system based on an FPGA. After several attempts and configurations considered, I arrived at this system:


Implementing an FPGA is a bit tricky, so I went with a pre-made FPGA board. Going through this type of configuration removes some of the implementation difficulties, and as a bonus, allows me to offer a more 'powerful' FPGA than the circuit originally planned.

The result remains compact and suitable for intensive use. Note also that this system can be used for something completely different than the recreation of the µPF--1 kit since it has 5V compatible serial and parallel inputs / outputs, a 2x16 LCD display in addition to the eight 7-segment displays.

After shipping the design files, I received the printed circuit board. The first thing I did was to see if the FPGA module can be correctly inserted:


Once this check was done I was able to start mounting partially the system. I started by mounting the power parts and checked the absence of 'magic smoke':


Fine! And the USB / serial interface circuit is correctly detected by the system, Win10 in my case.

I was able to continue mounting the board by installing all the components necessary for a first start of the system, i.e. the eight 7-segment displays and the LCD display as well as the interface circuit which will be used to receive the information from the external keyboard:


The FPGA module starts up correctly, The small example which makes the D5 LED flash works. The LEDs and the 7-segment displays are slightly lit which is normal given that all the I / O not used of the FPGA are positioned as inputs with low PULL-UP when it starts up.

It now remains to adapt the code of the FPGA previously developed to this new board.



Friday, May 7, 2021

Easy Z80: A very cool Z80 CP/M SBC

Since my last post about this Easy Z80 board, I installed the integrated circuits in 10MHz version. And that changes everything. At this frequency of 10 MHz, the system is very responsive and becomes very pleasant to use.

Hum... The first time I order a Zilog 10MHz CPU, SIO and CTC directly from Mouser. Brand new and all manufactured in 2020! My first contact with the Z80 was in 1987 with the µPF1+. Wow! And now, 34 years later, a real CP / M system version 2.2:


In summary, this system has a read-only storage unit including the CP / M system plus some necessary utilities. 384K writable storage space is available for downloading external applications. In addition, two communication ports are available in the 115200 Bauds version. 

Note that the RAM storage space is backed up by an external battery. The system has an extension bus but unfortunately no I / O port. It's a bit regrettable. So how to test this system?

So I decided to check if I could create the same type of app that I created earlier using a Color Maximite 2 board. This consisted in using the temperature sensor of the expansion board that I created for the Colour Maximite 2 and sending the information to a French Minitel:


It works perfectly with the Coulour Maximite 2. As the Easy Z80 board does not have an I / O port, I therefore decided to recover the temperature from Maximite and send it to the Minitel using Easy Z80. Obviously, this application may seem 'without interest', except that it allows to implement the entire development chain around CP / M.

The development system used is the Z88dk kit : https://github.com/z88dk/z88dk
Nothing more than this kit is necessary except a little knowledge of C and assembly language.

The principle of the application consists in sending the home page from the Easy Z80 SRAM disk to the Minitel, then retrieving the temperature via the serial link coming from the Maximite 2, and sending this information to the Minitel.

The only difficulty of this project is to use the second communication port of Easy Z80 in configuration 1200, E, 7, 1. This is not particularly obvious because the system is designed to operate from at 115200 Bauds. Fortunately, it is planned to be able to use the CTC present on Easy Z80 to generate the clock to the UARTS.

It is therefore necessary to connect the output of channel 2 of the CTC to the channel 2 clock of the SIO. This connection is available on the printed circuit board. It is enough to connect it with a small soldered wire after having cut the original connection.

Once this intervention is done, it is necessary to write a few lines of assembler to configure the CTC and the SIO. Do not forget to remove the RS232 converter U8 from the board because Minitel uses TTL signals.

Finally, the source code is simple and easy to understand:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//
// Ressources :
//
// https://www.seasip.info/Cpm/bdos.html
// https://github.com/wwarthen/RomWBW
// https://github.com/z88dk/z88dk/wiki/Platform---CPM
// http://www.z80.info/zip/um0081.pdf
// https://pila.fr/wordpress/?p=361
// https://www.goto10.fr/minitel/specifications/stum1b.pdf
//
// Compilation : zcc +cpm -lm -o main.com main.c
//
#include <stdio.h>
int main()
{
FILE *fp;
int Data;
unsigned char Index, Misc ;
   
	// Start application
	printf("Starting the Minitel application\n"); 
	// Configure the SIO chanel B for 7, E, 1 & NOT CTS ctrl
	#asm
		PUSH AF
		LD A, 0x33	; PTR WR3
		OUT(0x83), A	; ACESS WR3
		LD A, 0x41	; 7 bits RX, NO CTS, RX enable
		OUT(0x83), A	; WRITE WR3	
		LD A, 0x34	; PTR WR4
		OUT(0x83), A	; ACESS WR4
		LD A, 0x47	; E parity, 1 stop
		OUT(0x83), A	; WRITE WR4
		LD A, 0x35	; PTR WR5
		OUT(0x83), A	; ACESS WR5
		LD A, 0x28	; 7 bits TX
		OUT(0x83), A	; WRITE WR5
		POP AF
	#endasm
	// Configure the Com port n#2 baudrate (CTC) at 1200 for the Minitel
	#asm
		PUSH AF
		LD A, 0x47	; Counter mode
		OUT(0x89), A	; Control Word
		LD A, 0x60	; Counter value for 1200 bauds
		OUT(0x89), A	; Counter Word
		POP AF
	#endasm
	// Opening the Minitel Home page
	fp = fopen("Home.dat", "r");
	if (fp == NULL) {
		printf("Error opening Home.dat");
	return 0; }
	// Send the Home page to the Minitel
	Data = fgetc(fp);
	while ( Data != EOF ) {
		bdos(4, Data );
		Data = fgetc(fp); }
	// Infinite loop
	while (1) {
		// Print the 3 char for the display coordinate + 
		// the 5 char from the Colour Maximite II temperature
		// formatted as : 12.55
		// So, 8 char to relay
		for ( Index = 8; Index; Index-- ) {
			Data = bdos(3, Misc);
			bdos(4, Data ); } }
	// Close the Home page file	
	fclose(fp);
	// End main
    return 0;
}

Note also that CP / M offers 'services' in the form of a generic call by providing some information. This interface is provided in the form of the 'bdos ()' function and is used here to communicate with the communication port # 2.

And the result:


Conclusion: this CP / M board is really very pleasant to use and program with the Z88dk kit. It has an RC2014 type connector for the connection of various extensions. It could be interesting to install a PPI8255 or a Zilog PIO there.

RESSOURCES :