<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Get Info: #emulation</title>
    <description>Posts tagged “emulation” — Blog of independent game and app developer Matt Sephton. Featuring vintage Macintosh, game development, digital artwork, Japanese esoterica, video game reviews, hacks and tips, and much more.</description>
    <link>https://blog.gingerbeardman.com/tag/emulation/</link>
    <atom:link href="https://blog.gingerbeardman.com/tag/emulation/index.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sat, 11 Jul 2026 16:22:12 +0000</pubDate>
    <lastBuildDate>Sat, 11 Jul 2026 16:22:12 +0000</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>

    
      
        <item>
          <title>Per-game skins in the Delta classic video game emulator for iOS</title>
          <description>&lt;p&gt;Apple recently changed the App Store rules to allow emulators, which means we’re now seeing emulators for classic video game consoles available for download! This is great news for a retro gamer like myself. &lt;a href=&quot;https://apps.apple.com/gb/app/delta-game-emulator/id1048524688&quot;&gt;Delta&lt;/a&gt; is one such emulator that currently focuses on Nintendo platforms: NES, Game Boy, Game Boy Color, SNES, N64 and DS.&lt;/p&gt;

&lt;p&gt;I thought it would be fun to play my favourite Nintendo DS game: &lt;a href=&quot;/2013/06/29/maboshi/&quot;&gt;MaBoShi&lt;/a&gt;. This is an odd choice of game for a few reasons, but it really tests what Delta and the melonDS emulation core can do.&lt;/p&gt;

&lt;p&gt;Immediately I noticed that the Nintendo DS emulation quality is high: MaBoShi’s mosaic transitions are shown, whereas in other emulators such as DraStic or DeSmuME they are not. That’s a good start!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/delta-maboshi-default.png&quot; alt=&quot;PNG&quot; title=&quot;Delta&apos;s default Nintendo DS skin—pretty nice! BUT&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;when-good-isnt-good-enough&quot;&gt;When good isn’t good enough&lt;/h2&gt;

&lt;p&gt;But, we can see some odd things about MaBoShi:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;it is played with the DS rotated on its side&lt;/li&gt;
  &lt;li&gt;the second screen goes mostly unused&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And there are some other things we can’t see:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;it doesn’t use the touch screen&lt;/li&gt;
  &lt;li&gt;only the D-pad is used during play (and Start button to pause)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Usually, when I play this game in an emulator I activate single screen mode and forgo seeing the high score, which is no big deal as the game ends at 1 million and that’s always my goal.&lt;/p&gt;

&lt;p&gt;So I looked into the &lt;a href=&quot;https://faq.deltaemulator.com/using-delta/controller-skins&quot;&gt;Delta docs&lt;/a&gt; and &lt;a href=&quot;https://noah978.gitbook.io/delta-docs/skins&quot;&gt;skin docs&lt;/a&gt; and find that the options to show a single screen, or rotate it, are controlled by the skin (visual theme) you are using.&lt;/p&gt;

&lt;p&gt;Reading further into skins the capabilities seemed quite comprehensive, so I began to hatch a plan… &lt;em&gt;maybe I can create a custom skin just for MaBoShi&lt;/em&gt;?&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;i-love-it-when-a-plan-comes-together&quot;&gt;I love it when a plan comes together&lt;/h2&gt;

&lt;p&gt;Here’s the feature list I came up with:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;show the main game screen&lt;/li&gt;
  &lt;li&gt;show only the score from the secondary screen&lt;/li&gt;
  &lt;li&gt;remove all controls other than the d-pad, start and delta button&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I achieved this goal as follows:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;define two seperate screens to split the DS image&lt;/li&gt;
  &lt;li&gt;rotate each of the screens&lt;/li&gt;
  &lt;li&gt;overlap the screens so that only the score from the secondary screen is visible&lt;/li&gt;
  &lt;li&gt;rotate the d-pad direction controls&lt;/li&gt;
  &lt;li&gt;made the touch/game screen a big button&lt;/li&gt;
  &lt;li&gt;make empty space equivalent to nearest button&lt;/li&gt;
  &lt;li&gt;create a nice PDF to show the buttons visually&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’re interested in the JSON associated with this skin, &lt;a href=&quot;https://gist.github.com/gingerbeardman/00a75a0675da8a98faa0812383eb822e&quot;&gt;here it is on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;maximum-joy&quot;&gt;Maximum joy&lt;/h2&gt;

&lt;p&gt;Installation and download instructions are at the bottom of the page, but here’s the final skin:&lt;/p&gt;

&lt;p class=&quot;deltaskin&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/delta-maboshi-deltaskin.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/delta-maboshi-deltaskin-instructions.png&quot; alt=&quot;PNG&quot; title=&quot;Game instructions are presented when the phone is in landscape&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;

&lt;p&gt;To install the skin you need to do a little bit of busy work, but boy is it worth it:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Install &lt;a href=&quot;&quot;&gt;Delta&lt;/a&gt; and get it running DS games (&lt;a href=&quot;https://www.youtube.com/watch?v=lV_QfVvXA-o&quot;&gt;check this video&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Create a folder called Delta in your iCloud Drive so you can easily store/retrieve some downloads&lt;/li&gt;
  &lt;li&gt;Download the following files:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://archive.org/download/maboshi-nintendo-ds/MaBoShi.nds.zip&quot;&gt;MaBoShi.nds.zip&lt;/a&gt; game file&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://archive.org/download/maboshi-nintendo-ds/MaBoShi.jpg&quot;&gt;MaBoShi.jpg&lt;/a&gt; artwork&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/NDS_MaBoShi.deltaskin&quot;&gt;MaBoShi.deltaskin&lt;/a&gt; custom skin&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Open the .nds.zip game file in Delta&lt;/li&gt;
  &lt;li&gt;Tap and hold the game icon to show a menu&lt;/li&gt;
  &lt;li&gt;Choose “Change Artwork”&lt;/li&gt;
  &lt;li&gt;Select the .jpg you downloaded earlier&lt;/li&gt;
  &lt;li&gt;Choose “Change Controller Skin”&lt;/li&gt;
  &lt;li&gt;Select the skin using the + button and set it as both Portrait and Landscape skin for the game&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check out &lt;a href=&quot;https://gamefaqs.gamespot.com/wii/946472-maboshis-arcade/faqs&quot;&gt;my MaBoShi Guide at GameFAQs&lt;/a&gt; to learn more about the game and how to play it. It’s essentially a one button game so isn’t affected by the lack of physical buttons.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 18 Apr 2024 19:55:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/04/18/per-game-skins-in-the-delta-classic-video-game-emulator-for-ios/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/04/18/per-game-skins-in-the-delta-classic-video-game-emulator-for-ios/</guid>
        </item>
      
    
      
        <item>
          <title>About the interoperability of System 7 and iOS</title>
          <description>&lt;p&gt;It never fails to amaze me how at home System 7 feels on an iPad. In fact, I’d go so far as to say I’ve never felt more capable than when I’m using it this way. &lt;em&gt;What a time to be alive!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Still, there are times when it makes sense to lean on the features of the host device to get your job done more easily. In this post I detail common tasks that involve “crossing the streams”.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;file-conversions&quot;&gt;File Conversions&lt;/h2&gt;

&lt;p&gt;When transferring files to/from System 7 you’re going to need to convert them to/from suitable formats to make your life easier. Below I’ve listed my approach to the most common file types. Of course, your task may differ but I hope this gives you some useful hints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bitmap files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use &lt;a href=&quot;https://pixaki.com&quot;&gt;Pixaki&lt;/a&gt; which is a fantastic native iPad app for creating pixel art. It will load either layered Photoshop or flat PNG files, both of which are easy to generate in System 7:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PSD: Photoshop 3.0&lt;/li&gt;
  &lt;li&gt;PNG: GraphicConverter 4.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vector files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dealing with vector artwork produced in the Deneba apps that I use is a little trickier. We have to jump use a stepping stone or two. First we export a file that keeps the vector data—I tend to choose Illustrator 88—and then we load that into the majestic FreeHand and export an EPS from there.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I88: Illustrator 88 (aka version 1.7)&lt;/li&gt;
  &lt;li&gt;EPS: FreeHand 3/4/5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Textual data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I generally type in Markdown so plain-text TXT files work just fine and require no conversion. Programming source code files such as C, Pascal, or otherwise also transfer without incident.&lt;/p&gt;

&lt;p&gt;You may have some luck with Rich Text RTF files, and also with some versions of the Microsoft Word DOC file format, to transfer formatted text both ways without having to convert it to other file formats.&lt;/p&gt;

&lt;p&gt;More exotic document formats will be trickier, but &lt;a href=&quot;https://www.libreoffice.org&quot;&gt;LibreOffice&lt;/a&gt; can open number of older formats as read-only files. Examples are: AppleWorks, ClarisWorks, Nisus Writer, WordPerfect, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tabular data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Excel&lt;/em&gt; 4.0 has you covered for CSV, XLS and more.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;file-io&quot;&gt;File I/O&lt;/h2&gt;

&lt;p&gt;To get files out of System 7 simply drop them onto the File Sharing drive, open Files, and long press on the file to get a list of the available actions. The exact options that iOS will give you will depend on the apps you have installed. Don’t be a stranger over at the App Store!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;printing&quot;&gt;Printing&lt;/h2&gt;

&lt;p&gt;To print any type of document from System 7, I make use of software that allows printing to a PDF. It’s worth noting that the result is a bitmap PDF, not vector, but it’s good enough to get hold of a quick hardcopy.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PDF: Acrobat PDFWriter 3.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, if you are working with vector files you’ll have a proper scalable vector PDF file that you can print in exactly the same way.&lt;/p&gt;

&lt;p&gt;Once the PDF is in File Sharing, use iOS to print it wirelessly to an AirPrint compatible printer.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;multitasking&quot;&gt;Multitasking&lt;/h2&gt;

&lt;p&gt;iOS is only a swipe away, so remember that you can access iOS apps and services and swipe System 7 away at any time.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Split View&lt;/strong&gt; (if you enabled it when building BasiliskII) for side-by-side browsing in Safari&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Slide Over&lt;/strong&gt; for quick access to Files, Photos, Safari, etc.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Background&lt;/strong&gt; to listen to Music or Podcasts&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Picture-in-Picture&lt;/strong&gt; for YouTube or other video playback&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;downloading-files&quot;&gt;Downloading files&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Safari&lt;/em&gt; will let you download classic Macintosh file formats. Even though it doesn’t know how to handle them, they will automatically be saved on your iPad in Downloads.&lt;/p&gt;

&lt;p&gt;From there you can use Files to copy the file into BasiliskII’s File Sharing folder, or use the iOS Share Sheet to copy the file into BasiliskII and simultaneously open the emulator! Very handy. I use one or the other depending on my goal.&lt;/p&gt;

&lt;p&gt;Some file formats you are likely to come across:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;.hqx&lt;/strong&gt;—BinHex file&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.bin&lt;/strong&gt;—MacBinary file&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.sit&lt;/strong&gt;—StuffIt archive&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.cpt&lt;/strong&gt;—CompactPro archive&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.sea&lt;/strong&gt;—self-extracting archive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above files can be converted or extracted using StuffIt, MindExpander, or CompactPro. You might also see files with more than one extension, in which case don’t worry the file has been treated twice for good measure, you may have to open it twice in System 7 to get it into its final/original form.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;.dsk&lt;/strong&gt;—disk image&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.img&lt;/strong&gt;—disk image&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.smi&lt;/strong&gt;—self-mounting disk image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above disk images can be mounted using StuffIt, ShrinkWrap, DiskCopy 6. You could also mount them in the BasiliskII interface, but I tend not to do so for disk images that I won’t have mounted for very long.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;.iso&lt;/strong&gt;—standard CD-ROM disk image&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.toast&lt;/strong&gt;—proprietary CD-ROM disk image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above optical disk images should be mounted using the BasiliskII settings interface (shown at first launch, or whenever you shake your device). Disks mounted in this way will be available at every boot, and can only be removed by shutting down the system and restarting the emulator.&lt;/p&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;About the interoperability of System 7 and iOS&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/05/03/interoperability-of-system-7-and-ios/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/05/03/interoperability-of-system-7-and-ios/</guid>
        </item>
      
    
      
        <item>
          <title>Building BasiliskII for iOS</title>
          <description>&lt;p&gt;I’ve had numerous requests for a guide to building BasiliskII on iOS. Let me know of anything is unclear or would benefit from more details!&lt;/p&gt;

&lt;p&gt;February 2024: Updated for building with Xcode 15.2 on macOS 14.3 to iOS 17.3. YMMV.&lt;/p&gt;

&lt;h2 id=&quot;building&quot;&gt;Building&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Install &lt;a href=&quot;https://apps.apple.com/gb/app/xcode/id497799835?mt=12&quot;&gt;Xcode from Mac App Store&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Clone &lt;a href=&quot;https://github.com/zydeco/macemu/tree/ios/BasiliskII/src/iOS&quot;&gt;project source from GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Switch to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ios&lt;/code&gt; branch&lt;/li&gt;
  &lt;li&gt;Open .xcodeproj file&lt;/li&gt;
  &lt;li&gt;Set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Product &amp;gt; Destination&lt;/code&gt; to point to your device&lt;/li&gt;
  &lt;li&gt;Run&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;optional-changes&quot;&gt;Optional Changes&lt;/h2&gt;

&lt;p&gt;These are changes I made that give a better experience on my specific iPad.&lt;/p&gt;

&lt;h3 id=&quot;adding-chunky-screen-resolutions&quot;&gt;Adding chunky screen resolutions&lt;/h3&gt;

&lt;p&gt;I added chunky “half resolution” screen modes to increase the size of user interface elements so that buttons, menu items and so on are all around the 44pt recommended in the Apple iOS HIG.&lt;/p&gt;

&lt;p&gt;For iPad Pro 12.9” these changes were:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[self addVideoMode:CGSizeMake(512, 496) to:videoModes]; // portrait minus keyboard
[self addVideoMode:CGSizeMake(512, 672) to:videoModes]; // portrait &quot;full&quot; screen
[self addVideoMode:CGSizeMake(683, 502) to:videoModes]; // landscape &quot;full&quot; screen
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Enter those after &lt;a href=&quot;https://github.com/zydeco/macemu/blob/9b90ebad780f35afb9f0001109bdca9c7e1cb478/BasiliskII/src/iOS/BasiliskII/B2ScreenView.mm#L56-L61&quot;&gt;line 61 in file B2ScreenView.mm&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;disabling-graphics-smoothing&quot;&gt;Disabling graphics smoothing&lt;/h3&gt;

&lt;p&gt;My personal preference is to disable filtering/smoothing on all graphics scaling, but only because I’ve dialled in resolutions that fit exactly so there will be no scaling happening anyway:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;NSString *filter = kCAFilterNearest;
videoLayer.magnificationFilter = filter;
videoLayer.minificationFilter = filter;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Make this change at &lt;a href=&quot;https://github.com/zydeco/macemu/blob/9b90ebad780f35afb9f0001109bdca9c7e1cb478/BasiliskII/src/iOS/BasiliskII/B2ScreenView.mm#L108&quot;&gt;line 108 in file B2ScreenView.mm&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;custom-keyboard-layouts&quot;&gt;Custom Keyboard Layouts&lt;/h3&gt;

&lt;p&gt;These are defined in JSON and &lt;a href=&quot;https://github.com/zydeco/macemu/tree/ios/BasiliskII/src/iOS/Keyboard%20Layouts&quot;&gt;compiled&lt;/a&gt; to a custom format:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zydeco/macemu/tree/ios/BasiliskII/src/iOS/BasiliskII/Keyboard%20Layouts&quot;&gt;source file location on GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;several regional layouts are already provided&lt;/li&gt;
  &lt;li&gt;you don’t have to make your own!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gingerbeardman/artworks-keyboard&quot;&gt;Here’s one that I made&lt;/a&gt;, based on the British layout, for use with Deneba artWORKS/UltraPaint. To install it you should copy the file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;artWORKS.nfkeyboardlayout&lt;/code&gt; to BasiliskII’s &lt;em&gt;Keyboard Layout&lt;/em&gt; folder using the Files app on your iPad.&lt;/p&gt;

&lt;h3 id=&quot;enable-split-view-support&quot;&gt;Enable Split View Support&lt;/h3&gt;

&lt;p&gt;This can be enabled by changing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BasiliskII-Info.plist&lt;/code&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIRequiresFullScreen&lt;/code&gt; should be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt; in &lt;a href=&quot;https://github.com/zydeco/macemu/blob/ios/BasiliskII/src/iOS/BasiliskII/BasiliskII-Info.plist#L114&quot;&gt;BasiliskII-Info.plist&lt;/a&gt; but be wary of the following problem:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the very top of the screen (where you’d expect the iOS status bar to be, and where part of the System 7 menu bar is) will become unresponsive to touch due to the Slide Over indicator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This would need to be managed/avoided by the screen layout of BasiliskII, but when I attempted this it raised more issues.&lt;/p&gt;

&lt;p&gt;However, you can still use Slide Over to position Safari, Files, etc. along the edge of your screen.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;p&gt;There are additional capabilities that come with the emulator integration. I go further into these, and more besides, in a additional posts listed at the bottom of the page.&lt;/p&gt;

&lt;h3 id=&quot;keyboard&quot;&gt;Keyboard&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Swipe up/down with two fingers to show/hide the on-screen keyboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;settings&quot;&gt;Settings&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Spread 4 or 5 fingers to show the &lt;em&gt;BasiliskII Settings&lt;/em&gt; pop-up&lt;/li&gt;
  &lt;li&gt;Tap outside of the &lt;em&gt;BasiliskII Settings&lt;/em&gt; pop-up to hide it&lt;/li&gt;
  &lt;li&gt;Settings can also be invoked through the app menu, long press the app icon&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;custom-screen-size&quot;&gt;Custom screen size&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Pinch with 2 fingers to dynamically resize screen&lt;/li&gt;
  &lt;li&gt;Separate tracking for horizontal and vertical resizing&lt;/li&gt;
  &lt;li&gt;Double-tap for full size screen&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;file-sharing&quot;&gt;File Sharing&lt;/h3&gt;

&lt;p&gt;A drive appears on the desktop that is mapped to the iOS file sharing folder of the app.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You can use Files to transfer files into or out of the emulated machine&lt;/li&gt;
  &lt;li&gt;Share Sheet also works for getting files into the emulated machine&lt;/li&gt;
  &lt;li&gt;You can organise the files into folders using the Files app&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;apple-pencil&quot;&gt;Apple Pencil&lt;/h3&gt;

&lt;p&gt;This is supported the same way as regular touch so it acts as a mouse. Drawing works well and is very responsive, even at lower Hz.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Palm rejection is missing&lt;/li&gt;
  &lt;li&gt;Pressure sensitivity is missing&lt;/li&gt;
  &lt;li&gt;Multi touch seems to be missing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;How to install BasiliskII on your iPad&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 21 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/21/building-basiliskii-for-ios/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/21/building-basiliskii-for-ios/</guid>
        </item>
      
    
      
        <item>
          <title>Automating interactions using Apple Events</title>
          <description>&lt;p&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;As I’ve previously mentioned&lt;/a&gt;, UltraPaint and artWORKS share a lot of DNA so their structure is effectively identical, including the tool palette. This is a good thing as I intend to automate tool selection in both apps and I’ll take any help 30-year-old software wants to send my way!&lt;/p&gt;

&lt;p&gt;Chapter 6 in the book “The Automatic Mac” (1992, &lt;a href=&quot;https://vintageapple.org/macbooks/&quot;&gt;download&lt;/a&gt;) details a number of ways of scripting graphics programs. They use Canvas as an example, which is great because that is a very close relative to the artWORKS and UltraPaint apps that I use. The book informed a lot of what I’m doing here, though my approach differs because of my available tools and personal preference.&lt;/p&gt;

&lt;h2 id=&quot;simply-clicking&quot;&gt;Simply Clicking&lt;/h2&gt;

&lt;p&gt;My first thought was to try the naive way of selecting tools by just clicking them! If the tool palettes are positioned in the same place (this can also be automated) then macros can simply click at specific screen locations to select a tool. This approach works well for both apps. But this is a very fragile way of automating interactions—if windows are inadvertently moved the automation will break. So, there’s definitely room for improvement.&lt;/p&gt;

&lt;h2 id=&quot;going-deeper&quot;&gt;Going Deeper&lt;/h2&gt;

&lt;p&gt;According to period Apple documentation (&lt;a href=&quot;https://www.google.co.uk/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=&amp;amp;ved=2ahUKEwiIr_OAzYXwAhXErHEKHR_sAcYQFjAAegQIChAD&amp;amp;url=https%3A%2F%2Fdeveloper.apple.com%2Flegacy%2Flibrary%2Fdocumentation%2Fmac%2Fpdf%2FInterapplication_Communication%2FIntro_to_IAC.pdf&amp;amp;usg=AOvVaw0WKA5J59562fzTuOMZ58PG&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/IAC/IAC-94.html&quot;&gt;HTML&lt;/a&gt;) a means of automation was introduced in System 7:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The interapplication communication (IAC) architecture provides a standard and extensible mechanism for communication among Macintosh applications. The IAC architecture makes it possible for your application to&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;provide automated copy and paste operations between your application and other applications&lt;/li&gt;
    &lt;li&gt;be manipulated by means of scripts&lt;/li&gt;
    &lt;li&gt;send and respond to Apple events&lt;/li&gt;
    &lt;li&gt;send and respond to high-level events other than Apple events&lt;/li&gt;
    &lt;li&gt;read and write blocks of data between applications&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sounds perfect—my idea of a good time!&lt;/p&gt;

&lt;h2 id=&quot;apple-events&quot;&gt;Apple Events&lt;/h2&gt;

&lt;p&gt;To support AppleScript, apps were required to offer suites of supported messages and mechanisms. These are advertised through the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aete&lt;/code&gt; resource. ResEdit shows this data as raw hex, unless you install a template to enable it to make sense of it. Resorcerer supports it out of the box. There are a bunch of other tools that can display the data in a human readable way such an Apple-created &lt;a href=&quot;https://staticky.com/mirrors/ftp.apple.com/developer/Development_Kits/AppleScript/Development_Tools/Aete_Editor_Stack_1.0b3/&quot;&gt;HyperCard stack&lt;/a&gt;, a third-party app called &lt;a href=&quot;https://macintoshgarden.org/apps/eightyrez&quot;&gt;EightyRez&lt;/a&gt;, and automation tool &lt;a href=&quot;https://macintoshgarden.org/apps/quickeys-353&quot;&gt;QuicKeys&lt;/a&gt; to name just a few.&lt;/p&gt;

&lt;p&gt;QuicKeys sounded ideal as it lets me query the data, using a set of dropdown menus, and use it to specify automation to try out the Apple Events way of selecting a tool. It worked first time! But it was slow, and there was a distracting loss of window focus as the macro was executed.&lt;/p&gt;

&lt;p&gt;In search of something better turned to my favourite classic automation tool: KeyQuencer. I’d previously searched trough various archives for any available macros, so had a vague memory there was something out there I might be able to use. I dug up AESend, an Apple Events extension for KeyQuencer.&lt;/p&gt;

&lt;p&gt;I used QuicKeys GUI to set up the initial Apple Events call, as it allows you to pick options from drop-down lists. Then I used the Capture AE control panel to decode the Apple Events call into something human readable that I could adapt for use in KeyQuencer. I’d still take that approach for any new Apple Events.&lt;/p&gt;

&lt;p&gt;The result was much faster Apple Events sending and no distracting window focus flickering.&lt;/p&gt;

&lt;h2 id=&quot;two-in-one&quot;&gt;Two-in-One&lt;/h2&gt;

&lt;p&gt;The end result is a macro of two parts: the first section operates artWORKS using Apple Events, continuing without complaint if the app is not open, and the second section operates UltraPaint using simple mouse clicks.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/automating-apple-events.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Example of a KeyQuencer Macro that works in both artWORKS and UltraPaint&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I plan to adding support for Canvas 3.x at some point as this shares Apple Events support with artWORKS.&lt;/p&gt;

&lt;h2 id=&quot;investigation&quot;&gt;Investigation&lt;/h2&gt;

&lt;p&gt;According to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aete&lt;/code&gt; resource description in both artWORKS and Canvas, selection of Internal Tools using Apple Events is limited to 10 seemingly random tools. This made no sense to me, so I tried specifying higher tools and this experimentation proved that all 18 internal tools are indeed available. I guess the description had been truncated at some point?&lt;/p&gt;

&lt;p&gt;Some time later I read “The Automatic Mac” again and it shows a more complete list of tool values! The order seems to be based on the tool palette in Canvas.&lt;/p&gt;

&lt;p&gt;Even so, I went the extra mile to complete a list of both internal and external tools, shown below.&lt;/p&gt;

&lt;h3 id=&quot;internal-tools-btol&quot;&gt;Internal Tools (btol)&lt;/h3&gt;

&lt;table id=&quot;deneba-btol&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Name&lt;/th&gt;
      &lt;th&gt;shor&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;ArcRect&lt;/td&gt;
      &lt;td&gt;7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Arrow&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BezierCurve&lt;/td&gt;
      &lt;td&gt;10&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Brush&lt;/td&gt;
      &lt;td&gt;14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Eraser&lt;/td&gt;
      &lt;td&gt;17&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Free Hand&lt;/td&gt;
      &lt;td&gt;8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Lasso&lt;/td&gt;
      &lt;td&gt;11&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Line&lt;/td&gt;
      &lt;td&gt;3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Marquee&lt;/td&gt;
      &lt;td&gt;12&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Oval&lt;/td&gt;
      &lt;td&gt;6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Paint Bucket&lt;/td&gt;
      &lt;td&gt;15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Paint Object Creator&lt;/td&gt;
      &lt;td&gt;18&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Pencil&lt;/td&gt;
      &lt;td&gt;16&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Polygon&lt;/td&gt;
      &lt;td&gt;9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Rect&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;RoundRect&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Spray Can&lt;/td&gt;
      &lt;td&gt;13&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Text&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;external-tools-etol&quot;&gt;External Tools (etol)&lt;/h3&gt;

&lt;table id=&quot;deneba-etol&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Name&lt;/th&gt;
      &lt;th&gt;long&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Coil&lt;/td&gt;
      &lt;td&gt;CoiL&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Concentric Circles&lt;/td&gt;
      &lt;td&gt;CCir&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cube&lt;/td&gt;
      &lt;td&gt;Cube&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cylinder&lt;/td&gt;
      &lt;td&gt;cyln&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Dimensioning&lt;/td&gt;
      &lt;td&gt;DIMN&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Doughnuts&lt;/td&gt;
      &lt;td&gt;doug&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fractals&lt;/td&gt;
      &lt;td&gt;Flin&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Gradient Fill&lt;/td&gt;
      &lt;td&gt;ObFl&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;GridMaker&lt;/td&gt;
      &lt;td&gt;grid&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Mover&lt;/td&gt;
      &lt;td&gt;MovE&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Multigon&lt;/td&gt;
      &lt;td&gt;NGON&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Namestamp&lt;/td&gt;
      &lt;td&gt;NamE&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Parallel Lines&lt;/td&gt;
      &lt;td&gt;Paln&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Point Rotate&lt;/td&gt;
      &lt;td&gt;PtRt&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;QuickTime&lt;/td&gt;
      &lt;td&gt;QkTm&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Registration Marks&lt;/td&gt;
      &lt;td&gt;regP&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Resistor&lt;/td&gt;
      &lt;td&gt;ResT&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sounder&lt;/td&gt;
      &lt;td&gt;sndT&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Spiral&lt;/td&gt;
      &lt;td&gt;Spir&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Split&lt;/td&gt;
      &lt;td&gt;Splt&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Star&lt;/td&gt;
      &lt;td&gt;STAR&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Timestamp&lt;/td&gt;
      &lt;td&gt;TimE&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Exploring Custom Keyboards and Automation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 19 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/19/automating-interactions-using-apple-events/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/19/automating-interactions-using-apple-events/</guid>
        </item>
      
    
      
        <item>
          <title>Turning an iPad Pro into the Ultimate Classic Macintosh</title>
          <description>&lt;p&gt;I’ve started work on the next in my &lt;a href=&quot;/tag/1bitwoodblocks/&quot;&gt;1-bit Woodblocks&lt;/a&gt; series: “Tekagami” (Ito Shinsui’s “Hand Mirror”). So it’s a good time to talk about how I turned an iPad Pro into the ultimate Classic Macintosh.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ultimate-classic-macintosh-1.jpg&quot; alt=&quot;JPG&quot; title=&quot;One of my drawings in Deneba UltraPaint on System 7, running in a Macintosh emulator on an iPad Pro&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;emulators&quot;&gt;Emulators&lt;/h2&gt;

&lt;p&gt;Both Macintosh emulators available on iOS we’re ported by &lt;a href=&quot;https://Twitter.com/maczydeco&quot; title=&quot;@maczydeco&quot;&gt;@maczydeco&lt;/a&gt; who has done an amazing job making them feel truly at home on iOS. Many thanks! They need to be built from source using Xcode but it’s a pretty straight forward process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mini vMac&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Supports System 1.1 to 7.5.5&lt;/li&gt;
  &lt;li&gt;Limited RAM and CPU emulation&lt;/li&gt;
  &lt;li&gt;File Sharing via bespoke method&lt;/li&gt;
  &lt;li&gt;No dynamic screen resolution changing&lt;/li&gt;
  &lt;li&gt;Odd interface using Control key shortcuts&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zydeco/minivmac4ios&quot;&gt;Source code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;BasiliskII&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Supports System 7.0 to 8.1&lt;/li&gt;
  &lt;li&gt;Advanced RAM and CPU emulation&lt;/li&gt;
  &lt;li&gt;File Sharing via mapped folder&lt;/li&gt;
  &lt;li&gt;Dynamic screen resolutions through Monitors control panel, or automation&lt;/li&gt;
  &lt;li&gt;Native iOS interface for settings panel, negating all the issues with the desktop GUI&lt;/li&gt;
  &lt;li&gt;We have a winner!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zydeco/macemu/wiki/BasiliskII-for-iOS&quot;&gt;Source code&lt;/a&gt; (use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ios&lt;/code&gt; branch)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;file-sharing&quot;&gt;File Sharing&lt;/h2&gt;

&lt;p&gt;This works a treat in both emulators, but the experience is better in BasiliskII.&lt;/p&gt;

&lt;p&gt;With Mini vMac you need to run a special file import app, and then whilst it’s open use iOS Share Sheet to send a file to Mini vMac. These extra steps are just enough friction to make the emulator annoying to use.&lt;/p&gt;

&lt;p&gt;With BasiliskII things are easier as it has a drive mapped to the app’s file sharing folder. You can use the Share Sheet in the same way as Mini vMac, but you can also simply copy/move a file to the BasiliskII folder and it will be accessible inside the emulator. The only gotcha with this approach is that you’re best moving the file to the emulated system’s main disk drive otherwise you’ll encounter various oddities with certain apps that don’t know how to cope with files located on this type of drive.&lt;/p&gt;

&lt;h2 id=&quot;screen-resolutions&quot;&gt;Screen Resolutions&lt;/h2&gt;

&lt;p&gt;The original Macintosh had a native screen resolution of 512×342.&lt;/p&gt;

&lt;p&gt;Conceptually, the iPad has a logical screen resolution of 1024×768, which when running in pixel doubled mode equates to 512×384. A pretty good match. Specifically, the native resolution varies according to the model of iPad or iPhone you are using.&lt;/p&gt;

&lt;p&gt;I use an iPad Pro 12.9” which has a native resolution of 2732×2048, pixel doubled that means 1366×1024, and pixel quadrupled 683×512. Targeting this ballpark of resolution means user interface elements will be around the &lt;a href=&quot;https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/&quot;&gt;magic 44pt tappable area&lt;/a&gt;, so that fingertip interactions are accurate, predictable and enjoyable.&lt;/p&gt;

&lt;p&gt;Of course the iPad can flip between landscape and portrait orientations on demand, which means BasiliskII supporting the Monitors control panel is a big win.&lt;/p&gt;

&lt;p&gt;So I added a bunch of custom resolutions to the BasiliskII soure code to add support for both pixel-doubled and pixel-quadrupled resolutions, in both portrait and landscape, with and without room for the software keyboard. I can switch between these resolutions with keyboard shortcuts. Which leads nicely on to…&lt;/p&gt;

&lt;h2 id=&quot;custom-keyboards&quot;&gt;Custom Keyboards&lt;/h2&gt;

&lt;p&gt;Both emulators share the same software keyboard mechanism. The keyboard layouts are user-editable as JSON and &lt;a href=&quot;https://github.com/zydeco/macemu/tree/ios/BasiliskII/src/iOS/Keyboard%20Layouts&quot;&gt;compiled&lt;/a&gt; into a custom format.&lt;/p&gt;

&lt;p&gt;So I put together a &lt;a href=&quot;https://github.com/gingerbeardman/artworks-keyboard&quot;&gt;custom keyboard layout&lt;/a&gt; that can be used in either emulator that gives me quick thumb access to tools and shortcuts in my most used apps: artWORKS and UltraPaint. It works for both apps as they are closely related, sharing a lot of code and resources.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ultimate-classic-macintosh-2.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;With this keyboard layout I’m not only relabelling the function keys, but also replacing some key codes to reposition keys for my own purposes. The apps don’t respond to function keys so I use macros and Apple Events to get things to work &lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;as detailed in another post&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;how-does-the-experience-compare-to-a-real-macintosh&quot;&gt;How does the experience compare to a real Macintosh?&lt;/h2&gt;

&lt;p&gt;The most important aspect of this setup is that it runs System 7 and the various apps I use. That is the core of my classic Macintosh experience and the goal I had in mind. The hardware running System 7 is merely a conduit.&lt;/p&gt;

&lt;p&gt;That said, the iPad Pro is more portable, reliable and capable than my real Macintosh. That’s 30 years of hardware progress for you.&lt;/p&gt;

&lt;p&gt;The iPad’s display in particular is a huge differentiator—it can assume so many different resolutions it should be thought of as a collection of displays rather than just a single one.&lt;/p&gt;

&lt;p&gt;Apple Pencil is very similar in feel to my Wacom ArtPad II, but with the single huge improvement that you’re drawing directly on the screen. Drawing with an Apple Pencil on System 7 is every bit as good as drawing in a native iPad app.&lt;/p&gt;

&lt;p&gt;iOS is only a swipe away: download classic software using a modern web browser like Safari, expand archives more quickly with Files or Documents, watch videos picture-in-picture, search your Inside Macintosh PDFs in Books, listen to streaming music, and so many other things that aren’t doable (or at least are extremely difficult to do) on a real classic Macintosh.&lt;/p&gt;

&lt;p&gt;Bluetooth keyboards just work. The new/recent mouse pointer support in iOS also works. You could even plug the iPad into an external display to go full circle back to a desktop computer.&lt;/p&gt;

&lt;p&gt;This setup gives me the best of both old and new worlds, and that’s why I refer to it as the Ultimate Classic Macintosh.&lt;/p&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;elsewhere&quot;&gt;Elsewhere&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;2021-03-29—&lt;a href=&quot;https://www.macobserver.com/cool-stuff-found/emulating-mac-plus-ios/&quot;&gt;The Mac Observer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-18—&lt;a href=&quot;https://news.ycombinator.com/item?id=26854990&quot;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-19—&lt;a href=&quot;https://boingboing.net/2021/04/19/ipad-pro-turned-into-the-best-classic-mac-there-ever-was.html&quot;&gt;Boing Boing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-19—&lt;a href=&quot;https://www.idownloadblog.com/2021/04/19/ipad-pro-classic-macintosh-emulator/&quot;&gt;iDownloadBlog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-19—&lt;a href=&quot;https://www.loopinsight.com/2021/04/19/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;The Loop&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-22—&lt;a href=&quot;https://www.fredzone.org/et-si-vous-transformiez-votre-ipad-en-macintosh-portable-2828&quot;&gt;FredZone&lt;/a&gt; (in French)&lt;/li&gt;
  &lt;li&gt;2021-04-23—&lt;a href=&quot;https://gizmodo.com/this-artist-turned-their-ipad-pro-into-a-classic-macint-1846749495&quot;&gt;Gizmodo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-23—&lt;a href=&quot;https://pxlnv.com/linklog/classic-macintosh-painting/&quot;&gt;Pixel Envy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-26—&lt;a href=&quot;https://www.igen.fr/ipad/2021/04/un-ipad-pro-sous-systeme-7-pour-dessiner-en-noir-et-blanc-122071&quot;&gt;iGeneration&lt;/a&gt; (in French)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 17 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/</guid>
        </item>
      
    

  </channel>
</rss>
