Retrogaming, Single Boards, Natural Language Processing, Computer Programming, Software Engineering
Sunday, 11 February 2024
4:3 MAME Project
Thursday, 25 January 2024
Youyeetoo R1: First Impressions
Unboxing and Language

sudo dpkg-reconfigure locales
sudo update-locale LC_ALL=en_US.UTF-8
Installing Software
sudo apt install xfce4-terminal
sudo apt install gnome-system-monitor
sudo apt install gparted
sudo apt install build-essential
linaro@linaro-alip:~$ sudo timedatectl set-ntp true
Failed to set ntp: NTP not supported
linaro@linaro-alip:/etc/apt$ cat sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-freedeb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
Quick Orange Pi Comparison
Quick GL Performance
Other Quirks
Next Steps
- Baked in GRUB support
- USB boot
- fb console
- Use of official repositories
- Not locking down packages
Monday, 18 December 2023
MAME: Getting Things Working
- Moon Cresta and Galaxian crash on ARM because of a threading glitch (possibly in discrete.cpp), with an "negative samples" exception because the threads to generate the sound go out of order
- Tekken 1 and 2 play no sound, and the coin button doesn't work
- Vector games look like crap (asteroid, star wars, etc.)
Multithreading Issues
When I turned off optimization, and turned on debugging, the threading issue did not manifest. Its hard to debug. I tried to ask Bard what was up with the code, and it suggested std::launder on the pointers, that only masked the issue. Then "chuckie_the_egg" on Reddit suggested something brilliant: Set the number of processors to one or two and the problem likely won't happen. And Chuckie was right. 48 hours, even with mame's debug on, and no crashing. So, in your .mame folder, create a mooncrst.ini and galaxian.ini and addnumprocessors 2
.
Compiling for Aarch64
Chuckie also pointed out that he compiles with-fsigned-char
on as this is a key difference between ARM and Intel (gcc vs mscode). I got to thinking, maybe this, and the odd behaviors I was experiencing on games like Tekken are due to this. Decades ago I wrote a uLaw to PCM converter. I know the old Sun Microsystems machines used signed bytes to represent the signed 8 bit audio. Maybe I should care about
tuning MAME for the ODroid N2L too.
In the makefile:
ARCHOPTS = -fsigned-char -mtune=cortex-a73.cortex-a53 -march=armv8-a
Wonderful, Tekken 1 and 2 both started working with sound. (Soul Edge does not, so I need to figure out why as it does on Intel.)
Vector
This is posted in many places, but vector games at high resolutions lose points and have weak lines. To fix all vector games, created avector.ini
and put this in as it will make
points and lines bigger and brighter:
beam_width_min 1.5 beam_width_max 1.5 beam_dot_size 1.5 beam_intensity_weight 1.0
Sunday, 16 July 2023
Geekom Mini-Air 11
Pregame Show
I thought this would be a good gaming alternative - unlike SBCs this is a mini computer so has all the I/O ports you need, SD card reader, and expandable SSD and DRAM slots inside. This machine has built in wireless, JasperLake GPU, and 4 core Celeron M5105 @ 2GHz. It does run hot though; and takes 19V 3.42A 65W power (like some Chromebooks). I zapped it with my temp gun, and its 110F (43C), and its "rated" for 50C - with NO load.WSL2 Failure
I tried to use WSL2 server, and after a couple hours gave up, as it seems set for Wayland not X11. It would be more useful if you could install Xubuntu; maybe you can but I gave up. (Linux support is something Chromebook does right.)Windows 11 Must Die
I installed MAME and other tools and they stuttered. This can't be right, I thought. So given my WSL failure, and that I had to hunt down some older directX kits to get anything working, I said to heck with it - I must install Ubuntu 22 and benchmark with somewhat more apples to apples.Installing Ubuntu Pains
Yes, you hit del to enter BIOS and set the startup device. Using EFI, I had to set to boot from "USB KEY". I had to blow away /dev/sda2 and other Windowsy partitions. I had to reformat the partition in ext4... and it seems the drivers on Xubuntu 22.04 image are not fully compatible with the Air Mini. (The RealTek 8821c driver continue to blow kernel errors, frame errors, and hung several times during install.) After several attempts, and update/upgrades, I managed to get Xubuntu installed and up-to-date/stable. I really don't know why Geekom doesn't have a working image, or sell the devices without Windows...Quelle Surprise
Even though it only has 4 cores, the rendering capability of the device is solid.- geekom-miniair-11: 1378 ($150)
- opi5: 975 ($110)
- odroid n2l: 509 ($70)
# uname -a Linux geekom-MiniAir-11 5.19.0-46-generic #47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC # glmark2 ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: Intel GL_RENDERER: Mesa Intel(R) UHD Graphics (JSL) GL_VERSION: 4.6 (Compatibility Profile) Mesa 22.2.5-0ubuntu0.1~22.04.3 ======================================================= [build] use-vbo=false: FPS: 1702 FrameTime: 0.588 ms [build] use-vbo=true: FPS: 2127 FrameTime: 0.470 ms [texture] texture-filter=nearest: FPS: 1929 FrameTime: 0.518 ms [texture] texture-filter=linear: FPS: 1898 FrameTime: 0.527 ms [texture] texture-filter=mipmap: FPS: 1891 FrameTime: 0.529 ms [shading] shading=gouraud: FPS: 1753 FrameTime: 0.570 ms [shading] shading=blinn-phong-inf: FPS: 1759 FrameTime: 0.569 ms [shading] shading=phong: FPS: 1707 FrameTime: 0.586 ms [shading] shading=cel: FPS: 1689 FrameTime: 0.592 ms [bump] bump-render=high-poly: FPS: 1272 FrameTime: 0.786 ms [bump] bump-render=normals: FPS: 2039 FrameTime: 0.490 ms [bump] bump-render=height: FPS: 2022 FrameTime: 0.495 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1445 FrameTime: 0.692 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 912 FrameTime: 1.096 ms [pulsar] light=false:quads=5:texture=false: FPS: 1696 FrameTime: 0.590 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 759 FrameTime: 1.318 ms [desktop] effect=shadow:windows=4: FPS: 1125 FrameTime: 0.889 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 364 FrameTime: 2.747 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 647 FrameTime: 1.546 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 354 FrameTime: 2.825 ms [ideas] speed=duration: FPS: 1624 FrameTime: 0.616 ms [jellyfish]: FPS: 1232 FrameTime: 0.812 ms [terrain] : FPS: 193 FrameTime: 5.181 ms [shadow] : FPS: 562 FrameTime: 1.779 ms [refract] : FPS: 326 FrameTime: 3.067 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 1541 FrameTime: 0.649 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 1547 FrameTime: 0.646 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 1545 FrameTime: 0.647 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 1534 FrameTime: 0.652 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 1534 FrameTime: 0.652 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1578 FrameTime: 0.634 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1597 FrameTime: 0.626 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1595 FrameTime: 0.627 ms ======================================================= glmark2 Score: 1378 =======================================================
Saturday, 15 July 2023
Orange Pi 5 vs Odroid N2L
Rockchip RK3588S | 8-core 64-bit processor | Big.Little Architecture: 4xCortex-A76 and 4xCortex-A55, Big core cluster is 2.4GHz, and Little core cluster is 1.8GHz frequency. | Arm Mali-G610 MP4 “Odin” GPU | Amlogic S922X Processor (12nm) | Quad-core Cortex-A73(2.2Ghz) and Dual-core Cortex-A53(2Ghz) | ARMv8-A architecture with Neon and Crypto extensions | Mali-G52 GPU with 6 x Execution Engines (800Mhz) | ||||
Linux orangepi5 5.10.110-rockchip-rk3588 #1.1.6 SMP | Orange Pi 1.1.6 Jammy | 22.04.2 LTS (Jammy Jellyfish) | Linux server 5.15.0-odroid-arm64 #1 SMP PREEMPT Ubuntu 5.15.118-202306231801~jammy (2023-06-23) | Ubuntu 22.04.2 LTS | 22.04.2 LTS (Jammy Jellyfish) | ||||
glmark2 2021.02 | glmark2 Score: | |||||
opi5 | 975 | odroid n2l | 509 | ||
OpenGL Information | |||||
GL_VENDOR: | |||||
Panfrost | Mesa | ||||
GL_RENDERER: | |||||
Mali-G610 (Panfrost) | Mali-G52 (Panfrost) | ||||
GL_VERSION: | |||||
3.0 Mesa 23.0.0-devel | 3.1 Mesa 23.2.0-devel (git-68735f4e86) | ||||
FPS | Frame Time | FPS | Frame Time | Ratio | |
[build] use-vbo=false | 1005 | 0.995 | 532 | 1.880 | 1.89 |
[build] use-vbo=true | 1258 | 0.795 | 658 | 1.520 | 1.91 |
[texture] texture-filter=nearest | 1169 | 0.855 | 678 | 1.475 | 1.72 |
[texture] texture-filter=linear | 1200 | 0.833 | 672 | 1.488 | 1.79 |
[texture] texture-filter=mipmap | 1167 | 0.857 | 688 | 1.453 | 1.70 |
[shading] shading=gouraud | 1172 | 0.853 | 555 | 1.802 | 2.11 |
[shading] shading=blinn-phong-inf | 1156 | 0.865 | 554 | 1.805 | 2.09 |
[shading] shading=phong | 1112 | 0.899 | 498 | 2.008 | 2.23 |
[shading] shading=cel | 1156 | 0.865 | 494 | 2.024 | 2.34 |
[bump] bump-render=high-poly | 917 | 1.091 | 340 | 2.941 | 2.70 |
[bump] bump-render=normals | 1251 | 0.799 | 761 | 1.314 | 1.64 |
[bump] bump-render=height | 1269 | 0.788 | 768 | 1.302 | 1.65 |
[effect2d] kernel=0,1,0;1,-4,1;0,1,0; | 1103 | 0.907 | 534 | 1.873 | 2.07 |
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1; | 854 | 1.171 | 228 | 4.386 | 3.75 |
[pulsar] light=false | 1182 | 0.846 | 722 | 1.385 | 1.64 |
[desktop] blur-radius=5 | 362 | 2.762 | 215 | 4.651 | 1.68 |
[desktop] effect=shadow | 926 | 1.080 | 592 | 1.689 | 1.56 |
[buffer] columns=200 | 455 | 2.198 | 199 | 5.025 | 2.29 |
[buffer] columns=200 | 421 | 2.375 | 197 | 5.076 | 2.14 |
[buffer] columns=200 | 538 | 1.859 | 229 | 4.367 | 2.35 |
[ideas] speed=duration | 1035 | 0.966 | 376 | 2.660 | 2.75 |
[jellyfish] default | 1011 | 0.989 | 446 | 2.242 | 2.27 |
[terrain] default | 71 | 14.085 | 44 | 22.727 | 1.61 |
[shadow] default | 909 | 1.100 | 351 | 2.849 | 2.59 |
[refract] default | 312 | 3.205 | 97 | 10.309 | 3.22 |
[conditionals] fragment-steps=0 | 1168 | 0.856 | 680 | 1.471 | 1.72 |
[conditionals] fragment-steps=5 | 1134 | 0.882 | 670 | 1.493 | 1.69 |
[conditionals] fragment-steps=0 | 1148 | 0.871 | 675 | 1.481 | 1.70 |
[function] fragment-complexity=low | 1137 | 0.880 | 663 | 1.508 | 1.71 |
[function] fragment-complexity=medium | 1148 | 0.871 | 676 | 1.479 | 1.70 |
[loop] fragment-loop=false | 1155 | 0.866 | 659 | 1.517 | 1.75 |
[loop] fragment-steps=5 | 1149 | 0.870 | 685 | 1.460 | 1.68 |
[loop] fragment-steps=5 | 1147 | 0.872 | 664 | 1.506 | 1.73 |
Friday, 14 July 2023
Orange Pi 5...
I was mildly disappointed in a couple things.
- No emmmc memory But it does have an SSD slot. I snagged a fast 1T sdram so I am not concerned.
- 5V/4A. That's right. 4A. Most of the USB C power supplies I have are 3A. I suspect 4A is a requirement when you have all the components attached (i.e. an SSD). So I am using a 3A, but will get a juicier power supply.
I am a fan of Ubuntu, so I snagged the server image via the orangepi.org and https://github.com/Joshua-Riek/ubuntu-rockchip/releases/tag/v1.14.
I always snag the server image so I have less junk installed/to remove.
I then encounted the same pain-point with regard to wireless adapter support. My AE6000 wasn't supported but an older 2.4 RTL8188CUS was kicking around so I got connected after the usual battle with manually setting up netplan.
Then I installed xorg, xfce4, and chromium. X11 started without issue.
But as soon as I installed mesa-utils and ran glmark2... What the hell do you mean software rendering? Where is my Mali-G610 driver?!
This resulted in much anger and finding little interesting on the web. But I did find some pointers...
sudo apt install mali-g610-firmware sudo add-apt-repository ppa:liujianfeng1994/panfork-mesa sudo apt update sudo apt upgradeThank you LiuJian you are a hero!
So now its off to run some benchmarks!
Monday, 5 June 2023
1Up Arcade Mod: Demo of Kiosk FCEUX (NES)
Using Ubuntu 22 with SDL2 Qt5, if I set full screen mode while using any window manager, I do get full screen. However, if I launch with only X11, the max window size is not set, and the position is unknown. This manifests as a non-resizable SDL window with the original pixel dimensions of the console. Changing/flipping the fullscreen mode does nothing, as you will not get a resize event without a window manager.
My fix in Qt ConsoleWindow.cpp is to ask SDL for its current device height and width (doesn't need a window id, because we don't have a valid one yet) and then set the origin and dimension to device extents. (This assumes we have one device.) If I am not fullscreen, I use whatever was previously saved in the config. Paste this code in the ./drivers/Qt/ConsoleWindow.cpp
file over where it gets the window size from the config.
SDL_DisplayMode mode; int err = SDL_GetCurrentDisplayMode(0,&mode); g_config->getOption( "SDL.Fullscreen", &setFullScreen ); if( setFullScreen ) { xWinPos = 0; yWinPos = 0; xWinSize = mode.w; yWinSize = mode.h; } else { g_config->getOption( "SDL.WinPosX" , &xWinPos ); g_config->getOption( "SDL.WinPosY" , &yWinPos ); g_config->getOption( "SDL.WinSizeX", &xWinSize ); g_config->getOption( "SDL.WinSizeY", &yWinSize ); } if ( (xWinSize >= 256) && (yWinSize >= 224) ) ...
this allows me to directly launch fceux with startx