'\" e .\" .\" SPDX-License-Identifier: MIT .\" .Dd August 1, 2026 .Dt RGBASM-OLD 5 .Os .Sh "نام (NAME)" .Nm rgbasm-old .Nd مستندات ویژگی‌های منسوخ‌شده زبان .Sh "توضیحات (DESCRIPTION)" این سندی از ویژگی‌هایی است که در طول دهه‌ها توسعه و تکامل، از زبان اسمبلی .Xr rgbasm 5 حذف شده‌اند، به همراه جایگزین‌های مدرن آن‌ها. هدف این سند، ارائه مرجعی برای ناسازگاری‌های رو‌به‌عقب هنگام ارتقای یک پایگاه کد قدیمی اسمبلی جهت سازگاری با جدیدترین نسخه RGBDS است. این سند .Em قصد ندارد تمام اشکالات نحوی برطرف‌شده (به استثنای چند مورد شاخص) یا کلیدواژه‌های رزروشده جدیدی را که ممکن است با شناسه‌های قدیمی تداخل داشته باشند، فهرست کند. .Sh "حذف‌شده (REMOVED)" این‌ها ویژگی‌هایی هستند که به طور کامل و بدون هیچ جایگزین مستقیمی حذف شده‌اند. معمولاً این ویژگی‌ها مانع افزودن قابلیت‌های دیگر می‌شدند، یا محدودیت‌های نامناسبی بر عملکرد مورد نظر خود اعمال می‌کردند. .Ss "تبدیل خودکار LD به LDH (rgbasm -l)" در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید. .Pp در گذشته .Xr rgbasm 1 به طور خودکار با .Ql LD به مانند .Ql LDH رفتار می‌کرد در صورتی که مشخص بود نشانی در محدوده .Ad $FF00-$FFFF قرار دارد، و فلگ .Fl L برای انصراف از این رفتار وجود داشت. در نسخه 0.6.0 از .Xr rgbasm 1 فلگ .Fl l برای فعال‌سازی اختیاری آن اضافه شد. .Pp به جای آن، از .Ql LDH استفاده کرده و فلگ‌های .Fl L و .Fl l را از .Xr rgbasm 1 حذف کنید. .Ss "درج خودکار NOP پس از HALT (rgbasm -H)" در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید. .Pp در گذشته .Xr rgbasm 1 به طور خودکار یک دستور .Ql NOP را پس از .Ql HALT درج می‌کرد، و فلگ .Fl h برای انصراف از این رفتار وجود داشت. در نسخه 0.6.0 از .Xr rgbasm 1 فلگ .Fl H برای فعال‌سازی اختیاری آن اضافه شد. .Pp به جای آن، صراحتاً از یک .Ql NOP پس از .Ql HALT استفاده کرده و فلگ‌های .Fl h و .Fl H را از .Xr rgbasm 1 حذف نمایید. .Ss "تعاریف ماکروهای تو در تو (Nested macro definitions)" در نسخه 0.4.2 حذف شد. .Pp به جای آن، تعریف ماکروی تو در تو را درون یک رشته نقل‌قول‌شده قرار دهید (با این اطمینان که هیچ‌یک از خطوط آن با .Ic ENDM آغاز نمی‌شود)، سپس آن رشته را درون‌یابی کنید. برای نمونه: .Bd -literal -offset indent MACRO outer DEF definition EQUS """ MACRO inner println (\e1) - (\e\e1) \enENDM""" {definition} PURGE definition ENDM outer 10 inner 3 ; prints 7 .Ed .Ss "مقدار منفی برای DS (Negative DS)" در نسخه 0.3.2 حذف شد. .Pp این قابلیت برای «به عقب بازگرداندن» مقدار .Ic @ در بخش‌های RAM استفاده می‌شد و اجازه می‌داد تا تخصیص‌های فضای دارای برچسب با یکدیگر همپوشانی داشته باشند. .Pp به جای آن، از .Ic UNION استفاده کنید. .Ss "جدول‌های نویسه محلی برای هر بخش (Section-local charmaps)" در نسخه 0.3.9 منسوخ شد، در نسخه 0.4.0 حذف گردید. .Pp تعریف یک .Ic CHARMAP درون یک .Ic SECTION هنگامی که جدول نویسه عمومی جاری همان .Sq main بود، قبلاً فقط همان نگاشت نویسه را در آن .Ic SECTION تعریف می‌کرد. .Pp به جای آن، از .Ic PUSHC و .Ic POPC استفاده کرده و به یک نگاشت نویسه متفاوت برای آن بخش تغییر دهید. .Ss __FILE__ و __LINE__ در نسخه 0.6.0 منسوخ شد، در نسخه 0.7.0 حذف گردید. .Pp به جای آن‌ها، از .Ic WARN یا .Ic FAIL برای چاپ ردگیری کامل نام فایل‌ها و شماره خطوط استفاده کنید. .Ss _PI در نسخه 0.5.0 منسوخ شد، در نسخه 0.6.0 حذف گردید. .Pp به جای آن، از .Ql 3.141592653 استفاده کنید. .Ss __DATE__ و __TIME__ در نسخه 1.0.0 منسوخ شد. .Pp به جای آن‌ها، از .Ql __ISO_8601_LOCAL__ استفاده کنید. .Ss "رفتار با رشته‌های چندنویسه‌ای به عنوان عدد (Treating multi-character strings as numbers)" در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید. .Pp به جای آن، از یک .Ic CHARMAP چندمقداری استفاده کنید، یا مقادیر نویسه‌های منفرد را به صورت صریح با یکدیگر ترکیب نمایید. .Pp برای نمونه، به جای یک رشته چندنویسه‌ای مانند: .Bd -literal -offset indent CHARMAP "X", $12 CHARMAP "Y", $34 LD BC, "XY" .Ed .Pp یا از یک .Ic CHARMAP چندمقداری استفاده کنید: .Bd -literal -offset indent CHARMAP "X", $12 CHARMAP "Y", $34 CHARMAP "", 'X', 'Y' LD BC, CHARVAL("", 0) << 8 | CHARVAL("", 1) .Ed .Pp یا نویسه‌های منفرد را ترکیب کنید: .Bd -literal -offset indent CHARMAP "X", $12 CHARMAP "Y", $34 LD BC, 'X' << 8 | 'Y' .Ed .Pp یا از یک نویسه تک‌مقداری استفاده کنید: .Bd -literal -offset indent CHARMAP "X", $12 CHARMAP "Y", $34 CHARMAP "", 'X' << 8 | 'Y' LD BC, '' .Ed .Ss "رفتار با رشته‌ها به عنوان عدد (Treating strings as numbers)" در نسخه 1.0.0 منسوخ شد. .Pp به جای آن، از ثوابت نویسه‌ای یا تابع .Ic CHARVAL استفاده کنید. .Pp برای نمونه، به جای یک رشته صریح مانند .Ql LD A, \&"R" , از یک نویسه عددی مانند .Ql LD A, 'R' استفاده کنید. .Pp و به جای یک عبارت رشته‌ای مانند .Ql CP STRUPR("\e1") , از یک عبارت عددی .Ic CHARVAL مانند .Ql CP CHARVAL(STRUPR("\e1")) استفاده نمایید. .Ss "rgbgfx -f/--fix و -F/--fix-and-save" در نسخه 0.6.0 حذف شد. .Pp به جای آن، از .Ql rgbgfx -c/--colors برای تعیین صریح یک پالت رنگی استفاده کنید. در صورت استفاده از .Ql -c embedded , پالت نمایه‌گذاری‌شده PNG را در یک ویرایشگر گرافیکی جداگانه مرتب نمایید. .Ss rgbgfx -D/--debug در نسخه 0.6.0 حذف شد. .Sh "جایگزین‌شده (REPLACED)" این‌ها ویژگی‌هایی هستند که نحو آن‌ها بدون تغییر در کارکرد، دگرگون شده است. معمولاً می‌توان آن‌ها را با یک جستجو و جایگزینی ساده به‌روزرسانی کرد. .Ss "تعریف ثوابت و متغیرها بدون DEF (Defining constants and variables without DEF)" در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید. .Pp تعاریف .Ic EQU , EQUS , = , RB , RW , و .Ic RL در گذشته فقط با نام نماد آغاز می‌شدند، اما باید حتماً در ستون ۱ تایپ می‌شدند. .Pp به جای آن، پیش از تعاریف ثوابت و متغیرها از .Ic DEF استفاده کنید. توجه داشته باشید که گسترش .Ic EQUS برای نام نماد رخ نمی‌دهد، بنابراین باید از درون‌یابی صریح .Ql {interpolation} استفاده کنید. .Ss "تعریف ماکروها مانند برچسب‌ها (Defining macros like labels)" در نسخه 0.6.0 منسوخ شد، در نسخه 0.7.0 حذف گردید. .Pp ماکروها در گذشته به صورت .Ql name: MACRO تعریف می‌شدند. .Pp به جای آن، از .Ql MACRO name استفاده کنید. توجه داشته باشید که گسترش .Ic EQUS برای نام ماکرو رخ نمی‌دهد، بنابراین باید از درون‌یابی صریح .Ql {interpolation} استفاده کنید. .Ss "تعریف متغیرها با SET (Defining variables with SET)" در نسخه 0.5.2 منسوخ شد، در نسخه 0.6.0 حذف گردید. .Pp متغیرها در گذشته به صورت .Ql name SET value تعریف می‌شدند. .Pp به جای آن، از .Ql DEF name = value استفاده کنید. .Ss "برچسب‌های عمومی بدون دونقطه (Global labels without colons)" در نسخه 0.4.0 منسوخ شد، در نسخه 0.5.0 حذف گردید. .Pp برچسب‌ها در گذشته تنها با یک نام قابل تعریف بودند، اما باید حتماً در ستون ۱ تایپ می‌شدند. .Pp به جای آن، از دونقطه‌های صریح استفاده کنید؛ برای نمونه، .Ql Label: یا برچسب صادرشدهٔ .Ql Label:: . .Ss "'\e,' در رشته‌های درون آرگومان‌های ماکرو ('\e,' in strings within macro arguments)" در نسخه 0.5.0 منسوخ شد، در نسخه 0.7.0 حذف گردید. .Pp آرگومان‌های ماکرو اکنون با رشته‌های درون نقل‌قول و عبارت‌های پرانتزبندی‌شده به عنوان یک آرگومان واحد رفتار می‌کنند، بنابراین کاماهای درون آن‌ها جداکننده آرگومان به شمار نمی‌روند و نیازی به گریزدهی ندارند. .Pp به جای آن، صرفاً از کاما بدون بک‌اسلش استفاده کنید. .Ss "کامنت‌های '*' ('*' comments)" در نسخه 0.4.1 منسوخ شد، در نسخه 0.5.0 حذف گردید. .Pp این کامنت‌ها باید نویسه .Ql * را تایپ‌شده در ستون ۱ می‌داشتند. .Pp به جای آن، از کامنت‌های .Ql \&; استفاده کنید. .Ss "STRIN، STRRIN، STRSUB و CHARSUB" در نسخه 1.0.0 منسوخ شد. .Pp این توابع از نمایه‌گذاری با پایه ۱ برای نویسه‌های رشته استفاده می‌کردند که با نمایه‌گذاری با پایه ۰ متداول در برنامه‌نویسی ناسازگار بود. .Pp به جای .Ic STRIN , از .Ic STRFIND ; به جای .Ic STRRIN , از .Ic STRRFIND ; به جای .Ic STRSUB , از .Ic STRSLICE ; و به جای .Ic CHARSUB , از .Ic STRCHAR استفاده کنید. .Pp توجه داشته باشید که .Ic STRSLICE به جای یک نمایه شروع و طول، نمایه شروع و پایان را می‌گیرد. .Ss "PRINTT، PRINTI، PRINTV و PRINTF" در نسخه 0.5.0 منسوخ شد، در نسخه 0.6.0 حذف گردید. .Pp هر یک از این دستورالعمل‌ها مختص به یک نوع مقدار بودند. .Pp به جای آن‌ها، از .Ic PRINT و .Ic PRINTLN همراه با .Ic STRFMT یا .Ql {interpolation} برای قالب‌بندی متناسب با نوع داده استفاده کنید. .Ss "IMPORT و XREF" در نسخه 0.4.0 حذف شد. .Pp نمادها اکنون در صورتی که از جای دیگری صادر شده باشند، به طور خودکار حل‌وفصل می‌شوند. .Pp به جای آن‌ها، فقط این دستورالعمل‌ها را حذف کنید. .Ss "GLOBAL و XDEF" در نسخه 0.4.2 منسوخ شد، در نسخه 0.5.0 حذف گردید. .Pp به جای آن‌ها، از .Ic EXPORT استفاده کنید. .Ss "HOME، CODE، DATA و BSS" در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید. .Pp به جای .Ic HOME , از .Ic ROM0 ; به جای .Ic CODE و .Ic DATA , از .Ic ROMX ; و به جای .Ic BSS , از .Ic WRAM0 استفاده کنید. .Ss JP [HL] در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید. .Pp به جای آن، از .Ql JP HL استفاده کنید. .Ss "LDI A, HL و LDD A, HL" در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید. .Pp به جای آن‌ها، از .Ql LDI A, [HL] و .Ql LDD A, [HL] (یا .Ql LD A, [HLI] و .Ql LD A, [HLD] ; یا .Ql LD A, [HL+] و .Ql LD A, [HL-] ) استفاده کنید. .Ss LDIO در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید. .Pp به جای آن، از .Ql LDH استفاده کنید. .Ss "LD [C], A و LD A, [C]" در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید. .Pp به جای آن‌ها، از .Ql LDH [C], A و .Ql LDH A, [C] استفاده کنید. .Pp توجه داشته باشید که .Ql LD [$FF00+C], A و .Ql LD A, [$FF00+C] نیز در نسخه 0.9.0 منسوخ شده بودند، اما در نسخه 0.9.1 .Em "از منسوخ بودن خارج شدند" . .Ss "LDH [n8], A و LDH A, [n8]" در نسخه 0.9.0 منسوخ شد، در نسخه 1.0.0 حذف گردید. .Pp دستور .Ql LDH قبلاً با «نشانی‌های» بین .Ad $00 تا .Ad $FF به‌گونه‌ای رفتار می‌کرد که گویی بایت پایین نشانی در بازهٔ .Ad $FF00 تا .Ad $FFFF هستند. .Pp به جای آن، از .Ql LDH [n16], A و .Ql LDH A, [n16] استفاده کنید. .Ss LD HL, [SP + e8] در نسخه 0.3.0 منسوخ شد، در نسخه 0.4.0 حذف گردید. .Pp به جای آن، از .Ql LD HL, SP + e8 استفاده کنید. .Ss LDHL SP, e8 در ASMotor پشتیبانی می‌شد، در RGBDS حذف شد. .Pp به جای آن، از .Ql LD HL, SP + e8 استفاده کنید. .Ss OPT z در نسخه 0.4.0 منسوخ شد، در نسخه 0.5.0 حذف گردید. .Pp به جای آن، از .Ic OPT p استفاده کنید. .Ss rgbasm -i در نسخه 0.6.0 منسوخ شد، در نسخه 0.8.0 حذف گردید. .Pp به جای آن، از .Fl I یا .Fl \-include استفاده کنید. .Ss rgbfix -O/--overwrite در نسخه 1.0.0 منسوخ شد. .Pp به جای آن، از .Ql -Wno-overwrite استفاده کنید. .Ss rgbgfx -h/--horizontal در نسخه 0.6.0 حذف شد. .Pp به جای آن، از .Fl Z یا .Fl \-columns استفاده کنید. .Ss rgbgfx --output-* در نسخه 0.7.0 منسوخ شد، در نسخه 0.8.0 حذف گردید. .Pp به جای آن، از .Fl \-auto-* استفاده کنید. .Sh "تغییریافته (CHANGED)" این‌ها تغییرات ناسازگاری (breaking changes) هستند که نحو را دگرگون نکرده‌اند و بنابراین عملاً امکان منسوخ‌سازی آن‌ها وجود نداشت. .Ss "واحدهای توابع مثلثاتی (Trigonometry function units)" در نسخه 0.6.0 تغییر کرد. .Pp به جای تقسیم یک دایره به ۶۵۵۳۶.۰ «درجه دودویی»، اکنون به ۱.۰ «دور» (turns) تقسیم می‌شود. .Pp برای نمونه، در گذشته داشتیم: .EQ delim $$ .EN .Bl -bullet -offset indent .It .Ql SIN(0.25) == 0.00002 , زیرا 0.25 درجه دودویی = $0.25 / 65536.0$ دور = $0.000004 tau$ رادیان = $0.000008 pi$ رادیان، و $sin ( 0.000008 pi ) = 0.00002$ .It .Ql SIN(16384.0) == 1.0 , زیرا 16384.0 درجه دودویی = $16384.0 / 65536.0$ دور = $0.25 tau$ رادیان = $pi / 2$ رادیان، و $sin ( pi / 2 ) = 1$ .It .Ql ASIN(1.0) == 16384.0 .El .Pp در مقابل، اکنون داریم: .Bl -bullet -offset indent .It .Ql SIN(0.25) == 1.0 , زیرا $0.25$ دور = $0.25 tau$ رادیان = $pi / 2$ رادیان، و $sin ( pi / 2 ) = 1$ .It .Ql SIN(16384.0) == 0.0 , زیرا $16384$ دور = $16384 tau$ رادیان = $32768 pi$ رادیان، و $sin ( 32768 pi ) = 0$ .It .Ql ASIN(1.0) == 0.25 .El .EQ delim off .EN .Ss "رفتار عملگر % با مقسوم یا مقسوم‌علیه منفی (% operator behavior with negative dividend or divisor)" در نسخه 0.5.0 تغییر کرد. .Pp به جای هم‌علامت بودن با مقسوم (عملیات باقیمانده)، .Ql % اکنون هم‌علامت با مقسوم‌علیه است (عملیات پیمانه). .Pp برای نمونه، در گذشته داشتیم: .Bl -bullet -offset indent .It .Ql 13 % 10 == 3 .It .Ql -13 % 10 == -3 .It .Ql 13 % -10 == 3 .It .Ql -13 % -10 == -3 .El .Pp در مقابل، اکنون داریم: .Bl -bullet -offset indent .It .Ql 13 % 10 == 3 .It .Ql -13 % 10 == 7 .It .Ql 13 % -10 == -7 .It .Ql -13 % -10 == -3 .El .Ss "شرکت‌پذیری عملگر ** (** operator associativity)" در نسخه 0.9.0 تغییر کرد. .Pp به جای شرکت‌پذیری از چپ، عملگر .Ql ** اکنون شرکت‌پذیر از راست است. .Pp در گذشته داشتیم: .Ql p ** q ** r == (p ** q) ** r . .Pp در مقابل، اکنون داریم: .Ql p ** q ** r == p ** (q ** r) . .Sh "اشکالات (BUGS)" این‌ها عملکردهای نادرستی هستند که ممکن است بر حسب اشتباه امکان‌پذیر شده باشند. این موارد منسوخ نمی‌شوند، بلکه مستقیماً برطرف می‌گردند. .Ss "فاصله میان دونقطه‌های برچسب‌های صادرشده (Space between exported labels' colons)" در نسخه 0.7.0 برطرف شد. .Pp برچسب‌های دارای دو دونقطه در گذشته فاصله میان آن‌ها را نادیده می‌گرفتند؛ برای نمونه، .Ql Label:\ : . .Pp به جای آن، از .Ql Label:: استفاده کنید. .Ss "فاصله میان برچسب و دونقطه (Space between label and colon)" در نسخه 0.9.0 برطرف شد. .Pp فاصله میان یک برچسب و دونقطه(های) آن در گذشته نادیده گرفته می‌شد؛ برای نمونه، .Ql Label\ : و .Ql Label\ :: . اکنون با آن‌ها به عنوان فراخوانی ماکروی .Ql Label با آرگومان‌های .Ql \&: و .Ql :: رفتار می‌شود. .Pp به جای آن، از .Ql Label: و .Ql Label:: استفاده کنید. .Ss "زیرخط‌های اضافی در ثوابت عدد صحیح (Extra underscores in integer constants)" در نسخه 1.0.0 برطرف شد. .Pp زیرخط‌ها (جداکننده‌های اختیاری ارقام در ثوابت عدد صحیح) در گذشته اجازه می‌دادند بیش از یکی به صورت متوالی بیایند، یا در انتهای عدد بدون رقمی در طرفین قرار گیرند. اکنون تنها یک زیرخط میان دو رقم، یا میان پیشوند مبنا و یک رقم، یا میان یک رقم و پسوند دقت ممیز ثابت .Ql q مجاز است. .Ss "دستور ADD r16 با عملوند نخست ضمنی HL (ADD r16 with implicit first HL operand)" در نسخه 0.5.0 برطرف شد. .Pp برای نمونه، .Ql ADD BC در گذشته به عنوان .Ql ADD HL, BC در نظر گرفته می‌شد، و به همین ترتیب برای .Ql DE , .Ql HL , و .Ql SP . .Pp به جای آن، به طور صریح از .Ql HL به عنوان عملوند نخست استفاده کنید. .Ss "علامت = به جای SET (= instead of SET)" در نسخه 0.4.0 برطرف شد. .Pp عملگر .Ic = در گذشته یک نام مستعار برای کلیدواژه .Ic SET بود، که شامل استفاده از .Ic = برای .Em دستور .Ic SET نیز می‌شد. .Pp به جای آن، برای دستور صرفاً از .Ic SET استفاده کنید. .Sh "همچنین ببینید (SEE ALSO)" .Xr rgbasm 1 , .Xr gbz80 7 , .Xr rgbds 5 , .Xr rgbds 7 .Sh "تاریخچه (HISTORY)" .Xr rgbasm 1 در ابتدا توسط .An Carsten S\(/orensen به عنوان بخشی از بسته ASMotor نوشته شد، و سپس توسط .An Justin Lloyd در RGBDS مجدداً بسته‌بندی گردید. این ابزار اکنون توسط شماری از مشارکت‌کنندگان در .Lk https://github.com/gbdev/rgbds نگهداری می‌شود.