SlideShare a Scribd company logo
1 of 84
ESCUELA POLITECNICA NACIONAL

        SISTEMAS MICROPROCESADOS


TEMA:

IMPLEMENTACION DEL JUEGO DE TRES
        EN RAYA CON EL
MICROCONTROLADOR ATMEGA 164P

INTEGRANTES:

 • Cevallos David

 • Chávez Ernesto

 •   Simbaña Andres




                      3
ÍNDICE




1. JUEGO DEL TRES EN RAYA                         4
2. PANTALLA GLCD                                  5
3. DISEÑO DE SOFTWARE                             12
4. CIRCUITO ESQUEMÁTICO                           14
5. LISTADO DE MATERIALES                          16
6. PROGRAMA DESARROLLADO                          16
7. SIMULACIÓN DEL CIRCUITO                        77
8. PARTE PRÁCTICA (IMPLEMENTACIÓN DEL CIRCUITO)   80
9. CONCLUSIONES                                   84
10. DIFICULTADES Y RECOMENDACIONES                84
11. BIBLIOGRAFÍA                                  85




                               4
PROYECTO FINAL SISTEMAS MICROPROCESADOS
El presente proyecto tiene como objetivo implementar un juego de tres en raya que
permita jugar entre un jugador y la PC o entre dos jugadores, por medio de una pantalla
LCD gráfica para visualizar el juego y pulsadores.


1. JUEGO DEL TRES EN RAYA

El juego tres en línea es también conocido como tres en raya, juego del gato, tatetí,
triqui, totito, tres en gallo, michi o la vieja, es un juego en el cual se necesita dos
jugadores en el cual cada uno de ellos marca una señal diferente en los espacios de un
tablero de 3x3 alternadamente (para el caso de nuestro proyecto los símbolos a utilizar
son caritas felices y caritas tristes).
Un jugador gana si consigue tener una línea de tres en sus símbolos: la línea puede ser
horizontal, vertical o diagonal.
Una partida ganada por un jugador cuyo símbolo es la “X”:




También puede existir una partida que puede terminar en empato entre los dos
jugadores:




Hay que tener en cuenta que el juego perfecto termina en empate sin importar con qué
juega el primer jugador. Este juego es practicado en su mayor parte por niños o jóvenes.
La simplicidad del juego de tres en raya lo hace ideal y por ello sirve como herramienta
pedagógica para enseñar conceptos de teoría de juegos y la rama de inteligencia
artificial que se encarga de la búsqueda de árboles de juego.




                                           5
2. PANTALLA GLCD


Todas las posibilidades que ofrecen la mayoría de las pantallas LCD Gráficas que se
utilizan van controladas por el microcontrolador T6963C de TOSHIBA que fue
diseñado con el objetivo de controlar pantallas de cristal líquido de pequeño, mediano y
gran tamaño. Es este chip el que recibe e interpreta todos los comandos que se le envían
a la pantalla, ya sea desde un PC o un microcontrolador.

MODELO DE LA PANTALLA A UTILIZARSE: JHD240128D
RESOLUCIÓN: 240 pixels × 128 pixels.
MICROCONTROLADOR QUE EMPLEA: T6963C de TOSHIBA.


2.1. CARACTERÍSTICAS TÉCNICAS




2.2. REGISTRO DE STATUS

Debe ser chequeado antes de ejecutar un comando, un dato de 1 byte o un dato de 2
bytes, pues en caso de que el LCD esté ocupado ejecutando alguna acción, la nueva
acción encomendada no se ejecutará.




                                           6
2.3. PINES

El modelo usado para el proyecto es la pantala JHD240128D cuya distribución de pines
es la siguiente:




                                         7
2.4. PROCEDIMIENTO PARA REALIZAR ACCIONES EN BASE A
COMANDOS

Veamos a continuación el procedimiento de envío de comandos. Para ello mostramos
los diagramas correspondientes:

a) Para escribir un comando.




b) El caso de un comando que requiere un dato de 1 byte.




                                          8
c) El caso de un comando que requiere 2 datos de 1 byte cada uno.




2.5. MEMORIA V-RAM

En modo single la memoria V-RAM se distribuye de la siguiente manera:




                                          9
Se puede configurar por software donde se desea que empiece cada sección de la
memoria.


2.6. CG-ROM INTERNO (GENERADOR DE CARACTERES INTERNO)


El T6963C cuenta con una memoria ROM donde se almacenan caracteres internos. A
continuación se detallan estos caracteres:




                                     10
2.7. RESUMEN DE COMANDOS DE PARA PODER SER UTILIZADA



Para ejecutar una acción en primer lugar se envían los datos y luego el comando
                                 respectivo.




                                      11
12
En base a estos conceptos ya podemos trabajar sin problemas con la pantalla GLCD.

  3. DISEÑO DE SOFTWARE

                                            .




                                PROGRAMA PRINCIPAL
                                    JUEGO.ASM




                                  CONTROLA EL JUEGO




      LCD.ASM                  OPCIONESGRAFICAS.ASM                    JUGADOR.ASM




Contiene subrutinas               Contiene subrutinas                Contiene subrutinas
asociadas a la                    asociadas a los                    asociadas al juego de
inicialización de la              gráficos que se                    cada jugador:
pantalla GLCD                     deben mostrar en la                jugador 1 y jugador
así como para                     pantalla conforme                  2 o PC. Es decir se
escribir comandos,                avanza el juego, es                implementa el
escribir un dato de 1             decir aquí se                      código para verificar
byte, escribir un dato            implementa el                      la victoria de un
de 2 bytes y verificar            código para dibujar                jugador
la disponiblidad de               los íconos, líneas,                determinado, para
la pantalla GLCD.                 mensajes, posicionar               determinar un
                                  el cursor, borrar la               empate, conversión a
                                  pantalla, etc.                     BCD de los
                                                                     resultados,
                                                                     ocupación de
                                                                     casillas, etc.




                                           13
LCD.ASM

Subrutinas:

  1.   INICIALIZAR
  2.   CMD
  3.   DATO1
  4.   DATO2
  5.   STATUS


OPCIONESGRAFICAS.ASM

Subrutinas:

  1. MENU
  2. MENU1
  3. BORRAR
  4. HABILITAR_CURSOR
  5. DESHABILITAR_CURSOR
  6. DECODIFICAR_CURSOR
  7. MOVER_IZQUIERDA
  8. MOVER_DERECHA
  9. SUBIR
  10. BAJAR
  11. POSICIONARCURSOR
  12. BAJARSELECTOR
  13. SUBIRSELECTOR
  14. FORMARCARACTERES
  15. MSJ_JGDVSPC
  16. MSJ_JGDVSJGD
  17. DIBUJARTABLERO
  18. DIBUJARLINEA1
  19. DIBUJARLINEA2
  20. DIBUJARCARAFELIZ
  21. DIBUJARCARATRISTE
  22. DIBUJAR_CARA_J1
  23. DIBUJAR_CARA_J2
  24. LINEAHORIZONTAL
  25. LINEAVERTICAL_CARAFELIZ
  26. DIB_VER
  27. LINEAVERTICAL_CARATRISTE
  28. LINEADIAGONALIZQUIERDA_FELIZ
  29. LINEADIAGONALIZQUIERDA_TRISTE
  30. LINEADIAGONALDERECHA_FELIZ
  31. LINEADIAGONALDERECHA_TRISTE
  32. DIBUJARVICTORIA_J1
  33. DIBUJARVICTORIA_J2



                             14
JUGADOR.ASM

Subrutinas:


   1. COMPROBAR_VICTORIA_J1
   2. COMPROBAR_VICTORIA_J2
   3. MOSTRARVICJ1
   4. MOSTRAREMP
   5. MOSTRARVICJ2
   6. COMPROBAR_CASILLA_J1
   7. COMPROBAR_CASILLA_J2
   8. BINTOBCD
   9. DECOD
   10. ENCERARCASILLAS
   11. ENCERARPUNTAJES
   12. HABILITARJ1
   13. HABILITARJ2
   14. INCREMENTAR_VICTORIA_J1
   15. INCREMENTAR_EMPATE
   16. INCREMENTAR_VICTORIA_J2
   17. ESPERA
   18. ESPERA2
   19. TURNO_J1
   20. TURNO_J2
   21. TURNO_PC
   22. JUGAR_PC
   23. GANAR_PC
   24. CONTAR
   25. VERIFICAR
   26. IMPEDIRGANAR
   27. SCONTAR
   28. SVERIFICAR
   29. PONER_PC


4. CIRCUITO ESQUEMÁTICO

El circuito esquemático es el que se muestra en la figura.




                                           15
Descripción

El pórtico A es usado para controlar las señales de control de la pantalla GLCD de la
siguiente manera:

PA0: CD (escribir comandos o datos)
PA1: RD (para leer)
PA2: WR (para escribir)
PA3: CE (chip enable)
PA4: RESET

Los 8 pines del pórtico C son usados para los datos que se le entregarán al GLCD.

PC0: D0
PC1: D1
PC2: D2
PC3: D3
PC4: D4
PC5: D5



                                          16
PC6: D6
PC7: D7
PC8: D8

El pórtico D se utiliza para controlar los movimientos del jugador 1 como se muestra a
continuación:

PD0: Subir
PD1: Bajar
PD2: Derecha
PD3: Izquierda
PD4: Seleccionar

El pórtico B se utiliza para controlar los movimientos del jugador 2 como se muestra a
continuación:

PB0: Subir
PB1: Bajar
PB2: Derecha
PB3: Izquierda
PB4: Seleccionar

5. LISTADO DE MATERIALES

   •   1 Protoboard.
   •   1 Pantalla GLCD 240x128 pixels que opere con el microcontrolador TOSHIBA
       T6963C.
   •   Un microcontrolador ATMEGA 164P.
   •   11 pulsadores normalmente abiertos.
   •   10 capacitores 0,1 uF.
   •   1 capacitor de 10 nF.
   •   Estaño.
   •   Pasta para soldar.
   •   Cautín.
   •   Alambre para conecciones.
   •   1 Potenciômetro de 50 KΩ .
   •   1 resistencia de 470 Ω .

6. PROGRAMA DESARROLLADO

ARCHIVO JUEGO.ASM

.NOLIST
.INCLUDE "m164pdef.inc"
.LIST

.DEF AUX1=R16                   ;REGISTROS AUXILIARES PARA OPERACIONES
.DEF AUX2=R17
.DEF AUX3=R18



                                         17
.DEF AUX4=R19
.DEF AUX5=R20
.
.DEF PANTALLA=R21                      ;0 MENU      1 MENU1 2 JUEGO
.DEF MODO_JUEGO=R22                         ;0 JGD VS PC 1 JGD VS JGD
.DEF MODO=R23                         ;INDICA EL MODO DE VICTORIA
.DEF ICONO_J1=R24                       ;0 CARA FELIZ 1 CARA TRISTE
.DEF CURSOR=R25                    ;INDICA LA CASILLA A OCUPARSE

.DSEG

POSICION0: .BYTE 1
POSICION1: .BYTE 1
POSICION2: .BYTE 1
POSICION3: .BYTE 1
POSICION4: .BYTE 1
POSICION5: .BYTE 1
POSICION6: .BYTE 1
POSICION7: .BYTE 1
POSICION8: .BYTE 1
VICJ1: .BYTE 1
EMP:    .BYTE 1
VICJ2: .BYTE 1
VIC_J1_MSB: .BYTE 1
VIC_J1_LSB: .BYTE 1
EMP_MSB: .BYTE 1
EMP_LSB: .BYTE 1
VIC_J2_MSB: .BYTE 1
VIC_J2_LSB: .BYTE 1

.CSEG

RJMP PROGRAMA

.ORG $0A

RJMP JUGADOR2

.ORG $0E

RJMP JUGADOR1

PROGRAMA:

LDI AUX1, LOW(RAMEND)        ;INICIALIZACIÓN DEL STACK POINTER
OUT SPL,AUX1
LDI AUX1, HIGH(RAMEND)
OUT SPH, AUX1

LDI AUX1,$FF          ;CONFIGURACIÓN DE LOS PÓRTICOS DE SALIDA


                              18
OUT DDRA,AUX1
OUT DDRC,AUX1
                                               ;ACTIVACIÓN RESISTENCIAS DE PULL-UP
OUT PORTB,AUX1
OUT PORTD,AUX1

RCALL INICIALIZAR
RCALL FORMARCARACTERES
RCALL BORRAR
RCALL MENU

LDI PANTALLA,0
LDI MODO_JUEGO,0
LDI ICONO_J1,0

LDI AUX1,$08                                                ;HABILITA INT. PORTICO
STS PCICR,AUX1
LDI AUX1,$12
STS PCMSK3,AUX1
LDI AUX1,$0F
OUT PCIFR,AUX1

SEI                                     ;HABILITACIÓN GLOBAL DE INTERRUPCIONES

LOOP: CPI PANTALLA,0
      BREQ LOOP

CPI PANTALLA,0
BREQ LOOP

RCALL BORRAR
RCALL MENU1

LOOP1: CPI PANTALLA,1
       BREQ LOOP1

CPI PANTALLA,1
BREQ LOOP1

;-----------------------------------------------------
RCALL BORRAR
RCALL ENCERARPUNTAJES
LDI PANTALLA,2
CPI MODO_JUEGO,0
BREQ JGDVSPC
RJMP JGDVSJGD

JGDVSPC:         RCALL HABILITAR_CURSOR
                 RCALL BORRAR
                 RCALL DIBUJARTABLERO                              ;JUGADOR VS PC


                                                   19
RCALL MSJ_JGDVSPC
           RCALL MOSTRARVICJ1
           RCALL MOSTRAREMP
           RCALL MOSTRARVICJ2
           RCALL ESCRIBIR_TURNO
           RCALL ENCERARCASILLAS
           LDI XL,0

PLAYER1:   RCALL TURNO_J1
           RCALL POSICIONARCURSOR
           RCALL HABILITARJ1
           CLC
           BUCLE: BRCC BUCLE
           RCALL COMPROBAR_CASILLA_J1
           BRCC BUCLE
           RCALL DIBUJAR_CARA_J1
           RCALL COMPROBAR_VICTORIA_J1
           INC XL
           CPI MODO,8
           BRNE GANAJ1

                CPI XL, 9
                BREQ JUEGOEMPATADO
                RJMP PCS

               GANAJ1:    RCALL INCREMENTAR_VICTORIA_J1
                          RCALL MOSTRARVICJ1
                          RCALL DIBUJARVICTORIA_J1
                          RCALL ESPERA
                          RJMP SEGUNDAMANO

            JUEGOEMPATADO:          RCALL INCREMENTAR_EMPATE
                                    RCALL MOSTRAREMP
                                    RCALL ESPERA
       RJMP SEGUNDAMANO

PCS:   RCALL TURNO_PC
       RCALL POSICIONARCURSOR
       RCALL JUGAR_PC
          MOV CURSOR,R14
          RCALL DIBUJAR_CARA_J2
          RCALL ESPERA2

           RCALL COMPROBAR_VICTORIA_J2
           INC XL
           CPI MODO,8
           BRNE GANAPC

               CPI XL,9
               BREQ ESEMPATE


                               20
RJMP PLAYER1

    GANAPC:                 RCALL INCREMENTAR_VICTORIA_J2
                            RCALL MOSTRARVICJ2
                            RCALL DIBUJARVICTORIA_J2
                            RCALL ESPERA
                            RJMP SEGUNDAMANO

             ESEMPATE:      RCALL INCREMENTAR_EMPATE
                            RCALL MOSTRAREMP
                            RCALL ESPERA
                            RJMP SEGUNDAMANO

SEGUNDAMANO:

             RCALL DIBUJARTABLERO
             RCALL ENCERARCASILLAS
             RCALL HABILITAR_CURSOR
             LDI XL,0

SPCS:        RCALL TURNO_PC
             RCALL JUGAR_PC
             MOV CURSOR,R14
             RCALL DIBUJAR_CARA_J2
             RCALL ESPERA2

             RCALL COMPROBAR_VICTORIA_J2
             INC XL
             CPI MODO,8
             BRNE SGANAPC

                 CPI XL,9
                 BREQ SESEMPATE
                 RJMP SPLAYER1

    SGANAPC:       RCALL INCREMENTAR_VICTORIA_J2
                   RCALL MOSTRARVICJ2
                   RCALL DIBUJARVICTORIA_J2
                   RCALL ESPERA
                   RJMP JGDVSPC

             SESEMPATE: RCALL INCREMENTAR_EMPATE
                        RCALL MOSTRAREMP
                        RCALL ESPERA
                        RJMP JGDVSPC

 SPLAYER1:            RCALL TURNO_J1
                      RCALL POSICIONARCURSOR
                      RCALL HABILITARJ1
                      CLC


                                21
SBUCLE: BRCC SBUCLE
                                RCALL COMPROBAR_CASILLA_J1
                                BRCC SBUCLE
                                RCALL DIBUJAR_CARA_J1
                                RCALL COMPROBAR_VICTORIA_J1
                                INC XL
                                CPI MODO,8
                                BRNE SGANAJ1

                                CPI XL, 9
                                BREQ SJUEGOEMPATADO
                                RJMP SPCS

                        SGANAJ1:           RCALL INCREMENTAR_VICTORIA_J1
                                           RCALL MOSTRARVICJ1
                                           RCALL DIBUJARVICTORIA_J1
                                           RCALL ESPERA
                                           RJMP JGDVSPC

                   SJUEGOEMPATADO:                RCALL INCREMENTAR_EMPATE
                                                  RCALL MOSTRAREMP
                                                  RCALL ESPERA
                                                  RJMP JGDVSPC

;-------------------------------------------------------------------------------------------------
JGDVSJGD: RCALL HABILITAR_CURSOR
                    RCALL BORRAR
                   RCALL DIBUJARTABLERO                                 ;JUGADOR VS JUGADOR
                   RCALL MSJ_JGDVSJGD
                   RCALL MOSTRARVICJ1
                   RCALL MOSTRAREMP
                   RCALL MOSTRARVICJ2
                   RCALL ESCRIBIR_TURNO
                    RCALL ENCERARCASILLAS

      LDI XL,0

        J1: RCALL TURNO_J1
            RCALL POSICIONARCURSOR
              RCALL HABILITARJ1
              CLC
              LAZO: BRCC LAZO

                 RCALL COMPROBAR_CASILLA_J1
                 BRCC LAZO

                 RCALL DIBUJAR_CARA_J1
                 RCALL COMPROBAR_VICTORIA_J1
                 INC XL
                 CPI MODO,8


                                               22
BRNE VICTORIAJ1

                  CPI XL,9
                  BREQ EMPATE
                  RJMP J2

    VICTORIAJ1:             RCALL INCREMENTAR_VICTORIA_J1
                            RCALL MOSTRARVICJ1
                            RCALL DIBUJARVICTORIA_J1
                            RCALL ESPERA
                            RJMP JGDVSJGD2

          EMPATE:          RCALL INCREMENTAR_EMPATE
                           RCALL MOSTRAREMP
                           RCALL ESPERA
                           RJMP JGDVSJGD2

  J2:     RCALL TURNO_J2
          RCALL POSICIONARCURSOR
          RCALL HABILITARJ2

          CLC
          SLAZO: BRCC SLAZO

          RCALL COMPROBAR_CASILLA_J2
          BRCC SLAZO

          RCALL DIBUJAR_CARA_J2
          RCALL COMPROBAR_VICTORIA_J2
          INC XL
          CPI MODO,8
          BRNE VICTORIAJ2

                  CPI XL,9
                  BREQ SEMPATE
                  RJMP J1

    VICTORIAJ2:    RCALL INCREMENTAR_VICTORIA_J2
                   RCALL MOSTRARVICJ2
                             RCALL DIBUJARVICTORIA_J2
                             RCALL ESPERA
                             RJMP JGDVSJGD2

           SEMPATE:          RCALL INCREMENTAR_EMPATE
                             RCALL MOSTRAREMP
                             RCALL ESPERA
                             RJMP JGDVSJGD2

JGDVSJGD2: RCALL DIBUJARTABLERO
           RCALL MSJ_JGDVSJGD


                                 23
RCALL ENCERARCASILLAS
       RCALL HABILITAR_CURSOR
       LDI XL,0

 JGD2: RCALL TURNO_J2
       RCALL POSICIONARCURSOR
       RCALL HABILITARJ2
       CLC
       SLAZO2: BRCC SLAZO2
       RCALL COMPROBAR_CASILLA_J2
       BRCC SLAZO2
       RCALL DIBUJAR_CARA_J2
       RCALL COMPROBAR_VICTORIA_J2
       INC XL

 CPI MODO,8
 BRNE VICTORIAJ22

                CPI XL,9
                BREQ SEMPATE2
                RJMP JGD1

VICTORIAJ22: RCALL INCREMENTAR_VICTORIA_J2
             RCALL MOSTRARVICJ2
             RCALL DIBUJARVICTORIA_J2
             RCALL ESPERA
             RJMP JGDVSJGD

SEMPATE2:      RCALL INCREMENTAR_EMPATE
               RCALL MOSTRAREMP
               RCALL ESPERA
               RJMP JGDVSJGD

JGD1: RCALL TURNO_J1
      RCALL POSICIONARCURSOR
      RCALL HABILITARJ1
      CLC
      LAZO2: BRCC LAZO2

            RCALL COMPROBAR_CASILLA_J1
            BRCC LAZO2

            RCALL DIBUJAR_CARA_J1
            RCALL COMPROBAR_VICTORIA_J1
            INC XL
            CPI MODO,8
            BRNE VICTORIAJ11

              CPI XL,9
              BREQ EMPATE1


                             24
RJMP JGD2

       VICTORIAJ11: RCALL INCREMENTAR_VICTORIA_J1
                    RCALL MOSTRARVICJ1
                    RCALL DIBUJARVICTORIA_J1
                    RCALL ESPERA
                    RJMP JGDVSJGD

                 EMPATE1:          RCALL INCREMENTAR_EMPATE
                                   RCALL MOSTRAREMP
                                   RCALL ESPERA
                                   RJMP JGDVSJGD

;-------------------------------------------------------------------------------------------------
JUGADOR2:                         ;ACCIONES PARA LOS PULSANTES DEL JUGADOR 2

IN AUX1,PINB
ANDI AUX1,$1F
CPI AUX1,$1E
BRNE SOP2
RCALL SUBIR
RCALL DECODIFICAR_CURSOR
RJMP SAL_JUGADOR2

SOP2: CPI AUX1,$1D
BRNE SOP3

                 RCALL BAJAR
                 RCALL DECODIFICAR_CURSOR
                 RJMP SAL_JUGADOR2

  SOP3: CPI AUX1,$1B
        BRNE SOP4
        RCALL MOVER_DERECHA
        RCALL DECODIFICAR_CURSOR
        RJMP SAL_JUGADOR2

        SOP4:    CPI AUX1,$17
                 BRNE SOP5
                 RCALL MOVER_IZQUIERDA
                 RCALL DECODIFICAR_CURSOR
                 RJMP SAL_JUGADOR1

  SOP5:     CPI AUX1,$0F
           BRNE SAL_JUGADOR2
           SEC

SAL_JUGADOR2:

RETI


                                               25
;-------------------------------------------------------------------------------------------------
JUGADOR1:                         ;ACCIONES PARA LOS PULSANTES DEL JUGADOR 1

CPI PANTALLA,0
BRNE OP_MENU2
IN AUX1,PIND
ANDI AUX1,$1F

CPI AUX1,$1E
    BRNE COMP2

        RCALL SUBIRSELECTOR
        LDI MODO_JUEGO,0
        LDI AUX1,$03
        LDS AUX2,PCMSK3
        EOR AUX1,AUX2
        STS PCMSK3,AUX1
        RJMP SAL_JUGADOR1

COMP2: CPI AUX1,$1D
       BRNE COMP3

        RCALL BAJARSELECTOR
        LDI MODO_JUEGO,1
        LDI AUX1,$03
        LDS AUX2,PCMSK3
        EOR AUX1,AUX2
        STS PCMSK3,AUX1
        RJMP SAL_JUGADOR1

COMP3: CPI AUX1,$0F
       BRNE SAL_JUGADOR1

        LDI PANTALLA,1
        LDI AUX1,$12
        STS PCMSK3,AUX1
        RJMP SAL_JUGADOR1

OP_MENU2: CPI PANTALLA,1
BRNE JUGAR
IN AUX1,PIND
ANDI AUX1,$1F

CPI AUX1,$1E
    BRNE COMPT2

        RCALL SUBIRSELECTOR
        LDI ICONO_J1,0
        LDI AUX1,$03


                                               26
LDS AUX2,PCMSK3
     EOR AUX1,AUX2
     STS PCMSK3,AUX1
     RJMP SAL_JUGADOR1

COMPT2: CPI AUX1,$1D
        BRNE COMPT3

     RCALL BAJARSELECTOR
     LDI ICONO_J1,1
     LDI AUX1,$03
     LDS AUX2,PCMSK3
     EOR AUX1,AUX2
     STS PCMSK3,AUX1
     RJMP SAL_JUGADOR1

