Soy un programador. Escribo juegos.Los programadores de juegos obtienen mucho respeto, Ninguno de ellos merece el honor que quiero otorgar a David Horne. Esto se debe a que David Horne escribió el mayor programa jamás escrito: ajedrez 1k en el ZX81. David Horne no es un mito urbano . David Horne logró lo que muchos incluso podrían considerar ahora imposible. Escribió un juego de ajedrez, incluso la inteligencia artificial, que se ejecutaba en una mal documentada, máquina con errores que contenía sólo 1k de memoria.
|
etiquetas: programación , zx81 , ajedrez , inteligencia artificial
PICAR CODIGO: sois unos putos mecanógrafos, NO programadores. Y vuestros títulos superiores masters cursos e inglés hablado me los paso por el culo , despues de quitarle la grapa de la foto para que no rasque.
songprogram in the world. This is just a tributewww.youtube.com/watch?v=2Jvgbe9Kx0U
PERO
¡Jódete David!, Olivier ha hecho lo mismo pero solo con 487 bytes de tamaño. Y puede hacer cosas como una apertura española u otras cosas para pillarte www.bbc.com/news/technology-31028787
Listado ASM x86 olivier.poudade.free.fr/src/BootChess.asm
Aunque si estoy de acuerdo en el fondo de lo que creo intentas decir; hay muchos inutiles que van de programadores y no son capaces de escribir un maldito algoritmo simple (ya no hablo de que sean capaces de entender un libro de Knuth), y los titulos universitarios sirven de poco si no usan la cabeza.
De todas formas lo de pagar una mierda suele ser en paises medio tercermundistas como Espana o en empresas con jefes de mierda.
Cuando le preguntaron a Brian de Palma cuanto había tardado en rodar una escena de ataque con cuchillo en la bañera que a Hitchcock le había llevado dos semanas el contesto que 2 horas.
Entonces le preguntaron como había podido resolver en 2 horas una escena que a Hitchcock le había llevado dos semanas. El contestó que gracias al trabajo que Hitchcock hizo en dos semanas el la pudo resolver en dos horas.
Además Horne lo hizo con las herramientas y lenguajes de programación limitados de su época
Que el opcode sea de 16 bits no convierte el procesador en uno de 16 bits, el opcode como si es de 128bits, a la hora de ejecutarlo lo hará como uno de 8, usando 8 ciclos, porque es de 8 bits.
Decir que el z80 es de 16 bits es como decir que la Atari Jaguar es de 64 bits.
Todavía recuerdo la negación de la vieja escuela C, Pascal, Fortram, etc.. porque llegaban LOS OBJETOS, LAS EXCEPCIONES, LOS EVENTOS!!! Ni de coña me aprendo ese follón!! Decían...
Ahora dicen: programas a alto nivel, eres tonto...
| Toledo Nanochess (c) Copyright 2009 Oscar Toledo G. All rights reserved |
| 1257 non-blank characters. Evolution from my winning IOCCC 2005 entry. |
| o Use D2D4 algebraic style for movements. biyubi@gmail.com Nov/20/2009 |
| o On promotion add a number for final piece (3=N, 4=B, 5=R, 6=Q) |
| o Press Enter alone for computer to play. |
| o Full legal chess moves. www.nanochess.org |
| o Remove these comments to get 1326 bytes source code (*NIX end-of-line) |
************************************************************************/
char*l="ustvrtsuqqqqqqqqyyyyyyyy}{|~z|{}"
" 76Lsabcddcba .pknbrq PKNBRQ ?A6J57IKJT576,+-48HLSU";
#define F getchar()&z
#define v X(0,0,0,21,
#define Z while(
#define _ ;if(
#define P return--G,y^=8,
B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s){int t,o,L,E,d,O=e,N=-M*M,K
=78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x;y^=8;G++;d=w||s&&s>=h&&v 0,0)>M;do{_ o=I[
p=O]){q=o&z^y _ q<7){A=q--&2?8:4;C=o-9&z?q["& .$ "]:42;do{r=I[p+=C[l]-64]_!w|p
==w){g=q|p+a-S?0:I+S !r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2){ m=!(r-2&7))P G[1]=O,
K;J=n=o&z;E=I[p-a]&z;t=q|E-7?n:(n+=2,6^y);Z n<=t){L=r?l[r&7]*9-189-h-q:0 _ s)L
+=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+
!(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9)_ s>h||1<s&s==h&&L>z|d){p[I]=n,O
[I]=m?*g=*m,*m=0:g?*g=0:0;L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s)_!(h||s-1|B
O|in|p-b|L<-M))P y^=8,u=J;J=q-1|A<7||m||!s|d|r|o<z||v 0,0)>M;O[I]=o;p[I]=r;m?m=*g,*g=0:g?g=9^y:0;}_ L>N){*G=O _ s>1){_ h&&c-L<0)P L _!h)i=n,B=O,b=p;}N=L;}
n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]);}}}}Z!r&q>2||(p=O,q|A>2|o>z&
!r&&++C*--A));}}}Z++O>98?O=20:e-O);P N+M*M&&N>-K+1924|d?N:0;}main(){Z++B<121)*G
++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31;Z B=19){Z B++<99)putchar(B%x?l[B[I]|16]:x)_
x-(B=F)){i=I[B+=(x-F)*x]&z;b=F;b+=(x-F)*x;Z x-(G=F))i=G^8^y;}else v u,5);v u,
1);}}
nanochess.org/chess3.html
en.wikipedia.org/wiki/Slide_rule
Vengo a referirme que tanto el z80 como el 8086 tienen instrucciones para operar con 16 bits (independientemente de como lo hagan), que ambos tienen prácticamente los mismos comandos (con otra nomenclatura y sintaxis) y hay que añadir que la mayoría de opcodes de z80 ocupan un solo byte mientras que su contrapartida en 8088/8086 ocupa 2 bytes.
CC/ #32
Machote' s Club. Sito en la utopía M-30.
En tan solo 32 KB entraron 8 galaxias con 256 planetas cada una, 19 naves (+23 si contamos las sucesoras) en 3D, bienes para intercambiar entre estaciones, estaciones espaciales, piratas, alienígenas, sonido, armas... En fin, ya se imaginan.
youtu.be/h1f9bhYRDPk?t=23s
Tienen instrucciones similares ya que el Z80 fue una versión mejorada del 8085, y el 8086/8088 fue la transición de Intel a los 16 bit, pero ahí se acaban las similitudes. Los micros Z80 siguieron teniendo un mercado potencial en los equipos domésticos pero la diferencia de potencial entre ambos decantó la balanza a favor del 8086/8088 que luego evolucionó en modelos cada vez más potentes.
Los opcodes de Zilog Z80 ocupan un byte, dos, tres, cuatro... depende. Es cierto que cubren buena parte del mapa de instrucciones con opcodes de un solo byte (además tienen extensiones con múltiples bytes) pero eso fue motivado porque quisieron tener compatibilidad con el 8080 y el 8085(su competencia directa de la época) y estos tenían un juego de instrucciones reducido que les permitía codificar instrucciones concretas en un solo byte. Cuando Zilog sacó su Z80 con juego de instrucciones ampliado respecto al de Intel (principalmente tratamiento de cadenas y bits, instrucciones que manipulaban los registros índice IX e IY, etc) tuvieron que recurrir a usar determinados opcodes como prefijos de extensión.
Los Intel tienen también opcodes de un byte (push r, pop r, inc r, dec r, pop r, push r, xchg r,r', retn)
nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.html
Mirad los sources del Prince of Persia original. Todo assembler.
El código está poco optimizado. Hice un programa totalmente equivalente (cuando digo totalmente equivalente es que hace las mismas jugadas en las mismas condiciones que el original) que ocupa 150 bytes menos. Otra persona incluso añadió funcionalidad en el espacio sobrante sinclairzxworld.com/viewtopic.php?f=4&t=1476. Por otro lado el algoritmo no es el típico minimax. Recorre todas las posibles jugadas pero a sólo un nivel de profundidad y calcula una puntuación de cada posible jugada en función del número de piezas, si se recibe jaque, etc... Básicamente es una reescritura a ensamblador de Z80 de un programa llamado Microchess para 6502.
Aún así tiene mérito meterlo en un ZX81. No es el mejor programa de la historia pero es un buen programa. El problema en los ZX81 es que del Kilobyte disponible muchos bytes se usan en variables del sistema y la pantalla también ocupa espacio (de forma variable). Es más, si hiciéramos un juego a pantalla completa sólo nos quedaría disponible la cuarta parte de ese Kilobyte. En serio, no es nada fácil escribir un juego en esta plataforma. Lo digo por experiencia, ya que hace poco tiempo programé un clon de tetris.
Igual pasaba con los primeros virus de PC, que ocupaban unas mierdecillas de bytes. Ahora ocupan megas y necesitan de .NET 4.0 parriba.
Lo digo porque C permitía ensamblador en línea desde el primer día.
O si no fíjate en NetBSD bajo VAX, totalmente usable en máquinas de 1980.
Sobre LISP, había máquinas dedicadas a ese lenguaje (quizás por HW directamente), así que vete a saber si con según qué procedimientos conseguías más velocidad o no.
asdsahhre kmasdiomjnn dehoi io " " hdsa
" ddsadjh,kkpokññjdsad
""" >>> > dfsdjfnkjn>>Z rtebbhdasdsaduiortebb 2'2 hds9raantelemnt
$function() {
$(label, modificacion de la consulta del formulario
#19, #20 el bus de direcciones es de 16 bits, sólo hay que mirar el patillaje del z80 para ver que hay 16 líneas. Además PC,SP, IX, IY son registros de 16 bits.
Es increíble lo que puede hacer la mente humana (de bueno, y de malo).
www.youtube.com/watch?v=m0VAwqg9N0k
www.pouet.net/prodlist.php?type[0]=32b&type[1]=64b&type[2]=128
Por ejemplo esto se podría dar también en el mundo de los artistas. Me imagino que en foros de arte cada uno se creerá el mejor y desprecia a los demás pero es que es una actividad individual o de grupos pequeños, mientras que la informática tiene más de industria y que de arte.
www.youtube.com/watch?v=Ex91OwHMVog
Si he logrado ver más lejos, ha sido porque he subido a hombros de gigantes
Isaac Newton
Edit: No es original suya, sino inspirada en una cita de Bernardo de Chartres:
Somos como enanos a los hombros de gigantes. Podemos ver más, y más lejos que ellos, no porque la agudeza de nuestra vista ni por la altura de nuestro cuerpo, sino porque somos levantados por su gran altura.
Mira si no lo que hacen ciertas optimizaciones de GCC respeto a los bucles.
Lo digo porque para mi ex-netbook ARM intenté usar -Os para no usar RAM como un loco y pasara a la swap, aunque fuera con DWM, y al final era preferible usar -O2.
Solo tienes que ver las herramientas BSD vs GNU. Las GNU son más rápidas y funcionan mucho más rápido, las BSD más ligeras en código pero no van mejor en absoluto.
Es que todo el mogollón viene por que se acusa a Olivier de tener muchas ventajas por hacer el código en x86 frente a David que lo hizo en Z80. Supongo porque el ensamblador de x86 programa solo y el código de x86 ocupa un tercio del mismo código para z80.