Muy bien ya lo tengo. Era solo cosa de estudiar un poco el codigo que PARSIC genera. Este es el codigo que genera PARSIC de forma directa:
; Source created with Parsic Version 3.x
; at : 12/06/2010 03:05:31 a.m.
; Project File : C:\Parsic\samples\samp01.PIC
; Project Version : 1.0.1
; Created : 12/06/2010 03:01:57 a.m.
; Last change : 12/06/2010 03:05:29 a.m.
PROCESSOR 16F84A
INCLUDE P16F84A.INC
RADIX DEC
__IDLOCS H'0100'
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; Diverses
ZERO EQU Z ; ZERO-Flag
CARRY EQU C ; CARRY-Flag
; Variable
SYS_WSAV = 12 ; located in Bank 0, 1
SYS_SSAV = 13 ; located in Bank 0, 1
DELAY = 14 ; located in Bank 0, 1
DELAY_HI = 15 ; located in Bank 0, 1
RAM = 16 ; located in Bank 0, 1
ERRORLEVEL -302 ; disable warning (Bankswitching)
ERRORLEVEL -306 ; disable warning (Pageswitching)
;****************************************
;Programmanfang
;****************************************
ORG 0
CLRF STATUS ; switch to RAM-Bank 0
GOTO SYS_INIT
NOP
NOP
;****************************************
;Interrupt-Adress
;****************************************
MOVWF SYS_WSAV ; save register
SWAPF STATUS,W
CLRF STATUS ; bank 0
MOVWF SYS_SSAV
BCF INTCON,T0IF ; Interrupt quitieren
INCFSZ DELAY,F
GOTO SYS_INT_LABEL_0
INCF DELAY_HI,F
SYS_INT_LABEL_0
EXITINT
SWAPF SYS_SSAV,W ; Register zurück
MOVWF STATUS
SWAPF SYS_WSAV,F
SWAPF SYS_WSAV,W
RETFIE
;****************************************
; Subroutines
;****************************************
;****************************************
;Initialisierung
;****************************************
SYS_INIT
MOVLW B'00100000'
MOVWF INTCON
; Set output before direction
BCF STATUS,RP0 ; Bank 0
MOVLW B'00000000'
MOVWF PORTA
MOVLW B'00000000'
MOVWF PORTB
MOVLW 15
BSF STATUS,RP0 ; Bank 1
MOVWF OPTION_REG
; Richtung setzen
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'11111110'
MOVWF TRISB
; init vars
; Clear RAM
MOVLW 12
MOVWF FSR
CR1
CLRF INDF
INCF FSR,F
MOVFW FSR
SUBLW 80
BTFSS STATUS,ZERO
GOTO CR1
BCF STATUS,RP0 ; Bank 0
CLRF TMR0
BCF INTCON,T0IF
BSF INTCON,GIE ; Interrupt freigeben
;**********************************
;******* Haupt-Programm ***********
;**********************************
MAIN
;***************************************************
; Timer -> DELAY
;***************************************************
MOVLW 3 ; Test auf >=
SUBWF DELAY_HI,W ;F-W -> W
BTFSS STATUS,ZERO
GOTO LABEL_DELAY_CHECK
MOVLW 209
SUBWF DELAY,W ;F-W -> W
LABEL_DELAY_CHECK
BTFSS STATUS,CARRY
GOTO LABEL_DELAY_ENDE
LABEL_DELAY_RESET
MOVLW 3 ; Test auf >=
SUBWF DELAY_HI,F ;F-W -> F
MOVLW 209
SUBWF DELAY,F ;F-W -> F
BTFSS STATUS,CARRY
DECF DELAY_HI,F
LABEL_DELAY_SET ; toggel output
BCF STATUS,RP0 ; Bank 0
BTFSC PORTB,0
GOTO LABEL_DELAY_CLR
BSF PORTB,0
GOTO LABEL_DELAY_ENDE
LABEL_DELAY_CLR
BCF PORTB,0
LABEL_DELAY_ENDE
;****************************************
GOTO MAIN
END
Estas son las lineas que hay que agregar para que el Screamer Bootloader pueda cargar el codigo dentro del PIC:
; Source created with Parsic Version 3.x
; at : 04/05/2012 06:30:29 p.m.
; Project File : C:\Parsic\samples\blink.PIC
; Project Version : 1.0.0
; Created : 04/05/2012 06:29:57 p.m.
; Last change : 04/05/2012 06:30:25 p.m.
PROCESSOR 16F877
INCLUDE P16F877.INC
RADIX DEC
__IDLOCS H'0100'
__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _BODEN_OFF & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF
; Diverses
ZERO EQU Z ; ZERO-Flag
CARRY EQU C ; CARRY-Flag
; Variable
TR1 = 32 ; located in Bank 0
TR1_HI = 33 ; located in Bank 0
RAM = 34 ; located in Bank 0
SYS_WSAV = 115 ; located in Bank 0, 1, 2, 3
SYS_SSAV = 116 ; located in Bank 0, 1, 2, 3
SYS_PSAV = 117 ; located in Bank 0, 1, 2, 3
ERRORLEVEL -302 ; disable warning (Bankswitching)
ERRORLEVEL -306 ; disable warning (Pageswitching)
;****************************************
;Programmanfang
;****************************************
[b]org 0x00
goto inicio
org 0x04
goto rsi
org 0x05
inicio:[/b] CLRF STATUS ; switch to RAM-Bank 0
MOVLW HIGH SYS_INIT ; set page
MOVWF PCLATH
GOTO SYS_INIT
;****************************************
;Interrupt-Adress
;****************************************
[b]rsi:[/b] MOVWF SYS_WSAV ; save register
SWAPF STATUS,W
CLRF STATUS ; bank 0
MOVWF SYS_SSAV
MOVFW PCLATH
MOVWF SYS_PSAV
CLRF PCLATH
BCF INTCON,T0IF ; Interrupt quitieren
BCF STATUS,RP0 ; Bank 0
BCF STATUS,RP1 ; Bank 0
INCFSZ TR1,F
GOTO SYS_INT_LABEL_0
INCF TR1_HI,F
SYS_INT_LABEL_0
EXITINT
MOVFW SYS_PSAV
MOVWF PCLATH
SWAPF SYS_SSAV,W ; Register zurück
MOVWF STATUS
SWAPF SYS_WSAV,F
SWAPF SYS_WSAV,W
RETFIE
;****************************************
; Subroutines
;****************************************
;****************************************
;Initialisierung
;****************************************
SYS_INIT
MOVLW B'00100000'
MOVWF INTCON
; Set output before direction
BCF STATUS,RP0 ; Bank 0
BCF STATUS,RP1 ; Bank 0
MOVLW B'00000000'
MOVWF PORTA
MOVLW B'00000000'
MOVWF PORTB
MOVLW B'00000000'
MOVWF PORTC
MOVLW B'00000000'
MOVWF PORTD
MOVLW B'00000000'
MOVWF PORTE
MOVLW 143
BSF STATUS,RP0 ; Bank 1
MOVWF OPTION_REG
MOVLW 6 ; all Digital
MOVWF ADCON1
; Richtung setzen
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'11111110'
MOVWF TRISB
MOVLW B'11111111'
MOVWF TRISC
MOVLW B'11111111'
MOVWF TRISD
MOVLW B'00000111'
MOVWF TRISE
; init vars
; Clear RAM
BCF STATUS,IRP
MOVLW 32
MOVWF FSR
CR1
CLRF INDF
INCF FSR,F
BTFSS FSR,7
GOTO CR1
BSF FSR,5
CR2
CLRF INDF
INCF FSR,F
MOVLW H'F0'
SUBWF FSR,W
BTFSS STATUS,ZERO
GOTO CR2
BSF STATUS,IRP
MOVLW 16
MOVWF FSR
CR3
CLRF INDF
INCF FSR,F
MOVLW H'70'
SUBWF FSR,W
BTFSS STATUS,ZERO
GOTO CR3
MOVLW 144
MOVWF FSR
CR4
CLRF INDF
INCF FSR,F
MOVLW H'F0'
SUBWF FSR,W
BTFSS STATUS,ZERO
GOTO CR4
BCF STATUS,RP0 ; Bank 0
BCF STATUS,RP1 ; Bank 0
CLRF TMR0
BCF INTCON,T0IF
BSF INTCON,GIE ; Interrupt freigeben
;**********************************
;******* Haupt-Programm ***********
;**********************************
MAIN
;***************************************************
; Timer -> TR1
;***************************************************
MOVLW 1 ; Test auf >=
BCF STATUS,RP0 ; Bank 0
BCF STATUS,RP1 ; Bank 0
SUBWF TR1_HI,W ;F-W -> W
BTFSS STATUS,ZERO
GOTO LABEL_TR1_CHECK
MOVLW 232
SUBWF TR1,W ;F-W -> W
LABEL_TR1_CHECK
BTFSS STATUS,CARRY
GOTO LABEL_TR1_ENDE
LABEL_TR1_RESET
MOVLW 1 ; Test auf >=
SUBWF TR1_HI,F ;F-W -> F
MOVLW 232
SUBWF TR1,F ;F-W -> F
BTFSS STATUS,CARRY
DECF TR1_HI,F
LABEL_TR1_SET ; toggel output
BTFSC PORTB,0
GOTO LABEL_TR1_CLR
BSF PORTB,0
GOTO LABEL_TR1_ENDE
LABEL_TR1_CLR
BCF PORTB,0
LABEL_TR1_ENDE
;****************************************
GOTO MAIN
END
Espero que le sirva a alguien. Por cierto, tengo algunos ejemplillos de PARSIC que me gustaria compartir, asi que tan pronto me organize abrire un tema nuevo para tal fin. Hasta pronto.