class Cmd(object):
    def __init__(self):
        self.cache = Cache()

    def get_address(self, statement):
        address = raw_input("What address would you like {}?\n".format(statement))
        return address

    def get_action(self):
        action = raw_input("(R)ead, (W)rite, or (D)isplay Cache?\n")
        if action is '':
            action = 'q'
        return action.lower()[0]

    def read_address(self, address):
        result = self.cache.read_address(address)
        print "At that byte there is the value {0:X} ({1})".format(result[0],
                                                                   result[1])
        return

    def write_data(self, address):
        datum = raw_input("What datum would you like to write at that address?\n")
        datum = int(datum, 16)
        result = self.cache.write_address(address, datum)
        print ("Value {:X} has been written to address {:X}. ({})".format(
            datum,
            address,
            result))
        return

    def display_cache(self):
        print str(self.cache)
        return

    def run(self):
        while True:
            action = self.get_action()
            if action == "r":
                address = int(self.get_address("read"), 16)
                self.read_address(address)
            elif action == "w":
                address = int(self.get_address("to write to"), 16)
                self.write_data(address)
            elif action == "d":
                self.display_cache()
            else:
                break
        return