| RGBASM-OLD(5) | File Formats Manual | RGBASM-OLD(5) |
نام (NAME)
rgbasm-old —
مستندات
ویژگیهای
منسوخشده
زبان
توضیحات (DESCRIPTION)
این سندی از ویژگیهایی است که در طول دههها توسعه و تکامل، از زبان اسمبلی rgbasm(5) حذف شدهاند، به همراه جایگزینهای مدرن آنها. هدف این سند، ارائه مرجعی برای ناسازگاریهای روبهعقب هنگام ارتقای یک پایگاه کد قدیمی اسمبلی جهت سازگاری با جدیدترین نسخه RGBDS است. این سند قصد ندارد تمام اشکالات نحوی برطرفشده (به استثنای چند مورد شاخص) یا کلیدواژههای رزروشده جدیدی را که ممکن است با شناسههای قدیمی تداخل داشته باشند، فهرست کند.
حذفشده (REMOVED)
اینها ویژگیهایی هستند که به طور کامل و بدون هیچ جایگزین مستقیمی حذف شدهاند. معمولاً این ویژگیها مانع افزودن قابلیتهای دیگر میشدند، یا محدودیتهای نامناسبی بر عملکرد مورد نظر خود اعمال میکردند.
تبدیل خودکار LD به LDH (rgbasm -l)
در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.
در گذشته
rgbasm(1) به
طور خودکار
با ‘LD’ به
مانند
‘LDH’
رفتار
میکرد در
صورتی که
مشخص بود
نشانی در
محدوده
$FF00-$FFFF قرار
دارد، و فلگ
-L برای
انصراف از
این رفتار
وجود داشت.
در نسخه 0.6.0 از
rgbasm(1) فلگ
-l برای
فعالسازی
اختیاری آن
اضافه شد.
به جای آن،
از ‘LDH’
استفاده
کرده و
فلگهای
-L و -l
را از
rgbasm(1) حذف
کنید.
درج خودکار NOP پس از HALT (rgbasm -H)
در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.
در گذشته
rgbasm(1) به
طور خودکار
یک دستور
‘NOP’ را
پس از
‘HALT’ درج
میکرد، و
فلگ -h
برای
انصراف از
این رفتار
وجود داشت.
در نسخه 0.6.0 از
rgbasm(1) فلگ
-H برای
فعالسازی
اختیاری آن
اضافه شد.
به جای آن،
صراحتاً از
یک ‘NOP’
پس از
‘HALT’
استفاده
کرده و
فلگهای
-h و -H
را از
rgbasm(1) حذف
نمایید.
تعاریف ماکروهای تو در تو (Nested macro definitions)
در نسخه 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
مقدار منفی برای DS (Negative DS)
در نسخه 0.3.2 حذف شد.
این
قابلیت
برای «به
عقب
بازگرداندن»
مقدار @
در بخشهای
RAM استفاده
میشد و
اجازه
میداد تا
تخصیصهای
فضای دارای
برچسب با
یکدیگر
همپوشانی
داشته
باشند.
به جای آن،
از UNION
استفاده
کنید.
جدولهای نویسه محلی برای هر بخش (Section-local charmaps)
در نسخه 0.3.9 منسوخ شد، در نسخه 0.4.0 حذف گردید.
تعریف یک
CHARMAP درون
یک SECTION
هنگامی که
جدول نویسه
عمومی جاری
همان ‘main’
بود، قبلاً
فقط همان
نگاشت
نویسه را در
آن SECTION
تعریف
میکرد.
به جای آن،
از PUSHC و
POPC
استفاده
کرده و به یک
نگاشت
نویسه
متفاوت
برای آن بخش
تغییر
دهید.
__FILE__ و __LINE__
در نسخه 0.6.0 منسوخ شد، در نسخه 0.7.0 حذف گردید.
به جای
آنها، از
WARN یا FAIL
برای چاپ
ردگیری
کامل نام
فایلها و
شماره خطوط
استفاده
کنید.
_PI
در نسخه 0.5.0 منسوخ شد، در نسخه 0.6.0 حذف گردید.
به جای آن،
از ‘3.141592653’
استفاده
کنید.
__DATE__ و __TIME__
در نسخه 1.0.0 منسوخ شد.
به جای
آنها، از
‘__ISO_8601_LOCAL__’
استفاده
کنید.
رفتار با رشتههای چندنویسهای به عنوان عدد (Treating multi-character strings as numbers)
در نسخه 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>'
رفتار با رشتهها به عنوان عدد (Treating strings as numbers)
در نسخه 1.0.0 منسوخ شد.
به جای آن،
از ثوابت
نویسهای
یا تابع
CHARVAL
استفاده
کنید.
برای
نمونه، به
جای یک رشته
صریح مانند
‘LD A, "R"’,
از یک نویسه
عددی مانند
‘LD A, 'R'’
استفاده
کنید.
و به جای
یک عبارت
رشتهای
مانند ‘CP
STRUPR("\1")’, از یک
عبارت عددی
CHARVAL مانند
‘CP CHARVAL(STRUPR("\1"))’
استفاده
نمایید.
rgbgfx -f/--fix و -F/--fix-and-save
در نسخه 0.6.0 حذف شد.
به جای آن،
از ‘rgbgfx -c/--colors’
برای تعیین
صریح یک
پالت رنگی
استفاده
کنید. در
صورت
استفاده از
‘-c embedded’,
پالت
نمایهگذاریشده
PNG را در یک
ویرایشگر
گرافیکی
جداگانه
مرتب
نمایید.
rgbgfx -D/--debug
در نسخه 0.6.0 حذف شد.
جایگزینشده (REPLACED)
اینها ویژگیهایی هستند که نحو آنها بدون تغییر در کارکرد، دگرگون شده است. معمولاً میتوان آنها را با یک جستجو و جایگزینی ساده بهروزرسانی کرد.
تعریف ثوابت و متغیرها بدون DEF (Defining constants and variables without DEF)
در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.
تعاریف
EQU, EQUS,
=, RB,
RW, و RL
در گذشته
فقط با نام
نماد آغاز
میشدند،
اما باید
حتماً در
ستون ۱ تایپ
میشدند.
به جای آن،
پیش از
تعاریف
ثوابت و
متغیرها از
DEF
استفاده
کنید. توجه
داشته
باشید که
گسترش EQUS
برای نام
نماد رخ
نمیدهد،
بنابراین
باید از
درونیابی
صریح
‘{interpolation}’
استفاده
کنید.
تعریف ماکروها مانند برچسبها (Defining macros like labels)
در نسخه 0.6.0 منسوخ شد، در نسخه 0.7.0 حذف گردید.
ماکروها
در گذشته به
صورت ‘name:
MACRO’ تعریف
میشدند.
به جای آن،
از ‘MACRO name’
استفاده
کنید. توجه
داشته
باشید که
گسترش EQUS
برای نام
ماکرو رخ
نمیدهد،
بنابراین
باید از
درونیابی
صریح
‘{interpolation}’
استفاده
کنید.
تعریف متغیرها با SET (Defining variables with SET)
در نسخه 0.5.2 منسوخ شد، در نسخه 0.6.0 حذف گردید.
متغیرها
در گذشته به
صورت ‘name SET
value’ تعریف
میشدند.
به جای آن،
از ‘DEF name = value’
استفاده
کنید.
برچسبهای عمومی بدون دونقطه (Global labels without colons)
در نسخه 0.4.0 منسوخ شد، در نسخه 0.5.0 حذف گردید.
برچسبها در گذشته تنها با یک نام قابل تعریف بودند، اما باید حتماً در ستون ۱ تایپ میشدند.
به جای آن،
از
دونقطههای
صریح
استفاده
کنید؛ برای
نمونه،
‘Label:’ یا
برچسب
صادرشدهٔ
‘Label::’.
'\,' در رشتههای درون آرگومانهای ماکرو ('\,' in strings within macro arguments)
در نسخه 0.5.0 منسوخ شد، در نسخه 0.7.0 حذف گردید.
آرگومانهای ماکرو اکنون با رشتههای درون نقلقول و عبارتهای پرانتزبندیشده به عنوان یک آرگومان واحد رفتار میکنند، بنابراین کاماهای درون آنها جداکننده آرگومان به شمار نمیروند و نیازی به گریزدهی ندارند.
به جای آن، صرفاً از کاما بدون بکاسلش استفاده کنید.
کامنتهای '*' ('*' comments)
در نسخه 0.4.1 منسوخ شد، در نسخه 0.5.0 حذف گردید.
این
کامنتها
باید نویسه
‘*’ را
تایپشده
در ستون ۱
میداشتند.
به جای آن،
از
کامنتهای
‘;’
استفاده
کنید.
STRIN، STRRIN، STRSUB و CHARSUB
در نسخه 1.0.0 منسوخ شد.
این توابع از نمایهگذاری با پایه ۱ برای نویسههای رشته استفاده میکردند که با نمایهگذاری با پایه ۰ متداول در برنامهنویسی ناسازگار بود.
به جای
STRIN, از
STRFIND; به جای
STRRIN, از
STRRFIND; به جای
STRSUB, از
STRSLICE; و به
جای CHARSUB, از
STRCHAR
استفاده
کنید.
توجه
داشته
باشید که
STRSLICE به جای
یک نمایه
شروع و طول،
نمایه شروع
و پایان را
میگیرد.
PRINTT، PRINTI، PRINTV و PRINTF
در نسخه 0.5.0 منسوخ شد، در نسخه 0.6.0 حذف گردید.
هر یک از این دستورالعملها مختص به یک نوع مقدار بودند.
به جای
آنها، از
PRINT و PRINTLN
همراه با
STRFMT یا
‘{interpolation}’
برای
قالببندی
متناسب با
نوع داده
استفاده
کنید.
IMPORT و XREF
در نسخه 0.4.0 حذف شد.
نمادها اکنون در صورتی که از جای دیگری صادر شده باشند، به طور خودکار حلوفصل میشوند.
به جای آنها، فقط این دستورالعملها را حذف کنید.
GLOBAL و XDEF
در نسخه 0.4.2 منسوخ شد، در نسخه 0.5.0 حذف گردید.
به جای
آنها، از
EXPORT
استفاده
کنید.
HOME، CODE، DATA و BSS
در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید.
به جای
HOME, از ROM0;
به جای CODE
و DATA, از
ROMX; و به
جای BSS, از
WRAM0
استفاده
کنید.
JP [HL]
در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید.
به جای آن،
از ‘JP HL’
استفاده
کنید.
LDI A, HL و LDD A, 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-]’)
استفاده
کنید.
LDIO
در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید.
به جای آن،
از ‘LDH’
استفاده
کنید.
LD [C], A و LD A, [C]
در نسخه 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
از منسوخ
بودن خارج
شدند.
LDH [n8], A و LDH A, [n8]
در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید.
دستور
‘LDH’
قبلاً با
«نشانیهای»
بین $00 تا
$FF
بهگونهای
رفتار
میکرد که
گویی بایت
پایین
نشانی در
بازهٔ $FF00
تا $FFFF
هستند.
به جای آن،
از ‘LDH [n16], A’
و ‘LDH A, [n16]’
استفاده
کنید.
LD HL, [SP + e8]
در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید.
به جای آن،
از ‘LD HL, SP + e8’
استفاده
کنید.
LDHL SP, e8
در ASMotor پشتیبانی میشد، در RGBDS حذف شد.
به جای آن،
از ‘LD HL, SP + e8’
استفاده
کنید.
OPT z
در نسخه 0.4.0 منسوخ شد، در نسخه 0.5.0 حذف گردید.
به جای آن،
از OPT p
استفاده
کنید.
rgbasm -i
در نسخه 0.6.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.
به جای آن،
از -I یا
--include
استفاده
کنید.
rgbfix -O/--overwrite
در نسخه 1.0.0 منسوخ شد.
به جای آن،
از ‘-Wno-overwrite’
استفاده
کنید.
rgbgfx -h/--horizontal
در نسخه 0.6.0 حذف شد.
به جای آن،
از -Z یا
--columns
استفاده
کنید.
rgbgfx --output-*
در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید.
به جای آن،
از --auto-*
استفاده
کنید.
تغییریافته (CHANGED)
اینها تغییرات ناسازگاری (breaking changes) هستند که نحو را دگرگون نکردهاند و بنابراین عملاً امکان منسوخسازی آنها وجود نداشت.
واحدهای توابع مثلثاتی (Trigonometry function units)
در نسخه 0.6.0 تغییر کرد.
به جای تقسیم یک دایره به ۶۵۵۳۶.۰ «درجه دودویی»، اکنون به ۱.۰ «دور» (turns) تقسیم میشود.
برای نمونه، در گذشته داشتیم:
- ‘
SIN(0.25) == 0.00002’, زیرا 0.25 درجه دودویی = دور = رادیان = رادیان، و - ‘
SIN(16384.0) == 1.0’, زیرا 16384.0 درجه دودویی = دور = رادیان = رادیان، و - ‘
ASIN(1.0) == 16384.0’
در مقابل، اکنون داریم:
- ‘
SIN(0.25) == 1.0’, زیرا دور = رادیان = رادیان، و - ‘
SIN(16384.0) == 0.0’, زیرا دور = رادیان = رادیان، و - ‘
ASIN(1.0) == 0.25’
رفتار عملگر % با مقسوم یا مقسومعلیه منفی (% operator behavior with negative dividend or divisor)
در نسخه 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’
شرکتپذیری عملگر ** (** operator associativity)
در نسخه 0.9.0 تغییر کرد.
به جای
شرکتپذیری
از چپ،
عملگر
‘**’
اکنون
شرکتپذیر
از راست
است.
در گذشته
داشتیم: ‘p
** q ** r == (p ** q) ** r’.
در مقابل،
اکنون
داریم: ‘p ** q **
r == p ** (q ** r)’.
اشکالات (BUGS)
اینها عملکردهای نادرستی هستند که ممکن است بر حسب اشتباه امکانپذیر شده باشند. این موارد منسوخ نمیشوند، بلکه مستقیماً برطرف میگردند.
فاصله میان دونقطههای برچسبهای صادرشده (Space between exported labels' colons)
در نسخه 0.7.0 برطرف شد.
برچسبهای
دارای دو
دونقطه در
گذشته
فاصله میان
آنها را
نادیده
میگرفتند؛
برای
نمونه،
‘Label: :’.
به جای آن،
از ‘Label::’
استفاده
کنید.
فاصله میان برچسب و دونقطه (Space between label and colon)
در نسخه 0.9.0 برطرف شد.
فاصله
میان یک
برچسب و
دونقطه(های)
آن در گذشته
نادیده
گرفته
میشد؛
برای
نمونه،
‘Label :’ و
‘Label ::’.
اکنون با
آنها به
عنوان
فراخوانی
ماکروی
‘Label’ با
آرگومانهای
‘:’ و
‘::’
رفتار
میشود.
به جای آن،
از ‘Label:’ و
‘Label::’
استفاده
کنید.
زیرخطهای اضافی در ثوابت عدد صحیح (Extra underscores in integer constants)
در نسخه 1.0.0 برطرف شد.
زیرخطها
(جداکنندههای
اختیاری
ارقام در
ثوابت عدد
صحیح) در
گذشته
اجازه
میدادند
بیش از یکی
به صورت
متوالی
بیایند، یا
در انتهای
عدد بدون
رقمی در
طرفین قرار
گیرند.
اکنون تنها
یک زیرخط
میان دو
رقم، یا
میان
پیشوند
مبنا و یک
رقم، یا
میان یک رقم
و پسوند دقت
ممیز ثابت
‘q’ مجاز
است.
دستور ADD r16 با عملوند نخست ضمنی HL (ADD r16 with implicit first HL operand)
در نسخه 0.5.0 برطرف شد.
برای
نمونه،
‘ADD BC’ در
گذشته به
عنوان ‘ADD HL,
BC’ در نظر
گرفته
میشد، و به
همین ترتیب
برای ‘DE’,
‘HL’, و
‘SP’.
به جای آن،
به طور صریح
از ‘HL’ به
عنوان
عملوند
نخست
استفاده
کنید.
علامت = به جای SET (= instead of SET)
در نسخه 0.4.0 برطرف شد.
عملگر =
در گذشته یک
نام مستعار
برای
کلیدواژه
SET بود،
که شامل
استفاده از
= برای
دستور
SET نیز
میشد.
به جای آن،
برای دستور
صرفاً از
SET
استفاده
کنید.
همچنین ببینید (SEE ALSO)
تاریخچه (HISTORY)
rgbasm(1) در ابتدا توسط Carsten Sørensen به عنوان بخشی از بسته ASMotor نوشته شد، و سپس توسط Justin Lloyd در RGBDS مجدداً بستهبندی گردید. این ابزار اکنون توسط شماری از مشارکتکنندگان در https://github.com/gbdev/rgbds نگهداری میشود.
| August 1, 2026 | Linux 6.12.107+deb13-amd64 |