campctf2023-chall-tis256

Zachtronics TIS100-inspired reversing challenge for CampCTF 2023
git clone https://git.sinitax.com/sinitax/campctf2023-chall-tis256
Log | Files | Refs | Submodules | README | sfeed.txt

decoder.asm (3561B)


      1tpu X0 Y0
      2	## ${ADDR_DECODER}
      3
      4	mov UP, DOWN
      5	mov UP, ACC
      6	mov UP, NIL
      7	mov UP, NIL
      8	sav
      9
     10	and 0b11100000
     11	jeq 0, b5op
     12	swp
     13	sav
     14
     15	and 0b11000000
     16	jeq 0b01000000, b2b3op
     17	swp
     18	sav
     19
     20	and 0b11100000
     21	jeq 0b11100000, b2op
     22	swp
     23	sav
     24
     25	jmp b2b2op
     26
     27b5op:
     28	swp
     29	sav
     30	and 0b11100000
     31	mov ACC, RIGHT
     32	swp
     33	and 0b00011111
     34	mov ACC, RIGHT
     35	jmp wait
     36
     37b2b3op:
     38	swp
     39	sav
     40	and 0b11100000
     41	mov ACC, RIGHT
     42	swp
     43	sav
     44	and 0b00011000
     45	shr 3
     46	mov ACC, RIGHT
     47	swp
     48	and 0b00000111
     49	mov ACC, RIGHT
     50	jmp wait
     51
     52b2b2op:
     53	swp
     54	sav
     55	and 0b11110000
     56	mov ACC, RIGHT
     57	swp
     58	sav
     59	and 0b00001100
     60	shr 2
     61	mov ACC, RIGHT
     62	swp
     63	and 0b00000011
     64	mov ACC, RIGHT
     65	jmp wait
     66
     67b2op:
     68	swp
     69	sav
     70	and 0b11111100
     71	mov ACC, RIGHT
     72	swp
     73	and 0b00000011
     74	mov ACC, RIGHT
     75
     76wait:
     77	mov UP, NIL
     78	mov UP, NIL
     79	mov UP, NIL
     80	mov UP, NIL
     81
     82	mov DOWN, RIGHT
     83	mov ${ADDR_DECODER}, RIGHT
     84	mov ${OP_ACK}, RIGHT
     85	mov ${OP_NIL}, RIGHT
     86	mov ${OP_NIL}, RIGHT
     87end
     88
     89tpu X0 Y1
     90	mov UP, UP
     91end
     92
     93tpu X1 Y0
     94	mov LEFT, ACC
     95
     96	jeq ${INST_JNZ}, inst_jnz
     97	jeq ${INST_SHL}, inst_shl
     98	jeq ${INST_SHR}, inst_shr
     99	jeq ${INST_MOV}, inst_mov
    100	jeq ${INST_SWP}, inst_swp
    101	jeq ${INST_ADD}, inst_add
    102	jeq ${INST_SUB}, inst_sub
    103	jeq ${INST_XOR}, inst_xor
    104	jeq ${INST_AND}, inst_and
    105	jeq ${INST_LDB}, inst_ldb
    106	jeq ${INST_STB}, inst_stb
    107	jeq ${INST_INP}, inst_inp
    108	jeq ${INST_OUT}, inst_out
    109	jeq ${INST_NOT}, inst_not
    110	jeq ${INST_JRE}, inst_jre
    111	jeq ${INST_INC}, inst_inc
    112	#jeq ${INST_DEC}, inst_dec
    113	${HLT}
    114
    115inst_jnz:
    116	mov ${ADDR_INST_JNZ}, UP
    117	mov ${ADDR_DECODER}, UP
    118	mov ${OP_NIL}, UP
    119	mov LEFT, UP
    120	mov ${OP_NIL}, UP
    121	jmp wait
    122
    123inst_shl:
    124	mov ${ADDR_INST_SHL}, UP
    125	mov ${ADDR_DECODER}, UP
    126	mov ${OP_NIL}, UP
    127	mov LEFT, UP
    128	mov LEFT, UP
    129	jmp wait
    130
    131inst_shr:
    132	mov ${ADDR_INST_SHR}, UP
    133	mov ${ADDR_DECODER}, UP
    134	mov ${OP_NIL}, UP
    135	mov LEFT, UP
    136	mov LEFT, UP
    137	jmp wait
    138
    139inst_mov:
    140	mov ${ADDR_INST_MOV}, UP
    141	mov ${ADDR_DECODER}, UP
    142	mov ${OP_NIL}, UP
    143	mov LEFT, UP
    144	mov LEFT, UP
    145	jmp wait
    146
    147inst_swp:
    148	mov ${ADDR_INST_SWP}, UP
    149	mov ${ADDR_DECODER}, UP
    150	mov ${OP_NIL}, UP
    151	mov LEFT, UP
    152	mov LEFT, UP
    153	jmp wait
    154
    155inst_add:
    156	mov ${ADDR_INST_ADD}, UP
    157	mov ${ADDR_DECODER}, UP
    158	mov ${OP_NIL}, UP
    159	mov LEFT, UP
    160	mov LEFT, UP
    161	jmp wait
    162
    163inst_sub:
    164	mov ${ADDR_INST_SUB}, UP
    165	mov ${ADDR_DECODER}, UP
    166	mov ${OP_NIL}, UP
    167	mov LEFT, UP
    168	mov LEFT, UP
    169	jmp wait
    170
    171inst_xor:
    172	mov ${ADDR_INST_XOR}, UP
    173	mov ${ADDR_DECODER}, UP
    174	mov ${OP_NIL}, UP
    175	mov LEFT, UP
    176	mov LEFT, UP
    177	jmp wait
    178
    179inst_and:
    180	mov ${ADDR_INST_AND}, UP
    181	mov ${ADDR_DECODER}, UP
    182	mov ${OP_NIL}, UP
    183	mov LEFT, UP
    184	mov LEFT, UP
    185	jmp wait
    186
    187inst_ldb:
    188	mov ${ADDR_INST_LDB}, UP
    189	mov ${ADDR_DECODER}, UP
    190	mov ${OP_NIL}, UP
    191	mov LEFT, UP
    192	mov LEFT, UP
    193	jmp wait
    194
    195inst_stb:
    196	mov ${ADDR_INST_STB}, UP
    197	mov ${ADDR_DECODER}, UP
    198	mov ${OP_NIL}, UP
    199	mov LEFT, UP
    200	mov LEFT, UP
    201	jmp wait
    202
    203inst_inp:
    204	mov ${ADDR_INST_INP}, UP
    205	mov ${ADDR_DECODER}, UP
    206	mov ${OP_NIL}, UP
    207	mov LEFT, UP
    208	mov ${OP_NIL}, UP
    209	jmp wait
    210
    211inst_out:
    212	mov ${ADDR_INST_OUT}, UP
    213	mov ${ADDR_DECODER}, UP
    214	mov ${OP_NIL}, UP
    215	mov LEFT, UP
    216	mov ${OP_NIL}, UP
    217	jmp wait
    218
    219inst_not:
    220	mov ${ADDR_INST_NOT}, UP
    221	mov ${ADDR_DECODER}, UP
    222	mov ${OP_NIL}, UP
    223	mov LEFT, UP
    224	mov ${OP_NIL}, UP
    225	jmp wait
    226
    227inst_jre:
    228	mov ${ADDR_INST_JRE}, UP
    229	mov ${ADDR_DECODER}, UP
    230	mov ${OP_NIL}, UP
    231	mov LEFT, UP
    232	mov ${OP_NIL}, UP
    233	jmp wait
    234
    235inst_inc:
    236	mov ${ADDR_INST_INC}, UP
    237	mov ${ADDR_DECODER}, UP
    238	mov ${OP_NIL}, UP
    239	mov LEFT, UP
    240	mov ${OP_NIL}, UP
    241	jmp wait
    242
    243#inst_dec:
    244#	mov ${ADDR_INST_DEC}, UP
    245#	mov ${ADDR_DECODER}, UP
    246#	mov ${OP_NIL}, UP
    247#	mov LEFT, UP
    248#	mov ${OP_NIL}, UP
    249#	jmp wait
    250
    251wait:
    252	mov LEFT, UP
    253	mov LEFT, UP
    254	mov LEFT, UP
    255	mov LEFT, UP
    256	mov LEFT, UP
    257end