+.macro m_s68k_write32_2M_decode map_addr
+ ldr r2, =(Pico+0x22200)
+ eor r0, r0, #2
+ ldr r2, [r2]
+ mov r0, r0, lsr #1 @ +4-6 <<16
+ add r2, r2, #\map_addr @ map to our address
+.endm
+
+.macro m_s68k_write32_2M_decode_m0 map_addr @ mode off
+ m_s68k_write32_2M_decode \map_addr
+ bic r1, r1, #0x000000f0
+ bic r1, r1, #0x00f00000
+ orr r1, r1, r1, lsr #4
+ mov r3, r1, lsr #16
+ strb r3, [r2, r0]!
+ tst r0, #1
+ strneb r1, [r2, #-1]
+ streqb r1, [r2, #3]
+ bx lr
+.endm
+
+.macro m_s68k_write32_2M_decode_m1 map_addr @ mode underwrite
+ bics r1, r1, #0x000000f0
+ bicnes r1, r1, #0x0000f000
+ bicnes r1, r1, #0x00f00000
+ bicnes r1, r1, #0xf0000000
+ bxeq lr
+ orr r1, r1, r1, lsr #4
+ m_s68k_write32_2M_decode \map_addr
+ ldrb r3, [r2, r0]!
+ tst r0, #1
+ ldrneb r0, [r2, #-1]
+ ldreqb r0, [r2, #3]
+ and r12,r1, #0x0000000f
+ orr r0, r0, r3, lsl #16
+ orrne r0, r0, #0x80000000 @ remember addr lsb bit
+ tst r0, #0x0000000f
+ orreq r0, r0, r12
+ tst r0, #0x000000f0
+ andeq r12,r1, #0x000000f0
+ orreq r0, r0, r12
+ tst r0, #0x000f0000
+ andeq r12,r1, #0x000f0000
+ orreq r0, r0, r12
+ tst r0, #0x00f00000
+ andeq r12,r1, #0x00f00000
+ orreq r0, r0, r12
+ tst r0, #0x80000000
+ strneb r0, [r2, #-1]
+ streqb r0, [r2, #3]
+ mov r0, r0, lsr #16
+ strb r0, [r2]
+ bx lr
+.endm
+
+.macro m_s68k_write32_2M_decode_m2 map_addr @ mode overwrite
+ bics r1, r1, #0x000000f0
+ bicnes r1, r1, #0x0000f000
+ bicnes r1, r1, #0x00f00000
+ bicnes r1, r1, #0xf0000000
+ bxeq lr
+ orr r1, r1, r1, lsr #4
+ m_s68k_write32_2M_decode \map_addr
+ ldrb r3, [r2, r0]!
+ tst r0, #1
+ ldrneb r0, [r2, #-1]
+ ldreqb r0, [r2, #3]
+ orrne r1, r1, #0x80000000 @ remember addr lsb bit
+ orr r0, r0, r3, lsl #16
+ tst r1, #0x0000000f
+ andeq r12,r0, #0x0000000f
+ orreq r1, r1, r12
+ tst r1, #0x000000f0
+ andeq r12,r0, #0x000000f0
+ orreq r1, r1, r12
+ tst r1, #0x000f0000
+ andeq r12,r0, #0x000f0000
+ orreq r1, r1, r12
+ tst r1, #0x00f00000
+ andeq r12,r0, #0x00f00000
+ orreq r1, r1, r12
+ cmp r0, r1
+ bxeq lr
+ tst r1, #0x80000000
+ strneb r1, [r2, #-1]
+ streqb r1, [r2, #3]
+ mov r1, r1, lsr #16
+ strb r1, [r2]
+ bx lr
+.endm
+
+