avra ver. 0.4 sm.asm Thu Jul 5 01:21:33 2001 .list .equ RAMTOP =$60 .equ BUFLEN =32 ; Port C .equ CLE =0 .equ ALE =1 .equ WE =2 .equ CE =3 .equ RE =4 .equ RB =5 ; Port D .equ SW =2 .equ SENS =4 .equ WP =5 .equ PW =6 .equ LED =7 .dseg .org RAMTOP ; Line buffer 000060 lbuf: .byte BUFLEN 000080 llen: .byte 1 ; Media Type 000081 valid: .byte 1 ; 0:Unknown, 1:addr3, 2:addr4 000082 msize: .byte 1 ; 2:4MB, 3:8MB, 4:16MB, 5:32MB, 6:64MB, 7:128MB 000083 man_id: .byte 1 ; Manufacturor ID 000084 dev_id: .byte 1 ; Device ID ; Last page 000085 lpage: .byte 4 ; Binary mode 000089 curcmd: .byte 1 ; Current command code .eseg .db 0 .cseg ; Interrupt Vectors 000000 c00c rjmp initial ; Reset 000001 c03a rjmp intr_media ; External INT0 (SW) 000002 cffd rjmp 0 ; External INT1 000003 cffc rjmp 0 ; TC1 Capture 000004 cffb rjmp 0 ; TC1 CMA 000005 cffa rjmp 0 ; TC1 CMB 000006 cff9 rjmp 0 ; TC1 Overflow 000007 cff8 rjmp 0 ; TC0 Overflow 000008 cff7 rjmp 0 ; SPI 000009 cff6 rjmp 0 ; UART Rx 00000a cff5 rjmp 0 ; UART Udre 00000b cff4 rjmp 0 ; UART Tx 00000c cff3 rjmp 0 ; Analog Comparator initial: 00000d 94f8 cli ; Initialize stack pointer 00000e e50f ldi r16,low(RAMEND) 00000f bf0d out SPL,r16 000010 e002 ldi r16,high(RAMEND) 000011 bf0e out SPH,r16 ; Initialize port A (IO1..IO8) 000012 ef0f ldi r16,0xff 000013 bb0a out DDRA,r16 ; Output 000014 2700 clr r16 000015 bb0b out PORTA,r16 ; Low level ; Initialize port C (control lines) ; Bit 0 : CLE ; Bit 1 : ALE ; Bit 2 : ~WE ; Bit 3 : ~CE ; Bit 4 : ~RE ; Bit 5 : R/~B 000016 e000 ldi r16,0b00000000 000017 bb05 out PORTC,r16 000018 e30f ldi r16,0b00111111 000019 bb04 out DDRC,r16 ; Initialize port D ; Bit 0 : RxD (UART) ; Bit 1 : TxD (UART) ; Bit 2 : Media SW (0:MediaIn, 1:MediaOut) ; Bit 4 : Protect sense (0:Protect, 1:Writable) ; Bit 5 : WP (0:Writable, 1:Protect) ; Bit 6 : Power control (0:Off, 1:On) ; Bit 7 : LED (0:Off, 1:On) 00001a e200 ldi r16,0b00100000 00001b bb02 out PORTD,r16 00001c ee02 ldi r16,0b11100010 00001d bb01 out DDRD,r16 ; Initialize UART 00001e e109 ldi r16,25 ; 19200bps (8MHz) 00001f b909 out UBRR,r16 000020 e108 ldi r16,0b00011000 ; Enable Tx/Rx 000021 b90a out UCR,r16 ; Initialize internal variables 000022 2700 clr r16 000023 9300 0081 sts valid,r16 ; Invalidate card type 000025 9300 0085 sts lpage+0,r16 ; Start from page 0 000027 9300 0086 sts lpage+1,r16 000029 9300 0087 sts lpage+2,r16 00002b 9300 0088 sts lpage+3,r16 ; Prepare Media interrupt 00002d e400 ldi r16,0b01000000 ; Enable INT0 00002e bf0b out GIMSK,r16 00002f e003 ldi r16,0b00000011 ; Rising edge of INT0 000030 bf05 out MCUCR,r16 000031 9478 sei ; Enable interrupt ; Opening message 000032 e4ea ldi ZL,low(opnmsg) 000033 e0f3 ldi ZH,high(opnmsg) 000034 d049 rcall msgout wstart: 000035 e30e ldi r16,'>' 000036 d043 rcall conout 000037 e200 ldi r16,' ' 000038 d041 rcall conout 000039 d009 rcall getl 00003a d093 rcall cmd 00003b cff9 rjmp wstart ; Media remove interrupt handler intr_media: 00003c 930f push r16 00003d d20c rcall pwoff 00003e 2700 clr r16 00003f 9300 0081 sts valid,r16 000041 910f pop r16 000042 9518 reti getl: 000043 2700 clr r16 000044 9300 0080 sts llen,r16 000046 e6a0 ldi XL,low(lbuf) 000047 e0b0 ldi XH,high(lbuf) gl0: 000048 d029 rcall conin 000049 770f andi r16,0b01111111 ; rcall hexout ; rjmp gl0 00004a 3008 cpi r16,0x08 ; [BS] 00004b f011 breq gl1 00004c 370f cpi r16,0x7f ; [DEL] 00004d f479 brne gl2 gl1: 00004e 9100 0080 lds r16,llen 000050 2300 tst r16 000051 f059 breq gl2 000052 950a dec r16 000053 9300 0080 sts llen,r16 000055 910e ld r16,-X 000056 e008 ldi r16,0x08 000057 d022 rcall conout 000058 e200 ldi r16,' ' 000059 d020 rcall conout 00005a e008 ldi r16,0x08 00005b d01e rcall conout 00005c cfeb rjmp gl0 gl2: 00005d 300d cpi r16,0x0d ; [CR] 00005e f011 breq gl3 00005f 300a cpi r16,0x0a ; [LF] 000060 f411 brne gl4 gl3: 000061 d038 rcall crlf 000062 c00c rjmp gl9 gl4: 000063 3200 cpi r16,' ' 000064 f318 brcs gl0 ; Insert char. 000065 9110 0080 lds r17,llen 000067 311f cpi r17,(BUFLEN-1) 000068 f6f8 brcc gl0; 000069 9513 inc r17 00006a 9310 0080 sts llen,r17 00006c 930d st X+,r16 00006d d00c rcall conout 00006e cfd9 rjmp gl0 gl9: 00006f 2700 clr r16 000070 930c st X,r16 ; Terminate 000071 9508 ret conin: 000072 9b5f sbis USR,7 000073 cffe rjmp conin 000074 b10c in r16,UDR 000075 9508 ret const: 000076 2700 clr r16 000077 995f sbic USR,7 000078 e001 ldi r16,1 000079 9508 ret conout: 00007a 9b5d sbis USR,5 00007b cffe rjmp conout 00007c b90c out UDR,r16 00007d 9508 ret msgout: 00007e 9488 clc 00007f 1fee rol ZL 000080 1fff rol ZH mo0: 000081 95c8 lpm r0,Z 000082 9631 adiw ZL,1 000083 2000 tst r0 000084 f019 breq mo1 000085 2d00 mov r16,r0 000086 dff3 rcall conout 000087 cff9 rjmp mo0 mo1: 000088 9508 ret strout: 000089 9101 ld r16,Z+ 00008a 2300 tst r16 00008b f011 breq so0 00008c dfed rcall conout 00008d cffb rjmp strout so0: 00008e 9508 ret hexout: 00008f 2f20 mov r18,r16 000090 9502 swap r16 000091 d001 rcall ho0 000092 2f02 mov r16,r18 ho0: 000093 700f andi r16,0b00001111 000094 6300 ori r16,'0' 000095 330a cpi r16,'9'+1 000096 f010 brcs ho1 000097 e017 ldi r17,'A'-'9'-1 000098 0f01 add r16,r17 ho1: 000099 cfe0 rjmp conout crlf: 00009a e00d ldi r16,0x0d 00009b dfde rcall conout 00009c e00a ldi r16,0x0a 00009d dfdc rcall conout 00009e 9508 ret hexrd: 00009f 2488 clr r8 0000a0 24cc clr r12 ; LSB 0000a1 24dd clr r13 0000a2 24ee clr r14 0000a3 24ff clr r15 ; MSB hr00: 0000a4 910c ld r16,X 0000a5 5300 subi r16,'0' 0000a6 f0d0 brcs hr90 0000a7 300a cpi r16,10 0000a8 f408 brcc hr10 0000a9 c00b rjmp hr30 hr10: 0000aa 5101 subi r16,'A'-'0' 0000ab f0a8 brcs hr90 0000ac 3006 cpi r16,6 0000ad f410 brcc hr20 0000ae 5f06 subi r16,-10 0000af c005 rjmp hr30 hr20: 0000b0 5200 subi r16,'a'-'A' 0000b1 f078 brcs hr90 0000b2 3006 cpi r16,6 0000b3 f468 brcc hr90 0000b4 5f06 subi r16,-10 hr30: 0000b5 e014 ldi r17,4 hr31: 0000b6 9488 clc 0000b7 1ccc rol r12 0000b8 1cdd rol r13 0000b9 1cee rol r14 0000ba 1cff rol r15 0000bb 951a dec r17 0000bc f7c9 brne hr31 0000bd 2ac0 or r12,r16 0000be 9483 inc r8 0000bf 9611 adiw XL,1 0000c0 cfe3 rjmp hr00 hr90: 0000c1 9508 ret skipsp: 0000c2 910c ld r16,X 0000c3 2300 tst r16 0000c4 f021 breq ssret 0000c5 3200 cpi r16,' ' 0000c6 f411 brne ssret 0000c7 9611 adiw XL,1 0000c8 cff9 rjmp skipsp ssret: 0000c9 9508 ret cmderr: 0000ca e30f ldi r16,'?' 0000cb dfae rcall conout 0000cc dfcd rcall crlf cmderr2: 0000cd 9508 ret cmd: 0000ce e6a0 ldi XL,low(lbuf) 0000cf e0b0 ldi XH,high(lbuf) 0000d0 dff1 rcall skipsp 0000d1 910d ld r16,X+ 0000d2 2300 tst r16 0000d3 f409 brne cmd00 ; Null input 0000d4 9508 ret cmd00: ; 'i' Show media ID command 0000d5 3609 cpi r16,'i' 0000d6 f481 brne cmd10 0000d7 dfea rcall skipsp 0000d8 910c ld r16,X 0000d9 2300 tst r16 0000da f779 brne cmderr 0000db d0a6 rcall checkm 0000dc d0b8 rcall idread 0000dd 9100 0083 lds r16,man_id 0000df dfaf rcall hexout 0000e0 e200 ldi r16,' ' 0000e1 df98 rcall conout 0000e2 9100 0084 lds r16,dev_id 0000e4 dfaa rcall hexout 0000e5 dfb4 rcall crlf 0000e6 9508 ret cmd10: ; 'd' Dump page command 0000e7 3604 cpi r16,'d' 0000e8 f009 breq cmd11 0000e9 c067 rjmp cmd20 cmd11: 0000ea 24cc clr r12 0000eb 24dd clr r13 0000ec 24ee clr r14 0000ed 24ff clr r15 0000ee dfd3 rcall skipsp 0000ef 910c ld r16,X 0000f0 2300 tst r16 0000f1 f0b1 breq cmd12 ; No page given 0000f2 dfac rcall hexrd 0000f3 dfce rcall skipsp 0000f4 92c0 0085 sts lpage+0,r12 0000f6 92d0 0086 sts lpage+1,r13 0000f8 92e0 0087 sts lpage+2,r14 0000fa 92f0 0088 sts lpage+3,r15 0000fc 910c ld r16,X 0000fd 2300 tst r16 0000fe f049 breq cmd12 0000ff 320c cpi r16,',' 000100 f649 brne cmderr ; Trailing garbage found 000101 9611 adiw XL,1 000102 dfbf rcall skipsp 000103 df9b rcall hexrd 000104 dfbd rcall skipsp 000105 910c ld r16,X 000106 2300 tst r16 000107 f611 brne cmderr ; Trailing garbage found cmd12: 000108 d079 rcall checkm 000109 d080 rcall checki 00010a d0dd rcall ropen 00010b e230 ldi r19,32 00010c 2744 clr r20 cmd13: 00010d d146 rcall lpout 00010e e30a ldi r16,':' 00010f df6a rcall conout 000110 2f04 mov r16,r20 000111 df7d rcall hexout 000112 e300 ldi r16,'0' 000113 df66 rcall conout 000114 d148 rcall dumpl 000115 9543 inc r20 000116 953a dec r19 000117 f7a9 brne cmd13 000118 d13b rcall lpout 000119 e30a ldi r16,':' 00011a df5f rcall conout 00011b e20a ldi r16,'*' 00011c df5d rcall conout 00011d df5c rcall conout 00011e df5b rcall conout 00011f d13d rcall dumpl 000120 d0d5 rcall rclose 000121 2711 clr r17 000122 9408 sec 000123 9100 0085 lds r16,lpage+0 000125 1f01 adc r16,r17 000126 9300 0085 sts lpage+0,r16 000128 9100 0086 lds r16,lpage+1 00012a 1f01 adc r16,r17 00012b 9300 0086 sts lpage+1,r16 00012d 9100 0087 lds r16,lpage+2 00012f 1f01 adc r16,r17 000130 9300 0087 sts lpage+2,r16 000132 9100 0088 lds r16,lpage+3 000134 1f01 adc r16,r17 000135 9300 0088 sts lpage+3,r16 000137 df3e rcall const 000138 2300 tst r16 000139 f021 breq cmd14 00013a df37 rcall conin 00013b 3003 cpi r16,0x03 00013c f409 brne cmd14 00013d 9508 ret ; Break cmd14: 00013e 9100 0088 lds r16,lpage+3 000140 150f cp r16,r15 000141 f230 brcs cmd12 000142 9100 0087 lds r16,lpage+2 000144 150e cp r16,r14 000145 f210 brcs cmd12 000146 9100 0086 lds r16,lpage+1 000148 150d cp r16,r13 000149 f030 brcs cmd15 00014a 9100 0085 lds r16,lpage+0 00014c 150c cp r16,r12 00014d f010 brcs cmd15 00014e f009 breq cmd15 00014f 9508 ret cmd15: 000150 cfb7 rjmp cmd12 cmd20: ; 's' Status check command 000151 3703 cpi r16,'s' 000152 f451 brne cmd30 000153 df6e rcall skipsp 000154 910c ld r16,X 000155 2300 tst r16 000156 f009 breq cmd21 000157 cf72 rjmp cmderr cmd21: 000158 d029 rcall checkm 000159 d071 rcall stread 00015a df34 rcall hexout 00015b df3e rcall crlf 00015c 9508 ret cmd30: ; 'r' Reset command 00015d 3702 cpi r16,'r' 00015e f441 brne cmd40 00015f df62 rcall skipsp 000160 910c ld r16,X 000161 2300 tst r16 000162 f009 breq cmd31 000163 cf66 rjmp cmderr cmd31: 000164 d01d rcall checkm 000165 d071 rcall reset 000166 9508 ret cmd40: cmd90: ; 'b' Binary mode command 000167 3602 cpi r16,'b' 000168 f431 brne cmd95 000169 df58 rcall skipsp 00016a 910c ld r16,X 00016b 2300 tst r16 00016c f009 breq cmd91 00016d cf5c rjmp cmderr cmd91: 00016e c110 rjmp binmain cmd95: ; 'e' Echo command (for debugging purpose) 00016f 3605 cpi r16,'e' 000170 f481 brne cmd99 000171 df50 rcall skipsp 000172 910c ld r16,X 000173 2300 tst r16 000174 f061 breq cmd99 000175 df29 rcall hexrd 000176 2088 tst r8 000177 f049 breq cmd99 000178 2d0f mov r16,r15 000179 df15 rcall hexout 00017a 2d0e mov r16,r14 00017b df13 rcall hexout 00017c 2d0d mov r16,r13 00017d df11 rcall hexout 00017e 2d0c mov r16,r12 00017f df0f rcall hexout 000180 cf19 rjmp crlf cmd99: 000181 cf48 rjmp cmderr checkm: 000182 9b82 sbis PIND,2 000183 9508 ret 000184 e5e6 ldi ZL,low(encmsg) 000185 e0f3 ldi ZH,high(encmsg) 000186 def7 rcall msgout 000187 910f pop r16 ; Discard return address 000188 910f pop r16 000189 cf43 rjmp cmderr2 checki: 00018a 9100 0081 lds r16,valid 00018c 2300 tst r16 00018d f009 breq ci0 ; Unknown ID 00018e 9508 ret ci0: 00018f e5ec ldi ZL,low(eukmsg) 000190 e0f3 ldi ZH,high(eukmsg) 000191 deec rcall msgout 000192 910f pop r16 ; Discard return address 000193 910f pop r16 000194 cf38 rjmp cmderr2 ; Read ID idread: 000195 d0a5 rcall pwon 000196 98ab cbi PORTC,CE 000197 ef0f ldi r16,0xff 000198 bb0a out DDRA,r16 000199 9aa8 sbi PORTC,CLE 00019a e900 ldi r16,0x90 ; Read ID Command 00019b d09b rcall write 00019c 98a8 cbi PORTC,CLE 00019d 9aa9 sbi PORTC,ALE 00019e 2700 clr r16 ; Address 0 00019f d097 rcall write 0001a0 98a9 cbi PORTC,ALE 0001a1 2700 clr r16 0001a2 bb0a out DDRA,r16 0001a3 d08d rcall read 0001a4 9300 0083 sts man_id,r16 0001a6 d08a rcall read 0001a7 9300 0084 sts dev_id,r16 0001a9 9aab sbi PORTC,CE 0001aa e011 ldi r17,1 0001ab e022 ldi r18,2 0001ac 3e03 cpi r16,0xe3 ; 4MB 3.3V 0001ad f0c1 breq ir9 0001ae 3e05 cpi r16,0xe5 ; 4MB 0001af f0b1 breq ir9 0001b0 360b cpi r16,0x6b ; 4MB 5V 0001b1 f0a1 breq ir9 0001b2 9523 inc r18 0001b3 3e06 cpi r16,0xe6 ; 8MB 3.3V 0001b4 f089 breq ir9 0001b5 360d cpi r16,0x6d ; 8MB 5V 0001b6 f079 breq ir9 0001b7 9523 inc r18 0001b8 3703 cpi r16,0x73 ; 16MB 0001b9 f061 breq ir9 0001ba 9523 inc r18 0001bb 3705 cpi r16,0x75 ; 32MB 0001bc f049 breq ir9 0001bd 9513 inc r17 0001be 9523 inc r18 0001bf 3706 cpi r16,0x76 ; 64MB 0001c0 f029 breq ir9 0001c1 9523 inc r18 0001c2 3709 cpi r16,0x79 ; 128MB 0001c3 f011 breq ir9 0001c4 2711 clr r17 0001c5 2722 clr r18 ir9: 0001c6 9310 0081 sts valid,r17 0001c8 9320 0082 sts msize,r18 0001ca 9508 ret stread: 0001cb 98ab cbi PORTC,CE 0001cc ef0f ldi r16,0xff 0001cd bb0a out DDRA,r16 0001ce 9aa8 sbi PORTC,CLE 0001cf e700 ldi r16,0x70 ; Status Command 0001d0 d066 rcall write 0001d1 98a8 cbi PORTC,CLE 0001d2 2700 clr r16 0001d3 bb0a out DDRA,r16 0001d4 d05c rcall read 0001d5 9aab sbi PORTC,CE 0001d6 9508 ret reset: 0001d7 98ab cbi PORTC,CE 0001d8 ef0f ldi r16,0xff 0001d9 bb0a out DDRA,r16 0001da 9aa8 sbi PORTC,CLE 0001db ef0f ldi r16,0xff ; Reset Command 0001dc d05a rcall write 0001dd 98a8 cbi PORTC,CLE 0001de 2700 clr r16 0001df bb0a out DDRA,r16 0001e0 9aab sbi PORTC,CE 0001e1 9508 ret rxopen: 0001e2 98ab cbi PORTC,CE 0001e3 ef0f ldi r16,0xff 0001e4 bb0a out DDRA,r16 0001e5 9aa8 sbi PORTC,CLE 0001e6 e500 ldi r16,0x50 ; Read 3 Command 0001e7 c005 rjmp ro0 ropen: 0001e8 98ab cbi PORTC,CE 0001e9 ef0f ldi r16,0xff 0001ea bb0a out DDRA,r16 0001eb 9aa8 sbi PORTC,CLE 0001ec 2700 clr r16 ; Read 1 Command ro0: 0001ed d049 rcall write 0001ee 98a8 cbi PORTC,CLE 0001ef d020 rcall setadr 0001f0 2700 clr r16 0001f1 bb0a out DDRA,r16 0001f2 0000 nop ro1: 0001f3 9b9d sbis PINC,RB 0001f4 cffe rjmp ro1 0001f5 9508 ret rclose: 0001f6 9aab sbi PORTC,CE 0001f7 9508 ret wopen: 0001f8 98ab cbi PORTC,CE 0001f9 ef0f ldi r16,0xff 0001fa bb0a out DDRA,r16 0001fb 9aa8 sbi PORTC,CLE 0001fc 2700 clr r16 ; Read 1 (to reset Read 3 [0x50]) 0001fd d039 rcall write 0001fe 98a8 cbi PORTC,CLE 0001ff 9aa8 sbi PORTC,CLE 000200 e800 ldi r16,0x80 ; Page Program Command 000201 d035 rcall write 000202 98a8 cbi PORTC,CLE 000203 d00c rcall setadr 000204 9508 ret wclose: 000205 9aa8 sbi PORTC,CLE 000206 e100 ldi r16,0x10 ; Page Program Command (2) 000207 d02f rcall write 000208 98a8 cbi PORTC,CLE wclose2: 000209 9aab sbi PORTC,CE 00020a 2700 clr r16 00020b bb0a out DDRA,r16 00020c 0000 nop wc0: 00020d 9b9d sbis PINC,RB 00020e cffe rjmp wc0 00020f 9508 ret setadr: 000210 9aa9 sbi PORTC,ALE 000211 2700 clr r16 ; Beginning of page 000212 d024 rcall write setadrs: 000213 9aa9 sbi PORTC,ALE 000214 9100 0085 lds r16,lpage+0 ; LSB 000216 d020 rcall write 000217 9100 0086 lds r16,lpage+1 000219 d01d rcall write 00021a 9100 0081 lds r16,valid 00021c 3002 cpi r16,2 00021d f018 brcs sa0 00021e 9100 0087 lds r16,lpage+2 ; > 64MB 000220 d016 rcall write sa0: 000221 98a9 cbi PORTC,ALE 000222 9508 ret erase: 000223 98ab cbi PORTC,CE 000224 ef0f ldi r16,0xff 000225 bb0a out DDRA,r16 000226 9aa8 sbi PORTC,CLE 000227 e600 ldi r16,0x60 ; Erase Block Command 000228 d00e rcall write 000229 98a8 cbi PORTC,CLE 00022a dfe8 rcall setadrs; 00022b 9aa8 sbi PORTC,CLE 00022c ed00 ldi r16,0xd0 ; Erase Block (2) Command 00022d d009 rcall write 00022e 98a8 cbi PORTC,CLE 00022f 9aab sbi PORTC,CE 000230 9508 ret read: 000231 98ac cbi PORTC,RE 000232 0000 nop 000233 0000 nop 000234 b309 in r16,PINA 000235 9aac sbi PORTC,RE 000236 9508 ret write: 000237 bb0b out PORTA,r16 000238 98aa cbi PORTC,WE 000239 9aaa sbi PORTC,WE 00023a 9508 ret pwon: 00023b 9982 sbic PIND,2 00023c 9508 ret 00023d 94f8 cli 00023e 2700 clr r16 00023f bb0b out PORTA,r16 000240 bb0a out DDRA,r16 000241 e10c ldi r16,0b00011100 000242 bb05 out PORTC,r16 000243 e10f ldi r16,0b00011111 000244 bb04 out DDRC,r16 000245 9a96 sbi PORTD,PW ; POWER on ; Needs wait? 000246 9895 cbi PORTD,WP ; Disable WriteProtect 000247 9a97 sbi PORTD,LED ; LED on 000248 9478 sei 000249 9508 ret pwoff: 00024a 9897 cbi PORTD,LED ; LED off 00024b 9a95 sbi PORTD,WP ; Enable WriteProtect ; Needs wait? 00024c 9896 cbi PORTD,PW ; POWER off ; Needs wait? 00024d 2700 clr r16 00024e bb0b out PORTA,r16 00024f bb05 out PORTC,r16 000250 ef0f ldi r16,0xff 000251 bb0a out DDRA,r16 000252 bb04 out DDRC,r16 000253 9508 ret lpout: 000254 9100 0087 lds r16,lpage+2 000256 de38 rcall hexout 000257 9100 0086 lds r16,lpage+1 000259 de35 rcall hexout 00025a 9100 0085 lds r16,lpage+0 00025c ce32 rjmp hexout dumpl: 00025d e150 ldi r21,16 00025e e6e0 ldi ZL,low(lbuf) 00025f e0f0 ldi ZH,high(lbuf) 000260 e200 ldi r16,' ' 000261 de18 rcall conout 000262 e30a ldi r16,':' 000263 de16 rcall conout dl0: 000264 e200 ldi r16,' ' 000265 de14 rcall conout 000266 dfca rcall read 000267 2f60 mov r22,r16 000268 de26 rcall hexout 000269 e20e ldi r16,'.' 00026a 3260 cpi r22,' ' 00026b f018 brcs dl1 00026c 376f cpi r22,0x7f 00026d f408 brcc dl1 00026e 2f06 mov r16,r22 dl1: 00026f 9301 st Z+,r16 000270 955a dec r21 000271 f791 brne dl0 000272 2700 clr r16 000273 8300 st Z,r16 000274 e200 ldi r16,' ' 000275 de04 rcall conout 000276 e30a ldi r16,':' 000277 de02 rcall conout 000278 e200 ldi r16,' ' 000279 de00 rcall conout 00027a e6e0 ldi ZL,low(lbuf) 00027b e0f0 ldi ZH,high(lbuf) 00027c de0c rcall strout 00027d de1c rcall crlf 00027e 9508 ret ; ; Binary mode (PC remote mode) ; ; Read ID ; 55 0F AA ; 55 0F AA ; ; Read Data ; 55 1E AA ; 55 1E ... AA ; ; Reset ; 55 2D AA ; 55 2D AA ; ; Status Sense ; 55 3C AA ; 55 3C AA ; ; Write Data ; 55 4B ... AA ; 55 4B AA ; ; Block Erase ; 55 5A AA ; 55 5A AA ; ; Read Extra ; 55 69 AA ; 55 69 ... AA ; ; Write Extra ; 55 78 ... AA ; 55 78 AA ; ; On error ; ........ ; 33 <*> CC ; Error code: ; 01 Unknown command ; 02 Endmark not found ; binmain: 00027f ddf2 rcall conin binm0: 000280 3505 cpi r16,0x55 000281 f7e9 brne binmain 000282 ddef rcall conin 000283 2f10 mov r17,r16 000284 9512 swap r17 000285 0f10 add r17,r16 000286 3f1f cpi r17,0xff 000287 f7c1 brne binm0 000288 9300 0089 sts curcmd,r16 00028a 300f cpi r16,0x0f ; Read ID 00028b f409 brne binm01 00028c c039 rjmp b_readid binm01: 00028d 310e cpi r16,0x1e ; Read Data 00028e f409 brne binm02 00028f c049 rjmp b_read binm02: 000290 320d cpi r16,0x2d ; Reset 000291 f409 brne binm03 000292 c05e rjmp b_reset binm03: 000293 330c cpi r16,0x3c ; Status Sense 000294 f409 brne binm04 000295 c068 rjmp b_status binm04: 000296 340b cpi r16,0x4b ; Write Data 000297 f409 brne binm05 000298 c075 rjmp b_write binm05: 000299 350a cpi r16,0x5a ; Erase Block 00029a f409 brne binm06 00029b c08b rjmp b_erase binm06: 00029c 3609 cpi r16,0x69 ; Read Extra 00029d f409 brne binm07 00029e c096 rjmp b_readx binm07: 00029f 3708 cpi r16,0x78 ; Write Extra 0002a0 f401 brne binm08 ; rjmp b_writex binm08: 0002a1 e011 ldi r17,1 b_error: 0002a2 e303 ldi r16,0x33 0002a3 ddd6 rcall conout 0002a4 9100 0089 lds r16,curcmd 0002a6 ddd3 rcall conout 0002a7 2f01 mov r16,r17 0002a8 ddd1 rcall conout 0002a9 ec0c ldi r16,0xcc 0002aa ddcf rcall conout 0002ab cfd3 rjmp binmain b_rcvpag: 0002ac ddc5 rcall conin 0002ad 9300 0085 sts lpage+0,r16 0002af ddc2 rcall conin 0002b0 9300 0086 sts lpage+1,r16 0002b2 ddbf rcall conin 0002b3 9300 0087 sts lpage+2,r16 0002b5 ddbc rcall conin 0002b6 9300 0088 sts lpage+3,r16 0002b8 9508 ret b_sndpag: 0002b9 9100 0085 lds r16,lpage+0 0002bb ddbe rcall conout 0002bc 9100 0086 lds r16,lpage+1 0002be ddbb rcall conout 0002bf 9100 0087 lds r16,lpage+2 0002c1 ddb8 rcall conout 0002c2 9100 0088 lds r16,lpage+3 0002c4 ddb5 rcall conout 0002c5 9508 ret b_readid: 0002c6 ddab rcall conin 0002c7 3a0a cpi r16,0xaa 0002c8 f011 breq b_rid0 0002c9 e012 ldi r17,2 ; Endmark not found 0002ca cfd7 rjmp b_error b_rid0: 0002cb dec9 rcall idread 0002cc e505 ldi r16,0x55 0002cd ddac rcall conout 0002ce e00f ldi r16,0x0f 0002cf ddaa rcall conout 0002d0 9100 0083 lds r16,man_id 0002d2 dda7 rcall conout 0002d3 9100 0084 lds r16,dev_id 0002d5 dda4 rcall conout 0002d6 ea0a ldi r16,0xaa 0002d7 dda2 rcall conout 0002d8 cfa6 rjmp binmain b_read: 0002d9 dfd2 rcall b_rcvpag 0002da dd97 rcall conin 0002db 3a0a cpi r16,0xaa 0002dc f011 breq b_rd0 0002dd e012 ldi r17,2 ; Endmark not found 0002de cfc3 rjmp b_error b_rd0: 0002df df08 rcall ropen 0002e0 e505 ldi r16,0x55 0002e1 dd98 rcall conout 0002e2 e10e ldi r16,0x1e 0002e3 dd96 rcall conout 0002e4 dfd4 rcall b_sndpag 0002e5 e221 ldi r18,33 b_rd2: 0002e6 e130 ldi r19,16 b_rd3: 0002e7 df49 rcall read 0002e8 dd91 rcall conout 0002e9 953a dec r19 0002ea f7e1 brne b_rd3 0002eb 952a dec r18 0002ec f7c9 brne b_rd2 0002ed ea0a ldi r16,0xaa 0002ee dd8b rcall conout 0002ef df06 rcall rclose 0002f0 cf8e rjmp binmain b_reset: 0002f1 dd80 rcall conin 0002f2 3a0a cpi r16,0xaa 0002f3 f011 breq b_rst0 0002f4 e012 ldi r17,2 ; Endmark not found 0002f5 cfac rjmp b_error b_rst0: 0002f6 dee0 rcall reset 0002f7 e505 ldi r16,0x55 0002f8 dd81 rcall conout 0002f9 e20d ldi r16,0x2d 0002fa dd7f rcall conout 0002fb ea0a ldi r16,0xaa 0002fc dd7d rcall conout 0002fd cf81 rjmp binmain b_status: 0002fe dd73 rcall conin 0002ff 3a0a cpi r16,0xaa 000300 f011 breq b_st0 000301 e012 ldi r17,2 ; Endmark not found 000302 cf9f rjmp b_error b_st0: 000303 dec7 rcall stread 000304 2f10 mov r17,r16 000305 e505 ldi r16,0x55 000306 dd73 rcall conout 000307 e30c ldi r16,0x3c 000308 dd71 rcall conout 000309 2f01 mov r16,r17 00030a dd6f rcall conout 00030b ea0a ldi r16,0xaa; 00030c dd6d rcall conout 00030d cf71 rjmp binmain b_write: 00030e df9d rcall b_rcvpag 00030f dee8 rcall wopen 000310 e221 ldi r18,33 b_wd0: 000311 e130 ldi r19,16 b_wd1: 000312 dd5f rcall conin 000313 df23 rcall write 000314 953a dec r19 000315 f7e1 brne b_wd1 000316 952a dec r18 000317 f7c9 brne b_wd0 000318 dd59 rcall conin 000319 3a0a cpi r16,0xaa 00031a f019 breq b_wd2 00031b deed rcall wclose2 ; Close without flush 00031c e012 ldi r17,2 ; Endmark not found 00031d cf84 rjmp b_error b_wd2: 00031e dee6 rcall wclose 00031f e505 ldi r16,0x55 000320 dd59 rcall conout 000321 e40b ldi r16,0x4b 000322 dd57 rcall conout 000323 df95 rcall b_sndpag 000324 ea0a ldi r16,0xaa 000325 dd54 rcall conout 000326 cf58 rjmp binmain b_erase: 000327 df84 rcall b_rcvpag 000328 dd49 rcall conin 000329 3a0a cpi r16,0xaa 00032a f011 breq b_er0 00032b e012 ldi r17,2 ; Endmark not found 00032c cf75 rjmp b_error b_er0: ; rcall erase 00032d e505 ldi r16,0x55 00032e dd4b rcall conout 00032f e50a ldi r16,0x5a 000330 dd49 rcall conout 000331 df87 rcall b_sndpag 000332 ea0a ldi r16,0xaa 000333 dd46 rcall conout 000334 cf4a rjmp binmain b_readx: 000335 df76 rcall b_rcvpag 000336 dd3b rcall conin 000337 3a0a cpi r16,0xaa 000338 f011 breq b_rdx0 000339 e012 ldi r17,2 ; Endmark not found 00033a cf67 rjmp b_error b_rdx0: 00033b dea6 rcall rxopen 00033c e505 ldi r16,0x55 00033d dd3c rcall conout 00033e e609 ldi r16,0x69 00033f dd3a rcall conout 000340 df78 rcall b_sndpag 000341 e120 ldi r18,16 b_rdx1: 000342 deee rcall read 000343 dd36 rcall conout 000344 952a dec r18 000345 f7e1 brne b_rdx1 000346 ea0a ldi r16,0xaa 000347 dd32 rcall conout 000348 dead rcall rclose 000349 cf35 rjmp binmain opnmsg: .db $0d,$0a,"SmartMedia analyzer",$0d,$0a,0 encmsg: .db "No media",$0d,$0a,0 eukmsg: .db "Unknown media",$0d,$0a,0 ewpmsg: .db "Protected media",$0d,$0a,0 Assembly complete with no errors.