~maddie/custom-processor-specification

ref: 6036dd922cc4ce59908747d0dbc0b65ec9879c10 custom-processor-specification/processor_spec_second_draft.txt -rw-r--r-- 2.2 KiB
6036dd92Madeline Cronin Initial Commit a month ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
16 bit instructions, variable length
each additional 16 bit value represents either a register or immediate value, any register indices are wrapped mod 32
32 total registers, incl. program counter, stack pointer, and disk index
index 0 is reserved for passing data in interrupts, pc, sp, and disk index are index 31, 30, and 29 respectively
16 bit address space for ram, dedicated vram accessed by separate instructions, also 64Kib, for a 256x256 B/W display
32 bit address space for disk, split into 64Kib blocks indexed by register - 4GB is definitely too much for a test project, but the capability can exist for the sake of it.

bits 1-4 determine the conditions upon which the command is executed
0xxx = flag 1 unchecked
x0xx = flag 2 unchecked
1x0x = flag 1 is 0
1x1x = flag 1 is 1
x1x0 = flag 2 is 0
x1x1 = flag 2 is 1
first 2 bits are activations, second 2 bits are conditions


bits 5-8 determine the instruction category
0000 = halt
0001 = arithmetic
0010 = logical
0011 = condition check
0100 = control flow
0101 = memory access


bits 9-14 determine the specific instruction

arithmetic: - 2 REG IN, 1 REG OUT on all
xx00 = addition
xx01 = subtraction
xx10 = multiplication 
xx11 = division
x1xx = set flag 1 on overflow
1xxx = invert output

logical: - 2 REG IN, 1 REG OUT on all
xx00 = and
xx01 = or
xx10 = xor
x1xx = invert output
1xxx = set flag 2 if nonzero result

condition check: - 2 REG IN on all
0xxx = write to flag 1
1xxx = write to flag 2
x0xx = normal write
x1xx = inverted write
xx00 = equal
xx01 = greater than
xx10 = less than

control flow: - 1 REG IN
00x0 = static jump
00x1 = relative jump
0x1x = push pc before jump
01x0 = pop to pc - NO ADDITIONAL INPUTS
01x1 = interrupt (jump to 0) - NO ADDITIONAL INPUTS
1000 = enable interrupts - NO ADDITIONAL INPUTS
1001 = disable interrupts (default) - NO ADDITIONAL INPUTS

memory access: - 2 REG IN, TARGET REG, THEN ADDRESS REG
0000 = push - 1 REG IN
0001 = pop - 1 REG IN, NO IMMEDIATE
xx10 = store
xx11 = load - NO IMMEDIATE ON TARGET REG
001x = access RAM
011x = access DISK
101x = access VRAM
111x = serial port I/O


bits 15-16 determine input immediacy:
1x = 1st input (if used) is an immediate value
x1 = 2nd input (if used) is an immediate value