COMPT3: CPI AUX1,$0F
        BRNE SAL_JUGADOR1

     LDI PANTALLA,2
     LDI AUX1,$12
     STS PCMSK3,AUX1
     RJMP SAL_JUGADOR1
     JUGAR: IN AUX1,PIND
     ANDI AUX1,$1F

CPI AUX1,$1E
    BRNE OP2

     RCALL SUBIR
     RCALL DECODIFICAR_CURSOR
     RJMP SAL_JUGADOR1

OP2: CPI AUX1,$1D
     BRNE OP3

     RCALL BAJAR
     RCALL DECODIFICAR_CURSOR
     RJMP SAL_JUGADOR1

OP3: CPI AUX1,$1B
     BRNE OP4

     RCALL MOVER_DERECHA
     RCALL DECODIFICAR_CURSOR
     RJMP SAL_JUGADOR1

OP4: CPI AUX1,$17
     BRNE OP5



                            27
RCALL MOVER_IZQUIERDA
        RCALL DECODIFICAR_CURSOR
        RJMP SAL_JUGADOR1

OP5: CPI AUX1,$0F
     BRNE SAL_JUGADOR1
SEC

SAL_JUGADOR1:
RETI

;-------------------------------------------------------------------------------------------------
.INCLUDE "LCD.ASM"
.INCLUDE "OPCIONESGRAFICAS.ASM"
.INCLUDE "JUGADOR.ASM"

.EXIT

LCD.ASM

;MANEJO PANTALLA LCD

.EQU CD=PA0
.EQU RD=PA1
.EQU WR=PA2
.EQU CE=PA3
.EQU RS=PA4

.EQU CONTROL=PORTA
.EQU DATOS=PORTC

INICIALIZAR:              LDI AUX1,0b00000000
                          OUT CONTROL,AUX1

                      LDI AUX2,255
                      CLR R15
                      DL: DEC R15
                      BRNE DL
                      DEC AUX2
                 BRNE DL

                 SBI CONTROL,RS

                 LDI AUX1,$00                        ;TEXT HOME ADDRESS SET
                 LDI AUX2,$00
                 RCALL DATO2
                 LDI AUX1,$40
                 RCALL CMD

                 LDI AUX1,$1E                        ;TEXT AREA SET


                                                   28
LDI AUX2,0
               RCALL DATO2
               LDI AUX1,$41
               RCALL CMD

               LDI AUX1,$00                  ;GRAPHIC HOME ADRESS SET
               LDI AUX2,$02
               RCALL DATO2
               LDI AUX1,$42
               RCALL CMD

               LDI AUX1,$1E                  ;GRAPHIC AREA SET
               LDI AUX2,$00
               RCALL DATO2
               LDI AUX1,$43
               RCALL CMD

               LDI AUX1,$80                  ;MODE SET
               RCALL CMD

               LDI AUX1,$03                  ;SET OFFSERET
               LDI AUX2,$00
               RCALL DATO2
               LDI AUX1,$22
               RCALL CMD

               LDI AUX1,$08                  ;CURSOR POINTER
               LDI AUX2,$06
               RCALL DATO2
               LDI AUX1,$21
               RCALL CMD

               LDI AUX1,$94                  ;DISPLAY MODE SET
               RCALL CMD

               LDI AUX1,$A0                  ;CURSOR PATERN
               RCALL CMD

RET
;----------------------------------------------------------------------------
CMD: RCALL STATUS                                                     ;ESCRIBIR UN COMANDO
         OUT DATOS,AUX1
         LDI AUX3,0b00010011
         OUT CONTROL,AUX3
         NOP
         SBI CONTROL,CE

RET

DATO1: RCALL STATUS                                      ;ESCRIBIR 1 BYTE DE DATO


                                           29
OUT DATOS,AUX1
           LDI AUX3,0b00010010
           OUT CONTROL,AUX3
           NOP
           SBI CONTROL,CE
RET

DATO2: RCALL STATUS                                            ;ESCRIBIR 2 BYTES DE DATOS
       OUT DATOS,AUX1
       LDI AUX3,0b00010010
       OUT CONTROL,AUX3
       NOP
       SBI CONTROL,CE
       RCALL STATUS
       OUT DATOS,AUX2
       LDI AUX3,0b00010010
       OUT CONTROL,AUX3
       NOP
       SBI CONTROL,CE
RET

STATUS: PUSH AUX1                                           ;VERIFICA EL ESTADO DEL LCD

LDI AUX1,0b00010101
OUT CONTROL,AUX1
LDI AUX1,0
OUT DDRC,AUX1

BUSY:            CBI DATOS,CE
                 NOP
                 IN AUX1,PINC
                 SBI CONTROL,CE
                 SBRS AUX1,0
                 RJMP BUSY
                 SBRS AUX1,1
                 RJMP BUSY
                 LDI AUX1,$FF
                 OUT DDRC,AUX1
                 POP AUX1
RET

OPCIONESGRAFICAS.ASM

;-------------------------------------------------------------------------------------------------
MENU:                                                         ;MENU PRINCIPAL
LDI ZL,LOW(TBMENU<<1)
LDI ZH,HIGH(TBMENU<<1)

LDI AUX1,$81
LDI AUX2,$00


                                                   30
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX2,12

LOOPMENU: LPM AUX1,Z+
          RCALL DATO1
           LDI AUX1,$C0
           RCALL CMD
           DEC AUX2
           BRNE LOOPMENU

LDI AUX1,$F8
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX2,12

LOOPMENU1: LPM AUX1,Z+
           RCALL DATO1
           LDI AUX1,$C0
           RCALL CMD
           DEC AUX2
           BRNE LOOPMENU1

LDI AUX1,$54
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX2,10

LOOPMENU2: LPM AUX1,Z+
           RCALL DATO1
           LDI AUX1,$C0
          RCALL CMD
          DEC AUX2
          BRNE LOOPMENU2

RET
;-------------------------------------------------------------------------------------------------
MENU1:                                               ;MENU DESPUES DEL PRINCIPAL
LDI ZL,LOW(TBMENU1<<1)
LDI ZH,HIGH(TBMENU1<<1)

LDI AUX1,$83


                                                  31
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX2,10

LOOPMENU_1: LPM AUX1,Z+
            RCALL DATO1
            LDI AUX1,$C0
            RCALL CMD
            DEC AUX2
            BRNE LOOPMENU_1

LDI AUX1,$F8
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX2,12

LOOPMENU_2: LPM AUX1,Z+
           RCALL DATO1
           LDI AUX1,$C0
           RCALL CMD
           DEC AUX2
           BRNE LOOPMENU_2

LDI AUX1,$54
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX2,11

LOOPMENU_3: LPM AUX1,Z+
            RCALL DATO1
           LDI AUX1,$C0
           RCALL CMD
           DEC AUX2
           BRNE LOOPMENU_3

RET
;-------------------------------------------------------------------------------------------------
BORRAR:                             ;BORRA LA PANTALLA

LDI AUX1,$00
LDI AUX2,$00


                                                   32
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX2,255
LOOPERASE: LDI AUX1,$00
             RCALL DATO1
             LDI AUX1,$C0
             RCALL CMD
             DEC AUX2
             BRNE LOOPERASE

LDI AUX1,$F0
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX2,255

LOOPERASE2: LDI AUX1,$00
            RCALL DATO1
            LDI AUX1,$C0
            RCALL CMD
            DEC AUX2
            BRNE LOOPERASE2
RET

;-------------------------------------------------------------------------------------------------
HABILITAR_CURSOR: ;HABILITA LA OPCIÓN DE PARPADEO DEL CURSOR

        LDI AUX1,$97                     ;DISPLAY MODE SET
        RCALL CMD
RET
;--------------------------------------------------------------------------------------------------
DESHABILITAR_CURSOR:                            ;DESHABILITA LA OPCIÓN DE PARPADEO
                                               ;DEL CURSOR
  LDI AUX1,$94
  RCALL CMD
RET
;--------------------------------------------------------------------------------------------------
DECODIFICAR_CURSOR:                          ;DA LA DIRECCIÓN DEL CURSOR EN ;LOS
                                             REGISTROS AUX1 Y AUX2
                                            ;Y UBICA EL CURSOR EN ESA DIRECCIÓN
COM1:             CPI CURSOR,0
                  BRNE COM2
                  LDI AUX1,$07
                  LDI AUX2,$02
                  RJMP SALIR



                                                33
COM2:            CPI CURSOR,1
                 BRNE COM3
                 LDI AUX1,$0B
                 LDI AUX2,$02
                 RJMP SALIR

COM3:            CPI CURSOR,2
                 BRNE COM4
                 LDI AUX1,$0F
                 LDI AUX2,$02
                 RJMP SALIR

COM4:            CPI CURSOR,3
                 BRNE COM5
                 LDI AUX1,$07
                 LDI AUX2,$06
                 RJMP SALIR

COM5:            CPI CURSOR,4
                 BRNE COM6
                 LDI AUX1,$0B
                 LDI AUX2,$06
                 RJMP SALIR

COM6:            CPI CURSOR,5
                 BRNE COM7
                 LDI AUX1,$0F
                 LDI AUX2,$06
                 RJMP SALIR

COM7:            CPI CURSOR,6
                 BRNE COM8
                 LDI AUX1,$07
                 LDI AUX2,$0A
                 RJMP SALIR

COM8:            CPI CURSOR,7
                 BRNE COM9
                 LDI AUX1,$0B
                 LDI AUX2,$0A
                 RJMP SALIR

COM9:            LDI AUX1,$0F
                 LDI AUX2,$0A
                 SALIR: RCALL DATO2
                 LDI AUX1,$21
                 RCALL CMD
RET
;-------------------------------------------------------------------------------------------------



                                                   34
MOVER_IZQUIERDA:                   ;MUEVE UNA POSICIÓN A LA IZQUIERDA EL
                                   ;CURSOR

        CPI CURSOR,0
        BRNE IZ2
        LDI CURSOR,2
        RJMP SALIR_IZ

IZ2:    CPI CURSOR,3
        BRNE IZ3
        LDI CURSOR,5
        RJMP SALIR_IZ

IZ3:    CPI CURSOR,6
        BRNE IZ4
        LDI CURSOR,8
        RJMP SALIR_IZ

IZ4: DEC CURSOR

SALIR_IZ:
RET
;-------------------------------------------------------------------------------------------------
MOVER_DERECHA:                              ;MUEVE UNA POSICIÓN A LA DERECHA EL
                                            ;CURSOR

CPI CURSOR,2
      BRNE DR2
      LDI CURSOR,0
      RJMP SALIR_DR

DR2: CPI CURSOR,5
     BRNE DR3
     LDI CURSOR,3
     RJMP SALIR_DR

DR3: CPI CURSOR,8
         BRNE DR4
          LDI CURSOR,6
         RJMP SALIR_DR
DR4: INC CURSOR
SALIR_DR:
RET
;-------------------------------------------------------------------------------------------------
SUBIR:                                      ;SUBE UNA POSICIÓN EL CURSOR

CPI CURSOR,0
      BRNE UP2
      LDI CURSOR,6
      RJMP SALIR_UP


                                                   35
UP2: CPI CURSOR,1
     BRNE UP3
     LDI CURSOR,7
     RJMP SALIR_UP

UP3: CPI CURSOR,2
     BRNE UP4
     LDI CURSOR,8
     RJMP SALIR_UP
UP4: SUBI CURSOR,3

SALIR_UP:
RET
;-------------------------------------------------------------------------------------------------
BAJAR:                                      ;BAJA UNA POSICIÓN EL CURSOR

CPI CURSOR,6

        BRNE DW2
        LDI CURSOR,0
        RJMP SALIR_UP

DW2: CPI CURSOR,7
     BRNE DW3
     LDI CURSOR,1
     RJMP SALIR_UP

DW3: CPI CURSOR,8
     BRNE DW4
     LDI CURSOR,2
     RJMP SALIR_UP

DW4: LDI AUX1,3
     ADD CURSOR,AUX1

SALIR_DW:
RET
;-------------------------------------------------------------------------------------------------
POSICIONARCURSOR: ;UBICA EL CURSOR EN LOCALIDAD VACÍA PARA
                                                                ;QUE JUEGUE UN JUGADOR

LDS AUX1,POSICION4
CPI AUX1,0
BRNE POS2
LDI CURSOR,4                                         ;DAMOS PRIORIDAD A LA CASILLA
                                                     ;CENTRAL
RCALL DECODIFICAR_CURSOR
RJMP SALIR_POS



                                                   36
POS2:

LDI YL, LOW(POSICION0)                               ;EN CASO DE ESTAR UBICADA LA
                                                     ;CASILLA CENTRAL
LDI YH, HIGH(POSICION0)                              ;BUSCAMOS UNA VACIA
LDI CURSOR,0
COMP: LD AUX1,Y+
 INC CURSOR
           CPI AUX1,0
           BRNE COMP
DEC CURSOR
RCALL DECODIFICAR_CURSOR
SALIR_POS:
RET
;-------------------------------------------------------------------------------------------------
BAJARSELECTOR:                                             ;BAJA EL SELECTOR

LDI AUX1,$F8 ;BORRAMOS EL CURSOR ARRIBA
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX1,$00
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

LDI AUX1,$52 ;PONEMOS EL CURSOR ABAJO
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX1,$80
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

RET
;-------------------------------------------------------------------------------------------------
SUBIRSELECTOR:                                       ;SUBE EL SELECTOR

LDI AUX1,$52 ;BORRAMOS EL CURSOR ABAJO
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX1,$00


                                                   37
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

LDI AUX1,$F8 ;PONEMOS EL CURSOR ABAJO
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX1,$80
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

RET
;-------------------------------------------------------------------------------------------------
FORMARCARACTERES: ;GENERA LOS CARACTERES PARA LA CG-RAM

LDI AUX1,$00
LDI AUX2,$1C
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI ZL,LOW(CARACTER<<1)
LDI ZH, HIGH(CARACTER<<1)
LDI AUX2,208

LOOPSEL:
                  LPM AUX1,Z+
                  RCALL DATO1
                  LDI AUX1,$C0
                  RCALL CMD
                  DEC AUX2
                  BRNE LOOPSEL
RET

;-------------------------------------------------------------------------------------------------
MSJ_JGDVSPC:               ;MENSAJE JUGADOR VS PC

LDI AUX1,$89
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI ZL, LOW(TB_JGDVSPC<<1)
LDI ZH, HIGH(TB_JGDVSPC<<1)



                                                   38
LDI AUX2,22

LOOPM1:          LPM AUX1,Z+
                 RCALL DATO1
                 LDI AUX1,$C0
                 RCALL CMD
                 DEC AUX2
                 BRNE LOOPM1
RET
;-------------------------------------------------------------------------------------------------
MSJ_JGDVSJGD: ;MENSAJE JUGADOR1 EMPATE JUGADOR2

LDI AUX1,$89
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI ZL, LOW(TB_JGDVSJGD<<1)
LDI ZH, HIGH(TB_JGDVSJGD<<1)

LDI AUX2,24

LOOPM2:          LPM AUX1,Z+
                 RCALL DATO1
                 LDI AUX1,$C0
                 RCALL CMD
                 DEC AUX2
                 BRNE LOOPM2

RET
;-------------------------------------------------------------------------------------------------
ESCRIBIR_TURNO:

LDI AUX1,$E9
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI ZL,LOW(TURN<<1)
LDI ZH,HIGH(TURN<<1)

LDI AUX2,5

REPIT: LPM AUX1,Z+
       RCALL DATO1
       LDI AUX1,$C0
       RCALL CMD
       DEC AUX2


                                                   39
BRNE REPIT

RET
;-------------------------------------------------------------------------------------------------

DIBUJARTABLERO:                             ;DIBUJA EL TABLERO EN LA PANTALLA

LDI AUX1,$06
LDI AUX2,$00
RCALL DIBUJARLINEA1
LDI AUX1,$24
RCALL DIBUJARLINEA1
LDI AUX1,$42
RCALL DIBUJARLINEA1
LDI AUX1,$60
RCALL DIBUJARLINEA2

LDI AUX1,$7E
RCALL DIBUJARLINEA1
LDI AUX1,$9C
RCALL DIBUJARLINEA1
LDI AUX1,$BA
RCALL DIBUJARLINEA1
LDI AUX1,$D8
RCALL DIBUJARLINEA2

LDI AUX1,$F6
LDI AUX2,$00
RCALL DIBUJARLINEA1
LDI AUX1,$14
LDI AUX2,$01
RCALL DIBUJARLINEA1
LDI AUX1,$32
LDI AUX2,$01
RCALL DIBUJARLINEA1
LDI AUX1,$50
LDI AUX2,$01
RCALL DIBUJARLINEA1

RET
;-------------------------------------------------------------------------------------------------
DIBUJARLINEA1:                      ;SUBRUTINA PARA DIBUJAR PRIMER TIPO DE
                                     ;LINEA DEL TABLERO
PUSH AUX1
PUSH AUX2
RCALL DATO2
LDI AUX1,$24
RCALL CMD
LDI AUX2,12
LDI ZL,LOW(TABLERO<<1)


                                                   40
LDI ZH,HIGH(TABLERO<<1)

REP: LPM AUX1,Z+
     RCALL DATO1
     LDI AUX1,$C0
     RCALL CMD
     DEC AUX2
     BRNE REP

POP AUX2
POP AUX1
RET
;-------------------------------------------------------------------------------------------------
DIBUJARLINEA2:                      ;SUBRUTINA PARA DIBUJAR SEGUNDO TIPO DE
                                    ;LINEA DEL TABLERO
PUSH AUX1
PUSH AUX2
RCALL DATO2
LDI AUX1,$24
RCALL CMD
LDI AUX2,12
LDI ZL,LOW(TABLERO1<<1)
LDI ZH,HIGH(TABLERO1<<1)
REP1: LPM AUX1,Z+
           RCALL DATO1
           LDI AUX1,$C0
           RCALL CMD
           DEC AUX2
           BRNE REP1

POP AUX2
POP AUX1
RET
;-------------------------------------------------------------------------------------------------
DIBUJARCARAFELIZ:                   ;DIBUJA UNA CARA FELIZ EN UNA POSICION
                                    ;DADA POR CURSOR

C1:     CPI CURSOR,0
        BRNE C2
        LDI AUX1,$25
        LDI AUX2,$00
        RJMP GRAFICAR

C2: CPI CURSOR,1
         BRNE C3
         LDI AUX1,$29
         LDI AUX2,$00
         RJMP GRAFICAR

C3: CPI CURSOR,2


                                                   41
BRNE C4
      LDI AUX1,$2D
      LDI AUX2,$00
      RJMP GRAFICAR

C4: CPI CURSOR,3

      BRNE C5
      LDI AUX1,$9D
      LDI AUX2,$00
      RJMP GRAFICAR

C5: CPI CURSOR,4

      BRNE C6
      LDI AUX1,$A1
      LDI AUX2,$00
      RJMP GRAFICAR

C6: CPI CURSOR,5

      BRNE C7
      LDI AUX1,$A5
      LDI AUX2,$00
      RJMP GRAFICAR

C7: CPI CURSOR,6

      BRNE C8
      LDI AUX1,$15
      LDI AUX2,$01
      RJMP GRAFICAR

C8: CPI CURSOR,7

      BRNE C9
      LDI AUX1,$19
      LDI AUX2,$01
      RJMP GRAFICAR

C9:   LDI AUX1,$1D
      LDI AUX2,$01


GRAFICAR:
LDI ZL,LOW(TB_CARAFELIZ<<1)
LDI ZH, HIGH(TB_CARAFELIZ<<1)

PUSH AUX1


                                42
RCALL DATO2
LDI AUX1,$24
RCALL CMD

        LPM AUX1,Z+
        RCALL DATO1
        LDI AUX1,$C0
        RCALL CMD

        LPM AUX1,Z+
        RCALL DATO1
        LDI AUX1,$C0
        RCALL CMD

POP AUX1
PUSH AUX3
LDI AUX3,$1E
ADD AUX1,AUX3
LDI AUX3,0
ADC AUX2,AUX3

RCALL DATO2
LDI AUX1,$24
RCALL CMD

        LPM AUX1,Z+
        RCALL DATO1
        LDI AUX1,$C0
        RCALL CMD

        LPM AUX1,Z+
        RCALL DATO1
        LDI AUX1,$C0
        RCALL CMD

POP AUX3
RET
;-------------------------------------------------------------------------------------------------
DIBUJARCARATRISTE: ;DIBUJA UNA CARA TRISTE EN UNA POSICION
                                            ;DADA POR CURSOR

D1:     CPI CURSOR,0
        BRNE D2
        LDI AUX1,$25
        LDI AUX2,$00
        RJMP GRAFICAR1

D2: CPI CURSOR,1

        BRNE D3


                                                   43
LDI AUX1,$29
      LDI AUX2,$00
      RJMP GRAFICAR1

D3: CPI CURSOR,2

      BRNE D4
      LDI AUX1,$2D
      LDI AUX2,$00
      RJMP GRAFICAR1

D4: CPI CURSOR,3

      BRNE D5
      LDI AUX1,$9D
      LDI AUX2,$00
      RJMP GRAFICAR1

D5: CPI CURSOR,4

      BRNE D6
      LDI AUX1,$A1
      LDI AUX2,$00
      RJMP GRAFICAR1

D6: CPI CURSOR,5

      BRNE D7
      LDI AUX1,$A5
      LDI AUX2,$00
      RJMP GRAFICAR1

D7: CPI CURSOR,6

      BRNE D8
      LDI AUX1,$15
      LDI AUX2,$01
      RJMP GRAFICAR1

D8:   CPI CURSOR,7
      BRNE D9
      LDI AUX1,$19
      LDI AUX2,$01
      RJMP GRAFICAR1

D9:   LDI AUX1,$1D
      LDI AUX2,$01


GRAFICAR1:


                       44
LDI ZL,LOW(TB_CARATRISTE<<1)
LDI ZH, HIGH(TB_CARATRISTE<<1)

PUSH AUX1
RCALL DATO2
LDI AUX1,$24
RCALL CMD

        LPM AUX1,Z+
        RCALL DATO1
        LDI AUX1,$C0
        RCALL CMD

        LPM AUX1,Z+
        RCALL DATO1
        LDI AUX1,$C0
        RCALL CMD

POP AUX1
PUSH AUX3
LDI AUX3,$1E
ADD AUX1,AUX3
LDI AUX3,0
ADC AUX2,AUX3

RCALL DATO2
LDI AUX1,$24
RCALL CMD

        LPM AUX1,Z+
        RCALL DATO1
        LDI AUX1,$C0
        RCALL CMD

        LPM AUX1,Z+
        RCALL DATO1
        LDI AUX1,$C0
        RCALL CMD

POP AUX3

RET
;-------------------------------------------------------------------------------------------------
DIBUJAR_CARA_J1:                            ;DIBUJA UNA CARA TRISTE O FELIZ PARA
                                            ;EL JUGADOR 1
CPI ICONO_J1,0
BRNE TRIS
RCALL DIBUJARCARAFELIZ
RJMP FIN_DIBJ1
TRIS: RCALL DIBUJARCARATRISTE


                                                45
FIN_DIBJ1:
RET
;-------------------------------------------------------------------------------------------------
DIBUJAR_CARA_J2:                            ;DIBUJA UNA CARA TRISTE O FELIZ PARA
                                            ;EL JUGADOR 2

CPI ICONO_J1,0
BRNE FELIZ
RCALL DIBUJARCARATRISTE
RJMP FIN_DIBJ2
FELIZ: RCALL DIBUJARCARAFELIZ
FIN_DIBJ2:

RET
;-------------------------------------------------------------------------------------------------
LINEAHORIZONTAL:                    ;DIBUJA UNA LINEA HORIZONTAL PARA
                                    ;MOSTRAR VICTORIA EN HORIZONTAL

RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI ZL,LOW(TB_LINEAHORIZONTAL<<1)
LDI ZH,HIGH(TB_LINEAHORIZONTAL<<1)
LDI AUX2,12

REPLH: LPM AUX1,Z+
           RCALL DATO1
           LDI AUX1,$C0
           RCALL CMD
           DEC AUX2
           BRNE REPLH
RET
;-------------------------------------------------------------------------------------------------
LINEAVERTICAL_CARAFELIZ:

LDI ZL,LOW(TB_LINEAVERTICALCF<<1)
LDI ZH,HIGH(TB_LINEAVERTICALCF<<1)
LDI AUX4,12
CLR R15
REPVCF:     PUSH AUX2
            RCALL DIB_VER
            LDI AUX2,$1E
            ADD AUX1,AUX2
            POP AUX2
            ADC AUX2,R15
            DEC AUX4
            BRNE REPVCF

RET


                                                   46
;-------------------------------------------------------------------------------------------------
DIB_VER:
PUSH AUX1
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LPM AUX1,Z+
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

