/*
 * Blocker.asm
 *
 *  Created: 10/10/2012 16:41:59
 *   Author: Administrador
 */ 


;---------------------------------------
	.cseg
	.org	0x0000
;---------------------------------------
; byte constants:

.equ	k00	= 0x00	;
.equ	k01	= 0x01	;
.equ	k02	= 0x02	;
.equ	k04	= 0x04	;
.equ	k08	= 0x08	;
.equ	k0C	= 0x0C	;
.equ	k0E	= 0x0E	;
.equ	k0F	= 0x0F	;
.equ	k11	= 0x11	;
.equ	k14	= 0x14	;
.equ	k18	= 0x18	;
.equ	k1B	= 0x1B	;
.equ	k1E	= 0x1E	;
.equ	k1F	= 0x1F	;
.equ	k20	= 0x20	; ' '
.equ	k25	= 0x25	; '%'
.equ	k26	= 0x26	; '&'
.equ	k2E	= 0x2E	; '.'
.equ	k31	= 0x31	; '1'
.equ	k32	= 0x32	; '2'
.equ	k3E	= 0x3E	; '>'
.equ	k3F	= 0x3F	; '?'
.equ	k42	= 0x42	; 'B'
.equ	k46	= 0x46	; 'F'
.equ	k48	= 0x48	; 'H'
.equ	k4D	= 0x4D	; 'M'
.equ	k52	= 0x52	; 'R'
.equ	k58	= 0x58	; 'X'
.equ	k5B	= 0x5B	; '['
.equ	k5C	= 0x5C	; '\'
.equ	k5E	= 0x5E	; '^'
.equ	k60	= 0x60	; '`'
.equ	k61	= 0x61	; 'a'
.equ	k64	= 0x64	; 'd'
.equ	k65	= 0x65	; 'e'
.equ	k66	= 0x66	; 'f'
.equ	k77	= 0x77	; 'w'
.equ	k7F	= 0x7F	; ''
.equ	k80	= 0x80	;
.equ	k82	= 0x82	;
.equ	k87	= 0x87	;
.equ	k90	= 0x90	;
.equ	k98	= 0x98	;
.equ	kA0	= 0xA0	; ' '
.equ	kC2	= 0xC2	; 'Â'
.equ	kDF	= 0xDF	; 'ß'
.equ	kE0	= 0xE0	; 'à'
.equ	kFF	= 0xFF	; 'ÿ'
;
; io register addresses:
;
.equ	p10	= 0x10
.equ	p11	= 0x11
.equ	p12	= 0x12
.equ	p3D	= 0x3D
;
; pointer offsets:
;
;
; bit numbers
;
.equ	b0	= 0x00
.equ	b1	= 0x01
.equ	b2	= 0x02
.equ	b3	= 0x03
.equ	b4	= 0x04
.equ	b5	= 0x05
.equ	b6	= 0x06
.equ	b7	= 0x07
;---------------------------------------
;
L0000:
	rjmp	_reset	; L0016
	subi	r20,k87
	cpi	r19,k82
	sbci	r18,k7F
	cpi	r21,k48
	and	r3,r6
	ori	r20,kC2
	ori	r22,k3F
	ori	r22,k5B
	and	r7,r2
	andi	r23,k77
	mov	r7,r23
	andi	r22,k46
	ori	r22,k31
	ori	r22,k98
	ori	r22,k5C
	ori	r18,k3E
	ori	r22,kDF
	or	r2,r0
	cpi	r21,k26
	cpi	r18,k0E
	or	r19,r0
;
_reset:
; L0016:
	cli
	ldi	r17,kDF
	out	p3D,r17
	cbi	p11,b0
	cbi	p11,b2
	cbi	p11,b4
	sbi	p11,b5
	sbi	p12,b5
	ldi	r17,k00
	ldi	r29,k00
	ldi	r28,k60
L0021:
	st	Y+,r17
	cpi	r28,kE0
	brcs	L0021
	cpi	r29,k00
	brcs	L0021
L0026:
	ldi	r26,k60
	ldi	r18,k04
L0028:
	rcall	L00C2
	cpi	r16,k48
	brne	L0028
	st	X+,r16
L002C:
	rcall	L014D
	rcall	L00C2
	st	X+,r16
	dec	r18
	brne	L002C
	ldi	r26,k61
	ld	r17,X+
	rcall	L00C2
	cp	r17,r16
	brne	L0026
	ldi	r26,k65
	st	X+,r16
