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