;=======================================================================
; Reassm by Dismas
;=======================================================================


    processor 12F629
    #include <P12F629.INC>
    __config 0x3F8C
;   _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_ON 
;   & _INTRC_OSC_NOCLKOUT 

; RAM-Variable
LRAM_0x20 equ 0x20
LRAM_0x21 equ 0x21
LRAM_0x22 equ 0x22
LRAM_0x23 equ 0x23
LRAM_0x24 equ 0x24
LRAM_0x25 equ 0x25
LRAM_0x26 equ 0x26
LRAM_0x27 equ 0x27

; Program

    Org 0x0000

;   Reset-Vector
    GOTO LADR_0x0034
;-------------------------------------------------
    Org 0x0004
;   Interrupt-Vector
    MOVWF LRAM_0x20
    MOVF STATUS,W
    MOVWF LRAM_0x21
    CLRF PIR1            ; !!Bank!! PIR1 - PIE1
    MOVF LRAM_0x27,F
    BTFSC STATUS,Z
    GOTO LADR_0x000E
    DECFSZ LRAM_0x27,F
    GOTO LADR_0x000E
    GOTO LADR_0x0014
LADR_0x000E
    MOVF LRAM_0x26,F
    BTFSC STATUS,Z
    GOTO LADR_0x0019
    DECFSZ LRAM_0x26,F
    GOTO LADR_0x0019
    GOTO LADR_0x0014
LADR_0x0014
    BCF GPIO,4           ; !!Bank!! GPIO - TRISIO
    BCF GPIO,5           ; !!Bank!! GPIO - TRISIO
    BCF LRAM_0x25,0
    CLRF LRAM_0x27
    CLRF LRAM_0x26
LADR_0x0019
    MOVF LRAM_0x21,W
    MOVWF STATUS
    SWAPF LRAM_0x20,F
    SWAPF LRAM_0x20,W
    RETFIE
LADR_0x001E
    CLRF LRAM_0x27
    RETURN
LADR_0x0020
    MOVLW 0x0C           ;   b'00001100'  d'012'
    MOVWF LRAM_0x27
    RETURN
LADR_0x0023
    BCF LRAM_0x25,0
    BCF GPIO,4           ; !!Bank!! GPIO - TRISIO
    BSF GPIO,5           ; !!Bank!! GPIO - TRISIO
    RETURN
LADR_0x0027
    BCF LRAM_0x25,0
    BCF GPIO,5           ; !!Bank!! GPIO - TRISIO
    BSF GPIO,4           ; !!Bank!! GPIO - TRISIO
    RETURN
LADR_0x002B
    BTFSC LRAM_0x25,0
    RETURN
    BCF GPIO,4           ; !!Bank!! GPIO - TRISIO
    BCF GPIO,5           ; !!Bank!! GPIO - TRISIO
    RETURN
LADR_0x0030
    BSF LRAM_0x25,0
    MOVLW 0x50           ;   b'01010000'  d'080'  "P"
    MOVWF LRAM_0x26
    RETURN
;----------------------------------------------------------
LADR_0x0034
    BCF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    CLRF GPIO            ; !!Bank!! GPIO - TRISIO
    BSF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    CLRF CMCON           ; !!Bank!! CMCON - VRCON
    BSF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0xFF           ;   b'11111111'  d'255'
    MOVWF TMR0           ; !!Bank!! TMR0 - OPTION_REG
    BSF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x0F           ;   b'00001111'  d'015'
    MOVWF GPIO           ; !!Bank!! GPIO - TRISIO
    BSF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x01           ;   b'00000001'  d'001'
    MOVWF PIR1           ; !!Bank!! PIR1 - PIE1
    BCF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x01           ;   b'00000001'  d'001'
    MOVWF T1CON          ; !!Bank!! T1CON - OSCCAL
    BCF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0xC0           ;   b'11000000'  d'192'
    MOVWF INTCON
    BCF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x07           ;   b'00000111'  d'007'
    MOVWF CMCON          ; !!Bank!! CMCON - VRCON
    BSF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    CLRF WPU             ; !!Bank!! Unimplemented - WPU
    BSF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
    CLRF IOCB            ; !!Bank!! Unimplemented - IOCB
    BCF STATUS,RP0       ; !!Bank Register-Bank(0/1)-Select
LADR_0x004F
    CLRWDT
    MOVF GPIO,W          ; !!Bank!! GPIO - TRISIO
    MOVWF LRAM_0x22
    SUBWF LRAM_0x23,W
    BTFSC STATUS,Z
    GOTO LADR_0x004F
    MOVF LRAM_0x22,W
    XORWF LRAM_0x23,W
    MOVWF LRAM_0x24
    MOVF LRAM_0x22,W
    MOVWF LRAM_0x23
    BTFSS LRAM_0x24,3
    GOTO LADR_0x0060
    BTFSC LRAM_0x22,3
    CALL LADR_0x0020
    BTFSS LRAM_0x22,3
    CALL LADR_0x001E
LADR_0x0060
    BTFSS LRAM_0x24,0
    GOTO LADR_0x0066
    BTFSC LRAM_0x22,0
    CALL LADR_0x0023
    BTFSS LRAM_0x22,0
    CALL LADR_0x002B
LADR_0x0066
    BTFSS LRAM_0x24,1
    GOTO LADR_0x006C
    BTFSC LRAM_0x22,1
    CALL LADR_0x0027
    BTFSS LRAM_0x22,1
    CALL LADR_0x002B
LADR_0x006C
    BTFSS LRAM_0x24,2
    GOTO LADR_0x004F
    BTFSC LRAM_0x22,2
    CALL LADR_0x0030
    GOTO LADR_0x004F

    End
