nop
mov.l (jmploc),r10
jmp @r10
nop
jmploc:
.long 0x37000

mov #0,r8
extu.w r1,r1

mov.l (flag),r10
mov.l @r10,r0
cmp/eq #1,r0
bt flag1
nop
cmp/eq #2,r0
bt flag2
nop
bra avoid
nop

flag1:
mov.l (loc),r10
mov.l @r10,r0

mov.l (storeloc),r11

mov r0,r8
mov.b r1,@(r0,r11)
add #1,r0
cmp/eq #4,r0
bf skip
nop
mov #0,r0
mov.l (flag),r11
mov.l r0,@r11
skip:
mov.l r0,@r10
bra brret
nop

flag2:
mov r1,r8
mov.l (storedata),r11
mov.l r1,@r11
mov #0,r0
mov.l r0,@r10
bra brret
nop

avoid:
mov.w (E0),r2
cmp/eq r2,r1
bt brE0
nop
mov.w (E1),r2
cmp/eq r2,r1
bt brE1
nop
mov.w (E2),r2
cmp/eq r2,r1
bt brE2
nop
mov.w (E3),r2
cmp/eq r2,r1
bt brE3
nop
mov.w (BF),r2
cmp/hi r2,r1
bt brBF 
nop

mov.l (retMUT),r10
jmp @r10
nop

brE0:
mov #1,r0
mov.l r0,@r10
mov #0,r0
mov.l (loc),r10
mov.l r0,@r10
mov r1,r8
bra brret 
nop
brE1:
mov.l (storeloc),r11
mov.l @r11,r11
mov.b @r11,r8
extu.b r8,r8
bra brret
nop
brE2:
mov #2,r0
mov.l r0,@r10
mov r1,r8
bra brret 
nop
brE3:
mov.l (storedata),r10
mov.l @r10,r10
mov.l (storeloc),r11
mov.l @r11,r11
mov.b r10,@r11
mov r10,r8
bra brret
nop
brBF:
mov.l (retgtBF),r10
jmp @r10
nop


brret:
mov.l (retret),r10
jmp @r10
nop 

.align 4

retMUT:
.long 0x217B8
retgtBF:
.long 0x217C6
retret:
.long 0x21C02
loc:
.long 0xFFFF8000
storeloc:
.long 0xFFFF8004
flag:
.long 0xFFFF8008
storedata:
.long 0xFFFF800C
E0:
.word 0xE0
E1:
.word 0xE1
E2:
.word 0xE2
E3:
.word 0xE3
BF:
.word 0xBF
