لینک کوتاه مطلب : https://hsgar.com/?p=3181

6502 با چه سرعتی می تواند حافظه را انتقال دهد

شگفت انگیز گرگوریو ناچو گرافیک عنوان مقاله را این هفته منتشر کرد تا توجه را به پردازنده محترم 6502 جلب کند و در اسلایدهای بازاریابی تراشه M2 اپل سرگرم کننده باشد. او احتمالاً این کار را انجام می دهد جاه طلبانه ترین پروژه تک نفره Commodore 64 که من می شناسم و وبلاگ فوق العاده ای دارد.

اپل ادعا می کند تراشه جدید M2 دارای مشخصات زیر است.

M2 دارای تصویر توسط اپل از طریق یوتیوب است

همه ما می دانیم که این اعداد احتمالا کمی پشمالو هستند. ممکن است بسیار کرکی باشند و در کاربردهای عملی، احتمالاً بسیار دور هستند. محک زدن در آزمایشگاه خوب است، اما اعداد به ندرت عملکرد دنیای واقعی را منعکس می کنند.

سخت افزار تام در این تراشه جدید شکست بسیار خوبی انجام می دهد. خیلی شیک به نظر می رسد!

سرعت یک 6502 چقدر است؟

پس از اینکه گرگوریو این تصویر را در اوایل این هفته ارسال کرد، بحث‌های زیادی را در مورد سرعت انتقال حافظه پردازنده 6502 در شبکه‌های بین‌المللی برانگیخت.

6502 در ماشین های Commodore ساعت را با تراشه ویدئویی به اشتراک می گذارد. از آنجایی که در آن زمان رم دو پورت شده از نظر مالی امکان پذیر نبود، آنها یک ترفند دسترسی به حافظه را انتخاب کردند که به تراشه ویدئو و پردازنده اجازه می داد در طول یک چرخه ساعت به حافظه دسترسی داشته باشند. من فکر می کنم در اکثر Commodores اینطور است، اما در VIC-20، پردازنده به حافظه در قسمت پایین سیگنال و تراشه VIC در قسمت بالا دسترسی دارد. شاید این عقب مانده باشد… در هر صورت، متوجه موضوع می شوید.

سیگنال ساعت VIC-20 PAL از 6561

حافظه 1 مگابایت در ثانیه

اگر به اسلاید برگردیم، این پهنای باند حافظه 1 مگاهرتز چیزی است که مردم مورد سوال هستند.

در هر سیکل ساعت، 6502 حافظه را از جایی می خواند… پشته، رجیسترها، شمارنده برنامه، مکان های حافظه و غیره. بنابراین در 1 مگاهرتز، معمولی برای ماشین های Commodore، این پهنای باند 1 مگابایت در ثانیه احتمالاً در خلاء دقیق است. افراد بازاریابی پاتوق می کنند

تصویر توسط گرگوریو ناچو در c64os.com

توجه به این نکته ضروری است گرگوریو ناچواسلاید ‘s یک تقلید بود و قصد نداشت یک نوع دقیق اعداد سخت باشد. لطفاً به خاطر داشته باشید که اگر این کار را نکنید، بقیه این بحث پرهای شما را به هم خواهد زد.

ما برخی از انتقال‌های حافظه را امتحان می‌کنیم تا تصور کنیم که سرعت انتقال واقعی با استفاده از سخت‌افزار استاندارد Commodore چگونه می‌تواند باشد. سایر پلتفرم‌های مبتنی بر 6502 ممکن است سریع‌تر یا کندتر باشند، بنابراین من شما را تشویق می‌کنم برخی از آزمایش‌های خود را امتحان کنید و لطفاً آنچه را که پیدا می‌کنید به من اطلاع دهید.

باز هم، به یاد داشته باشید که انتقال حافظه، چرخه های ساعت بیشتری از خواندن یا نوشتن صرف می کند…

بیایید به محبوب ترین سیستم مبتنی بر 6502 در تمام دوران، Commodore 64 بپردازیم.

این روزها همه برای Commodore 64 خود یک هدآپ نمایش دارند.

