c++/rgb-assembler/commands/IncrementDecrement.h
changeset 31 b997cbf9e30b
parent 29 10d6964e7b4a
child 32 78c4d6b53499
     1.1 --- a/c++/rgb-assembler/commands/IncrementDecrement.h	Sun Dec 24 00:47:34 2017 +0100
     1.2 +++ b/c++/rgb-assembler/commands/IncrementDecrement.h	Mon Dec 25 00:24:07 2017 +0100
     1.3 @@ -37,13 +37,16 @@
     1.4  		this->change = change;
     1.5  	}
     1.6  
     1.7 -	void process(octet_t* memory, address_t& index) override {
     1.8 -		address_t address = read<address_t>(memory, index);
     1.9 -		address_t address_r = address;
    1.10 -		address_t address_w = address_r;
    1.11 -		octet_t value = read<octet_t>(memory, address_r);
    1.12 +	void process(Memory &memory) override {
    1.13 +		address_t address = memory.read<address_t>();
    1.14 +		address_t originalAddress = memory.getIndex();
    1.15 +		// TODO: add to Memory methods read(address_t) and write(address_t, T)
    1.16 +		memory.setIndex(address);
    1.17 +		octet_t value = memory.read<octet_t>();
    1.18  		value = increment ? value + change : value - change;
    1.19 -		write<octet_t>(memory, address_w, value);
    1.20 +		memory.setIndex(address);
    1.21 +		memory.write<octet_t>(value);
    1.22 +		memory.setIndex(originalAddress);
    1.23  		wprintf(L"%sCREMENT %*d → %02X\n", (increment ? "IN" : "DE"), 5, address, value);
    1.24  	}
    1.25  private: