updateDisable :: Parser Word32
updateDisable = do { char 'd'; return 1} <|> do {string ""; return 0}
+highonly :: Parser Word32
+highonly = do { char 'h'; return 1} <|> do {string ""; return 0}
+
highlow :: Parser Word32
highlow = do { char 'h'; return 1} <|> do {char 'l'; return 0} <|> do {string ""; return 0}
csv2i_cd dict f = f<$>carry<*>updateDisable<*>condition<%>reg<.>reg<.>(iLit5 dict)
csv2i_d dict f = f<$>updateDisable<*>condition<%>reg<.>reg<.>(iLit5 dict)
csv2i_scd dict f = f<$>sign<*>carry<*>updateDisable<*>condition<%>reg<.>reg<.>(iLit12 dict)
-csv2i_sl dict f = f<$>sign<*>highlow<*>condition<%>reg<.>(iLit16 dict)
+csv2i_sl dict f = f<$>highonly<*>sign<*>condition<%>reg<.>(iLit16 dict)
+csv2i_sl' dict f = f<$>sign<*>condition<%>reg<.>(iLit16 dict)
csv2i_lfd dict f = f<$>highlow<*>fill<*>updateDisable<*>condition<%>reg<.>(iLit16 dict)
csv3_cd f = f<$>carry<*>updateDisable<*>condition<%>reg<.>reg<.>reg
csv3_d f = f<$>updateDisable<*>condition<%>reg<.>reg<.>reg
lls, lrs, ars,
pop, push, disc, fetch,
movpf, movsf, movpt, movst,
- ldh, ldb, ldw, ldi,
+ ldh, ldb, ldw, ldi, ldil,
stw, sth, stb,
ldx, stx,
br, ret, call, reti,
ldh dict = ins "ldh" (csv2m dict) $ mformi 0x10
ldb dict = ins "ldb" (csv2m dict) $ mformi 0x12
ldi dict = ins "ldi" (csv2i_sl dict) $ lformi' 0x1a
+ldil dict = ins "ldil" (csv2i_sl' dict) $ lformi' 0x1a 0
stw dict = ins "stw" (csv2m dict) $ mformi 0x0f
sth dict = ins "sth" (csv2m dict) $ mformi 0x11
stb dict = ins "stb" (csv2m dict) $ mformi 0x13
aformi' opcd s c d cond rd ra = aformi opcd s c d cond rd ra 0
lformi opcd hl f d cond rd imm = pack [(cond,28),(opcd,23),(rd,19),(imm,3),(hl,2),(f,1),(d,0)]
-lformi' opcd s hl cond rd imm = lformi opcd s hl 0 cond rd imm
+lformi' opcd hl s cond rd imm = lformi opcd s hl 0 cond rd imm
lformi'not opcd cond rd = lformi opcd 0 1 0 cond rd 0xefffffff
mformi opcd cond rd disp ra = pack [(cond,28),(opcd,23),(rd,19),(ra,15),(disp,0)]
repeat <- try (do {size <- many1 $ noneOf "\n;,"; char ','; return $ size}) <|> return "1"
-- TODO: atm 32bit imm only
code <- many1 $ noneOf "\n;"
- -- TODO: this is quite ugly here :/
- let (Right val) = parse (parseConst d) "" code
- let (Right r) = parse (parseConst d) "" repeat
+ let val = case parse (parseConst d) "" code of
+ Right v -> v
+ Left err -> error $ show err
+ let r = case parse (parseConst d) "" repeat of
+ Right v -> v
+ Left err -> error $ show err
comment <- try(parseComment) <|> parseMySpaces
return $ DTF_Fill r val (fill ++ (if repeat == "1" then "" else repeat) ++ code) l comment