Está en la página 1de 7

Universidad Mayor de San Andrés ETN 801 - Microprocesadores

Facultad de Ingeniería Segundo Examen Parcial – Diseño


Ingeniería Electrónica Ing. Marcelo Ramírez M.

E2 Sem I/19 5/06/19

Nombre ________________________________________ CI: ________________

1. Un microcomputador tiene la siguiente configuración:

P: Microsex de 8 bits,


Capacidad de direccionamiento de memoria 64KB
Capacidad de direccionamiento de E/S 256
BCON: RD, WR, -M/P

Memoria: RAM de 1,5 KB al inicio del mapa


ROM de 2KB al final del mapa
Descodificación parcial, no están conectadas ni disponibles
las líneas A14:12.

E/S: Teclado hexadecimal matricial 4x4, emplea los puertos 0FFH.


Pantalla de 6 visores alfanuméricos 7-seg en las siguientes
direcciones: PLED1  PLED4: 07CH  07FH
Descodificación parcial, no están conectadas ni disponibles
las líneas A5:3.

Requerimiento:

 Se debe incorporar una expansión de ROM de 2KB lo más


adyacente posible a la ROM instalada.
 Se debe incorporar un segundo teclado idéntico al instalado y
dos visores 7-seg para completar la pantalla.

Tareas:

1.1. Elaborar los mapas de direccionamiento del computador.


1.2. Establecer dónde es posible incorporar las expansiones en cada
caso.
1.3. Diseñar de la expansión sin incluir la capacidad instalada.

2. Diseñe un programa para sumar 2 números de 64 bits no signados sin


desborde, en lenguaje del 6800 o del Z80. Puede emplear el modelo de
memoria del ET-3400 o del KENTAC-Z800.

Página 1 de 1
FB-1.1

Memoria

Es útil elaborar una tabla de direccionamiento para encontrar el mapa y los espacios libres.

Para las direcciones establecidas al considerar A14:12 con los valores extremos 000 y
111 se obtiene los rangos de la tabla. Con ello se obtiene el mapa de
direccionamiento de memoria.

Existen 7 di e iones alias pa a ada an o y se observa que la memoria ROM de


1KB puede implementarse adyacente a la ROM instalada. Por tanto, se obtiene el rango de 2K de ROM, desde
F000 hasta F7FF.

La tabla ayuda también a encontrar un espacio para la expansión de ROM, como se ve.

E/S

Para el caso de direccionamiento E/S se elabora, igualmente, una tabla de direccionamiento que ayuda al análisis
y permite obtener los mapas.

Al igual que en el caso de la memoria, se observa que existen 7 alias por cada dirección de puerto establecida.
En este caso, esos alias no son direcciones consecutivas, lo que permite incorporar los puertos de expansión para
los visores.
FB-1.2

Memoria

Al observar la tabla de direccionamiento y el mapa de memoria, se establece que, al no contar con tres bits de
direcciones, el espacio se reduce a 64KB8 = 8KB. De la configuración inicial, 1,5KB de RAM y 2 KB de ROM, se
tiene un total de 3,5KB ya ocupados, por lo que se deriva 8KB-3,5KB = 4,5KB de espacio disponible para
expansión. Debido a la descodificación parcial, también existen 7 espa ios alias li es, po lo ue sólo es posi le
colocar la expansión de 2KB en una de dos posibles posiciones.

El espacio de 0,5KB se ubica (con A14:12 = 0000) entre 0600 y 07FFF, por supuesto, con sus alias.

Existen dos espacios de 2K disponibles, el rango desde 0800 hasta 0FFF y el espacio contiguo a la ROM, desde
F000 hasta F7FF y ambos también cuentan con 7 alias cada uno. Se elige este último rango de direcciones.

E/S

Para el caso de los puertos, se observa que existen 32 direcciones válidas; al ser utilizadas 5 direcciones para
puertos de salida se cuenta con 32-5 = 27 direcciones libres. Sólo se usa un puerto de entrada por lo que se tiene
31 direcciones disponibles para puertos de entrada.

Para los dos visores adicionales, PLED5 y PLED6, se elige las direcciones contiguas al grupo de visores ya
instalados, es decir, PLED5  7A y PLED6  7B.

Para el teclado adicional se elige la siguiente dirección contigua a los puertos del teclado instalado con el fin de
minimizar el uso de inversores en el descodificador, es decir, FILA y COLA usan la dirección FE, donde FILA es el
puerto de salida de selección de las filas de la matriz del teclado y COLA es el puerto de entrada que permite leer
el estado de las columnas.

FB-1.3

Para el desarrollo de la expansión se sigue los cinco pasos de diseño.

1. Esquema.

El diagrama se explica solo. Se especifica la necesidad de dos puertos, uno E y otro S, para el teclado.
2. Mapas de direccionamiento.

3. Tablas de direccionamiento.

4. Ecuaciones del descodificador de direcciones.

_ = ∙ ̅̅̅̅̅̅
̅/ ∙𝒂 ̅̅̅̅̅
∙𝒂

