## Copyright (C) 2016 Jeremiah Orians ## This file is part of stage0. ## ## stage0 is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## stage0 is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with stage0. If not, see . # M2-Planet standards DEFINE NOP 00000000 # Registers DEFINE R0 0 DEFINE R1 1 DEFINE R2 2 DEFINE R3 3 DEFINE R4 4 DEFINE R5 5 DEFINE R6 6 DEFINE R7 7 DEFINE R8 8 DEFINE R9 9 DEFINE R10 A DEFINE R11 B DEFINE R12 C DEFINE BP C DEFINE R13 D DEFINE SP D DEFINE R14 E DEFINE LR E DEFINE R15 F DEFINE PC F # Register masks for push/pop16 DEFINE {R0} 0100 DEFINE {R1} 0200 DEFINE {R2} 0400 DEFINE {R3} 0800 DEFINE {R4} 1000 DEFINE {R11} 0008 DEFINE {BP} 0010 DEFINE {LR} 0040 # Bitshift constants DEFINE NO_SHIFT 0 DEFINE LEFT 1 DEFINE RIGHT 3 DEFINE ARITH_RIGHT 5 # LOAD/STORE DEFINE MEMORY E5 DEFINE STORE32 08 DEFINE STORE8 0C DEFINE LOAD32 09 DEFINE LOAD8 0D DEFINE LOADI8_ALWAYS 0A0E3 DEFINE LOADI8_G 0A0C3 DEFINE LOADI8_GE 0A0A3 DEFINE LOADI8_EQUAL 0A003 DEFINE LOADI8_NE 0A013 DEFINE LOADI8_LE 0A0D3 DEFINE LOADI8_L 0A0B3 # JUMP/BRANCH DEFINE JUMP_ALWAYS EA DEFINE JUMP_EQUAL 0A DEFINE JUMP_NE 1A DEFINE CALL_ALWAYS EB DEFINE CALL_REG_ALWAYS FF2FE1 DEFINE RETURN FF2FE1 # Data movement DEFINE MOVE_ALWAYS A0E1 DEFINE MVN_ALWAYS 0E0E1 DEFINE MVN_LT 0E0B1 DEFINE MVNI8_EQUAL 0E003 DEFINE PUSH_ALWAYS 2DE9 DEFINE POP_ALWAYS BDE8 # Arithmetic/logic DEFINE AUX_ALWAYS E1 DEFINE IMM_ALWAYS E3 DEFINE ARITH_ALWAYS E2 DEFINE ARITH_GE A2 DEFINE ARITH_LT B2 DEFINE ARITH_NE 12 DEFINE ARITH2_ALWAYS E0 DEFINE ARITH2_GE A0 DEFINE ADC 0A DEFINE ADCS 0B DEFINE ADD 08 DEFINE ADDS 09 DEFINE AND 00 DEFINE CMP 005 DEFINE CMPI8 005 DEFINE MUL 0 DEFINE MULS 1 DEFINE OR 08 DEFINE SHIFT A0 DEFINE SUB 04 DEFINE RSUB 06 DEFINE XOR 02 # SYSCALL DEFINE SYSCALL_ALWAYS 000000EF