תוכן עניינים:

6502 מחשב מינימלי (עם Arduino MEGA) חלק 3: 7 שלבים
6502 מחשב מינימלי (עם Arduino MEGA) חלק 3: 7 שלבים

וִידֵאוֹ: 6502 מחשב מינימלי (עם Arduino MEGA) חלק 3: 7 שלבים

וִידֵאוֹ: 6502 מחשב מינימלי (עם Arduino MEGA) חלק 3: 7 שלבים
וִידֵאוֹ: Asus Zenbook Fold | מה עושים עם לפטופ מתקפל? 2024, נוֹבֶמבֶּר
Anonim
6502 מחשב מינימלי (עם Arduino MEGA) חלק 3
6502 מחשב מינימלי (עם Arduino MEGA) חלק 3

בהמשך הלאה, הוספתי כעת תפס אוקטל, 8 נוריות מלבניות ומערך נגדים של 220 אוהם ללוח הראשי. יש גם מגשר בין הסיכה המשותפת למערך, כך שניתן לכבות את הלדים. שער 74HC00 NAND הוחלף בשער 78LS08 AND, גם החיווט לשער שונה. פירושו של AND וה- 6522 ממוקם כעת ב- $ 6000 במקום ב- $ E000.

יש גם סיכה לחיבור של שעון חיצוני להנעת 6502. עם חיבור זה, אין צורך ב- MEGA לספק אות שעון. ה- MEGA עדיין עוקב אחר המתרחש עם המעבד כמו בעבר.

השתמשתי ב 20 סיכות 74HC373 לתפס כי היו לי כמה. זה היה בסדר כשהוא על לוח הלחם, אך 74HC573 תואם אוטובוס והיה חוסך המון חיווט. UCN5801A המהווה IC 22 פינים עשוי להיחשב גם במעגל, אך החיווט יהיה מעט שונה.

הנורית העליונה והכתומה העליונה היא אינדיקטור כוח והאדום השמאלי התחתון מציין מתי מתבצעת כתיבה. האחרון יהיה חסר משמעות אם הלוח יופעל במהירויות גבוהות יותר.

המעגל שהשתנה נמצא למעלה (עם ה- 74HC573).

שלב 1: תוכניות הדגמה

תוכניות הפגנה
תוכניות הפגנה

שתי תוכניות הדגמה פשוטות כלולות בצג 6502 והקוד המפורק שלהן נמצא כאן.

תוכנית זו טוענת 1 לרשום 6502 A ומאחסנת אותו בתפס. לאחר מכן הוא מוסיף 1 לרשם A ומאחסן אותו בתפס. ואז הוא קופץ אחורה ל $ 1005 והתהליך חוזר על עצמו לנצח.

* = 1000

1000 A9 01 LDA #$ 01 1002 8D 00 41 STA $ 4100 1005 69 01 ADC #$ 01 1007 8D 00 41 STA $ 4100 100A 4C 05 10 JMP $ 1005 100D. END

תוכנית זו מגדירה תחילה את ה- DDR של יציאת B 6522 לפלט. לאחר מכן הוא מאחסן 55 $ (B01010101) בנמל, כמו גם את הבריח. רשם A מסתובב לאחר מכן צעד אחד ימינה ומחזיק כעת $ AA (B10101010). זה נשמר שוב ביציאה B ובתפס. התוכנית קופצת בחזרה ל $ 1005 וממשיכה לנצח.

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA #$ 55 1007 38 SEC 1008 8D 00 60 STA $ 6000 100B 8D 00 41 STA $ 4100 100E 6A ROR A 100F 8D 00 60 STA $ 6000 1012 8D 00 41 STA $ 4100 1015 4C 05 10 JMP $ 1005 1018. END

העין החדה מביניכם עשויה להבחין כי נוריות הלד הצבעוניות מציגות דפוס שונה מזה של הירוקות. הסיבה לכך היא שהמנחה המשותפת מחוברת ל -5 וולט על הצבעים והמשותפת על הירוקים מחוברת לקרקע.

שנה את שורת הקוד הזו לתוכנית 2 או לתוכנית 3.

setDataPins (program3 [offset]);

6502 Assembler ו- Disassembler הם כלים שימושיים שיעזרו לך לקודד את התוכניות שלך.

שלב 2: הוספת EEPROM

הוספת EEPROM
הוספת EEPROM
הוספת EEPROM
הוספת EEPROM
הוספת EEPROM
הוספת EEPROM

ללוח EEPROM השתמשתי בלוח רצועות בגודל 950 x 650 מ"מ ובסיכות כותרת זכר 19 מ"מ כדי לאפשר ללוח לנקות את זה שמתחתיו. לוח זה מתחבר ללוח 6502 שמתחת. ה- EEPROM הוא ATMEL 28C256 הכולל 28 סיכות ומכיל 32k x 8 סיביות זיכרון. זה יותר ממספיק לתוכניות הקטנות המשמשות כיום.

