Sunday 25 September 2022

Minstrel 2 Pixel Synchronisation (Part 3)

Welcome to part three of the two part series on updates to the Minstrel 2 ZX80 clone.

"What's going on?"

A brief recap:

  • I have run out of Minstrel 2 PCBs
  • I would like to order some more, but decided to fix a few things
  • I have found a way to fix a video glitch with minimal changes
  • I have concluded that it would not have been visible on a real ZX80 on a 1980s TV

I could just make the minimal changes to the PCB to fix the glitch, but there are a couple of questions left over from Part 1, plus a new one. First off:

"Why are the chips the wrong way around?"

One of the things that seems to be lost is the mists of time is why I originally routed the board with the ICs effectively upside down.

"Who did I think I was, Amstrad?"

I looked back through the archives, and was surprised to find my very first attempt at laying out the Minstrel was completely different to the final one.

I think it was based on the original ZX80 layout, and is oddly similar to the way I laid out the Minstrel 4th.

It looks like I tried to autoroute it to see if it was possible in that form. I presume I gave up on that layout for the Minstrel as it blocks several of the mounting holes.

The next revision was in the more familiar layout.

It took a few revisions to get it routed, but I finally went with that layout pretty much unchanged.

And yes, right from the off, the 14 and 16 pin chips are positioned upside down, with pin one top right. It may have given some minor advantage on some of the trace routing, but no, sorry, I have no idea now why I did that.

There were various things wrong with that first board, I had wired up the keyboard columns wrong (I assumed it would be in ascending order from A8-A15). I had missed the link from A6 to /INT, and I hadn't bothered with the edge connector.

Soon after, I added the 74LS08 circuitry to generate the back porch, added the expansion port and fixed the mistakes. I also moved the voltage regulator to the right position and added a reset button.

That became the Minstrel 2.

Back to the present day (or rather a few weeks ago) (Ed. actually, it was now about 6 months ago since the original Patreon posts). Whilst building up the Minstrel 2.7 board, I found myself wondering if I could do a better job of the routing. I am going to alter the back porch circuit to use the 74LS74 to add pixel sync, so I may as well turn the chips around as well. In for a penny.....

I decided to add a pin header to the expansion slot, it might be useful for something, but it will also make the routing easier (through hole parts = free via with every pin).

I also took the opportunity to add an alternative position to mount a 7805 switching regulator, as the taller ones clash with the ZX81 cases in the standard 7805 position.

I got rid of one of the third ROM address jumper, I don't think all three were ever used. Most of the time just a single jumper is needed to select 4K or 8K (I added silkscreen markings for those). The second one can be used for the ZXpand, so I left that one, but I don't think anyone is having eight ROM images on a Minstrel 2.

I started off trying to do the "vertical traces on the back, horizontal on the front". That works well where there is space to do it.

I was particularly pleased with how this development board turned out, but that was specifically arranged to make that easier.

No, you spend too much time hand routing one off development boards.

I did try to autoroute the Minstrel V2.9, to see how that would compare. It took a few minutes, compared to about a week on and off for me.

It just doesn't have any style or panache.

My version started off well, but got a bit messy when I ran out of space and had to shuffle things around to fit in the last few dozen traces.

I still kept to the horizontal / vertical pattern where I could.

I have gone for green boards, like the originals, and for the version which fits into a ZX81 case or can be used standalone with a membrane or external keyboard.

And there you have it, the Minstrel 2 V2.9

"What about the new question?"

There was going to be a part 4, but I'll just give you the edited highlights.

One additional problem I wanted to investigate has only happened a couple of times on Minstrel kits, and seems to be an issue with one of the parts of the circuit where the analogue world meets the digital world. 

This has been seen on at least one Minstrel 2 build that used a kit of parts identical to that used on dozens of others builds that worked correctly. 

What seems to be happening is the invert signal is cutting off way to early (not just the brief glitch at the end). It is one of those  annoying problems where if you clip on a scope probe, or touch something with your finger, it starts working. I have tried to remotely diagnose this in the past and have advised fixed it by adding a pull up or pull down resistor to effectively replicate the presence of the scope or diagnostic finger.

The input to the RC filter is shown in green at the bottom, and the output in yellow at the top. This is 74LS logic, so the input is just below 4V peak, and the output is barely 2V peak. It seems that the level of the signal was actually high enough to register as "high" between the peaks, and the probing was pulling it down sufficiently so only the peaks were read as "high".

This is something that has only been seen in the last fews years, so I am not sure if something has changed with the input stages of TTL chips, or if the tolerances have been adjusted. It is after all identical to the ZX80 schematic and the same Texas Instruments SN74LS parts. Presumably they didn't see this back in the day or it would have been addressed.

After trying lots of different things, I have gone for the option of reducing the value of the existing pull down resistor from 470Ω to 390Ω.

I have tried changing that resistor on several working Minstrel 2 boards, and they continued working after the change, so I think I will just change that on the schematic and parts list to a 390Ω resistors as a preventative measure.

I already have the first batch of V2.9 PCBs, but I will update the silkscreen for the next batch.


Advertisements

The new V2.9 PCBs are available from my SellMyRetro store

https://www.sellmyretro.com/offer/details/62001

There are also a couple of built and tested Minstrel 2 boards (with 390Ω resistors fitted)

One blue V2.7 PCB designed to fit in a ZX81 case

https://www.sellmyretro.com/offer/details/62386

And one green V2.7PCB for stand alone use with a ZX81 Membrane or other keyboard.

https://www.sellmyretro.com/offer/details/62387

See also the full range on Minstrel and Mini PET kits - http://blog.tynemouthsoftware.co.uk/2023/09/minstrel-and-mini-pet-kit-updates.html


Patreon

You can support me via Patreon, and get access to advance previews of posts like this and behind the scenes updates. This now also includes access to my new Patreon only Discord server for even more regular updates.

https://www.patreon.com/tynemouthsoftware

Monday 19 September 2022

Minstrel 2 Pixel Synchronisation (Part 2)

In the previous post (http://blog.tynemouthsoftware.co.uk/2022/09/minstrel-2-pixel-synchronisation-part-1.html), I asked a series of questions, which led up to 

"Can I make the video output of the Minstrel 2 better?"

I came up with a solution that involved removing the 74LS08 chip that had been added to provide the missing back porch part of the video signal, and replacing it with a 74LS74 which did both the back porch and also pixel synchronisation. I made the modification a bit more permanent on my test board and tested it further.

It was looking promising, but the next question was a bit more ethical.

"Should the glitches be fixed?"

The fixes make the output much cleaner, but also better than the standard ZX80 circuit, so should they be fixed?

In the previous post I put forward the suggestion that maybe these glitches would not have been visible to a ZX80 user back in the 1980s. My theory being that the RF modulator and circuitry inside the TV would form a low pass filter and effectively get rid of those glitches.

"Can I recreate a 1980s setup to test that?"

In order to resolve this, I need to create such a setup.

Back in the early 1980s, I learned to program on a ZX81 displayed on a Binatone Starvision TV.

(not that actual ZX81, and not that actual TV, but the same models).

To test this properly I should have used my ZX80, but I can't get to that at the moment, so I went for a Minstrel instead.

This is a Minstrel 1. My first go at a ZX80 clone. This has the original video mixer and does not have the back porch circuitry, so I thought it was the fairest test.

That does not have RF output, so I borrowed the modulator on a ZX81 board. With the ULA disconnected it is not being driven, so I linked the input to the mixed composite video on the Minstrel 1. That should mean my setup now matches the ZX80 schematic.

I connected it up to the TV, tuned to channel 36 on the TV and I got a K!

I bodged up an old Minstrel keyboard to the Minstrel 1 and tried a few tests, including the inverted and non inverted goth battenburg I had used previously, and as I predicted, the glitch was not visible.

Even close up, I couldn't see any evidence of the glitch lines on the 1980s CRT.

A modern LCD TV is much higher resolution and the signal path has higher bandwidth, so the glitches are passed and displayed as thin grey lines.

Next, I tried Kong.

To keep it 1980s, I loaded it from tape.

And there was Kong himself, waving his arms about as usual, and with no glitches as far as I could see.

Again close up, no sign of the thin glitch lines seen on the LCD.

I also tried Breakout, and here for the first time, I could just make out the thin lines on the bottom half of the screen.

But nowhere near as visible as on a modern LCD TV.

So given the user would have barely seen the glitches on 1980s hardware, I think it is reasonable to remove them so they will not show up on modern hardware. (well I say modern, that LCD TV is probably 10 years old....).

I don't think that is going to far to improve the picture output.


These were previously Patreon exclusive posts, and as I rework them for this blog, it occurs to me that I tackled this problem in the digital domain. I wonder if an alternative solution would have been add a low pass filter to the video signal to replicate the effect of the UHF modulator and TV circuitry. This would have blurred the edges of the pixels a bit (horizontally only), and would probably have flattened out the glitches.

I think the sharper image with nice square pixels is a better solution, those who prefer the misery of the blurry version are welcome to find an original ZX80 and Binatone Starvision on ebay.


Next time (yes, there is a part 3, and maybe even a part 4), I look at two more questions, "Could I route the Minstrel 2 board any better than I did in 2016?" and "why are the chips the wrong way around?".

http://blog.tynemouthsoftware.co.uk/2022/09/minstrel-2-pixel-synchronisation-part-3.html


Advertisements

A small spoiler for the next post, but the updated Minstrel 2 PCBs are available from my SellMyRetro store:

https://www.sellmyretro.com/offer/details/minstrel-2-zx80-compatible-computer-pcb-(green)-62001

See also the full range on Minstrel and Mini PET kits - http://blog.tynemouthsoftware.co.uk/2023/09/minstrel-and-mini-pet-kit-updates.html

Patreon

You can support me via Patreon, and get access to advance previews of posts like this and behind the scenes updates. This now also includes access to my new Patreon only Discord server for even more regular updates.

Now you know the setup I used to take the picture below with the patreon URL on.

https://www.patreon.com/tynemouthsoftware

Sunday 18 September 2022

Minstrel 2 Pixel Synchronisation (Part 1)

This is a compilation of several Patreon posts covering a series of questions I posed to myself.

The first one came when I sold the second last Minstrel 2 PCB on my sell my retro store (https://www.sellmyretro.com/store/tynemouth-software)

"Have I got any more of those?"

I had a bit of a search through various boxes of bits.

I didn't find any more PCBs, but I did find a few partially complete kits of parts. I presume these were extras packed when I did the final editions, but weren't turned into full kits because I ran out of one or more parts at the time.

"I wonder if I could get the missing bits now?"

it is six months later, so I had a bit of a look around.

Whilst I was doing that, I received an email from the person that ordered the Minstrel 2 PCB. They were having problems locating some of the parts, would I sell them a complete kit of parts?

Well, that was good timing. I was only short of a few parts, and I could temporarily steal those from one of my Minstrels, so I gave them a price, and they paid.

Right, I unpacked the PCB and re packed it with a kit of parts. Printed the new postage and booked the collection.

Then I got another email, how much would I charge to build the kit? I gave them a price, and they paid. For the second time, I unpacked their order and for the first time in quite a while, I built up a Minstrel 2.

It was whilst I was building the kit, that I had some more thoughts.

"Why did I put all the chips the wrong way around?"

"I wonder if I could do a better job of routing this board?"

I persuaded myself not to get carried away and got on with testing the Minstrel 2.

During the testing, I was looking at the small glitches you always get on the ZX80 output.

I wonder if that could be fixed?

The glitches in the output are caused by the series of events that happen towards the end of the 8th pixel of each character. First, the "invert this character" signal is reset. Then the next character is loaded into the shift register and the "invert this character" signal is set based on the invert status of that next character.

The ZX80 has 128 characters, which is implemented as 64 characters and an invert signal which gives a second 64 inverse characters.

The slight gap between invert being cleared, and then set again is noticeable when you have a series of inverted characters. You also see a vertical line when an inverted character is followed by a non-inverted one.

Breakout is a good example of this, with clear "jail bars" being visible.

Here the inverse goth battenburg is followed by a space and you get the vertical line. This does not happen with the non-inverted version.

It is less obvious, but the white vertical line at the end results in the 8th pixel appearing thinner than the others.

In the 1980s, this was probably less of a problem as the RF modulation in the ZX80 and then the RF demodulation, the video circuits and CRT itself of the TV all form low pass filters. By the time you see the screen, those are barely visible on a black and white TV. It is only noticeable on a modern LCD display. (Hold that thought until part 2)

There are ways around this, and the final stage on the Minstrel 3, 4th, 4D and the Mini PETs, I added a D type flip flop. This is clocked by the pixel clock, and has the effect of sampling the video signal once every clock cycle.

This does two things, firstly it means the output will always have pixels of exactly the same size, and secondly, any glitches that occur between clock pulses will be removed.

"Why didn't I add this to the Minstrel 2?"

Well, I was trying to keep it close to the ZX80 design. On the first board, (the Minstrel 1 as it wasn't called at the time), all I did was add an emitter follower to the video signal that would have fed the RF modulator.

That was not good with modern TVs as it was missing the back porch signal. This is a short section after the horizontal sync pulse which sets the black level for the rest of the line.

The second version of the board became the Minstrel 2, and for that I added an extra 74LS08 chip to add this missing section to the output. More about that in the blog post I wrote at the time.

http://blog.tynemouthsoftware.co.uk/2017/01/minstrel-zx80-clone-video-output.html

This 74LS08 did a few jobs with the video signal, firstly it buffered the sync signal (to avoid altering the cassette save signal), and secondly it used a pulse stretched version of the sync to add the back porch black section at the start of the line.

Over the course of production, I tweaked that circuit a bit. It's output was a bit high for som TV inputs, so I added an optional 3K3 resistor to reduce the level a bit.

During the development of the Minstrel 3, I looked at various composite video output circuits and settled on this design, which I have used on all of the kits since then.

On the last revision to the Minstrel 2, the V2.8 boards, I implemented this revised video amplifier circuit, combined with the 74LS08 back porch circuit

"Can I add pixel synchronisation to the Minstrel 2?"

The simple option would be to add an extra 74LS74 flip flop to the output. I didn't want to do that as I was trying not to add too many extra parts to the ZX80 design, and more importantly, there wasn't any space left on the board.

Ideally this would be the circuit:

The sync signal is buffered for the video mixer, and also for the pulse stretcher. The video is synchronised via the flip flop and combined with the stretched sync pulse to generate the back porch.

"I wonder if I could do that with one chip?"

For this to be viable, I would ideally replace the 74LS08 with another chip to keep the board looking the same.

One trick I could use is one I used in the other Minstrels and Mini PETs. The /PRE input of the flip flop is used to set the output low, and keep it low until /PRE is released. Feeding the stretched sync pulse into there means I can do without the AND gate.

That reduced the requirements to buffering the sync signal and the flip flop.

I tried building the circuit without the buffering, so see if that would work, but this it was too much for of a load on the sync pin, and it was doing odd things such as not counting lines correctly.

I had a bit of a think and came up with this.

It had to look at that for a long time to convince myself it would work. When sync is generated, there is an inverted version, /sync which is generated, but not used anywhere. I use the two versions of sync to drive the /CLR and /PRE inputs on the flip flop. When sync goes low, /CLR causes the output to go low. When sync goes high, the output remains where it is, but at the same time /sync goes low, /PRE causes the output to go high. I went through the various conditions, It should only ever see low high or high low as the signals are the inverse of each other. At the transition point, there may be a brief low low or high high. If it is high high, then the output will remain as is, not a problem. If it is low low, the output state is not defined, but I don't mind if it is low or high, because it will be almost immediately followed by a low high or high low input which will set it appropriately.

Is that right?

The changes were not too big, so I patched it together on a breadboard.

"Is this going to work?"

Excellent, that has fixed the problem.

I tried various things, and all were showing no issues.

Breakout was now solid black, the jailbars were gone.

That seemed to resolve all the issues. Sorted.

I that looks like it is a viable option.

"Should I do a new version of the Minstrel 2 PCB with this fix?"

Find out in part 2:

http://blog.tynemouthsoftware.co.uk/2022/09/minstrel-2-pixel-synchronisation-part-2.html


Advertisements

A small spoiler for the next post, but the updated Minstrel 2 PCBs are available from my SellMyRetro store:

https://www.sellmyretro.com/offer/details/minstrel-2-zx80-compatible-computer-pcb-(green)-62001

See also the full range on Minstrel and Mini PET kits - http://blog.tynemouthsoftware.co.uk/2023/09/minstrel-and-mini-pet-kit-updates.html

Patreon

You can support me via Patreon, and get access to advance previews of posts like this and behind the scenes updates. This now also includes access to my new Patreon only Discord server for even more regular updates.

https://www.patreon.com/tynemouthsoftware