ROSE-8 in customasm

Last week a friend shared the existence of hlorenzi’s customasm, a tool that can serve as the assembler for arbitrary CPU architectures just by defining a mapping of instructions to encodings.

Hey, I made a CPU once! How hard would it be to make a customasm definition for ROSE-8? Turns out…not very! I played around with it for about two hours, and by the end of it I’d translated an entire ROSE-8 program to customasm, with most of the definition file looking basically the same as the text reference for the ISA encoding.

“Pretty Good, Pretty Good”

As a kid, one of my first games was Maelstrom, a slick Asteroids clone for the Mac by Ambrosia Software (who later went on to publish the Escape Velocity series). I have childhood memories of the two-note soundtrack while playing the two simplest strategies (spin in place without accelerating, and zoom upwards in a straight line firing all the way), of the “You EEdiot” when you accidentally shot a power-up canister, and the “Pretty good, pretty good!” for when you score over 10,000 points in a single stage.

Except if I open up Maelstrom now, it says “Hot damn!” instead.

The Shell is a Program

I have a friend who switched to Linux because they didn’t want to pay for a new license for Windows and thereby end up running modern Windows. They’re not very computer-minded, so troubleshooting doesn’t come naturally, and anything that requires dropping down to the command line is something that has to be done by rote. And on one occasion, when I asked them to run something, they asked where to type it in.

