bitelia.com/2012/04/el-codigo-fuente-de-prince-of-persia-... por
levante_star el 17-04-2012 19:47 UTC publicado: 17-04-2012 21:30 UTC

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 negativos:
1 usuarios:
207 anónimos:
169 cultura, juegos karma: 647
Tenia que ser una locura programar un juego 100% en ensamblador por esos tiempo
¿Por qué las puñeteras patentes duran hasta el infinito y más allá?
sourceforge.net/projects/princed/
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.
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?
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
Pues parece una tonteria #16 pero yo he pensado exactamente lo mismo
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.
En lugar de eso, tenemos que leer cosas como "yo lo hubiera hecho en BASIC". Estos niños...
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.
1 - las patentes no duran hasta el infinito y más allá
2 - el código fuente cerrado no tiene nada que ver con patentes
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#
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
... y pantallas mas tarde tuve que enfrentarme a ella!!!
Larga vida a los programadores de verdad.
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?.
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"
#17 disculpame por votar negativo pero se me fue al hacer scroll, te voté positivo en el siguiente comentario.
a que no hay cojones?
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
(Aún tengo por ahí el Complete ROM Dissassembly. A ver quien se compra hoy en día un libro así)
- Memoria: Hoy puedes escribir un programa en un lenguage X, compilarlo y obtener un ejecutable en código máquina en un fichero en tu disco duro. Normalmente el programa fuente ocupa más que la versión compilada, debido a que el programa en forma de lenguage entendible por humanos necesariamente tiene que ser más "verboso" que lo mismo traducido a códigos numéricos de operaciones. Pensad que en aquélla época los ordenadores tenían cantidades de memoria como 48KB y que para "vender" tu juego tenías que demostrar que el mismo exprimía al máximo las capacidades de la máquina metiendo más gráficos, más sonidos y una complejidad mayor que al competencia. Eso significa que el código máquina del juego con su lógica, gráficos, sonidos, etc debía llenar al máximo esos 48KB. Pero entonces... eso significa que el código fuente (necesariamente mayor) no te cabría en memoria en primer caso.
La compilación cruzada entre plataformas (por ejemplo, programando en un ordenador de capacidades muy altas, pero generando código para un ordenador menor) era usada por los estudios más grandes y con posibilidades. Pero la mayoría de los juegos los programaban profesionales o entusiastas con pocas posibilidades usando la misma máquina a la que el juego iba destinado.
- Máximo Común Denominador: Había ordenadores con muy diferentes capacidades, por ejemplo de memoria, velocidad o sonido. Pero también había mucha fragmentación. Es decir, tu mercado objetivo tenía muchas máquinas diferentes y éstas no eran iguales. Para rentabilizar el juego, éste debía salir en la mayor cantidad posible de plataformas para llegar a la mayor cantidad posible de público. Pero no todo el mundo tenía el lujo de poder desarrollar el mismo juego para múltiples plataformas adaptándolo perfectamente a las peculiariedades de cada una para exprimirlas al límite. Por ejemplo, aún cuando ya el Spectrum de 128KB estaba en declive, la mayoría de juegos que seguían vendiéndose eran para 48KB, porque éstos tenían que funcionar en el modelo antiguo también.
De nuevo, la mayoría de los programadores eran entusiastas con pocos recursos en sus manos, con lo que programaban el juego para la plataforma más restrictiva optimizándolo al máximo. Luego, para las demás plataformas, se » ver todo el comentario
Por cierto, de Transport Tycoon hay una implementación totalmente libre en C++: OpenTTD
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).
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.
Y lo dice uno que lo hizo, o sea, que sé de lo que hablo.
C... buah, mariquitas.
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)
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.
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
Qué epocas!!
#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.
Pero no he podido mirar la web del proyecto ya que la han hackeado
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.
#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...).
El 68000 RISC ?
Vaya, yo estaba convencido de que era CISC.
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).