You are on page 1of 18

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Per, Decana de Amrica

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA E.A.P. INGENIERA DE SOFTWARE

Proyecto De Arquitectura de Software


Curso: Arquitectura de Computadoras.

Alumno: Montes Anccasi Albert Noriega Yarleque Hector Ramirez Huerta Jorge 09200217 09200068 09200153

Lima-Noviembre 2012

Proyecto de Arquitectura de computadoras RULETA DE LA FORTUNA


Introduccin.
El proyecto est basado en el juego de la ruleta, La ruleta es un juego de azar tpico de los casinos, La magia del movimiento de las ruedas tuvo que impactar a todas las generaciones. La aparente quietud del centro, el aumento de velocidad conforme nos alejamos de l, la posibilidad de que se detenga en un punto al azar; todo esto tuvo que influir en el desarrollo de distintos juegos que tienen la rueda como base. En nuestra aplicacin podremos apreciar una ruleta la cual contar con 8 figuras diferentes alrededor del centro de la ruleta, por esta figura el usuario podr apostar y en el caso que acierte ganar un porcentaje mayor a su apuesta, caso contrario perder su apuesta.

Objetivos Construir un juego de la ruleta suerte. Dirigir el comportamiento de una ruleta mediante un programa escrito en lenguaje assembler usando los modos grficos, modo texto y usando el puerto paralelo. Reforzar nuestros conocimientos del lenguaje ensamblador. Entender, comprender y utilizar el funcionamiento del puerto paralelo. El Uso Exclusivo del Lenguaje Assembler mediante herramientas como el emu8086. -E l Uso de los comandos y rutinas del Lenguaje Assembler aprendidos y utilizados en este curso.

Marco terico
Puerto paralelo

La distribucin de seales en los pines del conector de salida del PC (hembra) se muestra a continuacin:
Pines
Los pines del puerto paralelo con conector DB25 son:

Distribuci n de entradas y salidas en el conector DB25 para el puerto paralelo.

Pin No (DB25) Pin No (36 pin) Nombre de la seal Direccin Registro - bit Invertidas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18-25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 32 31 36 19-30,33,17,16 Strobe Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7 Ack Busy Paper-Out Select Linefeed Error Reset Select-Printer Tierra E/S Salida Salida Salida Salida Salida Salida Salida Salida Entrada Entrada Entrada Entrada E/S Entrada E/S E/S Control-0 Data-0 Data-1 Data-2 Data-3 Data-4 Data-5 Data-6 Data-7 Status-6 Status-7 Status-5 Status-4 Control-1 Status-3 Control-2 Control-3 Si No No No No No No No No No Si No No Si No No Si -

Estructura Del Sistema:


DESCRIPCIN DEL HARDWARE.

a) Materiales usados:

1 placa multiuso perforada

Adaptador de puerto paralelo hembra

Cable puerto paralelo

Cable UTP 2 metros

8 resistencias de 200 ohmios

8 leds de color rojo grandes

estao

b) Definicin de la estructura.

A Inicio

Diagrama de Flujo
Declaramos e inicializamos

variables

No Contador ++

opcionIngresada es igual a numGanador ?

Si
CX 8 Todos 0FFh

Cargar la direccin del segmento de datos al registro de segmento B

No

Contador==3

Mostrar mensaje2 Llamar a la macro modo texto Contador 0 Mostrar men opcionIngresada carcter 30h Establecer coordenadas Posicionar cursor Solicita ingreso de carcter

Si Encender /apagar todos los leds

CX > 0

Si No

Mostrar mensaje3

Mostrar mensaje1

Generar el nmero ganador Imprime el nmero ganador Si Contador == 0 No

No

Solicita ingreso de carcter

Carcter==ESC Si
Establecer coordenadas Posicionar cursor Solicita ingreso de carcter

Borrar pantalla
Carcter==ESC Imprimir etiquetas

Si

No
opcionIngresada caracterLeido -30h

Simular ruleta Establecer coordenadas y cambiar color

Salir

Llamar a posicionar Llamar a imprime carcter

c) Cdigo del Proyecto

1 .model small 2 .stack 100h .data 3 4 5 6 7 actual db 0000_0001b puerto dw 03BCH linea db "************************************",0ah,0dh,"$" textInicial db " Aplicacion: Ruleta de la fortuna",0ah,0dh,"$" menu db "1. Naranja",0ah,0dh,"2. Bar",0ah,0dh,"3. Campana",0ah,0dh,"4. Fresa",0ah,0dh,"5. Siete",0ah,0dh,"6. Limon",0ah,0dh,"7. Diamante",0ah,0dh,"8. Cereza",0ah,0dh," ( Para salir presione ESC ) ",0ah,0dh,"$" textFinal db " Digite la opcion que desee --> $" vectorX db 12,15,19,22,22,19,15,12 vectorY db 6,3,3,6,10,13,13,10 color db 0E5h colorTexto db 0Ah cNegro db 00h etqNaranja db "1.Naranja$" etqCereza db "8. Cereza$" etqBar_Campana db "2.Bar 3.Campana$" etqFresa db "4. Fresa$" etq7 db "5.Diamante$" etqDiamante_limon db "7.Siete 6.Limon$" texto1 db " ** Ganastes **",0ah,0dh,"",0ah,0dh," Presione ESC para salir$" texto2 db " ** Intentalo nuevamente **",0ah,0dh,"Digite su opcion --> $" texto3 db " ** Perdistes ** ",0ah,0dh," Presione ESC para salir$" salida db ? numGanador db ? opcionIngresada db ? velocidad dw ? ganador dw ? contador db ? todos db ? ; prende todos los leds

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

30 .code 31 generarGanador proc 32 mov ah, 2ch 33 int 21h ; captura la hora

34 35 36 37 38 39 40

cmp dh,0 jg sgt add dh,1 jmp salta sgt: cmp dh,8 jle salta

41 mov cl,2 42 shr dh,cl 43 44 45 46 cmp jle mov shr dh,8 salta cl,2 dh,cl

47 salta: 48 mov ganador,dh 49 ret

;guarda el numero ganador en la variable

50 generarGanador endp 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 borrarPantalla proc mov ax, 0600h mov bh, colorTexto mov cx, 0 mov dx, 1950h int 10h ret endp imprimeMenu proc mov dx, offset linea call imprime_Texto mov dx, offset textInicial call imprime_Texto mov dx, offset linea call imprime_Texto mov dx, offset menu call imprime_Texto mov dx, offset linea call imprime_Texto mov dx, offset textFinal call imprime_Texto

72 ret 73 imprimeMenu endp 74 imprime_Texto proc

75 76 77 78 79 80 81 82 83 84 85 86 87 88

mov ah,09 int 21h ret imprime_Texto endp imprime_Caracter proc mov ah,09 int 10h ret imprime_Caracter endp posicionar proc mov ah,2 ; posiciona el cursor int 10h ret posicionar endp

89 etiquetas proc 90 mov dl,2 91 mov dh,6 92 call posicionar 93 mov dx, offset etqNaranja 94 call imprime_Texto 95 mov dl,2 96 mov dh,10 97 call posicionar 98 mov dx, offset etqCereza 99 call imprime_Texto 100 mov dl,10 101 mov dh,1 102 call posicionar 103 mov dx, offset etqBar_Campana 104 call imprime_Texto 105 106 107 108 109 110 111 112 113 114 mov dl,25 mov dh,6 call posicionar mov dx, offset etqFresa call imprime_Texto mov dl,25 mov dh,10 call posicionar mov dx, offset etq7 call imprime_Texto

115 mov dl,9 116 mov dh,15

117 118 119 120 121 122 123 124 125

call posicionar mov dx, offset etqDiamante_limon call imprime_Texto ret etiquetas endp ruleta proc lea SI,vectorX lea DI,vectorY mov bl,1

126 next: 127 128 129 130 push cx push bx xor cx,cx mov bl,color ; desplaza en eje x ; desplaza en eje y

131 mov dl,[SI] 132 mov dh,[DI]

133 mov al,04h; caracter a imprimir 134 mov cx,1 ; # de caracteres a imprimir 135 call posicionar 136 call imprime_Caracter 137 pop bx 138 mov salida,bl; imprime en la ruleta real 139 140 141 142 143 mov DX,110 mov al,bl out dx,al shl bl,1 push bx

; multiplica por 2

144 mov cx,velocidad los leds 145 hacer: 146 mov al,salida 147 mov dx,puerto 148 out dx,al 149 loop hacer

; maneja la velocidad del encendido de

150 mov cx, velocidad ; realizamos un bucle adicional para hacer mas lento el encendido 151 hacerDenuevo: 152 mov al,salida 153 mov dx,puerto

