; SISTEMAS INFORMATICOS 2000/2001 ; AVANZADO Y SOFISTICADO JUEGO DE NAVES PARA EL COMPUTADOR ; Julio Esteban Fern ndez ; Antonio Ortiz Pineda ; Miguel Angel Rojas ; utilizamos caracter¡sticas del 8051 $MOD51 $TITLE (NAVES) $DATE (30-Jun-01) ;****************************************************************** ; Definici¢n de macros cje MACRO primer,segundo,dirsalto mov A,primer clr C subb A,segundo jz dirsalto ENDM swapr MACRO primero,segundo mov A,primero mov varmacro,segundo mov segundo,A mov primero,varmacro ENDM movr MACRO destino,origen mov A,origen mov destino,A ENDM guardarest MACRO push PSW push ACC push DPH push DPL ENDM recuperarest MACRO pop DPL pop DPH pop ACC pop PSW ENDM ;****************************************************************** ; CONSTANTES NECESARIAS ; ESTADO MICRO DirEstadoMicro EQU 0FFFFh ; CONFIRMAR INT1 DirConfINT EQU 0FFFFh ; PS2 DirRegEstadoPS2 EQU 0FF00h BufferLlenoPS2 EQU 00000001b HayDatosPS2 EQU 00000010b DesbordPS2 EQU 00000100b BufLlenoDesbPS2 EQU 00000101b DirRegControlPS2 EQU 0FF00h HabilitarINTPS2 EQU 00000001b DeshabilitarINTPS2 EQU 00000000b DirRegDatosPS2 EQU 0FF01h ; VGA DirRegEstadoVGA EQU 0FF10h ColorVGA EQU 00000001b SelMemRefr EQU 00000010b EncenderVGA EQU 00000100b BlankVertVGA EQU 00001000b BufferLlenoVGA EQU 00010000b ErrorEscrituraVGA EQU 00100000b DirRegControlVGA EQU 0FF10h ; controla color,seleccionar tipo de memoria (refresco/pixel) y encenderVGA ; en los mismos bits que el registro de estado DirRegDirAltaVGA EQU 0FF11h ; si seleccionada mem.refresco -> 000y4y3y2y1y0 ;(coordenada y carater a escribir) ; si seleccionada mem.pixels -> 0c6c5c4c3c2c1c0 ;(caracter cuyo pixel vamos a escribir) DirRegDirBajaVGA EQU 0FF12h ; si seleccionada mem.refresco -> 000x4x3x2x1x0 ;(coordenada x caracter a escribir) ; si seleccionada mem.pixels -> 0y2y1y0x3x2x1x0 ;(pixel que vamos a escribir) ; escribir en este para escribir en memoria VGA DirRegDatosVGA EQU 0FF13h ; si seleccionada mem.refresco -> 0c6c5c4c3c2c1c0 ;(codigo del caracter) ; si seleccionada mem.pixels -> 00RRGGBB ;(codigo RGB) ; limites de 0 - 29 DirLimInfXVGA EQU 0FF14h DirLimSupXVGA EQU 0FF15h DirLimInfYVGA EQU 0FF16h DirLimSupYVGA EQU 0FF17h ; CODEC DirRegEstadoCODEC EQU 0FF20h BufferLlenoCODEC EQU 00000001b HayDatosCODEC EQU 00000010b DesbordCODEC EQU 00000100b BufLlenoDesbCODEC EQU 00000101b DirRegDatosCODEC EQU 0FF20h ; datos a enviar -> 0d2d1d0n3n2n1n0 ; siendo d2d1d0->duracion ; siendo n3n2n1n0->frec.nota ; ALEA -> generador de numeros aleatorios DirALEA EQU 0FF30h ;*********************************************************** ; CONSTANTES DEL ESTADO DEL JUEGO Estadoinicio EQU 0 Estadopresentacion EQU 1 Estadojugando EQU 2 Estadoterminado EQU 3 ;*********************************************************** ; CONSTANTES DE LA PRESENTACION ; limites del logo (inclusives) limInfXLogo EQU 3 limSupXLogo EQU 27 limInfYLogo EQU 9 limSupYLogo EQU 20 ; ancho de ventana de la presentacion (fase 1 de la presentacion) anchoLogo EQU 5 ; codigo del caracter para rotar CRotar EQU 40 ; mascaras para rotar y desplazar ; cada cuanto rotamos mascRotar EQU 00000000b ; cada cuanto fase 1 y 2 (desplazar y agrandar) mascDesplazar12 EQU 00000001b ; cada cuanto fase 1 (mas lenta que fase 2) mascDesplazar1 EQU 00000011b ; CONSTANTES PARA TOCAR LA MELODIA DE LA PRESENTACION numNotasLOGOIni EQU 4 numNotasLOGOSec EQU 6 mascEnviarNotas EQU 00000111b ;****************************************************************** ; CONSTANTES DEL JUEGO ; estados de las teclas estadoTeclaSoltada EQU 0 estadoTeclaPulsada EQU 1 estadoTeclaConsumida EQU 2 estadoTeclaEsperando EQU 3 ; limites de la pantalla (piensa que hay margen en los cuatro lados) ; pantalla de 9=(3x3)x18=(2x9) ---> 11x20 con margenes limInfXPantalla EQU 10 limSupXPantalla EQU 20 limInfYPantalla EQU 2 limSupYPantalla EQU 23 ; limites para la posici¢n de la naves (finalmente deben desaparecer) limNaveizq EQU 12 limNaveder EQU 18 limjuegoinf EQU 5 limjuegosup EQU 17 ; acciones de los marcianitos acc_izq EQU 0 acc_der EQU 1 acc_aba EQU 2 acc_dis EQU 3 ; constante que define el fondo de pantalla (blanco actualmente) CFO EQU 000001b ; constante para los margenes (azul actualmente) CMA EQU 000011b ; contante para el color de los numeros CNU EQU 001100b ; constante para el color de las letras CLE EQU 110100b ; constante para el fondo de los numeros romanos FNR EQU 111100b ; constante pare el color de los numeros romanos CNR EQU 110000b ;;;;; Asi estan azul, y es facil cambiarlo a otro color o EQU 000011b m EQU 011011b cl EQU 101111b ; Constantes de colores Neg EQU 000000b Bla EQU 111111b Roj EQU 110000b Ver EQU 001100b Vec EQU 011101b Azo EQU 000011b Azc EQU 001011b Ama EQU 111100b Nar EQU 110100b Ros EQU 110111b Vio EQU 100001b Pur EQU 010001b ;constantes de colores de esteban CF EQU 111111b Bl EQU 111111b ;Ne EQU 000000b Gc EQU 101010b Go EQU 010101b ;Ac EQU 101111b Eac EQU 101111b Am EQU 011011b Ao EQU 010111b Aoo EQU 000011b Aooo EQU 000010b Rc EQU 110000b Rm EQU 100000b Ro EQU 010000b Vc EQU 001100b Vm EQU 001000b Vo EQU 000100b Amc EQU 101100b Amo EQU 101000b ; caracter de numeros carnum0 EQU 0 carnum1 EQU 1 carnum2 EQU 2 carnum3 EQU 3 carnum4 EQU 4 carnum5 EQU 5 carnum6 EQU 6 carnum7 EQU 7 carnum8 EQU 8 carnum9 EQU 9 ; caracteres de las letras carA EQU 10 carB EQU 11 carC EQU 12 carD EQU 13 carE EQU 14 carF EQU 15 carG EQU 16 carH EQU 17 carI EQU 18 carJ EQU 19 carK EQU 20 carL EQU 21 carM EQU 22 carN EQU 23 carENIE EQU 24 carO EQU 25 carP EQU 26 carQ EQU 27 carR EQU 28 carS EQU 29 carT EQU 30 carU EQU 31 carV EQU 32 carW EQU 33 carX EQU 34 carY EQU 35 carZ EQU 36 carESP EQU 37 ; caracteres para el indicador de pausa carPausa EQU 60 ; caracteres para los numeros romanos carRomanoI EQU 61 carRomanoII EQU 62 carRomanoIII EQU 63 ; caracter fondo pantalla carFondoPantalla EQU 64 ; caracter margenes carMargenes EQU 65 ; codigos de caracteres para la nave naveCarSupIzq EQU 66 naveCarSupCen EQU 67 naveCarSupDer EQU 68 naveCarInfIzq EQU 69 naveCarInfCen EQU 70 naveCarInfDer EQU 71 ; caracter misil carMisilsup EQU 72 carMisilinf EQU 73 ; codigos para los caracteres de los marcianitos MarCarSupIzq EQU 74 MarCarSupCen EQU 75 MarCarSupDer EQU 76 MarCarInfIzq EQU 77 MarCarInfCen EQU 78 MarCarInfDer EQU 79 ; codigos para los caracteres de los rayos de los marcianitos carRayosup EQU 80 carRayoinf EQU 81 ; codigos para los caracteres de los marcianitos destruidos MarCarSupIzqdes EQU 82 MarCarSupCendes EQU 83 MarCarSupDerdes EQU 84 MarCarInfIzqdes EQU 85 MarCarInfCendes EQU 86 MarCarInfDerdes EQU 87 ; codigos para la visualizaci¢n de las vidas carNavevida EQU 88 ; codigos para los caracteres de la nave nodriza NodCarSupIzq EQU 89 NodCarSupCen EQU 90 NodCarSupDer EQU 91 NodCarInfIzq EQU 92 NodCarInfCen EQU 93 NodCarInfDer EQU 94 ; codigos para los caracteres de la nave nodriza destruida NodCarSupIzqdes EQU 95 NodCarSupCendes EQU 96 NodCarSupDerdes EQU 97 NodCarInfIzqdes EQU 98 NodCarInfCendes EQU 99 NodCarInfDerdes EQU 100 ; codigos de los caracteres para los marcos marcesqabder EQU 104 marcesqabizq EQU 103 marcesqarrizq EQU 102 marcesqarrder EQU 101 marcladizq EQU 105 marcladder EQU 106 marcladaba EQU 107 marcladarr EQU 108 marcladmed EQU 109 marcesqmedder EQU 111 marcesqmedizq EQU 110 misilillo EQU 112 ; posicion inicial X de la nave terrestre (de sus caracter superior central) posXNaveInicial EQU 15 ; posicion Y de la nave terrestre(de su caracter superior central) posYNaveInicial EQU 19 ;posicion del limite izquierdo X de la naves posXNaveIzq EQU 12 ; posicion del limite derecho X de la naves posXNaveDer EQU 18 ; posicion Y de la nave nodriza posYNodrizaInicial EQU 7 ; numero maximo de disparos maxnumdisparos EQU 5 maxnumdisparosmar EQU 5 ; numero maximo de marcianitos maxnummarcianitos EQU 5 ; teclas de movimiento codTeclaIzq EQU 044h ; TECLA O codTeclaDer EQU 04Dh ; TECLA P codTeclaDisparo EQU 029h ; ESPACIO codTeclaSubNiv EQU 079h ; TECLA + codTeclaBajNiv EQU 07Bh ; TECLA - codTeclaPausa EQU 076h ; TECLA ESC codTeclaNuevoJuego EQU 031h ; TECLA N codTeclaSoltada EQU 0F0h ; posiciones iniciales de marcianitos pos1xini EQU 12 pos2xini EQU 15 pos3xini EQU 18 pos1yini EQU 9 pos2yini EQU 11 pos3yini EQU 13 ; rango de movimientos rgmovmisiles EQU 2 rgmovnaves EQU 3 rgmovdespl EQU 3 ; nave marcianito no existe marcianitonoexiste EQU 0 ; nave marcianito explotada marcianitoexplotado EQU 1 ; nave marcianito eliminada marcianitoeliminado EQU 2 ; multiplicador de evento para los movimientos de los marcianitos multmarcianito EQU 00000011b ; multiplicador de evento para los movimiento de la nave nodriza multnodriza EQU 00001111b ; velocidad inicial del juego velocInicial EQU 10000000b ; mascara de los niveles mascnivel1 EQU 01111111b mascnivel2 EQU 10111111b mascnivel3 EQU 11011111b ; posicion del contador de puntos PosXContPuntos EQU 16 PosYContPuntos EQU 4 ; posicion del contador de misiles PosXContMisiles EQU 16 PosYContMisiles EQU 22 ; posicion de los dibujos de las vidas PosXContvidas EQU 12 PosYContvidas EQU 22 ; posicion del contador de niveles PosXContniveles EQU 12 PosYContniveles EQU 4 ; posicion del contador de pausa PosXContPausa EQU 13 PosYContPausa EQU 4 ; posicion de la visualizaci¢n del gameover PosXGameOverInicial EQU 13 PosYGameOverInicial EQU 7 ; posicion final del game over PosXGameOverFinal EQU 17 PosYGameOverFinal EQU 9 ; numero maximo de vidas nummaxvidas EQU 3 ; bonus por cada 1000 puntos Bonus_Misiles EQU 50 ; constantes para la funcion dibujarrectangulo limpieza EQU 0 naveterrestre EQU 1 navemarcianito EQU 2 naveterrestredes EQU 3 navemarcianitodes EQU 4 nodriza EQU 5 nodrizades EQU 6 ; constantes para la funcion movimientomisiles misilesnuestros EQU 0 misilesmarcianitos EQU 1 ; constantes para la funcion existeobjetoenpos existeobjmarciano EQU 0 existeobjmisilter EQU 1 existeobjmisilmar EQU 2 ;****************************************************************** ; SEGMENTO DE DATOS que empieza en 08h (R0-R7 mapeados,memoria de bits) ; importante no superar la barrera de 80h porque ; invadiriamos el espacio reservado a los registros DSEG AT 08H ORG 08H ; reservamos 15h bytes para pila, sera suficiente pila: DS 15h ; variables de macros varmacro: DS 1 ; aqui se ponen las variables propias del programa ; VARIABLES DEL JUEGO ; contador de puntos millarPuntos: DS 1 centenaPuntos: DS 1 decenaPuntos: DS 1 unidadPuntos: DS 1 ; contador de misiles centenaMisiles: DS 1 decenaMisiles: DS 1 unidadMisiles: DS 1 ; numero de vidas numvidas: DS 1 ; contador de eventos contSoft: DS 1 ; temporizador temporizador: DS 1 ; tope dinamico topeTemp: DS 1 ; tecla leida teclaLeida: DS 1 ; se ha detectado codigo de tecla soltada? (0->no, 1->si) teclaSoltada: DS 1 ; mapa de las teclas de movimiento ; (tres estados -> soltada,pulsada,consumida) mapaTeclaIzq: DS 1 mapaTeclaDer: DS 1 mapaTeclaDisp: DS 1 ; posicion de la nave (de su caracter central) posXNave: DS 1 posYNave: DS 1 ; posicion anterior de la nave (de su caracter central) posXNaveAnt: DS 1 posYNaveAnt: DS 1 nummisiles: DS 1 nummisilesmar: DS 1 ; posicion de los misiles posMisilX: DS maxnumdisparos posMisilY: DS maxnumdisparos posMisilXmar: DS maxnumdisparosmar posMisilYmar: DS maxnumdisparosmar nummarcianitos: DS 1 ; posicion de los marcianitos vecposMarcianitoX: DS maxnummarcianitos vecposMarcianitoY: DS maxnummarcianitos vecposMarcianitoXant: DS maxnummarcianitos vecposMarcianitoYant: DS maxnummarcianitos ; posicion de la nave nodriza posnodrizaX: DS 1 posnodrizaY: DS 1 posnodrizaXant: DS 1 posnodrizaYant: DS 1 ; indicador de pausa estadoPausa: DS 1 ; indicador del estado del juego estadojuego: DS 1 ;****************************************************************** ; PARAMETROS para la funcion dibujarCaracter/dibujarPixel carYDibujarCaracter: DS 1 carXDibujarCaracter: DS 1 codigoDibujarCaracter: DS 1 colorDibujarPixel: DS 1 ;****************************************************************** ; PARAMETROS para la funcion enviarSonido sonido: DS 1 ;****************************************************************** ; PARAMETROS para la funcion dibujarrectangulo posXrectangulo: DS 1 posYrectangulo: DS 1 tiporectangulo: DS 1 ;****************************************************************** ; PARAMETROS para la funcion movimientomisiles verquemisiles: DS 1 ;****************************************************************** ; PARAMETROS para la funcion crearmarcianito iniposx: DS 1 iniposy: DS 1 ;****************************************************************** ; PARAMETROS para la funcion cogernumeroaleatorio numeroalea: DS 1 ;****************************************************************** ; PARAMETROS para la funcion existeobjetoenpos tipoexiste: DS 1 existexobj: DS 1 existeyobj: DS 1 existeobj: DS 1 ;****************************************************************** ; PARAMETROS para la funcion borrarmarcianoenpos borrarxmar: DS 1 borrarymar: DS 1 ;****************************************************************** ; PARAMETROS para la funcion actualizarmisiles incremMisiles: DS 1 ;****************************************************************** ; PARAMETROS para la funcion actualizarPuntos incremPuntos: DS 1 ;****************************************************************** ; PARAMETROS para la funcion dispararmisilmarciano misilmarcianoX: DS 1 misilmarcianoY: DS 1 ;****************************************************************** ; VARIABLES DE LA PRESENTACION posVentana: DS 1 ; posicion de la ventana (izq) fasePresen: DS 1 ; fase 1 (0), fase 2(1) posRotacion: DS 1 ; posicion de la rotacion ; (0-3)->azul ; (4-7)->verde ; (8-11)->rojo ; (12-15)->amarillo (rojo+verde) ;***************************************************************** ; VARIABLES PARA TOCAR LA MELODIA DE LA PRESENTACION numeroNotasLOGOTotal: DS 1 numeroNotasLOGO: DS 1 apunDirAltaMELODIA: DS 1 apunDirBajaMELODIA: DS 1 ;****************************************************************** ; a partir de aqui no se toca,reservado registros internos ORG 080h ; SEGMENTO DE CODIGO CSEG AT 0H ;saltamos a c¢digo principal jmp MAIN ; rutina de tratamiento de interrupcion para el INT0 ; (despertar micro y teclado) ORG 3H jmp RUT_INT0 ; rutina de tratamiento de interrupcion para el TIMER0 ORG 0BH jmp RUT_TIMER0 ; rutina de tratamiento de interrupcion para el INT1 (dormir micro) ORG 13H jmp RUT_INT1 ; rutina de tratamiento de interrupcion para el TIMER1 ORG 1BH jmp RUT_TIMER1 ; rutina de tratamiento de interrupcion para el puerto serie ORG 23H jmp RUT_SERIE ; rutina de tratamiento de interrupcion para el TIMER2 ORG 2BH jmp RUT_TIMER2 ;****************************************************************** ; CONSTANTES EN CODIGO->LOGO LOGO: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO01: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO02: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO03: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO04: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO10: DB carESP,carESP,carESP,carESP,carESP LOGO11: DB CarG,CarA,CarL,CarA,CarX LOGO12: DB CarY,carESP,carESP,CarI,CarN LOGO13: DB CarV,CarA,CarD,CarE,CarR LOGO14: DB carESP,carESP,carESP,carESP,carESp LOGO20: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO21: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO22: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO23: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO24: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO25: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO26: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO27: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO28: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO29: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO30: DB carESP,carESP,carESP,carESP,carESP LOGO31: DB carESP,CarD,CarI,CarS,CarE LOGO32: DB CarENIE,CarA,CarD,CarO,carESP LOGO33: DB carESP,CarP,CarO,CarR,carESP LOGO34: DB carESP,carESP,carESP,carESP,carESP LOGO40: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO41: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO42: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO43: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO44: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO50: DB carE,carS,carT,carE,carB LOGO51: DB carA,carN,carESP,carESP,carF LOGO52: DB carE,carR,carN,carA,carN LOGO53: DB carD,carE,carZ,carESP,carJ LOGO54: DB carU,carA,carR,carE,carZ LOGO60: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO61: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO62: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO63: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO64: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO70: DB carESP,carESP,carA,carN,carT LOGO71: DB carO,carN,carI,carO,carESP LOGO72: DB carESP,carO,carR,carT,carI LOGO73: DB carZ,carESP,carP,carI,carN LOGO74: DB carE,carD,carA,carESP,carESP LOGO80: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO81: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO82: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO83: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO84: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGO90: DB carM,carI,carG,carU,carE LOGO91: DB carL,carESP,carA,carN,carG LOGO92: DB carE,carL,carESP,carESP,carR LOGO93: DB carO,carJ,carA,carS,carESP LOGO94: DB carG,carO,carM,carE,carZ LOGOA0: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGOA1: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGOA2: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGOA3: DB CRotar,CRotar,CRotar,CRotar,CRotar LOGOA4: DB CRotar,CRotar,CRotar,CRotar,CRotar ;****************************************************************** ; MELODIA DE LA PRESENTACION MELODIA_LOGO: DB 128 MELODIA_LOGO0: DB 00110010b,00101111b,00100010b,00101111b,00100010b MELODIA_LOGO1: DB 00100101b,00101111b,00100111b,00101111b,00110010b MELODIA_LOGO2: DB 00101111b,00100010b,00101111b,00100010b,00100000b MELODIA_LOGO3: DB 00101111b,00100001b,00110010b,00100101b,00101111b MELODIA_LOGO4: DB 00100111b,00101111b,00110010b,00101111b,00100010b MELODIA_LOGO5: DB 00101111b,00100010b,00100000b,00101111b,00100001b MELODIA_LOGOD: DB 00110100b,00101111b,00110100b,00101111b,00110100b MELODIA_LOGOE: DB 00101111b,00110100b,00101111b,00110111b,00101001b MELODIA_LOGOF: DB 00101111b,00110100b,00101111b,00110100b,00101111b MELODIA_LOGOG: DB 00110100b,00101111b,00110100b,00101111b,00110010b MELODIA_LOGOH: DB 00100010b,00110100b,00101111b,00110100b,00101111b MELODIA_LOGOI: DB 00110111b,00101001b,00101111b,00101001b,00100111b MELODIA_LOGOJ: DB 00110100b,00101111b,00110010b,00110011b,00100100b MELODIA_LOGOK: DB 00100111b,00101111b,00101111b,00100111b,00101111b MELODIA_LOGOL: DB 00101111b,00101111b,00101100b,00101111b,00100111b MELODIA_LOGOM: DB 00101111b,00101111b,00100111b,00101111b,00101111b MELODIA_LOGON: DB 00100101b,00101111b,00100110b,00101111b,00100111b MELODIA_LOGOO: DB 00100001b,00101111b,00100111b,00101111b,00101111b MELODIA_LOGOP: DB 00100111b,00101111b,00101111b,00100101b,00101111b MELODIA_LOGOQ: DB 00100110b,00100111b MELODIA_LOGO6: DB 00100010b,00101111b,00101111b,00100010b,00101111b MELODIA_LOGO7: DB 00101111b,00100010b,00100101b,00101111b,00100111b MELODIA_LOGO8: DB 00101111b,00100010b,00101111b,00101111b,00100010b MELODIA_LOGO9: DB 00101111b,00101111b,00100010b,00100000b,00101111b MELODIA_LOGOA: DB 00100000b,00100010b,00101111b,00101111b,00100010b MELODIA_LOGOB: DB 00100101b,00101111b,00100111b,00101111b,00101101b MELODIA_LOGOC: DB 00101110b ;****************************************************************** ; Aqui guardamos todos los sonidos del juegos (en el espacio de ; de memoria del codigo del programa -> acceso por memoria externa) MUERTE1: DB 3,00101110b,00101010b,00100101b MUERTE2: DB 4,00101110b,00101010b,00100101b,00100100b MUERTE3: DB 8,00101110b,00101010b,00100101b,00100100b MUERTE3BIS: DB 00100100b,00100011b,00100100b,00100101b DISPARO: DB 1,00011110b MATAMARCIANO: DB 2,00010100b,00011100b MATANODRIZA: DB 2,00010100b,00101100b MOVNODRIZA: DB 2,00100000b,00100001b BONUSMISILES: DB 3,00101100b,00101101b,00101110b GAMEOVER: DB carG,carA,carM,carE,carEsp,carEsp,carO,carV,carE,carR ;****************************************************************** ; RUTINA PRINCIPAL MAIN: ; inicializo pila mov SP,#pila ; INICIALIZACION INTERRUPCIONES Y CONTADORES ; preparo interrupciones ; interrupciones controladas por IE (bit PCT=1) ; PCT --- PT2 PS PT1 PX1 PT0 PX0 ; 1 0 0 0 0 0 0 0 mov IP,#10000000b ; habilito interrupciones INT1,INT0 ; EA --- ET2 ES ET1 EX1 ET0 EX0 ; 1 0 0 0 0 1 0 1 mov IE,#10000101b ; habilito INT1 por flanco (IT1=1,IT0=1) ; TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 ; 0 0 0 0 0 1 0 1 mov TCON,#00000101b ; modo de los contadores mediante TMOD ; contador 1 en modo de 16 bits (M1M0=01) con reloj interno (CT=0) ; y sin GATE (GATE=1) ; contador 2 en modo de 16 bits (M1M0=01) con reloj interno (CT=0) ; y sin GATE (GATE=1) ; CONTADOR 1 CONTADOR 0 ; GATE CT M1 M0 GATE CT M1 M0 ; 1 0 0 1 1 0 0 1 mov TMOD,#10011001b ;************************************************************* mov estadojuego,#estadoinicio ; INICIALIZAMOS LA VGA (color,sel. memoria caracteres y la encendemos) mov DPTR,#DirRegControlVGA mov A,#ColorVGA orl A,#SelMemRefr orl A,#EncenderVGA movx @DPTR,A ; limites vacios (no apago la VGA porque cuando esta apagada ; no se actualiza la memoria de refresco) mov A,#1 mov DPTR,#DirLimInfXVGA movx @DPTR,A mov DPTR,#DirLimInfYVGA movx @DPTR,A mov A,#0 mov DPTR,#DirLimSupXVGA movx @DPTR,A mov DPTR,#DirLimSupYVGA movx @DPTR,A ; inicialmente teclas soltadas mov mapaTeclaIzq,#estadoTeclaSoltada mov mapaTeclaDer,#estadoTeclaSoltada mov mapaTeclaDisp,#estadoTeclaSoltada mov teclaSoltada,#0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; inicializamos el tope mov topeTemp,#velocInicial ; modo pausa mov estadopausa,#0 ;call inicializarjuego ;****************************************************************** ; control del temporizador ReiniciarTEMP: mov temporizador,#0 LimpiarACUM: mov A,#0 ; incremento ACC IncremACUM: inc A ; ha llegado a cero jnz IncremACUM ; incrementamos temporizador inc temporizador ; ha llegado al final? mov A,temporizador cjne A,topeTemp,LimpiarACUM ; llamamos Rut_Eventos mov A,estadopausa jnz ReiniciarTEMP call Rut_eventos jmp ReiniciarTEMP ;****************************************************************** ; inicializar presentacion inicializarpresentacion: ; escribir LOGO call escribirLOGO ; inicializo posiciones y codigo de rotacion mov posVentana,#limInfXLogo mov fasePresen,#0 mov posRotacion,#0 ; linea del LOGO mov DPTR,#dirLimInfYVGA mov A,#limInfYLogo movx @DPTR,A mov DPTR,#dirLimSupYVGA mov A,#limSupYLogo movx @DPTR,A ; empezamos a tocar la melodia de la presentacion call inicializarMELPRES ret ;****************************************************************** inicializarjuego: ; inicializo contador de misiles mov centenaMisiles,#2 mov decenaMisiles,#5 mov unidadMisiles,#0 ; inicializo contador de puntos mov millarPuntos,#0 mov centenaPuntos,#0 mov decenaPuntos,#0 mov unidadPuntos,#0 ; inicializo el numero de vidas mov numvidas,#3 ;numero maximo de misiles disponibles en pantalla al mismo tiempo mov nummisiles,#3 ;Inicialmente no existen misiles mov R0,#posMisilX mov R1,#posMisilY mov R2,nummisiles inicializarmisiles: mov @R0,#0 mov @R1,#0 inc R0 inc R1 dec R2 cjne R2,#0,inicializarmisiles ;numero maximo de misiles en los marcianitos mov nummisilesmar,#3 ;Inicialmente no existen misiles mov R0,#posMisilXmar mov R1,#posMisilYmar mov R2,nummisilesmar inicializarmisilesmar: mov @R0,#0 mov @R1,#0 inc R0 inc R1 dec R2 cjne R2,#0,inicializarmisilesmar mov nummarcianitos,#2 ; Inicialmente no existen marcianitos mov R0,#vecposMarcianitoX mov R1,#vecposMarcianitoY mov R2,nummarcianitos inicializarmarcianitos: mov @R0,#0 mov @R1,#0 inc R0 inc R1 dec R2 cjne R2,#0,inicializarmarcianitos ; SITUAMOS NAVE EN POSICION INICIAL mov posXNave,#posXNaveInicial mov posYNave,#posYNaveInicial mov posXNaveAnt,#posXNaveInicial mov posYNaveAnt,#posYNaveInicial ; Inicializamos la nave nodriza mov posNodrizaX,#marcianitonoexiste mov posNodrizaY,#marcianitonoexiste ; LIMITES DE LA PANTALLA mov DPTR,#DirLimInfXVGA mov A,#limInfXPantalla movx @DPTR,A mov DPTR,#DirLimSupXVGA mov A,#limSupXPantalla movx @DPTR,A mov DPTR,#DirLimInfYVGA mov A,#limInfYPantalla movx @DPTR,A mov DPTR,#DirLimSupYVGA mov A,#limSupYPantalla movx @DPTR,A ; LIMPIAMOS PANTALLA DE JUEGO call Limpiarpantalla ; visualizamos los marcadores call visualizarmarcadorpuntos call visualizarmarcadormisiles call visualizarmarcadorvidas ; DIBUJAR NUESTRA NAVE mov tiporectangulo,#naveterrestre mov posXrectangulo,posXnave mov posYrectangulo,posYnave call dibujarrectangulo ; inicializamos el contador software (multiplicador de eventos) mov contSoft,#0 call visualizarmarcadorniveles call visualizarmarcadorpausa mov estadojuego,#estadojugando ret ;************************************************************ ; Procedimiento para dibujar un caracter en la VGA : ; Parametros utiizados (que se pasan por memoria) por esta funcion; ; carYDibujarCaracter: coordenadaY caracter a modificar ; carXDibujarCaracter: coordenadaX caracter a modificar ; codigoDibujarCaracter: codigo del nuevo caracter ; Es necesario que la VGA este encendida y seleccionada para ; modificar la memoria de caracteres y no la de pixels dibujarCaracter: ; seleccionamos memoria de refresco mov DPTR,#DirRegControlVGA mov A,#00000111b movx @DPTR,A ; podemos escribir en la VGA? mov DPTR,#DirRegEstadoVGA poderEscrVGA: movx A,@DPTR anl A,#BufferLlenoVGA jnz poderEscrVGA ; ya podemos escribir mov DPTR,#DirRegDirAltaVGA mov A,carYDibujarCaracter movx @DPTR,A mov DPTR,#DirRegDirBajaVGA mov A,carXDibujarCaracter movx @DPTR,A mov DPTR,#DirRegDatosVGA mov A,codigoDibujarCaracter movx @DPTR,A finDC: ; volvemos ret ;****************************************************************** ; Procedimiento para dibujar un pixel de un caracter en la VGA : ; Parametros utiizados (que se pasan por memoria) por esta funcion; ; codigoDibujarCaracter: codigo del nuevo caracter ; carYDibujarCaracter: coordenadaY caracter a modificar ; carXDibujarCaracter: coordenadaX caracter a modificar ; colorDibujarPixel: color nuevo dibujarPixel: ; seleccionamos memoria de pixel ;mov DPTR,#DirRegControlVGA ;mov A,#00000101b ;movx @DPTR,A ; podemos escribir en la VGA? ;mov DPTR,#DirRegEstadoVGA ;poderEscrVGAPixel: ;movx A,@DPTR ;anl A,#BufferLlenoVGA ;jnz poderEscrVGAPixel ; ya podemos escribir ;mov DPTR,#DirRegDirAltaVGA ;mov A,codigoDibujarCaracter ;movx @DPTR,A ;mov DPTR,#DirRegDirBajaVGA ;mov A,carYDibujarCaracter ;RL A ;RL A ;RL A ;RL A ;anl A,#11110000b ;add A,carXDibujarCaracter ;movx @DPTR,A ;mov DPTR,#DirRegDatosVGA ;mov A,colorDibujarPixel ;movx @DPTR,A ;finDP: ; volvemos ; MEMORIA DE PIXELS: 1c6c5c4c3c2c1c0y2y1y0x3x2x1x0 push 0 ; preparamos DPH (01c6c5c4c3c2c1) mov A,codigoDibujarCaracter RR A anl A,#00111111b add A,#01000000b mov DPH,A ; preparamos DPL (c0y2y1y0x3x2x1x0) mov A,codigoDibujarCaracter RR A anl A,#00000001b ; hemos metido c0_______ mov R0,A mov A,carYDibujarCaracter RL A RL A RL A RL A anl A,#01111000b add A,R0 ; hemos metido c0y2y1y0____ mov R0,A mov A,carXDibujarCaracter anl A,#00001111b ; hemos metido c0y2y1y0x3x2x1x0 add A,R0 mov DPL,A mov A,colorDibujarPixel movx @DPTR,A pop 0 ret ;****************************************************************** ; Procedimiento para enviar un sonido al CODEC : ; Parametros utiizados (que se pasan por memoria) por esta funcion; ; sonido: nota-> formato 0d2d1d0f3f2f1f0 (d->duracion,f->frec) enviarSonido: mov DPTR,#DirRegEstadoCODEC ; esperamos a enviar sonido esperarSonido: movx A,@DPTR anl A,#BufLLenoDesbCODEC jnz esperarSonido ; enviamos sonido mov DPTR,#DirRegDatosCODEC mov A,sonido movx @DPTR,A ret ;****************************************************************** ; Procedimiento para enviar una melodia al CODEC : ; Parametros utiizados (registros) por esta funcion; ; DPTR: direccion donde esta la melodia ; el primer byte debe indicar numero de notas tocarMelodia: push 0 ; guardamos R0 movx A,@DPTR ; numero de notas inc DPTR mov R0,A bucleMelodia: ; comprobacion jz finTocarMelodia ; cojo nota movx A,@DPTR mov sonido,A inc DPTR ; guardo DPTR push DPH push DPL call enviarSonido pop DPL pop DPH ; decrementamos dec R0 mov A,R0 jmp bucleMelodia finTocarMelodia: pop 0; recuperamos R0 ret ;****************************************************************** ; ESCRIBE LOGO para la presentacion ; lo hacemos de manera artesanal para ahorrar memoria interna escribirLOGO: ; bucle para recorrer LOGO ; DPTR apunta al LOGO mov DPTR,#LOGO ; empezamos a rellenar mov R0,#limInfYLogo ; empezamos fila empezarFilaLOGO: mov R1,#limInfXLogo bucleLOGO: ; preparo caracter del LOGO mov carYDibujarCaracter,R0 mov carXDibujarCaracter,R1 movx A,@DPTR mov codigoDibujarCaracter,A ; incremento y guardo, porque se va a destruir al llamar a 'dibujarCaracter' inc DPTR push DPH push DPL call dibujarCaracter ; recupero DPTR pop DPL pop DPH ; hemos llegado al final de la fila? mov A,R1 clr C subb A,#limSupXLogo jz incremFilaLOGO ; incrementamos y seguimos inc R1 jmp bucleLOGO ; hemos llegado al final del todo? incremFilaLOGO: mov A,R0 clr C subb A,#limSupYLogo jz finalLOGO ; incrementamos y seguimos inc R0 jmp empezarFilaLogo ; salimos finalLOGO: reti ;****************************************************************** ; INICIALIZA MELODIA LOGO -> TOCA LAS PRIMEROS 'numNotasLOGOIni' notas inicializarMELPRES: mov DPTR,#MELODIA_LOGO ; cuantas notas tenemos? movx A,@DPTR mov numeroNotasLOGOTotal,A inc DPTR ; num.notas que llevamos en total mov numeroNotasLOGO,#0 ; tocamos las primero 'numNotasLOGOIni' notas mov R0,#0 bucleInicMELPRES: ; comprobacion con el numero de notas iniciales mov A,R0 clr C subb A,#numNotasLOGOIni jz finBucleInicMELPRES ; comprobacion con el numero de notas totales mov A,R0 clr C subb A,numeroNotasLOGOTotal jz finBucleInicMELPRES ; recogemos y enviamos sonido movx A,@DPTR mov sonido,A push DPH push DPL call enviarSonido pop DPL pop DPH ; apuntamos a la siguiente nota inc DPTR ; debemos enviar mas? inc R0 inc numeroNotasLOGO jmp bucleInicMELPRES ; terminamos finBucleInicMELPRES: mov apunDirAltaMELODIA,DPH mov apunDirBajaMELODIA,DPL ret ;****************************************************************** ; ENVIA LAS SIGUIENTES 'numNotasLOGOSec' notas enviarMELPRES: mov R0,#0 mov DPH,apunDirAltaMELODIA mov DPL,apunDirBajaMELODIA bucleEnviarMELPRES: ; hemos llegado al final? ; comprobacion con el numero de notas que toca mov A,R0 clr C subb A,#numNotasLOGOSec jz finBucleEnviarMELPRES ; comprobacion con el numero de notas totales mov A,numeroNotasLOGO clr C subb A,numeroNotasLOGOTotal jz finBucleEnviarMELPRES ; recogemos y enviamos sonido movx A,@DPTR mov sonido,A push DPH push DPL call enviarSonido pop DPL pop DPH ; apuntamos a la siguiente nota inc DPTR ; incrementamos inc R0 inc numeroNotasLOGO jmp bucleEnviarMELPRES finBucleEnviarMELPRES: mov apunDirAltaMELODIA,DPH mov apunDirBajaMELODIA,DPL ret ;****************************************************************** sonidomatarnuestranave: cje numvidas,#2,muert1 cje numvidas,#1,muert2 mov DPTR,#muerte3 jmp llamarmelodiamatar muert1: mov DPTR,#muerte1 jmp llamarmelodiamatar muert2: mov DPTR,#muerte2 llamarmelodiamatar: call tocarmelodia ret ;****************************************************************** ; Procedimiento dibujarrectangulo : dibuja un rectangulo de 3x2 con ; en pantalla a partir de un patron de caracteres dibujarrectangulo: ; dibujamos caracter superior izquierda mov carYDibujarCaracter,posYrectangulo mov A,posXrectangulo dec A mov carXDibujarCaracter,A mov A,tiporectangulo cjne A,#limpieza,sig_tipoA0 mov codigoDibujarCaracter,#carFondopantalla jmp llamadadibujar0 sig_tipoA0: mov A,tiporectangulo cjne A,#naveterrestre,sig_tipoA1 mov codigoDibujarCaracter,#naveCarSupIzq jmp llamadadibujar0 sig_tipoA1: mov A,tiporectangulo cjne A,#navemarcianito,sig_tipoA2 mov codigoDibujarCaracter,#marCarSupIzq jmp llamadadibujar0 sig_tipoA2: mov A,tiporectangulo cjne A,#naveterrestredes,sig_tipoA3 mov codigoDibujarCaracter,#marCarSupIzqdes jmp llamadadibujar0 sig_tipoA3: mov A,tiporectangulo cjne A,#navemarcianitodes,sig_tipoA4 mov codigoDibujarCaracter,#marCarSupIzqdes jmp llamadadibujar0 sig_tipoA4: mov A,tiporectangulo cjne A,#nodriza,sig_tipoA5 mov codigoDibujarCaracter,#NodCarSupIzq jmp llamadadibujar0 sig_tipoA5: ; si ha pasado todas las condiciones es que tiene que ser este mov codigoDibujarCaracter,#marCarSupIzqdes llamadadibujar0: call dibujarCaracter ; dibujamos caracter superior centro mov carYDibujarCaracter,posYrectangulo mov carXDibujarCaracter,posXrectangulo mov A,tiporectangulo cjne A,#limpieza,sig_tipoB0 mov codigoDibujarCaracter,#carFondopantalla jmp llamadadibujar1 sig_tipoB0: mov A,tiporectangulo cjne A,#naveterrestre,sig_tipoB1 mov codigoDibujarCaracter,#naveCarSupCen jmp llamadadibujar1 sig_tipoB1: mov A,tiporectangulo cjne A,#navemarcianito,sig_tipoB2 mov codigoDibujarCaracter,#marCarSupCen jmp llamadadibujar1 sig_tipoB2: mov A,tiporectangulo cjne A,#naveterrestredes,sig_tipoB3 mov codigoDibujarCaracter,#marCarSupCendes jmp llamadadibujar1 sig_tipoB3: mov A,tiporectangulo cjne A,#navemarcianitodes,sig_tipoB4 mov codigoDibujarCaracter,#marCarSupCendes jmp llamadadibujar1 sig_tipoB4: mov A,tiporectangulo cjne A,#nodriza,sig_tipoB5 mov codigoDibujarCaracter,#NodCarSupCen jmp llamadadibujar1 sig_tipoB5: ; si ha pasado todas las condiciones es que tiene que ser este mov codigoDibujarCaracter,#marCarSupCendes llamadadibujar1: call dibujarCaracter ; dibujamos caracter superior derecha mov carYDibujarCaracter,posYrectangulo mov A,posXrectangulo inc A mov carXDibujarCaracter,A mov A,tiporectangulo cjne A,#limpieza,sig_tipoC0 mov codigoDibujarCaracter,#carFondopantalla jmp llamadadibujar2 sig_tipoC0: mov A,tiporectangulo cjne A,#naveterrestre,sig_tipoC1 mov codigoDibujarCaracter,#naveCarSupDer jmp llamadadibujar2 sig_tipoC1: mov A,tiporectangulo cjne A,#navemarcianito,sig_tipoC2 mov codigoDibujarCaracter,#marCarSupDer jmp llamadadibujar2 sig_tipoC2: mov A,tiporectangulo cjne A,#naveterrestredes,sig_tipoC3 mov codigoDibujarCaracter,#marCarSupDerdes jmp llamadadibujar2 sig_tipoC3: mov A,tiporectangulo cjne A,#navemarcianitodes,sig_tipoC4 mov codigoDibujarCaracter,#marCarSupDerdes jmp llamadadibujar2 sig_tipoC4: mov A,tiporectangulo cjne A,#nodriza,sig_tipoC5 mov codigoDibujarCaracter,#NodCarSupDer jmp llamadadibujar2 sig_tipoC5: ; si ha pasado todas las condiciones es que tiene que ser este mov codigoDibujarCaracter,#marCarSupDerdes llamadadibujar2: call dibujarCaracter ; dibujamos caracter inferior izquierda mov A,posYrectangulo inc A mov carYDibujarCaracter,A mov A,posXrectangulo dec A mov carXDibujarCaracter,A mov A,tiporectangulo cjne A,#limpieza,sig_tipoD0 mov codigoDibujarCaracter,#carFondopantalla jmp llamadadibujar3 sig_tipoD0: mov A,tiporectangulo cjne A,#naveterrestre,sig_tipoD1 mov codigoDibujarCaracter,#naveCarInfIzq jmp llamadadibujar3 sig_tipoD1: mov A,tiporectangulo cjne A,#navemarcianito,sig_tipoD2 mov codigoDibujarCaracter,#marCarInfIzq jmp llamadadibujar3 sig_tipoD2: mov A,tiporectangulo cjne A,#naveterrestredes,sig_tipoD3 mov codigoDibujarCaracter,#marCarInfIzqdes jmp llamadadibujar3 sig_tipoD3: mov A,tiporectangulo cjne A,#navemarcianitodes,sig_tipoD4 mov codigoDibujarCaracter,#marCarInfIzqdes jmp llamadadibujar3 sig_tipoD4: mov A,tiporectangulo cjne A,#nodriza,sig_tipoD5 mov codigoDibujarCaracter,#NodCarInfIzq jmp llamadadibujar3 sig_tipoD5: ; si ha pasado todas las condiciones es que tiene que ser este mov codigoDibujarCaracter,#marCarInfIzqdes llamadadibujar3: call dibujarCaracter ; dibujamos caracter inferior centro mov A,posYrectangulo inc A mov carYDibujarCaracter,A mov carXDibujarCaracter,posXrectangulo mov A,tiporectangulo cjne A,#limpieza,sig_tipoE0 mov codigoDibujarCaracter,#carFondopantalla jmp llamadadibujar4 sig_tipoE0: mov A,tiporectangulo cjne A,#naveterrestre,sig_tipoE1 mov codigoDibujarCaracter,#naveCarInfCen jmp llamadadibujar4 sig_tipoE1: mov A,tiporectangulo cjne A,#navemarcianito,sig_tipoE2 mov codigoDibujarCaracter,#marCarInfCen jmp llamadadibujar4 sig_tipoE2: mov A,tiporectangulo cjne A,#naveterrestredes,sig_tipoE3 mov codigoDibujarCaracter,#marCarInfCendes jmp llamadadibujar4 sig_tipoE3: mov A,tiporectangulo cjne A,#navemarcianitodes,sig_tipoE4 mov codigoDibujarCaracter,#marCarInfCendes jmp llamadadibujar4 sig_tipoE4: mov A,tiporectangulo cjne A,#nodriza,sig_tipoE5 mov codigoDibujarCaracter,#NodCarInfCen jmp llamadadibujar4 sig_tipoE5: ; si ha pasado todas las condiciones es que tiene que ser este mov codigoDibujarCaracter,#marCarInfCendes llamadadibujar4: call dibujarCaracter ; dibujamos caracter inferior derecha mov A,posYrectangulo inc A mov carYDibujarCaracter,A mov A,posXrectangulo inc A mov carXDibujarCaracter,A mov A,tiporectangulo cjne A,#limpieza,sig_tipoF0 mov codigoDibujarCaracter,#carFondopantalla jmp llamadadibujar5 sig_tipoF0: mov A,tiporectangulo cjne A,#naveterrestre,sig_tipoF1 mov codigoDibujarCaracter,#naveCarInfDer jmp llamadadibujar5 sig_tipoF1: mov A,tiporectangulo cjne A,#navemarcianito,sig_tipoF2 mov codigoDibujarCaracter,#marCarInfDer jmp llamadadibujar5 sig_tipoF2: mov A,tiporectangulo cjne A,#naveterrestredes,sig_tipoF3 mov codigoDibujarCaracter,#marCarInfDerdes jmp llamadadibujar5 sig_tipoF3: mov A,tiporectangulo cjne A,#navemarcianitodes,sig_tipoF4 mov codigoDibujarCaracter,#marCarInfDerdes jmp llamadadibujar5 sig_tipoF4: mov A,tiporectangulo cjne A,#nodriza,sig_tipoF5 mov codigoDibujarCaracter,#NodCarInfDer jmp llamadadibujar5 sig_tipoF5: ; si ha pasado todas las condiciones es que tiene que ser este mov codigoDibujarCaracter,#marCarInfDerdes llamadadibujar5: call dibujarCaracter ;volvemos ret ;****************************************************************** ; Procedimiento para limpiar inicialmente la pantalla Limpiarpantalla: ; LIMPIAMOS PANTALLA DE JUEGO mov r0,#limInfYPantalla limpiarFila: mov r1,#limInfXPantalla limpiarColumna: ; mandamos escribir mov carYDibujarCaracter,r0 mov carXDibujarCaracter,r1 ; si estamos en margenes, entonces carMargenes cje r0,#limInfYPantalla,dibujarMargenArriba cje r0,#limSupYPantalla,dibujarMargenAbajo cje r0,#posYNaveInicial+2,dibujarMargenCentral cje r1,#limInfXPantalla,dibujarMargenizq cje r1,#limSupXPantalla,dibujarMargenDer mov codigoDibujarCaracter,#carFondoPantalla jmp dibujarFondoYa dibujarMargenArriba: mov codigoDibujarCaracter,#marcladarr jmp dibujarFondoYa dibujarMargenAbajo: mov codigoDibujarCaracter,#marcladaba jmp dibujarFondoYa dibujarMargenCentral: mov codigoDibujarCaracter,#marcladmed jmp dibujarFondoYa dibujarMargenizq: mov codigoDibujarCaracter,#marcladizq jmp dibujarFondoYa dibujarMargender: mov codigoDibujarCaracter,#marcladder dibujarFondoYa: call dibujarCaracter ; incrementamos cje r1,#limSupXPantalla,finFilaInic ; no hemos llegado final fila mov A,r1 inc A mov r1,A jmp limpiarColumna finFilaInic: cje r0,#limSupYPantalla,finInic ; no hemos llegado final pantalla mov A,r0 inc A mov r0,A jmp limpiarFila ; hemos terminado de limpiar finInic: mov carYDibujarCaracter,#limInfYPantalla mov carXDibujarCaracter,#limInfXPantalla mov codigoDibujarCaracter,#marcesqabizq call dibujarCaracter mov carYDibujarCaracter,#limSupYPantalla mov carXDibujarCaracter,#limInfXPantalla mov codigoDibujarCaracter,#marcesqarrizq call dibujarCaracter mov carYDibujarCaracter,#limInfYPantalla mov carXDibujarCaracter,#limSupXPantalla mov codigoDibujarCaracter,#marcesqabder call dibujarCaracter mov carYDibujarCaracter,#limSupYPantalla mov carXDibujarCaracter,#limSupXPantalla mov codigoDibujarCaracter,#marcesqarrder call dibujarCaracter mov carYDibujarCaracter,#posYNaveInicial+2 mov carXDibujarCaracter,#limInfXPantalla mov codigoDibujarCaracter,#marcesqmedizq call dibujarCaracter mov carYDibujarCaracter,#posYNaveInicial+2 mov carXDibujarCaracter,#limSupXPantalla mov codigoDibujarCaracter,#marcesqmedder call dibujarCaracter mov carYDibujarCaracter,#limsupypantalla-1 mov carXDibujarCaracter,#limSupXPantalla-1 mov codigoDibujarCaracter,#misilillo call dibujarCaracter ret ;************************ ; Procedimiento que mueve la nave y dispara los misiles movimientonuestranave: mov A,mapaTeclaIzq cjne A,#estadoTeclaPulsada,compIzqEsperando ; marcamos pulsada->consumida mov mapaTeclaIzq,#estadoTeclaConsumida jmp moverNaveIzq compIzqEsperando: cjne A,#estadoTeclaEsperando,mirartecladerecha ; marcamos esperando->soltada mov mapaTeclaIzq,#estadoTeclaSoltada ; tecla izq pulsada (comprobamos si es el limite izquierdo) moverNaveIzq: cje posXNave,#limNaveizq,mirartecladerecha ; movemos la nave ;modificamos posicion anterior mov posXNaveAnt,posXNave mov A,posXNave clr C subb A,#rgmovnaves mov posXNave,A jmp fincomprobartecla mirartecladerecha: mov A,mapaTeclaDer cjne A,#estadoTeclaPulsada,compDerEsperando ; marcamos pulsada->consumida mov mapaTeclaDer,#estadoTeclaConsumida jmp moverNaveDer compDerEsperando: cjne A,#estadoTeclaEsperando,mirartecladisparo ; marcamos esperando->soltada mov mapaTeclaDer,#estadoTeclaSoltada ; tecla der pulsada (comprobamos si es el limite derecho) moverNaveDer: cje posXNave,#limNaveder,mirartecladisparo ; movemos mov posXNaveAnt,posXNave mov A,posXNave add A,#rgmovnaves mov posXNave,A jmp fincomprobartecla mirartecladisparo: mov A,mapaTeclaDisp cjne A,#estadoTeclaPulsada,compDispEsperando ; marcamos pulsada->consumida mov mapaTeclaDisp,#estadoTeclaConsumida jmp dispararNave compDispEsperando: cjne A,#estadoTeclaEsperando,finComprobarTecla ; marcamos esperando->soltada mov mapaTeclaDisp,#estadoTeclaSoltada dispararNave: ; no disparamos en caso de que no tengamos misiles mov A,unidadMisiles jnz poderDisparar mov A,decenaMisiles jnz poderDisparar mov A,centenaMisiles jnz poderDisparar jmp finComprobarTecla poderDisparar: ; disparamos el misil en caso de que no este en la misma linea que tu mov R0,#posMisilX mov R2,nummisiles inbuclecompcolumna: cje @R0,posXNave,fincomprobartecla inc R0 dec R2 cjne R2,#0,inbuclecompcolumna mov R0,#posMisilX mov R1,#posMisilY mov R2,nummisiles inbuclecogermisil: mov A,@R0 jnz siguientemisil mov @R0,posXnave mov @R1,posYnave call decremMisiles call visualizarmarcadormisiles ; sonido del disparo mov DPTR,#disparo call tocarmelodia jmp fincomprobartecla siguientemisil: inc R0 inc R1 dec R2 cjne R2,#0,inbuclecogermisil fincomprobartecla: ret ;***************************************************** movimientomisiles: ; Movimiento de los misiles mov A,verquemisiles jnz inimisilmar mov R0,#posMisilX mov R1,#posMisilY mov R2,nummisiles jmp iniciobuclemisiles inimisilmar: mov R0,#posMisilXmar mov R1,#posMisilYmar mov R2,nummisilesmar iniciobuclemisiles: mov A,@R0 jz sigmisil ; Comprobar que no se sale el misil de la pantalla mov A,verquemisiles jnz comprobarlimmisilmar cjne @R1,#limjuegoInf,Avanzarmisil jmp elimmovmisil comprobarlimmisilmar: mov A,@R1 cjne A,posYNave,Avanzarmisil elimmovmisil: mov @R0,#0 mov @R1,#0 jmp sigmisil Avanzarmisil: mov A,verquemisiles jnz avanzarmisilmarciano mov A,@R1 clr C subb A,#rgmovmisiles mov @R1,A jmp sigmisil Avanzarmisilmarciano: mov A,@R1 add A,#rgmovmisiles mov @R1,A sigmisil: inc R0 inc R1 dec R2 cjne R2,#0,iniciobuclemisiles finmovimientomisiles: ret ;****************************************************************** ; funcion que crea un marcianito en la pantalla de juego crearmarcianito: push 0 push 1 mov DPTR,#Diralea hallarposX: movx A,@DPTR ; rotamos y hacemos la mascara (para que sea mas aleatorio el LFSR) anl A,#00000011b mov R0,A cje R0,#00000011b,hallarposX ; Ahora tenemos en R0 el bit de la posici¢n X hallarposY: movx A,@DPTR anl A,#00000011b mov R1,A cje R1,#00000011b,hallarposY ; Ahora tenemos en R1 el bit de la posici¢n Y cje R0,#0,aleapos1x cje R0,#1,aleapos2x mov iniposx,#pos3xini jmp inicialposY aleapos1x: mov iniposx,#pos1xini jmp inicialposY aleapos2x: mov iniposx,#pos2xini inicialposY: cje R1,#0,aleapos1y cje R1,#1,aleapos2y mov iniposy,#pos3yini jmp finalcrearmarcianito aleapos1y: mov iniposy,#pos1yini jmp finalcrearmarcianito aleapos2y: mov iniposy,#pos2yini finalcrearmarcianito: pop 1 pop 0 ret ;****************************************************************** fabricarmarcianitos: mov R0,#vecposMarcianitoX mov R1,#vecposMarcianitoY mov R2,nummarcianitos mov R3,#vecposMarcianitoXant mov R4,#vecposMarcianitoYant inibucfabmarcianitos: mov A,@R0 jnz sigmarcianofab ; hemos encontrado un marciano que se ha muerto anteriormente (pos. libre) ; recordar que vamos a poner una probabilidad de crear un marciano ; en estos momentos es de un 50% mov DPTR,#Diralea movx A,@DPTR anl A,#00000001b jz sigmarcianofab generarposini: call crearmarcianito ; comprobamos si no existe un marcianito en esa posicion mov existexobj,iniposx mov existeyobj,iniposy mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jnz generarposini ; comprobamos si no existe un misil en esa posicion mov existexobj,iniposx mov existeyobj,iniposy mov tipoexiste,#existeobjmisilter call existeobjetoenpos mov A,existeobj jnz generarposini mov @R0,iniposx mov @R1,iniposy swapr R0,R3 swapr R1,R4 mov @R0,#marcianitonoexiste mov @R1,#marcianitonoexiste swapr R0,R3 swapr R1,R4 sigmarcianofab: inc R0 inc R1 dec R2 inc R3 inc R4 cjne R2,#0,inibucfabmarcianitos finfabricarmarcianitos: ret ;****************************************************************** fabricarnodriza: mov A,posnodrizaX jnz finfabricarnodriza ; la nave nodriza ha desaparecido o muerto ; recordar que vamos a poner una probabilidad para crearla ; la probabilidad actual es de un 25% mov DPTR,#Diralea movx A,@DPTR anl A,#00000011b jnz finfabricarnodriza generarposininod: call crearmarcianito ; comprobamos si no existe un misil en esa posicion mov existexobj,iniposx mov existeyobj,#posyNodrizainicial mov tipoexiste,#existeobjmisilter call existeobjetoenpos mov A,existeobj jnz generarposininod mov posNodrizaX,iniposx mov posNodrizaY,#posyNodrizaInicial mov posNodrizaXant,#marcianitonoexiste mov posNodrizaYant,#marcianitonoexiste finfabricarnodriza: ret ;****************************************************************** reconstruirnuestranave: mov A,posXnave cjne A,#marcianitonoexiste,fin_reconstruirnave ; vemos si tenemos vidas suficientes mov A,numvidas jz findejuego ; reconstruirmos la nave mov posXnave,#posXnaveInicial mov posYnave,#posYnaveInicial mov posXnaveAnt,#marcianitonoexiste call visualizarnuestranave jmp fin_reconstruirnave findejuego: mov estadojuego,#estadoterminado call visualizargameover fin_reconstruirnave: ret ;****************************************************************** ; PARAMETROS para la funcion cogernumeroaleatorio cogernumeroaleatorio: mov DPTR,#Diralea movx A,@DPTR mov numeroalea,A ret ;****************************************************************** existeobjetoenpos: ; comprobamos si existe un objeto determinado en una posici¢n del juego ; guardamos los registros R0-R2 push 0 push 1 push 2 cje tipoexiste,#existeobjmarciano,iniciaexistmarciano cje tipoexiste,#existeobjmisilter,iniciaexistmisilter mov R0,#posMisilXmar mov R1,#posMisilYmar mov R2,nummisilesmar jmp inbucobjcompexist iniciaexistmarciano: mov R0,#vecposMarcianitoX mov R1,#vecposMarcianitoY mov R2,nummarcianitos jmp inbucobjcompexist iniciaexistmisilter: mov R0,#posMisilX mov R1,#posMisilY mov R2,nummisiles inbucobjcompexist: mov A,@R0 cjne A,existexobj,sigcompobjexiste cje @R1,existeyobj,realmenteexisteobj sigcompobjexiste: inc R0 inc R1 dec R2 cjne R2,#0,inbucobjcompexist jmp nohaynadaobj realmenteexisteobj: mov existeobj,#1 jmp finexisteobj nohaynadaobj: mov existeobj,#0 finexisteobj: ; recuperamos los registros R2-R0 pop 2 pop 1 pop 0 ret ;****************************************************************** ; PARAMETROS para la funcion borrarmarcianoenpos borrarmarcianoenpos: ; guardamos los registros R0-R2 push 0 push 1 push 2 mov R0,#vecposMarcianitoX mov R1,#vecposMarcianitoY mov R2,nummarcianitos inbucmarcompborrar: mov A,@R0 cjne A,borrarxmar,sigcompmarborrar cje @R1,borrarymar,realmenteborrar sigcompmarborrar: inc R0 inc R1 dec R2 cjne R2,#0,inbucmarcompborrar realmenteborrar: mov @R0,#marcianitoexplotado mov @R1,#marcianitoexplotado ; recuperamos los registros R2-R0 pop 2 pop 1 pop 0 ret ;****************************************************************** dispararmisilmarciano: push 0 push 1 push 2 mov R0,#posMisilXmar mov R1,#posMisilYmar mov R2,nummisilesmar inbucledispmisilmar: mov A,@R0 jnz sigdispmisilmar ; comprobamos si ya hay un misil en esa posicion ; si lo hay directamente pasamos de disparar mov existexobj,misilmarcianoX mov existeyobj,misilmarcianoY mov tipoexiste,#existeobjmisilmar call existeobjetoenpos mov A,existeobj jnz findispararmisilmarciano movr @R0,misilmarcianoX movr @R1,misilmarcianoY jmp findispararmisilmarciano sigdispmisilmar: inc R0 inc R1 dec R2 cjne R2,#0,inbucledispmisilmar findispararmisilmarciano: pop 2 pop 1 pop 0 ret ;****************************************************************** ; NOTA : Actualmente el programa comprueba para cada marcianito una posici¢n ; libre. En caso de que este ocupada se redefine otra posici¢n y as¡ ; sucesivamente. De todas formas, siempre se podr  disparar. movimientomarcianitos: ; Movimiento de los marcianitos mov R0,#vecposMarcianitoX mov R1,#vecposMarcianitoY mov R2,nummarcianitos iniciobuclemarcianitos: mov A,@R0 ; => jz sigmarciano (salto > 128) jz etiqsigmarciano jmp etiqcompmar etiqsigmarciano: jmp sigmarciano etiqcompmar: ; comprobamos si el marcianito esta en estado de explosionado cje @R0,#marcianitoexplotado,etiqsigmarciano ; comprobamos si el marcianito esta en estado de eliminado cje @R0,#marcianitoeliminado,etiqsigmarciano Avanzarmarciano: call cogernumeroaleatorio anl numeroalea,#00000011b cje numeroalea,#acc_izq,movizquierda cje numeroalea,#acc_der,movderecha cje numeroalea,#acc_aba,movabajo movdisparo: ;disparamos un disparo del marciano mov misilmarcianoX,@R0 mov misilmarcianoY,@R1 call dispararmisilmarciano jmp sigmarciano movizquierda: ; comprobamos si no puede avanzar mas debido a que esta en el limite izquierdo cje @R0,#limNaveizq,avanzarmarciano mov A,@R0 clr C subb A,#rgmovnaves mov R3,A ; comprobamos si existe un marciano en esa nueva posicion mov existexobj,R3 mov existeyobj,@R1 mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jnz avanzarmarciano ; comprobamos si no existe un misil en esa nueva posicion mov existexobj,R3 mov existeyobj,@R1 mov tipoexiste,#existeobjmisilter call existeobjetoenpos mov A,existeobj jnz avanzarmarciano movr @R0,R3 jmp sigmarciano movderecha: cje @R0,#limNaveder,avanzarmarciano mov A,@R0 add A,#rgmovnaves mov R3,A ; comprobamos si no existe un marciano en esa posici¢n mov existexobj,R3 mov existeyobj,@R1 mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jnz avanzarmarciano ; comprobamos si no existe un misil en esa nueva posicion mov existexobj,R3 mov existeyobj,@R1 mov tipoexiste,#existeobjmisilter call existeobjetoenpos mov A,existeobj jnz avanzarmarciano movr @R0,R3 jmp sigmarciano movabajo: cje @R1,#limjuegosup,morirmarciano mov A,@R1 add A,#rgmovmisiles mov R3,A ; comprobamos si no existe un marciano en esa posici¢n mov existeyobj,R3 mov existexobj,@R0 mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jnz etiqavanzarmarciano ; comprobamos si no existe un misil en esa nueva posicion mov existeyobj,R3 mov existexobj,@R0 mov tipoexiste,#existeobjmisilter call existeobjetoenpos mov A,existeobj jnz etiqavanzarmarciano ; salto >128 jnz avanzarmarciano jmp sigetiqavanzarmarciano etiqavanzarmarciano: jmp avanzarmarciano sigetiqavanzarmarciano: movr @R1,R3 jmp sigmarciano morirmarciano: mov tiporectangulo,#limpieza mov posXrectangulo,@R0 mov posYrectangulo,@R1 call dibujarrectangulo mov posXnave,#marcianitoexplotado ; el marcianito se suicida mov @R0,#marcianitoexplotado mov @R1,#marcianitoexplotado ; decrementamos si tenemos vidas disponibles dec numvidas ; sonido de nuestra muerte call sonidomatarnuestranave cje numvidas,#0,sigmarciano call visualizarmarcadorvidas sigmarciano: inc R0 inc R1 dec R2 ; => cjne R2,#0,iniciobuclemarcianitos (salto > 128) cjne R2,#0,saltoinibucmar jmp finmovimientomarcianitos saltoinibucmar: jmp iniciobuclemarcianitos finmovimientomarcianitos: ret ;****************************************************************** movimientonodriza: mov A,posnodrizaX jz finmovimientonodriza ; comprobamos si la nodriza esta en estado explosionado cje posnodrizaX,#marcianitoexplotado,finmovimientonodriza ; comprobamos si la nodriza esta en estado de eliminado cje posnodrizaX,#marcianitoeliminado,finmovimientonodriza Avanzarnodriza: call cogernumeroaleatorio anl numeroalea,#00000001 cje numeroalea,#acc_izq,movizquierdanodriza cje numeroalea,#acc_der,movderechanodriza movizquierdanodriza: cje posNodrizaX,#limNaveizq,desaparecernodriza mov A,posnodrizaX clr C subb A,#rgmovnaves mov R3,A ; comprobamos si no existe un misil en esa nueva posicion mov existexobj,R3 mov existeyobj,posNodrizaY mov tipoexiste,#existeobjmisilter call existeobjetoenpos mov A,existeobj jnz movderechanodriza mov posNodrizaX,R3 ; sonido de la nave nodriza en movimiento mov DPTR,#movnodriza call tocarmelodia jmp finmovimientonodriza movderechanodriza: cje posNodrizaX,#limNaveder,desaparecernodriza mov A,posnodrizaX add A,#rgmovnaves mov R3,A ; comprobamos si no existe un misil en esa nueva posicion mov existexobj,R3 mov existeyobj,posNodrizaY mov tipoexiste,#existeobjmisilter call existeobjetoenpos mov A,existeobj jnz movizquierdanodriza mov posNodrizaX,R3 ; sonido de la nave nodriza en movimiento mov DPTR,#movnodriza call tocarmelodia jmp finmovimientonodriza desaparecernodriza: mov posNodrizaX,#marcianitonoexiste mov posNodrizaY,#marcianitonoexiste finmovimientonodriza: ret ;****************************************************************** visualizarnodriza: cje posNodrizaX,posNodrizaXAnt,finvisualizarnodriza compsidestrozadonod: mov A,posNodrizaX cjne A,#marcianitoexplotado,compsihayqueborrarnod ;visualizar naves nodriza estrofundiada mov tiporectangulo,#navemarcianitodes mov posXrectangulo,posNodrizaXant mov posYrectangulo,posNodrizaYant call dibujarrectangulo ; marcamos porque en el proximo estado tenemos que borrarlo mov posNodrizaX,#marcianitoeliminado mov posNodrizaY,#marcianitoeliminado jmp finvisualizarnodriza compsihayqueborrarnod: mov A,posNodrizaX cjne A,#marcianitoeliminado,dibujarnodriza mov tiporectangulo,#limpieza mov posXrectangulo,posNodrizaXant mov posYrectangulo,posNodrizaYant call dibujarrectangulo mov posNodrizaX,#marcianitonoexiste mov posNodrizaY,#marcianitonoexiste jmp finvisualizarnodriza dibujarnodriza: mov tiporectangulo,#limpieza mov posXrectangulo,posnodrizaXant mov posYrectangulo,posnodrizaYant call dibujarrectangulo ; la dibujamos si esta dentro del limite de la pantalla cje posNodrizaX,#limnaveizq-rgmovnaves,finvisualizarnodriza cje posNodrizaX,#limnaveder+rgmovnaves,finvisualizarnodriza ; la posicion de la y siempre es la misma mov tiporectangulo,#nodriza mov posXrectangulo,posNodrizaX mov posYrectangulo,posNodrizaY call dibujarrectangulo ; actualizamos la posici¢n anterior mov posnodrizaXant,posnodrizaX mov posnodrizaYant,posnodrizaY finvisualizarnodriza: ret ;****************************************************************** visualizarnuestranave: mov A,posXNave jz finvisualizarnuestranave compsidado: cjne A,#marcianitoexplotado,compsieliminar mov tiporectangulo,#navemarcianitodes mov posXrectangulo,posXnaveAnt mov posYrectangulo,posYnaveAnt call dibujarrectangulo ; marcamos porque en el proximo estado tenemos que borrarlo mov posXNave,#marcianitoeliminado mov posYNave,#marcianitoeliminado jmp finvisualizarnuestranave compsieliminar: mov A,posXNave cjne A,#marcianitoeliminado,dibujarnaverealmente mov tiporectangulo,#limpieza mov posXrectangulo,posXNaveAnt mov posYrectangulo,posYNaveAnt call dibujarrectangulo mov posXNave,#marcianitonoexiste mov posYNave,#marcianitonoexiste jmp finvisualizarnuestranave dibujarnaverealmente: mov A,posXnave cjne A,posXnaveAnt,dibujarnavecita mov A,posYnave cjne A,posYnaveAnt,dibujarnavecita jmp finvisualizarnuestranave dibujarnavecita: mov tiporectangulo,#limpieza mov posXrectangulo,posXnaveant mov posYrectangulo,posYnaveant call dibujarrectangulo mov tiporectangulo,#naveterrestre mov posXrectangulo,posXnave mov posYrectangulo,posYnave call dibujarrectangulo ; actualizamos la posici¢n anterior mov posXnaveant,posXnave mov posYnaveant,posYnave finvisualizarnuestranave: ret ;***************************************************** ; Procedimientos para visualizar misiles visualizarmisiles: mov R0,#posMisilX mov R1,#posMisilY mov R2,nummisiles iniciobuclevismis: ; Visualizaci¢n de los misiles (si es que existen) mov A,@R0 jz sigmisilvis ; Lo visualizamos cje @R1,#limjuegoInf,borrarestela dibujarmisilaco: ;dibujamos la parte superior izquierda mov carXDibujarCaracter,@R0 dec carXDibujarCaracter mov carYDibujarCaracter,@R1 mov codigoDibujarCaracter,#carMisilsup call dibujarCaracter ;dibujamos la parte inferior izquierda inc carYDibujarCaracter mov codigoDibujarCaracter,#carMisilinf call dibujarCaracter ;dibujamos la parte superior derecha mov carXDibujarCaracter,@R0 inc carXDibujarCaracter mov carYDibujarCaracter,@R1 mov codigoDibujarCaracter,#carMisilsup call dibujarCaracter ;dibujamos la parte inferior derecha inc carYDibujarCaracter mov codigoDibujarCaracter,#carMisilinf call dibujarCaracter ;borramos la estela en caso de que no acabemos de lanzar el misil borrarestela: mov A,posYNave clr C subb A,#rgmovmisiles clr C subb A,@R1 jz sigmisilvis ; limpiamos la parte izquierda superior mov carXDibujarCaracter,@R0 dec carXDibujarCaracter mov A,@R1 add A,#rgmovmisiles mov CarYDibujarCaracter,A mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ; limpiamos la parte izquiera inferior inc carYDibujarCaracter mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ;limpiamos la parte superior derecha mov carXDibujarCaracter,@R0 inc carXDibujarCaracter mov A,@R1 add A,#rgmovmisiles mov CarYDibujarCaracter,A mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ; limpiamos la parte inferior derecha inc carYDibujarCaracter mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter sigmisilvis: inc R0 inc R1 dec R2 cjne R2,#0,iniciobuclevismis finvisualizarmisiles: ret ;****************************************************************** ; Procedimientos para visualizar misiles de los marcianitos visualizarmisilesmar: mov R0,#posMisilXmar mov R1,#posMisilYmar mov R2,nummisilesmar iniciobuclevismismar: ; Visualizaci¢n de los misiles (si es que existen) mov A,@R0 jz sigmisilvismar ; Lo visualizamos si en esa posicion no existe un marcianito mov existexobj,@R0 mov existeyobj,@R1 mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jnz borrarestelamar ; comprobamos si no estamos en la posicion de la nave cje @R1,posYNave,borrarestelamar dibujarmisilacomar: ;dibujamos la parte superior mov carXDibujarCaracter,@R0 mov carYDibujarCaracter,@R1 mov codigoDibujarCaracter,#carrayosup call dibujarCaracter ;dibujamos la parte inferior inc carYDibujarCaracter mov codigoDibujarCaracter,#carrayoinf call dibujarCaracter ; borramos la estela en caso de que no acabemos de lanzar el misil ; lo que hay que hacer es comprobar si en la posicion anterior existe ; un marcianito borrarestelamar: mov existexobj,@R0 mov A,@R1 clr C subb A,#rgmovmisiles mov existeyobj,A mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jnz sigmisilvismar ; ahora comprobamos si existe la nave nodriza, que tambi‚n es posible ; posicion x de la nave nodriza mov A,@R0 cjne A,posNodrizaX,limpiezaseguramisil ; posicion y de la nave nodriza mov A,@R1 clr C subb A,#rgmovmisiles cjne A,posNodrizaY,limpiezaseguramisil jmp sigmisilvismar limpiezaseguramisil: ; limpiamos la parte superior mov carXDibujarCaracter,@R0 mov A,@R1 clr C subb A,#rgmovmisiles mov CarYDibujarCaracter,A mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ; limpiamos la parte inferior inc carYDibujarCaracter mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter sigmisilvismar: inc R0 inc R1 dec R2 cjne R2,#0,iniciobuclevismismar finvisualizarmisilesmar: ret ;****************************************************************** ; Procedimientos para visualizar marcianitos visualizarmarcianitos: mov R0,#vecposMarcianitoX mov R1,#vecposMarcianitoY mov R2,nummarcianitos mov R3,#vecposMarcianitoXant mov R4,#vecposMarcianitoYant iniciobuclemarvis: ; Visualizaci¢n de los marcianitos (si es que existen) mov A,@R0 jnz compsidestrozado ; = jz sigmarvis (salto largo > 128) jmp sigmarvis compsidestrozado: cjne @R0,#marcianitoexplotado,compsihayqueborrar ;visualizar naves estrofundiada swapr R0,R3 swapr R1,R4 mov tiporectangulo,#navemarcianitodes mov posXrectangulo,@R0 mov posYrectangulo,@R1 swapr R0,R3 swapr R1,R4 call dibujarrectangulo ; marcamos porque en el proximo estado tenemos que borrarlo mov @R0,#marcianitoeliminado mov @R1,#marcianitoeliminado jmp sigmarvis compsihayqueborrar: cjne @R0,#marcianitoeliminado,composiciones swapr R0,R3 swapr R1,R4 mov tiporectangulo,#limpieza mov posXrectangulo,@R0 mov posYrectangulo,@R1 swapr R0,R3 swapr R1,R4 call dibujarrectangulo mov @R0,#marcianitonoexiste mov @R1,#marcianitonoexiste composiciones: ; Lo visualizamos ; comprobamos si la x actual y la anterior es diferente movr R5,@R0 swapr R0,R3 movr R6,@R0 swapr R0,R3 mov varmacro,R6 mov A,R5 cjne A,varmacro,pintarmarciano ; comprobamos si la y actual y la anterior es diferente movr R5,@R1 swapr R1,R4 movr R6,@R1 swapr R1,R4 mov varmacro,R6 mov A,R5 cjne A,varmacro,pintarmarciano jmp sigmarvis pintarmarciano: swapr R0,R3 swapr R1,R4 mov tiporectangulo,#limpieza mov posXrectangulo,@R0 mov posYrectangulo,@R1 swapr R0,R3 swapr R1,R4 call dibujarrectangulo ; comprobamos si el marciano ha sido explotado mov A,@R0 setb C subb A,#0 jz despuesdibujarmar mov tiporectangulo,#navemarcianito mov posXrectangulo,@R0 mov posYrectangulo,@R1 call dibujarrectangulo jmp igualarpos ; el marciano ahora tiene que desaparecer despuesdibujarmar: mov @R0,#marcianitonoexiste mov @R1,#marcianitonoexiste jmp sigmarvis igualarpos: ;igualamos la posicion anterior del marcianito con la posicion actual ;posicion x movr R5,@R0 swapr R3,R0 movr @R0,R5 swapr R3,R0 ;posicion y movr R5,@R1 swapr R4,R1 movr @R1,R5 swapr R4,R1 sigmarvis: inc R0 inc R1 inc R3 inc R4 dec R2 ;= cjne R2,#0,iniciobuclemarvis (salto largo de nuevo) cjne R2,#0,saltolarbuclemarvis jmp finvisualizarmarcianitos saltolarbuclemarvis: jmp iniciobuclemarvis finvisualizarmarcianitos: ret ;****************************************************************** ; Procedimientos para detectarcolisiones detectarcolisiones: mov R0,#posMisilX mov R1,#posMisilY mov R2,nummisiles iniciobucledetectarcolisiones: ; Visualizaci¢n de los misiles (si es que existen) mov A,@R0 jz etiqsigmisildetectar jmp etiqvismis etiqsigmisildetectar: jmp sigmisildetectar etiqvismis: ; Lo visualizamos ; comprobamos si existe un marcianito en esa posicion mov existexobj,@R0 mov existeyobj,@R1 mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jz etiqmisilblanco ; damos a un marcianito, el misil desaparece jmp borrarnavecol etiqmisilblanco: ; eliminamos el misil en caso de que haya dado en el blanco jmp sigmisildetectar borrarnavecol: ; eliminamos la nave mov borrarxmar,@R0 mov borrarymar,@R1 call borrarmarcianoenpos ; sonido de la nave estrofundiada mov DPTR,#matamarciano call tocarmelodia ; sumamos los puntos en funci¢n de la distancia cjne @R1,#limjuegosup,sigfila1 mov incrempuntos,#1 jmp eliminarmisil sigfila1: cjne @R1,#limjuegosup-2,sigfila2 mov incrempuntos,#2 jmp eliminarmisil sigfila2: cjne @R1,#limjuegosup-4,sigfila3 mov incrempuntos,#3 jmp eliminarmisil sigfila3: cjne @R1,#limjuegosup-6,sigfila4 mov incrempuntos,#4 jmp eliminarmisil sigfila4: mov incrempuntos,#5 eliminarmisil: call actualizarpuntos call visualizarmarcadorpuntos ; eliminacion del misil mov A,posYNave clr C subb A,#rgmovmisiles clr C subb A,@R1 jz antessigmisildetectar ; limpiamos la parte izquierda superior mov carXDibujarCaracter,@R0 dec carXDibujarCaracter mov A,@R1 add A,#rgmovmisiles mov CarYDibujarCaracter,A mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ; limpiamos la parte izquiera inferior inc carYDibujarCaracter mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ;limpiamos la parte superior derecha mov carXDibujarCaracter,@R0 inc carXDibujarCaracter mov A,@R1 add A,#rgmovmisiles mov CarYDibujarCaracter,A mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ; limpiamos la parte inferior derecha inc carYDibujarCaracter mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter antessigmisildetectar: mov @R0,#0 mov @R1,#0 sigmisildetectar: inc R0 inc R1 dec R2 cjne R2,#0,etiqiniciobucledetectarcolisiones jmp findetectarcolisiones etiqiniciobucledetectarcolisiones: jmp iniciobucledetectarcolisiones findetectarcolisiones: ret ;******************************************************* ; Procedimientos para detectarcolisiones detectarcolisionesmar: mov R0,#posMisilXmar mov R1,#posMisilYmar mov R2,nummisilesmar iniciobucdetectarcolisionesmar: ; Visualizaci¢n de los misiles (si es que existen) mov A,@R0 jz sigmisildetectarmar ; comprobamos si el misil actual choca con la nave mov A,@R1 cjne A,posYnave,sigmisildetectarmar mov A,@R0 cjne A,posXnave,sigmisildetectarmar ; el misil ha dado en el blanco, eliminamos el misil ; borramos su estela si en esa posici¢n no existe una nave mov existexobj,@R0 mov A,@R1 clr C subb A,#rgmovmisiles mov existeyobj,A mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jnz elimmisil ; limpiamos la parte superior mov carXDibujarCaracter,@R0 mov A,@R1 clr C subb A,#rgmovmisiles mov CarYDibujarCaracter,A mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ; limpiamos la parte inferior inc carYDibujarCaracter mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter elimmisil: mov @R0,#0 mov @R1,#0 mov posXnave,#marcianitoexplotado mov posYnave,#marcianitoexplotado dec numvidas call sonidomatarnuestranave cje numvidas,#0,sigmisildetectarmar call visualizarmarcadorvidas sigmisildetectarmar: inc R0 inc R1 dec R2 cjne R2,#0,iniciobucdetectarcolisionesmar ret ;******************************************************* ; Procedimientos para detectar colisiones con la nave nodriza detectarcolisionesnodriza: mov R0,#posMisilX mov R1,#posMisilY mov R2,nummisiles inibucledetectarcolnodriza: mov A,@R0 jz sigmisildetectarnod ; comprobamos si la nave nodriza esta en esa posicion mov A,@R0 cjne A,posNodrizaX,sigmisildetectarnod mov A,@R1 cjne A,posNodrizaY,sigmisildetectarnod ; Hemos dado a la nave nodriza ; la eliminamos pues mov posnodrizaX,#marcianitoexplotado mov posnodrizaY,#marcianitoexplotado ; sonido de la nave nodriza estrofundiada mov DPTR,#matanodriza call tocarmelodia ; sumamos los puntos en funci¢n de la distancia mov incrempuntos,#10 call actualizarpuntos call visualizarmarcadorpuntos ; eliminamos el misil ya que ha dado en el blanco mov existexobj,@R0 mov A,@R1 add A,#rgmovmisiles mov existeyobj,A mov tipoexiste,#existeobjmarciano call existeobjetoenpos mov A,existeobj jnz elimmisilnod ; limpiamos la parte izquierda superior mov carXDibujarCaracter,@R0 dec carXDibujarCaracter mov A,@R1 add A,#rgmovmisiles mov CarYDibujarCaracter,A mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ; limpiamos la parte izquiera inferior inc carYDibujarCaracter mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ;limpiamos la parte superior derecha mov carXDibujarCaracter,@R0 inc carXDibujarCaracter mov A,@R1 add A,#rgmovmisiles mov CarYDibujarCaracter,A mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter ; limpiamos la parte inferior derecha inc carYDibujarCaracter mov codigoDibujarCaracter,#carFondoPantalla call dibujarCaracter elimmisilnod: mov @R0,#0 mov @R1,#0 sigmisildetectarnod: inc R0 inc R1 dec R2 cjne R2,#0,inibucledetectarcolnodriza findetectarcolisionesnodriza: ret ;******************************************************* ; Decrementar misiles -> decrementa 1 el contador de puntos y lo ; actualiza en pantalla en la posicion PosXContMisiles,PosYContMisiles decremMisiles: ; decrementar unidades dec unidadMisiles ; nos hemos pasado mov A,unidadMisiles cjne A,#255,finDecremMisiles ; decrementar decenas mov unidadMisiles,#9 dec decenaMisiles ; nos hemos pasado mov A,decenaMisiles cjne A,#255,finDecremMisiles ; decrementar centenas mov decenaMisiles,#9 dec centenaMisiles ; nos hemos pasado mov A,centenaMisiles cjne A,#255,finDecremMisiles mov centenaMisiles,#9 ; todo a 0, hemos llegado al fin mov unidadMisiles,#0 mov decenaMisiles,#0 mov centenaMisiles,#0 finDecremMisiles: ; actualizamos en pantalla mov carYDibujarCaracter,#PosYContMisiles mov carXDibujarCaracter,#PosXContMisiles mov codigoDibujarCaracter,centenaMisiles call dibujarCaracter mov carYDibujarCaracter,#PosYContMisiles mov carXDibujarCaracter,#PosXContMisiles+1 mov codigoDibujarCaracter,decenaMisiles call dibujarCaracter mov carYDibujarCaracter,#PosYContMisiles mov carXDibujarCaracter,#PosXContMisiles+2 mov codigoDibujarCaracter,unidadMisiles call dibujarCaracter ret ;******************************************************* ; Actualizar misiles -> suma 'incremMisiles' al contador de misiles y ; lo actualiza en pantalla en la posicion PosXContMisiles,PosYContMisiles ; Debido a que el incremento es de 0-99 podemos, controlar la normalizacion actualizarMisiles: ; debo obtener unidad y decena por separado mov A,incremMisiles mov B,#10 div AB ; en A el cociente -> decena ; en B el resto -> unidad add A,decenaMisiles mov decenaMisiles,A mov A,unidadMisiles add A,B mov unidadMisiles,A clr C subb A,#10 jc normDecenasMisiles ; normalizar unidades mov unidadMisiles,A inc decenaMisiles normDecenasMisiles: mov A,decenaMisiles clr C subb A,#10 jc finActualizarMisiles ; normalizar decenas mov decenaMisiles,A inc centenaMisiles mov A,centenaMisiles clr C subb A,#10 jc finActualizarMisiles ; normalizar centenas mov centenaMisiles,A finActualizarMisiles: ret ;****************************************************************** ; Actualizar puntos -> suma 'incremPuntos' al contador de puntos y ; lo actualiza en pantalla en la posicion PosXContPuntos,PosYContPuntos ; Debido a que el incremento es de 0-99 podemos, controlar la normalizacion ;******************************************************* actualizarPuntos: ; debo obtener unidad y decena por separado mov A,incremPuntos mov B,#10 div AB ; en A el cociente -> decena ; en B el resto -> unidad add A,decenaPuntos mov decenaPuntos,A mov A,unidadPuntos add A,B mov unidadPuntos,A clr C subb A,#10 jc normDecenasPuntos ; normalizar unidades mov unidadPuntos,A inc decenaPuntos normDecenasPuntos: mov A,decenaPuntos clr C subb A,#10 jc finActualizarPuntos ; normalizar decenas mov decenaPuntos,A inc centenaPuntos mov A,centenaPuntos clr C subb A,#10 jc finActualizarPuntos ; normalizar centenas mov centenaPuntos,A inc millarPuntos ; 50 misiles mas porque hemos incrementado millar mov incremMisiles,#Bonus_Misiles call actualizarMisiles call visualizarMarcadorMisiles ; sonido del bonus de misiles mov DPTR,#bonusmisiles call tocarmelodia mov A,millarPuntos clr C subb A,#10 jc finActualizarPuntos ; normalizar millar mov millarPuntos,A finActualizarPuntos: ret ;****************************************************************** visualizarmarcadorpuntos: ; actualizamos en pantalla mov carYDibujarCaracter,#PosYContPuntos mov carXDibujarCaracter,#PosXContPuntos mov codigoDibujarCaracter,millarPuntos call dibujarCaracter mov carYDibujarCaracter,#PosYContPuntos mov carXDibujarCaracter,#PosXContPuntos+1 mov codigoDibujarCaracter,centenaPuntos call dibujarCaracter mov carYDibujarCaracter,#PosYContPuntos mov carXDibujarCaracter,#PosXContPuntos+2 mov codigoDibujarCaracter,decenaPuntos call dibujarCaracter mov carYDibujarCaracter,#PosYContPuntos mov carXDibujarCaracter,#PosXContPuntos+3 mov codigoDibujarCaracter,unidadPuntos call dibujarCaracter ret ;********************************************************* visualizarmarcadormisiles: mov carYDibujarCaracter,#PosYContMisiles mov carXDibujarCaracter,#PosXContmisiles mov codigoDibujarCaracter,centenaMisiles call dibujarCaracter mov carYDibujarCaracter,#PosYContMisiles mov carXDibujarCaracter,#PosXContMisiles+1 mov codigoDibujarCaracter,decenaMisiles call dibujarCaracter mov carYDibujarCaracter,#PosYContMisiles mov carXDibujarCaracter,#PosXContMisiles+2 mov codigoDibujarCaracter,unidadMisiles call dibujarCaracter ret ;****************************************************************** visualizarmarcadorvidas: push 0 push 1 push 2 mov R0,#PosXContvidas mov R1,#nummaxvidas-1 mov R2,numvidas dec R2 inibuclevidas: mov A,R2 jz borrarvida mov carXDibujarCaracter,R0 mov carYDibujarCaracter,#PosYContvidas mov codigoDibujarCaracter,#carnavevida call dibujarCaracter jmp sighuecovida borrarvida: mov carXDibujarCaracter,R0 mov carYDibujarCaracter,#PosYContvidas mov codigoDibujarCaracter,#carfondopantalla call dibujarCaracter sighuecovida: inc R0 dec R1 mov A,R2 jz finbucle dec R2 finbucle: cjne R1,#0,inibuclevidas pop 2 pop 1 pop 0 ret ;****************************************************************** visualizarmarcadorniveles: mov A,topeTemp anl A,#mascnivel1 jz vernivel1 mov A,topeTemp anl A,#mascnivel2 jz vernivel2 mov codigodibujarcaracter,#carRomanoIII jmp vismarniv vernivel1: mov codigodibujarcaracter,#carRomanoI jmp vismarniv vernivel2: mov codigodibujarcaracter,#carRomanoII vismarniv: mov carXdibujarcaracter,#posXContniveles mov carYdibujarcaracter,#PosYContniveles call dibujarcaracter ret ;****************************************************************** visualizarmarcadorpausa: mov A,estadopausa jnz estamospausa mov codigodibujarcaracter,#carFondopantalla jmp dibmarpausa estamospausa: mov codigodibujarcaracter,#carPausa dibmarpausa: mov CarXdibujarcaracter,#PosXContPausa mov carYdibujarcaracter,#PosYContPausa call dibujarcaracter ret ;****************************************************************** visualizargameover: ; Escribe gameover en pantalla al terminar el juego mov DPTR,#GameOver ; empezamos a rellenar mov R1,#PosYGameOverInicial ; empezamos fila empezarFilaGameover: mov R0,#PosXGameOverInicial buclegameover: ; preparo caracter del gameover mov carXDibujarCaracter,R0 mov carYDibujarCaracter,R1 movx A,@DPTR mov codigoDibujarCaracter,A ; incremento y guardo, porque se va a destruir al llamar a 'dibujarCaracter' inc DPTR push DPH push DPL call dibujarCaracter ; recupero DPTR pop DPL pop DPH ; hemos llegado al final de la fila? cje R0,#posXGameOverfinal,incremFilaGameOver ; incrementamos y seguimos inc R0 jmp buclegameover ; hemos llegado al final del todo? incremFilaGameOver: cje R1,#posYGameOverFinal,finalgameover ; incrementamos y seguimos inc R1 inc R1 jmp empezarFilagameover ; salimos finalgameover: ret ;****************************************************************** ; Tratamiento de la presentacion TratamientoPresentacion: ; incrementamos contador inc contSoft ; toca enviar melodia? mov A,contSoft anl A,#mascEnviarNotas jnz verRotar ; enviar mas notas call enviarMELPRES ; toca rotar? verRotar: mov A,contSoft anl A,#mascRotar jnz debemosDesplazar ; creamos el caracter de rotacion mov R0,posRotacion ; R1 -> linea o coordenada Y mov R1,#0 bucleRotacion: ; en funcion de los bits 2 y 3 de posRotacion ; elegimos el color base -> R3 ; (0-3)->azul ; (4-7)->verde ; (8-11)->rojo ; (12-15)->amarillo (rojo+verde) mov A,posRotacion anl A,#00001100b jnz probarVerde ; creamos azul mov A,R0 anl A,#00000011b mov R3,A jmp empezarLineaRotacion probarVerde: mov A,posRotacion anl A,#00001100b clr C subb A,#00000100b jnz probarRojo ; creamos Verde mov A,R0 anl A,#00000011b RL A RL A mov R3,A jmp empezarLineaRotacion probarRojo: mov A,posRotacion anl A,#00001100b clr C subb A,#00001000b jnz hacerAmarillo ; creamos Rojo mov A,R0 anl A,#00000011b RL A RL A RL A RL A mov R3,A jmp empezarLineaRotacion ; creamos amarillo hacerAmarillo: ; le damos rojo mov A,R0 anl A,#00000011b RL A RL A RL A RL A mov R3,A ; mas verde mov A,R0 anl A,#00000011b RL A RL A add A,R3 anl A,#00111100b mov R3,A empezarLineaRotacion: ; R2 -> coordenada X mov R2,#0 lineaRotacion: ; linea 1 mov carYDibujarCaracter,R1 mov carXDibujarCaracter,R2 mov codigoDibujarCaracter,#CRotar mov colorDibujarPixel,R3 call dibujarPixel ; linea2 mov A,R1 inc A mov carYDibujarCaracter,A mov carXDibujarCaracter,R2 mov codigoDibujarCaracter,#CRotar mov colorDibujarPixel,R3 call dibujarPixel inc R2 mov A,R2 clr C subb A,#10 jnz lineaRotacion ; hemos acabado linea inc R1 inc R1 ; rotamos inc R0 mov A,R1 clr C subb A,#8 jnz bucleRotacion ; y rotamos dec posRotacion debemosDesplazar: ; debemos desplazar/agrandar ventana? mov A,contSoft anl A,#mascDesplazar12 jnz finCont ; ahora desplazamos ; estamos en fase1? mov A,fasePresen jnz fase2Presen ; fase1 de la presentacion ; fase1 mas lenta mov A,contSoft anl A,#mascDesplazar1 jnz finCont inc posVentana ; limites mov DPTR,#DirLimInfXVGA mov A,posVentana movx @DPTR,A mov DPTR,#DirLimSupXVGA mov A,posVentana add A,#anchoLogo movx @DPTR,A ; hemos llegado al final de la fase 1? mov A,posVentana add A,#anchoLogo clr C subb A,#limSupXLogo jnz finCont ; cambiamos a fase2 mov fasePresen,#1 jmp finCont ; fase 2 de la presentacion fase2Presen: ; hemos llegado al final mov A,posVentana clr C subb A,#limInfXLogo jz finCont ; agrandamos dec posVentana mov DPTR,#DirLimInfXVGA mov A,posVentana movx @DPTR,A mov DPTR,#DirLimSupXVGA mov A,#limSupXLogo movx @DPTR,A finCont: ret ;****************************************************************** Rut_eventos: mov A,estadojuego cjne A,#estadopresentacion,verEstadoJugandoEVENTOS call TratamientoPresentacion ; tratamiento en la presentacion jmp finrut_eventos verEstadoJugandoEVENTOS: mov A,estadojuego cjne A,#estadojugando,finrut_eventos ; comprobamos si han dado a nuestra nave para parar el juego temporalmente cje posXnave,#marcianitonoexiste,etiqreconstruccion cje posXnave,#marcianitoexplotado,etiqvisualizarnaves cje posXnave,#marcianitoeliminado,etiqvisualizarnaves ; primero hacemos los movimientos call movimientonuestranave mov verquemisiles,#misilesnuestros call movimientomisiles mov verquemisiles,#misilesmarcianitos call movimientomisiles ; detectamos las colisiones una vez hemos avanzado los misiles ; eliminamos los misiles que han colisionado call detectarcolisiones call detectarcolisionesmar call detectarcolisionesnodriza ; y ahora toca a los marcianitos mov A,contSoft anl A,#multmarcianito jnz versimovernodriza call movimientomarcianitos versimovernodriza: mov A,contSoft anl A,#multnodriza jnz etiqvisualizar call movimientonodriza etiqvisualizar: ; visualizacion de todo call visualizarmisiles call visualizarmisilesmar call visualizarnodriza etiqvisualizarnaves: call visualizarmarcianitos call visualizarnuestranave ; ahora reponemos los marcianos que se han muerto call fabricarmarcianitos call fabricarnodriza etiqreconstruccion: call reconstruirnuestranave inc contSoft finrut_eventos: ret ;****************************************************** ; RUTINA DE TRATAMIENTO DE INTERRUPCION PARA EL INT0 ; DESPERTAR AL MICRO Y ATENDER PS2 RUT_INT0: ; deshabilito todas las interrupciones menos INT1 mov IE,#10000100b ; guardo estado de la maquina guardarest ; tratamiento del teclado ; primero vemos si hemos pulsado tecla mov DPTR,#DirRegEstadoPS2 movx A,@DPTR anl A,#HayDatosPS2 jnz SI_TECLA jmp finINTPS2 SI_TECLA: ; hay tecla mov DPTR,#DirRegDatosPS2 movx A,@DPTR ; leemos y almacenamos en variable mov teclaleida,A cjne A,#codTeclaSoltada,verEstados ; detectamos tecla soltada, lo marcamos mov teclaSoltada,#1 jmp finINTPS2 ; comprobamos estado para ver que hacer verEstados: mov A,estadojuego cjne A,#estadoinicio,verEstadoPresentacion ; tecla -> estado inicio mov A,teclaLeida cjne A,#codTeclaDisparo,ETIQlimpiarTeclaSoltada mov A,teclaSoltada jnz ETIQlimpiarTeclaSoltada ; pasamos a estado presentacion mov estadojuego,#estadopresentacion ; bloqueamos tecla disparo mov mapaTeclaDisp,#estadoTeclaConsumida call inicializarpresentacion jmp limpiarTeclaSoltada verEstadoPresentacion: mov A,estadojuego cjne A,#estadopresentacion,seguirTeclaIzq ; tecla -> estado presentacion mov A,teclaLeida cjne A,#codTeclaDisparo,ETIQlimpiarTeclaSoltada mov A,teclaSoltada jnz desbloquearDisparo ; pasamos a estado inicio si no estamos bloqueados mov A,mapaTeclaDisp cjne A,#estadoTeclaSoltada,ETIQlimpiarTeclaSoltada mov estadojuego,#estadojugando call inicializarJuego jmp limpiarTeclaSoltada desbloquearDisparo: mov mapaTeclaDisp,#estadoTeclaSoltada jmp limpiarTeclaSoltada ;;;; tecla izquierda ;;;; seguirTeclaIzq: mov A,teclaLeida cjne A,#codTeclaIzq,seguirTeclaDer ; hemos detectado teclaIzquierda mov A,teclaSoltada jz teclaIzqPulsada ; tecla izquierda soltada => la marcamos como soltada si estaba ; bloqueada o esperando si esta pulsada mov A,mapateclaizq cjne A,#estadoteclaconsumida,noIzqConsumida ; consumida -> soltada mov mapaTeclaIzq,#estadoTeclaSoltada noIzqConsumida: cjne A,#estadoteclapulsada,etiqlimpiarTeclaSoltada ; pulsada -> esperando mov mapaTeclaIzq,#estadoTeclaEsperando jmp limpiarTeclaSoltada etiqlimpiarteclasoltada: jmp limpiarteclasoltada teclaIzqPulsada: ; tecla izquierda pulsada, debemos ver el estado anterior ;cje mapaTeclaIzq,#estadoTeclaConsumida,limpiarTeclaSoltada cje mapateclaizq,#estadoteclaconsumida,etiqlimpiarteclasoltada ; marcamos tecla como pulsada mov mapaTeclaIzq,#estadoTeclaPulsada jmp limpiarTeclaSoltada ;;;; tecla derecha ;;;; seguirTeclaDer: ; vamos a comprobar si hemos pulsado tecla derecha mov A,teclaLeida cjne A,#codTeclaDer,seguirTeclaDisp ; hemos detectado teclaDerecha mov A,teclaSoltada jz teclaDerPulsada ; tecla derecha soltada => la marcamos como soltada si estaba ; bloqueada o esperando si esta pulsada mov A,mapateclader cjne A,#estadoteclaconsumida,noDerConsumida ; consumida -> soltada mov mapaTeclaDer,#estadoTeclaSoltada noDerConsumida: cjne A,#estadoteclapulsada,etiqlimpiarTeclaSoltada ; pulsada -> esperando mov mapaTeclaDer,#estadoTeclaEsperando jmp limpiarTeclaSoltada teclaDerPulsada: ; tecla derecha pulsada, debemos ver el estado anterior cje mapaTeclaDer,#estadoTeclaConsumida,etiqlimpiarTeclaSoltada ; marcamos tecla como pulsada mov mapaTeclaDer,#estadoTeclaPulsada jmp limpiarTeclaSoltada ;;;; tecla disparo ;;;; seguirTeclaDisp: mov A,teclaLeida cjne A,#codTeclaDisparo,seguirteclasubnivel ; hemos detectado teclaDisparo mov A,teclaSoltada jz teclaDispPulsada ; tecla disparo soltada => la marcamos como soltada si estaba ; bloqueada o esperando si esta pulsada mov A,mapateclaDisp cjne A,#estadoteclaconsumida,noDispConsumida ; consumida -> soltada mov mapaTeclaDisp,#estadoTeclaSoltada noDispConsumida: cjne A,#estadoteclapulsada,limpiarTeclaSoltada ; pulsada -> esperando mov mapaTeclaDisp,#estadoTeclaEsperando jmp limpiarTeclaSoltada teclaDispPulsada: ; tecla disparo pulsada, debemos ver el estado anterior cje mapaTeclaDisp,#estadoTeclaConsumida,limpiarTeclaSoltada ; marcamos tecla como pulsada mov mapaTeclaDisp,#estadoTeclaPulsada jmp limpiarTeclaSoltada ;;;; tecla incrementar nivel ;;;; seguirTeclaSubNivel: mov A,teclaLeida cjne A,#codTeclaSubNiv,seguirteclabajnivel ; hemos detectado tecla de subir el nivel (velocidad) mov A,teclaSoltada jz teclasubnivpulsada jmp limpiarTeclaSoltada teclasubnivpulsada: mov A,topeTemp anl A,#mascnivel3 jz limpiarteclasoltada rr A mov topeTemp,A call visualizarmarcadorniveles jmp limpiarteclasoltada ;;;; tecla decrementar nivel ;;;; seguirTeclaBajNivel: mov A,teclaLeida cjne A,#codTeclaBajNiv,seguirTeclaPausa ; hemos detectado tecla de bajar el nivel (velocidad) mov A,teclaSoltada jz teclabajnivpulsada jmp limpiarTeclaSoltada teclabajnivpulsada: mov A,topeTemp anl A,#mascnivel1 jz limpiarteclasoltada rl A mov topeTemp,A call visualizarmarcadorniveles jmp limpiarteclasoltada ;;;; tecla de pausa ;;;; seguirTeclaPausa: mov A,teclaLeida cjne A,#codTeclaPausa,seguirteclaNuevojuego ; hemos detectado pulsada la tecla de pausa mov A,teclaSoltada jz teclapausapulsada jmp limpiarTeclaSoltada teclapausapulsada: ; negamos el ultimo bit xrl estadopausa,#00000001 call visualizarmarcadorpausa jmp limpiarteclasoltada ;;;; tecla de reinicializar juego ;;;; seguirTeclaNuevojuego: mov A,teclaLeida cjne A,#codTeclaNuevoJuego,finINTPS2 ; hemos detectado pulsada la tecla de reiniciar juego mov A,teclaSoltada jz teclanuevojuegopulsada jmp limpiarTeclaSoltada teclanuevojuegopulsada: mov estadojuego,#1 call inicializarjuego limpiarTeclaSoltada: mov teclaSoltada,#0 finINTPS2: ; recupero estado de la maquina recuperarest ; habilito INT0,INT1 mov IE,#10000101b reti ;******************************************************** ; RUTINA DE TRATAMIENTO DE INTERRUPCION PARA EL TIMER0 RUT_TIMER0: reti ;******************************************************** ; RUTINA DE TRATAMIENTO DE INTERRUPCION PARA EL TIMER1 RUT_TIMER1: reti ;******************************************************** ; RUTINA DE TRATAMIENTO DE INTERRUPCION PARA EL INT1 ; DORMIR AL MICRO RUT_INT1: ; desactivar interrupciones mov IE,#00000000b ; guardo estado de la maquina guardarEST ; avisamos que int atendida mov DPTR,#DirConfINT movx @DPTR,A volverDormir: ; pongo bit ALF=1, para ponerme en estado FLOATING ; --- T32 SERR IZC P3HZ P2HZ P1HZ ALF ; 0 0 0 0 0 0 0 1 ; IOCON = 0F8h mov 0F8h,#00000001b ; duermo al micro colocandolo en modo Power Down (PD=1), ; y permito que cualquier interrupcion le despierte, continuando la ejecucion ; normal (RPD=1) ; SMOD HPD RPD --- GF1 GF0 PD IDL ; 0 0 1 0 0 0 1 0 orl PCON,#00100000b orl PCON,#00000010b ; hago una lectura -> esta el micro dormido? si es asi volvemos mov DPTR,#DirEstadoMicro movx A,@DPTR jz volverDormir ; recupero estado de la maquina recuperarEST ; activar interrupciones mov IE,#10001101b ;volvemos reti ;******************************************************** ; RUTINA DE TRATAMIENTO PARA EL PUERTO SERIE RUT_SERIE: reti ;******************************************************** ; RUTINA DE TRATAMIENTO DE INTERRUPCION PARA EL TIMER2 RUT_TIMER2: reti ;****************************************************************** ; DATOS VGA ; segmento de datos en memoria externa ; pensado para inicializar memoria de pixels ; como direccionamos? ; MEMORIA DE PIXELS: 1c6c5c4c3c2c1c0y2y1y0x3x2x1x0 ; MEMORIA DE CARACTERES/REFRESCO: 100y4y3y2y1y0x4x3x211x1x0 ORG 100000000000000b ; caracter 0000000 => 0 ORG 100000000000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000000010000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100000000100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000000110000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000001000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000001010000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000001100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000001110000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ; caracter 0000001 => 1 ORG 100000010000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000010010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000010100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000010110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000011000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000011010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000011100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000011110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 0000010 => 2 ORG 100000100000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000100010000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100000100100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000100110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000101000000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100000101010000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000101100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000101110000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ; caracter 0000011 => 3 ORG 100000110000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100000110010000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100000110100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000110110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000111000000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100000111010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000111100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100000111110000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ; caracter 0000100 => 4 ORG 100001000000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001000010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001000100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001000110000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001001000000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100001001010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001001100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001001110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 0000101 => 5 ORG 100001010000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001010010000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100001010100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001010110000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001011000000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100001011010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001011100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001011110000b DB CFO,CFO,CNU,CNU,CNU,CNU,CNU,CFO,CFO,CFO ; caracter 0000110 => 6 ORG 100001100000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001100010000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100001100100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001100110000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001101000000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100001101010000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001101100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001101110000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ; caracter 0000111 => 7 ORG 100001110000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001110010000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100001110100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001110110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001111000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100001111010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001111100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100001111110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 0001000 => 8 ORG 100010000000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100010000010000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100010000100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100010000110000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100010001000000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100010001010000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100010001100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100010001110000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ; caracter 0001001 => 9 ORG 100010010000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100010010010000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100010010100000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100010010110000b DB CFO,CFO,CNU,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100010011000000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ORG 100010011010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100010011100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CNU,CFO,CFO ORG 100010011110000b DB CFO,CFO,CFO,CNU,CNU,CNU,CNU,CFO,CFO,CFO ; caracter 0001010 => 'A' ORG 100010100000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CLE,CFO,CFO,CFO ORG 100010100010000b DB CFO,CFO,CFO,CFO,CLE,CLE,CLE,CFO,CFO,CFO ORG 100010100100000b DB CFO,CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO ORG 100010100110000b DB CFO,CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO ORG 100010101000000b DB CFO,CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO ORG 100010101010000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CLE,CLE,CFO ORG 100010101100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO ORG 100010101110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO ; caracter 0001011 => 'B' ORG 100010110000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100010110010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100010110100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100010110110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100010111000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100010111010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100010111100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100010111110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ; caracter 0001100 => 'C' ORG 100011000000000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100011000010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100011000100000b DB CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011000110000b DB CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011001000000b DB CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011001010000b DB CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011001100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100011001110000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ; caracter 0001101 => 'D' ORG 100011010000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100011010010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100011010100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100011010110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100011011000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100011011010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100011011100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100011011110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ; caracter 0001110 => 'E' ORG 100011100000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100011100010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011100100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011100110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100011101000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011101010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011101100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011101110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ; caracter 0001111 => 'F' ORG 100011110000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100011110010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011110100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011110110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100011111000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011111010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011111100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100011111110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 0010000 => 'G' ORG 100100000000000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100100000010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100000100000b DB CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100100000110000b DB CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100100001000000b DB CFO,CLE,CLE,CFO,CFO,CLE,CLE,CLE,CFO,CFO ORG 100100001010000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100001100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100001110000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ; caracter 0010001 => 'H' ORG 100100010000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100010010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100010100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100010110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CLE,CFO,CFO ORG 100100011000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100011010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100011100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100100011110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ; caracter 0010010 => 'I' ORG 100100100000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100100010000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100100100000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100100110000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100101000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100101010000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100101100000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100101110000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ; caracter 0010011 => 'J' ORG 100100110000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100110010000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100110100000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100110110000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100111000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100111010000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100111100000b DB CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100100111110000b DB CFO,CFO,CLE,CLE,CLE,CFO,CFO,CFO,CFO,CFO ; caracter 0010100 => 'K' ORG 100101000000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100101000010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100101000100000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100101000110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO,CFO ORG 100101001000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100101001010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100101001100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100101001110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ; caracter 0010101 => 'L' ORG 100101010000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100101010010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100101010100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100101010110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100101011000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100101011010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100101011100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100101011110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CLE,CFO,CFO ; caracter 0010110 => 'M' ORG 100101100000000b DB CFO,CLE,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CLE ORG 100101100010000b DB CFO,CLE,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CLE ORG 100101100100000b DB CFO,CLE,CLE,CLE,CLE,CFO,CLE,CLE,CLE,CLE ORG 100101100110000b DB CFO,CLE,CLE,CLE,CLE,CFO,CLE,CLE,CLE,CLE ORG 100101101000000b DB CFO,CLE,CLE,CFO,CLE,CFO,CLE,CFO,CLE,CLE ORG 100101101010000b DB CFO,CLE,CLE,CFO,CLE,CLE,CLE,CFO,CLE,CLE ORG 100101101100000b DB CFO,CLE,CLE,CFO,CLE,CLE,CLE,CFO,CLE,CLE ORG 100101101110000b DB CFO,CLE,CLE,CFO,CFO,CLE,CFO,CFO,CLE,CLE ; caracter 0010111 => 'N' ORG 100101110000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100101110010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100101110100000b DB CFO,CFO,CLE,CLE,CLE,CFO,CLE,CLE,CFO,CFO ORG 100101110110000b DB CFO,CFO,CLE,CLE,CLE,CFO,CLE,CLE,CFO,CFO ORG 100101111000000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CLE,CFO,CFO ORG 100101111010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CLE,CFO,CFO ORG 100101111100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100101111110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ; caracter 0011000 => '¥' ORG 100110000000000b DB CFO,CFO,CFO,CLE,CLE,CFO,CLE,CFO,CFO,CFO ORG 100110000010000b DB CFO,CFO,CFO,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100110000100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 100110000110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110001000000b DB CFO,CFO,CLE,CLE,CLE,CFO,CLE,CLE,CFO,CFO ORG 100110001010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CLE,CFO,CFO ORG 100110001100000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CLE,CFO,CFO ORG 100110001110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ; caracter 0011001 => 'O' ORG 100110010000000b DB CFO,CFO,CFO,CLE,CLE,CLE,CFO,CFO,CFO,CFO ORG 100110010010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100110010100000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110010110000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110011000000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110011010000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110011100000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100110011110000b DB CFO,CFO,CFO,CLE,CLE,CLE,CFO,CFO,CFO,CFO ; caracter 0011010 => 'P' ORG 100110100000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100110100010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110100100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110100110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110101000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100110101010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100110101100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100110101110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 0011011 => 'Q' ORG 100110110000000b DB CFO,CFO,CFO,CLE,CLE,CLE,CFO,CFO,CFO,CFO ORG 100110110010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100110110100000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110110110000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 100110111000000b DB CFO,CLE,CLE,CFO,CLE,CFO,CLE,CLE,CFO,CFO ORG 100110111010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100110111100000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100110111110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CLE,CFO,CFO ; caracter 0011100 => 'R' ORG 100111000000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100111000010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111000100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111000110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111001000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100111001010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 100111001100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111001110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO ; caracter 0011101 => 'S' ORG 100111010000000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 100111010010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111010100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 100111010110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO,CFO ORG 100111011000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO ORG 100111011010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111011100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111011110000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ; caracter 0011110 => 'T' ORG 100111100000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CLE,CFO,CFO ORG 100111100010000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100111100100000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100111100110000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100111101000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100111101010000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100111101100000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 100111101110000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ; caracter 0011111 => 'U' ORG 100111110000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111110010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111110100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111110110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111111000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111111010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111111100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 100111111110000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ; caracter 0100000 => 'V' ORG 101000000000000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 101000000010000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 101000000100000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 101000000110000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 101000001000000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 101000001010000b DB CFO,CFO,CLE,CLE,CFO,CLE,CLE,CFO,CFO,CFO ORG 101000001100000b DB CFO,CFO,CFO,CLE,CLE,CLE,CFO,CFO,CFO,CFO ORG 101000001110000b DB CFO,CFO,CFO,CLE,CLE,CLE,CFO,CFO,CFO,CFO ; caracter 0100001 => 'W' ORG 101000010000000b DB CLE,CFO,CFO,CFO,CLE,CFO,CFO,CFO,CLE,CFO ORG 101000010010000b DB CLE,CFO,CFO,CLE,CLE,CLE,CFO,CFO,CLE,CFO ORG 101000010100000b DB CLE,CLE,CFO,CLE,CLE,CLE,CFO,CLE,CLE,CFO ORG 101000010110000b DB CLE,CLE,CFO,CLE,CFO,CLE,CFO,CLE,CLE,CFO ORG 101000011000000b DB CLE,CLE,CFO,CLE,CFO,CLE,CFO,CLE,CLE,CFO ORG 101000011010000b DB CLE,CLE,CLE,CLE,CFO,CLE,CLE,CLE,CLE,CFO ORG 101000011100000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 101000011110000b DB CFO,CLE,CLE,CFO,CFO,CFO,CLE,CLE,CFO,CFO ; caracter 0100010 => 'X' ORG 101000100000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 101000100010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 101000100100000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 101000100110000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 101000101000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 101000101010000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 101000101100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 101000101110000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ; caracter 0100011 => 'Y' ORG 101000110000000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 101000110010000b DB CFO,CFO,CLE,CLE,CFO,CFO,CLE,CLE,CFO,CFO ORG 101000110100000b DB CFO,CFO,CFO,CLE,CFO,CFO,CLE,CFO,CFO,CFO ORG 101000110110000b DB CFO,CFO,CFO,CLE,CLE,CLE,CLE,CFO,CFO,CFO ORG 101000111000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 101000111010000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 101000111100000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 101000111110000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ; caracter 0100100 => 'Z' ORG 101001000000000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CLE,CFO,CFO ORG 101001000010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO ORG 101001000100000b DB CFO,CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO ORG 101001000110000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 101001001000000b DB CFO,CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO ORG 101001001010000b DB CFO,CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO ORG 101001001100000b DB CFO,CFO,CLE,CLE,CFO,CFO,CFO,CFO,CFO,CFO ORG 101001001110000b DB CFO,CFO,CLE,CLE,CLE,CLE,CLE,CLE,CFO,CFO ; caracter 0100101 => ESPACIO ORG 101001010000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 101001010010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 101001010100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 101001010110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 101001011000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 101001011010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 101001011100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 101001011110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 0111100 => carPausa ORG 101111000000000b DB FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR ORG 101111000010000b DB FNR,FNR,FNR,CNR,CNR,CNR,FNR,FNR,FNR,FNR ORG 101111000100000b DB FNR,FNR,FNR,CNR,FNR,FNR,CNR,FNR,FNR,FNR ORG 101111000110000b DB FNR,FNR,FNR,CNR,FNR,FNR,CNR,FNR,FNR,FNR ORG 101111001000000b DB FNR,FNR,FNR,CNR,CNR,CNR,FNR,FNR,FNR,FNR ORG 101111001010000b DB FNR,FNR,FNR,CNR,FNR,FNR,FNR,FNR,FNR,FNR ORG 101111001100000b DB FNR,FNR,FNR,CNR,FNR,FNR,FNR,FNR,FNR,FNR ORG 101111001110000b DB FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR ; caracter 0111101 => carRomanoI ORG 101111010000000b DB FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR ORG 101111010010000b DB FNR,FNR,FNR,CNR,CNR,CNR,CNR,FNR,FNR,FNR ORG 101111010100000b DB FNR,FNR,FNR,FNR,CNR,CNR,FNR,FNR,FNR,FNR ORG 101111010110000b DB FNR,FNR,FNR,FNR,CNR,CNR,FNR,FNR,FNR,FNR ORG 101111011000000b DB FNR,FNR,FNR,FNR,CNR,CNR,FNR,FNR,FNR,FNR ORG 101111011010000b DB FNR,FNR,FNR,FNR,CNR,CNR,FNR,FNR,FNR,FNR ORG 101111011100000b DB FNR,FNR,FNR,CNR,CNR,CNR,CNR,FNR,FNR,FNR ORG 101111011110000b DB FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR ; caracter 0111110 => carRomanoII ORG 101111100000000b DB FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR ORG 101111100010000b DB FNR,CNR,CNR,CNR,CNR,CNR,CNR,CNR,CNR,FNR ORG 101111100100000b DB FNR,FNR,CNR,CNR,FNR,FNR,CNR,CNR,FNR,FNR ORG 101111100110000b DB FNR,FNR,CNR,CNR,FNR,FNR,CNR,CNR,FNR,FNR ORG 101111101000000b DB FNR,FNR,CNR,CNR,FNR,FNR,CNR,CNR,FNR,FNR ORG 101111101010000b DB FNR,FNR,CNR,CNR,FNR,FNR,CNR,CNR,FNR,FNR ORG 101111101100000b DB FNR,CNR,CNR,CNR,CNR,CNR,CNR,CNR,CNR,FNR ORG 101111101110000b DB FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR ; caracter 0111111 => carRomanoIII ORG 101111110000000b DB FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR ORG 101111110010000b DB FNR,CNR,CNR,CNR,CNR,CNR,CNR,CNR,CNR,FNR ORG 101111110100000b DB FNR,FNR,CNR,FNR,CNR,CNR,FNR,CNR,FNR,FNR ORG 101111110110000b DB FNR,FNR,CNR,FNR,CNR,CNR,FNR,CNR,FNR,FNR ORG 101111111000000b DB FNR,FNR,CNR,FNR,CNR,CNR,FNR,CNR,FNR,FNR ORG 101111111010000b DB FNR,FNR,CNR,FNR,CNR,CNR,FNR,CNR,FNR,FNR ORG 101111111100000b DB FNR,CNR,CNR,CNR,CNR,CNR,CNR,CNR,CNR,FNR ORG 101111111110000b DB FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR,FNR ; caracter 1000000 => carFondoPantalla ORG 110000000000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110000000010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110000000100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110000000110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110000001000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110000001010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110000001100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110000001110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1000001 => carMargenes ORG 110000010000000b DB CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA ORG 110000010010000b DB CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA ORG 110000010100000b DB CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA ORG 110000010110000b DB CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA ORG 110000011000000b DB CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA ORG 110000011010000b DB CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA ORG 110000011100000b DB CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA ORG 110000011110000b DB CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA,CMA ; caracter 1000010 => naveCarSupIzq ORG 110000100000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110000100010000b DB CFO,CFO,CFO,AO,AO,CFO,CFO,CFO,CFO,CFO ORG 110000100100000b DB CFO,CFO,AO,GC,AOOO,CFO,CFO,GC,GC,CFO ORG 110000100110000b DB CFO,AO,GC,GC,AOOO,CFO,GC,GC,GC,GO ORG 110000101000000b DB CFO,AO,GC,GC,AOOO,CFO,GC,GC,GC,GO ORG 110000101010000b DB CFO,AO,GC,GC,AOOO,CFO,GC,GC,GC,GO ORG 110000101100000b DB AO,AO,GC,GC,AOOO,CFO,GC,GC,GC,GC ORG 110000101110000b DB AO,GC,GC,GC,AOOO,AOOO,GC,GC,GC,GC ; caracter 1000011 => naveCarSupCen ORG 110000110000000b DB CFO,CFO,CFO,CFO,GC,GO,CFO,CFO,CFO,CFO ORG 110000110010000b DB CFO,CFO,CFO,GC,AM,AO,GO,CFO,CFO,CFO ORG 110000110100000b DB CFO,CFO,CFO,GC,AM,AO,GO,CFO,CFO,CFO ORG 110000110110000b DB CFO,CFO,GC,AM,AM,AO,AO,GO,CFO,CFO ORG 110000111000000b DB CFO,CFO,GC,AM,AM,AM,AO,GO,CFO,CFO ORG 110000111010000b DB GO,CFO,GC,AM,AM,AM,AO,GO,CFO,GC ORG 110000111100000b DB GO,CFO,GC,AO,AO,AO,AO,GO,CFO,GC ORG 110000111110000b DB GO,GC,GC,GC,GC,GC,GC,GC,GC,GO ; caracter 1000100 => naveCarSupDer ORG 110001000000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110001000010000b DB CFO,CFO,CFO,CFO,CFO,AO,AO,CFO,CFO,CFO ORG 110001000100000b DB CFO,GC,GO,CFO,CFO,AO,GC,AOOO,CFO,CFO ORG 110001000110000b DB GC,GC,GO,GO,CFO,AO,GC,GC,AOOO,CFO ORG 110001001000000b DB GC,GC,GC,GO,CFO,AO,GC,GC,AOOO,CFO ORG 110001001010000b DB GC,GC,GC,GO,CFO,AO,GC,GC,AOOO,CFO ORG 110001001100000b DB GC,GC,GC,GO,CFO,AO,GC,GC,AOOO,AOOO ORG 110001001110000b DB GC,GC,GC,GO,AO,AO,GC,GC,GC,AOOO ; caracter 1000101 => naveCarInfIzq ORG 110001010000000b DB AO,GC,GC,GC,GC,AOOO,GC,GC,GC,GC ORG 110001010010000b DB AO,GC,GC,GC,GC,AOOO,GC,GC,GC,GO ORG 110001010100000b DB AOO,GC,AOO,AOOO,AOOO,AOOO,GO,GO,GO,GO ORG 110001010110000b DB AOO,AOO,AOO,CFO,AOOO,AOOO,Neg,Neg,Neg,Neg ORG 110001011000000b DB CFO,CFO,CFO,CFO,CFO,CFO,RC,AMC,AMC,AMC ORG 110001011010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,RC,AMC,RC ORG 110001011100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,RC,AMC,RC ORG 110001011110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,RC,CFO ; caracter 1000110 => naveCarInfCen ORG 110001100000000b DB GO,GC,GC,VO,VC,VC,VO,GC,GC,GO ORG 110001100010000b DB GO,GC,VO,GC,GC,GC,GC,VO,GC,GO ORG 110001100100000b DB Neg,GO,GO,VO,VC,VC,VO,GO,GO,GO ORG 110001100110000b DB Neg,CFO,CFO,CFO,VO,VO,CFO,CFO,CFO,Neg ORG 110001101000000b DB RC,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,RC ORG 110001101010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110001101100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110001101110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1000111 => naveCarInfDer ORG 110001110000000b DB GC,GC,GC,GO,AO,GC,GC,GC,GC,AOOO ORG 110001110010000b DB GC,GC,GO,Neg,AOO,GC,GC,GC,GC,AOOO ORG 110001110100000b DB GO,GO,GO,Neg,AOO,AOO,AOO,AOO,GC,AOOO ORG 110001110110000b DB Neg,Neg,Neg,Neg,AOO,AOO,CFO,AOOO,AOOO,AOOO ORG 110001111000000b DB AMC,AMC,AMC,RC,CFO,CFO,CFO,CFO,CFO,CFO ORG 110001111010000b DB RC,AMC,RC,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110001111100000b DB RC,AMC,RC,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110001111110000b DB CFO,RC,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1001000 => carMisilsup ORG 110010000000000b DB CFO,CFO,CFO,CFO,GC,GO,CFO,CFO,CFO,CFO ORG 110010000010000b DB CFO,CFO,CFO,CFO,GC,GO,CFO,CFO,CFO,CFO ORG 110010000100000b DB CFO,CFO,CFO,GC,GC,GO,Neg,CFO,CFO,CFO ORG 110010000110000b DB CFO,CFO,CFO,GC,GC,GO,Neg,CFO,CFO,CFO ORG 110010001000000b DB CFO,CFO,CFO,RC,RC,RM,RO,CFO,CFO,CFO ORG 110010001010000b DB CFO,CFO,CFO,GC,GC,GC,GO,CFO,CFO,CFO ORG 110010001100000b DB CFO,CFO,CFO,GC,GC,GC,GO,CFO,CFO,CFO ORG 110010001110000b DB CFO,CFO,CFO,GC,GC,GC,GO,CFO,CFO,CFO ; caracter 1001001 => carMisilinf ORG 110010010000000b DB CFO,CFO,CFO,GC,GC,GC,GO,CFO,CFO,CFO ORG 110010010010000b DB CFO,CFO,CFO,RC,RC,RM,RO,CFO,CFO,CFO ORG 110010010100000b DB CFO,CFO,CFO,GC,GC,GO,Neg,CFO,CFO,CFO ORG 110010010110000b DB CFO,CFO,CFO,GC,GC,GO,Neg,CFO,CFO,CFO ORG 110010011000000b DB CFO,CFO,CFO,CFO,GC,GO,Neg,CFO,CFO,CFO ORG 110010011010000b DB CFO,CFO,CFO,CFO,GO,Neg,CFO,CFO,CFO,CFO ORG 110010011100000b DB CFO,CFO,CFO,CFO,AMC,Rc,CFO,CFO,CFO,CFO ORG 110010011110000b DB CFO,CFO,CFO,CFO,Rc,AMC,CFO,CFO,CFO,CFO ; caracter 1001010 => marCarSupIzq ORG 110010100000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110010100010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110010100100000b DB CFO,CFO,GO,GC,GC,GC,CFO,CFO,CFO,RC ORG 110010100110000b DB CFO,RO,RO,RC,GC,GC,CFO,GC,GC,GC ORG 110010101000000b DB CFO,GO,GC,RC,RC,RC,GC,GC,GC,GC ORG 110010101010000b DB CFO,GO,GO,GC,GC,GC,GC,GC,GC,GO ORG 110010101100000b DB CFO,CFO,GO,GC,GC,GC,CFO,CFO,CFO,GO ORG 110010101110000b DB CFO,CFO,CFO,GO,GC,CFO,CFO,CFO,CFO,Neg ; caracter 1001011 => marCarSupCen ORG 110010110000000b DB CFO,RC,CFO,CFO,CFO,CFO,CFO,CFO,RC,CFO ORG 110010110010000b DB RC,AMC,RC,CFO,CFO,CFO,CFO,RC,AMC,RC ORG 110010110100000b DB AMC,AMC,RC,CFO,CFO,CFO,CFO,RC,AMC,AMC ORG 110010110110000b DB GC,GC,GO,GC,CFO,CFO,GC,GO,GC,GC ORG 110010111000000b DB GC,GC,GO,GC,GC,GC,GC,GO,GC,GC ORG 110010111010000b DB GO,GO,GO,GC,GC,GC,GC,GO,GO,GO ORG 110010111100000b DB GO,GO,GO,GC,CFO,CFO,GC,GO,GO,GO ORG 110010111110000b DB GO,GC,GC,CFO,CFO,CFO,CFO,Neg,GO,GC ; caracter 1001100 => MarCarSupDer ORG 110011000000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110011000010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110011000100000b DB RC,CFO,CFO,CFO,GO,GC,GC,GC,CFO,CFO ORG 110011000110000b DB GC,GC,GC,CFO,GO,GC,RC,RC,RC,CFO ORG 110011001000000b DB GC,GC,GC,GC,RO,RC,RC,GC,GC,CFO ORG 110011001010000b DB GO,GC,GC,GC,GO,GC,GC,GC,GC,CFO ORG 110011001100000b DB GO,CFO,CFO,CFO,GO,GO,GC,GC,CFO,CFO ORG 110011001110000b DB GC,CFO,CFO,CFO,CFO,GO,GC,CFO,CFO,CFO ; caracter 1001101 => MarCarInfIzq ORG 110011010000000b DB CFO,CFO,CFO,GO,GC,CFO,RO,GC,GO,Neg ORG 110011010010000b DB CFO,CFO,CFO,GO,GC,CFO,RO,GC,GO,Neg ORG 110011010100000b DB CFO,CFO,CFO,GO,GC,CFO,RO,GC,GO,Neg ORG 110011010110000b DB CFO,CFO,CFO,GO,GC,CFO,RO,GC,GO,Neg ORG 110011011000000b DB CFO,CFO,CFO,GO,GC,CFO,CFO,RO,GC,CFO ORG 110011011010000b DB CFO,CFO,CFO,GO,GC,CFO,CFO,RC,GC,CFO ORG 110011011100000b DB CFO,CFO,CFO,GO,GC,CFO,CFO,CFO,RC,CFO ORG 110011011110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1001110 => MarCarInfCen ORG 110011100000000b DB GC,GC,GO,GO,RO,GC,GO,Neg,GC,GC ORG 110011100010000b DB GC,GC,GO,GO,RO,GC,GO,Neg,GC,GC ORG 110011100100000b DB AOO,AOO,GO,GO,RO,GC,GO,Neg,AOO,AOO ORG 110011100110000b DB AOO,AO,GO,GO,RO,GC,GO,Neg,AOO,AO ORG 110011101000000b DB AOO,AO,CFO,CFO,CFO,CFO,CFO,CFO,AOO,AO ORG 110011101010000b DB AO,AO,CFO,CFO,CFO,CFO,CFO,CFO,AO,AO ORG 110011101100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110011101110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1001111 => MarCarInfDer ORG 110011110000000b DB GO,GO,GC,RC,CFO,GO,GC,CFO,CFO,CFO ORG 110011110010000b DB GO,GO,GC,RC,CFO,GO,GC,CFO,CFO,CFO ORG 110011110100000b DB GO,GO,GC,RC,CFO,GO,GC,CFO,CFO,CFO ORG 110011110110000b DB GO,GO,GC,RC,CFO,GO,GC,CFO,CFO,CFO ORG 110011111000000b DB CFO,GC,RC,CFO,CFO,GO,GC,CFO,CFO,CFO ORG 110011111010000b DB CFO,GC,RC,CFO,CFO,GO,GC,CFO,CFO,CFO ORG 110011111100000b DB CFO,RC,CFO,CFO,CFO,GO,GC,CFO,CFO,CFO ORG 110011111110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1010000 => carrayosup ORG 110100000000000b DB CFO,CFO,CFO,CFO,Rc,AMC,CFO,CFO,CFO,CFO ORG 110100000010000b DB AOO,CFO,CFO,CFO,AMC,Rc,CFO,CFO,CFO,AOO ORG 110100000100000b DB GC,AOO,AOOO,CFO,GO,Neg,CFO,AOOO,AOO,GC ORG 110100000110000b DB GC,GC,GC,GO,GC,GO,Neg,GC,GC,GC ORG 110100001000000b DB CFO,GC,GC,GC,GC,GO,Neg,GC,GC,CFO ORG 110100001010000b DB CFO,CFO,CFO,GC,GC,GO,Neg,CFO,CFO,CFO ORG 110100001100000b DB CFO,CFO,CFO,GC,GC,GO,Neg,CFO,CFO,CFO ORG 110100001110000b DB CFO,CFO,GC,GC,GC,GC,GO,Neg,CFO,CFO ; caracter 1010001 => carrayoinf ORG 110100010000000b DB CFO,CFO,GC,GC,GC,GC,GO,Neg,CFO,CFO ORG 110100010010000b DB CFO,CFO,AO,AO,AO,AO,AOO,AOOO,CFO,CFO ORG 110100010100000b DB CFO,CFO,GC,GC,GC,GC,GO,Neg,CFO,CFO ORG 110100010110000b DB CFO,CFO,GC,GC,GC,GO,GO,Neg,CFO,CFO ORG 110100011000000b DB CFO,CFO,CFO,GC,GC,GO,Neg,CFO,CFO,CFO ORG 110100011010000b DB CFO,CFO,CFO,GC,GC,GO,Neg,CFO,CFO,CFO ORG 110100011100000b DB CFO,CFO,CFO,CFO,GC,Neg,CFO,CFO,CFO,CFO ORG 110100011110000b DB CFO,CFO,CFO,CFO,GC,Neg,CFO,CFO,CFO,CFO ; caracter 1010010 => marCarSupIzqdes ORG 110100100000000b DB CFO,CFO,CFO,RO,RO,RO,RO,RO,CFO,CFO ORG 110100100010000b DB CFO,CFO,CFO,RO,RC,RC,RC,RC,RO,CFO ORG 110100100100000b DB CFO,RO,RO,RO,RC,Nar,Nar,Nar,RC,RO ORG 110100100110000b DB RO,RC,RC,RC,RO,RC,RC,Nar,Nar,RC ORG 110100101000000b DB RO,RC,nar,Nar,RC,RC,RC,Nar,AMC,Nar ORG 110100101010000b DB CFO,CFO,RC,RC,Nar,Nar,Nar,Nar,AMC,AMC ORG 110100101100000b DB CFO,RO,RO,RC,Nar,Nar,AMC,AMC,AMC,AMC ORG 110100101110000b DB Ro,CFO,CFO,RO,RC,RC,Nar,Nar,AMC,AMC ; caracter 1010011 => marCarSupCendes ORG 110100110000000b DB CFO,RC,RC,RC,CFO,RO,RC,RO,CFO,RO ORG 110100110010000b DB RC,Nar,Nar,Nar,RC,RC,Nar,RC,CFO,RO ORG 110100110100000b DB RC,RC,Nar,AMC,Nar,Nar,Nar,Nar,RC,RC ORG 110100110110000b DB RC,RC,Nar,AMC,AMC,Nar,Nar,RC,RC,Nar ORG 110100111000000b DB Nar,RC,RC,AMC,AMC,AMC,Nar,RC,Nar,Nar ORG 110100111010000b DB Nar,AMC,RC,RC,AMC,AMC,Nar,RC,Nar,AMC ORG 110100111100000b DB AMC,AMC,AMC,AMC,AMC,AMC,AMC,Nar,AMC,AMC ORG 110100111110000b DB AMC,AMC,AMC,NAR,AMC,AMC,AMC,AMC,AMC,AMC ; caracter 1010100 => MarCarSupDerdes ORG 110101000000000b DB RO,RC,RC,RC,RC,RO,CFO,CFO,CFO,RO ORG 110101000010000b DB RC,Nar,Nar,Nar,RC,RC,RO,RO,RO,RC ORG 110101000100000b DB Nar,Nar,AMC,AMC,Nar,RC,RC,RC,RC,RO ORG 110101000110000b DB Nar,AMC,AMC,AMC,AMC,Nar,Nar,Nar,RC,CFO ORG 110101001000000b DB AMC,AMC,AMC,AMC,AMC,Nar,RC,RC,RO,CFO ORG 110101001010000b DB AMC,Nar,Nar,Nar,Nar,RC,RO,RO,CFO,CFO ORG 110101001100000b DB Nar,RC,RC,RC,RC,RC,RC,RC,RC,RC ORG 110101001110000b DB Nar,RC,Nar,Nar,Nar,Nar,Nar,RC,RO,RO ; caracter 1010101 => MarCarInfIzqdes ORG 110101010000000b DB CFO,CFO,RO,RC,RO,RO,RC,NAR,Nar,Nar ORG 110101010010000b DB CFO,CFO,RO,RC,RC,RC,RC,Nar,Nar,AMC ORG 110101010100000b DB CFO,RO,RO,RC,Nar,Nar,Nar,Nar,AMC,AMC ORG 110101010110000b DB RO,RC,RC,Nar,RC,Nar,AMC,AMC,AMC,AMC ORG 110101011000000b DB RC,Nar,Nar,RC,Nar,AMC,Nar,Nar,AMC,AMC ORG 110101011010000b DB RO,RC,RC,RO,RC,RC,RC,Nar,Nar,AMC ORG 110101011100000b DB CFO,RO,RO,RO,RO,RO,RO,RC,Nar,Nar ORG 110101011110000b DB CFO,CFO,CFO,CFO,CFO,RO,RC,RC,RC,RC ; caracter 1010110 => MarCarInfCendes ORG 110101100000000b DB amc,amc,nar,amc,amc,amc,amc,amc,amc,Nar ORG 110101100010000b DB amc,Nar,amc,amc,amc,amc,amc,amc,amc,amc ORG 110101100100000b DB amc,Nar,Nar,amc,amc,amc,amc,amc,amc,amc ORG 110101100110000b DB amc,rc,rc,Nar,amc,amc,Nar,Nar,Nar,Nar ORG 110101101000000b DB amc,rc,rc,Nar,Nar,amc,amc,Nar,rc,Nar ORG 110101101010000b DB Nar,Nar,rc,rc,Nar,Nar,Nar,rc,ro,rc ORG 110101101100000b DB rc,ro,ro,ro,rc,rc,Nar,Nar,rc,ro ORG 110101101110000b DB ro,cfo,cfo,cfo,ro,ro,rc,rc,ro,cfo ; caracter 1010111 => MarCarInfDerdes ORG 110101110000000b DB amc,amc,amc,amc,Nar,rc,rc,ro,cfo,cfo ORG 110101110010000b DB amc,amc,amc,amc,amc,amc,rc,ro,cfo,cfo ORG 110101110100000b DB amc,amc,Nar,Nar,amc,Nar,Nar,rc,ro,cfo ORG 110101110110000b DB amc,amc,amc,Nar,Nar,rc,Nar,Nar,rc,cfo ORG 110101111000000b DB Nar,Nar,amc,Nar,rc,ro,rc,rc,rc,ro ORG 110101111010000b DB rc,rc,rc,Nar,rc,ro,ro,ro,ro,ro ORG 110101111100000b DB ro,ro,rc,Nar,rc,ro,cfo,cfo,cfo,cfo ORG 110101111110000b DB cfo,cfo,ro,rc,ro,cfo,cfo,cfo,cfo,cfo ; caracter 1011000 => carVidaNave ORG 110110000000000b DB CFO,AOO,CFO,CFO,CFO,CFO,CFO,AOO,CFO,CFO ORG 110110000010000b DB AOO,GO,CFO,CFO,GO,CFO,CFO,GO,AOO,cfo ORG 110110000100000b DB AOO,GO,CFO,GO,Aoo,GO,CFO,GO,AOO,cfo ORG 110110000110000b DB AOO,GO,CFO,GO,Aoo,GO,CFO,GO,AOO,CFO ORG 110110001000000b DB AOO,GO,GO,GO,GO,GO,GO,GO,AOO,CFO ORG 110110001010000b DB AOO,AOO,CFO,GO,VC,GO,CFO,AOO,AOO,CFO ORG 110110001100000b DB CFO,CFO,CFO,RC,AMA,RC,CFO,CFO,CFO,CFO ORG 110110001110000b DB CFO,CFO,CFO,CFO,Rc,cfo,CFO,CFO,CFO,CFO ; caracter 1011001 => Nodcarsupizq ORG 110110010000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110010010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110010100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110010110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,AOO ORG 110110011000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,AOO,AO ORG 110110011010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,AOO,AO ORG 110110011100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,AOO,AO,AM ORG 110110011110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,AOO,AO,AO ; caracter 1011010 => Nodcarsupcen ORG 110110100000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110100010000b DB CFO,CFO,CFO,AM,AM,AM,AM,CFO,CFO,CFO ORG 110110100100000b DB CFO,AO,AO,AM,AM,AM,AM,AM,AM,CFO ORG 110110100110000b DB AO,AO,AM,AM,AM,AC,AC,AC,AC,AM ORG 110110101000000b DB AO,AM,AM,AM,AM,AM,AM,AM,AM,AC ORG 110110101010000b DB AM,AM,AM,AM,AM,AM,AM,AM,AM,AM ORG 110110101100000b DB AM,AM,AM,AM,AM,AM,AM,AM,AM,AM ORG 110110101110000b DB AO,AO,AO,AO,AM,AM,AM,AM,AM,AM ; caracter 1011011 => Nodcarsupder ORG 110110110000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110110010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110110100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110110110000b DB AM,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110111000000b DB AC,AM,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110111010000b DB AC,AM,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110111100000b DB AM,AM,AM,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110110111110000b DB AM,AM,AM,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1011100 => Nodcarinfizq ORG 110111000000000b DB CFO,GO,RM,GC,GC,RC,GC,GC,RC,GC ORG 110111000010000b DB CFO,CFO,GO,RM,GO,GO,RM,GO,GO,RM ORG 110111000100000b DB CFO,CFO,CFO,GO,GO,GO,GC,GC,GC,GC ORG 110111000110000b DB CFO,CFO,CFO,CFO,CFO,GO,GO,GO,GC,GC ORG 110111001000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,GO,GO,GO ORG 110111001010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,GO ORG 110111001100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110111001110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1011101 => Nodcarinfcen ORG 110111010000000b DB GC,RC,GC,GC,RC,GC,GC,RC,GC,GC ORG 110111010010000b DB GO,GO,RM,GO,GO,RM,GO,GO,RM,GC ORG 110111010100000b DB GC,GC,GC,GC,GC,GC,GC,GC,GC,GC ORG 110111010110000b DB GC,GC,GC,GC,GC,GC,GC,GC,GC,GC ORG 110111011000000b DB GC,GC,GC,GC,GC,GC,GC,GC,GC,GC ORG 110111011010000b DB GO,GO,GO,GC,GC,GC,GC,GC,GC,GC ORG 110111011100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110111011110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1011110 => Nodcarinfder ORG 110111100000000b DB RC,GC,GC,RC,GC,GC,RC,GC,GC,CFO ORG 110111100010000b DB GO,RM,GO,GO,RM,GO,GO,RM,CFO,CFO ORG 110111100100000b DB GC,GC,GC,GC,GC,GC,GC,CFO,CFO,CFO ORG 110111100110000b DB GC,GC,GC,GC,GC,CFO,CFO,CFO,CFO,CFO ORG 110111101000000b DB GC,GC,GC,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110111101010000b DB GC,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110111101100000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 110111101110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1100101 => marcesqabder ORG 111001010000000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111001010010000b DB Cl,cl,cl,o,cl,O,M,M,M,cl ORG 111001010100000b DB O,O,O,O,cl,O,M,M,M,cl ORG 111001010110000b DB cl,cl,cl,cl,cl,O,M,M,M,cl ORG 111001011000000b DB M,M,M,M,M,M,O,neg,M,cl ORG 111001011010000b DB M,M,M,M,M,M,cl,O,M,cl ORG 111001011100000b DB O,O,O,O,O,M,M,M,M,cl ORG 111001011110000b DB Neg,Neg,Neg,Neg,O,O,O,O,O,O ; caracter 1100110 => marcesqabzq ORG 111001100000000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111001100010000b DB O,M,M,M,cl,O,cl,cl,cl,cl ORG 111001100100000b DB O,M,M,M,cl,O,O,O,O,O ORG 111001100110000b DB O,M,M,M,cl,cl,cl,cl,cl,cl ORG 111001101000000b DB O,M,O,neg,M,M,M,M,M,M ORG 111001101010000b DB O,M,cl,O,M,M,M,M,M,M ORG 111001101100000b DB O,M,M,M,M,O,O,O,O,O ORG 111001101110000b DB O,O,O,O,O,O,Neg,Neg,Neg,Neg ; caracter 1100111 => marcesqarrizq ORG 111001110000000b DB O,cl,cl,cl,cl,cl,Neg,Neg,Neg,Neg ORG 111001110010000b DB O,M,M,M,M,cl,cl,cl,cl,cl ORG 111001110100000b DB O,M,O,neg,M,M,M,M,M,M ORG 111001110110000b DB O,M,cl,O,M,M,M,M,M,M ORG 111001111000000b DB O,M,M,M,O,O,O,O,O,O ORG 111001111010000b DB O,M,M,M,cl,cl,cl,cl,cl,cl ORG 111001111100000b DB O,M,M,M,cl,O,O,O,O,O ORG 111001111110000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ; caracter 1101000 => marcesqarrder ORG 111010000000000b DB Neg,Neg,Neg,Neg,cl,cl,cl,cl,cl,cl ORG 111010000010000b DB cl,cl,cl,cl,cl,M,M,M,M,cl ORG 111010000100000b DB M,M,M,M,M,M,O,neg,M,cl ORG 111010000110000b DB M,M,M,M,M,M,cl,O,M,cl ORG 111010001000000b DB O,O,O,O,O,O,M,M,M,cl ORG 111010001010000b DB cl,cl,cl,cl,cl,O,M,M,M,cl ORG 111010001100000b DB O,O,O,O,cl,O,M,M,M,cl ORG 111010001110000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ; caracter 1101001 => Marcladizq ORG 111010010000000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111010010010000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111010010100000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111010010110000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111010011000000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111010011010000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111010011100000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111010011110000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ; caracter 1101010 => Marcladder ORG 111010100000000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111010100010000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111010100100000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111010100110000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111010101000000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111010101010000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111010101100000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111010101110000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ; caracter 1101011 => Marcladaba ORG 111010110000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 111010110010000b DB cl,cl,cl,cl,cl,cl,cl,cl,cl,cl ORG 111010110100000b DB O,O,O,O,O,O,O,O,O,O ORG 111010110110000b DB cl,cl,cl,cl,cl,cl,cl,cl,cl,cl ORG 111010111000000b DB M,M,M,M,M,M,M,M,M,M ORG 111010111010000b DB M,M,M,M,M,M,M,M,M,M ORG 111010111100000b DB O,O,O,O,O,O,O,O,O,O ORG 111010111110000b DB Neg,Neg,Neg,Neg,Neg,Neg,Neg,Neg,Neg,Neg ; caracter 1101100 => Marcladarr ORG 111011000000000b DB Neg,Neg,Neg,Neg,Neg,Neg,Neg,Neg,Neg,Neg ORG 111011000010000b DB cl,cl,cl,cl,cl,cl,cl,cl,cl,cl ORG 111011000100000b DB M,M,M,M,M,M,M,M,M,M ORG 111011000110000b DB M,M,M,M,M,M,M,M,M,M ORG 111011001000000b DB O,O,O,O,O,O,O,O,O,O ORG 111011001010000b DB cl,cl,cl,cl,cl,cl,cl,cl,cl,cl ORG 111011001100000b DB O,O,O,O,O,O,O,O,O,O ORG 111011001110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1101101 => Marcladmed ORG 111011010000000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 111011010010000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ORG 111011010100000b DB cl,cl,cl,cl,cl,cl,cl,cl,cl,cl ORG 111011010110000b DB M,M,M,M,M,M,M,M,M,M ORG 111011011000000b DB M,M,M,M,M,M,M,M,M,M ORG 111011011010000b DB M,M,M,M,M,M,M,M,M,M ORG 111011011100000b DB O,O,O,O,O,O,O,O,O,O ORG 111011011110000b DB CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO,CFO ; caracter 1101110 => Marcesqmedizq ORG 111011100000000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111011100010000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ORG 111011100100000b DB O,M,M,M,cl,O,cl,cl,cl,cl ORG 111011100110000b DB O,M,M,M,cl,O,M,M,M,M ORG 111011101000000b DB O,M,M,M,cl,O,M,M,M,M ORG 111011101010000b DB O,M,M,M,cl,O,M,M,M,M ORG 111011101100000b DB O,M,M,M,cl,O,O,O,O,O ORG 111011101110000b DB O,M,M,M,cl,O,cl,CFO,CFO,CFO ; caracter 1101111 => Marcesqmedder ORG 111011110000000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111011110010000b DB CFO,CFO,CFO,O,cl,O,M,M,M,cl ORG 111011110100000b DB Cl,Cl,cl,cl,cl,O,M,M,M,cl ORG 111011110110000b DB M,M,M,M,cl,O,M,M,M,cl ORG 111011111000000b DB M,M,M,M,cl,O,M,M,M,cl ORG 111011111010000b DB M,M,M,M,cl,O,M,M,M,cl ORG 111011111100000b DB O,O,O,O,cl,O,M,M,M,cl ORG 111011111110000b DB CFO,CFO,CFO,O,Cl,O,M,M,M,cl ; caracter 1110000 => Misilillo ORG 111100000000000b DB CFO,CFO,CFO,CFO,GO,GC,CFO,CFO,CFO,CFO ORG 111100000010000b DB CFO,CFO,CFO,GO,GO,GC,GC,CFO,CFO,CFO ORG 111100000100000b DB CFO,CFO,CFO,RO,RO,RC,RC,CFO,CFO,CFO ORG 111100000110000b DB CFO,CFO,CFO,GO,GO,GC,GC,CFO,CFO,CFO ORG 111100001000000b DB CFO,CFO,CFO,GO,GO,GC,GC,CFO,CFO,CFO ORG 111100001010000b DB CFO,CFO,CFO,GO,GO,GO,GC,CFO,CFO,CFO ORG 111100001100000b DB CFO,CFO,CFO,Rc,AMC,Rc,Rc,CFO,CFO,CFO ORG 111100001110000b DB CFO,CFO,CFO,Rc,Rc,AMC,Rc,CFO,CFO,CFO END