When I disassemble an Arduino IDE created pjoject I see in the created code ("disassembled code actually"), the it uses IN / OUT instruction on port 0X6F.
Like this (part of disassembled list):
00E3 4FFF SBCI R31,0XFF ; .O
00E4 91A5 LPM R26,Z+ ; ..
00E5 91B4 LPM R27,Z ; ..
00E6 B79F IN R25,0X6F ; ..
00E7 94F8 CLI ; ..
00E8 1161 CPSE R22,R1 ; a.
00E9 C004 RJMP L00EE ; ..
00EA 918C LD R24,X ; ..
00EB 9530 COM R19 ; 0.
00EC 2338 AND R19,R24 ; 8#
00ED C002 RJMP L00F0 ; ..
00EE 91EC L00EE: LD R30,X ; ..
00EF 2B3E OR R19,R30 ; >+
00F0 933C L00F0: ST X,R19 ; <.
00F1 BF9F OUT 0X6F,R25 ; ..
00F2 9508 L00F2: RET
Anyway the ATMEGA328 Datasheet says that port 0x6F is memorymapped and as such should be accessed through LDS/STS instructions. This problem really confuses me. Can anyone give me an explanation ?? Thanks !
in r25, 0x3fandout 0x3f, r25, which is consistent with Mikael Patel's answer. It looks like your disassembler is broken.