154 out dx,al 155 loop hacerDenuevo 156 xor cx,cx 157 158 159 160 161 162 163 164 165 166 167 mov mov mov mov mov dl,[SI] ; desplaza en eje x dh,[DI] ; desplaza en eje y bl,cNegro al,04h; 04h ; caracter a imprimir cx,1 ; # de caracteres a imprimir

call posicionar call imprime_Caracter pop bx pop CX inc SI inc DI

168 loop next 169 ret 170 ruleta endp 171 172 173 174 175 176 177 178 179 180 181 182 modoTexto macro mov ah, 0 mov al, 3 int 10h endm mostrarMensaje macro mov dl,3 mov dh,17 call posicionar mov dx, offset txt call imprime_Texto endm txt

183 Inicio: 184 mov ax,@data 185 mov ds,ax 186 retornar: 187 modoTexto 188 mov contador,0 189 call imprimeMenu 190 jmp posiGanador 191 volver:

192 193 194 195 196 197 198

mov dl,33 mov dh,13 call posicionar mov ah,8h int 21h cmp al,1bh ;hex de escape je salir ; si ingresa esc sale del programa

199 sub al,30h 200 mov opcionIngresada,al 201 jmp seguir 202 203 204 205 206 207 208 209 210 211 posiGanador: mov dl,17 ; posicionamos el cursor en (17,0) mov dh,0 call posicionar otra: call generarGanador add dh,30h mov ah,2 mov dx,dh int 21h

; generamos el numero ganador ; imprime el caracter

212 cmp contador,0 213 je volver 214 seguir: 215 call borrarPantalla 216 xor BX,BX 217 call etiquetas

;si el contador es igual a 0

; imprime las etiquetas en forma circular

218 mov CX,4 219 mov velocidad,01FFFh 220 rondas: 221 push CX 222 mov CX,8 ; cantidad de ciclos 223 call ruleta 224 ;add velocidad,1000h ; incrementa la velocidad para que sea mas lenta 225 pop CX 226 loop rondas 227 mov CX,3 228 mov velocidad,02FFFh 229 rondas1:

230 push CX 231 mov CX,8 ; cantidad de ciclos 232 call ruleta 233 add velocidad,1000h ; incrementa la velocidad para que sea mas lenta 234 pop CX 235 loop rondas1 236 mov CX,3 237 rondas2: 238 push CX 239 mov CX,8 ; cantidad de ciclos 240 call ruleta 241 add velocidad,1000h ; incrementa la velocidad para que sea mas lenta 242 pop CX 243 loop rondas2 244 245 246 247 248 249 250 251 252 253 254 255 256 mov velocidad,0FFFFh mov CX,ganador ; para en el numero ganador mov numGanador,cl call ruleta dec si dec di mov dl,[SI] ; desplaza en eje x mov dh,[DI] ; desplaza en eje y mov bl,1100_1110b;color mov al,04h ; caracter a imprimir mov cx,1 ; # de caracteres a imprimir call posicionar call imprime_Caracter

257 mov ah,opcionIngresada 258 cmp ah,numGanador ; comparamos la opcion ingresada con el numero Ganador 259 je ganar 260 inc contador 261 cmp contador,3 262 je perder 263 mostrarMensaje texto2 ; si perdio y el contador es menor a 3, muestra el mensaje para solicitar el ingreso de un caracter 264 265 266 267 mov int sub mov ah,8h ; Espera el ingreso de una tecla 21h al,30h opcionIngresada,al ; se guarda la opcion ingresada

268 jmp otra 269 perder: 270 mostrarMensaje texto3 jugador pierde 271 jmp escape 272 ganar:

; saltamos para iniciar otra ronda

; mostramos un mensaje cuando el

273 mov cx,9 ; determina la cantidad de repeticiones del encendido/apagado de los leds 274 mov todos,1111_1111b 275 encenderApagar: 276 push cx 277 mov cx,0FFFFh todos los leds 278 279 280 281 282 repetir: mov al,todos mov dx,puerto out dx,al loop repetir

;determina la velocidad de encender/apagar

283 not todos ; invierte el valor de la variable 284 pop cx 285 loop encenderApagar 286 mostrarMensaje texto1 287 288 289 290 291 292 escape: mov ah,8h ; Espera el ingreso de una tecla int 21h cmp al,1bh ; Hexadecimal de escape je retornar jmp escape

293 ; Termina el programa 294 salir: 295 mov ax,4c00h 296 int 21h
297 end

Inicio

CAPTURAS:

Hardware:

Testing del proyecto: