لطفا جاواسکریپت مرورگر خود را فعال سازید!

نحوه فعال سازی در کروم
  1. ابتدا باید اینکارو بگنید
  2. بعدش اونکارو
نحوه فعال سازی در فایرفاکس
  1. ابتدا باید اینکارو بگنید
  2. بعدش اونکارو
انتشار سورس کد نرم‌ افزار آپولو 11 و سفر به ماه

انتشار سورس کد نرم‌ افزار آپولو 11 و سفر به ماه

وقتی در میانه‌ی دهه‌ی 1960 میلادی برنامه‌ نویسان آزمایشگاه ابزار دقیق در دانشگاه مشهور MIT توسعه‌ی نرم‌افزار پرواز برای برنامه فضایی آپولو 11 را آغاز کردند، هنوز تکنولوژی‌های مورد نیاز آن‌ها به وجود نیامده بود و آن‌ها مجبور بودند خود این تکنولوژی‌ها را ابداع کنند. آن‌ها راهی تازه برای ذخیره‌سازی برنامه‌های کامپیوتری پیدا کردند که Rope Memory به معنی «حافظه‌ی ریسمانی» نامیده شد. برای این که بتوانند ایده ی خود را عملی سازند، این گروه از برنامه نویسان همچنین مجبور شدند تا نسخه‌ای مخصوص از زبان برنامه‌ نویسی اسمبلی را باز طراحی کنند (زبان اسمبلی برای بسیاری از برنامه‌ نویسان امروزی ناشناخته و ناخوانا است. در حقیقت اسمبلی زبانی است برای اینکه کامپیوتر آن را به راحتی بخواند و بفهمد و نه انسان‌ها.) برنامه‌نویسان MIT برای ساختن کامپیوتر هدایت آپولو که به صورت مخفف AGC خوانده می‌شود، هزاران خط از این کدها را توسعه داده و نوشته‌اند. برای آشنایی بیشتر با سورس کد Apollo 11، با سکان آکادمی همراه باشید.

کدهای AGC مدت زیادی است که به صورت عمومی منتشر شده است. اولین آپلود این کدها به سال 2003 برمی‌گردد. ران برکی، محقق و پژوهشگر در حوزه‌ی فناوری، پس از رونویسی کدها از روی تصاویر اسکن شده در MIT، آن‌ها را به صورت عمومی منتشر کرد. او تمام کدها را مجددا از روی تصاویر، به صورت دستی و خط به خط، تایپ کرده بود. برکی در یک ایمیل اینگونه توضیح می‌دهد:

این [تصاویر] توسط یک خلبان به نام گری نف در کلرادو اسکن شده بودند. MIT آن‌ها نگهداری کرده و در فرمت تصویری به صورت آنلاین منتشر کرده بود. متاسفانه در این فرایند، تصاویر در بعضی نقاط تا مرز ناخوانا بودن خراب شده بودند (او شروع به بازسازی قسمت‌های ناخوانا می‌کند و خودش می‌گوید برای پر کردن بعضی جاهای خالی از مهارت‌های مهندسی‌اش استفاده کرده است!) کمی بعد موفق به دریافت اسکن‌هایی جایگزین از گری نف برای بخش‌های ناخوانا شدم و خوشبختانه فهمیدیم که قسمت اول به صورت کاملا صحیح به اتمام رسیده است.

نتیجه این تلاش‌ها در دسترس قرارگیری این کدها برای هر پژوهشگر یا فرد علاقمند بوده است و این در حالی است که برکی حتی یک شبیه‌سازی از AGC را پیاده‌سازی کرده است تا علاقمندان با دید بازتری به توانند به مطالعه ی سورس کد آپولو ۱۱ بپردازند.

با وجود بزرگی و موفقیت کار برکی، بازهم کد‌های این نرم‌افزار برای بسیاری از برنامه ‌نویسان امروزی گمنام بود؛ تا این که سرانجام، هفدهم تیرماه کریس گری کدهای نرم‌افزار را در گیت‌هاب منتشر کرد. کریس گری که کارمند سابق NASA است، کدهای AGC را به صورت کامل در اکانت خود در وب سایت گیت‌هاب گذاشته است؛ وب سایتی که این روزها میلیون‌ها برنامه ‌نویس در آن کدهای برنامه‌های خود را به اشتراک می‌گذارند. به طور مثال، سورس کد فایلی تحت عنوان P12.agc به شرح زیر است:

