Tema 2 - 386EX & Sistem Memorie
Tema 2 vrea sa implementati o mapare a unei memorii EPROM/RAM la circuitul 80386EX. Enuntul temei il puteti regasi aici.
Colegii vostrii de anul trecut au implementat un model pentru 80386EX, pe care il puteti folosi pentru a conecta pinii. Modelul necesita Proteus 7.* si trebuie sa-l adaugati in acelas director cu fisierul .DSN
Modelul despre care spuneam il gasiti aici.
Daca doriti sa fiti safe si sa nu crackuiti Proteus 7 (nu va lasa sa salvati modelul) imi submiteti o poza jpg a schemei din Proteus (sa se vada clar ca e Proteus). Oricum Proteus este obligatoriu pentru ca sa folositi modelul de mai sus.
Ca și la tema 1 vom aplica un algoritm pentru repartizarea caracteristicilor temelor bazat pe numarul vostru de ordine așa cum se regăsește în lista de grupe. Numarul vostru incepe de la 2 consecutiv, asa cum imi apare mie in Excell in tabel (1. fiind randul cu titlul coloanelor).
Formula magica se va folosi pentru a obține adresa de început a celor 8KB de memorie care trebuie adăugată la 386EX.
Astfel avem în felul următor:
id_grupa = {332AB=1, 333AB=7, 331AC=13, 332AC=20}
start_addr= (id_grupa)*40KB + (id_student)*8KB
Astfel cei 8KB de memorie trebuie mapați între [start_addr, start_addr + 8KB]
De asemenea daca id_student este par se va mapa un modul de RAM, altfel (impar) un modul de EPROM.
De exemplu:
5. 332AB COCU Ioana va mapa un modul EPROM (5. e impar) la adresa 7*40KB + 5*8KB= 320KB, adică între [320KB, 328KB]
2. 332AB AREANU Mihai Dorel va mapa un modul RAM (2. e par) la adresa 1*40KB + 2*8KB=56KB adică între [56KB, 64KB]
Vă revine vouă modalitatea de a vedea ce biți de adresă se potrivesc. De asemenea trebuie să mapați doar 8KB chiar dacă modulul de memorie permite mai mult (de ex RAM 64KB). Nu trebuie sa ocupati spatiul de adrese al procesorului cu restul memoriei! Să presupunem că veți mapa primii 8KB din modul la acele adrese, deși acest lucru este mai puțin important.
Ce mă interesează și voi puncta este organizarea frumoasă a schemei Proteus + explicațiile din README(ar fi bine să folosiți expresii logice pentru soluționarea conectării, expresii punctate in README).
Vă rog arhivă zip cu fișierele în formatul stabilit la tema1: Popescu_Ionut_332AB_tema2.zip ce va contine:
- schema .DSN si modelul ... ca sa pot deschide usor
- poza cu schema format .jpg in care se se poata vedea frumos legaturile
- neaparat fisier README in care sa explicati implementarea. Nu veti fi punctati fara readme.
Exemplu:
Să presupunem că aveți de mapat de la 816KB la 824KB în primii 8KB din EPROM
816KB = CC000 = 1100 1100 0000 0000 0000
824KB = CE000 - 1 = 1100 1101 1111 1111 1111
A19 și A18 sunt constant 1, A17 A16 0, iar A15 A14 = 1. A13=0
Practic Chip Select va fi CS=A19 and A18 and !A17 and !A16 and A15 and A14 and !A13
Biții mai nesemnificativi A12-A0 (2^13 = 8KB) jonglează și pot fi mapați direct la biții A12-A0 ai EPROM pentru a cupla primii 8KB din memorie. Dacă vroiam să-i legăm începând cu 16BK din memoria EPROM trebuia să punem bitul A15 al memoriei pe 1, cu alte cuvinte să legăm CS la A15 din memorie.
Dar dacă ce trebuia să mapăm nu era la adrese multiplu de 8KB, de exemplu trebuia să mapăm
CC800-CE800. Vă las pe voi să vedeți ce să întâmplă, ideea că o mapare directă nu mai merge decât pentru primii 11 biți pentru restul trebuie să aveți o altă logică.
Așa vreau să-mi prezentați în README clar pentru a vedea maparea memoriei.
Pentru a vă testa maparea aveți în Proteus 7 un 8086 pe care îl puteți folosi + elementele alea 2 de memorie. Datele probabil că le veți lega tot la adrese, și ca să testați folosiți un program asm simplu, adăugat la simulare de exemplu
mov ax, [0xaddr+ceva]
Aveti grija cum mapati accesul pe 16/8 biti, deosebirea dintre
mov EAX. 0xaddr
mox AX, 0xaddr
mov AH, 0xaddr
vedeti ca manualul va explica ca exista un pin care ii spune procesorului ca accesul la memorie (ce se va intoare pe magistrala de date) se face pe 8 sau pe 16 biti.