לא עשיתי תרשים מעגלים ללוח זה, אך הוא די פשוט כיצד הוא מתחבר ללוח 6502 למטה. שבבי EEPROM אלה אינם ידידותיים לאוטובוסים ולכן יש לחבר אותם לסיכות הבודדות, ומכאן כל "הספגטי הירוק והלבן". פתרתי את בעיית הגישור בלוח הקודם על ידי חיווט קווי הנתונים יחד בחלק התחתון של הלוח.

14 סיכות הכתובת של EEPROM מתחברות לסיכות המתאימות בצד שמאל (חוטים ירוקים) וסיכות קלט/פלט לסיכות הנתונים מימין (חוטים לבנים). סיכה 27 (WE) מחוברת לסיכה 28 (5v), סיכה 22 (OE) מחוברת לקרקע וסיכה 20 (CE) מחוברת לשער NAND. 2 הכניסות של שער NAND מחוברות ל- A15 על הכבל לוח ראשי. המשמעות היא שכאשר סיכה זו עולה גבוה, שער NAND נותן אות נמוך לסיכת CE של ה- EEPROM מה שהופך אותו לפעיל. עם הגדרה זו המשמעות היא שניתן לקרוא את ה- EEPROM רק על ידי ה- 6502.

מכיוון ש- EEPROM חי ב- 32k העליון במפת הזיכרון, המשמעות היא ש- $ FFFC ו- $ FFFD יכולים להחזיק את כתובת ההתחלה של ה- 6502 לאחר איפוס. מכיוון של- 6522 כתובותיה נעות בין $ 6000 ל- $ 600F והתפס עומד על $ 4100, הוא מפסיק התנגשויות בזיכרון.

ניתן לכתוב את וקטור ה- NMI ($ FFFA ו- $ FFFB) ווקטור BRK / IRQ ($ FFFE an $ FFFF) באותו אופן.

שלב 3: תכנות ה- EEPROM

תכנות ה- EEPROM
תכנות ה- EEPROM
תכנות ה- EEPROM
תכנות ה- EEPROM

כדי לאחסן תוכנית ב- EEPROM, היא צריכה מתכנת. הכנתי אחד מלוח רצועות, Arduino Pro Mini, זוג 74HC595 ושקע ZIF. במקור, המתכנת נוצר עבור AT28C16 עם פחות שורות כתובת מאשר AT28C256 ולכן היה צריך לשנות אותו.

תרשים המעגל מראה כיצד לחבר את שני ה- EEPROM הללו. מהתמונה לא ברור ששני 595 השבבים הפוכים ולא כפי שמוצג בתרשים. סיכות 1 עד 7 מתוך 595/1 עולות בקנה אחד עם A1 עד A7 של ה- EEPROM ללא קשר לשימוש. זה חוסך 7 חוטי חיבור. הלוח נראה כעת מעט הדוק וזאת מכיוון שבמקור השתמשתי בשקע DIL 24 פינים שהוחלף כעת בשקע ה- ZIF בעל 28 פינים הרבה יותר גדול.

כלולה תוכנית שעובדת עם הלוח שלי. התוכנית תעבוד עם כל Arduino ו- 595s במעגל כפי שמוצג. בחרתי ב- Mini Pro 5v מכיוון שהוא קומפקטי וזול מספיק להשאיר אותו במערך.

שלב 4: תוכניות EEPROM

תוכניות EEPROM
תוכניות EEPROM

ישנן שלוש תוכניות פשוטות במתכנת EEPROM. כדי להשתמש בהם, פשוט בטל את התגובה של השורה שבה אתה רוצה להשתמש.

// קרא מנמל A של 6522

// נתוני בתים const = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

התוכנית מציגה זריקת זיכרון כאשר היא מסתיימת. החלק של התוכנית שלהלן נותן לך שליטה מלאה על מה שאתה רוצה לכתוב או למחוק, מגדיר $ FFFC & $ FFFD ולאחר מכן מציג את התוכן של טווח נתון. פשוט בטל תגובה או שנה את הפרמטרים לפי הצורך שלך. ניתן להזין את הכתובות גם בפורמט עשרוני.

// מחק EEPROM (422, 930, 0x41); // השתמש כדי למחוק את EEPROM כולו או חלק ממנו - התחל, סיים, בייט

Serial.println ("תכנות EEPROM"); כמות = נתוני_תוכנית (0x1000); writeEEPROM (0x7ffc, 0x00); // הגדר $ FFFC עבור 6502 writeEEPROM (0x7ffd, 0x90); // הגדר $ FFFD עבור 6502 // writeEEPROM (0x1000, 0xA9); // כתוב בתים אחד של נתונים Serial.println ("בוצע"); String outline = "כתוב" + כמות (מחרוזת) + "בתים"; Serial.println (מתאר); Serial.println ("קריאת EEPROM"); printContents (0x0000, 0x112f); // הגדר טווח להצגת printContents (0x7ff0, 0x7fff); // קורא 16 בתים אחרונים ב- EEPROM

