Як це працює
RAM expansion — невелика й проста карта: вісім мікросхем пам’яті, одна програмована логічна мікросхема й один транзистор. Ця сторінка пояснює, що робить кожна частина. Це стане в пригоді, коли шукаєш несправність або хочеш зробити щось подібне.
Сигнали, які використовує карта
Карта використовує лише частину 64-контактної шини розширення:
| Сигнали | Для чого |
|---|---|
| VCC, GND | Живлення всієї карти |
| A1–A19 | Адреса всередині мікросхеми (512 K комірок) |
| A20–A23 | Який мегабайт: їх читає дешифратор |
| D0–D15 | Дані, 16 біт |
| EXPSEL | Основна плата повідомляє, що процесор звертається до простору розширення |
| UDS, LDS | Який байт 16-бітного слова: парний, непарний чи обидва |
| RW | Читання чи запис |
DTACK, переривання, тактовий сигнал та інше вона не використовує. Зокрема, вона ніколи не повідомляє процесору, що закінчила: це робить основна плата (див. нижче).
Мікросхеми пам’яті
U1–U8 — статична RAM AS6C4008, 512 K × 8 біт кожна: та сама мікросхема, що й на основній платі. Статична RAM зберігає вміст, доки є живлення, без регенерації, і відповідає за 55 нс.
68010 має 16-бітну шину даних, тому мікросхеми працюють парами. У кожній парі одна мікросхема зберігає непарні байти (D0–D7, вибір через LDS), а друга — парні (D8–D15, вибір через UDS). Разом пара дає 1 МБ.
| Пара | Непарний байт (D0–D7) | Парний байт (D8–D15) | Надруковано на платі |
|---|---|---|---|
| 1-й МБ | U1 | U2 | base..base+$FFFFF |
| 2-й МБ | U3 | U4 | base+$100000..base+$1FFFFF |
| 3-й МБ | U5 | U6 | base+$200000..base+$2FFFFF |
| 4-й МБ | U7 | U8 | base+$300000..base+$3FFFFF |
Якщо плата повернута як на мапах посібника зі складання (J1 праворуч), пари йдуть справа наліво: U1 і U2 поруч із J1, U7 і U8 — з лівого краю. У кожній парі непарна мікросхема — у верхньому ряду.
Лінії адреси приходять на мікросхеми в перемішаному порядку, а не A1 на вивід A0 і так далі. Для RAM це не має значення: кожна адреса все одно потрапляє рівно в одну комірку пам’яті, завжди ту саму.
Дешифратор (IC1)
IC1 — програмована логічна мікросхема ATF16V8. Вона має вісім виходів, по одному сигналу вибору на кожну мікросхему пам’яті, і притягує один чи два з них до нуля, коли виконуються всі ці умови:
- EXPSEL у нулі: процесор звертається до простору розширення.
- A20–A23, номер мегабайта, потрапляють у 4 МБ цієї карти з урахуванням бази, заданої JP1–JP3.
- LDS у нулі (для непарної мікросхеми пари) або UDS у нулі (для парної). 16-бітне звернення обирає обидві мікросхеми.
Усе інше ігнорується, тож поза своїми 4 МБ карта мовчить. Налаштування джамперів пояснено в розділі Адресні джампери й карта пам’яті.
Кожен із JP1–JP3, коли на ньому стоїть джампер, підтягує вхід IC1 до 5 V. Без джампера резистор 4K7 (R3–R5) тримає вхід на 0 V.
IC1 має бути запрограмована логікою дешифратора саме цієї карти, перш ніж її встановлювати. Чиста ATF16V8 або запрограмована під щось інше тут нічого корисного не зробить.
Читання й запис (Q1)
Кожна мікросхема пам’яті, крім вибору, має ще два керувальні входи: дозвіл запису й дозвіл виходу. Обидва активні в нулі.
- Дозвіл запису береться прямо з RW: нуль означає запис.
- Дозвіл виходу потребує протилежного: нуль означає читання. Його робить Q1, транзистор 2N3904. Коли RW переходить в одиницю (читання), Q1 відкривається через R2 (100K) і притягує дозвіл виходу до нуля. Коли RW у нулі (запис), Q1 закритий, і R1 (10K) підтягує дозвіл виходу до одиниці.
Тож мікросхема виставляє дані на шину лише тоді, коли її обрано і процесор читає. Саме тому перевернутий Q1 ламає кожне читання: запис відбувається, але назад нічого не приходить.
Чому DTACK дає основна плата
У 68010 кожен цикл шини чекає, доки хтось не відповість сигналом DTACK. Ця карта такої лінії не має. Мікросхеми на 55 нс достатньо швидкі, щоб відповідати без очікування з боку процесора, тож оригінальний проєкт доручає відповідь основній платі: коли JP4 на основній платі замкнений, вона подає DTACK на кожне звернення до простору розширення.
Коли JP4 розімкнений, ніхто не відповідає, сторожовий таймер основної плати завершує цикл помилкою шини, і прошивка не бачить пам’яті. Див. Адресні джампери й карта пам’яті.
Живлення й розв’язка
Кожна мікросхема пам’яті та IC1 має власний конденсатор 100 nF (C1–C9), щоб гасити короткі стрибки струму під час перемикання. C10 і C11 (100 µF) — місцевий запас енергії карти, по одному з кожного кінця J1. Живлення 5 V карта бере з піна 2 шини.
Менше мікросхем: 1, 2 чи 3 МБ
Карта працює й з меншою кількістю мікросхем, тому на платі написано 1/2/3/4MB. Став мікросхеми цілими парами, починаючи з U1 і U2:
| Встановлено | Обсяг карти |
|---|---|
| U1, U2 | 1 МБ |
| U1–U4 | 2 МБ |
| U1–U6 | 3 МБ |
| U1–U8 | 4 МБ |
Дешифратору не треба про це знати: він і далі обирає порожні панельки, але там ніяка мікросхема не виставляє дані, тестове значення не повертається, і прошивка зупиняє підрахунок на першій порожній парі. Прогалина, наприклад U1–U2 і U5–U6 без U3–U4, обриває підрахунок на прогалині.
J1 віддзеркалений
Карта висить деталями донизу на штирях 2×32 основної плати або слота bus board. Оскільки вона перевернута, номери пінів її власного роз’єму J1 віддзеркалені відносно шини: пін 1 карти зустрічається з піном 2 шини (VCC) і так далі. Якщо карта повернута правильно, усе збігається. Якщо не тим боком, 5 V потрапляє на адресну лінію, — саме тому посібник зі складання наполягає на прозвонці перед першим увімкненням.