Skip to footer navigation.

« Oatmeal

Posts tagged apple

Follow this tag's bespoke rss feed or return to the list of all tags.

Screenshot of Pocket Forth running on Mac OS System 7.

I’m toying with the idea of becoming a full time Mac OS System 7 developer.


Edited to add that I’ve had so much fun playing with this implementation of Forth on Mac OS System 7 that I quickly built a little microsite to help archive the info I’ve found about it.

How to install Uxn on macOS

Uxn is an esoteric stack-machine with 32 bit instructions. It exists someplace at the intersection of a GameBoy, 6502 ASM, an Apple II, Forth, RetroForth, the z80, a Sinclair ZX Spectrum, and what if Nausicaä from Studio Ghibli’s Nausicaä of the Valley of the Wind used a computer?” It is tiny, unlike most anything else around these days, and, once you wrap your head around it, pretty fun.

I won’t go into how to develop for it here (mostly because I’m not heaps good at that, not yet) but will walk you though how to get it running under a relatively recent release of macOS.

For more info on how to use it and develop programs for it see:

Assumptions

I’m assuming that you, at a minimum know how to find and launch the terminal application on macOS. Opening Launchpad or Spotlight and typing Terminal” should do the trick. Beyond being able to start the terminal application this assumes no prior knowledge of the command line nor Unix.

To run a Uxn rom you’ll need a Uxn emulator. There are a few of these out and about, but I’ll focus on the reference implementation here, Uxnemu.

This implementation has only one dependency, SDL2. SDL2 provides the audio/video bindings, as well as a few other niceties, to the host OS.

If you’ll be building Uxnemu from source you’ll need SDL2 to be installed on your machine. I’ll provide more information about that further on.

Quick and easy

If you don’t want to bother with installing anything other than Uxnemu you can download a build of it that includes SDL2 here.

When this downloads it’ll look sort of like a text file, not a normal application like you are probably used to. Before you run it you’ll need to change permissions on it to make the file executable (able to be run as a program). To do this you’ll have to launch the macOS’ terminal.

Once you’ve launched the terminal, either drag your downloads directory on to the terminal and press return on your keyboard, or type the following (assuming you’ve not changed the location of your system-standard downloads folder),

cd ~/Downloads

Then press retrun on your keyboard.

You’ve navigated to your downloads directory! Next up, we’ll make the freshly downloaded Uxnemu executable. To do this, type the following:

First, ensure that the file is present in the downloads folder:

ls

Then hit return.

You should see a list of all the contents of your downloads directory, including uxnemu. If you don’t see uxnemu you are either in the wrong directory or didn’t download it.

If you need to troubleshoot: check what directory you are in — type pwd and then hit return. This will display the current directory, it should return a string of text that ends in Downloads.” If you are in the downloads directory and still don’t see uxnemu download it again and check to where it is being saved.

Once in your downloads folder with your fresh copy of uxnemu run the following commands to make it executable:

chmod a+x uxnemu

Hit return!

This command will make uxnemu executable. To test that it worked, run the following,

./uxnemu

Then hit return — you should see output like, usage: uxnemu file.rom. If you do, that means that it worked! You’ve now got yourself a working uxnemu emulator.

Snag a rom and go nuts!

Give it a go, download the piano.rom from here.

Now run,

./uxnemu piano.rom

A new window will open. You should see something along the lines of this!

Uxn’s piano rom

Slightly more involved

Now, if you wanna get a little deeper into the weeds, you can assemble uxnemu from source. To do that, you’ll need to have some more pieces in place.

Preparing the way

Before we get started ensure that you’ve got all the necessary tools to build unxnemu’s C source. The easiest way to do this is to use macOS’ deeply middling package manager, brew. Before you install it, you’ll need to install the Xcode Command Line Tools (if you haven’t already, or if you haven’t installed the full, GUI, version of Xcode).

Here are directions for how to do that. Or, tl;dr wanna live dangerously xcode-select --install!

If you don’t explicitly needs Xcode, I recommend the command line tools over the full Xcode GUI because Xcode is ginormous, and will devour a computer’s disk-space.

Once you’ve got the Xcode Command Line Tools and brew installed you are almost ready. As mentioned above, Uxn depends on SDL2. We’ll use brew to install that.

Check that brew is working by looking for SDL2,

brew info sdl2

It’ll output something sort of like this if everything is working to plan,

Brew info sdl2’s output

With that command we ensured that sdl2 is available through brew, but haven’t yet installed anything. Eyes on the prize, you are ready to install sdl2. Do that by running,

brew install sdl2

That will output something along the lines of,

Brew install sdl2’s output

Note that brew can sometimes be bananas slow. Patience is key to this step.

Once brew is done doing its thing, and sdl2 is installed you are ready to start cooking with fire!

Doing the thing

The first step is to obtain the uxn source code. We’ll use git to do that. At the terminal,

git clone https://git.sr.ht/~rabbits/uxn

Then return.

This will download the uxn project. It’ll look something a bit like this,

Cloneing uxn’s output

Once that has completed, enter the directory you just cloned using git by typing,

cd uxn

Then return — from within that directory, now type,

ls

And then hit return on your keyboard. You’ll see a listing of the directory’s contents, like this

The contents of uxn’s repo

Now we’re reading to do the thing! Uxn comes with a handy script called build.sh. The script is a little program that can build uxnemu and a few other programs for you. To run it,

./build.sh

And return!

Uxnemu build and run

That will run the build script. The build script will build, and then run a default rom, like this!

Uxn’s piano rom

At this point you should be good to go!

Building from source means that you have the uxnemu as well as the uxnasm.

The uxnemu is an emulator, capable of running assembled Uxn roms.

The uxnasm is an assembler, capable of assembling Uxntal files into roms for the uxnemu to run!

As I learn more about about Uxn I hope to write more about it, in the meantime, check out the great tutorial!

Mac OS System7

A screenshot of a very tiny c program written on System7

I’ve got to use macOS by nature of my work. Lately I’m increasingly down on this. Here I will not re-hash anything about the current state of Apple’s hardware and software ecosystem. I don’t care.

Wanting to take a trip down nostolgia lane, however (to when I was 2 years old) I thought I’d install Mac OS System 7. What follows is a quick guide for doing the same.

Luckily this is made easier with Mini vMac! First, prepare the way:

mkdir Macintosh
cd Macintosh

This is where we’ll be doing all of our work from here on out.

Also of note, I’ll be doing this on Debian, but I think the instructions are generic enough to work on any system supported by Mini vMac.

After preparing the way download a prebuilt binary of Mini vMac or build it from source.

Once done, I then move the application into my Macintosh directory.

You now have an emulator capable of immitating (emulating) an old Mac! This is like having hardware but theres nothing on it — no bios, no operating system, and no software. We’ll do that next.

Download a ROM,

wget https://sites.google.com/site/minivmacapplicationsv6/disk-images-and-roms/vmac.rom -O vMac.ROM

Download an opperating system,

wget https://sites.google.com/site/minivmacapplicationsv6/systems-os/System7.zip
unzip System7.zip -d System7

At this point you should have 2 or 3 things in your Macintosh directory deppending on if you put the Mini vMac binary in the directory:

- minivmac
- System7.DSK
- vMac.ROM

At this point you are ready to fireup Mini vMac and start configuring stuff!

Launch Mini vMac, you’ll see a gray screen with a flashing floppy disk on it. Drag the System7.DSK on to that screen. If I haven’t led you astray the system should boot to the System7 Finder.

If that worked we can proceed to installing” our operating system, or, more accuretly, making it the default for Mini vMac to read from at launch.

To do this, within your Macintosh directory, create a new blank disk,

dd if=/dev/zero of=devboot.dsk bs=83886080 count=1

Drag this newly created disk, devboot.dsk on to Mini vMac to mount it. You’ll be prompted to initialize the disk. Do so. Once initialized it will appears on the desktop.

Now, within Mini vMac, drag the System7 folder on to your newly created and mounted disk. Copying the System7 disk to the devboot.dsk may take a little while.

When done, return to your Macintosh directory and rename the devboot.dsk,

mv devboot.dsk disk1.dsk

Now, when you launch Mini vMac you shouldn’t need to mount an operating system, the emulator should use System7 by default.

You now have a system with 4 available mb to play with! Go nuts.

Link logging

You all. A week! Maybe a few. They’ve been something else, for good and ill, fun and waaaha!?” A doozy. So, here is a doozy of a link log!

aerc; The world’s best email client

I haven’t given this a go, yet, but it looks pretty solid, and like a great/easier to use alternative to mutt or alpine.

Why I’m still using jQuery in 2019

I use jQuery just about every day, and, you know what…I really like it. 😬

Why You Should Buy Into the Emacs Platform

The title of this post is a we bit deceive-ious, it is more of a list of awesome emacs resources than a manifesto/proclamation on why you should” use emacs.

Welcome to Linux From Scratch!

Linux From Scratch (LFS) is a project that provides you with step-by-step instructions for building your own custom Linux system, entirely from source code.

Why Don’t Americans Use Their Parks At Night?

However cities want to encourage more park use at night, he stresses that they need to consult the community anchors” to ensure that it meets the needs of the entire neighborhood.

Animal Crossing: New Horizons will have skin tone customization, gender-neutral hairstyles for Villagers

This piece serves as a great follow up to this previously linked post from Austin Walker, Me, On The Screen: Race in Animal Crossing: New Leaf

Instant Pot Baked Potatoes Recipe

How to cook potatoes in an instant pot.

Is Robert’s Rules too Restrictive? Consider Martha’s Rules of Order for Meetings

See also, Martha’s Rules

Borough mayor is knitting to prove men speak too much at meetings

Montgomery said she is unfazed by criticism and will continue knitting until Christmas.

Knitting as both protest, and social signal.

Don’t slow that bus down, we’ve got places to be

But there’s a clear difference between Die Hard and Speed, […] Die Hard is about the individual — the lone wolf John McClaine, shooting his way through the terrorists — but Speed isn’t really about Reeves. It’s about the collective. It’s not just one of Keanu’s best movies; it’s one of the best movies about public transportation. Speed refutes one of the most pervasive myths about metropolitan transit systems in the U.S. — that no one rides the bus in Los Angeles — with its economically and racially diverse ensemble of riders, who must work together and with Jack Traven to keep the bus going until the bomb is dismantled.

Help For Werewolf

Werewolf! is a free-form social roleplaying game (kinda):

Be your own curator. Archivist.

Question: what is to be done with the stuff after it has been cataloged and stored? Are we pinning butterflies for the sake of pinning them, or is there a moment of beholding, and re-use/re-mix down the line?

Save and make? Transform?

I like to think of what I do with these link logs as part curation, part compost.

IBM and the Holocaust — why wasn’t this on my radar?

Juxtaposed: Wayfair workers plan walkout in protest of company’s bed sales to migrant camps.

Slight correction to CNNs title, though — migration camps” should be concentration camps.”

Atlanta’s Food Forest Will Provide Fresh Fruit, Nuts, and Herbs to Forage

Most of the trees in the forest are still too young to bear fruit. But once they become productive, about five years from now, McCord expects literal tons of fruit.”

Before you were here

[…] Needing to build your own website, setting up your own webservers, and using non-user friendly applications to transfer data not only meant that most early users had a better core understanding of the technology and what its future might bring, it also meant that users had a sense of ownership. They were shaping the medium they were consuming.

screenshots of despair

A catalog of little despair.

Fans Are Better Than Tech at Organizing Information Online

The first step to recovery is admitting that you have a problem. I, as exemplified by this very post, have a tagging problem.

Interesting also in the context of digital minimalism,” see Walking Alone: On Digital Minimalism”.

on dat://

@kicks offering the most cogent explanation of what the heck date:// actually is that I’ve found!

Ok, so how does Dat work exactly? It is simply a unique address attached to a folder of files (kind of like a ZIP file.) You then share that folder on the network and others can sync it to their system when they visit the unique address.

SwiftUI, Privacy, macOS, and the Web

A long, but worthwhile read.

The Future of Interaction, Part II

The most important part of this announcement is the abstraction they’re working with, not the view surface being used for rendering.

Wherein the abstraction becomes a tool for focusing on interaction, rather than specific implementation.

Adversarial Interoperability: Reviving an Elegant Weapon From a More Civilized Age to Slay Today’s Monopolies

What made iWork a success—and helped re-launch Apple—was the fact that Pages could open and save most Word files […]

[…] Apple didn’t just make an interoperable” product that worked with an existing product in the market: they made an adversarially interoperable product whose compatibility was wrested from the incumbent, through diligent reverse-engineering and reimplementation.

The New Wilderness

The need to regulate online privacy is a truth so universally acknowledged that even Facebook and Google have joined the chorus of voices crying for change […] No two companies have done more to drag private life into the algorithmic eye than Google and Facebook.

So why have the gravediggers of online privacy suddenly grown so worried about the health of the patient?

Part of the answer is a defect in the language we use to talk about privacy. That language, especially as it is codified in law, is not adequate for the new reality of ubiquitous, mechanized surveillance.

Continuing later,

The question we need to ask is not whether our data is safe, but why there is suddenly so much of it that needs protecting. The problem with the dragon, after all, is not its stockpile stewardship, but its appetite.

That Web Dev Thing Where Everybody Says Something Clever Involving Toast

Twitter is designed to escalate responses and keep people engaged. This has the effect of polarising discussions online which in turn has, in my mind, made it completely useless as a venue for discussing web development issues.

airtext

A decentralized blogging…thing…platform…service?

Discovery from this weekend: Apple Pay doesn’t work on my phone when it is connected to my Bluetooth headphones. 🤔

In reply to: Apple announces special event for September 12

Missed Rosh Hashana by 1 day 🎉

In reply to: A Kindergartener’s Best Computer is About to Die

Hey Kicks! I’d be interested in your thoughts on this piece about how Chromebooks (and I guess iPads, too) potentially limit students’ ability to push the boundaries of computing.

The Workflow app on iOS is simultaneously magical and maddening.

Weird discovery of the day: if my USB C dongle thing is plugged into the rear USB C port on my work laptop (a MacBook Pro w/escape key), and my wireless keyboard’s USB receiver is plugged into the dongle I notice terrible latency while typing. If, however, the dongle is plugged into the forward port? No more latency! I mentioned this to a coworker with the exact same computer. They’ve noticed the same behavior, but flipped 🤷‍♂️