Painel Banctec 91690

De Garoa Hacker Clube
Revisão de 20h53min de 26 de setembro de 2012 por Leandrolsilva (discussão | contribs)
Ir para navegação Ir para pesquisar

O Garoa recebeu como doação o Painel de operação de uma classificadora de cheques, marca Banctec modelo 91690, que foi aposentada em 2011.

Pretendemos reutilizar o Painel no Garoa e para isso vamos fazer engenharia reversa no equipamento.

PAINEL 91690.JPG


O Painel

É composto por um display de 7 linhas por 40 colunas, com dois botões (FEED, STOP) e um teclado numérico com algumas teclas adicionais (A,B,C,D,E,F,DO,CHG,CLR,EX).

Documentação

Temos também boa parte da documentação de manutenção da máquina na qual o painel era utilizado. Documentação do Painel Banctec 91690

Quando

A idéia é trabalhar no painel durante o evento Eletrônica com Carinho que acontece às segundas-feiras, às 19h 30min.

Interessados


Histórico de Atividades

Esta página será utilizada para registrar o progresso das atividades.

27/Ago/2012

Documentação

Documentação do equipamento: Arquivo:PAINEL BANCTEC 91690.PDF

Fotos (ToDo)

O painel foi desmontado e tiramos fotos de todas as placas.

Revisamos a documentação e localizamos o esquemático das placas que compõem o painel.

Próximo passo: Fazer dump da EPROM para tentar entender como o painel processa e exibe os dados.

06/Set/2012

Tentando descobrir qual o modelo de EPROM usado.

Documentação menciona TTL PROM 2048 x8. Etiqueta do que parece ser a EPROM tem escrito o código 0111-004.

No esquemático o chip está identificado como dm87s191

Datasheet DM87s191

Datasheet DM87s191 - 2K x 8 TTL PROM Memory - DIP 24 pinos Arquivo:DM87S191.pdf

Pinagem DM87s191

  • 24 - Vcc
  • 23 - A8
  • 22 - A9
  • 21 - A10 (MSB)
  • 20 - !CE1
  • 19 - CE2
  • 18 - CE3
  • 17 - DO7 (MSB)
  • 16 - DO6
  • 15 - DO5
  • 14 - DO4
  • 13 - DO3
  • 12 - GND
  • 11 - DO2
  • 10 - DO1
  • 09 - DO0 (LSB)
  • 08 - A0 (LSB)
  • 07 - A1
  • 06 - A2
  • 05 - A3
  • 04 - A4
  • 03 - A5
  • 02 - A6
  • 01 - A7

Próximos passos: Fazer dump da EPROM, rodar um disassembler e analisar o código para tentar entender como o painel processa e exibe os dados.

21/Set/2012

Dump da EPROM efetuado

Foram utilizados dois CI SN74393N - Dual 4-bit counter para passar os endereços para a EPROM (11 bits) e um arduino para ler os dados (8 bits por endereço).

DUMP da EPROM (dm87s191)

