Skip to content

Commit 96b3a8e

Browse files
committedMay 22, 2020
добавлена подсветка кода, работает с 6 лабой
1 parent 03856c4 commit 96b3a8e

File tree

20 files changed

+406
-272
lines changed

20 files changed

+406
-272
lines changed
 

‎bcomp-assembler/src/main/java/ru/ifmo/cs/bcomp/grammar/BCompNG.g4

+31-30
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ fragment RKH : ('х' | 'Х');
195195
fragment RTSC : ('ц' | 'Ц');
196196
fragment RCH : ('ч' | 'Ч');
197197
fragment RSH : ('ш' | 'Ш');
198+
fragment RSSH : ('щ' | 'Щ');
198199
fragment RHSIGN : ('ъ' | 'Ъ');
199200
fragment RII : ('ы' | 'Ы');
200201
fragment RSSIGN : ('ь' | 'Ь');
@@ -227,35 +228,35 @@ SUB: ( S U B ) | ( RM RI RN RU RS );
227228
CMP: ( C M P ) | ( RS RR RA RV );
228229
LOOP: ( L O O P ) | ( RK RR RU RG );
229230
LD: ( L D ) | ( RN RYA RM );
230-
SWAM: ( S W A M );
231+
SWAM: ( S W A M ) | ( RO RB RM RE RN ); // ОБМЕН
231232
JUMP: ( J U M P ) | ( RP RR RII RG );
232233
CALL: ( C A L L ) | ( RV RZH RU RKH );
233234
ST: ( S T ) | ( RT RSSIGN RF RU );
234235

235-
NOP: ( N O P );
236-
HLT: ( H L T );
237-
CLA: ( C L A );
238-
NOT: ( N O T ) | ( C M A ) | ( C O M ) | ( RN RE ) | ( RS RB RA );
239-
CLC: ( C L C ) ;
240-
CMC: ( C M C ) ;
241-
ROL: ( R O L ) ;
242-
ROR: ( R O R ) ;
243-
ASL: ( A S L ) ;
244-
ASR: ( A S R ) ;
245-
SXTB: ( S X T B ) ;
246-
SWAB: ( S W A B ) ;
247-
INC: ( I N C ) ;
248-
DEC: ( D E C ) ;
249-
NEG: ( N E G ) ;
250-
POP: ( P O P ) ;
251-
POPF: ( P O P F ) ;
252-
RET: ( R E T ) ;
253-
IRET: ( I R E T ) ;
254-
PUSH: ( P U S H ) ;
255-
PUSHF: ( P U S H F );
256-
SWAP: ( S W A P ) ;
257-
258-
BEQ: ( B E Q ) | ( B Z S );
236+
NOP: ( N O P ) | ( RP RR RO RP ); // ПРОП
237+
HLT: ( H L T ) | ( RS RT RO RP ); // СТОП
238+
CLA: ( C L A ) | ( RCH RI RS RT RSSIGN ); // ЧИСТЬ
239+
NOT: ( N O T ) | ( C M A ) | ( C O M ) | ( RN RE ) | ( RS RB RA )| ( RN RE RT RSSIGN ); // НЕТЬ
240+
CLC: ( C L C ) | ( RCH RI RS RT RTSC ); // ЧИСТЦ
241+
CMC: ( C M C ) | ( RI RN RV RTSC ); // ИНВЦ
242+
ROL: ( R O L ) | ( RTSC RL RE RV ); // ЦЛЕВ
243+
ROR: ( R O R ) | ( RTSC RP RR RA RV ); // ЦПРАВ
244+
ASL: ( A S L ) | ( RA RL RE RV ); // АЛЕВ
245+
ASR: ( A S R ) | ( RA RP RR RA RV ); // АПРАВ
246+
SXTB: ( S X T B ) | ( RR RA RS RSH ); // РАСШ
247+
SWAB: ( S W A B ) | ( RN RA RO RB RO RR RO RT ); // НАОБОРОТ
248+
INC: ( I N C ) | ( RU RV RE RL ); // УВЕЛ
249+
DEC: ( D E C ) | ( RU RM RE RN ); // УМЕН
250+
NEG: ( N E G ) | ( RO RT RR RI RTSC ); // ОТРИЦ
251+
POP: ( P O P ) | ( RV RII RN RSSIGN ); // ВЫНЬ
252+
POPF: ( P O P F ) | ( RV RII RN RSSIGN RF ); // ВЫНЬФ
253+
RET: ( R E T ) | ( RV RO RZ RV RR ); // ВОЗВР
254+
IRET: ( I R E T ) | ( RV RO RZ RV RR RP); // ВОЗВРП
255+
PUSH: ( P U S H ) | ( RS RU RN RSSIGN ); // СУНЬ
256+
PUSHF: ( P U S H F ) | ( RS RU RN RSSIGN RF); // СУНЬФ
257+
SWAP: ( S W A P ) | ( RM RE RN RSSIGN ); // МЕНЬ
258+
259+
BEQ: ( B E Q ) | ( B Z S ) | ( RB RYA RK RA ); // БЯКА
259260
BNE: ( B N E ) | ( B Z C );
260261
BMI: ( B M I ) | ( B N S );
261262
BPL: ( B P L ) | ( B N C );
@@ -268,11 +269,11 @@ BGE: ( B G E ) ;
268269
BR: ( B R ) ; //syntetic insturction, jump with direct relative addressing mode
269270

