	LIST p=16F628A
	__CONFIG H'3F52'



;special registers

INTCON		equ 0x0B
STATUS		equ 0x03
PORTA		equ 0x05
PORTB		equ 0x06
TRISA		equ 0x85
TRISB		equ 0x86
CMCON		equ 0x1F


;variable

WIRE		equ 0x20
VAR		equ 0x21


;special bits

RP0		equ 0x05


;my bits


NOTOK0		equ 0x00
NOTOK1		equ 0x01
NOTOK2		equ 0x02
NOTOK3		equ 0x03
CROSS0		equ 0x04
CROSS1		equ 0x05
CROSS2		equ 0x06
CROSS3		equ 0x07


	ORG 0x00
	goto Start

	ORG 0x05

Start:

;initialize common things

	clrw
	movwf 0x81
	bcf STATUS, RP0		;bank 0
	clrf INTCON		;interrupt off

;init PORTA
	
	bcf STATUS, RP0
	clrf PORTA

	movlw 0x07
	movwf CMCON		;turn off comparators
	
	bsf STATUS, RP0
	clrf TRISA		;make all A-ports OUT



;init PORTB

	bcf STATUS, RP0
	clrf PORTB

	bsf STATUS, RP0
	movlw 0x0F
	movwf TRISB		; make B-PORT mixed
	


;init variables

	bcf STATUS, RP0		;bank 0
	clrf WIRE		;clear state of wires

;Ready to go	
;block 0


	movlw b'00010000'
	movwf PORTB
	NOP
	btfsc PORTB, 3	
	bsf WIRE, NOTOK0
	btfsc PORTB, 1	
	bsf WIRE, NOTOK0
	btfsc PORTB, 2	
	bsf WIRE, CROSS0

	btfsc PORTB, 0
	btfsc WIRE, CROSS0
	btfsc WIRE, CROSS0
	btfsc INTCON, 0
	bsf WIRE, NOTOK0

	btfss PORTB, 0
	btfss WIRE, CROSS0
	btfss WIRE, CROSS0
	btfsc INTCON, 0
	bsf WIRE, NOTOK0

;block 1


	movlw b'00100000'
	movwf PORTB	
	NOP
	btfsc PORTB, 0	
	bsf WIRE, NOTOK1
	btfsc PORTB, 2	
	bsf WIRE, NOTOK1
	btfsc PORTB, 3	
	bsf WIRE, CROSS1

	btfsc PORTB, 1
	btfsc WIRE, CROSS1
	btfsc WIRE, CROSS1
	btfsc INTCON, 0
	bsf WIRE, NOTOK1

	btfss PORTB, 1
	btfss WIRE, CROSS1
	btfss WIRE, CROSS1
	btfsc INTCON, 0
	bsf WIRE, NOTOK1


;block 2

	movlw b'01000000'
	movwf PORTB
	NOP
	btfsc PORTB, 1	
	bsf WIRE, NOTOK2
	btfsc PORTB, 3	
	bsf WIRE, NOTOK2
	btfsc PORTB, 0	
	bsf WIRE, CROSS2

	btfsc PORTB, 2
	btfsc WIRE, CROSS2
	btfsc WIRE, CROSS2
	btfsc INTCON, 0
	bsf WIRE, NOTOK2

	btfss PORTB, 2
	btfss WIRE, CROSS2
	btfss WIRE, CROSS2
	btfsc INTCON, 0
	bsf WIRE, NOTOK2

;block 3


	movlw b'10000000'
	movwf PORTB
	NOP
	btfsc PORTB, 2	
	bsf WIRE, NOTOK3
	btfsc PORTB, 0	
	bsf WIRE, NOTOK3
	btfsc PORTB, 1	
	bsf WIRE, CROSS3

	btfsc PORTB, 3
	btfsc WIRE, CROSS3
	btfsc WIRE, CROSS3
	btfsc INTCON, 0
	bsf WIRE, NOTOK3

	btfss PORTB, 3
	btfss WIRE, CROSS3
	btfss WIRE, CROSS3
	btfsc INTCON, 0
	bsf WIRE, NOTOK3



;finished checking 0-th wire
;the same way checking wires 1..3
;finally we get WIRE written
;now we can display results
;simply ñopy WIRE to output port



	comf WIRE, 1		;copy inverted WIRE to W
	movf WIRE, 0
	movwf PORTA		;output to the leds!
	clrf PORTB		;stop outputing anything to B




Loop:
	NOP
	GOTO Loop
	End
