;	SUDDIVISIONE DEI REGISTRI IN BANCHI
;	E SUDDIVISIONE DELL'AREA CODICE IN PAGINE
;
;	Programma dimostrativo da testare al simulatore

;	AUTORE: Walter Giocoso
;		http://digilander.iol.it/wgiocoso






        PROCESSOR   16F876
	    __CONFIG    3FF5H
	    RADIX 	    DEC
	    INCLUDE     "P16F876.INC"
	    ERRORLEVEL  -302



       ORG     0x20                    ;area variabili BANCO0 (BANCOVAR)
;#########################


VAR_BANCO0      RES 1





        ORG     0xA0                    ;area variabili BANCO1
;########################


VAR_BANCO1      RES 1





       ORG     70H                      ;area variabili condivisa
;#########################

VAR_BANCO_COND  RES 1






        ORG     0005H                     ;CODICE PAG0
;#########################        


;inizio main **************************************
MAIN
        CALL    BANCO0
        CLRF    VAR_BANCO0
        MOVLW   0xAA
        MOVWF   VAR_BANCO0
        CALL    BANCO1
        CLRF    VAR_BANCO1
        MOVLW   0xF0
        MOVWF   VAR_BANCO1
        MOVLW   12H
        MOVWF   VAR_BANCO_COND

        BCF     PCLATH, 4       ;SWAP PAGINA 1
        BSF     PCLATH, 3       
        CALL    PROC_PAG1

        GOTO    MAIN
;fine main ********************************************




PROC_PAG0
        CALL    BANCO0
        CLRF    VAR_BANCO0
        MOVLW   0xA3
        MOVWF   VAR_BANCO0
        CALL    BANCO1
        CLRF    VAR_BANCO1
        MOVLW   0xF3
        MOVWF   VAR_BANCO1
        MOVLW   18H
        MOVWF   VAR_BANCO_COND
        RETURN




;DEFINIZIONE BANCHI SU PAG0 -------------------------------------------
BANCO0
        BCF         STATUS, RP1
        BCF         STATUS, RP0
        RETURN
BANCO1
        BCF         STATUS, RP1
        BSF         STATUS, RP0
        RETURN



        
        ORG     0800H                    ;CODICE PAG 1
;#########################        
        
        
PROC_PAG1
;        CALL    BANCO0                 ; ERRATO: non posso chiamare una procedura
                                        ;   definita in una pagina diversa
                                        ;   e non posso replicare procedure con lo 
                                        ;   stesso nome nel programma, anche se in 
                                        ;   pagine diverse
        BCF         STATUS, RP1
        BCF         STATUS, RP0
;------------------------------
        CLRF    VAR_BANCO0
        MOVLW   0xA0
        MOVWF   VAR_BANCO0

;        CALL    BANCO1
        BCF         STATUS, RP1
        BSF         STATUS, RP0
;------------------------------
        CLRF    VAR_BANCO1
        MOVLW   0xF1
        MOVWF   VAR_BANCO1
        MOVLW   13H
        MOVWF   VAR_BANCO_COND

        BCF     PCLATH, 4       ;SWAP PAGINA 0
        BCF     PCLATH, 3       
        CALL    PROC_PAG0

        RETURN




        END
