c++/rgb-assembler/commands/GotoCompare.h
author František Kučera <franta-hg@frantovo.cz>
Mon, 25 Dec 2017 01:27:44 +0100
changeset 33 ff150572e8c0
parent 31 b997cbf9e30b
permissions -rw-r--r--
memory: rename, refactor
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@31
    30
	void process(Memory &memory) override {
franta-hg@31
    31
		address_t aa = memory.read<address_t>();
franta-hg@31
    32
		address_t ab = memory.read<address_t>();
franta-hg@31
    33
		address_t eq = memory.read<address_t>();
franta-hg@31
    34
		address_t gt = memory.read<address_t>();
franta-hg@31
    35
		address_t lt = memory.read<address_t>();
franta-hg@25
    36
franta-hg@33
    37
		octet_t a = memory.read<octet_t>(aa);
franta-hg@33
    38
		octet_t b = memory.read<octet_t>(ab);
franta-hg@31
    39
franta-hg@31
    40
		address_t index;
franta-hg@25
    41
franta-hg@25
    42
		if (a == b) index = eq;
franta-hg@25
    43
		else if (a > b) index = gt;
franta-hg@25
    44
		else index = lt;
franta-hg@25
    45
franta-hg@33
    46
		memory.setAddress(index);
franta-hg@31
    47
franta-hg@25
    48
		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
    49
	}
franta-hg@20
    50
};
franta-hg@20
    51
franta-hg@20
    52
}