|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
откуда растут уши у советских бейсиков
Author |
Message |
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Микро/80 это который в 82х-83х годах до РКшки публиковался?
А бэйсик Сервис я помню! В старом здании кружка юзали, до появления Практик... У нас было несколько игрушек, которые по факту были бэйсиковыми, грузились вместе с бэйсиком одним блоком, а бэйсик был пропатчен на автозапуск программы. Монополия, Карате...
Ооо, че я подумал! Я слышал, что толи Васик-Сервис, толи Микрон был адаптирован под Z80. А раз у всех ядра схожие, то и другие можно адаптировать тем же методом, так?
|
30 Jun 2011 03:11 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Шевцов пишет, что при переносе ВАСЮКОВ под Z80 основная проблема -
это разница в исполнении RST, т.к. они обширно используются.
Вторая проблема - это использование недокументированных кодов К580
для защиты некоторых "фирменных" программ, для ВАСЮКОВ не так характерна,
как для игр...
Я хотел выложить оригинал Шевцова по адаптации - но что-то под руку
прям не попадается, но у Фифана - должен быть.
|
30 Jun 2011 05:09 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 873
|
Это с каких таких пор RST на Z80 по-другому работает?
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
30 Jun 2011 06:37 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
За чо прочитал - за то и пересказываю. Можно обратиться к первоисточнику,
сам не переносил, и не вникал в эти проблемы, а с учетом наступившей жары,
даже что-то и не хочу...
PS. Я смотрю по своим архивам, найду - выложу...
PPS. С RST - виноват, был неправ, автора переврал...
Shaos отпочковал статью Шевцова в форум по Специалисту: http://www.nedopc.org/forum/viewtopic.php?t=9632
|
30 Jun 2011 06:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
| | | | Shaos wrote: вот это вот басик (RDK PROMPT BASIC V3.2 3K) не похож на гейтсовский (хотя позже выяснилось, что таки похож - на басик LEVEL1 для TRS-80): а у всех остальных таблица токенов (находящяяся где-то вначале, где-то в конце, где-то меньше, где-то больше) говорит о том, что их оригинальный автор - биллогейц: P.S. ещё один кусок явно есть: http://web.archive.org/web/200112252059 ... dis_12.htm | | | | Code: If tghe argument in FACCUM is negative, then skip over the 0C5F EF Rnd RST TestSign 0C60 FA7C0C JM 0C7C Load the seed into FACCUM. 0C63 21910C LXI H,RND_SEED 0C66 CD0F0A CALL FLoadFromMem 0C69 C8 RZ Multiply seed by 11,879,546. 0C6A 013598 LXI B,9835 0C6D 117A44 LXI D,447A 0C70 CDE508 CALL FMul+2 Add 0.00000003927678 0C73 012868 LXI B,6828 0C76 1146B1 LXI D,B146 0C79 CD1208 CALL FAdd+2 Swap first and third mantissa bytes. 0C7C CD1D0A CALL FAccToBCDE 0C7F 7B MOV A,E 0C80 59 MOV E,C 0C81 4F MOV C,A
Set FTEMP_SIGN to 0x80 to indicate to FNormalise that it doesn't need to change the sign. Also set FACCUM's exponent to 0 so the result, when normalised, will be less than 1. 0C82 3680 MVI M,80 0C84 2B DCX H 0C85 46 MOV B,M 0C86 3680 MVI M,80 0C88 CD5E08 CALL FNormalise+3 Exit via a copy of the result to RND_SEED so it can be used for the next time RND is called. 0C8B 21910C LXI H,RND_SEED 0C8E C3290A JMP FCopyToMem Seed for random number generation. 0C91 52C74F80 RND_SEED 0.811635
| | | | |
разве что константа RND_SEED отличается (ну и адреса переходов естественно) P.P.S. также попадаются отдельные куски вот отсюда: http://web.archive.org/web/200112121255 ... dis_17.htm | | | | |
Задумал я тут написать простую программку, которая будет считать процент "заимствования" кода одной программы в другой (применительно к 8080 процессору). Вот что мне подумалось - так программа может быть перетранслирована в новую память, то адреса могут сбится, т.е. все переходы (J*, C*), если они встречаются в большем повторяющемся куске кода, следует считать совпадающими, не взирая на используемый адрес. Тоже самое касается команд чтения записи данных из памяти - LDA/STA и SHLD/LHLD. Вопрос возникает по поводу LXI - по идее в HL также можно загрузить адрес переменной и потом обращаться к ней через регистр M, т.е. такие команды тоже надо считать заведомо совпадающими? В связи с этим - чтобы исключить ложные срабатывания минимальную длину заведомо повторяющегося участка следует принять за 4 байта или даже за 5...
|
02 Jul 2011 20:13 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А зачем?
|
03 Jul 2011 01:37 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
вот такая программа у меня получилась: | | | | Code: /* cmp8080.c - Alexander Shabarshin 03.07.2011 */
#include <stdio.h> #include <stdlib.h> #include <string.h>
#if 0 #define DEBUG #endif #define MINSEC 4
int main(int argc, char** argv) { int i,j,k,g,a,m,n,p,b,f,l1,l2,ma,mb; FILE *f1,*f2; short *m1,*m2; if(argc<3) return -1; f1 = fopen(argv[1],"rb"); if(f1==NULL) return -2; fseek(f1,0,SEEK_END); l1 = ftell(f1); fseek(f1,0,SEEK_SET); m1 = (short*)malloc(l1*2); if(m1==NULL){fclose(f1);return -3;} for(i=0;i<l1;i++) m1[i]=fgetc(f1); fclose(f1); printf("%s loaded : %i bytes\n",argv[1],l1); f2 = fopen(argv[2],"rb"); if(f2==NULL) return -3; fseek(f2,0,SEEK_END); l2 = ftell(f2); fseek(f2,0,SEEK_SET); m2 = (short*)malloc(l2*2); if(m2==NULL){fclose(f2);return -3;} for(i=0;i<l2;i++) m2[i]=fgetc(f2); fclose(f2); printf("%s loaded : %i bytes\n",argv[2],l2); ma = -1; m = 0; p = 0; for(i=0;i<l1;i++) { if(m1[i]<0) continue; #ifdef DEBUG printf("0x%2.2X\t%i max=%i\n",i,p,m); #endif for(j=0;j<l2;j++) { if(m2[j]<0) continue; a=-1; n=0; k=0; g=1; while(g) { f=0; if(i+k<l1 && j+k<l2) { b=m1[i+k]; #ifdef DEBUG printf("compare m1[0x%4.4X]=0x%2.2X and m2[0x%4.4X]=0x%2.2X (k=%i a=%i)\n",i+k,b,j+k,m2[j+k],k,a); #endif } else b=-1000; if(b>=0&&b==m2[j+k]) { f=1; if(b==0x22||b==0x2A||b==0x32||b==0x3A|| b==0xC2||b==0xC3||b==0xC4||b==0xCA||b==0xCC||b==0xCD|| b==0xD2||b==0xD4||b==0xDA||b==0xDC|| b==0xE2||b==0xE4||b==0xEA||b==0xEC|| b==0xF2||b==0xF4||b==0xFA||b==0xFC) a=0; else if(b!=0x00&&a<0) n++; } else { if(b>=0&&(a==1||a==2)) f=1; } if(f) { #ifdef DEBUG printf("SAME!\n"); #endif m1[i+k]=-m1[i+k]; if(m1[i+k]==0) m1[i+k]=-256; } else { g=0; if(n>=2&&k>=MINSEC) { if(k>m){m=k;ma=i;mb=j;} p+=k; #ifdef DEBUG printf("DETECTED %i BYTES (%i)!\n",k,n); #endif while(--k>=0) { m2[j+k]=-m2[j+k]; if(m2[j+k]==0) m2[j+k]=-256; } } else { while(--k>=0) { m1[i+k]=-m1[i+k]; if(m1[i+k]==256) m1[i+k]=0; } } } if(a==2) a=-1; if(a>=0) a++; k++; } } } printf("%2.2lf percent copy (max=%i maxa=0x%4.4X maxb=0x%4.4X)\n",100.0*p/l1,m,ma,mb); #if 1 for(i=0;i<m;i++) printf("0x%4.4X 0x%2.2X | 0x%4.4X 0x%2.2X\n", ma+i,m1[ma+i]<0?(-m1[ma+i])&0xFF:-1,mb+i,m2[mb+i]<0?(-m2[mb+i])&0xFF:-1); #endif free(m1); free(m2); return 0; }
| | | | |
вот результаты, полученные по этой методике (сравнивал бейсики с альтаиром 4К и 8К, а также TRS-80 LEVEL1): программа не идеальна - величины менее 10% наверное можно считать случайным совпадением (ложные срабатывания) - т.е. это означает, что коды мало связаны вот самый длинный повторяющийся кусок (165 байт) в BASIC_PR.RKR из altair8k:
Чтобы узнать насколько радиолюбители Советского Союза обязаны Биллу Гейцу...
Ну и вообще - интересно было померять уровень плагиата в программках для 8080
Last edited by Shaos on 03 Jul 2011 02:58, edited 1 time in total.
|
03 Jul 2011 02:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Опасная затея - люди Билла прочитают, дык изыщут возможность возместить себе
то, что им радиолюбители Советского Союза " обязаны"...
Посадят всех нафиг в долговую яму с процентами, как директора школы Поносова.
|
03 Jul 2011 02:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
ну его древние бейсики во всём мире юзали бесплатно - не зря же он своё знаменитое письмо к хоббистам написал
микрософт деньги в основном от производителей компьютеров получал за встраивание ихнего бейсика в ром, а не от отдельных пользователей
P.S. у него кстати Easter Eggs в коде были: http://www.pagetable.com/?p=43
|
03 Jul 2011 02:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
добавил в программу игнорирование аргумента команд LXI:
получилось вот что:
> cmp8080 BASIC_RK.RKR altair8k.bin BASIC_RK.RKR loaded : 6847 bytes altair8k.bin loaded : 8192 bytes 69.30 percent copy (max=412 maxa=0x11F8 maxb=0x1393)
> cmp8080 BASIC_PR.RKR altair8k.bin BASIC_PR.RKR loaded : 7433 bytes altair8k.bin loaded : 8192 bytes 63.88 percent copy (max=812 maxa=0x1068 maxb=0x1203)
> cmp8080 BASMIC.RKR altair8k.bin BASMIC.RKR loaded : 6601 bytes altair8k.bin loaded : 8192 bytes 72.23 percent copy (max=399 maxa=0x1068 maxb=0x1203)
т.е. самый длинный повторяющийся кусок - 812 байт, а самый большой процент - 72.23%
возможно существует ещё какая-то версия микрософтовского бейсика-80, от которой как раз непосредственно и произошли все советские бейсики, но я её пока не нашёл...
P.S. нашёл описание микрософтовского бейсика версии 5:
http://www.bitsavers.org/pdf/microsoft/ ... e_1979.pdf
Last edited by Shaos on 03 Jul 2011 11:29, edited 5 times in total.
|
03 Jul 2011 11:16 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А ВАСЮКИ - компиляторы у тебя есть?
|
03 Jul 2011 11:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
нету и специально не искал - в инете поди есть
|
03 Jul 2011 11:24 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
У меня есть - СР/М-овский вариант. Правда глючил он и толком не работал.
Паскаль-компилятор СР/М-овский и то лучше работал...
|
03 Jul 2011 11:30 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
а да - в архивах CP/M чегой-то было
кстати CP/M-овский MBASIC.COM (который интерпретатор) уже непохож на эти бейсики
прародитель был где-то между...
|
03 Jul 2011 12:14 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
|
03 Jul 2011 17:55 |
|
|
Who is online |
Users browsing this forum: No registered users and 2 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
|
|