Description

ZX-VGA-JOY is ZX Spectrum interface for connecting any kind of VGA monitors, Kempston joystick and computer reset. It supports 7 screen modes: 640×480 @ 60Hz, 640×480 @ 75Hz, 640×480 @ 85Hz and 800×600 @ 60Hz with 4 different zooms (paper/border sizes).
This interface is not signal converter, it works in parallel with internal graphics IC(ULA) taking video data directly from CPU and provides crystal clear picture on VGA monitors.
Also, the picture on VGA monitor is precisely synchronized with PAL signal generated from ULA, so games that are relying on ULA timing looks as they should.
ZX-VGA-JOY is compatible with all Sinclair and Amstrad ZX Spectrum models and probably with a number of clones. It is not necessary to do any modification on the original computer as long as the expansion port is functional on pins used by ZX-VGA-JOY.

Features:

  • CRT and LCD VGA monitors
  • 7 screen modes :
    640×480 @ 60Hz, 640×480 @ 75Hz, 640×480 @ 85Hz and 800×600 @ 60Hz with 4 different zooms
  • Synchronized with ULA
  • Kempston Joystick interface (can be disabled/enabled)
  • Computer Reset button
  • Compatibile with all Sinclair and Amstrad models
  • Settings adjusment with icon menu
  • micro USB connector (under top cover) for firmware update
  • Low power consumption

Image Gallery

ZX-VGA-JOY in action

44 thoughts on “Description”

  1. On the joystick port, with so many devices including Kempston ports, would it be possible to add an option to make it do something else? I don’t mean Sinclair, as a +2 machine already has Sinclair ports. I mean support the old Fuller standard, or simply change the IN port from IN-31 to IN-55 (see game ‘Bomb Munchies’, the first game to support four simultaneous players on joysticks).

    1. Hi,
      Unfortunately, Kempston joystick port is a separate circuit based on the original schematic, the only connection to the microcontroller is enabling/disabling function.

  2. Does this work by monitoring memory writes on the data bus, and managining it’s own copy of the screen RAM? If so, can I make a suggestion? Have a switch, either menu-controlled or OUT controlled, that lets it display the OPPOSITE video RAM on a 128K machine. That way, a Spectrum can drive two screens at once! (The SPECTRA device can already do this).

    I would like to see it able to support ULA+ colours. But most interesting to me would be to support 8×1 multicolour, with attributes 8K higher in RAM than the pixels, just like a TIMEX machine.

    1. Hi Jason,
      Yes, it is working exactly as you describe. It is a good suggestion to include the option for two screens. This option, multicolor 8×1, gigascreen, … will be included in future firmware. But, next version v1.03 is already concluded, it is in the test phase.
      Best regards Goran

  3. Hi, very interesting device!
    One specific question: is it compatible with Opus Discovery peripheral thorough connector (no NMI line)? I would know if the device has been really TESTED on that connector (= it’s ok for dimensions & functions) and not only if it is theoretically compatible.
    Thanks.

    1. Hi Carlo,
      Thank You for Your comment!
      NMI line is not required for ZX-VGA-JOY but I didn’t really test it on that connector.
      As I see in pictures, there should not be a mechanical problem.
      If there are full address and data bus, WR, IORW, MEMREQ, RESET, INT and (M1, RD only for joystick port) lines, it should work.
      Joystick port can be disabled on ZX-VGA-JOY.

      Best regards Goran

  4. what is joystick connector pinout ? Contain +5V and GND ? Only one fire button support ? All data lines are used during reading joystick port 31 ?

    Best idea is:
    – addressing of port 31 (A7-A0) : 000xxxxx (X = unused). A7-A5=0 is often used on all modern kempston joystick based interfaces. If is decoded only A5=0 then is impossible connect Kempston mouse (K-MOUSE) interface. Best is use full 8bit address decoding 00011111.
    – ideal and often used data layout: D0-D3 = directions, D4=fire1, D5=fire2, D6=fire3 or 0, D7=0
    – if you use +5V on pin 7 and GND on pin 8, fire 1 on pin 6, fire 2 on pin 9,fire 3 on pin 5 and this input pins will contain pull-up resistor 4k7 to +5V then will possible connect real Amiga Mouse for controll games with mouse support. And may work all new chinesse clones of Sega genesis controllers as joystick with 2x fire. If you change pull-up resistor on pin 5 to 200-300 Ohm then may work also original Sega controllers.

    1. Hi,
      Joystick port is embedded in hardware and besides on/off control from the microcontroller is a completely separate circuit.
      Decoder is A7=0, A6=0, A5=0, A4…A0=X, RD=0, IORQ=0, M1=1. Pin arrangement is like you wrote except there is no fire2 and fire 3.
      D6=0,D7=0 when you read port 31. On each pin there is pull-up of 10k and +5V is on pin7 over est. 200mA PTC fuse.
      BTW, I visited your web pages. You have a lot of nice things there! 🙂 Very interesting!

      Thank you for info, it is really helpful!

      Best regards Goran

  5. ZX-VGA is compatible with all ZX 128kB models then must autodetect also paging port 32765. What address decoding is used and is same for all ZX128 models ? IORQ=0, WR=0, A15=0, A14=1, A1=0 ?

    1. Hi,

      ZX-VGA-JOY can listen to all ports (0-FFFF), because address decoding is done by software, not embedded in hardware.
      The same thing is for memory access.
      I decide to use full decode of paging port 32765 (A15=0, A14…A2=1, A1=0, A0=1, IORQ=0, WR=0).
      I think there is no reason to use any other address then 32765.
      But if there is software that for some reason uses a different address to access paging register, I can add an option for different decode scheme.

      Best regards Goran

      1. Yes. Exist some software using LD A,value : OUT 253,A. Value contain D7=0 and D6=1 for use on all 128models. Then is better use this decoding: A15=0, A14=1, A13…A2=ignored, A1=0, A0=ignored, IORQ=0, WR=0 for best compatibility with demos and games. Some demos also write to 128 paging port with A0=0 for change border color in same time.

        1. Hi,

          Thank you for your suggestion!
          I will do something about this in the next firmware since there are games/demos that are taking advantage of partial decoding.

          Best regards Goran

    1. Hi Jonathan
      It is really hard to say right now.
      There is no dedicated hardware for generating VGA signals on ZX-VGA-JOY (it is done by microcontroller’s peripherals and DMA), and this hardware is not so flexible when we are talking about many colors.
      But I had in mind to do some other stuff like sprites, scrolling, colors for each line(8×1), Tiles, …
      I am aware that game developers will probably avoid this due to it is only for ZX-VGA-JOY users, but it is fun to play with those things 🙂
      Best regards Goran

  6. Looks great, Goran 🙂

    I think it’s very nice to have an alternative add-on like this.
    I’d like to ask if it follows the ZXI standard. And how compatible is it with other popular add-ons people already might have such as DivMMC devices and others?

    Thanks,
    Mike.

    1. Hi Mike,

      Thanks!

      ZX-VGA-JOY is a listener on ZXI with very high impedance on each pin so it can not disturb other interfaces, also other interfaces can not disturb ZX-VGA-JOY if the computer is running correctly.

      An exception is Kempston joystick port, it is not a listener, but it uses the same decode scheme as the original interface.

      In addition, this port can be disabled from the icon menu of ZX-VGA-JOY. So if there is Kempston port present on other interface connected to spectrum user should switch it off on ZX-VGA-JOY.

      Best regards Goran

  7. Hi Goran,

    awesome project !
    Can you please elaborate what does it mean when you say “the picture on VGA monitor is precisely synchronized with PAL signal generated from ULA,” ? How do you translate 50hz video to higher frequency of vga ?

    All the best!
    Vladimir

    1. Hi Vladimir,
      Thank You and good question!
      When program or game write in something to video memory of Spectrum, it will appear on the screen at a certain point of time when ULA read it and it will stay on screen until the same time in next frame.
      Changes between that are not visible on the screen. That means ZX-VGA-JOY should create a frame for showing on VGA in a way to get data from video memory at the exact same time as ULA.
      When we have the right frame(the frame that user see on TV) it can be pass to “frame FIFO” which is filled in every 20ms(50Hz). On the other end, VGA gets frames from “frame FIFO” every 16.6ms(60Hz).
      If FIFO is empty it uses last read frame. This will happen because VGA has higher refreshing rate then PAL.
      Hope this is useful.
      Best regards Goran

      1. So…basically you’ll have a lot of judder. Probably the best mode is the one at 75hz, but even with that judder will be noticeable.

        1. Hi Daniel
          Motion picture looks very smoothly on all screen modes, no judder at all, at least I can not see it.
          Each frame from ZX Spectrum is shown on the VGA monitor.
          Best regards Goran

  8. Hi! Compliments on this great piece of hardware! I’m interested in getting one. Please, let me know when it’s available and tell me how much will it cost. Thank you!

    1. Thank You Javier,
      Hopefully next week I will put links to shops where it can be found.
      Best regards, Goran

  9. Hi Goran
    This looks cool and I think I will buy one, because I have ZX-HD but this changes the colors in nearly all AGD games because of ULAplus support, and this can not be switched off.
    A couple of questions:
    – Can the device run Wolfenstein from 2004 in full color or will it be in b/w ??
    – As there is no through-connector will it then work placed last as interface no. 4-5 ?? Because I have a lot of other interfaces connected.
    Regards,
    Søren

    1. Thank You Søren!
      ULAplus is currently not supported in this firmware, and AGD games should appear in the normal color arrangement.
      I will test Wolfenstein 2004 and let you know, I haven’t tested that game.
      As long as all connections are pass-through it should work as the last interface even on a 4-5th place.
      Best regards, Goran

      1. Hi Goran
        I’m looking forward to hear about Wolfenstein, because it runs in multicolor with an old TV while it is in b/w with ZX-HD. If you don’t have beta disk it can also run from a devise that uses esxdos.
        Regards,
        Søren

        1. Hi Søren,
          I tested game Wolfenstein 2004.
          I had trouble to loading it but I found the way, I purchased DivMMC Pro one (nice product).
          I don’t know if there any other version of the game, but this one has no
          the multicolor effect in the gameplay at all.
          It is black and white on TV and on ZX-VGA-JOY.
          On TV look like there are some colors but actually that is an only TV signal
          imperfection.
          I attached a picture from TV (left) and ZX-VGA-JOY(right)

          http://zx-vga-joy.com/wp-content/uploads/2019/04/1_TV_ZX-VGA-JOY.jpg

          When TV has to show two black vertical lines on white background
          distant only 2 or 3 pixels, some unwanted colors can appear.
          I wrote a small Basic program to show you:

          http://zx-vga-joy.com/wp-content/uploads/2019/04/2_Basic_prog.jpg
          http://zx-vga-joy.com/wp-content/uploads/2019/04/3_vlines_TV.jpg
          http://zx-vga-joy.com/wp-content/uploads/2019/04/4_vlines_zx-vga-joy.jpg

          You can see when two vertical lines are close to each other, blue and yellow colors appear.
          I think you have mistaken this side effects with multicolor.
          Also, I attached some intro multicolor picture from the game, It looks nice on ZX-VGA-JOY and more stable than on TV, but I had to enable interlaced mode.

          http://zx-vga-joy.com/wp-content/uploads/2019/04/5_multicolor_intro.jpg

          In current firmware interlaced mode is disabled permanently. I did that
          because the motion picture on many games looks better if it is disabled.
          But for this and similar interlaced multicolor effect, in next firmware, I
          will put it as an option on the icon menu.

          Best regards Goran

          1. Hi Søren,

            Yes, on this video, the game is running on an emulator with TV signal emulation video filters turned on.
            I take two screenshots on Spectaculator 8.0 emulator with that ability with and without video filters:
            http://zx-vga-joy.com/wp-content/uploads/2019/04/EMU_wolf2004_TV_RF.jpg
            http://zx-vga-joy.com/wp-content/uploads/2019/04/EMU_wolf2004_SCART.jpg

            So the game itself does not send any color information in the 3d environment it just uses clever pattern shapes which on TV produces artifact shown as colors.
            There is an article on wiki about that: https://en.wikipedia.org/wiki/Composite_artifact_colors

            ZX-VGA-JOY cannot run that kind of video filters like some PC emulator, video filters need a lot of math on each pixel.
            This color effect should not be visible on the ZX Spectrum RGB output.

            Best regards Goran

          2. May be interlace setup as: OFF, ON, AUTOMATIC ? I plan add some interlaced effects to ZX games, but on some TV’s is interlace detection different.
            About autodetection – if each zx screen(tv frame) contain different data(during 20 tv frames is detected 20x different screen), then active automatic interlace. As very good feature may be possibility change number of different tv frames before automatic interlace.
            Next feature idea – gigascreen support = mixing colors from both videorams as alternative for interlace.
            Interlaced graphic for ZX Spectrum is on my FB pages or visible on Youtube:
            https://www.youtube.com/channel/UCPAeyJwHf55LgvEP_x5vCFw
            All pictures and games are free for download.

          3. Hi,
            Sorry for the late reply, These days I do not have time for Spectrum, a lot of obligation at work.
            Interesting ideas about auto interlaced. I should try it.
            About gigascreen, it is not a problem, but it will work only on ZX-VGA-JOY. So rare will be used for new games.
            Nice work on interlaced graphics!
            Hope I will soon have time for firmware updates of ZX-VGA-JOY.

            Best regards Goran

    2. Hi, Søren.
      I’m sorry to hear you are experiencing problems with AGD games.
      I’m one of the admins of the official ULAplus facebook group and I talked with one of the AGD developers.
      It seems that the original developer thought it would be a good idea to give AGD games a palette with non-standard spectrum colours so people could use its effect without doing anything. But (of course) not everyone like that 😉

      So I’m going to figure out how we can create a patcher that will give AGD games the default Spectrum palette.

      I’d like to invite you to the ULAplus facebook group, where I’ll announce more when I have news.

      https://www.facebook.com/groups/ULAplus

      Or you can contact me directly on facebook @ https://www.facebook.com/rpvdlee.

      1. Hi Mike
        Thanks for your mail! I really find it a bit awkward having to patch every AGD game (there are MANY), and since I have cracked beta disk versions with trainer of most of the games those patches will probably not work on my versions anyway. If the extra ULA colors can not be disabled in the software or the hardware for the ZX-HD I think this is not the right device for me. There is also color problems with the games from Death Squad. It is really a shame there is no on/off switch for the extra ULA colors.
        Regards,
        Søren

        1. Hi Søren,

          I’m writing an article explaining exactly why people are having this issue, but in short: the AGD development environment sets a non-standard Spectrum ULAplus colour palette by default. And because ULAplus colours are only displayed when there’s actually a ULAplus available (like AY music), and most developers create games in an environment (either real hardware or an emu with ULAplus switched on) that doesn’t have one, they are not seeing that colours will actually be different for ULAplus.

          So developers basically have been creating “trouble” without realizing it. You can compare it to 48k and 128k spectrum models and a development environment that when creating music on a 48k, automatically creates AY music, but in different octaves. Which will sound “strange” when played on a 128k.

          We’re in dialogue with the developers that create the different AGD versions how to fix this and creating awareness among AGD games developers and gamers.

          For games already out there, I developed an app on which you can drop your original game-file, and it creates a copy with the fixed colours next to it. It’s now in beta-test.
          It already supported .tap and .tzx, but after getting feedback from Ben Versteeg about you using .trd files, I looked into it and am also making it compatible with that format.

          I don’t know if you’re in the regular Spectrum groups on Facebook like ‘Spectrum for Everyone’, ‘Spectrum Forever’, or our official ULAplus group ‘ULAplus – Sinclair ZX Spectrum enhanced ULA’ in which further information and the app will be shared, but else Ben will send it to you.

        2. As this page is dedicated to the ZX-VGA-JOY, I think that any further exchange about the subject is best to be continued elsewhere; either through Ben or the channels I wrote earlier.

          Thank you, Goran, for “lending” us your webpage for this exchange until now 😉

Leave a Reply

Your email address will not be published. Required fields are marked *