desenvolupament d’un programa terminal pel ìinstructor...

132
Desenvolupament d’un Programa Terminal Pel ìInstructor 68000 (TM-683 de PROMAX) AUTOR: Joan Cabré Olivé. DIRECTORS: José Luís Ramírez, Enric Cantó. DATA: Setembre / 2002.

Upload: others

Post on 28-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

Desenvolupament d’un Programa Terminal PelìInstructor 68000 (TM-683 de PROMAX)

AUTOR: Joan Cabré Olivé.DIRECTORS: José Luís Ramírez, Enric Cantó.

DATA: Setembre / 2002.

Page 2: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

2

ÍNDEX

1. INTRODUCCIÓ. 3

1.1. OBJECTIUS.............................................................................................................................. 41.2. ANTECEDENTS ...................................................................................................................... 41.3. PER QUÈ BORLAND C++ BUILDER?.................................................................................. 5

2. DESCRIPCIÓ GENERAL. 6

2.1. DESCRIPCIÓ DE L’EMULADOR MICROINSTRUCTOR TM-683 DE PROMAX............ 72.1.1. Descripció del Processador............................................................................................ 72.1.2. Descripció de la Memòria.............................................................................................. 82.1.3. Altres Perifèrics ............................................................................................................. 9

2.2. DESCRIPCIÓ DEL PROGRAMA TERMINAL MON68K..................................................... 102.1.1. Funcions de Manipulació de Memòria........................................................................... 102.1.2. Funcions de Manipulació de Registres .......................................................................... 122.1.3. Funcions de Manipulació d’ Execució........................................................................... 132.1.4. Funcions de Manipulació de Breaks (punts de ruptura)................................................. 142.1.5. Funcions de Manipulació de Fitxers .............................................................................. 152.1.6. Funcions Pròpies del Sistema ........................................................................................ 15

2.3. DESCRIPCIÓ DEL PROGRAMA INTERFACE ITF68K....................................................... 182.1.1. Punts de Millora i Mancances........................................................................................ 21

3. IMPLEMENTACIÓ I ESTRUCTURACIÓ DEL PROGRAMA. 23

3.1. CLASSE M68K ........................................................................................................................ 273.2. CLASSE COMUNICACIÓ ...................................................................................................... 313.3. CLASSE OPCIONSCOMUNICACIÓ ..................................................................................... 353.4. CLASSE MONITOR ................................................................................................................ 353.5. CLASSE EXECUCIÓ............................................................................................................... 373.6. CLASSE TBREAKPOINT / BREAKS..................................................................................... 393.7. CLASSE EDITOR .................................................................................................................... 413.8. CLASSES PASOSBP / TRANSMETREFITXER / REBREFITXER / SOBRE ...................... 423.9. CLASSE FITXER..................................................................................................................... 443.10. CLASSE MENU ..................................................................................................................... 45

4. CONCLUSIONS. 46

4.1. OBJECTIUS ASSOLITS .......................................................................................................... 464.1.1. Comparació de Forma amb Itf68k ................................................................................. 474.1.2. Comparació de Funcionament amb Itf68k..................................................................... 48

4.2. PROBLEMES I SOLUCIONS ADOPTADES ......................................................................... 494.3. LIMITACIONS I POSSIBLES MILLORES ............................................................................ 524.4. VALORACIÓ PERSONAL...................................................................................................... 54

5. BIBLIOGRAFIA. 56

ANNEXES

ANNEX I. MANUAL D’USUARI

Page 3: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

3

1 Introducció

Aquest projecte sorgeix de la necessitat de millorar l’actual software utilitzat endeterminades assignatures dels diferents ensenyaments de la Universitat Rovira i Virgili.Aquestes assignatures fan referència, més concretament, a les pràctiques de SistemesDigitals II pertanyent a l’ensenyament d’Enginyeria Tècnica Industrial en ElectrònicaIndustrial i a l’assignatura de Sistemes Electrònics Digitals pertanyent a l’ensenyamentd’Enginyeria en Automàtica i Electrònica Industrial.

Aquests assignatures pretenen que l’alumne adquireixi coneixements en sistemesdigitals i més concretament els basats en sistemes amb microprocessadors, tant en la partde hardware, com la de software que fa referència a l’ús del llenguatge ensamblador. Enambdues assignatures, el microinstructor 68000 “TM-683” i el seu software, ajuden acomplementar aquests coneixements mitjançant la realització d’unes pràctiques per part del’alumne.

La placa entrenadora TM-683 és una placa composada per un processador de lafamília del 68000, memòria, perifèrics d’entrada/sortida (2 ports sèrie, 2 Via’s,...) i tots elscircuits d’alimentació i control per tal d’enllaçar aquests elements. Les pràctiquesd’aquestes assignatures consisteixen en la creació de programes en ensamblador per part del’alumne, els quals es transferiran al TM-6800 per realitzar alguna tasca determinada (p.e.fer càlculs, operacions de memòria, control dels perifèrics...).

En l’actualitat per aquest procés, s’utilitzen quatre programes com a eines de treball:El primer i segon programa serveixeb per ensamblar i linkar un arxiu de text que conté elcodi en llenguatge ensamblador, que es traduirà a instruccions que el 68000 podràinterpretar. La tercera eina “opcional”, però realment molt útil, és el simulador, que serveixper comprovar si el codi funciona correctament. Tot i que presenta limitacions, tél’avantatge que no necessita l’ús del microinstructor. La quarta eina és la que s’encarregade la comunicació bidireccional de l’entrenador TM-683 amb un PC. És la que permettransferir/rebre el codi ensamblat, actuar/visualitzar les accions que s’estan duent a terme idepurar el codi mitjançant les diferents eines d’execució.

Actualment els tres primers programes comentats s’han renovat profundament per talde facilitar la funcionalitat de cara a l’alumne i també adaptant-se a les noves tecnologies ia les prestacions que aquestes ofereixen. El quart programa és l’objecte d’aquest projecteanomenat WinItf68k que pretén millorar les limitacions de l’anterior programa Itf68K.

Page 4: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

4

1.1 Objectius

L’objectiu d’aquest projecte és el desenvolupament d’un programa terminal pelmicroinstructor. Aquesta aplicació informàtica s’utilitzarà com a suport a docència ipermetrà el control de la placa TM-683 de Promax des d’un ordenador personal, mitjançantcomunicació sèrie RS-232. Ambdues eines de treball, el microinstructor i el software queaquí es presenta, permetran a l’usuari l’execució i depuració de programes realitzats peraquest.

Una de les característiques més importants del programa, el qual s’ha anomenatWinItf68k, és el funcionament sota el sistemes operatius Windows. L’entorn gràfic iamigable de Windows permetrà centralitzar i visualitzar tota la informació més importantque s’està duent a terme en l’emulador en una mateixa pantalla. D’aquesta manera l’usuaridisposarà de totes les dades necessàries per saber com s’està duent a terme l’execució delseu programa per poder realitzar la depuració corresponent.

1.2 Antecedents

La finalitat d’aquest programa està encarada a les necessitats per part de docència dela Universitat Rovira i Virgili. Actualment, ja hi ha un software anomenat Itf68k realitzatper la Universitat Politècnica de Catalunya i Promax que data de l’any 1990, que és el ques’utilitza per realitzar les pràctiques de les corresponent assignatures. Aquest programa estàrealitzat amb el llenguatge de programació C i es va dissenyar pel sistema operatiu MS-DOS. Aquest és un software molt correcte, però respon a les limitacions que li aporta elsistema operatiu pel qual va ser dissenyat. Actualment, aquesta aplicació no funciona deltot correctament sota els sistemes operatius Windows (i menys amb la saga NT/XP), on esdesaprofiten totes les possibilitats que aquest com entorn gràfic i multitasca li permet.

El Itf68k, tot i que aquest disposa d’un entorn gràfic (de MS-DOS) i de menús,presenta una funcionalitat molt pobre i poc clara a l’hora de realitzar les visualitzacions iaccions de l’emulador. Aquest disposa d’una pantalla principal i un menú d’opcions, lesquals donen lloc a altres submenús i/o a l’execució de les instruccions desitjades. Aquestmenú permet, en altres coses: la manipulació dels registres, la manipulació de la memòriaincloent desensamblat d’instruccions de programa i un seguit d’opcions de execució comsón: l’execució pas a pas, sense traça, l’execució amb punt de ruptura,... El principaldesavantatge de l’Itf68k és la presentació de les dades a l’usuari: Aquestes es presentenamb una única pantalla principal, de manera que no és poden visualitzar diferentscomandes alhora ja que cada comanda implica la seva visualització en la pantalla (i unanova comanda implica reemplaçar la visualització de l’anterior comanda). A més a més, hiha determinades comandes d’execució i sobretot de punts de ruptura que són molt confusesi poc funcionals.

Així doncs, l’objectiu principal del WinItf68k és suplir les mancances comentadesanteriorment. Tot i que pugui semblar que WinItf68k s’ha realitzat a partir de

Page 5: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

5

modificacions del programa Itf68k, la veritat és que s’ha fet des de zero ja que no esdisposava del codi font d’aquest i perque les comunicacions sèrie de MS-DOS i Windowsno s’assemblen en res.

El que si que s’ha pres de base per realitzar el programa han estat les comandes delprograma Mon68k. Aquest programa Monitor és el que s’executa en el microinstructor i esl’interlocutor del programa Itf68k. De manera que quan donem l’ordre al Itf68k perrealitzar una comanda determinada, el Itf68k envia pel port sèrie aquesta comanda, elprograma Mon68k la rep i és l’encarregat de respondre-la.

1.3 Perquè Borland C++ Builder?

S’ha escollit un llenguatge de programació C++ per diferents motius:

Perquè és un llenguatge d’alt nivell molt potent que permet aproximar-se a funcionsde molt baix nivell, com són punters i el tractament de dades a nivell de bit. Aquestesfuncionalitat a baix nivell permet l’execució més ràpida dels programes, estalvi de codi ide recursos del sistema, i a més, dona llibertat i més possibilitats al programador.

La segona raó recau en que el programa monitor Mon68k i el Itf68k han estatrealitzats amb aquest llenguatge. Llavors la tria ha estat per evitar incompatibilitats decomunicació i donar possibilitat a aprofitar funcions realitzades amb aquests programes encas d’aconseguir el codi font, cosa que finalment no ha estat així.

Un cop escollit el tipus de llenguatge, la necessitat de dissenyar una aplicació perWindows limita bàsicament a dues les solucions possibles: La primera correspon al VisualC++ de Microsoft i la segona el C++ Builder de Borland que són els llenguatges de C++més utilitzats. L’opció del Visual C++ de Microsoft té l’avantatge que hi ha més facilitat al’hora de trobar informació referent al seu aprenentatge i desenvolupament d’aplicacions.Borland C++ Builder és menys famós per no ser de Microsoft, la qual cosa fa que siguimés difícil trobar informació d’aquest. No obstant, Borland C++ Builder presenta unentorn de component visuals més potents, més funcionals i més simples. Per aquest motiu,pels amplis coneixements d’un dels directors del projecte sobre aquest llenguatge i perdisposar d’aquest software, el llenguatge de programació escollit per realitzar l’aplicacióha estat el Borland C++ Builder i més concretament la versió 3.0 enterprise.

Page 6: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

6

2 Descripció General

En aquest apartat es descriurà, de manera general, el microinstructor TM-683.Existeix el manual tècnic d’aquest microinstructor (Manual TM-683) de manera que el queaquí es descriurà serà l’essencial per donar una idea d’aquesta placa i poder entendre lesopcions que el programa WinItf68k ha de realitzar sobre aquesta.

Després de la descripció del microinstructor es passarà a la descripció del programaMon68k que s’executa contínuament a l’entrenador (placa TM.-683). Pot semblar que ladescripció d’aquest programa estigui fora de context vers el tema central d’aquest projecte,però no és així. Aquest programa i les funcions d’aquest són la base de la nova aplicació.

Realment qui s’encarrega de comunicar amb el microinstructor és el programamonitor. El programa Itf68k es comunica pel port sèrie amb el programa monitor delmicroinstructor, de manera que qualsevol comanda del Itf68k es redueix a enviar caràctersque correspon a una funció (o comanda) del programa monitor pel port sèrie. El programamonitor reconeix l’ordre, realitza les operacions internes pertinents, i contesta al programaItf68k el resultat de la comanda enviada. Llavors el programa Itf68k agafa aquestes dades iles mostra de la manera més agradable possible a l’usuari.

És per això que l’aplicació informàtica resultant d’aquest projecte (WinITF68K), hade funcionar de la mateixa manera i basant-se amb aquest programa monitor que, demoment, no es modificarà.

Posteriorment a la descripció del programa monitor, es descriurà el programa Itf68k.L’objectiu d’aquesta descripció no es entrar amb totes les possibilitats funcionals d’aquestssoftware ja que són les mateixes que mostra el programa monitor, sinó que és descriurà elmode de funcionament del programa a nivell gràfic i visual de cara a l’usuari. En definitivaés veure els motius que han dut a millorar aquest programa.

Page 7: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

7

2.1 Descripció de l’emulador MicroInstructor TM-683 de PROMAX

En aquest apartat es realitzarà la descripció general del hardware TM-683. Aquestconsisteix en una placa de circuit imprès que s’ha protegit amb una caixa tancada des d’ons’han deixat accessibles els botons de engegar, reset i abort, i tot el que són connectorsdestinats a perifèrics externs.

La placa consta d’un sistema al voltant del microprocessador 68000. Aquest escompon d’aquest microprocessador, de memòria, de busos de dades i d’adreces, de portsde comunicació per a perifèrics i tots els circuits de control i d’alimentació per enllaçar ialimentar tots aquests.

2.1.1 Descripció del processador

El 68000 es mostra amb un encapsulat de 64 pins. Poseeix dos blocs de registres de32 bits, un de dades i l’altre d’adreces. Cadascun d’aquests blocs consta de 8 i 9 registresrespectivament. També disposa de 2 registres de pila (Stack), d’un comptador deprograma, d’un registre d’estat i un registre d’instruccions.

Descripció general:

• 8 registres de 32 bits de dades (D0-D8)

• 9 registres de 32 bits d’adreces (A0-A7/A7”).

• Bus d’adreces de 24 bits (23+UDS/LDS)

• Bus de dades de 16 bits.

• Dispositius entrada/sortida mapejats a memòria.

Les característiques més importats són:

• És un microprocessador de 16 bits.

• 56 tipus diferents d’operacions.

• La majoria d’operacions es poden realitzar sobre 5 tipus diferents de dades: bit,Byte, Paraula, Paraula llarga i BCD.

• En general, les operacions admeten 14 modes de direccionament, el que dona lloca més de 1000 instruccions diferents.

• S’utilitza el mateix mnemotècnic per operacions de byte, paraula, i paraulallarga.

• 7 nivells d’interrupció (I2-I0).

• Busos no multiplexats que proporcionen major rapidesa i asíncrons.

Page 8: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

8

• Dos modes de funcionament: Usuari i Supervisor, per tal de restringir el controld’operacions i/o espais d’adreces.

• Facilitat d’implementar sistemes multiprocessadors, ja que pot utilitzar el mateixbus de dades i d’adreces per diferents microprocessadors per accedir a elementscomuns.

• Detecció d’errors tan de software com de hardware.

2.1.2 Descripció de la memòria

El sistema de memòria es composa de:

• 4 xips de 32Kbytes de memòria SRAM organitzades en forma de 64K paraulesde 16 bits. Aquesta memòria de lectura i escriptura és la que s’utilitzarà percarregar-hi el codi del programa i les seves dades.

• 4 xips de memòria EPROM de 32KBytes cadascuna, podent-se configurar fins a64K paraules de 16 bits. Dos d’aquests xips són els que contenen el programamonitor i els altres dos es presenten amb els sòcols lliures per una futuraexpansió (memòria de lectura).

El mapa de direccions generat per conjunt correspon:

Adreces Tipus Contingut

000000 - 00FFFF EPROM Programa Monitor (1)

010000 - 01FFFF EPROM Sòcol d’expansió

020000 - 03FFFF RAM Memòria del sistema (2)

040000 - 05FFFF RAM Possible expansió

060001 – 06001F VIA1 Entrada/Sortida

060021 – 06003F VIA2 Entrada/Sortida

060041 – 06005F DUART Entrada/Sortida

060061 – 06007F E/S Possible expansió de E/S

Taula 1. Mapa de memòria del microinstructor TM-683

Page 9: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

9

(1) Les adreces 000000-0003FF corresponen a la taula del vector d’excepcions delprocessador .

(2) Les adreces 020000-020E35 estan reservades per a ús intern del programaMonitor.

2.1.3 Altres Perifèrics

La placa del microinstructor TM-683 mostra un seguit de perifèrics connectats alsbusos del 68000. Els més importants és descriuran a continuació:

• DUART. La qual implementa dos canals de comunicació sèrie RS-232. Und’ells, el canal A, incorpora les línies de control per un dispositiu modem.

• Dos integrats 6522 que implementen ambdós ports paral·lels de 16 bits (realmentsón 2 ports de 8 bits cadascun d’ells).

El canal A porta connectat un conjunt de 8 microrruptors, que permeten a l’usuariintroduir valors lògics. Aquest s’utilitzaran per exemple, per configurar lacomunicació pel port sèrie amb el PC.

El canal B també porta connectat un conjunt de 8 leds que s’utilitzarà per lavisualització de determinats estats o condicions.

• Hi hauria un tercer punt el qual englobaria tot el hardware de gestiód’interrupcions i tota la gestió dels polsadors ABORT, RESET accessibles perl’usuari.

Cal destacar en aquest apart, l’estructura oberta del microinstructor, el qual mostra lespossibilitats de connexió i expansió d’aquest. Els connectors que es poden observar en laplaca són:

• Implementació canal paral·lel VIA 1 (amb 50 pins)

• Implementació canal paral·lel VIA 2 (amb 50 pins).

• Bus d’expansió (amb 50 pins)

• Canal Sèrie A (25 pins)

• Canal Sèrie B (25 pins)

Page 10: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

10

2.2 Descripció del programa terminal MON68K

A continuació es comentaran les funcions disponibles del programa Monitor, quepermetran a l’usuari el control i la visualització de les operacions del microinstructor TM-683 de Promax. Aquesta descripció general té l’objectiu de mostrar les possibilitats delprograma. La descripció detallada d’aquestes funcions es pot trobar en el manual d’usuariMON68K de la UPC i Promax, i també en el manual d’usuari del programa WinITF68K.

2.2.1 Funcions de manipulació de memòria

Les funcions disponibles en aquest apartat són les següents:

s: inicialitzar posició de memòria

i: inicialitzar bloc de memòria

d: bolcar un bloc de memòria

u: desensamblar bloc de memòria

a: ensamblar pneumònics en memòria

c: comparar blocs de memòria

m: moure un bloc de memòria

p: copiar un bloc de memòria

n: insertar posicions de memòria

f: buscar un bloc de memòria

k: ‘check-sum’ bloc de memòria

Funció: s

Permet modificar el contingut d’una posició de memòria (byte) i les següents.

Funció: i

Permet inicialitzar un bloc de memòria a un valor determinat, de manera que tot el bloc dememòria contindrà el mateix valor de la posició (byte) que s’hagi introduït.

Funció: d

Permet el bolcat en pantalla del contingut d’una zona de memòria definida per l’usuari.

Page 11: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

11

Funció: u

Permet el desensamblat de blocs de memòria.

Funció: c

Serveix per comparar dos blocs de memòria definits per l’usuari. El resultat d’aquestaoperació són els corresponents missatges sobre les posicions (bytes) que han resultatdiferents.

Funció: m

Aquesta funció mou un bloc de memòria, sense limitació en quan a tamany, provocant undesplaçament de la zona de memòria adjacent.

Funció: p

Permet copiar un bloc de memòria, conservant el bloc inicial.

Funció: n

Permet insertar continguts de posicions de memòria, produint-se un desplaçament de lesposicions adjacents cap als valors més elevats dins el mapa de memòria.

Funció: f

Permet buscar una determinada cadena de bytes, de longitud inferior a 80 caràcters en unbloc de memòria.

Funció: k

Aquesta funció s’utilitza per determinar el checksum (suma acumulada) de la zona dememòria que s’especifica.

Page 12: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

12

2.2.2 Funcions de manipulació de registres

Les funcions disponibles en aquest apartat són les següents:

r: visualitzar registres

R: modificar un registre

ri: inicialitzar registres

Funció: r

Aquesta funció permet la visualització dels registres d’usuari. L’execució d’aquesta funciómostra un llistat dels registres actuals amb els seus continguts.

Registres de dades: D0-D7

Registres d’adreces: A0-A7

Stack Pointer d’usuari: USP

Stack Pointer de sistema: SSP

Comptador de Programa: PC

Registre d’estat: SR

Funció: R

Permet modificar el contingut dels registres anteriorment comentats.

Funció: ri

Serveix per inicialitzar els registres al seu valor per defecte, que és el que es mostra acontinuació:

SR=2000 , és a dir, mode supervisor i sense traça.

SSP=A7=3FFFE, que correspon a la part superior de la memòria RAM de sistema.

ALTRES=0, la resta de registres s’inicialitzen a zero.

Page 13: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

13

2.2.3 Funcions d’execució

Les funcions disponibles en aquest apartat són les següents:

g: executar en temps real

G: executar pseudoreal

t: executar pas a pas

T: executar amb traça

vt: veure traça

Funció: g

Permet l’execució sense traça d’un programa.

Funció: G

Aquesta funció permet l’execució amb traça, que provoca que el programa monitor,després d’executar cada instrucció comprovi si la següent instrucció que ha d’executarcoincideix amb algun punt de ruptura de la taula definida per l’usuari.

Funció: t

Aquesta funció té com a resultat l’execució pas a pas d’un programa.

Funció: T

Aquesta funció permet l’execució amb traça d’un programa amb la peculiaritat queemmagatzema els valors consecutius que va prenent el comptador de programa enl’execució i cadascuna de les instruccions desensamblades. Aquests valors sónemmagatzemats en un buffer de 1 Kbyte (equivalent a 100H valors de comptador deprograma) que posteriorment es podrà consultar mitjançant la funció vt que es descriuràmés endavant.

Funció: vt

Serveix per visualitzar el contingut del buffer on s’emmagatzema la traça obtinguda ambl’anterior funció.

Page 14: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

14

2.2.4 Funcions de manipulació de breaks (punts de ruptura)

Les funcions disponibles en aquest apartat són les següents:

B: Afegir un Breakpoint (punt de ruptura)

b: Visualitzar els punts de ruptura

br: Eliminar un Breakpoint

bi: Inicialitzar la taula de breakpoints

Funció: B

Permet la definició del punt de ruptura, que consisteix en una adreça i en un valor decomptador que serà el número de cops que el comptador de programa senyalarà aquestaadreça. Aquesta definició de breakpoint es tindrà en compte durant l’execució d’unprograma si s’especifíca.

Funció: b

Aquesta funció permet la visualització de la taula de punts de ruptura definits per la funcióB. És important destacar que quan s’executa un programa considerant els breakpoints,aquests no desapareixen de la taula definida, però si que apareixen amb un comptadorassociat igual a zero (0), ja que l’execució s’encarrega de decrementar aquest valor cadacop que el comptador de programa senyala dita adreça.

Funció: br

Permet eliminar un breakpoint previament definit. Per tal de fer-ho tan sols s’had’especificar l’adreça del breakpoint que es desitja eliminar.

Funció: bi

Aquesta funció realitza un reset a la taula de breakpoints, els elimina tots.

Page 15: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

15

2.2.5 Funcions de manipulació de fitxers

Les funcions disponibles en aquest apartat són les següents:

l: Carregar un fitxer a la placa (PCè68K)

L: Transferència d’un contingut de la memòria a un fitxer (68kèPC)

Funció: l

A l’executar aquesta funció el programa queda a l’espera de que li sigui enviat el fitxeramb format s28 des de disc a través del port sèrie.

La mecànica de com realitzar aquest transmissió dependrà del tipus de terminal o del tipusde software emulador de terminal sobre el PC.

Funció: L

Permet emmagatzemar un determinat contingut de memòria en un fitxer del disc. Aquestfitxer té format s28.

2.2.6 Funcions pròpies del sistema

Moltes de les funcions que aquí es descriuran no tenen molt sentit en un sistema operatiuWindows. Recordem que aquest programa originalment estava pensat pel sistema operatiuMS-DOS, amb la qual cosa no existien la “calculadora de windows”, el rellotge de la barrad’eines...

Les funcions disponibles en aquest apartat són les següents:

?: menú d’opcions

e: veure estat del sistema

sh: posar l’hora del rellotge

vh: veure l’hora

pr: parar rellotge

dh: conversió de decimal a hexadecimal

hd: conversió d’hexadecimal a decimal

reset: operació ‘reset’ del microinstructor

Page 16: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

16

Funció: ?

Aquesta funció visualitza totes les comandes de les funcions disponibles així com una breudescripció de cadascuna d’elles

>?

- FUNCIONES DE MANIPULACION DE MEMORIA - - FUNCIONES DE MANIPULACION DE REGISTROS -

s : inicializar posición de memoria. r : visualizar registros.

i : inicializar bloque de memoria. R : modificar un registro.

d : volcar bloque de memoria. ri: inicializar registros.

u : desensamblado bloque de memoria.

a : ensamblar nemónicos en memoria.

c : comparar bloques de memria. - FUNCIONES DE EJECUCION -

m : mover un bloque de memria. g : ejecutar en tiempo real.