Older Posts

  1. 2024-07-17 Trunic
  2. 2024-07-02 AnyObject
  3. 2024-04-07 XZ Gon' Give It To Ya
  4. 2024-04-06 Run-time Polymorphism in Swift
  5. 2024-01-20 Online Communication
  6. 2024-01-07 The Biggest Smallest PNG
  7. 2023-12-28 CellLVM
  8. 2023-12-14 Protobuf Is Almost Streamable
  9. 2023-12-13 Daylight Saving Is Temporal Time Zones
  10. 2023-11-26 GitMounter
  11. 2023-10-23 Type Erasure in Rust
  12. 2023-10-09 Soft Orders of Magnitude
  13. 2023-10-04 There's No Such Thing As "Implicitly Atomic"
  14. 2023-08-12 Multiplayer Slipways
  15. 2023-07-15 HOW TO REFER TO A MAGIC CONSTANT IN C
  16. 2023-04-01 sNaNs and qNaNs
  17. 2023-02-12 Setting up GoToSocial
  18. 2023-01-22 Rescuing Files From Classic Mac OS...with Swift!
  19. 2022-12-03 Re: Twitter
  20. 2022-11-28 The Two Faces of Codable/Serde
  21. 2022-10-09 Swift was always going to be part of the OS
  22. 2022-05-14 Relative References in ARM64 Disassembly
  23. 2022-04-24 Default Arguments and Label-based Overloading
  24. 2022-03-19 #TalkPay
  25. 2022-03-02 UnsafeMutableRawBufferPointer
  26. 2022-02-21 Dynamic Linking Is Bad For Apps And Static Linking Is Also Bad For Apps
  27. 2021-12-31 Swift Regrets: Wrap-up
  28. 2021-09-10 Swift Regrets
  29. 2021-07-05 Keyboard Pants
  30. 2020-11-15 Negotiate Your Offers!
  31. 2020-10-20 The Swift Runtime: Enums
  32. 2020-10-06 The Swift Runtime: Class Metadata Initialization
  33. 2020-09-29 The Swift Runtime: Class Metadata
  34. 2020-09-21 The Swift Runtime: Uniquing Caches
  35. 2020-09-14 The Swift Runtime: Type Metadata
  36. 2020-09-07 The Swift Runtime: Type Layout
  37. 2020-08-31 The Swift Runtime: Heap Objects
  38. 2020-08-26 Objective-Rust
  39. 2020-07-18 A Letter To My Congressional Representatives on the DHS Abuses of Power in Portland, Oregon
  40. 2020-07-07 Suffusion: Playing with Filesystems
  41. 2020-05-24 ROSE-8 on Mac OS 9
  42. 2020-04-03 Shallow Git Repositories
  43. 2020-04-01 Swift on Mac OS 9
  44. 2020-02-06 Flexible Identities in git
  45. 2020-02-04 Introducing the Game 'by Color
  46. 2020-01-28 ROSE-8: Console Mode
  47. 2020-01-22 Setting up gitweb on Shared Hosting
  48. 2020-01-13 ROSE-8
  49. 2019-12-24 quasiquarantine
  50. 2019-11-01 Leaving Apple
  51. 2019-09-25 Queue, Queeu, Quuee
  52. 2019-09-13 Presentation on PrintAsObjC
  53. 2019-08-01 > go east
  54. 2019-02-21 A Shiny Magic Number
  55. 2018-04-29 Misleading Metrics and UX Tradeoffs
  56. 2018-04-03 "FIXME" Doesn't Always Mean "Fix Me"
  57. 2018-03-22 My Little (String) Optimization, Part 2
  58. 2018-03-15 My Little Optimization: The Compiler Is Magic
  59. 2018-02-26 Many-to-Many Protocols
  60. 2018-01-29 Color Palette #8
  61. 2017-09-07 The New Kingdom of Nouns
  62. 2017-09-05 Over-abstraction
  63. 2016-08-21 Macromancy, Part 2
  64. 2016-08-07 Macromancy
  65. 2016-06-19 Pronoun Buttons
  66. 2016-05-29 Webmailer's Update Bar
  67. 2016-05-23 So You Want to Be a (Compiler) Wizard
  68. 2015-12-29 Re: Contempt Culture
  69. 2015-11-18 Recommendations
  70. 2015-05-09 Nibblesort: Adventures in Optimization
  71. 2015-02-22 AlterConf SF/Oakland
  72. 2015-01-24 “Skip the FFI”
  73. 2014-12-28 SIGWINCH
  74. 2012-12-08 How to Write a Checker in 24 Hours
  75. 2012-10-02 Git Tricks
  76. 2012-05-16 Big News
  77. 2012-04-26 Keyboard Adventures
  78. 2012-04-10 Mail Aliases
  79. 2011-08-14 Header Anchors: A Safari Extension
  80. 2011-08-10 "Little Big Details"
  81. 2011-07-29 Weak Linking
  82. 2011-07-25 Using Clang from SVN in Xcode
  83. 2011-07-22 rm vs. Time Machine
  84. 2011-07-14 Priorities
  85. 2011-06-30 Quick Look in TextMate
  86. 2011-06-27 git add
  87. 2011-06-20 Automatic Reference Counting
  88. 2011-06-16 Dealing with "Sandwich Code"
  89. 2011-06-05 gdba
  90. 2011-06-03 Chrome vs. Safari
  91. 2011-05-31 User-Side Troubleshooting
  92. 2011-05-30 Auspicious Continuation
  93. 2009-07-21 Scripting Bridge
  94. 2009-07-08 What Happened to Dockyard?
  95. 2009-06-26 Garbage Collectors and Stack Drawers
  96. 2009-06-21 Z shell
  97. 2009-05-22 “Several New Features”
  98. 2009-05-05 C++ Templates are Turing-Complete
  99. 2009-04-21 [Meme] How Many HTML Elements Can You Name in 5 Minutes?
  100. 2009-04-16 Safer Plugin Categories
  101. 2009-04-02 Hacking Safari 4...for Great Convenience
  102. 2009-03-27 Const Correctness
  103. 2009-03-19 Categories and +load
  104. 2009-03-15 Subversion Checksum Problems
  105. 2009-03-06 JavaScript Tetris
  106. 2008-09-04 Objective-J and Objective-C
  107. 2008-08-28 HTTPS and Name-based Virtual Hosting
  108. 2008-03-08 Alerts Without Apps (or nibs)
  109. 2008-01-14 NSNumber, CFNumber, and CFBoolean
  110. 2007-12-13 GenericToolbar and IB3
  111. 2007-10-27 Performance Optimization: Why We Can't Use valueForKeyPath:
  112. 2007-09-01 Short Xcode Tip: Plugins
  113. 2007-07-15 Port 25 Blocked?
  114. 2007-06-27 GenericToolbar Icon
  115. 2007-04-13 The Symbolism of Pretty URLS
  116. 2007-03-07 Flexible PHP
  117. 2007-01-12 Inauspicious Beginnings