## 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 . #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 R13 D DEFINE R14 E DEFINE R15 F # 4OP Integer Group DEFINE ADD.CI 0100 DEFINE ADD.CO 0101 DEFINE ADD.CIO 0102 DEFINE ADDU.CI 0103 DEFINE ADDU.CO 0104 DEFINE ADDU.CIO 0105 DEFINE SUB.BI 0106 DEFINE SUB.BO 0107 DEFINE SUB.BIO 0108 DEFINE SUBU.BI 0109 DEFINE SUBU.BO 010A DEFINE SUBU.BIO 010B DEFINE MULTIPLY 010C DEFINE MULTIPLYU 010D DEFINE DIVIDE 010E DEFINE DIVIDEU 010F DEFINE MUX 0110 DEFINE NMUX 0111 DEFINE SORT 0112 DEFINE SORTU 0113 # 3OP Integer Group DEFINE ADD 05000 DEFINE ADDU 05001 DEFINE SUB 05002 DEFINE SUBU 05003 DEFINE CMP 05004 DEFINE CMPU 05005 DEFINE MUL 05006 DEFINE MULH 05007 DEFINE MULU 05008 DEFINE MULUH 05009 DEFINE DIV 0500A DEFINE MOD 0500B DEFINE DIVU 0500C DEFINE MODU 0500D DEFINE MAX 05010 DEFINE MAXU 05011 DEFINE MIN 05012 DEFINE MINU 05013 DEFINE AND 05020 DEFINE OR 05021 DEFINE XOR 05022 DEFINE NAND 05023 DEFINE NOR 05024 DEFINE XNOR 05025 DEFINE MPQ 05026 DEFINE LPQ 05027 DEFINE CPQ 05028 DEFINE BPQ 05029 DEFINE SAL 05030 DEFINE SAR 05031 DEFINE SL0 05032 DEFINE SR0 05033 DEFINE SL1 05034 DEFINE SR1 05035 DEFINE ROL 05036 DEFINE ROR 05037 DEFINE LOADX 05038 DEFINE LOADX8 05039 DEFINE LOADXU8 0503A DEFINE LOADX16 0503B DEFINE LOADXU16 0503C DEFINE LOADX32 0503D DEFINE LOADXU32 0503E DEFINE STOREX 05048 DEFINE STOREX8 05049 DEFINE STOREX16 0504A DEFINE STOREX32 0504B DEFINE CMPJUMP.G 05050 DEFINE CMPJUMP.GE 05051 DEFINE CMPJUMP.E 05052 DEFINE CMPJUMP.NE 05053 DEFINE CMPJUMP.LE 05054 DEFINE CMPJUMP.L 05055 DEFINE CMPJUMPU.G 05060 DEFINE CMPJUMPU.GE 05061 DEFINE CMPJUMPU.LE 05064 DEFINE CMPJUMPU.L 05065 # 2OP Integer Group DEFINE NEG 090000 DEFINE ABS 090001 DEFINE NABS 090002 DEFINE SWAP 090003 DEFINE COPY 090004 DEFINE MOVE 090005 DEFINE NOT 090006 DEFINE BRANCH 090100 DEFINE CALL 090101 DEFINE PUSHR 090200 DEFINE PUSH8 090201 DEFINE PUSH16 090202 DEFINE PUSH32 090203 DEFINE POPR 090280 DEFINE POP8 090281 DEFINE POPU8 090282 DEFINE POP16 090283 DEFINE POPU16 090284 DEFINE POP32 090285 DEFINE POPU32 090286 DEFINE CMPSKIP.G 090300 DEFINE CMPSKIP.GE 090301 DEFINE CMPSKIP.E 090302 DEFINE CMPSKIP.NE 090303 DEFINE CMPSKIP.LE 090304 DEFINE CMPSKIP.L 090305 DEFINE CMPSKIPU.G 090380 DEFINE CMPSKIPU.GE 090381 DEFINE CMPSKIPU.LE 090384 DEFINE CMPSKIPU.L 090385 # 1OP Group DEFINE READPC 0D00000 DEFINE READSCID 0D00001 DEFINE FALSE 0D00002 DEFINE TRUE 0D00003 DEFINE JSR_COROUTINE 0D01000 DEFINE RET 0D01001 DEFINE PUSHPC 0D02000 DEFINE POPPC 0D02001 # 2OPI Group DEFINE ADDI E1000E DEFINE ADDUI E1000F DEFINE SUBI E10010 DEFINE SUBUI E10011 DEFINE CMPI E10012 DEFINE LOAD E10013 DEFINE LOAD8 E10014 DEFINE LOADU8 E10015 DEFINE LOAD16 E10016 DEFINE LOADU16 E10017 DEFINE LOAD32 E10018 DEFINE LOADU32 E10019 DEFINE CMPUI E1001F DEFINE STORE E10020 DEFINE STORE8 E10021 DEFINE STORE16 E10022 DEFINE STORE32 E10023 DEFINE ANDI E100B0 DEFINE ORI E100B1 DEFINE XORI E100B2 DEFINE NANDI E100B3 DEFINE NORI E100B4 DEFINE XNORI E100B5 DEFINE CMPJUMPI.G E100C0 DEFINE CMPJUMPI.GE E100C1 DEFINE CMPJUMPI.E E100C2 DEFINE CMPJUMPI.NE E100C3 DEFINE CMPJUMPI.LE E100C4 DEFINE CMPJUMPI.L E100C5 DEFINE CMPJUMPUI.G E100D0 DEFINE CMPJUMPUI.GE E100D1 DEFINE CMPJUMPUI.LE E100D4 DEFINE CMPJUMPUI.L E100D5 # 1OPI Group DEFINE JUMP.C E0002C0 DEFINE JUMP.B E0002C1 DEFINE JUMP.O E0002C2 DEFINE JUMP.G E0002C3 DEFINE JUMP.GE E0002C4 DEFINE JUMP.E E0002C5 DEFINE JUMP.NE E0002C6 DEFINE JUMP.LE E0002C7 DEFINE JUMP.L E0002C8 DEFINE JUMP.Z E0002C9 DEFINE JUMP.NZ E0002CA DEFINE JUMP.P E0002CB DEFINE JUMP.NP E0002CC DEFINE CALLI E0002D0 DEFINE LOADI E0002D1 DEFINE LOADUI E0002D2 DEFINE SALI E0002D3 DEFINE SARI E0002D4 DEFINE SL0I E0002D5 DEFINE SR0I E0002D6 DEFINE SL1I E0002D7 DEFINE SR1I E0002D8 DEFINE LOADR E0002E0 DEFINE LOADR8 E0002E1 DEFINE LOADRU8 E0002E2 DEFINE LOADR16 E0002E3 DEFINE LOADRU16 E0002E4 DEFINE LOADR32 E0002E5 DEFINE LOADRU32 E0002E6 DEFINE STORER E0002F0 DEFINE STORER8 E0002F1 DEFINE STORER16 E0002F2 DEFINE STORER32 E0002F3 DEFINE CMPSKIPI.G E000A00 DEFINE CMPSKIPI.GE E000A01 DEFINE CMPSKIPI.E E000A02 DEFINE CMPSKIPI.NE E000A03 DEFINE CMPSKIPI.LE E000A04 DEFINE CMPSKIPI.L E000A05 DEFINE CMPSKIPUI.G E000A10 DEFINE CMPSKIPUI.GE E000A11 DEFINE CMPSKIPUI.LE E000A14 DEFINE CMPSKIPUI.L E000A15 # 0OPI Group DEFINE JUMP 3C00 # HALCODE Group DEFINE FOPEN_READ 42100000 DEFINE FOPEN_WRITE 42100001 DEFINE FCLOSE 42100002 DEFINE REWIND 42100003 DEFINE FSEEK 42100004 DEFINE FGETC 42100100 DEFINE FPUTC 42100200 DEFINE HAL_MEM 42110000 # 0OP Group DEFINE NOP 00000000 DEFINE HALT FFFFFFFF