------------------------------------------------------------------------------ H B O M a g a z i n e ------------------------------------------------------------------------------ Hacked by Owls Magazine, Volumen 1 - Numero 5. X de Febrero de 1995 - X de Abril de 1996 Indice ====== Editorial...............................................0x01050000 CONCURSO: "Hello World".................................0x01050001 Telefonia Publica.......................................0x01050002 1. Conceptos <-------- by all of us 1.5 Se#alizacion <-------- by OPii 2. Tarjetas, fichas, etc <----- by Cut&Paste 3. Dos Modelos a analizar: 3.1 TELECOM <-- Logical Backdoor && Casper 3.1.1 Telefono publico modular de Telecom 3.1.2 Analisis estructural y de componentes 3.1.3 Analisis del codigo del Z80 3.1.4 Analisis del codigo del i8051 3.1.5 Patches, posibilidades... 3.1.6 Conceptos de seguridad fisica POCSAG <-------- by Pelaca.............................0x01050003 My First Backdoor Toolkit #3............................0x01050004 - NONOSEQUE <------ by [ME] Conferencias varias ....................................0x01050005 - HOPE 94 - GonzoCon 94 - Summercon 95 <---- by Saltamontes Nuestra Conferencia 96..................................0x01050006 Readshit................................................0x01050007 - Bull Rocket #1 <---- by Logical backdoor - Llaneros solitarios... - Entrevistas Hacking for Dummies #2 <---- by everybody...............0x01050008 ContactUs...............................................0x01050009 Agradecimientos y fuckyous..............................0x0105000A Disclaimer..............................................0x0105000B -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= PGP -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= HBO Staff> - Janx Spirit - Logical Backdoor - OPii - Saltamontes Colaboradores del numero 5> - [ME] - Casper - Pelaca 0x01050000 - Editorial ====================== Evidentemente hay una nota fuerte en esta revista, y es la de Telefonia Publica... esta claro que la mayoria de ustedes se preguntaban muchas de las cosas que se dicen en esta nota, ahora mi pregunta es: por que no hicieron algo al respecto? ehh? pero bueno, HBO esta en todo... tirando la primera punta por lo menos... como veran el codigo no esta analizado exahustivamente, ni estan solucionados todos los problemas que se plantean en los patches e ideas... bueno, es sencillamente una tarea muy grande y somos bastante pocos incluyendo nuestros amigos y colaboradores, asi que a todos los que laburen en estos u otros temas les proponemos mantenernos en contacto, y HBOMAG junto con los bbs por los que rondamos son buenas maneras de hacerlo... este es un tema bastante apasionante y se por oidas que mucha gente prueba y encuentra boludeces al respecto... Seguimos con algunas columnas que se estan haciendo habituales, y ya empezamos a mandar nueva fruta como podran ver... XXXXXXXXXXXXXXXXXXXXXX CENSORED XXXXXXXXXXXXXXXXXXXXXXXX Amigos, amigas, hackerwannabees de todo el mundo, seguimos con la secuela de Hacking for Dummies que se que les gusto mucho... bahh, no es nada... siguen las anecdotas y demas. Y como siempre estamos intentando satisfacer a nuestro querido publico, volvemos con otro nuevo concurso, que no va a ser nada tan "complicado" como un killme.c, sino algo tan sencillo como un "Hello World". Interesados? Bueno, no importa, igualmente esta el articulo para que lo lean y ganen fabulosos premios. Y mas MFBT parte 3, READSHIT como siempre... Entrevistamos a Fernando Bosembiante y a Raquel Roberti, los responsables de la primera infamia en lengua castellana publicada sobre hackers. Nuestra seccion correo es re-inagurada por el heroe de todos los chicos, el autentico The Chacal. en fin, pasen y venas. eructen. HBO =============================================================================== -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =============================================================================== 0x01050001 - CONCURSO: "Hello World\n" ====================================== Buenas noches, ladies and gentlemans, bon soire - sean bienvenidos a la segunda entrega del concurso mas sexy, mas alto y mas tonto del mundo... uhhggg?? ahhhh! apaguen la radio... apaguen al tipo ese con cara de hippie... arhghghghg No recibimos tu wav charlando con diego? hmmm too bad, te quedaste con ganas de la pizza, o de las remeras HBO?? El segundo concurso de HBO, donde podes demostrarle al mundo entero tus capacidades de fingerwalking... bah. printf("%s",titulo); Eso es todo lo que hay que hacer. Por supuesto que esto tiene un pequenio catch. (obviando que tiene que tener main() y todas esas cosas para que funcione) El programa sera evaluado segun la cantidad, calidad y variedad de warnings que produzca. Las reglas son las siguientes: 1- Lo unico que tiene que hacer el programa es poner "Hello World" (mas \n, explicacion aparte para que ningun boludo se crea que es una trampa) Lo que hagan para llegar a eso no imorta, pero con un limite de 15 ";" . 2- Sera compilado con gcc y todos los warnings del compilador seran prendidos. La maquina va a ser un linux 1.3.x (la version del gcc sera aquella que venga con la correspondiente distribucion) 3- Que funcione. Bueno, es simple, rapido y puede ser divertido. Habra menciones especiales a todos aquellos capaces de hacer algo interesante. Los premios? Bueno: Primer premio: Entrada a MendozaConch + Noche de trashing por la ciudad guiada por el maravilloso staff de esta revista tan increible. Segundo premio: Entrada a MendozaConch + Remera HBO (modelos en HMAG #4) Premio Consuelo: Salida a MendozaConch + Remera 'I Suck' Nota: Siendo el concurso tan interesante se les permite participar a los miembros del staff y amigos y familiares, siendo los premios en este caso respectivamente una manteada y un puente chino, y pasando los premios anteriores a los primeros 3 no HomeFriends Ok?.(No quiero ensuciarme de vuelta con mis amigos y que para colmo me lo hagan de favor) El primer premio se publicara en la HBOMAG #6 Manden los programas a Satanic Brain BBS (383-7480), lean contact-us o publiquenlos en el diario, por mi es igual... =============================================================================== -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =============================================================================== 0x01050002 - Telefonia Publica ============================== 1. Conceptos Aja, entre sacar el titulo de conceptos y reacomodar el indice, prefiero escribir conceptos, ya que para eso no tengo que pensar. me decia a mi mismo. entonces por lo tanto a implica b y yo les cuento que esto es una nota de Telefonia publica, y bastante agradable. La verdad, estoy orgulloso de nosotros mismos por haber logrado esto y etc etc etc. Supongo que ustedes se toparon alguna vez con un telefono por ahi no? bueh, y desde bell en adelante naides se pudo hacer el pelotudo pero nosotros no. bah. No creo en lo personal, que tenga mucho que agregar aca, solo hacer mas larga la espera, asi que un lector interesado en la raw meat puede pasar directamente al punto siguiente. De paso, no viene al caso pero una vez me cole en una reunion de la asi llamada 2600 argentina, y algun pelotudo me dijo noseque sobre el prehacking de aca y el prejaquin de alla, y yo pienso: si se escribe phreaking y viene de phone y de freak, se pronuncia fric, pero bahh. punto aparte -- [OP] Interrumpo esta interesantisima disgregacion de nuestro amigo el psicopata LBD para recordarle que esto es un puto articulo sobre telefonia y que si quiere psicoanalisis que consulte a algun psicolo de eso que pululan por bsas. -- [LBD] nos parece que confundis esquizofrenia con psicopatia. pero bah nadie nos entiende. -- [SM] LBD, no queres ir a tomar aire un rato...? -- [OP] SAltamontes, si queres ser mi amigo aprende a escribir en un teclado en espanis gilun. Que LBD sea psicopate no quita que pueda ser esquizofrenico tambien ( ver teoria de como matar esta bien). -- [LBD1] alguno de mis yos talvez. [LBD2] quien yo? -- [SM] ...y a proposito de monitores subaquaticos, por que no terminas con tu disgregacion, y seguis deleitandonos con tus patologias que divertiran en demasia a tu padre... -- [LBDi, i=1 to n] esto se empieza a parecer demasiado a mis terapias de grupo. En fin, las siguientes son una serie de notas sobre telefonia, en este numero empezamos con senializacion y con telefonos publicos de TELECOM, en numero siguientes seguiremos con senializacion y veremos los mamotretos de Telefonica. Y algunas cosas mas... y terminaremos todos en cana. 1.5 Sistemas de senializacion en la Argentina. PARTE I ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ por OPii. Introduccion ~~~~~~~~~~~~ Bueno, este articulo describe el sistema de senializacion que se usa en la Argentina. Supongo que saben que es la senializacion telefonica ya que todos hicieron alguna vez bluebox y espero que lo hayan hecho sabiendo que carajo estaban haciendo, no como en el libro ese trucho de Bostandante que aparecen los chabones diciendo "..y manda el tonito ese piru-piru y despues mandas 1 que es la maxima prioridad del satelite y despues el numero de telefono... ", etc,etc. *NO* . La idea es entender que mierda pasa, no apretar teclas como un gil, para eso dedicate a data entry que encima te pagan. Aclaracion: El articulo se divide en 2 partes, ya que soy muy pajero y si esperaramos a que todos terminen sus articulos para publicar cada numero de la revista no tomaria 3 o 4 anios publicarlo, en lugar de 2 como sucede normalmente. La primera parte es mas que nada introductoria, la segunda tiene informacion mas interesante... BAH! Igual en caso de que no sepan de que diablos estoy hablando va una breve explicacion. A fin de que la cosa sea clara voy a hacer un esquema de la red telefonica de HBO, LatexTEL. Esta red tiene muchos abonados, incluso ni ellos mismos saben que son abonados, pero para el ejemplo basta con dos abonados: B _________ ________ _________ _________ / | | | | | | | | / | CO | ===========| C1 |********| C2 |=======| CD |/ | | | | | | | | --------- -------- --------- --------- / * * / * ---------- * / * | | * A *****| C3 |******************* | | ---------- "A" es El Chachal, que quiere llamar a su Noviecita Menor de Edad, cuyo nombre no conozco asi que llamemosla "B" [o NMdE]. "CO" es la Central de Origen, la central a la que A [EC] tiene tiene "conectado su telefono" [para hacer esto mas corto supongamos que esto es asi, que no hay ninguna caja en el medio, ni multipares ni filtros de linea ni multiplexers, etc, etc. EC tiene un cable de 2 hilos que va de su choza a CO, lo mismo para NMdE, la novia menor de edad del chacal, que esta conectada a CD]. "CD" es la Central de Destino. Ci (i = 1..3) son centrales intermedias que pueden o no tener abonados conectados a ellas, las llamamos centrales de transito, tandem o cualquier otro termino apropiado que se les ocurra, por ejemplo centrales de garcha, que me parece bastante apropiado para las Pentaconta. Las lineas dibujadas con "*" y "=" son troncales entre centrales , de distintas capaciades, cada troncal puede transportar las seniales de varias comunicaciones [correspondientes a varias lineas de abonados] utilizando tecnicas que esta demas describir aca. [ multiplexion por division de tiempo, de frecuencia, etc, etc]. A quiere llamar a B, para invitarla a salir a dar vueltas en roller por la autopista. Para eso tiene que descolgar su telefono y marcar el numero de B, el telefono de B suena y B descuelga y escucha a A... "Hola mi vida, tesorito, queres salir en roller conmigo?" "Si, si, vamos a la autopista asi nos pisan...", etc, etc. AHORA BIEN, COMO SE COMUNICO A CON B? Por arte de magia??? Para que sirven los numeros de telefono? Que gusto tiene la sal?? El objetivo de la senializacion es permitir que las centrales [switches] intercambien la informacion necesaria para establecer y "liberar" una comunicacion, o para supervisar y modificar el funcionamiento general de la red [ de aca en mas cuando pongo red me refiero al la red publica conmutada, que es como les gusta decirle a los tipos de telefonica/telecom, o tambien RPC o PSN iniglish o PSTN o algun otro termino que se me ocurra en el momento es decir, la red de telefonos/centrales/equipos-asociados ok??? mas claro tomate un whisky]. Entonces, hm en que ... ahh, las funciones de la senializacion son: Supervision. E'cir detectar la modificacion del estado de algun elemento de la RPC. Por ejemplo, detectar cuando algun abonado descuelga, o cuando se libera un circuito, etc. Direccionamiento. Se refiere al intercambio de la informacion ne'saria para el establecimiento de una llamada, por ejemplo mandar y/o recibir el numero del abonado llamado, el numero del abonado llamante, el tipo de abonado, seniales para retransmitir informacion que no se recibio a tiempo,etc. Explotacion Son seniales que permiten la optimizacion del uso de los recursos de la red [blah, optimizacion las bolas, en fin.. mas adelante veremos], o realizar tareas de gestion y contabilidad. Por ejemplo las seniales de tasacion [o "tarificacion" como les gusta decir a los gallegos de Teleforrisca], etc. Sistemas de senializacion ~~~~~~~~~~~~~~~~~~~~~~~~~ Existen 2 sistemas de senializacion: 1). Senializacion por canal asociado. En este caso, todas las seniales se mandan por un canal asociado a la llamada, puede ser el mismo o no, lo importante es que cada llamada tiene un canal que se usa para mandar y recibir la informacion de senializacion de esa llamada. 2). Senializacion por canal comun. Aca hay un canal por el cual se envia y recibe la informacion de varias llamadas, informacion sobre el estado de la red y sus diversos circuitos, switches, etc. El sistema mas conocido es el CCIS (Common Channel Interoffice Signalling) desarrollado por AT&T y que dio origen al CCITT #7 o SS#7 o sistema 7 como prefieran llamarlo. Estamos hablando de un enlace digital por el cual se mandan paquetes con la informacion, cada paquete tiene una "etiqueta" que indica de que tipo es y a que circuito pertenece. Bueno, en este articulo nos dedicamos exclusivamente a la senializacion por canal asociado. Tipos de senializacion ~~~~~~~~~~~~~~~~~~~~~~ Hay dos (2) tipos de senializacion: Senializacion de linea y senializacion de registro. SENIALIZACION DE LINEA. La senializacion de linea sirve [obviamente] para controlar el estado de los circuitos y supervisarlo antes, durante y despues de la comunicacion [toma de linea (seize), liberacion forzada hacia adelante (clear fwd), hacia atras, etc.]. Aca viene al caso aclarar que cuando hacen BB los 2 primeros tonos que mandan corresponden a este tipo de senializacion, estan mandando un clear fwd para liberar la linea que estan usando seguido de un seize (toma) para tomar la linea nuevamente... Pueden usarse distinto metodos de transmision para este tipo de senializacion: - Corriente continua (generalmente entre viejas centrales electromecanicas) - Dentro de banda ( en la Argentina no se usa, por lo menos no en los circuitos de la Argentina, llamar a un "pais directo" ya es otra cosa... ) - Fuera de banda ( e'cir fuera del rango de voz que puede emitir el abonado ) - MIC SENIALIZACION DE REGISTRO. Seniales que se transmiten entre registros de las centrales para identificar el numero al que se llama, numero del que llama, categoria del abonado, estado de la linea, troncales de salida, etc. Puede realizarse por medio de los siguientes metodos: - Impulsos decadicos (corriente continua o fuera de banda), o sea el famoso "uhg discar por pulso", mismo que TAMBIEN hace la central al comunicarse con otra central (once again estamos hablando de centrales garcha de cuando mi abuelo todavia tenia pelo). Un ejemplo de esto es verificable si llaman a La Plata, aunque Uds. tenga discado por tono, discan y van a escuchar, una vez que terminaron de discar, los pulsos que manda alguna central a la de alla. [ En realidad no se si sigue siendo asi ya que cambiaron muchas centrales por la zona sur ultimamente, blah igual es una ejemplo, prueben y vean] - Multifrecuencia. Le seniales se obtiene combiando varias frecuencias (2) dentro de banda. Hay 2 formas de hacer la senializacion: 1. Tramo a tramo. En este caso las seniales se transmiten desde CO a C1, que la procesa y la retransmite (toda o parte de ella) a C2 o C3 que a su vez hacen lo mismo y la transmiten a CD. CD finalmente establece la comunicacion, con lo cual se crea un camino virtual de voz entre EC y su NMdE (A y B). 2. Extremo a extremo. Aca CO transmite a cada central solo la informacion necesaria para el establecimiento de la conexion con la central siguiente, el control de la conexion entre CO y CD lo mantiene CO. La senializacion de linea es tramo a tramo, la de registro puede ser tramo a tramo [TaT] o extremo a extremo [EaE]. Senializacion Abonado-Central ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Esta completamente demas explicar que es la informacion que se intercambian el telefono del abonado con la central correspondiente, EC (A) con CO y NMdE (B) con CD. Algunas seniales de interes son: A colgado: El circuito de A esta abierto, imp. >= 100 KOhm A descolgado: Circuito cerrado, imp. <= 600 Ohm Discado: -Por pulso, entre 8 y 16 pulsos por segundo, que cierran y abren el circuito, con una relacion 1/3 cerrado y 2/3 abierto. Tolerancia de +/- 10%. -Por tono, de acuerdo a la recomendacion Q.23 de ITU (CCITT). El conocido DTMF, en el que hay 16 seniales, 10 para los digitos y 6 de reserva, cada senial se compone de 2 frecuencias, tomadas de 2 grupos de 4 frecuencias cada uno. Hz. 1209 1336 1477 1633 |-----|-----|-----|-----| | | | | | Cada frecuencia tiene una 697 | 1 | 2 | 3 | A | tolerancia de +- 1,8% de la frecuencia | | | | | indicada. |-----|-----|-----|-----| | | | | | 770 | 4 | 5 | 6 | B | El nivel de ruido debe ser como minimo | | | | | 20dB menos que el de las frecuencias. |-----|-----|-----|-----| | | | | | 852 | 7 | 8 | 9 | C | | | | | | |-----|-----|-----|-----| | | | | | 941 | * | 0 | # | D | | | | | | |-----|-----|-----|-----| -Tono de invitacion a discar. Es el tono que se escucha cuando uno desculea el telefono. Tono cuntinuado de frecuencia unica de 425Hz. -Tono de retorno de llamada. Tono que manda CD a A para indicar que B esta libre y esta dandole aviso de que A llama, el ring,ring que uno escucha cuando llama a alguien. Aca hay multiples variaciones y basicamente los distintos tonos de este tipo nos pueden dar una idea de con que tipo de central/pbx nos estamos comunicando. Las especificaciones son: Frecuencia de 425Hz. Se transmite entre 0,67 y 1,5 segundos seguido de 3 a 5 segundos de silencio. Segun las normas de Telescum y Teleforrica se establecen los siguientes tiempos como "estandares", aunque todos sabemos que esto varia de acuerdo a las condiciones climaticas, la influencia de la actividad solar en las antenas de transmision satelital, la polinizacion del aire, la humedad ambiente y cualquier otra cosa que a uno se le pueda ocurrir, en la realidad el tono es cualquiera y distinto en cada central o tipo de central. Decia, los tiempos definidos como estandares son: Tono: 1 seg. Silencio: 4 seg. -Tono de ocupado. La envia CO/Ci/CD a EC (A) cuando la linea de NMdE (B) esta ocupada porque esta hablando con su amante, o cuando las recepcion de alguna senial para el discado da timeout. El ciclo de tono-silencio completo debe durar enetre 300 y 1000ms. La relacion T/S debe estar entre 0,67 y 1,5. La frecuencia es la misma, 425Hz. En la practica Telescum y Teleforrisca usan T=300ms y S=200ms. -Tono de congestion. La envia CO/Ci/CD a EC cuando la llamada a NMdE no puede completarse o cuando: Alguna de las centrales del camino recibe una senial A4 o B4 hacia atras [ mas adelante vemos que son estas seniales]. Hay congestion o falla en alguno de los circuitos de la central. Frec. 425Hz. T=300ms. S=400ms. -Tono de indicacion de servicio suplementario activado. Este tono lo manda CO a EC cuando activa algun servicio [tipo Plustel] extra, como por ejemplo aprete FLASH y recibe este tono y despues tono de discar [ EC quiere llamar a F.BostaGrande para hacer una conferencia con NMdE y el y convencerlo de que use rollers y vaya a la autopista con ellos]. En realidad jamas escuche este tono, excepto cuando llamo desde un interno de un PBX, pero nunca desde la RPC. Si alguien escucho este tono aviseme ... Frec. = 425Hz. T=1s S=0,25s -Tono de indicacion de llamada en espera. Tonito que escucha EC mientras esta hablando con NMdE cuando FBG lo llama para decirle que no tiene rollers y no puede salir porque tiene que salir a tomar algo con Fabian Garcia (FG). Frec.=425Hz. T=0,3s S=10s -Tono de indicacion de spera/entretenimiento. Esto es lo que escucha NMdE mientras EC hace flash y disca el telefono de FG para decirle que no salga mas con FBG porque el lo engania con otra, err, digo otro. [ No se que mierda tiene de entretenimiento, en realidad es completamente aburrido escuchar esta mierda mientras el otro disca para entrar en conferencia o toma una llamada en espera] Frec.=425Hz. T=0,4s S1=0,2s S2=4s. La senial se forma asi: T-S1-T-S2-T-S1... -Tono de indicacion de fin de servicio tripartito [ BULLSHIT!@#$] Este tono lo envia CO a todos los abonados que estan en conferencia cuando esta termina. [Jamas lo escuche, si alguien lo hizo aviseme] Frec.=950/1400/1800Hz. T=3x0,33s -Tono de aviso. Se envia a EC y NMdE para indicarles la proxima intervencion de la operadora, o sea es lo que esuchan antes de que entre la operadora en la linea y les diga que corten porque a EC lo llama alguien de Alemania que quiere hablar sobre el mitico Altos. Frec.=1400Hz. +-50Hz. T=100ms S=1900ms -Tono de indicacion de procedimiento anormal. Es el tono que se escucha cuando NMdE corta y EC deja el telefono descolgado durante mucho tiempo. Se mandan 2 tonos alternados de la misma o distinta frecuencia, mayor o igual que 900Hz. a un nivel de potencia mayor que 3dBm0 -Impulso de computo. Tono que se envia al abonado llamante (si es un TP o tiene medidor en su extremo) para que compute el costo de la llamada... Frec.=16Khz y entre 120 y 180 ms. de duracion, algunos TPs reciben un tono de 50Hz. +/- 10% de 150ms +/- 5%. Senializacion entre Centrales ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bueno, esta es la parte mas interesante de la senializacion, para la senializacion entre centrales hay 2 tipos de seniales, seniales hacia adelante y hacia atras. La seniales hacia adelante van desde CO o alguna central de transito hacia CD o alguna central de transito que le sigue en su camino hacia CD. Igualmente, las seniales hacia atras van hacia CO o alguna central de transito anterior a la central que las manda. Seniales hacia adelante. 1. TOMA (seize). Se manda al principio de la llamada para que el circuito pase de estado de reposo a 'en uso', en C1 provoca que se conecten al circuito los equipos correspondientes (registros,etc). Existen 2 seniales de toma, toma corta (la que hace el abonado) y toma larga (la hace una operadora), la unica diferencia entre ellas es la duracion. Si bien esto no esta especificado en las normas de Telefonica y Telecom, la recomendacion Q.79 del CCITT dice que la senial corta debe tener una duracion de 150ms +/- 20% y la larga de 600ms +/- 20%. 2. LIBERACION (EC cuelga [de un arbol]).Se transmite para terminar la llamada o el intento de establecerla, con esta senial se 'liberan' en las sucesivas centrales de transito y CD todos los equipos asignados a la llamada. Ademas de interrumpir la conexion, esta senial finaliza la tasacion. (El famoso clear-forward, ok?) 3. DISCADO DECADICO. En el caso de que entre las centrales no haya senializacion de registro R2 se envia esta senial. Consiste en un determinado numero de impulsos para identificar cada digito y una pausa entre digito y digito. Para senializacion LOOP ya dijimos que se usa una cadencia de entre 8 y 16 pulsos por segundo, para senializacion E y M el tiempo de iduracion de los impulsos es de 50ms +/- 20%. Para la pausa entre digitos hay un tiempo minicom de 600ms. y maximo de 15s. Seniales hacia atras. 1. RESPUESTA ( NMdE descuelga o CONTESTACION). Transmitida por CD para indicar que NMdE levanto el tubo (uhuh), inicia la tarifacion (se considera como el primer impulso de computo). 2. COLGAR (NMdE cuelga o LIBERACION FORZADA). Tranmitida por CD para indicar que NMdE colgo y se fue a ponerse los rollers para salir a la autopista. Cuando se recibe esta senial se realizan 2 cosas de acuerdo a si el tramo del circuito por donde se recibe es con computo o sin computo. Si es con computo se interpreta como una senial de LIBERACION FORZADA y se manda la senial hacia adelante LIBERACION. Si es sin computo CO o la Ci (para el i apropiado), hace un ... digamos un alarm(60) [si no saben C de unix lo lamento] y manda hacia adelante (despues de los 60s y si EC todavia no colgo) la senial de LIBERACION, mandando tono de ocupado a EC. Esto es lo que permite que si A llama a B y despues de hablar, B corta pero A no lo hace, B puede levantar el tubo y todavia esta A ahi, jerking off. Pero lo bueno dura poco, y en este caso son solo 60s. Sin embargo, en las antiguas centrales SxS (pasoapasoqueledicen) uno podia llamar a X y dejar descolgado, bloqueandole efectivamente el telefono al boludo de X, que seguramente se lo merecia... bah en fin, continuemos.... 3. BLOQUEO. Transmitida por algun circuito libre hacia CO para provocar que ese circuito se bloquee e impedir que sea tomado, es la responsable del ritmo-de-samba que se experimenta, antes de establecer la comunicacion, en algunas centrales cuando uno llama... p.e. la zona de Belgrano (bah, no se si todavia sigue pasando). 4. REPOSO o CONTROL DE LIBERACION. Transmitida hacia CO en respuesta a una de LIBERACION (EC cuelga) para indicar que esta ultima senial efectivamente puso los equipos de conmutacion en estado de reposo en CD (o Ci, para el i correspondiente). El circuito esta protegido contra cualquier nueva toma hasta que en CO se realicen las operaciones de desconexion de sus equipos de conmutacion. 5. SEGURIDAD DE LIBERACION. Esta senial se transmite hacia CO despues de haberse recibido una senial de liberacion, con el fin de confirmarla, se sigue una secuencia obligada para este tipo de 'negociacion'. En definitiva es una especie de ACK que ademas sirve para verificar fallas en los canales de onda portadora (se usa en senializacion de E Y M) y bloquearlos si corresponde. 6. COMPUTO. Senial aplicada por el centro de tasacion para hacer que EC pague por llamar a NMdE. Si considera como primera senial de computo a le senial de RESPUESTA, a partir de ese momento el centro de tasacion, alguna de las centrales 'en camino'a CD, manda seniales de COMPUTO a intervalos regulares (el famoso *pulso* tictic). 7. ACUSE DE RECIBO DE TOMA. Se transmite hacia CO indicando que una canal a sido tomado (con seize) y esta en estado de 'en uso'. Cuando CO recibe esta senial se completa la parte de senializacion de linea, y se puede comenzar la senializacion de registro que es la identificacion del DN a llamar y del DN llamante. Ok, existen 2 formas de senializacion de acuerdo a las caracteristicas del trunk sobre el que se senializa, analogico o digital. Para ambos casos hablaremos de senializacion con computo. Version analogica [B.P.O]. ~~~~~~~~~~~~~~~~~ Funciona con inversion de la polaridad en los hilos de la linea, p1,polaridad normal: -48v en hilo a, tierra hilo b. p2,polaridad inversa: tierra en (a), -48v en (b). alta resistencia: >= 12 KOhm baja resistencia: <= 6.6 KOhm En REPOSO (idle, bah) hay alta resistencia en el trunk, para la toma CO cierra el circuito y baja la resistencia, Ci/CD reconoce p1. Para el discado CO cierra y abre el circuito alternativamente, mas o menos entre 8-16 impulsos por segundo ( discado decadico osea), Ci debe reconocer p1/p2 en esta parte. Cuando se libera el canal, se abre el circuito nuevamente. Es importante poder distinguir una inversion de polaridad (p1 <-> p2) de una completa falta de tension en la linea, lo ultimo indica BLOQUEO. Bue, esto no es demasiado interesante ya que teoricamente no quedan trunks analogicos en el AMBA y el resto de la areas urbanas de Argentina, y quedan muy pocas centrales analogicas... Version digital [L.M.E] ~~~~~~~~~~~~~~~ En un canal digital, linea E1 de 64kbs hay 32 canales, multiplexados por division de tiempo (TDM), de ellos se toman 30 canales para comunicacion telefonica, sampleando a 8khz y usando PCM de 8 bits. Existe por lo tanto un intervalo de tiempo (timeslot) que corresponde a cada canal del E1. Se denomina una *trama* al conjunto de intervalos de tiempo (timeslots) consecutivos desde el timeslot de un canal al siguiente timeslot del mismo canal. Los ts de 1-15 y 17-31 corresponden a los 30 canales telefonicos En el ts0 se transmite la senial de alineacion de trama, una vez cada dos tramas, alternada con una senial sin informacion de alineacion. Esto se usa para que cada extremo pueda mantener la sincronia y no perder informacion ni mezclar timeslots que corresponden a distintos canales, esto si seria interesante!@#$. Ok, la senial de alineacion de trama es algo asi como: bit # 0 1 2 3 4 5 6 7 --------------- valor x 0 0 1 1 0 1 1 x: Reservado uso internacional, por ahora x=1 El ts0 *SIN* alineacion de trama es: bit # 0 1 2 3 4 5 6 7 --------------- valor x 1 y z z z z z x: Reservado uso internacional, por ahora x=1 y: Indicacion de alarma para el extremo distante, en caso de falla en el multiplexor. z: Reservado uso nacional, por ahora z=1 El ts16 se usa para senializacion, cuando se emplea senializacion por canal asociado (caso de argentina) 16 tramas consecutivas forman una multitrama. En el ts16 se asignan los bits de cada trama de la siguiente manera: ts16-trama0: 00001y11 y: Utilizado para perdida de alineacion en multitrama. ts16-trama1 : abcd abcd canal1 canal16 ts16-trama2 : abcd abcd canal2 canal17 ts16-trama15: abcd abcd canal15 canal30 Bits de senializacion ~~~~~~~~~~~~~~~~~~~~~ Hay 8 bits para la senializacion por cada circuito telefonico, 4 hacia adelante y 4 hacia atras, los llamaremos Af Bf Cf Df y Ab Bb Cb Db por f de forward y b de backward. En la senializacion R2 digital se utilizan solo 2 bits en cada sentido, Af y Bf y Ab y Bb. Af indica el estado de CO osea si EC [recordemos, nuestro amiguito El Chacal] tiene su telefono colgado o descolgado. Ab indica el estado de Ci o CD , colgado o descolgado. Bf y Bb indican el estado del circuito desde CO y CD respectivamente, puede ser en reposo (idle) o en ocupacion (erhmm seized). Los bits C y D toman valores fijos: Cf == Cb == 0; Df == Db == 1; Inicialmente un canal esta en idle ( af=1;bf=0;ab=1;bb=0), esto lo podemos representar, visto desde CO, como: Tx Rx Tx Rx ----- o si incluimos los bits C y D : --------- 10 10 1001 1001 CO quiere tomar un canal, entonces vemos: 00 10 Ci recibe la toma y manda un seizure acknogledge: 00 11 Aqui CO pasa a senializacion de registro, mandando los digitos del numero a discar y la identificacion del abonado llamante (si es necesario) Una vez terminado esto CD hace la conexion y la noviecitamenordeedaddelchachal levanta el tubo [ del telefono]. Vemos: 00 01 Cuando EC quiere colgar (clear forward) CO pasa el bit Af de 0 a 1. Cuendo NMdE quiere colgar CD pasa el bit Ab de 0 a 1. En conclusion: EC le cuelga a NMdE cuando terminan de hablar: 00 01 -> 10 01 -> 10 11 -> 10 10 y el canal esta otra vez en idle. NMdE le cuelga a EC: 00 01 -> 00 00 -> 10 00 -> 10 10 y el canal esta idle. La condicion de canal bloqueado se reconoce por el estado 11 hacia adelante o hacia atras. Por ejemplo, si CD esta bloqueando el canal CO ve: Rx Tx ------- [ CO transmite idle pero CD transmite bloqueo ] 10 11 Cuando las dos centrales estan bloqueando el canal tenemos: Rx Tx -------- 11 11 Bueno, es bastante sencillo creo, fijense que cuando hay un cambio de estado SOLO se modifica UN bit, con lo cual es facil detectar fallas y equipo que esta funcionando fuera de la norma. Como un codigo de hrmm hmm Grey? En la segunda parte del articulo vemos mas en detalle esto, pasamos a la etapa de senializacion de registro y pongo algunos ejemplos de senializacion entre centrales de distinto tipo en Argentina. Es mas, este articulo deberia ser una sola parte, pero es el momento de que me dedique a cosas menos productivas. Ver ContacUs si quieren mandar feedback,comentarios,etc. 2. Tarjetas fichas, etc by Cut&Paste Lo siguiente es un cut&paste de otra gente, incluido por un motivo de completitud. y para que no tengan que aprender a manejar los multiples files en su editor de cabecera. =============================================================================== What you need to know about electronics telecards quien hizo esto? fuck, alguien deberia acordarse... =============================================================================== Content --------- I ) The cards from Gemplus, Solaic, Schlumberger, Oberthur: I-1) Introduction: I-2) SCHEMATICS of the chip: I-3) PINOUT of the connector: I-4) Main features: I-5) TIME DIAGRAMS: I-6) Memory MAP of cards from France and Monaco: I-5) Memory MAP of cards from other countries: II ) The cards from ODS: (German cards) II-1) Introduction: II-2) Pinout: II-3) Main features: II-4) Time Diagrams: II-5) Memory Map: II-6) Electrical features: III) Schematics of Readers: III-1) Reader 1: III-2) Reader 2: IV) The program: ------------------------------------------------------------------------------- I ) The cards from Gemplus, Solaic, Schlumberger, Oberthur: (French cards) ====================================================================== I-1) Introduction: ------------ Since the middle of 80's have appeared a new generation of cards ( the smart-cards or chip cards ) that have replaced most of the magnetics cards applications notably for telecom payement and also for credit cards. These cards are far more secure than the magnetics cards, and there are several kind of cards following the application. The simplier ones are the Simple Memory cards like the one used as Telecard for the telecom payement in the public phone-booths ( Generaly all the memory content is readable, and there is a maker-area that is unwritable ) , then there are more sofisticated cards: Memeory Cards with some area read protected by a key, these cards can contain some private informations in the read-protected area. At the end there are microprocessor-cards (cards working following the ISO-7816 protocol), that are the safiest ones since these cards have their own internal Operating System that prevent I/O if the Pin code has not been entered in the cards before ( These cards are used when confidentiality is needed, like in bank cards, crypted TV access cards, health cards, etc ... ). About telecards, even if these cards are the less safe ones, don't think that you are going to phone freely for that, in fact no. All the data are readable since there are no confidential data inside, the the cards are well done enough to be very secure for the payement of telecom communications in public booth. So, what is a phonecard exactly ? In fact generaly it's a 256 bits EPROM ( French likde cards ), or a 128 bits EEPROM (German like cards) with a serial output and some other control pins. Then why can it not be refilled ? Well, indeed to refill the card you will have to erase the cards with UV, knowing that the cards is coated in UV opaqued resin that prevent UV from reaching the silicium chip, and even if you could to erase the chip you will have to program the manufactuer area that is write-protected by a lock-out fuse that was fused after the card programming in factory. Neithertheless it can be very interesting to study how these cards work, to see which kind of data are inside and how the data are maped inside or to see how many units are left inside for exemple. Besides there are a great number of applications of these cards when there are used (only for personal use of course) , since you can use them as key to open a door, or you can also use them as key to secure a program, etc .... French Telecards have been created in 1984 and at this time constructors decided to build these cards in NMOS technology but now, they plan to change by 1994 all readers in the public booths and use CMOS technology. Also they plan to use EEPROM to secure the cards and to add many usefull infornations in, and you will perhaps use phone cards to buy you bread or any thing else. These cards are called Second Generation Telecards. I-2) SCHEMATICS of the chip: ---------------------- .-------------------. | | --|> Clk | | _ | --| R/W | | | --| Reset | | | --| Fuse | | | --| Vpp | | | | | '-. .-' | | .-------------------. | Out |-- serial output '-------------------' I-3) PINOUT of the connector: ------------------------- AFNOR CHIP ISO CHIP ---------- -------- -------------+------------- -------------+------------- | 8 | 4 | | 1 | 5 | | | | | | | +-------\ | /-------+ +-------\ | /-------+ | 7 +----+----+ 3 | | 2 +----+ + 6 | | | | | | | | | +--------| |--------+ +--------| |--------+ | 6 | | 2 | | 3 | | 7 | | + +----+ | | +----+----+ | +-------/ | \-------+ +-------/ | \-------+ | 5 | 1 | | 4 | 8 | | | | | | | -------------+------------- -------------+------------- NB: only the position of the chip is ISO standardized and not the pinout PINOUT: 1 : Vcc = 5V 5 : Gnd ------ 2 : R/W 6 : Vpp = 21V 3 : Clock 7 : I/O 4 : Reset 8 : Fuse I-4) Main features: --------------- - Synchronous protocol. - N-MOS technology. - 256x1 bit organisation. - 96 written protected by a lock-out fuse. - Low power 85mW in read mode. - 21 V programming voltage. - Access time: 500ns - Operating range: -100C +700C - Ten year data rentention. I-5) TIME DIAGRAMS: --------------- +21V _____________ +5V ____________________________________| |_________________ Vpp : : +5V ___________________:_____________:_________________ Reset 0V ________________| : : : : : +5V ____ : ____ : ______:______ 0V ___| |_______:_____| |________:______| : |__________ Clock : : : : : : : : : +5V : : : : : :______:______: : _ 0V ___:____:_______:_____:____:________| : |______:__________ R/W : : : : : : : : : +5V : : :_____: :________: : : :__________ 0V XXXXXXXXXXXXXXXXX_____XXXXXX________XXXXXXXXXXXXXXXXXXXXXX__________ Out : : : : : :<-----><---->: : : : : : : :10 to 10 to : : : : : : :50 ms 50ms : Reset Bit 1 Bit2 Bit 3 card reading reading Bit2 writing to 1 reading I-6) MEMORY MAP of cards from France and Monaco: -------------------------------------------- Bytes Bits Binary Hexa +-----------+-----+ 1 1 --> 8 | | | ---> Builder code. +-----------+-----+ 2 9 --> 16 | 0000 0011 | $03 | ---> a french telecard +-----------+-----+ 3 17 --> 24 | | | +-----------+-----+ 4 25 --> 32 | | | +-----------+-----+ 5 33 --> 40 | | | +-----------+-----+ 6 41 --> 48 | | | +-----------+-----+ 7 49 --> 56 | | | +-----------+-----+ 8 57 --> 64 | | | +-----------+-----+ 9 65 --> 72 | | | +-----------+-----+ 10 73 --> 80 | | | +-----------+-----+ 11 81 --> 88 | | | +-----------+-----+ 12 33 --> 40 | 0001 0011 | $13 | ---> 120 units card | 0000 0110 | $06 | ---> 50 units card | 0000 0101 | $05 | ---> 40 units card +-----------+-----+ 13-31 97 --> 248 | | | ---> The units area: each time a unit | | | is used, then a bit is set to "1"; | | | Generaly the first ten units are | | | fused in factory as test. | | | | | | | | | +-----------+-----+ 32 249 --> 256 | 1111 1111 | $FF | ---> the card is empty +-----------+-----+ I-7) MEMORY MAP of the other cards: ------------------------------- Bytes Bits Binary Hexa +-----------+-----+ 1 1 --> 8 | | | +-----------+-----+ 2 9 --> 16 | 1000 0011 | $83 | ---> a telecard +-----------+-----+-----------+-----+ 3-4 17 --> 32 | 1000 0000 | $80 | 0001 0010 | $12 | ---> 10 units card | | | 0010 0100 | $24 | ---> 22 units card | | | 0010 0111 | $27 | ---> 25 units card | | | 0011 0010 | $32 | ---> 30 units card | | | 0101 0010 | $52 | ---> 50 units card | | | 0110 0010 | $62 | ---> 60 units card | | | 1000 0010 | $82 | ---> 80 units card | 1000 0001 | $81 | 0000 0010 | $02 | ---> 100 untis card | | | 0010 0010 | $22 | ---> 120 units card | | | 0101 0010 | $52 | ---> 150 units card +-----------+-----+-----------+-----+ 5 33 --> 40 | | | ---> $00 for sweden. +-----------+-----+ 6 41 --> 48 | | | +-----------+-----+ 7 49 --> 56 | | | +-----------+-----+ 8 57 --> 64 | | | +-----------+-----+ 9 65 --> 72 | | | +-----------+-----+ 10 73 --> 80 | | | +-----------+-----+ 11 81 --> 88 | | | ---> $11 for sweden +-----------+-----+ 12 89 --> 96 | 0001 1110 | $1E | ---> Sweden | 0010 0010 | $22 | ---> Spain | 0011 0000 | $30 | ---> Norway | 0011 0011 | $33 | ---> Andorra | 0011 1100 | $3C | ---> Ireland | 0100 0111 | $47 | ---> Portugal | 0101 0101 | $55 | ---> Czech Republic | 0101 1111 | $5F | ---> Gabon | 0110 0101 | $65 | ---> Finland +-----------+-----+ 13-31 97 --> 248 | | | ---> The units area: each time a unit | | | is used, then a bit is set to "1"; | | | | | | Generaly the first two units are | | | fused in factory as test. | | | | | | +-----------+-----+ 32 249 --> 256 | 0000 0000 | $00 | +-----------+-----+ II ) The cards from ODS, Giesecke & Devrient, ORGA Karten systeme, ============================================================= Uniqua, Gemplus, Schlumberger and Oldenbourg Kartensysteme: =========================================================== II-1) Introduction: ------------ These cards are in fact 128 bit memory in NMOS technology, and the map of these cards are the following: 64 bit EPROM written protected (manufaturer area). 40 bit EEPROM (5x8 bits). 24 bits set to "1". II-2) Pinout: -------- ISO 7816-2 -------------+------------- | 1 | 5 | Pinout: | | | ------- +-------\ | /-------+ | 2 +----+ + 6 | 1 : Vcc = 5V 5 : Gnd | | | | 2 : Reset 6 : n.c. +--------| |--------+ 3 : Clock 7 : I/O | 3 | | 7 | 4 : n.c. 8 : n.c. | +----+----+ | +-------/ | \-------+ n.c. : not connected | 4 | 8 | | | | -------------+------------- II-3) Main features: --------------- - ISO 7816- 1/2 compatible. - use a single 5V power supply. - low power consuption. - NMOS technology. II-4) Time Diagrams: ---------------- Reset: ------ The address counter is reset to 0 when the clock line CLK is raised while the control line R is high. Note that the address counter can not be reset when it is in the range 0 to 7. __________________ _____| |_____________________________________________ Reset : : : _____ : _____ _____ _____ _____ _____:_______| |____:_| |_____| |_____| |_____| |_ Clk : : : : : : : : : : : _____:_______:__________:_:_____:_____:_____:_____:_____:_____:_____:_ _____:___n___|_____0____:_|_____1_____|_____2_____|_____3_____|___4_:_ (Address) : : : : : : _____: :_______:___________:___________:___________:_ _____XXXXXXXXXXXXXXXXXXXX_______|___________|___________|___________|_ Data Bit n Bit 0 Bit 1 Bit2 Bit3 The address counter is incremented by 1 with each rising edge of the clock signal Clk, for as long as the control line R remains low. The data held in each addressed bit is output to I/O contact each time Clk falls. It is not impossible to decrement the address counter, therefore to address an earlier bit, the address counter must be reset then incremented to require value. Write: ------ All unwritten or erased bits in the address 64-104 may be unwritten to. When a memory cell is unwritten to, it is set to 0. The addressed cell is unwritten to by the following sequence. 1- R is raised while Clk is low, to disable address counter increment for one clock pulse. 2- Clk is then raised for a minimum of 10ms to write to the address bit. When to write operation ends, and Clk falls, the address counter is unlocked, and the content of the written cell, which is now 0, is output to I/O contact if the operation is correct. The next Clk pulse will increment the address by one, then the write sequence can be repeated to write the next bit. _____ _____ _____________| |______________________________| |_______________ Reset : : ___ : _____ ___ : _____ ____| |____:__________| |_________| |_____:__________| |____ Clk : : : : : : : : : ____:________:__________:_____:_________:___:_____:__________:_____:_____ n | n+1 | n+2 | : n+3 | : (Address) ----'--------:----------'-----:---------'---:-----:----------'-----:----- : : : : : : : _________ _: : : ____________: ___: : : _________XXX_XXXXXXXXXXXXXXXXXXX____________ XX___XXXXXXXXXXXXXXXXXXXXXXX I/O n n+1 : : n+1 n+2 : : : : : : write write WriteCarry: ----------- A counter is erased by performing the WRITECARRY sequence on the stage of the next highest weighing to that to be erased. The writecarry sequence is as follows: 1 - Set the address counter to an unwritten bit in the next highest counter stage to that to be erased. 2 - Increment is disabled on the following rising edge of R where Clk remains low. 3 - Clk is then raised for a minimum of 10ms, while R is low, to write to the next address bit. 4 - R is the raised again while Clk remains low to disable increment a second time. 5 - Clk is the raised for a minimum of 1ms, while R is low, to write to the addressed bit a second time, erasing the counter level immediately below that the addressed bit. _____ _____ ______| |____________________| |_________________________________ Rst : : : _______ : _______ ___ ______:___________| |______:_____________| |______| |______ Clk : : : : : : : : : : : : : : : : <------------------------- address n ------------------------>:<--- n+1 ------ : : : : : : : : : : : : : : ______: : :______: : :__________: _____ ______XXXXXXXXXXXXXXXXXXXXX______XXXXXXXXXXXXXXXXXXXXXXX__________XX_____ I/O : : n : : n n+1 : : : : Write Erase II-5) Memory Map: ------------- Bytes Bits Binary Hexa +-----------+-----+ 1 1 --> 8 | | | +-----------+-----+ 2 9 --> 16 | 0010 1111 | $2F | ---> Germany | 0011 0111 | $37 | ---> Netherland | 0011 1011 | $3B | ---> Greece +-----------+-----+ 3 17 --> 24 | | | 4 25 --> 32 | | | ---> Issuer area (written protected) 5 33 --> 40 | | | 6 41 --> 48 | | | 7 49 --> 56 | | | 8 57 --> 64 | | | +-----------+-----+ 9 65 --> 72 | | | ---> c4096 ) 10 73 --> 80 | | | ---> c512 ) 11 81 --> 88 | | | ---> c64 ) 5 stage octal counter 12 89 --> 96 | | | ---> c8 ) 13 97 --> 104 | | | ---> c0 ) +-----------+-----+ 14 105 --> 112 | 1111 1111 | $FF | 15 113 --> 120 | 1111 1111 | $FF | ---> area of bits set to "1" 16 120 --> 128 | 1111 1111 | $FF | +-----------+-----+ The Issuer area: ---------------- This issuer consists of 40 bits. The contents of the issuer area are specified by the card issuer, and are fixed during the manufacturing process. The contents of the issuer area will include data such as serial numbers, dates, and distribution centers. This area may only be read. The Counter area: ----------------- The counter area stores the card's units. Its initial value is specified by the card issuer and set during manufacturing. The counter area is divided into a 5 stage abacus. The octal value of each stage is defined by the number of bits set to '1' and this stage value must be weighted by the coeficient 8^n ( where n is among [4..0] ). Exemple: For a card with 15818 units (or money units) left. -------- Byte9 Byte10 Byte11 Byte12 Byte13 -------------------------------------------------------------- 00000111 - 00111111 - 01111111 - 00000001 - 00000011 -------------------------------------------------------------- (3)octal (6)octal (7)octal (1)octal (2)octal -------------------------------------------------------------- Value = 3*8^4 + 6*8^3 + 7*8^2 + 1*8^1 + 2*8^ -------------------------------------------------------------- TOTAL = 15818 Units Note that you can only decrease the counter and it is not authorised to write in the counter a value greater than the old value. I-6) Electrical features: -------------------- Maximum ratings: ---------------- +--------+------+------+------+ | Symbol | Min | Max | Unit | +----------------------+--------+------+------+------+ | Supply voltage | Vcc | -0.3 | 6 | V | +----------------------+--------+------+------+------+ | Input voltage | Vss | -0.3 | 6 | V | +----------------------+--------+------+------+------+ | Storage temperature | Tstg | -20 | +55 | 0C | +----------------------+--------+------+------+------+ | Power dissipassion | Pd | - | 50 | mW | +----------------------+--------+------+------+------+ DC caracteristics: ------------------ +--------+-----+-----+-----+------+ | Symbol | Min.| Typ.| Max.| Unit | +---------------------------+--------+-----+-----+-----+------+ | Suplly current | Icc | - | - | 5 | mA | +---------------------------+--------+-----+-----+-----+------+ | Input Voltage (low) | Vl | 0 | - | 0.8 | V | +---------------------------+--------+-----+-----+-----+------+ | Input voltage (high) | Vh | 3.5 | - | Vcc | V | +---------------------------+--------+-----+-----+-----+------+ | Input current R | Ih | - | - | 100 | uA | +---------------------------+--------+-----+-----+-----+------+ | Input current Clk | Il | - | - | 100 | uA | +---------------------------+--------+-----+-----+-----+------+ | Output current (Vol=0.5V) | Iol | - | - | 10 | uA | +---------------------------+--------+-----+-----+-----+------+ | Output current (Voh=5V) | Ioh | - | - | 0.5 | mA | +---------------------------+--------+-----+-----+-----+------+ AC caracteristics: ------------------ +--------+------+------+------+ | Symbol | Min. | Max. | Unit | +----------------------+--------+------+------+------+ | Pulse duration | tr | 50 | - | us | | R address reset | | | | | +----------------------+--------+------+------+------+ | Pulse duration | ts | 10 | - | us | | R write | | | | | +----------------------+--------+------+------+------+ | High level Clk | th | 8 | - | us | +----------------------+--------+------+------+------+ | Low level Clk | tl | 12 | - | us | +----------------------+--------+------+------+------+ | Write window | Twrite | 10 | - | ms | +----------------------+--------+------+------+------+ | Erase window | Terase | 10 | - | ms | +----------------------+--------+------+------+------+ | | tv1 | 5 | - | us | +----------------------+--------+------+------+------+ | | tv2 | 3.5 | - | us | +----------------------+--------+------+------+------+ | | tv3 | 3.5 | - | us | +----------------------+--------+------+------+------+ | | tv4 | 3.5 | - | us | +----------------------+--------+------+------+------+ | | tv5 | 3.5 | - | us | +----------------------+--------+------+------+------+ | | tv6 | 5 | - | us | +----------------------+--------+------+------+------+ | | tv7 | 5 | - | us | +----------------------+--------+------+------+------+ | | tv8 | 10 | - | us | +----------------------+--------+------+------+------+ III) Schematics of Readers: ======================= III-1) Reader 1: ---------- External 5V (Optional) 5V o------, | / T2 PNP d13 r7 10 0V o--, | / BC 177 |\ | _____ | | ,-------o/ o--*------. E C .--| >+-[_____]--------, __+__ | | | \ / |/ | | \\\\\ | __|__ Batery | \ / | | - 22.5V | --------- | ....... | | | _____ | _____ | : | __+__ +--[_____]--*--[_____]--, | D2 : | \\\\\ r6 150k r5 15k | | 4 o-------|---------------------------*------------------|-------------, | : | | r3 220k / C | | Ack : | | _____ |/ T1 - NPN | | 10 o------|--------. '--[_____]-*---| BC107 | | : | | _____ | |\ | | : ,-, ,-, +--[_____]-' \ E | | : | |r2 | |r1 | r4 390k | | | : | |220 | |22k __+__ __+__ | | : |_| |_| \\\\\ \\\\\ | | : | |\ | | | | : *--| >+--|----------------*----------------------------------|--* : | |/ | | ,-----|-----------------------------, | | : | d1 | | | ,----------,----------, | | | : | | | *---|--* Fuse | Reset *--|---' | | : | | | | |----------|----------| | | D0 : | | | ,-|---|--* I/O | Clk *--|---, | | 2 o-------|--------|----------' | | |----------|----------| | | | : | | | '---|--* Vpp | R/W *--|---|----' | Busy : | | | |----------|----------| | | 11 o------|--------|--------------' ,---|--* Gnd | 5V * | | | : | | | '----------'-------|--' | | D1 : | | __+__ Chip connector | | | 3 o-------|--------|--------, \\\\\ | | | : | | '------------------------------|------' | Str : | |\ | | | | 1 o-------*--| >+--*----*----*----*----*-------------------' | : d2|/ | |d3 |d4 |d5 |d6 |d7 | : -+- -+- -+- -+- -+- | : /_\ /_\ /_\ /_\ /_\ | D3 : | | | | | |\ | d8 | 5 o----------------*----|----|----|----|---| >+-------*-------------------' : | | | | |/ | | : | | | | | D4 : | | | | |\ | d9 | 6 o---------------------*----|----|----|---| >+-------* : | | | |/ | | : | | | | D5 : | | | |\ | d10 | 7 o--------------------------*----|----|---| >+-------* : | | |/ | | : | | | D6 : | | |\ | d11 | 8 o-------------------------------*----|---| >+-------* : | |/ | | : | | D7 : | |\ | d12 | 9 o------------------------------------*---| >+-------' : |/ | : : 25 o------. : | .......: | d1 to d13: 1N4148 __+__ \\\\\ Centronic port III-2) Reader 2: --------- Zener 3.3V 2x1N4001 ________ 150 |\ | |\ | | | _____ | /| (6) o----, ,--+ >+--*--+ >+--*---+ 7824 +----*--o o-|_____|-+< +-*----o Vpp | | |/ | | |/ | | |________| | | \| | )||( 220F | 220F | | ===== 0.22F _+_ 220V )||( 25V | + 40V | + | | / \ 1N4148 )||( ===== ===== __+__ __+__ '-+-' ~ )||( | - | - \\\\\ \\\\\ ,+, | | ___ | | | | 12 o----' '--o o-* __+__ | | card | \\\\\ ________ '+' 12 present | |\ | | | | _____ (1) '--+ >+------+ 7805 +------*-------------------*--|_____|-o Vcc |/ | |________| | | 1N4001 | _+_ | | \ / ---> ,+, __+__ -+- ---> | | \\\\\ | | | 4.7k ,+, '+' | | | (7) | | 680 *----------o I/O '+' | | Busy (11) o | (4) __+__ D0 (2) o-----*----o Raz \\\\\ | 4.7nF ===== | __+__ \\\\\ (3) D1 (3) o----------o Clk (2) D2 (4) o----------o W Gnd (25) o | fuse (8) *--~~~~~---o Fus __+__ \\\\\ IV) The program: =========== The following program will enable you to read telecards on you PC if you build the precedent reader. --------------- cut here (begin) (*****************************************************************************) (* T E L E C A R D . PAS *) (*****************************************************************************) (* This program enable you to dumb the memory of electronics phonecards *) (* from all over the world, so that you will be able to see which country *) (* the card is from how many units are left and so on .... *) (*****************************************************************************) USES crt,dos; CONST port_address=$378; (* Select Printer PORT 1 *) TYPE string8=string[8]; string2=string[2]; VAR reg : registers; i,j : integer; Data : array[1..32] of byte; car : char; byte_number : integer; displaying : char; {-----------------------------------------------------------------------------} { PROCEDURE Send(b:byte); } { } { - Send a byte on the selected printer port. } {-----------------------------------------------------------------------------} PROCEDURE Send(b:byte); BEGIN port[port_address]:=b; END; {-----------------------------------------------------------------------------} { FUNCTION Get:byte; } { } { - Get a byte from the status register of the selected printer port. } {-----------------------------------------------------------------------------} FUNCTION Get:byte; BEGIN get:=port[port_address+1]; END; {-----------------------------------------------------------------------------} { FUNCTION dec2hexa_one(decimal_value):hexa_character_representation; } { } { - convert a 4 bit long decimal number to hexadecimal. } {-----------------------------------------------------------------------------} FUNCTION dec2hexa(value:byte):char; BEGIN case value of 0..9 : dec2hexa:=chr(value+$30); 10..15 : dec2hexa:=chr(value+$37); END; END; {-----------------------------------------------------------------------------} { FUNCTION d2h(decimal_byte):string2; } { } { - convert a decimal byte to its hexadecimal representation. } {-----------------------------------------------------------------------------} FUNCTION d2h(value:byte):string2; BEGIN d2h:=dec2hexa(value div $10) + dec2hexa(value and $0F); END; {-----------------------------------------------------------------------------} { FUNCTION Binary(byte):string8; } { } { - Convert a byte to its binary representation. } {-----------------------------------------------------------------------------} FUNCTION Binary( b : byte):string8; VAR weigth : byte; s : string8; BEGIN weigth:=$80; s:=''; while (weigth > 0) do BEGIN if ((b and weigth) = weigth) then s:=s+'1' else s:=s+'0'; weigth:=weigth div $02; END; Binary:=s; END; {-----------------------------------------------------------------------------} FUNCTION Units:byte; VAR u, i : integer; s : string8; BEGIN u:=0; i:=13; while (Data[i] = $FF) do BEGIN u:=u+8; i:=i+1; END; s:=Binary(Data[i]); while(s[1]='1') do BEGIN inc(u); s:=copy(s,2,length(s)); END; units:=u; END; {-----------------------------------------------------------------------------} FUNCTION Octal_Unit_Count:LongInt; FUNCTION BitCount( Data : integer ):integer; VAR i : integer; BEGIN i:=0; while ((Data and $01)=$01) do BEGIN Data:=Data div 2; inc(i); END; BitCount:=i; END; BEGIN Octal_Unit_Count:= 4096*BitCount(Data[9])+512*BitCount(Data[10]) +64*BitCount(Data[11])+8*BitCount(Data[12]) +BitCount(Data[13]); END; {-----------------------------------------------------------------------------} PROCEDURE Card_Type; BEGIN case Data[2] of $03: BEGIN write('Telecard - France - '); case Data[12] of $13: write('120 Units - ',units-130,' Units left'); $06: write('50 Units - ',units-60,' Units left'); $15: write('40 Units - ',units-40,' Units left'); END; END; $2F:write('Telecard - Germany - ', Octal_Unit_Count, ' Pfennigs left'); $37:write('Telecard - Neitherland - ',Octal_Unit_Count,' Units left'); $3B:write('Telecard - Greece - ', Octal_Unit_Count, ' Units left'); $83:BEGIN write('Telecard'); case Data[12] of $1E: write(' - Sweden'); $30: write(' - Norway'); $33: write(' - Andorra'); $3C: write(' - Ireland'); $47: write(' - Portugal'); $55: write(' - Czech Republic'); $5F: write(' - Gabon'); $65: write(' - Finland'); END; if (Data[12] in [$30,$33,$3C,$47,$55,$65]) then BEGIN case ((Data[3] and $0F)*$100+Data[4]) of $012: write (' - 10 Units - ',units-12,' Units left'); $024: write (' - 22 Units - ',units-24,' Units left'); $027: write (' - 25 Units - ',units-27,' Units left'); $032: write (' - 30 Units - ',units-32,' Units left'); $052: write (' - 50 Units - ',units-52,' Units left'); $067: write (' - 65 Units - ',units-62,' Units left'); $070: write (' - 70 Units - ',units-70,' Units left'); $102: write (' - 100 Units - ',units-102,' Units left'); $152: write (' - 150 Units - ',units-152,' Units left'); END; END; { write(' - N0 ',Data[5]*$100+Data[6]);} END; END; END; {-----------------------------------------------------------------------------} PROCEDURE waiting; BEGIN send($00); write('Enter a card in the reader and press a key ...'); repeat until keypressed; gotoxy(1, wherey); clreol; END; {-----------------------------------------------------------------------------} PROCEDURE Full_Displaying; BEGIN writeln('Memory dump:'); for i:=1 to 80 do write('-'); for i:=1 to (byte_number div 6 + 1) do BEGIN for j:=1 to 6 do if j+6*(i-1) <= byte_number then write(binary(Data[j+6*(i-1)]):9) else write(' '); write(' '); for j:=1 to 6 do if j+6*(i-1) <= byte_number then write(d2h(Data[j+6*(i-1)]),' '); writeln; END; for i:=1 to 80 do write('-'); Card_Type; writeln; END; {-----------------------------------------------------------------------------} PROCEDURE Short_Displaying; VAR j : integer; BEGIN for j:=1 to byte_number do BEGIN write(d2h(Data[j]),' '); END; writeln; END; {-----------------------------------------------------------------------------} PROCEDURE Reading; VAR i, j : integer; Value : byte; BEGIN send($FE); send($F8); for i:=1 to 32 do BEGIN Value:=0; for j:=1 to 8 do BEGIN Value:=Value*$02 + ((get and $08) div $08); send($FB); delay(1); send($F8); END; Data[i]:=Value; END; case displaying of 'F':full_displaying; 'S':short_displaying; END; END; {-----------------------------------------------------------------------------} PROCEDURE writting; VAR i,n:integer; car:char; BEGIN write('Which bit do you want to set to "1" : '); readln(n); waiting; car:=readkey; send($FA); send($F8); for i:=1 to n do BEGIN send($F9); if i=n then BEGIN send($FD); delay(20); send($FF); delay(20); END; send($FB); END; reading; END; {-----------------------------------------------------------------------------} PROCEDURE Saving; VAR filename : string; f : text; i : word; BEGIN write('Enter the filename: '); readln(filename); assign(f, filename); rewrite(f); writeln(f,'Memory dump:'); for i:=1 to 80 do write(f,'-'); for i:=1 to (byte_number div 6 + 1) do BEGIN for j:=1 to 6 do if j+6*(i-1) <= byte_number then write(f,binary(Data[j+6*(i-1)]):9) else write(f,' '); write(f,' '); for j:=1 to 6 do if j+6*(i-1) <= byte_number then write(f,d2h(Data[j+6*(i-1)]),' '); writeln(f); END; for i:=1 to 80 do write(f,'-'); close(f); END; {-----------------------------------------------------------------------------} PROCEDURE initialize; VAR i : integer; BEGIN byte_number:=32; displaying:='F'; clrscr; writeln(' 1 - to dump a 256 bits card'); writeln(' 2 - to dump a 128 bits card'); writeln(' F - to display in full format'); window(41,1,80,25); writeln(' S - to display in short format'); writeln(' F2 - to save in a file'); writeln(' Q - to exit the program'); window(1,4,80,25); for i:=1 to 80 do write('='); window(1,5,80,25); END; {=============================================================================} BEGIN initialize; repeat waiting; car:=upcase(readkey); case car of 'W':writting; 'Q':; '1':byte_number:=32; '2':byte_number:=16; 'F','S':displaying:=car; #00: BEGIN car:=readkey; if car=#60 then saving; END; else reading; END; until car='Q'; END. 3. Dos modelos a analizar 3.1 TELECOM - TELESCUM - TELECOME - TELECUM - TELACOME 3.1.1 Telefono publico modular: Nos estamos refiriendo, y lo haremos durante todo el punto 3.1 al telefono celeste que no acepta fichas, al mamotreto de alguna aleacion con hierro que nos guinia el ojo cada vez que pasamos. [ Lo que sigue es una obra de ficcion. Cualquier semejanza con la realidad queda en la mente de los lectores. (N.de los A.)] Que gracioso seria que todos los telefonos publicos modulares de Telecom (TPMTc) se abrieran con la misma y exacta llave. En ese caso si, por ejemplo, llegaramos alguna vez a tener una llave podriamos ir al lugar mas oscuro de la ciudad y, digamos, abrir uno para observarlo. Supongamos que, hipoteticamente, todo esto sucedio para que no nos volvamos chinos pensando como articular las frases en tiempo de verbo condicional, recordemos que hace unos anios abandonamos la primaria. La primera buena impresion que te llevas(arias, recordemos) al abrirlos es cuando descubris que son realmente modulares, es decir, podes sacar cualquier placa, cualquier componente, con el minimo esfuerzo. Desmontar todo el telefono, en caso de que quieras estudiarlo mejor, no es mucho mas dificil. Tiene cuatro tornillos montados sobre el soporte, que se ajustan con cuatro tuercas del lado de adentro. A pesar de que las tuercas estan muy pegadas a los bordes no seria dificil sacarlas con una llave tubo 16, o si estan flojas con los dedos. Imaginamos que el paso siguiente seria usar tu MakeitJew (el pelacables rojito con cabeza negra) para cortar el cable con la linea, en la parte de abajo a la derecha. No es muy pesado para cargarlo hasta casa, se te cruza por el cerebro mientras tiras del mamotreto para atras. Me iria con el hasta New York, ahhh. Llegamos a casa, y tratando de que la vieja no se despierte lo tiramos arriba de la cama. Lo abrimos y lo damos vueltas con cara de asombro. Lo primero que se nos ocurre es: le afanamos las fichas y las vendemos. Despues recordamos que el telefono no tiene fichas, y de todas maneras se supone que somos Hackers, y que lo hacemos para investigar y descubrir cosas, no para llenarnos de oro (para eso llevemonos el de telefonica). Lo siguiente que se nos ocurre es conectarlo a la linea y llamar a nuestros amigos y contarles: - vieja??, a que no sabes de donde te estoy llamando??. Lo intentamos durante un rato y no lo logramos. La linea debe tener una masa diferente, o algo asi. Entonces que hacemos??? supongo que solo nos queda tratar de ver como y por que funciona. Lo abrimos de nuevo. 3.1.2 Analisis estructural y de componentes Sacamos todas las placas, que bien podrian ser las siguientes: - Hibrido telefonico y control de linea (URL PF12), nada worth-mentioning al respecto, excepto que en esta placa se encuentran los dos sensores magneticos del telefono, el de puerta abierta (abajo a la derecha) y el de tubo levantado (abajo a la izquierda). - El MainBoard, una primera y rapida inspeccion nos dice que tiene un conector libre (el modem? pensamos), que tiene, si senior, un Z80 y un 80C31 (interesante pensamos), cuatro bancos de memoria, de los cuales dos estan ocupados con memorias rotuladas 'ARGENTINA' algunas vergas mas y una dice 'U11' y la otra 'U28' y los otros dos estan libres (??). Creo que nuestro ojo clinico no dice nada mas por ahora. - El lector de tarjetas, plastico, y lo unico que tiene un tornillo para desmontarlo, salen dos cables, y a simple vista se ve una soldadura medio trucha cruzando dos placas, hmmm vamos a investigar mejor eso mas adelante. - El display, facil de sacar. Cute, parecido a otros modelos comerciales, en fin. Un Display, con infinidad de usos en el hogar. - El Teclado, robusto. Pesado. Brilloso, con forma de teclado, con botones de teclado, re-buchon, y tiene una etiqueta ilustrativa que nos dice 'TELECOM - Teclado' por si no lo sabiamos. Y ademas como la mayoria de las placas de este bicho tiene el nombre del fabricante, Schlumberger (algo que no habiamos dicho antes y es util saber). - Bateria, 6 volts, (5 pilas de 1.2v 600mah) para cuando se corta la linea, se recargan de la linea suponemos. Listo, tratemos de imaginar como se veria... (Puerta Layer #1) (Puerta Layer #2) ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Display 2 x 20 ³ (J4) ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Teclado MainBoard ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ( ) (1) (2) (3) ³ ³ ÍÍÍÍÍÍÍÍÍ ³ ³ ³ ³ (J4) ³ ³ ( ) (4) (5) (6) ³ (J2) ³ (J7)º ³ ³ ³ ³ ÚÄ¿ º ³ ³ Bis (7) (8) (9) ³ ³ ÀÄÙ ÚÄ¿ ³ ³ ³ ³ C31 ³Z³ ³ ³ ( ) (*) (0) (#) ³ ³ ³8³ º ³ ³ (R) ³ ³ ³0³ º ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ÀÄÙ (J8)º ³ Lector ³ º ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º ³ ³ ³ ³ ³ º ³ ³ ³ ³ (J3) ³ º (J2) ³ ³ ÃÄÄÄÄÄÄÄÄ ³ ³pila (J3) ³ ³ ³ ³ ³ [-] ÍÍÍÍÍ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ (Base) Hibrido Telefonico ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ [-] bateria extra ³ ³ ÚÄ¿ al ³ ³ ÀÄÙ tubo º (J8) ³ ³ º ³ ³ º puerta³ ³ peine extra#o (s)Ú¿ ³ (s) means sensor ³ tubo (s) ÚÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄ¿ ³³ ³ ³ ÍÍÍÍÍÍÍ ÀÄÄÄÄÄÄÄÄÙ ³linea³ ÀÙ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ Donde el Layer #2 va sobre el #1, ambos montados en la puerta, y el hibrido telefonico va en la base del telefono, los (Jxx) son los conectores. Con esto tendriamos para una primera noche, pero al dia siguiente tendriamos ganas de saber que son TODAS las cosas que tiene. Construiriamos entonces la Lista de Chips del MainBoard: U26 - Z80ACPU (2x20 patas) U12 - 80C31HB-3 (4x11 patas) U11, U28 - Eproms 27256 (2x14 patas), 32k U9, U34 - zocalos vacios (iguales a los de las eproms) U2, U16, U23, U38 - CXK58257AM-10L (32k SRAM) (una al lado cada eprom) (para buffers??) U35 - TCM5089N (DTMF dialer) y NANDS y muchos chipos de logica digital, bah... Un Jumper (J6) para elegir entre DTMF o decadico. 2 botones, uno rojo para Reset y el azul rotulado maint (??) Y seguiriamos investigando... Como seguramente estemos pensando en hacer una tarjeta que funcione sin tener que pagarle al quioskero nos ponemos a analizar el lector de tarjetas. Tiene 2x8 contactos, de los cuales en las tarjetas comunes se usan solo 8, pregunta: existira una tarjeta con mas contactos que tenga acceso a mas funciones?? (algo asi como una tarjeta de Capo) o simplemente es el standard.? El lector tiene un microswitch para detectar cuando la tarjeta esta puesta. Rodeando los conectores por el lado de afuera (donde entra la tarjeta) vemos una chapa de cobre que pasa de un lado y de otro de esta manera: (De frente) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ chapa tarjeta ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ³ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ (de arriba) ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ tarjeta ³ afuera ³ ³ - - -³- - - ÉÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍ chapa - - - - - ³ º | ³ º | adentro ³ º ÚÄÄÄÄÄÄÄÄÄÄ¿ ³ º ³ contactos³ ³ º ³ ³ ³ º ÀÄÄÄÄÄÄÄÄÄÄÙ | chapa Al intentar poner una tarjeta con pistas hacia afuera para probar cosas nos dice indefectiblemente 'TARJETA INVALIDA' y suponemos que esto tiene que ver con la chapa. La chapa funciona como un 'sensor de permeabilidad magnetica'(tomamate) es decir, la tarjeta actua como nucleo del inductor y cambia el valor de inductancia (o algo asi). De todas maneras esta chapa es la que nos dificulta el trabajo en este sentido. (Ella explica entre otras cosas por que el modelo de tarjeta homemade que esta dando vueltas por algunos lados funciona en los telefonos de telefonica y no en los de telecom, (de telefonica vamos a hablar en la proxima HMAG, por un problema de espacio)). De todas maneras, un puntito mas para Schlumberger aca. Y por ahora terminamos con el Hard. Nos aprovisionamos de un buen Lecto/Grabador de Eproms, de una luz ultravioleta y de un compilador de Z80 y nos ponemos con el codigo. Suponemos antes de empezar que el Z80 se encarga del funcionamiento general y el 80C31 como es un microcontrolador se encargara de las entradas y salidas (de la tarjeta basicamente y del tarifado suponemos). 3.1.2 Analisis del codigo del Z80 Lo que viene ahora es largo, y puede ser perjudicial para la salud. El codigo no esta analizado exahustivamente por que es MUY LARGOOOOOOOO. Pero hicimos nuestro mejor esfuerzo en lo que va del momento en reverse engineering con este bicho, y ademas dio frutos. Cualquier comentario al respecto, ampliaciones, y demas vamos a estar encantados de recibirlas... Este es el disassembly del codigo de la U28. -------------------------------> TELE1.Z <------------------------------ Cortar_Key EQU '?' _*_KEY EQU ':' _#_KEY EQU ';' VOL_KEY EQU 'B' Espanol EQU 0170h Ingles EQU 0530h Aleman EQU 08F0h Italiano EQU 0710h Portugues EQU 0350h IRQ: Lo que hacen las IRQs #1 Dial DTMF (P68) = Get Buffer #6 // OutPortB(0x068, Get(buffer #6)) (P48) = Get Buffer #4 // OutPortB(0x048, Get(buffer #4)) #2 Timer #1 #3 Put Buffer #5 = (P68) (P68) = Get Buffer #6 #4 Put Buffer #3 = (P48) (P48) = Get Buffer #4 #5 In (P20) #6 In (P20) #7 Nada #8 Keyboard #10 Timer #2 1 Second +/- Ports: 00 = Matriz del Teclado al escribir se escribe en las filas al leer se lee de las columnas 41 bit 0 = -(Tone Inhibit) del DTMF chip bit 3 = 0 = Colgado 1 = Descolgado 48 = Lo que pone aca lo saca del Buffer #4 60 = bits 7..4 = Filas de la Matriz de entrada al DTMF chip bits 3..0 = Columnas de la Matriz de entrada al DTMF chip 61 = Multiproposito paralelo mapeado por bits output bit 5 = Display Light 68 = Lo que pone aca lo saca del Buffer #6 E0 = Display Control ¨? E1 = Display Data ASCII Memory: 3D23-3D2A = Tabla de conversion Hexa -> Display 6000-6013 = Display Buffer de la primer linea 6014-6027 = Display Buffer de la segunda linea 6045... Inicializado decodificando de la ROM Area 61CD-6679 se llena a 0 cada vez que se Resetea 61CD-61DC Buffer #1 Key Pressed 61DD WORD Pointer to Next Avail Byte in Buffer #1 61DF WORD Pointer to Next Free Slot in Buffer #1 61E1-61F4 Buffer #2 Numero Marcado 61F5 WORD Pointer to Next Avail Byte in Buffer #2 61F7 WORD Pointer to Next Free Slot in Buffer #2 61F9-6238 Buffer #5 Lo que pone en este Buffer lo saca de (P68) 6239 WORD Pointer to Next Avail Byte in Buffer #5 623B WORD Pointer to Next Free Slot in Buffer #5 623D-627C Buffer #6 Lo que saca de este buffer lo pone en (P68) 627D WORD Pointer to Next Avail Byte in Buffer #6 627F WORD Pointer to Next Free Slot in Buffer #6 6281-6300 Buffer #3 Lo que pone en este Buffer lo saca de (P48) 6301 WORD Pointer to Next Avail Byte in Buffer #3 6303 WORD Pointer to Next Free Slot in Buffer #3 6305-6384 Buffer #4 Lo que saca de este buffer lo pone en (P48) 6385 WORD Pointer to Next Avail Byte in Buffer #4 6387 WORD Pointer to Next Free Slot in Buffer #4 6389-63C8 Buffer #7 Internal Commands 63C9 WORD Pointer to Next Avail Byte in Buffer #7 63CB WORD Pointer to Next Free Slot in Buffer #7 63CD-640C Buffer #8 ?Who knows? 640D WORD Pointer to Next Avail Byte in Buffer #8 640F WORD Pointer to Next Free Slot in Buffer #8 6411-6416 Tabla de TIMERS BYTE (6 timers) 6417 BYTE = 3 Despues de Discar un numero apretado. 6419-6420 = Tabla de TIMERS BYTE ( 8 TIMERS ) 641A = Si NO esta puesta -> 1 ???? = tarjeta puesta -> <> 1 6421-642A Tabla de TIMERS WORD ( 5 TIMERS ) 6429 WORD Timer 5W = Timer de fuera de Servicio. 642B BYTE = Habilita timers 6B,... 642C BYTE = bit 7 Inicializado a 1 if (P64.6)==0 642E BYTE = 00h => ' ( ) FUERA | DE SERVICIO' 02h => Todo OK! 04h => ' ( ) SOLO | EMERGENCIAS' 08h => ' ( ) FUERA | DE SERVICIO' 643C BYTE Fila de la Ultima tecla presionada 643D BYTE Columna de la Ultima tecla presionada 643E BYTE Salida de la Matriz (columnas) de la fila de la ultima tecla presionada 643F-6443 Salida del barrido de la matriz del teclado, un byte por fila 6445 BYTE = 1 Despues de Discar un numero apretado. 6448 BYTE = Inicializado a 1 if (P64.4)==1 6449 BYTE = Inicializado a 1 if (P44.6)==1 644A BYTE = Inicializado a 1 if (P44.5)==0 644B BYTE != 06 => Se anula el Timer 1W 07 Timer ? 6458 BYTE = Fichas Restantes 645B = 0Ah - > Tarjeta invalida Area 65BA-6653 es llenada con 0 65BA BYTE = Cantidad de Bytes en el Buffer #1 65BB BYTE = Cantidad de Bytes en el Buffer #2 65BC BYTE = Cantidad de Bytes en el Buffer #5 65BD BYTE = Cantidad de Bytes en el Buffer #6 65BE BYTE = Cantidad de Bytes en el Buffer #3 65BF BYTE = Cantidad de Bytes en el Buffer #4 65C0 BYTE = Cantidad de Bytes en el Buffer #8 65C1 BYTE = Cantidad de Bytes en el Buffer #7 65C5 BYTE = 1 Despues de Discar un numero apretado. 65CD = Flag de cancelacion. (Puerta abierta?, Tarjeta sacada?) (Colgar? ) == 00 Si hay puesta una tarjeta 65D6 WORD == 0 => Anula el Timer 1W 65E3 BYTE = Contador de Idioma. 0..4 = Castellano, Ingles, Aleman, Italiano, Portugues 6606 == 3 => FICHAS != 3 PULSOS 661C WORD = Fichas Restantes 661E WORD = Pulsos/Fichas Restantes 6620 WORD = Fichas Restantes 662C WORD = Fichas restantes 662F BYTE = 0C => Credito agotado 6650 WORD = Offset a sumar para cada idioma 6652 BYTE = Codigo de Idioma 6670 = Address de la primer linea a imprimir 6672 = Address de la segunda linea a imprimir 6674 = Bits de Display de Variables 6677 BYTE = Inicializado a (P64) 6678 BYTE = Inicializado a (P44) 667A WORD = Puntero al Proximo caracter del Log Buffer 667D-6E7C = Log Buffer 7BFF = Stack (decrece) ; ORG 00000H LD SP,07BFFH ; 0000 XOR A ; 0003 LD (06676H),A ; 0004 LD C,00CH ; 0007 LD B,004H ; 0009 OUT (C),A ; 000B OUT (C),A ; 000D OUT (C),A ; 000F OUT (C),A ; 0011 OUT (C),A ; 0013 DJNZ 0000BH ; 0015 JP 00EC7H ; 0017 RST 38H ; 001A RST 38H ; 001B RST 38H ; 001C RST 38H ; 001D RST 38H ; 001E RST 38H ; 001F RST 38H ; 0020 RST 38H ; 0021 RST 38H ; 0022 RST 38H ; 0023 RST 38H ; 0024 RST 38H ; 0025 RST 38H ; 0026 RST 38H ; 0027 RST 38H ; 0028 RST 38H ; 0029 RST 38H ; 002A RST 38H ; 002B RST 38H ; 002C RST 38H ; 002D RST 38H ; 002E RST 38H ; 002F RST 38H ; 0030 RST 38H ; 0031 RST 38H ; 0032 RST 38H ; 0033 RST 38H ; 0034 RST 38H ; 0035 RST 38H ; 0036 RST 38H ; 0037 RST 38H ; 0038 RST 38H ; 0039 RST 38H ; 003A RST 38H ; 003B RST 38H ; 003C RST 38H ; 003D RST 38H ; 003E RST 38H ; 003F RST 38H ; 0040 RST 38H ; 0041 RST 38H ; 0042 RST 38H ; 0043 RST 38H ; 0044 RST 38H ; 0045 RST 38H ; 0046 RST 38H ; 0047 RST 38H ; 0048 RST 38H ; 0049 RST 38H ; 004A RST 38H ; 004B RST 38H ; 004C RST 38H ; 004D RST 38H ; 004E RST 38H ; 004F RST 38H ; 0050 RST 38H ; 0051 RST 38H ; 0052 RST 38H ; 0053 RST 38H ; 0054 RST 38H ; 0055 RST 38H ; 0056 RST 38H ; 0057 RST 38H ; 0058 RST 38H ; 0059 RST 38H ; 005A RST 38H ; 005B RST 38H ; 005C RST 38H ; 005D RST 38H ; 005E RST 38H ; 005F RST 38H ; 0060 RST 38H ; 0061 RST 38H ; 0062 RST 38H ; 0063 RST 38H ; 0064 RST 38H ; 0065 LD A,(06676H) ; 0066 CP 005H ; 0069 JR C,0006EH ; 006B HALT ; 006D LD C,00CH ; 006E LD B,004H ; 0070 OUT (C),A ; 0072 OUT (C),A ; 0074 OUT (C),A ; 0076 OUT (C),A ; 0078 OUT (C),A ; 007A DJNZ 00072H ; 007C JP 00000H ; 007E RETN ; 0081 RST 38H ; 0083 RST 38H ; 0084 RST 38H ; 0085 RST 38H ; 0086 RST 38H ; 0087 RST 38H ; 0088 RST 38H ; 0089 RST 38H ; 008A RST 38H ; 008B SUB E ; 008C INC (HL) ; 008D LD D,032H ; 008E CALL Z,0D534H ; 0090 INC L ; 0093 LD DE,02235H ; 0094 DEC (HL) ; 0097 LD E,(HL) ; 0098 DEC (HL) ; 0099 SBC D ; 009A DEC (HL) ; 009B JR 000D3H ; 009C RRA ; 009E DEC (HL) ; 009F RST 38H ; 00A0 RST 38H ; 00A1 RST 38H ; 00A2 RST 38H ; 00A3 RST 38H ; 00A4 RST 38H ; 00A5 RST 38H ; 00A6 RST 38H ; 00A7 RST 38H ; 00A8 RST 38H ; 00A9 RST 38H ; 00AA RST 38H ; 00AB RST 38H ; 00AC RST 38H ; 00AD RST 38H ; 00AE RST 38H ; 00AF RST 38H ; 00B0 RST 38H ; 00B1 RST 38H ; 00B2 RST 38H ; 00B3 RST 38H ; 00B4 RST 38H ; 00B5 RST 38H ; 00B6 RST 38H ; 00B7 RST 38H ; 00B8 RST 38H ; 00B9 RST 38H ; 00BA RST 38H ; 00BB RST 38H ; 00BC RST 38H ; 00BD RST 38H ; 00BE RST 38H ; 00BF RST 38H ; 00C0 RST 38H ; 00C1 RST 38H ; 00C2 RST 38H ; 00C3 RST 38H ; 00C4 RST 38H ; 00C5 RST 38H ; 00C6 RST 38H ; 00C7 RST 38H ; 00C8 RST 38H ; 00C9 RST 38H ; 00CA RST 38H ; 00CB RST 38H ; 00CC RST 38H ; 00CD RST 38H ; 00CE RST 38H ; 00CF RST 38H ; 00D0 RST 38H ; 00D1 RST 38H ; 00D2 RST 38H ; 00D3 RST 38H ; 00D4 RST 38H ; 00D5 RST 38H ; 00D6 RST 38H ; 00D7 RST 38H ; 00D8 RST 38H ; 00D9 RST 38H ; 00DA RST 38H ; 00DB RST 38H ; 00DC RST 38H ; 00DD RST 38H ; 00DE RST 38H ; 00DF RST 38H ; 00E0 RST 38H ; 00E1 RST 38H ; 00E2 RST 38H ; 00E3 RST 38H ; 00E4 RST 38H ; 00E5 RST 38H ; 00E6 RST 38H ; 00E7 RST 38H ; 00E8 RST 38H ; 00E9 RST 38H ; 00EA RST 38H ; 00EB RST 38H ; 00EC RST 38H ; 00ED RST 38H ; 00EE RST 38H ; 00EF RST 38H ; 00F0 RST 38H ; 00F1 RST 38H ; 00F2 RST 38H ; 00F3 RST 38H ; 00F4 RST 38H ; 00F5 RST 38H ; 00F6 RST 38H ; 00F7 RST 38H ; 00F8 RST 38H ; 00F9 RST 38H ; 00FA RST 38H ; 00FB RST 38H ; 00FC RST 38H ; 00FD RST 38H ; 00FE RST 38H ; 00FF 0100 04 00 04 02 01 11 0E 00 0A 00 11 11 11 11 0E 00 ................ 0110 0A 00 0E 11 1F 11 11 00 0A 00 0E 11 11 11 0E 00 ................ 0120 43 49 45 52 52 45 20 4C 41 20 50 55 45 52 54 41 CIERRE LA PUERTA 0130 20 20 20 20 20 50 52 55 45 42 41 20 54 45 43 4C PRUEBA TECL 0140 41 44 4F 20 20 20 20 20 20 50 52 55 45 42 41 20 ADO PRUEBA 0150 45 53 50 49 41 20 3F 20 20 20 20 20 49 4E 49 43 ESPIA ? INIC 0160 49 41 4C 49 5A 41 43 49 4F 4E 20 3F 20 20 20 20 IALIZACION ? 0170 20 20 20 44 45 53 43 55 45 4C 47 55 45 20 20 20 DESCUELGUE 0180 20 20 20 20 28 20 20 29 20 46 55 45 52 41 20 20 ( ) FUERA 0190 20 20 20 20 20 20 20 20 20 20 44 45 20 53 45 52 DE SER 01A0 56 49 43 49 4F 20 20 20 20 20 20 20 28 20 20 29 VICIO ( ) 01B0 20 53 4F 4C 4F 20 20 20 20 20 20 20 20 20 20 20 SOLO 01C0 20 20 45 4D 45 52 47 45 4E 43 49 41 53 20 20 20 EMERGENCIAS 01D0 20 20 20 20 49 4E 53 45 52 54 45 20 54 41 52 4A INSERTE TARJ 01E0 45 54 41 20 20 20 20 20 4E 55 4D 45 52 4F 20 4D ETA NUMERO M 01F0 41 52 43 41 44 4F 3A 20 20 20 20 20 20 20 20 20 ARCADO: 0200 43 55 45 4C 47 55 45 20 20 20 20 20 20 20 20 20 CUELGUE 0210 20 20 49 4E 55 54 49 4C 49 5A 41 42 4C 45 20 20 INUTILIZABLE 0220 20 20 20 20 45 53 50 45 52 45 20 50 4F 52 20 46 ESPERE POR F 0230 41 56 4F 52 20 20 20 20 52 45 54 49 52 41 52 20 AVOR RETIRAR 0240 54 41 52 4A 45 54 41 20 20 20 20 20 43 52 45 44 TARJETA CRED 0250 49 54 4F 20 41 47 4F 54 41 44 4F 20 20 20 20 20 ITO AGOTADO 0260 54 41 52 4A 45 54 41 20 49 4E 56 41 4C 49 44 41 TARJETA INVALIDA 0270 20 20 20 20 20 20 20 20 20 20 50 55 4C 53 4F 53 PULSOS 0280 20 20 20 20 20 20 20 20 4D 41 52 51 55 45 20 45 MARQUE E 0290 4C 20 4E 55 4D 45 52 4F 20 20 20 20 20 20 20 20 L NUMERO 02A0 50 52 4F 42 4C 45 4D 41 20 20 20 20 20 20 20 20 PROBLEMA 02B0 20 4F 54 52 41 20 54 41 52 4A 45 54 41 3F 20 20 OTRA TARJETA? 02C0 20 20 20 20 20 4E 55 45 56 41 20 54 41 52 4A 45 NUEVA TARJE 02D0 54 41 20 20 20 20 20 20 43 55 45 4C 47 55 45 20 TA CUELGUE 02E0 44 45 53 50 55 45 53 20 20 20 20 20 20 44 45 20 DESPUES DE 02F0 4C 41 20 4C 4C 41 4D 41 44 41 20 20 20 20 20 20 LA LLAMADA 0300 4C 4C 41 4D 41 44 41 20 45 4E 54 52 41 4E 54 45 LLAMADA ENTRANTE 0310 20 20 20 20 20 4E 4F 20 41 43 43 45 53 49 42 4C NO ACCESIBL 0320 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 E 0330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0340 20 20 46 49 43 48 41 53 20 20 20 20 20 20 20 20 FICHAS 0350 4C 45 56 41 4E 54 45 20 4F 20 4D 49 43 52 4F 20 LEVANTE O MICRO 0360 20 20 20 20 28 20 20 29 20 46 41 4C 48 41 20 20 ( ) FALHA 0370 20 20 20 20 20 20 20 20 20 20 20 54 45 43 4E 49 TECNI 0380 43 41 20 20 20 20 20 20 20 20 20 20 28 20 20 29 CA ( ) 0390 20 53 4F 20 20 20 20 20 20 20 20 20 20 20 20 20 SO 03A0 20 4E 55 4D 45 52 4F 20 47 52 41 54 49 53 20 20 NUMERO GRATIS 03B0 20 20 20 20 20 49 4E 53 45 52 49 52 20 43 41 52 INSERIR CAR 03C0 54 41 4F 20 20 20 20 20 4E 55 4D 45 52 4F 20 4D TAO NUMERO M 03D0 41 52 43 41 44 4F 3A 20 20 20 20 20 20 50 4F 55 ARCADO: POU 03E0 53 45 20 4F 20 4D 49 43 52 4F 20 20 20 20 20 20 SE O MICRO 03F0 20 20 49 4E 55 54 49 4C 49 5A 41 56 45 4C 20 20 INUTILIZAVEL 0400 20 20 20 20 45 53 50 45 52 45 20 50 4F 52 20 46 ESPERE POR F 0410 41 56 4F 52 20 20 20 20 52 45 54 49 52 45 20 4F AVOR RETIRE O 0420 20 43 41 52 54 41 4F 20 20 20 20 20 43 41 52 54 CARTAO CART 0430 41 4F 20 45 53 47 4F 54 41 44 4F 20 20 20 20 20 AO ESGOTADO 0440 43 41 52 54 41 4F 20 49 4E 56 41 4C 49 44 4F 20 CARTAO INVALIDO 0450 20 20 20 20 20 20 20 20 20 20 20 55 4E 49 44 41 UNIDA 0460 44 45 53 20 20 20 20 20 4D 41 52 51 55 45 20 50 DES MARQUE P 0470 4F 52 20 46 41 56 4F 52 20 20 20 20 20 46 41 4C OR FAVOR FAL 0480 48 41 20 54 45 43 4E 49 43 41 20 20 20 20 20 20 HA TECNICA 0490 20 4F 55 54 52 4F 20 43 41 52 54 41 4F 20 3F 20 OUTRO CARTAO ? 04A0 20 20 20 20 20 20 4E 4F 56 4F 20 43 41 52 54 41 NOVO CARTA 04B0 4F 20 20 20 20 20 20 20 20 50 4F 55 53 45 20 4F O POUSE O 04C0 20 4D 49 43 52 4F 20 20 20 20 20 20 51 55 41 4E MICRO QUAN 04D0 44 4F 20 54 45 52 4D 49 4E 41 52 20 20 20 20 20 DO TERMINAR 04E0 43 48 41 4D 41 44 41 20 43 48 45 47 41 44 41 20 CHAMADA CHEGADA 04F0 20 20 20 20 20 20 49 4E 44 49 53 50 4F 4E 49 56 INDISPONIV 0500 45 4C 20 20 20 20 20 20 20 20 20 20 20 20 20 20 EL 0510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0520 20 20 46 49 43 48 41 53 20 20 20 20 20 20 20 20 FICHAS 0530 20 4C 49 46 54 20 52 45 43 45 49 56 45 52 20 20 LIFT RECEIVER 0540 20 20 20 20 28 20 20 29 20 4F 55 54 20 20 20 20 ( ) OUT 0550 20 20 20 20 20 20 20 20 20 20 4F 46 20 4F 52 44 OF ORD 0560 45 52 20 20 20 20 20 20 20 20 20 20 28 20 20 29 ER ( ) 0570 20 4F 4E 4C 59 20 20 20 20 20 20 20 20 20 20 20 ONLY 0580 20 20 45 4D 45 52 47 45 4E 43 49 45 20 20 20 20 EMERGENCIE 0590 20 20 20 20 20 20 49 4E 53 45 52 54 20 43 41 52 INSERT CAR 05A0 44 20 20 20 20 20 20 20 44 49 41 4C 45 44 20 4E D DIALED N 05B0 55 4D 42 45 52 3A 20 20 20 20 20 20 20 50 4C 45 UMBER: PLE 05C0 41 53 45 20 48 41 4E 47 20 55 50 20 20 20 20 20 ASE HANG UP 05D0 20 20 20 57 52 4F 4E 47 20 43 41 52 44 20 20 20 WRONG CARD 05E0 20 20 20 20 20 20 50 4C 45 41 53 45 20 57 41 49 PLEASE WAI 05F0 54 20 20 20 20 20 20 20 52 45 4D 4F 56 45 20 59 T REMOVE Y 0600 4F 55 52 20 43 41 52 44 20 20 20 20 20 20 43 52 OUR CARD CR 0610 45 44 49 54 3A 5A 45 52 4F 20 20 20 20 20 20 20 EDIT:ZERO 0620 20 43 41 52 44 20 52 45 4A 45 43 54 45 44 20 20 CARD REJECTED 0630 20 20 20 20 20 20 20 20 20 20 50 55 4C 53 45 53 PULSES 0640 20 20 20 20 20 20 20 20 20 20 50 4C 45 41 53 45 PLEASE 0650 20 44 49 41 4C 20 20 20 20 20 20 20 20 20 20 20 DIAL 0660 20 46 41 55 4C 54 20 20 20 20 20 20 20 20 20 20 FAULT 0670 20 43 48 41 4E 47 45 20 43 41 52 44 20 3F 20 20 CHANGE CARD ? 0680 20 20 20 20 20 20 20 20 4E 45 57 20 43 41 52 44 NEW CARD 0690 20 20 20 20 20 20 20 20 20 48 41 4E 47 20 55 50 HANG UP 06A0 20 41 54 20 45 4E 44 20 20 20 20 20 20 20 20 20 AT END 06B0 4F 46 20 43 41 4C 4C 20 20 20 20 20 20 20 20 20 OF CALL 06C0 20 49 4E 43 4F 4D 49 4E 47 20 43 41 4C 4C 20 20 INCOMING CALL 06D0 20 20 20 20 20 4E 4F 54 20 41 43 43 45 53 53 49 NOT ACCESSI 06E0 42 4C 45 20 20 20 20 20 20 20 20 20 20 20 20 20 BLE 06F0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0700 20 20 54 4F 4B 45 4E 53 20 20 20 20 20 20 20 20 TOKENS 0710 20 20 20 53 47 41 4E 43 49 41 52 45 20 20 20 20 SGANCIARE 0720 20 20 20 20 28 20 20 29 20 41 50 50 41 52 45 43 ( ) APPAREC 0730 43 48 49 4F 20 20 20 20 20 46 55 4F 52 49 20 53 CHIO FUORI S 0740 45 52 56 49 5A 49 4F 20 20 20 20 20 28 20 20 29 ERVIZIO ( ) 0750 20 53 4F 4C 4F 20 20 20 20 20 20 20 20 20 20 20 SOLO 0760 20 4E 55 4D 45 52 49 20 47 52 41 54 49 53 20 20 NUMERI GRATIS 0770 20 20 20 20 49 4E 54 52 4F 44 55 52 52 45 20 43 INTRODURRE C 0780 41 52 54 41 20 20 20 20 4E 55 4D 45 52 4F 20 43 ARTA NUMERO C 0790 48 49 41 4D 41 54 4F 3A 20 20 20 20 20 20 52 49 HIAMATO: RI 07A0 41 47 47 41 4E 43 49 41 52 45 20 20 20 20 20 20 AGGANCIARE 07B0 43 41 52 54 41 20 4E 4F 20 56 41 4C 49 44 41 20 CARTA NO VALIDA 07C0 20 20 20 20 20 20 20 41 54 54 45 4E 44 45 52 45 ATTENDERE 07D0: 20 20 20 20 20 20 20 20 20 52 49 54 49 52 41 52 RITIRAR 07E0: 45 20 43 41 52 54 41 20 20 20 20 20 20 20 43 52 E CARTA CR 07F0: 45 44 49 54 4F 3A 5A 45 52 4F 20 20 20 20 20 20 EDITO:ZERO 0800: 43 41 52 54 41 20 4E 4F 4E 20 56 41 4C 49 44 41 CARTA NON VALIDA 0810: 20 20 20 20 20 20 20 20 20 20 55 4E 49 54 41 27 UNITA' 0820: 20 20 20 20 20 20 20 20 20 46 41 52 45 20 49 4C FARE IL 0830: 20 4E 55 4D 45 52 4F 20 20 20 20 20 20 20 20 20 NUMERO 0840: 41 4E 4F 4D 41 4C 49 41 20 20 20 20 20 20 20 20 ANOMALIA 0850: 43 41 4D 42 49 4F 20 44 49 20 43 41 52 54 41 3F CAMBIO DI CARTA? 0860: 20 20 20 20 20 20 4E 55 4F 56 41 20 43 41 52 54 NUOVA CART 0870: 41 20 20 20 20 20 20 20 20 52 49 41 54 54 41 43 A RIATTAC 0880: 43 41 54 45 20 41 20 20 20 20 20 20 46 49 4E 45 CATE A FINE 0890: 20 44 45 20 43 48 49 41 4D 41 54 41 20 20 20 20 DE CHIAMATA 08A0: 43 48 49 41 4D 41 54 41 20 41 52 52 49 56 4F 20 CHIAMATA ARRIVO 08B0: 20 20 20 20 20 4E 4F 20 41 43 43 45 53 53 49 42 NO ACCESSIB 08C0: 49 4C 45 20 20 20 20 20 20 20 20 20 20 20 20 20 ILE 08D0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 08E0: 20 20 47 45 54 54 4F 4E 45 53 20 20 20 20 20 20 GETTONES 08F0: 20 20 20 44 45 43 52 4F 43 48 45 5A 20 20 20 20 DECROCHEZ 0900: 20 20 20 20 28 20 20 29 20 41 50 50 41 52 45 49 ( ) APPAREI 0910: 4C 20 20 20 20 20 20 20 20 48 4F 52 53 20 53 45 L HORS SE 0920: 52 56 49 43 45 20 20 20 20 20 20 20 28 20 20 29 RVICE ( ) 0930: 20 53 45 55 4C 45 4D 45 4E 54 20 20 20 20 20 20 SEULEMENT 0940: 4E 55 4D 45 52 4F 53 20 47 52 41 54 55 49 54 53 NUMEROS GRATUITS 0950: 20 20 20 20 49 4E 54 52 4F 44 55 49 52 45 20 43 INTRODUIRE C 0960: 41 52 54 45 20 20 20 20 20 4E 55 4D 45 52 4F 20 ARTE NUMERO 0970: 41 50 50 45 4C 45 3A 20 20 20 20 20 20 52 41 43 APPELE: RAC 0980: 43 52 4F 43 48 45 5A 20 53 56 50 20 20 20 20 20 CROCHEZ SVP 0990: 20 4E 4F 4E 20 55 54 49 4C 49 53 41 42 4C 45 20 NON UTILISABLE 09A0: 20 20 20 20 20 50 41 54 49 45 4E 54 45 5A 20 53 PATIENTEZ S 09B0: 56 50 20 20 20 20 20 20 52 45 54 49 52 45 5A 20 VP RETIREZ 09C0: 4C 41 20 43 41 52 54 45 20 20 20 20 20 43 52 45 LA CARTE CRE 09D0: 44 49 54 3A 45 50 55 49 53 45 20 20 20 20 20 20 DIT:EPUISE 09E0: 20 43 41 52 54 45 20 52 45 46 55 53 45 45 20 20 CARTE REFUSEE 09F0: 20 20 20 20 20 20 20 20 20 20 55 4E 49 54 45 53 UNITES 0A00: 20 20 20 20 20 20 20 20 20 20 20 4E 55 4D 45 52 NUMER 0A10: 4F 54 45 5A 20 20 20 20 20 20 20 20 20 20 20 20 OTEZ 0A20: 41 4E 4F 4D 41 4C 49 45 20 20 20 20 20 20 20 20 ANOMALIE 0A30: 20 43 48 41 4E 47 45 52 20 43 41 52 54 45 3F 20 CHANGER CARTE? 0A40: 20 20 20 20 20 4E 4F 55 56 45 4C 4C 45 20 43 41 NOUVELLE CA 0A50: 52 54 45 20 20 20 20 20 52 41 43 43 52 4F 43 48 RTE RACCROCH 0A60: 452 5A 20 41 50 52 45 53 20 20 20 20 4C 41 20 43 EZ APRES LA C 0A70: 4F 4D 4D 55 4E 49 43 41 54 49 4F 4E 20 20 20 20 OMMUNICATION 0A80: 20 41 50 50 45 4C 20 41 52 52 49 56 45 45 20 20 APPEL ARRIVEE 0A90: 20 20 20 20 41 50 50 45 4C 20 49 4D 50 4F 53 53 APPEL IMPOSS 0AA0: 49 42 4C 45 20 20 20 20 20 20 20 20 20 20 20 20 IBLE 0AB0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0AC0: 20 20 4A 45 54 4F 4E 53 20 20 20 20 20 20 20 20 JETONS ; Delay() LD A,0FFH ; 0AD0 LD (06028H),A ; 0AD2 LD A,(06028H) ; 0AD5 DEC A ; 0AD8 LD (06028H),A ; 0AD9 JR NZ,00AD5H ; 0ADC RET ; 0ADE XOR A ; 0ADF LD (065E9H),A ; 0AE0 LD BC,00184H ; 0AE3 Write '( ) FUERA ' LD HL,00198H ; 0AE6 ' DE SERVICIO ' XOR A ; 0AE9 SET 0,A ; 0AEA En el lugar del ' ' Pone (65B8) JP 00D8DH ; 0AEC XOR A ; 0AEF LD (065E9H),A ; 0AF0 LD BC,001D4H ; 0AF3 Write 'INSERTE TARJETA ' LD HL,00328H ; 0AF6 ' ' XOR A ; 0AF9 JP 00D8DH ; 0AFA XOR A ; 0AFD LD (065E9H),A ; 0AFE LD BC,001E8H ; 0B01 Write 'NUMERO MARCADO ' LD HL,00328H ; 0B04 ' ' XOR A ; 0B07 SET 5,A ; 0B08 Pone el Numero Marcado en la segunda JP 00D8DH ; 0B0A linea del buffer LD BC,(06670H) ; 0B0D Repite la linea de arriba LD HL,001FCH ; 0B11 ' CUELGUE ' LD A,(06674H) ; 0B14 AND 007H ; 0B17 JP 00D8DH ; 0B19 LD A,001H ; 0B1C Actualiza el Indicador de Pulsos LD (065E9H),A ; 0B1E LD A,(06606H) ; 0B21 Carga flag pulsos/fichas CP 003H ; 0B24 LD BC,00274H ; 0B26 Write ' PULSOS ' JR NZ,00B2EH ; 0B29 LD BC,0033CH ; 0B2B Write ' FICHAS ' LD HL,(06672H) ; 0B2E LD A,(06674H) ; 0B31 AND 0F8H ; 0B34 SET 2,A ; 0B36 Write Nro de Pulsos restantes JP 00D8DH ; 0B38 LD A,001H ; 0B3B LD (065E9H),A ; 0B3D CALL 03CB4H ; 0B40 Prende el Bit 7 del Port 61 y 641E=2 LD BC,0024CH ; 0B43 Write ' CREDITO AGOTADO ' LD HL,001FCH ; 0B46 ' CUELGUE ' XOR A ; 0B49 JP 00D8DH ; 0B4A LD A,001H ; 0B4D LD (065E9H),A ; 0B4F CALL 03CB4H ; 0B52 Prende el Bit 7 del Port 61 y 641E=2 LD BC,00210H ; 0B55 Write ' INUTILIZABLE ' LD HL,00328H ; 0B58 ' ' XOR A ; 0B5B JP 00D8DH ; 0B5C XOR A ; 0B5F LD (065E9H),A ; 0B60 LD BC,00224H ; 0B63 Write 'ESPERE POR FAVOR ' LD HL,00328H ; 0B66 ' ' XOR A ; 0B69 JP 00D8DH ; 0B6A LD A,001H ; 0B6D LD (065E9H),A ; 0B6F CALL 03CB4H ; 0B72 Prende el Bit 7 del Port 61 y 641E=2 LD BC,00260H ; 0B75 Write 'TARJETA INVALIDA ' LD HL,001FCH ; 0B78 ' CUELGUE ' XOR A ; 0B7B JP 00D8DH ; 0B7C LD A,001H ; 0B7F LD (065E9H),A ; 0B81 CALL 03CB4H ; 0B84 Prende el Bit 7 del Port 61 y 641E=2 LD A,(06606H) ; 0B87 (6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 0B8A LD BC,00274H ; 0B8C Write ' PULSOS ' JR NZ,00B94H ; 0B8F LD BC,0033CH ; 0B91 Write ' FICHAS ' LD HL,002B0H ; 0B94 ' OTRA TARJETA ? ' XOR A ; 0B97 SET 2,A ; 0B98 Write Nro de Pulsos restantes JP 00D8DH ; 0B9A LD A,001H ; 0B9D LD (065E9H),A ; 0B9F LD A,(06606H) ; 0BA2 (6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 0BA5 LD BC,00274H ; 0BA7 Write ' PULSOS ' JR NZ,00BAFH ; 0BAA LD BC,0033CH ; 0BAC Write ' FICHAS ' LD HL,002C4H ; 0BAF ' NUEVA TARJETA ' XOR A ; 0BB2 SET 2,A ; 0BB3 Write Nro de Pulsos restantes JP 00D8DH ; 0BB5 CALL 03CB4H ; 0BB8 Prende el Bit 7 del Port 61 y 641E=2 LD A,(065E9H) ; 0BBB OR A ; 0BBE JR NZ,00BCEH ; 0BBF LD A,(06674H) ; 0BC1 AND 0F8H ; 0BC4 LD (06674H),A ; 0BC6 LD BC,00328H ; 0BC9 ' ' JR 00BD2H ; 0BCC LD BC,(06670H) ; 0BCE Mantiene la linea superior LD HL,00238H ; 0BD2 'RETIRAR TARJETA ' LD A,(06674H) ; 0BD5 AND 007H ; 0BD8 JP 00D8DH ; 0BDA XOR A ; 0BDD LD (065E9H),A ; 0BDE LD BC,002D8H ; 0BE1 Write 'CUELGUE DESPUES ' LD HL,002ECH ; 0BE4 'DE LA LLAMADA ' XOR A ; 0BE7 JP 00D8DH ; 0BE8 LD A,001H ; 0BEB LD (065E9H),A ; 0BED LD A,(06606H) ; 0BF0 (6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 0BF3 LD BC,00274H ; 0BF5 Write ' PULSOS ' JR NZ,00BFDH ; 0BF8 ' MARQUE EL NUMERO ' LD BC,0033CH ; 0BFA Write ' FICHAS ' LD HL,00288H ; 0BFD ' MARQUE EL NUMERO ' XOR A ; 0C00 SET 2,A ; 0C01 Write Nro de Pulsos restantes JP 00D8DH ; 0C03 CALL 03CB4H ; 0C06 Prende el Bit 7 del Port 61 y 641E=2 LD A,001H ; 0C09 LD (065E9H),A ; 0C0B LD A,(06606H) ; 0C0E (6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 0C11 LD BC,00274H ; 0C13 Write ' PULSOS ' JR NZ,00C1BH ; 0C16 'RETIRAR TARJETA ' LD BC,0033CH ; 0C18 Write ' FICHAS ' LD HL,00238H ; 0C1B 'RETIRAR TARJETA ' XOR A ; 0C1E SET 2,A ; 0C1F Write Nro de Pulsos restantes JP 00D8DH ; 0C21 CALL 03CB4H ; 0C24 Prende el Bit 7 del Port 61 y 641E=2 LD A,001H ; 0C27 Write ' PROBLEMA ' LD (065E9H),A ; 0C29 ' CUELGUE ' LD BC,0029CH ; 0C2C LD HL,001FCH ; 0C2F XOR A ; 0C32 JP 00D8DH ; 0C33 CALL 03CB4H ; 0C36 Prende el Bit 7 del Port 61 y 641E=2 LD A,001H ; 0C39 Repite la linea de arriva y LD (065E9H),A ; 0C3B ' PROBLEMA ' LD BC,(06670H) ; 0C3E LD HL,0029CH ; 0C42 LD A,(06674H) ; 0C45 AND 007H ; 0C48 JP 00D8DH ; 0C4A XOR A ; 0C4D Write 'CIERRE LA PUERTA ' LD (065E9H),A ; 0C4E ' ' LD HL,00000H ; 0C51 LD (06650H),HL ; 0C54 LD BC,00120H ; 0C57 LD HL,00328H ; 0C5A XOR A ; 0C5D JP 00D8DH ; 0C5E XOR A ; 0C61 Write ' PRUEBA TECLADO ' LD (065E9H),A ; 0C62 ' ' LD HL,00000H ; 0C65 LD (06650H),HL ; 0C68 LD BC,00134H ; 0C6B LD HL,00328H ; 0C6E XOR A ; 0C71 SET 3,A ; 0C72 Caracter 10 de la linea 2 = (643A) JP 00D8DH ; 0C74 LD HL,00000H ; 0C77 Write ' PRUEBA ESPIA ? ' LD (06650H),HL ; 0C7A ' ' LD BC,00148H ; 0C7D LD HL,00328H ; 0C80 LD A,010H ; 0C83 LD (06600H),A ; 0C85 XOR A ; 0C88 SET 5,A ; 0C89 Cambia la linea 2 del Display Buffer JP 00D8DH ; 0C8B LD HL,00000H ; 0C8E LD (06650H),HL ; 0C91 LD BC,0015CH ; 0C94 Write ' INICIALIZACION ? ' LD HL,00328H ; 0C97 ' ' XOR A ; 0C9A JP 00D8DH ; 0C9B XOR A ; 0C9E LD (065E9H),A ; 0C9F LD BC,00170H ; 0CA2 Write ' DESCUELGUE ' LD HL,00328H ; 0CA5 ' ' XOR A ; 0CA8 JP 00D8DH ; 0CA9 XOR A ; 0CAC LD (065E9H),A ; 0CAD LD BC,00170H ; 0CB0 Write ' DESCUELGUE ' LD HL,00300H ; 0CB3 'LLAMADA ENTRANTE ' XOR A ; 0CB6 JP 00D8DH ; 0CB7 CALL 03CB4H ; 0CBA Prende el Bit 7 del Port 61 y 641E=2 LD A,001H ; 0CBD LD (065E9H),A ; 0CBF LD BC,00314H ; 0CC2 Write ' NO ACCESIBLE ' LD HL,001FCH ; 0CC5 ' CUELGUE ' XOR A ; 0CC8 JP 00D8DH ; 0CC9 XOR A ; 0CCC LD (065E9H),A ; 0CCD LD BC,001ACH ; 0CD0 Write ' ( ) SOLO ' LD HL,001C0H ; 0CD3 ' EMERGENCIAS ' XOR A ; 0CD6 SET 0,A ; 0CD7 En el lugar del ' ' Pone (65B8) JP 00D8DH ; 0CD9 LD A,001H ; 0CDC LD (065E9H),A ; 0CDE CALL 03CB4H ; 0CE1 Prende el Bit 7 del Port 61 y 641E=2 LD A,(06606H) ; 0CE4 (6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 0CE7 LD BC,00274H ; 0CE9 Write ' PULSOS ' JR NZ,00CF1H ; 0CEC ' MARQUE EL NUMERO ' LD BC,0033CH ; 0CEE Write ' FICHAS ' LD HL,00288H ; 0CF1 ' MARQUE EL NUMERO ' XOR A ; 0CF4 SET 2,A ; 0CF5 Write Nro de Pulsos restantes JP 00D8DH ; 0CF7 LD A,001H ; 0CFA LD (065E9H),A ; 0CFC LD A,(06606H) ; 0CFF (6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 0D02 LD BC,00274H ; 0D04 Write ' PULSOS ' JR NZ,00D0CH ; 0D07 ' ESPERE POR FAVOR ' LD BC,0033CH ; 0D09 Write ' FICHAS ' LD HL,00224H ; 0D0C ' ESPERE POR FAVOR ' XOR A ; 0D0F SET 2,A ; 0D10 Write Nro de Pulsos restantes JP 00D8DH ; 0D12 LD A,001H ; 0D15 Actuaiza los pulsos Arriva y LD (065E9H),A ; 0D17 Repite la linea de abajo LD BC,00328H ; 0D1A LD HL,(06672H) ; 0D1D LD A,(06674H) ; 0D20 AND 0F8H ; 0D23 JP 00D8DH ; 0D25 LD BC,(06670H) ; 0D28 Borra la linea de abajo LD HL,00328H ; 0D2C y repite la de arriva LD A,(06674H) ; 0D2F AND 007H ; 0D32 JP 00D8DH ; 0D34 LD A,001H ; 0D37 Init Display OUT (0E0H),A ; 0D39 (E0h)=01 CALL 00AD0H ; 0D3B Delay LD A,038H ; 0D3E OUT (0E0H),A ; 0D40 (E0h)=38 CALL 00AD0H ; 0D42 Delay LD A,00CH ; 0D45 OUT (0E0H),A ; 0D47 (E0h)=0C CALL 00AD0H ; 0D49 Delay LD A,006H ; 0D4C OUT (0E0H),A ; 0D4E (E0h)=06 CALL 00AD0H ; 0D50 Delay LD HL,06000H ; 0D53 LD A,020H ; 0D56 LD B,028H ; 0D58 LD (HL),A ; 0D5A INC HL ; 0D5B Fill Display Buffer with Spaces DJNZ 00D5AH ; 0D5C LD A,040H ; 0D5E OUT (0E0H),A ; 0D60 E0=40 CALL 00AD0H ; 0D62 Delay LD HL,00100H ; 0D65 LD B,008H ; 0D68 CALL 00EACH ; 0D6A 8*(10xIn(E0), Out(E1h,HL++)) LD HL,00108H ; 0D6D LD B,008H ; 0D70 CALL 00EACH ; 0D72 8*(10xIn(E0), Out(E1h,HL++)) LD HL,00110H ; 0D75 LD B,008H ; 0D78 CALL 00EACH ; 0D7A 8*(10xIn(E0), Out(E1h,HL++)) LD HL,00118H ; 0D7D LD B,008H ; 0D80 CALL 00EACH ; 0D82 8*(10xIn(E0), Out(E1h,HL++)) LD A,080H ; 0D85 OUT (0E0H),A ; 0D87 CALL 00AD0H ; 0D89 Delay RET ; 0D8C LD (06674H),A ; 0D8D LD (06670H),BC ; 0D90 LD (06672H),HL ; 0D94 CALL 00D9BH ; 0D97 Imprime (6670)&(6672), Vars=(6674) RET ; 0D9A CALL 00DFBH ; 0D9B Copy (6670h)->6000 y (6672)->6014 20 byte con el idioma correspondiente (6650h) CALL 00E1CH ; 0D9E Pone las variables en el Display Buffer LD A,002H ; 0DA1 OUT (0E0H),A ; 0DA3 E0=02 CALL 00AD0H ; 0DA5 Delay LD A,(07C00H) ; 0DA8 BIT 1,A ; 0DAB JR NZ,00DB9H ; 0DAD LD HL,06000H ; 0DAF LD B,014H ; 0DB2 CALL 00EACH ; 0DB4 20d*(10xIn(E0), Out(E1h,HL++)) JR 00DC4H ; 0DB7 CALL 00E78H ; 0DB9 In(E0), Out(E1,20h) LD HL,06000H ; 0DBC LD B,014H ; 0DBF CALL 00EACH ; 0DC1 20d*(10xIn(E0), Out(E1h,HL++)) IN A,(0E0H) ; 0DC4 LD A,0C0H ; 0DC8 OUT (0E0H),A ; 0DCA Out(E0,C0h) CALL 00AD0H ; 0DCC Delay LD A,(07C00H) ; 0DCF BIT 1,A ; 0DD2 JR NZ,00DE0H ; 0DD4 LD HL,06014H ; 0DD6 LD B,014H ; 0DD9 CALL 00EACH ; 0DDB 20d*(10xIn(E0), Out(E1h,HL++)) JR 00DEBH ; 0DDE CALL 00E78H ; 0DE0 In(E0), Out(E1,20h) LD HL,06014H ; 0DE3 LD B,012H ; 0DE6 CALL 00EACH ; 0DE8 20d*(10xIn(E0), Out(E1h,HL++)) CALL 00DEFH ; 0DEB Turn Light ON and Set Light Timer = 3s RET ; 0DEE LD A,003H ; 0DEF Turn Light ON and Set Light Timer = 3s LD (0641FH),A ; 0DF1 Timer 7B IN A,(061H) ; 0DF4 SET 5,A ; 0DF6 OUT (061H),A ; 0DF8 RET ; 0DFA LD DE,(06670H) ; 0DFB LD HL,(06650H) ; 0DFF ADD HL,DE ; 0E02 LD BC,00014H ; 0E03 LD DE,06000H ; 0E06 LDIR ; 0E09 LD DE,(06672H) ; 0E0B LD HL,(06650H) ; 0E0F ADD HL,DE ; 0E12 LD BC,00014H ; 0E13 LD DE,06014H ; 0E16 LDIR ; 0E19 RET ; 0E1B ; Formatea las variables para la salida por el Display y las ; pone en el Display Buffer ; Input: A: Bit 0=1 Buffer[1,1..2]=Word(65B8) ['CC','CI','??'] ; Bit 2=1 Buffer[1,1..4]=ASCII String de Nro de Pulsos ; Bit 3=1 Buffer[2,10] = Byte (643A) ; Bit 5=1 Buffer[2,0..16] = (65F0++) LD A,(06674H) ; 0E1C BIT 5,A ; 0E1F CALL NZ,00E41H ; 0E21 BIT 0,A ; 0E24 CALL NZ,00E66H ; 0E26 Word (6001) = Word (65B8) BIT 2,A ; 0E29 CALL NZ,00E34H ; 0E2B Nro de Pulsos -> Display Buffer BIT 3,A ; 0E2E CALL NZ,00E6FH ; 0E30 Byte (601E) = Byte (643A) RET ; 0E33 ;--------------------------------------------- PUSH AF ; 0E34 LD IY,06001H ; 0E35 LD DE,0661EH ; 0E39 Carga en DE los pulsos restantes CALL 04042H ; 0E3C Makes 6001->ASCII String of Word(661E) POP AF ; 0E3F RET ; 0E40 PUSH AF ; 0E41 Pone o no (dependiendo del valor de LD HL,065F0H ; 0E42 (6600) y (6675)) algo en la segunda LD DE,06014H ; 0E45 linea del Display Buffer LD A,(06675H) ; 0E48 OR A ; 0E4B JR NZ,00E5FH ; 0E4C LD A,(06600H) ; 0E4E LD B,A ; 0E51 OR A ; 0E52 JR Z,00E64H ; 0E53 LD A,(HL) ; 0E55 OR 030H ; 0E56 LD (DE),A ; 0E58 INC HL ; 0E59 INC DE ; 0E5A DJNZ 00E55H ; 0E5B JR 00E64H ; 0E5D LD BC,00010H ; 0E5F LDIR ; 0E62 POP AF ; 0E64 RET ; 0E65 PUSH AF ; 0E66 Word (6001) = Word (65B8) LD HL,(065B8H) ; 0E67 LD (06001H),HL ; 0E6A POP AF ; 0E6D RET ; 0E6E PUSH AF ; 0E6F Byte (601E) = Byte (643A) LD A,(0643AH) ; 0E70 LD (0601EH),A ; 0E73 POP AF ; 0E76 RET ; 0E77 IN A,(0E0H) ; 0E78 In(E0), Out(E1,20h) LD A,020H ; 0E7A OUT (0E1H),A ; 0E7C ; ORG 00E7FH IN A,(0E0H) ; 0E7F IN A,(0E0H) ; 0E81 IN A,(0E0H) ; 0E83 IN A,(0E0H) ; 0E85 IN A,(0E0H) ; 0E87 IN A,(0E0H) ; 0E89 IN A,(0E0H) ; 0E8B IN A,(0E0H) ; 0E8D IN A,(0E0H) ; 0E8F IN A,(0E0H) ; 0E91 LD A,020H ; 0E93 OUT (0E1H),A ; 0E95 IN A,(0E0H) ; 0E97 IN A,(0E0H) ; 0E99 IN A,(0E0H) ; 0E9B IN A,(0E0H) ; 0E9D IN A,(0E0H) ; 0E9F IN A,(0E0H) ; 0EA1 IN A,(0E0H) ; 0EA3 IN A,(0E0H) ; 0EA5 IN A,(0E0H) ; 0EA7 IN A,(0E0H) ; 0EA9 RET ; 0EAB ; Stringout IN A,(0E0H) ; 0EAC B*(10xIn(E0), Out(E1h,HL++)) IN A,(0E0H) ; 0EAE IN A,(0E0H) ; 0EB0 IN A,(0E0H) ; 0EB2 IN A,(0E0H) ; 0EB4 IN A,(0E0H) ; 0EB6 IN A,(0E0H) ; 0EB8 IN A,(0E0H) ; 0EBA IN A,(0E0H) ; 0EBC IN A,(0E0H) ; 0EBE LD A,(HL) ; 0EC0 OUT (0E1H),A ; 0EC1 INC HL ; 0EC3 DJNZ 00EACH ; 0EC4 RET ; 0EC6 ; main() DI ; 0EC7 CALL 028C8H ; 0EC8 Inicializa muchos Ports, El Display, ; Llena 61CD-6679 con 0 ; Escribe 'ESPERE POR FAVOR' y decodifica ; un area de la ROM que pasa a RAM. CALL 029D6H ; 0ECB Init Buffers & Idioma CALL 02978H ; 0ECE Init 6448,6449,644A,6677,6678 ; Scan Keyboard ; Fuera de Servicio Timer = 5700d EI ; 0ED1 CALL 03B2EH ; 0ED2 Changes P02,P46,P41,P61,P40,(6604h)=0 LD A,001H ; 0ED5 CALL 00F16H ; 0ED7 Push #9 (01h,(642Eh),FFh,90+Fichas) LD A,002H ; 0EDA LD (06419H),A ; 0EDC LD A,(06419H) ; 0EDF OR A ; 0EE2 JR NZ,00EDFH ; 0EE3 Wait 2 Seconds LD A,00EH ; 0EE5 CALL 03F5BH ; 0EE7 Put Buffer #7 (Internal Commands) LD A,002H ; 0EEA LD (0644BH),A ; 0EEC (644Bh)=02h ; Main LOOP LD A,(0644BH) ; 0EEF CP 002H ; 0EF2 JR NZ,00EFCH ; 0EF4 CALL 02AB1H ; 0EF6 JP 00EEFH ; 0EF9 CP 005H ; 0EFC JR NZ,00F06H ; 0EFE CALL 0171EH ; 0F00 JP 00EEFH ; 0F03 CP 006H ; 0F06 JP NZ,00F11H ; 0F08 CALL 01417H ; 0F0B JP 00EEFH ; 0F0E CALL 02758H ; 0F11 JR 00EEFH ; 0F14 Loop Main LOOP PUSH AF ; 0F16 Push #9 (A,(642Eh),FFh,90+Fichas) PUSH BC ; 0F17 CALL 03FBCH ; 0F18 Put Log Buffer LD A,(0642EH) ; 0F1B CALL 03FBCH ; 0F1E Put Log Buffer LD A,0FFH ; 0F21 CALL 03FBCH ; 0F23 Put Log Buffer LD A,(06606H) ; 0F26 (6606h):3 == FICHAS: 1 == PULSOS LD B,A ; 0F29 LD A,090H ; 0F2A OR B ; 0F2C CALL 03FBCH ; 0F2D Put Log Buffer POP BC ; 0F30 POP AF ; 0F31 RET ; 0F32 LD A,011H ; 0F33 LD (06552H),A ; 0F35 ; Inicializacion de tarjeta? CALL 03C26H ; 0F38 2xIn(61h), Out(66h,13h), Out(67h,E6h) CALL 03940H ; 0F3B ; Lectura de tarjeta? LD A,(0642CH) ; 0F3E ; Cambio de tarjeta ... BIT 3,A ; 0F41 JR NZ,00FAEH ; 0F43 LD A,(06450H) ; 0F45 CP VOL_KEY ; 0F48 JR Z,00F51H ; 0F4A CALL 0117EH ; 0F4C ; * JR 00FAEH ; 0F4F LD A,(06451H) ; 0F51 CP 008H ; 0F54 JR NZ,00F71H ; 0F56 LD A,(0645BH) ; 0F58 CP 00AH ; 0F5B JR NZ,00F64H ; 0F5D CALL 011F1H ; 0F5F Write 'TARJETA INVALIDA | CUELGUE' JR 00FAEH ; 0F62 CALL 00FB9H ; 0F64 CALL 03C42H ; 0F67 (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 LD A,001H ; 0F6A LD (06606H),A ; 0F6C (6606h)=1 => PULSOS JR 00F87H ; 0F6F CP 009H ; 0F71 JR NZ,00F82H ; 0F73 CALL 00FFBH ; 0F75 CALL 03C42H ; 0F78 (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 LD A,003H ; 0F7B LD (06606H),A ; 0F7D (6606h)=3 => FICHAS JR 00F87H ; 0F80 CALL 011ECH ; 0F82 Write 'INUTILIZABLE | ' JR 00FAEH ; 0F85 LD A,(06606H) ; 0F87 (6606h)=3 => FICHAS =/=> PULSOS CP 001H ; 0F8A JR Z,00F92H ; 0F8C CP 003H ; 0F8E JR NZ,00FAEH ; 0F90 LD B,006H ; 0F92 LD DE,06624H ; 0F94 LD HL,06665H ; 0F97 CALL 04080H ; 0F9A CmpStrings (HL) & (DE). B = Len JR NZ,00FAEH ; 0F9D LD A,(0662EH) ; 0F9F LD C,A ; 0FA2 LD A,(0666FH) ; 0FA3 CP C ; 0FA6 JR NZ,00FAEH ; 0FA7 LD A,001H ; 0FA9 LD (06623H),A ; 0FAB XOR A ; 0FAE LD (06610H),A ; 0FAF LD (06611H),A ; 0FB2 CALL 01A6EH ; 0FB5 RET ; 0FB8 CALL 01062H ; 0FB9 Copy (6452..) -> (6624..) & Decodes XOR A ; 0FBC LD B,A ; 0FBD LD A,(0662FH) ; 0FBE CP 000H ; 0FC1 JR Z,00FD4H ; 0FC3 CP 001H ; 0FC5 JR Z,00FD4H ; 0FC7 CP 00BH ; 0FC9 JR Z,00FD4H ; 0FCB CP 00CH ; 0FCD JR Z,00FF7H ; 0FCF LD A,001H ; 0FD1 LD B,A ; 0FD3 LD A,(0645CH) ; 0FD4 BIT 6,A ; 0FD7 JR NZ,00FDEH ; 0FD9 XOR A ; 0FDB JR 00FE0H ; 0FDC LD A,040H ; 0FDE OR B ; 0FE0 LD (0662FH),A ; 0FE1 OR A ; 0FE4 JR NZ,00FFAH ; 0FE5 RET LD HL,(0662CH) ; 0FE7 Fichas Restantes LD (0661CH),HL ; 0FEA Fichas Restantes LD (06620H),HL ; 0FED Fichas Restantes LD (0661EH),HL ; 0FF0 Fichas Restantes LD A,H ; 0FF3 OR L ; 0FF4 JR NZ,00FFAH ; 0FF5 CALL 011E2H ; 0FF7 Write 'CREDITO AGOTADO | CUELGUE' RET ; 0FFA ;----------------------- ; CALL 0102EH ; 0FFB LD B,000H ; 0FFE OR A ; 1000 JR Z,0100DH ; 1001 CP 009H ; 1003 JR Z,0100DH ; 1005 CP 008H ; 1007 JR Z,0102AH ; 1009 LD B,001H ; 100B INC HL ; 100D LD A,(HL) ; 100E BIT 6,A ; 100F LD A,040H ; 1011 JR NZ,01016H ; 1013 XOR A ; 1015 -- Salteado OR B ; 1016 LD (0662FH),A ; 1017 JR NZ,0102DH ; 101A LD HL,(0662CH) ; 101C Fichas Restantes LD (0661CH),HL ; 101F Fichas Restantes LD (06620H),HL ; 1022 Fichas Restantes LD (0661EH),HL ; 1025 Fichas Restantes LD A,H ; 1028 OR L ; 1029 CALL Z,011E2H ; 102A Write 'CREDITO AGOTADO | CUELGUE' RET ; 102D LD HL,06452H ; 102E LD A,(HL) ; 1031 (6452h) LD (06624H),A ; 1032 INC HL ; 1035 LD A,(HL) ; 1036 (6453h) LD (06625H),A ; 1037 XOR A ; 103A LD (06626H),A ; 103B INC HL ; 103E LD DE,06627H ; 103F LD BC,00003H ; 1042 LDIR ; 1045 XOR A ; 1047 LD (0662AH),A ; 1048 LD (0662BH),A ; 104B LD A,(HL) ; 104E (6454h) LD (0662CH),A ; 104F Fichas Restantes INC HL ; 1052 LD A,(HL) ; 1053 (6455h) LD (0662DH),A ; 1054 LD A,028H ; 1057 LD (0662EH),A ; 1059 INC HL ; 105C LD A,(HL) ; 105D (6456h) LD (0662FH),A ; 105E RET ; 1061 LD HL,06452H ; 1062 LD A,(HL) ; 1065 (6452h) LD (06624H),A ; 1066 INC HL ; 1069 LD A,(HL) ; 106A (6453h) RRC A ; 106B RRC A ; 106D RRC A ; 106F RRC A ; 1071 AND 00FH ; 1073 LD (06625H),A ; 1075 LD A,(HL) ; 1078 (6453h) AND 00FH ; 1079 LD (06626H),A ; 107B INC HL ; 107E LD DE,06627H ; 107F LD BC,00007H ; 1082 LDIR ; 1085 LD A,05CH ; 1087 LD (0662EH),A ; 1089 LD A,(HL) ; 108C (6454h) LD (0662FH),A ; 108D RET ; 1090 LD A,001H ; 1091 LD (06607H),A ; 1093 LD A,011H ; 1096 LD (06552H),A ; 1098 CALL 03C26H ; 109B 2xIn(61h), Out(66h,13h), Out(67h,E6h) CALL 03940H ; 109E ; Lectura de tajeta ? LD A,(0642CH) ; 10A1 BIT 3,A ; 10A4 JP NZ,01176H ; 10A6 LD A,(06450H) ; 10A9 CP VOL_KEY ; 10AC JR Z,010B6H ; 10AE CALL 0117EH ; 10B0 JP 01176H ; 10B3 LD A,(06451H) ; 10B6 CP 008H ; 10B9 JR Z,010F3H ; 10BB CP 009H ; 10BD JP NZ,01169H ; 10BF CALL 0102EH ; 10C2 LD B,000H ; 10C5 OR A ; 10C7 JR Z,010D4H ; 10C8 CP 008H ; 10CA JR Z,010D4H ; 10CC CP 009H ; 10CE JR Z,010D4H ; 10D0 LD B,001H ; 10D2 INC HL ; 10D4 LD A,(HL) ; 10D5 BIT 6,A ; 10D6 LD A,040H ; 10D8 JR NZ,010DDH ; 10DA XOR A ; 10DC OR B ; 10DD LD (0662FH),A ; 10DE LD A,(06459H) ; 10E1 CP 009H ; 10E4 JP Z,01169H ; 10E6 LD A,(06606H) ; 10E9 (6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 10EC JP NZ,01169H ; 10EE JR 01141H ; 10F1 LD A,(0645BH) ; 10F3 CP 00AH ; 10F6 JR Z,01169H ; 10F8 LD A,(06606H) ; 10FA (6606h)=3 => FICHAS =/=> PULSOS CP 001H ; 10FD JR NZ,01169H ; 10FF LD A,(0645BH) ; 1101 CP 00CH ; 1104 JR NZ,0110FH ; 1106 XOR A ; 1108 LD (06459H),A ; 1109 LD (0645AH),A ; 110C CALL 01062H ; 110F XOR A ; 1112 LD B,A ; 1113 LD A,(0662FH) ; 1114 CP 000H ; 1117 JR Z,0112AH ; 1119 CP 001H ; 111B JR Z,0112AH ; 111D CP 00BH ; 111F JR Z,0112AH ; 1121 CP 00CH ; 1123 JR Z,0112AH ; 1125 LD A,001H ; 1127 LD B,A ; 1129 LD A,(0645CH) ; 112A BIT 6,A ; 112D JR NZ,01134H ; 112F XOR A ; 1131 JR 01136H ; 1132 LD A,040H ; 1134 OR B ; 1136 LD (0662FH),A ; 1137 LD A,(0645BH) ; 113A CP 00BH ; 113D JR Z,01169H ; 113F LD A,(0662FH) ; 1141 OR A ; 1144 JR NZ,01169H ; 1145 LD HL,(0662CH) ; 1147 Fichas Restantes LD A,H ; 114A OR L ; 114B JR Z,01169H ; 114C LD BC,(0662CH) ; 114E Fichas Restantes LD (0661CH),BC ; 1152 Fichas Restantes LD HL,(06620H) ; 1156 Fichas Restantes ADD HL,BC ; 1159 LD (06620H),HL ; 115A Fichas Restantes XOR A ; 115D LD (06610H),A ; 115E LD (06611H),A ; 1161 CALL 01A6EH ; 1164 JR 01176H ; 1167 LD A,001H ; 1169 LD (06608H),A ; 116B CALL 011DDH ; 116E Write '????| PROBLEMA' LD A,005H ; 1171 LD (0641BH),A ; 1173 Timer B XOR A ; 1176 LD (06607H),A ; 1177 CALL 03C42H ; 117A (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 RET ; 117D LD A,(06452H) ; 117E CALL 011BAH ; 1181 LD A,(06451H) ; 1184 BIT 7,A ; 1187 JR NZ,011ACH ; 1189 LD A,(06451H) ; 118B OR A ; 118E JR Z,0119BH ; 118F LD B,002H ; 1191 CALL 013FBH ; 1193 Log A,B,(644Fh),(6606h) CALL 011D8H ; 1196 Write 'PROBLEMA | CUELGUE' JR 011B4H ; 1199 LD A,(06450H) ; 119B LD B,003H ; 119E CALL 013FBH ; 11A0 Log A,B,(644Fh),(6606h) CP 003H ; 11A3 JR Z,011ACH ; 11A5 CALL 011D8H ; 11A7 Write 'PROBLEMA | CUELGUE' JR 011B4H ; 11AA CALL 011ECH ; 11AC Write 'INUTILIZABLE | ' JR 011B4H ; 11AF CALL 011E2H ; 11B1 Write 'CREDITO AGOTADO | CUELGUE' LD A,005H ; 11B4 LD (0641BH),A ; 11B6 Timer B RET ; 11B9 OR A ; 11BA JR Z,011D7H ; 11BB RET PUSH AF ; 11BD CALL 011D8H ; 11BE Write 'PROBLEMA | CUELGUE' POP AF ; 11C1 LD B,001H ; 11C2 CALL 013FBH ; 11C4 Log A,B,(644Fh),(6606h) BIT 7,A ; 11C7 JR Z,011D7H ; 11C9 LD A,(0642DH) ; 11CB SET 1,A ; 11CE LD (0642DH),A ; 11D0 XOR A ; 11D3 LD (06435H),A ; 11D4 RET ; 11D7 CALL 00C24H ; 11D8 Write 'PROBLEMA | CUELGUE' JR 011F6H ; 11DB CALL 00C36H ; 11DD Write '????| PROBLEMA' JR 011F6H ; 11E0 CALL 00B3BH ; 11E2 Write 'CREDITO AGOTADO | CUELGUE'61=80h JR 011F6H ; 11E5 CALL 00B4DH ; 11E7 Write 'INUTILIZABLE | ' JR 011F6H ; 11EA CALL 00B4DH ; 11EC Write 'INUTILIZABLE | ' JR 011F6H ; 11EF CALL 00B6DH ; 11F1 Write 'TARJETA INVALIDA | CUELGUE' JR 011F6H ; 11F4 LD A,005H ; 11F6 LD (0641BH),A ; 11F8 Timer B LD A,(06607H) ; 11FB OR A ; 11FE JR Z,01208H ; 11FF LD A,001H ; 1201 LD (06608H),A ; 1203 JR 01210H ; 1206 LD A,001H ; 1208 LD (065EDH),A ; 120A CALL 03C42H ; 120D (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 RET ; 1210 LD A,(06606H) ; 1211 (6606h)=3 => FICHAS =/=> PULSOS CP 001H ; 1214 JR Z,0121CH ; 1216 CP 003H ; 1218 JR NZ,0122AH ; 121A CALL 03C26H ; 121C 2xIn(61h), Out(66h,13h), Out(67h,E6h) CALL 0122EH ; 121F CALL 03C42H ; 1222 (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 CALL 0129DH ; 1225 JR 0122DH ; 1228 CALL 011D8H ; 122A Write 'PROBLEMA | CUELGUE' RET ; 122D CALL 0125FH ; 122E LD A,(0642CH) ; 1231 BIT 3,A ; 1234 JR NZ,0125EH ; 1236 LD HL,06452H ; 1238 LD A,(HL) ; 123B (6452h) AND 0C4H ; 123C JR Z,01249H ; 123E LD A,(HL) ; 1240 (6452h) LD B,004H ; 1241 CALL 013FBH ; 1243 Log A,B,(644Fh),(6606h) CALL 011D8H ; 1246 Write 'PROBLEMA | CUELGUE' LD A,(06452H) ; 1249 (6452h) AND 0D6H ; 124C JR Z,01258H ; 124E LD B,A ; 1250 LD A,(0661BH) ; 1251 OR B ; 1254 LD (0661BH),A ; 1255 LD A,(06453H) ; 1258 LD (06616H),A ; 125B RET ; 125E XOR A ; 125F LD (06616H),A ; 1260 LD HL,06552H ; 1263 LD A,015H ; 1266 LD (HL),A ; 1268 INC HL ; 1269 LD A,(06614H) ; 126A LD (HL),A ; 126D CALL 03940H ; 126E Lectura de tarjeta? LD A,(0642CH) ; 1271 BIT 3,A ; 1274 JR NZ,0129CH ; 1276 LD A,(06450H) ; 1278 CP 052H ; 127B JR Z,01296H ; 127D LD B,020H ; 127F CALL 013FBH ; 1281 Log A,B,(644Fh),(6606h) CALL 011D8H ; 1284 Write 'PROBLEMA | CUELGUE' LD A,001H ; 1287 LD (065EDH),A ; 1289 LD A,(0642CH) ; 128C SET 3,A ; 128F LD (0642CH),A ; 1291 JR 0129CH ; 1294 LD A,(06456H) ; 1296 CALL 011BAH ; 1299 RET ; 129C XOR A ; 129D LD D,A ; 129E LD A,(06616H) ; 129F LD E,A ; 12A2 LD HL,(0660CH) ; 12A3 ADD HL,DE ; 12A6 LD (0660CH),HL ; 12A7 LD HL,(0660EH) ; 12AA ADD HL,DE ; 12AD LD (0660EH),HL ; 12AE LD HL,(06610H) ; 12B1 ADD HL,DE ; 12B4 LD (06610H),HL ; 12B5 LD HL,(0661CH) ; 12B8 Fichas Restantes OR A ; 12BB SBC HL,DE ; 12BC LD (0661CH),HL ; 12BE Fichas Restantes CALL 01A6EH ; 12C1 RET ; 12C4 LD A,001H ; 12C5 LD (06607H),A ; 12C7 (6607h)=01h LD A,(06614H) ; 12CA INC A ; 12CD INC A ; 12CE LD (06614H),A ; 12CF CALL 03C26H ; 12D2 2xIn(61h), Out(66h,13h), Out(67h,E6h) CALL 0125FH ; 12D5 CALL 03C42H ; 12D8 (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 LD A,(0642CH) ; 12DB BIT 3,A ; 12DE JR NZ,0134AH ; 12E0 LD A,(06452H) ; 12E2 AND 0C4H ; 12E5 JR Z,012F2H ; 12E7 LD A,(HL) ; 12E9 LD B,004H ; 12EA CALL 013FBH ; 12EC Log A,B,(644Fh),(6606h) CALL 011DDH ; 12EF Write '????| PROBLEMA' LD A,(06452H) ; 12F2 AND 0DEH ; 12F5 LD (0661BH),A ; 12F7 LD HL,06453H ; 12FA LD A,(HL) ; 12FD (6453h) LD B,A ; 12FE LD A,(06614H) ; 12FF SUB B ; 1302 LD B,A ; 1303 CP 000H ; 1304 JR NZ,01314H ; 1306 DEC (HL) ; 1308 DEC (HL) ; 1309 LD A,(06614H) ; 130A DEC A ; 130D DEC A ; 130E LD (06614H),A ; 130F JR 0133CH ; 1312 CP 001H ; 1314 JR NZ,01323H ; 1316 DEC (HL) ; 1318 LD A,(06614H) ; 1319 DEC A ; 131C DEC A ; 131D LD (06614H),A ; 131E JR 0133CH ; 1321 CP 002H ; 1323 JR NZ,0132DH ; 1325 LD A,(HL) ; 1327 LD (06614H),A ; 1328 JR 0133CH ; 132B LD A,(HL) ; 132D LD B,004H ; 132E CALL 013FBH ; 1330 Log A,B,(644Fh),(6606h) PUSH HL ; 1333 CALL 011DDH ; 1334 Write '????| PROBLEMA' POP HL ; 1337 LD A,(HL) ; 1338 LD (06614H),A ; 1339 LD A,(HL) ; 133C LD (06616H),A ; 133D LD (0661CH),A ; 1340 Fichas Restantes XOR A ; 1343 LD (0661DH),A ; 1344 CALL 0129DH ; 1347 XOR A ; 134A LD (06607H),A ; 134B RET ; 134E LD A,012H ; 134F LD (06552H),A ; 1351 CALL 03C26H ; 1354 2xIn(61h), Out(66h,13h), Out(67h,E6h) CALL 03940H ; 1357 Lectura de tarjeta? LD A,(06606H) ; 135A (6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 135D JR Z,0137AH ; 135F LD A,(0642CH) ; 1361 BIT 3,A ; 1364 JR NZ,01377H ; 1366 LD A,(06452H) ; 1368 AND 090H ; 136B LD B,A ; 136D LD A,(06454H) ; 136E AND 0C4H ; 1371 OR B ; 1373 LD (0661BH),A ; 1374 CALL 011BAH ; 1377 RET ; 137A LD A,014H ; 137B LD (06552H),A ; 137D CALL 03C26H ; 1380 2xIn(61h), Out(66h,13h), Out(67h,E6h) CALL 03940H ; 1383 Lectura de tarjeta? CALL 03C42H ; 1386 (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 RET ; 1389 LD A,018H ; 138A LD (06552H),A ; 138C LD B,000H ; 138F LD A,(06448H) ; 1391 OR A ; 1394 JR NZ,013FAH ; 1395 RET LD A,(0642CH) ; 1397 RES 3,A ; 139A LD (0642CH),A ; 139C LD A,(0642DH) ; 139F BIT 1,A ; 13A2 JR Z,013ADH ; 13A4 RES 1,A ; 13A6 LD (0642DH),A ; 13A8 LD B,002H ; 13AB LD A,(0642DH) ; 13AD BIT 3,A ; 13B0 JR Z,013BDH ; 13B2 RES 3,A ; 13B4 LD (0642DH),A ; 13B6 LD A,001H ; 13B9 OR B ; 13BB LD B,A ; 13BC LD A,(0662FH) ; 13BD AND 040H ; 13C0 LD C,A ; 13C2 LD A,(0661BH) ; 13C3 AND 040H ; 13C6 OR C ; 13C8 JR Z,013CFH ; 13C9 LD A,001H ; 13CB OR B ; 13CD LD B,A ; 13CE LD A,B ; 13CF LD (06553H),A ; 13D0 CALL 03C26H ; 13D3 2xIn(61h), Out(66h,13h), Out(67h,E6h) CALL 03940H ; 13D6 Lectura de tarjeta? CALL 03C42H ; 13D9 (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 LD A,(06450H) ; 13DC AND 080H ; 13DF JR Z,013EBH ; 13E1 LD A,(0642DH) ; 13E3 SET 1,A ; 13E6 LD (0642DH),A ; 13E8 LD A,(06450H) ; 13EB AND 040H ; 13EE JR Z,013FAH ; 13F0 RET LD A,(0642DH) ; 13F2 SET 3,A ; 13F5 LD (0642DH),A ; 13F7 RET ; 13FA PUSH AF ; 13FB Log A,B,(644Fh),(6606h) PUSH BC ; 13FC CALL 03FBCH ; 13FD Put Log Buffer LD A,B ; 1400 CALL 03FBCH ; 1401 Put Log Buffer LD A,(0644FH) ; 1404 CALL 03FBCH ; 1407 Put Log Buffer LD A,(06606H) ; 140A (6606h)=3 => FICHAS =/=> PULSOS LD B,A ; 140D LD A,050H ; 140E OR B ; 1410 CALL 03FBCH ; 1411 Put Log Buffer POP BC ; 1414 POP AF ; 1415 RET ; 1416 XOR A ; 1417 LD (065E6H),A ; 1418 CALL 03BAAH ; 141B (P40.6)=0 CALL 03BA1H ; 141E (P41.3) = 1 (Descuelga) LD HL,(06425H) ; 1421 Timer 3W LD A,H ; 1424 OR L ; 1425 JP Z,01673H ; 1426 LD A,(065EDH) ; 1429 OR A ; 142C JP NZ,01673H ; 142D CALL 00D9BH ; 1430 Refresca el Display XOR A ; 1433 LD HL,(0660AH) ; 1434 PUSH HL ; 1437 POP DE ; 1438 LD BC,(0660CH) ; 1439 SBC HL,BC ; 143D JP C,014B6H ; 143F JP Z,014B6H ; 1442 LD (06614H),HL ; 1445 LD DE,(0661CH) ; 1448 Fichas Restantes LD A,D ; 144C OR E ; 144D JR Z,0145DH ; 144E Write 'CREDITO AGOTADO | CUELGUE'61=80h XOR A ; 1450 SBC HL,DE ; 1451 JR C,01463H ; 1453 JR Z,01463H ; 1455 CALL 00BB8H ; 1457 Write ' | RETIRAR TARJETA' JP 01673H ; 145A CALL 00B3BH ; 145D Write 'CREDITO AGOTADO | CUELGUE'61=80h JP 01673H ; 1460 CALL 01211H ; 1463 LD A,(0642CH) ; 1466 AND 008H ; 1469 JP NZ,01673H ; 146B LD HL,(065D8H) ; 146E LD A,H ; 1471 OR L ; 1472 JR NZ,0147EH ; 1473 LD HL,(0661CH) ; 1475 Fichas Restantes LD A,H ; 1478 OR L ; 1479 JR Z,014ABH ; 147A JR 014B0H ; 147C LD BC,(0661CH) ; 147E Fichas Restantes LD DE,(065D6H) ; 1482 CALL 040B8H ; 1486 HL = BC Mod DE PUSH BC ; 1489 LD BC,(065D8H) ; 148A LD DE,0000AH ; 148E CALL 040B8H ; 1491 HL = BC Mod 10 LD D,B ; 1494 LD E,C ; 1495 POP HL ; 1496 CALL 04097H ; 1497 IX:IY = HL * DE PUSH IY ; 149A POP HL ; 149C LD A,H ; 149D OR L ; 149E JR NZ,014B0H ; 149F PUSH IX ; 14A1 POP HL ; 14A3 LD DE,(06421H) ; 14A4 Timer 1W ADD HL,DE ; 14A8 JR 014B3H ; 14A9 LD HL,00168H ; 14AB JR 014B3H ; 14AE LD HL,00E10H ; 14B0 LD (06427H),HL ; 14B3 Timer 4W LD A,(06606H) ; 14B6 (=6606h)=3 => FICHAS =/=> PULSOS OR A ; 14B9 JR Z,014E7H ; 14BA XOR A ; 14BC LD HL,(06620H) ; 14BD Fichas Restantes LD DE,(0660AH) ; 14C0 SBC HL,DE ; 14C4 JR C,014E7H ; 14C6 LD (0661EH),HL ; 14C8 Fichas Restantes XOR A ; 14CB LD HL,(06614H) ; 14CC LD A,(06616H) ; 14CF LD D,000H ; 14D2 LD E,A ; 14D4 SBC HL,DE ; 14D5 PUSH HL ; 14D7 POP DE ; 14D8 LD HL,(0661EH) ; 14D9 Fichas Restantes ADD HL,DE ; 14DC LD (0661EH),HL ; 14DD Fichas Restantes LD A,(0641BH) ; 14E0 Timer B OR A ; 14E3 CALL Z,00B1CH ; 14E4 Actualiza el indicador de Pulsos LD A,(06608H) ; 14E7 OR A ; 14EA JP NZ,01599H ; 14EB LD A,(065E6H) ; 14EE OR A ; 14F1 JP NZ,0151BH ; 14F2 LD A,(06606H) ; 14F5 (=6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 14F8 JP Z,0151BH ; 14FA LD HL,(06427H) ; 14FD Timer 4W LD A,H ; 1500 OR A ; 1501 JR NZ,0151BH ; 1502 LD A,L ; 1504 CP 01FH ; 1505 JR NC,0151BH ; 1507 LD A,(07C01H) ; 1509 BIT 2,A ; 150C JR Z,0151BH ; 150E CALL 00B7FH ; 1510 Write ' ??? PULSOS|OTRA TARJETA?' LD A,001H ; 1513 LD (065E8H),A ; 1515 LD (065E6H),A ; 1518 LD A,(065EBH) ; 151B OR A ; 151E JP Z,01599H ; 151F LD A,(06448H) ; 1522 OR A ; 1525 JR Z,01573H ; 1526 LD A,(065E7H) ; 1528 OR A ; 152B JR Z,01599H ; 152C CALL 01091H ; 152E XOR A ; 1531 LD HL,(06620H) ; 1532 Fichas Restantes LD DE,(0660AH) ; 1535 SBC HL,DE ; 1539 JR NC,01540H ; 153B LD HL,00000H ; 153D LD (0661EH),HL ; 1540 Fichas Restantes LD A,(0641BH) ; 1543 Timer B OR A ; 1546 CALL Z,00B1CH ; 1547 Actualiza el indicador de Pulsos LD A,000H ; 154A LD (065E7H),A ; 154C LD A,(06608H) ; 154F OR A ; 1552 JR NZ,0157DH ; 1553 LD A,001H ; 1555 CALL 03F5BH ; 1557 Put Buffer #7 (Internal Commands) XOR A ; 155A LD (065C4H),A ; 155B LD A,000H ; 155E LD (065EBH),A ; 1560 CALL 00D28H ; 1563 Borra la linea de abajo LD A,000H ; 1566 LD (065E6H),A ; 1568 LD HL,00E10H ; 156B LD (06427H),HL ; 156E Timer 4W JR 01599H ; 1571 CALL 00B9DH ; 1573 Write ' ??? PULSOS|NUEVA TARJETA?' LD A,001H ; 1576 LD (065E7H),A ; 1578 JR 01599H ; 157B LD A,(0662FH) ; 157D OR A ; 1580 JR Z,0158CH ; 1581 LD A,001H ; 1583 CALL 03F5BH ; 1585 Put Buffer #7 (Internal Commands) XOR A ; 1588 LD (065C4H),A ; 1589 CALL 00BB8H ; 158C Write ' | RETIRAR TARJETA' LD A,005H ; 158F LD (0641BH),A ; 1591 Timer B LD A,001H ; 1594 LD (065E6H),A ; 1596 LD A,(065C4H) ; 1599 OR A ; 159C JR Z,015C6H ; 159D LD A,(065B4H) ; 159F OR A ; 15A2 JR Z,015C6H ; 15A3 AND 080H ; 15A5 CALL NZ,0134FH ; 15A7 XOR A ; 15AA LD (0661CH),A ; 15AB Fichas Restantes LD (0661DH),A ; 15AE LD (065B4H),A ; 15B1 LD (065E8H),A ; 15B4 LD BC,(0662CH) ; 15B7 Fichas Restantes LD HL,(06620H) ; 15BB Fichas Restantes SBC HL,BC ; 15BE LD (06620H),HL ; 15C0 Fichas Restantes JP C,01673H ; 15C3 CALL 03DA3H ; 15C6 Get Key Pressed Carry On Error JP C,01655H ; 15C9 CP Cortar_Key ; 15CC JP NZ,01613H ; 15CE LD A,(07C01H) ; 15D1 BIT 3,A ; 15D4 JP Z,01673H ; 15D6 LD A,(065CDH) ; 15D9 OR A ; 15DC JP NZ,01673H ; 15DD LD A,(065C4H) ; 15E0 OR A ; 15E3 JP Z,01660H ; 15E4 LD A,(06606H) ; 15E7 (6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 15EA JP Z,01673H ; 15EC LD A,000H ; 15EF LD (065E2H),A ; 15F1 LD A,001H ; 15F4 LD (06623H),A ; 15F6 LD A,000H ; 15F9 LD (065DAH),A ; 15FB CALL 03B8FH ; 15FE (P41.3) = 0 (Cuelga) LD A,006H ; 1601 CALL 03F5BH ; 1603 Put Buffer #7 (Internal Commands) LD A,005H ; 1606 LD (0644BH),A ; 1608 LD A,010H ; 160B LD (065EAH),A ; 160D JP 0167DH ; 1610 CP '@' ; 1613 JR NZ,0164EH ; 1615 LD A,(065E8H) ; 1617 OR A ; 161A JP Z,01655H ; 161B CALL 00CFAH ; 161E Write ' ??? PULSOS | ESPERE POR FAVOR' LD A,000H ; 1621 LD (065E8H),A ; 1623 LD HL,(0661CH) ; 1626 Fichas Restantes LD (06614H),HL ; 1629 CALL 012C5H ; 162C LD A,(06608H) ; 162F OR A ; 1632 JP NZ,01646H ; 1633 LD A,000H ; 1636 LD (065E7H),A ; 1638 LD A,001H ; 163B LD (065EBH),A ; 163D CALL 00C06H ; 1640 Write 'PULSOS | RETIRAR TARJETA' JP 01655H ; 1643 LD A,001H ; 1646 LD (065E6H),A ; 1648 JP 01655H ; 164B CP VOL_KEY ; 164E JR NZ,01655H ; 1650 CALL 00D9BH ; 1652 Refresca el Display LD A,(065BBH) ; 1655 Buffer #2 Counter (Numero Marcado) OR A ; 1658 JR NZ,01660H ; 1659 LD A,001H ; 165B LD (065E2H),A ; 165D LD A,(0641BH) ; 1660 Timer B CP 001H ; 1663 JR NZ,0166DH ; 1665 CALL 00D28H ; 1667 Borra la linea de abajo CALL 00B1CH ; 166A Actualiza el indicador de Pulsos CALL 03BB3 ; 166D Espera IRQ y vuelve JP 01421H ; 1670 LD A,008H ; 1673 CALL 03F5BH ; 1675 Put Buffer #7 (Internal Commands) LD A,007H ; 1678 LD (0644BH),A ; 167A RET ; 167D LD A,001H ; 167E LD (06675H),A ; 1680 LD A,(0642CH) ; 1683 SET 1,A ; 1686 LD (0642CH),A ; 1688 LD A,(0642EH) ; 168B CP 000H ; 168E CALL NZ,028B7H ; 1690 LD A,001H ; 1693 LD (065EDH),A ; 1695 LD HL,00000H ; 1698 LD (06650H),HL ; 169B LD A,020H ; 169E LD (0643AH),A ; 16A0 CALL 00C61H ; 16A3 Write 'PRUEBA TECLADO' LD A,014H ; 16A6 LD (06419H),A ; 16A8 Timer B TIMEOUT Para prueba de teclado CALL 03BB3H ; 16AB Espera IRQ y vuelve LD A,(065CDH) ; 16AE ; Flag de tecla inic. OR A ; 16B1 JP NZ,01716H ; 16B2 LD A,(06419H) ; 16B5 Timer B OR A ; 16B8 JR Z,016D1H ; 16B9 CALL 03DA3H ; 16BB Get Key Pressed Carry On Error JR C,016ABH ; 16BE LD (0643AH),A ; 16C0 CP 'A' ; 16C3 JR Z,016D1H ; 16C5 LD A,014H ; 16C7 ; valor para el TIMER de teclado LD (06419H),A ; 16C9 Timer B CALL 00C61H ; 16CC Write 'PRUEBA TECLADO' JR 016ABH ; 16CF LD B,010H ; 16D1 LD A,020H ; 16D3 LD HL,065F0H ; 16D5 LD (HL),A ; 16D8 INC HL ; 16D9 DJNZ 016D8H ; 16DA (65F0..6600) = ' ' CALL 00C77H ; 16DC Write 'PRUEBA ESPIA ?' LD HL,(0667AH) ; 16DF Puntero al Proximo char del Log Buffer CALL 03BB3H ; 16E2 Espera IRQ y vuelve LD A,(065CDH) ; 16E5 OR A ; 16E8 JP NZ,01716H ; 16E9 CALL 03DA3H ; 16EC Get Key Pressed Carry On Error JR C,016E2H ; 16EF CP 'A' ; 16F1 JR Z,016FFH ; 16F3 CALL 03FE4H ; 16F5 Makes 65F2h=4-Hexs String of (HL..HL+3) PUSH HL ; 16F8 CALL 00C77H ; 16F9 Write 'PRUEBA ESPIA ?' POP HL ; 16FC JR 016E2H ; 16FD CALL 00C8EH ; 16FF Write 'INICIALIZACION ?' CALL 03BB3H ; 1702 Espera IRQ y vuelve LD A,(065CDH) ; 1705 OR A ; 1708 JP NZ,01716H ; 1709 CALL 03DA3H ; 170C Get Key Pressed Carry On Error JR C,01702H ; 170F CP 'A' ; 1711 CALL Z,02A56H ; 1713 LD A,000H ; 1716 LD (06675H),A ; 1718 RET ; 171B LD B,E ; 171C LD C,C ; 171D ; ORG 0171FH LD A,(06606H) ; 171F (=6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 1722 JR Z,01778H ; 1724 LD A,(06419H) ; 1726 Timer B LD B,A ; 1729 LD A,(065C4H) ; 172A OR B ; 172D JR NZ,01755H ; 172E LD A,001H ; 1730 LD (065EDH),A ;3 1732 LD HL,(0171CH) ; 1735 LD (065B8H),HL ; 1738 (65B8) = 'CI' LD A,005H ; 173B LD (06419H) ,A ; 173D Timer B CALL 00ADFH ; 1740 Write '( ) FUERA | DE SERVICIO' LD A,(06419H) ; 1743 Timer B OR A ; 1746 JR Z,01755H ; 1747 LD A,(06449H) ; 1749 OR A ; 174C JR Z,01755H ; 174D LD A,(06448H) ; 174F OR A ; 1752 JR NZ,0174 3H ; 1753 LD A,(065C4H) ; 1755 OR A ; 1758 JR Z,0177DH ; 1759 LD A,(065B4H) ; 175B OR A ; 175E JR NZ,01769H ; 175F LD A,(0662FH) ; 1761 OR A ; 1764 JR Z,01778H ; 1765 JR 0176EH ; 1767 AND 080H ; 1769 CALL NZ,0134FH ; 176B CALL 00B6DH ; 176E Write 'TARJETA INVALIDA | CUELGUE' LD A,001H ; 1771 LD (065EDH),A ; 1773 JR 0177DH ; 1776 LD A,001H ; 1778 LD (065DBH),A ; 177A LD A,(065EAH) ; 177D CP 010H ; 1780 JR NZ,01789H ; 1782 CALL 017E1H ; 1784 JR 01799H ; 1787 CP 016H ; 1789 JR NZ,01792H ; 178B CALL 0186FH ; 178D JR 01799H ; 1790 CP 015H ; 1792 JR NZ,01799H ; 1794 CALL 018C8H ; 1796 LD A,(065CDH) ; 1799 CP 001H ; 179C JR Z,017BFH ; 179E LD A,(065C9H) ; 17A0 OR A ; 17A3 JR Z,017ABH ; 17A4 CALL 00CBAH ; 17A6 Write 'NO ACCESIBLE | CUELGUE' JR 017BFH ; 17A9 LD A,(065EDH) ; 17AB CP 001H ; 17AE JR Z,017BFH ; 17B0 LD A,(0644BH) ; 17B2 CP 005H ; 17B5 JP Z,0171FH ; 17B7 CALL 03BC6H ; 17BA No tone on DTMF chip's output JR 017E0H ; 17BD CALL 03BC6H ; 17BF No tone on DTMF chip's output LD A,007H ; 17C2 LD (0644BH),A ; 17C4 LD A,004H ; 17C7 LD (06419H),A ; 17C9 Timer B LD A,(06419H) ; 17CC Timer B OR A ; 17CF JR Z,017DBH ; 17D0 LD A,(06590H) ; 17D2 OR A ; 17D5 JR NZ,017CCH ; 17D6 LD (065BBH),A ; 17D8 Buffer #2 Counter (Numero Marcado) LD A,008H ; 17DB CALL 03F5BH ; 17DD Put Buffer #7 (Internal Commands) RET ; 17E0 XOR A ; 17E1 LD (065C7H),A ; 17E2 LD (065C8H),A ; 17E5 LD (065DEH),A ; 17E8 LD (065DFH),A ; 17EB CALL 03D14H ; 17EE CALL 03B98H ; 17F1 (P40.6) = 1 LD A,(06606H) ; 17F4 (=6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 17F7 JR NZ,0180EH ; 17F9 CALL 03BC6H ; 17FB No tone on DTMF chip's output LD A,015H ; 17FE LD (065EAH),A ; 1800 LD A,000H ; 1803 LD (06664H),A ; 1805 CALL 01975H ; 1808 JP 0186EH ; 180B CALL 03BBFH ; 180E Play 701.3 Hz on DTMF chip LD A,016H ; 1811 LD (065EAH),A ; 1813 LD A,014H ; 1816 LD (06419H),A ; 1818 Timer B DI ; 181B LD HL,061E1H ; 181C LD (061F7H),HL ; 181F INC HL ; 1822 LD (061F5H),HL ; 1823 XOR A ; 1826 LD (065BBH),A ; 1827 Buffer #2 Counter (Numero Marcado) LD (065C5H),A ; 182A EI ; 182D LD A,000H ; 182E LD (06600H),A ; 1830 LD B,00AH ; 1833 XOR A ; 1835 LD HL,06665H ; 1836 LD (HL),A ; 1839 INC HL ; 183A DJNZ 01839H ; 183B LD (0666FH),A ; 183D LD A,(06606H) ; 1840 (=6606h)=3 => FICHAS =/=> PULSOS CP 002H ; 1843 JR NZ,01852H ; 1845 LD A,(06622H) ; 1847 OR A ; 184A JR Z,01852H ; 184B CALL 0199DH ; 184D JR 0186BH ; 1850 LD A,(06623H) ; 1852 OR A ; 1855 JR Z,01862H ; 1856 LD A,(06423H) ; 1858 Timer 2W LD B,A ; 185B LD A,(06424H) ; 185C OR B ; 185F JR NZ,0186BH ; 1860 XOR A ; 1862 LD (06664H),A ; 1863 LD A,001H ; 1866 LD (06623H),A ; 1868 CALL 00BEBH ; 186B Write 'PULSOS | MARQUE EL NUMERO' RET ; 186E LD A,(065BAH) ; 186F Buffer #1 Counter OR A ; 1872 JR Z,018B9H ; 1873 CALL 03DA3H ; 1875 Get Key Pressed Carry On Error LD (0643AH),A ; 1878 CP '>' ; 187B JR NZ,0188CH ; 187D LD A,(06606H) ; 187F (6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 1882 JR Z,018BFH ; 1884 CALL 0199DH ; 1886 JP 018C7H ; 1889 CP 039H ; 188C JR NC,018B2H ; 188E Key > '9' Compare with another Key CP 030H ; 1890 JR C,018B2H ; 1892 Key < '0' Compare with another Key CALL 03BC6H ; 1894 No tone on DTMF chip's output LD A,015H ; 1897 LD (065EAH),A ; 1899 LD A,(0643AH) ; 189C AND 00FH ; 189F LD (065F0H),A ; 18A1 CALL 03E02H ; 18A4 Put Buffer #2 (Numero Marcado) LD A,001H ; 18A7 LD (06600H),A ; 18A9 CALL 00AFDH ; 18AC Write 'NUMERO MARCADO | el numero' JP 018C7H ; 18AF CP 'B' ; 18B2 JR NZ,018B9H ; 18B4 CALL 00BEBH ; 18B6 Write 'PULSOS | MARQUE EL NUMERO' LD A,(06419H) ; 18B9 Timer B OR A ; 18BC JR Z,018C4H ; 18BD CALL 03BB3H ; 18BF Espera IRQ y vuelve JR 018C7H ; 18C2 CALL 01A3AH ; 18C4 RET ; 18C7 LD HL,(06425H) ; 18C8 Timer 3W LD A,H ; 18CB OR L ; 18CC JP Z,0196AH ; 18CD LD A,(06606H) ; 18D0 (=6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 18D3 JR Z,018FDH ; 18D5 CALL 01A16H ; 18D7 LD A,(065C4H) ; 18DA OR A ; 18DD JR Z,01909H ; 18DE LD A,(065B4H) ; 18E0 OR A ; 18E3 JR NZ,018EEH ; 18E4 LD A,(0662FH) ; 18E6 OR A ; 18E9 JR Z,018FDH ; 18EA JR 018F3H ; 18EC AND 080H ; 18EE CALL NZ,0134FH ; 18F0 CALL 00B6DH ; 18F3 Write 'TARJETA INVALIDA | CUELGUE' LD A,001H ; 18F6 LD (065EDH),A ; 18F8 JR 01909H ; 18FB LD A,(065C7H) ; 18FD CP 001H ; 1900 JR NZ,01909H ; 1902 CALL 019C5H ; 1904 JR 01974H ; 1907 LD A,(065BAH) ; 1909 Buffer #1 Counter OR A ; 190C JR Z,01971H ; 190D CALL 03DA3H ; 190F Get Key Pressed Carry On Error LD (0643AH),A ; 1912 CP 039H ; 1915 JR NC,01929H ; 1917 CP 030H ; 1919 JR C,01929H ; 191B LD A,(06622H) ; 191D OR A ; 1920 JR NZ,01971H ; 1921 CALL 01975H ; 1923 JP 01974H ; 1926 CP Cortar_Key ; 1929 JR NZ,01963H ; 192B LD A,(06606H) ; 192D (6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 1930 JR Z,0196AH ; 1932 LD A,010H ; 1934 LD (065EAH),A ; 1936 LD A,004H ; 1939 LD (06419H),A ; 193B Timer B LD A,(06419H) ; 193E Timer B OR A ; 1941 JR Z,0196AH ; 1942 LD A,(065EDH) ; 1944 OR A ; 1947 JR NZ,0196AH ; 1948 LD A,(06590H) ; 194A OR A ; 194D JR NZ,0193EH ; 194E LD (065BBH),A ; 1950 Buffer #2 Counter (Numero Marcado) LD A,(065C5H) ; 1953 OR A ; 1956 JR Z,01974H ; 1957 CALL 03B8FH ; 1959 (P41.3) = 0 (Cuelga) LD A,006H ; 195C CALL 03F5BH ; 195E Put Buffer #7 (Internal Commands) JR 01974H ; 1961 CP VOL_KEY ; 1963 CALL Z,00AFDH ; 1965 Write 'NUMERO MARCADO | el numero' JR 01971H ; 1968 LD A,001H ; 196A LD (065EDH),A ; 196C JR 01974H ; 196F CALL 03BB3H ; 1971 Espera IRQ y vuelve RET ; 1974 LD A,(06600H) ; 1975 INC A ; 1978 CP 011H ; 1979 JR NC,0199CH ; 197B LD (06600H),A ; 197D LD A,(0643AH) ; 1980 AND 00FH ; 1983 LD (0643AH),A ; 1985 CALL 03E02H ; 1988 Put Buffer #2 (Numero Marcado) LD HL,065EFH ; 198B LD B,000H ; 198E LD A,(06600H) ; 1990 LD C,A ; 1993 ADD HL,BC ; 1994 LD A,(0643AH) ; 1995 LD (HL),A ; 1998 CALL 00AFDH ; 1999 Write 'NUMERO MARCADO | el numero' RET ; 199C LD A,(06664H) ; 199D OR A ; 19A0 JR Z,019C4H ; 19A1 LD A,015H ; 19A3 LD (065EAH),A ; 19A5 LD HL,06654H ; 19A8 LD DE,065F0H ; 19AB LD A,(06664H) ; 19AE LD (06600H),A ; 19B1 LD B,A ; 19B4 LD A,(HL) ; 19B5 LD (DE),A ; 19B6 CALL 03E02H ; 19B7 Put Buffer #2 (Numero Marcado) INC HL ; 19BA INC DE ; 19BB DJNZ 019B5H ; 19BC CALL 03BC6H ; 19BE No tone on DTMF chip's output CALL 00AFDH ; 19C1 Write 'NUMERO MARCADO | el numero' RET ; 19C4 LD DE,(065D2H) ; 19C5 LD HL,(0661EH) ; 19C9 Fichas Restantes XOR A ; 19CC SBC HL,DE ; 19CD JR NC,019D6H ; 19CF CALL 01A2FH ; 19D1 JR 01A15H ; 19D4 LD A,(06606H) ; 19D6 (=6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 19D9 JR Z,01A00H ; 19DB LD HL,(0660AH) ; 19DD LD DE,(065D2H) ; 19E0 XOR A ; 19E4 ADD HL,DE ; 19E5 LD (0660AH),HL ; 19E6 LD BC,(065D4H) ; 19E9 LD DE,0000AH ; 19ED CALL 040B8H ; 19F0 HL = BC Mod DE LD (06421H),BC ; 19F3 Timer 1W LD (065DEH),HL ; 19F7 CALL 00B1CH ; 19FA Actualiza el indicador de Pulsos CALL 00D28H ; 19FD Borra la linea de abajo LD A,006H ; 1A00 LD (0644BH),A ; 1A02 CALL 01A16H ; 1A05 LD DE,00E11H ; 1A08 LD (06427H),DE ; 1A0B Timer 4W LD HL,00000H ; 1A0F LD (0660EH),HL ; 1A12 RET ; 1A15 LD A,(06600H) ; 1A16 LD (06664H),A ; 1A19 LD B,000H ; 1A1C LD C,A ; 1A1E LD HL,065F0H ; 1A1F LD DE,06654H ; 1A22 LDIR ; 1A25 LD DE,00E11H ; 1A27 LD (06423H),DE ; 1A2A Timer 2W RET ; 1A2E PUSH AF ; 1A2F LD A,001H ; 1A30 LD (065EDH),A ; 1A32 CALL 00CBAH ; 1A35 Write 'NO ACCESIBLE | CUELGUE' POP AF ; 1A38 RET ; 1A39 PUSH AF ; 1A3A LD A,001H ; 1A3B LD (065EDH),A ; 1A3D CALL 00C24H ; 1A40 Write 'PROBLEMA | CUELGUE' POP AF ; 1A43 RET ; 1A44 LD HL,02614H ; 1A45 LD (06031H),HL ; 1A48 CALL 02200H ; 1A4B Decode Memory ¨¨¨??? LD HL,0604DH ; 1A4E LD DE,060CDH ; 1A51 LD BC,00080H ; 1A54 LDIR ; 1A57 LD HL,0261CH ; 1A59 LD (06031H),HL ; 1A5C CALL 02200H ; 31A5F Decode Memory ¨¨¨??? LD HL,0604DH ; 1A62 LD DE,0614DH ; 1A65 LD BC,00080H ; 1A68 LDIR ; 1A6B RET ; 1A6D LD DE,06029H ; 1A6E LD HL,06610H ; 1A71 LD B,(HL) ; 1A74 INC HL ; 1A75 LD A,(HL) ; 1A76 LD (DE),A ; 1A77 INC DE ; 1A78 LD A,B ; 1A79 LD (DE),A ; 1A7A INC DE ; 1A7B LD HL,065B5H ; 1A7C LD BC,00003H ; 1A7F LDIR ; 1A82 LD HL,065B5H ; 1A84 LD BC,00003H ; 1A87 LDIR ; 1A8A DEC HL ; 1A8C LD A,(HL) ; 1A8D BIT 0,A ; 1A8E JR NZ,01A97H ; 1A90 LD HL,060CDH ; 1A92 JR 01A9AH ; 1A95 LD HL,0614DH ; 1A97 LD DE,0604DH ; 1A9A LD BC,00080H ; 1A9D LDIR ; 1AA0 CALL 01AB4H ; 1AA2 LD A,(06030H) ; 1AA5 LD HL,(06610H) ; 1AA8 DI ; 1AAB LD (06619H),A ; 1AAC LD (06612H),HL ; 1AAF EI ; 1AB2 RET ; 1AB3 CALL 01AE0H ; 1AB4 LD B,010H ; 1AB7 LD HL,0604DH ; 1AB9 LD (06031H),HL ; 1ABC PUSH BC ; 1ABF CALL 01D0DH ; 1AC0 LD IX,0603DH ; 1AC3 LD HL,(06031H) ; 1AC7 CALL 01FD5H ; 1ACA LD (06031H),HL ; 1ACD CALL 02016H ; 1AD0 CALL 02097H ; 1AD3 CALL 021ACH ; 1AD6 POP BC ; 1AD9 DJNZ 01ABFH ; 1ADA CALL 01DB2H ; 1ADC RET ; 1ADF LD IX,06029H ; 1AE0 LD IY,06035H ; 1AE4 XOR A ; 1AE8 BIT 6,(IX+000H) ; 1AE9 JR Z,01AF1H ; 1AED OR 001H ; 1AEF BIT 6,(IX+001H) ; 1AF1 JR Z,01AF9H ; 1AF5 OR 002H ; 1AF7 BIT 6,(IX+002H) ; 1AF9 JR Z,01B01H ; 1AFD OR 004H ; 1AFF BIT 6,(IX+003H) ; 1B01 JR Z,01B09H ; 1B05 OR 008H ; 1B07 BIT 6,(IX+004H) ; 1B09 JR Z,01B11H ; 1B0D OR 010H ; 1B0F BIT 6,(IX+005H) ; 1B11 JR Z,01B19H ; 1B15 OR 020H ; 1B17 BIT 6,(IX+006H) ; 1B19 JR Z,01B21H ; 1B1D OR 040H ; 1B1F BIT 6,(IX+007H) ; 1B21 JR Z,01B29H ; 1B25 OR 080H ; 1B27 LD (IY+000H),A ; 1B29 XOR A ; 1B2C BIT 4,(IX+000H) ; 1B2D JR Z,01B35H ; 1B31 OR 001H ; 1B33 BIT 4,(IX+001H) ; 1B35 JR Z,01B3DH ; 1B39 OR 002H ; 1B3B BIT 4,(IX+002H) ; 1B3D JR Z,01B45H ; 1B41 OR 004H ; 1B43 BIT 4,(IX+003H) ; 1B45 JR Z,01B4DH ; 1B49 OR 008H ; 1B4B BIT 4,(IX+004H) ; 1B4D JR Z,01B55H ; 1B51 OR 010H ; 1B53 BIT 4,(IX+005H) ; 1B55 JR Z,01B5DH ; 1B59 OR 020H ; 1B5B BIT 4,(IX+006H) ; 1B5D JR Z,01B65H ; 1B61 OR 040H ; 1B63 BIT 4,(IX+007H) ; 1B65 JR Z,01B6DH ; 1B69 OR 080H ; 1B6B LD (IY+001H),A ; 1B6D XOR A ; 1B70 BIT 2,(IX+000H) ; 1B71 JR Z,01B79H ; 1B75 OR 001H ; 1B77 BIT 2,(IX+001H) ; 1B79 JR Z,01B81H ; 1B7D OR 002H ; 1B7F BIT 2,(IX+002H) ; 1B81 JR Z,01B89H ; 1B85 OR 004H ; 1B87 BIT 2,(IX+003H) ; 1B89 JR Z,01B91H ; 1B8D OR 008H ; 1B8F BIT 2,(IX+004H) ; 1B91 JR Z,01B99H ; 1B95 OR 010H ; 1B97 BIT 2,(IX+005H) ; 1B99 JR Z,01BA1H ; 1B9D OR 020H ; 1B9F BIT 2,(IX+006H) ; 1BA1 JR Z,01BA9H ; 1BA5 OR 040H ; 1BA7 BIT 2,(IX+007H) ; 1BA9 JR Z,01BB1H ; 1BAD OR 080H ; 1BAF LD (IY+002H),A ; 1BB1 XOR A ; 1BB4 BIT 0,(IX+000H) ; 1BB5 JR Z,01BBDH ; 1BB9 OR 001H ; 1BBB BIT 0,(IX+001H) ; 1BBD JR Z,01BC5H ; 1BC1 OR 002H ; 1BC3 BIT 0,(IX+002H) ; 1BC5 JR Z,01BCDH ; 1BC9 OR 004H ; 1BCB BIT 0,(IX+003H) ; 1BCD JR Z,01BD5H ; 1BD1 OR 008H ; 1BD3 BIT 0,(IX+004H) ; 1BD5 JR Z,01BDDH ; 1BD9 OR 010H ; 1BDB BIT 0,(IX+005H) ; 1BDD JR Z,01BE5H ; 1BE1 OR 020H ; 1BE3 BIT 0,(IX+006H) ; 1BE5 JR Z,01BEDH ; 1BE9 OR 040H ; 1BEB BIT 0,(IX+007H) ; 1BED JR Z,01BF5H ; 1BF1 OR 080H ; 1BF3 LD (IY+003H),A ; 1BF5 LD IY,06039H ; 1BF8 XOR A ; 1BFC BIT 7,(IX+000H) ; 1BFD JR Z,01C05H ; 1C01 OR 001H ; 1C03 BIT 7,(IX+001H) ; 1C05 JR Z,01C0DH ; 1C09 OR 002H ; 1C0B BIT 7,(IX+002H) ; 1C0D JR Z,01C15H ; 1C11 OR 004H ; 1C13 BIT 7,(IX+003H) ; 1C15 JR Z,01C1DH ; 1C19 OR 008H ; 1C1B BIT 7,(IX+004H) ; 1C1D JR Z,01C25H ; 1C21 OR 010H ; 1C23 BIT 7,(IX+005H) ; 1C25 JR Z,01C2DH ; 1C29 OR 020H ; 1C2B BIT 7,(IX+006H) ; 1C2D JR Z,01C35H ; 1C31 OR 040H ; 1C33 BIT 7,(IX+007H) ; 1C35 JR Z,01C3DH ; 1C39 OR 080H ; 1C3B LD (IY+000H),A ; 1C3D XOR A ; 1C40 BIT 5,(IX+000H) ; 1C41 JR Z,01C49H ; 1C45 OR 001H ; 1C47 BIT 5,(IX+001H) ; 1C49 JR Z,01C51H ; 1C4D OR 002H ; 1C4F BIT 5,(IX+002H) ; 1C51 JR Z,01C59H ; 1C55 OR 004H ; 1C57 BIT 5,(IX+003H) ; 1C59 JR Z,01C61H ; 1C5D OR 008H ; 1C5F BIT 5,(IX+004H) ; 1C61 JR Z,01C69H ; 1C65 OR 010H ; 1C67 BIT 5,(IX+005H) ; 1C69 JR Z,01C71H ; 1C6D OR 020H ; 1C6F BIT 5,(IX+006H) ; 1C71 JR Z,01C79H ; 1C75 OR 040H ; 1C77 BIT 5,(IX+007H) ; 1C79 JR Z,01C81H ; 1C7D OR 080H ; 1C7F LD (IY+001H),A ; 1C81 XOR A ; 1C84 BIT 3,(IX+000H) ; 1C85 JR Z,01C8DH ; 1C89 OR 001H ; 1C8B BIT 3,(IX+001H) ; 1C8D JR Z,01C95H ; 1C91 OR 002H ; 1C93 BIT 3,(IX+002H) ; 1C95 JR Z,01C9DH ; 1C99 OR 004H ; 1C9B BIT 3,(IX+003H) ; 1C9D JR Z,01CA5H ; 1CA1 OR 008H ; 1CA3 BIT 3,(IX+004H) ; 1CA5 JR Z,01CADH ; 1CA9 OR 010H ; 1CAB BIT 3,(IX+005H) ; 1CAD JR Z,01CB5H ; 1CB1 OR 020H ; 1CB3 BIT 3,(IX+006H) ; 1CB5 JR Z,01CBDH ; 1CB9 OR 040H ; 1CBB BIT 3,(IX+007H) ; 1CBD JR Z,01CC5H ; 1CC1 OR 080H ; 1CC3 LD (IY+002H),A ; 1CC5 XOR A ; 1CC8 BIT 1,(IX+000H) ; 1CC9 JR Z,01CD1H ; 1CCD OR 001H ; 1CCF BIT 1,(IX+001H) ; 1CD1 JR Z,01CD9H ; 1CD5 OR 002H ; 1CD7 BIT 1,(IX+002H) ; 1CD9 JR Z,01CE1H ; 1CDD OR 004H ; 1CDF BIT 1,(IX+003H) ; 1CE1 JR Z,01CE9H ; 1CE5 OR 008H ; 1CE7 BIT 1,(IX+004H) ; 1CE9 JR Z,01CF1H ; 1CED OR 010H ; 1CEF BIT 1,(IX+005H) ; 1CF1 JR Z,01CF9H ; 1CF5 OR 020H ; 1CF7 BIT 1,(IX+006H) ; 1CF9 JR Z,01D01H ; 1CFD OR 040H ; 1CFF BIT 1,(IX+007H) ; 1D01 JR Z,01D09H ; 1D05 OR 080H ; 1D07 LD (IY+003H),A ; 1D09 RET ; 1D0C LD IX,06039H ; 1D0D LD IY,0603DH ; 1D11 LD C,(IX+000H) ; 1D15 LD A,C ; 1D18 AND 01FH ; 1D19 SLA A ; 1D1B BIT 7,(IX+001H) ; 1D1D JR Z,01D25H ; 1D21 OR 001H ; 1D23 LD (IY+001H),A ; 1D25 LD A,C ; 1D28 AND 0F8H ; 1D29 SRL A ; 1D2B SRL A ; 1D2D SRL A ; 1D2F BIT 0,(IX+003H) ; 1D31 JR Z,01D39H ; 1D35 OR 020H ; 1D37 LD (IY+000H),A ; 1D39 LD C,(IX+001H) ; 1D3C LD A,C ; 1D3F AND 01FH ; 1D40 SLA A ; 1D42 BIT 7,(IX+002H) ; 1D44 JR Z,01D4CH ; 1D48 OR 001H ; 1D4A LD (IY+003H),A ; 1D4C LD A,C ; 1D4F AND 0F8H ; 1D50 SRL A ; 1D52 SRL A ; 1D54 SRL A ; 1D56 BIT 0,(IX+000H) ; 1D58 JR Z,01D60H ; 1D5C OR 020H ; 1D5E LD (IY+002H),A ; 1D60 LD C,(IX+002H) ; 1D63 LD A,C ; 1D66 AND 01FH ; 1D67 SLA A ; 1D69 BIT 7,(IX+003H) ; 1D6B JR Z,01D73H ; 1D6F OR 001H ; 1D71 LD (IY+005H),A ; 1D73 LD A,C ; 1D76 AND 0F8H ; 1D77 SRL A ; 1D79 SRL A ; 1D7B SRL A ; 1D7D BIT 0,(IX+001H) ; 1D7F JR Z,01D87H ; 1D83 OR 020H ; 1D85 LD (IY+004H),A ; 1D87 LD C,(IX+003H) ; 1D8A LD A,C ; 1D8D AND 01FH ; 1D8E SLA A ; 1D90 BIT 7,(IX+000H) ; 1D92 JR Z,01D9AH ; 1D96 OR 001H ; 1D98 LD (IY+007H),A ; 1D9A LD A,C ; 1D9D AND 0F8H ; 1D9E SRL A ; 1DA0 SRL A ; 1DA2 SRL A ; 1DA4 BIT 0,(IX+002H) ; 1DA6 JR Z,01DAEH ; 1DAA OR 020H ; 1DAC LD (IY+006H),A ; 1DAE RET ; 1DB1 LD HL,06029H ; 1DB2 LD IX,06035H ; 1DB5 LD IY,06039H ; 1DB9 XOR A ; 1DBD BIT 0,(IY+003H) ; 1DBE JR Z,01DC6H ; 1DC2 OR 001H ; 1DC4 BIT 0,(IX+003H) ; 1DC6 JR Z,01DCEH ; 1DCA OR 002H ; 1DCC BIT 0,(IY+002H) ; 1DCE JR Z,01DD6H ; 1DD2 OR 004H ; 1DD4 BIT 0,(IX+002H) ; 1DD6 JR Z,01DDEH ; 1DDA OR 008H ; 1DDC BIT 0,(IY+001H) ; 1DDE JR Z,01DE6H ; 1DE2 OR 010H ; 1DE4 BIT 0,(IX+001H) ; 1DE6 JR Z,01DEEH ; 1DEA OR 020H ; 1DEC BIT 0,(IY+000H) ; 1DEE JR Z,01DF6H ; 1DF2 OR 040H ; 1DF4 BIT 0,(IX+000H) ; 1DF6 JR Z,01DFEH ; 1DFA OR 080H ; 1DFC LD (HL),A ; 1DFE INC HL ; 1DFF XOR A ; 1E00 BIT 1,(IY+003H) ; 1E01 JR Z,01E09H ; 1E05 OR 001H ; 1E07 BIT 1,(IX+003H) ; 1E09 JR Z,01E11H ; 1E0D OR 002H ; 1E0F BIT 1,(IY+002H) ; 1E11 JR Z,01E19H ; 1E15 OR 004H ; 1E17 BIT 1,(IX+002H) ; 1E19 JR Z,01E21H ; 1E1D OR 008H ; 1E1F BIT 1,(IY+001H) ; 1E21 JR Z,01E29H ; 1E25 OR 010H ; 1E27 BIT 1,(IX+001H) ; 1E29 JR Z,01E31H ; 1E2D OR 020H ; 1E2F BIT 1,(IY+000H) ; 1E31 JR Z,01E39H ; 1E35 OR 040H ; 1E37 BIT 1,(IX+000H) ; 1E39 JR Z,01E41H ; 1E3D OR 080H ; 1E3F LD (HL),A ; 1E41 INC HL ; 1E42 XOR A ; 1E43 BIT 2,(IY+003H) ; 1E44 JR Z,01E4CH ; 1E48 OR 001H ; 1E4A BIT 2,(IX+003H) ; 1E4C JR Z,01E54H ; 1E50 OR 002H ; 1E52 BIT 2,(IY+002H) ; 1E54 JR Z,01E5CH ; 1E58 OR 004H ; 1E5A BIT 2,(IX+002H) ; 1E5C JR Z,01E64H ; 1E60 OR 008H ; 1E62 BIT 2,(IY+001H) ; 1E64 JR Z,01E6CH ; 1E68 OR 010H ; 1E6A BIT 2,(IX+001H) ; 1E6C JR Z,01E74H ; 1E70 OR 020H ; 1E72 BIT 2,(IY+000H) ; 1E74 JR Z,01E7CH ; 1E78 OR 040H ; 1E7A BIT 2,(IX+000H) ; 1E7C JR Z,01E84H ; 1E80 OR 080H ; 1E82 LD (HL),A ; 1E84 INC HL ; 1E85 XOR A ; 1E86 BIT 3,(IY+003H) ; 1E87 JR Z,01E8FH ; 1E8B OR 001H ; 1E8D BIT 3,(IX+003H) ; 1E8F JR Z,01E97H ; 1E93 OR 002H ; 1E95 BIT 3,(IY+002H) ; 1E97 JR Z,01E9FH ; 1E9B OR 004H ; 1E9D BIT 3,(IX+002H) ; 1E9F JR Z,01EA7H ; 1EA3 OR 008H ; 1EA5 BIT 3,(IY+001H) ; 1EA7 JR Z,01EAFH ; 1EAB OR 010H ; 1EAD BIT 3,(IX+001H) ; 1EAF JR Z,01EB7H ; 1EB3 OR 020H ; 1EB5 BIT 3,(IY+000H) ; 1EB7 JR Z,01EBFH ; 1EBB OR 040H ; 1EBD BIT 3,(IX+000H) ; 1EBF JR Z,01EC7H ; 1EC3 OR 080H ; 1EC5 LD (HL),A ; 1EC7 INC HL ; 1EC8 XOR A ; 1EC9 BIT 4,(IY+003H) ; 1ECA JR Z,01ED2H ; 1ECE OR 001H ; 1ED0 BIT 4,(IX+003H) ; 1ED2 JR Z,01EDAH ; 1ED6 OR 002H ; 1ED8 BIT 4,(IY+002H) ; 1EDA JR Z,01EE2H ; 1EDE OR 004H ; 1EE0 BIT 4,(IX+002H) ; 1EE2 JR Z,01EEAH ; 1EE6 OR 008H ; 1EE8 BIT 4,(IY+001H) ; 1EEA JR Z,01EF2H ; 1EEE OR 010H ; 1EF0 BIT 4,(IX+001H) ; 1EF2 JR Z,01EFAH ; 1EF6 OR 020H ; 1EF8 BIT 4,(IY+000H) ; 1EFA JR Z,01F02H ; 1EFE OR 040H ; 1F00 BIT 4,(IX+000H) ; 1F02 JR Z,01F0AH ; 1F06 OR 080H ; 1F08 LD (HL),A ; 1F0A INC HL ; 1F0B XOR A ; 1F0C BIT 5,(IY+003H) ; 1F0D JR Z,01F15H ; 1F11 OR 001H ; 1F13 BIT 5,(IX+003H) ; 1F15 JR Z,01F1DH ; 1F19 OR 002H ; 1F1B BIT 5,(IY+002H) ; 1F1D JR Z,01F25H ; 1F21 OR 004H ; 1F23 BIT 5,(IX+002H) ; 1F25 JR Z,01F2DH ; 1F29 OR 008H ; 1F2B BIT 5,(IY+001H) ; 1F2D JR Z,01F35H ; 1F31 OR 010H ; 1F33 BIT 5,(IX+001H) ; 1F35 JR Z,01F3DH ; 1F39 OR 020H ; 1F3B BIT 5,(IY+000H) ; 1F3D JR Z,01F45H ; 1F41 OR 040H ; 1F43 BIT 5,(IX+000H) ; 1F45 JR Z,01F4DH ; 1F49 OR 080H ; 1F4B LD (HL),A ; 1F4D INC HL ; 1F4E XOR A ; 1F4F BIT 6,(IY+003H) ; 1F50 JR Z,01F58H ; 1F54 OR 001H ; 1F56 BIT 6,(IX+003H) ; 1F58 JR Z,01F60H ; 1F5C OR 002H ; 1F5E BIT 6,(IY+002H) ; 1F60 JR Z,01F68H ; 1F64 OR 004H ; 1F66 BIT 6,(IX+002H) ; 1F68 JR Z,01F70H ; 1F6C OR 008H ; 1F6E BIT 6,(IY+001H) ; 1F70 JR Z,01F78H ; 1F74 OR 010H ; 1F76 BIT 6,(IX+001H) ; 1F78 JR Z,01F80H ; 1F7C OR 020H ; 1F7E BIT 6,(IY+000H) ; 1F80 JR Z,01F88H ; 1F84 OR 040H ; 1F86 BIT 6,(IX+000H) ; 1F88 JR Z,01F90H ; 1F8C OR 080H ; 1F8E LD (HL),A ; 1F90 INC HL ; 1F91 XOR A ; 1F92 BIT 7,(IY+003H) ; 1F93 JR Z,01F9BH ; 1F97 OR 001H ; 1F99 BIT 7,(IX+003H) ; 1F9B JR Z,01FA3H ; 1F9F OR 002H ; 1FA1 BIT 7,(IY+002H) ; 1FA3 JR Z,01FABH ; 1FA7 OR 004H ; 1FA9 BIT 7,(IX+002H) ; 1FAB JR Z,01FB3H ; 1FAF OR 008H ; 1FB1 BIT 7,(IY+001H) ; 1FB3 JR Z,01FBBH ; 1FB7 OR 010H ; 1FB9 BIT 7,(IX+001H) ; 1FBB JR Z,01FC3H ; 1FBF OR 020H ; 1FC1 BIT 7,(IY+000H) ; 1FC3 JR Z,01FCBH ; 1FC7 OR 040H ; 1FC9 BIT 7,(IX+000H) ; 1FCB JR Z,01FD3H ; 1FCF OR 080H ; 1FD1 LD (HL),A ; 1FD3 RET ; 1FD4 LD A,(IX+000H) ; 1FD5 XOR (HL) ; 1FD8 LD (IX+000H),A ; 1FD9 INC HL ; 1FDC LD A,(IX+001H) ; 1FDD XOR (HL) ; 1FE0 LD (IX+001H),A ; 1FE1 INC HL ; 1FE4 LD A,(IX+002H) ; 1FE5 XOR (HL) ; 1FE8 LD (IX+002H),A ; 1FE9 INC HL ; 1FEC LD A,(IX+003H) ; 1FED XOR (HL) ; 1FF0 LD (IX+003H),A ; 1FF1 INC HL ; 1FF4 LD A,(IX+004H) ; 1FF5 XOR (HL) ; 1FF8 LD (IX+004H),A ; 1FF9 INC HL ; 1FFC LD A,(IX+005H) ; 1FFD XOR (HL) ; 2000 LD (IX+005H),A ; 2001 INC HL ; 2004 LD A,(IX+006H) ; 2005 XOR (HL) ; 2008 LD (IX+006H),A ; 2009 INC HL ; 200C LD A,(IX+007H) ; 200D XOR (HL) ; 2010 LD (IX+007H),A ; 2011 INC HL ; 2014 RET ; 2015 LD IY,0603DH ; 2016 LD BC,02624H ; 201A LD L,(IY+000H) ; 201D LD H,000H ; 2020 ADD HL,BC ; 2022 LD A,(HL) ; 2023 AND 0F0H ; 2024 LD B,A ; 2026 PUSH BC ; 2027 LD BC,02624H ; 2028 LD L,(IY+001H) ; 202B LD H,000H ; 202E ADD HL,BC ; 2030 LD A,(HL) ; 2031 AND 00FH ; 2032 POP BC ; 2034 OR B ; 2035 LD (IY+000H),A ; 2036 LD BC,02664H ; 2039 LD L,(IY+002H) ; 203C LD H,000H ; 203F ADD HL,BC ; 2041 LD A,(HL) ; 2042 AND 0F0H ; 2043 LD B,A ; 2045 PUSH BC ; 2046 LD BC,02664H ; 2047 LD L,(IY+003H) ; 204A LD H,000H ; 204D ADD HL,BC ; 204F LD A,(HL) ; 2050 AND 00FH ; 2051 POP BC ; 2053 OR B ; 2054 LD (IY+001H),A ; 2055 LD BC,026A4H ; 2058 LD L,(IY+004H) ; 205B LD H,000H ; 205E ADD HL,BC ; 2060 LD A,(HL) ; 2061 AND 0F0H ; 2062 LD B,A ; 2064 PUSH BC ; 2065 LD BC,026A4H ; 2066 LD L,(IY+005H) ; 2069 LD H,000H ; 206C ADD HL,BC ; 206E LD A,(HL) ; 206F AND 00FH ; 2070 POP BC ; 2072 OR B ; 2073 LD (IY+002H),A ; 2074 LD BC,026E4H ; 2077 LD L,(IY+006H) ; 207A LD H,000H ; 207D ADD HL,BC ; 207F LD A,(HL) ; 2080 AND 0F0H ; 2081 LD B,A ; 2083 PUSH BC ; 2084 LD BC,026E4H ; 2085 LD L,(IY+007H) ; 2088 LD H,000H ; 208B ADD HL,BC ; 208D LD A,(HL) ; 208E AND 00FH ; 208F POP BC ; 2091 OR B ; 2092 LD (IY+003H),A ; 2093 RET ; 2096 LD IX,0603DH ; 2097 XOR A ; 209B BIT 7,(IX+002H) ; 209C JR Z,020A4H ; 20A0 OR 001H ; 20A2 BIT 4,(IX+003H) ; 20A4 JR Z,020ACH ; 20A8 OR 002H ; 20AA BIT 4,(IX+001H) ; 20AC JR Z,020B4H ; 20B0 OR 004H ; 20B2 BIT 3,(IX+003H) ; 20B4 JR Z,020BCH ; 20B8 OR 008H ; 20BA BIT 3,(IX+002H) ; 20BC JR Z,020C4H ; 20C0 OR 010H ; 20C2 BIT 4,(IX+002H) ; 20C4 JR Z,020CCH ; 20C8 OR 020H ; 20CA BIT 1,(IX+000H) ; 20CC JR Z,020D4H ; 20D0 OR 040H ; 20D2 BIT 0,(IX+001H) ; 20D4 JR Z,020DCH ; 20D8 OR 080H ; 20DA LD (IX+004H),A ; 20DC XOR A ; 20DF BIT 6,(IX+001H) ; 20E0 JR Z,020E8H ; 20E4 OR 001H ; 20E6 BIT 1,(IX+003H) ; 20E8 JR Z,020F0H ; 20EC OR 002H ; 20EE BIT 6,(IX+002H) ; 20F0 JR Z,020F8H ; 20F4 OR 004H ; 20F6 BIT 3,(IX+000H) ; 20F8 JR Z,02100H ; 20FC OR 008H ; 20FE BIT 6,(IX+003H) ; 2100 JR Z,02108H ; 2104 OR 010H ; 2106 BIT 1,(IX+002H) ; 2108 JR Z,02110H ; 210C OR 020H ; 210E BIT 1,(IX+001H) ; 2110 JR Z,02118H ; 2114 OR 040H ; 2116 BIT 7,(IX+000H) ; 2118 JR Z,02120H ; 211C OR 080H ; 211E LD (IX+005H),A ; 2120 XOR A ; 2123 BIT 7,(IX+001H) ; 2124 JR Z,0212CH ; 2128 OR 001H ; 212A BIT 5,(IX+000H) ; 212C JR Z,02134H ; 2130 OR 002H ; 2132 BIT 5,(IX+003H) ; 2134 JR Z,0213CH ; 2138 OR 004H ; 213A BIT 0,(IX+003H) ; 213C JR Z,02144H ; 2140 OR 008H ; 2142 BIT 2,(IX+001H) ; 2144 JR Z,0214CH ; 2148 OR 010H ; 214A BIT 0,(IX+002H) ; 214C JR Z,02154H ; 2150 OR 020H ; 2152 BIT 0,(IX+000H) ; 2154 JR Z,0215CH ; 2158 OR 040H ; 215A BIT 6,(IX+000H) ; 215C JR Z,02164H ; 2160 OR 080H ; 2162 LD (IX+006H),A ; 2164 XOR A ; 2167 BIT 7,(IX+003H) ; 2168 JR Z,02170H ; 216C OR 001H ; 216E BIT 4,(IX+000H) ; 2170 JR Z,02178H ; 2174 OR 002H ; 2176 BIT 5,(IX+001H) ; 2178 JR Z,02180H ; 217C OR 004H ; 217E BIT 2,(IX+002H) ; 2180 JR Z,02188H ; 2184 OR 008H ; 2186 BIT 2,(IX+000H) ; 2188 JR Z,02190H ; 218C OR 010H ; 218E BIT 2,(IX+003H) ; 2190 JR Z,02198H ; 2194 OR 020H ; 2196 BIT 3,(IX+001H) ; 2198 JR Z,021A0H ; 219C OR 040H ; 219E BIT 5,(IX+002H) ; 21A0 JR Z,021A8H ; 21A4 OR 080H ; 21A6 LD (IX+007H),A ; 21A8 RET ; 21AB LD IX,0603DH ; 21AC LD IY,06035H ; 21B0 LD HL,06039H ; 21B4 LD A,(IX+004H) ; 21B7 XOR (IY+000H) ; 21BA LD (IX+004H),A ; 21BD LD A,(IX+005H) ; 21C0 XOR (IY+001H) ; 21C3 LD (IX+005H),A ; 21C6 LD A,(IX+006H) ; 21C9 XOR (IY+002H) ; 21CC LD (IX+006H),A ; 21CF LD A,(IX+007H) ; 21D2 XOR (IY+003H) ; 21D5 LD (IX+007H),A ; 21D8 LD A,(HL) ; 21DB LD (IY+000H),A ; 21DC LD A,(IX+004H) ; 21DF LD (HL),A ; 21E2 INC HL ; 21E3 LD A,(HL) ; 21E4 LD (IY+001H),A ; 21E5 LD A,(IX+005H) ; 21E8 LD (HL),A ; 21EB INC HL ; 21EC LD A,(HL) ; 21ED LD (IY+002H),A ; 21EE LD A,(IX+006H) ; 21F1 LD (HL),A ; 21F4 INC HL ; 21F5 LD A,(HL) ; 21F6 LD (IY+003H),A ; 21F7 LD A,(IX+007H) ; 21FA LD (HL),A ; 21FD INC HL ; 21FE RET ; 21FF XOR A ; 2200 LD (06033H),A ; 2201 LD (06034H),A ; 2204 CALL 0222BH ; 2207 Decode Memory ¨¨¨??? LD B,010H ; 220A LD IY,0604DH ; 220C PUSH BC ; 2210 PUSH IY ; 2211 CALL 02418H ; 2213 Decode Memory ¨¨¨??? CALL 0246FH ; 2216 Decode Memory ¨¨¨??? LD DE,00008H ; 2219 POP IY ; 221C ADD IY,DE ; 221E LD A,(06033H) ; 2220 INC A ; 2223 LD (06033H),A ; 2224 POP BC ; 2227 DJNZ 02210H ; 2228 RET ; 222A LD IX,(06031H) ; 222B LD IY,06045H ; 222F XOR A ; 2233 BIT 7,(IX+000H) ; 2234 JR Z,0223CH ; 2238 OR 001H ; 223A BIT 7,(IX+001H) ; 223C JR Z,02244H ; 2240 OR 002H ; 2242 BIT 7,(IX+002H) ; 2244 JR Z,0224CH ; 2248 OR 004H ; 224A BIT 7,(IX+003H) ; 224C JR Z,02254H ; 2250 OR 008H ; 2252 BIT 7,(IX+004H) ; 2254 JR Z,0225CH ; 2258 OR 010H ; 225A BIT 7,(IX+005H) ; 225C JR Z,02264H ; 2260 OR 020H ; 2262 BIT 7,(IX+006H) ; 2264 JR Z,0226CH ; 2268 OR 040H ; 226A BIT 7,(IX+007H) ; 226C JR Z,02274H ; 2270 OR 080H ; 2272 LD (IY+000H),A ; 2274 XOR A ; 2277 BIT 6,(IX+000H) ; 2278 JR Z,02280H ; 227C OR 001H ; 227E BIT 6,(IX+001H) ; 2280 JR Z,02288H ; 2284 OR 002H ; 2286 BIT 6,(IX+002H) ; 2288 JR Z,02290H ; 228C OR 004H ; 228E BIT 6,(IX+003H) ; 2290 JR Z,02298H ; 2294 OR 008H ; 2296 BIT 6,(IX+004H) ; 2298 JR Z,022A0H ; 229C OR 010H ; 229E BIT 6,(IX+005H) ; 22A0 JR Z,022A8H ; 22A4 OR 020H ; 22A6 BIT 6,(IX+006H) ; 22A8 JR Z,022B0H ; 22AC OR 040H ; 22AE BIT 6,(IX+007H) ; 22B0 JR Z,022B8H ; 22B4 OR 080H ; 22B6 LD (IY+001H),A ; 22B8 XOR A ; 22BB BIT 5,(IX+000H) ; 22BC JR Z,022C4H ; 22C0 OR 001H ; 22C2 BIT 5,(IX+001H) ; 22C4 JR Z,022CCH ; 22C8 OR 002H ; 22CA BIT 5,(IX+002H) ; 22CC JR Z,022D4H ; 22D0 OR 004H ; 22D2 BIT 5,(IX+003H) ; 22D4 JR Z,022DCH ; 22D8 OR 008H ; 22DA BIT 5,(IX+004H) ; 22DC JR Z,022E4H ; 22E0 OR 010H ; 22E2 BIT 5,(IX+005H) ; 22E4 JR Z,022ECH ; 22E8 OR 020H ; 22EA BIT 5,(IX+006H) ; 22EC JR Z,022F4H ; 22F0 OR 040H ; 22F2 BIT 5,(IX+007H) ; 22F4 JR Z,022FCH ; 22F8 OR 080H ; 22FA LD (IY+002H),A ; 22FC XOR A ; 22FF BIT 4,(IX+004H) ; 2300 JR Z,02308H ; 2304 OR 010H ; 2306 BIT 4,(IX+005H) ; 2308 JR Z,02310H ; 230C OR 020H ; 230E BIT 4,(IX+006H) ; 2310 JR Z,02318H ; 2314 OR 040H ; 2316 BIT 4,(IX+007H) ; 2318 JR Z,02320H ; 231C OR 080H ; 231E LD (IY+003H),A ; 2320 LD IY,06049H ; 2323 XOR A ; 2327 BIT 1,(IX+000H) ; 2328 JR Z,02330H ; 232C OR 001H ; 232E BIT 1,(IX+001H) ; 2330 JR Z,02338H ; 2334 OR 002H ; 2336 BIT 1,(IX+002H) ; 2338 JR Z,02340H ; 233C OR 004H ; 233E BIT 1,(IX+003H) ; 2340 JR Z,02348H ; 2344 OR 008H ; 2346 BIT 1,(IX+004H) ; 2348 JR Z,02350H ; 234C OR 010H ; 234E BIT 1,(IX+005H) ; 2350 JR Z,02358H ; 2354 OR 020H ; 2356 BIT 1,(IX+006H) ; 2358 JR Z,02360H ; 235C OR 040H ; 235E BIT 1,(IX+007H) ; 2360 JR Z,02368H ; 2364 OR 080H ; 2366 LD (IY+000H),A ; 2368 XOR A ; 236B BIT 2,(IX+000H) ; 236C JR Z,02374H ; 2370 OR 001H ; 2372 BIT 2,(IX+001H) ; 2374 JR Z,0237CH ; 2378 OR 002H ; 237A BIT 2,(IX+002H) ; 237C JR Z,02384H ; 2380 OR 004H ; 2382 BIT 2,(IX+003H) ; 2384 JR Z,0238CH ; 2388 OR 008H ; 238A BIT 2,(IX+004H) ; 238C JR Z,02394H ; 2390 OR 010H ; 2392 BIT 2,(IX+005H) ; 2394 JR Z,0239CH ; 2398 OR 020H ; 239A BIT 2,(IX+006H) ; 239C JR Z,023A4H ; 23A0 OR 040H ; 23A2 BIT 2,(IX+007H) ; 23A4 JR Z,023ACH ; 23A8 OR 080H ; 23AA LD (IY+001H),A ; 23AC XOR A ; 23AF BIT 3,(IX+000H) ; 23B0 JR Z,023B8H ; 23B4 OR 001H ; 23B6 BIT 3,(IX+001H) ; 23B8 JR Z,023C0H ; 23BC OR 002H ; 23BE BIT 3,(IX+002H) ; 23C0 JR Z,023C8H ; 23C4 OR 004H ; 23C6 BIT 3,(IX+003H) ; 23C8 JR Z,023D0H ; 23CC OR 008H ; 23CE BIT 3,(IX+004H) ; 23D0 JR Z,023D8H ; 23D4 OR 010H ; 23D6 BIT 3,(IX+005H) ; 23D8 JR Z,023E0H ; 23DC OR 020H ; 23DE BIT 3,(IX+006H) ; 23E0 JR Z,023E8H ; 23E4 OR 040H ; 23E6 BIT 3,(IX+007H) ; 23E8 JR Z,023F0H ; 23EC OR 080H ; 23EE LD (IY+002H),A ; 23F0 XOR A ; 23F3 BIT 4,(IX+000H) ; 23F4 JR Z,023FCH ; 23F8 OR 010H ; 23FA BIT 4,(IX+001H) ; 23FC JR Z,02404H ; 2400 OR 020H ; 2402 BIT 4,(IX+002H) ; 2404 JR Z,0240CH ; 2408 OR 040H ; 240A BIT 4,(IX+003H) ; 240C JR Z,02414H ; 2410 OR 080H ; 2412 LD (IY+003H),A ; 2414 RET ; 2417 LD HL,02724H ; 2418 LD DE,(06033H) ; 241B ADD HL,DE ; 241F LD C,(HL) ; 2420 LD IX,06045H ; 2421 CALL 02434H ; 2425 LD IX,06049H ; 2428 CALL 02434H ; 242C DEC C ; 242F JP NZ,02421H ; 2430 RET ; 2433 BIT 7,(IX+000H) ; 2434 JR Z,02440H ; 2438 SET 3,(IX+003H) ; 243A JR 02444H ; 243E RES 3,(IX+003H) ; 2440 LD B,003H ; 2444 SLA (IX+000H) ; 2446 BIT 7,(IX+001H) ; 244A JR Z,0245AH ; 244E SET 0,(IX+000H) ; 2450 INC IX ; 2454 DJNZ 02446H ; 2456 JR 02462H ; 2458 RES 0,(IX+000H) ; 245A INC IX ; 245E DJNZ 02446H ; 2460 SLA (IX+000H) ; 2462 LD A,(IX+000H) ; 2466 AND 0F0H ; 2469 LD (IX+000H),A ; 246B RET ; 246E LD IX,06045H ; 246F XOR A ; 2473 BIT 3,(IX+000H) ; 2474 JR Z,0247CH ; 2478 OR 001H ; 247A BIT 7,(IX+000H) ; 247C JR Z,02484H ; 2480 OR 002H ; 2482 BIT 0,(IX+002H) ; 2484 JR Z,0248CH ; 2488 OR 004H ; 248A BIT 5,(IX+001H) ; 248C JR Z,02494H ; 2490 OR 008H ; 2492 BIT 7,(IX+002H) ; 2494 JR Z,0249CH ; 2498 OR 010H ; 249A BIT 2,(IX+001H) ; 249C JR Z,024A4H ; 24A0 OR 020H ; 24A2 LD (IY+000H),A ; 24A4 XOR A ; 24A7 BIT 6,(IX+001H) ; 24A8 JR Z,024B0H ; 24AC OR 001H ; 24AE BIT 3,(IX+002H) ; 24B0 JR Z,024B8H ; 24B4 OR 002H ; 24B6 BIT 2,(IX+000H) ; 24B8 JR Z,024C0H ; 24BC OR 004H ; 24BE BIT 1,(IX+001H) ; 24C0 JR Z,024C8H ; 24C4 OR 008H ; 24C6 BIT 4,(IX+003H) ; 24C8 JR Z,024D0H ; 24CC OR 010H ; 24CE BIT 5,(IX+000H) ; 24D0 JR Z,024D8H ; 24D4 OR 020H ; 24D6 LD (IY+001H),A ; 24D8 XOR A ; 24DB BIT 0,(IX+000H) ; 24DC JR Z,024E4H ; 24E0 OR 001H ; 24E2 BIT 6,(IX+003H) ; 24E4 JR Z,024ECH ; 24E8 OR 002H ; 24EA BIT 4,(IX+000H) ; 24EC JR Z,024F4H ; 24F0 OR 004H ; 24F2 BIT 4,(IX+001H) ; 24F4 JR Z,024FCH ; 24F8 OR 008H ; 24FA BIT 5,(IX+002H) ; 24FC JR Z,02504H ; 2500 OR 010H ; 2502 BIT 1,(IX+002H) ; 2504 JR Z,0250CH ; 2508 OR 020H ; 250A LD (IY+002H),A ; 250C XOR A ; 250F BIT 6,(IX+000H) ; 2510 JR Z,02518H ; 2514 OR 001H ; 2516 BIT 3,(IX+001H) ; 2518 JR Z,02520H ; 251C OR 002H ; 251E BIT 4,(IX+002H) ; 2520 JR Z,02528H ; 2524 OR 004H ; 2526 BIT 5,(IX+003H) ; 2528 JR Z,02530H ; 252C OR 008H ; 252E BIT 1,(IX+000H) ; 2530 JR Z,02538H ; 2534 OR 010H ; 2536 BIT 0,(IX+001H) ; 2538 JR Z,02540H ; 253C OR 020H ; 253E LD (IY+003H),A ; 2540 XOR A ; 2543 BIT 5,(IX+007H) ; 2544 JR Z,0254CH ; 2548 OR 001H ; 254A BIT 5,(IX+006H) ; 254C JR Z,02554H ; 2550 OR 002H ; 2552 BIT 7,(IX+005H) ; 2554 JR Z,0255CH ; 2558 OR 004H ; 255A BIT 5,(IX+004H) ; 255C JR Z,02564H ; 2560 OR 008H ; 2562 BIT 0,(IX+006H) ; 2564 JR Z,0256CH ; 2568 OR 010H ; 256A BIT 3,(IX+005H) ; 256C JR Z,02574H ; 2570 OR 020H ; 2572 LD (IY+004H),A ; 2574 XOR A ; 2577 BIT 4,(IX+006H) ; 2578 JR Z,02580H ; 257C OR 001H ; 257E BIT 3,(IX+004H) ; 2580 JR Z,02588H ; 2584 OR 002H ; 2586 BIT 7,(IX+006H) ; 2588 JR Z,02590H ; 258C OR 004H ; 258E BIT 1,(IX+006H) ; 2590 JR Z,02598H ; 2594 OR 008H ; 2596 BIT 4,(IX+005H) ; 2598 JR Z,025A0H ; 259C OR 010H ; 259E BIT 6,(IX+004H) ; 25A0 JR Z,025A8H ; 25A4 OR 020H ; 25A6 LD (IY+005H),A ; 25A8 XOR A ; 25AB BIT 7,(IX+007H) ; 25AC JR Z,025B4H ; 25B0 OR 001H ; 25B2 BIT 2,(IX+004H) ; 25B4 JR Z,025BCH ; 25B8 OR 002H ; 25BA BIT 4,(IX+007H) ; 25BC JR Z,025C4H ; 25C0 OR 004H ; 25C2 BIT 5,(IX+005H) ; 25C4 JR Z,025CCH ; 25C8 OR 008H ; 25CA BIT 3,(IX+006H) ; 25CC JR Z,025D4H ; 25D0 OR 010H ; 25D2 BIT 0,(IX+005H) ; 25D4 JR Z,025DCH ; 25D8 OR 020H ; 25DA LD (IY+006H),A ; 25DC XOR A ; 25DF BIT 4,(IX+004H) ; 25E0 JR Z,025E8H ; 235E4 OR 001H ; 25E6 BIT 7,(IX+004H) ; 25E8 JR Z,025F0H ; 25EC OR 002H ; 25EE BIT 0,(IX+004H) ; 25F0 JR Z,025F8H ; 25F4 OR 004H ; 25F6 BIT 2,(IX+006H) ; 25F8 JR Z,02600H ; 25FC OR 008H ; 25FE BIT 2,(IX+005H) ; 2600 JR Z,02608H ; 2604 OR 010H ; 2606 BIT 6,(IX+006H) ; 2608 JR Z,02610H ; 260C OR 020H ; 260E LD (IY+007H),A ; 2610 RET ; 2613 251C:2710 DD 23 10 EE-18 08 DD CB 00 86 DD 23 .#.........# 251C:2720 10 E4 DD CB 00 26 DD 7E-00 E6 F0 DD 77 00 C9 DD .....&.~....w... 251C:2730 21 45 60 AF DD CB 00 5E-28 02 F6 01 DD CB 00 7E !E`....^(......~ 251C:2740 28 02 F6 02 DD CB 02 46-28 02 F6 04 DD CB 01 6E (......F(......n 251C:2750 28 02 F6 08 DD CB 02 7E-28 02 F6 10 DD CB 01 56 (......~(......V 251C:2760 28 02 F6 20 FD 77 00 AF-DD CB 01 76 28 02 F6 01 (.. .w.....v(... 251C:2770 DD CB 02 5E 28 02 F6 02-DD CB 00 56 28 02 F6 04 ...^(......V(... 251C:2780 DD CB 01 4E 28 02 F6 08-DD CB 03 66 28 02 F6 10 ...N(......f(... 251C:2790 DD CB 00 6E 28 02 F6 20-FD 77 01 AF DD CB 00 46 ...n(.. .w.....F 251C:27A0 28 02 F6 01 DD CB 03 76-28 02 F6 02 DD CB 00 66 (......v(......f 251C:27B0 28 02 F6 04 DD CB 01 66-28 02 F6 08 DD CB 02 6E (......f(......n 251C:27C0 28 02 F6 10 DD CB 02 4E-28 02 F6 20 FD 77 02 AF (......N(.. .w.. 251C:27D0 DD CB 00 76 28 02 F6 01-DD CB 01 5E 28 02 F6 02 ...v(......^(... 251C:27E0 DD CB 02 66 28 02 F6 04-DD CB 03 6E 28 02 F6 08 ...f(......n(... 251C:27F0 DD CB 00 4E 28 02 F6 10-DD CB 01 46 28 02 F6 20 ...N(......F(.. 251C:2800 FD 77 03 AF DD CB 07 6E-28 02 F6 01 DD CB 06 6E .w.....n(......n 251C:2810 28 02 F6 02 DD CB 05 7E-28 02 F6 04 DD CB 04 6E (......~(......n 251C:2820 28 02 F6 08 DD CB 06 46-28 02 F6 10 DD CB 05 5E (......F(......^ 251C:2830 28 02 F6 20 FD 77 04 AF-DD CB 06 66 28 02 F6 01 (.. .w.....f(... 251C:2840 DD CB 04 5E 28 02 F6 02-DD CB 06 7E 28 02 F6 04 ...^(......~(... 251C:2850 DD CB 06 4E 28 02 F6 08-DD ...N(.... CALL 03BE7H ; 2758 Turn Off DTMF Tone & Output CALL 03B98H ; 275B (P40.6) = 1 CALL 03B8FH ; 275E (P41.3) = 0 (Cuelga) LD A,(0642EH) ; 2761 CP 000H ; 2764 JP Z,02812H ; 2766 LD A,(065CDH) ; 2769 OR A ; 276C JP NZ,02812H ; 276D LD A,(06448H) ; 2770 OR A ; 2773 CALL NZ,00BB8H ; 2774 Write ' | RETIRE TARJETA' LD A,(0642BH) ; 2777 Timer 6W CP 020H ; 277A JR C,0278DH ; 277C LD A,(065CDH) ; 277E OR A ; 2781 JP NZ,02812H ; 2782 CALL 00BB8H ; 2785 Write ' | RETIRE TARJETA' CALL 03BB3H ; 2788 Espera IRQ y vuelve JR 02777H ; 278B CALL 0138AH ; 278D CALL 03C9EH ; 2790 CALL 028B7H ; 2793 LD A,(0644AH) ; 2796 OR A ; 2799 CALL NZ,00C4DH ; 279A Write 'CIERRE LA PUERTA' CALL 00D28H ; 279D Borra la linea de abajo LD A,(065CDH) ; 27A0 OR A ; 27A3 JR NZ,02812H ; 27A4 LD A,(0644AH) ; 27A6 OR A ; 27A9 JR Z,027B7H ; 27AA CALL 03BB3H ; 27AC HALT y Vuelve CALL 03DA3H ; 27AF Get Key Pressed Carry On Error CALL NC,00D9BH ; 27B2 Refresca el Display JR 027A0H ; 27B5 LD A,(0642CH) ; 27B7 RES 6,A ; 27BA LD (0642CH),A ; 27BC LD A,(0642CH) ; 27BF RES 1,A ; 27C2 LD (0642CH),A ; 27C4 CALL 028B7H ; 27C7 CALL 00D15H ; 27CA Actualiza los Pulsos en el Display LD A,(06449H) ; 27CD OR A ; 27D0 CALL NZ,00B0DH ; 27D1 Write 'la misma linea| CUELGUE' LD A,(065CDH) ; 27D4 OR A ; 27D7 JR NZ,02812H ; 27D8 LD A,(0644AH) ; 27DA OR A ; 27DD JR Z,027EBH ; 27DE CALL 028B7H ; 27E0 CALL 00C4DH ; 27E3 Write 'CIERRE LA PUERTA' CALL 00D28H ; 27E6 Borra la linea de abajo JR 027A0H ; 27E9 LD A,(06449H) ; 27EB OR A ; 27EE JR Z,027FCH ; 27EF CALL 03BB3H ; 27F1 Espera IRQ y vuelve CALL 03DA3H ; 27F4 Get Key Pressed Carry On Error CALL NC,00D9BH ; 27F7 Refresca el Display JR 027D4H ; 27FA CALL 00B5FH ; 27FC Write 'ESPERE POR FAVOR' LD A,(065E4H) ; 27FF OR A ; 2802 JR Z,0280CH ; 2803 LD BC,04343H ; 2805 LD (065B8H),BC ; 2808 (65B8) = 'CC' CALL 0284CH ; 280C CALL 028B7H ; 280F LD A,(065C1H) ; 2812 Buffer #7 Counter OR A ; 2815 JR NZ,02812H ; 2816 LD A,(065CDH) ; 2818 PUSH AF ; 281B LD A,(065D1H) ; 281C PUSH AF ; 281F CALL 029D6H ; 2820 Init Buffers & Idioma DI ; 2823 CALL 029FBH ; 2824 Init Buffer Counters & Head-Tail Ptrs EI ; 2827 POP AF ; 2828 LD (065D1H),A ; 2829 POP AF ; 282C LD (065CDH),A ; 282D CALL 01A6EH ; 2830 LD A,002H ; 2833 LD (0644BH),A ; 2835 RET ; 2838 LD DE,00002H ; 2839 LD B,008H ; 283C RRA ; 283E JR C,02844H ; 283F ADD HL,DE ; 2841 DJNZ 0283EH ; 2842 LD C,(HL) ; 2844 INC HL ; 2845 LD B,(HL) ; 2846 LD (065B8H),BC ; 2847 RET ; 284B LD A,(0642EH) ; 284C OR A ; 284F JR Z,0289EH ; 2850 LD HL,02734H ; 2852 LD A,(0642CH) ; 2855 AND 010H ; 2858 JR NZ,02866H ; 285A LD HL,02746H ; 285C LD A,(0642DH) ; 285F AND 004H ; 2862 JR Z,02870H ; 2864 CALL 02839H ; 2866 LD A,008H ; 2869 LD (0642EH),A ; 286B JR 02893H ; 286E LD HL,02734H ; 2870 LD A,(0642CH) ; 2873 AND 0CAH ; 2876 JR NZ,02884H ; 2878 LD HL,02746H ; 287A LD A,(0642DH) ; 287D AND 01AH ; 2880 JR Z,0288EH ; 2882 CALL 02839H ; 2884 LD A,004H ; 2887 LD (0642EH),A ; 2889 JR 02893H ; 288C LD A,002H ; 288E LD (0642EH),A ; 2890 LD DE,0642FH ; 2893 LD BC,00003H ; 2896 LD HL,0642CH ; 2899 LDIR ; 289C RET ; 289E LD A,(065D1H) ; 289F OR A ; 28A2 JR NZ,028B6H ; 28A3 LD B,003H ; 28A5 LD HL,0642CH ; 28A7 LD DE,06432H ; 28AA LD C,(HL) ; 28AD LD A,(DE) ; 28AE XOR C ; 28AF JR NZ,028B6H ; 28B0 INC HL ; 28B2 INC DE ; 28B3 DJNZ 028ADH ; 28B4 RET ; 28B6 DI ; 28B7 CALL 0289FH ; 28B8 JR Z,028C6H ; 28BB CALL 0284CH ; 28BD EI ; 28C0 LD A,001H ; 28C1 LD (065D1H),A ; 28C3 EI ; 28C6 RET ; 28C7 ; Subrutina llamada desde la primer linea de maIn() LD B,0FFH ; 28C8 LD C,0D2H ; 28CA CALL 02A6EH ; 28CC OUT (0Ah),66 OUT (D2h),FFh LD C,0D3H ; 28CF CALL 02A6EH ; 28D1 OUT (0Ah),66 OUT (D3h),FFh LD B,001H ; 28D4 LD C,0C9H ; 28D6 CALL 02A6EH ; 28D8 OUT (0Ah),66 OUT (C9h),01h LD B,000H ; 28DB LD C,0D1H ; 28DD CALL 02A6EH ; 28DF OUT (0Ah),66 OUT (D1h),00h IN A,(0D0H) ; 28E2 INC B ; 28E4 LD C,0D6H ; 28E5 CALL 02A6EH ; 28E7 OUT (0Ah),66 OUT (D6h),01h DEC B ; 28EA LD C,0C7H ; 28EB CALL 02A6EH ; 28ED OUT (0Ah),66 OUT (C7h),00h DEC C ; 28F0 CALL 02A6EH ; 28F1 OUT (0Ah),66 OUT (C6h),00h DEC C ; 28F4 CALL 02A6EH ; 28F5 OUT (0Ah),66 OUT (C5h),00h DEC C ; 28F8 CALL 02A6EH ; 28F9 OUT (0Ah),66 OUT (C4h),00h DEC C ; 28FC CALL 02A6EH ; 28FD OUT (0Ah),66 OUT (C3h),00h LD B,0FFH ; 2900 LD C,0D5H ; 2902 CALL 02A6EH ; 2904 OUT (0Ah),66 OUT (D5h),FFh LD B,020H ; 2907 LD C,0D1H ; 2909 CALL 02A6EH ; 290B OUT (0Ah),66 OUT (D1h),20h LD A,0FFH ; 290E OUT (000H),A ; 2910 Port de la matriz del teclado OUT (060H),A ; 2912 Out (60h),FFh LD A,0C0H ; 2914 CALL 03CCDH ; 2916 Out (40h),Bit 5 de A=Bit 1 de In(42h) LD A,036H ; 2919 OUT (065H),A ; 291B Out (65h),36h LD A,018H ; 291D OUT (045H),A ; 291F Out (45h),18h LD A,040H ; 2921 OUT (061H),A ; 2923 Out (61h),40h XOR A ; 2925 OUT (002H),A ; 2926 Out (02h),0 OUT (062H),A ; 2928 Out (62h),0 OUT (067H),A ; 292A Out (67h),0 OUT (047H),A ; 292C Out (47h),0 OUT (080H),A ; 292E Out (80h),0 LD A,080H ; 2930 OUT (041H),A ; 2932 Out (41h),80h LD A,0FFH ; 2934 OUT (063H),A ; 2936 Out (63h),FFh OUT (043H),A ; 2938 Out (43h),FFh OUT (064H),A ; 293A Out (64h),FFh OUT (044H),A ; 293C Out (44h),FFh XOR A ; 293E OUT (046H),A ; 293F Out (46h),0 IN A,(045H) ; 2941 In (45h) XOR A ; 2943 OUT (000H),A ; 2944 Port de la Matriz del Teclado OUT (004H),A ; 2946 OUT (006H),A ; 2948 OUT (008H),A ; 294A IN A,(020H) ; 294C IN A,(028H) ; 294E OUT (00CH),A ; 2950 LD HL,06679H ; 2952 LD BC,061CDH ; 2955 XOR A ; 2958 SBC HL,BC ; 2959 LD DE,00000H ; 295B XOR A ; 295E OUT (00CH),A ; 295F LD (BC),A ; 2961 INC BC ; 2962 DEC HL ; 2963 LD A,H ; 2964 OR L ; 2965 JR NZ,0295EH ; 2966 Llena 61CD-6679 con 0 LD A,000H ; 2968 LD I,A ; 296A IM 2 ; 296C CALL 00D37H ; 296E Init Display CALL 00B5FH ; 2971 Write 'ESPERE POR FAVOR' CALL 01A45H ; 2974 Decode Memory ¨¨¨??? ROM -> RAM RET ; 2977 IN A,(002H) ; 2978 SET 5,A ; 297A SET 6,A ; 297C OUT (002H),A ; 297E (P02.5)=1 (P02.6)=1 LD B,004H ; 2980 LD C,0D1H ; 2982 CALL 02A6EH ; 2984 (P0A)=6h6 (PD1)=04h IN A,(0D0H) ; 2987 LD A,084H ; 2989 OUT (063H),A ; 298B (P63)=84h OUT (064H),A ; 298D (P64)=84h IN A,(064H) ; 298F LD (06677H),A ; 2991 (6677h)=(P64) LD A,01FH ; 2994 OUT (043H),A ; 2996 (P43)=1Fh OUT (044H),A ; 2998 (P44)=1Fh IN A,(044H) ; 299A LD (06678H),A ; 299C (6678h)=(P44) CALL 03C97H ; 299F ZeroF = !(P44h.6) JR Z,029A9H ; 29A2 LD A,001H ; 29A4 LD (06449H),A ; 29A6 (6449h)=1 if (P44.6)==1 IN A,(044H) ; 29A9 AND 020H ; 29AB JR NZ,029B4H ; 29AD LD A,001H ; 29AF LD (0644AH),A ; 29B1 (644Ah)=1 if (P44.5)==0 CALL 03C90H ; 29B4 ZeroF = !(P64h.4) JR NZ,029BEH ; 29B7 LD A,001H ; 29B9 LD (06448H),A ; 29BB (6448h)=1 if (P64.4)==1 IN A,(064H) ; 29BE AND 040H ; 29C0 JR NZ,029CCH ; 29C2 LD A,(0642CH) ; 29C4 SET 7,A ; 29C7 LD (0642CH),A ; 29C9 (642C.7)=1 if (P64.6)==0 LD HL,01645H ; 29CC LD (06429H),HL ; 29CF Fuera de servicio Timer = 1645h = 5701d CALL 03702H ; 29D2 Scan Keyboard, if Pressed Play & Push Key RET ; 29D5 ; Segunda rutina llamada desde Main(), tambien se llama desde un lado + ; Inicializa los Buffer Counter a 0 ; Inicializa el Next Avail Byte & Next Free Slot de cada buffer a ; BuffHead y BuffHead+1 ; Inicializa el Offset a sumar para el idioma a Castellano ; Inicializa el Codigo de Idioma a Castellano ; Llena con ceros el area 65BAh-6653h LD HL,06653H ; 29D6 LD BC,065BAH ; 29D9 Buffer #1 Counter XOR A ; 29DC SBC HL,BC ; 29DD LD DE,00000H ; 29DF XOR A ; 29E2 OUT (00CH),A ; 29E3 LD (BC),A ; 29E5 INC BC ; 29E6 DEC HL ; 29E7 Llena con ceros el area 65BAh-6653h y LD A,H ; 29E8 manda al port (0Ch) tantos 0 como bytes OR L ; 29E9 hay en ese area. JR NZ,029E2H ; 29EA CALL 029FBH ; 29EC Init Buffer Counters & Head-Tail Ptrs LD HL,00000H ; 29EF LD (06650H),HL ; 29F2 Offset Para Cada Idioma = 0 Castellano LD A,000H ; 29F5 LD (06652H),A ; 29F7 Codigo de Idioma RET ; 29FA XOR A ; 29FB LD HL,065BAH ; 29FC Buffer #1 Counter LD B,018H ; 29FF LD (HL),A ; 2A01 Buffer #1 Counter = 0 INC HL ; 2A02 DJNZ 02A01H ; 2A03 Pone todos los Buffer Counters a 0 LD HL,061CDH ; 2A05 Buffer #1 Head LD (061DFH),HL ; 2A08 INC HL ; 2A0B LD (061DDH),HL ; 2A0C LD HL,061E1H ; 2A0F Buffer #2 Head (Numero Marcado) LD (061F7H),HL ; 2A12 INC HL ; 2A15 LD (061F5H),HL ; 2A16 LD HL,0623DH ; 2A19 Buffer #6 Head LD (0627FH),HL ; 2A1C INC HL ; 2A1F LD (0627DH),HL ; 2A20 LD HL,061F9H ; 2A23 Buffer #5 Head LD (0623BH),HL ; 2A26 INC HL ; 2A29 LD (06239H),HL ; 2A2A LD HL,06305H ; 2A2D Buffer #4 Head LD (06387H),HL ; 2A30 INC HL ; 2A33 LD (06385H),HL ; 2A34 LD HL,06281H ; 2A37 Buffer #3 Head LD (06303H),HL ; 2A3A INC HL ; 2A3D LD (06301H),HL ; 2A3E LD HL,06389H ; 2A41 Buffer #7 Head LD (063CBH),HL ; 2A44 INC HL ; 2A47 LD (063C9H),HL ; 2A48 LD HL,063CDH ; 2A4B Buffer #8 Head LD (0640FH),HL ; 2A4E INC HL ; 2A51 LD (0640DH),HL ; 2A52 RET ; 2A55 LD HL,06E7CH ; 2A56 LD BC,0667DH ; 2A59 XOR A ; 2A5C SBC HL,BC ; 2A5D INC HL ; 2A5F LD A,066H ; 2A60 OUT (00CH),A ; 2A62 LD A,0FFH ; 2A64 LD (BC),A ; 2A66 INC BC ; 2A67 DEC HL ; 2A68 LD A,H ; 2A69 OR L ; 2A6A JR NZ,02A60H ; 2A6B RET ; 2A6D PUSH AF ; 2A6E (P0A)=66h (P C)=B LD A,066H ; 2A6F OUT (00AH),A ; 2A71 OUT (C),B ; 2A73 POP AF ; 2A75 RET ; 2A76 LD B,0FFH ; 2A77 Turn off Hardware Time Out LD C,0D2H ; 2A79 CALL 02A6EH ; 2A7B OUT (0A),66 OUT (D2),FF LD C,0D3H ; 2A7E CALL 02A6EH ; 2A80 OUT (0A),66 OUT (D3),FF LD C,0D5H ; 2A83 CALL 02A6EH ; 2A85 OUT (0A),66 OUT (D5),FF LD B,000H ; 2A88 LD C,0C7H ; 2A8A CALL 02A6EH ; 2A8C OUT (0A),66 OUT (C7),00 LD C,0C6H ; 2A8F CALL 02A6EH ; 2A91 OUT (0A),66 OUT (C6),00 LD C,0C5H ; 2A94 CALL 02A6EH ; 2A96 OUT (0A),66 OUT (C5),00 LD B,001H ; 2A99 LD C,0CCH ; 2A9B CALL 02A6EH ; 2A9D OUT (0A),66 OUT (CC),1 LD B,080H ; 2AA0 LD C,0D1H ; 2AA2 CALL 02A6EH ; 2AA4 OUT (0A),66 OUT (D1),80 LD B,001H ; 2AA7 LD C,0D6H ; 2AA9 CALL 02A6EH ; 2AAB OUT (0A),66 OUT (D6),1 IN A,(0D0H) ; 2AAE RET ; 2AB0 LD A,(065EAH) ; 2AB1 CP 001H ; 2AB4 JR NZ,02B23H ; 2AB6 CALL 00B5FH ; 2AB8 Write 'ESPERE POR FAVOR' CALL 00F33H ; 2ABB Lectura de tarjeta ... LD A,(06606H) ; 2ABE (=6606h)=3 => FICHAS =/=> PULSOS LD (06435H),A ; 2AC1 LD A,(065CDH) ; 2AC4 OR A ; 2AC7 JP NZ,02CA2H ; 2AC8 (65EAh) = 03h RET LD A,(065EDH) ; 2ACB CP 001H ; 2ACE JP Z,02C98H ; 2AD0 LD A,000H ; 2AD3 CALL 03F5BH ; 2AD5 Put Buffer #7 (Internal Commands) LD A,010H ; 2AD8 LD (06419H),A ; 2ADA Timer 1B=10h LD A,000H ; 2ADD LD (065DBH),A ; 2ADF LD A,(0662FH) ; 2AE2 OR A ; 2AE5 JP NZ,02B1DH ; 2AE6 JP 02C5DH ; 2AE9 CALL 03BB3H ; 2AEC Espera IRQ y vuelve CALL 03DA3H ; 2AEF Get Key Pressed Carry On Error CALL NC,00D9BH ; 2AF2 Refresca el Display LD A,(065CDH) ; 2AF5 OR A ; 2AF8 JP NZ,02CA2H ; 2AF9 LD A,(06419H) ; 2AFC Timer 1B OR A ; 2AFF JP Z,02C90H ; 2B00 LD A,(065C4H) ; 2B03 OR A ; 2B06 JR Z,02AECH ; 2B07 LD A,(065B4H) ; 2B09 OR A ; 2B0C JR NZ,02B18H ; 2B0D LD A,(0662FH) ; 2B0F OR A ; 2B12 JP Z,02C5DH ; 2B13 JR 02B1DH ; 2B16 AND 080H ; 2B18 CALL NZ,0134FH ; 2B1A CALL 00B6DH ; 2B1D Write 'TARJETA INVALIDA | CUELGUE' JP 02C85H ; 2B20 CP 003H ; 2B23 JP NZ,02B98H ; 2B25 DI ; 2B28 LD HL,06389H ; 2B29 LD (063CBH),HL ; 2B2C INC HL ; 2B2F LD (063C9H),HL ; 2B30 LD HL,061E1H ; 2B33 LD (061F7H),HL ; 2B36 INC HL ; 2B39 LD (061F5H),HL ; 2B3A XOR A ; 2B3D LD (065C1H),A ; 2B3E Buffer #7 Counter LD (065BBH),A ; 2B41 Buffer #2 Counter (Numero Marcado) EI ; 2B44 CALL 03B8FH ; 2B45 (P41.3) = 0 (Cuelga) CALL 03BC6H ; 2B48 No tone on DTMF chip's output LD A,(0642EH) ; 2B4B CP 000H ; 2B4E JP Z,02C95H ; 2B50 CP 008H ; 2B53 JP Z,02C95H ; 2B55 CALL 00CACH ; 2B58 Write 'DESCUELGUE | LLAMADA ENTRANTE' LD A,(0641EH) ; 2B5B Timer B OR A ; 2B5E CALL Z,03CB4H ; 2B5F Prende el Bit 7 del Port 61 y 641E=2 CALL 03BB3H ; 2B62 Espera IRQ y vuelve LD A,(065EDH) ; 2B65 OR A ; 2B68 JP NZ,02C90H ; 2B69 CALL 03DA3H ; 2B6C Get Key Pressed Carry On Error CALL NC,00CACH ; 2B6F Write 'DESCUELGUE | LLAMADA ENTRANTE' LD A,(06449H) ; 2B72 OR A ; 2B75 JR Z,02B5BH ; 2B76 LD A,001H ; 2B78 LD (065E5H),A ; 2B7A LD A,00CH ; 2B7D CALL 03F5BH ; 2B7F Put Buffer #7 (Internal Commands) CALL 00BDDH ; 2B82 Write 'CUELGUE DESPUES|DE LA LLAMADA' LD DE,00E11H ; 2B85 LD (06427H),DE ; 2B88 Timer 4W LD (06425H),DE ; 2B8C Timer 3W LD A,006H ; 2B90 LD (0644BH),A ; 2B92 JP 02CA7H ; 2B95 RET XOR A ; 2B98 LD (065E5H),A ; 2B99 CALL 02CA8H ; 2B9C Case (642Eh): 'DESC','EMERG','FUERA' CALL 03BB3H ; 2B9F Espera IRQ y vuelve LD A,(0641AH) ; 2BA2 Timer 2B CP 001H ; 2BA5 JR Z,02BB0H ; 2BA7 LD A,(06652H) ; 2BA9 Codigo de Idioma CP 000H ; 2BAC JR Z,02BC5H ; 2BAE LD A,(0642EH) ; 2BB0 CP 000H ; 2BB3 si (642E)=0 o (6449)=0 va a 2BC2h JR NZ,02BC2H ; 2BB5 LD A,(06449H) ; 2BB7 OR A ; 2BBA JR Z,02BC2H ; 2BBB sino ... CALL 03DA3H ; 2BBD Get Key Pressed Carry On Error JR C,02BC5H ; 2BC0 CALL 00D9BH ; 2BC2 Refresca el Display LD HL,01645H ; 2BC5 LD (06429H),HL ; 2BC8 Fuera de servicio Timer = 1645h = 5701d LD A,(0644AH) ; 2BCB OR A ; 2BCE CALL NZ,0167EH ; 2BCF (Puerta Abierta) LD A,(065CDH) ; 2BD2 OR A ; 2BD5 JP NZ,02CA2H ; 2BD6 LD A,(065EDH) ; 2BD9 OR A ; 2BDC JP NZ,02C98H ; 2BDD LD A,(06449H) ; 2BE0 OR A ; 2BE3 JR NZ,02BEEH ; 2BE4 CALL 03DA3H ; 2BE6 Get Key Pressed Carry On Error CALL NC,02CA8H ; 2BE9 Case (642Eh): 'DESC','EMERG','FUERA' JR 02B9FH ; 2BEC LD A,001H ; 2BEE LD (065E5H),A ; 2BF0 LD A,(0642EH) ; 2BF3 CP 000H ; 2BF6 JP Z,02B9FH ; 2BF8 CP 008H ; 2BFB JP Z,02C95H ; 2BFD CALL 03BBFH ; 2C00 Play 701.3 Hz on DTMF chip LD A,014H ; 2C03 Timer de inserte tarjeta LD (06419H),A ; 2C05 Timer B LD A,(0642EH) ; 2C08 Timer CP 004H ; 2C0B JR NZ,02C14H ; 2C0D CALL 00AFDH ; 2C0F Write 'NUMERO MARCADO | el numero' JR 02C17H ; 2C12 CALL 00AEFH ; 2C14 Write 'INSERTE TARJETA | ' CALL 03BB3H ; 2C17 Espera IRQ y vuelve LD A,(0641AH) ; 2C1A TIMER 2B CP 001H ; 2C1D JR NZ,02C24H ; 2C1F CALL 00D9BH ; 2C21 Reimprime 'INSERTE..' 641A = 1 LD A,(065CDH) ; 2C24 OR A ; 2C27 JP NZ,02CA2H ; 2C28 ; Cancelar, salir, terminal, finalizar LD A,(065EDH) ; 2C2B (065EDH) OR A ; 2C2E JR NZ,02C98H ; 2C2F LD A,(06419H) ; 2C31 Timer B OR A ; 2C34 JR Z,02C98H ; 2C35 ; TimeOut? LD A,(0642EH) ; 2C37 (0642Eh) CP 002H ; 2C3A JR NZ,02C4EH ; 2C3C LD A,(06448H) ; 2C3E (06448H) OR A ; 2C41 JR Z,02C4EH ; 2C42 LD A,001H ; 2C44 LD (065EAH),A ; 2C46 (065EAH) CALL 03BC6H ; 2C49 No tone on DTMF chip's output JR 02CA7H ; 2C4C CALL 03DA3H ; 2C4E Get Key Pressed Carry On Error JR C,02C17H ; 2C51 Buffer Vacio? Trata de leer otra vez CP _*_KEY ; 2C53 JR NC,02C08H ; 2C55 A >= ':' ? Numero marcado LD (0643AH),A ; 2C57 CALL 03BC6H ; 2C5A No tone on DTMF chip's output LD A,(06606H) ; 2C5D (=6606h)=3 => FICHAS =/=> PULSOS CP 001H ; 2C60 JR Z,02C6FH ; 2C62 CP 003H ; 2C64 JR Z,02C6FH ; 2C66 LD A,000H ; 2C68 CALL 03F5BH ; 2C6A Put Buffer #7 (Internal Commands) JR 02C72H ; 2C6D CALL 0137BH ; 2C6F LD DE,00E11H ; 2C72 LD (06425H),DE ; 2C75 Timer 3W LD A,005H ; 2C79 LD (0644BH),A ; 2C7B LD A,010H ; 2C7E LD (065EAH),A ; 2C80 JR 02CA7H ; 2C83 RET LD A,008H ; 2C85 CALL 03F5BH ; 2C87 Put Buffer #7 (Internal Commands) JR 02C98H ; 2C8A XOR A ; 2C8C LD (065CDH),A ; 2C8D LD A,008H ; 2C90 CALL 03F5BH ; 2C92 Put Buffer #7 (Internal Commands) CALL 00D15H ; 2C95 Actualiza los Pulsos en el Display CALL 03BC6H ; 2C98 No tone on DTMF chip's output LD A,007H ; 2C9B LD (0644BH),A ; 2C9D JR 02CA7H ; 2CA0 RET LD A,003H ; 2CA2 LD (065EAH),A ; 2CA4 RET ; 2CA7 LD A,(0642EH) ; 2CA8 Case (642Eh): 'DESC','EMERG','FUERA' CP 004H ; 2CAB JR Z,02CBCH ; 2CAD CP 000H ; 2CAF JR Z,02CC1H ; 2CB1 CP 008H ; 2CB3 JR Z,02CC1H ; 2CB5 CALL 00C9EH ; 2CB7 Write 'DESCUELGUE' JR 02CC4H ; 2CBA CALL 00CCCH ; 2CBC Write ' ( ) SOLO | EMERGENCIAS' JR 02CC4H ; 2CBF CALL 00ADFH ; 2CC1 Write '( ) FUERA | DE SERVICIO' RET ; 2CC4 LD BC,0050CH ; 2CC5 LD (BC),A ; 2CC8 ADD HL,BC ; 2CC9 LD BC,00103H ; 2CCA INC B ; 2CCD LD BC,00104H ; 2CCE LD BC,00706H ; 2CD1 RLCA ; 2CD4 ; Interrupt #1 PUSH AF ; 2CD5 PUSH BC ; 2CD6 PUSH DE ; 2CD7 PUSH HL ; 2CD8 PUSH IX ; 2CD9 PUSH IY ; 2CDB OUT (008H),A ; 2CDD LD IX,06417H ; 2CDF LD DE,06418H ; 2CE3 LD A,(IX+000H) ; 2CE6 CP 000H ; 2CE9 JR Z,02CF1H ; 2CEB DEC A ; 2CED LD (IX+000H),A ; 2CEE PUSH IX ; 2CF1 POP HL ; 2CF3 SBC HL,DE ; 2CF4 JR Z,02CFCH ; 2CF6 INC IX ; 2CF8 JR 02CE6H ; 2CFA CALL 02D8DH ; 2CFC LD A,(07C00H) ; 2CFF BIT 0,A ; 2D02 JR Z,02D48H ; 2D04 LD A,(065DBH) ; 2D06 OR A ; 2D09 JR Z,02D48H ; 2D0A LD A,(06417H) ; 2D0C OR A ; 2D0F CALL NZ,0408FH ; 2D10 (6418h)=0Ch JR NZ,02D48H ; 2D13 LD A,(06445H) ; 2D15 CP 001H ; 2D18 JR Z,02D3BH ; 2D1A LD A,(065BBH) ; 2D1C Buffer #2 Counter (Numero Marcado) OR A ; 2D1F JR Z,02D48H ; 2D20 CALL 03DE8H ; 2D22 Get Buffer #2 (Numero Marcado) AND 00FH ; 2D25 CALL 03BCDH ; 2D27 Dial Number A in DTMF LD A,001H ; 2D2A LD (065C5H),A ; 2D2C LD A,003H ; 2D2F LD (06417H),A ; 2D31 LD A,001H ; 2D34 LD (06445H),A ; 2D36 JR 02D48H ; 2D39 LD A,000H ; 2D3B LD (06445H),A ; 2D3D CALL 03BE7H ; 2D40 Turn Off DTMF Tone & Output LD A,003H ; 2D43 LD (06417H),A ; 2D45 LD A,(06602H) ; 2D48 ; Flag externo que indica comienzo de ; lectura . ? . OR A ; 2D4B JR NZ,02D5EH ; 2D4C LD A,(065BDH) ; 2D4E Buffer #6 Counter OR A ; 2D51 JR Z,02D5EH ; 2D52 CALL 03EFCH ; 2D54 Get Buffer #6 Carry On Error OUT (068H),A ; 2D57 LD A,001H ; 2D59 LD (06602H),A ; 2D5B LD A,(06603H) ; 2D5E OR A ; 2D61 JR NZ,02D7BH ; 2D62 LD A,(06604H) ; 2D64 CP 000H ; 2D67 JR NZ,02D7BH ; 2D69 LD A,(065BFH) ; 2D6B Buffer #4 Counter OR A ; 2D6E JR Z,02D7BH ; 2D6F CALL 03E72H ; 2D71 Get Buffer #4 Carry On Error OUT (048H),A ; 2D74 LD A,001H ; 2D76 LD (06603H),A ; 2D78 LD A,(06416H) ; 2D7B Timer 6BB OR A ; 2D7E CALL NZ,0408FH ; 2D7F (6418h)=0Ch POP IY ; 2D82 POP IX ; 2D84 POP HL ; 2D86 POP DE ; 2D87 POP BC ; 2D88 POP AF ; 2D89 EI ; 2D8A RETI ; 2D8B LD A,(06444H) ; 2D8D CP 001H ; 2D90 JP Z,02E03H ; 2D92 CP 002H ; 2D95 JP Z,02E52H ; 2D97 LD A,(065C0H) ; 2D9A Buffer #8 Counter OR A ; 2D9D JR Z,02DB4H ; 2D9E CALL 03F89H ; 2DA0 Get Buffer #8 Carry On Error CP 055H ; 2DA3 JP NZ,02E6AH ; 2DA5 RET LD A,001H ; 2DA8 LD (06444H),A ; 2DAA XOR A ; 2DAD LD (06594H),A ; 2DAE JP 02E6AH ; 2DB1 RET LD A,(06416H) ; 2DB4 Timer 6BB OR A ; 2DB7 JP NZ,02E6AH ; 2DB8 RET LD A,(065CBH) ; 2DBB LD B,A ; 2DBE LD A,(065C1H) ; 2DBF Buffer #7 Counter OR B ; 2DC2 LD B,A ; 2DC3 LD A,(065D1H) ; 2DC4 OR B ; 2DC7 JR NZ,02DE0H ; 2DC8 LD A,(07C00H) ; 2DCA BIT 0,A ; 2DCD JP NZ,02E6AH ; 2DCF RET LD A,(065BBH) ; 2DD2 Buffer #2 Counter (Numero Marcado) OR A ; 2DD5 JP Z,02E6AH ; 2DD6 RET LD A,(065DBH) ; 2DD9 OR A ; 2DDC JP Z,02E6AH ; 2DDD RET LD A,(06592H) ; 2DE0 OR A ; 2DE3 JP NZ,02E6AH ; 2DE4 RET XOR A ; 2DE7 LD (06591H),A ; 2DE8 LD A,001H ; 2DEB LD (06590H),A ; 2DED LD A,0AAH ; 2DF0 LD HL,0657CH ; 2DF2 LD (HL),A ; 2DF5 (657Ch)=AAh LD A,001H ; 2DF6 LD (0657BH),A ; 2DF8 LD A,002H ; 2DFB LD (06444H),A ; 2DFD JP 02E6AH ; 2E00 RET LD A,(065C0H) ; 2E03 Buffer #8 Counter OR A ; 2E06 JR Z,02E42H ; 2E07 CALL 03F89H ; 2E09 Get Buffer #8 Carry On Error LD B,A ; 2E0C LD A,(06594H) ; 2E0D OR A ; 2E10 JR NZ,02E19H ; 2E11 LD A,B ; 2E13 LD (06595H),A ; 2E14 JR 02E25H ; 2E17 XOR A ; 2E19 LD D,A ; 2E1A LD HL,06595H ; 2E1B LD A,(06594H) ; 2E1E LD E,A ; 2E21 ADD HL,DE ; 2E22 LD A,B ; 2E23 LD (HL),A ; 2E24 LD A,(06595H) ; 2E25 LD B,A ; 2E28 LD A,(06594H) ; 2E29 CP B ; 2E2C JR Z,02E38H ; 2E2D LD A,(06594H) ; 2E2F INC A ; 2E32 LD (06594H),A ; 2E33 JR 02E6AH ; 2E36 RET CALL 02E6BH ; 2E38 LD A,000H ; 2E3B LD (06444H),A ; 2E3D JR 02E6AH ; 2E40 RET LD A,(06416H) ; 2E42 Timer 6BB OR A ; 2E45 JR NZ,02E6AH ; 2E46 RET CALL 031FCH ; 2E48 LD A,000H ; 2E4B LD (06444H),A ; 2E4D JR 02E6AH ; 2E50 RET LD A,(06591H) ; 2E52 OR A ; 2E55 JR NZ,02E61H ; 2E56 LD A,(06416H) ; 2E58 Timer 6BB OR A ; 2E5B JR NZ,02E6AH ; 2E5C RET CALL 03034H ; 2E5E XOR A ; 2E61 LD (06590H),A ; 2E62 LD A,000H ; 2E65 LD (06444H),A ; 2E67 RET ; 2E6A LD A,(06595H) ; 2E6B LD B,A ; 2E6E XOR A ; 2E6F LD D,A ; 2E70 LD HL,02CC5H ; 2E71 LD A,(06596H) ; 2E74 LD E,A ; 2E77 ADD HL,DE ; 2E78 LD A,(HL) ; 2E79 CP B ; 2E7A CALL NZ,031FCH ; 2E7B JP NZ,02F75H ; 2E7E LD HL,06596H ; 2E81 LD A,(HL) ; 2E84 INC HL ; 2E85 CP 002H ; 2E86 JR Z,02EA9H ; 2E88 CP 004H ; 2E8A JR Z,02ECCH ; 2E8C CP 005H ; 2E8E JR Z,02EDFH ; 2E90 CP 007H ; 2E92 JR Z,02EF2H ; 2E94 CP 009H ; 2E96 JR Z,02F0FH ; 2E98 CP 00BH ; 2E9A JR Z,02F16H ; 2E9C CP 00FH ; 2E9E JP Z,02F39H ; 2EA0 CALL 031FCH ; 2EA3 JP 02F75H ; 2EA6 LD A,(065C3H) ; 2EA9 LD B,A ; 2EAC LD A,(065C2H) ; 2EAD OR B ; 2EB0 JP Z,02F75H ; 2EB1 LD A,(065C4H) ; 2EB4 CP 000H ; 2EB7 JP NZ,02F75H ; 2EB9 LD A,001H ; 2EBC LD (065C4H),A ; 2EBE LD DE,065B4H ; 2EC1 LD BC,00004H ; 2EC4 LDIR ; 2EC7 JP 02F75H ; 2EC9 LD A,001H ; 2ECC LD (065C6H),A ; 2ECE CALL 02FE0H ; 2ED1 LD A,(0644BH) ; 2ED4 CP 005H ; 2ED7 CALL Z,03BA1H ; 2ED9 (P41.3) = 1 (Descuelga) JP 02F75H ; 2EDC LD A,001H ; 2EDF LD (065C7H),A ; 2EE1 LD A,(065C6H) ; 2EE4 .... OR A ; 2EE7 JR NZ,02EEFH ; 2EE8 ; LD A,001H ; 2EEA LD (065EDH),A ; 2EEC JP 02F75H ; 2EEF LD A,001H ; 2EF2 LD (065C9H),A ; 2EF4 LD (065EDH),A ; 2EF7 LD A,000H ; 2EFA LD (065CDH),A ; 2EFC flag en cero LD HL,06389H ; 2EFF LD (063CBH),HL ; 2F02 INC HL ; 2F05 LD (063C9H),HL ; 2F06 XOR A ; 2F09 LD (065C1H),A ; 2F0A Buffer #7 Counter JR 02F75H ; 2F0D LD A,001H ; 2F0F LD (065CBH),A ; 2F11 JR 02F75H ; 2F14 LD A,(07C01H) ; 2F16 BIT 0,A ; 2F19 JP Z,02F75H ; 2F1B LD A,(0644BH) ; 2F1E CP 006H ; 2F21 JP Z,02F75H ; 2F23 LD A,(0642EH) ; 2F26 CP 002H ; 2F29 JR Z,02F32H ; 2F2B CP 004H ; 2F2D JP NZ,02F75H ; 2F2F LD A,001H ; 2F32 LD (065CDH),A ; 2F34 ; flag en uno JR 02F75H ; 2F37 LD DE,0642EH ; 2F39 LD A,(HL) ; 2F3C LD (DE),A ; 2F3D (HL) -> 642E LD (06431H),A ; 2F3E CP 000H ; 2F41 JR NZ,02F4CH ; 2F43 XOR A ; 2F45 LD (065B8H),A ; 2F46 LD (065B9H),A ; 2F49 (65B8) = 0000 INC HL ; 2F4C LD DE,07C00H ; 2F4D LD C,00AH ; 2F50 LD B,066H ; 2F52 LD A,002H ; 2F54 PUSH AF ; 2F56 LD A,(HL) ; 2F57 OUT (C),B ; 2F58 LD (DE),A ; 2F5A INC HL ; 2F5B INC DE ; 2F5C POP AF ; 2F5D DEC A ; 2F5E JR NZ,02F56H ; 2F5F LD DE,065B5H ; 2F61 LD BC,00003H ; 2F64 LDIR ; 2F67 LD A,001H ; 2F69 LD (065D1H),A ; 2F6B LD (065EDH),A ; 2F6E XOR A ; 2F71 LD (0641CH),A ; 2F72 Timer B RET ; 2F75 LD HL,(065D2H) ; 2F76 LD A,L ; 2F79 CP 004H ; 2F7A JR NZ,02FA1H ; 2F7C LD A,H ; 2F7E CP 000H ; 2F7F JR NZ,02FA1H ; 2F81 LD HL,(065D6H) ; 2F83 LD A,L ; 2F86 CP 004H ; 2F87 JR NZ,02FA1H ; 2F89 LD A,H ; 2F8B CP 000H ; 2F8C JR NZ,02FA1H ; 2F8E LD HL,00001H ; 2F90 LD (065D6H),HL ; 2F93 LD (065D2H),HL ; 2F96 LD A,001H ; 2F99 LD (065DAH),A ; 2F9B JP 02FDFH ; 2F9E LD HL,(065D8H) ; 2FA1 LD BC,03333H ; 2FA4 LD A,H ; 2FA7 CP B ; 2FA8 JR C,02FB6H ; 2FA9 JR NZ,02FB1H ; 2FAB LD A,L ; 2FAD CP C ; 2FAE JR C,02FB6H ; 2FAF LD HL,0FFFFH ; 2FB1 JR 02FBCH ; 2FB4 LD D,H ; 2FB6 LD E,L ; 2FB7 ADD HL,DE ; 2FB8 ADD HL,DE ; 2FB9 ADD HL,DE ; 2FBA ADD HL,DE ; 2F3BB LD (065D8H),HL ; 2FBC LD HL,(065D4H) ; 2FBF LD A,H ; 2FC2 CP B ; 2FC3 JR C,02FD1H ; 2FC4 JR NZ,02FCCH ; 2FC6 LD A,L ; 2FC8 CP C ; 2FC9 JR C,02FD1H ; 2FCA LD HL,0FFFFH ; 2FCC JR 02FD7H ; 2FCF LD D,H ; 2FD1 LD E,L ; 2FD2 ADD HL,DE ; 2FD3 ADD HL,DE ; 2FD4 ADD HL,DE ; 2FD5 ADD HL,DE ; 2FD6 LD (065D4H),HL ; 2FD7 LD A,002H ; 2FDA LD (065DAH),A ; 2FDC RET ; 2FDF LD D,H ; 2FE0 LD E,L ; 2FE1 LD A,(065DAH) ; 2FE2 CP 001H ; 2FE5 JR Z,03008H ; 2FE7 CP 002H ; 2FE9 JR NZ,03021H ; 2FEB LD A,(HL) ; 2FED CP 004H ; 2FEE JR NZ,03021H ; 2FF0 INC HL ; 2FF2 LD A,(HL) ; 2FF3 CP 000H ; 2FF4 JR NZ,03021H ; 2FF6 INC HL ; 2FF8 INC HL ; 2FF9 INC HL ; 2FFA LD A,(HL) ; 2FFB CP 004H ; 2FFC JR NZ,03021H ; 2FFE INC HL ; 3000 LD A,(HL) ; 3001 CP 000H ; 3002 JR NZ,03021H ; 3004 JR 03033H ; 3006 LD A,(HL) ; 3008 CP 004H ; 3009 JR NZ,03033H ; 300B INC HL ; 300D LD A,(HL) ; 300E CP 000H ; 300F JR NZ,03033H ; 3011 INC HL ; 3013 INC HL ; 3014 INC HL ; 3015 LD A,(HL) ; 3016 CP 004H ; 3017 JR NZ,03033H ; 3019 INC HL ; 301B LD A,(HL) ; 301C CP 000H ; 301D JR NZ,03033H ; 301F LD H,D ; 3021 LD L,E ; 3022 LD DE,065D2H ; 3023 LD BC,00008H ; 3026 LDIR ; 3029 LD A,(06606H) ; 302B (=6606h)=3 => FICHAS =/=> PULSOS CP 003H ; 302E CALL Z,02F76H ; 3030 RET ; 3033 LD HL,0657CH ; 3034 LD A,(065CBH) ; 3037 OR A ; 303A JR Z,0305EH ; 303B LD A,005H ; 303D LD (0657BH),A ; 303F DEC A ; 3042 LD (HL),A ; 3043 INC HL ; 3044 LD A,00AH ; 3045 LD (HL),A ; 3047 INC HL ; 3048 LD A,(06612H) ; 3049 LD (HL),A ; 304C INC HL ; 304D LD A,(06613H) ; 304E LD (HL),A ; 3051 INC HL ; 3052 LD A,(06619H) ; 3053 LD (HL),A ; 3056 XOR A ; 3057 LD (065CBH),A ; 3058 JP 031FBH ; 305B RET LD A,(065D1H) ; 305E OR A ; 3061 JP NZ,031B9H ; 3062 LD A,(065C1H) ; 3065 Buffer #7 Counter OR A ; 3068 JR Z,03097H ; 3069 CALL 03F41H ; 306B Get Buffer #7 Carry On Error LD HL,0657CH ; 306E CP 000H ; 3071 JP Z,030C9H ; 3073 Command 00 30C9 CP 001H ; 3076 JP Z,030FFH ; 3078 Command 01 30FF CP 006H ; 307B JP Z,03124H ; 307D Command 06 3124 CP 008H ; 3080 JP Z,03146H ; 3082 Command 08 3146 CP 00CH ; 3085 JP Z,0317DH ; 3087 Command 0C 317D CP 00EH ; 308A JP Z,0318EH ; 308C Command 0E 318E CP 00DH ; 308F JP Z,031B9H ; 3091 Command 0D 31B9 JP 031FBH ; 3094 RET LD A,(07C00H) ; 3097 BIT 0,A ; 309A JP NZ,031FBH ; 309C RET LD A,(065DBH) ; 309F OR A ; 30A2 JP Z,031FBH ; 30A3 RET LD A,(065BBH) ; 30A6 Buffer #2 Counter (Numero Marcado) OR A ; 30A9 JP Z,031FBH ; 30AA RET LD A,003H ; 30AD LD (0657BH),A ; 30AF DEC A ; 30B2 LD (HL),A ; 30B3 INC HL ; 30B4 LD A,003H ; 30B5 LD (HL),A ; 30B7 INC HL ; 30B8 CALL 03DE8H ; 30B9 Get Buffer #2 (Numero Marcado) AND 00FH ; 30BC OR 0F0H ; 30BE LD (HL),A ; 30C0 LD A,001H ; 30C1 LD (065C5H),A ; 30C3 JP 031FBH ; 30C6 RET ; Command 00 LD A,001H ; 30C9 LD (065C2H),A ; 30CB LD A,(06606H) ; 30CE (=6606h)=3 => FICHAS =/=> PULSOS CP 000H ; 30D1 JR NZ,030E3H ; 30D3 LD A,002H ; 30D5 LD (0657BH),A ; 30D7 (657Bh)=02h DEC A ; 30DA LD (HL),A ; 30DB (657Ch)=01h INC HL ; 30DC LD A,000H ; 30DD LD (HL),A ; 30DF (657Dh)=00h JP 031FBH ; 30E0 RET LD A,00EH ; 30E3 (6606h)!=0 LD (0657BH),A ; 30E5 (657Bh)=0Eh (14d) DEC A ; 30E8 LD (HL),A ; 30E9 (657Ch)=0Dh (13d) INC HL ; 30EA LD A,000H ; 30EB LD (HL),A ; 30ED (657Dh)=00h INC HL ; 30EE LD DE,06624H ; 30EF EX DE,HL ; 30F2 DE=657Eh LD BC,0000BH ; 30F3 LDIR ; 30F6 LD A,(0662FH) ; 30F8 LD (DE),A ; 30FB JP 031FBH ; 30FC RET ; Command 01 LD A,001H ; 30FF LD (065C3H),A ; 3101 LD A,00EH ; 3104 LD (0657BH),A ; 3106 DEC A ; 3109 LD (HL),A ; 310A (657Ch) INC HL ; 310B LD A,001H ; 310C LD (HL),A ; 310E (657Dh) INC HL ; 310F LD DE,06624H ; 3110 EX DE,HL ; 3113 DE=657Eh LD BC,0000BH ; 3114 LDIR ; 3117 LD A,(0661BH) ; 3119 LD (DE),A ; 311C XOR A ; 311D LD (0661BH),A ; 311E JP 031FBH ; 3121 RET ; Command 06 LD A,001H ; 3124 LD (065C8H),A ; 3126 (65C8h)=01h LD A,000H ; 3129 LD (065C6H),A ; 312B (65C6h)=00h LD A,004H ; 312E LD (0657BH),A ; 3130 (657Bh)=04h DEC A ; 3133 LD (HL),A ; 3134 (657Ch)=03h INC HL ; 3135 LD A,006H ; 3136 LD (HL),A ; 3138 (657Dh)=06h INC HL ; 3139 LD A,(0660EH) ; 313A LD (HL),A ; 313D (657Eh)=(660Eh) INC HL ; 313E LD A,(0660FH) ; 313F LD (HL),A ; 3142 (657Fh)=(660Fh) JP 031FBH ; 3143 RET ; Command 08 LD A,001H ; 3146 LD (065CAH),A ; 3148 LD A,005H ; 314B LD (0657BH),A ; 314D DEC A ; 3150 LD (HL),A ; 3151 (657Ch) INC HL ; 3152 LD A,008H ; 3153 LD (HL),A ; 3155 (657Dh) INC HL ; 3156 LD A,(0660EH) ; 3157 LD (HL),A ; 315A (657Eh) INC HL ; 315B LD A,(0660FH) ; 315C LD (HL),A ; 315F (657Fh) INC HL ; 3160 LD A,(0662FH) ; 3161 LD B,A ; 3164 LD A,(0661BH) ; 3165 OR B ; 3168 LD (HL),A ; 3169 (6580h) LD BC,00006H ; 316A LD HL,06624H ; 316D LD DE,06665H ; 3170 LDIR ; 3173 LD A,(0662EH) ; 3175 LD (0666FH),A ; 3178 JR 031FBH ; 317B RET ; Command 0C XOR A ; 317D LD (065CDH),A ; 317E LD A,002H ; 3181 LD (0657BH),A ; 3183 DEC A ; 3186 LD (HL),A ; 3187 INC HL ; 3188 LD A,00CH ; 3189 LD (HL),A ; 318B JR 031FBH ; 318C RET ; Command 0D LD A,008H ; 318E LD (0657BH),A ; 3190 DEC A ; 3193 LD (HL),A ; 3194 INC HL ; 3195 LD A,00EH ; 3196 LD (HL),A ; 3198 INC HL ; 3199 LD A,001H ; 319A LD (HL),A ; 319C INC HL ; 319D LD A,012H ; 319E LD (HL),A ; 31A0 INC HL ; 31A1 LD A,021H ; 31A2 LD (HL),A ; 31A4 INC HL ; 31A5 LD A,(0642EH) ; 31A6 LD (HL),A ; 31A9 INC HL ; 31AA LD A,003H ; 31AB LD (HL),A ; 31AD INC HL ; 31AE LD A,00DH ; 31AF LD (HL),A ; 31B1 LD A,020H ; 31B2 LD (0641CH),A ; 31B4 Timer B JR 031FBH ; 31B7 RET ; Command 0E LD A,00AH ; 31B9 LD (0657BH),A ; 31BB DEC A ; 31BE LD (HL),A ; 31BF INC HL ; 31C0 LD A,00DH ; 31C1 LD (HL),A ; 31C3 INC HL ; 31C4 LD DE,0642FH ; 31C5 EX DE,HL ; 31C8 LD BC,00003H ; 31C9 LDIR ; 31CC EX DE,HL ; 31CE LD A,(07C00H) ; 31CF LD (HL),A ; 31D2 INC HL ; 31D3 LD A,(07C01H) ; 31D4 LD (HL),A ; 31D7 INC HL ; 31D8 LD A,001H ; 31D9 LD (HL),A ; 31DB INC HL ; 31DC LD A,012H ; 31DD LD (HL),A ; 31DF INC HL ; 31E0 LD A,021H ; 31E1 LD (HL),A ; 31E3 XOR A ; 31E4 LD (065D1H),A ; 31E5 LD HL,0642FH ; 31E8 LD DE,06432H ; 31EB LD BC,00003H ; 31EE LDIR ; 31F1 LD A,(0642CH) ; 31F3 RES 5,A ; 31F6 LD (0642CH),A ; 31F8 RET ; 31FB PUSH AF ; 31FC LD A,(06596H) ; 31FD CALL 03FBCH ; 3200 Put Log Buffer LD A,(06595H) ; 3203 CALL 03FBCH ; 3206 Put Log Buffer LD A,(06594H) ; 3209 CALL 03FBCH ; 320C Put Log Buffer LD A,021H ; 320F CALL 03FBCH ; 3211 Put Log Buffer POP AF ; 3214 RET ; 3215 ; Interrupt #2 PUSH AF ; 3216 PUSH BC ; 3217 PUSH DE ; 3218 PUSH HL ; 3219 PUSH IX ; 321A PUSH IY ; 321C OUT (004H),A ; 321E OUT (00CH),A ; 3220 LD C,004H ; 3222 LD IX,06436H ; 3224 CALL 0402AH ; 3228 (IX)=(P4)-(IX+1) , (IX+1) = (P4) LD IX,06411H ; 322B LD DE,06416H ; 322F LD A,(IX+000H) ; 3232 CP 000H ; 3235 JR Z,0323DH ; 3237 DEC A ; 3239 LD (IX+000H),A ; 323A PUSH IX ; 323D POP HL ; 323F SBC HL,DE ; 3240 JR Z,03248H ; 3242 INC IX ; 3244 JR 03232H ; 3246 Decrementa los Timers 1BB..6BB LD A,(06592H) ; 3248 OR A ; 324B JR NZ,03255H ; 324C LD A,(0657BH) ; 324E OR A ; 3251 JP NZ,03362H ; 3252 XOR A ; 3255 LD HL,(06E80H) ; 3256 LD B,000H ; 3259 LD A,(06436H) ; 325B LD C,A ; 325E ADC HL,BC ; 325F LD (06E80H),HL ; 3261 LD A,(06414H) ; 3264 Timer 4BB OR A ; 3267 JP NZ,03362H ; 3268 ; Timer 4BB == 0 LD A,(06415H) ; 326B Timer 5BB OR A ; 326E JP NZ,03362H ; 326F ; Timers 4BB==0, 5BB == 0 LD A,(06592H) ; 3272 CP 001H ; 3275 JR Z,032C7H ; 3277 CP 002H ; 3279 JP Z,032F6H ; 327B CP 003H ; 327E JP Z,03344H ; 3280 CP 010H ; 3283 JP Z,0335DH ; 3285 LD A,(06416H) ; 3288 Timer 6BB CP 028H ; 328B JR NC,0329FH ; 328D ; Timer BB6 < 40d LD A,(06436H) ; 328F CP 016H ; 3292 JP C,03362H ; 3294 CP 052H ; 3297 JR NC,032B0H ; 3299 LD A,002H ; 329B JR 032B2H ; 329D LD A,(06436H) ; 329F CP 04DH ; 32A2 JP C,03362H ; 32A4 CP 052H ; 32A7 JP NC,03362H ; 32A9 LD A,002H ; 32AC JR 032B2H ; 32AE LD A,001H ; 32B0 LD (06415H),A ; 32B2 Timer 5BB = 01h LD A,001H ; 32B5 LD (06592H),A ; 32B7 LD A,(06436H) ; 32BA LD C,A ; 32BD LD B,000H ; 32BE LD (06E80H),BC ; 32C0 JP 03362H ; 32C4 CALL 03473H ; 32C7 (6E80h)<76h? A=1:A=0 Carry=A JR C,032E9H ; 32CA LD A,050H ; 32CC LD (06416H),A ; 32CE Timer 6BB = 50h LD A,002H ; 32D1 LD (06592H),A ; 32D3 LD A,003H ; 32D6 LD (06415H),A ; 32D8 Timer 5BB = 03h LD A,008H ; 32DB LD (06E86H),A ; 32DD XOR A ; 32E0 LD (06E82H),A ; 32E1 LD (06E84H),A ; 32E4 JR 032EEH ; 32E7 LD A,000H ; 32E9 LD (06592H),A ; 32EB LD HL,00000H ; 32EE LD (06E80H),HL ; 32F1 JR 03362H ; 32F4 LD A,(06E86H) ; 32F6 OR A ; 32F9 JR Z,03315H ; 32FA CALL 03473H ; 32FC (6E80h)<76h? A=1:A=0 Carry=A LD B,A ; 32FF LD A,(06E82H) ; 3300 RR A ; 3303 LD (06E82H),A ; 3305 LD A,B ; 3308 OR A ; 3309 JR Z,03313H ; 330A LD A,(06E84H) ; 330C INC A ; 330F LD (06E84H),A ; 3310 JR 03330H ; 3313 CALL 03473H ; 3315 (6E80h)<76h? A=1:A=0 Carry=A LD B,A ; 3318 LD A,(06E84H) ; 3319 CPL ; 331C AND 001H ; 331D CP B ; 331F JR NZ,03326H ; 3320 LD A,003H ; 3322 JR 0332DH ; 3324 LD A,001H ; 3326 CALL 03481H ; 3328 LD A,010H ; 332B LD (06592H),A ; 332D LD HL,00000H ; 3330 LD (06E80H),HL ; 3333 LD A,003H ; 3336 LD (06415H),A ; 3338 Timer BB5 LD A,(06E86H) ; 333B DEC A ; 333E LD (06E86H),A ; 333F JR 03362H ; 3342 CALL 03473H ; 3344 (6E80h)<76h? A=1:A=0 Carry=A JR NC,03351H ; 3347 LD A,(06E82H) ; 3349 CALL 03FA3H ; 334C Put Buffer #8 Carry On Error JR 03356H ; 334F LD A,002H ; 3351 CALL 03481H ; 3353 LD A,000H ; 3356 LD (06592H),A ; 3358 JR 03362H ; 335B LD A,000H ; 335D LD (06592H),A ; 335F LD A,(06592H) ; 3362 OR A ; 3365 JP NZ,033DBH ; 3366 LD A,(06414H) ; 3369 Timer BB4 OR A ; 336C JR NZ,033C2H ; 336D LD A,(06E87H) ; 336F OR A ; 3372 JR NZ,033BDH ; 3373 LD A,(0657BH) ; 3375 OR A ; 3378 JR Z,033DBH ; 3379 CALL 03CF1H ; 337B (P41.7)=1, (P80)=90h LD A,(0657AH) ; 337E LD C,A ; 3381 INC A ; 3382 LD (0657AH),A ; 3383 LD B,000H ; 3386 LD HL,0657CH ; 3388 XOR A ; 338B ADC HL,BC ; 338C LD A,(HL) ; 338E LD (06E83H),A ; 338F LD B,008H ; 3392 LD C,000H ; 3394 SRL A ; 3396 JR C,0339BH ; 3398 INC C ; 339A DJNZ 03396H ; 339B LD A,C ; 339D A=Bits en 1 de A CPL ; 339E AND 001H ; 339F LD (06E85H),A ; 33A1 LD A,000H ; 33A4 LD (06593H),A ; 33A6 CALL 03D06H ; 33A9 LD A,00AH ; 33AC LD (06E87H),A ; 33AE LD A,003H ; 33B1 LD (06414H),A ; 33B3 Timer BB4 LD A,05EH ; 33B6 LD (06416H),A ; 33B8 Timer BB6 JR 033DBH ; 33BB CALL 033E6H ; 33BD JR 033DBH ; 33C0 LD A,(06593H) ; 33C2 CP 001H ; 33C5 JR NZ,033DBH ; 33C7 LD A,(06590H) ; 33C9 OR A ; 33CC JR Z,033DBH ; 33CD LD A,(06436H) ; 33CF CP 02CH ; 33D2 JR C,033DBH ; 33D4 LD A,001H ; 33D6 LD (06591H),A ; 33D8 POP IY ; 33DB POP IX ; 33DD POP HL ; 33DF POP DE ; 33E0 POP BC ; 33E1 POP AF ; 33E2 EI ; 33E3 RETI ; 33E4 LD A,003H ; 33E6 LD (06414H),A ; 33E8 Timer BB4 LD A,(06E87H) ; 33EB CP 001H ; 33EE JR Z,0340EH ; 33F0 CP 002H ; 33F2 JR Z,03404H ; 33F4 CP 003H ; 33F6 JR C,03456H ; 33F8 LD HL,06E83H ; 33FA SRL (HL) ; 33FD CALL 0345EH ; 33FF JR 03456H ; 3402 LD A,(06E85H) ; 3404 SRL A ; 3407 CALL 0345EH ; 3409 JR 03456H ; 340C CALL 03D0DH ; 340E LD A,(0657BH) ; 3411 DEC A ; 3414 LD (0657BH),A ; 3415 JR NZ,03426H ; 3418 LD (0657AH),A ; 341A LD A,(06590H) ; 341D OR A ; 3420 JR NZ,03426H ; 3421 CALL 03CFCH ; 3423 LD A,001H ; 3426 LD (06593H),A ; 3428 LD A,(06590H) ; 342B OR A ; 342E JR Z,03456H ; 342F LD A,(06591H) ; 3431 OR A ; 3434 JR Z,0344EH ; 3435 LD A,00AH ; 3437 LD (06416H),A ; 3439 Timer BB6 XOR A ; 343C LD (06E87H),A ; 343D LD (06414H),A ; 3440 Timer BB LD (0657AH),A ; 3443 LD (0657BH),A ; 3446 CALL 03CFCH ; 3449 JR 03456H ; 344C LD A,00AH ; 344E LD (06416H),A ; 3450 Timer BB LD (06414H),A ; 3453 Timer BB LD A,(06E87H) ; 3456 DEC A ; 3459 LD (06E87H),A ; 345A RET ; 345D JR NC,0346AH ; 345E LD A,001H ; 3460 LD (06593H),A ; 3462 CALL 03D0DH ; 3465 JR 03472H ; 3468 LD A,000H ; 346A LD (06593H),A ; 346C CALL 03D06H ; 346F RET ; 3472 LD HL,(06E80H) ; 3473 (6E80h)<76h? A=1:A=0 Carry=A LD BC,00076H ; 3476 118d XOR A ; 3479 SBC HL,BC ; 347A JR NC,03480H ; 347C LD A,001H ; 347E RET ; 3480 CALL 03FBCH ; 3481 Put Log Buffer LD A,(06E82H) ; 3484 CALL 03FBCH ; 3487 Put Log Buffer CALL 03FBCH ; 348A Put Log Buffer LD A,020H ; 348D CALL 03FBCH ; 348F Put Log Buffer RET ; 3492 ; Interrupt #3 PUSH AF ; 3493 PUSH DE ; 3494 PUSH BC ; 3495 PUSH HL ; 3496 PUSH IX ; 3497 PUSH IY ; 3499 IN A,(068H) ; 349B LD C,A ; 349D IN A,(065H) ; 349E LD B,A ; 34A0 AND 00EH ; 34A1 JR NZ,034C1H ; 34A3 Exit ISR LD A,B ; 34A5 AND 001H ; 34A6 JR Z,034AEH ; 34A8 LD A,C ; 34AA CALL 03ED1H ; 34AB Put Buffer #5 Carry On Error LD A,B ; 34AE AND 030H ; 34AF JR Z,034C1H ; 34B1 Exit ISR CALL 03EFCH ; 34B3 Get Buffer #6 Carry On Error JR NC,034BFH ; 34B6 LD A,000H ; 34B8 LD (06602H),A ; 34BA JR 034C1H ; 34BD Exit ISR OUT (068H),A ; 34BF POP IY ; 34C1 POP IX ; 34C3 POP HL ; 34C5 POP BC ; 34C6 POP DE ; 34C7 POP AF ; 34C8 EI ; 34C9 RETI ; 34CA ; Interrupt #4 PUSH AF ; 34CC PUSH DE ; 34CD PUSH BC ; 34CE PUSH HL ; 34CF PUSH IX ; 34D0 PUSH IY ; 34D2 IN A,(048H) ; 34D4 LD C,A ; 34D6 IN A,(045H) ; 34D7 LD B,A ; 34D9 AND 00EH ; 34DA JR NZ,03506H ; 34DC LD A,B ; 34DE AND 001H ; 34DF JR Z,034E7H ; 34E1 LD A,C ; 34E3 CALL 03E47H ; 34E4 Put Buffer #3 Carry On Error LD A,B ; 34E7 AND 030H ; 34E8 JR Z,03506H ; 34EA CALL 03E72H ; 34EC Get Buffer #4 Carry On Error JR NC,03504H ; 34EF LD A,000H ; 34F1 LD (06603H),A ; 34F3 LD A,(06604H) ; 34F6 CP 001H ; 34F9 JR NZ,03506H ; 34FB LD A,001H ; 34FD LD (06605H),A ; 34FF JR 03506H ; 3502 OUT (048H),A ; 3504 POP IY ; 3506 POP IX ; 3508 POP HL ; 350A POP BC ; 350B POP DE ; 350C POP AF ; 350D EI ; 350E RETI ; 350F ; Interrupt #5 PUSH AF ; 3511 IN A,(020H) ; 3512 POP AF ; 3514 EI ; 3515 RETI ; 3516 ; Interrupt #6 PUSH AF ; 3518 IN A,(028H) ; 3519 POP AF ; 351B EI ; 351C RETI ; 351D ; Interrupt #7 EI ; 351F RETI ; 3520 ; Interrupt #8 PUSH AF ; 3522 PUSH BC ; 3523 PUSH DE ; 3524 PUSH HL ; 3525 PUSH IX ; 3526 PUSH IY ; 3528 OUT (064H),A ; 352A IN A,(064H) ; 352C LD B,A ; 352E LD HL,06677H ; 352F XOR (HL) ; 3532 LD (0643BH),A ; 3533 LD A,B ; 3536 LD (HL),A ; 3537 LD A,(0643BH) ; 3538 AND 008H ; 353B CALL NZ,03702H ; 353D Scan Keyboard, if Pressed Play & Save Key LD A,(0643BH) ; 3540 AND 010H ; 3543 CALL NZ,0386EH ; 3545 LD A,(0643B2H) ; 3548 AND 040H ; 354B CALL NZ,038BDH ; 354D CALL 0408FH ; 3550 (6418h)=0Ch POP IY ; 3553 POP IX ; 3555 POP HL ; 3557 POP DE ; 3558 POP BC ; 3559 POP AF ; 355A EI ; 355B RETI ; 355C ; Interrupt #9 PUSH AF ; 355E PUSH BC ; 355F PUSH DE ; 3560 PUSH HL ; 3561 PUSH IX ; 3562 PUSH IY ; 3564 OUT (044H),A ; 3566 CALL 0408FH ; 3568 (6418h)=0Ch IN A,(044H) ; 356B LD B,A ; 356D LD HL,06678H ; 356E XOR (HL) ; 3571 LD (0643BH),A ; 3572 LD A,B ; 3575 LD (HL),A ; 3576 LD A,(0643BH) ; 3577 AND 040H ; 357A CALL NZ,0389FH ; 357C LD A,(0643BH) ; 357F AND 080H ; 3582 CALL NZ,038D7H ; 3584 LD A,(0643BH) ; 3587 AND 020H ; 358A CALL NZ,038EAH ; 358C POP IY ; 358F POP IX ; 3591 POP HL ; 3593 POP DE ; 3594 POP BC ; 3595 POP AF ; 3596 EI ; 3597 RETI ; 3598 ; Interrupt #10 PUSH AF ; 359A PUSH BC ; 359B PUSH DE ; 359C PUSH HL ; 359D PUSH IX ; 359E PUSH IY ; 35A0 IN A,(0D0H) ; 35A2 EI ; 35A4 LD IX,06421H ; 35A5 Timer 1W LD DE,0642BH ; 35A9 Timer 6W ; BUCLE LD L,(IX+000H) ; 35AC L = 06421 + 0 LD H,(IX+001H) ; 35AF LD A,L ; 35B2 A = L OR H ; 35B3 H or L JR Z,035BDH ; 35B4 Son ambos 0? DEC HL ; 35B6 Si no son 0 los decrementa LD (IX+000H),L ; 35B7 Guarda el word decrementado LD (IX+001H),H ; 35BA INC IX ; 35BD Proximo IX ( IX=IX + 2 ) INC IX ; 35BF XOR A ; 35C1 PUSH IX ; 35C2 POP HL ; 35C4 SBC HL,DE ; 35C5 Llega al final? JR NZ,035ACH ; 35C7 Salto al BUCLE ; 6 TIMERS de tipo BYTE ; BUCLE 2 LD IX,06419H ; 35C9 LD DE,06420H ; 35CD Timer 8B LD A,(IX+000H) ; 35D0 ; COMIENZO DEL BUCLE CP 000H ; 35D3 JR Z,035DBH ; 35D5 DEC A ; 35D7 LD (IX+000H),A ; 35D8 PUSH IX ; 35DB POP HL ; 35DD SBC HL,DE ; 35DE JR Z,035E6H ; 35E0 ; Salida del BUCLE INC IX ; 35E2 JR 035D0H ; 35E4 ; FIN BUCLE 2 ; Un CASE buscando los timers en cero ; LD HL,(06421H) ; 35E6 Timer 1W LD A,L ; 35E9 OR H ; 35EA JR NZ,0361AH ; 35EB Termina con el Timer 1W ; ; Timer 1W == 0 ; LD A,(0644BH) ; 35ED CP 006H ; 35F0 JR NZ,0361AH ; 35F2 Termina con el Timer 1W LD HL,(065D6H) ; 35F4 LD A,L ; 35F7 OR H ; 35F8 JR Z,0361AH ; 35F9 LD BC,(0660AH) ; 35FB ADD HL,BC ; 35FF LD (0660AH),HL ; 3600 (660A)+=(65D6) LD BC,(065D8H) ; 3603 LD HL,(065DEH) ; 3607 ADD HL,BC ; 360A PUSH HL ; 360B POP BC ; 360C BC = (65D8)+(65DE) LD DE,0000AH ; 360D CALL 040B8H ; 3610 HL = BC Mod 10d LD (06421H),BC ; 3613 Timer 1W LD (065DEH),HL ; 3617 ; ; Primer timer WORD (envia comando lectura?) ; LD A,(06420H) ; 361A Timer 8B CP 001H ; 361D JR NZ,0363EH ; 361F ; Timer 8B == 1 DI ; 3621 CALL 03702H ; 3622 Scan Keyboard, if Pressed Play & Push Key EI ; 3625 LD A,(06420H) ; 3626 Timer 8B OR A ; 3629 JR Z,0363EH ; 362A ; Timer 8B sigue siendo 1 (no paso 1 tick desde que se innicio esto) LD A,001H ; 362C LD (06420H),A ; 362E Timer 8B = 1 de nuevo LD (065EDH),A ; 3631 ; (65ED) = 1 DI ; 3634 LD A,(0642CH) ; 3635 SET 4,A ; 3638 LD (0642CH),A ; 363A EI ; 363D ; LD A,(0642BH) ; 363E Timer 6W OR A ; 3641 JR Z,0366FH ; 3642 ; LD A,(0644BH) ; 3644 CP 007H ; 3647 JR Z,03655H ; 3649 CP 002H ; 364B JR NZ,0366FH ; 364D LD A,(065EAH) ; 364F OR A ; 3652 JR NZ,0366FH ; 3653 LD A,(0642BH) ; 3655 Timer 6W CP 001H ; 3658 JR NZ,0366BH ; 365A DI ; 365C LD A,(0642DH) ; 365D SET 4,A ; 3660 ; Setea el bit 4 LD (0642DH),A ; 3662 EI ; 3665 LD A,001H ; 3666 LD (065EDH),A ; 3668 DEC A ; 366B LD (0642BH),A ; 366C Timer 6W Lo pone en cero, igual , era . ; ; TIMER 6B Solo utilizar si Timer 6W == 0 o (644Bh) == 02 LD A,(0641EH) ; 366F Timer 6B CP 002H ; 3672 CALL NZ,03CC6H ; 3674 ; TIMER 7B LD A,(0641FH) ; 3677 Timer 7B OR A ; 367A JR Z,03687H ; 367B ; <> 0 CP 001H ; 367D JR NZ,03687H ; 367F ; TIMER 7B = 1 IN A,(061H) ; 3681 RES 5,A ; 3683 OUT (061H),A ; 3685 Apaga la Luz ; TIMER 7B <> 1 LD HL,(06429H) ; 3687 Fuera de servicio Timer LD A,L ; 368A OR H ; 368B JR NZ,03696H ; 368C ; TIMER 5W = 0 RESET! LD A,000H ; 368E LD (0642EH),A ; 3690 Fuera de Servicio ?! JP 00000H ; 3693 (RESET!) ; ; TIMER 4B ; LD A,(0641CH) ; 3696 Timer B CP 001H ; 3699 JR NZ,036A2H ; 369B ; timer 4B = 1 LD A,00EH ; 369D CALL 03F5BH ; 369F Put Buffer #7 (Internal Commands) ; ; SIEMPRE! ; IN A,(044H) ; 36A2 AND 002H ; 36A4 JR NZ,036AEH ; 36A6 XOR A ; 36A8 LD (06676H),A ; 36A9 JR 036C1H ; 36AC LD A,(06676H) ; 36AE INC A ; 36B1 LD (06676H),A ; 36B2 CP 005H ; 36B5 JR C,036C1H ; 36B7 DI ; 36B9 CALL 02A77H ; 36BA Turn off Hardware Time Out CALL 03919H ; 36BD Push Log Buffer (33h,33h,33h,30h) HALT ; 36C0 LD A,(0644BH) ; 36C1 CP 002H ; 36C4 JR NZ,036F3H ; 36C6 LD A,(06449H) ; 36C8 OR A ; 36CB JR NZ,036F3H ; 36CC LD A,(06652H) ; 36CE Codigo de Idioma CP 000H ; 36D1 JR Z,036F3H ; 36D3 LD A,(0641AH) ; 36D5 Timer 2B OR A ; 36D8 JR Z,036ECH ; 36D9 CP 001H ; 36DB JR NZ,036F7H ; 36DD ; Timer 2B == 1 LD A,000H ; 36DF LD (06652H),A ; 36E1 Codigo de Idioma LD HL,00000H ; 36E4 LD (06650H),HL ; 36E7 JR 036F7H ; 36EA LD A,006H ; 36EC LD (0641AH),A ; 36EE Timer 2B = 6 segundos JR 036F7H ; 36F1 XOR A ; 36F3 LD (0641AH),A ; 36F4 Timer 2B = 0 POP IY ; 36F7 POP IX ; 36F9 POP HL ; 36FB POP DE ; 36FC POP BC ; 36FD POP AF ; 36FE EI ; 36FF RETI ; 3700 ; ; Llamado si timer 8B = 1 (WORD) (comando de lectura??) ; Un tick antes de finalizacion del tiempo ; LECTURA DE TECLADO? LD A,(06412H) ; 3702 Timer BB OR A ; 3705 JP NZ,0384AH ; 3706 RET LD A,003H ; 3709 LD (06412H),A ; 370B Timer BB2=03h LD A,0FFH ; 370E LD (0643EH),A ; 3710 (643Eh)=FFh LD HL,0643FH ; 3713 LD C,0FEH ; 3716 LD B,000H ; 3718 LD A,C ; 371A OUT (000H),A ; 371B Port de la Matriz del teclado NOP ; 371F IN A,(000H) ; 371E Port de la Matriz del teclado OR 0E0H ; 3720 LD (HL),A ; 3722 INC HL ; 3723 INC B ; 3724 RLC C ; 3725 LD A,005H ; 3727 CP B ; 3729 JR NZ,0371AH ; 372A XOR A ; 372C OUT (000H),A ; 372D Port de la Matriz del teclado LD B,000H ; 372F LD HL,0643FH ; 3731 LD A,(HL) ; 3734 CP 0FFH ; 3735 JR NZ,0373BH ; 3737 If Key Pressed on this line Go On JR 0375FH ; 3739 Do Looping LD A,B ; 373B LD (0643CH),A ; 373C (643Ch) = Fila de la Tecla Presionada LD D,000H ; 373F LD A,(HL) ; 3741 LD E,A ; 3742 BIT 0,E ; 3743 JR NZ,03757H ; 3745 LD A,(0643EH) ; 3747 (643Eh) = Salida de la Matriz CP 0FFH ; 374A JP NZ,03825H ; 374C Restart Timer 8B and RET LD A,(HL) ; 374F LD (0643EH),A ; 3750 (643Eh) = Salida de la Matriz LD A,D ; 3753 LD (0643DH),A ; 3754 (643Dh) = Columna de la Tecla Presionada RR E ; 3757 INC D ; 3759 LD A,005H ; 375A CP D ; 375C JR NZ,03743H ; 375D INC HL ; 375F INC B ; 3760 LD A,005H ; 3761 CP B ; 3763 JR NZ,03734H ; 3764 Loop LD A,(0643EH) ; 3766 CP 0FFH ; 3769 JP Z,0382CH ; 376B If no Key Pressed 382Ch LD DE,00005H ; 376E LD HL,0384BH ; 3771 Matrix Layout LD A,(0643CH) ; 3774 Fila de la Tecla Presionada U to D OR A ; 3777 CP 000H ; 3778 JR Z,03780H ; 377A ADD HL,DE ; 377C DEC A ; 377D JR 03777H ; 377E LD A,(0643DH) ; 3780 Columna de la Tecla Presionada R to L OR A ; 3783 CP 000H ; 3784 JR Z,0378CH ; 3786 INC HL ; 3788 DEC A ; 3789 JR 03783H ; 378A LD A,(HL) ; 378C HL = Puntero a el ASCII de la Tecla Pressionada CP VOL_KEY ; 378D JR NZ,037BAH ; 378F ; VOL_KEY Pressed; LD A,(065E3H) ; 3791 Codigo de Idioma INC A ; 3794 CP 004H ; 3795 JR C,037AAH ; 3797 XOR A ; 3799 Codigo de Idioma > 4 ? => LD (065E3H),A ; 379A Codigo de Idioma = 00 IN A,(041H) ; 379D SET 4,A ; 379F OUT (041H),A ; 37A1 Si el Codigo de Idioma == 0 RES 4,A ; 37A3 (P41.4) = 1, (P41.4) = 0 OUT (041H),A ; 37A5 JP 037DEH ; 37A7 LD (065E3H),A ; 37AA Codigo de Idioma++ IN A,(041H) ; 37AD SET 6,A ; 37AF OUT (041H),A ; 37B1 Si el Codigo de Idioma == 0 RES 6,A ; 37B3 (P41.6) = 1, (P41.6) = 0 OUT (041H),A ; 37B5 JP 037DEH ; 37B7 LD A,(065E2H) ; 37BA OR A ; 37BD JR Z,037DEH ; 37BE LD A,(HL) ; 37C0 CP 03Fh ; 37C1 JR NC,037CEH ; 37C3 A >= 03F? LD A,(HL) ; 37C5 AND 00FH ; 37C6 CALL 03BCDH ; 37C8 Dial Number A in DTMF JP 03825H ; 37CB Restart Timer 8B and RET CP _*_KEY ; 37CE JR Z,037D6H ; 37D0 CP _#_KEY ; 37D2 JR NZ,037DEH ; 37D4 AND 00FH ; 37D6 CALL 03BCDH ; 37D8 Dial Number A in DTMF JP 03825H ; 37DB Restart Timer 8B and RET LD A,(HL) ; 37DE CALL 03DBDH ; 37DF Put Key in Buffer #1 Carry On Error LD A,(HL) ; 37E2 CP VOL_KEY ; 37E3 JR Z,037E9H ; 37E5 JR 03825H ; 37E7 Restart Timer 8B and RET ; VOL_KEY Pressed; LD A,(06675H) ; 37E9 OR A ; 37EC JR NZ,03825H ; 37ED Restart Timer 8B and RET LD A,(0644AH) ; 37EF OR A ; 37F2 JR NZ,03825H ; 37F3 Restart Timer 8B and RET LD A,(06652H) ; 37F5 Codigo de Idioma CP 004H ; 37F8 JR Z,03818H ; 37FA INC A ; 37FC LD (06652H),A ; 37FD Codigo de Idioma SLA A ; 3800 LD HL,03864H ; 3802 LD C,A ; 3805 LD B,000H ; 3806 ADD HL,BC ; 3808 LD E,(HL) ; 3809 INC HL ; 380A LD D,(HL) ; 380B EX DE,HL ; 380C XOR A ; 380D LD BC,Espanol ; 380E SBC HL,BC ; 3811 LD (06650H),HL ; 3813 JR 03825H ; 3816 Restart Timer 8B and RET LD A,000H ; 3818 LD (06652H),A ; 381A Codigo de Idioma LD HL,00000H ; 381D LD (06650H),HL ; 3820 JR 03825H ; 3823 Restart Timer 8B and RET LD A,014H ; 3825 LD (06420H),A ; 3827 Timer 8B = 14h JR 0384AH ; 382A RET LD A,(065E2H) ; 382C OR A ; 382F JR Z,03835H ; 3830 CALL 03BE7H ; 3832 Turn Off DTMF Tone & Output XOR A ; 3835 LD (06420H),A ; 3836 Timer 8B =0 LD A,(0642CH) ; 3839 BIT 4,A ; 383C JR Z,0384AH ; 383E RES 4,A ; 3840 LD (0642CH),A ; 3842 LD A,001H ; 3845 LD (065EDH),A ; 3847 RET ; 384A ; FIN (EL FINAL) (FINNALE MOLTO GRANDIOSO) 384B db '321', 0ffh, '@' 3850 db '654', 0ffh, 'B' 3855 db '987', 0ffh, '>' 385A db ';0:', 0ffh, 'A' 385F db 0ffh,0ffh,0ffh,0ffh, '?' 3864 dw Espanol,Ingles,Aleman,Italiano,Portugues LD A,(06677H) ; 386E AND 010H ; 3871 JR NZ,03894H ; 3873 XOR A ; 3875 LD (06448H),A ; 3876 LD (06435H),A ; 3879 LD (0642BH),A ; 387C Timer 6W LD A,(0642DH) ; 387F AND 0EEH ; 3882 LD (0642DH),A ; 3884 LD A,(065EBH) ; 3887 OR A ; 388A JR NZ,0389EH ; 388B LD A,001H ; 388D LD (065EDH),A ; 388F JR 0389EH ; 3892 LD A,001H ; 3894 LD (06448H),A ; 3896 LD A,02EH ; 3899 LD (0642BH),A ; 389B Timer 6W RET ; 389E LD A,(06678H) ; 389F AND 040H ; 38A2 JR Z,038B7H ; 38A4 XOR A ; 38A6 LD (06449H),A ; 38A7 LD A,(065ECH) ; 38AA OR A ; 38AD JR NZ,038BCH ; 38AE LD A,001H ; 38B0 LD (065EDH),A ; 38B2 JR 038BCH ; 38B5 LD A,001H ; 38B7 LD (06449H),A ; 38B9 RET ; 38BC LD A,(06677H) ; 38BD AND 040H ; 38C0 JR Z,038CEH ; 38C2 LD A,(0642CH) ; 38C4 RES 7,A ; 38C7 LD (0642CH),A ; 38C9 JR 038D6H ; 38CC LD A,(0642CH) ; 38CE SET 7,A ; 38D1 LD (0642CH),A ; 38D3 RET ; 38D6 LD A,(06678H) ; 38D7 AND 080H ; 38DA JR Z,038E4H ; 38DC XOR A ; 38DE LD (06601H),A ; 38DF JR 038E9H ; 38E2 LD A,001H ; 38E4 LD (06601H),A ; 38E6 RET ; 38E9 LD A,(06678H) ; 38EA AND 020H ; 38ED JR Z,038FCH ; 38EF XOR A ; 38F1 LD (0644AH),A ; 38F2 LD A,001H ; 38F5 LD (065E5H),A ; 38F7 JR 03918H ; 38FA LD A,001H ; 38FC LD (0644AH),A ; 38FE LD A,(065E5H) ; 3901 OR A ; 3904 JR Z,03918H ; 3905 LD A,(0642CH) ; 3907 SET 6,A ; 390A LD (0642CH),A ; 390C LD A,001H ; 390F LD (065EDH),A ; 3911 XOR A ; 3914 LD (065E5H),A ; 3915 RET ; 3918 LD A,'3' ; 3919 Push Log Buffer (33h,33h,33h,30h) CALL 03FBCH ; 391B Put Log Buffer CALL 03FBCH ; 391E Put Log Buffer CALL 03FBCH ; 3921 Put Log Buffer LD A,'0' ; 3924 CALL 03FBCH ; 3926 Put Log Buffer RET ; 3929 3A20 03 03 0F 03 04 06 3A30 10 04 03 04 03 03 03 03-03 03 03 03 06 03 03 03 PUSH AF ; 3940 PUSH BC ; 3941 PUSH DE ; 3942 PUSH HL ; 3943 XOR A ; 3944 LD (06E89H),A ; 3945 (6E89h)=0 LD A,(06E88H) ; 3948 INC A ; 394B LD (06E88H),A ; 394C (6E88h)++ DI ; 394F Disable Interrupt XOR A ; 3950 LD (065BDH),A ; 3951 LD HL,0623DH ; 3954 LD (0627FH),HL ; 3957 INC HL ; 395A LD (0627DH),HL ; 395B Clear Buffer #6 XOR A ; 395E LD (065BCH),A ; 395F LD HL,061F9H ; 3962 LD (0623BH),HL ; 3965 INC HL ; 3968 LD (06239H),HL ; 3969 Clear Buffer #5 LD A,000H ; 396C LD (06602H),A ; 396E 6602 = 0 EI ; 3971 Enable Interrupt LD A,002H ; 3972 CALL 03F16H ; 3974 Buffered (P68)=02 LD HL,0392AH ; 3977 LD A,(06552H) ; 397A SUB 011H ; 397D LD E,A ; 397F LD D,000H ; 3980 ADD HL,DE ; 3982 LD A,(HL) ; 3983 A=(392Ah+(6552h)-11h) LD (06550H),A ; 3984 LD B,A ; 3987 CALL 03F16H ; 3988 Buffered (P68)=A DEC B ; 398B LD A,(06E88H) ; 398C CALL 03F16H ; 398F Buffered (P68)=A DEC B ; 3992 LD HL,06552H ; 3993 XOR A ; 3996 XOR (HL) ; 3997 PUSH AF ; 3998 LD A,(HL) ; 3999 CALL 03F16H ; 399A Buffered (P68)=(++6552)^(6552++) POP AF ; 399D INC HL ; 399E DJNZ 03997H ; 399F LD B,A ; 39A1 LD A,003H ; 39A2 CALL 03F16H ; 39A4 Buffered (P68)=03 LD A,B ; 39A7 CALL 03F16H ; 39A8 Buffered (P68)=(++6552)^(6552++) LD A,(06552H) ; 39AB CP 015H ; 39AE JR NZ,039BDH ; 39B0 LD A,(06553H) ; 39B2 CP 032H ; 39B5 JR C,039BDH ; 39B7 LD A,02DH ; 39B9 JR 039BFH ; 39BB LD A,014H ; 39BD LD (0641DH),A ; 39BF Timer 5B=14h Segs LD A,002H ; 39C2 LD (06E8CH),A ; 39C4 (6E8Ch)=02 CALL 03EB7H ; 39C7 Buffered A=(P68) JR NC,039EDH ; 39CA LD A,(06E8CH) ; 39CC CP 002H ; 39CF JR NZ,039DDH ; 39D1 LD A,(0641DH) ; 39D3 Timer 5B OR A ; 39D6 JR NZ,039C7H ; 39D7 LD A,011H ; 39D9 JR 039E7H ; 39DB LD A,(06413H) ; 39DD Timer BB OR A ; 39E0 JR NZ,039C7H ; 39E1 LD A,012H ; 39E3 JR 039E7H ; 39E5 CALL 03AECH ; 39E7 Algo al Log Buffer y 'PROBLEMA | CUELGUE' JP 03ADFH ; 39EA LD B,A ; 39ED LD A,(06E8CH) ; 39EE CP 002H ; 39F1 JR Z,03A4CH ; 39F3 CP 003H ; 39F5 JP Z,03A7EH ; 39F7 CP 004H ; 39FA JP Z,03A8EH ; 39FC CP 005H ; 39FF JP Z,03AA3H ; 3A01 CP 006H ; 3A04 JP Z,03AC8H ; 3A06 CP 007H ; 3A09 JR Z,03A3DH ; 3A0B LD A,B ; 3A0D CALL 03B00H ; 3A0E Algo Al Log Buffer LD A,B ; 3A11 CP 003H ; 3A12 JR NZ,03A1FH ; 3A14 LD A,(06E88H) ; 3A16 INC A ; 3A19 LD (06E88H),A ; 3A1A JR 03A27H ; 3A1D CP 004H ; 3A1F JR NZ,03A27H ; 3A21 XOR A ; 3A23 LD (06E88H),A ; 3A24 LD A,(06E89H) ; 3A27 INC A ; 3A2A LD (06E89H),A ; 3A2B CP 003H ; 3A2E JR Z,03A35H ; 3A30 JP 0394FH ; 3A32 LD A,013H ; 3A35 CALL 03AECH ; 3A37 Algo al Log Buffer y 'PROBLEMA | CUELGUE' JP 03ADFH ; 3A3A LD A,(06E8BH) ; 3A3D CP B ; 3A40 JP Z,03ADFH ; 3A41 LD A,014H ; 3A44 CALL 03AECH ; 3A46 Algo al Log Buffer y 'PROBLEMA | CUELGUE' JP 03ADFH ; 3A49 LD A,002H ; 3A4C CP B ; 3A4E JR NZ,03A65H ; 3A4F LD A,003H ; 3A51 LD (06E8CH),A ; 3A53 LD HL,0644DH ; 3A56 XOR A ; 3A59 LD (06E8BH),A ; 3A5A LD A,00AH ; 3A5D LD (06413H),A ; 3A5F Timer BB JP 039C7H ; 3A62 LD A,015H ; 3A65 CP B ; 3A67 JR Z,03A71H ; 3A68 LD A,015H ; 3A6A CALL 03AECH ; 3A6C Algo al Log Buffer y 'PROBLEMA | CUELGUE' JR 03ADFH ; 3A6F LD A,00AH ; 3A71 LD (06413H),A ; 3A73 Timer BB LD A,008H ; 3A76 LD (06E8CH),A ; 3A78 JP 039C7H ; 3A7B LD A,B ; 3A7E LD (HL),A ; 3A7F INC HL ; 3A80 LD A,004H ; 3A81 LD (06E8CH),A ; 3A83 LD A,00AH ; 3A86 LD (06413H),A ; 3A88 Timer BB JP 039C7H ; 3A8B LD A,B ; 3A8E LD (HL),A ; 3A8F INC HL ; 3A90 LD A,002H ; 3A91 LD (06E8AH),A ; 3A93 LD A,005H ; 3A96 LD (06E8CH),A ; 3A98 LD A,00AH ; 3A9B LD (06413H),A ; 3A9D Timer BB JP 039C7H ; 3AA0 LD A,B ; 3AA3 LD (HL),A ; 3AA4 LD A,(06E8BH) ; 3AA5 XOR (HL) ; 3AA8 INC HL ; 3AA9 LD (06E8BH),A ; 3AAA LD A,(06E8AH) ; 3AAD INC A ; 3AB0 LD (06E8AH),A ; 3AB1 LD B,A ; 3AB4 LD A,(0644DH) ; 3AB5 CP B ; 3AB8 JR NZ,03AC0H ; 3AB9 LD A,006H ; 3ABB LD (06E8CH),A ; 3ABD LD A,00AH ; 3AC0 LD (06413H),A ; 3AC2 Timer BB JP 039C7H ; 3AC5 LD A,003H ; 3AC8 CP B ; 3ACA JR NZ,03ADAH ; 3ACB LD A,007H ; 3ACD LD (06E8CH),A ; 3ACF LD A,00AH ; 3AD2 LD (06413H),A ; 3AD4 Timer BB JP 039C7H ; 3AD7 LD A,016H ; 3ADA CALL 03AECH ; 3ADC Algo al Log Buffer y 'PROBLEMA | CUELGUE' LD A,004H ; 3ADF CALL 03F16H ; 3AE1 Buffered (P68)=A CALL 0408FH ; 3AE4 (6418h)=0Ch POP HL ; 3AE7 POP DE ; 3AE8 POP BC ; 3AE9 POP AF ; 3AEA RET ; 3AEB CALL 03B00H ; 3AEC Algo Al Log Buffer LD A,001H ; 3AEF LD (065EDH),A ; 3AF1 LD A,(0642CH) ; 3AF4 SET 3,A ; 3AF7 LD (0642CH),A ; 3AF9 CALL 011D8H ; 3AFC Write 'PROBLEMA | CUELGUE' RET ; 3AFF PUSH AF ; 3B00 PUSH BC ; 3B01 CALL 03FBCH ; 3B02 Put Log Buffer LD A,(06E88H) ; 3B05 CALL 03FBCH ; 3B08 Put Log Buffer LD A,(06552H) ; 3B0B CALL 03FBCH ; 3B0E Put Log Buffer LD A,(06606H) ; 3B11 (6606h)=3 => FICHAS =/=> PULSOS LD B,A ; 3B14 LD A,040H ; 3B15 OR B ; 3B17 CALL 03FBCH ; 3B18 Put Log Buffer POP BC ; 3B1B POP AF ; 3B1C RET ; 3B1D 3B1E _0 db 0D7h ; 1101-0111 1331.7-935.1 3B1F _1 db 0EEh ; 1110-1110 1215.9-701.3 3B20 _2 db 0DEh ; 1101-1110 1331.7-701.3 3B21 _3 db 0BEh ; 1011-1110 1471.9-701.3 3B22 _4 db 0EDh ; 1110-1101 1215.9-771.4 3B23 _5 db 0DDh ; 1101-1101 1331.7-771.4 3B24 _6 db 0BDh ; 1011-1101 1471.9-771.4 3B25 _7 db 0EBh ; 1110-1011 1215.9-857.2 3B26 _8 db 0DBh ; 1101-1011 1331.7-857.2 3B27 _9 db 0BBh ; 1011-1011 1471.9-857.2 3B28 _* db 0E7h ; 1110-0111 1215.9-935.1 3B29 _# db 0B7h ; 1011-0111 1471.9-935.1 3B2A _Tone db 0CEh ; 1100-1110 -701.3 PUSH AF ; 3B2E Changes P02,P46,P41,P61,P40,(6604h)=0 IN A,(002H) ; 3B2F AND 0F0H ; 3B31 OR 004H ; 3B33 OUT (002H),A ; 3B35 (P02)=(P02) & 1111.0000 | 0000.0100 XOR A ; 3B37 LD (06604H),A ; 3B38 (6604h)=0 IN A,(046H) ; 3B3B RES 5,A ; 3B3D OUT (046H),A ; 3B3F (P46.5)=0 IN A,(041H) ; 3B41 AND 002H ; 3B43 OR 090H ; 3B45 OUT (041H),A ; 3B47 (P41)=(P41) & 0000.0010 | 1001.000 AND 002H ; 3B49 OR 0A0H ; 3B4B OUT (041H),A ; 3B4D (P41)=(P41) & 0000.0010 | 1010.0000 IN A,(061H) ; 3B4F AND 0B4H ; 3B51 OR 008H ; 3B53 OUT (061H),A ; 3B55 (P61)=(P61) & 1011.0100 | 0000.1000 LD A,0E1H ; 3B57 CALL 03CDFH ; 3B59 A.5=!(P42.1) (P40)=A CALL 03B7CH ; 3B5C Delay(6) LD A,0E4H ; 3B5F CALL 03CDFH ; 3B61 A.5=!(P42.1) (P40)=A CALL 03B7CH ; 3B64 Delay(6) LD A,0E0H ; 3B67 CALL 03CDFH ; 3B69 A.5=!(P42.1) (P40)=A POP AF ; 3B6C RET ; 3B6D LD A,098H ; 3B6E Delay(250d) LD (06411H),A ; 3B70 Timer BB JR 03B88H ; 3B73 LD A,020H ; 3B75 Delay(32d) LD (06411H),A ; 3B77 Timer BB JR 03B88H ; 3B7A LD A,006H ; 3B7C Delay(6d) LD (06411H),A ; 3B7E Timer BB JR 03B88H ; 3B81 LD A,002H ; 3B83 Delay(2d) LD (06411H),A ; 3B85 Timer BB LD A,(06411H) ; 3B88 Timer BB OR A ; 3B8B JR NZ,03B88H ; 3B8C RET ; 3B8E PUSH AF ; 3B8F (P41.3) = 0 (Cuelga) IN A,(041H) ; 3B90 RES 3,A ; 3B92 OUT (041H),A ; 3B94 POP AF ; 3B96 RET ; 3B97 PUSH AF ; 3B98 (P40.6) = 1 IN A,(040H) ; 3B99 SET 6,A ; 3B9B OUT (040H),A ; 3B9D POP AF ; 3B9F RET ; 3BA0 PUSH AF ; 3BA1 (P41.3) = 1 (Descuelga) IN A,(041H) ; 3BA2 SET 3,A ; 3BA4 OUT (041H),A ; 3BA6 POP AF ; 3BA8 RET ; 3BA9 PUSH AF ; 3BAA (P40.6)=0 IN A,(040H) ; 3BAB RES 6,A ; 3BAD OUT (040H),A ; 3BAF POP AF ; 3BB1 RET ; 3BB2 ;----- ; Lo primero que se hace luego de imprimir 'Inserte tarjeta' ; Esta rutina espera cualquier IRQ ; LD A,(06418H) ; 3BB3 - Semaforo - Run Condition OR A ; 3BB6 JR NZ,03BBDH ; 3BB7 OUT (00EH),A ; 3BB9 ; port 0e <- JR 03BBEH ; 3BBB HALT ; 3BBD Espera que se se lea la tarjeta RET ; 3BBE PUSH AF ; 3BBF LD A,09EH ; 3BC0 OUT (060H),A ; 3BC2 (P60)=9Eh POP AF ; 3BC4 Play 701.3 Hz on DTMF chip RET ; 3BC5 PUSH AF ; 3BC6 (P60) = FFh LD A,0FFH ; 3BC7 OUT (060H),A ; 3BC9 POP AF ; 3BCB RET ; 3BCC PUSH AF ; 3BCD PUSH BC ; 3BCE PUSH HL ; 3BCF CALL 03B8FH ; 3BD0 (P41.3) = 0 (Cuelga) LD HL,03B1EH ; 3BD3 LD B,000H ; 3BD6 LD C,A ; 3BD8 ADD HL,BC ; 3BD9 LD A,(HL) ; 3BDA OUT (060H),A ; 3BDB IN A,(041H) ; 3BDD SET 0,A ; 3BDF OUT (041H),A ; 3BE1 (P41.0) = 1 POP HL ; 3BE3 POP BC ; 3BE4 POP AF ; 3BE5 RET ; 3BE6 ;------------------------------------- ; PUSH AF ; 3BE7 LD A,0FFH ; 3BE8 OUT (060H),A ; 3BEA Turn off DTMF dialer chip IN A,(041H) ; 3BEC RES 0,A ; 3BEE OUT (041H),A ; 3BF0 Inhibit DTMF Output LD A,(0644BH) ; 3BF2 CP 006H ; 3BF5 CALL Z,03BA1H ; 3BF7 (P41.3) = 1 (Descuelga) POP AF ; 3BFA RET ; 3BFB PUSH AF ; 3BFC LD A,098H ; 3BFD LD (06411H),A ; 3BFF Timer BB LD A,(06411H) ; 3C02 Timer BB OR A ; 3C05 JR Z,03C24H ; 3C06 LD A,(06603H) ; 3C08 OR A ; 3C0B JR NZ,03C02H ; 3C0C LD A,(06604H) ; 3C0E OR A ; 3C11 JR Z,03C24H ; 3C12 LD A,(06411H) ; 3C14 Timer BB OR A ; 3C17 JR Z,03C24H ; 3C18 LD A,(06605H) ; 3C1A OR A ; 3C1D JR Z,03C24H ; 3C1E CP 003H ; 3C20 JR NZ,03C14H ; 3C22 POP AF ; 3C24 RET ; 3C25 ;--------------------------------------------- ; Inicilizacion de tarjeta ;------------------------------------- PUSH AF ; 3C26 IN A,(061H) ; 3C27 SET 4,A ; 3C29 OUT (061H),A ; 3C2B IN A,(061H) ; 3C2D SET 2,A ; 3C2F OUT (061H),A ; 3C31 CALL 03B7CH ; 3C33 Delay(6) LD A,013H ; 3C36 OUT (066H),A ; 3C38 LD A,0E6H ; 3C3A OUT (067H),A ; 3C3C IN A,(065H) ; 3C3E POP AF ; 3C40 RET ; 3C41 PUSH AF ; 3C42 (P61.4)=0 (P61.2)=0 (P66)=0 (P67)=0 IN A,(061H) ; 3C43 RES 4,A ; 3C45 OUT (061H),A ; 3C47 (P61.4) = 0 CALL 03B7CH ; 3C49 Delay(6) CALL 03B7CH ; 3C4C Delay(6) IN A,(061H) ; 3C4F RES 2,A ; 3C51 OUT (061H),A ; 3C53 (P61.2) = 0 XOR A ; 3C55 OUT (066H),A ; 3C56 (P66) = 0 OUT (067H),A ; 3C58 (P67) = 0 POP AF ; 3C5A RET ; 3C5B PUSH AF ; 3C5C PUSH HL ; 3C5D LD A,0E6H ; 3C5E OUT (047H),A ; 3C60 LD A,013H ; 3C62 OUT (046H),A ; 3C64 IN A,(045H) ; 3C66 XOR A ; 3C68 LD (065BFH),A ; 3C69 Buffer #4 Counter LD HL,06305H ; 3C6C LD (06387H),HL ; 3C6F INC HL ; 3C72 LD (06385H),HL ; 3C73 XOR A ; 3C76 LD (065BEH),A ; 3C77 Buffer #3 Counter LD HL,06281H ; 3C7A LD (06303H),HL ; 3C7D INC HL ; 3C80 LD (06301H),HL ; 3C81 POP HL ; 3C84 POP AF ; 3C85 RET ; 3C86 PUSH AF ; 3C87 CALL 03BFCH ; 3C88 XOR A ; 3C8B OUT (046H),A ; 3C8C POP AF ; 3C8E RET ; 3C8F ; ZeroF = !(P64h.4) IN A,(064H) ; 3C90 AND 010H ; 3C92 CP 010H ; 3C94 RET ; 3C96 ; ZeroF = !(P44h.6) IN A,(044H) ; 3C97 AND 040H ; 3C99 CP 040H ; 3C9B RET ; 3C9D IN A,(042H) ; 3C9E AND 001H ; 3CA0 JR Z,03CABH ; 3CA2 LD A,(0642DH) ; 3CA4 SET 2,A ; 3CA7 JR 03CB0H ; 3CA9 LD A,(0642DH) ; 3CAB RES 2,A ; 3CAE LD (0642DH),A ; 3CB0 RET ; 3CB3 LD A,(0641EH) ; 3CB4 Timer 6B 641E==0 OR A ; 3CB7 Prende el Bit 7 del Port 61 JR NZ,03CC5H ; 3CB8 y Hace 641E=02 IN A,(061H) ; 3CBA OR 080H ; 3CBC OUT (061H),A ; 3CBE LD A,002H ; 3CC0 LD (0641EH),A ; 3CC2 Timer 6B RET ; 3CC5 IN A,(061H) ; 3CC6 Apaga el Bit 7 del Port 61 AND 07FH ; 3CC8 OUT (061H),A ; 3CCA RET ; 3CCC ; Subrutina PUSH AF ; 3CCD IN A,(042H) ; 3CCE AND 002H ; 3CD0 JR NZ,03CD9H ; 3CD2 POP AF ; 3CD4 RES 5,A ; 3CD5 JR 03CDCH ; 3CD7 POP AF ; 3CD9 SET 5,A ; 3CDA OUT (040H),A ; 3CDC RET ; 3CDE PUSH AF ; 3CDF IN A,(042H) ; 3CE0 AND 002H ; 3CE2 JR NZ,03CEBH ; 3CE4 POP AF ; 3CE6 SET 5,A ; 3CE7 JR 03CEEH ; 3CE9 POP AF ; 3CEB RES 5,A ; 3CEC OUT (040H),A ; 3CEE RET ; 3CF0 IN A,(041H) ; 3CF1 (P41.7)=1, (P80)=90h SET 7,A ; 3CF3 OUT (041H),A ; 3CF5 LD A,009H ; 3CF7 OUT (080H),A ; 3CF9 RET ; 3CFB XOR A ; 3CFC OUT (080H),A ; 3CFD IN A,(041H) ; 3CFF RES 7,A ; 3D01 OUT (041H),A ; 3D03 RET ; 3D05 IN A,(041H) ; 3D06 SET 1,A ; 3D08 OUT (041H),A ; 3D0A RET ; 3D0C IN A,(041H) ; 3D0D RES 1,A ; 3D0F OUT (041H),A ; 3D11 RET ; 3D13 XOR A ; 3D14 LD (065E3H),A ; 3D15 IN A,(041H) ; 3D18 SET 4,A ; 3D1A OUT (041H),A ; 3D1C RES 4,A ; 3D1E OUT (041H),A ; 3D20 RET ; 3D22 DB 01h,02h,04h,08h,16h,32h,64h,FFh ; HL = Comiezo del Buffer ; IX = Fin del Buffer PUSH HL ; 3D2B PUSH IX ; 3D2C POP HL ; 3D2E XOR A ; 3D2F SBC HL,DE ; 3D30 POP HL ; 3D32 JR Z,03D5FH ; 3D33 IX == DE ? 3D5F DEC IX ; 3D35 PUSH HL ; 3D37 PUSH DE ; 3D38 PUSH IX ; 3D39 POP DE ; 3D3B DE = IX-1 INC IX ; 3D3C XOR A ; 3D3E SBC HL,DE ; 3D3F POP DE ; 3D41 POP HL ; 3D42 JR Z,03D5CH ; 3D43 Si HL == IX-1? Set Carry & Exit PUSH HL ; 3D45 XOR A ; 3D46 SBC HL,BC ; 3D47 Si HL == BC => HL = DE POP HL ; 3D49 JR Z,03D4FH ; 3D4A INC HL ; 3D4C JR 03D51H ; 3D4D PUSH DE ; 3D4F POP HL ; 3D50 LD A,(IY+000H) ; 3D51 DEC A ; 3D54 LD (IY+000H),A ; 3D55 XOR A ; 3D58 LD A,(HL) ; 3D59 JR 03D68H ; 3D5A SCF ; 3D5C Set Carry Flag & A = 0 JR 03D68H ; 3D5D PUSH HL ; 3D5F XOR A ; 3D60 SBC HL,BC ; 3D61 POP HL ; 3D63 JR Z,03D5CH ; 3D64 HL == BC ? Set Carry & Exit JR 03D4CH ; 3D66 RET ; 3D68 PUSH HL ; 3D69 PUSH DE ; 3D6A PUSH IX ; 3D6B POP DE ; 3D6D OR A ; 3D6E SBC HL,DE ; 3D6F POP DE ; 3D71 POP HL ; 3D72 JR Z,03D8FH ; 3D73 IX == HL ? Set Carry & Ret LD (IX+000H),A ; 3D75 PUSH HL ; 3D78 PUSH IX ; 3D79 POP HL ; 3D7B XOR A ; 3D7C SBC HL,BC ; 3D7D POP HL ; 3D7F JR Z,03D86H ; 3D80 INC IX ; 3D82 JR 03D89H ; 3D84 PUSH DE ; 3D86 POP IX ; 3D87 INC (IY+000H) ; 3D89 XOR A ; 3D8C JR 03D90H ; 3D8D SCF ; 3D8F RET ; 3D90 LD HL,(061DFH) ; 3D91 LD DE,061CDH ; 3D94 LD BC,061DCH ; 3D97 LD IX,(061DDH) ; 3D9A LD IY,065BAH ; 3D9E Buffer #1 Counter RET ; 3DA2 ; Get Key Pressed PUSH BC ; 3DA3 PUSH HL ; 3DA4 PUSH DE ; 3DA5 PUSH IX ; 3DA6 PUSH IY ; 3DA8 CALL 03D91H ; 3DAA Inicializa algunos valores CALL 03D2BH ; 3DAD JR C,03DB5H ; 3DB0 LD (061DFH),HL ; 3DB2 POP IY ; 3DB5 POP IX ; 3DB7 POP DE ; 3DB9 POP HL ; 3DBA POP BC ; 3DBB RET ; 3DBC ; Put Buffer #1 PUSH BC ; 3DBD PUSH HL ; 3DBE PUSH DE ; 3DBF PUSH IX ; 3DC0 PUSH IY ; 3DC2 CALL 03D91H ; 3DC4 CALL 03D69H ; 3DC7 Buffer Insert LD (061DDH),IX ; 3DCA POP IY ; 3DCE POP IX ; 3DD0 POP DE ; 3DD2 POP HL ; 3DD3 POP BC ; 3DD4 RET ; 3DD5 LD HL,(061F7H) ; 3DD6 LD DE,061E1H ; 3DD9 LD BC,061F4H ; 3DDC LD IX,(061F5H) ; 3DDF LD IY,065BBH ; 3DE3 Buffer #2 Counter (Numero Marcado) RET ; 3DE7 ; Get Buffer #2 (Numero Marcado) PUSH BC ; 3DE8 PUSH HL ; 3DE9 PUSH DE ; 3DEA PUSH IX ; 3DEB PUSH IY ; 3DED CALL 03DD6H ; 3DEF ; HL = (061F7H) ; DE = 61E1h CALL 03D2BH ; 3DF2 JR C,03DFAH ; 3DF5 LD (061F7H),HL ; 3DF7 POP IY ; 3DFA POP IX ; 3DFC POP DE ; 3DFE POP HL ; 3DFF POP BC ; 3E00 RET ; 3E01 ; Put Buffer #2 (Numero Marcado) PUSH BC ; 3E02 PUSH HL ; 3E03 PUSH DE ; 3E04 PUSH IX ; 3E05 PUSH IY ; 3E07 CALL 03DD6H ; 3E09 CALL 03D69H ; 3E0C Buffer Insert LD (061F5H),IX ; 3E0F POP IY ; 3E13 POP IX ; 3E15 POP DE ; 3E17 POP HL ; 3E18 POP BC ; 3E19 RET ; 3E1A LD HL,(06303H) ; 3E1B LD DE,06281H ; 3E1E LD BC,06300H ; 3E21 LD IX,(06301H) ; 3E24 LD IY,065BEH ; 3E28 Buffer #3 Counter RET ; 3E2C ; Get Buffer #3 PUSH BC ; 3E2D PUSH HL ; 3E2E PUSH DE ; 3E2F PUSH IX ; 3E30 PUSH IY ; 3E32 CALL 03E1BH ; 3E34 CALL 03D2BH ; 3E37 JR C,03E3FH ; 3E3A LD (06303H),HL ; 3E3C POP IY ; 3E3F POP IX ; 3E41 POP DE ; 3E43 POP HL ; 3E44 POP BC ; 3E45 RET ; 3E46 ; Put Buffer #3 PUSH BC ; 3E47 PUSH HL ; 3E48 PUSH DE ; 3E49 PUSH IX ; 3E4A PUSH IY ; 3E4C CALL 03E1BH ; 3E4E CALL 03D69H ; 3E51 Buffer Insert LD (06301H),IX ; 3E54 POP IY ; 3E58 POP IX ; 3E5A POP DE ; 3E5C POP HL ; 3E5D POP BC ; 3E5E RET ; 3E5F LD HL,(06387H) ; 3E60 LD DE,06305H ; 3E63 LD BC,06384H ; 3E66 LD IX,(06385H) ; 3E69 LD IY,065BFH ; 3E6D Buffer #4 Counter RET ; 3E71 ; Get Buffer #4 PUSH BC ; 3E72 PUSH HL ; 3E73 PUSH DE ; 3E74 PUSH IX ; 3E75 PUSH IY ; 3E77 CALL 03E60H ; 3E79 CALL 03D2BH ; 3E7C JR C,03E84H ; 3E7F LD (06387H),HL ; 3E81 POP IY ; 3E84 POP IX ; 3E86 POP DE ; 3E88 POP HL ; 3E89 POP BC ; 3E8A RET ; 3E8B ; Put Buffer #4 PUSH BC ; 3E8C PUSH HL ; 3E8D PUSH DE ; 3E8E PUSH IX ; 3E8F PUSH IY ; 3E91 CALL 03E60H ; 3E93 CALL 03D69H ; 3E96 Buffer Insert LD (06385H),IX ; 3E99 POP IY ; 3E9D POP IX ; 3E9F POP DE ; 3EA1 POP HL ; 3EA2 POP BC ; 3EA3 RET ; 3EA4 LD HL,(0623BH) ; 3EA5 LD DE,061F9H ; 3EA8 LD BC,06238H ; 3EAB LD IX,(06239H) ; 3EAE LD IY,065BCH ; 3EB2 Buffer #5 Counter RET ; 3EB6 ; Get Buffer #5 PUSH BC ; 3EB7 PUSH HL ; 3EB8 PUSH DE ; 3EB9 PUSH IX ; 3EBA PUSH IY ; 3EBC CALL 03EA5H ; 3EBE CALL 03D2BH ; 3EC1 JR C,03EC9H ; 3EC4 LD (0623BH),HL ; 3EC6 POP IY ; 3EC9 POP IX ; 3ECB POP DE ; 3ECD POP HL ; 3ECE POP BC ; 3ECF RET ; 3ED0 ; Put Buffer #5 PUSH BC ; 3ED1 PUSH HL ; 3ED2 PUSH DE ; 3ED3 PUSH IX ; 3ED4 PUSH IY ; 3ED6 CALL 03EA5H ; 3ED8 CALL 03D69H ; 3EDB Buffer Insert LD (06239H),IX ; 3EDE POP IY ; 3EE2 POP IX ; 3EE4 POP DE ; 3EE6 POP HL ; 3EE7 POP BC ; 3EE8 RET ; 3EE9 LD HL,(0627FH) ; 3EEA LD DE,0623DH ; 3EED LD BC,0627CH ; 3EF0 LD IX,(0627DH) ; 3EF3 LD IY,065BDH ; 3EF7 Buffer #6 Counter RET ; 3EFB ; Get Buffer #6 PUSH BC ; 3EFC PUSH HL ; 3EFD PUSH DE ; 3EFE PUSH IX ; 3EFF PUSH IY ; 3F01 CALL 03EEAH ; 3F03 CALL 03D2BH ; 3F06 JR C,03F0EH ; 3F09 LD (0627FH),HL ; 3F0B POP IY ; 3F0E POP IX ; 3F10 POP DE ; 3F12 POP HL ; 3F13 POP BC ; 3F14 RET ; 3F15 ; Put Buffer #6 PUSH BC ; 3F16 PUSH HL ; 3F17 PUSH DE ; 3F18 PUSH IX ; 3F19 PUSH IY ; 3F1B CALL 03EEAH ; 3F1D CALL 03D69H ; 3F20 Buffer Insert LD (0627DH),IX ; 3F23 POP IY ; 3F27 POP IX ; 3F29 POP DE ; 3F2B POP HL ; 3F2C POP BC ; 3F2D RET ; 3F2E LD HL,(063CBH) ; 3F2F LD DE,06389H ; 3F32 LD BC,063C8H ; 3F35 LD IX,(063C9H) ; 3F38 LD IY,065C1H ; 3F3C Buffer #7 Counter RET ; 3F40 ; Get Buffer #7 PUSH BC ; 3F41 PUSH HL ; 3F42 PUSH DE ; 3F43 PUSH IX ; 3F44 PUSH IY ; 3F46 CALL 03F2FH ; 3F48 CALL 03D2BH ; 3F4B JR C,03F53H ; 3F4E LD (063CBH),HL ; 3F50 POP IY ; 3F53 POP IX ; 3F55 POP DE ; 3F57 POP HL ; 3F58 POP BC ; 3F59 RET ; 3F5A ; Put Buffer #7 CALL 0408FH ; 3F5B (6418h)=0Ch PUSH BC ; 3F5E PUSH HL ; 3F5F PUSH DE ; 3F60 PUSH IX ; 3F61 PUSH IY ; 3F63 CALL 03F2FH ; 3F65 CALL 03D69H ; 3F68 Buffer Insert LD (063C9H),IX ; 3F6B POP IY ; 3F6F POP IX ; 3F71 POP DE ; 3F73 POP HL ; 3F74 POP BC ; 3F75 RET ; 3F76 LD HL,(0640FH) ; 3F77 LD DE,063CDH ; 3F7A LD BC,0640CH ; 3F7D LD IX,(0640DH) ; 3F80 LD IY,065C0H ; 3F84 Buffer #8 Counter RET ; 3F88 ; Get Buffer #8 PUSH BC ; 3F89 PUSH HL ; 3F8A PUSH DE ; 3F8B PUSH IX ; 3F8C PUSH IY ; 3F8E CALL 03F77H ; 3F90 CALL 03D2BH ; 3F93 JR C,03F9BH ; 3F96 LD (0640FH),HL ; 3F98 POP IY ; 3F9B POP IX ; 3F9D POP DE ; 3F9F POP HL ; 3FA0 POP BC ; 3FA1 RET ; 3FA2 ; Put Buffer #8 PUSH BC ; 3FA3 PUSH HL ; 3FA4 PUSH DE ; 3FA5 PUSH IX ; 3FA6 PUSH IY ; 3FA8 CALL 03F77H ; 3FAA CALL 03D69H ; 3FAD Buffer Insert LD (0640DH),IX ; 3FB0 POP IY ; 3FB4 POP IX ; 3FB6 POP DE ; 3FB8 POP HL ; 3FB9 POP BC ; 3FBA RET ; 3FBB ; Put Log Buffer PUSH AF ; 3FBC PUSH BC ; 3FBD PUSH DE ; 3FBE PUSH HL ; 3FBF PUSH AF ; 3FC0 LD DE,06E7CH ; 3FC1 LD BC,0667DH ; 3FC4 LD HL,(0667AH) ; 3FC7 Puntero al Proximo char del Log Buffer PUSH HL ; 3FCA XOR A ; 3FCB SBC HL,BC ; 3FCC POP HL ; 3FCE JR C,03FD8H ; 3FCF (667Ah)<667Dh ? 3FD8 PUSH HL ; 3FD1 XOR A ; 3FD2 SBC HL,DE ; 3FD3 POP HL ; 3FD5 JR C,03FD9H ; 3FD6 (667Ah)<6E7Ch ? 3FD9 EX DE,HL ; 3FD8 HL = 6E7Ch POP AF ; 3FD9 LD (HL),A ; 3FDA DEC HL ; 3FDB LD (0667AH),HL ; 3FDC Puntero al Proximo char del Log Buffer POP HL ; 3FDF POP DE ; 3FE0 POP BC ; 3FE1 POP AF ; 3FE2 RET ; 3FE3 ; Copy (HL..HL+3) to a String of 4 Hex values like '30 FF FF 10' PUSH AF ; 3FE4 Makes 65F2h=4-Hexs String of (HL..HL+3) PUSH BC ; 3FE5 PUSH DE ; 3FE6 LD DE,065F2H ; 3FE7 LD B,004H ; 3FEA PUSH BC ; 3FEC LD BC,06E7CH ; 3FED Log Buffer end XOR A ; 3FF0 PUSH HL ; 3FF1 SBC HL,BC ; 3FF2 POP HL ; 3FF4 JR NC,03FFAH ; 3FF5 HL>6E7C ? HL = Buffer Start INC HL ; 3FF7 HL++ JR 03FFDH ; 3FF8 LD HL,0667DH ; 3FFA Log Buffer Start LD A,(HL) ; 3FFD A=Last byte Saved in Log Buffer AND 0F0H ; 3FFE RRC A ; 4000 RRC A ; 4002 RRC A ; 4004 RRC A ; 4006 CP 00AH ; 4008 JR C,0400EH ; 400A ADD A,007H ; 400C ADD A,'0' ; 400E LD (DE),A ; 4010 (65F2h) = ASCII de Hi Nibble de A INC DE ; 4011 LD A,(HL) ; 4012 AND 00FH ; 4013 CP 00AH ; 4015 JR C,0401BH ; 4017 ADD A,007H ; 4019 ADD A,'0' ; 401B LD (DE),A ; 401D (65F3h) = ASCII de Lo Nibble de A INC DE ; 401E LD A,020H ; 401F LD (DE),A ; 4021 (65F4h) = ' ' INC DE ; 4022 POP BC ; 4023 DJNZ 03FECH ; 4024 4 veces POP DE ; 4026 POP BC ; 4027 POP AF ; 4028 RET ; 4029 ; Espera una cambio en el port (C) o 5 probadas y ; despues almacena la diferencia entre el valor ; de ese desde la ultima llamada y esta en (IX) ; y almacena el valor de esta llamada del Port (C) ; en (IX+1) LD H,005H ; 402A IN A,(C) ; 402C LD B,A ; 402E IN A,(C) ; 402F CP B ; 4031 JR Z,04037H ; 4032 DEC H ; 4034 JR NZ,0402EH ; 4035 Espera un cambio en el Port (C) SUB (IX+001H) ; 4037 LD (IX+000H),A ; 403A (IX) = (P(C))-(IX+1) LD A,B ; 403D LD (IX+001H),A ; 403E (IX+1) = (P(C)) anterior RET ; 4041 ; Word to String ; Input: DE -> Word ; IY -> Buffer ; Output: IY -> ASCII String del Word ptr (DE) PUSH AF ; 4042 PUSH HL ; 4043 PUSH BC ; 4044 PUSH IX ; 4045 PUSH IY ; 4047 PUSH DE ; 4049 POP IX ; 404A LD H,(IX+001H) ; 404C LD L,(IX+000H) ; 404F LD BC,0FC18H ; 4052 BC = -1000d CALL 04072H ; 4055 CALL 04063H ; 4058 POP IY ; 405B POP IX ; 405D POP BC ; 405F POP HL ; 4060 POP AF ; 4061 RET ; 4062 LD BC,0FF9CH ; 4063 BC = -100d CALL 04072H ; 4066 LD BC,0FFF6H ; 4069 BC = -10d CALL 04072H ; 406C LD BC,0FFFFH ; 406F BC = -1d ; Input: BC,HL,IY ; Output: (IY)=A=HL div -BC LD A,02FH ; 4072 INC A ; 4074 ADD HL,BC ; 4075 JR C,04074H ; 4076 SBC HL,BC ; 4078 LD (IY+000H),A ; 407A (IY) = HL div -BC INC IY ; 407D RET ; 407F ; Busca diferencias en Strings ; Input: (HL) -> String1 ; (DE) -> String2 ; B = String Max Len ; Output: (HL) & (DE) Unmodified ; B = Input B - Equal Characters PUSH HL ; 4080 PUSH DE ; 4081 LD A,(HL) ; 4082 LD C,A ; 4083 LD A,(DE) ; 4084 CP C ; 4085 JR NZ,0408CH ; 4086 INC HL ; 4088 INC DE ; 4089 DJNZ 04082H ; 408A POP DE ; 408C POP HL ; 408D RET ; 408E ; (6418h)=0Ch PUSH AF ; 408F LD A,00CH ; 4090 LD (06418H),A ; 4092 POP AF ; 4095 RET ; 4096 ;-------------------------------- ; Input: DE, HL ;Output: IY:IX = HL * DE LD B,010H ; 4097 LD IX,00000H ; 4099 LD IY,00000H ; 409D ADD IY,IY ; 40A1 ADD IX,IX ; 40A3 JR NC,040A9H ; 40A5 INC IY ; 40A7 SLA L ; 40A9 RL H ; 40AB JR NC,040B5H ; 40AD ADD IX,DE ; 40AF JR NC,040B5H ; 40B1 INC IY ; 40B3 DJNZ 040A1H ; 40B5 RET ; 40B7 LD A,B ; 40B8 HL = BC Mod DE LD B,010H ; 40B9 LD HL,00000H ; 40BB RL C ; 40BE RLA ; 40C0 ADC HL,HL ; 40C1 SBC HL,DE ; 40C3 JR NC,040C8H ; 40C5 ADD HL,DE ; 40C7 CCF ; 40C8 DJNZ 040BEH ; 40C9 RL C ; 40CB RLA ; 40CD LD B,A ; 40CE RET ; 40CF 0EDD: 19x2E --------------------------------- TELE1.Z --------------------------------- Supongamos que en un TPMTc hay un codigo parecido a ese que paso, aunque es imposible asegurarlo, si es asi, podriamos decir lo siguiente: Esos fueron 170k de codigo. Tenemos algunas pistas que fuimos sacando del analisis de el mamotreto este. No pudimos encontrar el codigo que lee la tarjeta, o bien no es el codigo de un telefono o la tarjeta la lee el 80C31 (nos inclinamos por la segunda opcion, por algunas razones que no vamos a publicar) Hay una serie de Timers de Byte (14 en total) y otra serie de timers word (5), que se usan para diversos fines, por ahi nombrados y se actualizan por IRQ. Y hay tambien una serie de 8 buffers circulares, que estan explicados por ahi tambien. Y esas dos cosas son las dos herramientas en las que se basan para hacer todo, un concepto bastante sencillo, tipico de electronicos. Por la manera en que esta el codigo esta claro que fue programado directamente en assembler, pero seguramente en un Macro-assembler, y con muchos macros (digno de destacar los procedimientos para hacer put en buffers que nunca hacen put y asi sucesivamente). So, leanlo detenidamente, lleva bastante tiempo entender algo, pero VALE LA PENA. Si se cuelgan un rato con unas rutinas que hacen algunas cosas de math, seguramente no van a comprender que se trata de un MUL y un DIV, esta bien, no lo comprendan. Pero creanselo, eso hacen. Recuerden quel el Z80 no tiene instrucciones homologas. Nota: hay un chequeo de hard que se activa cuando el telefono se resetea, y si no se desactiva al cabo de un tiempo hay que resetear el telefono (cortocircuitar la pila o abrir y cerrar la puerta). 3.1.2 Analisis del codigo del i80C31 ------------------------------> TELE2.Z <--------------------------- IRQ: #1 ??? IRQ #0 #2 Nada Timer #0 IRQ #1 Timer #1 Siempre inicializado a $F45A (62554) Ports P1.4 Tarjeta I/O P1.6 Tarjeta Puesta? Bit Memory 01 Pueso a 1 cuando W(23) se pone a 100d 02 Apagado desde la IRQ #0, 0B00 espera que se apague para seguir... 0D Controla una mascara (0111.1111) sobre 0108 Internal Memory: 23 Word Contador Decendiente inicializado a 100 o 1 25 Byte = 30 En Timer #1 26 Byte Card[0] Sacado de la tabla en 1315 segun la tarjeta 27 Byte Mascara para (x0109) 28 Byte Mascara para (x0109) 29 Byte Card[1] Sacado de la tabla en 1315 segun la tarjeta 2A Byte Card[2] Sacado de la tabla en 1315 segun la tarjeta External Memory: 0003 BYTE bit mapped 0004 BYTE copia del 0107 0005 BYTE copia del 0108 bit mapped lo copia a 18 0006 BYTE Conjetura: Port de la tarjeta: bit 0 Clock 0008 lo copia a 19 0010 BYTE copia del 0110 0101 BYTE Stack Pointer Auxiliar 0102 WORD Pointer = $ 0108 0109 BYTE bit mapped 3132 BYTE Cambiado desde adentro de la IRQ #1 = (2D)+6 3133 BYTE Cambiado desde adentro de la IRQ #1 = #F7 o #CC o #02 o #A2 3134 BYTE Seteado a 90 despues de leer la tarjeta 3135 BYTE Seteado a 10 o 00 despues de leer la tarjeta. (depende de la T) 3139..315C Tarjeta 0000 LJMP 0100 ; 0003 LJMP 0F44 ; IRQ #0 0006 MOV R7,A ; 0007 MOV R7,A ; 0008 MOV R7,A ; 0009 MOV R7,A ; 000A MOV R7,A ; 000B LJMP 026A ; Timer #0 000E MOV R7,A ; 000F MOV R7,A ; 0010 MOV R7,A ; 0011 MOV R7,A ; 0012 MOV R7,A ; 0013 LJMP 030D ; IRQ #1 0016 MOV R7,A ; 0017 MOV R7,A ; 0018 MOV R7,A ; 0019 MOV R7,A ; 001A MOV R7,A ; 001B LJMP 026B ; Timer #1 001E MOV R7,A ; 001F MOV R7,A ; 0020 MOV R7,A ; 0021 MOV R7,A ; 0022 MOV R7,A ; 0023 MOV R7,A ; 0024 MOV R7,A ; 0025 MOV R7,A ; 0026 MOV R7,A ; 0027 MOV R7,A ; 0028 MOV R7,A ; 0029 MOV R7,A ; 002A MOV R7,A ; 002B MOV R7,A ; 002C MOV R7,A ; 002D MOV R7,A ; 002E MOV R7,A ; 002F MOV R7,A ; 0030 MOV R7,A ; 0031 MOV R7,A ; 0032 MOV R7,A ; 0033 MOV R7,A ; 0034 MOV R7,A ; 0035 MOV R7,A ; 0036 MOV R7,A ; 0037 MOV R7,A ; 0038 MOV R7,A ; 0039 MOV R7,A ; 003A MOV R7,A ; 003B MOV R7,A ; 003C MOV R7,A ; 003D MOV R7,A ; 003E MOV R7,A ; 003F MOV R7,A ; 0040 ADD A,R2 ; 0041 ADD A,R2 ; 0042 JNB 31,0075 ; 0045 JNB 2A,3FF2 ; 0048 MOV R2,2A ; 004A CJNE R3,#BB,0077 ; 004D ADD A,R2 ; 004E MOV R7,A ; 004F MOV R7,A ; 0050 MOV R7,A ; 0051 MOV R7,A ; 0052 MOV R7,A ; 0053 MOV R7,A ; 0054 MOV R7,A ; 0055 MOV R7,A ; 0056 MOV R7,A ; 0057 MOV R7,A ; 0058 MOV R7,A ; 0059 MOV R7,A ; 005A MOV R7,A ; 005B MOV R7,A ; 005C MOV R7,A ; 005D MOV R7,A ; 005E MOV R7,A ; 005F MOV R7,A ; 0060 MOV R7,A ; 0061 MOV R7,A ; 0062 MOV R7,A ; 0063 MOV R7,A ; 0064 MOV R7,A ; 0065 MOV R7,A ; 0066 MOV R7,A ; 0067 MOV R7,A ; 0068 MOV R7,A ; 0069 MOV R7,A ; 006A MOV R7,A ; 006B MOV R7,A ; 006C MOV R7,A ; 006D MOV R7,A ; 006E MOV R7,A ; 006F MOV R7,A ; 0070 MOV R7,A ; 0071 MOV R7,A ; 0072 MOV R7,A ; 0073 MOV R7,A ; 0074 MOV R7,A ; 0075 MOV R7,A ; 0076 MOV R7,A ; 0077 MOV R7,A ; 0078 MOV R7,A ; 0079 MOV R7,A ; 007A MOV R7,A ; 007B MOV R7,A ; 007C MOV R7,A ; 007D MOV R7,A ; 007E MOV R7,A ; 007F MOV R7,A ; 0080 LJMP 10C8 ; 0083 LJMP 032D ; 0086 LJMP 0DA2 ; 0089 LJMP 0DFB ; 008C LJMP 1288 ; 008F LJMP 0E41 ; 0092 LJMP 11B4 ; 0095 LJMP 1211 ; 0098 LJMP 1234 ; 009B LJMP 00CB ; 009E LJMP 00CB ; 00A1 LJMP 0E8A ; 00A4 LJMP 0EB4 ; 00A7 LJMP 0ECE ; 00AA LJMP 0F24 ; 00AD LJMP 0F34 ; 00B0 LJMP 00CB ; 00B3 LJMP FFFF ; 00B6 LJMP FFFF ; 00B9 LJMP FFFF ; 00BC LJMP FFFF ; 00BF LJMP FFFF ; 00C2 LJMP FFFF ; 00C5 LJMP FFFF ; 00C8 LCALL 023D ; R2=(R6R7) R3=(R6R7+1) R6R7+=2 00CB RET ; 00CC MOV R7,A ; 00CD MOV R7,A ; 00CE MOV R7,A ; 00CF MOV R7,A ; 00D0 MOV R7,A ; 00D1 MOV R7,A ; 00D2 MOV R7,A ; 00D3 MOV R7,A ; 00D4 MOV R7,A ; 00D5 MOV R7,A ; 00D6 MOV R7,A ; 00D7 MOV R7,A ; 00D8 MOV R7,A ; 00D9 MOV R7,A ; 00DA MOV R7,A ; 00DB MOV R7,A ; 00DC MOV R7,A ; 00DD MOV R7,A ; 00DE MOV R7,A ; 00DF MOV R7,A ; 00E0 MOV R7,A ; 00E1 MOV R7,A ; 00E2 MOV R7,A ; 00E3 MOV R7,A ; 00E4 MOV R7,A ; 00E5 MOV R7,A ; 00E6 MOV R7,A ; 00E7 MOV R7,A ; 00E8 MOV R7,A ; 00E9 MOV R7,A ; 00EA MOV R7,A ; 00EB MOV R7,A ; 00EC MOV R7,A ; 00ED MOV R7,A ; 00EE MOV R7,A ; 00EF MOV R7,A ; 00F0 MOV R7,A ; 00F1 MOV R7,A ; 00F2 MOV R7,A ; 00F3 MOV R7,A ; 00F4 MOV R7,A ; 00F5 MOV R7,A ; 00F6 MOV R7,A ; 00F7 MOV R7,A ; 00F8 MOV R7,A ; 00F9 MOV R7,A ; 00FA MOV R7,A ; 00FB MOV R7,A ; 00FC MOV R7,A ; 00FD MOV R7,A ; 00FE MOV R7,A ; 00FF MOV R7,A ; ; main 0100 ORL P1,#BF ; 0103 ANL P1,#BF ; (P1)=BFh 0106 CLR D3 ; 0108 CLR D4 ; Select Register's Bank 0000 010A MOV SP,#33 ; SP=33h 010D MOV R0,#7F ; 010F CLR A ; 0110 MOV @R0,A ; 0111 DJNZ R0,0110 ; (00..7F)=00 0113 CLR 07 ; 0115 CLR 08 ; 0117 MOV P3,#FF ; (P3)=FFh 011A CLR A ; 011B MOV DPTR,#0107 ; 011E MOVX @DPTR,A ; 011F MOV DPTR,#0108 ; 0122 MOVX @DPTR,A ; 0123 MOV DPTR,#0109 ; 0126 MOVX @DPTR,A ; 0127 MOV DPTR,#010A ; 012A MOVX @DPTR,A ; 012B MOV DPTR,#010B ; 012E MOVX @DPTR,A ; 012F INC DPTR ; 0130 MOVX @DPTR,A ; (0100..010C)=00 0131 MOV DPTR,#0004 ; 0134 MOVX @DPTR,A ; (0004)=00 0135 MOV DPTR,#0006 ; 0138 MOVX @DPTR,A ; (0006)=00 0139 MOV DPTR,#0007 ; 013C MOVX @DPTR,A ; (0007)=00 R2R3 R4R5 R6R7 013D LCALL 0197 ; (0100..010F)=00 (R2..R7) = 1321 1321 010F 0140 MOV R6,#03 ; R6=03 0142 MOV R7,#0F ; R7=0F 030F 0144 LCALL 0302 ; Enable IRQs 0147 LCALL 02EE ; Enable Timer #1 014A LCALL 026B ; Call Timer #1 IRQ 014D MOV DPTR,#4000 ; 0150 MOVX A,@DPTR ; 0151 CJNE A,#AA,015B ; 0154 INC DPTR ; 0155 MOVX A,@DPTR ; 0156 CJNE A,#55,015B ; 0159 SJMP 018E ; 015B MOV R2,#00 ; 015D MOV R3,#FF ; 015F LCALL 0236 ; (R6R7-2)=R2 (R6R7-1)=R3 R6R7-=2 0162 MOV R2,#41 ; 0164 MOV R3,#00 ; 0166 MOV DPTR,#0004 ; 0169 LCALL 0DFB ; 016C MOV R2,#00 ; 016E MOV R3,#AA ; 0170 LCALL 0236 ; (R6R7-2)=R2 (R6R7-1)=R3 R6R7-=2 0173 MOV R2,#40 ; 0175 MOV R3,#00 ; 0177 MOV DPTR,#0004 ; 017A LCALL 0DFB ; 017D MOV R2,#00 ; 017F MOV R3,#55 ; 0181 LCALL 0236 ; (R6R7-2)=R2 (R6R7-1)=R3 R6R7-=2 0184 MOV R2,#40 ; 0186 MOV R3,#01 ; 0188 MOV DPTR,#0004 ; 018B LCALL 0DFB ; 018E MOV DPTR,#0000 ; 0191 LCALL 200C ; 0194 LCALL 0E41 ; 0197 MOV DPTR,#010F ; 019A MOV R2,DPH ; 019C MOV R3,DPL ; 019E MOV DPTR,#0100 ; 01A1 LCALL 01F2 ; (0100..010F)=00 01A4 MOV DPTR,#1321 ; 01A7 MOV R2,DPH ; 01A9 MOV R3,DPL ; R2R3=#1321 01AB MOV DPTR,#1321 ; 01AE LCALL 01FD ; CMP R2R3,DPTR 01B1 JZ 01DF ; 01B3 PUSH 02 ; 01B5 PUSH 03 ; 01B7 PUSH DPL ; 01B9 PUSH DPH ; 01BB MOV R0,#02 ; 01BD MOV R1,#04 ; 01BF CLR A ; 01C0 MOVC A,@A+DPTR ; 01C1 MOV @R0,A ; 01C2 INC DPTR ; 01C3 INC R0 ; 01C4 DJNZ R1,01BF ; 01C6 MOV DPL,R3 ; 01C8 MOV DPH,R2 ; 01CA MOV 02,R4 ; 01CC MOV 03,R5 ; 01CE LCALL 01F2 ; (DPTR..R2R3)=0 01D1 POP DPH ; 01D3 POP DPL ; 01D5 POP 03 ; 01D7 POP 02 ; 01D9 INC DPTR ; 01DA INC DPTR ; 01DB INC DPTR ; 01DC INC DPTR ; 01DD SJMP 01AE ; 01DF LCALL 0206 ; 01E2 13 21 13 21 01 00 ; (R2..R7) = 13 21 13 21 01 0F 01E8 LCALL 0206 ; 01EB 13 21 13 21 01 0F ; (R2..R7) = 13 21 13 21 01 0F 01F1 RET ; 01F2 LCALL 01FD ; CMP R2R3,DPTR 01F5 JNZ 01F8 ; 01F7 RET ; 01F8 CLR A ; 01F9 MOVX @DPTR,A ; 01FA INC DPTR ; 01FB SJMP 01F2 ; 01FD MOV A,R3 ; CMP R2R3,DPTR 01FE XRL A,DPL ; 0200 JNZ 0205 ; 0202 MOV A,R2 ; 0203 XRL A,DPH ; 0205 RET ; 0206 POP DPH ; 0208 POP DPL ; DPTR = Return Address 020A MOV R0,#02 ; 020C MOV R1,#06 ; 020E CLR A ; 020F MOVC A,@A+DPTR ; 0210 MOV @R0,A ; 0211 INC DPTR ; 0212 INC R0 ; 0213 DJNZ R1,020E ; (R2..R7)=ROM (Return Address++) 0215 PUSH DPL ; 0217 PUSH DPH ; DPTR=Return Address+6 0219 MOV DPL,R5 ; 021B MOV DPH,R4 ; 021D LCALL 01FD ; CMP R2R3,DPTR 0220 JZ 0235 ; 0222 CLR A ; 0223 MOVC A,@A+DPTR ; 0224 INC DPTR ; 0225 MOV R5,DPL ; 0227 MOV R4,DPH ; 0229 MOV DPL,R7 ; 022B MOV DPH,R6 ; 022D MOVX @DPTR,A ; 022E INC DPTR ; 022F MOV R7,DPL ; 0231 MOV R6,DPH ; 0233 SJMP 0219 ; 0235 RET ; 0236 MOV R0,#02 ; (R6R7-2)=R2 (R6R7-1)=R3 R6R7-=2 0238 MOV R1,#02 ; 023A LJMP 0244 ; 023D MOV R0,#02 ; 023F MOV R1,#02 ; 0241 LJMP 0257 ; 0244 MOV A,R7 ; 0245 CLR C ; 0246 SUBB A,R0 ; 0247 MOV R7,A ; 0248 MOV A,R6 ; 0249 SUBB A,#00 ; 024B MOV R6,A ; R6R7=R6R7-2 024C MOV DPL,R7 ; 024E MOV DPH,R6 ; 0250 MOV A,@R1 ; 0251 MOVX @DPTR,A ; R6R7=2 0252 INC DPTR ; 0253 INC R1 ; 0254 DJNZ R0,0250 ; 0256 RET ; 0257 PUSH ACC ; R2=(R6R7) R3=(R6R7+1) R6R7+=2 0259 MOV DPL,R7 ; 025B MOV DPH,R6 ; 025D MOVX A,@DPTR ; 025E MOV @R1,A ; 025F INC DPTR ; 0260 INC R1 ; 0261 DJNZ R0,025D ; 0263 MOV R6,DPH ; 0265 MOV R7,DPL ; 0267 POP ACC ; 0269 RET ; ; Timer IRQ #0 ; 026A RETI ; ; Timer IRQ #1 ; 026B PUSH PSW ; 026D PUSH ACC ; 026F PUSH DPH ; 0271 PUSH DPL ; 0273 PUSH B ; 0275 SETB D4 ; 0277 CLR D3 ; Select Register's Bank 0010 0279 LCALL 02FB ; Timer #1 = $F45A 62554=31277*2 027C JNB 04,02D1 ; Bit 4 = 0 ?  02D1 W(23)-- Exit 027F MOV DPTR,#0109 ; 0282 MOVX A,@DPTR ; A = (x0109) 0283 JB E0,0294 ; 0286 ORL A,#01 ; 0288 MOVX @DPTR,A ; 0289 MOV DPTR,#0006 ; 028C MOVX @DPTR,A ; 028D MOV A,30 ; 028F MOV 25,A ; 0291 LJMP 02D1 ; W(23)-- Exit 0294 PUSH ACC ; 0296 MOV A,25 ; 0298 CLR C ; 0299 SUBB A,#0A ; 029B MOV 25,A ; 029D CJNE A,#00,02C5 ; 02A0 POP ACC ; 02A2 ANL A,#FE ; 02A4 MOVX @DPTR,A ; 02A5 MOV DPTR,#0006 ; 02A8 MOVX @DPTR,A ; 02A9 JNB 06,02BB ; 02AC MOV C,P1.4 ; Card I/O 02AE CPL C ; 02AF CLR A ; 02B0 CJNE A,2E,02B6 ; 02B3 LJMP 02BB ; 02B6 JC 02CA ; 02B8 DJNZ 2E,027F ; 02BB MOV C,P1.4 ; Card I/O 02BD CPL C ; 02BE MOV 00,C ; 02C0 CLR 04 ; 02C2 LJMP 02D1 ; W(23)-- Exit 02C5 POP ACC ; 02C7 LJMP 02D1 ; W(23)-- Exit 02CA MOV 2E,#00 ; 02CD SETB 00 ; 02CF SJMP 027F ; 02D1 MOV A,24 ; 02D3 JZ 02DA ; 02D5 DEC A ; 02D6 MOV 24,A ; 02D8 SJMP 02E3 ; 02DA MOV A,23 ; 02DC JZ 02E3 ; 02DE DEC A ; 02DF MOV 23,A ; 02E1 DEC 24 ; 02E3 POP B ; W(23)-- Exit 02E5 POP DPL ; 02E7 POP DPH ; 02E9 POP ACC ; 02EB POP PSW ; 02ED RETI ; 02EE MOV TMOD,#10 ; Timer Mode 02F1 MOV TH1,#F4 ; 02F4 MOV TL1,#5A ; 02F7 MOV TCON,#40 ; Timer Control = 0100 0000 02FA RET ; Timer 1 ON Type 0 Edge 0 02FB MOV TH1,#F4 ; 02FE MOV TL1,#5A ; 0301 RET ; Timer #1 = $F45A = 62554 0302 CLR IT0 ; IRQ 0 Type 0304 CLR IT1 ; IRQ 1 Type 0306 MOV IP,#05 ; IRQ 0 Priority, IRQ 1 Priority 0309 MOV IE,#81 ; External IRQ Enabled, Global IRQ Enabled 030C RET ; ; IRQ #1 ; 030D SETB 08 ; b08 = 1 030F LCALL 1062 ; 0312 JNB 07,032A ; ?  Exit 0315 MOV A,#CC ; 0317 JB 96,031C ; IRQ #1 Input = 1 ?  031C 031A MOV A,#F7 ; 031C LCALL 10AA ; (x3132)=(2D)+6 (2D)=0 (x3133)=F7/CC R2=0 R3=F7 031F LCALL 09C4 ; Disable TIRQ #1 (x0108)&=0000 0111 0322 MOV DPTR,#0101 ; 0325 MOVX A,@DPTR ; 0326 POP PSW ; 0328 MOV SP,A ; SP=(x0101) 032A CLR AA ; Disable IRQ #1 032C RETI ; 032D CLR AA ; Disable IRQ #1 032F PUSH PSW ; 0331 NOP ; 0332 NOP ; 0333 MOV DPTR,#0101 ; 0336 MOV A,SP ; 0338 DEC A ; 0339 MOVX @DPTR,A ; (x0101)=SP-1 033A NOP ; 033B NOP ; 033C SETB 07 ; 033E MOV DPH,R2 ; 0340 MOV DPL,R3 ; 0342 MOV 31,R2 ; 0344 MOV 32,R3 ; 0346 MOV A,#FB ; 0348 JNB P1.6,0384 ; No hay Terjeta Puesta ?  0384 034B SETB D3 ; Select Register's Bank 0011 034D SETB D4 ; 034F CLR A ; 0350 MOV 2D,A ; 0352 MOV A,#01 ; 0354 LCALL 0DD4 ; DPTR++ 0357 MOVX A,@DPTR ; 0358 MOV DPTR,#0366 ; 035B LCALL 0DE8 ; 035E MOV B,#03 ; 0361 MUL AB ; 0362 MOV DPTR,#036C ; 0365 JMP @A+DPTR ; 0366 DB 05,00,01,02,03,04 036C LJMP 037E ; 036F LJMP 038A ; Read Card, Validate Telecard, Read Size? 0372 LJMP 03CE ; 0375 LJMP 03B4 ; 0378 LJMP 03AE ; 037B LJMP 03C8 ; 037E MOV A,#84 ; 0380 SJMP 0384 ; 0382 MOV A,#F7 ; 0384 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=84 R2=0 R3=84 0387 LJMP 03DB ; RET 038A MOV DPTR,#0100 ; 038D MOV A,#03 ; 038F MOVX @DPTR,A ; 0390 CLR P1.7 ; P1 = 0xxxxxxx 0392 LCALL 1034 ; P1 & Delays 0395 SETB IE.2 ; Enable IRQ #1 0397 LCALL 03E3 ; Read Card, Validate Telecard, Read Size? 039A MOV A,03 ; 039C CJNE A,#02,03DB ; 039F MOV DPTR,#0100 ; 03A2 MOVX A,@DPTR ; 03A3 DEC A ; 03A4 MOVX @DPTR,A ; 03A5 JNZ 0395 ; 03A7 CLR IE.2 ; Disable IRQ #1 03A9 LCALL 1062 ; P1 & Delays 03AC SJMP 03DB ; RET 03AE LCALL 1062 ; 03B1 CLR A ; 03B2 SJMP 0384 ; 03B4 MOV A,2F ; 03B6 JZ 0382 ; 03B8 LCALL 0FC9 ; 03BB SETB IE.2 ; Enable IRQ #1 03BD MOV A,2F ; 03BF CJNE A,#01,03C8 ; 03C2 LCALL 0B62 ; 03C5 LJMP 03D8 ; RET 03C8 LCALL 060E ; 03CB LJMP 03D8 ; RET 03CE MOV A,2F ; 03D0 JZ 0382 ; 03D2 DEC A ; 03D3 JNZ 03C8 ; 03D5 LCALL 0C7F ; 03D8 LCALL 0FDE ; 03DB CLR 07 ; 03DD CLR IE.3 ; Disable Timer #1 Interrupt 03DF POP PSW ; 03E1 RET ; 03E2 MOV R7,A ; 03E3 MOV 27,#08 ; Read Card, Validate Telecard, Read Size? 03E6 MOV 28,#04 ; 03E9 MOV R0,#02 ; 03EB MOV 2F,R0 ; 03ED MOV R1,#24 ; 03EF MOV R6,#00 ; 03F1 MOV R7,#00 ; 03F3 MOV DPH,31 ; 03F6 MOV DPL,32 ; 03F9 MOV A,#07 ; 03FB LCALL 0DD4 ; DPTR=3139 03FE LCALL 04BA ; Lee Tarjeta R1 Bytes to DPTR[] 0401 JNZ 041F ; Tarjeta no puesta?  041F 0403 MOV DPH,31 ; 0406 MOV DPL,32 ; 0409 MOV A,#08 ; 040B LCALL 0DD4 ; DPTR=313A 040E MOVX A,@DPTR ; 040F XRL A,#FF ; 0411 JZ 0430 ; Tarjeta Quemada???? ?  0430 0413 MOVX A,@DPTR ; 0414 CJNE A,#83,0419 ; 0417 SJMP 0449 ; 0419 MOV A,#04 ; Not a Telecard ? 041B MOV 2F,A ; 2F = 04 041D SJMP 0462 ; hace algo y RET 041F MOV R0,2F ; Tarjeta Quemada???? 0421 DJNZ R0,03EB ; trata de volver a leer. 0423 MOV A,27 ; 0425 CJNE A,#08,0430 ; 0428 MOV 27,#04 ; si no pudo leer 3 veces 042B MOV 28,#08 ; Invierte los bits de Read y Write 042E SJMP 03E9 ; y vuelve a tratar 3 veces mas 0430 JNB 0C,0446 ; 0433 PUSH 12 ; 0435 MOV DPTR,#0109 ; 0438 MOVX A,@DPTR ; 0439 MOV R3,A ; 043A MOV DPTR,#03E2 ; 043D MOVX A,@DPTR ; 043E ORL A,R3 ; 043F MOVX @DPTR,A ; 0440 MOV DPTR,#0109 ; 0443 MOVX @DPTR,A ; 0444 POP 12 ; 0446 LJMP 09D2 ; 0449 MOV 2B,A ; Telecard: 044B MOV DPH,31 ; 044E MOV DPL,32 ; 0451 MOV A,#11 ; 0453 LCALL 0DD4 ; DPTR=3143 0456 MOVX A,@DPTR ; 0457 ANL A,#F0 ; A = CardByte[11] & 1111.0000 0459 MOV DPTR,#1310 ; 045C LCALL 0DE8 ; A = 0 if CardByte[11] !in [80,20,10,00] 045F LJMP 0469 ; else A = [04,03,02,01] 0462 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A R2=0 R3=A 0465 LCALL 1062 ; 0468 RET ; 0469 MOV DPTR,#1315 ; 046C DEC A ; 046D CLR C ; 046E MOV B,A ; 0470 RLC A ; 0471 ADD A,B ; 0473 PUSH ACC ; 0475 MOVC A,@A+DPTR ; 0476 MOV 26,A ; 26 = CardX0[0] 0478 POP ACC ; 047A INC A ; 047B PUSH ACC ; 047D MOVC A,@A+DPTR ; 047E MOV 2A,A ; 2A = CardX0[1] 0480 POP ACC ; 0482 INC A ; 0483 MOVC A,@A+DPTR ; 0484 MOV 29,A ; 29 = CardX0[2] 0486 MOV DPTR,#1304 ; 0489 CLR C ; 048A RLC A ; 048B PUSH ACC ; A = CardX0[2]*2 048D MOVC A,@A+DPTR ; 048E MOV B,A ; 0490 POP ACC ; 0492 INC A ; 0493 MOVC A,@A+DPTR ; 0494 LCALL 108F ; (2D)+=2. (3134)=B (3135)=A 0497 MOV DPH,31 ; 049A MOV DPL,32 ; 049D MOV A,#08 ; 049F LCALL 0DD4 ; DPTR=313A 04A2 MOVX A,@DPTR ; 04A3 SETB 02 ; 04A5 MOV A,#03 ; 04A7 LJMP 04B0 ; RET 04AA MOV DPTR,#04B4 ; 04AD MOV A,2F ; 04AF MOVC A,@A+DPTR ; 04B0 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A R2=0 R3=A 04B3 RET ; 04B4 LJMP 0501 ; 04B7 INC @R1 ; 04B8 INC R1 ; 04B9 INC A ; 04BA PUSH DPH ; 04BC PUSH DPL ; 04BE MOV DPTR,#0109 ; 04C1 MOV A,#30 ; 04C3 MOVX @DPTR,A ; (x0109)=0011 0000 04C4 MOV DPTR,#0006 ; 04C7 MOVX @DPTR,A ; (x0006)=0011 0000 04C8 POP DPL ; 04CA POP DPH ; 04CC LCALL 05A9 ; Lee Tarjeta R1 Bytes to DPTR[] 04CF RET ; 04D0 CLR IE.7 ; Reset Card Counter 04D2 MOV A,#00 ; A = 0000.0000 04D4 SJMP 04E8 ; A=00 04D6 CLR IE.7 ; Disable Global Interrupt 04D8 MOV A,27 ; A = 0000.1000 o 0000.0100 04DA SJMP 04E8 ; 04DC CLR IE.7 ; Disable Global Interrupt 04DE MOV A,28 ; A = 0000.0100 o 0000.1000 04E0 SJMP 04E8 ; 04E2 CLR IE.7 ; Write & Clock 04E4 MOV A,#0C ; A = 0000.1100 04E6 SJMP 04E8 ; 04E8 MOV B,A ; 04EA MOV DPTR,#0109 ; 04ED MOVX A,@DPTR ; 04EE ORL A,B ; 04F0 MOV DPTR,#0006 ; 04F3 MOVX @DPTR,A ; 04F4 NOP ; 04F5 ORL A,#01 ; 04F7 MOVX @DPTR,A ; A |= 0000.0001 04F8 NOP ; 04F9 NOP ; 04FA NOP ; 04FB NOP ; 04FC NOP ; 04FD NOP ; 04FE ANL A,#FE ; A &= 1111.1110 0500 MOVX @DPTR,A ; 0501 MOV DPTR,#0109 ; 0504 MOVX A,@DPTR ; 0505 MOV DPTR,#0006 ; 0508 MOVX @DPTR,A ; 0509 NOP ; 050A NOP ; 050B NOP ; 050C NOP ; 050D NOP ; 050E NOP ; 050F NOP ; 0510 NOP ; 0511 MOV C,P1.4 ; 0513 CPL C ; 0514 SETB IE.7 ; Enable Global Interrupt 0516 RET ; 0517 CLR 00 ; 0519 PUSH ACC ; 051B MOV DPTR,#0109 ; 051E MOVX A,@DPTR ; 051F ORL A,#0C ; 0521 MOVX @DPTR,A ; 0522 MOV DPTR,#0006 ; 0525 MOVX @DPTR,A ; 0526 POP ACC ; 0528 MOV A,29 ; 052A MOV B,2A ; 052D SETB IE.3 ; Enable Timer #1 Interrupt 052F SETB 06 ; 0531 MOV 30,B ; 0534 MOV 2E,A ; 0536 CJNE A,#01,053B ; 0539 CLR 06 ; 053B SETB 04 ; 053D JB 04,053D ; 0540 PUSH ACC ; 0542 MOV DPTR,#0109 ; 0545 MOVX A,@DPTR ; 0546 ANL A,#30 ; 0548 MOVX @DPTR,A ; 0549 MOV DPTR,#0006 ; 054C MOVX @DPTR,A ; 054D POP ACC ; 054F MOV C,P1.4 ; Card I/O 0551 CPL C ; 0552 CLR AB ; Disable Timer #1 Interrupt 0554 RET ; 0555 PUSH 1F ; Avanza R6R7 veces el Card Conuter 0557 PUSH 1E ; 0559 MOV A,27 ; 055B MOV B,A ; 055D MOV DPTR,#0109 ; 0560 MOVX A,@DPTR ; 0561 ORL A,B ; 0563 MOV DPTR,#0006 ; 0566 MOVX @DPTR,A ; 0567 CJNE R7,#00,0571 ; 056A CJNE R6,#00,0570 ; 056D LJMP 057D ; 0570 DEC R6 ; 0571 DEC R7 ; 0572 ORL A,#01 ; 0574 MOVX @DPTR,A ; 0575 NOP ; 0576 NOP ; 0577 NOP ; 0578 ANL A,#FE ; 057A MOVX @DPTR,A ; 057B SJMP 0567 ; 057D MOV DPTR,#0109 ; 0580 MOVX A,@DPTR ; 0581 MOV DPTR,#0006 ; 0584 MOVX @DPTR,A ; 0585 POP 1E ; 0587 POP 1F ; 0589 MOV C,P1.4 ; 058B CPL C ; 058C RET ; 058D CLR C ; Avanza hastal byte R6R7 el Card Counter 058E MOV A,R7 ; 058F RLC A ; 0590 MOV R7,A ; 0591 MOV A,R6 ; 0592 RLC A ; 0593 MOV R6,A ; 0594 CLR C ; 0595 MOV A,R7 ; 0596 RLC A ; 0597 MOV R7,A ; 0598 MOV A,R6 ; 0599 RLC A ; 059A MOV R6,A ; 059B CLR C ; 059C MOV A,R7 ; 059D RLC A ; 059E MOV R7,A ; 059F MOV A,R6 ; 05A0 RLC A ; 05A1 MOV R6,A ; SHL R7R6,3 05A2 LCALL 04D0 ; Reset Card Counter 05A5 LCALL 0555 ; Avanza R6R7 veces el Card Conuter 05A8 RET ; 05A9 PUSH DPH ; Lee Tarjeta R1 Bytes to DPTR[] 05AB PUSH DPL ; 05AD LCALL 058D ; Avanza hastal byte R6R7 el Card Counter 05B0 POP DPL ; 05B2 POP DPH ; 05B4 JNB P1.6,060D ; P1.6 = 0 ?  RET 05B7 PUSH DPH ; 05B9 PUSH DPL ; 05BB MOV R0,#08 ; 05BD CLR A ; 05BE MOV C,P1.4 ; 05C0 CPL C ; Complement Carry 05C1 RLC A ; 05C2 PUSH ACC ; 05C4 LCALL 04D6 ; Read Card & Clock 05C7 POP ACC ; 05C9 DJNZ R0,05C1 ; 05CB POP DPL ; 05CD POP DPH ; 05CF MOVX @DPTR,A ; (DPTR++) = GetCardByte() 05D0 INC DPTR ; 05D1 MOV A,R1 ; 05D2 CJNE A,#24,060A ; 05D5 PUSH DPH ; 05D7 PUSH DPL ; 05D9 CLR A ; 05DA MOV C,P1.4 ; 05DC CPL C ; 05DD RLC A ; A= (A<<1) + GetCardBit(); 05DE PUSH ACC ; 05E0 LCALL 04D6 ; Read Card & Clock 05E3 MOV DPTR,#0109 ; 05E6 MOVX A,@DPTR ; 05E7 ORL A,#0C ; A |= 1100.0000 05E9 MOV DPTR,#0006 ; 05EC MOVX @DPTR,A ; 05ED ORL A,#01 ; A |= 0000.0001 05EF MOVX @DPTR,A ; 05F0 ANL A,#FE ; A &= 1111.1110 05F2 MOVX @DPTR,A ; 05F3 MOV DPTR,#0109 ; 05F6 MOVX A,@DPTR ; 05F7 MOV DPTR,#0006 ; 05FA MOVX @DPTR,A ; 05FB POP ACC ; 05FD POP DPL ; 05FF POP DPH ; 0601 DEC R1 ; 0602 MOV R0,#07 ; 0604 PUSH DPH ; 0606 PUSH DPL ; 0608 SJMP 05BE ; 060A DJNZ R1,05B7 ; 060C CLR A ; 060D RET ; 060E MOV DPH,31 ; 0611 MOV DPL,32 ; 0614 MOV A,#03 ; 0616 LCALL 0DD4 ; DPTR=3135 0619 MOVX A,@DPTR ; 061A MOV DPTR,#0636 ; 061D LCALL 0DE8 ; 0620 MOV B,#03 ; 0623 MUL AB ; 0624 MOV DPTR,#0640 ; 0627 JMP @A+DPTR ; 0628 MOV A,#00 ; 062A MOV B,#6D ; 062D LCALL 108F ; (2D)+=2. (3134)=006D 0630 MOV A,#84 ; 0632 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A R2=0 R3=A 0635 RET ; 0636 INC R1 ; 0637 POP P3 ; 0639 ORL C,/C0 ; 063B MOVX A,@DPTR ; 063C MOVX @DPTR,A ; 063D MOV R2,A ; 063E MOV R3,A ; 063F MOV R4,A ; 0640 LJMP 0628 ; 0643 LJMP 065E ; 0646 LJMP 071F ; 0649 LJMP 075D ; 064C LJMP 0801 ; 064F LJMP 0763 ; 0652 LJMP 0778 ; 0655 LJMP 083B ; 0658 LJMP 0854 ; 065B LJMP 0860 ; 065E MOV DPH,31 ; 0661 MOV DPL,32 ; 0664 MOV A,#04 ; 0666 LCALL 0DD4 ; DPTR=3136 0669 MOVX A,@DPTR ; 066A MOV R6,A ; 066B INC DPTR ; 066C MOVX A,@DPTR ; 066D MOV R7,A ; 066E JB 02,0694 ; 0671 ANL A,#03 ; 0673 JNZ 067C ; 0675 INC DPTR ; 0676 MOVX A,@DPTR ; 0677 CJNE A,#04,0688 ; 067A SJMP 0694 ; 067C MOV A,#00 ; 067E MOV B,#6B ; 0681 LCALL 108F ; (2D)+=2. (3134)=006B 0684 MOV A,#84 ; 0686 SJMP 0703 ; 0688 MOV A,#00 ; 068A MOV B,#67 ; 068D LCALL 108F ; (2D)+=2. (3134)=0067 0690 MOV A,#84 ; 0692 SJMP 0703 ; 0694 CLR 00 ; 0696 LCALL 058D ; Avanza hastal byte R6R7 el Card Counter 0699 MOV DPH,31 ; 069C MOV DPL,32 ; 069F MOV A,#06 ; 06A1 LCALL 0DD4 ; DPTR=3138 06A4 MOVX A,@DPTR ; 06A5 MOV R1,A ; 06A6 INC DPTR ; 06A7 MOVX A,@DPTR ; 06A8 JB 02,06AD ; 06AB ANL A,#7F ; 06AD PUSH DPH ; 06AF PUSH DPL ; 06B1 MOV R0,#08 ; 06B3 RLC A ; 06B4 PUSH ACC ; 06B6 JC 06BF ; 06B8 LCALL 04D6 ; Read Card & Clock 06BB MOV 17,C ; 06BD SJMP 06DA ; 06BF PUSH DPH ; 06C1 PUSH DPL ; 06C3 PUSH ACC ; 06C5 MOV DPTR,#0010 ; 06C8 MOVX A,@DPTR ; 06C9 JNB E1,0707 ; 06CC POP ACC ; 06CE POP DPL ; 06D0 POP DPH ; 06D2 LCALL 0517 ; 06D5 MOV 17,C ; 06D7 LCALL 04D6 ; Read Card & Clock 06DA POP ACC ; 06DC MOV C,17 ; 06DE DJNZ R0,06B3 ; 06E0 POP DPL ; 06E2 POP DPH ; 06E4 RLC A ; 06E5 MOVX @DPTR,A ; 06E6 INC DPTR ; 06E7 MOVX A,@DPTR ; 06E8 DJNZ R1,06AD ; 06EA JB 00,06F9 ; 06ED MOV A,#00 ; 06EF MOV B,#6F ; 06F2 LCALL 108F ; (2D)+=2. (3134)=006F 06F5 MOV A,#84 ; 06F7 SJMP 0703 ; 06F9 MOV A,#00 ; 06FB MOV B,#90 ; 06FE LCALL 108F ; (2D)+=2. (3134)=0090 0701 MOV A,#00 ; 0703 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A R2=0 R3=A 0706 RET ; 0707 POP ACC ; 0709 POP DPL ; 070B POP DPH ; 070D POP ACC ; 070F POP DPL ; 0711 POP DPH ; 0713 MOV A,#00 ; 0715 MOV B,#CC ; 0718 LCALL 108F ; (2D)+=2. (3134)=00CC 071B MOV A,#CC ; 071D SJMP 0703 ; 071F MOV DPH,31 ; 0722 MOV DPL,32 ; 0725 MOV A,#06 ; 0727 LCALL 0DD4 ; DPTR=3138 072A MOVX A,@DPTR ; 072B CJNE A,#00,073C ; 072E MOV A,#00 ; 0730 MOV B,#90 ; 0733 LCALL 108F ; (2D)+=2. (3134)=0090 0736 MOV A,#00 ; 0738 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A R2=0 R3=A 073B RET ; 073C MOV R1,A ; 073D MOV DPH,31 ; 0740 MOV DPL,32 ; 0743 MOV A,#04 ; 0745 LCALL 0DD4 ; DPTR=3136 0748 MOVX A,@DPTR ; 0749 MOV R6,A ; 074A INC DPTR ; 074B MOVX A,@DPTR ; 074C MOV R7,A ; R6R7=W(3136) 074D MOV DPH,31 ; 0750 MOV DPL,32 ; 0753 MOV A,#07 ; 0755 LCALL 0DD4 ; DPTR=3139 0758 LCALL 05A9 ; Lee Tarjeta R1 Bytes to DPTR[] 075B SJMP 072E ; 075D LCALL 080D ; A = GetCardBit(W(3138)), DPRT=3139 0760 LJMP 08BB ; 0763 LCALL 080D ; A = GetCardBit(W(3138)), DPRT=3139 0766 PUSH DPL ; 0768 PUSH DPH ; 076A LCALL 04E2 ; Write & Clock 076D CLR A ; 076E RLC A ; 076F POP DPH ; 0771 POP DPL ; 0773 MOVX @DPTR,A ; 0774 INC DPTR ; 0775 LJMP 08BB ; 0778 LCALL 04D0 ; Reset Card Counter 077B MOV DPH,31 ; 077E MOV DPL,32 ; 0781 MOV A,#06 ; 0783 LCALL 0DD4 ; DPTR = 3138 0786 CLR C ; 0787 MOV A,#08 ; 0789 PUSH ACC ; 078B MOVX A,@DPTR ; 078C MOV R1,#08 ; 078E PUSH DPH ; 0790 PUSH DPL ; 0792 RLC A ; 0793 PUSH ACC ; 0795 JNC 079A ; 0797 LCALL 04E2 ; Write & Clock 079A LCALL 04D6 ; Read Card & Clock 079D POP ACC ; 079F DJNZ R1,0792 ; 07A1 POP DPL ; 07A3 POP DPH ; 07A5 INC DPTR ; 07A6 POP ACC ; 07A8 DEC A ; 07A9 JNZ 0789 ; 07AB MOV R6,#00 ; 07AD MOV R7,#80 ; 07AF LCALL 0555 ; Avanza R6R7 veces el Card Conuter 07B2 MOV DPH,31 ; 07B5 MOV DPL,32 ; 07B8 MOV A,#07 ; 07BA LCALL 0DD4 ; DPTR+=07 07BD MOV R1,#08 ; 07BF PUSH DPH ; 07C1 PUSH DPL ; 07C3 MOV R0,#08 ; 07C5 CLR A ; 07C6 MOV C,P1.4 ; Card I/O 07C8 CPL C ; 07C9 RLC A ; 07CA PUSH ACC ; 07CC LCALL 04D6 ; Read Card & Clock 07CF POP ACC ; 07D1 DJNZ R0,07C9 ; 07D3 POP DPL ; 07D5 POP DPH ; 07D7 MOVX @DPTR,A ; 07D8 INC DPTR ; 07D9 DJNZ R1,07BF ; 07DB CLR A ; 07DC PUSH DPH ; 07DE PUSH DPL ; 07E0 RLC A ; 07E1 PUSH ACC ; 07E3 LCALL 04D6 ; Read Card & Clock 07E6 POP ACC ; 07E8 RLC A ; 07E9 PUSH ACC ; 07EB LCALL 04D6 ; Read Card & Clock 07EE POP ACC ; 07F0 RLC A ; 07F1 PUSH ACC ; 07F3 LCALL 04D6 ; Read Card & Clock 07F6 POP ACC ; 07F8 RLC A ; 07F9 POP DPL ; 07FB POP DPH ; 07FD MOVX @DPTR,A ; 07FE LJMP 08BB ; 0801 LCALL 080D ; A = GetCardBit(W(3138)), DPRT=3139 0804 LCALL 04E2 ; Write & Clock 0807 LCALL 04E2 ; Write & Clock 080A LJMP 08BB ; 080D LCALL 04D0 ; A = GetCardBit(W(3138)), DPRT=3139 0810 MOV DPH,31 ; 0813 MOV DPL,32 ; 0816 MOV A,#06 ; 0818 LCALL 0DD4 ; DPTR=3138 081B MOVX A,@DPTR ; 081C MOV R7,A ; 081D INC DPTR ; 081E MOVX A,@DPTR ; 081F MOV R6,A ; R6R7=W(x3138) 0820 MOV DPH,31 ; 0823 MOV DPL,32 ; 0826 MOV A,#07 ; 0828 LCALL 0DD4 ; DPTR=3139 082B PUSH DPL ; 082D PUSH DPH ; 082F LCALL 0555 ; Avanza R6R7 veces el Card Conuter 0832 CLR A ; 0833 RLC A ; 0834 POP DPH ; 0836 POP DPL ; 0838 MOVX @DPTR,A ; 0839 CLR A ; 083A RET ; 083B LCALL 080D ; A = GetCardBit(W(3138)), DPRT=3139 083E MOV A,#08 ; 0840 PUSH ACC ; 0842 LCALL 04E2 ; Write & Clock 0845 LCALL 04D6 ; Read Card & Clock 0848 LCALL 04D6 ; Read Card & Clock 084B POP ACC ; 084D DEC A ; 084E CJNE A,#00,0840 ; 0851 LJMP 08BB ; 0854 LCALL 080D ; A = GetCardBit(W(3138)), DPRT=3139 0857 LCALL 04E2 ; Write & Clock 085A LCALL 04E2 ; Write & Clock 085D LJMP 08BB ; 0860 MOV DPH,31 ; 0863 MOV DPL,32 ; 0866 MOV A,#06 ; 0868 LCALL 0DD4 ; DPTR+=06 086B MOVX A,@DPTR ; 086C PUSH ACC ; 086E LCALL 080D ; A = GetCardBit(W(3138)), DPRT=3139 0871 POP ACC ; 0873 PUSH ACC ; 0875 PUSH ACC ; 0877 LCALL 04D6 ; Read Card & Clock 087A POP ACC ; 087C INC A ; 087D JNC 0875 ; 087F PUSH ACC ; 0881 LCALL 04E2 ; Write & Clock 0884 LCALL 04E2 ; Write & Clock 0887 POP ACC ; 0889 MOV B,A ; 088B POP ACC ; 088D CJNE A,#60,08AA ; 0890 MOV A,B ; 0892 PUSH ACC ; 0894 LCALL 04D6 ; Read Card & Clock 0897 POP ACC ; 0899 INC A ; 089A CJNE A,#77,0892 ; 089D PUSH ACC ; 089F LCALL 04E2 ; Write & Clock 08A2 LCALL 04E2 ; Write & Clock 08A5 POP ACC ; 08A7 LJMP 08AC ; 08AA MOV A,B ; 08AC PUSH ACC ; 08AE LCALL 04D6 ; Read Card & Clock 08B1 POP ACC ; 08B3 INC A ; 08B4 CJNE A,#7F,08AC ; 08B7 LCALL 04E2 ; Write & Clock 08BA RET ; 08BB MOV A,#00 ; 08BD MOV B,#90 ; 08C0 LCALL 108F ; (2D)+=2. (3134)=0090 08C3 MOV A,#00 ; 08C5 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A R2=0 R3=A 08C8 RET ; 08C9 db 0C, 03, 2B, 3B 08CD db 13, 83, AB, BB, 08D1 db 93, CB, EB, FB, DB 08C9 INC R4 ; 08CA RR A ; 08CB ADD A,R3 ; 08CC ADDC A,R3 ; 08CD RRC A ; 08CE MOVC A,@A+PC ; 08CF MOV R3,BB ; 08D1 MOVC A,@A+DPTR ; 08D2 XCH A,R3 ; 08D3 MOV A,R3 ; 08D4 MOV R3,A ; 08D5 DJNZ R3,0897 ; 08D6 PUSH DPH ; (x0109)&=0111.0000 |= 0000.0011 Delay? 08D8 PUSH DPL ; 08DA MOV DPTR,#0109 ; 08DD MOVX A,@DPTR ; 08DE ANL A,#70 ; 08E0 ORL A,#03 ; 08E2 MOVX @DPTR,A ; 08E3 MOV DPTR,#0006 ; 08E6 MOVX @DPTR,A ; 08E7 MOV A,#0A ; 08E9 LCALL 0E6A ; Delay?(A) 08EC POP DPL ; 08EE POP DPH ; 08F0 RET ; 08F1 PUSH DPH ; (x0109)|=0000.0100 08F3 PUSH DPL ; 08F5 MOV DPTR,#0109 ; 08F8 MOVX A,@DPTR ; 08F9 ORL A,#04 ; 08FB MOVX @DPTR,A ; 08FC MOV DPTR,#0006 ; 08FF MOVX @DPTR,A ; 0900 POP DPL ; 0902 POP DPH ; 0904 RET ; 0905 PUSH DPL ; W(23) = 100d, b01=1, (x0108)|=10011000[& 0907 PUSH DPH ; 0909 MOV R0,#00 ; R0 = #00 090B MOV DPTR,#0108 ; 090E MOVX A,@DPTR ; 090F ORL A,#98 ; A = (x0108) | 1001 1000 0911 JB 0D,0916 ; 0914 ANL A,#7F ; b0D 0916 MOVX @DPTR,A ; (x0108) = (x0108)| 10011000 [& 01111111] 0917 MOV DPTR,#0005 ; 091A MOVX @DPTR,A ; (x0005) = x0108 091B MOV 23,#00 ; 091E MOV 24,#64 ; W(23) = 100d 0921 SETB 01 ; b01 = 1 0923 POP DPH ; 0925 POP DPL ; 0927 RET ; 0928 PUSH DPL ; 092A PUSH DPH ; 092C MOV R0,#00 ; 092E MOV DPTR,#0108 ; 0931 MOVX A,@DPTR ; 0932 ANL A,#DF ; 0934 ORL A,#98 ; 0936 JB 0D,093B ; 0939 ANL A,#7F ; 093B MOVX @DPTR,A ; 093C MOV DPTR,#0005 ; 093F MOVX @DPTR,A ; 0940 POP DPH ; 0942 POP DPL ; 0944 RET ; 0945 PUSH DPH ; 0947 PUSH DPL ; 0949 MOV DPTR,#0108 ; 094C MOVX A,@DPTR ; 094D ANL A,#6F ; 094F ORL A,#28 ; 0951 MOVX @DPTR,A ; 0952 MOV DPTR,#0005 ; 0955 MOVX @DPTR,A ; 0956 POP DPL ; 0958 POP DPH ; 095A RET ; 095B PUSH DPL ; 095D PUSH DPH ; 095F JNB 09,096C ; 0962 LJMP 098D ; 0965 CLR 09 ; 0967 INC DPTR ; 0968 PUSH DPL ; 096A PUSH DPH ; 096C MOV DPTR,#0108 ; 096F MOV A,R4 ; 0970 RRC A ; 0971 MOVX A,@DPTR ; 0972 MOV E6,C ; 0974 MOVX @DPTR,A ; 0975 MOV DPTR,#0005 ; 0978 MOVX @DPTR,A ; 0979 MOV A,R3 ; 097A MOV DPTR,#0008 ; 097D MOVX @DPTR,A ; 097E MOV DPTR,#010B ; 0981 MOVX @DPTR,A ; 0982 SETB 02 ; 0984 MOV A,R2 ; 0985 DEC A ; 0986 JNZ 098D ; 0988 POP DPH ; 098A POP DPL ; 098C RET ; 098D POP DPH ; 098F POP DPL ; 0991 MOV A,2B ; 0993 MOV B,A ; 0995 MOVX A,@DPTR ; 0996 MOV C,D0 ; 0998 JNB F7,099C ; 099B CPL C ; 099C RLC A ; 099D MOV R4,A ; 099E RRC A ; 099F JB F4,09A3 ; 09A2 CPL A ; 09A3 MOV R3,A ; 09A4 JB F5,09BF ; 09A7 MOV A,R4 ; 09A8 MOV C,E0 ; 09AA CPL C ; 09AB MOV E0,C ; 09AD MOV R4,A ; 09AE MOV A,R3 ; 09AF MOV B,#00 ; 09B2 MOV R0,#08 ; 09B4 RRC A ; 09B5 XCH A,B ; 09B7 RLC A ; 09B8 XCH A,B ; 09BA DJNZ R0,09B4 ; 09BC XCH A,B ; 09BE MOV R3,A ; 09BF JB 09,0965 ; 09C2 SJMP 098C ; 09C4 CLR AB ; Disable TIRQ #1 (x0108)&=0000 0111 09C6 MOV DPTR,#0108 ; 09C9 MOVX A,@DPTR ; 09CA ANL A,#07 ; 09CC MOVX @DPTR,A ; (x0108)&=0000 0111 09CD MOV DPTR,#0005 ; 09D0 MOVX @DPTR,A ; (x0005)=(x0108) 09D1 RET ; 09D2 SETB IE.3 ; Enable Timer #1 Interrupt 09D4 SETB 0D ; 09D6 MOV 2D,#00 ; 09D9 LCALL 08D6 ; (x0109)&=0111.0000 |= 0000.0011 Delay? 09DC MOV DPH,31 ; 09DF MOV DPL,32 ; 09E2 MOV A,#07 ; 09E4 LCALL 0DD4 ; DPTR = 3139 09E7 LCALL 0905 ; W(23) = 100d, b01=1, (x0108)|=10011000[& 09EA SETB 02 ; 09EC LCALL 08F1 ; (x0109)|=0000.0100 09EF MOV 2B,#3B ; 09F2 LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 09F5 JZ 0A57 ; W(23) = 00 ?  0A57 09F7 MOV A,R1 ; 09F8 ANL A,#01 ; 09FA JZ 0A00 ; 09FC CLR 0D ; 09FE SJMP 09D6 ; 0A00 MOV A,R0 ; 0A01 MOVX @DPTR,A ; 0A02 PUSH DPH ; 0A04 PUSH DPL ; 0A06 MOV DPTR,#08C9 ; 0A09 LCALL 0DE8 ; 0A0C POP DPL ; 0A0E POP DPH ; 0A10 JZ 0A57 ; 0A12 MOV 2B,R0 ; 0A14 MOV A,R0 ; 0A15 MOVX @DPTR,A ; 0A16 INC DPTR ; 0A17 INC 2D ; 0A19 LCALL 0928 ; 0A1C SETB 02 ; 0A1E LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 0A21 MOV A,R1 ; 0A22 ANL A,#01 ; 0A24 JNZ 0A1C ; 0A26 MOV A,R0 ; 0A27 MOVX @DPTR,A ; 0A28 INC DPTR ; 0A29 INC 2D ; 0A2B ANL A,#0F ; 0A2D MOV R4,A ; 0A2E MOV A,R0 ; 0A2F MOV R2,#00 ; 0A31 MOV R3,#04 ; 0A33 MOV R5,A ; 0A34 RLC A ; 0A35 JNC 0A38 ; 0A37 INC R2 ; 0A38 DJNZ R3,0A34 ; 0A3A MOV A,R2 ; 0A3B JZ 0A5A ; 0A3D LCALL 0928 ; 0A40 SETB 02 ; 0A42 LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 0A45 MOV A,R1 ; 0A46 ANL A,#01 ; 0A48 JNZ 0A3D ; 0A4A MOV A,R0 ; 0A4B MOVX @DPTR,A ; 0A4C INC DPTR ; 0A4D INC 2D ; 0A4F DJNZ R2,0A3D ; 0A51 MOV A,R5 ; 0A52 JNB E7,0A5A ; 0A55 SJMP 0A2E ; 0A57 LJMP 0B2A ; 0A5A LCALL 0928 ; 0A5D SETB 02 ; 0A5F LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 0A62 MOV A,R1 ; 0A63 ANL A,#01 ; 0A65 JNZ 0A5A ; 0A67 MOV A,R0 ; 0A68 MOVX @DPTR,A ; 0A69 INC DPTR ; 0A6A INC 2D ; 0A6C DJNZ R4,0A5A ; 0A6E MOV DPH,31 ; 0A71 MOV DPL,32 ; 0A74 MOV A,#07 ; 0A76 LCALL 0DD4 ; DPTR+=A 0A79 MOVX A,@DPTR ; 0A7A MOV B,A ; 0A7C JB F4,0A80 ; 0A7F CPL A ; 0A80 JB F5,0A92 ; 0A83 MOV B,#00 ; 0A86 MOV R0,#08 ; 0A88 RRC A ; 0A89 XCH A,B ; 0A8B RLC A ; 0A8C XCH A,B ; 0A8E DJNZ R0,0A88 ; 0A90 XCH A,B ; 0A92 MOVX @DPTR,A ; 0A93 INC DPTR ; 0A94 MOV 26,#FA ; 0A97 MOV 29,#00 ; 0A9A MOV 2A,#0A ; 0A9D MOVX A,@DPTR ; 0A9E INC DPTR ; 0A9F CLR C ; 0AA0 RRC A ; 0AA1 RRC A ; 0AA2 RRC A ; 0AA3 RRC A ; 0AA4 RRC A ; 0AA5 JNC 0AA8 ; 0AA7 INC DPTR ; 0AA8 RRC A ; 0AA9 JNC 0AB9 ; 0AAB PUSH ACC ; 0AAD MOVX A,@DPTR ; 0AAE ANL A,#1F ; 0AB0 MOV B,#0A ; 0AB3 MUL AB ; 0AB4 MOV 26,A ; 0AB6 POP ACC ; 0AB8 INC DPTR ; 0AB9 RRC A ; 0ABA JNC 0AC4 ; 0ABC PUSH ACC ; 0ABE MOVX A,@DPTR ; 0ABF INC DPTR ; 0AC0 MOV 29,A ; 0AC2 POP ACC ; 0AC4 RRC A ; 0AC5 JNC 0AEB ; 0AC7 MOVX A,@DPTR ; 0AC8 INC DPTR ; 0AC9 CLR C ; 0ACA RRC A ; 0ACB RRC A ; 0ACC RRC A ; 0ACD RRC A ; 0ACE RRC A ; 0ACF JNC 0AD2 ; 0AD1 INC DPTR ; 0AD2 RRC A ; 0AD3 JNC 0ADD ; 0AD5 PUSH ACC ; 0AD7 MOVX A,@DPTR ; 0AD8 MOV 26,A ; 0ADA INC DPTR ; 0ADB POP ACC ; 0ADD RRC A ; 0ADE JNC 0AE8 ; 0AE0 PUSH ACC ; 0AE2 MOVX A,@DPTR ; 0AE3 MOV 2A,A ; 0AE5 INC DPTR ; 0AE6 POP ACC ; 0AE8 RRC A ; 0AE9 JC 0B2A ; 0AEB MOV A,#00 ; 0AED MOV B,#90 ; 0AF0 LCALL 108F ; (2D)+=2. (3134)=0090 0AF3 MOV A,#05 ; 0AF5 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A R2=0 R3=A 0AF8 MOV A,#01 ; 0AFA MOV 2F,A ; 0AFC LCALL 09C4 ; Disable TIRQ #1 (x0108)&=0000 0111 0AFF RET ; ; Subrutine. ; W(23) == 0? => A = #00 ; W(23) != 0 => ; Wait until (IRQ #0) or W(23) == 0 ; W(23) == 0 => A = #00 ; (bF5 == 1) & (bF4 == 0) => R0 = !R0, A = #FF ; (bF5 == 0) => R0=bits-inverted(R0), A = #FF ; (bF5 == 1) & (bF4 == 1) => A = #FF 0B00 MOV A,23 ; Si W(23) = 0 Return 0B02 JNZ 0B08 ; 0B04 MOV A,24 ; 0B06 JZ 0B29 ; ?  RET 0B08 JB 02,0B00 ; Espera que se apague el bit 2 (IRQ #0)  0B0B MOV A,R0 ; 0B0C MOV B,2B ; 0B0F JB F4,0B14 ; Si bF5==1 y bF4==0 => R0=!R0, A=#FF 0B12 CPL A ; 0B13 MOV R0,A ; 0B14 JB F5,0B27 ; 0B17 MOV B,#00 ; Si bF5==0 => R0=bits-inverted(R0), A=FF 0B1A MOV R0,#08 ; 0B1C RRC A ; 0B1D XCH A,B ; 0B1F RLC A ; 0B20 XCH A,B ; 0B22 DJNZ R0,0B1C ; 0B24 XCH A,B ; 0B26 MOV R0,A ; 0B27 MOV A,#FF ; A = FF 0B29 RET ; 0B2A JNB 96,0B36 ; P1.6 == 0 ?  0B36 0B2D MOV A,#02 ; 0B2F LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=02 R2=0 R3=02 0B32 LCALL 09C4 ; Disable TIRQ #1 (x0108)&=0000 0111 0B35 RET ; 0B36 MOV 2D,#00 ; (2D) = 00 0B39 MOV A,#F7 ; 0B3B LCALL 10AA ; (3132)=06 (2D)=0 (3133h)=F7 R2=0 R3=F7 0B3E LCALL 09C4 ; Disable TIRQ #1 (x0108)&=0000 0111 0B41 RET ; 0B42 JNB 96,0B36 ; P1.6 = 0 ?  0B36 0B45 MOV A,#02 ; 0B47 MOV B,#90 ; 0B4A LCALL 108F ; (2D)+=2. (3134)=0290 0B4D MOV A,#A2 ; 0B4F LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A2 R2=0 R3=A2 0B52 LCALL 09C4 ; Disable TIRQ #1 (x0108)&=0000 0111 0B55 RET ; 0B56 MOV 2D,#00 ; 0B59 MOV A,#CC ; 0B5B LCALL 10AA ; (3132)=06 (2D)=00 (3133h)=CC R2=0 R3=CC 0B5E LCALL 09C4 ; Disable TIRQ #1 (x0108)&=0000 0111 0B61 RET ; 0B62 SETB IE.3 ; Enable Timer #1 Interrupt 0B64 MOV A,26 ; 0B66 CJNE A,#D2,0B73 ; 0B69 MOV DPTR,#0010 ; 0B6C MOVX A,@DPTR ; 0B6D JB E1,0B73 ; 0B70 LJMP 0B56 ; 0B73 MOV DPH,31 ; 0B76 MOV DPL,32 ; 0B79 MOV A,#02 ; 0B7B LCALL 0DD4 ; DPTR+=A 0B7E MOV 2D,#00 ; 0B81 MOV R2,#05 ; 0B83 MOV R5,#03 ; 0B85 LCALL 0945 ; 0B88 SETB 09 ; 0B8A LCALL 0D89 ; 0B8D LCALL 095B ; 0B90 INC DPTR ; 0B91 JB 02,0B91 ; 0B94 MOV A,R1 ; 0B95 ANL A,#08 ; 0B97 JZ 0BAB ; 0B99 JB 96,0B9F ; IRQ #1 Input = 1 ?  0B9F 0B9C LJMP 0B36 ; 0B9F DJNZ R5,0BA4 ; 0BA1 LJMP 0B42 ; 0BA4 LCALL 0DDF ; 0BA7 LCALL 0DDF ; 0BAA INC R2 ; 0BAB DJNZ R2,0B8A ; 0BAD MOV A,2A ; 0BAF JZ 0BBC ; 0BB1 MOV B,#0A ; 0BB4 MUL AB ; 0BB5 MOV 24,A ; 0BB7 MOV 23,B ; 0BBA SJMP 0BC5 ; 0BBC LCALL 0D89 ; 0BBF MOV 24,#01 ; 0BC2 MOV 23,#00 ; 0BC5 LCALL 0928 ; 0BC8 SETB 02 ; 0BCA LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 0BCD JNZ 0BD2 ; 0BCF LJMP 0B42 ; 0BD2 MOV A,R1 ; 0BD3 ANL A,#01 ; 0BD5 JNZ 0BC5 ; 0BD7 MOV A,R0 ; 0BD8 ANL A,#F0 ; 0BDA CJNE A,#60,0BE5 ; 0BDD MOV A,R0 ; 0BDE ANL A,#0F ; 0BE0 JZ 0BAD ; 0BE2 LJMP 0D62 ; 0BE5 CJNE A,#90,0BEB ; 0BE8 LJMP 0D62 ; 0BEB MOV DPH,31 ; 0BEE MOV DPL,32 ; 0BF1 MOV A,#03 ; 0BF3 LCALL 0DD4 ; DPTR+=A 0BF6 MOVX A,@DPTR ; 0BF7 XCH A,R0 ; 0BF8 MOV B,A ; 0BFA ANL A,#FE ; 0BFC CJNE A,18,0C0E ; 0BFF MOV A,B ; 0C01 SETB 06 ; 0C03 JB E0,0C1A ; 0C06 CLR AA ; Disable IRQ #1 0C08 LCALL 0FDE ; 0C0B LJMP 0C1A ; 0C0E MOV A,B ; 0C10 CLR 06 ; 0C12 JNB E0,0C1A ; 0C15 CLR AA ; Disable IRQ #1 0C17 LCALL 0FDE ; 0C1A MOV DPH,31 ; 0C1D MOV DPL,32 ; 0C20 MOV A,#06 ; 0C22 LCALL 0DD4 ; DPTR+=A 0C25 MOV R5,#03 ; 0C27 MOVX A,@DPTR ; 0C28 MOV R2,A ; 0C29 CJNE R2,#00,0C2E ; 0C2C SJMP 0BC5 ; 0C2E INC DPTR ; 0C2F SETB 09 ; 0C31 JNB 06,0C62 ; 0C34 LCALL 0945 ; 0C37 LCALL 0D89 ; 0C3A LCALL 095B ; 0C3D INC DPTR ; 0C3E JB 02,0C3E ; 0C41 MOV A,R1 ; 0C42 ANL A,#08 ; 0C44 JZ 0C5A ; 0C46 JB 96,0C4C ; IRQ #1 Input = 1 ?  0C4C 0C49 LJMP 0B36 ; 0C4C DJNZ R5,0C51 ; 0C4E LJMP 0B42 ; 0C51 LCALL 0DDF ; 0C54 LCALL 0DDF ; 0C57 INC R2 ; 0C58 SETB 09 ; 0C5A DJNZ R2,0C37 ; 0C5C LJMP 0BAD ; 0C5F LJMP 0B42 ; 0C62 MOV A,2D ; 0C64 LCALL 0DD4 ; DPTR+=A 0C67 LCALL 0945 ; 0C6A LCALL 0D89 ; 0C6D LCALL 095B ; 0C70 JB 02,0C70 ; 0C73 MOV A,R1 ; 0C74 ANL A,#08 ; 0C76 JZ 0C7A ; 0C78 SJMP 0C62 ; 0C7A INC 2D ; 0C7C LJMP 0BAD ; 0C7F SETB IE.3 ; Enable Timer #1 Interrupt 0C81 MOV DPH,31 ; 0C84 MOV DPL,32 ; 0C87 MOV A,#02 ; 0C89 LCALL 0DD4 ; DPTR+=A 0C8C MOV 2D,#00 ; 0C8F MOV R2,#05 ; 0C91 MOV R5,#03 ; 0C93 LCALL 0945 ; 0C96 SETB 09 ; 0C98 LCALL 0D89 ; 0C9B LCALL 095B ; 0C9E INC DPTR ; 0C9F JB 02,0C9F ; 0CA2 MOV A,R1 ; 0CA3 ANL A,#08 ; 0CA5 JZ 0CBB ; 0CA7 JB 96,0CAD ; IRQ #1 Input = 1 ?  0CAD 0CAA LJMP 0B36 ; 0CAD DJNZ R5,0CB2 ; 0CAF LJMP 0B42 ; 0CB2 LCALL 0DDF ; 0CB5 LCALL 0DDF ; 0CB8 INC R2 ; 0CB9 SETB 09 ; 0CBB DJNZ R2,0C98 ; 0CBD MOV A,2A ; 0CBF JZ 0CCC ; 0CC1 MOV B,#0A ; 0CC4 MUL AB ; 0CC5 MOV 24,A ; 0CC7 MOV 23,B ; 0CCA SJMP 0CD5 ; 0CCC LCALL 0D89 ; 0CCF MOV 24,#01 ; 0CD2 MOV 23,#00 ; 0CD5 LCALL 0928 ; 0CD8 SETB 02 ; 0CDA LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 0CDD JZ 0C5F ; 0CDF MOV A,R1 ; 0CE0 ANL A,#01 ; 0CE2 JNZ 0CD5 ; 0CE4 MOV A,R0 ; 0CE5 ANL A,#F0 ; 0CE7 CJNE A,#60,0CF2 ; 0CEA MOV A,R0 ; 0CEB ANL A,#0F ; 0CED JZ 0CBD ; 0CEF LJMP 0D62 ; 0CF2 CJNE A,#90,0CF8 ; 0CF5 LJMP 0D62 ; 0CF8 MOV DPH,31 ; 0CFB MOV DPL,32 ; 0CFE MOV A,#03 ; 0D00 LCALL 0DD4 ; DPTR+=A 0D03 MOVX A,@DPTR ; 0D04 XCH A,R0 ; 0D05 ANL A,#FE ; 0D07 JNB E0,0D15 ; 0D0A PUSH ACC ; 0D0C CLR IE.2 ; Disable IRQ #1 0D0E LCALL 0FC9 ; 0D11 SETB IE.2 ; Enable IRQ #1 0D13 POP ACC ; 0D15 CJNE A,18,0D1D ; 0D18 SETB 06 ; 0D1A LJMP 0D1F ; 0D1D CLR 06 ; 0D1F MOV DPH,31 ; 0D22 MOV DPL,32 ; 0D25 MOV A,#06 ; 0D27 LCALL 0DD4 ; DPTR+=A 0D2A MOVX A,@DPTR ; 0D2B MOV R2,A ; 0D2C INC DPTR ; 0D2D JZ 0CD5 ; 0D2F JNB 06,0D4A ; 0D32 SETB 02 ; 0D34 LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 0D37 JZ 0D47 ; 0D39 MOV A,R1 ; 0D3A ANL A,#01 ; 0D3C JNZ 0D32 ; 0D3E MOV A,R0 ; 0D3F MOVX @DPTR,A ; 0D40 INC DPTR ; 0D41 INC 2D ; 0D43 DJNZ R2,0D32 ; 0D45 SJMP 0CD5 ; 0D47 LJMP 0B42 ; 0D4A MOV A,2D ; 0D4C LCALL 0DD4 ; DPTR+=2D 0D4F SETB 02 ; 0D51 LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 0D54 JZ 0D47 ; 0D56 MOV A,R1 ; 0D57 ANL A,#01 ; 0D59 JNZ 0D4A ; 0D5B MOV A,R0 ; 0D5C MOVX @DPTR,A ; 0D5D INC 2D ; 0D5F LJMP 0CD5 ; 0D62 PUSH 18 ; 0D64 LCALL 0928 ; 0D67 SETB 02 ; 0D69 LCALL 0B00 ; A=(W(23)!=0), R0 = !R0 o bitinv(R0) o R0 0D6C JNZ 0D75 ; 0D6E POP B ; 0D70 LCALL 09C4 ; Disable TIRQ #1 (x0108)&=0000 0111 0D73 SJMP 0D47 ; 0D75 MOV A,R1 ; 0D76 ANL A,#01 ; 0D78 JNZ 0D64 ; 0D7A MOV A,R0 ; 0D7B POP B ; 0D7D LCALL 108F ; (2D)+=2. (3134)=B (3135)=A 0D80 MOV A,#00 ; 0D82 LCALL 10AA ; (3132)=(2D)+6 (2D)=0 (3133h)=A R2=0 R3=A 0D85 LCALL 09C4 ; Disable TIRQ #1 (x0108)&=0000 0111 0D88 RET ; 0D89 MOV A,#01 ; 0D8B LCALL 0E6A ; Delay(A) 0D8E MOV A,29 ; 0D90 JZ 0DA1 ; 0D92 PUSH B ; 0D94 MOV B,#03 ; 0D97 DIV AB ; 0D98 JNZ 0D9C ; 0D9A MOV A,#01 ; 0D9C LCALL 0E6A ; Delay(A) 0D9F POP B ; 0DA1 RET ; 0DA2 PUSH PSW ; 0DA4 MOV 02,#00 ; R2=0 0DA7 MOV 03,#00 ; R3=0 0DAA MOV C,96 ; 0DAC JNC 0DB1 ; 0DAE MOV 03,#01 ; R3=1 0DB1 POP PSW ; 0DB3 RET ; 0DB4 MOV A,R4 ; 0DB5 MOV B,R6 ; 0DB7 CJNE A,B,0DC1 ; 0DBA MOV A,R5 ; 0DBB MOV B,R7 ; 0DBD CJNE A,B,0DC1 ; 0DC0 CLR C ; 0DC1 RET ; 0DC2 PUSH DPH ; 0DC4 PUSH DPL ; 0DC6 MOV DPH,R6 ; 0DC8 MOV DPL,R7 ; 0DCA INC DPTR ; 0DCB MOV R6,DPH ; 0DCD MOV R7,DPL ; 0DCF POP DPL ; 0DD1 POP DPH ; 0DD3 RET ; 0DD4 ADD A,DPL ; DPTR+=A DPTR+=A 0DD6 MOV DPL,A ; 0DD8 MOV A,DPH ; 0DDA ADDC A,#00 ; 0DDC MOV DPH,A ; 0DDE RET ; 0DDF MOV A,DPL ; 0DE1 DEC DPL ; 0DE3 JNZ 0DE7 ; 0DE5 DEC DPH ; 0DE7 RET ; 0DE8 MOV 18,A ; 0DEA CLR A ; 0DEB MOVC A,@A+DPTR ; 0DEC PUSH ACC ; 0DEE MOVC A,@A+DPTR ; 0DEF CJNE A,18,0DF5 ; 0DF2 POP ACC ; 0DF4 RET ; 0DF5 POP ACC ; 0DF7 DJNZ ACC,0DEC ; 0DFA RET ; 0DFB MOV DPH,R2 ; 0DFD MOV DPL,R3 ; 0DFF PUSH DPH ; 0E01 PUSH DPL ; 0E03 LCALL 023D ; R2=(R6R7) R3=(R6R7+1) R6R7+=2 0E06 POP DPL ; 0E08 POP DPH ; 0E0A MOV A,DPH ; 0E0C MOV C,E7 ; 0E0E MOV A,R3 ; 0E0F LCALL 0E26 ; (x0000)=R3,(xDPTR)=R3,Delay(3A) 0E12 JC 0E18 ; 0E14 MOVX A,@DPTR ; 0E15 LJMP 0E1A ; 0E18 CLR A ; 0E19 MOVC A,@A+DPTR ; 0E1A CJNE A,03,0E21 ; 0E1D MOV R3,#00 ; 0E1F SJMP 0E23 ; 0E21 MOV R3,#01 ; 0E23 MOV R2,#00 ; 0E25 RET ; 0E26 CLR IE.7 ; Disable Timer #1 Interrupt 0E28 PUSH DPH ; (x0000)=A,(xDPTR)=A,Delay(3A) 0E2A PUSH DPL ; 0E2C MOV DPTR,#0000 ; 0E2F MOVX @DPTR,A ; 0E30 POP DPL ; 0E32 POP DPH ; 0E34 MOVX @DPTR,A ; 0E35 PUSH ACC ; 0E37 MOV A,#3A ; 0E39 DEC A ; 0E3A JNZ 0E39 ; 0E3C POP ACC ; 0E3E SETB IE.7 ; Enable Global Interrupt 0E40 RET ; 0E41 LCALL 1062 ; 0E44 ORL PCON,#02 ; 0E47 SJMP 0E44 ; 0E49 PUSH PSW ; Delay (98*(A+100d*B)) 0E4B ORL PSW,#18 ; 0E4E PUSH 19 ; R1\ 0E50 JZ 0E5C ; 0E52 MOV R1,A ; 0E53 MOV A,#62 ; 0E55 DEC A ; 0E56 CJNE A,#00,0E55 ; 0E59 NOP ; 0E5A DJNZ R1,0E53 ; Delay 62*A 0E5C MOV A,#64 ; 0E5E DEC B ; 0E60 MOV R1,B ; 0E62 CJNE R1,#FF,0E52 ; Delay 62*64*B 0E65 POP 19 ; R1\ 0E67 POP PSW ; 0E69 RET ; ; Subrutine ; Input: ; A ; B ; Output: 0E6A SETB D3 ; 0E6C SETB D4 ; Select Register's Bank 0011 0E6E PUSH 19 ; 11.R0 0E70 MOV R1,A ; R1 = A 0E71 PUSH 18 ; 11.R1 0E73 MOV R0,#0A ; R0 = 0A 0E75 PUSH ACC ; 0E77 PUSH B ; 0E79 DIV AB ; A=A div B B=A mod B 0E7A MUL AB ; BA=(A div B)*(A mod B) 0E7B NOP ; 0E7C POP B ; 0E7E POP ACC ; 0E80 DJNZ R0,0E75 ; 0E82 POP 18 ; 0E84 NOP ; 0E85 DJNZ R1,0E71 ; 0E87 POP 19 ; 0E89 RET ; 0E8A PUSH PSW ; 0E8C PUSH ACC ; 0E8E SETB P1.0 ; 0E90 CLR P1.1 ; 0E92 CLR P1.2 ; P1=xxxx x001 0E94 PUSH 19 ; 0E96 MOV R1,#FF ; 0E98 MOV A,#14 ; 0E9A DEC A ; 0E9B CJNE A,#00,0E9A ; 0E9E DJNZ R1,0E98 ; Delay de 20*255 ciclos 0EA0 POP 19 ; 0EA2 MOV DPTR,#010D ; 0EA5 MOVX A,@DPTR ; 0EA6 ORL A,#08 ; 0EA8 MOVX @DPTR,A ; (x010D)|=00001000 0EA9 MOV DPTR,#0010 ; 0EAC MOVX @DPTR,A ; (x0010)=(x010D) 0EAD SETB P1.5 ; P1=xx1x xxxx 0EAF POP ACC ; 0EB1 POP PSW ; 0EB3 RET ; 0EB4 PUSH PSW ; 0EB6 PUSH ACC ; 0EB8 CLR P1.0 ; 0EBA CLR P1.1 ; 0EBC CLR P1.2 ; P1=xxxxx000 0EBE MOV DPTR,#010D ; 0EC1 MOVX A,@DPTR ; 0EC2 ANL A,#F7 ; 0EC4 MOVX @DPTR,A ; (x010D)&=11110111 0EC5 MOV DPTR,#0010 ; 0EC8 MOVX @DPTR,A ; (x0010)=(x010D) 0EC9 POP ACC ; 0ECB POP PSW ; 0ECD RET ; 0ECE PUSH PSW ; 0ED0 PUSH ACC ; 0ED2 MOV A,P1 ; 0ED4 ORL A,P1 ; 0ED6 ANL A,P1 ; 0ED8 PUSH ACC ; 0EDA SETB P1.0 ; 0EDC CLR P1.1 ; 0EDE CLR P1.2 ; P1=xxxxx001 0EE0 MOV DPTR,#010D ; 0EE3 MOVX A,@DPTR ; 0EE4 ORL A,#08 ; 0EE6 MOV DPTR,#0010 ; 0EE9 MOVX @DPTR,A ; 0EEA CLR P1.5 ; 0EEC PUSH 19 ; 0EEE MOV R1,#FF ; 0EF0 MOV A,#14 ; 0EF2 DEC A ; 0EF3 CJNE A,#00,0EF2 ; 0EF6 DJNZ R1,0EF0 ; Delay de 20*255 ciclos 0EF8 POP 19 ; 0EFA MOV DPTR,#0010 ; 0EFD MOVX A,@DPTR ; 0EFE ANL A,#01 ; 0F00 MOV 02,#00 ; 0F03 MOV 03,#00 ; 0F06 JNZ 0F0B ; 0F08 MOV 03,#01 ; 0F0B CLR P1.0 ; 0F0D CLR P1.1 ; 0F0F CLR P1.2 ; P1=xxxxx000 0F11 MOV DPTR,#010D ; 0F14 MOVX A,@DPTR ; 0F15 MOV DPTR,#0010 ; 0F18 MOVX @DPTR,A ; 0F19 POP ACC ; 0F1B ORL P1,A ; 0F1D ANL P1,A ; (P1)=A 0F1F POP ACC ; 0F21 POP PSW ; 0F23 RET ; 0F24 PUSH PSW ; 0F26 MOV DPTR,#010D ; 0F29 MOVX A,@DPTR ; 0F2A ORL A,#02 ; 0F2C MOVX @DPTR,A ; 0F2D MOV DPTR,#0010 ; 0F30 MOVX @DPTR,A ; 0F31 POP PSW ; 0F33 RET ; 0F34 PUSH PSW ; 0F36 MOV DPTR,#010D ; 0F39 MOVX A,@DPTR ; 0F3A ANL A,#FD ; 0F3C MOVX @DPTR,A ; 0F3D MOV DPTR,#0010 ; 0F40 MOVX @DPTR,A ; 0F41 POP PSW ; 0F43 RET ; ; IRQ #0 ; 0F44 PUSH PSW ; 0F46 PUSH ACC ; 0F48 PUSH DPH ; 0F4A PUSH DPL ; 0F4C PUSH B ; 0F4E MOV DPTR,#0005 ; 0F51 MOVX A,@DPTR ; A = (x0005) 0F52 MOV B,A ; B = (x0005) 0F54 ANL A,#30 ; A&=0011 0000 0F56 JZ 0F6B ; Si no estaban prendidos 0011 0000  0F6B 0F58 ANL A,#10 ; 0F5A JZ 0F62 ; si solo estaba prendido 0010 0000  0F62 0F5C MOV DPTR,#0008 ; Si (x0005).4 esta prendido => 0F5F MOVX A,@DPTR ; 18=(x0008) 0F60 MOV 18,A ; Si (x0005).4 no esta prendido => 0F62 MOV A,B ; 18=(x0005) 0F64 MOV 19,A ; 19=(x0005) 0F66 CLR 02 ; 0.2=0 0F68 LJMP 0FBE ; IRET 0F6B CLR D3 ; Si no estan prendidos ni x5.4 ni x5.5 0F6D SETB D4 ; Select Register's Bank 0010 0F6F PUSH 0B ; R1 0F71 PUSH 0D ; R3 0F73 MOV DPTR,#0003 ; 0F76 MOVX A,@DPTR ; A=(x0003) 0F77 MOV DPTR,#010E ; 0F7A MOVX @DPTR,A ; (x010E)=(x0003) 0F7B MOV B,A ; B=(0x0003) 0F7D MOV DPTR,#0001 ; 0F80 MOVX A,@DPTR ; A=(x0001) 0F81 MOV DPTR,#0106 ; 0F84 MOVX @DPTR,A ; (x0106)=(x0001) 0F85 MOV R3,A ; R3=(x0001) 0F86 JNB F0,0FB8 ; 0F89 MOV A,B ; A=(x0003) 0F8B ANL A,#50 ; A&=0101 0000 0F8D JZ 0F91 ; 0F8F SETB 0A ; Si estan prendidos x3.4 o x3.6 =>b.0A=1 0F91 MOV A,B ; 0F93 ANL A,#0A ; 0F95 JNZ 0FBA ; 0F97 MOV DPTR,#0102 ; Si estan prendidos x4.5 o x3.7 0F9A MOVX A,@DPTR ; 0F9B MOV R1,A ; 0F9C MOV DPTR,#0103 ; 0F9F MOVX A,@DPTR ; 0FA0 MOV DPL,A ; 0FA2 MOV DPH,R1 ; DPTR=W(x0102) $C110 0FA4 CLR F0 ; b.F0 = 0 0FA6 MOV A,B ; 0FA8 MOVX @DPTR,A ; (W(x0102)) = (x0003) 0FA9 INC DPTR ; DPTR=W(x0102)+1 0FAA MOVX A,@DPTR ; 0FAB MOV R1,A ; R1=(W(x0102)+1) 0FAC INC A ; 0FAD MOVX @DPTR,A ; (W(x0102)+1)++ 0FAE MOV A,#02 ; 0FB0 ADD A,R1 ; 0FB1 LCALL 0DD4 ; DPTR+=02 0FB4 MOV A,R3 ; 0FB5 MOVX @DPTR,A ; 0FB6 SJMP 0FBA ; 0FB8 SETB 0A ; 0FBA POP 0D ; 0FBC POP 0B ; 0FBE POP B ; 0FC0 POP DPL ; 0FC2 POP DPH ; 0FC4 POP ACC ; 0FC6 POP PSW ; 0FC8 RETI ; 0FC9 CLR P1.3 ; P1 = xxxx0xxx 0FCB JB 0B,0FD1 ; 0FCE LCALL 1004 ; P1 = xxxxx010,Del,xxxxxx01,Del,xxxxxx1x,Del 0FD1 MOV A,26 ; 0FD3 LCALL 0FED ; (x0004),(x0107)=A-Dh,(x0109),(x0006)!=10 0FD6 MOV B,#01 ; 0FD9 CLR A ; 0FDA LCALL 0E49 ; Delay (1s) 0FDD RET ; 0FDE CLR AA ; Disable IRQ #1 0FE0 MOV A,#32 ; 0FE2 LCALL 0FED ; (x0004),(x0107)=A-Dh,(x0109),(x0006)!=10 0FE5 SETB P1.3 ; P1=xxxx1xxx 0FE7 MOV A,#01 ; 0FE9 LCALL 0E6A ; Delay(1) 0FEC RET ; 0FED CLR C ; (x0004),(x0107)=A-Dh,(x0109),(x0006)!=10 0FEE SUBB A,#0D ; 0FF0 MOV DPTR,#0004 ; 0FF3 MOVX @DPTR,A ; 0FF4 MOV DPTR,#0107 ; 0FF7 MOVX @DPTR,A ; 0FF8 MOV DPTR,#0109 ; 0FFB MOVX A,@DPTR ; (x0009) |= 0001.0000 0FFC ORL A,#10 ; 0FFE MOVX @DPTR,A ; 0FFF MOV DPTR,#0006 ; (x0006) |= 0001.0000 1002 MOVX @DPTR,A ; 1003 RET ; 1004 CLR P1.2 ; 1006 SETB P1.1 ; 1008 CLR P1.0 ; P1=xxxxx010 100A MOV B,#00 ; 100D MOV A,#24 ; 100F LCALL 0E49 ; Delay (0.36s) 1012 CLR P1.1 ; 1014 SETB P1.0 ; P1=xxxxxx01 1016 MOV B,#00 ; 1019 MOV A,#3C ; 101B LCALL 0E49 ; Delay (0.60s) 101E SETB P1.1 ; P1=xxxxxx1x 1020 MOV B,#00 ; 1023 MOV A,#2D ; 1025 LCALL 0E49 ; Delay (0.45s) 1028 SETB 0B ; 102A RET ; 102B CLR P1.0 ; (P1.0)=0 (P1.1)=0 (P1.2)=0 (21h.7)=0 102D CLR P1.1 ; 102F CLR P1.2 ; 1031 CLR 21.7 ; 1033 RET ; 1034 LCALL 102B ; P1=xxxxx000 (21h.7)=0 1037 MOV A,#00 ; 1039 MOV DPTR,#0004 ; 103C MOVX @DPTR,A ; (x0104)=0 103D MOV DPTR,#0107 ; 1040 MOVX @DPTR,A ; (x0107)=0 1041 MOV DPTR,#0109 ; 1044 MOVX A,@DPTR ; (x0109)=0 1045 ORL A,#20 ; 1047 MOVX @DPTR,A ; (x0109)=0010.0000 1048 MOV DPTR,#0006 ; 104B MOVX @DPTR,A ; (x0006)=0010.0000 104C MOV A,#01 ; 104E LCALL 0E6A ; Delay(1) 1051 LCALL 0FDE ; 1054 MOV B,#00 ; 1057 MOV A,#02 ; 1059 LCALL 0E49 ; Delay (0.02s) 105C MOV A,#01 ; 105E LCALL 0E6A ; Delay(1) 1061 RET ; 1062 CLR AA ; Disable IRQ #1 1064 MOV DPTR,#0109 ; 1067 MOVX A,@DPTR ; 1068 ANL A,#EF ; 106A MOVX @DPTR,A ; (x0109)&=11101111b 106B MOV DPTR,#0006 ; 106E MOVX @DPTR,A ; (x0006)=(x0109) 106F LCALL 102B ; (P1.0)=0 (P1.1)=0 (P1.2)=0 (21h.7)=0 1072 MOV A,#00 ; 1074 MOV DPTR,#0004 ; 1077 MOVX @DPTR,A ; (x0004)=00 1078 MOV DPTR,#0107 ; 107B MOVX @DPTR,A ; (x0107)=00 107C MOV A,#01 ; A=01 107E LCALL 0E6A ; Delay(1) 1081 CLR A ; 1082 MOV DPTR,#0109 ; 1085 MOVX @DPTR,A ; (x0109)=00 1086 MOV DPTR,#0006 ; 1089 MOVX @DPTR,A ; (x0006)=00 108A CLR P1.3 ; P1.3=0 108C CLR P1.4 ; P1.4=0 108E RET ; 108F MOV DPH,31 ; (2D)+=2. (3134)=B (3135)=A 1092 MOV DPL,32 ; 1095 PUSH ACC ; 1097 MOV A,#02 ; 1099 LCALL 0DD4 ; DPTR+=02 109C MOV A,B ; 109E MOVX @DPTR,A ; 109F INC DPTR ; 10A0 POP ACC ; 10A2 MOVX @DPTR,A ; 10A3 MOV A,2D ; 10A5 INC A ; 10A6 INC A ; 10A7 MOV 2D,A ; 10A9 RET ; 10AA MOV DPH,31 ; (x3132)=(2D)+6 (2D)=0 (x3133)=A R2=0 R3=A 10AD MOV DPL,32 ; 10B0 PUSH ACC ; 10B2 MOV A,2D ; 10B4 ADD A,#06 ; 10B6 MOV 2D,#00 ; (2D)=00 10B9 MOVX @DPTR,A ; (x3132)=(2D)+06 10BA MOV A,#01 ; 10BC LCALL 0DD4 ; DPTR+=01 10BF POP ACC ; 10C1 MOVX @DPTR,A ; (x3133)=A 10C2 MOV 02,#00 ; 10C5 MOV 03,A ; 10C7 RET ; 10C8 PUSH PSW ; 10CA PUSH ACC ; 10CC PUSH DPH ; 10CE PUSH DPL ; 10D0 SETB D3 ; Select Register's Bank 0011 10D2 SETB D4 ; 10D4 CLR A ; 10D5 MOV R0,A ; 10D6 MOV R1,A ; 10D7 MOV R2,A ; 10D8 MOV R3,#10 ; 10DA MOV DPH,A ; 10DC MOV DPL,A ; 10DE LCALL 1196 ; 10E1 CLR A ; 10E2 MOV R2,A ; 10E3 MOV R3,#08 ; 10E5 MOV DPTR,#0030 ; 10E8 LCALL 1196 ; 10EB CLR A ; 10EC XCH A,R3 ; 10ED SUBB A,#4E ; 10EF RRC A ; 10F0 MOV R3,A ; 10F1 MOV R2,#3F ; 10F3 MOV DPTR,#004E ; 10F6 LCALL 1196 ; 10F9 MOV DPTR,#0047 ; 10FC CLR A ; 10FD MOVC A,@A+DPTR ; 10FE XRL A,R0 ; 10FF JNZ 114E ; 1101 INC DPTR ; 1102 CLR A ; 1103 MOVC A,@A+DPTR ; 1104 XRL A,R1 ; 1105 JNZ 114E ; 1107 PUSH 18 ; 1109 PUSH 19 ; 110B MOV R0,A ; 110C MOV R1,A ; 110D MOV R2,#40 ; 110F MOV R3,#00 ; 1111 MOV DPH,#80 ; 1114 MOV DPL,A ; 1116 LCALL 1196 ; 1119 MOV DPTR,#004A ; 111C CLR A ; 111D MOVC A,@A+DPTR ; 111E XRL A,R0 ; 111F JNZ 114E ; 1121 INC DPTR ; 1122 CLR A ; 1123 MOVC A,@A+DPTR ; 1124 XRL A,R1 ; 1125 JNZ 114E ; 1127 POP 1B ; 1129 POP 1A ; 112B MOV A,R2 ; 112C XRL A,R0 ; 112D MOV R0,A ; 112E MOV A,R3 ; 112F XRL A,R1 ; 1130 MOV R1,A ; 1131 CLR A ; 1132 PUSH ACC ; 1134 LCALL 116A ; 1137 MOV A,R0 ; 1138 MOVX @DPTR,A ; 1139 INC DPTR ; 113A MOV A,R1 ; 113B MOVX @DPTR,A ; 113C INC DPTR ; 113D POP ACC ; 113F MOVX @DPTR,A ; 1140 MOV 03,A ; 1142 CLR A ; 1143 MOV 02,A ; 1145 POP DPL ; 1147 POP DPH ; 1149 POP ACC ; 114B POP PSW ; 114D RET ; 114E MOV DPTR,#0047 ; 1151 CLR A ; 1152 MOVC A,@A+DPTR ; 1153 MOV R0,A ; 1154 INC DPTR ; 1155 CLR A ; 1156 MOVC A,@A+DPTR ; 1157 MOV R1,A ; 1158 MOV DPTR,#004A ; 115B CLR A ; 115C MOVC A,@A+DPTR ; 115D XRL A,R0 ; 115E MOV R0,A ; 115F INC DPTR ; 1160 CLR A ; 1161 MOVC A,@A+DPTR ; 1162 XRL A,R1 ; 1163 MOV R1,A ; 1164 MOV A,#01 ; 1166 PUSH ACC ; 1168 SJMP 1134 ; 116A MOV DPTR,#0042 ; 116D MOV R3,#04 ; 116F CLR A ; 1170 MOVC A,@A+DPTR ; 1171 PUSH ACC ; 1173 INC DPTR ; 1174 DJNZ R3,116F ; 1176 MOV A,03 ; 1178 ADD A,#03 ; 117A MOV R5,A ; 117B MOV DPL,A ; 117D MOV A,02 ; 117F ADDC A,#00 ; 1181 MOV R4,A ; 1182 MOV DPH,A ; 1184 MOV R3,#04 ; 1186 POP ACC ; 1188 MOVX @DPTR,A ; 1189 LCALL 0DDF ; 118C DJNZ R3,1186 ; 118E MOV A,R5 ; 118F MOV DPL,A ; 1191 MOV A,R4 ; 1192 MOV DPH,A ; 1194 INC DPTR ; 1195 RET ; 1196 CLR A ; 1197 MOVC A,@A+DPTR ; 1198 XRL A,R0 ; 1199 MOV R0,A ; 119A INC DPTR ; 119B CLR A ; 119C MOVC A,@A+DPTR ; 119D XRL A,R1 ; 119E MOV R1,A ; 119F INC DPTR ; 11A0 LCALL 11A6 ; 11A3 JNZ 1196 ; 11A5 RET ; 11A6 MOV A,R3 ; 11A7 JNZ 11B0 ; 11A9 MOV R3,#FF ; 11AB MOV A,R2 ; 11AC DEC A ; 11AD MOV R2,A ; 11AE ORL A,R3 ; 11AF RET ; 11B0 DEC A ; 11B1 MOV R3,A ; 11B2 ORL A,R2 ; 11B3 RET ; ; Subrutine ; Input: ; R2R3 Puntero = $10C1 11B4 PUSH PSW ; 11B6 CLR IE.0 ; Disable IRQ #0 11B8 MOV DPTR,#0108 ; 11BB MOVX A,@DPTR ; 11BC ORL A,#01 ; 11BE MOVX @DPTR,A ; (x0108)|=0000 0001 11BF MOV DPTR,#0005 ; (x0005)=(x0108) 11C2 MOVX @DPTR,A ; 11C3 MOV DPTR,#0102 ; 11C6 MOV A,R2 ; 11C7 MOVX @DPTR,A ; 11C8 MOV DPTR,#0103 ; 11CB MOV A,R3 ; 11CC MOVX @DPTR,A ; W(x0102)=R2R3 11CD LCALL 023D ; R2=(R6R7) R3=(R6R7+1) R6R7+=2 11D0 MOV A,R2 ; 11D1 ANL A,#07 ; 11D3 MOV DPTR,#0105 ; 11D6 MOVX @DPTR,A ; 11D7 MOV DPTR,#0003 ; 11DA MOVX @DPTR,A ; 11DB MOV A,R2 ; 11DC ANL A,#08 ; 11DE JZ 120A ; 11E0 MOV A,R3 ; 11E1 SETB E7 ; 11E3 MOV DPTR,#0104 ; 11E6 MOVX @DPTR,A ; 11E7 MOV DPTR,#0002 ; 11EA MOVX @DPTR,A ; 11EB MOV DPTR,#0003 ; 11EE MOVX A,@DPTR ; 11EF MOV DPTR,#0102 ; 11F2 MOVX A,@DPTR ; 11F3 MOV B,A ; 11F5 MOV DPTR,#0103 ; 11F8 MOVX A,@DPTR ; 11F9 MOV DPL,A ; 11FB MOV A,B ; 11FD MOV DPH,A ; DPTR = W(x0102) 11FF MOV A,R2 ; 1200 ANL A,#F0 ; 1202 SETB E0 ; 1204 MOVX @DPTR,A ; 1205 CLR A ; 1206 INC DPTR ; 1207 MOVX @DPTR,A ; 1208 INC DPTR ; 1209 MOVX @DPTR,A ; 120A SETB IE.0 ; Enable IRQ #0 120C SETB 0A ; 120E POP PSW ; 1210 RET ; 1211 PUSH PSW ; 1213 PUSH B ; 1215 MOV DPTR,#0003 ; 1218 MOVX A,@DPTR ; 1219 CLR A ; 121A JNB 0A,121A ; 121D CLR 0A ; 121F MOV DPTR,#0001 ; 1222 MOV A,R3 ; 1223 MOVX @DPTR,A ; 1224 MOV DPTR,#0003 ; 1227 MOVX A,@DPTR ; 1228 MOV C,E5 ; 122A CLR A ; 122B MOV E0,C ; 122D MOV 03,A ; 122F POP B ; 1231 POP PSW ; 1233 RET ; 1234 PUSH PSW ; 1236 PUSH B ; 1238 CLR IE.0 ; Disable IRQ #0 123A MOV DPTR,#0102 ; 123D MOVX A,@DPTR ; 123E MOV B,A ; 1240 MOV DPTR,#0103 ; 1243 MOVX A,@DPTR ; 1244 MOV DPL,A ; 1246 MOV A,B ; 1248 MOV DPH,A ; DPTR = W(x0102) 124A SETB D3 ; Select Register's Bank 0011 124C SETB D4 ; 124E MOV R3,#00 ; 1250 MOVX A,@DPTR ; 1251 MOV B,A ; 1253 MOV 02,A ; 1255 JB F0,1281 ; 1258 PUSH DPH ; 125A PUSH DPL ; 125C INC DPTR ; 125D MOVX A,@DPTR ; 125E MOV R1,A ; 125F INC DPTR ; 1260 MOVX A,@DPTR ; 1261 MOV R2,A ; 1262 INC DPTR ; 1263 LCALL 0DD4 ; DPTR+=A 1266 MOVX A,@DPTR ; 1267 MOV 03,A ; 1269 INC R2 ; 126A MOV A,R1 ; 126B CLR C ; 126C SUBB A,R2 ; 126D JNZ 1274 ; 126F SETB F0 ; 1271 CLR A ; 1272 MOV R1,A ; 1273 MOV R2,A ; 1274 POP DPL ; 1276 POP DPH ; 1278 MOV A,B ; 127A MOVX @DPTR,A ; 127B INC DPTR ; 127C MOV A,R1 ; 127D MOVX @DPTR,A ; 127E INC DPTR ; 127F MOV A,R2 ; 1280 MOVX @DPTR,A ; 1281 SETB IE.0 ; Enable IRQ #0 1283 POP B ; 1285 POP PSW ; 1287 RET ; 1288 PUSH PSW ; 128A MOV 1E,R2 ; 128C MOV 1F,R3 ; 128E LCALL 023D ; R2=(R6R7) R3=(R6R7+1) R6R7+=2 1291 MOV A,R2 ; 1292 JNZ 1297 ; 1294 MOV A,R3 ; 1295 JZ 12D4 ; 1297 SETB D3 ; Select Register's Bank 0011 1299 SETB D4 ; 129B MOV R5,#00 ; 129D MOV R2,02 ; 129F MOV R3,03 ; 12A1 MOV A,R5 ; 12A2 RL A ; 12A3 RL A ; 12A4 RL A ; 12A5 MOV R5,A ; 12A6 MOV DPH,R6 ; 12A8 MOV DPL,R7 ; 12AA MOVX A,@DPTR ; 12AB INC DPTR ; 12AC MOV R7,DPL ; 12AE MOV R6,DPH ; 12B0 XRL A,R5 ; 12B1 MOV B,A ; 12B3 ANL A,#0F ; 12B5 MOV DPTR,#12D7 ; 12B8 MOVC A,@A+DPTR ; 12B9 MOV R5,A ; 12BA MOV A,B ; 12BC ANL A,#F0 ; 12BE RR A ; 12BF RR A ; 12C0 RR A ; 12C1 RR A ; 12C2 MOV DPTR,#12E7 ; 12C5 MOVC A,@A+DPTR ; 12C6 XRL A,R5 ; 12C7 MOV R5,A ; 12C8 DJNZ R3,12A1 ; 12CA MOV A,R2 ; 12CB JZ 12CF ; 12CD DJNZ R2,12A1 ; 12CF MOV 02,#00 ; 12D2 MOV 03,R5 ; 12D4 POP PSW ; 12D6 RET ; 12D0 00-05 0A 0F 14 11 1E 1B 0D ......... 12E0 08 07 02 19 1C 13 16 00-1A 11 0B 07 1D 16 0C 0E ................ 12F0 14 1F 05 09 13 18 02 0C-82 83 84 85 02 03 DC E8 ................ 1300 E4 E2 E1 FD 12D7 NOP ; 12D8 INC 0A ; 12DA INC R7 ; 12DB DEC A ; 12DC ACALL 101E ; 12DE DEC R3 ; 12DF INC R5 ; 12E0 INC R0 ; 12E1 INC @R1 ; 12E2 LJMP 191C ; 12E5 RRC A ; 12E6 DEC @R0 ; 12E7 NOP ; 12E8 DEC R2 ; 12E9 ACALL 100B ; 12EB INC @R1 ; 12EC DEC R5 ; 12ED DEC @R0 ; 12EE INC R4 ; 12EF INC R6 ; 12F0 DEC A ; 12F1 DEC R7 ; 12F2 INC 09 ; 12F4 RRC A ; 12F5 DEC R0 ; 12F6 LJMP 0C82 ; 12F9 MOVC A,@A+PC ; 12FA DIV AB ; 12FB MOV 03,02 ; 12FE DJNZ R4,12E8 ; 1300 CLR A ; 1301 MOVX A,@R0 ; 1302 AJMP 17FD ; 1304 DB 90, 00, 90, 10 1308 DB 90, 20, 90, 40 130A DB 90, 80, 90, 00 1310 DB CardCount 04 1311 DB CardSize 00, 10, 20, 80 1315 DB Card80 FA, 32, 01 ;(250,50,1) 1318 DB Card20 D2, 32, 01 ;(210,50,1) 131B DB Card10 D2, 0A, 05 ;(210,10,5) 131E DB Card00 00, 0A, 01 ;(0,10,1) 2000 JB 20,2023 ; 2003 JB 20,2026 ; 2006 NOP ; 2007 NOP ; 2008 JB 0C,2061 ; 200B MOV R4,A ; 200C LJMP 5034 ; 200F PUSH PSW ; 2011 PUSH DPH ; 2013 PUSH DPL ; 2015 CLR D3 ; Select Register's Bank 0000 2017 CLR D4 ; 2019 MOV 04,R2 ; 201B MOV 05,R3 ; 201D LCALL 5667 ; 2020 MOV DPH,R2 ; 2022 MOV DPL,R3 ; 2024 MOV R2,04 ; 2026 MOV R3,05 ; 2028 MOV A,#00 ; 202A MOV R0,A ; 202B MOVX A,@DPTR ; 202C XRL A,R0 ; 202D MOV R0,A ; 202E INC DPTR ; 202F DJNZ R3,202B ; 2031 MOV A,R0 ; 2032 MOV 02,00 ; 2035 MOV 03,A ; 2037 POP DPL ; 2039 POP DPH ; 203B POP PSW ; 203D RET ; 203E PUSH PSW ; 2040 PUSH DPH ; 2042 PUSH DPL ; 2044 CLR D3 ; Select Register's Bank 0000 2046 CLR D4 ; 2048 MOV 04,R2 ; 204A MOV 05,R3 ; 204C LCALL 5667 ; 204F MOV DPH,04 ; 2052 MOV DPL,05 ; 2055 MOV 04,#00 ; 2058 MOVX A,@DPTR ; 2059 MOV R2,#08 ; 205B CLR C ; 205C RLC A ; 205D JC 2060 ; 205F INC R4 ; 2060 DJNZ R2,205C ; 2062 INC DPTR ; 2063 DJNZ R3,2058 ; 2065 MOV 02,#00 ; 2068 MOV 03,04 ; 206B POP DPL ; 206D POP DPH ; 206F POP PSW ; 2071 RET ; 2072 PUSH PSW ; 2074 PUSH DPH ; 2076 PUSH DPL ; 2078 CLR D3 ; Select Register's Bank 0000 207A CLR D4 ; 207C MOV 04,R2 ; 207E MOV 05,R3 ; 2080 LCALL 5667 ; 2083 MOV A,R3 ; 2084 DEC A ; 2085 MOV DPH,04 ; 2088 MOV DPL,05 ; 208B CLR C ; 208C MOVX A,@DPTR ; 208D RRC A ; 208E MOVX @DPTR,A ; 208F INC DPTR ; 2090 DJNZ R3,208C ; 2092 POP DPL ; 2094 POP DPH ; 2096 POP PSW ; 2098 RET ; 2099 PUSH PSW ; 209B PUSH DPH ; 209D PUSH DPL ; 209F CLR D3 ; Select Register's Bank 0000 20A1 CLR D4 ; 20A3 MOV 04,R2 ; 20A5 MOV 05,R3 ; 20A7 LCALL 5667 ; 20AA MOV A,R3 ; 20AB DEC A ; 20AC MOV DPH,04 ; 20AF MOV DPL,05 ; 20B2 LCALL 20E5 ; 20B5 CLR C ; 20B6 MOVX A,@DPTR ; 20B7 RLC A ; 20B8 MOVX @DPTR,A ; 20B9 LCALL 20F0 ; 20BC DJNZ R3,20B6 ; 20BE POP DPL ; 20C0 POP DPH ; 20C2 POP PSW ; 20C4 RET ; 20C5 MOV A,R4 ; 20C6 MOV B,R6 ; 20C8 CJNE A,B,20D2 ; 20CB MOV A,R5 ; 20CC MOV B,R7 ; 20CE CJNE A,B,20D2 ; 20D1 CLR C ; 20D2 RET ; 20D3 PUSH DPH ; 20D5 PUSH DPL ; 20D7 MOV DPH,R6 ; 20D9 MOV DPL,R7 ; 20DB INC DPTR ; 20DC MOV R6,DPH ; 20DE MOV R7,DPL ; 20E0 POP DPL ; 20E2 POP DPH ; 20E4 RET ; 20E5 ADD A,DPL ; 20E7 MOV DPL,A ; 20E9 MOV A,DPH ; 20EB ADDC A,#00 ; 20ED MOV DPH,A ; 20EF RET ; 20F0 MOV A,DPL ; 20F2 JNZ 20FD ; 20F4 MOV DPL,#FF ; 20F7 MOV A,DPH ; 20F9 DEC A ; 20FA MOV DPH,A ; 20FC RET ; 20FD DEC A ; 20FE MOV DPL,A ; 2100 RET ; 2101 MOV 18,A ; 2103 CLR A ; 2104 MOVC A,@A+DPTR ; 2105 PUSH ACC ; 2107 MOVC A,@A+DPTR ; 2108 CJNE A,18,210E ; 210B POP ACC ; 210D RET ; 210E POP ACC ; 2110 DJNZ ACC,2105 ; 2113 RET ; 2114 CLR A ; 2115 MOV R0,#00 ; 2117 MOV R1,#08 ; 2119 LCALL 55DB ; 211C MOV R3,#52 ; 211E MOV DPTR,#1405 ; 2121 MOV A,R3 ; 2122 MOVX @DPTR,A ; (x1405)=52 2123 MOV R3,#04 ; 2125 MOV DPTR,#1406 ; 2128 MOV A,R3 ; 2129 MOVX @DPTR,A ; (x1406)=04 212A MOV R3,#80 ; 212C MOV DPTR,#1407 ; 212F MOV A,R3 ; 2130 MOVX @DPTR,A ; (x1407)=80 2131 MOV R3,#02 ; 2133 MOV DPTR,#1408 ; 2136 MOV A,R3 ; 2137 MOVX @DPTR,A ; (x1408)=02 2138 MOV R3,#00 ; 213A MOV DPTR,#140A ; 213D MOV A,R3 ; 213E MOVX @DPTR,A ; (x140A)=00 213F MOV DPTR,#1409 ; 2142 MOV A,R3 ; 2143 MOVX @DPTR,A ; (x1409)=00 2144 MOV R3,#02 ; 2146 MOV DPTR,#11C5 ; 2149 MOV A,R3 ; 214A MOVX @DPTR,A ; (x11C5)=02 214B MOV R3,#00 ; 214D MOV DPTR,#11C6 ; 2150 MOV A,R3 ; 2151 MOVX @DPTR,A ; (x11C6)=00 2152 MOV R3,#C5 ; 2154 MOV R2,#11 ; 2156 MOV DPTR,#0002 ; 2159 LCALL 32FF ; 215C LCALL 53B7 ; 215F INC A ; 2160 NOP ; 2161 LCALL 537E ; 2164 INC A ; 2165 NOP ; 2166 MOV R3,#03 ; 2168 LCALL 5159 ; 216B JNZ 2170 ; 216D LJMP 2305 ; 2170 MOV R3,#00 ; 2172 LCALL 53B7 ; 2175 INC @R0 ; 2176 NOP ; 2177 MOV DPTR,#4102 ; 217A MOVX A,@DPTR ; 217B MOV R3,A ; 217C LCALL 53B7 ; 217F INC 00 ; 2181 MOV R5,#02 ; 2183 MOV A,#05 ; 2185 ADD A,R7 ; 2186 MOV R3,A ; 2187 CLR A ; 2188 ADDC A,R6 ; 2189 MOV R2,A ; 218A MOV DPH,R2 ; 218C MOV DPL,R3 ; 218E MOVX A,@DPTR ; 218F ADD A,R5 ; 2190 MOVX @DPTR,A ; 2191 MOV R3,A ; 2192 MOV A,#05 ; 2194 ADD A,R7 ; 2195 MOV R3,A ; 2196 CLR A ; 2197 ADDC A,R6 ; 2198 MOV R2,A ; 2199 MOV DPTR,#0002 ; 219C LCALL 38D7 ; 219F LCALL 53B7 ; 21A2 INC A ; 21A3 NOP ; 21A4 LCALL 537E ; 21A7 INC A ; 21A8 NOP ; 21A9 MOV R3,#84 ; 21AB LCALL 5159 ; 21AE JZ 21E3 ; 21B0 MOV A,#06 ; 21B2 ADD A,R7 ; 21B3 MOV R3,A ; 21B4 CLR A ; 21B5 ADDC A,R6 ; 21B6 MOV R2,A ; 21B7 LCALL 5234 ; 21BA AJMP 2012 ; 21BC ANL 7E,#06 ; 21BF NOP ; 21C0 MOV R3,#03 ; 21C2 LCALL 5159 ; 21C5 JZ 21D0 ; 21C7 MOV R3,#01 ; 21C9 LCALL 53B7 ; 21CC INC A ; 21CD NOP ; 21CE SJMP 2237 ; 21D0 MOV R5,#FD ; 21D2 MOV A,#05 ; 21D4 ADD A,R7 ; 21D5 MOV R3,A ; 21D6 CLR A ; 21D7 ADDC A,R6 ; 21D8 MOV R2,A ; 21D9 MOV DPH,R2 ; 21DB MOV DPL,R3 ; 21DD MOVX A,@DPTR ; 21DE ADD A,R5 ; 21DF MOVX @DPTR,A ; 21E0 MOV R3,A ; 21E1 SJMP 222D ; 21E3 LCALL 5378 ; 21E6 INC A ; 21E7 NOP ; 21E8 JZ 21F6 ; 21EA LCALL 537E ; 21ED INC A ; 21EE NOP ; 21EF MOV R3,#FF ; 21F1 LCALL 5159 ; 21F4 JZ 222B ; 21F6 MOV R3,#00 ; 21F8 LCALL 53B7 ; 21FB INC @R0 ; 21FC NOP ; 21FD LCALL 537E ; 2200 INC A ; 2201 NOP ; 2202 MOV R3,#40 ; 2204 MOV A,R3 ; 2205 ANL A,R5 ; 2206 MOV R3,A ; 2207 MOV 05,R3 ; 2209 MOV R3,#09 ; 220B MOV R2,#14 ; 220D MOV DPH,R2 ; 220F MOV DPL,R3 ; 2211 MOVX A,@DPTR ; 2212 ORL A,R5 ; 2213 MOVX @DPTR,A ; 2214 MOV R3,A ; 2215 MOV R3,#00 ; 2217 LCALL 53B7 ; 221A INC A ; 221B NOP ; 221C MOV A,#05 ; 221E ADD A,R7 ; 221F MOV R3,A ; 2220 CLR A ; 2221 ADDC A,R6 ; 2222 MOV R2,A ; 2223 MOV DPTR,#0002 ; 2226 LCALL 2680 ; 2229 SJMP 222D ; 222B SJMP 2237 ; 222D LCALL 5378 ; 2230 INC 00 ; 2232 JZ 2237 ; 2234 LJMP 2181 ; 2237 LCALL 5378 ; 223A INC A ; 223B NOP ; 223C JZ 2241 ; 223E LJMP 2305 ; 2241 MOV R3,#00 ; 2243 MOV DPTR,#1408 ; 2246 MOV A,R3 ; 2247 MOVX @DPTR,A ; 2248 MOV R3,#07 ; 224A MOV DPTR,#11C5 ; 224D MOV A,R3 ; 224E MOVX @DPTR,A ; 224F MOV R3,#01 ; 2251 MOV DPTR,#11C6 ; 2254 MOV A,R3 ; 2255 MOVX @DPTR,A ; 2256 MOV R3,#00 ; 2258 MOV DPTR,#11C7 ; 225B MOV A,R3 ; 225C MOVX @DPTR,A ; 225D MOV R3,#B0 ; 225F MOV DPTR,#11C8 ; 2262 MOV A,R3 ; 2263 MOVX @DPTR,A ; 2264 MOV R3,#00 ; 2266 MOV DPTR,#11C9 ; 2269 MOV A,R3 ; 226A MOVX @DPTR,A ; 226B MOV R3,#00 ; 226D MOV DPTR,#11CA ; 2270 MOV A,R3 ; 2271 MOVX @DPTR,A ; 2272 MOV R3,#20 ; 2274 MOV DPTR,#11CB ; 2277 MOV A,R3 ; 2278 MOVX @DPTR,A ; 2279 MOV R3,#C5 ; 227B MOV R2,#11 ; 227D MOV DPTR,#0002 ; 2280 LCALL 32FF ; 2283 LCALL 5378 ; 2286 INC A ; 2287 NOP ; 2288 JZ 2296 ; 228A LCALL 537E ; 228D INC A ; 228E NOP ; 228F MOV R3,#FF ; 2291 LCALL 5159 ; 2294 JZ 2305 ; 2296 LCALL 537E ; 2299 INC A ; 229A NOP ; 229B MOV R3,#40 ; 229D MOV A,R3 ; 229E ANL A,R5 ; 229F MOV R3,A ; 22A0 MOV 05,R3 ; 22A2 MOV R3,#09 ; 22A4 MOV R2,#14 ; 22A6 MOV DPH,R2 ; 22A8 MOV DPL,R3 ; 22AA MOVX A,@DPTR ; 22AB ORL A,R5 ; 22AC MOVX @DPTR,A ; 22AD MOV R3,A ; 22AE MOV R3,#20 ; 22B0 MOV R2,#00 ; 22B2 LCALL 5652 ; 22B5 MOV R3,#04 ; 22B7 MOV R2,#41 ; 22B9 LCALL 5652 ; 22BC MOV R3,#CC ; 22BE MOV R2,#11 ; 22C0 MOV DPTR,#0006 ; 22C3 LCALL 3BA1 ; 22C6 LCALL 53B7 ; 22C9 INC @R1 ; 22CA NOP ; 22CB LCALL 537E ; 22CE INC @R1 ; 22CF NOP ; 22D0 MOV R3,#01 ; 22D2 LCALL 5159 ; 22D5 JZ 22F7 ; 22D7 MOV R3,#04 ; 22D9 MOV DPTR,#1407 ; 22DC MOV A,R3 ; 22DD MOVX @DPTR,A ; 22DE MOV DPTR,#0000 ; 22E1 LCALL 3A42 ; 22E4 MOV A,R3 ; 22E5 JNZ 22F5 ; 22E7 MOV R5,#10 ; 22E9 MOV R3,#07 ; 22EB MOV R2,#14 ; 22ED MOV DPH,R2 ; 22EF MOV DPL,R3 ; 22F1 MOVX A,@DPTR ; 22F2 ORL A,R5 ; 22F3 MOVX @DPTR,A ; 22F4 MOV R3,A ; 22F5 SJMP 2305 ; 22F7 MOV R5,#04 ; 22F9 MOV R3,#09 ; 22FB MOV R2,#14 ; 22FD MOV DPH,R2 ; 22FF MOV DPL,R3 ; 2301 MOVX A,@DPTR ; 2302 ORL A,R5 ; 2303 MOVX @DPTR,A ; 2304 MOV R3,A ; 2305 MOV DPTR,#1408 ; 2308 MOVX A,@DPTR ; 2309 JZ 235D ; 230B LCALL 5378 ; 230E INC A ; 230F NOP ; 2310 LCALL 5516 ; 2313 RL A ; 2314 ADD A,R1 ; 2315 AJMP 2023 ; 2317 ADDC A,R1 ; 2318 DIV AB ; 2319 RL A ; 231A ADDC A,R1 ; 231B MOV C,23 ; 231D ORL TL2,A ; 231F RL A ; 2320 ORL A,R3 ; 2321 MOV @R1,A ; 2322 RL A ; 2323 ORL A,R3 ; 2324 MOV R3,A ; 2325 NOP ; 2326 NOP ; 2327 RL A ; 2328 ANL A,#7D ; 232A SJMP 23A7 ; 232C INC R1 ; 232D MOV R2,#14 ; 232F MOV DPH,R2 ; 2331 MOV DPL,R3 ; 2333 MOVX A,@DPTR ; 2334 ORL A,R5 ; 2335 MOVX @DPTR,A ; 2336 MOV R3,A ; 2337 SJMP 235D ; 2339 MOV R3,#20 ; 233B MOV DPTR,#140A ; 233E MOV A,R3 ; 233F MOVX @DPTR,A ; 2340 SJMP 235D ; 2342 MOV R3,#80 ; 2344 MOV DPTR,#140A ; 2347 MOV A,R3 ; 2348 MOVX @DPTR,A ; 2349 SJMP 235D ; 234B MOV R3,#20 ; 234D MOV DPTR,#1409 ; 2350 MOV A,R3 ; 2351 MOVX @DPTR,A ; 2352 SJMP 235D ; 2354 MOV R3,#04 ; 2356 MOV DPTR,#1409 ; 2359 MOV A,R3 ; 235A MOVX @DPTR,A ; 235B SJMP 235D ; 235D LJMP 561F ; 2360 CLR A ; 2361 MOV R0,#00 ; 2363 MOV R1,#05 ; 2365 LCALL 55DB ; 2368 MOV R3,#00 ; 236A LCALL 53B7 ; 236D INC A ; 236E NOP ; 236F MOV DPTR,#13F5 ; 2372 MOVX A,@DPTR ; 2373 MOV R3,A ; 2374 MOV