p : copiar bloc de memòria. G : ejecución pseudoreal.

n : insertar posiciones de memoria. t : ejecutar paso a paso.

f : buscar en bloque de memoria. T : ejecutar con traza.

k : 'checksum' bloque de memoria. vt: ver traza.

- FUNCIONES DEL SISTEMA - - FUNCIONES DE BREAKS -

? : menú. B : añadir un breakpoint.

e : estado del sistema. b : visualizar breakpoints.

sh: poner hora. br: eliminar un breakpoint.

vh: ver hora. bi: inicializar tabla breakpoints

pr: parar reloj.

dh: decimal a hexadecimal. - FUNCIONES DE MANIPULACION DE FITXEROS -

hd: hexadecimal a decimal. l: carga de un absoluto a la placa.

reset: ‘reset’ de la placa. L: transferencia de un absoluto al PC.

>

Funció: e

Aquesta funció proporciona informació sobre l’estat del sistema i la sobre la quantitat dememòria RAM disponible per l’usuari.

Cal remarcar que entre les posicions 20000H i 20E35H de la memòria RAM s’ubiquen lestaules d’ús intern.

Funció: sh

Aquesta funció permet posar a l’hora el rellotge intern de la placa. Al executar aquestafunció, apareix un missatge amb la hora actual on es demana la nova hora. Si no esdefineixen els segons, el programa prendrà el valor de zero per defecte.

Page 17: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

17

Funció: vh

Permet visualitzar l’hora que marca el rellotge intern de la placa

Funció: pr

Serveix per parar el rellotge, conservant així el valor actual d’aquest. La utilitat d’aquestafunció serveix per alliberar de càrrega el sistema, ja que el sistema del rellotge fa ús delsistema d’interrupcions.

Funció: dh

Serveix per calcular el valor hexadecimal d’un número decimal introduït per l’usuari.

Funció: hd

Permet calcular el valor decimal d’un número hexadecimal introduït per l’usuari. Realitzala funció inversa a l’explicada anteriorment (dh).

Funció: reset

Aquesta funció permet realitzar un reset de la placa. En aquest reset també s’inicialitzen elsregistres d’usuari.

Page 18: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

18

2.3 Descripció del programa interface ITF68k

Com ja s’ha comentat, les funcions d’aquest programa són les mateixes que es podenrealitzar amb el MON68k. La diferencia amb aquest és l’entorn visual amb que es mostrenles dades a l’usuari i la crida de les comandes d’aquest, que es realitza a través de menús.L’objectiu de la següent descripció, és veure quines són les mancances d’aquest programaque han portat a intentar millorar-lo. La descripció de les funcions es deixarà a bandaperquè seria repetir l’apartat anterior amb petits matisos visuals.

Cal comentar que el programa WinITF68K s’ha realitzat de nou prenent com a basesles comandes o funcions del programa MON68K, que és qui està al altre costat de lacomunicació sèrie. WinITF68K no és una modificació del programa Itf68k, ja que no esdisposava dels codi fonts i perquè la programació per windows segueix una estructuradiferent a la programació des de MS-DOS, d’igual manera que la programació del portsèrie.

Sense més preàmbuls, es passarà a la descripció del programa ITF68K.

El interface d’usuari Promax (ITF68K) és un software que permet el control de laplaca TM-683, des d’un PC mitjançant una comunicació sèrie. En aquest es poden realitzarles operacions més comuns del control del microinstructor TM-683, com pot ser adepuració i execució de programes sobre el hardware específic.

L’entorn de gràfic d’aquest programa es divideix en una pantalla subdividida en tresparts:

1) Marc de Registres. En la zona superior de la pantalla es mostra una finestra en laque es visualitzen els registres del microprocessador i el seu contingut.

2) Finestra de Treball. En la zona intermitja es mostra una altra finestra més gran,on es presentaran els diferents missatges i resultats de l’execució de les diferentscomandes.

3) Barra de Menús. En la zona inferior es mostren els diferents menús que amaguenles diferents comandes possibles a executar.

El entorn gràfic descrit es mostra en la següent imatge:

Page 19: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

19

Figura 1. Aspecte del programa ITF68K

A la “Barra” de Menús, es mostren 6 submenús possibles dels quals se’n deriven totes lescomandes disponibles. L’estructura dels menús i les funcions disponibles de cadascund’ells es mostra a continuació:

1. Registres: Permet realitzar les operacions bàsiques amb els registres delmicroprocessador.

1.1 Visualitza

1.2 Modifica

1.3 Inicia

2. Memòria: Permet realitzar les operacions relacionades amb la manipulació de lamemòria de la placa.

2.1 Visualitza

2.1.1 Bolcar

2.1.2 Compara

2.1.3 Busca

2.1.4 Suma. Correspon a la funció checksum del programamonitor

Page 20: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

20

2.2 Modifica

2.2.1 Omple

2.2.2 Bytes

2.2.3 Copia

2.2.4 Mou

2.2.5 Inserta

2.3 Ensamblar

2.4 Desensamblar

3. Execució: Permet l’execució d’un programa localitzat en la memòria de la placa.Hi ha diferents opcions que permeten la depuració dels programes.

3.1 Executa. Equival a la funció g del programa monitor

3.2 No_Real. Equival a la funció G del programa monitor

3.3 Pas_pas.

3.4 Traça

3.5 Veure_traça

3.6 Connecta. Permet restablir la connexió en cas de error de comunicació.

3.7 Reset

4. Punts de ruptura: Possibilita a l’usuari la definició de punts de ruptura(Breakpoints) que li permetran parar l’execució de forma automàtica, per tal dedepurar el programa.

4.1 Afegir

4.2 Mostrar

4.3 Eliminar

4.4 Inicia

5. Fitxers: Aquest menú permet la transmissió i recepció de fitxers entre la memòriade la placa (TM-683) i el disc del PC.

5.1 Rebre

5.2 Transmetre

5.3 Veure. Aquesta opció visualitza el contingut d’un fitxer.

6. Sistema: Aquest menú engloba un seguit d’opcions d’ajuda al sistema i altresfinalitats.

6.1 Estat

Page 21: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

21

6.2 Hora

6.2.1 Actualitzar

6.2.2 Veure_hora

6.2.3 Parar_rellotge

6.3 Calculadora. Aquesta opció dona accés a una calculadoradecimal/hexadecimal.

6.4 Monitor. Permet a l’usuari treballar en mode terminal, amb els menúsidèntics als del programa MON68K.

6.5 Shell. Aquesta opció, recordem que aquest programa és de MS-DOS,permet la sortida temporal al sistema operatiu.

6.6 Ter_Aux. Aquesta comanda realitza una emulació de terminal, peròtreballant sobre el COM2, sempre que s’hagi especificat els argumentsde crida.

6.7 Fi. Serveix per sortir de l’aplicació.

Per desplaçar-se per els menús hi ha dos opcions:

1) Desplaçant els cursors, i polsant RETURN o ESC depenent si es desitja entrar osortir del menú en qüestió.

2) Polsant la lletra inicial de la comanda, i ESC per desactivar la comanda o tornar alsubmenú anterior

2.3.1 Punts de millora i mancances

Els punts observats després de estudiar i treballar el programa ITF68K són elssegüents:

• Centralització de l’informació més important de la placa TM-683. La pantallaprincipal del programa ITF68K mostra una finestra superior on hi ha larepresentació del contingut dels registres i una finestra intermitja anomenadafinestra de treball, on es representa totes les altres funcions del programa. Latercera part de la pantalla l’omple les opcions del menú. A la pràctica resulta moltenfarragós el fet de no poder visualitzar de forma permanent una determinada zonade memòria, els registres, el desensamblat del codi i l’evolució de l’execució deprograma, ja que per fer-ho, cada comanda del programa representa reemplaçar elcontingut de la finestra de treball i visualitzar el nou contingut (excepte els registresque es mostren a la finestra de registres). En la depuració de programa l’usuariacostuma a voler comprovar els valors abans comentats, de manera que ambl’actual sistema l’usuari ha de recordar bona part d’aquests valors.

• Els menús. El sistema de menús d’aquest programa s’ha quedat totalment desfasat,sobretot perquè un cop s’ha entrat a un submenú, l’usuari principiant, no sap on es

Page 22: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

22

troba. L’altre motiu encara més important, és que s’alenteix la crida a l’execució deles comandes. Per exemple, si es vol executar una funció de visualització dememòria i posteriorment l’usuari vol reinicialitzar els registres, s’ha d’entrar almenú memòria, executar la comanda visualitza, sortir del menú memòria, entrar almenú registres i executar la comanda reinicialitzar. Es a dir, s’han de prémer 5tecles per executar 2 comandes. Cal comentar que també existeix una manera mésràpida de cridar a les funcions, que és amb la lletra inicial de la comanda, amb eldesavantatge d’haver de recordar les comandes (per fer això, quasi que resulta méspràctic treballar directament amb el terminal monitor).

• Punts de ruptura i execució del codi. Un problema comú amb el que presenta elprograma monitor, és una funcionalitat molt pobre i poc entenedora de les funcionsde punts de ruptura i les diferents modalitats d’execució de programa. Lavisualització i evolució d’aquestes és molt poc clara i presenta l’inconvenientd’haver de cridar moltes funcions per la seva complerta comprovació.

• Funcions supèrflues. Hi ha un seguit de funcions del programa ITF68K que notenen cap sentit quan es treballa en un sistema operatiu windows. Es recorda que elITF68K és un programa de MS-DOS. Aquestes funcions són:

- Operacions de rellotge. Resulta molt pràctic el rellotge de la barra demenú de windows.

- La calculadora. Tots els sistemes operatius windows disposen d’unacalculadora científica, que permet realitzar fàcilment les conversions abinari/decimal/hexadecimal...

- El Shell. No té sentit retornar de manera temporal al sistema operatiu,perquè windows suporta la multitasca.

- Ter_aux. Novament el sistema multitasca, descarta la utilitat d’aquestafunció.

- Veure_Fitxer. Des de windows és veure el contingut del fitxer amb elnotepad del sistema.

• Ús del ratolí. El programa no suporta la possibilitat d’utilització del ratolí. A més,en el cas que així fos, no es guanyaria ni velocitat ni claredat ja que el plantejamentdel programa no ho permet i només s’utilitzaria en el desplaçament pels menús.Molts usuaris estan acostumats a l’ús del ratolí que els permet la interacció delprograma de manera més còmode, per tant es una opció a tenir en compte.

• Entorn gràfic. Personalment, i sense voler menysprear la feina dels programadorsde l’ITF68K, crec que l’entorn gràfic no aporta grans avantatges respecte alprograma MON68K. És més, havent utilitzat ambdós programes, crec que elprograma monitor aporta més agilitat i rapidesa que l’anterior. No obstant, es unaopinió personal i fa 10 anys aquest camí tenia tot el sentit del món.

Page 23: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

23

3 Implementació i Estructura del Programa WinITF68K

Abans de començar, es recordarà que l’aplicació a realitzar ha de funcionar sobre elsistema operatiu Windows. Existeixen dues maneres de programar en windows: una seria através de les seves mateixes API’s i l’altre és a través d’un TFormWork. Hi han 3 tipus deTFormWorks els MFC, els OWL de Microsoft i els VCL de Borland (que són els que hemutilitzat).

En un TFormWork s’utilitza una programació orientada a objectes. Aquest tipus deprogramació funciona de diferent manera que la que s’utilitza amb llenguatges de MS-DOS com el C++, on hi ha una funció principal “Main()”que s’executa contínuament i ésl’encarregada d’executar les seves altres funcions. En la programació orientada a objecteshi ha una funció anomenada WinMain que és la que gestiona els events del programa.Windows funciona responent al que s’anomena missatges de windows. Aquests missatgespodrien ser els events comentats anteriorment, events d’altres programes o excepcions delmateix sistema etc.., que impliquen l’execució d’un codi associat.

Els events són fruit de l’interacció física entre l’usuari i els objectes del programa,que té com a resultat l’execució en forma de funció d’un de codi de programa. Perexemple, quan es clicka sobre un objecte “botó” amb el ratolí, es genera un event que esfica a la cua de missatges de Windows a través del gestor d’events WinMain de l’aplicació.Quan correspon aquest event és respost, en el qual s’executa el codi associat. Un copfinalitzat aquest codi, windows respondrà al següent missatge del sistema.

El treball a realitzar en l’aplicació consistirà en dissenyar un formulari principal ambun seguit d’objectes que permetin visualitzar els valors desitjats i al mateix tempsproporcionin un medi d’interacció amb l’usuari. D’aquesta interacció sorgiran lapossibilitat d’un munt d’events, dels quals només es programaran aquells necessaris perrealitzar les tasques desitjades.

L’organització de l’estructura del programa es basa en les classes. Una classe al igualque una estructura, és una seguit de dades membres i funcions que treballen juntes perrealitzar una tasca de programació específica. L’objectiu de les classes es encapsular oenglobar tasques específiques de manera que es pugui accedir a aquesta sense necessitat desaber exactament el seu funcionament intern. Es pot accedir a les dades membre i funcionsd’una classe des de altres classes, tot i que s’intenta privar l’accés a dades i funcions quesón d’ús intern a la mateixa classe (encapçalament).

A continuació exposarem un breu exemple per tal de entendre el funcionament i lasintaxi de la programació orientada a objectes. En aquest exemple es defineixen duesclasses: la classe A i la classe B. Totes dues tenen una sèrie de funcions que podran serutilitzades per altres classes. Per tal de definir una classe s’utilitzen els arxius amb extensióh (provinent de header en anglès) que són arxius de capçalera on es defineixen les funcionspertanyents a una classe. Les funcions definides en una classe poden ser de tres tipus“public”, “protected” o “private”, segons el nivell d’accés que es vulgui atorgar a lesfuncions. Les funcions declarades com a public són funcions accessibles des de qualsevol

Page 24: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

24

altra classe, en canvi les declarades com a protected o private només són accessibles per lamateixa classe.

class ClasseA

{

public:

bool var1;

int var2;

void func1();

private:

char var3;

long func2(char,int);

}

class ClasseB

{

public:

bool var4;

char var5;

int func3(int);

private:void func4(void);

protected:

long func5(long);

}

Definides les classes s’ha de definir el contingut de cada funció en un arxiu ambextensió cpp (C++) . Les funcions es declaren amb l’operador :: que indicarà a quina classepertany la funció en concret.

Arxiu cpp de la classe A:

void ClasseA::func1()

{

char ch1;

ch1=ClasseB.var5;

if (var1)

Page 25: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

25

{

func2(ch1);

}

}

long ClasseA::func2(char,int)

{

int i,in4;

ClasseB.func3(in4);

for (i=0;i<in4;i++) func1()

}

Així doncs s’observa com les funcions i variables d’una classe poden ser utilitzadesen altres classes amb l’operador “.”. També cal comentar que les variables definides en unaclasse passen a ser variables globals de la classe, com podria ser la variable var1 o var5.

En l’exemple s’observa com dins de la declaració de la funció func2 hi ha una crida ala funció func3 de la classe B.

Cadascuna de les classes definides en la aplicació tindrà com a mínim dos arxiusassociats, un de capçalera amb extensió .h i un altre amb extensió .cpp.

Evidentment, aquesta documentació no pretén ser un curs de programació, i descriurepas per pas totes les funcions de l’aplicació seria extensíssim i molt pesat pel lector. A mésamb aquesta documentació s’adjunta els codis fonts comentats que és la millor manerad’entendre a funcionament general del programa qui vulgui aprofundir-hi.

Un cop entesos els conceptes de programació orientada a objectes, events i classes,es passarà a la descripció més detallada de l’organització de les classes, on es comentaranles funcions i conceptes més importants.

El programa WinITF68K s’ha organitzat en diferents classes que corresponen a lesprincipals tasques que ha de realitzar el programa. Cal comentar que cada pantalla delprograma (pantalles de diàleg, i pantalla principal) porta associada una classe.

Sense més preàmbuls és passarà a la descripció general de cadascuna de les classescreades. Els fitxers que composen el projecte corresponen a cadascuna d’aquestes classes,per la qual cosa tenen el mateix nom, a excepció del fitxer Breaks que conté les classesBreaks i TBreaks.

§ M68k: Aquesta classe engloba un seguit de variables i funcions per tal de podervisualitzar en les dades del microinstructor (registres, codi, memòria...), en elsdiferents objectes del menú principal per tal de mostrar-los el més estètica ifuncionalment possibles. En aquesta classe també s’inclouen la modificació irefresc d’aquests objectes comentats.

Page 26: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

26

§ Comunicació: Aquesta classe és l’encarregada de la comunicació sèrie. En aquesteses defineixen els valors de configuració i les funcions d’inicialització, finalitzaciódel port sèrie, i de transmissió i recepció de dades.

§ OpcionsComunicació: Aquesta classe inclou una pantalla de diàleg on l’usuari potespecificar els paràmetres de comunicació. També inclou les funcions per realitzarl’autodetecció de la configuració sèrie del microinstructor TM-683.

§ Monitor: En aquesta s’inclou la pantalla Monitor que permet executar el programaen mode terminal amb un menú idèntic al funcionament del programa Monitor.

§ Execució: Aquesta classe engloba totes les funcions d’execució.

§ TBreaks: Per tal de tractar els punts de ruptura, es crea aquesta classe que permetràagrupar una adreça i contador. Cada punt de ruptura serà un objecte d’aquestaclasse i es tractarà amb una llista creada en la següent classe.

§ Breaks: S’encarrega de la manipulació de la llista de punts de ruptura i les funcionsgenerals de punts de ruptura relacionades amb les comandes directes del programamonitor sobre els punts de ruptura.

§ Editor: Aquesta classe inclou una pantalla de diàleg que permet la manipulació dela memòria. Totes les funcions de manipulació de memòria també s’inclouen enaquesta classe.

§ PasosBP / TransmetreFitxer / RebreFitxer / Sobre: Aquestes classes corresponen apantalles de diàleg simples que només tenen per objectiu adquirir alguna dadaespecificada per l’usuari.

§ Fitxer: És l’encarregada d’obrir i guardar els fitxers de context (variables d’entorn,i informació actual del TM-683).

§ Menu: Inclou el formulari principal, on s’ubiquen la majoria objectes de l’aplicaciói on tenen lloc la majoria d’events. En aquest és on hi ha la gestió de les comandesdel menú, i la majoria d’events criden a funcions de les altres classes.

El la següent descripció de les funcions de les classes, s’ha optat per escriure entrecorxets les instruccions utilitzades corresponents al programa monitor. Així doncs sitrobem per exemple [r] en la descripció d’un funció, vol dir que en aquesta funció s’utilítzala comanda “r” del programa monitor, que en aquest cas correspon a la visualització delsregistres.

Page 27: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

27

3.1 Classe M68k

Aquesta classe engloba un seguit de variables i funcions per tal de poder visualitzaren els objectes del formulari principal (FormMenu), les dades procedents delmicroinstructor (registres, codi, memòria...). Aquestes dades són demanades al programamonitor i posteriorment enviades per aquest. Per tant la majoria de funcions mostraranaquest diàleg de demanar informació i llegir informació enviada pel programa monitor(serà el cas dels registres, desensamblat del codi, memòria, i tota la resta de funcions). Enaquesta classe també s’inclouen la modificació i refresc d’aquests objectes comentats.

El fitxer de capçalera d’aquesta classe ens mostra les variables i funcions definides,que es comentaran seguidament de forma general.

class M68K

{

public:

char AdrecaBasePilaUSP[8+1];

char AdrecaBasePilaSSP[8+1];

int FilaApuntaPila;

char AdrecaIniciVisualitzaCodiSeguent[6+1];

bool FlagC,FlagV,FlagZ,FlagN,FlagX,FlagI0,FlagI1,FlagI2,FlagS,FlagT;

bool HexToBin(int hexa,char *Cadenabin);

bool InicialitzaRegistres();

bool VisualitzaRegistres();

bool ModificaRegistres(int Reg, char *ValorRegistre);

bool VisualitzaFlags(char *ValorFlags);

bool VisualitzaMemoria(char *AdrecaInicial);

bool VisualitzaMemoriaEspecial(char *AdrecaInicial);

char VisualitzaPosicioMemoria(char *Adreca);

bool RefrescaPosicioMemoria(char *Adreca, char *Valor);

bool InicialitzaPosicioMemoria(char *Adreca, char *Valor);

bool InicialitzaLineaMemoria(char *Buffer);

bool InicialitzaBlockMemoria(char *AdrecaInicial, char *AdrecaFinal, char *Valor);

bool CopiaBlockMemoria(char *AdrecaInicialOrigen, char *AdrecaFinalOrigen,

char *AdrecaInicialDesti);

bool MoureBlockMemoria(char *AdrecaInicialOrigen, char *AdrecaFinalOrigen,

char *AdrecaInicialDesti);

bool InsertaPosicioMemoria(char *Adreca, char *Valor);

//bool CompararBlockMemoria();

//bool BuscarBlockMemoria();

//bool Check-sumBlockMemoria();

bool VisualitzaViaDuart();

bool ModificaVia(AnsiString Adreca, AnsiString Valor);

bool ModificaDuart(AnsiString Adreca, AnsiString Valor);

Page 28: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

28

bool VisualitzaCodi(char *AdrecaInicial);

bool FiltreCodi();

bool VisualitzaPila();

bool ApuntaPila();

bool DibuixaApuntaPila();

protected:

private:

};

• AdrecaBasePilaUSP, AdrecaBasePilaSSP, FilaApuntaPila: Les dos primeresvariables serveixen per guardar l’adreça base que s’utilitza per visualitzar en elFormMenu cadascuna de les piles, de manera que es pot visualitzar cadascuna deles piles de forma independent. FilaApuntaPila indica la fila delStringGridApuntaPila que correspon a on apunta la pila en StringGridPila.

• AdrecaIniciVisualitzaCodiSeguent: Aquesta variable guarda la següent adreça del’ultima intrucció que no s’ha pogut visualitzar en el StringGridCodi. Amb aquestavariable es podra dur a terme les execucions pas a pas dins, sobre, i amb traça.

• Flag’s: Aquestes variables booleanes corresponen als flags d’estat.

• bool HexToBin (int hexa, char *Cadenabin): Aquesta funció permet passar unenter en format hexadecimal a binari mitjançant un punter a cadena. Aquesta funciós’utilitza per visualitzar els flags a partir del contingut del registre d’estat (SR).

• bool InicialitzaRegistres(): [ri] Aquesta funció inicialitza els registres al valor perdefecte i es refresquen en l’escriptori, els valors dels registres, flags i pila.

• bool VisualitzaRegistres(): [r] Aquesta funció visualitza els registres i els flags,aquests ultims mitjançant la crida al a funció visualitzaFlags.

• bool ModificaRegistres(int Reg, char *ValorRegistre): [R] Aquesta funciómodifica el valor d’un registre.

• bool visualitzaFlags(char *ValorFlags): A partir del registre d’estat (SR) imitjançant la funció HexToBin es visualitza l’estat del flags (Buttons).

• bool VisualitzaMemoria(char *AdrecaInicial): [d] Es visualitza el contingut dela memòria en el StringGridMemoria a partir de l’adreça que es passa com a

Page 29: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

29

paràmetre. D’aquesta adreça es calcula l’adreça final que cap dins elStringGridMemoria per cridar a a la funció “d” del programa monitor.

• bool VisualitzaMemoriaEspecial(char *AdrecaInicial): [d][s] Per limitacions delprograma monitor, no es permés fer un bolcat de memòria a partir de l’adreça3FFF0 amb la comanda “d”. Amb aquesta funció es pot visualitzar una zona dememòria que contingui algunes de les adreces problemàtiques comentades. Per fer-ho s’utilitza la comanda “d” per la zona de memòria que no conté aquestes adrecesi a partir de la zona d’adreces superior a la 3FFF0 s’utilitza la comanda “s”.

• char VisualitzaPosicioMemoria(char *Adreca): [s] Aquesta funció visualitza elcontingut d’una posició de memòria (1 bytes).

• bool RefrescaPosicioMemoria(char *Adreca): La funció refresca una posició dememòria en el StringGridMemoria. Aquesta s’utilitza des de l’editor de memòria(classe editor) quan s’inicialita una posició de memòria. La finalitat d’aquestafunció es modificar el valor de la posició en l’escriptori sense haver d’utilitzar lacomanda “s” del programa monitor. Com que sabem el valor del contingut que esvol modificar, s’optimitza en comunicacions sèrie que alenteixen el programa.

• bool InicialitzaPosicioMemoria(char *Adreca, char *Valor): [s] Permetinicialitzar una posició de memòria.

• bool InicialitzaLiniaMemoria(char *Buffer): [s] Aquesta funció està relacionadaamb la classe fitxer que permet guardar i obrir fitxers de context (mirar classe fitxerapartat 3.9.). En l’arxiu de context emmagatzema la memòria de manera que en unalínia s’especifiquen l’adreça i els 16 bytes de contingut següent. Aquest buffer delínia és el paràmetre que es passa a la funció InicialitzaLiniaMemoria i a partird’aquest s’inicialitzen una a una les posicions de memòria.

• bool InicialitzaBlockMemoria (char *AdrecaInicialOrigen, char *AdrecaFinalOrigen, char*Valor): [i] Permet inicialitzar un bloc de memòria a un valor determinat i es cridaen l’editor de memòria.

• bool CopiaBlockMemoria (char *AdrecaInicialOrigen, char *AdrecaFinalOrigen, char*AdrecaInicialDesti): [p] Copia un bloc de memòria a un altre zona de memòria i escrida des de l’editor de memòria.

• bool MoureBlockMemoria(char *AdrecaInicialOrigen, char *AdrecaFinalOrigen, char*AdrecaInicialDesti): [m] Aquesta funció es crida des de l’editor de memòria i permetmoure una zona de memòria (implica inicialitzar a zero les antigues posicions).

Page 30: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

30

• bool InsertaPosicioMemoria(char *Adreca, char *Valor): [n] Aquesta funcióinserta una posició de memòria (1 byte) en l’adreça especificada provocant undesplaçament de les posicions de memòria corresponents a les adreces superiors.Aquesta funció és cridada des de l’editor de memòria.

• //bool CompararBlockMemoria(): [c] Aquesta funció no està implementada enl’editor de memòria però està preparada per futures ampliacions. La funciócompara blocs de memòria que dòna com a resultat les diferencies trobades.

• //bool BuscarBlockMemoria(): [f] Aquesta funció no està implementada enl’editor de memòria però està preparada per futures ampliacions. La funció buscauna seqüència de bytes en la memòria que dòna com a resultat les adreces on sóntrobades.

• //bool Check-sumBlockMemoria(): [k] Aquesta funció no està implementada enl’editor de memòria però està preparada per futures ampliacions. Permet determinarel check-sum (suma acumulada) de la zona especificada.

• bool VisualitzaViaDuart(): [s] Permet la visualització dels registres de les VIA’s ide la Duart (els que es mostren en el panell Via-Duart). S’utilitza la comanda “s”del monitor perquè existeixen errors des de la comanada “d”.

• bool ModificaVia(AnsiString Adreca, AnsiString Valor): [s] Modifica elcontingut d’un registre de la Via (els que es mostra en el panell VIA1/VIA2).

• bool ModificaDuart(AnsiString Adreca, AnsiString Valor): [s] [p] Modifica elcontingut d’un registre de la Duart (els que es mostra en el panell DUART). Lacomanda del programa monitor “s” dòna error al realitzar directament aquestafunció de manera que per fer-ho s’ha utilitzat la següent tècnica: s’inicialitza unaposició auxiliar (s’ha utilitzat 21FFF), on prèviament es guarda el seu valor, amb elcontingut que es desitja inicialitzar al registre de la Duart, després aquest es copiaal registre de la Duart i es restaura la posició auxiliar utilitzada.

• bool VisualitzaCodi(char *AdrecaInicial): [u] Visualitza el desensamblat d’unazona de memòria en el StringGridcodi. En aquesta funció s’utilitza la variableAdrecaIniciVisualitzaCodiSeguent que guarda l’adreça següent que no ha pogut servisualitzada per manca d’espai en el StringGridCodi. Aquesta variable és moltimportant a l’hora de fer les execucions. En la funció també es fa un refresc de lavisualtizacions del punts de ruptura (cercles vermells adjunts al codi).

• bool FiltreCodi(): Els caràcters ascii especials (128-255, accents, caràcters decontrol...) utilitzats en el monitor i el WinITF68K no coincideixen, de manera queper evitar errors en els caràcters imprimits en el desensambat es fa una conversióentre uns i altres.

Page 31: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

31

• bool VisualitzaPila(): [d][s] Visualitza la pila especificada (USP o SSP) en grupsde 2 bytes situats un damunt de l’altre. En aquesta s’utilitzen les variables globalsBasePilaUSP i BasePilaSSP.

• bool ApuntaPila(): Aquesta funció calcula la fila en que ha apuntar, amb forma defletxa verda, la pila en StringGridApuntaPila situat al costat del StringGridPila.Aquest valor es calcula a partir de l’adreça del registre pila (USP o SSP) i lesvariables globals BasePilaUSP i BasePilaSSP. El número de fila on apunta la Pilaes guarda en la variable global FilaApuntaPila.

• bool DibuixaApuntaPila(): Dibuixa la fletxa de color verd, que es situa en elnúmero de fila de el StringGridApuntaPila que s’especifica en la variable globalFilaApuntaPila.

3.2 Classe Comunicació

Aquesta classe és l’encarregada de la comunicació sèrie. En aquestes es defineixenels valors de configuració i les funcions d’inicialització, finalització del port sèrie, i detransmissió i recepció de dades.

La configuració i manipulació del port sèrie corre a mans del sistema windows, i elque fa el programa WinITF68K és accedir al que s’anomenen winapi’s de windows. Leswinapi’s són funcions del sistema (windows) mitjançant les quals es pot configurar perexemple la comunicació sèrie.

class COMUNICACIO

{

public:

char *baud[8];

char *port[2];

char *paritat[3];

char *bitscaracter[2];

char *bitstop[2];

char *cbaud;

char *cport;

char *cparitat;

char *cbitscaracter;

char *cbitstop;

char *InBuff;

char *OutBuff;

bool InBuffFinal;

Page 32: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

32

int Caracter1;

int NumBytes;

HANDLE hComm;

bool Connecta;

bool ComandaMemo1;

char TeclaPulsada;

bool ErrorComunicacio;

bool ErrorInicialitzar;

COMUNICACIO(char,char,char);

~COMUNICACIO();

bool Inicialitza();

bool AutoComunicacio();

bool Finalitza();

bool Transmetre();

bool Rebre();

bool Display(int index);

bool TransmetreFitxerCodi(char *NomFitxer);

bool RebreFitxerCodi();

bool BuscaErrorsInBuff();

int GetTime();

protected:

private:

COMMTIMEOUTS ctmoNew , ctmoOld;

char XON;

char XOFF;

char EOFTX;

};

• *baud[8], *port[2], *paritat[3], *bitscaracter[2], *bitstop[2]: Els anteriorspunters a cadena de caràcters, contenen tots els valors possibles dels paràmetres dela configuració, per exemple baud[8] contindrà tot els valors possibles referent avelocitat (9600,4800,2400...)

• *cbaud, *cport, *cparitat, *cbitscaracter, *cbitstop: Contenen el valors actualsdels paràmetres de configuració. La modificació d’aquests valors es realitza en lapantalla de la classe OpcionsComunicació.

• *InBuff, *OutBuff: Corresponen als buffers dels caràcters rebuts i caràctersenviats respectivament en la comunicació sèrie (són de 8Mgbytes cadascun).

Page 33: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

33

• InBuffFinal: S’utilitza per detectar el final de recepció de dades en la comunicaciósèrie.

• Carater1: S’utilitza per visualitzar correctament les dades rebudes en lacomunicació en la pantalla monitor.

• NumBytes: Indica el número de bytes rebuts o enviats en una lectura o escritura deport sèrie.

• hComm: És el manejador (handle) del port sèrie. El port sèrie, tot i que té unaestructura de configuració i funcions pròpies, es podrira dir que funciona com unfitxer, d’aquí el sentit d’aquesta variable.

• Connecta: Aquesta variable serveix per saber que s’ha inicialitzat la comunicacióamb la qual cosa es poden executar les funcions corresponents a la transmissió irecepció de dades.

• ComandaMemo1: Aquesta variable serveix per indicar que s’ha enviat un caràcterprocedent de la pantalla monitor (classe Monitor, en la funció Memo1KeyPress).Quan es prem un caràcter en la pantalla monitor del WinITF68K i és enviada, elprograma monitor (MON68K) envia aquest mateix caràcter al programaWinITF68K sense el protocol XOFF. De manera que l’única manera de saber queha finalitzat la recepció és a través d’aquesta variable.

• TeclaPolsada: Conté el caràcter de la tecla polsada des de la pantalla monitor.S’utilitza per visualitzar i gestionar correctament la pantalla monitor.

• ErrorComunicacio: Permet detectar errors de comunicació.

• ErrorInicialitzar: Permet saber si hi hagut un error de comunicació al inicialitzar.

• Bool Inicialitza(): Aquesta funció és la que configura el port sèrie. Per laconfiguració s’utilitzen varies funcions winapi’s que modifiquen els valors del’estructura DCB (winapi) que és la que conté tots els paràmetres de configuraciódel port sèrie, així com els protocols a utilitzar, etc...

La funció Inicialitza() configura entre altres, els paràmetres de baud, paritat,bits/caràcter, bitsStop, COM, a més s’especificar el protocol XON/XOFF ques’utilitzarà. En aquesta funció també s’estableixen el TIMEOUTS. Un copfinalitzada la configuració s’inicia la comunicació per tal de inicialitzar tots elsobjectes de l’escriptori amb les dades del entrenador (registres, desensamblat,

Page 34: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

34

memòria...). Per donar constància que els sistema està inicialitzat es fica la variableglobal Connecta a 1.

• Bool Finalitza(): En aquesta es finalitza la comununicació sèrie i es restaura laconfiguració de la comunicació sèrie anterior, que prèviament s’ha guardat en lafunció Inicialitza.

• Transmetre(): Aquesta funció transmet el contingut del buffer de sortida OutBuffpel port sèrie. La funció WriteFile és una winapi que permet la escritura d’un“fitxer”que en aquest cas és el port sèrie.

• Rebre(): Aquesta funció realitza la recepció pel port sèrie en el buffer InBuff . Lafunció ReadFile és una winapi que permet la lectura del port sèrie. La majoria decodi de la funció Rebre() va destinat visualitzar correctament i de formasincronitzada, els caràcters rebuts en el buffer InBuff en la pantalla monitor.

• Display(): En aquesta funció es filtren els caràcters no imprimibles i es fa laconversió de les diferents codis asciis especials (128-255) utilitzats en MON68K iWinITF68K, per tal de visualitzar correctament les comandes en la pantalla delprograma monitor (WinITF68K).

• Bool AutoComunicacio(): En aquesta, es fa un seguit de bucles per anar provanttotes les combinacions de configuracions del port sèrie possibles. El funcionamentes basa en provar una configuració i mirar si hi ha error de comunicació, en el casque sigui així, es passa a provar la següent configuració.

• TransmetreFitxerCodi(): [l] El procés utilitzat per transmetre un absolut s28 a laplaca TM-683 consisteix en anar llegint línia per línia el fitxer, i transmetre-la pelport sèrie. Previament s’indica al programa MON68K, que li serà transmés unfitxer ab la comanda “l”.

• RebreFitxerCodi(): [L] El procés utilitzat en rebre un fitxer s28 de la placa TM-683 consisteix en llegir el buffer d’entrada del port sèrie i anar escrivintdirectament al fitxer. Per tal de que el programa monitor (MON68K) envii el fitxers28 s’utilitza la comanda “L”.

• BuscaErrorsInBuff(): Aquesta funció busca en el buffer d’entrada InBuff laparaula “ERROR” per detectar els possibles errors que subministra el programamonitor i que sempre tenen el mateix format (la descripció del errorrs s’especificaen la documentació tècnica de la placa TM-683). En el cas de trobar algun errors’informa a l’usuari.

Page 35: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

35

• int GetTime(): Retorna en centéssimes de segon el rellotge del sistema.

3.3 Classe OpcionsComunicació

Aquesta classe conté el formulari Opcions de configuració que permet a l’usuari triarles diferents opcions possibles. La classe s’encarrega d’actualitzar les variables globalscorreponents als paràmetres de configuració que pertanyen a la classe comunicació (cbaud,cport, cparitat, cbitscaràcter, cbitstop) i de cridar a la funció Autocomunicació() de laclasse comunicació, per detectar la configuració del port sèrie establerta en l’entrenador.

Figura 2. Valor per defecte dels paràmetres de la comunicació sèrie.

Page 36: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

36

3.4 Classe Monitor

En aquesta classe s’inclou la pantalla Monitor que permet executar el programa enmode terminal mitjançant les comandes del programa Monitor.

Figura 3. Formulari pantalla Monitor.

El fitxer capçelera de la classe mostra el següent:

class TFormMonitor : public TForm

{

__published: // IDE-managed Components

TRichEdit *Memo1;

void __fastcall Memo1KeyPress(TObject *Sender, char &Key);

void __fastcall Memo1SelectionChange(TObject *Sender);

void __fastcall FormClose(TObject *Sender, TCloseAction &Action);

private: // User declarations

public: // User declarations

bool CambioPorCodigo;

__fastcall TFormMonitor(TComponent* Owner);

};

Bàsicament en aquesta classe apareixen dues funcions, la primera correspon aMemo1SelectionChange(TObject *Sender) que té com a finalitat evitar que l’usuari pugui

Page 37: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

37

situar el cursor en una zona diferent a després de l’últim caràcter escrit i un altre funcióMemo1KeyPress(TObject *Sender, char &Key) que permet l’execució de les comandesque l’usuari prem sobre el Memo que conté la pantalla Monitor (funcionament en modeterminal amb l’ús de les comandes del programa monitor).

Totes les altres visualitzacions corresponents als caràcters enviats o rebuts, es manipulenen les funcions (bàsicament Rebre() i Transmetre()) de la classe Comunicació.

3.5 Classe Execució

Aquesta classe engloba totes les funcions d’execució i inclou el formulari execuciósemblant a la pantalla monitor, per a la visualització de l’execució del programa d’usuari.

Figura 4. Formulari pantalla Execució.

El fitxer de capçalera mostra el següent:

class TFormExecucio : public TForm

{

__published: // IDE-managed Components

TRichEdit *RichEditExecucio;

void __fastcall RichEditExecucioKeyPress(TObject *Sender, char &Key);

void __fastcall FormClose(TObject *Sender, TCloseAction &Action);

private: // User declarations

Page 38: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

38

public: // User declarations

int treuremissatge;

bool ExecucioSenseTBP;

__fastcall TFormExecucio(TComponent* Owner);

bool Rebre();

bool Display();

bool ExecutaSenseTraca();

bool ExecutaSenseTracaBP();

bool ExecutaPasaPasInto();

bool ExecutaPasaPasSobre();

bool ApuntaCodiInto(char *Pc, int Row);

bool ApuntaCodiSobre(char *Pc, int Row);

};

• Int treuremissatge: Serveix per eliminar el missatge “Ejecutando...” quan es fauna execució amb traça (on apareix el form Execució).

• Bool ExecucioSenseTBP: Serveix per indicar que la s’està executant una execucióamb traça amb punts de ruptura. Aquesta variable permetrà aprofitar funcions i/oevents de l’execució amb traça amb punts de ruptura.

• bool Rebre(), bool Display(): Aquestes funcions són molt semblants a lesutilitzades en la classe Comunicació. El sentit de crear-les de nou és per novisualitzar els caràcters en la pantalla monitor (WinITF68K), per no tractar error decomunicació (l’usuari pot executar un programa amb un bucle infinit) i per petitesdiferencies de funcionament de les funcions d’execució.

• bool ExecutaSenseTraca(): [g] Realitza l’execució sense traça i sense punts deruptura on es deix la pantalla execució (semblant a la pantalla monitor) a disposicióde l’execució del programa d’usuari que s’està executant en el microinstructor.

• bool ExecutaSenseTracaBP(): [g] Té el mateix funcionament que la funcióanterior amb la diferencia que aquesta té en compte els punts de ruptura. En aquestcas es selecciona l’instrucció corresponent al punt de ruptura i es deix la pantallaexecució oberta per poder continuar depurant el programa.

• bool ExecutaPasaPasInto(): [t] Permet l’execució pas a pas. En l’execució decada pas es refresca tot el contingut dels objectes presentats per pantalla.

• bool ExecutaPasaPasOnto(): [t] Permet l’execució pas a pas saltant l’execució desubrutines (TRAPS, JSR, BSR). Té el mateix funcionament que l’anterior funcióamb la diferencia que es controla si la instrucció a executar correspona a un salt a

Page 39: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

39

subrutina. En el cas que sigui així, la estratègia seguida per evitar executar pas apas la subrutina és utilitzar un breakpoint (el número 15, destinat per ús intern delWinITF68K) en la següent adreça del codi.

• bool ApuntaCodiInto(char *PC, int Row): Permet visualitzar la selecció de lainstrucció següent d’un pas en l’execució “pas a pas dins” i que ve donada per elcontingut del Program Counter (PC). A més, aquesta també visualitza el codidesensamblat en el cas que la instrucció següent no es mostri en el mateixStringGridCodi.

• bool ApuntaCodiSobre(char *PC, int Row): Té la mateixa finalitat que la funcióanterior amb la diferencia que la selecció prové d’un pas en l’execució “pas a passobre).

3.6 Classe TBreakPoint i Classe Breaks

La classe TBreakPoint s’utilitza per definir un punt de ruptura. Aquesta classe escompon d’una adreça i d’un contador associat. Cada punt de ruptura utilitzat en elprograma crearà un objecte d’aquesta classe i s’utilitzarà en una llista de TBreakPoints.

class TBreakPoint

{

public:

char Adreca[6+1]; //adreça punt ruptura

int Pasos; //comptador associat punt de ruptura

TBreakPoint(char* a, int p) {Pasos=p; strncpy(Adreca,a,6);}

};

La classe Breaks s’encarrega de la manipulació de la llista de punts de ruptura.Malgrat que el programa monitor està limitat a 15 punts de ruptura, s’ha utilitzat una llistaper tal de deixar el programa obert a possibles ampliacions, per la comoditat i optimitzacióque aquestes aporten.

Els punts de ruptura en WinITF68K estan limitats a 15, dels quals 14 estan adisposició de l’usuari i un s’utilitza per a ús intern el l’execució “pas a pas sobre”. La llistaserveix per paliar el problema que presenta el programa monitor en l’execució. L’execuciócomporta la desactivació dels punts de ruptura, amb la qual cosa si es vol fer un altre copl’execució s’han de tornar a activar els breakpoints.

En aquesta classe també es defineixen les funcions generals de punts de rupturarelacionades amb les comandes directes del programa monitor sobre aquests.

Page 40: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

40

class BREAKS

{

public:

BREAKS(); //constructor

~BREAKS(); //destructor

TList *LlistaBreakPoints; //llista de breakpoints

bool AfegirBreakPoint(char*,int);

bool FicarBreakPoint(char *Adreca, int Pasos);

bool ActivarBreakPoints();

bool TreureBreakPoint(char* Adreca);

bool DesactivaBreakPoint(char *Adreca);

bool TreureTotsBreakPoints();

bool DesactivaTotsBreakPoints();

bool AdrecaDinsLlista(char* Adreca);

bool VisualitzaBP();

protected:

private:

};

• TList *LlistaBreakPoints: Aquesta comanda defineix una llista de la classeanterior, és a dir, es defineix una llista de punts de ruptura.

• bool AfegirBreakPoint(char*,int): Crea un breakpoint i s’afegeix a la llista.Posteriorment s’activa el punt de ruptura al microinstructor mitjançant la funciósegüent.

• bool FicarBreakPoint(char *Adreca,in Pasos): [B] S’activa un punt de ruptura almicroinstructor.

• bool ActivarBreakPoints(): Activa tots el punts de ruptura de la llista debreakpoints, en la placa microinstructora mitjançant la funció anterior.

• bool TreureBreakPoint(char* Adreca): Elimina un breakpoint de la llista i eldesactiva a la placa microinstructora mitjançant la funció següent.

• bool DesactivarBreakpoint(char *Adreça): [br] Desactiva un breakpoint en elmicroinstructor.

Page 41: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

41

• bool TreureTotsBreakPoints(): Elimina tots els breakpoints de la llista i elsdesactiva a la placa microinstructora mitjançant la funció següent.

• bool DesactivaTotsBreakPoints(): [bi] Desactiva tots els punts de ruptura en elmicroinstructor.

• bool AdrecaDinsLlista(char* Adreca): Comprova si l’adreça que es passa com aparàmetre està dins la llista de breaks. Serveix per visualitzar els breakpoints enforma de cercle vermell al costat del desensamblat de memòria.

• bool VisualitzaBP(): Correspon a la visualització en forma de cercles vermellsdels punts de ruptura en el StringGridApuntaBP adjunt al StringGridCodi.

3.7 Classe Editor

Aquesta classe inclou una pantalla de diàleg que permet modificar la memòria demanera més ràpida que fent-ho des del StringGridMemoria.

Figura 5. Vista del Editor de memòria.

Les variables i l’organització de les funcions que conté aquesta classe són moltevidents i sencilles, però el contingut de les funcions és bastant complexe. Aquestesfuncions s’encarreguen de comprovar que els valors introduïts siguin correctes, i en cas deno ser-ho mantenen el FocusControl en la casella d’edició, de manera que fins que noestigui correcte no es pugui sortir de la casella. A més d’aquest control d’errors, lesfuncions de la classe determinen la selecció automàtica de la casella on falta especificaralgun valor. També s’han de fer les conversions necessàries dels valors introduïts, que

Page 42: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

42

poden ser hexadecimal, decimal o Ascii al format amb hexadecimal que realment s’enviaràal programa monitor (TM-683).

Cal comentar que tot aquest seguit de funcions de la classe Editor que gestional’error en l’introducció de les dades i realitza les conversions pertinents, utilitzen lesfuncions primàries (relacionades amb les comandes del programa monitor i refresc decontinguts) d’inicialitza, insertar, copiar i moure situades en la classe M68k. Aquestesfuncions corresponen a:

-M68k.InicialitzaPosicioMemoria(...)

- M68k.RefrescaPosicioMemoria(...)

- M68k.InicialitzaBlockMemoria(...)

- M68k.CopiaBlockMemoria(...)

- M68k.MoureBlockMemoria(...)

3.8 Classe PasosBp / TransmetreFitxer / RebreFitxer / Sobre

3.8.1 Classe PasosBP

Aquesta classe conté el formulari punt de ruptura, que permet a l’usuari especificarun comptador associat a un punt de ruptura. Aquesta classe només té com a funciócomprovar que el contigut introduït per l’usuari sigui correcte.

Figura 6. Formulari Punt de Ruptura.

3.8.2 Classe TransmetreFitxer

Cada pantalla de diàleg o formulari implica una nova classe. Aquest és el casd’aquesta classe que només conté l’objecte formulari de la pantalla transmetre fitxer. Enaquest formulari es mostra la barra de procés al transmetre un fitxer s28.

Page 43: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

43

3.8.3 RebreFitxer

Aquesta classe s’encarrega, a part de contindre el formulari associat corresponent a lapantalla rebre fitxer, de comprovar les dades entrades per l’usuari, executar la funció de laclasse comunicació referent a la recepció a un fitxer del contingut de la memòriaComunicacio.RebreFitxerCodi() i de tancar el formulari.

Figura 7. Formulari Rebre Fitxer.

3.8.4 Classe Sobre

Cada pantalla de diàleg o formulari implica una nova classe. Aquest és el casd’aquesta classe que només conté l’objecte formulari de la pantalla sobre.

Figura 8. Formulari Sobre.

Page 44: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

44

3.9 Classe Fitxer

És l’encarregada d’obrir i guardar els fitxers de context .dat. Aquest fitxer contél’informació dels registres, de tota la memòria diferent de zero en posicions de 16 bytes, amés d’un seguit de variables que contenen les adreces de la visualització actual deldesensamblat del codi, memòria i pila. En definitiva, conté tota l’informació necessària delprojecte actual.

El següent taula mostra el format del contingut del fitxer, que correspon al mateix queutilitza el programa simulador SUPERSIMU, de manera que són intercanviables entreambdos programes.

00000100 à Registre dades D0 en format hexadecimal.00000101 à Registre dades D1 en format hexadecimal.00000102 à Registre dades D2 en format hexadecimal.00000103 à Registre dades D3 en format hexadecimal.00000104 à Registre dades D4 en format hexadecimal.00000105 à Registre dades D5 en format hexadecimal.00000106 à Registre dades D6 en format hexadecimal.00000107 à Registre dades D7 en format hexadecimal.00000001 à Registre adreces A0 en format hexadecimal.00000002 à Registre adreces A1 en format hexadecimal.00000003 à Registre adreces A2 en format hexadecimal.00000004 à Registre adreces A3 en format hexadecimal.00000005 à Registre adreces A4 en format hexadecimal.00000006 à Registre adreces A5 en format hexadecimal.00000007 à Registre adreces A6 en format hexadecimal.99999999 à Registre pila USP en format hexadecimal.0003FFFE à Registre pila SSP en format hexadecimal.123456 à Registre Program Counter (PC) en hexadecimal.2222 à Registre estat (SR) en format hexadecimal.0 à enter de 1’adreça on es visualitza el codi0 à enter de l’adreça on es visualitza la memòria.17986919 à enter de l’adreça on apunta la pila visualitzada0 à enter de l’adreça de reset d’execució.02000001020304050607080910111213141516 à adreça i el contingut de 16bytes següents0200101718192021222324252627292930313202002033343536373839404200000000000000* à final de fitxer

Taula 2. Format del fitxer de context.

• bool ObrirProjecte(char *Nomfitxer): Aquesta funció va agafant les dades delfitxer i les visualitza en els diferents objectes de l’escriptori. Aquesta informaciótambé es refresca al microinstructor. L’apartat de inicialitzar la memòria s’utilitzala funció InicialitzaLineaMemoria() que està en la classe M68k.

• bool GuardarProjecte(char *Nomfitxer): Aquesta funció va agafant les diferentsvariables de context i les va gravant al fitxer amb el format que correspon. Tambées guarda els registres.

Page 45: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

45

De moment, no s’ha implementat gravar tota la memòria al fitxer perquè trigariamolt temps (10 min) degut a la comunicació sèrie. S’està treballant en executar unarutina en el microinstructor que permeti saber quines posicions de memòria sóndiferents de zero, amb la qual cosa només es gravarien en fitxer aquestes posicions(s’agafarien 16bytes per mantenir el format del fitxer) la qual cosa comportaria ungran estalvi de temps.

