Importing a bunch of pages from old websites.
[website_subgeniuskitty.com] / data / development / ned / simulator.md
CommitLineData
f6e94cb2
AT
1# NED - Simulator #
2
3A simulator, assembler, disassembler and graphical front panel implementing NED
4v1. Browse the [source
5code](http://gitweb.subgeniuskitty.com/?p=ned-v1-simulator/.git;a=tree).
6
7## Status ##
8
9The assembler, disassembler, and front panel are fully functional. The CPU
10simulator only supports a single CPU and does not implement the `CMPSWP`
11instruction but is otherwise functional.
12
13The calculator included as an example of NED assembly is also fully functional.
14
15## Getting Started ##
16
17Obtain a snapshot of the repository.
18
19 wget -O ned.tgz "http://gitweb.subgeniuskitty.com/?p=ned-v1-simulator/.git;a=snapshot;h=HEAD;sf=tgz"
20 tar xzf ned.tgz
21 cd ned-v1-simulator-HEAD*
22
23Build all the tools by executing `make` in the top-level directory or use
24`make` in individual project subfolders. Note that `nedfp` requires SDL2 and
25SDL2_ttf but is not required for simulation.
26
27No `install` targets are supplied for `make`. Instead, manually copy the
28binaries wherever you want or adjust your `$PATH` to use them in place. For example:
29
30 export PATH=/home/username/ned/nedasm:/home/username/ned/nedsim:$PATH
31
32Once the NED binaries are accessible from your `$PATH`, the calculator example
33can be run with `make sim`. Exit with `Ctrl-C`.
34
35 cd software/4func_calculator
36 make sim
37 <calculator starts up and takes control of the screen>
38
39To use `nedfp` as a graphical front panel for debugging, first start `nedfp`
40with no arguments. Then, execute `nedsim` with flags for IP address and port.
41The `-s` flag can be useful in slowing the simulation down enough to understand
42`nedfp`'s output.
43
44 nedfp/nedfp &
45 nedasm/nedasm -i software/4func_calculator/calc/asm -o /tmp/calc.bin
46 nedsim/nedsim -i /tmp/calc.bin -a 127.0.0.1 -p 4999 -s 10000
47
48Binaries can be disassembled with `neddis`. Using the calculator as an example:
49
50 % ./neddis/neddis -i ./calc.bin -s -l
51
52 Summary
53 =====================================
54 Magic: 0x00000107
55 Machine ID: 0x000000d7
56 Flags: 0x00000000
57 Text Size: 0x00000600 bytes
58 Data Size: 0x00000000 bytes
59 BSS Size: 0x00000000 bytes
60 Symbol Table Size: 0x00000514 bytes
61 Entry Point: 0x20000000
62 Text Reloc. Size: 0x00000000 bytes
63 Data Reloc. Size: 0x00000000 bytes
64
65
66 Offset || Hex || Binary || Description
67 ===========================================================================================================================================
68 0x20000000 0x01041041 00 000001 000001 000001 000001 000001 NOP NOP NOP NOP NOP
69
70 calc:
71 0x20000004 0x90000044 1 00100000 00000000 00000000 1000100 WORD =====> 0x20000088 04000000210 536871048
72 0x20000008 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
73
74 calcloop:
75 0x2000000c 0x900000d6 1 00100000 00000000 00000001 1010110 WORD =====> 0x200001ac 04000000654 536871340
76 0x20000010 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
77 0x20000014 0x900002b8 1 00100000 00000000 00000101 0111000 WORD =====> 0x20000570 04000002560 536872304
78 0x20000018 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
79 0x2000001c 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
80 0x20000020 0x900000ec 1 00100000 00000000 00000001 1101100 WORD =====> 0x200001d8 04000000730 536871384
81 0x20000024 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
82 0x20000028 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
83 0x2000002c 0x90000122 1 00100000 00000000 00000010 0100010 WORD =====> 0x20000244 04000001104 536871492
84 0x20000030 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
85 0x20000034 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
86 0x20000038 0x900000fc 1 00100000 00000000 00000001 1111100 WORD =====> 0x200001f8 04000000770 536871416
87 0x2000003c 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
88 0x20000040 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
89 0x20000044 0x90000196 1 00100000 00000000 00000011 0010110 WORD =====> 0x2000032c 04000001454 536871724
90 0x20000048 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
91 0x2000004c 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
92 0x20000050 0x90000136 1 00100000 00000000 00000010 0110110 WORD =====> 0x2000026c 04000001154 536871532
93 0x20000054 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
94 0x20000058 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
95 0x2000005c 0x9000014a 1 00100000 00000000 00000010 1001010 WORD =====> 0x20000294 04000001224 536871572
96 0x20000060 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
97 0x20000064 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
98 0x20000068 0x90000160 1 00100000 00000000 00000010 1100000 WORD =====> 0x200002c0 04000001300 536871616
99 0x2000006c 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
100 0x20000070 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
101 0x20000074 0x90000176 1 00100000 00000000 00000010 1110110 WORD =====> 0x200002ec 04000001354 536871660
102 0x20000078 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
103 0x2000007c 0x06041041 00 000110 000001 000001 000001 000001 TEST NOP NOP NOP NOP
104 0x20000080 0x90000006 1 00100000 00000000 00000000 0000110 WORD =====> 0x2000000c 04000000014 536870924
105 0x20000084 0x0e001041 00 001110 000000 000001 000001 000001 JMP HALT NOP NOP NOP
106
107 calcinit:
108 0x20000088 0xa0000000 1 01000000 00000000 00000000 0000000 WORD =====> 0x40000000 010000000000 1073741824
109 0x2000008c 0x0d80d69a 00 001101 100000 001101 011010 011010 SWAP IM_0 SWAP LDSP+2 LDSP+2
110
111 calcinitzeroloop:
112 0x20000090 0x9000005a 1 00100000 00000000 00000000 1011010 WORD =====> 0x200000b4 04000000264 536871092
113 0x20000094 0x2808d381 00 101000 000010 001101 001110 000001 IM_8 LOAD SWAP JMP NOP
114 0x20000098 0x2069a303 00 100000 011010 011010 001100 000011 IM_0 LDSP+2 LDSP+2 ADD STORE
115 0x2000009c 0x18041041 00 011000 000001 000001 000001 000001 LDSP+0 NOP NOP NOP NOP
116 0x200000a0 0x90000058 1 00100000 00000000 00000000 1011000 WORD =====> 0x200000b0 04000000260 536871088
117 0x200000a4 0x07041041 00 000111 000001 000001 000001 000001 BRZ NOP NOP NOP NOP
118 0x200000a8 0x90000048 1 00100000 00000000 00000000 1001000 WORD =====> 0x20000090 04000000220 536871056
119 0x200000ac 0x0e041041 00 001110 000001 000001 000001 000001 JMP NOP NOP NOP NOP
120
121 calcinitzeroloopend:
122 0x200000b0 0x0618e041 00 000110 000110 001110 000001 000001 TEST TEST JMP NOP NOP
123
124 incrementstackindex:
125 0x200000b4 0x0d90c62c 00 001101 100100 001100 011000 101100 SWAP IM_4 ADD LDSP+0 IM_12
126 0x200000b8 0x90000066 1 00100000 00000000 00000000 1100110 WORD =====> 0x200000cc 04000000314 536871116
127 0x200000bc 0x1a3522a1 00 011010 001101 010010 001010 100001 LDSP+2 SWAP STSP+2 NOT IM_1
128 0x200000c0 0x0c306b02 00 001100 001100 000110 101100 000010 ADD ADD TEST IM_12 LOAD
129 0x200000c4 0x2220d1c6 00 100010 001000 001101 000111 000110 IM_2 AND SWAP BRZ TEST
130 0x200000c8 0x20041041 00 100000 000001 000001 000001 000001 IM_0 NOP NOP NOP NOP
131 <snip>
132