0      02 00 26 FF FF FF FF FF FF FF FF 02 01 80 FF FF
10     FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
20     FF FF FF 02 02 CA 75 D0 00 75 90 D4 78 01 76 AA
30     B6 AA FD 08 B8 80 F7 78 01 76 55 B6 55 FD 08 B8
40     50 F7 78 00 76 00 08 B8 80 FA 75 81 10 75 2C 01
50     75 2D FE 79 74 78 74 75 D0 08 79 30 78 30 D2 7F
60     90 40 00 E0 F5 2E 75 89 21 75 8D FD 75 8B FD 75
70     8C F0 75 8A 00 75 B8 02 00 00 00 75 98 70 75 88
80     50 75 A8 92 D2 95 D2 94 C2 94 12 00 92 12 01 6A
90     80 F8 30 B3 6E 75 D0 08 E9 98 60 67 E6 08 B8 74
A0     02 78 30 B4 0D 02 80 65 B4 0A 02 80 5C B4 0E 02
B0     80 7E B4 0C 02 80 5B B4 11 02 80 7E B4 13 02 80
C0     77 B4 14 02 80 62 B4 15 02 80 61 B4 08 02 80 35
D0     B4 17 02 80 14 B4 87 13 C0 D0 75 D0 00 F7 09 B9
E0     80 02 79 74 D0 D0 02 01 68 74 87 AD 2B BD 20 02
F0     80 76 05 2B 90 20 00 F0 7F 50 DF FE D2 91 20 B3
100    FD C2 91 80 63 15 2B 80 47 05 2A 80 43 75 2B 00
110    80 3E 75 2B 00 75 2A 00 D2 93 7F 50 DF FE C2 93
120    20 B3 FD 30 B3 FD 80 40 D2 92 80 3C C2 92 80 38
130    75 2B 00 75 2A 00 80 18 D2 7D E9 98 60 FC E6 30
140    7D 06 F5 2A C2 7D 80 02 F5 2B 08 B8 74 02 78 30
150    75 F0 20 E5 2A A4 25 2B 90 20 00 F0 7F 50 DF FE
160    D2 90 7F 50 DF FE C2 90 00 22 30 7F 12 75 D0 00
170    E9 98 60 0B E6 F5 99 C2 7F 08 B8 80 02 78 74 22
180    C0 D0 C0 E0 C0 F0 C0 82 C0 83 75 D0 00 D2 94 C2
190    94 75 8C F0 75 8A 00 75 83 10 E5 2C FE F5 82 E0
1A0    54 07 B4 07 2A 20 7E 02 80 1F 05 2D AD 2D BD 00
1B0    66 C2 7E 75 2D FE 20 7B 06 20 7C 0B 02 02 A6 C2
1C0    7B 75 28 88 02 02 A6 C2 7C 75 2D FE 02 02 B5 30
1D0    7E 37 75 2D FE C0 82 75 82 01 E0 D0 82 54 07 B4
1E0    00 06 74 84 F5 28 C2 7C E5 28 B4 80 03 02 02 58
1F0    B4 84 08 20 7B 10 D2 7B 02 02 A6 B4 85 08 20 7C
200    05 D2 7C 02 02 A6 02 02 BF 05 2D AD 2D BD 00 3D
210    BE 01 07 24 02 80 13 02 02 B5 BE 02 04 24 0A 80
220    09 BE 04 04 24 12 80 02 24 1A 83 80 26 84 85 31
230    34 37 30 80 00 00 00 32 35 38 46 81 00 00 00 33
240    36 39 45 82 00 00 00 41 42 43 44 83 00 02 02 BF
250    02 01 9C D2 7E 02 02 A2 C0 82 75 82 08 E0 D0 82
260    54 07 B4 06 5A C0 82 C0 83 C0 D0 75 D0 08 12 01
270    12 74 FE 12 00 F4 D2 94 C2 94 D5 29 F6 30 8D FD
280    C2 8D D2 94 C2 94 75 8C F0 75 8A 00 05 29 E5 29
290    B4 00 EA 12 01 12 74 86 D0 D0 D0 83 D0 82 80 02
2A0    74 80 F5 28 80 19 E5 28 F7 09 B9 80 02 79 74 20
2B0    7B 0D 20 7C 0A EE 23 F5 2C BE 10 94 75 2C 01 D0
2C0    83 D0 82 D0 F0 D0 E0 D0 D0 32 C0 D0 C0 E0 C0 F0
2D0    C0 82 C0 83 75 D0 08 30 99 06 C2 99 D2 7F 80 0B
2E0    C2 98 E5 99 F7 09 B9 74 02 79 30 D0 83 D0 82 D0
2F0    F0 D0 E0 D0 D0 32 FF FF FF FF FF FF FF FF FF FF
300    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
310    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
320    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
330    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
340    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
350    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
360    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
370    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
380    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
390    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3A0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3B0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3C0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3D0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3E0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3F0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
400    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
410    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
420    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
430    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
440    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
450    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
460    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
470    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
480    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
490    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4A0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4B0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4C0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4D0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4E0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4F0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
500    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
510    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
520    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
530    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
540    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
550    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
560    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
570    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
580    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
590    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
5A0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
5B0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
5C0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
5D0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
5E0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
5F0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
600    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
610    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
620    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
630    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
640    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
650    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
660    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
670    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
680    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
690    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
6A0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
6B0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
6C0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
6D0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
6E0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
6F0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
700    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
710    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
720    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
730    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
740    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
750    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
760    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
770    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
780    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
790    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7A0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7B0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7C0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7D0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7E0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
7F0    FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF


Sketch arduino usado para fazer o dump

Adaptado do que foi usado no projeto IntelbrasOP4114

//counter ICs = 2x SN74393N (total of 16 bits of which we use 11 to address the 16k of ROM mem)
int counter_reset = 2; //pin 2 & 12 of both counter ICs
int counter_increment = 3; //pin 1 of the first counter IC

//eprom IC = dm87s191
int eprom_data[8] = {6,7,8,9,10,11,12,13}; // pins 09, 10, 11, 13, 14, 15, 16, 17 of the eprom IC
//CE - CHIP ENABLE PINS
int oe=4; //pin 18 (CE2) of the eprom IC
int ce=5; //pin 19 (CE3) of the eprom IC
			// PIN 20 (!CE1) connected to ground directly

long int address;
int data;

void reset_counter(){
  digitalWrite(counter_increment, HIGH);

  digitalWrite(counter_reset, HIGH);
  delay(10);
  digitalWrite(counter_reset, LOW);
}

void increment_counter(){
  digitalWrite(counter_increment, LOW);
  delay(10);//do we need it?
  digitalWrite(counter_increment, HIGH);
}

void setup(){
  address=0x0;
  int i;

  for (i=0;i<8;i++){
    pinMode(eprom_data[i], INPUT);
  }
  
  pinMode(counter_reset, OUTPUT);
  pinMode(counter_increment, OUTPUT);
  pinMode(oe, OUTPUT);
  pinMode(ce, OUTPUT);

    digitalWrite(oe, LOW);
    digitalWrite(ce, LOW);
  
  reset_counter();
  Serial.begin(38400);
}

int readDm87s191_counter(){
  int i,j;

    digitalWrite(oe, HIGH);
    digitalWrite(ce, HIGH);

    data=0;
    for (i=0, j=1; i<8; i++,j*=2){
      if (digitalRead(eprom_data[i])==HIGH){
         data+=j;
      }
    }
  
    digitalWrite(oe, LOW);
    digitalWrite(ce, LOW);

    increment_counter();
  return data;
}

long int MAXADDR=0x7ff;
int chunk_size = 16;
void loop(){
  reset_counter();
  
  while(address<=MAXADDR){
    
      Serial.print(address, HEX);
      Serial.print("\t");
      for (int i=0; i<chunk_size; i++){
        Serial.print(readDm87s191_counter(), HEX);
        Serial.print(" ");
      }
      Serial.println();
    
    address+=chunk_size;
  }
  while(true){}
}

Disassembly do binário

Possível disassembly - não confirmado se está correto

Efetuado com a ferramenta d51v26

;
;  D51 V2.6 8051 Disassembly of .\rom_painel_banctec.bin
;  9/21/2012 22:48
;
	org	0
;
reset:	ljmp	X0026		; 0000   02 00 26   ..&
;
ie0vec:	mov	r7,a		; 0003   ff         .	; data truncated
;
	org	0bh
;
tf0vec:	ljmp	X0180		; 000b   02 01 80   ...
;
	org	12h
;
here:	mov	r7,a		; 0012   ff         .
ie1vec:	mov	r7,a		; 0013   ff         .	; data truncated
;
	org	1bh
;
tf1vec:	mov	r7,a		; 001b   ff         .	; data truncated
;
	org	23h
;
servec:	ljmp	X02ca		; 0023   02 02 ca   ..J
;
X0026:	mov	psw,#0		; 0026   75 d0 00   uP.
	mov	p1,#0d4h	; 0029   75 90 d4   u.T
	mov	r0,#1		; 002c   78 01      x.
X002e:	mov	@r0,#0aah	; 002e   76 aa      v*
X0030:	cjne	@r0,#0aah,X0030	; 0030   b6 aa fd   6*}
	inc	r0		; 0033   08         .
	cjne	r0,#80h,X002e	; 0034   b8 80 f7   8.w
	mov	r0,#1		; 0037   78 01      x.