_ = ∙ ̅/ ∙𝒂
̅̅̅ ∙ 𝒂 ∙ 𝒂
̅̅̅ ∙ 𝒂 ∙ 𝒂
̅̅̅

_ = ∙ ̅/ ∙𝒂
̅̅̅ ∙ 𝒂 ∙ 𝒂
̅̅̅ ∙ 𝒂 ∙ 𝒂

_ 𝒊 𝒂= ̅̅̅
∙ ̅/ ∙𝒂 ∙𝒂 ∙𝒂 ∙𝒂 ∙𝒂

_ 𝒂= ∙ ̅/ ∙𝒂 ∙𝒂 ∙𝒂 ∙𝒂 ∙𝒂
̅̅̅
5. Diagrama de bloques de montaje.
FB-2 Suma de 2 números de 64 bits no signados sin desborde.

1. Esquema de solución.

Para evitar desborde se añade un MSB a la suma. Las sumas son iterativas entre bytes del mismo peso con
acarreo (inicialmente en 0). Si se produce un acarreo final se incrementa el MSB. Se requiere un puntero y un
contador. Los números se organizan en la memoria empezando por el LSB en la dirección más baja.

3. Flujograma.

2. Algoritmo.

A. Variables y datos

NBYTES 8, cantidad de bytes


datos 3x8+1=25 octetos
SUM1 0, desplz a sumando1
SUM2 8, desplz a sumando2
SUMA 16, desplz a suma
SUMA_MSB 24, desplz al MSB de suma
contador 1 octeto, ci: NBYTES
puntero ci: datos
acarreo bandera, ci: 0

B. Procedimiento

1. iniciar variables
 contador de bytes
 puntero a datos
 borrar MSB suma
 borrar acarreo 4. Modelos de programación.

2. sumar bytes 6800 – ET-3400


 leer byte sumando1 datos 25 bytes en RAM, dir inicio: 0
 sumar byte sumando2 puntero IX, ci: datos
 guardar en byte suma contador B, ci: NBYTES
borrador A
acarreo C, bandera, ci: 0
3. ¿último?
 apuntar a sgte byte
 contabilizar z80 – KENTAC-z800
datos 25 bytes en RAM, dir inicio: 8000H
 no, volver a 2.
puntero IX, ci: datos
contador B, ci: NBYTES
4. ¿acarreo final? borrador A
 sí, generar MSB suma acarreo C, bandera, ci: 0

5. salir
5. Programas en código fuente.

;*** Suma de 2 enteros no signados de 32 bits sin desborde


;*** MP6800 – Computador ET-3400

.org 0
NBYTES .equ 8 ; cantidad de bytes
SUM1 .equ 0 ; desplazamiento a sumando1
SUM2 .equ NBYTES ; desplazamiento a sumando2
SUMA .equ 2*NBYTES ; desplazamiento a suma
SUMA_MSB .equ 3*NBYTES ; desplazamiento a MSB suma

.dseg
datos .rb 3*NBYTES+1 ; 25 bytes

.cseg
; iniciar variables
ldx #datos ; puntero a datos
clr SUMA_MSB,x ; borrar MSB suma y acarreo
ldab #NBYTES ; contador de bytes
; sumar bytes
sgte: ldaa SUM1,x ; leer byte de sumando1
adca SUM2,ix ; sumar byte de sumando2
staa SUMA,ix ; actualizar suma
; ¿último?
inx ; apuntar a siguiente byte
decb ; contabilizar
bne sgte ; no, siguiente byte
; ¿acarreo final?
bcc salir ; ¿acarreo?
inc SUMA,x ; sí, generar MSB suma
salir: wai
.fin

;*** Suma de 2 enteros no signados de 32 bits sin desborde


;*** MPZ80 – Computador KENTAC-z800

.org 8000H
NBYTES .equ 8 ; cantidad de bytes
SUM1 .equ 0 ; desplazamiento a sumando1
SUM2 .equ NBYTES ; desplazamiento a sumando2
SUMA .equ 2*NBYTES ; desplazamiento a suma
SUMA_MSB .equ 3*NBYTES ; desplazamiento a MSB suma

.dseg
datos .rb 3*NBYTES+1 ; 25 bytes

.cseg
; iniciar variables
ld ix,datos ; puntero a datos
xor a ; borrar acarreo
ld (ix+SUMA_MSB),a ; borrar MSB suma
ldab b,NBYTES ; contador de bytes
; sumar bytes
sgte: ld a,(ix+SUM1) ; leer byte de sumando1
adc a,(ix+SUM2) ; sumar byte de sumando2
staa (ix+SUMA),a ; actualizar suma
; ¿último?
inc ix ; apuntar a siguiente byte
dec b ; contabilizar
jp nz,sgte ; no, siguiente byte
; ¿acarreo final?
jp nc,salir ; ¿acarreo?
inc (ix+SUMA) ; sí, generar MSB suma
salir: halt
.fin

También podría gustarte