private ROM(String fileName) {
        this.fileName = fileName;

        buffer = ByteBuffer.allocate(4096);
        try {
            File file = new File(fileName);
            if(!file.isFile())
                throw new InvalidFilePathException("Not a valid file name: " + fileName);

            // checks if file is within memory limits
            FileInputStream fileInputStream = new FileInputStream(file);

            byte[] bytes = new byte[64];
            while(fileInputStream.read(bytes, 0, bytes.length) > 0)
                buffer.put(bytes);

            // switch byteBuffer to read mode
            buffer.flip();

            if(buffer.limit() >= (0xFFF - 0x200))
                throw new MemoryOutOfBoundsException("Program Out Of Memory Bounds: " + buffer.limit());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (InvalidFilePathException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MemoryOutOfBoundsException e) {
            e.printStackTrace();
        }
    }