POP AUX1
RET
;-------------------------------------------------------------------------------------------------
LINEAVERTICAL_CARATRISTE:

LDI ZL,LOW(TB_LINEAVERTICALCT<<1)
LDI ZH,HIGH(TB_LINEAVERTICALCT<<1)
LDI AUX4,12
CLR R15
REPVCT:     PUSH AUX2
            RCALL DIB_VER
            LDI AUX2,$1E
            ADD AUX1,AUX2
            POP AUX2
            ADC AUX2,R15
            DEC AUX4
            BRNE REPVCT

RET
;-------------------------------------------------------------------------------------------------
LINEADIAGONALIZQUIERDA_FELIZ:

LDI ZL,LOW(TB_DIAGONALIZQUIERDA_FELIZ<<1)
LDI ZH,HIGH(TB_DIAGONALIZQUIERDA_FELIZ<<1)
LDI AUX1,$06
LDI AUX2,$00
LDI AUX4,12
CLR R15
REPLDIF: PUSH AUX2
                   RCALL DIB_VER
                   LDI AUX2,$1F
                   ADD AUX1,AUX2
       POP AUX2
                   ADC AUX2,R15
       DEC AUX4
                   BRNE REPLDIF
RET
;-------------------------------------------------------------------------------------------------


                                                   47
LINEADIAGONALIZQUIERDA_TRISTE:

LDI ZL,LOW(TB_DIAGONALIZQUIERDA_TRISTE<<1)
LDI ZH,HIGH(TB_DIAGONALIZQUIERDA_TRISTE<<1)
LDI AUX1,$06
LDI AUX2,$00
LDI AUX4,12
CLR R15
REPLDIT: PUSH AUX2
            RCALL DIB_VER
            LDI AUX2,$1F
            ADD AUX1,AUX2
     POP AUX2
            ADC AUX2,R15
     DEC AUX4
            BRNE REPLDIT

RET
;-------------------------------------------------------------------------------------------------
LINEADIAGONALDERECHA_FELIZ:

LDI ZL,LOW(TB_DIAGONALDERECHA_FELIZ<<1)
LDI ZH,HIGH(TB_DIAGONALDERECHA_FELIZ<<1)
LDI AUX1,$11
LDI AUX2,$00
LDI AUX4,12
CLR R15
REPLDDF: PUSH AUX2
                   RCALL DIB_VER
                   LDI AUX2,$1D
                   ADD AUX1,AUX2
                   POP AUX2
                   ADC AUX2,R15
                   DEC AUX4
                   BRNE REPLDDF
RET
;-------------------------------------------------------------------------------------------------
LINEADIAGONALDERECHA_TRISTE:

LDI ZL,LOW(TB_DIAGONALDERECHA_TRISTE<<1)
LDI ZH,HIGH(TB_DIAGONALDERECHA_TRISTE<<1)
LDI AUX1,$11
LDI AUX2,$00
LDI AUX4,12
CLR R15
REPLDDT: PUSH AUX2
            RCALL DIB_VER
            LDI AUX2,$1D
            ADD AUX1,AUX2
     POP AUX2


                                                   48
ADC AUX2,R15
      DEC AUX4
            BRNE REPLDDT

RET
;-------------------------------------------------------------------------------------------------
DIBUJARVICTORIA_J1:                  ;DIBUJA LA VICTORIA DEL JUGADOR J1

CPI MODO,0
BRNE DB2
LDI AUX1,$24
LDI AUX2,0
RCALL LINEAHORIZONTAL
RJMP FINDIB

DB2: CPI MODO,1
     BRNE DB3
     LDI AUX1,$9C
     LDI AUX2,0
     RCALL LINEAHORIZONTAL
     RJMP FINDIB

DB3: CPI MODO,2

           BRNE DB4
           LDI AUX1,$14
           LDI AUX2,$01
           RCALL LINEAHORIZONTAL
           RJMP FINDIB
;--------------------------

DB4: CPI ICONO_J1,0
     BRNE DB4T
     CPI MODO,3
      BRNE DB5
      LDI AUX1,$07
      LDI AUX2,0
      RCALL LINEAVERTICAL_CARAFELIZ
      RJMP FINDIB

DB5: CPI MODO,4

        BRNE DB6
        LDI AUX1,$0B
        LDI AUX2,0
        RCALL LINEAVERTICAL_CARAFELIZ
        RJMP FINDIB

DB6: CPI MODO,5



                                                   49
BRNE DB7
        LDI AUX1,$0F
        LDI AUX2,0
        RCALL LINEAVERTICAL_CARAFELIZ
        RJMP FINDIB

DB7: CPI MODO,6
     BRNE DB8
     RCALL LINEADIAGONALIZQUIERDA_FELIZ
     RJMP FINDIB

 DB8: CPI MODO,7
         RCALL LINEADIAGONALDERECHA_FELIZ
         RJMP FINDIB
;---------------------------
 DB4T: CPI MODO,3

          BRNE DB5T
          LDI AUX1,$07
          LDI AUX2,0
          RCALL LINEAVERTICAL_CARATRISTE
          RJMP FINDIB

DB5T: CPI MODO,4
      BRNE DB6T

     LDI AUX1,$0B
         LDI AUX2,0
         RCALL LINEAVERTICAL_CARATRISTE
         RJMP FINDIB

DB6T: CPI MODO,5
      BRNE DB7T
      LDI AUX1,$0F
      LDI AUX2,0
      RCALL LINEAVERTICAL_CARATRISTE
      RJMP FINDIB

DB7T: CPI MODO,6
      BRNE DB8T
      RCALL LINEADIAGONALIZQUIERDA_TRISTE
      RJMP FINDIB
DB8T: CPI MODO,7
      RCALL LINEADIAGONALDERECHA_TRISTE

FINDIB:
RET
;-------------------------------------------------------------------------------------------------
DIBUJARVICTORIA_J2:                         ;DIBUJA LA VICTORIA DEL JUGADOR J2



                                                  50
CPI MODO,0
BRNE DBJ2
LDI AUX1,$24
LDI AUX2,0
RCALL LINEAHORIZONTAL
RJMP FINDIB

DBJ2: CPI MODO,1
      BRNE DBJ3
      LDI AUX1,$9C
       LDI AUX2,0
       RCALL LINEAHORIZONTAL
       RJMP FINDIB

 DBJ3: CPI MODO,2
          BRNE DBJ4
           LDI AUX1,$14
           LDI AUX2,$01
           RCALL LINEAHORIZONTAL
           RJMP FINDIB
;--------------------------
 DBJ4: CPI ICONO_J1,1
         BRNE DBJ4T

       CPI MODO,3
       BRNE DBJ5
       LDI AUX1,$07
       LDI AUX2,0
       RCALL LINEAVERTICAL_CARAFELIZ
       RJMP FINDIBJ

DBJ5: CPI MODO,4
      BRNE DBJ6
      LDI AUX1,$0B
      LDI AUX2,0
      RCALL LINEAVERTICAL_CARAFELIZ
      RJMP FINDIBJ

DBJ6: CPI MODO,5
      BRNE DBJ7

       LDI AUX1,$0F
       LDI AUX2,0
       RCALL LINEAVERTICAL_CARAFELIZ
       RJMP FINDIBJ

DBJ7: CPI MODO,6
      BRNE DBJ8
      RCALL LINEADIAGONALIZQUIERDA_FELIZ
      RJMP FINDIBJ


                                   51
DBJ8: CPI MODO,7
         RCALL LINEADIAGONALDERECHA_FELIZ
         RJMP FINDIBJ
;---------------------------

DBJ4T: CPI MODO,3
       BRNE DBJ5T
       LDI AUX1,$07
       LDI AUX2,0
       RCALL LINEAVERTICAL_CARATRISTE
       RJMP FINDIBJ

DBJ5T: CPI MODO,4
       BRNE DBJ6T
       LDI AUX1,$0B
       LDI AUX2,0
       RCALL LINEAVERTICAL_CARATRISTE
       RJMP FINDIBJ

DBJ6T: CPI MODO,5
       BRNE DBJ7T
        LDI AUX1,$0F
       LDI AUX2,0
       RCALL LINEAVERTICAL_CARATRISTE
       RJMP FINDIBJ

DBJ7T: CPI MODO,6
       BRNE DBJ8T
       RCALL LINEADIAGONALIZQUIERDA_TRISTE
       RJMP FINDIBJ

DBJ8T: CPI MODO,7
       RCALL LINEADIAGONALDERECHA_TRISTE

FINDIBJ:
RET
;-------------------------------------------------------------------------------------------------
TBMENU: .DB $34,$32,$25,$33,$00,$25,$2E,$00,$32,$21,$39,$21 ;TRES EN RAYA
      .DB $80,$00,$2A,$27,$24,$00,$36,$33,$00,$30,$23,$00                               ;> JGD VS PC
                  .DB $2A,$27,$24,$00,$36,$33,$00,$2A,$27,$24                           ; JGD VS JUG
;-------------------------------------------------------------------------------------------------
TBMENU1: .DB $2A,$35,$27,$21,$24,$2F,$32,$00,$11,$00                                ;JUGADOR 1
                   .DB $80,$00,$23,$21,$32,$21,$00,$26,$25,$2C,$29,$3A
                   ;> CARA FELIZ
                  .DB $23,$21,$32,$21,$00,$34,$32,$29,$33,$34,$25,$00
                  ; CARA TRISTE
;-------------------------------------------------------------------------------------------------
CARACTER:



                                                52
.DB $C0,$F0,$FC,$FF,$FF,$FC,$F0,$C0
;>             $80

.DB $01,$01,$01,$01,$01,$01,$01,$01
;LINEA VERTICAL $81

.DB $01,$01,$01,$01,$01,$01,$01,$FF
;LINEA VERTICAL AL ANGULO $82

 .DB $00,$00,$00,$00,$00,$00,$00,$FF
;LINEA HORIZONTAL $83

.DB $E0,$10,$08,$04,$02,$62,$61,$01
;PARTE SUPERIOR DERECHA CARA $84

.DB $07,$08,$10,$20,$40,$46,$86,$80
 ;PARTE SUPERIOR IZQUIERDA CARA $85

.DB $01,$21,$22,$42,$84,$08,$10,$E0
;PARTE INFERIOR DERECHA CARA FELIZ $86

 .DB $80,$84,$44,$42,$21,$10,$08,$07
;PARTE INFERIOR IZQUIERDA CARA FELIZ $87

.DB $01,$81,$42,$22,$24,$08,$10,$E0
;PARTE INFERIOR DERECHA CARA TRISTE $88

.DB $80,$81,$42,$44,$24,$10,$08,$07
;PARTE INFERIOR IZQUIERDA CARA TRISTE $89

.DB $07,$08,$10,$20,$40,$46,$86,$FF
;PARTE IZQUIERDA CARA TACHADA EN HORIZONTAL $8A

.DB $E0,$10,$08,$04,$02,$62,$61,$FF
;PARTE DERECHA CARA TACHADA EN HORIZONTAL $8B

.DB $07,$09,$11,$21,$41,$47,$87,$81
;PARTE IZQUIERDA CARA TACHADA EN VERTICAL CF $8C

 .DB $81,$85,$45,$43,$21,$11,$09,$07
;PARTE INFERIOR IZQUIERDA CARA TACHADA EN VERTICAL CF     $8D

.DB $81,$81,$43,$45,$25,$11,$09,$07
;PARTE INFERIOR IZQUIERDA CARA TACHADA EN VERTICAL CF     $8E

.DB $80,$40,$20,$10,$08,$04,$02,$01
;DIAGONAL IZQUIERDA                                 $8F

 .DB $87,$48,$30,$30,$48,$46,$86,$81
;CARA SUPERIOR IZQUIERDA CON LINEA DIAGONAL   $90


                                       53
.DB $81,$61,$22,$52,$8C,$0C,$12,$E1

;CARA FELIZ INFERIOR DERECHA CON DIAGONAL $91

 .DB $81,$C1,$62,$32,$3C,$0C,$12,$E1
;CARA TRISTE INFERIOR DERECHA CON DIAGONAL $92


.DB $81,$41,$21,$11,$09,$05,$03,$FF
;BORDE CON DIAGONAL IZQUIERDA                                  $93


 .DB $E1,$12,$0C,$0C,$12,$62,$61,$81
;CARA SUPERIOR DERECHA CON LINEA DIAGONAL                                       $94


.DB $81,$84,$44,$4A,$31,$30,$48,$87
;CARA FELIZ INFERIOR IZQUIERDA CON DIAGONAL $95

 .DB $81,$83,$46,$4E,$34,$30,$48,$87
;CARA TRISTE INFERIOR IZQUIERDA CON DIAGONAL $96

.DB $01,$02,$04,$08,$10,$20,$40,$80
;DIAGONAL DERECHA                                   $97

.DB $01,$02,$04,$08,$10,$20,$40,$FF
 ;BORDE SUPERIOR CON DIAGONAL DERECHA                                   $98

.DB $01,$03,$05,$09,$11,$21,$41,$81
;BORDE INFERIOR CON DIAGONAL DERECHA                                   $99
;-------------------------------------------------------------------------------------------------
TB_JGDVSPC:
.DB $2A,$35,$27,$21,$24,$2F,$32,$00,$00,$25,$2D,$30,$21,$34,$25,$00
;JGD EMP PC

.DB $00,$00,$00,$30,$23,$00
;-------------------------------------------------------------------------------------------------
TB_JGDVSJGD:
.DB $2A,$35,$27,$21,$24,$2F,$32,$11,$00,$25,$2D,$30,$21,$34,$25,$00
;JGD1 EMP JGD2

.DB $2A,$35,$27,$21,$24,$2F,$32,$12
;-------------------------------------------------------------------------------------------------
TABLERO: .DB $00,$00,$00,$81,$00,$00,$00,$81,$00,$00,$00,$00
                ;PARA DIBUJAR TABLERO
TABLERO1: .DB $83,$83,$83,$82,$83,$83,$83,$82,$83,$83,$83,$83
;-------------------------------------------------------------------------------------------------
TURN: .DB $34,$35,$32,$2E,$2F,$00
;-------------------------------------------------------------------------------------------------


                                                   54
TB_CARAFELIZ: .DB $85,$84,$87,$86
;TABLA PARA DIBUJAR LA CARA FELIZ
;-------------------------------------------------------------------------------------------------
TB_CARATRISTE:.DB $85,$84,$89,$88
;TABLA PARA DIBUJAR LA CARA TRISTE
;-------------------------------------------------------------------------------------------------
TB_LINEAHORIZONTAL:

.DB $83,$8A,$8B,$82,$83,$8A,$8B,$82,$83,$8A,$8B,$83
;TABLA PARA CARAS HOR. CON LÍNEA
;-------------------------------------------------------------------------------------------------
TB_LINEAVERTICALCF: .DB $81,$8C,$8D,$82,$81,$8C,$8D,$82,$81,$8C,$8D,$81

;TABLA PARA CARAS VERT. CON LINEA
;-------------------------------------------------------------------------------------------------
TB_LINEAVERTICALCT:

.DB $81,$8C,$8E,$82,$81,$8C,$8E,$82,$81,$8C,$8E,$81
;TABLA PARA CARAS VERT. CON LINEA
;-------------------------------------------------------------------------------------------------
TB_DIAGONALIZQUIERDA_FELIZ:

.DB $8F,$90,$91,$93,$8F,$90,$91,$93,$8F,$90,$91,$8F
;TABLA PARA CARAS DIAG.
;-------------------------------------------------------------------------------------------------
TB_DIAGONALIZQUIERDA_TRISTE:

.DB $8F,$90,$92,$93,$8F,$90,$92,$93,$8F,$90,$92,$8F
;TABLA PARA CARAS DIAG.
;-------------------------------------------------------------------------------------------------
TB_DIAGONALDERECHA_FELIZ:

.DB $97,$94,$95,$98,$99,$94,$95,$98,$99,$94,$95,$97
;TABLA PARA CARAS DIAG. DERECHA
;-------------------------------------------------------------------------------------------------
TB_DIAGONALDERECHA_TRISTE:

.DB $97,$94,$96,$98,$99,$94,$96,$98,$99,$94,$96,$97
;TABLA PARA CARAS DIAG. DERECHA
;-------------------------------------------------------------------------------------------------

JUGADOR.ASM

;--------------------------------------------------------------------------------------------------
COMPROBAR_VICTORIA_J1:                                ;DETERMINA SI GANÓ EL JUGADOR 1
                                                      ;Y SU MODO DE VICTORIA
                                                     ;EN EL REGISTRO MODO
LDI AUX4,0
LDI AUX2,3



                                                   55
LDI YL,LOW(POSICION0)
LDI YH,HIGH(POSICION0)

JREPETICION:         LD AUX1,Y+
                     CPI AUX1,1
                     BRNE JSAL
                     INC AUX4

       JSAL:         DEC AUX2
                     BRNE JREPETICION
CPI AUX4,3
BRNE JVICT2
LDI MODO,0
RJMP JSALIDA

JVICT2: LDI AUX4,0
   LDI AUX2,3

   LDI YL,LOW(POSICION3)
   LDI YH,HIGH(POSICION3)

JREPETICION2: LD AUX1,Y+
      CPI AUX1,1
                 BRNE JSAL2
                 INC AUX4
       JSAL2:     DEC AUX2
                 BRNE JREPETICION2
CPI AUX4,3
BRNE JVICT3
LDI MODO,1
RJMP JSALIDA

JVICT3: LDI AUX4,0
   LDI AUX2,3

   LDI YL,LOW(POSICION6)
   LDI YH,HIGH(POSICION6)

JREPETICION3:        LD AUX1,Y+
                     CPI AUX1,1
                     BRNE JSAL3
                     INC AUX4

       JSAL3:        DEC AUX2
                     BRNE JREPETICION3
CPI AUX4,3
BRNE JVICT4
LDI MODO,2
RJMP JSALIDA



                                   56
JVICT4: LDI AUX4,0
        LDI AUX2,3

       LDI YL,LOW(POSICION0)
       LDI YH,HIGH(POSICION0)

JREPETICION4:    LD AUX1,Y
                 CPI AUX1,1
                 BRNE JSAL4
                 INC AUX4
       JSAL4:    LDI AUX5,3
                 ADD YL,AUX5
                 LDI AUX5,0
                 ADC YH,AUX5
                 DEC AUX2
                 BRNE JREPETICION4
CPI AUX4,3
BRNE JVICT5
LDI MODO,3
RJMP JSALIDA

JVICT5: LDI AUX4,0
   LDI AUX2,3

   LDI YL,LOW(POSICION1)
   LDI YH,HIGH(POSICION1)

JREPETICION5:    LD AUX1,Y
                 CPI AUX1,1
                 BRNE JSAL5
                 INC AUX4
       JSAL5:    LDI AUX5,3
                 ADD YL,AUX5
                 LDI AUX5,0
                 ADC YH,AUX5
                 DEC AUX2
                 BRNE JREPETICION5
CPI AUX4,3
BRNE JVICT6
LDI MODO,4
RJMP JSALIDA

JVICT6: LDI AUX4,0
        LDI AUX2,3

       LDI YL,LOW(POSICION2)
       LDI YH,HIGH(POSICION2)

JREPETICION6:        LD AUX1,Y
                     CPI AUX1,1


                                  57
BRNE JSAL6
                 INC AUX4
       JSAL6:    LDI AUX5,3
                 ADD YL,AUX5
                 LDI AUX5,0
                 ADC YH,AUX5
                 DEC AUX2
                 BRNE JREPETICION6
CPI AUX4,3
BRNE JVICT7
LDI MODO,5
RJMP JSALIDA


JVICT7: LDI AUX4,0
   LDI AUX2,3

   LDI YL,LOW(POSICION0)
   LDI YH,HIGH(POSICION0)

JREPETICION7:    LD AUX1,Y
                 CPI AUX1,1
                 BRNE JSAL7
                 INC AUX4
       JSAL7:    LDI AUX5,4
                 ADD YL,AUX5
                 LDI AUX5,0
                 ADC YH,AUX5
                 DEC AUX2
                 BRNE JREPETICION7
CPI AUX4,3
BRNE JVICT8
LDI MODO,6
RJMP JSALIDA

JVICT8: LDI AUX4,0
   LDI AUX2,3

   LDI YL,LOW(POSICION2)
   LDI YH,HIGH(POSICION2)

JREPETICION8:    LD AUX1,Y
                 CPI AUX1,1
                 BRNE JSAL8
                 INC AUX4
       JSAL8:    LDI AUX5,2
                 ADD YL,AUX5
                 LDI AUX5,0
                 ADC YH,AUX5
                 DEC AUX2


                               58
BRNE JREPETICION8
CPI AUX4,3
BRNE JNOGANADOR

LDI MODO,7
RJMP SALIDA
JNOGANADOR: LDI MODO,8
JSALIDA:
RET
;--------------------------------------------------------------------------------------------------
COMPROBAR_VICTORIA_J2:                      ;DETERMINA SI GANÓ EL JUGADOR 2 Y SU
                                            ;MODO DE VICTORIA EN
                                             ;EL REGISTRO MODO
LDI AUX4,0
LDI AUX2,3

LDI YL,LOW(POSICION0)
LDI YH,HIGH(POSICION0)

REPETICION:             LD AUX1,Y+
                        CPI AUX1,2
                        BRNE SAL
                        INC AUX4
          SAL:           DEC AUX2
                        BRNE REPETICION
CPI AUX4,3
BRNE VICT2
LDI MODO,0
RJMP SALIDA

VICT2: LDI AUX4,0
   LDI AUX2,3

     LDI YL,LOW(POSICION3)
     LDI YH,HIGH(POSICION3)

REPETICION2:             LD AUX1,Y+
                         CPI AUX1,2
                         BRNE SAL2
                         INC AUX4
          SAL2:          DEC AUX2
                         BRNE REPETICION2
CPI AUX4,3
BRNE VICT3
LDI MODO,1
RJMP SALIDA

VICT3: LDI AUX4,0
       LDI AUX2,3



                                                59
LDI YL,LOW(POSICION6)
   LDI YH,HIGH(POSICION6)

REPETICION3:        LD AUX1,Y+
                    CPI AUX1,2
                    BRNE SAL3
                    INC AUX4
       SAL3:        DEC AUX2
                    BRNE REPETICION3
CPI AUX4,3
BRNE VICT4
LDI MODO,2
RJMP SALIDA

VICT4: LDI AUX4,0
       LDI AUX2,3

     LDI YL,LOW(POSICION0)
     LDI YH,HIGH(POSICION0)

REPETICION4:        LD AUX1,Y
                    CPI AUX1,2
                    BRNE SAL4
                    INC AUX4
       SAL4:        LDI AUX5,3
                    ADD YL,AUX5
                    LDI AUX5,0
                    ADC YH,AUX5
                    DEC AUX2
                    BRNE REPETICION4
CPI AUX4,3
BRNE VICT5
LDI MODO,3
RJMP SALIDA

VICT5: LDI AUX4,0
       LDI AUX2,3

     LDI YL,LOW(POSICION1)
     LDI YH,HIGH(POSICION1)

REPETICION5: LD AUX1,Y
                 CPI AUX1,2
                 BRNE SAL5
                 INC AUX4
      SAL5:      LDI AUX5,3
                 ADD YL,AUX5
                 LDI AUX5,0
                 ADC YH,AUX5
                 DEC AUX2


                                  60
BRNE REPETICION5
CPI AUX4,3
BRNE VICT6
LDI MODO,4
RJMP SALIDA

VICT6: LDI AUX4,0
       LDI AUX2,3

         LDI YL,LOW(POSICION2)
         LDI YH,HIGH(POSICION2)

REPETICION6:        LD AUX1,Y
                    CPI AUX1,2
                    BRNE SAL6
                    INC AUX4
         SAL6:      LDI AUX5,3
                    ADD YL,AUX5
                    LDI AUX5,0
                    ADC YH,AUX5
                    DEC AUX2
                    BRNE REPETICION6
CPI AUX4,3
BRNE VICT7
LDI MODO,5
RJMP SALIDA


VICT7:       LDI AUX4,0
             LDI AUX2,3

             LDI YL,LOW(POSICION0)
             LDI YH,HIGH(POSICION0)

REPETICION7:        LD AUX1,Y
                    CPI AUX1,2
                    BRNE SAL7
                    INC AUX4

             SAL7: LDI AUX5,4
                   ADD YL,AUX5
                   LDI AUX5,0
                   ADC YH,AUX5
                   DEC AUX2
                   BRNE REPETICION7
CPI AUX4,3
BRNE VICT8
LDI MODO,6
RJMP SALIDA



                                  61
VICT8: LDI AUX4,0
       LDI AUX2,3

     LDI YL,LOW(POSICION2)
     LDI YH,HIGH(POSICION2)

REPETICION8:              LD AUX1,Y
                          CPI AUX1,2
                          BRNE SAL8
                          INC AUX4
          SAL8:           LDI AUX5,2
                          ADD YL,AUX5
                          LDI AUX5,0
                          ADC YH,AUX5
                          DEC AUX2
                          BRNE REPETICION8
CPI AUX4,3
BRNE NOGANADOR

LDI MODO,7
RJMP SALIDA
NOGANADOR: LDI MODO,8
SALIDA:
RET
;--------------------------------------------------------------------------------------------------
MOSTRARVICJ1:                ;SACA AL LCD EL NÚMERO DE PARTIDAS GANADAS
POR EL JUGADOR 1
LDS AUX1,VICJ1
RCALL BINTOBCD
STS VIC_J1_MSB,AUX2
STS VIC_J1_LSB,AUX4

LDI AUX1,$C8
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDS AUX1,VIC_J1_MSB
RCALL DECOD
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

LDS AUX1,VIC_J1_LSB
RCALL DECOD
RCALL DATO1
LDI AUX1,$C0
RCALL CMD
RET


                                                 62
;--------------------------------------------------------------------------------------------------
MOSTRAREMP:                                 ;SACA AL LCD EL NÚMERO DE PARTIDAS
                                            ;EMPATADAS
LDS AUX1,EMP
RCALL BINTOBCD
STS EMP_MSB,AUX2
STS EMP_LSB,AUX4

LDI AUX1,$D0
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDS AUX1,EMP_MSB
RCALL DECOD
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

LDS AUX1,EMP_LSB
RCALL DECOD
RCALL DATO1
LDI AUX1,$C0
RCALL CMD
RET
;--------------------------------------------------------------------------------------------------
MOSTRARVICJ2: ;SACA AL LCD EL NÚMERO DE PARTIDAS GANADAS
                           ;POR EL JUGADOR 2
LDS AUX1,VICJ2
RCALL BINTOBCD
STS VIC_J2_MSB,AUX2
STS VIC_J2_LSB,AUX4

LDI AUX1,$D8
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDS AUX1,VIC_J2_MSB
RCALL DECOD
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

LDS AUX1,VIC_J2_LSB
RCALL DECOD
RCALL DATO1
LDI AUX1,$C0


                                                  63
RCALL CMD
RET
;--------------------------------------------------------------------------------------------------
COMPROBAR_CASILLA_J1:                                ;COMPRUEBA LA DISPONIBILIDAD
                                                     ;DE UNA CASILLA Y ALMACENA
                                                     ;DATO EN CASO
                                                   ;DE ESTAR LIBRE PARA EL JUGADOR 1
LDI YL,LOW(POSICION0)
LDI YH,HIGH(POSICION0)

ADD YL,CURSOR
LDI AUX1,0
ADC YH,AUX1

LD AUX1,Y
CPI AUX1,0
BRNE CC2
LDI AUX1,1
ST Y,AUX1
SEC                      ;BANDERA C EN 1 CUANDO LA CASILLA ESTA LIBRE Y
                         ;SE COLOCA ÍCONO
RJMP SAL_CC
CC2: CLC  ;BANDERA C EN 0 CUANDO LA CASILLA ESTA OCUPADA Y NO
          ;SE PUEDE COLOCAR ÍCONO

SAL_CC:
RET
;---------------------------------------------------------------------------------------------------
COMPROBAR_CASILLA_J2:                       ;COMPRUEBA LA DISPONIBILIDAD DE UNA
                                            ;CASILLA Y ALMACENA DATO EN CASO
                                             ;DE ESTAR LIBRE PARA EL JUGADOR 2

LDI YL,LOW(POSICION0)
LDI YH,HIGH(POSICION0)

ADD YL,CURSOR
LDI AUX1,0
ADC YH,AUX1

LD AUX1,Y
CPI AUX1,0
BRNE CC22
LDI AUX1,2
ST Y,AUX1
SEC                      ;BANDERA C EN 1 CUANDO LA CASILLA ESTA LIBRE Y
                         ;SE COLOCA ÍCONO
RJMP SAL_CC2
CC22: CLC ;BANDERA C EN 0 CUANDO LA CASILLA ESTA OCUPADA Y NO
          ;SE PUEDE COLOCAR ÍCONO



                                                64
SAL_CC2:
RET
;---------------------------------------------------------------------------------------------------

BINTOBCD:                                  ;TOMA EL VALOR BINARIO EN AUX1 Y LO
                                         ;CONVIERTE EN BDC - MSB AUX2 - LSB AUX4

LDI AUX2,0

REPET: SUBI AUX1,10
        BRCS SALTO
        INC AUX2
        RJMP REPET

SALTO: LDI AUX4,10
            ADD AUX1,AUX4
            MOV AUX4,AUX1
RET
;--------------------------------------------------------------------------------------------------
DECOD:                     ;PONE EN AUX1 EL VALOR DEL CARACTER
                            ;NUMERICO PARA MOSTRAR EN PANTALLA

CPI AUX1,0
BRNE DC2
LDI AUX1,$10
RJMP SAL_DECOD

DC2: CPI AUX1,1
     BRNE DC3
     LDI AUX1,$11
     RJMP SAL_DECOD

DC3: CPI AUX1,2
     BRNE DC4
      LDI AUX1,$12
      RJMP SAL_DECOD

DC4: CPI AUX1,3
     BRNE DC5
     LDI AUX1,$13
     RJMP SAL_DECOD

DC5: CPI AUX1,4
     BRNE DC6
     LDI AUX1,$14
     RJMP SAL_DECOD

DC6: CPI AUX1,5
     BRNE DC7
     LDI AUX1,$15


                                                   65
RJMP SAL_DECOD

DC7: CPI AUX1,6
     BRNE DC8
     LDI AUX1,$16
     RJMP SAL_DECOD

DC8:     CPI AUX1,7
         BRNE DC9
         LDI AUX1,$17
         RJMP SAL_DECOD

DC9:     CPI AUX1,8
         BRNE DC10
         LDI AUX1,$18
         RJMP SAL_DECOD

DC10: CPI AUX1,9
      BRNE SAL_DECOD
      LDI AUX1,$19

SAL_DECOD:
RET
;--------------------------------------------------------------------------------------------------
ENCERARCASILLAS:                            ;ENCERA LAS CASILLAS DEL TABLERO

LDI AUX1,0
STS POSICION0,AUX1
STS POSICION1,AUX1
STS POSICION2,AUX1
STS POSICION3,AUX1
STS POSICION4,AUX1
STS POSICION5,AUX1
STS POSICION6,AUX1
STS POSICION7,AUX1
STS POSICION8,AUX1

RET
;--------------------------------------------------------------------------------------------------
ENCERARPUNTAJES:                                     ;ENCERA LOS PUNTAJES DE LOS
                                                     ;JUGADORES Y DE EMPATE
LDI AUX1,0
STS VICJ1,AUX1
STS EMP,AUX1
STS VICJ2,AUX1
RET
;--------------------------------------------------------------------------------------------------
HABILITARJ1:                        ;HABILITA LAS INTERRUPCIONES PARA EL J1

LDI AUX1,$08


                                                   66
STS PCICR,AUX1
LDI AUX1,$1F
STS PCMSK3,AUX1
LDI AUX1,$08
OUT PCIFR, AUX1
SEI
RET
;--------------------------------------------------------------------------------------------------
HABILITARJ2:               ;HABILITA LAS INTERRUPCIONES PARA EL J2

LDI AUX1,$02
STS PCICR,AUX1
LDI AUX1,$1F
STS PCMSK1,AUX1
LDI AUX1,$02
OUT PCIFR, AUX1
SEI
RET
;--------------------------------------------------------------------------------------------------
INCREMENTAR_VICTORIA_J1:                             ;INCREMENTA VICTORIAS DE J1

LDS AUX1,VICJ1
INC AUX1
STS VICJ1,AUX1
RET
;--------------------------------------------------------------------------------------------------
INCREMENTAR_EMPATE:                                                    ;INCREMENTA EMPATES

LDS AUX1,EMP
INC AUX1
STS EMP,AUX1
RET
;--------------------------------------------------------------------------------------------------
INCREMENTAR_VICTORIA_J2:                             ;INCREMENTA VICTORIAS DE J2

LDS AUX1,VICJ2
INC AUX1
STS VICJ2,AUX1
RET
;-------------------------------------------------------------------------------------------------
ESPERA:                             ;TIEMPO DE ESPERA

LDI AUX1,255              ;255
LDI AUX2,70
CLR R15

ESP:     DEC R15
         BRNE ESP
         DEC AUX1
         BRNE ESP


                                                   67
DEC AUX2
         BRNE ESP
RET
;-------------------------------------------------------------------------------------------------
ESPERA2:                            ;TIEMPO DE ESPERA 2 PARA PC

LDI AUX2,20
CLR R15

ESP2:     DEC R15
          BRNE ESP
          DEC AUX2
          BRNE ESP2
RET

;-------------------------------------------------------------------------------------------------
TURNO_J1: ;INDICA TURNO PARA EL JUGADOR 1

LDI AUX1,$27
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX1,$2A
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

LDI AUX1,$11
RCALL DATO1
LDI AUX1,$C0
RCALL CMD
RET
;--------------------------------------------------------------------------------------------------
TURNO_J2: ;INDICA TURNO PARA EL JUGADOR 2

LDI AUX1,$27
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX1,$2A
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

LDI AUX1,$12
RCALL DATO1


                                                   68
LDI AUX1,$C0
RCALL CMD
RET
;---------------------------------------------------------------------------------------------------
TURNO_PC: ;INDICA TURNO PARA PC

LDI AUX1,$27
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD

LDI AUX1,$30
RCALL DATO1
LDI AUX1,$C0
RCALL CMD

LDI AUX1,$23
RCALL DATO1
LDI AUX1,$C0
RCALL CMD
RET
;---------------------------------------------------------------------------------------------------
JUGAR_PC:
CLC
RCALL GANAR_PC
BRCS PORFIN
RCALL IMPEDIRGANAR
BRCS PORFIN
RCALL PONER_PC
PORFIN:
RET
;---------------------------------------------------------------------------------------------------
GANAR_PC:                  ;DEVUELVE EN R14 LA POSICION DEL CURSOR
PUSH AUX4
PUSH AUX5
POSIBLIDAD1: LDI AUX4,0
          LDI AUX5,0
          CLC
          LDS               AUX1,POSICION0
                            LDI CURSOR,0
                            RCALL CONTAR
                            LDS AUX1,POSICION1
                            LDI CURSOR,1
                            RCALL CONTAR
                            LDS AUX1,POSICION2
                            LDI CURSOR,2
                            RCALL CONTAR
                            RCALL VERIFICAR
                            BRCC POSIBILIDAD2


                                                   69
RJMP GO

POSIBILIDAD2:   LDI AUX4,0
                LDI AUX5,0
                CLC
                LDS AUX1,POSICION3
                LDI CURSOR,3
                RCALL CONTAR
                LDS AUX1,POSICION4
                LDI CURSOR,4
                RCALL CONTAR
                LDS AUX1,POSICION5
                LDI CURSOR,5
                RCALL CONTAR
                RCALL VERIFICAR
                BRCC POSIBILIDAD3
                RJMP GO

POSIBILIDAD3:   LDI AUX4,0
                LDI AUX5,0
                CLC
                LDS AUX1,POSICION6
                LDI CURSOR,6
                RCALL CONTAR
                LDS AUX1,POSICION7
                LDI CURSOR,7
                RCALL CONTAR
                LDS AUX1,POSICION8
                LDI CURSOR,8
                RCALL CONTAR
                RCALL VERIFICAR
                BRCC POSIBILIDAD4
                RJMP GO

POSIBILIDAD4:   LDI AUX4,0
                LDI AUX5,0
                CLC
                LDS AUX1,POSICION0
                LDI CURSOR,0
                RCALL CONTAR
                LDS AUX1,POSICION3
                LDI CURSOR,3
                RCALL CONTAR
                LDS AUX1,POSICION6
                LDI CURSOR,6
                RCALL CONTAR
                RCALL VERIFICAR
                BRCC POSIBILIDAD5
                RJMP GO



                              70
POSIBILIDAD5:   LDI AUX4,0
                LDI AUX5,0
                CLC
                LDS AUX1,POSICION1
                LDI CURSOR,1
                RCALL CONTAR
                LDS AUX1,POSICION4
                LDI CURSOR,4
                RCALL CONTAR
                LDS AUX1,POSICION7
                LDI CURSOR,7
                RCALL CONTAR
                RCALL VERIFICAR
                BRCC POSIBILIDAD6
                RJMP GO

POSIBILIDAD6:   LDI AUX4,0
                LDI AUX5,0
                CLC
                LDS AUX1,POSICION2
                LDI CURSOR,2
                RCALL CONTAR
                LDS AUX1,POSICION5
                LDI CURSOR,5
                RCALL CONTAR
                LDS AUX1,POSICION8
                LDI CURSOR,8
                RCALL CONTAR
                RCALL VERIFICAR
                BRCC POSIBILIDAD7
                RJMP GO

POSIBILIDAD7:   LDI AUX4,0
                LDI AUX5,0
                CLC
                LDS AUX1,POSICION0
                LDI CURSOR,0
                RCALL CONTAR
                LDS AUX1,POSICION4
                LDI CURSOR,4
                RCALL CONTAR
                LDS AUX1,POSICION8
                LDI CURSOR,8
                RCALL CONTAR
                RCALL VERIFICAR
                BRCC POSIBILIDAD8
                RJMP GO

POSIBILIDAD8:   LDI AUX4,0
                LDI AUX5,0


                              71
CLC
                          LDS AUX1,POSICION2
                          LDI CURSOR,2
                          RCALL CONTAR
                          LDS AUX1,POSICION4
                          LDI CURSOR,4
                          RCALL CONTAR
                          LDS AUX1,POSICION6
                          LDI CURSOR,6
                          RCALL CONTAR
                          RCALL VERIFICAR

GO:
POP AUX5
POP AUX4
RET
;---------------------------------------------------------------------------------------------------
CONTAR:                             ;CUENTA DE 0s Y 2s
CPI AUX1,0
BRNE O2
 INC AUX4
 MOV R14,CURSOR
 O2: CPI AUX1,2
    BRNE AB
          INC AUX5
AB:
RET
;---------------------------------------------------------------------------------------------------
VERIFICAR:                 ;VERIFICAR VICTORIA DE PC
CLC
CPI AUX5,2 ;DOS VECES EL 2
BRNE AB2
CPI AUX4,1 ; UN SOLO 0
BRNE AB2
         MOV CURSOR,R14
          LDI AUX2,2
                  CPI CURSOR,0
                  BRNE E2
                  STS POSICION0,AUX2
                  RJMP BANDERA

         E2:     CPI CURSOR,1
                 BRNE E3
                 STS POSICION1,AUX2
                 RJMP BANDERA

        E3:      CPI CURSOR,2
                 BRNE E4
                 STS POSICION2,AUX2
                 RJMP BANDERA


                                                   72
E4:     CPI CURSOR,3
                 BRNE E5
                 STS POSICION3,AUX2
                 RJMP BANDERA

         E5:    CPI CURSOR,4
                BRNE E6
                STS POSICION4,AUX2
                RJMP BANDERA

         E6:    CPI CURSOR,5
                BRNE E7
                STS POSICION5,AUX2
                RJMP BANDERA

         E7:    CPI CURSOR,6
                BRNE E8
                STS POSICION6,AUX2
                RJMP BANDERA

         E8:    CPI CURSOR,7
                BRNE E9
                STS POSICION7,AUX2
                RJMP BANDERA

   E9: STS POSICION8,AUX2

    BANDERA:
    SEC
          RET
AB2: CLC
RET
;---------------------------------------------------------------------------------------------------
IMPEDIRGANAR:                       ;SUBRUTINA PARA IMPEDIR GANAR AL JUGADOR
PUSH AUX4
PUSH AUX5
SPOSIBLIDAD1: LDI AUX4,0

                         LDI AUX5,0
                         CLC
                         LDS AUX1,POSICION0
                         LDI CURSOR,0
                         RCALL SCONTAR
                         LDS AUX1,POSICION1
                         LDI CURSOR,1
                         RCALL SCONTAR
                         LDS AUX1,POSICION2
                         LDI CURSOR,2
                         RCALL SCONTAR


                                                73
RCALL SVERIFICAR
                 BRCC SPOSIBILIDAD2
                 RJMP SGO

SPOSIBILIDAD2:   LDI AUX4,0
                 LDI AUX5,0
                 CLC
                 LDS AUX1,POSICION3
                 LDI CURSOR,3
                 RCALL SCONTAR
                 LDS AUX1,POSICION4
                 LDI CURSOR,4
                 RCALL SCONTAR
                 LDS AUX1,POSICION5
                 LDI CURSOR,5
                 RCALL SCONTAR
                 RCALL SVERIFICAR
                 BRCC SPOSIBILIDAD3
                 RJMP SGO

SPOSIBILIDAD3:   LDI AUX4,0
                 LDI AUX5,0
                 CLC
                 LDS AUX1,POSICION6
                 LDI CURSOR,6
                 RCALL SCONTAR
                 LDS AUX1,POSICION7
                 LDI CURSOR,7
                 RCALL SCONTAR
                 LDS AUX1,POSICION8
                 LDI CURSOR,8
                 RCALL SCONTAR
                 RCALL SVERIFICAR
                 BRCC SPOSIBILIDAD4
                 RJMP SGO

SPOSIBILIDAD4:  LDI AUX4,0
                LDI AUX5,0
                CLC
                LDS AUX1,POSICION0
                LDI CURSOR,0
                RCALL SCONTAR
                LDS AUX1,POSICION3
                LDI CURSOR,3
                RCALL SCONTAR
                LDS AUX1,POSICION6
                LDI CURSOR,6
                RCALL SCONTAR
      RCALL SVERIFICAR
                BRCC SPOSIBILIDAD5


                              74
RJMP SGO

SPOSIBILIDAD5:   LDI AUX4,0
                 LDI AUX5,0
                 CLC
                 LDS AUX1,POSICION1
                 LDI CURSOR,1
                 RCALL SCONTAR
                 LDS AUX1,POSICION4
                 LDI CURSOR,4
                 RCALL SCONTAR
                 LDS AUX1,POSICION7
                 LDI CURSOR,7
                 RCALL SCONTAR
                 RCALL SVERIFICAR
                 BRCC SPOSIBILIDAD6
                 RJMP SGO

SPOSIBILIDAD6:   LDI AUX4,0
                 LDI AUX5,0
                 CLC
                 LDS AUX1,POSICION2
                 LDI CURSOR,2
                 RCALL SCONTAR
                 LDS AUX1,POSICION5
                 LDI CURSOR,5
                 RCALL SCONTAR
                 LDS AUX1,POSICION8
                 LDI CURSOR,8
                 RCALL SCONTAR
                 RCALL SVERIFICAR
                 BRCC SPOSIBILIDAD7
                 RJMP SGO

SPOSIBILIDAD7:   LDI AUX4,0
                 LDI AUX5,0
                 CLC
                 LDS AUX1,POSICION0
                 LDI CURSOR,0
                 RCALL SCONTAR
                 LDS AUX1,POSICION4
                 LDI CURSOR,4
                 RCALL SCONTAR
                 LDS AUX1,POSICION8
                 LDI CURSOR,8
                 RCALL SCONTAR
                 RCALL SVERIFICAR
                 BRCC SPOSIBILIDAD8
                 RJMP SGO



                              75
SPOSIBILIDAD8:            LDI AUX4,0
                          LDI AUX5,0
                          CLC
                          LDS AUX1,POSICION2
                          LDI CURSOR,2
                          RCALL SCONTAR
                          LDS AUX1,POSICION4
                          LDI CURSOR,4
                          RCALL SCONTAR
                          LDS AUX1,POSICION6
                          LDI CURSOR,6
                          RCALL SCONTAR
                          RCALL SVERIFICAR
SGO:
POP AUX5
POP AUX4
RET
;---------------------------------------------------------------------------------------------------
SCONTAR:                   ;CUENTA DE 1s O 0s
CPI AUX1,0
BRNE SO2
 INC AUX4
 MOV R14,CURSOR
 SO2: CPI AUX1,1
 BRNE SAB
INC AUX5
SAB:
RET
;---------------------------------------------------------------------------------------------------
SVERIFICAR:              ;VERIFICAR IMPEDIMIENTO DE VICTORIA DEL JUGADOR
CLC
CPI AUX5,2 ;DOS VECES EL 1
BRNE SAB2
CPI AUX4,1 ; UN SOLO 0
BRNE SAB2

    MOV CURSOR,R14                                ;IMPEDIMOS QUE GANE EL JUGADOR
        LDI AUX2,2
        CPI CURSOR,0
        BRNE SE2
        STS POSICION0,AUX2
        RJMP SBANDERA

          SE2: CPI CURSOR,1
               BRNE SE3
               STS POSICION1,AUX2
               RJMP SBANDERA

   SE3:           CPI CURSOR,2
                  BRNE SE4


                                                76
STS POSICION2,AUX2
                   RJMP SBANDERA

         SE4:      CPI CURSOR,3
                   BRNE SE5
                   STS POSICION3,AUX2
                   RJMP SBANDERA

         SE5:      CPI CURSOR,4
                   BRNE SE6
                   STS POSICION4,AUX2
                   RJMP SBANDERA

         SE6:      CPI CURSOR,5
                   BRNE SE7
                   STS POSICION5,AUX2
                   RJMP SBANDERA

         SE7:      CPI CURSOR,6
                   BRNE SE8
                   STS POSICION6,AUX2
                   RJMP SBANDERA

         SE8:      CPI CURSOR,7
                   BRNE SE9
                   STS POSICION7,AUX2
                   RJMP SBANDERA

   SE9: STS POSICION8,AUX2

  SBANDERA:
  SEC
      RET
SAB2: CLC
RET

;---------------------------------------------------------------------------------------------------
PONER_PC:

LDI YL,LOW(POSICION0)
LDI YH,HIGH(POSICION0)
LDI CURSOR,0

        REPETITION: INC CURSOR
        LD AUX1,Y+
        CPI AUX1,0
        BRNE REPETITION
        LDI AUX1,2
        ST -Y,AUX1
        DEC CURSOR


                                                   77
MOV R14,CURSOR
RET
;---------------------------------------------------------------------------------------------------

7. SIMULACIÓN DEL CIRCUITO


7.1. MENÚ 1




7.2. MENÚ 2




                                                   78
7.3. JUGADOR VS PC




                     79
7.4. JUGADOR1 VS JUGADOR2




                            80
8. PARTE PRÁCTICA (IMPLEMENTACIÓN DEL CIRCUITO)

Hay que tomar en cuenta que para la realización de este proyecto, se ha ido avanzando
poco a poco para poder cumplir con el tiempo establecido de entrega, además vale
recalcar el trabajo en grupo, para ello consideramos necesario dejar constancia de
algunas fotografías con el cual podamos demostrar cómo ha ido evolucionando el
proyecto en el transcurso del tiempo.

8.1.-




                                         81
8.2.-




8.3.-




8.4.-




        82
8.5.-




8.6.-




8.7.-




        83
8.8.-




8.9.-




8.10.-




         84
9. CONCLUSIONES

Se pudo concluir que:

   1. Para la realización de este proyecto fue necesario poner en práctica todos los
      conocimientos que en el transcurso del semestre hemos ido adquiriendo ya que
      en este se aplica todos los conceptos relacionado con la materia de Sistemas
      Microprocesados tales como: comandos, etiquetas, subrutinas, interrupciones,
      etc.

   2. Una de las mayores dificultades fue la programación de la pantalla GLCD, ya
      que para que logre funcionar se necesitaba un programa aparte en Assembler
      para que pueda funcionar en el proyecto.

   3. En la elaboración del proyecto, se necesitaba un teclado para cada jugador, antes
      de iniciar el proyecto se intento buscar en los locales electrónicos uno teclado 5
      teclas (arriba, abajo, derecha, izquierda y enter), desafortunadamente no se
      puedo encontrar ya que solo había teclados de 3x3 o de 4x4. Debido a este
      inconveniente, vemos la mejor opción de implementarlo en el mismo protoboard
      con pulsadores y capacitores con el cual no haya rebotes.

   4. Al principio de la elaboración del proyecto, estábamos utilizando la cables que
      salían de la pantalla GLCD, esto dificultaba para el armado y sobre todo no tenía
      una buena presentación, debido a esto buscamos una solución y consistió en
      colocarle y soldarle un adaptador a la pantalla, esto nos facilitó para colocarle
      directamente en el protoboard y mejoró mucho la presentación.

   5. A pesar de que tenemos algunas fotografías de la simulación en Proteus, nos
      pareció importante hacerle un video y subirle al youtube para mejor apreciación.

   6. Para la programación de la pantalla GLCD de 240x128 pixels, fue necesario
      descargarnos el datasheet de este, ya que necesitábamos saber cómo funciona y
      la representación que tenía cada pin.


