⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.s90

📁 Flashfile system for avr, ICC, IAR compiled with examples. very cool
💻 S90
📖 第 1 页 / 共 5 页
字号:
	ADIW	R25 : R24,1
??_FF_read_disp_2:
	CPI	R24,0
	LDI	R16,2
	CPC	R25,R16
	BRCS	??_FF_read_disp_3
??_FF_read_disp_1:
	LD	R24,Y+
	LD	R25,Y+
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc void cf_pulse_wr()
cf_pulse_wr:
??cf_pulse_wr_0:
	SBIS	0x13,0x03
	RJMP	??cf_pulse_wr_0
	LDS	R16,101
	ANDI	R16,0xFE
	STS	101,R16
	LDS	R16,101
	ORI	R16,0x01
	STS	101,R16
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc void cf_cmd(unsigned char, unsigned char)
cf_cmd:
	OUT	0x1B,R16
	OUT	0x18,R17
	RCALL	cf_pulse_wr
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc void cf_addr_setup(unsigned long)
cf_addr_setup:
	SBIW	R29 : R28,4
	ST	Y,R16
	STD	Y+1,R17
	STD	Y+2,R18
	STD	Y+3,R19
	LDD	R16,Y+3
	ANDI	R16,0x0F
	STD	Y+3,R16
	LDD	R16,Y+3
	ORI	R16,0xE0
	STD	Y+3,R16
	LDI	R17,6
	LDD	R16,Y+3
	RCALL	cf_cmd
	LDI	R17,5
	LDD	R16,Y+2
	RCALL	cf_cmd
	LDI	R17,4
	LDD	R16,Y+1
	RCALL	cf_cmd
	LDI	R17,3
	LD	R16,Y
	RCALL	cf_cmd
	LDI	R17,2
	LDI	R16,1
	RCALL	cf_cmd
	ADIW	R29 : R28,4
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc unsigned char cf_pulse_oe()
cf_pulse_oe:
??cf_pulse_oe_0:
	SBIS	0x13,0x03
	RJMP	??cf_pulse_oe_0
	LDI	R16,0
	OUT	0x1A,R16
	CBI	0x15,0x06
	SBI	0x15,0x06
	IN	R16,0x19
	LDI	R17,255
	OUT	0x1A,R17
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc unsigned char _FF_read(unsigned long, unsigned char *)
_FF_read:
	CALL	?PROLOGUE8_L09
	REQUIRE	?Register_R4_is_cg_reg
	REQUIRE	?Register_R5_is_cg_reg
	REQUIRE	?Register_R6_is_cg_reg
	REQUIRE	?Register_R7_is_cg_reg
	MOVW	R25 : R24,R17 : R16
	MOVW	R27 : R26,R19 : R18
	MOVW	R5 : R4,R21 : R20
	SBIS	0x13,0x04
	RJMP	??_FF_read_0
	LDI	R16,4
	STS	_FF_error,R16
	LDI	R16,0
	RJMP	??_FF_read_1
??_FF_read_0:
	MOVW	R17 : R16,R25 : R24
	MOVW	R19 : R18,R27 : R26
	RCALL	cf_addr_setup
	LDI	R17,7
	LDI	R16,32
	RCALL	cf_cmd
	LDI	R16,0
	OUT	0x18,R16
	CLR	R6
	CLR	R7
	RJMP	??_FF_read_2
??_FF_read_3:
	RCALL	cf_pulse_oe
	MOVW	R31 : R30,R5 : R4
	ADD	R30,R6
	ADC	R31,R7
	ST	Z,R16
	LDI	R16,1
	ADD	R6,R16
	LDI	R16,0
	ADC	R7,R16
??_FF_read_2:
	LDI	R16,0
	CP	R6,R16
	LDI	R16,2
	CPC	R7,R16
	BRCS	??_FF_read_3
	LDI	R16,LOW(_FF_buff)
	LDI	R17,(_FF_buff) >> 8
	CP	R4,R16
	CPC	R5,R17
	BRNE	??_FF_read_4
	LDI	R30,LOW(_FF_buff_addr)
	LDI	R31,(_FF_buff_addr) >> 8
	ST	Z,R24
	STD	Z+1,R25
	STD	Z+2,R26
	STD	Z+3,R27