X0039:	mov	@r0,#55h	; 0039   76 55      vU
X003b:	cjne	@r0,#55h,X003b	; 003b   b6 55 fd   6U}
	inc	r0		; 003e   08         .
	cjne	r0,#50h,X0039	; 003f   b8 50 f7   8Pw
	mov	r0,#0		; 0042   78 00      x.
X0044:	mov	@r0,#0		; 0044   76 00      v.
	inc	r0		; 0046   08         .
	cjne	r0,#80h,X0044	; 0047   b8 80 fa   8.z
	mov	sp,#10h		; 004a   75 81 10   u..
	mov	2ch,#1		; 004d   75 2c 01   u,.
	mov	2dh,#0feh	; 0050   75 2d fe   u-~
	mov	r1,#74h		; 0053   79 74      yt
	mov	r0,#74h		; 0055   78 74      xt
	mov	psw,#8		; 0057   75 d0 08   uP.
	mov	r1,#30h		; 005a   79 30      y0
	mov	r0,#30h		; 005c   78 30      x0
	setb	2fh.7		; 005e   d2 7f      R.
	mov	dptr,#X4000	; 0060   90 40 00   .@.
	movx	a,@dptr		; 0063   e0         `
	mov	2eh,a		; 0064   f5 2e      u.
	mov	tmod,#21h	; 0066   75 89 21   u.!
	mov	th1,#0fdh	; 0069   75 8d fd   u.}
	mov	tl1,#0fdh	; 006c   75 8b fd   u.}
	mov	th0,#0f0h	; 006f   75 8c f0   u.p
	mov	tl0,#0		; 0072   75 8a 00   u..
	mov	ip,#2		; 0075   75 b8 02   u8.
	nop			; 0078   00         .	; data truncated
;
	org	7bh
;
	mov	scon,#70h	; 007b   75 98 70   u.p
	mov	tcon,#50h	; 007e   75 88 50   u.P
	mov	ie,#92h		; 0081   75 a8 92   u(.
	setb	p1.5		; 0084   d2 95      R.
	setb	p1.4		; 0086   d2 94      R.
	clr	p1.4		; 0088   c2 94      B.
X008a:	lcall	X0092		; 008a   12 00 92   ...
	lcall	X016a		; 008d   12 01 6a   ..j
	sjmp	X008a		; 0090   80 f8      .x
;
X0092:	jnb	int1,X0103	; 0092   30 b3 6e   03n
	mov	psw,#8		; 0095   75 d0 08   uP.
	mov	a,r1		; 0098   e9         i
	subb	a,r0		; 0099   98         .
	jz	X0103		; 009a   60 67      `g
	mov	a,@r0		; 009c   e6         f
	inc	r0		; 009d   08         .
	cjne	r0,#74h,X00a3	; 009e   b8 74 02   8t.
	mov	r0,#30h		; 00a1   78 30      x0
X00a3:	cjne	a,#0dh,X00a8	; 00a3   b4 0d 02   4..
	sjmp	X010d		; 00a6   80 65      .e
;
X00a8:	cjne	a,#0ah,X00ad	; 00a8   b4 0a 02   4..
	sjmp	X0109		; 00ab   80 5c      .\
;
X00ad:	cjne	a,#0eh,X00b2	; 00ad   b4 0e 02   4..
	sjmp	X0130		; 00b0   80 7e      .~