3.10 Classe Menu

Aquesta classe inclou el formulari principal, on s’ubiquen la majoria objectes del’aplicació i on tenen lloc la majoria d’events. En aquest és on hi ha la gestió de lescomandes del menú i els events relacionats amb l’interacció de l’usuari. La majoriad’aquests events criden a funcions d’altres classe ja comentades anteriorment i l’únic quefan és realitzar una comprovació prèvia de les dades que ha entrat l’usuari. Per aquestmotiu no s’entrarà en el detall d’aquestes funcions perquè no tenen el pes més importantdel programa.

Figura 9. Visualització del formulari de la classe FormMenu.

Page 46: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

46

4 Conclusions

Finalitzat el projecte, és hora de mirar endarrera i fer una valoració personal i sinceradel que ha estat el desenvolupament de l’aplicació. El programa està dirigit als alumnes deles assignatures de digitals, que seran els que l’utilitzaran per realitzar-hi les pràctiques.Aquest programa s’ha dissenyat pensant en ells, de manera que s’ha intentat que les einesde desenvolupament i depuració dels programes, fossin el més còmodes possible sensedeixar d’entendre el que s’està fent, que és del que es tracta.

Personalment, crec que s’han assolit les expectatives amb WinITF68K. Aquestsuposa una gran millora pels alumnes a qui va destinat. L’entorn d’aquest programa permetla depuració i execució de programes d’usuari, de manera més fàcil, més ràpida,méscòmode i més entenedora que amb el programa ITF68K.

4.1 Objectius assolits

El principal objectiu fixat des d’un principi era prou simple, tot i que el seudesenvolupament no ha estat gens fàcil. Aquest era crear una aplicació per windows quepogués realitzar totes les tasques que l’actual ITF68K realitza, i millorar la sevafuncionalitat en tots els aspectes possibles.

En principi, aquest objectiu s’ha assolit amb èxit, pel simple fet que en el nouprograma WinITF68K engloba una pantalla que crida al programa monitor. Aquestfunciona exactament igual que el programa MON68K amb el qual aquells possibles errorsque no s’hagin detectat en el desenvolupament i proves del projecte tindran una altre via desolució.

No obstant, deixant de banda el comodí del programa monitor, el WinIF68K és capaçde realitzar totes les funcions que s’han considerat més importants i més habituals, demanera més còmode. S’han deixat de banda un seguit de funcions sense sentit des d’unaperspectiva de windows, com són el rellotge, la calculadora,... i d’altres poc usades comsón checsum, ensamblat..., per centrar-nos en afegir noves funcions que permetran al’usuari estalviar temps a l’hora de resoldre determinats problemes i de realitzar ladepuració dels seus programes. Es recorda que totes aquestes funcions poc utilitzadespoden ser executades des de la pantalla monitor del programa mitjançant les comandescorresponents del programa monitor.

L’entorn gràfic ha millorat molt notablement i s’aconseguit centralitzar, en unamateixa pantalla principal, la visualització de les accions i el contingut dels componentsmés importants de la placa TM-683. L’usuari està molt acostumat a les aplicacionswindows, i qualsevol nou programa de windows li resulta molt fàcil d’explorar id’aprendre a fer-lo servir. Aquest és el cas de WinITF68K, que si a més si se li suma quel’usuari coneix les característiques del microinstructor, el resultat és la ràpida associaciódels components de la placa (memòria, registres, codi, pila, via’s...) amb els objectes quees mostren en el programa.

Cal comentar que el programa Monitor que s’executa en la placa entrenadora, nos’ha modificat. Aquest és el que està a l’altre banda de la comunicació sèrie, i el que ensmarca a través de les seves comandes les opcions possibles que es poden realitzar amb el

Page 47: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

47

microinstructor. És a dir, el programa WinITF68K no podrà realitzar més opcions de lesdisponibles en el programa monitor, tot i que si podrà realitzar aquelles que siguin elresultat de diverses comandes del Monitor.

Deixant de banda les descripcions generals dels objectius assolits, es passarà adescriure més en detall les millores aconseguides amb comparació amb el programaITF68K.

4.1.1 Comparació de forma amb Itf68k

• Entorn gràfic: L’entorn gràfic ha estat un dels motius principals per la realitzaciód’aquest projecte. L’ITF68K presenta un entorn gràfic molt pobre, malgrat serdissenyat per MS-DOS. WinIT68K presenta un entorn gràfic totalment visual, onl’usuari ja preveu el funcionament del programa.

• Accés a dades: El principal problema del ITF68K és que no mostra totes les dadesmés importants alhora. De manera, que s’ha de fer la feina feixuga d’anar avisualitzar cada component individualment a través del menú. Això comporta unapèrdua de temps i haver de memoritzar les anteriors visualitzacions perquè totes lesvisualitzacions es representen en una única pantalla. El WinITF68K ha resoltaquest problema i visualitza tot un seguit de dades alhora. Les dades es refresquenquan es necessari de manera que la visualització es sempre “real”, a excepciódeterminats registres de la Duart i Via’s (registres de lectura/escritura). Per tal, defacilitar l’accés a les dades s’han afegit 2 components nous, que són la visualitzacióde la Pila i la visualització del registres més importants de la VIA’s/DUART, a partdels existents en ITF68K, que són els registres, la memòria, i el codi desensamblat.

• Accés als menús: El sistema de menús del ITF68K presenta un funcionament moltpobre i obligat per realitzar qualsevol funció. El programa WinITF68K disposa de3 maneres de cridar una comanda: la primera és a través d’un menú típic deWindows, el segon és mitjançant tecles ràpides, i per últim per mitjà del’accionament directe a través de botons ubicats en els llocs més adequats del’aplicació, segons la comanda escollida.

• Ús del ratolí: L’ITF68K no suporta el ús de ratolí per la seva aplicació, en canviWinITf68K si. L’ús d’aquest accessori no és totalment imprescindible però moltsusuaris estan acostumats a l’ús del ratolí, la qual cosa els permet la interacció delprograma de manera més còmode.

Page 48: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

48

4.1.2 Comparació de funcionament amb Itf68k

• Edició de dades: Amb el ITF68K alhora de realitzar alguna comanda, a part de ferla seva corresponent crida a través del menú, s’han d’introduir un seguit deparàmetres que es pregunten a l’usuari sobre aquesta comanda. Aquest diàleg delprograma (monitor) amb l’usuari alenteix molt la comunicació. Malgrat que elfuncionament intern del WinITF68K és de la mateixa manera (és una limitació queprové del programa monitor), l’usuari realitza la crida de forma més directa i mésràpida perquè és el WinITF68K qui contesta aquests paràmetres depenent del’entorn visual d’aquell moment.

• Execució de programa d’usuari: Un problema comú que presenta el programamonitor i el programa ITF68K, és una funcionalitat poc entenedora i funcional depunts de ruptura i de les diferents modalitats d’execució de programa. ITF68Kmostra per pantalla els registres, la instrucció executada, i la següent instrucció aexecutar (en el cas de pas a pas). El fet de no poder visualitzar totes les instruccionsanteriors i posteriors fa difícil de seguir el programa. A més, no visualitza l’estat dela memòria i per saber-ho s’ha de sortir de l’execució. Amb el programaWinITF68K s’ha canviat totalment aquest funcionament per passar a utilitzar lamateixa filosofia que segueixen la majoria de llenguatges de programació. Ambaquest nou funcionament en cada execució d’una instrucció, és mostra la instruccióexecutada (seleccionada en el codi desensamblat) i s’actualitzen els registres, la pilai la memòria.

• Punts de ruptura: El funcionament dels punts de ruptura passa més o menys comla funcionalitat anterior. El programa ITF68K no visualitza permanentment elspunts de ruptura la qual cosa fa que l’usuari sigui el qui s’ha de recordar d’aquestsen la depuració del codi. A més presenta un inconvenient que un cop activat unbreakpoint en qüestió, aquest desapareix, de manera que si es torna a començarl’execució aquest ja no existeix.

WinITF68K ha solucionat aquests problemes visualitzant en forma de cerclevermell els punts de ruptura al costat del codi desensamblat de programa. Afegir otreure un punt de ruptura resulta tan fàcil com clickar al costat de cada instruccióamb el ratolí.

Si es fa un reset de programa aquests no desapareixen fins que l’usuari els treuvoluntàriament.

Page 49: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

49

4.2 Problemes i solucions adoptades

A continuació es descriuran els problemes més importats que han sorgit en eldesenvolupament d’aquest projecte i les solucions adoptades per solucionar-los:

• Programació orientada objectes: El principal problema en iniciar aquest projecteha estat aprendre a programar amb Borland C++ Builder. Ha estat difícil saber lespossibilitats d’aquest programa i dels components visuals, i agafar agilitat amb totsels components i eines que ofereix. També resulta força complicat entendre lesclasses molt utilitzades i que serveixen, entre altres coses, per estructurar elprograma. L’aprenentatge s’ha basat en els llibres comentats en la bibliografia, del’ajuda del mateix programa i de l’experiència d’un dels professors del projecteamb aquest llenguatge.

• Comunicació amb el programa Monitor: Windows disposa d’un seguit defuncions i estructures, que poden ser cridades des de Borland C++ (o qualsevolaltre). Aquest conjunt de funcions i estructures són les anomenades winapi’s dewindows, que permeten realitzar tasques directes de windows, com pot ser lacomunicació sèrie. L’ajuda complementària de Borland C++, proporcionainformació de cadascuna d’aquestes funcions individuals. Del que no s’ha poguttrobar informació és sobre les funcions winapi’s que s’havien d’utilitzar per lacomunicació sèrie i un procés a seguir. És bastant trist, perquè és fàcil trobaraplicacions que les utilitzin, la qual cosa fa pensar que la gent que disposad’aquests coneixements se’ls guarda per treure’n beneficis econòmics.

A partir de la documentació extreta de l’apartat de programació avançada de la webde Microsoft (nivell avançat) i a partir d’algun exemple trobat, que per certposteriorment vam descobrir que tenia bastants errors, es va deduir el procés deconfiguració per a la comunicació sèrie. Aquest procés va ser molt laboriós perquèes van haver de fer moltes proves i es va haver d’esbrinar quin era el protocol queutilitza el programa monitor i implementar-lo mitjançant les winapi’s.

El protocol utilitzat per el programa monitor és el XON/XOFF. En la majoria de lesfuncions, el programa monitor responia amb un XOFF quan acabava una tramesa,però n’hi havien d’altres, es desconeix el sentit de fer-ho d’aquesta manera, que nofinalitzaven la comunicació amb aquest caràcter. Aquest fet ha complicat molt elcodi per filtrar aquestes funcions “especials” (funcions de transferència/recepció defitxers, i altres d’especificació de paràmetres d’una funció).

Aquesta comunicació per part del programa WinITF68K va intentar-se fer el mésòptima possible de cara a la velocitat de comunicació i també de cara que elprograma pogués fer altres processos mentre s’estava comunicant. La comunicaciósèrie és molt lenta en comparació a la potencia de càlcul d’un PC i, per tant, esperarque finalitzi la comunicació sense fer res és desaprofitar recursos del PC. Per tald’optimitzar-lo d’aquesta manera, l’única solució possible és utilitzar varis filsd’execució (o Threads) que permeten l’execució de processos “paral·lels”. En elsegüent punt s’explica els principals problemes que van sorgir sobre aquest tema.

• Fils d’execució (Threads): La programació del fils d’execució (l’execució deprocessos en paral·lel), ha resultat bastant complexa. El principal problema es

Page 50: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

50

planteja perquè les funcions o el codi corresponent a cadascun dels fils d’execució,poden accedir a variables globals o funcions dels altres fils d’execució. Llavorsaixò presenta un greu problema perquè vol dir que dos o més fils d’execució podenaccedir al mateix temps a una mateixa variable (o funció), amb la qual cosa, en elmillor dels casos el programa no funcionarà correctament. Per tal que això no passihi ha un seguit de funcions de sincronització i paràmetres de configuració.

El que preteníem per tal d’optimitzar el WinIF68K, era crear 2 fils d’execució. Elprimer seria l’encarregat de tot el programa en general i el segon encarregat de lacomunicació sèrie. D’aquesta manera el programa podia realitzar qualsevol tasca,mentre s’estava produint la comunicació sèrie al mateix temps. Després de fermoltes proves, de llegir molta informació al respecte, vam crear els fils d’execuciócorresponents. Vam crear també events (“interrupcions”) del port sèrie quedespertaven el fil d’execució de la comunicació sèrie només quan era necessària.Tot plegat semblava perfecte, però per motius que desconeixem, el sistema nofuncionava prou bé. Vam estar molt temps intentant esbrinar la possible causad’error, sense tenir èxit.

Creiem que la causa de l’error esdevé de certes funcions del Borland C++ Builder.No totes les funcions pròpies d’un llenguatge de programació suporten els filsd’execució. Normalment, s’especifica en l’ajuda de cadascuna d’aquestes funcionssi és capaç de treballar en fils d’execució. Borland C++ Builder no ha definit quinesfuncions suporten els fils d’execució i sospitem que alguna que hem utilitzat donaerror per aquest motiu.

Els motius que ens van fer desestimar l’ús de fils d’execució va ser bàsicament quehavíem “perdut” molt temps en intentar trobar la causa de l’error i que si aquest eradegut a incompatibilitats de funcions, seria molt difícil de resoldre. L’altre motiu,va ser que el programa WinITF68K és un programa bàsicament de comunicació.Cada cop que s’envia una ordre al programa monitor està a l’espera que elprograma monitor li respongui, de manera que no realitza cap tasca a fer mentres’està duent a terme la comunicació. En aquest cas el temps estalviat no éssignificatiu.

• Ampliació de memòria: Existeix un problema procedent del programa monitor al’accedir a memòria no mapejada o adreces del registre PC imparelles. En aquestcas es produeix un bus error, que dona un missatge d’error i produeix la generaciód’un ABORT amb la qual cosa el valor dels registres canvia a valors aleatoris.Aquest fet porta molts problemes perquè el programa no pot saber de quantamemòria disposa l’emulador TM-683 que està fent servir l’usuari, amb la qual cosano es pot limitar l’accés a determinades posicions de memòria.

Es planteja el problema de si limitar la memòria a un valor fixe, amb la qual cosano es deixa el programa obert a tot tipus de prestacions, o bé si no limitar-la, la qualcosa implicarà que es generarà un Bus error que modificarà el contingut delsregistres i que el programa no podrà evitar (a més pot sorgir algun problema decomunicació momentàniament).

S’ha optat per fixar el límit de memòria al que actualment disposen tots elsmicrointructors de la universitat que és 3FFFF (RAM). S’ha deixat aquest valorlímit com a constant. Si en un futur es vol canviar aquest valor de memòria màximaes pot realitzar canviant el valor d’aquesta constant. Es podria realitzar una pantallade configuració des del mateix WinITF68K per canviar aquest valor.

Page 51: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

51

• Programa Monitor des de el programa WinITF68K: L’aplicació WinITF68Kdisposa d’una opció de funcionar com a terminal del monitor (programa monitordes de la banda del PC). Aquesta funció consisteix en un nou formulari (novapantalla filla) anomenat Monitor des d’on es pot executar qualsevol comandacorresponent al programa MON68K (mirar manual d’usuari referent a lescomandes del programa monitor). A més en aquest formulari es visualitzen tots elsdiàlegs a nivell intern que manté el WinITF68K amb el programa MON68K iviceversa. D’aquesta informació s’ha eliminat tots els caràcters no imprimiblescorresponents a caràcters de control per tal de ressaltar la informació realmentimportant.

Aquesta aplicació de terminal monitor ha portat varis problemes:

Un d’aquest ha estat que les instruccions, i sobre tot els paràmetres que pregunta elprograma monitor un cop cridada una funció, no sempre es responen de la mateixamanera. Per exemple, quan volem fer la execució (g), el programa monitor ensdemana si volem introduir l’adreça inicial o agafar la que tingui el registre PC. Sis’escull per exemple l’adreça, només fa falta prémer la tecla a, en canvi en lasegüent pregunta que realitza sobre la corresponent adreça inicial, s’hauràd’introduir l’adreça i prémer un ENTER. Aquest funcionament, no estandaritzat alllarg de totes les funcions, ha fet complicar el codi.

També ha estat laboriós visualitzar correctament el caràcter RETROCÉS en lapantalla monitor. Aquest és un caràcter més, i el fet de que esborri el caràcterjustament anterior, corre a càrrec del programa. És a dir, quan el programaWinITF68K detecta un caràcter d’aquest, el que fa és esborrar de la pantallamonitor el propi caràcter de retrocés i l’anterior aquest.

S’han hagut de filtrar els caràcters del codi ASCII ampliat, que corresponen a elscaràcters amb accents i altres, perquè no coincidien el codi ASCII ampliat utilitzaten el programa monitor amb l’utilitzat amb el Borland C++ Builder delWinITF68K. El motiu creiem que és la versió en anglès de que disposem delsoftware del Borland C++, no em trobat possibilitat de canviar la taula ASCII nidisposem de la versió en espanyol d’aquest programa.

Page 52: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

52

4.3 Limitacions i possibles millores

Malgrat la nostra ambició perquè aquest projecte fos el més complert i perfectepossible, anant més allà dels objectius inicials, ens és impossible d’aconseguir mésmillores amb el temps preestablert. No obstant, totes les futures modificacions iampliacions poden realitzar-se agafant aquest programa com a base i donant lloc a novesversions.

Hi han hagut limitacions que sabíem d’un principi, però que no entraven dins elsobjectius fixats i altres que han sorgit doncs de l’evolució del projecte.

Cal comentar que bona part de les limitacions del nostre programa són limitacionsprocedents del programa monitor.

A continuació es llistaran un seguit de possibles millores, que en definitiva deixenconstància de les limitacions del nostre programa:

• Millorar la comunicació: Com es pot observar, en el programa WinITF68Ksembla que la comunicació sigui més lenta amb l’entrenador que el programaITF68K. Realment, no és així el que succeeix, és que el programa WinIT68Kpresenta en una sola pantalla la informació més important de l’entrenador, registres,memòria, pila,... Així per exemple, en l’execució d’una instrucció, s’ha de refrescarla informació dels registres, de la memòria, la pila i altres, perquè els seuscontinguts poden haver canviat. El programa ITF68K no presenta aquest problemaperquè l’únic que mostra sempre és el contingut dels registres. En contra, el tempsque es perd després en fer cadascuna de les visualitzacions individuals resulta mésgran i més enfarragós que amb WinITF68K.

S’ha intentat optimitzar al màxim els refrescos innecessaris i la comunicació sèrieen general. La comunicació sèrie no té fama de ser ràpida i per aquest banda pocacosa es pot fer. El que si que es podria realitzar és modificar el programa monitor.Aquest programa està pensat per poder-se executar a través d’un terminal buit. Demanera, que el terminal visualitza estrictament el que el monitor envia. Es per això,per exemple, surten comentaris, títols, conversions ASCII de memòria, línies deguions, etc.., innecessaris que alenteixen la comunicació al haver-hi més caràcters atransmetre.

També es pot observar que és poc òptim l’accés a les comandes. Per exemple, quanes vol visualitzar una zona de memòria és evident que necessitarà d’una adreçainicial com a mínim per l’execució d’aquesta comanda. Llavors, resulta molt pocòptim que el programa WinITF68K (o el ITF68K) hagi de comunicar-se en unprimer moment amb el programa monitor per fer una demanda de visualització dememòria, posteriorment el monitor li contesta a partir de quina adreça inicial, elprograma WinITF68K li ha d’enviar l’adreça i el mateix procés per l’adreça final.Aquesta mena de protocol, alenteix molt l’execució d’una comanda que podriahaver-se simplificat si en un primer moment s’enviava la comanda de visualitzacióde memòria acompanyada dels paràmetres d’adreça inicial i final corresponents.

Bàsicament s’hauria d’optimitzar el funcionament de les comandes del programamonitor i afegir-ne d’altres per tal de millorar la comunicació amb el programaterminal gràfic. A més, les tasques d’operació i conversió que pogués realitzar elPC, les hauria de realitzar aquest per tal d’alliberar recursos del 68K. En definitiva,

Page 53: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

53

s’hauria de canviar la filosofia de funcionament del programa monitor i encara-la ala representació a través d’un programa terminal gràfic.

Cal comentar que s’hauria d’utilitzar un únic protocol i escollir-ne el més adequat.Actualment l’utilitzat majoritàriament és el XON/XOFF, però determinadesfuncions utilitzen un altre protocol no estàndar, que ha complicat el codiinnecessàriament.

• Afegir noves funcions: El programa realitza totes les funcions més importants quel’alumne pot necessitar. Es podrien afegir funcions destinades a usuaris mésavançats, que proporcionessin més informació sobre determinats aspectes mésinterns de la placa i el microprocessador. En aquest cas s’haurien d’estudiar mésconcretament, i fer les modificacions necessàries del programa monitor. Unesd’aquestes funcions podrien ser cronogrames de determinats senyals delmicroprocessador, històrics de senyals, ...

• Opcions de configuració de programa i opcions referents a la placa TM-683:Es podria crear una pantalla de configuració on l’usuari pogués configurar ipersonalitzar WinITF68K. Per exemple es podria definir les adreces per defecte quehan de prendre l’execució del codi i la memòria, triar les visualitzacións per defectedels components del programa (Registres, memòria, pila, codi, Via/Duart,Monitor), el format de visualització de la memòria (hexadecimal, decimal, ascii), ialtres. També seria interessant, definir en aquesta pantalla de configuracionsopcions referents a la placa TM-683. En aquest es podria especificar de maneramanual el rang de direccions de memòria que es disposen en l’entrenador.D’aquesta manera es resoldria el problema comentat en l’apartat de problemes isolucions adaptades sobre el Bus error en accedir a posicions de memòria noexistents.

• Fils d’execució: Com s’ha comentat en l’apartat de problemes i possiblessolucions, es podria optimitzar el programa, utilitzant fils d’execució (Threads). Laprogramació del fils d’execució (l’execució de processos en paral·lel), és bastantcomplexa i el principal problema, a part de la falta d’informació, és que BorlandC++ Builder no ha definit quines funcions suporten els fils d’execució.

• Integrar un paquet del 68K: Personalment, crec que seria molt còmode integrarels 3 softwares relacionats amb el 68k en un de sol (antics programes ENS68K,LINK68K, SIM68K i ITF68K). Aquest any, alguns companys i jo, i els professorscorresponents hem estat treballant en projectes per actualitzar, millorar i passar aWindows aquests 3 softwares. En aquest paquet es podria afegir un editor, amb laqual cosa un mateix programa podria crear un programa codi, ensamblar-lo i linkar-lo, simular-lo i en el cas de disposar de l’entrenador, executar-lo.

L’únic inconvenient que presenta, és que aquests programes tenen finalitatsdidàctiques, amb la qual cosa si es presentés un únic paquet, l’alumne podria noentendre correctament el procés des de que s’escriu el programa fins que s’executarealment i de manera general en el tots sistemes digitals. Aquest procés és el decreació d’un fitxer en ensamblador el qual serà ensamblat i linkat per convertir-lo aun fitxer que el microprocessador és capaç d’interpretar.

• Detalls: Els programes de windows normalment disposen d’un munt de detallsgràfics i estètics als que no li donem importància, però que cadascun requereix delseu apartat de programació. Aquest programa s’ha intentat seguir el màxim

Page 54: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

54

l’estètica windows d’altres programes però segurament es podrien haver afegit mésdetalls, com per exemple escriure el nom del fitxer obert en la barra d’estat...

4.4 Valoració personal

Els motius que em va dur a escollir aquest projecte, van ser principalment dos: Elprimer és que era un projecte que requeria aprendre un llenguatge de programació visualper crear aplicacions windows. No hi havia treballat mai, ni sabia utilitzar cap llenguatged’aquests, cosa tenia ganes de conèixer. El segon motiu és que era un projecte que requeriaaprendre a utilitzar les comunicacions per windows, cosa que també desconeixia i teniaganes d’aprendre. També hi va haver un tercer motiu, que va ser que un dels professorsdirectors del projecte em va comentar que, un cop solucionada la comunicació, la resta deprojecte resultaria senzill. Mentia!

La valoració, pensant amb el motius que em van dur aquest projecte, ha estat moltpositiva. Efectivament, he après a programar o millor dit a defensar-me amb el llenguatgede programació Borland C++ Builder. Aquest llenguatge combina perfectament la potenciadel C++ amb la creació d’aplicacions visuals, a més de proporcionar un seguit depossibilitats, a nivell de base de dades,.. i altres que desconec encara.

També ha estat molt interessant aprendre com funciona windows en el tema de lescomunicacions, events (interrupcions MS-DOS), etc... que no té res a veure amb les delsistema operatiu MS-DOS.

És bastant trist que els beneficis econòmics predominin vers la cultura del saber. Elmotiu d’aquesta reflexió és que ens ha estat impossible d’aconseguir algun exemple decomunicació sèrie mitjançant les winapi’s de windows. Tota la informació trobada estàmolt amagada, és molt poc accessible i poc concreta. La comunicació aconseguida ha estatfruit de moltes hores fent proves a partir de les funcions winapi’s relacionades amb el temade comunicacions.

Ha estat molt gratificant treballar amb els dos professor directors d’aquest projectedels quals he après moltes coses i m’han ajudat moltíssim. Cal agrair-los el fet que semprem’han ajudat en tots els dubtes (que no han estat pocs) i que han tingut la porta del seudespatx oberta per a qualsevol cosa, fins i tot, fora de consultes.

També he trobat molt positiu el fet de conèixer el company que realitzava el projectedel simulador del 68k. Tot i que realitzàvem projectes diferents, ens hem reunit en moltesocasions per tal que els nostres programes tinguessin un entorn visual i accés a les dadessemblant, de manera que a l’usuari final (l’alumne) li resultés fàcil i no es fes un embolicalhora d’utilitzar ambdós programes. D’aquestes reunions han sortit noves idees, i laconfiança ens ha permès ajudar-nos en els dubtes, o consells que sempre són ben vinguts.

Cal comentar que aquest projecte ha estat fruit d’un munt d’hores de treball i que hihagut moments bastant amargs. Moments en els qual les coses no funcionaven de cap

Page 55: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

55

manera i ens adonàvem que el camí emprès no era el correcte i s’havia d’optar per un altre.El tema de les comunicacions ha estat difícil, perquè com que no es disposavad’informació, era qüestió de llegir les funcions winapi’s relacionades i provar les coses tal icom crèiem que podrien funcionar.

També, i fins i tot, el més desesperant eren el problemes que sorgien en els llocsinesperats, com podrien ser: les limitacions no lògiques del programa monitor que nohavíem tingut en compte, el mateix funcionament del Borland C++ Builder en temesd’interrupcions (events),...

En fi, tots aquest moments amargs suposo que es veuran compensats un cop tot aixòarribi a la seva fi definitiva, i més, si els alumnes troben en aquest programa una eina útil ifàcil per a realitzar les seves pràctiques.

Page 56: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

56

5 Bibliografia

Llibres:

- Aprenda C++ Builder en 14 Días (Manual). Kent Reisdorph. Sam’s Publishing.

- C++ Builder 3 Guía del Desarrollador (Manual). Borland.

- Programación con C++ Builder 5. Francisco Charte Ojeda. Anaya.

- Turbo C/C++ Manual de Referencia. Herbert Schildt. McGraw Hill.

- PC Interno 2.0 Programación del Sistema. Michael Tischer. Marcombo.

- Diseño y Programación del uP68000 y Periféricos. Enrique Colona Pous.Universitat Politècnica València.

- Manuals d’usuari dels programes ITF68K / MON68K (TM-683 de PROMAX)

- Datasheets SCN68000.

Webs:

- Borland Oficial Page. (Molt recomanable. Requereix registrar-se però és gratuït).

www.borland.com.

Informació dels productes/ Apartat programació avançada / grups de discussió /etc..

- Club Builder. (Molt recomanable a nivell de Trucs i consulta).

www.arrakis.es/~rporcar/

Aplicacions/Tutorials/llibres/Trucs...

- Microsoft Windows Developer Support. (Indispensable per programació avançada).

http://msdn.microsoft.com/library/default.asp?url=/library/en-s/dnfiles/html/msdn_serial.asp

Document referent a la comunicació sèrie RS-232 en WIN32.

- BeyondLogic.

www.beyondlogic.org/serial/serial.htm

Introducció al port sèrie i al protocol RS-232.

- La Web del Programador

www.lawebdelprogramador.com

Aplicacions/Tutorials/Trucs de tots el llenguatges de programació entre ells C/ C++i C++ Builder.

Page 57: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

WinITF68K: Programa Terminal PelìInstructor 68000 (TM-683 de PROMAX)

Annex I: Manual d’usuari

AUTOR: Joan Cabré Olivé.DIRECTORS: José Luís Ramírez, Enric Cantó.

Page 58: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

2

DATA: Setembre / 2002.ÍNDEX

1. INTRODUCCIÓ. 4

1.1. INSTAL·LACIÓ DEL PROGRAMA ....................................................................................... 41.2. ESPECIFICACIONS PRÈVIES ............................................................................................... 4

2. ORGANITZACIÓ DE L’ESCRIPTORI. 5

3. ORGANITZACIÓ DELS MENÚS. 6

3.1. MENÚ ARXIU ......................................................................................................................... 73.1.1. Transmetre PCè68k ..................................................................................................... 73.1.2. Rebre 68kèPC.............................................................................................................. 83.1.3. Guardar Projecte ............................................................................................................ 103.1.4. Obrir Projecte ................................................................................................................ 113.1.5. Sortir .............................................................................................................................. 11

3.2. MENÚ M68K ........................................................................................................................... 123.2.1. Refresca Registres/Codi/Pila/Memòria/Via’s-Duart...................................................... 123.2.2. Inicialitza Registres........................................................................................................ 123.2.3. Editor de memòria ......................................................................................................... 13

3.3. MENÚ VEURE......................................................................................................................... 183.3.1. Veure Registres/Codi/Pila/Memòria/Via’s-Duart .......................................................... 183.3.2. Veure Monitor ............................................................................................................... 193.3.3. Veure Pantalla Execució................................................................................................ 203.3.4. Mode Visualització memòria: hexadecimal/decimal/ASCII.......................................... 20

3.4. MENÚ EXECUCIÓ.................................................................................................................. 213.4.1. Execució sense traça sense punts de ruptura.................................................................. 213.4.2. Execució sense traça amb punts de ruptura.................................................................... 223.4.3. Inicialitza Execució........................................................................................................ 233.4.4. Execució Pas a Pas dins ................................................................................................. 243.4.5. Execució Pas a Pas sobre ............................................................................................... 253.4.6. Borrar punts de ruptura (Breaks) ................................................................................... 27

3.5. MENÚ COMUNICACIÓ ......................................................................................................... 283.5.1. Connecta ........................................................................................................................ 283.5.2. Desconnecta................................................................................................................... 283.5.3. Opcions Comunicació.................................................................................................... 29

3.6. MENÚ SOBRE......................................................................................................................... 29

4. ORGANITZACIÓ DE LA BARRA D’EINES I BOTONS DIRECTES. 30

5. ORGANITZACIÓ DE LA BARRA D’ESTAT. 31

6. FUNCIONAMENT DEL PROGRAMA. 32

6.1. REGISTRES. ............................................................................................................................ 326.2. CODI......................................................................................................................................... 346.3. PUNTS DE RUPTURA ............................................................................................................ 366.4. PILA.......................................................................................................................................... 386.5. MEMÒRIA ............................................................................................................................... 396.6. DUART / VIA’S. ...................................................................................................................... 40

Page 59: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

3

ÍNDEX

7. MANUAL D’USUARI DEL TERMINAL MONITOR 41

7.1. FUNCIONS DE MANIPULACIÓ DE MEMÒRIA ................................................................. 427.2. FUNCIONS DE MANIPULACIÓ DE REGISTRES ............................................................... 587.3. FUNCIONS DE MANIPULACIÓ D’EXECUCIÓ................................................................... 617.4. FUNCIONS DE MANIPULACIÓ DE BREAKS (Punts de Ruptura)...................................... 687.5. FUNCIONS DE MANIPULACIÓ DE FITXERS .................................................................... 717.6. FUNCIONS PRÒPIES DEL SISTEMA ................................................................................... 72

Page 60: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

4

1 Introducció

Aquesta aplicació informàtica, anomenada WinITF68K, permet el control delmicroinstructor TM-683 de Promax des de un PC personal mitjançant la comunicació sèrieRS-232. Aquest funciona sota el sistema operatiu Windows i es presenta amb un entorngràfic que permet centralitzar, en una mateixa pantalla, les accions que s’estan duent aterme en el microinstructor. Ambdues eines de treball, la placa i el software, permeten al’usuari l’execució i depuració dels programes.

WinITF68K és una evolució del programa ITF68K de MS-DOS i permet realitzartotes les funcions del programa terminal MON68k (que s’executa en el microinstructor i ésel que permet la comunicació amb el programa WinITF68k) de manera més fàcil, simple ientenedora.

L’aplicació que es presenta és capaç de visualitzar i modificar zones de memòria(incloent-hi la Pila i els registres de les VIA’s i la DUART), el contingut dels registres i elsflags d’estat, i visualitzar el desensamblat del codi de programa així com realitzar un seguitde funcions d’execució. Aquestes funcions d’execució són: l’execució pas a pas dins,l’execució pas a pas sobre, l’execució sense traça. A més disposa de la opció de punts deruptura per ajudar a la depuració dels programes.

1.1 Instal·lació

WinITF68K no requereix cap mena d’instal·lació. L’aplicació ha estat creada perfuncionar sobre el sistema operatiu Windows i s’executa de forma directa clickant l’iconaen forma d’escarabat que acompanya l’arxiu WinITF68K.exe.

En l’aplicació s’adjunten diversos arxius d’exemples i un manual d’usuari quecorrespon a aquest document.

1.2 Especificacions Prèvies

Per limitacions del programa monitor la RAM disponible per usuari correspon a:

Ram disponible: 0210BE - 3F7FF (1E741 bytes).

La visualització per defecte al iniciar WinITF68K correspon a l’adreça 23000 pelque fa a la visualització del codi de programa i a l’adreça 25000 pel que fa a visualitzacióde memòria.

L’aplicació ha estat dissenyada per treballar amb una resolució de pantalla de800x600. Tot i que aquesta resolució és la més òptima, l’aplicació és dimensionable altamany que estableixi l’usuari.

Es recomana engegar el microinstructor TM-683 (connectat al PC) abans d’iniciarWinITF68K. En cas de no fer-ho, s’haurà d’engegar el microinstructor abans d’executar“connectar” (Menú Comunicació/Connectar) des del programa WinITF68K en execució.

Page 61: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

5

2 Organització de l’escriptori

L’organització de l’escriptori, tal i com apareix en la figura 1, és l’establerta perdefecte. Certs aspectes de visualització com formularis i finestres, poden activar-se idesactivar-se segons les necessitats del moment.

La visualització dels formularis implica una relació directa amb la quantitatd’informació que s’ha de comunicar amb la placa entrenadora TM-683, amb la qual cosavisualitzar menys formularis implica millorar en rapidesa la comunicació.

Figura 1. Vista de l’organització de l’escriptori de WinITF68K

En la figura1 es poden diferenciar 5 formularis:

• El formulari Registres, on es representa els registres i els flags d’estat.

• El formulari Codi, on es visualitza el desensamblat del codi de programa.

• El formulari Pila, es visualitza la pila agrupada en posicions 2 bytes memòriauna sobre l’altra.

• El formulari Memòria, on es visualitza el contingut d’una zona de memòria.

• El formulari Via1-Via2-Duart, on es visualitzen determinades posicionsd’aquestes.

Page 62: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

6

3 Organització dels menús

La barra de menús se’ns presenta dividida en 5 menús desplegables: Arxiu, M68k,Veure, Execució, i Comunicació.

Per accedir als menús s’ha de polsar sobre el nom d’un d’ells o polsar la tecla “ALT”més la lletra que es mostra subratllada en el nom de cadascun dels menús. D’aquestamanera per exemple per accedir al menú Arxiu, s’haurà de prémer la tecla “ALT”+”a”.

Figura 2. Vista del menú M68k

• Comentar que les comandes acabades en punts suspensius “...”, indiquen que lacomanda obrirà un quadre de dià leg.

• Al costat de cada comanda es mostren la combinació de tecles ràpides quepermeten l’execució d’aquesta sense necessitat d’accedir al sistema de menús.

Page 63: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

7

3.1 Menú Arxiu [ALT+A]

Ens permet accedir a totes les comandes relacionades amb la transmissió i recepcióde arxius de memòria (arxius .s28); d’obrir i guardar arxiu de projecte (variables del’entorn així com l’estat actual dels registres i memòria; correspon als arxius .dat) i lasortida de l’aplicació WinITF68K.

3.1.1 Transmetre PCèè68k [F1]

Aquesta comanda permet carregar el contingut d’un arxiu a la memòria de la placa.

Quan es crida aquesta comanda s’obre el següent dià leg, des d’on es pot indicar ellloc l’origen d’aquest arxiu.

Figura 3. Transmetre Fitxer.

S’observa que només són visibles aquells arxius amb l’extensió *.s28 quecorresponen al format s28 d’ensamblat de codi de programa.

Un cop, escollit l’arxiu el programa es transferirà aquest a la placa. En aquestmoment s’indicarà amb una barra de procés l’evolució de la transferència.

Un cop finalitzat, es visualitzarà en el formulari del codi, el desensamblat delprograma a partir de l’adreça inicial establerta en el mnemotècnics.

Page 64: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

8

3.1.2 Rebre 68kèèPC [F2]

Aquesta comanda permet carregar el contingut d’una zona de memòria de la placa aun arxiu al PC.

Quan es crida aquesta comanda s’obre el següent dià leg, des d’on es pot indicar ellloc de destí d’aquest arxiu.

Figura 4. Rebre a Fitxer.

S’observa que l’extensió amb la qual serà gravada aquest fitxer serà a *.s28, quecorrespon al format Motorola s28.

Un cop introduït en nom de l’arxiu, es mostrarà un altre dià leg que permetrà establirla zona de memòria que es desitja emmagatzemar al fitxer.

Figura 5. Zona memòria a gravar a Fitxer.

• Si no s’especifica adreça final, es copiaran les 10H posicions següents dememòria de l’adreça inicial.

Page 65: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

9

• En el cas que hi hagués algun error en la gravació de determinades posicions dememòria, en l’arxiu resultant s’especificarà l’error generat. Per exemple seria elcas d’intentar guardar determinades posicions de memòria no mapejades (mirarfigura 6).

Un cop escollit l’arxiu del programa i especificada la zona de memòria a copiar alfitxer, es passarà a la recepció d’aquest. En aquest moment s’indicarà amb una barra deprocés l’evolució de la recepció de la memòria transferida per la placa entrenadora cap alfitxer en el PC.

Un cop finalitzat, el fitxer resultant tindrà un aspecte semblant al que es mostra en lafigura. En aquest cas es pot observar que hi hagut un error corresponent a un bus error alintentar accedir a memòria no mapejada (@040000).

S21403FEF033303333333033333333333333333333D0

S21403FF0033333333333344300004000204400000F9

S21403FF10000500007ABC000000050000BA9200024B

S21403FF200440000088160002044000020440000259

S21403FF300440000065440000000D000001000003BB

S21403FF40FFE6000065640003FF8E0000F076000302

S21403FF50FF7A0000001000040000FFFF2FCE595F59

S21403FF60D7FBFFDB6FF6E5F3FEF300020440000069

S21403FF701CDCEEEF7FE7A7FF7EFE34303030300028

S21403FF8000050000533231343034303030303033F3

S21403FF904341464245464146464430303030363784

S21403FFA035323030303030303030374637354539FB

S21403FFB000CE000204400000000500007ABC0000EA

S21403FFC000050000BA9200020440000088160002F2

S21403FFD004400002044000020440000065440000A0

S21403FFE0000F00000010FFDBFDFB0000656400024D

S21403FFF003CAFBEFAFFD00006752000000007F75E9

ERROR 1: Error de bus al leer en la direcci¢n 040000

C¢digo instrucci¢n causante: 1015

Figura 6. Exemple del contingut d’un fitxer de recepció.

Page 66: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

10

3.1.3 Guardar Projecte [CTRL+G]

Aquesta comanda permet crear el que s’ha anomenat fitxers de context. En aquestfitxer es guarda tot un seguit de informació referent a les variables d’entorn que utilitzaWinITF68K per poder visualitzar els components visuals (registres, memòria, pila, codi...).Aquestes variables corresponen a les adreces inicials del codi desensamblat, les adrecesinicials de la memòria, l’adreça base pila d’usuari i supervisor, etc... En aquest mateixfitxer també es guarda el contingut dels registres actuals, de manera que l’usuari podràrestaurar aquesta configuració posteriorment. Aquesta opció agilita i facilita a l’usuari eltreball en un mateix programa al llarg de diversos dies.

Aquests fitxers de context tenen el mateix format que els utilitzats en el programaSUPERSIMU, amb la qual cosa es pot importar el treball realitzat amb el simulador, perpoder comprovar el seu funcionament de forma real amb el programa WinITF68K iviceversa.

Quan es crida aquesta comanda s’obre el següent dià leg, des d’on es pot indicar eldestí i el nom d’aquest fitxer.

Figura 7. Guardar projecte.

S’observa que l’extensió utilitzada per aquest tipus de fitxers correspon a *.dat.

Un cop, escollit el nom i la ubicació del fitxer de context es transferiran les diferentsdades cap aquest.

De moment, no s’ha implementat gravar tota la memòria al fitxer perquè trigariamolt temps (10 min) degut a la comunicació sèrie. S’està treballant en executar una rutinaen el microinstructor per poder gravar només les posicions de memòria diferents de zero,amb la qual cosa s’estalviaria quantitat de caràcters a transmetre i per tant reduiria el tempsen la majoria de casos.

De totes maneres existeix la possibilitat de gravar una zona de memòria mitjançant lafunció rebre fitxer (apartat 3.1.2.).

Page 67: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

11

3.1.4 Obrir Projecte [CTRL+O]

Aquesta comanda permet obrir i restaurar un fitxer de context. Es modificaran elcontingut de les dades de la placa TM-683 i el contingut dels valors de visualització delscomponents visuals de WinITF68K.

Quan es crida aquesta comanda s’obre el següent dià leg, des d’on es pot indicar lalocalització d’aquest arxiu.

Figura 8. Obrir projecte.

S’observa que només són visibles aquells arxius amb l’extensió *.dat quecorresponen al format de fitxer de context .

Un cop escollit el fitxer i la ubicació, aquest transferirà part de les dades a la placaentrenadora i un altre part al contingut del components visuals de WinITF68K.

En aquest moment s’indicarà amb una barra de procés l’evolució de la transferència.Aquest procés pot tardar diversos minuts perquè pot existir gran quantitat de dades atransferir.

Un cop finalitzat, l’entorn de WinITF68K haurà modificat el contingut dels valorsdels seus components així com els punts inicials de les visualitzacions.

3.1.5 Sortir [CTRL+Q]

Clikant aquesta comanda es surt de l’aplicació WinITF68k, de la mateixa manera quesi es prem el botó marcat amb una del formulari principal, o es polsa la combinació detecles “CTRL”+”Q”.

Page 68: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

12

3.2 Menú M68k [ALT+M]

Aquest menú conté les comandes relacionades amb la visualització i modificació deles dades del Microinstructor (TM-683).

3.2.1 Refresca Registres / Codi / Pila / Memòria / Via-Duart

El programa refresca automàticament els contingut de cadascun dels formularis quanalguna acció dona possibilitat a la modificació d’algun d’aquests. De totes maneres,aquestes opcions permeten forçar la comunicació amb la placa entrenadora per al’actualització dels valors representats en els components visuals, en qualsevol moment.

D’aquesta manera tenim les següents opcions:

Refresca Registres o [CTR+F8] è Actualitza el formulari Registres

Refresca Codi o [CTR+F9] è Actualitza el formulari Codi

Refresca Pila o [CTR+F10] è Actualitza el formulari Pila

Refresca Memòria o [CTR+F11] è Actualitza el formulari Memòria

Refresca Via’s/Duart o [CTR+F12] è Actualitza el formulari Via’s/Duart

3.2.2 Inicialitza Registres [CTRL+I]

Aquesta comanda permet inicialitzar el contingut dels registres al valor per defecte.En aquesta instrucció es modifica la pila i els flags corresponents al registre d’estat.

El resultat d’aquesta comanda es mostra en la següent figura:

Page 69: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

13

Figura 9. Valor que prenen els Registres en la comanda inicialitzar.

3.2.3 Editor de Memòria [CTRL+E]

L’aplicació disposa d’un editor de memòria que permet modificar el contingut de lamemòria de forma més fàcil i més ràpida que modificant-la byte a byte en el formulari del’escriptori. Aquest incorpora un seguit de funcions que permeten modificar el contingutzones de memòria, així com copiar, moure, insertar...

Page 70: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

14

Figura 10. Vista de l’Editor de Memòria.

L’editor presenta 3 parts ben diferenciades, la primera part correspon a la dedicada al’edició de memòria, la segona part correspon al format que tindran les dades que seranintroduïdes, i la tercera correspon a l’edició i manipulació de blocs de memòria.

En la zona de format es seleccionarà en quin format seran introduïdes les dadesreferents a la zona d’edició, clickant sobre l’opció desitjada. Les 3 opcions disponibles sónHEX (hexadecimal), DEC (decimal) i ASCII (codi ASCII). En el cas de seleccionar HEX oDEC, s’haurà d’introduir en la casella valor el byte en format hexadecimal o decimalrespectivament, que correspondrà a inicialitzar el valor de l’adreça (en la casella Adreça) aaquest valor. En cas que es seleccioni l’opció ASCII es deshabilitarà la casella valor, i espassarà a habilitar la casella cadena. En aquesta casella s’introduirà una cadena decaràcters, els codis ASCII de cada caràcter s’emmagatzemaran en posicions consecutivesde memòria a partir de l’adreça introduïda en la casella Adreça.

Per introduir les dades en les caselles cal prémer la tecla ENTER. En el cas que hihagi un error en alguna de les dades introduïdes, el cursor es col·locarà en la casella erròniaper tal que l’usuari la rectifiqui. De forma automàtica s’incrementarà l’adreça per tal defacilitar l’accés a la següent posició de memòria. El cursor també es desplaça de formaautomàtica cap a la casella d’on requereix que l’usuari li especifiqui el seu valor.

L’icona que apareix al costat de la casella valor en la zona d’edició, serveix perinsertar en l’adreça especificada els valors introduïts. D’aquesta manera hi haurà undesplaçament del continguts de les adreces cap adreces més grans.

En la part de blocs de memòria, les dades són independents a la zona d’edició. Leslimitacions i funcionament d’aquestes (inicialitzar, copiar i moure) corresponent al mateixfuncionament del programa monitor (mirar apartat 7.1 les funcions [i], [p], [m]).

En aquesta part presenta tres funcions per a la modificació de blocs de memòria:

Page 71: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

15

• Inicialitzar: Aquesta funció inicialitza una zona de memòria, definida perl’adreça inicial i final (casella @Inicial, @Final apartat Font), a un valorintroduït en la casella valor. Per executar aquesta funció només cal clickar enl’icona com la que apareix a l’inici d’aquest punt.

Exemple: En les següents figures es mostra el resultat abans i després

d’inicialitzar la memòria amb l’editor de programa mitjançant l’icona .

Figura 11. Vista de la Memòria abans d’inicialitzar.

Figura 12. Vista de l’Editor de Memòria.

Figura 13. Vista de la Memòria després d’inicialitzar.

Page 72: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

16

• Copiar: Inicialitzar: Aquesta funció copia una zona de memòria, especificadaper l’adreça inicial i final (casella @Inicial, @Final aparat Font), a una altra zonade memòria ubicada a partir de l’adreça destí (casella @Inicial apartat Destí). Perexecutar aquesta funció només cal clickar en l’icona com la que apareix a l’inicid’aquest punt.

Exemple: En les següents figures es mostra el resultat abans i després de copiaruna zona de memòria a un altra amb l’editor de programa mitjançant l’icona

.

Figura 14. Vista de la Memòria abans de copiar.

Figura 15. Vista de l’Editor de Memòria.

Figura 16. Vista de la Memòria després copiar.

Page 73: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

17

• Moure: Inicialitzar: Aquesta comanda funciona de la mateixa manera que lafunció COPIA comentada anteriorment, amb la diferencia que la zona dememòria inicial un cop copiada s’inicialitza tota a zero. Aquesta funció requereixde l’adreça inicial i final (casella @Inicial, @Final aparat Font) i l’adreça destí(casella @Inicial apartat Destí). Per executar aquesta funció només cal clickar enl’icona com la que apareix a l’inici d’aquest punt.

Figura 17. Vista de la Memòria abans de moure.

Figura 18. Vista de l’Editor de Memòria.

Figura 19. Vista de la Memòria després moure.

Page 74: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

18

3.3 Menú Veure [ALT+V]

A través d’aquest menú s’accedeix a les comandes relacionades amb la activació /desactivació de la visualització dels diferents formularis que es composa WinITF68K. Enaquest trobem també el mode de visualització del contingut de la memòria(hexadecimal/decimal/ASCII).

3.3.1 Veure Registres / Codi / Pila / Memòria / Via’s-Duart

Cadascuna de les comandes correspon a la activació o desactivació de lavisualització de cadascun dels formularis de que consta el formulari principal WinITF68K.La desactivació de cadascun d’ells s’aprofita per tal de visualitzar més informació delsaltres formularis en el cas que sigui possible. Cal comentar que menys formularis visiblesimplica menys informació que s’ha de comunicar amb el microinstructor, amb la qual cosaes redueix temps total de comunicació i per tant s’aconsegueix més rapidesa en els refrescsdel WinITF68K.

D’aquesta manera tenim les següents opcions:

Veure Registres o [CTR+F1] è Activa/Desactiva el formulari Registres

Veure Codi o [CTR+F2] è Activa/Desactiva el formulari Codi

Veure Pila o [CTR+F3] è Activa/Desactiva el formulari Pila

Veure Memòria o [CTR+F4] è Activa/Desactiva el formulari Memòria

Veure Via’s/Duart o [CTR+F5] è Activa/Desactiva el formulari Via’s/Duart

Page 75: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

19

3.3.2 Monitor [CTRL+F6]

Aquesta comanda obre la finestra anomenada monitor. Des d’aquesta l’usuari pottreballar en mode terminal, amb un menú idèntic al que apareix en el programa Monitor (elque corre en el microinstructor).

