├── .gitignore ├── README.md ├── bcomp-assembler ├── pom.xml └── src │ └── main │ └── java │ └── ru │ └── ifmo │ └── cs │ └── bcomp │ ├── assembler │ ├── AddressingMode.java │ ├── AsmNg.java │ ├── Assembler.java │ ├── AssemblerAntlrErrorStrategy.java │ ├── AssemblerException.java │ ├── Instruction.java │ ├── InstructionWord.java │ ├── Label.java │ ├── MemoryWord.java │ ├── Program.java │ └── WordDirective.java │ └── grammar │ ├── BCompNG.g4 │ ├── BCompNGBaseListener.java │ ├── BCompNGBaseVisitor.java │ ├── BCompNGLexer.java │ ├── BCompNGListener.java │ ├── BCompNGParser.java │ └── BCompNGVisitor.java ├── bcomp-ng-ui ├── pom.xml └── src │ └── main │ ├── java │ └── ru │ │ └── ifmo │ │ └── cs │ │ └── bcomp │ │ └── ui │ │ ├── BCompApp.java │ │ ├── CLI.java │ │ ├── GUI.java │ │ ├── MicroCodeDecoder.java │ │ ├── Nightmare.java │ │ ├── components │ │ ├── ALUView.java │ │ ├── ActivateblePanel.java │ │ ├── ActiveBitView.java │ │ ├── AssemblerView.java │ │ ├── BCompComponent.java │ │ ├── BCompLabel.java │ │ ├── BCompPanel.java │ │ ├── BasicView.java │ │ ├── BorderedComponent.java │ │ ├── BusNames.java │ │ ├── BusView.java │ │ ├── CommutView.java │ │ ├── ComponentManager.java │ │ ├── DebugView.java │ │ ├── DisplayStyles.java │ │ ├── FlagView.java │ │ ├── IOView.java │ │ ├── InputRegisterView.java │ │ ├── InputRegisterViewByte.java │ │ ├── MPView.java │ │ ├── MemoryView.java │ │ ├── MicroMemoryView.java │ │ ├── RegisterProperties.java │ │ ├── RegisterView.java │ │ ├── RunningCycleView.java │ │ ├── StateRegisterView.java │ │ ├── TraceView.java │ │ ├── loc.java │ │ └── loc_ru.java │ │ └── io │ │ ├── BComp2BCompIODev.java │ │ ├── ButtonPanel.java │ │ ├── ButtonReady.java │ │ ├── FirstIO.java │ │ ├── FlagIndicator.java │ │ ├── IODevice.java │ │ ├── Keyboard.java │ │ ├── Numpad.java │ │ ├── OutputDevice.java │ │ ├── SecondIO.java │ │ ├── SevenSegmentDisplay.java │ │ ├── TextPrinter.java │ │ ├── ThirdIO.java │ │ └── Ticker.java │ └── resources │ ├── Roboto-Medium.ttf │ ├── Roboto-Regular.ttf │ └── dark.xml ├── bcomp-ng ├── hs_err_pid21904.log ├── pom.xml └── src │ ├── main │ └── java │ │ └── ru │ │ └── ifmo │ │ └── cs │ │ └── bcomp │ │ ├── BasicComp.java │ │ ├── CPU.java │ │ ├── CPU2IO.java │ │ ├── ControlSignal.java │ │ ├── IOBuses.java │ │ ├── IOControlSignal.java │ │ ├── IOCtrl.java │ │ ├── IOCtrlAdv.java │ │ ├── IOCtrlBasic.java │ │ ├── IODevTimer.java │ │ ├── MCDecoder.java │ │ ├── MicroCode.java │ │ ├── ProgramBinary.java │ │ ├── Reg.java │ │ ├── RunningCycle.java │ │ ├── SignalListener.java │ │ └── State.java │ └── test │ └── java │ └── ru │ └── ifmo │ └── cs │ └── bcomp │ └── BasicCompTest.java ├── components ├── pom.xml └── src │ └── main │ └── java │ └── ru │ └── ifmo │ └── cs │ └── components │ ├── And.java │ ├── AutoIncRegister.java │ ├── BasicComponent.java │ ├── Bus.java │ ├── Comparer.java │ ├── Complement.java │ ├── Consts.java │ ├── Control.java │ ├── CtrlBus.java │ ├── DataAdd.java │ ├── DataAnd.java │ ├── DataCheckZero.java │ ├── DataConst.java │ ├── DataDestination.java │ ├── DataPart.java │ ├── DataSource.java │ ├── Decoder.java │ ├── Extender.java │ ├── InputBus.java │ ├── Memory.java │ ├── Not.java │ ├── PartWriter.java │ ├── PassValue.java │ ├── Register.java │ ├── Utils.java │ ├── Valve.java │ ├── ValveAnd.java │ ├── ValveCtrlInput.java │ ├── ValveTwo.java │ ├── ValveValue.java │ └── Xor.java ├── doc ├── BaseInstrSet.html ├── BaseMicroProgram.html ├── ExtendedInstrSet.html ├── ExtendedMicroProgram.html ├── OptimizedMicroProgram.html ├── asm.html ├── bcomp ├── bcomp.html ├── bcomp.jnlp ├── cli.bat ├── cli.html ├── decoder.html ├── gui.bat ├── gui.html ├── index.html ├── io.html └── nightmare.html ├── lab4_test.txt └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | /*/target/ 2 | /*/*.iml 3 | /*.iml 4 | /.idea/ 5 | /*.log -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BasicComputer 2 |  3 | 4 | ### Загрузка программы 5 | Загрузка программы позволяет быстро загружать ваши программы из .txt файла. 6 | 7 | Пример: 8 |
9 | 479a 10 | 0200 11 | EE16 12 | AE12 13 | 0C00 14 | .... 15 | EE04 16 | 0100 17 | 713a 18 | AC01 19 | F309 20 | 6E0B 21 | .... 22 | CE01 23 | AE02 24 | EC01 25 |26 | 27 | > где маленькая "a" - указывает с какого адреса начать вводить команды или данные. Так можно указывать несколько раз. Допустим, если вам нужно в другой части памяти записать подпрограмму 28 | 29 | [Пример 4 лабы](https://github.com/HackMemory/BasicComputer/blob/master/lab4_test.txt) 30 | 31 | ### Трассировка 32 | Чтобы выполнить трассировку, указываем сперва начало программы, а после нажимаем выполнение. Полученную трассировку можно экпортировать в csv файл. 33 |  34 | -------------------------------------------------------------------------------- /bcomp-assembler/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |
Наименование | 19 |Мнемоника | 20 |Код | 21 |Описание | 22 |
Адресные команды | |||
Приращение и пропуск | 26 |ISZ М | 27 |0XXX | 28 |(М) + 1 → М; Если (М) ≥ 0, то (СК) + 1 → СК | 29 |
Логическое умножение | 32 |AND М | 33 |1XXX | 34 |(A) & (М) → A |
Обращение к подпрограмме | 37 |JSR М | 38 |2XXX | 39 |(СК) → М; М + 1 → СК |
Пересылка | 42 |MOV М | 43 |3XXX | 44 |(A) → М |
Сложение | 47 |ADD М | 48 |4XXX | 49 |(A) + (М) → A |
Сложение с переносом | 52 |ADC М | 53 |5XXX | 54 |(A) + (С) + (М) → A |
Вычитание | 57 |SUB М | 58 |6XXX | 59 |(A) - (М) → A |
Переход, если перенос | 62 |BCS М | 63 |8XXX | 64 |Если (С) = 1, то М → СК |
Переход, если плюс | 67 |BPL М | 68 |9XXX | 69 |Если (N) = 0, то М → СК |
Переход, если минус | 72 |BMI М | 73 |AXXX | 74 |Если (N) = 1, то М → СК |
Переход, если нуль | 77 |BEQ М | 78 |BXXX | 79 |Если (Z) = 1, то М → СК |
Безусловный переход | 82 |BR М | 83 |CXXX | 84 |М → СК |
Безадресные команды | |||
Останов | 88 |HLT | 89 |F000 | 90 ||
Нет операции | 93 |NOP | 94 |F100 | 95 ||
Очистка аккумулятора | 98 |CLA | 99 |F200 | 100 |0 → А |
Очистка флага переноса | 103 |CLC | 104 |F300 | 105 |0 → С |
Инверсия аккумулятора | 108 |CMA | 109 |F400 | 110 |(!А) → А |
Инверсия флага переноса | 113 |CMC | 114 |F500 | 115 |(!С) → С |
Циклический сдвиг влево | 118 |ROL | 119 |F600 | 120 |Содержимое А и С сдвигается влево |
Циклический сдвиг вправо | 123 |ROR | 124 |F700 | 125 |Содержимое А и С сдвигается вправо |
Инкремент аккумулятора | 128 |INC | 129 |F800 | 130 |(А) + 1 → А |
Декремент аккумулятора | 133 |DEC | 134 |F900 | 135 |(А) - 1 → А |
Разрешение прерываний | 138 |EI | 139 |FA00 | 140 ||
Запрещение прерываний | 143 |DI | 144 |FB00 | 145 ||
Команды ввода-вывода | |||
Очистка флага ВУ | 149 |CLF ВУ | 150 |E0XX | 151 ||
Опрос флага ВУ | 154 |TSF ВУ | 155 |E1XX | 156 |Если флаг ВУ = 1, то (СК) + 1 → СК |
Ввод | 159 |IN ВУ | 160 |E2XX | 161 |(ВУ) → А |
Вывод | 164 |OUT ВУ | 165 |E3XX | 166 |(А) → ВУ |
Пуск
не очищает регистры РА, РК и РД.Ввод адреса
, Чтение
и Запись
происходит останов машины, а не переход на цикл прерывания.Пуск
записывает FFFF в ячейку 7FF.22 | java -jar -Dmode=decoder bcomp.jar 23 |24 |
26 | bcomp -d 27 |28 |
30 | bcomp -d 31 |32 |
-Dmp=optimized
.-Dmp=extended
.25 | appletviewer http://helios.cs.ifmo.ru/bcomp/bcomp.html 26 |27 | На компьютере должна быть установлена полная версия JDK.
bcomp31 | Данный способ рекомендуется при работе в аудитории 375. Удалённый запуск с сервера helios возможен, но требует наличия на клиенте X сервера и умения организации проброса X11.
java -jar bcomp.jar34 |
bcomp36 |
gui39 |
Сочетание клавиш | 45 |Действие | 46 |
Влево | Переход к следующему старшему биту | 49 |
Вправо | Переход к следующему младшему биту | 52 |
Вверх | Инвертировать выбранный бит |
0 | Установить выбранный бит в 0 |
1 | Установить выбранный бит в 1 |
F1 | Установка готовности ВУ1 |
F2 | Установка готовности ВУ2 |
F3 | Установка готовности ВУ3 |
F4 | 61 |Пультовая операция Ввод адреса |
62 |
F5 | Пультовая операция Запись |
65 |
F6 | Пультовая операция Чтение |
68 |
F7 | Пультовая операция Пуск |
71 |
F8 | Пультовая операция Продолжение |
74 |
F9 | 77 |Переключение режимов Работа и Останов |
78 |
F10 | Выход из программы |
F11 | 82 |Циклическое уменьшение задержки между тактами | 83 |
F12 | 86 |Циклическое увеличение задержки между тактами | 87 |
Shift+F1 | О программе |
Shift+F9 | Такт |
-Dmp=optimized
. При использовании shell скрипта bcomp необходимо указать ключ -o
. Использование оптимизированной микропрограммы невозможно при запуске эмулятора через Java Web Start или в качестве Applet.-Dmp=extended
. При использовании shell скрипта bcomp необходимо указать ключ -e
. Использование расширенной микропрограммы невозможно при запуске эмулятора через Java Web Start или в качестве Applet.Клавиша | Код |
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
- | A |
+ | B |
/ | C |
* | D |
. | E |
= | F |