RGBASM-OLD(5) File Formats Manual RGBASM-OLD(5)

rgbasm-old — مستندات ویژگی‌های منسوخ‌شده زبان

این سندی از ویژگی‌هایی است که در طول دهه‌ها توسعه و تکامل، از زبان اسمبلی rgbasm(5) حذف شده‌اند، به همراه جایگزین‌های مدرن آن‌ها. هدف این سند، ارائه مرجعی برای ناسازگاری‌های رو‌به‌عقب هنگام ارتقای یک پایگاه کد قدیمی اسمبلی جهت سازگاری با جدیدترین نسخه RGBDS است. این سند قصد ندارد تمام اشکالات نحوی برطرف‌شده (به استثنای چند مورد شاخص) یا کلیدواژه‌های رزروشده جدیدی را که ممکن است با شناسه‌های قدیمی تداخل داشته باشند، فهرست کند.

این‌ها ویژگی‌هایی هستند که به طور کامل و بدون هیچ جایگزین مستقیمی حذف شده‌اند. معمولاً این ویژگی‌ها مانع افزودن قابلیت‌های دیگر می‌شدند، یا محدودیت‌های نامناسبی بر عملکرد مورد نظر خود اعمال می‌کردند.

در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.

در گذشته rgbasm(1) به طور خودکار با ‘LD’ به مانند ‘LDH’ رفتار می‌کرد در صورتی که مشخص بود نشانی در محدوده $FF00-$FFFF قرار دارد، و فلگ -L برای انصراف از این رفتار وجود داشت. در نسخه 0.6.0 از rgbasm(1) فلگ -l برای فعال‌سازی اختیاری آن اضافه شد.

به جای آن، از ‘LDH’ استفاده کرده و فلگ‌های -L و -l را از rgbasm(1) حذف کنید.

در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.

در گذشته rgbasm(1) به طور خودکار یک دستور ‘NOP’ را پس از ‘HALT’ درج می‌کرد، و فلگ -h برای انصراف از این رفتار وجود داشت. در نسخه 0.6.0 از rgbasm(1) فلگ -H برای فعال‌سازی اختیاری آن اضافه شد.

به جای آن، صراحتاً از یک ‘NOP’ پس از ‘HALT’ استفاده کرده و فلگ‌های -h و -H را از rgbasm(1) حذف نمایید.

در نسخه 0.4.2 حذف شد.

به جای آن، تعریف ماکروی تو در تو را درون یک رشته نقل‌قول‌شده قرار دهید (با این اطمینان که هیچ‌یک از خطوط آن با ENDM آغاز نمی‌شود)، سپس آن رشته را درون‌یابی کنید. برای نمونه:

MACRO outer
    DEF definition EQUS """
        MACRO inner
            println (\1) - (\\1)
        \nENDM"""
    {definition}
    PURGE definition
ENDM
    outer 10
    inner 3 ; prints 7

در نسخه 0.3.2 حذف شد.

این قابلیت برای «به عقب بازگرداندن» مقدار @ در بخش‌های RAM استفاده می‌شد و اجازه می‌داد تا تخصیص‌های فضای دارای برچسب با یکدیگر همپوشانی داشته باشند.

به جای آن، از UNION استفاده کنید.

در نسخه 0.3.9 منسوخ شد، در نسخه 0.4.0 حذف گردید.

تعریف یک CHARMAP درون یک SECTION هنگامی که جدول نویسه عمومی جاری همان ‘main’ بود، قبلاً فقط همان نگاشت نویسه را در آن SECTION تعریف می‌کرد.

به جای آن، از PUSHC و POPC استفاده کرده و به یک نگاشت نویسه متفاوت برای آن بخش تغییر دهید.

در نسخه 0.6.0 منسوخ شد، در نسخه 0.7.0 حذف گردید.

به جای آن‌ها، از WARN یا FAIL برای چاپ ردگیری کامل نام فایل‌ها و شماره خطوط استفاده کنید.

در نسخه 0.5.0 منسوخ شد، در نسخه 0.6.0 حذف گردید.

به جای آن، از ‘3.141592653’ استفاده کنید.

در نسخه 1.0.0 منسوخ شد.

