Tunic

I’ve been playing some Tunic the last few days, because the Steam Summer Sale managed to poke me at just the right moment to get an impulse buy. I was interested enough that I paid $20 for a game that came out like a year ago instead of my usual “Wait until I can pick it up for a few dollars and run it on a contemporary potato” gaming strategy.

It’s very to my taste, and I’m enjoying it, but it is, in classic self-indulgent indie game fashion, “Video game tropes: the game.” Not that there’s anything wrong with making things for your own in-group, but it winks so hard you start to wonder about a palsy.

The visual style and gameplay nod to everything. Fez. The whole Zelda franchise. Soulsbornes. Some Monument Valley style geometry illusion/architectural environmental storytelling. Bunches of stereotypical Supergiant details. It’s never met a game trope it didn’t like. They executed and integrated pretty well though, and I am in the market segment that connects to the references. [Ed: Oh look. Some Half Life 2 Citadel and more explicit Chrono Trigger refs late(?) game!]

It’s not …quite… as self-indulgent as Lenna’s Inception (same kind of 2D Zeldalike vein, did it a few summers ago, had slightly more fun than irritation about how hard it was sniffing its own farts), and it’s far more modern and sophisticated than the various Solarus engine games. The visual style is both cuter and more spectacular than either.

It also has the classic indie game feature of being relatively graphically simple, built on a major engine, and still being kind of a resource hog … though I’m playing on Linux via Proton/DXVK, on a workstation-model Polaris12 GPU, so some of the “Barely holding 24fps at 720p on a system that can do way more visually impressive games” is probably my fault [Ed: performance issue suddenly fixed after update and reboot, must have been a driver/system state thing]. I will say, having not played many commercial game for the last few years, the progress with transparent, performant functionality out of the Proton ecosystem is really impressive.

Posted in Computers, Entertainment, General | Leave a comment

Anbernic RG351(p) and Powkiddy RGB10 Max2 Button Membranes are Drop-In Compatible

I’ve had an Anbernic RG351P for roughly 2 years now, and it’s an absolutely delightful object.

For those unfamiliar: the RG351 is an example of a class of little gaming emulation handhelds that started back in the mid-to-late 2000s with things like the Dingoo A330. They are, essentially, a tiny ARM (+ usually Linux) machine the size and shape of a handheld gaming device, set up with a built-in controller specifically to run games in emulation. The stock firmware on the RG351 is an ancient EmulationStation/RetroArch/Linux stack, but there are better alternatives – IMO, throwing in a decent SD card loaded with AmberElec is the first thing to do when you get one. It will play essentially everything from the dawn of gaming through the PlayStation and some (but not all) of the Nintendo 64 library, and has limited/marginal support for PSP and DS. It is …straightforward but not the sort of thing I’ll link… to obtain the full ROMsets for these platforms, they are frankly not that large. I paid about $90 for mine, I think they’ve gone up a bit, but there are a whole range of similar options at different price points, build qualities, and platform support.

The build quality, however, isn’t perfect. It’s small-brand China-export hardware. You know you have to be a little careful with it just from handling (I keep mine in a fitted case when throwing it in a bag). I’ve been through a screen (I got red lines in my original after about a year), re-gluing the back rubber pads (original glue melted), and now after two years I wore through the membrane behind the “A” button, and that’s actually what this post is about.

I opened it up, found the worn though button, looked around online, couldn’t any in stock, contacted Anbernic through their AliExpress store front (none available), asked the subreddit (no leads), and couldn’t come up with any exact replacement membranes.

HOWEVER on inspection, the membranes from the similar Powkiddy RBG10 appeared extremely similar, and those are readily available (as a $12ish pack of all the membranes and button caps to refit an RGB10, which includes two of the 4x membranes). I ordered this set via Aliexpress, and ~16 days later when it showed up, can confirm the membranes are slightly different, but drop-in compatible.

As you can see from the photos, the Powkiddy membranes have a bit more flat area, and the bottoms of the mounting holes are filled in rather than fully punched through, but the dimensions are exactly right. The height and force of the domes is even almost identical to the originals, and at effectively $6/membrane it’s a very reasonable repair.

Posted in DIY, Electronics, Entertainment, General, Objects | Leave a comment

Dumb Linux trick:

Suspicious of damaged system files on an RHEL-like (rocky, alma, centos, probably fedora, whatever) system?

Once you get it unfucked enough to use the package manager (dealing with filesystem problems, hand-re-installing the rpms required to make dnf work, etc.) , systematically reinstall all installed packages!

As root do a:
rpm -qa --queryformat "%{NAME}\n" > installed.txt
dnf reinstall $(<installed.txt)

and settle in for a long operation.

I’ve done it on Arch boxes where it is written as something like pacman -Qqn | pacman -S -, but hadn’t tried it with dnf until I had a Rocky 8 box wedge during a dnf upgrade yesterday and wipe out large pieces of the system, then cause some damage to the (annoying default XFS on LVM) root when a reboot failed. It seems to have worked.

Posted on by pappp | Leave a comment

My old ass is having the hardest time with the Linux 6.2 series, we were looking at 2.6.x from 2004-2011 (and then for years after on ancient Debian Stable and RHEL-like systems that remained in production forever; I think I only excised the last CentOS6 box among the systems I deal with this year).

Every time I see a question online or a uname or whatnot I have a second of “WHAT YEAR IS I… oh.”

Posted on by pappp | Leave a comment

Most Overpriced Marchintosh


Since I recently got my HP Apollo 9000 Series 735 up and running, and it’s March, I decided to have a little Marchintosh fun and load MAE (the Macintosh Application Environment, a real officially-licensed Apple product) on to it this evening. As you can see from the photo (because I don’t have a device that can capture the video this thing outputs, and haven’t figured out screenshots under HP-UX 10.20), it works.

Continue reading
Posted in Computers, DIY, General, Objects | 1 Comment

HP Apollo 9000/735: Function Achieved

Bad light because that VESA arm mounted monitor is the only one I own that will sync to this thing

Over a year ago I started working on an inert HP Apollo 9000/735 a friend gave me from their collection to avoid moving it cross-country. I’ve recently got it working, and am posting notes about the fun.

At the end of my first post about it, I had recapped the power supply, but had not found a monitor that would talk to the enormousCRX-24z video board with its 1280×1024@72Hz Sync-on-Green via 3x BNC output, or verified the condition of the discs.
As you can see from the splash image, all of those things have been remedied.

Continue reading
Posted in Computers, DIY, General, Objects | Leave a comment

Porting Labs from ARM Compiler V5 to V6

I spent the last two afternoons procrastinating from other work doing a deferred maintenance project, porting the labs for UK’s CPE287 Introduction to Embedded Systems from the “V5” armcc to the “V6” armclang compiler, since the most recent releases of Keil (the IDE we use in the class) have dropped support for the older compiler, and all our materials were written against V5. It has been a somewhat interesting porting exercise for a “same vendor, same platform” situation.

We have some slightly unusual circumstances: First, because the class starts in writing pure assembly, proceeds through manual bit manipulation in C, and eventually starts to write high-level software driver model code, we hit all the styles and interfaces. Secondly, we have an inexpensive textbook and supporting materials we rather like, but all the examples use the old style assembly syntax, which differs significantly from the more modern GCC/LLVM style, and for pedagogical consistency reasons we’d like to write our code in that style.

ARM/Keil have produced a document AN298 – Migrate ARM Compiler 5 to ARM Compiler 6 which covers most of the important details, but it was still a bit of a skilled process.

