changed mm_read_buffer to mm_read_io
finished skeleton implementation based on FSM