DOS / x86 Assembly / VGA Mode 13h

Tiny Plasma Sphere؛ دموی 917 بایتی اسمبلی با کره چرخان و پس‌زمینه پلاسمایی

این برنامه یک دموی کوچک DOS/VGA است که با وجود حجم بسیار کم، صحنه‌ای چشمگیر ایجاد می‌کند: زمینه‌ای با رنگ‌های پلاسمایی و افق آبی، به همراه کره‌ای که از توپ‌های کوچک تشکیل شده و به شکل سه‌بعدی می‌چرخد.

جذابیت پروژه در تضاد بین اندازه فایل و خروجی تصویری آن است. فایل اجرایی TPSPHERE.COM حدود 917 بایت حجم دارد، اما هنگام اجرا تصویری تولید می‌کند که از یک فایل COM کوچک انتظار نمی‌رود؛ نمونه‌ای زیبا از برنامه‌نویسی فشرده و مستقیم با اسمبلی.

نام نمایشی پروژه Tiny Plasma Sphere است و نام فایل اجرایی DOS آن TPSPHERE.COM در نظر گرفته شده است.

نمای دموی Tiny Plasma Sphere با کره چرخان و پس‌زمینه پلاسمایی
What it shows

برنامه چه چیزی نمایش می‌دهد؟

خروجی برنامه یک صحنه‌ی گرافیکی زنده است؛ ترکیبی از رنگ‌های متحرک، افق آبی و یک کره ساخته‌شده از تعداد زیادی توپ کوچک که با تغییر زاویه دید، حس عمق و چرخش ایجاد می‌کند.

VGAMode 13h

گرافیک مستقیم VGA

برنامه وارد حالت گرافیکی کلاسیک 320×200 با 256 رنگ می‌شود و بدون استفاده از کتابخانه‌های سنگین، مستقیماً با حافظه تصویر و palette کار می‌کند.

PlasmaPalette

پس‌زمینه پلاسمایی

رنگ‌های پایین تصویر و افق با جدول‌های محاسبه‌شده و تغییرات palette شکل می‌گیرند. نتیجه، حس حرکت و عمق است؛ با کدی بسیار کوچک و فشرده.

SphereSprites

کره ساخته‌شده از توپ‌های کوچک

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

Technical notes

نکات فنی پیاده‌سازی

این پروژه نمونه‌ای از سبک برنامه‌نویسی بسیار فشرده در محیط DOS است؛ جایی که برنامه تقریباً همه چیز را خودش می‌سازد: جدول‌های کمکی، رنگ‌ها، بافر تصویر و محاسبات لازم برای چرخش.

  • ساخت فایل اجرایی کوچک از نوع .COM با مدل TINY
  • ورود به VGA Mode 13h برای تصویر 320×200 با 256 رنگ
  • تولید جدول‌های lookup برای مقادیر شبه‌سینوسی و محاسبات سریع‌تر
  • برنامه‌ریزی مستقیم VGA DAC برای ساخت palette رنگی
  • ساخت پس‌زمینه‌ی plasma و کپی آن به بافرهای تصویری
  • محاسبه مختصات کره و چرخش آن با روتین اسمبلی اختصاصی
  • مرتب‌سازی ساده بر اساس عمق برای رسم صحیح توپ‌های جلویی و عقبی
  • رسم spriteهای کوچک توپ با shading ساده
  • هماهنگ کردن خروجی با vertical retrace برای کاهش flicker
Why it is interesting

چرا این پروژه جذاب است؟

در برنامه‌نویسی امروزی معمولاً برای چنین خروجی‌ای به runtime، library، asset و فایل‌های جانبی زیادی نیاز داریم. اما این برنامه تقریباً همه چیز را در چند صد بایت کد و داده فشرده کرده است.

همین موضوع باعث می‌شود پروژه برای علاقه‌مندان Assembly، DOS demo scene، گرافیک low-level و بهینه‌سازی کد بسیار جالب باشد. اینجا زیبایی خروجی فقط از گرافیک آماده نمی‌آید؛ از محاسبه، محدودیت، خلاقیت و کنترل مستقیم سخت‌افزار می‌آید.

Download

دانلود

بسته دانلودی این پروژه آماده است و شامل فایل اجرایی TPSPHERE.COM، سورس اسمبلی، تصویر خروجی و توضیحات کوتاه برای اجرای دمو است.