Commit 27793e3

Nick committed on
Working on note preview
commit 27793e3d9de5bdf448570652c1b1392c58cc0ce8 parent 05e51d2
7 changed files +66−66
Modifiedconstants.pas +1−0
@@ -43,6 +43,7 @@ const
43 NR42 = $FF21; 43 NR42 = $FF21;
44 NR43 = $FF22; 44 NR43 = $FF22;
45 NR44 = $FF23; 45 NR44 = $FF23;
46 AUD3_WAVE_RAM = $FF30;
46 47
47 LOWEST_NOTE = 0; 48 LOWEST_NOTE = 0;
48 C_3 = 0; 49 C_3 = 0;
Modifiedeffecteditor.lfm +2−2
@@ -1,7 +1,7 @@
1 object frmEffectEditor: TfrmEffectEditor 1 object frmEffectEditor: TfrmEffectEditor
2 Left = 517 2 Left = 583
3 Height = 416 3 Height = 416
4 Top = 493 4 Top = 421
5 Width = 684 5 Width = 684
6 BorderIcons = [biSystemMenu, biMinimize] 6 BorderIcons = [biSystemMenu, biMinimize]
7 BorderStyle = bsDialog 7 BorderStyle = bsDialog
Modifiedhalt.z80 +7−4
@@ -30,7 +30,10 @@ _addr = _addr + 1
30 ; Set volume 30 ; Set volume
31 ld a, $77 31 ld a, $77
32 ld [rAUDVOL], a 32 ld [rAUDVOL], a
33 ; silence ch3 33 ; silence ch3
34 ld a, 0 34 ld a, 0
35 ld [rAUD3LEVEL], a 35 ld [rAUD3LEVEL], a
36 halt 36 bing:
37 jr bing ; the same as a halt on an emulator, yet
38 ; allows for ch3 playback. it's a hack.
39 ; halt
Modifiedinstruments.pas +5−7
@@ -200,10 +200,10 @@ var
200 Regs: TRegisters; 200 Regs: TRegisters;
201 begin 201 begin
202 Regs := NoiseInstrumentToRegisters(0, True, Instrument); 202 Regs := NoiseInstrumentToRegisters(0, True, Instrument);
203 Result[0] :=Regs.NR41; 203 Result[0] := Regs.NR41;
204 Result[1] :=Regs.NR42; 204 Result[1] := Regs.NR42;
205 Result[2] :=Regs.NR43; 205 Result[2] := Regs.NR43 and %00001111; // remove shift clock freq
206 Result[3] :=Regs.NR44 206 Result[3] := Regs.NR44;
207 end; 207 end;
208 208
209 function InstrumentToBytes(Instrument: TInstrument): TAsmInstrument; 209 function InstrumentToBytes(Instrument: TInstrument): TAsmInstrument;
@@ -244,8 +244,6 @@ begin
244 NR34.FrequencyBits := (Frequency and %0000011100000000) shr 8; 244 NR34.FrequencyBits := (Frequency and %0000011100000000) shr 8;
245 NR34.UseLength := Instr.LengthEnabled; 245 NR34.UseLength := Instr.LengthEnabled;
246 246
247 // Copy to wave ram
248
249 Result.Type_ := Wave; 247 Result.Type_ := Wave;
250 Result.NR30 := NR30.ByteValue; 248 Result.NR30 := NR30.ByteValue;
251 Result.NR31 := NR31; 249 Result.NR31 := NR31;
@@ -275,7 +273,7 @@ begin
275 NR42.SweepNumber := Instr.VolSweepAmount; 273 NR42.SweepNumber := Instr.VolSweepAmount;
276 NR42.Direction := Instr.VolSweepDirection = Up; 274 NR42.Direction := Instr.VolSweepDirection = Up;
277 275
278 NR43.ShiftClockFrequency := Instr.ShiftClockFreq; // Quantize CH4 note 276 NR43.ShiftClockFrequency := $F - (Frequency shr 7); // Quantize CH4 note
279 NR43.DividingRatio:= Instr.DividingRatio; 277 NR43.DividingRatio:= Instr.DividingRatio;
280 NR43.SevenBitCounter:=Instr.CounterStep = Seven; 278 NR43.SevenBitCounter:=Instr.CounterStep = Seven;
281 279
Modifiedtracker.lfm +21−22
@@ -1,7 +1,7 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 892 2 Left = 717
3 Height = 1275 3 Height = 1275
4 Top = 168 4 Top = 265
5 Width = 2056 5 Width = 2056
6 Caption = 'hUGETracker' 6 Caption = 'hUGETracker'
7 ClientHeight = 1241 7 ClientHeight = 1241
@@ -55,10 +55,10 @@ object frmTracker: TfrmTracker
55 Height = 845 55 Height = 845
56 Top = 0 56 Top = 0
57 Width = 1709 57 Width = 1709
58 ActivePage = PatternTabSheet 58 ActivePage = GeneralTabSheet
59 Align = alClient 59 Align = alClient
60 ParentFont = False 60 ParentFont = False
61 TabIndex = 1 61 TabIndex = 0
62 TabOrder = 0 62 TabOrder = 0
63 object GeneralTabSheet: TTabSheet 63 object GeneralTabSheet: TTabSheet
64 Caption = 'General' 64 Caption = 'General'
@@ -2018,23 +2018,6 @@ object frmTracker: TfrmTracker
2018 object MenuItem9: TMenuItem 2018 object MenuItem9: TMenuItem
2019 Action = PasteAction 2019 Action = PasteAction
2020 end 2020 end
2021 object N1: TMenuItem
2022 Caption = '-'
2023 end
2024 object MenuItem10: TMenuItem
2025 Caption = 'Select &All'
2026 Hint = 'Select All'
2027 ImageIndex = 39
2028 ShortCut = 16449
2029 OnClick = MenuItem10Click
2030 end
2031 object MenuItem8: TMenuItem
2032 Caption = '&Delete'
2033 Hint = 'Delete'
2034 ImageIndex = 13
2035 ShortCut = 46
2036 OnClick = MenuItem8Click
2037 end
2038 object N2: TMenuItem 2021 object N2: TMenuItem
2039 Caption = '-' 2022 Caption = '-'
2040 end 2023 end
@@ -2045,6 +2028,12 @@ object frmTracker: TfrmTracker
2045 ShortCut = 16474 2028 ShortCut = 16474
2046 OnClick = MenuItem11Click 2029 OnClick = MenuItem11Click
2047 end 2030 end
2031 object MenuItem8: TMenuItem
2032 Caption = 'Redo'
2033 ImageIndex = 56
2034 ShortCut = 16473
2035 OnClick = MenuItem8Click
2036 end
2048 end 2037 end
2049 object MenuItem3: TMenuItem 2038 object MenuItem3: TMenuItem
2050 Caption = 'Help' 2039 Caption = 'Help'
@@ -2064,9 +2053,19 @@ object frmTracker: TfrmTracker
2064 OnClick = MenuItem5Click 2053 OnClick = MenuItem5Click
2065 end 2054 end
2066 end 2055 end
2056 object MenuItem16: TMenuItem
2057 Caption = 'Tools'
2058 object MenuItem24: TMenuItem
2059 Caption = 'Remove unused patterns'
2060 Enabled = False
2061 end
2062 object MenuItem23: TMenuItem
2063 Caption = 'Find problems in song'
2064 Enabled = False
2065 end
2066 end
2067 object DebugPlayNoteButton: TMenuItem 2067 object DebugPlayNoteButton: TMenuItem
2068 Caption = 'Debug play note' 2068 Caption = 'Debug play note'
2069 Visible = False
2070 OnClick = DebugPlayNoteButtonClick 2069 OnClick = DebugPlayNoteButtonClick
2071 end 2070 end
2072 object DebugShiteButton: TMenuItem 2071 object DebugShiteButton: TMenuItem
Modifiedtracker.pas +28−29
@@ -22,6 +22,10 @@ type
22 CutAction: TAction; 22 CutAction: TAction;
23 ImageList2: TImageList; 23 ImageList2: TImageList;
24 GBSaveDialog: TSaveDialog; 24 GBSaveDialog: TSaveDialog;
25 MenuItem16: TMenuItem;
26 MenuItem23: TMenuItem;
27 MenuItem24: TMenuItem;
28 MenuItem8: TMenuItem;
25 WaveSaveDialog: TSaveDialog; 29 WaveSaveDialog: TSaveDialog;
26 Label22: TLabel; 30 Label22: TLabel;
27 Label23: TLabel; 31 Label23: TLabel;
@@ -69,7 +73,6 @@ type
69 CommentMemo: TMemo; 73 CommentMemo: TMemo;
70 Label20: TLabel; 74 Label20: TLabel;
71 Label21: TLabel; 75 Label21: TLabel;
72 MenuItem10: TMenuItem;
73 MenuItem11: TMenuItem; 76 MenuItem11: TMenuItem;
74 MenuItem12: TMenuItem; 77 MenuItem12: TMenuItem;
75 MenuItem13: TMenuItem; 78 MenuItem13: TMenuItem;
@@ -78,10 +81,8 @@ type
78 DebugShiteButton: TMenuItem; 81 DebugShiteButton: TMenuItem;
79 N3: TMenuItem; 82 N3: TMenuItem;
80 N2: TMenuItem; 83 N2: TMenuItem;
81 N1: TMenuItem;
82 MenuItem6: TMenuItem; 84 MenuItem6: TMenuItem;
83 MenuItem7: TMenuItem; 85 MenuItem7: TMenuItem;
84 MenuItem8: TMenuItem;
85 MenuItem9: TMenuItem; 86 MenuItem9: TMenuItem;
86 OpenDialog1: TOpenDialog; 87 OpenDialog1: TOpenDialog;
87 OrderEditPopup: TPopupMenu; 88 OrderEditPopup: TPopupMenu;
@@ -421,6 +422,9 @@ var
421 I: Integer; 422 I: Integer;
422 NewWaveform: T4bitWave; 423 NewWaveform: T4bitWave;
423 begin 424 begin
425 // TODO: Find some way to synchronize with the playback thread, so it doesn't
426 // fail sometimes.
427
424 with Song.Instruments[Instr] do 428 with Song.Instruments[Instr] do
425 begin 429 begin
426 case Type_ of 430 case Type_ of
@@ -433,17 +437,16 @@ begin
433 Spokeb(NR14, Regs.NR14); 437 Spokeb(NR14, Regs.NR14);
434 end; 438 end;
435 Wave: begin 439 Wave: begin
436 Regs := WaveInstrumentToRegisters(Freq, True, Song.Instruments[Instr]);
437 NewWaveform := ConvertWaveform(Song.Waves[Waveform]); 440 NewWaveform := ConvertWaveform(Song.Waves[Waveform]);
438 // Fill Wave RAM with the waveform 441 // Fill Wave RAM with the waveform
439 for I := 0 to 15 do 442 for I := Low(NewWaveform) to High(NewWaveform) do
440 Spokeb($FF30+I, NewWaveform[I]); 443 Spokeb(AUD3_WAVE_RAM+I, NewWaveform[I]);
441 444
442 Regs := WaveInstrumentToRegisters(Freq, True, Song.Instruments[Instr]); 445 Regs := WaveInstrumentToRegisters(Freq, True, Song.Instruments[Instr]);
443 446
444 Spokeb(NR30, Regs.NR30); 447 Spokeb(NR30, Regs.NR30);
445 Spokeb(NR31, Regs.NR31); 448 Spokeb(NR31, Regs.NR31);
446 Spokeb(NR32, Regs.NR32); 449 Spokeb(NR32, %00100000); //Regs.NR32);
447 Spokeb(NR33, Regs.NR33); 450 Spokeb(NR33, Regs.NR33);
448 Spokeb(NR34, Regs.NR34) 451 Spokeb(NR34, Regs.NR34)
449 end; 452 end;
@@ -889,29 +892,31 @@ var
889 Note: Integer; 892 Note: Integer;
890 Freq: Integer; 893 Freq: Integer;
891 begin 894 begin
892 {if not Keybindings.TryGetData(Key, Note) then Exit; 895 if Shift <> [] then Exit;
893 Inc(Note, OctaveSpinEdit.Value*12); 896 if not Keybindings.TryGetData(Key, Note) then Exit;
894 EnsureRange(Note, LOWEST_NOTE, HIGHEST_NOTE); 897 Inc(Note, OctaveSpinEdit.Value*12);
898 EnsureRange(Note, LOWEST_NOTE, HIGHEST_NOTE);
895 899
896 if PreviewingInstrument <> Note then 900 if PreviewingInstrument <> Note then
897 PreviewingInstrument := -1; 901 PreviewingInstrument := -1;
898 902
899 if (PreviewingInstrument > 0) or 903 if (PreviewingInstrument > 0) or
900 (not (ActiveControl = TrackerGrid)) or 904 (not (ActiveControl = TrackerGrid)) or
901 (InstrumentComboBox.ItemIndex <= 0) 905 (InstrumentComboBox.ItemIndex <= 0)
902 then exit; 906 then exit;
903 907
904 if not NotesToFreqs.TryGetData(Note, Freq) then Exit; 908 if not NotesToFreqs.TryGetData(Note, Freq) then Exit;
905 909
906 PreviewInstrument(Freq, InstrumentNumberSpinner.Value); 910 PreviewInstrument(Freq, InstrumentNumberSpinner.Value);
907 PreviewingInstrument := Note;} 911 PreviewingInstrument := Note;
908 end; 912 end;
909 913
910 procedure TfrmTracker.FormKeyUp(Sender: TObject; var Key: Word; 914 procedure TfrmTracker.FormKeyUp(Sender: TObject; var Key: Word;
911 Shift: TShiftState); 915 Shift: TShiftState);
912 begin 916 begin
917 if PreviewingInstrument <> -1 then
918 Panic;
913 PreviewingInstrument := -1; 919 PreviewingInstrument := -1;
914 Panic;
915 end; 920 end;
916 921
917 procedure TfrmTracker.ImportWaveButtonClick(Sender: TObject); 922 procedure TfrmTracker.ImportWaveButtonClick(Sender: TObject);
@@ -1157,15 +1162,12 @@ end;
1157 1162
1158 procedure TfrmTracker.MenuItem10Click(Sender: TObject); 1163 procedure TfrmTracker.MenuItem10Click(Sender: TObject);
1159 begin 1164 begin
1160 if (Screen.ActiveControl is TEdit) then 1165
1161 (Screen.ActiveControl as TEdit).SelectAll
1162 else if (Screen.ActiveControl is TTrackerGrid) then
1163 (Screen.ActiveControl as TTrackerGrid).SelectAll;
1164 end; 1166 end;
1165 1167
1166 procedure TfrmTracker.MenuItem11Click(Sender: TObject); 1168 procedure TfrmTracker.MenuItem11Click(Sender: TObject);
1167 begin 1169 begin
1168 1170 TrackerGrid.DoUndo;
1169 end; 1171 end;
1170 1172
1171 procedure TfrmTracker.MenuItem14Click(Sender: TObject); 1173 procedure TfrmTracker.MenuItem14Click(Sender: TObject);
@@ -1246,10 +1248,7 @@ end;
1246 1248
1247 procedure TfrmTracker.MenuItem8Click(Sender: TObject); 1249 procedure TfrmTracker.MenuItem8Click(Sender: TObject);
1248 begin 1250 begin
1249 if (Screen.ActiveControl is TEdit) then 1251 TrackerGrid.DoRedo;
1250 (Screen.ActiveControl as TEdit).ClearSelection
1251 else if (Screen.ActiveControl is TTrackerGrid) then
1252 (Screen.ActiveControl as TTrackerGrid).EraseSelection;
1253 end; 1252 end;
1254 1253
1255 procedure TfrmTracker.NoiseVisualizerPaint(Sender: TObject); 1254 procedure TfrmTracker.NoiseVisualizerPaint(Sender: TObject);
Modifiedtrackergrid.pas +2−2
@@ -75,8 +75,6 @@ type
75 procedure DoCopy(var Msg: TLMessage); message LM_COPY; 75 procedure DoCopy(var Msg: TLMessage); message LM_COPY;
76 procedure DoCut(var Msg: TLMessage); message LM_CUT; 76 procedure DoCut(var Msg: TLMessage); message LM_CUT;
77 procedure SaveUndoState; 77 procedure SaveUndoState;
78 procedure DoUndo;
79 procedure DoRedo;
80 78
81 procedure RenderSelectedArea; 79 procedure RenderSelectedArea;
82 procedure ClampCursors; 80 procedure ClampCursors;
@@ -134,6 +132,8 @@ type
134 132
135 procedure SelectAll; 133 procedure SelectAll;
136 procedure EraseSelection; 134 procedure EraseSelection;
135 procedure DoUndo;
136 procedure DoRedo;
137 137
138 constructor Create( 138 constructor Create(
139 AOwner: TComponent; 139 AOwner: TComponent;