به جای آن‌ها، از ‘__ISO_8601_LOCAL__’ استفاده کنید.

در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید.

به جای آن، از یک CHARMAP چندمقداری استفاده کنید، یا مقادیر نویسه‌های منفرد را به صورت صریح با یکدیگر ترکیب نمایید.

برای نمونه، به جای یک رشته چندنویسه‌ای مانند:

CHARMAP "X", $12
CHARMAP "Y", $34
LD BC, "XY"

یا از یک CHARMAP چندمقداری استفاده کنید:

CHARMAP "X", $12
CHARMAP "Y", $34
CHARMAP "<XY>", 'X', 'Y'
LD BC, CHARVAL("<XY>", 0) << 8 | CHARVAL("<XY>", 1)

یا نویسه‌های منفرد را ترکیب کنید:

CHARMAP "X", $12
CHARMAP "Y", $34
LD BC, 'X' << 8 | 'Y'

یا از یک نویسه تک‌مقداری استفاده کنید:

CHARMAP "X", $12
CHARMAP "Y", $34
CHARMAP "<XY>", 'X' << 8 | 'Y'
LD BC, '<XY>'

در نسخه 1.0.0 منسوخ شد.

به جای آن، از ثوابت نویسه‌ای یا تابع CHARVAL استفاده کنید.

برای نمونه، به جای یک رشته صریح مانند ‘LD A, "R"’, از یک نویسه عددی مانند ‘LD A, 'R'’ استفاده کنید.

و به جای یک عبارت رشته‌ای مانند ‘CP STRUPR("\1")’, از یک عبارت عددی CHARVAL مانند ‘CP CHARVAL(STRUPR("\1"))’ استفاده نمایید.

در نسخه 0.6.0 حذف شد.

به جای آن، از ‘rgbgfx -c/--colors’ برای تعیین صریح یک پالت رنگی استفاده کنید. در صورت استفاده از ‘-c embedded’, پالت نمایه‌گذاری‌شده PNG را در یک ویرایشگر گرافیکی جداگانه مرتب نمایید.

در نسخه 0.6.0 حذف شد.

این‌ها ویژگی‌هایی هستند که نحو آن‌ها بدون تغییر در کارکرد، دگرگون شده است. معمولاً می‌توان آن‌ها را با یک جستجو و جایگزینی ساده به‌روزرسانی کرد.

در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.

تعاریف EQU, EQUS, =, RB, RW, و RL در گذشته فقط با نام نماد آغاز می‌شدند، اما باید حتماً در ستون ۱ تایپ می‌شدند.

به جای آن، پیش از تعاریف ثوابت و متغیرها از DEF استفاده کنید. توجه داشته باشید که گسترش EQUS برای نام نماد رخ نمی‌دهد، بنابراین باید از درون‌یابی صریح ‘{interpolation}’ استفاده کنید.

در نسخه 0.6.0 منسوخ شد، در نسخه 0.7.0 حذف گردید.

ماکروها در گذشته به صورت ‘name: MACRO’ تعریف می‌شدند.

به جای آن، از ‘MACRO name’ استفاده کنید. توجه داشته باشید که گسترش EQUS برای نام ماکرو رخ نمی‌دهد، بنابراین باید از درون‌یابی صریح ‘{interpolation}’ استفاده کنید.

در نسخه 0.5.2 منسوخ شد، در نسخه 0.6.0 حذف گردید.

متغیرها در گذشته به صورت ‘name SET value’ تعریف می‌شدند.

به جای آن، از ‘DEF name = value’ استفاده کنید.

در نسخه 0.4.0 منسوخ شد، در نسخه 0.5.0 حذف گردید.

برچسب‌ها در گذشته تنها با یک نام قابل تعریف بودند، اما باید حتماً در ستون ۱ تایپ می‌شدند.

به جای آن، از دونقطه‌های صریح استفاده کنید؛ برای نمونه، ‘Label:’ یا برچسب صادرشدهٔ ‘Label::’.

در نسخه 0.5.0 منسوخ شد، در نسخه 0.7.0 حذف گردید.

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

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

در نسخه 0.4.1 منسوخ شد، در نسخه 0.5.0 حذف گردید.