??_FF_read_4:
	LDI	R16,1
??_FF_read_1:
	LDI	R30,8
	JMP	?EPILOGUE_B8_L09

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc unsigned char _FF_write(unsigned long, unsigned char *)
_FF_write:
	CALL	?PROLOGUE4_L09
	MOVW	R25 : R24,R21 : R20
	LDI	R30,LOW(_FF_PART_ADDR)
	LDI	R31,(_FF_PART_ADDR) >> 8
	LD	R20,Z
	LDD	R21,Z+1
	LDI	R22,0
	LDI	R23,0
	CP	R20,R16
	CPC	R21,R17
	CPC	R22,R18
	CPC	R23,R19
	BRCC	??_FF_write_0
	SBIS	0x13,0x04
	RJMP	??_FF_write_1
??_FF_write_0:
	LDI	R16,3
	STS	_FF_error,R16
	LDI	R16,0
	RJMP	??_FF_write_2
??_FF_write_1:
	RCALL	cf_addr_setup
	LDI	R17,7
	LDI	R16,48
	RCALL	cf_cmd
	LDI	R16,0
	OUT	0x18,R16
	LDI	R26,0
	LDI	R27,0
	RJMP	??_FF_write_3
??_FF_write_4:
	MOVW	R31 : R30,R25 : R24
	ADD	R30,R26
	ADC	R31,R27
	LD	R16,Z
	OUT	0x1B,R16
	RCALL	cf_pulse_wr
	ADIW	R27 : R26,1
??_FF_write_3:
	CPI	R26,0
	LDI	R16,2
	CPC	R27,R16
	BRCS	??_FF_write_4
	LDI	R16,1
??_FF_write_2:
	LDI	R30,4
	JMP	?EPILOGUE_B4_L09

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc char checkcard()
checkcard:
	SBIS	0x13,0x04
	RJMP	??checkcard_0
	LDI	R16,0
	RET
??checkcard_0:
	SBI	0x15,0x07
	CBI	0x15,0x07
	SBI	0x15,0x07
	LDI	R17,7
	LDI	R16,236
	RCALL	cf_cmd
	LDI	R16,0
	OUT	0x1B,R16
	LDI	R16,32
	OUT	0x18,R16
	LDI	R16,1
	RET

        RSEG NEAR_Z:DATA:NOROOT(0)
	REQUIRE `?<Segment init: NEAR_Z>`
// unsigned char __near rtc_hour
rtc_hour:
        DS 1

        RSEG NEAR_Z:DATA:NOROOT(0)
	REQUIRE `?<Segment init: NEAR_Z>`
// unsigned char __near rtc_min
rtc_min:
        DS 1

        RSEG NEAR_Z:DATA:NOROOT(0)
	REQUIRE `?<Segment init: NEAR_Z>`
// unsigned char __near rtc_sec
rtc_sec:
        DS 1

        RSEG NEAR_Z:DATA:NOROOT(0)
	REQUIRE `?<Segment init: NEAR_Z>`
// unsigned char __near rtc_date
rtc_date:
        DS 1

        RSEG NEAR_Z:DATA:NOROOT(0)
	REQUIRE `?<Segment init: NEAR_Z>`
// unsigned char __near rtc_month
rtc_month:
        DS 1

        RSEG NEAR_Z:DATA:NOROOT(0)
	REQUIRE `?<Segment init: NEAR_Z>`
// unsigned int __near rtc_year
rtc_year:
        DS 2

        RSEG NEAR_Z:DATA:NOROOT(0)
	REQUIRE `?<Segment init: NEAR_Z>`
// unsigned char __near FILENAME[14]
FILENAME:
        DS 14

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc int _FF_strncmp(unsigned char *, unsigned char *, int)
_FF_strncmp:
	RJMP	??_FF_strncmp_0
??_FF_strncmp_1:
	SUBI	R20,1
	SBCI	R21,0