פלט מקוצר מהתוכנית נמצא למעלה.

שלב 5: הפעלת ה- 6502 מה- EEPROM

הפעלת 6502 מה- EEPROM
הפעלת 6502 מה- EEPROM
הפעלת 6502 מה- EEPROM
הפעלת 6502 מה- EEPROM
הפעלת 6502 מה- EEPROM
הפעלת 6502 מה- EEPROM

כעת ניתן להכניס את ה- EEPROM המתוכנת ללוח שלו והחזיר הזה חוזר ללוח 6502 הראשי שחזר על הגב ל- MEGA. התמונות בצד ולמעלה למעלה מראות כיצד הכל משתלב יחד.

6502 יכול כעת לקרוא את וקטור ההתחלה מ- $ FFFC ו- $ FFFD (שהם 9000 $) ולאחר מכן לקפוץ לתוכנית המאוחסנת שם. ה- MEGA עדיין מספק את אות השעון ויש לשנות את התוכנית שלו כדי לספק רק את אות השעון ולפקח על 6502. ניתנת תוכנית שונה לשם כך.

תמונת הריצה מציגה תוכנית זו פועלת.

9000 LDA #00 $ A9 00

9002 STA $ 6003 8D 03 60 9005 LDA #$ FF A9 FF 9007 STA $ 6002 8D 02 60 900A LDA $ 6001 AD 01 60 900D STA $ 6000 8D 00 60 9010 EOR #$ FF 49 FF 9012 STA $ 4100 8D 00 41 9015 JMP $ 900A 4C 0A 90

המתגים מחוברים ליציאה A והתוכנית מציגה את הערך שהיא קוראת ביציאה B וב- 74HC373 (שמוסתרת כרגע). המתגים מחוברים לקרקע והנוריות מחוברות ל- 5v. ה- EOR #$ FF מתקן את הבעיה של הבריח והיציאה B המציגים דפוסים שונים על ידי הפעלת הסיביות לפני הכתיבה לתפס.

שלב 6: איתות זמן חיצוני

אות זמן חיצוני
אות זמן חיצוני

אם מוחל אות שעון על הסיכה בראש הלוח, 6502 יכול כעת לפעול ללא תלות ב- MEGA. כמובן שהוא צריך גם ספק כוח. ניסיתי עם שעונים שונים ואפילו הפעלתי את 6502 במהירות 1MHz עם מתנד קריסטל. ה- MEGA לא יכול לעמוד בקצב מהירויות מהירות יותר, ולכן יש להסירו.

ניסיתי גם את הפלט מטיימר 555 אבל זה לא עובד. אני חושב שזה יכול להיות בגלל שזה לא גל מרובע? כאשר הוא מחובר לאחד היציאות CD4017, הוא אכן הניע את ה- 6502. תיקנתי באחת הערכות למעלה כדי לנסות לקבל אות שעון.

אני עדיין בוחן שיטות שונות לקבלת אות שעון.

שלב 7: סיכום

הראיתי כיצד לבנות כמה מעגלים מורכבים ולקבל "מחשב" פשוט מאוד לעבודה עם כמות מינימלית של חלקים. אמנם, המחשב אינו יכול לעשות הרבה כעת או שהוא עשוי לעשות זאת בעתיד.

בתחילת שנות ה -80, עם ה- VIC20 שלי, נהגתי לתהות על המכונה המדהימה ואין לי מושג ראשון כיצד להתחיל לחבר אחד. הזמנים עברו הלאה וכך גם הטכנולוגיה, אבל עדיין נחמד לחזור ליסודות ולהתגאות במשהו שבנית מאפס.

כדי להמשיך ולפתח את המחשב הזה, אני מתכוון לשים 2k של SRAM במחיר של $ 0000 עד $ 2047 ולהוסיף מתנד של 1 מגהרץ. כנראה יוסיף משהו כמו CD4040 (מונה / מפצל בינארי 12 שלבים) כדי שאוכל לנצל מהירויות שעון שונות.

אולי אפילו להוסיף צג LCD כדי לתת פלט טקסט ולא רק אורות מהבהבים. כמו כן יהיה צורך לשנות את מתכנת EEPROM כדי להתמודד עם התוכניות הגדולות הדרושות להפעלת צג LCD.

למרות שה- MEGA הופך להיות מיותר להפעלת ה- 6502, הוא עדיין שימושי לניפוי באגים של קוד המכונה. כפי שמישהו יודע, קוד המכונה תמיד מכיל באגים!

מוּמלָץ: