@@ -110,11 +110,21 @@ readHex = sum . zipWith (*) [1,16..] . reverse . ys
110110-- hex = do { string "0x"; xs <- some (sat (`elem` (['0'..'9']++['a'..'f']) . toLower)); return (readHex xs)}
111111-- bin = do { string "0b"; nat }
112112
113- addr :: Parser Addr
114- addr = (Addr . fromIntegral <$> do { char ' M' ; space; char ' [' ; space; n <- nat; space; char ' ]' ; space; return n })
115- <|> Addr . fromIntegral <$> nat
113+ -- TODO: switch with addr, change addraddr to mememem
114+ -- mem = Addr . fromIntegral <$> nat
116115 -- <|> Addr . fromIntegral <$> hex
117116
117+ addr :: Parser Addr
118+ addr = do char ' M'
119+ space
120+ char ' ['
121+ space
122+ n <- nat
123+ space
124+ char ' ]'
125+ space
126+ return (Addr . fromIntegral $ n)
127+
118128addraddr :: Parser AddrAddr
119129addraddr = AddrAddr . fromIntegral <$> nat
120130
@@ -130,17 +140,18 @@ ioBus = do b <- upperLowerToken
130140newline :: Parser Char
131141newline = do { space; char ' \n ' }
132142
143+ noop , add , sub , nott , andd , cmp , lb , lbi , sb , sbi , inn , ja , j , jeq , jne , ds :: Parser Opcode
133144noop = return NOOP
134145add = do { r <- reg; space; char ' ,' ; space; ADD r <$> addr; }
135146sub = do { r <- reg; space; char ' ,' ; space; SUB r <$> addr; }
136- nott = NOT <$> reg
137- andd = do { r <- reg; space; char ' ,' ; space; AND r <$> addr; }
147+ nott = NOT <$> reg
148+ andd = do { r <- reg; space; char ' ,' ; space; AND r <$> addr; }
138149cmp = do { r <- reg; space; char ' ,' ; space; CMP r <$> addr; }
139150lb = do { r <- reg; space; char ' ,' ; space; LB r <$> addr; }
140151lbi = do { r <- reg; space; char ' ,' ; space; LBI r <$> addraddr; }
141152sb = do { a <- addr; space; char ' ,' ; space; SB a <$> reg; }
142153sbi = do { a <- addraddr; space; char ' ,' ; SBI a <$> reg; }
143- inn = do { a <- addr; space; char ' ,' ; IN a <$> ioBus; }
154+ inn = do { a <- addr; space; char ' ,' ; IN a <$> ioBus; }
144155ja = JA <$> addr
145156j = J <$> offset
146157jeq = JEQ <$> offset
0 commit comments