        ; ***** GENERADOR DE PATRONES PARA VIDEO *****
        ; VERSION 2.01
        ; GEN201.ASM
        ; (C) M. MAGGI - 30/08/1997

list p=16f84

        ;DEFINICION DE PUERTOS:
        ;PORTB(0): SYNC
        ;PORTB(2): AZUL
        ;PORTB(3): ROJO
        ;PORTB(4): VERDE
        ;NO USAR EL BIT 1 DEL PORTB
        ;PARA LOS PATRONES DE RASTER Y BARRAS EL VIDEO ES ENTRELAZADO
        ;LOS PUNTOS Y EL CROSSHATCH SE HACEN CON VIDEO NO ENTRELAZADO PARA EVITAR EL
        ;"FLICKER"

CBLOCK 0X0C                           ;VARIABLES
  DURHOR,CANTHB1,CANTHB2,BLKLIN,CANTPRE,DUREQU,CANTVER,DURVER,CANTPOS
  TIEMPO,FIELD,CARRY
  WHITE,YELLOW,CYAN,GREEN,MAGEN,RED,BLUE,BLACK,CANTLIN
ENDC

PORTA EQU 5
TRISA EQU 85H
PORTB EQU 6
TRISB EQU 86H
STATUS EQU 3
RP0 EQU 5
BLANCO EQU B'00011101'
AMARIL EQU B'00011001'
CYANO EQU B'00010101'
VERDE EQU B'00010001'
MAGENT EQU B'00001101'
ROJO EQU B'00001001'
AZUL EQU B'00000101'
NEGRO EQU B'00000001'
        ;

  CLRF PORTA                        ;TODOS LOS BITS EN 0
  CLRF PORTB                          ;TODOS LOS BITS EN 0
  BSF STATUS,RP0                  ;SELECCIONA BANCO DE REGISTROS 1
  MOVLW B'11111111'
  MOVWF TRISA                  ;TODOS LOS BITS DEL PUERTO A COMO ENTRADAS
  CLRF TRISB^80H                 ;TODOS LOS BITS DEL PUERTO B COMO SALIDA
  BCF STATUS,RP0                      ;SELECCIONA BANCO DE REGISTROS O
        ;

  MOVLW 0
  MOVWF CARRY                         ;VARIABLE CONTROLAR EL ESTADO DEL CARRY
  RRF CARRY                           ;CARRY FLAG A "0"
  MOVLW B'10101010'
  MOVWF FIELD                         ;CONTROL DEL CAMPO
  LECTURA BTFSS PORTA,3               ;SE LEE EL TECLADO
  GOTO LECT1                          ;SE USAN LOS BITS 2 Y 3 DEL PUERTO A
  BTFSC PORTA,2                       ;FUNCION: BIT3 BIT2
  GOTO INICIO3                        ;BARRAS 0 0
  GOTO INICIO2                        ;RASTER 0 1
  LECT1 BTFSC PORTA,2                 ;CROSSHATCH 1 0
  GOTO INICIO1                        ;PUNTOS 1 1

          ;***** BARRAS DE COLOR *****

INICIO RRF FIELD                      ;CARRY PASA AL BIT 7 DE FIELD, BIT 0 AL CARRY
  MOVLW D'3'                          ;LINEAS SIN VIDEO LUEGO DE LA POSECUALIZACION
  BTFSS FIELD,0                       ;SI ES EL CAMPO 1 SE HACEN SOLO 3 LINEAS
  MOVLW D'4'                          ;4 LINEAS EN EL CAMPO 2
  MOVWF BLKLIN
  MOVLW D'99'
  MOVWF CANTHB1                       ;CANTIDAD DE LINEAS HORIZONTALES EN UN BLOQUE
  MOVLW D'3'
  MOVWF CANTHB2                       ;CANTIDAD DE BLOQUES (3)
  MOVLW 5
  MOVWF CANTPRE                       ;PULSOS DE PREECUALIZACION
  MOVLW 5
  MOVWF CANTVER                       ;PULSOS DE SINCRONISMO VERTICAL
  MOVLW 5
  MOVWF CANTPOS                       ;PULSOS DE POSECUALIZACION

PREEQU
  BCF PORTB,0                         ;DURACION: 2,6µS ABAJO
  MOVLW D'23'
  MOVWF DUREQU
  NOP
  NOP
  NOP
  BSF PORTB,0
LOOP1
  DECFSZ DUREQU                    ;SE COMPLETAN LOS 32µS ARRIBA
  GOTO LOOP1
  NOP
  NOP
  DECFSZ CANTPRE
  GOTO PREEQU
  NOP
VERT
  BCF PORTB,0
  MOVLW D'22'
  MOVWF DURVER
LOOP2
  DECFSZ DURVER
  GOTO LOOP2
  BSF PORTB,0                    ;DURACION: 4.8µS ARRIBA ("SERRATED PULSES")
  MOVLW 2
  MOVWF TIEMPO
TIME
  DECFSZ TIEMPO
  GOTO TIME
  NOP
  DECFSZ CANTVER
  GOTO VERT
  NOP
POSEQU
  BCF PORTB,0
  MOVLW D'23'
  MOVWF DUREQU
  NOP
  NOP
  NOP
  BSF PORTB,0
LOOP3
  DECFSZ DUREQU
  GOTO LOOP3
  NOP
  NOP
  DECFSZ CANTPOS
  GOTO POSEQU
  NOP

                   ;SE EMPIEZAN A BARRER LAS LINEAS HORIZONTALES
                 ;LA PRIMERA LINEA ES COMPLETA EN EL CAMPO 1, EN TANTO QUE ES SOLO MEDIA LINEA
                   ;EN EL CAMPO 2, Y NO COMIENZA CON UN PULSO DE SINCRONISMO

  RLF PORTB         ;1 O 1/2 LINEA H SEGUN EL CAMPO
  NOP         ;SE PASA EL CARRY AL BIT 0 DEL PUERTO B
  NOP         ;CAMPO 1: 1 LINEA Y PULSO DE SINC (CARRY=0)

  NOP         ;CAMPO 2: 1/2 LINEA SIN PULSO DE SINC (CARRY=1)
  NOP
  NOP
  NOP
  NOP
  MOVLW D'21'         ;TIEMPO PARA 1/2 H (80 CICLOS TOTAL)
  BTFSS PORTB,0         ;SI HAY H SYNC (CAMPO 1) SE AGREGA MAS TIEMPO
  ADDLW D'27'         ;TIEMPO PARA 1 H (160 CICLOS TOTAL)
  MOVWF DURHOR
  BSF PORTB,0
  BTFSS FIELD,0
  GOTO NEXT         ;SE PIERDE 1 CICLO MAS (SOLO 1/2 H)
NEXT
  BCF PORTB,1
  NOP
  LOOP DECFSZ DURHOR
  GOTO LOOP
  NOP

               ;SE HACEN 3 O 4 LINEAS EN BLANCO PARA CUMPLIR CON LAS 625 LINEAS DE LA NORMA N
                     ;SI ES EL CAMPO 1 SE HACEN SOLO 3 LINEAS, YA QUE ANTES SE HIZO 1 DE MAS

HORIZ
  BCF PORTB,0
  MOVLW 2
  MOVWF TIEMPO         ;PIERDO TIEMPO PARA
TIME3
  DECFSZ TIEMPO         ;HACER LOS 4,8µS
  GOTO TIME3
  NOP
  NOP
  MOVLW D'48'
  MOVWF DURHOR
  BSF PORTB,0              ;BIT 0 ALTO
LOOPH3
  DECFSZ DURHOR
  GOTO LOOPH3
  NOP
  DECFSZ BLKLIN
  GOTO HORIZ
  NOP

                      ;SE HACEN 3 BLOQUES DE 99 LINEAS HORIZONTALES
                           ;3*(99+1)=300 LINEAS

HORIZ1
  BCF PORTB,0
  MOVLW 2
  MOVWF TIEMPO         ;PIERDO TIEMPO PARA
TIME1
  DECFSZ TIEMPO         ;HACER LOS 4,8µS
  GOTO TIME1
  NOP
  NOP
  MOVLW D'31'
  MOVWF DURHOR
  BSF PORTB,0              ;BIT 0 ALTO
  NOP
  NOP
  NOP
  MOVLW 5
  MOVWF WHITE
  MOVWF YELLOW
  MOVWF CYAN
  MOVWF GREEN
  MOVWF MAGEN
  MOVWF RED
  MOVWF BLUE
  MOVWF BLACK
  MOVLW BLANCO
  MOVWF PORTB
WHITE1
  DECFSZ WHITE
  GOTO WHITE1
  MOVLW AMARIL
  MOVWF PORTB