L0038:
	sbis	p10,b0
	rjmp	L0038
	ldi	r26,k61
	ld	r17,X+
	cpi	r17,k42
	breq	L004D
	cpi	r17,k5E
	breq	L004F
	cpi	r17,k58
	breq	L004E
	ldi	r26,k64
	ld	r17,X+
L0044:
	cpi	r17,k00
	breq	L0026
L0046:
	rcall	L00C2
	rcall	L0151
	cli
	cli
	dec	r17
	brne	L0046
	rjmp	L0026
L004D:
	rjmp	L0075
L004E:
	rjmp	L0050
L004F:
	rjmp	L0062
L0050:
	ldi	r17,k0C
L0051:
	rcall	L00C2
	rcall	L014D
	dec	r17
	brne	L0051
L0055:
	sbis	p10,b0
	rjmp	L0055
L0057:
	sbic	p10,b0
	rjmp	L0057
	sbi	p11,b5
	cbi	p12,b5
	ldi	r16,k01
	rcall	L00F2
	ldi	r17,k1B
	rcall	L014E
	sbi	p11,b5
	sbi	p12,b5
	rjmp	L0026
L0062:
	ldi	r26,k64
	ld	r17,X+
	cpi	r17,k11
	breq	L0067
	rjmp	L0044
L0067:
	ldi	r17,k11
L0068:
	sbis	p10,b0
	rjmp	L0068
L006A:
	sbic	p10,b0
	rjmp	L006A
	sbi	p11,b5
	cbi	p12,b5
	ldi	r16,k00
	rcall	L00F2
	sbi	p11,b5
	sbi	p12,b5
	dec	r17
	brne	L0068
	rjmp	L0026
L0075:
	ldi	r26,k64
	ld	r17,X+
	cpi	r17,k66
	brne	L007A
	rjmp	L0026
L007A:
	sbi	p11,b5
	sbi	p12,b5
	rcall	L014D
	rcall	L00C2
	dec	r17
	cpi	r16,k90
	breq	L0082
	rjmp	L0026
L0082:
	rcall	L014D
	rcall	L00C2
	dec	r17
	rcall	L014D
	rcall	L00C2
	dec	r17
	cpi	r16,k42
	breq	L008D
	cpi	r16,k52
	breq	L008D
	rjmp	L0026
L008D:
	rcall	L014D
	rcall	L00C2
	dec	r17
	cpi	r17,k02
	brne	L008D
	rcall	L014D
L0093:
	sbis	p10,b0
	rjmp	L0093
L0095:
	sbic	p10,b0
	rjmp	L0095
	ldi	r25,k1E
	rcall	L014E
	sbi	p11,b5
	cbi	p12,b5
	sbi	p11,b4
	sbi	p12,b4
	ldi	r25,k82
	rcall	L014E
	ldi	r25,k82
	rcall	L014E
	sbi	p12,b4
	cbi	p11,b4
	sbi	p11,b5
	sbi	p12,b5
	ldi	r25,k0E
	rcall	L014E
L00A7:
	sbis	p10,b0
	rjmp	L00A7
	rcall	L014D
	dec	r17
	brne	L0093
L00AC:
	sbis	p10,b0
	rjmp	L00AC
L00AE:
	sbic	p10,b0
	rjmp	L00AE
	sbi	p11,b5
	cbi	p12,b5
	ldi	r16,k90
	rcall	L00F2
	sbi	p11,b5
	sbi	p12,b5
L00B6:
	sbis	p10,b0
	rjmp	L00B6
L00B8:
	sbic	p10,b0
	rjmp	L00B8
	sbi	p11,b5
	cbi	p12,b5
	ldi	r16,kA0
	rcall	L00F2
	sbi	p11,b5
	sbi	p12,b5
	cli
	rjmp	L0026
L00C2:
	sbis	p10,b0
	rjmp	L00C2
L00C4:
	sbic	p10,b0
	rjmp	L00C4
	ldi	r25,k0F
L00C7:
	dec	r25
	brne	L00C7
	nop
	ldi	r16,k01
	ldi	r25,k1F