این کامنت‌ها باید نویسه ‘*’ را تایپ‌شده در ستون ۱ می‌داشتند.

به جای آن، از کامنت‌های ‘;’ استفاده کنید.

در نسخه 1.0.0 منسوخ شد.

این توابع از نمایه‌گذاری با پایه ۱ برای نویسه‌های رشته استفاده می‌کردند که با نمایه‌گذاری با پایه ۰ متداول در برنامه‌نویسی ناسازگار بود.

به جای STRIN, از STRFIND; به جای STRRIN, از STRRFIND; به جای STRSUB, از STRSLICE; و به جای CHARSUB, از STRCHAR استفاده کنید.

توجه داشته باشید که STRSLICE به جای یک نمایه شروع و طول، نمایه شروع و پایان را می‌گیرد.

در نسخه 0.5.0 منسوخ شد، در نسخه 0.6.0 حذف گردید.

هر یک از این دستورالعمل‌ها مختص به یک نوع مقدار بودند.

به جای آن‌ها، از PRINT و PRINTLN همراه با STRFMT یا ‘{interpolation}’ برای قالب‌بندی متناسب با نوع داده استفاده کنید.

در نسخه 0.4.0 حذف شد.

نمادها اکنون در صورتی که از جای دیگری صادر شده باشند، به طور خودکار حل‌وفصل می‌شوند.

به جای آن‌ها، فقط این دستورالعمل‌ها را حذف کنید.

در نسخه 0.4.2 منسوخ شد، در نسخه 0.5.0 حذف گردید.

به جای آن‌ها، از EXPORT استفاده کنید.

در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید.

به جای HOME, از ROM0; به جای CODE و DATA, از ROMX; و به جای BSS, از WRAM0 استفاده کنید.

در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید.

به جای آن، از ‘JP HL’ استفاده کنید.

در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید.

به جای آن‌ها، از ‘LDI A, [HL]’ و ‘LDD A, [HL]’ (یا ‘LD A, [HLI]’ و ‘LD A, [HLD]’; یا ‘LD A, [HL+]’ و ‘LD A, [HL-]’) استفاده کنید.

در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید.

به جای آن، از ‘LDH’ استفاده کنید.

در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید.

به جای آن‌ها، از ‘LDH [C], A’ و ‘LDH A, [C]’ استفاده کنید.

توجه داشته باشید که ‘LD [$FF00+C], A’ و ‘LD A, [$FF00+C]’ نیز در نسخه 0.9.0 منسوخ شده بودند، اما در نسخه 0.9.1 از منسوخ بودن خارج شدند.

در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید.

دستور ‘LDH’ قبلاً با «نشانی‌های» بین $00 تا $FF به‌گونه‌ای رفتار می‌کرد که گویی بایت پایین نشانی در بازهٔ $FF00 تا $FFFF هستند.

به جای آن، از ‘LDH [n16], A’ و ‘LDH A, [n16]’ استفاده کنید.

در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید.

به جای آن، از ‘LD HL, SP + e8’ استفاده کنید.

در ASMotor پشتیبانی می‌شد، در RGBDS حذف شد.

به جای آن، از ‘LD HL, SP + e8’ استفاده کنید.

در نسخه 0.4.0 منسوخ شد، در نسخه 0.5.0 حذف گردید.

به جای آن، از OPT p استفاده کنید.

در نسخه 0.6.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.

به جای آن، از -I یا --include استفاده کنید.

در نسخه 1.0.0 منسوخ شد.

به جای آن، از ‘-Wno-overwrite’ استفاده کنید.

در نسخه 0.6.0 حذف شد.

به جای آن، از -Z یا --columns استفاده کنید.

در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.

به جای آن، از --auto-* استفاده کنید.

این‌ها تغییرات ناسازگاری (breaking changes) هستند که نحو را دگرگون نکرده‌اند و بنابراین عملاً امکان منسوخ‌سازی آن‌ها وجود نداشت.

در نسخه 0.6.0 تغییر کرد.

به جای تقسیم یک دایره به ۶۵۵۳۶.۰ «درجه دودویی»، اکنون به ۱.۰ «دور» (turns) تقسیم می‌شود.

برای نمونه، در گذشته داشتیم:

  • ‘SIN(0.25) == 0.00002’, زیرا 0.25 درجه دودویی = 0.25/65536.0 دور = 0.000004τ رادیان = 0.000008π رادیان، و sin(0.000008π)=0.00002
  • ‘SIN(16384.0) == 1.0’, زیرا 16384.0 درجه دودویی = 16384.0/65536.0 دور = 0.25τ رادیان = π/2 رادیان، و sin(π/2)=1
  • ‘ASIN(1.0) == 16384.0’

در مقابل، اکنون داریم:

  • ‘SIN(0.25) == 1.0’, زیرا 0.25 دور = 0.25τ رادیان = π/2 رادیان، و sin(π/2)=1
  • ‘SIN(16384.0) == 0.0’, زیرا 16384 دور = 16384τ رادیان = 32768π رادیان، و sin(32768π)=0
  • ‘ASIN(1.0) == 0.25’

در نسخه 0.5.0 تغییر کرد.

به جای هم‌علامت بودن با مقسوم (عملیات باقیمانده)، ‘%’ اکنون هم‌علامت با مقسوم‌علیه است (عملیات پیمانه).

برای نمونه، در گذشته داشتیم:

  • ‘13 % 10 == 3’
  • ‘-13 % 10 == -3’
  • ‘13 % -10 == 3’
  • ‘-13 % -10 == -3’

در مقابل، اکنون داریم:

  • ‘13 % 10 == 3’
  • ‘-13 % 10 == 7’
  • ‘13 % -10 == -7’
  • ‘-13 % -10 == -3’

در نسخه 0.9.0 تغییر کرد.

به جای شرکت‌پذیری از چپ، عملگر ‘**’ اکنون شرکت‌پذیر از راست است.

در گذشته داشتیم: ‘p ** q ** r == (p ** q) ** r’.

در مقابل، اکنون داریم: ‘p ** q ** r == p ** (q ** r)’.

این‌ها عملکردهای نادرستی هستند که ممکن است بر حسب اشتباه امکان‌پذیر شده باشند. این موارد منسوخ نمی‌شوند، بلکه مستقیماً برطرف می‌گردند.

در نسخه 0.7.0 برطرف شد.

برچسب‌های دارای دو دونقطه در گذشته فاصله میان آن‌ها را نادیده می‌گرفتند؛ برای نمونه، ‘Label: :’.

به جای آن، از ‘Label::’ استفاده کنید.

در نسخه 0.9.0 برطرف شد.

فاصله میان یک برچسب و دونقطه(های) آن در گذشته نادیده گرفته می‌شد؛ برای نمونه، ‘Label :’ و ‘Label ::’. اکنون با آن‌ها به عنوان فراخوانی ماکروی ‘Label’ با آرگومان‌های ‘:’ و ‘::’ رفتار می‌شود.

به جای آن، از ‘Label:’ و ‘Label::’ استفاده کنید.

در نسخه 1.0.0 برطرف شد.

زیرخط‌ها (جداکننده‌های اختیاری ارقام در ثوابت عدد صحیح) در گذشته اجازه می‌دادند بیش از یکی به صورت متوالی بیایند، یا در انتهای عدد بدون رقمی در طرفین قرار گیرند. اکنون تنها یک زیرخط میان دو رقم، یا میان پیشوند مبنا و یک رقم، یا میان یک رقم و پسوند دقت ممیز ثابت ‘q’ مجاز است.

در نسخه 0.5.0 برطرف شد.

برای نمونه، ‘ADD BC’ در گذشته به عنوان ‘ADD HL, BC’ در نظر گرفته می‌شد، و به همین ترتیب برای ‘DE’, ‘HL’, و ‘SP’.

به جای آن، به طور صریح از ‘HL’ به عنوان عملوند نخست استفاده کنید.

در نسخه 0.4.0 برطرف شد.

عملگر = در گذشته یک نام مستعار برای کلیدواژه SET بود، که شامل استفاده از = برای دستور SET نیز می‌شد.

به جای آن، برای دستور صرفاً از SET استفاده کنید.

rgbasm(1), gbz80(7), rgbds(5), rgbds(7)

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

August 1, 2026 Linux 6.12.107+deb13-amd64