nedoPC.org

Community for electronics hobbyists, established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 15 Sep 2024 12:14



Reply to topic  [ 33 posts ]  Go to page Previous  1, 2, 3  Next
[SDK] Новая математика для кросс-компилятора в 8080/z80 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
shiny wrote:
А не может такого быть, что используется var>>bitcount или явно var>>8 ?

Арифметика у меня всегда через стек и я не могу на этапе компиляции определить что сидит в стеке - переменная или константа - поэтому остаётся только на лету смотреть и проверять в рантайме (на самом деле теоретически могу и на этапе компиляции, если начну искать паттерны в байткоде выражений)...

P.S. Вот как ведут себя сдвиги 16-битного аргумента в Си (проверено в 64-битном GCC, 32-битном OpenWatcom-C/C++ и 16-битном Borland C++):
Code:
-2   #0000 #0000 #FFFF
-1   #0000 #0000 #FFFF
0   #1234 #1234 #EDCB
1   #2468 #091A #F6E5
2   #48D0 #048D #FB72
3   #91A0 #0246 #FDB9
4   #2340 #0123 #FEDC
5   #4680 #0091 #FF6E
6   #8D00 #0048 #FFB7
7   #1A00 #0024 #FFDB
8   #3400 #0012 #FFED
9   #6800 #0009 #FFF6
10   #D000 #0004 #FFFB
11   #A000 #0002 #FFFD
12   #4000 #0001 #FFFE
13   #8000 #0000 #FFFF
14   #0000 #0000 #FFFF
15   #0000 #0000 #FFFF
16   #0000 #0000 #FFFF
17   #0000 #0000 #FFFF
18   #0000 #0000 #FFFF
19   #0000 #0000 #FFFF
20   #0000 #0000 #FFFF
21   #0000 #0000 #FFFF
22   #0000 #0000 #FFFF
23   #0000 #0000 #FFFF
24   #0000 #0000 #FFFF
25   #0000 #0000 #FFFF
26   #0000 #0000 #FFFF
27   #0000 #0000 #FFFF
28   #0000 #0000 #FFFF
29   #0000 #0000 #FFFF
30   #0000 #0000 #FFFF
31   #0000 #0000 #FFFF
32   #1234 #1234 #EDCB
33   #2468 #091A #F6E5
34   #48D0 #048D #FB72
35   #91A0 #0246 #FDB9
36   #2340 #0123 #FEDC
37   #4680 #0091 #FF6E
38   #8D00 #0048 #FFB7
39   #1A00 #0024 #FFDB
40   #3400 #0012 #FFED
Программа:
Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
 int i;
 short w1,w2,w3,w=0x1234;
 for(i=-2;i<=40;i++)
 {
   w1 = w<<i;
   w2 = w>>i;
   w3 = (~w)>>i;
   printf("%i\t#%4.4X #%4.4X #%4.4X\n",i,w1&0xFFFF,w2&0xFFFF,w3&0xFFFF);
 }
 return 0;
}
Сделаю из этого тест 0003 :mrgreen:

P.P.S. Кстати я могу задействовать функционал по подсчёту тактов в эмуляторе Pseudo-86RK и сравнить время выполнения оригинальных сдвигов из Small-C и этих моих новых :roll:

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


21 Jul 2024 11:59
Profile WWW
Doomed

Joined: 10 Aug 2022 07:27
Posts: 378
Reply with quote
Шаос, я не могу тебя учить. Но. Ты знаешь что такое стиль? Это то как ты одеваешься. Понятно, что провожают по уму, а не по одёжке, однако и по этому тоже. Ну есть же куча статей по стилю С/С++, почитал бы, не? А то, прям, воротит, ей богу.)


Last edited by Mondx on 21 Jul 2024 15:27, edited 1 time in total.



21 Jul 2024 15:24
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
Mondx wrote:
Шаос, я не могу тебя учить. Но. Ты знаешь что такое стиль? Это то как ты одеваешься. Понятно, что провожают по уму, а не по одёжке, однако и по этому тоже. Ну есть же куча статей по стилю С/С++, почитал бы, не? А то, прям, воротит, ей богу.)

Ну вот только в хобби не надо меня на тему кодингстайла лечить - мне на работе нытья на эту тему в кодревью хватает :lol:
Для себя я пишу как хочу, как мне удобно, как привык ещё в ранние 90е, а не как наса предложила или гугол захотел :no:
Если непонятно, то открываем азы - там Кернигана и Ричи например - и подтягиваемся до нужного уровня :eugeek:

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


21 Jul 2024 15:57
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
Shaos wrote:
Кстати я могу задействовать функционал по подсчёту тактов в эмуляторе Pseudo-86RK и сравнить время выполнения оригинальных сдвигов из Small-C и этих моих новых :roll:
Первые результаты прогона с подсчётом тактов - пока только сдвиги влево числа #1234 на количество бит от 0 до 32:
Attachment:
Screenshot from 2024-07-22 01-36-44.png
Screenshot from 2024-07-22 01-36-44.png [ 34.67 KiB | Viewed 706 times ]
Как можно видеть в самом начале моя подпрограмма чуть хуже (из-за проверок), но потом догоняет и обгоняет подпрограмму из Small-C ( а особый случай 8 вообще сильно лучше : )

Что касается правильности, то ответы совпадают от 0 до 31, а вот в случае 32 я по сишному делаю как сдвиг опять на 0 бит, возвращая #1234, а Small-C тупо двигает 32 раза влево, тратя на это 1000 с лишним тактов и выдавая ноль в качестве ответа!

Завтра допишу тестовую прогу, чтобы проверяла сдвиг вправо положительного и отрицательного числа точно также от 0 до 32 и выложу саму прогу и xls-файл с табличкой и графиком...

P.S. Вот тут есть объяснение почему сдвиг на 32 может означать сдвиг на 0: https://stackoverflow.com/questions/2648764/whats-bad-about-shifting-a-32-bit-variable-32-bits
Quote:
Shifting a 32-bit value by 32 bits or more is undefined in C and C++. One of the reasons it was left undefined is that on some hardware platforms the 32-bit shift instruction only takes into account 5 lowest bits of the supplied shift count. This means that whatever shift count you pass, it will be interpreted modulo 32. Attempting to shift by 32 on such platform will actually shift by 0, i.e. not shift at all.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


22 Jul 2024 01:41
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
Окончательный график (для Small-C сдвиг вправо одинаковый для положительных и отрицательных чисел, а у меня разница 4 такта, но на графике тоже не сильно видно):

Attachment:
Screenshot from 2024-07-22 20-27-47.png
Screenshot from 2024-07-22 20-27-47.png [ 124.34 KiB | Viewed 673 times ]
Короче где-то после 5 у меня всё быстрее и быстрее :rotate:
Ну и сдвиг на 8 совсем быстро :lol:

Текст программы в мнемониках RASM будет в следующем сообщении (я придумал как немного ускорить сдвиг вправо)

Выхлоп Pseudo-86RK со счётчиками:

 TEST1.OUT
Code:
{pseudo-86rk:v0.3}
radio-86rk
-->{a-event:0::::}
{a-event:49::::}
{a-event:64::::}
{a-event:42::::}
{b-event:54:0:::}
{b-event:103:49:::}
{b-event:167:64:::}
{b-event:209:42:::}
{c-event:312:103:0::}
{c-event:361:152:49::}
{c-event:425:216:64::}
{c-event:467:258:42::}