??_FF_strncmp_0:
	MOV	R22,R20
	OR	R22,R21
	BREQ	??_FF_strncmp_2
	MOVW	R31 : R30,R17 : R16
	LD	R22,Z
	SUBI	R16,255
	SBCI	R17,255
	MOVW	R31 : R30,R19 : R18
	LD	R23,Z
	SUBI	R18,255
	SBCI	R19,255
	CP	R22,R23
	BREQ	??_FF_strncmp_3
	CP	R22,R23
	BRCC	??_FF_strncmp_4
	LDI	R16,255
	LDI	R17,255
	RET
??_FF_strncmp_4:
	LDI	R16,1
	LDI	R17,0
	RET
??_FF_strncmp_3:
	TST	R22
	BRNE	??_FF_strncmp_1
	LDI	R16,0
	LDI	R17,0
	RET
??_FF_strncmp_2:
	MOVW	R17 : R16,R21 : R20
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc unsigned char *_FF_strrchr(unsigned char *, int)
_FF_strrchr:
	MOV	R20,R18
	LDI	R18,0
	LDI	R19,0
	RJMP	??_FF_strrchr_0
??_FF_strrchr_1:
	SUBI	R16,255
	SBCI	R17,255
??_FF_strrchr_0:
	MOVW	R31 : R30,R17 : R16
	LD	R21,Z
	CP	R21,R20
	BRNE	??_FF_strrchr_2
	MOVW	R19 : R18,R17 : R16
??_FF_strrchr_2:
	MOVW	R31 : R30,R17 : R16
	LD	R21,Z
	TST	R21
	BRNE	??_FF_strrchr_1
	MOVW	R17 : R16,R19 : R18
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc size_t _FF_strlen(unsigned char *)
_FF_strlen:
	MOVW	R31 : R30,R17 : R16
	RJMP	??_FF_strlen_0
??_FF_strlen_1:
	ADIW	R31 : R30,1
??_FF_strlen_0:
	LD	R18,Z
	TST	R18
	BRNE	??_FF_strlen_1
	SUB	R30,R16
	SBC	R31,R17
	MOVW	R17 : R16,R31 : R30
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc unsigned char ascii_to_char(unsigned char)
ascii_to_char:
	CPI	R16,48
	BRCC	??ascii_to_char_0
	LDI	R16,255
	RET
??ascii_to_char_0:
	CPI	R16,58
	BRCC	??ascii_to_char_1
	SUBI	R16,48
	RET
??ascii_to_char_1:
	CPI	R16,65
	BRCC	??ascii_to_char_2
	LDI	R16,255
	RET
??ascii_to_char_2:
	CPI	R16,71
	BRCC	??ascii_to_char_3
	SUBI	R16,55
	RET
??ascii_to_char_3:
	CPI	R16,97
	BRCC	??ascii_to_char_4
	LDI	R16,255
	RET
??ascii_to_char_4:
	CPI	R16,103
	BRCC	??ascii_to_char_5
	SUBI	R16,87
	RET
??ascii_to_char_5:
	LDI	R16,255
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc int valid_file_char(unsigned char)
valid_file_char:
	CPI	R16,32
	BRCC	??valid_file_char_0
	LDI	R16,255
	LDI	R17,255
	RET
??valid_file_char_0:
	CPI	R16,34
	BREQ	??valid_file_char_1
	CPI	R16,42
	BREQ	??valid_file_char_1
	CPI	R16,43
	BREQ	??valid_file_char_1
	CPI	R16,44
	BREQ	??valid_file_char_1
	CPI	R16,46
	BREQ	??valid_file_char_1
	CPI	R16,47
	BREQ	??valid_file_char_1
	CPI	R16,58
	BRCS	??valid_file_char_2
	CPI	R16,64
	BRCS	??valid_file_char_1
??valid_file_char_2:
	CPI	R16,91
	BRCS	??valid_file_char_3
	CPI	R16,94
	BRCS	??valid_file_char_1
??valid_file_char_3:
	CPI	R16,124
	BREQ	??valid_file_char_1
	CPI	R16,229
	BRNE	??valid_file_char_4