;
X00b2:	cjne	a,#0ch,X00b7	; 00b2   b4 0c 02   4..
	sjmp	X0112		; 00b5   80 5b      .[
;
X00b7:	cjne	a,#11h,X00bc	; 00b7   b4 11 02   4..
	sjmp	X013a		; 00ba   80 7e      .~
;
X00bc:	cjne	a,#13h,X00c1	; 00bc   b4 13 02   4..
	sjmp	X0138		; 00bf   80 77      .w
;
X00c1:	cjne	a,#14h,X00c6	; 00c1   b4 14 02   4..
	sjmp	X0128		; 00c4   80 62      .b
;
X00c6:	cjne	a,#15h,X00cb	; 00c6   b4 15 02   4..
	sjmp	X012c		; 00c9   80 61      .a
;
X00cb:	cjne	a,#8,X00d0	; 00cb   b4 08 02   4..
	sjmp	X0105		; 00ce   80 35      .5
;
X00d0:	cjne	a,#17h,X00d5	; 00d0   b4 17 02   4..
	sjmp	X00e9		; 00d3   80 14      ..
;
X00d5:	cjne	a,#87h,X00eb	; 00d5   b4 87 13   4..
	push	psw		; 00d8   c0 d0      @P
	mov	psw,#0		; 00da   75 d0 00   uP.
	mov	@r1,a		; 00dd   f7         w
	inc	r1		; 00de   09         .
	cjne	r1,#80h,X00e4	; 00df   b9 80 02   9..
	mov	r1,#74h		; 00e2   79 74      yt
X00e4:	pop	psw		; 00e4   d0 d0      PP
	ljmp	X0168		; 00e6   02 01 68   ..h
;
X00e9:	mov	a,#87h		; 00e9   74 87      t.
X00eb:	mov	r5,2bh		; 00eb   ad 2b      -+
	cjne	r5,#20h,X00f2	; 00ed   bd 20 02   = .
	sjmp	X0168		; 00f0   80 76      .v
;
X00f2:	inc	2bh		; 00f2   05 2b      .+
X00f4:	mov	dptr,#X2000	; 00f4   90 20 00   . .
	movx	@dptr,a		; 00f7   f0         p
	mov	r7,#50h		; 00f8   7f 50      .P
X00fa:	djnz	r7,X00fa	; 00fa   df fe      _~
	setb	p1.1		; 00fc   d2 91      R.
X00fe:	jb	int1,X00fe	; 00fe   20 b3 fd    3}
	clr	p1.1		; 0101   c2 91      B.
X0103:	sjmp	X0168		; 0103   80 63      .c
;
X0105:	dec	2bh		; 0105   15 2b      .+
	sjmp	X0150		; 0107   80 47      .G
;
X0109:	inc	2ah		; 0109   05 2a      .*
	sjmp	X0150		; 010b   80 43      .C
;
X010d:	mov	2bh,#0		; 010d   75 2b 00   u+.
	sjmp	X0150		; 0110   80 3e      .>
;
X0112:	mov	2bh,#0		; 0112   75 2b 00   u+.
	mov	2ah,#0		; 0115   75 2a 00   u*.
	setb	p1.3		; 0118   d2 93      R.
	mov	r7,#50h		; 011a   7f 50      .P
X011c:	djnz	r7,X011c	; 011c   df fe      _~
	clr	p1.3		; 011e   c2 93      B.
X0120:	jb	int1,X0120	; 0120   20 b3 fd    3}
X0123:	jnb	int1,X0123	; 0123   30 b3 fd   03}
	sjmp	X0168		; 0126   80 40      .@
;
X0128:	setb	p1.2		; 0128   d2 92      R.
	sjmp	X0168		; 012a   80 3c      .<
;
X012c:	clr	p1.2		; 012c   c2 92      B.
	sjmp	X0168		; 012e   80 38      .8
;
X0130:	mov	2bh,#0		; 0130   75 2b 00   u+.
	mov	2ah,#0		; 0133   75 2a 00   u*.
	sjmp	X0150		; 0136   80 18      ..
;
X0138:	setb	2fh.5		; 0138   d2 7d      R}
X013a:	mov	a,r1		; 013a   e9         i
	subb	a,r0		; 013b   98         .
	jz	X013a		; 013c   60 fc      `|
	mov	a,@r0		; 013e   e6         f
	jnb	2fh.5,X0148	; 013f   30 7d 06   0}.
	mov	2ah,a		; 0142   f5 2a      u*
	clr	2fh.5		; 0144   c2 7d      B}
	sjmp	X014a		; 0146   80 02      ..
;
X0148:	mov	2bh,a		; 0148   f5 2b      u+
X014a:	inc	r0		; 014a   08         .
	cjne	r0,#74h,X0150	; 014b   b8 74 02   8t.
	mov	r0,#30h		; 014e   78 30      x0
X0150:	mov	b,#20h		; 0150   75 f0 20   up 
	mov	a,2ah		; 0153   e5 2a      e*
	mul	ab		; 0155   a4         $
	add	a,2bh		; 0156   25 2b      %+
	mov	dptr,#X2000	; 0158   90 20 00   . .
	movx	@dptr,a		; 015b   f0         p
	mov	r7,#50h		; 015c   7f 50      .P
X015e:	djnz	r7,X015e	; 015e   df fe      _~
	setb	p1.0		; 0160   d2 90      R.
	mov	r7,#50h		; 0162   7f 50      .P
X0164:	djnz	r7,X0164	; 0164   df fe      _~
	clr	p1.0		; 0166   c2 90      B.
X0168:	nop			; 0168   00         .
	ret			; 0169   22         "
;
X016a:	jnb	2fh.7,X017f	; 016a   30 7f 12   0..
	mov	psw,#0		; 016d   75 d0 00   uP.
	mov	a,r1		; 0170   e9         i
	subb	a,r0		; 0171   98         .
	jz	X017f		; 0172   60 0b      `.
	mov	a,@r0		; 0174   e6         f
	mov	sbuf,a		; 0175   f5 99      u.
	clr	2fh.7		; 0177   c2 7f      B.
	inc	r0		; 0179   08         .
	cjne	r0,#80h,X017f	; 017a   b8 80 02   8..
	mov	r0,#74h		; 017d   78 74      xt
