254 lines
5.2 KiB
Plaintext
254 lines
5.2 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 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
|