edición general
376 meneos
4710 clics
El código fuente de Prince of Persia se publica en Github

El código fuente de Prince of Persia se publica en Github

Hace unos meses Jordan Mechner publicaba que había encontrado los discos que contenían el código fuente de Prince of Persia para Apple II. Pues bien, el código fuente realizado en ensamblador ya está disponible en github. Relacionada: www.meneame.net/story/creador-prince-of-persia-encuentra-codigo-fuente

| etiquetas: prince of persia , codigo fuente , github
207 169 1 K 647 mnm
207 169 1 K 647 mnm
Comentarios destacados:                  
#36 Madre mía, me parecen increibles los comentarios que leo.
No entiendo cómo tanta gente se puede sorprender de que el juego estuviera programado en ensamblador. Lo que hubiera sido realmente sorprendente en esa época sería que lo programara en C desperdiciando ciclos del 6502 a 1mhz.

Hay miles de programas y juegos realizados en ensamblador. De hecho diría que el 95% de los juegos para Spectrum, Amstrad, MSX, Commodore, Amiga, Atari ST, Megadrive, Snes, Neogeo, y GameBoy están realizados en ensamblador, y dudo que sus programadores fueran "idiotas" por usarlo en vez de usar C.

Era justo todo lo contrario. La escasez de recursos agudizaba el ingenio y hacía que realmente hiciera falta programadores que supieran optimizar y lo que estaban haciendo.

Por contra, hoy en día si un programa va lento, ¿qué se hace?...simplemente subir las especificaciones mínimas y pa'lante.

