nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 12 Nov 2018 19:05



Reply to topic  [ 16 posts ]  Go to page 1, 2  Next
Самая короткая программа для эмуляции 8080 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17116
Location: Colorado
Reply with quote
... с поддержкой телетайпа и дискового контроллера: http://www.nanochess.org/emulator.html (линк поправлен в январе 2016)

Code:
                               #include <stdio.h>
           #define n(o,p,e)=y=(z=a(e)%16 p x%16 p o,a(e)p x p o),h(
                                #define s 6[o]
             #define p z=l[d(9)]|l[d(9)+1]<<8,1<(9[o]+=2)||++8[o]
                                #define Q a(7)
           #define w 254>(9[o]-=2)||--8[o],l[d(9)]=z,l[1+d(9)]=z>>8
                               #define O )):((
                  #define b (y&1?~s:s)>>"\6\0\2\7"[y/2]&1?0:(
                               #define S )?(z-=
                    #define a(f)*((7&f)-6?&o[f&7]:&l[d(5)])
                               #define C S 5 S 3
                       #define D(E)x/8!=16+E&198+E*8!=x?
                             #define B(C)fclose((C))
                       #define q (c+=2,0[c-2]|1[c-2]<<8)
                          #define m x=64&x?*c++:a(x),
                         #define A(F)=fopen((F),"rb+")
                    unsigned char o[10],l[78114],*c=l,*k=l
                          #define d(e)o[e]+256*o[e-1]
#define h(l)s=l>>8&1|128&y|!(y&255)*64|16&z|2,y^=y>>4,y^=y<<2,y^=~y>>1,s|=y&4
+64506; e,V,v,u,x,y,z,Z; main(r,U)char**U;{

     { { { } } }       { { { } } }       { { { } } }       { { { } } }
    { { {   } } }     { { {   } } }     { { {   } } }     { { {   } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
    { { {   } } }    { { {     } } }    { { {   } } }    { { {     } } }
      { { ; } }      { { {     } } }      { { ; } }      { { {     } } }
    { { {   } } }    { { {     } } }    { { {   } } }    { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
    { { {   } } }     { { {   } } }     { { {   } } }     { { {   } } }
     { { { } } }       { { { } } }       { { { } } }       { { { } } }

                                   for(v A((u A((e A((r-2?0:(V A(1[U])),"C")
),system("stty raw -echo min 0"),fread(l,78114,1,e),B(e),"B")),"A")); 118-(x
=*c++); (y=x/8%8,z=(x&199)-4 S 1 S 1 S 186 S 2 S 2 S 3 S 0,r=(y>5)*2+y,z=(x&
207)-1 S 2 S 6 S 2 S 182 S 4)?D(0)D(1)D(2)D(3)D(4)D(5)D(6)D(7)(z=x-2 C C C C
C C C C+129 S 6 S 4 S 6 S 8 S 8 S 6 S 2 S 2 S 12)?x/64-1?((0 O a(y)=a(x) O 9
[o]=a(5),8[o]=a(4) O 237==*c++?((int (*)())(2-*c++?fwrite:fread))(l+*k+1[k]*
256,128,1,(fseek(y=5[k]-1?u:v,((3[k]|4[k]<<8)<<7|2[k])<<7,Q=0),y)):0 O y=a(5
),z=a(4),a(5)=a(3),a(4)=a(2),a(3)=y,a(2)=z O c=l+d(5) O y=l[x=d(9)],z=l[++x]
,x[l]=a(4),l[--x]=a(5),a(5)=y,a(4)=z O 2-*c?Z||read(0,&Z,1),1&*c++?Q=Z,Z=0:(
Q=!!Z):(c++,Q=r=V?fgetc(V):-1,s=s&~1|r<0) O++c,write(1,&7[o],1) O z=c+2-l,w,
c=l+q O p,c=l+z O c=l+q O s^=1 O Q=q[l] O s|=1 O q[l]=Q O Q=~Q O a(5)=l[x=q]
,a(4)=l[++x] O s|=s&16|9<Q%16?Q+=6,16:0,z=s|=1&s|Q>159?Q+=96,1:0,y=Q,h(s<<8)
O l[x=q]=a(5),l[++x]=a(4) O x=Q%2,Q=Q/2+s%2*128,s=s&~1|x O Q=l[d(3)]O x=Q  /
128,Q=Q*2+s%2,s=s&~1|x O l[d(3)]=Q O s=s&~1|1&Q,Q=Q/2|Q<<7 O Q=l[d(1)]O s=~1
&s|Q>>7,Q=Q*2|Q>>7 O l[d(1)]=Q O m y n(0,-,7)y) O m z=0,y=Q|=x,h(y) O m z=0,
y=Q^=x,h(y) O m z=Q*2|2*x,y=Q&=x,h(y) O m Q n(s%2,-,7)y) O m Q n(0,-,7)y)  O
m Q n(s%2,+,7)y) O m Q n(0,+,7)y) O z=r-8?d(r+1):s|Q<<8,w O p,r-8?o[r+1]=z,r
[o]=z>>8:(s=~40&z|2,Q=z>>8) O r[o]--||--o[r-1]O a(5)=z=a(5)+r[o],a(4)=z=a(4)
+o[r-1]+z/256,s=~1&s|z>>8 O ++o[r+1]||r[o]++O o[r+1]=*c++,r[o]=*c++O z=c-l,w
,c=y*8+l O x=q,b z=c-l,w,c=l+x) O x=q,b c=l+x) O b p,c=l+z) O a(y)=*c++O r=y
,x=0,a(r)n(1,-,y)s<<8) O r=y,x=0,a(r)n(1,+,y)s<<8))));
system("stty cooked echo"); B((B((V?B(V):0,u)),v)); }


