Commit c27cf15

Nick committed on
Implement FC callback for song rendering, which fixes bugs
commit c27cf15d6959a0f86be910e45212aa13eafa34e3 parent c348cd8
2 changed files +11−13
ModifiedCpu/z80cpu.pas +0−1
@@ -2129,7 +2129,6 @@ end;
2129 function uge_fc: byte; 2129 function uge_fc: byte;
2130 begin 2130 begin
2131 if Assigned(FCCallback) then FCCallback; 2131 if Assigned(FCCallback) then FCCallback;
2132 writeln('fc');
2133 Result := 0; 2132 Result := 0;
2134 end; 2133 end;
2135 2134
Modifiedrendertowave.pas +11−12
@@ -49,7 +49,7 @@ type
49 procedure RenderEntireSong(Times: Integer); 49 procedure RenderEntireSong(Times: Integer);
50 procedure RenderFromPosition(FromPos, ToPos: Integer); 50 procedure RenderFromPosition(FromPos, ToPos: Integer);
51 51
52 procedure OrderCheckFD; 52 procedure OrderCheckCallback;
53 public 53 public
54 54
55 end; 55 end;
@@ -128,7 +128,7 @@ begin
128 ResetSound; 128 ResetSound;
129 enablesound; 129 enablesound;
130 130
131 FDCallback := nil; 131 FCCallback := nil;
132 load('render/preview.gb'); 132 load('render/preview.gb');
133 133
134 Proc := TProcess.Create(nil); 134 Proc := TProcess.Create(nil);
@@ -174,10 +174,10 @@ end;
174 174
175 procedure TfrmRenderToWave.RenderEntireSong(Times: Integer); 175 procedure TfrmRenderToWave.RenderEntireSong(Times: Integer);
176 var 176 var
177 OldFD: TCPUCallback; 177 OldFC: TCPUCallback;
178 begin 178 begin
179 OldFD := FDCallback; 179 OldFC := FCCallback;
180 FDCallback := @OrderCheckFD; 180 FCCallback := @OrderCheckCallback;
181 181
182 SetLength(SeenPatterns, PeekSymbol(SYM_ORDER_COUNT) div 2); 182 SetLength(SeenPatterns, PeekSymbol(SYM_ORDER_COUNT) div 2);
183 StartOfSong := -1; 183 StartOfSong := -1;
@@ -189,17 +189,17 @@ begin
189 until ((StartOfSong <> -1) and (SeenPatterns[StartOfSong]-1 = PlayEntireSongSpinEdit.Value)) or CancelRequested; 189 until ((StartOfSong <> -1) and (SeenPatterns[StartOfSong]-1 = PlayEntireSongSpinEdit.Value)) or CancelRequested;
190 190
191 SetLength(SeenPatterns, 0); 191 SetLength(SeenPatterns, 0);
192 FDCallback := OldFD; 192 FCCallback := OldFC;
193 end; 193 end;
194 194
195 procedure TfrmRenderToWave.RenderFromPosition(FromPos, ToPos: Integer); 195 procedure TfrmRenderToWave.RenderFromPosition(FromPos, ToPos: Integer);
196 var 196 var
197 OldFD: TCPUCallback; 197 OldFC: TCPUCallback;
198 StartPattern, TargetPattern: Integer; 198 StartPattern, TargetPattern: Integer;
199 SawTargetPattern: Boolean; 199 SawTargetPattern: Boolean;
200 begin 200 begin
201 OldFD := FDCallback; 201 OldFC := FCCallback;
202 FDCallback := @OrderCheckFD; 202 FCCallback := @OrderCheckCallback;
203 203
204 SetLength(SeenPatterns, PeekSymbol(SYM_ORDER_COUNT) div 2); 204 SetLength(SeenPatterns, PeekSymbol(SYM_ORDER_COUNT) div 2);
205 StartOfSong := -1; 205 StartOfSong := -1;
@@ -226,15 +226,14 @@ begin
226 CancelRequested; 226 CancelRequested;
227 227
228 SetLength(SeenPatterns, 0); 228 SetLength(SeenPatterns, 0);
229 FDCallback := OldFD; 229 FCCallback := OldFC;
230 end; 230 end;
231 231
232 procedure TfrmRenderToWave.OrderCheckFD; 232 procedure TfrmRenderToWave.OrderCheckCallback;
233 var 233 var
234 Pat: Integer; 234 Pat: Integer;
235 begin 235 begin
236 Pat := (PeekSymbol(SYM_CURRENT_ORDER) div 2); 236 Pat := (PeekSymbol(SYM_CURRENT_ORDER) div 2);
237 if Pat = CurrentPattern then Exit;
238 237
239 if (SeenPatterns[Pat] <> 0) and (StartOfSong = -1) then 238 if (SeenPatterns[Pat] <> 0) and (StartOfSong = -1) then
240 StartOfSong := Pat; 239 StartOfSong := Pat;