Pero vamos, sigo alucinado con los comentarios. Pase que no hayáis conocido esa época...pero lo que no pasa es que "critiqueis" al programador de un juego que marcó un auténtico hito en la historia de los videojuegos simplemente por desconocimiento. ¿Así enseñan ahora en las facultades de informática?.
  1. jr6 #2 jr6 *
    ostias, es verdad que esta escrito 100% en ensamblador. He ido a echarle un ojo porque ya estaba pensando "estos no saben lo que dicen, seguro que es una pequeña parte en ensamblador pero la mayoria sera en C...". Si si, los cojones, ensamblador puro y duro.
    Tenia que ser una locura programar un juego 100% en ensamblador por esos tiempo xD
  2. Pero ... como se le ocurrió programarlo en ensamblador !!! ¿puede que lo publique en ensamblador y realmente lo programara en otro lenguaje?
  3. jr6 #4 jr6 *
    #3 a mi me parece es una locura si realmente lo hicieron en su momento en ensamblador, pero segun dice en el readme parece que fue asi, y no le veo sentido. Por esa epoca desde luego que C estaba mas que a la orden del dia y no se si incluso C++ ya tendria cierta fama o no, pero vamos, que C segurisimo.
  4. Me gustaría que esto también se hiciera para todos los juegos antiguos que las compañías ya no utilizan para nada. Digamos... ¿fifa 98? ¿Windows 3.1?
    ¿Por qué las puñeteras patentes duran hasta el infinito y más allá?
  5. #4 #3 Yo creo que subestimais lo frikis que eran los programadores de aquella xD xD xD xD
  6. #6 opino como #4 ¿Que necesidad tenia de programarlo en ensamblador? Estamos hablando de un juego de 1989, puede que algunas rutinas para el movimiento de los personajes si que requieran código en ensamblador, pero no todo el juego. Puedes programar la lógica del juego en C tranquilamente y en ensamblador algunas partes, pero no todo.
  7. Estamos hablando de un Apple II, un ordenador de 8 bits. En esos ordenadores se hacía todo en ensamblador directamente. Era lo normal. No había compiladores de C suficientemente decentes como para trabajar en serio en equipos tan pequeños.
  8. Hombre habia un proyecto que la reimplementacion de prince of persia en licencia GPL y supongo que sera mas comprensible que este en ensamblador.Desconozco su estado, pero su codigo se puede encontrar aqui:
    sourceforge.net/projects/princed/
  9. #2
    Pues como gran cantidad de juegos para microordenadores con Z80. O ensamblador o BASIC para juegos cutres.

    El C, C++ y sus compiladores eran para grandes computadores, como UNIX.
  10. La monarquía, de nuevo al descubierto
  11. Cuando jovencito informático hay por aquí... Aquellos ordenadores se programaban o bien el interprete de Basic que traían o en ensamblador. ¡No había otra cosa!
  12. Menos mal que el Visir no se lo habia cepillado!!!
  13. Yo jugaba al prince of persia en un 286 con un emulador según recuerdo... había que acabarlo antes de una hora sino todo se perdía :-(
  14. #10 Yo no soy de esa epoca, pero si he tenido entre mis manos spectrum 48k de mis hermanos e incluso tengo algunos fasciculos de la revista microhobby con algunos tutoriales de programacion de la epoca, y en efecto eran en BASIC.
    Como me ha entrado la curiosidad me he puesto a mirar en la wikipedia y segun dicen el apple II tenga un compilador de BASIC, Fortran y Pascal, pero que carajo, antes que hacerlo en ensamblador lo hago en Pascal aunque sea, y si me pones hasta en BASIC, pero vamos que digo yo que sabran ellos un poquito mas de la materia que yo (pero solo un poquito, eh? xD).

    Ademas en el readme el tio explica que lo que ha puesto para descarga es el paquete que el hizo con el codigo para pasarlo a los que se encargaban de hacer el port para las diferentes plataformas, que segun dice eran PC, Amiga, sega genesis y el Apple II obviamente. Tenia que ser una locura por esos tiempos portar todo en ensamblador de una plataforma a otra. Mis respetos para ellos xD

    Pues parece una tonteria #16 pero yo he pensado exactamente lo mismo :-P . Yo con lo mas antiguo que he trabajado ha sido con gameboy advance (bueno con esta en particular, no he trabajado, he leido algun libro que es distinto) y con SDL y allegro en C, pero vamos, en la epoca del spectrum no creo que hubieran sprites como ahora, de hecho en un libro que lei sobre allegro como introduccion aparecia un par de paginas sobre tiempos antiguos y decian que para graficos utilizaban utilidades que el mismo programador creaba y que era tan rudimentario como poner 10 pixeles contados, y desde luego que no creo que hubieran sprites sheets, seria un formato poco mas que un array con la informacion de esos pixeles.
  15. Uff, en ASM como los hombres. No le tuvo que dar trabajo ni nada.
  16. #15 Pero luego el Prince of Persia salió para PC, porque yo lo jugaba nativo.
  17. #7 Sí, pero al programarlo en ensamblador Jordan Mechner obtuvo +20 en frikismo y alcanzó de golpe el grado de "Master Friki Eremita". A cambio perdió todos los puntos relacionados con tiradas sociales y conocimiento del mundo exterior.
  18. Like a boss
  19. #3 #4 #7 no os extrañeis tanto, que existiera C en aquella época no significa nada. Hoy en día C ocupa el primer puesto en el ranking de lenguajes utilizados y sin embargo nadie dice "Uau, ¿por qué no programaron el programa X en java o .net?"
  20. #5 Hombre, no veo lógico forzar mediante leyes a una compañía a liberar sus productos cuando estos han sido fruto de una gran inversión y esfuerzo. Supongo que por el método "fans" será más fácil, reuniendo unas cuantas firmas y mandándosela a una empresa junto una foto de tu gatito.

    De todas formas en mi ignorancia no me imagino qué se puede hacer con el código viejo de un juego salvo revivir viejas glorias que quizás darían menos trabajo hacerlas desde cero con la tecnología actual.
  21. Es curiosa la diferencia entre destacar algo ("¡Caramba! ¡En ensamblador!") y criticar arbitrariamente. Yo tenía entendido que este juego revolucionó conceptos, era genial, divertido...

    En lugar de eso, tenemos que leer cosas como "yo lo hubiera hecho en BASIC". Estos niños...
  22. #17 El msx tenia sprites por hardware. El spectrum creo que no. La vga (y anteriores) no tenian sprites por hardware. El apple II ni idea.

    Programar en ensamblador era el único recurso para sacarle el máximo rendimiento en aquellos tiempos. Y en realidad no es mas complicado que C, solo mas laborioso.
  23. #12 Efectivamente, RollerCoaster Tycoon 1 y 2 están desarrollados íntegramente en ensamblador. Hay que estar un poco pallá, yo me puse a aprender ensamblador con manuales y por gusto propio... y acabe mandándolo a la mierda, es... una locura.
  24. video que compila las tomas de las que luego salieron las animaciones, una joya si has sido friki del juego
    www.youtube.com/watch?v=wKgLfqOVHco

    tambien recomendable el link que aparece en el video, es un diario bastante detallado de como fue el desarrollo del juego

    y el juego que hizo antes y que sirvio para que le contrataran para hacer principe de persia, ya reunia varios elementos www.youtube.com/watch?v=qkq-L-S9b-M#
  25. #16 programador java? :troll:
  26. Notición importantísimo, no sé como he podido pasar el día sin saber esto !!!!!!
  27. #19 Para PC estaba seguro. Recuerdo levemente haberlo jugado o haberlo visto jugar a mis hermanos cuando yo tenia en torno a los 5 años y teniamos en casa un todo podersoso 486 con win 3.1 (el unico windows original que tengo xD)
    El juego ejecutandolo desde DOS iba.

    De hecho tengo una par de cajas con disketes de mi padre y mis hermanos y apuesto que el juego incluso tendria que estar por ahi. Tambien creo que tengo que tener aun el 486 en el cementerio de ordenadores antiguos.
    No me pincheis mucho que aun me pongo a montarlo y me busco el juego para ponerlo xD
  28. Este fue el juego más cañero que tuve en el 8086
  29. Me quede "to loco" cuando al traspasar el espejo salio mi sombra en direccion contraria....

    ... y pantallas mas tarde tuve que enfrentarme a ella!!!
  30. #32 no jugaste al Barbarian?????? ¬¬ o al Budokan??? ains....
  31. #2 Esos eran buenos programadores, y no los chapuceros becarios de hoy en dia que lo hacen todo en visual java, con motores prefabricados y que no pierden ni un segundo en la optimización porque estan muy ocupados haciendo 2 mapas para venderlos como DLC y por eso en cada generacion se piden más requisitos para juegos que objetivamente no dan la calidad que deberian para los requisitos desorbitados.
    Larga vida a los programadores de verdad.
  32. Madre mía, me parecen increibles los comentarios que leo.
    No entiendo cómo tanta gente se puede sorprender de que el juego estuviera programado en ensamblador. Lo que hubiera sido realmente sorprendente en esa época sería que lo programara en C desperdiciando ciclos del 6502 a 1mhz.

    Hay miles de programas y juegos realizados en ensamblador. De hecho diría que el 95% de los juegos para Spectrum, Amstrad, MSX, Commodore, Amiga, Atari ST, Megadrive, Snes, Neogeo, y GameBoy están realizados en ensamblador, y dudo que sus programadores fueran "idiotas" por usarlo en vez de usar C.

    Era justo todo lo contrario. La escasez de recursos agudizaba el ingenio y hacía que realmente hiciera falta programadores que supieran optimizar y lo que estaban haciendo.

    Por contra, hoy en día si un programa va lento, ¿qué se hace?...simplemente subir las especificaciones mínimas y pa'lante.

    Pero vamos, sigo alucinado con los comentarios. Pase que no hayáis conocido esa época...pero lo que no pasa es que "critiqueis" al programador de un juego que marcó un auténtico hito en la historia de los videojuegos simplemente por desconocimiento. ¿Así enseñan ahora en las facultades de informática?.
  33. #36 porque el tío del juego les a roto el corazón: la mayoría llega a C, pero ensamblador nos manda directamente a la mierda jejeje
  34. #36 Hay juegos de GameBoy hechos con un subconjunto de C. Yo hice una pequeña prueba y funcionaba. Tengo un cartucho grabable para GB, le puedo meter todas las ROMs que quiera.
  35. Creo que no entendeis el concepto, habia (hay) gente que se sabia la rom del spectrum de memoria
    de verdad, no teneis ni idea de lo que se hacia en 48 KB, ahora veo un sprite de GOW y pienso "este sprite ocupa mas que toda mi colección de juegos de spectrum"
  36. Lol ya quisiera verles la cara a todos los que dicen "Yo lo hubiera hecho en BASIC" al ver que su juego fuera a tirones en los equipos de aquellos tiempos :-D

    #17 disculpame por votar negativo pero se me fue al hacer scroll, te voté positivo en el siguiente comentario.
  37. Del readme : "As the author and copyright holder of this source code, I personally have no problem with anyone studying it, modifying it, attempting to run it, etc"

    a que no hay cojones?
  38. Ya me imagino dentro de unos 50 años al ver el código de un Assassins Creed o cualquier juego: "¡Yo lo hubiera hecho mejor en un framework como Java o .NET!" :-D :-D
  39. Ya que hablamos del tema, aquí tenéis una lista de motores libres para jugar a esos juegos antiguos sin emuladores.

    osgameclones.com/

    Imprescindibles Scummvm Y Residual, con éste ultimo puedes jugar y completar el Grim Fandango.

    residualvm.org/downloads/

    Ah, y el Open Morrowind, que permite jugar al Morrowind COMPLETO. Hace falta el juego original como en el Residual eso sí.

    openmw.org/en/ code.google.com/p/openmw/downloads/list
  40. #41 A mí cojones me sobran, lo que no tengo es un Apple ][ a mano :-)
  41. #44 Emuladores :-)
  42. #12 Que desfase de programador. Yo que me volví loco antes de llegar a Hola mundo en ensamblador.. pero al RCT buenos vicios.
  43. #46 Pues ya sabes, descarga OpenTTD, que es libre y encima es como 20 veces mayor que Transport Tycoon. Sobre el de las montañas rusas, creo que se está implementando un motor.
  44. #39 Hay, hay, hola, qué tal :-D

    (Aún tengo por ahí el Complete ROM Dissassembly. A ver quien se compra hoy en día un libro así)
  45. yo prefería que publicara su dirección para ponerle una trampa de baldosas "con poca estabilidad" y que se ensartara en un mar de cuchillas de muerte. Bueno, me voy a jugar al supermario.....
  46. Ensamblador ? Bah. En mis tiempos usábamos válvulas termoiónicas de base octal. Y encima estábamos rodeados de mujeres. :troll:
  47. #9 Eso es un editor de niveles, no el propio juego.
  48. #10 Qué tendrá que ver la arquitectura (véase Z80, etc) con el sistema operativo (UNIX) que comentas.
  49. #12 Chris Sawyer = Uno de mis pequeños dioses particulares :-P

    Por cierto, de Transport Tycoon hay una implementación totalmente libre en C++: OpenTTD
  50. #5 Por la presión del loby que todos sabemos... De todas formas, aquí no son patentes sino copyright.
  51. #35 Tampoco tienen la calidad técnica que tienen ahora. Ya que me gano el pan escribiendo código (entre otras cosas) te puedo decir que muchos estamos hartos del "antes nos lo hacíamos todo nosotros", "vosotros ahora teneis 1000 frameworks que os lo hacen todo", "yo me lo picaba todo en C/ASM/loquesea". No es cierto que antes fuera más difícil escribir programas. Si lo hicieron en ASM y no en Java, o en Ruby, es porque: 1) aún no existían Java, Ruby ni otros similares y 2) los ciclos de CPU eran oro en aquel entonces. Hoy son cobre, o incluso plástico. El "oro" hoy corresponde a otras cosas como la usabilidad, mantenibilidad del programa, legibilidad, y tiempo de desarrollo. Con excepciones en casos específicos, claro.

    Me encantaría ver como puede una sola persona escribir el Crysis, o un Gran turismo, o casi cualquier juego con menos de 10 años, ya no en ensamblador sino en el lenguaje que prefiera. Sólo picando el motor de físicas, o incluso sólo "pensando" como hacerlo y haciendo un diseño inicial seguro que se le va más tiempo que programando todo el Prince of Persia. Por no hablar que hoy en día poca gente se conforma con un simple sprite de 200 píxeles a lo sumo y una música MIDI o de altavoz interno del PC.

    Ahora te mueves en otras capas de abstracción, pero siempre tienes que tener en cuenta qué tienes por debajo, tienes que conocer bien los frameworks que usas, antes con conocer el lenguaje y tu pequeña biblioteca de "rutinas" (me encanta esa palabra, siempre la usan los programadores clásicos) te bastaba. Ahora te tienes que conocer al menos por encima como 10 APIs como poco. Gráficos a varias capas de abstracción, desde lo más alto (Cryengine, Unreal, o propios de cada empresa) hasta a veces a nivel GPU, físicas, sonido dolby 5.1, bibliotecas de redes e internet, las propias de la plataforma online (PSN, Xbox, Games for windows...), las propias del S.O. donde corre, y esto es un minúsculo ejemplo.

    Yo soy el primero que admiro a Stallman, John Carmack, y muchos otros grandes programadores, pero tengo que ser objetivo, no eran superhumanos, sí pioneros en muchos aspectos, y gracias a muchos otros que poco a poco crearon grandes herramientas sobre las que se fue acumulando el conocimiento hoy en día podemos crear grandes programas (en tamaño y calidad).
  52. #35 Si siguieramos programando en ensamblador no tendriamos las aplicaciones y videojuegos que tenemos actualmente.
    Hemos encapsulado el código y lo hemos elevado a alto nivel para agilizar y conseguir en el mismo tiempo de desarrollo el triple o cuadriple que si lo hicieramos en ensamblador.
    La falta de optimización se ha solucionado con unos pepinos de ordenador que hace 25 años no tenían.

    Anda que si hubieran tenido hace 25 años la capacidad de procesamiento actual habría alguien programando en ensamblador. Si, si.
  53. Uyyy, cuando maricón de la programación veo por aquí... en los ordenadores de 8 bits se programaban los juegos al 99% en ensamblador, y el resto en Basic. Y en Amiga, Atari y PCs de la época, era también ensamblador si era un juego. En C "no se conseguia velocidad".

    Y lo dice uno que lo hizo, o sea, que sé de lo que hablo.

    C... buah, mariquitas.
  54. Ojalá todos los programadores de hoy día hubiesen programado alguna vez en ensamblador: al menos habrían aprendido que sin comentarios es IMPOSIBLE mantener código un par de meses después de haberlo escrito, aunque sea tu propio código (y sobre todo si en Perl, cagontó).

    En la universidad programábamos en Módula-2 y C, antes de aprender Java como ejemplo de lenguaje OO... pero en arquitectura de computadores tuvimos que hacer un Tetris en ensamblador.... y sin usar las interrupciones de MS-DOS, teníamos que currarnos absolutamente todo a pelo. Entonces (1998) ya nadie usaba ensamblador para estas cosas (el mismo programa en C lo hacías en un día o dos), así que no le cogí el gusto a programar así, pero aprendí mucho esos días: lo importante que es poner comentarios a cada sub-rutina, lo cabrón que es el ensamblador del 8086 y lo rápido que un PC ejecuta instrucciones (recuerdo que me sorprendía escribir míl líneas, con varios bucles para comprobar las líneas hechas por las piezas, pensando que eran un montón de cálculos y lo mismo iba a ir lento.... jejeje)
  55. Para el que esté viendo un poco el fuente, el 6502 sólo tenía 3 registros (o variables), X, Y y A. LDA, LDX o LDY son "let a=valor", JMP es "goto", JSR es "gosub", BEQ es "salto si la comparacion anterior es cierta", CMP es "compara A y valor", DEC es "valor-1", RTS es "return".

    El ensamblador es muy sencillo de entender y muy lineal (y más en 6502...). El único problema es que hay que hacer todas las rutinas.
  56. #30 Si comentas noticias que no te interesan es obvio que se te presenta otro día de mierda, comiendo patatas delante de la pantalla leyendo chorradas, con un par de descansos para hacerte unas pajillas, y a seguir trolleando con las manos llenas de semen y de grasa de las patatas. Que gran plan.
  57. He aquí un PDF con la documentación técnica del proyecto, es muy interesante compararlo con los documentos que tenemos que presentar los arquitectos/desarrolladores hoy en día:
    jordanmechner.com/wp-content/uploads/1989/10/popsource009.pdf

    Respecto al tema del assembler, recuerdo que una de mis primeras incursiones con el assembler fue a los 6 o 7 años (ahora tengo 30) con mi padre, que -por hobby- escribía código para el Z80 de la Spectrum sabiéndose de memoria el código máquina para la mayoría de los opcodes (!!!!). Me "desafió" a llenar la pantalla punto por punto, y lo hice con mis rudimentarios conocimientos de BASIC, usando dos FORs anidados y la instrucción "PLOT x, y". Obviamente iba a pedales. Mientras tanto, él escribió una rutina en código máquina con un bucle que llenaba directamente las posiciones de memoria mapeadas directamente al chip de video. Eran muy poquitos comandos, que ejecutaban "a la velocidad de la luz" en comparación con mi código. Me explicó que así se hacían los juegos, porque los programadores no podían permitirse hacer rutinas gigantescas en BASIC.

    Años mas tarde -y mucho antes de tener formación académica en sistemas- aprendí a crackear programas de Mac (escritos en RISC del 68000) gracias a lo que había aprendido con mi padre.

    Hoy con este post he recordado todo eso :-P
    Qué epocas!!
  58. #27 Cierto, confusión mía.
    #23 El punto es, si no te puede dar más beneficios (¿cuántas ventas más va a dar un juego como, digamos, el Mario Kart de SNES?), ¿por qué no liberarlo y que si alguien quiere, cree un derivado?
    Y no estoy hablando de ceder los derechos de autor sobre los personajes, sino el motor del juego.
  59. #51 Por la descripcion de sourceforge diria que no :The development of an open source Prince Of Persia Level editor for PC, a new game engine and complementary tools.
    Pero no he podido mirar la web del proyecto ya que la han hackeado
  60. Yo he estado buscando el truco ese de megahit, pero no lo he encontrado
  61. #4 Teniendo en cuenta que ese mismo año se aprobó el primer estándar lo dudo muchísimo. El estándar de C++ vino 10 años más tarde.

    Algunos debéis creer que internet existe desde el principio de los tiempos, y que si alguien creaba un lenguaje en los 70 automáticamente el mundo entero tenía acceso a dicha información.
  62. #2 yo también estoy alucinando con que todo fuera en ensamblador.

    #35 tienes razón. Para programar no había que hacer un cursillo de Java, había que conocer cómo funcionaba la máquina, había que ser informático (hacer un curso de Java no es ser informático, dedicarse a desatascar impresoras no es ser informático, si tu trabajo es configurar el Windows no eres informático...).
  63. #61 Que descripción más gráfica, es tan buena y tan dellada que es posible que pueda ser una autodescripción, sobre todo en el apartado de las manos llenas de grasa y semen a mí nunca se me habría ocurrido algo así.
  64. #69 Es lo que me viene a la cabeza cuando trato de imaginar la clase de vida cavernaria de una persona que a falta de más motivaciones en la vida entra a comentar noticias que no le interesan.
  65. #70 Si te viene a la cabeza de un modo tan claro y rápido es porque lo has vivido.
  66. #71 Noto un desesperado intento por encontrar un alma gemela que te comprenda y te acepte, pero lamentablemente no es mi caso. No pierdas la paciencia porque si algo abunda por menéame son las fotos de gatitos y los inadaptados.
  67. #62 "aprendí a crackear programas de Mac (escritos en RISC del 68000)"

    El 68000 RISC ?
    Vaya, yo estaba convencido de que era CISC.
  68. Juventud, divino tesoro.

    Os animo a cualquiera de vosotros a que intentéis hacer un juego medio decente en C o Pascal para Commodore 64 o Apple II. Estoy dispuesto a pagar cenas, cubatas o metálico.

    Tened en cuenta que el hardware de esas máquinas era bastante simple y por tanto también lo era el ensamblador. Algunas operaciones son muy engorrosas (no existe multiplicación por ejemplo) pero se tiraba de tablas y todo tipo de ingenios. En el caso del C64 lo crucial era programar las interrupciones para hacer las virguerías (multiplexación de sprites, scroll y música).
  69. #73 :palm: gracias por la corrección... se me escapó totalmente... venía pensando en el MIPS R3000 y en ARM (ambos RISC) con los que trasteé, aunque bastante mas adelante...
comentarios cerrados

menéame