| 
						 
						   | 
						
						 The Memotech MTX Series  | 
						
						 
						
						   | 
					 
					 
				
				Memotech Compact Flash System  
				
				- 80 Column Board Add-on 
				
				
				   
				
				
				 -
				 one ?) 
				Introduction 
				CFX is a spin off of the Compact 
				Flash storage system developed for
				MTXPlus+, our modern day, 
				fully compatible, MTX "super computer". It uses a 
				modified Memotech SDX ROM to give an MTX computer the ability to 
				load and save data from a CF card using MTX BASIC "USER" 
				extensions. Both CFX and MTXPlus+ make extensive use of the code 
				developed by Andy Key for 
				his MEMU,
				
				REMEMOrizer and
				
				REMEMOTECH projects described on the
				Memotech 
				pages on his website. 
				CFX is self 
				contained - it does not require any modifications to the MTX 
				motherboard ROMs. 
				The CFX ROM provides versions of both the MTX SDX BASIC ROM 
				and a CP/M ROM based on Andy's SCPM ROM.  
				Andy's SCPM ROM was written to enable CP/M to run on a 
				Memotech computer without the need for an 80-Column card, the 
				MTX VDP was used to generate a low quality 56 column text mode. 
				Andy also patched NewWord to run in this 56 column mode. The 
				SCPM ROM was eventually used in 
				Memotech's Video Wall product.  
				Bill Brendling had some interest in CFX, 
				but felt (quite rightly) that the system would be enhanced if it 
				had better video output in the CP/M mode,
				
				commenting on the MTX Forum in 2015 that "A new 80 column 
				capable graphics card would complement the CFX in the same way 
				that the original MTX 80 column card complemented the SDX. For 
				simpli[city], microprocessor generated video is perhaps the way to go. 
				I think it would be possible to do something with a
				
				Parallax Propeller, a 24LC256 serial EEPROM and a handful of 
				resistors. It would not be fully graphics capable (the Propeller 
				chip only has 32KB of on-board RAM and no interface to external 
				RAM). But at least as capable as the original MTX 80 column 
				card, and perhaps even reproduce the same hardware interface." 
				Bill went off and quietly developed such 
				a system and demoed it during
				Memofest 2016.  
				From the Parallax website . . . "The 
				Propeller microcontroller is designed to perform multiple tasks 
				simultaneously, and without the need for interrupts or the 
				dictates of an onboard operating system. Each of the Propeller 
				P8X32A’s eight symmetrical cores can access all 32 I/O pins and 
				other shared system resources. Each core also has its own memory 
				and a set of configurable hardware for creating, releasing, and 
				re-creating software-defined peripherals as needed. " 
				The information below is courtesy of 
				Bill, it describes the functions provided by the prototype board 
				that he demo'ed at Memofest 2016. With Bill's support, this 
				functionality has now been incorporated into an upgraded 
				CFX -
				CFX Version 
				2. 
				
				 ________________________________________________  
				MTX 80 Column VGA Display Board
				 
				Bill Brendling  
				  
				A while ago I suggested on the forum that 
				it should be possible to build an 80 column display with just a 
				couple of chips. I thought that such a statement should be 
				corroborated, so I have built a demo. The semiconductors 
				(Parallax Propeller, serial EEPROM, voltage regulator) cost 
				approx £10, the remainder (Rs, Cs, PCB, connectors) I had to 
				hand.  
				Capabilities:  
				
					
						- 
						
 80 
						column x 24 line text  
						- 
						
						64 foreground and 64 background colours, 2 bits each for 
						red, green and blue.  
						- 
						
						Same 512 character font as the original MTX 80 column 
						board  
						- 
						
						160 x 96 pixel graphics using the graphics character 
						font   
					 
					
					  
					The display is controlled by bytes written to a single Z80 
					port. In the prototype, the address used is 0x71 (113 
					decimal). This conflicts with that used for the RTC for 
					MTC+, however since the address decoding is performed by the 
					Propeller firmware this can easily be changed. The following 
					codes are recognised by the development firmware:
					 
					  
					  
						
							| 
							Byte sequence  | 
							Effect | 
						 
						
							| 0x03 xx 
							yy  | 
							Move cursor to column and 
							row given by bytes xx and yy.  | 
						 
						
							| 0x04 nn
							 | 
							Set background colour to nn, 
							where bits 0&1 give blue, bits 2&3 give green, 4&5 
							give red, and 7&8 are ignored.  | 
						 
						
							| 0x05 | 
							Erase to end of line  | 
						 
						
							| 0x06 nn
							 | 
							Set foreground colour to nn, 
							as for background colour. | 
						 
						
							| 0x08 | 
							Cursor left | 
						 
						
							| 0x09 | 
							Tab to next tab stop 
							(multiple of 8 characters) | 
						 
						
							| 0x0A | 
							Cursor down | 
						 
						
							| 0x0B | 
							Cursor up | 
						 
						
							| 0x0C | 
							Clear screen | 
						 
						
							| 0x0D | 
							Carriage return (cursor to 
							beginning of line) | 
						 
						
							| 0x0E | 
							Blink on | 
						 
						
							| 0x0F | 
							Blink off | 
						 
						
							| 0x10 | 
							Select standard alpha font | 
						 
						
							| 0x11 | 
							Select alternate alpha font | 
						 
						
							| 0x12 | 
							Select lower half of 
							graphics font | 
						 
						
							| 0x13 | 
							Select upper half of 
							graphics font | 
						 
						
							| 0x19 | 
							Cursor right | 
						 
						
							| 0x1A | 
							Home cursor | 
						 
						
							| 0x1C | 
							Inverse on | 
						 
						
							| 0x1D | 
							Inverse off | 
						 
						
							| 0x1E | 
							Display cursor | 
						 
						
							| 0x1F | 
							Hide cursor | 
						 
						
							| 0x20 - 
							0x7E | 
							Display character always 
							using standard font | 
						 
						
							| 0x7F | 
							Delete character under 
							cursor | 
						 
						
							| 0x80 - 
							0xFF | 
							Display character using 
							selected font | 
						 
					 
					In the future, it should be possible 
					to implement more of the MTX control & escape codes in the 
					firmware. 
					
						
							| NB : These control codes are 
							applicable only to Bill's development version of the 
							80 Column board. The "final" version of the firmware 
							to be included in the CFX-II 
							board are documented on the
							CFX-II 
							pages.  | 
						 
					 
					The video output connector has 8 
					connections, of which only the first 6 are essential: 
					
						
							| 
							Pin | 
							
							Description | 
							VGA Pin | 
						 
						
							| 1 | 
							Ground | 
							5, 6, 7,  8, 10 | 
						 
						
							| 2 | 
							Red | 
							1 | 
						 
						
							| 3 | 
							Green | 
							2 | 
						 
						
							| 4 | 
							Blue | 
							3 | 
						 
						
							| 5 | 
							
							Horizontal Sync | 
							13 | 
						 
						
							| 6 | 
							
							Vertical Sync | 
							14 | 
						 
						
							| 7 | 
							Ground | 
							5, 6, 7, 8, 10 | 
						 
						
							| 8 | 
							5V | 
							  | 
						 
					 
					
					  
					It should be noted that, while it is possible to drive the 
					board from machine code, or using the OUT statement in 
					BASIC, it is not really a stand alone add-on. It does not 
					include a Z80 ROM to provide MTX drivers. It will work much 
					better, paired with something, such as Martin's CFX, which 
					has a ROM that could be revised to provide CP/M and BASIC 
					support for the VGA board. This is actually no different to 
					the original Memotech 80 column card, which relied upon the 
					SDX ROM to provide drivers. 
					  
					The design consists of a Parallax Propeller chip (a fast, 
					multi-core micro-controller), a serial EEPROM to contain the 
					Propeller firmware and a 3.3v regulator. The Propeller has 
					32 I/O lines which are connected as follows: 
					  
						
							| 
							Pins | 
							Connection | 
						 
						
							| 0 -7 | 
							VGA output | 
						 
						
							| 8 - 15 | 
							MTX Z80 address lines A0-A7 | 
						 
						
							| 16 - 23 | 
							MTX Z80 data lines D0-D7 | 
						 
						
							| 24 - 27 | 
							Z80 I/O lines /IORQ, /RD, 
							/WR, /M1 | 
						 
						
							| 28 & 29 | 
							Serial EEPROM I2C 
							connection | 
						 
						
							| 30 & 31 | 
							Debug / program connector | 
						 
					 
					
					  
					The Propeller is a 3.3v chip, but its I/O pins are 5v 
					tolerant (with current limiting), allowing it to be 
					connected (via resistors) directly to the Z80 bus. 
					  
					The prototype board contains a couple of bugs: 
						- 
						
						I mis-read the data sheet for the MPC1700 regulator I 
						used. I thought it required a divider chain to produce 
						3.3v (similar to the 317 variable regulator). This turns 
						out to be unnecessary, so the resistor to ground (R35) 
						was replaced by a shorting link, and the resistor to 
						rail (R34) omitted.  
						- 
						
 The 
						I2C clock and data connections from the Propeller to the 
						EEPROM were reversed.  
					 
				 
				The debug / program connector I have 
				included in the design allows for: 
				
					- Re-programming the EEPROM in-situ. Hold the Propeller 
					reset, and write to the EEPROM using I2C
 
					-  Dynamic loading of firmware. Pulse the Propeller 
					reset, then load new firmware from external source using 
					serial protocol on pins 30 & 31.
 
					-  Serial output (3.3v TTL) of firmware diagnostics.
 
				 
				
					
						| Pin | 
						Description | 
						RPi Connection | 
					 
					
						| 1 | 
						Ground | 
						Gnd | 
					 
					
						| 2 | 
						Reset | 
						GPIO 17 | 
					 
					
						| 3 | 
						Serial data in (3.3v logic 
						level) | 
						TxD | 
					 
					
						| 4 | 
						Serial data out (3.3v logic 
						level) | 
						RxD | 
					 
					
						| 5 | 
						EEPROM write protect | 
						Gnd or n/c | 
					 
					
						| 6 | 
						EEPROM I2C clock | 
						SCL1 | 
					 
					
						| 7 | 
						EEPROM I2C data | 
						SDA1 | 
					 
					
						| 8 | 
						5V | 
						5v or n/c | 
					 
				 
				I have also been using this project to begin to learn Kicad. 
				Since this project is intended as a proof of principle, rather 
				than a finished product, the current PCB layout is not 
				particularly designed to match the MTX. Also it is optimised for 
				hand etching. It would probably be worth redoing the layout 
				before having any boards made professionally. 
				Much of the development was performed using a Raspberry Pi 
				and a
				
				Propeller HAT. This was used to develop and test much of the 
				Propeller firmware, particularly the VGA code before building 
				the hardware. This was based upon the High-Res text code by 
				Parallax, but with revisions to allow different foreground and 
				background colours for each character cell. 
				It should be possible to use the Propeller HAT to program the 
				EEPROM, but I failed to get that to work, and instead programmed 
				it using I2C directly from the RPi following the instructions at
				
				http://www.richud.com/wiki/Rasberry_Pi_I2C_EEPROM_Program. 
				The commands used for programming were: 
				
					
						sudo raspi-gpio 17 op pn dl 
						eeprog-0.7.6-tear12/eeprog -f -16 -w 0 -t 5 
						-i MTX_Monitor_2.eeprom /dev/i2c-1 
						0x50 sudo raspi-gpio 17 ip | 
					 
				 
				 There is more that could be done with the Propeller 
				firmware: 
				
					- Adding more control codes.
 
					- User definable characters (all 512) should be straight 
					forward
 
					- I think it should be possible to add a two colour 
					320x240 graphics mode. The pixel buffer will have to overlay 
					the text & attributes buffer, so it will not be possible to 
					switch from one to the other without rewriting the screen. 
					The Propeller does not have enough RAM to support 640x480 
					graphics even at two colour.
 
					-  Provide access to the serial port on the debug 
					connector from the Memotech Z80.
 
				 
				The Propeller chip has 32KB of main RAM, which is loaded from 
				the serial EEPROM on startup, so there is a limit of what can be 
				included in one firmware version. Other features that could be 
				provided by different firmware images include: 
				
					- The current version produces 24 rows of text, as that is 
					the CP/M standard. In order to do so on VGA it uses 8x20 
					character cells. This is convenient as the alpha font was 
					produced by doubling the height of the original MTX Monitor 
					characters, taken from MEMU (thanks Andy). However, other 
					options would be 30 lines of 8x16 characters, 40 lines of 
					8x12 characters, or 60 lines of 8x8 characters. More lines 
					of text require more space for the text & attributes buffer, 
					but the font definition is smaller to compensate.
 
					-  The Propeller chip is using software decoding of 
					the Z80 I/O requests. This minimises the chip count, but 
					also means that the Propeller could respond to reads and 
					writes to any Z80 I/O port. It may therefore be possible to 
					produce a hardware emulation of the original Memotech 80 
					column board. This would, however, limit the capabilities of 
					the VGA board.
 
				 
				Taking the design further, using software I/O decoding 
				minimises the chip count, but is extravagant with Propeller pins 
				(it uses 12 of them). Using external Z80 address decoding could 
				free up some of these pins for other uses. 
				 For one example, connecting the Propeller to an SD card 
				would require 4 I/O pins from the propeller chip. For this to be 
				worthwhile it would be necessary to include a ROM for the Z80 as 
				well, which would also require address decoding. Still, a 
				suitable PLD could provide all the decoding. Add that and a 
				suitable EEPROM and you might have a five semiconductor board 
				that could support 80 column CP/M. I leave that as an exercise 
				for the reader (at least for now). 
				
				
				  
				  
				References: 
				  
				
				
	 |