תוכן עניינים:
- שלב 1: תוכניות הדגמה
- שלב 2: הוספת EEPROM
- שלב 3: תכנות ה- EEPROM
- שלב 4: תוכניות EEPROM
- שלב 5: הפעלת ה- 6502 מה- EEPROM
- שלב 6: איתות זמן חיצוני
- שלב 7: סיכום
וִידֵאוֹ: 6502 מחשב מינימלי (עם Arduino MEGA) חלק 3: 7 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
בהמשך הלאה, הוספתי כעת תפס אוקטל, 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 השתמשתי בלוח רצועות בגודל 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, היא צריכה מתכנת. הכנתי אחד מלוח רצועות, 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. כדי להשתמש בהם, פשוט בטל את התגובה של השורה שבה אתה רוצה להשתמש.
// קרא מנמל 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
כעת ניתן להכניס את ה- 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, הוא עדיין שימושי לניפוי באגים של קוד המכונה. כפי שמישהו יודע, קוד המכונה תמיד מכיל באגים!
מוּמלָץ:
6502 & 6522 מחשב מינימלי (עם Arduino MEGA) חלק 2: 4 שלבים
6502 & 6522 מחשב מינימלי (עם Arduino MEGA) חלק 2: בהמשך להוראה הקודמת שלי, שמתי כעת את 6502 ללוח רצועות והוספתי מתאם ממשק צדדי 6522 (VIA). שוב, אני משתמש בגרסת WDC של 6522, מכיוון שהיא התאמה מושלמת ל- 6502 שלהם. לא רק שה- c
6502 מחשב מינימלי (עם Arduino MEGA) חלק 1: 7 שלבים
6502 מחשב מינימלי (עם Arduino MEGA) חלק 1: המעבד 6502 הופיע לראשונה בשנת 1975 ותוכנן על ידי צוות קטן בראשות צ'אק פדל לטכנולוגיית MOS. אז הוא שימש בקונסולות וידאו ובמחשבים ביתיים כולל Atari, Apple II, Nintendo Entertainment System, BBC Micr
בקר מחשב Groove Coaster [חלק 1: חומרת הגברה]: 9 שלבים
בקר מחשב Groove Coaster [חלק 1: חומרת בוסטר]: עבודה על בקר מחשב עבור המהדורה הקרובה של מחשב Groove Coaster ב- Steam להלן הדרכה קטנה כיצד להרכיב את החומרה עבור מגבר מבוסס מקל ארקייד
מאוורר כוח USB מקורר, רכזת USB מובנית, תיק מחשב נייד חלק 1: 6 שלבים
מאוורר כוח USB מקורר, רכזת USB מובנית, תיק מחשב נייד חלק 1: תיקי מחשב נייד יקרים. הזולים הם שטויות מוחלטות. אלה הגונים בקושי מתחילים ב -69.99 $ ואני מתקשה להוציא את הכסף הזה כשזה לא בדיוק מה שאני רוצה מלכתחילה, אז החלטתי לעשות את זה בעצמי ולראות מה אני
כיצד לחרוט חלון מחשב (חלק 1): 6 שלבים
כיצד לחרוט חלון מחשב (חלק 1): ראיתי מקרים רבים עם החלונות הצלולים החקוקים. החלטתי לחרוט את האכסדרות שלי כדי לתת להן מראה חדש. זה לא קשה כמו שזה נראה פשוט קח את הזמן ותקבל תוצאות טובות. ניתן למצוא הוראות חלון אחרות למקרה ב- Instru