L00CC:
	dec	r25
	brne	L00CC
	in	r24,p10
	lsr	r24
	rol	r16
	ldi	r25,k1E
	brcc	L00CC
	com	r16
	nop
	ldi	r25,k2E
L00D6:
	dec	r25
	brne	L00D6
L00D8:
	sbis	p10,b0
	rjmp	L00D8
	ret
; pc=0xDB(0x1B6)
;
L00DB:
	sbis	p10,b4
	rjmp	L00DB
L00DD:
	sbic	p10,b4
	rjmp	L00DD
	ldi	r25,k02
L00E0:
	dec	r25
	brne	L00E0
	ldi	r16,k01
L00E3:
	ldi	r25,k20
L00E4:
	dec	r25
	brne	L00E4
	clc
	sbis	p10,b4
	sec
	rol	r16
	brcc	L00E3
	nop
	ldi	r25,k80
L00ED:
	dec	r25
	brne	L00ED
L00EF:
	sbis	p10,b4
	rjmp	L00EF
	ret
; pc=0xF2(0x1E4)
;
L00F2:
	sbis	p10,b0
	rjmp	L00F2
	sbi	p11,b0
	cbi	p12,b0
	ldi	r18,k08
	clr	r24
	ldi	r25,k14
L00F9:
	rcall	L014E
	nop
	rol	r16
	brcs	L0120
	nop
	sbi	p12,b0
	rjmp	L0100
L0100:
	adc	r24,r25
	andi	r24,k01
	dec	r18
	ldi	r25,k18
	nop
	brne	L00F9
	rcall	L014E
	rjmp	L0108
L0108:
	ror	r24
	brcs	L011E
	nop
	sbi	p12,b0
	rjmp	L010D
L010D:
	ldi	r25,k1B
	rcall	L014E
	nop
	sbi	p12,b0
	ldi	r25,k25
	rcall	L014E
	nop
L0114:
	sbis	p10,b4
	rjmp	L0114
L0116:
	sbic	p10,b4
	rjmp	L0116
	sbi	p11,b5
	sbi	p12,b5
	rjmp	L011B
L011B:
	cbi	p11,b0
	cbi	p12,b0
	ret
; pc=0x11E(0x23C)
;
L011E:
	cbi	p12,b0
	rjmp	L010D
L0120:
	cbi	p12,b0
	rjmp	L0100
L0122:
	sbis	p10,b4
	rjmp	L0122
	sbi	p11,b4
	ldi	r25,k04
	rcall	L014E
	rjmp	L0128
L0128:
	cbi	p12,b4
	rjmp	L012A
L012A:
	rjmp	L012B
L012B:
	nop
	ldi	r18,k08
	clr	r24
L012E:
	ldi	r25,k18
	rcall	L014E
	nop
	rol	r16
	brcs	L014B
	nop
	sbi	p12,b4
	rjmp	L0136
L0136:
	adc	r24,r25
	andi	r24,k01
	dec	r18
	brne	L012E
	ldi	r25,k18
	rcall	L014E
	rjmp	L013D
L013D:
	ror	r24
	brcs	L0149
	nop
	sbi	p12,b4
	rjmp	L0142
L0142:
	ldi	r25,k32
	rcall	L014E
	nop
	rjmp	L0146
L0146:
	sbi	p12,b4
	cbi	p11,b4
	ret
; pc=0x149(0x292)
;
L0149:
	cbi	p12,b4
	rjmp	L0142
L014B:
	cbi	p12,b4
	rjmp	L0136
L014D:
	ldi	r25,k4D
L014E:
	dec	r25
	brne	L014E
	ret
; pc=0x151(0x2A2)
;
L0151:
	ldi	r25,k80
	rjmp	L014E
	ldi	r22,kFF
	ldi	r24,k00
	lsr	r22
	brcs	L0157
L0157:
	lsr	r22
	brcc	L015B
	nop
	rjmp	L015B
L015B:
	inc	r22
	inc	r24
L015D:
	nop
	dec	r22
	brne	L015D
	nop
	ldi	r22,k3F
	dec	r24
	brne	L015D
	ret
; pc=0x164(0x2C8)
;
L0164:
	rjmp	L0164
; pc=0x165(0x2CA)
;
; last flash byte address = 0x02C9
; last flash word address = 0x0164
;---------------------------------------
; Code seems not to use any RAM,
; guess it's for an AVR tiny.
;---------------------------------------
;;<eof>
