Patron, я смотрю, Jonathan Harston портировал свой BBC Basic под этот эмулятор:
https://mdfs.net/Software/PDP11/BBCB...ocs/RT11Em.htm
Но он там жалуется на какую-то ошибку установки флагов:
I had to add a workaround for a bug in RT11Em.
After MOV Rn,-(sp) RT11Em fails to set NE/EQ correctly. On all other PDP11 platforms tested, EQ/NE is set correctly.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Действительно, в эмуляторе RT-11 для отдельных часто встречающихся кодов операций применены выборочные оптимизации, которых нет в эмуляторе PDP-11, и для команд вида MOV Rn,-(SP) как раз используется отдельный программный код для каждого из регистров:
Код:void CPU11::Cmd_010046( word ) {// MOV R0,-(SP) SP -= 2; WordWrite( SP, R0 ); PSW &= ~(V|Z|N); if( (signed short)R0 < 0 ) { PSW |= N; } else if( R0 == 0 ) { PSW |= Z; } }
Тогда как в универсальном эмуляторе используется общий код для всех регистров, который выполняется дольше:
Код:if( nWord <= 017777 ) { byte nOp1 = (nWord & 07700)>>6; word wOperand1; WordRead0( nOp1, wOperand1 ); // MOV WordWrite2( nWord & 077, nOp1, wOperand1 ); PSW &= ~(V|Z|N); if( (signed short) wOperand1 < 0 ) { PSW |= N; } else if( wOperand1 == 0 ) { PSW |= Z; } continue; // goto RETURN_TRUE; }
На первый взгляд - оба варианта кода должны работать одинаково.
...
Ошибка найдена (и она впечатляет своей эпичностью):
- - - Добавлено - - -Код:void CPU11::Cmd_010146( word ) {// MOV R1,-(SP) SP -= 2; WordWrite( SP, R1 ); PSW &= ~(V|Z|N); if( (signed short)R1 < 0 ) { PSW |= N; } else if( R0 == 1 ) // Должно быть if( R1 == 0 ) { PSW |= Z; } }
...
Исправленная версия эмулятора: RT-11_Emulator_16.01.2022
Последний раз редактировалось Patron; 04.09.2022 в 22:27.
@Patron я сейчас наблюдаю ситуацию: файлы на MACRO, все в кодировке КОИ-8Р.
Но один из файлов, подставляемый в INCLUDE оказывается в другой кодировке.
Есть ли автоопределение кодировки и перекодирование на лету в эмуляторе rt11?
Можно ли это отключить?
Если речь про подключенный каталог Windows, то действуют довольно сложные правила перекодировок, повлиять на которые невозможно.
1. При сохранении файла в каталоге Windows средствами эмулятора - те файлы, которые в этот момент опознаны как текстовые, перекодируются в кодировку WIN и лишаются завершающих нулей.
2. При чтении из каталога Windows средствами эмулятора - все файлы дополняются нулями до границы блока 512 байт и затем те из них, которые в этот момент опознаны как текстовые файлы с кодировками WIN и DOS, перекодируются в KOI-8.
Если, например, каким-то способом поместить в каталог Windows текстовый файл в кодировке КОИ-7 - он будет прочитан эмулятором без изменений, но при любой модификации будет сохранён в кодировке WIN и при последующем чтении уже будет перекодироваться в КОИ-8.
Поэтому, если прочитанный эмулятором из подключенного каталога текстовый файл не имеет кодировки КОИ-8 - это означает, что данный файл не имел в каталоге Windows кодировки КОИ-8 и при чтении не был опознан эмулятором как текстовый файл в кодировке WIN или DOS.
Последний раз редактировалось Patron; 16.10.2023 в 15:12.
Перевёл файлы в кодировку Windows 1251, какое-то время это помогало.
После некоторых изменений в файле раз и его перестаёт правильно определять, внутри rt11 он опять воспринимается кракозяблами.
Проблема как раз в ненадёжности детектора кодировки, он лажает.
Хотелось бы возможность совсем отключать детектор, чтобы файлы читались как есть.
Сохранение файлов меня волнует в меньшей степени.
- - - Updated - - -
Во вложении архив с двумя файлами.
Выполняем команды:
rt11.exe TYPE A.MAC
-- всё хорошо
rt11.exe TYPE B.MAC
-- кракозяблы.
Оба файла в кодировке Windows 1251.
В файле B.MAC добавлены ТРИ строчки.
- - - Updated - - -
Нужен какой-то workaround хотя бы. Типа вставить что-то в файл, чтобы он гарантированно правильно определялся.
UPD: Похоже что символ многоточия начисто сбивает детектор кодировки, не смотря на весь остальной текст.
Последний раз редактировалось nzeemin; 24.10.2023 в 00:26.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)