??valid_file_char_1:
	LDI	R16,255
	LDI	R17,255
	RET
??valid_file_char_4:
	LDI	R16,0
	LDI	R17,0
	RET

        RSEG CODE:CODE:NOROOT(1)
// __nearfunc int scan_directory(unsigned long *, unsigned char *)
scan_directory:
	CALL	?PROLOGUE16_L09
	REQUIRE	?Register_R4_is_cg_reg
	REQUIRE	?Register_R5_is_cg_reg
	REQUIRE	?Register_R6_is_cg_reg
	REQUIRE	?Register_R7_is_cg_reg
	REQUIRE	?Register_R8_is_cg_reg
	REQUIRE	?Register_R9_is_cg_reg
	REQUIRE	?Register_R10_is_cg_reg
	REQUIRE	?Register_R11_is_cg_reg
	REQUIRE	?Register_R12_is_cg_reg
	REQUIRE	?Register_R13_is_cg_reg
	REQUIRE	?Register_R14_is_cg_reg
	REQUIRE	?Register_R15_is_cg_reg
	SBIW	R29 : R28,19
	MOVW	R7 : R6,R17 : R16
	LDI	R16,0
	ST	Y,R16
	LDI	R16,0
	LDI	R17,0
	STD	Y+1,R16
	STD	Y+2,R17
	MOVW	R5 : R4,R19 : R18
	CLR	R8
	CLR	R9
	RJMP	??scan_directory_0
??scan_directory_1:
	LDI	R16,LOW(_Small_Ctype)
	LDI	R17,(_Small_Ctype) >> 8
	MOVW	R31 : R30,R5 : R4
	LD	R18,Z
	LDI	R19,0
	ADD	R16,R18
	ADC	R17,R19
	MOVW	R31 : R30,R17 : R16
	ADIW	R31 : R30,1
	LPM	R16,Z
	ANDI	R16,0x02
	TST	R16
	BREQ	??scan_directory_2
	MOVW	R31 : R30,R5 : R4
	LD	R16,Z
	ANDI	R16,0x5F
	RJMP	??scan_directory_3
??scan_directory_2:
	MOVW	R31 : R30,R5 : R4
	LD	R16,Z
??scan_directory_3:
	MOVW	R31 : R30,R29 : R28
	ADIW	R31 : R30,5
	ADD	R30,R8
	ADC	R31,R9
	ST	Z,R16
	LDI	R16,1
	ADD	R4,R16
	LDI	R16,0
	ADC	R5,R16
??scan_directory_4:
	LDI	R16,1
	ADD	R8,R16
	LDI	R16,0
	ADC	R9,R16
??scan_directory_0:
	LDI	R16,11
	CP	R8,R16
	LDI	R16,0
	CPC	R9,R16
	BRCS	$+2+2
	RJMP	??scan_directory_5
	MOVW	R31 : R30,R5 : R4
	LD	R16,Z
	RCALL	valid_file_char
	OR	R16,R17
	BREQ	??scan_directory_1
	MOVW	R31 : R30,R5 : R4
	LD	R16,Z
	CPI	R16,46
	BREQ	??scan_directory_6
	MOVW	R31 : R30,R5 : R4
	LD	R16,Z
	TST	R16
	BRNE	??scan_directory_7
??scan_directory_8:
	LDI	R16,11
	CP	R8,R16
	LDI	R16,0
	CPC	R9,R16
	BRCC	??scan_directory_4
	LDI	R16,32
	MOVW	R31 : R30,R29 : R28
	ADIW	R31 : R30,5
	ADD	R30,R8
	ADC	R31,R9
	ST	Z,R16
	LDI	R16,1
	ADD	R8,R16
	LDI	R16,0
	ADC	R9,R16
	RJMP	??scan_directory_8
??scan_directory_9:
	LDI	R16,32
	MOVW	R31 : R30,R29 : R28
	ADIW	R31 : R30,5
	ADD	R30,R8
	ADC	R31,R9
	ST	Z,R16
	LDI	R16,1
	ADD	R8,R16
	LDI	R16,0
	ADC	R9,R16
??scan_directory_6:
	LDI	R16,8
	CP	R8,R16
	LDI	R16,0
	CPC	R9,R16
	BRCS	??scan_directory_9
	LDI	R16,255
	ADD	R8,R16
	LDI	R16,255
	ADC	R9,R16
	LDI	R16,1
	ADD	R4,R16
	LDI	R16,0
	ADC	R5,R16
	LD	R16,Y
	ORI	R16,0x01
	ST	Y,R16
	RJMP	??scan_directory_4
??scan_directory_7:
	LDI	R16,0
	LDI	R17,0
	LDI	R18,0
	LDI	R19,0
	MOVW	R31 : R30,R7 : R6
	ST	Z,R16
	STD	Z+1,R17
	STD	Z+2,R18
	STD	Z+3,R19
	LDI	R16,255
	LDI	R17,255
	RJMP	??scan_directory_10
??scan_directory_5:
	LDI	R16,0
	STD	Y+16,R16
	MOVW	R31 : R30,R7 : R6
	LD	R16,Z
	LDD	R17,Z+1
	LDD	R18,Z+2
	LDD	R19,Z+3
	LDI	R30,LOW(_FF_ROOT_ADDR)
	LDI	R31,(_FF_ROOT_ADDR) >> 8
	LD	R20,Z
	LDD	R21,Z+1
	LDD	R22,Z+2
	LDD	R23,Z+3
	CP	R16,R20
	CPC	R17,R21
	CPC	R18,R22
	CPC	R19,R23
	BRNE	??scan_directory_11
	LDI	R30,LOW(BPB_RootEntCnt)
	LDI	R31,(BPB_RootEntCnt) >> 8
	LD	R12,Z
	LDD	R13,Z+1
	RJMP	??scan_directory_12
??scan_directory_11:
	MOVW	R31 : R30,R7 : R6
	LD	R16,Z
	LDD	R17,Z+1
	LDD	R18,Z+2
	LDD	R19,Z+3
	RCALL	addr_to_clust
	STD	Y+3,R16
	STD	Y+4,R17
	LDD	R16,Y+3
	LDD	R17,Y+4
	OR	R16,R17
	BREQ	??scan_directory_13
	LD	R16,Y
	ORI	R16,0x80
	ST	Y,R16
??scan_directory_13:
	LDS	R16,BPB_SecPerClus
	LDI	R17,0
	LDI	R20,4
	CALL	?S_SHL_L02
	MOVW	R13 : R12,R17 : R16
??scan_directory_12:
	CLR	R8
	CLR	R9
	RJMP	??scan_directory_14
??scan_directory_15:
	MOVW	R17 : R16,R9 : R8
	RCALL	clust_to_addr
	MOVW	R31 : R30,R7 : R6
	ST	Z,R16
	STD	Z+1,R17
	STD	Z+2,R18
	STD	Z+3,R19
	STD	Y+3,R8
	STD	Y+4,R9
	LDI	R16,0
	LDI	R17,0
	STD	Y+1,R16
	STD	Y+2,R17
	CLR	R8
	CLR	R9
??scan_directory_14:
	LDD	R16,Y+1
	LDD	R17,Y+2
	CP	R16,R12
	CPC	R17,R13
	BRCS	$+2+2
	RJMP	??scan_directory_16
	LDI	R20,LOW(_FF_buff)
	LDI	R21,(_FF_buff) >> 8
	MOVW	R1 : R0,R21 : R20
	MOVW	R31 : R30,R7 : R6
	LD	R20,Z
	LDD	R21,Z+1
	LDD	R22,Z+2
	LDD	R23,Z+3
	MOVW	R17 : R16,R9 : R8
	LDI	R18,0
	LDI	R19,0
	ADD	R16,R20
	ADC	R17,R21
	ADC	R18,R22
	ADC	R19,R23
	MOVW	R21 : R20,R1 : R0
	RCALL	_FF_read
	TST	R16
	BRNE	$+2+2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -