_writeEEPROMBytes: int writeEEPROMBytes(word NumOfBytes, byte cs:02C2 55 push bp cs:02C3 8BEC mov bp,sp cs:02C5 83EC08 sub sp,0008 cs:02C8 56 push si cs:02C9 8B7604 mov si,[bp+04] #BCBUG1#26: Src=(byte far *)Source; cs:02CC 8B4606 mov ax,[bp+06] cs:02CF 8C5EFE mov [bp-02],ds cs:02D2 8946FC mov [bp-04],ax #BCBUG1#27: Dst=(vbyte far *)MK_FP(EEPROM_SEG, Offset); cs:02D5 8B4608 mov ax,[bp+08] cs:02D8 C746FA0020 mov word ptr [bp-06],2000 [bp-06] and [bp-08] cs:02DD 8946F8 mov [bp-08],ax hold far ptr Dst cs:02E0 EB41 jmp 0323 #BCBUG1#30: { if(*Dst != *Src) cs:02E2 C45EF8 les bx,[bp-08] now Dst is in es:bx cs:02E5 268A07 mov al,es:[bx] cs:02E8 C45EFC les bx,[bp-04] cs:02EB 263A07 cmp al,es:[bx] cs:02EE 742C je #BCBUG1#44 (031C) #BCBUG1#31: { *Dst=*Src; cs:02F0 268A07 mov al,es:[bx] byte at Dst now in al cs:02F3 C45EF8 les bx,[bp-08] cs:02F6 268807 mov es:[bx],al #BCBUG1#33: for(Await=0x1FFF; Await; Await--) cs:02F9 BAFF1F mov dx,1FFF cs:02FC 268A07 mov al,es:[bx] re-read byte at Dst cs:02FF 8AC8 mov cl,al put it in cl cs:0301 EB09 jmp 030C #BCBUG1#42: if(*Dst == *Src) break; cs:0303 C45EFC les bx,[bp-04] This loop does not cs:0306 263A0F cmp cl,es:[bx] read the byte at Dst! cs:0309 7405 je #BCBUG1#43 (0310) It uses the cached cs:030B 4A dec dx value in cl! cs:030C 0BD2 or dx,dx cs:030E 75F3 jne #BCBUG1#42 (0303) #BCBUG1#43: if(Await == 0) return(-1); } /* failure, return cs:0310 0BD2 or dx,dx cs:0312 7508 jne #BCBUG1#44 (031C) cs:0314 B8FFFF mov ax,FFFF cs:0317 5E pop si cs:0318 8BE5 mov sp,bp cs:031A 5D pop bp cs:031B C3 ret #BCBUG1#44: Dst++; /* OK, next byte */ cs:031C FF46F8 inc word ptr [bp-08] #BCBUG1#45: Src++; } cs:031F FF46FC inc word ptr [bp-04] #BCBUG1#28: for(; NumOfBytes; NumOfBytes--) cs:0322 4E dec si cs:0323 0BF6 or si,si cs:0325 75BB jne #BCBUG1#30 (02E2) #BCBUG1#46: return(0); } cs:0327 33C0 xor ax,ax cs:0329 5E pop si cs:032A 8BE5 mov sp,bp cs:032C 5D pop bp cs:032D C3 ret _main: { writeEEPROMBytes(6, "Hello", 0); } cs:032E 33C0 xor ax,ax cs:0330 50 push ax cs:0331 B8AA00 mov ax,00AA cs:0334 50 push ax cs:0335 B80600 mov ax,0006 cs:0338 50 push ax cs:0339 E886FF call _writeEEPROMBytes cs:033C 83C406 add sp,0006 cs:033F C3 ret