انتقال

ما یک صف درست از رادنی زکس ارجمند خواهیم گرفت.

اتفاقا رابین یک ویدیوی طولانی برای اصلاح اجرای این کتاب انجام داد حشره. من از نسخه اصلاح شده استفاده خواهم کرد زیرا فکر می کنم این یک نمونه ثابت از انجام انتقال بلوک در دنیای واقعی است. مطمئناً ممکن است راه‌های سریع‌تری وجود داشته باشد، اما این یک راه واقع بینانه است، چیزی که ما دنبال آن هستیم.

شما می‌توانید این فصل عالی را در مورد نحوه عملکرد آن بخوانید و ویدیوی رابین با جزئیات کامل به آن می‌پردازد. در اینجا کاری است که ما می خواهیم انجام دهیم:

source   = $0800
dest     = $4800
len      = $4000
from     = $fb
to       = $fd
tmpx     = $a6


copyr
         .block

         lda #<source
         sta from
         lda #>source
         sta from+1
         lda #<dest
         sta to
         lda #>dest
         sta to+1

         ldy #0
         ldx #>len
         beq remain
next     lda (from),y
         sta (to),y
         iny
         bne next
         inc from+1
         inc to+1
         dex
         bne next
remain   ldx #<len      
         beq done
nextr    lda (from),y
         sta (to),y
         iny
         dex
         bne nextr
done     rts

         .bend

ما می‌توانیم روی یک Commodore برای اینکه بفهمیم سرعت این کپی چقدر سریع می‌گذرد، می‌توانیم ضربات جفی را حساب کنیم. مطمئناً هزینه کمی در راه اندازی وجود دارد، اما من فکر می کنم به اندازه کافی حاشیه ای است که بتوانیم آن را برای اهداف خود نادیده بگیریم.

12 دلار (18) جیفی

خوب، این خیلی سریع است. از آنجایی که این 16 هزار انتقال است، به 54.6 کیلو در ثانیه می رسد.

بیایید یک دسته از آنها را انجام دهیم و ببینیم که چه چیزی به دست می آید.

ما می‌توانیم به سرعت 255 بار با آن تماس بگیریم و همان ریاضی را انجام دهیم.

         lda #$00
         sta $a2
         sta $a1
         sta $a0

         ldx #255
         stx tmpx
lp
         jsr copyr
         dec tmpx
         ldx tmpx
         bne lp

         lda $a0
         jsr printbyte
         lda $a1
         jsr printbyte
         lda $a2
         jsr printbyte
1128 دلار (4392)

بنابراین با 1128 دلار جیفی (4392) و 255 نقل و انتقالات 16384، ما حدود 57 هزار در ثانیه می بینیم.

دانه نمک، بله، اما به اندازه کافی در دنیای واقعی.

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

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

KIM-1 بدون شک ساده ترین و خالص ترین پلت فرم 6502 است، بنابراین تلاش برای انتقال حافظه بر روی آن جالب خواهد بود.

سرعت آن کمی کندتر از Commodore 64 است، بنابراین من انتظار دارم که سرعت انتقال آن کمی کندتر باشد. اما لازم نیست که برای زمان دسترسی به عنوان “بد خط” VIC-II رقابت کند، بنابراین شاید خیلی نزدیک باشد.

بیایید دریابیم.

من یک KIM-1 “واقعی” ندارم، اما مالک دو کلون هستم. امروز، بیایید استفاده کنیم کلون کورشام KIM-1. من قصد دارم از اینجا به بعد آن را KIM-1 بنامم، بیشتر به این دلیل که از دریافت نامه های عصبانی در این مورد لذت می برم. به شما هشدار داده شده است.

اندازه گیری زمان

KIM-1 مانند سایر ماشین‌های Commodore دارای ساعت جفی نیست.

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

با اتصال باس توسعه به برد Corsham KIM من، جهت خروجی پورت برنامه A تنظیم شده است.

	lda #$ff
	sta $1603
خروجی تمام پورت ها را تنظیم کنید

و سپس، می‌توانیم پین PA0 را با بالا یا پایین کردن آن تغییر دهیم. ما از $FF و $0 برای سادگی استفاده خواهیم کرد.

نکته جانبی: این یک مکان غیر استاندارد برای این پورت است، KIM-1 یا کلون شما احتمالاً آن را در محدوده 1700 دلار دارد. اسناد خود را بررسی کنید

16k در 262 میلی ثانیه حدود 62.5k در ثانیه است. کمی سریعتر از Commodore 64 حتی اگر NTSC Commodore 64 با سرعت ساعت کمی بالاتر (1.023MHz) از KIM ما در اینجا کار می کند.

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

بنابراین کد حلقه ما چیزی شبیه به آن است

         lda #$ff
         sta $1603
         sta $1601 ;technically setting all pins high here
         		   ;could just use #$01


         ldx #255 
         stx tmpx
lp
         jsr copyr
         dec tmpx
         ldx tmpx
         bne lp
         
         lda #$00
         sta $1601


         brk

سپس اگر آن را با اسیلوسکوپ کاوش کنیم، می توانیم موج مربعی 1+ دقیقه را اندازه گیری کنیم.

بنابراین 255 انتقال 16384 بایتی 67 ثانیه طول می کشد. یا حدود 62 هزار در ثانیه.

من اتفاقا برد سربروس 2080 دارم. تا جایی که میدونم مال من تنها سبزه تو دنیاست.

این دارای رم دو پورت است و می‌تواند پردازنده جدید WDC 65c02S را با فرکانس 8 مگاهرتز کاملاً جدید (بله، هنوز هم می‌سازند) اجرا کند. بیایید ببینیم چه نوع نتایجی از آن می گیریم.

باز هم، ما یک مشکل ساعت بدون جیفی داریم، بنابراین من می‌خواهم به انتقال 4 مگابایتی بپرم، زمان ضبط ویدیو را روی آن زمان بگذارم، و بعد از اتمام آن روی صفحه نمایش «انجام شد» نشان داده شود. برخلاف KIM-1، من راه ساده ای برای زمان بندی آن با پین I/O ندارم. این به ما یک ایده خوب از اینکه کجا هستیم به ما می دهد.

حدود 6.29 ثانیه

16384 بایت در 255 بار 6.29 ثانیه طول کشید، بنابراین حداکثر، یک 6502 مدرن با فرکانس 8 مگاهرتز می تواند حدود 664.2k در ثانیه انجام دهد. نه خیلی بد!

مطمئناً، این مجموعه ای جامع از آزمایش ها نبود. اما در دنیای واقعی، یک 6502 می تواند تمام محتویات حافظه یک Commodore 64 را در حدود یک ثانیه از یک مکان به مکان دیگر کپی کند. بسیار قابل احترام، و برای آن زمان بسیار سریع بود.

مطمئناً می‌توانید از کد خود اصلاح‌کننده استفاده کنید و این روال کپی را باز کنید تا عملکرد بهتری را با قیمت انعطاف‌پذیری و مسلماً درک کدنویس‌های اسمبلی معمولی 6502 به دست آورید. این کپی می تواند از یک تا 2 را مدیریت کند16 بایت و هر عدد در بین و همانطور که یوتیوبر مورد علاقه من دوست دارد بگوید “می دانم که می دانم، اما این کار را نکردم. بگذارید ایمیل های عصبانی شروع شوند.”

اگر یک REU در Commodore خود دارید، از نظر تئوری می‌توانید حافظه را با یک بایت در سیکل ساعت تعویض کنید. 1 مگابایت در ثانیه واقعی. من شنیدم که بازی ها مانند سفر سام تا حد زیادی از این ویژگی استفاده کنید

سفر سام سطح اول

من دوست دارم نظرات شما را در مورد نحوه برخورد شما با این موضوع بشنوم. اگر روش هایی را نشان دهید که نتایج به طور چشمگیری بهتر نشان می دهند، امتیاز جایزه.

هر کاری که انجام می دهید، حتما از آن لذت ببرید و اسلایدهای بازاریابی را خیلی جدی نگیرید.



لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.