-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathindex.html
476 lines (451 loc) · 32.8 KB
/
index.html
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="description" content="FRISCjs - FRISC processor simulator in JavaScript" />
<meta name="author" content="Ivan Zuzak" />
<title> FRISCjs - FRISC processor simulator in JavaScript</title>
<link rel="stylesheet"
href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" />
<link rel="stylesheet" href="styles/ace-mode-frisc.css" />
<link rel="stylesheet" href="styles/friscjs.css" />
</head>
<body>
<div class="container" style="width: 1170px">
<h1> FRISCjs <small> FRISC processor simulator in JavaScript </small> </h1>
<ul class="nav nav-tabs">
<li class="active"><a id="frisc-sim-link" href="#frisc-sim" data-toggle="tab">Simulator</a></li>
<li><a href="#frisc-saveload" data-toggle="tab">Load/Save</a></li>
<li><a href="#frisc-usage" data-toggle="tab">Usage instructions</a></li>
<li><a href="#frisc-examples" data-toggle="tab">Examples</a></li>
<li><a href="#frisc-about" data-toggle="tab">About</a></li>
</ul>
<div class="tab-content" style="margin-bottom: 0px;">
<div id="frisc-saveload" class="container tab-pane" style="width: auto">
<div class="well">
<h3> Load/save and import/export FRISC configurations </h3>
<p>
This page enables you to save the current configuration of the simulator locally (under a
specific name) so that you may load it next time you use FRISCjs.
Currently, a configuration consists of the FRISC assembly program defined in the editor, the CPU
speed, memory size and the set of defined I/O units.
In the future, the configuration might be extended to include defined breakpoints, CPU state,
etc.
Furthermore, this page enables you to export configurations in text format so that they can be
shared (e.g. via e-mail) and saved externally (e.g. as a GitHub gist), and import previously
exported configurations.
In order to save/load and import/export, the simulator must be in a stopped state.
</p>
<h4> Save current configuration locally </h4>
<p>
<form class="form-search">
<label class="control-label" for="frisc-cfg-save-name">Configuration name:</label>
<input type="text" id="frisc-cfg-save-name" class="input-medium search-query">
<button id="frisc-cfg-save" type="button" class="btn btn-success"><i
class="icon-file icon-white"></i> Save</button>
<span id="frisc-cfg-save-help" class="help-inline"></span>
</form>
</p>
<h4> Load or delete existing configuration </h4>
<p>
<form class="form-search">
<label class="control-label" for="frisc-cfg-select">Select configuration:</label>
<select id="frisc-cfg-select" class="input-medium">
</select>
<button id="frisc-cfg-load" type="button" class="btn btn-success"><i
class="icon-download-alt icon-white"></i> Load</button>
<button id="frisc-cfg-delete" type="button" class="btn btn-danger"><i
class="icon-remove-sign icon-white"></i> Delete</button>
<span id="frisc-cfg-load-help" class="help-inline"></span>
</form>
</p>
<h4> Export current configuration to text </h4>
<p>
<form class="form-search">
<textarea class="input-xxlarge" id="frisc-cfg-export-text" rows="4"></textarea>
<button id="frisc-cfg-export" type="button" class="btn btn-success"><i
class="icon-file icon-white"></i> Export</button>
<span id="frisc-cfg-export-help" class="help-inline"></span>
</form>
</p>
<h4> Import configuration from text as current configuration </h4>
<p>
<form class="form-search">
<textarea class="input-xxlarge" id="frisc-cfg-import-text" rows="4"></textarea>
<button id="frisc-cfg-import" type="button" class="btn btn-success"><i
class="icon-download-alt icon-white"></i> Import</button>
<span id="frisc-cfg-import-help" class="help-inline"></span>
</form>
</p>
</div>
</div>
<div id="frisc-usage" class="container tab-pane" style="width: auto;">
<div class="well">
<h3> Basic usage instructions </h3>
<ol>
<li> Enter your FRISC assembler program into the textbox on the left. </li>
<li> Press the <b>"Settings"</b> button to define the CPU speed (in Hz, default is 1000Hz, min
is 1Hz) and the memory size (in KB, default is 256KB, min is 1KB, max is 1000KB). These
options can't be changed after the program is loaded. Also, select the base for displaying
register status (decimal or hexadecimal, default is hex). This option can be changed even
while the loaded program is being executed. </li>
<li> Press the <b>"Load"</b> button to parse and assemble the program, and then load it into
memory. In case of parsing errors, the error message, line and column numbers will be logged
to the log output screen. </li>
<li> After the program loads into memory, the program editor is replaced with a
<b>location-by-location view of the complete memory</b>. For each location, the location
address, its value in hex and dec base, and value interpreted as a FRISC instruction are
shown. Furthermore, the memory view provides several advanced features:
<ul>
<li> <b>search</b> - the search-box below the memory view provides a fast way to jump to
any location.</li>
<li> <b>breakpoints</b> - for each location, the memory view also provides a "Break"
checkbox which will pause the CPU when it reaches that memory location. </li>
<li> <b>next instruction highlight</b> - the location of the instruction that will be
executed next by the CPU is highlighted. </li>
</ul>
<li> Press the <b>"Run all"</b> button to start the CPU with the defined execution speed. As the
program is executing, the value of the registers is updated and the log output screen logs
every executed instruction and CPU state.</li>
<li> Press the <b>"Pause"</b> button to pause CPU execution.</li>
<li> Press the <b>"Run one"</b> button to force the CPU to execute only the next instruction
(step-by-step execution).</li>
<li> Press the <b>"Stop"</b> button to stop the CPU completely, unload the program from memory
and return to defining the program in the editor. </li>
<li> Press the <b>"Clear log"</b> button to clear the log output screen. </li>
</ol>
<h3> IO units instructions </h3>
<ol>
<li> IO units must be defined <b>before loading a FRISC program</b> into memory. </li>
<li> Define a <b>unique name</b> to identify an IO unit. </li>
<li> Select the <b>IO unit type</b>. FRISCjs supports 4 IO unit types: Generic IO, FRISC CT,
FRISC PIO and FRISC DMA. The <b>Generic IO unit</b> is a unit with no pre-defined behavior
or number of memory mapped locations, and enables users to manually set the unit state at
runtime. The <b>FRISC CT</b>, <b>FRISC PIO</b> and <b>FRISC DMA</b> units all have
pre-defined behavior, parameters and number of memory mapped locations, and their state
cannot be set manually during runtime. Multiple units of same type can be added (e.g. two
FRISC CT units at the same time). </li>
<li> Select the <b>interrupt level</b> for the unit. Multiple units may be connected to the same
interrupt, except for INT3 which is unmaskable. </li>
<li> Define the start of the <b>memory mapping</b> for the unit as a HEX base memory location.
Writing to memory locations mapped to an IO unit will result in sending data to the IO unit,
not the memory module. Similarly, reading from a memory mapped location will result in
receiving data from the IO unit, not the memory module. </li>
<li> Define the <b>number of memory mapped 4-byte locations</b>. This number is pre-defined for
standard FRISC IO units, and is configurable for Generic IO units. </li>
<li> Define the required parameters for some units, e.g. the frequency for FRISC CT and PIO
units. </li>
<li> Click <b>"Add"</b> to create and display the unit. In case of errors, the error message
will be logged to the log output screen. Each unit is displayed with its name, parameters,
interrupt state and memory mapped locations. For each location, the address of the location
and its value in decimal, hexadecimal and binary bases are shown. The interrupt state and
memory mapped location values can be changed manually through the user interface for Generic
IO unit types. </li>
<li> Each unit can be removed by clicking the <b>"X"</b> button in the upper left corner, but
only while the CPU is stopped. </li>
<li> After adding all desired IO units, load the program into memory as described above. As the
program executes, the state of the memory mapped locations and the interrupt state will
<b>automatically refresh</b>. </li>
<li> The state of the memory mapped locations for all IO units is <b>automatically reset</b>
when the CPU is stopped, as described above. </li>
</ol>
</div>
</div>
<div id="frisc-examples" class="container tab-pane" style="margin-bottom: 15px; width: auto;">
<div class="well">
<h3> Examples </h3>
<p> This page contains examples for using FRISCjs. Each example is given as a brief description and
a link to a configuration which can be loaded using the Load/Save tab. Just copy/paste the
configuration into the import box and click <b>"Import"</b>. </p>
<h4> Simple addition example </h4>
<p> This most basic example adds values from registers R0 and R1 and stores the result into R2. </p>
<ul>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/add_numbers.json"
target="_blank">Configuration</a> </li>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/add_numbers.frisc"
target="_blank">Input program only in a more readable format</a> </li>
</ul>
<h4> All instructions example </h4>
<p> This example doesn't do anything useful, but contains every FRISC instruction. Useful for
testing and debugging. </p>
<ul>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/all_instructions.json"
target="_blank">Configuration</a> </li>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/all_instructions.frisc"
target="_blank">Input program only in a more readable format</a> </li>
</ul>
<h4> FRISC CT example </h4>
<p> This example uses a FRISC CT IO unit for simple counting - an in-memory counter is incremented
for every 400 periods of the FRISC CT unit. The configuration contains a FRISC CT unit
configured at 1000Hz. </p>
<ul>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/frisc_ct.json"
target="_blank">Configuration</a> </li>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/frisc_ct.frisc"
target="_blank">Input program only in a more readable format</a> </li>
</ul>
<h4> FRISC PIO example </h4>
<p> This example uses a FRISC PIO IO unit for reading 40 data items. The configuration contains a
FRISC PIO unit configured at 1000Hz. </p>
<ul>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/frisc_pio.json"
target="_blank">Configuration</a> </li>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/frisc_pio.frisc"
target="_blank">Input program only in a more readable format</a> </li>
</ul>
<h4> FRISC DMA example </h4>
<p> This example uses a FRISC DMA IO unit for transferring 1000 4-byte words from an IO unit mapped
on 0xFFFF3330 to memory starting from location 0x4000, using halting transfer mode. </p>
<ul>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/frisc_dma.json"
target="_blank">Configuration</a> </li>
<li> <a href="https://raw.github.com/izuzak/FRISCjs/master/examples/frisc_dma.frisc"
target="_blank">Input program only in a more readable format</a> </li>
</ul>
</div>
</div>
<div id="frisc-about" class="container tab-pane" style="margin-bottom: 15px; width: auto;">
<div class="well">
<h3> About </h3>
<p>
FRISCjs is a simulator of the FRISC processor written in JavaScript.
<a href="https://www.fer.unizg.hr/rasip/knjige/frisc">FRISC</a> is a simple, educational RISC
processor developed at the <a href="https://fer.unizg.hr/en">University of Zagreb, Faculty of
Electrical Engineering and Computing</a>.
The simulator has two parts: a <a
href="https://github.com/izuzak/FRISCjs/blob/master/friscasm.pegjs">FRISC assembler</a>
(built using PEGjs) which translates FRISC assembly code to machine code and a <a
href="https://github.com/izuzak/FRISCjs/blob/master/friscjs.js">FRISC CPU simulator</a>
which executes machine code.
This Web application is a graphical interface for the simulator, while there also exists a <a
href="https://github.com/izuzak/FRISCjs/blob/master/main.js">console interface which runs on
NodeJS</a>.
</p>
<h3> Source code and bug reports </h3>
<p>
The complete source code for FRISCjs and this Web application is <a
href="https://github.com/izuzak/FRISCjs">available on GitHub</a>.
Please use the GitHub <a href="https://github.com/izuzak/FRISCjs/issues">issue tracker</a> for
reporting bugs and feature requests.
</p>
<h3> Credits and license </h3>
<p>
FRISCjs was developed by <a href="https://ivanzuzak.info">Ivan Zuzak</a>. License: <a
href="https://github.com/izuzak/FRISCjs/blob/master/LICENSE.markdown">Apache 2.0.</a>
Contributors: <a href="https://github.com/ibudiselic">Ivan Budiselic</a>, <a
href="https://github.com/Stankec">Stanko Krtalic</a>.
</p>
<p>
FRISCjs is built with many open-source projects: <a href="https://pegjs.majda.cz/">PEGjs</a>, <a
href="https://nodejs.org">NodeJS</a>, <a href="https://jquery.com">jQuery</a>, <a
href="https://twitter.github.io/bootstrap">Bootstrap</a>, <a
href="https://ace.ajax.org/">Ace</a>, <a
href="https://github.com/janl/mustache.js/">Mustache</a> and <a
href="https://github.com/madrobby/keymaster">Keymaster</a>.
</p>
</div>
</div>
<div id="frisc-sim" class="active container-fluid tab-pane" style="padding-left: 0px;">
<div id="frisc-inputdiv" class="sidebar" style="width: 450px; height: 450px; float: left;">
</div>
<div class="sidebar ace_editor ace-tm" id="frisc-memorylist-hold"
style="width: 450px; height: 450px; display:none; float: left;">
<div
style="width: 448px; height: 30px; display:inline-block; top:0px; border: 1px solid #dddddd; border-collapse: separate; border-radius: 4px 4px 0px 0px; background-color:#f1f1f1; padding-top:5px;">
<div
style='display:table-cell; width:70px; border-right: 1px solid #000000; padding-left: 4px; vertical-align: middle; padding-top: 1px;'>
Location</div>
<div
style='display:table-cell; width:70px; border-right: 1px solid #000000; padding-left: 4px; vertical-align: middle; padding-top: 1px;'>
Value HEX</div>
<div
style='display:table-cell; width:85px; border-right: 1px solid #000000; padding-left: 4px; vertical-align: middle; padding-top: 1px;'>
Value DEC</div>
<div
style='display:table-cell; width:150px; border-right: 1px solid #000000; padding-left: 4px; vertical-align: middle; padding-top: 1px;'>
Instruction</div>
<div
style='display:table-cell; width:30px; padding-left: 4px; vertical-align: middle; padding-top: 1px;'>
Break</div>
</div>
<div id="frisc-memorylist"
style="width: 448px; height: 375px; position:absolute; left:0px; top:31px; overflow: scroll; overflow-x:hidden; display:inline-block; border: 1px solid #dddddd; border-radius: 0px 0px 4px 4px;">
</div>
<div id="frisc-memorylist-search"
style="border: 1px solid #dddddd; border-collapse: separate; border-radius: 0px 0px 4px 4px; background-color:#f1f1f1; position:absolute; bottom:0px; width: 448px; height: 35px; padding-top: 6px;">
<div style="padding-left: 6px;">
<form class="form-search">
<input type="text" class="input-medium search-query" id="skrMemLisSearchField">
<button type="submit" class="btn" id="skrMemLisSearch">Go to</button>
<button type="submit" class="btn" id="skrMemDump">Dump memory to text</button>
</form>
</div>
</div>
</div>
<div class="content" style="margin-left: 460px; height: 450px;">
<div id="frisc-controls" style="float: left; margin-left: 10px;">
<div id="frisc-cpu-controls" class="form-inline" style="width: 666px;">
<button id="frisc-load" type="button" class="btn btn-success"><i
class="icon-download-alt icon-white"></i> Load</button>
<button id="frisc-execute" type="button" class="btn btn-primary"><i
class="icon-fast-forward icon-white"></i> Run all</button>
<button id="frisc-next" type="button" class="btn btn-primary"><i
class="icon-step-forward icon-white"></i> Run one</button>
<button id="frisc-pause" type="button" class="btn btn-primary"><i
class="icon-pause icon-white"></i> Pause</button>
<button id="frisc-stop" type="button" class="btn btn-danger"><i
class="icon-stop icon-white"></i> Stop</button>
<button id="frisc-clear" type="button" class="btn btn-primary"><i
class="icon-remove-sign icon-white"></i> Clear log</button>
<button id="frisc-showhidesettings" type="button" class="btn btn-primary"
data-toggle="button"><i class="icon-wrench icon-white"></i> Settings</button>
</div>
<div id="frisc-settings" style="display: none; margin-top: 15px;" class="form-inline">
<div>
<label for="frisc-freq" style="margin-bottom: 0px;">CPU frequency (Hz):</label>
<input id="frisc-freq" type="number" min="1" step="1" class="input-mini"
style="margin-bottom: 0px;" value="1000">
<label for="frisc-memsize" style="margin-bottom: 0px;">MEM size (KB):</label>
<input id="frisc-memsize" type="number" min="1" step="1" max="1000" class="input-mini"
style="margin-bottom: 0px;" value="256">
<label style="margin-bottom: 0px;">Register values:</label>
<div class="btn-group" data-toggle="buttons-radio"
style="display:inline-block; vertical-align: middle;">
<button class="btn" id="regBaseRadioDec">DEC</button>
<button class="btn active" id="regBaseRadioHex">HEX</button>
</div>
</div>
<div style="margin-top:4px;">
<input type="checkbox" id="skr-frisc-log" checked> Limit log to
<input id="skr-frisc-log-limit" type="number" min="1" step="1" class="input-mini"
style="margin-bottom: 0px;" value="10">
instructions
</div>
</div>
<div id="cpuout"
style="font-size: 10pt; font-family: courier new; background-color: #D4CDCF; width: 650px; overflow: auto; border: 1px solid #666; padding: 8px; margin-top: 10px; color: black; height: 145px;">
</div>
<div id="cpustate" style="margin-top: 8px;">
<div id="cpu_r0" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> R0 </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_r1" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> R1 </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_r2" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> R2 </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_r3" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> R3 </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_r4" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> R4 </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_r5" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> R5 </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_r6" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> R6 </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_r7" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> R7 </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_pc" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> PC </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_sr" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> SR </div>
<div class="cpu-reg-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_iif" class="cpu-state-div">
<div class="cpu-reg-label cpu-state-lab"> IIF </div>
<div class="cpu-reg-value cpu-state-val"> 1 </div>
</div>
<br>
<div id="cpu_N" class="cpu-state-div">
<div class="cpu-sr-label cpu-state-lab"> SR-N </div>
<div class="cpu-sr-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_C" class="cpu-state-div">
<div class="cpu-sr-label cpu-state-lab"> SR-C </div>
<div class="cpu-sr-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_V" class="cpu-state-div">
<div class="cpu-sr-label cpu-state-lab"> SR-V </div>
<div class="cpu-sr-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_Z" class="cpu-state-div">
<div class="cpu-sr-label cpu-state-lab"> SR-Z </div>
<div class="cpu-sr-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_EINT0" class="cpu-state-div">
<div class="cpu-sr-label cpu-state-lab"> SR-EINT0 </div>
<div class="cpu-sr-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_EINT1" class="cpu-state-div">
<div class="cpu-sr-label cpu-state-lab"> SR-EINT1 </div>
<div class="cpu-sr-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_EINT2" class="cpu-state-div">
<div class="cpu-sr-label cpu-state-lab"> SR-EINT2 </div>
<div class="cpu-sr-value cpu-state-val"> 0 </div>
</div>
<div id="cpu_GIE" class="cpu-state-div">
<div class="cpu-sr-label cpu-state-lab"> SR-GIE </div>
<div class="cpu-sr-value cpu-state-val"> 0 </div>
</div>
</div>
</div>
</div>
<div style="margin-bottom: 5px; width: 1170px;">
<legend style="margin-bottom: 15px;">IO units</legend>
<div class="form-inline" style="margin-bottom: 25px;">
<form id="ioUnitFormStatic">
<input class="span2" type="text" style="margin-bottom: 0px;" id="ioUnitName" required
pattern="[A-Za-z_0-9]{3,}" placeholder="Enter IO unit name…">
<select class="span2" id="ioUnitType" required>
<option value="">Select unit type…</option>
<option value="generic">Generic IO unit</option>
<option value="frisc-ct">FRISC CT</option>
<option value="frisc-pio">FRISC PIO</option>
<option value="frisc-dma">FRISC DMA</option>
</select>
<select class="span2" id="ioUnitIntLevel" required>
<option value="">Select interrupt…</option>
<option value="INT0">INT0 (maskable)</option>
<option value="INT1">INT1 (maskable)</option>
<option value="INT2">INT2 (maskable)</option>
<option value="INT3">INT3 (unmaskable)</option>
</select>
<label> Memory mapping start addr (HEX): </label>
<input type="text" class="span1" id="ioUnitMemmapStart" value="0" required>
<label> Number of 4B locations: </label>
<input type="text" class="span1" id="ioUnitMemmapCount" value="0" required>
<button type="submit" class="btn btn-success" id="addIoUnit" value="Search"><i
class="icon-plus icon-white"></i> Add</button>
</form>
</div>
<div class="row" id="ioUnits">
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-latest.js"></script>
<script src="../lib/friscjs-browser.js"></script>
<script src="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script src="https://madrobby.github.io/keymaster/keymaster.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.7.2/mustache.min.js"></script>
<script src="https://ajaxorg.github.io/ace-builds/src/ace.js"></script>
<script src="scripts/ace-mode-frisc.js"></script>
<script src="scripts/main.js"></script>
</body>
</html>