Просмотр полной версии : Эмулятор БК-0010-01, БК-0011 и БК-0011М
kibertorm
22.12.2025, 12:40
ищу эмулятор с отрытой лицензией и исходным кодом, возможностью сборки через gcc/современные компиляторы, в идеале - терминал без дисплея, как simh
есть ли относительно живой такой проект? я нашел этот, https://github.com/andpp/bkemu-QT но пока запустить не получилось. какой можно попробовать?
так что давайте, можно без программ, просто таблицы с данными.
Ну для начала фото с экранов - https://disk.yandex.ru/d/IvDKzriD7N3dug.
Для БК-0010-01 измеряли на двух компьютерах. Там где фото с цветного экрана, он более быстрый, но там стоит кварц на 12,288 МГц. С черно-белого экрана более меленный. Измерили даже на FPGA MIST. Для БК-0011М тестировали только на одном.
Значения по тестам БК-0010-01 в вашем эмуляторе совпадают с более медленным БК.
- - - Добавлено - - -
Сначала результаты на БК-0010-01.
Двухоперандные команды. Их можно разделить на четыре группы:
1. Используется только запись в DST - команда MOV
2. Используется только запись в DST - команда MOVB. Я её выношу отдельно, т.к. по микрокоду запись слова в регистр отличается от записи байта. Для БК с медленной памятью по тактам отличий не видно.
3. Используется только чтение в DST - команды CMP, CMPB, BIT, BITB.
4. Используется цикл RMW в DST - команды BIC, BICB, BIS, BISB, ADD, SUB.
Быстрая БК
MOV 01 11 21 31 41 51 61 71
00 12.0 32.0 36.0 44.0 36.0 44.0 44.0 52.0
10 24.0 40.0 40.0 48.0 40.0 48.0 48.0 56.0
20 24.0 40.0 40.0 48.0 40.0 48.0 48.0 56.0
30 32.0 48.0 48.0 56.0 48.0 56.0 56.0 64.0
40 28.0 40.0 40.0 48.0 40.0 48.0 48.0 56.0
50 36.0 48.0 48.0 56.0 48.0 56.0 56.0 64.0
60 32.0 48.0 48.0 56.0 48.0 56.0 56.0 64.0
70 40.0 56.0 56.0 64.0 56.0 64.0 64.0 72.0
Медленная БК
MOV 01 11 21 31 41 51 61 71
00 12.0 32.0 36.0 44.0 36.0 44.0 44.0 56.0
10 28.0 40.0 40.0 48.0 40.0 48.0 48.0 60.0
20 28.0 40.0 40.0 48.0 40.0 48.0 48.0 60.0
30 40.0 52.0 52.0 60.0 52.0 60.0 60.0 72.0
40 28.0 44.0 44.0 52.0 44.0 52.0 52.0 64.0
50 40.0 56.0 56.0 64.0 56.0 64.0 64.0 76.0
60 40.0 52.0 52.0 60.0 52.0 60.0 60.0 72.0
70 52.0 64.0 64.0 72.0 64.0 72.0 72.0 84.0
Быстрая БК
CMP 01 11 21 31 41 51 61 71
00 12.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0
10 24.0 36.0 36.0 44.0 36.0 44.0 44.0 52.0
20 24.0 36.0 36.0 44.0 36.0 44.0 44.0 52.0
30 32.0 44.0 44.0 52.0 44.0 52.0 52.0 60.0
40 28.0 36.0 36.0 44.0 36.0 44.0 44.0 52.0
50 36.0 44.0 44.0 52.0 44.0 52.0 52.0 60.0
60 32.0 44.0 44.0 52.0 44.0 52.0 52.0 60.0
70 40.0 52.0 52.0 60.0 52.0 60.0 60.0 68.0
Медленная БК
CMP 01 11 21 31 41 51 61 71
00 12.0 32.0 32.0 44.0 32.0 44.0 44.0 56.0
10 28.0 36.0 36.0 48.0 36.0 48.0 48.0 60.0
20 28.0 36.0 36.0 48.0 36.0 48.0 48.0 60.0
30 40.0 48.0 48.0 60.0 48.0 60.0 60.0 72.0
40 28.0 40.0 40.0 52.0 40.0 52.0 52.0 64.0
50 40.0 52.0 52.0 64.0 52.0 64.0 64.0 76.0
60 40.0 48.0 48.0 60.0 48.0 60.0 60.0 72.0
70 52.0 60.0 60.0 72.0 60.0 72.0 72.0 84.0
Быстрая БК
ADD 01 11 21 31 41 51 61 71
00 12.0 36.0 36.0 44.0 36.0 44.0 44.0 52.0
10 24.0 40.0 40.0 48.0 40.0 48.0 48.0 56.0
20 24.0 40.0 40.0 48.0 40.0 48.0 48.0 56.0
30 32.0 48.0 48.0 56.0 48.0 56.0 56.0 64.0
40 28.0 40.0 40.0 48.0 40.0 48.0 48.0 56.0
50 36.0 48.0 48.0 56.0 48.0 56.0 56.0 64.0
60 32.0 48.0 48.0 56.0 48.0 56.0 56.0 64.0
70 40.0 56.0 56.0 64.0 56.0 64.0 64.0 72.0
Медленная БК
ADD 01 11 21 31 41 51 61 71
00 12.0 36.0 36.0 48.0 36.0 48.0 48.0 60.0
10 28.0 40.0 40.0 52.0 40.0 52.0 52.0 64.0
20 28.0 40.0 40.0 52.0 40.0 52.0 52.0 64.0
30 40.0 52.0 52.0 64.0 52.0 64.0 64.0 76.0
40 28.0 44.0 44.0 56.0 44.0 56.0 56.0 68.0
50 40.0 56.0 56.0 68.0 56.0 68.0 68.0 80.0
60 40.0 52.0 52.0 64.0 52.0 64.0 64.0 76.0
70 52.0 64.0 64.0 76.0 64.0 76.0 76.0 88.0
- - - Добавлено - - -
Отдельно сделан тест, если в качестве регистра при регистровой адресации используется счётчик команд PC. Всё дело в том, что если команда использует в SRC и DST оба регистра и один из них PC, либо в DST используется регистр и он PC, то в этом случае запускается предварительное чтение команды, но т.к. используется счётчик команд, то результаты чтения не используются и команда перечитывается снова. В результате более долгое исполнение.
В результатах все колонки, кроме последней используют команду OP2 ss, PC, т.е в ss все возможные методы адресации, а в качестве DST используется PC. Последняя колонка 07 эта команда OP2 PC, R1, т.е. регистровая команда, где в качестве SRC используется PC.
Быстрая БК
OP2PC 01 11 21 31 41 51 61 71 07
MOV 20.0 ***** 32.0 40.0 32.0 40.0 40.0 48.0 20.0
CMP 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
CMPB 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
BIT 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
BITB 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
BIC 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
BICB 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
BIS 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
BISB 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
ADD 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
SUB 20.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 20.0
Медленная БК
OP2PC 01 11 21 31 41 51 61 71 07
MOV 20.0 ***** 32.0 44.0 36.0 48.0 44.0 56.0 20.0
CMP 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
CMPB 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
BIT 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
BITB 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
BIC 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
BICB 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
BIS 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
BISB 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
ADD 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
SUB 20.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 20.0
Звёздочки означают, что для команды невозможен тест в линейной последовательности. Вместо MOV R1,PC реально исполняется MOV PC,PC, на результат это не влияет. Нету команды MOVB из-за её глюка.
- - - Добавлено - - -
Однооперандные команды. Хотя формально XOR двухоперандная, но SRC у неё является регистром, поэтому она включена сюда.
OP1 01 11 21 31 41 51 61 71 07
CLR 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
CLRB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
COM 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
COMB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
INC 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
INCB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
DEC 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
DECB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
NEG 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
NEGB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
ADC 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 20.0
ADCB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 20.0
SBC 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 20.0
SBCB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 20.0
TST 12.0 24.0 24.0 32.0 24.0 32.0 32.0 40.0 20.0
TSTB 12.0 24.0 24.0 32.0 24.0 32.0 32.0 40.0 20.0
ROR 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
RORB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
ROL 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
ROLB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
ASR 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
ASRB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
ASL 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
ASLB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
SWAB 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
SXT 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
MTPS 24.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
MFPS 12.0 28.0 28.0 36.0 28.0 36.0 36.0 44.0 *****
XOR 12.0 32.0 32.0 40.0 32.0 40.0 40.0 48.0 *****
OP1 01 11 21 31 41 51 61 71 07
CLR 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
CLRB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
COM 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
COMB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
INC 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
INCB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
DEC 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
DECB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
NEG 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
NEGB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
ADC 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 20.0
ADCB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 20.0
SBC 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 20.0
SBCB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 20.0
TST 12.0 24.0 24.0 36.0 28.0 40.0 36.0 48.0 20.0
TSTB 12.0 24.0 24.0 36.0 28.0 40.0 36.0 48.0 20.0
ROR 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
RORB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
ROL 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
ROLB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
ASR 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
ASRB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
ASL 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
ASLB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
SWAB 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
SXT 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
MTPS 24.0 32.0 32.0 44.0 36.0 48.0 44.0 56.0 *****
MFPS 12.0 28.0 28.0 40.0 32.0 44.0 40.0 52.0 *****
XOR 12.0 32.0 32.0 44.0 32.0 44.0 44.0 56.0 *****
- - - Добавлено - - -
Команды JMP и JSR.
Медленная БК
J.. 21 31 51 61 71 17
JMP 24.0 32.0 36.0 32.0 44.0 24.0
JSR 36.0 40.0 44.0 40.0 52.0 32.0
CALL 36.0 40.0 44.0 40.0 52.0 32.0
- - - Добавлено - - -
Прочие команды.
RTS R5 32.0
RETURN 32.0
RTI 40.0
RTT 40.0
BPT+RTI 104.0
IOT+RTI 104.0
EMT+RTI 104.0
TRAP+RTI 104.0
TR4 R+RTI 168.0
TR4 W+RTI 176.0
TRAP10+RTI 104.0
NOP 12.0
CCC 12.0
SCC 12.0
BR 16.0
BNE 16.0
BEQ 16.0
MARK 32.0
RTS R5 32.0
RETURN 32.0
RTI 40.0
RTT 40.0
BPT+RTI 104.0
IOT+RTI 104.0
EMT+RTI 104.0
TRAP+RTI 104.0
TR4 R+RTI 168.0
TR4 W+RTI 176.0
TRAP10+RTI 104.0
NOP 12.0
CCC 12.0
SCC 12.0
BR 16.0
BNE 16.0
BEQ 16.0
MARK 32.0
- - - Добавлено - - -
Команда SOB. В верхней части регистр загружается определённым значением, запускается таймер и исполняется команда SOB R0,. Затем считывается значение таймера. Во второй половине выполняется последовательность из 1280 команд MOV R1,R0 / SOB R0,. Затем рассчитывается за сколько тактов она выполняется.
SOB R0, .
65536-10240 32768- 5120 16384- 2560 8192- 1280
4096- 640 2048- 320 1024- 160 512- 80
256- 40 128- 20 64- 10 32- 5
16- 2 8- 1 4- 1 2- 0
1- 0
MOV R1, R0
SOB R0, .
R0 = 7 156.0
R0 = 6 136.0
R0 = 5 116.0
R0 = 4 96.0
R0 = 3 76.0
R0 = 2 56.0
R0 = 1 36.0
SOB R0, .
65536-10240 32768- 5120 16384- 2560 8192- 1280
4096- 640 2048- 320 1024- 160 512- 80
256- 40 128- 20 64- 10 32- 5
16- 2 8- 1 4- 1 2- 0
1- 0
MOV R1, R0
SOB R0, .
R0 = 7 156.0
R0 = 6 136.0
R0 = 5 116.0
R0 = 4 96.0
R0 = 3 76.0
R0 = 2 56.0
R0 = 1 36.0
Видно, что каждая итерация команды SOB занимает 20 тактов процессора. Если загружено значение 1, то получается, что SOB исполняется за 24 такта, т.к. время исполнения регистровой команды MOV составляет 12 тактов. Хотя по микрокоду отличие только в том, что если при декременте регистра получилось нулевое значение, то новое значение счётчика команд заносится во внутренний регистр R12, а не в счётчик команд. Вроде время должно быть одинаковым, но вот получается вот так.
BlaireCas
22.12.2025, 19:28
Меня эмулятор как таковой, почти полностью устраивает.
Да эмулятор супер, никто-ж не спорит. Без него как без рук!
Просто сами не можем понять почему Зальцман Зальцманом, а когда пытаешься переключать палитру по ходу движения луча - вроде цикл который должен укладываться в 256 тактов на 11М (одна строка экрана) - имеет различия в эмуляторе и в реале.
Хотя это слишком "извращенные, слишком точные" уже штуки :)
Более того благодаря Alex_K провели тест на 11М
mov R1, (R0) - где R0=177662
Такой набор из кучи команд выполняет каждую за 32 такта.
Далее делаем кучу команд nop
Считаем - каждая по 16 тактов
А теперь чудеса 037-й микросхемы :)
Делаем
mov R1, (R0)
nop
и такую кучу команд повторяющихся - суммарное время двух команд = 42.7 такта (а вовсе не 48)
В эмуляторе такое делать разумеется полный атас :) Так-что окей. Это просто надо будет учитывать при кодинге где скажем используется луч экрана.
имеет различия в эмуляторе и в реале
Очевидно же почему - у меня эмулятор, а не симулятор. Тут много условностей, и нюансов, которые не учитываются.
У меня есть и модель потактового симулятора на основе верилога. Только она работает почти в пошаговом режиме. Максимум, чего удалось добиться - работы на частоте в 500кГц, ну я её и забросил.
А теперь чудеса 037-й микросхемы
Это всё влияние предвыборки, и работа 6МГц 037й и 4МГц ВМ1. Вы попробуйте погонять тесты на турбированном процессоре на 6МГц.
Казалось бы, что должно быть всё проще, как на БК10 с 3МГц, но фиг там, у меня например тайминги себя стали вести ещё более непредсказуемо.
- - - Добавлено - - -
Ещё имейте в виду задержки RPLY (резистор R28) и DOUT (конденсатор C8). Если резистор закоротить, а ёмкость конденсатора уменьшить вдвое, то БК заработает ещё быстрее без изменения частоты.
kibertorm
23.12.2025, 16:40
подскажите пожалуйста, а как запустить bkbtl?
https://github.com/nzeemin/bkbtl/tree/master
я скачал и распаковал диск http://astio.ciotoni.net/tetris/games.dsk
скачал и собрал эмулятор, там есть подключение дискеты и подключение bin файла, я пробовал и распакованный cat,sav передавать, и как образ диска rl11 (games.dsk) и как bin и как дискету.
bkbtl не падает с ошибкой, но ничего не происходит.
команды L / LOAD / G не влияют на загрузку, просто выводятся на экран
я скачал и распаковал диск
Зачем? Не надо образы распаковывать, их монтировать надо.
Вам же в другой теме сказали, что cat.sav - игра для БК11М под бкшый RT-11. Вот и надо теперь скачать ещё образ с системой ОС-БК, примонтировать его в дисковод А:, а образ games.dsk - в дисковод B:, загрузиться с системного образа и далее предполагается, что вы знаете и умеете работать в RT-11.
Подсовывать эмулятору bin файл cat.sav из образа не имеет смысла, т.к. это файл под RT-11, ему требуется система для функционирования.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot