What's the Best Way to Encode Very Dense Technical Information?

I’ve given myself a challenge: I want to memorize 6502 assembly language instructions. I’m sure I’ll use a memory palace, but I’m fairly certain I’ll need to combine that with one or more additional mnemonic devices in order to be successful.

If you’re passingly familiar with assembly languages you know that instructions already get 3 or 4 character mnemonics. You’ll see instructions like lda which stands for Load Accumulator with Memory as an easy example, though some other mnemonics are less obvious. The problem is, knowing a mnemonic isn’t enough to understand the language.

Here is a rough set table of information I’d like to memorize on a per-instruction basis. Bear in mind, there are 56 other instructions of similar complexity that I’d also like to memorize.

How would I even begin? A memory palace with one door per letter-level mnemonic followed by imagery that (somehow?) encodes this information, maybe? I read somewhere that having “dead ends” in your memory palace is bad structure, so I’m not so sure of that approach.

LDA Load Accumulator with Memory

Addressing Mode Opcode Integer Ins. Length CPU Cycles Page Boundary
Absolute $ad 173 3 4
Absolute, X indexed $bd 189 3 4 +1 cycle
Absolute, Y indexed $b9 185 3 4 +1 cycle
Immediate $a9 169 2 2
Zero Page (ZP) $a5 165 2 3
ZP, indirect indexed X $a1 161 2 6
ZP, X indexed $b5 181 2 4
ZP, indirect indexed Y $b1 177 2 5 +1 cycle

Data Flow
Main Memory to Accumulator

Status Register Flags
Negative, Zero

2 Likes

Planning on teaching a computer nostalgia class? :wink: It’s partially muscle memory, so I hope you actually get to type it too… that said, in order to just get the basics memorized, I’d use one memory palace per category.

Load and Store (one palace)
LDA, LDX, LDY, STA, STX, STY

L## is load and S## is store; ##X and ##Y uses index X/Y, respectively instead of memory. I’d say the mnemonics are pretty decent actually. Plus, the Addressing Modes for X and Y are similar except for the X and Y part.

…not sure about the similar complexity, this entire category in total looks less complex than just LDA itself:

Branch (another palace)
BCC, BCS, BEQ, BMI, BNE, BPL, BVC, BVS

I have a post here explaining how to memorize the book mentioned in the post. You can use the same approach for your purposes:

So, first place all the categories (Load and Store, Arithmetic, Increment and Decrement, etc.) in front of the stores and then place their instructions inside their respective stores. Lastly, if you need to store the addressing modes on a route, do it on a separate one… just like I mention in the above post as far as Jonathan Edwards, Benjamin Franklin , etc.

For the categories, use whatever makes sense to you… “Load and Store” could be “Lost and Found”, “Arithmetic” could be “Asthma Attack”, etc. If you really think that the mnemonics for the instructions are not easy enough, you can use this approach to get a PAO image for each instruction.

They are conveniently all three characters long, so the first letter will get you P, the second A, and the third O. Assuming you already have a PAO system for 00 … 99 it’s a pretty quick way to get the instructions translated.

LDA (using major system codes for braille cells)

  • L is 70 (KS) say KISS (the band) with some A and O
  • D is 13 ™ say Tom chasing Jerry
  • A is 10 (TS) say Tyson (Mike) biting ear

So with memory palace from the first link… there is a lost and found box in front of the Cheesecake Factory. You walk in and in the first location you got “KISS chasing an ear” which is the braille PAO for LDA. You should know what LDA stands for. In the next location you find a PAO representing LDX. If for either of those two you need addressing modes stored, create another route (palace) somewhere else.

Hope this all makes sense. Let me know if I should clarify anything with more examples.

2 Likes

Great project. :slight_smile:

I don’t know assembly language. Is there a full list of the information somewhere? (mainly to see how much of it repeats for each instruction)

I think it’s like that with human language vocabulary too. Mnemonics can speed things up a lot, but they won’t work without using other approaches at the same time (like speaking/listening practice for human languages or actually writing code for programming languages). I memorized a lot of Haskell functions recently but that didn’t automatically give me the ability to write Haskell programs – the main benefit is that I know what functions are available and how to find similar functions by walking forwards or backwards in the list.

@bjoern.gumboldt

Planning on teaching a computer nostalgia class? :wink: It’s partially muscle memory, so I hope you actually get to type it too…

Ha! Well, retro is hot right now and I’ve bumped into C64 and NES developers who were in their early twenties. So, it could happen.

I actually want to lean for 6502 assembly for a few reasons:

  1. It’s primer on getting my brain to “think assembly” in quite the same way that learning Esperanto got me to think better and more precisely about language. I eventually want to learn a reasonable subset of Intel assembly, too. This looked easier.
  2. It’s a bucket list item. I grew up with a NES and a C64 and I always wanted to understand — and I mean really understand — how they worked. So, I’m going to do that.
  3. Source code archaeology I like the idea of preserving old programs (games) by working backwards from their compiled binary and puzzling out working byte-identical source tree. That’s an immediately transferable skill — even if the precise tool-chains differ — for things like malware analysis and legacy systems platform migration. Both of these fields skills are in high demand.

Right now I’m puzzling out what I can with Jim Butterfield’s book on assembly for beginners. I have about 5–6 books on the subject. I do actually get to type it. I have been playing around with 64tass and having some luck, just not a ton.

I’d use one memory palace per category.

That’s a good idea. Your post on memorizing the contents of books is quite interesting. I think I’ll take that approach.

Also, wow, and holy cow you seem to have 6502 assembly down cold. Even though the Z80 dominates the embedded space the 6502 or its 16 bit decedents can still be found fairly reliably in two niches: medical devices and set-top boxes.

Hope this all makes sense. Let me know if I should clarify anything with more examples.

Yes, it did.

1 Like

I don’t know assembly language. Is there a full list of the information somewhere?

Yeah, in a few places:

I think it’s like that with human language vocabulary too. Mnemonics can speed things up a lot, but they won’t work without using other approaches at the same time (like speaking/listening practice for human languages or actually writing code for programming languages)

Right. To be fair, most of the mnemonics are fairly intitive, but some aren’t. More than that, context matters just as it matters in human language.

1 Like

For those reading this discussion who would enjoy a look at Intel assembly, here is an interesting series on the Intel 80386.

1 Like