c++/rgb-assembler/commands/IncrementDecrement.h
author František Kučera <franta-hg@frantovo.cz>
Sun, 24 Dec 2017 00:08:55 +0100
changeset 26 47ee91579133
parent 23 c++/rgb-assembler/commands/End.h@e85d2bfaff73
child 27 835bd4559e5c
permissions -rw-r--r--
INCREMENT and DECREMENT in class
franta-hg@20
     1
#pragma once
franta-hg@20
     2
franta-hg@20
     3
#include <wchar.h>
franta-hg@22
     4
#include <chrono>
franta-hg@22
     5
#include <thread>
franta-hg@20
     6
franta-hg@20
     7
#include "../Command.h"
franta-hg@23
     8
#include "../memory.h"
franta-hg@20
     9
franta-hg@22
    10
using namespace std;
franta-hg@22
    11
franta-hg@20
    12
namespace commands {
franta-hg@20
    13
franta-hg@26
    14
class IncrementDecrement : public Command {
franta-hg@20
    15
public:
franta-hg@20
    16
franta-hg@26
    17
	IncrementDecrement(const bool increment) {
franta-hg@26
    18
		this->increment = increment;
franta-hg@26
    19
	}
franta-hg@26
    20
franta-hg@20
    21
	void process(octet_t* memory, address_t& index) override {
franta-hg@26
    22
		address_t address = read<address_t>(memory, index);
franta-hg@26
    23
		address_t address_r = address;
franta-hg@26
    24
		address_t address_w = address_r;
franta-hg@26
    25
		octet_t value = read<octet_t>(memory, address_r);
franta-hg@26
    26
		value = increment ? value + 1 : value - 1;
franta-hg@26
    27
		write<octet_t>(memory, address_w, value);
franta-hg@26
    28
		wprintf(L"%sCREMENT %*d → %02X\n", (increment ? "IN" : "DE"), 5, address, value);
franta-hg@20
    29
	}
franta-hg@20
    30
private:
franta-hg@26
    31
	bool increment;
franta-hg@20
    32
franta-hg@20
    33
};
franta-hg@20
    34
franta-hg@20
    35
}