Alex_K, Процессор 1801ВМ1 с драйвером EM.SYS тоже может FIS.
Вид для печати
Alex_K, Процессор 1801ВМ1 с драйвером EM.SYS тоже может FIS.
По аналогии с программой проверки разрядности мантиссы, предложенной nzeemin, написана программа выводящая результаты каждой итерации:
Неприятным моментом стало то, что Паскаль при выводе вещественных чисел, после запятой выводит только шесть десятичных разрядов, если число больше единицы, а вот если меньше, то уже все. Поэтому и сделан вывод Y-X, где X=1.0, чтобы полностью посмотреть все числа за запятой.Код:program MANTP;
var X,Y,E:real; N:integer;
begin
X:=1.0; E:=1.0;
N:=0;
repeat
E:=E/2.0; Y:=X+E;
N:=N+1;
writeln('E=',E:12:10,' Y=',Y:12:10,(Y-X):12:10,' N=',N:2);
until Y=1.0
end.
Программа запускалась на эмуляторе ДВК Patron-а в конфигурациях с процессорами 1801ВМ1 (используется эмулятор FIS Паскаля) и 1801ВМ2 (используется эмулятор в ПЗУ 1801РЕ2-055). Также была запущена на УКНЦ (эмулятор в ПЗУ УКНЦ). В эмуляторе EmuStudio Союз-Неон Titus-а оценить не удалось, т.к. там не сделана эмуляция вызова команд FIS по вектору SEL010, хотя в EmuStudio УКНЦ это реализовано. Надеюсь автор исправит недочет и мы сможем оценить эмулятор FIS в ПЗУ Союз-Неон.
Ну теперь собственно результаты, они везде одинаковые:
Весьма интересна итерация с номером 24. Там при сложении X+E возникает момент, что результат не помещается в 23 разряда мантиссы, а выпадающий 24-й разряд равен единице и все эмуляторы делают "округление" в большую сторону, вот потому и получается в результате 25.Код:E= 0.5000000000 Y= 1.5000000000 0.5000000000 N= 1
E= 0.2500000000 Y= 1.2500000000 0.2500000000 N= 2
E= 0.1250000000 Y= 1.1250000000 0.1250000000 N= 3
E= 0.0625000000 Y= 1.0625000000 0.0625000000 N= 4
E= 0.0312500000 Y= 1.0312500000 0.0312500000 N= 5
E= 0.0156250000 Y= 1.0156250000 0.0156250000 N= 6
E= 0.0078125000 Y= 1.0078130000 0.0078125000 N= 7
E= 0.0039062500 Y= 1.0039060000 0.0039062500 N= 8
E= 0.0019531250 Y= 1.0019530000 0.0019531250 N= 9
E= 0.0009765625 Y= 1.0009770000 0.0009765625 N=10
E= 0.0004882813 Y= 1.0004880000 0.0004882813 N=11
E= 0.0002441406 Y= 1.0002440000 0.0002441406 N=12
E= 0.0001220703 Y= 1.0001220000 0.0001220703 N=13
E= 0.0000610352 Y= 1.0000610000 0.0000610352 N=14
E= 0.0000305176 Y= 1.0000310000 0.0000305176 N=15
E= 0.0000152588 Y= 1.0000150000 0.0000152588 N=16
E= 0.0000076294 Y= 1.0000080000 0.0000076294 N=17
E= 0.0000038147 Y= 1.0000040000 0.0000038147 N=18
E= 0.0000019073 Y= 1.0000020000 0.0000019073 N=19
E= 0.0000009537 Y= 1.0000010000 0.0000009537 N=20
E= 0.0000004768 Y= 1.0000000000 0.0000004768 N=21
E= 0.0000002384 Y= 1.0000000000 0.0000002384 N=22
E= 0.0000001192 Y= 1.0000000000 0.0000001192 N=23
E= 0.0000000596 Y= 1.0000000000 0.0000001192 N=24
E= 0.0000000298 Y= 1.0000000000 0.0000000000 N=25
Хотелось, чтобы программу запустили на аппаратной реализации FIS, например на "Электронике-60", неплохо бы и на LSI-11.
- - - Добавлено - - -
Попробовал и с ним, результат программы MANTP аналогичный, как и в других случаях.
По аналогии с программой на Паскале, соответственно две программы на Си - для одинарной и двойной точности:
Код:$$narg=1;
#include <stdio.h>
main()
{
float X=1.0, Y=2.0, E=1.0;
int N=0;
do
{
E=E/2.0; Y=X+E;
N++;
printf("E=%12.10f Y=%12.10f %12.10f N=%2d\n",E,Y,Y-1.0,N);
}
while(Y!=1.0);
}
Хотя такой проблемы с выводом количества значащих разрядов после запятой, как на Паскале, в Си не оказалось, но концепция вывода осталась той же. Так как техники с аппаратной реализацией FP-11 не оказалось, то пришлось довольствоваться эмулятором FP-11 в самом Си.Код:$$narg=1;
#include <stdio.h>
main()
{
double X=1.0, Y=2.0, E=1.0;
int N=0;
do
{
E=E/2.0; Y=X+E;
N++;
printf("E=%22.20f Y=%22.20f %22.20f N=%2d\n",E,Y,Y-1.0,N);
}
while(Y!=1.0);
}
Одинарная точность:
Двойная точность:Код:E=0.5000000000 Y=1.5000000000 0.5000000000 N= 1
E=0.2500000000 Y=1.2500000000 0.2500000000 N= 2
E=0.1250000000 Y=1.1250000000 0.1250000000 N= 3
E=0.0625000000 Y=1.0625000000 0.0625000000 N= 4
E=0.0312500000 Y=1.0312500000 0.0312500000 N= 5
E=0.0156250000 Y=1.0156250000 0.0156250000 N= 6
E=0.0078125000 Y=1.0078125000 0.0078125000 N= 7
E=0.0039062500 Y=1.0039062500 0.0039062500 N= 8
E=0.0019531250 Y=1.0019531250 0.0019531250 N= 9
E=0.0009765625 Y=1.0009765625 0.0009765625 N=10
E=0.0004882813 Y=1.0004882813 0.0004882813 N=11
E=0.0002441406 Y=1.0002441406 0.0002441406 N=12
E=0.0001220703 Y=1.0001220703 0.0001220703 N=13
E=0.0000610352 Y=1.0000610352 0.0000610352 N=14
E=0.0000305176 Y=1.0000305176 0.0000305176 N=15
E=0.0000152588 Y=1.0000152588 0.0000152588 N=16
E=0.0000076294 Y=1.0000076294 0.0000076294 N=17
E=0.0000038147 Y=1.0000038147 0.0000038147 N=18
E=0.0000019073 Y=1.0000019073 0.0000019073 N=19
E=0.0000009537 Y=1.0000009537 0.0000009537 N=20
E=0.0000004768 Y=1.0000004768 0.0000004768 N=21
E=0.0000002384 Y=1.0000002384 0.0000002384 N=22
E=0.0000001192 Y=1.0000001192 0.0000001192 N=23
E=0.0000000596 Y=1.0000000000 0.0000000000 N=24
Ну как видно по результатам одинарной точности, эмулятор FP-11 в Си никакого "округления" не делает, вот и получается 24 итерации вместо 25.Код:E=0.50000000000000000000 Y=1.50000000000000000000 0.50000000000000000000 N= 1
E=0.25000000000000000000 Y=1.25000000000000000000 0.25000000000000000000 N= 2
E=0.12500000000000000000 Y=1.12500000000000000000 0.12500000000000000000 N= 3
E=0.06250000000000000000 Y=1.06250000000000000000 0.06250000000000000000 N= 4
E=0.03125000000000000000 Y=1.03125000000000000000 0.03125000000000000000 N= 5
E=0.01562500000000000000 Y=1.01562500000000000000 0.01562500000000000000 N= 6
E=0.00781250000000000000 Y=1.00781250000000000000 0.00781250000000000000 N= 7
E=0.00390625000000000000 Y=1.00390625000000000000 0.00390625000000000000 N= 8
E=0.00195312500000000000 Y=1.00195312500000000000 0.00195312500000000000 N= 9
E=0.00097656250000000000 Y=1.00097656250000000000 0.00097656250000000000 N=10
E=0.00048828125000000000 Y=1.00048828125000000000 0.00048828125000000000 N=11
E=0.00024414062500000000 Y=1.00024414062500000000 0.00024414062500000000 N=12
E=0.00012207031250000000 Y=1.00012207031250000000 0.00012207031250000000 N=13
E=0.00006103515625000000 Y=1.00006103515625000000 0.00006103515625000000 N=14
E=0.00003051757812500000 Y=1.00003051757812500000 0.00003051757812500000 N=15
E=0.00001525878906250000 Y=1.00001525878906250000 0.00001525878906250000 N=16
E=0.00000762939453125000 Y=1.00000762939453125000 0.00000762939453125000 N=17
E=0.00000381469726562500 Y=1.00000381469726562500 0.00000381469726562500 N=18
E=0.00000190734863281250 Y=1.00000190734863281250 0.00000190734863281250 N=19
E=0.00000095367431640625 Y=1.00000095367431640625 0.00000095367431640625 N=20
E=0.00000047683715820313 Y=1.00000047683715820313 0.00000047683715820313 N=21
E=0.00000023841857910156 Y=1.00000023841857910156 0.00000023841857910156 N=22
E=0.00000011920928955078 Y=1.00000011920928955078 0.00000011920928955078 N=23
E=0.00000005960464477539 Y=1.00000005960464477539 0.00000005960464477539 N=24
E=0.00000002980232238770 Y=1.00000002980232238770 0.00000002980232238770 N=25
E=0.00000001490116119385 Y=1.00000001490116119385 0.00000001490116119385 N=26
E=0.00000000745058059692 Y=1.00000000745058059692 0.00000000745058059692 N=27
E=0.00000000372529029846 Y=1.00000000372529029846 0.00000000372529029846 N=28
E=0.00000000186264514923 Y=1.00000000186264514923 0.00000000186264514923 N=29
E=0.00000000093132257462 Y=1.00000000093132257462 0.00000000093132257462 N=30
E=0.00000000046566128731 Y=1.00000000046566128731 0.00000000046566128731 N=31
E=0.00000000023283064365 Y=1.00000000023283064365 0.00000000023283064365 N=32
E=0.00000000011641532183 Y=1.00000000011641532183 0.00000000011641532183 N=33
E=0.00000000005820766091 Y=1.00000000005820766091 0.00000000005820766091 N=34
E=0.00000000002910383046 Y=1.00000000002910383046 0.00000000002910383046 N=35
E=0.00000000001455191523 Y=1.00000000001455191523 0.00000000001455191523 N=36
E=0.00000000000727595761 Y=1.00000000000727595761 0.00000000000727595761 N=37
E=0.00000000000363797881 Y=1.00000000000363797881 0.00000000000363797881 N=38
E=0.00000000000181898940 Y=1.00000000000181898940 0.00000000000181898940 N=39
E=0.00000000000090949470 Y=1.00000000000090949470 0.00000000000090949470 N=40
E=0.00000000000045474735 Y=1.00000000000045474735 0.00000000000045474735 N=41
E=0.00000000000022737368 Y=1.00000000000022737368 0.00000000000022737368 N=42
E=0.00000000000011368684 Y=1.00000000000011368684 0.00000000000011368684 N=43
E=0.00000000000005684342 Y=1.00000000000005684342 0.00000000000005684342 N=44
E=0.00000000000002842171 Y=1.00000000000002842171 0.00000000000002842171 N=45
E=0.00000000000001421085 Y=1.00000000000001421085 0.00000000000001421085 N=46
E=0.00000000000000710543 Y=1.00000000000000710543 0.00000000000000710543 N=47
E=0.00000000000000355271 Y=1.00000000000000355271 0.00000000000000355271 N=48
E=0.00000000000000177636 Y=1.00000000000000177636 0.00000000000000177636 N=49
E=0.00000000000000088818 Y=1.00000000000000088818 0.00000000000000088818 N=50
E=0.00000000000000044409 Y=1.00000000000000044409 0.00000000000000044409 N=51
E=0.00000000000000022204 Y=1.00000000000000022204 0.00000000000000022204 N=52
E=0.00000000000000011102 Y=1.00000000000000011102 0.00000000000000011102 N=53
E=0.00000000000000005551 Y=1.00000000000000005551 0.00000000000000005551 N=54
E=0.00000000000000002776 Y=1.00000000000000002776 0.00000000000000002776 N=55
E=0.00000000000000001388 Y=1.00000000000000000000 0.00000000000000000000 N=56
Ну и по поводу запуска на аппаратной реализации FP-11, большая просьба к form запустить на PDP-11 c J-11, и к MiX на связке 1801ВМ3+1801ВМ4.
Далее выложу исходники и исполнимые модули для запуска в RT-11.
- - - Добавлено - - -
Собственно архив с исходниками на Паскале и Си и исполнимые модули для RT-11.
Ну не знаю, насколько одинаковая. Но в EmuStudio УКНЦ даже RESORC по команде SHOW CONF показывает, что есть набор FIS, да и после команды D 10=12,0 и запуска MANTP в пульт не вылетает. А вот в EmuStudio ПК-11 показывается, что есть только EIS, да и после D 10=12,0 и запуска MANTP происходит вылет в пульт.
Вот конфигурация эмулятора.
http://s019.radikal.ru/i623/1605/d4/c1c94376293c.png
ТМОС для этого есть.
ВМ3+ВМ4
MANF не запустился. Будет время, на J11 запущу.Код:.MANTP
E= 0.5000000000 Y= 1.5000000000 0.5000000000 N= 1
E= 0.2500000000 Y= 1.2500000000 0.2500000000 N= 2
E= 0.1250000000 Y= 1.1250000000 0.1250000000 N= 3
E= 0.0625000000 Y= 1.0625000000 0.0625000000 N= 4
E= 0.0312500000 Y= 1.0312500000 0.0312500000 N= 5
E= 0.0156250000 Y= 1.0156250000 0.0156250000 N= 6
E= 0.0078125000 Y= 1.0078130000 0.0078125000 N= 7
E= 0.0039062500 Y= 1.0039060000 0.0039062500 N= 8
E= 0.0019531250 Y= 1.0019530000 0.0019531250 N= 9
E= 0.0009765625 Y= 1.0009770000 0.0009765625 N=10
E= 0.0004882813 Y= 1.0004880000 0.0004882813 N=11
E= 0.0002441406 Y= 1.0002440000 0.0002441406 N=12
E= 0.0001220703 Y= 1.0001220000 0.0001220703 N=13
E= 0.0000610352 Y= 1.0000610000 0.0000610352 N=14
E= 0.0000305176 Y= 1.0000310000 0.0000305176 N=15
E= 0.0000152588 Y= 1.0000150000 0.0000152588 N=16
E= 0.0000076294 Y= 1.0000080000 0.0000076294 N=17
E= 0.0000038147 Y= 1.0000040000 0.0000038147 N=18
E= 0.0000019073 Y= 1.0000020000 0.0000019073 N=19
E= 0.0000009537 Y= 1.0000010000 0.0000009537 N=20
E= 0.0000004768 Y= 1.0000000000 0.0000004768 N=21
E= 0.0000002384 Y= 1.0000000000 0.0000002384 N=22
E= 0.0000001192 Y= 1.0000000000 0.0000001192 N=23
E= 0.0000000596 Y= 1.0000000000 0.0000001192 N=24
E= 0.0000000298 Y= 1.0000000000 0.0000000000 N=25
.MANTP
E= 0.5000000000 Y= 1.5000000000 0.5000000000 N= 1
E= 0.2500000000 Y= 1.2500000000 0.2500000000 N= 2
E= 0.1250000000 Y= 1.1250000000 0.1250000000 N= 3
E= 0.0625000000 Y= 1.0625000000 0.0625000000 N= 4
E= 0.0312500000 Y= 1.0312500000 0.0312500000 N= 5
E= 0.0156250000 Y= 1.0156250000 0.0156250000 N= 6
E= 0.0078125000 Y= 1.0078130000 0.0078125000 N= 7
E= 0.0039062500 Y= 1.0039060000 0.0039062500 N= 8
E= 0.0019531250 Y= 1.0019530000 0.0019531250 N= 9
E= 0.0009765625 Y= 1.0009770000 0.0009765625 N=10
E= 0.0004882813 Y= 1.0004880000 0.0004882813 N=11
E= 0.0002441406 Y= 1.0002440000 0.0002441406 N=12
E= 0.0001220703 Y= 1.0001220000 0.0001220703 N=13
E= 0.0000610352 Y= 1.0000610000 0.0000610352 N=14
E= 0.0000305176 Y= 1.0000310000 0.0000305176 N=15
E= 0.0000152588 Y= 1.0000150000 0.0000152588 N=16
E= 0.0000076294 Y= 1.0000080000 0.0000076294 N=17
E= 0.0000038147 Y= 1.0000040000 0.0000038147 N=18
E= 0.0000019073 Y= 1.0000020000 0.0000019073 N=19
E= 0.0000009537 Y= 1.0000010000 0.0000009537 N=20
E= 0.0000004768 Y= 1.0000000000 0.0000004768 N=21
E= 0.0000002384 Y= 1.0000000000 0.0000002384 N=22
E= 0.0000001192 Y= 1.0000000000 0.0000001192 N=23
E= 0.0000000596 Y= 1.0000000000 0.0000001192 N=24
E= 0.0000000298 Y= 1.0000000000 0.0000000000 N=25
- - - Добавлено - - -
Нет инструкций FIS. Надо бы прошивку проверить, может там и нет эмуляции FIS.
- - - Добавлено - - -
По поводу разбора прошивки это у меня к Alex_K просьба. ;)