corrections
This commit is contained in:
		
							parent
							
								
									eb04e071c3
								
							
						
					
					
						commit
						1464373b0c
					
				
							
								
								
									
										142
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										142
									
								
								index.html
									
									
									
									
									
								
							@ -4,7 +4,7 @@
 | 
				
			|||||||
<head>
 | 
					<head>
 | 
				
			||||||
    <meta charset="UTF-8">
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
				
			||||||
    <title>Dateisystem-Offset-Rechner</title>
 | 
					    <title>Dateisystem-Offset-Rechner (Fixed)</title>
 | 
				
			||||||
    <style>
 | 
					    <style>
 | 
				
			||||||
        * {
 | 
					        * {
 | 
				
			||||||
            margin: 0;
 | 
					            margin: 0;
 | 
				
			||||||
@ -595,13 +595,20 @@
 | 
				
			|||||||
                grid-template-columns: repeat(3, 1fr);
 | 
					                grid-template-columns: repeat(3, 1fr);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .fix-highlight {
 | 
				
			||||||
 | 
					            background-color: #2a4a2a;
 | 
				
			||||||
 | 
					            padding: 2px 4px;
 | 
				
			||||||
 | 
					            border-radius: 3px;
 | 
				
			||||||
 | 
					            border: 1px solid #4a6a4a;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    </style>
 | 
					    </style>
 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
    <header class="header">
 | 
					    <header class="header">
 | 
				
			||||||
        <div class="header-content">
 | 
					        <div class="header-content">
 | 
				
			||||||
            <div class="logo">Dateisystem-Offset-Rechner</div>
 | 
					            <div class="logo">Dateisystem-Offset-Rechner (Fixed)</div>
 | 
				
			||||||
            <nav class="nav">
 | 
					            <nav class="nav">
 | 
				
			||||||
                <a href="#home">Home</a>
 | 
					                <a href="#home">Home</a>
 | 
				
			||||||
                <a href="mailto:mstoeck3@hs-mittweida.de">Contact</a>
 | 
					                <a href="mailto:mstoeck3@hs-mittweida.de">Contact</a>
 | 
				
			||||||
@ -611,7 +618,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <main class="main-content">
 | 
					    <main class="main-content">
 | 
				
			||||||
        <div class="container">
 | 
					        <div class="container">
 | 
				
			||||||
            <h1>Dateisystem-Offset-Rechner</h1>
 | 
					            <h1>Dateisystem-Offset-Rechner (Fixed Version)</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="tabs">
 | 
					            <div class="tabs">
 | 
				
			||||||
                <div class="tab active" onclick="switchTab('fat1216')">FAT12/16</div>
 | 
					                <div class="tab active" onclick="switchTab('fat1216')">FAT12/16</div>
 | 
				
			||||||
@ -727,8 +734,8 @@
 | 
				
			|||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <label for="fatSizeBytes1216">Größe einer FAT <span
 | 
					                            <label for="fatSizeBytes1216">Größe einer FAT <span
 | 
				
			||||||
                                    class="unit-indicator">(Bytes)</span>:</label>
 | 
					                                    class="unit-indicator fix-highlight">(Bytes)</span>:</label>
 | 
				
			||||||
                            <input type="text" id="fatSizeBytes1216" placeholder="0x1000">
 | 
					                            <input type="text" id="fatSizeBytes1216" placeholder="0x4000">
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <label for="maxRootEntries1216">Max. Wurzelverzeichnis-Einträge <span
 | 
					                            <label for="maxRootEntries1216">Max. Wurzelverzeichnis-Einträge <span
 | 
				
			||||||
@ -743,7 +750,7 @@
 | 
				
			|||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <label for="clusterSizeSectors1216">Größe eines Clusters <span
 | 
					                            <label for="clusterSizeSectors1216">Größe eines Clusters <span
 | 
				
			||||||
                                    class="unit-indicator">(Sektoren)</span>:</label>
 | 
					                                    class="unit-indicator">(Sektoren)</span>:</label>
 | 
				
			||||||
                            <input type="text" id="clusterSizeSectors1216" placeholder="0x1">
 | 
					                            <input type="text" id="clusterSizeSectors1216" placeholder="0x2">
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <label for="clusterNumber1216">Cluster Nummer für Position <span
 | 
					                            <label for="clusterNumber1216">Cluster Nummer für Position <span
 | 
				
			||||||
@ -851,7 +858,7 @@
 | 
				
			|||||||
                        <div class="formula"><span class="calculated">Beginn FAT-Bereich</span> = Anzahl reservierter
 | 
					                        <div class="formula"><span class="calculated">Beginn FAT-Bereich</span> = Anzahl reservierter
 | 
				
			||||||
                            Sektoren × Größe eines Sektors + Base Offset</div>
 | 
					                            Sektoren × Größe eines Sektors + Base Offset</div>
 | 
				
			||||||
                        <div class="formula"><span class="calculated">Größe FAT-Bereich</span> = Anzahl FATs × Größe
 | 
					                        <div class="formula"><span class="calculated">Größe FAT-Bereich</span> = Anzahl FATs × Größe
 | 
				
			||||||
                            einer FAT</div>
 | 
					                            einer FAT (in Bytes)</div>
 | 
				
			||||||
                        <div class="formula"><span class="calculated">Ende FAT-Bereich</span> = Beginn FAT-Bereich +
 | 
					                        <div class="formula"><span class="calculated">Ende FAT-Bereich</span> = Beginn FAT-Bereich +
 | 
				
			||||||
                            Größe FAT-Bereich</div>
 | 
					                            Größe FAT-Bereich</div>
 | 
				
			||||||
                        <div class="formula"><span class="calculated">Größe Wurzelverzeichnis</span> = Anzahl max.
 | 
					                        <div class="formula"><span class="calculated">Größe Wurzelverzeichnis</span> = Anzahl max.
 | 
				
			||||||
@ -986,8 +993,8 @@
 | 
				
			|||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <label for="fatSizeBytes32">Größe einer FAT <span
 | 
					                            <label for="fatSizeBytes32">Größe einer FAT <span
 | 
				
			||||||
                                    class="unit-indicator">(Bytes)</span>:</label>
 | 
					                                    class="unit-indicator fix-highlight">(Bytes)</span>:</label>
 | 
				
			||||||
                            <input type="text" id="fatSizeBytes32" placeholder="0x10000">
 | 
					                            <input type="text" id="fatSizeBytes32" placeholder="0x20000">
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <label for="rootDirCluster32">Root Directory Cluster <span
 | 
					                            <label for="rootDirCluster32">Root Directory Cluster <span
 | 
				
			||||||
@ -997,7 +1004,7 @@
 | 
				
			|||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <label for="partitionSizeInSectors32">Größe Partition <span
 | 
					                            <label for="partitionSizeInSectors32">Größe Partition <span
 | 
				
			||||||
                                    class="unit-indicator">(Sektoren)</span>:</label>
 | 
					                                    class="unit-indicator">(Sektoren)</span>:</label>
 | 
				
			||||||
                            <input type="text" id="partitionSizeInSectors32" placeholder="0x20000">
 | 
					                            <input type="text" id="partitionSizeInSectors32" placeholder="0x100000">
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <label for="clusterSizeSectors32">Größe eines Clusters <span
 | 
					                            <label for="clusterSizeSectors32">Größe eines Clusters <span
 | 
				
			||||||
@ -1103,7 +1110,7 @@
 | 
				
			|||||||
                        <div class="formula"><span class="calculated">Beginn FAT-Bereich</span> = Anzahl reservierter
 | 
					                        <div class="formula"><span class="calculated">Beginn FAT-Bereich</span> = Anzahl reservierter
 | 
				
			||||||
                            Sektoren × Größe eines Sektors + Base Offset</div>
 | 
					                            Sektoren × Größe eines Sektors + Base Offset</div>
 | 
				
			||||||
                        <div class="formula"><span class="calculated">Größe FAT-Bereich</span> = Anzahl FATs × Größe
 | 
					                        <div class="formula"><span class="calculated">Größe FAT-Bereich</span> = Anzahl FATs × Größe
 | 
				
			||||||
                            einer FAT</div>
 | 
					                            einer FAT (in Bytes)</div>
 | 
				
			||||||
                        <div class="formula"><span class="calculated">Ende FAT-Bereich</span> = Beginn FAT-Bereich +
 | 
					                        <div class="formula"><span class="calculated">Ende FAT-Bereich</span> = Beginn FAT-Bereich +
 | 
				
			||||||
                            Größe FAT-Bereich</div>
 | 
					                            Größe FAT-Bereich</div>
 | 
				
			||||||
                        <div class="formula"><span class="calculated">Beginn Daten-Bereich</span> = Ende FAT-Bereich
 | 
					                        <div class="formula"><span class="calculated">Beginn Daten-Bereich</span> = Ende FAT-Bereich
 | 
				
			||||||
@ -1128,25 +1135,26 @@
 | 
				
			|||||||
        <div class="footer-content">
 | 
					        <div class="footer-content">
 | 
				
			||||||
            <div class="footer-section">
 | 
					            <div class="footer-section">
 | 
				
			||||||
                <h3>About</h3>
 | 
					                <h3>About</h3>
 | 
				
			||||||
                <p>Offset calculator for educational and forensic purposes.</p>
 | 
					                <p>Fixed offset calculator for educational and forensic purposes.</p>
 | 
				
			||||||
                <p>Version 0.2.0</p>
 | 
					                <p>Version 0.2.1 (Fixed)</p>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="footer-section">
 | 
				
			||||||
 | 
					                <h3>Fixes Applied</h3>
 | 
				
			||||||
 | 
					                <p>• Updated FAT size placeholders</p>
 | 
				
			||||||
 | 
					                <p>• Fixed calculator overflow handling</p>
 | 
				
			||||||
 | 
					                <p>• Improved integer precision</p>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="footer-section">
 | 
					            <div class="footer-section">
 | 
				
			||||||
                <h3>Support</h3>
 | 
					                <h3>Support</h3>
 | 
				
			||||||
                <a href="mailto:mstoeck3@hs-mittweida.de">Contact Support</a>
 | 
					                <a href="mailto:mstoeck3@hs-mittweida.de">Contact Support</a>
 | 
				
			||||||
                <a href="https://git.cc24.dev/mstoeck3/fscalc/issues/new">Report Bug</a>
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="footer-section">
 | 
					            <div class="footer-section">
 | 
				
			||||||
                <h3>Legal</h3>
 | 
					                <h3>Legal</h3>
 | 
				
			||||||
                <a href="https://git.cc24.dev/mstoeck3/fscalc/src/branch/main/LICENSE">License</a>
 | 
					                <p>Educational use only</p>
 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="footer-section">
 | 
					 | 
				
			||||||
                <h3>Connect</h3>
 | 
					 | 
				
			||||||
                <a href="https://git.cc24.dev/mstoeck3/fscalc">Gitea Repository</a>
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div class="footer-bottom">
 | 
					        <div class="footer-bottom">
 | 
				
			||||||
            <p>© 2025 Offset Calculator. All rights reserved. | Built with ❤️ for computer science education.</p>
 | 
					            <p>© 2025 Offset Calculator (Fixed). All rights reserved.</p>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    </footer>
 | 
					    </footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1192,8 +1200,8 @@
 | 
				
			|||||||
            const decElement = document.getElementById(`decValue${suffix}`);
 | 
					            const decElement = document.getElementById(`decValue${suffix}`);
 | 
				
			||||||
            const binElement = document.getElementById(`binValue${suffix}`);
 | 
					            const binElement = document.getElementById(`binValue${suffix}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Ensure value is within JavaScript's safe integer range
 | 
					            // Ensure value is within JavaScript's safe integer range and non-negative
 | 
				
			||||||
            const value = Math.max(0, Math.min(state.currentValue, Number.MAX_SAFE_INTEGER));
 | 
					            const value = Math.max(0, Math.min(Math.floor(state.currentValue), Number.MAX_SAFE_INTEGER));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const hexStr = '0x' + value.toString(16).toUpperCase();
 | 
					            const hexStr = '0x' + value.toString(16).toUpperCase();
 | 
				
			||||||
            const decStr = value.toString(10);
 | 
					            const decStr = value.toString(10);
 | 
				
			||||||
@ -1220,7 +1228,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // Prevent overflow by limiting to a reasonable hex value
 | 
					            // Prevent overflow by limiting to a reasonable hex value
 | 
				
			||||||
            const newValue = state.currentValue * 16 + digitValue;
 | 
					            const newValue = state.currentValue * 16 + digitValue;
 | 
				
			||||||
            if (newValue <= 0xFFFFFFFFFFFFFF) { // Limit to 56 bits for safety
 | 
					            if (newValue <= Number.MAX_SAFE_INTEGER && newValue >= 0) {
 | 
				
			||||||
                state.currentValue = newValue;
 | 
					                state.currentValue = newValue;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1233,7 +1241,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (operation === 'NOT') {
 | 
					            if (operation === 'NOT') {
 | 
				
			||||||
                // Unary operation - apply immediately
 | 
					                // Unary operation - apply immediately
 | 
				
			||||||
                state.currentValue = (~state.currentValue) >>> 0; // Use unsigned 32-bit
 | 
					                // Use a mask to ensure we get meaningful results for filesystem calculations
 | 
				
			||||||
 | 
					                state.currentValue = (~state.currentValue & 0xFFFFFFFF) >>> 0;
 | 
				
			||||||
                updateCalculatorDisplay(currentTab);
 | 
					                updateCalculatorDisplay(currentTab);
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -1252,55 +1261,56 @@
 | 
				
			|||||||
            const state = getCalculatorState(currentTab);
 | 
					            const state = getCalculatorState(currentTab);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (state.operation && state.previousValue !== null) {
 | 
					            if (state.operation && state.previousValue !== null) {
 | 
				
			||||||
                const prev = state.previousValue;
 | 
					                const prev = Math.floor(state.previousValue);
 | 
				
			||||||
                const curr = state.currentValue;
 | 
					                const curr = Math.floor(state.currentValue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
 | 
					                    let result = 0;
 | 
				
			||||||
                    switch (state.operation) {
 | 
					                    switch (state.operation) {
 | 
				
			||||||
                        case '+':
 | 
					                        case '+':
 | 
				
			||||||
                            state.currentValue = prev + curr;
 | 
					                            result = prev + curr;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case '-':
 | 
					                        case '-':
 | 
				
			||||||
                            state.currentValue = prev - curr;
 | 
					                            result = prev - curr;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case '*':
 | 
					                        case '*':
 | 
				
			||||||
                            state.currentValue = prev * curr;
 | 
					                            result = prev * curr;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case '/':
 | 
					                        case '/':
 | 
				
			||||||
                            if (curr === 0) {
 | 
					                            if (curr === 0) {
 | 
				
			||||||
                                alert('Division by zero!');
 | 
					                                alert('Division by zero!');
 | 
				
			||||||
                                return;
 | 
					                                return;
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            state.currentValue = Math.floor(prev / curr);
 | 
					                            result = Math.floor(prev / curr);
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case 'MOD':
 | 
					                        case 'MOD':
 | 
				
			||||||
                            if (curr === 0) {
 | 
					                            if (curr === 0) {
 | 
				
			||||||
                                alert('Modulo by zero!');
 | 
					                                alert('Modulo by zero!');
 | 
				
			||||||
                                return;
 | 
					                                return;
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            state.currentValue = prev % curr;
 | 
					                            result = prev % curr;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case 'AND':
 | 
					                        case 'AND':
 | 
				
			||||||
                            state.currentValue = (prev & curr) >>> 0;
 | 
					                            result = (prev & curr);
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case 'OR':
 | 
					                        case 'OR':
 | 
				
			||||||
                            state.currentValue = (prev | curr) >>> 0;
 | 
					                            result = (prev | curr);
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case 'XOR':
 | 
					                        case 'XOR':
 | 
				
			||||||
                            state.currentValue = (prev ^ curr) >>> 0;
 | 
					                            result = (prev ^ curr);
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case '<<':
 | 
					                        case '<<':
 | 
				
			||||||
                            state.currentValue = (prev << curr) >>> 0;
 | 
					                            // Limit shift amount to prevent overflow
 | 
				
			||||||
 | 
					                            const shiftLeft = Math.min(curr, 53);
 | 
				
			||||||
 | 
					                            result = prev << shiftLeft;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        case '>>':
 | 
					                        case '>>':
 | 
				
			||||||
                            state.currentValue = (prev >> curr) >>> 0;
 | 
					                            result = prev >> curr;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // Ensure positive value
 | 
					                    // Ensure result is within safe range and non-negative
 | 
				
			||||||
                    if (state.currentValue < 0) {
 | 
					                    state.currentValue = Math.max(0, Math.min(result, Number.MAX_SAFE_INTEGER));
 | 
				
			||||||
                        state.currentValue = 0;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                } catch (error) {
 | 
					                } catch (error) {
 | 
				
			||||||
                    alert('Calculation error: ' + error.message);
 | 
					                    alert('Calculation error: ' + error.message);
 | 
				
			||||||
@ -1353,10 +1363,10 @@
 | 
				
			|||||||
                    updateCalculatorDisplay(currentTab);
 | 
					                    updateCalculatorDisplay(currentTab);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case 'M+':
 | 
					                case 'M+':
 | 
				
			||||||
                    state.memory += state.currentValue;
 | 
					                    state.memory = Math.max(0, Math.min(state.memory + state.currentValue, Number.MAX_SAFE_INTEGER));
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case 'M-':
 | 
					                case 'M-':
 | 
				
			||||||
                    state.memory -= state.currentValue;
 | 
					                    state.memory = Math.max(0, state.memory - state.currentValue);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -1424,22 +1434,23 @@
 | 
				
			|||||||
                    const rootDirStart = fatEnd;
 | 
					                    const rootDirStart = fatEnd;
 | 
				
			||||||
                    const rootDirSize = maxRootEntries * 0x20;
 | 
					                    const rootDirSize = maxRootEntries * 0x20;
 | 
				
			||||||
                    const dataStart = fatEnd + rootDirSize;
 | 
					                    const dataStart = fatEnd + rootDirSize;
 | 
				
			||||||
                    const dataSize = partitionSizeInSectors * sectorSize - (dataStart - baseOffset);
 | 
					                    const partitionSizeBytes = partitionSizeInSectors * sectorSize;
 | 
				
			||||||
 | 
					                    const dataSize = partitionSizeBytes - (dataStart - baseOffset);
 | 
				
			||||||
                    const clusterSize = sectorSize * clusterSizeSectors;
 | 
					                    const clusterSize = sectorSize * clusterSizeSectors;
 | 
				
			||||||
                    const numClusters = clusterSize > 0 ? Math.floor(dataSize / clusterSize) : 0;
 | 
					                    const numClusters = clusterSize > 0 ? Math.floor(dataSize / clusterSize) : 0;
 | 
				
			||||||
                    const clusterStart = dataStart + (clusterNumber - 0x2) * clusterSize;
 | 
					                    const clusterStart = dataStart + (clusterNumber - 0x2) * clusterSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    const calculations = {
 | 
					                    const calculations = {
 | 
				
			||||||
                        fatStart: `${reservedSectors.toString(16)} × ${sectorSize.toString(16)} + ${baseOffset.toString(16)} = ${fatStart.toString(16)}`,
 | 
					                        fatStart: `0x${reservedSectors.toString(16)} × 0x${sectorSize.toString(16)} + 0x${baseOffset.toString(16)} = 0x${fatStart.toString(16)}`,
 | 
				
			||||||
                        fatSize: `${numFATs.toString(16)} × ${fatSizeBytes.toString(16)} = ${fatSize.toString(16)}`,
 | 
					                        fatSize: `0x${numFATs.toString(16)} × 0x${fatSizeBytes.toString(16)} = 0x${fatSize.toString(16)}`,
 | 
				
			||||||
                        fatEnd: `${fatStart.toString(16)} + ${fatSize.toString(16)} = ${fatEnd.toString(16)}`,
 | 
					                        fatEnd: `0x${fatStart.toString(16)} + 0x${fatSize.toString(16)} = 0x${fatEnd.toString(16)}`,
 | 
				
			||||||
                        rootDirStart: `${fatEnd.toString(16)}`,
 | 
					                        rootDirStart: `0x${fatEnd.toString(16)}`,
 | 
				
			||||||
                        rootDirSize: `${maxRootEntries.toString(16)} × 0x20 = ${rootDirSize.toString(16)}`,
 | 
					                        rootDirSize: `0x${maxRootEntries.toString(16)} × 0x20 = 0x${rootDirSize.toString(16)}`,
 | 
				
			||||||
                        dataStart: `${fatEnd.toString(16)} + ${rootDirSize.toString(16)} = ${dataStart.toString(16)}`,
 | 
					                        dataStart: `0x${fatEnd.toString(16)} + 0x${rootDirSize.toString(16)} = 0x${dataStart.toString(16)}`,
 | 
				
			||||||
                        dataSize: `(${partitionSizeInSectors.toString(16)} × ${sectorSize.toString(16)}) - (${dataStart.toString(16)} - ${baseOffset.toString(16)}) = ${dataSize.toString(16)}`,
 | 
					                        dataSize: `(0x${partitionSizeInSectors.toString(16)} × 0x${sectorSize.toString(16)}) - (0x${dataStart.toString(16)} - 0x${baseOffset.toString(16)}) = 0x${dataSize.toString(16)}`,
 | 
				
			||||||
                        clusterSize: `${sectorSize.toString(16)} × ${clusterSizeSectors.toString(16)} = ${clusterSize.toString(16)}`,
 | 
					                        clusterSize: `0x${sectorSize.toString(16)} × 0x${clusterSizeSectors.toString(16)} = 0x${clusterSize.toString(16)}`,
 | 
				
			||||||
                        numClusters: `${dataSize.toString(16)} ÷ ${clusterSize.toString(16)} = ${numClusters.toString(16)}`,
 | 
					                        numClusters: `0x${dataSize.toString(16)} ÷ 0x${clusterSize.toString(16)} = 0x${numClusters.toString(16)}`,
 | 
				
			||||||
                        clusterStart: `${dataStart.toString(16)} + (${clusterNumber.toString(16)} - 0x2) × ${clusterSize.toString(16)} = ${clusterStart.toString(16)}`
 | 
					                        clusterStart: `0x${dataStart.toString(16)} + (0x${clusterNumber.toString(16)} - 0x2) × 0x${clusterSize.toString(16)} = 0x${clusterStart.toString(16)}`
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    return {
 | 
					                    return {
 | 
				
			||||||
@ -1465,22 +1476,23 @@
 | 
				
			|||||||
                    const fatSize = numFATs * fatSizeBytes;
 | 
					                    const fatSize = numFATs * fatSizeBytes;
 | 
				
			||||||
                    const fatEnd = fatStart + fatSize;
 | 
					                    const fatEnd = fatStart + fatSize;
 | 
				
			||||||
                    const dataStart = fatEnd;
 | 
					                    const dataStart = fatEnd;
 | 
				
			||||||
                    const dataSize = partitionSizeInSectors * sectorSize - (dataStart - baseOffset);
 | 
					                    const partitionSizeBytes = partitionSizeInSectors * sectorSize;
 | 
				
			||||||
 | 
					                    const dataSize = partitionSizeBytes - (dataStart - baseOffset);
 | 
				
			||||||
                    const clusterSize = sectorSize * clusterSizeSectors;
 | 
					                    const clusterSize = sectorSize * clusterSizeSectors;
 | 
				
			||||||
                    const numClusters = clusterSize > 0 ? Math.floor(dataSize / clusterSize) : 0;
 | 
					                    const numClusters = clusterSize > 0 ? Math.floor(dataSize / clusterSize) : 0;
 | 
				
			||||||
                    const clusterStart = dataStart + (clusterNumber - 0x2) * clusterSize;
 | 
					                    const clusterStart = dataStart + (clusterNumber - 0x2) * clusterSize;
 | 
				
			||||||
                    const rootDirPos = dataStart + (rootDirCluster - 0x2) * clusterSize;
 | 
					                    const rootDirPos = dataStart + (rootDirCluster - 0x2) * clusterSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    const calculations = {
 | 
					                    const calculations = {
 | 
				
			||||||
                        fatStart: `${reservedSectors.toString(16)} × ${sectorSize.toString(16)} + ${baseOffset.toString(16)} = ${fatStart.toString(16)}`,
 | 
					                        fatStart: `0x${reservedSectors.toString(16)} × 0x${sectorSize.toString(16)} + 0x${baseOffset.toString(16)} = 0x${fatStart.toString(16)}`,
 | 
				
			||||||
                        fatSize: `${numFATs.toString(16)} × ${fatSizeBytes.toString(16)} = ${fatSize.toString(16)}`,
 | 
					                        fatSize: `0x${numFATs.toString(16)} × 0x${fatSizeBytes.toString(16)} = 0x${fatSize.toString(16)}`,
 | 
				
			||||||
                        fatEnd: `${fatStart.toString(16)} + ${fatSize.toString(16)} = ${fatEnd.toString(16)}`,
 | 
					                        fatEnd: `0x${fatStart.toString(16)} + 0x${fatSize.toString(16)} = 0x${fatEnd.toString(16)}`,
 | 
				
			||||||
                        dataStart: `${fatEnd.toString(16)}`,
 | 
					                        dataStart: `0x${fatEnd.toString(16)}`,
 | 
				
			||||||
                        dataSize: `(${partitionSizeInSectors.toString(16)} × ${sectorSize.toString(16)}) - (${dataStart.toString(16)} - ${baseOffset.toString(16)}) = ${dataSize.toString(16)}`,
 | 
					                        dataSize: `(0x${partitionSizeInSectors.toString(16)} × 0x${sectorSize.toString(16)}) - (0x${dataStart.toString(16)} - 0x${baseOffset.toString(16)}) = 0x${dataSize.toString(16)}`,
 | 
				
			||||||
                        clusterSize: `${sectorSize.toString(16)} × ${clusterSizeSectors.toString(16)} = ${clusterSize.toString(16)}`,
 | 
					                        clusterSize: `0x${sectorSize.toString(16)} × 0x${clusterSizeSectors.toString(16)} = 0x${clusterSize.toString(16)}`,
 | 
				
			||||||
                        numClusters: `${dataSize.toString(16)} ÷ ${clusterSize.toString(16)} = ${numClusters.toString(16)}`,
 | 
					                        numClusters: `0x${dataSize.toString(16)} ÷ 0x${clusterSize.toString(16)} = 0x${numClusters.toString(16)}`,
 | 
				
			||||||
                        clusterStart: `${dataStart.toString(16)} + (${clusterNumber.toString(16)} - 0x2) × ${clusterSize.toString(16)} = ${clusterStart.toString(16)}`,
 | 
					                        clusterStart: `0x${dataStart.toString(16)} + (0x${clusterNumber.toString(16)} - 0x2) × 0x${clusterSize.toString(16)} = 0x${clusterStart.toString(16)}`,
 | 
				
			||||||
                        rootDirPos: `${dataStart.toString(16)} + (${rootDirCluster.toString(16)} - 0x2) × ${clusterSize.toString(16)} = ${rootDirPos.toString(16)}`
 | 
					                        rootDirPos: `0x${dataStart.toString(16)} + (0x${rootDirCluster.toString(16)} - 0x2) × 0x${clusterSize.toString(16)} = 0x${rootDirPos.toString(16)}`
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    return {
 | 
					                    return {
 | 
				
			||||||
@ -1498,14 +1510,14 @@
 | 
				
			|||||||
                cleanValue = cleanValue.substring(2);
 | 
					                cleanValue = cleanValue.substring(2);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            const parsed = parseInt(cleanValue, 16);
 | 
					            const parsed = parseInt(cleanValue, 16);
 | 
				
			||||||
            return isNaN(parsed) ? 0 : parsed;
 | 
					            return isNaN(parsed) ? 0 : Math.max(0, parsed);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function formatHex(value) {
 | 
					        function formatHex(value) {
 | 
				
			||||||
            if (isNaN(value) || value < 0) {
 | 
					            if (isNaN(value) || value < 0) {
 | 
				
			||||||
                return '<span class="error">Fehler</span>';
 | 
					                return '<span class="error">Fehler</span>';
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return '0x' + value.toString(16).toUpperCase();
 | 
					            return '0x' + Math.floor(value).toString(16).toUpperCase();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function copyToClipboard(elementId) {
 | 
					        function copyToClipboard(elementId) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user