Skip to content

Commit 6936c06

Browse files
committed
Improvements to the Boot Sector editor
1 parent 51c8787 commit 6936c06

File tree

7 files changed

+217
-102
lines changed

7 files changed

+217
-102
lines changed

DiskImageTool/DiskImage/Functions.vb

Lines changed: 90 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,20 @@ Namespace DiskImage
2525

2626
Private CodePage437ReverseLookupTable As Dictionary(Of UShort, Byte)
2727

28+
Public Enum FloppyDiskType
29+
FloppyUnknown = 0
30+
Floppy160 = 1
31+
Floppy180 = 2
32+
Floppy320 = 3
33+
Floppy360 = 4
34+
Floppy720 = 5
35+
Floppy1200 = 6
36+
Floppy1440 = 7
37+
Floppy2880 = 8
38+
FloppyDMF1024 = 9
39+
FloppyDMF2048 = 10
40+
End Enum
41+
2842
Public Function BootSectorDescription(Offset As DiskImage.BootSector.BootSectorOffsets) As String
2943
Select Case Offset
3044
Case DiskImage.BootSector.BootSectorOffsets.JmpBoot
@@ -72,13 +86,13 @@ Namespace DiskImage
7286
End Select
7387
End Function
7488

75-
Public Function BuildBootSectorFromFileSize(Size As Integer) As BootSector
89+
Public Function BuildBootSectorFromType(Type As FloppyDiskType) As BootSector
7690
Dim Data(511) As Byte
7791
Dim FileBytes As New ImageByteArray(Data)
7892
Dim BootSector = New BootSector(FileBytes)
7993

