@@ -13,18 +13,23 @@ public sealed class TapeManager
13
13
{
14
14
private DirectAccess ? _directAccess ;
15
15
16
- public Cassette Cassette { get ; private set ; } = new ( ) ;
16
+ public Cassette Cassette { get ; private set ; }
17
17
18
18
public bool IsTapeLoaded { get ; private set ; }
19
19
public bool IsTapeSaveEnabled { get ; set ; }
20
+
21
+ public TapeSpeed TapeLoadSpeed { get ; set ; }
20
22
public TapeSpeed TapeSaveSpeed { get ; set ; }
23
+
21
24
public double BlockReadProgressPercentage => CassettePlayer ? . BlockReadProgressPercentage ?? 0 ;
22
25
23
26
internal CassettePlayer ? CassettePlayer { get ; private set ; }
24
27
25
28
public delegate void TapeStateChangedEvent ( TapeStateEventArgs e ) ;
26
29
public event TapeStateChangedEvent ? TapeStateChanged ;
27
30
31
+ public TapeManager ( ) => Cassette = CreateCassette ( ) ;
32
+
28
33
internal void Attach ( Z80 cpu , IMemory memory , HardwareSettings hardware )
29
34
{
30
35
CassettePlayer = new CassettePlayer ( Cassette , cpu . Clock , hardware ) ;
@@ -35,7 +40,7 @@ internal void Attach(Z80 cpu, IMemory memory, HardwareSettings hardware)
35
40
36
41
public void NewTape ( )
37
42
{
38
- Cassette = new Cassette ( ) ;
43
+ Cassette = CreateCassette ( ) ;
39
44
40
45
TapeStateChanged ? . Invoke ( new TapeStateEventArgs ( TapeAction . TapeInserted ) ) ;
41
46
@@ -56,14 +61,14 @@ public void FastSave()
56
61
NewTape ( ) ;
57
62
}
58
63
59
- _directAccess ? . FastSave ( Cassette , TapeSaveSpeed ) ;
64
+ _directAccess ? . FastSave ( Cassette ) ;
60
65
}
61
66
62
67
public void InsertTape ( Stream stream , FileType fileType , bool autoPlay = false )
63
68
{
64
69
StopTape ( ) ;
65
70
66
- Cassette . Load ( stream , fileType ) ;
71
+ Cassette . SetContent ( stream , fileType ) ;
67
72
InsertTape ( ) ;
68
73
69
74
if ( autoPlay )
@@ -72,17 +77,17 @@ public void InsertTape(Stream stream, FileType fileType, bool autoPlay = false)
72
77
}
73
78
}
74
79
75
- public void InsertTape ( string fileName , bool autoPlay = false )
80
+ public void InsertTape ( string fileName )
76
81
{
77
82
var fileType = FileTypes . GetFileType ( fileName ) ;
78
83
var stream = File . OpenRead ( fileName ) ;
79
84
80
- InsertTape ( stream , fileType , autoPlay ) ;
85
+ InsertTape ( stream , fileType ) ;
81
86
}
82
87
83
88
public void InsertTape ( TzxFile tzxFile , int currentBlockIndex )
84
89
{
85
- Cassette . Load ( tzxFile , currentBlockIndex ) ;
90
+ Cassette . SetContent ( tzxFile , currentBlockIndex ) ;
86
91
InsertTape ( ) ;
87
92
}
88
93
@@ -111,9 +116,38 @@ public void EjectTape()
111
116
StopTape ( ) ;
112
117
TapeStateChanged ? . Invoke ( new TapeStateEventArgs ( TapeAction . TapeEjected ) ) ;
113
118
114
- Cassette = new Cassette ( ) ;
119
+ Cassette = CreateCassette ( ) ;
115
120
IsTapeLoaded = false ;
116
121
}
117
122
118
123
public void RewindTape ( ) => CassettePlayer ? . Rewind ( ) ;
124
+
125
+ private Cassette CreateCassette ( )
126
+ {
127
+ var cassette = new Cassette ( ) ;
128
+
129
+ cassette . BlockSelected += CassetteOnBlockSelected ;
130
+
131
+ return cassette ;
132
+ }
133
+
134
+ private void CassetteOnBlockSelected ( BlockSelectedEventArgs e )
135
+ {
136
+ if ( CassettePlayer ? . IsPlaying == true )
137
+ {
138
+ return ;
139
+ }
140
+
141
+ if ( e . Position == Cassette . Content . Blocks . Count - 1 )
142
+ {
143
+ return ;
144
+ }
145
+
146
+ if ( Cassette . Content . Blocks [ e . Position + 1 ] . BlockId == BlockCode . TurboSpeedData )
147
+ {
148
+ //PlayTape();
149
+ }
150
+
151
+ Console . WriteLine ( $ "Block selected: { e . Position } ") ;
152
+ }
119
153
}
0 commit comments