253 lines
4.9 KiB
Plaintext
253 lines
4.9 KiB
Plaintext
## 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 <http://www.gnu.org/licenses/>.
|
|
|
|
#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
|