#1234>>#00 #1234 #1234 #1234 #1234 #EDCB #EDCB
.
.{a-event:146598:146389:146131::}
{a-event:95:146484:146226::}
{a-event:64:146548:146290::}
{a-event:72:146620:146362::}
{b-event:54:146674:146416::}
{b-event:195:141:146557::}
{b-event:259:64:146621::}
{b-event:358:99:146720::}
{c-event:461:103:146823::}
{c-event:598:240:137::}
{c-event:662:304:64::}
{c-event:761:403:99::}

#1234>>#01 #2468 #2468 #091A #091A #F6E5 #F6E5
.
.{a-event:146867:146509:146106::}
{a-event:120:146629:146226::}
{a-event:64:146693:146290::}
{a-event:102:146795:146392::}
{b-event:54:146849:146446::}
{b-event:242:188:146634::}
{b-event:306:64:146698::}
{b-event:462:156:146854::}
{c-event:565:103:146957::}
{c-event:749:287:184::}
{c-event:813:351:64::}
{c-event:969:507:156::}

#1234>>#02 #48D0 #48D0 #048D #048D #FB72 #FB72
.
.{a-event:147089:146627:146120::}
{a-event:145:146772:146265::}
{a-event:64:146836:146329::}
{a-event:132:146968:146461::}
{b-event:54:147022:146515::}
{b-event:289:235:146750::}
{b-event:353:64:146814::}
{b-event:566:213:147027::}
{c-event:669:103:147130::}
{c-event:900:334:231::}
{c-event:964:398:64::}
{c-event:1177:611:213::}

#1234>>#03 #91A0 #91A0 #0246 #0246 #FDB9 #FDB9
.
.{a-event:147297:146731:146120::}
{a-event:170:146901:146290::}
{a-event:64:146965:146354::}
{a-event:162:147127:146516::}
{b-event:54:147181:146570::}
{b-event:336:282:146852::}
{b-event:400:64:146916::}
{b-event:670:270:147186::}
{c-event:773:103:147289::}
{c-event:1051:381:278::}
{c-event:1115:445:64::}
{c-event:1385:715:270::}

#1234>>#04 #2340 #2340 #0123 #0123 #FEDC #FEDC
.
.{a-event:147516:146846:146131::}
{a-event:195:147041:146326::}
{a-event:64:147105:146390::}
{a-event:192:147297:146582::}
{b-event:54:147351:146636::}
{b-event:383:329:146965::}
{b-event:447:64:147029::}
{b-event:774:327:147356::}
{c-event:877:103:147459::}
{c-event:1202:428:325::}
{c-event:1266:492:64::}
{c-event:1593:819:327::}

#1234>>#05 #4680 #4680 #0091 #0091 #FF6E #FF6E
.
.{a-event:147699:146925:146106::}
{a-event:220:147145:146326::}
{a-event:64:147209:146390::}
{a-event:222:147431:146612::}
{b-event:54:147485:146666::}
{b-event:430:376:147042::}
{b-event:494:64:147106::}
{b-event:878:384:147490::}
{c-event:981:103:147593::}
{c-event:1353:475:372::}
{c-event:1417:539:64::}
{c-event:1801:923:384::}

#1234>>#06 #8D00 #8D00 #0048 #0048 #FFB7 #FFB7
.
.{a-event:147921:147043:146120::}
{a-event:245:147288:146365::}
{a-event:64:147352:146429::}
{a-event:252:147604:146681::}
{b-event:54:147658:146735::}
{b-event:477:423:147158::}
{b-event:541:64:147222::}
{b-event:982:441:147663::}
{c-event:1085:103:147766::}
{c-event:1504:522:419::}
{c-event:1568:586:64::}
{c-event:2009:1027:441::}

#1234>>#07 #1A00 #1A00 #0024 #0024 #FFDB #FFDB
.
.{a-event:148143:147161:146134::}
{a-event:82:147243:146216::}
{a-event:64:147307:146280::}
{a-event:282:147589:146562::}
{b-event:54:147643:146616::}
{b-event:160:106:146722::}
{b-event:224:64:146786::}
{b-event:722:498:147284::}
{c-event:825:103:147387::}
{c-event:931:209:106::}
{c-event:995:273:64::}
{c-event:1493:771:498::}

#1234>>#08 #3400 #3400 #0012 #0012 #FFED #FFED
.
.{a-event:147613:146891:146120::}
{a-event:295:147186:146415::}
{a-event:64:147250:146479::}
{a-event:312:147562:146791::}
{b-event:54:147616:146845::}
{b-event:571:517:147362::}
{b-event:635:64:147426::}
{b-event:1190:555:147981::}
{c-event:1293:103:148084::}
{c-event:1806:616:513::}
{c-event:1870:680:64::}
{c-event:2425:1235:555::}

#1234>>#09 #6800 #6800 #0009 #0009 #FFF6 #FFF6
.
.{a-event:148542:147352:146117::}
{a-event:320:147672:146437::}
{a-event:64:147736:146501::}
{a-event:342:148078:146843::}
{b-event:54:148132:146897::}
{b-event:618:564:147461::}
{b-event:682:64:147525::}
{b-event:1294:612:148137::}
{c-event:1397:103:148240::}
{c-event:1957:663:560::}
{c-event:2021:727:64::}
{c-event:2633:1339:612::}

#1234>>#0A #D000 #D000 #0004 #0004 #FFFB #FFFB
.
.{a-event:148774:147480:146141::}
{a-event:345:147825:146486::}
{a-event:64:147889:146550::}
{a-event:372:148261:146922::}
{b-event:54:148315:146976::}
{b-event:665:611:147587::}
{b-event:729:64:147651::}
{b-event:1398:669:148320::}
{c-event:1501:103:148423::}
{c-event:2108:710:607::}
{c-event:2172:774:64::}
{c-event:2841:1443:669::}

#1234>>#0B #A000 #A000 #0002 #0002 #FFFD #FFFD
.
.{a-event:148982:147584:146141::}
{a-event:370:147954:146511::}
{a-event:64:148018:146575::}
{a-event:402:148420:146977::}
{b-event:54:148474:147031::}
{b-event:712:658:147689::}
{b-event:776:64:147753::}
{b-event:1502:726:148479::}
{c-event:1605:103:148582::}
{c-event:2259:757:654::}
{c-event:2323:821:64::}
{c-event:3049:1547:726::}

#1234>>#0C #4000 #4000 #0001 #0001 #FFFE #FFFE
.
.{a-event:149176:147674:146127::}
{a-event:395:148069:146522::}
{a-event:64:148133:146586::}
{a-event:432:148565:147018::}
{b-event:54:148619:147072::}
{b-event:759:705:147777::}
{b-event:823:64:147841::}
{b-event:1606:783:148624::}
{c-event:1709:103:148727::}
{c-event:2410:804:701::}
{c-event:2474:868:64::}
{c-event:3257:1651:783::}

#1234>>#0D #8000 #8000 #0000 #0000 #FFFF #FFFF
.
.{a-event:149384:147778:146127::}
{a-event:420:148198:146547::}
{a-event:64:148262:146611::}
{a-event:462:148724:147073::}
{b-event:54:148778:147127::}
{b-event:806:752:147879::}
{b-event:870:64:147943::}
{b-event:1710:840:148783::}
{c-event:1813:103:148886::}
{c-event:2561:851:748::}
{c-event:2625:915:64::}
{c-event:3465:1755:840::}

