#include "zdevice_exc.h"

zuint zmemory::store(const zuchar* data, const zuint& dataaddr, const zuint& datalen)
	 throw(zmem_wr_exception) {
	if (dataaddr + datalen <= 1024) {
		memcpy (memdevice+dataaddr, data, datalen);
		return datalen;
	} else {
		if (dataaddr <= 1023) {
			memcpy (memdevice+dataaddr, data, 1024 - dataaddr);
		}
		throw zmem_wr_exception(1024 - dataaddr);
	}
}

zuint zmemory::read(zuchar * data, const zuint& dataaddr, const zuint& datalen)
	throw(zmem_rd_exception) {
	zuint dataread;
	if (dataaddr + datalen <= 1024) {
		memcpy (data, memdevice+dataaddr, datalen);
		return datalen;
	} else {
		if (dataaddr <= 1023) {
			dataread = 1024 - dataaddr;
			memcpy (data, memdevice+dataaddr, 1024 - dataaddr);
		}
		throw zmem_rd_exception(1024 - dataaddr);
	}
}
