Tema 3 - Robozzle 2.0 EV/Z3
Tema 3 o veti da Miercuri 9 Mai la laborator. Toata lumea sa fie prezenta!!!! De asemenea arhiva trebuie uploadata si pe site pana pe 9 Mai. Va amintesc ca proiectul se va preda pe 16 mai.
Dupa cum puteti observa din titlu nu ati scapat chiar asa usor. Ce aveti de facut este sa portati codul de ASM scris pentru puzzle-ul assignat voua la Tema1 pentru emu 8086 pe template-ul C de OpenWatcom folosind C si inline ASM.
Scopul temei 3 este sa intelegeti ca codul ASM pe care l-ati invatat in tema 1 nu e nefolositor. Ne dorim o portare/integrare a acestuia in cadrul template-ului C folosit la laborator.
Ce trebuie sa faceti: ati vazut ca in cadrul rezolvarii puzzle-ului asignat voua am impus folosirea unor proceduri pentru emularea miscarilor (acele F1 staga dreapta etc).... Aceste proceduri scrise in asm trebuie integrate cu cod C... De exemplu sa presupunem ca in rezolvarea temei voastra aveati procedura asm
PROC stanga
MOV robot, AX
....
ENDP
ce primea ca parametru directia in registrul AX. Voi trebuie sa migrati codul vostru intr-o procedura C pastrand cat mai mult din codul ASM. De exemplu procedura de mai sus va devine in codul vostru C:
void stanga(int pos) {
__asm {
MOV AX, pos
MOV robot, AX
....
}
}
Pentru a testa functionalitatea implementarii (portarii) am pus la dispozitie un program .Net C# ce va fi rulat in masina Vista (windows-ul de pe calculatoarele de la laborator, nu masina virtuala). Acest program va primi prin seriala comenzi de la placa de EV/Z3 pe care ruleaza codul vostru de robozzle sub forma:
3bytes: culoare rand coloana - va afisa o casuta de culoare la randul,coloana, unde culoare e formatul folosit in cadrul desenarii hartii (xX, bB, rR...)
4bytes: 'Z' rand coloana culoare - va afisa robozzle pe rand,coloana asezat peste o casuta de culoare (aceeasi ca cea de sus) ... cand robotul se mista prin harta.
Pentru a va usura munca va pun la dispozitie urmatoarele arhive:
- program .Net pentru primire de comenzi : arhiva
- template EV/Z3 modificat pentru a desena harta demo din Tema1:arhiva. Practic template-ul robozzle pus la dispozitie in tema1 a fost portat in C+inline assembly - cum ar treb sa faceti si voi cu toata tema voastra 1. Template-ul e facut special ca sa puteti sa faceti debug fara sa aveti seriala, pur si simplu faceti make targeti si dati debug si puneti un breakpoint in functia dbgSerialWrite pentru a vedea cum e construit bufferul ce se trimite. Btw folositi aceasta metoda si pentru a usura munca la proiect pentru partea software de pe placa de laborator.
Pasi testare tema3 laborator:
1) Urcati arhiva in masina virtuala, dezahivati in Workspace-ul vostru - compilati
2) Dezasamblati SMP.exe creat pentru a vedea care e offsetul pe care treb sa-l sariti - o sa se schimbe ca aveti mult cod(remember ca code offset e in hexa in utilizatarul ModZ3 de incarcat e decimal)
3) Urcati programul tema3 pe placa de Z3 folosind utilitarul ModZ3 (Ld_SER pe placa apoi dati dati sa-l incarce!!!)
4) Dupa ce a fost incarcat INCHIDETI ModZ3
5) Minimizati masina virtuala si deschideti din vista programul .NET ce va desena harta, robozzle ... cel ce asteapta de la placa Z3 comenzi pe seriala - nu ar treb sa vedeti nici un MessageBox de erori ca nu a putut deschide seriala
6) Acum puteti sa rulati programul de pe placa Z3 : GO 0080:0000 + Chg/Ret
7) Pe programul .Net in Vista va incepe sa deseneze harta si sa miste robotul pentru a face aceeasi simulare ca in tema1. Daca vedeti ca se misca prea rapid intre mesaje succesive pe seriala folositi functia kIo.Wait(milisec)
FIECARE STUDENT TREBUIE SA PORTEZE PROPIA REZOLVARE DIN TEMA1 (NU O REZOLVARE NOUA A ACELUIAS PUZZLE)
Ce trebuie sa-mi predati. O arhiva Ionut_Popa_332AB.zip ce va contine:
- cele 2 jpg-uri din tema 1
- rezolvarea in ASM pentru emu8086 din tema1
- template-ul nou OW folosit pentru portarea ASM-ului din tema1
Notare:
- verificarea corectitudinii temei se va face la laborator (5' pe student va rog sa fiti pregatiti cu jpg si template-ul functional)
- nota finala se va face dupa ce ma uit peste cum ati portat din arhiva submisa pe site.