#1234>>#0E #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:149603:147893:146138::}
{a-event:445:148338:146583::}
{a-event:64:148402:146647::}
{a-event:492:148894:147139::}
{b-event:54:148948:147193::}
{b-event:853:799:147992::}
{b-event:917:64:148056::}
{b-event:1814:897:148953::}
{c-event:1917:103:149056::}
{c-event:2712:898:795::}
{c-event:2776:962:64::}
{c-event:3673:1859:897::}

#1234>>#0F #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:149800:147986:146127::}
{a-event:470:148456:146597::}
{a-event:64:148520:146661::}
{a-event:522:149042:147183::}
{b-event:54:149096:147237::}
{b-event:900:846:148083::}
{b-event:964:64:148147::}
{b-event:1918:954:149101::}
{c-event:2021:103:149204::}
{c-event:2863:945:842::}
{c-event:2927:1009:64::}
{c-event:3881:1963:954::}

#1234>>#10 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150001:148083:146120::}
{a-event:495:148578:146615::}
{a-event:64:148642:146679::}
{a-event:552:149194:147231::}
{b-event:54:149248:147285::}
{b-event:947:893:148178::}
{b-event:1011:64:148242::}
{b-event:2022:1011:149253::}
{c-event:2125:103:149356::}
{c-event:3014:992:889::}
{c-event:3078:1056:64::}
{c-event:4089:2067:1011::}

#1234>>#11 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150209:148187:146120::}
{a-event:520:148707:146640::}
{a-event:64:148771:146704::}
{a-event:582:149353:147286::}
{b-event:54:149407:147340::}
{b-event:994:940:148280::}
{b-event:1058:64:148344::}
{b-event:2126:1068:149412::}
{c-event:2229:103:149515::}
{c-event:3165:1039:936::}
{c-event:3229:1103:64::}
{c-event:4297:2171:1068::}

#1234>>#12 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150428:148302:146131::}
{a-event:545:148847:146676::}
{a-event:64:148911:146740::}
{a-event:612:149523:147352::}
{b-event:54:149577:147406::}
{b-event:1041:987:148393::}
{b-event:1105:64:148457::}
{b-event:2230:1125:149582::}
{c-event:2333:103:149685::}
{c-event:3316:1086:983::}
{c-event:3380:1150:64::}
{c-event:4505:2275:1125::}

#1234>>#13 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150625:148395:146120::}
{a-event:570:148965:146690::}
{a-event:64:149029:146754::}
{a-event:642:149671:147396::}
{b-event:54:149725:147450::}
{b-event:1088:1034:148484::}
{b-event:1152:64:148548::}
{b-event:2334:1182:149730::}
{c-event:2437:103:149833::}
{c-event:3467:1133:1030::}
{c-event:3531:1197:64::}
{c-event:4713:2379:1182::}

#1234>>#14 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150833:148499:146120::}
{a-event:595:149094:146715::}
{a-event:64:149158:146779::}
{a-event:672:149830:147451::}
{b-event:54:149884:147505::}
{b-event:1135:1081:148586::}
{b-event:1199:64:148650::}
{b-event:2438:1239:149889::}
{c-event:2541:103:149992::}
{c-event:3618:1180:1077::}
{c-event:3682:1244:64::}
{c-event:4921:2483:1239::}

#1234>>#15 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151041:148603:146120::}
{a-event:620:149223:146740::}
{a-event:64:149287:146804::}
{a-event:702:149989:147506::}
{b-event:54:150043:147560::}
{b-event:1182:1128:148688::}
{b-event:1246:64:148752::}
{b-event:2542:1296:150048::}
{c-event:2645:103:150151::}
{c-event:3769:1227:1124::}
{c-event:3833:1291:64::}
{c-event:5129:2587:1296::}

#1234>>#16 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151249:148707:146120::}
{a-event:645:149352:146765::}
{a-event:64:149416:146829::}
{a-event:732:150148:147561::}
{b-event:54:150202:147615::}
{b-event:1229:1175:148790::}
{b-event:1293:64:148854::}
{b-event:2646:1353:150207::}
{c-event:2749:103:150310::}
{c-event:3920:1274:1171::}
{c-event:3984:1338:64::}
{c-event:5337:2691:1353::}

#1234>>#17 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151468:148822:146131::}
{a-event:670:149492:146801::}
{a-event:64:149556:146865::}
{a-event:762:150318:147627::}
{b-event:54:150372:147681::}
{b-event:1276:1222:148903::}
{b-event:1340:64:148967::}
{b-event:2750:1410:150377::}
{c-event:2853:103:150480::}
{c-event:4071:1321:1218::}
{c-event:4135:1385:64::}
{c-event:5545:2795:1410::}

#1234>>#18 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151665:148915:146120::}
{a-event:695:149610:146815::}
{a-event:64:149674:146879::}
{a-event:792:150466:147671::}
{b-event:54:150520:147725::}
{b-event:1323:1269:148994::}
{b-event:1387:64:149058::}
{b-event:2854:1467:150525::}
{c-event:2957:103:150628::}
{c-event:4222:1368:1265::}
{c-event:4286:1432:64::}
{c-event:5753:2899:1467::}

#1234>>#19 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151873:149019:146120::}
{a-event:720:149739:146840::}
{a-event:64:149803:146904::}
{a-event:822:150625:147726::}
{b-event:54:150679:147780::}
{b-event:1370:1316:149096::}
{b-event:1434:64:149160::}
{b-event:2958:1524:150684::}
{c-event:3061:103:150787::}
{c-event:4373:1415:1312::}
{c-event:4437:1479:64::}
{c-event:5961:3003:1524::}

#1234>>#1A #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152088:149130:146127::}
{a-event:745:149875:146872::}
{a-event:64:149939:146936::}
{a-event:852:150791:147788::}
{b-event:54:150845:147842::}
{b-event:1417:1363:149205::}
{b-event:1481:64:149269::}
{b-event:3062:1581:150850::}
{c-event:3165:103:150953::}
{c-event:4524:1462:1359::}
{c-event:4588:1526:64::}
{c-event:6169:3107:1581::}

#1234>>#1B #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152296:149234:146127::}
{a-event:770:150004:146897::}
{a-event:64:150068:146961::}
{a-event:882:150950:147843::}
{b-event:54:151004:147897::}
{b-event:1464:1410:149307::}
{b-event:1528:64:149371::}
{b-event:3166:1638:151009::}
{c-event:3269:103:151112::}
{c-event:4675:1509:1406::}
{c-event:4739:1573:64::}
{c-event:6377:3211:1638::}

#1234>>#1C #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152515:149349:146138::}
{a-event:795:150144:146933::}
{a-event:64:150208:146997::}
{a-event:912:151120:147909::}
{b-event:54:151174:147963::}
{b-event:1511:1457:149420::}
{b-event:1575:64:149484::}
{b-event:3270:1695:151179::}
{c-event:3373:103:151282::}
{c-event:4826:1556:1453::}
{c-event:4890:1620:64::}
{c-event:6585:3315:1695::}

#1234>>#1D #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152712:149442:146127::}
{a-event:820:150262:146947::}
{a-event:64:150326:147011::}
{a-event:942:151268:147953::}
{b-event:54:151322:148007::}
{b-event:1558:1504:149511::}
{b-event:1622:64:149575::}
{b-event:3374:1752:151327::}
{c-event:3477:103:151430::}
{c-event:4977:1603:1500::}
{c-event:5041:1667:64::}
{c-event:6793:3419:1752::}

