RGBLINK(5) File Formats Manual RGBLINK(5)

rgblink — قالب فایل اسکریپت پیونددهنده

اسکریپت پیونددهنده فایلی است که امکان تعیین ویژگی‌های بخش‌ها را در زمان پیوند و به شیوه‌ای متمرکز فراهم می‌کند. در هر بار فراخوانی rgblink تنها یک اسکریپت پیونددهنده می‌تواند وجود داشته باشد، اما می‌توان آن را به چندین فایل تقسیم کرد (با استفاده از دستورالعمل INCLUDE) .

نحو اسکریپت پیونددهنده خط‌محور است. هر خط می‌تواند شامل یک دستورالعمل یا نام بخش، یک توضیح، هر دو، یا هیچ‌کدام باشد. فاصله‌های خالی (نویسه‌های فاصله و تب) برای جداسازی عناصر نحوی استفاده می‌شوند، اما در غیر این صورت نادیده گرفته می‌شوند.

توضیحات با نویسهٔ نقطه‌ویرگول ‘;’ آغاز می‌شوند و تا انتهای خط ادامه دارند. آن‌ها به سادگی نادیده گرفته می‌شوند.

کلیدواژه‌ها از حروف و ارقام تشکیل شده‌اند (اما نمی‌توانند با یک رقم آغاز شوند)؛ همهٔ آن‌ها به بزرگی و کوچکی حروف حساس نیستند.

اعداد را می‌توان در قالب‌های مختلفی نوشت.

نوع قالب پیشوندهای ممکن نویسه‌های پذیرفته‌شده
ده‌دهی (Decimal) هیچ 0123456789
شانزده‌شانزدهی (Hexadecimal) , 0x, 0X 0123456789ABCDEF
هشت‌هشتی (Octal) , 0o, 0O 01234567
دودویی (Binary) , 0b, 0B 01

خط زیر (Underscore) نیز در اعداد پذیرفته می‌شود، به جز در ابتدای عدد. این قابلیت می‌تواند برای گروه‌بندی ارقام مفید باشد، مانند ‘1_234’ یا ‘$ff_80’.

رشته‌ها با یک علامت نقل‌قول دوتایی (گیومه) آغاز می‌شوند و در نقل‌قول دوتایی بعدی (که فرار نیافته باشد) پایان می‌یابند. رشته‌ها نباید شامل نویسه‌های لفظی خط جدید (newline) باشند. بیشتر توالی‌های گریز نویسه‌ای مشابه rgbasm(5) پشتیبانی می‌شوند، به ویژه ‘\\’, ‘\"’, ‘\n’, ‘\r’, ‘\t’, و ‘\0’. سایر توالی‌های گریز ممیز وارونه (backslash) در rgbasm(5) فقط مربوط به کد اسمبلی هستند و در اسکریپت‌های پیونددهنده اعمال نمی‌شوند.

شامل کردن فایل‌های دیگر
‘INCLUDE path’ به گونه‌ای عمل می‌کند که گویی محتویات فایل واقع در path در محل دستورالعمل INCLUDE کپی و جای‌گذاری شده است. path باید یک رشته باشد.
تعیین بانک فعال
بانک فعال را می‌توان با تعیین نوع (ناحیه حافظه) و شمارهٔ آن تنظیم کرد. انواع ممکن عبارتند از: ROM0, ROMX, VRAM, SRAM, WRAM0, WRAMX, OAM, و HRAM. شماره بانک را می‌توان از انواعی که تنها شامل یک بانک هستند حذف کرد، که عبارتند از: ROM0, ROMX اگر -t به rgblink(1) داده شده باشد، VRAM اگر -d به rgblink(1) داده شده باشد، WRAM0, WRAMX اگر -w به rgblink(1) داده شده باشد، OAM, و HRAM. (SRAM تنها نوعی است که هرگز نمی‌توان شماره بانک آن را حذف کرد).

پس از تعیین یک بانک، “آدرس فعلی” روی آخرین مقداری که برای آن بانک داشته تنظیم می‌شود. اگر آن بانک تاکنون هرگز فعال نبوده باشد، “آدرس فعلی” به طور پیش‌فرض روی ابتدای بانک قرار می‌گیرد (مثلاً $4000 برای بخش‌های ROMX) .