Aquesta pantalla també serveix per observar quin és el llenguatge que utilitza elprograma WinITF68K per comunicar-se amb la placa TM-683. Aquesta comunicacióconsisteix en la crida de les funcions disponibles del programa Monitor (MON68K).

La pantalla monitor guarda tot l’historial de instruccions enviades del WinITF68K iles dades rebudes enviades per el MON68K des de l’arrancada de WinITF68K.

En l’apartat 7, es descriu el funcionament de les funcions del programa Monitor, quepermeten executar qualsevol instrucció per mitjà de la finestra monitor (terminal MonitorPC). Les funcions d’execució [g] i [G] no es poden executar des de la pantalla monitor,però si que poden fer-ho des de la pantalla execució que es descriurà en el següent apartat(3.3.3).

Per tal de visualitzar aquesta pantalla monitor, que per defecte es mostra desactivada,

s’ha de clickar en l’opció Veure Monitor de la barra de menús, o clickar en l’icona dela barra d’eines, o prémer les tecles [CTR+M].

Figura 20. Vista del Programa Monitor

Page 76: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

20

3.3.3 Pantalla Execució [CTRL+F7]

En l’execució sense traça, la pantalla execució es mostra de manera que es pot tornaraccedir a l’escriptori de WinITF68K sense necessitat de tancar-la. Quan es preml’escriptori, la pantalla execució queda tapada per la pantalla de WinITF68K. Aquestafunció permet tornar a visualitzar la pantalla d’execució que havia quedat amagada deforma ràpida sense necessitat de moure o minimitzar formularis.

Figura 21. Vista de la Pantalla Execució.

3.3.4 Mode Visualització Memòria: Hexadecimal / decimal / ASCII

Aquestes comandes corresponen al mode de visualització del contingut de lamemòria (formulari memòria). Per defecte aquest mode està en Hexadecimal.

D’aquesta manera tenim les següents opcions:

Hexadecimal o [F10] è Visualització en Hexadecimal

Decimal o [F11] è Visualització en Decimal

ASCII o [F12] è Visualització en ASCII.

Page 77: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

21

3.4 Menú Execució [ALT+E]

Aquest menú permet escollir una varietat de comandes relacionades amb l’execuciódel programa d’usuari. En aquest menú també s’inclouen opcions de punts de ruptura(breakpoints).

Per ajudar al desenvolupament de programes, la família 68000 permet l’execució deinstruccions en mode traça. Quan està habilitat aquest mode (flag T mostra el seu estat), esforça a una excepció després de l’execució de cada instrucció. Aquest funcionamentpermet monitoritzar l’execució sota determinades condicions.

3.4.1 Execució sense Traça i sense Punts de Ruptura [F9]

Aquesta comanda permet l’execució sense traça, en temps real del programa.Aquesta execució no té en compte els punts de ruptura que puguin existir i s’executa apartir de l’adreça especificada en la casella Inicialitza Execució (apartat 3.4.3). Aquestacasella també correspon a l’adreça d’inicialització de l’execució del programa, o sigui ques’haurà de tenir compte segons la comanda a realitzar. El motiu d’aquest funcionament esperquè habitualment aquestes dues adreces coincideixen.

Al executar la comanda es visualitzarà un nou formulari en forma de pantalla, on elcontrol passarà a mans del programa de l’usuari. Per tal de cancel·lar l’execució ofinalitzar-la cal tancar aquesta pantalla . En aquest moment es refrescaran totes les dadesde l’escriptori.

Figura 22. Exemple d’Execució sense Traça sense Punts de Ruptura.

Page 78: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

22

3.4.2 Execució sense Traça amb Punts de Ruptura [F5]

Aquesta comanda permet l’execució sense traça considerant els punts de rupturafixats. Per poder a dur a terme aquesta operació el programa monitor comprova si lasegüent instrucció coincideix amb algun punt de ruptura.

Aquesta funció restarà deshabilitada en el cas que no existeixi cap punt de rupturaactivat. Un cop s’hagin recorregut tots els punts de ruptura, la següent execució equivaldràa “l’execució sense traça sense Punts de Ruptura” comentada anteriorment.

El codi del programa s’executa a partir de l’adreça seleccionada en el formulari codi(es selecciona clickant amb el ratolí damunt la instrucció o movent el cursor).

Al executar la comanda es visualitzarà un nou formulari en la pantalla d’execució, onel control passarà a mans del programa de l’usuari. En aquest, és on també apareixeran elsmissatges de punts de ruptura “Breakpoint en la dirección “ que informarà a l’usuari quel’execució s’ha parat en aquest punt. En aquest moment, l’usuari pot tornar a l’escriptori deWinIT68K per tal de visualitzar l’estat dels registres o de la memòria, o pot continuar fentla depuració del programa ja sigui mitjançant l’execució pas a pas o fent alguna de lesexecucions sense traça.

Per tal de cancel·lar l’execució o inicialitzar-la, cal tancar la pantalla execució o

prémer l’icona inicialitza execució , des de l’escriptori de WinITF68K.

Figura 23. Exemple d’Execució sense Traça amb punts de ruptura

Page 79: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

23

3.4.3 Inicialitza Execució [F6]

Aquesta funció és l’encarregada de posar el programa en l’estat inicial. Aixòcorrespon a inicialitzar els registres als valors per defecte (mirar apartat 3.2.2.), activar elspunts de ruptura i, visualitzar i seleccionar l’adreça del codi de programa especificat en lacasella inicialitza execució.

L’adreça inicialitza execució es pot modificar clickant en l’icona situada al costat

de l’icona . D’aquesta manera es desplegarà una casella d’on es podrà modificar el seucontingut. Automàticament, el valor de l’adreça inicialitza execució correspon a l’adreçainicial de l’últim codi transferit (*.s28), a menys que és modifiqui manualment l’usuari..

Cal comentar que l’adreça que conté la casella inicialitza execució també s’utilitzacom adreça inicial per realitzar l’execució sense traça sense punts de ruptura, amb la qualcosa s’haurà de tenir en compte aquest valor segons la comanda a realitzar.

En la següent figura es mostra els resultat després de la crida a la comanda inicialitzaexecució partint de l’exemple anterior.

Figura 24. Visualització de l’escriptori després d’inicialitzar execució partint de l’exemplede la figura anterior.

Page 80: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

24

3.4.4 Execució Pas a Pas dins [F7]

Aquesta comanda és l’encarregada d’anar executant instrucció per instrucció el codide programa. La comanda “pas a pas dins” realitza l’execució de la instrucció de l’adreçaseleccionada en el formulari codi. En l’execució d’aquesta funció és seleccionarà lasegüent adreça a executar i es refrescarà el continguts dels registres, memòria (incloses Viai Duart) i pila.

Les següents figures mostren l’execució d’una instrucció abans i després de lacomanda “pas a pas dins”.

Figura 25. Visualització de l’escriptori abans de l’execució pas a pas dins.

Page 81: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

25

Figura 26. Visualització de l’escriptori després de l’execució pas a pas dins.

3.4.5 Execució Pas a Pas Sobre [F8]

La següent comanda funciona de la mateixa manera que la comanda anterior (pas apas dins) amb la diferència que es salta la visualització de l’execució “pas a pas dins” deles subrutines (corresponen a les instruccions JSR i BSR). És a dir, es segueix el mateixfuncionament que l’execució “pas a pas dins” exceptuant el cas que la instrucciócorrespongui a un salt a subrutina. En aquest cas, s’executa la subrutina i es retorna al’adreça de retorn. En aquest moment es seleccionarà la instrucció següent i es refrescaràels valors dels registres, pila i memòria en el escriptori.

Aquesta comanda es molt útil a l’hora d’utilitzar els traps i a l’hora de comprovar elfuncionament del programa principal. També serveix per comprovar el funcionament deles subrutines.

L’execució “pas a pas sobre” s’iniciarà en la instrucció seleccionada en el formularicodi. L’execució de la subrutina pot trigar cert temps, durant el qual el programa nopossibilita la interacció de l’usuari.

Les següents figures mostren l’execució d’una instrucció abans i després de lacomanda “pas a pas sobre”.

Page 82: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

26

Figura 27. Visualització de l’escriptori abans de l’execució pas a pas sobre.

Figura 28. Visualització de l’escriptori després de l’execució pas a pas sobre.

Page 83: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

27

3.4.6 Borrar punts ruptura (Breaks) [CTRL+B]

Els punts de ruptura són molt útils perquè permeten parar l’execució del programa enuna adreça determinada. D’aquesta manera l’usuari pot comprovar el correctefuncionament del seu programa i optimitzar-lo.

Per ficar un punt de ruptura només cal clickar amb el ratolí al marge esquerra deldesensamblat de memòria a l’altura de l’adreça on es desitja afegir el punt de ruptura. Alafegir aquest punt apareixarà un cercle vermell indicatiu en el marge. En l’apartat 6.3. esmostra més informació sobre els punts de ruptura així com exemples.

La comanda borrar punts de ruptura és l’encarregada de borrar tots els punts deruptura afegits per l’usuari. Cal comentar que els punts de ruptura no desapareixen

inicialitzant l’execució , si no que s’han de treure voluntàriament, ja sigui un a un, o bémitjançant aquesta funció que permet eliminar-los tots d’un sol cop.

Page 84: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

28

3.5 Menú Comunicació [ALT+C]

El menú Comunicació permet configurar els paràmetres de la comunicació sèrie, aixícom iniciar i finalitzar la comunicació On-Line amb la placa entrenadora TM-683.

3.5.1 Connecta [F3]

Aquesta comanda permet iniciar la comunicació On_Line amb el microinstructorTM-683. Un cop executada, el programa omple el contingut dels registres, codi, pila, imemòria que es mostren en els diferents formularis del WinITF68K, a partir de l’estatactual en la placa entrenadora.

Cal comentar que en iniciar el programa automàticament es crida aquesta funció. En

el cas d’existir un error de comunicació es desconnecta automàticament.

Per executar aquesta comanda només cal cridar la opció connecta del menú

comunicació, o clickar en l’icona de la barra d’eines o prémer la tecla [F3].

3.5.2 Desconnecta [F4]

Aquesta comanda finalitza la comunicació amb la placa TM-683.

Cal comentar que en finalitzar el programa aquesta comanda es cridaautomàticament, de la mateixa manera succeeix en el cas d’existir un error decomunicació.

Per executar aquesta comanda només cal cridar la opció connecta del menúcomunicació, o clickar en l’icona de la barra d’eines o prémer la tecla [F4]

Per fer un reset al programa WinITF68K es pot fer a partir de la prèvia execució dela comanda Desconnecta (sempre que s’estigui prèviament connectat) i posterior execucióde la comanda Connecta. A més si es vol es pot realitzar un reset de tot el sistema fent unreset a la placa entrenadora i posteriorment prosseguir de la mateixa manera comentadaanteriorment.

Page 85: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

29

3.5.3 Opcions Comunicació [CTRL+O]

Opcions de Comunicació obre una pantalla de dià leg en la qual es pot configurar demanera manual i automàtica els paràmetres de la comunicació sèrie amb el microinstructor.

• La opció manual ha de coincidir, evidentment, amb els valors configurats enl’entrenador TM-683. Les possibles configuracions de la placa TM-683 es mostraen un esquema adjunt al entrenador i es configura a la rutina de reset que pren elsparàmetres dels microrruptors (els leds mostren l’estat).

• L’opció autoconfiguració detecta automàticament els paràmetres de comunicació,però, pot requerir cert temps detectar-la (4 o 5 minuts màxim).

Els valors per defecte corresponen als següents valors:

Figura 29. Valor per defecte dels paràmetres de la comunicació sèrie.

3.6 Menú Sobre [ALT+O]

Aquest menú presenta un dià leg on es mostra dades referents al programa. Aquestescorresponen al nom del programa, la versió, i la gent que ha fet possible aquesta aplicació.

Figura 30. Formulari Sobre.

Page 86: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

30

4 Organització de la barra d’eines i botons directes

El programa WinITF68K es composa d’una barra d’eines situada sota la barra demenús i d’un seguit de botons directes que permeten l’execució directe d’una comanda. Espodria dir que aquests botons pertanyen funcionalment a la barra d’eines amb la diferenciaque s’han ubicat en formularis relacionats amb el seu funcionament.

Icona Funció que realitza

Obri un fitxer de context (*.dat).

Guardar un fitxer de context (*.dat).

Transmetre fitxer *.s28 de PCè 68K.

Rebre un fitxer *.s28 de 68KèPC.

Execució sense Traça sense Punts de Ruptura.

Execució sense Traça amb Punts de Ruptura

Execució Pas a Pas into.

Execució Pas a Pas onto (no entra en les subrutines).

Inicialitza Execució.

Visualitza la casella que defineix l’adreça

d’inicialització de programa i de l’Execució sense Traça

amb punts de ruptura.

Borra tots els punts de ruptura.

Visualitza el formulari Registres.

Visualitza el formulari Codi.

Visualitza el formulari Pila.

Visualitza el formulari Memòria.

Visualitza el formulari Via’s/Duart.

Visualitza la pantalla Monitor.

Visualitza la pantalla Execució (si està habilitada)

Page 87: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

31

Connecta/Desconnecta la comunicació amb la placa.

Visualitza el codi en a partir de l’adreça del PC.

Visualitza la codificació de les instruccions del Codi.

Visualitza la pila de Supervisor/Usuari.

Visualitza la memòria en Hexadecimal/decimal/ASCII.

Visualitza l’Editor de memòria.

Inicialitza els registres.

Modifica els flags d’estat: Flag de signe, negatiu, zero,desbordament, carry, traça, pila SSP/USP i màscara deinterrupcions.

5 Organització de la barra d’estat

Aquesta barra situada a la part inferior de la pantalla del WinITF68K, proporcionainformació sobre l’estat de la comunicació del sistema. El panell d’estat de color verd queapareix a la part esquerra de la barra d’estat, indica que hi ha transmissió o recepció dedades en aquell moment.

Figura 31. Barra d’estat en procés de Transmissió.

Figura 32. Barra d’estat en procés de Recepció.

Figura 33. Barra d’estat indicant Error de comunicació.

Page 88: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

32

6 Funcionament del programa

6.1 Registres

En el següent figura es mostra el formulari Registres:

Figura 34. Vista del formulari Registres.

En aquest es visualitzen els registres del microprocessador 68K. Els registres citatscorresponen al registres de dades (D0-D7), els registres d’adreces (A0-A7), el registre decomptador de programa (PC), d’estat (SR) i de Pila (STACK). Aquest últim mostra les dospiles disponibles: la SS que correspon a la Pila de Supervisor i US que correspon a la pilad’usuari.

§ Comptador de programa de 24 bits.§ Pila d’usuari i pila de supervisor de 32 bits.§ Registre d’estat de 16 bits.

Page 89: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

33

§ Vuit registres de dades (D0 - D7) de 32 bits§ Vuit registres d’adreces (A0 - A7) de 32 bits.

El contingut d’aquests registres es pot modificar seleccionant la casella corresponenti modificant el seu valor. El programa generarà un missatge d’error en el cas que el valorintroduït sigui erroni.

Perquè el valor sigui modificat s’ha de prémer la tecla ENTER, en aquest moment elprograma transferirà aquest valor a la placa entrenadora.

El registre d’estat s’ha visualitzat en mode bit a bit per poder identificar millor l’estatdels flags. El resultat d’aquest correspon a un seguit de botons de color verd que indiquenel següents flags:

Figura 35. Vista dels flags d’estat.

§ X flag d’extensió de signe.§ N flag de negatiu.§ Z flag de zero.§ V flag de desbordament.§ C flag de ”carry”.§ T flag de mode Traça§ S flag de pila Supervisor§ I2-I0 flag de màscara de Interrupcions.

L’estat activat (bit=1), correspon a l’estat del botó polsat. D’aquesta manera en lafigura anterior es mostra un únic flag activat que correspon a el flag S.

A la part inferior del formulari Registres apareix un botó que permetinicialitzar el valors dels registres. Els valors per defecte establers són els que mostra lafigura9.

Page 90: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

34

6.2 Codi

En la següent figura es mostra el formulari Codi, que visualitza el desensamblat dememòria:

Figura 36. Vista del formulari Codi

La casella d’edició que es mostra a la part superior del formulari codi, permet al’usuari definir l’adreça inicial del desensamblat de memòria que es desitja visualitzar. Encas d’error al introduir l’adreça, un missatge especificarà l’error comès.

Quan es transfereix un fitxer *.s28 a la placa, WinITF68K visualitza de formaautomàtica el desensamblat del codi a partir de l’adreça inicial d’aquest.

Al costat dret de la casella d’edició apareix un botó que permet visualitzar elcodi desensamblat a partir de l’adreça que marca el registre de Comptador de Programa(PC).

Page 91: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

35

Els botons , situats al costat dret de la casella d’edició, permeten la visualitzacióde la següent o anterior pàgina de codi desensamblat. En passar pàgina es tornen avisualitzar les 4 últimes instruccions anteriors o posterior per tal de facilitar la lectura delcodi.

Si es polsa el botó , a la dreta es mostra la codificació de les instruccions. Aquestinformació per defecte està amagada per no ser molt utilitzada i perquè ocupa espai en

l’escriptori. Per tornar a l’estat inicial de la pantalla s’ha de prémer novament el botó .

Figura 37. Vista del formulari Codi ampliat amb la codificació de les instruccions.

Page 92: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

36

6.3 Punts de Ruptura (Breaks)

Els punts de ruptura són molt útils perquè permeten parar l’execució en una adreçadeterminada. D’aquesta manera l’usuari pot comprovar el programa i depurar-lo.

Per ficar un punt de ruptura només cal clickar amb el ratolí al marge esquerra deldesensamblat de memòria a l’altura de l’adreça on es desitja afegir el punt de ruptura. Alafegir aquest punt apareixarà un cercle vermell indicatiu en el marge.

Figura 38. Visualització de 3 punts de ruptura.

La següent figura mostra punts de ruptura activats en les adreces 25002, 25008 i25001E.

Page 93: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

37

Hi ha dos tipus de punts de ruptura:

• Si es clicka amb el botó esquerra del ratolí, s’afegeix un punt de ruptura amb uncomptador associat a un valor 1. D’aquesta manera l’execució del programa espararà un cop el comptador de programa passi el primer cop per l’adreça fixada.

• Si es clicka amb el botó dret del ratolí, apareix un dià leg on apareix una casellad’edició referent al valor de comptador. D’aquesta manera, si per exemple,s’introdueix un valor de 10, l’execució es pararà un cop el comptador deprograma hagi passat les 10 vegades per l’adreça fixada. Aquesta opció es moltútil a l’hora de comprovar bucles.

Figura 39. Comptador del punt de ruptura

Per treure un punt de ruptura només cal tornar a clickar, tant amb el botó del’esquerra com el de la dreta del ratolí en el cercle vermell indicatiu de punt de rupturaactivat.

Si es desitja eliminar tots els punts de ruptura de tot el programa només cal prémerel botó .

Amb inicialitzar l’execució no s’eliminen els punts de ruptura establerts i aquestshauran de ser eliminats de forma voluntària per part de l’usuari.

El nombre màxim de punts de ruptura és 14, per limitacions del programa monitor.

Page 94: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

38

6.4 Pila

El formulari Pila ens permet visualitzar la Pila d’usuari i la Pila de supervisor. Tal icom es pot observar en la figura, la pila es mostra amb words de memòria situats un asobre de l’altre, ja que la pila manté aquesta estructura per evitar adreçaments il·legals.

Figura 40. Visualització de la Pila Supervisor i Pila Usuari.

Per visualitzar les diferents piles només cal prémer un dels botons situats a lapart superior del formulari. El botó polsat indica que s’està visualitzant la pila amb el nomdel botó. En la figura anterior es mostra a l’esquerra la pila de supervisor i a la dreta la pilad’usuari.

Cal comentar que es pot visualitzar la pila independentment de la que s’estiguiutilitzant per programa.

Els botons permeten anar visualitzant les següents i anteriors pagines de la pila.En el cas que l’adreça actual on apunta la pila estigui dins la pàgina de visualització delpila mostrada s’indicarà amb una fletxa de color verd .

Page 95: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

39

6.5 Memòria

El Formulari Memòria permet la visualització d’una zona de memòria especificadaper l’usuari en la casella @ inicial. En el cas d’introduir de forma errònia l’adreça en lacasella es mostrarà un missatge de l’error corresponent.

Les tecles permeten avançar o retrocedir de pàgina amb la conseqüentvisualització del contingut de la memòria de les adreces posteriors i anteriorrespectivament. Aquesta mateixa funció pot ser executada en prémer les tecles Repàg oAvpàg del teclat.

Figura 41. Vista del formulari Memòria.

En la part superior del formulari apareixen tres icones que canvien elmode de visualització de la memòria. Aquestes icones corresponen a la visualització enhexadecimal, decimal o ASCII. En l’exemple es mostra activada la icona Hex, la qual cosaindica que el contingut de la memòria s’està visualitzant en mode hexadecimal.

Per modificar el contingut d’alguna posició de memòria només cal introduir el nouvalor, en el format en el que s’estan visualitzant les dades, en la casella corresponent en lataula.

Per tal de facilitar la manipulació del contingut de memòria, existeix un editor quepermet funcions de manipulació de blocs de memòria. Per executar-la només cal prémer

l’icona . En l’apartat 3.2.3 s’explica el detall el funcionament d’aquest editor.

Page 96: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

40

Figura 42. Vista de l’Editor de memòria

6.6 DUART / VIA’s

El formulari Via’s-Duart mostra alguns dels registres més importants i habituals deles dos VIA’s i de la DUART del microinstructor.

Els valors que aquí es mostren estan en hexadecimal i es pot modificar el seucontingut modificant la casella del registre en qüestió. En cas d’error al introduir el nouvalor, un missatge mostrarà la causa d’quest.

Cal comentar que els registres IRA-ORA, IRB-ORB de les VIAS i els registres ISR-IMR, i RHRA-THRA de la DUART són registres que tenen diferents funcions si s’efectuauna operació de lectura o escriptura. És a dir per exemple, les caselles IRA i ORA,corresponen a un únic registre. En aquest cas, quan es realitza una operació de lectura esmostra el valor del port d’entrada que es visualitza en la casella amb l’etiqueta IRA.Aquest valor pot variar depenent del que hi hagi connectat a la Via, de manera que perassegurar-nos del valor real en un determinat instant s’hauria de refrescar el contingut delformulari (Menu M68k/ Refresca Via’s-Duart). En el cas que es vulgui modificar el port desortida s’hauria de introduir el valor en la casella ORA. L’últim valor introduït restarà enaquesta casella.

Aquests registres especials, s’han desdoblat per facilitar la comprensió de que no éspodrà llegir mai el valor que em escrit en un d’aquests registres (perquè estaríem llegint elvalor d’entrada) , de la mateixa manera que mai podrem escriure el valor del registre delectura (perquè estaríem escrivint el valor de sortida). L’únic que fa el WinITF68K en elsregistres especials en escriptura és recordar l’últim valor introduït per part d’usuari, en casque l’execució del programa codi canviï aquests valors, no hi ha manera de saber el valorescrit.

Figura 43. Vista del formulari Via’s-Duart

Page 97: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

41

7 Manual d’usuari del Terminal Monitor

A continuació es descriurà a mode de manual d’usuari, tota la informació referent ales funcions disponibles del programa Monitor, que permetran a l’usuari el control ivisualització de les operacions de l’emulador TM-683 de Promax.

Abans d’iniciar la descripció de cadascuna de les comandes, així com exemplesd’aquestes, es recordarà el mapa de memòria del microinstructor:

Adreces Tipus Contingut

000000 - 00FFFF EPROM Programa Monitor (1)

010000 - 01FFFF EPROM Sòcol d’expansió

020000 - 03FFFF RAM Memòria del sistema (2)

040000 - 05FFFF RAM Possible expansió

060001 – 06001F VIA1 Entrada/Sortida

060021 – 06003F VIA2 Entrada/Sortida

060041 – 06005F DUART Entrada/Sortida

060061 – 06007F E/S Possible expansió de E/S

Taula 1. Mapa de memòria del microinstructor TM-683

(1) Les adreces 000000-0003FF corresponen a la taula de vector d’excepcions delprocessador .

(2) Les adreces 020000-020E35 estan reservades per ús intern del programaMonitor.

Funció: ?

Aquesta comanda permet visualitzar sobre la pantalla terminal, el menú d’opcionsdel programa monitor.

Page 98: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

42

>?

- FUNCIONES DE MANIPULACION DE MEMORIA - - FUNCIONES DE MANIPULACION DE REGISTROS -

s : inicializar posición de memoria. r : visualizar registros.

i : inicializar bloque de memoria. R : modificar un registro.

d : volcar bloque de memoria. ri: inicializar registros.

u : desensamblado bloque de memoria.

a : ensamblar nemónicos en memoria.

c : comparar bloques de memria. - FUNCIONES DE EJECUCION -

m : mover un bloque de memria. g : ejecutar en tiempo real.

p : copiar bloc de memòria. G : ejecución pseudoreal.

n : insertar posiciones de memoria. t : ejecutar paso a paso.

f : buscar en bloque de memoria. T : ejecutar con traza.

k : 'checksum' bloque de memoria. vt: ver traza.

- FUNCIONES DEL SISTEMA - - FUNCIONES DE BREAKS -

? : menú. B : añadir un breakpoint.

e : estado del sistema. b : visualizar breakpoints.

sh: poner hora. br: eliminar un breakpoint.

vh: ver hora. bi: inicializar tabla breakpoints

pr: parar reloj.

