c++/rgb-assembler/commands/GotoCompare.h
author František Kučera <franta-hg@frantovo.cz>
Sun, 24 Dec 2017 00:30:54 +0100
changeset 29 10d6964e7b4a
parent 25 5ce09de7f9b7
child 31 b997cbf9e30b
permissions -rw-r--r--
license: GNU GPLv3+
franta-hg@29
     1
/**
franta-hg@29
     2
 * RGB assembler
franta-hg@29
     3
 * Copyright © 2017 František Kučera (frantovo.cz)
franta-hg@29
     4
 *
franta-hg@29
     5
 * This program is free software: you can redistribute it and/or modify
franta-hg@29
     6
 * it under the terms of the GNU General Public License as published by
franta-hg@29
     7
 * the Free Software Foundation, either version 3 of the License, or
franta-hg@29
     8
 * (at your option) any later version.
franta-hg@29
     9
 *
franta-hg@29
    10
 * This program is distributed in the hope that it will be useful,
franta-hg@29
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
franta-hg@29
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
franta-hg@29
    13
 * GNU General Public License for more details.
franta-hg@29
    14
 *
franta-hg@29
    15
 * You should have received a copy of the GNU General Public License
franta-hg@29
    16
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
franta-hg@29
    17
 */
franta-hg@29
    18
franta-hg@20
    19
#pragma once
franta-hg@20
    20
franta-hg@20
    21
#include <wchar.h>
franta-hg@20
    22
franta-hg@20
    23
#include "../Command.h"
franta-hg@20
    24
franta-hg@20
    25
namespace commands {
franta-hg@20
    26
franta-hg@25
    27
class GotoCompare : public Command {
franta-hg@20
    28
public:
franta-hg@20
    29
franta-hg@20
    30
	void process(octet_t* memory, address_t& index) override {
franta-hg@25
    31
		address_t aa = read<address_t>(memory, index);
franta-hg@25
    32
		address_t ab = read<address_t>(memory, index);
franta-hg@25
    33
		address_t eq = read<address_t>(memory, index);
franta-hg@25
    34
		address_t gt = read<address_t>(memory, index);
franta-hg@25
    35
		address_t lt = read<address_t>(memory, index);
franta-hg@25
    36
franta-hg@25
    37
		octet_t a = read<octet_t>(memory, aa);
franta-hg@25
    38
		octet_t b = read<octet_t>(memory, ab);
franta-hg@25
    39
franta-hg@25
    40
		if (a == b) index = eq;
franta-hg@25
    41
		else if (a > b) index = gt;
franta-hg@25
    42
		else index = lt;
franta-hg@25
    43
franta-hg@25
    44
		wprintf(L"GOTO COMPARE  a = %02X, b = %02X, eq = %d, gt = %d, lt = %d → %d\n", a, b, eq, gt, lt, index);
franta-hg@20
    45
	}
franta-hg@20
    46
private:
franta-hg@20
    47
franta-hg@20
    48
};
franta-hg@20
    49
franta-hg@20
    50
}