@@ -6,9 +6,14 @@ interface |
| 6 |
|
6 |
|
| 7 |
uses |
7 |
uses |
| 8 |
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, EditBtn, |
8 |
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, EditBtn, |
| 9 |
ExtCtrls, Spin, ComCtrls, constants; |
9 |
ExtCtrls, Spin, ComCtrls, constants, fgl; |
| 10 |
|
10 |
|
| 11 |
type |
11 |
type |
|
|
12 |
TOrdersSeenSet = specialize TFPGMap<Integer, Boolean>; |
|
|
13 |
|
|
|
14 |
{ EHaltingProblem } |
|
|
15 |
|
|
|
16 |
EHaltingProblem = class(Exception); |
| 12 |
|
17 |
|
| 13 |
{ TfrmRenderToWave } |
18 |
{ TfrmRenderToWave } |
| 14 |
|
19 |
|
@@ -37,6 +42,8 @@ type |
| 37 |
CurrentSeenPattern: Integer; |
42 |
CurrentSeenPattern: Integer; |
| 38 |
TimesSeenTargetPattern: Integer; |
43 |
TimesSeenTargetPattern: Integer; |
| 39 |
|
44 |
|
|
|
45 |
OrdersSeen: TOrdersSeenSet; |
|
|
46 |
|
| 40 |
procedure ExportWaveToFile(Filename: String; Seconds: Integer); overload; |
47 |
procedure ExportWaveToFile(Filename: String; Seconds: Integer); overload; |
| 41 |
procedure ExportWaveToFile(Filename: String; OrderNum: Integer; Loops: Integer); overload; |
48 |
procedure ExportWaveToFile(Filename: String; OrderNum: Integer; Loops: Integer); overload; |
| 42 |
|
49 |
|
@@ -93,6 +100,8 @@ var |
| 93 |
CompletedCycles: QWord = 0; |
100 |
CompletedCycles: QWord = 0; |
| 94 |
CyclesToDo: QWord; |
101 |
CyclesToDo: QWord; |
| 95 |
begin |
102 |
begin |
|
|
103 |
Button1.Enabled := False; |
|
|
104 |
|
| 96 |
CyclesToDo := (70224*60)*Seconds; |
105 |
CyclesToDo := (70224*60)*Seconds; |
| 97 |
ProgressBar1.Position := 0; |
106 |
ProgressBar1.Position := 0; |
| 98 |
|
107 |
|
@@ -113,6 +122,8 @@ begin |
| 113 |
end; |
122 |
end; |
| 114 |
|
123 |
|
| 115 |
EndWritingSoundToFile; |
124 |
EndWritingSoundToFile; |
|
|
125 |
|
|
|
126 |
Button1.Enabled:=True; |
| 116 |
end; |
127 |
end; |
| 117 |
|
128 |
|
| 118 |
procedure TfrmRenderToWave.ExportWaveToFile(Filename: String; |
129 |
procedure TfrmRenderToWave.ExportWaveToFile(Filename: String; |
@@ -120,6 +131,8 @@ procedure TfrmRenderToWave.ExportWaveToFile(Filename: String; |
| 120 |
var |
131 |
var |
| 121 |
TimesToSeePattern: Integer; |
132 |
TimesToSeePattern: Integer; |
| 122 |
begin |
133 |
begin |
|
|
134 |
Button1.Enabled:=False; |
|
|
135 |
|
| 123 |
TimesToSeePattern := (LoopTimesSpinEdit.Value+1); |
136 |
TimesToSeePattern := (LoopTimesSpinEdit.Value+1); |
| 124 |
TimesSeenTargetPattern := 0; |
137 |
TimesSeenTargetPattern := 0; |
| 125 |
CurrentSeenPattern := -1; |
138 |
CurrentSeenPattern := -1; |
@@ -135,19 +148,31 @@ begin |
| 135 |
load('hUGEDriver/preview.gb'); |
148 |
load('hUGEDriver/preview.gb'); |
| 136 |
SymbolTable := ParseSymFile('hUGEDriver/preview.sym'); |
149 |
SymbolTable := ParseSymFile('hUGEDriver/preview.sym'); |
| 137 |
|
150 |
|
| 138 |
while TimesSeenTargetPattern < TimesToSeePattern do begin |
151 |
try |
| 139 |
z80_decode; |
152 |
while TimesSeenTargetPattern < TimesToSeePattern do begin |
| 140 |
ProgressBar1.Position := Trunc((TimesSeenTargetPattern / TimesToSeePattern)*100); |
153 |
z80_decode; |
| 141 |
if Random(500) = 1 then Application.ProcessMessages; |
154 |
ProgressBar1.Position := Trunc((TimesSeenTargetPattern / TimesToSeePattern)*100); |
|
|
155 |
if Random(500) = 1 then Application.ProcessMessages; |
|
|
156 |
end; |
|
|
157 |
except |
|
|
158 |
on E: EHaltingProblem do begin |
|
|
159 |
MessageDlg('Error!', E.Message, mtError, [mbOK], ''); |
|
|
160 |
end; |
| 142 |
end; |
161 |
end; |
| 143 |
|
162 |
|
| 144 |
EndWritingSoundToFile; |
163 |
EndWritingSoundToFile; |
|
|
164 |
|
|
|
165 |
Button1.Enabled:=True; |
| 145 |
end; |
166 |
end; |
| 146 |
|
167 |
|
| 147 |
procedure TfrmRenderToWave.OrderCheckFD; |
168 |
procedure TfrmRenderToWave.OrderCheckFD; |
| 148 |
var |
169 |
var |
| 149 |
Pat: Integer; |
170 |
Pat: Integer; |
| 150 |
begin |
171 |
begin |
|
|
172 |
{if ((OrdersSeen.IndexOf(Pat) <> -1) and (OrdersSeen.KeyData[Pat])) and |
|
|
173 |
(OrdersSeen.IndexOf(OrderSpinEdit.Value) = -1) then |
|
|
174 |
raise EHaltingProblem.Create('The specified target order is never reached again in the song!');} |
|
|
175 |
|
| 151 |
Pat := (PeekSymbol(SYM_CURRENT_ORDER) div 2); |
176 |
Pat := (PeekSymbol(SYM_CURRENT_ORDER) div 2); |
| 152 |
if CurrentSeenPattern <> Pat then begin |
177 |
if CurrentSeenPattern <> Pat then begin |
| 153 |
CurrentSeenPattern := Pat; |
178 |
CurrentSeenPattern := Pat; |