;------------------------------------------------------------
; Código assembler generado por Niple V6.6.2
; Proyecto: Encoder rotatorio
; Autor: MARTINS FIDEL
; Fecha: 11/04/2023
; PIC: 12F675
; Velocidad de reloj: Int 4 Mhz
; Descripcion: Para usar no implemento de encoder, fazendo up/down, seja num valor digital, ou numa saida analogica.
;------------------------------------------------------------


 LIST    P=PIC12F675


_INTRC_OSC_NOCLKOUT   equ  0x3FFC
_WDT_OFF              equ  0x3FF7
_PWRTE_ON             equ  0x3FEF
_MCLRE_OFF            equ  0x3FDF
_BODEN_OFF            equ  0x3FBF
_CPD_OFF              equ  0x3FFF
_CP_OFF               equ  0x3FFF

 __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _CPD_OFF & _CP_OFF


;------------------------------------------------------------
;                  Declaración de Registros
;------------------------------------------------------------
w                     equ  0x0000
tmr0                  equ  0x0001
status                equ  0x0003
fsr                   equ  0x0004
gpio                  equ  0x0005
pclath                equ  0x000a
intcon                equ  0x000b
pir1                  equ  0x000c
tmr1l                 equ  0x000e
tmr1h                 equ  0x000f
t1con                 equ  0x0010
cmcon                 equ  0x0019
adcon0                equ  0x001f
_np_w                 equ  0x0020
_np_temp1             equ  0x0021
_np_temp2             equ  0x0022
_np_temp3             equ  0x0023
_np_temp4             equ  0x0024
_np_temp1_int         equ  0x0025
_np_temp2_int         equ  0x0026
_np_banderas          equ  0x002b
_np_banderas2         equ  0x002c
_np_status            equ  0x002e
_np_t0_cint1_h        equ  0x002f
_np_t0_cint1_l        equ  0x0030
_np_t0_cint_h         equ  0x0031
_np_t0_cint_l         equ  0x0032
_np_t0_ini            equ  0x0033
_np_t1_bak            equ  0x0034
_np_t1_cint1_h        equ  0x0035
_np_t1_cint1_l        equ  0x0036
_np_t1_cint_h         equ  0x0037
_np_t1_cint_l         equ  0x0038
_np_t1h_ini           equ  0x0039
_np_t1l_ini           equ  0x003a
_np_t2_bak            equ  0x003b
_np_t3_bak            equ  0x003c
_np_t_bak             equ  0x003d
_np_tiempo            equ  0x003e
_np_tiempo1           equ  0x003f
_np_tiempo2           equ  0x0041
_np_tiempo3           equ  0x0043
_np_timers            equ  0x0046
_t_off                equ  0x0049
_t_on                 equ  0x004a
_t_pisca              equ  0x004b
_t_pisca_2            equ  0x004c
_t_pisca_3            equ  0x004d
opcion                equ  0x0081
trisio                equ  0x0085
pie1                  equ  0x008c
osccal                equ  0x0090
ioc                   equ  0x0096
ansel                 equ  0x009f


;------------------------------------------------------------
;                  Declaración de Bits
;------------------------------------------------------------
adon                  equ  0   ;-
c                     equ  0   ;-
gie                   equ  7   ;-
gp0                   equ  0   ;-
gp1                   equ  1   ;-
gp2                   equ  2   ;-
gp3                   equ  3   ;-
gp4                   equ  4   ;-
gp5                   equ  5   ;-
gpie                  equ  3   ;-
gpif                  equ  0   ;-
intedg                equ  6   ;-
ioc3                  equ  3   ;-
peie                  equ  6   ;-
ps0                   equ  0   ;-
ps1                   equ  1   ;-
ps2                   equ  2   ;-
psa                   equ  3   ;-
rp0                   equ  5   ;-
rp1                   equ  6   ;-
t0cs                  equ  5   ;-
t0ie                  equ  5   ;-
t0if                  equ  2   ;-
t0se                  equ  4   ;-
t1ckps0               equ  4   ;-
t1ckps1               equ  5   ;-
t1sync                equ  2   ;-
tmr1cs                equ  1   ;-
tmr1ie                equ  0   ;-
tmr1if                equ  0   ;-
tmr1on                equ  0   ;-
to                    equ  4   ;-
z                     equ  2   ;-
_pulso                equ  3   ;pulso do rotary
np_maximo             equ  1   ;indicador de valor máximo alcanzado.
reg_a                 equ  6   ;bandera de comparacion de registros a 16 bits
reg_b                 equ  7   ;bandera de comparacion de registros a 16 bits
sub_inte              equ  0   ;bandera de subrrutina cancelada por interrupcion.
tiempo_t0             equ  0   ;bandera de temporizacion por tmr0
tiempo_t1             equ  1   ;bandera de temporizacion por tmr1


;------------------------------------------------------------
;               Declaración de Registros EEPROM
;------------------------------------------------------------


;------------------------------------------------------------
;                        Inicio
;------------------------------------------------------------

   org 0x00
   bsf status,rp0                   ;cambiar a banco 1
   bcf opcion,psa
   goto paso2
   org 0x04
   bcf status,rp0                   ;cambiar a banco 0

   movwf _np_w
   swapf _np_w,1
   movf status,w
   bcf status,rp0                   ;cambiar a banco 0

   movwf _np_status
   bcf status,rp0                   ;cambiar a banco 0

   movf _np_tiempo,w
   movwf _np_t_bak
   movf _np_tiempo1,w
   movwf _np_t1_bak
   movf _np_tiempo2,w
   movwf _np_t2_bak
   movf _np_tiempo3,w
   movwf _np_t3_bak
intes
int_1
   btfss intcon,gpie
   goto int_2
   btfsc intcon,gpif
   goto inte_gp0a5
int_2
   bsf status,rp0                   ;cambiar a banco 1

   btfss pie1,tmr1ie
   goto int_3
   bcf status,rp0                   ;cambiar a banco 0
   btfsc pir1,tmr1if
   goto inte_t1
int_3
   bcf status,rp0                   ;cambiar a banco 0

   btfss intcon,t0ie
   goto salir__intes
   btfsc intcon,t0if
   goto inte_t0
int_4
salir__intes

   bsf _np_banderas2,sub_inte       ;activar la bandera de rutina cancelada por interrupcion
   bcf status,rp0                   ;cambiar a banco 0

   movf _np_t_bak,w
   movwf _np_tiempo
   movf _np_t1_bak,w
   movwf _np_tiempo1
   movf _np_t2_bak,w
   movwf _np_tiempo2
   movf _np_t3_bak,w
   movwf _np_tiempo3
   movf _np_status,w
   movwf status
   swapf _np_w,w
   retfie


   ;------------------------------------------------------------
   ;                      inicio de la interrupción por gp0 a 5
   ;------------------------------------------------------------
inte_gp0a5_salir
   bcf status,rp0                   ;cambiar a banco 0

   bcf intcon,gpif
   goto intes
inte_gp0a5
mudanc_de_estado
   bcf status,rp0                   ;cambiar a banco 0

   btfsc gpio,gp3                   ;si el gp3 = 01
   goto inte_gp0a5_salir
   nop                              ;delay
   nop
   nop
   nop
   nop
   btfsc gpio,gp4                   ;si el gp4 = 01
   goto inte_gp0a516
   bsf _np_banderas,_pulso          ;então sinala pulso
   bcf gpio,gp0                     ;então sinala direita
   btfss _np_banderas,reg_b         ;si el reg_b = 10
   goto inte_gp0a532

   movlw d'20'                      ;se ainda não chegou a zero?
   subwf _t_on,w
   btfss status,c
   goto inte_gp0a537
   bcf _np_banderas,np_maximo       ;desmarca bandeira


   movf _t_on,w
   movwf _np_temp1_int
   movlw d'10'                      ;diminui registro, aumentando o tempo ligado x10
   subwf _np_temp1_int,w
   movwf _t_on

   movlw d'235'                     ;se ainda não estourou, pode aumentar o registro para diminuir o tempo
   subwf _t_off,w
   btfsc status,c
   goto inte_gp0a537


   movlw d'10'                      ;diminui tempo desligado x10
   addwf _t_off,w
   movwf _t_off
inte_gp0a514
   goto inte_gp0a5_salir
inte_gp0a516
   bsf _np_banderas,_pulso          ;então sinala pulso
   bcf gpio,gp1                     ;se não sinala esquerda
   btfss _np_banderas,reg_b         ;si el reg_b = 10
   goto inte_gp0a525

   movlw d'235'                     ;se ainda não chegou a "235"?
   subwf _t_on,w
   btfsc status,c
   goto inte_gp0a531
   bcf _np_banderas,np_maximo       ;desmarca bandeira


   movlw d'10'                      ;aumentar registro, para diminuir o tempo desligado x10
   addwf _t_on,w
   movwf _t_on

   movlw d'20'                      ;se ainda não chegou a zero?
   subwf _t_off,w
   btfss status,c
   goto inte_gp0a531


   movf _t_off,w
   movwf _np_temp1_int
   movlw d'10'                      ;diminuir registro, para aumentar tempo desligado x10
   subwf _np_temp1_int,w
   movwf _t_off
inte_gp0a524
   goto inte_gp0a5_salir
inte_gp0a525

   movlw d'245'                     ;se ainda não chegou a "255"?
   subwf _t_on,w
   btfsc status,c
   goto inte_gp0a530
   bcf _np_banderas,np_maximo       ;desmarca bandeira

   incf _t_on,1

   movlw d'10'                      ;se ainda não chegou a zero?
   subwf _t_off,w
   btfss status,c
   goto inte_gp0a530


   decf _t_off,1                    ;diminuir registro, para aumentar tempo desligado
   goto inte_gp0a5_salir
inte_gp0a530
   bsf _np_banderas,np_maximo       ;assinala bandeira
   goto inte_gp0a5_salir
inte_gp0a532

   movlw d'10'                      ;se ainda não chegou a zero?
   subwf _t_on,w
   btfss status,c
   goto inte_gp0a531
   bcf _np_banderas,np_maximo       ;desmarca bandeira


   decf _t_on,1                     ;diminui registro, aumentando o tempo ligado

   movlw d'245'                     ;se ainda não estourou, pode aumentar o registro para diminuir o tempo
   subwf _t_off,w
   btfsc status,c
   goto inte_gp0a531

   incf _t_off,1
   goto inte_gp0a5_salir
inte_gp0a537
   bsf _np_banderas,np_maximo       ;assinala bandeira
   goto inte_gp0a5_salir
inte_gp0a531
   bsf _np_banderas,np_maximo       ;assinala bandeira
   goto inte_gp0a5_salir

   ;------------------------------------------------------------
   ;                      inicio de la interrupción por tmr0
   ;------------------------------------------------------------
inte_t0_salir
   bcf status,rp0                   ;cambiar a banco 0

   bcf intcon,t0if
   goto intes
inte_t0
   ;bloque inhabilitado
   bcf status,rp0                   ;cambiar a banco 0

   btfsc gpio,gp2                   ;si el gp2 = 01
   goto inte_t07
   bsf gpio,gp2                     ;vira "1"
   movf _t_on,w                     ;tempo ligado
   movwf tmr0
inte_t06
   goto inte_t0_salir
inte_t07
   bcf gpio,gp2                     ;se não vira "0"
   movf _t_off,w                    ;tempo desligado
   movwf tmr0
   goto inte_t0_salir

   ;------------------------------------------------------------
   ;                      inicio de la interrupción por tmr1
   ;------------------------------------------------------------
inte_t1_salir
   bcf status,rp0                   ;cambiar a banco 0

   bcf pir1,tmr1if
   goto intes
inte_t1
   bcf status,rp0                   ;cambiar a banco 0

   movf _np_t1h_ini,w
   movwf tmr1h
   movf _np_t1l_ini,w
   movwf tmr1l
   bcf _np_timers,tiempo_t1
   decfsz _np_t1_cint_l,1
   goto inte_t12_no
   movf _np_t1_cint_h,w
   btfsc status,z
   goto inte_t12_si
   decf _np_t1_cint_h,1
   goto inte_t12_no
inte_t12_si
   bsf _np_timers,tiempo_t1
   movf _np_t1_cint1_l,w
   movwf _np_t1_cint_l
   movf _np_t1_cint1_h,w
   movwf _np_t1_cint_h
inte_t12_no
   btfss _np_timers,tiempo_t1       ;si el tiempo_t1 = 0
   goto inte_t1_salir
   goto inte_t1_salir

;------------------------------------------------------------
;                      programa principal
;------------------------------------------------------------
paso2

   movlw b'10000000'
   bsf status,rp0                   ;cambiar a banco 1

   movwf osccal
   clrf _np_w
   bcf status,rp0                   ;cambiar a banco 0
   clrf _np_temp1
   clrf _np_temp2
   clrf _np_temp3
   clrf _np_temp4
   clrf _np_temp1_int
   clrf _np_temp2_int
   clrf _np_banderas
   clrf _np_banderas2
   clrf _np_status
   clrf _np_t0_cint1_h
   clrf _np_t0_cint1_l
   clrf _np_t0_cint_h
   clrf _np_t0_cint_l
   clrf _np_t0_ini
   clrf _np_t1_bak
   clrf _np_t1_cint1_h
   clrf _np_t1_cint1_l
   clrf _np_t1_cint_h
   clrf _np_t1_cint_l
   clrf _np_t1h_ini
   clrf _np_t1l_ini
   clrf _np_t2_bak
   clrf _np_t3_bak
   clrf _np_t_bak
   clrf _np_tiempo
   clrf _np_tiempo1
   clrf _np_tiempo2
   clrf _np_tiempo3
   clrf _np_timers
   movlw d'128'
   movwf _t_off
   movlw d'127'
   movwf _t_on
   movlw d'255'
   movwf _t_pisca
   movlw d'255'
   movwf _t_pisca_2
   movlw d'04'
   movwf _t_pisca_3
   clrf gpio                        ;configurar el puerto a como xxseesss
   movlw b'00000111'
   movwf cmcon
   bsf status,rp0                   ;cambiar a banco 1
   clrf ansel
   movlw b'00011000'
   movwf trisio
   bcf status,rp0                   ;cambiar a banco 0
   bcf t1con,tmr1cs                 ;origen de la señal de reloj de tmr1
   bcf t1con,t1ckps0                ;tmr1 - configurar preescalado a 4
   bsf t1con,t1ckps1
   clrf tmr1h
   clrf tmr1l
   clrf _np_t1h_ini
   clrf _np_t1l_ini
   movlw .1
   movwf _np_t1_cint_l
   movwf _np_t1_cint1_l
   clrf _np_t1_cint_h
   clrf _np_t1_cint1_h

   clrf tmr0
   bsf status,rp0                   ;cambiar a banco 1
   bcf opcion,psa                   ;asignacion del preescalado al tmr0
   bcf opcion,t0cs                  ;origen de la señal de reloj de tmr0 = reloj interno
   bcf opcion,ps0                   ;configurar preescalado a 2
   bcf opcion,ps1
   bcf opcion,ps2
   movlw .255
   bcf status,rp0                   ;cambiar a banco 0
   movwf tmr0
   movwf _np_t0_ini
   movlw .1
   movwf _np_t0_cint_l
   movwf _np_t0_cint1_l
   clrf _np_t0_cint_h
   clrf _np_t0_cint1_h

   bcf intcon,t0if                  ;limpiar la bandera antes de activarla
   bsf intcon,t0ie                  ;activar interrupción por tmr0.
   bcf pir1,tmr1if                  ;limpiar la bandera antes de activarla
   bsf status,rp0                   ;cambiar a banco 1
   bsf pie1,tmr1ie                  ;activar interrupción por tmr1.
   bcf intcon,gpif                  ;limpiar la bandera antes de activarla
   bsf intcon,gpie                  ;activar interrupción por gp0-5.
   bsf ioc,ioc3                     ;activar interrupción por cambio en pin gp3
   bsf intcon,peie                  ;activar habilitador general de interrupciones por perifericos.
   bsf intcon,gie                   ;activar habilitador general de interrupciones.
   bcf status,rp0                   ;cambiar a banco 0
   bcf t1con,tmr1cs                 ;origen de la señal de reloj de tmr1
   bcf t1con,t1ckps0                ;tmr1 - configurar preescalado a 4
   bsf t1con,t1ckps1
   clrf tmr1h
   clrf tmr1l
   clrf _np_t1h_ini
   clrf _np_t1l_ini
   movlw .1
   movwf _np_t1_cint_l
   movwf _np_t1_cint1_l
   clrf _np_t1_cint_h
   clrf _np_t1_cint1_h

   bcf t1con,tmr1on                 ;desactivar el tmr1

   movlw .2
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bsf gpio,gp0                     ;desliga led pisca

   movlw .80
   call tmp_100_mc                  ;llamada a rutina tmp_100_mc
   bsf gpio,gp1                     ;desliga led pisca

   movlw .80
   call tmp_100_mc                  ;llamada a rutina tmp_100_mc
   bsf gpio,gp2                     ;desliga led pisca
loop
   bcf status,rp0                   ;cambiar a banco 0

   call rutusr_003                  ;llamada a rutina usr_pisca_led
   call rutusr_004                  ;llamada a rutina usr__pisca_led_2
   goto loop
   goto loop


;------------------------------------------------------------
;                  Declaración de Subrutinas
;------------------------------------------------------------

; usr_pisca_led
rutusr_003
   bcf status,rp0                   ;cambiar a banco 0

   decfsz _t_pisca,1
   goto rutusr_003_salir
   decfsz _t_pisca_2,1
   goto rutusr_003_salir
   movlw d'50'                      ;re-carrega tempo
   movwf _t_pisca_2
   btfsc gpio,gp5                   ;si el gp5 = 01
   goto rutusr_003_5
   bsf gpio,gp5                     ;apaga led
   goto rutusr_003_salir
rutusr_003_5
   bcf gpio,gp5                     ;se não, acende led
   goto rutusr_003_salir
rutusr_003_salir

   bcf status,rp0                   ;cambiar a banco 0

   return

; usr__pisca_led_2
rutusr_004
   bcf status,rp0                   ;cambiar a banco 0

   btfsc _np_banderas,np_maximo     ;si el np_maximo = 01
   goto rutusr_004_salir
   btfss _np_banderas,_pulso        ;si el _pulso = 10
   goto rutusr_004_22
checa_x10
   bcf status,rp0                   ;cambiar a banco 0

   btfss _np_banderas,reg_a         ;si el reg_a = 10
   goto rutusr_004_7

   bcf t1con,tmr1on                 ;desactivar el tmr1
   btfss _np_timers,tiempo_t1       ;si el tiempo_t1 = 10
   goto rutusr_004_12
   bsf _np_banderas,reg_b           ;modo x10 ligado

   bsf t1con,tmr1on                 ;activar el tmr1
   movf _np_t1h_ini,w
   movwf tmr1h
   movf _np_t1l_ini,w
   movwf tmr1l
   bcf _np_timers,tiempo_t1
   decfsz _np_t1_cint_l,1
   goto rutusr_004_25_no
   movf _np_t1_cint_h,w
   btfsc status,z
   goto rutusr_004_25_si
   decf _np_t1_cint_h,1
   goto rutusr_004_25_no
rutusr_004_25_si
   bsf _np_timers,tiempo_t1
   movf _np_t1_cint1_l,w
   movwf _np_t1_cint_l
   movf _np_t1_cint1_h,w
   movwf _np_t1_cint_h
rutusr_004_25_no
   bsf _np_banderas,reg_a           ;marca start
   bcf _np_timers,tiempo_t1         ;desmarca "x10"
   goto _piscando
rutusr_004_22
_piscando
   bcf status,rp0                   ;cambiar a banco 0

   btfsc gpio,gp0                   ;si el gp0 = 01
   goto rutusr_004_14
rutusr_004_2
   decfsz _t_pisca_3,1
   goto rutusr_004_salir
   bsf gpio,gp0                     ;apaga led
   bsf gpio,gp1                     ;apaga led
   goto rutusr_004_salir
rutusr_004_14
   btfss gpio,gp1                   ;si el gp1 = 01
   goto rutusr_004_2
   goto rutusr_004_salir
rutusr_004_7

   bsf t1con,tmr1on                 ;activar el tmr1
   movf _np_t1h_ini,w
   movwf tmr1h
   movf _np_t1l_ini,w
   movwf tmr1l
   bcf _np_timers,tiempo_t1
   decfsz _np_t1_cint_l,1
   goto rutusr_004_24_no
   movf _np_t1_cint_h,w
   btfsc status,z
   goto rutusr_004_24_si
   decf _np_t1_cint_h,1
   goto rutusr_004_24_no
rutusr_004_24_si
   bsf _np_timers,tiempo_t1
   movf _np_t1_cint1_l,w
   movwf _np_t1_cint_l
   movf _np_t1_cint1_h,w
   movwf _np_t1_cint_h
rutusr_004_24_no
   bsf _np_banderas,reg_a           ;marca start
   goto _piscando
rutusr_004_12
   bcf _np_banderas,reg_b           ;modo x10 desligado
   bcf _np_banderas,reg_a           ;desmarca start
   goto _piscando
rutusr_004_salir

   bcf status,rp0                   ;cambiar a banco 0

   return

tmp_1_mgc
   bcf status,rp0                   ;cambiar a banco 0

   movwf _np_tiempo
   goto tmp_1_mgc_1
tmp_1_mgc_bucle2
   nop
   nop
   nop
   nop
   nop
   nop
   nop
tmp_1_mgc_1
   movlw .10
   movwf _np_tiempo1
tmp_1_mgc_bucle1
   nop
   nop
   movlw .99
   movwf _np_tiempo2
tmp_1_mgc_bucle0

   nop
   nop
   nop
   movlw .200
   movwf _np_tiempo3
tmp_1_mgc_bucle
   nop
   nop
   decfsz _np_tiempo3,1
   goto tmp_1_mgc_bucle
   nop
   nop
   nop
   decfsz _np_tiempo2,1
   goto tmp_1_mgc_bucle0
   nop
   nop
   nop
   decfsz _np_tiempo1,1
   goto tmp_1_mgc_bucle1
   decfsz _np_tiempo,1
   goto tmp_1_mgc_bucle2
   bcf status,rp0                   ;cambiar a banco 0

   return

tmp_100_mc
   bcf status,rp0                   ;cambiar a banco 0

   movwf _np_tiempo
   goto tmp_100_mc_1
tmp_100_mc_bucle2

tmp_100_mc_1
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   movlw .22
   movwf _np_tiempo1
tmp_100_mc_bucle1
   nop
   movlw .112
   movwf _np_tiempo2
tmp_100_mc_bucle
   nop
   decfsz _np_tiempo2,1
   goto tmp_100_mc_bucle
   decfsz _np_tiempo1,1
   goto tmp_100_mc_bucle1
   nop
   decfsz _np_tiempo,1
   goto tmp_100_mc_bucle2
   bcf status,rp0                   ;cambiar a banco 0

   return


;------------------------------------------------------------
;                  DATOS EN MEMORIA EEPROM
;------------------------------------------------------------
   org  0x2100
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff

 End