پیش‌نویس:آتاری بیسیک

از ویکی‌پدیا، دانشنامهٔ آزاد

اتاری بیسیک یک مفسر برای زبان برنامه‌نویسی BASIC است برخلاف بیشتر زبان‌های بیسیک آمریکایی دوران کامپیوترهای خانگی، اتاری بیسیک مشتقی از بیسیک مایکروسافت نیست و در بسیاری موارد با آن متفاوت است. اتاری بیسیک دارای کلمات کلیدی برای ویژگی‌های خاص آتاری میباشد و برای مثال از ارایه های رشته ای پشتیبانی نمیکند. این زبان در سال ۱۹۷۹ به عنوان یک کارتریج رام8 کیلوبایتی برای استفاده با کامپیوترهای آتاری ۴۰۰ و ۸۰۰ عرضه شد. از ۱۹۸۳ با معرفی مدل‌های 600ایکس ال و 800ایکس ال، بیسیک به صورت داخلی در سیستم قرار گرفت. با وجود اینکه کامپیوترهای آتاری ۸ بیتی با سرعتی بالاتر از بیشتر هم نوع هایشان عمل می‌کنند، تصمیمات فنی متعددی باعث قرار گرفتن اتاری بیسیک در رده پایین‌ترین نتایج بنچمارک‌های عملکرد شدند.کدهای منبع کامل و شرح مشخصات طراحی اتاری بیسیک در سال ۱۹۸۳ به عنوان کتاب منبع اتاری بیسیک منتشر شد.

سیر تکاملی

ماشین‌هایی که بعدها به خانواده اتاری هشت بیتی تبدیل شدند در ابتدا به عنوان کنسول‌های بازی نسل دوم توسعه یافته بودند و قرار بود کنسول بازی اتاری وی-سی-اس را جایگزین کنند. ری کاسار، رئیس جدید آتاری، تصمیم گرفت با ساخت یک کامپیوتر خانگی، در برابر شرکت اپل چالش بکشد. این به این معنا بود که طرح‌ها باید زبان برنامه‌نویسی بیسیک را که استاندارد کامپیوترهای خانگی بود، شامل شوند. در اوایل سال ۱۹۷۸، آتاری کد منبع نسخه ام-او-اس65022 از بیسیک مایکروسافت را به اجاره گرفت.

این زبان در دو نسخه ارائه شد: یکی با فرمت اعشاری 32 بیتی که در حدود 7800 بایت در هنگام کامپایل شدن بود، و نسخه دیگری با فرمت 40 بیتی گسترده‌تر که به نزدیکی 9 کیلوبایت بود.

حتی نسخه 32 بیتی با مشکل فضای حافظه، در حجم 8 کیلوبایتی فرمت رام کارتریج ماشین قرار نمی‌گرفت. آتاری همچنین احساس کرد که باید زبان را گسترش دهد تا ویژگی‌های سخت‌افزاری کامپیوترهای خود را پشتیبانی کند، مشابه آنچه اپل با اپل-سافت بیسیک انجام داده بود. این افزایش سایز نسخه آتاری را به حدود 11 کیلوبایت افزایش داد؛ اپل-سافت بیسیک بر روی +اپل11 حدود 10,240 بایت بود. پس از شش ماه، کد بهبود یافته شده و آماده برای نمایش در نمایشگاه سی-ای-اس در ژانویه 1979 شد.

میکروسیستم شپردسون

در سپتامبر 1978، این میکروسیستم برنده مناقصه تکمیل بیسیک شد.  

در آن زمان آنها در حال پایان دادن به بیسیک ساختاری ۱۶ کیلوبایتی کروممکو برای ماشین‌های سیستم اس-100 بر پایهٔ زد80 بودند. توسعه‌دهندگان کاتلین اوبراین و پل لاتون از بیسیک تجاری کسب و کار دیتا جنرال، یک پیاده‌سازی با صفر اعشاری، برای الهام بخش بیسیک جدیدشان استفاده کردند که تجربهٔ لاتون با دیتا جنرال روی یک سیستم تقسیم زمانی را نشان می‌دهد.

.

بیسیک کروممکو شامل یک پیاده‌سازی معمولی نقطه‌ای گسترده با استفاده از فرمت ۱۴ رقمی بی-سی-دی بود که با استفاده از تمام ۱۶ ثبت پردازنده زذ80 امکان‌پذیر شده بود. زیرا همهٔ داده‌ها را در زمان ویرایش به فرمت داخلی تبدیل می‌کرد، ثابت‌های کوچک مانند "۱" می‌توانستند مقدار قابل‌توجهی از حافظه را به خود اختصاص دهند و این می‌تواند مشکل خاصی در زمان ذخیرهٔ آرایه‌های اعداد ایجاد کند.

برای رفع این مشکل، زبان بیسیک نیز از فرمت بی-سی-دی ۶ رقمی پشتیبانی می‌کرد. همچنین یک فرمت جداگانه ۱۶ بیتی برای ذخیرهٔ مقادیر داخلی مانند شماره‌های خط و مقادیر مشابه سیستمی نیز وجود داشت.

حتی بیسیک‌های کوچکتر بر روی 6502 در حدود ۱۰ کیلوبایت استفاده می‌کردند، به عنوان مثال بیسیک کامودور ۹ کیلوبایت را مصرف می‌کرد اما همچنین به حمایت از کرنال نیاز داشت، در حالی که بیسیک اپلسافت ۱۰۷۸۰ بایت می‌بود.

برای رسیدن به هدف جایگشتن در یک رام ۸ کیلوبایتی، بیسیک جدید به دو بخش تقسیم شد، خود زبان در کارتریج و یک کتابخانه جداگانه اف-پی با استفاده از ۲ کیلوبایت در رام ۱۰ کیلوبایتی سیستم.

برای جایگشتن در ۲ کیلوبایت، سیستم اعشاری فقط فرمت ۶ رقمی را پشتیبانی می‌کرد.

آتاری پیشنهاد را قبول کرد و هنگامی که مشخصات در اکتبر ۱۹۷۸ نهایی شدند، لاتون و اوبراین به کار بر روی زبان جدید اغاز کردند.  قرارداد تعیین کرده بود که تاریخ تحویل حداکثر تا ۶ آوریل ۱۹۷۹ است و این همچنین شامل یک سیستم مدیریت فایل بود. برنامه‌های آتاری بود که نسخهٔ اولیهٔ ۸ کیلوبایتی بیسیک مایکروسافت را به سی-ای-اس ۱۹۷۹ ببرد، سپس برای تولید به بیسیک آتاری تغییر دهد. توسعه به سرعت پیش رفت، به کمک بند پاداش در قرارداد، که منجر به تحویل نسخهٔ اولیه در اکتبر شد. آتاری نسخهٔ کارتریج ۸ کیلوبایتی را به جای مایکروسافت به سی-ای-اس برد.

بعدها بیسیک مایکروسافت آتاری به عنوان یک محصول جداگانه در دسترس قرار گرفت.


منتشر شده  

نسخه‌ای که شپردسون به آتاری برای نمایشگاه سی-ای-اس ارائه داد، قصد نهایی نداشت و شپردسون ادامه داد به رفع باگ‌ها. بدون اطلاع شپردسون، آتاری نسخهٔ سی-ای-اس را به تولید فرستاده بود.

این نسخه بعدها به نام تجدید نظر آ شناخته می‌شد. این نسخه دارای یک باگ اصلی در روتینی است که حافظه را کپی می‌کند: حذف خطوطی از کد که دقیقاً ۲۵۶ بایت طول دارند، باعث قفل شدن سیستم پس از وارد کردن دستور بعدی می‌شود. دکمه ریست نمی‌تواند این مشکل را رفع کند.  

شرکت میکروسیستم شپردسون نسخهٔ بی را برای رفع باگ‌های اصلی نسخهٔ آ ارائه کرد که در سال ۱۹۸۳ به عنوان رام داخلی در مدل‌های ۶۰۰ایکس-ال و ۸۰۰ایکس-ال عرضه شد. در حین رفع باگ کپی حافظه، برنامه‌نویس الگوی کد مشابه را در بخش درج خطوط مشاهده کرد و همان روش را به کار برد. این به جای آن که باگ اصلی را در این بخش برطرف کند، باگ اصلی را به کد اصلی معرفی کرد. درج خطوط جدید بسیار رایج‌تر از حذف خطوط قدیمی است، بنابراین تغییر به طور قابل توجهی تعداد خطاها را افزایش داد. نسخهٔ بی همچنین هر بار که برنامه ذخیره و بارگیری می‌شود، ۱۶ بایت به برنامه اضافه می‌کند و در نهایت باعث تمام شدن حافظه سیستم برای حتی کوچکترین برنامه‌ها می‌شود. کتاب نقشه برداری اتاری این باگ‌ها را "باگ‌های شگفت‌انگیز" توصیف کرده و به صاحبان نسخهٔ بی توصیه می‌کند: "بازی نکنید؛ نسخهٔ رام جدید را که در قالب کارتریج ارائه می‌شود، بگیرید" این کتاب یک تایپ در برنامه  را برای تغییر نسخهٔ بی به نسخهٔ سی برای کسانی که کارتریج ندارند، ارائه می‌دهد.

شرح

ویرایش برنامه

مانند بیشتر بیسیک های کامپیوترهای خانگی، اتاری بیسیک بر پایهٔ ویرایشگر خطی خود تمرکز دارد. خطوط برنامه می‌توانند تا سه خط فیزیکی صفحه با ۴۰ کاراکتر در هر خط باشند، کلیتاً ۱۲۰ کاراکتر. مکان نما قابلیت حرکت آزاد دارد و ویرایشگر به طور خودکار مسیر خط برنامهٔ بیسیک مربوطه را روی خط صفحهٔ فعلی پیگیری می‌کند. به عنوان مثال، اگر مکان نما در حال حاضر در خط ۳۰ قرار دارد و کاربر با استفاده از دکمهٔ بالا به خط ۲۰ حرکت کند، هر ویرایش از آن نقطه به بعد در خط ۲۰ انجام می‌شود.

ویرایشگر اتاری بیسیک بسیاری از خطاهایی را که در نسخه‌های مشتق شده از ام-اس شناسایی نمی‌شود، تشخیص می‌دهد. اگر خطا پیدا شود، ویرایشگر خط را دوباره نمایش می‌دهد و متن نزدیک به خطا را با ویدئوی معکوس برجسته می‌کند. خطاها به صورت کدهای عددی نشان داده می‌شوند و توضیحات آنها در کتابچهٔ راهنما چاپ می‌شوند. به دلیل نحوهٔ کار ویرایشگر خط، کاربر می‌تواند خطا را فوراً رفع کند. در مثال بالا ، خطا می‌تواند با جابجایی مکان نما بر روی حرف یو، تایپ کردن حرف ا (ویرایشگر فقط حالت جایگزینی دارد) و فشردن دکمهٔ (انتر) رفع شود.

یک خطی که با یک عدد ابتدایی، از ۰ تا ۳۲۷۶۷ (800016) تایپ می‌شود، در برنامهٔ فعلی درج می‌شود یا خطای موجود را جایگزین می‌کند. اگر هیچ شمارهٔ خطی وجود نداشته باشد، مفسر آن را شمارهٔ -۱ (۸۰۰۰۱۶) می‌دهد و دستورها به صورت فوری، در "حالت فوری"، اجرا می‌شوند. دستور ران برنامه‌ای که ذخیره شده است، را از کمترین شمارهٔ خط اجرا می‌کند. اتاری بیسیک اجازه می‌دهد تمام دستورات در هر دو حالت اجرا شوند. به عنوان مثال، دستور لیست می‌تواند درون یک برنامه استفاده شود، در حالی که در بسیاری از مفسرها این امکان فقط در حالت فوری موجود است.

 

در هنگام ورود دستورات، می‌توان از طریق پترن تعیین‌کننده‌ای که توسط بیسیک کوچک پالو آلتو تعیین شده، کلمات کلیدی را به شکل مختصر وارد کرد.

توکن ساز

وقتی کاربر دکمه ریترن را در حالت ویرایش فشار می‌دهد، خط فعلی در بافر ورودی بیسیک کپی می‌شود و در حافظه بین آدرس‌های 580 و516 قرار می‌گیرد. توکنایزر بیسیک اتاری متن را اسکن کرده و هر کلمه کلیدی را به یک توکن یک بایتی تبدیل می‌کند. به عنوان مثال، پرینت به توکن 2016 تبدیل می‌شود. هر عدد به یک مقدار اعشاری شش بایتی تبدیل می‌شود و هر نام متغیر به یک شاخص در یک جدول اشاره می‌شود و همینطور تا زمانی که خط به صورت کامل به یک فرمت قابل تفسیر تبدیل می‌شود. نتیجه در یک بافر خروجی در ابتدای 256 بایت از حافظه آزاد پایینترین در دسترس ذخیره می‌شود و به وسیله اشاره‌گر لومم که در آدرس 80، 8116 ذخیره می‌شود، اشاره می‌شود. سپس خروجی توکنایزر به مکان دیگری منتقل می‌شود. برنامه به عنوان یک درخت تجزیه‌ای ذخیره می‌شود.  

این مفهوم تمام توکن‌سازی را که توسط شپردسون به عنوان "تفسیر پیش‌کامپایلینگ" نامگذاری شده است، به کار برده است. نتیجه‌ی کد توکنیزه شده، هرگونه تجزیه را در زمان اجرا حذف می‌کند و باعث افزایش سرعت اجرا می‌شود. اما دارای عیبی است که ثابت‌های کوچک مانند 0 یا 1 هرکدام شش بایت می‌باشند و بلندتر از متن اصلی هستند.

مجموعه‌ای از اشاره‌گرها (آدرس‌ها) به داده‌های مختلف وجود دارد: نام‌های متغیر در جدول نام متغیر ( ) ذخیره می‌شوند و مقادیر آن‌ها در جدول مقدار متغیر ذخیره می‌شوند. با استفاده از مستقیم‌سازی نام‌های متغیر به این روش، ارجاع به یک متغیر تنها نیاز به یک بایت برای آدرس‌دهی به ورودی مربوطه در جدول مناسب دارد. متغیرهای رشته‌ای منطقه جداگانه‌ای دارند ، همچنین پشته زمان اجرا که برای ذخیره شماره خطوط دستورهای حلقه‌ای و زیربرنامه‌ها ) استفاده می‌شود. در نهایت، پایان استفاده از حافظه بیسیک با آدرسی که در - 90، 9116 ذخیره می‌شود نشان داده می‌شود.


توابع ریاضی

اتاری بیسیک شامل سه تابع مثلثاتی است: سینوس، کسینوس و تانژانت قوسی. درجه و رادیان تنظیم می‌کنند که این توابع از رادیان یا درجه استفاده کنند و به صورت پیش‌فرض از رادیان استفاده می‌کنند. هشت تابع اضافی شامل گرد کردن، لگاریتم و جذر مربع می‌شوند. تابع تصادفی، یک عدد بین 0 و 1 تولید می‌کند و پارامتر مورد استفاده نیست.

مدیریت رشته ها

در اتاری بیسیک، سیستم کنترل رشته‌ها را از بیسیک شرکت سعیلت پاکارد کپی کرده است، جایی که نوع داده اصلی یک کاراکتر است و رشته‌ها آرایه‌هایی از کاراکترها هستند. در داخل، یک رشته توسط یک اشاره‌گر به اولین کاراکتر در رشته و طول آن نمایش داده می‌شود. برای مقداردهی اولیه یک رشته، باید با طول حداکثر آن با ابعاد شود.