YELLO1
  DECFSZ YELLOW
  GOTO YELLO1
  MOVLW CYANO
  MOVWF PORTB
CYAN1
  DECFSZ CYAN
  GOTO CYAN1
  MOVLW VERDE
  MOVWF PORTB
GREEN1
  DECFSZ GREEN
  GOTO GREEN1
  MOVLW MAGENT
  MOVWF PORTB
MAGEN1
  DECFSZ MAGEN
  GOTO MAGEN1
  MOVLW ROJO
  MOVWF PORTB
RED1
  DECFSZ RED
  GOTO RED1
  MOVLW AZUL
  MOVWF PORTB
BLUE1
  DECFSZ BLUE
  GOTO BLUE1
  MOVLW NEGRO
  MOVWF PORTB
BLACK1
  DECFSZ BLACK
  GOTO BLACK1
  NOP
  NOP
  NOP
  NOP
  DECFSZ CANTHB1
  GOTO HORIZ1
  NOP
HORIZ2
  BCF PORTB,0            ;BIT 0 BAJO
  MOVLW 2
  MOVWF TIEMPO         ;PIERDO TIEMPO PARA
TIME2
  DECFSZ TIEMPO         ;HACER LOS 4,8µS
  GOTO TIME2
  MOVLW D'99'
  MOVWF CANTHB1
  MOVLW D'31'
  MOVWF DURHOR
  BSF PORTB,0               ;BIT 0 ALTO
  NOP
  NOP
  NOP
  MOVLW 5
  MOVWF WHITE
  MOVWF YELLOW
  MOVWF CYAN
  MOVWF GREEN
  MOVWF MAGEN
  MOVWF RED
  MOVWF BLUE
  MOVWF BLACK
  MOVLW BLANCO
  MOVWF PORTB
WHITE2
  DECFSZ WHITE
  GOTO WHITE2
  MOVLW AMARIL
  MOVWF PORTB
YELLO2
  DECFSZ YELLOW
  GOTO YELLO2
  MOVLW CYANO
  MOVWF PORTB
CYAN2
  DECFSZ CYAN
  GOTO CYAN2
  MOVLW VERDE
  MOVWF PORTB
GREEN2
  DECFSZ GREEN
  GOTO GREEN2
  MOVLW MAGENT
  MOVWF PORTB
MAGEN2
  DECFSZ MAGEN
  GOTO MAGEN2
  MOVLW ROJO
  MOVWF PORTB
RED2
  DECFSZ RED
  GOTO RED2
  MOVLW AZUL
  MOVWF PORTB
BLUE2
  DECFSZ BLUE
  GOTO BLUE2
  MOVLW NEGRO
  MOVWF PORTB
BLACK2
  DECFSZ BLACK
  GOTO BLACK2
  NOP
  NOP
  NOP
  NOP
  DECFSZ CANTHB2
  GOTO HORIZ1
  NOP

                 ;ESTA ULTIMA LINEA/MEDIA LINEA, LA 305, LA USO PARA CARGAR VARIABLES

  BCF PORTB,0                   ;BIT 0 PASA A NIVEL BAJO
  NOP                          ;PIERDO TIEMPO PARA
  NOP                          ;HACER LOS 4,8µS
  MOVLW 0                 ;NO USAR EL BIT 1 DEL PORTB, BIT 0 = SYNC
  BTFSC FIELD,0
  MOVLW 1
  MOVWF CARRY
  NOP
  MOVLW D'15'
  BTFSC FIELD,0
  ADDLW D'24'
  MOVWF DURHOR
  BSF PORTB,0                  ;BIT 0 PASA A NIVEL ALTO
  BTFSS FIELD,0
  GOTO NEXT1
NEXT1
  NOP
  NOP
LOOPH5
  DECFSZ DURHOR
  GOTO LOOPH5
  RRF CARRY             ;CARRY = 1 SI 1 H, CARRY = 0 SI 1/2 H
  BTFSC PORTA,2
  GOTO LECTURA
  BTFSC PORTA,3
  GOTO LECTURA
  NOP

  NOP
  NOP
  NOP
  NOP
  GOTO INICIO

          ;***** RASTER *****

INICIO1
 RRF FIELD
 MOVLW D'3'
 BTFSS FIELD,0
 MOVLW D'4'
 MOVWF BLKLIN
 MOVLW D'99'
 MOVWF CANTHB1
 MOVLW D'3'
 MOVWF CANTHB2
 MOVLW 5
 MOVWF CANTPRE
 MOVLW 5
 MOVWF CANTVER
 MOVLW 5
 MOVWF CANTPOS

APREEQU
 BCF PORTB,0                              ;DURACION: 2,6µS ABAJO
 MOVLW D'23'
 MOVWF DUREQU
 NOP
 NOP
 NOP
 BSF PORTB,0
ALOOP1
 DECFSZ DUREQU                        ;SE COMPLETAN LOS 32µS ARRIBA
 GOTO ALOOP1
 NOP
 NOP
 DECFSZ CANTPRE
 GOTO APREEQU
 NOP
AVERT
 BCF PORTB,0
 MOVLW D'22'
 MOVWF DURVER
ALOOP2
 DECFSZ DURVER
 GOTO ALOOP2
 BSF PORTB,0                   ;DURACION: 4.8µS ARRIBA ("SERRATED PULSES")
 MOVLW 2
 MOVWF TIEMPO
ATIME
 DECFSZ TIEMPO
 GOTO ATIME
 NOP
 DECFSZ CANTVER
 GOTO AVERT
 NOP
APOSEQU
 BCF PORTB,0
 MOVLW D'23'
 MOVWF DUREQU
 NOP
 NOP
 NOP
 BSF PORTB,0
ALOOP3
 DECFSZ DUREQU
 GOTO ALOOP3
 NOP
 NOP
 DECFSZ CANTPOS
 GOTO APOSEQU
 NOP
 RLF PORTB                          ;1 O 1/2 LINEA H SEGUN EL CAMPO
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 MOVLW D'21'                        ;TIEMPO PARA 1/2 H (80 CICLOS TOTAL)
 BTFSS PORTB,0
 ADDLW D'27'                        ;TIEMPO PARA 1 H (160 CICLOS TOTAL)
 MOVWF DURHOR
 BSF PORTB,0
 BTFSS FIELD,0
 GOTO ANEXT                           ;SE PIERDE 1 CICLO MAS (SOLO 1/2 H)
ANEXT
 BCF PORTB,1
 NOP
ALOOP
 DECFSZ DURHOR
 GOTO ALOOP
 NOP
AHORIZ
 BCF PORTB,0
 MOVLW 2
 MOVWF TIEMPO                              ;PIERDO TIEMPO PARA
ATIME3
 DECFSZ TIEMPO                             ;HACER LOS 4,8µS
GOTO ATIME3
NOP
NOP
MOVLW D'48'
MOVWF DURHOR
BSF PORTB,0                                   ;BIT 0 ALTO
ALOOPH3
 DECFSZ DURHOR
 GOTO ALOOPH3
 NOP
 DECFSZ BLKLIN
 GOTO AHORIZ
 NOP
AHORIZ1
 BCF PORTB,0
 MOVLW 2
 MOVWF TIEMPO                              ;PIERDO TIEMPO PARA
ATIME1
 DECFSZ TIEMPO                             ;HACER LOS 4,8µS
 GOTO ATIME1
 NOP
 NOP
 MOVLW D'44'
 MOVWF DURHOR
 BSF PORTB,0                               ;BIT 0 ALTO
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 MOVLW B'00011101'
 MOVWF PORTB
ALOOPH4
 DECFSZ DURHOR
 GOTO ALOOPH4
 MOVLW B'00000001'
 MOVWF PORTB
 DECFSZ CANTHB1
 GOTO AHORIZ1
 NOP
 BCF PORTB,0
 MOVLW 2
 MOVWF TIEMPO                      ;PIERDO TIEMPO PARA
ATIME2
 DECFSZ TIEMPO                     ;HACER LOS 4,8µS
 GOTO ATIME2
 MOVLW D'99'
 MOVWF CANTHB1
 MOVLW D'44'
 MOVWF DURHOR
 BSF PORTB,0                         ;BIT 0 ALTO
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 MOVLW B'00011101'
 MOVWF PORTB
