Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

asm файл

Отправлено PREMIER 24 марта 2008 г. 09:56
В ответ на: Представте лучше асм файл, который генерирует CV. Там могут быть имена и есть коментарии с исходным кодом. Чтобы осталось форматирование добавляйте хотябы в начале <pre> отправлено leon 24 марта 2008 г. 09:30

;CodeVisionAVR C Compiler V1.25.2 Beta1 Standard
;(C) Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
;http://www.hpinfotech.com

;Chip type : ATmega8
;Program type : Application
;Clock frequency : 7,372800 MHz
;Memory model : Small
;Optimize for : Size
;(s)printf features : int, width
;(s)scanf features : int, width
;External SRAM size : 0
;Data Stack size : 768 byte(s)
;Heap size : 0 byte(s)
;Promote char to int : No
;char is unsigned : Yes
;8 bit enums : No
;Word align FLASH struct: No
;Enhanced core instructions : On
;Automatic register allocation : On

#pragma AVRPART ADMIN PART_NAME ATmega8
#pragma AVRPART MEMORY PROG_FLASH 8192
#pragma AVRPART MEMORY EEPROM 512
#pragma AVRPART MEMORY INT_SRAM SIZE 1024
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60

.EQU UDRE=0x5
.EQU RXC=0x7
.EQU USR=0xB
.EQU UDR=0xC
.EQU SPSR=0xE
.EQU SPDR=0xF
.EQU EERE=0x0
.EQU EEWE=0x1
.EQU EEMWE=0x2
.EQU EECR=0x1C
.EQU EEDR=0x1D
.EQU EEARL=0x1E
.EQU EEARH=0x1F
.EQU WDTCR=0x21
.EQU MCUCR=0x35
.EQU GICR=0x3B
.EQU SPL=0x3D
.EQU SPH=0x3E
.EQU SREG=0x3F

.DEF R0X0=R0
.DEF R0X1=R1
.DEF R0X2=R2
.DEF R0X3=R3
.DEF R0X4=R4
.DEF R0X5=R5
.DEF R0X6=R6
.DEF R0X7=R7
.DEF R0X8=R8
.DEF R0X9=R9
.DEF R0XA=R10
.DEF R0XB=R11
.DEF R0XC=R12
.DEF R0XD=R13
.DEF R0XE=R14
.DEF R0XF=R15
.DEF R0X10=R16
.DEF R0X11=R17
.DEF R0X12=R18
.DEF R0X13=R19
.DEF R0X14=R20
.DEF R0X15=R21
.DEF R0X16=R22
.DEF R0X17=R23
.DEF R0X18=R24
.DEF R0X19=R25
.DEF R0X1A=R26
.DEF R0X1B=R27
.DEF R0X1C=R28
.DEF R0X1D=R29
.DEF R0X1E=R30
.DEF R0X1F=R31

.EQU __se_bit=0x80
.EQU __sm_mask=0x70
.EQU __sm_adc_noise_red=0x10
.EQU __sm_powerdown=0x20
.EQU __sm_powersave=0x30
.EQU __sm_standby=0x60
.EQU __sm_ext_standby=0x70

.MACRO __CPD1N
CPI R30,LOW(@0)
LDI R26,HIGH(@0)
CPC R31,R26
LDI R26,BYTE3(@0)
CPC R22,R26
LDI R26,BYTE4(@0)
CPC R23,R26
.ENDM

.MACRO __CPD2N
CPI R26,LOW(@0)
LDI R30,HIGH(@0)
CPC R27,R30
LDI R30,BYTE3(@0)
CPC R24,R30
LDI R30,BYTE4(@0)
CPC R25,R30
.ENDM

.MACRO __CPWRR
CP R@0,R@2
CPC R@1,R@3
.ENDM

.MACRO __CPWRN
CPI R@0,LOW(@2)
LDI R30,HIGH(@2)
CPC R@1,R30
.ENDM

.MACRO __ADDB1MN
SUBI R30,LOW(-@0-(@1))
.ENDM
.MACRO __ADDB2MN
SUBI R26,LOW(-@0-(@1))
.ENDM
.MACRO __ADDW1MN
SUBI R30,LOW(-@0-(@1))
SBCI R31,HIGH(-@0-(@1))
.ENDM
.MACRO __ADDW2MN
SUBI R26,LOW(-@0-(@1))
SBCI R27,HIGH(-@0-(@1))
.ENDM
.MACRO __ADDW1FN
SUBI R30,LOW(-2*@0-(@1))
SBCI R31,HIGH(-2*@0-(@1))
.ENDM
.MACRO __ADDD1FN
SUBI R30,LOW(-2*@0-(@1))
SBCI R31,HIGH(-2*@0-(@1))
SBCI R22,BYTE3(-2*@0-(@1))
.ENDM
.MACRO __ADDD1N
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
SBCI R22,BYTE3(-@0)
SBCI R23,BYTE4(-@0)
.ENDM

.MACRO __ADDD2N
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
SBCI R24,BYTE3(-@0)
SBCI R25,BYTE4(-@0)
.ENDM

.MACRO __SUBD1N
SUBI R30,LOW(@0)
SBCI R31,HIGH(@0)
SBCI R22,BYTE3(@0)
SBCI R23,BYTE4(@0)
.ENDM

.MACRO __SUBD2N
SUBI R26,LOW(@0)
SBCI R27,HIGH(@0)
SBCI R24,BYTE3(@0)
SBCI R25,BYTE4(@0)
.ENDM

.MACRO __ANDBMNN
LDS R30,@0+@1
ANDI R30,LOW(@2)
STS @0+@1,R30
.ENDM

.MACRO __ANDWMNN
LDS R30,@0+@1
ANDI R30,LOW(@2)
STS @0+@1,R30
LDS R30,@0+@1+1
ANDI R30,HIGH(@2)
STS @0+@1+1,R30
.ENDM

.MACRO __ANDD1N
ANDI R30,LOW(@0)
ANDI R31,HIGH(@0)
ANDI R22,BYTE3(@0)
ANDI R23,BYTE4(@0)
.ENDM

.MACRO __ORBMNN
LDS R30,@0+@1
ORI R30,LOW(@2)
STS @0+@1,R30
.ENDM

.MACRO __ORWMNN
LDS R30,@0+@1
ORI R30,LOW(@2)
STS @0+@1,R30
LDS R30,@0+@1+1
ORI R30,HIGH(@2)
STS @0+@1+1,R30
.ENDM

.MACRO __ORD1N
ORI R30,LOW(@0)
ORI R31,HIGH(@0)
ORI R22,BYTE3(@0)
ORI R23,BYTE4(@0)
.ENDM

.MACRO __DELAY_USB
LDI R24,LOW(@0)
__DELAY_USB_LOOP:
DEC R24
BRNE __DELAY_USB_LOOP
.ENDM

.MACRO __DELAY_USW
LDI R24,LOW(@0)
LDI R25,HIGH(@0)
__DELAY_USW_LOOP:
SBIW R24,1
BRNE __DELAY_USW_LOOP
.ENDM

.MACRO __CLRD1S
LDI R30,0
STD Y+@0,R30
STD Y+@0+1,R30
STD Y+@0+2,R30
STD Y+@0+3,R30
.ENDM

.MACRO __GETD1S
LDD R30,Y+@0
LDD R31,Y+@0+1
LDD R22,Y+@0+2
LDD R23,Y+@0+3
.ENDM

.MACRO __PUTD1S
STD Y+@0,R30
STD Y+@0+1,R31
STD Y+@0+2,R22
STD Y+@0+3,R23
.ENDM

.MACRO __PUTD2S
STD Y+@0,R26
STD Y+@0+1,R27
STD Y+@0+2,R24
STD Y+@0+3,R25
.ENDM

.MACRO __POINTB1MN
LDI R30,LOW(@0+@1)
.ENDM

.MACRO __POINTW1MN
LDI R30,LOW(@0+@1)
LDI R31,HIGH(@0+@1)
.ENDM

.MACRO __POINTD1M
LDI R30,LOW(@0)
LDI R31,HIGH(@0)
LDI R22,BYTE3(@0)
.ENDM

.MACRO __POINTW1FN
LDI R30,LOW(2*@0+@1)
LDI R31,HIGH(2*@0+@1)
.ENDM

.MACRO __POINTD1FN
LDI R30,LOW(2*@0+@1)
LDI R31,HIGH(2*@0+@1)
LDI R22,BYTE3(2*@0+@1)
.ENDM

.MACRO __POINTB2MN
LDI R26,LOW(@0+@1)
.ENDM

.MACRO __POINTW2MN
LDI R26,LOW(@0+@1)
LDI R27,HIGH(@0+@1)
.ENDM

.MACRO __POINTBRM
LDI R@0,LOW(@1)
.ENDM

.MACRO __POINTWRM
LDI R@0,LOW(@2)
LDI R@1,HIGH(@2)
.ENDM

.MACRO __POINTBRMN
LDI R@0,LOW(@1+@2)
.ENDM

.MACRO __POINTWRMN
LDI R@0,LOW(@2+@3)
LDI R@1,HIGH(@2+@3)
.ENDM

.MACRO __POINTWRFN
LDI R@0,LOW(@2*2+@3)
LDI R@1,HIGH(@2*2+@3)
.ENDM

.MACRO __GETD1N
LDI R30,LOW(@0)
LDI R31,HIGH(@0)
LDI R22,BYTE3(@0)
LDI R23,BYTE4(@0)
.ENDM

.MACRO __GETD2N
LDI R26,LOW(@0)
LDI R27,HIGH(@0)
LDI R24,BYTE3(@0)
LDI R25,BYTE4(@0)
.ENDM

.MACRO __GETD2S
LDD R26,Y+@0
LDD R27,Y+@0+1
LDD R24,Y+@0+2
LDD R25,Y+@0+3
.ENDM

.MACRO __GETB1MN
LDS R30,@0+@1
.ENDM

.MACRO __GETB1HMN
LDS R31,@0+@1
.ENDM

.MACRO __GETW1MN
LDS R30,@0+@1
LDS R31,@0+@1+1
.ENDM

.MACRO __GETD1MN
LDS R30,@0+@1
LDS R31,@0+@1+1
LDS R22,@0+@1+2
LDS R23,@0+@1+3
.ENDM

.MACRO __GETBRMN
LDS R@0,@1+@2
.ENDM

.MACRO __GETWRMN
LDS R@0,@2+@3
LDS R@1,@2+@3+1
.ENDM

.MACRO __GETWRZ
LDD R@0,Z+@2
LDD R@1,Z+@2+1
.ENDM

.MACRO __GETD2Z
LDD R26,Z+@0
LDD R27,Z+@0+1
LDD R24,Z+@0+2
LDD R25,Z+@0+3
.ENDM

.MACRO __GETB2MN
LDS R26,@0+@1
.ENDM

.MACRO __GETW2MN
LDS R26,@0+@1
LDS R27,@0+@1+1
.ENDM

.MACRO __GETD2MN
LDS R26,@0+@1
LDS R27,@0+@1+1
LDS R24,@0+@1+2
LDS R25,@0+@1+3
.ENDM

.MACRO __PUTB1MN
STS @0+@1,R30
.ENDM

.MACRO __PUTW1MN
STS @0+@1,R30
STS @0+@1+1,R31
.ENDM

.MACRO __PUTD1MN
STS @0+@1,R30
STS @0+@1+1,R31
STS @0+@1+2,R22
STS @0+@1+3,R23
.ENDM

.MACRO __PUTBR0MN
STS @0+@1,R0
.ENDM

.MACRO __PUTDZ2
STD Z+@0,R26
STD Z+@0+1,R27
STD Z+@0+2,R24
STD Z+@0+3,R25
.ENDM

.MACRO __PUTBMRN
STS @0+@1,R@2
.ENDM

.MACRO __PUTWMRN
STS @0+@1,R@2
STS @0+@1+1,R@3
.ENDM

.MACRO __PUTBZR
STD Z+@1,R@0
.ENDM

.MACRO __PUTWZR
STD Z+@2,R@0
STD Z+@2+1,R@1
.ENDM

.MACRO __GETW1R
MOV R30,R@0
MOV R31,R@1
.ENDM

.MACRO __GETW2R
MOV R26,R@0
MOV R27,R@1
.ENDM

.MACRO __GETWRN
LDI R@0,LOW(@2)
LDI R@1,HIGH(@2)
.ENDM

.MACRO __PUTW1R
MOV R@0,R30
MOV R@1,R31
.ENDM

.MACRO __PUTW2R
MOV R@0,R26
MOV R@1,R27
.ENDM

.MACRO __ADDWRN
SUBI R@0,LOW(-@2)
SBCI R@1,HIGH(-@2)
.ENDM

.MACRO __ADDWRR
ADD R@0,R@2
ADC R@1,R@3
.ENDM

.MACRO __SUBWRN
SUBI R@0,LOW(@2)
SBCI R@1,HIGH(@2)
.ENDM

.MACRO __SUBWRR
SUB R@0,R@2
SBC R@1,R@3
.ENDM

.MACRO __ANDWRN
ANDI R@0,LOW(@2)
ANDI R@1,HIGH(@2)
.ENDM

.MACRO __ANDWRR
AND R@0,R@2
AND R@1,R@3
.ENDM

.MACRO __ORWRN
ORI R@0,LOW(@2)
ORI R@1,HIGH(@2)
.ENDM

.MACRO __ORWRR
OR R@0,R@2
OR R@1,R@3
.ENDM

.MACRO __EORWRR
EOR R@0,R@2
EOR R@1,R@3
.ENDM

.MACRO __GETWRS
LDD R@0,Y+@2
LDD R@1,Y+@2+1
.ENDM

.MACRO __PUTWSR
STD Y+@2,R@0
STD Y+@2+1,R@1
.ENDM

.MACRO __MOVEWRR
MOV R@0,R@2
MOV R@1,R@3
.ENDM

.MACRO __INWR
IN R@0,@2
IN R@1,@2+1
.ENDM

.MACRO __OUTWR
OUT @2+1,R@1
OUT @2,R@0
.ENDM

.MACRO __CALL1MN
LDS R30,@0+@1
LDS R31,@0+@1+1
ICALL
.ENDM

.MACRO __CALL1FN
LDI R30,LOW(2*@0+@1)
LDI R31,HIGH(2*@0+@1)
RCALL __GETW1PF
ICALL
.ENDM

.MACRO __CALL2EN
LDI R26,LOW(@0+@1)
LDI R27,HIGH(@0+@1)
RCALL __EEPROMRDW
ICALL
.ENDM

.MACRO __GETW1STACK
IN R26,SPL
IN R27,SPH
ADIW R26,@0+1
LD R30,X+
LD R31,X
.ENDM

.MACRO __NBST
BST R@0,@1
IN R30,SREG
LDI R31,0x40
EOR R30,R31
OUT SREG,R30
.ENDM


.MACRO __PUTB1SN
LDD R26,Y+@0
LDD R27,Y+@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X,R30
.ENDM

.MACRO __PUTW1SN
LDD R26,Y+@0
LDD R27,Y+@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1SN
LDD R26,Y+@0
LDD R27,Y+@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
RCALL __PUTDP1
.ENDM

.MACRO __PUTB1SNS
LDD R26,Y+@0
LDD R27,Y+@0+1
ADIW R26,@1
ST X,R30
.ENDM

.MACRO __PUTW1SNS
LDD R26,Y+@0
LDD R27,Y+@0+1
ADIW R26,@1
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1SNS
LDD R26,Y+@0
LDD R27,Y+@0+1
ADIW R26,@1
RCALL __PUTDP1
.ENDM

.MACRO __PUTB1PMN
LDS R26,@0
LDS R27,@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X,R30
.ENDM

.MACRO __PUTW1PMN
LDS R26,@0
LDS R27,@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1PMN
LDS R26,@0
LDS R27,@0+1
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
RCALL __PUTDP1
.ENDM

.MACRO __PUTB1PMNS
LDS R26,@0
LDS R27,@0+1
ADIW R26,@1
ST X,R30
.ENDM

.MACRO __PUTW1PMNS
LDS R26,@0
LDS R27,@0+1
ADIW R26,@1
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1PMNS
LDS R26,@0
LDS R27,@0+1
ADIW R26,@1
RCALL __PUTDP1
.ENDM

.MACRO __PUTB1RN
MOVW R26,R@0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X,R30
.ENDM

.MACRO __PUTW1RN
MOVW R26,R@0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1RN
MOVW R26,R@0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
RCALL __PUTDP1
.ENDM

.MACRO __PUTB1RNS
MOVW R26,R@0
ADIW R26,@1
ST X,R30
.ENDM

.MACRO __PUTW1RNS
MOVW R26,R@0
ADIW R26,@1
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1RNS
MOVW R26,R@0
ADIW R26,@1
RCALL __PUTDP1
.ENDM

.MACRO __PUTB1RON
MOV R26,R@0
MOV R27,R@1
SUBI R26,LOW(-@2)
SBCI R27,HIGH(-@2)
ST X,R30
.ENDM

.MACRO __PUTW1RON
MOV R26,R@0
MOV R27,R@1
SUBI R26,LOW(-@2)
SBCI R27,HIGH(-@2)
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1RON
MOV R26,R@0
MOV R27,R@1
SUBI R26,LOW(-@2)
SBCI R27,HIGH(-@2)
RCALL __PUTDP1
.ENDM

.MACRO __PUTB1RONS
MOV R26,R@0
MOV R27,R@1
ADIW R26,@2
ST X,R30
.ENDM

.MACRO __PUTW1RONS
MOV R26,R@0
MOV R27,R@1
ADIW R26,@2
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1RONS
MOV R26,R@0
MOV R27,R@1
ADIW R26,@2
RCALL __PUTDP1
.ENDM


.MACRO __GETB1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R30,Z
.ENDM

.MACRO __GETB1HSX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R31,Z
.ENDM

.MACRO __GETW1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R0,Z+
LD R31,Z
MOV R30,R0
.ENDM

.MACRO __GETD1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R0,Z+
LD R1,Z+
LD R22,Z+
LD R23,Z
MOVW R30,R0
.ENDM

.MACRO __GETB2SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R26,X
.ENDM

.MACRO __GETW2SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R27,X
MOV R26,R0
.ENDM

.MACRO __GETD2SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R1,X+
LD R24,X+
LD R25,X
MOVW R26,R0
.ENDM

.MACRO __GETBRSX
MOVW R30,R28
SUBI R30,LOW(-@1)
SBCI R31,HIGH(-@1)
LD R@0,Z
.ENDM

.MACRO __GETWRSX
MOVW R30,R28
SUBI R30,LOW(-@2)
SBCI R31,HIGH(-@2)
LD R@0,Z+
LD R@1,Z
.ENDM

.MACRO __LSLW8SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
LD R31,Z
CLR R30
.ENDM

.MACRO __PUTB1SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
ST X,R30
.ENDM

.MACRO __PUTW1SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1SX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
ST X+,R30
ST X+,R31
ST X+,R22
ST X,R23
.ENDM

.MACRO __CLRW1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
CLR R0
ST Z+,R0
ST Z,R0
.ENDM

.MACRO __CLRD1SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
CLR R0
ST Z+,R0
ST Z+,R0
ST Z+,R0
ST Z,R0
.ENDM

.MACRO __PUTB2SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
ST Z,R26
.ENDM

.MACRO __PUTW2SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
ST Z+,R26
ST Z,R27
.ENDM

.MACRO __PUTD2SX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
ST Z+,R26
ST Z+,R27
ST Z+,R24
ST Z,R25
.ENDM

.MACRO __PUTBSRX
MOVW R30,R28
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
ST Z,R@1
.ENDM

.MACRO __PUTWSRX
MOVW R30,R28
SUBI R30,LOW(-@2)
SBCI R31,HIGH(-@2)
ST Z+,R@0
ST Z,R@1
.ENDM

.MACRO __PUTB1SNX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R27,X
MOV R26,R0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X,R30
.ENDM

.MACRO __PUTW1SNX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R27,X
MOV R26,R0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X,R31
.ENDM

.MACRO __PUTD1SNX
MOVW R26,R28
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
LD R0,X+
LD R27,X
MOV R26,R0
SUBI R26,LOW(-@1)
SBCI R27,HIGH(-@1)
ST X+,R30
ST X+,R31
ST X+,R22
ST X,R23
.ENDM

.MACRO __MULBRR
MULS R@0,R@1
MOVW R30,R0
.ENDM

.MACRO __MULBRRU
MUL R@0,R@1
MOVW R30,R0
.ENDM

.MACRO __MULBRR0
MULS R@0,R@1
.ENDM

.MACRO __MULBRRU0
MUL R@0,R@1
.ENDM

.MACRO __MULBNWRU
LDI R26,@2
MUL R26,R@0
MOVW R30,R0
MUL R26,R@1
ADD R31,R0
.ENDM

.CSEG
.ORG 0

.INCLUDE "main.vec"
.INCLUDE "main.inc"

__RESET:
CLI
CLR R30
OUT EECR,R30

;INTERRUPT VECTORS ARE PLACED
;AT THE START OF FLASH
LDI R31,1
OUT GICR,R31
OUT GICR,R30
OUT MCUCR,R30

;DISABLE WATCHDOG
LDI R31,0x18
OUT WDTCR,R31
OUT WDTCR,R30

;CLEAR R2-R14
LDI R24,13
LDI R26,2
CLR R27
__CLEAR_REG:
ST X+,R30
DEC R24
BRNE __CLEAR_REG

;CLEAR SRAM
LDI R24,LOW(0x400)
LDI R25,HIGH(0x400)
LDI R26,0x60
__CLEAR_SRAM:
ST X+,R30
SBIW R24,1
BRNE __CLEAR_SRAM

;GLOBAL VARIABLES INITIALIZATION
LDI R30,LOW(__GLOBAL_INI_TBL*2)
LDI R31,HIGH(__GLOBAL_INI_TBL*2)
__GLOBAL_INI_NEXT:
LPM R24,Z+
LPM R25,Z+
SBIW R24,0
BREQ __GLOBAL_INI_END
LPM R26,Z+
LPM R27,Z+
LPM R0,Z+
LPM R1,Z+
MOVW R22,R30
MOVW R30,R0
__GLOBAL_INI_LOOP:
LPM R0,Z+
ST X+,R0
SBIW R24,1
BRNE __GLOBAL_INI_LOOP
MOVW R30,R22
RJMP __GLOBAL_INI_NEXT
__GLOBAL_INI_END:

;STACK POINTER INITIALIZATION
LDI R30,LOW(0x45F)
OUT SPL,R30
LDI R30,HIGH(0x45F)
OUT SPH,R30

;DATA STACK POINTER INITIALIZATION
LDI R28,LOW(0x360)
LDI R29,HIGH(0x360)

RJMP _main

.ESEG
.ORG 0

.DSEG
.ORG 0x360
; 1 #include <stdio.h>
; 2 #include <string.h>
; 3 #include "sd.h"
; 4 #include "partition.h"
; 5
; 6
; 7 void uart_init()
; 8 {

.CSEG
_uart_init:
; 9 // USART initialization
; 10 // Communication Parameters: 8 Data, 1 Stop, No Parity
; 11 // USART Receiver: On
; 12 // USART Transmitter: On
; 13 // USART Mode: Asynchronous
; 14 // USART Baud rate: 9600
; 15 UCSRA=0x00;
LDI R30,LOW(0)
OUT 0xB,R30
; 16 UCSRB=0x18;
LDI R30,LOW(24)
OUT 0xA,R30
; 17 UCSRC=0x86;
LDI R30,LOW(134)
OUT 0x20,R30
; 18 UBRRH=0x00;
LDI R30,LOW(0)
OUT 0x20,R30
; 19 UBRRL=0x2F;
LDI R30,LOW(47)
OUT 0x9,R30
; 20 }
RET
; 21
; 22 void main(void)
; 23 { unsigned int i, count;
_main:
; 24 unsigned char buffer[5];
; 25 unsigned long int argument;
; 26 //unsigned char response;
; 27 struct partition_description* pd = 0x60;
; 28 struct entry_description* ed;
; 29
; 30 /* we will just use ordinary idle mode */
; 31 //set_sleep_mode(SLEEP_MODE_IDLE);
; 32
; 33 /* setup uart */
; 34 uart_init();
SBIW R28,11
; i -> R16,R17
; count -> R18,R19
; buffer -> Y+6
; argument -> Y+2
; *pd -> R20,R21
; *ed -> Y+0
LDI R20,LOW(0x60)
LDI R21,HIGH(0x60)
RCALL _uart_init
; 35
; 36 /* setup sd card slot */
; 37 if(!sd_init())
RCALL _sd_init
CPI R30,0
BRNE _0x3
; 38 {
; 39 putsf("error initialization card");
__POINTW1FN _0,0
RCALL SUBOPT_0x0
; 40 }
; 41 /* open partition on MMC */
; 42 if (!open_partition(pd))
_0x3:
ST -Y,R21
ST -Y,R20
RCALL _open_partition
CPI R30,0
BRNE _0x4
; 43 putsf("error opening partition");
__POINTW1FN _0,26
RCALL SUBOPT_0x0
; 44 /*putchar((unsigned char) (pd->Root_base>>24));
; 45 putchar((unsigned char) (pd->Root_base>>16));
; 46 putchar((unsigned char) (pd->Root_base>>8));
; 47 putchar((unsigned char) pd->Root_base); */
; 48 if (!pd->Root_base)
_0x4:
MOVW R26,R20
ADIW R26,18
RCALL __GETD1P
RCALL __CPD10
BRNE _0x5
; 49 putsf("error");
__POINTW1FN _0,50
RCALL SUBOPT_0x0
; 50 /* get list of root directory */
; 51 count = open_dir(pd->Root_base, pd->Root_size, ed);
_0x5:
MOVW R30,R20
RCALL SUBOPT_0x1
RCALL __PUTPARD2
MOVW R30,R20
__GETD2Z 30
RCALL __PUTPARD2
LDD R30,Y+8
LDD R31,Y+8+1
RCALL SUBOPT_0x2
RCALL _open_dir
MOVW R18,R30
; 52 if (!count)
MOV R0,R18
OR R0,R19
BRNE _0x6
; 53 putsf("directory is empty");
__POINTW1FN _0,56
RCALL SUBOPT_0x0
; 54 else
RJMP _0x7
_0x6:
; 55 for (i=0; i<count; i++){
__GETWRN 16,17,0
_0x9:
__CPWRR 16,17,18,19
BRSH _0xA
; 56 puts(strcat(ed->file_name, ed->file_ex));
LD R30,Y
LDD R31,Y+1
RCALL SUBOPT_0x2
LDD R30,Y+2
LDD R31,Y+2+1
ADIW R30,8
RCALL SUBOPT_0x2
RCALL _strcat
RCALL SUBOPT_0x2
RCALL _puts
; 57 ++ed;
LD R30,Y
LDD R31,Y+1
ADIW R30,20
ST Y,R30
STD Y+1,R31
; 58 };
__ADDWRN 16,17,1
RJMP _0x9
_0xA:
_0x7:
; 59
; 60 /* provide a simple shell */
; 61
; 62 while(1)
_0xB:
; 63 {
; 64 /* print prompt */
; 65 putchar('>');
LDI R30,LOW(62)
RCALL SUBOPT_0x3
; 66 putchar(' ');
LDI R30,LOW(32)
RCALL SUBOPT_0x3
; 67
; 68 /* read command */
; 69 gets(buffer, sizeof(buffer));
MOVW R30,R28
ADIW R30,6
RCALL SUBOPT_0x2
LDI R30,LOW(5)
LDI R31,HIGH(5)
RCALL SUBOPT_0x2
RCALL _gets
; 70 if(buffer[0]<1)
LDD R26,Y+6
CPI R26,LOW(0x1)
BRLO _0xB
; 71 continue;
; 72
; 73
; 74 argument = buffer[1];
LDD R30,Y+7
RCALL SUBOPT_0x4
RCALL SUBOPT_0x5
; 75 argument <<= 8;
RCALL SUBOPT_0x6
RCALL SUBOPT_0x7
; 76 argument += buffer[2];
LDD R30,Y+8
RCALL SUBOPT_0x8
; 77 argument <<= 8;
; 78 argument += buffer[3];
LDD R30,Y+9
RCALL SUBOPT_0x8
; 79 argument <<= 8;
; 80 argument += buffer[4];
LDD R30,Y+10
RCALL SUBOPT_0x6
RCALL SUBOPT_0x4
RCALL __ADDD12
RCALL SUBOPT_0x5
; 81
; 82 /* if(buffer[0] == (0x40|CMD_SET_BLOCKLEN))
; 83 {
; 84 select_card();
; 85 response = sd_send_command_r1(CMD_SET_BLOCKLEN, argument);
; 86 unselect_card();
; 87 putchar(response);
; 88 }else if(buffer[0] == (0x40|CMD_READ_SINGLE_BLOCK))
; 89 {
; 90 read_data(argument, data);
; 91 puts(data);
; 92 for(i = 0; i < 512; ++i) {
; 93 putchar(data[i]);
; 94 };
; 95 }; */
; 96
; 97 }
RJMP _0xB
; 98 }
_0xF:
RJMP _0xF
; 99 #include <spi.h>
; 100 #include "sd.h"
; 101 #include <stdio.h>
; 102
; 103 unsigned char sd_init()
; 104 {
_sd_init:
; 105 unsigned char response;
; 106 unsigned int i;
; 107
; 108 configure_pin_mosi();
RCALL __SAVELOCR3
; response -> R16
; i -> R17,R18
SBI 0x17,3
; 109 configure_pin_sck();
SBI 0x17,5
; 110 configure_pin_ss();
SBI 0x17,2
; 111 configure_pin_miso();
CBI 0x17,4
; 112
; 113 unselect_card();
SBI 0x18,2
; 114
; 115 SPCR = 0x53;
LDI R30,LOW(83)
OUT 0xD,R30
; 116 SPSR = 0x00;
LDI R30,LOW(0)
OUT 0xE,R30
; 117
; 118 for(i = 0; i < 10; ++i) spi(0xff);
RCALL SUBOPT_0x9
_0x11:
__CPWRN 17,18,10
BRSH _0x12
RCALL SUBOPT_0xA
; 119
; 120 select_card();
RCALL SUBOPT_0xB
RJMP _0x11
_0x12:
CBI 0x18,2
; 121
; 122 for(i = 0; ; ++i)
RCALL SUBOPT_0x9
_0x14:
; 123 {
; 124 response = sd_send_command_r1(CMD_GO_IDLE_STATE,0);
LDI R30,LOW(0)
RCALL SUBOPT_0xC
; 125 if(response == (1<<R1_IDLE_STATE)) break;
CPI R16,1
BREQ _0x15
; 126 if(i == 0x1ff)
LDI R30,LOW(511)
LDI R31,HIGH(511)
CP R30,R17
CPC R31,R18
BRNE _0x17
; 127 {
; 128 unselect_card();
RCALL SUBOPT_0xD
; 129 return 0;
RJMP _0x42
; 130 }
; 131 }
_0x17:
RCALL SUBOPT_0xB
RJMP _0x14
_0x15:
; 132 for(i = 0; ; ++i)
RCALL SUBOPT_0x9
_0x19:
; 133 {
; 134 response = sd_send_command_r1(CMD_SEND_OP_COND,0);
LDI R30,LOW(1)
RCALL SUBOPT_0xC
; 135 if(!(response & (1<<R1_IDLE_STATE))) break;
SBRS R16,0
RJMP _0x1A
; 136 if(i == 0x7fff)
LDI R30,LOW(32767)
LDI R31,HIGH(32767)
CP R30,R17
CPC R31,R18
BRNE _0x1C
; 137 {
; 138 unselect_card();
RCALL SUBOPT_0xD
; 139 return 0;
RJMP _0x42
; 140 }
; 141 }
_0x1C:
RCALL SUBOPT_0xB
RJMP _0x19
_0x1A:
; 142
; 143 if(sd_send_command_r1(CMD_SET_BLOCKLEN,512))
LDI R30,LOW(16)
ST -Y,R30
RCALL SUBOPT_0xE
RCALL __PUTPARD1
RCALL _sd_send_command_r1
CPI R30,0
BREQ _0x1D
; 144 {
; 145 unselect_card();
RCALL SUBOPT_0xD
; 146 return 0;
RJMP _0x42
; 147 }
; 148 unselect_card();
_0x1D:
SBI 0x18,2
; 149
; 150 SPCR = 0x50;
LDI R30,LOW(80)
OUT 0xD,R30
; 151 SPSR = 0x01;
LDI R30,LOW(1)
OUT 0xE,R30
; 152
; 153 return 1;
_0x42:
RCALL __LOADLOCR3
ADIW R28,3
RET
; 154 }
; 155
; 156 unsigned char sd_send_command_r1(unsigned char command, unsigned long int arg)
; 157 {
_sd_send_command_r1:
; 158 unsigned char response,i;
; 159 spi(0x40 | command);
RCALL __SAVELOCR2
; command -> Y+6
; arg -> Y+2
; response -> R16
; i -> R17
LDD R30,Y+6
ORI R30,0x40
RCALL SUBOPT_0xF
; 160 spi((arg >> 24) & 0xff);
LDD R30,Y+5
RCALL SUBOPT_0x10
; 161 spi((arg >> 16) & 0xff);
RCALL SUBOPT_0x11
RCALL __LSRD16
RCALL SUBOPT_0x10
; 162 spi((arg >> 8) & 0xff);
LDD R30,Y+2
LDD R31,Y+2+1
MOV R30,R31
RCALL SUBOPT_0x10
; 163 spi((arg >> 0) & 0xff);
RCALL SUBOPT_0x11
RCALL SUBOPT_0x10
; 164 spi(command == CMD_GO_IDLE_STATE ? 0x95 : 0xff);
LDD R26,Y+6
CPI R26,LOW(0x0)
BRNE _0x1E
LDI R30,LOW(149)
RJMP _0x1F
_0x1E:
LDI R30,LOW(255)
_0x1F:
RCALL SUBOPT_0xF
; 165
; 166 for(i = 0; i < 10; ++i)
LDI R17,LOW(0)
_0x22:
CPI R17,10
BRSH _0x23
; 167 {
; 168 response = spi(0xff);
RCALL SUBOPT_0xA
MOV R16,R30
; 169 if(response != 0xff) break;
CPI R16,255
BRNE _0x23
; 170 }
SUBI R17,-LOW(1)
RJMP _0x22
_0x23:
; 171 return response;
MOV R30,R16
RCALL __LOADLOCR2
ADIW R28,7
RET
; 172 }
; 173 /*unsigned int sd_send_command_r2(unsigned char command, unsigned long int arg)
; 174 {
; 175 unsigned int response;
; 176 unsigned char i;
; 177 spi(0xff);
; 178 spi(0x40 | command);
; 179 spi((arg >> 24) & 0xff);
; 180 spi((arg >> 16) & 0xff);
; 181 spi((arg >> 8) & 0xff);
; 182 spi((arg >> 0) & 0xff);
; 183 spi(command == CMD_GO_IDLE_STATE ? 0x95 : 0xff);
; 184
; 185 for(i = 0; i < 10; ++i)
; 186 {
; 187 response = spi(0xff);
; 188 if(response != 0xff) break;
; 189 }
; 190 response <<= 8;
; 191 response |= spi(0xff);
; 192 return response;
; 193 } */
; 194 unsigned char read_data(unsigned long int adress, char* buffer)
; 195 {
_read_data:
; 196 unsigned long int block_adress;
; 197 unsigned int i;
; 198 block_adress = adress & 0xfffffe00;
SBIW R28,4
RCALL __SAVELOCR2
; adress -> Y+8
; *buffer -> Y+6
; block_adress -> Y+2
; i -> R16,R17
__GETD1S 8
ANDI R30,LOW(0xFFFFFE00)
ANDI R31,HIGH(0xFFFFFE00)
RCALL SUBOPT_0x5
; 199 spi(0xff);
RCALL SUBOPT_0xA
; 200 select_card();
CBI 0x18,2
; 201 if(sd_send_command_r1(CMD_READ_SINGLE_BLOCK, block_adress))
LDI R30,LOW(17)
ST -Y,R30
__GETD1S 3
RCALL __PUTPARD1
RCALL _sd_send_command_r1
CPI R30,0
BREQ _0x25
; 202 {
; 203 unselect_card();
RCALL SUBOPT_0xD
; 204 return 0;
RJMP _0x41
; 205 }
; 206 while(1)
_0x25:
_0x26:
; 207 {
; 208 if (spi(0xff) == 0xfe) break;
RCALL SUBOPT_0xA
CPI R30,LOW(0xFE)
BREQ _0x28
; 209 };
RJMP _0x26
_0x28:
; 210 for(i = 0; i < 512; ++i) {
__GETWRN 16,17,0
_0x2B:
__CPWRN 16,17,512
BRSH _0x2C
; 211 *buffer++ = spi(0xff);
LDD R30,Y+6
LDD R31,Y+6+1
ADIW R30,1
STD Y+6,R30
STD Y+6+1,R31
SBIW R30,1
PUSH R31
PUSH R30
RCALL SUBOPT_0xA
POP R26
POP R27
ST X,R30
; 212 };
__ADDWRN 16,17,1
RJMP _0x2B
_0x2C:
; 213 spi(0xff);
RCALL SUBOPT_0xA
; 214 spi(0xff);
RCALL SUBOPT_0xA
; 215 unselect_card();
SBI 0x18,2
; 216 spi(0xff);
RCALL SUBOPT_0xA
; 217 return 1;
LDI R30,LOW(1)
_0x41:
RCALL __LOADLOCR2
ADIW R28,12
RET
; 218 }
; 219 #include "partition.h"
; 220 #include "sd.h"
; 221
; 222 unsigned char open_partition(struct partition_description* pd){
_open_partition:
; 223 unsigned char buffer[512];
; 224 if (!read_data(0x00000000, buffer))
SUBI R29,2
; *pd -> Y+512
; buffer -> Y+0
__GETD1N 0x0
RCALL __PUTPARD1
MOVW R30,R28
ADIW R30,4
RCALL SUBOPT_0x2
RCALL _read_data
CPI R30,0
BRNE _0x2D
; 225 return 0;
LDI R30,LOW(0)
RJMP _0x40
; 226 pd->Byte_per_Sector = ((unsigned int) buffer[0xc]<<8) | ((unsigned int) buffer[0xb]);
_0x2D:
LDI R30,0
LDD R31,Y+12
MOVW R26,R30
LDD R30,Y+11
RCALL SUBOPT_0x12
__PUTW1SNX 512,8
; 227 pd->Sectors_per_Claster = buffer[0xd];
LDD R30,Y+13
RCALL SUBOPT_0x13
ST X,R30
; 228 pd->Rezerv = ((unsigned int) buffer[0xf]<<8) | ((unsigned int) buffer[0xe]);
LDI R30,0
LDD R31,Y+15
MOVW R26,R30
LDD R30,Y+14
RCALL SUBOPT_0x12
__PUTW1SNX 512,2
; 229 pd->Number_of_FAT = buffer[0x10];
LDD R30,Y+16
__PUTB1SNX 512,1
; 230 pd->Root_dir_entry = ((unsigned int) buffer[0x12]<<8) | ((unsigned int) buffer[0x11]);
LDI R30,0
LDD R31,Y+18
MOVW R26,R30
LDD R30,Y+17
RCALL SUBOPT_0x12
__PUTW1SNX 512,4
; 231 pd->Sectors_per_FAT = ((unsigned int) buffer[0x17]<<8) | ((unsigned int) buffer[0x16]);
LDI R30,0
LDD R31,Y+23
MOVW R26,R30
LDD R30,Y+22
RCALL SUBOPT_0x12
__PUTW1SNX 512,6
; 232 pd->Sectors = ((unsigned long int) buffer[0x23]<<24) | ((unsigned long int) buffer[0x22]<<16) | ((unsigned long int) buffer[0x21]<<8) | ((unsigned long int) buffer[0x20]);
LDD R30,Y+35
RCALL SUBOPT_0x14
LDI R30,LOW(24)
RCALL __LSLD12
MOVW R26,R30
MOVW R24,R22
LDD R30,Y+34
RCALL SUBOPT_0x4
RCALL __LSLD16
RCALL __ORD12
PUSH R23
PUSH R22
PUSH R31
PUSH R30
LDD R30,Y+33
RCALL SUBOPT_0x14
LDI R30,LOW(8)
RCALL __LSLD12
POP R26
POP R27
POP R24
POP R25
RCALL __ORD12
MOVW R26,R30
MOVW R24,R22
LDD R30,Y+32
RCALL SUBOPT_0x4
RCALL __ORD12
__PUTD1SNX 512,10
; 233 pd->FAT_base = ((unsigned long int) pd->Rezerv) * ((unsigned long int) pd->Byte_per_Sector);
RCALL SUBOPT_0x13
ADIW R26,2
RCALL SUBOPT_0x15
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x13
ADIW R26,8
RCALL SUBOPT_0x15
POP R26
POP R27
POP R24
POP R25
RCALL __MULD12U
__PUTD1SNX 512,14
; 234 putchar((unsigned char) (pd->FAT_base>>24));
RCALL SUBOPT_0x16
RCALL SUBOPT_0x17
; 235 putchar((unsigned char) (pd->FAT_base>>16));
RCALL SUBOPT_0x13
ADIW R26,14
RCALL SUBOPT_0x18
; 236 putchar((unsigned char) (pd->FAT_base>>8));
RCALL SUBOPT_0x16
RCALL SUBOPT_0x19
; 237 putchar((unsigned char) pd->FAT_base);
RCALL SUBOPT_0x1A
LDD R26,Z+14
RCALL SUBOPT_0x1B
; 238 pd->FAT_size = ((unsigned long int) pd->Number_of_FAT) * ((unsigned long int) pd->Sectors_per_FAT) * ((unsigned long int) pd->Byte_per_Sector);
RCALL SUBOPT_0x13
ADIW R26,1
LD R30,X
RCALL SUBOPT_0x4
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x13
ADIW R26,6
RCALL SUBOPT_0x15
POP R26
POP R27
POP R24
POP R25
RCALL __MULD12U
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x13
ADIW R26,8
RCALL SUBOPT_0x15
POP R26
POP R27
POP R24
POP R25
RCALL __MULD12U
__PUTD1SNX 512,26
; 239 putchar((unsigned char) (pd->FAT_size>>24));
RCALL SUBOPT_0x1C
RCALL SUBOPT_0x17
; 240 putchar((unsigned char) (pd->FAT_size>>16));
RCALL SUBOPT_0x13
ADIW R26,26
RCALL SUBOPT_0x18
; 241 putchar((unsigned char) (pd->FAT_size>>8));
RCALL SUBOPT_0x1C
RCALL SUBOPT_0x19
; 242 putchar((unsigned char) pd->FAT_size);
RCALL SUBOPT_0x1A
LDD R26,Z+26
RCALL SUBOPT_0x1B
; 243 pd->Root_base = pd->FAT_base + pd->FAT_size;
RCALL SUBOPT_0x16
MOVW R24,R26
RCALL SUBOPT_0x1D
RCALL __ADDD12
__PUTD1SNX 512,18
; 244 putchar((unsigned char) (pd->Root_base>>24));
RCALL SUBOPT_0x1A
RCALL SUBOPT_0x1
RCALL SUBOPT_0x17
; 245 putchar((unsigned char) (pd->Root_base>>16));
RCALL SUBOPT_0x13
ADIW R26,18
RCALL SUBOPT_0x18
; 246 putchar((unsigned char) (pd->Root_base>>8));
RCALL SUBOPT_0x1A
RCALL SUBOPT_0x1
RCALL SUBOPT_0x19
; 247 putchar((unsigned char) pd->Root_base);
RCALL SUBOPT_0x1A
LDD R26,Z+18
RCALL SUBOPT_0x1B
; 248 pd->Root_size = pd->Root_dir_entry * 32;
RCALL SUBOPT_0x13
ADIW R26,4
RCALL __GETW1P
LSL R30
ROL R31
RCALL __LSLW4
RCALL SUBOPT_0x13
ADIW R26,30
CLR R22
CLR R23
RCALL __PUTDP1
; 249 pd->Claster_base = pd->Root_base + pd->Root_size;
RCALL SUBOPT_0x1A
RCALL SUBOPT_0x1
MOVW R24,R26
RCALL SUBOPT_0x13
ADIW R26,30
RCALL __GETD1P
MOVW R26,R24
RCALL __ADDD12
__PUTD1SNX 512,22
; 250 pd->Claster_size = pd->Sectors * pd->Byte_per_Sector - (pd->Rezerv * pd->Byte_per_Sector + pd->FAT_size + pd->Root_size);
RCALL SUBOPT_0x1A
__GETD2Z 10
MOVW R22,R26
RCALL SUBOPT_0x1E
CLR R22
CLR R23
RCALL __MULD12U
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x1A
__GETWRZ 22,23,2
RCALL SUBOPT_0x1E
RCALL __MULW12U
MOVW R24,R30
RCALL SUBOPT_0x1D
CLR R24
CLR R25
RCALL __ADDD12
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x13
ADIW R26,30
RCALL __GETD1P
POP R26
POP R27
POP R24
POP R25
RCALL __ADDD12
POP R26
POP R27
POP R24
POP R25
RCALL __SWAPD12
RCALL __SUBD12
__PUTD1SNX 512,34
; 251 putchar((unsigned char) (pd->Claster_base>>24));
RCALL SUBOPT_0x1F
RCALL SUBOPT_0x17
; 252 putchar((unsigned char) (pd->Claster_base>>16));
RCALL SUBOPT_0x13
ADIW R26,22
RCALL SUBOPT_0x18
; 253 putchar((unsigned char) (pd->Claster_base>>8));
RCALL SUBOPT_0x1F
RCALL SUBOPT_0x19
; 254 putchar((unsigned char) pd->Claster_base);
RCALL SUBOPT_0x1A
LDD R26,Z+22
RCALL SUBOPT_0x1B
; 255 if (!pd->FAT_base | !pd->Root_base | !pd->Claster_base)
RCALL SUBOPT_0x13
ADIW R26,14
RCALL __GETD1P
RCALL __LNEGD1
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x13
ADIW R26,18
RCALL __GETD1P
RCALL __LNEGD1
POP R26
POP R27
POP R24
POP R25
RCALL __ORD12
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x13
ADIW R26,22
RCALL __GETD1P
RCALL __LNEGD1
POP R26
POP R27
POP R24
POP R25
RCALL __ORD12
RCALL __CPD10
BREQ _0x2E
; 256 return 0;
LDI R30,LOW(0)
RJMP _0x40
; 257 return 1;
_0x2E:
LDI R30,LOW(1)
_0x40:
ADIW R28,2
SUBI R29,-2
RET
; 258 }
; 259
; 260 /*unsigned char close_partition(struct partition_description* pd){
; 261 return 1;
; 262 } */
; 263 unsigned int open_dir(unsigned long int offset, unsigned long int size, void* p){
_open_dir:
; 264 unsigned char buffer[512], count;
; 265 unsigned int i, k, index;
; 266 struct entry_description* ed1;// = p;
; 267 p = ed1;
SBIW R28,4
SUBI R29,2
RCALL __SAVELOCR5
; offset -> Y+527
; size -> Y+523
; *p -> Y+521
; buffer -> Y+9
; count -> R16
; i -> R17,R18
; k -> R19,R20
; index -> Y+7
; *ed1 -> Y+5
LDD R30,Y+5
LDD R31,Y+5+1
__PUTW1SX 521
; 268 index = 0;
LDI R30,0
STD Y+7,R30
STD Y+7+1,R30
; 269 count = size/512;
__GETD2SX 523
RCALL SUBOPT_0xE
RCALL __DIVD21U
MOV R16,R30
; 270 for(k=0; k<count; ++k){
__GETWRN 19,20,0
_0x30:
MOV R30,R16
__GETW2R 19,20
LDI R31,0
CP R26,R30
CPC R27,R31
BRLO PC+2
RJMP _0x31
; 271 if (!read_data(offset, buffer))
__GETD1SX 527
RCALL __PUTPARD1
MOVW R30,R28
ADIW R30,13
RCALL SUBOPT_0x2
RCALL _read_data
CPI R30,0
BRNE _0x32
; 272 return 0;
LDI R30,LOW(0)
LDI R31,HIGH(0)
RJMP _0x3F
; 273 for(i=0; i<16; i++){
_0x32:
RCALL SUBOPT_0x9
_0x34:
__CPWRN 17,18,16
BRLO PC+2
RJMP _0x35
; 274 if(buffer[32*i] == 0xe5 || !buffer[32*i] || buffer[32*i+11] == 0x0f || (buffer[32*i+11] == 0x20)) continue;
RCALL SUBOPT_0x20
LD R26,X
CPI R26,LOW(0xE5)
BREQ _0x37
RCALL SUBOPT_0x20
LD R30,X
CPI R30,0
BREQ _0x37
RCALL SUBOPT_0x21
CPI R26,LOW(0xF)
BREQ _0x37
RCALL SUBOPT_0x21
CPI R26,LOW(0x20)
BRNE _0x36
_0x37:
RJMP _0x33
; 275 ++index;
_0x36:
LDD R30,Y+7
LDD R31,Y+7+1
ADIW R30,1
STD Y+7,R30
STD Y+7+1,R31
; 276 if (buffer[32*i+11] & 0x10) ed1->type = DIR else ed1->type = FILE;
RCALL SUBOPT_0x22
ADIW R30,11
RCALL SUBOPT_0x23
ANDI R30,LOW(0x10)
BREQ _0x39
LDD R26,Y+5
LDD R27,Y+5+1
ADIW R26,11
LDI R30,LOW(1)
RJMP _0x43
_0x39:
LDD R26,Y+5
LDD R27,Y+5+1
ADIW R26,11
LDI R30,LOW(0)
_0x43:
ST X,R30
; 277 ed1->file_name[0] = buffer[32*i];
RCALL SUBOPT_0x20
LD R30,X
LDD R26,Y+5
LDD R27,Y+5+1
ST X,R30
; 278 ed1->file_name[1] = buffer[32*i+1];
RCALL SUBOPT_0x22
ADIW R30,1
RCALL SUBOPT_0x23
__PUTB1SNS 5,1
; 279 ed1->file_name[2] = buffer[32*i+2];
RCALL SUBOPT_0x22
ADIW R30,2
RCALL SUBOPT_0x23
__PUTB1SNS 5,2
; 280 ed1->file_name[3] = buffer[32*i+3];
RCALL SUBOPT_0x22
ADIW R30,3
RCALL SUBOPT_0x23
__PUTB1SNS 5,3
; 281 ed1->file_name[4] = buffer[32*i+4];
RCALL SUBOPT_0x22
ADIW R30,4
RCALL SUBOPT_0x23
__PUTB1SNS 5,4
; 282 ed1->file_name[5] = buffer[32*i+5];
RCALL SUBOPT_0x22
ADIW R30,5
RCALL SUBOPT_0x23
__PUTB1SNS 5,5
; 283 ed1->file_name[6] = buffer[32*i+6];
RCALL SUBOPT_0x22
ADIW R30,6
RCALL SUBOPT_0x23
__PUTB1SNS 5,6
; 284 ed1->file_name[7] = buffer[32*i+7];
RCALL SUBOPT_0x22
ADIW R30,7
RCALL SUBOPT_0x23
__PUTB1SNS 5,7
; 285 ed1->file_ex[0] = buffer[32*i+8];
RCALL SUBOPT_0x22
ADIW R30,8
RCALL SUBOPT_0x23
__PUTB1SNS 5,8
; 286 ed1->file_ex[1] = buffer[32*i+9];
RCALL SUBOPT_0x22
ADIW R30,9
RCALL SUBOPT_0x23
__PUTB1SNS 5,9
; 287 ed1->file_ex[2] = buffer[32*i+10];
RCALL SUBOPT_0x22
ADIW R30,10
RCALL SUBOPT_0x23
__PUTB1SNS 5,10
; 288 ed1->starting_claster = ((unsigned int) buffer[32*i+27]<<8) | ((unsigned int) buffer[32*i+26]);
RCALL SUBOPT_0x22
ADIW R30,27
RCALL SUBOPT_0x23
MOV R31,R30
LDI R30,0
MOVW R22,R30
RCALL SUBOPT_0x22
ADIW R30,26
RCALL SUBOPT_0x23
LDI R31,0
OR R30,R22
OR R31,R23
__PUTW1SNS 5,12
; 289 ed1->file_size = ((unsigned long int) buffer[32*i+31]<<24) | ((unsigned long int) buffer[32*i+30]<<16) | ((unsigned long int) buffer[32*i+29]<<8) | ((unsigned long int) buffer[32*i+28]);
RCALL SUBOPT_0x22
ADIW R30,31
RCALL SUBOPT_0x23
RCALL SUBOPT_0x14
LDI R30,LOW(24)
RCALL __LSLD12
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x22
ADIW R30,30
RCALL SUBOPT_0x23
RCALL SUBOPT_0x4
RCALL __LSLD16
POP R26
POP R27
POP R24
POP R25
RCALL __ORD12
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x22
ADIW R30,29
RCALL SUBOPT_0x23
RCALL SUBOPT_0x14
LDI R30,LOW(8)
RCALL __LSLD12
POP R26
POP R27
POP R24
POP R25
RCALL __ORD12
PUSH R23
PUSH R22
PUSH R31
PUSH R30
RCALL SUBOPT_0x22
ADIW R30,28
RCALL SUBOPT_0x23
RCALL SUBOPT_0x4
POP R26
POP R27
POP R24
POP R25
RCALL __ORD12
__PUTD1SNS 5,16
; 290 ed1->number = index;
LDD R30,Y+7
LDD R31,Y+7+1
__PUTW1SNS 5,14
; 291 ++ed1;
LDD R30,Y+5
LDD R31,Y+5+1
ADIW R30,20
STD Y+5,R30
STD Y+5+1,R31
; 292 }
_0x33:
RCALL SUBOPT_0xB
RJMP _0x34
_0x35:
; 293 }
__ADDWRN 19,20,1
RJMP _0x30
_0x31:
; 294 return index;
LDD R30,Y+7
LDD R31,Y+7+1
_0x3F:
RCALL __LOADLOCR5
ADIW R28,19
SUBI R29,-2
RET
; 295 }

_getchar:
sbis usr,rxc
rjmp _getchar
in r30,udr
RET
_putchar:
sbis usr,udre
rjmp _putchar
ld r30,y
out udr,r30
RJMP _0x3E
_spi:
LD R30,Y
OUT 0xF,R30
_0x3B:
SBIS 0xE,7
RJMP _0x3B
IN R30,0xF
_0x3E:
ADIW R28,1
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x0:
ST -Y,R31
ST -Y,R30
RJMP _putsf

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:7 WORDS
SUBOPT_0x1:
__GETD2Z 18
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 8 TIMES, CODE SIZE REDUCTION:5 WORDS
SUBOPT_0x2:
ST -Y,R31
ST -Y,R30
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 14 TIMES, CODE SIZE REDUCTION:11 WORDS
SUBOPT_0x3:
ST -Y,R30
RJMP _putchar

;OPTIMIZER ADDED SUBROUTINE, CALLED 13 TIMES, CODE SIZE REDUCTION:22 WORDS
SUBOPT_0x4:
CLR R31
CLR R22
CLR R23
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 8 TIMES, CODE SIZE REDUCTION:19 WORDS
SUBOPT_0x5:
__PUTD1S 2
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:13 WORDS
SUBOPT_0x6:
__GETD2S 2
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x7:
LDI R30,LOW(8)
RCALL __LSLD12
RJMP SUBOPT_0x5

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:3 WORDS
SUBOPT_0x8:
RCALL SUBOPT_0x6
RCALL SUBOPT_0x4
RCALL __ADDD12
RCALL SUBOPT_0x5
RCALL SUBOPT_0x6
RJMP SUBOPT_0x7

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x9:
__GETWRN 17,18,0
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 8 TIMES, CODE SIZE REDUCTION:12 WORDS
SUBOPT_0xA:
LDI R30,LOW(255)
ST -Y,R30
RJMP _spi

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0xB:
__ADDWRN 17,18,1
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:5 WORDS
SUBOPT_0xC:
ST -Y,R30
__GETD1N 0x0
RCALL __PUTPARD1
RCALL _sd_send_command_r1
MOV R16,R30
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0xD:
SBI 0x18,2
LDI R30,LOW(0)
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0xE:
__GETD1N 0x200
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:3 WORDS
SUBOPT_0xF:
ST -Y,R30
RJMP _spi

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:10 WORDS
SUBOPT_0x10:
__ANDD1N 0xFF
RJMP SUBOPT_0xF

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x11:
__GETD1S 2
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:10 WORDS
SUBOPT_0x12:
LDI R31,0
OR R30,R26
OR R31,R27
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 21 TIMES, CODE SIZE REDUCTION:98 WORDS
SUBOPT_0x13:
__GETW2SX 512
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x14:
RCALL SUBOPT_0x4
MOVW R26,R30
MOVW R24,R22
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x15:
RCALL __GETW1P
CLR R22
CLR R23
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:16 WORDS
SUBOPT_0x16:
__GETW1SX 512
__GETD2Z 14
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x17:
LDI R30,LOW(24)
RCALL __LSRD12
RJMP SUBOPT_0x3

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x18:
RCALL __GETD1P
RCALL __LSRD16
RJMP SUBOPT_0x3

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x19:
LDI R30,LOW(8)
RCALL __LSRD12
RJMP SUBOPT_0x3