P.S. У того же автора (между прочим мексиканца) на том же сайте можно найти несколько микроскопических шахматных программ в исходниках, написанных в том же стиле...

P.P.S. Про шахматные программки обсуждаем в другом топике

_________________
:eugeek: https://twitter.com/Shaos1973


28 May 2010 21:14
Profile WWW
Doomed

Joined: 26 May 2003 07:57
Posts: 634
Reply with quote
Post 
Прикольно, если не считать два последних оператора (system и закрытие файлов), то вся программа это одна процедура main, и в ней лишь один оператор for :)

А мелкософтовый VC отказался компилировать, сказал, что слишком большая вложенность скобок :)

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


29 May 2010 12:14
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
God Damage ...!!!
Но под *NIXами это всё и в правду работает !!!

Image

А под DOS - ну нифига никак !!!

То массив слишком большой для l , то переменная не объявлена V...

Хотя хозяин кода вроде обещает, что портируется без проблем:

Code:
Porting it
It is easy if your platform has getch/kbhit and ANSI terminal
    read    -->  Z=kbhit()?getch():0
    write   -->  putchar(7[o])
    system  -->  nothing
Also add the following to trap Ctrl-C:
    #include <signal.h>
    signal(SIGINT, SIG_IGN);
On PC/DOS you will need to add ANSI.SYS to CONFIG.SYS
In *NIX the min 0 for stty is required, circa 2001 it was not required.


Затейливая головоломка...

PS. А с *NIXами - Пыхонин помог глянуть, что получится. :wink:


09 Jun 2010 06:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Я вспомнил, как-то давненько читал статью, где хвалили язык C, как кроссплатформенный макроассемблер с элементами языка высокого уровня, и ругали ассемблер, как язык на котором пишутся "пещерные" коды, в которых сам автор через неделю не разберётся.
Негативно вырисовывали возможность самомодификации кода и т.д. ....
Я вот на ассемблере даже с макросредствами, пожалуй, не смог бы запутать код до уровня такого вот исходника.
Ну, возможно, если бы не применил обфускатор, наличие которых для асемблера сомнительно... :wink:

PS. Кстати говоря - существовал (да и щас есть) язык ASIC - это как раз Ассемблер с элементами языка высокого уровня BASIC. Прикольная штука, только в свою нишу он не попал - все перешли на С, а так тоже можно было замутить весьма компактный код. Да и строг был упомянутоый язычишка.


10 Jun 2010 07:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Как стать великим программистом?

Если Вы писать программы
Не умеете нисколько,
Без разбора все валите
На плохой язык FORTRAN.
Очень смело заявляйте,
Дескать, если б на Паскале...
(Иль на Си, на крайний случай),
Вы б такое написали
Закачалися бы все.
Но при этом постарайтесь,
Сделать так, чтоб ту программу
Вам писать на самом деле
Никогда бы не пришлось.
И тогда считать все будут
Вас великим программистом! :lol:

http://frodo.planeta7.ru/lofiversion/index.php/t47.html


07 Apr 2011 13:22
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Вопрос к нашим гуру по Цэ:

А вот этот кусок кода функционален у автора: ?
Code:
main(r,U)char**U;{

     { { { } } }       { { { } } }       { { { } } }       { { { } } }
    { { {   } } }     { { {   } } }     { { {   } } }     { { {   } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
    { { {   } } }    { { {     } } }    { { {   } } }    { { {     } } }
      { { ; } }      { { {     } } }      { { ; } }      { { {     } } }
    { { {   } } }    { { {     } } }    { { {   } } }    { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
   { { {     } } }   { { {     } } }   { { {     } } }   { { {     } } }
    { { {   } } }     { { {   } } }     { { {   } } }     { { {   } } }
     { { { } } }       { { { } } }       { { { } } }       { { { } } }

                                   for(v A((u A((e A((r-2?0:(V A(1[U])),"C")
),system("stty raw -echo min 0"),fread(l,78114,1,e),B(e),"B")),"A"));

Или это "красоты", которые можно парными скобками поудалять?

Если я правильно помню - Це ведь безразличен к пробелам?

_________________
iLavr


30 Aug 2012 00:13
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17116
Location: Colorado
Reply with quote
Post 
по-моему эти скобки ничего не значат

_________________
:eugeek: https://twitter.com/Shaos1973


30 Aug 2012 00:15
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
по-моему эти скобки ничего не значат

Я хотел попробовать удалять парами - открывающая/закрывающая.
И после каждого удаления - компилировать...

Может в какой-то момент заработает...

_________________
iLavr


30 Aug 2012 00:19
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17116
Location: Colorado
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
по-моему эти скобки ничего не значат

Я хотел попробовать удалять парами - открывающая/закрывающая.
И после каждого удаления - компилировать...

Может в какой-то момент заработает...


Не заработает - там заточка под сугубо юниксовую программульку stty

_________________
:eugeek: https://twitter.com/Shaos1973


30 Aug 2012 00:21
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Не заработает - там заточка под сугубо юниксовую программульку stty

А как же:
Quote:
Porting it
It is easy if your platform has getch/kbhit and ANSI terminal
read --> Z=kbhit()?getch():0
write --> putchar(7[o])
system --> nothing
Also add the following to trap Ctrl-C:
#include <signal.h>
signal(SIGINT, SIG_IGN);
On PC/DOS you will need to add ANSI.SYS to CONFIG.SYS
In *NIX the min 0 for stty is required, circa 2001 it was not required.

И компильнуться ведь должна в итоге?

_________________
iLavr


30 Aug 2012 00:39
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17116
Location: Colorado
Reply with quote
Post 
А ну дык это надо прогу переписывать :)

_________________
:eugeek: https://twitter.com/Shaos1973


30 Aug 2012 00:46
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Есть такая вот затейливая страница:
Онлайн-компилятор для 40 языков программирования (Online IDE)

По описанию может компильнуть программу на:
Ada; Assembler; Assembler; AWK (gawk); AWK (mawk); Bash; bc; Brainf**k; C; C#; C++; C++0x; C99 strict; CLIPS; Clojure; COBOL; COBOL 85; Common Lisp (clisp); D (dmd); Erlang; F#; Factor; Falcon; Forth; Fortran; Go; Groovy; Haskell; Icon; Intercal; Java; JavaScript (rhino); JavaScript (spidermonkey); Lua; Nemerle; Nice; Nimrod; Objective-C; Ocaml; Oz; Pascal (fpc); Pascal (gpc); Perl; Perl 6; PHP; Pike; Prolog (gnu); Prolog (swi); Python; Python 3; R; Ruby; Scala; Scheme (guile); Smalltalk; SQL; Tcl; Text; Unlambda; Visual Basic .NET; Whitespace.

Подсунул я ему наш шедевр... так с пол-пинка этот монстр не справился! :lol:
Впрочем есть варианты у него... ещё попробую... :wink:


Хотя... на чистом С вроде даже компилируется, запускается, но не находит stty.
Quote:
результат: Ошибка выполнения время: 0.02s память: 3796 kB сигнал: 11 (SIGSEGV)
ввод: нет
вывод: нет
stderr:
stty: standard input: Inappropriate ioctl for device

_________________
iLavr


30 Aug 2012 02:25
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17116
Location: Colorado
Reply with quote
Обновил линк на страничку эмулятора и дургого сопутствующего материала:

http://www.nanochess.org/emulator.html

_________________
:eugeek: https://twitter.com/Shaos1973


28 Jan 2016 15:16
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Разверни программу для эмуляции 8080 в нормальный вид, если не трудно...

Давно уже интересно, что там намутили. :o

_________________
iLavr


28 Jan 2016 15:47
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17116
Location: Colorado
Reply with quote
А она чегой-то не собирается у меня :(

P.S. У него на страничке есть описание того, как работает этот эмулятор

P.P.S. Хотя нет - версия с вебстранички собралась - щас причешу..

P.P.P.S. Тут у него всё плохо - кроме последних двух строчек вся логика сидит в цикле for, причём в основном в третьем параметре с кучей троичных опеаторов ?: и запятых (я вообще не понимаю как это компилятор вообще компилирует)

_________________
:eugeek: https://twitter.com/Shaos1973


28 Jan 2016 16:00
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 16 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 3 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.