ALOOPH5
 DECFSZ DURHOR
 GOTO ALOOPH5
 MOVLW B'00000001'
 MOVWF PORTB
 DECFSZ CANTHB2
 GOTO AHORIZ1
 NOP

                       ;ESTA ULTIMA LINEA/MEDIA LINEA, LA 305, LA USO PARA CARGAR VARIABLES

 BCF PORTB,0                       ;BIT 0 PASA A NIVEL BAJO
 NOP                               ;PIERDO TIEMPO PARA
 NOP                               ;HACER LOS 4,8µS
 MOVLW 0                           ;NO USAR EL BIT 1 DEL PORTB, BIT 0 = SYNC
 BTFSC FIELD,0
 MOVLW 1
 MOVWF CARRY
 NOP
 MOVLW D'15'
 BTFSC FIELD,0
 ADDLW D'24'
 MOVWF DURHOR
 BSF PORTB,0                       ;BIT 0 PASA A NIVEL ALTO
BTFSS FIELD,0
 GOTO ANEXT1
 ANEXT1 NOP
 NOP
ALOOPH6
 DECFSZ DURHOR
 GOTO ALOOPH6
 RRF CARRY                         ;CARRY = 1 SI 1 H, CARRY = 0 SI 1/2 H
 BTFSS PORTA,2
 GOTO LECTURA
 BTFSC PORTA,3
 GOTO LECTURA
 NOP
 NOP
 NOP

 NOP
 NOP
 GOTO INICIO1

         ;***** CROSSHATCH *****

INICIO2
 RRF FIELD
 NOP
 NOP
 MOVLW D'4'
 MOVWF BLKLIN
 MOVLW D'28'
 MOVWF CANTHB1
 MOVLW D'10'
 MOVWF CANTHB2
 MOVLW 4
 MOVWF CANTPRE                             ;SOLO 4 PULSOS POR SER VIDEO NO ENTRELAZADO
 MOVLW 5
 MOVWF CANTVER
 MOVLW 5
 MOVWF CANTPOS
 BPREEQU BCF PORTB,0                       ;DURACION: 2,6µS ABAJO
 MOVLW D'23'
 MOVWF DUREQU
 NOP
 NOP
 NOP
 BSF PORTB,0
BLOOP1
 DECFSZ DUREQU                              ;SE COMPLETAN LOS 32µS ARRIBA
 GOTO BLOOP1
 NOP
 NOP
 DECFSZ CANTPRE
 GOTO BPREEQU
 NOP
 BVERT BCF PORTB,0
 MOVLW D'22'
 MOVWF DURVER
BLOOP2
 DECFSZ DURVER
 GOTO BLOOP2
 BSF PORTB,0                       ;DURACION: 4.8µS ARRIBA ("SERRATED PULSES")
 MOVLW 2
 MOVWF TIEMPO
 BTIME DECFSZ TIEMPO
 GOTO BTIME
 NOP
 DECFSZ CANTVER
 GOTO BVERT
 NOP
 BPOSEQU BCF PORTB,0
 MOVLW D'23'
 MOVWF DUREQU
 NOP
 NOP
 NOP
 BSF PORTB,0
 BLOOP3 DECFSZ DUREQU
 GOTO BLOOP3
 NOP
 NOP
 DECFSZ CANTPOS
 GOTO BPOSEQU
 NOP

 NOP                                      ;1/2 LINEA H (NO ENTRELAZADO)
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 MOVLW D'21'                               ;TIEMPO PARA 1/2 H (80 CICLOS TOTAL)
 NOP
 NOP
 MOVWF DURHOR
 NOP
 NOP
 NOP
 NOP
 BCF PORTB,1
 NOP
BLOOP
 DECFSZ DURHOR
 GOTO BLOOP
 NOP
 BHORIZ BCF PORTB,0
 MOVLW 2
 MOVWF TIEMPO                              ;PIERDO TIEMPO PARA
 BTIME3 DECFSZ TIEMPO                      ;HACER LOS 4,8µS
 GOTO BTIME3
 NOP
 NOP
 MOVLW D'48'
 MOVWF DURHOR
 BSF PORTB,0                              ;BIT 0 ALTO
BLOOPH3
 DECFSZ DURHOR
 GOTO BLOOPH3
 NOP
 DECFSZ BLKLIN
 GOTO BHORIZ
 NOP
BHORIZ1
 BCF PORTB,0
 MOVLW 2
 MOVWF TIEMPO                               ;PIERDO TIEMPO PARA
 BTIME1 DECFSZ TIEMPO                       ;HACER LOS 4,8µS
 GOTO BTIME1
 NOP
 NOP
 MOVLW 9
 MOVWF CANTLIN
 BSF PORTB,0                                ;BIT 0 ALTO
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
BLOOPHA
 MOVLW B'00011100'
 ADDWF PORTB
 SUBWF PORTB
 NOP
 MOVLW 2

 MOVWF DURHOR
BLOOPH4
 DECFSZ DURHOR
 GOTO BLOOPH4
 DECFSZ CANTLIN
 GOTO BLOOPHA
 NOP
 MOVLW B'00011100'
 ADDWF PORTB
 SUBWF PORTB
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 DECFSZ CANTHB1
 GOTO BHORIZ1
 NOP
 BCF PORTB,0
 MOVLW 2
 MOVWF TIEMPO                                 ;PIERDO TIEMPO PARA
BTIMEZ
 DECFSZ TIEMPO                                ;HACER LOS 4,8µS
 GOTO BTIMEZ
 NOP
 NOP
 MOVLW D'44'
 MOVWF DURHOR
 BSF PORTB,0                                  ;BIT 0 ALTO
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP
 MOVLW B'00011101'
 MOVWF PORTB
BLOOPHZ
 DECFSZ DURHOR
 GOTO BLOOPHZ
 MOVLW B'00000001'
 MOVWF PORTB
 NOP
 NOP
 NOP
 BCF PORTB,0
 MOVLW 2
 MOVWF TIEMPO                                ;PIERDO TIEMPO PARA
BTIME2
 DECFSZ TIEMPO                               ;HACER LOS 4,8µS
 GOTO BTIME2
 MOVLW D'28'
 MOVWF CANTHB1
 MOVLW D'44'
 MOVWF DURHOR
 BSF PORTB,0                                   ;BIT 0 ALTO
 NOP
 NOP
 NOP
 NOP
 NOP
 NOP

 NOP
 NOP
 NOP
 MOVLW B'00011101'
 MOVWF PORTB
BLOOPH5
 DECFSZ DURHOR
 GOTO BLOOPH5
 MOVLW B'00000001'
 MOVWF PORTB
 DECFSZ CANTHB2
 GOTO BHORIZ1
 NOP

                 ;ESTA ULTIMA MEDIA LINEA, LA 305, LA USO PARA CARGAR VARIABLES

BCF PORTB,0                   ;BIT 0 PASA A NIVEL BAJO
NOP                            ;PIERDO TIEMPO PARA
NOP                           ;HACER LOS 4,8µS
MOVLW 0                   ;NO USAR EL BIT 1 DEL PORTB, BIT 0 = SYNC
BTFSC FIELD,0
MOVLW 1
MOVWF CARRY
NOP
MOVLW D'15'
NOP
NOP
MOVWF DURHOR
BSF PORTB,0                    ;BIT 0 PASA A NIVEL ALTO
NOP
NOP
NOP
NOP
NOP
BLOOPH6 DECFSZ DURHOR
GOTO BLOOPH6
RRF CARRY                   ;CARRY = 1 SI 1 H, CARRY = 0 SI 1/2 H
BTFSC PORTA,2
GOTO LECTURA
BTFSS PORTA,3
GOTO LECTURA
NOP
NOP
NOP
NOP
NOP
GOTO INICIO2

        ;***** PUNTOS *****

INICIO3 RRF FIELD
NOP
NOP
MOVLW D'4'
MOVWF BLKLIN
MOVLW D'28'
MOVWF CANTHB1
MOVLW D'10'
MOVWF CANTHB2
MOVLW 4
MOVWF CANTPRE
MOVLW 5
MOVWF CANTVER
MOVLW 5
MOVWF CANTPOS

CPREEQU BCF PORTB,0         ;DURACION: 2,6µS ABAJO
MOVLW D'23'
MOVWF DUREQU
NOP
NOP
NOP
BSF PORTB,0
CLOOP1 DECFSZ DUREQU         ;SE COMPLETAN LOS 32µS ARRIBA
GOTO CLOOP1
NOP
NOP
DECFSZ CANTPRE
GOTO CPREEQU
NOP
CVERT BCF PORTB,0
MOVLW D'22'
MOVWF DURVER
CLOOP2 DECFSZ DURVER
GOTO CLOOP2
BSF PORTB,0         ;DURACION: 4.8µS ARRIBA ("SERRATED PULSES")
MOVLW 2
MOVWF TIEMPO
CTIME DECFSZ TIEMPO
GOTO CTIME
NOP
DECFSZ CANTVER
GOTO CVERT
NOP
CPOSEQU BCF PORTB,0
MOVLW D'23'
MOVWF DUREQU
NOP
NOP
NOP
BSF PORTB,0
CLOOP3 DECFSZ DUREQU
GOTO CLOOP3
NOP
NOP
DECFSZ CANTPOS
GOTO CPOSEQU
NOP
NOP                         ;1/2 LINEA H
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOVLW D'21'         ;TIEMPO PARA 1/2 H (80 CICLOS TOTAL)
NOP
NOP
MOVWF DURHOR
NOP
NOP
NOP
NOP
BCF PORTB,1
NOP
CLOOP DECFSZ DURHOR
GOTO CLOOP

NOP
CHORIZ BCF PORTB,0
MOVLW 2
MOVWF TIEMPO                  ;PIERDO TIEMPO PARA
CTIME3 DECFSZ TIEMPO          ;HACER LOS 4,8µS
GOTO CTIME3
NOP
NOP
MOVLW D'48'
MOVWF DURHOR
BSF PORTB,0                        ;BIT 0 ALTO
CLOOPH3 DECFSZ DURHOR
GOTO CLOOPH3
NOP
DECFSZ BLKLIN
GOTO CHORIZ
NOP
CHORIZ1 BCF PORTB,0
MOVLW 2
MOVWF TIEMPO                   ;PIERDO TIEMPO PARA
CTIME1 DECFSZ TIEMPO           ;HACER LOS 4,8µS
GOTO CTIME1
NOP
NOP
MOVLW D'48'
MOVWF DURHOR
BSF PORTB,0                   ;BIT 0 ALTO
CLOOPHZ DECFSZ DURHOR
GOTO CLOOPHZ
NOP
DECFSZ CANTHB1
GOTO CHORIZ1
NOP
BCF PORTB,0
MOVLW 2
MOVWF TIEMPO                  ;PIERDO TIEMPO PARA
CTIMEZ DECFSZ TIEMPO           ;HACER LOS 4,8µS
GOTO CTIMEZ
NOP
NOP
MOVLW 9
MOVWF CANTLIN
BSF PORTB,0                     ;BIT 0 ALTO
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLOOPHA MOVLW B'00011100'
ADDWF PORTB
SUBWF PORTB
NOP
MOVLW 2
MOVWF DURHOR
CLOOPH4 DECFSZ DURHOR
GOTO CLOOPH4
DECFSZ CANTLIN

GOTO CLOOPHA
NOP
MOVLW B'00011100'
ADDWF PORTB
SUBWF PORTB
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF PORTB,0
MOVLW 2
MOVWF TIEMPO                 ;PIERDO TIEMPO PARA
CTIME2 DECFSZ TIEMPO         ;HACER LOS 4,8µS
GOTO CTIME2
MOVLW D'28'
MOVWF CANTHB1
MOVLW 9
MOVWF CANTLIN
BSF PORTB,0                        ;BIT 0 ALTO
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLOOPHB MOVLW B'00011100'
ADDWF PORTB
SUBWF PORTB
NOP
MOVLW 2
MOVWF DURHOR
CLOOPH5 DECFSZ DURHOR
GOTO CLOOPH5
DECFSZ CANTLIN
GOTO CLOOPHB
NOP
MOVLW B'00011100'
ADDWF PORTB
SUBWF PORTB
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ CANTHB2
GOTO CHORIZ1
NOP
                      ;ESTA ULTIMA MEDIA LINEA, LA 305, LA USO PARA CARGAR VARIABLES
BCF PORTB,0            ;BIT 0 PASA A NIVEL BAJO
NOP                     ;PIERDO TIEMPO PARA
NOP                        ;HACER LOS 4,8µS
MOVLW 0             ;NO USAR EL BIT 1 DEL PORTB, BIT 0 = SYNC

BTFSC FIELD,0
MOVLW 1
MOVWF CARRY
NOP
MOVLW D'15'
NOP
NOP
MOVWF DURHOR
BSF PORTB,0                 ;BIT 0 PASA A NIVEL ALTO
NOP
NOP
NOP
NOP
NOP
CLOOPH6 DECFSZ DURHOR
GOTO CLOOPH6
RRF CARRY                 ;CARRY = 1 SI 1 H, CARRY = 0 SI 1/2 H
BTFSS PORTA,2
GOTO LECTURA
BTFSS PORTA,3
GOTO LECTURA
NOP
NOP
NOP
NOP
NOP
GOTO INICIO3
END
