franta-hg@29: /**
franta-hg@29: * RGB assembler
franta-hg@29: * Copyright © 2017 František Kučera (frantovo.cz)
franta-hg@29: *
franta-hg@29: * This program is free software: you can redistribute it and/or modify
franta-hg@29: * it under the terms of the GNU General Public License as published by
franta-hg@29: * the Free Software Foundation, either version 3 of the License, or
franta-hg@29: * (at your option) any later version.
franta-hg@29: *
franta-hg@29: * This program is distributed in the hope that it will be useful,
franta-hg@29: * but WITHOUT ANY WARRANTY; without even the implied warranty of
franta-hg@29: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
franta-hg@29: * GNU General Public License for more details.
franta-hg@29: *
franta-hg@29: * You should have received a copy of the GNU General Public License
franta-hg@29: * along with this program. If not, see .
franta-hg@29: */
franta-hg@29:
franta-hg@20: #pragma once
franta-hg@20:
franta-hg@20: #include
franta-hg@22: #include
franta-hg@22: #include
franta-hg@20:
franta-hg@20: #include "../Command.h"
franta-hg@32: #include "../Memory.h"
franta-hg@20:
franta-hg@22: using namespace std;
franta-hg@22:
franta-hg@20: namespace commands {
franta-hg@20:
franta-hg@26: class IncrementDecrement : public Command {
franta-hg@20: public:
franta-hg@20:
franta-hg@27: IncrementDecrement(const bool increment, octet_t change) {
franta-hg@26: this->increment = increment;
franta-hg@27: this->change = change;
franta-hg@26: }
franta-hg@26:
franta-hg@31: void process(Memory &memory) override {
franta-hg@31: address_t address = memory.read();
franta-hg@33: octet_t value = memory.read(address);
franta-hg@27: value = increment ? value + change : value - change;
franta-hg@33: memory.write(address, value);
franta-hg@26: wprintf(L"%sCREMENT %*d → %02X\n", (increment ? "IN" : "DE"), 5, address, value);
franta-hg@20: }
franta-hg@20: private:
franta-hg@26: bool increment;
franta-hg@27: octet_t change;
franta-hg@20:
franta-hg@20: };
franta-hg@20:
franta-hg@20: }