Hola:
Curiosamente he encontrado códigos de libre distribución de la época de Apolo 11 que usaron el día que fueron en la Luna (si es que realmente fueron) hace 40 años.
(http://barrapunto.com/images/topics/topicspace.gif)
La verdad que nunca he visto en mi vida estos ASM. Abro este tema por curiosidad.
# Copyright: Public domain.
# Filename: ALARM_AND_ABORT.agc
# Purpose: Part of the source code for Luminary 1A build 099.
# It is part of the source code for the Lunar Module's (LM)
# Apollo Guidance Computer (AGC), for Apollo 11.
# Assembler: yaYUL
# Contact: Ron Burkey <info@sandroid.org>.
# Website: www.ibiblio.org/apollo.
# Pages: 1381-1385
# Mod history: 2009-05-10 SN (Sergio Navarro). Started adapting
# from the Luminary131/ file of the same
# name, using Luminary099 page images.
# 2009-06-05 RSB Fixed a type.
#
# This source code has been transcribed or otherwise adapted from
# digitized images of a hardcopy from the MIT Museum. The digitization
# was performed by Paul Fjeld, and arranged for by Deborah Douglas of
# the Museum. Many thanks to both. The images (with suitable reduction
# in storage size and consequent reduction in image quality as well) are
# available online at www.ibiblio.org/apollo. If for some reason you
# find that the images are illegible, contact me at info@sandroid.org
# about getting access to the (much) higher-quality images which Paul
# actually created.
#
# Notations on the hardcopy document read, in part:
#
# Assemble revision 001 of AGC program LMY99 by NASA 2021112-61
# 16:27 JULY 14, 1969
# Page 1381
# THE FOLLOWING SUBROUTINE MAY BE CALLED TO DISPLAY A NON-ABORTIVE ALARM CONDITION. IT MAY BE CALLED
# EITHER IN INTERRUPT OR UNDER EXECUTIVE CONTROL.
#
# CALLING SEQUENCE IS AS FOLLOWS:
# TC ALARM
# OCT AAANN # ALARM NO. NN IN GENERAL AREA AAA.
# # (RETURNS HERE)
BLOCK 02
SETLOC FFTAG7
BANK
EBANK= FAILREG
COUNT* $$/ALARM
# ALARM TURNS ON THE PROGRAM ALARM LIGHT, BUT DOES NOT DISPLAY.
ALARM INHINT
CA Q
ALARM2 TS ALMCADR
INDEX Q
CA 0
BORTENT TS L
PRIOENT CA BBANK
+1 EXTEND
ROR SUPERBNK # ADD SUPER BITS.
TS ALMCADR +1
LARMENT CA Q # STORE RETURN FOR ALARM
TS ITEMP1
CHKFAIL1 CCS FAILREG # IS ANYTHING IN FAILREG
TCF CHKFAIL2 # YES TRY NEXT REG
LXCH FAILREG
TCF PROGLARM # TURN ALARM LIGHT ON FOR FIRST ALARM
CHKFAIL2 CCS FAILREG +1
TCF FAIL3
LXCH FAILREG +1
TCF MULTEXIT
FAIL3 CA FAILREG +2
MASK POSMAX
CCS A
TCF MULTFAIL
LXCH FAILREG +2
TCF MULTEXIT
# Page 1382
PROGLARM CS DSPTAB +11D
MASK OCT40400
ADS DSPTAB +11D
MULTEXIT XCH ITEMP1 # OBTAIN RETURN ADDRESS IN A
RELINT
INDEX A
TC 1
MULTFAIL CA L
AD BIT15
TS FAILREG +2
TCF MULTEXIT
# PRIOLARM DISPLAYS V05N09 VIA PRIODSPR WITH 3 RETURNS TO THE USER FROM THE ASTRONAUT AT CALL LOC +1,+2,+3 AND
# AN IMMEDIATE RETURN TO THE USER AT CALL LOC +4. EXAMPLE FOLLOWS,
# CAF OCTXX # ALARM CODE
# TC BANKCALL
# CADR PRIOLARM
# ... ...
# ... ...
# ... ... # ASTRONAUT RETURN
# TC PHASCHNG # IMMEDIATE RETURN TO USER. RESTART
# OCT X.1 # PHASE CHANGE FOR PRIO DISPLAY
BANK 10
SETLOC DISPLAYS
BANK
COUNT* $$/DSPLA
PRIOLARM INHINT # * * * KEEP IN DISPLAY ROUTINES BANK
TS L # SAVE ALARM CODE
CA BUF2 # 2 CADR OF PRIOLARM USER
TS ALMCADR
CA BUF2 +1
TC PRIOENT +1 # * LEAVE L ALONE
-2SEC DEC -200 # *** DONT MOVE
CAF V05N09
TCF PRIODSPR
BLOCK 02
SETLOC FFTAG7
BANK
COUNT* $$/ALARM
BAILOUT INHINT
CA Q
# Page 1383
TS ALMCADR
INDEX Q
CAF 0
TC BORTENT
OCT40400 OCT 40400
INHINT
WHIMPER CA TWO
AD Z
TS BRUPT
RESUME
TC POSTJUMP # RESUME SENDS CONTROL HERE
CADR ENEMA
P00DOO INHINT
CA Q
ABORT2 TS ALMCADR
INDEX Q
CAF 0
TC BORTENT
OCT77770 OCT 77770 # DON'T MOVE
CAF OCT35 # 4.35SPOT FOR GOP00DOO
TS L
COM
DXCH -PHASE4
GOP00DOO INHINT
TC BANKCALL # RESET STATEFLG, REINTFLG, AND NODOFLAG.
CADR FLAGS
CA FLAGWRD7 # IS SERVICER CURRENTLY IN OPERATION?
MASK V37FLBIT
CCS A
TCF STRTIDLE
TC BANKCALL # TERMINATE GRPS 1, 3, 5, AND 6
CADR V37KLEAN
TC BANKCALL # TERMINATE GRPS 2, 4, 1, 3, 5, AND 6
CADR MR.KLEAN # (I.E., GRP 4 LAST)
TCF WHIMPER
STRTIDLE CAF BBSERVDL
TC SUPERSW
TC BANKCALL # PUT SERVICER INTO ITS "GROUND" STATE
CADR SERVIDLE # AND PROCED TO GOTOP00H.
CCSHOLE INHINT
CA Q
TC ABORT2
OCT21103 OCT 1103
CURTAINS INHINT
CA Q
TC ALARM2
OCT217 OCT 00217
# Page 1384
TC ALMCADR # RETURN TO USER
BAILOUT1 INHINT
DXCH ALMCADR
CAF ADR40400
BOTHABRT TS ITEMP1
INDEX Q
CAF 0
TS L
TCF CHKFAIL1
P00DOO1 INHINT
DXCH ALMCADR
CAF ADR77770
TCF BOTHABRT
ALARM1 INHINT
DXCH ALMCADR
ALMNCADR INHINT
INDEX Q
CA 0
TS L
TCF LARMENT
ADR77770 TCF OCT77770
ADR40400 TCF OCT40400
DOALARM EQUALS ENDOFJOB
EBANK= DVCNTR
BBSERVDL BBCON SERVIDLE
# CALLING SEQUENCE FOR VARALARM
# CAF (ALARM)
# TC VARALARM
#
# VARALARM TURNS ON PROGRAM ALARM LIGHT BUT DOES NOT DISPLAY
VARALARM INHINT
TS L # SAVE USER'S ALARM CODE
CA Q # SAVE USERS Q
TS ALMCADR
TC PRIOENT
OCT14 OCT 14 # DONT MOVE
TC ALMCADR # RETURN TO USER
ABORT EQUALS WHIMPER
BANK 13
SETLOC ABTFLGS
BANK
# Page 1385
COUNT* $$/ALARM
FLAGS CS STATEBIT
MASK FLAGWRD3
TS FLAGWRD3
CS REINTBIT
MASK FLGWRD10
TS FLGWRD10
CS NODOBIT
MASK FLAGWRD2
TS FLAGWRD2
TC Q
Fuentes:
http://code.google.com/p/virtualagc/source/browse/trunk/Comanche055
http://code.google.com/p/virtualagc/source/browse/trunk/Luminary099/
http://softlibre.barrapunto.com/softlibre/09/07/21/148250.shtml
Sorpendente :o :o
Solo una duda... ¿seguro que esto es ASM? :o No conozco ni una instrucción.
Y ... es assembly si, pero de no de x86 sino de esta maquina (http://en.wikipedia.org/wiki/Apollo_Guidance_Computer).
Mi FASM lo ejecuta...
Es coña xD, pero es interesante ver el assembly de la maquina del apollo :P
Cita de: Lewert en 24 Julio 2009, 16:59 PM
Sorpendente :o :o
Solo una duda... ¿seguro que esto es ASM? :o No conozco ni una instrucción.
Según esta noticia (http://www.neoteo.com/el-codigo-fuente-del-apollo-11-a-tu-disposicion.neo), por restricciones de memoria no convenía escribir el código directamente en lenguaje ensamblador del AGC (http://en.wikipedia.org/wiki/Apollo_Guidance_Computer), razón por la cual se diseñó un intérprete que funcionaba algo más lento pero que cumplía con las condiciones especiales de estas máquinas. Para que se entienda mejor, el código que se ve no es ensamblador precisamente, ni 6502 (http://es.wikipedia.org/wiki/MOS_6502) ni 8086 (http://es.wikipedia.org/wiki/Intel_8086_y_8088), sino que es un código interprete que se compila en ensamblador, osea, un código que resulta mas sencillo de programar que el ensamblador ordinario, y que a su vez, resulta sencillo para el ordenador convertirlo a lenguaje maquina.
Por cierto, segun la misma noticia, tambien dice que el código que se encuentra en los repositorios de Google Code se puede ejecutar sobre Virtual AGC, un emulador del AGC que puede correr sobre Linux, MacOSX y Windows, entre otros.
Curioso.
Gracias por la información.
Interesante. La verdad nunca supuse que un proyecto así iba a estar publicado por internet.
Tal vez de aqui 40 años Windows 95 sea open source xD
Cita de: Erik# en 20 Agosto 2009, 09:57 AM
Tal vez de aqui 40 años Windows 95 sea open source xD
Si se demuestra la arta de fallos que tiene, no lo pondrán jajajajaj.
No han puesto no elWindows 3.11, ni MS-DOS, menos van a poner Windows 95.
Cita de: Meta en 20 Agosto 2009, 11:30 AM
Cita de: Erik# en 20 Agosto 2009, 09:57 AM
Tal vez de aqui 40 años Windows 95 sea open source xD
Si se demuestra la arta de fallos que tiene, no lo pondrán jajajajaj.
No han puesto no elWindows 3.11, ni MS-DOS, menos van a poner Windows 95.
Yo tengo porciones de código fuente de varias versiones de Windows,de filtraciones y ese tipo de cosas,y la persona que me las paso pues recopilara estas y las distribuía en un ámbito privado,entre otras cosas....
Los tiene mucha gente.
Cita de: Meta en 24 Agosto 2009, 22:01 PM
Los tiene mucha gente.
Lógicamente ya que fueron filtraciones que todo el mundo pudo descargar,pero es difícil encontrarlos en Internet de una forma "no-privada" ya que Microsoft hizo su trabajo enviando cartas de aviso a toda la gente que las descargo y ese tipo de cosas.
Eso no lo sabía.