PiTrex Wiki
Useful_Links
editing ...
Enter password:
Select file to upload:
Main Menu
##black## ## * [Project_Roadmap] * [Hardware_Description] * [Software_Description] * [PiTrexCore] * [Software_Ports] * [Vectrex_Interface] * [Mechanical_Description] * [Useful_Links] * [Blog] **Wiki Resources** * [Index] * [Recent_changes] * [Search] * [All_pages] * [Admin] * [Sandbox] * [Wiki_style] * [About_Blog] **Languages** [lng=en|en.gif] [lng=en|English] [http://www.wikepage.org/|wike.gif] [rss=yes|rss_wiki.gif] [rss=blog|rss_blog.gif]
Page Contents
Here we'll note some of the URLs we've found while working on this project that may come in useful later... [http://vide.malban.de/pitrex|PiTrex section] at Malban's Vectrex blog website, with notes from his work developing the Vectrex Interface library for this project. [https://weekly-geekly.github.io/articles/313218/index.html|Vectrex and 6522 description] [https://roadsidethoughts.com/vectrex/vectrex-6522-interface-adapter.htm|More 6522 info] [https://github.com/adafruit/Adafruit-Retrogame|GPIO to keyboard driver] - although we will primarily be using the Vectrex controller for input, we can imagine that some users will want to wire up their own [http://timbartlett.net/asteroids-pi/|custom controllers] to the Pi's GPIOs. This code from Adafruit shows how to map a GPIO signal to a keyboard press. Of course there are also many USB I/O devices as well that won't need to use any of the few remaining free (and hard to get physical access to) GPIO pins. [http://www.projekte.daleske.de/prog/11_EMUZ80_RPI/prog_EMUZ80_RPI_en.htm|Bare metal Z80 emulator] - Probably never necessary, but if we wanted to create an environment where the PiTrex boots up fast and acts like a Vectrex, this bare-metal z80 emulator might give some good hints as to how to implement something like that. An emulator really doesn't need any of the overhead of an O/S - just somewhere to read files from and screen+I/O which in our case is done by direct access to the Vectrex. (Other bare metal resources: [https://github.com/randyrossi/bmc64|C64] [https://github.com/search?q=bare+metal+pi|everything at github] [http://www.valvers.com/open-software/raspberry-pi/step01-bare-metal-programming-in-cpt1/|C] [https://www.raspberrypi.org/forums/viewtopic.php?t=92579|Bare metal USB stack] [https://www.raspberrypi.org/forums/viewforum.php?f=72|asm] [http://www.valvers.com/open-software/raspberry-pi/creating-a-bootable-sd-card/|booting] [https://github.com/ashafq/metalpi/blob/master/src/main.c|metalpi] [https://github.com/kakoee/RPI3-BareMetalC/blob/master/src/main.c|Pi3 bare metal C] [https://github.com/BlockWorksCo/Alloy|Alloy: multicore - bare metal plus linux] [https://github.com/BlockWorksCo/Alloy/blob/master/Documentation/RaspberryPi.md|config for Alloy] [http://www.stevebate.net/chibios-rpi/GettingStarted.html|ChibiOS RT - getting started tutorial] [https://github.com/rsta2/circle|Circle] [https://raspberrypi.stackexchange.com/questions/79697/high-resolution-timer|High resolution timers] [https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=228404&p=1400908&hilit=nanosleep#p1400908|nanosleep] [https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=145976&p=1340264#p1340264|more precise timers] - info that we may need when duplicating any cycle-exact timing from the 6809 [https://access.redhat.com/solutions/2884991|How to configure CPU pinning without use of isolcpus kernel cmdline parameter] - on the subject of reserving a CPU for dedicated access with no operating system overhead. Although we probably will need the kernel command line '[https://codywu2010.wordpress.com/2015/09/27/isolcpus-numactl-and-taskset/|isolcpus]' parameter, which is covered in several of the 'bare metal' links). [https://www.raspberrypi.org/documentation/configuration/device-tree.md|Pi: device trees and parameters] [https://www.airspayce.com/mikem/bcm2835/group__gpio.html#ga2cb94aef80b49335057e338d71e46608|bcm2835 - GPIO register access from C] [https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=16775|more GPIO bitbanging] [https://www.piborg.org/blog/joyborg|Connecting a joystick] [https://raspberrypi.stackexchange.com/questions/7036/getting-axis-values-from-joystick-from-jstest-into-c-program|Readig joystick values into a C program], [https://www.graphics-muse.org/wiki/pmwiki.php/RaspberryPi/Research|General collection of Raspberry Pi links] [https://roadsidethoughts.com/vectrex/vectrex-programmable-sound-generator.htm|Vectrex sound generator] **Datasheets** CPU: [http://gbgmv.se/dl/doc/md09/MC6809_DataSheet.pdf|MC68A09] VIA: [https://www.princeton.edu/~mae412/HANDOUTS/Datasheets/6522.pdf|R6522] [http://6502.org/documents/datasheets/mos/mos_6522_preliminary_nov_1977.pdf|MOS6522] [http://www.6502.org/documents/datasheets/synertek/synertek_sy6522_via_1978_jan.pdf|sy6522] PSG: [http://www.ym2149.com/ay8910.pdf|AY3-8912] [http://www.vgmpf.com/Wiki/images/6/6b/AY-3-891x_-_Microchip_Manual.pdf|Microchip AY3-8912 Datasheet] DAC: [https://www.onsemi.com/pub/Collateral/MC1408-8-D.PDF|MC1408-8] Analogue Switch: [http://www.ti.com/lit/ds/symlink/cd4052b.pdf|4052B] **GPIO Hardware characteristics:** [https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md|Official Raspberry Pi Document], [http://www.mosaic-industries.com/embedded-systems/microcontroller-projects/raspberry-pi/gpio-pin-electrical-specifications|More detail on BCM2835 electrical specifications] [https://elinux.org/|Lots of Raspberry Pi hardware info] - [https://elinux.org/RPi_GPIO_Code_Samples|GPIO Code Samples] [https://github.com/angeris/CS107E-GB-Emulator|Bare-Metal Game Boy emulator] using interrupts and with useful interrupt-related links on the page. [http://www.vgmpf.com/Wiki/index.php?title=AY-3-8910|PSG info and manuals to download] [http://bulba.untergrund.net/main_e.htm|More documents also software and chiptunes] **MAME:** [https://trmm.net/MAME|Vector output from MAME used with custom DAC board to control Vectrex and oscilloscope] [http://web.archive.org/web/20050404024806/http://games.lasers.org/|LaserMAME] - Vector arcade games projected with lasers. [https://marcan.st/projects/openlase/|OpenLASE library for displaying computer graphics with laser projectors] - Inc. SVG, Bitmap display and video-player. Uses a PC sound card as the DAC. [https://github.com/jv4779/openlase-mame|openlase-mame]. [https://github.com/palazzol/vmame/|VectorMAME] includes vector modifications for the [http://web.archive.org/web/20181111063850/http://www.zektor.com/zvg/vectormame.htm|Zektor ZVG card], which were at one point integrated into the official MAME source code. Previously [https://web.archive.org/web/20150929203605/http://www.radiantbacon.com/free-bacon/|here]. [ftp://ftp.photonlexicon.com/ILDASWAP.mirror/apps/LazyMame.zip|LazyMAME] is another adaptation of MAME for display with laser projectors. Source code for MAME changes is available, but uses a pre-compiled WIndows DLL for the laser display routines. This predates OpenLASE-MAME. **Vector arcade games:** [http://www.andysarcade.de/vec_all.html|Andys Arcade] [https://en.wikipedia.org/wiki/Category:Vector_arcade_games|Incomplete vector games category at Wikipedia] [http://gamearchive.askey.org/Video_Games/Manufacturers/|GameArchive] **Raspberry Pi High Speed I/O Under Linux:** DMA (mainly useful for repeating signals?): [https://github.com/Wallacoloo/Raspberry-Pi-DMA-Example|Raspberry Pi DMA Example], used for [https://github.com/Wallacoloo/printipi|printpi] stepper controller software. [https://github.com/pantadeusz/raspigcd/blob/743d26df3961349a16cee3913f472dba26f59822/src/m_hwmoves.cpp#L169|Raspberry Pi CNC stepper controller software using Real-Time scheduler setting] - this approach didn't seem to work well enough for the PiTrex software, even with a Real-Time Linux kernel. [https://www.mess.org/2018/02/10/Dumping-Z8-Encore-Z8F0811-Program-Memory/|Some hints about driving GPIOs from a kernel module], [https://www.linuxquestions.org/questions/linux-kernel-70/module-issue-909132/|A very basic example]. Real-Time Linux: [https://wiki.linuxfoundation.org/realtime/start|PREEMPT_RT] [https://guysoft.wordpress.com/2017/10/09/realtimepi/|Debian based distro with PREEMPT_RT patch] Xenomai RTAI [https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=52393|Example] of disabling interrupts in Linux for Real-Time GPIO control. [https://wiki.linuxaudio.org/wiki/system_configuration|Notes] related to high-quality audio recording on Linux with or without a patched kernel. [http://subversion.ffado.org/wiki/IrqPriorities|IRQ Priorities]. PREEMPT_RT [https://wiki.linuxfoundation.org/realtime/documentation/technical_details/threadirq|Threaded Interrupt Handler] (also see above two links). **Linux Kernel Driver** * [https://www.apriorit.com/dev-blog/195-simple-driver-for-linux-os|Tutorial for Linux Driver Development] (a starting point, but not enough info to write anything serious) * [https://lwn.net/Kernel/LDD3/|Linux Device Drivers Third Edition] (detailed, but not up to date) **Similar Raspberry Pi Interface Projects:** These are generally designed to work in combination with the original CPU using some form of bus, of which there isn't an equivalent on the Vectrex. However there may be some general hints to take with regards to presentation, documentation, and interfacing with the Raspberry Pi: * [https://github.com/hoglet67/PiTubeDirect/wiki|PiTubeDirect] - Interface for the BBC Micro using its "Tube" interface for adding a co-processor. * [https://github.com/dschmenk/apple2pi|Apple2Pi] - Connects a Raspberry Pi to an Apple II using a serial bus and runs an Apple II emulator on the Pi which can access the physical Apple II hardware and peripherals (conceptually a little like the VecFever, though just a little). [http://schmenk.is-a-geek.com/wordpress/?p=167|FAQ], [https://www.ultimateapple2.com/catalogzen155a/index.php?main_page=index&cPath=1_31|Store] * A [http://www.s100computers.com/My%20System%20Pages/Raspberry%20Pi%20CPU%20Board/Raspberry%20Pi%20CPU%20Board.htm|Raspberry Pi Zero S100 Bus CPU Board] design was published in August 2022. It uses multiplexing in order to access the full S100 address bus with the limited number of GPIO pins on the Pi. Otherwise the design is conceptually similar to the PiTrex. [https://www.codeproject.com/articles/4923/vcmame-multiple-arcade-machine-emulator-for-visual|Basic Summary of MAME architecture from 2003] **Raspberry Pi Linux Loaders** (for booting Linux from the PiTrex menu): * [https://elinux.org/RPi_U-Boot|RPi U-Boot] - [http://www.denx.de/wiki/U-Boot|Official Site] * [https://berryterminal.com/doku.php/berryboot|BerryBoot] * [https://github.com/raspberrypi/noobs|NOOBS source code] **Porting Linux Software to Bare-Metal** * [http://sourceware.org/newlib/|Newlib] - Popular C Standard Library implementation for embedded systems. * [https://www.embecosm.com/appnotes/ean9/html/index.html|Porting Newlib] - A guide for porting Newlib to platforms that are not supported in the standard distribution (the Raspberry Pi isn't). * Other Newlib porting docs: [https://balau82.wordpress.com/2010/12/16/using-newlib-in-arm-bare-metal-programs/|here], [https://wiki.osdev.org/Porting_Newlib|here], and [https://eehusky.wordpress.com/2012/12/17/using-gcc-with-the-ti-stellaris-launchpad-newlib/|here]. * [https://github.com/smuehlst/circle-stdlib|Circle-Stdlib] - Newlib for the Raspberry Pi, integrated with the [https://github.com/rsta2/circle|Circle] C++ bare-metal environment. * [https://rootdirectory.ddns.net/dokuwiki/doku.php?id=pdclib:start|PDclib] - Another C Standard Lib. for embedded systems. * [https://en.wikipedia.org/wiki/C_Standard_Library#Implementations|More listed at Wikipedia]