nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 05:04



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

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
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. Про шахматные программки обсуждаем в другом топике

_________________
:dj: https://mastodon.social/@Shaos


28 May 2010 20:14
Profile WWW
Devil

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

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

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


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

Joined: 21 Oct 2009 08: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 05:14
Profile
Supreme God
User avatar

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

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


10 Jun 2010 06:43
Profile
Supreme God
User avatar

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

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

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


07 Apr 2011 12:22
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08: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


29 Aug 2012 23:13
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
по-моему эти скобки ничего не значат

_________________
:dj: https://mastodon.social/@Shaos


29 Aug 2012 23:15
Profile WWW
Supreme God
User avatar

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

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

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

_________________
iLavr


29 Aug 2012 23:19
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
по-моему эти скобки ничего не значат

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

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


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

_________________
:dj: https://mastodon.social/@Shaos


29 Aug 2012 23:21
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08: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


29 Aug 2012 23:39
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
А ну дык это надо прогу переписывать :)

_________________
:dj: https://mastodon.social/@Shaos


29 Aug 2012 23:46
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08: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 01:25
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Обновил линк на страничку эмулятора и дургого сопутствующего материала:

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

_________________
:dj: https://mastodon.social/@Shaos


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

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

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

_________________
iLavr


28 Jan 2016 14:47
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
А она чегой-то не собирается у меня :(

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

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

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

_________________
:dj: https://mastodon.social/@Shaos


28 Jan 2016 15: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 6 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.