README.md

April 20, 2026 · View on GitHub

Howdy y'all,

This is a photograph of the mask ROM in an MSP430F149, along with annotation of its bit positions for MaskRomTool.

Decoding uses the same bit layout as the MSP430F449. Thanks to asander@ for contributing that decoder. Preferring generic solutions, make solve ought to give you the right parameters for any MSP430.

When properly decoded, the disassembly should begin like this. The first word is the ROM entry point and early disablement of the interrupts.

[0x00000c00]> pd 40
            0x00000c00      020c                                ; Entry at 0x02C.
            0x00000c02      b240805a2001   mov 0x5a80, 0x0120
            0x00000c08      32c2           dint                 ; Disable interrupts.
            0x00000c0a      31901a02       cmp 0x021a, sp
        ┌─< 0x00000c0e      0928           jnc $+0x0014
        │   0x00000c10      3190020c       cmp 0x0c02, sp
       ┌──< 0x00000c14      062c           jc $+0x000e
       ││   0x00000c16      3012b8a5       push 0xa5b8
       ││   0x00000c1a      3541           pop r5
       ││   0x00000c1c      3590b8a5       cmp 0xa5b8, r5

Latter MSP430 decodings look a little different. Note the two entry words at the beginning and the clearing of r11, which stores the privilege.

c00:  04 0c         .word  0x0c04          ; Low priv entry.
c02:  0e 0c         .word  0x0c0e          ; High priv entry if r11=0xFFFF.
c04:  31 40 20 02   mov  #0x0220,  r1
c08:  0b 43         clr  r11               ; Reduce privs.
c0a:  c0 43 0a f6   mov.b  #0,  0xf60a
c0e:  32 c2         dint

--Travis Goodspeed