X017f:	ret			; 017f   22         "
;
X0180:	push	psw		; 0180   c0 d0      @P
	push	acc		; 0182   c0 e0      @`
	push	b		; 0184   c0 f0      @p
	push	dpl		; 0186   c0 82      @.
	push	dph		; 0188   c0 83      @.
	mov	psw,#0		; 018a   75 d0 00   uP.
	setb	p1.4		; 018d   d2 94      R.
	clr	p1.4		; 018f   c2 94      B.
	mov	th0,#0f0h	; 0191   75 8c f0   u.p
	mov	tl0,#0		; 0194   75 8a 00   u..
	mov	dph,#10h	; 0197   75 83 10   u..
	mov	a,2ch		; 019a   e5 2c      e,
X019c:	mov	r6,a		; 019c   fe         ~
	mov	dpl,a		; 019d   f5 82      u.
	movx	a,@dptr		; 019f   e0         `
	anl	a,#7		; 01a0   54 07      T.
	cjne	a,#7,X01cf	; 01a2   b4 07 2a   4.*
	jb	2fh.6,X01aa	; 01a5   20 7e 02    ~.
	sjmp	X01c9		; 01a8   80 1f      ..
;
X01aa:	inc	2dh		; 01aa   05 2d      .-
	mov	r5,2dh		; 01ac   ad 2d      --
	cjne	r5,#0,X0217	; 01ae   bd 00 66   =.f
	clr	2fh.6		; 01b1   c2 7e      B~
	mov	2dh,#0feh	; 01b3   75 2d fe   u-~
	jb	2fh.3,X01bf	; 01b6   20 7b 06    {.
	jb	2fh.4,X01c7	; 01b9   20 7c 0b    |.
	ljmp	X02a6		; 01bc   02 02 a6   ..&
;
X01bf:	clr	2fh.3		; 01bf   c2 7b      B{
	mov	28h,#88h	; 01c1   75 28 88   u(.
	ljmp	X02a6		; 01c4   02 02 a6   ..&
;
X01c7:	clr	2fh.4		; 01c7   c2 7c      B|
X01c9:	mov	2dh,#0feh	; 01c9   75 2d fe   u-~
	ljmp	X02b5		; 01cc   02 02 b5   ..5
;
X01cf:	jnb	2fh.6,X0209	; 01cf   30 7e 37   0~7
	mov	2dh,#0feh	; 01d2   75 2d fe   u-~
	push	dpl		; 01d5   c0 82      @.
	mov	dpl,#1		; 01d7   75 82 01   u..
	movx	a,@dptr		; 01da   e0         `
	pop	dpl		; 01db   d0 82      P.
	anl	a,#7		; 01dd   54 07      T.
	cjne	a,#0,X01e8	; 01df   b4 00 06   4..
	mov	a,#84h		; 01e2   74 84      t.
	mov	28h,a		; 01e4   f5 28      u(
	clr	2fh.4		; 01e6   c2 7c      B|
X01e8:	mov	a,28h		; 01e8   e5 28      e(
	cjne	a,#80h,X01f0	; 01ea   b4 80 03   4..
	ljmp	X0258		; 01ed   02 02 58   ..X
;
X01f0:	cjne	a,#84h,X01fb	; 01f0   b4 84 08   4..
	jb	2fh.3,X0206	; 01f3   20 7b 10    {.
	setb	2fh.3		; 01f6   d2 7b      R{
	ljmp	X02a6		; 01f8   02 02 a6   ..&
;
X01fb:	cjne	a,#85h,X0206	; 01fb   b4 85 08   4..
	jb	2fh.4,X0206	; 01fe   20 7c 05    |.
	setb	2fh.4		; 0201   d2 7c      R|
	ljmp	X02a6		; 0203   02 02 a6   ..&
;
X0206:	ljmp	X02bf		; 0206   02 02 bf   ..?
;
X0209:	inc	2dh		; 0209   05 2d      .-
	mov	r5,2dh		; 020b   ad 2d      --
	cjne	r5,#0,X024d	; 020d   bd 00 3d   =.=
	cjne	r6,#1,X021a	; 0210   be 01 07   >..
	add	a,#2		; 0213   24 02      $.
	sjmp	X022a		; 0215   80 13      ..
;
X0217:	ljmp	X02b5		; 0217   02 02 b5   ..5
;
X021a:	cjne	r6,#2,X0221	; 021a   be 02 04   >..
	add	a,#0ah		; 021d   24 0a      $.
	sjmp	X022a		; 021f   80 09      ..
;
X0221:	cjne	r6,#4,X0228	; 0221   be 04 04   >..
	add	a,#data1	; 0224   24 12      $.
	sjmp	X022a		; 0226   80 02      ..
;
X0228:	add	a,#1ah		; 0228   24 1a      $.
X022a:	movc	a,@a+pc		; 022a   83         .
	sjmp	X0253		; 022b   80 26      .&
;
	div	ab		; 022d   84         .
	mov	34h,31h		; 022e   85 31 34   .14
	addc	a,@r1		; 0231   37         7
	jnb	p0.0,X0235	; 0232   30 80 00   0..
X0235:	nop			; 0235   00         .	; data truncated
;
	org	237h
;
	reti			; 0237   32         2
;
	addc	a,38h		; 0238   35 38      58
	orl	a,@r0		; 023a   46         F
	ajmp	page4		; 023b   81 00      ..
;
	org	23fh
;
	rlc	a		; 023f   33         3
	addc	a,@r0		; 0240   36         6
	addc	a,r1		; 0241   39         9
X0242:	orl	a,dpl		; 0242   45 82      E.
	nop			; 0244   00         .	; data truncated
;
	org	247h
;
	ajmp	X0242		; 0247   41 42      AB
;
	orl	44h,#83h	; 0249   43 44 83   CD.
	nop			; 024c   00         .
X024d:	ljmp	X02bf		; 024d   02 02 bf   ..?
;
X0250:	ljmp	X019c		; 0250   02 01 9c   ...
;
X0253:	setb	2fh.6		; 0253   d2 7e      R~
	ljmp	X02a2		; 0255   02 02 a2   .."
;
X0258:	push	dpl		; 0258   c0 82      @.
	mov	dpl,#8		; 025a   75 82 08   u..
	movx	a,@dptr		; 025d   e0         `
	pop	dpl		; 025e   d0 82      P.
	anl	a,#7		; 0260   54 07      T.
	cjne	a,#6,X02bf	; 0262   b4 06 5a   4.Z
	push	dpl		; 0265   c0 82      @.
	push	dph		; 0267   c0 83      @.
	push	psw		; 0269   c0 d0      @P
	mov	psw,#8		; 026b   75 d0 08   uP.
	lcall	X0112		; 026e   12 01 12   ...
	mov	a,#0feh		; 0271   74 fe      t~
X0273:	lcall	X00f4		; 0273   12 00 f4   ..t
	setb	p1.4		; 0276   d2 94      R.
	clr	p1.4		; 0278   c2 94      B.
	djnz	29h,X0273	; 027a   d5 29 f6   U)v
X027d:	jnb	tf0,X027d	; 027d   30 8d fd   0.}
	clr	tf0		; 0280   c2 8d      B.
	setb	p1.4		; 0282   d2 94      R.
	clr	p1.4		; 0284   c2 94      B.
	mov	th0,#0f0h	; 0286   75 8c f0   u.p
	mov	tl0,#0		; 0289   75 8a 00   u..
	inc	29h		; 028c   05 29      .)
	mov	a,29h		; 028e   e5 29      e)
	cjne	a,#0,X027d	; 0290   b4 00 ea   4.j
	lcall	X0112		; 0293   12 01 12   ...
	mov	a,#86h		; 0296   74 86      t.
	pop	psw		; 0298   d0 d0      PP
	pop	dph		; 029a   d0 83      P.
	pop	dpl		; 029c   d0 82      P.
	sjmp	X02a2		; 029e   80 02      ..