Some notes:

  • For the time being, Keil with the V6 toolchain includes the older armasm binary, so separate pure-assembly .s sources written in the old syntax can still be ingested, you only have to port inline assembly.
  • Keil’s debugger doesn’t appear to be able to keep source lines of inline assembly and the disassembly view synchronized for GCC-style inlined assembly the way it could with armcc. Unfortunate, and a bit klutzy for setting breakpoints, but not a deal-breaker.
  • armclang defines __ARMCC_VERSION as 6something so various pieces of existing code have pre-processor directives that will decide to use the armcc style inline assembly instead of the gcc style ones. Particularly irritating, TI’s first party TivaWare library has this problem in both cpu.c and sysctl.c, so I had to make a hacked version with the #ifdef s swirled around appropriately. The code in TivaWare intended for IAR ewarm is suitable for armclang … as long as you remove some spare ewarm-specific pragmas embedded here and there for suppressing return value warnings; I ended up putting -Wno-return-type in the extended compiler options for projects depending on those files.
  • armclang is much more aggressive about optimization by default than armcc was. In particular, you could get away without marking variables used in busy wait loops or ISRs volatile in armcc, and armclang will happily optimize them out if you forget.
  • armclang is more vocal about implicit type conversion than armcc, especially where it might affect signedness. This is triggered a lot by the REGISTER_NAME &= ~0xMASK bit-specific addressing idiom. I sprinkled in lots of UL suffixes on literals to avoid the issue.

Long term we might try to get off of Keil, though my experiences with CodeComposerStudio have been sufficiently frustrating that I’m in no hurry to move to it for the TI TivaC boards we’ve been using, and while I like ST’s Cube environment, it would both be a major change of materials and a potential supply-chain nightmare (when is the last time you saw a legitimate major electronics vendor with STM32 parts in a stock status other than “Expected Date: Eventually”?)

Posted in Computers, General, School | Leave a comment

More Adventures in Tiny Stepper Motors and Drivers

A tiny stepper motor being driven by a TMC2208 Stepstick

Last summer I posted about some tiny stepper motors from the internet, thinking about them as an alternative to mechatronic standbys like those terrible SG90 type servos or larger and differently terrible 28BYJ-48 geared steppers driven through a ULN2003.

At the time, I tried one with an A4988 stepstick from the top of my parts bin, and it didn’t work, so I figured there was some limitation and stuck to directly driving with H-bridges.
…it turns out the “limitation” was that the cheap current-setting potentiometer on that particular stepstick was broken so it was driving no output current.

Discoveries:

  • Those little bipolar stepper motors work fine with bipolar stepper drivers.
  • Generational gains in bipolar stepper driver ICs are substantial (eg. A4988 -> TMC2208).
  • The venerable 28BYJ-48 unipolar stepper motor is easily modified to run from bipolar drivers.
Continue reading
Posted in DIY, Electronics, General, Objects | Leave a comment

Installing SKS B53 Fenders on a Giant Escape Disc

Giant Escape 3 Disc with SKS B53 Fenders
Giant Escape 3 Disc with SKS B53 fenders, modified to fit

I’ve been biking a fair amount lately after a 20-odd year hiatus; I decided last year that I wanted to start biking, bought a Giant Escape 3 Disc near the end of summer, but didn’t get confident enough riding to use it around campus last year among the students texting their way to their first (next?) vehicular manslaughter charge before they flocked back.

This summer, I’ve been dong my commute into campus on it, plus a significant amount of fun/exercise riding, and the top fixable annoyance has become getting sprayed at the slightest hint of wet. I did some hackin’ that I haven’t seen on the interwebs to fit the fenders I picked to the frame, which is the point of this post.

Continue reading
Posted in DIY, General, Objects | Leave a comment

Latitude 7390

Dell Latitude 7390, my several-generation-old next generation of carryin’ around computer.

The Latitude E7250 I’ve been carrying around since 2017 is one of my favorite machines I’ve ever had; it’s small, robust, has perfect hardware support under Linux… and is starting to get a little too feeble for some tasks I’d like to use it for, experienced a few spurious shutdowns, and has a screen crack causing delamination.

I continue to be a fan of having a small, relatively inexpensive machine for carrying around, and a believer in “The only Dell laptops with acceptable build quality start with a 7”, so in the tradition of the $400 for a refurb and RAM upgrade I spent on the E7250, I ordered one of its more-or-less direct successors, a refurbished Latitude 7390 on a half-off sale a few weeks ago for about $470.

After a few weeks, it looks to be an excellent successor. Nitpicky details and comparisons below the fold.

Continue reading
Posted in Computers, General, Objects | Leave a comment