10. DIFICULTADES Y RECOMENDACIONES


   1. Es recomendable no dejarse acumular todo el proyecto para el final, es por eso
      que se trabajo poco a poco desde el principio con esto hemos obtenido buenos
      resultados, debido a eso mediante las fotografías se ha dejado constancia del
      avance progresivo del proyecto.

   2. El diseño del software es un factor bastante importante en este tipo de proyectos.
      Es recomendable realizar un plan de cómo se encuentra estructurado el software
      para luego empezar a trabajar en el código como se hizo en este caso.




                                          85
3. Dividir las diversas actividades que el programa va a realizar en subrutinas.
     Mientras más subrutinas se empleen el programa es más modular y mucho más
     sencillo de manejar. De igual manera en caso de haber errores es fácil de
     corregir el código.

  4. Realizar el código empleando comentarios. Un código con comentarios permite
     entre otras cosas saber con qué objetivo se escribió esa parte del código, saber
     qué función realiza y poder corregirla con facilidad en caso de errores.

  5. Los pulsadores al ser elementos mecánicos producen rebote. Para reducir dicho
     rebote es recomendable emplear capacitores en paralelo a estos. Otra opción
     pudiese ser emplear tiempos de espera producidos por software. No obstante
     esta opción no se tomó para este proyecto para evitar mayores tiempos de
     respuesta así como de escritura de datos en la pantalla GLCD.

  6. Es mejor la utilización de un adaptador para la pantalla GLCD con el cual
     podamos conectar de forma directa al protoboard en vez de colocar cables, esto
     nos facilita para el armado del circuito y más que todo mejora mucho en la
     presentación ya que no se va a ver muchos cables en el proto.


11. BIBLIOGRAFÍA

  •   http://es.wikipedia.org/wiki/Tres_en_l%C3%ADnea

  •   http://www.egochina.net.cn/e-shop/ebay/Datasheet/JHD240128D.pdf

  •   DIAPOSITIVAS INTERRUPCIONES DE LOS ATMEGA 164P, VECTORES,
      REGISTROS Y BANDERAS, Ing. Jaime Velarde, EPN.




                                        86

More Related Content

Viewers also liked

Objetivas conceptos
Objetivas conceptosObjetivas conceptos
Objetivas conceptosLelie Peña
 
Domòtica: L'habitatge en les nostres mans
Domòtica: L'habitatge en les nostres mansDomòtica: L'habitatge en les nostres mans
Domòtica: L'habitatge en les nostres mansCRP del Tarragonès
 
Medios Digitales V.S. Tradicionales
Medios Digitales V.S. TradicionalesMedios Digitales V.S. Tradicionales
Medios Digitales V.S. TradicionalesLuis Angel Adame
 
Cardiopatia isquemica silvia
Cardiopatia isquemica silviaCardiopatia isquemica silvia
Cardiopatia isquemica silviaSilvia Varas
 
Altcoins an alternative currency primer
Altcoins  an alternative currency primerAltcoins  an alternative currency primer
Altcoins an alternative currency primerMauricio Archibold
 
Taller 2 El empresario, la empresa y su entorno
Taller 2 El empresario, la empresa y su entornoTaller 2 El empresario, la empresa y su entorno
Taller 2 El empresario, la empresa y su entornolizjhoha
 
Open edX Plataforma LMS Abierto y Flexible - Presentación General
Open edX Plataforma LMS Abierto y Flexible - Presentación GeneralOpen edX Plataforma LMS Abierto y Flexible - Presentación General
Open edX Plataforma LMS Abierto y Flexible - Presentación GeneralFreelancer
 
Ph d lib15_konference_hanne-bess_2015
Ph d lib15_konference_hanne-bess_2015Ph d lib15_konference_hanne-bess_2015
Ph d lib15_konference_hanne-bess_2015Jeannette Ekstrøm
 
Turismo de playa El Salvador
Turismo de playa El SalvadorTurismo de playa El Salvador
Turismo de playa El SalvadorSissi Vargas
 
Next Generation Entrepreneur
Next Generation EntrepreneurNext Generation Entrepreneur
Next Generation EntrepreneurTimur Nacre
 
Fq jornada sociedad med fisicrehab
Fq jornada sociedad med fisicrehabFq jornada sociedad med fisicrehab
Fq jornada sociedad med fisicrehabeuskalemfyre
 
Javier Maldonado Curso Paisajes Del Vino Cep Cordoba 2009
Javier Maldonado Curso Paisajes Del Vino Cep Cordoba 2009Javier Maldonado Curso Paisajes Del Vino Cep Cordoba 2009
Javier Maldonado Curso Paisajes Del Vino Cep Cordoba 2009José Moraga Campos
 

Viewers also liked (20)

Objetivas conceptos
Objetivas conceptosObjetivas conceptos
Objetivas conceptos
 
Traperos emaus trujillo terminado
Traperos emaus trujillo terminadoTraperos emaus trujillo terminado
Traperos emaus trujillo terminado
 
Domòtica: L'habitatge en les nostres mans
Domòtica: L'habitatge en les nostres mansDomòtica: L'habitatge en les nostres mans
Domòtica: L'habitatge en les nostres mans
 
Análisis DAFO de Ciao
Análisis DAFO de CiaoAnálisis DAFO de Ciao
Análisis DAFO de Ciao
 
Medios Digitales V.S. Tradicionales
Medios Digitales V.S. TradicionalesMedios Digitales V.S. Tradicionales
Medios Digitales V.S. Tradicionales
 
Cardiopatia isquemica silvia
Cardiopatia isquemica silviaCardiopatia isquemica silvia
Cardiopatia isquemica silvia
 
Altcoins an alternative currency primer
Altcoins  an alternative currency primerAltcoins  an alternative currency primer
Altcoins an alternative currency primer
 
Taller 2 El empresario, la empresa y su entorno
Taller 2 El empresario, la empresa y su entornoTaller 2 El empresario, la empresa y su entorno
Taller 2 El empresario, la empresa y su entorno
 
Da pepe
Da pepeDa pepe
Da pepe
 
PDM Okinawa
PDM OkinawaPDM Okinawa
PDM Okinawa
 
Open edX Plataforma LMS Abierto y Flexible - Presentación General
Open edX Plataforma LMS Abierto y Flexible - Presentación GeneralOpen edX Plataforma LMS Abierto y Flexible - Presentación General
Open edX Plataforma LMS Abierto y Flexible - Presentación General
 
Music & DJ Raport 2016 08
Music & DJ Raport 2016 08Music & DJ Raport 2016 08
Music & DJ Raport 2016 08
 
Ph d lib15_konference_hanne-bess_2015
Ph d lib15_konference_hanne-bess_2015Ph d lib15_konference_hanne-bess_2015
Ph d lib15_konference_hanne-bess_2015
 
Turismo de playa El Salvador
Turismo de playa El SalvadorTurismo de playa El Salvador
Turismo de playa El Salvador
 
Next Generation Entrepreneur
Next Generation EntrepreneurNext Generation Entrepreneur
Next Generation Entrepreneur
 
Lebenslauf Vittoria Caradonna
Lebenslauf Vittoria CaradonnaLebenslauf Vittoria Caradonna
Lebenslauf Vittoria Caradonna
 
Los miserables
Los miserablesLos miserables
Los miserables
 
Enroute, Marzo2010
Enroute, Marzo2010Enroute, Marzo2010
Enroute, Marzo2010
 
Fq jornada sociedad med fisicrehab
Fq jornada sociedad med fisicrehabFq jornada sociedad med fisicrehab
Fq jornada sociedad med fisicrehab
 
Javier Maldonado Curso Paisajes Del Vino Cep Cordoba 2009
Javier Maldonado Curso Paisajes Del Vino Cep Cordoba 2009Javier Maldonado Curso Paisajes Del Vino Cep Cordoba 2009
Javier Maldonado Curso Paisajes Del Vino Cep Cordoba 2009
 

Similar to Informe grupo cronos

⭐⭐⭐⭐⭐ (Práctica 5) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 5) DESARROLLO DE APLICACIONES CON #PIC16F886⭐⭐⭐⭐⭐ (Práctica 5) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 5) DESARROLLO DE APLICACIONES CON #PIC16F886Victor Asanza
 
UNIDAD II CONTROL Y MANEJO DE PERIFÉRICOS(TECLADO 4X4 ,LCD GRficas 128x64) 20...
UNIDAD II CONTROL Y MANEJO DE PERIFÉRICOS(TECLADO 4X4 ,LCD GRficas 128x64) 20...UNIDAD II CONTROL Y MANEJO DE PERIFÉRICOS(TECLADO 4X4 ,LCD GRficas 128x64) 20...
UNIDAD II CONTROL Y MANEJO DE PERIFÉRICOS(TECLADO 4X4 ,LCD GRficas 128x64) 20...SistemadeEstudiosMed
 
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladoresMicrocontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladoresSANTIAGO PABLO ALBERTO
 
3.6 texto lcd
3.6 texto lcd3.6 texto lcd
3.6 texto lcdSNPP
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y tecladoLuis Zurita
 
Contador
ContadorContador
Contadorhisilva
 
El trabajo del microprocesador
El trabajo del microprocesadorEl trabajo del microprocesador
El trabajo del microprocesadoranyely-brayan
 
Matriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en LinuxMatriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en LinuxSNPP
 
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886Victor Asanza
 
Unidad 2 ensamblador
Unidad 2   ensambladorUnidad 2   ensamblador
Unidad 2 ensambladoreveTalavera
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreLuis Zurita
 
El microprocesador
El microprocesadorEl microprocesador
El microprocesadoralumnos2012
 

Similar to Informe grupo cronos (20)

⭐⭐⭐⭐⭐ (Práctica 5) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 5) DESARROLLO DE APLICACIONES CON #PIC16F886⭐⭐⭐⭐⭐ (Práctica 5) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 5) DESARROLLO DE APLICACIONES CON #PIC16F886
 
Control lcd 16X2 proton
Control lcd 16X2 protonControl lcd 16X2 proton
Control lcd 16X2 proton
 
UNIDAD II CONTROL Y MANEJO DE PERIFÉRICOS(TECLADO 4X4 ,LCD GRficas 128x64) 20...
UNIDAD II CONTROL Y MANEJO DE PERIFÉRICOS(TECLADO 4X4 ,LCD GRficas 128x64) 20...UNIDAD II CONTROL Y MANEJO DE PERIFÉRICOS(TECLADO 4X4 ,LCD GRficas 128x64) 20...
UNIDAD II CONTROL Y MANEJO DE PERIFÉRICOS(TECLADO 4X4 ,LCD GRficas 128x64) 20...
 
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladoresMicrocontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
 
Microprocesador y memorias 1
Microprocesador y memorias 1Microprocesador y memorias 1
Microprocesador y memorias 1
 
Unidad III
Unidad IIIUnidad III
Unidad III
 
PANTALLAS LCD
PANTALLAS LCDPANTALLAS LCD
PANTALLAS LCD
 
3.6 texto lcd
3.6 texto lcd3.6 texto lcd
3.6 texto lcd
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y teclado
 
Contador
ContadorContador
Contador
 
El trabajo del microprocesador
El trabajo del microprocesadorEl trabajo del microprocesador
El trabajo del microprocesador
 
Teoria lcd
Teoria lcd Teoria lcd
Teoria lcd
 
Matriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en LinuxMatriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en Linux
 
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
⭐⭐⭐⭐⭐ (Práctica 3) DESARROLLO DE APLICACIONES CON #PIC16F886
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Grabacion de microcontroladores_pic
Grabacion de microcontroladores_picGrabacion de microcontroladores_pic
Grabacion de microcontroladores_pic
 
Unidad 2 ensamblador
Unidad 2   ensambladorUnidad 2   ensamblador
Unidad 2 ensamblador
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladore
 
Trabajo echo
Trabajo echoTrabajo echo
Trabajo echo
 
El microprocesador
El microprocesadorEl microprocesador
El microprocesador
 

Recently uploaded

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 

