;
; nono
; Copyright (C) 2020 nono project
; Licensed under nono-license.txt
;

; 一応雰囲気が分かる程度に記号を使い分けているが、処理としては
; 全部 0/1 にマッピングするだけなのであまり気にしなくてよい。
; n .. 汎用で 0/1 を取るビット
; D .. Destination Register
; S .. Source1 Register
; s .. Source2 Register
; z .. 0で予約されているが、実際には 88100 がデコードしないビット

000000_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	xmem_bu_imm
000001_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	xmem_w_imm
000010_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	ld_hu_imm
000011_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	ld_bu_imm
000100_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	ld_d_imm
000101_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	ld_w_imm
000110_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	ld_h_imm
000111_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	ld_b_imm
001000_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	st_d_imm
001001_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	st_w_imm
001010_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	st_h_imm
001011_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	st_b_imm
001100_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	lda_d_imm
001101_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	lda_w_imm
001110_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	lda_h_imm
001111_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	lda_b_imm

010000_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	and_imm
010001_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	and_u_imm
010010_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	mask_imm
010011_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	mask_u_imm
010100_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	xor_imm
010101_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	xor_u_imm
010110_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	or_imm
010111_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	or_u_imm
011000_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	addu_imm
011001_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	subu_imm
011010_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	divu_imm
011011_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	mul_imm
011100_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	add_imm
011101_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	sub_imm
011110_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	div_imm
011111_DDDDDSSSSS_nnnnnn_nnnnnnnnnn	cmp_imm

100000_DDDDDzzzzz_01000n_nnnnnzzzzz	ldcr
100000_DDDDDzzzzz_01001n_nnnnnzzzzz	fldcr
100000_zzzzzSSSSS_10000n_nnnnnsssss	stcr
100000_zzzzzSSSSS_10001n_nnnnnsssss	fstcr
100000_DDDDDSSSSS_11000n_nnnnnsssss	xcr
100000_DDDDDSSSSS_11001n_nnnnnsssss	fxcr

100001_DDDDDSSSSS_00000n_nnnnnsssss	fmul
100001_DDDDD00000_001000_000nnsssss	flt
100001_DDDDDSSSSS_00101n_nnnnnsssss	fadd
100001_DDDDDSSSSS_00110n_nnnnnsssss	fsub
100001_DDDDDSSSSS_00111n_nnnnnsssss	fcmp
100001_DDDDD00000_010010_0nn00sssss	int
100001_DDDDD00000_010100_0nn00sssss	nint
100001_DDDDD00000_010110_0nn00sssss	trnc
100001_DDDDDSSSSS_01110n_nnnnnsssss	fdiv

110000_nnnnnnnnnn_nnnnnn_nnnnnnnnnn	br
110001_nnnnnnnnnn_nnnnnn_nnnnnnnnnn	br_n
110010_nnnnnnnnnn_nnnnnn_nnnnnnnnnn	bsr
110011_nnnnnnnnnn_nnnnnn_nnnnnnnnnn	bsr_n
110100_nnnnnSSSSS_nnnnnn_nnnnnnnnnn	bb0
110101_nnnnnSSSSS_nnnnnn_nnnnnnnnnn	bb0_n
110110_nnnnnSSSSS_nnnnnn_nnnnnnnnnn	bb1
110111_nnnnnSSSSS_nnnnnn_nnnnnnnnnn	bb1_n
111010_MMMMMSSSSS_nnnnnn_nnnnnnnnnn	bcnd
111011_MMMMMSSSSS_nnnnnn_nnnnnnnnnn	bcnd_n

111100_DDDDDSSSSS_100000_wwwwwooooo	clr_1
111100_DDDDDSSSSS_100010_wwwwwooooo	set_1
111100_DDDDDSSSSS_100100_wwwwwooooo	ext_1
111100_DDDDDSSSSS_100110_wwwwwooooo	extu_1
111100_DDDDDSSSSS_101000_wwwwwooooo	mak_1
111100_DDDDDSSSSS_101010_zzzzzooooo	rot_1

111100_bbbbbSSSSS_110100_0vvvvvvvvv	tb0
111100_bbbbbSSSSS_110110_0vvvvvvvvv	tb1
111100_MMMMMSSSSS_111010_0vvvvvvvvv	tcnd

111101_DDDDDSSSSS_000000_xU000sssss	xmem_bu
111101_DDDDDSSSSS_000001_xU000sssss	xmem_w
111101_DDDDDSSSSS_000010_xU000sssss	ld_hu
111101_DDDDDSSSSS_000011_xU000sssss	ld_bu
111101_DDDDDSSSSS_000100_xU000sssss	ld_d
111101_DDDDDSSSSS_000101_xU000sssss	ld_w
111101_DDDDDSSSSS_000110_xU000sssss	ld_h
111101_DDDDDSSSSS_000111_xU000sssss	ld_b
111101_DDDDDSSSSS_001000_xU000sssss	st_d
111101_DDDDDSSSSS_001001_xU000sssss	st_w
111101_DDDDDSSSSS_001010_xU000sssss	st_h
111101_DDDDDSSSSS_001011_xU000sssss	st_b
111101_DDDDDSSSSS_001100_xU000sssss	lda_d
111101_DDDDDSSSSS_001101_xU000sssss	lda_w
111101_DDDDDSSSSS_001110_xU000sssss	lda_h
111101_DDDDDSSSSS_001111_xU000sssss	lda_b

111101_DDDDDSSSSS_010000_00000sssss	and
111101_DDDDDSSSSS_010001_00000sssss	and_c
111101_DDDDDSSSSS_010100_00000sssss	xor
111101_DDDDDSSSSS_010101_00000sssss	xor_c
111101_DDDDDSSSSS_010110_00000sssss	or
111101_DDDDDSSSSS_010111_00000sssss	or_c
111101_DDDDDSSSSS_011000_nn000sssss	addu
111101_DDDDDSSSSS_011001_nn000sssss	subu
111101_DDDDDSSSSS_011010_zz000sssss	divu
111101_DDDDDSSSSS_011011_zz000sssss	mul
111101_DDDDDSSSSS_011100_nn000sssss	add
111101_DDDDDSSSSS_011101_nn000sssss	sub
111101_DDDDDSSSSS_011110_zz000sssss	div
111101_DDDDDSSSSS_011111_zz000sssss	cmp

111101_DDDDDSSSSS_100000_00000sssss	clr_2
111101_DDDDDSSSSS_100010_00000sssss	set_2
111101_DDDDDSSSSS_100100_00000sssss	ext_2
111101_DDDDDSSSSS_100110_00000sssss	extu_2
111101_DDDDDSSSSS_101000_00000sssss	mak_2
111101_DDDDDSSSSS_101010_00000sssss	rot_2

111101_zzzzzzzzzz_110000_00000sssss	jmp
111101_zzzzzzzzzz_110001_00000sssss	jmp_n
111101_zzzzzzzzzz_110010_00000sssss	jsr
111101_zzzzzzzzzz_110011_00000sssss	jsr_n

111101_DDDDDzzzzz_111010_00000sssss	ff1
111101_DDDDDzzzzz_111011_00000sssss	ff0

111101_zzzzzzzzzz_111111_0000000000	rte
111101_zzzzzSSSSS_111110_00000SSSSS	tbnd_1
111110_zzzzzSSSSS_nnnnnn_nnnnnnnnnn	tbnd_2

;11111_zzzzzzzzzz_000000_0vvvvvvvvv (ブランチ履歴での例外記録用)
111111_DDDDDSSSSS_000001_nnnnnnnnnn	doscall