;OPTIMIZER ADDED SUBROUTINE, CALLED 13 TIMES, CODE SIZE REDUCTION:58 WORDS
SUBOPT_0x1A:
__GETW1SX 512
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x1B:
ST -Y,R26
RJMP _putchar

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x1C:
RCALL SUBOPT_0x1A
__GETD2Z 26
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x1D:
RCALL SUBOPT_0x13
ADIW R26,26
RCALL __GETD1P
MOVW R26,R24
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x1E:
RCALL SUBOPT_0x13
ADIW R26,8
RCALL __GETW1P
MOVW R26,R22
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x1F:
RCALL SUBOPT_0x1A
__GETD2Z 22
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:14 WORDS
SUBOPT_0x20:
__MULBNWRU 17,18,32
MOVW R26,R28
ADIW R26,9
ADD R26,R30
ADC R27,R31
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:8 WORDS
SUBOPT_0x21:
__MULBNWRU 17,18,32
ADIW R30,11
MOVW R26,R28
ADIW R26,9
ADD R26,R30
ADC R27,R31
LD R26,X
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 17 TIMES, CODE SIZE REDUCTION:62 WORDS
SUBOPT_0x22:
__MULBNWRU 17,18,32
RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 17 TIMES, CODE SIZE REDUCTION:62 WORDS
SUBOPT_0x23:
MOVW R26,R28
ADIW R26,9
ADD R26,R30
ADC R27,R31
LD R30,X
RET

_gets:
ldd r27,y+3
ldd r26,y+2
ldd r25,y+1
ld r24,y
adiw r24,0
breq __gets2
__gets0:
push r24
push r25
push r26
push r27
rcall _getchar
pop r27
pop r26
pop r25
pop r24
cpi r30,8
brne __gets3
ld r30,y
cp r24,r30
ldd r30,y+1
cpc r25,r30
brge __gets0
adiw r24,1
sbiw r26,1
rjmp __gets0
__gets3:
cpi r30,10
breq __gets1
st x+,r30
sbiw r24,1
brne __gets0
__gets1:
clr r30
st x,r30
ldd r30,y+2
ldd r31,y+3
__gets2:
adiw r28,4
ret

_puts:
ld r30,y+
ld r31,y+
__puts0:
ld r22,z+
tst r22
breq __puts1
push r30
push r31
rcall __puts2
pop r31
pop r30
rjmp __puts0
__puts1:
ldi r22,10
__puts2:
st -y,r22
rjmp _putchar

_putsf:
ld r30,y+
ld r31,y+
__putsf0:
lpm r0,z+
tst r0
breq __putsf1
push r30
push r31
rcall __putsf2
pop r31
pop r30
rjmp __putsf0
__putsf1:
ldi r22,10
mov r0,r22
__putsf2:
st -y,r0
rjmp _putchar

_strcat:
ld r30,y+
ld r31,y+
ld r26,y+
ld r27,y+
movw r24,r26
__strcat0:
ld r22,x+
tst r22
brne __strcat0
sbiw r26,1
__strcat1:
ld r22,z+
st x+,r22
tst r22
brne __strcat1
movw r30,r24
ret

__ADDD12:
ADD R30,R26
ADC R31,R27
ADC R22,R24
ADC R23,R25
RET

__SUBD12:
SUB R30,R26
SBC R31,R27
SBC R22,R24
SBC R23,R25
RET

__ORD12:
OR R30,R26
OR R31,R27
OR R22,R24
OR R23,R25
RET

__LSLD12:
TST R30
MOV R0,R30
MOVW R30,R26
MOVW R22,R24
BREQ __LSLD12R
__LSLD12L:
LSL R30
ROL R31
ROL R22
ROL R23
DEC R0
BRNE __LSLD12L
__LSLD12R:
RET

__LSRD12:
TST R30
MOV R0,R30
MOVW R30,R26
MOVW R22,R24
BREQ __LSRD12R
__LSRD12L:
LSR R23
ROR R22
ROR R31
ROR R30
DEC R0
BRNE __LSRD12L
__LSRD12R:
RET

__LSLW4:
LSL R30
ROL R31
__LSLW3:
LSL R30
ROL R31
__LSLW2:
LSL R30
ROL R31
LSL R30
ROL R31
RET

__LSRD16:
MOV R30,R22
MOV R31,R23
LDI R22,0
LDI R23,0
RET

__LSLD16:
MOV R22,R30
MOV R23,R31
LDI R30,0
LDI R31,0
RET

__LNEGD1:
SBIW R30,0
SBCI R22,0
SBCI R23,0
LDI R30,1
LDI R31,0
LDI R22,0
LDI R23,0
BREQ __LNEGD1F
CLR R30
__LNEGD1F:
RET

__MULW12U:
MUL R31,R26
MOV R31,R0
MUL R30,R27
ADD R31,R0
MUL R30,R26
MOV R30,R0
ADD R31,R1
RET

__MULD12U:
MUL R23,R26
MOV R23,R0
MUL R22,R27
ADD R23,R0
MUL R31,R24
ADD R23,R0
MUL R30,R25
ADD R23,R0
MUL R22,R26
MOV R22,R0
ADD R23,R1
MUL R31,R27
ADD R22,R0
ADC R23,R1
MUL R30,R24
ADD R22,R0
ADC R23,R1
CLR R24
MUL R31,R26
MOV R31,R0
ADD R22,R1
ADC R23,R24
MUL R30,R27
ADD R31,R0
ADC R22,R1
ADC R23,R24
MUL R30,R26
MOV R30,R0
ADD R31,R1
ADC R22,R24
ADC R23,R24
RET

__DIVD21U:
PUSH R19
PUSH R20
PUSH R21
CLR R0
CLR R1
CLR R20
CLR R21
LDI R19,32
__DIVD21U1:
LSL R26
ROL R27
ROL R24
ROL R25
ROL R0
ROL R1
ROL R20
ROL R21
SUB R0,R30
SBC R1,R31
SBC R20,R22
SBC R21,R23
BRCC __DIVD21U2
ADD R0,R30
ADC R1,R31
ADC R20,R22
ADC R21,R23
RJMP __DIVD21U3
__DIVD21U2:
SBR R26,1
__DIVD21U3:
DEC R19
BRNE __DIVD21U1
MOVW R30,R26
MOVW R22,R24
MOVW R26,R0
MOVW R24,R20
POP R21
POP R20
POP R19
RET

__GETW1P:
LD R30,X+
LD R31,X
SBIW R26,1
RET

__GETD1P:
LD R30,X+
LD R31,X+
LD R22,X+
LD R23,X
SBIW R26,3
RET

__PUTDP1:
ST X+,R30
ST X+,R31
ST X+,R22
ST X,R23
RET

__PUTPARD1:
ST -Y,R23
ST -Y,R22
ST -Y,R31
ST -Y,R30
RET

__PUTPARD2:
ST -Y,R25
ST -Y,R24
ST -Y,R27
ST -Y,R26
RET

__SWAPD12:
MOV R1,R24
MOV R24,R22
MOV R22,R1
MOV R1,R25
MOV R25,R23
MOV R23,R1

__SWAPW12:
MOV R1,R27
MOV R27,R31
MOV R31,R1

__SWAPB12:
MOV R1,R26
MOV R26,R30
MOV R30,R1
RET

__CPD10:
SBIW R30,0
SBCI R22,0
SBCI R23,0
RET

__SAVELOCR5:
ST -Y,R20
__SAVELOCR4:
ST -Y,R19
__SAVELOCR3:
ST -Y,R18
__SAVELOCR2:
ST -Y,R17
ST -Y,R16
RET

__LOADLOCR5:
LDD R20,Y+4
__LOADLOCR4:
LDD R19,Y+3
__LOADLOCR3:
LDD R18,Y+2
__LOADLOCR2:
LDD R17,Y+1
LD R16,Y
RET

;END OF CODE MARKER
__END_OF_CODE:


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 63:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru