С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
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.
Действительно, в эмуляторе 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.
воистину пошел. И в отличие от буржуйского basic.sav нормально выводит
print sin(1). Другие функции пока не попробовал.
Попробовал.
Гиперболических точно нет, только программой. И log(x) дает значение как ln(x), а последнего нет.
Еще есть ограничение для вложенных функций. sin(sin(x)) работает, а sin(sin(sin(x))) уже нет - пиши программу.
Графики тоже нет?
Последний раз редактировалось andrews; 25.10.2023 в 09:56.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)