;
	mov	a,#80h		; 02a0   74 80      t.
X02a2:	mov	28h,a		; 02a2   f5 28      u(
	sjmp	X02bf		; 02a4   80 19      ..
;
X02a6:	mov	a,28h		; 02a6   e5 28      e(
	mov	@r1,a		; 02a8   f7         w
	inc	r1		; 02a9   09         .
	cjne	r1,#80h,X02af	; 02aa   b9 80 02   9..
	mov	r1,#74h		; 02ad   79 74      yt
X02af:	jb	2fh.3,X02bf	; 02af   20 7b 0d    {.
	jb	2fh.4,X02bf	; 02b2   20 7c 0a    |.
X02b5:	mov	a,r6		; 02b5   ee         n
	rl	a		; 02b6   23         #
	mov	2ch,a		; 02b7   f5 2c      u,
	cjne	r6,#10h,X0250	; 02b9   be 10 94   >..
	mov	2ch,#1		; 02bc   75 2c 01   u,.
X02bf:	pop	dph		; 02bf   d0 83      P.
	pop	dpl		; 02c1   d0 82      P.
	pop	b		; 02c3   d0 f0      Pp
	pop	acc		; 02c5   d0 e0      P`
	pop	psw		; 02c7   d0 d0      PP
	reti			; 02c9   32         2
;
X02ca:	push	psw		; 02ca   c0 d0      @P
	push	acc		; 02cc   c0 e0      @`
	push	b		; 02ce   c0 f0      @p
	push	dpl		; 02d0   c0 82      @.
	push	dph		; 02d2   c0 83      @.
	mov	psw,#8		; 02d4   75 d0 08   uP.
	jnb	ti,X02e0	; 02d7   30 99 06   0..
	clr	ti		; 02da   c2 99      B.
	setb	2fh.7		; 02dc   d2 7f      R.
	sjmp	X02eb		; 02de   80 0b      ..
;
X02e0:	clr	ri		; 02e0   c2 98      B.
	mov	a,sbuf		; 02e2   e5 99      e.
	mov	@r1,a		; 02e4   f7         w
	inc	r1		; 02e5   09         .
	cjne	r1,#74h,X02eb	; 02e6   b9 74 02   9t.
	mov	r1,#30h		; 02e9   79 30      y0
X02eb:	pop	dph		; 02eb   d0 83      P.
	pop	dpl		; 02ed   d0 82      P.
	pop	b		; 02ef   d0 f0      Pp
	pop	acc		; 02f1   d0 e0      P`
	pop	psw		; 02f3   d0 d0      PP
	reti			; 02f5   32         2
;
	org	300h
;
page3:	mov	r7,a		; 0300   ff         .	; data truncated
;
	org	400h
;
page4:	mov	r7,a		; 0400   ff         .	; data truncated
;
	org	500h
;
page5:	mov	r7,a		; 0500   ff         .	; data truncated
;
	org	800h
;
	inc	r5		; 0800   0d         .
;
;	SFR Equates
;
newsfr:	equ	94h
;
;	SFR bit Equates
;
port2_2:	equ	0a2h
;
;	Memory bit Equates
;
bitflag:	equ	12h
;
;	Symbol Equates
;
;  These are symbols from the control
;  file that are referenced in the code.
;
data1:	equ	12h
;
;	Miscellaneous Equates
;
;  These are addresses referenced in the code but
;  which are in the middle of a multibyte instruction
;  or are addresses outside the initialized space.
;
X2000:	equ	2000h
X4000:	equ	4000h
;
	end
;