; Orange programmer module v3.8 beta
; (c) 2002-2012 CnCLab
; Atmel AVR Tiny

;CHIP=ATtiny11 HV,1K,ATTIN12h.hpl
;AREA=FLASH,1K,0,0

; High-voltage (12V) Serial programming mode
; primary tested


SOCKET=0 ;
OPTIONS=f,   ;FLASH: skip blank

INFO="PIC-AVR Adapter"

PINO=SDIN, 2,5   ;PB0
PINO=SIIN, 1,6   ;PB1
PINO=SDOUT,0,7   ;PB2
PINO=SCK,  12,2  ;PB3 !
PINO=PB5VPP,5,1  ;RESET
PINI=SDOUT,0,7

PINO=GND,255,4
PINO=VCC,254,8


R8=Fuses,B8
R9=Lock,L,All,Prog,Off
R10=CKSEL,L,"000:Ext.Clk","100:Int.RC","101:Ext.RC","110:Ext.LF.Crystal","111:Ext.Resonator",
R11=RSTDISBL,L,"On (Int.Reset),Off (Ext.Reset)"
R12=FSTRT,L,On,Off
CDELAY=1 ; 


[_SCKP]
SCK=1,P=1,SCK=0,P=1

[_DOUT]
R1=0
LOOP=(7,0){SDIN=R0[I],SCK=1,R1[I]=SDOUT,SCK=0}

[_DIN]
R0=0
LOOP=(7,0){SCK=1,R0[I]=SDOUT,SCK=0,P=1}

[_INSTR]
R2=0
SDIN=0,SIIN=0
_SCKP
LOOP=(7,0){
R2[I]=SDOUT
SDIN=R0[I]
SIIN=R1[I]
_SCKP
}
SDIN=0,SIIN=0
_SCKP
_SCKP


[INIT]
SDOUT=Z
PB5VPP=0,SDIN=0,P=1000
LOOP=(5){SCK=P}
SCK=0
P=100
PB5VPP=1
VPP=12000
P=100000


[READ]
$AREA?0{
;R9=0x20            ;program memory area

;Read Flash High and Low Address
R0=00000010B     ;1
R1=01001100B
_INSTR

R0=ADR,R0=/512   ;2        adr l
R1=00011100B
_INSTR

R0=ADR,R0=/2,R0=&0xFF  ;3  adr h
R1=00001100B
_INSTR


;Read Flash
R0=00000000B     ;1
R1=ADR,R1=&1,R1=<<4,R1=|01101000B ;Low or High
_INSTR

R0=00000000B     ;2
R1=01101100B
_INSTR

DATA=R2
}


[WRITE]
$AREA?0{
;R0=0x40 ;program memory

;Write Flash High and Low Address
R0=00010000B     ;1
R1=01001100B
_INSTR

R0=ADR,R0=/512   ;2        adr l
R1=00011100B
_INSTR

R0=ADR,R0=/2,R0=&0xFF  ;3  adr h
R1=00001100B
_INSTR


;Write Flash
R0=DATA     ;1
R1=ADR,R1=&1,R1=<<4,R1=|00101100B ;Low or High
_INSTR

R0=00000000B     ;2
R1=ADR,R1=&1,R1=<<4,R1=|01100100B ;Low or High
_INSTR

R0=00000000B     ;3
R1=ADR,R1=&1,R1=<<4,R1=|01101100B ;Low or High
_INSTR

P=5000 ; min 4ms
}


[WRITEEND]
P=20000





["Read Fuses"]
R0=00000100B     ;1
R1=01001100B
_INSTR

R0=0         ;2
R1=01101000B
_INSTR

R0=0                 ;3
R1=01101100B
_INSTR

R8=R2

R10=0,R11=0,R12=0

;R10=CKSEL,L,"000:Ext.Clk","100:Int.RC","101:Ext.RC","110:Ext.LF.Crystal","111:Ext.Resonator",
R1=R2,R1=&0x7	;R10=CKSEL,L,Ext,Int      
R1?0{R10=0}
R1?1{PRINT=("Undefined CKSEL value 1")}
R1?2{PRINT=("Undefined CKSEL value 2")}
R1?3{PRINT=("Undefined CKSEL value 3")}
R1?4{R10=1}
R1?5{R10=2}
R1?6{R10=3}
R1?7{R10=4}

R11[0]=R8[3]    ;R11=RSTDISBL,L,On,Off    
R12[0]=R8[4]    ;R12=FSTRT,L,On,Off    

SCK=0, PB5VPP=0
GET=("Read Fuses",R8,R10,R11,R12)


["Write Fuses"]
GET=("Write Fuses",R10,R11,R12)
RA?0{EXIT}
R8=0xFF		; unused bits to 1

R8=0	

R10?0{R8=0}     ;R10=CKSEL
R10?1{R8=4}
R10?2{R8=5}
R10?3{R8=6}
R10?4{R8=7}

R8[3]=R11[0]    ;R11=RSTDISBL,L,On,Off
R8[4]=R12[0]    ;R13=FSTRT,L,On,Off       


R0=01000000B     ;1
R1=01001100B
_INSTR

R0=R8	         ;2 fuses
R1=00101100B
_INSTR

R0=0                 ;3
R1=01100100B
_INSTR

R0=0                 ;4
R1=01101100B
_INSTR

P=20000




["Read Lock"]
R0=00000100B     ;1
R1=01001100B
_INSTR

R0=0         ;2
R1=01111000B
_INSTR

R0=0                 ;3
R1=01111100B
_INSTR

SCK=0, PB5VPP=0

R2=/2, R2=&3	; Error in Datasheet???
R9=R2
R9?1{PRINT=("Undefined value - 1"),EXIT}

R2?2{R9=1}
R2?3{R9=2}

GET=("Lock Bits",R9)

["Write Lock"]
R9=0
GET=("Lock Bits",R9)
RA?0{EXIT}
R9?2{R9=3}
R9?1{R9=2}

R0=00100000B     ;1
R1=01001100B
_INSTR

R0=R9,R0=*2	 ;2 
R1=00101100B
_INSTR

R0=0             ;3
R1=01100100B
_INSTR

R0=0             ;4
R1=01101100B
_INSTR

P=20000

[ReadID]
R0=00001000B     ;1
R1=01001100B
_INSTR

R8=0	
R7=0    ;adr
LOOP=(0,2){
R0=R7	         ;2
R1=00001100B
_INSTR

R0=0                 ;3
R1=01101000B
_INSTR

R0=0                 ;4
R1=01101100B
_INSTR

R8=*256
R8=|R2
R7=+1
}

SCK=0, PB5VPP=0

R8?0x1E9004{PRINT=("ID: %06lX - ATTiny11",R8),EXIT}
R8?0x1E9005{PRINT=("ID: %06lX - ATTiny12",R8),EXIT}
R8?0x1E9006{PRINT=("ID: %06lX - ATTiny15",R8),EXIT}
PRINT=("ID: %06lX",R8)



[Erase]
R0=10000000B     ;1
R1=01001100B
_INSTR

R0=0	         ;2 
R1=01100100B
_INSTR

R0=0             ;3
R1=01101100B
_INSTR

P=20000

R0=0             ;4
R1=01001100B
_INSTR

P=50000


[END]
SCK=0, PB5VPP=0
VPP=0
P=10000