به جای دادن شماره بانک، می‌توان از کلیدواژهٔ FLOATING استفاده کرد؛ این کار نوع بخش‌های بعدی را بدون مقید کردن آن‌ها به یک بانک خاص تنظیم می‌کند. (اگر آن نوع تنها اجازه یک بانک را می‌دهد، مثلاً ROM0, آنگاه FLOATING معتبر است اما زائد بوده و هیچ اثری ندارد.) از آنجا که هیچ بخش خاصی فعال نیست، “آدرس فعلی” شناور می‌شود (گویی توسط یک دستورالعمل ‘FLOATING’ انجام شده باشد)، و ORG مجاز نیست.

تغییر آدرس فعلی
برای استفاده از هر یک از این دستورالعمل‌ها، یک بانک باید فعال باشد.

‘ORG addr’ مقدار “آدرس فعلی” را روی addr تنظیم می‌کند. این دستورالعمل نمی‌تواند برای به عقب بردن آدرس استفاده شود: addr باید بزرگ‌تر یا مساوی با “آدرس فعلی” باشد.

‘FLOATING’ باعث می‌شود تمام بخش‌های بین آن و دستورالعمل ORG یا تعیین بانک بعدی، در آدرس‌هایی قرار گیرند که به طور خودکار توسط rgblink تعیین می‌شوند. (با این حال، با ALIGN در زیر سازگار است.)

‘ALIGN addr, offset’ مقدار “آدرس فعلی” را تا زمانی افزایش می‌دهد که با مرز مشخص‌شده تراز شود (یعنی align بیت‌های کم‌ارزش آدرس برابر با offset باشند). اگر offset حذف شود، مقدار آن به طور ضمنی 0 در نظر گرفته می‌شود. برای مثال، اگر “آدرس فعلی” برابر با $0007 باشد، ‘ALIGN 8’ آن را روی $0100 تنظیم می‌کند، و ‘ALIGN 8, 10’ آن را روی $000A تنظیم می‌کند.

‘DS size’ مقدار “آدرس فعلی” را به اندازهٔ size افزایش می‌دهد. این شکاف تخصیص داده نمی‌شود، بنابراین بخش‌های شناور کوچک‌تر می‌توانند بعداً در آنجا قرار گیرند.

یک بخش را می‌توان به سادگی با نام بردن آن (با یک رشته) جای‌گذاری کرد. بانک آن روی بانک فعال و آدرس آن روی “آدرس فعلی” تنظیم می‌شود. هرگونه قیدی که بخش از قبل دارد (چه از بخش‌های قبلی اسکریپت پیونددهنده باشد و چه از فایل‌های شیءِ در حال پیوند) باید با آنچه اسکریپت پیونددهنده مشخص می‌کند سازگار باشد: نوع بخش باید مطابقت داشته باشد، شماره بانک بخش (در صورت تعیین) باید با بانک فعال مطابقت داشته باشد، و غیره. به طور خاص، اگر بخش دارای قید تراز (alignment constraint) باشد، آدرسی که توسط اسکریپت پیونددهنده در آن قرار می‌گیرد باید از آن قید پیروی کند؛ در غیر این صورت، خطا رخ خواهد داد.

پس از جای‌گذاری یک بخش، “آدرس فعلی” به اندازهٔ حجم آن بخش افزایش می‌یابد. این افزایش نباید از انتهای ناحیهٔ حافظهٔ فعال فراتر رود.

بخش باید در فایل‌های شیءِ در حال پیوند تعریف شده باشد، مگر اینکه نام بخش با کلیدواژهٔ OPTIONAL دنبال شود.

; این خط فقط شامل یک توضیح است
ROMX $F            ; شروع یک بانک
  "Some functions" ; نام یک بخش
  ALIGN 8          ; یک دستورالعمل
  "Some \"array\""

WRAMX 2            ; شروع یک بانک دیگر
  org $d123        ; یک دستورالعمل دیگر
  "Some variables"

rgbasm(1), rgbasm(5), rgblink(1), rgbfix(1), rgbgfx(1), gbz80(7), rgbds(5), rgbds(7)

rgblink(1) در ابتدا توسط Carsten Sørensen به عنوان بخشی از بستهٔ ASMotor نوشته شد و بعداً توسط Justin Lloyd در RGBDS باز بسته‌بندی شد. این ابزار اکنون توسط تعدادی از مشارکت‌کنندگان در https://github.com/gbdev/rgbds نگهداری می‌شود.

August 1, 2026 Linux 6.12.107+deb13-amd64