# Copyright:	Public domain.
# Filename:	P12.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:	Hartmuth Gutsche <hgutsche@xplornet.com>.
# Website:	www.ibiblio.org/apollo.
# Pages:	838-842
# Mod history:	2009-05-23 HG	Transcribed from page images.
#
# 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 838
		BANK	24
		SETLOC	P12
		BANK

		EBANK=	DVCNTR
		COUNT*	$$/P12

P12LM		TC	PHASCHNG
		OCT	04024

		TC	BANKCALL
		CADR	R02BOTH		# CHECK THE STATUS OF THE IMU.
		
		TC	UPFLAG		
		ADRES	MUNFLAG
		
		TC	UPFLAG		# INSURE 4-JET TRANSLATION CAPABILITY.
		ADRES	ACC4-2FL
		
		TC	UPFLAG		# PREVENT R10 FROM ISSUING CROSS-POINTER
		ADRES	R10FLAG		# OUTPUTS.
		
		TC	CLRADMOD	# INITIALIZE RADMODES FOR R29.
		
		TC	DOWNFLAG	# CLEAR RENDEZVOUS FLAG FOR P22
		ADRES	RNDVZFLG
		
		CAF	THRESH2		# INITIALIZE DVMON
		TS	DVTHRUSH
		CAF	FOUR
		TS	DVCNTR

		CA	ZERO
		TS	TRKMKCNT	# SHOW THAT R29 DOWNLINK DATA IS NOT READY.
		CAF	V06N33A
		TC	BANKCALL	# FLASH TIG
		CADR	GOFLASH
		TCF	GOTOP00H
		TCF	+2		# PROCEED
		TCF	-5		# ENTER

		TC	PHASCHNG
		OCT	04024

		TC	INTPRET
		CALL			# INITIALZE WM AND /LAND/
			GUIDINIT
		SET	CALL
			FLPI
			P12INIT
# Page 839
P12LMB		DLOAD
			(TGO)A		# SET TGO TO AN INITIAL NOMINAL VALUE.
		STODL	TGO
			TIG
		STCALL	TDEC1
			LEMPREC		# ROTATE THE STATE VECTORS TO THE
		VLOAD	MXV		# IGNITION TIME.
			VATT
			REFSMMAT
		VSL1
		STOVL	V1S		# COMPUTE V1S = VEL(TIG)*2(-7) M/CS.
			RATT
		MXV	VSL6
			REFSMMAT
		STCALL	R		# COMPUTE R = POS(TIG)*2(-24) M.
			MUNGRAV		# COMPUTE GDT1/2(TIG)*2(-T)M/CS.
		VLOAD	UNIT
			R
		STCALL	UNIT/R/		# COMPUTE UNIT/R/ FOR YCOMP.
			YCOMP
		SR	DCOMP
			5D
		STODL	XRANGE		# INITIALIZE XRANGE FOR NOUN 76
			VINJNOM
		STODL	ZDOTD
			RDOTDNOM
		STORE	RDOTD
		EXIT

		TC	PHASCHNG
		OCT	04024

NEWLOAD		CAF	V06N76		# FLASH CROSS-RANGE, AND APOLUNE VALUES.
		TC	BANKCALL
		CADR	GOFLASH
		TCF	GOTOP00H
		TCF	+2		# PROCEED
		TCF	NEWLOAD		# ENTER NEW DATA.

		CAF	P12ADRES
		TS	WHICH

		TC	PHASCHNG
		OCT	04024

		TC	INTPRET
		DLOAD	SL
			XRANGE
			5D
		DAD
# Page 840
			Y
		STOVL	YCO
			UNIT/R/
		VXSC	VAD
			49FPS
			V1S
		STORE	V		# V(TIPOVER) = V(IGN) + 57FPS (UNIT/R/)
		DOT	SL1
			UNIT/R/
		STOVL	RDOT		# RDOT = 2(-7)
			UNIT/R/
		VXV	UNIT
			QAXIS
		STORE	ZAXIS1
		SETGO
			FLVR
			ASCENT