dh: decimal a hexadecimal. - FUNCIONES DE MANIPULACION DE FITXEROS -

hd: hexadecimal a decimal. l: carga de un absoluto a la placa.

reset: ‘reset’ de la placa. L: transferencia de un absoluto al PC.

>

A continuació es descriuran cadascuna de les comandes que mostra el menúd’opcions pels diferents apartats en que s’engloben.

7.1 Funcions de manipulació de memòria

Les funcions disponibles en aquest apartat són les següents:

s: inicialitzar posició de memòria

i: inicialitzar bloc de memòria

d: bolcar un bloc de memòria

u: desensamblat bloc de memòria

a: ensamblar pneumònics en memòria

c: comparar blocs de memòria

m: moure un bloc de memòria

Page 99: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

43

p: copiar un bloc de memòria

n: insertar posicions de memòria

f: buscar un bloc de memòria

k: ‘check-sum’ bloc de memòria

Funció: s

Permet modificar el contingut d’una posició de memòria (byte) i les següents.

A l’executar-la apareixerà en pantalla el següent missatge:

Al introduir l’adreça, apareixerà en pantalla l’adreça (6 dígits) i el seu corresponentcontingut, quedant el cursor a la dreta a l’espera que s’entri per teclat el nou contingut de laposició de memòria.

• Els valors introduïts han d’estar en hexadecimal, del contrari no seran acceptats. Sis’intenta modificar una posició de memòria fora del mapa accessible per l’usuari,es generarà un BUS ERROR.

• Si s’introdueix un RETURN, la posició de memòria no altera el resultat i esmostrarà la següent posició de memòria per si es desitja modificar-la.

• Per abandonar la funció s’ha d’introduir un punt (.) en el contingut de la posició dememòria que s’està apuntant en aquell moment.

Exemple: A continuació l’inicilitzarà les posicions de memòria a partir de l’adreça22000H:

>s - Inicializar posición de memoria -

Dirección : 22000

022000 00 00

022001 00 11

022002 00 22

022003 00 33

022004 00 44

022005 00 55

022006 00 66

022007 00 .

>

En el bolcat de memòria, al que s’accedeix per la funció d, la qual es descriurà acontinuació, pot observar-se el resultat de l’exemple anterior:

Page 100: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

44

>d - Volcar bloque de memoria -

Dirección inicial: 22000

Dirección final: 22010

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

022000 | 00 11 22 33 44 55 66 00 00 00 00 00 00 00 00 00 -> ..”3DUf.........

022010 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

>

Funció: i

Permet inicialitzar un bloc de memòria a un valor determinat, de manera que tot el bloc dememòria contindrà el mateix valor de la posició (byte) que s’hagi introduït.

Al executar-la apareixerà en pantalla el següent missatge:

>i - Inicializar bloque de memoria -

Dirección inicial:

Després d’introduir el valor de l’adreça inicial, es demana a l’usuari que introdueixil’adreça final del bloc.

Un cop, introduïda aquesta adreça, es demanarà que l’usuari que introdueixi el valor delbyte amb el que es pretén inicialitzar tot el bloc de memòria.

• No existeix cap limitació pel tamany del bloc a inicialitzar, tot i que l’usuari no had’accedir a posicions de memòria no accessibles per l’usuari o inexistents. Enaquest cas, es generarà un BUS ERROR.

• Novament, tant el valors de les adreces com el dels valors seran introduïts enhexadecimal.

Exemple: A continuació l’inicilitzarà el bloc de memòria comprés per adreces 30000H i30050H al valor AA.

>i - Inicializar bloque de memoria -

Dirección inicial: 30000

Dirección final: 30050

octeto: AA

>

En el bolcat de memòria, que s’accedeix per la funció d, la qual es descriurà acontinuació, pot observar-se el resultat de l’exemple anterior:

Page 101: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

45

>d - Volcar bloque de memoria -

Dirección inicial: 30000

Dirección final: 30050

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

030000 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030010 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030020 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030030 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030040 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030050 | AA 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

>

Funció: d

Permet el bolcat en pantalla del contingut d’una zona de memòria definida per l’usuari.

Al executar-la apareixerà en pantalla el següent missatge:

>d - Volcar bloque de memoria -

Dirección inicial:

Un cop introduïda aquesta adreça inicial, el programa sol·licita l’adreça final.

• Si no s’especifica aquesta adreça final, i es respon amb un RETURN, apareix enpantalla el contingut de 100H posicions de memòria.

• Si s’especifica una adreça final, de manera que el bloc definit supera el tamany de100H, és podrà parar la pantalla amb CTRL-S i continuar amb CTRL-Q.

• Pot parar-se el bolcat de memòria en qualsevol moment al introduir CTRL-C, ambel que apareix el prompt (>) del monitor.

• No existeix cap limitació per aquesta funció exceptuant si s’intenta accedir aposicions de memòria no disponibles per usuari o inexistents, amb la qual cosa esrespondrà amb un BUS ERROR.

Exemple 1: A continuació es mostra un exemple on l’usuari ha definit l’adreça inicial a30000H i l’adreça final a 30017H. S’observa que el programa sempre mostra líniessenceres de 16 posicions de memòria, per tant es mostrarà fins la 3001FH.

Page 102: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

46

>d - Volcar bloque de memoria -

Dirección inicial: 30000

Dirección final: 30017

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

030000 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030010 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

>

Exemple 2: Es mostra a continuació, l’aspecte del resultat de l’execució de la funció d,quan l’usuari no especifica l’adreça final de la zona de memòria que s’ha de visualitzar.

Per defecte es mostren 256 posicions, l’equivalent a 100H posicions en hexadecimal, queocupen la totalitat de la pantalla.

>d - Volcar bloque de memoria -

Dirección inicial: 30000

Dirección final:

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

030000 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030010 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030020 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030030 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030040 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

030050 | AA 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

030060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

030070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

030080 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

030090 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

0300A0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

0300B0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

0300C0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

0300D0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

0300E0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

0300F0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

>

Exemple 3: A continuació es mostra el que succeeix en el cas d’accedir a una posició noaccessible per l’usuari o no existent en el mapa de memòria.

Page 103: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

47

>d - Volcar bloque de memoria -

Dirección inicial: 50000

Dirección final:

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

ERROR 1: Error de bus al leer en la dirección 050000

Código instrucción causante: 1D9C

>

Funció: u

Aquesta funció permet el desensamblat de blocs de memòria.

Al executar-la apareixerà en pantalla el següent missatge:>u - Desensamblado de la memoria -

Dirección inicial:

L’usuari ha d’especificar l’adreça inicial i posteriorment s’haurà d’especificar l’adreçafinal com a resposta al programa monitor.

• Si no s’especifica l’adreça final, i es respon amb un RETURN, es realitzarà eldesensamblat equivalent a una pantalla de visualització (22 línies).

• Si s’intenta accedir a posicions de memòria no accessibles per l’usuari o inexistentses generarà un BUS ERROR.

• Si l’especificació de l’adreça final supera la capacitat de representació de lapantalla, és possible parar la imatge amb CTRL-S i continuar la inspecció ambCTRL-Q.

• Pot cancel·lar l’execució de la funció amb CTRL-C en qualsevol moment.

Exemple 1: A continuació es mostra un exemple on s’especifica l’adreça inicial i l’adreçafinal de desensamblat.

>u - Desensamblado de la memoria -

Dirección inicial: 25000

Dirección final: 25020

025000 2E7C 00027000 MOVEA.L #$27000,A7

025006 267C 00026000 MOVEA.L #$26000,A3

02500C 4247 CLR.W D7

02500E 4879 00025104 PEA.L #$25104

025014 203C 00000019 MOVE.L #$19,D0

02501A 4E40 TRAP #0

02501C 588F ADDQ.L #4,A7

02501E 203C 00000017 MOVE.L #$17,D0

>

Page 104: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

48

Exemple 2: El següent exemple es mostra un desensamblat el qual l’usuari no haespecificat l’adreça final.

>u - Desensamblado de la memoria -

Dirección inicial: 25000

Dirección final: 25020

025000 2E7C 00027000 MOVEA.L #$27000,A7

025006 267C 00026000 MOVEA.L #$26000,A3

02500C 4247 CLR.W D7

02500E 4879 00025104 PEA.L #$25104

025014 203C 00000019 MOVE.L #$19,D0

02501A 4E40 TRAP #0

02501C 588F ADDQ.L #4,A7

02501E 203C 00000017 MOVE.L #$17,D0

025024 4E40 TRAP #0

025026 1400 MOVE.B D0,D2

025028 2F00 MOVE.L D0,-(A7)

02502A 203C 00000018 MOVE.L #$18,D0

025030 4E40 TRAP #0

025032 588F ADDQ.L #4,A7

025034 1002 MOVE.B D2,D0

025036 0C02 000D CMPI.B #$0,D2

02503A 6700 000E BEQ.L $S0,D0

02503E 16C2 MOVE.B D2,(A3)+

025040 0647 0001 ADDI.W #$1,D7

025044 4EF9 0002501E JMP $2501E

02504A 4879 00025165 PEA.L $25165

025050 203C 00000019 MOVE.L #$19,D0

>

Exemple 3: El següent exemple mostra el resultat al intentar desensamblar l’adreça40000H la qual està fora del mapa de memòria.

>u - Desensamblado de la memoria -

Dirección inicial: 40000

Dirección final:

ERROR 1: Error de bus al leer en la dirección 040000

Código instrucción causante: 1010

>

Page 105: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

49

Funció: c

Aquesta funció serveix per comparar dos blocs de memòria definits per l’usuari. El resultatd’aquesta operació són els corresponents missatges sobre les posicions (bytes) que hanresultat diferents.

Al executar-la apareixerà en pantalla el següent missatge:

>c - Comparar bloques de memoria -

Dirección inicial:

L’usuari ha d’especificar l’adreça inicial i final del primer bloc de memòria, iposteriorment, l’adreça inicial del segon bloc de memòria.

• Si no s’especifica aquesta adreça final, i es respon amb un RETURN, el programaagafa per defecte les 100H posicions de memòria com a tamany del bloc.

• En els missatges que genera la funció, apareixen les dues posicions que han resultatdiferents i els seus respectius continguts.

• CTRL-S i CTR-Q serviran respectivament, per poder parar i continuar la imatgedels missatges i continguts, quan el número de posicions de memòria diferentsexcedeixi a la capacitat de representació per pantalla.

Exemple 1: En l’exemple següent, l’usuari ha definit un bloc de memòria entre lesadreces 25100H i 25110H, el qual vol comparar amb el bloc de memòria que comença al’adreça 30000H.

>c - Comparar bloques de memoria -

Dirección inicial: 25000

Dirección final: 25010

Dirección: 30000

Diferentes: 025000 2E 00 030000

Diferentes: 025001 7C 00 030001

Diferentes: 025003 02 00 030003

Diferentes: 025004 70 00 030004

Diferentes: 025006 26 00 030006

Diferentes: 025007 7C 00 030007

Diferentes: 025009 02 00 030009

Diferentes: 02500A 60 00 03000A

Diferentes: 02500C 42 00 03000C

Diferentes: 02500D 47 00 03000D

Diferentes: 02500E 48 00 03000E

Diferentes: 02500F 79 00 03000F

>

Page 106: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

50

Funció: m

Aquesta funció mou un bloc de memòria, sense limitació en quan a tamany, provocant undesplaçament de la zona de memòria adjacent.

Al executar-la apareixerà en pantalla el següent missatge:

>m - Mover bloque de memoria -

Dirección inicial:

L’usuari especificarà l’adreça inicial del bloc de memòria a moure, i a continuació esdemanarà que s’especifiqui l’adreça final del bloc.

En qualsevol cas s’ha d’anar en compte en l’execució d’aquesta funció, ja que produeix lapèrdua del contingut de les adreces originals del bloc mogut.

Cal considerar els dos casos possibles d’aquesta funció que donen dos resultats diferents:

a) Moviment d’un bloc de memòria des d’una adreça original a una posiciómenor.

En aquest cas, l’adreça especificada com a destí es la primera del bloc mogut. Laquantitat total de memòria resulta : Adreça final - Adreça destí -1 (hexadecimal)

Exemple: En l’exemple següent, l’usuari desitja moure un bloc comprés entre lesadreces 30016H i 30019H, que prèviament s’inicialitzen amb la funció s, a laposició 30000H.

>s - Inicializar posición de memoria -

Dirección : 30016

030016 00 16

030017 00 17

030018 00 18

030019 00 19

03001A 00 1A

03001B 00 .

>m - Mover bloque de memoria -

Dirección inicial: 30016

Dirección final: 30019

Dirección : 30000

Page 107: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

51

>d - Volcar bloque de memoria -

Dirección inicial: 30000

Dirección final: 3001F

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

030000 | 16 17 18 19 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

030010 | 00 00 00 00 00 00 00 00 00 00 1A 00 00 00 00 00 -> ................

>

b) Moviment d’un bloc de memòria des d’una adreça original a una posiciósuperior.

En aquest cas, l’adreça especificada com a destí serà la immediatament següent albloc, un cop mogut. La quantitat total de memòria resulta: Adreça destí – Adreçainicial (hexadecimal).

Exemple: El següent exemple mostra el cas del moviment d’un bloc de memòria decomprés entre les adreces 30000H i 30003H per ser mogut a la posició 30015H.En aquest exemple s’agafa els valor del resultat de l’exemple anterior.

>m - Mover bloque de memoria -

Dirección inicial: 30000

Dirección final: 30003

Dirección : 30015

>d - Volcar bloque de memoria -

Dirección inicial: 30000

Dirección final: 30015

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

030000 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

030010 | 00 16 17 18 19 00 00 00 00 00 1A 00 00 00 00 00 -> ................

>

Funció: p

Aquesta funció permet copiar un bloc de memòria, conservant el bloc inicial.

Al executar-la apareixerà en pantalla el següent missatge:

L’usuari ha d’especificar l’adreça inicial i final del bloc que desitja copia. Posteriorments’ha d’especificar l’adreça inicial on es desitja copiar aquest bloc de memòria.

Page 108: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

52

Exemple 1: En el següent exemple l’usuari a escollit copiar el bloc de memòria comprèsentre les adreces 25200H i 25215H, a l’adreça 25250H.

>d - Volcar bloque de memoria -

Dirección inicial: 25200

Dirección final: 2526F

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

025200 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025210 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025220 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025230 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025240 | 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 -> UUUUUUUUUUUUUUUU

025250 | 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 -> UUUUUUUUUUUUUUUU

025260 | 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 -> UUUUUUUUUUUUUUUU

>

>P - Copiar bloque de memoria -

Dirección inicial: 25200

Dirección final: 25215

Dirección: 25250

>

>d - Volcar bloque de memoria -

Dirección inicial: 25200

Dirección final: 2526F

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

025200 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025210 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025220 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025230 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025240 | 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 -> UUUUUUUUUUUUUUUU

025250 | AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA -> ................

025260 | AA AA AA AA AA AA 55 55 55 55 55 55 55 55 55 55 -> ......UUUUUUUUUU

>

Un cas especial a tenir en compte, és la possibilitat de copiar una zona de memòria sobre simateixa (solapament). En aquest cas no es produeix pèrdua d’informació sinò que la zonad’origen queda sobreescrita per la zona on ha anat a parar la copia.

Exemple 2: Aquest exemple il·lustra l’anterior cas comentat. Es mostra la copia d’unazona de memòria compresa entre les adreces 22000H i 2200F, que es copia sobre si

Page 109: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

53

mateixa a l’adreça 22005H. S’observa que les adreces a partir de l’adreça final quedensobreescrites.

>d - Volcar bloque de memoria -

Dirección inicial: 22000

Dirección final: 2200F

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

025200 | 00 11 22 33 44 55 66 77 00 00 00 00 00 00 00 00 -> ..”3DUfw........

>

>P - Copiar bloque de memoria -

Dirección inicial: 22000

Dirección final: 22005

Dirección: 22003

>

>d - Volcar bloque de memoria -

Dirección inicial: 22000

Dirección final: 2200F

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

025200 | 00 11 22 00 11 22 33 44 55 00 00 00 00 00 00 00 -> ..”..”3DU.......

>

Funció: n

Permet insertar continguts de posicions de memòria, produint-se un desplaçament de lesposicions adjacents cap els valors més elevats dins el mapa de memòria.

Al executar-la apareixerà en pantalla el següent missatge:

>n - Insertar posicions de memoria -

Dirección :

Un cop especificada l’adreça inicial on es desitja insertar el contingut de memòria,s’escriurà el contingut desitjat.

• Un cop introduït el contingut el programa apuntarà a la següent posició de memòriaper si es desitja insertar més posicions.

• Si s’introdueix un RETURN o un punt (.) en el contingut de la posició de memòriaque s’està apuntant en aquell moment, abandonarà la funció.

Page 110: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

54

Exemple 1: En el següent exemple s’observa un cas en el que s’ha insertat 4 posicions dememòria a partir de l’adreça 30000H. El resultat és un desplaçament de les posicionsadjuntes, cap a valors més alts.

>d - Volcar bloque de memoria -

Dirección inicial: 30000

Dirección final: 30020

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

030000 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

030010 | 00 16 17 18 19 00 00 00 00 00 1A 00 00 00 00 00 -> ................

030020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

>

>n - Insertar posiciones de memoria -

Dirección : 30000

030000 AA

030001 AA

030002 AA

030003 AA

030004 .

>

>d - Volcar bloque de memoria -

Dirección inicial: 30000

Dirección final: 30020

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

030000 | AA AA AA AA 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

030010 | 00 00 00 00 00 16 17 18 19 00 1A 00 00 00 00 00 -> ................

030020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> ................

>

S’ha d’anar en compte, en la pèrdua dels últims bytes de la zona de memòria d’usuaricorresponent a les posicions 3F7FF i anteriors, al executar la funció n.

Exemple 2: El següent exemple il·lustra aquest problema. S’observa que en l’operaciód’insertar s’estan perdent els últims bytes de memòria disponible.

Page 111: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

55

>d - Volcar bloque de memoria -

Dirección inicial: 3F7F0

Dirección final: 3F800

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

03F7F0 | 00 00 00 00 00 00 00 00 00 99 AA BB CC DD EE FF -> ................

03F800 | 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF -> ................

>

>n - Insertar posiciones de memoria -

Dirección : 3F7F0

03F7F0 44

03F7F1 44

03F7F2 44

03F7F3 .

>

>d - Volcar bloque de memoria -

Dirección inicial: 3F7F0

Dirección final: 3F800

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

03F7F0 | 44 44 44 00 00 00 00 00 00 00 00 00 99 AA BB CC -> DDD.............

03F800 | 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF -> ................

>

Funció: f

Permet buscar una determinada cadena de bytes, de longitud inferior a 80 caràcters, en unbloc de memòria.

En executar-la apareixerà en pantalla el següent missatge:

>f - Buscar en bloque de memoria -

Dirección inicial:

L’usuari ha d’especificar l’adreça inicial i final del bloc de memòria en el qual s’ha de ferla recerca. A continuació s’introduirà una llista de caràcters (bytes) a buscar.

• Si no s’especifica adreça final, el programa realitzarà la recerca en una zonaequivalent a 100H posicions.

• La introducció dels caràcters es farà amb hexadecimal i la separació entre posicions(bytes) es farà amb RETURN. Per finalitzar la introducció s’ha de prémer de nouRETURN.

Page 112: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

56

• En el cas que existeixin moltes posicions de memòria que compleixin la condiciódefinida, podrà parar la visualització en pantalla i reiniciar-la amb CRTL-S iCTRL-Q respectivament.

Exemple: El funcionament d’aquesta funció es mostra en els següent exemple.

>s - Inicializar posición de memoria -

Dirección : 23456

023456 00 06

023457 00 10

023458 00 10

023459 00 10

02345A 00 .

>

>s - Inicializar posición de memoria -

Dirección : 33344

033344 00 06

033345 00 10

033346 00 10

033347 00 10

033348 00 .

>

>d - Volcar bloque de memoria -

Dirección inicial: 23450

Dirección final: 2345F

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

023450 | 00 00 00 00 00 00 06 10 10 10 00 00 00 00 00 00 -> ................

>

>d - Volcar bloque de memoria -

Dirección inicial: 33340

Dirección final: 3334F

direc. 0 1 2 3 4 5 6 7 8 9 A B C D E F

--------------------------------------------------------

033340 | 00 00 00 00 06 10 10 10 00 00 00 00 00 00 00 00 -> ................

>

>f - Buscar en bloque de memoria -

Dirección inicial: 22000

Dirección final: 3FFFF

Lista de bytes a buscar:

06 10 10 10

Page 113: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

57

buscando...

Hallado: 023456

Hallado: 033344

>

Funció: k

Aquesta funció s’utilitza per determinar el checksum (suma acumulada) de la zona dememòria que s’especifica.

En executar-la apareixerà en pantalla el següent missatge:

>k - Checksum bloque de memoria -

Dirección inicial:

L’usuari especificarà l’adreça inicial i final del bloc de memòria.

• En cas de no especificar adreça final es farà el cà lcul de les 100H posicions dememòria.

Exemple 1: Aquest primer exemple mostra el resultat del checksum on l’usuari haespecificat com adreça inicial la posició 22000H i com a final la 3FFFF.

>k - Checksum bloque de memoria -

Dirección inicial: 22000

Dirección final: 3FFFF

Checksum = 3A

>

Exemple 2: Aquest segon exemple mostra el cas en el que no s’especifica adreça final(RETURN).

>k - Checksum bloque de memoria -

Dirección inicial: 22000

Dirección final:

Checksum = 32

>

Page 114: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

58

7.2 Funcions de manipulació de registres

Les funcions disponibles en aquest apartat són les següents:

r: visualitzar registres

R: modificar un registre

ri: inicialitzar registres

Funció: r

Aquesta funció permet la visualització dels registres d’usuari. Amb la crida d’aquestafunció apareix un llistat dels registres actuals amb els seus continguts.

Registres de dades: D0-D7

Registres d’adreces: A0-A7

Stack Pointer d’usuari: USP

Stack Pointer de sistema: SSP

Comptador de Programa: PC

Registre d’estat: SR

Al executar-la apareixerà en pantalla el següent resultat:

>r

pc: 000094B8 sr: 2004 ssp: 0003FF2A usp: AF6F7EAB

d0: 00000000 d1: 00000001 d2: 00000001 d3: 00000001

d4: EB6B5FFF d5: 3FC933E7 d6: FDE977FD d7: FFEF7BFF

a0: 00040000 a1: 00000000 a2: 0003FFC6 a3: 0000F114

a4: FFFF3FF7 a5: 7FBF7FFF a6: 0003FF46 a7: 0003FF2A

>

Funció: R

Aquesta funció permet modificar el contingut dels registres de la CPU.

Al executar-la apareix un missatge que sol·licita a l’usuari l’identificador del registre amodificar.

Page 115: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

59

• Si s’intenta modificar el contingut del Comptador de Programa (PC) i s’especificauna adreça imparell, el programa no permetrà la seva modificació i tornarà asol·licitar el nou contingut del registre

• El programa sempre agafa els dos dígits de més pes del registre PC com 00, tot ique l’usuari els hagi definit diferent d’aquest valor (a causa de la possibilitat dedireccionament del microprocessador).

• El mateix succeeix amb el cas del Status Register, on alguns dels seus bits estanfixats a zero. Segons l’especificació del fabricant aquests bits són els que ocupen laposició: 5,6,7,8,9,10,12 i 14 considerant el registre de 16 bits.

Exemple 1: A continuació es mostra un exemple on l’usuari ha modificat els registres D0 iA0.

>R

Registro a modificar: d0

d0 = 123456

>

>R

Registro a modificar: a0

a0 = FFFFFF

>

>r

pc: 000094B8 sr: 2004 ssp: 0003FF2A usp: AF6F7EAB

d0: 00123456 d1: 00000001 d2: 00000001 d3: 00000001

d4: EB6B5FFF d5: 3FC933E7 d6: FDE977FD d7: FFEF7BFF

a0: 00FFFFFF a1: 00000000 a2: 0003FFC6 a3: 0000F114

a4: FFFF3FF7 a5: 7FBF7FFF a6: 0003FF46 a7: 0003FF2A

>

Exemple 2: El següent exemple mostra un error d’adreça imparella en intentar accedir auna adreça imparella del Comptador de programa. Al mateix temps s’observa quèsucceeix si els dos primers dígits de l’adreça, especificats per l’usuari, són diferents de 0.

>R

Registro a modificar: pc

pc = 00123111

No puede ser impar

pc = ff123c00

>

Page 116: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

60

>r

pc: 00123C00 sr: 2004 ssp: 0003FF2A usp: AF6F7EAB

d0: 00123456 d1: 00000001 d2: 00000001 d3: 00000001

d4: EB6B5FFF d5: 3FC933E7 d6: FDE977FD d7: FFEF7BFF

a0: 00FFFFFF a1: 00000000 a2: 0003FFC6 a3: 0000F114

a4: FFFF3FF7 a5: 7FBF7FFF a6: 0003FF46 a7: 0003FF2A

>

Exemple 3: El següent exemple mostra el resultat d’intentar posar tots els bits del StatusRegister a “1”.

>R

Registro a modificar: sr

sr = ffff

>

>r

pc: 00123C00 sr: A71F ssp: 0003FF2A usp: AF6F7EAB

d0: 00123456 d1: 00000001 d2: 00000001 d3: 00000001

d4: EB6B5FFF d5: 3FC933E7 d6: FDE977FD d7: FFEF7BFF

