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
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?.
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 . 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.
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.
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í)
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).