PC-01 Lviv
http://pc01.lviv.ua/forum/

Быстродействие различных эмуляторов
http://pc01.lviv.ua/forum/viewtopic.php?f=12&t=380
Page 1 of 2

Author:  als [ 09 Jul 2020, 12:18 ]
Post subject:  Быстродействие различных эмуляторов

Когда-то, приблизительно год назад я занимался изучением быстродействия эмуляторов различных ретро-машин по контретной, простой как двери программе.
Запускал в различных эмуляторах (различных ретро-машин) вот такую программу:
Code:
200 b1=0:b2=0:CO=0
210 Print "Start..."
250 For b2=0 to 255
260 For b1=0 to 255
270 Next b1
280 Next b2
300 co=co+1:Print(co)
310 If co < 20 then Goto 250
320 Print"END."
Засекал время выполнения и делал заметки т.е. выводы по быстродействию (или может правильнее сказать по эффективности) различных эмуляторов (различных машин).
Почему я забросил эту тему и не выложил тогда, сейчас уже не вспомню. И вот я ее "нарыл" в "загашнике".
Весьма удивило быстродействие (эффективность) выполнения данной программы эмулятором "Atari800Win" по сравнению с другими эмуляторами. Посмотрите таблицу моих измерений выполнения программы различными эмуляторами. Может быть кто нибудь скажет мне почему "Atari800Win" "выглядит" не лучшим образом по сравнению з другими эмуляторами (компьютерами)?
Я не исключаю какого-то своего ошибочного измерения.
Постепенно пересмотрю весь архив и выложу файлы с программой (код) для различных эмуляторов, чтобы не набирать их вручную. Если у кого будет желания прошу проверить мою таблицу по данной программе или может быть предложить какие-то другие программы для измерения быстродействия (эффективности) различных эмуляторов (различных ретро-машин).


длительность выполнения 20 циклов (в секундах)/ средняя длительность виполнения 1 цикла (в секундах)
Code:
Агат-(3)Apple ][ Plus                  1817  /  90,85 
Башкирия(2017.12.01)- Орион-128"       1988  /  99,4
* Башкирия(2017.12.01)-Львов ПК-01     2224  /  111,2 
BK-0010_01                             2264  /  113,2
* SASemulator1.44Beta                  2279  /  113,95
Башкирия(2017.12.01)-MSX2              2415  /  120,75
Башкирия(2017.12.01)-MSX               2437  /  121,85
* Эмулятор 3000(v6.0)                  2494  /  124,7
blueMSX - MSX-2                        2569  /  128,45
Atari800Win                            2846  /  142,3
* LVOV105                              3862  /  193,1


Author:  als [ 09 Jul 2020, 13:10 ]
Post subject:  Re: Быстродействие различных эмуляторов

Бейсик-программа теста быстродействия
Code:
200 b1=0:b2=0:CO=0
210 Print "Start..."
250 For b2=0 to 255
260 For b1=0 to 255
270 Next b1
280 Next b2
300 co=co+1:Print(co)
310 If co < 20 then Goto 250
320 Print"END."
для различных эмуляторов (различных машин)
"01_Агат-(3)Apple ][ Plus-Basic"
"02_Башкирия(2017.12.01) - Орион-128"
"03_Башкирия(2017.12.01)-Львов ПК-01"
"04_Башкирия(2017.12.01)-BK-0010_01"
05_SASemulator1.44Beta
"06_Башкирия(2017.12.01)-MSX2"
"07_Башкирия(2017.12.01)-MSX"
"08_Эмулятор 3000(v6.0) - _ПК-01 Львов"
09_BlueMSX-Basic
10_ATARI
11_LVOV105
Attachment:
1.7z [141.25 KiB]
Downloaded 844 times

Author:  als [ 09 Jul 2020, 13:55 ]
Post subject:  Re: Быстродействие различных эмуляторов

Вот еще тестилка "в кодах" писанная
Attachment:
Test1.LVT [95 Bytes]
Downloaded 806 times
т.е. видимо такая же как для васика только для КР580.
Мнемонику асма-580 я толком не помню
поэтому "перековырял" исходник с МАДЛа в асм-580 и вот что получилось
(надеюсь понятно будет)
Code:
SetAddrRAM $8000 

T1:'START...   '+#13+#10+#0
T3:'END.   '+#13+#10+#0)


StartProgram:
T2:
LXI HL,T1
call $e4a4

LXI HL, $255

T5:
push HL
LXI HL, $FFFF

T4:
dcx HL

Mov A,H
Cpi $00
Jnz T4

Mov A,L
Cpi $00
Jnz $8025

Pop HL
Dcx HL

Mov A,H
Cpi $00
Jnz T5

Mov A,L
Cpi $00
Jnz T5

Lxi HL, T3
Call $E4A4 
JMP T2


Author:  als [ 09 Jul 2020, 15:00 ]
Post subject:  Re: Быстродействие различных эмуляторов

Программу Test1.LVT, SASemulator1.44Beta прокручивал 8 мин 3сек т.е. 483 сек но 255 циклов по 65536, т.е. 20 циклов равно 37,8823 сек, один цикл равен 1,8941 сек
Code:
SASemulator1.44Beta-Test1.LVT-ASM     37,8823 / 1,8941 
В среде Васика
Code:
* SASemulator1.44Beta                  2279  /  113,95
получается разница быстродействия Васика и асма в 60 раз!
Думал хотя бы в 30 раз! :D

Author:  als [ 11 Jul 2020, 13:47 ]
Post subject:  Re: Быстродействие различных эмуляторов

Аналогичные программы по измерению быстродействия для современных компьютеров
Attachment:
TestProg.7z [669.34 KiB]
Downloaded 812 times

Архив "TestProg.7z":

32bit:
D7Console.exe - скомплилированна Дельфи 7, консольный режим
D7FORM.exe - скомплилированна Дельфи 7, "форма"
fpc2_6_0_console.exe - скомпилирована Free Pascal 2.6.0
fpc3_0_4_console.exe - скомпилирована Free Pascal 3.0.4

16bit:
D1FORM - скомплилированна Дельфи 1, "форма"
1TP.EXE - скомпилирована Borland Pascal 7, Real mode Application
2TP.EXE - скомпилирована Borland Pascal 7, Protected mode Application
3TP.EXE - скомпилирована Borland Pascal 7, Windows Application

d7console.apk -скомпилирована PascalGUI 3.97 arm (ANDROID 4.4.2)

Все программы с исходниками.
Code:
Среда запуска                | что запущено       |  результат выполнения (в сек) 20 пунктов теста  / 1 пункт теста (в среднем)

WinXP(32bit)                 |    D7FORM.exe      | 110       /  5,5
WinXP(32bit)                 |    D7Console.exe   | 110-111   /  5,55
WinXP(32bit)                 |fpc2_6_0_console.exe| 336       /  16,8   
WinXP(32bit)                 |    1TP.EXE         | 455-460   /  23
WinXP(32bit)                 |    2TP.EXE         | 460-480   / 23-24
WinXP(32bit)                 |fpc3_0_4_console.exe| 506       /  25,3

WinXP(32bit)                 |    D1FORM.EXE      | 1520      /  76


WinXP(32bit)-DosBox-Win3.11  |    D1FORM.EXE     | 5220      / 259-263
WinXP(32bit)-DosBox-Win3.11  |    2TP.EXE        | 10260     / 513  
WinXP(32bit)-DosBox-Win3.11  |    1TP.EXE        | 10280     / 514

WinXP(32bit)-DosBox          |    1TP.EXE        | 10060     /  503
WinXP(32bit)-DosBox          |    2TP.EXE        | 9880      /  494

WinXP(32bit)                 |    3TP.EXE        | Не запускается
WinXP(32bit)-DosBox          |    3TP.EXE        | Не запускается
WinXP(32bit)-DosBox-Win3.11  |    3TP.EXE        | Не запускается



ANDROID 4.4.2:

Android-GUIpascal                 |   D7Console.pas   | 1200  /  60
Android-GUIpascal-в фоновом режиме|   D7Console.pas   | 1200  /  60
Android-APK-файл                  |   D7Console.APK   | 1200  /  60

Android-APK-файл-в режиме экран погашен |D7Console.APK| 1534  / 76,7

Android-MagicBox-Win3.11                |    D1FORM.EXE     | 17420  /  871

Android-MagicBox                        |    1TP.EXE        | 25200  / 1260

Android-MagicBox-Win3.11                |    1TP.EXE        | 25805  / 1290,25     

Android-(MagicBox-свёрнут)   |    1TP.EXE        | За 3,5 часа реакции никакой
Android-MagicBox(погашений   
екран кн. выкл.)             |    1TP.EXE        | За 50 минут реакции никакой
Android-MagicBox(не вх.в сис
но экран погашен             |    1TP.EXE        | реакции никакой

Author:  sadfsdfsdaf [ 01 Aug 2020, 14:17 ]
Post subject:  Re: Быстродействие различных эмуляторов

Quote:
получается разница быстродействия Васика и асма в 60 раз! Думал хотя бы в 30 раз!
Всё честно. Из микро-компьютеров самым быстрым был Вильнюс-Бейсик на УК-НЦ, он компилировал программу в шитые коды. Вот этот бейсик в десятки (если не быстрее) раз уделывал по скорости Корветовский.

Если хочется тормозов всего лишь в несколько раз, то надо использовать компиляторы.

Author:  als [ 29 Apr 2021, 00:05 ]
Post subject:  Re: Быстродействие различных эмуляторов

Значит написал программу test1 для тестирования штуковины Зорко.
Attachment:
Test1.7z [420 Bytes]
Downloaded 745 times
Code:
(*$MAIN*) MODULE test1; IMPORT RK86;
VAR b1,b2,b3,CO:INT16;
BEGIN

RK86.PUTSTR("START");

FOR   b1:=0 TO  255 DO 
FOR   b2:=0 TO  255 DO 
FOR   b2:=0 TO  255 DO 
END;END;
RK86.PUTSTR("*");
END;

RK86.PUTSTR("END");

END test1.

Для переменных применял тип "INT16;" другие типы такие как SYSTEM.BYTE {0..255},INT8 {-128..127} что-то у меня пока не получилось!

Размер Test1.LVT - 95 байт - 22 "шапка" = 73 байта код
размер Test1.rk - 157 байт, не знаю сколько из них "шапка" РК86 !
Но по компиляции кода, думаю не плохо!

далее
Разница в быстродействии.
Test1.LVT = 8 мин 3сек = 483 сек
Test1.rk = 14 мин 48 сек =888 сек
Разница быстродействия асм и компилятора Зорко - 888/483 = 1,838 (т.е в два раза)
Насколько это хорошо или плохо, не берусь пока судить!
Думаю если хорошо (быстро) будут реализованы вывод спрайтов (на асме), то этой штуковине применение найти можно будет!
В целом впечатления пока не плохие! Далее, время покажет!

Из неудобств.
BEGIN, FOR, DO и прочее нужно писать обязательно все большими буквами, что очень не удобно и не привычно! :-(
Первое, что мне приходит в голову, это написать простейший конвертер, чтобы конвертировал мнемонику-Дельфи в мнемонику-Оберон и поменьше иметь "прямого" взаимодествия мнемоникой-Оберона!
На этом пока все!

Author:  Zorko [ 29 Apr 2021, 01:32 ]
Post subject:  Re: Быстродействие различных эмуляторов

Quote:
(*$MAIN*) MODULE test1; IMPORT RK86;
IMPORT RK86, SYSTEM; (* <-- чтобы использовать SYSTEM.BYTE *)
Quote:
Размер Test1.LVT - 95 байт - 22 "шапка" = 73 байта код
Шапка там совсем небольшая. JMP на стартовую точку. И всё вроде.

FOR не готов для работы с переменной цикла типа SYSTEM.BYTE. Или юзай опцию -f (для диалекта -3). Но тогда FOR будет оберонский, а не наш, продвинутый. В смысле, нельзя будет FOR i := 0 TO 255
В Обероне FOR приравнивается к WHILE, т.е. будет развёрнут в i := 0; WHILE i <= 255 DO , а беззнаковый байт i всегда <= 255.
Мы сделали расширенную версию FOR, но поддержка беззнакового байта в ней ещё не до конца отлажена. Вообще поддержка беззнакового байта сделана не так давно.
Quote:
Из неудобств.
BEGIN, FOR, DO и прочее нужно писать обязательно все большими буквами, что очень не удобно и не привычно! :-(
Если начнёшь модуль словом module (с маленькой), то все ключевые слова тоже можно маленькими.

Author:  als [ 29 Apr 2021, 19:01 ]
Post subject:  Re: Быстродействие различных эмуляторов

Ошибочка то в моем коде была...
Дважды "FOR b2:=0 TO 255 DO ". Там где одна должна быть
"FOR b3:=0 TO 255 DO "

Вот новый вроде правильный, запускаю
Code:
(*$MAIN*) MODULE Test1RK86; IMPORT RK86;
VAR b1,b2,b3,CO:INT16;
BEGIN

RK86.PUTSTR("START");

FOR   b1:=0 TO  255 DO 
FOR   b2:=0 TO  255 DO 
FOR   b3:=0 TO  255 DO 
END;END;
RK86.PUTSTR("*");
END;

RK86.PUTSTR("END");

END Test1RK86.

Author:  als [ 29 Apr 2021, 19:20 ]
Post subject:  Re: Быстродействие различных эмуляторов

Результаты теста не сильно изменились аж странно... :shock:
Test1.rk = 15 мин 30 сек =930 сек
930/483 = 1,9254 (т.е в два раза)
Attachment:
Test1RK86.7z [425 Bytes]
Downloaded 754 times

Author:  als [ 29 Apr 2021, 19:52 ]
Post subject:  Re: Быстродействие различных эмуляторов

Тест для ПК-01
Code:
MODULE DemoLvov; (*$MAIN*)
IMPORT Lvov;
VAR b1,b2,b3,CO:INT16;
BEGIN
Lvov.LINE(1, 1,10,1, 3); (* типа старт ^-) *)

FOR   b1:=0 TO  255 DO 
FOR   b2:=0 TO  255 DO 
FOR   b3:=0 TO  255 DO 
END;END;
IF b1<200 THEN  Lvov.PSET( b1,10, 3); END;
IF b1>200 THEN CO:=b1-200; Lvov.PSET( CO,13, 3); END;
END;
Lvov.BOX(50, 50, 75, 75, 3);(* типа конец*)

  LOOP END
END DemoLvov.
Результаты теста
DemoLvov.lvt = 11 мин 58 сек = 718 сек
718/483 = 1,4865 (т.е в В ПОЛТОРА раза)
( в САС-емуляторе)
Attachment:
Test1LVOV.7z [1.8 KiB]
Downloaded 762 times
в архиве:
DemoLvov.lvt
DemoLvov.Mod
декомпиляция МАДЛ
"LVTtoMD01D(e)\Project.dpr"
"LVTtoMD01M(e)\Project.dpr"

Author:  als [ 30 Apr 2021, 18:37 ]
Post subject:  Re: Быстродействие различных эмуляторов

MADL vs K580Dev
Attachment:
TEST2.7Z [1.38 KiB]
Downloaded 746 times
K580Dev:
Исходник
Code:
MODULE DemoLvov; (*$MAIN*)
IMPORT Lvov;
VAR x,y:INT16;

BEGIN
x:=0;y:=0;
REPEAT
REPEAT
Lvov.PSET(x,y, 3);
x:=x+1;
UNTIL x=200;
x:=0; y:=y+1;
UNTIL y=225;


END DemoLvov.

K580Dev:
Декомпиляция:
Code:
{Дизкомпилированный файл: 'DemoLvov.lvt'}
{Формат LVT}
{ Начальный адрес: $0000 (0) }
{ Конечный адрес : $007F (127) }
{ Адрес старта   : $0000 (0) }

program Project; uses  uMD01u in 'uMD01u.pas';

VAR
L0000, L0003, L0007, L0010, L0056, L0065, L0067, L0069, L0072
:TLabelLV;

BEGIN
INITCompiler;

SetFullNameLVTfile('DemoLvov.lvt');
SetNameInternalKOI(#$44+#$65+#$6D+#$6F+#$4C+#$76);

SetAddrRAM($0000);

StartProgram;

LabelA(L0000);
Call(L0007);

LabelA(L0003);
JMP($F875);
DB($E9);

LabelA(L0007);
LxiHL(L0000);
Shld(L0065);
Shld(L0067);

LabelA(L0010);
Lhld(L0065);
MviH($00);
PushHL;
Lhld(L0067);
MviH($00);
PushHL;
LxiHL(L0003);
PushHL;
Call(L0056);
Lhld(L0065);
InxHL;
Shld(L0065);
Lhld(L0065);
LxiDE($00C8);
Call(L0072);
Call(L0069);
Jc(L0010);
LxiHL(L0000);
Shld(L0065);
Lhld(L0067);
InxHL;
Shld(L0067);
Lhld(L0067);
LxiDE($00E1);
Call(L0072);
Call(L0069);
Jc(L0010);
RET;

LabelA(L0056);
PopHL;
PopBC;
PopDE;
xtHL;
MovHE;
Shld($BE50);
MovAC;
Sta($BE52);
JMP($F821);

LabelA(L0065);
DB($00);
DB($00);

LabelA(L0067);
DB($00);
DB($00);

LabelA(L0069);
MovAH;
OraL;
LxiHL(L0000);
Rnz;
stc;
InrL;
RET;

LabelA(L0072);
MovAL;
SubE;
MovLA;
MovAH;
SbbD;
MovHA;
OraL;
InxHL;
stc;
Rz;
XraA;
MovLA;
MovHA;
RET;
FINALCompiler;
END.


МАДЛ (MD02):
Исходник:
Code:
Var x,y:TByteLV;
RepeatY,RepeatX,ENDc:TLabelGLV;

BEGIN
INITCompiler;

VarByte(x,'x',0);VarByte(y,'y',0);

StartProgram;

Ar(3);mrA($BE52);
LabelG(RepeatY); Ar(y);mrA($BE51);
LabelG(RepeatX); Ar(x);mrA($BE50);

Call($F821);

p(X,1);IfisNot(X,200,RepeatX);
r(x,0);p(Y,1);IfisNot(Y,225,RepeatY);

LabelG(ENDc);Goto_(ENDc);


FINALCompiler;
END.

МАДЛ:
Декомпиляция:
Code:
{Дизкомпилированный файл: '_res.LVT'}
{Формат LVT}
{ Начальный адрес: $0000 (0) }
{ Конечный адрес : $003B (59) }
{ Адрес старта   : $0002 (2) }

program Project; uses  uMD01u in 'uMD01u.pas';

VAR
L0000, L0001, L0007, L000D, L0039
:TLabelLV;

BEGIN
INITCompiler;

SetFullNameLVTfile('_res.LVT');
SetNameInternalKOI(#$20+#$20+#$20+#$20+#$20+#$20);

SetAddrRAM($0000);

LabelA(L0000);
DB($00);

LabelA(L0001);
DB($00);

StartProgram;
MviA($03);
Sta($BE52);

LabelA(L0007);
Lda(L0001);
Sta($BE51);

LabelA(L000D);
Lda(L0000);
Sta($BE50);
Call($F821);
Lda(L0000);
InrA;
Sta(L0000);
Lda(L0000);
Cpi($C8);
Jnz(L000D);
MviA($00);
Sta(L0000);
Lda(L0001);
InrA;
Sta(L0001);
Lda(L0001);
Cpi($E1);
Jnz(L0007);

LabelA(L0039);
JMP(L0039);
FINALCompiler;
END.

K580Dev:
Размер ЛВТ-файла - 150 байта
Время выполнения - 20-21 сек
Без возможности оптимизации!

MADL2021:
Размер ЛВТ-файла - 82 байта
Время выполнения - 14-15 сек
С возможностями оптимизации!

Author:  Zorko [ 01 May 2021, 21:04 ]
Post subject:  Re: Быстродействие различных эмуляторов

Да, чего-то подобного я опасался. Подгорание пукана и сравнение тёплого с мягким.
Ты ещё брэйнфак забыл добавить в список для сравнения.

Author:  als [ 02 Nov 2022, 15:40 ]
Post subject:  Re: Быстродействие различных эмуляторов

Тестування програми:
Code:
200 b1=0
201 b2=0
203 CO=0
210 Print "Start..."
250 For b2=0 to 255
260 For b1=0 to 255
270 Next b1
280 Next b2
300 co=co+1
301 Print(co)
310 If co < 20 then Goto 250
320 Print"END"
в емуляторах:
1. Эмулятор БК 0010(01) для Windows 98/ME/2000/XP версия 2.6,
(посилання не зберіг, скоріш за все десь там же де й версія 3.0)
2. Эмулятор БК 0010(01) для Windows 98/ME/2000/XP версия 3.0,
https://archive.org/details/bk-emulator-calm ,
( звантажив звідси: https://archive.org/download/bk-emulato ... or_v30.zip _
Файл тест-програми :TestSpeed.msf

3. BkEmu.1.0.0 (автор:3cky),
https://github.com/3cky/bkemu-android
Файл тест-програми: TestSpeed.bkemu_state

Code:
WindowsXP - Эмулятор БК 0010(01).2.6  -  3020 / 151
WindowsXP - Эмулятор БК 0010(01).3.0 –   2960 / 148
Android7 - BkEmu.1.0.0 (3cky) —          2295 / 114,75
Android4 - BkEmu.1.0.0 (3cky) —          4651 / 232,55
Здивували показники виконання емуляторів під WindowsXP. Може у мене Windows такий, але ж все таки...
На Android4 — BkEmu взагалі повний “завал”.

В цілому, “картина” виглядає так:
Code:
Агат-(3)Apple ][ Plus                  1817  /  90,85 
Башкирия(2017.12.01)- Орион-128"       1988  /  99,4
* Башкирия(2017.12.01)-Львов ПК-01     2224  /  111,2 
BK-0010_01                             2264  /  113,2
* SASemulator1.44Beta                  2279  /  113,95
Android7 - BkEmu.1.0.0 (3cky) —        2295  /  114,75
Башкирия(2017.12.01)-MSX2              2415  /  120,75
Башкирия(2017.12.01)-MSX               2437  /  121,85
* Эмулятор 3000(v6.0)-Львов ПК-01      2494  /  124,7
blueMSX - MSX-2                        2569  /  128,45
Atari800Win                            2846  /  142,3
WindowsXP - Эмулятор БК 0010(01).3.0 – 2960  /  148
WindowsXP - Эмулятор БК 0010(01).2.6 - 3020  /  151
* LVOV105                              3862  /  193,1
Android4 - BkEmu.1.0.0 (3cky) —        4651  / 232,55
Attachment:
TESTSpeed.7z [26.46 KiB]
Downloaded 655 times

Author:  als [ 02 Nov 2022, 15:44 ]
Post subject:  Re: Быстродействие различных эмуляторов

Quote:
Всё честно. Из микро-компьютеров самым быстрым был Вильнюс-Бейсик на УК-НЦ, он компилировал программу в шитые коды. Вот этот бейсик в десятки (если не быстрее) раз уделывал по скорости Корветовский.
Если хочется тормозов всего лишь в несколько раз, то надо использовать компиляторы.
sadfsdfsdaf,
зверни увагу на попереднє повідомлення (тобто ось це - viewtopic.php?f=12&t=380&p=5689#p5689 ) щодо БК 0010(01), відверто кажучи здивован не в кращу сторону для БК 0010(01). Ти ж про цей "Вильнюс-Бейсик на УК-НЦ" казав чи я щось сплутав ?!

Page 1 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/