ComputerArchitecture-HC9S08-Uribe-d.pdf

290
ING. LUIS G. URIBE C. Computer Architecture: The MC9S08 Primera Edición Septiembre de 2014, V1.3d

Transcript of ComputerArchitecture-HC9S08-Uribe-d.pdf

  • ING. LUIS G. URIBE C.

    Computer Architecture:

    The MC9S08

    Primera Edicin Septiembre de 2014, V1.3d

  • I N G . L U I S G U I L L E R M O U R I B E C A T A O

    Computer Architecture: The MC9S08

    2014 Ing. Luis G. Uribe C. Caracas, Venezuela

    i

  • Contenido PRLOGO ........................................................................................................................................................................... 5 ABSTRACT............................................................................................................................................................. 5 INTRODUCCIN ................................................................................................................................................... 6

    ARQUITECTURA DEL COMPUTADOR: QU DEBEMOS ESTUDIAR .................................................................. 6 Enfoque......................................................................................................................................................................... 7 Observaciones sobre algunos trminos empleados ...................................................................................................... 7

    VON NEUMANN COMPUTERS....................................................................................................................................... 8 INTRODUCCIN ................................................................................................................................................... 8

    QU ES UNA INSTRUCCIN ..................................................................................................................................... 8 MQUINAS DE 3, 2, 1 Y 0 DIRECCIONES ................................................................................................................... 10 HCS08 ARCHITECTURE: PROGRAMMING MODEL...................................................................................... 11

    MODOS DE DIRECCIONAMIENTO EN EL MC9S08 (CPU08RM Reference Manual)........................................... 11 VARIACIONES Y OPTIMIZACIONES ....................................................................................................................... 12

    CODIDAC, VON URIBES COMPUTER.................................................................................................................... 14 LA ARQUITECTURA ................................................................................................................................................. 14 LAS INSTRUCCIONES............................................................................................................................................... 14 LOS MODIFICADORES ............................................................................................................................................ 14 EL SUBSISTEMA DE ENTRADA Y SALIDA.............................................................................................................. 14 CDIGOS DE OPERACIN ..................................................................................................................................... 14 EL EDITOR ................................................................................................................................................................ 15 EL FORMATO DE LOS NMEROS .......................................................................................................................... 15 LA CALCULADORA................................................................................................................................................... 15 LA ESTRUCTURA ...................................................................................................................................................... 15 DATOS ESTADSTICOS............................................................................................................................................. 15 CIRCUITOS IMPRESOS ............................................................................................................................................ 15 FOTOS........................................................................................................................................................................ 16

    ASSEMBLER HCS08 ........................................................................................................................................................ 37 EJERCICIOS BSICOS EN ASSEMBLY LANGUAGE.......................................................................................... 37

    1) Primer Programa para el HCS08: MINIMUM Program for HCS08..................................................................... 37 COMENTARIOS a ["Laboratorios\Lab1\00a_L1.asm"]:........................................................................................... 38 2) Segundo Programa para el HCS08: Init COP & STACK ...................................................................................... 40 COMENTARIOS a ["Laboratorios\Lab1\00c_L1.asm"]:........................................................................................... 41 3) Programacin en Lenguaje de Mquina (HEX) para el HCS08:........................................................................... 42 COMENTARIOS a ["Laboratorios\Lab1\01a_L1.asm"]:........................................................................................... 43 4) Invente su propio Instruction Set para el HCS08:.................................................................................................. 46 COMENTARIOS a ["Laboratorios\Lab1\01b_L1.asm"]:........................................................................................... 47 5) Usando los OpCodes del Fabricante para el HCS08:............................................................................................ 47 COMENTARIOS a ["Laboratorios\Lab1\01c_L1.asm"]:........................................................................................... 48

  • 6) Forma DEFINITIVA para programar el HCS08: .................................................................................................. 49 COMENTARIOS a ["Laboratorios\Lab1\01d_L1.asm"]:........................................................................................... 50 7) CODE SECTION, DATA SECTION, en el HCS08:................................................................................................ 50 COMENTARIOS a ["Laboratorios\Lab1\01e_L1.asm"]:........................................................................................... 51

    PROGRAMAS AVANZADOS EN ASSEMBLY LANGUAGE, PARTE I ......................................................... 54 8) Serie de Fibonacci. ................................................................................................................................................. 54 COMENTARIOS a ["Laboratorios\Lab1\02Fibonacci.asm"]:................................................................................... 56 9) Empleo de Subrutinas; Identificacin de Modos de Direccionamiento.................................................................. 56 COMENTARIOS a ["Laboratorios\Lab1\Lab1_M\03a_L1_M.asm"]:....................................................................... 58 10) Introduccin a las INTERRUPCIONES ............................................................................................................... 58 COMENTARIOS a ["Laboratorios\Lab1\Lab1_M\03b_L1_M.asm"]:....................................................................... 61 11) Ejercicio con ms Aspectos Nuevos: .................................................................................................................... 63 COMENTARIOS a ["Laboratorios\Lab1\Lab1_M\03c_L1_M.asm"]: ....................................................................... 65 12) Ejercicio con ms Aspectos Nuevos an: ............................................................................................................. 67 COMENTARIOS a ["Laboratorios\Lab1\Lab1_M\03d_L1_M.asm"]:....................................................................... 70 13) Aspectos Cosmticos en el trato de los Vectores de Interrupcin:....................................................................... 71 14) Ejemplo: Rutina de MULTIPLICAR, por Sumas Sucesivas: ................................................................................ 72 COMENTARIOS a ["Laboratorios\Lab1\Lab1_M\05a_L1_M.asm"]:....................................................................... 73 15) "SUBRUTINA" de MULTIPLICAR, por sumas sucesivas:................................................................................... 74 COMENTARIOS a ["Laboratorios\Lab1\Lab1_M\05b_L1_M.asm"]:....................................................................... 75 16) Ejemplo PRIMORDIAL del uso de Variables Dinmicas: ................................................................................... 76 COMENTARIOS a ["Laboratorios\Lab1\Lab1_M\05d_L1_M.asm"]:....................................................................... 80

    PROGRAMAS AVANZADOS EN ASSEMBLY LANGUAGE, PARTE II........................................................ 84 17) Torres de Hanoi, MNIMO, en C: ........................................................................................................................ 84 COMENTARIOS a ["Temarios\Ex#1-HanoiMin\HanoiMin--.c"]: .......................................................................... 85 18) Torres de Hanoi, MNIMO, en ASSEMBLY LANGUAGE: .................................................................................. 86 A) Programa HanoiMin--.asm: ................................................................................................................................. 87 B) Include File HanoiMin_.inc:................................................................................................................................. 88 COMENTARIOS a ["Temarios\Ex#1-HanoiMin\HanoiMin--.asm"]: ........................................................................ 90 COMENTARIOS a ["Temarios\Ex#1-HanoiMin\hanoiMin_.inc"]: ........................................................................... 91

    TIMERS.................................................................................................................................................................. 93 NMERO DE TIMERS: ............................................................................................................................................. 93 OPERACIN Y USO DE LA BIBLIOTECA DE TIMERS:......................................................................................... 94 19) Timers for Windows (timers.cpp): ........................................................................................................................ 95 COMENTARIOS a ["Laboratorios\Lab2\_New\timers_.h"]: ..................................................................................... 99 COMENTARIOS a ["Laboratorios\Lab2\_New\timers.cpp"]: ................................................................................. 100 COMENTARIOS a ["Laboratorios\Lab2\_New\timtst2.cpp"]: ................................................................................ 101 20) Librera de TIMERS para el HC9S08 (timers8HS.inc): ..................................................................................... 101 COMENTARIOS a ["Laboratorios\Lab2\Timers8HS\timers8HS.inc"]:................................................................... 104 21) Ejemplo del uso de la Librera de TIMERS (timer8HS.asm): ............................................................................ 108 COMENTARIOS a ["Laboratorios\Lab2\Timers8HS\timer8HS.asm"]: .................................................................. 111 22) "WaitISR_on" Interactuando con la "IRQISR" .................................................................................................. 111 COMENTARIOS a ["Laboratorios\Lab2\Timers8HS\tim8_IRQ-HS.asm"]:............................................................ 114 23) Enciende los 8 LEDs con Diferentes Intervalos ................................................................................................. 116 COMENTARIOS a ["Laboratorios\Lab2\Timers8HS\TimedFlash8.asm"]:............................................................. 119 24) Enciende ORDENADAMENTE los 8 LEDs con Diferentes Intervalos .............................................................. 120 Finalizacin Tema TIMERS...................................................................................................................................... 123

    PROGRAMAS AVANZADOS EN ASSEMBLY LANGUAGE, PARTE III .................................................... 123 COLAS DE DATOS .............................................................................................................................................. 126

    25) BIBLIOTECA de COLAS: Que.inc ..................................................................................................................... 129 COMENTARIOS a ["Laboratorios\Lab3\SciComm\Que.inc"]: ............................................................................... 133 "STRUCT" in ASSEMBLY LANGUAGE................................................................................................................... 134 26) Programa Elemental para Probar la Librera de COLAS ................................................................................. 139 COMENTARIOS a ["Laboratorios\Lab3\SciComm\4quetst.asm"] .......................................................................... 141

    COMUNICACIONES SERIALES......................................................................................................................... 143

  • 27) LIBRERA de COMUNICACIONES SERIALES: SciComm.inc ......................................................................... 143 COMENTARIOS a ["Laboratorios\Lab3\SciComm\SciComm.inc"]:....................................................................... 147 28) Transmisin. ....................................................................................................................................................... 158 COMENTARIOS a ["Laboratorios\Lab3\SciComm\1tstXmt.asm"].......................................................................... 160 29) ECHO. ................................................................................................................................................................ 160 COMENTARIOS a ["Laboratorios\Lab3\SciComm\2echo1.asm"]:......................................................................... 162 30) Transmisin por INTERRUPCIONES. ............................................................................................................... 163 COMENTARIOS a ["Laboratorios\Lab3\SciComm\3echoInt-1.asm"]: ................................................................... 165 31) Cuarto Programa de COMUNICACIONES: Flash LEDs.................................................................................. 168 COMENTARIOS a ["Laboratorios\Lab3\SciComm\3echoInt-1Leds.asm"]:............................................................ 170 32) Programas de COMUNICACIONES que USTED Debe Hacer: ........................................................................ 173

    PROGRAMAS VARIOS EN ASSEMBLY LANGUAGE .................................................................................. 174 33) BITCOPY, MACRO y Ejemplo. .......................................................................................................................... 174 COMENTARIOS a ["Laboratorios\Proy\Buzzer\BitCopy.asm"]: ............................................................................ 178 34) USO Bsico del ADC, y Display en LEDs.......................................................................................................... 180 COMENTARIOS a ["Laboratorios\Proy\Buzzer\ADC.asm"]................................................................................... 182 35) Uso Bsico del ADC, Reversar Datos Antes de ir a los LEDs. .......................................................................... 184 COMENTARIOS a ["Laboratorios\Proy\Buzzer\ADC_Reverse.asm"]:................................................................... 187 36) Contador de UNOS............................................................................................................................................. 189 COMENTARIOS a ["Books\Interfacing-HCS08\Examples\bitcount3.asm"]: .......................................................... 190 37) Programacin de un TONO en el BUZZER. ...................................................................................................... 191 COMENTARIOS a ["Laboratorios\Proy\Buzzer\Buzzer.asm"]: .............................................................................. 193 38) Un "WALKMAN" Elemental............................................................................................................................... 195 COMENTARIOS a ["Laboratorios\Proy\Buzzer\Walkman.asm"]: .......................................................................... 199 39) "SWITCH", va "COMPUTED GOTO".............................................................................................................. 202 COMENTARIOS a ["Laboratorios\FSM-FiniteStateMachines\ComputedGoTo.asm"]:.......................................... 204 40) La FBRICA de CHOCOLATES........................................................................................................................ 207 41) TABLAS de DATOS; Implementacin del "FOR". ............................................................................................. 209 COMENTARIOS a ["Laboratorios\Tables\Tables0.asm"] ....................................................................................... 211 42) Last, but not Least: 8 Bits Rotate Left. ............................................................................................................... 212 COMENTARIOS a ["Evaluaciones\2013-01Ene\Evaluaciones\Ex#1\Rotate8.asm"]: ............................................. 213

    PROGRAMACIN EN "C"........................................................................................................................................... 215 NOTAS INICIALES............................................................................................................................................ 215 DNDE ESTAMOS ............................................................................................................................................ 215 GENERALIDADES ............................................................................................................................................ 216

    43) Programa INTRODUCTORIO en C, para HCS08, Comparativo con ASM. ..................................................... 216 COMENTARIOS a ["Labs-C\Fibonacci\060Fibonacci.c"]:..................................................................................... 217 ["Labs-C\Fibonacci\Fibonacci_.h"]: ....................................................................................................................... 219 COMENTARIOS a ["Labs-C\Fibonacci\Fibonacci_.h"]: ........................................................................................ 220 44) FIBONACCI PROGRAMADO EN C, NORMALMENTE, PARA COMPARAR ................................................. 221 COMENTARIOS a ["Labs-C\Fibonacci\090FibonacciOK.c"]: ............................................................................... 221 45) EXPONENCIACIN POR MULTIPLICACIONES Y SUMAS SUCESIVAS: WHILE ....................................... 222 COMENTARIOS a ["Labs-C\Lab1\010Lab0e-1.c"]: ............................................................................................... 222 46) EXPONENCIACIN, MULTIPLICACIONES Y SUMAS SUCESIVAS: FUNCIONES ..................................... 222 COMENTARIOS a ["Labs-C\Lab1\020Lab0e-2Sub.c"]: ......................................................................................... 223 47) EXPONENCIACIN, FUNCIONES: PARA VISUAL STUDIO ......................................................................... 223 COMENTARIOS a ["Labs-C\Lab1\030Lab0e-2SubVisualStudio.c"]: ..................................................................... 224 48) PRIMER PROGRAMA PARA HCS08: MINIMUM C PROGRAM..................................................................... 224 COMENTARIOS a ["Labs-C\lab1\00a_l1.c"]:......................................................................................................... 224 49) PROGRAMA EN C PARA HCS08, UN POCO MS TIL ................................................................................ 225 COMENTARIOS a ["Labs-C\Lab1\01c_L1.c"]:....................................................................................................... 226 50) "INTERRUPTS" EN EL LENGUAJE C.............................................................................................................. 227 COMENTARIOS a ["Labs-C\Lab1\03b_L1_M.c"]: ................................................................................................. 229 EL INCLUDE FILE "SEVERAL_U.H":.................................................................................................................... 232

  • COMENTARIOS a ["Labs-C\Lab1\several_U.h"]: .................................................................................................. 232 OBSERVACIN: ...................................................................................................................................................... 233 51) "Interrupts" en el lenguaje C, variacin............................................................................................................. 234

    MANEJO DE TIMERS ......................................................................................................................................... 234 52) LIBRERA DE TIMERS: timersJ.c ..................................................................................................................... 234 COMENTARIOS a ["Labs-C\Lab2\TimersJ\timersJ.c"]: ......................................................................................... 238 COMENTARIOS a ["Labs-C\Lab2\TimersJ\timersJ_.h"]:....................................................................................... 242 53) EJEMPLO #1 USANDO LIBRERA DE TIMERS.............................................................................................. 243 COMENTARIOS a ["Labs-C\Lab2\TimersJ\100TimedFlash8.c"] ........................................................................... 245 54) EJEMPLO #2 USANDO LIBRERA DE TIMERS.............................................................................................. 247 COMENTARIOS a ["Labs-C\Lab2\TimersJ\110TimedFlash8X4.c"]: ..................................................................... 249

    SERIAL COMMUNICATIONS & DATA QUES IN C............................................................................................ 250 55) LIBRERA DE COMUNICACIONES SERIALES............................................................................................... 250 COMENTARIOS a ["Labs-C\Lab3\SciComm\SciComm.h"]:................................................................................... 253 56) Send 'A' to 'z' letters for ever, to PC ................................................................................................................... 257 COMENTARIOS a ["Labs-C\Lab3\SciComm\1tstXmt.c"]: ...................................................................................... 258 57) SEND STEP BY STEP (IRQ) 'A' TO 'Z' LETTERS TO PC & SHOW IN LEDS ................................................. 258 COMENTARIOS a ["Labs-C\Lab3\SciComm\1tstXmt-Leds.c"]: ............................................................................. 260 58) ECHO ................................................................................................................................................................. 262 COMENTARIOS a ["Labs-C\Lab3\SciComm\2echo1.c"]:....................................................................................... 263 59) ECHO USANDO INTERRUPCIONES............................................................................................................... 263 COMENTARIOS a ["Labs-C\Lab3\SciComm\3echoInt-1.c"]: ................................................................................. 265 60) ECHO CON INTERRUPCIONES, ASCIZ STRINGS ......................................................................................... 266 COMENTARIOS a ["Labs-C\Lab3\SciComm\3EchoInt-2Z.c"]: .............................................................................. 268 61) COLAS DE DATOS ............................................................................................................................................ 268 COMENTARIOS a ["Labs-C\Lab3\SciComm\Que.h"]: ........................................................................................... 270 62) COLAS DE DATOS: DEMOSTRACIN............................................................................................................ 274 COMENTARIOS a ["Labs-C\Lab3\SciComm\4quetst.c"]:....................................................................................... 276 63) CHAT POR INTERRUPCIONES, USANDO COLAS......................................................................................... 277 COMENTARIOS a ["Labs-C\Lab3\SciComm\6ChatInt.c"]: .................................................................................... 280 COMENTARIOS a ["Labs-C\Lab3\SciComm\6ChatInt_.h"]:.................................................................................. 282 COMENTARIOS a ["Labs-C\Lab3\SciComm\4InputPushButtons_.h"]:.................................................................. 283 64) BIG CHAT, INTERRUPCIONES, COLAS ......................................................................................................... 284 COMENTARIOS a ["Labs-C\Lab3\SciComm\6ChatInt-4.c"]:................................................................................. 286 FIN DE LA OBRA..................................................................................................................................................... 288

  • 5

    PRLOGO

    CoDiDac, Computador Digital Didctico: In Memoriam.

    ABSTRACT ABconem

    IENDO dictado clases de Arquitectura del Computador a Ingenieros, sin solucin de tinuidad desde 1971 (43 aos y contando) y especialmente desde 2003 en la USB donde se plea para las prcticas la familia de 8 bits de Motorola/Freescale, he acumulado notas y rcicios que resultan de utilidad en mis clases, pues mi propsito es el de ir ms all de los s tericos impartidos en los planes de estudio, que suelen tratar estos temas a nivel de

    sistemas, y omiten referirse en estricto detalle y en profundidad, al hardware, al software, a los algoritmos y a los problemas prcticos.

    ejeconocimiento

    No hay forma tan eficaz como Aprender Haciendo (ah!), pero ese mtodo no est exento de problemas; por ejemplo, para aplicarlo al estudio de los microcontroladores se requiere manejar con precisin una enorme cantidad de detalles. Esa es la diferencia fundamental entre el enfoque del aula y la aproximacin del laboratorio; y entre comprender los conceptos u ostentar destrezas de Maestro. Estas notas pretenden mostrar una pequea pero importante fraccin de esos detalles, que se necesitan para la lograr Maestra en la praxis, y que no se consiguen con facilidad ni en claustros ni en bibliotecas. De hecho, en relacin a los ltimos exponentes de la familia de microcontroladores que nos ocupa la MCS08 solo se ha identificado en el mercado un de libro de texto, de calidad precaria. Desde luego, siendo ilimitado el mbito de lo que desconocemos, este aporte siempre resultar insuficiente, con independencia de su extensin y otro autor habr, que aparezca calificando tambin nuestro esfuerzo de insuficiente. De eso estoy conciente; este es un trabajo en evolucin. Habr que aadir la utilizacin de ms perifricos (aunque los tiempos en mis asignaturas no dan para ms dispositivos) y tcnicas avanzadas que incluyan la aproximacin a los Sistemas Operativos

    H

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    INTRODUCCIN ARQUITECTURA DEL COMPUTADOR: QU DEBEMOS ESTUDIAR

    Es bastante conocida mi polmica opinin en relacin al objetivo de nuestro plan de estudios. Para comenzar, permtaseme incluir una parfrasis:

    Qu diramos de un mdico eminente que aplica los ltimos desarrollos de la instrumentacin electrnica para diagnosticar acertadamente la pltora de pacientes que lo agobia, y que prescribiendo los ms modernos antibiticos de ltima generacin logra mantener a raya difciles y dolorosas enfermedades; que interviene mediante tcnicas no invasivas a quienes no responden a los medicamentos apropiadamente, para rescatarlos de la enfermedad y devolverles la salud pero que no tiene sino una superficial aunque a todas vistas suficiente idea de los increbles principios fsicos que hacen funcionar el scanner y sus conocimientos de la maravillosa qumica que se sintetiza en las cpsulas no le permitiran dirigir un laboratorio qumico, y que es completamente lego en relacin al genial concurso que hacen la micromecnica, la ptica y la electrnica, aplicadas a las miniaturas que usa como utensilios quirrgicos?

    Casi todos podramos convenir en que es un excelente mdico; sus pacientes lo veneran, los enfermos hacen lo imposible por ser atendidos por l pero, probablemente de sus manos no salga el prximo CAT ni el tan esperado antibitico final, y tampoco lo contratarn para disear el Escalpelo del Futuro. No ser un investigador, ni electrnico, ni qumico, ni micro-mecnico. Eso s, est al tanto de conseguir y emplear las ltimas y ms certeras herramientas que se ofrecen para el ejercicio de su profesin Mdica.

    Bueno, subyace aqu un dilema que en realidad parece sencillo: Qu queremos como egresado, un cientfico, o un Ingeniero? Es claro que el ttulo que concedemos es el de Ingeniero...

    Un ingeniero resuelve problemas en la industria (ojal que los de la USB lo hagan en Venezuela), empleando dispositivos especializados y complejos, como el Core i7 de Intel, por ejemplo, que cuando lo aplicamos no tenemos sino una muy aproximada idea de cmo est hecho un quadra-core. Un ingeniero hace eso: aprende a usar la tecnologa como herramienta en su trabajo diario, y s que no hay muchos de nosotros que pudiramos disear un Core i7 de Intel, ni ello resultara tampoco en gran beneficio, pues Intel no adolece de profesionales en esa rea y Venezuela no tiene como prioridad preparar ingenieros para trabajar en Intel

    Quiero hacer las siguiente citas:

    "A good Scientist is a person with original ideas. A good ENGINEER is a person who makes a design that works with as few original ideas as possible. There are no prima donnas in engineering. - Freeman Dyson (Nanotechnology father)" cfr en.wikipedia.org/wiki/Freeman_Dyson Uno puede estar de acuerdo con esta afirmacin o rechazarla, pero todos debemos convenir en que, s, es cierto que el mbito de accin de un cientfico no es el mismo que el de un Ingeniero, y que nuestra carrera es la de Ingeniero Electrnico, no la de cientfico; ni siquiera la de profesor o docente.

    Parafraseando a Martin Grimheden, del Royal Institute of Technology, que habla de la legitimidad de la profesin:

    The question of legitimacy is defined as the relation between the actual outcome of the educational efforts undertaken by the university, and the actual demands that are put on the students abilities by the society and/or industry at the end of the students education. To simplify: Why teach [electronics]? and What does the industry want? (Y yo preguntara: qu quiere NUESTRA industria, para empezar...)

    El artculo profundiza sobre knowledge and skills (teora y prctica): industries hiring [electronics] engineers, search for functional skills rather than formal knowledge

    6

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    7

    En nuestro pas, y en Latinoamrica, probablemente tambin sea as. Y, a lo mejor, con los INGENIEROS, en general, ocurra de la misma manera en todas partes! Solo cuando pretendemos que los egresados funjan ms bien como Docentes o Investigadores, todo queda medio al revs. O cuando ignoramos el patrn que para Ingenieros usan tan prestigiosas instituciones como Stanford y el MIT.

    En nuestra profesin NO se puede conocer un poco de todo; hay que saber USAR ese todo.

    En 40 aos de ejercicio profesional, y en mi transicin desde profesor hasta el rea de proyectos: ingeniero, gerente, vicepresidente de R&D, y en el perfil de empleado y de empresario (! y, de nuevo, a profesor !), en las compaas en las que me desenvolv, contrat o trabaj con ellos a ms de 100 ingenieros, casi todos electrnicos, la mayora de la USB (NB: Cuando la profesora Trina Adrin de Prez hizo la ltima encuesta externa para cambio de currculum, en mi empresa yo empleaba, simultneamente, 44 ingenieros electrnicos, 40 de la USB) Algo conozco del tema, y mi reales que me ha costado. OBSERVACIN: Yo podra ser el profesor activo de la USB, que ms egresados de electrnica ha contratado) Para m, el que diseaba amplificadores operacionales, microprocesadores, modems, e incluso dispositivos de ms alto nivel no estaba capacitado para lo que yo necesitaba.

    Yo requera siempre al que saba ENCONTRAR y EMPLEAR las herramientas ms apropiadas de la tecnologa.

    Como integrador de sistemas, nunca reinvent la rueda, y me fue bastante bien... en Venezuela! p

    Con lo anterior como premisa, yo abogo por un estudio de la Arquitectura (y los Sistemas Operativos, y TODO lo que enseamos) orientado hacia la APLICACIN de la tecnologa a la solucin de problemas. Si alguien quiere disear (micro)procesadores en Intel, se encontrar con que las plazas ya estn copadas, que ese desarrollo lo hacen cientficos rara vez Ingenieros y que son como 1,000 especialistas en todo el mundo.

    Enfoque

    Este libro no estudia cmo disear una computadora, y hace nfasis en cmo estn diseadas, no en por qu estn diseadas as.

    Observaciones sobre algunos trminos empleados

    Siendo el Ingls la lingua mater de la investigacin electrnica, resulta en ocasiones difcil elaborar en esa materia un texto en Castellano que no incurra en anglicismos, y aquellos que lo hacen pueden terminar en un galimatas. Recuerdo algn impreso que traduca Master Clear como Limpieza Maestra o, peor, buffer como Memorias Tampn, y flip-flops por bsculas.

    Adems, he empleado la primera forma verbal en vez de la tercera, clsica y neutra, porque esto no es una tesis ni un reporte de investigacin, y puedo darme el lujo de acercarme al lector hablando en primera persona. El estudiante se abstendr de imitarme hasta que tenga tantos aos como yo.

    Ing. Luis G. Uribe C. Caracas, marzo de 2014.

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    8

    VON NEUMANN COMPUTERS Quien no conoce la historia est condenado a repetirla, Jorge Santayana.

    INAS computadoras actuales (a m me encanta nombrarlas en femenino) pueden separarse en trminos prcticos en dos clases: Harvard y Von Neumann. Muchas otras divisiones coexisten, como CISC y RISC, siendo las ms utilizadas en la actualidad, por su cantidad, las CISC tipo Von Neumann, aunque yo he trabajado con algunos RISC tipo Harvard: los Microchip de la

    familia 16Fxxx.

    TRODUCCIN

    La familia HC9S08 que nos ocupa es CISC de tipo Von Neumann, con instrucciones primordialmente de una direccin, orientadas a Acumulador, como ya veremos.

    QU ES UNA INSTRUCCIN

    A las computadoras hay que programarlas, o instruirlas para que realicen sus actividades. Entienden, para ese fin, un idioma propio de cada una de ellas, o Lenguaje de Mquina (Machine Language). El programador emplea INSTRUCCIONES, compuestas de: a) una Voz Imperativa o COMANDO, que le indica a la computadora qu operacin hacer en un instante determinado y b) la identificacin de los operandos que deben participar en la accin.

    Desde que estudibamos aritmtica aprendimos que un clculo largo, que inclua una cierta cantidad de valores (operandos) y distintas operaciones aritmticas sobre ellos, poda descomponerse en una secuencia ms simple de operaciones que incluyeran, como mximo, dos (2) operandos; as, por ejemplo:

    F=A*BC/Dserealizacomo:T1=A*B;T2=C/DyF=T1T2.

    o:F=A*B;T=C/DyF=FT(seempleaunavariabletemporalmenos)A las operaciones aritmticas elementales se las conoce como binarias, o didicas, porque emplean dos operandos sobre los cuales actan para producir un (1) resultado. Lo mismo ocurre con los operadores booleanos. Y aquellos que requieren un solo operando, como -5, o ~B (unarias o mondicas) son un subconjunto y pueden recomponerse como binarios o didicos as: 0-5 o ~(0|B).

    Captulo

    1

    L

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    Una computadora tiene una unidad Lgico Aritmtica (ALU: Arithmetic-Logic Unit) cuyos circuitos realizan operaciones de suma y resta; otras incluyen multiplicacin y divisin y, las menos, soportan -adems de nmeros Enteros representacin en punto flotante para nmeros Reales.

    Para identificar los Comandos hay que codificarlos. Eso significa que si hubiera, por ejemplo, solo dos operaciones (dos Comandos), podran representarse con un bit que, estando en 0 designara al primero de ellos, y si valiera 1 sealara al otro. Si la Unidad de Control debe identificar 250 comandos dentro de instrucciones (esa es la cantidad que tena el antecesor del HCS08) se necesitaran 8 bits, lo cual resulta muy conveniente pues 8 son los bits que definen UN Byte, que es la cantidad mnima de bits que se manipulan de una sola vez en las computadoras modernas.

    Cuando tenemos procesadores con una cantidad superior a 256 Comandos (tal es el caso del nuevo HCS08) podran codificarse con dos (2) bytes pero, como con 16 bits pueden individualizarse 65,536 entidades diferentes, se ve que habra una holgura innecesaria (dado que los computadores actuales no tienen ms de alrededor de 1,000 y pico de cdigos de operacin, como orden de magnitud).

    Entonces se usa un truco que codifica los Comandos ms empleados con un (1) byte, y para el resto usa dos (2): uno llamado Escape, que advierte al procesador que, a continuacin, viene otro byte que es el cdigo que en realidad identifica ese comando que por tanto requiere 2 bytes. Esta es la aproximacin que se usa en el HCS08, y desde luego tambin en Intel.

    As que para ver cuntos bits conforman una Instruccin tenemos que, para el Cdigo de Operacin, o Comando (OpCode), se necesita un (1) byte.

    Veamos ahora qu se requiere para codificar los operandos, que residen en la Memoria. La Unidad de Control debe instruir a la memoria para que le suministre a la ALU cada operando, y para que reciba y almacene el resultado. La Memoria o unidad de almacenamiento puede caracterizarse como un dispositivo con dos dimensiones: qu se va a guardar (el Valor de la variable, consideradas ellas en el sentido que se les atribuye al estudiar algn lenguaje de programacin), y dnde se va a almacenar ese valor: Valor y Direccin. Sobre el Valor ya nos hacemos una idea de a qu corresponde. En cuanto a la Direccin, las celdas o posiciones de memoria se numeran normalmente comenzando desde 0, en incrementos comnmente de a uno, y cada una resulta as identificada mediante ese nmero, que se conoce como la Direccin de la celda. Cuando decimos que debemos leer una variable (para hacer un clculo), en lenguajes de programacin solemos identificarla mediante un Nombre, pero a la computadora hay que sealrsela mediante un nmero, la Direccin sobre la cul la memoria debe operar para entregarnos dicho Valor. As, una Variable identificada por el programador mediante un Nombre, desde el punto de vista de la computadora equivale a una Direccin y un Valor.

    Entonces, cuntos bits se requieren para identificar el Valor, y la Direccin? Ese nmero no tiene por qu ser el mismo para ambos casos. Para el Valor, la mayora de los MCUs usan un (1) byte. Mquinas ms nuevas emplean dos (2) bytes (16 bits), cuatro (4) bytes (32 bits); ahora se van imponiendo ocho (8) bytes (64 bits) y ya llegarn hasta 16 bytes (128 bits). Ya eso me parece muy improbable.

    Ahora, con una mquina comn de 32 bits, si cada dato es un nmero, ste puede representar enteros hasta2^32=4,294,967,296 o, si llevan signo: de +2,147,483,647a2,147,483,648.

    9

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    En el caso de las Direcciones se necesitan 4 bytes. Si tenemos dos (2) operandos que suministran valores, y uno (1) para el resultado, y cada uno de ellos precisa cuatro (4) bytes para su identificacin, el nmero de bytes de una instruccin sera de: 1 (OpCode) + 3 * 4 (Addresses) = trece (13) bytes.

    Note que como son tres (3) operandos, a este tipo de computadoras se las conoce como Mquinas de Tres Direcciones. Hay Instrucciones que tienen menos direcciones, como BORRE (Clear; V=0), que tiene UNA sola direccin; y HALT, que no tiene ninguna.

    MRECE (13) bytes son demasiados. Cada vez que se ejecuta una Instruccin, el CPU necesita leer

    QUINAS DE 3, 2, 1 Y 0 DIRECCIONES

    todos los bytes que la componen. Para obtener un alto rendimiento se requiere que se lea la Instruccin con la menor cantidad de pasos posible; ojal UNA sola operacin. Para esto, el Bus en el que se transfiere la informacin tendra un ancho exagerado, lo que resultara

    costoso, adems de oponerse a los espacios pequeos que requieren los dispositivos modernos. Por tanto, es importante ver cmo pueden eliminarse campos o elementos de la Instruccin. Recuerden que con la codificacin del Comando hay poco que hacer, segn acabamos de describir.

    T El primer paso en este sentido se dio haciendo que uno de los 3 operandos de la Instruccin fuera, al mismo tiempo, fuente de informacin y resultado; algo as como: A=A*B. Eso, en realidad, elimina un operando (cuatro [4] bytes). Para que el sistema funcione hay que agregar una instruccin que permita inicializar una variable con el contenido de otra; esta es un MOVE.

    F=A*BC/Dserealizaahoracomo:T=C(MOVETC;unasolaDireccin);T=T/D;F=A(MOVEFA);F=F*B;F=FT

    A este tipo de computadora bien podra llamrsela Mquina de Dos Direcciones.

    El segundo paso para eliminar de la Instruccin otro operando consisti en inventarse un dispositivo de almacenamiento que al mismo tiempo fuera fuente de informacin y albergue del resultado; algo as como: Acc=Acc*B en donde Acc, conocido como Accumulator, W [Working Register], H [Holding Register] es un registro dentro del CPU, y es un elemento TCITO, que no requiere identificarse porque es el nico que hay, con lo cual, la instruccin anterior slo tiene UNA Direccin. A estas computadoras se las conoce como Mquinas de Acumulador, o, naturalmente, Mquinas de UNA Direccin. Para que funcione el sistema hay que hacer que el Move anterior pueda llevar datos DESDE la memoria hasta el Acumulador, y desde ste HACIA la memoria. Como ahora son dos operaciones, reciben nombres diferentes: LOAD (AccMemory) y STORE (Memory Acc). Nuestro ejemplo de siempre quedara resuelto de la siguiente manera:

    F=A*BC/D,enunamquinadeAcumulador(UnaDireccin):LOADC;(Acc=C).ObsrvesequenosemencionaelAcc;soloCDIVIDED;(Acc=Acc/D:C/D)STORET;(T=Acc:C/D)LOADA;(Acc=A)MULTIPLYB;(Acc=Acc*B:A*B)SUBTRACTT;(Acc=AccT:A*BC/D)STOREF;(F=Acc:A*BC/D)

    10

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    ste ltimo result ser el sistema ms eficiente en relacin a los parmetros referidos al principio, y es el que ms se usa en la actualidad: Instrucciones de Una Direccin; Mquinas de Acumulador.

    Finalmente, se forz la barra y existen Mquinas de Cero Direcciones. Los computadores HP fueron sus exponentes ms sobresalientes. Una aplicacin muy generalizada de esta aproximacin de Cero Direcciones la encontramos en la evaluacin automtica de expresiones, principalmente como parte de los Compiladores. La notacin ms divulgada se conoce como RPN, Reverse Polish Notation.

    Los tipos generales de Direcciones: inmediata, directa, indirecta, modo registro, indireccin con registros, desplazamiento, stack, basadas, segmentadas, deben consultarse en las referencias genricas.

    HCL correspondiente diagrama puede verse en el

    S08 ARCHITECTURE: PROGRAMMING MODEL Reference Manual del microcomputador:

    CSe

    PU08RM.pdf, pgina 15. tiene el Acumulador A, un registro de 8 bits con las caractersticas que acabamos de ver ra las Mquinas de pa

    E Una Direccin.

    Existe un registro ndice (H:X) de 16 bits, que fundamentalmente sirve como apuntador (pointer, como en C); es decir, alberga: no el valor de una variable, sino la direccin de esa variable (exactamente como en C). Se pueden realizar operaciones que mimeticen las equivalentes de alto nivel, tales como: (*p se refiere al H:X):

    *p=Acc;Acc=*p;*p++=Acc;Acc=*p++;p=*p;jump*p;...ysimilares.Est tambin el Stack Pointer SP de 16 bits, que permite realizar el protocolo para la ejecucin de Subrutinas o Funciones, as como el de las Interrupciones, y sirve para establecer la existencia de variables dinmicas, como en el C, que se materializan con la llamada de una funcin y desaparecen a su finalizacin.

    Finalmente se encuentran otros 2 registros de uso ms especfico que los 3 anteriores: el PC o Program Counter, de 16 bits, que en principio identifica la instruccin que habr de ejecutarse a continuacin, y el Processor Status Word, cuyo nombre fue cambiado a CCR: Condition Code Register; es de 16 bits y almacena banderas (flags) individuales que identifican el estado del procesador en un instante dado, y facilitan el control del flujo del programa (saltos condicionales, habilitacin de interrupciones).

    El uso en detalle de todos estos elementos del MCU lo veremos ms adelante como parte del anlisis y desarrollo de la secuencia de programas, objetivo principal de este texto.

    MODOS DE DIRECCIONAMIENTO EN EL MC9S08 (CPU08RM Reference Manual)

    El microprocesador HCS08 que se escogi en la USB para incluirlo como elemento de trabajo en sus laboratorios de electrnica es casi perfecto para estudiar la Arquitectura de las Computadoras, por sus

    11

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    enriquecidas caractersticas, casi todas tomadas de las minicomputadoras DEC de los 70s y siguientes. (Motorola no fue la nica en adoptar tan bella tecnologa de las PDP-11; Intel incluye ms conceptos an en sus microcomputadores). Ya vimos que, a diferencia de muchos dispositivos similares de sus competidores, tienen un repertorio de instrucciones poderoso, variado y numeroso (no como las 35 instrucciones de los 16F8Xx). En cuanto a los modos en que emplea las direcciones, hay 17 distintos.

    Aqu solo se enumeran; enfquese para su estudio en el Manual de Referencia del CPU: CPU08RM. El uso en detalle de todos los modos de direccionamiento lo veremos ms adelante como parte del anlisis y desarrollo de la secuencia de programas que presentaremos.

    1) Inherent(noaddresses)2) Immediate,8bitconstants3) Immediate,16bitsconstants4) Direct8bits(ZEROpage)5) Extended16bits;"NATURAL"addressingmode:ABSOLUTE6) Indexednooffset7) Indexed,8bitoffset8) Indexed,16bitoffset9) Indexednooffsetwith(Indexregister)postincrement10) Indexed,8bitoffsetwith(Indexregister)postincrement11) SP,8bitoffset12) SP,16bitoffset(noexisteSINoffset)13) Relative(notforDATA!OnlyforCODEBranches)

    MemorytoMemory,MM(Onlyadvanced++):14) MM:ImmediatetoDirect15) MM:DirecttoDirect16) MM:IndexedtoDirect,with(Indexregister)postincrement17) MM:DirecttoIndexed,with(Indexregister)postincrement

    VARIACIONES Y OPTIMIZACIONES

    Para optimizar el rendimiento del HCS08, maximizando velocidad y minimizando uso de memoria, se incluyeron varias excepciones a la arquitectura convencional; primero, en el manejo de la memoria.

    Normalmente la memoria de una computadora tipo Von Neumann consiste, como ya indicamos, en una coleccin de celdas o elementos almacenadores, de informacin y programas, colocados en Secuencia Lineal. (La unidad de almacenamiento de las mquinas tipo Harvard tiene la particularidad de que la seccin que podemos usar para guardar datos emplea su propio conjunto de direcciones, separado del grupo de direcciones de la memoria en la que se guardar el programa. Cada una de ellas puede verse como un arreglo lineal, pero no estn contiguos el uno junto al otro. Es decir, que si por ejemplo, se recorre la RAM o memoria de almacenamiento para variables, y se llega hasta el final, la prxima posicin NO es la del cdigo del programa. En las mquinas tipo von Neumann hay UN solo

    12

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    campo de direcciones. Al recorrerse todas las posiciones en secuencia, se habrn visitado tanto las variables como el programa).

    Si hay 2^16=65536posiciones(64 Kbytes) necesitamos desde luego 16 bits de Direccionamiento para cada unidad elemental de almacenamiento, que en nuestro caso es el Byte (8 bits).

    Motorola dividi la memoria, y a la primera seccin, compuesta de 256 posiciones (0x0000 a 0x00FF) la llam Direct Page (Z RAM). Desde luego, si nicamente hubiera este grupo de unidades de memoria, slo se necesitara 1 Byte (8 bits) para identificarlas, en lugar de los 16 bits que se requeriran si la memoria fuera mayor. El truco consiste en multiplicar por 2 los cdigos de operacin, de tal manera que se use, por ejemplo, Add0 para identificar la suma (Add) de una variable que est en Direct Page, y que por lo tanto puede identificarse con un (1) solo Byte, y Add1 para indicar la suma de una variable que no est localizada en Direct Page, y para la cual se necesitan dos (2) Bytes. As, si se coloca en Direct Page la informacin ms utilizada, se puede lograr una economa en el tamao del programa, que requiere menos bytes para accesar esas posiciones, y tiene mayor velocidad, porque hay que cargar un byte menos. Si normalmente las instrucciones tienen un (1) byte para el OpCode y dos (2) para la direccin (total: 3), que demoraran en su manipulacin 3 tiempos de lectura de Byte, tB; el ahorro, al llevarlo a solo 2 bytes es de 1/3 en tB; as la velocidad aumenta en 50%: en el mismo intervalo de tiempo se ejecuta un 50% ms instrucciones, si todos los accesos son en Direct Page.

    As que podramos decir que dentro del Cdigo de Operacin para el Comando Add, hay un bit que vale 0 o 1 e identifica si a continuacin de ese OpCode vienen 1 o 2 bytes de direccin. Es interesante notar que el programa que nos ayuda a codificar a tan bajo nivel (inferior al C), llamado el Assembler, se encarga de averiguar la posicin de las variables, de forma que el programador pueda usar un solo cdigo, Add en este caso, y el Ensamblador incluye Add0 o Add1, segn corresponda a la ubicacin de la informacin, en Page-0 o no. El programador queda as liberado de llevar la pista a las variables.

    13

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    CODIDAC, VON URIBES COMPUTER LA ARQUITECTURA

    Consola de operador, con teletipo o tlex (Olivetti, Siemens), para el suministro de datos y programa mediante el teclado, e impresin de resultados en papel. Automatizacin va lector adjunto de cinta de papel. Tablero para despliegue de informacin interna: registros, direcciones, instrucciones, botonera para encendido y dems funciones no realizables desde el teletipo. LAS INSTRUCCIONES

    14 instrucciones: Comandos para lectura de datos, impresin, 4 operaciones aritmticas, toma de decisiones y bifurcacin en el flujo de control, desplazamientos de informacin a derecha e izquierda, movimiento de datos entre diversas posiciones de memoria, borrado, espera y parada codificadas en castellano. El CODIDAC deba realizar operaciones similares a las del FORTRAN.

    El CODIDAC se diferencia de otros computadores porque tiene Clases de Informacin definidas a nivel de mquina. En los computadores tipo Von Neumann la naturaleza de un elemento de informacin no le es inherente; el significado se lo proporcionan las instrucciones que lo manipulan. As, al sumar A con B, la instruccin de suma les otorga significacin numrica a las variables; si hubiera a lo mejor texto en ellas, el computador no tendra forma de saberlo

    Por ejemplo, para el CODIDAC la instruccin que desplaza informacin lo hace de una manera si el operando es numrico y de otra muy diferente si representa un texto. En caso de nmeros, el resultado siempre es un nmero; desplazar un nmero negativo produce siempre otro nmero negativo. En caso de textos, el resultado siempre es un texto.

    Incluso las Instrucciones pertenecen a una Clase! lo que permite realizar sobre ellas operaciones aritmticas, en los campos de las direcciones de los operandos (numricos), para facilitar el manejo de subndices, estructuras de datos, etc.

    LOS MODIFICADORES

    Un modificador cambia las operaciones, de simples a Repetitivas. Una sola instruccin de mquina, como IM: IMprima, arroja un nico valor, o un Rango de resultados (IR: Imprima Repetitivamente).

    EL SUBSISTEMA DE ENTRADA Y SALIDA

    Forma parte esencial de la Arquitectura del CPU, con instrucciones especficas, ms poderosas que el INPUT o PRINT del Basic y superiores al IN y al OUT de los microprocesadores.

    CDIGOS DE OPERACIN

    Como el aspecto didctico es preeminente, los cdigos tienen una base mnemnica de fcil comprensin y recordacin: Cuando dos palabras designan un comando, se toma la primera letra de cada una para conformar dicho cdigo. Por ejemplo, "Acepte Informacin" se codifica como "AI", y las letras 'A' e 'I' se almacenan en la memoria, en cdigo baudot de 5 bits.

    14

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    Si el comando tiene una sola voz imperativa, como "SUME", el cdigo se conforma como "SU", utilizando sus 2 primeras letras.

    Si se requiere el modificador de iteracin, se reemplaza la segunda letra por una R: AR es Acepte informacin de manera Repetitiva (desde, hasta), SR totaliza un rea completa de memoria, etc.

    EL EDITOR

    Para cargar el programa hay un editor de texto compuesto por circuitos (no es software). Para invocarlo existe el interruptor "Funcin Programa", y el "Botn de Correccin" para corregir errores tipogrficos.

    EL FORMATO DE LOS NMEROS

    La informacin numrica se representa en BCD, en signo y magnitud, y es de "formato fijo": El nmero de decimales se preestablece mediante selectores en la consola: desde 0 hasta 11 decimales. Cada palabra de memoria almacena 12 dgitos BCD, o 16 letras. La unidad de salida imprime la Coma de los nmeros en la posicin decimal designada, y obviaba la escritura de ceros no significativos, es decir, el FORMAT est tambin incluido en la electrnica!

    LA CALCULADORA

    El CODIDAC puede operarse como calculadora, gracias al selector de Operaciones Inmediatas. As, no hay que elaborar un programa para realizar operaciones aritmticas. Ningn otro computador tiene esta caracterstica. LA ESTRUCTURA

    La mquina es del tipo serial, con lgica secuencial convencional, no microprogramada. Posee selectores que permiten trabajar a mxima velocidad (600 KHz!) o en animacin lenta para permitir el seguimiento del flujo de informacin. Tiene un interruptor de paso a paso; uno para Detener la operacin del programa en cualquier instante, otro para Continuarla, y el Master Reset. DATOS ESTADSTICOS

    Est compuesto por ms de 4.000 circuitos integrados TTL, 300 transistores, 200 tarjetas de circuito impreso; 160.000 puntos de soldadura, 155.000 agujeros perforados con taladro de mano; 16.000 cablecitos de alambre telefnico (2.500 metros) y ms de 5 kilos de soldadura de estao.

    Diez fuentes de alimentacin, de 5 Voltios a 10 amperios, ms fuentecitas variadas para manejar las luces de nen, el teleimpresor, etc., alojadas en un gabinete independiente. Dos disipadores principales tienen como 1,70 metros de altura c/u. El consumo est por encima de los 3 kilovatios y para controlar la generacin de calor hay una pequea turbina elctrica que fuerza la circulacin de aire en el gabinete principal, as como un poderoso ventilador situado en la base del gabinete de alimentacin.

    CIRCUITOS IMPRESOS

    En los primeros dibujos para obtener los negativos fotogrficos se emplearon "rapidgrafos"; luego se usaron cintas adhesivas, como pistas, y ojetes para las perforaciones.

    15

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    FOTOS

    1) VISTA GENERAL

    A la izquierda se ve la consola formada por la mesa, el teclado y el impresor (tlex o teletipo) al que se le alcanza a ver el rollo de papel de impresin y el perforador de cinta de papel, adosado al lado izquierdo. Adems, el lector de papel. A la derecha se observa el panel de control (botonera) y despliegue de informacin (luces). El gabinete principal es el que est a la derecha, con 4 racks (se ven dos, uno arriba del otro). En el de abajo alcanza a verse la memoria de ncleos magnticos de ferrita. El tercer gabinete, pequeo, situado entre los otros dos, alberga las fuentes de alimentacin.

    16

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    2) VISTA GENERAL DESDE OTRO NGULO

    En el gabinete de las fuentes se ve un panel de control, con interruptores y borneras de interposicin, as como las protecciones para sobrevoltaje, tipo Crowbar (un SCR quema un fusible).

    17

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    3) ACERCAMIENTO

    En esta foto no aparece el lector de cinta de papel.

    18

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    4) MAYOR ACERCAMIENTO A LA CONSOLA

    19

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    5) PRESENTACIN

    Le enseo el proyecto a mi padre, y a mi hermano que es el fotgrafo.

    20

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    6) CONSOLA DE CONTROL Y TELETIPO

    21

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    7) CONSOLA DE CONTROL, VISTA DE FRENTE

    Abajo a la izquierda, los contactores para encender el computador, y una luz piloto. A la derecha, en dos grupos, los interruptores; los 7 primeros de la izquierda sirven para determinar el nmero de decimales (0 a 11) con que trabajar un programa. A la derecha, la botonera de control: De izquierda a derecha, los principales son Inicie; Funcin Programa; Corrija una lnea (borra y repite la entrada); Arranque; Pare; Contine; Funcin Calculadora. Alcanzan a verse un botn para mxima velocidad, otro para baja velocidad, y uno para paso a paso (el cono es una persona caminando). En la parte baja del panel vertical, el despliegue de bits de cada registro. Con el selector de la izquierda se escoge entre los registros A, B o C, o el de Instrucciones, para presentarlo mediante las luces de nen. La informacin entra por la derecha y se desplazaba secuencialmente hacia la izquierda. Ms arriba se indica el nmero del paso del micro-secuenciador. La instruccin ms larga tiene 18 pasos. La siguiente franja tiene los conos que representan los catorce comandos: Acepte Informacin, Compare por Igualdad, Compare por Magnitud, Lleve, Sume, Reste, Divida, Multiplique, Desplace a la Derecha, Desplace a la Izquierda, Imprima, Borre, Espere y Pare. Los cuatro conos de la izquierda muestran errores de overflow, divisin por cero y dems. Y a la derecha, la direccin de memoria que se est usando (000-999. Se est visualizando un 022)

    22

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    8) GABINETE PRINCIPAL, VISTA ANTERIOR

    Cuatro Racks con conectores (peines). Caben hasta 17 por fila, pero no todas estn completamente pobladas Algunas tarjetas son de doble altura (dos conectores). El rack inferior derecho es el de la memoria: los bastidores con los ncleos (entre lminas protectoras de acrlico), las tarjetas controladoras (corrientes y sensores), y una fila con 100 palabras de almacenamiento semiconductor, hechas con registros de desplazamiento normales que quedaron sin utilizar al terminar el diseo.

    23

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    9) GABINETE PRINCIPAL, VISTA POSTERIOR

    Indicativo de la cantidad de cables de interconexin (no se utiliz Mother Board). Resaltan los sensores remotos (cinco y cinco, en acrlico blanco) que leen a distancia el valor de las 10 alimentaciones y los llevan hasta los reguladores. As se garantizan el valor de los voltajes en el destino, a pesar de la considerable separacin entre el gabinete de las fuentes y el de la electrnica.

    24

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    10) GABINETE DE MEMORIA

    Los ncleos estn localizados en cuatro (4) planos. Cada bastidor se alambr a mano, cruzando un hilo de Excitacin (corriente) horizontal, llamado X, otro de Excitacin vertical, Y, uno de Inhibicin, para cancelar la excitacin en las posiciones no seleccionadas, y el de Lectura. Los ncleos magnticos son de 20 mils (milsimas de pulgadas de dimetro)

    25

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    11) ACERCAMIENTO A LA MEMORIA DE NCLEOS MAGNTICOS

    26

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    12) DETALLE DE LA UNIDAD DE CONTROL

    Rack situado arriba a la izquierda en el gabinete.

    27

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    13) DETALLE (POSTERIOR)

    28

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    14) GABINETE DE FUENTES (VISTA ANTERIOR)

    Se ven abajo los transformadores (nada pequeos!); un poco ms arriba, el ventilador para forzar el aire y, a continuacin, las 10 fuentes.

    29

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    15) GABINETE DE FUENTES (ACERCAMIENTO; VISTA ANTERIOR)

    30

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    16) GABINETE DE FUENTES (VISTA POSTERIOR)

    Se aprecia uno de los dos disipadores, con 5 transistores de potencia (de los 10 que eran en total). Detrs de l se encuentra el segundo disipador. Puede observarse sus tamaos

    31

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    17) MTODO DE ELABORACIN DE CIRCUITOS IMPRESOS (1)

    Como ejemplo puede verse una seccin de la Unidad de Control.

    32

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    18) MTODO DE ELABORACIN DE CIRCUITOS IMPRESOS (2)

    Se escoge una parte de la seccin de la Unidad de Control, la que va a colocarse en una tarjeta de circuito impreso. Se muestra la parte seleccionada, el dibujo tinta china y plumilla, hecho sobre lmina flexible de acrlico (de las que se usan para el retroproyector), y el negativo fotogrfico que se aplica sobre la tarjeta de cobre para realizar la exposicin, utilizando lmparas de luz muy fuerte.

    33

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    19) MTODO DE ELABORACIN DE CIRCUITOS IMPRESOS (3)

    Ejemplo de una tarjeta ya poblada de componentes (master clock, 16 fases). Vista anterior.

    34

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    20) MTODO DE ELABORACIN DE CIRCUITOS IMPRESOS (4)

    Master clock, vista posterior. Todas las tarjetas son de dos caras.

    35

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    21) FORMATO DE LAS INSTRUCCIONES

    Puede verse la codificacin de algunas instrucciones (as se escriben en el programa y as quedan en la memoria): Acepte Informacin (AI), Acepte informacin de manera Repetitiva (AR), Imprima (IM), Imprima Repetitivamente (IR), Sume (SU), Sume Repetitivamente (SR, que totaliza un bloque de datos contiguos), Reste (RE), Multiplique (MU), Divida (DV; es la nica excepcin de la codificacin, porque DI es Desplace a la Izquierda). Ing. Luis Guillermo Uribe Catao Revisin de Diciembre de 2012. Resumen de lo publicado por la Javeriana, 2011, y por Tekhne, en la UCAB.

    36

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8 Captulo

    2

    ASSEMBLER HCS08 "Perfection is finally attained, not when there is no longer anything to add, but when there is no longer anything to take away..." (Antoine De Saint-Exupry)

    EARA comprender los aspectos ms importantes de una computadora es imprescindible dar una mirada a la manera como el programador le transmite lo que ella debe hacer, cmo se la programa en forma

    JERCICIOS BSICOS EN ASSEMBLY LANGUAGE

    nativa: su Conjunto de Instrucciones, cmo direcciona la memoria, cmo usa el Stack, qu recursos tiene, tales como registros ndice, Stack. En nuestro empeo por

    apoyarnos en el MC9S08QE128 de Freescale instalado en la tarjeta de desarrollo DEMOQE128, hemos elaborado una serie de programas ilustrativos que presentamos a continuacin.

    P

    Estos ejercicios se dividen en 4: Introductorios; referentes a Timers, en donde explico la librera que suministro siempre con mis cursos, para estudiarla y usarla; Comunicaciones con el PC, usando el SCI (RS-232); aqu tambin analizamos una librera que desarroll para mis cursos, la estudiamos con detalle y tambin debemos poder usarla en nuestros ejercicios y proyectos. Finalmente, ejercicios varios.

    1) Primer Programa para el HCS08: MINIMUM Program for HCS08

    Este es el programa ms pequeo que puede escribirse en el ambiente de desarrolloCodeWarrior(laversinqueusoenlaactualidades:CodeWarrior10.5.TienesusBugs,algunos reportados por m [enero de 2014], sin corregir, peroes lo quehay... NB:MUCHOSambientesdedesarrollo,enelreadeMCUs,sondeJUGUETE)Elobjetivodeesteprogramaesverificarquesuinstalacindelambientededesarrollofunciona,ylosmnimosaspectosquedebeincluirensusprogramas.["Laboratorios\Lab1\00a_L1.asm"]01;********************************************************************02;00a_L1.asm,MINIMUMProgramforHCS08,Rev.F,V08J2012M29E201303;LuisG.UribeC.,D27Y2007J09A2009.ForCodeWarrior10.204;===================================================================05;BeginofCodeSection06ABSENTRYMain;Exportsymbol(DEBUGGERentry)0708ORG$2080;ORG?Origin.Nextcode(bra)islocated09;..atthisaddress!

    37

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    10;$2080isHCS08ROMStart(Flash)11;Main:symbolicforaddress$2080(bra)12Main:bra*;Branchtohimself(BRA:BranchAlways;*:here!)1314;15nop;

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    adelante,peroengeneraldebeutilizarseesaregla.SUSPROGRAMASTIENENQUEHACERSESIGUIENDOESTEYTODOSLOSLINEAMIENTOS.Cuandounprogramasevaaejecutar(o,comotodoelmundodice,sevaaCORRER),hayque indicarle al CPU dnde comienza el cdigo. Cada procesador tiene su propioprotocoloparaesto.Porejemplo,cuandoseenergizanlosprocesadoresIntel,elPC(ProgramCounter)asumeelvalor0xFFFF,paralosmicrosde16bits,y0xFFFFFFFFparalosde32bits,comopartedeladefinicindesuEstadoInicial(unvalorde0x0000,puros ceros, o 0xFFFF, puros unos, son cmodos de lograr, mediante las lneasapropiadasdelosregistroscorrespondientes:ClearoPreset,respectivamente).DeesadireccintomaelCPULAPRIMERAINSTRUCCINquehadeejecutarse.Comoesaubicacincorresponde a la ltima posicin de la memoria, seguramente que all tiene elprogramadorquecolocarunJUMPhaciasuverdaderaprimerainstruccin.(Cmopuedecolocarseunainstruccinenlamemoria,sirecinseestenergizandolamquina,yelestadoinicialdelaRAMesnormalmenteindeterminado,formapartedelasolucinalproblemadenominadoIPL:InitialProgramLoader.Reviseenlaliteraturadelcursoenquconsisteconexactitudeseproblema,yculessonlassoluciones.Unadeellaconsisteenqueenlapartesuperiordelamemoriadetrabajo,voltil,secoloca una ROM, o memoria de slo lectura, que contiene su programa, o un cdigodestinadoabuscarsuprogramaylocalizarloenunsitioadecuado)EnelHCS08,ustedtienequedecidirdndevaacolocarlaprimerainstruccindesuprograma.Esosehaceas:SeleindicaalCodeWarriorquelaprimeradireccindesuprogramaes'Main'(tienequeestarsegurodequeesasealaetiquetaapropiadadentrodesucdigo)06ABSENTRYMain;Exportsymbol(DEBUGGERentry)Luego se le dice que coloque el cdigo de su primera instruccin, en la direccinHexadecimal$2080:08ORG$2080;ORG?Origin.Nextcode(bra)islocatedORG,porOrigin,leindicaalprogramaAssemblerqueelcdigoqueacontinuacinustedvaaescribir,debecolocarlodemanerasecuencialapartirdeladireccinindicada;$2080ennuestrocaso(queparaelHC9S08QE128queempleamos,eslaPRIMERAdireccinde la memoria FLASH, que es su almacenamiento no voltil. Para una identificacinprecisadelasreasocupadasporlaRAMylaFlash,remtasealmanualMC9S08QE128RM(ReferenceManual)Luego,elprogramadortienequecolocarsu'Main'(ustedescogeasugustoelnombre;notienequeserMain,siemprequeuseelmismoentodasaquellaspartesenlasqueyoloincluenesteejemplo...)11;Main:symbolicforaddress$2080(bra)12Main:bra*;Branchtohimself(BRA:BranchAlways;*:here!)Note que se enfatiza en que el smbolo mnemnico, alfabtico, 'Main', tiene unaequivalenciaconelnmero$2080.Ustedemplea'Main';elCPUusa$2080(16BITSENBINARIO,QUEESLONICOQUELASCOMPUTADORASENTIENDEN!)Ahoraobservelalnea15;sehacolocadoeseNOPporqueserequiereenlasversiones10.x(almenoshastala10.5;NOeranecesarioenlaversin6.xynorecuerdohaberlousadoenversionesanteriores,lasquecomencausarporallporla3.x,haceeones)

    15nop;

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    Siestalneaseomite,elDebuggerproduceunerroraltratardeejecutarel'bra*'(saltoinfinitoasmismo)delalnea12.EstoesunerrordelCodeWarrioractual.FinalmentevienenlosInterruptVectorsdelalnea20.Resultaque,adiferenciadeIntelque,comoyadijimos,inicializasusPCparaleerLAPRIMERAINSTRUCCINdesuprogramaSIEMPREdesdelaltimadireccindememoria,elMotorola/FreescaleinicializatambinsuPChacialaltimadireccinWORD(16bits)delaFlash(16bitsqueocupan$FFFE y $FFFF), PERO ALL LO QUE ESPERA encontrar es LA "DIRECCIN" DE LA PRIMERAINSTRUCCINDESUPROGRAMA.Elmecanismoqueseempleaparaestablecerestevnculoseformadelasiguientemanera:06ABSENTRYMain;Exportsymbol(DEBUGGERentry)08ORG$2080;ORG?Origin.Nextcode(bra)islocated...12Main:bra*;Branchtohimself(BRA:BranchAlways;*:here!)...20ORG$FFFE;VECTORholdingaddressforHCS08startup21DC.W$2080;...(RESET)DC.W:DefineCONSTANTWordEn06usteddefinelaEtiqueta(Main)enlaquevaacomenzarsuprograma,eindicaenqu posicin (vlida) de Flash la va a colocar (el resto de su cdigo va acontinuacin!);luegoenla12estsu'Main'y,enla20ysiguientesseculminaelvnculo:cuandoelPCasumesuvalorinicial,$FFFF,elCPU,queestenlafasedeinicializacin, usa ese PC para cargar un valor de 16 bits, que corresponde a ladireccindesuprimerainstruccin.Reemplazasu$FFFFporloqueestalmacenadoall(elnmero$2080enelejemplo)ydeesaposicintomalaprimerainstruccinquevaaejecutar,deSUprograma.Alespacioendondesecolocanlosvaloresdearranque(oRESET),yotrosqueluegoestudiaremos,seloconocecomoelreadeVectoresdeInterrupcin.ComienzanenlaLTIMAposicindememoria,yvacreciendoHACIAABAJO,deadosposiciones,porquecadaelementodeinformacinallalmacenadocorrespondeadirecciones(dearranque,oderutinasdeinterrupcin:ISR),ylasdireccionessiempretienen16bits.TodoprogramafinalizaconunEND:22END;ENDandnextlines,removedbyAssembler24Note:NothingisreadafterEND...(cfr.'main.dbg')Sehaincluidoexprofessolalnea24,contextocomnycorriente,paraenfatizarque,despusdelENDdelprogramaprincipal,elEnsambladorNOleeabsolutamentenadams.Puedeusarse,portanto,esareaparaincluirtextocualquiera,comocomentarios.TengaCUIDADO:AlgunosensambladoressuspendenelanlisiscuandoencuentranCUALQUIEREND. A veces, si a un INCLUDE FILE, similar al que ya conoce del C, se le colocainadvertidamente un END, el programa queda procesado hasta all, y con muchaprobabilidadesonoesloqueelprogramadordesea... 2) Segundo Programa para el HCS08: Init COP & STACK

    Hay un cdigo mnimo que SIEMPRE debe incluir en sus programas, y se indica acontinuacin:

    40

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    ["Laboratorios\Lab1\00c_L1.asm"]01;********************************************************************02;00c_L1.asm,MINIMUMProgramforHCS08,V08J201203;LuisG.UribeC.,J09A2009.ForCodeWarrior10.204;===================================================================05;BeginofCodeSection06ABSENTRYMain;Exportsymbol(DEBUGGERentry)0708ORG$2080;HCS08ROMStart(Flash)09;10;***ALWAYS***includethefollowing4instructions1112Main:lda#$42;$42(%0100_0010)?COPE(SOPT1b7)=0($1802)13sta$1802;(SOPT1Pupinitto$C2=%1100_0010)14ldhx#$1800;InitStackPointerSP(HCS08)15txs;$1800?RAMEnd+1.SP=RAMEnd:$17FF17;18bra*;Branchtohimself(BRA:BranchAlways;*:here!)1920;21nop;

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    EnelregistroSOPT1(SYSTEMOPTION1,ubicadoenlaposicin$1802)sedeshabilitaelCOP:COPE=0:COPEnable=0.ComoestaesunamquinadeAcumulador,senecesitandosinstruccionesparahacerelMOVEdeundatoaunavariable:LOADAccumulatorcon#$42ySTOREAccumulatoralaposicin$1802(lneas12y13).Nteselasangradeunespacioqueheincluidoenlalnea13conrespectoala12.Sirve para enfatizar que las dos instrucciones fsicas realizan una sola operacinlgica.Usteddebetratardehacerlomismo.Luegoaprenderemosunmecanismo:MACROs,que le permiten definir sus propias instrucciones, como MOVE, que reemplazan a lasecuenciadeLDAySTAsealadas.SEGUNDA razn: Al encender el MCU el Stack Pointer (SP), al igual que el PC, seinicializaenunvalortilparatodoslosmodelosdeMCUdelasfamiliasHC05yHC08,algunosdeloscualesquepuedentenermuypequeaRAM.Ennuestrocasonoesas;enel HC9S08QE128 hay mucha RAM (8064 bytes reporta el Reference Manual), as que elmanufacturanterecomiendainicializarelstack(vaelSP)as:14ldhx#$1800;InitStackPointerSP(HCS08)15txs;$1800?RAMEnd+1.SP=RAMEnd:$17FFObservendenuevolasangra.Debido a ciertas peculiaridades de la Arquitectura de este MCU, la instruccin TXS(TransferindeXtoSp)RESTAunUNOalregistrondiceH:XANTESdetransferirelvalororiginalalSP.Poreso,dadoquelaltimaposicindeRAMesla$17FF,yqueelStackarrancarah(ycrecerhaciaABAJO),hayquecolocarenH:Xelvalor$1800.3) Programacin en Lenguaje de Mquina (HEX) para el HCS08:

    SepresentalaformamselementalenlaqueselepuedendarlasinstruccionesalMicroprocesador.Comoyadijimos,loscomandosdelasinstruccionesseindividualizanydiferencian unos de otros, identificndolos mediante la asignacin de un nmero, oCdigodeOperacin(OpCode).EldiseadordelMCUhacelaasignacin,yhayunatablaenlaquesecolocanloscomandosysuCdigodeOperacin.As,siqueremosborrarunavariablequehemoslocalizadoenlaprimeraposicindelaMemoriadeAccesoDirectooPgina0(ZRam)necesitaremosbuscarelcdigodelCLEARyescribiralgoas:Main:DC.B$3F;DefineConstantByte.$3F$80?CLR$80DC.B$80;$80?DirectAddressPorsuerteelprogramaAssemblerpermitereferirnosalosOpCodemediantelosSMBOLOSqueelmanufacturantedefiniparaellos(CLRparaBORRARmemoria,etc.),ynotenemosniqumemorizarsuscdigoshexadecimalesnibuscarentablaslasequivalencias.Setratadeemplear,alMXIMO,smbolosalfanumricos,losdelasinstrucciones,yalas variables y ciertas posiciones de cdigo tambin les damos NOMBRES, ojal consignificadoclaroypreciso,talcomosehaceenC.Elobjetivoeseldehacernosmsfcil la composicin, lectura e interpretacin del cdigo, y ese mecanismo pretendeELEVARELVALORSEMNTICODELLENGUAJE,queyadepors,esbastamteBAJOPuedeversecompletoestetercerejemploacontinuacin:

    42

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    ["Laboratorios\Lab1\01a_L1.asm"]01;********************************************************************02;01a_L1.asm,MINIMUMHCS08ProgramRev.E,V08J2012>>HEXADECIMAL

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    Primerosedefine,comosiempre,laasociacinparaelvectordeRESET:11ABSENTRYMain;Exportsymbol(DEBUGGERentry)13ORG$2080;HCS08ROMStart(Flash)14Main...El resto del programa inicializa la variable en cero, la incrementa y retorna aincrementarlaporsiempre.PuedeverificarelcomportamientodelprogramamedianteelDebugger,quepermitecorrerlopasoapaso,eirviendocadavezelcontenidodelavariableenlaposicin$80:14Main:DC.B$3F;DefineConstantByte.$3F$80?CLR$8015DC.B$80;$80?DirectAddress16DC.B$3C;LOOP:$3C,$80?INC$80(directvariable)17DC.B$80;$80?DirectAddress18DC.B$20;BRALOOP19DC.B$FC;$FC?Relativeoffset.BRA*:$202($FE)20;$FC?4.PCpointstoNOP.PC4is'LOOP'En cuanto a las lneas 18 y 19, que codifican un salto incondicional (BRA: BranchAlways)al"Loop"deIncremento,esinteresantenotarlosiguiente,queesdeusocomnentrecasitodolosprocesadores:Pararealizarunsaltoaalgunaposicindecdigodentrodelamemoria,elOpCodeeselquecorresponda,ennuestrocasounBRA,yluegohayqueidentificarlaposicinalacualsaltar.ComoelprogramaenunamquinadeVonNeumannpuedeestarencualquierparte de la memoria, se necesita identificar una direccin de 16 bits, en nuestromicro,quedireccionaenformanatural,64KBytes.Deesamanera,lasinstruccionesderamificacin,quemodificanelflujodelprograma,yqueformanunodelosgruposmsusados,tendran3bytes:unoparaelOpCodeydosparaladireccin.Unaformadeoptimizacinenestamateriaselogramediantelasiguienteobservacin:la gran mayora de saltos se realizan en la "LOCALIDAD", que es un concepto queidentificademaneragenrica,lasposicionescercanasaladireccindelsalto;susVECINAS. Y esa localidad es muy numerosa en unrango de 127posicionesadelante, yhasta 128 atrs. Lo cual es muy conveniente, ya que esa informacin es la que secodificamediantebytesconsigno(signedchars).As,selograquelasinstruccionesderamificacinquemsseempleantengansoloDOSbytes:unoparaelOpCode,yunoparaelDESPLAZAMIENTO(noseindicaadnde,sinoquesesealancuntasposicionesadelanteoatrs,medianteunOffset).Desdeluego,hayungrupodeinstruccionesquepermiten saltar a cualquier lado. En esta mquina, los BRANCHES son RELATIVOS, esdecir,empleanDesplazamientosqueindicaneloffsetenRELACINalainstruccin.YlosJUMPSsonabsolutos,empleandireccionesde16bits.Lointeresanteeselmecanismoparacalcularladireccinefectiva,destinodelsalto:Alaposicinactual(registradasiempremedianteelPC),seledebesumarelOffsetconsignoparaobtenerasladireccindelaprximainstruccin.Sedicebienperohaydoscosassutilesqueaclarar.LaprimeraesenrelacinalusodelPC.Losegundo,vercmolasdirecciones,quesonnmerosSINsigno,sumanbienconlosOffset,quesonnmerosCONsigno.

    44

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    LaoperacindelPC,entodoslosmicrosqueconozco,escomosigue:secomienzaconelPC apuntando a la prxima instruccin que se va a ejecutar. Cuando se trata deinstruccionesdevariosbytes,comoeselcasodelBRANCH,apuntaalOpCode.Cuandosecomienza a ejecutar la instruccin, en el ciclo de Fetch, el CPU lee, usando ladireccinalmacenadaenelPC,elOpCode,yapuntahaciaelsiguienteelemento.Estolohace incrementando el PC. Es decir, para cada lectura se produce la siguientesecuencia:InstructionRegister=*PC++;//secargaelOpCodeyseapunta//..alsiguientebyte:elOffset*DataBuf=*PC++;//secargaelOffsetyelPC,enestecaso,//..apuntaalprximobyte:NextOpCode.Ahora,siladireccindelcomienzodelainstruccinesN,alfinalizarlasecuenciaanteriorelPCalbergaN+2.Asqueunainstruccincomo:BR*,enlaquesedeseahaceruncicloinfinitodesaltosasmismo,elOffsetquehayquecolocares...2.DeesamaneraelprximoPCserPC=N+22=N,queeraladireccinoriginal.O sea, es importante al calcular el Offset, recordar que para el momento de laaplicacindePC+Offset,elPCapuntadosbyteshaciaabajo.

    ESTAESLAFUENTEDELERRORENELCODEWARRIOR,parasolucionarelcualtuvequeagregarelNOPdelqueyahemoshablado.CuandoseejecutaelBRANCH,elPCapuntaMSALLDELAMEMORIAQUELEHASIDOASIGNADAALPROGRAMA.AllNOhaycdigo,yelAssemblercreequesehacometidounerror,cuandoenrealidadnoesas.Dehecho,laversin6.3funcionamuybiensineseNOP.

    Enrelacinalsegundopunto,unodelosproblemasdelcuestionariopidedemostrarqueaunnmerosinsigno(unadireccin)selepuedesumarunoCONsigno(elOffset),yelresultado es perfecto: la direccin requerida, adelante o atrs, de la direccinoriginal.ESTAPROPIEDADDELOSNMEROSCONSIGNO,CODIFICADOSENCOMPLEMENTOADOS,ESLARAZNPRIMORDIAL POR LA CUAL SE USA ESTA REPRESENTACIN NUMRICA, y no se emplean elcomplementoa1(nimuchomenosotrasmsengorrosas,comoSignoyMagnitud).Enlapartefinaldelejercicioseejemplificaelordenenqueunainformacinde16bits(2bytes)deberepresentarseenunamquinaBIGENDIAN,comoeselcasodelHC08:Yendodesdelasdireccionesinferioreshastalassuperiores(de$FFFEa$FFFF),primerosecolocaelbytedeMayorvaloryacontinuacin,deltimo,vaelfinal:laparteMenos significativa del nmero. La informacin termina (END) en la direccin mayor(BIG);deaheltrminoBIGENDIAN.(Si este fuera un microprocesador Intel, en la misma secuencia de direcciones losvalores almacenados seran, primero, $80 y luego, $20: LITTLE ENDIAN; es decir elnmerotermina[END;$80]enlapartemasbajadememoria[LITTLE]):25;InterruptVectors26ORG$FFFE27DC.B$20;ResetVectorHIGH28DC.B$80;ResetVectorLOW(HCS08isBIGENDIAN)

    45

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    4) Invente su propio Instruction Set para el HCS08:

    InventeSUpropioInstructionSet.Estocasinuncaseusa,peroilustralamaneracomotrabajaelAssembleraltraducirloscdigosqueustedlesuministra.Ademshayalmenosunamaneramsavanzadadehacerloqueesteejercicionosmuestra,abasedeMACROs,peroesovendrdespus.["Laboratorios\Lab1\01b_L1.asm"]01;********************************************************************02;01b_L1.asmSymbolicProgram(Userdefined)Rev.FV08J2012M29E201303;LuisG.UribeC.,J09A200904;Aspectosmnimosnecesariosalescribirunprograma:05;1.Definirposicininicialdelcdigo.$8000up06;2.Escribirelprograma(buscarcdigoHEXdec/instruccin)07;HacerSUpropioconjuntodeinstruccionesenSimblico.08;3.DefinirDireccindeiniciodeejecucinluego09;deReset(vector$FFFE)11;12;ParameterDefinitions(UserdefinedSYMBOLSvia'EQU')13;Youmaydefinewhateversymbolsyoulike...YourownAssemblyLanguage!1415START:EQU$208016STARTh:EQU$2017STARTl:EQU$8018XCLR:EQU$3F;Instructionclr,tomadadelReferenceManual19XOP1:EQU$80;Operand(1stvariable)forclrandinc20XINC:EQU$3C;Instructioninc,delReferenceManual21XBRA:EQU$20;Instructionbra,delReferenceManual22XOFF:EQU4;Offsetforinstructionbra23RESET:EQU$FFFE;VectordeInterrupciones2425;===================================================================26;BeginofCodeSection27ABSENTRYMain;Exportsymbol(DEBUGGERentry)2829ORG$2080;HCS08ROMStart(Flash)30Main:DC.BXCLR;LaterTRAYTHIS:Stepsome,InsertBREAK31DC.BXOP1;..POINTinMain.>>RUN

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    4647;NOTE:IfyouremoveALLreferencestoRESET,STARThandSTARTl...48;theprogramcontinuestobe"debugged"fine!49;TheDEBUGGERusesthe'ABSENTRYMain'instead...50;TheactualCPUNEEDstheRESETVector(Vreset)COMENTARIOS a ["Laboratorios\Lab1\01b_L1.asm"]:

    Lo primero es generar SUS propios OpCodes. Los hemos comenzado con una 'X' paraayudarnosconladiferenciacinentresuscdigosylosdelmanufacturante.18XCLR:EQU$3F;Instructionclr,tomadadelReferenceManual19XOP1:EQU$80;Operand(1stvariable)forclrandinc20XINC:EQU$3C;Instructioninc,delReferenceManual21XBRA:EQU$20;Instructionbra,delReferenceManual22XOFF:EQU4;Offsetforinstructionbra23RESET:EQU$FFFE;VectordeInterrupcionesLapartesiguienteesmuysimilaralejercicioanterior:01a_L1.asm:29ORG$2080;HCS08ROMStart(Flash)30Main:DC.BXCLR;LaterTRAYTHIS:Stepsome,InsertBREAK31DC.BXOP1;..POINTinMain.>>RUN

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    08;deRESET(vector$FFFE)0910;11;ParameterDefinitions1213START:EQU$2080;comienzodelaFlash14RESET:EQU$FFFE;vectorparaindicarcomienzodelcdigo1516;17;Definicindevariables1819Var:EQU$80;unaformadeidentificarvariables2021;====================================================================22;BeginofCodeSection23ABSENTRYMain;Exportsymbol(DEBUGGERentry)2425ORGSTART;HCS08ROMStart(Flash)26Main:clrVar;Ensayar:clrVAR(maysculas.Daerror)27loop:incVar28braloop29;30nop;

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    Luego usaremos el smbolo ROMStart, que es el definido por el manufacturante. LasetiquetasdeprogramalucencomoenC.(ConustedesesunproblemahacerreferenciasalC,cuandocontodaseguridadNINGUNOusnuncaetiquetasparaidentificarpartesdesucdigoenC.As,nopuedobasarmeensus(des)conocimientosdeCparaayudarmeenlasexplicacionesdeestecurso.Lstima...)33;InterruptVectors35ORGRESET36DC.WMain;RESET:HCS08PowerOn(PON)procedure.Todoensimblico.Tampocousaremos'RESET',pueshayunaseriedesmbolosparalatabladeInterruptVectors,definidosporelmanufacturante.6) Forma DEFINITIVA para programar el HCS08:

    FULLUseofMotorola'sSymbolicLanguageAhoras;estaesLAformadefinitivaqueusteddebeusarparaescribirsusprogramas.["Laboratorios\Lab1\01d_L1.asm"]01;********************************************************************02;01d_L1.asmUseofMotorola'sSymbolicLanguage,Rev.EV08J201203;LuisG.UribeC.,J09A200904;Aspectosmnimosnecesariosalescribirunprograma:05;1.Definirposicininicialdelcdigo.$8000up06;2.Escribirelprograma(buscarcdigoSIMBLICOdec/instruccin)07;3.DefinirDireccindeiniciodeejecucinluego08;deRESET(vector$FFFE)0910;11;Includefiles:Workexactlylikein"C";defineprocessorsymbols:12;..Z_RAMStart,ROMStart,INT_RESET,registers,I/Oports...13;..derivative.incispreparedbytheProjectWizzard,foreachCPU.1415INCLUDE'derivative.inc'16;17;Definicindevariables1819ORGZ_RAMStart;$802021Var:DS.B1;DS.B?1bytevariablesName&DataStorage2223;===================================================================24;BeginofCodeSection25ABSENTRYMain;Exportsymbol(DEBUGGERentry)2627ORGROMStart;HCS08ROMStart(Flash)28Main:clrVar;ensayar:clrVAR(maysculas.Daerror)29loop:incVar30braloop31;

    49

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    32nop;

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    12ram:setZ_RAMStart;Set'ram'to$8013;14;VariablesDefinicin(ADVANCED)1516ORGram;Startin$801718Var:DS.B1;DS.B?1bytevariablesName&DataStorage19Varend:20ram:SETVarend;$812122ORGram;Restartin$8123Var2:DS.B124Var2end:25ram:SETVar2end;$822627ORGram;Restartin$8228Var3:DS.B129Var3end:30ram:SETVar3end;$83...andSOON.3132;====================================================================33;BeginofCodeSection34ABSENTRYMain;Exportsymbol(DEBUGGERentry)36ORGROMStart;HCS08ROMStart(Flash)37Main:ldhx#Var38ldhx#Var239ldhx#Var340bra*41;42nop;

  • I N G . L U I S G . U R I B E C C O M P U T E R A R C H I T E C T U R E : T H E M C 9 S 0 8

    ORGram:10;Parameterdefinitions12ram:setZ_RAMStart;Set'ram'to$8013;14;VariablesDefinicin(NORMAL,LAQUEUD.DEBEEMPLEAR)16ORGram;Startin$8018Var:DS.B1;DS.B?1bytevariablesName&DataStorage23Var2:DS.B128Var3:DS.B1Hastaalllapartecomndeladefinicindevariables,queustedSIEMPREusarensusprogramas.Ahora,sisedesearadefinirunavariable,ymsadelanteotra,yluegootra,eltrucoconsisteenREDEFINIRlaposicin'RAM'paraquellevelacuentahastaadndehemosllegadodefiniendovariables.Poreso,enelprogramaqueestamosanalizandoelcdigoNO va