a0: 00FFFFFF a1: 00000000 a2: 0003FFC6 a3: 0000F114

a4: FFFF3FF7 a5: 7FBF7FFF a6: 0003FF46 a7: 0003FF2A

>

Funció: ri

Aquesta funció permet inicialitzar els registres al seu valor per defecte que és el que esmostra a continuació:

SR=2000 , és a dir, mode supervisor i sense traça.

SSP=A7=3FFFE, que correspon a la part superior de la memòria RAM de sistema.

ALTRES=0, la resta de registres s’inicialitzen a zero.

Exemple: A continuació es mostra el resultat d’executar aquesta funció.

>r

pc: 00123C00 sr: A71F ssp: 0003FF2A usp: AF6F7EAB

d0: 00123456 d1: 00000001 d2: 00000001 d3: 00000001

d4: EB6B5FFF d5: 3FC933E7 d6: FDE977FD d7: FFEF7BFF

a0: 00FFFFFF a1: 00000000 a2: 0003FFC6 a3: 0000F114

a4: FFFF3FF7 a5: 7FBF7FFF a6: 0003FF46 a7: 0003FF2A

>

Page 117: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

61

>ri

>

>r

pc: 00000000 sr: 2000 ssp: 0003FFFE usp: 00000000

d0: 00000000 d1: 00000000 d2: 00000000 d3: 00000000

d4: 00000000 d5: 00000000 d6: 00000000 d7: 00000000

a0: 00000000 a1: 00000000 a2: 00000000 a3: 00000000

a4: 00000000 a5: 00000000 a6: 00000000 a7: 0003FFFE

>

7.3 Funcions d’execució

Les funcions disponibles en aquest apartat són les següents:

g: executar en temps real

G: executar pseudoreal

t: executar pas a pas

T: executar amb traça

vt: veure traça

Funció: g

Aquesta funció permet l’execució sense traça d’un programa.

Al executar-la apareixerà en pantalla el següent resultat:

>g - Ejecución en tiempo real -

Pc/Dirección? (P/A)

L’usuari haurà d’especificar l’adreça a partir de la qual desitja executar el programa, o bé,indicar si ha d’executar-se des de la posició indicada pel comptador de programa.

Posteriorment, el programa preguntarà si es desitja l’activació dels punts de ruptura.

• Cal comentar que aquesta funció deixa l’execució en mans del programa codi, demanera que si aquest no finalitza o entra en un bucle infinit provocarà quel’execució no finalitzi mai. Per restaurar el sistema es necessitarà fer un reset a laplaca entrenadora.

Page 118: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

62

Exemple: A continuació es mostra el resultat d’executar un programa d’ordenació (demajor a menor). L’usuari ha especificat executar el programa a partir de l’adreça 25000Hi no activa cap punt de ruptura. Els comentaris addicionals que apareixen són fruit de lapròpia execució del programa.

>g - Ejecución en tiempo real -

Pc/Dirección? (P/A) A

Dirección : 25000

Activar los breakpoints? (S/N) N

Ejecutando...

Introduzca los caracteres a ordenar:

43276890ABFDE

Se han ordenado 000013caracteres. Su tabla ordenada es:

FEDBA98764320

>

Funció: G

Aquesta funció permet l’execució amb traça, que provoca que el programa monitor,després d’executar cada instrucció comprovi si la següent instrucció que ha d’executarcoincideix amb algun punt de ruptura de la taula definida per l’usuari.

En executar-la apareixerà en pantalla el següent resultat

>G - Ejecución pseudo-real -

Pc/Dirección? (P/A)

L’usuari, novament, ha d’especificar l’adreça inicial de la qual desitja iniciar el programa obé, si desitja executar-lo a partir de la posició indicada pel comptador de programa.

• En aquest cas no es fa la pregunta referent a l’activació dels punts de ruptura, ja queés inherent a aquesta funció.

Exemple: Es mostra, a continuació, un exemple d’aquesta funció. Els comentarisaddicionals que apareixen són fruit de la pròpia execució del programa.

Page 119: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

63

>G - Ejecución pseudo-real -

Pc/Dirección? (P/A) A

Dirección : 25000

Ejecutando...

Introduzca los caracteres a ordenar:

43276890ABFDE

Se han ordenado 000013caracteres. Su tabla ordenada es:

FEDBA98764320

>

Funció: t

Aquesta funció té com a resultat l’execució pas a pas d’un programa.

En executar-la apareixerà en pantalla el següent missatge:

>t - Ejecución paso a paso -

Pc/Dirección? (P/A)

L’usuari ha d’especificar l’adreça a partir de la qual desitja executar el pas a pas, o béespecificar que sigui l’adreça de la posició del registre comptador de programa.

Un cop definida l’adreça inicial, el programa mostrarà els registres de la CPU, eldesensamblat de la propera instrucció a executar i la pregunta sobre el número de passos aexecutar a continuació. Existeixen diverses possibilitats:

• Polsant RETURN s’executa un pas.

• Pot especificar-se el número de passos a executar.

• Entrant un 0, o bé un punt (.) es surt de la comanda.

Exemple: Aquest exemple, mostra el resultat de la execució d’un programa on l’usuari haespecificat l’adreça inicial a 25000H. Primerament només va executar un sol pas per laqual cosa va prémer RETURN i posteriorment s’observa l’execució dels AH passosespecificats per l’usuari. S’observa que per finalitzar la funció s’ha d’especificar un punt(.) com a resposta de la petició del número de passos.

Page 120: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

64

>t - Ejecución paso a paso -

Pc/Dirección? (P/A)

pc: 00025000 sr: A000 ssp: 00026FF4 usp: 00000000

d0: 00000019 d1: 00000000 d2: 00000046 d3: 00000045

d4: 00000044 d5: 00000000 d6: 00000000 d7: 00000000

a0: 00020300 a1: 00000000 a2: 00026000 a3: 00026000

a4: 00000000 a5: 00000000 a6: 00000000 a7: 00026FF4

Próxima instrucción: MOVEA.L #$27000,A7

Paso = 1

pc: 00025006 sr: A000 ssp: 00027000 usp: 00000000

d0: 00000019 d1: 00000000 d2: 00000046 d3: 00000045

d4: 00000044 d5: 00000000 d6: 00000000 d7: 00000000

a0: 00020300 a1: 00000000 a2: 00026000 a3: 00026000

a4: 00000000 a5: 00000000 a6: 00000000 a7: 00027000

Próxima instrucción: MOVEA.L #$26000,A3

Paso = A

pc: 000062A2 sr: A000 ssp: 00026ff4 usp: 00000000

d0: 00000019 d1: 00000000 d2: 00000046 d3: 00000045

d4: 00000044 d5: 00000000 d6: 00000000 d7: 00000000

a0: 00020300 a1: 00000000 a2: 00026000 a3: 00026000

a4: 00000000 a5: 00000000 a6: 00000000 a7: 00026FF4

Próxima instrucción: MOVEA.L #$203DA,A2

Paso = .

>

Funció: T

Aquesta funció permet l’execució amb traça d’un programa amb la peculiaritat queemmagatzema els valors consecutius que va prenent el comptador de programa enl’execució. Aquests valors són emmagatzemats en un buffer de 1 Kbyte (equivalent a 100Hvalors de comptador de programa) que posteriorment es podrà consultar mitjançant lafunció vt que es descriurà properament.

En executar aquesta funció es demanen les condicions d’activació de la traça. Aquestescondicions són l’adreça on es desitja disparar la traça i un valor de comptador que serà elnúmero de cops que passa el comptador de programa per l’adreça senyalada.

Un cop definits l’adreça i el valor de comptador de programa, el programa demanarà si hade considerar aquestes condicions com inici, final o punt mig del buffer de memòria onguardar la traça.

Finalment, l’usuari haurà d’especificar l’adreça a partir de la qual es comença a executarel programa. Aquesta execució s’interromprà en moment que el buffer de memòria associatestigui complert. L’usuari podrà continuar l’execució posteriorment des de el punt que haquedat el comptador de programa.

Page 121: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

65

• Si no s’especifica condició de dispament en executar la funció, s’agafarà perdefecte el principi de l’execució. El buffer de traça resultant guarda la traça agafantel principi d’execució com a inici del buffer de traça.

• L’execució amb traça només permet guardar la traça d’excepcions del grup 2 (Trap,Trapv, CHK, Divisió per zero).

En la següent funció, que és la que correspon a la visualització de la traçaemmagatzemada, es descriuran exemples d’aquestes dues funcions.

Funció: vt

Com ja s’ha comentat aquesta funció permet visualitzar el contingut del buffer ons’emmagatzema la traça obtinguda amb l’anterior funció.

Al executar-la apareixerà en pantalla el següent missatge:

>vt - Ver Traza -

Pasos de .......

L’especificació dels passos dependrà del tipus de buffer generat, és a dir, si s’ha consideratla condició com a inici, fi o punt mig.

Els següents exemples serviran per entendre millor els conceptes que s’acaben d’explicar.

Exemple 1: A continuació es mostra l’execució traça, on es defineix com a condició dedisparament el pas únic (n=1) per l’adreça 25028H on aquesta serà considerada com apunt final del buffer de la traça (0). L’adreça d’inici d’execució de programa es defineix ala posició 25000H i

Com s’observa l’adreça 25028H és el punt final del buffer de traça.

>T - Ejecución con Traza -

Condición de traza:

Dirección : 25028 n = 1

0-Final, 1-Principio, 2-Centro? 0

Pc/Dirección? (P/A) A

Dirección : 25000

Ejecutando...

Introduzca los caracteres a ordenar:

Traza completa

>

Page 122: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

66

>vt - Ver Traza -

Pasos de –FF a +00

Ver desde -10

Hasta +00

-10 007AFE 6748 BEQ.S S7B48

-0F 007B00 1013 MOVE.B (A3),D0

-0E 007B02 1400 MOVE.B D0,D2

-0D 007B04 5700 SUBQ.B #3,D0

-0C 007B06 6612 BNE.S $7B1A

-0B 007B1A 0002 0013 CMPI.B #$13,D2

-0A 007B1E 6626 BNE.S $7B46

-09 007B46 603E BRA.S $7B86

-08 007B86 1002 MOVE.B D2,D0

-07 007B88 4880 EXT.W D0

-06 007B8A 4800 EXT.L D0

-05 007B8C 4CDF 0C04 MOVEM.L (A7)+,D2/A2-A3

-04 007B90 4E75 RTS

-03 00F2B4 2F39 000203D4 MOVE.L $203D4,-(A7)

-02 00F2BA 4E75 RTS

-01 025026 1400 MOVE.B D0,D2

+00 025028 2F00 MOVE.L D0,-(A7)

>

Exemple 2: Aquest cas és idèntic a l’anterior amb la diferència que s’ha definit el disparode la traça com a punt inicial del buffer resultant.

S’observa que l’adreça 25028H és ara l’inici del buffer.

>vt - Ver Traza -

Pasos de –00 a +FF

Ver desde -00

Hasta +10

+00 025028 2F00 MOVE.L D0,-(A7)

+01 02502A 203C 00000018 MOVE.L #$18,D0

+02 025030 4E40 TRAP #0

+03 00F28E 23C0 000203DA MOVE.L D0,$203DA

+04 00F294 33DF 000203D8 MOVE.W (A7)+,$203D8

+05 00F29A 23DF 000203D4 MOVE.L (A7)+,$203D4

+06 00F2A0 4EB9 000062A0 JSR $62A0

+07 0062A0 2F0A MOVE.L A2,-(A7)

+08 0062A2 247C 000203DA MOVE.L #$203DA,A2

+09 0062A8 7025 MOVEQ.L #$25,D0

+0A 0062AA B092 CMP.L (A2),D0

+0B 0062AC 6E4A BGT.S $62F8

+0C 0062F8 302A 0002 MOVE.W $2(A2),DO

Page 123: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

67

+0D 0062FC E540 ASL.S #2,D0

+0E 0062FE 2070 00012FA MOVEA.L #$12FA,A0

+0F 006304 23F0 0000 0002 MOVE.L $0(A0,D0.W),$203DE

03DE

+10 00630C 245F MOVEA.L (A7)+,A2

>

Exemple 3: Aquest cas mostra el mateix exemple anteriors amb la diferència que es elpunt mig el que defineix el disparo de la traça.

>vt - Ver Traza -

Pasos de –80 a +7F

Ver desde -A

Hasta +8

-0A 007B1E 6626 BNE.S $7B46

-09 007B46 603E BRA.S $7B86

-08 007B86 1002 MOVE.B D2,D0

-07 007B88 4880 EXT.W D0

-06 007B8A 48C0 EXT.L D0

-05 007B8C 4CDF 0C04 MOVEM.L (A7)+,D2/A2-A3

-04 007B90 4E75 RTS

-03 00F2B4 2F39 000203D4 MOVE.L $203D4,-(A7)

-02 00F2BA 4E75 RTS

-01 025026 1400 MOVE.B D0,D2

+00 025028 2F00 MOVE.L D0,-(A7)

+01 02502A 203C 00000018 MOVE.L #$18,D0

+02 025030 4E40 TRAP #0

+03 00F28E 23C0 000203DA MOVE.L D0,$203DA

+04 00F294 33DF 000203D8 MOVE.W (A7)+,$203D8

+05 00F29A 23DF 000203D4 MOVE.L (A7)+,$203D4

+06 00F2A0 4EB9 000062A0 JSR $62A0

+07 0062A0 2F0A MOVE.L A2,-(A7)

+08 0062A2 247C 000203DA MOVEA.L #$203DA,A2

>

Page 124: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

68

7.4 Funcions de manipulació de breaks (punts de ruptura)

Les funcions disponibles en aquest apartat són les següents:

B: Afegir un Breakpoint (punt de ruptura)

b: Visualitzar els punts de ruptura

br: Eliminar un Breakpoint

bi: Inicialitzar la taula de breakpoints

Funció: B

Permet la definició del punt de ruptura, que consisteix en una adreça i en un valor decomptador que serà el número de cops que el comptador de programa senyalarà aquestaadreça.. Aquesta definició de breakpoint es tindrà en compte durant l’execució d’unprograma mitjançant la funció g.

• El programa donarà error si s’intenta definir un breakpoint en una adreça imparella.

Al finalitzar totes les funcions relacionades amb breakpoints es descriuran exemples per talde comprendre millor els conceptes exposats.

Funció: b

Aquesta funció permet la visualització de la taula de punts de ruptura definits per la funcióB. És important destacar que quan s’executa un programa considerant els breakpoints,aquests no desapareixen de la taula definida, però sí que apareixen amb un comptadorassociat igual a zero (0), ja que l’execució s’encarrega de decrementar aquest valor cadacop que el comptador de programa senyala dita adreça.

En finalitzar totes les funcions relacionades amb breakpoints es descriuran exemples per talde comprendre millor els conceptes exposats.

Funció: br

Permet eliminar un breakpoint prèviament definit. Per tal de fer-ho tan sols s’had’especificar l’adreça del breakpoint que es desitja eliminar.

Page 125: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

69

En finalitzar totes les funcions relacionades amb breakpoints es descriuran exemples per talde comprendre millor els conceptes exposats.

Funció: bi

Aquesta funció realitza un reset a la taula de breakpoints, els elimina tots.

A continuació es mostren alguns exemples per comprendre millor tots les funcionsrelacionades amb els punts de ruptura.

Exemple 1: Es defineix un breakpoint a l’adreça 25028H amb un comptador associat de15 passos. S’observa en el programa d’exemple que després d’ordenar 15 caràcters, nos’ha disparat el breakpoint.

Amb la funció B es defineix el breakpoint i amb la funció b s’observa l’estat del breakpointdesprés de l’execució.

>bi

>

>B - Añadir breakpoint -

Dirección : 25028 n=15

>

>g - Ejecución en tiempo real -

Pc/Dirección? (P/A) A

Dirección : 25000

Activar los breakpoints? (S/N) S

Ejecutando...

Introduzca los caracteres a ordenar:

123456543890756

Se han ordenado 000015caracteres. Su tabla ordenada es:

98766555443310

>

>b - Ver breakpoints -

025028 n=5

>

Exemple 2: En el següent exemple, s’han introduït més caràcters a ordenar, de maneraque es dóna la condició del punt de ruptura. Novament la funció b, mostra en aquest cas elvalor de comptador nul.

Page 126: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

70

>bi

>

>B - Añadir breakpoint -

Dirección : 25028 n = 15

>

>g - Ejecución en tiempo real -

Pc/Dirección? (P/A) A

Dirección : 25000

Activar los breakpoints? (S/N) S

Ejecutando...

Introduzca los caracteres a ordenar:

3427890ACBF453189GED

Breakpoint en la dirección 025028

>

>b - Ver breakpoints -

025028 n=0

>

Exemple 3: Aquest exemple mostra el resultat en intentar definir un breakpoint en unaadreça imparella.

>B - Añadir breakpoint -

Dirección : 25029

No puede ser impar

Dirección : 25028 n = 12

>

Page 127: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

71

7.5 Funcions de manipulació de fitxers

Les funcions disponibles en aquest apartat són les següents:

l: Carregar un fitxer a la placa (PCè68K)

L: Transferència d’un contingut de la memòria a un fitxer (68kèPC)

Funció: l

En executar aquesta funció el programa queda a l’espera de que li sigui enviat el fitxer ambformat s28 des del disc a través del port sèrie.

La mecànica de com realitzar aquesta tramesa dependrà del tipus de terminal o del tipus desoftware emulador de terminal sobre el PC.

El missatge que s’observa en executar aquesta funció es el següent:

>l

Cargando absoluto ...

Funció: L

Aquesta funció permet emmagatzemar un determinat contingut de memòria en un fitxer deldisc. Aquest fitxer té format s28.

El missatge que s’observa al executar aquesta funció es el següent:

>L - Transferencia de un absoluto -

Dirección inicial:

L’usuari ha d’especificar les adreces inicials i finals de la zona de memòria aemmagatzemar. Òbviament s’haurà de disposar del terminal adequat o del programaemulador del terminal sobre el PC.

• Si l’usuari no especifica l’adreça final de memòria, el programa agafarà les 100Hposicions com a tamany del fitxer.

Exemple: El següent exemple mostra el funcionament d’aquesta funció, en el qual s’haespecificat com a valors inicial i final les posicions 25000H i 25010H respectivament, enun fitxer en el disc.

Page 128: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

72

>L - Transferencia de un absoluto -

Dirección inicial: 25000

Dirección final: 25010

Pulsar una tecla para continuar ...

S2140250002E7C00027000267C00026000424748792F

S20500250100098

S5030002FA

S804000000FB

>

7.6 Funcions pròpies del sistema

Moltes de les funcions que aquí es descriuran no tenen molt sentit en un sistema operatiuWindows. Recordem que aquest programa originalment estava pensat pel sistema operatiuMS-DOS, amb la qual cosa no existien la “calculadora de windows”, el rellotge de la barrad’eines...

Les funcions disponibles en aquest apartat són les següents:

?: menú d’opcions

e: veure estat del sistema

sh: posar l’hora del rellotge

vh: veure l’hora

pr: parar rellotge

dh: conversió de decimal a hexadecimal

hd: conversió d’hexadecimal a decimal

reset: operació ‘reset’ del microinstructor

Funció: ?

Aquesta funció visualitza totes les comandes de les funcions disponibles així com una breudescripció de cadascuna d’elles

Page 129: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

73

>?

- FUNCIONES DE MANIPULACION DE MEMORIA - - FUNCIONES DE MANIPULACION DE REGISTROS -

s : inicializar posición de memoria. r : visualizar registros.

i : inicializar bloque de memoria. R : modificar un registro.

d : volcar bloque de memoria. ri: inicializar registros.

u : desensamblado bloque de memoria.

a : ensamblar nemónicos en memoria.

c : comparar bloques de memria. - FUNCIONES DE EJECUCION -

m : mover un bloque de memria. g : ejecutar en tiempo real.

p : copiar bloc de memòria. G : ejecución pseudoreal.

n : insertar posiciones de memoria. t : ejecutar paso a paso.

f : buscar en bloque de memoria. T : ejecutar con traza.

k : 'checksum' bloque de memoria. vt: ver traza.

- FUNCIONES DEL SISTEMA - - FUNCIONES DE BREAKS -

? : menú. B : añadir un breakpoint.

e : estado del sistema. b : visualizar breakpoints.

sh: poner hora. br: eliminar un breakpoint.

vh: ver hora. bi: inicializar tabla breakpoints

pr: parar reloj.

dh: decimal a hexadecimal. - FUNCIONES DE MANIPULACION DE FITXEROS -

hd: hexadecimal a decimal. l: carga de un absoluto a la placa.

reset: ‘reset’ de la placa. L: transferencia de un absoluto al PC.

>

Funció: e

Aquesta funció proporciona informació sobre l’estat del sistema i la sobre la quantitat dememòria RAM disponible per l’usuari.

Cal remarcar que entre les posicions 20000H i 20E35H de la memòria RAM s’ubiquen lestaules d’ús intern.

>e

------------------------------------------------------------------------------

*********** *** *** ********** ********* **********

*********** **** **** *********** *********** ***********

*** *********** *** *** *** ***

*** *** *** *** ********** ********* **********

*** *** * *** *********** *********** *********** ***********

*** *** *** *********** *** *** *** *** ***

*** *** *** *** *** *** *** ***

*** *** *** *********** *********** ***********

*** *** *** ********* ********* **********

-----------------------------------------------------------------------------

Page 130: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

74

per: J. Cervera, J. Grau, A. Olivé, A. Rendé (D.E.E. - U.P.C.)

(c) 1989,1990 I.E.PROMAX,S.A. ---- ver:1.02

Parámetros de comuncicación:

Canal B / 9600 baudios / No paridad / 8 bits por caracter / 1 bit stop

128Kbytes RAM

RAM disponible usuario: 0210BE a 03F7FF -> 01E741 bytes

>

Funció: sh

Aquesta funció permet posar a l’hora el rellotge intern de la placa. En executar aquestafunció, apareix un missatge amb la hora actual on es demana la nova hora. Si no esdefineixen els segons, el programa prendrà el valor de zero per defecte.

En la següent funció es mostra un exemple d’ambdues funcions.

Funció: vh

Permet visualitzar l’hora que marca el rellotge intern de la placa

Exemple: Aquest és el resultat d’executar aquesta funció i la comentada anteriorment.

>sh

La hora actual es 00:00:00

Entrar nueva hora: 19:45

>

>vh

La hora actual es 19:45:09

>vh

La hora actual es 19:45:25

>

Funció: pr

Aquesta funció serveix per parar el rellotge, conservant així el valor actual d’aquest. Lautilitat d’aquesta funció serveix per alliberar de càrrega el sistema, ja que el sistema delrellotge fa ús del sistema interrupcions.

Page 131: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

75

Exemple: S’observa que el rellotge ha quedat parat un cop realitzada aquesta funció.

>vh

La hora actual es 19:46:12

>

>pr

>

>vh

La hora actual es 19:46:23

>vh

La hora actual es 19:46:23

>vh

La hora actual es 19:46:23

>

Funció: dh

Aquesta funció permet calcular el valor hexadecimal d’un número decimal introduït perl’usuari

En la següent funció es mostra un exemple d’ambdues funcions.

Funció: hd

Aquesta funció permet calcular el valor decimal d’un número hexadecimal introduït perl’usuari. Realitza la funció inversa explicada anteriorment (dh)

Exemple: Aquest, mostra el resultat d’ambdues funcions descrites.

>dh

Decimal: 1234 Hexadecimal: 4D2

>

>hd

>Hexadecimal: 4D2 Decimal: 1234

>

Page 132: Desenvolupament d’un Programa Terminal Pel ìInstructor ...sauron.etse.urv.es/public/PROPOSTES/pub/pdf/214pub.pdf · família del 68000, memòria, perifèrics d’entrada/sortida

76

Funció: reset

Aquesta funció permet realitzar un reset de la placa. En aquest reset també s’inicialitzen elsregistres d’usuari.

Un cop s’executa la funció, el programa inicialitza el rellotge permetent que l’usuariespecifiqui el nou valor si ho desitja.

Exemple: Aquest exemple mostra el resultat de l’execució d’aquesta funció. S’observa queels registres s’han inicialitzat.

>reset

------------------------------------------------------------------------------

*********** *** *** ********** ********* **********

*********** **** **** *********** *********** ***********

*** *********** *** *** *** ***

*** *** *** *** ********** ********* **********

*** *** * *** *********** *********** *********** ***********

*** *** *** *********** *** *** *** *** ***

*** *** *** *** *** *** *** ***

*** *** *** *********** *********** ***********

*** *** *** ********* ********* **********

-----------------------------------------------------------------------------

per: J. Cervera, J. Grau, A. Olivé, A. Rendé (D.E.E. - U.P.C.)

(c) 1989,1990 I.E.PROMAX,S.A. ---- ver:1.02

Parámetros de comuncicación:

Canal B / 9600 baudios / No paridad / 8 bits por caracter / 1 bit stop

128Kbytes RAM

RAM disponible usuario: 0210BE a 03F7FF -> 01E741 bytes

La hora actual es 00:00:00

Entrar nueva hora:

>r

pc: 00000000 sr: 2000 ssp: 0003FFFE usp: 00000000

d0: 00000000 d1: 00000000 d2: 00000000 d3: 00000000

d4: 00000000 d5: 00000000 d6: 00000000 d7: 00000000

a0: 00000000 a1: 00000000 a2: 00000000 a3: 00000000

a4: 00000000 a5: 00000000 a6: 00000000 a7: 0003FFF3

>