Recently uploaded (10)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Informe grupo cronos

  • 1. ESCUELA POLITECNICA NACIONAL SISTEMAS MICROPROCESADOS TEMA: IMPLEMENTACION DEL JUEGO DE TRES EN RAYA CON EL MICROCONTROLADOR ATMEGA 164P INTEGRANTES: • Cevallos David • Chávez Ernesto • Simbaña Andres 3
  • 2. ÍNDICE 1. JUEGO DEL TRES EN RAYA 4 2. PANTALLA GLCD 5 3. DISEÑO DE SOFTWARE 12 4. CIRCUITO ESQUEMÁTICO 14 5. LISTADO DE MATERIALES 16 6. PROGRAMA DESARROLLADO 16 7. SIMULACIÓN DEL CIRCUITO 77 8. PARTE PRÁCTICA (IMPLEMENTACIÓN DEL CIRCUITO) 80 9. CONCLUSIONES 84 10. DIFICULTADES Y RECOMENDACIONES 84 11. BIBLIOGRAFÍA 85 4
  • 3. PROYECTO FINAL SISTEMAS MICROPROCESADOS El presente proyecto tiene como objetivo implementar un juego de tres en raya que permita jugar entre un jugador y la PC o entre dos jugadores, por medio de una pantalla LCD gráfica para visualizar el juego y pulsadores. 1. JUEGO DEL TRES EN RAYA El juego tres en línea es también conocido como tres en raya, juego del gato, tatetí, triqui, totito, tres en gallo, michi o la vieja, es un juego en el cual se necesita dos jugadores en el cual cada uno de ellos marca una señal diferente en los espacios de un tablero de 3x3 alternadamente (para el caso de nuestro proyecto los símbolos a utilizar son caritas felices y caritas tristes). Un jugador gana si consigue tener una línea de tres en sus símbolos: la línea puede ser horizontal, vertical o diagonal. Una partida ganada por un jugador cuyo símbolo es la “X”: También puede existir una partida que puede terminar en empato entre los dos jugadores: Hay que tener en cuenta que el juego perfecto termina en empate sin importar con qué juega el primer jugador. Este juego es practicado en su mayor parte por niños o jóvenes. La simplicidad del juego de tres en raya lo hace ideal y por ello sirve como herramienta pedagógica para enseñar conceptos de teoría de juegos y la rama de inteligencia artificial que se encarga de la búsqueda de árboles de juego. 5
  • 4. 2. PANTALLA GLCD Todas las posibilidades que ofrecen la mayoría de las pantallas LCD Gráficas que se utilizan van controladas por el microcontrolador T6963C de TOSHIBA que fue diseñado con el objetivo de controlar pantallas de cristal líquido de pequeño, mediano y gran tamaño. Es este chip el que recibe e interpreta todos los comandos que se le envían a la pantalla, ya sea desde un PC o un microcontrolador. MODELO DE LA PANTALLA A UTILIZARSE: JHD240128D RESOLUCIÓN: 240 pixels × 128 pixels. MICROCONTROLADOR QUE EMPLEA: T6963C de TOSHIBA. 2.1. CARACTERÍSTICAS TÉCNICAS 2.2. REGISTRO DE STATUS Debe ser chequeado antes de ejecutar un comando, un dato de 1 byte o un dato de 2 bytes, pues en caso de que el LCD esté ocupado ejecutando alguna acción, la nueva acción encomendada no se ejecutará. 6
  • 5. 2.3. PINES El modelo usado para el proyecto es la pantala JHD240128D cuya distribución de pines es la siguiente: 7
  • 6. 2.4. PROCEDIMIENTO PARA REALIZAR ACCIONES EN BASE A COMANDOS Veamos a continuación el procedimiento de envío de comandos. Para ello mostramos los diagramas correspondientes: a) Para escribir un comando. b) El caso de un comando que requiere un dato de 1 byte. 8
  • 7. c) El caso de un comando que requiere 2 datos de 1 byte cada uno. 2.5. MEMORIA V-RAM En modo single la memoria V-RAM se distribuye de la siguiente manera: 9
  • 8. Se puede configurar por software donde se desea que empiece cada sección de la memoria. 2.6. CG-ROM INTERNO (GENERADOR DE CARACTERES INTERNO) El T6963C cuenta con una memoria ROM donde se almacenan caracteres internos. A continuación se detallan estos caracteres: 10
  • 9. 2.7. RESUMEN DE COMANDOS DE PARA PODER SER UTILIZADA Para ejecutar una acción en primer lugar se envían los datos y luego el comando respectivo. 11
  • 10. 12
  • 11. En base a estos conceptos ya podemos trabajar sin problemas con la pantalla GLCD. 3. DISEÑO DE SOFTWARE . PROGRAMA PRINCIPAL JUEGO.ASM CONTROLA EL JUEGO LCD.ASM OPCIONESGRAFICAS.ASM JUGADOR.ASM Contiene subrutinas Contiene subrutinas Contiene subrutinas asociadas a la asociadas a los asociadas al juego de inicialización de la gráficos que se cada jugador: pantalla GLCD deben mostrar en la jugador 1 y jugador así como para pantalla conforme 2 o PC. Es decir se escribir comandos, avanza el juego, es implementa el escribir un dato de 1 decir aquí se código para verificar byte, escribir un dato implementa el la victoria de un de 2 bytes y verificar código para dibujar jugador la disponiblidad de los íconos, líneas, determinado, para la pantalla GLCD. mensajes, posicionar determinar un el cursor, borrar la empate, conversión a pantalla, etc. BCD de los resultados, ocupación de casillas, etc. 13
  • 12. LCD.ASM Subrutinas: 1. INICIALIZAR 2. CMD 3. DATO1 4. DATO2 5. STATUS OPCIONESGRAFICAS.ASM Subrutinas: 1. MENU 2. MENU1 3. BORRAR 4. HABILITAR_CURSOR 5. DESHABILITAR_CURSOR 6. DECODIFICAR_CURSOR 7. MOVER_IZQUIERDA 8. MOVER_DERECHA 9. SUBIR 10. BAJAR 11. POSICIONARCURSOR 12. BAJARSELECTOR 13. SUBIRSELECTOR 14. FORMARCARACTERES 15. MSJ_JGDVSPC 16. MSJ_JGDVSJGD 17. DIBUJARTABLERO 18. DIBUJARLINEA1 19. DIBUJARLINEA2 20. DIBUJARCARAFELIZ 21. DIBUJARCARATRISTE 22. DIBUJAR_CARA_J1 23. DIBUJAR_CARA_J2 24. LINEAHORIZONTAL 25. LINEAVERTICAL_CARAFELIZ 26. DIB_VER 27. LINEAVERTICAL_CARATRISTE 28. LINEADIAGONALIZQUIERDA_FELIZ 29. LINEADIAGONALIZQUIERDA_TRISTE 30. LINEADIAGONALDERECHA_FELIZ 31. LINEADIAGONALDERECHA_TRISTE 32. DIBUJARVICTORIA_J1 33. DIBUJARVICTORIA_J2 14
  • 13. JUGADOR.ASM Subrutinas: 1. COMPROBAR_VICTORIA_J1 2. COMPROBAR_VICTORIA_J2 3. MOSTRARVICJ1 4. MOSTRAREMP 5. MOSTRARVICJ2 6. COMPROBAR_CASILLA_J1 7. COMPROBAR_CASILLA_J2 8. BINTOBCD 9. DECOD 10. ENCERARCASILLAS 11. ENCERARPUNTAJES 12. HABILITARJ1 13. HABILITARJ2 14. INCREMENTAR_VICTORIA_J1 15. INCREMENTAR_EMPATE 16. INCREMENTAR_VICTORIA_J2 17. ESPERA 18. ESPERA2 19. TURNO_J1 20. TURNO_J2 21. TURNO_PC 22. JUGAR_PC 23. GANAR_PC 24. CONTAR 25. VERIFICAR 26. IMPEDIRGANAR 27. SCONTAR 28. SVERIFICAR 29. PONER_PC 4. CIRCUITO ESQUEMÁTICO El circuito esquemático es el que se muestra en la figura. 15
  • 14. Descripción El pórtico A es usado para controlar las señales de control de la pantalla GLCD de la siguiente manera: PA0: CD (escribir comandos o datos) PA1: RD (para leer) PA2: WR (para escribir) PA3: CE (chip enable) PA4: RESET Los 8 pines del pórtico C son usados para los datos que se le entregarán al GLCD. PC0: D0 PC1: D1 PC2: D2 PC3: D3 PC4: D4 PC5: D5 16
  • 15. PC6: D6 PC7: D7 PC8: D8 El pórtico D se utiliza para controlar los movimientos del jugador 1 como se muestra a continuación: PD0: Subir PD1: Bajar PD2: Derecha PD3: Izquierda PD4: Seleccionar El pórtico B se utiliza para controlar los movimientos del jugador 2 como se muestra a continuación: PB0: Subir PB1: Bajar PB2: Derecha PB3: Izquierda PB4: Seleccionar 5. LISTADO DE MATERIALES • 1 Protoboard. • 1 Pantalla GLCD 240x128 pixels que opere con el microcontrolador TOSHIBA T6963C. • Un microcontrolador ATMEGA 164P. • 11 pulsadores normalmente abiertos. • 10 capacitores 0,1 uF. • 1 capacitor de 10 nF. • Estaño. • Pasta para soldar. • Cautín. • Alambre para conecciones. • 1 Potenciômetro de 50 KΩ . • 1 resistencia de 470 Ω . 6. PROGRAMA DESARROLLADO ARCHIVO JUEGO.ASM .NOLIST .INCLUDE "m164pdef.inc" .LIST .DEF AUX1=R16 ;REGISTROS AUXILIARES PARA OPERACIONES .DEF AUX2=R17 .DEF AUX3=R18 17
  • 16. .DEF AUX4=R19 .DEF AUX5=R20 . .DEF PANTALLA=R21 ;0 MENU 1 MENU1 2 JUEGO .DEF MODO_JUEGO=R22 ;0 JGD VS PC 1 JGD VS JGD .DEF MODO=R23 ;INDICA EL MODO DE VICTORIA .DEF ICONO_J1=R24 ;0 CARA FELIZ 1 CARA TRISTE .DEF CURSOR=R25 ;INDICA LA CASILLA A OCUPARSE .DSEG POSICION0: .BYTE 1 POSICION1: .BYTE 1 POSICION2: .BYTE 1 POSICION3: .BYTE 1 POSICION4: .BYTE 1 POSICION5: .BYTE 1 POSICION6: .BYTE 1 POSICION7: .BYTE 1 POSICION8: .BYTE 1 VICJ1: .BYTE 1 EMP: .BYTE 1 VICJ2: .BYTE 1 VIC_J1_MSB: .BYTE 1 VIC_J1_LSB: .BYTE 1 EMP_MSB: .BYTE 1 EMP_LSB: .BYTE 1 VIC_J2_MSB: .BYTE 1 VIC_J2_LSB: .BYTE 1 .CSEG RJMP PROGRAMA .ORG $0A RJMP JUGADOR2 .ORG $0E RJMP JUGADOR1 PROGRAMA: LDI AUX1, LOW(RAMEND) ;INICIALIZACIÓN DEL STACK POINTER OUT SPL,AUX1 LDI AUX1, HIGH(RAMEND) OUT SPH, AUX1 LDI AUX1,$FF ;CONFIGURACIÓN DE LOS PÓRTICOS DE SALIDA 18
  • 17. OUT DDRA,AUX1 OUT DDRC,AUX1 ;ACTIVACIÓN RESISTENCIAS DE PULL-UP OUT PORTB,AUX1 OUT PORTD,AUX1 RCALL INICIALIZAR RCALL FORMARCARACTERES RCALL BORRAR RCALL MENU LDI PANTALLA,0 LDI MODO_JUEGO,0 LDI ICONO_J1,0 LDI AUX1,$08 ;HABILITA INT. PORTICO STS PCICR,AUX1 LDI AUX1,$12 STS PCMSK3,AUX1 LDI AUX1,$0F OUT PCIFR,AUX1 SEI ;HABILITACIÓN GLOBAL DE INTERRUPCIONES LOOP: CPI PANTALLA,0 BREQ LOOP CPI PANTALLA,0 BREQ LOOP RCALL BORRAR RCALL MENU1 LOOP1: CPI PANTALLA,1 BREQ LOOP1 CPI PANTALLA,1 BREQ LOOP1 ;----------------------------------------------------- RCALL BORRAR RCALL ENCERARPUNTAJES LDI PANTALLA,2 CPI MODO_JUEGO,0 BREQ JGDVSPC RJMP JGDVSJGD JGDVSPC: RCALL HABILITAR_CURSOR RCALL BORRAR RCALL DIBUJARTABLERO ;JUGADOR VS PC 19
  • 18. RCALL MSJ_JGDVSPC RCALL MOSTRARVICJ1 RCALL MOSTRAREMP RCALL MOSTRARVICJ2 RCALL ESCRIBIR_TURNO RCALL ENCERARCASILLAS LDI XL,0 PLAYER1: RCALL TURNO_J1 RCALL POSICIONARCURSOR RCALL HABILITARJ1 CLC BUCLE: BRCC BUCLE RCALL COMPROBAR_CASILLA_J1 BRCC BUCLE RCALL DIBUJAR_CARA_J1 RCALL COMPROBAR_VICTORIA_J1 INC XL CPI MODO,8 BRNE GANAJ1 CPI XL, 9 BREQ JUEGOEMPATADO RJMP PCS GANAJ1: RCALL INCREMENTAR_VICTORIA_J1 RCALL MOSTRARVICJ1 RCALL DIBUJARVICTORIA_J1 RCALL ESPERA RJMP SEGUNDAMANO JUEGOEMPATADO: RCALL INCREMENTAR_EMPATE RCALL MOSTRAREMP RCALL ESPERA RJMP SEGUNDAMANO PCS: RCALL TURNO_PC RCALL POSICIONARCURSOR RCALL JUGAR_PC MOV CURSOR,R14 RCALL DIBUJAR_CARA_J2 RCALL ESPERA2 RCALL COMPROBAR_VICTORIA_J2 INC XL CPI MODO,8 BRNE GANAPC CPI XL,9 BREQ ESEMPATE 20
  • 19. RJMP PLAYER1 GANAPC: RCALL INCREMENTAR_VICTORIA_J2 RCALL MOSTRARVICJ2 RCALL DIBUJARVICTORIA_J2 RCALL ESPERA RJMP SEGUNDAMANO ESEMPATE: RCALL INCREMENTAR_EMPATE RCALL MOSTRAREMP RCALL ESPERA RJMP SEGUNDAMANO SEGUNDAMANO: RCALL DIBUJARTABLERO RCALL ENCERARCASILLAS RCALL HABILITAR_CURSOR LDI XL,0 SPCS: RCALL TURNO_PC RCALL JUGAR_PC MOV CURSOR,R14 RCALL DIBUJAR_CARA_J2 RCALL ESPERA2 RCALL COMPROBAR_VICTORIA_J2 INC XL CPI MODO,8 BRNE SGANAPC CPI XL,9 BREQ SESEMPATE RJMP SPLAYER1 SGANAPC: RCALL INCREMENTAR_VICTORIA_J2 RCALL MOSTRARVICJ2 RCALL DIBUJARVICTORIA_J2 RCALL ESPERA RJMP JGDVSPC SESEMPATE: RCALL INCREMENTAR_EMPATE RCALL MOSTRAREMP RCALL ESPERA RJMP JGDVSPC SPLAYER1: RCALL TURNO_J1 RCALL POSICIONARCURSOR RCALL HABILITARJ1 CLC 21
  • 20. SBUCLE: BRCC SBUCLE RCALL COMPROBAR_CASILLA_J1 BRCC SBUCLE RCALL DIBUJAR_CARA_J1 RCALL COMPROBAR_VICTORIA_J1 INC XL CPI MODO,8 BRNE SGANAJ1 CPI XL, 9 BREQ SJUEGOEMPATADO RJMP SPCS SGANAJ1: RCALL INCREMENTAR_VICTORIA_J1 RCALL MOSTRARVICJ1 RCALL DIBUJARVICTORIA_J1 RCALL ESPERA RJMP JGDVSPC SJUEGOEMPATADO: RCALL INCREMENTAR_EMPATE RCALL MOSTRAREMP RCALL ESPERA RJMP JGDVSPC ;------------------------------------------------------------------------------------------------- JGDVSJGD: RCALL HABILITAR_CURSOR RCALL BORRAR RCALL DIBUJARTABLERO ;JUGADOR VS JUGADOR RCALL MSJ_JGDVSJGD RCALL MOSTRARVICJ1 RCALL MOSTRAREMP RCALL MOSTRARVICJ2 RCALL ESCRIBIR_TURNO RCALL ENCERARCASILLAS LDI XL,0 J1: RCALL TURNO_J1 RCALL POSICIONARCURSOR RCALL HABILITARJ1 CLC LAZO: BRCC LAZO RCALL COMPROBAR_CASILLA_J1 BRCC LAZO RCALL DIBUJAR_CARA_J1 RCALL COMPROBAR_VICTORIA_J1 INC XL CPI MODO,8 22
  • 21. BRNE VICTORIAJ1 CPI XL,9 BREQ EMPATE RJMP J2 VICTORIAJ1: RCALL INCREMENTAR_VICTORIA_J1 RCALL MOSTRARVICJ1 RCALL DIBUJARVICTORIA_J1 RCALL ESPERA RJMP JGDVSJGD2 EMPATE: RCALL INCREMENTAR_EMPATE RCALL MOSTRAREMP RCALL ESPERA RJMP JGDVSJGD2 J2: RCALL TURNO_J2 RCALL POSICIONARCURSOR RCALL HABILITARJ2 CLC SLAZO: BRCC SLAZO RCALL COMPROBAR_CASILLA_J2 BRCC SLAZO RCALL DIBUJAR_CARA_J2 RCALL COMPROBAR_VICTORIA_J2 INC XL CPI MODO,8 BRNE VICTORIAJ2 CPI XL,9 BREQ SEMPATE RJMP J1 VICTORIAJ2: RCALL INCREMENTAR_VICTORIA_J2 RCALL MOSTRARVICJ2 RCALL DIBUJARVICTORIA_J2 RCALL ESPERA RJMP JGDVSJGD2 SEMPATE: RCALL INCREMENTAR_EMPATE RCALL MOSTRAREMP RCALL ESPERA RJMP JGDVSJGD2 JGDVSJGD2: RCALL DIBUJARTABLERO RCALL MSJ_JGDVSJGD 23
  • 22. RCALL ENCERARCASILLAS RCALL HABILITAR_CURSOR LDI XL,0 JGD2: RCALL TURNO_J2 RCALL POSICIONARCURSOR RCALL HABILITARJ2 CLC SLAZO2: BRCC SLAZO2 RCALL COMPROBAR_CASILLA_J2 BRCC SLAZO2 RCALL DIBUJAR_CARA_J2 RCALL COMPROBAR_VICTORIA_J2 INC XL CPI MODO,8 BRNE VICTORIAJ22 CPI XL,9 BREQ SEMPATE2 RJMP JGD1 VICTORIAJ22: RCALL INCREMENTAR_VICTORIA_J2 RCALL MOSTRARVICJ2 RCALL DIBUJARVICTORIA_J2 RCALL ESPERA RJMP JGDVSJGD SEMPATE2: RCALL INCREMENTAR_EMPATE RCALL MOSTRAREMP RCALL ESPERA RJMP JGDVSJGD JGD1: RCALL TURNO_J1 RCALL POSICIONARCURSOR RCALL HABILITARJ1 CLC LAZO2: BRCC LAZO2 RCALL COMPROBAR_CASILLA_J1 BRCC LAZO2 RCALL DIBUJAR_CARA_J1 RCALL COMPROBAR_VICTORIA_J1 INC XL CPI MODO,8 BRNE VICTORIAJ11 CPI XL,9 BREQ EMPATE1 24
  • 23. RJMP JGD2 VICTORIAJ11: RCALL INCREMENTAR_VICTORIA_J1 RCALL MOSTRARVICJ1 RCALL DIBUJARVICTORIA_J1 RCALL ESPERA RJMP JGDVSJGD EMPATE1: RCALL INCREMENTAR_EMPATE RCALL MOSTRAREMP RCALL ESPERA RJMP JGDVSJGD ;------------------------------------------------------------------------------------------------- JUGADOR2: ;ACCIONES PARA LOS PULSANTES DEL JUGADOR 2 IN AUX1,PINB ANDI AUX1,$1F CPI AUX1,$1E BRNE SOP2 RCALL SUBIR RCALL DECODIFICAR_CURSOR RJMP SAL_JUGADOR2 SOP2: CPI AUX1,$1D BRNE SOP3 RCALL BAJAR RCALL DECODIFICAR_CURSOR RJMP SAL_JUGADOR2 SOP3: CPI AUX1,$1B BRNE SOP4 RCALL MOVER_DERECHA RCALL DECODIFICAR_CURSOR RJMP SAL_JUGADOR2 SOP4: CPI AUX1,$17 BRNE SOP5 RCALL MOVER_IZQUIERDA RCALL DECODIFICAR_CURSOR RJMP SAL_JUGADOR1 SOP5: CPI AUX1,$0F BRNE SAL_JUGADOR2 SEC SAL_JUGADOR2: RETI 25
  • 24. ;------------------------------------------------------------------------------------------------- JUGADOR1: ;ACCIONES PARA LOS PULSANTES DEL JUGADOR 1 CPI PANTALLA,0 BRNE OP_MENU2 IN AUX1,PIND ANDI AUX1,$1F CPI AUX1,$1E BRNE COMP2 RCALL SUBIRSELECTOR LDI MODO_JUEGO,0 LDI AUX1,$03 LDS AUX2,PCMSK3 EOR AUX1,AUX2 STS PCMSK3,AUX1 RJMP SAL_JUGADOR1 COMP2: CPI AUX1,$1D BRNE COMP3 RCALL BAJARSELECTOR LDI MODO_JUEGO,1 LDI AUX1,$03 LDS AUX2,PCMSK3 EOR AUX1,AUX2 STS PCMSK3,AUX1 RJMP SAL_JUGADOR1 COMP3: CPI AUX1,$0F BRNE SAL_JUGADOR1 LDI PANTALLA,1 LDI AUX1,$12 STS PCMSK3,AUX1 RJMP SAL_JUGADOR1 OP_MENU2: CPI PANTALLA,1 BRNE JUGAR IN AUX1,PIND ANDI AUX1,$1F CPI AUX1,$1E BRNE COMPT2 RCALL SUBIRSELECTOR LDI ICONO_J1,0 LDI AUX1,$03 26
  • 25. LDS AUX2,PCMSK3 EOR AUX1,AUX2 STS PCMSK3,AUX1 RJMP SAL_JUGADOR1 COMPT2: CPI AUX1,$1D BRNE COMPT3 RCALL BAJARSELECTOR LDI ICONO_J1,1 LDI AUX1,$03 LDS AUX2,PCMSK3 EOR AUX1,AUX2 STS PCMSK3,AUX1 RJMP SAL_JUGADOR1 COMPT3: CPI AUX1,$0F BRNE SAL_JUGADOR1 LDI PANTALLA,2 LDI AUX1,$12 STS PCMSK3,AUX1 RJMP SAL_JUGADOR1 JUGAR: IN AUX1,PIND ANDI AUX1,$1F CPI AUX1,$1E BRNE OP2 RCALL SUBIR RCALL DECODIFICAR_CURSOR RJMP SAL_JUGADOR1 OP2: CPI AUX1,$1D BRNE OP3 RCALL BAJAR RCALL DECODIFICAR_CURSOR RJMP SAL_JUGADOR1 OP3: CPI AUX1,$1B BRNE OP4 RCALL MOVER_DERECHA RCALL DECODIFICAR_CURSOR RJMP SAL_JUGADOR1 OP4: CPI AUX1,$17 BRNE OP5 27
  • 26. RCALL MOVER_IZQUIERDA RCALL DECODIFICAR_CURSOR RJMP SAL_JUGADOR1 OP5: CPI AUX1,$0F BRNE SAL_JUGADOR1 SEC SAL_JUGADOR1: RETI ;------------------------------------------------------------------------------------------------- .INCLUDE "LCD.ASM" .INCLUDE "OPCIONESGRAFICAS.ASM" .INCLUDE "JUGADOR.ASM" .EXIT LCD.ASM ;MANEJO PANTALLA LCD .EQU CD=PA0 .EQU RD=PA1 .EQU WR=PA2 .EQU CE=PA3 .EQU RS=PA4 .EQU CONTROL=PORTA .EQU DATOS=PORTC INICIALIZAR: LDI AUX1,0b00000000 OUT CONTROL,AUX1 LDI AUX2,255 CLR R15 DL: DEC R15 BRNE DL DEC AUX2 BRNE DL SBI CONTROL,RS LDI AUX1,$00 ;TEXT HOME ADDRESS SET LDI AUX2,$00 RCALL DATO2 LDI AUX1,$40 RCALL CMD LDI AUX1,$1E ;TEXT AREA SET 28
  • 27. LDI AUX2,0 RCALL DATO2 LDI AUX1,$41 RCALL CMD LDI AUX1,$00 ;GRAPHIC HOME ADRESS SET LDI AUX2,$02 RCALL DATO2 LDI AUX1,$42 RCALL CMD LDI AUX1,$1E ;GRAPHIC AREA SET LDI AUX2,$00 RCALL DATO2 LDI AUX1,$43 RCALL CMD LDI AUX1,$80 ;MODE SET RCALL CMD LDI AUX1,$03 ;SET OFFSERET LDI AUX2,$00 RCALL DATO2 LDI AUX1,$22 RCALL CMD LDI AUX1,$08 ;CURSOR POINTER LDI AUX2,$06 RCALL DATO2 LDI AUX1,$21 RCALL CMD LDI AUX1,$94 ;DISPLAY MODE SET RCALL CMD LDI AUX1,$A0 ;CURSOR PATERN RCALL CMD RET ;---------------------------------------------------------------------------- CMD: RCALL STATUS ;ESCRIBIR UN COMANDO OUT DATOS,AUX1 LDI AUX3,0b00010011 OUT CONTROL,AUX3 NOP SBI CONTROL,CE RET DATO1: RCALL STATUS ;ESCRIBIR 1 BYTE DE DATO 29
  • 28. OUT DATOS,AUX1 LDI AUX3,0b00010010 OUT CONTROL,AUX3 NOP SBI CONTROL,CE RET DATO2: RCALL STATUS ;ESCRIBIR 2 BYTES DE DATOS OUT DATOS,AUX1 LDI AUX3,0b00010010 OUT CONTROL,AUX3 NOP SBI CONTROL,CE RCALL STATUS OUT DATOS,AUX2 LDI AUX3,0b00010010 OUT CONTROL,AUX3 NOP SBI CONTROL,CE RET STATUS: PUSH AUX1 ;VERIFICA EL ESTADO DEL LCD LDI AUX1,0b00010101 OUT CONTROL,AUX1 LDI AUX1,0 OUT DDRC,AUX1 BUSY: CBI DATOS,CE NOP IN AUX1,PINC SBI CONTROL,CE SBRS AUX1,0 RJMP BUSY SBRS AUX1,1 RJMP BUSY LDI AUX1,$FF OUT DDRC,AUX1 POP AUX1 RET OPCIONESGRAFICAS.ASM ;------------------------------------------------------------------------------------------------- MENU: ;MENU PRINCIPAL LDI ZL,LOW(TBMENU<<1) LDI ZH,HIGH(TBMENU<<1) LDI AUX1,$81 LDI AUX2,$00 30
  • 29. RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,12 LOOPMENU: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPMENU LDI AUX1,$F8 LDI AUX2,$00 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,12 LOOPMENU1: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPMENU1 LDI AUX1,$54 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,10 LOOPMENU2: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPMENU2 RET ;------------------------------------------------------------------------------------------------- MENU1: ;MENU DESPUES DEL PRINCIPAL LDI ZL,LOW(TBMENU1<<1) LDI ZH,HIGH(TBMENU1<<1) LDI AUX1,$83 31
  • 30. LDI AUX2,$00 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,10 LOOPMENU_1: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPMENU_1 LDI AUX1,$F8 LDI AUX2,$00 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,12 LOOPMENU_2: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPMENU_2 LDI AUX1,$54 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,11 LOOPMENU_3: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPMENU_3 RET ;------------------------------------------------------------------------------------------------- BORRAR: ;BORRA LA PANTALLA LDI AUX1,$00 LDI AUX2,$00 32
  • 31. RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,255 LOOPERASE: LDI AUX1,$00 RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPERASE LDI AUX1,$F0 LDI AUX2,$00 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,255 LOOPERASE2: LDI AUX1,$00 RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPERASE2 RET ;------------------------------------------------------------------------------------------------- HABILITAR_CURSOR: ;HABILITA LA OPCIÓN DE PARPADEO DEL CURSOR LDI AUX1,$97 ;DISPLAY MODE SET RCALL CMD RET ;-------------------------------------------------------------------------------------------------- DESHABILITAR_CURSOR: ;DESHABILITA LA OPCIÓN DE PARPADEO ;DEL CURSOR LDI AUX1,$94 RCALL CMD RET ;-------------------------------------------------------------------------------------------------- DECODIFICAR_CURSOR: ;DA LA DIRECCIÓN DEL CURSOR EN ;LOS REGISTROS AUX1 Y AUX2 ;Y UBICA EL CURSOR EN ESA DIRECCIÓN COM1: CPI CURSOR,0 BRNE COM2 LDI AUX1,$07 LDI AUX2,$02 RJMP SALIR 33
  • 32. COM2: CPI CURSOR,1 BRNE COM3 LDI AUX1,$0B LDI AUX2,$02 RJMP SALIR COM3: CPI CURSOR,2 BRNE COM4 LDI AUX1,$0F LDI AUX2,$02 RJMP SALIR COM4: CPI CURSOR,3 BRNE COM5 LDI AUX1,$07 LDI AUX2,$06 RJMP SALIR COM5: CPI CURSOR,4 BRNE COM6 LDI AUX1,$0B LDI AUX2,$06 RJMP SALIR COM6: CPI CURSOR,5 BRNE COM7 LDI AUX1,$0F LDI AUX2,$06 RJMP SALIR COM7: CPI CURSOR,6 BRNE COM8 LDI AUX1,$07 LDI AUX2,$0A RJMP SALIR COM8: CPI CURSOR,7 BRNE COM9 LDI AUX1,$0B LDI AUX2,$0A RJMP SALIR COM9: LDI AUX1,$0F LDI AUX2,$0A SALIR: RCALL DATO2 LDI AUX1,$21 RCALL CMD RET ;------------------------------------------------------------------------------------------------- 34
  • 33. MOVER_IZQUIERDA: ;MUEVE UNA POSICIÓN A LA IZQUIERDA EL ;CURSOR CPI CURSOR,0 BRNE IZ2 LDI CURSOR,2 RJMP SALIR_IZ IZ2: CPI CURSOR,3 BRNE IZ3 LDI CURSOR,5 RJMP SALIR_IZ IZ3: CPI CURSOR,6 BRNE IZ4 LDI CURSOR,8 RJMP SALIR_IZ IZ4: DEC CURSOR SALIR_IZ: RET ;------------------------------------------------------------------------------------------------- MOVER_DERECHA: ;MUEVE UNA POSICIÓN A LA DERECHA EL ;CURSOR CPI CURSOR,2 BRNE DR2 LDI CURSOR,0 RJMP SALIR_DR DR2: CPI CURSOR,5 BRNE DR3 LDI CURSOR,3 RJMP SALIR_DR DR3: CPI CURSOR,8 BRNE DR4 LDI CURSOR,6 RJMP SALIR_DR DR4: INC CURSOR SALIR_DR: RET ;------------------------------------------------------------------------------------------------- SUBIR: ;SUBE UNA POSICIÓN EL CURSOR CPI CURSOR,0 BRNE UP2 LDI CURSOR,6 RJMP SALIR_UP 35
  • 34. UP2: CPI CURSOR,1 BRNE UP3 LDI CURSOR,7 RJMP SALIR_UP UP3: CPI CURSOR,2 BRNE UP4 LDI CURSOR,8 RJMP SALIR_UP UP4: SUBI CURSOR,3 SALIR_UP: RET ;------------------------------------------------------------------------------------------------- BAJAR: ;BAJA UNA POSICIÓN EL CURSOR CPI CURSOR,6 BRNE DW2 LDI CURSOR,0 RJMP SALIR_UP DW2: CPI CURSOR,7 BRNE DW3 LDI CURSOR,1 RJMP SALIR_UP DW3: CPI CURSOR,8 BRNE DW4 LDI CURSOR,2 RJMP SALIR_UP DW4: LDI AUX1,3 ADD CURSOR,AUX1 SALIR_DW: RET ;------------------------------------------------------------------------------------------------- POSICIONARCURSOR: ;UBICA EL CURSOR EN LOCALIDAD VACÍA PARA ;QUE JUEGUE UN JUGADOR LDS AUX1,POSICION4 CPI AUX1,0 BRNE POS2 LDI CURSOR,4 ;DAMOS PRIORIDAD A LA CASILLA ;CENTRAL RCALL DECODIFICAR_CURSOR RJMP SALIR_POS 36
  • 35. POS2: LDI YL, LOW(POSICION0) ;EN CASO DE ESTAR UBICADA LA ;CASILLA CENTRAL LDI YH, HIGH(POSICION0) ;BUSCAMOS UNA VACIA LDI CURSOR,0 COMP: LD AUX1,Y+ INC CURSOR CPI AUX1,0 BRNE COMP DEC CURSOR RCALL DECODIFICAR_CURSOR SALIR_POS: RET ;------------------------------------------------------------------------------------------------- BAJARSELECTOR: ;BAJA EL SELECTOR LDI AUX1,$F8 ;BORRAMOS EL CURSOR ARRIBA LDI AUX2,$00 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX1,$00 RCALL DATO1 LDI AUX1,$C0 RCALL CMD LDI AUX1,$52 ;PONEMOS EL CURSOR ABAJO LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX1,$80 RCALL DATO1 LDI AUX1,$C0 RCALL CMD RET ;------------------------------------------------------------------------------------------------- SUBIRSELECTOR: ;SUBE EL SELECTOR LDI AUX1,$52 ;BORRAMOS EL CURSOR ABAJO LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX1,$00 37
  • 36. RCALL DATO1 LDI AUX1,$C0 RCALL CMD LDI AUX1,$F8 ;PONEMOS EL CURSOR ABAJO LDI AUX2,$00 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX1,$80 RCALL DATO1 LDI AUX1,$C0 RCALL CMD RET ;------------------------------------------------------------------------------------------------- FORMARCARACTERES: ;GENERA LOS CARACTERES PARA LA CG-RAM LDI AUX1,$00 LDI AUX2,$1C RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI ZL,LOW(CARACTER<<1) LDI ZH, HIGH(CARACTER<<1) LDI AUX2,208 LOOPSEL: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPSEL RET ;------------------------------------------------------------------------------------------------- MSJ_JGDVSPC: ;MENSAJE JUGADOR VS PC LDI AUX1,$89 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI ZL, LOW(TB_JGDVSPC<<1) LDI ZH, HIGH(TB_JGDVSPC<<1) 38
  • 37. LDI AUX2,22 LOOPM1: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPM1 RET ;------------------------------------------------------------------------------------------------- MSJ_JGDVSJGD: ;MENSAJE JUGADOR1 EMPATE JUGADOR2 LDI AUX1,$89 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI ZL, LOW(TB_JGDVSJGD<<1) LDI ZH, HIGH(TB_JGDVSJGD<<1) LDI AUX2,24 LOOPM2: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE LOOPM2 RET ;------------------------------------------------------------------------------------------------- ESCRIBIR_TURNO: LDI AUX1,$E9 LDI AUX2,$00 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI ZL,LOW(TURN<<1) LDI ZH,HIGH(TURN<<1) LDI AUX2,5 REPIT: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 39
  • 38. BRNE REPIT RET ;------------------------------------------------------------------------------------------------- DIBUJARTABLERO: ;DIBUJA EL TABLERO EN LA PANTALLA LDI AUX1,$06 LDI AUX2,$00 RCALL DIBUJARLINEA1 LDI AUX1,$24 RCALL DIBUJARLINEA1 LDI AUX1,$42 RCALL DIBUJARLINEA1 LDI AUX1,$60 RCALL DIBUJARLINEA2 LDI AUX1,$7E RCALL DIBUJARLINEA1 LDI AUX1,$9C RCALL DIBUJARLINEA1 LDI AUX1,$BA RCALL DIBUJARLINEA1 LDI AUX1,$D8 RCALL DIBUJARLINEA2 LDI AUX1,$F6 LDI AUX2,$00 RCALL DIBUJARLINEA1 LDI AUX1,$14 LDI AUX2,$01 RCALL DIBUJARLINEA1 LDI AUX1,$32 LDI AUX2,$01 RCALL DIBUJARLINEA1 LDI AUX1,$50 LDI AUX2,$01 RCALL DIBUJARLINEA1 RET ;------------------------------------------------------------------------------------------------- DIBUJARLINEA1: ;SUBRUTINA PARA DIBUJAR PRIMER TIPO DE ;LINEA DEL TABLERO PUSH AUX1 PUSH AUX2 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,12 LDI ZL,LOW(TABLERO<<1) 40
  • 39. LDI ZH,HIGH(TABLERO<<1) REP: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE REP POP AUX2 POP AUX1 RET ;------------------------------------------------------------------------------------------------- DIBUJARLINEA2: ;SUBRUTINA PARA DIBUJAR SEGUNDO TIPO DE ;LINEA DEL TABLERO PUSH AUX1 PUSH AUX2 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX2,12 LDI ZL,LOW(TABLERO1<<1) LDI ZH,HIGH(TABLERO1<<1) REP1: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE REP1 POP AUX2 POP AUX1 RET ;------------------------------------------------------------------------------------------------- DIBUJARCARAFELIZ: ;DIBUJA UNA CARA FELIZ EN UNA POSICION ;DADA POR CURSOR C1: CPI CURSOR,0 BRNE C2 LDI AUX1,$25 LDI AUX2,$00 RJMP GRAFICAR C2: CPI CURSOR,1 BRNE C3 LDI AUX1,$29 LDI AUX2,$00 RJMP GRAFICAR C3: CPI CURSOR,2 41
  • 40. BRNE C4 LDI AUX1,$2D LDI AUX2,$00 RJMP GRAFICAR C4: CPI CURSOR,3 BRNE C5 LDI AUX1,$9D LDI AUX2,$00 RJMP GRAFICAR C5: CPI CURSOR,4 BRNE C6 LDI AUX1,$A1 LDI AUX2,$00 RJMP GRAFICAR C6: CPI CURSOR,5 BRNE C7 LDI AUX1,$A5 LDI AUX2,$00 RJMP GRAFICAR C7: CPI CURSOR,6 BRNE C8 LDI AUX1,$15 LDI AUX2,$01 RJMP GRAFICAR C8: CPI CURSOR,7 BRNE C9 LDI AUX1,$19 LDI AUX2,$01 RJMP GRAFICAR C9: LDI AUX1,$1D LDI AUX2,$01 GRAFICAR: LDI ZL,LOW(TB_CARAFELIZ<<1) LDI ZH, HIGH(TB_CARAFELIZ<<1) PUSH AUX1 42
  • 41. RCALL DATO2 LDI AUX1,$24 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD POP AUX1 PUSH AUX3 LDI AUX3,$1E ADD AUX1,AUX3 LDI AUX3,0 ADC AUX2,AUX3 RCALL DATO2 LDI AUX1,$24 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD POP AUX3 RET ;------------------------------------------------------------------------------------------------- DIBUJARCARATRISTE: ;DIBUJA UNA CARA TRISTE EN UNA POSICION ;DADA POR CURSOR D1: CPI CURSOR,0 BRNE D2 LDI AUX1,$25 LDI AUX2,$00 RJMP GRAFICAR1 D2: CPI CURSOR,1 BRNE D3 43
  • 42. LDI AUX1,$29 LDI AUX2,$00 RJMP GRAFICAR1 D3: CPI CURSOR,2 BRNE D4 LDI AUX1,$2D LDI AUX2,$00 RJMP GRAFICAR1 D4: CPI CURSOR,3 BRNE D5 LDI AUX1,$9D LDI AUX2,$00 RJMP GRAFICAR1 D5: CPI CURSOR,4 BRNE D6 LDI AUX1,$A1 LDI AUX2,$00 RJMP GRAFICAR1 D6: CPI CURSOR,5 BRNE D7 LDI AUX1,$A5 LDI AUX2,$00 RJMP GRAFICAR1 D7: CPI CURSOR,6 BRNE D8 LDI AUX1,$15 LDI AUX2,$01 RJMP GRAFICAR1 D8: CPI CURSOR,7 BRNE D9 LDI AUX1,$19 LDI AUX2,$01 RJMP GRAFICAR1 D9: LDI AUX1,$1D LDI AUX2,$01 GRAFICAR1: 44
  • 43. LDI ZL,LOW(TB_CARATRISTE<<1) LDI ZH, HIGH(TB_CARATRISTE<<1) PUSH AUX1 RCALL DATO2 LDI AUX1,$24 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD POP AUX1 PUSH AUX3 LDI AUX3,$1E ADD AUX1,AUX3 LDI AUX3,0 ADC AUX2,AUX3 RCALL DATO2 LDI AUX1,$24 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD POP AUX3 RET ;------------------------------------------------------------------------------------------------- DIBUJAR_CARA_J1: ;DIBUJA UNA CARA TRISTE O FELIZ PARA ;EL JUGADOR 1 CPI ICONO_J1,0 BRNE TRIS RCALL DIBUJARCARAFELIZ RJMP FIN_DIBJ1 TRIS: RCALL DIBUJARCARATRISTE 45
  • 44. FIN_DIBJ1: RET ;------------------------------------------------------------------------------------------------- DIBUJAR_CARA_J2: ;DIBUJA UNA CARA TRISTE O FELIZ PARA ;EL JUGADOR 2 CPI ICONO_J1,0 BRNE FELIZ RCALL DIBUJARCARATRISTE RJMP FIN_DIBJ2 FELIZ: RCALL DIBUJARCARAFELIZ FIN_DIBJ2: RET ;------------------------------------------------------------------------------------------------- LINEAHORIZONTAL: ;DIBUJA UNA LINEA HORIZONTAL PARA ;MOSTRAR VICTORIA EN HORIZONTAL RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI ZL,LOW(TB_LINEAHORIZONTAL<<1) LDI ZH,HIGH(TB_LINEAHORIZONTAL<<1) LDI AUX2,12 REPLH: LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD DEC AUX2 BRNE REPLH RET ;------------------------------------------------------------------------------------------------- LINEAVERTICAL_CARAFELIZ: LDI ZL,LOW(TB_LINEAVERTICALCF<<1) LDI ZH,HIGH(TB_LINEAVERTICALCF<<1) LDI AUX4,12 CLR R15 REPVCF: PUSH AUX2 RCALL DIB_VER LDI AUX2,$1E ADD AUX1,AUX2 POP AUX2 ADC AUX2,R15 DEC AUX4 BRNE REPVCF RET 46
  • 45. ;------------------------------------------------------------------------------------------------- DIB_VER: PUSH AUX1 RCALL DATO2 LDI AUX1,$24 RCALL CMD LPM AUX1,Z+ RCALL DATO1 LDI AUX1,$C0 RCALL CMD POP AUX1 RET ;------------------------------------------------------------------------------------------------- LINEAVERTICAL_CARATRISTE: LDI ZL,LOW(TB_LINEAVERTICALCT<<1) LDI ZH,HIGH(TB_LINEAVERTICALCT<<1) LDI AUX4,12 CLR R15 REPVCT: PUSH AUX2 RCALL DIB_VER LDI AUX2,$1E ADD AUX1,AUX2 POP AUX2 ADC AUX2,R15 DEC AUX4 BRNE REPVCT RET ;------------------------------------------------------------------------------------------------- LINEADIAGONALIZQUIERDA_FELIZ: LDI ZL,LOW(TB_DIAGONALIZQUIERDA_FELIZ<<1) LDI ZH,HIGH(TB_DIAGONALIZQUIERDA_FELIZ<<1) LDI AUX1,$06 LDI AUX2,$00 LDI AUX4,12 CLR R15 REPLDIF: PUSH AUX2 RCALL DIB_VER LDI AUX2,$1F ADD AUX1,AUX2 POP AUX2 ADC AUX2,R15 DEC AUX4 BRNE REPLDIF RET ;------------------------------------------------------------------------------------------------- 47
  • 46. LINEADIAGONALIZQUIERDA_TRISTE: LDI ZL,LOW(TB_DIAGONALIZQUIERDA_TRISTE<<1) LDI ZH,HIGH(TB_DIAGONALIZQUIERDA_TRISTE<<1) LDI AUX1,$06 LDI AUX2,$00 LDI AUX4,12 CLR R15 REPLDIT: PUSH AUX2 RCALL DIB_VER LDI AUX2,$1F ADD AUX1,AUX2 POP AUX2 ADC AUX2,R15 DEC AUX4 BRNE REPLDIT RET ;------------------------------------------------------------------------------------------------- LINEADIAGONALDERECHA_FELIZ: LDI ZL,LOW(TB_DIAGONALDERECHA_FELIZ<<1) LDI ZH,HIGH(TB_DIAGONALDERECHA_FELIZ<<1) LDI AUX1,$11 LDI AUX2,$00 LDI AUX4,12 CLR R15 REPLDDF: PUSH AUX2 RCALL DIB_VER LDI AUX2,$1D ADD AUX1,AUX2 POP AUX2 ADC AUX2,R15 DEC AUX4 BRNE REPLDDF RET ;------------------------------------------------------------------------------------------------- LINEADIAGONALDERECHA_TRISTE: LDI ZL,LOW(TB_DIAGONALDERECHA_TRISTE<<1) LDI ZH,HIGH(TB_DIAGONALDERECHA_TRISTE<<1) LDI AUX1,$11 LDI AUX2,$00 LDI AUX4,12 CLR R15 REPLDDT: PUSH AUX2 RCALL DIB_VER LDI AUX2,$1D ADD AUX1,AUX2 POP AUX2 48
  • 47. ADC AUX2,R15 DEC AUX4 BRNE REPLDDT RET ;------------------------------------------------------------------------------------------------- DIBUJARVICTORIA_J1: ;DIBUJA LA VICTORIA DEL JUGADOR J1 CPI MODO,0 BRNE DB2 LDI AUX1,$24 LDI AUX2,0 RCALL LINEAHORIZONTAL RJMP FINDIB DB2: CPI MODO,1 BRNE DB3 LDI AUX1,$9C LDI AUX2,0 RCALL LINEAHORIZONTAL RJMP FINDIB DB3: CPI MODO,2 BRNE DB4 LDI AUX1,$14 LDI AUX2,$01 RCALL LINEAHORIZONTAL RJMP FINDIB ;-------------------------- DB4: CPI ICONO_J1,0 BRNE DB4T CPI MODO,3 BRNE DB5 LDI AUX1,$07 LDI AUX2,0 RCALL LINEAVERTICAL_CARAFELIZ RJMP FINDIB DB5: CPI MODO,4 BRNE DB6 LDI AUX1,$0B LDI AUX2,0 RCALL LINEAVERTICAL_CARAFELIZ RJMP FINDIB DB6: CPI MODO,5 49
  • 48. BRNE DB7 LDI AUX1,$0F LDI AUX2,0 RCALL LINEAVERTICAL_CARAFELIZ RJMP FINDIB DB7: CPI MODO,6 BRNE DB8 RCALL LINEADIAGONALIZQUIERDA_FELIZ RJMP FINDIB DB8: CPI MODO,7 RCALL LINEADIAGONALDERECHA_FELIZ RJMP FINDIB ;--------------------------- DB4T: CPI MODO,3 BRNE DB5T LDI AUX1,$07 LDI AUX2,0 RCALL LINEAVERTICAL_CARATRISTE RJMP FINDIB DB5T: CPI MODO,4 BRNE DB6T LDI AUX1,$0B LDI AUX2,0 RCALL LINEAVERTICAL_CARATRISTE RJMP FINDIB DB6T: CPI MODO,5 BRNE DB7T LDI AUX1,$0F LDI AUX2,0 RCALL LINEAVERTICAL_CARATRISTE RJMP FINDIB DB7T: CPI MODO,6 BRNE DB8T RCALL LINEADIAGONALIZQUIERDA_TRISTE RJMP FINDIB DB8T: CPI MODO,7 RCALL LINEADIAGONALDERECHA_TRISTE FINDIB: RET ;------------------------------------------------------------------------------------------------- DIBUJARVICTORIA_J2: ;DIBUJA LA VICTORIA DEL JUGADOR J2 50
  • 49. CPI MODO,0 BRNE DBJ2 LDI AUX1,$24 LDI AUX2,0 RCALL LINEAHORIZONTAL RJMP FINDIB DBJ2: CPI MODO,1 BRNE DBJ3 LDI AUX1,$9C LDI AUX2,0 RCALL LINEAHORIZONTAL RJMP FINDIB DBJ3: CPI MODO,2 BRNE DBJ4 LDI AUX1,$14 LDI AUX2,$01 RCALL LINEAHORIZONTAL RJMP FINDIB ;-------------------------- DBJ4: CPI ICONO_J1,1 BRNE DBJ4T CPI MODO,3 BRNE DBJ5 LDI AUX1,$07 LDI AUX2,0 RCALL LINEAVERTICAL_CARAFELIZ RJMP FINDIBJ DBJ5: CPI MODO,4 BRNE DBJ6 LDI AUX1,$0B LDI AUX2,0 RCALL LINEAVERTICAL_CARAFELIZ RJMP FINDIBJ DBJ6: CPI MODO,5 BRNE DBJ7 LDI AUX1,$0F LDI AUX2,0 RCALL LINEAVERTICAL_CARAFELIZ RJMP FINDIBJ DBJ7: CPI MODO,6 BRNE DBJ8 RCALL LINEADIAGONALIZQUIERDA_FELIZ RJMP FINDIBJ 51
  • 50. DBJ8: CPI MODO,7 RCALL LINEADIAGONALDERECHA_FELIZ RJMP FINDIBJ ;--------------------------- DBJ4T: CPI MODO,3 BRNE DBJ5T LDI AUX1,$07 LDI AUX2,0 RCALL LINEAVERTICAL_CARATRISTE RJMP FINDIBJ DBJ5T: CPI MODO,4 BRNE DBJ6T LDI AUX1,$0B LDI AUX2,0 RCALL LINEAVERTICAL_CARATRISTE RJMP FINDIBJ DBJ6T: CPI MODO,5 BRNE DBJ7T LDI AUX1,$0F LDI AUX2,0 RCALL LINEAVERTICAL_CARATRISTE RJMP FINDIBJ DBJ7T: CPI MODO,6 BRNE DBJ8T RCALL LINEADIAGONALIZQUIERDA_TRISTE RJMP FINDIBJ DBJ8T: CPI MODO,7 RCALL LINEADIAGONALDERECHA_TRISTE FINDIBJ: RET ;------------------------------------------------------------------------------------------------- TBMENU: .DB $34,$32,$25,$33,$00,$25,$2E,$00,$32,$21,$39,$21 ;TRES EN RAYA .DB $80,$00,$2A,$27,$24,$00,$36,$33,$00,$30,$23,$00 ;> JGD VS PC .DB $2A,$27,$24,$00,$36,$33,$00,$2A,$27,$24 ; JGD VS JUG ;------------------------------------------------------------------------------------------------- TBMENU1: .DB $2A,$35,$27,$21,$24,$2F,$32,$00,$11,$00 ;JUGADOR 1 .DB $80,$00,$23,$21,$32,$21,$00,$26,$25,$2C,$29,$3A ;> CARA FELIZ .DB $23,$21,$32,$21,$00,$34,$32,$29,$33,$34,$25,$00 ; CARA TRISTE ;------------------------------------------------------------------------------------------------- CARACTER: 52
  • 51. .DB $C0,$F0,$FC,$FF,$FF,$FC,$F0,$C0 ;> $80 .DB $01,$01,$01,$01,$01,$01,$01,$01 ;LINEA VERTICAL $81 .DB $01,$01,$01,$01,$01,$01,$01,$FF ;LINEA VERTICAL AL ANGULO $82 .DB $00,$00,$00,$00,$00,$00,$00,$FF ;LINEA HORIZONTAL $83 .DB $E0,$10,$08,$04,$02,$62,$61,$01 ;PARTE SUPERIOR DERECHA CARA $84 .DB $07,$08,$10,$20,$40,$46,$86,$80 ;PARTE SUPERIOR IZQUIERDA CARA $85 .DB $01,$21,$22,$42,$84,$08,$10,$E0 ;PARTE INFERIOR DERECHA CARA FELIZ $86 .DB $80,$84,$44,$42,$21,$10,$08,$07 ;PARTE INFERIOR IZQUIERDA CARA FELIZ $87 .DB $01,$81,$42,$22,$24,$08,$10,$E0 ;PARTE INFERIOR DERECHA CARA TRISTE $88 .DB $80,$81,$42,$44,$24,$10,$08,$07 ;PARTE INFERIOR IZQUIERDA CARA TRISTE $89 .DB $07,$08,$10,$20,$40,$46,$86,$FF ;PARTE IZQUIERDA CARA TACHADA EN HORIZONTAL $8A .DB $E0,$10,$08,$04,$02,$62,$61,$FF ;PARTE DERECHA CARA TACHADA EN HORIZONTAL $8B .DB $07,$09,$11,$21,$41,$47,$87,$81 ;PARTE IZQUIERDA CARA TACHADA EN VERTICAL CF $8C .DB $81,$85,$45,$43,$21,$11,$09,$07 ;PARTE INFERIOR IZQUIERDA CARA TACHADA EN VERTICAL CF $8D .DB $81,$81,$43,$45,$25,$11,$09,$07 ;PARTE INFERIOR IZQUIERDA CARA TACHADA EN VERTICAL CF $8E .DB $80,$40,$20,$10,$08,$04,$02,$01 ;DIAGONAL IZQUIERDA $8F .DB $87,$48,$30,$30,$48,$46,$86,$81 ;CARA SUPERIOR IZQUIERDA CON LINEA DIAGONAL $90 53
  • 52. .DB $81,$61,$22,$52,$8C,$0C,$12,$E1 ;CARA FELIZ INFERIOR DERECHA CON DIAGONAL $91 .DB $81,$C1,$62,$32,$3C,$0C,$12,$E1 ;CARA TRISTE INFERIOR DERECHA CON DIAGONAL $92 .DB $81,$41,$21,$11,$09,$05,$03,$FF ;BORDE CON DIAGONAL IZQUIERDA $93 .DB $E1,$12,$0C,$0C,$12,$62,$61,$81 ;CARA SUPERIOR DERECHA CON LINEA DIAGONAL $94 .DB $81,$84,$44,$4A,$31,$30,$48,$87 ;CARA FELIZ INFERIOR IZQUIERDA CON DIAGONAL $95 .DB $81,$83,$46,$4E,$34,$30,$48,$87 ;CARA TRISTE INFERIOR IZQUIERDA CON DIAGONAL $96 .DB $01,$02,$04,$08,$10,$20,$40,$80 ;DIAGONAL DERECHA $97 .DB $01,$02,$04,$08,$10,$20,$40,$FF ;BORDE SUPERIOR CON DIAGONAL DERECHA $98 .DB $01,$03,$05,$09,$11,$21,$41,$81 ;BORDE INFERIOR CON DIAGONAL DERECHA $99 ;------------------------------------------------------------------------------------------------- TB_JGDVSPC: .DB $2A,$35,$27,$21,$24,$2F,$32,$00,$00,$25,$2D,$30,$21,$34,$25,$00 ;JGD EMP PC .DB $00,$00,$00,$30,$23,$00 ;------------------------------------------------------------------------------------------------- TB_JGDVSJGD: .DB $2A,$35,$27,$21,$24,$2F,$32,$11,$00,$25,$2D,$30,$21,$34,$25,$00 ;JGD1 EMP JGD2 .DB $2A,$35,$27,$21,$24,$2F,$32,$12 ;------------------------------------------------------------------------------------------------- TABLERO: .DB $00,$00,$00,$81,$00,$00,$00,$81,$00,$00,$00,$00 ;PARA DIBUJAR TABLERO TABLERO1: .DB $83,$83,$83,$82,$83,$83,$83,$82,$83,$83,$83,$83 ;------------------------------------------------------------------------------------------------- TURN: .DB $34,$35,$32,$2E,$2F,$00 ;------------------------------------------------------------------------------------------------- 54
  • 53. TB_CARAFELIZ: .DB $85,$84,$87,$86 ;TABLA PARA DIBUJAR LA CARA FELIZ ;------------------------------------------------------------------------------------------------- TB_CARATRISTE:.DB $85,$84,$89,$88 ;TABLA PARA DIBUJAR LA CARA TRISTE ;------------------------------------------------------------------------------------------------- TB_LINEAHORIZONTAL: .DB $83,$8A,$8B,$82,$83,$8A,$8B,$82,$83,$8A,$8B,$83 ;TABLA PARA CARAS HOR. CON LÍNEA ;------------------------------------------------------------------------------------------------- TB_LINEAVERTICALCF: .DB $81,$8C,$8D,$82,$81,$8C,$8D,$82,$81,$8C,$8D,$81 ;TABLA PARA CARAS VERT. CON LINEA ;------------------------------------------------------------------------------------------------- TB_LINEAVERTICALCT: .DB $81,$8C,$8E,$82,$81,$8C,$8E,$82,$81,$8C,$8E,$81 ;TABLA PARA CARAS VERT. CON LINEA ;------------------------------------------------------------------------------------------------- TB_DIAGONALIZQUIERDA_FELIZ: .DB $8F,$90,$91,$93,$8F,$90,$91,$93,$8F,$90,$91,$8F ;TABLA PARA CARAS DIAG. ;------------------------------------------------------------------------------------------------- TB_DIAGONALIZQUIERDA_TRISTE: .DB $8F,$90,$92,$93,$8F,$90,$92,$93,$8F,$90,$92,$8F ;TABLA PARA CARAS DIAG. ;------------------------------------------------------------------------------------------------- TB_DIAGONALDERECHA_FELIZ: .DB $97,$94,$95,$98,$99,$94,$95,$98,$99,$94,$95,$97 ;TABLA PARA CARAS DIAG. DERECHA ;------------------------------------------------------------------------------------------------- TB_DIAGONALDERECHA_TRISTE: .DB $97,$94,$96,$98,$99,$94,$96,$98,$99,$94,$96,$97 ;TABLA PARA CARAS DIAG. DERECHA ;------------------------------------------------------------------------------------------------- JUGADOR.ASM ;-------------------------------------------------------------------------------------------------- COMPROBAR_VICTORIA_J1: ;DETERMINA SI GANÓ EL JUGADOR 1 ;Y SU MODO DE VICTORIA ;EN EL REGISTRO MODO LDI AUX4,0 LDI AUX2,3 55
  • 54. LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) JREPETICION: LD AUX1,Y+ CPI AUX1,1 BRNE JSAL INC AUX4 JSAL: DEC AUX2 BRNE JREPETICION CPI AUX4,3 BRNE JVICT2 LDI MODO,0 RJMP JSALIDA JVICT2: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION3) LDI YH,HIGH(POSICION3) JREPETICION2: LD AUX1,Y+ CPI AUX1,1 BRNE JSAL2 INC AUX4 JSAL2: DEC AUX2 BRNE JREPETICION2 CPI AUX4,3 BRNE JVICT3 LDI MODO,1 RJMP JSALIDA JVICT3: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION6) LDI YH,HIGH(POSICION6) JREPETICION3: LD AUX1,Y+ CPI AUX1,1 BRNE JSAL3 INC AUX4 JSAL3: DEC AUX2 BRNE JREPETICION3 CPI AUX4,3 BRNE JVICT4 LDI MODO,2 RJMP JSALIDA 56
  • 55. JVICT4: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) JREPETICION4: LD AUX1,Y CPI AUX1,1 BRNE JSAL4 INC AUX4 JSAL4: LDI AUX5,3 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 BRNE JREPETICION4 CPI AUX4,3 BRNE JVICT5 LDI MODO,3 RJMP JSALIDA JVICT5: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION1) LDI YH,HIGH(POSICION1) JREPETICION5: LD AUX1,Y CPI AUX1,1 BRNE JSAL5 INC AUX4 JSAL5: LDI AUX5,3 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 BRNE JREPETICION5 CPI AUX4,3 BRNE JVICT6 LDI MODO,4 RJMP JSALIDA JVICT6: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION2) LDI YH,HIGH(POSICION2) JREPETICION6: LD AUX1,Y CPI AUX1,1 57
  • 56. BRNE JSAL6 INC AUX4 JSAL6: LDI AUX5,3 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 BRNE JREPETICION6 CPI AUX4,3 BRNE JVICT7 LDI MODO,5 RJMP JSALIDA JVICT7: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) JREPETICION7: LD AUX1,Y CPI AUX1,1 BRNE JSAL7 INC AUX4 JSAL7: LDI AUX5,4 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 BRNE JREPETICION7 CPI AUX4,3 BRNE JVICT8 LDI MODO,6 RJMP JSALIDA JVICT8: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION2) LDI YH,HIGH(POSICION2) JREPETICION8: LD AUX1,Y CPI AUX1,1 BRNE JSAL8 INC AUX4 JSAL8: LDI AUX5,2 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 58
  • 57. BRNE JREPETICION8 CPI AUX4,3 BRNE JNOGANADOR LDI MODO,7 RJMP SALIDA JNOGANADOR: LDI MODO,8 JSALIDA: RET ;-------------------------------------------------------------------------------------------------- COMPROBAR_VICTORIA_J2: ;DETERMINA SI GANÓ EL JUGADOR 2 Y SU ;MODO DE VICTORIA EN ;EL REGISTRO MODO LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) REPETICION: LD AUX1,Y+ CPI AUX1,2 BRNE SAL INC AUX4 SAL: DEC AUX2 BRNE REPETICION CPI AUX4,3 BRNE VICT2 LDI MODO,0 RJMP SALIDA VICT2: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION3) LDI YH,HIGH(POSICION3) REPETICION2: LD AUX1,Y+ CPI AUX1,2 BRNE SAL2 INC AUX4 SAL2: DEC AUX2 BRNE REPETICION2 CPI AUX4,3 BRNE VICT3 LDI MODO,1 RJMP SALIDA VICT3: LDI AUX4,0 LDI AUX2,3 59
  • 58. LDI YL,LOW(POSICION6) LDI YH,HIGH(POSICION6) REPETICION3: LD AUX1,Y+ CPI AUX1,2 BRNE SAL3 INC AUX4 SAL3: DEC AUX2 BRNE REPETICION3 CPI AUX4,3 BRNE VICT4 LDI MODO,2 RJMP SALIDA VICT4: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) REPETICION4: LD AUX1,Y CPI AUX1,2 BRNE SAL4 INC AUX4 SAL4: LDI AUX5,3 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 BRNE REPETICION4 CPI AUX4,3 BRNE VICT5 LDI MODO,3 RJMP SALIDA VICT5: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION1) LDI YH,HIGH(POSICION1) REPETICION5: LD AUX1,Y CPI AUX1,2 BRNE SAL5 INC AUX4 SAL5: LDI AUX5,3 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 60
  • 59. BRNE REPETICION5 CPI AUX4,3 BRNE VICT6 LDI MODO,4 RJMP SALIDA VICT6: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION2) LDI YH,HIGH(POSICION2) REPETICION6: LD AUX1,Y CPI AUX1,2 BRNE SAL6 INC AUX4 SAL6: LDI AUX5,3 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 BRNE REPETICION6 CPI AUX4,3 BRNE VICT7 LDI MODO,5 RJMP SALIDA VICT7: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) REPETICION7: LD AUX1,Y CPI AUX1,2 BRNE SAL7 INC AUX4 SAL7: LDI AUX5,4 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 BRNE REPETICION7 CPI AUX4,3 BRNE VICT8 LDI MODO,6 RJMP SALIDA 61
  • 60. VICT8: LDI AUX4,0 LDI AUX2,3 LDI YL,LOW(POSICION2) LDI YH,HIGH(POSICION2) REPETICION8: LD AUX1,Y CPI AUX1,2 BRNE SAL8 INC AUX4 SAL8: LDI AUX5,2 ADD YL,AUX5 LDI AUX5,0 ADC YH,AUX5 DEC AUX2 BRNE REPETICION8 CPI AUX4,3 BRNE NOGANADOR LDI MODO,7 RJMP SALIDA NOGANADOR: LDI MODO,8 SALIDA: RET ;-------------------------------------------------------------------------------------------------- MOSTRARVICJ1: ;SACA AL LCD EL NÚMERO DE PARTIDAS GANADAS POR EL JUGADOR 1 LDS AUX1,VICJ1 RCALL BINTOBCD STS VIC_J1_MSB,AUX2 STS VIC_J1_LSB,AUX4 LDI AUX1,$C8 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDS AUX1,VIC_J1_MSB RCALL DECOD RCALL DATO1 LDI AUX1,$C0 RCALL CMD LDS AUX1,VIC_J1_LSB RCALL DECOD RCALL DATO1 LDI AUX1,$C0 RCALL CMD RET 62
  • 61. ;-------------------------------------------------------------------------------------------------- MOSTRAREMP: ;SACA AL LCD EL NÚMERO DE PARTIDAS ;EMPATADAS LDS AUX1,EMP RCALL BINTOBCD STS EMP_MSB,AUX2 STS EMP_LSB,AUX4 LDI AUX1,$D0 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDS AUX1,EMP_MSB RCALL DECOD RCALL DATO1 LDI AUX1,$C0 RCALL CMD LDS AUX1,EMP_LSB RCALL DECOD RCALL DATO1 LDI AUX1,$C0 RCALL CMD RET ;-------------------------------------------------------------------------------------------------- MOSTRARVICJ2: ;SACA AL LCD EL NÚMERO DE PARTIDAS GANADAS ;POR EL JUGADOR 2 LDS AUX1,VICJ2 RCALL BINTOBCD STS VIC_J2_MSB,AUX2 STS VIC_J2_LSB,AUX4 LDI AUX1,$D8 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDS AUX1,VIC_J2_MSB RCALL DECOD RCALL DATO1 LDI AUX1,$C0 RCALL CMD LDS AUX1,VIC_J2_LSB RCALL DECOD RCALL DATO1 LDI AUX1,$C0 63
  • 62. RCALL CMD RET ;-------------------------------------------------------------------------------------------------- COMPROBAR_CASILLA_J1: ;COMPRUEBA LA DISPONIBILIDAD ;DE UNA CASILLA Y ALMACENA ;DATO EN CASO ;DE ESTAR LIBRE PARA EL JUGADOR 1 LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) ADD YL,CURSOR LDI AUX1,0 ADC YH,AUX1 LD AUX1,Y CPI AUX1,0 BRNE CC2 LDI AUX1,1 ST Y,AUX1 SEC ;BANDERA C EN 1 CUANDO LA CASILLA ESTA LIBRE Y ;SE COLOCA ÍCONO RJMP SAL_CC CC2: CLC ;BANDERA C EN 0 CUANDO LA CASILLA ESTA OCUPADA Y NO ;SE PUEDE COLOCAR ÍCONO SAL_CC: RET ;--------------------------------------------------------------------------------------------------- COMPROBAR_CASILLA_J2: ;COMPRUEBA LA DISPONIBILIDAD DE UNA ;CASILLA Y ALMACENA DATO EN CASO ;DE ESTAR LIBRE PARA EL JUGADOR 2 LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) ADD YL,CURSOR LDI AUX1,0 ADC YH,AUX1 LD AUX1,Y CPI AUX1,0 BRNE CC22 LDI AUX1,2 ST Y,AUX1 SEC ;BANDERA C EN 1 CUANDO LA CASILLA ESTA LIBRE Y ;SE COLOCA ÍCONO RJMP SAL_CC2 CC22: CLC ;BANDERA C EN 0 CUANDO LA CASILLA ESTA OCUPADA Y NO ;SE PUEDE COLOCAR ÍCONO 64
  • 63. SAL_CC2: RET ;--------------------------------------------------------------------------------------------------- BINTOBCD: ;TOMA EL VALOR BINARIO EN AUX1 Y LO ;CONVIERTE EN BDC - MSB AUX2 - LSB AUX4 LDI AUX2,0 REPET: SUBI AUX1,10 BRCS SALTO INC AUX2 RJMP REPET SALTO: LDI AUX4,10 ADD AUX1,AUX4 MOV AUX4,AUX1 RET ;-------------------------------------------------------------------------------------------------- DECOD: ;PONE EN AUX1 EL VALOR DEL CARACTER ;NUMERICO PARA MOSTRAR EN PANTALLA CPI AUX1,0 BRNE DC2 LDI AUX1,$10 RJMP SAL_DECOD DC2: CPI AUX1,1 BRNE DC3 LDI AUX1,$11 RJMP SAL_DECOD DC3: CPI AUX1,2 BRNE DC4 LDI AUX1,$12 RJMP SAL_DECOD DC4: CPI AUX1,3 BRNE DC5 LDI AUX1,$13 RJMP SAL_DECOD DC5: CPI AUX1,4 BRNE DC6 LDI AUX1,$14 RJMP SAL_DECOD DC6: CPI AUX1,5 BRNE DC7 LDI AUX1,$15 65
  • 64. RJMP SAL_DECOD DC7: CPI AUX1,6 BRNE DC8 LDI AUX1,$16 RJMP SAL_DECOD DC8: CPI AUX1,7 BRNE DC9 LDI AUX1,$17 RJMP SAL_DECOD DC9: CPI AUX1,8 BRNE DC10 LDI AUX1,$18 RJMP SAL_DECOD DC10: CPI AUX1,9 BRNE SAL_DECOD LDI AUX1,$19 SAL_DECOD: RET ;-------------------------------------------------------------------------------------------------- ENCERARCASILLAS: ;ENCERA LAS CASILLAS DEL TABLERO LDI AUX1,0 STS POSICION0,AUX1 STS POSICION1,AUX1 STS POSICION2,AUX1 STS POSICION3,AUX1 STS POSICION4,AUX1 STS POSICION5,AUX1 STS POSICION6,AUX1 STS POSICION7,AUX1 STS POSICION8,AUX1 RET ;-------------------------------------------------------------------------------------------------- ENCERARPUNTAJES: ;ENCERA LOS PUNTAJES DE LOS ;JUGADORES Y DE EMPATE LDI AUX1,0 STS VICJ1,AUX1 STS EMP,AUX1 STS VICJ2,AUX1 RET ;-------------------------------------------------------------------------------------------------- HABILITARJ1: ;HABILITA LAS INTERRUPCIONES PARA EL J1 LDI AUX1,$08 66
  • 65. STS PCICR,AUX1 LDI AUX1,$1F STS PCMSK3,AUX1 LDI AUX1,$08 OUT PCIFR, AUX1 SEI RET ;-------------------------------------------------------------------------------------------------- HABILITARJ2: ;HABILITA LAS INTERRUPCIONES PARA EL J2 LDI AUX1,$02 STS PCICR,AUX1 LDI AUX1,$1F STS PCMSK1,AUX1 LDI AUX1,$02 OUT PCIFR, AUX1 SEI RET ;-------------------------------------------------------------------------------------------------- INCREMENTAR_VICTORIA_J1: ;INCREMENTA VICTORIAS DE J1 LDS AUX1,VICJ1 INC AUX1 STS VICJ1,AUX1 RET ;-------------------------------------------------------------------------------------------------- INCREMENTAR_EMPATE: ;INCREMENTA EMPATES LDS AUX1,EMP INC AUX1 STS EMP,AUX1 RET ;-------------------------------------------------------------------------------------------------- INCREMENTAR_VICTORIA_J2: ;INCREMENTA VICTORIAS DE J2 LDS AUX1,VICJ2 INC AUX1 STS VICJ2,AUX1 RET ;------------------------------------------------------------------------------------------------- ESPERA: ;TIEMPO DE ESPERA LDI AUX1,255 ;255 LDI AUX2,70 CLR R15 ESP: DEC R15 BRNE ESP DEC AUX1 BRNE ESP 67
  • 66. DEC AUX2 BRNE ESP RET ;------------------------------------------------------------------------------------------------- ESPERA2: ;TIEMPO DE ESPERA 2 PARA PC LDI AUX2,20 CLR R15 ESP2: DEC R15 BRNE ESP DEC AUX2 BRNE ESP2 RET ;------------------------------------------------------------------------------------------------- TURNO_J1: ;INDICA TURNO PARA EL JUGADOR 1 LDI AUX1,$27 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX1,$2A RCALL DATO1 LDI AUX1,$C0 RCALL CMD LDI AUX1,$11 RCALL DATO1 LDI AUX1,$C0 RCALL CMD RET ;-------------------------------------------------------------------------------------------------- TURNO_J2: ;INDICA TURNO PARA EL JUGADOR 2 LDI AUX1,$27 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX1,$2A RCALL DATO1 LDI AUX1,$C0 RCALL CMD LDI AUX1,$12 RCALL DATO1 68
  • 67. LDI AUX1,$C0 RCALL CMD RET ;--------------------------------------------------------------------------------------------------- TURNO_PC: ;INDICA TURNO PARA PC LDI AUX1,$27 LDI AUX2,$01 RCALL DATO2 LDI AUX1,$24 RCALL CMD LDI AUX1,$30 RCALL DATO1 LDI AUX1,$C0 RCALL CMD LDI AUX1,$23 RCALL DATO1 LDI AUX1,$C0 RCALL CMD RET ;--------------------------------------------------------------------------------------------------- JUGAR_PC: CLC RCALL GANAR_PC BRCS PORFIN RCALL IMPEDIRGANAR BRCS PORFIN RCALL PONER_PC PORFIN: RET ;--------------------------------------------------------------------------------------------------- GANAR_PC: ;DEVUELVE EN R14 LA POSICION DEL CURSOR PUSH AUX4 PUSH AUX5 POSIBLIDAD1: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION0 LDI CURSOR,0 RCALL CONTAR LDS AUX1,POSICION1 LDI CURSOR,1 RCALL CONTAR LDS AUX1,POSICION2 LDI CURSOR,2 RCALL CONTAR RCALL VERIFICAR BRCC POSIBILIDAD2 69
  • 68. RJMP GO POSIBILIDAD2: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION3 LDI CURSOR,3 RCALL CONTAR LDS AUX1,POSICION4 LDI CURSOR,4 RCALL CONTAR LDS AUX1,POSICION5 LDI CURSOR,5 RCALL CONTAR RCALL VERIFICAR BRCC POSIBILIDAD3 RJMP GO POSIBILIDAD3: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION6 LDI CURSOR,6 RCALL CONTAR LDS AUX1,POSICION7 LDI CURSOR,7 RCALL CONTAR LDS AUX1,POSICION8 LDI CURSOR,8 RCALL CONTAR RCALL VERIFICAR BRCC POSIBILIDAD4 RJMP GO POSIBILIDAD4: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION0 LDI CURSOR,0 RCALL CONTAR LDS AUX1,POSICION3 LDI CURSOR,3 RCALL CONTAR LDS AUX1,POSICION6 LDI CURSOR,6 RCALL CONTAR RCALL VERIFICAR BRCC POSIBILIDAD5 RJMP GO 70
  • 69. POSIBILIDAD5: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION1 LDI CURSOR,1 RCALL CONTAR LDS AUX1,POSICION4 LDI CURSOR,4 RCALL CONTAR LDS AUX1,POSICION7 LDI CURSOR,7 RCALL CONTAR RCALL VERIFICAR BRCC POSIBILIDAD6 RJMP GO POSIBILIDAD6: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION2 LDI CURSOR,2 RCALL CONTAR LDS AUX1,POSICION5 LDI CURSOR,5 RCALL CONTAR LDS AUX1,POSICION8 LDI CURSOR,8 RCALL CONTAR RCALL VERIFICAR BRCC POSIBILIDAD7 RJMP GO POSIBILIDAD7: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION0 LDI CURSOR,0 RCALL CONTAR LDS AUX1,POSICION4 LDI CURSOR,4 RCALL CONTAR LDS AUX1,POSICION8 LDI CURSOR,8 RCALL CONTAR RCALL VERIFICAR BRCC POSIBILIDAD8 RJMP GO POSIBILIDAD8: LDI AUX4,0 LDI AUX5,0 71
  • 70. CLC LDS AUX1,POSICION2 LDI CURSOR,2 RCALL CONTAR LDS AUX1,POSICION4 LDI CURSOR,4 RCALL CONTAR LDS AUX1,POSICION6 LDI CURSOR,6 RCALL CONTAR RCALL VERIFICAR GO: POP AUX5 POP AUX4 RET ;--------------------------------------------------------------------------------------------------- CONTAR: ;CUENTA DE 0s Y 2s CPI AUX1,0 BRNE O2 INC AUX4 MOV R14,CURSOR O2: CPI AUX1,2 BRNE AB INC AUX5 AB: RET ;--------------------------------------------------------------------------------------------------- VERIFICAR: ;VERIFICAR VICTORIA DE PC CLC CPI AUX5,2 ;DOS VECES EL 2 BRNE AB2 CPI AUX4,1 ; UN SOLO 0 BRNE AB2 MOV CURSOR,R14 LDI AUX2,2 CPI CURSOR,0 BRNE E2 STS POSICION0,AUX2 RJMP BANDERA E2: CPI CURSOR,1 BRNE E3 STS POSICION1,AUX2 RJMP BANDERA E3: CPI CURSOR,2 BRNE E4 STS POSICION2,AUX2 RJMP BANDERA 72
  • 71. E4: CPI CURSOR,3 BRNE E5 STS POSICION3,AUX2 RJMP BANDERA E5: CPI CURSOR,4 BRNE E6 STS POSICION4,AUX2 RJMP BANDERA E6: CPI CURSOR,5 BRNE E7 STS POSICION5,AUX2 RJMP BANDERA E7: CPI CURSOR,6 BRNE E8 STS POSICION6,AUX2 RJMP BANDERA E8: CPI CURSOR,7 BRNE E9 STS POSICION7,AUX2 RJMP BANDERA E9: STS POSICION8,AUX2 BANDERA: SEC RET AB2: CLC RET ;--------------------------------------------------------------------------------------------------- IMPEDIRGANAR: ;SUBRUTINA PARA IMPEDIR GANAR AL JUGADOR PUSH AUX4 PUSH AUX5 SPOSIBLIDAD1: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION0 LDI CURSOR,0 RCALL SCONTAR LDS AUX1,POSICION1 LDI CURSOR,1 RCALL SCONTAR LDS AUX1,POSICION2 LDI CURSOR,2 RCALL SCONTAR 73
  • 72. RCALL SVERIFICAR BRCC SPOSIBILIDAD2 RJMP SGO SPOSIBILIDAD2: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION3 LDI CURSOR,3 RCALL SCONTAR LDS AUX1,POSICION4 LDI CURSOR,4 RCALL SCONTAR LDS AUX1,POSICION5 LDI CURSOR,5 RCALL SCONTAR RCALL SVERIFICAR BRCC SPOSIBILIDAD3 RJMP SGO SPOSIBILIDAD3: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION6 LDI CURSOR,6 RCALL SCONTAR LDS AUX1,POSICION7 LDI CURSOR,7 RCALL SCONTAR LDS AUX1,POSICION8 LDI CURSOR,8 RCALL SCONTAR RCALL SVERIFICAR BRCC SPOSIBILIDAD4 RJMP SGO SPOSIBILIDAD4: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION0 LDI CURSOR,0 RCALL SCONTAR LDS AUX1,POSICION3 LDI CURSOR,3 RCALL SCONTAR LDS AUX1,POSICION6 LDI CURSOR,6 RCALL SCONTAR RCALL SVERIFICAR BRCC SPOSIBILIDAD5 74
  • 73. RJMP SGO SPOSIBILIDAD5: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION1 LDI CURSOR,1 RCALL SCONTAR LDS AUX1,POSICION4 LDI CURSOR,4 RCALL SCONTAR LDS AUX1,POSICION7 LDI CURSOR,7 RCALL SCONTAR RCALL SVERIFICAR BRCC SPOSIBILIDAD6 RJMP SGO SPOSIBILIDAD6: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION2 LDI CURSOR,2 RCALL SCONTAR LDS AUX1,POSICION5 LDI CURSOR,5 RCALL SCONTAR LDS AUX1,POSICION8 LDI CURSOR,8 RCALL SCONTAR RCALL SVERIFICAR BRCC SPOSIBILIDAD7 RJMP SGO SPOSIBILIDAD7: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION0 LDI CURSOR,0 RCALL SCONTAR LDS AUX1,POSICION4 LDI CURSOR,4 RCALL SCONTAR LDS AUX1,POSICION8 LDI CURSOR,8 RCALL SCONTAR RCALL SVERIFICAR BRCC SPOSIBILIDAD8 RJMP SGO 75
  • 74. SPOSIBILIDAD8: LDI AUX4,0 LDI AUX5,0 CLC LDS AUX1,POSICION2 LDI CURSOR,2 RCALL SCONTAR LDS AUX1,POSICION4 LDI CURSOR,4 RCALL SCONTAR LDS AUX1,POSICION6 LDI CURSOR,6 RCALL SCONTAR RCALL SVERIFICAR SGO: POP AUX5 POP AUX4 RET ;--------------------------------------------------------------------------------------------------- SCONTAR: ;CUENTA DE 1s O 0s CPI AUX1,0 BRNE SO2 INC AUX4 MOV R14,CURSOR SO2: CPI AUX1,1 BRNE SAB INC AUX5 SAB: RET ;--------------------------------------------------------------------------------------------------- SVERIFICAR: ;VERIFICAR IMPEDIMIENTO DE VICTORIA DEL JUGADOR CLC CPI AUX5,2 ;DOS VECES EL 1 BRNE SAB2 CPI AUX4,1 ; UN SOLO 0 BRNE SAB2 MOV CURSOR,R14 ;IMPEDIMOS QUE GANE EL JUGADOR LDI AUX2,2 CPI CURSOR,0 BRNE SE2 STS POSICION0,AUX2 RJMP SBANDERA SE2: CPI CURSOR,1 BRNE SE3 STS POSICION1,AUX2 RJMP SBANDERA SE3: CPI CURSOR,2 BRNE SE4 76
  • 75. STS POSICION2,AUX2 RJMP SBANDERA SE4: CPI CURSOR,3 BRNE SE5 STS POSICION3,AUX2 RJMP SBANDERA SE5: CPI CURSOR,4 BRNE SE6 STS POSICION4,AUX2 RJMP SBANDERA SE6: CPI CURSOR,5 BRNE SE7 STS POSICION5,AUX2 RJMP SBANDERA SE7: CPI CURSOR,6 BRNE SE8 STS POSICION6,AUX2 RJMP SBANDERA SE8: CPI CURSOR,7 BRNE SE9 STS POSICION7,AUX2 RJMP SBANDERA SE9: STS POSICION8,AUX2 SBANDERA: SEC RET SAB2: CLC RET ;--------------------------------------------------------------------------------------------------- PONER_PC: LDI YL,LOW(POSICION0) LDI YH,HIGH(POSICION0) LDI CURSOR,0 REPETITION: INC CURSOR LD AUX1,Y+ CPI AUX1,0 BRNE REPETITION LDI AUX1,2 ST -Y,AUX1 DEC CURSOR 77
  • 78. 7.4. JUGADOR1 VS JUGADOR2 80
  • 79. 8. PARTE PRÁCTICA (IMPLEMENTACIÓN DEL CIRCUITO) Hay que tomar en cuenta que para la realización de este proyecto, se ha ido avanzando poco a poco para poder cumplir con el tiempo establecido de entrega, además vale recalcar el trabajo en grupo, para ello consideramos necesario dejar constancia de algunas fotografías con el cual podamos demostrar cómo ha ido evolucionando el proyecto en el transcurso del tiempo. 8.1.- 81
  • 83. 9. CONCLUSIONES Se pudo concluir que: 1. Para la realización de este proyecto fue necesario poner en práctica todos los conocimientos que en el transcurso del semestre hemos ido adquiriendo ya que en este se aplica todos los conceptos relacionado con la materia de Sistemas Microprocesados tales como: comandos, etiquetas, subrutinas, interrupciones, etc. 2. Una de las mayores dificultades fue la programación de la pantalla GLCD, ya que para que logre funcionar se necesitaba un programa aparte en Assembler para que pueda funcionar en el proyecto. 3. En la elaboración del proyecto, se necesitaba un teclado para cada jugador, antes de iniciar el proyecto se intento buscar en los locales electrónicos uno teclado 5 teclas (arriba, abajo, derecha, izquierda y enter), desafortunadamente no se puedo encontrar ya que solo había teclados de 3x3 o de 4x4. Debido a este inconveniente, vemos la mejor opción de implementarlo en el mismo protoboard con pulsadores y capacitores con el cual no haya rebotes. 4. Al principio de la elaboración del proyecto, estábamos utilizando la cables que salían de la pantalla GLCD, esto dificultaba para el armado y sobre todo no tenía una buena presentación, debido a esto buscamos una solución y consistió en colocarle y soldarle un adaptador a la pantalla, esto nos facilitó para colocarle directamente en el protoboard y mejoró mucho la presentación. 5. A pesar de que tenemos algunas fotografías de la simulación en Proteus, nos pareció importante hacerle un video y subirle al youtube para mejor apreciación. 6. Para la programación de la pantalla GLCD de 240x128 pixels, fue necesario descargarnos el datasheet de este, ya que necesitábamos saber cómo funciona y la representación que tenía cada pin. 10. DIFICULTADES Y RECOMENDACIONES 1. Es recomendable no dejarse acumular todo el proyecto para el final, es por eso que se trabajo poco a poco desde el principio con esto hemos obtenido buenos resultados, debido a eso mediante las fotografías se ha dejado constancia del avance progresivo del proyecto. 2. El diseño del software es un factor bastante importante en este tipo de proyectos. Es recomendable realizar un plan de cómo se encuentra estructurado el software para luego empezar a trabajar en el código como se hizo en este caso. 85
  • 84. 3. Dividir las diversas actividades que el programa va a realizar en subrutinas. Mientras más subrutinas se empleen el programa es más modular y mucho más sencillo de manejar. De igual manera en caso de haber errores es fácil de corregir el código. 4. Realizar el código empleando comentarios. Un código con comentarios permite entre otras cosas saber con qué objetivo se escribió esa parte del código, saber qué función realiza y poder corregirla con facilidad en caso de errores. 5. Los pulsadores al ser elementos mecánicos producen rebote. Para reducir dicho rebote es recomendable emplear capacitores en paralelo a estos. Otra opción pudiese ser emplear tiempos de espera producidos por software. No obstante esta opción no se tomó para este proyecto para evitar mayores tiempos de respuesta así como de escritura de datos en la pantalla GLCD. 6. Es mejor la utilización de un adaptador para la pantalla GLCD con el cual podamos conectar de forma directa al protoboard en vez de colocar cables, esto nos facilita para el armado del circuito y más que todo mejora mucho en la presentación ya que no se va a ver muchos cables en el proto. 11. BIBLIOGRAFÍA • http://es.wikipedia.org/wiki/Tres_en_l%C3%ADnea • http://www.egochina.net.cn/e-shop/ebay/Datasheet/JHD240128D.pdf • DIAPOSITIVAS INTERRUPCIONES DE LOS ATMEGA 164P, VECTORES, REGISTROS Y BANDERAS, Ing. Jaime Velarde, EPN. 86