80-
Select Case Size
81-
Case 163840
94+
Select Case Type
95+
Case FloppyDiskType.Floppy160
8296
BootSector.BytesPerSector = 512
8397
BootSector.MediaDescriptor = &HFE
8498
BootSector.NumberOfFATs = 2
@@ -89,7 +103,8 @@ Namespace DiskImage
89103
BootSector.SectorsPerCluster = 1
90104
BootSector.SectorsPerFAT = 1
91105
BootSector.SectorsPerTrack = 8
92-
Case 184320
106+
107+
Case FloppyDiskType.Floppy180
93108
BootSector.BytesPerSector = 512
94109
BootSector.MediaDescriptor = &HFC
95110
BootSector.NumberOfFATs = 2
@@ -100,7 +115,8 @@ Namespace DiskImage
100115
BootSector.SectorsPerCluster = 1
101116
BootSector.SectorsPerFAT = 1
102117
BootSector.SectorsPerTrack = 9
103-
Case 327680
118+
119+
Case FloppyDiskType.Floppy320
104120
BootSector.BytesPerSector = 512
105121
BootSector.MediaDescriptor = &HFF
106122
BootSector.NumberOfFATs = 2
@@ -111,7 +127,8 @@ Namespace DiskImage
111127
BootSector.SectorsPerCluster = 2
112128
BootSector.SectorsPerFAT = 1
113129
BootSector.SectorsPerTrack = 8
114-
Case 368640
130+
131+
Case FloppyDiskType.Floppy360
115132
BootSector.BytesPerSector = 512
116133
BootSector.MediaDescriptor = &HFD
117134
BootSector.NumberOfFATs = 2
@@ -122,7 +139,8 @@ Namespace DiskImage
122139
BootSector.SectorsPerCluster = 2
123140
BootSector.SectorsPerFAT = 2
124141
BootSector.SectorsPerTrack = 9
125-
Case 737280
142+
143+
Case FloppyDiskType.Floppy720
126144
BootSector.BytesPerSector = 512
127145
BootSector.MediaDescriptor = &HF9
128146
BootSector.NumberOfFATs = 2
@@ -133,7 +151,8 @@ Namespace DiskImage
133151
BootSector.SectorsPerCluster = 2
134152
BootSector.SectorsPerFAT = 3
135153
BootSector.SectorsPerTrack = 9
136-
Case 1228800
154+
155+
Case FloppyDiskType.Floppy1200
137156
BootSector.BytesPerSector = 512
138157
BootSector.MediaDescriptor = &HF9
139158
BootSector.NumberOfFATs = 2
@@ -144,7 +163,8 @@ Namespace DiskImage
144163
BootSector.SectorsPerCluster = 1
145164
BootSector.SectorsPerFAT = 7
146165
BootSector.SectorsPerTrack = 15
147-
Case 1474560
166+
167+
Case FloppyDiskType.Floppy1440
148168
BootSector.BytesPerSector = 512
149169
BootSector.MediaDescriptor = &HF0
150170
BootSector.NumberOfFATs = 2
@@ -155,11 +175,72 @@ Namespace DiskImage
155175
BootSector.SectorsPerCluster = 1
156176
BootSector.SectorsPerFAT = 9
157177
BootSector.SectorsPerTrack = 18
178+
179+
Case FloppyDiskType.FloppyDMF1024
180+
BootSector.BytesPerSector = 512
181+
BootSector.MediaDescriptor = &HF0
182+
BootSector.NumberOfFATs = 2
183+
BootSector.NumberOfHeads = 2
184+
BootSector.ReservedSectorCount = 1
185+
BootSector.RootEntryCount = 16
186+
BootSector.SectorCountSmall = 3360
187+
BootSector.SectorsPerCluster = 2
188+
BootSector.SectorsPerFAT = 5
189+
BootSector.SectorsPerTrack = 21
190+
191+
Case FloppyDiskType.FloppyDMF2048
192+
BootSector.BytesPerSector = 512
193+
BootSector.MediaDescriptor = &HF0
194+
BootSector.NumberOfFATs = 2
195+
BootSector.NumberOfHeads = 2
196+
BootSector.ReservedSectorCount = 1
197+
BootSector.RootEntryCount = 16
198+
BootSector.SectorCountSmall = 3360
199+
BootSector.SectorsPerCluster = 4
200+
BootSector.SectorsPerFAT = 3
201+
BootSector.SectorsPerTrack = 21
202+
203+
Case FloppyDiskType.Floppy2880
204+
BootSector.BytesPerSector = 512
205+
BootSector.MediaDescriptor = &HF0
206+
BootSector.NumberOfFATs = 2
207+
BootSector.NumberOfHeads = 2
208+
BootSector.ReservedSectorCount = 1
209+
BootSector.RootEntryCount = 240
210+
BootSector.SectorCountSmall = 5760
211+
BootSector.SectorsPerCluster = 2
212+
BootSector.SectorsPerFAT = 9
213+
BootSector.SectorsPerTrack = 36
158214
End Select
159215

160216
Return BootSector
161217
End Function
162218

219+
Public Function GetFloppyDiskType(Size As Integer) As FloppyDiskType
220+
Select Case Size
221+
Case 163840
222+
Return FloppyDiskType.Floppy160
223+
Case 184320
224+
Return FloppyDiskType.Floppy180
225+
Case 327680
226+
Return FloppyDiskType.Floppy320
227+
Case 368640
228+
Return FloppyDiskType.Floppy360
229+
Case 737280
230+
Return FloppyDiskType.Floppy720
231+
Case 1228800
232+
Return FloppyDiskType.Floppy1200
233+
Case 1474560
234+
Return FloppyDiskType.Floppy1440
235+
Case 1720320
236+
Return FloppyDiskType.FloppyDMF2048
237+
Case 2949120
238+
Return FloppyDiskType.Floppy2880
239+
Case Else
240+
Return FloppyDiskType.FloppyUnknown
241+
End Select
242+
End Function
243+
163244
Public Function BytesToSector(Bytes As UInteger) As UInteger
164245
Return Math.Ceiling(Bytes / BYTES_PER_SECTOR)
165246
End Function

DiskImageTool/DiskImageTool.vbproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<ProductName>DiskImageTool</ProductName>
3131
<PublisherName>Digitoxin</PublisherName>
3232
<ApplicationRevision>0</ApplicationRevision>
33-
<ApplicationVersion>1.26.0.%2a</ApplicationVersion>
33+
<ApplicationVersion>1.27.0.%2a</ApplicationVersion>
3434
<UseApplicationTrust>false</UseApplicationTrust>
3535
<PublishWizardCompleted>true</PublishWizardCompleted>
3636
<BootstrapperEnabled>true</BootstrapperEnabled>

