## Copyright (C) 2016 Jeremiah Orians ## This file is part of stage0. ## ## stage0 is free software: you an 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 0E DEFINE ADDUI 0F DEFINE SUBI 10 DEFINE SUBUI 11 DEFINE CMPI 12 DEFINE LOAD 13 DEFINE LOAD8 14 DEFINE LOADU8 15 DEFINE LOAD16 16 DEFINE LOADU16 17 DEFINE LOAD32 18 DEFINE LOADU32 19 DEFINE CMPUI 1F DEFINE STORE 20 DEFINE STORE8 21 DEFINE STORE16 22 DEFINE STORE32 23 DEFINE ANDI B0 DEFINE ORI B1 DEFINE XORI B2 DEFINE NANDI B3 DEFINE NORI B4 DEFINE XNORI B5 DEFINE CMPJUMPI.G C0 DEFINE CMPJUMPI.GE C1 DEFINE CMPJUMPI.E C2 DEFINE CMPJUMPI.NE C3 DEFINE CMPJUMPI.LE C4 DEFINE CMPJUMPI.L C5 DEFINE CMPJUMPUI.G D0 DEFINE CMPJUMPUI.GE D1 DEFINE CMPJUMPUI.LE D4 DEFINE CMPJUMPUI.L D5 # 1OPI Group DEFINE JUMP.C 2C0 DEFINE JUMP.B 2C1 DEFINE JUMP.O 2C2 DEFINE JUMP.G 2C3 DEFINE JUMP.GE 2C4 DEFINE JUMP.E 2C5 DEFINE JUMP.NE 2C6 DEFINE JUMP.LE 2C7 DEFINE JUMP.L 2C8 DEFINE JUMP.Z 2C9 DEFINE JUMP.NZ 2CA DEFINE JUMP.P 2CB DEFINE JUMP.NP 2CC DEFINE CALLI 2D0 DEFINE LOADI 2D1 DEFINE LOADUI 2D2 DEFINE SALI 2D3 DEFINE SARI 2D4 DEFINE SL0I 2D5 DEFINE SR0I 2D6 DEFINE SL1I 2D7 DEFINE SR1I 2D8 DEFINE LOADR 2E0 DEFINE LOADR8 2E1 DEFINE LOADRU8 2E2 DEFINE LOADR16 2E3 DEFINE LOADRU16 2E4 DEFINE LOADR32 2E5 DEFINE LOADRU32 2E6 DEFINE STORER 2F0 DEFINE STORER8 2F1 DEFINE STORER16 2F2 DEFINE STORER32 2F3 DEFINE CMPSKIPI.G A00 DEFINE CMPSKIPI.GE A01 DEFINE CMPSKIPI.E A02 DEFINE CMPSKIPI.NE A03 DEFINE CMPSKIPI.LE A04 DEFINE CMPSKIPI.L A05 DEFINE CMPSKIPUI.G A10 DEFINE CMPSKIPUI.GE A11 DEFINE CMPSKIPUI.LE A14 DEFINE CMPSKIPUI.L A15 # 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 # 0OP Group DEFINE NOP 00000000 DEFINE HALT FFFFFFFF