fruit-bat / pico-zxspectrum Goto Github PK
View Code? Open in Web Editor NEWZX Spectrum for Raspberry Pico Pi RP2040
ZX Spectrum for Raspberry Pico Pi RP2040
Any chance to support https://shop.pimoroni.com/products/pimoroni-pico-vga-demo-base?variant=32369520672851 since there's already VGA support for some other implementations? They have schematics and a lot of demos for it. Cheers and keep up the good work !
It would be nice be able to save a BASIC program or CODE.
Without it, the only way for me to save my mega program in BASIC is in the Snaps, of which I only have one available (I still haven't found a keyboard to work with my PICOZX). Which means I need to plug my micro SD in a computer to do the renaming to have more Snaps.
Since I figure that the ultimate goal is to recreate all functionality of the original ZX Spectrum, I am thinking that by using some modified hardware (or some new one even) from this microphone library, this goal can be achieved.
By adding a 100uF for isolation purposes as the guidelines for the analog module say maybe we can reach the goal.
I may be able (and willing) to test some hardware... I'm no audiophile but I got the tools to make what I usually need so that the analog "Line In" function can be available for the old cassette players out there... maybe even a save to ".tap" directly to the SD Card at the end... for comparison purposes since I still remember how error prone was this process in the old days.
I can try some different ways with the hardware part (will research more this part so we don't fry the pico) but since all this work is your baby, only you know if the analog part of the library can be adjusted to work with all the different layouts and if one input pin is available.
"Retroflag classic usb gamepad" Not detected in F1 screen.
Hello, I made a project on the breadboard.
VGA connected according to the RGBY 1111 scheme.
Keyboard via USB.
It works!
Emulator does not see memory card
I used data from table Wiring->General->MicroSD 0
But doesn't work.
The SD card is formatted with FAT32.
I created folders
zxspectrum/snapshots
zxspectrum/quicksaves
zxspectrum/tapes
Firmware: ZxSpectrumPicomputerVga1111Zx.uf2
Where are the pins to connect the SD card?
In which file can I see the connection of peripherals?
Hi,
I build myself a PicoZX with VGA boards from Bobricius:
https://www.tindie.com/products/bobricius/picozx-zx-spectrum-128k-vga-emulator-on-rpi-pico/
with Fruit-bat onboard. However I used Pico W instead a regullar Pico and have a "semi non-working" 9pin- Kempston joystick on many games. Strange behaviour as around 20% .z80 are working flawlessly, 20% .z80s are freezing and the rest around 60% of .z80 are compleatly non responsive at all ;-(
PS:Joysticks are Competion Pro & 2xQuickshots(xtested on ZX Spectrum +2A and Clones like Didaktik Gama/M tested & fully working)
Thanks for any help or support
Do something a with the led?
Hi If you are able to add support my boards
I can send you this hardware
https://hackaday.io/project/184965-picomputer-zx-pocket-zx-spectrum (ST7789 IPS LCD)
https://hackaday.io/project/183398-retrovga-raspbery-pico-multi-retro-computer (VGA output)
Currently this board use MCUME https://github.com/Jean-MarcHarvengt/MCUME
But there is only Spectrum48K
Some examples of use it:
https://github.com/tvlad1234/pico-ps2Driv
https://github.com/lurk101/pico-ps2kbd/blob/master/example.c
Need to decide the scope and feasibility of this issue.
I have PICOZX and I'd like to be able to update my firmware once in a while.
Could you please add a section to the README.md file on how to do it?
Or if it's already explained somewhere, please just refer me to that manual.
Map Picomputer backspace key to Spectrum shift-0
Hi, noticed the SD Card loading gets stuck if I have a lot of files on the SD Card (280). Is it possible to add support for subfolders so we can have big collections in on a single SD Card (tried with subfolders and it doesn't display anything)? around 50 files works fine (talking about the tapes folder)
PS. Thanks for this amazing piece of work !
These do not issue a bid report descriptor and curry don't work.
Hi, I got the Pimoroni DV board thinking that I could drop the precompiled UF2 on and the emulator would be ready to go. But nothing happens, no video output, no LEDs flash, nothing.
Do I need to do anything else? Is the emulator in the UF2 or do I need to put it onto an SD card?
I'm sure I'm not the only untechnical (would be) user. Some instructions would be a great help.
I'm compiling the source on raspbian which is all setup and building fine but not sure which git source to use for the pico_sdk_extras with TinyUSB sources for HID keyboard. I'm currently following the instructions in the readme which
is to delete the original TinyUSB and use the following for TinyUSB:
cd $PICO_SDK_PATH/lib/
mv tinyusb tinyusb.orig
git clone [email protected]:fruit-bat/tinyusb.git
cd tinyusb
git checkout hid_micro_parser
Is this correct as conflicting info in the readme suggested by Ryzee119 are getting harder to merge into the latest code ? What is the correct way to make sure the TinyUSB sources are cloned from git ?
Also, attempting to remap the keyboard GPIO I found this defined macro function in pzx_keyscan.map
#define CP_JOIN_PZX(a) ((a & 15) | ((a >> 3) & (7 << 4)))
What exactly does this function do and what do and how does it relate to the other defines set for the GPIO Pins:
#define CN_PZX 7
#define RN_PZX 7
#define CP_PZX 19, 20, 21, 22, 26, 27, 28
#define RP_PZX 8, 9, 14, 15, 16, 17, 18
#define CP_SHIFT_PZX 19
Thanks and this a really interesting project to work on! Hoping to contribute somthing myself when I'm familair with the source code.
Hi ,
Is it possible to use PicoW instead of a standard one? The Wi-fi options could be quite handy ;-D
Dont you think?
Thanks & regards for any feedback
I accidentally bought HC28010-D TFT displays. Unlike the HC28010-ISP displays, these display the image inversely. Is it possible to adjust this in the software without much effort? Maybe I am not the only one who wants to use such "inverse displays".
Matthias
I've had some time over the weekend to play around with the emulator and in some games, Ghosts n Goblins for example, display sprite flickering, although the game plays fine. I'm using the VGA out build BTW.
Is this a known issue ?
I've noticed in the main.cpp code and the core1_main function that there is a comment in the code at this line:
if (y == 239) { // TODO use a const / get from vmode
Not quite sure what this means for what the 239 means either. I've also played around with changing the loop
variable i in this code here:
void __not_in_flash_func(main_loop)()
if (!showMenu) { for (int i = 1; i < 100; ++i) { if (lastInterruptFrame != _frames) { lastInterruptFrame = _frames; zxSpectrum.interrupt(); } zxSpectrum.step(); } } else if (frames != _frames) { frames = _frames; picoDisplay.refresh(); } }
Didn't make much of a differnece though but setting too high or too low would crash the emulator.
Raised on behalf of @digitalmexer.
I really don't know how but it is an interesting idea.
I've been working on getting a composite video out signal by using an AD724 and the circuit taken from the datasheet, also used here for the Amstrad CPC.
Problem is that although I can get a colour image on my monitor, there is some kind of sync issue as the image is not stable and appears to roll around. I was wanting to find out if anyone has managed to get a stable composite video out signal ? I think the issue is to do with the CSYNC signal or timing from the Pi to the SYNC signal on the AD724. Or maybe there is a simpler circuit than using an AD724 decoding IC.
hello i build your pi pico zx spectrum. every thing works perfectly except i cant get any sound,. i am using retroVGA configuration. And i tried to get sound from all the pin combinations you have mentioned. any suggestions ??
Hi, I'm trying to compile the current sources with tinyusb and libdvi but I got error missing hid_rip.h referenced by hid_host_joy.h of pico-emu-utils - where can I get this file?
Some minor XY flag issues but also a freeze on SRO (XY), R
I think this is a DD, CB instruction.
USB host mode seems to work very reliably unless the keyboard is removed and reconnected, which causes the Pico to 'panic'.
This allows usb reconnect:
https://github.com/hathach/tinyusb/pull/1193/files
The pull request was integrated and then refined.
@fruit-bat it may be worth retesting with the latest tinyusb build
I'm using a Pimoroni Pico VGA and everything works fine, except the USB keyboard. Only the basic keys work correctly on it, but it is impossible to get special characters through which it is impossible to program in Basic. :( Is there any way to get the correct key mapping of a standard USB keyboard? (Great project btw :) ).
Hello, I am assembling the Breadboard Version of pico-zxspectrum and I saw it is compatible with USB and PS2 keyboards.
I do not have any PS2 keyboards with me, but I looked for the D+ and D- pins to connect to my USB keyboard at pinout figure but I did not find any dedicated pin.
Could someone help me finding that? Thanks in advance!
** Raised on behalf of https://github.com/javavi **
There are a number of issues that I am currently working on and need your
advice.
I think I just need the PIO program to emit the last value if no new values are available.
Currently, each under-run results in a 'tap' as the DAC mute switches on and off.
I've hooked up the ZxSpectrum4PinAudioVga1111Ps2 on a perforated breadboard, it is working very well, except the fact that I can not read any .tap filefrom the SD card. I can do load .z80 files and save/load the snapshots. The Keyboard F5/F6/F7 keys are good, the .tap files are good (tested on an emulator).
Steps I am doing:
1 - Press F1,
2 - Choose .tap file,
3 - Motor on,
4 - Esc to go back to ZX screen,
5 - Press F5.
I've tried other ways with no success.
I created the folders as per instructions:
zxspectrum/snapshots Put your .z80 snapshot files in here.
zxspectrum/quicksaves Folder for quick saves.
zxspectrum/tapes Folder for .tap tape files.
Using F5/F6/F7 as per instructions:
F5 play current tape
F6 play previous tape
F7 play next tape
Any clue?
Thanks a lot.
I use the ingenious emulator PICOZX from Bobricius. Everything works very well but there is a problem with the Kempston interface:
When loading programs with the load function for TZX files, the joystick works fine, with a snapshot not. The USB joystick always works.
Unfortunately I'm not a programmer so I can't find any hints about the bug in the sources.
Need to investigate
Raise on behalf of @digitalmexer
Interesting idea. The complication is in shutting down the VGA driver.
The VGA library needs some careful (and possibly extensive) work to close it down in a tidy fashion.
Good afternoon,
I'm trying config ps2 and i need swap pines clk and data from keyboard, and I cant find ps2kbd.h.
Can you tell me where i can get it?
Best Regards.
Setup environment and can build, compile and make other applications - so the environment is okay.
Followed the readme instructions as defined;
cmake -DPICO_COPY_TO_RAM=0 -DPICO_BOARD=vgaboard ..
Using PICO_SDK_PATH from environment ('/opt/pico-sdk')
PICO_SDK_PATH is /opt/pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
Using PICO_EXTRAS_PATH from environment ('/home/tony/dev/pico/c-code/pico-extras')
-- The C compiler identification is GNU 10.3.1
-- The CXX compiler identification is GNU 10.3.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
Build type is Release
PICO target board is vgaboard.
Using board configuration from /opt/pico-sdk/src/boards/include/boards/vgaboard.h
-- Found Python3: /usr/bin/python3.10 (found version "3.10.6") found components: Interpreter
TinyUSB available at /opt/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
cyw43-driver available at /opt/pico-sdk/lib/cyw43-driver
lwIP available at /opt/pico-sdk/lib/lwip
lwIP available at /home/tony/dev/pico/c-code/pico-extras/lib/lwip/src/core/tcp.c; TCP/IP support is available.
Zeta v0.1
CMake Warning (dev) at /usr/share/cmake-3.22/Modules/GNUInstallDirs.cmake:239 (message):
Unable to determine default CMAKE_INSTALL_LIBDIR directory because no
target architecture is known. Please enable at least one language before
including GNUInstallDirs.
Call Stack (most recent call first):
/home/tony/dev/pico/c-code/zxspectrum/Zeta/CMakeLists.txt:17 (include)
This warning is for project developers. Use -Wno-dev to suppress it.
Z80 v0.2
-- Found Zeta: /home/tony/dev/pico/c-code/zxspectrum/Zeta (found version "v0.1")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/tony/dev/pico/c-code/zxspectrum/pico-zxspectrum/build
however when I get to this point the build fails:
make -j4 ZxSpectrumPicoVga
[ 37%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/opt/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
[ 37%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/opt/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
/home/tony/dev/pico/c-code/zxspectrum/pico-zxspectrum/src/ZxSpectrumMenu.cpp: In member function 'void ZxSpectrumMenu::nextSnap(int)':
/home/tony/dev/pico/c-code/zxspectrum/pico-zxspectrum/src/ZxSpectrumMenu.cpp:452:39: error: type-specifier invalid in lambda
452 | _chooseSnap.next([](FILINFO* finfo) bool {
| ^~~~
[ 37%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/opt/pico-sdk/src/rp2_common/hardware_claim/claim.c.obj
[ 37%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/opt/pico-sdk/src/rp2_common/pico_platform/platform.c.obj
[ 37%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/opt/pico-sdk/src/rp2_common/hardware_sync/sync.c.obj
[ 37%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/opt/pico-sdk/src/rp2_common/hardware_irq/irq.c.obj
[ 37%] Building ASM object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/opt/pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
[ 37%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/opt/pico-sdk/src/common/pico_sync/sem.c.obj
make[3]: *** [bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/build.make:622: bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/__/ZxSpectrumMenu.cpp.obj] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/Makefile2:3128: bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:3135: bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/rule] Error 2
make: *** [Makefile:663: ZxSpectrumPicoVga] Error 2
Looking at the code in ZxSpectrumMenu.cpp it is just stepping through the snapshot images, so if I comment it out it gets further but then fails here on the same type of declaration:
[ 25%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/home/tony/dev/pico/c-code/pico-extras/src/common/pico_scanvideo/vga_modes.c.obj
/home/tony/dev/pico/c-code/zxspectrum/pico-dvi-menu/src/PicoExplorer.cpp: In constructor 'PicoExplorer::PicoExplorer(SdCardFatFsSpi*, FatFsFilePath*, int32_t, int32_t, int32_t, int32_t, int32_t)':
/home/tony/dev/pico/c-code/zxspectrum/pico-dvi-menu/src/PicoExplorer.cpp:21:40: error: type-specifier invalid in lambda
21 | _cache.filter([] (const char *fname) bool {
| ^~~~
[ 25%] Building C object bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/home/tony/dev/pico/c-code/pico-extras/src/common/pico_util_buffer/buffer.c.obj
make[3]: *** [bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/build.make:1899: bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/home/tony/dev/pico/c-code/zxspectrum/pico-dvi-menu/src/PicoExplorer.cpp.obj] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/Makefile2:3128: bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:3135: bin/picovga/CMakeFiles/ZxSpectrumPicoVga.dir/rule] Error 2
make: *** [Makefile:663: ZxSpectrumPicoVga] Error 2
Wild guess from me - but is this a C compiler version problem? have you used a new way of defining a function with a bool return or something relating to the []'s? or are you needing a different C ompiler version? any ideas how to over come this would be great.
The pre-built .uf2 file works great on my picodemovga, but I need to modify it a bit that's why I'm looking at build/compile myself.
When i try compile i got this error:
PicoDVI/software/apps/zxspectrum/src/ZxSpectrumAy.h:3:20: fatal error: memory.h: No such file or directory
Can you upload memory.h file?
I think you should change the circuits for the audio pwm pin and discard the digital pin. The bad sound on the pwm pin is surely from wrongly used RC components.
Look at the audio circuit for Raspberry Pi.
By doing some math with a RC High Pass Filter calculator they allow frequencies over ~106 Hz and with a RC Low Pass Filter calculator they allow frequencies under ~17871 Hz.
Humans can detect sounds in a frequency range from about 20 Hz to 20000 Hz.
The BAV99 are used for ESD protection (electrostatic discharges).
I've been following your project and been waiting for components to build it.
Hello Again,
I'm using your pre-built binary, and its work on my new pcb. I got sound, video, keyboard, all less sd-card access because i havent sd-card detect line.
When i'm trying compile (in the past I got it) now i'm getting next error:
/pipico/PicoDVI/software/apps/pico-emu-utils/src/hid_host_info.c:26:38: error: 'CFG_TUH_ENDPOINT_MAX' undeclared here (not in a function)
whats i'm doing wrong?
Best Regards,
Shaeon.
Hi Guys!
LOVE THIS PROJECT!
I´m wondering if it´s a way to use the original keyboard of a ZX Spectrum directly wo the Raspberry Pico for more enjoy of the project!?
I´ve one to make tests if needed.
Keep up going the good work!
Regards
I don't know how to do this but it is interesting!
Reduce code duplication across models:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.