Arvid - changelist in 2016

[ main page ] [ news & download page ]

2016.12.17: arvidmame163r4 - new release of the emulator

As promised yesterday the release 4 of the emulator is here. Change log follows:

  • support for setting the X (horizontal) position of the Arvid screen. Requires the latest BBG Arvid firmware 0.4b. To use the feature modify mame.ini parameter called 'arvid_pos_x_mod' and set it to value from -11 to 11. This parameter will help you to center the game screen horizontally on your TV.
  • internal: support for video mode enumeration. Videomodes are no longer hard-coded to known Arvid resolutions. This arvidmame will be able to use additional video modes supported in future versions of BBG Arvid firmware.
  • reverted 'kungfum' driver not to use analog audio. This will make the machine playable on slower computers.
  • linux headless and headless ARM ports: fixed Alsa sound port issue related to volume control. This fixes 'scramble' machine playability.
  •  

    2016.12.16: Arvid firmware update - ver. 0.4b

    This release contains small but important feature. It allows to position Arvid screen horizontally according to your TV set. Previously the screen might have not been completely centered on your TV and you possibly saw black borders of different size on the left or right side of the screen. If you were unlucky few pixels on the left or right side of the screen were completely hidden. Some TVs allow the screen geometry to be adjusted in a hidden engineering menu, but the older (or cheaper) TV sets don't. Although this feature will not remove the black borders completely you could at least move/center the screen so that most of the pixels are visible.

    Binaries and source code is now updated, I recommend to use the sdcard image as it is the least complicated way.
    BTW. the 4th. release of arvidmame that uses this feature is coming soon.

     

    2016.11.09: Arvid PCB ver. 0.4a

    A pack of the new PCBs I mentioned earlier found its way into my mailbox a few days ago. I managed to solder the components and verified all works correctly. I was a bit in a rush and did a poor job, especially the MT3608 module (the small blue board) could have been done better, but anyway everything worked straight away without hiccups so I'm pleased with that.
    The new features - audio connector and video signal auto-detection - work as expected, no issues so far. Technically the PCB is backward compatible, and the previous version of the PCB 0.3b will happily run the current software. Also the latest software will run on both of the boards. The new PCB is slightly bigger so if you decide to produce it, it might cost you a few dollars more than the previous incarnation. This time I used allpcb.com manufacturing service as they offer production of as low as 5 pieces of the PCB and also they offered lead-free production for a good price. Previously I used dirtypcbs.com service which is still great, but nowdays there seems to be more options to choose from.

    I've also released the new PCB source and gerber files, but still keeping the older ones available as they may be useful.

    As you can see I've slightly optimised the space on the board leaving an empty area for other (optional) features. One of them may be CVBS or S-Video out, but no work has been done on it yet as it has very low priority for me as of now.


    Populated Arvid PCB ver. 04a on top of BBG.

     

    2016.11.01: Arvid ver. 04a - updated software

    I've released version 0.4a of the arvid software. The library is still compatible with the previous version 0.3e, so arvidmame r3 should still work fine. Here is the list of changes:

  • Added video mode enumeration function. This is relatively important function that will simplify supporting of new videomodes. If the Arvid firmware is updated and a new video mode is added then the emulator can use the videomode without code modification. Previously this was not possible and arvidmame had to be modified and recompiled in order to support new video modes. Of course not every emulator/app requires that. For example game console emulators use fixed resolutions, so they can still hardcode the video mode they want to use the same way as before.
  • Added new videomode 336 - which was used in old Atari arcade games. Will need arvidmame recompilation (as explained above).
  • The service screen now displays the version number so it will be easier to identify which version is installed.
  • Added videomode test app - it cycles through available video modes and displays the service screen. Only useful if you want to tune-up a new video mode and compare the geometry with other video modes.
  • Simplified and unified video mode source code. All video modes are now defined by just a few parameters and they use common source code. Previously each video mode had its own source code that generated the video signal from scratch.
  • Tweaked video mode 256 and 288 which were slightly narrow compared to other video modes. As a consequence vmode 256 is smoother as it lost tiny jaggy edges.
  • sd card image was updated as well, so the firmware update should be easy - just owerwrite your micro sd card with the new image and off you go.
  •  

    2016.10.22: WIP new pcb

  • I'm designing slightly modified PCB with few more features. The first feature is audio input connector so I can plug in the audio jack from my laptop to the card. The audio is then routed to the SCART connector and sound is played directly on the TV. The second feature is support for video signal auto-detection. Some TVs can automatically switch to certain AV input if there is ~11V present on SCART pin 8. This may be helpfull if you don't want to switch your TV manually or your remote is lost or broken. To produce 11V from 5V I used cheap voltage up-convertor module (MT3608) that is available on ebay. As I run out of space on the board I had to place the module above the ethernet connector. There should be a small gap between the module and the ethernet connector when pin headers are used. Will se how it will turn out. The third small feature is the start button pin so it will be easier to connect the button wiring. Note the emulator already supports the start button sent from Arvid.
    All new features are optional, the board will work the same way as before if the audio jack and/or the MT3608 module is not used.


    Render of the new PCB produced by ZofzPCB app.

    The new PCB source gerbers and schematics will be available once I verify it works fine.

  •  

    2016.10.08: simplified BBG installation

    The installation procedure on BBG was quite tedious and might have put off some people that are not familiar with Linux. So I have made a micro sd card image that has all the required stuff ready and set-up. All you need to do is to write the image to microsd card and boot the BBG from it. The advantage is that the internal flash of the BBG is not modified, so you can still use BBG for development if you want to. See the main page for the new installation instructions.

     

    2016.10.06: arvidmame163r3 - new release of the emulator

    After long 5 months there is the 3rd emulator release. Changelog:

  • Support for horizontal resolution of 292 pixels. Used is some old Williams machines. Requires latest BBG Arvid software (v.03e) to be installed on BBG.

  • Pressing Arvid Coin button for ~10 seconds exits the emulator. That's for unfortunate situations when the emulator loses track of your joystick and there is no other way to exit.

  • Support for Arvid Start button. The new button can be wired to Arvid card and it is now treated as a P1 Start button. It's the pin P9-25 on BBG.

  • Fixed message flickering on the screen when emulator starts. This was caused by the fact Arvid needs either steady stream of video data all the time, or the client software must ensure the content of the front and the back frame buffer is the same. If the video data flow stops and the front and the back video frames are different then Arvid keeps flipping the front and the back frame which causes the flickering. The fix was simple: until the machine emulation is started all frames provided by mame are rendered 2x (to both the front and the back buffer).

  • Joyconf allows alternative buttons to be specified. That means two different buttons can be mapped to do the same thing in the emu. That's useful if 2 different joysticks from different manufacturers pretend to be X-box or PS3 controllers but each uses different button values. See joy.map file for more info.

  • Compiled-in dsound audio for Win32 & Win64 builds. No more crackling audio in WinXX. I didn't noticed that before as I run my builds on Linux Alsa audio module which works fine. I usually just briefly run the Win64 build before the release. This time I used my headphones (testing late at night) and the crackling was quite audible. I could not leave this bug unfixed even though I considered the release ready. Fortunately audio modules in mame can be mixed and matched, so a build can have several audio modules that can be switched in mame.ini via 'sound' parameter. So for WinXX builds I've enabled direct sound audio module that is activated by default and the issue is now gone. Linux SDL builds still have tiny crackling sound issue which seems to be a bit less audible compared to WinXX. Hopefully the next release will address that, until then please use linux headless build (uses Alsa audio module) if that bothers you.

  •  

    2016.05.14: arvidmame163r2 - new release of the emulator

    The same emulator with few of my bugs squashed, and a couple of features:

  • Added mouse support.

  • Added arvid vertical screen position adjustment to the Video options menu. Previously the the code tried to position the game screen by leaving the back gap on the top. This doesn't always look good as the picture positioning depends on the selected videomode and mainly on the TV set how well it can cope with the video frequencies supplied. Basically - each TV is slightly different and displays the picture shifted either slightly to the top or bottom of the screen. Now you can fine-tune the top offset and make the alignment as you please. To save the setting make sure you reset the machine (either by pressing F3 or via menu options).

    Update: Ah, the download site (app.box.com) seems to be misbehaving a bit recently. Clicking on the file doesn't actually download it even though it reports "Your download has started.". The only way how to download seems to be to click on the check box on the right of the file, and also do the same for another file (list.txt for example). Then click the big [Download] or [Arrow down] button on the top left of the screen. Then confirm the download dialog. You will see a progress bar on the bottom of the browser window indicating the download.

  •  

    2016.04.20: arvid 03c - improved picture stability

    New version of arvid library (and arvid-server) is released. This should improve picture stability as the previous version suffered from slight pixel 'shivering' (read my previous post).
    If you already have an older version installed I recommend to rename the 'libarvid' directory to 'libarvid.old' and then install the new version as usual (copy from usb stick and untar).
    IMPORTANT ! you really should remove 'wicd' tool from BBB(G) by usig the following command:
    sudo apt-get purge wicd*
    Emulator and other apps are backward compatible, so just update libarvid on your BBB(G). If for some reason the new version doesn't work for you, then the previous version is still available here. If you have BBB and see some black stripes on the screen rename arvid-server_bbb to arvid-server and sync & reboot. It looks some BBB (but not BBG) have issues with PRU interrupts. The quirk is hack-fixed in arvid-server_bbb. Oh, and some minor artefacts on the screen are expected approx. 30 seconds after the boot - that's because other linux services are starting up which affects the video signal generation (CPU load). After that the screen should be stable.

     

    2016.04.14: WIP - picture stability

    I've been working on improving picture stability of the video output. You probably noticed the picture Arvid produces on the TV 'shivers' a bit in horizontal direction. How much - it depends on the TV, but it's usually about 0.2 - 0.5 pixels. Once I noticed that my eyes were fixated on that imperfection and spoiled my game sessions. I was determined to fix it.
    What I found early on was my design that uses one of the PRU to stream pixels from DDR into local PRU memory causes the shaking. If I stopped streaming pixel data and generated the pixels instead by an algorithm (without accessing DDR memory) the 'shiver' effect disappeared and the picture was more stable. That was a big disappointment for me as PRU data streaming kept the video signal generator independent on Linux task scheduler. By that I mean if the ARM processor increased the CPU load it didn't affect the video image (no flickering or other ill effects) at all - PRU just kept streaming data on its own uninterrupted.
    I tried many tricks to overcome the issue (I even wrote a DMA kernel module as well...), but the only solution that worked for me and was portable between BBB and BBG without too much hassle was CPU data streaming using memcpy() function. That is the video frame buffer is streamed part-by-part in real time via ARM CPU to a small PRU local memory. The copy function is 'chased' by the video beam and must stay ahead of it a bit (not too much as PRU memory is small - 12kbytes) at all cost. Similar trick was used in some old 8 bit home computer and console software. Fortunately CPU based data streaming doesn't disrupt PRU that much as the DDR access directly from within the PRU. This solution also brings some issues - at first the CPU load has increased to 40% during video 'idle' (no active video streaming over Ethernet). Also any Linux background activity caused video image flickering, pumping and artefacts. For that reason the new solution requires that the heavy background tasks and services (apache, wifi managers etc.) must be stopped on BBB(G). So far the results are positive, there's no more 'shivering' on any resolution or TV I tested and the screen is stable. Code will be posted soon...