#1234>>#1E #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152920:149546:146127::}
{a-event:845:150391:146972::}
{a-event:64:150455:147036::}
{a-event:972:151427:148008::}
{b-event:54:151481:148062::}
{b-event:1605:1551:149613::}
{b-event:1669:64:149677::}
{b-event:3478:1809:151486::}
{c-event:3581:103:151589::}
{c-event:5128:1650:1547::}
{c-event:5192:1714:64::}
{c-event:7001:3523:1809::}

#1234>>#1F #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:153128:149650:146127::}
{a-event:49:149699:146176::}
{a-event:64:149763:146240::}
{a-event:1002:150765:147242::}
{b-event:54:150819:147296::}
{b-event:103:49:147345::}
{b-event:167:64:147409::}
{b-event:2033:1866:149275::}
{c-event:2136:103:149378::}
{c-event:2185:152:49::}
{c-event:2249:216:64::}
{c-event:4115:2082:1866::}

#1234>>#20 #1234 #0000 #1234 #0000 #EDCB #FFFF
.
.{halt}
{from-last-a:150215}
{from-last-b:148182}
{from-last-c:146100}
{bye}

Экселевский файл (приготовлен в LibreOffice) обновлю и выложу чуть позже...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


22 Jul 2024 20:31
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
Придумал как ускорить сдвиг в право на 1 такт для отрицательных и на 5 тактов для положительных чисел - теперь у меня цифры стали одинаковые для обоих вариантов, быстрее старого алгоритма из Small-C после 5 и сильно меньше при сдвиге на 8 :lol:
Code:
\ SHIFT DE RIGHT (ARITHMETICALLY) BY L&31 AND RETURN IN HL
SHIFTR: XCHG
        MOV_A,E
        ANI     31
        RZ      \ RETURN IF SHIFT BY 0
        MOV_D,A
        CPI     8
        JZ      SHIFTR3
        ORA_H
        JM      SHIFTR1
SHIFTR0:
        XRA_A
        MOV_A,H
        RAR
        MOV_H,A
        MOV_A,L
        RAR
        MOV_L,A
        DCR_D
        JNZ     SHIFTR0
        RET
SHIFTR1:
        STC
        MOV_A,H
        RAR
        MOV_H,A
        MOV_A,L
        RAR
        MOV_L,A
        DCR_D
        JNZ     SHIFTR1
        RET
SHIFTR3:
        \ SPECIAL CASE - SHIFT BY 8
        MOV_L,H
        ORA_H
        JM      SHIFTR4
        MVI_H,  0
        RET
SHIFTR4:
        MVI_H,  #FF
        RET
Я просто пользуюсь тем фактом, что на момент проверки на знак в аккумуляторе сидит число от 0 до 31 у которого старший бит заведомо ноль т.е. я делаю ИЛИ с регистром H и получаю в старшем бите аккумулятора знак числа - переход при этом делается через JM (переход если минус) и из-за того что переход не по C перестал работать укорачивающий трюк при первом проходе для отрицательных чисел - поэтому теперь номера для положительных и отрицательных абсолютно одинаковые (как я уже выше написал):
Attachment:
Screenshot from 2024-07-23 18-53-22.png
Screenshot from 2024-07-23 18-53-22.png [ 156.65 KiB | Viewed 644 times ]
По числам по идее надо вычесть длительность команды-маркера MOV_A,A (-5 тактов) и добавить длительность команды POP_D, которая стоит перед вызовом этой подпрограммы в реальном сгенерированном коде, чтобы вытащить один из аргументов из стека (+10 тактов) - получается сдвиг на 0 бит занимает 49-5+10=54 такта (и влево, и вправо), сдвиг на 8 бит влево - 87 тактов, на 8 бит вправо - 106 тактов, а длительность всех остальных сдвигов от 1 до 31 вычисляются по формулам:

  • сдвиг влево: 75+N*25 тактов
  • сдвиг вправо: 94+N*47 тактов

Текст тестовой программки:

 TEST1.A
Code:
@WORD = #1234

     XRA_A
LOOP:
     MOV_L,A
     MVI_H, 0
     LXI_D, @WORD
     PUSH_PSW
     MOV_A,A
     CALL SHIFTL
     MOV_A,A
     SHLD RES1

     POP_PSW
     MOV_L,A
     MVI_H, 0
     LXI_D, @WORD
     PUSH_PSW
     MOV_A,A
     CALL CCASL_
     MOV_A,A
     SHLD RES2

     MOV_L,A
     MVI_H, 0
     LXI_D, @WORD
     PUSH_PSW
     MOV_B,B
     CALL SHIFTR
     MOV_B,B
     SHLD RES3

     POP_PSW
     MOV_L,A
     MVI_H, 0
     LXI_D, @WORD
     PUSH_PSW
     MOV_B,B
     CALL CCASR_
     MOV_B,B
     SHLD RES4

     LXI_D, @WORD
     MOV_A,D
     CMA
     MOV_D,A
     MOV_A,E
     CMA
     MOV_E,A
     POP_PSW
     PUSH_D

     MOV_L,A
     MVI_H, 0
     PUSH_PSW
     MOV_C,C
     CALL SHIFTR
     MOV_C,C
     SHLD RES5

     POP_PSW
     MOV_L,A
     MVI_H, 0
     POP_D
     PUSH_PSW
     MOV_C,C
     CALL CCASR_
     MOV_C,C
     SHLD RES6

     LXI_H, STR1
     CALL #F818
     POP_PSW
     PUSH_PSW
     CALL #F815
     LHLD RES1
     CALL PRINTHL
     LHLD RES2
     CALL PRINTHL
     LHLD RES3
     CALL PRINTHL
     LHLD RES4
     CALL PRINTHL
     LHLD RES5
     CALL PRINTHL
     LHLD RES6
     CALL PRINTHL
     LXI_H, STRN
     CALL #F818

     POP_PSW
     INR_A
     CPI 33
     JNZ LOOP

     HLT

PRINTHL:
     PUSH_H
     MVI_C, 32
     CALL #F809
     MVI_C, '#'
     CALL #F809
     POP_H
     PUSH_H
     MOV_A,H
     CALL #F815
     POP_H
     MOV_A,L
     CALL #F815
     RET

\ SHIFT DE LEFT BY L&31 AND RETURN IN HL
SHIFTL: XCHG
        MOV_A,E
        ANI     31
        RZ      \ RETURN IF SHIFT BY 0
        CPI     8
        JNZ     SHIFTL1
        \ SPECIAL CASE - SHIFT BY 8
        MOV_H,L
        MVI_L,  0
        RET
SHIFTL1:
        DAD_H
        DCR_A
        JNZ     SHIFTL1
        RET

\ SHIFT DE RIGHT (ARITHMETICALLY) BY L&31 AND RETURN IN HL
SHIFTR: XCHG
        MOV_A,E
        ANI     31
        RZ      \ RETURN IF SHIFT BY 0
        MOV_D,A
        CPI     8
        JZ      SHIFTR3
        ORA_H
        JM      SHIFTR1
SHIFTR0:
        XRA_A
        MOV_A,H
        RAR
        MOV_H,A
        MOV_A,L
        RAR
        MOV_L,A
        DCR_D
        JNZ     SHIFTR0
        RET
SHIFTR1:
        STC
        MOV_A,H
        RAR
        MOV_H,A
        MOV_A,L
        RAR
        MOV_L,A
        DCR_D
        JNZ     SHIFTR1
        RET
SHIFTR3:
        \ SPECIAL CASE - SHIFT BY 8
        MOV_L,H
        ORA_H
        JM      SHIFTR4
        MVI_H,  0
        RET
SHIFTR4:
        MVI_H,  #FF
        RET

RES1 DW 0
RES2 DW 0
RES3 DW 0
RES4 DW 0
RES5 DW 0
RES6 DW 0

STRN DB #0D,#0A,'.',#0D,#0A,'.',#0D,#0A,0
STR1 DB #1F,"#1234>>#"

Новый выхлоп эмулятора с замером тактов и вычисленными значениями для N от 0 до 32:

 TEST1.OUT
Code:
{pseudo-86rk:v0.3}
radio-86rk
-->{a-event:0::::}
{a-event:49::::}
{a-event:64::::}
{a-event:42::::}
{b-event:54:0:::}
{b-event:103:49:::}
{b-event:167:64:::}
{b-event:209:42:::}
{c-event:312:103:0::}
{c-event:361:152:49::}
{c-event:425:216:64::}
{c-event:467:258:42::}

#1234>>#00 #1234 #1234 #1234 #1234 #EDCB #EDCB
.
.{a-event:146598:146389:146131::}
{a-event:95:146484:146226::}
{a-event:64:146548:146290::}
{a-event:72:146620:146362::}
{b-event:54:146674:146416::}
{b-event:190:136:146552::}
{b-event:254:64:146616::}
{b-event:353:99:146715::}
{c-event:456:103:146818::}
{c-event:592:239:136::}
{c-event:656:303:64::}
{c-event:755:402:99::}

#1234>>#01 #2468 #2468 #091A #091A #F6E5 #F6E5
.
.{a-event:146861:146508:146106::}
{a-event:120:146628:146226::}
{a-event:64:146692:146290::}
{a-event:102:146794:146392::}
{b-event:54:146848:146446::}
{b-event:237:183:146629::}
{b-event:301:64:146693::}
{b-event:457:156:146849::}
{c-event:560:103:146952::}
{c-event:743:286:183::}
{c-event:807:350:64::}
{c-event:963:506:156::}

#1234>>#02 #48D0 #48D0 #048D #048D #FB72 #FB72
.
.{a-event:147083:146626:146120::}
{a-event:145:146771:146265::}
{a-event:64:146835:146329::}
{a-event:132:146967:146461::}
{b-event:54:147021:146515::}
{b-event:284:230:146745::}
{b-event:348:64:146809::}
{b-event:561:213:147022::}
{c-event:664:103:147125::}
{c-event:894:333:230::}
{c-event:958:397:64::}
{c-event:1171:610:213::}

#1234>>#03 #91A0 #91A0 #0246 #0246 #FDB9 #FDB9
.
.{a-event:147291:146730:146120::}
{a-event:170:146900:146290::}
{a-event:64:146964:146354::}
{a-event:162:147126:146516::}
{b-event:54:147180:146570::}
{b-event:331:277:146847::}
{b-event:395:64:146911::}
{b-event:665:270:147181::}
{c-event:768:103:147284::}
{c-event:1045:380:277::}
{c-event:1109:444:64::}
{c-event:1379:714:270::}

#1234>>#04 #2340 #2340 #0123 #0123 #FEDC #FEDC
.
.{a-event:147510:146845:146131::}
{a-event:195:147040:146326::}
{a-event:64:147104:146390::}
{a-event:192:147296:146582::}
{b-event:54:147350:146636::}
{b-event:378:324:146960::}
{b-event:442:64:147024::}
{b-event:769:327:147351::}
{c-event:872:103:147454::}
{c-event:1196:427:324::}
{c-event:1260:491:64::}
{c-event:1587:818:327::}

#1234>>#05 #4680 #4680 #0091 #0091 #FF6E #FF6E
.
.{a-event:147693:146924:146106::}
{a-event:220:147144:146326::}
{a-event:64:147208:146390::}
{a-event:222:147430:146612::}
{b-event:54:147484:146666::}
{b-event:425:371:147037::}
{b-event:489:64:147101::}
{b-event:873:384:147485::}
{c-event:976:103:147588::}
{c-event:1347:474:371::}
{c-event:1411:538:64::}
{c-event:1795:922:384::}

#1234>>#06 #8D00 #8D00 #0048 #0048 #FFB7 #FFB7
.
.{a-event:147915:147042:146120::}
{a-event:245:147287:146365::}
{a-event:64:147351:146429::}
{a-event:252:147603:146681::}
{b-event:54:147657:146735::}
{b-event:472:418:147153::}
{b-event:536:64:147217::}
{b-event:977:441:147658::}
{c-event:1080:103:147761::}
{c-event:1498:521:418::}
{c-event:1562:585:64::}
{c-event:2003:1026:441::}

#1234>>#07 #1A00 #1A00 #0024 #0024 #FFDB #FFDB
.
.{a-event:148137:147160:146134::}
{a-event:82:147242:146216::}
{a-event:64:147306:146280::}
{a-event:282:147588:146562::}
{b-event:54:147642:146616::}
{b-event:155:101:146717::}
{b-event:219:64:146781::}
{b-event:717:498:147279::}
{c-event:820:103:147382::}
{c-event:921:204:101::}
{c-event:985:268:64::}
{c-event:1483:766:498::}

#1234>>#08 #3400 #3400 #0012 #0012 #FFED #FFED
.
.{a-event:147603:146886:146120::}
{a-event:295:147181:146415::}
{a-event:64:147245:146479::}
{a-event:312:147557:146791::}
{b-event:54:147611:146845::}
{b-event:566:512:147357::}
{b-event:630:64:147421::}
{b-event:1185:555:147976::}
{c-event:1288:103:148079::}
{c-event:1800:615:512::}
{c-event:1864:679:64::}
{c-event:2419:1234:555::}

#1234>>#09 #6800 #6800 #0009 #0009 #FFF6 #FFF6
.
.{a-event:148536:147351:146117::}
{a-event:320:147671:146437::}
{a-event:64:147735:146501::}
{a-event:342:148077:146843::}
{b-event:54:148131:146897::}
{b-event:613:559:147456::}
{b-event:677:64:147520::}
{b-event:1289:612:148132::}
{c-event:1392:103:148235::}
{c-event:1951:662:559::}
{c-event:2015:726:64::}
{c-event:2627:1338:612::}

#1234>>#0A #D000 #D000 #0004 #0004 #FFFB #FFFB
.
.{a-event:148768:147479:146141::}
{a-event:345:147824:146486::}
{a-event:64:147888:146550::}
{a-event:372:148260:146922::}
{b-event:54:148314:146976::}
{b-event:660:606:147582::}
{b-event:724:64:147646::}
{b-event:1393:669:148315::}
{c-event:1496:103:148418::}
{c-event:2102:709:606::}
{c-event:2166:773:64::}
{c-event:2835:1442:669::}

#1234>>#0B #A000 #A000 #0002 #0002 #FFFD #FFFD
.
.{a-event:148976:147583:146141::}
{a-event:370:147953:146511::}
{a-event:64:148017:146575::}
{a-event:402:148419:146977::}
{b-event:54:148473:147031::}
{b-event:707:653:147684::}
{b-event:771:64:147748::}
{b-event:1497:726:148474::}
{c-event:1600:103:148577::}
{c-event:2253:756:653::}
{c-event:2317:820:64::}
{c-event:3043:1546:726::}

#1234>>#0C #4000 #4000 #0001 #0001 #FFFE #FFFE
.
.{a-event:149170:147673:146127::}
{a-event:395:148068:146522::}
{a-event:64:148132:146586::}
{a-event:432:148564:147018::}
{b-event:54:148618:147072::}
{b-event:754:700:147772::}
{b-event:818:64:147836::}
{b-event:1601:783:148619::}
{c-event:1704:103:148722::}
{c-event:2404:803:700::}
{c-event:2468:867:64::}
{c-event:3251:1650:783::}

#1234>>#0D #8000 #8000 #0000 #0000 #FFFF #FFFF
.
.{a-event:149378:147777:146127::}
{a-event:420:148197:146547::}
{a-event:64:148261:146611::}
{a-event:462:148723:147073::}
{b-event:54:148777:147127::}
{b-event:801:747:147874::}
{b-event:865:64:147938::}
{b-event:1705:840:148778::}
{c-event:1808:103:148881::}
{c-event:2555:850:747::}
{c-event:2619:914:64::}
{c-event:3459:1754:840::}

#1234>>#0E #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:149597:147892:146138::}
{a-event:445:148337:146583::}
{a-event:64:148401:146647::}
{a-event:492:148893:147139::}
{b-event:54:148947:147193::}
{b-event:848:794:147987::}
{b-event:912:64:148051::}
{b-event:1809:897:148948::}
{c-event:1912:103:149051::}
{c-event:2706:897:794::}
{c-event:2770:961:64::}
{c-event:3667:1858:897::}

#1234>>#0F #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:149794:147985:146127::}
{a-event:470:148455:146597::}
{a-event:64:148519:146661::}
{a-event:522:149041:147183::}
{b-event:54:149095:147237::}
{b-event:895:841:148078::}
{b-event:959:64:148142::}
{b-event:1913:954:149096::}
{c-event:2016:103:149199::}
{c-event:2857:944:841::}
{c-event:2921:1008:64::}
{c-event:3875:1962:954::}

#1234>>#10 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:149995:148082:146120::}
{a-event:495:148577:146615::}
{a-event:64:148641:146679::}
{a-event:552:149193:147231::}
{b-event:54:149247:147285::}
{b-event:942:888:148173::}
{b-event:1006:64:148237::}
{b-event:2017:1011:149248::}
{c-event:2120:103:149351::}
{c-event:3008:991:888::}
{c-event:3072:1055:64::}
{c-event:4083:2066:1011::}

#1234>>#11 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150203:148186:146120::}
{a-event:520:148706:146640::}
{a-event:64:148770:146704::}
{a-event:582:149352:147286::}
{b-event:54:149406:147340::}
{b-event:989:935:148275::}
{b-event:1053:64:148339::}
{b-event:2121:1068:149407::}
{c-event:2224:103:149510::}
{c-event:3159:1038:935::}
{c-event:3223:1102:64::}
{c-event:4291:2170:1068::}

#1234>>#12 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150422:148301:146131::}
{a-event:545:148846:146676::}
{a-event:64:148910:146740::}
{a-event:612:149522:147352::}
{b-event:54:149576:147406::}
{b-event:1036:982:148388::}
{b-event:1100:64:148452::}
{b-event:2225:1125:149577::}
{c-event:2328:103:149680::}
{c-event:3310:1085:982::}
{c-event:3374:1149:64::}
{c-event:4499:2274:1125::}

#1234>>#13 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150619:148394:146120::}
{a-event:570:148964:146690::}
{a-event:64:149028:146754::}
{a-event:642:149670:147396::}
{b-event:54:149724:147450::}
{b-event:1083:1029:148479::}
{b-event:1147:64:148543::}
{b-event:2329:1182:149725::}
{c-event:2432:103:149828::}
{c-event:3461:1132:1029::}
{c-event:3525:1196:64::}
{c-event:4707:2378:1182::}

#1234>>#14 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:150827:148498:146120::}
{a-event:595:149093:146715::}
{a-event:64:149157:146779::}
{a-event:672:149829:147451::}
{b-event:54:149883:147505::}
{b-event:1130:1076:148581::}
{b-event:1194:64:148645::}
{b-event:2433:1239:149884::}
{c-event:2536:103:149987::}
{c-event:3612:1179:1076::}
{c-event:3676:1243:64::}
{c-event:4915:2482:1239::}

#1234>>#15 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151035:148602:146120::}
{a-event:620:149222:146740::}
{a-event:64:149286:146804::}
{a-event:702:149988:147506::}
{b-event:54:150042:147560::}
{b-event:1177:1123:148683::}
{b-event:1241:64:148747::}
{b-event:2537:1296:150043::}
{c-event:2640:103:150146::}
{c-event:3763:1226:1123::}
{c-event:3827:1290:64::}
{c-event:5123:2586:1296::}

#1234>>#16 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151243:148706:146120::}
{a-event:645:149351:146765::}
{a-event:64:149415:146829::}
{a-event:732:150147:147561::}
{b-event:54:150201:147615::}
{b-event:1224:1170:148785::}
{b-event:1288:64:148849::}
{b-event:2641:1353:150202::}
{c-event:2744:103:150305::}
{c-event:3914:1273:1170::}
{c-event:3978:1337:64::}
{c-event:5331:2690:1353::}

#1234>>#17 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151462:148821:146131::}
{a-event:670:149491:146801::}
{a-event:64:149555:146865::}
{a-event:762:150317:147627::}
{b-event:54:150371:147681::}
{b-event:1271:1217:148898::}
{b-event:1335:64:148962::}
{b-event:2745:1410:150372::}
{c-event:2848:103:150475::}
{c-event:4065:1320:1217::}
{c-event:4129:1384:64::}
{c-event:5539:2794:1410::}

#1234>>#18 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151659:148914:146120::}
{a-event:695:149609:146815::}
{a-event:64:149673:146879::}
{a-event:792:150465:147671::}
{b-event:54:150519:147725::}
{b-event:1318:1264:148989::}
{b-event:1382:64:149053::}
{b-event:2849:1467:150520::}
{c-event:2952:103:150623::}
{c-event:4216:1367:1264::}
{c-event:4280:1431:64::}
{c-event:5747:2898:1467::}

#1234>>#19 #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:151867:149018:146120::}
{a-event:720:149738:146840::}
{a-event:64:149802:146904::}
{a-event:822:150624:147726::}
{b-event:54:150678:147780::}
{b-event:1365:1311:149091::}
{b-event:1429:64:149155::}
{b-event:2953:1524:150679::}
{c-event:3056:103:150782::}
{c-event:4367:1414:1311::}
{c-event:4431:1478:64::}
{c-event:5955:3002:1524::}

#1234>>#1A #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152082:149129:146127::}
{a-event:745:149874:146872::}
{a-event:64:149938:146936::}
{a-event:852:150790:147788::}
{b-event:54:150844:147842::}
{b-event:1412:1358:149200::}
{b-event:1476:64:149264::}
{b-event:3057:1581:150845::}
{c-event:3160:103:150948::}
{c-event:4518:1461:1358::}
{c-event:4582:1525:64::}
{c-event:6163:3106:1581::}

#1234>>#1B #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152290:149233:146127::}
{a-event:770:150003:146897::}
{a-event:64:150067:146961::}
{a-event:882:150949:147843::}
{b-event:54:151003:147897::}
{b-event:1459:1405:149302::}
{b-event:1523:64:149366::}
{b-event:3161:1638:151004::}
{c-event:3264:103:151107::}
{c-event:4669:1508:1405::}
{c-event:4733:1572:64::}
{c-event:6371:3210:1638::}

#1234>>#1C #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152509:149348:146138::}
{a-event:795:150143:146933::}
{a-event:64:150207:146997::}
{a-event:912:151119:147909::}
{b-event:54:151173:147963::}
{b-event:1506:1452:149415::}
{b-event:1570:64:149479::}
{b-event:3265:1695:151174::}
{c-event:3368:103:151277::}
{c-event:4820:1555:1452::}
{c-event:4884:1619:64::}
{c-event:6579:3314:1695::}

#1234>>#1D #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152706:149441:146127::}
{a-event:820:150261:146947::}
{a-event:64:150325:147011::}
{a-event:942:151267:147953::}
{b-event:54:151321:148007::}
{b-event:1553:1499:149506::}
{b-event:1617:64:149570::}
{b-event:3369:1752:151322::}
{c-event:3472:103:151425::}
{c-event:4971:1602:1499::}
{c-event:5035:1666:64::}
{c-event:6787:3418:1752::}

#1234>>#1E #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:152914:149545:146127::}
{a-event:845:150390:146972::}
{a-event:64:150454:147036::}
{a-event:972:151426:148008::}
{b-event:54:151480:148062::}
{b-event:1600:1546:149608::}
{b-event:1664:64:149672::}
{b-event:3473:1809:151481::}
{c-event:3576:103:151584::}
{c-event:5122:1649:1546::}
{c-event:5186:1713:64::}
{c-event:6995:3522:1809::}

#1234>>#1F #0000 #0000 #0000 #0000 #FFFF #FFFF
.
.{a-event:153122:149649:146127::}
{a-event:49:149698:146176::}
{a-event:64:149762:146240::}
{a-event:1002:150764:147242::}
{b-event:54:150818:147296::}
{b-event:103:49:147345::}
{b-event:167:64:147409::}
{b-event:2033:1866:149275::}
{c-event:2136:103:149378::}
{c-event:2185:152:49::}
{c-event:2249:216:64::}
{c-event:4115:2082:1866::}

#1234>>#20 #1234 #0000 #1234 #0000 #EDCB #FFFF
.
.{halt}
{from-last-a:150215}
{from-last-b:148182}
{from-last-c:146100}
{bye}

Обновлённый эксель:


Attachments:
shifts.xls [12 KiB]
Downloaded 13 times

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
23 Jul 2024 19:06
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
На самом деле сдвиги от 16 до 31 бесполезны - там результат заведомо известен (#0000 или #FFFF).
От 9 до 15 тоже можно ускорить прикладывая к оставшемуся байту - должно быть быстрее,
но дополнительные проверки могут ещё сильнее замедлить сдвиги на небольшое количество бит...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


23 Jul 2024 21:08
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
Исправил косяк в !=
Code:
// 0x91 // !=  A,B -> A!=B
*EXPR 0x91
#genlab %l1
#genlab %l2
        POP_D
        MOV_A,H
        CMP_D
        JNZ     %l1
        MOV_A,L
        SUB_E
        JZ      %l2
%l1
        MVI_A,  #FF
%l2
        MOV_H,A
        MOV_L,A
*
поставив SUB вместо второго CMP, чтобы регистр A обнулился, если половинки равны, а то у меня если сравнивать одинаковые ненулевые числа меньше 256, то подпрограмма ошибочно считала, что они неравны...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


24 Jul 2024 09:49
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2023 06:59
Posts: 235
Reply with quote
Это код для 16бит?
А он прокатит в случае A>0,B<0(не регистры, а переменные)?

_________________
uselessretro.blogspot.com


24 Jul 2024 20:34
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
shiny wrote:
Это код для 16бит?
А он прокатит в случае A>0,B<0(не регистры, а переменные)?
Да - сравниваются HL и взятый со стека DE
Если старшие байты не равны, то оно сразу на %l1 уйдёт - после первого CMP

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


24 Jul 2024 21:04
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2023 06:59
Posts: 235
Reply with quote
А, это сравнение, не определил спросонья(:
Я как-то раз бился с кодом и подсмотрел у HitechC:
Code:
main()
{
   int xm=-127;
   int ym=96;

   if (xm>ym) xm=-xm;

}


вышло

Code:
loc_80F7:            ; CODE XREF: sub_80F4+46j
      ld   (ix+0FEh), 81h ; 'Ѓ'
      ld   (ix+0FFh), 0FFh   ; xm=-127
      ld   (ix+0FCh), 60h ; '`'
      ld   (ix+0FDh), 0   ; ym=96
      ld   e, (ix+0FEh)
      ld   d, (ix+0FFh)
      ld   l, (ix+0FCh)
      ld   h, (ix+0FDh)
      call   sub_813D   ; if (xm>ym) xm=-xm;
      jp   p, loc_812B
      ld   e, (ix+0FEh)   ; xm=-xm
      ld   d, (ix+0FFh)
      ld   hl, 0
      or   a
      sbc   hl, de
      ld   (ix+0FEh), l
      ld   (ix+0FFh), h

loc_812B:            ; CODE XREF: sub_80F4+22j
      ld   sp, ix
      pop   ix
      ret
; ---------------------------------------------------------------------------

loc_8130:            ; CODE XREF: sub_80F4j
      push   ix
      ld   ix, 0
      add   ix, sp
      push   bc
      push   bc
      jp   loc_80F7
; End of function sub_80F4


; =============== S U B   R O U T   I N E =======================================


sub_813D:            ; CODE XREF: sub_80F4+1Fp
      ld   a, h
      xor   d
      jp   m, loc_8145
      sbc   hl, de
      ret
; ---------------------------------------------------------------------------

loc_8145:            ; CODE XREF: sub_813D+2j
      ld   a, h
      and   80h ; 'Ђ'
      sbc   hl, de
      inc   a
      ret


_________________
uselessretro.blogspot.com


24 Jul 2024 21:13
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
вот тоже самое у меня :)
Code:
robot "Test0"
author "Shaos"
main()
{
   xm=-127;
   ym=96;

   if(xm>ym) xm=-xm;
}
после препроцессора:
Code:
ROBOT "Test0"
AUTHOR "Shaos"
START:
XM=-127
YM=96
(XM>YM);IFN L _l1;XM=-XM
_l1: RET
__END: END
скомпилированное в байткод RobbyVM:
Code:
// Generated by ROBBYC version 2.3.2
// Alexander "Shaos" Shabarshin <me@shaos.net>

>>>>(1) robot "Test0"
>>>>(2) author "Shaos"

// HEADER OF THE ROBOT

// Robot 'Test0'
// 2 variables
// 49 bytes of code
// 0 bytes of image

02 77 18 20 00 05 54 65 73 74 30 00 02 00 31 00 |.w. ..Test0...1.
FF FF FF 00 00 00 00 00 53 68 61 6F 73 00 00 00 |........Shaos...

// CODE OF THE ROBOT

>>>>(3) main()
MAIN.R(3) START:

>>>>(4) {
>>>>(5)    xm=-127;
MAIN.R(5) XM=-127
0000 20
0001 01
0002 00
0003 00
0004 00
0005 81
0006 FF

>>>>(6)    ym=96;
MAIN.R(6) YM=96
0007 20
0008 01
0009 01
000A 00
000B 00
000C 60
000D 00

>>>>(7)
>>>>(8)    if(xm>ym) xm=-xm;
MAIN.R(8) (XM>YM);IFN L _l1;XM=-XM
000E 40
000F 0D
0010 F5 REG L
0011 0E
0012 FF
0013 F5 PUSH 0
0014 00
0015 00
0016 F3 LOAD
0017 F5 PUSH 1
0018 01
0019 00
001A F3 LOAD
001B 92 >
001C F4 SAVE
001D 42
001E 01
001F 0E
0020 FF
0021 00
0022 2F
0023 00
0024 40
0025 09
0026 F5 PUSH 0
0027 00
0028 00
0029 F5 PUSH 0
002A 00
002B 00
002C F3 LOAD
002D E0 (-)
002E F4 SAVE

>>>>(9) }
MAIN.R(9) _l1: RET
002F 33
MAIN.R(0) __END: END
0030 FF
оттранслируется в ассемблер i8080:
Code:
\ Generated by ROBBYCC v2.0.2 (Jul 18 2024)
\ Part of nedoPC SDK, see http://www.nedopc.org/nedopc/SDK

        ORG     0
@CODE   EQU     0
@BASE   EQU     1024
@REGS   EQU     #0444
@REG_X  EQU     #0444
@REG_Y  EQU     #0446
\REG_D
@REG_N  EQU     #044A
\REG_K
@REG_R  EQU     #044E
@REG_T  EQU     #0450
\REG_E
\REG_M
\REG_I
@REG_A  EQU     #0458
@REG_B  EQU     #045A
@REG_C  EQU     #045C
\REG_P
@REG_L  EQU     #0460
\REG_S
@RAND   EQU     0
        JMP     STARTUP
        \ DATA
_B_OPTS DB  0
_L_FONT DW  0
_L_SIZE DW  0
_L_CODE DW  @CODE
_L_BASE DW  @BASE
_L_REGS DW  @REGS
_L_OSTK DW  0
        DB  "[NEDOPC SDK BIN]"
PROCSYS DB  16 DUP(0) \ PROCESSOR/SYSTEM ID
TILES:
        \ TODO: move tiles here
CHX     DB  0
CHY     DB  0
CHS     DB  4
CHB     DB  0
_NPLANE DW  0
_ANGLE  DB  0
_COLOR  DB  0
_CURX   DB  0
_CURY   DB  0
_SAYX   DB  0
_SAYY   DB  0
_SAYC   DB  0
_ATRS   DB  0
        \ CODE
STARTUP:
        \ INIT SYSTEM
        CALL    INIT
        \ COMMON INIT
        CALL    _STD_INIT
        \ SAVE OLD SP
        LXI_H,  0
        DAD_SP
        SHLD    _L_OSTK
        \ SET NEW SP
        LHLD    _L_REGS
        SPHL
        \ EXECUTE CODE
        CALL    _START
        \ RESTORE OLD SP
        LHLD    _L_OSTK
        SPHL
        RET
_START:
\ *0x20 %a1 %m2
_j0000:
        LHLD    _L_BASE
        LXI_D,  #0000
        DAD_D
        DAD_D
        PUSH_H
        LXI_H,  #FF81
        POP_D
        XCHG
        MOV_M,E
        INX_H
        MOV_M,D
\ *0x20 %a1 %m2
_j0007:
        LHLD    _L_BASE
        LXI_D,  #0001
        DAD_D
        DAD_D
        PUSH_H
        LXI_H,  #0060
        POP_D
        XCHG
        MOV_M,E
        INX_H
        MOV_M,D
\ *0x40
_j000E:
\ 0xF5
        PUSH_H
        LXI_H,  #FF0E
\ 0xF5
        PUSH_H
        LXI_H,  #0000
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ     _l0001
        \ REGISTER
        CALL    _R_GET
        JMP     _l0002
_l0001:
        \ VARIABLE
        CALL    _B_GET
_l0002:
\ 0xF5
        PUSH_H
        LXI_H,  #0001
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ     _l0003
        \ REGISTER
        CALL    _R_GET
        JMP     _l0004
_l0003:
        \ VARIABLE
        CALL    _B_GET
_l0004:
\ 0x92
        POP_D
        MOV_A,E
        SUB_L
        MOV_L,A
        MOV_A,D
        SBB_H
        MOV_H,A
        ORA_L
        JZ      _l0006
        MOV_A,H
        ANA_A
        JM      _l0005
        LXI_H,  #FFFF
        JMP     _l0006
_l0005:
        LXI_H,  0
_l0006:
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ     _l0007
        \ REGISTER
        CALL    _R_SET
        JMP     _l0008
_l0007:
        \ VARIABLE
        CALL    _B_SET
_l0008:
        POP_H
\ *0x42 0x01 0x0E 0xFF 0x00 %w1
_j001D:
        LHLD @REG_L
        MOV_A,H
        ORA_L
        JZ _j002F
\ *0x40
_j0024:
\ 0xF5
        PUSH_H
        LXI_H,  #0000
\ 0xF5
        PUSH_H
        LXI_H,  #0000
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ     _l0009
        \ REGISTER
        CALL    _R_GET
        JMP     _l0010
_l0009:
        \ VARIABLE
        CALL    _B_GET
_l0010:
\ 0xE0
        MOV_A,H
        CMA
        MOV_H,A
        MOV_A,L
        CMA
        MOV_L,A
        INX_H
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ     _l0011
        \ REGISTER
        CALL    _R_SET
        JMP     _l0012
_l0011:
        \ VARIABLE
        CALL    _B_SET
_l0012:
        POP_H
\ *0x33
_j002F:
        RET
\ *0xFF
_j0030:

+/home/shaos/src/SDK-work/LIB/I8080/_STD
+/home/shaos/src/SDK-work/LIB/I8080/NULL
+/home/shaos/src/SDK-work/LIB/I8080/_CLIB
+/home/shaos/src/SDK-work/LIB/I8080/_VARS
+/home/shaos/src/SDK-work/LIB/I8080/NULL_
надо подумать как к переменным побыстрее обращаться...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


25 Jul 2024 00:22
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2023 06:59
Posts: 235
Reply with quote
Аж голове больно (: Что-то я не врублюсь - тут сравнение на равенство?

_________________
uselessretro.blogspot.com


25 Jul 2024 03:37
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23285
Location: Silicon Valley
Reply with quote
У меня так:
Code:
        POP_D
        MOV_A,E
        SUB_L
        MOV_L,A
        MOV_A,D
        SBB_H
        MOV_H,A
        ORA_L
        JZ      _l0006
        MOV_A,H
        ANA_A
        JM      _l0005
        LXI_H,  #FFFF
        JMP     _l0006
_l0005:
        LXI_H,  0
_l0006:
Сначала вычитаем HL (второй аргумент) из DE (первый аргумент вынутый из стека), потом сравниваем с нулём - если равно, то ответ 0, а если неравно, то проверяем знак старшего байта результата вычитания - если минус, то ответ 0, а если плюс, то ответ -1 (TRUE)

P.S. В варианте для Z80 побайтное вычитание заменится на
Code:
      or   a
      sbc   hl, de

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


25 Jul 2024 08:59
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2023 06:59
Posts: 235
Reply with quote
Кстати, а в библиотеке не завалялось byte reverse? Просто взглянуть

_________________
uselessretro.blogspot.com


25 Jul 2024 09:58
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 33 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.