270271

271-
DI: ( D I ) ;
272-
EI: ( E I ) ;
273-
IN: ( I N ) ;
274-
OUT: ( O U T ) ;
275-
INT: ( I N T ) ;
272+
DI: ( D I ) | ( RN RI RZ RYA ); // НИЗЯ
273+
EI: ( E I ) | ( RL RSSIGN RZ RYA ); // ЛЬЗЯ
274+
IN: ( I N ) | ( RV RV RO RD ); // ВВОД
275+
OUT: ( O U T ) | ( RV RII RV RO RD ); // ВЫВОД
276+
INT: ( I N T ) | ( RP RR RE RR ); // ПРЕР
276277

277278
SP: ( S P ) ;
278279
IP: ( I P ) ;

‎bcomp-ng-ui/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@
7979
</plugins>
8080
</build>
8181
<dependencies>
82+
<dependency>
83+
<groupId>com.fifesoft</groupId>
84+
<artifactId>rsyntaxtextarea</artifactId>
85+
<version>3.1.1</version>
86+
</dependency>
8287
<dependency>
8388
<groupId>junit</groupId>
8489
<artifactId>junit</artifactId>

‎bcomp-ng-ui/src/main/java/ru/ifmo/cs/bcomp/ui/GUI.java

+2-11
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
import java.awt.*;
1616
import java.awt.event.ComponentAdapter;
1717
import java.awt.event.ComponentEvent;
18-
import java.awt.event.FocusAdapter;
19-
import java.awt.event.FocusEvent;
2018

2119
import static ru.ifmo.cs.bcomp.ui.components.DisplayStyles.PANE_SIZE;
2220

@@ -72,15 +70,6 @@ public void stateChanged(ChangeEvent e) {
7270
}
7371
});
7472

75-
tabs.addFocusListener(new FocusAdapter() {
76-
@Override
77-
public void focusGained(FocusEvent e) {
78-
super.focusGained(e);
79-
for (ActivateblePanel panel : panels) {
80-
panel.redrawArrows();
81-
}
82-
}
83-
});
8473

8574
tabs.addComponentListener(new ComponentAdapter() {
8675
@Override
@@ -108,6 +97,8 @@ public void start() {
10897
}
10998

11099
public void gui() throws Exception {
100+
bcomp.startTimer();
101+
111102
JFrame frame = new JFrame("БЭВМ");
112103

113104
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

‎bcomp-ng-ui/src/main/java/ru/ifmo/cs/bcomp/ui/components/AssemblerView.java

+24-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
package ru.ifmo.cs.bcomp.ui.components;
66

7+
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
8+
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
9+
import org.fife.ui.rsyntaxtextarea.Theme;
10+
import org.fife.ui.rtextarea.RTextScrollPane;
711
import ru.ifmo.cs.bcomp.CPU;
812
import ru.ifmo.cs.bcomp.ProgramBinary;
913
import ru.ifmo.cs.bcomp.assembler.AsmNg;
@@ -14,6 +18,7 @@
1418
import java.awt.*;
1519
import java.awt.event.ActionEvent;
1620
import java.awt.event.ActionListener;
21+
import java.io.IOException;
1722
import java.util.Date;
1823

1924
import static ru.ifmo.cs.bcomp.ui.components.DisplayStyles.*;
@@ -26,9 +31,11 @@ public class AssemblerView extends BCompPanel implements ActionListener {
2631
private final GUI gui;
2732
private final CPU cpu;
2833
private final ComponentManager cmanager;
29-
private final JTextArea text;
34+
private final RSyntaxTextArea text;
3035
private final JTextArea errorarea;
3136

37+
38+
3239
public AssemblerView(final GUI gui) {
3340
super (gui.getComponentManager(),null,null);
3441
this.gui = gui;
@@ -38,13 +45,20 @@ public AssemblerView(final GUI gui) {
3845
JPanel pane = new JPanel(new BorderLayout());
3946
pane.setBackground(COLOR_BACKGROUND);
4047

41-
text = new JTextArea();
42-
text.setFont(FONT_COURIER_BOLD_21);
48+
text = new RSyntaxTextArea();
49+
text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_ASSEMBLER_X86);
50+
text.setCodeFoldingEnabled(true);
4351
text.setBackground(COLOR_BACKGROUND);
4452
text.setForeground(COLOR_TEXT);
45-
text.setCaretColor(COLOR_TEXT);
46-
JScrollPane scroll = new JScrollPane(text);
53+
RTextScrollPane scroll = new RTextScrollPane(text);
4754
pane.add(scroll,BorderLayout.CENTER);
55+
Theme theme = null;
56+
try {
57+
theme = Theme.load(DisplayStyles.class.getClassLoader().getResourceAsStream("dark.xml"));
58+
} catch (IOException e) {
59+
e.printStackTrace();
60+
}
61+
theme.apply(text);
4862

4963
JButton button = new JButton(cmanager.getRes().getString("compile"));
5064
button.setForeground(COLOR_TEXT);
@@ -129,5 +143,10 @@ public void actionPerformed(ActionEvent e) {
129143
cmanager.clearActiveSignals();
130144
cmanager.restoreDelay();
131145
}
146+
147+
@Override
148+
public void paintComponent(Graphics g) {
149+
150+
}
132151
}
133152

‎bcomp-ng-ui/src/main/java/ru/ifmo/cs/bcomp/ui/components/BasicView.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public BasicView(GUI gui, boolean isHex) {
174174
gridwidth = 1;
175175
gridheight = 1;
176176
anchor = GridBagConstraints.NORTHWEST;
177-
insets = new Insets(156, 20, 0, 0);
177+
insets = new Insets(156, 0, 0, 0);
178178
}}),
179179
new RegisterProperties(Reg.DR, REG_ACCUM_X_BV, REG_DATA_Y_BV, isHex, false,
180180

@@ -576,7 +576,7 @@ public void redrawArrows() {
576576
});
577577
break;
578578
case MEM_R:
579-
bus.calcBounds(cmanager.getMem().getY() < 35 ?
579+
bus.calcBounds(cmanager.getMem().getY() < 45 ?
580580
new int[][]{
581581
{regPanelX + cmanager.getMem().getX() - 5, cmanager.getMem().getY() + 10},
582582
{regPanelX + data.getX() + 3 * REG_16_WIDTH / 4 - 10, cmanager.getMem().getY() + 10},
@@ -591,7 +591,7 @@ public void redrawArrows() {
591591
break;
592592
case MEM_W:
593593
bus.calcBounds(
594-
cmanager.getMem().getY() < 35 ?
594+
cmanager.getMem().getY() < 45 ?
595595
new int[][]{{regPanelX + data.getX() + 3 * REG_16_WIDTH / 4 + 10, data.getY() - 5},
596596
{regPanelX + data.getX() + 3 * REG_16_WIDTH / 4 + 10, cmanager.getMem().getY() + 25},
597597
{regPanelX + cmanager.getMem().getX() - 13, cmanager.getMem().getY() + 25},

‎bcomp-ng-ui/src/main/java/ru/ifmo/cs/bcomp/ui/components/RegisterView.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ protected void setProperties(int x, int y, boolean hex, int regWidth,boolean isL
4747
this.formatWidth = regWidth;
4848
this.valuemask = (1 << regWidth) - 1;
4949
this.isLeft=isLeft;
50-
setBounds(x, y, getValueWidth(regWidth, false)+15);
50+
setBounds(x, y, getValueWidth(regWidth, false)+REG_TITLE_WIDTH - 10);
5151
setValue();
5252

5353
title.setForeground(COLOR_TEXT);
@@ -92,7 +92,6 @@ public Register getReg() {
9292
public void paintComponent(Graphics g) {
9393
super.paintComponent(g);
9494
g.setColor(Color.BLACK);
95-
g.drawLine(isLeft?width-26:25,1,isLeft?width-26:25,CELL_HEIGHT);
9695

9796
}
9897
}

‎bcomp-ng-ui/src/main/java/ru/ifmo/cs/bcomp/ui/components/TraceView.java

+45-23
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,11 @@ public class TraceView extends BCompPanel implements ActionListener {
3737
private final ArrayList<Long> writelist = new ArrayList<Long>();
3838
private volatile long savedPointer;
3939
private volatile boolean printOnStop = true;
40-
private volatile int sleep = 0;
40+
private volatile int sleep = 5;
4141
private int sleeptime = 5;
4242

4343
private boolean isRun = false;
44+
private boolean isContinue = false;
4445

4546
private String getReg(Reg reg) {
4647
return Utils.toHex(cpu.getRegValue(reg), cpu.getRegWidth(reg));
@@ -153,12 +154,12 @@ public TraceView(final GUI gui) {
153154

154155

155156
//left
156-
JTextField sleepTb = new JTextField(String.valueOf(sleeptime));
157+
JTextField sleepTb = new JTextField(String.valueOf(sleep));
157158
c.insets = new Insets(15, 0, 0, 0);
158159
gbl.setConstraints(sleepTb, c);
159160
leftPanel.add(sleepTb);
160161

161-
JButton sleepBtn = new JButton("Задать задержку");
162+
JButton sleepBtn = new JButton("Задать задержку (мс)");
162163
sleepBtn.setForeground(COLOR_TEXT);
163164
sleepBtn.setBackground(COLOR_VALUE);
164165
sleepBtn.setFont(FONT_COURIER_PLAIN_12);
@@ -181,30 +182,35 @@ public void actionPerformed(ActionEvent e) {
181182
button.setBounds(625, 1, 200, BUTTONS_HEIGHT);
182183
button.setFocusable(false);
183184

184-
Thread cpuRun = new Thread(() -> {
185-
cpu.startStart();
186-
cpu.startContinue();
187-
188-
cpu.executeContinue();
189-
while (true) {
190-
if (!Long.toHexString(cpu.getRegValue(Reg.CR)).equals("100") && isRun)
191-
cpu.executeContinue();
192-
else {
193-
isRun = false;
194-
button.setText("Выполнить трассировку");
195-
}
196-
}
197-
});
185+
// Thread cpuRun = new Thread(() -> {
186+
// cpu.startStart();
187+
// cpu.startContinue();
188+
//
189+
// cpu.executeContinue();
190+
// while (true) {
191+
// if (!Long.toHexString(cpu.getRegValue(Reg.CR)).equals("100") && isRun)
192+
// cpu.executeContinue();
193+
// else {
194+
// isRun = false;
195+
// button.setText("Выполнить трассировку");
196+
// System.out.println(currentThread().getName() + " is stopping Server thread");
197+
// break;
198+
// }
199+
// }
200+
// });
198201

199202
button.addActionListener(new ActionListener() {
200203
@Override
201204
public void actionPerformed(ActionEvent e) {
202205
if(!isRun) {
203-
printRegsTitle = true;
204206
isRun = true;
205-
text.setText("");
206-
stringRegsCsv.setLength(0);
207-
button.setText("Остановить");
207+
button.setText("Приостоновить");
208+
209+
if(!isContinue) {
210+
printRegsTitle = true;
211+
text.setText("");
212+
stringRegsCsv.setLength(0);
213+
}else isContinue = false;
208214

209215

210216
cpu.addDestination(ControlSignal.STOR, new DataDestination() {
@@ -259,11 +265,27 @@ public void run() {
259265
});
260266

261267

262-
sleep = sleeptime;
263-
cpuRun.start();
268+
//sleep = sleeptime;
269+
new Thread(() -> {
270+
cpu.startStart();
271+
cpu.startContinue();
272+
273+
cpu.executeContinue();
274+
while (true) {
275+
if (!Long.toHexString(cpu.getRegValue(Reg.CR)).equals("100") && isRun)
276+
cpu.executeContinue();
277+
else {
278+
isRun = false;
279+
button.setText("Выполнить трассировку");
280+
break;
281+
}
282+
}
283+
}).start();
284+
264285
} else {
265286
button.setText("Выполнить трассировку");
266287
isRun = false;
288+
isContinue = true;
267289
}
268290
}
269291
});

‎bcomp-ng-ui/src/main/java/ru/ifmo/cs/bcomp/ui/components/loc.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ protected Object[][] getContents() {
2020
{"stop", "F9 Stop "},
2121
{"basename", "Basic computer"},
2222
{"assembler", "Assembler"},
23-
{"output", "Dev-1 (0x2-0x3) Output device"},
24-
{"input", "Dev-2 (0x4-0x5) Input device"},
25-
{"IO", "Dev-3 (0x6-0x7) IO device"},
23+
{"output", "CDev-1 (0x2-0x3) Controller of output device"},
24+
{"input", "CDev-2 (0x4-0x5) Controller of input device"},
25+
{"IO", "CDev-3 (0x6-0x7) Controller of IO device"},
2626
{"ready", "Ready"},
27-
{"DEV-1", "Dev 1"},
28-
{"DEV-2", "Dev 2"},
29-
{"DEV-3", "Dev 3"},
30-
{"DEV-4", "Dev 4"},
27+
{"DEV-1", "CDev 1"},
28+
{"DEV-2", "CDev 2"},
29+
{"DEV-3", "CDev 3"},
30+
{"DEV-4", "CDev 4"},
3131
{"DEV-5", "Dev 5"},
3232
{"DEV-6", "Dev 6"},
3333
{"DEV-7", "Dev 7"},

‎bcomp-ng-ui/src/main/java/ru/ifmo/cs/bcomp/ui/components/loc_ru.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ protected Object[][] getContents() {
1919
{"stop", "F9 Останов"},
2020
{"basename", "Базовая ЭВМ"},
2121
{"assembler", "Ассемблер"},
22-
{"output", "ВУ-1 (0x2-0x3) Устройство вывода"},
23-
{"input", "ВУ-2 (0x4-0x5) Устройство ввода"},
24-
{"IO", "ВУ-3 (0x6-0x7) Устройство ввода-вывода"},
22+
{"output", "КВУ-1 (0x2-0x3) Контроллер уст-ва вывода"},
23+
{"input", "КВУ-2 (0x4-0x5) Контроллер уст-ва ввода"},
24+
{"IO", "КВУ-3 (0x6-0x7) Контроллер уст-ва ввода-вывода"},
2525
{"ready", "Готов"},
26-
{"DEV-1", "ВУ 1"},
27-
{"DEV-2", "ВУ 2"},
28-
{"DEV-3", "ВУ 3"},
29-
{"DEV-4", "ВУ 4"},
26+
{"DEV-1", "КВУ 1"},
27+
{"DEV-2", "КВУ 2"},
28+
{"DEV-3", "КВУ 3"},
29+
{"DEV-4", "КВУ 4"},
3030
{"DEV-5", "ВУ 5"},
3131
{"DEV-6", "ВУ 6"},
3232
{"DEV-7", "ВУ 7"},

0 commit comments

Comments
 (0)