P12RET		DLOAD
			ATP		# ATP(2)*2(18)
		DSQ	PDDL
			ATY		# ATY(2)*2(18)
		DSQ	DAD
		BZE	SQRT
			YAWDUN
		SL1	BDDV
			ATY
		ARCSIN
YAWDUN		STOVL	YAW
			UNFC/2
		UNIT	DOT
			UNIT/R/
		SL1	ARCCOS
		DCOMP
		STORE	PITCH
		EXIT
		TC	PHASCHNG
		OCT	04024

		TC	DOWNFLAG
		ADRES	FLPI
		
		INHINT
		TC	IBNKCALL
		CADR	PFLITEDB
		RELINT

		TC	POSTJUMP
		CADR	BURNBABY

P12INIT		DLOAD			# INITIALIZE ENGINE DATA.  USED FOR P12 AND
# Page 841
			(1/DV)A		# P71.
		STORE	1/DV3
		STORE	1/DV2
		STODL	1/DV1
			(AT)A
		STODL	AT
			(TBUP)A
		STODL	TBUP
			ATDECAY
		DCOMP	SL
			11D
		STORE	TTO
		SLOAD	DCOMP
			APSVEX
		SR2
		STORE	VE
		BOFF	RVQ
			FLAP
			COMMINIT
COMMINIT	DLOAD	DAD		# INITIALIZE TARGET DATA.  USED BY P12, P70
			HINJECT		# AND P71 IF IT DOES NOT FOLLOW P70.
			/LAND/
		STODL	RCO
			HI6ZEROS
		STORE	TXO
		STORE	YCO
		STORE	RDOTD
		STOVL	YDOTD
			VRECTCSM
		VXV	MXV
			RRECTCSM
			REFSMMAT
		UNIT
		STORE	QAXIS
		RVQ
P12ADRES	REMADR	P12TABLE

		SETLOC	P12A
		BANK
		COUNT*	$$/P12

GUIDINIT	STQ	SETPD
			TEMPR60
			0D
		VLOAD	PUSH
			UNITZ
		RTB	PUSH
			LOADTIME
		CALL
			RP-TO-R
# Page 842
		MXV	VXSC
			REFSMMAT
			MOONRATE
		STOVL	WM
			RLS
		ABVAL	SL3
		STCALL	/LAND/
			TEMPR60

49FPS		2DEC	.149352 B-6	# EXPECTED RDOT AT TIPOVER
VINJNOM		2DEC	16.7924 B-7	# 5509.5 FPS(APO=30NM WITH RDOT=19.5FPS)
RDOTDNOM	2DEC	.059436 B-7	# 19.5 FPS

در طی چند ساعت برنامه ‌نویسان شروع به کالبد شکافی نرم افزار و به ویژه کامنت‌های نوشته شده توسط برنامه نویسان اصلی این کدها کردند (در برنامه‌ نویسی، کامنت‌ها توضیحاتی هستند که در میان کدهای برنامه درباره وظایف و عملکرد هر قسمت از آن کدها نوشته می‌شوند.) جالب اینجا است که بسیاری از کامنت‌های نوشته شده در میان کدهای AGC از توضیحات خسته کننده درباره نرم افزار عبور کرده و به شوخی‌ها و پیام‌هایی طنز و البته با ماهیت همان سال‌های دهه 1960 تبدیل شده اند! بعضی از این شوخی‌ها و کامنت‌های طنز را می‌توانید در مقاله وب سایت QUARTZ ببنید.

با قرار گرفتن این کدها روی گیت‌هاب، برنامه نویسان می‌توانند تغییراتی در کدها را پیشنهاد کنند؛ و البته مشخص است که تا الان هم بسیاری این کار را انجام داده‌اند! شما هم با ورود به صفحه‌ی گیت‌هاب این پروژه می‌توانید مسائلی که دیگر برنامه‎‌ نویسان مطرح کرده‌اند را ببنید، نگاهی به کدهای اسمبلی این پروژه بیاندازید یا به اصلاح آن‌ها کمک کنید!

منبع