DiskImageTool/Forms/BootSectorForm.Designer.vb

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DiskImageTool/Forms/BootSectorForm.vb

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ Public Class BootSectorForm
4646
& vbCrLf & "360K Floppy" & vbTab & "2" _
4747
& vbCrLf & "720K Floppy" & vbTab & "2" _
4848
& vbCrLf & "1.2M Floppy" & vbTab & "1" _
49-
& vbCrLf & "1.44M Floppy" & vbTab & "1"
49+
& vbCrLf & "1.44M Floppy" & vbTab & "1" _
50+
& vbCrLf & "2.88M Floppy" & vbTab & "2" _
51+
& vbCrLf & "DMF Floppy" & vbTab & "2 or 4"
5052
SetHelpString(Msg, LblSectorsPerCluster, CboSectorsPerCluster)
5153

5254
Msg = "Number of reserved sectors in the reserved region of the volume starting at the first sector of the volume" _
@@ -68,7 +70,9 @@ Public Class BootSectorForm
6870
& vbCrLf & "360K Floppy" & vbTab & "112" _
6971
& vbCrLf & "720K Floppy" & vbTab & "112" _
7072
& vbCrLf & "1.2M Floppy" & vbTab & "224" _
71-
& vbCrLf & "1.44M Floppy" & vbTab & "224"
73+
& vbCrLf & "1.44M Floppy" & vbTab & "224" _
74+
& vbCrLf & "2.88M Floppy" & vbTab & "240" _
75+
& vbCrLf & "DMF Floppy" & vbTab & "16"
7276
SetHelpString(Msg, LblRootDirectoryEntries, TxtRootDirectoryEntries)
7377

7478
Msg = "Total number of sectors in the volume" _
@@ -79,12 +83,14 @@ Public Class BootSectorForm
7983
& vbCrLf & "360K Floppy" & vbTab & "720" _
8084
& vbCrLf & "720K Floppy" & vbTab & "1440" _
8185
& vbCrLf & "1.2M Floppy" & vbTab & "2400" _
82-
& vbCrLf & "1.44M Floppy" & vbTab & "2880"
86+
& vbCrLf & "1.44M Floppy" & vbTab & "2880" _
87+
& vbCrLf & "2.88M Floppy" & vbTab & "5760" _
88+
& vbCrLf & "DMF Floppy" & vbTab & "3360"
8389
SetHelpString(Msg, LblSectorCountSmall, TxtSectorCountSmall)
8490

8591
Msg = "Media Descriptor" _
8692
& vbCrLf & vbCrLf & "Allowed Values:" _
87-
& vbCrLf & "F0" & vbTab & "1.44M & 2.88M Floppy" _
93+
& vbCrLf & "F0" & vbTab & "1.44M, 2.88M, DMF Floppy" _
8894
& vbCrLf & "F8" & vbTab & "Fixed Disk" _
8995
& vbCrLf & "F9" & vbTab & "720K & 1.2M Floppy" _
9096
& vbCrLf & "FA" & vbTab & "Unused" _
@@ -103,7 +109,9 @@ Public Class BootSectorForm
103109
& vbCrLf & "360K Floppy" & vbTab & "2" _
104110
& vbCrLf & "720K Floppy" & vbTab & "3" _
105111
& vbCrLf & "1.2M Floppy" & vbTab & "7" _
106-
& vbCrLf & "1.44M Floppy" & vbTab & "9"
112+
& vbCrLf & "1.44M Floppy" & vbTab & "9" _
113+
& vbCrLf & "2.88M Floppy" & vbTab & "9" _
114+
& vbCrLf & "DMF Floppy" & vbTab & "3 or 5"
107115
SetHelpString(Msg, LblSectorsPerFAT, TxtSectorsPerFAT)
108116

109117
Msg = "Number of sectors per track on the disk" _
@@ -114,7 +122,9 @@ Public Class BootSectorForm
114122
& vbCrLf & "360K Floppy" & vbTab & "9" _
115123
& vbCrLf & "720K Floppy" & vbTab & "9" _
116124
& vbCrLf & "1.2M Floppy" & vbTab & "15" _
117-
& vbCrLf & "1.44M Floppy" & vbTab & "18"
125+
& vbCrLf & "1.44M Floppy" & vbTab & "18" _
126+
& vbCrLf & "2.88M Floppy" & vbTab & "36" _
127+
& vbCrLf & "DMF Floppy" & vbTab & "21"
118128
SetHelpString(Msg, LblSectorsPerTrack, TxtSectorsPerTrack)
119129

120130
Msg = "Number of physical heads (sides) on the disk" _
@@ -125,7 +135,9 @@ Public Class BootSectorForm
125135
& vbCrLf & "360K Floppy" & vbTab & "2" _
126136
& vbCrLf & "720K Floppy" & vbTab & "2" _
127137
& vbCrLf & "1.2M Floppy" & vbTab & "2" _
128-
& vbCrLf & "1.44M Floppy" & vbTab & "2"
138+
& vbCrLf & "1.44M Floppy" & vbTab & "2" _
139+
& vbCrLf & "2.88M Floppy" & vbTab & "2" _
140+
& vbCrLf & "DMF Floppy" & vbTab & "2"
129141
SetHelpString(Msg, LblNumberOfHeads, TxtNumberOfHeads)
130142

131143
Msg = "Number of sectors preceeding the first sector of a partitioned volume" _
@@ -173,7 +185,6 @@ Public Class BootSectorForm
173185
Dim Result As Boolean = True
174186

175187
For Each value In b
176-
Debug.Print(value)
177188
If value <> 0 Then
178189
Result = False
179190
Exit For
@@ -249,7 +260,7 @@ Public Class BootSectorForm
249260
SetValue(TxtSectorCountSmall, BootSector.SectorCountSmall)
250261
SetValue(HexMediaDescriptor, BootSector.MediaDescriptor.ToString("X2"), Array.ConvertAll(BootSector.ValidMediaDescriptor, Function(x) x.ToString("X2")))
251262
SetValue(TxtSectorsPerFAT, BootSector.SectorsPerFAT)
252-
SetValue(TxtSectorsPerTrack, BootSector.SectorsPerTrack, {"8", "9", "15", "18"})
263+
SetValue(TxtSectorsPerTrack, BootSector.SectorsPerTrack, {"8", "9", "15", "18", "21", "36"})
253264
SetValue(TxtNumberOfHeads, BootSector.NumberOfHeads, {"1", "2"})
254265
SetValue(TxtHiddenSectors, BootSector.HiddenSectors)
255266
End Sub
@@ -294,14 +305,17 @@ Public Class BootSectorForm
294305

295306
Private Sub PopulateDiskTypes()
296307
CboDiskType.Items.Clear()
297-
CboDiskType.Items.Add(New BootSectorDiskType("160K Floppy", 163840))
298-
CboDiskType.Items.Add(New BootSectorDiskType("180K Floppy", 184320))
299-
CboDiskType.Items.Add(New BootSectorDiskType("320K Floppy", 327680))
300-
CboDiskType.Items.Add(New BootSectorDiskType("360K Floppy", 368640))
301-
CboDiskType.Items.Add(New BootSectorDiskType("720K Floppy", 737280))
302-
CboDiskType.Items.Add(New BootSectorDiskType("1.2M Floppy", 1228800))
303-
CboDiskType.Items.Add(New BootSectorDiskType("1.44M Floppy", 1474560))
304-
CboDiskType.Items.Add(New BootSectorDiskType("Custom", 0))
308+
CboDiskType.Items.Add(New BootSectorDiskType("160K", FloppyDiskType.Floppy160))
309+
CboDiskType.Items.Add(New BootSectorDiskType("180K", FloppyDiskType.Floppy180))
310+
CboDiskType.Items.Add(New BootSectorDiskType("320K", FloppyDiskType.Floppy320))
311+
CboDiskType.Items.Add(New BootSectorDiskType("360K", FloppyDiskType.Floppy360))
312+
CboDiskType.Items.Add(New BootSectorDiskType("720K", FloppyDiskType.Floppy720))
313+
CboDiskType.Items.Add(New BootSectorDiskType("1.2M", FloppyDiskType.Floppy1200))
314+
CboDiskType.Items.Add(New BootSectorDiskType("1.44M", FloppyDiskType.Floppy1440))
315+
CboDiskType.Items.Add(New BootSectorDiskType("2.88M", FloppyDiskType.Floppy2880))
316+
CboDiskType.Items.Add(New BootSectorDiskType("DMF (1024)", FloppyDiskType.FloppyDMF1024))
317+
CboDiskType.Items.Add(New BootSectorDiskType("DMF (2048)", FloppyDiskType.FloppyDMF2048))
318+
CboDiskType.Items.Add(New BootSectorDiskType("Custom", FloppyDiskType.FloppyUnknown))
305319

306320
CboDiskType.SelectedIndex = CboDiskType.Items.Count - 1
307321
End Sub
@@ -381,8 +395,8 @@ Public Class BootSectorForm
381395
Dim SelectedItem As BootSectorDiskType = Nothing
382396

383397
For Each DiskType As BootSectorDiskType In CboDiskType.Items
384-
If DiskType.Size > 0 Then
385-
Dim BootSector = BuildBootSectorFromFileSize(DiskType.Size)
398+
If DiskType.Type <> FloppyDiskType.FloppyUnknown Then
399+
Dim BootSector = BuildBootSectorFromType(DiskType.Type)
386400
If BootSector.MediaDescriptor = HexMediaDescriptor.GetHex(0) _
387401
And BootSector.NumberOfHeads = TxtNumberOfHeads.Text _
388402
And BootSector.RootEntryCount = TxtRootDirectoryEntries.Text _
@@ -691,8 +705,8 @@ Public Class BootSectorForm
691705

692706
_SuppressEvent = True
693707
Dim DiskType As BootSectorDiskType = CboDiskType.SelectedItem
694-
If DiskType.Size > 0 Then
695-
Dim BootSector = BuildBootSectorFromFileSize(DiskType.Size)
708+
If DiskType.Type <> FloppyDiskType.FloppyUnknown Then
709+
Dim BootSector = BuildBootSectorFromType(DiskType.Type)
696710
PopulateBootRecord(BootSector)
697711
End If
698712
_SuppressEvent = False
@@ -714,7 +728,7 @@ Public Class BootSectorForm
714728
Private Sub CboDiskType_LostFocus(sender As Object, e As EventArgs) Handles CboDiskType.LostFocus
715729
_SuppressEvent = True
716730
Dim DiskType As BootSectorDiskType = CboDiskType.SelectedItem
717-
If DiskType.Size = 0 Then
731+
If DiskType.Type = FloppyDiskType.FloppyUnknown Then
718732
SetCurrentDiskType()
719733
End If
720734
_SuppressEvent = False
@@ -758,13 +772,13 @@ Public Class BootSectorForm
758772
End Class
759773

760774
Private Class BootSectorDiskType
761-
Public Sub New(Name As String, Size As Integer)
775+
Public Sub New(Name As String, Type As FloppyDiskType)
762776
_Name = Name
763-
_Size = Size
777+
_Type = Type
764778
End Sub
765779

766780
Public Property Name As String
767-
Public Property Size As Integer
781+
Public Property Type As FloppyDiskType
768782

769783
Public Overrides Function ToString() As String
770784
Return _Name

DiskImageTool/Forms/HexViewForm.vb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Public Class HexViewForm
3939
_LastSearch = New HexSearch
4040

4141
If Not _BootSector.IsValidImage Then
42-
_BootSector = BuildBootSectorFromFileSize(_HexViewSectorData.Disk.Data.Length)
42+
_BootSector = BuildBootSectorFromType(GetFloppyDiskType(_HexViewSectorData.Disk.Data.Length))
4343
End If
4444

4545
If Not _BootSector.IsValidImage Then

0 commit comments

Comments
 (0)