--- DISK3.ASM 2024-04-26 22:35:22.545000000 -0700 +++ disk3.bak 2024-04-26 22:25:28.000000000 -0700 @@ -121,61 +121,65 @@ JCXZ WRTEOFJ ;Make the file length = sf_position ADD AX,CX ADC DX,0 ; AX:DX=byte after last byte accessed ; ; Make sure divide won't overflow ; MOV BX,ES:[BP.dpb_sector_size] ; CMP DX,BX ;F.C. >32mb 16 bit sector check ;AN000; ; JAE WrtErr ;F.C. >32mb ;AN000; CALL DIV32 ;F.C. perform 32 bit divide ;AN000; MOV BX,AX ; Save last full sector + PUSH [HIGH_SECTOR] ;F.C. >32mb ;AN000; OR DX,DX JNZ CALCLUS SUB AX,1 ; AX must be zero base indexed ;AC000; SBB [HIGH_SECTOR],0 ;F.C. >32mb ;AN000; CALCLUS: - PUSH [HIGH_SECTOR] ;F.C. >32mb ;AN000; CALL SHR32 ;F.C. >32mb ;AN000; POP [HIGH_SECTOR] ;F.C. >32mb ;AN000; ; SHR AX,CL ; Last cluster to be accessed PUSH AX PUSH DX ; Save the size of the "tail" PUSH ES LES DI,[THISSFT] Assert ISSFT,,"DiskWrite/CalClus" MOV AX,WORD PTR ES:[DI.sf_size] MOV DX,WORD PTR ES:[DI.sf_size+2] POP ES PUSH AX ;F.C. >32mb ;AN000; MOV AX,DX ;F.C. >32mb ;AN000; XOR DX,DX ;F.C. >32mb ;AN000; DIV ES:[BP.dpb_sector_size] ;F.C. >32mb ;AN000; MOV [HIGH_SECTOR_TEMP],AX ;F.C. >32mb ;AN000; + MOV [VALSEC+2],AX ;F.C. >32mb ;AN000; POP AX ;F.C. >32mb ;AN000; DIV ES:[BP.dpb_sector_size] MOV CX,AX ; Save last full sector of current file OR DX,DX JZ NORNDUP ADD AX,1 ; Round up if any remainder ;AC000; - ADC [HIGH_SECTOR_TEMP],0 ;F.C. >32mb ;AN000; + ADC [VALSEC+2],0 ;F.C. >32mb ;AN000; NORNDUP: - PUSH [HIGH_SECTOR_TEMP] ;F.C. >32mb ;AN000; - POP WORD PTR [VALSEC+2] ;F.C. >32mb ;AN000; + NOP ; Unneccessary but used to preserve alignment with + NOP ; previous code and ensure binary comparison with + NOP ; official fix + NOP + NOP MOV WORD PTR [VALSEC],AX ;Number of sectors that have been written XOR AX,AX MOV WORD PTR [GROWCNT],AX MOV WORD PTR [GROWCNT+2],AX POP AX MOV DI,[HIGH_SECTOR] ;F.C. >32mb ;AN000; CMP DI,[HIGH_SECTOR_TEMP] ;F.C. >32mb ;AN000; JB NOGROW ;F.C. >32mb ;AN000; JZ lowsec ;F.C. >32mb ;AN000; SUB BX,CX ;F.C. >32mb ;AN000; SBB DI,[HIGH_SECTOR_TEMP] ;F.C. >32mb di:bx no. of sectors ;AN000;