Pasti file Reader-Writer  1.0
Pasti files
BufferWindow.xaml.cs
Go to the documentation of this file.
1 
27 using System;
28 using System.Collections.Generic;
29 using System.IO;
30 using System.Linq;
31 using System.Text;
32 using System.Threading.Tasks;
33 using System.Windows;
34 using System.Windows.Controls;
35 using System.Windows.Data;
36 using System.Windows.Documents;
37 using System.Windows.Input;
38 using System.Windows.Media;
39 using System.Windows.Media.Imaging;
40 using System.Windows.Shapes;
41 
42 
43 namespace Pasti {
47  public partial class BufferWindow : Window {
51  public BufferWindow() {
52  InitializeComponent();
53  }
54 
61  public void displaySectorBuffer(Floppy floppy, int track, int side) {
62 
63  displayBuffer.FontFamily = new FontFamily("Consolas");
64  displayBuffer.FontSize = 16;
65  displayBuffer.FontStyle = FontStyles.Normal;
66  displayBuffer.FontWeight = FontWeights.Normal;
67 
68  Track t = floppy.tracks[track, side];
69 
70  displayBuffer.AppendText(String.Format("Track {0:D2}.{1} has {2} sectors\n", track, side, t.sectorCount));
71  for (int sect = 0; sect < t.sectorCount; sect++) {
72  displayBuffer.AppendText(String.Format("Sector {0}", t.sectors[sect].id.number));
73  displayBuffer.AppendText(String.Format(" T={0} H={1} N={2} S={3} CRC={4:X4}",
74  t.sectors[sect].id.track, t.sectors[sect].id.side, t.sectors[sect].id.number, t.sectors[sect].id.size, t.sectors[sect].id.crc));
75 
76  if (t.sectors[sect].sectorData != null) {
77  displayBuffer.AppendText(String.Format(" has {0} bytes\n", t.sectors[sect].sectorData.Count()));
78  displayBuffer.AppendText(String.Format(" bitPosition {0}, Flags {1:X2}", t.sectors[sect].bitPosition, t.sectors[sect].fdcFlags));
79  displayBuffer.AppendText(String.Format(" {0} {1}\n", ((t.sectors[sect].fdcFlags & SectorDesc.CRC_ERR) == 0) ?
80  "Good CRC" : "Bad CRC", (t.sectors[sect].fuzzyData != null) ? "Has Fuzzy bytes" : ""));
81  drawBuffer(t.sectors[sect].sectorData);
82  if (t.sectors[sect].fuzzyData != null) {
83  displayBuffer.AppendText(String.Format("\nFuzzy bytes for sector {0}\n", t.sectors[sect].fuzzyData.Count()));
84  drawBuffer(t.sectors[sect].fuzzyData);
85  }
86  if (t.sectors[sect].timmingData != null) {
87  displayBuffer.AppendText(String.Format("\nTiming values for sector {0}\n", t.sectors[sect].timmingData.Count()));
88  byte[] timming = new byte[t.sectors[sect].timmingData.Count()];
89  for (int i = 0; i < t.sectors[sect].timmingData.Count(); i++)
90  timming[i] = (byte)t.sectors[sect].timmingData[i];
91  drawBuffer(timming);
92  }
93 
94  }
95  else
96  displayBuffer.AppendText(" *** Sector has no data ***\n");
97  displayBuffer.AppendText("\n");
98  }
99  }
100 
101 
102 
103 
110  public void displayTrackBuffer(Floppy floppy, int track, int side) {
111  if (floppy == null) return;
112  Track t = floppy.tracks[track, side];
113  displayBuffer.FontFamily = new FontFamily("Consolas");
114  displayBuffer.FontSize = 16;
115  displayBuffer.FontStyle = FontStyles.Normal;
116  displayBuffer.FontWeight = FontWeights.Normal;
117 
118  displayBuffer.AppendText(String.Format("Track {0:D2}.{1} {2} bytes with {3} sectors\n",
119  track, side, t.byteCount, t.sectors.Count()));
120  if (t.trackData != null)
122  else
123  displayBuffer.AppendText("Track has no Track Image Data Record");
124  }
125 
131  public void drawBuffer(byte[] buffer, string message = null) {
132  displayBuffer.FontFamily = new FontFamily("Consolas");
133  displayBuffer.FontSize = 16;
134  displayBuffer.FontStyle = FontStyles.Normal;
135  displayBuffer.FontWeight = FontWeights.Normal;
136  if (message != null)
137  displayBuffer.AppendText(message);
138 
139  for (int i = 0; i < buffer.Count(); i += 16) {
140  displayBuffer.AppendText(String.Format("{0:D5} ", i));
141 
142  string ascii = " ";
143  for (int j = 0; j < 16; j++) {
144  if ((i + j) < buffer.Count()) {
145  displayBuffer.AppendText(String.Format("{0:X2} ", buffer[i + j]));
146  char ch = Convert.ToChar(buffer[i + j]);
147  ascii += Char.IsControl(ch) ? "." : ch.ToString();
148  }
149  else
150  displayBuffer.AppendText(String.Format(" "));
151  } // one more line
152  displayBuffer.AppendText(ascii);
153  displayBuffer.AppendText(String.Format("\n"));
154  } // all lines
155  }
156 
157  }
158 }
Track[,] tracks
Array of Tracks
Definition: FloppyStruct.cs:90
ushort crc
CRC Value from address field
Definition: PastiStruct.cs:151
BufferWindow()
Create a new BufferWindow object.
byte track
Track number from address field
Definition: PastiStruct.cs:143
uint sectorCount
Number of sectors for this track
Definition: FloppyStruct.cs:58
ushort bitPosition
position in the track of the sector address field in bits
Definition: FloppyStruct.cs:42
byte size
Size value from address field
Definition: PastiStruct.cs:149
byte[] trackData
buffer for the track data if necessary
Definition: FloppyStruct.cs:61
Contains information about one Track
Definition: FloppyStruct.cs:53
void displaySectorBuffer(Floppy floppy, int track, int side)
Draw the content of the buffer
Interaction logic for TrackBuffer.xaml
Contains information about a complete Floppy disk
Definition: FloppyStruct.cs:88
IDField id
Address field content
Definition: FloppyStruct.cs:46
const byte CRC_ERR
CRC Error (in Data if RNF=0 else in ID)
Definition: PastiStruct.cs:221
Pasti File Sector Descriptor
Definition: PastiStruct.cs:173
byte number
Sector number from address field
Definition: PastiStruct.cs:147
uint byteCount
Number of bytes in the track
Definition: FloppyStruct.cs:68
Sector[] sectors
Array of Sectors
Definition: FloppyStruct.cs:55
byte[] sectorData
buffer for the sector data
Definition: FloppyStruct.cs:36
void displayTrackBuffer(Floppy floppy, int track, int side)
Display the content of the Track Information in a textbox
ushort[] timmingData
buffer for timing bytes if necessary
Definition: FloppyStruct.cs:40
void drawBuffer(byte[] buffer, string message=null)
Display the content of TrackBuffer buffer in the displayBuffer TextBox
byte side
Head number from address field
Definition: PastiStruct.cs:145
byte[] fuzzyData
buffer for fuzzy mask bytes if necessary
Definition: FloppyStruct.cs:38
byte fdcFlags
Status returned by the FDC
Definition: FloppyStruct.cs:48