diff --git a/Main/App.config b/Main/App.config index 329b00c..fd89741 100644 --- a/Main/App.config +++ b/Main/App.config @@ -1,12 +1,12 @@ - + - -
+ +
- + @@ -18,4 +18,4 @@ - \ No newline at end of file + diff --git a/Main/Devices/VDMA.cs b/Main/Devices/VDMA.cs index c7fb22b..b58a537 100644 --- a/Main/Devices/VDMA.cs +++ b/Main/Devices/VDMA.cs @@ -123,7 +123,7 @@ public override void WriteByte(int Address, byte Value) { int size1DTransfer = isSystemSource ? ReadLong(0x28) : ReadLong(0x8); // Address $AF:0408 - maximum 4MB buffer = new byte[size1DTransfer]; - srcMemory.CopyIntoBuffer(srcAddr, buffer, 0, size1DTransfer); + srcMemory.CopyIntoBuffer(srcAddr, size1DTransfer, buffer); } else { diff --git a/Main/Display/Gpu.cs b/Main/Display/Gpu.cs index ab186de..207ed07 100644 --- a/Main/Display/Gpu.cs +++ b/Main/Display/Gpu.cs @@ -607,7 +607,7 @@ private unsafe void DrawBitmap(int* p, bool gammaCorrection, int layer, bool bkg int* ptr = p + pixelOffset; //int col = borderXSize; byte pixVal = 0; - VRAM.CopyIntoBuffer(offsetAddress, pixVals, 0, width); + VRAM.CopyIntoBuffer(offsetAddress, width, pixVals); //while (col < width - borderXSize) for (int col = borderXSize; col < width - borderXSize; col++) @@ -617,8 +617,8 @@ private unsafe void DrawBitmap(int* p, bool gammaCorrection, int layer, bool bkg if (pixVal != 0) { colorVal = GetLUTValue(lutIndex, pixVal, gammaCorrection); + ptr[col] = colorVal; } - ptr[col] = colorVal; } } @@ -655,7 +655,7 @@ private unsafe void DrawTiles(int* p, bool gammaCorrection, byte TextColumns, in int tilemapItemCount = width / TILE_SIZE + 1; byte[] tiles = new byte[tilemapItemCount * 2]; int[] tilesetOffsets = new int[tilemapItemCount]; - VRAM.CopyIntoBuffer(tilemapAddress + (1 + tilemapWindowX / TILE_SIZE) * 2 + (tileRow + 0) * tilemapWidth * 2, tiles, 0, tilemapItemCount * 2); + VRAM.CopyIntoBuffer(tilemapAddress + (1 + tilemapWindowX / TILE_SIZE) * 2 + (tileRow + 0) * tilemapWidth * 2, tilemapItemCount * 2, tiles); // cache of tilesetPointers int[] tilesetPointers = new int[8]; diff --git a/Main/FileFormat/FoenixmlFile.cs b/Main/FileFormat/FoenixmlFile.cs index 043ab06..dde4f20 100644 --- a/Main/FileFormat/FoenixmlFile.cs +++ b/Main/FileFormat/FoenixmlFile.cs @@ -7,12 +7,12 @@ using System.Text; using System.Threading.Tasks; using System.Xml; +using static FoenixIDE.Simulator.FileFormat.ResourceChecker; namespace FoenixIDE.Simulator.FileFormat { class FoeniXmlFile { - private ResourceChecker Resources; private const int PHRASE_LENGTH = 16; private Processor.Breakpoints BreakPoints; private SortedList codeList; @@ -25,16 +25,15 @@ private FoeniXmlFile() { } public FoeniXmlFile(FoenixSystem kernel, ResourceChecker resources) { this.kernel = kernel; - this.Resources = resources; this.codeList = kernel.lstFile.Lines; this.BreakPoints = kernel.Breakpoints; watchList = kernel.WatchList; } - + private static string tabs = "\t\t\t\t\t\t\t\t"; public void Write(String filename, bool compact) { XmlWriter xmlWriter = XmlWriter.Create(filename); - string tabs = "\t\t\t\t\t\t\t\t"; + xmlWriter.WriteStartDocument(); xmlWriter.WriteRaw("\r"); xmlWriter.WriteComment("Export of FoenixIDE for C256. All values are in hexadecimal form"); @@ -49,7 +48,7 @@ public void Write(String filename, bool compact) xmlWriter.WriteRaw(tabs.Substring(0, 1)); xmlWriter.WriteStartElement("resources"); xmlWriter.WriteRaw("\r"); - foreach (ResourceChecker.Resource res in Resources.Items) + foreach (ResourceChecker.Resource res in kernel.ResCheckerRef.Items) { xmlWriter.WriteRaw(tabs.Substring(0, 2)); xmlWriter.WriteStartElement("resource"); @@ -57,6 +56,7 @@ public void Write(String filename, bool compact) xmlWriter.WriteAttributeString("source", res.SourceFile); xmlWriter.WriteAttributeString("start-address", res.StartAddress.ToString("X6")); xmlWriter.WriteAttributeString("length", res.Length.ToString("X")); + xmlWriter.WriteAttributeString("resource-type", res.FileType.ToString()); xmlWriter.WriteEndElement(); // end resource xmlWriter.WriteRaw("\r"); } @@ -156,6 +156,7 @@ public void Write(String filename, bool compact) } xmlWriter.WriteRaw(tabs.Substring(0, 1)); xmlWriter.WriteEndElement(); // end pages + xmlWriter.WriteRaw("\r"); xmlWriter.WriteRaw(tabs.Substring(0, 1)); xmlWriter.WriteStartElement("vicky"); @@ -169,6 +170,28 @@ public void Write(String filename, bool compact) } xmlWriter.WriteRaw(tabs.Substring(0, 1)); xmlWriter.WriteEndElement(); // end vicky + + // Video RAM for resources + xmlWriter.WriteRaw(tabs.Substring(0, 1)); + xmlWriter.WriteStartElement("video"); + xmlWriter.WriteRaw("\r"); + foreach (ResourceChecker.Resource res in kernel.ResCheckerRef.Items) + { + // If the assets were loaded in RAM, they would have been saved already + if (res.StartAddress >= 0xB0_0000) + { + for (int i = res.StartAddress; i < res.StartAddress + res.Length; i = i + 256) + { + if (PageChecksum(i) != 0) + { + WriteData(i, xmlWriter, compact); + } + } + } + } + xmlWriter.WriteRaw(tabs.Substring(0, 1)); + xmlWriter.WriteEndElement(); // end video + xmlWriter.WriteRaw("\r"); xmlWriter.WriteEndElement(); // end project @@ -232,6 +255,7 @@ public void ReadWatches(string filename) private void WriteData(int startAddress, XmlWriter writer, bool compact) { + writer.WriteRaw(tabs.Substring(0, 1)); writer.WriteStartElement("page"); writer.WriteAttributeString("start-address", "$" + startAddress.ToString("X6")); writer.WriteAttributeString("bank", "$" + startAddress.ToString("X6").Substring(0, 2)); @@ -242,6 +266,7 @@ private void WriteData(int startAddress, XmlWriter writer, bool compact) { WritePhrase(startAddress + i, writer, compact); } + writer.WriteRaw(tabs.Substring(0, 1)); writer.WriteEndElement(); writer.WriteRaw("\r"); } @@ -251,6 +276,7 @@ private void WritePhrase(int startAddress, XmlWriter writer, bool compact) { if (PhraseChecksum(startAddress) == 0 && !compact || PhraseChecksum(startAddress) != 0) { + writer.WriteRaw(tabs.Substring(0, 2)); writer.WriteStartElement("data"); writer.WriteAttributeString("address", "$" + (startAddress).ToString("X6")); for (int i = 0; i < PHRASE_LENGTH; i++) @@ -291,14 +317,7 @@ public void Load(String filename) { XmlReader reader = XmlReader.Create(filename); Version = BoardVersion.RevB; - if (Resources == null) - { - Resources = new ResourceChecker(); - } - else - { - Resources.Clear(); - } + kernel.ResCheckerRef.Clear(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) @@ -317,7 +336,16 @@ public void Load(String filename) StartAddress = Convert.ToInt32(reader.GetAttribute("start-address"), 16), Length = Convert.ToInt32(reader.GetAttribute("length"), 16) }; - Resources.Add(res); + string resType = reader.GetAttribute("resource-type"); + if (resType != null) + { + res.FileType = (ResourceType)Enum.Parse(typeof(ResourceType), resType); + } + else + { + res.FileType = ResourceType.raw; + } + kernel.ResCheckerRef.Add(res); continue; } if (reader.Name.Equals("code")) diff --git a/Main/FileFormat/ResourceChecker.cs b/Main/FileFormat/ResourceChecker.cs index a1d72ba..6033e55 100644 --- a/Main/FileFormat/ResourceChecker.cs +++ b/Main/FileFormat/ResourceChecker.cs @@ -8,13 +8,22 @@ namespace FoenixIDE.Simulator.FileFormat { public class ResourceChecker { + public enum ResourceType + { + raw, + bitmap, + tileset, + tilemap, + sprite, + lut + } public class Resource { public int StartAddress = 0; public int Length = 0; public string Name; public string SourceFile; - public int FileType = 0; // 0 = Raw, 1-5 = tilemap, 6-13 = tileset, 14-77 = sprite + public ResourceType FileType = ResourceType.raw; } List resources = new List(); @@ -53,5 +62,17 @@ public List Items return resources; } } + + public Resource Find(ResourceType resType, int startAddress) + { + foreach (Resource res in Items) + { + if (res.FileType == resType && res.StartAddress == startAddress) + { + return res; + } + } + return null; + } } } diff --git a/Main/FoenixIDE.csproj b/Main/FoenixIDE.csproj index 1b7d52e..1e67572 100644 --- a/Main/FoenixIDE.csproj +++ b/Main/FoenixIDE.csproj @@ -16,6 +16,7 @@ SAK SAK false + publish\ true Disk @@ -127,6 +128,12 @@ AccumulatorControl.cs + + Form + + + AssetWindow.cs + Form @@ -202,11 +209,11 @@ RegisterDisplay.cs - + Form - - BitmapLoader.cs + + AssetLoader.cs Form @@ -244,6 +251,9 @@ AccumulatorControl.cs + + AssetWindow.cs + CharEditorWindow.cs @@ -284,8 +294,8 @@ RegisterDisplay.cs - - BitmapLoader.cs + + AssetLoader.cs SDCardWindow.cs @@ -335,6 +345,7 @@ + diff --git a/Main/FoenixSystem.cs b/Main/FoenixSystem.cs index 52912bb..de5fde3 100644 --- a/Main/FoenixSystem.cs +++ b/Main/FoenixSystem.cs @@ -17,7 +17,7 @@ public class FoenixSystem public MemoryManager MemMgr = null; public Processor.CPU CPU = null; - public ResourceChecker Resources; + public ResourceChecker ResCheckerRef; public Processor.Breakpoints Breakpoints = new Processor.Breakpoints(); public ListFile lstFile; private BoardVersion boardVersion; @@ -175,7 +175,7 @@ public bool ResetCPU(string kernelFilename) if (LoadedKernel.EndsWith(".fnxml", true, null)) { this.ResetMemory(); - FoeniXmlFile fnxml = new FoeniXmlFile(this, Resources); + FoeniXmlFile fnxml = new FoeniXmlFile(this, ResCheckerRef); fnxml.Load(LoadedKernel); boardVersion = fnxml.Version; } diff --git a/Main/MemoryLocations/IMappable.cs b/Main/MemoryLocations/IMappable.cs index fc51c10..9249ad6 100644 --- a/Main/MemoryLocations/IMappable.cs +++ b/Main/MemoryLocations/IMappable.cs @@ -20,5 +20,9 @@ public interface IMappable int StartAddress { get; } int Length { get; } int EndAddress { get; } + + void CopyBuffer(byte[] src, int srcAddress, int destAddress, int length); + void CopyIntoBuffer(int srcAddress, int srcLength, byte[] buffer); + } } diff --git a/Main/MemoryLocations/MemoryManager.cs b/Main/MemoryLocations/MemoryManager.cs index 01a6b9e..199d8b7 100644 --- a/Main/MemoryLocations/MemoryManager.cs +++ b/Main/MemoryLocations/MemoryManager.cs @@ -289,5 +289,23 @@ internal void Write(int Address, int Value, int Length) if (Length >= 3) device.WriteByte(deviceAddress + 2, (byte)(Value >> 16 & 0xff)); } + + public void CopyBuffer(byte[] src, int srcAddress, int destAddress, int length) + { + GetDeviceAt(destAddress, out IMappable device, out int deviceAddress); + if (device != null) + { + device.CopyBuffer(src, srcAddress, deviceAddress, length); + } + } + + public void CopyIntoBuffer(int srcAddress, int srcLength, byte[] buffer) + { + GetDeviceAt(srcAddress, out IMappable device, out int deviceAddress); + if (device != null) + { + device.CopyIntoBuffer(deviceAddress, srcLength, buffer); + } + } } } diff --git a/Main/MemoryLocations/MemoryRAM.cs b/Main/MemoryLocations/MemoryRAM.cs index 8825f9e..83794e9 100644 --- a/Main/MemoryLocations/MemoryRAM.cs +++ b/Main/MemoryLocations/MemoryRAM.cs @@ -112,15 +112,15 @@ internal void Duplicate(int SourceAddress, int DestAddress, int Length) System.Array.Copy(data, SourceAddress, data, DestAddress, Length); } - // Copy data from a buffer to RAM - internal void CopyBuffer(byte[] buffer, int SourceAddress, int DestAddress, int Length) + public void CopyIntoBuffer(int srcAddress, int srcLength, byte[] buffer) { - System.Array.Copy(buffer, SourceAddress, data, DestAddress, Length); + System.Array.Copy(data, srcAddress, buffer, 0, srcLength); } - internal void CopyIntoBuffer(int SourceAddress, byte[] buffer, int DestAddress, int Length) + // Copy data from a buffer to RAM + public void CopyBuffer(byte[] src, int srcAddress, int destAddress, int length) { - System.Array.Copy(data, SourceAddress, buffer, DestAddress, Length); + System.Array.Copy(src, srcAddress, data, destAddress, length); } } } diff --git a/Main/Properties/AssemblyInfo.cs b/Main/Properties/AssemblyInfo.cs index c14e21d..f67c031 100644 --- a/Main/Properties/AssemblyInfo.cs +++ b/Main/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.5.4.3")] -[assembly: AssemblyFileVersion("0.5.4.3")] +[assembly: AssemblyVersion("0.5.5.0")] +[assembly: AssemblyFileVersion("0.5.5.0")] diff --git a/Main/Properties/Resources.Designer.cs b/Main/Properties/Resources.Designer.cs index 89e644a..75b9179 100644 --- a/Main/Properties/Resources.Designer.cs +++ b/Main/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace FoenixIDE.Simulator.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -79,5 +79,15 @@ internal static System.Drawing.Bitmap memory_btn { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap save_btn { + get { + object obj = ResourceManager.GetObject("save_btn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/Main/Properties/Resources.resx b/Main/Properties/Resources.resx index 0a7243d..1792ced 100644 --- a/Main/Properties/Resources.resx +++ b/Main/Properties/Resources.resx @@ -124,4 +124,7 @@ ..\UI\Images\memory-btn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\save_btn.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Main/Properties/Settings.Designer.cs b/Main/Properties/Settings.Designer.cs index 7c29f57..50e5556 100644 --- a/Main/Properties/Settings.Designer.cs +++ b/Main/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace FoenixIDE.Simulator.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/Main/Resources/save_btn.bmp b/Main/Resources/save_btn.bmp new file mode 100644 index 0000000..525d4ad Binary files /dev/null and b/Main/Resources/save_btn.bmp differ diff --git a/Main/UI/BitmapLoader.Designer.cs b/Main/UI/AssetLoader.Designer.cs similarity index 85% rename from Main/UI/BitmapLoader.Designer.cs rename to Main/UI/AssetLoader.Designer.cs index 3f2a0db..9cd100f 100644 --- a/Main/UI/BitmapLoader.Designer.cs +++ b/Main/UI/AssetLoader.Designer.cs @@ -1,6 +1,6 @@ namespace FoenixIDE.UI { - partial class BitmapLoader + partial class AssetLoader { /// /// Required designer variable. @@ -28,7 +28,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BitmapLoader)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AssetLoader)); this.BrowseFileButton = new System.Windows.Forms.Button(); this.FileNameTextBox = new System.Windows.Forms.TextBox(); this.FileSizeLabel = new System.Windows.Forms.Label(); @@ -41,6 +41,8 @@ private void InitializeComponent() this.FileTypesCombo = new System.Windows.Forms.ComboBox(); this.LabelLUT = new System.Windows.Forms.Label(); this.LUTCombo = new System.Windows.Forms.ComboBox(); + this.ExtensionLabel = new System.Windows.Forms.Label(); + this.ExtLabel = new System.Windows.Forms.Label(); this.SuspendLayout(); // // BrowseFileButton @@ -171,11 +173,34 @@ private void InitializeComponent() this.LUTCombo.Size = new System.Drawing.Size(117, 21); this.LUTCombo.TabIndex = 17; // - // BitmapLoader + // ExtensionLabel + // + this.ExtensionLabel.AutoSize = true; + this.ExtensionLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.142858F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ExtensionLabel.Location = new System.Drawing.Point(15, 93); + this.ExtensionLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.ExtensionLabel.Name = "ExtensionLabel"; + this.ExtensionLabel.Size = new System.Drawing.Size(66, 13); + this.ExtensionLabel.TabIndex = 18; + this.ExtensionLabel.Text = "Extension:"; + // + // ExtLabel + // + this.ExtLabel.AutoSize = true; + this.ExtLabel.Location = new System.Drawing.Point(131, 93); + this.ExtLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.ExtLabel.Name = "ExtLabel"; + this.ExtLabel.Size = new System.Drawing.Size(29, 13); + this.ExtLabel.TabIndex = 19; + this.ExtLabel.Text = "Raw"; + // + // AssetLoader // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(476, 145); + this.Controls.Add(this.ExtLabel); + this.Controls.Add(this.ExtensionLabel); this.Controls.Add(this.LUTCombo); this.Controls.Add(this.LabelLUT); this.Controls.Add(this.FileTypesCombo); @@ -188,14 +213,16 @@ private void InitializeComponent() this.Controls.Add(this.FileNameTextBox); this.Controls.Add(this.BrowseFileButton); this.Controls.Add(this.DollarSignLabel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.KeyPreview = true; this.Margin = new System.Windows.Forms.Padding(2); this.MaximizeBox = false; this.MinimizeBox = false; - this.Name = "BitmapLoader"; - this.Text = "Bitmap/Bin Loader Window"; - this.Load += new System.EventHandler(this.BitmapLoader_Load); + this.Name = "AssetLoader"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Asset Loader"; + this.Load += new System.EventHandler(this.AssetLoader_Load); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.BitmapLoader_KeyDown); this.ResumeLayout(false); this.PerformLayout(); @@ -215,5 +242,7 @@ private void InitializeComponent() private System.Windows.Forms.ComboBox FileTypesCombo; private System.Windows.Forms.Label LabelLUT; private System.Windows.Forms.ComboBox LUTCombo; + private System.Windows.Forms.Label ExtensionLabel; + private System.Windows.Forms.Label ExtLabel; } } \ No newline at end of file diff --git a/Main/UI/AssetLoader.cs b/Main/UI/AssetLoader.cs new file mode 100644 index 0000000..979a115 --- /dev/null +++ b/Main/UI/AssetLoader.cs @@ -0,0 +1,501 @@ +using FoenixIDE.MemoryLocations; +using FoenixIDE.Simulator.FileFormat; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.IO.Ports; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using static FoenixIDE.Simulator.FileFormat.ResourceChecker; +using static FoenixIDE.UI.MainWindow; + +namespace FoenixIDE.UI +{ + public partial class AssetLoader : Form + { + public MemoryManager MemMgrRef = null; + public ResourceChecker ResChecker; + + public AssetLoader() + { + InitializeComponent(); + } + + private void AssetLoader_Load(object sender, EventArgs e) + { + // Add items to the combo box + // Tiles Registers: $AF:0100 to $AF:013F + FileTypesCombo.Items.Add("Bitmap Layer 0"); + FileTypesCombo.Items.Add("Bitmap Layer 1"); + + for (int i = 0; i < 4; i++) + { + FileTypesCombo.Items.Add("Tilemap " + i); + } + for (int i = 0; i < 8; i++) + { + FileTypesCombo.Items.Add("Tileset " + i); + } + for (int i = 0; i < 64; i++) + { + FileTypesCombo.Items.Add("Sprite " + i); + } + FileTypesCombo.SelectedItem = 0; // Bitmap layer 0 + for (int i = 0; i < 4; i++) + { + FileTypesCombo.Items.Add("LUT " + i); + } + + for (int i = 0; i < 4; i++) + { + LUTCombo.Items.Add("LUT " + i); + } + FileTypesCombo.SelectedIndex = 0; + LUTCombo.SelectedIndex = 0; + } + + /** + * The LUT list box is only selected when loading bitmaps, sprites and tiles + */ + private void FileTypesCombo_SelectedIndexChanged(object sender, EventArgs e) + { + bool LUTSelected = FileTypesCombo.SelectedItem.ToString().StartsWith("LUT"); + LUTCombo.Enabled = !LUTSelected; + LoadAddressTextBox.Enabled = !LUTSelected; + if (FileTypesCombo.SelectedItem.ToString().StartsWith("LUT")) + { + int lut = Convert.ToInt32(FileTypesCombo.SelectedItem.ToString().Substring(4)); + LoadAddressTextBox.Enabled = false; + LoadAddressTextBox.Text = (MemoryLocations.MemoryMap.GRP_LUT_BASE_ADDR + lut * 1024).ToString("X6"); + } + } + + private String FormatAddress(int address) + { + String size = (address).ToString("X6"); + return "$" + size.Substring(0, 2) + ":" + size.Substring(2); + } + /* + * Let the user select a file from the file system and display it in a text box. + */ + private void BrowseFileButton_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDlg = new OpenFileDialog + { + Title = "Load Bitmap", + DefaultExt = ".bin", + Filter = "Asset Files (*.bmp *.png *.bin *.data *.pal *.aseprite)|*.bmp;*.png;*.bin;*.data;*.pal;*.aseprite|Binary Files|*.bin|Palette Files|*.pal|Bitmap Files|*.bmp;*.png|Data Files|*.data|Any File|*.*" + }; + + // Load content of file in a TextBlock + if (openFileDlg.ShowDialog() == DialogResult.OK) + { + FileNameTextBox.Text = openFileDlg.FileName; + FileInfo info = new FileInfo(FileNameTextBox.Text); + ExtLabel.Text = info.Extension; + FileSizeResultLabel.Text = FormatAddress((int)info.Length); + StoreButton.Enabled = true; + } + } + + private void StoreButton_Click(object sender, EventArgs e) + { + StoreButton.Enabled = false; + + // Store the address in the pointer address - little endian - 24 bits + int destAddress = Convert.ToInt32(LoadAddressTextBox.Text.Replace(":", ""), 16); + FileInfo info = new FileInfo(FileNameTextBox.Text); + byte MCRHigh = (byte)(MemMgrRef.VICKY.ReadByte(1) & 3); + int screenResX = 640; + int screenResY = 480; + switch(MCRHigh) + { + case 1: + screenResX = 800; + screenResY = 600; + break; + case 2: + screenResX = 320; + screenResY = 240; + break; + case 3: + screenResX = 400; + screenResY = 300; + break; + } + + ResourceType operationType = ResourceType.raw; + int conversionStride = 0; + int maxHeight = screenResY; + if (FileTypesCombo.SelectedIndex < 2) + { + operationType = ResourceType.bitmap; + conversionStride = screenResX; + } + else if (FileTypesCombo.SelectedIndex < 6) + { + operationType = ResourceType.tilemap; + ExtLabel.Text = ".data"; + } + else if (FileTypesCombo.SelectedIndex < 14) + { + operationType = ResourceType.tileset; + conversionStride = 256; + maxHeight = 256; + } + else if (FileTypesCombo.SelectedIndex < 78) + { + operationType = ResourceType.sprite; + conversionStride = 32; + maxHeight = 32; + } + else + { + operationType = ResourceType.lut; + ExtLabel.Text = ".data"; + } + + ResourceChecker.Resource res = new ResourceChecker.Resource + { + StartAddress = destAddress, + SourceFile = FileNameTextBox.Text, + Name = Path.GetFileNameWithoutExtension(FileNameTextBox.Text), + FileType = operationType, + }; + + + switch (ExtLabel.Text.ToLower()) + { + case ".png": + Bitmap png = new Bitmap(FileNameTextBox.Text, false); + ConvertBitmapToRaw(png, res, (byte)LUTCombo.SelectedIndex, conversionStride, maxHeight); + break; + case ".bmp": + Bitmap bmp = new Bitmap(FileNameTextBox.Text, false); + ConvertBitmapToRaw(bmp, res, (byte)LUTCombo.SelectedIndex, conversionStride, maxHeight); + break; + default: + // Read the file as raw + byte[] data = File.ReadAllBytes(FileNameTextBox.Text); + // Check if there's a resource conflict + res.Length = data.Length; + if (ResChecker.Add(res)) + { + MemMgrRef.CopyBuffer(data, 0, destAddress, data.Length); + } + else + { + res.Length = -1; + } + break; + } + + if (res.Length > 0) + { + // write address offset by bank $b0 + int imageAddress = destAddress - 0xB0_0000; + int regAddress = -1; + byte lutValue = (byte)LUTCombo.SelectedIndex; + + // Determine which addresses to store the bitmap into. + if (FileTypesCombo.SelectedIndex < 2) + { + // Bitmaps + regAddress = MemoryLocations.MemoryMap.BITMAP_CONTROL_REGISTER_ADDR + FileTypesCombo.SelectedIndex * 8; + // enable the bitmap - TODO add the LUT + MemMgrRef.WriteByte(regAddress,(byte)(1 + lutValue * 2)); + + } + else if (FileTypesCombo.SelectedIndex < 6) + { + // Tilemaps 4 + int tilemapIndex = FileTypesCombo.SelectedIndex - 1; + regAddress = MemoryLocations.MemoryMap.TILE_CONTROL_REGISTER_ADDR + tilemapIndex * 12; + + // enable the tilemap + MemMgrRef.WriteByte(regAddress, (byte)(1 + (lutValue << 1))); + + // TODO: Need to write the size of the tilemap + } + else if (FileTypesCombo.SelectedIndex < 14) + { + // Tilesets 8 + int tilesetIndex = FileTypesCombo.SelectedIndex - 5; + regAddress = MemoryLocations.MemoryMap.TILESET_BASE_ADDR + tilesetIndex * 4; + + MemMgrRef.WriteByte(regAddress + 3, lutValue); // TODO: Add the stride 256 bit 3. + } + else + { + // Sprites 64 + int spriteIndex = FileTypesCombo.SelectedIndex - 14; + regAddress = MemoryLocations.MemoryMap.SPRITE_CONTROL_REGISTER_ADDR + spriteIndex * 8; + + // enable the tilemap + MemMgrRef.WriteByte(regAddress, (byte)(1 + (lutValue << 1))); // TODO: Add sprite depth + // write address offset by bank $b0 + // Set the sprite at (32,32) + MemMgrRef.WriteWord(regAddress + 4, 32); + MemMgrRef.WriteWord(regAddress + 6, 32); + } + // write address offset by bank $b0 + MemMgrRef.WriteByte(regAddress + 1, LowByte(imageAddress)); + MemMgrRef.WriteByte(regAddress + 2, MidByte(imageAddress)); + MemMgrRef.WriteByte(regAddress + 3, HighByte(imageAddress)); + + StoreButton.Enabled = true; + } + if (res.Length != -1) + { + this.DialogResult = DialogResult.OK; + if (FileTypesCombo.SelectedIndex > 1 && FileTypesCombo.SelectedIndex < 6) + { + int layer = FileTypesCombo.SelectedIndex - 2; + //OnTileLoaded?.Invoke(layer); + } + Close(); + } + else + { + // Keep the Asset Loader open + } + + } + + private unsafe void ConvertBitmapToRaw(Bitmap bitmap, ResourceChecker.Resource resource, byte lutIndex, int stride, int maxHeight) + { + if (ResChecker.Add(resource)) + { + + + // Load LUT from memory - ignore indexes 0 and 1 + int lutBaseAddress = MemoryLocations.MemoryMap.GRP_LUT_BASE_ADDR + lutIndex * 0x400 - MemoryLocations.MemoryMap.VICKY_BASE_ADDR; + + // Limit how much data is imported based on the type of image + int importedLines = maxHeight < bitmap.Height ? maxHeight : bitmap.Height; + int importedCols = stride < bitmap.Width ? stride : bitmap.Width; + + byte[] data = new byte[stride * importedLines]; // the bitmap is based on resolution of the machine + resource.Length = stride * bitmap.Height; // one byte per pixel - palette is separate + + Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height); + BitmapData bitmapData = bitmap.LockBits(rect, ImageLockMode.ReadOnly, bitmap.PixelFormat); + int bytesPerPixel = bitmapData.Stride / bitmap.Width; + byte* bitmapPointer = (byte*)bitmapData.Scan0.ToPointer(); + bool tooManyColours = false; + bool done = false; + byte mask = 0xFF; + List lut = null; + while (!done) + { + done = true; + // Reset the Lookup Table + lut = new List(256) + { + // Always add black and white + 0, + 0xFFFFFF + }; + + for (int i = 2; i < 256; i++) + { + int value = MemMgrRef.VICKY.ReadLong(lutBaseAddress + 4 * i); + if (value != 0) + { + lut.Add(value); + } + else + { + break; + } + } + + for (int line = 0; line < importedLines; line++) + { + for (int col = 0; col < importedCols; col++) + { + byte b = 0; + byte r = 0; + byte g = 0; + + switch (bytesPerPixel) + { + case 1: + byte palIndex = bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel]; + System.Drawing.Color palValue = bitmap.Palette.Entries[palIndex]; + b = palValue.B; + g = palValue.G; + r = palValue.R; + break; + case 2: + ushort wordValue = (ushort)(bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel] + bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel + 1] * 256); + b = (byte)(wordValue & 0x1F); // 5bits + g = (byte)((wordValue >> 5) & 0x3F); // 6 bits + r = (byte)(wordValue >> 11); // 5 bits + break; + case 3: + b = (byte)(bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel] & mask); + g = (byte)(bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel + 1] & mask); + r = (byte)(bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel + 2] & mask); + break; + case 4: + b = (byte)(bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel] & mask); + g = (byte)(bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel + 1] & mask); + r = (byte)(bitmapPointer[line * bitmapData.Stride + col * bytesPerPixel + 2] & mask); + //alpha is ignored + + break; + } + int rgb = b + g * 256 + r * 256 * 256; + int index = lut.IndexOf(rgb); + if (index == -1) + { + if (lut.Count < 256) + { + lut.Add(rgb); + index = (byte)lut.IndexOf(rgb); + } + else + { + tooManyColours = true; + break; + } + } + if (index != -1) + { + data[line * stride + col] = (byte)index; + } + } + if (tooManyColours) + { + // TODO should use a colour histogram to count how many times a colour is used and then decimate here, based on low usage. + done = false; + tooManyColours = false; + mask <<= 1; + break; + } + } + } + + int videoAddress = resource.StartAddress - 0xB0_0000; + + MemMgrRef.VIDEO.CopyBuffer(data, 0, videoAddress, data.Length); + + if (lut != null) + { + for (int i = 0; i < lut.Count; i++) + { + int rbg = lut[i]; + MemMgrRef.VICKY.WriteByte(lutBaseAddress + 4 * i, LowByte(rbg)); + MemMgrRef.VICKY.WriteByte(lutBaseAddress + 4 * i + 1, MidByte(rbg)); + MemMgrRef.VICKY.WriteByte(lutBaseAddress + 4 * i + 2, HighByte(rbg)); + } + } + + // Check if a LUT matching our index is present in the Resources, if so don't do anything. + Resource resLut = ResChecker.Find(ResourceType.lut, lutBaseAddress + MemoryLocations.MemoryMap.VICKY_BASE_ADDR); + if (resLut == null) { + Resource lutPlaceholder = new Resource + { + Length = 0x400, + FileType = ResourceType.lut, + Name = "Generated LUT", + StartAddress = lutBaseAddress + MemoryLocations.MemoryMap.VICKY_BASE_ADDR + }; + ResChecker.Add(lutPlaceholder); + } + + } + else + { + resource.Length = -1; + StoreButton.Enabled = true; + } + } + + /* + * Convert a bitmap with no palette to a bytes with a color lookup table. + */ + private void TransformBitmap(byte[] data, int startOffset, int pixelDepth, int lutPointer, int videoPointer, int width, int height) + { + List lut = new List(256) + { + // Always add black and white + 0, + 0xFFFFFF + }; + // Read every pixel into a color table + int bytes = 1; + switch (pixelDepth) + { + case 16: + bytes = 2; + break; + case 24: + bytes = 3; + break; + } + // Now read the bitmap + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + int pointer = startOffset + ((height - y - 1) * width + x) * bytes; + int rgb = -1; + switch (pixelDepth) + { + case 16: + rgb = (data[pointer] & 0x1F) + ((((data[pointer] & 0xE0) >> 5) + (data[pointer + 1] & 0x3) << 3) << 8) + ((data[pointer + 1] & 0x7C) << 14); + break; + case 24: + rgb = data[pointer] + (data[pointer + 1] << 8) + (data[pointer + 2] << 16); + break; + } + if (rgb != -1) + { + int index = lut.IndexOf(rgb); + byte value = (byte)index; + if (index == -1 && lut.Count < 256) + { + lut.Add(rgb); + value = (byte)(lut.Count - 1); + // Write the value to the LUT + MemMgrRef.WriteByte(value * 4 + lutPointer, data[pointer]); + MemMgrRef.WriteByte(value * 4 + 1 + lutPointer, data[pointer + 1]); + MemMgrRef.WriteByte(value * 4 + 2 + lutPointer, data[pointer + 2]); + MemMgrRef.WriteByte(value * 4 + 3 + lutPointer, 0xFF); + } + MemMgrRef.WriteByte(videoPointer++, value); + } + } + } + } + + private void BitmapLoader_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Escape) + { + this.Close(); + } + } + + + private byte HighByte(int value) + { + return ((byte)(value >> 16)); + } + + private byte MidByte(int value) + { + return ((byte)((value >> 8) & 0xFF)); + } + private byte LowByte(int value) + { + return ((byte)(value & 0xFF)); + } + } +} diff --git a/Main/UI/BitmapLoader.resx b/Main/UI/AssetLoader.resx similarity index 100% rename from Main/UI/BitmapLoader.resx rename to Main/UI/AssetLoader.resx diff --git a/Main/UI/AssetWindow.Designer.cs b/Main/UI/AssetWindow.Designer.cs new file mode 100644 index 0000000..3d9dcd7 --- /dev/null +++ b/Main/UI/AssetWindow.Designer.cs @@ -0,0 +1,190 @@ + +namespace FoenixIDE.UI +{ + partial class AssetWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AssetWindow)); + this.AssetGrid = new System.Windows.Forms.DataGridView(); + this.AddressName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Address = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Val8bit = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Val16bit = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Export = new System.Windows.Forms.DataGridViewImageColumn(); + this.ColMemory = new System.Windows.Forms.DataGridViewImageColumn(); + this.ColDelete = new System.Windows.Forms.DataGridViewImageColumn(); + this.AddAssetButton = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.AssetGrid)).BeginInit(); + this.SuspendLayout(); + // + // AssetGrid + // + this.AssetGrid.AllowUserToAddRows = false; + this.AssetGrid.AllowUserToDeleteRows = false; + this.AssetGrid.AllowUserToResizeRows = false; + this.AssetGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AssetGrid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + this.AssetGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.AssetGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.AddressName, + this.Address, + this.Val8bit, + this.Val16bit, + this.Export, + this.ColMemory, + this.ColDelete}); + this.AssetGrid.Location = new System.Drawing.Point(-2, -1); + this.AssetGrid.MultiSelect = false; + this.AssetGrid.Name = "AssetGrid"; + this.AssetGrid.RowHeadersVisible = false; + this.AssetGrid.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.AssetGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.AssetGrid.ShowCellErrors = false; + this.AssetGrid.ShowEditingIcon = false; + this.AssetGrid.ShowRowErrors = false; + this.AssetGrid.Size = new System.Drawing.Size(533, 195); + this.AssetGrid.TabIndex = 4; + this.AssetGrid.VirtualMode = true; + this.AssetGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.AssetGrid_CellClick); + // + // AddressName + // + this.AddressName.FillWeight = 150F; + this.AddressName.HeaderText = "Name"; + this.AddressName.MaxInputLength = 48; + this.AddressName.Name = "AddressName"; + this.AddressName.ReadOnly = true; + this.AddressName.Width = 160; + // + // Address + // + this.Address.HeaderText = "Start Address"; + this.Address.MaxInputLength = 6; + this.Address.Name = "Address"; + this.Address.ReadOnly = true; + this.Address.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // Val8bit + // + this.Val8bit.HeaderText = "End Address"; + this.Val8bit.MaxInputLength = 6; + this.Val8bit.Name = "Val8bit"; + this.Val8bit.ReadOnly = true; + this.Val8bit.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // Val16bit + // + this.Val16bit.FillWeight = 60F; + this.Val16bit.HeaderText = "Type"; + this.Val16bit.MaxInputLength = 10; + this.Val16bit.Name = "Val16bit"; + this.Val16bit.ReadOnly = true; + this.Val16bit.Width = 80; + // + // Export + // + this.Export.FillWeight = 24F; + this.Export.HeaderText = "Ex"; + this.Export.Image = global::FoenixIDE.Simulator.Properties.Resources.save_btn; + this.Export.MinimumWidth = 24; + this.Export.Name = "Export"; + this.Export.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Export.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Export.ToolTipText = "Export Data to File"; + this.Export.Width = 24; + // + // ColMemory + // + this.ColMemory.FillWeight = 24F; + this.ColMemory.HeaderText = "M"; + this.ColMemory.Image = global::FoenixIDE.Simulator.Properties.Resources.memory_btn; + this.ColMemory.MinimumWidth = 24; + this.ColMemory.Name = "ColMemory"; + this.ColMemory.ReadOnly = true; + this.ColMemory.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.ColMemory.ToolTipText = "Show in Memory Window"; + this.ColMemory.Width = 24; + // + // ColDelete + // + this.ColDelete.FillWeight = 24F; + this.ColDelete.HeaderText = "D"; + this.ColDelete.Image = global::FoenixIDE.Simulator.Properties.Resources.delete_btn; + this.ColDelete.MinimumWidth = 24; + this.ColDelete.Name = "ColDelete"; + this.ColDelete.ReadOnly = true; + this.ColDelete.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.ColDelete.ToolTipText = "Delete Item"; + this.ColDelete.Width = 24; + // + // AddAssetButton + // + this.AddAssetButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.AddAssetButton.Location = new System.Drawing.Point(224, 196); + this.AddAssetButton.Name = "AddAssetButton"; + this.AddAssetButton.Size = new System.Drawing.Size(75, 23); + this.AddAssetButton.TabIndex = 5; + this.AddAssetButton.Text = "Add Asset"; + this.AddAssetButton.UseVisualStyleBackColor = true; + this.AddAssetButton.Click += new System.EventHandler(this.AddAssetButton_Click); + // + // AssetWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(533, 221); + this.Controls.Add(this.AddAssetButton); + this.Controls.Add(this.AssetGrid); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(549, 1000); + this.MinimumSize = new System.Drawing.Size(549, 260); + this.Name = "AssetWindow"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "Asset Window"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.AssetWindow_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.AssetGrid)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView AssetGrid; + private System.Windows.Forms.Button AddAssetButton; + private System.Windows.Forms.DataGridViewTextBoxColumn AddressName; + private System.Windows.Forms.DataGridViewTextBoxColumn Address; + private System.Windows.Forms.DataGridViewTextBoxColumn Val8bit; + private System.Windows.Forms.DataGridViewTextBoxColumn Val16bit; + private System.Windows.Forms.DataGridViewImageColumn Export; + private System.Windows.Forms.DataGridViewImageColumn ColMemory; + private System.Windows.Forms.DataGridViewImageColumn ColDelete; + } +} \ No newline at end of file diff --git a/Main/UI/AssetWindow.cs b/Main/UI/AssetWindow.cs new file mode 100644 index 0000000..ef1e080 --- /dev/null +++ b/Main/UI/AssetWindow.cs @@ -0,0 +1,116 @@ + +using FoenixIDE.Simulator.FileFormat; +using System; +using System.IO; +using System.Windows.Forms; +using static FoenixIDE.Simulator.FileFormat.ResourceChecker; + +namespace FoenixIDE.UI +{ + public partial class AssetWindow : Form + { + private FoenixSystem kernel_ref; + public static AssetWindow Instance; + + + public AssetWindow() + { + InitializeComponent(); + AssetGrid.CellValueNeeded += AssetGrid_CellValueNeeded; + Instance = this; + } + + public void SetKernel(FoenixSystem krnl) + { + kernel_ref = krnl; + AssetGrid.RowCount = kernel_ref.ResCheckerRef.Items.Count; + } + + private void AssetWindow_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = true; + Hide(); + } + + private void AssetGrid_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) + { + try + { + Resource res = kernel_ref.ResCheckerRef.Items[e.RowIndex]; + switch (e.ColumnIndex) + { + case 0: + e.Value = res.Name; + break; + case 1: + e.Value = res.StartAddress.ToString("X6"); + break; + case 2: + e.Value = (res.StartAddress + res.Length - 1).ToString("X6"); + break; + case 3: + e.Value = res.FileType.ToString(); + break; + } + + } + catch + { + // whatever! + } + } + + private void AddAssetButton_Click(object sender, EventArgs e) + { + MainWindow.Instance.LoadImageToolStripMenuItem_Click(this, null); + } + + private void AssetGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + // Get the resource for the RowIndex + if (e.RowIndex > -1) + { + Resource res = kernel_ref.ResCheckerRef.Items[e.RowIndex]; + switch (e.ColumnIndex) + { + // Export the asset to file + case 4: + SaveFileDialog saveDlg = new SaveFileDialog(); + saveDlg.Title = "Save Asset to File"; + saveDlg.Filter = "Raw File (*.bin)|*.bin|Palette File (*.pal)|*.pal |Tilemap File (*.tls)| *.tls"; + FileInfo info = new FileInfo(res.Name); + saveDlg.FileName = info.Name; + + if (saveDlg.ShowDialog() == DialogResult.OK) + { + + FileStream dataFile = File.Create(saveDlg.FileName, 0x800, FileOptions.SequentialScan); + byte[] buffer = new byte[res.Length]; + kernel_ref.MemMgr.CopyIntoBuffer(res.StartAddress, res.Length, buffer); + dataFile.Write(buffer, 0, res.Length); + dataFile.Close(); + + } + break; + // Browse this page in the Memory Window + case 5: + MemoryWindow.Instance.GotoAddress(res.StartAddress & 0xFFFF00); + break; + // Delete the row, but copy the values into our input boxes + case 6: + kernel_ref.ResCheckerRef.Items.Remove(res); + // zero the data at the location + byte[] zeroes = new byte[res.Length]; + kernel_ref.MemMgr.CopyBuffer(zeroes, 0, res.StartAddress, res.Length); + AssetGrid.RowCount -= 1; + break; + } + } + } + + public void UpdateAssets() + { + AssetGrid.RowCount = kernel_ref.ResCheckerRef.Items.Count; + } + } +} diff --git a/Main/UI/AssetWindow.resx b/Main/UI/AssetWindow.resx new file mode 100644 index 0000000..53025c1 --- /dev/null +++ b/Main/UI/AssetWindow.resx @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + AAABAAEAICAAAAEAGACoDAAAFgAAACgAAAAgAAAAQAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAtJ7Y4VH0nf/8nf/8va8IseX0A8v8A8v8UucJEZDdMsSJMsSJIjSt2XyzoogDoogCygxRAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAkHO04Nm8ubssiZccaQXsfKDYRaGwF + qbIKW18ZLzEiOxgjRRUjRRUgKhxENBBeRQrBiAM/NR8iIiIqKio4ODhAQEBAQEA/Pz8uLi4kJCQnJyc1 + NTVAQEBAQEBAQEBAQEAkHO0pIs8kKjKAgIDx28n///////////+SsdPo18f///////////////////9l + kcG4k4H///D////////C//8qKnw7OzsvLy+/pqb//+X///////8oeL9AQEBAQEBAQEAkHO0bFo+dnZ3p + ya3k//+9vdDAwMD6+Pjf8uj28vT//+q/0eW/v7+/v7/IyMikpKTkz7vT5v++vr7ExMT68+y04f8dHUHc + zs7//+fL3fG+vr76+Pfj/+MxX6xAQEBAQEAmH+E2NUvJtLTy/+gmVpsbR4cpNkiUlJQ0PT6goKDm3Nz/ + /7cXZKcvZBkoTRh8fHyAgIBQPxZ5VwofHhvWxsb//+lair3s3c/U//8jI3EgICCysrL/7N1JkthAQEBA + QEAxLoFra2vjzbnD//8xU7snf/8nfv0kQWwcW18Hg4qLi4vw6en//9pNmtZBlB8tTCBmUB7oogDoogB1 + WRmvoqL/8Nqlv9viy7ad2P9AQHIxMTGgoKD/5tJUlNdAQEBAQEA2NTiLi4vl0L2Z1/87O4ordN4nf/8n + fvw7TmML094OYme3t7ff0tL//+ktdrAkRxYhJx1OOg5UPQpNST3p2Mjx//+cqsfl0b+///8gIGwsLCzW + xsb//+Yjb7ZAQEBAQEA4ODiGhobax765/9gsJt85UHInf/8nf/8ub80vb3IB4u4IdXtdYWH26NzV7v+P + j5/QyMj/8Nv///////////90nMd4eHjs3dD4+P////H///////+lw+cuLi5AQEBAQEA+Pj5lZWXMt7fh + /8khUeI4NXUsZ7sXNF4SHzInNUsTuMEA8v8Gl5/Su7Dm//Gfn7rGvb3/8d27z+Sfn59RTUZNQCJXV1fd + z8/o/+i3t8u3t7dra2smJiZAQEBAQEBAQEBAQEAuLi7CwsLy3s24//8YFYNERUfVxMTJ6dnQt7ddmLcN + VVkfSUry3s3a8P+dnarGvb3/0YwPVJ8XFA5QOwpQPA0ZGRnU1NTz4tOS0/8QEDIYGBgkJCRAQEBAQEBA + QEBAQEAyMjJycnK3t7ft0rr///////////+0zevFra3//+b////////i//+dnbmXl5evoqL/8dz///// + //////////84ca9VVVXV1dXo1cX///////+V1v9AQHJAQEBAQEBAQEBAQEAtLS1SUlKtra28vLykpKRQ + UFAyMjJnZ2eSkpK5ubmsrKxkZ2cOWV18fHzCwsK/v7+/v7+/v7+/v7/IyMhKQSs/Oi87OzuYmJi6urq5 + ubktLS1AQEBAQEBAQEBAQEBAQEBAQEA8PDwnJVobF40dGKYtKaA2WYolduwiZccjQnAfXWEC2OMC1+IU + Y2csQSMwZRkwZRktTiBMPhyDXQeTaAamexk+Pj4yMjIqKiosLCw2NjZAQEBAQEBAQEBAQEBAQEBAQEBA + QEA/P0EqI8kkHO0kHOs6OmUsctcnf/8nfv07TmkNzdcA8v8A8P00ZWdJmShMsSJLsCJEWDrFjQ3oogDm + oQBjVTNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA5N2ckHOwkHO0rJcY6Tmwnfv4n + f/8tcdQxaGwA8f4A8v8PytRCWjpMsCJMsSJKmClmVzHnoQDoogDCjA9BQUBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEAuKLEkHO0kHO02NHwwab0nf/8nf/83VoIWtL0A8v8A8v8qfoJIiixM + sSJMsSJEZzaugBboogDoogB6YipAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA9PFMl + HuYkHO0nINo8RVsoffcnf/8qeOo4VlwD6/cA8v8H3uo+UkRMrCRMsSJLpSVSTzfhngPoogDWlwdHRD1A + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAyLpckHO0kHO0yLpY0YKAnf/8nf/8zX58g + maAA8v8A8v8gmZ9GeTFMsSJMsSJGeDGUcSDoogDoogCUcSBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEA/P0YoIdgkHO0lHec7PVsqeOgnf/8offg7TV0I3egA8v8C6/g5WFVLoyZMsSJLrSNH + UTrUlgjoogDingJUTDhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA3NH0kHO0kHO0t + KLA4VoMnf/8nf/8vabwqfoMA8v8A8v8WtLxFaDZMsSJMsSJHiSx7YyroogDoogCtfxZAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqJMMkHO0kHO06OGotcNEnf/8nf/86T24Px9EA8v8A + 8v8xa25JlilMsSJMsSJDWzm/ig/oogDoogBoWDFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEA7OWIkHOskHO0pI8s6S2Ynfv0nf/8sc9ozYmYA8P0A8v8Mz9pCVzxLsCJMsSJJmydhUzPmoQDo + ogDHjwxBQD9AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAvKqskHO0kHO01MoIxZ7Yn + f/8nf/82WIkZrrYA8v8A8v8nhIlIhi5MsSJMsSJEazSofRnoogDoogCAZSdAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEA9PE4mHuMkHO0nIN88RFopfPQnf/8qeu85UlsE6PQA8v8G4+8+U0hM + qyRMsSJLqCVOTjnenAToogDamgZKRjxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAz + L5AkHO0kHO0xLZ00XZgnf/8nf/8zYqcikpgA8v8A8v8eoKdFdDJMsSJMsSJHfTCNbSLoogDoogCbdR5A + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA/P0QpItQkHO0lHek7PF0rduMnf/8ofvs7 + TWAK2OMA8v8C7vs3XFtLoSdMsSJMryNEUjrPlAroogDloAJZTjZAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEA3NXUkHO0kHO0tJ7g4U3snf/8nf/8vbMQsd3sA8v8A8v8Uu8REYzdMsSJMsSJI + jit0XizoogDoogC0hBRAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAsJr0kHO0k + HO04NnAubsonf/8nf/85UXUSwcoA8v8A8v8ucXVJkitMsSJMsSJDXze5hxLoogDoogBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA8OlwkHOkkHO0oIdE8SmInfvsnf/8rdeA2XmIB7vsA + 8v8K1eBBVT5MryJMsSJKnydbUTbkoAHoogBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEAwK6QkHO0kHO00MYkxZK4nf/8nf/82W5Ebp64A8v8A8v8li5FHgS9MsSJMsSJFcDOheBvo + ogBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA+PkwmH98kHO0mHuE9QVop + evAnf/8oe/I6UFsF5PAA8v8E5vI8VUxLqCRMsSJLqSRMTzrbmgVAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA0MYkkHO0kHO0wK6Q2W5Enf/8nf/8xZK4li5EA8v8A8v8bp65F + cDNMsSJMsSJHgS+HaiUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Main/UI/BitmapLoader.cs b/Main/UI/BitmapLoader.cs deleted file mode 100644 index a92c9f0..0000000 --- a/Main/UI/BitmapLoader.cs +++ /dev/null @@ -1,321 +0,0 @@ -using FoenixIDE.MemoryLocations; -using FoenixIDE.Simulator.FileFormat; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.IO.Ports; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using static FoenixIDE.UI.MainWindow; - -namespace FoenixIDE.UI -{ - public partial class BitmapLoader : Form - { - public IMappable Memory = null; - public ResourceChecker ResChecker; - - public BitmapLoader() - { - InitializeComponent(); - } - - private void BitmapLoader_Load(object sender, EventArgs e) - { - // Add items to the combo box - // Tiles Registers: $AF:0100 to $AF:013F - FileTypesCombo.Items.Add("Raw"); - - for (int i = 0; i < 4; i++) - { - FileTypesCombo.Items.Add("Tilemap " + i); - } - for (int i = 0; i < 8; i++) - { - FileTypesCombo.Items.Add("Tileset " + i); - } - for (int i = 0; i < 64; i++) - { - FileTypesCombo.Items.Add("Sprite " + i); - } - FileTypesCombo.SelectedItem = 0; // Raw - for (int i = 0; i < 4; i++) - { - FileTypesCombo.Items.Add("LUT " + i); - } - - for (int i = 0; i < 4; i++) - { - LUTCombo.Items.Add("LUT " + i); - } - FileTypesCombo.SelectedIndex = 0; - LUTCombo.SelectedIndex = 0; - LUTCombo.Enabled = false; - } - - private void FileTypesCombo_SelectedIndexChanged(object sender, EventArgs e) - { - bool LUTSelected = FileTypesCombo.SelectedItem.ToString().StartsWith("LUT"); - LUTCombo.Enabled = FileTypesCombo.SelectedIndex != 0 && !LUTSelected; - LoadAddressTextBox.Enabled = !LUTSelected; - if (FileTypesCombo.SelectedItem.ToString().StartsWith("LUT")) - { - int lut = Convert.ToInt32(FileTypesCombo.SelectedItem.ToString().Substring(4)); - LoadAddressTextBox.Enabled = false; - LoadAddressTextBox.Text = (MemoryLocations.MemoryMap.GRP_LUT_BASE_ADDR + lut * 1024).ToString("X6"); - } - } - - private String FormatAddress(int address) - { - String size = (address).ToString("X6"); - return "$" + size.Substring(0, 2) + ":" + size.Substring(2); - } - /* - * Let the user select a file from the file system and display it in a text box. - */ - private void BrowseFileButton_Click(object sender, EventArgs e) - { - OpenFileDialog openFileDlg = new OpenFileDialog - { - Title = "Load Bitmap", - DefaultExt = ".bin", - Filter = "Images Files (*.bmp *.bin *.data *.pal)|*.bmp;*.bin;*.data;*.pal|Binary Files|*.bin|Palette Files|*.pal|Bitmap Files|*.bmp|Data Files|*.data|Any File|*.*" - }; - - // Load content of file in a TextBlock - if (openFileDlg.ShowDialog() == DialogResult.OK) - { - FileNameTextBox.Text = openFileDlg.FileName; - FileInfo info = new FileInfo(FileNameTextBox.Text); - FileSizeResultLabel.Text = FormatAddress((int)info.Length); - StoreButton.Enabled = true; - } - } - - private void StoreButton_Click(object sender, EventArgs e) - { - StoreButton.Enabled = false; - - // Store the address in the pointer address - little endian - 24 bits - int destAddress = Convert.ToInt32(LoadAddressTextBox.Text.Replace(":", ""), 16); - - byte[] data = File.ReadAllBytes(FileNameTextBox.Text); - for (int i = 0; i < data.Length; i++) - { - Memory.WriteByte(destAddress + i, data[i]); - } - - // Determine which addresses to store the bitmap into. - if (FileTypesCombo.SelectedIndex == 0) - { - // Raw - } - else if (FileTypesCombo.SelectedIndex < 5) - { - // Tilemaps 4 - int tilemapIndex = FileTypesCombo.SelectedIndex - 1; - int baseAddress = MemoryLocations.MemoryMap.TILE_CONTROL_REGISTER_ADDR + tilemapIndex * 12; - byte lutValue = (byte)LUTCombo.SelectedIndex; - // enable the tilemap - Memory.WriteByte(baseAddress, (byte)(1 + (lutValue << 1))); - // write address offset by bank $b0 - int offsetAddress = destAddress - 0xB0_0000; - Memory.WriteByte(baseAddress + 1, (byte)(offsetAddress & 0xFF)); - Memory.WriteByte(baseAddress + 2, (byte)((offsetAddress & 0xFF00) >> 8)); - Memory.WriteByte(baseAddress + 3, (byte)((offsetAddress & 0xFF_0000) >> 16)); - // TODO: Need to write the size of the tilemap - } - else if (FileTypesCombo.SelectedIndex < 13) - { - // Tilesets 8 - int tilesetIndex = FileTypesCombo.SelectedIndex - 5; - int baseAddress = MemoryLocations.MemoryMap.TILESET_BASE_ADDR + tilesetIndex * 4; - byte lutValue = (byte)LUTCombo.SelectedIndex; - - // write address offset by bank $b0 - int offsetAddress = destAddress - 0xB0_0000; - Memory.WriteByte(baseAddress, (byte)(offsetAddress & 0xFF)); - Memory.WriteByte(baseAddress + 1, (byte)((offsetAddress & 0xFF00) >> 8)); - Memory.WriteByte(baseAddress + 2, (byte)((offsetAddress & 0xFF_0000) >> 16)); - Memory.WriteByte(baseAddress + 3, lutValue); // TODO: Add the stride 256 bit 3. - - } - else - { - // Sprites 64 - int spriteIndex = FileTypesCombo.SelectedIndex - 13; - int baseAddress = MemoryLocations.MemoryMap.SPRITE_CONTROL_REGISTER_ADDR + spriteIndex * 8; - byte lutValue = (byte)LUTCombo.SelectedIndex; - - // enable the tilemap - Memory.WriteByte(baseAddress, (byte)(1 + (lutValue << 1))); // TODO: Add sprite depth - - // write address offset by bank $b0 - int offsetAddress = destAddress - 0xB0_0000; - Memory.WriteByte(baseAddress + 1, (byte)(offsetAddress & 0xFF)); - Memory.WriteByte(baseAddress + 2, (byte)((offsetAddress & 0xFF00) >> 8)); - Memory.WriteByte(baseAddress + 3, (byte)((offsetAddress & 0xFF_0000) >> 16)); - // TODO: set the position of the sprite - } - - ResourceChecker.Resource res = new ResourceChecker.Resource - { - StartAddress = destAddress, - SourceFile = FileNameTextBox.Text, - Name = Path.GetFileNameWithoutExtension(FileNameTextBox.Text), - FileType = FileTypesCombo.SelectedIndex - }; - - StoreButton.Enabled = true; - - //// Store the bitmap at the user's determined address - //// The method below simply takes the file and writes it in memory. - //// What we want is the actual pixels. - //ImageConverter converter = new ImageConverter(); - //byte[] data = (byte[])converter.ConvertTo(bitmap, typeof(byte[])); - //int startOffset = BitConverter.ToInt32(data, 10); - //int fileLength = BitConverter.ToInt32(data, 2); - //res.Length = bitmap.Height * bitmap.Width; - //if (ResChecker.Add(res)) - //{ - - // // The addresses in Vicky a offset by $B0:0000 - // videoAddress = videoAddress - 0xB0_0000; - // Memory.WriteByte(pointerAddress, LowByte(videoAddress)); - // Memory.WriteByte(pointerAddress + 1, MidByte(videoAddress)); - // Memory.WriteByte(pointerAddress + 2, HighByte(videoAddress)); - - // // Store the strides in the strideX and strideY - // Memory.WriteByte(strideXAddress, LowByte(strideX)); - // Memory.WriteByte(strideXAddress + 1, MidByte(strideX)); - // Memory.WriteByte(strideYAddress, LowByte(strideY)); - // Memory.WriteByte(strideYAddress + 1, MidByte(strideY)); - - - - // int numberOfColors = BitConverter.ToInt32(data, 46); - // int lutOffset = 0xAF_2000 + LUTCombo.SelectedIndex * 1024; - // if (numberOfColors == 0) - // { - // // we need to create a LUT - each LUT only accepts 256 entries - 0 is black - // TransformBitmap(data, startOffset, Int32.Parse(PixelDepthValueLabel.Text), lutOffset, writeVideoAddress, bitmap.Width, bitmap.Height); - // } - // else - // { - // for (int offset = 54; offset < 1024 + 54; offset = offset + 4) - // { - // int color = BitConverter.ToInt32(data, offset); - // Memory.WriteByte(lutOffset, LowByte(color)); - // Memory.WriteByte(lutOffset + 1, MidByte(color)); - // Memory.WriteByte(lutOffset + 2, HighByte(color)); - // Memory.WriteByte(lutOffset + 3, 0xFF); // Alpha - // lutOffset = lutOffset + 4; - // } - // for (int line = 0; line < bitmap.Height; line++) - // { - // for (int i = 0; i < bitmap.Width; i++) - // { - // Memory.WriteByte(writeVideoAddress + (bitmap.Height - line + 1) * bitmap.Width + i, data[startOffset + line * bitmap.Width + i]); - // } - // } - // } - // if (FileTypesCombo.SelectedIndex > 0 && FileTypesCombo.SelectedIndex < 5) - // { - // int layer = FileTypesCombo.SelectedIndex - 1; - // OnTileLoaded?.Invoke(layer); - // } - // MessageBox.Show("Transfer successful!", "Bitmap Storage", MessageBoxButtons.OK, MessageBoxIcon.Information); - // this.Close(); - //} - //else - //{ - // StoreButton.Enabled = true; - //} - } - - private byte HighByte(int value) - { - return ((byte)(value >> 16)); - } - - private byte MidByte(int value) - { - return ((byte)((value >> 8) & 0xFF)); - } - private byte LowByte(int value) - { - return ((byte)(value & 0xFF)); - } - - /* - * Convert a bitmap with no palette to a bytes with a color lookup table. - */ - private void TransformBitmap(byte[] data, int startOffset, int pixelDepth, int lutPointer, int videoPointer, int width, int height) - { - List lut = new List(256) - { - // Always add black and white - 0, - 0xFFFFFF - }; - // Read every pixel into a color table - int bytes = 1; - switch (pixelDepth) - { - case 16: - bytes = 2; - break; - case 24: - bytes = 3; - break; - } - // Now read the bitmap - for (int y = 0; y < height; y++) - { - for (int x = 0; x < width; x++) - { - int pointer = startOffset + ((height - y - 1) * width + x) * bytes; - int rgb = -1; - switch (pixelDepth) - { - case 16: - rgb = (data[pointer] & 0x1F) + ((((data[pointer] & 0xE0) >> 5) + (data[pointer + 1] & 0x3) << 3) << 8) + ((data[pointer + 1] & 0x7C) << 14); - break; - case 24: - rgb = data[pointer] + (data[pointer + 1] << 8) + (data[pointer + 2] << 16); - break; - } - if (rgb != -1) - { - int index = lut.IndexOf(rgb); - byte value = (byte)index; - if (index == -1 && lut.Count < 256) - { - lut.Add(rgb); - value = (byte)(lut.Count - 1); - // Write the value to the LUT - Memory.WriteByte(value * 4 + lutPointer, data[pointer]); - Memory.WriteByte(value * 4 + 1 + lutPointer, data[pointer + 1]); - Memory.WriteByte(value * 4 + 2 + lutPointer, data[pointer + 2]); - Memory.WriteByte(value * 4 + 3 + lutPointer, 0xFF); - } - Memory.WriteByte(videoPointer++, value); - } - } - } - } - - private void BitmapLoader_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Escape) - { - this.Close(); - } - } - } -} diff --git a/Main/UI/MainWindow.Designer.cs b/Main/UI/MainWindow.Designer.cs index 4843518..e916c8b 100644 --- a/Main/UI/MainWindow.Designer.cs +++ b/Main/UI/MainWindow.Designer.cs @@ -58,11 +58,14 @@ private void InitializeComponent() this.ConvertHexToPGXToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ConvertBinToPGXToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.gameEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.autorunEmulatorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.windowsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.terminalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.cPUToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.memoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.watchListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.assetListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.resetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.RestartMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.DebugMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -71,8 +74,6 @@ private void InitializeComponent() this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.Tooltip = new System.Windows.Forms.ToolTip(this.components); this.gpu = new FoenixIDE.Display.Gpu(); - this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.autorunEmulatorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.statusStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout(); this.SuspendLayout(); @@ -215,42 +216,42 @@ private void InitializeComponent() // menuOpenHexFile // this.menuOpenHexFile.Name = "menuOpenHexFile"; - this.menuOpenHexFile.Size = new System.Drawing.Size(180, 22); + this.menuOpenHexFile.Size = new System.Drawing.Size(167, 22); this.menuOpenHexFile.Text = "&Open Hex File"; this.menuOpenHexFile.Click += new System.EventHandler(this.MenuOpenHexFile_Click); // // loadFNXMLFileToolStripMenuItem // this.loadFNXMLFileToolStripMenuItem.Name = "loadFNXMLFileToolStripMenuItem"; - this.loadFNXMLFileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.loadFNXMLFileToolStripMenuItem.Size = new System.Drawing.Size(167, 22); this.loadFNXMLFileToolStripMenuItem.Text = "&Load Project..."; this.loadFNXMLFileToolStripMenuItem.Click += new System.EventHandler(this.LoadFNXMLFileToolStripMenuItem_Click); // // saveProjectToolStripMenuItem // this.saveProjectToolStripMenuItem.Name = "saveProjectToolStripMenuItem"; - this.saveProjectToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveProjectToolStripMenuItem.Size = new System.Drawing.Size(167, 22); this.saveProjectToolStripMenuItem.Text = "&Save Project..."; this.saveProjectToolStripMenuItem.Click += new System.EventHandler(this.SaveProjectToolStripMenuItem_Click); // // loadWatchListToolStripMenuItem // this.loadWatchListToolStripMenuItem.Name = "loadWatchListToolStripMenuItem"; - this.loadWatchListToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.loadWatchListToolStripMenuItem.Size = new System.Drawing.Size(167, 22); this.loadWatchListToolStripMenuItem.Text = "Load Watch List..."; this.loadWatchListToolStripMenuItem.Click += new System.EventHandler(this.LoadWatchListToolStripMenuItem_Click); // // saveWatchListToolStripMenuItem // this.saveWatchListToolStripMenuItem.Name = "saveWatchListToolStripMenuItem"; - this.saveWatchListToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveWatchListToolStripMenuItem.Size = new System.Drawing.Size(167, 22); this.saveWatchListToolStripMenuItem.Text = "Save Watch List..."; this.saveWatchListToolStripMenuItem.Click += new System.EventHandler(this.SaveWatchListToolStripMenuItem_Click); // // exitToolStripMenuItem // this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(167, 22); this.exitToolStripMenuItem.Text = "E&xit"; this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click); // @@ -273,73 +274,96 @@ private void InitializeComponent() // uploaderToolStripMenuItem // this.uploaderToolStripMenuItem.Name = "uploaderToolStripMenuItem"; - this.uploaderToolStripMenuItem.Size = new System.Drawing.Size(179, 22); + this.uploaderToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.uploaderToolStripMenuItem.Text = "&Uploader"; this.uploaderToolStripMenuItem.Click += new System.EventHandler(this.UploaderToolStripMenuItem_Click); // // loadImageToolStripMenuItem // this.loadImageToolStripMenuItem.Name = "loadImageToolStripMenuItem"; - this.loadImageToolStripMenuItem.Size = new System.Drawing.Size(179, 22); - this.loadImageToolStripMenuItem.Text = "&Load Bin/Image"; + this.loadImageToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.loadImageToolStripMenuItem.Text = "&Load Assets"; this.loadImageToolStripMenuItem.Click += new System.EventHandler(this.LoadImageToolStripMenuItem_Click); // // sDCardToolStripMenuItem // this.sDCardToolStripMenuItem.Name = "sDCardToolStripMenuItem"; - this.sDCardToolStripMenuItem.Size = new System.Drawing.Size(179, 22); + this.sDCardToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.sDCardToolStripMenuItem.Text = "&SD Card"; this.sDCardToolStripMenuItem.Click += new System.EventHandler(this.SDCardToolStripMenuItem_Click); // // tileEditorToolStripMenuItem // this.tileEditorToolStripMenuItem.Name = "tileEditorToolStripMenuItem"; - this.tileEditorToolStripMenuItem.Size = new System.Drawing.Size(179, 22); + this.tileEditorToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.tileEditorToolStripMenuItem.Text = "&Tile Editor"; this.tileEditorToolStripMenuItem.Click += new System.EventHandler(this.TileEditorToolStripMenuItem_Click); // // characterEditorToolStripMenuItem // this.characterEditorToolStripMenuItem.Name = "characterEditorToolStripMenuItem"; - this.characterEditorToolStripMenuItem.Size = new System.Drawing.Size(179, 22); + this.characterEditorToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.characterEditorToolStripMenuItem.Text = "&Character Editor"; this.characterEditorToolStripMenuItem.Click += new System.EventHandler(this.CharacterEditorToolStripMenuItem_Click); // // joystickSimulatorToolStripMenuItem // this.joystickSimulatorToolStripMenuItem.Name = "joystickSimulatorToolStripMenuItem"; - this.joystickSimulatorToolStripMenuItem.Size = new System.Drawing.Size(179, 22); + this.joystickSimulatorToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.joystickSimulatorToolStripMenuItem.Text = "Joystick Simulator"; this.joystickSimulatorToolStripMenuItem.Click += new System.EventHandler(this.JoystickSimulatorToolStripMenuItem_Click); // // ConvertHexToPGXToolStripMenuItem // this.ConvertHexToPGXToolStripMenuItem.Name = "ConvertHexToPGXToolStripMenuItem"; - this.ConvertHexToPGXToolStripMenuItem.Size = new System.Drawing.Size(179, 22); + this.ConvertHexToPGXToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.ConvertHexToPGXToolStripMenuItem.Text = "Convert Hex to PGX"; this.ConvertHexToPGXToolStripMenuItem.Click += new System.EventHandler(this.ConvertHexToPGXToolStripMenuItem_Click); // // ConvertBinToPGXToolStripMenuItem // this.ConvertBinToPGXToolStripMenuItem.Name = "ConvertBinToPGXToolStripMenuItem"; - this.ConvertBinToPGXToolStripMenuItem.Size = new System.Drawing.Size(179, 22); + this.ConvertBinToPGXToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.ConvertBinToPGXToolStripMenuItem.Text = "Convert Bin to PGX"; this.ConvertBinToPGXToolStripMenuItem.Click += new System.EventHandler(this.ConvertBinToPGXToolStripMenuItem_Click); // // gameEditorToolStripMenuItem // this.gameEditorToolStripMenuItem.Name = "gameEditorToolStripMenuItem"; - this.gameEditorToolStripMenuItem.Size = new System.Drawing.Size(179, 22); + this.gameEditorToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.gameEditorToolStripMenuItem.Text = "Game Editor"; this.gameEditorToolStripMenuItem.Click += new System.EventHandler(this.GameEditorToolStripMenuItem_Click); // + // settingsToolStripMenuItem + // + this.settingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.autorunEmulatorToolStripMenuItem}); + this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; + this.settingsToolStripMenuItem.Size = new System.Drawing.Size(61, 20); + this.settingsToolStripMenuItem.Text = "&Settings"; + // + // autorunEmulatorToolStripMenuItem + // + this.autorunEmulatorToolStripMenuItem.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.autorunEmulatorToolStripMenuItem.Checked = true; + this.autorunEmulatorToolStripMenuItem.CheckOnClick = true; + this.autorunEmulatorToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.autorunEmulatorToolStripMenuItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.autorunEmulatorToolStripMenuItem.ImageAlign = System.Drawing.ContentAlignment.BottomLeft; + this.autorunEmulatorToolStripMenuItem.Name = "autorunEmulatorToolStripMenuItem"; + this.autorunEmulatorToolStripMenuItem.Padding = new System.Windows.Forms.Padding(0, 2, 0, 1); + this.autorunEmulatorToolStripMenuItem.Size = new System.Drawing.Size(169, 23); + this.autorunEmulatorToolStripMenuItem.Text = "Autorun Emulator"; + this.autorunEmulatorToolStripMenuItem.Click += new System.EventHandler(this.autorunEmulatorToolStripMenuItem_Click); + // // windowsToolStripMenuItem // this.windowsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.terminalToolStripMenuItem, this.cPUToolStripMenuItem, this.memoryToolStripMenuItem, - this.watchListToolStripMenuItem}); + this.watchListToolStripMenuItem, + this.assetListToolStripMenuItem}); this.windowsToolStripMenuItem.Name = "windowsToolStripMenuItem"; this.windowsToolStripMenuItem.Size = new System.Drawing.Size(68, 20); this.windowsToolStripMenuItem.Text = "&Windows"; @@ -347,7 +371,7 @@ private void InitializeComponent() // terminalToolStripMenuItem // this.terminalToolStripMenuItem.Name = "terminalToolStripMenuItem"; - this.terminalToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.terminalToolStripMenuItem.Size = new System.Drawing.Size(129, 22); this.terminalToolStripMenuItem.Text = "&Terminal"; this.terminalToolStripMenuItem.Click += new System.EventHandler(this.TerminalToolStripMenuItem_Click); // @@ -355,7 +379,7 @@ private void InitializeComponent() // this.cPUToolStripMenuItem.Enabled = false; this.cPUToolStripMenuItem.Name = "cPUToolStripMenuItem"; - this.cPUToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.cPUToolStripMenuItem.Size = new System.Drawing.Size(129, 22); this.cPUToolStripMenuItem.Text = "&CPU"; this.cPUToolStripMenuItem.Click += new System.EventHandler(this.CPUToolStripMenuItem_Click); // @@ -363,17 +387,24 @@ private void InitializeComponent() // this.memoryToolStripMenuItem.Enabled = false; this.memoryToolStripMenuItem.Name = "memoryToolStripMenuItem"; - this.memoryToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.memoryToolStripMenuItem.Size = new System.Drawing.Size(129, 22); this.memoryToolStripMenuItem.Text = "&Memory"; this.memoryToolStripMenuItem.Click += new System.EventHandler(this.MemoryToolStripMenuItem_Click); // // watchListToolStripMenuItem // this.watchListToolStripMenuItem.Name = "watchListToolStripMenuItem"; - this.watchListToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.watchListToolStripMenuItem.Size = new System.Drawing.Size(129, 22); this.watchListToolStripMenuItem.Text = "Watch List"; this.watchListToolStripMenuItem.Click += new System.EventHandler(this.WatchListToolStripMenuItem_Click); // + // assetListToolStripMenuItem + // + this.assetListToolStripMenuItem.Name = "assetListToolStripMenuItem"; + this.assetListToolStripMenuItem.Size = new System.Drawing.Size(129, 22); + this.assetListToolStripMenuItem.Text = "Asset List"; + this.assetListToolStripMenuItem.Click += new System.EventHandler(this.assetListToolStripMenuItem_Click); + // // resetToolStripMenuItem // this.resetToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -413,14 +444,14 @@ private void InitializeComponent() // checkForUpdateToolStripMenuItem // this.checkForUpdateToolStripMenuItem.Name = "checkForUpdateToolStripMenuItem"; - this.checkForUpdateToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.checkForUpdateToolStripMenuItem.Size = new System.Drawing.Size(166, 22); this.checkForUpdateToolStripMenuItem.Text = "Check for &Update"; this.checkForUpdateToolStripMenuItem.Click += new System.EventHandler(this.CheckForUpdateToolStripMenuItem_Click); // // aboutToolStripMenuItem // this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - this.aboutToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(166, 22); this.aboutToolStripMenuItem.Text = "&About"; this.aboutToolStripMenuItem.Click += new System.EventHandler(this.AboutToolStripMenuItem_Click); // @@ -446,25 +477,6 @@ private void InitializeComponent() this.gpu.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Gpu_MouseMove); this.gpu.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Gpu_MouseUp); // - // settingsToolStripMenuItem - // - this.settingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.autorunEmulatorToolStripMenuItem}); - this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; - this.settingsToolStripMenuItem.Size = new System.Drawing.Size(61, 20); - this.settingsToolStripMenuItem.Text = "&Settings"; - // - // autorunEmulatorToolStripMenuItem - // - this.autorunEmulatorToolStripMenuItem.Checked = true; - this.autorunEmulatorToolStripMenuItem.CheckOnClick = true; - this.autorunEmulatorToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; - this.autorunEmulatorToolStripMenuItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.autorunEmulatorToolStripMenuItem.Name = "autorunEmulatorToolStripMenuItem"; - this.autorunEmulatorToolStripMenuItem.Size = new System.Drawing.Size(180, 22); - this.autorunEmulatorToolStripMenuItem.Text = "Autorun Emulator"; - this.autorunEmulatorToolStripMenuItem.Click += new System.EventHandler(this.autorunEmulatorToolStripMenuItem_Click); - // // MainWindow // this.AllowDrop = true; @@ -542,6 +554,7 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem gameEditorToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem autorunEmulatorToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem assetListToolStripMenuItem; } } diff --git a/Main/UI/MainWindow.cs b/Main/UI/MainWindow.cs index 90a51db..074619b 100644 --- a/Main/UI/MainWindow.cs +++ b/Main/UI/MainWindow.cs @@ -32,6 +32,7 @@ public partial class MainWindow : Form public MemoryWindow memoryWindow; public UploaderWindow uploaderWindow; private WatchForm watchWindow = new WatchForm(); + private AssetWindow assetWindow = new AssetWindow(); private SDCardWindow sdCardWindow = new SDCardWindow(); private TileEditor tileEditor; private CharEditorWindow charEditor; @@ -42,7 +43,6 @@ public partial class MainWindow : Form // Local variables and events private byte previousGraphicMode; private delegate void TileClickEvent(Point tile); - public delegate void TileLoadedEvent(int layer); private TileClickEvent TileClicked; private ResourceChecker ResChecker = new ResourceChecker(); private delegate void TransmitByteFunction(byte Value); @@ -157,11 +157,10 @@ private void BasicWindow_Load(object sender, EventArgs e) kernel.MemMgr.UART1.TransmitByte += SerialTransmitByte; kernel.MemMgr.UART2.TransmitByte += SerialTransmitByte; kernel.MemMgr.SDCARD.sdCardIRQMethod += SDCardInterrupt; - - int left = this.Left + (this.Width - watchWindow.Width) / 2; - int top = this.Top + (this.Height - watchWindow.Height) / 2; - watchWindow.Location = new Point(left, top); + kernel.ResCheckerRef = ResChecker; + watchWindow.SetKernel(kernel); + assetWindow.SetKernel(kernel); DisplayBoardVersion(); EnableMenuItems(); @@ -174,6 +173,13 @@ private void BasicWindow_Load(object sender, EventArgs e) autorunEmulatorToolStripMenuItem.Checked = autoRun; } + private void CenterForm(Form form) + { + int left = this.Left + (this.Width - form.Width) / 2; + int top = this.Top + (this.Height - form.Height) / 2; + form.Location = new Point(left, top); + } + private void LoadHexFile(string Filename) { debugWindow.Pause(); @@ -267,6 +273,7 @@ public void WatchListToolStripMenuItem_Click(object sender, EventArgs e) { if (!watchWindow.Visible) { + CenterForm(watchWindow); watchWindow.Show(); } else @@ -279,15 +286,23 @@ public void WatchListToolStripMenuItem_Click(object sender, EventArgs e) * Loading image into memory requires the user to specify what kind of image (tile, bitmap, sprite). * What address location in video RAM. */ - private void LoadImageToolStripMenuItem_Click(object sender, EventArgs e) + public void LoadImageToolStripMenuItem_Click(object sender, EventArgs e) { - BitmapLoader loader = new BitmapLoader + AssetLoader loader = new AssetLoader { StartPosition = FormStartPosition.CenterParent, - Memory = kernel.CPU.MemMgr, + MemMgrRef = kernel.CPU.MemMgr, ResChecker = ResChecker }; - loader.ShowDialog(this); + IWin32Window parent = this; + if (!(sender is ToolStripMenuItem)) + { + parent = (IWin32Window)sender; + } + if (loader.ShowDialog(parent) == DialogResult.OK) + { + AssetWindow.Instance.UpdateAssets(); + } } DateTime pSof; @@ -606,7 +621,7 @@ private void LoadFNXMLFileToolStripMenuItem_Click(object sender, EventArgs e) if (dialog.ShowDialog() == DialogResult.OK) { // TODO - this code is so coupled - we need to set the version in the XML file too. - kernel.Resources = ResChecker; + kernel.ResCheckerRef = ResChecker; if (kernel.ResetCPU(dialog.FileName)) { gpu.Refresh(); @@ -615,6 +630,7 @@ private void LoadFNXMLFileToolStripMenuItem_Click(object sender, EventArgs e) ShowDebugWindow(); ShowMemoryWindow(); EnableMenuItems(); + assetWindow.UpdateAssets(); } } } @@ -690,6 +706,7 @@ private void EditorWindowClosed(object sender, FormClosedEventArgs e) kernel.MemMgr.VICKY.WriteByte(0, previousGraphicMode); tileEditor.Dispose(); tileEditor = null; + TileClicked = null; } private void TileEditorToolStripMenuItem_Click(object sender, EventArgs e) @@ -698,12 +715,14 @@ private void TileEditorToolStripMenuItem_Click(object sender, EventArgs e) { tileEditor = new TileEditor(); tileEditor.SetMemory(kernel.MemMgr); + tileEditor.SetResourceChecker(kernel.ResCheckerRef); gpu.TileEditorMode = true; // Set Vicky into Tile mode previousGraphicMode = kernel.MemMgr.VICKY.ReadByte(0); kernel.MemMgr.VICKY.WriteByte(0, 0x10); // Enable borders kernel.MemMgr.VICKY.WriteByte(4, 1); + CenterForm(tileEditor); tileEditor.Show(); tileEditor.FormClosed += new FormClosedEventHandler(EditorWindowClosed); @@ -1100,7 +1119,7 @@ private void ConvertHexToPGXToolStripMenuItem_Click(object sender, EventArgs e) string outputFileName = Path.ChangeExtension(dialog.FileName, "PGX"); byte[] buffer = new byte[DataLength]; - temporaryRAM.CopyIntoBuffer(DataStartAddress, buffer, 0, DataLength); + temporaryRAM.CopyIntoBuffer(DataStartAddress, DataLength, buffer); using (BinaryWriter writer = new BinaryWriter(File.Open(outputFileName, FileMode.Create))) { // 8 byte header @@ -1238,6 +1257,19 @@ private void autorunEmulatorToolStripMenuItem_Click(object sender, EventArgs e) Simulator.Properties.Settings.Default.Autorun = autorunEmulatorToolStripMenuItem.Checked; Simulator.Properties.Settings.Default.Save(); } + + private void assetListToolStripMenuItem_Click(object sender, EventArgs e) + { + if (!assetWindow.Visible) + { + CenterForm(assetWindow); + assetWindow.Show(); + } + else + { + assetWindow.BringToFront(); + } + } } } diff --git a/Main/UI/MemoryWindow.cs b/Main/UI/MemoryWindow.cs index 5bf68cd..683ce16 100644 --- a/Main/UI/MemoryWindow.cs +++ b/Main/UI/MemoryWindow.cs @@ -469,13 +469,20 @@ private void HighlightPanel_KeyUp(object sender, KeyEventArgs e) if (HighlightPanel.Text != "") { // The result may be a hexadecimal value - byte intResult = Convert.ToByte(HighlightPanel.Text, 16); - // Check that the value was changed - if (intResult != mem.Y) + try { - Memory.WriteByte(mem.X, intResult); - //HighlightPanel.Text = intResult.ToString("X2"); - RefreshMemoryView(); + byte intResult = Convert.ToByte(HighlightPanel.Text, 16); + // Check that the value was changed + if (intResult != mem.Y) + { + Memory.WriteByte(mem.X, intResult); + //HighlightPanel.Text = intResult.ToString("X2"); + RefreshMemoryView(); + } + } + catch + { + } } } @@ -496,7 +503,7 @@ private void SaveButton_Click(object sender, EventArgs e) FileStream outputFile = File.Create(SaveDialog.FileName); MemoryRAM ram = (MemoryRAM)Memory; byte[] buffer = new byte[ram.Length]; - ram.CopyIntoBuffer(0, buffer, 0, ram.Length); + ram.CopyIntoBuffer(0, ram.Length, buffer); outputFile.Write(buffer, 0, buffer.Length); outputFile.Flush(); outputFile.Close(); diff --git a/Main/UI/TileEditor.Designer.cs b/Main/UI/TileEditor.Designer.cs index 0f64ea2..19eb776 100644 --- a/Main/UI/TileEditor.Designer.cs +++ b/Main/UI/TileEditor.Designer.cs @@ -150,7 +150,7 @@ private void InitializeComponent() this.TileSelectedLabel.Location = new System.Drawing.Point(185, 170); this.TileSelectedLabel.Name = "TileSelectedLabel"; this.TileSelectedLabel.Size = new System.Drawing.Size(81, 13); - this.TileSelectedLabel.TabIndex = 5; + this.TileSelectedLabel.TabIndex = 4; this.TileSelectedLabel.Text = "Tile Selected: $"; // // label1 @@ -159,7 +159,7 @@ private void InitializeComponent() this.label1.Location = new System.Drawing.Point(1, 168); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(41, 13); - this.label1.TabIndex = 12; + this.label1.TabIndex = 2; this.label1.Text = "Tileset:"; // // TilemapGroup @@ -180,7 +180,7 @@ private void InitializeComponent() this.TilemapGroup.Location = new System.Drawing.Point(5, 30); this.TilemapGroup.Name = "TilemapGroup"; this.TilemapGroup.Size = new System.Drawing.Size(353, 133); - this.TilemapGroup.TabIndex = 17; + this.TilemapGroup.TabIndex = 1; this.TilemapGroup.TabStop = false; this.TilemapGroup.Text = "Tilemap Properties"; // @@ -190,7 +190,7 @@ private void InitializeComponent() this.WindowY.MaxLength = 4; this.WindowY.Name = "WindowY"; this.WindowY.Size = new System.Drawing.Size(38, 20); - this.WindowY.TabIndex = 27; + this.WindowY.TabIndex = 10; this.WindowY.Text = "1023"; this.WindowY.TextChanged += new System.EventHandler(this.WindowY_TextChanged); // @@ -200,7 +200,7 @@ private void InitializeComponent() this.WindowX.MaxLength = 4; this.WindowX.Name = "WindowX"; this.WindowX.Size = new System.Drawing.Size(38, 20); - this.WindowX.TabIndex = 26; + this.WindowX.TabIndex = 8; this.WindowX.Text = "1023"; this.WindowX.TextChanged += new System.EventHandler(this.WindowX_TextChanged); // @@ -211,7 +211,7 @@ private void InitializeComponent() this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(59, 13); - this.label2.TabIndex = 29; + this.label2.TabIndex = 9; this.label2.Text = "Window Y:"; // // label3 @@ -221,7 +221,7 @@ private void InitializeComponent() this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(59, 13); - this.label3.TabIndex = 28; + this.label3.TabIndex = 7; this.label3.Text = "Window X:"; // // SaveTilesetButton @@ -229,7 +229,7 @@ private void InitializeComponent() this.SaveTilesetButton.Location = new System.Drawing.Point(199, 101); this.SaveTilesetButton.Name = "SaveTilesetButton"; this.SaveTilesetButton.Size = new System.Drawing.Size(86, 23); - this.SaveTilesetButton.TabIndex = 25; + this.SaveTilesetButton.TabIndex = 12; this.SaveTilesetButton.Text = "Save Tileset"; this.SaveTilesetButton.UseVisualStyleBackColor = true; this.SaveTilesetButton.Click += new System.EventHandler(this.SaveTilemapButton_Click); @@ -239,7 +239,7 @@ private void InitializeComponent() this.ClearTilemapButton.Location = new System.Drawing.Point(109, 101); this.ClearTilemapButton.Name = "ClearTilemapButton"; this.ClearTilemapButton.Size = new System.Drawing.Size(86, 23); - this.ClearTilemapButton.TabIndex = 24; + this.ClearTilemapButton.TabIndex = 11; this.ClearTilemapButton.Text = "Clear Tileset"; this.ClearTilemapButton.UseVisualStyleBackColor = true; this.ClearTilemapButton.Click += new System.EventHandler(this.ClearTilemapButton_Click); @@ -250,7 +250,7 @@ private void InitializeComponent() this.Height.MaxLength = 4; this.Height.Name = "Height"; this.Height.Size = new System.Drawing.Size(38, 20); - this.Height.TabIndex = 21; + this.Height.TabIndex = 6; this.Height.Text = "1023"; this.Height.TextChanged += new System.EventHandler(this.Height_TextChanged); // @@ -260,7 +260,7 @@ private void InitializeComponent() this.Width.MaxLength = 4; this.Width.Name = "Width"; this.Width.Size = new System.Drawing.Size(38, 20); - this.Width.TabIndex = 19; + this.Width.TabIndex = 4; this.Width.Text = "1023"; this.Width.TextChanged += new System.EventHandler(this.Width_TextChanged); // @@ -271,7 +271,7 @@ private void InitializeComponent() this.YLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); this.YLabel.Name = "YLabel"; this.YLabel.Size = new System.Drawing.Size(41, 13); - this.YLabel.TabIndex = 23; + this.YLabel.TabIndex = 5; this.YLabel.Text = "Height:"; // // XLabel @@ -281,7 +281,7 @@ private void InitializeComponent() this.XLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); this.XLabel.Name = "XLabel"; this.XLabel.Size = new System.Drawing.Size(38, 13); - this.XLabel.TabIndex = 22; + this.XLabel.TabIndex = 3; this.XLabel.Text = "Width:"; // // TilemapAddress @@ -290,7 +290,7 @@ private void InitializeComponent() this.TilemapAddress.MaxLength = 6; this.TilemapAddress.Name = "TilemapAddress"; this.TilemapAddress.Size = new System.Drawing.Size(88, 20); - this.TilemapAddress.TabIndex = 20; + this.TilemapAddress.TabIndex = 2; this.TilemapAddress.TextChanged += new System.EventHandler(this.TilemapAddress_TextChanged); // // TilesetAddressLabel @@ -299,7 +299,7 @@ private void InitializeComponent() this.TilesetAddressLabel.Location = new System.Drawing.Point(154, 20); this.TilesetAddressLabel.Name = "TilesetAddressLabel"; this.TilesetAddressLabel.Size = new System.Drawing.Size(97, 13); - this.TilesetAddressLabel.TabIndex = 18; + this.TilesetAddressLabel.TabIndex = 1; this.TilesetAddressLabel.Text = "Tilemap Address: $"; // // TilemapEnabledCheckbox @@ -308,7 +308,7 @@ private void InitializeComponent() this.TilemapEnabledCheckbox.Location = new System.Drawing.Point(14, 19); this.TilemapEnabledCheckbox.Name = "TilemapEnabledCheckbox"; this.TilemapEnabledCheckbox.Size = new System.Drawing.Size(105, 17); - this.TilemapEnabledCheckbox.TabIndex = 17; + this.TilemapEnabledCheckbox.TabIndex = 0; this.TilemapEnabledCheckbox.Text = "Tilemap Enabled"; this.TilemapEnabledCheckbox.UseVisualStyleBackColor = true; this.TilemapEnabledCheckbox.CheckedChanged += new System.EventHandler(this.TilemapEnabledCheckbox_CheckedChanged); @@ -325,7 +325,7 @@ private void InitializeComponent() this.TilesetList.Location = new System.Drawing.Point(48, 165); this.TilesetList.Name = "TilesetList"; this.TilesetList.Size = new System.Drawing.Size(121, 21); - this.TilesetList.TabIndex = 18; + this.TilesetList.TabIndex = 3; this.TilesetList.SelectedIndexChanged += new System.EventHandler(this.TilesetList_SelectedIndexChanged); // // TilesetGroup @@ -337,7 +337,7 @@ private void InitializeComponent() this.TilesetGroup.Location = new System.Drawing.Point(5, 192); this.TilesetGroup.Name = "TilesetGroup"; this.TilesetGroup.Size = new System.Drawing.Size(353, 48); - this.TilesetGroup.TabIndex = 19; + this.TilesetGroup.TabIndex = 5; this.TilesetGroup.TabStop = false; this.TilesetGroup.Text = "Tileset Properties"; // @@ -347,7 +347,7 @@ private void InitializeComponent() this.Stride256Checkbox.Location = new System.Drawing.Point(273, 19); this.Stride256Checkbox.Name = "Stride256Checkbox"; this.Stride256Checkbox.Size = new System.Drawing.Size(74, 17); - this.Stride256Checkbox.TabIndex = 24; + this.Stride256Checkbox.TabIndex = 3; this.Stride256Checkbox.Text = "Stride 256"; this.Stride256Checkbox.UseVisualStyleBackColor = true; this.Stride256Checkbox.CheckedChanged += new System.EventHandler(this.LutList_SelectedIndexChanged); @@ -364,7 +364,7 @@ private void InitializeComponent() this.LutList.Location = new System.Drawing.Point(203, 17); this.LutList.Name = "LutList"; this.LutList.Size = new System.Drawing.Size(62, 21); - this.LutList.TabIndex = 23; + this.LutList.TabIndex = 2; this.LutList.SelectedIndexChanged += new System.EventHandler(this.LutList_SelectedIndexChanged); // // TilesetAddress @@ -373,7 +373,7 @@ private void InitializeComponent() this.TilesetAddress.MaxLength = 6; this.TilesetAddress.Name = "TilesetAddress"; this.TilesetAddress.Size = new System.Drawing.Size(88, 20); - this.TilesetAddress.TabIndex = 22; + this.TilesetAddress.TabIndex = 1; this.TilesetAddress.TextChanged += new System.EventHandler(this.TilesetAddress_TextChanged); // // label4 @@ -382,7 +382,7 @@ private void InitializeComponent() this.label4.Location = new System.Drawing.Point(6, 20); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(91, 13); - this.label4.TabIndex = 21; + this.label4.TabIndex = 0; this.label4.Text = "Tileset Address: $"; // // TileEditor @@ -403,6 +403,7 @@ private void InitializeComponent() this.KeyPreview = true; this.MaximizeBox = false; this.Name = "TileEditor"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "Tile Editor"; this.Load += new System.EventHandler(this.TileEditor_Load); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TileEditor_KeyDown); diff --git a/Main/UI/TileEditor.cs b/Main/UI/TileEditor.cs index c542f20..b1ba3ff 100644 --- a/Main/UI/TileEditor.cs +++ b/Main/UI/TileEditor.cs @@ -1,4 +1,5 @@ using FoenixIDE.MemoryLocations; +using FoenixIDE.Simulator.FileFormat; using FoenixIDE.UI; using System; using System.Collections.Generic; @@ -9,6 +10,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using static FoenixIDE.Simulator.FileFormat.ResourceChecker; namespace FoenixIDE.Simulator.UI { @@ -22,6 +24,7 @@ public partial class TileEditor : Form private int selectedTilemap = 0; private MemoryManager MemMgr; + private ResourceChecker resCheckerRef; private Pen whitePen = new Pen(Color.White); private Pen yellowPen = new Pen(Color.Yellow); @@ -54,6 +57,11 @@ public void SetMemory(MemoryManager mm) MemMgr = mm; } + public void SetResourceChecker(ResourceChecker rc) + { + resCheckerRef = rc; + } + private int[] LoadLUT(MemoryRAM VKY) { // Read the color lookup tables @@ -192,35 +200,35 @@ private void TileEditor_KeyDown(object sender, KeyEventArgs e) private void ClearTilemapButton_Click(object sender, EventArgs e) { int tilemapAddress = Convert.ToInt32(TilemapAddress.Text, 16); + byte selectedTile = (byte)(selectedY * 16 + selectedX); int width = Convert.ToInt32(Width.Text); int height = Convert.ToInt32(Height.Text); - for (int i = 0; i < width * height * 2; i++) + for (int i = 0; i < width * height * 2 + 1; i = i+ 2) { - MemMgr.WriteByte(tilemapAddress + i, 0); + MemMgr.WriteByte(tilemapAddress + i, selectedTile); + MemMgr.WriteByte(tilemapAddress + i + 1, 0); } } private void SaveTilemapButton_Click(object sender, EventArgs e) { - SaveFileDialog saveDialog = new SaveFileDialog() + // Create a new resource + int tilemapAddress = Convert.ToInt32(TilemapAddress.Text, 16); + int width = Convert.ToInt32(Width.Text); + int height = Convert.ToInt32(Height.Text); + Resource resource = new Resource() { - Title = "Save Tilemap File", - CheckPathExists = true, - Filter = "Tilemap|*.data" + Name = "Tile Editor Map", + Length = width * height, + FileType = ResourceType.tilemap, + StartAddress = tilemapAddress }; - if (saveDialog.ShowDialog() == DialogResult.OK) - { - FileStream dataFile = File.Create(saveDialog.FileName, 0x800, FileOptions.SequentialScan); - int tilemapAddress = Convert.ToInt32(TilemapAddress.Text, 16); - int width = Convert.ToInt32(Width.Text); - int height = Convert.ToInt32(Height.Text); - for (int i = 0; i < width * height * 2; i++) - { - byte value = MemMgr.ReadByte(tilemapAddress + i); - dataFile.WriteByte(value); - } - dataFile.Close(); - } + + // if this resource is already in the list of resource + Resource oldRes = resCheckerRef.Find(ResourceType.tilemap, tilemapAddress); + resCheckerRef.Items.Remove(oldRes); + resCheckerRef.Add(resource); + AssetWindow.Instance.UpdateAssets(); } private void LutList_SelectedIndexChanged(object sender, EventArgs e) diff --git a/Main/UI/WatchForm.Designer.cs b/Main/UI/WatchForm.Designer.cs index d66cfd9..98a4307 100644 --- a/Main/UI/WatchForm.Designer.cs +++ b/Main/UI/WatchForm.Designer.cs @@ -31,16 +31,16 @@ private void InitializeComponent() this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WatchForm)); this.WatchGrid = new System.Windows.Forms.DataGridView(); + this.AddressName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Address = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Val8bit = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Val16bit = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.WatchUpdateTimer = new System.Windows.Forms.Timer(this.components); this.AddButton = new System.Windows.Forms.Button(); this.NameText = new System.Windows.Forms.TextBox(); this.AddressText = new System.Windows.Forms.TextBox(); this.dataGridViewImageColumn1 = new System.Windows.Forms.DataGridViewImageColumn(); this.dataGridViewImageColumn2 = new System.Windows.Forms.DataGridViewImageColumn(); - this.AddressName = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Address = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Val8bit = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Val16bit = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.ColMemory = new System.Windows.Forms.DataGridViewImageColumn(); this.ColDelete = new System.Windows.Forms.DataGridViewImageColumn(); ((System.ComponentModel.ISupportInitialize)(this.WatchGrid)).BeginInit(); @@ -77,6 +77,45 @@ private void InitializeComponent() this.WatchGrid.VirtualMode = true; this.WatchGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.WatchGrid_CellClick); // + // AddressName + // + this.AddressName.FillWeight = 150F; + this.AddressName.HeaderText = "Name"; + this.AddressName.MaxInputLength = 32; + this.AddressName.Name = "AddressName"; + this.AddressName.ReadOnly = true; + this.AddressName.Width = 120; + // + // Address + // + this.Address.FillWeight = 80F; + this.Address.HeaderText = "Address"; + this.Address.MaxInputLength = 6; + this.Address.Name = "Address"; + this.Address.ReadOnly = true; + this.Address.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Address.Width = 80; + // + // Val8bit + // + this.Val8bit.FillWeight = 40F; + this.Val8bit.HeaderText = "8-Bits"; + this.Val8bit.MaxInputLength = 2; + this.Val8bit.Name = "Val8bit"; + this.Val8bit.ReadOnly = true; + this.Val8bit.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Val8bit.Width = 40; + // + // Val16bit + // + this.Val16bit.FillWeight = 60F; + this.Val16bit.HeaderText = "16-Bits"; + this.Val16bit.MaxInputLength = 4; + this.Val16bit.Name = "Val16bit"; + this.Val16bit.ReadOnly = true; + this.Val16bit.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.Val16bit.Width = 60; + // // WatchUpdateTimer // this.WatchUpdateTimer.Interval = 1000; @@ -117,6 +156,7 @@ private void InitializeComponent() this.dataGridViewImageColumn1.Name = "dataGridViewImageColumn1"; this.dataGridViewImageColumn1.ReadOnly = true; this.dataGridViewImageColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridViewImageColumn1.ToolTipText = "Show in Memory Window"; this.dataGridViewImageColumn1.Width = 24; // // dataGridViewImageColumn2 @@ -128,47 +168,9 @@ private void InitializeComponent() this.dataGridViewImageColumn2.Name = "dataGridViewImageColumn2"; this.dataGridViewImageColumn2.ReadOnly = true; this.dataGridViewImageColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridViewImageColumn2.ToolTipText = "Delete Item"; this.dataGridViewImageColumn2.Width = 24; // - // AddressName - // - this.AddressName.FillWeight = 150F; - this.AddressName.HeaderText = "Name"; - this.AddressName.MaxInputLength = 32; - this.AddressName.Name = "AddressName"; - this.AddressName.ReadOnly = true; - this.AddressName.Width = 120; - // - // Address - // - this.Address.FillWeight = 80F; - this.Address.HeaderText = "Address"; - this.Address.MaxInputLength = 6; - this.Address.Name = "Address"; - this.Address.ReadOnly = true; - this.Address.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.Address.Width = 80; - // - // Val8bit - // - this.Val8bit.FillWeight = 40F; - this.Val8bit.HeaderText = "8-Bits"; - this.Val8bit.MaxInputLength = 2; - this.Val8bit.Name = "Val8bit"; - this.Val8bit.ReadOnly = true; - this.Val8bit.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.Val8bit.Width = 40; - // - // Val16bit - // - this.Val16bit.FillWeight = 60F; - this.Val16bit.HeaderText = "16-Bits"; - this.Val16bit.MaxInputLength = 4; - this.Val16bit.Name = "Val16bit"; - this.Val16bit.ReadOnly = true; - this.Val16bit.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.Val16bit.Width = 60; - // // ColMemory // this.ColMemory.FillWeight = 24F; @@ -207,7 +209,7 @@ private void InitializeComponent() this.MaximizeBox = false; this.MinimumSize = new System.Drawing.Size(367, 489); this.Name = "WatchForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "Watch List"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.WatchForm_FormClosing); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.WatchForm_KeyDown); diff --git a/Main/UI/WatchForm.cs b/Main/UI/WatchForm.cs index fedac1f..eedadc9 100644 --- a/Main/UI/WatchForm.cs +++ b/Main/UI/WatchForm.cs @@ -77,21 +77,24 @@ private void WatchGrid_CellValueNeeded(object sender, DataGridViewCellValueEvent private void WatchGrid_CellClick(object sender, DataGridViewCellEventArgs e) { // Get the address for the RowIndex - KeyValuePair kvp = kernel_ref.WatchList.ElementAt(e.RowIndex); - switch (e.ColumnIndex) + if (e.RowIndex > -1) { - // Browse this page in the Memory Window - case 4: - MemoryWindow.Instance.GotoAddress(kvp.Key & 0xFFFF00); - break; - // Delete the row, but copy the values into our input boxes - case 5: - - NameText.Text = kvp.Value.name; - AddressText.Text = "$" + kvp.Value.address.ToString("X6"); - kernel_ref.WatchList.Remove(kvp.Key); - WatchGrid.RowCount -= 1; - break; + KeyValuePair kvp = kernel_ref.WatchList.ElementAt(e.RowIndex); + switch (e.ColumnIndex) + { + // Browse this page in the Memory Window + case 4: + MemoryWindow.Instance.GotoAddress(kvp.Key & 0xFFFF00); + break; + // Delete the row, but copy the values into our input boxes + case 5: + + NameText.Text = kvp.Value.name; + AddressText.Text = "$" + kvp.Value.address.ToString("X6"); + kernel_ref.WatchList.Remove(kvp.Key); + WatchGrid.RowCount -= 1; + break; + } } } diff --git a/Release Notes.txt b/Release Notes.txt index e32f672..735ec2c 100644 --- a/Release Notes.txt +++ b/Release Notes.txt @@ -1,3 +1,9 @@ +Release 0.5.5.0 +--------------- +Added the Asset Window and connected it to the Asset Loader (used to be bitmap loader). +Resources are now saved with the FNXML file and reloaded. +TileEditor saves its Tilemaps to assets now, instead of plain files. + Release 0.5.4.1 --------------- Fixed a bug in the SBC when using a 16-bit accumulator. diff --git a/bin/Release/FoenixIDE.exe b/bin/Release/FoenixIDE.exe index 091ae0c..c01d738 100644 Binary files a/bin/Release/FoenixIDE.exe and b/bin/Release/FoenixIDE.exe differ diff --git a/bin/Release/FoenixIDE.exe.config b/bin/Release/FoenixIDE.exe.config index 329b00c..fd89741 100644 --- a/bin/Release/FoenixIDE.exe.config +++ b/bin/Release/FoenixIDE.exe.config @@ -1,12 +1,12 @@ - + - -
+ +
- + @@ -18,4 +18,4 @@ - \ No newline at end of file + diff --git a/bin/Release/roms/kernel.bin b/bin/Release/roms/kernel.bin deleted file mode 100644 index efb08b9..0000000 Binary files a/bin/Release/roms/kernel.bin and /dev/null differ diff --git a/bin/Release/roms/kernel.hex b/bin/Release/roms/kernel.hex index b1d22cb..140581a 100644 --- a/bin/Release/roms/kernel.hex +++ b/bin/Release/roms/kernel.hex @@ -9,17 +9,17 @@ :11FF6000C2308B0B48DA5A221417387AFA682BAB4015 :20FFE0005C04003A10FF20FF30FF40FF000060FF5C05073910FF20FF30FF40FF00FF60FFD1 :020000040038C2 -:201000005C0004395CAC05395CA406395CEB06395CD116395CD216395C9E07395C870739D6 -:201020005C1609395CB641395CD316395CD416395CD516395CD616395C0607395C0F073925 -:201040005CD716395C5341395C4807395C2107395C1807395CD816395CD916395CDA163904 -:201060005CDB16395CDC16395CDD16395C1709395CDE16395CDF16395CD70A395CE0163912 -:201080005CF40A395C1B0A395CE116395CE216395C7709395CAA09395CD009395CF609398B -:2010A0005C6609395C670A395C420B395C0D0C395CF90F395CF810395C6312395CD80F39D6 -:2010C0005CA00F395C3C0C395C5C0C395C1E0D395C2B0E395C620E395C630E395C3213397F -:2010E0005CAE13395C1C14395CD113395C5F37395C3554395CC854395C0255395C9B5539F1 -:201100005C3655395C4556395C0756395C4156395CDE56395C0557395C0957395CF95839CC -:1C1120005C2941395C9259395C5445395C780D395CBB5A395C1D5A395C715A39D6 -:201700005C136A395CE516395CE516395CE516395CE51639E220AF400100C900F07DAF4060 +:201000005C0004395CAC05395CA406395CEB06395C2317395C2417395CA707395C9007391E +:201020005C5509395C0842395C2517395C2617395C2717395C2817395C0607395C0F073947 +:201040005C2917395CA541395C5407395C2107395C1807395C2A17395C2B17395C2C17395A +:201060005C2D17395C2E17395C2F17395C5609395C3017395C3117395C160B395C321739A1 +:201080005C330B395C5A0A395C3317395C3417395CB609395CE909395C0F0A395C350A3968 +:2010A0005CA509395CA60A395C810B395C4C0C395C3810395C3711395CA212395C171039DB +:2010C0005CDF0F395C7B0C395C9B0C395C5D0D395C6A0E395CA10E395CA20E395C71133987 +:2010E0005C0014395C6E14395C2314395CB137395C8754395C1A55395C5455395CED55395E +:201100005C8855395C9756395C5956395C9356395C3057395C5757395C5B57395C4B59393A +:1C1120005C7B41395CE459395CA645395CB70D395C1B5B395C7D5A395CD15A3980 +:201700005C736A395C3717395C3717395C3717395C371739E220AF400100C900F07DAF40B4 :2017200001002901C901D0098F400100200918E220AF4001002902C902D0078F400100201B :201740001A18AF4001002904C904D0078F400100202B18AF4001002908C908D0078F4001CA :2017600000203C18AF4001002910C910D0098F400100204D18E220AF4001002940C940D091 @@ -48,893 +48,897 @@ :201A4000081000E22048A5892904F00D68C9619009C97BB00529DF800168C900F018C9031A :201A6000F015A68DE08000B00D9F000F00E8868DA9009F000F0060E220A980858A60DA0B32 :201A8000084808C220A9000F5B2868E220C21058AF8A0F002960C960D00AA9008F8A0F0098 -:201AA000228B1639A68BE48D900280E478B500E8E48DF007868B58282BFA6B648B648D8094 -:011AC000F62F +:201AA00022DD1639A68BE48D900280E478B500E8E48DF007868B58282BFA6B648B648D8042 +:201AC000F6DA0B084808C220A9000F5B2868E220C21058A68BE48D9005A90038800B78B552 +:131AE00000E8E48DF007868B58282BFA6B648B648D80F62C :020000040039C1 :2004000018FB78C230A9FFFE1BA20010A00010A900205400384808C220A900005B2868E23F :2004200020A20000A9009500E8E00001D0F8EAA9FF8F4801008F4901008F4A01008F4B0133 -:20044000008F4C01008F4D01008F4E01008F4F010022481239C230A900A0850C8517A90060 +:20044000008F4C01008F4D01008F4E01008F4F010022871239C230A900A0850C8517A90021 :20046000C0851FE220A9AF850E8519A9AF8521E220A9008D870FA99F8F00F1AFA9BF8F0053 :20048000F1AFA9DF8F00F1AFA9FF8F00F1AFC230A24800860FA034008413A280008611A0F9 -:2004A00040008415A9ED00851E22DC100022B0100022C4100022C8100022AC100022B90F82 -:2004C0003922BC100022CC100022A00F3922420B39A9010022D25B39223E5C39A902002251 -:2004E000D25B39223E5C39A9000022381000223C1000C220A20000A00000221B0A39C2308A -:200500004808E220A93948AB2868A2136E227E0739228D0B394808C220A900005B28682246 +:2004A00040008415A9ED00851E22DC100022B0100022C4100022C8100022AC100022F80F43 +:2004C0003922BC100022CC100022DF0F3922810B39A9010022325C39229E5C39A902002212 +:2004E000325C39229E5C39A9000022381000223C1000C220A20000A00000225A0A39C2308A +:200500004808E220A93948AB2868A2736E2287073922CC0B394808C220A900005B2868229E :20052000B41000E220C210A99F8F00F1AFA9BF8F00F1AFA9DF8F00F1AFA9FF8F00F1AFA9DE -:20054000838F00F1AFA9128F00F1AFA9908F00F1AFA2004022191639A99F8F00F1AF58E27A -:2005600020C2104808E220A93948AB2868A20000BF0010009F001000E8E00010D0F2228274 +:20054000838F00F1AFA9128F00F1AFA9908F00F1AFA20040226B1639A99F8F00F1AF58E228 +:2005600020C2104808E220A93948AB2868A20000BF0010009F001000E8E00010D0F222D422 :200580004439222C0639C920F010C90DF01EC981F054C982F01DC983F032AF0EE8AF2903B0 -:2005A000C900F028C901F00BC902F03A5C00003AEA80FDE220A9028F2103002254453990BF -:2005C00006220F473980E5A2F1718039E220A9068F210300225445399007220F473982CB55 -:2005E000FFA20D72801FA25672227E0739E220A9008F21030022AC67399007220F4739825C -:20060000AAFFA23072227E0739A2CC71227E073922210739C952D0038263FFC972D0038269 +:2005A000C900F028C901F00BC902F03A5C00003AEA80FDE220A9028F21030022A64539906D +:2005C000062261473980E5A251728039E220A9068F21030022A6453990072261473982CBFE +:2005E000FFA26D72801FA2B67222870739E220A9008F210300220C683990072261473982E0 +:20060000AAFFA2907222870739A22C722287073922210739C952D0038263FFC972D0038296 :200620005CFFC962F086C942F08280E48B08E220C210A93948ABA26F06221C1000C210A0CA -:20064000E803E220A2E8032219163988F01C22481000C900F0EEC981F012C982F00EC98300 +:20064000E803E220A2E803226B163988F01C22481000C900F0EEC981F012C982F00EC983AE :20066000F00AC90DF006C920D0DAA90028AB6B46313D4644432C2046323D5344432C20464C :20068000333D4944452C2052455455524E3D42415349432C2053504143453D4445464155F3 :2006A0004C540D004808C220A900005B2868688F480200688F460200688F440200688F4CC7 :2006C0000200E220688F4E0200688F4F0200C220688F400200E220688F420200C2203B8F83 -:2006E0004A0200A9FFFE1B5C04003A4808E220A93948AB2868E220A26D72227E07392218FF -:20070000073980FADBDB08E2208F040700286B08E2208F030700286B22210739229E073979 -:200720006B08E220AF040700F017C901F009C902F005A90028386B22D25B3922865C398047 -:2007400004227E1A3828186BDA5A8B0B084808E220A90048AB2868E220AD0407C900F00332 -:20076000821000C220AD8B0FCD8D0FB006224C10008005C220A90000282BAB7AFA6B22878B -:200780000739221709396B4808E220C210BD0000F008229E0739E84C8D07E828686BDA5A7B -:2007A0000B8B084808C220A900005B28684808E220A90048AB2868E220C21048AF03070082 -:2007C000F016C901F007C902F00368805722D25B396822A75C39804C68C90AF069C920902E -:2007E00019C97FF045B0028031C9A09002802BC991F053C99DF0614C2408C909F069C90892 -:20080000F034C90DF03AC911F042C91DF044C90FF01EC901F048C905F0748717A51E871F6D -:200820002277093928AB2B7AFA6B22BB083980F422DF083980EE22AA093922BB083980E42E -:200840002217093980DE22F6093980D822D0093980D22277093980CC22AA093980C6C2202A -:20086000A20000A41C8021C220A51A29F8FF18690800AAA41CE220E40F9004A20000C8C40A -:2008800013900522670A3988221B0A398096A60FCAA41C221B0A39E220A717C920D00B2261 -:2008A000AA0939A61AD0F2827AFFA61AE8E40FD0038270FF227709398269FFDA5A480B081C -:2008C0004808C220A900005B2868C230A517A8AAE818A50FE51A54AFAF282B687AFA6BDA79 -:2008E000480B084808C220A900005B2868C230A51A1AC50FB01B38A50FE51A1A1865173A9A -:20090000A83AAA38A50FE51A44AFAFE220A9208717282B68FA6B6BDA5A8B0B084808E220A6 -:20092000A90048AB28684808C220A900005B2868E220C210AF030700F01CC901F006C902A1 -:20094000F002801C22D25B39A90D229E0739A90A229E0739800AA20000A41CC8221B0A39E4 -:20096000282BAB7AFA6BDA5A08A20000A00000221B0A39287AFA6BDA5A480B08C220C21052 -:200980004808C220A900005B2868A61AE8A41CE40F900DA20000C8C41390058822670A396F -:2009A000221B0A39282B687AFA6BDA5A480B08C2304808C220A900005B2868A51AF00BA676 -:2009C0001ACA861AA41C221B0A39282B687AFA6BDA5A480B08C2304808C220A900005B28DA -:2009E00068A51CF00BA41C88841CA61A221B0A39282B687AFA6BDA5A0BC2304808C220A905 -:200A000000005B2868A61AA41CC8C41390058822670A39221B0A392B7AFA6B480B084808AE -:200A2000C220A900005B2868C230C413900722670A398880F5861A841CA50CC00000F0086E -:200A400018651188F00280F818651A8517A41C988F1600AF8A8F1400AFC22018A51769003C -:200A600020851F282B686B48DA5A8B0B084808C220A900005B2868C230A5118F000100A5CF -:200A8000138F020100AF040100850018A900A0A86511AAA50054AFAFC23018A900C0A86578 -:200AA00011AAA50054AFAFA50048186900A08500A00000A920009700C8C40FD0F968186944 -:200AC00000C08500A00000A51E9700C8C40FD0F9282BAB7AFA686B0848E220BD00004A4A8B -:200AE0004A4A22310B39BD000022310B39CA88D0E868286B48088F44020008E220C2106809 -:200B00002920C920F014AF4602004A4A4A4A22310B39AF46020022310B39AF4402004A4AD2 -:200B20004A4A22310B39AF44020022310B3928686BDAC220290F00AABF817239229E07397A -:200B4000FA6B48DA08E220C210A20000A9209F00A0AFE8E00020D0F6A20000AF1E00009F1D -:200B600000C0AFE8E00020D0F628FA686B080B4808C220A900005B2868E220C210A0000016 -:200B8000B7009704C8C02A00D0F62B286048DA5A088B0B4808C220A900005B2868C230A95D -:200BA00000C08504A9AF008506A9586F8500A939008502206D0B18A50465118504A9826FB9 -:200BC0008500A939008502206D0B18A50465118504A9AC6F8500A939008502206D0B18A5C8 -:200BE0000465118504A9D66F8500A939008502206D0B18A50465118504A900708500A9393E -:200C0000008502206D0B2BAB287AFA686B0B0848DAE220E210A200BF2A70399F401FAFE87E -:200C2000E040D0F3A200BF6A70399F801FAFE8E040D0F3C220C210FA68282B6BE220C210FD -:200C4000A20000BF0077399F0040AF9F0041AF9F0042AFE8E00001D0EAC2306B48DAA20032 -:200C600000E220A900850A8602A60ABF0076394955A6029F0020AF9F0024AF9F0028AF9F59 -:200C8000002CAF9F0030AF9F0034AF9F0038AF9F003CAFE88602A60ABF007839A6029F0092 -:200CA00020AF9F0024AF9F0028AF9F002CAF9F0030AF9F0034AF9F0038AF9F003CAFE88685 -:200CC00002A60ABF00773949AAA6029F0020AF9F0024AF9F0028AF9F002CAF9F0030AF9F6B -:200CE0000034AF9F0038AF9F003CAFE8A9FF9F0020AF9F0024AF9F0028AF9F002CAF9F0002 -:200D000030AF9F0034AF9F0038AF9F003CAFE60AE8E00004F003824EFFC230FA686B4808D5 -:200D2000E220AF0100AF2901C901D015A9008F0100AFEAEAEAEAEAA9018F0100AFEAEAEA58 -:200D4000EAA9008F0100AFA9018F0000AFE220A9208F0500AF8F0700AFA9008F0600AFA9F0 -:200D6000018F0400AFA9208F0800AF8F0900AFC23022780D3928686B48DA5A8B0B084808A3 -:200D8000C220A900005B28684808E220A90048AB2868E230AF0100AF29030AAAC220BF1B52 -:200DA0000E398511850FBF230E3985158513E220AF0400AF8901F05CAF0800AF293F8903D3 -:200DC000D0044A4A80034A4A1A85006401E220AF0100AF8902F004C2204600C22038A511B8 -:200DE000E500850FAF0900AF293F00890300D0044A4A80034A4A1A85006401E220AF0100EA -:200E0000AF8902F004C2204600C22038A515E5008513C230282BAB7AFA686B500064002818 -:200E20000032003C004B001E00250048E220A9008F0001AFA9008F0101AFA9C08F0201AFF1 -:200E4000A9008F0301AFA9008F0801AFA9008F0901AFA9C08F0A01AFA9008F0B01AFC2302F -:200E6000686B6B48E220A9038F000CAF8F080CAF8F100CAF8F180CAF8F200CAF8F280CAF0A -:200E80008F300CAF8F380CAF8F400CAF8F480CAF8F500CAF8F580CAF8F600CAF8F680CAFA2 -:200EA0008F700CAF8F780CAF8F800CAFA9098F030CAF8F0B0CAF8F130CAF8F1B0CAF8F2324 -:200EC0000CAF8F2B0CAF8F330CAF8F3B0CAF8F430CAF8F4B0CAF8F530CAF8F5B0CAF8F638A -:200EE0000CAF8F6B0CAF8F730CAF8F7B0CAF8F830CAFA9008F020CAFA9048F0A0CAFA9088C -:200F00008F120CAFA90C8F1A0CAFA9108F220CAFA9148F2A0CAFA9188F320CAFA91C8F3A3B -:200F20000CAFA9208F420CAFA9248F4A0CAFA9288F520CAFA92C8F5A0CAFA9308F620CAFD5 -:200F4000A9348F6A0CAFA9388F720CAFA93C8F7A0CAFA9408F820CAFA9008F010CAF8F0979 -:200F60000CAF8F110CAF8F190CAF8F210CAF8F290CAF8F310CAF8F390CAF8F410CAF8F49B9 -:200F80000CAF8F510CAF8F590CAF8F610CAF8F690CAF8F710CAF8F790CAF8F810CAF686BDE -:200FA00048DA5A8B08C230A200F0A00080A9000854AF3F28AB7AFA686BE220C210A20000FB -:200FC000BF0079399F0005AFE8E00001D0F2EAA9018F0007AFC2306B48E220A9B18F120047 -:200FE000AFA9038F1000AFC230A900008F1400AFA906008F1600AF686B0B0848E220A9017E -:201000008F2311AFAF2311AFA9018F2411AFA9018F2511AFA9018F2611AFA9058F2711AF4E -:20102000A9058F2811AFA9058F2911AFA9058F2A11AFA9008F2B11AFA9018F2F11AFA90545 -:201040008F3011AFA9848F3111AFA9018F3311AFA9018F3411AFA9018F3511AFA9018F366E -:2010600011AFA9018F3711AFA9018F3811AFA9018F3911AFA9018F3A11AFA9018F3D11AFB4 -:20108000A9018F3E11AFA9058F3F11AFA9058F4011AFA9058F4111AFA9048F4211AFA90576 -:2010A0008F4311AFA9048F4411AFA9058F4511AFA9048F4611AFA9848F4711AFA9848F4813 -:2010C00011AFA9008F4B11AFA9018F4C11AFA9008F4D11AFA9008F4E11AFA9008F4F11AFF6 -:2010E000A9008F5011AFA9018F5D11AFA9028F5E11AFC22068282B6B0B0848DAE220C210E9 -:201100001820B111A9AA8F6410AF20BC11AF6010AFC955F003828900A9AB8F6410AF20BC17 -:2011200011AF6010AFC900F003827500A9608F6410AF20B111A9698F6010AF20B111A9FF36 -:201140008F6010AFA2FFFFCAEAEAEAEAEAEAEAEAE00000D0F220BC11AF6010AF20B111A93F -:20116000F48F6010AF20BC11AF6010AFC9FAD0EC20C711AF40010029808F400100AF410141 -:201180000029018F410100AF4D010029FE8F4D0100AF4C0100297F8F4C0100A2267138B0B2 -:2011A00003A23871227E0739C220C210FA68282B6BAF6410AF2902C902F0F660AF6410AF4D -:2011C0002901C901D0F66020B111A9A88F6410AF20B111A9A98F6410AF20BC11AF6010AF6F -:2011E000C900D0EC20B111A9208F6410AF20BC11AF6010AF09024820B111A9608F6410AF62 -:2012000020B111688F6010AFA9F6202D12204012A9E8202D12204012A900202D122040128A -:20122000A9F4202D12204012A90085E0604820B111A9D48F6410AF20B111688F6010AF6021 -:2012400020BC11AF6010AF604808E220A9008F0B08AF8F0C08AFAF0E08AF09048F0E08AF00 -:2012600028686BA90F8F18E4AFA9BE8F05E4AFA9F88F06E4AFA9118F01E4AFA9258F00E40C -:20128000AFA9118F04E4AFA9088F03E4AFA9008F01E4AFA9C68F06E4AFA9088F0AE4AFA900 -:2012A000008F08E4AFA9088F0CE4AFA9C68F0DE4AFA9088F11E4AFA9008F0FE4AFA9088F89 -:2012C00013E4AFA9C68F14E4AFA9368F00E4AFA9018F01E4AFA9008F02E4AFA9088F03E401 -:2012E000AFA9088F04E4AFA90C8F07E4AFA9048F08E4AFA9008F09E4AFA9088F0AE4AFA959 -:20130000088F0BE4AFA9008F0EE4AFA9088F0FE4AFA9008F10E4AFA9088F11E4AFA9088FDE -:2013200012E4AFA9108F04E4AF8F0BE4AF8F12E4AF6B48C220A9001A8F00E9AFA901008F10 -:2013400002E9AF20C213A90F2A8F00E9AFA901008F02E9AF20C213A901238F00E9AFA9018F -:20136000008F02E9AF20C213A9072C8F00E9AFA901008F02E9AF20C213A902148F00E9AF9E -:20138000A901008F02E9AF20C213A902168F00E9AFA901008F02E9AF20C213A9D5198F00AF -:2013A000E9AFA901008F02E9AF20C213686BC220A9002E8F00E9AFA901008F02E9AF20C265 -:2013C000136BE220AF02E9AF2901C901F0F6C22060C230A90000A20000A00000E22097486A -:2013E000C8C440D0F920F013E8E442D0ECC2306BC220A5488F200100A54A8F220100A980C5 -:20140000028F240100A900008F260100AF2801008548AF2A0100854AA9000060C230A000CE -:2014200000B744C9424DF003820401A00200B7448F200100A00400B7448F220100A9FFFF9A -:201440008F2401008F26010018AF2801008550AF2A01008552A01200B7448540A01600B7CD -:20146000448542A02E00B7440A0A854CE00000D0052037158008E00100D003206715A556BF -:201480008F000100A54E8F020100AF0401008F200100AF0601008F220100A5548F240100BE -:2014A000A900008F260100AF28010085F0AF2A010085F2A5488F200100A54A8F220100A54C -:2014C000F08F240100A5F28F260100AF2801008548AF2A0100854AA5448F200100A5468FBA -:2014E000220100A5508F240100A5528F260100AF2801008544AF2A01008546A5448F200194 -:2015000000A5468F22010018A54049FFFF6901008F240100A9FFFF8F260100AF2801008512 -:2015200044AF2A01008546209715A274718003A26071227E07396B38A07A00A20000E22038 -:20154000B7449F0020AFC8B7449F0120AFC8B7449F0220AFC8A9809F0320AFC8E8E8E8E8F3 -:20156000E44CD0DCC2206038A03600A20000E220B7449F0024AFC8B7449F0124AFC8B74435 -:201580009F0224AFC8A9809F0324AFC8E8E8E8E8E44CD0DCC22060A20000A00000E220B7F0 -:2015A000449748C8C440D0F720B41520CF15E8E442D0E760C220A5448F200100A5468F224C -:2015C0000100AF2801008544AF2A0100854660C22018A548654E8548A54A690000854A6076 -:2015E000EAEAEAEAEAEAEAEAEAEA6B22E0153922E0153922E0153922E0153922E0153922AA -:20160000E0153922E0153922E0153922E0153922E015396B22EB15396BE00000F00722141E -:201620001639CA80F46B8B084808E220A90048AB2868E220A9008F600100AF4C010029FBE6 -:201640008F4C0100A97F8D0507A9008F6101008F6201008F630100C2308A8F65010098E283 -:20166000208F670100A9098F600100A980CB1C0507F0FAA9008F600100A97F8D0507AF4C56 -:20168000010009048F4C010028AB6B48DA5A08E220C210AF1000AF29FE8F1000AFA2000045 -:2016A000BF00003B9F00A0AFBF00203B9F00C0AFE8E00020D0EA2221073922420B392266C5 -:2016C0000939AF1000AF09018F1000AF287AFA686B00000000000000000000000000000093 -:2016E00000000000006B6B0181019801B001CA01E50102022002410263028702AE0200018E -:201700000208090A1011120304050B0C0D131415101314121511100804020120406080E05F -:20172000C000244FF20B000E3100520B004143434F52444E2020200031436E170102220560 -:201740008B0C0242414750495045312020003000FFA00300A300650B0242414750495045A8 -:20176000322020003187A111000816807D430042414E4A4F3120202020000115252F000AA0 -:201780002180656C004241535331202020202000011DF2EF000A0100F5780042415353320B -:2017A000202020202000C06DF901010E4100F27300424153534841525020200030C8D51933 -:2017C000000C7180611B00424153534F4F4E31202000C14FB1530306E000127403424153AE -:2017E0005354524C47202006000BA84C00000000000000424452554D31202020200064DBAE -:20180000FF0100043EC0F3620042454C4C4F4E4720202000074FF26000081200F2720042A6 -:20182000454C4C5320202020200064DBFF0100043EC0F5F30042454C53484F52542020000C -:20184000204B7B04010E2100F57200424E434542415353202000211671AE000E2100819EE2 -:2018600000425241535331202020200030C5521100003180312E0043424153534F4F4E205C -:20188000200033870110000814807D330043454C455354412020200032167324000E218022 -:2018A000755700434C415231202020202000311C411B000C6080423B00434C4152322020C3 -:2018C00020202000329A511B000C6182A23B00434C4152494E4554202000110DF201000AF7 -:2018E000150DF2B100434C41564543494E2020000002F0FF00061180F0FF0043524F4D4FA7 -:20190000524E452020090100F5B50000000000000043594D42414C3120202000058AF07BAB -:2019200000080180F47B00454C434C415631202020000149F15301061100F17402454C4386 -:201940004C41563220202000E06D5704010E6100677D00454C4543464C2020202000139741 -:201960009A12020E91809B1100454C454356494245202000F10197170008210DF11800454B -:201980004C4755495431202020001396FF21000A1180FF0300454C4755495432202020006F -:2019A000078F827D000C1480827D00454C475549543320202000058FDA15000A0180F9147B -:2019C00002454C475549543420202000B2CD912A0209B180912A01454C4F5247414E31201C -:2019E0002000014FF15000060104D27C00454C5049414E4F312020000222F213000E02002B -:201A0000F54300454C5049414E4F322020008163F35800000180F25800455049414E4F312D -:201A200041202000071FF5FA000E0157F5FA00455049414E4F314220200021837417000716 -:201A4000A28D651700464C555445202020202000A127748F0002A180652A00464C555445BE -:201A6000312020202000E0EC6E8F000E6100652A00464C555445322020202000219F535A4F -:201A8000000C2180AA1A004652484F524E3120202000208EA58F02062100363D0046524817 -:201AA0004F524E3220202000F01855EF0200E080871E034653545250312020202000701689 -:201AC000552F020CE080871E034653545250322020202000F1009713000A250DF118014604 -:201AE000555A47554954312020003148F15300063200F2270246555A4755495432202000DD -:201B00000111F21F000A0100F5880047554954415231202020000229F57500000183F2F3BF -:201B20000048415250312020202020000299F55500000180F653004841525032202020201D -:201B400020000257F55600000180F6540048415250332020202020000229F575000001035F -:201B6000F2F30048415250453120202020003287A110000816807D330048415250534931AF -:201B8000202020003387A110000615807D430048415250534932202020003584A81000084D -:201BA00018807D33004841525053493320202000110DF201000A150DF2B100484152505325 -:201BC00049342020200036878A0000081A807F33004841525053493520202000F0001E1112 -:201BE0000108E2C011110148454C494350545220200A0100F7B500000000000000484948EC -:201C0000415431202020200A0103DA18000000000000004849484154322020202000874D8A -:201C20007842000A94008554004A4156414943414E202000035E8551010E1100D271004A12 -:201C4000415A5A475549542020000050F270000E1300F272004A455753484152502020003B -:201C60000002F0FA01061180F2FA014B45594252443120202000018FF2BD0008148082BD87 -:201C8000004B455942524432202020000100F0F00000E403F336004B4559425244332020CC -:201CA0002009E60025B5000000000000004C415345522020202020003244F8FF000E110098 -:201CC000F57F004C4F474452554D31202000054EDA25000A0100F915004D4152494D4241A1 -:201CE00031202000854EDA15000A8180F913004D4152494D4241322020003000FE110108E7 -:201D0000AEC0F119014D44524E50484F4E2020070C00C8B6010000000000004D4C5452448F -:201D200052554D2020002090F59E020C1100F45B034D4F4F4753594E542020000E40D15389 -:201D4000000E0E00F27F034E4F495345312020202000B1C56E17000222058B0E004F424F27 -:201D6000453120202020200065D2810300027180F105004F5247414E3120202020002480DD -:201D8000FF0F00012180FF0F004F5247414E322020202000035BF01F000A0180F01F004F06 -:201DA0005247414E332020202000035BF01F000A018DF013004F5247414E334120202000F5 -:201DC000035BF01F000A0192F012004F5247414E3342202020000C00F8B500010000D64FCC -:201DE000004F52474E50455243202000174FF26100081208F1B20050484F4E4531202020BA -:201E00002000174FF2610008120AF1B40050484F4E453220202020008163F3580000018044 -:201E2000F258005049414E31412020202000071FF5FA000E0126F5FA005049414E3142204A -:201E400020202000071FF5FA000E0157F5FA005049414E31432020202000034FF153000600 -:201E60001700F274005049414E4F202020202000014FF15300061100D274005049414E4F66 -:201E8000312020202000419DF25100061300F2F1005049414E4F322020202000014FF150BA -:201EA00000060104D27C005049414E4F332020202000014DF16000081100D27B00504941C0 -:201EC0004E4F342020202000034FF15300061703F274005049414E4F42454C20200001CF3B -:201EE000F15300021200F283005049414E4F4620202020001000759301000100F5820150F6 -:201F00004F5042415353312020070C00C7B400000000000000524B534E4152453120200073 -:201F2000014F7153000A1200527C0053415831202020202020000700F0F0000E00005CDC99 -:201F40000053435241544348202020000700F0F0000E00005CDC0053435241544348342090 -:201F600020000600F0F0000E0000F6B400534452554D322020202000E40EFF3F0100C00075 -:201F8000F3070053485254564942452020000140F15300000840F1530053495441523120BB -:201FA000202020000140F15300000840F153015349544152322020202000610C8103000881 -:201FC0007180610C00534E414B45464C202020070C00F8B500000000000000534E41524506 -:201FE0003120202020000600F0F0000EC403C43400534E525355535420202000701C5103FB -:20200000020E2000546702534F4C4F564C4E202020000146F183000661033186005354457E -:20202000454C4754312020000147F18300066103918600535445454C475432202000B18B00 -:20204000711100066140421501535452494E475331202000E14FB1D30306210012740153AC -:2020600054524E4C4F4E4720200055972A020000128042F30053594E312020202020200032 -:2020800013979A12000E11809B140053594E3220202020202000118AF11100060140F1B328 -:2020A0000053594E3320202020202000210DE93A000A2280656C0053594E34202020202097 -:2020C0002000014F715300061900527C0053594E3520202020202000240F417E000A2100D3 -:2020E000F15E0053594E36202020202020000787F00500040180F0050053594E3920202011 -:20210000202020002603E0F000081E00FF310053594E42414C31202020002803E0F00004B7 -:202120001300E8110053594E42414C32202020003088D519000C7180611B0053594E42419C -:2021400053533120200081866501000C110032740053594E42415353322020008183650535 -:20216000000A510032740053594E42415353342020000600F0F0000E0000F8B60053594E2B -:20218000534E5231202020000600F0F0000E0000F6B40053594E534E5232202020008F818E -:2021A000EF010004010098F10054494E43414E31202020080400F7B5000000000000005447 -:2021C0004F4D31202020202020080200C89700000000000000544F4D322020202020200027 -:2021E000174FF26100081208F27400545241494E42454C2020002603E0F000081E00FF31BE -:2022000000545249414E474C45202000B11C411F000E6180923B0054524F4D42312020202A -:202220002000211C531D000C6180523B0054524F4D42322020202000311C410B000E618099 -:20224000923B005452554D50455431202000311C231D000C6180523B005452554D504554D7 -:2022600032202000311C4101000E6180923B005452554D50455433202000311C410B000C58 -:202280006180923B005452554D504554342020002119438C000C2180852F00545542413124 -:2022A0002020202020008453F5330006A080FD250056494252413120202020000673F6544F -:2022C00000008103F2B30056494252413220202020009397AA12020E9180AC2100564942FA -:2022E0005241332020202000311C5103000E618054670056494F4C494E3120202000E18882 -:202300006229000C2280532C0056494F4C494E3220202000E188642900062283532C00562C -:20232000494F4C494E3320202000319CF1F9000E3180F7E600564C4E50495A5A312020008E -:20234000000200F0000E14801BA2005741564520202020202000112DC82F000C3100F5F5DD -:202360000058594C4F312020202020062E00FF0F0000000000000058594C4F322020202000 -:2023800020000600FFF0000EC400F8B50058594C4F332020202020003E009F0F0F0030005F -:2023A00087FA00000100789709000200889803000100789709000200889803001608F1FB16 -:2023C00001001100F96900000000F86C01000E80E84A0000251BFAF201001200F69A000095 -:2023E0000603F4440001011BF23400000000F9F305000100F78A00000107FAFD05000100E1 -:20240000F64700001608F1FB01001100F96900002400FF000F000200F7A900003E009F0F41 -:202420000F00300087FA00002400FF000F000200F7A90000060AFA1F0C001100F5F50000D8 -:202440002C00F2FE07000206B8D80300060AFA1F0C001100F5F500002C00F2FE0700020663 -:20246000B8D80300060AFA1F0C001100F5F500002E0082F60500041074F80300060AFA1F42 -:202480000C001100F5F50000060AFA1F0C001100F5F500002C009F000F020E05C5D403007A -:2024A000060AFA1F0C001100F5F50000291094000F000404F94403002C009F000F020E05D9 -:2024C000C5D40300291094000F000404F94403002E09F5F10100060387F703002C009F00C9 -:2024E0000F020E05C5D403003714F7A109010300F62800002C009F000F020E05C5D4030083 -:202500008000FF000D010000F5F70100291094000F000404F944030025C4FAFA010003003C -:2025200099F900002103FBFA01010200A8F7000025C4FAFA0100030099F900002418F9FAAB -:202540000F020300A6F600002418F9FA0F020300A6F600000514F5F507020300F6360200AF -:202560000514F5F507020300F63602001C0CF9310F01150096E801001C0CF9310F011500B1 -:2025800096E801000E00FF010F000E02797703000E00FF010F000E02797703002015AF0791 -:2025A00005010E00A52B02002018BF0701010E00933B02002000F0F70B000801893B030075 -:2025C0002000F3FA0900080A532B02001521F89A09011300F6890000251BFAF201001200B0 -:2025E000F69A0000251BFAF201001200F69A000020015F0701000800874B0100251257F794 -:202600000101030078670100222FF1F007002702F8FC00002644F1F007002740F5F50000DC -:202620000E00FF010F000E02797703002644F1F007002740F5F500002644F1F0070027401E -:20264000F5F500001608F1FB01001100F96900001608F1FB01001100F9690000021DF593ED -:2026600001000000C6450097233900A3233900AF233900BB233900C7233900D3233900DF09 -:20268000233900EB233900F7233900032439000F2439001B24390027243900332439003FAD -:2026A0002439004B24390057243900632439006F2439007B24390087243900932439009F8A -:2026C000243900AB243900B7243900C3243900CF243900DB243900E7243900F3243900FF6A -:2026E0002439000B25390017253900232539002F2539003B25390047253900532539005F43 -:202700002539006B25390077253900832539008F2539009B253900A7253900B3253900BF21 -:20272000253900CB253900D7253900E3253900EF253900FB25390007263900132639001FFF -:202740002639002B26390037263900432639004F2639005B26390000335AB250010031002F -:20276000B1F501003149F25307011103F1F500003195D1830D013203C1F50000349BF363B9 -:202780000101110092F501002728F8B701029100F1F900001A2DF3EE01011100F1F5000001 -:2027A0003595F2580F01320281F601003185C94001003500C2B901000915C7640800010581 -:2027C000B23500000603F4440001011BF23400000406A9240A010101F5740000D400F63344 -:2027E0000000F10061E30000D400F7E80400D100A46400003616F7F701003107B5F50000F7 -:20280000031BA2430B000000F3740000C38EF83501011100C3940100E207F41B0601E0007B -:20282000F40D0100F200F62C0400F000F50B0100F106B6150A00F000BF0700002203791657 -:202840000801E0006D080100312763060100720051170100B41D53160F0171005117010058 -:20286000252997150100320053080100249E67150F003100530601001327A3B4050131002F -:20288000D2F8000017A3F33201001100E2C701003324D2C10F013100F19C00003105F844A9 -:2028A00001003202F2C9010021099C7B0700020395FB00002184819807012104A159000065 -:2028C000B10C78430100220391FC0300000A828C09000802B4EC00002113AB4601002100B8 -:2028E00093F70000010AF93201002204C15800002107FA770B002202C36A000021177157E3 -:202900000B002100628700002501FA7807011200F39700002103FA880D001300B397000056 -:202920002109F57F09012304F3CC00000110A39B0900010093AA0000E219F6290D01E1006A -:2029400078080100E21CF6290D01E10078080100611969160B01610054270100711882314B -:202960000D01320061560000E22370060D01E10075160100020088E608006100F5F60100A5 -:202980001220F6D50F011180F3E30000610EF4F401010000B5F50000611E9C040F012180F0 -:2029A00071160000A22AC0D60F02210030550100612172350F01610062360100211A722373 -:2029C0000F01210251070000E1169731090061006239000022C37945010021006627000056 -:2029E00021DE63550101210073460000420586F70A00500074760100311C61020F0061819A -:202A000092380000711E52230F00610271190000211A76160F002101810900002528892C68 -:202A200007022000834B0200211F79160900A20571590000211987160F002103823900008F -:202A4000211775350F00228284170000212262580F00210272160000B11B59070101A100C0 -:202A60007B0A000021169F040B002100850C0100210FA8200D0023007B0A0100210F8804CF -:202A8000090026007918010031188F050100320173080000A10A8C3701012404770A0000D0 -:202AA0003104A8670B00750051190000A21F77260101210174090000E107B8940101210191 -:202AC00063280000A19387590100E100650A000022109F380100610067290000E20D889AFA -:202AE0000101210067090000A21098940F0021016A280000F11C86260F00F100552700006D -:202B0000E13F9F090000E1006F080000E23BF719010021007A070000221E920C0F00610671 -:202B2000A20D00002115F4220F012100A35F0000F22047660301F100422700006119882820 -:202B40000F006105B24900002116821B01002300B27901002100CA93010022007A1A0000AC -:202B6000230092C90801220082280100211DF37B0F002202C35F0000E10081250001A6864C -:202B8000C4950100212731010F00210044150000601483350D026100D1060000E15CD30154 -:202BA0000101620082370000283834860102210041350000241252F30501230232F5010076 -:202BC000611D62A60B00A10061260000220F22D50B0121843F050100E31FF92401003101CC -:202BE000D1F60000630041550601A20041050100C725A7650101C105F3E40000E319F7B7E4 -:202C00000101610092F50100669BA8440F004104F2E40100612022750D00610045250000C1 -:202C2000E121F6840F00E101A3360000E21473640B01E10198050100210B723409002402F4 -:202C4000A3F601002116F4530D000400F6F800002118DA020D003500F3F50000250FFA638D -:202C60000900020094E501003207F9960100110084440000200E9718090225038318010081 -:202C80006118F6290100620178080100E62176190B0061038E0801002723F0D401000509FE -:202CA000F24600001C0CF9310F01150096E801000200751606020100F6F60100251BFAF237 -:202CC00001001200F69A0000021DF59301000000C64500001115F53205001000F4B4000094 -:202CE0002206FA9909000100D52500002E00FF000F020E0E212D0000300B56E401011700DF -:202D0000558702002400FF030D000508988701000E00F0000F020A04170403002008F6F725 -:202D200001000E0577F902002014F10801002E02F40800002004F20003012300360501003A -:202D40002E00FF020F002A05325503002000A1EF0F001000F3DF0057273900632739006FF2 -:202D60002739007B27390087273900932739009F273900AB273900B7273900C3273900CF2B -:202D8000273900DB273900E7273900F3273900FF2739000B28390017283900232839002F08 -:202DA0002839003B28390047283900532839005F2839006B28390077283900832839008FE3 -:202DC0002839009B283900A7283900B3283900BF283900CB283900D7283900E3283900EFC3 -:202DE000283900FB28390007293900132939001F2939002B29390037293900432939004F9D -:202E00002939005B29390067293900732939007F2939008B29390097293900A3293900AF7A -:202E2000293900BB293900C7293900D3293900DF293900EB293900F7293900032A39000F59 -:202E40002A39001B2A3900272A3900332A39003F2A39004B2A3900572A3900632A39006F32 -:202E60002A39007B2A3900872A3900932A39009F2A3900AB2A3900B72A3900C32A3900CF12 -:202E80002A3900DB2A3900E72A3900F32A3900FF2A39000B2B3900172B3900232B39002FEF -:202EA0002B39003B2B3900472B3900532B39005F2B39006B2B3900772B3900832B39008FCA -:202EC0002B39009B2B3900A72B3900B32B3900BF2B3900CB2B3900D72B3900E32B3900EFAA -:202EE0002B3900FB2B3900072C3900132C39001F2C39002B2C3900372C3900432C39004F84 -:202F00002C39005B2C3900672C3900732C39007F2C39008B2C3900972C3900A32C3900AF61 -:202F20002C3900BB2C3900C72C3900D32C3900DF2C3900EB2C3900F72C3900032D39000F40 -:202F40002D39001B2D3900272D3900332D39003F2D39004B2D390000018FF2F43800010D52 -:202F6000F2F70000014BF2F438000107F2F700000149F2F438000107F2F600008112F2F739 -:202F800000004107F2F700000157F1F700000107F2F700000193F1F700000107F2F7000062 -:202FA000000000000000000000000000000000000000000000000000000000000000000011 -:202FC000000000000797F3F232001187F2F10000172154F432000107F4F400009862F3F63C -:202FE00030008107F2F600001823F6F600000107E7F700001591F6F600000107F6F600009E -:203000004559D3F300008187A3F300000000000000000000000000000000000000000000AE -:20302000000000000000000000000000000000007044AA183400B1078A080000239397232C -:203040003401B10755140000611397043001B187550400002448982A3001B107461A0000D2 -:20306000611391060001210761070000211371060000A19061070000000000000000000070 -:20308000000000000000000000000000000000000000000000000000000000000387F6228E -:2030A00036012187F3F800000347F95430002107F63A0000234A91413801210C84190000E5 -:2030C000234A9519320121079419000009A1204F00008487D1F80000211E94060000A2075E -:2030E000C3A600000000000000000000000000000000000000000000000000000000000067 -:203100000000000000000000018BA19A38002147F2DF0000218BA2163800210FA1DF00002B -:20312000318BF4E83A003107F17800003112F12830003107F11800003115DD1300012107F0 -:20314000562600003116DD1300012107660600000000000000000000000000000000000027 -:203160000000000000000000000000000000000000000000021AF575300101878535000056 -:20318000021DF57530010187F3F400001041F50532011107F2C30000219BB1253C01A20842 -:2031A00072080000A1987F03000121073F070100A193C112000061074F05000000000000A7 -:2031C0000000000000000000000000000000000000000000000000000000000000000000EF -:2031E000715754053C0072077A0500009000546338004107A5450000219285173C00210815 -:203200008F090000219475173200210C8F09000021947615000061078237000031439E1754 -:2032200000012107622C0100000000000000000000000000000000000000000000000000D6 -:20324000000000000000000000000000214D543C38002107A61C0000318F93023801610758 -:20326000720B0000318E93033801610772090000319193033001610782090000318E930F83 -:2032800000016107720F0000214BAA16000121078F0A000000000000000000000000000056 -:2032A000000000000000000000000000000000000000000000000000E11F855F3000E10712 -:2032C000651A0000E146885F3000E107651A0000A19C751F32002107750A0000318B845888 -:2032E00030002107651A0000E14C66560000A1076526000062CB76460000A10755360000BF -:203300000000000000000000000000000000000000000000000000000000000000000000AD -:2033200000000000210EFF0F30012107FF0F01002246865530002187641800002145661273 -:203340003000A107960A0000218B922A34012207912A0000A29EDF05000061476F07000032 -:20336000201AEF01000060078F060200000000000000000000000000000000000000000025 -:2033800000000000000000000000000000000000611791343C00610755160000715D5401BE -:2033A000300072076A030000219721433800A20742350000A11CA1773001210731470100DC -:2033C000218911330000610A42250000A115114700012107CF070000000000000000000020 -:2033E000000000000000000000000000000000000000000000000000000000002292B181E7 -:203400003C00618AF2260000414DF15130014207F2F50000619411513601A3871113000060 -:20342000618C11313A00A1871D030000A44CF37300016107812300000285D2530000070ABB -:20344000F2F601000000000000000000000000000000000000000000000000000000000083 -:203460000000000000000000044FFA563C000107C205000021497C20360022076F0C0100BD -:203480003185DD333A012107561600002004DA05300221888F0B0000056AF1E50000038750 -:2034A000C3E500000715EC2600000207F8160000000000000000000000000000000000001F -:2034C00000000000000000000000000000000000000000001141F8473402100AF303000015 -:2034E000018EF1063E021007F30200000E001F003E00C0071FFF03000680F8243800038F3B -:20350000568402000E00F8000000D00C340403000E00F6000000C0071F02030000000000C3 -:2035200000000000000000000000000000000000000000000000000000000000000000008B -:203540002600FF013E00E407121601000000F3F03E000007F6C902572F3900632F39006F11 -:203560002F39007B2F3900872F3900932F39009F2F3900AB2F3900B72F3900C32F3900CFE3 -:203580002F3900DB2F3900E72F3900F32F3900FF2F39000B30390017303900233039002FC0 -:2035A0003039003B30390047303900533039005F3039006B30390077303900833039008F9B -:2035C0003039009B303900A7303900B3303900BF303900CB303900D7303900E3303900EF7B -:2035E000303900FB30390007313900133139001F3139002B31390037313900433139004F55 -:203600003139005B31390067313900733139007F3139008B31390097313900A3313900AF32 -:20362000313900BB313900C7313900D3313900DF313900EB313900F7313900033239000F11 -:203640003239001B32390027323900333239003F3239004B32390057323900633239006FEA -:203660003239007B32390087323900933239009F323900AB323900B7323900C3323900CFCA -:20368000323900DB323900E7323900F3323900FF3239000B33390017333900233339002FA7 -:2036A0003339003B33390047333900533339005F3339006B33390077333900833339008F82 -:2036C0003339009B333900A7333900B3333900BF333900CB333900D7333900E3333900EF62 -:2036E000333900FB33390007343900133439001F3439002B34390037343900433439004F3C -:203700003439005B34390067343900733439007F3439008B34390097343900A3343900AF19 -:20372000343900BB343900C7343900D3343900DF343900EB343900F7343900033539000FF8 -:203740003539001B35390027353900333539003F3539004B3539003C42444547494B4CE2C6 -:2037600020C210A20000BF573739290F8530BF57373929704A4A4A4A85318A2903852722C1 -:203780004F3939A00000EAEAEAEAC8C0FFFFD0F6E8E00800D0D06BC220A900008528852A12 -:2037A000853085328534A921178550A939008552E2206B6B6B4808C220A900005B2868C2AA -:2037C0002018A900E66532852CA9AF00852EE220A72C6B4808C220A900005B2868C220A93E -:2037E00000E6690100852CA9AF00852EE220A72C29206B4808C220A900005B2868C220A9E3 -:203800004000852820B640E220A72C29C04A4A4A4A4A4A6B4808C220A900005B2868E220F8 -:2038200018A527290F69B0852AA900852BC23018A900E6652A852CA9AF00852EE220A72C92 -:20384000291C4A4A6B4808C220A900005B2868E22018A527290F69B0852AA900852BC2302D -:2038600018A900E6652A852CA9AF00852EE220A72C29206B4808C220A900005B2868E22005 -:2038800018A527290F69C0852AA900852BC23018A900E6652A852CA9AF00852EE220A72C22 -:2038A00029E04A6B4808C220A900005B2868E22018A527290F69C0852AA900852BC230182B -:2038C000A900E6652A852CA9AF00852EE220A72C29016B4808C220A900005B2868C220A953 -:2038E000BD00852820B640E220A72C29806B4808C220A900005B2868C220A900E669BD0002 -:20390000852CA9AF00852EE220A72C29406B4808C220A900005B2868C220A900E669BD00E5 -:20392000852CA9AF00852EE220A72C29206B4808C220A900005B2868C220A900E669BD00E5 -:20394000852CA9AF00852EE220A72C291F6B6B4808C220A900005B2868E220DAA9008532B6 -:2039600020373F20FC3EE210A5303A0AAABFE616398532E8BFE616398533227A3E39A901A6 -:20398000853220373FC210FA6B6B4808C220A900005B28683822783B39E220C210A00000B8 -:2039A000A20000B7088535C8C906D003827001C907D003824401C908D003821801C909D044 -:2039C0000382EC00C90AD00382C000A9008526C220A92000852820B640E220B708872CC890 -:2039E000C220A94000852820B640E220B708872CC8C220A96000852820B640E220B7088707 -:203A00002CC8C220A98000852820B640E220B708872CC8C220A9E000852820B640E220B7C1 -:203A200008872CC8E210A527290FAAB7089FC0E6AFC8A9018526C220A92000852820B64025 -:203A4000E220B708872CC8C220A94000852820B640E220B708872CC8C220A96000852820A8 -:203A6000B640E220B708872CC8C220A98000852820B640E220B708872CC8C220A9E000851A -:203A80002820B640E220B708872C6BE220B7088F31E6AFC8B7088F51E6AFC8B7088F71E68A -:203AA000AFC8B7088F91E6AFC8B7088FF1E6AF6BE220B7088F35E6AFC8B7088F55E6AFC832 -:203AC000B7088F75E6AFC8B7088F95E6AFC8B7088FF5E6AF6BE220B7088F32E6AFC8B708A5 -:203AE0008F52E6AFC8B7088F72E6AFC8B7088F92E6AFC8B7088FF2E6AF6BE220B7088F346A -:203B0000E6AFC8B7088F54E6AFC8B7088F74E6AFC8B7088F94E6AFC8B7088FF4E6AF6BE2C7 -:203B200020B7088F30E6AF8F33E6AFC8B7088F50E6AF8F53E6AFC8B7088F70E6AF8F73E686 -:203B4000AFC8B7088F90E6AF8F93E6AFC8B7088FF0E6AF8FF3E6AF6B4808C220A900005B71 -:203B60002868C22018A900E66532852CA9AF00852EE220A533872C6B4808C220A900005BAB -:203B80002868C220A901E6852CA9AF00852EE220B007A72C29DF872C6B4808C220A90000DA -:203BA0005B2868A72C092000872C6B4808C220A900005B286808C22018A92000852820B6EC -:203BC0004028E220B008A72C297F872C8006A72C0980872C6B4808C220A900005B2868C20D -:203BE00020A92000852820B640E220A72C29806B4808C220A900005B286808C22018A9209F -:203C000000852820B64028E220B008A72C29BF872C8006A72C0940872C6B4808C220A900F6 -:203C2000005B2868C220A92000852820B640E220A72C29406B4808C220A900005B286808B4 -:203C4000C22018A92000852820B64028E220B008A72C29DF872C8006A72C0920872C6B4886 -:203C600008C220A900005B2868C220A92000852820B640E220A72C29206B4808C220A900F4 -:203C8000005B286808C22018A92000852820B64028E220B008A72C29EF872C8006A72C09C9 -:203CA00010872C6B4808C220A900005B2868C220A92000852820B640E220A72C29106B48E1 -:203CC00008C220A900005B2868C220A92000852820B640E220A72C290F6B4808C220A900A5 -:203CE000005B2868C220A92000852820B640E220A532290F8532A72C29F00532872C6B481A -:203D000008C220A900005B2868C220A94000852820B640E220A53229030A0A0A0A0A0A85D1 -:203D200032A72C293F0532872C6B4808C220A900005B2868C220A94000852820B640E2206B -:203D4000A532293F8532A72C29C00532872C6B4808C220A900005B2868C220A9400085281E -:203D600020B640E220A72C293F6B4808C220A900005B2868C220A96000852820B640E2200F -:203D8000A532290F0A0A0A0A8532A72C290F0532872C6B4808C220A900005B2868C220A984 -:203DA0006000852820B640E220A72C29F04A4A4A4A6B4808C220A900005B2868C220A960AE -:203DC00000852820B640E220A532290F8532A72C29F00532872C6B4808C220A900005B28B9 -:203DE00068C220A96000852820B640E220A72C290F6B4808C220A900005B2868C220A98064 -:203E000000852820B640E220A532290F0A0A0A0A8532A72C290F0532872C6B4808C220A9B4 -:203E200000005B2868C220A98000852820B640E220A72C29F04A4A4A4A6B4808C220A9006D -:203E4000005B2868C220A98000852820B640E220A532290F8532A72C29F00532872C6B4858 -:203E600008C220A900005B2868C220A98000852820B640E220A72C290F6B4808C220A900A3 -:203E8000005B2868E22018A527290F69A0852AA900852BC23018A900E6652A852CA9AF00D7 -:203EA000852EE220A532872C18A52C6910852CA53329038533A72C29FC0533872C6B480856 -:203EC000C220A900005B2868E22018A527290F69A0852AA900852BC23018A900E6652A8590 -:203EE0002CA9AF00852EE220A72C853218A52C6910852CA72C290385336B6B6B4808C220C2 -:203F0000A900005B2868E22018A527290F69B0852AA900852BC23018A900E6652A852CA94C -:203F2000AF00852EE220A53129070A0A8531A72C29E30531872C604808C220A900005B28C7 -:203F400068E22018A527290F69B0852AA900852BC23018A900E6652A852CA9AF00852EE2F4 -:203F600020A5322901F002A9208532A72C29DF0532872C604808C220A900005B2868E220C1 -:203F800018A527290F69C0852AA900852BC23018A900E6652A852CA9AF00852EE220A53217 -:203FA00029070A8532A72C29010532872C6B4808C220A900005B286808E22018A527290FD2 -:203FC00069C0852AA900852BC23018A900E6652A852CA9AF00852E28E220B008A72C29FEF0 -:203FE000872C8006A72C0901872C6B4808C220A900005B2868C220A9BDE6852CA9AF00850B -:204000002EE220B008A72C297F872C8006A72C0980872C6B4808C220A900005B2868C220E2 -:20402000A9BDE6852CA9AF00852EE220B008A72C29BF872C8006A72C0940872C6B4808C27E -:2040400020A900005B2868C220A9BDE6852CA9AF00852EE220B008A72C29DF872C8006A74D -:204060002C0920872C6B4808C220A900005B2868C220A9BDE6852CA9AF00852EE220A53244 -:20408000291F853249FF8533A72C25330532872C6B4808C220A900005B2868C220A9E00070 -:2040A000852820B640E220A53229038532A72C29FC0532872C6BE230A527290FAAA526D0D9 -:2040C00006BFFE16398004BF071739852AA900852BC23018A900E6652A6528852CA9AF006E -:2040E000852E6008C2308BA306AAE220A30848AB22870739C220A3048308A3028306AB68F7 -:2041000068286B8B0B084808E220A90048AB28684808C220A920035B286878E220850DA5EE -:204120000C297F850C282BAB6B0B084808C220A920035B2868E220A501C900D00622D6682E -:2041400039900CE2206400282B386BE2208500282B186B5A0B8B084808E220A90048AB28C3 -:20416000684808C220A920035B2868E220A00000A95A9706C8C00002D0F8A501C902F014E5 -:20418000C900F018C906F01CA980E220850028AB2B7A386B22F85D39B01280EE22DB66392C -:2041A000B00A80E622E96C39B00280DEE220640028AB2B7A386B0B8B084808E220A90048BD -:2041C000AB28684808C220A920035B2868E220A501C902F013C900F017C906F01BA980E290 -:2041E00020850028AB2B186B22985E3990F180102240673990E98008227A6D3990E1800001 -:20420000E220640028AB2B386BDA5A0B8B084808E220A93848AB28684808C220A920035BB6 -:204220002868AD20A08D32A0AD22A08D34A0A900A1851C8518A93800851E851AE220AD01F7 -:20424000A0C900D024E220A9008D45A0C220A5188506A51A8508AD32A08502AD34A085045E -:2042600022441000B01F821517E220A9018D45A0C220AD32A08510AD34A0851222EC473991 -:20428000B00382F91682FD160B084808C220A920035B2868C220A900A18518A93800851A00 -:2042A000282B6BDA5A0B8B084808E220A93848AB28684808C220A920035B2868C22018A530 -:2042C000186920008518A51A690000851A38A900A3E5188528A93800E51A852A300CF003ED -:2042E00082A216A528F003829B16E220AD45A0C901F038C220AD32A01A8D32A0C90A00D08E -:2043000007E220A900827216C220AD32A08502AD34A08504A900A185068518A9380085080F -:20432000851A22441000B039825316C220AD32A08510AD34A08512A900A1851C8518A9381D -:2043400000851E851A22FC4B39B003823016A5108D32A0A5128D34A022EC4739B003821DF2 -:2043600016822116DA5A0B8B084808E220A93848AB28684808C220A920035B28682207567E -:2043800039B006A90800822800A00000E220B718F01CC9E5F01822415639B0ED22B44339BF -:2043A000900FC220A900A18518A93800851A82D41582C615DA8B0B084808E220A93848ABAF -:2043C00028684808C220A920035B2868E220AD45A0C901F009E220A915850E823E00C22018 -:2043E000A90000A200009D00A1E8E8E00002D0F6A900A1851CA93800851EAD32A08510AD8C -:2044000034A08512221D50399012AD36A08D32A0AD38A08D34A0282BABFA386B282BABFA6C -:20442000186BDA5A0B8B084808E220A93848AB28684808C220A920035B2868E220AD45A0F4 -:20444000C901F01FC220AD32A08502AD34A08504A900A18506A93800850822241000B01F29 -:20446000821715C220AD32A08510AD34A08512A900A1851CA93800851E2229483990E18252 -:2044800003158B0B084808E220A90048AB28684808C220A920035B2868E220C210A2000089 -:2044A000A9009D2003E8E01502D0F74808E220A93848AB28684808C220A920035B2868E26C -:2044C00020C210A20000A9009D00A0E8E00120D0F7C220A981488F4AA038A939008F4CA050 -:2044E00038E220A9028501A9FF8F50A038A900A200009D20ADE8E00001D0F7A900A2000062 -:204500009D00B0E8E00010D0F7C220A920AD8520A938008522A900B08528A93800852AA2F2 -:204520000800A00E00A5289720C8C8A52A972018A5206920008520A522690000852218A58C -:20454000286900028528A52A690000852ACAD0D2282BAB6B8B0B084808E220A93848AB2873 -:20456000684808C220A920035B2868E220A5018F50A038C902F01FC906F026C900F00BA95F -:2045800004850EA9808500827C0122AC6739B00382730182670122B65D39B010A904826514 -:2045A0000122F46B39B005A904825A01C23064026404A900A38506A9380085082244100086 -:2045C000B007E220A901823D01E220ADFEA4C955D007ADFFA4C9AAF005A902822801ADC2F5 -:2045E000A4C90CF005A903821C018D01A0C220ADC6A48D04A0ADC8A48D06A0ADCBA48D08AD -:20460000A0ADCDA48D0AA0E220A5018D00A0A9008D02A0C220A900A38506A938008508AD24 -:2046200004A08502AD06A0850422441000B01CE220A90582D000E220ADFEA4C955D007AD3C -:20464000FFA4C9AAF005A90582BB00C220AD2CA38D20A0AD2EA38D22A0AD0EA38D0CA0183D -:20466000AD04A06D0CA08D14A0AD06A06900008D16A0E220A20000BF24A3389F10A038E8BF -:20468000E00400D0F2AD10A00A8D1CA0AD11A02A8D1DA0AD12A02A8D1EA0AD13A02A8D1FE8 -:2046A000A018AD1CA06D14A08D1CA0AD1DA06D15A08D1DA0AD1EA06D16A08D1EA0AD1FA054 -:2046C0006D17A08D1FA0E220AD0DA38D03A018AD14A06D10A08D18A0AD15A06D11A08D19DA -:2046E000A0AD16A06D12A08D1AA0AD17A06D13A08D1BA0A9008D0EA0A9028D0FA0E2206454 -:204700000E282BAB386BE220850E282BAB186B8B0BDA084808E220A90048AB28684808C2CC -:2047200020A920035B2868C210E220A501C900F024C230A9000085028504A900A38506A920 -:204740003800850822441000B003824700E220AF00A3388004AF3EA338C980F006C982F050 -:20476000028031A20000BF03A338DF994739D024E8E00800D0F0C230A90002A200A5A00047 -:20478000AB443838E220A501C900F0045C00A9385C3EA938282BABFA6B43323536444F5374 -:2047A000208B0B084808E220A93848AB28684808C220A920035B2868C22038A510E90200E2 -:2047C0008528A512E90000852AE210AE03A0E001F00706282628CA80F518A5286D1CA08574 -:2047E00002A52A6D1EA08504282BAB6B8B0B084808E220A90048AB28684808C220A92003B1 -:204800005B2868C220A51C8506A51E850822A14739224410009009E220640E282BAB386BC8 -:20482000E220850E282BAB186B8B0B084808E220A90048AB28684808C220A920035B28685D -:20484000C220A51C8506A51E850822A14739222410009009E220640E282BAB386BE220850C -:204860000E282BAB186B404600664839000000000000405300724839000269483900404842 -:20488000007E48390006754839008B0B084808E220A93848AB28684808C220A920035B2848 -:2048A00068C230AF4AA0388528AF4CA038852AA900048548A90000854AA00000B728854464 -:2048C000C8C8B7288546E220A00000B744F024D748D003C880F5C220A00500B72848C8C880 -:2048E000B728852A688528A528D0CEA52AD0CA282BAB6B22044939E220A00400B7288F21FB -:20490000030080EBDA5A8B0B084808E220A93848AB28684808C220A920035B2868C2308442 -:204920004B9818690004AAA90004A838A90001E54B540000282BAB7AFA6B8B0B084808E2FD -:2049400020A93848AB28684808C220A920035B2868C210E220A20000B5E0F01BC920B00536 -:20496000A907826400C9619008C97BB004295F95E0E8E00001D0E1228A4839A5E0C93AD0EB -:2049800007A0010022044939A00000A920993AA0C8C00B00D0F7A20000A00000B5E0F020AA -:2049A000C92EF00A993AA0E8C8C00800D0EEE8A00800B5E0F00A993AA0E8C8C00B00D0F28E -:2049C000E220640E282BAB386BE220850E282BAB186B8B0B084808E220A90048AB28684848 -:2049E00008C220A920035B2868C230223A4939B005282BAB186B22544539B003825600C2CF -:204A00002022094239B007E220A90882470022884239E220A00000B718D005A909823500C9 -:204A2000C9E5F026A00B00B7188908D01D290FC90FF017A20000A00000B718DF3AA038D0D1 -:204A400009C8E8E00B00F01680EF22A34239900582BFFFA908E220850E282BAB186BC2207F -:204A6000A01A00B7188510A01400B7188512E220640E282BAB386B8B0B084808E220A90050 -:204A800048AB28684808C220A920035B2868C230A51E48A51C4822D2493968851C68851E1A -:204AA000900F22EC47399009E220640E282BAB386B282BAB186B8B0B084808E220A90048B9 -:204AC000AB28684808C220A920035B2868C230A5100A8528A5122A852A18A51065288528BD -:204AE000A512652A852A462A6628A52829FF03AA462A6628462A6628462A6628462A662829 -:204B0000462A6628462A6628462A6628462A6628462A662818AF14A03865288524AF16A051 -:204B200038652A8526282BAB6B8B0B084808E220A90048AB28684808C220A920035B286895 -:204B4000C230A20000A95A5A8F00A538E8E8E00004D0F522B64A39A5248502A5268504A9D7 -:204B600000A58506A938008508224410009017E602A900A78506A938008508224410009043 -:204B800005282BAB386BE220A906850E282BAB186B8B0B4808E220A90048AB28684808C284 -:204BA00020A920035B2868C230A5108524A5128526A2070046266624CAD0F918A5246F14D6 -:204BC000A0388524A5266F16A0388526A5248502A5268504A900A58506A938008508224430 -:204BE0001000B006E220A906800EC220A5100A0A29FF01AA2BAB386B2BAB186B08E220AFA7 -:204C000001A038C900D008221D4C39900D800622854C399005640E28386B28186B8B0B08EC -:204C20004808E220A90048AB28684808C220A920035B2868C23022294B39B003824100A531 -:204C400010890100D00DC220BF00A53829FF0F8528800CC220BF00A5384A4A4A4A8528C2DA -:204C600020A52829F00FC9F00FF00FA52885106412E220640E282BAB386BE220A90A850E23 -:204C8000282BAB186B8B0B084808E220A90048AB28684808C220A920035B2868C2302291E9 -:204CA0004B399053E220BF00A5388528BF01A5388529BF02A538852ABF03A538852BA5288E -:204CC000C9FFD018A529C9FFD012A52AC9FFD00CA52BC90FD006E220A90A801BE220A5289C -:204CE0008510A5298511A52A8512A52B8513E220640E282BAB386BE220850E282BAB186BC2 -:204D000008C23022FC4B39900922EC4739900328386B28186B084808C220A920035B2868D6 -:204D2000E220AF01A038C900D00822A64D39900D8006227E4E399005640E28386B28186B33 -:204D40008B0B084808E220A90048AB28684808C220A920035B2868C230A900A58506A938A2 -:204D6000008508A5248502A526850422441000B007E220A906821C00C220E602D002E60400 -:204D8000A900A78506A93800850822441000B00DE220A906E2208500282BAB186BE2206478 -:204DA00000282BAB386BDA8B0B084808E220A90048AB28684808C220A920035B2868C23081 -:204DC000A902008510A90000851222B64A3922404D39B007E220A906829900C230A510895D -:204DE0000100D009BF00A53829FF0F8008BF00A5384A4A4A4A8528C90000F0038239008A0C -:204E0000852AA510890100D00DBF00A53809FF0F9F00A538800BBF00A53809F0FF9F00A535 -:204E20003822484F39B007E220A914824600E220640E282BABFA386BE610D002E61222B663 -:204E40004A39E00000F0038293FFA524CF18A038D00FA526CF1AA038D007E220A9128213CC -:204E60000022404D399006A200008270FFE220A906820000E220850E282BABFA186B8B0B48 -:204E8000084808E220A90048AB28684808C220A920035B2868C230A900A38506A938008574 -:204EA00008AF14A0388502AF16A038850422441000B007E220A906826B00C220A9020085C5 -:204EC00010A900008512A20800BF00A338D006BF02A338F036E610D002E612E8E8E8E8E066 -:204EE000000290E5E602D018E604A504CF1AA038900EA502CF18A0389006E220A91280251B -:204F000022441000901BA2000080BEC220A9FFFF9F00A338A9FF0F9F02A33822241000B054 -:204F20000DE220A906E220850E282BAB186BE220640E282BAB386BE220AF01A038C900D065 -:204F4000045C8F4F394CDD4F8B0B4808E220A90048AB28684808C220A920035B2868C23073 -:204F6000A900A58506A938008508A5248502A5268504222410009014A900A78506A9380090 -:204F80008508E602D002E604222410002BAB6B8B0B084808E220A93848AB28684808C220C3 -:204FA000A920035B2868C23022294B398A890100D008BD00A52900F08006BD00A5290F00F2 -:204FC0009D00A522484F39B00BE220A906850E282BAB186BE220640E282BAB386B8B0B086A -:204FE000C2304808E220A93848AB28684808C220A920035B286822914B39A900009D00A5FE -:205000009D02A522241000B00BE220A906850E282BAB186BE220640E282BAB386B8B0B08C3 -:205020004808E220A93848AB28684808C220A920035B2868C230A51248A5104822154D3926 -:20504000B009688510688512827D00A5108D36A0A5128D38A02229483990E768851068853B -:205060001222FC4B39B0FAE220AF01A038C900D03DC22022B64A39A510890100D011AD3632 -:20508000A029FF0F8D36A0BD00A52900F08010AD36A00A0A0A0A8D36A0BD00A5290F000D16 -:2050A00036A09D00A522484F39B022821A00C220AD36A09D00A5AD38A09D02A522241000B2 -:2050C000B00BE220A906850E282BAB186BE220640E282BAB386B8B0B084808E220A900485A -:2050E000AB28684808C220A920035B2868C2308528290F00852AA5284A4A4A4A8528290F2C -:20510000008F000100A90A008F020100AF04010018652A852AA5284A4A4A4A8528290F00D6 -:205120008F000100A964008F020100AF04010018652A852AA5284A4A4A4A290F008F000179 -:2051400000A9E8038F020100AF04010018652A282BAB6B8B0B084808E220A93848AB286811 -:205160004808C220A920035B2868C210E220AF0E08AF09088F0E08AFAF0F08AF8529AF0ABD -:2051800008AF8528C220A52822D65039852838E9BC07C2200A0A0A0A0A0A0A0A0A2900FE87 -:2051A000A016009720E220AF0908AFC22029FF0022D6503929FF000A0A0A0A0A29E001A082 -:2051C000160017209720E220AF0608AFC22029FF0022D65039291F00A0160017209720E204 -:2051E00020AF0408AF291FC22029FF0022D65039C2200A0A0A0A0A0A0A0A0A0A0A2900F8E1 -:20520000A018009720E220AF0208AFC22029FF0022D65039C2200A0A0A0A0A29E007A0184E -:205220000017209720E220AF0008AFC22029FF0022D65039C220291F00A0180017209720BD -:20524000AF0E08AF29F7008F0E08AF282BAB6B8B0B084808E220A93848AB28684808C22077 -:20526000A920035B2868C230A00200B7208528C8C8B720852AE220A00000A20000B7289591 -:20528000E0F004E8C880F6223A493922D249399007E220A90B82D200E220A00100A501973F -:2052A0002022154D39B00382C400C220A00A00A5109720C8C8A5129720A00E00B720851CFC -:2052C000C8C8B720851E22294839B000C22022644339B01AC220A00A00B7208510C8C8B75B -:2052E00020851222DD4F39E220A908827C00E220A00000A9009718C8C02000D0F8A00000B5 -:20530000B93AA09718C8C00B00D0F5C220A00A00B720A01A009718A00C00B720A014009759 -:2053200018A01200B720A01C009718A01400B720A01E009718A90000A016009720A018009B -:205340009720A01600B720A010009718A018009718A01800B720A00E009718A016009718F2 -:20536000C22022224439B00B8004E220850E282BAB186BE220640E282BAB386BDA5A8B0B56 -:20538000084808E220A93848AB28684808C220A920035B2868C230A90000A2000095E0E8CC -:2053A000E8E00001D0F7A520D004A522F027A00200B7208528C8C8B720852AA528D004A564 -:2053C0002AF012E220A20000A00000B72895E0F004E8C8D0F6282BAB7AFA6B8B0B084808D4 -:2053E000E220A93848AB28684808C220A920035B2868C230A91A548F640300A939008F6688 -:205400000300A927548F680300A939008F6A030022BB5A39B000282BAB6B40733A68656CDE -:205420006C6F2E6261730040733A68656C6C6F322E62617300DA5A0B8B084808E220A93891 -:2054400048AB28684808C220A920035B2868E220A00000B7208938F005A90F821C05227CB8 -:20546000533922D24939B003821305E220A00100A5019720C220A00E00B720851CC8C8B78E -:2054800020851E22EC4739B00382F204A00A00A5109720C8C8A5129720A00600A51097206A -:2054A000C8C8A5129720A01C00B718A012009720A01E00B718A014009720E220A00000A9B7 -:2054C000391720972082BD04DA5A0B8B084808E220A93848AB28684808C220A920035B2859 -:2054E00068224F52399018C230A00600A900009720C8C89720E220A00000A93A828604824E -:205500007804DA5A0B8B084808E220A93848AB28684808C220A920035B2868E220A00000FC -:20552000B7208902F009229B5539B003824F0422715A39824F04DA5A0B8B084808E220A975 -:205540003848AB28684808C220A920035B2868C210E220E220A00100B720850122544539DF -:20556000C220A00600B7208510C8C8B720851222FC4B399013A00E00B720851CC8C8B72067 -:20558000851E22EC4739B00382F303A00600A5109720C8C8A512972082EA03DA5A0B8B085E -:2055A0004808E220A93848AB28684808C220A920035B2868C210E220A00100B72085012258 -:2055C000544539C220A00E00B720851CC8C8B720851EA00600B7208510C8C8B7208512D007 -:2055E0001AA510D016A00A00B7208510C8C8B7208512221D5039B00C82830322294839B0DA -:2056000003827A03827E03DA5A0B8B084808E220A93848AB28684808C220A920035B286814 -:20562000C230227C5339223A493922544539B003824B03C23022094239B003824003824423 -:20564000035CA34239DA5A0B8B084808E220A93848AB28684808C220A920035B2868C2306A -:2056600022D24939B003821503A01A00B7188510A01400B7188512A5108D2AA0A5128D2CB3 -:20568000A022FC4B39902FA5108D2EA0A5128D30A0AD2AA08510AD2CA0851222DD4F39B092 -:2056A0000382DA02AD2EA085108D2AA0AD30A085128D2CA080CBAD2AA08510AD2CA085124E -:2056C00022374F39B00382B502E220A00000A9E5971822224439B00382A30282A702DA5A24 -:2056E0000B8B084808E220A93848AB28684808C220A920035B2868C23022D24939B00382D0 -:2057000078028280025C224439DA5A0B8B084808E220A93848AB28684808C220A920035B2F -:205720002868C23022355439B003825102C220A01200B720852CC8C8B720852EA00E00B7E0 -:20574000208530C8C8B7208532A536C94000B0045C2F5839A00800A20000E220BFA0573967 -:20576000F037D93AA0D028BFA15739D93BA0D01FBFA25739D93CA0D016C220BFA3573985DF -:2057800028E220BFA55739852AA20000DC4803C2308A18690600AA80C1E220A91182DA016C -:2057A000504758A7573900C210E220A00000B730C950D015C8B730C947D00EC8B730C958FD -:2057C000D007C8B730C901F017A910227A5939C22038A52CE90800852CA52EE90000852E8F -:2057E000C220C8B7308534853CC8C8B7308536853EC8C8E220B7308734C220E634D002E6C1 -:205800003638A52CE90100852CA52EE90000852EA52CD004A52EF014C8CC0EA0D0D52200BA -:205820004D39B003825701A0000080C7825601C230A00000E220B7309734C22038A52CE97B -:205840000100852CA52EE90000852ED004A52CF01BC8CC0EA0D0DD18A5346D0EA08534A51E -:2058600036690000853622365539B0C58216015A8B0B084808E220A93848AB28684808C21A -:2058800020A920035B2868C230A00E00B7208528C8C8B720852AA00000A900009728C8C85F -:2058A000C00002D0F7282BAB7A6B5A8B0B084808E220A93848AB28684808C220A920035B75 -:2058C0002868C230A00E00B7208528C8C8B720852AA00000E220A7309728C220E630D002FC -:2058E000E632C8C00002F00CA530C538D0E6A532C53AD0E0282BAB7A6BDA5A0B8B084808F7 -:20590000E220A93848AB28684808C220A920035B2868C230A0120038A538E5309720C8C823 -:20592000A53AE5329720A0120018B72069010097209009C8C8B7206900009720226F5839B6 -:2059400022AA583922C85439B003823100A530C538D006A532C53AF01D226F583922AA583C -:2059600039A00600A900009720C8C89720229B5539B0DA8208005C855939E220850E2818FA -:20598000AB2B7AFA6BE2206400640E2838AB2B7AFA6BDA5A0B8B084808E220A90048AB287D -:2059A000684808C220A920035B2868E220C210A900A200009F00AD38E8E02000D0F6C22063 -:2059C000A900AB8F0EAD38A938008F10AD38A5408F02AD38A5428F04AD38A90000853C85E3 -:2059E0003EA900AD8520A938008522A9FFFF8F5403008F56030022181100B014827FFFC2A0 -:205A000020A53CD00BA53ED007E220A911826AFFE220A95C853B225B03008268FFDA5A0BDA -:205A20008B084808E220A93848AB28684808C220A920035B2868C210A20000E220BD20AD34 -:205A40008910F014C2208A18692000AAE0000190EAE220A9168222FF09109D20ADC2208A44 -:205A6000186920AD8520A9380069000085228214FFDA5A0B8B084808E220A93848AB286825 -:205A80004808C220A920035B2868E220C210A900872082F0FEDA5A0B8B084808C220A920BC -:205AA000035B2868C230A00E00B730AAB734A8A9000254383828AB2B7AFA6BDA5A0B8B0816 -:205AC0004808E220A90048AB28684808C220A920035B2868221D5A39B00382A1FEC230A027 -:205AE0000200A5449720C8C8A5469720C230A5208530A5228532221D5A39B00FA5308520DD -:205B0000A532852222715A398273FEC230A5208534A5228536A00200A5489734C8C8A54A23 -:205B20009734A5308520A532852222F01000B00FA5348520A536852222715A3982BDFFA0BD -:205B40001200B7309734C8C8B730973422955A39A5348520A536852222F41000B00FA5303B -:205B60008520A532852222F8100082C3FFA5308520A532852222001100B019E220A50EC922 -:205B80000AF032C220A5348520A536852222F8100082CAFF22955A39A00600A9000097341E -:205BA000C8C89734A5348520A536852222FC100090D182B8FFC220A5348520A536852222BE -:205BC000F81000A5308520A532852222F8100082B3FD08C220C90200F007C220A9F81380A7 -:205BE00005C220A9F8128F000700E220A9AF8F020700286B080B4808C220A900075B286810 -:205C0000C23048E220A00300B70009809700C22068A000009700E220A00300B70049809791 -:205C2000002B286B080B4808C220A900075B2868E220C210297FA0030097002B286B080B3F -:205C4000C2304808C220A900075B2868A9010022F45B39E220A90322245C39A9E1A002007C -:205C600097002B286B080BC2304808C220A900075B2868E220A00500B7002901D0042B284E -:205C8000186B2B28386B080BC2304808C220A900075B2868E220A00500B7002901F0FAA0A7 -:205CA0000000B7002B286B080BC2304808C220A900075B2868E22048A00500B7002920F0BE -:205CC000FA68A0000097002B286B08E220BD0000F00722A75C39E880F4286BE220AF04E8C5 -:205CE000AF29FB8F04E8AF6BE220AF04E8AF29FB09048F04E8AF6BE220AF04E8AF29FE09AE -:205D0000018F04E8AF6BE220AF04E8AF29FD09028F04E8AF6BE220AF04E8AF29FE8F04E8ED -:205D2000AF6BE220AF04E8AF29FD8F04E8AF6BE220AF04E8AF2903C900F014AF04E8AF09AA -:205D4000808F04E8AFAF04E8AF2940C940D0F66B8B0B084808E220A90048AB28684808C27E -:205D600020A920035B2868E220A9F08D1E0022A8100022A0100022B65D39B003821500A9F9 -:205D800002850122544539B00382080022075639B0028000226C1000282BAB6B08E220AFA0 -:205DA00004EAAF2901C901F0F6286B08E220A9018F01EAAF286B0B8B084808E220A9004888 -:205DC000AB28684808C220A920035B2868E220A9018F02EAAFA9018F03EAAF229C5D39AFF1 -:205DE00005EAAFD007640028AB2B386B8D0603A98B850028AB2B186B0B8B084808E220A9C0 -:205E00000048AB28684808C220A920035B2868E220AF80E8AF09028F80E8AFA9008F07EA74 -:205E2000AFA5020A8F08EAAFA5032A8F09EAAFA5042A8F0AEAAFA9028F02EAAFA9018F03B9 -:205E4000EAAF229C5D39AF05EAAFD036E220AF13EAAF850AAF12EAAF850BC210A00000AF0B -:205E600010EAAF9706C8C00002D0F4AF05EAAFD0116400AF80E8AF29FD8F80E8AF28AB2B6C -:205E8000386B8D0603A9828500AF80E8AF29FD8F80E8AF28AB2B186B0B8B084808E220A96D -:205EA0000048AB28684808C220A920035B2868E220AF80E8AF09028F80E8AFC210A000008B -:205EC000B7068F20EAAFC8C00002D0F4A9008F07EAAFA5020A8F08EAAFA5032A8F09EAAFB3 -:205EE000A5042A8F0AEAAFA9038F02EAAFA9018F03EAAF229C5D39AF05EAAFD0116400AF5D -:205F000080E8AF29FD8F80E8AF28AB2B386B8D0603A9828500AF80E8AF29FD8F80E8AF28FD -:205F2000AB2B186B8B0B084808E220A90048AB28684808C220A900035B2868E220A9F08DFB -:205F40001E0022420B3922660939C230221A6239B003822000221969399003820300821408 -:205F60000022AC6739900382030082080022815F39B0028000226C100022CA6239282BAB81 -:205F80006BE220A900A200009F0000031AE8E00002D0F5C220A900008F260300A903008F80 -:205FA000280300A964008F220300A900008F240300224067396B40463A53414D504C452E79 -:205FC0005047582048656C6C6F2C20776F726C6421000B084808C220A900035B2868E2204B -:205FE000A91E22034139A52C3012AFF413AF8980F0F4A90022034139282B3860282B1860D8 -:206000000B084808C220A900035B2868E220A91E22034139A52C3012AFF413AF8901D0F476 -:20602000A90022034139282B3860282B18600B084808C220A900035B2868E220A91E220398 -:206040004139A52C3012AFF413AF8910D0F4A90022034139282B3860282B18600B08480890 -:20606000C220A900035B2868E220A91E22034139A52C3014AFF413AF2940C940D0F2A900E8 -:2060800022034139282B3860282B18600B084808C220A900035B2868E220A91E2203413967 -:2060A000A52C3014AFF413AF29C0C980D0F2A90022034139282B3860282B1860DA08C210C0 -:2060C000A2803EEACAE00000D0F928FA6BDA8B0B084808E220A90048AB28684808C220A9A5 -:2060E00000035B286822BC6039E230A200A9009D1005E8E010D0F8AFF413AF29C0C980F005 -:2061000004221A6239E210A20020D25FB003825E00BD00058FF513AF22BC6039E8EC3005A4 -:20612000D0E7AD3305D003828000103CA50B3003823C00AFF413AF8980F0F18920D00382B4 -:206140006800C210A00000A50B3003822100AFF413AF8920F0548980F0EDB7268FF513AF84 -:20616000C8C00002D0E18042205C60A50B3007E220A98C829C00AFF413AF29C0C9C0D0EB78 -:20618000AFF413AF8920D003828300C210A00000A50B10DBAFF413AF29C0C9C0D0F2AFF5CF -:2061A00013AF9726C8C00002D0E6AD3205F034E210A200A91E22034139205C6090B1AFF55D -:2061C00013AF205C6090A8AFF513AF9D100520D25F909CAFF413AF2950C950D006E8EC3281 -:2061E00005D0E4C210A20A0022191639AFF413AF8910F012205C60B0038273FFAFF513AFF5 -:206200009D1005E880DD6420282BABFA386BE220A9858520282BABFA186B08C210E220A993 -:20622000008FF213AFA2E803A0000022261639A9048FF213AFEAEAEAEAA9008FF413AFA928 -:20624000008FF713AFA28FC5A0200022261639222A63399025222A6339901F222A633990FD -:2062600019222A6339901322EC6339900D2293633990072296623928386B28186B08C22098 -:2062800078A984038F4EA038E220AF4C010029FE8F4C0100286B08227D6239E220AFF21315 -:2062A000AF8910D01FA9148FF213AF20D25F9017A21E8BA0410022261639AF0B03000980A6 -:2062C0008F0B030028386B28186B08E220A9048FF213AFC22078A900008F4EA038E220AF48 -:2062E0004C010009018F4C0100AF0B0300297F8F0B0300286B0B084808C220A900035B2862 -:2063000068227D6239E220A9078D0005A5008D0105A9028D30059C33059C320522CD6039C3 -:206320009004282B386B282B186B8B0B084808E220A90048AB28684808C220A900035B2880 -:2063400068C230A20A0022191639E2206406A9FF850A202E60903020D25F902BA9088FF55B -:2063600013AF205C60902020D25F901BAFF513AF850620D25F9010AFF513AF850AE2209C5E -:206380002003282BAB386BE220A98C8D2003282BAB186B8B0B084808E220A90048AB2868B5 -:2063A0004808C220A900035B2868C230A20A0022191639E220202E60902620D25F9021A9DB -:2063C000038FF513AF20D25F9016A9CF8FF513AF20D25F900BA9018FF513AF282BAB386B42 -:2063E000E220A98C8D2003282BAB186B8B0B084808E220A90048AB28684808C220A900033B -:206400005B2868C230A20A0022191639E220202E60903620D25F9031A9138FF513AF20D2ED -:206420005F9026A9008FF513AF20D25F901BA9448FF513AF20D25F9010A9008FF513AF2029 -:206440002E609005282BAB386BE220A98C8D2003282BAB186B8B0B084808E220A90048AB84 -:2064600028684808C220A900035B2868E220A90A8D0005A9018D30059C3305A9078D3205C8 -:2064800022CD60399027AD10058506AD11058507AD12058508AD13058502AD14058501AD8B -:2064A0001505850AAD16058504282BAB6B282BAB186B0B08E220A90E8D0005A9018D30052E -:2064C0009C3305A90A8D320522CD60399003282B6B282B186B8B0B084808E220A90048AB36 -:2064E00028684808C220A900035B2868227D6239E220A90F8D0005A50129010A0A05008D47 -:206500000105A5028D0205A9038D30059C33059C320522CD60399005282BAB386B282BAB69 -:20652000186B8B0B084808E220A90048AB28684808C220A900035B2868227D6239E220A90E -:206540000609408D0005A50129010A0A05008D0105A5028D0205A5018D0305A5038D04052A -:20656000A9028D0505A9128D0605A91B8D0705A9FF8D0805A9098D3005A9018D3305A90754 -:206580008D320522CD603908AD10058506AD11058507AD12058508AD13058502AD14058523 -:2065A00001AD1505850AAD16058504289004282BAB6B282BAB186B8B0B084808E220A900F4 -:2065C00048AB28684808C220A900035B2868E220227D6239A90509408D0005A50129010AD0 -:2065E0000A05008D0105A5028D0205A5018D0305A5038D0405A9028D0505A9128D0605A907 -:206600001B8D0705A9FF8D0805A9098D3005A9FF8D3305A9078D320522CD603908AD1005DD -:206620008506AD11058507AD12058508AD13058502AD14058501AD1505850AAD16058504F0 -:20664000289004282BAB6B282BAB186BDA5A0B084808C220A90C035B2868C2306408640AAC -:20666000A22000060026022608260AA50838E504A8A50AE5069006850A8408E600CAD0E3A8 -:20668000282B7AFA608B0B084808E220A90048AB28684808C220A900035B2868C230A52235 -:2066A000850CA524850EA9240085106412204C66E220A50C8502C220A514850CA516850E8F -:2066C000A9120085106412204C66E220A50C29018501A5141A8503282BAB6B8B0B0848080D -:2066E000E220A90048AB28684808C220A900035B2868E220A9038D3405C23022856639E215 -:2067000020A503F029C220222265399014E220A50629D0D019E220A9008D2003282BAB3810 -:206720006BE220CE34053013221A623980D7E220A9828004E220A9848D2003282BAB186B63 -:206740008B0B084808E220A90048AB28684808C220A900035B2868E220A9038D3405C230EE -:206760002285663922B76539B003822800E220A50629D0D00CE220A9008D2003282BAB38EC -:206780006BE220A5078902F004A98680178910D0E48980D0E0E220CE3405D0C8A983800444 -:2067A000E220A9848D2003282BAB186B8B0B084808E220A90048AB28684808C220A900037F -:2067C0005B2868221A6239E220C210A900A200009F00A338E8E00002D0F6A90085002296E8 -:2067E0006239C230A9000085228524A900A38526A93800852822DB6639B00382D300E220E8 -:20680000A9008F01A038A9008F02A038E220AF0DA3388F03A038C220A900008F04A0388FCD -:2068200006A038AF16A3388F10A038A900008F12A038A901008F14A038186F10A0388F1806 -:20684000A038A900008F16A0388F1AA03818AF18A0386F10A0388F20A038A900008F22A02A -:2068600038AF11A3388F24A0384A4A4A4A186F20A0388F1CA038A900008F1EA038AF13A3FD -:20688000388F08A038A900008F0AA038AF0EA3388F0CA038A900028F0EA038E220AF26A392 -:2068A00038C9298014C220AF27A3388F26A038AF29A3388F28A038800DC220A900008F26EB -:2068C000A0388F28A038E220A9008520282BAB386B282BAB186B8B0B084808E220A90048FE -:2068E000AB28684808C220A900035B2868E230E001F00FE002F011E003F0136420282BAB57 -:20690000386B2296623980F322CA623980ED22F56239B0E7282BAB186B0B084808C220A962 -:2069200000035B286822966239E220AFF713AF8980F042A9008500A9008501A95085022272 -:20694000D564399034C210A21E8BA0410022261639222A6339A50629D0D01E22F5623990B0 -:2069600018A21E8BA0410022261639222A6339A50629D0D004282B386B282B186B8B0B0872 -:206980004808E220A90048AB28684808C220A920035B286822AC6739C230A90000A20000E5 -:2069A0009F00A338E8E8E00002D0F5E220A20000BF656A399F00A338E8E0C900D0F2A0000E -:2069C00000A24000B73C9F00A338F007E8C8C08000D0F1C220A955AA8FFEA438C220A90042 -:2069E000A38506A938008508A9000085028504E220A900850122241000B00922CA62392853 -:206A00002BAB186B22CA6239E220A9008500282BAB386B08E220AF4EA038D006AF4FA0383A -:206A2000F028AF4EA0383A8F4EA038C9FFD00BAF4FA0383A8F4FA0388010AF4EA038D00AD2 -:206A4000AF4FA038D00422CA6239E220AF2D0300F0113A8F2D0300D00AAF2C030009808F5A -:206A60002C0300286BEB009043323536444F5320000201010002E000400BF00900120002B5 -:206A800000000000000000000000002978563412554E5449544C45442020204641543132B2 -:056AA0002020208040D1 -:206AE500C220A940A38F600300A938008F62030022925939B00CE2204BAB620800FA221CC0 -:206B05001000EA80FD436F756C64206E6F742066696E64206120626F6F7461626C65206265 -:206B2500696E6172792E0D0008C220A900A38F260300A938008F280300225B6C39B0038212 -:206B4500AB00C210E220A02800A23600BF01A33822181000BF00A33822181000E8E8888868 -:206B6500D0EAC210E220A01400A21400BF01A33822181000BF00A33822181000E8E888886F -:206B8500D0EA226C1000C230A901008F220300A900008F240300A900A38F260300A9380004 -:206BA5008F280300A20000A9A55A9F00A338E8E8E00002D0F5227A6D39B006226C100080C5 -:206BC5002CA901008F220300A900008F240300A900A58F260300A938008F28030022E96CAF -:206BE50039B006226C10008004226C1000286BE22020176CA9008F35E8AF8F34E8AF8F328A -:206C0500E8AFA9018F33E8AFA9A08F36E8AF20356C6B08E220AF37E8AF2980C980F0F6287D -:206C25006008E220AF37E8AF2940C940D0F6286008E220AF37E8AF29C0C940D0F6283860A9 -:206C45008F07030028186008E220AF37E8AF2908C908D0F628605A8B0B084808E220A9002C -:206C650048AB28684808C220A920035B2868E22020356CA505290709A08F36E8AF20356C40 -:206C8500E220A9008F32E8AF8F33E8AF8F34E8AF8F35E8AFA9EC8F37E8AFF02920176C2010 -:206CA500356C902DC230A00000AF38E8AF9706C8C8C00002D0F3E220A90085008D060328C1 -:206CC5002BAB7A386BE220A987800AE220A98A8004E220A9828500AF31E8AF8D0603282B35 -:206CE500AB7A186B5A8B0B084808E220A90048AB28684808C220A920035B2868E220203531 -:206D05006CA505290709E08F36E8AF20356CE220A9018F32E8AFA5028F33E8AFA5038F34B3 -:206D2500E8AFA5048F35E8AFA9218F37E8AFEAEAEAEA20356C902BE220AF30E8AFA0000050 -:206D4500C220AF38E8AF9706C8C8C00002D0F3EAEAEAEAE220A90085008D0603282BAB7A36 -:206D6500386BE220AF31E8AF8D0603A9828500282BAB7A186B5A8B0B084808E220A9004876 -:206D8500AB28684808C220A920035B2868E22020356CA505290709E08F36E8AF20356CE245 -:206DA50020A9018F32E8AFA5028F33E8AFA5038F34E8AFA5048F35E8AFA9308F37E8AFEA86 -:206DC500EAEAEA20356C9033C230A00000B7068F38E8AFC8C8C00002D0F3EAEAEAEA2035AD -:206DE5006C9018AF37E8AF892100D00FE220A90085008D0603282BAB7A386BE220AF31E8C9 -:206E0500AF8D0603A9828500282BAB7A186B202020200B0C0B0C0B0C0B0C0B0C2046464698 -:206E250046464646204D4D4D4D4D4D4D4D20585820202020585858200D2020200B0C0B0C9A -:206E45000B0C0B0C0B0C2046462020202020204D4D204D4D204D4D20202058582058585836 -:206E65002020200D20200B0C0B0C0B0C0B0C0B0C2046464646462020204D4D204D4D204D4E -:206E85004D202020205858582020202020200D200B0C0B0C0B0C0B0C0B0C204646202020AC -:206EA5002020204D4D204D4D204D4D20205858582020585820202020200D0B0C0B0C0B0C35 -:206EC5000B0C0B0C2046462020202020204D4D204D4D204D4D20585858202020202058588D -:206EE500202020200D0D4332353620464F454E495820464D58202D2D20332C3637302C302D -:206F0500313620427974657320467265650D7777772E63323536666F656E69782E636F6DA6 -:206F2500202D204B65726E656C2076657273696F6E3A2076302E312E302D616C7068612B3D -:206F4500313031312028323032302D31322D3331290D001D1D1D1D1D1D8D8D4D4D2D2D5DED -:206F65005DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD1D1D1DAC -:206F85001D1D8D8D4D4D2D2D5D5DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD2C -:206FA500FDFDFDFDFDFDFD1D1D1D1D8D8D4D4D2D2D5D5DFDFDFDFDFDFDFDFDFDFDFDFDFDCC -:206FC500FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD1D1D1D8D8D4D4D2D2D5D5DFDFDFDFDCC -:206FE500FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD1D1D8D8D4D3C -:207005004D2D2D5D5DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD5B -:20702500FDFDFDFDFD000000FF000080FF008000FF800000FF008080FF808000FF800080E0 -:20704500FF808080FF0045FFFF13458BFF000020FF002000FF200000FF202020FF4040400C -:20706500FFFFFFFFFF000000FF000080FF008000FF800000FF002020FF202000FF200020D6 -:20708500FF202020FF1E69D2FF13458BFF000020FF002000FF400000FF101010FF404040E7 -:2070A500FFFFFFFFFF436D6420307841412054657374207061737365642E2E2E0D00436DCB -:2070C5006420307841422054657374207061737365642E2E2E0D00436D64203078363020A3 -:2070E50045786563757465642E0D00436D642030784646202852657365742920446F6E6597 -:207105002E0D00436D642030784545204563686F2054657374207061737365642E2E2E0D33 -:20712500004B6579626F6172642050726573656E740D004E6F204B6579626F61726420419C -:2071450074746163686564206F72204661696C656420496E69742E2E2E0D004E4F20534943 -:20716500474E415455524520464F554E442E00424D50204C4F414445442E004558454355DA -:2071850054494E4720424D502050415253455200494445204844442050726573656E743ACF -:2071A50000426F6F7420444950207377697463682073657474696E67732061726520696EA7 -:2071C50076616C69642E005072657373205220746F2072657472792C204220746F20676F0D -:2071E50020746F2042415349432E0D00556E61626C6520746F2072656164207468652053E0 -:207205004420636172642E00556E61626C6520746F20726561642066726F6D2074686520D2 -:207225004944452064726976652E00556E61626C6520746F20726561642066726F6D207491 -:20724500686520666C6F7070792064726976652E00426F6F74696E672066726F6D20666CA2 -:207265006F7070792E2E2E000D52454144592E0041424F5254204552524F5200303132331F -:0D7285003435363738394142434445460020 +:2006E0004A0200A9FFFE1B5C04003A4808E220A93948AB2868E220A2CD7222870739221896 +:20070000073980FADBDB08E2208F040700286B08E2208F030700286B2221073922A7073970 +:200720006BDA5A8B0B08E220AF040700F01BC901F00DC902F009A90028382BAB7AFA6B224A +:20074000325C3922E65C398004227E1A3828182BAB7AFA6BDA5A8B0B08E220AF040700F04C +:200760001BC901F00DC902F009A90028382BAB7AFA6B22325C3922E65C39800422C11A38D6 +:2007800028182BAB7AFA6B22900739225609396B4808E220C210BD0000F00822A70739E883 +:2007A0004C9607E828686BDA5A0B8B084808C220A900005B28684808E220A90048AB286857 +:2007C000E220C21048AF030700F016C901F007C902F00368805722325C396822075D3980F0 +:2007E0004C68C90AF069C9209019C97FF045B0028031C9A09002802BC991F053C99DF061AD +:200800004C2D08C909F069C908F034C90DF03AC911F042C91DF044C90FF01EC901F048C960 +:2008200005F0748717A51E871F22B6093928AB2B7AFA6B22C4083980F42203093980EE22BF +:20084000E9093922C4083980E42256093980DE22350A3980D8220F0A3980D222B609398078 +:20086000CC22E9093980C6C220A20000A41C8021C220A51A29F8FF18690800AAA41CE2207E +:20088000E40F9004A20000C8C413900522A60A3988225A0A398096A60FCAA41C225A0A3995 +:2008A000E220A717C920D00B22E90939A61AD0F2827AFFA61AE8E40FD0038270FF22B609AA +:2008C000398269FF48DA5A0B084808C220A900005B2868C230A517A8AAE818A50FE51AE20B +:2008E0002085008BE220A9AF48ABA500C900F00CBD0000990000C600E8C880EEAB282B7A5F +:20090000FA686B48DA5A0B084808C220A900005B2868C230A51A1AC50FB03438A50FE51A47 +:200920001A1865173AA83AAA38A50FE51AE22085008BE220A9AF48ABA500C900F00CBD00D2 +:2009400000990000C600CA8880EEABA9208717282B7AFA686B6BDA5A8B0B084808E220A994 +:200960000048AB28684808C220A900005B2868E220C210AF030700F01CC901F006C902F01A +:2009800002801C22325C39A90D22A70739A90A22A70739800AA20000A41CC8225A0A3928BA +:2009A0002BAB7AFA6BDA5A08A20000A00000225A0A39287AFA6BDA5A480B08C220C21048B3 +:2009C00008C220A900005B2868A61AE8A41CE40F900DA20000C8C41390058822A60A392216 +:2009E0005A0A39282B687AFA6BDA5A480B08C2304808C220A900005B2868A51AF00BA61AFF +:200A0000CA861AA41C225A0A39282B687AFA6BDA5A480B08C2304808C220A900005B28680C +:200A2000A51CF00BA41C88841CA61A225A0A39282B687AFA6BDA5A0BC2304808C220A900ED +:200A4000005B2868A61AA41CC8C41390058822A60A39225A0A392B7AFA6B480B084808C22E +:200A600020A900005B2868C230C413900722A60A398880F5861A841CA50CC00000F0081899 +:200A8000651188F00280F818651A8517A41C988F1600AF8A8F1400AFC22018A517690020F4 +:200AA000851F282B686B48DA5A8B0B084808C220A900005B2868C230A5118F000100A5139C +:200AC0008F020100AF040100850018A900A0A86511AAA50054AFAFC23018A900C0A865113A +:200AE000AAA50054AFAFA50048186900A08500A00000A920009700C8C40FD0F96818690015 +:200B0000C08500A00000A51E9700C8C40FD0F9282BAB7AFA686B0848E220BD00004A4A4A00 +:200B20004A22700B39BD000022700B39CA88D0E868286B48088F44020008E220C21068296B +:200B400020C920F014AF4602004A4A4A4A22700B39AF46020022700B39AF4402004A4A4AF3 +:200B60004A22700B39AF44020022700B3928686BDAC220290F00AABFE1723922A70739FAA3 +:200B80006B48DA08E220C210A20000A9209F00A0AFE8E00020D0F6A20000AF1E00009F00D7 +:200BA000C0AFE8E00020D0F628FA686B080B4808C220A900005B2868E220C210A00000B71F +:200BC000009704C8C02A00D0F62B286048DA5A088B0B4808C220A900005B2868C230A900D4 +:200BE000C08504A9AF008506A9B86F8500A93900850220AC0B18A50465118504A9E26F85F5 +:200C000000A93900850220AC0B18A50465118504A90C708500A93900850220AC0B18A50429 +:200C200065118504A936708500A93900850220AC0B18A50465118504A960708500A9390001 +:200C4000850220AC0B2BAB287AFA686B0B0848DAE220E210A200BF8A70399F401FAFE8E0BF +:200C600040D0F3A200BFCA70399F801FAFE8E040D0F3C220C210FA68282B6BE220C210A29B +:200C80000000BF0077399F0040AF9F0041AF9F0042AFE8E00001D0EAC2306B48DAA2000094 +:200CA000E220A900850A8602A60ABF0076394955A6029F0020AF9F0024AF9F0028AF9F0019 +:200CC0002CAF9F0030AF9F0034AF9F0038AF9F003CAFE88602A60ABF007839A6029F002032 +:200CE000AF9F0024AF9F0028AF9F002CAF9F0030AF9F0034AF9F0038AF9F003CAFE8860263 +:200D0000A60ABF00773949AAA6029F0020AF9F0024AF9F0028AF9F002CAF9F0030AF9F002C +:200D200034AF9F0038AF9F003CAFE8A9FF9F0020AF9F0024AF9F0028AF9F002CAF9F003091 +:200D4000AF9F0034AF9F0038AF9F003CAFE60AE8E00004F003824EFFC230FA686B4808E2E3 +:200D600020AF0100AF2901C901D015A9008F0100AFEAEAEAEAEAA9018F0100AFEAEAEAEA10 +:200D8000A9008F0100AFA9018F0000AFE220A9208F0500AF8F0700AFA9008F0600AFA90199 +:200DA0008F0400AFA9208F0800AF8F0900AFC23022B70D3928686B48DA5A8B0B084808C263 +:200DC00020A900005B28684808E220A90048AB2868E230AF0100AF29030AAAC220BF5A0E87 +:200DE000398511850FBF620E3985158513E220AF0400AF8901F05CAF0800AF293F8903D092 +:200E0000044A4A80034A4A1A85006401E220AF0100AF8902F004C2204600C22038A511E562 +:200E200000850FAF0900AF293F00890300D0044A4A80034A4A1A85006401E220AF0100AFDF +:200E40008902F004C2204600C22038A515E5008513C230282BAB7AFA686B50006400280087 +:200E600032003C004B001E00250048E220A9008F0001AFA9008F0101AFA9C08F0201AFA908 +:200E8000008F0301AFA9008F0801AFA9008F0901AFA9C08F0A01AFA9008F0B01AFC2306830 +:200EA0006B6B48E220A9038F000CAF8F080CAF8F100CAF8F180CAF8F200CAF8F280CAF8FA3 +:200EC000300CAF8F380CAF8F400CAF8F480CAF8F500CAF8F580CAF8F600CAF8F680CAF8F62 +:200EE000700CAF8F780CAF8F800CAFA9098F030CAF8F0B0CAF8F130CAF8F1B0CAF8F230C67 +:200F0000AF8F2B0CAF8F330CAF8F3B0CAF8F430CAF8F4B0CAF8F530CAF8F5B0CAF8F630C49 +:200F2000AF8F6B0CAF8F730CAF8F7B0CAF8F830CAFA9008F020CAFA9048F0A0CAFA9088FC8 +:200F4000120CAFA90C8F1A0CAFA9108F220CAFA9148F2A0CAFA9188F320CAFA91C8F3A0C7E +:200F6000AFA9208F420CAFA9248F4A0CAFA9288F520CAFA92C8F5A0CAFA9308F620CAFA9F8 +:200F8000348F6A0CAFA9388F720CAFA93C8F7A0CAFA9408F820CAFA9008F010CAF8F090CD6 +:200FA000AF8F110CAF8F190CAF8F210CAF8F290CAF8F310CAF8F390CAF8F410CAF8F490C79 +:200FC000AF8F510CAF8F590CAF8F610CAF8F690CAF8F710CAF8F790CAF8F810CAF686B4862 +:200FE000DA5A8B08C230A20000A00080A9000854AF3F28AB7AFA686BE220C210A20000BF34 +:201000000079399F0005AFE8E00001D0F2EAA9018F0007AFC2306B48E220A9B18F1200AF16 +:20102000A9038F1000AFC230A900008F1400AFA906008F1600AF686B0B0848E220A9018F5D +:201040002311AFAF2311AFA9018F2411AFA9018F2511AFA9018F2611AFA9058F2711AFA9F4 +:20106000058F2811AFA9058F2911AFA9058F2A11AFA9008F2B11AFA9018F2F11AFA9058F1F +:201080003011AFA9848F3111AFA9018F3311AFA9018F3411AFA9018F3511AFA9018F3611AC +:2010A000AFA9018F3711AFA9018F3811AFA9018F3911AFA9018F3A11AFA9018F3D11AFA9DC +:2010C000018F3E11AFA9058F3F11AFA9058F4011AFA9058F4111AFA9048F4211AFA9058F50 +:2010E0004311AFA9048F4411AFA9058F4511AFA9048F4611AFA9848F4711AFA9848F481151 +:20110000AFA9008F4B11AFA9018F4C11AFA9008F4D11AFA9008F4E11AFA9008F4F11AFA91D +:20112000008F5011AFA9018F5D11AFA9028F5E11AFC22068282B6B0B0848DAE220C2101839 +:2011400020F011A9AA8F6410AF20FB11AF6010AFC955F003828900A9AB8F6410AF20FB1121 +:20116000AF6010AFC900F003827500A9608F6410AF20F011A9698F6010AF20F011A9FF8FFA +:201180006010AFA2FFFFCAEAEAEAEAEAEAEAEAE00000D0F220FB11AF6010AF20F011A9F41C +:2011A0008F6010AF20FB11AF6010AFC9FAD0EC200612AF40010029808F400100AF41010076 +:2011C00029018F410100AF4D010029FE8F4D0100AF4C0100297F8F4C0100A2867138B0030F +:2011E000A2987122870739C220C210FA68282B6BAF6410AF2902C902F0F660AF6410AF297E +:2012000001C901D0F66020F011A9A88F6410AF20F011A9A98F6410AF20FB11AF6010AFC9D1 +:2012200000D0EC20F011A9208F6410AF20FB11AF6010AF09024820F011A9608F6410AF200D +:20124000F011688F6010AFA9F6206C12207F12A9E8206C12207F12A900206C12207F12A908 +:20126000F4206C12207F12A90085E0604820F011A9D48F6410AF20F011688F6010AF60206E +:20128000FB11AF6010AF604808E220A9008F0B08AF8F0C08AFAF0E08AF09048F0E08AF2879 +:2012A000686BA90F8F18E4AFA9BE8F05E4AFA9F88F06E4AFA9118F01E4AFA9258F00E4AF45 +:2012C000A9118F04E4AFA9088F03E4AFA9008F01E4AFA9C68F06E4AFA9088F0AE4AFA9006F +:2012E0008F08E4AFA9088F0CE4AFA9C68F0DE4AFA9088F11E4AFA9008F0FE4AFA9088F1336 +:20130000E4AFA9C68F14E4AFA9368F00E4AFA9018F01E4AFA9008F02E4AFA9088F03E4AF24 +:20132000A9088F04E4AFA90C8F07E4AFA9048F08E4AFA9008F09E4AFA9088F0AE4AFA908BF +:201340008F0BE4AFA9008F0EE4AFA9088F0FE4AFA9008F10E4AFA9088F11E4AFA9088F1294 +:20136000E4AFA9108F04E4AF8F0BE4AF8F12E4AF6B4808C220A9001A8F00E9AFA901008FDA +:2013800002E9AF201414A9001A8F00E9AFA901008F02E9AF201414A91F2A8F00E9AFA901A3 +:2013A000008F02E9AF201414A901238F00E9AFA901008F02E9AF201414A9072C8F00E9AFAA +:2013C000A901008F02E9AF201414A902148F00E9AFA901008F02E9AF201414A902168F00A1 +:2013E000E9AFA901008F02E9AF201414A945188F00E9AFA901008F02E9AF20141428686BF7 +:20140000C220A9002E8F00E9AFA901008F02E9AF2014146BE220AF02E9AF2901C901F0F641 +:20142000C22060C230A90000A20000A00000E2209748C8C440D0F9204214E8E442D0ECC215 +:20144000306BC220A5488F200100A54A8F220100A980028F240100A900008F260100AF28BC +:2014600001008548AF2A0100854AA9000060C230A00000B744C9424DF003820401A00200EB +:20148000B7448F200100A00400B7448F220100A9FFFF8F2401008F26010018AF28010085CA +:2014A00050AF2A01008552A01200B7448540A01600B7448542A02E00B7440A0A854CE000B3 +:2014C00000D0052089158008E00100D00320B915A5568F000100A54E8F020100AF0401008B +:2014E0008F200100AF0601008F220100A5548F240100A900008F260100AF28010085F0AFCC +:201500002A010085F2A5488F200100A54A8F220100A5F08F240100A5F28F260100AF28017D +:20152000008548AF2A0100854AA5448F200100A5468F220100A5508F240100A5528F2601A9 +:2015400000AF2801008544AF2A01008546A5448F200100A5468F22010018A54049FFFF6962 +:2015600001008F240100A9FFFF8F260100AF2801008544AF2A0100854620E915A2D471808E +:2015800003A2C071228707396B38A07A00A20000E220B7449F0020AFC8B7449F0120AFC8C8 +:2015A000B7449F0220AFC8A9809F0320AFC8E8E8E8E8E44CD0DCC2206038A03600A2000028 +:2015C000E220B7449F0024AFC8B7449F0124AFC8B7449F0224AFC8A9809F0324AFC8E8E831 +:2015E000E8E8E44CD0DCC22060A20000A00000E220B7449748C8C440D0F7200616202116B9 +:20160000E8E442D0E760C220A5448F200100A5468F220100AF2801008544AF2A0100854647 +:2016200060C22018A548654E8548A54A690000854A60EAEAEAEAEAEAEAEAEAEA6B22321663 +:20164000392232163922321639223216392232163922321639223216392232163922321672 +:2016600039223216396B223D16396BE00000F00722661639CA80F46B8B084808E220A90025 +:2016800048AB2868E220A9008F600100AF4C010029FB8F4C0100A97F8D0507A9008F6101D5 +:2016A000008F6201008F630100C2308A8F65010098E2208F670100A9098F600100A980CBAD +:2016C0001C0507F0FAA9008F600100A97F8D0507AF4C010009048F4C010028AB6B48DA5AFF +:2016E00008E220C210AF1000AF29FE8F1000AFA20000BF00003B9F00A0AFBF00203B9F00E8 +:20170000C0AFE8E00020D0EA2221073922810B3922A50939AF1000AF09018F1000AF287ADD +:20172000FA686B00000000000000000000000000000000000000006B6B0181019801B00139 +:20174000CA01E50102022002410263028702AE0200010208090A1011120304050B0C0D133D +:201760001415101314121511100804020120406080E0C000244FF20B000E3100520B004185 +:2017800043434F52444E2020200031436E17010222058B0C0242414750495045312020000B +:2017A0003000FFA00300A300650B0242414750495045322020003187A111000816807D4310 +:2017C0000042414E4A4F3120202020000115252F000A2180656C004241535331202020202E +:2017E0002000011DF2EF000A0100F578004241535332202020202000C06DF901010E4100E0 +:20180000F27300424153534841525020200030C8D519000C7180611B00424153534F4F4E5B +:2018200031202000C14FB1530306E0001274034241535354524C47202006000BA84C00000A +:201840000000000000424452554D31202020200064DBFF0100043EC0F3620042454C4C4F59 +:201860004E4720202000074FF26000081200F2720042454C4C5320202020200064DBFF01FC +:2018800000043EC0F5F30042454C53484F5254202000204B7B04010E2100F57200424E4367 +:2018A0004542415353202000211671AE000E2100819E00425241535331202020200030C5B5 +:2018C000521100003180312E0043424153534F4F4E20200033870110000814807D330043A3 +:2018E000454C455354412020200032167324000E2180755700434C4152312020202020007D +:20190000311C411B000C6080423B00434C415232202020202000329A511B000C6182A23BBD +:2019200000434C4152494E4554202000110DF201000A150DF2B100434C41564543494E20D0 +:2019400020000002F0FF00061180F0FF0043524F4D4F524E452020090100F5B50000000097 +:2019600000000043594D42414C3120202000058AF07B00080180F47B00454C434C41563144 +:20198000202020000149F15301061100F17402454C434C41563220202000E06D5704010EDA +:2019A0006100677D00454C4543464C202020200013979A12020E91809B1100454C45435625 +:2019C000494245202000F10197170008210DF11800454C4755495431202020001396FF21F4 +:2019E000000A1180FF0300454C475549543220202000078F827D000C1480827D00454C47E2 +:201A00005549543320202000058FDA15000A0180F91402454C475549543420202000B2CD47 +:201A2000912A0209B180912A01454C4F5247414E31202000014FF15000060104D27C00454B +:201A40004C5049414E4F312020000222F213000E0200F54300454C5049414E4F3220200067 +:201A60008163F35800000180F25800455049414E4F3141202000071FF5FA000E0157F5FA94 +:201A800000455049414E4F3142202000218374170007A28D651700464C55544520202020F6 +:201AA0002000A127748F0002A180652A00464C555445312020202000E0EC6E8F000E610020 +:201AC000652A00464C555445322020202000219F535A000C2180AA1A004652484F524E3167 +:201AE00020202000208EA58F02062100363D004652484F524E3220202000F01855EF020059 +:201B0000E080871E0346535452503120202020007016552F020CE080871E034653545250CE +:201B2000322020202000F1009713000A250DF1180146555A47554954312020003148F153B6 +:201B400000063200F2270246555A47554954322020000111F21F000A0100F5880047554902 +:201B600054415231202020000229F57500000183F2F3004841525031202020202000029958 +:201B8000F55500000180F6530048415250322020202020000257F55600000180F65400487D +:201BA000415250332020202020000229F57500000103F2F3004841525045312020202000D0 +:201BC0003287A110000816807D330048415250534931202020003387A110000615807D432F +:201BE0000048415250534932202020003584A810000818807D330048415250534933202091 +:201C00002000110DF201000A150DF2B100484152505349342020200036878A0000081A8080 +:201C20007F33004841525053493520202000F0001E110108E2C011110148454C49435054A0 +:201C40005220200A0100F7B500000000000000484948415431202020200A0103DA1800001C +:201C600000000000004849484154322020202000874D7842000A94008554004A41564149D4 +:201C800043414E202000035E8551010E1100D271004A415A5A475549542020000050F2702E +:201CA000000E1300F272004A455753484152502020000002F0FA01061180F2FA014B4559A1 +:201CC0004252443120202000018FF2BD0008148082BD004B4559425244322020200001002D +:201CE000F0F00000E403F336004B45594252443320202009E60025B5000000000000004C8B +:201D0000415345522020202020003244F8FF000E1100F57F004C4F474452554D312020006D +:201D2000054EDA25000A0100F915004D4152494D424131202000854EDA15000A8180F913F5 +:201D4000004D4152494D4241322020003000FE110108AEC0F119014D44524E50484F4E20D1 +:201D600020070C00C8B6010000000000004D4C54524452554D2020002090F59E020C110098 +:201D8000F45B034D4F4F4753594E542020000E40D153000E0E00F27F034E4F495345312060 +:201DA00020202000B1C56E17000222058B0E004F424F453120202020200065D28103000253 +:201DC0007180F105004F5247414E3120202020002480FF0F00012180FF0F004F5247414E1B +:201DE000322020202000035BF01F000A0180F01F004F5247414E332020202000035BF01F93 +:201E0000000A018DF013004F5247414E334120202000035BF01F000A0192F012004F5247E8 +:201E2000414E3342202020000C00F8B500010000D64F004F52474E50455243202000174F59 +:201E4000F26100081208F1B20050484F4E45312020202000174FF2610008120AF1B400506D +:201E6000484F4E453220202020008163F35800000180F258005049414E3141202020200072 +:201E8000071FF5FA000E0126F5FA005049414E31422020202000071FF5FA000E0157F5FA84 +:201EA000005049414E31432020202000034FF15300061700F274005049414E4F20202020F6 +:201EC0002000014FF15300061100D274005049414E4F312020202000419DF251000613008F +:201EE000F2F1005049414E4F322020202000014FF15000060104D27C005049414E4F332022 +:201F000020202000014DF16000081100D27B005049414E4F342020202000034FF153000695 +:201F20001703F274005049414E4F42454C20200001CFF15300021200F283005049414E4F83 +:201F40004620202020001000759301000100F58201504F5042415353312020070C00C7B412 +:201F600000000000000000524B534E41524531202000014F7153000A1200527C00534158F0 +:201F800031202020202020000700F0F0000E00005CDC0053435241544348202020000700B4 +:201FA000F0F0000E00005CDC0053435241544348342020000600F0F0000E0000F6B400538E +:201FC0004452554D322020202000E40EFF3F0100C000F30700534852545649424520200085 +:201FE0000140F15300000840F1530053495441523120202020000140F15300000840F1538B +:20200000015349544152322020202000610C810300087180610C00534E414B45464C2020EF +:2020200020070C00F8B500000000000000534E4152453120202020000600F0F0000EC403DB +:20204000C43400534E525355535420202000701C5103020E2000546702534F4C4F564C4EEC +:20206000202020000146F18300066103318600535445454C4754312020000147F1830006D9 +:202080006103918600535445454C475432202000B18B711100066140421501535452494EEE +:2020A000475331202000E14FB1D3030621001274015354524E4C4F4E4720200055972A02E1 +:2020C0000000128042F30053594E312020202020200013979A12000E11809B140053594EB0 +:2020E0003220202020202000118AF11100060140F1B30053594E3320202020202000210D4B +:20210000E93A000A2280656C0053594E3420202020202000014F715300061900527C0053DD +:20212000594E3520202020202000240F417E000A2100F15E0053594E3620202020202000A7 +:202140000787F00500040180F0050053594E39202020202020002603E0F000081E00FF3140 +:202160000053594E42414C31202020002803E0F000041300E8110053594E42414C322020BF +:2021800020003088D519000C7180611B0053594E424153533120200081866501000C1100E2 +:2021A00032740053594E424153533220200081836505000A510032740053594E4241535352 +:2021C000342020000600F0F0000E0000F8B60053594E534E5231202020000600F0F0000E77 +:2021E0000000F6B40053594E534E5232202020008F81EF010004010098F10054494E4341B9 +:202200004E31202020080400F7B500000000000000544F4D31202020202020080200C897DD +:2022200000000000000000544F4D3220202020202000174FF26100081208F2740054524194 +:20224000494E42454C2020002603E0F000081E00FF3100545249414E474C45202000B11C22 +:20226000411F000E6180923B0054524F4D42312020202000211C531D000C6180523B005492 +:20228000524F4D42322020202000311C410B000E6180923B005452554D5045543120200065 +:2022A000311C231D000C6180523B005452554D50455432202000311C4101000E6180923B29 +:2022C000005452554D50455433202000311C410B000C6180923B005452554D504554342082 +:2022E00020002119438C000C2180852F0054554241312020202020008453F5330006A08032 +:20230000FD250056494252413120202020000673F65400008103F2B30056494252413220C4 +:20232000202020009397AA12020E9180AC21005649425241332020202000311C5103000E93 +:20234000618054670056494F4C494E3120202000E1886229000C2280532C0056494F4C49DB +:202360004E3220202000E188642900062283532C0056494F4C494E3320202000319CF1F942 +:20238000000E3180F7E600564C4E50495A5A31202000000200F0000E14801BA200574156B4 +:2023A0004520202020202000112DC82F000C3100F5F50058594C4F312020202020062E006B +:2023C000FF0F0000000000000058594C4F322020202020000600FFF0000EC400F8B5005805 +:2023E000594C4F332020202020003E009F0F0F00300087FA0000010078970900020088982F +:2024000003000100789709000200889803001608F1FB01001100F96900000000F86C010098 +:202420000E80E84A0000251BFAF201001200F69A00000603F4440001011BF2340000000089 +:20244000F9F305000100F78A00000107FAFD05000100F64700001608F1FB01001100F96949 +:2024600000002400FF000F000200F7A900003E009F0F0F00300087FA00002400FF000F00AA +:202480000200F7A90000060AFA1F0C001100F5F500002C00F2FE07000206B8D80300060A9C +:2024A000FA1F0C001100F5F500002C00F2FE07000206B8D80300060AFA1F0C001100F5F50E +:2024C00000002E0082F60500041074F80300060AFA1F0C001100F5F50000060AFA1F0C0069 +:2024E0001100F5F500002C009F000F020E05C5D40300060AFA1F0C001100F5F500002910ED +:2025000094000F000404F94403002C009F000F020E05C5D40300291094000F000404F94424 +:2025200003002E09F5F10100060387F703002C009F000F020E05C5D403003714F7A1090178 +:202540000300F62800002C009F000F020E05C5D403008000FF000D010000F5F7010029101C +:2025600094000F000404F944030025C4FAFA0100030099F900002103FBFA01010200A8F741 +:20258000000025C4FAFA0100030099F900002418F9FA0F020300A6F600002418F9FA0F02A9 +:2025A0000300A6F600000514F5F507020300F63602000514F5F507020300F63602001C0CDA +:2025C000F9310F01150096E801001C0CF9310F01150096E801000E00FF010F000E0279771A +:2025E00003000E00FF010F000E02797703002015AF0705010E00A52B02002018BF070101E7 +:202600000E00933B02002000F0F70B000801893B03002000F3FA0900080A532B020015211C +:20262000F89A09011300F6890000251BFAF201001200F69A0000251BFAF201001200F69ACE +:20264000000020015F0701000800874B0100251257F70101030078670100222FF1F0070074 +:202660002702F8FC00002644F1F007002740F5F500000E00FF010F000E0279770300264410 +:20268000F1F007002740F5F500002644F1F007002740F5F500001608F1FB01001100F969E0 +:2026A00000001608F1FB01001100F9690000021DF59301000000C64500E9233900F5233953 +:2026C00000012439000D2439001924390025243900312439003D24390049243900552439BA +:2026E00000612439006D2439007924390085243900912439009D243900A9243900B524399A +:2027000000C1243900CD243900D9243900E5243900F1243900FD2439000925390015253977 +:2027200000212539002D2539003925390045253900512539005D2539006925390075253951 +:2027400000812539008D25390099253900A5253900B1253900BD253900C9253900D5253931 +:2027600000E1253900ED253900F925390005263900112639001D263900292639003526390C +:2027800000412639004D2639005926390065263900712639007D26390089263900952639E9 +:2027A00000A1263900AD26390000335AB25001003100B1F501003149F25307011103F1F5E4 +:2027C00000003195D1830D013203C1F50000349BF3630101110092F501002728F8B7010225 +:2027E0009100F1F900001A2DF3EE01011100F1F500003595F2580F01320281F601003185B7 +:20280000C94001003500C2B901000915C76408000105B23500000603F4440001011BF2343B +:2028200000000406A9240A010101F5740000D400F6330000F10061E30000D400F7E8040062 +:20284000D100A46400003616F7F701003107B5F50000031BA2430B000000F3740000C38EBC +:20286000F83501011100C3940100E207F41B0601E000F40D0100F200F62C0400F000F50BD7 +:202880000100F106B6150A00F000BF070000220379160801E0006D080100312763060100E0 +:2028A000720051170100B41D53160F01710051170100252997150100320053080100249ECE +:2028C00067150F003100530601001327A3B405013100D2F8000017A3F33201001100E2C7B6 +:2028E00001003324D2C10F013100F19C00003105F84401003202F2C9010021099C7B070074 +:20290000020395FB00002184819807012104A1590000B10C78430100220391FC0300000A05 +:20292000828C09000802B4EC00002113AB460100210093F70000010AF93201002204C1588F +:2029400000002107FA770B002202C36A0000211771570B002100628700002501FA780701CD +:202960001200F39700002103FA880D001300B39700002109F57F09012304F3CC000001100C +:20298000A39B0900010093AA0000E219F6290D01E10078080100E21CF6290D01E10078089C +:2029A0000100611969160B01610054270100711882310D01320061560000E22370060D0178 +:2029C000E10075160100020088E608006100F5F601001220F6D50F011180F3E30000610EE2 +:2029E000F4F401010000B5F50000611E9C040F01218071160000A22AC0D60F0221003055D3 +:202A00000100612172350F01610062360100211A72230F01210251070000E116973109005F +:202A200061006239000022C37945010021006627000021DE6355010121007346000042056E +:202A400086F70A00500074760100311C61020F00618192380000711E52230F006102711949 +:202A60000000211A76160F002101810900002528892C07022000834B0200211F7916090001 +:202A8000A20571590000211987160F00210382390000211775350F0022828417000021228D +:202AA00062580F00210272160000B11B59070101A1007B0A000021169F040B002100850CB7 +:202AC0000100210FA8200D0023007B0A0100210F8804090026007918010031188F050100EC +:202AE000320173080000A10A8C3701012404770A00003104A8670B00750051190000A21F20 +:202B000077260101210174090000E107B8940101210163280000A19387590100E100650A2F +:202B2000000022109F380100610067290000E20D889A0101210067090000A21098940F0009 +:202B400021016A280000F11C86260F00F10055270000E13F9F090000E1006F080000E23B4F +:202B6000F719010021007A070000221E920C0F006106A20D00002115F4220F012100A35F20 +:202B80000000F22047660301F10042270000611988280F006105B24900002116821B0100A9 +:202BA0002300B27901002100CA93010022007A1A0000230092C90801220082280100211DFF +:202BC000F37B0F002202C35F0000E10081250001A686C4950100212731010F002100441521 +:202BE0000000601483350D026100D1060000E15CD301010162008237000028383486010217 +:202C0000210041350000241252F30501230232F50100611D62A60B00A10061260000220F65 +:202C200022D50B0121843F050100E31FF92401003101D1F60000630041550601A2004105A6 +:202C40000100C725A7650101C105F3E40000E319F7B70101610092F50100669BA8440F004B +:202C60004104F2E40100612022750D00610045250000E121F6840F00E101A3360000E2140C +:202C800073640B01E10198050100210B723409002402A3F601002116F4530D000400F6F8B9 +:202CA00000002118DA020D003500F3F50000250FFA630900020094E501003207F9960100F6 +:202CC000110084440000200E971809022503831801006118F6290100620178080100E621EB +:202CE00076190B0061038E0801002723F0D401000509F24600001C0CF9310F01150096E8F5 +:202D000001000200751606020100F6F60100251BFAF201001200F69A0000021DF5930100B8 +:202D20000000C64500001115F53205001000F4B400002206FA9909000100D52500002E0091 +:202D4000FF000F020E0E212D0000300B56E401011700558702002400FF030D00050898872E +:202D600001000E00F0000F020A04170403002008F6F701000E0577F902002014F10801004E +:202D80002E02F40800002004F20003012300360501002E00FF020F002A0532550300200077 +:202DA000A1EF0F001000F3DF00A9273900B5273900C1273900CD273900D9273900E52739A8 +:202DC00000F1273900FD2739000928390015283900212839002D2839003928390045283915 +:202DE00000512839005D2839006928390075283900812839008D28390099283900A52839F3 +:202E000000B1283900BD283900C9283900D5283900E1283900ED283900F9283900052939D1 +:202E200000112939001D2939002929390035293900412939004D29390059293900652939AA +:202E400000712939007D2939008929390095293900A1293900AD293900B9293900C529398A +:202E600000D1293900DD293900E9293900F5293900012A39000D2A3900192A3900252A3966 +:202E800000312A39003D2A3900492A3900552A3900612A39006D2A3900792A3900852A3942 +:202EA00000912A39009D2A3900A92A3900B52A3900C12A3900CD2A3900D92A3900E52A3922 +:202EC00000F12A3900FD2A3900092B3900152B3900212B39002D2B3900392B3900452B39FC +:202EE00000512B39005D2B3900692B3900752B3900812B39008D2B3900992B3900A52B39DA +:202F000000B12B3900BD2B3900C92B3900D52B3900E12B3900ED2B3900F92B3900052C39B8 +:202F200000112C39001D2C3900292C3900352C3900412C39004D2C3900592C3900652C3991 +:202F400000712C39007D2C3900892C3900952C3900A12C3900AD2C3900B92C3900C52C3971 +:202F600000D12C3900DD2C3900E92C3900F52C3900012D39000D2D3900192D3900252D394D +:202F800000312D39003D2D3900492D3900552D3900612D39006D2D3900792D3900852D3929 +:202FA00000912D39009D2D390000018FF2F43800010DF2F70000014BF2F438000107F2F717 +:202FC00000000149F2F438000107F2F600008112F2F700004107F2F700000157F1F70000AC +:202FE0000107F2F700000193F1F700000107F2F70000000000000000000000000000000073 +:20300000000000000000000000000000000000000000000000000797F3F232001187F2F180 +:203020000000172154F432000107F4F400009862F3F630008107F2F600001823F6F6000044 +:203040000107E7F700001591F6F600000107F6F600004559D3F300008187A3F30000000002 +:20306000000000000000000000000000000000000000000000000000000000000000000050 +:2030800000007044AA183400B1078A080000239397233401B1075514000061139704300136 +:2030A000B187550400002448982A3001B107461A0000611391060001210761070000211338 +:2030C00071060000A1906107000000000000000000000000000000000000000000000000E0 +:2030E00000000000000000000000000000000387F62236012187F3F800000347F95430009D +:203100002107F63A0000234A91413801210C84190000234A9519320121079419000009A148 +:20312000204F00008487D1F80000211E94060000A207C3A600000000000000000000000061 +:203140000000000000000000000000000000000000000000000000000000018BA19A380070 +:203160002147F2DF0000218BA2163800210FA1DF0000318BF4E83A003107F1780000311214 +:20318000F12830003107F11800003115DD1300012107562600003116DD13000121076606FE +:2031A00000000000000000000000000000000000000000000000000000000000000000000F +:2031C000000000000000021AF5753001018785350000021DF57530010187F3F4000010417C +:2031E000F50532011107F2C30000219BB1253C01A20872080000A1987F03000121073F07B8 +:203200000100A193C112000061074F050000000000000000000000000000000000000000EA +:20322000000000000000000000000000000000000000715754053C0072077A0500009000A9 +:20324000546338004107A5450000219285173C0021088F090000219475173200210C8F09C9 +:20326000000021947615000061078237000031439E1700012107622C01000000000000000C +:20328000000000000000000000000000000000000000000000000000000000000000214DC0 +:2032A000543C38002107A61C0000318F930238016107720B0000318E930338016107720978 +:2032C0000000319193033001610782090000318E930F00016107720F0000214BAA160001FA +:2032E00021078F0A000000000000000000000000000000000000000000000000000000000D +:2033000000000000000000000000E11F855F3000E107651A0000E146885F3000E107651A8D +:203320000000A19C751F32002107750A0000318B845830002107651A0000E14C665600008B +:20334000A1076526000062CB76460000A1075536000000000000000000000000000000001E +:2033600000000000000000000000000000000000000000000000210EFF0F30012107FF0FA9 +:203380000100224686553000218764180000214566123000A107960A0000218B922A3401A2 +:2033A0002207912A0000A29EDF05000061476F070000201AEF01000060078F0602000000BF +:2033C0000000000000000000000000000000000000000000000000000000000000000000ED +:2033E0000000611791343C00610755160000715D5401300072076A030000219721433800F4 +:20340000A20742350000A11CA1773001210731470100218911330000610A42250000A1156F +:20342000114700012107CF0700000000000000000000000000000000000000000000000035 +:2034400000000000000000000000000000002292B1813C00618AF2260000414DF151300146 +:203460004207F2F50000619411513601A38711130000618C11313A00A1871D030000A44C9F +:20348000F37300016107812300000285D2530000070AF2F601000000000000000000000013 +:2034A0000000000000000000000000000000000000000000000000000000044FFA563C002D +:2034C0000107C205000021497C20360022076F0C01003185DD333A01210756160000200483 +:2034E000DA05300221888F0B0000056AF1E500000387C3E500000715EC2600000207F816BC +:203500000000000000000000000000000000000000000000000000000000000000000000AB +:203520000000000000001141F8473402100AF3030000018EF1063E021007F30200000E00D4 +:203540001F003E00C0071FFF03000680F8243800038F568402000E00F8000000D00C3404C4 +:2035600003000E00F6000000C0071F02030000000000000000000000000000000000000059 +:203580000000000000000000000000000000000000002600FF013E00E407121601000000B3 +:2035A000F3F03E000007F6C902A92F3900B52F3900C12F3900CD2F3900D92F3900E52F3908 +:2035C00000F12F3900FD2F39000930390015303900213039002D30390039303900453039CD +:2035E00000513039005D3039006930390075303900813039008D30390099303900A53039AB +:2036000000B1303900BD303900C9303900D5303900E1303900ED303900F930390005313989 +:2036200000113139001D3139002931390035313900413139004D3139005931390065313962 +:2036400000713139007D3139008931390095313900A1313900AD313900B9313900C5313942 +:2036600000D1313900DD313900E9313900F5313900013239000D323900193239002532391E +:2036800000313239003D3239004932390055323900613239006D32390079323900853239FA +:2036A00000913239009D323900A9323900B5323900C1323900CD323900D9323900E53239DA +:2036C00000F1323900FD3239000933390015333900213339002D33390039333900453339B4 +:2036E00000513339005D3339006933390075333900813339008D33390099333900A5333992 +:2037000000B1333900BD333900C9333900D5333900E1333900ED333900F933390005343970 +:2037200000113439001D3439002934390035343900413439004D3439005934390065343949 +:2037400000713439007D3439008934390095343900A1343900AD343900B9343900C5343929 +:2037600000D1343900DD343900E9343900F5343900013539000D3539001935390025353905 +:2037800000313539003D3539004935390055353900613539006D35390079353900853539E1 +:2037A00000913539009D3539003C42444547494B4CE220C210A20000BFA93739290F853096 +:2037C000BFA9373929704A4A4A4A85318A2903852722A13939A00000EAEAEAEAC8C0FFFF35 +:2037E000D0F6E8E00800D0D06BC220A900008528852A853085328534A973178550A9390032 +:203800008552E2206B6B6B4808C220A900005B2868C22018A900E66532852CA9AF00852EEC +:20382000E220A72C6B4808C220A900005B2868C220A900E6690100852CA9AF00852EE220E9 +:20384000A72C29206B4808C220A900005B2868C220A940008528200841E220A72C29C04A32 +:203860004A4A4A4A4A6B4808C220A900005B2868E22018A527290F69B0852AA900852BC2A4 +:203880003018A900E6652A852CA9AF00852EE220A72C291C4A4A6B4808C220A900005B288F +:2038A00068E22018A527290F69B0852AA900852BC23018A900E6652A852CA9AF00852EE29B +:2038C00020A72C29206B4808C220A900005B2868E22018A527290F69C0852AA900852BC26A +:2038E0003018A900E6652A852CA9AF00852EE220A72C29E04A6B4808C220A900005B28684D +:20390000E22018A527290F69C0852AA900852BC23018A900E6652A852CA9AF00852EE22072 +:20392000A72C29016B4808C220A900005B2868C220A9BD008528200841E220A72C29806B12 +:203940004808C220A900005B2868C220A900E669BD00852CA9AF00852EE220A72C29406BA5 +:203960004808C220A900005B2868C220A900E669BD00852CA9AF00852EE220A72C29206BA5 +:203980004808C220A900005B2868C220A900E669BD00852CA9AF00852EE220A72C291F6B86 +:2039A0006B4808C220A900005B2868E220DAA900853220893F204E3FE210A5303A0AAABF91 +:2039C0003817398532E8BF381739853322CC3E39A901853220893FC210FA6B6B4808C2203F +:2039E000A900005B28683822CA3B39E220C210A00000A20000B7088535C8C906D0038270B0 +:203A000001C907D003824401C908D003821801C909D00382EC00C90AD00382C000A90085D3 +:203A200026C220A920008528200841E220B708872CC8C220A940008528200841E220B708C1 +:203A4000872CC8C220A960008528200841E220B708872CC8C220A980008528200841E2208B +:203A6000B708872CC8C220A9E0008528200841E220B708872CC8E210A527290FAAB7089F51 +:203A8000C0E6AFC8A9018526C220A920008528200841E220B708872CC8C220A9400085283F +:203AA000200841E220B708872CC8C220A960008528200841E220B708872CC8C220A9800019 +:203AC0008528200841E220B708872CC8C220A9E0008528200841E220B708872C6BE220B77B +:203AE000088F31E6AFC8B7088F51E6AFC8B7088F71E6AFC8B7088F91E6AFC8B7088FF1E628 +:203B0000AF6BE220B7088F35E6AFC8B7088F55E6AFC8B7088F75E6AFC8B7088F95E6AFC849 +:203B2000B7088FF5E6AF6BE220B7088F32E6AFC8B7088F52E6AFC8B7088F72E6AFC8B7088A +:203B40008F92E6AFC8B7088FF2E6AF6BE220B7088F34E6AFC8B7088F54E6AFC8B7088F7405 +:203B6000E6AFC8B7088F94E6AFC8B7088FF4E6AF6BE220B7088F30E6AF8F33E6AFC8B70874 +:203B80008F50E6AF8F53E6AFC8B7088F70E6AF8F73E6AFC8B7088F90E6AF8F93E6AFC8B717 +:203BA000088FF0E6AF8FF3E6AF6B4808C220A900005B2868C22018A900E66532852CA9AF78 +:203BC00000852EE220A533872C6B4808C220A900005B2868C220A901E6852CA9AF00852E46 +:203BE000E220B007A72C29DF872C6B4808C220A900005B2868A72C092000872C6B4808C221 +:203C000020A900005B286808C22018A92000852820084128E220B008A72C297F872C800679 +:203C2000A72C0980872C6B4808C220A900005B2868C220A920008528200841E220A72C2985 +:203C4000806B4808C220A900005B286808C22018A92000852820084128E220B008A72C29F4 +:203C6000BF872C8006A72C0940872C6B4808C220A900005B2868C220A9200085282008418B +:203C8000E220A72C29406B4808C220A900005B286808C22018A92000852820084128E220AA +:203CA000B008A72C29DF872C8006A72C0920872C6B4808C220A900005B2868C220A92000AD +:203CC0008528200841E220A72C29206B4808C220A900005B286808C22018A92000852820E7 +:203CE000084128E220B008A72C29EF872C8006A72C0910872C6B4808C220A900005B2868A5 +:203D0000C220A920008528200841E220A72C29106B4808C220A900005B2868C220A92000F8 +:203D20008528200841E220A72C290F6B4808C220A900005B2868C220A9200085282008416E +:203D4000E220A532290F8532A72C29F00532872C6B4808C220A900005B2868C220A94000C9 +:203D60008528200841E220A53229030A0A0A0A0A0A8532A72C293F0532872C6B4808C22073 +:203D8000A900005B2868C220A940008528200841E220A532293F8532A72C29C00532872C10 +:203DA0006B4808C220A900005B2868C220A940008528200841E220A72C293F6B4808C22017 +:203DC000A900005B2868C220A960008528200841E220A532290F0A0A0A0A8532A72C290F53 +:203DE0000532872C6B4808C220A900005B2868C220A960008528200841E220A72C29F04A6F +:203E00004A4A4A6B4808C220A900005B2868C220A960008528200841E220A532290F8532CA +:203E2000A72C29F00532872C6B4808C220A900005B2868C220A960008528200841E220A7D1 +:203E40002C290F6B4808C220A900005B2868C220A980008528200841E220A532290F0A0A87 +:203E60000A0A8532A72C290F0532872C6B4808C220A900005B2868C220A980008528200871 +:203E800041E220A72C29F04A4A4A4A6B4808C220A900005B2868C220A98000852820084179 +:203EA000E220A532290F8532A72C29F00532872C6B4808C220A900005B2868C220A9800028 +:203EC0008528200841E220A72C290F6B4808C220A900005B2868E22018A527290F69A085E2 +:203EE0002AA900852BC23018A900E6652A852CA9AF00852EE220A532872C18A52C691085E8 +:203F00002CA53329038533A72C29FC0533872C6B4808C220A900005B2868E22018A5272996 +:203F20000F69A0852AA900852BC23018A900E6652A852CA9AF00852EE220A72C853218A534 +:203F40002C6910852CA72C290385336B6B6B4808C220A900005B2868E22018A527290F69C6 +:203F6000B0852AA900852BC23018A900E6652A852CA9AF00852EE220A53129070A0A8531D3 +:203F8000A72C29E30531872C604808C220A900005B2868E22018A527290F69B0852AA900A4 +:203FA000852BC23018A900E6652A852CA9AF00852EE220A5322901F002A9208532A72C29FC +:203FC000DF0532872C604808C220A900005B2868E22018A527290F69C0852AA900852BC2E1 +:203FE0003018A900E6652A852CA9AF00852EE220A53229070A8532A72C29010532872C6B83 +:204000004808C220A900005B286808E22018A527290F69C0852AA900852BC23018A900E6EA +:20402000652A852CA9AF00852E28E220B008A72C29FE872C8006A72C0901872C6B4808C213 +:2040400020A900005B2868C220A9BDE6852CA9AF00852EE220B008A72C297F872C8006A7AD +:204060002C0980872C6B4808C220A900005B2868C220A9BDE6852CA9AF00852EE220B00803 +:20408000A72C29BF872C8006A72C0940872C6B4808C220A900005B2868C220A9BDE6852C4D +:2040A000A9AF00852EE220B008A72C29DF872C8006A72C0920872C6B4808C220A900005BD7 +:2040C0002868C220A9BDE6852CA9AF00852EE220A532291F853249FF8533A72C253305322C +:2040E000872C6B4808C220A900005B2868C220A9E0008528200841E220A53229038532A7F8 +:204100002C29FC0532872C6BE230A527290FAAA526D006BF5017398004BF591739852AA9F5 +:2041200000852BC23018A900E6652A6528852CA9AF00852E6008C2308BA306AAE220A30879 +:2041400048AB22900739C220A3048308A3028306AB6868286B8B0B084808E220A90048AB9E +:2041600028684808C220A920035B286878E220850DA50C297F850C282BAB6B0B084808C242 +:2041800020A920035B2868E220A501C900D00622366939900CE2206400282B386BE2208588 +:2041A00000282B186B5A0B8B084808E220A90048AB28684808C220A920035B2868E220A028 +:2041C0000000A95A9706C8C00002D0F8A501C902F014C900F018C906F01CA980E22085001C +:2041E00028AB2B7A386B22585E39B01280EE223B6739B00A80E622496D39B00280DEE22023 +:20420000640028AB2B7A386B0B8B084808E220A90048AB28684808C220A920035B2868E238 +:2042200020A501C902F013C900F017C906F01BA980E220850028AB2B186B22F85E3990F1DD +:20424000801022A0673990E9800822DA6D3990E18000E220640028AB2B386BDA5A0B8B08FF +:204260004808E220A93848AB28684808C220A920035B2868AD20A08D32A0AD22A08D34A003 +:20428000A900A1851C8518A93800851E851AE220AD01A0C900D024E220A9008D45A0C22067 +:2042A000A5188506A51A8508AD32A08502AD34A0850422441000B01F821517E220A9018D2E +:2042C00045A0C220AD32A08510AD34A08512223E4839B00382F91682FD160B084808C220EC +:2042E000A920035B2868C220A900A18518A93800851A282B6BDA5A0B8B084808E220A938FB +:2043000048AB28684808C220A920035B2868C22018A5186920008518A51A690000851A3855 +:20432000A900A3E5188528A93800E51A852A300CF00382A216A528F003829B16E220AD45A8 +:20434000A0C901F038C220AD32A01A8D32A0C90A00D007E220A900827216C220AD32A085AC +:2043600002AD34A08504A900A185068518A938008508851A22441000B039825316C220ADD9 +:2043800032A08510AD34A08512A900A1851C8518A93800851E851A224E4C39B00382301683 +:2043A000A5108D32A0A5128D34A0223E4839B003821D16822116DA5A0B8B084808E220A902 +:2043C0003848AB28684808C220A920035B286822595639B006A90800822800A00000E2207C +:2043E000B718F01CC9E5F01822935639B0ED22064439900FC220A900A18518A93800851ABE +:2044000082D41582C615DA8B0B084808E220A93848AB28684808C220A920035B2868E220BB +:20442000AD45A0C901F009E220A915850E823E00C220A90000A200009D00A1E8E8E00002F7 +:20444000D0F6A900A1851CA93800851EAD32A08510AD34A08512226F50399012AD36A08D2F +:2044600032A0AD38A08D34A0282BABFA386B282BABFA186BDA5A0B8B084808E220A9384821 +:20448000AB28684808C220A920035B2868E220AD45A0C901F01FC220AD32A08502AD34A022 +:2044A0008504A900A18506A93800850822241000B01F821715C220AD32A08510AD34A08561 +:2044C00012A900A1851CA93800851E227B483990E18203158B0B084808E220A90048AB287E +:2044E000684808C220A920035B2868E220C210A20000A9009D2003E8E01502D0F74808E2B4 +:2045000020A93848AB28684808C220A920035B2868E220C210A20000A9009D00A0E8E00109 +:2045200020D0F7C220A9D3488F4AA038A939008F4CA038E220A9028501A9FF8F50A038A96D +:2045400000A200009D20ADE8E00001D0F7A900A200009D00B0E8E00010D0F7C220A920AD30 +:204560008520A938008522A900B08528A93800852AA20800A00E00A5289720C8C8A52A97A6 +:204580002018A5206920008520A522690000852218A5286900028528A52A690000852ACA6B +:2045A000D0D2282BAB6B8B0B084808E220A93848AB28684808C220A920035B2868E220A50C +:2045C000018F50A038C902F01FC906F026C900F00BA904850EA9808500827C01220C6839E4 +:2045E000B00382730182670122165E39B010A90482650122546C39B005A904825A01C230B8 +:2046000064026404A900A38506A93800850822441000B007E220A901823D01E220ADFEA49D +:20462000C955D007ADFFA4C9AAF005A902822801ADC2A4C90CF005A903821C018D01A0C25F +:2046400020ADC6A48D04A0ADC8A48D06A0ADCBA48D08A0ADCDA48D0AA0E220A5018D00A02B +:20466000A9008D02A0C220A900A38506A938008508AD04A08502AD06A0850422441000B061 +:204680001CE220A90582D000E220ADFEA4C955D007ADFFA4C9AAF005A90582BB00C220AD84 +:2046A0002CA38D20A0AD2EA38D22A0AD0EA38D0CA018AD04A06D0CA08D14A0AD06A06900FB +:2046C000008D16A0E220A20000BF24A3389F10A038E8E00400D0F2AD10A00A8D1CA0AD11B2 +:2046E000A02A8D1DA0AD12A02A8D1EA0AD13A02A8D1FA018AD1CA06D14A08D1CA0AD1DA0A7 +:204700006D15A08D1DA0AD1EA06D16A08D1EA0AD1FA06D17A08D1FA0E220AD0DA38D03A0E9 +:2047200018AD14A06D10A08D18A0AD15A06D11A08D19A0AD16A06D12A08D1AA0AD17A06D3E +:2047400013A08D1BA0A9008D0EA0A9028D0FA0E220640E282BAB386BE220850E282BAB18D3 +:204760006B8B0BDA084808E220A90048AB28684808C220A920035B2868C210E220A501C9AC +:2047800000F024C230A9000085028504A900A38506A93800850822441000B003824700E241 +:2047A00020AF00A3388004AF3EA338C980F006C982F0028031A20000BF03A338DFEB47394D +:2047C000D024E8E00800D0F0C230A90002A200A5A000AB443838E220A501C900F0045C00B1 +:2047E000A9385C3EA938282BABFA6B43323536444F53208B0B084808E220A93848AB2868C0 +:204800004808C220A920035B2868C22038A510E902008528A512E90000852AE210AE03A0B6 +:20482000E001F00706282628CA80F518A5286D1CA08502A52A6D1EA08504282BAB6B8B0BCE +:20484000084808E220A90048AB28684808C220A920035B2868C220A51C8506A51E85082249 +:20486000F34739224410009009E220640E282BAB386BE220850E282BAB186B8B0B0848089D +:20488000E220A90048AB28684808C220A920035B2868C220A51C8506A51E850822F34739EE +:2048A000222410009009E220640E282BAB386BE220850E282BAB186B404600B8483900001F +:2048C00000000000405300C448390002BB483900404800D048390006C74839008B0B0848B5 +:2048E00008E220A93848AB28684808C220A920035B2868C230AF4AA0388528AF4CA0388599 +:204900002AA900048548A90000854AA00000B7288544C8C8B7288546E220A00000B744F06C +:2049200024D748D003C880F5C220A00500B72848C8C8B728852A688528A528D0CEA52AD039 +:20494000CA282BAB6B22564939E220A00400B7288F21030080EBDA5A8B0B084808E220A9BA +:204960003848AB28684808C220A920035B2868C230844B9818690004AAA90004A838A900D5 +:2049800001E54B540000282BAB7AFA6B8B0B084808E220A93848AB28684808C220A9200363 +:2049A0005B2868C210E220A20000B5E0F01BC920B005A907826400C9619008C97BB00429DF +:2049C0005F95E0E8E00001D0E122DC4839A5E0C93AD007A0010022564939A00000A920990E +:2049E0003AA0C8C00B00D0F7A20000A00000B5E0F020C92EF00A993AA0E8C8C00800D0EE02 +:204A0000E8A00800B5E0F00A993AA0E8C8C00B00D0F2E220640E282BAB386BE220850E28F5 +:204A20002BAB186B8B0B084808E220A90048AB28684808C220A920035B2868C230228C492F +:204A400039B005282BAB186B22A64539B003825600C220225B4239B007E220A90882470009 +:204A600022DA4239E220A00000B718D005A909823500C9E5F026A00B00B7188908D01D292B +:204A80000FC90FF017A20000A00000B718DF3AA038D009C8E8E00B00F01680EF22F54239AB +:204AA000900582BFFFA908E220850E282BAB186BC220A01A00B7188510A01400B718851240 +:204AC000E220640E282BAB386B8B0B084808E220A90048AB28684808C220A920035B2868BC +:204AE000C230A51E48A51C4822244A3968851C68851E900F223E48399009E220640E282BF3 +:204B0000AB386B282BAB186B8B0B084808E220A90048AB28684808C220A920035B2868C2FF +:204B200030A5100A8528A5122A852A18A51065288528A512652A852A462A6628A52829FF5A +:204B400003AA462A6628462A6628462A6628462A6628462A6628462A6628462A6628462A46 +:204B60006628462A662818AF14A03865288524AF16A038652A8526282BAB6B8B0B08480892 +:204B8000E220A90048AB28684808C220A920035B2868C230A20000A95A5A8F00A538E8E8D1 +:204BA000E00004D0F522084B39A5248502A5268504A900A58506A9380085082244100090AD +:204BC00017E602A900A78506A938008508224410009005282BAB386BE220A906850E282B4A +:204BE000AB186B8B0B4808E220A90048AB28684808C220A920035B2868C230A5108524A595 +:204C0000128526A2070046266624CAD0F918A5246F14A0388524A5266F16A0388526A52424 +:204C20008502A5268504A900A58506A93800850822441000B006E220A906800EC220A51050 +:204C40000A0A29FF01AA2BAB386B2BAB186B08E220AF01A038C900D008226F4C39900D8035 +:204C60000622D74C399005640E28386B28186B8B0B084808E220A90048AB28684808C220E5 +:204C8000A920035B2868C230227B4B39B003824100A510890100D00DC220BF00A53829FF12 +:204CA0000F8528800CC220BF00A5384A4A4A4A8528C220A52829F00FC9F00FF00FA5288569 +:204CC000106412E220640E282BAB386BE220A90A850E282BAB186B8B0B084808E220A900D7 +:204CE00048AB28684808C220A920035B2868C23022E34B399053E220BF00A5388528BF01DF +:204D0000A5388529BF02A538852ABF03A538852BA528C9FFD018A529C9FFD012A52AC9FFE0 +:204D2000D00CA52BC90FD006E220A90A801BE220A5288510A5298511A52A8512A52B851333 +:204D4000E220640E282BAB386BE220850E282BAB186B08C230224E4C399009223E4839902F +:204D60000328386B28186B084808C220A920035B2868E220AF01A038C900D00822F84D39FE +:204D8000900D800622D04E399005640E28386B28186B8B0B084808E220A90048AB28684896 +:204DA00008C220A920035B2868C230A900A58506A938008508A5248502A5268504224410FF +:204DC00000B007E220A906821C00C220E602D002E604A900A78506A9380085082244100088 +:204DE000B00DE220A906E2208500282BAB186BE2206400282BAB386BDA8B0B084808E2206C +:204E0000A90048AB28684808C220A920035B2868C230A902008510A90000851222084B395D +:204E200022924D39B007E220A906829900C230A510890100D009BF00A53829FF0F8008BF91 +:204E400000A5384A4A4A4A8528C90000F0038239008A852AA510890100D00DBF00A538092F +:204E6000FF0F9F00A538800BBF00A53809F0FF9F00A538229A4F39B007E220A9148246008B +:204E8000E220640E282BABFA386BE610D002E61222084B39E00000F0038293FFA524CF18FE +:204EA000A038D00FA526CF1AA038D007E220A91282130022924D399006A200008270FFE241 +:204EC00020A906820000E220850E282BABFA186B8B0B084808E220A90048AB28684808C243 +:204EE00020A920035B2868C230A900A38506A938008508AF14A0388502AF16A0388504223A +:204F0000441000B007E220A906826B00C220A902008510A900008512A20800BF00A338D072 +:204F200006BF02A338F036E610D002E612E8E8E8E8E0000290E5E602D018E604A504CF1AA6 +:204F4000A038900EA502CF18A0389006E220A912802522441000901BA2000080BEC220A9F1 +:204F6000FFFF9F00A338A9FF0F9F02A33822241000B00DE220A906E220850E282BAB186BAC +:204F8000E220640E282BAB386BE220AF01A038C900D0045CE14F394C2F508B0B4808E2205D +:204FA000A90048AB28684808C220A920035B2868C230A900A58506A938008508A524850253 +:204FC000A5268504222410009014A900A78506A938008508E602D002E604222410002BAB6A +:204FE0006B8B0B084808E220A93848AB28684808C220A920035B2868C230227B4B398A89E3 +:205000000100D008BD00A52900F08006BD00A5290F009D00A5229A4F39B00BE220A90685A5 +:205020000E282BAB186BE220640E282BAB386B8B0B08C2304808E220A93848AB2868480836 +:20504000C220A920035B286822E34B39A900009D00A59D02A522241000B00BE220A90685B8 +:205060000E282BAB186BE220640E282BAB386B8B0B084808E220A93848AB28684808C22006 +:20508000A920035B2868C230A51248A5104822674D39B009688510688512827D00A5108D66 +:2050A00036A0A5128D38A0227B483990E7688510688512224E4C39B0FAE220AF01A038C97B +:2050C00000D03DC22022084B39A510890100D011AD36A029FF0F8D36A0BD00A52900F080FB +:2050E00010AD36A00A0A0A0A8D36A0BD00A5290F000D36A09D00A5229A4F39B022821A0021 +:20510000C220AD36A09D00A5AD38A09D02A522241000B00BE220A906850E282BAB186BE267 +:2051200020640E282BAB386B8B0B084808E220A90048AB28684808C220A920035B2868C275 +:20514000308528290F00852AA5284A4A4A4A8528290F008F000100A90A008F020100AF0429 +:20516000010018652A852AA5284A4A4A4A8528290F008F000100A964008F020100AF04011B +:205180000018652A852AA5284A4A4A4A290F008F000100A9E8038F020100AF0401001865A5 +:2051A0002A282BAB6B8B0B084808E220A93848AB28684808C220A920035B2868C210E2204B +:2051C000AF0E08AF09088F0E08AFAF0F08AF8529AF0A08AF8528C220A52822285139852886 +:2051E00038E9BC07C2200A0A0A0A0A0A0A0A0A2900FEA016009720E220AF0908AFC220297F +:20520000FF002228513929FF000A0A0A0A0A29E001A0160017209720E220AF0608AFC22063 +:2052200029FF0022285139291F00A0160017209720E220AF0408AF291FC22029FF0022287E +:205240005139C2200A0A0A0A0A0A0A0A0A0A0A2900F8A018009720E220AF0208AFC220296F +:20526000FF0022285139C2200A0A0A0A0A29E007A0180017209720E220AF0008AFC220291E +:20528000FF0022285139C220291F00A0180017209720AF0E08AF29F7008F0E08AF282BAB85 +:2052A0006B8B0B084808E220A93848AB28684808C220A920035B2868C230A00200B7208556 +:2052C00028C8C8B720852AE220A00000A20000B72895E0F004E8C880F6228C493922244A1E +:2052E000399007E220A90B82D200E220A00100A501972022674D39B00382C400C220A00A40 +:2053000000A5109720C8C8A5129720A00E00B720851CC8C8B720851E227B4839B000C22043 +:2053200022B64339B01AC220A00A00B7208510C8C8B7208512222F5039E220A908827C00CE +:20534000E220A00000A9009718C8C02000D0F8A00000B93AA09718C8C00B00D0F5C220A027 +:205360000A00B720A01A009718A00C00B720A014009718A01200B720A01C009718A0140055 +:20538000B720A01E009718A90000A016009720A018009720A01600B720A010009718A018A0 +:2053A000009718A01800B720A00E009718A016009718C22022744439B00B8004E220850E24 +:2053C000282BAB186BE220640E282BAB386BDA5A8B0B084808E220A93848AB28684808C29D +:2053E00020A920035B2868C230A90000A2000095E0E8E8E00001D0F7A520D004A522F02735 +:20540000A00200B7208528C8C8B720852AA528D004A52AF012E220A20000A00000B7289526 +:20542000E0F004E8C8D0F6282BAB7AFA6B8B0B084808E220A93848AB28684808C220A920F6 +:20544000035B2868C230A96C548F640300A939008F660300A979548F680300A939008F6AE8 +:205460000300221B5B39B000282BAB6B40733A68656C6C6F2E6261730040733A68656C6C48 +:205480006F322E62617300DA5A0B8B084808E220A93848AB28684808C220A920035B286896 +:2054A000E220A00000B7208938F005A90F821C0522CE533922244A39B003821305E220A02E +:2054C0000100A5019720C220A00E00B720851CC8C8B720851E223E4839B00382F204A00AA6 +:2054E00000A5109720C8C8A5129720A00600A5109720C8C8A5129720A01C00B718A01200F5 +:205500009720A01E00B718A014009720E220A00000A9391720972082BD04DA5A0B8B08480D +:2055200008E220A93848AB28684808C220A920035B286822A152399018C230A00600A900DD +:20554000009720C8C89720E220A00000A93A828604827804DA5A0B8B084808E220A9384871 +:20556000AB28684808C220A920035B2868E220A00000B7208902F00922ED5539B003824FE9 +:205580000422D15A39824F04DA5A0B8B084808E220A93848AB28684808C220A920035B28A3 +:2055A00068C210E220E220A00100B720850122A64539C220A00600B7208510C8C8B7208589 +:2055C00012224E4C399013A00E00B720851CC8C8B720851E223E4839B00382F303A006003F +:2055E000A5109720C8C8A512972082EA03DA5A0B8B084808E220A93848AB28684808C22018 +:20560000A920035B2868C210E220A00100B720850122A64539C220A00E00B720851CC8C823 +:20562000B720851EA00600B7208510C8C8B7208512D01AA510D016A00A00B7208510C8C8B5 +:20564000B7208512226F5039B00C828303227B4839B003827A03827E03DA5A0B8B08480809 +:20566000E220A93848AB28684808C220A920035B2868C23022CE5339228C493922A64539F7 +:20568000B003824B03C230225B4239B0038240038244035CF54239DA5A0B8B084808E2206C +:2056A000A93848AB28684808C220A920035B2868C23022244A39B003821503A01A00B7180C +:2056C0008510A01400B7188512A5108D2AA0A5128D2CA0224E4C39902FA5108D2EA0A51284 +:2056E0008D30A0AD2AA08510AD2CA08512222F5039B00382DA02AD2EA085108D2AA0AD3002 +:20570000A085128D2CA080CBAD2AA08510AD2CA0851222894F39B00382B502E220A00000D1 +:20572000A9E5971822744439B00382A30282A702DA5A0B8B084808E220A93848AB28684844 +:2057400008C220A920035B2868C23022244A39B0038278028280025C744439DA5A0B8B081B +:205760004808E220A93848AB28684808C220A920035B2868C23022875439B003825102C218 +:2057800020A01200B720852CC8C8B720852EA00E00B7208530C8C8B7208532A536C9400059 +:2057A000B0045C815839A00800A20000E220BFF25739F037D93AA0D028BFF35739D93BA072 +:2057C000D01FBFF45739D93CA0D016C220BFF557398528E220BFF75739852AA20000DC486C +:2057E00003C2308A18690600AA80C1E220A91182DA01504758F9573900C210E220A00000B3 +:20580000B730C950D015C8B730C947D00EC8B730C958D007C8B730C901F017A91022CC59DF +:2058200039C22038A52CE90800852CA52EE90000852EC220C8B7308534853CC8C8B730852C +:2058400036853EC8C8E220B7308734C220E634D002E63638A52CE90100852CA52EE90000D1 +:20586000852EA52CD004A52EF014C8CC0EA0D0D522524D39B003825701A0000080C78256CC +:2058800001C230A00000E220B7309734C22038A52CE90100852CA52EE90000852ED004A553 +:2058A0002CF01BC8CC0EA0D0DD18A5346D0EA08534A536690000853622885539B0C58216B9 +:2058C000015A8B0B084808E220A93848AB28684808C220A920035B2868C230A00E00B720B9 +:2058E0008528C8C8B720852AA00000A900009728C8C8C00002D0F7282BAB7A6B5A8B0B08E9 +:205900004808E220A93848AB28684808C220A920035B2868C230A00E00B7208528C8C8B77D +:2059200020852AA00000E220A7309728C220E630D002E632C8C00002F00CA530C538D0E670 +:20594000A532C53AD0E0282BAB7A6BDA5A0B8B084808E220A93848AB28684808C220A9205B +:20596000035B2868C230A0120038A538E5309720C8C8A53AE5329720A0120018B72069016C +:205980000097209009C8C8B720690000972022C1583922FC5839221A5539B003823100A538 +:2059A00030C538D006A532C53AF01D22C1583922FC5839A00600A900009720C8C89720226F +:2059C000ED5539B0DA8208005CD75939E220850E2818AB2B7AFA6BE2206400640E2838AB06 +:2059E0002B7AFA6BDA5A0B8B084808E220A90048AB28684808C220A920035B2868E220C2A0 +:205A000010A900A200009F00AD38E8E02000D0F6C220A900AB8F0EAD38A938008F10AD38DC +:205A2000A5408F02AD38A5428F04AD38A90000853C853EA900AD8520A938008522A9FFFF55 +:205A40008F5403008F56030022181100B014827FFFC220A53CD00BA53ED007E220A91182D3 +:205A60006AFFE220A54248A54148A54048A95C853B225B0300E220686868825AFFDA5A0B98 +:205A80008B084808E220A93848AB28684808C220A920035B2868C210A20000E220BD20ADD4 +:205AA0008910F014C2208A18692000AAE0000190EAE220A9168214FF09109D20ADC2208AF2 +:205AC000186920AD8520A9380069000085228206FFDA5A0B8B084808E220A93848AB2868D3 +:205AE0004808C220A920035B2868E220C210A900872082E2FEDA5A0B8B084808C220A9206A +:205B0000035B2868C230A00E00B730AAB734A8A9000254383828AB2B7AFA6BDA5A0B8B08B5 +:205B20004808E220A90048AB28684808C220A920035B2868227D5A39B0038293FEC230A074 +:205B40000200A5449720C8C8A5469720C230A5208530A5228532227D5A39B00FA53085201C +:205B6000A532852222D15A398265FEC230A5208534A5228536A00200A5489734C8C8A54A71 +:205B80009734A5308520A532852222F01000B00FA5348520A536852222D15A3982BDFFA0FD +:205BA0001200B7309734C8C8B730973422F55A39A5348520A536852222F41000B00FA5307B +:205BC0008520A532852222F8100082C3FFA5308520A532852222001100B019E220A50EC9C2 +:205BE0000AF032C220A5348520A536852222F8100082CAFF22F55A39A00600A9000097345E +:205C0000C8C89734A5348520A536852222FC100090D182B8FFC220A5348520A5368522225D +:205C2000F81000A5308520A532852222F8100082A5FD08C220C90200F007C220A9F8138054 +:205C400005C220A9F8128F000700E220A9AF8F020700286B080B4808C220A900075B2868AF +:205C6000C23048E220A00300B70009809700C22068A000009700E220A00300B70049809731 +:205C8000002B286B080B4808C220A900075B2868E220C210297FA0030097002B286B080BDF +:205CA000C2304808C220A900075B2868A9010022545C39E220A90322845C39A9E1A002005B +:205CC00097002B286B080BC2304808C220A900075B2868E220A00500B7002901D0042B28EE +:205CE000186B2B28386B080BC2304808C220A900075B2868E220A00500B7002901F0FAA047 +:205D00000000B7002B286B080BC2304808C220A900075B2868E22048A00500B7002920F05D +:205D2000FA68A0000097002B286B08E220BD0000F00722075D39E880F4286BE220AF04E803 +:205D4000AF29FB8F04E8AF6BE220AF04E8AF29FB09048F04E8AF6BE220AF04E8AF29FE094D +:205D6000018F04E8AF6BE220AF04E8AF29FD09028F04E8AF6BE220AF04E8AF29FE8F04E88D +:205D8000AF6BE220AF04E8AF29FD8F04E8AF6BE220AF04E8AF2903C900F014AF04E8AF094A +:205DA000808F04E8AFAF04E8AF2940C940D0F66B8B0B084808E220A90048AB28684808C21E +:205DC00020A920035B2868E220A9F08D1E0022A8100022A0100022165E39B003821500A938 +:205DE00002850122A64539B00382080022595639B0028000226C1000282BAB6B08E220AF9C +:205E000004EAAF2901C901F0F6286B08E220A9018F01EAAF286B0B8B084808E220A9004827 +:205E2000AB28684808C220A920035B2868E220A9018F02EAAFA9018F03EAAF22FC5D39AF30 +:205E400005EAAFD007640028AB2B386B8D0603A98B850028AB2B186B0B8B084808E220A95F +:205E60000048AB28684808C220A920035B2868E220AF80E8AF09028F80E8AFA9008F07EA14 +:205E8000AFA5020A8F08EAAFA5032A8F09EAAFA5042A8F0AEAAFA9028F02EAAFA9018F0359 +:205EA000EAAF22FC5D39AF05EAAFD036E220AF13EAAF850AAF12EAAF850BC210A00000AF4B +:205EC00010EAAF9706C8C00002D0F4AF05EAAFD0116400AF80E8AF29FD8F80E8AF28AB2B0C +:205EE000386B8D0603A9828500AF80E8AF29FD8F80E8AF28AB2B186B0B8B084808E220A90D +:205F00000048AB28684808C220A920035B2868E220AF80E8AF09028F80E8AFC210A000002A +:205F2000B7068F20EAAFC8C00002D0F4A9008F07EAAFA5020A8F08EAAFA5032A8F09EAAF52 +:205F4000A5042A8F0AEAAFA9038F02EAAFA9018F03EAAF22FC5D39AF05EAAFD0116400AF9C +:205F600080E8AF29FD8F80E8AF28AB2B386B8D0603A9828500AF80E8AF29FD8F80E8AF289D +:205F8000AB2B186B8B0B084808E220A90048AB28684808C220A900035B2868E220A9F08D9B +:205FA0001E0022810B3922A50939C230227A6239B00382200022796939900382030082146A +:205FC00000220C6839900382030082080022E15F39B0028000226C1000222A6339282BABFF +:205FE0006BE220A900A200009F0000031AE8E00002D0F5C220A900008F260300A903008F20 +:20600000280300A964008F220300A900008F24030022A067396B40463A53414D504C452EB8 +:206020005047582048656C6C6F2C20776F726C6421000B084808C220A900035B2868E220EA +:20604000A91E22554139A52C3012AFF413AF8980F0F4A90022554139282B3860282B1860D3 +:206060000B084808C220A900035B2868E220A91E22554139A52C3012AFF413AF8901D0F4C4 +:20608000A90022554139282B3860282B18600B084808C220A900035B2868E220A91E225594 +:2060A0004139A52C3012AFF413AF8910D0F4A90022554139282B3860282B18600B084808DE +:2060C000C220A900035B2868E220A91E22554139A52C3014AFF413AF2940C940D0F2A90036 +:2060E00022554139282B3860282B18600B084808C220A900035B2868E220A91E2255413963 +:20610000A52C3014AFF413AF29C0C980D0F2A90022554139282B3860282B1860DA08C2100D +:20612000A2803EEACAE00000D0F928FA6BDA8B0B084808E220A90048AB28684808C220A944 +:2061400000035B2868221C6139E230A200A9009D1005E8E010D0F8AFF413AF29C0C980F043 +:2061600004227A6239E210A200203260B003825E00BD00058FF513AF221C6139E8EC300522 +:20618000D0E7AD3305D003828000103CA50B3003823C00AFF413AF8980F0F18920D0038254 +:2061A0006800C210A00000A50B3003822100AFF413AF8920F0548980F0EDB7268FF513AF24 +:2061C000C8C00002D0E1804220BC60A50B3007E220A98C829C00AFF413AF29C0C9C0D0EBB8 +:2061E000AFF413AF8920D003828300C210A00000A50B10DBAFF413AF29C0C9C0D0F2AFF56F +:2062000013AF9726C8C00002D0E6AD3205F034E210A200A91E2255413920BC6090B1AFF54A +:2062200013AF20BC6090A8AFF513AF9D1005203260909CAFF413AF2950C950D006E8EC325F +:2062400005D0E4C210A20A00226B1639AFF413AF8910F01220BC60B0038273FFAFF513AFE2 +:206260009D1005E880DD6420282BABFA386BE220A9858520282BABFA186B08C210E220A933 +:20628000008FF213AFA2E803A0000022781639A9048FF213AFEAEAEAEAA9008FF413AFA976 +:2062A000008FF713AFA28FC5A0200022781639228A63399025228A6339901F228A6339902B +:2062C00019228A63399013224C6439900D22F36339900722F6623928386B28186B08C220B7 +:2062E00078A984038F4EA038E220AF4C010029FE8F4C0100286B0822DD6239E220AFF21355 +:20630000AF8910D01FA9148FF213AF2032609017A21E8BA0410022781639AF0B0300098092 +:206320008F0B030028386B28186B08E220A9048FF213AFC22078A900008F4EA038E220AFE7 +:206340004C010009018F4C0100AF0B0300297F8F0B0300286B0B084808C220A900035B2801 +:206360006822DD6239E220A9078D0005A5008D0105A9028D30059C33059C3205222D6139A2 +:206380009004282B386B282B186B8B0B084808E220A90048AB28684808C220A900035B2820 +:2063A00068C230A20A00226B1639E2206406A9FF850A208E609030203260902BA9088FF5E8 +:2063C00013AF20BC609020203260901BAFF513AF85062032609010AFF513AF850AE2209CDC +:2063E0002003282BAB386BE220A98C8D2003282BAB186B8B0B084808E220A90048AB286855 +:206400004808C220A900035B2868C230A20A00226B1639E220208E6090262032609021A967 +:20642000038FF513AF2032609016A9CF8FF513AF203260900BA9018FF513AF282BAB386B1F +:20644000E220A98C8D2003282BAB186B8B0B084808E220A90048AB28684808C220A90003DA +:206460005B2868C230A20A00226B1639E220208E6090362032609031A9138FF513AF20321A +:20648000609026A9008FF513AF203260901BA9448FF513AF2032609010A9008FF513AF2006 +:2064A0008E609005282BAB386BE220A98C8D2003282BAB186B8B0B084808E220A90048ABC4 +:2064C00028684808C220A900035B2868E220A90A8D0005A9018D30059C3305A9078D320568 +:2064E000222D61399027AD10058506AD11058507AD12058508AD13058502AD14058501ADCA +:206500001505850AAD16058504282BAB6B282BAB186B0B08E220A90E8D0005A9018D3005CD +:206520009C3305A90A8D3205222D61399003282B6B282B186B8B0B084808E220A90048AB74 +:2065400028684808C220A900035B286822DD6239E220A90F8D0005A50129010A0A05008D86 +:206560000105A5028D0205A9038D30059C33059C3205222D61399005282BAB386B282BABA8 +:20658000186B8B0B084808E220A90048AB28684808C220A900035B286822DD6239E220A94E +:2065A0000609408D0005A50129010A0A05008D0105A5028D0205A5018D0305A5038D0405CA +:2065C000A9028D0505A9128D0605A91B8D0705A9FF8D0805A9098D3005A9018D3305A907F4 +:2065E0008D3205222D613908AD10058506AD11058507AD12058508AD13058502AD14058562 +:2066000001AD1505850AAD16058504289004282BAB6B282BAB186B8B0B084808E220A90093 +:2066200048AB28684808C220A900035B2868E22022DD6239A90509408D0005A50129010A0F +:206640000A05008D0105A5028D0205A5018D0305A5038D0405A9028D0505A9128D0605A9A6 +:206660001B8D0705A9FF8D0805A9098D3005A9FF8D3305A9078D3205222D613908AD10051C +:206680008506AD11058507AD12058508AD13058502AD14058501AD1505850AAD1605850490 +:2066A000289004282BAB6B282BAB186BDA5A0B084808C220A90C035B2868C2306408640A4C +:2066C000A22000060026022608260AA50838E504A8A50AE5069006850A8408E600CAD0E348 +:2066E000282B7AFA608B0B084808E220A90048AB28684808C220A900035B2868C230A522D5 +:20670000850CA524850EA924008510641220AC66E220A50C8502C220A514850CA516850ECE +:20672000A912008510641220AC66E220A50C29018501A5141A8503282BAB6B8B0B0848084C +:20674000E220A90048AB28684808C220A900035B2868E220A9038D3405C23022E56639E254 +:2067600020A503F029C220228265399014E220A50629D0D019E220A9008D2003282BAB3850 +:206780006BE220CE34053013227A623980D7E220A9828004E220A9848D2003282BAB186BA3 +:2067A0008B0B084808E220A90048AB28684808C220A900035B2868E220A9038D3405C2308E +:2067C00022E5663922176639B003822800E220A50629D0D00CE220A9008D2003282BAB38CB +:2067E0006BE220A5078902F004A98680178910D0E48980D0E0E220CE3405D0C8A9838004E4 +:20680000E220A9848D2003282BAB186B8B0B084808E220A90048AB28684808C220A900031E +:206820005B2868227A6239E220C210A900A200009F00A338E8E00002D0F6A900850022F6C7 +:206840006239C230A9000085228524A900A38526A938008528223B6739B00382D300E22026 +:20686000A9008F01A038A9008F02A038E220AF0DA3388F03A038C220A900008F04A0388F6D +:2068800006A038AF16A3388F10A038A900008F12A038A901008F14A038186F10A0388F18A6 +:2068A000A038A900008F16A0388F1AA03818AF18A0386F10A0388F20A038A900008F22A0CA +:2068C00038AF11A3388F24A0384A4A4A4A186F20A0388F1CA038A900008F1EA038AF13A39D +:2068E000388F08A038A900008F0AA038AF0EA3388F0CA038A900028F0EA038E220AF26A332 +:2069000038C9298014C220AF27A3388F26A038AF29A3388F28A038800DC220A900008F268A +:20692000A0388F28A038E220A9008520282BAB386B282BAB186B8B0B084808E220A900489D +:20694000AB28684808C220A900035B2868E230E001F00FE002F011E003F0136420282BABF6 +:20696000386B22F6623980F3222A633980ED22556339B0E7282BAB186B0B084808C220A9E0 +:2069800000035B286822F66239E220AFF713AF8980F042A9008500A9008501A950850222B2 +:2069A0003565399034C210A21E8BA0410022781639228A6339A50629D0D01E2255633990DC +:2069C00018A21E8BA0410022781639228A6339A50629D0D004282B386B282B186B8B0B0860 +:2069E0004808E220A90048AB28684808C220A920035B2868220C6839C230A90000A2000024 +:206A00009F00A338E8E8E00002D0F5E220A20000BFC56A399F00A338E8E0C900D0F2A0004D +:206A200000A24000B73C9F00A338F007E8C8C08000D0F1C220A955AA8FFEA438C220A900E1 +:206A4000A38506A938008508A9000085028504E220A900850122241000B009222A63392891 +:206A60002BAB186B222A6339E220A9008500282BAB386B08E220AF4EA038D006AF4FA03879 +:206A8000F028AF4EA0383A8F4EA038C9FFD00BAF4FA0383A8F4FA0388010AF4EA038D00A72 +:206AA000AF4FA038D004222A6339E220AF2D0300F0113A8F2D0300D00AAF2C030009808F99 +:206AC0002C0300286BEB009043323536444F5320000201010002E000400BF0090012000255 +:206AE00000000000000000000000002978563412554E5449544C4544202020464154313252 +:056B0000202020804070 +:206B4500C220A940A38F600300A938008F62030022E45939B00CE2204BAB620800FA221C0D +:206B65001000EA80FD436F756C64206E6F742066696E64206120626F6F7461626C65206205 +:206B8500696E6172792E0D0008C220A900A38F260300A938008F28030022BB6C39B0038252 +:206BA500AB00C210E220A02800A23600BF01A33822181000BF00A33822181000E8E8888808 +:206BC500D0EAC210E220A01400A21400BF01A33822181000BF00A33822181000E8E888880F +:206BE500D0EA226C1000C230A901008F220300A900008F240300A900A38F260300A93800A4 +:206C05008F280300A20000A9A55A9F00A338E8E8E00002D0F522DA6D39B006226C10008004 +:206C25002CA901008F220300A900008F240300A900A58F260300A938008F28030022496DED +:206C450039B006226C10008004226C1000286BE22020776CA9008F35E8AF8F34E8AF8F32C9 +:206C6500E8AFA9018F33E8AFA9A08F36E8AF20956C6B08E220AF37E8AF2980C980F0F628BD +:206C85006008E220AF37E8AF2940C940D0F6286008E220AF37E8AF29C0C940D0F628386049 +:206CA5008F07030028186008E220AF37E8AF2908C908D0F628605A8B0B084808E220A900CC +:206CC50048AB28684808C220A920035B2868E22020956CA505290709A08F36E8AF20956C20 +:206CE500E220A9008F32E8AF8F33E8AF8F34E8AF8F35E8AFA9EC8F37E8AFF02920776C2050 +:206D0500956C902DC230A00000AF38E8AF9706C8C8C00002D0F3E220A90085008D06032800 +:206D25002BAB7A386BE220A987800AE220A98A8004E220A9828500AF31E8AF8D0603282BD4 +:206D4500AB7A186B5A8B0B084808E220A90048AB28684808C220A920035B2868E220209570 +:206D65006CA505290709E08F36E8AF20956CE220A9018F32E8AFA5028F33E8AFA5038F34F3 +:206D8500E8AFA5048F35E8AFA9218F37E8AFEAEAEAEA20956C902BE220AF30E8AFA0000090 +:206DA500C220AF38E8AF9706C8C8C00002D0F3EAEAEAEAE220A90085008D0603282BAB7AD6 +:206DC500386BE220AF31E8AF8D0603A9828500282BAB7A186B5A8B0B084808E220A9004816 +:206DE500AB28684808C220A920035B2868E22020956CA505290709E08F36E8AF20956CE225 +:206E050020A9018F32E8AFA5028F33E8AFA5038F34E8AFA5048F35E8AFA9308F37E8AFEA25 +:206E2500EAEAEA20956C9033C230A00000B7068F38E8AFC8C8C00002D0F3EAEAEAEA20958C +:206E45006C9018AF37E8AF892100D00FE220A90085008D0603282BAB7A386BE220AF31E868 +:206E6500AF8D0603A9828500282BAB7A186B202020200B0C0B0C0B0C0B0C0B0C2046464638 +:206E850046464646204D4D4D4D4D4D4D4D20585820202020585858200D2020200B0C0B0C3A +:206EA5000B0C0B0C0B0C2046462020202020204D4D204D4D204D4D202020585820585858D6 +:206EC5002020200D20200B0C0B0C0B0C0B0C0B0C2046464646462020204D4D204D4D204DEE +:206EE5004D202020205858582020202020200D200B0C0B0C0B0C0B0C0B0C2046462020204C +:206F05002020204D4D204D4D204D4D20205858582020585820202020200D0B0C0B0C0B0CD4 +:206F25000B0C0B0C2046462020202020204D4D204D4D204D4D20585858202020202058582C +:206F4500202020200D0D4332353620464F454E495820464D58202D2D20332C3637302C30CC +:206F6500313620427974657320467265650D7777772E63323536666F656E69782E636F6D46 +:206F8500202D204B65726E656C2076657273696F6E3A2076302E312E302D616C7068612BDD +:206FA500313034342028323032312D30332D3038290D001D1D1D1D1D1D8D8D4D4D2D2D5D82 +:206FC5005DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD1D1D1D4C +:206FE5001D1D8D8D4D4D2D2D5D5DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDCC +:20700500FDFDFDFDFDFDFD1D1D1D1D8D8D4D4D2D2D5D5DFDFDFDFDFDFDFDFDFDFDFDFDFD6B +:20702500FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD1D1D1D8D8D4D4D2D2D5D5DFDFDFDFD6B +:20704500FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD1D1D8D8D4DDB +:207065004D2D2D5D5DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFB +:20708500FDFDFDFDFD000000FF000080FF008000FF800000FF008080FF808000FF80008080 +:2070A500FF808080FF0045FFFF13458BFF000020FF002000FF200000FF202020FF404040AC +:2070C500FFFFFFFFFF000000FF000080FF008000FF800000FF002020FF202000FF20002076 +:2070E500FF202020FF1E69D2FF13458BFF000020FF002000FF400000FF101010FF40404087 +:20710500FFFFFFFFFF436D6420307841412054657374207061737365642E2E2E0D00436D6A +:207125006420307841422054657374207061737365642E2E2E0D00436D6420307836302042 +:2071450045786563757465642E0D00436D642030784646202852657365742920446F6E6536 +:207165002E0D00436D642030784545204563686F2054657374207061737365642E2E2E0DD3 +:20718500004B6579626F6172642050726573656E740D004E6F204B6579626F61726420413C +:2071A50074746163686564206F72204661696C656420496E69742E2E2E0D004E4F205349E3 +:2071C500474E415455524520464F554E442E00424D50204C4F414445442E0045584543557A +:2071E50054494E4720424D502050415253455200494445204844442050726573656E743A6F +:2072050000426F6F7420444950207377697463682073657474696E67732061726520696E46 +:2072250076616C69642E005072657373205220746F2072657472792C204220746F20676FAC +:2072450020746F2042415349432E0D00556E61626C6520746F20726561642074686520537F +:207265004420636172642E00556E61626C6520746F20726561642066726F6D207468652072 +:207285004944452064726976652E00556E61626C6520746F20726561642066726F6D207431 +:2072A500686520666C6F7070792064726976652E00426F6F74696E672066726F6D20666C42 +:2072C5006F7070792E2E2E000D52454144592E0041424F5254204552524F520030313233BF +:0D72E50034353637383941424344454600C0 :20730000001B313233343536373839302D3D080971776572747975696F705B5D0D006173C8 :20732000646667686A6B6C3B2760005C7A786376626E6D2C2E2F002A0020008182838485EB :20734000868788898A0000001100009D001D0000910000000000008B8C0000000000000012 @@ -991,1145 +995,1016 @@ :2079A0000000000001555555555501FFFF5501000000000000010101010155FF5501000019 :2079C0000000000000000000015555550100000000000000000000000155550100000000FA :2079E000000000000000000000010100000000000000000000000000000000000000000085 -:02000004003FBB -:20F0000000000000000000007E81A581BD99817E3C7EDBFFC37E3C0000EEFEFE7C381000B7 -:20F0200010387CFE7C381000003C18FFFF08180010387CFEFE1038000000183C1800000064 -:20F04000FFFFE7C3E7FFFFFF003C428181423C00FFC3BD7E7EBDC3FF0103070F1F3F7FFF36 -:20F06000FFFEFCF8F0E0C0800406070404FCF8000C0A0D0BF9F91F1F00927C44C67C9200FE -:20F08000000060787E7860000000061E7E1E0600187E181818187E1866666666660066008C -:20F0A000FFB67636363636007EC1DC22221F837E0000007E7E000000187E18187E1800FF77 -:20F0C000187E18181818180018181818187E1800000406FF06040000002060FF6020000002 -:20F0E000000000C0C0C0FF00002466FF66240000000010387CFE0000000000FE7C3810003A -:20F100000000000000000000303030303000300066660000000000006C6CFE6CFE6C6C00EB -:20F12000107CD27C867C1000F096FC183E72DE0030483078CECC78000C0C18000000000059 -:20F140001060C0C0C0601000100C0606060C1000005438FE385400000018187E1818000051 -:20F1600000000000000018700000007E00000000000000000000180002060C183060C000F5 -:20F180007CCEDEF6E6E67C001838781818183C007CC6060C3060FE007CC6063C06C67C000F -:20F1A0000E1E3666FE060600FEC0C0FC0606FC007CC6C0FCC6C67C00FE060C1830606000DD -:20F1C0007CC6C67CC6C67C007CC6C67E06C67C0000300000003000000030000000302000F5 -:20F1E000001C3060301C000000007E007E0000000070180C187000007CC60C183000300039 -:20F200007C829AAAAA9E7C007CC6C6FEC6C6C600FC66667C6666FC007CC6C0C0C0C67C00C0 -:20F22000FC6666666666FC00FE6268786862FE00FE6268786860F0007CC6C6C0DEC67C00F0 -:20F24000C6C6C6FEC6C6C6003C18181818183C001E0C0C0C0CCC7800C6CCD8F0D8CCC600C6 -:20F26000F06060606062FE00C6EEFED6C6C6C600C6E6F6DECEC6C6007CC6C6C6C6C67C0034 -:20F28000FC66667C6060F0007CC6C6C6C6C67C0CFC66667C6666E6007CC6C07C06C67C00DC -:20F2A0007E5A181818183C00C6C6C6C6C6C67C00C6C6C6C6C66C3800C6C6C6C6D6EEC60096 -:20F2C000C66C3838386CC6006666663C18183C00FEC60C183066FE001C18181818181C001C -:20F2E000C06030180C0602007030303030307000000010386CC6000000000000000000FF49 -:20F30000303018000000000000007C067EC67E00C0C0FCC6C6C6FC0000007CC6C0C67C0023 -:20F3200006067EC6C6C67E0000007CC6FEC07C003C6660F06060600000007EC6C67E067CDB -:20F34000C0C0FCC6C6C6C6001800381818183C00000C001C0C0CCC78C0C0C6D8F0D8C60015 -:20F360003818181818183C000000EEFED6C6C6000000FCC6C6C6C60000007CC6C6C67C00F5 -:20F380000000FCC6C6FCC0C000007EC6C67E06060000DE766060600000007CC07C067C0027 -:20F3A00018187E1818181E000000C6C6C6C67E000000C6C6C66C38000000C6C6D6FEC60087 -:20F3C0000000C66C386CC6000000C6C6C67E067C0000FE0C1860FE000E18187018180E00D3 -:20F3E0001818180018181800E030301C3030E0000000709A0E0000000000183C66FF000010 -:20F400007CC6C0C0C67C18706600C6C6C6C67E000E187CC6FEC07C0018247C067EC67E0042 -:20F4200066007C067EC67E00380C7C067EC67E0018007C067EC67E0000007CC0C07C18703E -:20F4400018247CC6FEC07C0066007CC6FEC07C0070187CC6FEC07C006600381818183C00EC -:20F460001824381818183C00380C381818183C0066007CC6FEC6C60018007CC6FEC6C6007E -:20F480000E18FE607860FE0000007C1A7ED87E007ED8D8DEF8D8DE0018247CC6C6C67C0068 -:20F4A00066007CC6C6C67C00380C7CC6C6C67C001824C6C6C6C67E00380CC6C6C6C67E0062 -:20F4C0006600C6C6C67E067C667CC6C6C6C67C00C600C6C6C6C67C00187CC6C0C67C180030 -:20F4E0001E3230783070FE00663C187E183C1800FCC6FCC0CCDECC0E001C3230FC30F00036 -:20F500000E187C067EC67E001A30381818183C000E187CC6C6C67C000E18C6C6C6C67E004F -:20F520006698FCC6C6C6C6006698E6F6DECEC6007C067EC67E00FE007CC6C6C67C00FE00E3 -:20F540001800183060C67C000000FEC0C0C0C0000000FE0606060600C0C0C0DE060C1E0047 -:20F56000C0C0C0CC1C3E0C00300030303030300000366CD86C36000000D86C366CD800001F -:20F58000AAAAAAAAAAAAAAAAAA55AA55AA55AA5544224422442244221818181818181818C7 -:20F5A000181818F818181818181818F818F81818363636F636363636000000FE36363636E5 -:20F5C000000000F818F81818363636F606F636363636363636363636000000FE06F63636DD -:20F5E000363636F606FE0000363636FE00000000181818F818F80000000000F81818181827 -:20F600001818181F00000000181818FF00000000000000FF181818181818181F1818181816 -:20F62000000000FF00000000181818FF181818181818181F181F18183636363736363636A5 -:20F6400036363637303F00000000003F30373636363636F700FF0000000000FF00F7363656 -:20F660003636363730373636000000FF00FF0000363636F700F73636181818FF00FF00009E -:20F68000363636FF00000000000000FF00FF1818000000FF363636363636363F00000000E3 -:20F6A0001818181F181F00000000001F181F18180000003F36363636363636FF3636363696 -:20F6C000181818FF18FF1818181818F8000000000000001F18181818FFFFFFFFFFFFFFFFE5 -:20F6E00000000000FFFFFFFFF0F0F0F0F0F0F0F00F0F0F0F0F0F0F0FFFFFFFFF000000001A -:20F7000000007798987700001C3666FCC6C6FCC0FE626060606060000000FF6666666600F8 -:20F72000FE6230183062FE0000003F66C6CC780000003333333E30F00000FF18181818008C -:20F740003C183C66663C183C007CC6FEC67C0000007EC3C3C366E7001E193C66C6CC780044 -:20F76000000066999966000000037CCEE67CC000003EC0FEC03E0000007EC3C3C3C3000098 -:20F7800000FE00FE00FE000018187E18187E000070180C187000FE001C3060301C00FE0003 -:20F7A000000E1B18181818181818181818D870000018007E001800000076DC0076DC000096 -:20F7C0003C663C000000000000183C180000000000000000180000000F0C0C0CEC6C380004 -:20F7E000D8ECCCCC00000000F030C0F0000000000000003C3C3C3C000000000000000000ED -:20F8000000000000000000007C82AA82BA92827C7CFED6FEC6EEFE7CFFFDFBF5EBD5ABFFA2 -:20F82000FFE1FD85858787FFFFBDDBE7E7DBBDFFFF8181BDBDBD81FFFFFFFFFFFF8181FF24 -:20F8400000081020100800000024140C14240000008E888C88E800000000000000000000CA -:20F8600000EE88CC88880000000004143C10000000304C4C3000000000382838280000001A -:20F88000FF81BDBDBDBD81FFFF55AA55AA55AAFFABD5ABD5ABD5ABD5FF818181818181FF75 -:20F8A000FFF9E18181E1F9FFFF9F878181879FFFFFE7E7C3C38181FFFF8181C3C3E7E7FFA0 -:20F8C00000265404040406000000000000000000000000000000000000000000000000009C -:20F8E000000000000000000000000000000000000000000000000000000000000000000008 -:20F90000000000000000000010101010001000002424240000000000247E24247E2400009F -:20F92000103C50381478100062640810204C8C0030484830584C4C38101010000000000039 -:20F94000081020202020100810080404040408100024187E182400000010107C1010000005 -:20F9600000000000101020000000003C000000000000000018180000040408081010202063 -:20F980003C464A5262423C0010301010101038003844041820407C00384404180444380025 -:20F9A000081828487C0808007C4078040444380038444078444438007C440408081010008B -:20F9C00038444438444438003844443C04443800000018000018000000001800001818304B -:20F9E000000810201008000000003C003C0000000010080408100000384404081000100063 -:20FA000038444C4C404438001028447C4444000078447844447800003844404044380000EA -:20FA200078444444447800007C407840407C00007C407840404000003844404C443800001E -:20FA400044447C444444000038101010103800001C08080848300000242830302824000082 -:20FA600020202020203C0000446C7C54444400004464544C44440000384444444438000052 -:20FA800078444478404000003844444444380C0078444478484400003C40380404780000AA -:20FAA0007C101010101000004444444444380000444444442810000082828292926C000090 -:20FAC000422418182442000044442810101000007C081020407C00003820202020203800CA -:20FAE000202010100808040438080808080838000010284400000000000000000000007EFC -:20FB000040201000000000000038043C643C00004040784444780000000038404038000075 -:20FB200004043C44443C00000038447C403C00000C103C101010000000003C44443C047845 -:20FB4000404078444444000010003010103800000800080808080830202024382824000001 -:20FB6000301010101010000000006854544400000000382424240000000038444438000015 -:20FB8000000078444478404000003C44443C0404000078444040000000001C300C38000099 -:20FBA00000107C1010100C0000004444443C0000000042422418000000008282926C0000B3 -:20FBC000000024181824000000002424241C043800007C18307C00000C1010303010100CF1 -:20FBE00018181800181818003008080C0C0808300000327E4C000000000010283800000071 -:20FC000000003C3C3C3C000000003C24243C00000000183C3C180000000018242418000014 -:20FC20001824241800000000003C424266246600001800180C06663C0C12307C3062FC0060 -:20FC40001C20702070201C0002060CD8F0E0C0001818FF0000FF00000000FF0000FF181854 -:20FC6000242424E7E72424241818FF0000FF18182424242727242424242424E4E4242424BA -:20FC8000000000FFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF007D -:20FCA000FFFFFFFFFFFF0000FFFFFFFFFF000000FFFFFFFF00000000F8F8F8F8F8F8F8F893 -:20FCC000FCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFE7F7F7F7F7F7F7F7F3F3F3F3F3F3F3F3F64 -:20FCE0001F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0000000000000000000000000000000094 -:20FD0000FFFFFFFFFFFFFFFFF0F0F0F0F0F0F0F000000000FFFFFFFFFF0000000000000070 -:20FD200000000000000000FF8080808080808080AA55AA55AA55AA550101010101010101C0 -:20FD400000000000AA55AA55FFFEFCF8F0E0C08003030303030303031818181F1F181818BE -:20FD6000000000000F0F0F0F1818181F1F000000000000F8F8181818000000000000FFFF8B -:20FD80000000001F1F181818181818FFFF000000000000FFFF181818181818F8F8181818D1 -:20FDA000C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E00707070707070707FFFF0000000000000D -:20FDC000FFFFFF00000000000000000000FFFFFF030303030303FFFF00000000F0F0F0F059 -:20FDE0000F0F0F0F00000000181818F8F8000000F0F0F0F000000000F0F0F0F00F0F0F0FD3 -:20FE0000000000FFFF000000081C3E7F7F1C3E001818181818181818000000FFFF0000006C -:20FE20000000FFFF0000000000FFFF000000000000000000FFFF0000303030303030303048 -:20FE40000C0C0C0C0C0C0C0C000000E0F038181818181C0F07000000181838F0E000000070 -:20FE6000C0C0C0C0C0C0FFFFC0E070381C0E070303070E1C3870E0C0FFFFC0C0C0C0C0C08E -:20FE8000FFFF030303030303003C7E7E7E7E3C000000000000FFFF00367F7F7F3E1C0800CF -:20FEA0006060606060606060000000070F1C1818C3E77E3C3C7EE7C3003C7E66667E3C00D8 -:20FEC0001818666618183C000606060606060606081C3E7F3E1C0800181818FFFF181818B9 -:20FEE000C0C03030C0C0303018181818181818180000033E76363600FF7F3F1F0F07030169 -:20FF000024242424242424240000FF0000FF000000003F20202724240000FF0000E72424A7 -:20FF20000000FC0404E4242424242720203F00002424E70000FF00002424E40404FC000045 -:20FF400024242720202724242424E40404E424242424E70000E724240F0F0F0FF0F0F0F0C9 -:20FF60000103070F1F3F7FFF80C0E0F0F8FCFEFF3399CC663399CC66CC993366CC99336692 -:20FF8000F0F0F0F0FFFFFFFF0F0F0F0FFFFFFFFFFFFFFFFFF0F0F0F0FFFFFFFF0F0F0F0F79 -:20FFA000050A050A00000000000000000A050A05A050A0500000000000000000A050A05045 -:20FFC0000A050A050A050A05AA55AA550000000000183C7E181818180010307F7F30100037 -:20FFE00000080CFEFE0C0800181818187E3C180000003649360000000000000000000000F6 :02000004003AC0 -:200000005C046E3A5C16543A5CEB213A5C40013A5C58003A5CD6003A5C6B023A5CE4003A88 -:200020005CFF003A5C06013A0B0808C22048A900085B6828E22085B3C220A5A4D006E22070 -:20004000A5A6F011C210A4A9C4A7F009E220A5B397A4C884A9282B6008C210E220A90120EE +:200000005CC27D3A5CD1633A5CF5243A5C5B013A5C58003A5CD6003A5C86023A5CFF003A93 +:200020005C1A013A5C21013A0B0808C22048A900085B6828E22085B5C220A5A6D006E22035 +:20004000A5A8F011C210A4ABC4A9F009E220A5B597A6C884AB282B6008C210E220A90120E2 :200060001C00A20000A9009F004C00E8E00001D0F6A20000201400C90DD0034CCF00C99D9F :20008000D008E00000F0EDCA8039C91DD00EBF004C00F0E0E04F00F0DBE88027C908D01A65 :2000A000E00000F0CFDABF014C009F004C00F006E8E0FF00D0F0FACA800EC92090B69F0033 :2000C0004C00E820180080ACA90820180080A5A900201C002860224C100060201400482093 -:2000E0001800686008E220C900F008AF1000AF09018006AF1000AF29FE8F1000AF286008E4 -:2001000022841000286048DA5A0B08E220C210A20000A9209F00A0AFAF1E00009F00C0AF0A -:20012000E8E00020D0EC08C22048A900005B6828A20000A0000022841000282B7AFA6860CE -:20014000DA5A0B0808C22048A900085B6828C230AF0C00008508E220AF0E0000C22029FF87 -:2001600000850AAF1100008F080100AF1C00003A8F0A010018A5086F0C01008508A50A6913 -:200180000000850AE220AF0F0000858DA00000A20000B7089F004F00E8C8C48DD0F4CABFC1 -:2001A000004F00C920D009A9009F004F00CA10EF282B7AFA60E220A9488F0F0000A9348FAA -:2001C000130000A9208F0800AF8F0900AFA20000A9009F18F03AE8E04000D0F6A9808FB252 -:2001E0000800E220A9008F890F00A9008F0002AF8F0C02AF8F1802AF8F2402AF6008E220CA -:200200004848A900223C10006822181000AF890F002901D0F868286008E2204848A90122F6 -:200220003C10006822181000AF890F002901D0F868286008C22048E220A90D201800C22093 -:2002400068286008227810002860080B08C22048A900085B6828E220A5B41A85B4CF130003 -:2002600000900520140064B42B2860DA5A0B0808C22048A900085B6828E220C2108FB308B7 -:2002800000AFB208002920F007AFB30800202800AFB208002980F007AFB3080020FD01AFC3 -:2002A000B208002940F014AFB30800201802AFB30800C90DD005A90A201802282B7AFA604A -:2002C00008E220BD0000F006201800E880F5286008C22048484A4A4A4A4A4A4A4A20EA026E -:2002E0006829FF0020EA0268286008C22048E220484A4A4A4A20010368200103C2206828AC -:200300006008C230DA290F00AABF00D03A201800FA286008C23048DA5A8B0BC230A30B1880 -:20032000690300AAE220A93A48ABBD0000F00620FD01E880F5C2302BAB7AFA68286008E28B -:2003400020C95BB004C941B00BC97BB004C961B00328186028386008E220C93AB004C930F1 -:20036000B00328186028386008E220C93AB004C930B013C967B004C961B00BC947B004C997 -:2003800041B00328186028386008E220C93AB004C930B012C967B004C961B00FC947B004FC -:2003A000C941B009286038E93080F929DF38E93780F208E220C97BB006C961900229DF2866 -:2003C0006008E220C210BD0000F00920B2039D0000E880F22860080B08C22048A900085B86 -:2003E0006828C2204806212623A521850CA523850E060C260E060C260E18A521650C8521A0 -:20040000A523650E8523682B2860080B08C22048A900085B6828C220A5218F120100A90A00 -:20042000008F100100AF14010085216423AF16010085276429E220A9008525852B2B286074 -:20044000080B08C22048A900085B6828C220A5218F120100A964008F100100AF140100857B -:20046000216423AF16010085276429E220A9008525852B2B286008C220A521D008A523D0FD -:200480000428E2026028C2026008E220A525C900D002286008C22048A900085B6828E220D9 -:2004A000A9048FD10800C22029FF0020F118E220DCD20808E220A525C902D002286008C279 -:2004C0002048A900085B6828E220A9048FD10800C22029FF0020F118E220DCD20808E2200C -:2004E000A525C900D008C220A523D021286008C22048A900085B6828E220A9048FD1080089 -:20050000C22029FF0020F118E220DCD20808C22048A900085B6828E220A9098FD10800C244 -:200520002029FF0020F118E220DCD20808E220A525C900D00EA524D029A523D025A522D001 -:2005400021286008C22048A900085B6828E220A9048FD10800C22029FF0020F118E220DCFC -:20056000D20808C22048A900085B6828E220A9098FD10800C22029FF0020F118E220DCD2D4 -:2005800008080B08C22048A900085B6828C23064216423E2206425A700C926F044E220A776 -:2005A00000205703907620D60338E930C22029FF001865218521A523690000852320961B79 -:2005C00080DB08C22048A900085B6828E220A9028FD10800C22029FF0020F118E220DCD2FA -:2005E0000820961BA700C948F004C968D0D420961BE220A7002068039022208903C2200656 -:2006000021262306212623062126230621262329FF00186521852120961B80D52B286008D3 -:20062000C23038A504E518A8E220B718F010C920F006C909F002286088C0FFFFD0ECA9009B -:2006400060080B08C22048A900085B6828C230A5188500E220A51A850220B71BA7002057CD -:2006600003900C208105C220A52185D520B71BC220A5008518E220A502851A208F06E2201E -:20068000200007C900F00520890880F42B286008C220A5188500A51A8502A20000E220A0E7 -:2006A0000000E00000F00DB700F053C93AF004C920D033C8B700F046C952F010C972D0267F -:2006C000B700F03AC952F004C972D01AC8B700F02DC945F004C965D00DC8B700F020C94DB7 -:2006E000F00AC96DF006E820961B80B3A700C93AD00320961BA903851CA98E2089082860DD -:20070000080B08C22048A900085B6828E220A97F851CC210203E08A51CD0034CA307C22089 -:20072000A5188500E220A51A8502C22064046406E230A000B700F0DAC98EF0D6C8C41C90F3 -:20074000F3C210A700C922D00520C5078028A51CC901F019C220A500C518D008E220A50260 -:20076000C51AF009E220A704201D47B009E22020D507C900D011C220A5008504E220A50256 -:20078000850620961B80A9C981D018201F06C900F0148980100B202A09C930F004A9AF8054 -:2007A00002A9812B286008C22048A900085B6828E220A9028FD10800C22029FF0020F11844 -:2007C000E220DCD20808E22020961BA700F004C922D0F52860080BC230DA5A08C22048A99F -:2007E00000085B6828A954098508E220A93A850AA28000E220A00100B708F026C51CD0298B -:20080000C230A00200B708850CE220A93A850EE210A000B70020B203D70CD00DC8C41C9066 -:20082000F28AC2107AFA2B2860C23018A5086908008508E220A50A6900850AE880B5080BB5 -:200840008B08C22048A900085B6828C230A954098508A93A00850A640CE220A00100B70876 -:20086000F01DC51CB006C50C9002850CC22018A5086908008508A50A690000850A80DAE258 -:2008800020A50C851CAB2B2860080B08C22048A900085B6828E2208700C22018A500690115 -:2008A000008508A502690000850AE210A41C88E220B7088708F013C22018A50869010085E9 -:2008C00008A50A690000850A80E52B286008C230297F000A0A0A18695409AA2860088B0BE3 -:2008E00008C22048A900085B682808E22048A93A48AB6828E220C21020CD08BD0000C2200A -:20090000290F002BAB2860088B0B08C22048A900085B682808E22048A93A48AB6828C2302B -:2009200020CD08BD04002BAB2860088B0B08C22048A900085B682808E22048A93A48AB68A7 -:2009400028E220C21020CD08BD0000C22029F0002BAB2860030110D081220000030112D023 -:20096000C0220000020114D0CE220000020116D0E7220000020318D0FA22000000011CD0D6 -:200980000000000004011ED03C230000040120D072230000040122D057230000050324D00E -:2009A0002B230000060328D00D23000007022CD01C230000FF012FD000000000400131D033 -:2009C00000000000200333D022390000200537D0273D000020033DD0723C0000200441D0F3 -:2009E000123C0000200346D0093C000020024AD0A13B000050044DD000000000500452D02C -:200A000000000000200557D0E43A000020065DD05D3B0000200364D039390000500268D02E -:200A20000000000050046BD000000000200470D02D3A0000200275D033390000200478D01D -:200A40003639000050057DD000000000500583D000000000200489D03039000020038ED076 -:200A6000683C0000200492D003390000200497D09338000020059CD0293800002005A2D031 -:200A8000B63700002003A8D0B23700002004ACD0933600002004B1D0A53700002007B6D04E -:200AA000A93700002003BED0E63500002004C2D04F3500000402C7D0C52300000402CAD02B -:200AC000A82300000402CDD08D2300003001D0D0BB3E00003003D2D0CF4200003004D6D06E -:200AE0001F4300003005DBD0B04300003005E1D0624300003004E7D0EF4300003003ECD02A -:200B0000444400003003F0D0894400003003F4D0124500003003F8D09B4500003003FCD065 -:200B2000CB450000300400D141420000300305D1E0410000300409D19241000030030ED100 -:200B40003C410000300512D173400000300618D1923F000030041FD1DD3E0000100324D116 -:200B600059460000100328D12446000010042CD1EF4F0000100431D170460000100336D12B -:200B8000164D000020053AD1C14E0000100440D19C4F0000200545D1A850000020034BD131 -:200BA000C751000010044FD134510000200654D13D52000020045BD161530000100760D13E -:200BC00021460000200368D1DE34000020056CD113340000200972D14725000020097CD149 -:200BE000E2240000200A86D110250000200791D14F240000300899D1EC3D00002007A2D1D8 -:200C0000E42300003008AAD1563E00002008B3D1582600002008BCD1B42500002006C5D112 -:200C2000962700002009CCD1942800002004D6D1262A00002004DBD17B2A00002004E0D110 -:200C4000F02A00002006E5D1A52B00002008ECD1322C0000200AF5D1662C0000200700D210 -:200C6000892D0000200708D2172E0000200810D2932E0000200619D2D22E0000200720D283 -:200C8000FE310000500628D20000000050042FD2000000000000000000000000080B08C2A3 -:200CA0002048A900085B6828C230A9FFFF85B8E220A93785BAC22064B564BBE22064B7649E -:200CC000BD2B28605A08E22085E8C210868DC220A50E48A50C48A51248A5104820740DB0CB -:200CE0000320F80C20000FC22068851068851268850C68850E287A60080B08C22048A900DC -:200D0000085B6828E220A68DCA860CE8C23038A5B8E50C85BEE220A5BAE90085C020000FEE -:200D2000E220A5E8A0000097C1A900A0010097C1A0020097C1C220A9000097C1C22018A50E -:200D4000B8690100A0050097C1E220C8C8A5BA690097C1C220A5BE85B5E220A5C085B7C2DE -:200D60002038A5C1E9010085B8E220A5C3E90085BA2B2860080B08C22048A900085B682868 -:200D8000C230C220A5BB85C7E220A5BD85C9A5C7D017E220A5C9D011C220A9000085CDE2BE -:200DA00020A90085CF2B281860C220A00500B7C785CAE220C8C8B7C785CCC22018A5C765CB -:200DC0008D850CE220A5C96900850EC22018A50C690800850CE220A50E6900850EC220A5A4 -:200DE0000CC5CAD028E220A50EC5CCD020C220A5CDD05DE220A5CFD057C220A00200B7C70A -:200E000085BBE220C8C8B7C785BD4CB10EC220A50C6908008510E220A50E69008512E220E5 -:200E2000A5C4C510B03E9008C220A5C4C510B034C220A5C785CDE220A5C985CFC220A00202 -:200E400000B7CD85C7E220C8C8B7CD85C94C8E0DC220A00200B7C797CDE220C8C8B7C7976A -:200E6000CD4CB10EC220A00500B7C7970CE220C8C8B7C7970CC220A00200B7C7970CE22098 -:200E8000C8C8B7C7970CC220A5CDD014E220A5CDD00EC220A50C85BBE220A50E85BD8011BC -:200EA000C220A00200A50C97CDE220C8C8A50E97CDC220A5C785C1E220A5C985C3C220A51D -:200EC000C185B5E220A5C385B7C220A00500A50C97C1E220C8C8A50E97C1C220A00200A917 -:200EE000000097C1E220C8C897C1E220A5E8E220A0000097C1A00100A90097C12B2838609A -:200F000008C22038A5BEE9080085C1E220A5C0E90085C3286008E220A5C3F004C938B012CC -:200F2000C220A5C1F00CE220A00100B7C11A97C1286000EA08E220A5C3F004C938B017C27E -:200F400020A5C1F011E220A00100B7C13A97C1D00320580F286000EA08C220A5BBD021E274 -:200F600020A5BDD01BA5C385BDC220A5C185BBA90000A0020097C1C8C8E22097C14C3F10AA -:200F8000E220A5BDC5C39028C220A5BBC5C19020C220A5BBA0020097C1E220C8C8A5BD976E -:200FA000C1C220A5C185BBE220A5C385BD4C3F10C220A5BB8508E220A5BD850AE220A00439 -:200FC00000B708C5C69032D00BC220A00200B708C5C49025C220A00200B70897C1E220C844 -:200FE000C8B70897C1C220A5C1A002009708E220A5C3C8C897084C3F10C220A00200B70812 -:20100000D008E220C8C8B708F019C220A00200B708850CE220C8C8B708850AC220A50C85D2 -:20102000088099C220A5C1A002009708E220C8C8A5C39708A90097C1C220A0020097C12070 -:201040004410286008C220A5BB85C1E220A5BD85C3C220A5C1D009E220A5C3D0034CE710D7 -:20106000C220A00200B7C1850CE220C8C8B7C1850EC220A00500B7C18510E220C8C8B7C1A8 -:201080008512C220A50CC510D008E220A50EC512F01FC220A00200B7C1850CE220C8C8B708 -:2010A000C1850EC220A50C85C1E220A50E85C380A0C220A00200B7C1850CE220C8C8B7C14F -:2010C000850EC220A00200B70C97C1E220C8C8B70C97C1C220A00500B70C97C1E220C8C8FD -:2010E000B70C97C14C6010286008C22064146416286008C230A514D016A516D012E2206491 -:2011000014A5E01A1A8515A5E1851664178007C220A5151A8515C220A5B93AC515F002B0FF -:201120001F08C22048A900085B6828E220A9038FD10800C22029FF0020F118E220DCD208C1 -:201140002860C900D005C00100F00509309714C86008C230640CA523101A18A52149FFFF26 -:201160006901008521A52349FFFF6900008523A9FFFF850C64106412A21F00F806212623F4 -:20118000A51065108510A51265128512CA10EDD8E22020F210A00000A50CF004A92D80026B -:2011A000A9209714C8A20300B51029F04A4A4A4A204211B510290F204211CA10EBC00100DF -:2011C000D00CA9208714A00100A9309714C8A9009714286000EA08E220C210A00000BD00E3 -:2011E00000F004E8C880F72860080B8B08C22048A900085B6828E220C21008C22048E220D8 -:20120000A52348ABC2206828A62120D611840C08C22048E220A52948ABC2206828A62720EF -:20122000D611C2209838650CAAE220A90220C40CC220A5B58508E220A5B7850AA0000008FF -:20124000C22048E220A52348ABC2206828A621BD0000F0069708E8C880F5E22008C22048C3 -:20126000E220A52948ABC2206828A627BD00009708F004E8C880F5C220A5088521E220A51B -:201280000A8523A9028525AB2B2860DA5A080B8B08C22048A900085B6828C220A50A48A5CB -:2012A0000848C23008C22048E220A52348ABC2206828A62120D61198AAE8E220A90220C402 -:2012C0000CC220A5BE8508A5C0850AA00000E220B7219708F003C880F7C220A5088521A517 -:2012E0000A8523C22068850868850AAB2B287AFA6008E220C210A00000B721F005C880F912 -:201300008490C230C4279013F011A58D300DF00BC48DB012A527D00E4C6F1320F210E2201F -:20132000A9008714803920F210C23018A52165278521A5236900008523A00000E220A72149 -:201340009714F01BC22018A5216901008521A5236900008523C8C48DD0E2A900009714C24D -:2013600020A5148521A5168523E220A90285252860485A0B0808C22048A900085B6828C267 -:2013800030A9000085008518A936008502851AAD8A0F3020A00200B718F00FC5539010C5CA -:2013A00057F002B00520D31380E5282B7A686020731C80DB08C22048A900085B6828E22055 -:2013C000A9018FD10800C22029FF0020F118E220DCD20808C23085216423205111A5141A94 -:2013E0008521A5168523209C3D18A5186904008500A51A6900008502E220A920201800C2B0 -:201400002020121490FBE220A90D20180020731C2860080B8B08C22048A900085B68280840 -:20142000E22048A90048AB6828E220C210A700F03A30052018008029C220297F000A0A0AD3 -:20144000186954098508A93A00690000850A08E22048A93A48AB6828A00200B708AA20C0A3 -:2014600002C22020961BAB2B281860AB2B28386008C220A9FF6F851DA9FF7F851FA9FFFF96 -:201480008521852385278529E2208525852B2860080B8B08C22048A900085B682808E2204A -:2014A00048A90048AB6828C2305AA41DBD0000990000BD0200990200E220BD04009904009B -:2014C000C2203898E90500851D7AAB2B2860080B8B08C22048A900085B682808E22048A98B -:2014E0000048AB6828C2305A18A51D690500851DA8B900009D0000B902009D0200E220B920 -:2015000004009D0400BD00007AAB2B2860080B8B08C22048A900085B682808E22048A9002A -:2015200048AB6828E220C2105AA41F99000088841F7AAB2B2860080B8B08C22048A900081A -:201540005B682808E22048A90048AB6828E220C2105AA41FC8841FB90000C22029FF007A89 -:20156000AB2B286008E220A901200D1528605A088B08E22048A90048AB6828E220A41FB9A6 -:201580000100C901D008C220E61FAB287A6008C22048A900085B6828E220A9028FD1080031 -:2015A000C22029FF0020F118E220DCD208080B8BC2204808C22048A900085B682808E220A0 -:2015C00048A90048AB6828E220C210A41FC0FF7FF01120DD08850CB9010020DD08C50CF0AB -:2015E000029008C22068AB2B281860C22068AB2B2838604C810508E220A9008F004D00A2AE -:201600000100209F1720DD04C220A5219F004D00E220AF004D001A303E8F004D00E8E8200C -:20162000B71BE220A700C98DF009C92CD00A20961B80CF20961B286008C22048A900085B5A -:201640006828E220A9028FD10800C22029FF0020F118E220DCD20808C22048A900085B6854 -:2016600028E220A90A8FD10800C22029FF0020F118E220DCD2080820A5499023E220A5E8E2 -:201680002980D00620F1474C9D16E220A98C20A31C20641520F615208C4C206E152860086F -:2016A000C22048A900085B6828E220A9028FD10800C22029FF0020F118E220DCD208080B51 -:2016C00008C22048A900085B6828E220C21020961BA00000B700F024C922F003C880F5848D -:2016E0000CE220A902A60CE820F210A00000C40CF029A7009714C820961B80F208C220485D -:20170000A900085B6828E220A9028FD10800C22029FF0020F118E220DCD208A9009714C217 -:2017200020A5148521A5168523A90200852520961B2B286008E220A700C22029FF0020070C -:2017400009852D20641508E22048A90048AB6828205817206E15286020961B6C2D08080B78 -:201760008BC2204808C22048A900085B6828C230A2270820CE14A2210820CE1420361520C9 -:201780000709852D08E22048A90048AB6828209C17A2210820901468AB2B28606C2D080838 -:2017A00008C22048A900085B682808E22048A90048AB6828C210DAE220A700D0034C6218EF -:2017C0003033C920D0034C5C18C93AB004C930B056C926F052C922D0034C7518C95BB007D1 -:2017E000C94190034C8118C97BB007C96190034C81184C6218C98CF040C98DF041202A09A5 -:20180000C930D00C203417A221082090144CB717C900D04EA700A61FE0FF7FF00520AD1557 -:20182000B012200D158035C22020F315A221082090148083205E1780DD200D15801EE2207F -:20184000A41FC0FF7FF046A41FB90100C901F03DC98CF005205E1780EE20361520961B4C08 -:20186000B717A61FE0FF7FB024BD0100C901F01D205E1780ED20BE16A221082090144CB786 -:2018800017207616A221082090144CB717A2210820CE14FA2860080B8B08E22048A90048AC -:2018A000AB682808C22048A900085B6828C230A9FD5F8531AB2B2860080B08C22048A90026 -:2018C000085B6828C2309231C631C6312B286008C23029FF0020B8182860080B08C22048E0 -:2018E000A900085B6828C230E631E631B2312B28608B0B0808C22048A900085B682808E240 -:201900002048A90048AB6828C2208521A900008523E220A900852585E8A93A85E7C220A9BE -:201920004B1985E5203F49C220A5D58521A5D78523E220A900852585E8A93A85E7C220A96F -:201940004F1985E5203F49282BAB604552520045524C00E220C210203302AFD108000AC266 -:201960002029FF00A808E22048A93A48AB6828BEA51920C002C220A5D5F027A2D31920C080 -:201980000208E22048A90048AB6828C220AFD508008F210800A900008F23080020BC3D2005 -:2019A00033024C3322D719DA19E019ED19FB19091A1C1A321A421A511A5E1A6F1A7E1A8BCB -:2019C0001A991AA81AB91AD21AE61AFA1A101B241B3F1B206174004F4B00427265616B006D -:2019E00053796E746178206572726F72004F7574206F66206D656D6F72790054797065206E -:201A00006D69736D61746368005661726961626C65206E6F7420666F756E64004C696E6515 -:201A2000206E756D626572206E6F7420666F756E6400537461636B20756E646572666C6FDB -:201A40007700537461636B206F766572666C6F77004F7574206F662072616E676500496C76 -:201A60006C6567616C20617267756D656E740046696C65206E6F7420666F756E64004E6FF4 -:201A8000742061206E756D626572004D617468206F766572666C6F77004D61746820756EFD -:201AA000646572666C6F77004469766973696F6E206279207A65726F00556E61626C65209C -:201AC000746F2072656164206469726563746F727900556E61626C6520746F206C6F616458 -:201AE0002066696C6500556E61626C6520746F20736176652066696C6500556E61626C65E6 -:201B000020746F2064656C6574652066696C6500436F756C64206E6F742066696E642066C0 -:201B2000696C6500436F756C64206E6F7420757064617465206469726563746F7279004328 -:201B40006F756C64206E6F7420636F7079207468652066696C6500080B08C22048A900086E -:201B60005B6828E220A90085D02B28600B0808C22048A900085B682808C220A953198FD286 -:201B80000800E220A93A8FD408002820683C20A937642F282B60080B08C22048A900085B6A -:201BA0006828C22018A5006901008500E220A502690085022B2860080B08C22048A90008C5 -:201BC0005B6828E220A700F00FC920F006C909F002800520961B80ED2B286008E220A700A8 -:201BE000F009C93AF00520961B80F3286008E2206434A700F019C535F02CC998F01EC99CEC -:201C0000F01AC99BF01AC99DF01620961B80E320731CC220A5D5F01DE22080D6E63480EAB8 -:201C2000C634303080E4A5333006A534F00280DA20961B286008C22048A900085B6828E2AA -:201C400020A9028FD10800C22029FF0020F118E220DCD20808C22048A900085B6828E22096 -:201C6000A9028FD10800C22029FF0020F118E220DCD20808C230A00000B718850C18A51897 -:201C8000650C8518A51A690000851AA00200B71885D518A5186904008500A51A6900008530 -:201CA00002286008E2204820B71B68E220C700D00820961B20B71B286008C22048A900081F -:201CC0005B6828E220A9028FD10800C22029FF0020F118E220DCD20808E22020B71BE2201B -:201CE000A700F010C93AF00CC535F00520961B80EF2838602818605A08E220A00000B700F4 -:201D0000F00DC93AF007C920D005C880F1A900287A60080B8B08C22048A900085B6828209E -:201D20007014E220A90085DAAD8A0F304BA700C93AD00320961B20B71BA700D0034CC21D6F -:201D4000203E03B052A7001010202A09850CC920D0034CB01DA5D0F05108C22048A9000807 -:201D60005B6828E220A9028FD10800C22029FF0020F118E220DCD20808C22048A900085B3A -:201D80006828E220A9018FD10800C22029FF0020F118E220DCD20820723C4CC21D08E220B1 -:201DA00048A90048AB68286C2D08A50CC910D0A9A700200709C220852D20701420961B200B -:201DC0009D1DAB2B2860085820571B209618E2209C8A0FC220A5188500A51A85024C071E19 -:201DE00008C220A00200B71885D520E910E220A5DAC903F012C22018A5186904008500E23B -:201E000020A51A69008502C22020121DE220A5DAC903F0F3C900D031E22020B71BA700F03D -:201E200028C93AF01F08C22048A900085B6828E220A9028FD10800C22029FF0020F118E270 -:201E400020DCD20820961B80BE28600858E220A98085D09C8A0F209618C230642FA002000B -:201E6000B718F02920E01DE220A5DAC901F01EC902F0EAC903F0E6C220A0000018A51877EF -:201E8000188518E220A51A6900851A80D0E220A90085D0286008C230C220A900008508A931 -:201EA0003600850AC220A00200B708F031C521F01EB02BC220A0000018A5087708850CE2F1 -:201EC00020A50A6900850AC220A50C850880D7C220A5088518E220A50A851A283860281848 -:201EE0006008E220A70C8708C220A50CC500D008E220A50EC502F026C22018A50C6901005F -:201F0000850CE220A50E6900850EC22018A5086901008508E220A50A6900850A80C428606C -:201F200008E220A70C8708C220A50CC500D006A50EC502F026C22038A50CE90100850CE26F -:201F400020A50EE900850EC22038A508E901008508E220A50AE900850A80C6286008A00055 -:201F600000C22018A5087708850CE220A50A6900850EC22018A5D76904008500E220A5D915 -:201F800069008502A00000C22038A5D7F70885D7E220A5D9E90085D920E11E20683C28608E -:201FA0000808C22048A900085B6828C230A0020097D718A5D76904008508E220A5D96900D2 -:201FC000850AE220A00000B7189708F003C880F7C2209818690500850CC220A00000A50C6C -:201FE00097D7C22018A5D7650C850CE220A5D9690085D9C220A50C85D7C220A00000A9009A -:202000000097D7C8C00500D0F820683C28600B0808C22048A900085B6828C230A9000085B0 -:2020200008A93600850AA00200B708F01DC5D5F025B01DA0000018A5087708850CA50A69B3 -:202040000000850AA50C850880DCA90000282B60A90100282B60A90200282B6008C230A99D -:2020600005008510A00000E220B718F007C220E610C880F3C220A5088500A50A850218A544 -:20208000D7690400850CA5D9690000850E18A5D7651085D7A5D969000085D918A5D7690446 -:2020A000008508A5D9690000850A20201FC220A510A000009700A5D5A00200970018A50080 -:2020C0006904008500A5026900008502A00000E220B7189700F003C880F720683C286008E9 -:2020E000C23085D5200E20C90000F02CC90100F022C220A50848A50A48205D1F68850A68BC -:202100008508A5188500A51A850220B71BE220A700F00A205C208005A5D520A01F28600B08 -:202120000808C22048A900085B6828E220C210A20000BD004FF003E880F8860CC2308AC91D -:20214000020090123A1869004FAA18658DA8A50C3A8B440000ABC220A653A0004FA58D8B89 -:2021600054003AABE220A50CC9029018A68DA9229D004FE8BD004FD0FAA9229D004FA900F8 -:20218000E89D004F282B60DA5A8B0B0808C22048A900085B6828E220C210AD004FC923F06C -:2021A0000AC97CF017282BAB7AFA60C220A90300858DA9CD218553201F2180E9C220A90490 -:2021C00000858DA9D1218553201F2180D8444952004252554E008B0808E22048A93A48ABF1 -:2021E0006828A234D220C00228AB6008E230A901201C0020DB00F006C90DF00280F52860DC -:202200000B0808C22048A900085B6828C23064D5A9004F8518A90000851A204106C220A5E7 -:20222000D5D00520C61D800720DF20282B3860282B1860C230A2FFFE9A20D621200800200B -:202240000C00A90000201C00208721200022B0EC80E7E220A525C52BD006C22029FF006084 -:20226000C22008C22048A900085B6828E220A9048FD10800C22029FF0020F118E220DCD2B4 -:2022800008205222C220C90000F027C90200D0034CE91108C22048A900085B6828E220A983 -:2022A000048FD10800C22029FF0020F118E220DCD20818A52165278521A523652985236059 -:2022C00038A521E5278521A523E529852360A5218F080100A5278F0A0100AF0C010085214A -:2022E000AF0E0100852360A5218F120100A5278F100100AF140100852160A5218F12010012 -:20230000A5278F100100AF160100852160C220A52125278521A5232529852360C220A52125 -:2023200005278521A5230529852360C220A52149FFFF8521A52349FFFF852360C220A52377 -:20234000C529900BA521C52790056421642360A9FFFF8521852360C220A529C523900BA514 -:2023600027C52190056421642360A9FFFF8521852360C220A529C523D00EA527C521D008FA -:20238000A9FFFF85218523606421642360C220A529C523D00EA527C521D008A9FFFF85212F -:2023A0008523606421642360C220A523C5299010D006A521C5279008A9FFFF8521852360FC -:2023C0006421642360C220A523C529900FF0056421642360A521C527F002B0F3A9FFFF8586 -:2023E0002185236008E220209F17202C05200A04A5210A0A0A0A052748A92C20A31C209F80 -:2024000017202C05200A04A5210A0A0A0A052748A92C20A31C209F17202C05200A04A521F5 -:202420000A0A0A0A052748AF0E08AF090C8F0E08AF688F0008AF688F0208AF688F0408AF13 -:20244000AF0E08AF29F78F0E08AF20DB1B286008E220209F17202C05200A04A5210A0A0AB3 -:202460000A052748A92C20A31C209F17202C05200A04A5210A0A0A0A052748A92C20A31CBF -:20248000209F17208904204004C220A5218590A5278521200A04E220A5210A0A0A0A0527DC -:2024A00048C220A5908521200A04E220A5210A0A0A0A052748AF0E08AF090C8F0E08AF6840 -:2024C0008F0F08AF688F0A08AF688F0908AF688F0608AFAF0E08AF29F78F0E08AF20DB1B86 -:2024E000286008209F17202C05E220A521290F0A0A0A0A8F530800A92C20A31C209F172069 -:202500002C05A521290F0F5308008F1E0000286008E220209F17202C05A52148A92C20A316 -:202520001C209F17202C05A52148A92C20A31C209F17202C05A5218F0D00AF688F0E00AFAA -:20254000688F0F00AF286008E220209F17208904A521F016A9018F0400AFA9208F0800AFEA -:202560008F0900AF222C1100800AA9008F0400AF222C1100A92C853520D81C903520961BA8 -:20258000209F17202C05A52148A92C20A31C209F17202C05A52148A92C20A31C209F172073 -:2025A0002C05A5218F0500AF688F0600AF688F0700AF286008C220209F17202C05A9AF0097 -:2025C000859EA521C90A00B05C0AAABF44263A859CA92C0020A31C209F17202C05A5210A50 -:2025E0000A18659C859CA92C0020A31C209F17202C05A00200A521E220979CA92C20A31C6B -:20260000209F17202C05A00100A521E220979CA92C20A31C209F17202C05A00000A521E2D4 -:2026200020979C286008C22048A900085B6828E220A90A8FD10800C22029FF0020F118E2BF -:2026400020DCD208002000240028002C003000340038003C401F801FDA5A08209F1720897B -:2026600004C220A521890001D017AF0000AF890001F00EE220A9008F0100AFA9018F010033 -:20268000AFC220A5218F0000AFE220A522C2202903000AAAC220BFDF263A8F10F03ABFE7CB -:2026A000263A8F12F03AAF10F03A8F080100AF12F03A8F0A0100AF0C01008F14F03AE2205E -:2026C000AF0E01008F16F03A222C1100C220AF1A0000AAAF1C0000A8202000287AFA60808A -:2026E00002200340019001E0015802F0002C0150006400280032003C004B001E003200485E -:20270000005C0020002A003400430016003400DA08C230A521C90200B01C0A0AAABF00F0B4 -:202720003A859CBF02F03A859EC9F000B008C9B000900328FA6008C22048A900085B682863 -:20274000E220A9098FD10800C22029FF0020F118E220DCD208DA08C230A521C90200B01746 -:202760000A0AAABF08F03A859CBF0AF03A859EC94000B00328FA6008C22048A900085B688F -:2027800028E220A9098FD10800C22029FF0020F118E220DCD20808C220209F17202C05C237 -:2027A00020A521C90200B05D8553A92C0020A31C209F17202C05C220A5218557A92C00202F -:2027C000A31C209F17202C05A5530A0A0AAAE220A557D005A5210A8004A521382A9F000164 -:2027E000AFC220A92C00853520D81CB037C22008C220A900008521A9B0008523E220A900F7 -:20280000852528802708C22048A900085B6828E220A9098FD10800C22029FF0020F118E240 -:2028200020DCD208C22020961B209F17C220A5530A0AAAA5219F00F03A9F08F03A855BA5BC -:20284000239F02F03A38E9B0009F0AF03A855DA5530A0A0AAAE220A55B9F0101AFA55C9F52 -:202860000201AFA55D9F0301AFA9009F0401AF9F0501AF286008C22048A900085B6828E2CA -:2028800020A90A8FD10800C22029FF0020F118E220DCD20808C220209F17202C0520552765 -:2028A000C220A59C8F0504AFAF14F03A8F0804AFE220A59E8F0704AFAF16F03A8F0A04AFAE -:2028C000A9008F0104AFA9858F0004AFAF0104AF30FAA9008F0004AF286008C220A55B8F23 -:2028E000080100AF10F03A8F0A010018AF0C01006557850CAF0E0100690000850E18A50CA8 -:20290000659C850CA50E659E850EE220A553870C2860C220A9010085DB38A55FE557856777 -:20292000100B49FFFF1A8567A9FFFF85DBA9010085DD38A563E55B856B100B49FFFF1A85AB -:202940006BA9FFFF85DDA56BC567B004A5678006A56B49FFFF1A480A686A856F20DA28A531 -:2029600057C55FD006A55BC563F036A56F8573A56749FFFF1AC5731010F00E38A56FE56B4D -:20298000856F18A55765DB8557A573C56B10CDF0CB18A56F6567856F18A55B65DD855B808D -:2029A000BB6008A900008F0004AFC220A55B8F080100AF10F03A8F0A010018AF0C010065D3 -:2029C00057850CE220AF0E01006900850EC22018A59C650C8F0504AFE220A59E650E8F0712 -:2029E00004AFC22038A55FE557850C8F0804AF38AF10F03A8F0E04AF38A563E55B8F0A0461 -:202A0000AFA901008F0C04AFE220AF5308008F0104AFA9878F0004AFAF0104AF30FAA90018 -:202A20008F0004AF28600808C22048A900085B682808E22048A90048AB6828C230209F17B0 -:202A4000202C05200F27A92C0020A31C209F17208904A5218557A92C0020A31C209F17204C -:202A60008904A521855BA92C0020A31C209F17202C05A521855320DA2828600808C22048C6 -:202A8000A900085B682808E22048A90048AB6828C230209F17202C05200F27A92C0020A315 -:202AA0001C209F17208904A5218557A92C0020A31C209F17208904A521855BA92C0020A360 -:202AC0001C209F17208904A521855FA92C0020A31C209F17208904A5218563A92C0020A330 -:202AE0001C209F17202C05A521855320122928600808C22048A900085B682808E22048A941 -:202B00000048AB6828C230209F17202C05205527A92C0020A31C209F17208904A5218557A4 -:202B2000A92C0020A31C209F17208904A521855BA92C0020A31C209F17208904A521855FD7 -:202B4000A92C0020A31C209F17208904A5218563A92C0020A31C209F17202C05A521855317 -:202B600020A229286008E220A521C940B0180A0A0A186900859CA90C6900859DA9AF690080 -:202B8000859E649F286008C22048A900085B6828E220A9098FD10800C22029FF0020F1186A -:202BA000E220DCD20808E220209F17202C0520652BA5218F16F03AA92C20A31C209F17203D -:202BC0002C05A521C908B04B48A92C20A31C209F17208904C22038A521E900008521A5237C -:202BE000E9B0008523302CC220A521A00100979CE220A523C8C8979CAF16F03AAABF18F0CF -:202C00003A29F1850C680A290E050C879C9F18F03A286008C22048A900085B6828E220A910 -:202C2000098FD10800C22029FF0020F118E220DCD20808C220209F17202C0520652BA92CA2 -:202C40000020A31C209F17208904A521A00400979CA92C0020A31C209F17208904A521A0D8 -:202C60000600979C286008C220209F17202C0520652BA5218F16F03AA92C0020A31C209FCA -:202C800017208904A52148A92C00853520D81CB01EAF16F03AAABF18F03A29FE00850C6837 -:202CA000290100050C9F18F03AE220879C8035C22020961B209F17202C05A521C90800B0FD -:202CC000250A0A0A0A850C68290100050C850CAF16F03AAAE220BF18F03A298E050C879C5B -:202CE0009F18F03A286008C22048A900085B6828E220A9098FD10800C22029FF0020F1184E -:202D0000E220DCD20808C220A521C90400B0198D0001A904008D020118AD040169800285B0 -:202D20009CA9AF00859E286008C22048A900085B6828E220A9098FD10800C22029FF0020E0 -:202D4000F118E220DCD20808C220A521C90400B0198D0001A90C008D020118AD0401690066 -:202D600002859CA9AF00859E286008C22048A900085B6828E220A9098FD10800C22029FF39 -:202D80000020F118E220DCD20808C220209F17202C0520052DC220A59E48A59C48A92C0024 -:202DA00020A31C209F17202C05C220A52148A92C0020A31C209F17202C05C220A52148A9A9 -:202DC0002C0020A31C209F17208904C220A521855BA523855D68855768855368859C688539 -:202DE0009EA55B879CE22038A55DE9B0A00200979CC220A557D011A559D00DE220A55329AB -:202E000007A00300979C800DE220A55329070908A00300979C286008C220209F17202C059E -:202E200020472DC220A59E48A59C48A92C0020A31C209F17208904C220A52148A92C0020EC -:202E4000A31C209F17208904C220A52148A92C0020A31C209F17208904C220A521855BA5DC -:202E600023855D68855768855368859C68859EA55BA00100979CE22038A55DE9B0C8C897E5 -:202E80009CC220A553A00400979CA557A00600979C286008C220209F17202C0520472DC221 -:202EA00020A59E48A59C48A92C0020A31C209F17208904C22068859C68859EA521D006E233 -:202EC00020A9008004E220A901E220A00000979C286008C220209F17202C0520472DA59EB4 -:202EE00048A59C48A92C0020A31C209F17208904A52148A92C0020A31C209F17208904A5E0 -:202F000021855768855368859C68859EA553A00800979CA557A00A00979C28600B0808C24F -:202F20002048A900085B6828E220A9008F58F03AAF5CF03AC9B0B01C8F2404AFAF5BF03ABD -:202F40008F2304AFAF5AF03A8F2204AFA9108F58F03A801738E9B08F0404AFAF5BF03A8F3A -:202F60000304AFAF5AF03A8F0204AFAF59F03AD03CAF58F03AF01BAF5DF03A8F2804AFAF5B -:202F80005EF03A8F2904AFAF5FF03A8F2A04AF828B00AF5DF03A8F0804AFAF5EF03A8F093E -:202FA00004AFAF5FF03A8F0A04AF827000AF58F03A09018F58F03A8910F032AF60F03A8F19 -:202FC0002804AFAF61F03A8F2904AFAF62F03A8F2A04AFAF63F03A8F2B04AFAF64F03A8F55 -:202FE0002C04AFAF65F03A8F2D04AF8030AF60F03A8F0804AFAF61F03A8F0904AFAF62F08C -:203000003A8F0A04AFAF63F03A8F0B04AFAF64F03A8F0C04AFAF65F03A8F0D04AFE220AFD8 -:2030200069F03AC9B0B0208F2704AFAF68F03A8F2604AFAF67F03A8F2504AFAF58F03A09C1 -:20304000208F58F03A801738E9B08F0704AFAF68F03A8F0604AFAF67F03A8F0504AFAF6669 -:20306000F03AD03EAF58F03A8920F01BAF6AF03A8F2804AFAF6BF03A8F2904AFAF6CF03A92 -:203080008F2A04AF828B00AF6AF03A8F0804AFAF6BF03A8F0904AFAF6CF03A8F0A04AF8288 -:2030A0007000AF58F03A09028F58F03A8920F032AF6DF03A8F2804AFAF6EF03A8F2904AF26 -:2030C000AF6FF03A8F2A04AFAF70F03A8F2B04AFAF71F03A8F2E04AFAF72F03A8F2F04AF10 -:2030E0008030AF6DF03A8F0804AFAF6EF03A8F0904AFAF6FF03A8F0A04AFAF70F03A8F0B87 -:2031000004AFAF71F03A8F0E04AFAF72F03A8F0F04AFAF58F03A2930F043C910F076C920E1 -:20312000D003828A00AF58F03A2903F023C903F02308C22048A900085B6828E220A90A8F4F -:20314000D10800C22029FF0020F118E220DCD208A9018002A9038F2004AF827D00AF58F07B -:203160003A2903F023C903F02308C22048A900085B6828E220A90A8FD10800C22029FF0002 -:2031800020F118E220DCD208A9018002A9038F0004AF8034AF58F03A29010A09118F20044E -:2031A000AFAF58F03A290209118F0004AF8019AF58F03A290209218F2004AFAF58F03A29CD -:2031C000010A09218F0004AFAF0004AF09808F0004AFAF58F03A2930F00FAF2004AF0980B7 -:2031E0008F2004AFEAEAEAEAEAAF0104AF8980D0F8A9008F2004AF8F0004AF282B600B0894 -:20320000E220C210A900A200008F59F03AE8E01A00D0F620F71CC9E6F023C9E7F05E08C218 -:203220002048A900085B6828E220A9028FD10800C22029FF0020F118E220DCD20820A31CAB -:20324000209F17208904C220A5218F5AF03AE220A5238F5CF03AA92C20A31C209F1720891E -:2032600004C220A5218F5DF03AE220A5238F5FF03AE220A9008F59F03A82740020A31C20F8 -:203280009F17208904C220A5218F5AF03AE220A5238F5CF03AA92C20A31C209F1720DD04A6 -:2032A000C220A5218F60F03A8D0001A92C0020A31C209F1720DD04C220A5218F62F03A8DE4 -:2032C0000201A92C0020A31C209F1720DD04C220A5218F64F03AC220AD04018F5DF03AE20F -:2032E00020AD06018F5FF03AE220A9018F59F03AE220A99920A31C20F71CC9E6F023C9E75C -:20330000F05E08C22048A900085B6828E220A9028FD10800C22029FF0020F118E220DCD299 -:203320000820A31C209F17208904C220A5218F67F03AE220A5238F69F03AA92C20A31C209B -:203340009F17208904C220A5218F6AF03AE220A5238F6CF03AE220A9008F66F03A82740090 -:2033600020A31C209F17208904C220A5218F67F03AE220A5238F69F03AA92C20A31C209FC4 -:203380001720DD04C220A5218F6DF03A8D0001A92C0020A31C209F1720DD04C220A5218FF7 -:2033A0006FF03A8D0201A92C0020A31C209F1720DD04C220A5218F71F03AC220AD04018F64 -:2033C0006AF03AE220AD06018F6CF03AE220A9018F66F03AC220AF5DF03ACF6AF03AD01454 -:2033E000E220AF5FF03ACF6CF03AD008C220201C2F282B6008C22048A900085B6828E22086 -:20340000A90A8FD10800C22029FF0020F118E220DCD2080820B71BE220A700D0034CB834F8 -:20342000C93AD0034CB834C922D00B20BE16209C3DA93B20A31C203E03904120A549903CFC -:20344000A93F201800A920201800201000E220A5E8C902F046C900F062C901F05D08C2206F -:2034600048A900085B6828E220A9048FD10800C22029FF0020F118E220DCD20808C2204834 -:20348000A900085B6828E220A9028FD10800C22029FF0020F118E220DCD208C220A9004CB9 -:2034A0008521A900008523E220A9028525C220203F49A90D002018002860EAC220A50085C8 -:2034C0003EA5028540A9004C8500A900008502208105C220A53E8500A540850280CF0820C5 -:2034E000B71BE220A700F046C93AF042203E03903F20A549903A201400E2208F004E00A922 -:20350000008F014E00C220A9004E8521A900008523E220A9028525203F4920B71BA700F075 -:203520000DC93AF009C92CD00720961B80B1286008C22048A900085B6828E220A9028FD151 -:203540000800C22029FF0020F118E220DCD20808209F17208904E220A95C85A0C220A52119 -:2035600085A1E220A52385A3E220A92C853520D81C904120961B209F1720DD04C220A5216D -:203580008553E220A92C853520D81C902720961B209F1720DD04C220A5218557E220A92CF4 -:2035A000853520D81C900D20961B209F1720DD04C220A421A657A5530B8B0822A0080028CC -:2035C000AB2B20DB1B286008C22048A900085B6828E220A9048FD10800C22029FF0020F177 -:2035E00018E220DCD20808E22020B71B20A5499064A98C20A31CA901200D15A20100A900B1 -:203600008F004D00209F1720DD04C220A5219F004D00E220AF004D001A8F004D003055E802 -:20362000E820B71BA700C92CF025C98DD02720961B20534AC220A5BE8521E220A5C085232A -:203640006424A5E8098085E88525203F49286020961B4C043608C22048A900085B6828E27E -:2036600020A9028FD10800C22029FF0020F118E220DCD20808C22048A900085B6828E2205C -:20368000A90A8FD10800C22029FF0020F118E220DCD2080820B71BE220A700F028C93AF076 -:2036A00024203E03902120A549901C20E636203F4920B71BA700F00DC93AF009C92CD007D8 -:2036C00020961B80CF286008C22048A900085B6828E220A9028FD10800C22029FF0020F144 -:2036E00018E220DCD20808A5028540A500853EA51A8544A5188542C220A538D004A536F0B4 -:203700004EA5368500A5388502A53A8518A53C851AE220A700F053C93AF04FC92CD0032085 -:20372000961B20B71BA700C922F04E205703B04E08C22048A900085B6828E220A9028FD1C3 -:203740000800C22029FF0020F118E220DCD208C220A900008518A93600851A18A51869048E -:20376000008500A51A6900008502E220A9808533A9A8853520ED1B80A920BE16800320F34C -:2037800015C220A5008536A5028538A518853AA51A853CA5428518A544851AA53E8500A559 -:2037A000408502286020DB1B6064366438643A643C6020240060209F17C220A52348A5213E -:2037C00048E220A700C92CD02220961B209F17C220A524D03568850868850AC220A521879F -:2037E00008E220A00200A52397086008C22048A900085B6828E220A9028FD10800C2202968 -:20380000FF0020F118E220DCD20808C22048A900085B6828E220A9098FD10800C22029FFD4 -:203820000020F118E220DCD208209F17C220A52348A52148E220A700C92CD01920961B2059 -:203840009F17C220A523D02C68850868850AC220A52187086008C22048A900085B6828E2D9 -:2038600020A9028FD10800C22029FF0020F118E220DCD20808C22048A900085B6828E2205A -:20388000A9098FD10800C22029FF0020F118E220DCD208209F17C220A52348A52148E2204B -:2038A000A700C92CD01F20961B209F17E220A522D032C220A523D02C68850868850AE22077 -:2038C000A52187086008C22048A900085B6828E220A9028FD10800C22029FF0020F118E23B -:2038E00020DCD20808C22048A900085B6828E220A9098FD10800C22029FF0020F118E220D3 -:20390000DCD20808C22048A900085B6828E220A9018FD10800C22029FF0020F118E220DCFE -:20392000D20808E220A700F00520961B80F7286008286008286008286008C220A51A20B806 -:2039400018A51820B818A50248A5004820DB1BA50220B818A50020B8186885006885022088 -:20396000B71B20A549B01F08C22048A900085B6828E220A9058FD10800C22029FF0020F197 -:2039800018E220DCD208E220A5E820CF18A5E720CF18C220A5E520B81820B71BE220A70037 -:2039A000C987D06AA5E8C900F004C901F00020961B209F17203F49E220A99920A31C209F48 -:2039C00017C220A52520B818A52320B818A52120B818E220A99A853520D81C901B20961B37 -:2039E000209F17E220A52520B818C220A52320B818A52120B8188014C220A9000020B818D6 -:203A0000A9000020B818A9010020B818286008C22048A900085B6828E220A9028FD1080008 -:203A2000C22029FF0020F118E220DCD208088B08E22048A90048AB682808C22048A90008A7 -:203A40005B6828C230A431C8C8C220B90C0085E5B90E00E22085E7B9100085E8C2205A204C -:203A6000F1477AC220B900008527B902008529E220B90400852BC2205A208122203F497A54 -:203A8000C220B906008527B908008529E220B90A00852BC220B90200300A20C5232076047C -:203AA000F028800820A823207604F01EC220B912008500B914008502B916008518B9180010 -:203AC000851AE220A90385DA8017A2210820CE14C22018A531691A008531A5336900008507 -:203AE00033AB286008A51848A51A4820B71B208105A521F02620951E9042E220A90285DA27 -:203B000020DB1BC2206820B8186820B818A50220B818A50020B818E62F2860686808C2207A -:203B200048A900085B6828E220A9028FD10800C22029FF0020F118E220DCD208686808C207 -:203B40002048A900085B6828E220A9068FD10800C22029FF0020F118E220DCD20808C23063 -:203B6000A52FF01E20DA18850020DA18850220DA18851820DA18851AC62FE220A90385DAD1 -:203B8000286008C22048A900085B6828E220A9078FD10800C22029FF0020F118E220DCD2D2 -:203BA0000808209F17207604F01CE220A99420A31C208105207604F01220951E902CE22088 -:203BC000A90285DA800320DB1B286008C22048A900085B6828E220A9028FD10800C22029CC -:203BE000FF0020F118E220DCD20808C22048A900085B6828E220A9068FD10800C22029FFF4 -:203C00000020F118E220DCD20808E220A90185DA28600820B71B208105A521F00D20951EF2 -:203C20009027E220A90285DA286008C22048A900085B6828E220A9028FD10800C22029FF4C -:203C40000020F118E220DCD20808C22048A900085B6828E220A9068FD10800C22029FF0092 -:203C600020F118E220DCD208207014209C0C20F0466008A700100320961B20A549B0034CA1 -:203C8000E93CE22020F71CC98CD00EA98C20A31CA9008F004D0020F61520B71BE220A70038 -:203CA000C987F0034CE93C20961BA5E848A5E748A5E648A5E548209F176885E56885E6684E -:203CC00085E76885E82980F01B206347903AC220A00900B70885BEE220C8C8B70885C02018 -:203CE000344C8003203F49286008C22048A900085B6828E220A9028FD10800C22029FF00A4 -:203D000020F118E220DCD20808C22048A900085B6828E220A9058FD10800C22029FF0020B2 -:203D2000F118E220DCD20808E22020F71CC900F066209F17E220A525C9FFF014C902D00558 -:203D4000209C3D800BC900D00520BC3D8002804A20B71BA700F040C93AF03CC92CF023C913 -:203D60003BF02408C22048A900085B6828E220A9028FD10800C22029FF0020F118E220DC00 -:203D8000D208A90920180020961B20B71BA700F009C93AF005809A2033022860088B08C2B0 -:203DA0002048A900085B6828E220C210A00000B721F006201800C880F6AB286008C220200A -:203DC0005111A5148521A5168523209C3D286008E22085B34A4A4A4A290F1869309714C878 -:203DE000A5B3290F1869309714C82860E220A98C20A31C08209F17E220C210AF0E08AF0942 -:203E0000088F0E08AF20F210A00000AF0608AF20CF3DA92F9714C8AF0908AF20CF3DA92F2E -:203E20009714C8AF0F08AF20CF3DAF0A08AF20CF3DA9009714AF0E08AF29F78F0E08AFC2D4 -:203E400020A5148521A5168523E220A902852528E22020961B60E220A98C20A31C08209FF1 -:203E600017E220C210AF0E08AF09088F0E08AF20F210A00000AF0408AF297F20CF3DA93A9B -:203E80009714C8AF0208AF20CF3DA93A9714C8AF0008AF20CF3DA9009714AF0E08AF29F74B -:203EA0008F0E08AFC220A5148521A5168523E220A902852528E22020961B6008C220209FAF -:203EC00017208904C220A52149FFFF8521A52349FFFF8523E621D003E623002860E220A9BC -:203EE0008C20A31C08C230209F1720B304C220A52348A5214820B71BE220A700C92CF0032D -:203F00004C543F20961B209F1720DD04C220A5214820B71BE220A700C92CF0034C543F20A8 -:203F2000961B209F1720DD04C220A521858DE220A523858FC220688527A900008529688527 -:203F400021688523E220A902852520F112E22020961B286008C22048A900085B6828E2208B -:203F6000A9028FD10800C22029FF0020F118E220DCD20808C22048A900085B6828E220A9CA -:203F8000098FD10800C22029FF0020F118E220DCD208E220A98C20A31C08C230209F17E2FD -:203FA00020A525C902F0034C1640C220A52348A5214820B71BE220A700C92CF0034C354073 -:203FC00020961B209F17E220A525C900D048C220A521858DC220688521688523E220A90226 -:203FE0008525E220A00000B721F003C880F9C2209838E58D30098527A9000085298007A9D9 -:20400000000085278529E220A900852B20F112E22020961B286008C22048A900085B68289F -:20402000E220A9048FD10800C22029FF0020F118E220DCD20808C22048A900085B6828E2CE -:2040400020A9028FD10800C22029FF0020F118E220DCD20808C22048A900085B6828E22072 -:20406000A9098FD10800C22029FF0020F118E220DCD208E220A98C20A31C08C230209F1755 -:20408000E220A525C902F0034CDF40C220A52348A5214820B71BE220A700C92CF0034CFE5E -:2040A0004020961B209F17E220A525C900D030C220A521858DC220A900008527A900008565 -:2040C00029E220A900852BC220688521688523E220A902852520F112E22020961B2860087F -:2040E000C22048A900085B6828E220A9048FD10800C22029FF0020F118E220DCD20808C22E -:204100002048A900085B6828E220A9028FD10800C22029FF0020F118E220DCD20808C220B1 -:2041200048A900085B6828E220A9098FD10800C22029FF0020F118E220DCD208E220A98C5D -:2041400020A31C209F17C210E220A525C902D023C220A500853EA5028540A5218500A52385 -:204160008502208105A53E8500A5408502E22020961B6008C22048A900085B6828E220A992 -:20418000048FD10800C22029FF0020F118E220DCD208E220A98C20A31C08209F17C210E220 -:2041A00020A525C900D01A205111C220A5148521A5168523E220A902852528E22020961BEA -:2041C0006008C22048A900085B6828E220A9048FD10800C22029FF0020F118E220DCD208AF -:2041E000E220A98C20A31C08209F1720B304C220640C640EE230A000B721C920F004C924DC -:20420000D003C880F3B721206803901EC220060C260E060C260E060C260E060C260EE22083 -:20422000208903050C850CC880DBC220A50C8521A50E8523E220A900852528E22020961B29 -:2042400060E220A98C20A31C08209F1720890420F210E230A0FFA900971488A521290FAA06 -:20426000BF00D03A971488A52129F04A4A4A4AAABF00D03A971488A5228521A5238522A514 -:20428000248523A9008524A521D0D0A522D0CCA523D0C8983865148521A5158522A5168547 -:2042A00023A5178524A902852528E22020961B6008C22048A900085B6828E220A9048FD1E9 -:2042C0000800C22029FF0020F118E220DCD208E220A98C20A31C209F17E220A525C902D098 -:2042E0001F8BA52348ABC210A62120D611AB8421C2206423E220A9008525E22020961B6078 -:2043000008C22048A900085B6828E220A9048FD10800C22029FF0020F118E220DCD208E2EB -:2043200020A98C20A31C209F17E220A525C900D012E220A721852164226423642EE22020CB -:20434000961B6008C22048A900085B6828E220A9048FD10800C22029FF0020F118E220DC56 -:20436000D208E220A98C20A31C209F17E220A525C900D01DC220A721850CE220A00200B75F -:204380002185236424C220A50C8521E22020961B6008C22048A900085B6828E220A9048F54 -:2043A000D10800C22029FF0020F118E220DCD208E220A98C20A31C209F17E220A525C900B8 -:2043C000D00EC220A72185216423E22020961B6008C22048A900085B6828E220A9048FD118 -:2043E0000800C22029FF0020F118E220DCD208E220A98C20A31C209F17E220A525C900D079 -:204400002420F210A5218714A900A001009714C220A5148521A5168523E220A9028525E223 -:204420002020961B6008C22048A900085B6828E220A9048FD10800C22029FF0020F118E231 -:2044400020DCD208E220A98C20A31C209F17E220A525C902D014A72185216422642364241C -:20446000A9008525E22020961B6008C22048A900085B6828E220A9048FD10800C22029FFC7 -:204480000020F118E220DCD208E220A98C20A31C209F17E220A525C900D039E220A524D016 -:2044A00052A523D04EA522D04AC21020F210A421E220A9009714883007A92097148810FB0E -:2044C000A9028525C220A5148521A5168523E22020961B6008C22048A900085B6828E220E0 -:2044E000A9048FD10800C22029FF0020F118E220DCD20808C22048A900085B6828E220A943 -:20450000098FD10800C22029FF0020F118E220DCD208E220A98C20A31C209F17E220A52587 -:20452000C900D039E220A524D052A523D04EA522D04AC21020F210A421E220A9009714885E -:204540003007A90997148810FBA9028525C220A5148521A5168523E22020961B6008C2201E -:2045600048A900085B6828E220A9048FD10800C22029FF0020F118E220DCD20808C2204823 -:20458000A900085B6828E220A9098FD10800C22029FF0020F118E220DCD208E220A98C2021 -:2045A000A31C209F17208904C220A523101749FFFF8523A52149FFFF186901008521A523FC -:2045C0006900008523E22020961B60E220A98C20A31C209F17E220A525C900D025C220A59A -:2045E000233012D004A521F013A900008523A9010085218007A9FFFF85238521E2202096E4 -:204600001B6008C22048A900085B6828E220A9048FD10800C22029FF0020F118E220DCD257 -:204620000800EA60080B08C22048A900085B6828C230C220A9000085D7E220A93685D9C26D -:2046400030A90000A0000097D7A0020097D7A0040097D7206C1B2B28608B08C220A90000D9 -:204660008518A93600851A206C1B204B1E28AB6008C2206453A9FF7F855720330220F71C90 -:2046800029FF00C90000F02CC98100F01A20B71B208105A521855320F71C29FF00C900005F -:2046A000F012C98100D02A20A31C20B71B208105A5218557A51A48A51848A50248A50048B3 -:2046C00020711368850068850268851868851A286008C22048A900085B6828E220A9028FBC -:2046E000D10800C22029FF0020F118E220DCD2080808C22048A900085B6828C22064E26494 -:20470000E5E22064E464E764E8C22038A5D769040085DFE220A5D9690085E12860C95FF07D -:204720001AC93AB004C930B012C95BB004C941B00AC97BB004C961B0021860386008E22063 -:20474000C210A00000B70CF00AD7E5D013C8C00800D0F2B7E520B203201D47B003283860D1 -:2047600028186008E220C210A00000A20000B7E5F00B20B2039F004E00C8E880F1A9009FB9 -:20478000004E00C220A9004E85E5E220A90085E7C220A5E28508D006E220A5E4F04DE220DB -:2047A000A5E4850AA5E8A00000D708D017C22018A508690100850CE220A50A6900850E207F -:2047C0003D47B02AA00D00C220B708850CC8C8E220B708850ED006C220A50CF00EC220A5CA -:2047E0000C8508E220A50E850A80B928186028386008206347B01F08C22048A900085B68FC -:2048000028E220A9058FD10800C22029FF0020F118E220DCD208C230A00900B7088521C8A5 -:20482000C8B7088523E220A00000B7088525286008C22018A5DF6910008508E220A5E16939 -:2048400000850AC5BA9027C220A508C5B8901F08C22048A900085B6828E220A9098FD108EE -:2048600000C22029FF0020F118E220DCD208C220A5DF85BEE220A5E185C0C220A50885DFE4 -:20488000E220A50A85E1286008E220A525C5E8F01F08C22048A900085B6828E220A9048FDD -:2048A000D10800C22029FF0020F118E220DCD208C902D003208B12C210203048C23018A5C0 -:2048C000BE6901008508E220A5C06900850AA00000A9009708C8C00800D0F8A00000B7E548 -:2048E000F01020B203201D4790089708C8C00800D0ECC220A00900A52197BEA523C8C89747 -:20490000BEA5E2A00D0097BEC8C8E220A5E497BEC220A5BE85E2E220A5C085E4E220A000C2 -:2049200000A52597BEC902F0022860C220A52185BEE220A52385C020000F20150F80EA0834 -:20494000C230A5E2D006E220A5E4F005206347B0052088488017E220A525C902F011C230F8 -:20496000A00900A5219708C8C8A52397082860208B12A00900B70885BEC8C8E220B708856C -:20498000C020000F20340FE220A525C902F00280CDC220A52185BEE220A52385C020000FC6 -:2049A00020150F80B90820B71BE220A700203E039042C220A50085E5E220A50285E72096E8 -:2049C0001BA700F00DC924F014C925F009201D47B0ECA900800C20961BA900800520961B1B -:2049E000A90285E820F71CC98CD006A5E8098085E828386028186008C22048A900085B68B8 -:204A000028C220A521850CA523640E64216423E2206426A9018525C220A50CF035100EE257 -:204A200020A9808526C22049FFFF1A850CE220E624C220460E660CE220662366226621C29E -:204A400020A50CC90100D0E5E2200626662366226621600820000FC220A901008521A900CE -:204A6000008523E220AF004D00C22029FF00858DA8A20100C220BF004D008527A900008561 -:204A80002920CE22E8E888D0EBC220A904008527A90000852920CE22E220AF004D00850C99 -:204AA000A900850DC220060C38A521650C8521A5236900008523D029E220A5E80980A62101 -:204AC00020C40CE220AF004D0087BEA00100A20000E220BF014D0097BEE48DF023E8C88048 -:204AE000F008C22048A900085B6828E220A9098FD10800C22029FF0020F118E220DCD208F1 -:204B0000E22038A5BE67BE8508A5BF69008509A5C06900850A640BC220A00500B7C1850C8F -:204B2000E220C8C8B7C1850E640FE220A9008708C22018A5086901008508A50A69000085F0 -:204B40000AC50ED0E5A508C50CD0DF286008C2206408640AE220AF004D00858D648EA201A5 -:204B600000E220A7BEC58DF01F08C22048A900085B6828E220A90A8FD10800C22029FF0078 -:204B800020F118E220DCD208C901F03AA00100E220BF004D008521642264236424B7BE855C -:204BA0002764286429642AA521C527B06820CE22C22018A50865218508A50A6523850AE8E5 -:204BC000E8C8C48DD0C9E22018BF004D00858E65088508A50969008509C220A50A69000069 -:204BE000850AC2200608260A0608260AE22038A508658D8508A50969008509C220A50A69C3 -:204C00000000850A18A50865BE8508E220A50A65C0850A286008C22048A900085B6828E2F3 -:204C200020A9098FD10800C22029FF0020F118E220DCD2080820000FE220A00000B7C129D5 -:204C40007FC525D028A52548C220A52348A52148204D4B688521688523E220688525C22015 -:204C6000A5218708A00200A5239708286008C22048A900085B6828E220A9048FD10800C2A7 -:204C80002029FF0020F118E220DCD2080820000FF40000F40000E22048204D4BE22068C29E -:204CA000206868C220A7088521A00200B7088523E220A00000B7C1297F85252860DA0B08E3 -:204CC00008C22048A900085B6828C230A52389F0FFD029890F00D00CA5218900FCD0052027 -:204CE000BC3D802EA20A0046236621CAD0F920BC3DE220A94B201800C2208016A214004623 -:204D0000236621CAD0F920BC3DE220A94D201800C220282BFA600B08C230A900008FB40885 -:204D2000008FB60800E22020F71CC900F008209F1720B3048011C220A9000085218523E237 -:204D400020A9028525C22020774E22081100B02220284F08C22048A900085B6828E220A9FA -:204D6000108FD10800C22029FF0020F118E220DCD20820330208C22048A920035B6828E2B0 -:204D800020A00000B718D00382A900C9E5D003829600A00B00B7188908F00382A900890239 -:204DA000F003828300290FC90FD003827A00A00000B718201800C8C00800D0F5A92020181F -:204DC00000A00800B718201800C8C00B00D0F5A909201800A00B00B7188910D01EC220A05F -:204DE0001C00B7188F210800C8C8B7188F230800E220A9008F25080020BD4CA9092018007D -:204E0000A00B00B7188908D01C8901F005A9522018008904F005A9532018008910F005A9FC -:204E200044201800EA203302204A02220C110090038241FF20284F08C22048A900085B687A -:204E40002820DB1B282B6008C22048A920035B6828E220290FC90FF0CFA95B201800A000CB -:204E600000B718C920F009201800C8C00800D0F1A95D20180080AE0B0808C22048A920037B -:204E80005B6828C230A973F28520A93A008522A00000E220A9009720C8C01E00D0F8C220A6 -:204EA000A973F08F81F23AA93A008F83F23AAF2108008F75F23AAF2308008F77F23A282B22 -:204EC0006008C23020B71B209F1720B30420774EE220A92C853520D81CB00FC220A9FFFF07 -:204EE0008F5403008F560300801720961B209F17208904C220A5218F540300A5238F5603BB -:204F00000022181100B01F08C22048A900085B6828E220A9118FD10800C22029FF0020F16A -:204F200018E220DCD20828608B0B0808C22048A900085B682808E22048A90048AB6828E24D -:204F400020AF2E03008521A900852285238524A900852585E8A93A85E7C220A98B4F85E52C -:204F6000203F49E220AF2003008521A900852285238524A900852585E8A93A85E7C220A9D4 -:204F8000934F85E5203F49282BAB60444F53535441540042494F53535441540008C230201A -:204FA000B71B209F1720B304A5218F600300A5238F620300A9FFFF8F5403008F5603002267 -:204FC000241100B02520F11820284F08C22048A900085B6828E220A9118FD10800C220290A -:204FE000FF0020F118E220DCD20820F118286008C23020B71B209F1720B30420774EA900F9 -:20500000008F540300A901008F56030020244622181100B02220284F08C22048A900085B9C -:205020006828E220A9118FD10800C22029FF0020F118E220DCD20820284FC220A21200188C -:20504000BF73F23A6900008590BF75F23A6901008592E220A9008790C220A900008578A9A0 -:205060000100857AA20000E220A778F02AC90DF012C90AF0049D004FE8C220E678D0E8E602 -:205080007A80E4E220A9009D004F200022C220E678D0D1E67A80CDE00000F00AE220A90046 -:2050A0009D004F200022286008C23020B71B209F1720B30420774EE220A92C20A31CC22024 -:2050C000209F17208904A5218F500300A5238F520300E220A92CC22020A31C209F172089E2 -:2050E00004A5218F580300A5238F5A0300221C1100B02220284F08C22048A900085B6828C2 -:20510000E220A9128FD10800C22029FF0020F118E220DCD20820284F2860DA5A08A2000082 -:20512000A00000E220B7219D0004F004E8C880F5287AFA6008C23020B71B209F1720B304A6 -:2051400020774EA9000085A4E220A90185A6A92085B2C220A9000085A9A9FFFF85A7C22053 -:20516000A9000085538555A9FFFF8557A9FF7F8559207113E220A98085B2C220C6A918A934 -:2051800000008F50030065A98F580300A901008F5203006900008F5A0300221C1100B02231 -:2051A00020284F08C22048A900085B6828E220A9128FD10800C22029FF0020F118E220DC54 -:2051C000D20820284F286008C23020B71B209F1720B304201A5122041100B02220284F080A -:2051E000C22048A900085B6828E220A9138FD10800C22029FF0020F118E220DCD208202890 -:205200004F2860DA08E220C9619008C97BB00429DF8013C9209013A20000DF2E523AF00ABD -:20522000E8E00F00D0F42838FA6B2818FA6B2A2B2C2F3A3B3C3D3E3F5C5B5D7C220808C2CA -:205240002048A900085B6828C230209F1720B304201A5122101100B02220284F08C2204842 -:20526000A900085B6828E220A9148FD10800C22029FF0020F118E220DCD208E220A92C2089 -:20528000A31CC220209F1720B304AD38038508AD3A03850AE220A20000A920957CE8E00B81 -:2052A00000D0F8A20000A00000B721F076C92EF0392203523AB01F08C22048A900085B6860 -:2052C00028E220A90A8FD10800C22029FF0020F118E220DCD208957CC8E8C00800D0CAB7C4 -:2052E00021F040C92EF003C880F5C8A20800B721F0312203523AB02220284F08C22048A9D6 -:2053000000085B6828E220A90A8FD10800C22029FF0020F118E220DCD208957CC8E8C00C05 -:2053200000D0CBA20000A00000B57C9708E8C8C00B00D0F522141100B02220284F08C220E6 -:2053400048A900085B6828E220A9158FD10800C22029FF0020F118E220DCD20820284F2897 -:20536000600808C22048A900085B6828C230209F1720B304A5218F640300A5238F660300DC -:20538000E220A92C20A31CC220209F1720B304A5218F680300A5238F6A030022301100B031 -:2053A0001F08C22048A900085B6828E220A9168FD10800C22029FF0020F118E220DCD208EC -:2053C00028605C7F6D3A5CD06B3A5C806D3A5CFC5C3A5C595D3A5C8C5C3A5C125C3A5C8FC8 -:2053E000613A5C7D583A5CAA5B3A5C655B3A5CEF5A3A5C8E6C3A5C8B593A5CE1573A5C099A -:205400006D3A5CB9583A5C826D3A5C7B6D3A5CA85A3A5C836D3A18FBC220A9FFFE1B585CB3 -:2054200023543AC23022E1573A200800200C008BE220A90048ABA2004F20C103AB22C653FD -:205440003A22CE533A80E2088BE220A93A48ABC210A25A5420C002AB286B41203C737461A1 -:2054600072743E203C617373656D626C793E0D2020417373656D626C6520612070726F673C -:2054800072616D0D0D43203C7374617274313E203C7374617274323E205B6C656E20283149 -:2054A00020696620626C616E6B295D0D2020436F6D7061726520746F2073656374696F6E23 -:2054C00073206F66206D656D6F72790D0D44203C73746172743E205B656E645D0D202044E5 -:2054E0006973617373656D626C6520612070726F6772616D0D0D46203C73746172743E20A3 -:205500003C656E643E203C627974653E0D202046696C6C206120626C6F636B206F66206D8A -:20552000656D6F72792077697468206120627974650D0D47205B616464726573735D0D20C2 -:2055400020537461727420657865637574696F6E2061742061206C6F636174696F6E0D0D20 -:205560004A205B616464726573735D202D204A756D7020746F2061206C6F636174696F6E1D -:2055800020696E206D656D6F72790D20204A756D7020746F2061206C6F636174696F6E2055 -:2055A000696E206D656D6F72790D0D48203C73746172743E203C656E643E203C6279746550 -:2055C0003E205B627974655D2E2E0D202048756E7420666F722076616C75657320696E208B -:2055E0006D656D6F72790D0D4C20202020204C4F41442020202020202020202246696C652A -:2056000022205B64657374696E6174696F6E5D0D4D203C73746172743E205B656E645D0DB0 -:20562000202044756D70207468652076616C756520696E206D656D6F72790D0D52202D206D -:20564000446973706C6179207468652076616C756573206F6620746865207265676973745F -:205660006572730D0D3B203C50433E203C413E203C583E203C593E203C53503E203C44427F -:20568000523E203C44503E203C4E564D5844495A433E0D20204368616E676520746865202B -:2056A000636F6E74656E7473206F6620746865207265676973746572730D0D532020202041 -:2056C00020534156452020202020202020202246696C6522203C73746172743E203C656EA0 -:2056E000643E0D54203C73746172743E203C656E643E203C64657374696E6174696F6E3ED2 -:205700000D20205472616E736665722028636F70792920646174612077697468696E206DD1 -:20572000656D6F72790D0D57203C627974653E0D20205365742074686520726567697374F6 -:20574000657220776964746820666C61677320666F722074686520646973617373656D6262 -:205760006C65720D0D58202D2052657475726E20746F2042415349430D0D3E203C73746106 -:2057800072743E203C627974653E205B627974655D2E2E2E0D2020456469742064617461F4 -:2057A00020696E206D656D6F72790D0D3F202D20446973706C617920612073686F727420AC -:2057C00068656C702073637265656E0D0D000808C22048A946085B6828E220A50D854E289B -:2057E0006B08E22048A93A48AB6828A2C06D20C002E220A93B201800A920201800C23008BC -:20580000E22048A90048AB6828A00300A24202204302C220A92000201800AF44020020D05C -:2058200002A92000201800AF46020020D002A92000201800AF48020020D002A9200020188F -:2058400000AF4A020020D002A92000201800AF4E020020EA02A92000201800201800AF4C1B -:20586000020020D002A9200020180008E220AD4F0222D96A3A282033022033026B080B0834 -:20588000C22048A946085B6828E220A515870DE220A50FC513D00EC220A50DC511D00620E0 -:2058A00033022B286BC22018A50D690100850DE220A50E6900850E80D0080B08C22048A95E -:2058C00046085B6828E220A50FC5179045C220A50DC515903DE220A70D8715A50FC513D03F -:2058E0000BC220A50DC511D0034C7059C22018A50D690100850DE220A50E6900850EC22010 -:2059000018A5156901008515E220A5166900851680C3C22038A511E50D8519E220A513E5AE -:205920000F851BC22018A51965158515E220A51B65178517E220A7118715A513C50FD00A56 -:20594000C220A511C50DD0028026C22038A511E901008511E220A512E9008512C22038A51D -:2059600015E901008515E220A516E900851680C42033022B286B08E220C921900BC97F908F -:2059800004C9A0900328386B28186B088B0B08C22048A946085B6828E220A9008FB40800E9 -:2059A000A531C902B016C9019020C22018A50D6900018511E220A50F69008513C220A50D0F -:2059C0008532E220A50F85348012C22018A5326900018511E220A53469008513E220A000C0 -:2059E00000C220A5328519E220A534851BE220A7192276593AB002A93F997C08C22018A592 -:205A0000196901008519E220A51B6900851BC8C0080090DBA900997C08A93E201800A920F1 -:205A2000201800E220A53420EA02A93A201800C220A53220D002C220A908008547E220A977 -:205A400020201800A73220EA0222B86A3AE220C647D0EAA920201800A92020180008E220B6 -:205A600048A90048AB6828A27C0820C002203302204A02A534C513900FC220A532C511907A -:205A8000072033022BAB286B4CDC59088D9008E220BD0000990000AD9008F00AC8E8E8E87C -:205AA000E8CE900880EB286B080B8B08C22048A946085B682808E22048A90048AB6828C2A8 -:205AC00030A50D8532A50F8534E220A5313A8547A25708A07C08228B5A3AA00000B97C089F -:205AE000873222B86A3AC8C447D0F2AB2B286B080B8B08C22048A946085B682808E220486D -:205B0000A90048AB6828E220C210A5313A3A8547A25B08A07C08228B5A3AC220A50D8532BA -:205B2000A50F8534C220A534C513D006A532C511F02CE220A00000B732D97C08D01AC8C468 -:205B400047D0F4C220A532854AA534854C2262653AE220A92020180022B86A3A80C62033CB -:205B600002AB2B286B08C22048A946085B6828E220A531F00EC230A50D8F400200A50F8F18 -:205B8000420200AF460200AAAF480200A8AF4A02001BAF4C02005BE220A93A48A95B48A9EF -:205BA000A5484CDC5BEA5C04003A08C22048A946085B6828E220A531F0C9C230A50D8F40D9 -:205BC0000200A50F8F420200AF460200AAAF480200A8AF4A02001BAF4C02005BE220AF4E8D -:205BE000020048ABA95C8FA00800AF4202008FA30800AF4102008FA20800AF4002008FA1FB -:205C00000800AF4F020048C220AF440200285CA00800080B8B08E22048A93A48AB682808D3 -:205C2000C22048A946085B6828C210E220A531C902F00CC903D011C220A51585478011C27F -:205C400020A9010085478008A2846D20C0028035A50D854AA50F854CA00000E220A74AD78C -:205C600011F0092262653AA920201800C22018A54A690100854AA54C690000854CC8C447D6 -:205C8000D0D9203302203302AB2B286B080B8B08E22048A90048AB682808C22048A9460803 -:205CA0005B6828E220A531F04FA60D8E4002A60F8E4202C901F041A6118E4402C902F0385F -:205CC000A6158E4602C903F02FA6198E4802C904F026A61D8E4A02C905F01DE210A6218E0F -:205CE0004E02C906F012C210A6258E4C02C907F007E210A6298E4F02AB2B286B080B8B0894 -:205D0000C22048A946085B6828E220C210A20000BFF16D3AF018C708F003E880F3C2208A19 -:205D20000AAABF325D3A8F2D080022565D3AAB2B286BD253DA53DE53E253E653EA53EE537C -:205D4000F253F653FA53D653FE5302540654CE570A540E5447546C2D08088B0B08C220484D -:205D6000A946085B6828E220A531C902B0034CFF5EC220A50D8532A50F8534C22022016124 -:205D80003AC9FFFFF0108554E220A531C903F036A913854F804C20330208E22048A93A4831 -:205DA000AB6828C210A2365F20C0024CFF5E20330208E22048A93A48AB6828C210A2455FEF -:205DC00020C0024CFF5EE2202237613AC9FFF0DE854FC903F062C90BF05EC913F004C908F7 -:205DE000F000222F603AB0034CC85E873222B86A3A08E22048A90048AB6828C220A53285B0 -:205E000056A5348558E220A54FC912F06CC916F068C914F07C293FC902D0034CF65EC22041 -:205E200029FF00AAE220BFFE693AC903F057C902F05FC901F0678071C220A554C97666F07F -:205E400026C9DA66F02AC95A66F01CC95E66F017C96666F012C94E66F00DC96266F008C96D -:205E60004A66F0034CE25DE220A912854F4CE25DE220A916854F4CE25D22725F3A9060C9D2 -:205E800002F00E8018A00200B99608975622B86A3AA00100B99608975622B86A3AA0000003 -:205EA000B99608975622B86A3AE220A941201800A920201800A632864AA634864C226265BE -:205EC0003AA920201800803720330208E22048A93A48AB6828C210A2035F20C0028020204B -:205EE000330208E22048A93A48AB6828C210A2535F20C0028009A54F29C0D0954C9D5E2B70 -:205F0000AB286B41646472657373696E67206D6F6465206E6F7420646566696E6564206694 -:205F20006F72207468617420696E737472756374696F6E2E0D00426164206D6E656D6F6EE1 -:205F400069632E0D00426164206F706572616E642E0D0052656C6174697665206F666673E5 -:205F6000657420697320746F6F206C617267652E0D00080B08C22048A946085B6828E2204B -:205F8000A54FC912F00AC22018A5326902008008C22018A532690100854AA53469000085A3 -:205FA0004C38A550E54A8550A552E54C8552E220A54FC916F01EA550300CA551D02AA5526A -:205FC000D026A9018026A551C9FFD01CA552C9FFD0168018A5513006A552D00C800EA55210 -:205FE000C9FFD004A90280042B28186B2B28386B080BC210DA08C22048A946085B6828E255 -:2060000020A20000DF00D03AF008E8E01000F01B80F2C2200650265206502652065026523C -:2060200006502652E2208A05508550FA2B286B0B8B08C22048A946085B682808E22048A97F -:206040003A48AB6828E220A54F293F854AC230A20000A00000BDFC66F01BC554D00DE22000 -:20606000B9FE68293FC54AF007C220E8E8C880E59838AB2B6B18AB2B6B080B08C22048A95C -:2060800046085B6828E220C210A0000064506452B703F011C964F01948B736854A68C54A7D -:2060A000D00BC880EBB736D0042B28386B2B28186BE220B736C93AB004C930B014C947B022 -:2060C00004C941B00CC967B0E4C961B00280DE29DF22F05F3A80CB0B08C22048A946085B6B -:2060E0006828A00000E220B703F003C880F9C220C85A681865038503A50569000085052B44 -:206100006B0B08C22048A946085B6828C220A5118536A5138538A98A658503A93A008505A0 -:206120002279603AB00D22D7603AA703D0F2A9FFFF8002A5032B6B080B08C22048A94608CB -:206140005B6828C230A5158536A5178538A9166A8503A93A0085052279603AB02222D760F6 -:206160003AC22018A5036901008503A5056900008505E220A703D0DFC220A9FFFF800D2221 -:20618000D7603AE220A703C22029FF002B286B088B0B08C22048A946085B6828E220A900BD -:2061A0008FB40800A531C902B016C9019020C22018A50D6900018511E220A50F6900851350 -:2061C000C220A50D8532E220A50F85348012C22018A5326900018511E220A53469008513C6 -:2061E00022FB613AE220A534C51390F4C220A532C51190EC2033022BAB286B080BE220A929 -:2062000041201800A92020180008C22048A978085B6828C220A5008518E220A502851A2230 -:2062200062653AA920201800C22018A5006901008518E220A5026900851AE220C210A7008A -:20624000C9C2D00B48A71849FF2F940800800BC9E2D00C48A7180F9408008F94080068C2A5 -:206260002029FF000AAABFFC663AAA22DC643AE220A700AABFFE683A22B86A3A2289623A0A -:20628000203302204A022B286B08E22048293F0AC210AA687C9762C762E262E9620E631524 -:2062A00063306352636363A063A863B963CA63D163F66323648F6374634163166420643463 -:2062C00064636411647464A928201800228B643AA92C201800A958201800A9292018004C56 -:2062E0008564228B643A4C8564E22048A9232018006829C0C900F00F4A4A2F940800D00798 -:206300002295643A4C8564228B643A4C85642295643A4C8564A928201800228B643AA929C3 -:20632000201800A92C201800A9592018004C8564228B643AA92C201800A9582018004C8547 -:2063400064228B643AA92C201800A9592018004C85642295643AA92C201800A95920180076 -:206360004C85642295643AA92C201800A9582018004C8564A9282018002295643AA92C20C5 -:206380001800A958201800A9292018004C8564A928201800228B643AA9292018004C8564DA -:2063A000A9412018004C8964228B643AA92C201800A9532018004C8564A95B201800228BD8 -:2063C000643AA95D2018004C856422A3643A4C8964A928201800228B643AA92C201800A906 -:2063E00053201800A929201800A92C201800A9592018004C8564A95B201800228B643AA95C -:206400005D201800A92C201800A9592018004C8564A002008003A001002209653A4C8964A2 -:206420004C896422A3643AA92C201800A9582018004C8964A9232018008BA50248ABA60072 -:20644000E8A001002243023AA92C201800A923201800A600A001002243023AAB22B86A3AF0 -:206460004C8564A9282018002295643AA9292018004C8564A95B2018002295643AA95D2093 -:2064800018004C856422B86A3A286B08E220A70020EA02286B08C230A70020D00222B86A77 -:2064A0003A286B088B0BC2305A08C22048A978085B682808E22048A90048AB6828E220A0BF -:2064C0000000A70099900822B86A3AC8C00300D0F12262653AC2307A2BAB286B088BE2208D -:2064E000C21008E22048A93A48AB6828BD0000201800E8BD0000201800E8BD000020180063 -:20650000E8A920201800AB286B080B08C22048A978085B6828E220C00200F014A7008518EF -:2065200030066419641A801EA9FF8519851A8016A700851822B86A3AA70085193004641A58 -:206540008004A9FF851AC22038A50065188518E220A502651A851A2262653A22B86A3A2B04 -:20656000286B080BC2204808C22048A946085B6828E220A54C20EA02E220A93A201800C259 -:2065800020A54A20D002682B286B4F524100414E4400454F520041444300535441004C44F9 -:2065A0004100434D50005342430041534C00524F4C004C535200524F5200535458004C44A2 -:2065C000580044454300494E4300424954004A4D5000535459004C4459004350590043508F -:2065E000580042524B004A535200525449005254530050485000504C500050484100504C44 -:2066000041004445590054415900494E5900494E5800434C430053454300434C490053456D -:20662000490054594100434C5600434C44005345440054584100545853005441580054530F -:206640005800444558004E4F500042504C00424D490042564300425653004243430042434B -:206660005300424E450042455100545342005452420053545A004252410050485900504CE6 -:20668000590050485800504C580050484400504C440050484B0052544C0050484200504CB6 -:2066A0004200574149005842410054435300545343005443440054444300545859005459A0 -:2066C00058005354500058434500434F50004A534C0057444D005045520042524C0052457A -:2066E0005000534550004D5650004D564E0050454900504541004A4D4C000000E2658A65B1 -:20670000CA668A656A668A65AA658A65F2658A65AA658A666A668A65AA658A654A668A65FC -:206720008A658A656E668A65AA658A6512668A65C665AA666E668A65AA658A65E6658E6519 -:20674000CE668E65CA658E65AE658E65F6658E65AE658E66CA658E65AE658E654E668E65C6 -:206760008E658E65CA658E65AE658E6516668E65C265AE66CA658E65AE658E65EA659265F3 -:20678000D2669265E6669265B2659265FA659265B2659266CE659265B2659265526692652D -:2067A00092659265EA669265B26592651A6692657A66B266F6669265B2659265EE65966578 -:2067C000D666966572669665B6659665FE659665B6659666CE659665B66596655666966529 -:2067E0009665966572669665B66596651E6696657E66B666CE659665B665966576669A651C -:20680000DA669A65D2659A65BA659A650266CA6532669A66D2659A65BA659A655A669A65A3 -:206820009A659A65D2659A65BA659A6522669A653666BA6672669A6572669A65D6659E65D7 -:20684000BE659E65D6659E65BE659E6506669E653A669E66D6659E65BE659E655E669E6570 -:206860009E659E65D6659E65BE659E6526669E653E66BE66D6659E65BE659E65DA65A265AD -:20688000DE66A265DA65A265C265A2650A66A2654266A266DA65A265C265A2656266A265CF -:2068A000A265A265EE66A265C265A2652A66A2658266C266F666A265C265A265DE65A665BB -:2068C000E266A665DE65A665C665A6650E66A6654666A666DE65A665C665A6656666A6654F -:2068E000A665A665F266A665C665A6652E66A6658666C666E665A665C665A6650000130093 -:2069000002090101010A138208130303030B12040F0C0105050D130608130307070E0300FC -:206920000B090101010A138208130303030B12040F0C0505050D130608130707070E1300BB -:2069400013091401010A138208130303030B12040F0C1405050D130613130B07070B130065 -:2069600016090101010A138208131503030B12040F0C0505050D130613131007070E12004B -:2069800016090101010A138213130303030B12040F0C0505110D130613130307070E8200C3 -:2069A00042090101010A138213130303030B12040F0C0505110D130613130707060E4200B4 -:2069C00002090101010A138213130303030B12040F0C0105050D130613131707070E4200D3 -:2069E00002090101010F138213130303030B12040F0C0305050D130613131007070E0101F3 -:206A00000102010102020001010301010301020101000202020241000864643A646464647B -:206A20002C58000E64643A64646464000B646464642C580007646464642C590006646464C5 -:206A400064000364642C58000564642C59001164642C53000964640001236464646400C292 -:206A60002364642C236464001423646400022864642C53292C59000C28646464642C582985 -:206A8000001028646464642900102864642C58290000286464292C59000428646429000F8E -:206AA0005B646464645D00175B64645D2C59000D5B64645D000A000008C2204818AF780862 -:206AC000006901008F780800E220AF7A080069008F7A0800C22068286B08C210E220DAA25B -:206AE00008000AB00848A930201800800648A93120180068CAD0EBFA286B08C22048A946F8 -:206B0000085B6828E220A732F00AC920D00622B86A3A80F26B0808C22048A946085B682877 -:206B200022B86A3A22FA6A3AC230A531C22029FF000A0AAAA532950DA534950FE220A732B6 -:206B4000F014C922F00622B86A3A80F2A900873222B86A3AE631286B08C22048A946085B52 -:206B60006828E220644AC22064506452E220A732C93AF00D206803900E22F05F3AA90185AB -:206B80004A22B86A3A80E5A54AF016A531C22029FF000A0AAAA550950DA552950FE220E61B -:206BA000316BE220643122FA6A3AA732F021C922D00622156B3A800A22586B3AA531C9090A -:206BC000B00DA732F009C920F0DC206803B0D76B080B08C22048A946085B6828C210E220F9 -:206BE000A231007400CAD0FBA90085028534C220A9004F85008532E22022FA6A3AC900F03F -:206C000038C220A5328508E220A534850AA2010022B86A3AA732D006860B6431801BC92012 -:206C2000F003E880EB860BA900873222B86A3AA708C941F00722A26B3A2B286B22FA6A3A06 -:206C4000A732F0F522586B3A22FA6A3AA732F0E9C220A5328511E220A534851322B86A3AA5 -:206C6000A732F026C920D0F4A9008732E63122B86A3A22FA6A3AA732F0BFC220A5328515E6 -:206C8000E220A5348517E63180AFE63180AB08C210E220A531D00FA2846DA93A48AB20C01B -:206CA000022033028061C220A50D8F210800A50F8F23080020774EE220A531C901D00FC2BA -:206CC00020A9FFFF8F5403008F560300800EC220A5118F540300A5138F5603002218110028 -:206CE000B025E220A2AA6DA93A48AB20C002AF2E030020EA02A920201800AF20030020EA83 -:206D000002203302203302286B8B08C210E220A531C903F00FA2846DA93A48AB20C00220C1 -:206D200033028054C220A50D8F210800A50F8F23080020774EA5118F500300A5138F520377 -:206D400000A5158F580300A5178F5A0300221C1100B025E220A2946DA93A48AB20C002AFB7 -:206D60002E030020EA02A920201800AF20030020EA0220330220330228AB6B5C33223A6BB9 -:206D80000000000042616420617267756D656E74730D0D00556E61626C6520746F2073618E -:206DA00076652066696C653A2000556E61626C6520746F206C6F61642066696C653A2000AA -:206DC0000D2020504320202020204120202020582020202059202020205350202020444238 -:206DE000522044502020204E564D5844495A430D0041434446474A484C4D523B535456574C -:206E0000583E3F0018FB08C22048A900085B682808E22048A90048AB6828C23020436EA9D2 -:206E2000FFFE1B08E22048A93A48AB6828A23CD220C00208E22048A90048AB68284C3322D1 -:206E40004C406E0820B5012024462860000000000000000000000000000000000000000048 -:206E6000000000000000000000000000000000000000000000000000000000000000000012 -:206E80000000000000000000000000000000000000000000000000000000000000000000F2 -:206EA0000000000000000000000000000000000000000000000000000000000000000000D2 -:206EC0000000000000000000000000000000000000000000000000000000000000000000B2 -:206EE000000000000000000000000000000000000000000000000000000000000000000092 -:206F0000000000000000000000000000000000000000000000000000000000000000000071 -:206F2000000000000000000000000000000000000000000000000000000000000000000051 -:206F4000000000000000000000000000000000000000000000000000000000000000000031 -:206F6000000000000000000000000000000000000000000000000000000000000000000011 -:206F80000000000000000000000000000000000000000000000000000000000000000000F1 -:206FA0000000000000000000000000000000000000000000000000000000000000000000D1 -:206FC0000000000000000000000000000000000000000000000000000000000000000000B1 -:206FE000000000000000000000000000000000000000000000000000000000000000000091 -:20700000000000000000000000000000000000000000000000000000000000000000000070 -:20702000000000000000000000000000000000000000000000000000000000000000000050 -:20704000000000000000000000000000000000000000000000000000000000000000000030 -:20706000000000000000000000000000000000000000000000000000000000000000000010 -:207080000000000000000000000000000000000000000000000000000000000000000000F0 -:2070A0000000000000000000000000000000000000000000000000000000000000000000D0 -:2070C0000000000000000000000000000000000000000000000000000000000000000000B0 -:2070E000000000000000000000000000000000000000000000000000000000000000000090 -:2071000000000000000000000000000000000000000000000000000000000000000000006F -:2071200000000000000000000000000000000000000000000000000000000000000000004F -:2071400000000000000000000000000000000000000000000000000000000000000000002F -:2071600000000000000000000000000000000000000000000000000000000000000000000F -:207180000000000000000000000000000000000000000000000000000000000000000000EF -:2071A0000000000000000000000000000000000000000000000000000000000000000000CF -:2071C0000000000000000000000000000000000000000000000000000000000000000000AF -:2071E00000000000000000000000000000000000000000000000000000000000000000008F -:2072000000000000000000000000000000000000000000000000000000000000000000006E -:2072200000000000000000000000000000000000000000000000000000000000000000004E -:2072400000000000000000000000000000000000000000000000000000000000000000002E -:2072600000000000000000000000000000000000000000000000000000000000000000000E -:207280000000000000000000000000000000000000000000000000000000000000000000EE -:2072A0000000000000000000000000000000000000000000000000000000000000000000CE -:2072C0000000000000000000000000000000000000000000000000000000000000000000AE -:2072E00000000000000000000000000000000000000000000000000000000000000000008E -:2073000000000000000000000000000000000000000000000000000000000000000000006D -:2073200000000000000000000000000000000000000000000000000000000000000000004D -:2073400000000000000000000000000000000000000000000000000000000000000000002D -:2073600000000000000000000000000000000000000000000000000000000000000000000D -:207380000000000000000000000000000000000000000000000000000000000000000000ED -:2073A0000000000000000000000000000000000000000000000000000000000000000000CD -:2073C0000000000000000000000000000000000000000000000000000000000000000000AD -:2073E00000000000000000000000000000000000000000000000000000000000000000008D -:2074000000000000000000000000000000000000000000000000000000000000000000006C -:2074200000000000000000000000000000000000000000000000000000000000000000004C -:2074400000000000000000000000000000000000000000000000000000000000000000002C -:2074600000000000000000000000000000000000000000000000000000000000000000000C -:207480000000000000000000000000000000000000000000000000000000000000000000EC -:2074A0000000000000000000000000000000000000000000000000000000000000000000CC -:2074C0000000000000000000000000000000000000000000000000000000000000000000AC -:2074E00000000000000000000000000000000000000000000000000000000000000000008C -:2075000000000000000000000000000000000000000000000000000000000000000000006B -:2075200000000000000000000000000000000000000000000000000000000000000000004B -:2075400000000000000000000000000000000000000000000000000000000000000000002B -:2075600000000000000000000000000000000000000000000000000000000000000000000B -:207580000000000000000000000000000000000000000000000000000000000000000000EB -:2075A0000000000000000000000000000000000000000000000000000000000000000000CB -:2075C0000000000000000000000000000000000000000000000000000000000000000000AB -:2075E00000000000000000000000000000000000000000000000000000000000000000008B -:2076000000000000000000000000000000000000000000000000000000000000000000006A -:2076200000000000000000000000000000000000000000000000000000000000000000004A -:2076400000000000000000000000000000000000000000000000000000000000000000002A -:2076600000000000000000000000000000000000000000000000000000000000000000000A -:207680000000000000000000000000000000000000000000000000000000000000000000EA -:2076A0000000000000000000000000000000000000000000000000000000000000000000CA -:2076C0000000000000000000000000000000000000000000000000000000000000000000AA -:2076E00000000000000000000000000000000000000000000000000000000000000000008A -:20770000000000000000000000000000000000000000000000000000000000000000000069 -:20772000000000000000000000000000000000000000000000000000000000000000000049 -:20774000000000000000000000000000000000000000000000000000000000000000000029 -:20776000000000000000000000000000000000000000000000000000000000000000000009 -:207780000000000000000000000000000000000000000000000000000000000000000000E9 -:2077A0000000000000000000000000000000000000000000000000000000000000000000C9 -:2077C0000000000000000000000000000000000000000000000000000000000000000000A9 -:2077E000000000000000000000000000000000000000000000000000000000000000000089 -:20780000000000000000000000000000000000000000000000000000000000000000000068 -:20782000000000000000000000000000000000000000000000000000000000000000000048 -:20784000000000000000000000000000000000000000000000000000000000000000000028 -:20786000000000000000000000000000000000000000000000000000000000000000000008 -:207880000000000000000000000000000000000000000000000000000000000000000000E8 -:2078A0000000000000000000000000000000000000000000000000000000000000000000C8 -:2078C0000000000000000000000000000000000000000000000000000000000000000000A8 -:2078E000000000000000000000000000000000000000000000000000000000000000000088 -:20790000000000000000000000000000000000000000000000000000000000000000000067 -:20792000000000000000000000000000000000000000000000000000000000000000000047 -:20794000000000000000000000000000000000000000000000000000000000000000000027 -:20796000000000000000000000000000000000000000000000000000000000000000000007 -:207980000000000000000000000000000000000000000000000000000000000000000000E7 -:2079A0000000000000000000000000000000000000000000000000000000000000000000C7 -:2079C0000000000000000000000000000000000000000000000000000000000000000000A7 -:2079E000000000000000000000000000000000000000000000000000000000000000000087 -:207A0000000000000000000000000000000000000000000000000000000000000000000066 -:207A2000000000000000000000000000000000000000000000000000000000000000000046 -:207A4000000000000000000000000000000000000000000000000000000000000000000026 -:207A6000000000000000000000000000000000000000000000000000000000000000000006 -:207A80000000000000000000000000000000000000000000000000000000000000000000E6 -:207AA0000000000000000000000000000000000000000000000000000000000000000000C6 -:207AC0000000000000000000000000000000000000000000000000000000000000000000A6 -:207AE000000000000000000000000000000000000000000000000000000000000000000086 -:207B0000000000000000000000000000000000000000000000000000000000000000000065 -:207B2000000000000000000000000000000000000000000000000000000000000000000045 -:207B4000000000000000000000000000000000000000000000000000000000000000000025 -:207B6000000000000000000000000000000000000000000000000000000000000000000005 -:207B80000000000000000000000000000000000000000000000000000000000000000000E5 -:207BA0000000000000000000000000000000000000000000000000000000000000000000C5 -:207BC0000000000000000000000000000000000000000000000000000000000000000000A5 -:207BE000000000000000000000000000000000000000000000000000000000000000000085 -:207C0000000000000000000000000000000000000000000000000000000000000000000064 -:207C2000000000000000000000000000000000000000000000000000000000000000000044 -:207C4000000000000000000000000000000000000000000000000000000000000000000024 -:207C6000000000000000000000000000000000000000000000000000000000000000000004 -:207C80000000000000000000000000000000000000000000000000000000000000000000E4 -:207CA0000000000000000000000000000000000000000000000000000000000000000000C4 -:207CC0000000000000000000000000000000000000000000000000000000000000000000A4 -:207CE000000000000000000000000000000000000000000000000000000000000000000084 -:207D0000000000000000000000000000000000000000000000000000000000000000000063 -:207D2000000000000000000000000000000000000000000000000000000000000000000043 -:207D4000000000000000000000000000000000000000000000000000000000000000000023 -:207D6000000000000000000000000000000000000000000000000000000000000000000003 -:207D80000000000000000000000000000000000000000000000000000000000000000000E3 -:207DA0000000000000000000000000000000000000000000000000000000000000000000C3 -:207DC0000000000000000000000000000000000000000000000000000000000000000000A3 -:207DE000000000000000000000000000000000000000000000000000000000000000000083 -:207E0000000000000000000000000000000000000000000000000000000000000000000062 +:2000E0001800686008E220AF0000AF893CF00809038F0000AF800609018F0000AF28600853 +:20010000E220C900F008AF1000AF09018006AF1000AF29FE8F1000AF2860082284100028CD +:200120006048DA5A0B08E220C210A20000A9209F00A0AFAF1E00009F00C0AFE8E00020D010 +:20014000EC08C22048A900005B6828A20000A0000022841000282B7AFA6860DA5A0B080817 +:20016000C22048A900085B6828C230AF0C00008508E220AF0E0000C22029FF00850AAF1167 +:2001800000008F080100AF1C00003A8F0A010018A5086F0C01008508A50A690000850AE2D1 +:2001A00020AF0F0000858FA00000A20000B7089F004F00E8C8C48FD0F4CABF004F00C920D6 +:2001C000D009A9009F004F00CA10EF282B7AFA60E220A9488F0F0000A9348F130000A920E6 +:2001E0008F0800AF8F0900AFA20000A9009F18F03AE8E04000D0F6A9808FB40800E220A959 +:20020000008F890F00A9008F0002AF8F0C02AF8F1802AF8F2402AF6008E2204848A9002201 +:200220003C10006822181000AF890F002901D0F868286008E2204848A901223C100068225B +:20024000181000AF890F002901D0F868286008C22048E220A90D201800C22068286008222F +:200260007810002860080B08C22048A900085B6828E220A5B61A85B6CF1300009005201430 +:200280000064B62B2860DA5A0B0808C22048A900085B6828E220C2108FB50800AFB40800F1 +:2002A0002920F007AFB50800202800AFB408002980F007AFB50800201802AFB408002940C5 +:2002C000F014AFB50800203302AFB50800C90DD005A90A203302282B7AFA6008E220BD004C +:2002E00000F006201800E880F5286008C22048484A4A4A4A4A4A4A4A2005036829FF002049 +:20030000050368286008C22048E220484A4A4A4A201C0368201C03C22068286008C230DAB5 +:20032000290F00AABF00D03A201800FA286008C23048DA5A8B0BC230A30B18690300AAE29C +:2003400020A93A48ABBD0000F006201802E880F5C2302BAB7AFA68286008E220C95BB0044F +:20036000C941B00BC97BB004C961B00328186028386008E220C93AB004C930B00328186076 +:2003800028386008E220C93AB004C930B013C967B004C961B00BC947B004C941B003281896 +:2003A0006028386008E220C93AB004C930B012C967B004C961B00FC947B004C941B0092825 +:2003C0006038E93080F929DF38E93780F208E220C97BB006C961900229DF286008E220C205 +:2003E00010BD0000F00920CD039D0000E880F22860080B08C22048A900085B6828C22048BD +:2004000006232625A523850CA525850E060C260E060C260E18A523650C8523A525650E856B +:2004200025682B2860080B08C22048A900085B6828C220A5238F1A0100A90A008F180100EC +:20044000AF1C010085236425AF1E01008529642BE220A9008527852D2B2860080B08C220DB +:2004600048A900085B6828C220A5238F1A0100A964008F180100AF1C010085236425AF1EC5 +:2004800001008529642BE220A9008527852D2B286008C220A523D008A525D00428E20260CE +:2004A00028C2026008C230A9FFFF85238525E220A9008527286008C230A900008523852529 +:2004C000E220A9008527286008E220A527C900F007C901D00520C657286008C22048A90068 +:2004E000085B6828E220A9048FD30800C22029FF0020F81BE220DCD40808E220A52DC90054 +:20050000F037C901D035C220A52548A52348C220A5298523A52B8525E220A901852720C6D1 +:2005200057C220A5238529A525852BE220A900852DC220688523688525286008C22048A9CE +:2005400000085B6828E220A9048FD30800C22029FF0020F81BE220DCD40808E220A527C9F9 +:2005600002D002286008C22048A900085B6828E220A9048FD30800C22029FF0020F81BE219 +:2005800020DCD40808E220A527C900F007C901D00B20C657C220A525D021286008C22048B4 +:2005A000A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD40808C22048A9B4 +:2005C00000085B6828E220A9098FD30800C22029FF0020F81BE220DCD40808E220A527C974 +:2005E00000F007C901D01120C657A526D029A525D025A524D021286008C22048A900085B19 +:200600006828E220A9048FD30800C22029FF0020F81BE220DCD40808C22048A900085B6894 +:2006200028E220A9098FD30800C22029FF0020F81BE220DCD40808E220A527C901F026C9FE +:2006400000F01F08C22048A900085B6828E220A9048FD30800C22029FF0020F81BE220DC89 +:20066000D408203857286008E220A52DC901F026C900F01F08C22048A900085B6828E22003 +:20068000A9048FD30800C22029FF0020F81BE220DCD4082098062860C220A52548A5234802 +:2006A000C220A5298523A52B8525E220A9008527203857C220A5238529A525852BE220A9E5 +:2006C00001852DC2206885236885256008E220A527C900F023C901F02E08C22048A9000886 +:2006E0005B6828E220A9048FD30800C22029FF0020F81BE220DCD408A52DC900F016C90194 +:20070000D0D7203857800DA52DC901F007C900D0C8209806E220A527286008E220A527C94F +:2007200002D025A52DC902F02408C22048A900085B6828E220A9048FD30800C22029FF0020 +:2007400020F81BE220DCD40820CC06A5272860080B08C22048A900085B6828C230642364A8 +:2007600025E2206427A700C926F044E220A700207203907620F10338E930C22029FF001832 +:2007800065238523A5256900008525209D1E80DB08C22048A900085B6828E220A9028FD339 +:2007A0000800C22029FF0020F81BE220DCD408209D1EA700C948F004C968D0D4209D1EE221 +:2007C00020A700208303902220A403C2200623262506232625062326250623262529FF0059 +:2007E0001865238523209D1E80D52B286008C23038A504E51AA8E220B71AF010C920F0069A +:20080000C909F002286088C0FFFFD0ECA90060080B08C22048A900085B6828C230A51A856A +:2008200000E220A51C850220BE1EA700207203900C204F07C220A52385D720BE1EC220A59B +:2008400000851AE220A502851C205D08E22020CE08C900F005206C0A80F42B286008C220CD +:20086000A51A8500A51C8502A20000E220A00000E00000F00DB700F053C93AF004C920D021 +:2008800033C8B700F046C952F010C972D026B700F03AC952F004C972D01AC8B700F02DC9AA +:2008A00045F004C965D00DC8B700F020C94DF00AC96DF006E8209D1E80B3A700C93AD003B6 +:2008C000209D1EA903851EA991206C0A2860080B08C22048A900085B6828E220A97F851EE8 +:2008E000C21020210AA51ED0034C7109C220A51A8500E220A51C8502C22064046406E23049 +:20090000A000B700F0DAC991F0D6C8C41E90F3C210A700C922D0052093098028A51EC9033D +:200920009019C220A500C51AD008E220A502C51CF009E220A70420694CB009E22020A30944 +:20094000C900D011C220A5008504E220A5028506209D1E80A9C981D01820ED07C900F01492 +:200960008980100B200D0BC930F004A9AF8002A9812B286008C22048A900085B6828E220A7 +:20098000A9028FD30800C22029FF0020F81BE220DCD40808E220209D1EA700F004C922D010 +:2009A000F52860DA5A080B08C22048A900085B6828E220A70420694CA9002A8528C230A908 +:2009C000610B8508E220A93A850AA28000E220A00100B708F031C51ED032C230A00200B7D5 +:2009E00008850CE220A93A850EA528F007A70C20694CB018E210A000B70020CD03D70CD0E6 +:200A00000BC8C41E90F28A2B287AFA60C23018A5086908008508E220A50A6900850AE88028 +:200A2000AC080B8B08C22048A900085B6828C230A9610B8508A93A00850A640CE220A00185 +:200A400000B708F01DC51EB006C50C9002850CC22018A5086908008508A50A690000850AF1 +:200A600080DAE220A50C851EAB2B2860080B08C22048A900085B6828E2208700C22018A55F +:200A8000006901008508A502690000850AE210A41E88E220B7088708F013C22018A5086921 +:200AA00001008508A50A690000850A80E52B286008C230297F000A0A0A1869610BAA28600A +:200AC000088B0B08C22048A900085B682808E22048A93A48AB6828E220C21020B00ABD0087 +:200AE00000C220290F002BAB2860088B0B08C22048A900085B682808E22048A93A48AB6882 +:200B000028C23020B00ABD04002BAB2860088B0B08C22048A900085B682808E22048A93A21 +:200B200048AB6828E220C21020B00ABD0000C22029F0002BAB2860088B0B08C22048A900F5 +:200B4000085B682808E22048A93A48AB6828E220C21020B00ABD0600C22029FF002BAB2871 +:200B600060030110D05C250200030112D09C250200020114D0D3250200020116D00A260209 +:200B800000020318D01426020000011CD00000020004021ED0AB270200040221D06B2702EA +:200BA00000040224D02B270200040127D06B260200040129D0EB26020004012BD0AB260274 +:200BC0000005032DD055260100060331D027260200070235D03E260200FF0138D0000000BF +:200BE0000040013AD00000000020033CD0443E0000200540D049420000200346D09441002B +:200C00000020044AD03441000020034FD02B410000200253D0C3400000500456D0000000B1 +:200C20000050045BD000000000200560D006400000200666D07F40000020036DD05B3E0086 +:200C400000500271D000000000500474D000000000200479D04F3F000020027ED0553E006B +:200C600000200481D0583E0000500586D00000000050058CD000000000200492D0523E00F7 +:200C800000200397D08A41000020049BD0253E00002004A0D0B53D00002005A5D04B3D0065 +:200CA000002005ABD0D83C00002003B1D0D43C00002004B5D0B53B00002004BAD0C73C0082 +:200CC000002007BFD0CB3C00002003C7D0083B00002004CBD0713A00000001D0D0EB27013C +:200CE000003003D2D0E94700003004D6D0394800003005DBD0CA4800003005E1D07C4800F8 +:200D0000003004E7D0094900003003ECD05E4900003003F0D0A34900003003F4D02C4A00B4 +:200D2000003003F8D0B54A00003003FCD0174B0000300400D15B470000300305D1FA460068 +:200D400000300409D1AC46000030030ED156460000300512D18D450000300618D1AC4400EC +:200D60000030041FD1F7430000100324D1A54B0000100328D1704B000010042CD1AA5F003C +:200D800000100431D1BC4B0000100336D1D15C000020053AD17C5E0000100440D1575F000A +:200DA00000200545D16360000020034BD18261000010044FD1EF600000200654D1F86100EC +:200DC0000020045BD11C630000100760D16D4B0000200368D1003A000020056CD1353900DE +:200DE00000200972D1AA29000020097CD137290000200A86D167290000200791D1A4280078 +:200E000000300899D1284300002007A2D1392800003008AAD1924300002008B3D1EE2A007E +:200E2000002008BCD1232A00002006C5D1282C00002009CCD1302D00002004D6D1402E0044 +:200E4000002004DBD1B12E00002004E0D14A2F00002006E5D1863000002008ECD1223100CB +:200E600000200AF5D16E310000200700D2A3320000200708D221330000200810D2933300F0 +:200E800000200619D2D0330000200720D200370000500628D20000000050042FD200000049 +:200EA00000200634D2153900000000000000000000080B08C22048A900085B6828C230A93C +:200EC000FFFF85BAE220A93785BCC22064B764BDE22064B964BF2B28605A08E22085EAC20A +:200EE00010868FC220A50E48A50C48A51248A5104820890FB003200D0F201511C22068853F +:200F00001068851268850C68850E287A60080B08C22048A900085B6828E220A68FCA860C58 +:200F2000E8C23038A5BAE50C85C0E220A5BCE90085C2201511E220A5EAA0000097C3A900FD +:200F4000A0010097C3A0020097C3C220A9000097C3C22018A5BA690100A0050097C3E220F1 +:200F6000C8C8A5BC690097C3C220A5C085B7E220A5C285B9C22038A5C3E9010085BAE220E6 +:200F8000A5C5E90085BC2B2860080B08C22048A900085B6828C230C220A5BD85C9E220A5FE +:200FA000BF85CBA5C9D017E220A5CBD011C220A9000085CFE220A90085D12B281860C220ED +:200FC000A00500B7C985CCE220C8C8B7C985CEC22018A5C9658F850CE220A5CB6900850EDB +:200FE000C22018A50C690800850CE220A50E6900850EC220A50CC5CCD028E220A50EC5CE2F +:20100000D020C220A5CFD05DE220A5D1D057C220A00200B7C985BDE220C8C8B7C985BF4CD6 +:20102000C610C220A50C6908008510E220A50E69008512E220A5C6C510B03E9008C220A53D +:20104000C6C510B034C220A5C985CFE220A5CB85D1C220A00200B7CF85C9E220C8C8B7CF35 +:2010600085CB4CA30FC220A00200B7C997CFE220C8C8B7C997CF4CC610C220A00500B7C917 +:20108000970CE220C8C8B7C9970CC220A00200B7C9970CE220C8C8B7C9970CC220A5CFD076 +:2010A00014E220A5CFD00EC220A50C85BDE220A50E85BF8011C220A00200A50C97CFE220CC +:2010C000C8C8A50E97CFC220A5C985C3E220A5CB85C5C220A5C385B7E220A5C585B9C22001 +:2010E000A00500A50C97C3E220C8C8A50E97C3C220A00200A9000097C3E220C8C897C3E24C +:2011000020A5EAE220A0000097C3A00100A90097C32B28386008C22038A5C0E9080085C3D5 +:20112000E220A5C2E90085C5286008E220A5C5F004C938B012C220A5C3F00CE220A0010077 +:20114000B7C31A97C3286000EA08E220A5C5F004C938B017C220A5C3F011E220A00100B75A +:20116000C33A97C3D003206D11286000EA08C220A5BDD021E220A5BFD01BA5C585BFC22017 +:20118000A5C385BDA90000A0020097C3C8C8E22097C34C5412E220A5BFC5C59028C220A533 +:2011A000BDC5C39020C220A5BDA0020097C3E220C8C8A5BF97C3C220A5C385BDE220A5C5B2 +:2011C00085BF4C5412C220A5BD8508E220A5BF850AE220A00400B708C5C89032D00BC220E2 +:2011E000A00200B708C5C69025C220A00200B70897C3E220C8C8B70897C3C220A5C3A0021A +:20120000009708E220A5C5C8C897084C5412C220A00200B708D008E220C8C8B708F019C2AB +:2012200020A00200B708850CE220C8C8B708850AC220A50C85088099C220A5C3A002009700 +:2012400008E220C8C8A5C59708A90097C3C220A0020097C3205912286008C220A5BD85C363 +:20126000E220A5BF85C5C220A5C3D009E220A5C5D0034CFC12C220A00200B7C3850CE22071 +:20128000C8C8B7C3850EC220A00500B7C38510E220C8C8B7C38512C220A50CC510D008E256 +:2012A00020A50EC512F01FC220A00200B7C3850CE220C8C8B7C3850EC220A50C85C3E2206A +:2012C000A50E85C580A0C220A00200B7C3850CE220C8C8B7C3850EC220A00200B70C97C322 +:2012E000E220C8C8B70C97C3C220A00500B70C97C3E220C8C8B70C97C34C7512286008C2C7 +:201300002064166418286008C230A516D016A518D012E2206416A5E21A1A8517A5E38518FD +:2013200064198007C220A5171A8517C220A5BB3AC517F002B01F08C22048A900085B68286E +:20134000E220A9038FD30800C22029FF0020F81BE220DCD4082860C900D005C00100F005A2 +:2013600009309716C86008C230640CA525101A18A52349FFFF6901008523A52549FFFF694E +:2013800000008525A9FFFF850C641064126414A21F00F806232625A51065108510A5126501 +:2013A000128512A51465148514CA10E7D8E220200713A00000A50CF004A92D8002A92097E7 +:2013C00016C8A20500B51029F04A4A4A4A205713B510290F205713CA10EBC00100D00CA966 +:2013E000208716A00100A9309716C8A9009716286000EA08E220C210A00000BD0000F0044C +:20140000E8C880F72860080B08C22048A900085B6828E220C210A00000B723D004B729F04A +:2014200025B723D7299012D003C880EDC220A901008523E22064258015C220A9FFFF85237E +:20144000E22085258008C2206423E2206425E220A90085272B2860080B8B08C22048A900E1 +:20146000085B6828E220C21008C22048E220A52548ABC2206828A62320F313840C08C220D9 +:2014800048E220A52B48ABC2206828A62920F313C2209838650CAAE220A90220D90EC22075 +:2014A000A5B78508E220A5B9850AA0000008C22048E220A52548ABC2206828A623BD0000CB +:2014C000F0069708E8C880F5E22008C22048E220A52B48ABC2206828A629BD00009708F0CC +:2014E00004E8C880F5C220A5088523E220A50A8525A9028527AB2B2860DA5A080B8B08C2E0 +:201500002048A900085B6828C220A50A48A50848C23008C22048E220A52548ABC2206828A4 +:20152000A62320F31398AAE8E220A90220D90EC220A5C08508A5C2850AA00000E220B72398 +:201540009708F003C880F7C220A5088523A50A8525C22068850868850AAB2B287AFA600882 +:20156000E220C210A00000B723F005C880F98492C230C4299013F011A58F300DF00BC48F8F +:20158000B012A529D00E4CDD15200713E220A90087168039200713C23018A5236529852322 +:2015A000A5256900008525A00000E220A7239716F01BC22018A5236901008523A525690023 +:2015C000008525C8C48FD0E2A900009716C220A5168523A5188525E220A9028527286008A9 +:2015E000C230200614A523C9FFFFD00520A404800320B604286008C230200614A523C901E8 +:2016000000D00520A404800320B604286008C230200614A523C90000D00520A40480032043 +:20162000B604286008C230200614A523C90000F00520A404800320B604286008C2302006E1 +:2016400014A523C9FFFFF00520A404800320B604286008C230200614A523C90100F005206A +:20166000A404800320B6042860485A0B0808C22048A900085B6828C230A900008500851A9B +:20168000A936008502851CAD8A0F3020A00200B71AF00FC5559010C559F002B00520CB16BB +:2016A00080E5282B7A6860207A1F80DB08C22048A900085B6828E220A9018FD30800C22056 +:2016C00029FF0020F81BE220DCD40808C23085236425206613A5161A8523A518852520C568 +:2016E0004218A51A6904008500A51C6900008502E220A920201800C220200A1790FBE2207B +:20170000A90D201800207A1F2860080B8B08C22048A900085B682808E22048A90048AB68D8 +:2017200028E220C210A700F03A30052018008029C220297F000A0A0A1869610B8508A93AC1 +:2017400000690000850A08E22048A93A48AB6828A00200B708AA20DB02C220209D1EAB2B3E +:20176000281860AB2B28386008C220A9FF6F851FA9FF7F8521A9FFFF852385258529852B6A +:20178000E2208527852D2860080B8B08C22048A900085B682808E22048A90048AB6828C2B5 +:2017A000305AA41FBD0000990000BD0200990200E220BD0400990400C2203898E9050085A7 +:2017C0001F7AAB2B2860080B8B08C22048A900085B682808E22048A90048AB6828C2305ADC +:2017E00018A51F690500851FA8B900009D0000B902009D0200E220B904009D0400BD000086 +:201800007AAB2B2860080B8B08C22048A900085B682808E22048A90048AB6828E220C21032 +:201820005AA4219900008884217AAB2B2860080B8B08C22048A900085B682808E22048A984 +:201840000048AB6828E220C2105AA421C88421B90000C22029FF007AAB2B286008E220A957 +:201860000120051828605A088B08E22048A90048AB6828E220A421B90100C901D008C22032 +:20188000E621AB287A6008C22048A900085B6828E220A9028FD30800C22029FF0020F81B72 +:2018A000E220DCD40848080B8B08C22048A900085B682808E22048A90048AB6828E220A496 +:2018C00021C0FF7FF01120C00A850CB9010020C00AC50CF0029008C220AB2B28681860C2AC +:2018E00020AB2B286838604C4F0708E220A9008F004D00A2010020A61A208405C220A523C3 +:201900009F004D00E220AF004D001A303E8F004D00E8E820BE1EE220A700C990F009C92CBD +:20192000D00A209D1E80CF209D1E286008C22048A900085B6828E220A9028FD30800C22079 +:2019400029FF0020F81BE220DCD40808C22048A900085B6828E220A90A8FD30800C220297A +:20196000FF0020F81BE220DCD40808203C4F9023E220A5EA2980D006203D4D4C9119E22063 +:20198000A98F20AA1F205C1820EA1820475C206618286008C22048A900085B6828E220A90E +:2019A000028FD30800C22029FF0020F81BE220DCD408080B08C22048A900085B6828E220E1 +:2019C000C210209D1EA00000B700F024C922F003C880F5840CE220A902A60CE8200713A023 +:2019E0000000C40CF029A7009716C8209D1E80F208C22048A900085B6828E220A9028FD3B8 +:201A00000800C22029FF0020F81BE220DCD408A9009716C220A5168523A5188525A902001A +:201A20008527209D1E2B286008E220A700C22029FF0020EA0A852F205C1808E22048A9005A +:201A400048AB6828204C1A2066182860209D1E6C2F0848080B8B08C22048A900085B682825 +:201A6000C230202E18898000F0374820EA0A852F6820370BC90100F008C230A2290820C697 +:201A800017C230A2230820C61708E22048A90048AB682820A31AA22308208817AB2B286826 +:201AA0006000EA6C2F080808C22048A900085B682808E22048A90048AB6828C210DAE22037 +:201AC000A700D0034C691B3033C920D0034C631BC93AB004C930B056C926F052C922D0032E +:201AE0004C7C1BC95BB007C94190034C881BC97BB007C96190034C881B4C691BC98FF0409D +:201B0000C990F041200D0BC930D00C20281AA223082088174CBE1AC900D04EA700A621E0E7 +:201B2000FF7FF00520A518B0122005188035C220209255A22308208817808320521A80DD40 +:201B4000200518801EE220A421C0FF7FF046A421B90100C901F03DC98FF00520521A80EEB2 +:201B6000202E18209D1E4CBE1AA621E0FF7FB024BD0100C901F01D20521A80ED20B219A2EC +:201B800023082088174CBE1A206A19A223082088174CBE1AA2230820C617FA2860080B8BFA +:201BA00008E22048A90048AB682808C22048A900085B6828C230A9FD5F8533AB2B286008C4 +:201BC0000B08C22048A900085B6828C2309233C633C6332B286008C23029FF0020BF1B288C +:201BE00060080B08C22048A900085B6828C230E633E633B2332B28608B0B0808C22048A96F +:201C000000085B682808E22048A90048AB6828C2208523A900008525E220A900852785EAB0 +:201C2000A93A85E9C220A9521C85E7209F4EC220A5D78523A5D98525E220A900852785EAED +:201C4000A93A85E9C220A9561C85E7209F4E282BAB604552520045524C00E220C210204E51 +:201C600002AFD308000AC22029FF00A808E22048A93A48AB6828BEAC1C20DB02C220A5D783 +:201C8000F027A2DA1C20DB0208E22048A90048AB6828C220AFD708008F230800A900008FB8 +:201CA00025080020E542204E024C3D25DE1CE11CE71CF41C021D101D231D391D491D581DCB +:201CC000651D761D851D921DA01DAF1DC01DD91DED1D011E171E2B1E461E206174004F4BA8 +:201CE00000427265616B0053796E746178206572726F72004F7574206F66206D656D6F72C1 +:201D0000790054797065206D69736D61746368005661726961626C65206E6F7420666F7531 +:201D20006E64004C696E65206E756D626572206E6F7420666F756E6400537461636B207568 +:201D40006E646572666C6F7700537461636B206F766572666C6F77004F7574206F662072D9 +:201D6000616E676500496C6C6567616C20617267756D656E740046696C65206E6F74206614 +:201D80006F756E64004E6F742061206E756D626572004D617468206F766572666C6F770014 +:201DA0004D61746820756E646572666C6F77004469766973696F6E206279207A65726F0083 +:201DC000556E61626C6520746F2072656164206469726563746F727900556E61626C652081 +:201DE000746F206C6F61642066696C6500556E61626C6520746F20736176652066696C6597 +:201E000000556E61626C6520746F2064656C6574652066696C6500436F756C64206E6F74AD +:201E20002066696E642066696C6500436F756C64206E6F7420757064617465206469726552 +:201E400063746F727900436F756C64206E6F7420636F7079207468652066696C6500080BDA +:201E600008C22048A900085B6828E220A90085D22B28600B0808C22048A900085B682808F6 +:201E8000C220A95A1C8FD40800E220A93A8FD6080028208A4120CB3C6431282B60080B08E7 +:201EA000C22048A900085B6828C22018A5006901008500E220A502690085022B2860080B6F +:201EC00008C22048A900085B6828E220A700F00FC920F006C909F0028005209D1E80ED2BF1 +:201EE000286008E220A700F009C93AF005209D1E80F3286008E2206436A700F019C537F0A2 +:201F00002CC99BF01EC99FF01AC99EF01AC9A0F016209D1E80E3207A1FC220A5D7F01DE28D +:201F20002080D6E63680EAC636303080E4A5353006A536F00280DA209D1E286008C2204819 +:201F4000A900085B6828E220A9028FD30800C22029FF0020F81BE220DCD40808C22048A9FC +:201F600000085B6828E220A9028FD30800C22029FF0020F81BE220DCD40808C230A00000C6 +:201F8000B71A850C18A51A650C851AA51C690000851CA00200B71A85D718A51A6904008595 +:201FA00000A51C6900008502286008E2204820BE1E68E220C700D008209D1E20BE1E286032 +:201FC00008C22048A900085B6828E220A9028FD30800C22029FF0020F81BE220DCD408081D +:201FE000E22020BE1EE220A700F010C93AF00CC537F005209D1E80EF2838602818605A083E +:20200000E220A00000B700F00DC93AF007C920D005C880F1A900287A60080B8B08C22048FE +:20202000A900085B6828206817E220A90085DCAD8A0F304BA700C93AD003209D1E20BE1E44 +:20204000A700D0034CC920205903B052A7001010200D0B850CC920D0034CB720A5D2F0512C +:2020600008C22048A900085B6828E220A9028FD30800C22029FF0020F81BE220DCD408087C +:20208000C22048A900085B6828E220A9018FD30800C22029FF0020F81BE220DCD4082094B9 +:2020A000414CC92008E22048A90048AB68286C2F08A50CC910D0A9A70020EA0AC220852F35 +:2020C000206817209D1E20A420AB2B28600858205E1E209D1BE2209C8A0FC220A51A850013 +:2020E000A51C85024C0E2108C220A00200B71A85D720FE12E220A5DCC903F012C22018A544 +:202100001A6904008500E220A51C69008502C220201920E220A5DCC903F0F3C900D031E2E7 +:202120002020BE1EA700F028C93AF01F08C22048A900085B6828E220A9028FD30800C220EB +:2021400029FF0020F81BE220DCD408209D1E80BE28600858E220A98085D29C8A0F209D1BDA +:20216000C2306431A00200B71AF02920E720E220A5DCC901F01EC902F0EAC903F0E6C220A1 +:20218000A0000018A51A771A851AE220A51C6900851C80D0E220A90085D2286008C230C235 +:2021A00020A900008508A93600850AC220A00200B708F031C523F01EB02BC220A00000188C +:2021C000A5087708850CE220A50A6900850AC220A50C850880D7C220A508851AE220A50A43 +:2021E000851C28386028186008E220A70C8708C220A50CC500D008E220A50EC502F026C20E +:202200002018A50C690100850CE220A50E6900850EC22018A5086901008508E220A50A6971 +:2022200000850A80C4286008E220A70C8708C220A50CC500D006A50EC502F026C22038A57A +:202240000CE90100850CE220A50EE900850EC22038A508E901008508E220A50AE900850A5F +:2022600080C6286008A00000C22018A5087708850CE220A50A6900850EC22018A5D969049F +:20228000008500E220A5DB69008502A00000C22038A5D9F70885D9E220A5DBE90085DB20C7 +:2022A000E821208A4128600808C22048A900085B6828C230A0020097D918A5D96904008540 +:2022C00008E220A5DB6900850AE220A00000B71A9708F003C880F7C2209818690500850CA7 +:2022E000C220A00000A50C97D9C22018A5D9650C850CE220A5DB690085DBC220A50C85D985 +:20230000C220A00000A9000097D9C8C00500D0F8208A4128600B0808C22048A900085B68A1 +:2023200028C230A900008508A93600850AA00200B708F01DC5D7F025B01DA0000018A5088E +:202340007708850CA50A690000850AA50C850880DCA90000282B60A90100282B60A90200C8 +:20236000282B6008C230A905008510A00000E220B71AF007C220E610C880F3C220A50885DC +:2023800000A50A850218A5D9690400850CA5DB690000850E18A5D9651085D9A5DB690000A5 +:2023A00085DB18A5D96904008508A5DB690000850A202722C220A510A000009700A5D7A062 +:2023C0000200970018A5006904008500A5026900008502A00000E220B71A9700F003C880D9 +:2023E000F7208A41286008C23085D7201523C90000F02CC90100F022C220A50848A50A4836 +:2024000020642268850A688508A51A8500A51C850220BE1EE220A700F00A2063238005A52F +:20242000D720A72228600B0808C22048A900085B6828E220C210A20000BD004FF003E88096 +:20244000F8860CC2308AC9020090123A1869004FAA18658FA8A50C3A8B440000ABC220A6B4 +:2024600055A0004FA58F8B54003AABE220A50CC9029018A68FA9229D004FE8BD004FD0FA50 +:20248000A9229D004FA900E89D004F282B60DA5A8B0B0808C22048A900085B6828E220C2F1 +:2024A00010AD004FC923F00AC97CF017282BAB7AFA60C220A90300858FA9D42485552026A9 +:2024C0002480E9C220A90400858FA9D824855520262480D8444952004252554E008B0820C2 +:2024E000E40008E22048A93A48AB6828A23BD220DB0228AB6008E230A901201C0020DB0066 +:20250000F006C90DF00280F528600B0808C22048A900085B6828C23064D7A9004F851AA9B2 +:202520000000851C200F08C220A5D7D00520CD20800720E623282B3860282B1860C230A289 +:20254000FFFE9A20DD24200800200C00A90000201C00208E24200A25B0EC80E708E220203C +:202560001A07C900F02CC901F02DC902F01F08C22048A900085B6828E220A9048FD30800AD +:20258000C22029FF0020F81BE220DCD4082057148008208E4F8003203152286008E220205C +:2025A000CC06C900F023C901F02408C22048A900085B6828E220A9048FD30800C22029FF9E +:2025C0000020F81BE220DCD40820A04F8003202652286008E22020CC06C900F023C901F0CA +:2025E0002408C22048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD408D9 +:2026000020B24F800320C7522860203606206706207C5260A5238F1A0100A5298F18010036 +:20262000AF1E01008523600820C80420F904C220A52325298523A525252B8525286008209F +:20264000C80420F904C220A52305298523A525052B852528600820C804C220A52349FFFF00 +:202660008523A52549FFFF8525286008E220201A07C900F02CC901F02DC902F01F08C22094 +:2026800048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD40820DF1580B2 +:2026A0000820B3508003200C58286008E220201A07C900F02CC901F02DC902F01F08C22085 +:2026C00048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD40820F615805B +:2026E0000820D4508003202158286008E220201A07C900F02CC901F02DC902F01F08C2200F +:2027000048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD408200D168002 +:20272000082001518003203658286008E220201A07C900F02CC901F02DC902F01F08C2208B +:2027400048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD40820241680AB +:2027600008201F518003207558286008E220201A07C900F02CC901F02DC902F01F08C220EE +:2027800048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD408203B168054 +:2027A00008203D518003206058286008E220201A07C900F02CC901F02DC902F01F08C220A5 +:2027C00048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD40820521680FD +:2027E00008206A518003204B58286008E220A527C900F02DC901F01F08C22048A900085B55 +:202800006828E220A9048FD30800C22029FF0020F81BE220DCD408E220A526498085268057 +:2028200016C220A52349FFFF8523A52549FFFF8525E623D002E625286008E22020A61A20B6 +:20284000DA05202504A5230A0A0A0A052948A92C20AA1F20A61A20DA05202504A5230A0A28 +:202860000A0A052948A92C20AA1F20A61A20DA05202504A5230A0A0A0A052948AF0E08AF0E +:20288000090C8F0E08AF688F0008AF688F0208AF688F0408AFAF0E08AF29F78F0E08AF20B7 +:2028A000E21E286008E22020A61A20DA05202504A5230A0A0A0A052948A92C20AA1F20A674 +:2028C0001A20DA05202504A5230A0A0A0A052948A92C20AA1F20A61A20C804205B04C22045 +:2028E000A5238592A5298523202504E220A5230A0A0A0A052948C220A5928523202504E2E6 +:2029000020A5230A0A0A0A052948AF0E08AF090C8F0E08AF688F0F08AF688F0A08AF688FE8 +:202920000908AF688F0608AFAF0E08AF29F78F0E08AF20E21E286008E2204820A61A20DA67 +:2029400005E220A523290F0A0A0A0A8301A92C20AA1F20A61A20DA05A523290F03018F1E76 +:202960000000E22068286008C220F40000E22020A61A20DA05A5238301A92C20AA1F20A6D6 +:202980001A20DA05A5238302A92C20AA1F20A61A20DA05A5238F0D00AFA3028F0E00AFA38D +:2029A000018F0F00AFC22068286008C220F40000E22020A61A20C804A523F016A9018F0440 +:2029C00000AFA9208F0800AF8F0900AF222C1100800AA9008F0400AF222C1100A92C85372E +:2029E00020DF1F9039209D1E20A61A20DA05A5238301A92C20AA1F20A61A20DA05A5238302 +:202A000002A92C20AA1F20A61A20DA05A5238F0500AFA3028F0600AFA3018F0700AFC22058 +:202A200068286008C2203B38E905001BE22020A61A20DA05C90A901F08C22048A900085B9F +:202A40006828E220A90A8FD30800C22029FF0020F81BE220DCD408A5238301A92C20AA1FC6 +:202A600020A61A20DA05A5238302A92C20AA1F20A61A20DA05A5238303A92C20AA1F20A6BB +:202A80001A20DA05A5238304A92C20AA1F20A61A20DA05A5238305A9AF85A0A3010AC220D4 +:202AA00029FF00AABFDA2A3A859EE220A3020A0A18659E859EA59F6900859FA00200A30312 +:202AC000979EA00100A304979EA00000A305979EC2203B186905001B286000200024002815 +:202AE000002C003000340038003C401F801FDA5A0820A61A20C804C220A523890001D017B1 +:202B0000AF0000AF890001F00EE220A9008F0100AFA9018F0100AFC220A5238F0000AFE232 +:202B200020A524C2202903000AAAC220BF752B3A8F10F03ABF7D2B3A8F12F03AAF10F03A51 +:202B40008F080100AF12F03A8F0A0100AF0C01008F14F03AE220AF0E01008F16F03A222CF2 +:202B60001100C220AF1A0000AAAF1C0000A8202000287AFA608002200340019001E0015890 +:202B800002F0002C0150006400280032003C004B001E00320048005C0020002A00340043CC +:202BA0000016003400DA08C230C90200B01C0A0AAABF00F03A859EBF02F03A85A0C9F000CD +:202BC000B008C9B000900328FA6008C22048A900085B6828E220A9098FD30800C22029FFB9 +:202BE0000020F81BE220DCD408DA08C230C90200B0170A0AAABF08F03A859EBF0AF03A8538 +:202C0000A0C94000B00328FA6008C22048A900085B6828E220A9098FD30800C22029FF00E0 +:202C200020F81BE220DCD40808C2303B38E907001B20A61A20DA05C220A523C90200B059D2 +:202C40008301E220A92C20AA1F20A61A20DA05A5238303A92C20AA1F20A61A20DA05A301C2 +:202C60000A0A0AAAA303D005A5230A8004A523382A9F0001AFC220A92C00853720DF1FB001 +:202C800037C22008C220A900008523A9B0008525E220A900852728802708C22048A90008D4 +:202CA0005B6828E220A9098FD30800C22029FF0020F81BE220DCD408C220209D1E20A61A77 +:202CC000C220A3010A0AAAA5239F00F03A9F08F03A8304A5259F02F03A38E9B0009F0AF0C8 +:202CE0003A8306A3010A0A0AAAE220A3049F0101AFA3059F0201AFA3069F0301AFA9009F70 +:202D00000401AF9F0501AFC2303B186907001B286008C22048A900085B6828E220A90A8F41 +:202D2000D30800C22029FF0020F81BE220DCD40808C22020A61A20DA05A52320E92BC2201A +:202D4000A59E8F0504AFAF14F03A8F0804AFE220A5A08F0704AFAF16F03A8F0A04AFA9003E +:202D60008F0104AFA9858F0004AFAF0104AF30FAA9008F0004AF286008C220A55D8F08011C +:202D800000AF10F03A8F0A010018AF0C01006559850CAF0E0100690000850E18A50C659E07 +:202DA000850CA50E65A0850EE220A555870C2860C220A9010085DD38A561E5598569100BAD +:202DC00049FFFF1A8569A9FFFF85DDA9010085DF38A565E55D856D100B49FFFF1A856DA900 +:202DE000FFFF85DFA56DC569B004A5698006A56D49FFFF1A480A686A857120782DA559C5D4 +:202E000061D006A55DC565F036A5718575A56949FFFF1AC5751010F00E38A571E56D8571BC +:202E200018A55965DD8559A575C56D10CDF0CB18A5716569857118A55D65DF855D80BB60AB +:202E400008C2203B38E904001B08C22048A900085B682808E22048A90048AB6828C23020AF +:202E6000A61A20DA058301A92C0020AA1F20A61A20C804A5238301A92C0020AA1F20A61A9B +:202E800020C804A5238303A92C0020AA1F20A61A20DA05A5238555A3018559A303855DA30C +:202EA0000120A52B20782DC2203B186904001B286008C2203B38E90A001B08C22048A900D1 +:202EC000085B682808E22048A90048AB6828C23020A61A20DA058301A92C0020AA1F20A6A8 +:202EE0001A20C804A5238303A92C0020AA1F20A61A20C804A5238305A92C0020AA1F20A620 +:202F00001A20C804A5238307A92C0020AA1F20A61A20C804A5238309A92C0020AA1F20A6F7 +:202F20001A20DA05A5238555A3038559A305855DA3078561A3098565A30120A52B20B02D11 +:202F4000C2203B18690A001B286008C2203B38E90C001B08C22048A900085B682808E220E1 +:202F600048A90048AB6828C23020A61A20DA058301A92C0020AA1F20A61A20C804A52383B3 +:202F800003A92C0020AA1F20A61A20C804A5238305A92C0020AA1F20A61A20C804A523837F +:202FA00007A92C0020AA1F20A61A20C804A5238309A92C0020AA1F20A61A20DA05A5238344 +:202FC0000BA30120E92BA907008F0004AFC220A3058F000100AF10F03A8F02010018AF04BC +:202FE00001006303850CE220AF0601006900850EC22018A59E650C8F0504AFE220A5A06584 +:203000000E8F0704AFC22038A307E303850C8F0804AF38AF10F03A8F0E04AF38A309E30597 +:203020008F0A04AFE220A30B8F0104AFAF0004AF09808F0004AFAF0104AF30FAA9008F005F +:2030400004AFC2203B18690C001B286008C220C94000B0130A0A0A1869000C859EA9AF0094 +:2030600069000085A0286008C22048A900085B6828E220A9098FD30800C22029FF0020F82C +:203080001BE220DCD40808C2203B38E903001BC23020A61A20DA058301A92C0020AA1FE202 +:2030A0002020A61A20DA05A523C908B0568303A92C20AA1F20A61A20C804C22038A523E997 +:2030C00000008523A525E9B00085253036C220A301AA204C30A523A00100979EE220A5259F +:2030E000C8C8979EBF18F03A29F1850CA3030A290E050C879E9F18F03AC2203B18690300C0 +:203100001B286008C22048A900085B6828E220A9098FD30800C22029FF0020F81BE220DC05 +:20312000D40808C2203B38E904001BC23020A61A20DA058301A92C0020AA1F20A61A20C873 +:2031400004A5238303A92C0020AA1F20A61A20C804A301204C30A303A00400979EA523A06C +:203160000600979EC2203B186904001B286008C2203B38E903001BC23020A61A20DA058317 +:2031800001A92C0020AA1FE22020A61A20C804A523D00483038004A9018303A92C8537201B +:2031A000DF1FB020C230A301AA204C30E220BF18F03A29FE850CA3032901050C9F18F03AE8 +:2031C000879E8036C230209D1E20A61A20DA05A523C90800B02E0A0A0A0A850CA301AA20CA +:2031E0004C30E220A3032901050C850CBF18F03A298E050C879E9F18F03AC2203B1869036F +:20320000001B286008C22048A900085B6828E220A9098FD30800C22029FF0020F81BE220E0 +:20322000DCD40808C220C90400B0198D0001A904008D020118AD0401698002859EA9AF005B +:2032400085A0286008C22048A900085B6828E220A9098FD30800C22029FF0020F81BE22096 +:20326000DCD40808C220C90400B0198D0001A90C008D020118AD0401690002859EA9AF0093 +:2032800085A0286008C22048A900085B6828E220A9098FD30800C22029FF0020F81BE22056 +:2032A000DCD40808C2203B38E906001BC22020A61A20DA05A5238301A92C0020AA1F20A65E +:2032C0001A20DA05A5238303A92C0020AA1F20A61A20DA05A5238305A92C0020AA1F20A616 +:2032E0001A20C804A301202332A523879EE22038A525E9B0A00200979EA305D00DE220A324 +:20330000032907A00300979E800DE220A30329070908A00300979EC2203B186906001B286D +:203320006008C2203B38E906001BC22020A61A20DA05A5238301A92C0020AA1F20A61A20FB +:20334000C804A5238303A92C0020AA1F20A61A20C804A5238305A92C0020AA1F20A61A20BB +:20336000C804A301206332A523A00100979EE22038A525E9B0C8C8979EC220A303A00400FC +:20338000979EA305A00600979EC2203B186906001B286008C220F40000C22020A61A20DA94 +:2033A00005A5238301A92C0020AA1F20A61A20C804A301206332A523D006E220A90080040C +:2033C000E220A901E220A00000979EC22068286008C2203B38E904001BC22020A61A20DA77 +:2033E00005A5238301A92C0020AA1F20A61A20C804A5238303A92C0020AA1F20A61A20C81E +:2034000004A301206332A523A00A00979EA303A00800979EC2203B186904001B28600B08CD +:2034200008C22048A900085B6828E220A9008F58F03AAF5CF03AC9B0B01C8F2404AFAF5B18 +:20344000F03A8F2304AFAF5AF03A8F2204AFA9108F58F03A801738E9B08F0404AFAF5BF0D4 +:203460003A8F0304AFAF5AF03A8F0204AFAF59F03AD03CAF58F03AF01BAF5DF03A8F2804EB +:20348000AFAF5EF03A8F2904AFAF5FF03A8F2A04AF828B00AF5DF03A8F0804AFAF5EF03A73 +:2034A0008F0904AFAF5FF03A8F0A04AF827000AF58F03A09018F58F03A8910F032AF60F045 +:2034C0003A8F2804AFAF61F03A8F2904AFAF62F03A8F2A04AFAF63F03A8F2B04AFAF64F050 +:2034E0003A8F2C04AFAF65F03A8F2D04AF8030AF60F03A8F0804AFAF61F03A8F0904AFAF10 +:2035000062F03A8F0A04AFAF63F03A8F0B04AFAF64F03A8F0C04AFAF65F03A8F0D04AFE250 +:2035200020AF69F03AC9B0B0208F2704AFAF68F03A8F2604AFAF67F03A8F2504AFAF58F030 +:203540003A09208F58F03A801738E9B08F0704AFAF68F03A8F0604AFAF67F03A8F0504AF36 +:20356000AF66F03AD03EAF58F03A8920F01BAF6AF03A8F2804AFAF6BF03A8F2904AFAF6CA2 +:20358000F03A8F2A04AF828B00AF6AF03A8F0804AFAF6BF03A8F0904AFAF6CF03A8F0A048A +:2035A000AF827000AF58F03A09028F58F03A8920F032AF6DF03A8F2804AFAF6EF03A8F29A3 +:2035C00004AFAF6FF03A8F2A04AFAF70F03A8F2B04AFAF71F03A8F2E04AFAF72F03A8F2F0B +:2035E00004AF8030AF6DF03A8F0804AFAF6EF03A8F0904AFAF6FF03A8F0A04AFAF70F03A69 +:203600008F0B04AFAF71F03A8F0E04AFAF72F03A8F0F04AFAF58F03A2930F043C910F0762B +:20362000C920D003828A00AF58F03A2903F023C903F02308C22048A900085B6828E220A9FA +:203640000A8FD30800C22029FF0020F81BE220DCD408A9018002A9038F2004AF827D00AF17 +:2036600058F03A2903F023C903F02308C22048A900085B6828E220A90A8FD30800C22029B2 +:20368000FF0020F81BE220DCD408A9018002A9038F0004AF8034AF58F03A29010A09118F62 +:2036A0002004AFAF58F03A290209118F0004AF8019AF58F03A290209218F2004AFAF58F007 +:2036C0003A29010A09218F0004AFAF0004AF09808F0004AFAF58F03A2930F00FAF2004AFD8 +:2036E00009808F2004AFEAEAEAEAEAAF0104AF8980D0F8A9008F2004AF8F0004AF282B6019 +:203700000B08E220C210A900A200008F59F03AE8E01A00D0F620FE1FC9E6F023C9E7F05EC0 +:2037200008C22048A900085B6828E220A9028FD30800C22029FF0020F81BE220DCD408208D +:20374000AA1F20A61A20C804C220A5238F5AF03AE220A5258F5CF03AA92C20AA1F20A61A98 +:2037600020C804C220A5238F5DF03AE220A5258F5FF03AE220A9008F59F03A82740020AA3C +:203780001F20A61A20C804C220A5238F5AF03AE220A5258F5CF03AA92C20AA1F20A61A20E2 +:2037A0008405C220A5238F60F03A8D0001A92C0020AA1F20A61A208405C220A5238F62F05D +:2037C0003A8D0201A92C0020AA1F20A61A208405C220A5238F64F03AC220AD04018F5DF0A1 +:2037E0003AE220AD06018F5FF03AE220A9018F59F03AE220A99C20AA1F20FE1FC9E6F023D4 +:20380000C9E7F05E08C22048A900085B6828E220A9028FD30800C22029FF0020F81BE22086 +:20382000DCD40820AA1F20A61A20C804C220A5238F67F03AE220A5258F69F03AA92C20AAC4 +:203840001F20A61A20C804C220A5238F6AF03AE220A5258F6CF03AE220A9008F66F03A8273 +:20386000740020AA1F20A61A20C804C220A5238F67F03AE220A5258F69F03AA92C20AA1FA9 +:2038800020A61A208405C220A5238F6DF03A8D0001A92C0020AA1F20A61A208405C220A573 +:2038A000238F6FF03A8D0201A92C0020AA1F20A61A208405C220A5238F71F03AC220AD047F +:2038C000018F6AF03AE220AD06018F6CF03AE220A9018F66F03AC220AF5DF03ACF6AF03AA3 +:2038E000D014E220AF5FF03ACF6CF03AD008C220201E34282B6008C22048A900085B682898 +:20390000E220A90A8FD30800C22029FF0020F81BE220DCD40808C23020A61A20DA05A523F0 +:2039200048A92C0020AA1F20A61A20DA05A423FA20200028600820BE1EE220A700D0034C4D +:20394000DA39C93AD0034CDA39C922D00B20B21920C542A93B20AA1F2059039041203C4F82 +:20396000903CA93F201800A920201800201000E220A5EAC902F046C900F062C901F05D085E +:20398000C22048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD40808C287 +:2039A0002048A900085B6828E220A9028FD30800C22029FF0020F81BE220DCD408C220A96A +:2039C000004C8523A900008525E220A9028527C220209F4EA90D002018002860EAC220A571 +:2039E000008540A5028542A9004C8500A900008502204F07C220A5408500A542850280CF6B +:203A00000820BE1EE220A700F046C93AF042205903903F203C4F903A201400E2208F004EBB +:203A200000A9008F014E00C220A9004E8523A900008525E220A9028527209F4E20BE1EA722 +:203A400000F00DC93AF009C92CD007209D1E80B1286008C22048A900085B6828E220A90292 +:203A60008FD30800C22029FF0020F81BE220DCD4080820A61A20C804E220A95C85A2C22001 +:203A8000A52385A3E220A52585A5E220A92C853720DF1F9041209D1E20A61A208405C22078 +:203AA000A5238555E220A92C853720DF1F9027209D1E20A61A208405C220A5238559E2200E +:203AC000A92C853720DF1F900D209D1E20A61A208405C220A423A659A5550B8B0822A2082A +:203AE0000028AB2B20E21E286008C22048A900085B6828E220A9048FD30800C22029FF002F +:203B000020F81BE220DCD40808E22020BE1E203C4F9064A98F20AA1FA901200518A2010068 +:203B2000A9008F004D0020A61A208405C220A5239F004D00E220AF004D001A8F004D0030BD +:203B400055E8E820BE1EA700C92CF025C990D027209D1E200E5AC220A5C08523E220A5C288 +:203B600085256426A5EA098085EA8527209F4E2860209D1E4C263B08C22048A900085B681B +:203B800028E220A9028FD30800C22029FF0020F81BE220DCD40808C22048A900085B682821 +:203BA000E220A90A8FD30800C22029FF0020F81BE220DCD4080820BE1EE220A700F028C961 +:203BC0003AF0242059039021203C4F901C20083C209F4E20BE1EA700F00DC93AF009C92C11 +:203BE000D007209D1E80CF286008C22048A900085B6828E220A9028FD30800C22029FF004D +:203C000020F81BE220DCD40808A5028542A5008540A51C8546A51A8544C220A53AD004A589 +:203C200038F04EA5388500A53A8502A53C851AA53E851CE220A700F053C93AF04FC92CD04F +:203C400003209D1E20BE1EA700C922F04E207203B04E08C22048A900085B6828E220A902AC +:203C60008FD30800C22029FF0020F81BE220DCD408C220A90000851AA93600851C18A51A62 +:203C80006904008500A51C6900008502E220A9808535A9AB853720F41E80A920B2198003C3 +:203CA00020E718C220A5008538A502853AA51A853CA51C853EA544851AA546851CA54085B9 +:203CC00000A5428502286020E21E606438643A643C643E602024006020A61AC220A525481A +:203CE000A52348E220A700C92CD022209D1E20A61AC220A526D03568850868850AC220A544 +:203D0000238708E220A00200A52597086008C22048A900085B6828E220A9028FD30800C2DD +:203D20002029FF0020F81BE220DCD40808C22048A900085B6828E220A9098FD30800C22080 +:203D400029FF0020F81BE220DCD40820A61AC220A52548A52348E220A700C92CD019209D26 +:203D60001E20A61AC220A525D02C68850868850AC220A52387086008C22048A900085B6872 +:203D800028E220A9028FD30800C22029FF0020F81BE220DCD40808C22048A900085B68281F +:203DA000E220A9098FD30800C22029FF0020F81BE220DCD40820A61AC220A52548A523480A +:203DC000E220A700C92CD01F209D1E20A61AE220A524D032C220A525D02C68850868850A3A +:203DE000E220A52387086008C22048A900085B6828E220A9028FD30800C22029FF0020F803 +:203E00001BE220DCD40808C22048A900085B6828E220A9098FD30800C22029FF0020F81BA4 +:203E2000E220DCD40808C22048A900085B6828E220A9018FD30800C22029FF0020F81BE2C5 +:203E400020DCD40808E220A700F005209D1E80F7286008286008286008286008C220A51CAF +:203E600020BF1BA51A20BF1BA50248A5004820E21EA50220BF1BA50020BF1B688500688579 +:203E80000220BE1E203C4FB01F08C22048A900085B6828E220A9058FD30800C22029FF00B8 +:203EA00020F81BE220DCD408E220A5EA20D61BA5E920D61BC220A5E720BF1B20BE1EE2206E +:203EC000A700C98AD06AA5EAC900F004C901F000209D1E20A61A209F4EE220A99C20AA1FB0 +:203EE00020A61AC220A52720BF1BA52520BF1BA52320BF1BE220A99D853720DF1F901B20C7 +:203F00009D1E20A61AE220A52720BF1BC220A52520BF1BA52320BF1B8014C220A900002097 +:203F2000BF1BA9000020BF1BA9010020BF1B286008C22048A900085B6828E220A9028FD3FB +:203F40000800C22029FF0020F81BE220DCD408088B08E22048A90048AB682808C22048A976 +:203F600000085B6828C230A433C8C8C220B90C0085E7B90E00E22085E9B9100085EAC22091 +:203F80005A203D4D7AC220B900008529B90200852BE220B90400852DC2205A205C25209FE2 +:203FA0004E7AC220B906008529B90800852BE220B90A00852DC220B90200300A20AB272019 +:203FC0009104F0288008206B27209104F01EC220B912008500B914008502B91600851AB98A +:203FE0001800851CE220A90385DC8017A2230820C617C22018A533691A008533A535690048 +:20400000008535AB286008A51A48A51C4820BE1E204F07A523F026209C219042E220A902EF +:2040200085DC20E21EC2206820BF1B6820BF1BA50220BF1BA50020BF1BE6312860686808A2 +:20404000C22048A900085B6828E220A9028FD30800C22029FF0020F81BE220DCD4086868BC +:2040600008C22048A900085B6828E220A9068FD30800C22029FF0020F81BE220DCD4080858 +:20408000C230A531F01E20E11B850020E11B850220E11B851A20E11B851CC631E220A903E9 +:2040A00085DC286008C22048A900085B6828E220A9078FD30800C22029FF0020F81BE220EE +:2040C000DCD4080820A61A209104F01CE220A99720AA1F204F07209104F012209C21902C8E +:2040E000E220A90285DC800320E21E286008C22048A900085B6828E220A9028FD30800C2E0 +:204100002029FF0020F81BE220DCD40808C22048A900085B6828E220A9068FD30800C2209F +:2041200029FF0020F81BE220DCD40808E220A90185DC28600820BE1E204F07A523F00D206E +:204140009C219027E220A90285DC286008C22048A900085B6828E220A9028FD30800C2208E +:2041600029FF0020F81BE220DCD40808C22048A900085B6828E220A9068FD30800C2202936 +:20418000FF0020F81BE220DCD40820681720B10E203C4C6008A7001003209D1E203C4FB0B5 +:2041A000034C0B42E22020FE1FC98FD00EA98F20AA1FA9008F004D0020EA1820BE1EE22028 +:2041C000A700C98AF0034C0B42209D1EA5EA48A5E948A5E848A5E74820A61A6885E7688587 +:2041E000E86885E96885EA2980F01B20AF4C903AC220A00900B70885C0E220C8C8B708852C +:20420000C220EF5B8003209F4E286008C22048A900085B6828E220A9028FD30800C220296A +:20422000FF0020F81BE220DCD40808C22048A900085B6828E220A9058FD30800C22029FFA0 +:204240000020F81BE220DCD40808E22020FE1FC900F06D20A61AE220A527C9FFF01BC902B8 +:20426000D00520C5428012C900D00520E5428009C901D04F20F842800020BE1EA700F040AC +:20428000C93AF03CC92CF023C93BF02408C22048A900085B6828E220A9028FD30800C22008 +:2042A00029FF0020F81BE220DCD408A909201800209D1E20BE1EA700F009C93AF00580937D +:2042C000204E022860088B08C22048A900085B6828E220C210A00000B723F006201800C841 +:2042E00080F6AB286008C220206613A5168523A518852520C54228600820E958C220A51613 +:204300008523A518852520C542286008E22085B54A4A4A4A290F1869309716C8A5B5290F83 +:204320001869309716C82860E220A98F20AA1F0820A61AE220C210AF0E08AF09088F0E08C6 +:20434000AF200713A00000AF0608AF200B43A92F9716C8AF0908AF200B43A92F9716C8AFD4 +:204360000F08AF200B43AF0A08AF200B43A9009716AF0E08AF29F78F0E08AFC220A51685CB +:2043800023A5188525E220A902852728E220209D1E60E220A98F20AA1F0820A61AE220C206 +:2043A00010AF0E08AF09088F0E08AF200713A00000AF0408AF297F200B43A93A9716C8AFB3 +:2043C0000208AF200B43A93A9716C8AF0008AF200B43A9009716AF0E08AF29F78F0E08AF4C +:2043E000C220A5168523A5188525E220A902852728E220209D1E60E220A98F20AA1F08C266 +:204400003020A61A205A05C220A52548A5234820BE1EE220A700C92CF0034C6E44209D1EA3 +:2044200020A61A208405C220A5234820BE1EE220A700C92CF0034C6E44209D1E20A61A209B +:204440008405C220A523858FE220A5258591C220688529A90000852B688523688525E220BE +:20446000A9028527205F15E220209D1E286008C22048A900085B6828E220A9028FD3080007 +:20448000C22029FF0020F81BE220DCD40808C22048A900085B6828E220A9098FD30800C277 +:2044A0002029FF0020F81BE220DCD408E220A98F20AA1F08C23020A61AE220A527C902F041 +:2044C000034C3045C220A52548A5234820BE1EE220A700C92CF0034C4F45209D1E20A61AEC +:2044E000E220A527C900D048C220A523858FC220688523688525E220A9028527E220A00050 +:2045000000B723F003C880F9C2209838E58F30098529A90000852B8007A900008529852B99 +:20452000E220A900852D205F15E220209D1E286008C22048A900085B6828E220A9048FD346 +:204540000800C22029FF0020F81BE220DCD40808C22048A900085B6828E220A9028FD30877 +:2045600000C22029FF0020F81BE220DCD40808C22048A900085B6828E220A9098FD3080058 +:20458000C22029FF0020F81BE220DCD408E220A98F20AA1F08C23020A61AE220A527C9028E +:2045A000F0034CF945C220A52548A5234820BE1EE220A700C92CF0034C1846209D1E20A6A2 +:2045C0001AE220A527C900D030C220A523858FC220A900008529A90000852BE220A90085AA +:2045E0002DC220688523688525E220A9028527205F15E220209D1E286008C22048A9000855 +:204600005B6828E220A9048FD30800C22029FF0020F81BE220DCD40808C22048A900085B61 +:204620006828E220A9028FD30800C22029FF0020F81BE220DCD40808C22048A900085B6836 +:2046400028E220A9098FD30800C22029FF0020F81BE220DCD408E220A98F20AA1F20A61A1A +:20466000C210E220A527C902D023C220A5008540A5028542A5238500A5258502204F07A569 +:20468000408500A5428502E220209D1E6008C22048A900085B6828E220A9048FD30800C201 +:2046A0002029FF0020F81BE220DCD408E220A98F20AA1F0820A61AC210E220A527C900D081 +:2046C0001A206613C220A5168523A5188525E220A902852728E220209D1E6008C22048A9E2 +:2046E00000085B6828E220A9048FD30800C22029FF0020F81BE220DCD408E220A98F20AAB3 +:204700001F0820A61A205A05C220640C640EE230A000B723C920F004C924D003C880F3B734 +:2047200023208303901EC220060C260E060C260E060C260E060C260EE22020A403050C85A9 +:204740000CC880DBC220A50C8523A50E8525E220A900852728E220209D1E60E220A98F207C +:20476000AA1F0820A61A20C804200713E230A0FFA900971688A523290FAABF00D03A9716B3 +:2047800088A52329F04A4A4A4AAABF00D03A971688A5248523A5258524A5268525A9008559 +:2047A00026A523D0D0A524D0CCA525D0C8983865168523A5178524A5188525A5198526A9D3 +:2047C00002852728E220209D1E6008C22048A900085B6828E220A9048FD30800C22029FFD5 +:2047E0000020F81BE220DCD408E220A98F20AA1F20A61AE220A527C902D01F8BA52548ABF9 +:20480000C210A62320F313AB8423C2206425E220A9008527E220209D1E6008C22048A900AB +:20482000085B6828E220A9048FD30800C22029FF0020F81BE220DCD408E220A98F20AA1F52 +:2048400020A61AE220A527C900D012E220A7238523642464256430E220209D1E6008C220BF +:2048600048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD408E220A98F0A +:2048800020AA1F20A61AE220A527C900D01DC220A723850CE220A00200B72385256426C21A +:2048A00020A50C8523E220209D1E6008C22048A900085B6828E220A9048FD30800C2202950 +:2048C000FF0020F81BE220DCD408E220A98F20AA1F20A61AE220A527C900D00EC220A723C8 +:2048E00085236425E220209D1E6008C22048A900085B6828E220A9048FD30800C22029FF59 +:204900000020F81BE220DCD408E220A98F20AA1F20A61AE220A527C900D024200713A5231A +:204920008716A900A001009716C220A5168523A5188525E220A9028527E220209D1E600899 +:20494000C22048A900085B6828E220A9048FD30800C22029FF0020F81BE220DCD408E2207F +:20496000A98F20AA1F20A61AE220A527C902D014A7238523642464256426A9008527E22055 +:20498000209D1E6008C22048A900085B6828E220A9048FD30800C22029FF0020F81BE220B6 +:2049A000DCD408E220A98F20AA1F20A61AE220A527C900D039E220A526D052A525D04EA520 +:2049C00024D04AC210200713A423E220A9009716883007A92097168810FBA9028527C2206D +:2049E000A5168523A5188525E220209D1E6008C22048A900085B6828E220A9048FD30800C9 +:204A0000C22029FF0020F81BE220DCD40808C22048A900085B6828E220A9098FD30800C2F1 +:204A20002029FF0020F81BE220DCD408E220A98F20AA1F20A61AE220A527C900D039E2209C +:204A4000A526D052A525D04EA524D04AC210200713A423E220A9009716883007A909971655 +:204A60008810FBA9028527C220A5168523A5188525E220209D1E6008C22048A900085B68BD +:204A800028E220A9048FD30800C22029FF0020F81BE220DCD40808C22048A900085B682810 +:204AA000E220A9098FD30800C22029FF0020F81BE220DCD408E220A98F20AA1F20A61AE2FC +:204AC00020A527C900F023C901F03E08C22048A900085B6828E220A9048FD30800C2202924 +:204AE000FF0020F81BE220DCD408C220A525102149FFFF8525A52349FFFF186901008523C3 +:204B0000A52569000085258008E220A526297F8526E220209D1E60E220A98F20AA1F20A6EA +:204B20001AE220A527C900D025C220A5253012D004A523F013A900008525A901008523801D +:204B400007A9FFFF85258523E220209D1E6008C22048A900085B6828E220A9048FD3080031 +:204B6000C22029FF0020F81BE220DCD40800EA60080B08C22048A900085B6828C230C2203F +:204B8000A9000085D9E220A93685DBC230A90000A0000097D9A0020097D9A0040097D920DC +:204BA000731E2B28608B08C220A90000851AA93600851C20731E20522128AB6008C22064AF +:204BC00055A9FF7F8559204E0220FE1F29FF00C90000F02CC98100F01A20BE1E204F07A556 +:204BE00023855520FE1F29FF00C90000F012C98100D02A20AA1F20BE1E204F07A523855943 +:204C0000A51C48A51A48A50248A5004820691668850068850268851A68851C286008C220AB +:204C200048A900085B6828E220A9028FD30800C22029FF0020F81BE220DCD4080808C22090 +:204C400048A900085B6828C22064E464E7E22064E664E964EAC22038A5D969040085E1E2C7 +:204C600020A5DB690085E32860C95FF01AC93AB004C930B012C95BB004C941B00AC97BB007 +:204C800004C961B0021860386008E220C210A00000B70CF00AD7E7D013C8C00800D0F2B741 +:204CA000E720CD0320694CB00328386028186008E220C210A00000A20000B7E7F00B20CD91 +:204CC000039F004E00C8E880F1A9009F004E00C220A9004E85E7E220A90085E9C220A5E464 +:204CE0008508D006E220A5E6F04DE220A5E6850AA5EAA00000D708D017C22018A508690165 +:204D000000850CE220A50A6900850E20894CB02AA00D00C220B708850CC8C8E220B70885D1 +:204D20000ED006C220A50CF00EC220A50C8508E220A50E850A80B92818602838600820AF2A +:204D40004CB01F08C22048A900085B6828E220A9058FD30800C22029FF0020F81BE220DC35 +:204D6000D408C230A00900B7088523C8C8B7088525E220A00000B7088527286008C22018C5 +:204D8000A5E16910008508E220A5E36900850AC5BC9027C220A508C5BA901F08C22048A935 +:204DA00000085B6828E220A9098FD30800C22029FF0020F81BE220DCD408C220A5E185C03E +:204DC000E220A5E385C2C220A50885E1E220A50A85E3286008E220A527C5EAF033A5EAC96C +:204DE00000D00520C804802FC901D005203606802608C22048A900085B6828E220A9048F96 +:204E0000D30800C22029FF0020F81BE220DCD408C902D00320F914C210207C4DC23018A58B +:204E2000C06901008508E220A5C26900850AA00000A9009708C8C00800D0F8A00000B7E7DC +:204E4000F01020CD0320694C90089708C8C00800D0ECC220A00900A52397C0A525C8C8976F +:204E6000C0A5E4A00D0097C0C8C8E220A5E697C0C220A5C085E4E220A5C285E6E220A0004B +:204E800000A52797C0C902F0022860C220A52385C0E220A52585C2201511202A1180EA0895 +:204EA000C230A5E4D006E220A5E6F00520AF4CB00520D44D804EE220A527C5EAF033A5EA11 +:204EC000C900D00520C804802CC901D005203606802308C22048A900085B6828E220A90481 +:204EE0008FD30800C22029FF0020F81BE220DCD408C902F011C230A00900A5239708C8C8F3 +:204F0000A5259708286020F914A00900B70885C0C8C8E220B70885C2201511204911E2206C +:204F2000A527C902F00280CDC220A52385C0E220A52585C2201511202A1180B90820BE1EBB +:204F4000E220A7002059039042C220A50085E7E220A50285E9209D1EA700F00DC924F014E0 +:204F6000C925F00920694CB0ECA901800C209D1EA9008005209D1EA90285EA20FE1FC98F10 +:204F8000D006A5EA098085EA28386028186008C22018A52365298523A525652B85252860C8 +:204FA00008C22038A523E5298523A525E52B8525286008C2203B38E90A001BC230A900003F +:204FC00083018303830583078309A5251018A900808301A52549FFFF8525A52349FFFF1AA6 +:204FE0008523D002E625A52B101AA3014900808301A52B49FFFF852BA52949FFFF1A85299D +:20500000D002E62BA525F004A52BD05AA5238F000100A5298F020100AF0401008303AF064E +:2050200001008305A5258F000100A5298F02010018AF04010063058305AF060100630783CE +:2050400007A5238F000100A52B8F02010018AF04010063058305AF06010063078307A3077F +:20506000F023A309F01F08C22048A900085B6828E220A90D8FD30800C22029FF0020F81B35 +:20508000E220DCD408C230A3011016A30549FFFF8305A30349FFFF1A8303D005A3051A837C +:2050A00005A3038523A3058525C2203B18690A001B286008C220A523C529A525E52B500333 +:2050C0004900803006642364258007A9FFFF85238525286008C220A523C529D00CA525C5AE +:2050E0002BD006642364258016A529C523A52BE525500349008010EBA9FFFF852385252841 +:205100006008C220A52BC525D00FA529C523D009A9FFFF8523852580046423642528600800 +:20512000C220A52BC525D00CA529C523D006642364258007A9FFFF85238525286008C22069 +:20514000A523C529D00FA525C52BD009A9FFFF852385258013A529C523A52BE5255003496F +:20516000008030E864236425286008C220A523C529D00FA525C52BD009A9FFFF85238525F4 +:205180008013A523C529A525E52B500349008030E864236425286008C2208F1201008A8F7B +:2051A000100100AF160100AAAF140100286008E220A9498F00E2AFA9028F01E2AFC220A9AF +:2051C00000008F08E2AF8F0AE2AFA5238F0CE2AFA5258F0EE2AFEAEAEAEAEAEAAF0CE2AFC9 +:2051E0008523AF0EE2AF8525E220A5248523A5258524A5268525300464268004A9FF85261F +:20520000C220A5250A66256623A5250A66256623A5250A66256623A5250A66256623E2200A +:20522000A9008527286008E220A9408F00E2AF800908E220A9488F00E2AFA9028F01E2AF0E +:20524000C220A5238F08E2AFA5258F0AE2AFA5298F0CE2AFA52B8F0EE2AFEAEAEAE220AF21 +:2052600006E2AF2907D010C220AF08E2AF8523AF0AE2AF8525286020125380F908E220A988 +:20528000018F01E2AFA9008F00E2AFC220A5238F08E2AFA5258F0AE2AFA5298F0CE2AFA5BE +:2052A0002B8F0EE2AFEAEAEAE220AF05E2AF2917D010C220AF08E2AF8523AF0AE2AF8525AA +:2052C000286020125380F908E220A9008F01E2AFA9008F00E2AFC220A5238F08E2AFA5250F +:2052E0008F0AE2AFA5298F0CE2AFA52B8F0EE2AFEAEAEAE220AF04E2AF2907D010C220AFE7 +:2053000008E2AF8523AF0AE2AF8525286020125380F9E2208901F0200008C22048A9000853 +:205320005B6828E220A90C8FD30800C22029FF0020F81BE220DCD4088902F01F08C220489E +:20534000A900085B6828E220A90D8FD30800C22029FF0020F81BE220DCD4088904F01F08F4 +:20536000C22048A900085B6828E220A90E8FD30800C22029FF0020F81BE220DCD4086008E5 +:20538000E220A9008F01E2AFA9028F00E2AFC220A900A08F0CE2AFA900008F0EE2AFA52380 +:2053A0008F08E2AFA5258F0AE2AFEAEAEAE220AF04E2AF8907F00100C220AF08E2AF85237A +:2053C000AF0AE2AF8525286008E220A9018F01E2AFA9028F00E2AFC220A900A08F0CE2AF5A +:2053E000A900008F0EE2AFA5238F08E2AFA5258F0AE2AFEAEAEAAF08E2AF8523AF0AE2AFFA +:205400008525286008C220A523D00AA52529FF7FD00328386028186008E22038E93020F1BE +:2054200003C22029FF001865238523A5256900008525286008E220C9309004C93A901CC9A3 +:20544000619004C967900AC9419004C9479007803138E957800838E937800338E930062342 +:20546000262426252626062326242625262606232624262526260623262426252626052305 +:205480008523286008E220C930F006C931F00A800FC220062326258007C2203826232625D5 +:2054A000286008E230A561F00DAAA569D015A9008F01E2AF8015E220A9038F01E2AFEAEAA8 +:2054C000EA8062E220A9018F01E2AFE220A9438F00E2AFC220A900108F08E2AFA900008F2A +:2054E0000AE2AFC220A900A08F0CE2AFA900008F0EE2AFEAEAEACAF02CAF08E2AF8F0C0854 +:2055000000AF0AE2AF8F0E0800E220A9428F00E2AFC220AF0C08008F08E2AFAF0E08008F6E +:205520000AE2AF80BEC220AF08E2AF8523AF0AE2AF8525E220A9018527286008C220A55D00 +:205540008523A55F8525203857C220A5238529A525852BC220A5598523A55B8525207C5254 +:20556000C220A5558529A557852B203152C220A5238529A525852B20A25420C752C220A5AA +:2055800065F007A5250900808525E220A901852728605A08C2306423642564556457646531 +:2055A0006459645BA90100855D645F646164636469E220A00000B700C92BF033C92DF02B46 +:2055C000C926F03A207203900382AC0008C22048A900085B6828E220A9028FD30800C22095 +:2055E00029FF0020F81BE220DCD408A9018565C8B700C926F00820720390D1827A00C8B72B +:2056000000C968F00EC948F00AC962F04CC942F04880B9C8B700208303B00280AF203454BF +:20562000C8B700208303B0F5E220A565F011C22038A90000E5238523A90000E5258525E2E1 +:2056400020A9008527C220189865008500A5026900008502E220287A60C8B700C930F0074F +:20566000C931F0038265FF208454C8B700C930F0F6C931F0F282B0FF201854C8B700C92EF2 +:20568000F008207203B0F1829EFFC220203857C220A5238555A525855764236425E2208070 +:2056A0001A201854C220A55D8F000100A90A008F020100AF040100855DE220C8B700C96546 +:2056C000F024C945F020207203B0D6C220203857C220A5238559A525855B64236425203B4F +:2056E00055E220825FFFC220203857C220A5238559A525855B64236425E220C8B700C92B2B +:20570000F010C92DF008207203B01282BEFEA9018569C8B700207203B00382AFFE201854EC +:20572000C8B700207203B0F5C220A5238561A5258563203B55820DFF08E220A996850CA9AD +:2057400000850DC230A523D00DA525D009E220A9018527826E00A5251017C22038A9000081 +:20576000E5238523A90000E5258525E220A980850DC220A5252980FFF01CC98000F02B4655 +:20578000256623E220E60CC220A5252980FFC98000D0EC82140006232625E220C60CC2204E +:2057A000A5252980FFC98000D0ECE220A525297F8525A50C4A050D8526A9006A05258525B5 +:2057C000A90185272860C220200454900AE220A900852764288005C22020AE5160DA08C28A +:2057E00020A52548A52348202652200454B011A525890080D005A901008008A9FFFF800392 +:20580000A90000FA8623FA862528FA6008C23020DD57C9FFFFD00520A404800320B60428DE +:205820006008C23020DD57C90100D00520A404800320B604286008C23020DD57C90000D087 +:205840000520A404800320B604286008C23020DD57C90100F00520A404800320B6042860DC +:2058600008C23020DD57C9FFFFF00520A404800320B604286008C23020DD57C90000F00565 +:2058800020A404800320B604286008E2209723C8A90097232860DA08E220C980900A48A92C +:2058A0002D208A586849FF1AC23029FF00C96400900EA2640020975118693000208A588ABF +:2058C000A20A0020975118693000208A588A18693000208A5828FA6008E220C210A0000026 +:2058E000B723F003C880F9286008E220C210F40000F40000F400002004549019200713E21D +:2059000020A00000A9209716C8A9309716C8A900971682CF00E220A5261008297F8526A9B3 +:20592000018301C220A900008303C220AFFE593A8529AF005A3A852B20DD57890080D013CE +:2059400020C853A3031A830320DD57C90000B0F0821000207F53A3033A830320DD57C9FF03 +:20596000FFF0F0E230A5250AA5262A830538A996E305AAF00FA52509808525462566246685 +:2059800023CAD0F7C210E2206426A9008527A301F011C22038A90000E5238523A90000E5FA +:2059A000258525206613C220A5168523A518852520D858E220C8A90097238888B723C8970D +:2059C00023C00200D0F4A92E9723E22018A30369058306F01920D858A945208A58A30620C4 +:2059E0009658800AC220A5168523A5188525E220A9028527C2203B186906001B2860005093 +:205A0000C3470000803FF304B53FF304353F08201511C220A901008523A900008525E22090 +:205A2000AF004D00C22029FF00858FA8A20100C220BF004D008529A90000852B20D325E80C +:205A4000E888D0EBC220A904008529A90000852B20D325E220AF004D00850CA900850DC2E1 +:205A600020060C38A523650C8523A5256900008525D029E220A5EA0980A62320D90EE22019 +:205A8000AF004D0087C0A00100A20000E220BF014D0097C0E48FF023E8C880F008C2204842 +:205AA000A900085B6828E220A9098FD30800C22029FF0020F81BE220DCD408E22038A5C096 +:205AC00067C08508A5C169008509A5C26900850A640BC220A00500B7C3850CE220C8C8B70C +:205AE000C3850E640FE220A9008708C22018A5086901008508A50A690000850AC50ED0E5D6 +:205B0000A508C50CD0DF286008C2206408640AE220AF004D00858F6490A20100E220A7C0FA +:205B2000C58FF01F08C22048A900085B6828E220A90A8FD30800C22029FF0020F81BE220D6 +:205B4000DCD408C901F03AA00100E220BF004D008523642464256426B7C08529642A642B65 +:205B6000642CA523C529B06820D325C22018A50865238508A50A6525850AE8E8C8C48FD070 +:205B8000C9E22018BF004D00859065088508A50969008509C220A50A690000850AC22006F1 +:205BA00008260A0608260AE22038A508658F8508A50969008509C220A50A690000850A18C1 +:205BC000A50865C08508E220A50A65C2850A286008C22048A900085B6828E220A9098FD393 +:205BE0000800C22029FF0020F81BE220DCD40808201511E220A00000B7C3297FC527D028B0 +:205C0000A52748C220A52548A5234820085B688523688525E220688527C220A5238708A0D8 +:205C20000200A5259708286008C22048A900085B6828E220A9048FD30800C22029FF002060 +:205C4000F81BE220DCD40808201511F40000F40000E2204820085BE22068C2206868C22076 +:205C6000A7088523A00200B7088525E220A00000B7C3297F85272860DA0B0808C22048A902 +:205C800000085B6828C230A52589F0FFD029890F00D00CA5238900FCD00520E542802EA2B7 +:205CA0000A0046256623CAD0F920E542E220A94B201800C2208016A2140046256623CAD022 +:205CC000F920E542E220A94D201800C220282BFA600B08C230A900008FB608008FB808007B +:205CE000E22020FE1FC900F00820A61A205A058011C220A9000085238525E220A90285277E +:205D0000C22020325E22081100B02220E35E08C22048A900085B6828E220A9108FD3080090 +:205D2000C22029FF0020F81BE220DCD408204E0208C22048A920035B6828E220A00000B7BA +:205D400018D00382A900C9E5D003829600A00B00B7188908F00382A9008902F003828300E8 +:205D6000290FC90FD003827A00A00000B718201800C8C00800D0F5A920201800A00800B7E8 +:205D800018201800C8C00B00D0F5A909201800A00B00B7188910D01EC220A01C00B7188F74 +:205DA000230800C8C8B7188F250800E220A9008F27080020785CA909201800A00B00B718DC +:205DC0008908D01C8901F005A9522018008904F005A9532018008910F005A944201800EA41 +:205DE000204E02206502220C110090038241FF20E35E08C22048A900085B682820E21E28A1 +:205E00002B6008C22048A920035B6828E220290FC90FF0CFA95B201800A00000B718C920A9 +:205E2000F009201800C8C00800D0F1A95D20180080AE0B0808C22048A920035B6828C23086 +:205E4000A973F28520A93A008522A00000E220A9009720C8C01E00D0F8C220A973F08F8197 +:205E6000F23AA93A008F83F23AAF2308008F75F23AAF2508008F77F23A282B6008C23020F0 +:205E8000BE1E20A61A205A0520325EE220A92C853720DF1FB00FC220A9FFFF8F5403008FA9 +:205EA0005603008017209D1E20A61A20C804C220A5238F540300A5258F56030022181100BE +:205EC000B01F08C22048A900085B6828E220A9118FD30800C22029FF0020F81BE220DCD410 +:205EE0000828608B0B0808C22048A900085B682808E22048A90048AB6828E220AF2E030046 +:205F00008523A900852485258526A900852785EAA93A85E9C220A9465F85E7209F4EE22072 +:205F2000AF2003008523A900852485258526A900852785EAA93A85E9C220A94E5F85E72067 +:205F40009F4E282BAB60444F53535441540042494F53535441540008C23020BE1E20A61A95 +:205F6000205A05A5238F600300A5258F620300A9FFFF8F5403008F56030022241100B02589 +:205F800020F81B20E35E08C22048A900085B6828E220A9118FD30800C22029FF0020F81B3C +:205FA000E220DCD40820F81B286008C23020BE1E20A61A205A0520325EA900008F540300D8 +:205FC000A901008F56030020704B22181100B02220E35E08C22048A900085B6828E220A95D +:205FE000118FD30800C22029FF0020F81BE220DCD40820E35EC220A2120018BF73F23A6959 +:2060000000008592BF75F23A6901008594E220A9008792C220A90000857AA90100857CA2EB +:206020000000E220A77AF02AC90DF012C90AF0049D004FE8C220E67AD0E8E67C80E4E220EE +:20604000A9009D004F200A25C220E67AD0D1E67C80CDE00000F00AE220A9009D004F200A2F +:2060600025286008C23020BE1E20A61A205A0520325EE220A92C20AA1FC22020A61A20C804 +:2060800004A5238F500300A5258F520300E220A92CC22020AA1F20A61A20C804A5238F5887 +:2060A0000300A5258F5A0300221C1100B02220E35E08C22048A900085B6828E220A9128F8B +:2060C000D30800C22029FF0020F81BE220DCD40820E35E2860DA5A08A20000A00000E22085 +:2060E000B7239D0004F004E8C880F5287AFA6008C23020BE1E20A61A205A0520325EA90062 +:206100000085A6E220A90185A8A92085B4C220A9000085ABA9FFFF85A9C220A90000855584 +:206120008557A9FFFF8559A9FF7F855B206916E220A98085B4C220C6AB18A900008F5003FE +:206140000065AB8F580300A901008F5203006900008F5A0300221C1100B02220E35E08C216 +:206160002048A900085B6828E220A9128FD30800C22029FF0020F81BE220DCD40820E35E9C +:20618000286008C23020BE1E20A61A205A0520D56022041100B02220E35E08C22048A90088 +:2061A000085B6828E220A9138FD30800C22029FF0020F81BE220DCD40820E35E2860DA0802 +:2061C000E220C9619008C97BB00429DF8013C9209013A20000DFE9613AF00AE8E00F00D036 +:2061E000F42838FA6B2818FA6B2A2B2C2F3A3B3C3D3E3F5C5B5D7C220808C22048A9000889 +:206200005B6828C23020A61A205A0520D56022101100B02220E35E08C22048A900085B68D1 +:2062200028E220A9148FD30800C22029FF0020F81BE220DCD408E220A92C20AA1FC2202054 +:20624000A61A205A05AD38038508AD3A03850AE220A20000A920957EE8E00B00D0F8A20054 +:2062600000A00000B723F076C92EF03922BE613AB01F08C22048A900085B6828E220A90A51 +:206280008FD30800C22029FF0020F81BE220DCD408957EC8E8C00800D0CAB723F040C92E77 +:2062A000F003C880F5C8A20800B723F03122BE613AB02220E35E08C22048A900085B6828C5 +:2062C000E220A90A8FD30800C22029FF0020F81BE220DCD408957EC8E8C00C00D0CBA200DC +:2062E00000A00000B57E9708E8C8C00B00D0F522141100B02220E35E08C22048A900085B34 +:206300006828E220A9158FD30800C22029FF0020F81BE220DCD40820E35E28600808C220F1 +:2063200048A900085B6828C23020A61A205A05A5238F640300A5258F660300E220A92C20B1 +:20634000AA1FC22020A61A205A05A5238F680300A5258F6A030022301100B01F08C2204847 +:20636000A900085B6828E220A9168FD30800C22029FF0020F81BE220DCD40828605C3D7DC1 +:206380003A5C8E7B3A5C3E7D3A5CBA6C3A5C176D3A5C4A6C3A5CD06B3A5C4D713A5C3B688D +:2063A0003A5C686B3A5C236B3A5CAD6A3A5C4C7C3A5C49693A5C9C673A5CC77C3A5C776816 +:2063C0003A5C407D3A5C397D3A5C666A3A5C417D3A18FBC220A9FFFE1B585CDE633AC23053 +:2063E000229C673A200800200C008BE220A90048ABA2004F20DC03AB2281633A2289633A9E +:2064000080E2088BE220A93A48ABC210A2156420DB02AB286B41203C73746172743E203C22 +:20642000617373656D626C793E0D2020417373656D626C6520612070726F6772616D0D0D92 +:2064400043203C7374617274313E203C7374617274323E205B6C656E202831206966206262 +:206460006C616E6B295D0D2020436F6D7061726520746F2073656374696F6E73206F66203C +:206480006D656D6F72790D0D44203C73746172743E205B656E645D0D20204469736173737A +:2064A000656D626C6520612070726F6772616D0D0D46203C73746172743E203C656E643E45 +:2064C000203C627974653E0D202046696C6C206120626C6F636B206F66206D656D6F727940 +:2064E0002077697468206120627974650D0D47205B616464726573735D0D20205374617265 +:206500007420657865637574696F6E2061742061206C6F636174696F6E0D0D4A205B616480 +:2065200064726573735D202D204A756D7020746F2061206C6F636174696F6E20696E206D53 +:20654000656D6F72790D20204A756D7020746F2061206C6F636174696F6E20696E206D6540 +:206560006D6F72790D0D48203C73746172743E203C656E643E203C627974653E205B6279B5 +:2065800074655D2E2E0D202048756E7420666F722076616C75657320696E206D656D6F722F +:2065A000790D0D4C20202020204C4F41442020202020202020202246696C6522205B646514 +:2065C0007374696E6174696F6E5D0D4D203C73746172743E205B656E645D0D202044756DE1 +:2065E00070207468652076616C756520696E206D656D6F72790D0D52202D20446973706C08 +:206600006179207468652076616C756573206F6620746865207265676973746572730D0D27 +:206620003B203C50433E203C413E203C583E203C593E203C53503E203C4442523E203C44E3 +:20664000503E203C4E564D5844495A433E0D20204368616E67652074686520636F6E746572 +:206660006E7473206F6620746865207265676973746572730D0D532020202020534156453B +:206680002020202020202020202246696C6522203C73746172743E203C656E643E0D5420FC +:2066A0003C73746172743E203C656E643E203C64657374696E6174696F6E3E0D2020547212 +:2066C000616E736665722028636F70792920646174612077697468696E206D656D6F7279E9 +:2066E0000D0D57203C627974653E0D2020536574207468652072656769737465722077697C +:2067000064746820666C61677320666F722074686520646973617373656D626C65720D0D0C +:2067200058202D2052657475726E20746F2042415349430D0D3E203C73746172743E203C13 +:20674000627974653E205B627974655D2E2E2E0D202045646974206461746120696E206D20 +:20676000656D6F72790D0D3F202D20446973706C617920612073686F72742068656C702097 +:2067800073637265656E0D0D000808C22048A948085B6828E220A50D854E286B20E400081B +:2067A000E22048A93A48AB6828A27E7D20DB02E220A93B201800A920201800C23008E22074 +:2067C00048A90048AB6828A00300A24202205E02C220A92000201800AF44020020EB02A9AE +:2067E0002000201800AF46020020EB02A92000201800AF48020020EB02A92000201800AF86 +:206800004A020020EB02A92000201800AF4E0200200503A92000201800201800AF4C0200C1 +:2068200020EB02A9200020180008E220AD4F0222977A3A28204E02204E026B080B08C22065 +:2068400048A948085B6828E220A515870DE220A50FC513D00EC220A50DC511D006204E02A0 +:206860002B286BC22018A50D690100850DE220A50E6900850E80D0080B08C22048A9480873 +:206880005B6828E220A50FC5179045C220A50DC515903DE220A70D8715A50FC513D00BC2F0 +:2068A00020A50DC511D0034C2E69C22018A50D690100850DE220A50E6900850EC22018A582 +:2068C000156901008515E220A5166900851680C3C22038A511E50D8519E220A513E50F8508 +:2068E0001BC22018A51965158515E220A51B65178517E220A7118715A513C50FD00AC22039 +:20690000A511C50DD0028026C22038A511E901008511E220A512E9008512C22038A515E931 +:2069200001008515E220A516E900851680C4204E022B286B08E220C921900BC97F9004C9D5 +:20694000A0900328386B28186B088B0B08C22048A948085B6828E220A9008FB60800A5310C +:20696000C902B016C9019020C22018A50D6900018511E220A50F69008513C220A50D85325E +:20698000E220A50F85348012C22018A5326900018511E220A53469008513E220A00000C2E5 +:2069A00020A5328519E220A534851BE220A7192234693AB002A93F997E08C22018A5196932 +:2069C00001008519E220A51B6900851BC8C0080090DBA900997E08A93E201800A92020186A +:2069E00000E220A534200503A93A201800C220A53220EB02C220A908008547E220A9202069 +:206A00001800A73220050322767A3AE220C647D0EAA920201800A92020180008E22048A94B +:206A20000048AB6828A27E0820DB02204E02206502A534C513900FC220A532C51190072021 +:206A40004E022BAB286B4C9A69088D9208E220BD0000990000AD9208F00AC8E8E8E8E8CE30 +:206A6000920880EB286B080B8B08C22048A948085B682808E22048A90048AB6828C230A5B5 +:206A80000D8532A50F8534E220A5313A8547A25908A07E0822496A3AA00000B97E08873217 +:206AA00022767A3AC8C447D0F2AB2B286B080B8B08C22048A948085B682808E22048A900DD +:206AC00048AB6828E220C210A5313A3A8547A25D08A07E0822496A3AC220A50D8532A50F0E +:206AE0008534C220A534C513D006A532C511F02CE220A00000B732D97E08D01AC8C447D034 +:206B0000F4C220A532854AA534854C2220753AE220A92020180022767A3A80C6204E02ABAE +:206B20002B286B08C22048A948085B6828E220A531F00EC230A50D8F400200A50F8F4202AF +:206B400000AF460200AAAF480200A8AF4A02001BAF4C02005BE220A93A48A96B48A96348A8 +:206B60004C9A6BEA5C04003A08C22048A948085B6828E220A531F0C9C230A50D8F40020024 +:206B8000A50F8F420200AF460200AAAF480200A8AF4A02001BAF4C02005BE220AF4E0200BD +:206BA00048ABA95C8FA20800AF4202008FA50800AF4102008FA40800AF4002008FA308001D +:206BC000AF4F020048C220AF440200285CA20800080B8B08E22048A93A48AB682808C22028 +:206BE00048A948085B6828C210E220A531C902F00CC903D011C220A51585478011C220A9C7 +:206C0000010085478008A2427D20DB028035A50D854AA50F854CA00000E220A74AD711F09B +:206C2000092220753AA920201800C22018A54A690100854AA54C690000854CC8C447D0D990 +:206C4000204E02204E02AB2B286B080B8B08E22048A90048AB682808C22048A948085B68E1 +:206C600028E220A531F04FA60D8E4002A60F8E4202C901F041A6118E4402C902F038A61597 +:206C80008E4602C903F02FA6198E4802C904F026A61D8E4A02C905F01DE210A6218E4E02AA +:206CA000C906F012C210A6258E4C02C907F007E210A6298E4F02AB2B286B080B8B08C22032 +:206CC00048A948085B6828E220C210A20000BFAF7D3AF018C708F003E880F3C2208A0AAAA8 +:206CE000BFF06C3A8F2F080022146D3AAB2B286B8D63956399639D63A163A563A963AD6327 +:206D0000B163B5639163B963BD63C1638967C563C96302646C2F08088B0B08C22048A948E5 +:206D2000085B6828E220A531C902B0034CBD6EC220A50D8532A50F8534C22022BF703AC9A5 +:206D4000FFFFF0108554E220A531C903F036A913854F804C204E0208E22048A93A48AB6836 +:206D600028C210A2F46E20DB024CBD6E204E0208E22048A93A48AB6828C210A2036F20DB98 +:206D8000024CBD6EE22022F5703AC9FFF0DE854FC903F062C90BF05EC913F004C908F0007C +:206DA00022ED6F3AB0034C866E873222767A3A08E22048A90048AB6828C220A5328556A56C +:206DC000348558E220A54FC912F06CC916F068C914F07C293FC902D0034CB46EC22029FF77 +:206DE00000AAE220BFBC793AC903F057C902F05FC901F0678071C220A554C93476F026C94D +:206E00009876F02AC91876F01CC91C76F017C92476F012C90C76F00DC92076F008C908763A +:206E2000F0034CA06DE220A912854F4CA06DE220A916854F4CA06D22306F3A9060C902F088 +:206E40000E8018A00200B99808975622767A3AA00100B99808975622767A3AA00000B99834 +:206E600008975622767A3AE220A941201800A920201800A632864AA634864C2220753AA9BE +:206E8000202018008037204E0208E22048A93A48AB6828C210A2C16E20DB028020204E020B +:206EA00008E22048A93A48AB6828C210A2116F20DB028009A54F29C0D0954C5B6E2BAB284B +:206EC0006B41646472657373696E67206D6F6465206E6F7420646566696E656420666F72B7 +:206EE000207468617420696E737472756374696F6E2E0D00426164206D6E656D6F6E696327 +:206F00002E0D00426164206F706572616E642E0D0052656C6174697665206F666673657408 +:206F200020697320746F6F206C617267652E0D00080B08C22048A948085B6828E220A54F5E +:206F4000C912F00AC22018A5326902008008C22018A532690100854AA534690000854C3843 +:206F6000A550E54A8550A552E54C8552E220A54FC916F01EA550300CA551D02AA552D02628 +:206F8000A9018026A551C9FFD01CA552C9FFD0168018A5513006A552D00C800EA552C9FF6E +:206FA000D004A90280042B28186B2B28386B080BC210DA08C22048A948085B6828E220A289 +:206FC0000000DF00D03AF008E8E01000F01B80F2C2200650265206502652065026520650D9 +:206FE0002652E2208A05508550FA2B286B0B8B08C22048A948085B682808E22048A93A4882 +:20700000AB6828E220A54F293F854AC230A20000A00000BDBA76F01BC554D00DE220B9BC6F +:2070200078293FC54AF007C220E8E8C880E59838AB2B6B18AB2B6B080B08C22048A94808E3 +:207040005B6828E220C210A0000064506452B703F011C964F01948B736854A68C54AD00B20 +:20706000C880EBB736D0042B28386B2B28186BE220B736C93AB004C930B014C947B004C960 +:2070800041B00CC967B0E4C961B00280DE29DF22AE6F3A80CB0B08C22048A948085B682808 +:2070A000A00000E220B703F003C880F9C220C85A681865038503A50569000085052B6B0B8E +:2070C00008C22048A948085B6828C220A5118536A5138538A948758503A93A00850522371E +:2070E000703AB00D2295703AA703D0F2A9FFFF8002A5032B6B080B08C22048A948085B68F4 +:2071000028C230A5158536A5178538A9D4798503A93A0085052237703AB0222295703AC284 +:207120002018A5036901008503A5056900008505E220A703D0DFC220A9FFFF800D22957048 +:207140003AE220A703C22029FF002B286B088B0B08C22048A948085B6828E220A9008FB6DD +:207160000800A531C902B016C9019020C22018A50D6900018511E220A50F69008513C220E1 +:20718000A50D8532E220A50F85348012C22018A5326900018511E220A5346900851322B9FD +:2071A000713AE220A534C51390F4C220A532C51190EC204E022BAB286B080BE220A94120EA +:2071C0001800A92020180008C22048A97A085B6828C220A5008518E220A502851A2220752B +:2071E0003AA920201800C22018A5006901008518E220A5026900851AE220C210A700C9C2F7 +:20720000D00B48A71849FF2F960800800BC9E2D00C48A7180F9608008F96080068C2202911 +:20722000FF000AAABFBA763AAA229A743AE220A700AABFBC783A22767A3A2247723A204E0F +:20724000022065022B286B08E22048293F0AC210AA687C55728572A072A772CC72D372EE69 +:2072600072107321735E736673777388738F73B473E1734D733273FF72D473DE73F2732185 +:2072800074CF733274A9282018002249743AA92C201800A958201800A9292018004C43741D +:2072A0002249743A4C4374E22048A9232018006829C0C900F00F4A4A2F960800D00722539E +:2072C000743A4C43742249743A4C43742253743A4C4374A9282018002249743AA92920188F +:2072E00000A92C201800A9592018004C43742249743AA92C201800A9582018004C437422C0 +:2073000049743AA92C201800A9592018004C43742253743AA92C201800A9592018004C4333 +:20732000742253743AA92C201800A9582018004C4374A9282018002253743AA92C20180034 +:20734000A958201800A9292018004C4374A9282018002249743AA9292018004C4374A941CE +:207360002018004C47742249743AA92C201800A9532018004C4374A95B2018002249743A1C +:20738000A95D2018004C43742261743A4C4774A9282018002249743AA92C201800A9532029 +:2073A0001800A929201800A92C201800A9592018004C4374A95B2018002249743AA95D20E6 +:2073C0001800A92C201800A9592018004C4374A002008003A0010022C7743A4C47744C4754 +:2073E000742261743AA92C201800A9582018004C4774A9232018008BA50248ABA600E8A044 +:207400000100225E023AA92C201800A923201800A600A00100225E023AAB22767A3A4C4315 +:2074200074A9282018002253743AA9292018004C4374A95B2018002253743AA95D20180002 +:207440004C437422767A3A286B08E220A700200503286B08C230A70020EB0222767A3A28BC +:207460006B088B0BC2305A08C22048A97A085B682808E22048A90048AB6828E220A000004F +:20748000A70099920822767A3AC8C00300D0F12220753AC2307A2BAB286B088BE220C2104D +:2074A00008E22048A93A48AB6828BD0000201800E8BD0000201800E8BD0000201800E8A9D4 +:2074C00020201800AB286B080B08C22048A97A085B6828E220C00200F014A7008518300679 +:2074E0006419641A801EA9FF8519851A8016A700851822767A3AA70085193004641A80046D +:20750000A9FF851AC22038A50065188518E220A502651A851A2220753A22767A3A2B286B89 +:20752000080BC2204808C22048A948085B6828E220A54C200503E220A93A201800C220A539 +:207540004A20EB02682B286B4F524100414E4400454F520041444300535441004C44410092 +:20756000434D50005342430041534C00524F4C004C535200524F5200535458004C445800BB +:2075800044454300494E4300424954004A4D5000535459004C4459004350590043505800BF +:2075A00042524B004A535200525449005254530050485000504C500050484100504C41008B +:2075C0004445590054415900494E5900494E5800434C430053454300434C49005345490096 +:2075E00054594100434C5600434C4400534544005458410054585300544158005453580031 +:20760000444558004E4F500042504C00424D49004256430042565300424343004243530080 +:20762000424E450042455100545342005452420053545A004252410050485900504C590010 +:2076400050485800504C580050484400504C440050484B0052544C0050484200504C4200FD +:207660005741490058424100544353005453430054434400544443005458590054595800BA +:207680005354500058434500434F50004A534C0057444D005045520042524C0052455000B2 +:2076A000534550004D5650004D564E0050454900504541004A4D4C000000A0754875887697 +:2076C00048752876487568754875B07548756875487628764875687548750876487548758E +:2076E00048752C76487568754875D0754875847568762C76487568754875A4754C758C7626 +:207700004C7588754C756C754C75B4754C756C754C7688754C756C754C750C764C754C7557 +:207720004C7588754C756C754C75D4754C7580756C7688754C756C754C75A87550759076FF +:207740005075A476507570755075B8755075707550768C75507570755075107650755075BE +:207760005075A876507570755075D875507538767076B476507570755075AC755475947684 +:2077800054753076547574755475BC755475747554768C75547574755475147654755475BA +:2077A00054753076547574755475DC7554753C7674768C7554757475547534765875987628 +:2077C00058759075587578755875C0758875F0755876907558757875587518765875587537 +:2077E00058759075587578755875E0755875F4757876307658753076587594755C757C7506 +:207800005C7594755C757C755C75C4755C75F8755C7694755C757C755C751C765C755C75E2 +:207820005C7594755C757C755C75E4755C75FC757C7694755C757C755C75987560759C76BE +:2078400060759875607580756075C87560750076607698756075807560752076607560755D +:207860006075AC76607580756075E875607540768076B4766075807560759C756475A076CB +:2078800064759C75647584756475CC756475047664769C75647584756475247664756475DD +:2078A0006475B076647584756475EC75647544768476A4756475847564750000130002094E +:2078C0000101010A138208130303030B12040F0C0105050D130608130307070E03000B0924 +:2078E0000101010A138208130303030B12040F0C0505050D130608130707070E13001309E4 +:207900001401010A138208130303030B12040F0C1405050D130613130B07070B1300160992 +:207920000101010A138208131503030B12040F0C0505050D130613131007070E120016097B +:207940000101010A138213130303030B12040F0C0505110D130613130307070E82004209C7 +:207960000101010A138213130303030B12040F0C0505110D130613130707060E4200020924 +:207980000101010A138213130303030B12040F0C0105050D130613131707070E4200020903 +:2079A0000101010F138213130303030B12040F0C0305050D130613131007070E010101022B +:2079C000010102020001010301010301020101000202020241000864643A646464642C582B +:2079E000000E64643A64646464000B646464642C580007646464642C590006646464640016 +:207A00000364642C58000564642C59001164642C53000964640001236464646400C223649F +:207A2000642C236464001423646400022864642C53292C59000C28646464642C582900102C +:207A400028646464642900102864642C58290000286464292C59000428646429000F5B640F +:207A60006464645D00175B64645D2C59000D5B64645D000A000008C2204818AF7A080069E6 +:207A800001008F7A0800E220AF7C080069008F7C0800C22068286B08C210E220DAA20800E6 +:207AA0000AB00848A930201800800648A93120180068CAD0EBFA286B08C22048A948085BCB +:207AC0006828E220A732F00AC920D00622767A3A80F26B0808C22048A948085B68282276A3 +:207AE0007A3A22B87A3AC230A531C22029FF000A0AAAA532950DA534950FE220A732F014DF +:207B0000C922F00622767A3A80F2A900873222767A3AE631286B08C22048A948085B682858 +:207B2000E220644AC22064506452E220A732C93AF00D208303900E22AE6F3AA901854A2216 +:207B4000767A3A80E5A54AF016A531C22029FF000A0AAAA550950DA552950FE220E6316B4D +:207B6000E220643122B87A3AA732F021C922D00622D37A3A800A22167B3AA531C909B00DB0 +:207B8000A732F009C920F0DC208303B0D76B080B08C22048A948085B6828C210E220A231F6 +:207BA000007400CAD0FBA90085028534C220A9004F85008532E22022B87A3AC900F038C27A +:207BC00020A5328508E220A534850AA2010022767A3AA732D006860B6431801BC920F0037C +:207BE000E880EB860BA900873222767A3AA708C941F00722607B3A2B286B22B87A3AA732E7 +:207C0000F0F522167B3A22B87A3AA732F0E9C220A5328511E220A534851322767A3AA7326B +:207C2000F026C920D0F4A9008732E63122767A3A22B87A3AA732F0BFC220A5328515E22051 +:207C4000A5348517E63180AFE63180AB08C210E220A531D00FA2427DA93A48AB20DB022042 +:207C60004E028061C220A50D8F230800A50F8F25080020325EE220A531C901D00FC220A959 +:207C8000FFFF8F5403008F560300800EC220A5118F540300A5138F56030022181100B0254C +:207CA000E220A2687DA93A48AB20DB02AF2E0300200503A920201800AF2003002005032045 +:207CC0004E02204E02286B8B08C210E220A531C903F00FA2427DA93A48AB20DB02204E02A5 +:207CE0008054C220A50D8F230800A50F8F25080020325EA5118F500300A5138F520300A569 +:207D0000158F580300A5178F5A0300221C1100B025E220A2527DA93A48AB20DB02AF2E0372 +:207D200000200503A920201800AF200300200503204E02204E0228AB6B5C3D253A6B00009F +:207D4000000042616420617267756D656E74730D0D00556E61626C6520746F2073617665E3 +:207D60002066696C653A2000556E61626C6520746F206C6F61642066696C653A20000D2088 +:207D8000205043202020202041202020205820202020592020202053502020204442522023 +:207DA00044502020204E564D5844495A430D0041434446474A484C4D523B53545657583E58 +:207DC0003F0018FB08C22048A900085B682808E22048A90048AB6828C23020017EA9FFFECE +:207DE0001B08E22048A93A48AB6828A243D220DB0208E22048A90048AB68284C3D254CFE86 +:207E00007D0820D00120704B28600000000000000000000000000000000000000000000089 :207E2000000000000000000000000000000000000000000000000000000000000000000042 :207E4000000000000000000000000000000000000000000000000000000000000000000022 :207E6000000000000000000000000000000000000000000000000000000000000000000002 @@ -2785,13 +2660,13 @@ :20CFA000000000000000000000000000000000000000000000000000000000000000000071 :20CFC000000000000000000000000000000000000000000000000000000000000000000051 :20CFE000000000000000000000000000000000000000000000000000000000000000000031 -:20D00000303132333435363738394142434445462B002D002A002F004D4F44005E003C0043 -:20D020003D003E004E4F5400414E44004F52002800290052454D005052494E54004C455469 -:20D0400000474F544F00454E44004946005448454E00454C534500474F535542005245546E -:20D0600055524E00464F5200544F0053544550004E45585400444F004C4F4F500057484901 -:20D080004C4500554E54494C004558495400434C520053544F5000504F4B4500504F4B45B4 -:20D0A0005700504F4B454C00434C530052454144004441544100524553544F5245004449D5 -:20D0C0004D0043414C4C003C3D003E3D003C3E002D004C454E005045454B005045454B57CC +:20D00000303132333435363738394142434445462B002D002A002F004D4F44005E003C3D06 +:20D02000003E3D003C3E003C003D003E004E4F5400414E44004F52002800290052454D00AA +:20D040005052494E54004C455400474F544F00454E44004946005448454E00454C53450067 +:20D06000474F5355420052455455524E00464F5200544F0053544550004E45585400444FB8 +:20D08000004C4F4F50005748494C4500554E54494C004558495400434C520053544F5000F0 +:20D0A000504F4B4500504F4B455700504F4B454C00434C53005245414400444154410052D6 +:20D0C0004553544F52450044494D0043414C4C002D004C454E005045454B005045454B57DB :20D0E000005045454B4C0043485224004153430053504300544142004142530053474E006C :20D10000484558240044454300535452240056414C004C4546542400524947485424004DFC :20D120004944240052554E004E4557004C4F4144004C4953540044495200424C4F414400C2 @@ -2802,9 +2677,9 @@ :20D1C0004F4C4F52004249544D415000434C524249544D415000504C4F54004C494E450051 :20D1E00046494C4C005350524954450053505249544541540053505249544553484F5700AD :20D2000054494C455345540054494C454D41500054494C4553484F570054494C45415400B6 -:20D220004D454D434F5059004C494E4541520052454354000D52454144590D00433235367C -:20D2400020466F656E69782042415349433831362076302E312E302D616C7068612B3236DB -:03D26000330D008B +:20D220004D454D434F5059004C494E4541520052454354004C4F43415445000D524541440A +:20D24000590D004332353620466F656E69782042415349433831362076302E322E302D61CC +:0AD260006C7068612B3132380D004C :02000004003BBF :20000000546869732069732074686520637265646974732073637265656E2120202020207C :200020002020202020202020202020202020202020202020202020202020202020202020C0 @@ -3318,4 +3193,134 @@ :203FA000F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3A1 :203FC000F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F381 :203FE000F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F361 +:02000004003FBB +:2000000000000000000000007E81A581BD99817E3C7EDBFFC37E3C0000EEFEFE7C381000A7 +:2000200010387CFE7C381000003C18FFFF08180010387CFEFE1038000000183C1800000054 +:20004000FFFFE7C3E7FFFFFF003C428181423C00FFC3BD7E7EBDC3FF0103070F1F3F7FFF26 +:20006000FFFEFCF8F0E0C0800406070404FCF8000C0A0D0BF9F91F1F00927C44C67C9200EE +:20008000000060787E7860000000061E7E1E0600187E181818187E1866666666660066007C +:2000A000FFB67636363636007EC1DC22221F837E0000007E7E000000187E18187E1800FF67 +:2000C000187E18181818180018181818187E1800000406FF06040000002060FF60200000F2 +:2000E000000000C0C0C0FF00002466FF66240000000010387CFE0000000000FE7C3810002A +:200100000000000000000000303030303000300066660000000000006C6CFE6CFE6C6C00DB +:20012000107CD27C867C1000F096FC183E72DE0030483078CECC78000C0C18000000000049 +:200140001060C0C0C0601000100C0606060C1000005438FE385400000018187E1818000041 +:2001600000000000000018700000007E00000000000000000000180002060C183060C000E5 +:200180007CCEDEF6E6E67C001838781818183C007CC6060C3060FE007CC6063C06C67C00FF +:2001A0000E1E3666FE060600FEC0C0FC0606FC007CC6C0FCC6C67C00FE060C1830606000CD +:2001C0007CC6C67CC6C67C007CC6C67E06C67C0000300000003000000030000000302000E5 +:2001E000001C3060301C000000007E007E0000000070180C187000007CC60C183000300029 +:200200007C829AAAAA9E7C007CC6C6FEC6C6C600FC66667C6666FC007CC6C0C0C0C67C00B0 +:20022000FC6666666666FC00FE6268786862FE00FE6268786860F0007CC6C6C0DEC67C00E0 +:20024000C6C6C6FEC6C6C6003C18181818183C001E0C0C0C0CCC7800C6CCD8F0D8CCC600B6 +:20026000F06060606062FE00C6EEFED6C6C6C600C6E6F6DECEC6C6007CC6C6C6C6C67C0024 +:20028000FC66667C6060F0007CC6C6C6C6C67C0CFC66667C6666E6007CC6C07C06C67C00CC +:2002A0007E5A181818183C00C6C6C6C6C6C67C00C6C6C6C6C66C3800C6C6C6C6D6EEC60086 +:2002C000C66C3838386CC6006666663C18183C00FEC60C183066FE001C18181818181C000C +:2002E000C06030180C0602007030303030307000000010386CC6000000000000000000FF39 +:20030000303018000000000000007C067EC67E00C0C0FCC6C6C6FC0000007CC6C0C67C0013 +:2003200006067EC6C6C67E0000007CC6FEC07C003C6660F06060600000007EC6C67E067CCB +:20034000C0C0FCC6C6C6C6001800381818183C00000C001C0C0CCC78C0C0C6D8F0D8C60005 +:200360003818181818183C000000EEFED6C6C6000000FCC6C6C6C60000007CC6C6C67C00E5 +:200380000000FCC6C6FCC0C000007EC6C67E06060000DE766060600000007CC07C067C0017 +:2003A00018187E1818181E000000C6C6C6C67E000000C6C6C66C38000000C6C6D6FEC60077 +:2003C0000000C66C386CC6000000C6C6C67E067C0000FE0C1860FE000E18187018180E00C3 +:2003E0001818180018181800E030301C3030E0000000709A0E0000000000183C66FF000000 +:200400007CC6C0C0C67C18706600C6C6C6C67E000E187CC6FEC07C0018247C067EC67E0032 +:2004200066007C067EC67E00380C7C067EC67E0018007C067EC67E0000007CC0C07C18702E +:2004400018247CC6FEC07C0066007CC6FEC07C0070187CC6FEC07C006600381818183C00DC +:200460001824381818183C00380C381818183C0066007CC6FEC6C60018007CC6FEC6C6006E +:200480000E18FE607860FE0000007C1A7ED87E007ED8D8DEF8D8DE0018247CC6C6C67C0058 +:2004A00066007CC6C6C67C00380C7CC6C6C67C001824C6C6C6C67E00380CC6C6C6C67E0052 +:2004C0006600C6C6C67E067C667CC6C6C6C67C00C600C6C6C6C67C00187CC6C0C67C180020 +:2004E0001E3230783070FE00663C187E183C1800FCC6FCC0CCDECC0E001C3230FC30F00026 +:200500000E187C067EC67E001A30381818183C000E187CC6C6C67C000E18C6C6C6C67E003F +:200520006698FCC6C6C6C6006698E6F6DECEC6007C067EC67E00FE007CC6C6C67C00FE00D3 +:200540001800183060C67C000000FEC0C0C0C0000000FE0606060600C0C0C0DE060C1E0037 +:20056000C0C0C0CC1C3E0C00300030303030300000366CD86C36000000D86C366CD800000F +:20058000AAAAAAAAAAAAAAAAAA55AA55AA55AA5544224422442244221818181818181818B7 +:2005A000181818F818181818181818F818F81818363636F636363636000000FE36363636D5 +:2005C000000000F818F81818363636F606F636363636363636363636000000FE06F63636CD +:2005E000363636F606FE0000363636FE00000000181818F818F80000000000F81818181817 +:200600001818181F00000000181818FF00000000000000FF181818181818181F1818181806 +:20062000000000FF00000000181818FF181818181818181F181F1818363636373636363695 +:2006400036363637303F00000000003F30373636363636F700FF0000000000FF00F7363646 +:200660003636363730373636000000FF00FF0000363636F700F73636181818FF00FF00008E +:20068000363636FF00000000000000FF00FF1818000000FF363636363636363F00000000D3 +:2006A0001818181F181F00000000001F181F18180000003F36363636363636FF3636363686 +:2006C000181818FF18FF1818181818F8000000000000001F18181818FFFFFFFFFFFFFFFFD5 +:2006E00000000000FFFFFFFFF0F0F0F0F0F0F0F00F0F0F0F0F0F0F0FFFFFFFFF000000000A +:2007000000007798987700001C3666FCC6C6FCC0FE626060606060000000FF6666666600E8 +:20072000FE6230183062FE0000003F66C6CC780000003333333E30F00000FF18181818007C +:200740003C183C66663C183C007CC6FEC67C0000007EC3C3C366E7001E193C66C6CC780034 +:20076000000066999966000000037CCEE67CC000003EC0FEC03E0000007EC3C3C3C3000088 +:2007800000FE00FE00FE000018187E18187E000070180C187000FE001C3060301C00FE00F3 +:2007A000000E1B18181818181818181818D870000018007E001800000076DC0076DC000086 +:2007C0003C663C000000000000183C180000000000000000180000000F0C0C0CEC6C3800F4 +:2007E000D8ECCCCC00000000F030C0F0000000000000003C3C3C3C000000000000000000DD +:2008000000000000000000007C82AA82BA92827C7CFED6FEC6EEFE7CFFFDFBF5EBD5ABFF92 +:20082000FFE1FD85858787FFFFBDDBE7E7DBBDFFFF8181BDBDBD81FFFFFFFFFFFF8181FF14 +:2008400000081020100800000024140C14240000008E888C88E800000000000000000000BA +:2008600000EE88CC88880000000004143C10000000304C4C3000000000382838280000000A +:20088000FF81BDBDBDBD81FFFF55AA55AA55AAFFABD5ABD5ABD5ABD5FF818181818181FF65 +:2008A000FFF9E18181E1F9FFFF9F878181879FFFFFE7E7C3C38181FFFF8181C3C3E7E7FF90 +:2008C00000265404040406000000000000000000000000000000000000000000000000008C +:2008E0000000000000000000000000000000000000000000000000000000000000000000F8 +:20090000000000000000000010101010001000002424240000000000247E24247E2400008F +:20092000103C50381478100062640810204C8C0030484830584C4C38101010000000000029 +:20094000081020202020100810080404040408100024187E182400000010107C10100000F5 +:2009600000000000101020000000003C000000000000000018180000040408081010202053 +:200980003C464A5262423C0010301010101038003844041820407C00384404180444380015 +:2009A000081828487C0808007C4078040444380038444078444438007C440408081010007B +:2009C00038444438444438003844443C04443800000018000018000000001800001818303B +:2009E000000810201008000000003C003C0000000010080408100000384404081000100053 +:200A000038444C4C404438001028447C4444000078447844447800003844404044380000DA +:200A200078444444447800007C407840407C00007C407840404000003844404C443800000E +:200A400044447C444444000038101010103800001C08080848300000242830302824000072 +:200A600020202020203C0000446C7C54444400004464544C44440000384444444438000042 +:200A800078444478404000003844444444380C0078444478484400003C403804047800009A +:200AA0007C101010101000004444444444380000444444442810000082828292926C000080 +:200AC000422418182442000044442810101000007C081020407C00003820202020203800BA +:200AE000202010100808040438080808080838000010284400000000000000000000007EEC +:200B000040201000000000000038043C643C00004040784444780000000038404038000065 +:200B200004043C44443C00000038447C403C00000C103C101010000000003C44443C047835 +:200B40004040784444440000100030101038000008000808080808302020243828240000F1 +:200B6000301010101010000000006854544400000000382424240000000038444438000005 +:200B8000000078444478404000003C44443C0404000078444040000000001C300C38000089 +:200BA00000107C1010100C0000004444443C0000000042422418000000008282926C0000A3 +:200BC000000024181824000000002424241C043800007C18307C00000C1010303010100CE1 +:200BE00018181800181818003008080C0C0808300000327E4C000000000010283800000061 +:200C000000003C3C3C3C000000003C24243C00000000183C3C180000000018242418000004 +:200C20001824241800000000003C424266246600001800180C06663C0C12307C3062FC0050 +:200C40001C20702070201C0002060CD8F0E0C0001818FF0000FF00000000FF0000FF181844 +:200C6000242424E7E72424241818FF0000FF18182424242727242424242424E4E4242424AA +:200C8000000000FFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF006D +:200CA000FFFFFFFFFFFF0000FFFFFFFFFF000000FFFFFFFF00000000F8F8F8F8F8F8F8F883 +:200CC000FCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFE7F7F7F7F7F7F7F7F3F3F3F3F3F3F3F3F54 +:200CE0001F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0000000000000000000000000000000084 +:200D0000FFFFFFFFFFFFFFFFF0F0F0F0F0F0F0F000000000FFFFFFFFFF0000000000000060 +:200D200000000000000000FF8080808080808080AA55AA55AA55AA550101010101010101B0 +:200D400000000000AA55AA55FFFEFCF8F0E0C08003030303030303031818181F1F181818AE +:200D6000000000000F0F0F0F1818181F1F000000000000F8F8181818000000000000FFFF7B +:200D80000000001F1F181818181818FFFF000000000000FFFF181818181818F8F8181818C1 +:200DA000C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E00707070707070707FFFF000000000000FD +:200DC000FFFFFF00000000000000000000FFFFFF030303030303FFFF00000000F0F0F0F049 +:200DE0000F0F0F0F00000000181818F8F8000000F0F0F0F000000000F0F0F0F00F0F0F0FC3 +:200E0000000000FFFF000000081C3E7F7F1C3E001818181818181818000000FFFF0000005C +:200E20000000FFFF0000000000FFFF000000000000000000FFFF0000303030303030303038 +:200E40000C0C0C0C0C0C0C0C000000E0F038181818181C0F07000000181838F0E000000060 +:200E6000C0C0C0C0C0C0FFFFC0E070381C0E070303070E1C3870E0C0FFFFC0C0C0C0C0C07E +:200E8000FFFF030303030303003C7E7E7E7E3C000000000000FFFF00367F7F7F3E1C0800BF +:200EA0006060606060606060000000070F1C1818C3E77E3C3C7EE7C3003C7E66667E3C00C8 +:200EC0001818666618183C000606060606060606081C3E7F3E1C0800181818FFFF181818A9 +:200EE000C0C03030C0C0303018181818181818180000033E76363600FF7F3F1F0F07030159 +:200F000024242424242424240000FF0000FF000000003F20202724240000FF0000E7242497 +:200F20000000FC0404E4242424242720203F00002424E70000FF00002424E40404FC000035 +:200F400024242720202724242424E40404E424242424E70000E724240F0F0F0FF0F0F0F0B9 +:200F60000103070F1F3F7FFF80C0E0F0F8FCFEFF3399CC663399CC66CC993366CC99336682 +:200F8000F0F0F0F0FFFFFFFF0F0F0F0FFFFFFFFFFFFFFFFFF0F0F0F0FFFFFFFF0F0F0F0F69 +:200FA000050A050A00000000000000000A050A05A050A0500000000000000000A050A05035 +:200FC0000A050A050A050A05AA55AA550000000000183C7E181818180010307F7F30100027 +:200FE00000080CFEFE0C0800181818187E3C180000003649360000000000000000000000E6 +:01FFFF00FF02 :00000001FF diff --git a/bin/Release/roms/kernel.lbl b/bin/Release/roms/kernel.lbl index 8e925bc..fca7e75 100644 --- a/bin/Release/roms/kernel.lbl +++ b/bin/Release/roms/kernel.lbl @@ -1,92 +1,92 @@ -NOT_KB_CAPSLOCK = $381965 +NOT_KB_CAPSLOCK = 3676517 FNX1_INT06_LPT = $40 RTC_HRS = $af0804 BIOS_DEV_SD3 = 5 BIOS_DEV_SD2 = 4 BIOS_DEV_SD1 = 3 -MIDI_INSTRUMENT_BOTTLEB= $392ae7 +MIDI_INSTRUMENT_BOTTLEB= $392b39 SDMA_CTRL_REG0 = $af0420 SDMA_CTRL_REG1 = $af0421 FNX1_INT00_KBD = $01 CLRSCREEN = $0010a8 OPL2_LOOP = $000036 GABE_RNG_STAT = $afe886 -DRUMINS_RIDE2 = $39250b -IPUTBLOCK = $3941b6 +DRUMINS_RIDE2 = $39255d +IPUTBLOCK = $394208 ATTACK_RT = $f0 -MIDIW31_INSTRUMENT_OBOE= $393287 +MIDIW31_INSTRUMENT_OBOE= $3932d9 IBREAK = $3906a4 TILESET6_ADDY_H = $af029a TILESET6_ADDY_M = $af0299 TILESET6_ADDY_L = $af0298 IDE_STAT_ERR = $01 -UART_SETLCR = $395c1f -DRUMINS_CRASH2 = $3924f3 -ITESTSID = $391263 +UART_SETLCR = $395c84 +DRUMINS_CRASH2 = $392545 +ITESTSID = $3912a2 DIVIDEND = $00030c VECTOR_ECOP = $38fff4 BIOS_TIMEOUT = $80 -INSTRUMENT_BDRUM1= $3917e7 -DRUMINS_CABASA = $392583 +INSTRUMENT_BDRUM1= $391839 +DRUMINS_CABASA = $3925d5 TILESET1_ADDY_L = $af0284 TILESET1_ADDY_M = $af0285 TILESET1_ADDY_H = $af0286 SDC_TRANS_STATUS_REG= $afea04 SP05_CONTROL_REG= $af0c28 FNX0_INT03_TMR1 = $08 -MIDIW31_INSTRUMENT_WOODBLOK= $3934bb -MIDI_INSTRUMENT_HALOPAD= $392bbf +MIDIW31_INSTRUMENT_WOODBLOK= $39350d +MIDI_INSTRUMENT_HALOPAD= $392c11 SP06_X_POS_L = $af0c34 SP06_X_POS_H = $af0c35 -MIDIW31_INSTRUMENT_STEELDRM= $3934af -greet_msg = $396e0e -MIDI_INSTRUMENT_METALPAD= $392bb3 +MIDIW31_INSTRUMENT_STEELDRM= $393501 +greet_msg = $396e73 +MIDI_INSTRUMENT_METALPAD= $392c05 SID0_V2_FREQ_LO = $afe407 -MIDI_INSTRUMENT_PICCOLO= $392ab7 +MIDI_INSTRUMENT_PICCOLO= $392b09 DRUM_SNARE = $08 SP23_CONTROL_REG= $af0cb8 FDC_ST3_WP = $40 GRPH_LUT6_PTR = $af3800 -MIDI_INSTRUMENT_SYNBASS1= $39291f -MIDI_INSTRUMENT_SYNBASS2= $39292b +MIDI_INSTRUMENT_SYNBASS1= $392971 +MIDI_INSTRUMENT_SYNBASS2= $39297d SID0_V2_FREQ_HI = $afe408 -iinit_lut_exit = $390d19 -MIDIW31_INSTRUMENT_BASSLEAD= $39336b +iinit_lut_exit = $390d58 +MIDIW31_INSTRUMENT_BASSLEAD= $3933bd UNSIGNED_MULT_AH_LO= $000106 -NOT_KB_SET_CTRL = $381934 -pass_tst0xAAmsg = $3970a5 +NOT_KB_SET_CTRL = 3676468 +pass_tst0xAAmsg = $39710a UNSIGNED_MULT_AH_HI= $000107 TL3_TOTAL_Y_SIZE_H= $af022b TL3_TOTAL_Y_SIZE_L= $af022a FDC_CMD_MT = $80 UART_300 = 384 GABE_RNG_CTRL_DV= $02 -MIDI_INSTRUMENT_ACOUBASS= $3928d7 +MIDI_INSTRUMENT_ACOUBASS= $392929 GABE_RNG_CTRL_EN= $01 -FDC_Seek_Track = $3964d0 +FDC_Seek_Track = $396535 FDC_CMD_SK = $20 KSR = $10 IDE_DATA = $afe830 -OPL2_GET_DEEPTREMOLO= $3938d3 +OPL2_GET_DEEPTREMOLO= $393925 SP00_X_POS_H = $af0c05 SP00_X_POS_L = $af0c04 -ilocate_done = $390a63 +ilocate_done = $390aa2 INT_PENDING_REG0= $000140 INT_PENDING_REG1= $000141 INT_PENDING_REG2= $000142 INT_PENDING_REG3= $000143 -MIDI_INSTRUMENT_HARPSIC= $39279f +MIDI_INSTRUMENT_HARPSIC= $3927f1 FDC_CMD_RETRY = $000534 DOS_SHORT_NAME = $38a03a FDC_HEAD = $000301 RHIRQ = $38ff60 -ilocate_down = $390a40 +ilocate_down = $390a7f VDMA_BYTE_2_WRITE= $af0401 MOUSE_PTR_GRAP1_START= $af0600 FDC_ST3_TRACK0 = $10 SDMA_CTRL0_TRF_Fill= $04 -MIDI_INSTRUMENT_MUSICBOX= $3927cf -OPL2_SET_RELEASE= $393e3a +MIDI_INSTRUMENT_MUSICBOX= $392821 +OPL2_SET_RELEASE= $393e8c GAMMA_B_LUT_PTR = $af4000 ALGORITHM = $01 SIGNED_DIV_QUO_HI= $00011d @@ -95,19 +95,19 @@ SP30_ADDY_PTR_H = $af0cf3 SP30_ADDY_PTR_L = $af0cf1 SP30_ADDY_PTR_M = $af0cf2 SIGNED_DIV_QUO_LO= $00011c -DOS_CREATE = $39524a +DOS_CREATE = $3952a1 TILESET3_ADDY_L = $af028c TILESET3_ADDY_M = $af028d TILESET3_ADDY_H = $af028e JOYSTICK_MODE = $afe804 -INSTRUMENT_TRUMPET1= $392237 -INSTRUMENT_TRUMPET2= $39224d -INSTRUMENT_TRUMPET3= $392263 -INSTRUMENT_TRUMPET4= $392279 +INSTRUMENT_TRUMPET1= $392289 +INSTRUMENT_TRUMPET2= $39229f +INSTRUMENT_TRUMPET3= $3922b5 +INSTRUMENT_TRUMPET4= $3922cb SP24_CONTROL_REG= $af0cc0 -MIDI_INSTRUMENT_WOODBLOK= $392cbb +MIDI_INSTRUMENT_WOODBLOK= $392d0d MULTIPLIER = $0f -IPRINT = $39077e +IPRINT = $390787 TARGET = 1 RAD_CHANNEL = $000057 SP04_X_POS_L = $af0c24 @@ -126,16 +126,16 @@ SPRITE_LUT7 = $0e TMR0_SCLR = $02 LED2_REG = $af115e FNX3_INT06_TBD = $40 -IINITKEYBOARD = $3910f8 -OPL2_SET_ENVELOPESCALING= $393c7a +IINITKEYBOARD = $391137 +OPL2_SET_ENVELOPESCALING= $393ccc INT_POL_REG0 = $000144 INT_POL_REG1 = $000145 INT_POL_REG2 = $000146 INT_POL_REG7 = $000147 -SOL_INTERRUPT = $38181a -MIDIW31_INSTRUMENT_OVERDGT= $3930b3 -OPL2_PLAYDRUM = $393989 -FDC_TIME_HANDLE = $396a0e +SOL_INTERRUPT = 3676186 +MIDIW31_INSTRUMENT_OVERDGT= $393105 +OPL2_PLAYDRUM = $3939db +FDC_TIME_HANDLE = $396a73 JOYSTICK3 = $afe803 JOYSTICK2 = $afe802 JOYSTICK1 = $afe801 @@ -143,30 +143,31 @@ JOYSTICK0 = $afe800 GETBLOCK = $001044 SUSTAINING = $20 VECTOR_EIRQ = $38fffe -INSTRUMENT_LASER= $391ca1 -INSTRUMENT_STRINGS1= $39203d -MIDI_INSTRUMENT_TELEPHON= $392d27 +INSTRUMENT_LASER= $391cf3 +INSTRUMENT_STRINGS1= $39208f +MIDI_INSTRUMENT_TELEPHON= $392d79 RVECTOR_ENMI = $38fffa -UART_SETBPS = $395bef +UART_SETBPS = $395c54 SP52_Y_POS_H = $af0da7 SP52_Y_POS_L = $af0da6 GRPH_LUT7_PTR = $af3c00 -OPL2_GET_BLOCK = $393814 +OPL2_GET_BLOCK = $393866 INITVKYTXTMODE = $0010cc DRUM_BASS = $10 -DIVIDE32 = $396647 -MIDIW31_INSTRUMENT_JAZZGT= $39308f +DIVIDE32 = $3966ac +MIDIW31_INSTRUMENT_JAZZGT= $3930e1 SP01_CONTROL_REG= $af0c08 -KB_NORM_SC = $38197b +KB_NORM_SC = 3676539 DOS_RUN_PTR = $00035c RTC_SEC = $af0800 SP21_X_POS_H = $af0cad SP21_X_POS_L = $af0cac -Success_kb_init = $397121 -MIDIW31_INSTRUMENT_WARMPAD= $393383 +Success_kb_init = $397186 +MIDIW31_INSTRUMENT_WARMPAD= $3933d5 SP25_CONTROL_REG= $af0cc8 -IINITSPRITE = $390e63 +IINITSPRITE = $390ea2 DOS_BOOT_SECTOR_END= $38ab00 +TARGET_SYS = 1 SP36_Y_POS_L = $af0d26 SP36_Y_POS_H = $af0d27 SIO_FDC_MSR = $af13f4 @@ -175,108 +176,108 @@ SID0_NOT_USED0 = $afe41d SID0_NOT_USED1 = $afe41e SID0_NOT_USED2 = $afe41f GP41_REG = $af113c -MIDI_INSTRUMENT_SHAMISEN= $392c4f +MIDI_INSTRUMENT_SHAMISEN= $392ca1 SDMA_CTLR0_RSVD = $40 SP56_Y_POS_L = $af0dc6 SP56_Y_POS_H = $af0dc7 -IPRINTI = $3916df -IPRINTH = $390ad7 -IPRINTF = $3916de -IPRINTC = $3916dc -IPRINTS = $3916dd +IPRINTI = $391731 +IPRINTH = $390b16 +IPRINTF = $391730 +IPRINTC = $39172e +IPRINTS = $39172f SP34_X_POS_L = $af0d14 SP34_X_POS_H = $af0d15 CODEC_DATA_HI = $afe901 -OPL2_SET_VIBRATO= $393bf0 +OPL2_SET_VIBRATO= $393c42 GP13_REG = $af1126 CODEC_DATA_LO = $afe900 -DRUMINS_MU_TRNGL= $392607 +DRUMINS_MU_TRNGL= $392659 VDMA_STATUS_REG = $af0401 -FDC_Read_Sector = $39651d -ICSRHOME = $390966 +FDC_Read_Sector = $396582 +ICSRHOME = $3909a5 SP43_ADDY_PTR_L = $af0d59 SP43_ADDY_PTR_M = $af0d5a SP43_ADDY_PTR_H = $af0d5b -MIDIW31_INSTRUMENT_GUNSHOT= $39354b +MIDIW31_INSTRUMENT_GUNSHOT= $39359d ScanCode_Shift_Set1= $397380 -OPL2_GET_SCALINGLEVEL= $3937f3 +OPL2_GET_SCALINGLEVEL= $393845 KB_FA = $10 KB_FE = $20 TILESET3_ADDY_CFG= $af028f -OPL2_Set_Tremolo_Set= $393bce +OPL2_Set_Tremolo_Set= $393c20 CLOSE = $001034 KB_BREAK = $f0 MOUSE_POS_Y_HI = $0000e4 -MIDIW31_INSTRUMENT_METALPAD= $3933b3 -MIDIW31_INSTRUMENT_BIRDS= $39351b +MIDIW31_INSTRUMENT_METALPAD= $393405 +MIDIW31_INSTRUMENT_BIRDS= $39356d BM0_Y_OFFSET = $af0105 GABE_SYS_STAT_MID1= $02 GABE_SYS_STAT_MID0= $01 -DRUMINS_CRASH = $392493 +DRUMINS_CRASH = $3924e5 LINES_VISIBLE = $000013 SID0_ENV3 = $afe41c MOUSE_POS_Y_LO = $0000e3 -FDC_VBR_END = $396b28 +FDC_VBR_END = $396b8d CPUPC = $000240 -INITRTC = $391248 +INITRTC = $391287 KB_OK = $aa -IF_CLOSE = $3954fd +IF_CLOSE = $395554 DOS_ATTR_LONGNAME= $0f ADDER32_A_HH = $000123 ADDER32_A_HL = $000122 OPL3_L_CSM = $afe708 SDMA_STAT_Dst_Add_Err= $02 -IGETLINE = $3916d9 +IGETLINE = $39172b GAMMA_2_2_Tbl = $397600 -MIDI_INSTRUMENT_CHIFLEAD= $392b3b +MIDI_INSTRUMENT_CHIFLEAD= $392b8d OPL3_R_IRQ = $afe604 BIOS_DEV_HD0 = 6 BIOS_DEV_HD1 = 7 BIOS_DEV_HD2 = 8 BIOS_DEV_HD3 = 9 -FDC_DumpReg_Command= $3964ad -iinit_lut_loop = $390c67 +FDC_DumpReg_Command= $396512 +iinit_lut_loop = $390ca6 KB_MAKEBREAK = $f7 ADDER32_A_LL = $000120 ADDER32_A_LH = $000121 -Percussion_6 = $393b1f -Percussion_7 = $393afa -Percussion_8 = $393ad5 -Percussion_9 = $393ab0 -Percussion_A = $393a8b +Percussion_6 = $393b71 +Percussion_7 = $393b4c +Percussion_8 = $393b27 +Percussion_9 = $393b02 +Percussion_A = $393add SP01_Y_POS_H = $af0c0f SP01_Y_POS_L = $af0c0e BPB_EXTENDED_RECORD= $29 FDC_CMD_VERSION = 16 RELEASE_RT = $0f TIMER1TRIGGER = $40 -MIDI_INSTRUMENT_MELOTOM= $392cd3 +MIDI_INSTRUMENT_MELOTOM= $392d25 SP02_Y_POS_H = $af0c17 SP02_Y_POS_L = $af0c16 CSRUP = $001098 -pass_cmd0x60msg = $3970d7 -INSTRUMENT_MLTRDRUM= $391d0f +pass_cmd0x60msg = $39713c +INSTRUMENT_MLTRDRUM= $391d61 IDE_STAT_IDX = $02 CPUDP = $00024c LOADFILE_LEN = $000303 -KBD_GETC = $381a7e -MIDIW31_INSTRUMENT_SEASHORE= $39350f +KBD_GETC = 3676865 +MIDIW31_INSTRUMENT_SEASHORE= $393561 INITGAMMATABLE = $0010c4 -DRUMINS_MU_CUICA= $3925ef -MIDI_INSTRUMENT_STEELDRM= $392caf +DRUMINS_MU_CUICA= $392641 +MIDI_INSTRUMENT_STEELDRM= $392d01 UNSIGNED_DIV_DEM_HI= $000111 IDE_ERR_IDNF = $10 OPL3_L_SL_RR = $afe780 -DRUMINS_CLAVES = $3925cb -INSTRUMENT_HIHAT2= $391c07 -INSTRUMENT_HIHAT1= $391bf1 -INSTRUMENT_WAVE = $39233f +DRUMINS_CLAVES = $39261d +INSTRUMENT_HIHAT2= $391c59 +INSTRUMENT_HIHAT1= $391c43 +INSTRUMENT_WAVE = $392391 Mstr_Ctrl_TileMap_En= $10 UNSIGNED_DIV_DEM_LO= $000110 -MIDIW31_INSTRUMENT_BANJO= $393443 +MIDIW31_INSTRUMENT_BANJO= $393495 CLUSTER_BEGIN_LBA= $38a01c -INSTRUMENT_SITAR1= $391f8d -INSTRUMENT_SITAR2= $391fa3 +INSTRUMENT_SITAR1= $391fdf +INSTRUMENT_SITAR2= $391ff5 SP48_ADDY_PTR_M = $af0d82 SP48_ADDY_PTR_L = $af0d81 SP48_ADDY_PTR_H = $af0d83 @@ -284,15 +285,15 @@ SDC_TRANS_WR_DATA_ERR= $20 HRESET = $38ff00 SP14_X_POS_H = $af0c75 SP14_X_POS_L = $af0c74 -INSTRUMENT_JAVAICAN= $391c1d -INSTRUMENT_ORGAN2= $391d7d -INSTRUMENT_ORGAN3= $391d93 -INSTRUMENT_ORGAN1= $391d67 -SDC_INIT = $395db1 +INSTRUMENT_JAVAICAN= $391c6f +INSTRUMENT_ORGAN2= $391dcf +INSTRUMENT_ORGAN3= $391de5 +INSTRUMENT_ORGAN1= $391db9 +SDC_INIT = $395e16 DOS_ERR_NOTREAD = 13 FDC_CYLINDER = $000302 CHAR_LEFT = $9d -INSTRUMENT_SCRATCH4= $391f4b +INSTRUMENT_SCRATCH4= $391f9d IDE_STAT_BSY = $80 F_DIRNEXT = $00110c CHAN_IN = $000704 @@ -307,18 +308,19 @@ PRINTC = $001064 PRINTF = $001070 PRINTI = $001074 PRINTH = $001078 -DOS_FDC_NAME = $394866 +DOS_FDC_NAME = $3948b8 GETFIELD = $00105c -MIDIW31_INSTRUMENT_CHOIR= $3931c7 -INSTRUMENT_CROMORNE= $3918ef +MIDIW31_INSTRUMENT_CHOIR= $393219 +INSTRUMENT_CROMORNE= $391941 BMP_POSITION_X = $000054 BMP_POSITION_Y = $000056 -INSTRUMENT_EPIANO1B= $391a23 -INSTRUMENT_EPIANO1A= $391a0d +INSTRUMENT_EPIANO1B= $391a75 +INSTRUMENT_EPIANO1A= $391a5f SP44_ADDY_PTR_H = $af0d63 SP44_ADDY_PTR_M = $af0d62 SP44_ADDY_PTR_L = $af0d61 -OPL2_SET_PERCUSSION= $39403d +START_OF_FLASH := $380000 +OPL2_SET_PERCUSSION= $39408f SDC_DETECTED = $01 OPL2_PARAMETER2 = $000034 OPL2_PARAMETER3 = $000035 @@ -330,36 +332,36 @@ UART1_BASE = $af13f8 UART_IER = $01 SP08_X_POS_H = $af0c45 SP08_X_POS_L = $af0c44 -INSTRUMENT_HARPSI5= $391bc5 -INSTRUMENT_HARPSI4= $391baf -INSTRUMENT_HARPSI1= $391b6d -INSTRUMENT_HARPSI3= $391b99 -INSTRUMENT_HARPSI2= $391b83 +INSTRUMENT_HARPSI5= $391c17 +INSTRUMENT_HARPSI4= $391c01 +INSTRUMENT_HARPSI1= $391bbf +INSTRUMENT_HARPSI3= $391beb +INSTRUMENT_HARPSI2= $391bd5 SP54_CONTROL_REG= $af0db0 -MIDIW31_INSTRUMENT_ICERAIN= $3933d7 +MIDIW31_INSTRUMENT_ICERAIN= $393429 SP15_Y_POS_H = $af0c7f SP15_Y_POS_L = $af0c7e SP35_CONTROL_REG= $af0d18 -MIDIW31_INSTRUMENT_FRHORN= $393227 -IRQ_HANDLER = $381714 +MIDIW31_INSTRUMENT_FRHORN= $393279 +IRQ_HANDLER = 3675924 BTX_END = $afffff NUM_MIDI_DRUMS = 60 -END_OF_JOYSTICK_POLL= $395d4a +END_OF_JOYSTICK_POLL= $395daf SID0_V1_CTRL = $afe404 SDOS_VARIABLES = $000320 UNSIGNED_DIV_QUO_LO= $000114 DOS_ERR_MEDIAFULL= 18 -OPL2_SET_WAVEFORMSELECT= $393b78 +OPL2_SET_WAVEFORMSELECT= $393bca SDC_SD_ADDR_31_24_REG= $afea0a BORDER_Y_SIZE = $af0009 UNSIGNED_DIV_QUO_HI= $000115 VDMA_CTRL_TRF_Fill= $04 SDC_CONTROL_REG = $afea01 -INSTRUMENT_KEYBRD1= $391c5f -INSTRUMENT_KEYBRD3= $391c8b -INSTRUMENT_KEYBRD2= $391c75 +INSTRUMENT_KEYBRD1= $391cb1 +INSTRUMENT_KEYBRD3= $391cdd +INSTRUMENT_KEYBRD2= $391cc7 OPL3_L_IRQ = $afe704 -IF_NULLBUFFER = $39586a +IF_NULLBUFFER = $3958c1 SIO_FDC_CCR = $af13f7 SP35_Y_POS_L = $af0d1e SP35_Y_POS_H = $af0d1f @@ -368,30 +370,30 @@ CHAR_F10 = $8a CHAR_F11 = $8b CHAR_F12 = $8c KEYBOARD_SCAN_CODE= $af115f -ISETLFS = $3916d3 -BMP_PARSER_COMPUTE_Y_SRC= $3915b4 +ISETLFS = $391725 +BMP_PARSER_COMPUTE_Y_SRC= $391606 SP25_X_POS_L = $af0ccc SP25_X_POS_H = $af0ccd FAN2_PRELOAD_REG= $af115c RHRESET = $38ff00 -INSTRUMENT_SNARE1= $391fcf +INSTRUMENT_SNARE1= $392021 Mstr_Ctrl_Graph_Mode_En= $04 -MIDI_INSTRUMENT_PIPEORG= $39283b +MIDI_INSTRUMENT_PIPEORG= $39288d LCR_PARITY_MARK = $28 GP14_REG = $af1127 FPGA_YOR = $af070f -INSTRUMENT_BASSTRLG= $3917d1 +INSTRUMENT_BASSTRLG= $391823 NUM_RSRV_SEC = $38a00c IDE_ERR_MCR = $08 GP16_REG = $af1129 BM0_RESERVED_7 = $af0107 BM0_RESERVED_6 = $af0106 -IBMP_PARSER = $39141c +IBMP_PARSER = $39146e DIP_BOOT_SDCARD = $01 -IDE_DRIVE_BSY = $396c12 +IDE_DRIVE_BSY = $396c77 SECTORS_PER_CLUSTER= $38a003 -DRUMINS_CLAP2 = $392397 -MIDI_INSTRUMENT_ACORDIAN= $392853 +DRUMINS_CLAP2 = $3923e9 +MIDI_INSTRUMENT_ACORDIAN= $3928a5 BTX_START = $afe000 FDC_DRIVE = $000300 IOINIT = $001014 @@ -400,7 +402,7 @@ SP01_ADDY_PTR_H = $af0c0b SP01_ADDY_PTR_L = $af0c09 SP01_ADDY_PTR_M = $af0c0a TARGET_FLASH = 1 -OPL2_GET_REGISTER= $3937b5 +OPL2_GET_REGISTER= $393807 FDC_MSR_CMDBSY = $10 TIMER0TRIGGER = $80 GP25_REG = $af1130 @@ -411,44 +413,44 @@ OPL3_L_WAVE_SELECT= $afe7e0 OPL3_R_OPL3_MODE= $afe605 SP52_X_POS_H = $af0da5 SP52_X_POS_L = $af0da4 -lutinitloop1 = $390c26 -lutinitloop0 = $390c17 +lutinitloop1 = $390c65 +lutinitloop0 = $390c56 TL0_WINDOW_Y_POS_H= $af020b TL0_WINDOW_Y_POS_L= $af020a FDC_PARAMETERS = $000500 -FDC_WRITEVBR = $396978 +FDC_WRITEVBR = $3969dd COLORPOS = $00001f TL3_WINDOW_X_POS_L= $af022c TL3_WINDOW_X_POS_H= $af022d FDC_MSR_DRV0BSY = $01 -IF_DELETE = $395640 +IF_DELETE = $395697 SP54_X_POS_L = $af0db4 SP54_X_POS_H = $af0db5 SP07_Y_POS_L = $af0c3e SP07_Y_POS_H = $af0c3f -pass_cmd0xFFmsg = $3970eb -midiInstrumentsw31= $393557 -OPL2_GET_ATTACK = $393d93 -INSTRUMENT_PIANO= $391e59 -OPL2_Set_EnvelopeScaling_Set= $393c9d +pass_cmd0xFFmsg = $397150 +midiInstrumentsw31= $3935a9 +OPL2_GET_ATTACK = $393de5 +INSTRUMENT_PIANO= $391eab +OPL2_Set_EnvelopeScaling_Set= $393cef DOS_ATTR_DIR = $10 SDC_TRANS_CONTROL_REG= $afea03 FDC_ST0_SEEKEND = $10 SP49_CONTROL_REG= $af0d88 FD_STAT_WRITE = $02 -ILOOP_1MS = $391614 +ILOOP_1MS = $391666 SP17_X_POS_H = $af0c8d SP17_X_POS_L = $af0c8c -ilocate_scrolldone= $390a35 +ilocate_scrolldone= $390a74 IIR_MODEM_STATUS= $00 LCR_DLB = $80 -MIDI_INSTRUMENT_WHISTLE= $392aff -DOS_BOOT_MAGIC = $394799 -FDC_Read_ID_Command= $396450 +MIDI_INSTRUMENT_WHISTLE= $392b51 +DOS_BOOT_MAGIC = $3947eb +FDC_Read_ID_Command= $3964b5 SP40_ADDY_PTR_M = $af0d42 SP40_ADDY_PTR_L = $af0d41 SP40_ADDY_PTR_H = $af0d43 -OPL2_Set_EnvelopeScaling_Exit= $393ca3 +OPL2_Set_EnvelopeScaling_Exit= $393cf5 SDCARD_DATA = $afe810 SP10_ADDY_PTR_L = $af0c51 SP10_ADDY_PTR_M = $af0c52 @@ -458,74 +460,75 @@ SP43_X_POS_H = $af0d5d UART_38400 = 3 BPB_NUMFAT_OFF = 16 OPL3_R_AM_VID_EG_KSR_MULT= $afe620 -DRUMINS_LTOM_MID= $39247b +DRUMINS_LTOM_MID= $3924cd KBD_DIS = $ad SUSTAIN_RT = $f0 -OPL2_GET_DRUMS = $39392e -DOS_TEST = $3953d6 -MIDIW31_INSTRUMENT_BOWEDGLS= $3933a7 -DOS_PARSE_DEV = $39488a -DRUMINS_VIBRASLA= $3924ff +OPL2_GET_DRUMS = $393980 +DOS_TEST = $39542d +MIDIW31_INSTRUMENT_BOWEDGLS= $3933f9 +DOS_PARSE_DEV = $3948dc +DRUMINS_VIBRASLA= $392551 SP55_ADDY_PTR_H = $af0dbb SP55_ADDY_PTR_M = $af0dba SP55_ADDY_PTR_L = $af0db9 -MIDIW31_INSTRUMENT_SYNSTR1= $3931af -MIDIW31_INSTRUMENT_SYNSTR2= $3931bb -MIDI_INSTRUMENT_SOLOVOX= $392b53 +MIDIW31_INSTRUMENT_SYNSTR1= $393201 +MIDIW31_INSTRUMENT_SYNSTR2= $39320d +MIDI_INSTRUMENT_SOLOVOX= $392ba5 GABE_SYS_STAT_EXP= $08 SP49_X_POS_L = $af0d8c SP49_X_POS_H = $af0d8d SDMA_STAT_TimeOut_Err= $08 FDC_CMD_VERIFY = 22 -INSTRUMENT_JEWSHARP= $391c49 +INSTRUMENT_JEWSHARP= $391c9b SDC_TRANS_INIT_SD= $01 -OPL2_GET_KEYON = $393845 -MIDIW31_INSTRUMENT_GOBLIN= $393413 +KBD_GETCW = 3676798 +OPL2_GET_KEYON = $393897 +MIDIW31_INSTRUMENT_GOBLIN= $393465 BIOS_ERR_WRITE = $83 OPL3_R_KSL_TL = $afe640 SDC_SPI_CLK_DEL_REG= $afea0b SP39_ADDY_PTR_H = $af0d3b SP39_ADDY_PTR_M = $af0d3a SP39_ADDY_PTR_L = $af0d39 -FDC_DELAY_10MS = $3960b7 +FDC_DELAY_10MS = $39611c SP55_Y_POS_L = $af0dbe SP55_Y_POS_H = $af0dbf -FILL_MOUSE_MARKER= $390fc0 +FILL_MOUSE_MARKER= $390fff OPL3_L_FNumber = $afe7a0 SP19_CONTROL_REG= $af0c98 FAN1_PRELOAD_REG= $af115b -NOT_KB_SET_ALT = $381942 -DOS_PUTCLUSTER = $394829 -DRUMINS_RIMSHOT4= $39264f -DRUMINS_RIMSHOT3= $392643 -DRUMINS_RIMSHOT2= $3923bb -NOT_KB_CLR_ALT = $381949 -DRUMINS_HI_BONGO= $392517 -INITVICKYMODE = $390d41 +NOT_KB_SET_ALT = 3676482 +DOS_PUTCLUSTER = $39487b +DRUMINS_RIMSHOT4= $3926a1 +DRUMINS_RIMSHOT3= $392695 +DRUMINS_RIMSHOT2= $39240d +NOT_KB_CLR_ALT = 3676489 +DRUMINS_HI_BONGO= $392569 +INITVICKYMODE = $390d80 SID0_V3_CTRL = $afe412 SP41_CONTROL_REG= $af0d48 -MIDIW31_INSTRUMENT_ECHODROP= $39341f -DRUMINS_CYMBAL = $3924c3 +MIDIW31_INSTRUMENT_ECHODROP= $393471 +DRUMINS_CYMBAL = $392515 BPB_ROOT_MAX_ENTRY_OFF= 17 -MIDI_INSTRUMENT_MUTETRP= $392a1b +MIDI_INSTRUMENT_MUTETRP= $392a6d KEY_BUFFER_CMD = $000f83 -MIDI_INSTRUMENT_SAWWAV= $392b23 +MIDI_INSTRUMENT_SAWWAV= $392b75 VEC_INT01_SOL = $001704 KB_ENABLE = $f4 DOS_TEMP = $000348 GP42_REG = $af113d -MIDIW31_INSTRUMENT_GLOCK= $392fc3 +MIDIW31_INSTRUMENT_GLOCK= $393015 TILESET0_ADDY_CFG= $af0283 RAD_LAST_NOTE = $000059 -DOS_HDC_NAME = $39487e +DOS_HDC_NAME = $3948d0 SDC_SD_ADDR_15_8_REG= $afea08 SP39_CONTROL_REG= $af0d38 BMP_PARSER = $0010e4 DOS_ERR_OPEN = 15 -DOS_DIRAPPEND = $3943b4 +DOS_DIRAPPEND = $394406 DOS_END_PTR = $000358 GP54_REG = $af1143 -IINITCHLUT = $390c0d +IINITCHLUT = $390c4c SP52_ADDY_PTR_H = $af0da3 SP52_ADDY_PTR_L = $af0da1 SP52_ADDY_PTR_M = $af0da2 @@ -534,16 +537,16 @@ SP18_Y_POS_H = $af0c97 TIMER0_CHARGE_H = $000163 TIMER0_CHARGE_L = $000161 TIMER0_CHARGE_M = $000162 -OPL2_Set_Frequency= $393efa -DOS_FREECLUS = $394d10 +OPL2_Set_Frequency= $393f4c +DOS_FREECLUS = $394d67 IDE_ERR_MC = $20 -sdc_err_boot = $3971ec +sdc_err_boot = $397251 MCMD = $000258 FNX0_INT06_FDC = $40 -iprint_digit = $390b31 -INSTRUMENT_TRAINBEL= $3921df +iprint_digit = $390b70 +INSTRUMENT_TRAINBEL= $392231 VDMA_STAT_Dst_Add_Err= $02 -DRUMINS_MARACAS = $39258f +DRUMINS_MARACAS = $3925e1 SP35_X_POS_L = $af0d1c SP35_X_POS_H = $af0d1d BM_LUT4 = $08 @@ -560,8 +563,8 @@ OPL3_R_BASE = $afe600 SIO_FDC_DSR = $af13f4 NES_SNES_EN0 = $01 NES_SNES_EN1 = $02 -bmp_parser_msg0 = $39716f -bmp_parser_msg1 = $39717b +bmp_parser_msg0 = $3971d4 +bmp_parser_msg1 = $3971e0 IDE_ERR_AMNF = $01 FDC_DOR_DMAEN = $08 INT_MASK_REG2 = $00014e @@ -576,9 +579,9 @@ MOUSE_PTR_X_POS_L= $af0702 MOUSE_PTR_X_POS_H= $af0703 LSR_ERR_PARITY = $04 RANDOM_LUT_Tbl = $397800 -MIDI_INSTRUMENT_SEASHORE= $392d0f +MIDI_INSTRUMENT_SEASHORE= $392d61 IRESTORE = $3905ac -IINITGAMMATABLE = $390c3c +IINITGAMMATABLE = $390c7b SP45_Y_POS_H = $af0d6f SP45_Y_POS_L = $af0d6e CPUX = $000246 @@ -586,12 +589,12 @@ CPUY = $000248 CPUA = $000244 FPGA_DOR = $af070d CLUSTER_SIZE = $38a00e -SOF_INTERRUPT = $381809 +SOF_INTERRUPT = 3676169 RETURN = $38fff0 SIO_FDC_DOR = $af13f2 SDC_WRITEPROT = $02 -OPL2_SET_SCALINGLEVEL= $393cff -COM1_INTERRUPT = $3818b4 +OPL2_SET_SCALINGLEVEL= $393d51 +COM1_INTERRUPT = 3676340 FNX3_INT07_TBD = $80 FPGA_MOR = $af070e NOTE_G = 7 @@ -601,37 +604,37 @@ NOTE_D = 2 NOTE_C = 12 NOTE_B = 11 NOTE_A = 9 -OPL2_GET_FNUMBER= $393ebe +OPL2_GET_FNUMBER= $393f10 SIO_FDC_DIR = $af13f7 SP29_ADDY_PTR_H = $af0ceb SP29_ADDY_PTR_L = $af0ce9 SP29_ADDY_PTR_M = $af0cea -KEYBOARD_INTERRUPT= $3818d6 +KEYBOARD_INTERRUPT= 3676374 SP60_CONTROL_REG= $af0de0 SP60_ADDY_PTR_H = $af0de3 SP60_ADDY_PTR_M = $af0de2 SP60_ADDY_PTR_L = $af0de1 -IPUSHKEYS = $3916e2 -OPL2_SET_MODFREQMULTIPLE= $393cda +IPUSHKEYS = $391734 +OPL2_SET_MODFREQMULTIPLE= $393d2c SP41_Y_POS_L = $af0d4e SP41_Y_POS_H = $af0d4f SP62_Y_POS_L = $af0df6 SP62_Y_POS_H = $af0df7 SP21_Y_POS_H = $af0caf SP21_Y_POS_L = $af0cae -OPL2_SET_KEYON = $393f37 -PERCUSSION_NEXT07= $3939af -PERCUSSION_NEXT08= $3939b6 -PERCUSSION_NEXT09= $3939bd -PERCUSSION_NEXT0A= $3939c4 +OPL2_SET_KEYON = $393f89 +PERCUSSION_NEXT07= $393a01 +PERCUSSION_NEXT08= $393a08 +PERCUSSION_NEXT09= $393a0f +PERCUSSION_NEXT0A= $393a16 OPL2_TONE_TEST = $0010ec -INSTRUMENT_ELECVIBE= $39195d -IDE_INIT = $396bef -INSTRUMENT_STRNLONG= $392053 +INSTRUMENT_ELECVIBE= $3919af +IDE_INIT = $396c54 +INSTRUMENT_STRNLONG= $3920a5 SP10_CONTROL_REG= $af0c50 UART_DLH = $01 UART_DLL = $00 -MIDI_INSTRUMENT_TENSAX= $392a6f +MIDI_INSTRUMENT_TENSAX= $392ac1 CMDBLOCK = $001120 LED1_REG = $af115d SP26_ADDY_PTR_M = $af0cd2 @@ -647,19 +650,19 @@ GP50_REG = $af113f BASIC = $3a0000 GP52_REG = $af1141 VDMA_XFER_VRAM2SRAM= $02 -iclearloop1 = $390b5f -iclearloop0 = $390b4e -DLY_LOOP1 = $391147 -MIDIW31_INSTRUMENT_TINKLBEL= $393497 +iclearloop1 = $390b9e +iclearloop0 = $390b8d +DLY_LOOP1 = $391186 +MIDIW31_INSTRUMENT_TINKLBEL= $3934e9 UART_9600 = 12 VDMA_STAT_Size_Err= $01 PUTBLOCK = $001024 -MIDIW31_INSTRUMENT_BRTHNOIS= $393503 -Failed_kb_init = $397133 -INSTRUMENT_SYNBASS1= $39212f -INSTRUMENT_SYNBASS2= $392145 -INSTRUMENT_SYNBASS4= $39215b -MIDI_INSTRUMENT_FLUTE1= $392ac3 +MIDIW31_INSTRUMENT_BRTHNOIS= $393555 +Failed_kb_init = $397198 +INSTRUMENT_SYNBASS1= $392181 +INSTRUMENT_SYNBASS2= $392197 +INSTRUMENT_SYNBASS4= $3921ad +MIDI_INSTRUMENT_FLUTE1= $392b15 SMI_EN1_REG = $af1116 KEYBOARD_SC_FLG = $000f87 OPL3_R_FEEDBACK = $afe6c0 @@ -667,7 +670,7 @@ SP32_CONTROL_REG= $af0d00 SP15_ADDY_PTR_M = $af0c7a SP15_ADDY_PTR_L = $af0c79 SP15_ADDY_PTR_H = $af0c7b -NOTE_INTRO = $393757 +NOTE_INTRO = $3937a9 DRUM_HI_HAT = $01 SP39_X_POS_H = $af0d3d SP39_X_POS_L = $af0d3c @@ -675,19 +678,19 @@ BACKGROUND_COLOR_B= $af000d BACKGROUND_COLOR_G= $af000e BACKGROUND_COLOR_R= $af000f FREQ_MODULATION = 0 -MIDIW31_INSTRUMENT_EP1= $392f87 -MIDIW31_INSTRUMENT_EP2= $392f93 -DRUMINS_HTOM_MID= $392487 +MIDIW31_INSTRUMENT_EP1= $392fd9 +MIDIW31_INSTRUMENT_EP2= $392fe5 +DRUMINS_HTOM_MID= $3924d9 DRUM_NOTE_BASE = 27 REVOFPCB_4 = $afe806 REVOFPCB_A = $afe807 REVOFPCB_C = $afe805 DOS_DIR_BLOCK_ID= $38a032 -MIDI_INSTRUMENT_SQUARWAV= $392b17 +MIDI_INSTRUMENT_SQUARWAV= $392b69 TL0_TOTAL_Y_SIZE_H= $af0207 TL0_TOTAL_Y_SIZE_L= $af0206 CHAR_INS = $0f -MIDIW31_INSTRUMENT_TENSAX= $39326f +MIDIW31_INSTRUMENT_TENSAX= $3932c1 SID0_V1_PW_HI = $afe403 SID0_V1_PW_LO = $afe402 IDE_STAT_DF = $20 @@ -695,43 +698,43 @@ OPEN = $001030 VDMA_SRC_ADDY_L = $af0402 VDMA_SRC_ADDY_M = $af0403 VDMA_SRC_ADDY_H = $af0404 -INSTRUMENT_SYN6 = $3920d7 -INSTRUMENT_SYN5 = $3920c1 -INSTRUMENT_SYN4 = $3920ab -INSTRUMENT_SYN3 = $392095 -INSTRUMENT_SYN2 = $39207f -INSTRUMENT_SYN1 = $392069 -INSTRUMENT_SYN9 = $3920ed -DRUMINS_L_WHISTL= $3925a7 -MIDIW31_INSTRUMENT_FIFTHSAW= $39335f +INSTRUMENT_SYN6 = $392129 +INSTRUMENT_SYN5 = $392113 +INSTRUMENT_SYN4 = $3920fd +INSTRUMENT_SYN3 = $3920e7 +INSTRUMENT_SYN2 = $3920d1 +INSTRUMENT_SYN1 = $3920bb +INSTRUMENT_SYN9 = $39213f +DRUMINS_L_WHISTL= $3925f9 +MIDIW31_INSTRUMENT_FIFTHSAW= $3933b1 SID0_FC_LO = $afe415 KBD_OUT_BUF = $af1060 FDC_CMD_SCAN_HIGH_OR_EQUAL= 29 GP5_REG = $af114f IDE_HEAD = $afe836 SID0_FC_HI = $afe416 -OPL2_Set_Vibrato_Set= $393c13 -PREFIX_ON = $3818ff +OPL2_Set_Vibrato_Set= $393c65 +PREFIX_ON = 3676415 BREAK = $001008 -IDE_GETBLOCK = $396ce4 +IDE_GETBLOCK = $396d49 ROOT_DIR_FIRST_CLUSTER= $38a020 BORDER_COLOR_B = $af0005 BORDER_COLOR_G = $af0006 BORDER_COLOR_R = $af0007 -pass_cmd0xEEmsg = $397103 +pass_cmd0xEEmsg = $397168 SP23_ADDY_PTR_H = $af0cbb SP23_ADDY_PTR_L = $af0cb9 SP23_ADDY_PTR_M = $af0cba -MIDI_INSTRUMENT_SANTUR= $39280b +MIDI_INSTRUMENT_SANTUR= $39285d BIOS_ERR_NOTATA = $8a -MIDIW31_INSTRUMENT_SHAMISEN= $39344f +MIDIW31_INSTRUMENT_SHAMISEN= $3934a1 SP47_X_POS_H = $af0d7d SP47_X_POS_L = $af0d7c SP53_Y_POS_H = $af0daf SP53_Y_POS_L = $af0dae LOADFILE_VARS = $000300 -MIDI_INSTRUMENT_BOWEDGLS= $392ba7 -MIDI_INSTRUMENT_HELICOPT= $392d33 +MIDI_INSTRUMENT_BOWEDGLS= $392bf9 +MIDI_INSTRUMENT_HELICOPT= $392d85 UART_19200 = 6 TMR0_UPDWN = $08 IDE_CMD_IDENTIFY= $ec @@ -741,37 +744,37 @@ SP37_X_POS_L = $af0d2c SP37_X_POS_H = $af0d2d CODEC_WR_CTRL = $afe902 VDMA_CTRL_Int_Enable= $08 -FDC_CAN_WRITE = $396087 +FDC_CAN_WRITE = $3960ec SP24_X_POS_L = $af0cc4 SP24_X_POS_H = $af0cc5 ADDER32_R_HH = $00012b ADDER32_R_HL = $00012a ScanCode_Alt_Set1= $397480 DOS_DIR_CLUSTER_END= $38a300 -BMP_PARSER_DMA_SHIT_OUT= $391597 +BMP_PARSER_DMA_SHIT_OUT= $3915e9 FNX1_INT01_COL0 = $02 -greet_clr_line3 = $396fa7 -greet_clr_line2 = $396f7d -greet_clr_line1 = $396f53 -greet_clr_line5 = $396ffb -greet_clr_line4 = $396fd1 +greet_clr_line3 = $39700c +greet_clr_line2 = $396fe2 +greet_clr_line1 = $396fb8 +greet_clr_line5 = $397060 +greet_clr_line4 = $397036 SP61_CONTROL_REG= $af0de8 SDMA_SRC_STRIDE_H= $af042d SDMA_SRC_STRIDE_L= $af042c FILE_SYSTEM = $38a001 SDC_TRANS_INIT_NO_ERR= $00 FDC_MSR_RQM = $80 -DRUMINS_LO_WDBLK= $3925e3 +DRUMINS_LO_WDBLK= $392635 FNX1_INT07_SDCARD= $80 INT_EDGE_REG3 = $00014b INT_EDGE_REG2 = $00014a INT_EDGE_REG1 = $000149 INT_EDGE_REG0 = $000148 -MIDI_INSTRUMENT_CHOIR= $3929c7 +MIDI_INSTRUMENT_CHOIR= $392a19 DOS_ERR_NOFAT32 = 3 -MIDIW31_INSTRUMENT_ACORDIAN= $393053 +MIDIW31_INSTRUMENT_ACORDIAN= $3930a5 JUMP_READY = $38ffe0 -IGETFIELD = $3916da +IGETFIELD = $39172c NES_SNES0_DAT_LO= $afe808 SP22_X_POS_H = $af0cb5 SP22_X_POS_L = $af0cb4 @@ -780,18 +783,19 @@ VOLUME_ID = $38a026 SP62_ADDY_PTR_M = $af0df2 SP62_ADDY_PTR_L = $af0df1 SP62_ADDY_PTR_H = $af0df3 +START_OF_CREDITS := $3b0000 SDMA_IGNORED = $af042b DOS_FILE_BUFFS = $38b000 HABORT = $38ff30 TEST_BUFFER = $030000 -DRUMINS_LO_TIMBA= $39255f +DRUMINS_LO_TIMBA= $3925b1 FDC_CMD_MFM = $40 GP11_REG = $af1124 -INSTRUMENT_SNRSUST= $391fe5 +INSTRUMENT_SNRSUST= $392037 KB_RESEND = $fe BIOS_BUFF_PTR = $000326 FNX1_INT02_COL1 = $04 -JOYSTICK_SET_NES_MODE= $395cd6 +JOYSTICK_SET_NES_MODE= $395d3b GP17_REG = $af112a ROOT_DIR_MAX_ENTRY= $38a024 SIGNED_DIV_NUM_LO= $00011a @@ -804,84 +808,84 @@ SIGNED_DIV_NUM_HI= $00011b SP54_ADDY_PTR_L = $af0db1 SP54_ADDY_PTR_M = $af0db2 SP54_ADDY_PTR_H = $af0db3 -IF_SUCCESS = $395980 -ISETSIZES = $390d78 +IF_SUCCESS = $3959d7 +ISETSIZES = $390db7 Vky_Cursor_FONT_Page0= $08 Vky_Cursor_FONT_Page1= $10 -ICMDBLOCK = $394129 -DRUMINS_S_GUIRO = $3925b3 +ICMDBLOCK = $39417b +DRUMINS_S_GUIRO = $392605 SP33_X_POS_H = $af0d0d SP33_X_POS_L = $af0d0c RAD_ISLASTCHAN = $000045 DOS_ERR_DIRFULL = 21 -IF_FREEFD = $395a6c -IGETBLOCK = $394153 +IF_FREEFD = $395ad1 +IGETBLOCK = $3941a5 SDC_VERSION_REG = $afea00 -IINITCODEC = $391332 +IINITCODEC = $391371 RTC_DAY = $af0806 DOS_ATTR_VOLUME = $08 -LOOP_MS_END = $391625 +LOOP_MS_END = $391677 GP1_REG = $af114b MOUSE_PTR_GRAP0_END= $af05ff GP3_REG = $af114d INITALLLUT = $0010c8 SP59_X_POS_H = $af0ddd SP59_X_POS_L = $af0ddc -OPL2_SET_DEEPTREMOLO= $393feb +OPL2_SET_DEEPTREMOLO= $39403d RAD_Y_POINTER = $000046 OPL2_CHANNEL = $000027 VECTOR_BRK = $38ffe6 -DOS_PARSE_PATH = $39493a -MIDI_INSTRUMENT_ORCHIT= $3929eb +DOS_PARSE_PATH = $39498c +MIDI_INSTRUMENT_ORCHIT= $392a3d RESTORE = $001004 -DRUMINS_COWBELL = $3924e7 -IF_FAILURE = $395975 +DRUMINS_COWBELL = $392539 +IF_FAILURE = $3959cc TL2_TOTAL_Y_SIZE_H= $af021f TL2_TOTAL_Y_SIZE_L= $af021e DOS_ERR_WRITEPROT= 19 RTC_ENABLE = $af080c -NEXTCLUSTER = $394bf7 -INSTRUMENT_MARIMBA2= $391ce3 -INSTRUMENT_MARIMBA1= $391ccd +NEXTCLUSTER = $394c4e +INSTRUMENT_MARIMBA2= $391d35 +INSTRUMENT_MARIMBA1= $391d1f SDMA_CTRL0_Enable= $01 RTC_MIN = $af0802 BOOT_MODE0 = $01 BOOT_MODE1 = $02 -MIDI_INSTRUMENT_BIRDS= $392d1b -MIDIW31_INSTRUMENT_VIOLA= $393143 +MIDI_INSTRUMENT_BIRDS= $392d6d +MIDIW31_INSTRUMENT_VIOLA= $393195 SP00_CONTROL_REG= $af0c00 -MIDIW31_INSTRUMENT_MELOTOM= $3934d3 -OPL2_Reset = $3937b3 +MIDIW31_INSTRUMENT_MELOTOM= $393525 +OPL2_Reset = $393805 VDMA_DST_STRIDE_L= $af040e VDMA_DST_STRIDE_H= $af040f DOS_ERR_READ = 1 -NOT_KB_CLR_RSHIFT= $38192d +NOT_KB_CLR_RSHIFT= 3676461 IDE_ERR_TKZNF = $02 -IINITTILEMODE = $390e62 -IDE_NOT_DRQ = $396c47 -MIDIW31_INSTRUMENT_ORCHIT= $3931eb -InitSuccess = $3911a4 -KB_CLR_ALT = $3819f2 -INSTRUMENT_TRIANGLE= $3921f5 +IINITTILEMODE = $390ea1 +IDE_NOT_DRQ = $396cac +MIDIW31_INSTRUMENT_ORCHIT= $39323d +InitSuccess = $3911e3 +KB_CLR_ALT = 3676658 +INSTRUMENT_TRIANGLE= $392247 DOS_CLUS_ID = $000330 KB_SCROLL_LOCK = $01 -CODEC_TRF_FINISHED= $3913c2 -MIDIW31_INSTRUMENT_STARTHEM= $39342b -MIDI_INSTRUMENT_BRIGHT= $392c07 +CODEC_TRF_FINISHED= $391414 +MIDIW31_INSTRUMENT_STARTHEM= $39347d +MIDI_INSTRUMENT_BRIGHT= $392c59 SDC_RX_FIFO_DATA_REG= $afea10 SDC_TRANS_INIT_CMD1_ERR= $02 VDMA_IGNORED = $af040b MOUSE_PTR_GRAP0_START= $af0500 FDC_DSR_LOPWR = $40 -OPL2_Set_DeepTremolo_Exit= $394013 +OPL2_Set_DeepTremolo_Exit= $394065 BPB_SIGNATUREB = 38 GRPH_LUT1_PTR = $af2400 UART_TRHB = $00 -MIDI_INSTRUMENT_HONKTONK= $39277b +MIDI_INSTRUMENT_HONKTONK= $3927cd SP11_Y_POS_L = $af0c5e SP11_Y_POS_H = $af0c5f -MIDI_INSTRUMENT_TRUMPET= $3929f7 -KB_SET_SHIFT = $3819c5 +MIDI_INSTRUMENT_TRUMPET= $392a49 +KB_SET_SHIFT = 3676613 SPRITE_DEPTH6 = $60 SPRITE_DEPTH4 = $40 SPRITE_DEPTH5 = $50 @@ -889,48 +893,48 @@ SPRITE_DEPTH2 = $20 SPRITE_DEPTH3 = $30 SPRITE_DEPTH0 = $00 SPRITE_DEPTH1 = $10 -INSTRUMENT_ELECFL= $391947 +INSTRUMENT_ELECFL= $391999 VDMA_X_SIZE_H = $af0409 VDMA_X_SIZE_L = $af0408 -OPL2_SET_SUSTAIN= $393df2 +OPL2_SET_SUSTAIN= $393e44 MCMDADDR = $000250 -INSTRUMENT_CLARINET= $3918c3 -INSTRUMENT_CELESTA= $391881 -FONT_4_BANK1 = $3ff800 -FONT_4_BANK0 = $3ff000 +INSTRUMENT_CLARINET= $391915 +INSTRUMENT_CELESTA= $3918d3 +FONT_4_BANK1 = $3f0800 +FONT_4_BANK0 = $3f0000 DOS_SECTOR_SIZE = 512 DIVISOR = $000310 FDC_DEVCMD_MOTOR_ON= 1 -ISETTIMEOUT = $394103 +ISETTIMEOUT = $394155 KEY_BUFFER_WPOS = $000f8d -MIDIW31_INSTRUMENT_VIOLIN= $393137 +MIDIW31_INSTRUMENT_VIOLIN= $393189 TL0_WINDOW_X_POS_H= $af0209 TL0_WINDOW_X_POS_L= $af0208 FEEDBACK = $0e BPB_RSRVCLUS_OFF= 14 TL3_TOTAL_X_SIZE_L= $af0228 TL3_TOTAL_X_SIZE_H= $af0229 -NOT_PREFIXED = $381950 +NOT_PREFIXED = 3676496 SP36_ADDY_PTR_L = $af0d21 SP36_ADDY_PTR_M = $af0d22 SP36_ADDY_PTR_H = $af0d23 -MIDIW31_INSTRUMENT_MUTEGT= $3930a7 -MIDI_INSTRUMENT_TUBEBELL= $3927ff +MIDIW31_INSTRUMENT_MUTEGT= $3930f9 +MIDI_INSTRUMENT_TUBEBELL= $392851 BOOT_DIP = $39059a PART0_OFF = 446 VDMA_Y_SIZE_L = $af040a VDMA_Y_SIZE_H = $af040b -INSTRUMENT_TUBA1= $39228f -boot_retry = $3971c7 +INSTRUMENT_TUBA1= $3922e1 +boot_retry = $39722c MOUSE_PTR = $0000e0 -OPL2_GET_SUSTAIN= $393e1b +OPL2_GET_SUSTAIN= $393e6d RTC_FLAGS = $af080d HNMI = $38ff40 -MIDI_INSTRUMENT_KALIMBA= $392c67 +MIDI_INSTRUMENT_KALIMBA= $392cb9 RVECTOR_IRQ = $38ffee -OPL2_GET_VIBRATO= $393c1a +OPL2_GET_VIBRATO= $393c6c ISETIN = $390706 -OPL2_SET_TREMOLO= $393bab +OPL2_SET_TREMOLO= $393bfd SP43_Y_POS_L = $af0d5e SP43_Y_POS_H = $af0d5f TL1_START_ADDY_H= $af020f @@ -940,22 +944,22 @@ KEY_SCALE = $c0 KB_CTRL_C = $80 LSR_XMIT_DONE = $40 F_DIRREAD = $001110 -BMP_LUT2_PICK = $39147e -FDC_CMDBLOCK = $3968d1 -IF_LOADPGX = $3957a2 +BMP_LUT2_PICK = $3914d0 +FDC_CMDBLOCK = $396936 +IF_LOADPGX = $3957f9 SP43_CONTROL_REG= $af0d58 FDC_ST2_DD = $20 GABE_SYS_STAT_CPUA= $40 GABE_SYS_STAT_CPUX= $80 SMI_EN2_REG = $af1117 -MIDI_INSTRUMENT_OVERDGT= $3928b3 -MIDIW31_INSTRUMENT_XYLO= $392ff3 -MIDIW31_INSTRUMENT_CLEANGT= $39309b +MIDI_INSTRUMENT_OVERDGT= $392905 +MIDIW31_INSTRUMENT_XYLO= $393045 +MIDIW31_INSTRUMENT_CLEANGT= $3930ed VKY_TXT_CURSOR_X_REG_H= $af0015 VKY_TXT_CURSOR_X_REG_L= $af0014 FDC_CMD_WRITE_DELETED_DATA= 9 FDC_ST2_BC = $02 -MIDIW31_INSTRUMENT_HALOPAD= $3933bf +MIDIW31_INSTRUMENT_HALOPAD= $393411 FDC_ST2_CM = $40 SECTORCOUNT = $38a008 DOS_MOUNT_DEV = $38a050 @@ -966,33 +970,33 @@ BPB_ROOT_MAX_ENTRY12_OFF= 17 F_OPEN = $0010f0 SP56_CONTROL_REG= $af0dc0 VEC_INT00_SOF = $001700 -MIDI_INSTRUMENT_VIBES= $3927db +MIDI_INSTRUMENT_VIBES= $39282d DOS_SRC_PTR = $000350 BIOS_ERR_NOTINIT= $8b -pass_tst0xABmsg = $3970be +pass_tst0xABmsg = $397123 F_DELETE = $001104 -MIDI_INSTRUMENT_POLYSYN= $392b8f +MIDI_INSTRUMENT_POLYSYN= $392be1 CPU_REGISTERS = $000240 FDC_ST2_WC = $10 UART2_FIFO_CTRL_SHDW= $af1121 -IRESETCODEC = $3913ae +IRESETCODEC = $391400 GP40_REG = $af113b SP14_ADDY_PTR_H = $af0c73 SP14_ADDY_PTR_L = $af0c71 SP14_ADDY_PTR_M = $af0c72 TILESET6_ADDY_CFG= $af029b -SET_KEYON_OFF = $393f69 +SET_KEYON_OFF = $393fbb IIR_FIFO_64BYTE = $20 SCRN_X_STRIDE = $00004e -IGETCH = $390748 -NOT_KB_SET_LSHIFT= $381918 +IGETCH = $390754 +NOT_KB_SET_LSHIFT= 3676440 GP56_REG = $af1145 TIMER_CTRL_REGLL= $000160 TIMER_CTRL_REGLH= $000161 TMR1_EN = $01 TILESET2_ADDY_CFG= $af028b -INSTRUMENT_PHONE2= $391e01 -INSTRUMENT_PHONE1= $391deb +INSTRUMENT_PHONE2= $391e53 +INSTRUMENT_PHONE1= $391e3d DOS_ATTR_HIDDEN = $02 GABE_CTRL_SDC_LED= $02 TILE_Collision_On= $40 @@ -1000,25 +1004,25 @@ F_SAVE = $00111c MOUSE_POINTER_PTR= $397900 TIMER_CTRL_REGHH= $000163 TIMER_CTRL_REGHL= $000162 -INSTRUMENT_BASSOON1= $3917bb +INSTRUMENT_BASSOON1= $39180d SP38_ADDY_PTR_H = $af0d33 SP38_ADDY_PTR_L = $af0d31 SP38_ADDY_PTR_M = $af0d32 -KB_CHECK_B_DONE = $381a27 -KB_CLR_CTRL = $3819e0 +KB_CHECK_B_DONE = 3676711 +KB_CLR_CTRL = 3676640 BOOT = $001000 VECTOR_ERESET = $38fffc -MIDIW31_INSTRUMENT_SQUARWAV= $393317 -MIDIW31_INSTRUMENT_SHANNAI= $39348b +MIDIW31_INSTRUMENT_SQUARWAV= $393369 +MIDIW31_INSTRUMENT_SHANNAI= $3934dd Unused_FF80 = $38ff80 NES_SNES1_DAT_LO= $afe80a CFP9301_REV = $afe80c SDC_TX_FIFO_DATA_REG= $afea20 LSR_ERR_FRAME = $08 -MIDI_INSTRUMENT_DISTGT= $3928bf +MIDI_INSTRUMENT_DISTGT= $392911 DOS_FILE_SIZE = $00034c -INSTRUMENT_SHRTVIBE= $391f77 -MIDI_INSTRUMENT_BASSLEAD= $392b6b +INSTRUMENT_SHRTVIBE= $391fc9 +MIDI_INSTRUMENT_BASSLEAD= $392bbd BIOS_ERR_WRITEPROT= $86 SP63_Y_POS_L = $af0dfe SP63_Y_POS_H = $af0dff @@ -1032,52 +1036,52 @@ VDMA_STAT_Src_Add_Err= $04 BIOS_FLAGS = $00032c SID0_OSC3_RND = $afe41b LSR_ERR_RECIEVE = $80 -MIDI_INSTRUMENT_SOUNDTRK= $392be3 +MIDI_INSTRUMENT_SOUNDTRK= $392c35 SP06_ADDY_PTR_H = $af0c33 SP06_ADDY_PTR_M = $af0c32 SP06_ADDY_PTR_L = $af0c31 DOS_NEXT_CLUS = $38a02e KB_MENU = $f1 F_MOUNT = $001128 -IF_DIRNEXT = $39563c +IF_DIRNEXT = $395693 OPL2_OPERATOR = $000026 -DRUMINS_LO_AGOGO= $392577 -INSTRUMENT_HARP3= $391b41 -INSTRUMENT_HARP2= $391b2b -INSTRUMENT_HARP1= $391b15 -INSTRUMENT_TINCAN1= $39219d +DRUMINS_LO_AGOGO= $3925c9 +INSTRUMENT_HARP3= $391b93 +INSTRUMENT_HARP2= $391b7d +INSTRUMENT_HARP1= $391b67 +INSTRUMENT_TINCAN1= $3921ef TARGET_RAM = 2 -DRUMINS_SNARE_EL= $392427 +DRUMINS_SNARE_EL= $392479 BPB_TOTAL_SECTORS= 19 -ILOCATE = $390a1b +ILOCATE = $390a5a KB_ACK = $fa SP48_X_POS_L = $af0d84 SP48_X_POS_H = $af0d85 -DRUMINS_SNARE_AC= $39240f +DRUMINS_SNARE_AC= $392461 DOS_FD_PTR = $000340 -OPL2_TONE_TESTING_L2= $393786 -OPL2_TONE_TESTING_L1= $393766 +OPL2_TONE_TESTING_L2= $3937d8 +OPL2_TONE_TESTING_L1= $3937b8 SP33_CONTROL_REG= $af0d08 SP26_X_POS_L = $af0cd4 SP26_X_POS_H = $af0cd5 -FDC_Motor_Off = $3962c5 +FDC_Motor_Off = $39632a DOS_ERR_NODIR = 8 -CODEC_LOOP = $3913c4 -icsrdown_noscroll= $390a13 -OPL2_GET_FEEDBACK= $393874 +CODEC_LOOP = $391416 +icsrdown_noscroll= $390a52 +OPL2_GET_FEEDBACK= $3938c6 KB_RESET = $ff FD_STAT_ALLOC = $10 SDMA_SIZE_H = $af042a SDMA_SIZE_M = $af0429 SDMA_SIZE_L = $af0428 -ilocate_scroll = $390a2a +ilocate_scroll = $390a69 BIOS_DEV_FD1 = 1 BIOS_DEV_FDC = 0 CSRHOME = $0010a0 VEC_INT02_TMR0 = $001708 -Poll_Inbuf = $3911b1 +Poll_Inbuf = $3911f0 BPB_BYTEPERSEC_OFF= 11 -KB_UNPRESSED = $381972 +KB_UNPRESSED = 3676530 TMR1_CMP_RELOAD = $02 SP42_ADDY_PTR_H = $af0d53 SP42_ADDY_PTR_M = $af0d52 @@ -1085,7 +1089,7 @@ SP42_ADDY_PTR_L = $af0d51 Mstr_Ctrl_Text_Overlay= $02 UART2_BASE = $af12f8 IIR_TIMEOUT = $0c -DRUMINS_LO_TOMS = $392433 +DRUMINS_LO_TOMS = $392485 DOS_DIR_CLUSTER = $38a100 TILE_Enable = $01 SP33_ADDY_PTR_M = $af0d0a @@ -1095,14 +1099,14 @@ SP11_CONTROL_REG= $af0c58 DOS_FILE_DESCS = 3714336 GP4_REG = $af114e VDMA_CTRL_SysRAM_Dst= $20 -MIDIW31_INSTRUMENT_SITAR= $393437 -Poll_Outbuf = $3911bc +MIDIW31_INSTRUMENT_SITAR= $393489 +Poll_Outbuf = $3911fb SP31_CONTROL_REG= $af0cf8 -SDC_TEST = $395d4b -INSTRUMENT_FLUTE= $391a39 +SDC_TEST = $395db0 +INSTRUMENT_FLUTE= $391a8b SP28_Y_POS_H = $af0ce7 SP28_Y_POS_L = $af0ce6 -MIDI_INSTRUMENT_VIOLA= $392943 +MIDI_INSTRUMENT_VIOLA= $392995 SDMA_CTRL0_Start_TRF= $80 LOCATE = $001084 GABE_MSTR_CTRL = $afe880 @@ -1111,15 +1115,15 @@ SP03_X_POS_H = $af0c1d SP03_X_POS_L = $af0c1c TMR0_SLOAD = $04 TILESET5_ADDY_CFG= $af0297 -MIDIW31_INSTRUMENT_OOHS= $3931d3 -FDC_GETBLOCK = $3966d6 +MIDIW31_INSTRUMENT_OOHS= $393225 +FDC_GETBLOCK = $39673b VDMA_CTRL_SysRAM_Src= $10 SDMA_CTRL1_IO_Dst16= $08 KERNEL_JMP_END = $001fff TIMER0_CTRL_REG = $000160 MONITOR_VARS = $000250 RVECTOR_EIRQ = $38fffe -MIDIW31_INSTRUMENT_SYNCALLI= $39332f +MIDIW31_INSTRUMENT_SYNCALLI= $393381 VDMA_CTRL_Enable= $01 SP21_ADDY_PTR_H = $af0cab SP21_ADDY_PTR_L = $af0ca9 @@ -1128,7 +1132,7 @@ BPB_SECPERFAT12_OFF= 22 FNX3_INT03_TBD = $08 UART_4800 = 24 SIGNED_MULT_AH_HI= $00010f -KB_TOG_SCRLOCK = $381a04 +KB_TOG_SCRLOCK = 3676676 VEC_INT04_TMR2 = $001710 SIGNED_MULT_AH_LO= $00010e TIMER0_CMP_H = $000167 @@ -1139,51 +1143,51 @@ CPUPBR = $000242 MOUSE_POS_X_HI = $0000e2 MCMP_TEXT = $000253 FAN_CTRL_REG = $af1158 -IDE_PUTBLOCK = $396d75 +IDE_PUTBLOCK = $396dda FDC_ST0 = $000306 FDC_ST1 = $000307 FDC_ST2 = $000308 FDC_ST3 = $000309 -MIDIW31_INSTRUMENT_TIMPANI= $39318b +MIDIW31_INSTRUMENT_TIMPANI= $3931dd VDMA_STAT_VDMA_IPS= $80 -DOS_INIT = $394482 +DOS_INIT = $3944d4 MOUSE_POS_X_LO = $0000e1 PME_STS3_REG = $af1106 -MIDI_INSTRUMENT_CELESTA= $3927b7 -MIDI_INSTRUMENT_SLAPBAS1= $392907 -MIDI_INSTRUMENT_SLAPBAS2= $392913 +MIDI_INSTRUMENT_CELESTA= $392809 +MIDI_INSTRUMENT_SLAPBAS1= $392959 +MIDI_INSTRUMENT_SLAPBAS2= $392965 SP20_X_POS_H = $af0ca5 SP20_X_POS_L = $af0ca4 PR_BOOT_ERROR = $390605 -error_01 = $397270 -CHECK_PENDING_REG1= $38179b +error_01 = $3972d5 +CHECK_PENDING_REG1= 3676059 DIP_BOOT_BASIC = $03 TIMER1_CTRL_REG = $000168 -DRUMINS_HI_TIMBA= $392553 +DRUMINS_HI_TIMBA= $3925a5 FNX3_INT00_OPN2 = $01 DOS_ATTR_RO = $01 KB_PR_LED = $40 FNX2_INT06_EXT = $40 -IIOINIT = $3916d2 -DRUMINS_RIDE_CY = $3924ab +IIOINIT = $391724 +DRUMINS_RIDE_CY = $3924fd SP38_CONTROL_REG= $af0d30 UNSIGNED_MULT_AL_HI= $000105 -IRQ_HANDLER_FETCH= $3818f1 +IRQ_HANDLER_FETCH= 3676401 RAD_LINE = $000042 SDC_TRANS_BUSY = $01 UNSIGNED_MULT_AL_LO= $000104 GP2_REG = $af114c GRPH_LUT4_PTR = $af3000 SMI_EN5_REG = $af111a -JOYSTICK_POLLING_ISNOTOVER= $395d40 +JOYSTICK_POLLING_ISNOTOVER= $395da5 OPL2_IND_ADDY_LL= $00002c SP16_X_POS_H = $af0c85 SP16_X_POS_L = $af0c84 SP04_ADDY_PTR_M = $af0c22 SP04_ADDY_PTR_L = $af0c21 SP04_ADDY_PTR_H = $af0c23 -IF_COPY2BUFF = $3958a5 -ICSRRIGHT = $390977 +IF_COPY2BUFF = $3958fc +ICSRRIGHT = $3909b6 SDMA_STAT_Src_Add_Err= $04 FDC_CMD_SENSE_DRIVE_STATUS= 4 OPL2_IND_ADDY_HL= $00002e @@ -1194,27 +1198,27 @@ TRIM = $001060 PME_STS1_REG = $af1104 DOS_ERR_FATUPDATE= 20 SID0_V2_PW_LO = $afe409 -MIDIW31_INSTRUMENT_TUBEBELL= $392fff +MIDIW31_INSTRUMENT_TUBEBELL= $393051 TL2_TOTAL_X_SIZE_L= $af021c TL2_TOTAL_X_SIZE_H= $af021d -BM_FILL_SCREEN_LOOPY= $3913d9 -BM_FILL_SCREEN_LOOPX= $3913de -MIDI_INSTRUMENT_FRETLESS= $3928fb +BM_FILL_SCREEN_LOOPY= $39142b +BM_FILL_SCREEN_LOOPX= $391430 +MIDI_INSTRUMENT_FRETLESS= $39294d FDC_DSR_RESET = $80 DOS_PATH_BUFF = $000400 SP60_Y_POS_L = $af0de6 SP60_Y_POS_H = $af0de7 -drumOffsets = $391710 +drumOffsets = $391762 FDC_ST0_INTCODE = $c0 -DOS_RTCCREATE = $39514e +DOS_RTCCREATE = $3951a5 SP08_ADDY_PTR_H = $af0c43 SP08_ADDY_PTR_M = $af0c42 SP08_ADDY_PTR_L = $af0c41 UINT_THR_EMPTY = $02 -MIDI_INSTRUMENT_REEDORG= $392847 +MIDI_INSTRUMENT_REEDORG= $392899 SP27_CONTROL_REG= $af0cd8 UART_57600 = 2 -DELCLUSTER = $394f32 +DELCLUSTER = $394f89 FNX3_INT05_TBD = $20 GP27_REG = $af1132 SP49_ADDY_PTR_L = $af0d89 @@ -1225,11 +1229,11 @@ DOS_FILE_DESCS_END= 3714592 SIGNED_DIV_DEM_LO= $000118 SP44_X_POS_H = $af0d65 SP44_X_POS_L = $af0d64 -DRUMINS_BASS_DR1= $3923f7 -DRUMINS_BASS_DR2= $3923eb +DRUMINS_BASS_DR1= $392449 +DRUMINS_BASS_DR2= $39243d SIGNED_DIV_DEM_HI= $000119 -SET_LED = $381a34 -MIDIW31_INSTRUMENT_BAGPIPE= $393473 +SET_LED = 3676724 +MIDIW31_INSTRUMENT_BAGPIPE= $3934c5 SP54_Y_POS_L = $af0db6 SP54_Y_POS_H = $af0db7 LCR_PARITY_ODD = $08 @@ -1238,25 +1242,25 @@ DOS_ATTR_ARCH = $20 TL3_WINDOW_Y_POS_L= $af022e TL3_WINDOW_Y_POS_H= $af022f OPL3_L_BASE_HL = $00af -INSTRUMENT_OBOE1= $391d51 -ISCRGETWORD = $3916e4 -FDC_READ2FAT12 = $394d3b +INSTRUMENT_OBOE1= $391da3 +ISCRGETWORD = $391736 +FDC_READ2FAT12 = $394d92 DRUM_TOM = $04 -MIDIW31_INSTRUMENT_CONTRAB= $39315b -IOPL2_TONE_TEST = $39375f -MIDIW31_INSTRUMENT_MUSICBOX= $392fcf +MIDIW31_INSTRUMENT_CONTRAB= $3931ad +IOPL2_TONE_TEST = $3937b1 +MIDIW31_INSTRUMENT_MUSICBOX= $393021 IDE_STAT_DRQ = $08 IDE_STAT_DSC = $10 PME_STS_REG = $af1100 -COPYBYTES42 = $390b6d +COPYBYTES42 = $390bac DOS_ERR_NOTFOUND= 9 VDMA_DST_ADDY_M = $af0406 VDMA_DST_ADDY_L = $af0405 VDMA_DST_ADDY_H = $af0407 GRPH_LUT0_PTR = $af2000 -MIDIW31_INSTRUMENT_SWEEPPAD= $3933cb +MIDIW31_INSTRUMENT_SWEEPPAD= $39341d DECAY_RT = $0f -INSTRUMENT_RKSNARE1= $391f09 +INSTRUMENT_RKSNARE1= $391f5b SYS_FLAG = $04 RAD_TICK = $000048 SP22_Y_POS_H = $af0cb7 @@ -1266,12 +1270,12 @@ ScanCode_Press_Set1= $397300 CURCOLOR = $00001e OPL2_NOTE = $000030 SDC_RX_FIFO_DATA_CNT_LO= $afea13 -MIDI_INSTRUMENT_WARMPAD= $392b83 +MIDI_INSTRUMENT_WARMPAD= $392bd5 GABE_RST_AUTH0 = $afe882 GABE_RST_AUTH1 = $afe883 CURRUART = $000700 -SHOW_CREDITS = $39168b -IDE_DRIVE_READY = $396c21 +SHOW_CREDITS = $3916dd +IDE_DRIVE_READY = $396c86 SDC_RX_FIFO_DATA_CNT_HI= $afea12 SP12_CONTROL_REG= $af0c60 IIR_DATA_AVAIL = $04 @@ -1279,44 +1283,44 @@ CHAR_RIGHT = $1d SP62_CONTROL_REG= $af0df0 KEY_BUFFER_RPOS = $000f8b COMMAND_SIZE_STR= $000f84 -MIDIW31_INSTRUMENT_PICCOLO= $3932b7 -ISCINIT = $3916d1 +MIDIW31_INSTRUMENT_PICCOLO= $393309 +ISCINIT = $391723 SDMA_CTRL1_IO_Src= $01 -IINITVKYTXTMODE = $390d1e +IINITVKYTXTMODE = $390d5d SP12_ADDY_PTR_L = $af0c61 SP12_ADDY_PTR_M = $af0c62 SP12_ADDY_PTR_H = $af0c63 -FDC_TEST_PUTBLOCK= $395f7c +FDC_TEST_PUTBLOCK= $395fe1 SP40_Y_POS_L = $af0d46 SP40_Y_POS_H = $af0d47 IDE_ERR_ABRT = $04 -savechar = $3819b9 -NOT_KB_SET_NUM = $381957 -MIDIW31_INSTRUMENT_ORGAN1= $393017 -MIDIW31_INSTRUMENT_ORGAN3= $39302f -MIDIW31_INSTRUMENT_ORGAN2= $393023 -INSTRUMENT_STEELGT1= $392011 -INSTRUMENT_STEELGT2= $392027 -MIDIW31_INSTRUMENT_REEDORG= $393047 +savechar = 3676601 +NOT_KB_SET_NUM = 3676503 +MIDIW31_INSTRUMENT_ORGAN1= $393069 +MIDIW31_INSTRUMENT_ORGAN3= $393081 +MIDIW31_INSTRUMENT_ORGAN2= $393075 +INSTRUMENT_STEELGT1= $392063 +INSTRUMENT_STEELGT2= $392079 +MIDIW31_INSTRUMENT_REEDORG= $393099 DOS_SCRATCH = $00036b -INSTRUMENT_ACCORDN= $391721 +INSTRUMENT_ACCORDN= $391773 GABE_RNG_LFSR_DONE= $80 -KB_CLR_SHIFT = $3819ce -OPL2_Set_WaveFormSelect_set= $393b99 +KB_CLR_SHIFT = 3676622 +OPL2_Set_WaveFormSelect_set= $393beb KBD_DATA_BUF = $af1060 -DRUMINS_HI_WDBLK= $3925d7 +DRUMINS_HI_WDBLK= $392629 DOS_SPARE_FD = $38ad00 BIOS_TIMER = $00032d PUSHKEYS = $00108c F_CLOSE = $0010f8 -MIDI_INSTRUMENT_REVRSCYM= $392ceb -BMP_PARSER_LOOPX= $39159f -BMP_PARSER_LOOPY= $39159a +MIDI_INSTRUMENT_REVRSCYM= $392d3d +BMP_PARSER_LOOPX= $3915f1 +BMP_PARSER_LOOPY= $3915ec GP51_REG = $af1140 SP32_X_POS_H = $af0d05 SP32_X_POS_L = $af0d04 VIBRATO = $40 -ISETNAM = $3916d4 +ISETNAM = $391726 PME_EN2_REG = $af110b IDE_SECT_CNT = $afe832 INITCHLUT = $0010ac @@ -1326,20 +1330,20 @@ FDC_DOR_MOT0 = $10 FDC_DOR_MOT1 = $20 INT_CONTROLLER = $000140 SP51_CONTROL_REG= $af0d98 -IF_READ = $395531 +IF_READ = $395588 TMR1_UPDWN = $08 SP14_Y_POS_H = $af0c77 SP14_Y_POS_L = $af0c76 PME_EN4_REG = $af110d -initgammaloop = $390c43 -MIDI_INSTRUMENT_KOTO= $392c5b +initgammaloop = $390c82 +MIDI_INSTRUMENT_KOTO= $392cad SDMA_CTRL1_IO_Dst= $04 IIR_INTERRUPT_PENDING= $01 SID0_V3_SSTN_RLSE= $afe414 RTC_MIN_ALARM = $af0803 FDC_WAIT_TIME = 30 -UART_PUTC = $395ca2 -UART_PUTS = $395cc5 +UART_PUTC = $395d07 +UART_PUTS = $395d2a SP33_Y_POS_H = $af0d0f SP33_Y_POS_L = $af0d0e Mstr_Ctrl_Sprite_En= $20 @@ -1347,16 +1351,16 @@ SDMA_XFER_SRAM2VRAM= $10 Mstr_Ctrl_Video_Mode1= $02 Mstr_Ctrl_Video_Mode0= $01 IIR_THR_EMPTY = $02 -MIDIW31_INSTRUMENT_SHAKU= $3932f3 +MIDIW31_INSTRUMENT_SHAKU= $393345 LOADFILE_TYPE = $00030a -MIDIW31_INSTRUMENT_KOTO= $39345b +MIDIW31_INSTRUMENT_KOTO= $3934ad SP19_ADDY_PTR_H = $af0c9b SP19_ADDY_PTR_M = $af0c9a SP19_ADDY_PTR_L = $af0c99 -INSTRUMENT_ORGAN3B= $391dbf -INSTRUMENT_ORGAN3A= $391da9 -BMP_PARSER_UPDATE_LUT1= $391567 -BMP_PARSER_UPDATE_LUT0= $391537 +INSTRUMENT_ORGAN3B= $391e11 +INSTRUMENT_ORGAN3A= $391dfb +BMP_PARSER_UPDATE_LUT1= $3915b9 +BMP_PARSER_UPDATE_LUT0= $391589 SDMA_X_SIZE_L = $af0428 SDMA_X_SIZE_H = $af0429 SP46_ADDY_PTR_M = $af0d72 @@ -1369,107 +1373,108 @@ SP32_ADDY_PTR_L = $af0d01 SP32_ADDY_PTR_M = $af0d02 SP16_Y_POS_H = $af0c87 SP16_Y_POS_L = $af0c86 -OPL2_GET_SYNTHMODE= $3938a4 +OPL2_GET_SYNTHMODE= $3938f6 NES_SNES_DONE = $40 CHAR_TAB = $09 chk_b_lc = $390622 SP57_ADDY_PTR_M = $af0dca SP57_ADDY_PTR_L = $af0dc9 SP57_ADDY_PTR_H = $af0dcb -FDC_Specify_Command= $39638e +FDC_Specify_Command= $3963f3 GP32_REG = $af1135 -SDC_GETBLOCK = $395df3 -DRUMINS_SCRATCH1= $3923a3 -DRUMINS_SCRATCH2= $3923af +SDC_GETBLOCK = $395e58 +DRUMINS_SCRATCH1= $3923f5 +DRUMINS_SCRATCH2= $392401 SETLFS = $001028 SP20_Y_POS_H = $af0ca7 SP20_Y_POS_L = $af0ca6 FNX2_INT07_SDCARD_INS= $80 DOS_STATUS = $00032e -IF_RUN = $39598d -MIDIW31_INSTRUMENT_BRIGHT= $393407 -MIDI_INSTRUMENT_BANJO= $392c43 -OPL2_Get_Register_Offset_l0= $3940c7 +IF_RUN = $3959e4 +MIDIW31_INSTRUMENT_BRIGHT= $393459 +MIDI_INSTRUMENT_BANJO= $392c95 +OPL2_Get_Register_Offset_l0= $394119 TESTSID = $0010b8 SP46_Y_POS_H = $af0d77 SP46_Y_POS_L = $af0d76 -IF_SAVE = $3958f4 -MIDIW31_INSTRUMENT_TUBA= $39320f +IF_SAVE = $39594b +MIDIW31_INSTRUMENT_TUBA= $393261 SIO_FDC_TSR = $af13f3 TIMER2TRIGGER = $20 -EXIT_FOR_NEXT_VALUE= $381896 -MOUSE_WRITE = $39122d +EXIT_FOR_NEXT_VALUE= 3676310 +MOUSE_WRITE = $39126c FLOPPY_DATA_RATE= $af111f UART_LSR = $05 SP21_CONTROL_REG= $af0ca8 -MIDIW31_INSTRUMENT_SYNDRUM= $3934df -MIDI_INSTRUMENT_TINKLBEL= $392c97 +MIDIW31_INSTRUMENT_SYNDRUM= $393531 +MIDI_INSTRUMENT_TINKLBEL= $392ce9 TIMER1_CMP_L = $00016d TIMER1_CMP_M = $00016e TIMER1_CMP_H = $00016f UINT_MODEM_STATUS= $08 -MIDI_INSTRUMENT_FIFTHSAW= $392b5f +MIDI_INSTRUMENT_FIFTHSAW= $392bb1 SMI_EN3_REG = $af1118 -DRUMINS_LO_BONGO= $392523 -LOAD_TYPE_TABLE = $39579b -OPL2_Set_Percussion_Exit= $394065 -CHK_LSHIFT = $38190f +DRUMINS_LO_BONGO= $392575 +LOAD_TYPE_TABLE = $3957f2 +OPL2_Set_Percussion_Exit= $3940b7 +CHK_LSHIFT = 3676431 LCR_SBE = $60 KEY_BUFFER = $000f00 SDCARD_FILE_PTR = $000038 -OPL2_Get_WaveForm= $39394e +OPL2_Get_WaveForm= $3939a0 FNX2_INT00_OPL3 = $01 SP58_CONTROL_REG= $af0dd0 -JOYSTICK_NES_SNES_TRIG_WITH_POLL= $395d2a -IF_WRITE = $395596 +JOYSTICK_NES_SNES_TRIG_WITH_POLL= $395d8f +IF_WRITE = $3955ed UNSIGNED_MULT_B_LO= $000102 UART_LCR = $03 -ISCRREADLINE = $3916e3 -INSTRUMENT_MDRNPHON= $391cf9 -FDC_Can_Read_Data= $396057 +ISCRREADLINE = $391735 +INSTRUMENT_MDRNPHON= $391d4b +FDC_Can_Read_Data= $3960bc UNSIGNED_MULT_B_HI= $000103 KEY_BUFFER_SIZE = $0080 PUSHKEY = $001088 DOS_ERR_NOTOPEN = 12 -BMP_PARSER_COMPUTE_Y_DST= $3915cf +BMP_PARSER_COMPUTE_Y_DST= $391621 DOS_DST_PTR = $000354 -INSTRUMENT_BELSHORT= $391829 -MIDIW31_INSTRUMENT_TRUMPET= $3931f7 +INSTRUMENT_BELSHORT= $39187b +MIDIW31_INSTRUMENT_TRUMPET= $393249 SP51_Y_POS_H = $af0d9f SP51_Y_POS_L = $af0d9e -MIDIW31_INSTRUMENT_SOLOVOX= $393353 -MIDI_INSTRUMENT_ENGLHORN= $392a93 +MIDIW31_INSTRUMENT_SOLOVOX= $3933a5 +MIDI_INSTRUMENT_ENGLHORN= $392ae5 FDC_CMD_READ_TRACK= 2 -INSTRUMENT_JAZZGUIT= $391c33 -KERNEL_DATA = $396e0e +INSTRUMENT_JAZZGUIT= $391c85 +KERNEL_DATA = $396e73 SP09_X_POS_H = $af0c4d SP09_X_POS_L = $af0c4c PME_STS4_REG = $af1107 SP31_X_POS_H = $af0cfd SP31_X_POS_L = $af0cfc KBD_INPT_BUF = $af1060 -BMP_PARSER_END_NO_ERROR= $391532 +BMP_PARSER_END_NO_ERROR= $391584 +START_OF_BASIC := $3a0000 FD_STAT_EOF = $80 SDC_TRANS_RD_TOKEN_ERR= $08 BM1_Y_OFFSET = $af010d -MIDIW31_INSTRUMENT_FLUTE1= $3932c3 +MIDIW31_INSTRUMENT_FLUTE1= $393315 BIOS_ERR_BADDEV = $80 SP03_Y_POS_H = $af0c1f SP03_Y_POS_L = $af0c1e -instrumentBaseRegs= $39171b -INSTRUMENT_CBASSOON= $39186b +instrumentBaseRegs= $39176d +INSTRUMENT_CBASSOON= $3918bd SP44_Y_POS_H = $af0d67 SP44_Y_POS_L = $af0d66 GP24_REG = $af112f -MIDIW31_INSTRUMENT_APPLAUSE= $39353f -KB_WR_2_SCREEN = $3819b2 -INSTRUMENT_BELLONG= $3917fd -INSTRUMENT_PIANOF= $391edd -INSTRUMENT_PIANO2= $391e85 -INSTRUMENT_PIANO3= $391e9b -INSTRUMENT_PIANO1= $391e6f -INSTRUMENT_PIANO4= $391eb1 -FDC_Motor_On = $396291 +MIDIW31_INSTRUMENT_APPLAUSE= $393591 +KB_WR_2_SCREEN = 3676594 +INSTRUMENT_BELLONG= $39184f +INSTRUMENT_PIANOF= $391f2f +INSTRUMENT_PIANO2= $391ed7 +INSTRUMENT_PIANO3= $391eed +INSTRUMENT_PIANO1= $391ec1 +INSTRUMENT_PIANO4= $391f03 +FDC_Motor_On = $3962f6 GP22_REG = $af112d BIOS_ERR_READ = $82 SP20_CONTROL_REG= $af0ca0 @@ -1477,7 +1482,7 @@ BORDER_CTRL_REG = $af0004 GP20_REG = $af112b SP63_X_POS_L = $af0dfc SP63_X_POS_H = $af0dfd -MOUSE_READ = $391240 +MOUSE_READ = $39127f UART_FCR = $02 SP42_X_POS_L = $af0d54 SP42_X_POS_H = $af0d55 @@ -1490,28 +1495,28 @@ IDE_STAT_CORR = $04 SP57_X_POS_L = $af0dcc SP57_X_POS_H = $af0dcd SP08_CONTROL_REG= $af0c40 -OPL2_GET_MAINTAINSUSTAIN= $393c5f -DOS_READFILE = $394a72 +OPL2_GET_MAINTAINSUSTAIN= $393cb1 +DOS_READFILE = $394ac9 SID0_V3_PW_HI = $afe411 -MIDI_INSTRUMENT_SHAKU= $392af3 -DOS_SRC2DST = $395a90 -MIDI_INSTRUMENT_FINGBASS= $3928e3 +MIDI_INSTRUMENT_SHAKU= $392b45 +DOS_SRC2DST = $395af5 +MIDI_INSTRUMENT_FINGBASS= $392935 SID0_V3_PW_LO = $afe410 F_WRITE = $0010fc -NMI_HANDLER = $3818d5 -SDC_PUTBLOCK = $395e93 +NMI_HANDLER = 3676373 +SDC_PUTBLOCK = $395ef8 OPL2_ADDY_PTR_HI= $00000a PUTS = $00101c PUTC = $001018 PUTB = $001020 C256F_MODEL_MINOR= $af070c -IPUTS = $390787 -IPUTC = $39079e -IPUTB = $390916 +IPUTS = $390790 +IPUTC = $3907a7 +IPUTB = $390955 OPL3_L_KSL_TL = $afe740 OPL2_ADDY_PTR_LO= $000008 OPL2_ADDY_PTR_MD= $000009 -MIDIW31_INSTRUMENT_FANTASIA= $393377 +MIDIW31_INSTRUMENT_FANTASIA= $3933c9 VKY_INFO_CHIP_VER_L= $af001e VKY_INFO_CHIP_VER_H= $af001f GABE_RNG_CTRL = $afe886 @@ -1519,36 +1524,37 @@ TL0_START_ADDY_H= $af0203 TL0_START_ADDY_M= $af0202 TL0_START_ADDY_L= $af0201 MCMP_LEN = $000256 -IF_OPEN = $395430 +IF_OPEN = $395487 FDC_DIR_DSKCHG = $80 -ICSRDOWN = $3909f6 +ICSRDOWN = $390a35 VDMA_XFER_SRAM2VRAM= $01 -DOS_ADJUSTPATH = $394904 -midiInstruments = $392d57 +DOS_ADJUSTPATH = $394956 +midiInstruments = $392da9 FD_STAT_READ = $01 -OPL2_SET_DEEPVIBRATO= $394014 +OPL2_SET_DEEPVIBRATO= $394066 SIGNED_MULT_A_LO= $000108 FDC_MSR_DRV1BSY = $02 OPL3_L_BASE = $afe700 -OPL2_GET_DEEPVIBRATO= $3938ee -DOS_SDC_NAME = $394872 -MIDI_INSTRUMENT_BRTHNOIS= $392d03 +OPL2_GET_DEEPVIBRATO= $393940 +DOS_SDC_NAME = $3948c4 +MIDI_INSTRUMENT_BRTHNOIS= $392d55 SIGNED_MULT_A_HI= $000109 -MIDI_INSTRUMENT_VIOLIN= $392937 -MIDIW31_INSTRUMENT_ENGLHORN= $393293 -BMP_PARSER_END_WITH_ERROR= $39152f -INSTRUMENT_PIAN1A= $391e17 -INSTRUMENT_PIAN1B= $391e2d -INSTRUMENT_PIAN1C= $391e43 +SYS_C256_FMX = 1 +MIDI_INSTRUMENT_VIOLIN= $392989 +MIDIW31_INSTRUMENT_ENGLHORN= $3932e5 +BMP_PARSER_END_WITH_ERROR= $391581 +INSTRUMENT_PIAN1A= $391e69 +INSTRUMENT_PIAN1B= $391e7f +INSTRUMENT_PIAN1C= $391e95 VKY_TXT_CURSOR_Y_REG_L= $af0016 VKY_TXT_CURSOR_Y_REG_H= $af0017 -UART_HASBYT = $395c60 +UART_HASBYT = $395cc5 NES_SNES_JOY = $04 -DOS_DIRFINDFREE = $394364 -bg_color_lut = $397065 +DOS_DIRFINDFREE = $3943b6 +bg_color_lut = $3970ca SP23_X_POS_H = $af0cbd SP23_X_POS_L = $af0cbc -ICOLORFLAG = $390b8d +ICOLORFLAG = $390bcc VKY_INFO_CHIP_NUM_L= $af001c VKY_INFO_CHIP_NUM_H= $af001d FDC_SECTOR_SIZE = $000304 @@ -1565,66 +1571,67 @@ SP61_ADDY_PTR_M = $af0dea SP61_ADDY_PTR_H = $af0deb SIO_FDC_SRA = $af13f0 SIO_FDC_SRB = $af13f1 -INSTRUMENT_CLAVECIN= $3918d9 -IBM_FILL_SCREEN = $3913d1 -DRUMINS_S_WHISTL= $39259b +INSTRUMENT_CLAVECIN= $39192b +IBM_FILL_SCREEN = $391423 +DRUMINS_S_WHISTL= $3925ed SETOUT = $00103c -INSTRUMENT_XYLO1= $392355 -INSTRUMENT_XYLO2= $39236b -INSTRUMENT_XYLO3= $392381 +INSTRUMENT_XYLO1= $3923a7 +INSTRUMENT_XYLO2= $3923bd +INSTRUMENT_XYLO3= $3923d3 VKY_LINE_IRQ_CTRL_REG= $af001b RTC_YEAR = $af080a -INSTRUMENT_SCRATCH= $391f35 +INSTRUMENT_SCRATCH= $391f87 DOS_CURR_CLUS = $38a02a SP24_Y_POS_L = $af0cc6 SP24_Y_POS_H = $af0cc7 FDC_ST0_HEAD = $04 KEYFLAG = $000f8a -SDC_WAITBUSY = $395d97 +SDC_WAITBUSY = $395dfc SDMA_CTRL0_Int_Enable= $08 -drumBits = $391716 +drumBits = $391768 SP42_Y_POS_L = $af0d56 SP42_Y_POS_H = $af0d57 INH_KEYBOARD = $10 BIOS_DEV = $000321 -MIDI_INSTRUMENT_CLEANGT= $39289b -FDC_Init = $396215 -FDC_INTERRUPT = $38189e -DOS_READNEXT = $394cfb +MIDI_INSTRUMENT_CLEANGT= $3928ed +FDC_Init = $39627a +FDC_INTERRUPT = 3676318 +DOS_READNEXT = $394d52 FNX0_INT05_RTC = $20 GAMMA_R_LUT_PTR = $af4200 CPUFLAGS = $00024f -KB_SET_PREFIX = $3819fb +KB_SET_PREFIX = 3676667 SDMA_XFER_SRAMIO= $30 -DRUMINS_SHAKER = $39261f +DRUMINS_SHAKER = $392671 READY = $00100c IDE_CMD_READ_SECTOR= $21 SP22_CONTROL_REG= $af0cb0 SP25_Y_POS_L = $af0cce SP25_Y_POS_H = $af0ccf -registerOffsets_operator1= $391707 -registerOffsets_operator0= $3916fe +registerOffsets_operator1= $391759 +registerOffsets_operator0= $391750 SID0_V3_ATCK_DECY= $afe413 -INSTRUMENT_FLUTE1= $391a4f -INSTRUMENT_FLUTE2= $391a65 +INSTRUMENT_FLUTE1= $391aa1 +INSTRUMENT_FLUTE2= $391ab7 GRPH_LUT5_PTR = $af3400 -MIDI_INSTRUMENT_FRETNOIS= $392cf7 +MIDI_INSTRUMENT_FRETNOIS= $392d49 SP51_X_POS_H = $af0d9d SP51_X_POS_L = $af0d9c IIR_LINE_STATUS = $06 SP04_Y_POS_L = $af0c26 SP04_Y_POS_H = $af0c27 PME_STS5_REG = $af1108 -OPL2_GET_ENVELOPESCALING= $393ca4 +OPL2_GET_ENVELOPESCALING= $393cf6 FAT_LAST_CLUSTER= $0fffffff SP09_CONTROL_REG= $af0c48 DOS_SECTOR = $38a300 +START_OF_KERNEL := $390400 FAN1_REG = $af1156 ADDITIVE_SYNTH = 1 -OPL2_SET_FNUMBER= $393e7a +OPL2_SET_FNUMBER= $393ecc RCV_TMOUT = $40 BIOS_ERR_TRACK = $84 -IDELAY = $391626 +IDELAY = $391678 SP63_ADDY_PTR_L = $af0df9 SP63_ADDY_PTR_M = $af0dfa SP63_ADDY_PTR_H = $af0dfb @@ -1641,46 +1648,46 @@ SP53_ADDY_PTR_H = $af0dab SP53_ADDY_PTR_M = $af0daa SP53_ADDY_PTR_L = $af0da9 SP18_CONTROL_REG= $af0c90 -DRUMINS_SPLASH = $3924db +DRUMINS_SPLASH = $39252d SP12_Y_POS_L = $af0c66 SP12_Y_POS_H = $af0c67 IREADY = $3906eb SIGNED_MULT_AL_HI= $00010d OPL3_L_FEEDBACK = $afe7c0 IBOOT = $390400 -WRITEFAT12 = $394f43 +WRITEFAT12 = $394f9a TL1_TOTAL_Y_SIZE_L= $af0212 TL1_TOTAL_Y_SIZE_H= $af0213 COMMAND_COMP_TMP= $000f86 -MIDIW31_INSTRUMENT_SYNBRAS1= $39323f -MIDIW31_INSTRUMENT_SYNBRAS2= $39324b -IPUSHKEY = $3916e1 -ide_err_boot = $397208 +MIDIW31_INSTRUMENT_SYNBRAS1= $393291 +MIDIW31_INSTRUMENT_SYNBRAS2= $39329d +IPUSHKEY = $391733 +ide_err_boot = $39726d MONITOR = 3801092 SP18_ADDY_PTR_L = $af0c91 SP18_ADDY_PTR_M = $af0c92 SP18_ADDY_PTR_H = $af0c93 -CTRL_KEY_ON = $3819a4 +CTRL_KEY_ON = 3676580 SP61_X_POS_L = $af0dec SP61_X_POS_H = $af0ded SPRITE_Collision_On= $80 -MIDI_INSTRUMENT_GOBLIN= $392c13 +MIDI_INSTRUMENT_GOBLIN= $392c65 HCOP = $38ff10 -OPL2_SET_DRUMS = $394066 -MIDIW31_INSTRUMENT_PICKBASS= $3930ef -MIDIW31_INSTRUMENT_WHISTLE= $3932ff +OPL2_SET_DRUMS = $3940b8 +MIDIW31_INSTRUMENT_PICKBASS= $393141 +MIDIW31_INSTRUMENT_WHISTLE= $393351 LCR_STOPBIT_2 = $04 LCR_STOPBIT_1 = $00 -OPL2_SET_MAINTAINSUSTAIN= $393c35 -MIDIW31_INSTRUMENT_SANTUR= $39300b -DRUMINS_L_GUIRO = $3925bf +OPL2_SET_MAINTAINSUSTAIN= $393c87 +MIDIW31_INSTRUMENT_SANTUR= $39305d +DRUMINS_L_GUIRO = $392611 TRANS_TMOUT = $20 -INSTRUMENT_FSTRP1= $391aa7 -INSTRUMENT_FSTRP2= $391abd +INSTRUMENT_FSTRP1= $391af9 +INSTRUMENT_FSTRP2= $391b0f RAD_PATTRN = $000053 PART_TYPE_FAT32_LBA= $0c -MIDIW31_INSTRUMENT_CHARANG= $393347 -ALT_KEY_ON = $3819ab +MIDIW31_INSTRUMENT_CHARANG= $393399 +ALT_KEY_ON = 3676587 UNSIGNED_DIV_NUM_HI= $000113 TILESET7_ADDY_H = $af029e TILESET7_ADDY_L = $af029c @@ -1688,20 +1695,20 @@ TILESET7_ADDY_M = $af029d BLOCK_LEN = $00030d TMPPTR2 = $000004 TMPPTR1 = $000000 -MIDI_INSTRUMENT_FRHORN= $392a27 +MIDI_INSTRUMENT_FRHORN= $392a79 UNSIGNED_DIV_NUM_LO= $000112 CS_TEXT_MEM_PTR = $afa000 -UART_SELECT = $395bcd -IDE_TEST = $396b28 +UART_SELECT = $395c32 +IDE_TEST = $396b8d DOS_ERR_BADPATH = 7 SCINIT = $001010 -INSTRUMENT_FRHORN1= $391a7b -INSTRUMENT_FRHORN2= $391a91 +INSTRUMENT_FRHORN1= $391acd +INSTRUMENT_FRHORN2= $391ae3 FG_CHAR_LUT_PTR = $af1f40 -IDE_DRV_READY_NOTBUSY= $396c30 +IDE_DRV_READY_NOTBUSY= $396c95 GP37_REG = $af113a -OPL2_GET_RELEASE= $393e5f -MIDI_INSTRUMENT_HARP= $39297f +OPL2_GET_RELEASE= $393eb1 +MIDI_INSTRUMENT_HARP= $3929d1 CHAN_OUT = $000703 SP18_X_POS_L = $af0c94 SP18_X_POS_H = $af0c95 @@ -1709,7 +1716,7 @@ TEST_END = $007fff GABE_CTRL_PWR_LED= $01 DIP_BOOT_FLOPPY = $02 GABE_RNG_DAT_LO = $afe884 -passABtest = $39112c +passABtest = $39116b SP63_CONTROL_REG= $af0df8 GABE_RNG_DAT_HI = $afe885 SP46_X_POS_H = $af0d75 @@ -1720,8 +1727,8 @@ SP11_ADDY_PTR_L = $af0c59 SP34_ADDY_PTR_L = $af0d11 SP34_ADDY_PTR_M = $af0d12 SP34_ADDY_PTR_H = $af0d13 -SCRSHIFTLL = $3908bb -SCRSHIFTLR = $3908df +SCRSHIFTLL = $3908c4 +SCRSHIFTLR = $390903 SDMA_DST_ADDY_H = $af0427 SDMA_DST_ADDY_L = $af0425 SDMA_DST_ADDY_M = $af0426 @@ -1759,50 +1766,50 @@ CPUDBR = $00024e BLOCK_BANK = $000311 RVECTOR_NMI = $38ffea DOS_SPARE_FD_END= 3714336 -SDC_RESET = $395da6 -DOS_DIRWRITE = $394422 +SDC_RESET = $395e0b +DOS_DIRWRITE = $394474 VDMA_SIZE_L = $af0408 VDMA_SIZE_M = $af0409 VDMA_SIZE_H = $af040a DOS_RUN_PARAM = $000360 FDC_CMD_READ_ID = 10 -DRUMINS_TRIANGL2= $392637 -DRUMINS_TRIANGL1= $39262b -IINITFONTSET = $390fa0 -MIDIW31_INSTRUMENT_GTHARMS= $3930cb -INSTRUMENT_TOM1 = $3921b3 -INSTRUMENT_TOM2 = $3921c9 -OPL2_Set_DeepVibrato_Set= $394036 +DRUMINS_TRIANGL2= $392689 +DRUMINS_TRIANGL1= $39267d +IINITFONTSET = $390fdf +MIDIW31_INSTRUMENT_GTHARMS= $39311d +INSTRUMENT_TOM1 = $392205 +INSTRUMENT_TOM2 = $39221b +OPL2_Set_DeepVibrato_Set= $394088 boot_wait_key = $390610 -MIDIW31_INSTRUMENT_MUTETRP= $39321b +MIDIW31_INSTRUMENT_MUTETRP= $39326d DEVICE = $38a000 GAMMA_1_8_Tbl = $397700 TMR0_EN = $01 -MIDIW31_INSTRUMENT_VIBES= $392fdb +MIDIW31_INSTRUMENT_VIBES= $39302d UART_1200 = 96 BMP_PRSE_SRC_PTR= $000044 -INSTRUMENT_BASS1= $391779 -INSTRUMENT_BASS2= $39178f +INSTRUMENT_BASS1= $3917cb +INSTRUMENT_BASS2= $3917e1 HD_INSTALLED = $80 -ICSRUP = $3909d0 +ICSRUP = $390a0f SP29_Y_POS_H = $af0cef SP29_Y_POS_L = $af0cee -boot_invalid = $3971a1 -MIDIW31_INSTRUMENT_TROMBONE= $393203 +boot_invalid = $397206 +MIDIW31_INSTRUMENT_TROMBONE= $393255 C256F_MODEL_MAJOR= $af070b Mstr_Ctrl_GAMMA_En= $40 TIMER1_CMP_REG = $00016c BPB_VOLUMEID = 39 -OPL2_GET_PERCUSSION= $39390e +OPL2_GET_PERCUSSION= $393960 TILESET5_ADDY_H = $af0296 TILESET5_ADDY_L = $af0294 TILESET5_ADDY_M = $af0295 -MIDI_INSTRUMENT_TREMSTR= $392967 +MIDI_INSTRUMENT_TREMSTR= $3929b9 SP03_ADDY_PTR_H = $af0c1b SP03_ADDY_PTR_L = $af0c19 SP03_ADDY_PTR_M = $af0c1a FNX3_INT01_OPM = $02 -DOS_DIROPEN = $394209 +DOS_DIROPEN = $39425b RTC_SEC_ALARM = $af0801 INITCURSOR = $0010bc SID0_POT_Y = $afe41a @@ -1818,18 +1825,18 @@ FDC_ST1_MA = $01 KB_ECHO = $fe FDC_DOR_NRESET = $04 SDCARD_CMD = $afe811 -INSTRUMENT_SYNBAL1= $392103 -INSTRUMENT_SYNBAL2= $392119 +INSTRUMENT_SYNBAL1= $392155 +INSTRUMENT_SYNBAL2= $39216b FDC_ST1_EN = $80 FDC_ST1_DE = $20 IDE_ERROR = $afe831 FDC_CMD_CONFIGURE= 19 -MIDIW31_INSTRUMENT_FIDDLE= $39347f +MIDIW31_INSTRUMENT_FIDDLE= $3934d1 SP41_ADDY_PTR_L = $af0d49 SP41_ADDY_PTR_M = $af0d4a SP41_ADDY_PTR_H = $af0d4b -INSTRUMENT_FUZGUIT1= $391ad3 -INSTRUMENT_FUZGUIT2= $391ae9 +INSTRUMENT_FUZGUIT1= $391b25 +INSTRUMENT_FUZGUIT2= $391b3b FNX2_INT02_GABE_INT1= $04 SCREEN_END = $b00000 SP06_CONTROL_REG= $af0c30 @@ -1842,13 +1849,13 @@ LCR_DATABITS_8 = $03 LCR_DATABITS_5 = $00 LCR_DATABITS_7 = $02 LCR_DATABITS_6 = $01 -ILOOP_1 = $3915eb +ILOOP_1 = $39163d DOS_ERR_VOLID = 5 RAD_LINENUMBER = $000043 -IF_COPY = $395ab6 +IF_COPY = $395b1b SP37_Y_POS_L = $af0d2e SP37_Y_POS_H = $af0d2f -MIDIW31_INSTRUMENT_PIZZ= $393173 +MIDIW31_INSTRUMENT_PIZZ= $3931c5 FDC_EXPECT_DAT = $000533 ADDER32_B_LL = $000124 ADDER32_B_LH = $000125 @@ -1862,36 +1869,36 @@ TL2_WINDOW_X_POS_L= $af0220 TL2_WINDOW_X_POS_H= $af0221 SID0_V3_FREQ_LO = $afe40e BIOS_FIFO_COUNT = $00032a -OPL2_Set_Synthmode_Exit= $393fea -INSTRUMENT_CYMBAL1= $391905 +OPL2_Set_Synthmode_Exit= $39403c +INSTRUMENT_CYMBAL1= $391957 SCROLLUP = $0010a4 SDMA_DST_STRIDE_H= $af042f SDMA_DST_STRIDE_L= $af042e SP36_CONTROL_REG= $af0d20 SP58_Y_POS_H = $af0dd7 SP58_Y_POS_L = $af0dd6 -ITRACE = $3940e3 -clr_color = $390ac9 -MIDI_INSTRUMENT_PIZZ= $392973 -MIDI_INSTRUMENT_ALTOSAX= $392a63 +ITRACE = $394135 +clr_color = $390b08 +MIDI_INSTRUMENT_PIZZ= $3929c5 +MIDI_INSTRUMENT_ALTOSAX= $392ab5 SP30_CONTROL_REG= $af0cf0 OPL2_NUM_CHANNELS= 9 -FDC_Check_CMD_BSY= $396029 +FDC_Check_CMD_BSY= $39608e SP10_X_POS_L = $af0c54 SP10_X_POS_H = $af0c55 -MIDI_INSTRUMENT_ORGAN3= $39282f -MIDI_INSTRUMENT_ORGAN2= $392823 -MIDI_INSTRUMENT_ORGAN1= $392817 +MIDI_INSTRUMENT_ORGAN3= $392881 +MIDI_INSTRUMENT_ORGAN2= $392875 +MIDI_INSTRUMENT_ORGAN1= $392869 DOS_ATTR_SYSTEM = $04 -MIDI_INSTRUMENT_SYNSTR2= $3929bb -MIDI_INSTRUMENT_SYNSTR1= $3929af +MIDI_INSTRUMENT_SYNSTR2= $392a0d +MIDI_INSTRUMENT_SYNSTR1= $392a01 SP00_Y_POS_H = $af0c07 SP00_Y_POS_L = $af0c06 BM1_CONTROL_REG = $af0108 RHNMI = $38ff40 RAD_CHANNEL_DATA= $00004a -DONE_TRANSFER_LUT= $39147e -INSTRUMENT_BASSHARP= $3917a5 +DONE_TRANSFER_LUT= $3914d0 +INSTRUMENT_BASSHARP= $3917f7 ScanCode_Ctrl_Set1= $397400 SDMA_CTRL1_IO_Src16= $02 FNX0_INT04_TMR2 = $10 @@ -1899,70 +1906,70 @@ SP27_ADDY_PTR_L = $af0cd9 SP27_ADDY_PTR_M = $af0cda SP27_ADDY_PTR_H = $af0cdb DOS_SPARE_SECTOR_END= $38ad00 -OPL2_Set_MaintainSustain_Exit= $393c5e +OPL2_Set_MaintainSustain_Exit= $393cb0 FDC_VBR_PATH = 64 -DOS_FDC_DESC = $394869 +DOS_FDC_DESC = $3948bb FD_STAT_ERROR = $40 -IF_CREATE = $3954c3 +IF_CREATE = $39551a INITVKYGRPMODE = $0010d0 DOS_DIR_TYPE = $38a045 TMR1_CMP_RECLR = $01 BOOTBASIC = $3905ac GP26_REG = $af1131 -MIDIW31_INSTRUMENT_AGOGO= $3934a3 -INSTRUMENT_BELLS= $391813 +MIDIW31_INSTRUMENT_AGOGO= $3934f5 +INSTRUMENT_BELLS= $391865 GAMMA_G_LUT_PTR = $af4100 OPERATOR1 = 0 OPERATOR2 = 1 SP38_Y_POS_H = $af0d37 SP38_Y_POS_L = $af0d36 -DRUMINS_MUTECONG= $39252f +DRUMINS_MUTECONG= $392581 VKY_RESERVED_01 = $af0003 VKY_RESERVED_00 = $af0002 GP10_REG = $af1123 -OPL2_GET_MODFREQMULTIPLE= $393cbf +OPL2_GET_MODFREQMULTIPLE= $393d11 BIOS_ERR_TIMEOUT= $8c -MIDI_INSTRUMENT_GTHARMS= $3928cb +MIDI_INSTRUMENT_GTHARMS= $39291d FDC_CMD_SPECIFY = 3 -INSTRUMENT_POPBASS1= $391ef3 +INSTRUMENT_POPBASS1= $391f45 BIOS_DEV_SD = 2 TMR0_CMP_RELOAD = $02 SP17_Y_POS_H = $af0c8f SP17_Y_POS_L = $af0c8e retry_boot = $39057e -BOOT_FILE = $395fb1 -IF_PASSFAILURE = $395979 -MIDI_INSTRUMENT_OOHS= $3929d3 -KB_TOG_CAPLOCK = $381a21 +BOOT_FILE = $396016 +IF_PASSFAILURE = $3959d0 +MIDI_INSTRUMENT_OOHS= $392a25 +KB_TOG_CAPLOCK = 3676705 SP45_CONTROL_REG= $af0d68 -DO_CMD_F4_AGAIN = $39115c -SHIFT_KEY_ON = $38199d +DO_CMD_F4_AGAIN = $39119b +SHIFT_KEY_ON = 3676573 INITSPRITE = $0010d8 -MIDI_INSTRUMENT_TIMPANI= $39298b -MIDI_INSTRUMENT_EP2= $392793 -MIDI_INSTRUMENT_EP1= $392787 -IOPEN = $3916d5 -MIDI_INSTRUMENT_SLOWSTR= $3929a3 +MIDI_INSTRUMENT_TIMPANI= $3929dd +MIDI_INSTRUMENT_EP2= $3927e5 +MIDI_INSTRUMENT_EP1= $3927d9 +IOPEN = $391727 +MIDI_INSTRUMENT_SLOWSTR= $3929f5 PART_SECT_COUNT_OFF= 13 DOS_ERR_NOCLUSTER= 10 SP13_CONTROL_REG= $af0c68 DOS_ERR_PGXSIG = 16 -iputs_done = $39079a +iputs_done = $3907a3 DOS_DIR_TYPE_FAT12ROOT= 0 SP58_X_POS_H = $af0dd5 SP58_X_POS_L = $af0dd4 -DOS_CALC_LBA = $3947a1 -Percussion_Default= $3939cb +DOS_CALC_LBA = $3947f3 +Percussion_Default= $393a1d ScanCode_NumLock_Set1= $397500 DOS_DIR_TYPE_FILE= 1 DEV_DISABLE_REG = $af1122 -FDC_PUTBLOCK = $39673b -initkb_loop_out = $3911a1 -IF_DIRREAD = $3956d9 +FDC_PUTBLOCK = $3967a0 +initkb_loop_out = $3911e0 +IF_DIRREAD = $395730 LCR_PARITY_EVEN = $18 SP60_X_POS_L = $af0de4 SP60_X_POS_H = $af0de5 -ICLOSE = $3916d6 +ICLOSE = $391728 FDC_MOTOR_TIME = 4295454 TILESET7_ADDY_CFG= $af029f SP07_ADDY_PTR_L = $af0c39 @@ -1972,28 +1979,28 @@ FDC_CMD_SEEK = 15 UINT_LINE_STATUS= $04 BM_Enable = $01 FDC_DEVCMD_RECAL= 3 -TIMER1_INTERRUPT= $38183c +TIMER1_INTERRUPT= 3676220 SP07_CONTROL_REG= $af0c38 PART_LBA_OFF = 8 IDE_ERR_BBK = $80 UART_SR = $07 BOOTIDE = $3905cc -MIDIW31_INSTRUMENT_ATMOSPH= $3933fb -DRUMINS_HIQ = $3923c7 -OPL2_SET_ATTACK = $393d6a -INSTRUMENT_SDRUM2= $391f61 +MIDIW31_INSTRUMENT_ATMOSPH= $39344d +DRUMINS_HIQ = $392419 +OPL2_SET_ATTACK = $393dbc +INSTRUMENT_SDRUM2= $391fb3 SP05_Y_POS_L = $af0c2e SP05_Y_POS_H = $af0c2f -FATFORCLUSTER12 = $394b24 +FATFORCLUSTER12 = $394b7b SDC_TRANS_TYPE_REG= $afea02 LCR_PARITY_SPACE= $38 -FATFORCLUSTER32 = $394b8c +FATFORCLUSTER32 = $394be3 OPL3_R_AR_DR = $afe660 BIOS_STATUS = $000320 SP41_X_POS_L = $af0d4c SP41_X_POS_H = $af0d4d -DRUMINS_TAMBOUR = $3924b7 -DRUMINS_TAMBOU2 = $3924cf +DRUMINS_TAMBOUR = $392509 +DRUMINS_TAMBOU2 = $392521 FDC_CMD_READ_DATA= 6 LOADDBR = $000307 RVECTOR_COP = $38ffe4 @@ -2003,12 +2010,12 @@ SP59_ADDY_PTR_H = $af0ddb CARRIER = 1 FDC_STATUS = $00030b GP31_REG = $af1134 -isrup_done_already_zero= $3909f0 +isrup_done_already_zero= $390a2f SDC_TRANS_RD_NO_ERR= $00 -IF_LOAD = $395704 +IF_LOAD = $39575b BORDER_X_SIZE = $af0008 GP33_REG = $af1136 -MIDIW31_INSTRUMENT_HARP= $39317f +MIDIW31_INSTRUMENT_HARP= $3931d1 LSR_BREAK_INT = $10 BIOS_ERR_OOS = $89 GP55_REG = $af1144 @@ -2019,61 +2026,61 @@ F_DIROPEN = $001108 SP42_CONTROL_REG= $af0d50 SMI_STS3_REG = $af1112 PME_EN3_REG = $af110c -SAVEKEY = $381a43 +SAVEKEY = 3676739 BOOTSDC = $3905b3 SP62_X_POS_L = $af0df4 SP62_X_POS_H = $af0df5 OPL2_REG_REGION = $000028 IIR_FIFO_NONFUNC= $40 SPRITE_Enable = $01 -MIDIW31_INSTRUMENT_CLAVIC= $392fab -OPL2_Get_Frequency= $393efb -COM2_INTERRUPT = $3818a9 +MIDIW31_INSTRUMENT_CLAVIC= $392ffd +OPL2_Get_Frequency= $393f4d +COM2_INTERRUPT = 3676329 GETLINE = $001058 -DO_CMD_A9_AGAIN = $3911d0 -DOS_COPYPATH = $395377 +DO_CMD_A9_AGAIN = $39120f +DOS_COPYPATH = $3953ce SP05_ADDY_PTR_L = $af0c29 SP05_ADDY_PTR_M = $af0c2a SP05_ADDY_PTR_H = $af0c2b -MIDI_INSTRUMENT_TROMBONE= $392a03 +MIDI_INSTRUMENT_TROMBONE= $392a55 RVECTOR_EBRK = $38fff6 -INSTRUMENT_HARPE1= $391b57 +INSTRUMENT_HARPE1= $391ba9 IREADYWAIT = $3906fe -MIDI_INSTRUMENT_PICKBASS= $3928ef +MIDI_INSTRUMENT_PICKBASS= $392941 GETCH = $001048 -fdc_boot = $397251 -MIDIW31_INSTRUMENT_FRETNOIS= $3934f7 -DRUMINS_HI_AGOGO= $39256b -DRUMINS_LOW_TOM = $392463 +fdc_boot = $3972b6 +MIDIW31_INSTRUMENT_FRETNOIS= $393549 +DRUMINS_HI_AGOGO= $3925bd +DRUMINS_LOW_TOM = $3924b5 SP02_CONTROL_REG= $af0c10 VDMA_SRC_STRIDE_L= $af040c VDMA_SRC_STRIDE_H= $af040d SDC_TRANS_WRITE_BLK= $03 -MIDI_INSTRUMENT_NYLONGT= $392877 +MIDI_INSTRUMENT_NYLONGT= $3928c9 CMD_DATA = $08 SP59_CONTROL_REG= $af0dd8 -FDC_VBR_BEGIN = $396a60 +FDC_VBR_BEGIN = $396ac5 FDC_ST3_DRVSEL = $03 -OPL2_SET_VOLUME = $393d2a +OPL2_SET_VOLUME = $393d7c SP10_Y_POS_L = $af0c56 SP10_Y_POS_H = $af0c57 -INSTRUMENT_GUITAR1= $391aff +INSTRUMENT_GUITAR1= $391b51 SID0_V2_ATCK_DECY= $afe40c TL2_WINDOW_Y_POS_L= $af0222 TL2_WINDOW_Y_POS_H= $af0223 SP45_ADDY_PTR_H = $af0d6b SP45_ADDY_PTR_L = $af0d69 SP45_ADDY_PTR_M = $af0d6a -FDC_TEST = $395f1f -MIDI_INSTRUMENT_PANFLUTE= $392adb +FDC_TEST = $395f84 +MIDI_INSTRUMENT_PANFLUTE= $392b2d SP25_ADDY_PTR_L = $af0cc9 SP25_ADDY_PTR_M = $af0cca SP25_ADDY_PTR_H = $af0ccb OP_LEVEL = $3f FDC_CMD_RECALIBRATE= 7 -MIDI_INSTRUMENT_CHARANG= $392b47 +MIDI_INSTRUMENT_CHARANG= $392b99 OPL3_L_AR_DR = $afe760 -MIDIW31_INSTRUMENT_KALIMBA= $393467 +MIDIW31_INSTRUMENT_KALIMBA= $3934b9 DOS_SECTOR_END = $38a500 SP12_X_POS_L = $af0c64 SP12_X_POS_H = $af0c65 @@ -2083,18 +2090,18 @@ FDC_CMD_SCAN_EQUAL= 17 TIMER1_CHARGE_M = $00016a TIMER1_CHARGE_L = $000169 TIMER1_CHARGE_H = $00016b -MIDI_INSTRUMENT_SYNVOX= $3929df +MIDI_INSTRUMENT_SYNVOX= $392a31 RAD_PATTERN_IDX = $000041 SP28_X_POS_H = $af0ce5 SP28_X_POS_L = $af0ce4 GP36_REG = $af1139 -MIDI_INSTRUMENT_APPLAUSE= $392d3f +MIDI_INSTRUMENT_APPLAUSE= $392d91 GP30_REG = $af1133 DOS_FAT_SECTORS = $38a500 DOS_FD_MAX = 8 SID0_V1_ATCK_DECY= $afe405 UART1_FIFO_CTRL_SHDW= $af1120 -ilocate_row = $390a3b +ilocate_row = $390a7a SMI_STS2_REG = $af1111 CS_COLOR_MEM_PTR= $afc000 SP13_ADDY_PTR_M = $af0c6a @@ -2103,52 +2110,52 @@ SP13_ADDY_PTR_H = $af0c6b INITTILEMODE = $0010d4 GP53_REG = $af1142 SP47_CONTROL_REG= $af0d78 -IF_LOADRAW = $39582a -DOS_SDC_DESC = $394875 +IF_LOADRAW = $395881 +DOS_SDC_DESC = $3948c7 SP50_CONTROL_REG= $af0d90 -MIDI_INSTRUMENT_SYNBRAS2= $392a4b -MIDI_INSTRUMENT_SYNBRAS1= $392a3f +MIDI_INSTRUMENT_SYNBRAS2= $392a9d +MIDI_INSTRUMENT_SYNBRAS1= $392a91 RTC_CENTURY = $af080f -IINITCURSOR = $390fd8 +IINITCURSOR = $391017 FNX0_INT07_MOUSE= $80 -INSTRUMENT_SOLOVLN= $391ffb +INSTRUMENT_SOLOVLN= $39204d SDC_TRANS_WR_BUSY_ERR= $30 -MIDI_INSTRUMENT_CRYSTAL= $392bef +MIDI_INSTRUMENT_CRYSTAL= $392c41 FNX2_INT01_GABE_INT0= $02 DOS_DIR_ENT_UNUSED= $e5 SP37_ADDY_PTR_H = $af0d2b SP37_ADDY_PTR_M = $af0d2a SP37_ADDY_PTR_L = $af0d29 GABE_CTRL_BUZZER= $10 -MIDIW31_INSTRUMENT_SYNBASS2= $39312b -MIDIW31_INSTRUMENT_SYNBASS1= $39311f -OPL2_GET_WAVEFORM_SELECT= $3937d3 +MIDIW31_INSTRUMENT_SYNBASS2= $39317d +MIDIW31_INSTRUMENT_SYNBASS1= $393171 +OPL2_GET_WAVEFORM_SELECT= $393825 DIP_BOOTMODE = $afe80e TILESET0_ADDY_H = $af0282 TILESET0_ADDY_M = $af0281 TILESET0_ADDY_L = $af0280 SP29_CONTROL_REG= $af0ce8 -IF_DIROPEN = $395602 +IF_DIROPEN = $395659 DOS_BOOT_SECTOR = $38a900 SDMA_STATUS_REG = $af0430 -INSTRUMENT_ELPIANO2= $3919f7 -INSTRUMENT_ELPIANO1= $3919e1 -BM_FILL_COMPUTE_Y_DST= $3913f0 +INSTRUMENT_ELPIANO2= $391a49 +INSTRUMENT_ELPIANO1= $391a33 +BM_FILL_COMPUTE_Y_DST= $391442 OPL3_L_KON_BLOCK_FNumber= $afe7b0 LOADADDR = $000308 -DOS_DIRNEXT = $3942a3 +DOS_DIRNEXT = $3942f5 SP02_X_POS_H = $af0c15 SP02_X_POS_L = $af0c14 LCR_PARITY_NONE = $00 -INSTRUMENT_VIBRA3= $3922d1 -INSTRUMENT_VIBRA2= $3922bb -INSTRUMENT_VIBRA1= $3922a5 +INSTRUMENT_VIBRA3= $392323 +INSTRUMENT_VIBRA2= $39230d +INSTRUMENT_VIBRA1= $3922f7 SDC_TRANS_ERROR_REG= $afea05 -MIDI_INSTRUMENT_BASSOON= $392a9f +MIDI_INSTRUMENT_BASSOON= $392af1 SNES0_DAT_HI0 = $afe809 -MIDI_INSTRUMENT_HARMONIC= $39285f +MIDI_INSTRUMENT_HARMONIC= $3928b1 BM_FILL_SCREEN = $0010e8 -MIDI_INSTRUMENT_STEELGT= $392883 +MIDI_INSTRUMENT_STEELGT= $3928d5 SP30_X_POS_H = $af0cf5 SP30_X_POS_L = $af0cf4 SP55_X_POS_L = $af0dbc @@ -2156,51 +2163,52 @@ SP55_X_POS_H = $af0dbd CHAR_CTRL_E = $05 CHAR_CTRL_C = $03 CHAR_CTRL_A = $01 -MIDIW31_INSTRUMENT_TREMSTR= $393167 -OPL2_Get_Register_Offset_exit= $3940cb +MIDIW31_INSTRUMENT_TREMSTR= $3931b9 +OPL2_Get_Register_Offset_exit= $39411d VECTOR_EBRK = $38fff6 SID0_V1_FREQ_LO = $afe400 -NOT_KB_SET_RSHIFT= $381926 -INSTRUMENT_ELGUIT4= $3919b5 -INSTRUMENT_ELGUIT1= $391973 -INSTRUMENT_ELGUIT2= $391989 -INSTRUMENT_ELGUIT3= $39199f +NOT_KB_SET_RSHIFT= 3676454 +INSTRUMENT_ELGUIT4= $391a07 +INSTRUMENT_ELGUIT1= $3919c5 +INSTRUMENT_ELGUIT2= $3919db +INSTRUMENT_ELGUIT3= $3919f1 SID0_V1_FREQ_HI = $afe401 BPB_SECPERFAT_OFF= $24 CHAR_DEL = $7f +START_OF_FONT := $3f0000 SP06_Y_POS_L = $af0c36 SP06_Y_POS_H = $af0c37 -OPL2_SET_WAVEFORM= $394091 -DRUMINS_OPENCONG= $39253b +OPL2_SET_WAVEFORM= $3940e3 +DRUMINS_OPENCONG= $39258d VECTORS_BEGIN = $38ffe0 BIOS_ERR_RESULT = $88 -MIDIW31_INSTRUMENT_SPACEVOX= $39339b +MIDIW31_INSTRUMENT_SPACEVOX= $3933ed UART_MSR = $06 -SERVICE_NEXT_IRQ14= $3817f5 -SERVICE_NEXT_IRQ11= $3817bc -SERVICE_NEXT_IRQ13= $3817e2 -SERVICE_NEXT_IRQ12= $3817cf +SERVICE_NEXT_IRQ14= 3676149 +SERVICE_NEXT_IRQ11= 3676092 +SERVICE_NEXT_IRQ13= 3676130 +SERVICE_NEXT_IRQ12= 3676111 SP28_CONTROL_REG= $af0ce0 SIGNED_DIV_REM_HI= $00011f BIOS_ERR_CMD = $85 FDC_PARAM_NUM = $000530 -old_pc_style_stat= $396f53 +old_pc_style_stat= $396fb8 DOS_SPARE_SECTOR= $38ab00 RAD_TEMP = $00004d GRPH_LUT2_PTR = $af2800 SIGNED_DIV_REM_LO= $00011e -DRUMINS_TOM_HIGH= $39249f +DRUMINS_TOM_HIGH= $3924f1 SP58_ADDY_PTR_H = $af0dd3 SP58_ADDY_PTR_L = $af0dd1 SP58_ADDY_PTR_M = $af0dd2 DOS_ERR_NOTWRITE= 14 NOTE_AS = 10 -DRUMINS_WOODBLOK= $3923d3 +DRUMINS_WOODBLOK= $392425 NOTE_CS = 1 OPL3_R_SL_RR = $afe680 NOTE_DS = 3 NOTE_GS = 8 -MIDI_INSTRUMENT_ATMOSPH= $392bfb +MIDI_INSTRUMENT_ATMOSPH= $392c4d KERNEL_JMP_BEGIN= $001000 NOTE_FS = 6 UART_MCR = $04 @@ -2212,7 +2220,7 @@ RVECTOR_ABORT = $38ffe8 SP52_CONTROL_REG= $af0da0 FDC_CMD_PERPENDICULAR_MODE= 18 PME_EN_REG = $af1102 -IINITALLLUT = $390c5c +IINITALLLUT = $390c9b INPT_BUF_FULL = $02 UNSIGNED_MULT_A_LO= $000100 SP14_CONTROL_REG= $af0c70 @@ -2220,27 +2228,27 @@ GP60_REG = $af1147 FAN2_TACH_REG = $af115a INITSUPERIO = $0010b0 SID0_RES_FILT = $afe417 -DOS_DIRFIRST = $394288 +DOS_DIRFIRST = $3942da CURSORPOS = $000017 -MIDIW31_INSTRUMENT_OCARINA= $39330b +MIDIW31_INSTRUMENT_OCARINA= $39335d UINT_DATA_AVAIL = $01 -FDC_Check_DRV0_BSY= $395ffb -DOS_GETCLUSTER = $3947ec -MIDI_INSTRUMENT_BARISAX= $392a7b +FDC_Check_DRV0_BSY= $396060 +DOS_GETCLUSTER = $39483e +MIDI_INSTRUMENT_BARISAX= $392acd MODULATOR = 0 LOADFILE_NAME = $000300 BMP_PRSE_DST_PTR= $000048 CREDITS_TEXT = $3b0000 -MIDI_INSTRUMENT_ECHODROP= $392c1f -DRUMINS_GLOCK = $3923df -EXIT_IRQ_HANDLE = $381806 +MIDI_INSTRUMENT_ECHODROP= $392c71 +DRUMINS_GLOCK = $392431 +EXIT_IRQ_HANDLE = 3676166 MSC_ST_REG = $af111c VECTOR_EABORT = $38fff8 DRUM_CYMBAL = $02 COLS_VISIBLE = $00000f -OPL2_Set_DeepTremolo_Set= $39400d -JOYSTICK_ENABLE_NES_SNES_PORT1= $395d01 -JOYSTICK_ENABLE_NES_SNES_PORT0= $395cf2 +OPL2_Set_DeepTremolo_Set= $39405f +JOYSTICK_ENABLE_NES_SNES_PORT1= $395d66 +JOYSTICK_ENABLE_NES_SNES_PORT0= $395d57 RAD_CHANNEL_NUM = $000044 UART_2400 = 48 SP31_ADDY_PTR_H = $af0cfb @@ -2251,7 +2259,7 @@ ScanCode_Prefix_Set1= $397580 SP61_Y_POS_L = $af0dee SP61_Y_POS_H = $af0def FNX2_INT03_VDMA = $08 -OPL2_Set_Tremolo_Exit= $393bd4 +OPL2_Set_Tremolo_Exit= $393c26 VKY_TXT_CURSOR_CHAR_REG= $af0012 TEST_LOCATION = $020000 DOS_FAT_SECTORS_END= $38a900 @@ -2261,32 +2269,31 @@ BM1_RESERVED_6 = $af010e BM1_RESERVED_7 = $af010f SP27_Y_POS_L = $af0cde SP27_Y_POS_H = $af0cdf -done = $390911 SDMA_XFER_SRAM2SRAM= $00 SP39_Y_POS_H = $af0d3f SP39_Y_POS_L = $af0d3e SP45_X_POS_H = $af0d6d SP45_X_POS_L = $af0d6c -OPL2_SET_INSTRUMENT= $39398a -noteFNumbers = $3916e6 +OPL2_SET_INSTRUMENT= $3939dc +noteFNumbers = $391738 SDC_TRANS_RD_CMD_ERR= $04 TREMOLO = $80 SP56_X_POS_L = $af0dc4 SP56_X_POS_H = $af0dc5 -MIDI_INSTRUMENT_TUBA= $392a0f -JOYSTICK_DISABLE_NES_SNES_PORT1= $395d1d -JOYSTICK_DISABLE_NES_SNES_PORT0= $395d10 +MIDI_INSTRUMENT_TUBA= $392a61 +JOYSTICK_DISABLE_NES_SNES_PORT1= $395d82 +JOYSTICK_DISABLE_NES_SNES_PORT0= $395d75 GP43_REG = $af113e -MIDI_INSTRUMENT_CELLO= $39294f +MIDI_INSTRUMENT_CELLO= $3929a1 SID0_MODE_VOL = $afe418 TIMER_CONTROLLER= $000160 -INSTRUMENT_BAGPIPE2= $39174d -INSTRUMENT_BAGPIPE1= $391737 -DRUMINS_RIMSHOT = $392403 -MIDI_INSTRUMENT_SYNDRUM= $392cdf -MIDI_INSTRUMENT_SPACEVOX= $392b9b +INSTRUMENT_BAGPIPE2= $39179f +INSTRUMENT_BAGPIPE1= $391789 +DRUMINS_RIMSHOT = $392455 +MIDI_INSTRUMENT_SYNDRUM= $392d31 +MIDI_INSTRUMENT_SPACEVOX= $392bed LSR_XMIT_EMPTY = $20 -INSTRUMENT_SNAKEFL= $391fb9 +INSTRUMENT_SNAKEFL= $39200b DOS_NEW_CLUSTER = $38a036 USER_TEMP = $0000f0 SP19_Y_POS_L = $af0c9e @@ -2294,56 +2301,56 @@ SP19_Y_POS_H = $af0c9f SP57_Y_POS_L = $af0dce SP57_Y_POS_H = $af0dcf OPL2_OCTAVE = $000031 -fdc_err_boot = $39722b +fdc_err_boot = $397290 SDC_TX_FIFO_CTRL_REG= $afea24 -midiDrums = $392667 +midiDrums = $3926b9 SDMA_BYTE_2_WRITE= $af0430 FDC_CMD_SENSE_INTERRUPT= 8 OPL3_R_WAVE_SELECT= $afe6e0 -NOT_KB_SET_SCR = $38195e +NOT_KB_SET_SCR = 3676510 SP37_CONTROL_REG= $af0d28 -INITMOUSEPOINTER= $390fb9 +INITMOUSEPOINTER= $390ff8 SETNAM = $00102c -PALETTE_LUT1_LOOP= $391570 +PALETTE_LUT1_LOOP= $3915c2 DOS_ERR_NOINIT = 4 -ENTRYFORCLUS12 = $394ab1 +ENTRYFORCLUS12 = $394b08 FDC_SECPERTRK = $000305 BM0_START_ADDY_H= $af0103 BM0_START_ADDY_L= $af0101 BM0_START_ADDY_M= $af0102 -INSTRUMENT_ELCLAV1= $39191b -INSTRUMENT_ELCLAV2= $391931 -OPL2_GET_TREMOLO= $393bd5 +INSTRUMENT_ELCLAV1= $39196d +INSTRUMENT_ELCLAV2= $391983 +OPL2_GET_TREMOLO= $393c27 PARTITION = $38a002 -TIMER2_INTERRUPT= $38184d -IINITVKYGRPMODE = $390e2b +TIMER2_INTERRUPT= 3676237 +IINITVKYGRPMODE = $390e6a SP32_Y_POS_H = $af0d07 SP32_Y_POS_L = $af0d06 SIO_FDC_RSV = $af13f6 VECTOR_ENMI = $38fffa BOOTFLOPPY = $3905e6 -MIDI_INSTRUMENT_GUNSHOT= $392d4b +MIDI_INSTRUMENT_GUNSHOT= $392d9d PART_TYPE_FAT12 = $00 BPB_ROOTCLUS_OFF= $2c -MIDIW31_INSTRUMENT_REVRSCYM= $3934eb +MIDIW31_INSTRUMENT_REVRSCYM= $39353d KB_LED_CMD = $ed -MIDIW31_INSTRUMENT_SLOWSTR= $3931a3 +MIDIW31_INSTRUMENT_SLOWSTR= $3931f5 BM_Collision_On = $40 TMR1_SLOAD = $04 IDE_ERR_UNC = $40 KEYBOARD_LOCKS = $000f89 NES_SNES_TRIG = $80 CSRRIGHT = $001090 -MIDI_INSTRUMENT_FANTASIA= $392b77 +MIDI_INSTRUMENT_FANTASIA= $392bc9 TIMER0_CMP_REG = $000164 -OPL2_Get_FrequencyBlock= $3937b4 -OPL2_Set_Vibrato_Exit= $393c19 +OPL2_Get_FrequencyBlock= $393806 +OPL2_Set_Vibrato_Exit= $393c6b SDC_TRANS_DIRECT= $00 CURSORY = $00001c CURSORX = $00001a SDMA_CTRL0_1D_2D= $02 -INSTRUMENT_TROMB2= $392221 -INSTRUMENT_TROMB1= $39220b +INSTRUMENT_TROMB2= $392273 +INSTRUMENT_TROMB1= $39225d FNX0_INT00_SOF = $01 SP30_Y_POS_H = $af0cf7 SP30_Y_POS_L = $af0cf6 @@ -2351,38 +2358,38 @@ RRETURN = $38fff0 BIOS_LBA = $000322 SP13_X_POS_L = $af0c6c SP13_X_POS_H = $af0c6d -MIDIW31_INSTRUMENT_STEELGT= $393083 +MIDIW31_INSTRUMENT_STEELGT= $3930d5 Vky_Cursor_Flash_Rate1= $04 Vky_Cursor_Flash_Rate0= $02 DOS_DEV_NAMES = $38a04a KEY_BUFFER_END = $000f7f SDCARD_PRSNT_MNT= $00003f DIP_USER = $afe80d -JOYSTICK_SET_SNES_MODE= $395ce3 -BMP_LUT1_PICK = $391476 -NOT_KB_CLR_LSHIFT= $38191f -DOS_MOUNT = $394554 -UART_INIT = $395c39 -INSTRUMENT_BRASS1= $391855 +JOYSTICK_SET_SNES_MODE= $395d48 +BMP_LUT1_PICK = $3914c8 +NOT_KB_CLR_LSHIFT= 3676447 +DOS_MOUNT = $3945a6 +UART_INIT = $395c9e +INSTRUMENT_BRASS1= $3918a7 FNX1_INT05_MPU401= $20 -SERVICE_NEXT_IRQ4= $381764 -SERVICE_NEXT_IRQ7= $38178a -SERVICE_NEXT_IRQ6= $381777 -SERVICE_NEXT_IRQ1= $381731 -SERVICE_NEXT_IRQ3= $381753 -SERVICE_NEXT_IRQ2= $381742 -SERVICE_NEXT_IRQ8= $3817a5 +SERVICE_NEXT_IRQ4= 3676004 +SERVICE_NEXT_IRQ7= 3676042 +SERVICE_NEXT_IRQ6= 3676023 +SERVICE_NEXT_IRQ1= 3675953 +SERVICE_NEXT_IRQ3= 3675987 +SERVICE_NEXT_IRQ2= 3675970 +SERVICE_NEXT_IRQ8= 3676069 SIGNED_MULT_B_HI= $00010b -BCD2BIN = $3950d1 +BCD2BIN = $395128 OPL3_L_DPTH_RHYTM= $afe7bd BM1_X_OFFSET = $af010c SIGNED_MULT_B_LO= $00010a FDC_ST0_DRVSEL = $03 -MIDIW31_INSTRUMENT_PIPEORG= $39303b -KB_SET_ALT = $3819e9 -MIDI_INSTRUMENT_ICERAIN= $392bd7 -MIDI_INSTRUMENT_TAIKO= $392cc7 -INSTRUMENT_VLNPIZZ1= $392329 +MIDIW31_INSTRUMENT_PIPEORG= $39308d +KB_SET_ALT = 3676649 +MIDI_INSTRUMENT_ICERAIN= $392c29 +MIDI_INSTRUMENT_TAIKO= $392d19 +INSTRUMENT_VLNPIZZ1= $39237b FIRSTSECTOR = $38a004 STACKTOP = $000024 SP50_X_POS_H = $af0d95 @@ -2390,77 +2397,77 @@ SP50_X_POS_L = $af0d94 IKEYDOWN = $390704 TL1_WINDOW_X_POS_L= $af0214 TL1_WINDOW_X_POS_H= $af0215 -MIDIW31_INSTRUMENT_DISTGT= $3930bf -DRUMINS_TAIKO = $39265b -INIT_MOUSE = $3911c7 +MIDIW31_INSTRUMENT_DISTGT= $393111 +DRUMINS_TAIKO = $3926ad +INIT_MOUSE = $391206 OPL3_R_KON_BLOCK_FNumber= $afe6b0 -OPL2_Set_Percussion_Set= $39405f -OPL2_GET_REG_OFFSET= $3940b6 +OPL2_Set_Percussion_Set= $3940b1 +OPL2_GET_REG_OFFSET= $394108 FONT_MEMORY_BANK1= $af8800 FONT_MEMORY_BANK0= $af8000 SDCARD_STAT = $afe812 -INSTRUMENT_NOISE1= $391d3b -INSTRUMENT_LOGDRUM1= $391cb7 +INSTRUMENT_NOISE1= $391d8d +INSTRUMENT_LOGDRUM1= $391d09 RVECTOR_ERESET = $38fffc -fg_color_lut = $397025 +fg_color_lut = $39708a GABE_NOTUSED = $afe881 -FDC_Configure_Command= $3963e7 +FDC_Configure_Command= $39644c TL0_CONTROL_REG = $af0200 KB_NUM_LOCK = $02 ISETOUT = $39070f OPL2_REG_OFFSET = $00002a -MIDIW31_INSTRUMENT_POLYSYN= $39338f +MIDIW31_INSTRUMENT_POLYSYN= $3933e1 SP48_Y_POS_L = $af0d86 SP48_Y_POS_H = $af0d87 -MIDIW31_INSTRUMENT_HONKTONK= $392f7b +MIDIW31_INSTRUMENT_HONKTONK= $392fcd FDC_CMD_SCAN_LOW_OR_EQUAL= 25 OUT_BUF_FULL = $01 VECTOR_RESET = $38ffec BLOCK_COUNT = $000312 CHAR_DOWN = $91 KEYBD_INH = $10 -IRQHANDLESTUB = $3916e5 -OPL2_Set_Synthmode_Set= $393fe4 +IRQHANDLESTUB = $391737 +OPL2_Set_Synthmode_Set= $394036 STACK_BEGIN = $008000 -OPL2_INIT = $393797 -KB_TOG_NUMLOC2 = $381a18 -KB_TOG_NUMLOCK = $381a0d +OPL2_INIT = $3937e9 +KB_TOG_NUMLOC2 = 3676696 +KB_TOG_NUMLOCK = 3676685 GP35_REG = $af1138 GP57_REG = $af1146 RTC_CTRL = $af080e -MIDIW31_INSTRUMENT_MARIMBA= $392fe7 +MIDIW31_INSTRUMENT_MARIMBA= $393039 GETCHE = $001050 GETCHW = $00104c SP05_X_POS_L = $af0c2c SP05_X_POS_H = $af0c2d -MIDIW31_INSTRUMENT_PIANO1= $392f57 -MIDIW31_INSTRUMENT_PIANO3= $392f6f -MIDIW31_INSTRUMENT_PIANO2= $392f63 -UART_GETC = $395c81 -MIDI_INSTRUMENT_CLARINET= $392aab -MIDI_INSTRUMENT_SWEEPPAD= $392bcb -DOS_FREECLUS32 = $394e79 -OPL2_SET_SYNTHMODE= $393fae -DOS_FREECLUS12 = $394da1 -MIDIW31_INSTRUMENT_SOPSAX= $393257 +MIDIW31_INSTRUMENT_PIANO1= $392fa9 +MIDIW31_INSTRUMENT_PIANO3= $392fc1 +MIDIW31_INSTRUMENT_PIANO2= $392fb5 +UART_GETC = $395ce6 +MIDI_INSTRUMENT_CLARINET= $392afd +MIDI_INSTRUMENT_SWEEPPAD= $392c1d +DOS_FREECLUS32 = $394ed0 +OPL2_SET_SYNTHMODE= $394000 +DOS_FREECLUS12 = $394df8 +MIDIW31_INSTRUMENT_SOPSAX= $3932a9 DOS_ERR_NOFD = 22 VKY_TXT_START_ADD_PTR= $af0011 BM0_CONTROL_REG = $af0100 TILESET4_ADDY_CFG= $af0293 -MIDIW31_INSTRUMENT_SLAPBAS2= $393113 -MIDIW31_INSTRUMENT_SLAPBAS1= $393107 +MIDIW31_INSTRUMENT_SLAPBAS2= $393165 +MIDIW31_INSTRUMENT_SLAPBAS1= $393159 IDE_STAT_DRDY = $40 SMI_STS1_REG = $af1110 FAN2_REG = $af1157 CPUSTACK = $00024a -MIDI_INSTRUMENT_BAGPIPE= $392c73 -INSTRUMENT_CLAR2= $3918ad -INSTRUMENT_CLAR1= $391897 +MIDI_INSTRUMENT_BAGPIPE= $392cc5 +INSTRUMENT_CLAR2= $3918ff +INSTRUMENT_CLAR1= $3918e9 hdc_error = $3905e1 SP01_X_POS_H = $af0c0d SP01_X_POS_L = $af0c0c -MIDIW31_INSTRUMENT_BRASS1= $393233 -MIDI_INSTRUMENT_MARIMBA= $3927e7 +MIDIW31_INSTRUMENT_BRASS1= $393285 +MIDI_INSTRUMENT_MARIMBA= $392839 SP19_X_POS_L = $af0c9c SP19_X_POS_H = $af0c9d IDE_SECT_SRT = $afe833 @@ -2472,38 +2479,38 @@ fdc_error = $390602 RESETCODEC = $0010e0 SP34_CONTROL_REG= $af0d10 SP04_CONTROL_REG= $af0c20 -MIDIW31_INSTRUMENT_TELEPHON= $393527 +MIDIW31_INSTRUMENT_TELEPHON= $393579 BM_CLEAR_SCRN_X = $000040 BM_CLEAR_SCRN_Y = $000042 FNX3_INT02_IDE = $04 SP35_ADDY_PTR_M = $af0d1a SP35_ADDY_PTR_L = $af0d19 SP35_ADDY_PTR_H = $af0d1b -ISCROLLUP = $390a67 -MIDIW31_INSTRUMENT_CHIFLEAD= $39333b -FDC_MOTOR_NEEDED= $396278 -IINITSUPERIO = $390ff9 +ISCROLLUP = $390aa6 +MIDIW31_INSTRUMENT_CHIFLEAD= $39338d +FDC_MOTOR_NEEDED= $3962dd +IINITSUPERIO = $391038 TL1_WINDOW_Y_POS_L= $af0216 TL1_WINDOW_Y_POS_H= $af0217 -clr_text = $390ab6 +clr_text = $390af5 FDC_CMD_READ_DELETED_DATA= 12 CHAN_COM2 = 2 CHAN_COM1 = 1 -FDC_Write_Sector= $3965b2 -OPL2_SET_REGISTER= $393b58 +FDC_Write_Sector= $396617 +OPL2_SET_REGISTER= $393baa VEC_INT03_TMR1 = $00170c BLOCK_ADDR = $00030f -MIDI_INSTRUMENT_BANDNEON= $39286b -MIDIW31_INSTRUMENT_CELESTA= $392fb7 -MIDIW31_INSTRUMENT_STRINGS= $393197 -INSTRUMENT_SYNSNR2= $392187 -INSTRUMENT_SYNSNR1= $392171 -INSTRUMENT_ORGNPERC= $391dd5 -MIDIW31_INSTRUMENT_HELICOPT= $393533 +MIDI_INSTRUMENT_BANDNEON= $3928bd +MIDIW31_INSTRUMENT_CELESTA= $393009 +MIDIW31_INSTRUMENT_STRINGS= $3931e9 +INSTRUMENT_SYNSNR2= $3921d9 +INSTRUMENT_SYNSNR1= $3921c3 +INSTRUMENT_ORGNPERC= $391e27 +MIDIW31_INSTRUMENT_HELICOPT= $393585 SP40_CONTROL_REG= $af0d40 -icsrright_nowrap= $3909a0 +icsrright_nowrap= $3909df FNX2_INT05_GABE_INT2= $20 -INSTRUMENT_MOOGSYNT= $391d25 +INSTRUMENT_MOOGSYNT= $391d77 SP53_X_POS_H = $af0dad SP53_X_POS_L = $af0dac SP11_X_POS_L = $af0c5c @@ -2522,11 +2529,11 @@ VKY_LINE1_CMP_VALUE_HI= $af001f TL1_CONTROL_REG = $af020c MOUSE_PTR_Y_POS_L= $af0704 MOUSE_PTR_Y_POS_H= $af0705 -DRUMINS_HI_TOMS = $39244b -DOS_FINDFILE = $3949d2 +DRUMINS_HI_TOMS = $39249d +DOS_FINDFILE = $394a24 BM0_X_OFFSET = $af0104 -ICSRLEFT = $3909aa -NOT_KB_CLR_CTRL = $38193b +ICSRLEFT = $3909e9 +NOT_KB_CLR_CTRL = 3676475 F_LOAD = $001118 VKY_LINE1_CMP_VALUE_LO= $af001e SDC_TRANS_INIT_CMD0_ERR= $01 @@ -2537,34 +2544,34 @@ FNX0_INT02_TMR0 = $04 BM1_START_ADDY_H= $af010b BM1_START_ADDY_M= $af010a BM1_START_ADDY_L= $af0109 -MIDI_INSTRUMENT_RECORDER= $392acf +MIDI_INSTRUMENT_RECORDER= $392b21 BMP_COLOR_PALET = $00004c SP28_ADDY_PTR_M = $af0ce2 SP28_ADDY_PTR_L = $af0ce1 SP28_ADDY_PTR_H = $af0ce3 -TIMER0_INTERRUPT= $38182b -OPL2_SET_BLOCK = $393efc -OPL2_Set_MaintainSustain_Set= $393c58 +TIMER0_INTERRUPT= 3676203 +OPL2_SET_BLOCK = $393f4e +OPL2_Set_MaintainSustain_Set= $393caa SP00_ADDY_PTR_H = $af0c03 SP00_ADDY_PTR_M = $af0c02 SP00_ADDY_PTR_L = $af0c01 ISR_BEGIN = $38ff00 FAT2_BEGIN_LBA = $38a018 -MIDIW31_INSTRUMENT_FINGBASS= $3930e3 -MIDIW31_INSTRUMENT_ACOUBASS= $3930d7 -MIDI_INSTRUMENT_SYNCALLI= $392b2f +MIDIW31_INSTRUMENT_FINGBASS= $393135 +MIDIW31_INSTRUMENT_ACOUBASS= $393129 +MIDI_INSTRUMENT_SYNCALLI= $392b81 RAD_PTN_DEST = $000054 SP16_ADDY_PTR_H = $af0c83 SP16_ADDY_PTR_L = $af0c81 SP16_ADDY_PTR_M = $af0c82 -FDC_CHK_MEDIA = $396914 +FDC_CHK_MEDIA = $396979 IDE_CLDR_LO = $afe834 -MIDI_INSTRUMENT_GLOCK= $3927c3 +MIDI_INSTRUMENT_GLOCK= $392815 VDMA_CTRL_1D_2D = $02 -MIDI_INSTRUMENT_SITAR= $392c37 -LPT1_INTERRUPT = $3818ca +MIDI_INSTRUMENT_SITAR= $392c89 +LPT1_INTERRUPT = 3676362 IDE_CLDR_HI = $afe835 -DRUMINS_OP_TRNGL= $392613 +DRUMINS_OP_TRNGL= $392665 RVECTOR_EABORT = $38fff8 SP55_CONTROL_REG= $af0db8 BOOT_MENU = $39062c @@ -2575,24 +2582,24 @@ BMP_FILE_SIZE = $000050 REMAINDER = $000314 FDC_SECTOR = $000303 FD_STAT_OPEN = $38 -DELCLUSTER12 = $394f8a +DELCLUSTER12 = $394fe1 SP15_X_POS_H = $af0c7d SP15_X_POS_L = $af0c7c -DELCLUSTER32 = $394fd8 +DELCLUSTER32 = $39502f DOS_BUFF_PTR = $00033c DOS_STR2_PTR = $000368 RHABORT = $38ff30 -MIDI_INSTRUMENT_STRINGS= $392997 -MIDIW31_INSTRUMENT_HARPSIC= $392f9f +MIDI_INSTRUMENT_STRINGS= $3929e9 +MIDIW31_INSTRUMENT_HARPSIC= $392ff1 SP34_Y_POS_L = $af0d16 SP34_Y_POS_H = $af0d17 RTC_RATES = $af080b GABE_RNG_SEED_HI= $afe885 -MIDIW31_INSTRUMENT_FRETLESS= $3930fb -MIDIW31_INSTRUMENT_SOUNDTRK= $3933e3 +MIDIW31_INSTRUMENT_FRETLESS= $39314d +MIDIW31_INSTRUMENT_SOUNDTRK= $393435 LOADPBR = $000304 DOS_DIR_ENTRY_SIZE= 32 -FDC_COMMAND = $3960c8 +FDC_COMMAND = $39612d CSRDOWN = $00109c GABE_RNG_SEED_LO= $afe884 SP07_X_POS_L = $af0c3c @@ -2600,52 +2607,52 @@ SP07_X_POS_H = $af0c3d SP02_ADDY_PTR_M = $af0c12 SP02_ADDY_PTR_L = $af0c11 SP02_ADDY_PTR_H = $af0c13 -NEXTCLUSTER12 = $394c18 -NEXTCLUSTER32 = $394c80 +NEXTCLUSTER12 = $394c6f +NEXTCLUSTER32 = $394cd7 IRETURN = $390705 -DOS_APPENDCLUS = $395018 -DOS_HD_DESC = $394881 -MIDIW31_INSTRUMENT_BOTTLEB= $3932e7 +DOS_APPENDCLUS = $39506f +DOS_HD_DESC = $3948d3 +MIDIW31_INSTRUMENT_BOTTLEB= $393339 MCMD_LEN = $00025b -INSTRUMENT_BANJO1= $391763 +INSTRUMENT_BANJO1= $3917b5 FDC_ST0_EC = $08 DOS_STR1_PTR = $000364 -OPL2_GET_VOLUME = $393d4f +OPL2_GET_VOLUME = $393da1 SP17_CONTROL_REG= $af0c88 SID0_V1_SSTN_RLSE= $afe406 -DRUMINS_CLAP = $39241b +DRUMINS_CLAP = $39246d KB_CREDITS = $60 SDC_SD_ADDR_23_16_REG= $afea09 CHAN_CONSOLE = 0 -icsrleft_done_already_zero= $3909ca +icsrleft_done_already_zero= $390a09 GRPH_LUT3_PTR = $af2c00 -INSTRUMENT_HELICPTR= $391bdb +INSTRUMENT_HELICPTR= $391c2d SP20_ADDY_PTR_M = $af0ca2 SP20_ADDY_PTR_L = $af0ca1 SP20_ADDY_PTR_H = $af0ca3 -MIDIW31_INSTRUMENT_SYNVOX= $3931df -MIDI_INSTRUMENT_CLAVIC= $3927ab +MIDIW31_INSTRUMENT_SYNVOX= $393231 +MIDI_INSTRUMENT_CLAVIC= $3927fd SP03_CONTROL_REG= $af0c18 SDMA_CTRL0_SysRAM_Dst= $20 LSR_DATA_AVAIL = $01 -MIDI_INSTRUMENT_OBOE= $392a87 +MIDI_INSTRUMENT_OBOE= $392ad9 DOS_ERR_FILEEXISTS= 11 SP47_ADDY_PTR_H = $af0d7b SP47_ADDY_PTR_L = $af0d79 SP47_ADDY_PTR_M = $af0d7a SDCARD_BYTE_NUM = $00003c -MIDI_INSTRUMENT_STARTHEM= $392c2b +MIDI_INSTRUMENT_STARTHEM= $392c7d SDMA_XFER_VRAM2SRAM= $20 STACKBOT = $000022 -INSTRUMENT_ELORGAN1= $3919cb +INSTRUMENT_ELORGAN1= $391a1d FDC_SEEK_TIME = 2147727 -INSTRUMENT_SAX1 = $391f1f +INSTRUMENT_SAX1 = $391f71 FNX1_INT04_COM1 = $10 IDE_CMD_WRITE_SECTOR= $30 -MIDIW31_INSTRUMENT_BASSOON= $39329f +MIDIW31_INSTRUMENT_BASSOON= $3932f1 F_RUN = $001124 IDE_DATA_LO = $afe838 -MIDIW31_INSTRUMENT_CLARINET= $3932ab +MIDIW31_INSTRUMENT_CLARINET= $3932fd IDE_DATA_HI = $afe839 TILESET4_ADDY_M = $af0291 TILESET4_ADDY_L = $af0290 @@ -2653,61 +2660,62 @@ TILESET4_ADDY_H = $af0292 GABE_CTRL_WRM_RST= $80 TEST_BEGIN = $002000 GP12_REG = $af1125 -IBMP_PARSER_CONT= $39142b -IF_DIRWRITE = $395700 +IBMP_PARSER_CONT= $39147d +IF_DIRWRITE = $395757 FNX3_INT04_TBD = $10 FDC_CMD_WRITE_DATA= 5 CLEAR_MEM_LOOP = $390426 -MIDIW31_INSTRUMENT_HARMONIC= $39305f -OPL2_PLAYNOTE = $39394f +MIDIW31_INSTRUMENT_HARMONIC= $3930b1 +OPL2_PLAYNOTE = $3939a1 UINT_SLEEP_MODE = $10 BANK0_BEGIN = $000000 HIRQ = $38ff60 JMP_READY = $38ffe0 +SYS_C256_U = 2 TL2_CONTROL_REG = $af0218 -LBA2CHS = $396680 -IF_ALLOCFD = $395a18 +LBA2CHS = $3966e5 +IF_ALLOCFD = $395a7d F_COPY = $001130 -KB_SET_CTRL = $3819d7 -MIDIW31_INSTRUMENT_SAWWAV= $393323 +KB_SET_CTRL = 3676631 +MIDIW31_INSTRUMENT_SAWWAV= $393375 VDMA_CTRL_Start_TRF= $80 -ready_msg = $397268 +ready_msg = $3972cd SDC_TRANS_WR_CMD_ERR= $10 FDC_RESULT_NUM = $000532 SP23_Y_POS_H = $af0cbf SP23_Y_POS_L = $af0cbe -MPU401_INTERRUPT= $3818bf -MOUSE_INTERRUPT = $38185e -iprinth1 = $390ad9 +MPU401_INTERRUPT= 3676351 +MOUSE_INTERRUPT = 3676254 +iprinth1 = $390b18 FAN1_TACH_REG = $af1159 -MIDIW31_INSTRUMENT_ALTOSAX= $393263 +MIDIW31_INSTRUMENT_ALTOSAX= $3932b5 DOS_ERR_FAT = 6 -MIDI_INSTRUMENT_MUTEGT= $3928a7 -MIDIW31_INSTRUMENT_TAIKO= $3934c7 +MIDI_INSTRUMENT_MUTEGT= $3928f9 +MIDIW31_INSTRUMENT_TAIKO= $393519 SP53_CONTROL_REG= $af0da8 SDC_DIRECT_ACCESS_REG= $afea06 -IPRINTCR = $390917 -DRUMINS_LOWCONGA= $392547 +IPRINTCR = $390956 +DRUMINS_LOWCONGA= $392599 STATUS_PORT = $af1064 -IPRINTAI = $3916e0 -IPRINTAH = $390af4 +IPRINTAI = $391732 +IPRINTAH = $390b33 SP22_ADDY_PTR_H = $af0cb3 SP22_ADDY_PTR_M = $af0cb2 SP22_ADDY_PTR_L = $af0cb1 -bmp_parser_err0 = $39715b +bmp_parser_err0 = $3971c0 MOUSE_PTR_BYTE2 = $af0708 MOUSE_PTR_BYTE0 = $af0706 MOUSE_PTR_BYTE1 = $af0707 SP56_ADDY_PTR_L = $af0dc1 SP56_ADDY_PTR_M = $af0dc2 SP56_ADDY_PTR_H = $af0dc3 -MIDIW31_INSTRUMENT_BARISAX= $39327b +MIDIW31_INSTRUMENT_BARISAX= $3932cd SDC_SD_ADDR_7_0_REG= $afea07 FDC_MSR_NONDMA = $20 VECTOR_IRQ = $38ffee CSRLEFT = $001094 CHAR_LF = $0a -MIDI_INSTRUMENT_JAZZGT= $39288f +MIDI_INSTRUMENT_JAZZGT= $3928e1 HBRK = $38ff20 UNSIGNED_DIV_REM_LO= $000116 TMR1_SCLR = $02 @@ -2716,9 +2724,9 @@ CHAR_BS = $08 UNSIGNED_DIV_REM_HI= $000117 SETSIZES = $00112c RTC_DAY_ALARM = $af0807 -MIDI_INSTRUMENT_CONTRAB= $39295b +MIDI_INSTRUMENT_CONTRAB= $3929ad BPB_SECPERCLUS_OFF= 13 -IDE_HDD_Present_msg0= $397190 +IDE_HDD_Present_msg0= $3971f5 CHAR_F8 = $88 CHAR_F9 = $89 CHAR_F2 = $82 @@ -2728,40 +2736,40 @@ CHAR_F6 = $86 CHAR_F7 = $87 CHAR_F4 = $84 CHAR_F5 = $85 -MIDIW31_INSTRUMENT_CRYSTAL= $3933ef +MIDIW31_INSTRUMENT_CRYSTAL= $393441 TL3_CONTROL_REG = $af0224 -OPL2_GET_DECAY = $393dd7 -MIDI_INSTRUMENT_PIANO3= $39276f -MIDI_INSTRUMENT_PIANO2= $392763 -MIDI_INSTRUMENT_PIANO1= $392757 +OPL2_GET_DECAY = $393e29 +MIDI_INSTRUMENT_PIANO3= $3927c1 +MIDI_INSTRUMENT_PIANO2= $3927b5 +MIDI_INSTRUMENT_PIANO1= $3927a9 OPL3_L_AM_VID_EG_KSR_MULT= $afe720 -MIDIW31_INSTRUMENT_PANFLUTE= $3932db +MIDIW31_INSTRUMENT_PANFLUTE= $39332d SCREEN_PAGE0 = $afa000 SCREEN_PAGE1 = $afc000 SDC_RX_FIFO_CTRL_REG= $afea14 FDC_CMD_EIS = $40 -INSTRUMENT_PIANOBEL= $391ec7 -MIDIW31_INSTRUMENT_BANDNEON= $39306b -FDC_Recalibrate_Command= $3962f0 +INSTRUMENT_PIANOBEL= $391f19 +MIDIW31_INSTRUMENT_BANDNEON= $3930bd +FDC_Recalibrate_Command= $396355 VDMA_CONTROL_REG= $af0400 -OPL2_SET_FEEDBACK= $393f74 +OPL2_SET_FEEDBACK= $393fc6 RVECTOR_BRK = $38ffe6 CHAR_SP = $20 MASTER_CTRL_REG_L= $af0000 MASTER_CTRL_REG_H= $af0001 CHAR_UP = $11 -MIDI_INSTRUMENT_SHANNAI= $392c8b -ITRIM = $3916db -FDC_MOUNT = $3967a7 -FDC_Sense_Int_Status= $396325 +MIDI_INSTRUMENT_SHANNAI= $392cdd +ITRIM = $39172d +FDC_MOUNT = $39680c +FDC_Sense_Int_Status= $39638a Mstr_Ctrl_Bitmap_En= $08 -DRUMINS_HIHAT_CL= $39243f +DRUMINS_HIHAT_CL= $392491 RAD_ADDR = $000050 -DRUMINS_OP_CUICA= $3925fb +DRUMINS_OP_CUICA= $39264d COLS_PER_LINE = $000011 -programmerKey = $381a37 -MIDIW31_INSTRUMENT_NYLONGT= $393077 -MIDIW31_INSTRUMENT_RECORDER= $3932cf +programmerKey = 3676727 +MIDIW31_INSTRUMENT_NYLONGT= $3930c9 +MIDIW31_INSTRUMENT_RECORDER= $393321 CHAN_LPT = 3 BMP_X_SIZE = $000040 TL2_START_ADDY_M= $af021a @@ -2770,30 +2778,30 @@ TL2_START_ADDY_H= $af021b CREDIT_LOCK = $3905b0 BIOS_ERR_MOUNT = $81 PME_EN1_REG = $af110a -iputs3 = $390796 -iputs2 = $390792 -iputs1 = $39078d -DRUMINS_HIHAT_OP= $39246f +iputs3 = $39079f +iputs2 = $39079b +iputs1 = $390796 +DRUMINS_HIHAT_OP= $3924c1 LINES_MAX = $000015 GP15_REG = $af1128 -DRUMINS_HIHAT_PL= $392457 -MIDIW31_INSTRUMENT_CELLO= $39314f +DRUMINS_HIHAT_PL= $3924a9 +MIDIW31_INSTRUMENT_CELLO= $3931a1 SID0_V2_CTRL = $afe40b TIMERFLAGS = $000705 VECTOR_COP = $38ffe4 SDMA_CTRL0_SysRAM_Src= $10 -ilocate_right = $390a48 +ilocate_right = $390a87 SP26_CONTROL_REG= $af0cd0 RVECTOR_ECOP = $38fff4 Border_Ctrl_Enable= $01 RTC_MONTH = $af0809 -DOS_TESTBOOT = $39470f +DOS_TESTBOOT = $394761 SP49_Y_POS_L = $af0d8e SP49_Y_POS_H = $af0d8f -OPL2_Set_DeepVibrato_Exit= $39403c -MIDI_INSTRUMENT_AGOGO= $392ca3 -MIDI_INSTRUMENT_XYLO= $3927f3 -ILOOP = $3915e0 +OPL2_Set_DeepVibrato_Exit= $39408e +MIDI_INSTRUMENT_AGOGO= $392cf5 +MIDI_INSTRUMENT_XYLO= $392845 +ILOOP = $391632 VECTORS_END = $400000 FNX2_INT04_COL2 = $10 DOS_ERR_NOEXEC = 17 @@ -2802,51 +2810,51 @@ SP59_Y_POS_L = $af0dde SETIN = $001038 SDMA_Y_SIZE_L = $af042a SDMA_Y_SIZE_H = $af042b -FDC_Check_RQM = $395fcd +FDC_Check_RQM = $396032 F_DIRWRITE = $001114 SP48_CONTROL_REG= $af0d80 FNX0_INT01_SOL = $02 -KB_DONE = $381a34 +KB_DONE = 3676724 GAVIN_BLOCK = $000100 SP50_ADDY_PTR_H = $af0d93 SP50_ADDY_PTR_L = $af0d91 SP50_ADDY_PTR_M = $af0d92 -passAAtest = $391118 +passAAtest = $391157 PARITY_EVEN = $80 -MIDI_INSTRUMENT_FIDDLE= $392c7f -INSTRUMENT_VIOLIN1= $3922e7 -INSTRUMENT_VIOLIN3= $392313 -INSTRUMENT_VIOLIN2= $3922fd -MIDI_INSTRUMENT_BRASS1= $392a33 +MIDI_INSTRUMENT_FIDDLE= $392cd1 +INSTRUMENT_VIOLIN1= $392339 +INSTRUMENT_VIOLIN3= $392365 +INSTRUMENT_VIOLIN2= $39234f +MIDI_INSTRUMENT_BRASS1= $392a85 PART_TYPE_OFF = 4 -MIDI_INSTRUMENT_SOPSAX= $392a57 +MIDI_INSTRUMENT_SOPSAX= $392aa9 GP34_REG = $af1137 -INSTRUMENT_BNCEBASS= $39183f +INSTRUMENT_BNCEBASS= $391891 TL1_TOTAL_X_SIZE_L= $af0210 TL1_TOTAL_X_SIZE_H= $af0211 SP36_X_POS_L = $af0d24 SP36_X_POS_H = $af0d25 Mstr_Ctrl_Disable_Vid= $80 F_CREATE = $0010f4 -MIDI_INSTRUMENT_OCARINA= $392b0b -ICLRSCREEN = $390b42 +MIDI_INSTRUMENT_OCARINA= $392b5d +ICLRSCREEN = $390b81 KB_CAPS_LOCK = $04 OPL3_L_TEST = $afe701 -IGETS = $3916d8 -IGETB = $3916d7 +IGETS = $39172a +IGETB = $391729 RHCOP = $38ff10 -hex_digits = $39727c +hex_digits = $3972e1 FDC_CMD_LOCK = 20 INITCODEC = $0010dc OPL3_R_BASE_HL = $00af -BMP_PARSER_UPDATE_LOOP= $391540 +BMP_PARSER_UPDATE_LOOP= $391592 GP21_REG = $af112c OPL3_R_BASE_LL = $e600 TILESET1_ADDY_CFG= $af0287 -OPL2_SET_DECAY = $393db2 +OPL2_SET_DECAY = $393e04 SP38_X_POS_H = $af0d35 SP38_X_POS_L = $af0d34 -IDE_IDENTIFY = $396c56 +IDE_IDENTIFY = $396cbb DOS_ERR_NOTMBR = 2 GABE_SYS_STAT = $afe887 SNES1_DAT_HI0 = $afe80b @@ -2865,4 +2873,4 @@ SP09_ADDY_PTR_M = $af0c4a OPL2_BLOCK = $000036 SP31_Y_POS_H = $af0cff SP31_Y_POS_L = $af0cfe -ILOOP_MS = $391619 +ILOOP_MS = $39166b diff --git a/bin/Release/roms/kernel.lst b/bin/Release/roms/kernel.lst index 3e1bbea..e9150e4 100644 --- a/bin/Release/roms/kernel.lst +++ b/bin/Release/roms/kernel.lst @@ -1,18 +1,31 @@ ; 64tass Turbo Assembler Macro V1.54.1900 listing file -; 64tass --m65816 -D TARGET=1 --long-address --flat -b -o kernel.bin --list kernel.lst --labels=kernel.lbl src\kernel.asm -; Thu Dec 31 14:28:45 2020 +; 64tass --m65816 -D TARGET=1 -D TARGET_SYS=1 --long-address --flat -b -o kernel.bin --list kernel.lst --labels=kernel.lbl src\kernel.asm +; Mon Mar 08 16:50:10 2021 ;Offset ;PC ;Hex ;Monitor ;Source ;****** Command line definitions =1 TARGET=1 +=1 TARGET_SYS=1 ;****** Processing input file: src\kernel.asm -=1 TARGET_FLASH = 1 ; The code is being assembled for Flash -=2 TARGET_RAM = 2 ; The code is being assembled for RAM +=1 SYS_C256_FMX = 1 ; The target system is the C256 Foenix FMX +=2 SYS_C256_U = 2 ; The target system is the C256 Foenix U +=1 TARGET_FLASH = 1 ; The code is being assembled for Flash +=2 TARGET_RAM = 2 ; The code is being assembled for RAM +=0 START_OF_FLASH := 0 +=0 START_OF_KERNEL := 0 +=0 START_OF_BASIC := 0 +=0 START_OF_CREDITS := 0 +=0 START_OF_FONT := 0 +=$380000 START_OF_FLASH := $380000 ; The Foenix FMX Flash starts at $380000 +=$390400 START_OF_KERNEL := $390400 ; The kernel itself starts at $390400 +=$3a0000 START_OF_BASIC := $3A0000 ; The BASIC flash code starts at $3A0000 +=$3b0000 START_OF_CREDITS := $3B0000 ; The credits screen starts at $3B0000 +=$3f0000 START_OF_FONT := $3F0000 ; The font starts at $3F0000 ;****** Processing file: src\macros_inc.asm @@ -443,8 +456,8 @@ =$40 FNX0_INT06_FDC = $40 ;Floppy Disk Controller =$80 FNX0_INT07_MOUSE = $80 ; Mouse Interrupt (INT12 in SuperIO IOspace) =$01 FNX1_INT00_KBD = $01 ;Keyboard Interrupt -=$02 FNX1_INT01_SC0 = $02 ;VICKY_II (INT2) Sprite 2 Sprite Collision -=$04 FNX1_INT02_SC1 = $04 ;VICKY_II (INT3) Sprite 2 Tiles Collision +=$02 FNX1_INT01_COL0 = $02 ;VICKY_II (INT2) Sprite Collision +=$04 FNX1_INT02_COL1 = $04 ;VICKY_II (INT3) Bitmap Collision =$08 FNX1_INT03_COM2 = $08 ;Serial Port 2 =$10 FNX1_INT04_COM1 = $10 ;Serial Port 1 =$20 FNX1_INT05_MPU401 = $20 ;Midi Controller Interrupt @@ -453,8 +466,8 @@ =$01 FNX2_INT00_OPL3 = $01 ;OPl3 =$02 FNX2_INT01_GABE_INT0 = $02 ;GABE (INT0) - TBD =$04 FNX2_INT02_GABE_INT1 = $04 ;GABE (INT1) - TBD -=$08 FNX2_INT03_SDMA = $08 ;VICKY_II (INT4) -=$10 FNX2_INT04_VDMA = $10 ;VICKY_II (INT5) +=$08 FNX2_INT03_VDMA = $08 ;VICKY_II (INT4) - VDMA Interrupt +=$10 FNX2_INT04_COL2 = $10 ;VICKY_II (INT5) Tile Collision =$20 FNX2_INT05_GABE_INT2 = $20 ;GABE (INT2) - TBD =$40 FNX2_INT06_EXT = $40 ;External Expansion =$80 FNX2_INT07_SDCARD_INS = $80 ; SDCARD Insertion @@ -576,6 +589,7 @@ =$0a BM_LUT5 = $0A ; =$0c BM_LUT6 = $0C ; =$0e BM_LUT7 = $0E ; +=$40 BM_Collision_On = $40 ; =$af0100 BM0_CONTROL_REG = $AF0100 =$af0101 BM0_START_ADDY_L = $AF0101 =$af0102 BM0_START_ADDY_M = $AF0102 @@ -599,6 +613,7 @@ ;****** Processing file: src\VKYII_CFP9553_TILEMAP_def.asm =$01 TILE_Enable = $01 +=$40 TILE_Collision_On = $40 ; Enable =$af0200 TL0_CONTROL_REG = $AF0200 ; Bit[0] - Enable, Bit[3:1] - LUT Select, =$af0201 TL0_START_ADDY_L = $AF0201 ; Not USed right now - Starting Address to where is the MAP =$af0202 TL0_START_ADDY_M = $AF0202 @@ -650,7 +665,7 @@ =$af0280 TILESET0_ADDY_L = $AF0280 ; Pointer to Tileset 0 [21:0] =$af0281 TILESET0_ADDY_M = $AF0281 =$af0282 TILESET0_ADDY_H = $AF0282 -=$af0283 TILESET0_ADDY_CFG = $AF0283 ; [3] - TileStride256x256 [2:0] LUT +=$af0283 TILESET0_ADDY_CFG = $AF0283 ; [3] - TileStride256x256 =$af0284 TILESET1_ADDY_L = $AF0284 =$af0285 TILESET1_ADDY_M = $AF0285 =$af0286 TILESET1_ADDY_H = $AF0286 @@ -777,12 +792,12 @@ =$01 SPRITE_Enable = $01 =$00 SPRITE_LUT0 = $00 ; This is the LUT that the Sprite will use =$02 SPRITE_LUT1 = $02 -=$04 SPRITE_LUT2 = $04 ; Only 4 LUT for Now, So this bit is not used. -=$06 SPRITE_LUT3 = $06 ; Only 4 LUT for Now, So this bit is not used. -=$08 SPRITE_LUT4 = $08 ; Only 4 LUT for Now, So this bit is not used. -=$0a SPRITE_LUT5 = $0A ; Only 4 LUT for Now, So this bit is not used. -=$0c SPRITE_LUT6 = $0C ; Only 4 LUT for Now, So this bit is not used. -=$0e SPRITE_LUT7 = $0E ; Only 4 LUT for Now, So this bit is not used. +=$04 SPRITE_LUT2 = $04 +=$06 SPRITE_LUT3 = $06 +=$08 SPRITE_LUT4 = $08 +=$0a SPRITE_LUT5 = $0A +=$0c SPRITE_LUT6 = $0C +=$0e SPRITE_LUT7 = $0E =$00 SPRITE_DEPTH0 = $00 =$10 SPRITE_DEPTH1 = $10 =$20 SPRITE_DEPTH2 = $20 @@ -790,6 +805,7 @@ =$40 SPRITE_DEPTH4 = $40 =$50 SPRITE_DEPTH5 = $50 =$60 SPRITE_DEPTH6 = $60 +=$80 SPRITE_Collision_On = $80 ; Enable the Collision Detection =$af0c00 SP00_CONTROL_REG = $AF0C00 =$af0c01 SP00_ADDY_PTR_L = $AF0C01 =$af0c02 SP00_ADDY_PTR_M = $AF0C02 @@ -1744,86 +1760,86 @@ .381004 1004 5c ac 05 39 jmp $3905ac RESTORE JML IRESTORE .381008 1008 5c a4 06 39 jmp $3906a4 BREAK JML IBREAK .38100c 100c 5c eb 06 39 jmp $3906eb READY JML IREADY -.381010 1010 5c d1 16 39 jmp $3916d1 SCINIT JML ISCINIT -.381014 1014 5c d2 16 39 jmp $3916d2 IOINIT JML IIOINIT -.381018 1018 5c 9e 07 39 jmp $39079e PUTC JML IPUTC -.38101c 101c 5c 87 07 39 jmp $390787 PUTS JML IPUTS -.381020 1020 5c 16 09 39 jmp $390916 PUTB JML IPUTB -.381024 1024 5c b6 41 39 jmp $3941b6 PUTBLOCK JML IPUTBLOCK -.381028 1028 5c d3 16 39 jmp $3916d3 SETLFS JML ISETLFS -.38102c 102c 5c d4 16 39 jmp $3916d4 SETNAM JML ISETNAM -.381030 1030 5c d5 16 39 jmp $3916d5 OPEN JML IOPEN -.381034 1034 5c d6 16 39 jmp $3916d6 CLOSE JML ICLOSE +.381010 1010 5c 23 17 39 jmp $391723 SCINIT JML ISCINIT +.381014 1014 5c 24 17 39 jmp $391724 IOINIT JML IIOINIT +.381018 1018 5c a7 07 39 jmp $3907a7 PUTC JML IPUTC +.38101c 101c 5c 90 07 39 jmp $390790 PUTS JML IPUTS +.381020 1020 5c 55 09 39 jmp $390955 PUTB JML IPUTB +.381024 1024 5c 08 42 39 jmp $394208 PUTBLOCK JML IPUTBLOCK +.381028 1028 5c 25 17 39 jmp $391725 SETLFS JML ISETLFS +.38102c 102c 5c 26 17 39 jmp $391726 SETNAM JML ISETNAM +.381030 1030 5c 27 17 39 jmp $391727 OPEN JML IOPEN +.381034 1034 5c 28 17 39 jmp $391728 CLOSE JML ICLOSE .381038 1038 5c 06 07 39 jmp $390706 SETIN JML ISETIN .38103c 103c 5c 0f 07 39 jmp $39070f SETOUT JML ISETOUT -.381040 1040 5c d7 16 39 jmp $3916d7 GETB JML IGETB -.381044 1044 5c 53 41 39 jmp $394153 GETBLOCK JML IGETBLOCK -.381048 1048 5c 48 07 39 jmp $390748 GETCH JML IGETCH +.381040 1040 5c 29 17 39 jmp $391729 GETB JML IGETB +.381044 1044 5c a5 41 39 jmp $3941a5 GETBLOCK JML IGETBLOCK +.381048 1048 5c 54 07 39 jmp $390754 GETCH JML IGETCH .38104c 104c 5c 21 07 39 jmp $390721 GETCHW JML IGETCHW .381050 1050 5c 18 07 39 jmp $390718 GETCHE JML IGETCHE -.381054 1054 5c d8 16 39 jmp $3916d8 GETS JML IGETS -.381058 1058 5c d9 16 39 jmp $3916d9 GETLINE JML IGETLINE -.38105c 105c 5c da 16 39 jmp $3916da GETFIELD JML IGETFIELD -.381060 1060 5c db 16 39 jmp $3916db TRIM JML ITRIM -.381064 1064 5c dc 16 39 jmp $3916dc PRINTC JML IPRINTC -.381068 1068 5c dd 16 39 jmp $3916dd PRINTS JML IPRINTS -.38106c 106c 5c 17 09 39 jmp $390917 PRINTCR JML IPRINTCR -.381070 1070 5c de 16 39 jmp $3916de PRINTF JML IPRINTF -.381074 1074 5c df 16 39 jmp $3916df PRINTI JML IPRINTI -.381078 1078 5c d7 0a 39 jmp $390ad7 PRINTH JML IPRINTH -.38107c 107c 5c e0 16 39 jmp $3916e0 PRINTAI JML IPRINTAI -.381080 1080 5c f4 0a 39 jmp $390af4 PRINTAH JML IPRINTAH -.381084 1084 5c 1b 0a 39 jmp $390a1b LOCATE JML ILOCATE -.381088 1088 5c e1 16 39 jmp $3916e1 PUSHKEY JML IPUSHKEY -.38108c 108c 5c e2 16 39 jmp $3916e2 PUSHKEYS JML IPUSHKEYS -.381090 1090 5c 77 09 39 jmp $390977 CSRRIGHT JML ICSRRIGHT -.381094 1094 5c aa 09 39 jmp $3909aa CSRLEFT JML ICSRLEFT -.381098 1098 5c d0 09 39 jmp $3909d0 CSRUP JML ICSRUP -.38109c 109c 5c f6 09 39 jmp $3909f6 CSRDOWN JML ICSRDOWN -.3810a0 10a0 5c 66 09 39 jmp $390966 CSRHOME JML ICSRHOME -.3810a4 10a4 5c 67 0a 39 jmp $390a67 SCROLLUP JML ISCROLLUP -.3810a8 10a8 5c 42 0b 39 jmp $390b42 CLRSCREEN JML ICLRSCREEN -.3810ac 10ac 5c 0d 0c 39 jmp $390c0d INITCHLUT JML IINITCHLUT -.3810b0 10b0 5c f9 0f 39 jmp $390ff9 INITSUPERIO JML IINITSUPERIO -.3810b4 10b4 5c f8 10 39 jmp $3910f8 INITKEYBOARD JML IINITKEYBOARD -.3810b8 10b8 5c 63 12 39 jmp $391263 TESTSID JML ITESTSID -.3810bc 10bc 5c d8 0f 39 jmp $390fd8 INITCURSOR JML IINITCURSOR -.3810c0 10c0 5c a0 0f 39 jmp $390fa0 INITFONTSET JML IINITFONTSET -.3810c4 10c4 5c 3c 0c 39 jmp $390c3c INITGAMMATABLE JML IINITGAMMATABLE -.3810c8 10c8 5c 5c 0c 39 jmp $390c5c INITALLLUT JML IINITALLLUT -.3810cc 10cc 5c 1e 0d 39 jmp $390d1e INITVKYTXTMODE JML IINITVKYTXTMODE -.3810d0 10d0 5c 2b 0e 39 jmp $390e2b INITVKYGRPMODE JML IINITVKYGRPMODE -.3810d4 10d4 5c 62 0e 39 jmp $390e62 INITTILEMODE JML IINITTILEMODE -.3810d8 10d8 5c 63 0e 39 jmp $390e63 INITSPRITE JML IINITSPRITE -.3810dc 10dc 5c 32 13 39 jmp $391332 INITCODEC JML IINITCODEC -.3810e0 10e0 5c ae 13 39 jmp $3913ae RESETCODEC JML IRESETCODEC -.3810e4 10e4 5c 1c 14 39 jmp $39141c BMP_PARSER JML IBMP_PARSER -.3810e8 10e8 5c d1 13 39 jmp $3913d1 BM_FILL_SCREEN JML IBM_FILL_SCREEN -.3810ec 10ec 5c 5f 37 39 jmp $39375f OPL2_TONE_TEST JML IOPL2_TONE_TEST -.3810f0 10f0 5c 35 54 39 jmp $395435 F_OPEN JML IF_OPEN ; open a file for reading/writing/creating -.3810f4 10f4 5c c8 54 39 jmp $3954c8 F_CREATE JML IF_CREATE ; create a new file -.3810f8 10f8 5c 02 55 39 jmp $395502 F_CLOSE JML IF_CLOSE ; close a file (make sure last cluster is written) -.3810fc 10fc 5c 9b 55 39 jmp $39559b F_WRITE JML IF_WRITE ; write the current cluster to the file -.381100 1100 5c 36 55 39 jmp $395536 F_READ JML IF_READ ; read the next cluster from the file -.381104 1104 5c 45 56 39 jmp $395645 F_DELETE JML IF_DELETE ; delete a file / directory -.381108 1108 5c 07 56 39 jmp $395607 F_DIROPEN JML IF_DIROPEN ; open a directory and seek the first directory entry -.38110c 110c 5c 41 56 39 jmp $395641 F_DIRNEXT JML IF_DIRNEXT ; seek to the next directory of an open directory -.381110 1110 5c de 56 39 jmp $3956de F_DIRREAD JML IF_DIRREAD ; Read the directory entry for the specified file -.381114 1114 5c 05 57 39 jmp $395705 F_DIRWRITE JML IF_DIRWRITE ; Write any changes in the current directory cluster back to the drive -.381118 1118 5c 09 57 39 jmp $395709 F_LOAD JML IF_LOAD ; load a binary file into memory, supports multiple file formats -.38111c 111c 5c f9 58 39 jmp $3958f9 F_SAVE JML IF_SAVE ; Save memory to a binary file -.381120 1120 5c 29 41 39 jmp $394129 CMDBLOCK JML ICMDBLOCK ; Send a command to a block device -.381124 1124 5c 92 59 39 jmp $395992 F_RUN JML IF_RUN ; Load an run a binary file -.381128 1128 5c 54 45 39 jmp $394554 F_MOUNT JML DOS_MOUNT ; Mount the designated block device -.38112c 112c 5c 78 0d 39 jmp $390d78 SETSIZES JML ISETSIZES -.381130 1130 5c bb 5a 39 jmp $395abb F_COPY JML IF_COPY ; Copy a file -.381134 1134 5c 1d 5a 39 jmp $395a1d F_ALLOCFD JML IF_ALLOCFD ; Allocate a file descriptor -.381138 1138 5c 71 5a 39 jmp $395a71 F_FREEFD JML IF_FREEFD ; Free a file descriptor -.381700 1700 5c 13 6a 39 jmp $396a13 VEC_INT00_SOF JML FDC_TIME_HANDLE ; IRQ 0, 0 --- Start Of Frame interrupt -.381704 1704 5c e5 16 39 jmp $3916e5 VEC_INT01_SOL JML IRQHANDLESTUB ; IRQ 0, 1 --- Start Of Line interrupt -.381708 1708 5c e5 16 39 jmp $3916e5 VEC_INT02_TMR0 JML IRQHANDLESTUB ; IRQ 0, 2 --- Timer 0 interrupt -.38170c 170c 5c e5 16 39 jmp $3916e5 VEC_INT03_TMR1 JML IRQHANDLESTUB ; IRQ 0, 3 --- Timer 1 interrupt -.381710 1710 5c e5 16 39 jmp $3916e5 VEC_INT04_TMR2 JML IRQHANDLESTUB ; IRQ 0, 4 --- Timer 2 interrupt +.381054 1054 5c 2a 17 39 jmp $39172a GETS JML IGETS +.381058 1058 5c 2b 17 39 jmp $39172b GETLINE JML IGETLINE +.38105c 105c 5c 2c 17 39 jmp $39172c GETFIELD JML IGETFIELD +.381060 1060 5c 2d 17 39 jmp $39172d TRIM JML ITRIM +.381064 1064 5c 2e 17 39 jmp $39172e PRINTC JML IPRINTC +.381068 1068 5c 2f 17 39 jmp $39172f PRINTS JML IPRINTS +.38106c 106c 5c 56 09 39 jmp $390956 PRINTCR JML IPRINTCR +.381070 1070 5c 30 17 39 jmp $391730 PRINTF JML IPRINTF +.381074 1074 5c 31 17 39 jmp $391731 PRINTI JML IPRINTI +.381078 1078 5c 16 0b 39 jmp $390b16 PRINTH JML IPRINTH +.38107c 107c 5c 32 17 39 jmp $391732 PRINTAI JML IPRINTAI +.381080 1080 5c 33 0b 39 jmp $390b33 PRINTAH JML IPRINTAH +.381084 1084 5c 5a 0a 39 jmp $390a5a LOCATE JML ILOCATE +.381088 1088 5c 33 17 39 jmp $391733 PUSHKEY JML IPUSHKEY +.38108c 108c 5c 34 17 39 jmp $391734 PUSHKEYS JML IPUSHKEYS +.381090 1090 5c b6 09 39 jmp $3909b6 CSRRIGHT JML ICSRRIGHT +.381094 1094 5c e9 09 39 jmp $3909e9 CSRLEFT JML ICSRLEFT +.381098 1098 5c 0f 0a 39 jmp $390a0f CSRUP JML ICSRUP +.38109c 109c 5c 35 0a 39 jmp $390a35 CSRDOWN JML ICSRDOWN +.3810a0 10a0 5c a5 09 39 jmp $3909a5 CSRHOME JML ICSRHOME +.3810a4 10a4 5c a6 0a 39 jmp $390aa6 SCROLLUP JML ISCROLLUP +.3810a8 10a8 5c 81 0b 39 jmp $390b81 CLRSCREEN JML ICLRSCREEN +.3810ac 10ac 5c 4c 0c 39 jmp $390c4c INITCHLUT JML IINITCHLUT +.3810b0 10b0 5c 38 10 39 jmp $391038 INITSUPERIO JML IINITSUPERIO +.3810b4 10b4 5c 37 11 39 jmp $391137 INITKEYBOARD JML IINITKEYBOARD +.3810b8 10b8 5c a2 12 39 jmp $3912a2 TESTSID JML ITESTSID +.3810bc 10bc 5c 17 10 39 jmp $391017 INITCURSOR JML IINITCURSOR +.3810c0 10c0 5c df 0f 39 jmp $390fdf INITFONTSET JML IINITFONTSET +.3810c4 10c4 5c 7b 0c 39 jmp $390c7b INITGAMMATABLE JML IINITGAMMATABLE +.3810c8 10c8 5c 9b 0c 39 jmp $390c9b INITALLLUT JML IINITALLLUT +.3810cc 10cc 5c 5d 0d 39 jmp $390d5d INITVKYTXTMODE JML IINITVKYTXTMODE +.3810d0 10d0 5c 6a 0e 39 jmp $390e6a INITVKYGRPMODE JML IINITVKYGRPMODE +.3810d4 10d4 5c a1 0e 39 jmp $390ea1 INITTILEMODE JML IINITTILEMODE +.3810d8 10d8 5c a2 0e 39 jmp $390ea2 INITSPRITE JML IINITSPRITE +.3810dc 10dc 5c 71 13 39 jmp $391371 INITCODEC JML IINITCODEC +.3810e0 10e0 5c 00 14 39 jmp $391400 RESETCODEC JML IRESETCODEC +.3810e4 10e4 5c 6e 14 39 jmp $39146e BMP_PARSER JML IBMP_PARSER +.3810e8 10e8 5c 23 14 39 jmp $391423 BM_FILL_SCREEN JML IBM_FILL_SCREEN +.3810ec 10ec 5c b1 37 39 jmp $3937b1 OPL2_TONE_TEST JML IOPL2_TONE_TEST +.3810f0 10f0 5c 87 54 39 jmp $395487 F_OPEN JML IF_OPEN ; open a file for reading/writing/creating +.3810f4 10f4 5c 1a 55 39 jmp $39551a F_CREATE JML IF_CREATE ; create a new file +.3810f8 10f8 5c 54 55 39 jmp $395554 F_CLOSE JML IF_CLOSE ; close a file (make sure last cluster is written) +.3810fc 10fc 5c ed 55 39 jmp $3955ed F_WRITE JML IF_WRITE ; write the current cluster to the file +.381100 1100 5c 88 55 39 jmp $395588 F_READ JML IF_READ ; read the next cluster from the file +.381104 1104 5c 97 56 39 jmp $395697 F_DELETE JML IF_DELETE ; delete a file / directory +.381108 1108 5c 59 56 39 jmp $395659 F_DIROPEN JML IF_DIROPEN ; open a directory and seek the first directory entry +.38110c 110c 5c 93 56 39 jmp $395693 F_DIRNEXT JML IF_DIRNEXT ; seek to the next directory of an open directory +.381110 1110 5c 30 57 39 jmp $395730 F_DIRREAD JML IF_DIRREAD ; Read the directory entry for the specified file +.381114 1114 5c 57 57 39 jmp $395757 F_DIRWRITE JML IF_DIRWRITE ; Write any changes in the current directory cluster back to the drive +.381118 1118 5c 5b 57 39 jmp $39575b F_LOAD JML IF_LOAD ; load a binary file into memory, supports multiple file formats +.38111c 111c 5c 4b 59 39 jmp $39594b F_SAVE JML IF_SAVE ; Save memory to a binary file +.381120 1120 5c 7b 41 39 jmp $39417b CMDBLOCK JML ICMDBLOCK ; Send a command to a block device +.381124 1124 5c e4 59 39 jmp $3959e4 F_RUN JML IF_RUN ; Load an run a binary file +.381128 1128 5c a6 45 39 jmp $3945a6 F_MOUNT JML DOS_MOUNT ; Mount the designated block device +.38112c 112c 5c b7 0d 39 jmp $390db7 SETSIZES JML ISETSIZES +.381130 1130 5c 1b 5b 39 jmp $395b1b F_COPY JML IF_COPY ; Copy a file +.381134 1134 5c 7d 5a 39 jmp $395a7d F_ALLOCFD JML IF_ALLOCFD ; Allocate a file descriptor +.381138 1138 5c d1 5a 39 jmp $395ad1 F_FREEFD JML IF_FREEFD ; Free a file descriptor +.381700 1700 5c 73 6a 39 jmp $396a73 VEC_INT00_SOF JML FDC_TIME_HANDLE ; IRQ 0, 0 --- Start Of Frame interrupt +.381704 1704 5c 37 17 39 jmp $391737 VEC_INT01_SOL JML IRQHANDLESTUB ; IRQ 0, 1 --- Start Of Line interrupt +.381708 1708 5c 37 17 39 jmp $391737 VEC_INT02_TMR0 JML IRQHANDLESTUB ; IRQ 0, 2 --- Timer 0 interrupt +.38170c 170c 5c 37 17 39 jmp $391737 VEC_INT03_TMR1 JML IRQHANDLESTUB ; IRQ 0, 3 --- Timer 1 interrupt +.381710 1710 5c 37 17 39 jmp $391737 VEC_INT04_TMR2 JML IRQHANDLESTUB ; IRQ 0, 4 --- Timer 2 interrupt ;****** Return to file: src\kernel.asm @@ -2236,7 +2252,7 @@ .381a79 a9 80 lda #$80 LDA #KB_CTRL_C ; Flag that an interrupt key has been pressed .381a7b 85 8a sta $0f8a STA KEYFLAG ; The interpreter should see this soon and throw a BREAK .381a7d 60 rts RTS -.381a7e KBD_GETC +.381a7e KBD_GETCW .381a7e da phx PHX .381a7f 0b phd PHD .381a80 08 php PHP @@ -2256,7 +2272,7 @@ .381a98 d0 0a bne $381aa4 BNE check_buffer ; No: check the key buffer .381a9a a9 00 lda #$00 LDA #0 ; Yes: clear the flags .381a9c 8f 8a 0f 00 sta $000f8a STA @lKEYFLAG -.381aa0 22 8b 16 39 jsl $39168b JSL SHOW_CREDITS ; Then show the credits screen and wait for a key press +.381aa0 22 dd 16 39 jsl $3916dd JSL SHOW_CREDITS ; Then show the credits screen and wait for a key press .381aa4 a6 8b ldx $0f8b check_buffer LDX KEY_BUFFER_RPOS ; Is KEY_BUFFER_RPOS < KEY_BUFFER_WPOS .381aa6 e4 8d cpx $0f8d CPX KEY_BUFFER_WPOS .381aa8 90 02 bcc $381aac BCC read_buff ; Yes: a key is present, read it @@ -2275,6 +2291,40 @@ .381abb 64 8b stz $0f8b reset_indexes STZ KEY_BUFFER_RPOS ; Reset read index to the beginning .381abd 64 8d stz $0f8d STZ KEY_BUFFER_WPOS ; Reset the write index to the beginning .381abf 80 f6 bra $381ab7 BRA done +.381ac1 KBD_GETC +.381ac1 da phx PHX +.381ac2 0b phd PHD +.381ac3 08 php PHP +.381ac4 48 pha PHA ; begin setdp macro +.381ac5 08 php PHP +.381ac6 c2 20 rep #$20 REP #$20 ; set A long +.381ac8 a9 00 0f lda #$0f00 LDA #KEY_BUFFER ; set DP to page 0 +.381acb 5b tcd TCD +.381acc 28 plp PLP +.381acd 68 pla PLA ; end setdp macro +.381ace e2 20 sep #$20 SEP #$20 ; set A short +.381ad0 c2 10 rep #$10 REP #$10 ; set X long +.381ad2 58 cli CLI ; Make sure interrupts can happen +.381ad3 a6 8b ldx $0f8b check_buffer LDX KEY_BUFFER_RPOS ; Is KEY_BUFFER_RPOS < KEY_BUFFER_WPOS +.381ad5 e4 8d cpx $0f8d CPX KEY_BUFFER_WPOS +.381ad7 90 05 bcc $381ade BCC read_buff ; Yes: a key is present, read it +.381ad9 a9 00 lda #$00 LDA #0 ; If no key, return zero and set carry bit +.381adb 38 sec SEC +.381adc 80 0b bra $381ae9 BRA done +.381ade 78 sei read_buff SEI ; Don't interrupt me! +.381adf b5 00 lda $0f00,x LDA KEY_BUFFER,X ; Get the key +.381ae1 e8 inx INX ; And move to the next key +.381ae2 e4 8d cpx $0f8d CPX KEY_BUFFER_WPOS ; Did we just read the last key? +.381ae4 f0 07 beq $381aed BEQ reset_indexes ; Yes: return to 0 position +.381ae6 86 8b stx $0f8b STX KEY_BUFFER_RPOS ; Otherwise: Update the read index +.381ae8 58 cli CLI +.381ae9 28 plp done PLP ; Restore status and interrupts +.381aea 2b pld PLD +.381aeb fa plx PLX +.381aec 6b rtl RTL +.381aed 64 8b stz $0f8b reset_indexes STZ KEY_BUFFER_RPOS ; Reset read index to the beginning +.381aef 64 8d stz $0f8d STZ KEY_BUFFER_WPOS ; Reset the write index to the beginning +.381af1 80 f6 bra $381ae9 BRA done ;****** Return to file: src\kernel.asm @@ -2314,7 +2364,7 @@ .390445 8f 4d 01 00 sta $00014d STA @lINT_MASK_REG1 .390449 8f 4e 01 00 sta $00014e STA @lINT_MASK_REG2 .39044d 8f 4f 01 00 sta $00014f STA @lINT_MASK_REG3 -.390451 22 48 12 39 jsl $391248 JSL INITRTC ; Initialize the RTC +.390451 22 87 12 39 jsl $391287 JSL INITRTC ; Initialize the RTC .390455 c2 30 rep #$30 REP #$30 ; set A&X long .390457 a9 00 a0 lda #$a000 LDA #<>SCREEN_PAGE0 ; store the initial screen buffer location .39045a 85 0c sta $0c STA SCREENBEGIN @@ -2354,24 +2404,24 @@ .3904b1 22 c4 10 00 jsl $0010c4 JSL INITGAMMATABLE .3904b5 22 c8 10 00 jsl $0010c8 JSL INITALLLUT .3904b9 22 ac 10 00 jsl $0010ac JSL INITCHLUT -.3904bd 22 b9 0f 39 jsl $390fb9 JSL INITMOUSEPOINTER +.3904bd 22 f8 0f 39 jsl $390ff8 JSL INITMOUSEPOINTER .3904c1 22 bc 10 00 jsl $0010bc JSL INITCURSOR .3904c5 22 cc 10 00 jsl $0010cc JSL INITVKYTXTMODE -.3904c9 22 a0 0f 39 jsl $390fa0 JSL IINITFONTSET -.3904cd 22 42 0b 39 jsl $390b42 JSL ICLRSCREEN ; Clear Screen and Set a standard color in Color Memory +.3904c9 22 df 0f 39 jsl $390fdf JSL IINITFONTSET +.3904cd 22 81 0b 39 jsl $390b81 JSL ICLRSCREEN ; Clear Screen and Set a standard color in Color Memory .3904d1 a9 01 00 lda #$0001 LDA #CHAN_COM1 ; Initialize COM1 -.3904d4 22 d2 5b 39 jsl $395bd2 JSL UART_SELECT -.3904d8 22 3e 5c 39 jsl $395c3e JSL UART_INIT +.3904d4 22 32 5c 39 jsl $395c32 JSL UART_SELECT +.3904d8 22 9e 5c 39 jsl $395c9e JSL UART_INIT .3904dc a9 02 00 lda #$0002 LDA #CHAN_COM2 ; Initialize COM2 -.3904df 22 d2 5b 39 jsl $395bd2 JSL UART_SELECT -.3904e3 22 3e 5c 39 jsl $395c3e JSL UART_INIT +.3904df 22 32 5c 39 jsl $395c32 JSL UART_SELECT +.3904e3 22 9e 5c 39 jsl $395c9e JSL UART_INIT .3904e7 a9 00 00 lda #$0000 LDA #0 .3904ea 22 38 10 00 jsl $001038 JSL SETIN .3904ee 22 3c 10 00 jsl $00103c JSL SETOUT .3904f2 c2 20 rep #$20 REP #$20 ; set A long .3904f4 a2 00 00 ldx #$0000 LDX #0 .3904f7 a0 00 00 ldy #$0000 LDY #0 -.3904fa 22 1b 0a 39 jsl $390a1b JSL ILOCATE +.3904fa 22 5a 0a 39 jsl $390a5a JSL ILOCATE .3904fe c2 30 rep #$30 REP #$30 ; set A&X long .390500 greet .390500 48 pha PHA ; begin setdbr macro @@ -2382,9 +2432,9 @@ .390507 ab plb PLB .390508 28 plp PLP .390509 68 pla PLA ; end setdbr macro -.39050a a2 13 6e ldx #$6e13 LDX #<>greet_msg -.39050d 22 7e 07 39 jsl $39077e JSL IPRINT ; print the first line -.390511 22 8d 0b 39 jsl $390b8d JSL ICOLORFLAG ; This is to set the Color Memory for the Logo +.39050a a2 73 6e ldx #$6e73 LDX #<>greet_msg +.39050d 22 87 07 39 jsl $390787 JSL IPRINT ; print the first line +.390511 22 cc 0b 39 jsl $390bcc JSL ICOLORFLAG ; This is to set the Color Memory for the Logo .390515 48 pha PHA ; begin setdp macro .390516 08 php PHP .390517 c2 20 rep #$20 REP #$20 ; set A long @@ -2410,7 +2460,7 @@ .39054b a9 90 lda #$90 LDA #$90 ; Channel One - No Atteniation .39054d 8f 00 f1 af sta $aff100 STA $AFF100 .390551 a2 00 40 ldx #$4000 LDX #16384 ; 400ms -.390554 22 19 16 39 jsl $391619 JSL ILOOP_MS +.390554 22 6b 16 39 jsl $39166b JSL ILOOP_MS .390558 a9 9f lda #$9f LDA #$9F ; Channel Two - No Atteniation .39055a 8f 00 f1 af sta $aff100 STA $AFF100 .39055e 58 cli CLI ; Make sure no Interrupt will come and fuck up Init before this point. @@ -2430,7 +2480,7 @@ .390578 e8 inx INX .390579 e0 00 10 cpx #$1000 CPX #$1000 .39057c d0 f2 bne $390570 BNE jmpcopy -.39057e 22 82 44 39 jsl $394482 retry_boot JSL DOS_INIT ; Initialize the "disc operating system" +.39057e 22 d4 44 39 jsl $3944d4 retry_boot JSL DOS_INIT ; Initialize the "disc operating system" .390582 22 2c 06 39 jsl $39062c JSL BOOT_MENU ; Show the splash screen / boot menu and wait for key presses .390586 c9 20 cmp #$20 CMP #CHAR_SP ; Did the user press SPACE? .390588 f0 10 beq $39059a BEQ BOOT_DIP ; Yes: boot via the DIP switches @@ -2458,35 +2508,35 @@ .3905b3 e2 20 sep #$20 SEP #$20 ; set A short .3905b5 a9 02 lda #$02 LDA #BIOS_DEV_SD .3905b7 8f 21 03 00 sta $000321 STA @l BIOS_DEV -.3905bb 22 54 45 39 jsl $394554 JSL DOS_MOUNT ; Mount the SDC +.3905bb 22 a6 45 39 jsl $3945a6 JSL DOS_MOUNT ; Mount the SDC .3905bf 90 06 bcc $3905c7 BCC sdc_error ; Print an error message if couldn't get anything -.3905c1 22 0f 47 39 jsl $39470f JSL DOS_TESTBOOT ; Try to boot from the SDC's MBR +.3905c1 22 61 47 39 jsl $394761 JSL DOS_TESTBOOT ; Try to boot from the SDC's MBR .3905c5 80 e5 bra $3905ac BRA BOOTBASIC ; If we couldn't fall, into BASIC -.3905c7 a2 f1 71 ldx #$71f1 sdc_error LDX #<>sdc_err_boot ; Print a message saying SD card booting is not implemented +.3905c7 a2 51 72 ldx #$7251 sdc_error LDX #<>sdc_err_boot ; Print a message saying SD card booting is not implemented .3905ca 80 39 bra $390605 BRA PR_BOOT_ERROR .3905cc BOOTIDE .3905cc e2 20 sep #$20 SEP #$20 ; set A short .3905ce a9 06 lda #$06 LDA #BIOS_DEV_HD0 .3905d0 8f 21 03 00 sta $000321 STA @l BIOS_DEV -.3905d4 22 54 45 39 jsl $394554 JSL DOS_MOUNT ; Mount the IDE drive +.3905d4 22 a6 45 39 jsl $3945a6 JSL DOS_MOUNT ; Mount the IDE drive .3905d8 90 07 bcc $3905e1 BCC hdc_error ; Print an error message if couldn't get anything -.3905da 22 0f 47 39 jsl $39470f JSL DOS_TESTBOOT ; Try to boot from the IDE's MBR +.3905da 22 61 47 39 jsl $394761 JSL DOS_TESTBOOT ; Try to boot from the IDE's MBR .3905de 82 cb ff brl $3905ac BRL BOOTBASIC ; If we couldn't fall, into BASIC -.3905e1 a2 0d 72 ldx #$720d hdc_error LDX #<>ide_err_boot ; Print a message saying SD card booting is not implemented +.3905e1 a2 6d 72 ldx #$726d hdc_error LDX #<>ide_err_boot ; Print a message saying SD card booting is not implemented .3905e4 80 1f bra $390605 BRA PR_BOOT_ERROR -.3905e6 a2 56 72 ldx #$7256 BOOTFLOPPY LDX #<>fdc_boot -.3905e9 22 7e 07 39 jsl $39077e JSL IPRINT +.3905e6 a2 b6 72 ldx #$72b6 BOOTFLOPPY LDX #<>fdc_boot +.3905e9 22 87 07 39 jsl $390787 JSL IPRINT .3905ed e2 20 sep #$20 SEP #$20 ; set A short .3905ef a9 00 lda #$00 LDA #BIOS_DEV_FDC .3905f1 8f 21 03 00 sta $000321 STA @l BIOS_DEV -.3905f5 22 ac 67 39 jsl $3967ac JSL FDC_MOUNT ; Mount the floppy drive +.3905f5 22 0c 68 39 jsl $39680c JSL FDC_MOUNT ; Mount the floppy drive .3905f9 90 07 bcc $390602 BCC fdc_error ; Print an error message if couldn't get anything -.3905fb 22 0f 47 39 jsl $39470f JSL DOS_TESTBOOT ; Try to boot from the FDC's MBR +.3905fb 22 61 47 39 jsl $394761 JSL DOS_TESTBOOT ; Try to boot from the FDC's MBR .3905ff 82 aa ff brl $3905ac BRL BOOTBASIC ; If we couldn't, fall into BASIC -.390602 a2 30 72 ldx #$7230 fdc_error LDX #<>fdc_err_boot ; Print a message saying SD card booting is not implemented -.390605 22 7e 07 39 jsl $39077e PR_BOOT_ERROR JSL IPRINT ; Print the error message in X -.390609 a2 cc 71 ldx #$71cc LDX #<>boot_retry ; Print the boot retry prompt -.39060c 22 7e 07 39 jsl $39077e JSL IPRINT +.390602 a2 90 72 ldx #$7290 fdc_error LDX #<>fdc_err_boot ; Print a message saying SD card booting is not implemented +.390605 22 87 07 39 jsl $390787 PR_BOOT_ERROR JSL IPRINT ; Print the error message in X +.390609 a2 2c 72 ldx #$722c LDX #<>boot_retry ; Print the boot retry prompt +.39060c 22 87 07 39 jsl $390787 JSL IPRINT .390610 22 21 07 39 jsl $390721 boot_wait_key JSL IGETCHW ; Wait for a keypress .390614 c9 52 cmp #$52 CMP #'R' ; Was "R" pressed? .390616 d0 03 bne $39061b BNE chk_r_lc @@ -2513,7 +2563,7 @@ .39063f a0 e8 03 ldy #$03e8 LDY #1000 ; Number of cycles we'll wait... total wait time is about 30s (ish) .390642 e2 20 sep #$20 SEP #$20 ; set A short .390644 a2 e8 03 ldx #$03e8 wait_key LDX #1000 -.390647 22 19 16 39 jsl $391619 JSL ILOOP_MS ; Wait ... +.390647 22 6b 16 39 jsl $39166b JSL ILOOP_MS ; Wait ... .39064b 88 dey DEY ; Count down the tenths of seconds .39064c f0 1c beq $39066a BEQ timeout ; If we've got to 0, we're done .39064e 22 48 10 00 jsl $001048 JSL GETCH ; Try to get a character @@ -2580,8 +2630,8 @@ .3906f3 28 plp PLP .3906f4 68 pla PLA ; end setdbr macro .3906f5 e2 20 sep #$20 SEP #$20 ; set A short -.3906f7 a2 6d 72 ldx #$726d LDX #<>ready_msg -.3906fa 22 7e 07 39 jsl $39077e JSL IPRINT +.3906f7 a2 cd 72 ldx #$72cd LDX #<>ready_msg +.3906fa 22 87 07 39 jsl $390787 JSL IPRINT .3906fe IREADYWAIT .3906fe 22 18 07 39 jsl $390718 JSL IGETCHE .390702 80 fa bra $3906fe BRA IREADYWAIT @@ -2598,1858 +2648,1909 @@ .390716 28 plp PLP .390717 6b rtl RTL .390718 22 21 07 39 jsl $390721 IGETCHE JSL IGETCHW -.39071c 22 9e 07 39 jsl $39079e JSL IPUTC +.39071c 22 a7 07 39 jsl $3907a7 JSL IPUTC .390720 6b rtl RTL .390721 IGETCHW -.390721 08 php PHP -.390722 e2 20 sep #$20 SEP #$20 ; set A short -.390724 af 04 07 00 lda $000704 LDA @lCHAN_IN ; Get the current input channel -.390728 f0 17 beq $390741 BEQ getc_keyboard ; If it's keyboard, read from the key buffer -.39072a c9 01 cmp #$01 CMP #CHAN_COM1 ; Check to see if it's the COM1 port -.39072c f0 09 beq $390737 BEQ getc_uart ; Yes: handle reading from the UART -.39072e c9 02 cmp #$02 CMP #CHAN_COM2 ; Check to see if it's the COM2 port -.390730 f0 05 beq $390737 BEQ getc_uart ; Yes: handle reading from the UART -.390732 a9 00 lda #$00 LDA #0 ; Return 0 if no valid device -.390734 28 plp PLP -.390735 38 sec SEC ; And return carry set -.390736 6b rtl RTL -.390737 22 d2 5b 39 jsl $395bd2 getc_uart JSL UART_SELECT ; Select the correct COM port -.39073b 22 86 5c 39 jsl $395c86 JSL UART_GETC ; Get the charater from the COM port -.39073f 80 04 bra $390745 BRA done -.390741 22 7e 1a 38 jsl $381a7e getc_keyboard JSL KBD_GETC ; Get the character from the keyboard -.390745 28 plp done PLP -.390746 18 clc CLC ; Return carry clear for valid data -.390747 6b rtl RTL -.390748 IGETCH -.390748 da phx PHX -.390749 5a phy PHY -.39074a 8b phb PHB -.39074b 0b phd PHD -.39074c 08 php PHP -.39074d 48 pha PHA ; begin setdbr macro -.39074e 08 php PHP -.39074f e2 20 sep #$20 SEP #$20 ; set A short -.390751 a9 00 lda #$00 LDA #0 -.390753 48 pha PHA -.390754 ab plb PLB -.390755 28 plp PLP -.390756 68 pla PLA ; end setdbr macro -.390757 e2 20 sep #$20 SEP #$20 ; set A short -.390759 ad 04 07 lda $0704 LDA @w CHAN_IN ; Check the channel -.39075c c9 00 cmp #$00 CMP #CHAN_CONSOLE ; Is it the console -.39075e f0 03 beq $390763 BEQ getch_console ; Yes: dispatch on the console -.390760 82 10 00 brl $390773 BRL ret_nothing ; Unhandled device: return 0 -.390763 getch_console -.390763 c2 20 rep #$20 REP #$20 ; set A long -.390765 ad 8b 0f lda $0f8b LDA @w KEY_BUFFER_RPOS ; Is KEY_BUFFER_RPOS < KEY_BUFFER_WPOS -.390768 cd 8d 0f cmp $0f8d CMP @w KEY_BUFFER_WPOS -.39076b b0 06 bcs $390773 BCS ret_nothing ; No: there's nothing ready yet... return 0 -.39076d 22 4c 10 00 jsl $00104c JSL GETCHW ; Otherwise: retrieve the character -.390771 80 05 bra $390778 BRA done ; And return it -.390773 ret_nothing -.390773 c2 20 rep #$20 REP #$20 ; set A long -.390775 a9 00 00 lda #$0000 LDA #0 ; Return 0 for no key -.390778 28 plp done PLP -.390779 2b pld PLD -.39077a ab plb PLB -.39077b 7a ply PLY -.39077c fa plx PLX -.39077d 6b rtl RTL -.39077e 22 87 07 39 jsl $390787 IPRINT JSL IPUTS -.390782 22 17 09 39 jsl $390917 JSL IPRINTCR +.390721 da phx PHX +.390722 5a phy PHY +.390723 8b phb PHB +.390724 0b phd PHD +.390725 08 php PHP +.390726 e2 20 sep #$20 SEP #$20 ; set A short +.390728 af 04 07 00 lda $000704 LDA @lCHAN_IN ; Get the current input channel +.39072c f0 1b beq $390749 BEQ getc_keyboard ; If it's keyboard, read from the key buffer +.39072e c9 01 cmp #$01 CMP #CHAN_COM1 ; Check to see if it's the COM1 port +.390730 f0 0d beq $39073f BEQ getc_uart ; Yes: handle reading from the UART +.390732 c9 02 cmp #$02 CMP #CHAN_COM2 ; Check to see if it's the COM2 port +.390734 f0 09 beq $39073f BEQ getc_uart ; Yes: handle reading from the UART +.390736 a9 00 lda #$00 LDA #0 ; Return 0 if no valid device +.390738 28 plp PLP +.390739 38 sec SEC ; And return carry set +.39073a 2b pld PLD +.39073b ab plb PLB +.39073c 7a ply PLY +.39073d fa plx PLX +.39073e 6b rtl RTL +.39073f 22 32 5c 39 jsl $395c32 getc_uart JSL UART_SELECT ; Select the correct COM port +.390743 22 e6 5c 39 jsl $395ce6 JSL UART_GETC ; Get the charater from the COM port +.390747 80 04 bra $39074d BRA done +.390749 22 7e 1a 38 jsl $381a7e getc_keyboard JSL KBD_GETCW ; Get the character from the keyboard +.39074d 28 plp done PLP +.39074e 18 clc CLC ; Return carry clear for valid data +.39074f 2b pld PLD +.390750 ab plb PLB +.390751 7a ply PLY +.390752 fa plx PLX +.390753 6b rtl RTL +.390754 IGETCH +.390754 da phx PHX +.390755 5a phy PHY +.390756 8b phb PHB +.390757 0b phd PHD +.390758 08 php PHP +.390759 e2 20 sep #$20 SEP #$20 ; set A short +.39075b af 04 07 00 lda $000704 LDA @lCHAN_IN ; Get the current input channel +.39075f f0 1b beq $39077c BEQ getc_keyboard ; If it's keyboard, read from the key buffer +.390761 c9 01 cmp #$01 CMP #CHAN_COM1 ; Check to see if it's the COM1 port +.390763 f0 0d beq $390772 BEQ getc_uart ; Yes: handle reading from the UART +.390765 c9 02 cmp #$02 CMP #CHAN_COM2 ; Check to see if it's the COM2 port +.390767 f0 09 beq $390772 BEQ getc_uart ; Yes: handle reading from the UART +.390769 a9 00 lda #$00 LDA #0 ; Return 0 if no valid device +.39076b 28 plp PLP +.39076c 38 sec SEC ; And return carry set +.39076d 2b pld PLD +.39076e ab plb PLB +.39076f 7a ply PLY +.390770 fa plx PLX +.390771 6b rtl RTL +.390772 22 32 5c 39 jsl $395c32 getc_uart JSL UART_SELECT ; Select the correct COM port +.390776 22 e6 5c 39 jsl $395ce6 JSL UART_GETC ; Get the charater from the COM port +.39077a 80 04 bra $390780 BRA done +.39077c 22 c1 1a 38 jsl $381ac1 getc_keyboard JSL KBD_GETC ; Get the character from the keyboard +.390780 28 plp done PLP +.390781 18 clc CLC ; Return carry clear for valid data +.390782 2b pld PLD +.390783 ab plb PLB +.390784 7a ply PLY +.390785 fa plx PLX .390786 6b rtl RTL -.390787 48 pha IPUTS PHA -.390788 08 php PHP -.390789 e2 20 sep #$20 SEP #$20 ; set A short -.39078b c2 10 rep #$10 REP #$10 ; set X long -.39078d bd 00 00 lda $0000,x iputs1 LDA $0,b,x ; read from the string -.390790 f0 08 beq $39079a BEQ iputs_done -.390792 22 9e 07 39 jsl $39079e iputs2 JSL IPUTC -.390796 e8 inx iputs3 INX -.390797 4c 8d 07 jmp $39078d JMP iputs1 -.39079a e8 inx iputs_done INX -.39079b 28 plp PLP -.39079c 68 pla PLA -.39079d 6b rtl RTL -.39079e IPUTC -.39079e da phx PHX -.39079f 5a phy PHY -.3907a0 0b phd PHD -.3907a1 8b phb PHB -.3907a2 08 php PHP ; stash the flags (we'll be changing M) -.3907a3 48 pha PHA ; begin setdp macro -.3907a4 08 php PHP -.3907a5 c2 20 rep #$20 REP #$20 ; set A long -.3907a7 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 -.3907aa 5b tcd TCD -.3907ab 28 plp PLP -.3907ac 68 pla PLA ; end setdp macro -.3907ad 48 pha PHA ; begin setdbr macro -.3907ae 08 php PHP -.3907af e2 20 sep #$20 SEP #$20 ; set A short -.3907b1 a9 00 lda #$00 LDA #0 -.3907b3 48 pha PHA -.3907b4 ab plb PLB -.3907b5 28 plp PLP -.3907b6 68 pla PLA ; end setdbr macro -.3907b7 e2 20 sep #$20 SEP #$20 ; set A short -.3907b9 c2 10 rep #$10 REP #$10 ; set X long -.3907bb 48 pha PHA ; Save the character to print -.3907bc af 03 07 00 lda $000703 LDA @lCHAN_OUT ; Check the output channel # -.3907c0 f0 16 beq $3907d8 BEQ putc_screen ; If it's 0: print to the screen -.3907c2 c9 01 cmp #$01 CMP #CHAN_COM1 ; Check to see if it's the COM1 port -.3907c4 f0 07 beq $3907cd BEQ putc_uart ; Yes: handle printing to the UART -.3907c6 c9 02 cmp #$02 CMP #CHAN_COM2 ; Check to see if it's the COM2 port -.3907c8 f0 03 beq $3907cd BEQ putc_uart ; Yes: handle printing to the UART -.3907ca 68 pla PLA ; Otherwise, just exit -.3907cb 80 57 bra $390824 BRA done -.3907cd 22 d2 5b 39 jsl $395bd2 putc_uart JSL UART_SELECT ; Point to the correct UART -.3907d1 68 pla PLA ; Recover the character to send -.3907d2 22 a7 5c 39 jsl $395ca7 JSL UART_PUTC ; Send the character -.3907d6 80 4c bra $390824 BRA done -.3907d8 68 pla putc_screen PLA ; Get the character to print -.3907d9 c9 0a cmp #$0a CMP #CHAR_LF ; Linefeed moves cursor down one line -.3907db f0 69 beq $390846 BEQ go_down -.3907dd c9 20 cmp #$20 CMP #$20 -.3907df 90 19 bcc $3907fa BCC check_ctrl0 ; [$00..$1F]: check for arrows -.3907e1 c9 7f cmp #$7f CMP #$7F -.3907e3 f0 45 beq $39082a BEQ do_del -.3907e5 b0 02 bcs $3907e9 BCS check_A0 ; [$20..$7E]: print it -.3907e7 80 31 bra $39081a BRA printc -.3907e9 c9 a0 cmp #$a0 check_A0 CMP #$A0 -.3907eb 90 02 bcc $3907ef BCC check_ctrl1 -.3907ed 80 2b bra $39081a BRA printc ; [$A0..$FF]: print it -.3907ef c9 91 cmp #$91 check_ctrl1 CMP #CHAR_DOWN ; If the down arrow key was pressed -.3907f1 f0 53 beq $390846 BEQ go_down ; ... move the cursor down one row -.3907f3 c9 9d cmp #$9d CMP #CHAR_LEFT ; If the left arrow key was pressed -.3907f5 f0 61 beq $390858 BEQ go_left ; ... move the cursor left one column -.3907f7 4c 24 08 jmp $390824 JMP done -.3907fa c9 09 cmp #$09 check_ctrl0 CMP #CHAR_TAB ; If it's a TAB... -.3907fc f0 69 beq $390867 BEQ do_TAB ; ... move to the next TAB stop -.3907fe c9 08 cmp #$08 CMP #CHAR_BS ; If it's a backspace... -.390800 f0 34 beq $390836 BEQ backspace ; ... move the cursor back and replace with a space -.390802 c9 0d cmp #$0d CMP #CHAR_CR ; If the carriage return was pressed -.390804 f0 3a beq $390840 BEQ do_cr ; ... move cursor down and to the first column -.390806 c9 11 cmp #$11 CMP #CHAR_UP ; If the up arrow key was pressed -.390808 f0 42 beq $39084c BEQ go_up ; ... move the cursor up one row -.39080a c9 1d cmp #$1d CMP #CHAR_RIGHT ; If the right arrow key was pressed -.39080c f0 44 beq $390852 BEQ go_right ; ... move the cursor right one column -.39080e c9 0f cmp #$0f CMP #CHAR_INS ; If the insert key was pressed -.390810 f0 1e beq $390830 BEQ do_ins ; ... insert a space -.390812 c9 01 cmp #$01 CMP #CHAR_CTRL_A ; Check for CTRL-A (start of line) -.390814 f0 48 beq $39085e BEQ go_sol ; ... move the cursor to the start of the line -.390816 c9 05 cmp #$05 CMP #CHAR_CTRL_E ; Check for CTRL-E (end of line) -.390818 f0 74 beq $39088e BEQ go_eol ; ... move the cursor to the end of the line -.39081a 87 17 sta [$17] printc STA [CURSORPOS] ; Save the character on the screen -.39081c a5 1e lda $1e LDA CURCOLOR ; Set the color based on CURCOLOR -.39081e 87 1f sta [$1f] STA [COLORPOS] -.390820 22 77 09 39 jsl $390977 JSL ICSRRIGHT ; And advance the cursor -.390824 28 plp done PLP -.390825 ab plb PLB -.390826 2b pld PLD -.390827 7a ply PLY -.390828 fa plx PLX -.390829 6b rtl RTL -.39082a 22 bb 08 39 jsl $3908bb do_del JSL SCRSHIFTLL ; Shift the current line left one space into the cursor -.39082e 80 f4 bra $390824 BRA done -.390830 22 df 08 39 jsl $3908df do_ins JSL SCRSHIFTLR ; Shift the current line right one space from the cursor -.390834 80 ee bra $390824 BRA done -.390836 22 aa 09 39 jsl $3909aa backspace JSL ICSRLEFT -.39083a 22 bb 08 39 jsl $3908bb JSL SCRSHIFTLL ; Shift the current line left one space into the cursor -.39083e 80 e4 bra $390824 BRA done -.390840 22 17 09 39 jsl $390917 do_cr JSL IPRINTCR ; Move the cursor to the beginning of the next line -.390844 80 de bra $390824 BRA done -.390846 22 f6 09 39 jsl $3909f6 go_down JSL ICSRDOWN ; Move the cursor down one row (might force a scroll) -.39084a 80 d8 bra $390824 BRA done -.39084c 22 d0 09 39 jsl $3909d0 go_up JSL ICSRUP ; Move the cursor up one line -.390850 80 d2 bra $390824 BRA done -.390852 22 77 09 39 jsl $390977 go_right JSL ICSRRIGHT ; Move the cursor right one column -.390856 80 cc bra $390824 BRA done -.390858 22 aa 09 39 jsl $3909aa go_left JSL ICSRLEFT ; Move the cursor left one column -.39085c 80 c6 bra $390824 BRA done -.39085e go_sol -.39085e c2 20 rep #$20 REP #$20 ; set A long -.390860 a2 00 00 ldx #$0000 LDX #0 -.390863 a4 1c ldy $1c LDY CURSORY -.390865 80 21 bra $390888 BRA do_locate -.390867 do_TAB +.390787 22 90 07 39 jsl $390790 IPRINT JSL IPUTS +.39078b 22 56 09 39 jsl $390956 JSL IPRINTCR +.39078f 6b rtl RTL +.390790 48 pha IPUTS PHA +.390791 08 php PHP +.390792 e2 20 sep #$20 SEP #$20 ; set A short +.390794 c2 10 rep #$10 REP #$10 ; set X long +.390796 bd 00 00 lda $390000,x iputs1 LDA $0,b,x ; read from the string +.390799 f0 08 beq $3907a3 BEQ iputs_done +.39079b 22 a7 07 39 jsl $3907a7 iputs2 JSL IPUTC +.39079f e8 inx iputs3 INX +.3907a0 4c 96 07 jmp $390796 JMP iputs1 +.3907a3 e8 inx iputs_done INX +.3907a4 28 plp PLP +.3907a5 68 pla PLA +.3907a6 6b rtl RTL +.3907a7 IPUTC +.3907a7 da phx PHX +.3907a8 5a phy PHY +.3907a9 0b phd PHD +.3907aa 8b phb PHB +.3907ab 08 php PHP ; stash the flags (we'll be changing M) +.3907ac 48 pha PHA ; begin setdp macro +.3907ad 08 php PHP +.3907ae c2 20 rep #$20 REP #$20 ; set A long +.3907b0 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 +.3907b3 5b tcd TCD +.3907b4 28 plp PLP +.3907b5 68 pla PLA ; end setdp macro +.3907b6 48 pha PHA ; begin setdbr macro +.3907b7 08 php PHP +.3907b8 e2 20 sep #$20 SEP #$20 ; set A short +.3907ba a9 00 lda #$00 LDA #0 +.3907bc 48 pha PHA +.3907bd ab plb PLB +.3907be 28 plp PLP +.3907bf 68 pla PLA ; end setdbr macro +.3907c0 e2 20 sep #$20 SEP #$20 ; set A short +.3907c2 c2 10 rep #$10 REP #$10 ; set X long +.3907c4 48 pha PHA ; Save the character to print +.3907c5 af 03 07 00 lda $000703 LDA @lCHAN_OUT ; Check the output channel # +.3907c9 f0 16 beq $3907e1 BEQ putc_screen ; If it's 0: print to the screen +.3907cb c9 01 cmp #$01 CMP #CHAN_COM1 ; Check to see if it's the COM1 port +.3907cd f0 07 beq $3907d6 BEQ putc_uart ; Yes: handle printing to the UART +.3907cf c9 02 cmp #$02 CMP #CHAN_COM2 ; Check to see if it's the COM2 port +.3907d1 f0 03 beq $3907d6 BEQ putc_uart ; Yes: handle printing to the UART +.3907d3 68 pla PLA ; Otherwise, just exit +.3907d4 80 57 bra $39082d BRA done +.3907d6 22 32 5c 39 jsl $395c32 putc_uart JSL UART_SELECT ; Point to the correct UART +.3907da 68 pla PLA ; Recover the character to send +.3907db 22 07 5d 39 jsl $395d07 JSL UART_PUTC ; Send the character +.3907df 80 4c bra $39082d BRA done +.3907e1 68 pla putc_screen PLA ; Get the character to print +.3907e2 c9 0a cmp #$0a CMP #CHAR_LF ; Linefeed moves cursor down one line +.3907e4 f0 69 beq $39084f BEQ go_down +.3907e6 c9 20 cmp #$20 CMP #$20 +.3907e8 90 19 bcc $390803 BCC check_ctrl0 ; [$00..$1F]: check for arrows +.3907ea c9 7f cmp #$7f CMP #$7F +.3907ec f0 45 beq $390833 BEQ do_del +.3907ee b0 02 bcs $3907f2 BCS check_A0 ; [$20..$7E]: print it +.3907f0 80 31 bra $390823 BRA printc +.3907f2 c9 a0 cmp #$a0 check_A0 CMP #$A0 +.3907f4 90 02 bcc $3907f8 BCC check_ctrl1 +.3907f6 80 2b bra $390823 BRA printc ; [$A0..$FF]: print it +.3907f8 c9 91 cmp #$91 check_ctrl1 CMP #CHAR_DOWN ; If the down arrow key was pressed +.3907fa f0 53 beq $39084f BEQ go_down ; ... move the cursor down one row +.3907fc c9 9d cmp #$9d CMP #CHAR_LEFT ; If the left arrow key was pressed +.3907fe f0 61 beq $390861 BEQ go_left ; ... move the cursor left one column +.390800 4c 2d 08 jmp $39082d JMP done +.390803 c9 09 cmp #$09 check_ctrl0 CMP #CHAR_TAB ; If it's a TAB... +.390805 f0 69 beq $390870 BEQ do_TAB ; ... move to the next TAB stop +.390807 c9 08 cmp #$08 CMP #CHAR_BS ; If it's a backspace... +.390809 f0 34 beq $39083f BEQ backspace ; ... move the cursor back and replace with a space +.39080b c9 0d cmp #$0d CMP #CHAR_CR ; If the carriage return was pressed +.39080d f0 3a beq $390849 BEQ do_cr ; ... move cursor down and to the first column +.39080f c9 11 cmp #$11 CMP #CHAR_UP ; If the up arrow key was pressed +.390811 f0 42 beq $390855 BEQ go_up ; ... move the cursor up one row +.390813 c9 1d cmp #$1d CMP #CHAR_RIGHT ; If the right arrow key was pressed +.390815 f0 44 beq $39085b BEQ go_right ; ... move the cursor right one column +.390817 c9 0f cmp #$0f CMP #CHAR_INS ; If the insert key was pressed +.390819 f0 1e beq $390839 BEQ do_ins ; ... insert a space +.39081b c9 01 cmp #$01 CMP #CHAR_CTRL_A ; Check for CTRL-A (start of line) +.39081d f0 48 beq $390867 BEQ go_sol ; ... move the cursor to the start of the line +.39081f c9 05 cmp #$05 CMP #CHAR_CTRL_E ; Check for CTRL-E (end of line) +.390821 f0 74 beq $390897 BEQ go_eol ; ... move the cursor to the end of the line +.390823 87 17 sta [$17] printc STA [CURSORPOS] ; Save the character on the screen +.390825 a5 1e lda $1e LDA CURCOLOR ; Set the color based on CURCOLOR +.390827 87 1f sta [$1f] STA [COLORPOS] +.390829 22 b6 09 39 jsl $3909b6 JSL ICSRRIGHT ; And advance the cursor +.39082d 28 plp done PLP +.39082e ab plb PLB +.39082f 2b pld PLD +.390830 7a ply PLY +.390831 fa plx PLX +.390832 6b rtl RTL +.390833 22 c4 08 39 jsl $3908c4 do_del JSL SCRSHIFTLL ; Shift the current line left one space into the cursor +.390837 80 f4 bra $39082d BRA done +.390839 22 03 09 39 jsl $390903 do_ins JSL SCRSHIFTLR ; Shift the current line right one space from the cursor +.39083d 80 ee bra $39082d BRA done +.39083f 22 e9 09 39 jsl $3909e9 backspace JSL ICSRLEFT +.390843 22 c4 08 39 jsl $3908c4 JSL SCRSHIFTLL ; Shift the current line left one space into the cursor +.390847 80 e4 bra $39082d BRA done +.390849 22 56 09 39 jsl $390956 do_cr JSL IPRINTCR ; Move the cursor to the beginning of the next line +.39084d 80 de bra $39082d BRA done +.39084f 22 35 0a 39 jsl $390a35 go_down JSL ICSRDOWN ; Move the cursor down one row (might force a scroll) +.390853 80 d8 bra $39082d BRA done +.390855 22 0f 0a 39 jsl $390a0f go_up JSL ICSRUP ; Move the cursor up one line +.390859 80 d2 bra $39082d BRA done +.39085b 22 b6 09 39 jsl $3909b6 go_right JSL ICSRRIGHT ; Move the cursor right one column +.39085f 80 cc bra $39082d BRA done +.390861 22 e9 09 39 jsl $3909e9 go_left JSL ICSRLEFT ; Move the cursor left one column +.390865 80 c6 bra $39082d BRA done +.390867 go_sol .390867 c2 20 rep #$20 REP #$20 ; set A long -.390869 a5 1a lda $1a LDA CURSORX ; Get the current column -.39086b 29 f8 ff and #$fff8 AND #$FFF8 ; See which group of 8 it's in -.39086e 18 clc CLC -.39086f 69 08 00 adc #$0008 ADC #$0008 ; And move it to the next one -.390872 aa tax TAX -.390873 a4 1c ldy $1c LDY CURSORY -.390875 e2 20 sep #$20 SEP #$20 ; set A short -.390877 e4 0f cpx $0f set_xy CPX COLS_VISIBLE ; Check if we're still on screen horizontally -.390879 90 04 bcc $39087f BCC check_row ; Yes: check the row -.39087b a2 00 00 ldx #$0000 LDX #0 ; No: move to the first column... -.39087e c8 iny INY ; ... and the next row -.39087f c4 13 cpy $13 check_row CPY LINES_VISIBLE ; Check if we're still on the screen vertically -.390881 90 05 bcc $390888 BCC do_locate ; Yes: reposition the cursor -.390883 22 67 0a 39 jsl $390a67 JSL ISCROLLUP ; No: scroll the screen -.390887 88 dey DEY ; And set the row to the last one -.390888 22 1b 0a 39 jsl $390a1b do_locate JSL ILOCATE ; Set the cursor position -.39088c 80 96 bra $390824 BRA done -.39088e a6 0f ldx $0f go_eol LDX COLS_VISIBLE ; Move the cursor to the right most column -.390890 ca dex DEX -.390891 a4 1c ldy $1c LDY CURSORY -.390893 22 1b 0a 39 jsl $390a1b JSL ILOCATE -.390897 e2 20 sep #$20 SEP #$20 ; set A short -.390899 a7 17 lda [$17] eol_loop LDA [CURSORPOS] ; Get the character under the cursor -.39089b c9 20 cmp #$20 CMP #CHAR_SP ; Is it blank? -.39089d d0 0b bne $3908aa BNE eol_done ; No: exit the loop -.39089f 22 aa 09 39 jsl $3909aa JSL ICSRLEFT ; Yes: move to the left -.3908a3 a6 1a ldx $1a LDX CURSORX ; Are we at column 0? -.3908a5 d0 f2 bne $390899 BNE eol_loop ; No: try again -.3908a7 82 7a ff brl $390824 BRL done ; Yes: we're done -.3908aa a6 1a ldx $1a eol_done LDX CURSORX ; Check the column -.3908ac e8 inx INX -.3908ad e4 0f cpx $0f CPX COLS_VISIBLE ; Is it the right most? -.3908af d0 03 bne $3908b4 BNE eol_right -.3908b1 82 70 ff brl $390824 BRL done ; Yes: we're done -.3908b4 22 77 09 39 jsl $390977 eol_right JSL ICSRRIGHT ; No: move right one column -.3908b8 82 69 ff brl $390824 BRL done -.3908bb da phx SCRSHIFTLL PHX -.3908bc 5a phy PHY -.3908bd 48 pha PHA -.3908be 0b phd PHD -.3908bf 08 php PHP -.3908c0 48 pha PHA ; begin setdp macro -.3908c1 08 php PHP -.3908c2 c2 20 rep #$20 REP #$20 ; set A long -.3908c4 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 -.3908c7 5b tcd TCD -.3908c8 28 plp PLP -.3908c9 68 pla PLA ; end setdp macro -.3908ca c2 30 rep #$30 REP #$30 ; set A&X long -.3908cc a5 17 lda $17 LDA CURSORPOS ; Get the current cursor position -.3908ce a8 tay TAY ; Set it as the destination -.3908cf aa tax TAX -.3908d0 e8 inx INX ; And set the next cell as the source -.3908d1 18 clc CLC ; Calculate the length of the block to move -.3908d2 a5 0f lda $0f LDA COLS_VISIBLE ; as columns visible - X -.3908d4 e5 1a sbc $1a SBC CURSORX -.3908d6 54 af af mvn $af,$af MVN $AF, $AF ; And move the block -.3908d9 28 plp PLP -.3908da 2b pld PLD -.3908db 68 pla PLA -.3908dc 7a ply PLY -.3908dd fa plx PLX -.3908de 6b rtl RTL -.3908df da phx SCRSHIFTLR PHX -.3908e0 48 pha PHA -.3908e1 0b phd PHD -.3908e2 08 php PHP -.3908e3 48 pha PHA ; begin setdp macro -.3908e4 08 php PHP -.3908e5 c2 20 rep #$20 REP #$20 ; set A long -.3908e7 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 -.3908ea 5b tcd TCD -.3908eb 28 plp PLP -.3908ec 68 pla PLA ; end setdp macro -.3908ed c2 30 rep #$30 REP #$30 ; set A&X long -.3908ef a5 1a lda $1a LDA CURSORX ; What column are we on -.3908f1 1a inc a INC A -.3908f2 c5 0f cmp $0f CMP COLS_VISIBLE ; >= the # visible? -.3908f4 b0 1b bcs $390911 BGE done ; Yes: just skip the whole thing -.3908f6 38 sec SEC ; Calculate the length of the block to move -.3908f7 a5 0f lda $0f LDA COLS_VISIBLE -.3908f9 e5 1a sbc $1a SBC CURSORX -.3908fb 1a inc a INC A -.3908fc 18 clc CLC -.3908fd 65 17 adc $17 ADC CURSORPOS ; Add the current cursor position -.3908ff 3a dec a DEC A -.390900 a8 tay TAY ; Make it the destination -.390901 3a dec a DEC A ; Move to the previous column -.390902 aa tax TAX ; Make it the source -.390903 38 sec SEC ; Calculate the length of the block to move -.390904 a5 0f lda $0f LDA COLS_VISIBLE ; as columns visible - X -.390906 e5 1a sbc $1a SBC CURSORX -.390908 44 af af mvp $af,$af MVP $AF, $AF ; And move the block -.39090b e2 20 sep #$20 SEP #$20 ; set A short -.39090d a9 20 lda #$20 LDA #CHAR_SP ; Put a blank space at the cursor position -.39090f 87 17 sta [$17] STA [CURSORPOS] -.390911 28 plp done PLP -.390912 2b pld PLD -.390913 68 pla PLA -.390914 fa plx PLX -.390915 6b rtl RTL -.390916 IPUTB -.390916 6b rtl RTL -.390917 IPRINTCR -.390917 da phx PHX -.390918 5a phy PHY -.390919 8b phb PHB -.39091a 0b phd PHD -.39091b 08 php PHP -.39091c 48 pha PHA ; begin setdbr macro -.39091d 08 php PHP -.39091e e2 20 sep #$20 SEP #$20 ; set A short -.390920 a9 00 lda #$00 LDA #0 -.390922 48 pha PHA -.390923 ab plb PLB -.390924 28 plp PLP -.390925 68 pla PLA ; end setdbr macro -.390926 48 pha PHA ; begin setdp macro -.390927 08 php PHP -.390928 c2 20 rep #$20 REP #$20 ; set A long -.39092a a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 -.39092d 5b tcd TCD -.39092e 28 plp PLP -.39092f 68 pla PLA ; end setdp macro -.390930 e2 20 sep #$20 SEP #$20 ; set A short -.390932 c2 10 rep #$10 REP #$10 ; set X long -.390934 af 03 07 00 lda $000703 LDA @lCHAN_OUT -.390938 f0 1c beq $390956 BEQ scr_printcr -.39093a c9 01 cmp #$01 CMP #CHAN_COM1 ; Check to see if it's the COM1 port -.39093c f0 06 beq $390944 BEQ uart_printcr ; Yes: handle printing to the UART -.39093e c9 02 cmp #$02 CMP #CHAN_COM2 ; Check to see if it's the COM2 port -.390940 f0 02 beq $390944 BEQ uart_printcr ; Yes: handle printing to the UART -.390942 80 1c bra $390960 BRA done -.390944 22 d2 5b 39 jsl $395bd2 uart_printcr JSL UART_SELECT -.390948 a9 0d lda #$0d LDA #CHAR_CR -.39094a 22 9e 07 39 jsl $39079e JSL IPUTC -.39094e a9 0a lda #$0a LDA #CHAR_LF -.390950 22 9e 07 39 jsl $39079e JSL IPUTC -.390954 80 0a bra $390960 BRA done -.390956 a2 00 00 ldx #$0000 scr_printcr LDX #0 -.390959 a4 1c ldy $1c LDY CURSORY -.39095b c8 iny INY -.39095c 22 1b 0a 39 jsl $390a1b JSL ILOCATE -.390960 28 plp done PLP -.390961 2b pld PLD +.390869 a2 00 00 ldx #$0000 LDX #0 +.39086c a4 1c ldy $1c LDY CURSORY +.39086e 80 21 bra $390891 BRA do_locate +.390870 do_TAB +.390870 c2 20 rep #$20 REP #$20 ; set A long +.390872 a5 1a lda $1a LDA CURSORX ; Get the current column +.390874 29 f8 ff and #$fff8 AND #$FFF8 ; See which group of 8 it's in +.390877 18 clc CLC +.390878 69 08 00 adc #$0008 ADC #$0008 ; And move it to the next one +.39087b aa tax TAX +.39087c a4 1c ldy $1c LDY CURSORY +.39087e e2 20 sep #$20 SEP #$20 ; set A short +.390880 e4 0f cpx $0f set_xy CPX COLS_VISIBLE ; Check if we're still on screen horizontally +.390882 90 04 bcc $390888 BCC check_row ; Yes: check the row +.390884 a2 00 00 ldx #$0000 LDX #0 ; No: move to the first column... +.390887 c8 iny INY ; ... and the next row +.390888 c4 13 cpy $13 check_row CPY LINES_VISIBLE ; Check if we're still on the screen vertically +.39088a 90 05 bcc $390891 BCC do_locate ; Yes: reposition the cursor +.39088c 22 a6 0a 39 jsl $390aa6 JSL ISCROLLUP ; No: scroll the screen +.390890 88 dey DEY ; And set the row to the last one +.390891 22 5a 0a 39 jsl $390a5a do_locate JSL ILOCATE ; Set the cursor position +.390895 80 96 bra $39082d BRA done +.390897 a6 0f ldx $0f go_eol LDX COLS_VISIBLE ; Move the cursor to the right most column +.390899 ca dex DEX +.39089a a4 1c ldy $1c LDY CURSORY +.39089c 22 5a 0a 39 jsl $390a5a JSL ILOCATE +.3908a0 e2 20 sep #$20 SEP #$20 ; set A short +.3908a2 a7 17 lda [$17] eol_loop LDA [CURSORPOS] ; Get the character under the cursor +.3908a4 c9 20 cmp #$20 CMP #CHAR_SP ; Is it blank? +.3908a6 d0 0b bne $3908b3 BNE eol_done ; No: exit the loop +.3908a8 22 e9 09 39 jsl $3909e9 JSL ICSRLEFT ; Yes: move to the left +.3908ac a6 1a ldx $1a LDX CURSORX ; Are we at column 0? +.3908ae d0 f2 bne $3908a2 BNE eol_loop ; No: try again +.3908b0 82 7a ff brl $39082d BRL done ; Yes: we're done +.3908b3 a6 1a ldx $1a eol_done LDX CURSORX ; Check the column +.3908b5 e8 inx INX +.3908b6 e4 0f cpx $0f CPX COLS_VISIBLE ; Is it the right most? +.3908b8 d0 03 bne $3908bd BNE eol_right +.3908ba 82 70 ff brl $39082d BRL done ; Yes: we're done +.3908bd 22 b6 09 39 jsl $3909b6 eol_right JSL ICSRRIGHT ; No: move right one column +.3908c1 82 69 ff brl $39082d BRL done +.3908c4 SCRSHIFTLL +.3908c4 48 pha PHA +.3908c5 da phx PHX +.3908c6 5a phy PHY +.3908c7 0b phd PHD +.3908c8 08 php PHP +.3908c9 48 pha PHA ; begin setdp macro +.3908ca 08 php PHP +.3908cb c2 20 rep #$20 REP #$20 ; set A long +.3908cd a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 +.3908d0 5b tcd TCD +.3908d1 28 plp PLP +.3908d2 68 pla PLA ; end setdp macro +.3908d3 c2 30 rep #$30 REP #$30 ; set A&X long +.3908d5 a5 17 lda $17 LDA CURSORPOS ; Get the current cursor position +.3908d7 a8 tay TAY ; Set it as the destination +.3908d8 aa tax TAX +.3908d9 e8 inx INX ; And set the next cell as the source +.3908da 18 clc CLC ; Calculate the length of the block to move +.3908db a5 0f lda $0f LDA COLS_VISIBLE ; as columns visible - X +.3908dd e5 1a sbc $1a SBC CURSORX +.3908df e2 20 sep #$20 SEP #$20 ; set A short +.3908e1 85 00 sta $00 STA TMPPTR1 ; Save the count in TMPPTR1 +.3908e3 8b phb PHB +.3908e4 e2 20 sep #$20 SEP #$20 ; set A short +.3908e6 a9 af lda #$af LDA #$AF ; Set the databank to $AF +.3908e8 48 pha PHA +.3908e9 ab plb PLB +.3908ea a5 00 lda $00 loop LDA TMPPTR1 +.3908ec c9 00 cmp #$00 CMP #0 ; Check if the count is 0 +.3908ee f0 0c beq $3908fc BEQ stop_loop ; If so, we're done +.3908f0 bd 00 00 lda $0000,x LDA #0,B,X ; Get the byte to copy +.3908f3 99 00 00 sta $0000,y STA #0,B,Y ; And copy it +.3908f6 c6 00 dec $00 DEC TMPPTR1 ; Decrement the count +.3908f8 e8 inx INX ; Move to the next source byte +.3908f9 c8 iny INY ; Move to the next destination byte +.3908fa 80 ee bra $3908ea BRA loop ; And repeat +.3908fc ab plb stop_loop PLB +.3908fd 28 plp PLP +.3908fe 2b pld PLD +.3908ff 7a ply PLY +.390900 fa plx PLX +.390901 68 pla PLA +.390902 6b rtl RTL +.390903 SCRSHIFTLR +.390903 48 pha PHA +.390904 da phx PHX +.390905 5a phy PHY +.390906 0b phd PHD +.390907 08 php PHP +.390908 48 pha PHA ; begin setdp macro +.390909 08 php PHP +.39090a c2 20 rep #$20 REP #$20 ; set A long +.39090c a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 +.39090f 5b tcd TCD +.390910 28 plp PLP +.390911 68 pla PLA ; end setdp macro +.390912 c2 30 rep #$30 REP #$30 ; set A&X long +.390914 a5 1a lda $1a LDA CURSORX ; What column are we on +.390916 1a inc a INC A +.390917 c5 0f cmp $0f CMP COLS_VISIBLE ; >= the # visible? +.390919 b0 34 bcs $39094f BGE done ; Yes: just skip the whole thing +.39091b 38 sec SEC ; Calculate the length of the block to move +.39091c a5 0f lda $0f LDA COLS_VISIBLE +.39091e e5 1a sbc $1a SBC CURSORX +.390920 1a inc a INC A +.390921 18 clc CLC +.390922 65 17 adc $17 ADC CURSORPOS ; Add the current cursor position +.390924 3a dec a DEC A +.390925 a8 tay TAY ; Make it the destination +.390926 3a dec a DEC A ; Move to the previous column +.390927 aa tax TAX ; Make it the source +.390928 38 sec SEC ; Calculate the length of the block to move +.390929 a5 0f lda $0f LDA COLS_VISIBLE ; as columns visible - X +.39092b e5 1a sbc $1a SBC CURSORX +.39092d e2 20 sep #$20 SEP #$20 ; set A short +.39092f 85 00 sta $00 STA TMPPTR1 ; Save the count in TMPPTR1 +.390931 8b phb PHB +.390932 e2 20 sep #$20 SEP #$20 ; set A short +.390934 a9 af lda #$af LDA #$AF ; Set the databank to $AF +.390936 48 pha PHA +.390937 ab plb PLB +.390938 a5 00 lda $00 loop LDA TMPPTR1 +.39093a c9 00 cmp #$00 CMP #0 ; Check if the count is 0 +.39093c f0 0c beq $39094a BEQ stop_loop ; If so, we're done +.39093e bd 00 00 lda $0000,x LDA #0,B,X ; Get the byte to copy +.390941 99 00 00 sta $0000,y STA #0,B,Y ; And copy it +.390944 c6 00 dec $00 DEC TMPPTR1 ; Decrement the count +.390946 ca dex DEX ; Move to the next source byte +.390947 88 dey DEY ; Move to the next destination byte +.390948 80 ee bra $390938 BRA loop ; And repeat +.39094a ab plb stop_loop PLB +.39094b a9 20 lda #$20 LDA #CHAR_SP ; Put a blank space at the cursor position +.39094d 87 17 sta [$17] STA [CURSORPOS] +.39094f 28 plp done PLP +.390950 2b pld PLD +.390951 7a ply PLY +.390952 fa plx PLX +.390953 68 pla PLA +.390954 6b rtl RTL +.390955 IPUTB +.390955 6b rtl RTL +.390956 IPRINTCR +.390956 da phx PHX +.390957 5a phy PHY +.390958 8b phb PHB +.390959 0b phd PHD +.39095a 08 php PHP +.39095b 48 pha PHA ; begin setdbr macro +.39095c 08 php PHP +.39095d e2 20 sep #$20 SEP #$20 ; set A short +.39095f a9 00 lda #$00 LDA #0 +.390961 48 pha PHA .390962 ab plb PLB -.390963 7a ply PLY -.390964 fa plx PLX -.390965 6b rtl RTL -.390966 da phx ICSRHOME PHX -.390967 5a phy PHY -.390968 08 php PHP -.390969 a2 00 00 ldx #$0000 LDX #0 -.39096c a0 00 00 ldy #$0000 LDY #0 -.39096f 22 1b 0a 39 jsl $390a1b JSL ILOCATE -.390973 28 plp PLP -.390974 7a ply PLY -.390975 fa plx PLX -.390976 6b rtl RTL -.390977 da phx ICSRRIGHT PHX -.390978 5a phy PHY -.390979 48 pha PHA -.39097a 0b phd PHD -.39097b 08 php PHP -.39097c c2 20 rep #$20 REP #$20 ; set A long -.39097e c2 10 rep #$10 REP #$10 ; set X long -.390980 48 pha PHA ; begin setdp macro -.390981 08 php PHP -.390982 c2 20 rep #$20 REP #$20 ; set A long -.390984 a9 00 00 lda #$0000 LDA #$0 ; set DP to page 0 -.390987 5b tcd TCD -.390988 28 plp PLP -.390989 68 pla PLA ; end setdp macro -.39098a a6 1a ldx $1a LDX CURSORX ; Get the new column -.39098c e8 inx INX -.39098d a4 1c ldy $1c LDY CURSORY ; Get the current row -.39098f e4 0f cpx $0f CPX COLS_VISIBLE ; Are we off screen? -.390991 90 0d bcc $3909a0 BCC icsrright_nowrap ; No: just set the position -.390993 a2 00 00 ldx #$0000 LDX #0 ; Yes: move to the first column -.390996 c8 iny INY ; And move to the next row -.390997 c4 13 cpy $13 CPY LINES_VISIBLE ; Are we still off screen? -.390999 90 05 bcc $3909a0 BCC icsrright_nowrap ; No: just set the position -.39099b 88 dey DEY ; Yes: lock to the last row -.39099c 22 67 0a 39 jsl $390a67 JSL ISCROLLUP ; But scroll the screen up -.3909a0 icsrright_nowrap -.3909a0 22 1b 0a 39 jsl $390a1b JSL ILOCATE ; Set the cursor position -.3909a4 28 plp PLP -.3909a5 2b pld PLD -.3909a6 68 pla PLA -.3909a7 7a ply PLY -.3909a8 fa plx PLX -.3909a9 6b rtl RTL -.3909aa ICSRLEFT -.3909aa da phx PHX -.3909ab 5a phy PHY -.3909ac 48 pha PHA -.3909ad 0b phd PHD -.3909ae 08 php PHP -.3909af c2 30 rep #$30 REP #$30 ; set A&X long -.3909b1 48 pha PHA ; begin setdp macro -.3909b2 08 php PHP -.3909b3 c2 20 rep #$20 REP #$20 ; set A long -.3909b5 a9 00 00 lda #$0000 LDA #$0 ; set DP to page 0 -.3909b8 5b tcd TCD -.3909b9 28 plp PLP -.3909ba 68 pla PLA ; end setdp macro -.3909bb a5 1a lda $1a LDA CURSORX -.3909bd f0 0b beq $3909ca BEQ icsrleft_done_already_zero ; Check that we are not already @ Zero -.3909bf a6 1a ldx $1a LDX CURSORX -.3909c1 ca dex DEX -.3909c2 86 1a stx $1a STX CURSORX -.3909c4 a4 1c ldy $1c LDY CURSORY -.3909c6 22 1b 0a 39 jsl $390a1b JSL ILOCATE -.3909ca icsrleft_done_already_zero -.3909ca 28 plp PLP -.3909cb 2b pld PLD -.3909cc 68 pla PLA -.3909cd 7a ply PLY -.3909ce fa plx PLX -.3909cf 6b rtl RTL -.3909d0 ICSRUP -.3909d0 da phx PHX -.3909d1 5a phy PHY -.3909d2 48 pha PHA -.3909d3 0b phd PHD -.3909d4 08 php PHP -.3909d5 c2 30 rep #$30 REP #$30 ; set A&X long -.3909d7 48 pha PHA ; begin setdp macro -.3909d8 08 php PHP -.3909d9 c2 20 rep #$20 REP #$20 ; set A long -.3909db a9 00 00 lda #$0000 LDA #$0 ; set DP to page 0 -.3909de 5b tcd TCD -.3909df 28 plp PLP -.3909e0 68 pla PLA ; end setdp macro -.3909e1 a5 1c lda $1c LDA CURSORY -.3909e3 f0 0b beq $3909f0 BEQ isrup_done_already_zero ; Check if we are not already @ Zero -.3909e5 a4 1c ldy $1c LDY CURSORY -.3909e7 88 dey DEY -.3909e8 84 1c sty $1c STY CURSORY -.3909ea a6 1a ldx $1a LDX CURSORX -.3909ec 22 1b 0a 39 jsl $390a1b JSL ILOCATE -.3909f0 isrup_done_already_zero -.3909f0 28 plp PLP -.3909f1 2b pld PLD -.3909f2 68 pla PLA -.3909f3 7a ply PLY -.3909f4 fa plx PLX -.3909f5 6b rtl RTL -.3909f6 da phx ICSRDOWN PHX -.3909f7 5a phy PHY -.3909f8 0b phd PHD -.3909f9 c2 30 rep #$30 REP #$30 ; set A&X long -.3909fb 48 pha PHA ; begin setdp macro -.3909fc 08 php PHP -.3909fd c2 20 rep #$20 REP #$20 ; set A long -.3909ff a9 00 00 lda #$0000 LDA #$0 ; set DP to page 0 -.390a02 5b tcd TCD -.390a03 28 plp PLP -.390a04 68 pla PLA ; end setdp macro -.390a05 a6 1a ldx $1a LDX CURSORX ; Get the current column -.390a07 a4 1c ldy $1c LDY CURSORY ; Get the new row -.390a09 c8 iny INY -.390a0a c4 13 cpy $13 CPY LINES_VISIBLE ; Check to see if we're off screen -.390a0c 90 05 bcc $390a13 BCC icsrdown_noscroll ; No: go ahead and set the position -.390a0e 88 dey DEY ; Yes: go back to the last row -.390a0f 22 67 0a 39 jsl $390a67 JSL ISCROLLUP ; But scroll the screen up -.390a13 icsrdown_noscroll -.390a13 22 1b 0a 39 jsl $390a1b JSL ILOCATE ; And set the cursor position -.390a17 2b pld PLD -.390a18 7a ply PLY -.390a19 fa plx PLX -.390a1a 6b rtl RTL -.390a1b 48 pha ILOCATE PHA -.390a1c 0b phd PHD -.390a1d 08 php PHP -.390a1e 48 pha PHA ; begin setdp macro -.390a1f 08 php PHP -.390a20 c2 20 rep #$20 REP #$20 ; set A long -.390a22 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 -.390a25 5b tcd TCD -.390a26 28 plp PLP -.390a27 68 pla PLA ; end setdp macro -.390a28 c2 30 rep #$30 REP #$30 ; set A&X long -.390a2a ilocate_scroll -.390a2a c4 13 cpy $13 CPY LINES_VISIBLE -.390a2c 90 07 bcc $390a35 BCC ilocate_scrolldone -.390a2e 22 67 0a 39 jsl $390a67 JSL ISCROLLUP -.390a32 88 dey DEY -.390a33 80 f5 bra $390a2a BRA ilocate_scroll -.390a35 ilocate_scrolldone -.390a35 86 1a stx $1a STX CURSORX -.390a37 84 1c sty $1c STY CURSORY -.390a39 a5 0c lda $0c LDA SCREENBEGIN -.390a3b ilocate_row -.390a3b c0 00 00 cpy #$0000 CPY #$0 -.390a3e f0 08 beq $390a48 BEQ ilocate_right -.390a40 18 clc ilocate_down CLC -.390a41 65 11 adc $11 ADC COLS_PER_LINE -.390a43 88 dey DEY -.390a44 f0 02 beq $390a48 BEQ ilocate_right -.390a46 80 f8 bra $390a40 BRA ilocate_down -.390a48 18 clc ilocate_right CLC -.390a49 65 1a adc $1a ADC CURSORX ; move the cursor right X columns -.390a4b 85 17 sta $17 STA CURSORPOS -.390a4d a4 1c ldy $1c LDY CURSORY -.390a4f 98 tya TYA -.390a50 8f 16 00 af sta $af0016 STA @lVKY_TXT_CURSOR_Y_REG_L ;Store in Vicky's registers -.390a54 8a txa TXA -.390a55 8f 14 00 af sta $af0014 STA @lVKY_TXT_CURSOR_X_REG_L ;Store in Vicky's register -.390a59 c2 20 rep #$20 REP #$20 ; set A long -.390a5b 18 clc CLC -.390a5c a5 17 lda $17 LDA CURSORPOS -.390a5e 69 00 20 adc #$2000 ADC #<>(CS_COLOR_MEM_PTR - CS_TEXT_MEM_PTR) -.390a61 85 1f sta $1f STA COLORPOS -.390a63 28 plp ilocate_done PLP -.390a64 2b pld PLD -.390a65 68 pla PLA -.390a66 6b rtl RTL -.390a67 ISCROLLUP -.390a67 48 pha PHA -.390a68 da phx PHX -.390a69 5a phy PHY -.390a6a 8b phb PHB -.390a6b 0b phd PHD -.390a6c 08 php PHP -.390a6d 48 pha PHA ; begin setdp macro -.390a6e 08 php PHP -.390a6f c2 20 rep #$20 REP #$20 ; set A long -.390a71 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 -.390a74 5b tcd TCD -.390a75 28 plp PLP -.390a76 68 pla PLA ; end setdp macro -.390a77 c2 30 rep #$30 REP #$30 ; set A&X long -.390a79 a5 11 lda $11 LDA COLS_PER_LINE -.390a7b 8f 00 01 00 sta $000100 STA @l UNSIGNED_MULT_A_LO -.390a7f a5 13 lda $13 LDA LINES_VISIBLE -.390a81 8f 02 01 00 sta $000102 STA @l UNSIGNED_MULT_B_LO -.390a85 af 04 01 00 lda $000104 LDA @l UNSIGNED_MULT_AL_LO -.390a89 85 00 sta $00 STA TMPPTR1 -.390a8b 18 clc CLC -.390a8c a9 00 a0 lda #$a000 LDA #$A000 -.390a8f a8 tay TAY -.390a90 65 11 adc $11 ADC COLS_PER_LINE -.390a92 aa tax TAX -.390a93 a5 00 lda $00 LDA TMPPTR1 -.390a95 54 af af mvn $af,$af MVN $AF,$AF -.390a98 c2 30 rep #$30 REP #$30 ; set A&X long +.390963 28 plp PLP +.390964 68 pla PLA ; end setdbr macro +.390965 48 pha PHA ; begin setdp macro +.390966 08 php PHP +.390967 c2 20 rep #$20 REP #$20 ; set A long +.390969 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 +.39096c 5b tcd TCD +.39096d 28 plp PLP +.39096e 68 pla PLA ; end setdp macro +.39096f e2 20 sep #$20 SEP #$20 ; set A short +.390971 c2 10 rep #$10 REP #$10 ; set X long +.390973 af 03 07 00 lda $000703 LDA @lCHAN_OUT +.390977 f0 1c beq $390995 BEQ scr_printcr +.390979 c9 01 cmp #$01 CMP #CHAN_COM1 ; Check to see if it's the COM1 port +.39097b f0 06 beq $390983 BEQ uart_printcr ; Yes: handle printing to the UART +.39097d c9 02 cmp #$02 CMP #CHAN_COM2 ; Check to see if it's the COM2 port +.39097f f0 02 beq $390983 BEQ uart_printcr ; Yes: handle printing to the UART +.390981 80 1c bra $39099f BRA done +.390983 22 32 5c 39 jsl $395c32 uart_printcr JSL UART_SELECT +.390987 a9 0d lda #$0d LDA #CHAR_CR +.390989 22 a7 07 39 jsl $3907a7 JSL IPUTC +.39098d a9 0a lda #$0a LDA #CHAR_LF +.39098f 22 a7 07 39 jsl $3907a7 JSL IPUTC +.390993 80 0a bra $39099f BRA done +.390995 a2 00 00 ldx #$0000 scr_printcr LDX #0 +.390998 a4 1c ldy $1c LDY CURSORY +.39099a c8 iny INY +.39099b 22 5a 0a 39 jsl $390a5a JSL ILOCATE +.39099f 28 plp done PLP +.3909a0 2b pld PLD +.3909a1 ab plb PLB +.3909a2 7a ply PLY +.3909a3 fa plx PLX +.3909a4 6b rtl RTL +.3909a5 da phx ICSRHOME PHX +.3909a6 5a phy PHY +.3909a7 08 php PHP +.3909a8 a2 00 00 ldx #$0000 LDX #0 +.3909ab a0 00 00 ldy #$0000 LDY #0 +.3909ae 22 5a 0a 39 jsl $390a5a JSL ILOCATE +.3909b2 28 plp PLP +.3909b3 7a ply PLY +.3909b4 fa plx PLX +.3909b5 6b rtl RTL +.3909b6 da phx ICSRRIGHT PHX +.3909b7 5a phy PHY +.3909b8 48 pha PHA +.3909b9 0b phd PHD +.3909ba 08 php PHP +.3909bb c2 20 rep #$20 REP #$20 ; set A long +.3909bd c2 10 rep #$10 REP #$10 ; set X long +.3909bf 48 pha PHA ; begin setdp macro +.3909c0 08 php PHP +.3909c1 c2 20 rep #$20 REP #$20 ; set A long +.3909c3 a9 00 00 lda #$0000 LDA #$0 ; set DP to page 0 +.3909c6 5b tcd TCD +.3909c7 28 plp PLP +.3909c8 68 pla PLA ; end setdp macro +.3909c9 a6 1a ldx $1a LDX CURSORX ; Get the new column +.3909cb e8 inx INX +.3909cc a4 1c ldy $1c LDY CURSORY ; Get the current row +.3909ce e4 0f cpx $0f CPX COLS_VISIBLE ; Are we off screen? +.3909d0 90 0d bcc $3909df BCC icsrright_nowrap ; No: just set the position +.3909d2 a2 00 00 ldx #$0000 LDX #0 ; Yes: move to the first column +.3909d5 c8 iny INY ; And move to the next row +.3909d6 c4 13 cpy $13 CPY LINES_VISIBLE ; Are we still off screen? +.3909d8 90 05 bcc $3909df BCC icsrright_nowrap ; No: just set the position +.3909da 88 dey DEY ; Yes: lock to the last row +.3909db 22 a6 0a 39 jsl $390aa6 JSL ISCROLLUP ; But scroll the screen up +.3909df icsrright_nowrap +.3909df 22 5a 0a 39 jsl $390a5a JSL ILOCATE ; Set the cursor position +.3909e3 28 plp PLP +.3909e4 2b pld PLD +.3909e5 68 pla PLA +.3909e6 7a ply PLY +.3909e7 fa plx PLX +.3909e8 6b rtl RTL +.3909e9 ICSRLEFT +.3909e9 da phx PHX +.3909ea 5a phy PHY +.3909eb 48 pha PHA +.3909ec 0b phd PHD +.3909ed 08 php PHP +.3909ee c2 30 rep #$30 REP #$30 ; set A&X long +.3909f0 48 pha PHA ; begin setdp macro +.3909f1 08 php PHP +.3909f2 c2 20 rep #$20 REP #$20 ; set A long +.3909f4 a9 00 00 lda #$0000 LDA #$0 ; set DP to page 0 +.3909f7 5b tcd TCD +.3909f8 28 plp PLP +.3909f9 68 pla PLA ; end setdp macro +.3909fa a5 1a lda $1a LDA CURSORX +.3909fc f0 0b beq $390a09 BEQ icsrleft_done_already_zero ; Check that we are not already @ Zero +.3909fe a6 1a ldx $1a LDX CURSORX +.390a00 ca dex DEX +.390a01 86 1a stx $1a STX CURSORX +.390a03 a4 1c ldy $1c LDY CURSORY +.390a05 22 5a 0a 39 jsl $390a5a JSL ILOCATE +.390a09 icsrleft_done_already_zero +.390a09 28 plp PLP +.390a0a 2b pld PLD +.390a0b 68 pla PLA +.390a0c 7a ply PLY +.390a0d fa plx PLX +.390a0e 6b rtl RTL +.390a0f ICSRUP +.390a0f da phx PHX +.390a10 5a phy PHY +.390a11 48 pha PHA +.390a12 0b phd PHD +.390a13 08 php PHP +.390a14 c2 30 rep #$30 REP #$30 ; set A&X long +.390a16 48 pha PHA ; begin setdp macro +.390a17 08 php PHP +.390a18 c2 20 rep #$20 REP #$20 ; set A long +.390a1a a9 00 00 lda #$0000 LDA #$0 ; set DP to page 0 +.390a1d 5b tcd TCD +.390a1e 28 plp PLP +.390a1f 68 pla PLA ; end setdp macro +.390a20 a5 1c lda $1c LDA CURSORY +.390a22 f0 0b beq $390a2f BEQ isrup_done_already_zero ; Check if we are not already @ Zero +.390a24 a4 1c ldy $1c LDY CURSORY +.390a26 88 dey DEY +.390a27 84 1c sty $1c STY CURSORY +.390a29 a6 1a ldx $1a LDX CURSORX +.390a2b 22 5a 0a 39 jsl $390a5a JSL ILOCATE +.390a2f isrup_done_already_zero +.390a2f 28 plp PLP +.390a30 2b pld PLD +.390a31 68 pla PLA +.390a32 7a ply PLY +.390a33 fa plx PLX +.390a34 6b rtl RTL +.390a35 da phx ICSRDOWN PHX +.390a36 5a phy PHY +.390a37 0b phd PHD +.390a38 c2 30 rep #$30 REP #$30 ; set A&X long +.390a3a 48 pha PHA ; begin setdp macro +.390a3b 08 php PHP +.390a3c c2 20 rep #$20 REP #$20 ; set A long +.390a3e a9 00 00 lda #$0000 LDA #$0 ; set DP to page 0 +.390a41 5b tcd TCD +.390a42 28 plp PLP +.390a43 68 pla PLA ; end setdp macro +.390a44 a6 1a ldx $1a LDX CURSORX ; Get the current column +.390a46 a4 1c ldy $1c LDY CURSORY ; Get the new row +.390a48 c8 iny INY +.390a49 c4 13 cpy $13 CPY LINES_VISIBLE ; Check to see if we're off screen +.390a4b 90 05 bcc $390a52 BCC icsrdown_noscroll ; No: go ahead and set the position +.390a4d 88 dey DEY ; Yes: go back to the last row +.390a4e 22 a6 0a 39 jsl $390aa6 JSL ISCROLLUP ; But scroll the screen up +.390a52 icsrdown_noscroll +.390a52 22 5a 0a 39 jsl $390a5a JSL ILOCATE ; And set the cursor position +.390a56 2b pld PLD +.390a57 7a ply PLY +.390a58 fa plx PLX +.390a59 6b rtl RTL +.390a5a 48 pha ILOCATE PHA +.390a5b 0b phd PHD +.390a5c 08 php PHP +.390a5d 48 pha PHA ; begin setdp macro +.390a5e 08 php PHP +.390a5f c2 20 rep #$20 REP #$20 ; set A long +.390a61 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 +.390a64 5b tcd TCD +.390a65 28 plp PLP +.390a66 68 pla PLA ; end setdp macro +.390a67 c2 30 rep #$30 REP #$30 ; set A&X long +.390a69 ilocate_scroll +.390a69 c4 13 cpy $13 CPY LINES_VISIBLE +.390a6b 90 07 bcc $390a74 BCC ilocate_scrolldone +.390a6d 22 a6 0a 39 jsl $390aa6 JSL ISCROLLUP +.390a71 88 dey DEY +.390a72 80 f5 bra $390a69 BRA ilocate_scroll +.390a74 ilocate_scrolldone +.390a74 86 1a stx $1a STX CURSORX +.390a76 84 1c sty $1c STY CURSORY +.390a78 a5 0c lda $0c LDA SCREENBEGIN +.390a7a ilocate_row +.390a7a c0 00 00 cpy #$0000 CPY #$0 +.390a7d f0 08 beq $390a87 BEQ ilocate_right +.390a7f 18 clc ilocate_down CLC +.390a80 65 11 adc $11 ADC COLS_PER_LINE +.390a82 88 dey DEY +.390a83 f0 02 beq $390a87 BEQ ilocate_right +.390a85 80 f8 bra $390a7f BRA ilocate_down +.390a87 18 clc ilocate_right CLC +.390a88 65 1a adc $1a ADC CURSORX ; move the cursor right X columns +.390a8a 85 17 sta $17 STA CURSORPOS +.390a8c a4 1c ldy $1c LDY CURSORY +.390a8e 98 tya TYA +.390a8f 8f 16 00 af sta $af0016 STA @lVKY_TXT_CURSOR_Y_REG_L ;Store in Vicky's registers +.390a93 8a txa TXA +.390a94 8f 14 00 af sta $af0014 STA @lVKY_TXT_CURSOR_X_REG_L ;Store in Vicky's register +.390a98 c2 20 rep #$20 REP #$20 ; set A long .390a9a 18 clc CLC -.390a9b a9 00 c0 lda #$c000 LDA #$C000 -.390a9e a8 tay TAY -.390a9f 65 11 adc $11 ADC COLS_PER_LINE -.390aa1 aa tax TAX -.390aa2 a5 00 lda $00 LDA TMPPTR1 -.390aa4 54 af af mvn $af,$af MVN $AF,$AF -.390aa7 a5 00 lda $00 LDA TMPPTR1 -.390aa9 48 pha PHA -.390aaa 18 clc CLC -.390aab 69 00 a0 adc #$a000 ADC #<>CS_TEXT_MEM_PTR -.390aae 85 00 sta $00 STA TMPPTR1 -.390ab0 a0 00 00 ldy #$0000 LDY #0 -.390ab3 a9 20 00 lda #$0020 LDA #' ' -.390ab6 97 00 sta [$00],y clr_text STA [TMPPTR1],Y -.390ab8 c8 iny INY -.390ab9 c4 0f cpy $0f CPY COLS_VISIBLE -.390abb d0 f9 bne $390ab6 BNE clr_text -.390abd 68 pla PLA -.390abe 18 clc CLC -.390abf 69 00 c0 adc #$c000 ADC #<>CS_COLOR_MEM_PTR -.390ac2 85 00 sta $00 STA TMPPTR1 -.390ac4 a0 00 00 ldy #$0000 LDY #0 -.390ac7 a5 1e lda $1e LDA CURCOLOR -.390ac9 97 00 sta [$00],y clr_color STA [TMPPTR1],Y -.390acb c8 iny INY -.390acc c4 0f cpy $0f CPY COLS_VISIBLE -.390ace d0 f9 bne $390ac9 BNE clr_color -.390ad0 28 plp PLP -.390ad1 2b pld PLD -.390ad2 ab plb PLB -.390ad3 7a ply PLY -.390ad4 fa plx PLX -.390ad5 68 pla PLA -.390ad6 6b rtl RTL -.390ad7 08 php IPRINTH PHP -.390ad8 48 pha PHA -.390ad9 iprinth1 -.390ad9 e2 20 sep #$20 SEP #$20 ; set A short -.390adb bd 00 00 lda $0000,x LDA #0,b,x ; Read the value to be printed -.390ade 4a lsr a LSR -.390adf 4a lsr a LSR -.390ae0 4a lsr a LSR -.390ae1 4a lsr a LSR -.390ae2 22 31 0b 39 jsl $390b31 JSL iprint_digit -.390ae6 bd 00 00 lda $0000,x LDA #0,b,x -.390ae9 22 31 0b 39 jsl $390b31 JSL iprint_digit -.390aed ca dex DEX -.390aee 88 dey DEY -.390aef d0 e8 bne $390ad9 BNE iprinth1 -.390af1 68 pla PLA -.390af2 28 plp PLP -.390af3 6b rtl RTL -.390af4 IPRINTAH -.390af4 48 pha PHA -.390af5 08 php PHP -.390af6 8f 44 02 00 sta $000244 STA @lCPUA ; Save A where we can use it multiple times -.390afa 08 php PHP ; Get the processor status into A -.390afb e2 20 sep #$20 SEP #$20 ; set A short -.390afd c2 10 rep #$10 REP #$10 ; set X long -.390aff 68 pla PLA -.390b00 29 20 and #$20 AND #%00100000 ; Is M = 1? -.390b02 c9 20 cmp #$20 CMP #%00100000 -.390b04 f0 14 beq $390b1a BEQ eight_bit -.390b06 af 46 02 00 lda $000246 LDA @lCPUA+2 ; Get nibble [15..12] -.390b0a 4a lsr a LSR A -.390b0b 4a lsr a LSR A -.390b0c 4a lsr a LSR A -.390b0d 4a lsr a LSR A -.390b0e 22 31 0b 39 jsl $390b31 JSL iprint_digit ; And print it -.390b12 af 46 02 00 lda $000246 LDA @lCPUA+2 ; Get nibble [11..8] -.390b16 22 31 0b 39 jsl $390b31 JSL iprint_digit ; And print it -.390b1a af 44 02 00 lda $000244 eight_bit LDA @lCPUA ; Get nibble [7..4] -.390b1e 4a lsr a LSR A -.390b1f 4a lsr a LSR A -.390b20 4a lsr a LSR A -.390b21 4a lsr a LSR A -.390b22 22 31 0b 39 jsl $390b31 JSL iprint_digit ; And print it -.390b26 af 44 02 00 lda $000244 LDA @lCPUA ; Get nibble [3..0] -.390b2a 22 31 0b 39 jsl $390b31 JSL iprint_digit ; And print it -.390b2e 28 plp PLP -.390b2f 68 pla PLA -.390b30 6b rtl RTL -.390b31 da phx iprint_digit PHX -.390b32 c2 20 rep #$20 REP #$20 ; set A long -.390b34 29 0f 00 and #$000f AND #$0F -.390b37 aa tax TAX -.390b38 bf 81 72 39 lda $397281,x LDA hex_digits,X -.390b3c 22 9e 07 39 jsl $39079e JSL IPUTC ; Print the digit -.390b40 fa plx PLX -.390b41 6b rtl RTL -.390b42 48 pha ICLRSCREEN PHA -.390b43 da phx PHX -.390b44 08 php PHP -.390b45 e2 20 sep #$20 SEP #$20 ; set A short -.390b47 c2 10 rep #$10 REP #$10 ; set X long -.390b49 a2 00 00 ldx #$0000 LDX #$0000 ; Only Use One Pointer -.390b4c a9 20 lda #$20 LDA #$20 ; Fill the Entire Screen with Space -.390b4e 9f 00 a0 af sta $afa000,x iclearloop0 STA CS_TEXT_MEM_PTR, x ; -.390b52 e8 inx inx -.390b53 e0 00 20 cpx #$2000 cpx #$2000 -.390b56 d0 f6 bne $390b4e bne iclearloop0 -.390b58 a2 00 00 ldx #$0000 LDX #$0000 ; Only Use One Pointer -.390b5b af 1e 00 00 lda $00001e LDA @lCURCOLOR ; Fill the Color Memory with the current color -.390b5f 9f 00 c0 af sta $afc000,x iclearloop1 STA CS_COLOR_MEM_PTR, x ; -.390b63 e8 inx inx -.390b64 e0 00 20 cpx #$2000 cpx #$2000 -.390b67 d0 f6 bne $390b5f bne iclearloop1 -.390b69 28 plp PLP -.390b6a fa plx PLX -.390b6b 68 pla PLA -.390b6c 6b rtl RTL -.390b6d COPYBYTES42 -.390b6d 08 php PHP -.390b6e 0b phd PHD -.390b6f 48 pha PHA ; begin setdp macro -.390b70 08 php PHP +.390a9b a5 17 lda $17 LDA CURSORPOS +.390a9d 69 00 20 adc #$2000 ADC #<>(CS_COLOR_MEM_PTR - CS_TEXT_MEM_PTR) +.390aa0 85 1f sta $1f STA COLORPOS +.390aa2 28 plp ilocate_done PLP +.390aa3 2b pld PLD +.390aa4 68 pla PLA +.390aa5 6b rtl RTL +.390aa6 ISCROLLUP +.390aa6 48 pha PHA +.390aa7 da phx PHX +.390aa8 5a phy PHY +.390aa9 8b phb PHB +.390aaa 0b phd PHD +.390aab 08 php PHP +.390aac 48 pha PHA ; begin setdp macro +.390aad 08 php PHP +.390aae c2 20 rep #$20 REP #$20 ; set A long +.390ab0 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 +.390ab3 5b tcd TCD +.390ab4 28 plp PLP +.390ab5 68 pla PLA ; end setdp macro +.390ab6 c2 30 rep #$30 REP #$30 ; set A&X long +.390ab8 a5 11 lda $11 LDA COLS_PER_LINE +.390aba 8f 00 01 00 sta $000100 STA @l UNSIGNED_MULT_A_LO +.390abe a5 13 lda $13 LDA LINES_VISIBLE +.390ac0 8f 02 01 00 sta $000102 STA @l UNSIGNED_MULT_B_LO +.390ac4 af 04 01 00 lda $000104 LDA @l UNSIGNED_MULT_AL_LO +.390ac8 85 00 sta $00 STA TMPPTR1 +.390aca 18 clc CLC +.390acb a9 00 a0 lda #$a000 LDA #$A000 +.390ace a8 tay TAY +.390acf 65 11 adc $11 ADC COLS_PER_LINE +.390ad1 aa tax TAX +.390ad2 a5 00 lda $00 LDA TMPPTR1 +.390ad4 54 af af mvn $af,$af MVN $AF,$AF +.390ad7 c2 30 rep #$30 REP #$30 ; set A&X long +.390ad9 18 clc CLC +.390ada a9 00 c0 lda #$c000 LDA #$C000 +.390add a8 tay TAY +.390ade 65 11 adc $11 ADC COLS_PER_LINE +.390ae0 aa tax TAX +.390ae1 a5 00 lda $00 LDA TMPPTR1 +.390ae3 54 af af mvn $af,$af MVN $AF,$AF +.390ae6 a5 00 lda $00 LDA TMPPTR1 +.390ae8 48 pha PHA +.390ae9 18 clc CLC +.390aea 69 00 a0 adc #$a000 ADC #<>CS_TEXT_MEM_PTR +.390aed 85 00 sta $00 STA TMPPTR1 +.390aef a0 00 00 ldy #$0000 LDY #0 +.390af2 a9 20 00 lda #$0020 LDA #' ' +.390af5 97 00 sta [$00],y clr_text STA [TMPPTR1],Y +.390af7 c8 iny INY +.390af8 c4 0f cpy $0f CPY COLS_VISIBLE +.390afa d0 f9 bne $390af5 BNE clr_text +.390afc 68 pla PLA +.390afd 18 clc CLC +.390afe 69 00 c0 adc #$c000 ADC #<>CS_COLOR_MEM_PTR +.390b01 85 00 sta $00 STA TMPPTR1 +.390b03 a0 00 00 ldy #$0000 LDY #0 +.390b06 a5 1e lda $1e LDA CURCOLOR +.390b08 97 00 sta [$00],y clr_color STA [TMPPTR1],Y +.390b0a c8 iny INY +.390b0b c4 0f cpy $0f CPY COLS_VISIBLE +.390b0d d0 f9 bne $390b08 BNE clr_color +.390b0f 28 plp PLP +.390b10 2b pld PLD +.390b11 ab plb PLB +.390b12 7a ply PLY +.390b13 fa plx PLX +.390b14 68 pla PLA +.390b15 6b rtl RTL +.390b16 08 php IPRINTH PHP +.390b17 48 pha PHA +.390b18 iprinth1 +.390b18 e2 20 sep #$20 SEP #$20 ; set A short +.390b1a bd 00 00 lda $0000,x LDA #0,b,x ; Read the value to be printed +.390b1d 4a lsr a LSR +.390b1e 4a lsr a LSR +.390b1f 4a lsr a LSR +.390b20 4a lsr a LSR +.390b21 22 70 0b 39 jsl $390b70 JSL iprint_digit +.390b25 bd 00 00 lda $0000,x LDA #0,b,x +.390b28 22 70 0b 39 jsl $390b70 JSL iprint_digit +.390b2c ca dex DEX +.390b2d 88 dey DEY +.390b2e d0 e8 bne $390b18 BNE iprinth1 +.390b30 68 pla PLA +.390b31 28 plp PLP +.390b32 6b rtl RTL +.390b33 IPRINTAH +.390b33 48 pha PHA +.390b34 08 php PHP +.390b35 8f 44 02 00 sta $000244 STA @lCPUA ; Save A where we can use it multiple times +.390b39 08 php PHP ; Get the processor status into A +.390b3a e2 20 sep #$20 SEP #$20 ; set A short +.390b3c c2 10 rep #$10 REP #$10 ; set X long +.390b3e 68 pla PLA +.390b3f 29 20 and #$20 AND #%00100000 ; Is M = 1? +.390b41 c9 20 cmp #$20 CMP #%00100000 +.390b43 f0 14 beq $390b59 BEQ eight_bit +.390b45 af 46 02 00 lda $000246 LDA @lCPUA+2 ; Get nibble [15..12] +.390b49 4a lsr a LSR A +.390b4a 4a lsr a LSR A +.390b4b 4a lsr a LSR A +.390b4c 4a lsr a LSR A +.390b4d 22 70 0b 39 jsl $390b70 JSL iprint_digit ; And print it +.390b51 af 46 02 00 lda $000246 LDA @lCPUA+2 ; Get nibble [11..8] +.390b55 22 70 0b 39 jsl $390b70 JSL iprint_digit ; And print it +.390b59 af 44 02 00 lda $000244 eight_bit LDA @lCPUA ; Get nibble [7..4] +.390b5d 4a lsr a LSR A +.390b5e 4a lsr a LSR A +.390b5f 4a lsr a LSR A +.390b60 4a lsr a LSR A +.390b61 22 70 0b 39 jsl $390b70 JSL iprint_digit ; And print it +.390b65 af 44 02 00 lda $000244 LDA @lCPUA ; Get nibble [3..0] +.390b69 22 70 0b 39 jsl $390b70 JSL iprint_digit ; And print it +.390b6d 28 plp PLP +.390b6e 68 pla PLA +.390b6f 6b rtl RTL +.390b70 da phx iprint_digit PHX .390b71 c2 20 rep #$20 REP #$20 ; set A long -.390b73 a9 00 00 lda #$0000 LDA #TMPPTR1 ; set DP to page 0 -.390b76 5b tcd TCD -.390b77 28 plp PLP -.390b78 68 pla PLA ; end setdp macro -.390b79 e2 20 sep #$20 SEP #$20 ; set A short -.390b7b c2 10 rep #$10 REP #$10 ; set X long -.390b7d a0 00 00 ldy #$0000 LDY #0 -.390b80 b7 00 lda [$00],y copy_loop LDA [TMPPTR1],Y -.390b82 97 04 sta [$04],y STA [TMPPTR2],Y -.390b84 c8 iny INY -.390b85 c0 2a 00 cpy #$002a CPY #42 -.390b88 d0 f6 bne $390b80 BNE copy_loop -.390b8a 2b pld PLD -.390b8b 28 plp PLP -.390b8c 60 rts RTS -.390b8d ICOLORFLAG -.390b8d 48 pha PHA -.390b8e da phx PHX -.390b8f 5a phy PHY -.390b90 08 php PHP -.390b91 8b phb PHB -.390b92 0b phd PHD -.390b93 48 pha PHA ; begin setdp macro -.390b94 08 php PHP -.390b95 c2 20 rep #$20 REP #$20 ; set A long -.390b97 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 -.390b9a 5b tcd TCD -.390b9b 28 plp PLP -.390b9c 68 pla PLA ; end setdp macro -.390b9d c2 30 rep #$30 REP #$30 ; set A&X long -.390b9f a9 00 c0 lda #$c000 LDA #<>CS_COLOR_MEM_PTR -.390ba2 85 04 sta $04 STA TMPPTR2 -.390ba4 a9 af 00 lda #$00af LDA #`CS_COLOR_MEM_PTR -.390ba7 85 06 sta $06 STA TMPPTR2+2 -.390ba9 a9 58 6f lda #$6f58 LDA #<>greet_clr_line1 -.390bac 85 00 sta $00 STA TMPPTR1 -.390bae a9 39 00 lda #$0039 LDA #`greet_clr_line1 -.390bb1 85 02 sta $02 STA TMPPTR1+2 -.390bb3 20 6d 0b jsr $390b6d JSR COPYBYTES42 -.390bb6 18 clc CLC -.390bb7 a5 04 lda $04 LDA TMPPTR2 -.390bb9 65 11 adc $11 ADC COLS_PER_LINE -.390bbb 85 04 sta $04 STA TMPPTR2 -.390bbd a9 82 6f lda #$6f82 LDA #<>greet_clr_line2 -.390bc0 85 00 sta $00 STA TMPPTR1 -.390bc2 a9 39 00 lda #$0039 LDA #`greet_clr_line2 -.390bc5 85 02 sta $02 STA TMPPTR1+2 -.390bc7 20 6d 0b jsr $390b6d JSR COPYBYTES42 -.390bca 18 clc CLC -.390bcb a5 04 lda $04 LDA TMPPTR2 -.390bcd 65 11 adc $11 ADC COLS_PER_LINE -.390bcf 85 04 sta $04 STA TMPPTR2 -.390bd1 a9 ac 6f lda #$6fac LDA #<>greet_clr_line3 -.390bd4 85 00 sta $00 STA TMPPTR1 -.390bd6 a9 39 00 lda #$0039 LDA #`greet_clr_line3 -.390bd9 85 02 sta $02 STA TMPPTR1+2 -.390bdb 20 6d 0b jsr $390b6d JSR COPYBYTES42 -.390bde 18 clc CLC -.390bdf a5 04 lda $04 LDA TMPPTR2 -.390be1 65 11 adc $11 ADC COLS_PER_LINE -.390be3 85 04 sta $04 STA TMPPTR2 -.390be5 a9 d6 6f lda #$6fd6 LDA #<>greet_clr_line4 -.390be8 85 00 sta $00 STA TMPPTR1 -.390bea a9 39 00 lda #$0039 LDA #`greet_clr_line4 -.390bed 85 02 sta $02 STA TMPPTR1+2 -.390bef 20 6d 0b jsr $390b6d JSR COPYBYTES42 -.390bf2 18 clc CLC -.390bf3 a5 04 lda $04 LDA TMPPTR2 -.390bf5 65 11 adc $11 ADC COLS_PER_LINE -.390bf7 85 04 sta $04 STA TMPPTR2 -.390bf9 a9 00 70 lda #$7000 LDA #<>greet_clr_line5 -.390bfc 85 00 sta $00 STA TMPPTR1 -.390bfe a9 39 00 lda #$0039 LDA #`greet_clr_line5 -.390c01 85 02 sta $02 STA TMPPTR1+2 -.390c03 20 6d 0b jsr $390b6d JSR COPYBYTES42 -.390c06 2b pld PLD -.390c07 ab plb PLB -.390c08 28 plp PLP -.390c09 7a ply PLY -.390c0a fa plx PLX -.390c0b 68 pla PLA -.390c0c 6b rtl RTL -.390c0d 0b phd IINITCHLUT PHD -.390c0e 08 php PHP -.390c0f 48 pha PHA -.390c10 da phx PHX -.390c11 e2 20 sep #$20 SEP #$20 ; set A short -.390c13 e2 10 sep #$10 SEP #$10 ; set X short -.390c15 a2 00 ldx #$00 LDX #$00 -.390c17 bf 2a 70 39 lda $39702a,x lutinitloop0 LDA @lfg_color_lut,x ; get Local Data -.390c1b 9f 40 1f af sta $af1f40,x STA FG_CHAR_LUT_PTR,x ; Write in LUT Memory -.390c1f e8 inx inx -.390c20 e0 40 cpx #$40 cpx #$40 -.390c22 d0 f3 bne $390c17 bne lutinitloop0 -.390c24 a2 00 ldx #$00 LDX #$00 -.390c26 bf 6a 70 39 lda $39706a,x lutinitloop1 LDA @lbg_color_lut,x ; get Local Data -.390c2a 9f 80 1f af sta $af1f80,x STA BG_CHAR_LUT_PTR,x ; Write in LUT Memory -.390c2e e8 inx INX -.390c2f e0 40 cpx #$40 CPX #$40 -.390c31 d0 f3 bne $390c26 bne lutinitloop1 -.390c33 c2 20 rep #$20 REP #$20 ; set A long -.390c35 c2 10 rep #$10 REP #$10 ; set X long -.390c37 fa plx PLX -.390c38 68 pla PLA -.390c39 28 plp PLP -.390c3a 2b pld PLD -.390c3b 6b rtl RTL -.390c3c IINITGAMMATABLE -.390c3c e2 20 sep #$20 SEP #$20 ; set A short -.390c3e c2 10 rep #$10 REP #$10 ; set X long -.390c40 a2 00 00 ldx #$0000 ldx #$0000 -.390c43 bf 00 77 39 lda $397700,x initgammaloop LDA GAMMA_1_8_Tbl, x -.390c47 9f 00 40 af sta $af4000,x STA GAMMA_B_LUT_PTR, x -.390c4b 9f 00 41 af sta $af4100,x STA GAMMA_G_LUT_PTR, x -.390c4f 9f 00 42 af sta $af4200,x STA GAMMA_R_LUT_PTR, x -.390c53 e8 inx inx -.390c54 e0 00 01 cpx #$0100 cpx #$0100 -.390c57 d0 ea bne $390c43 bne initgammaloop -.390c59 c2 30 rep #$30 REP #$30 ; set A&X long -.390c5b 6b rtl RTL -.390c5c 48 pha IINITALLLUT PHA -.390c5d da phx PHX -.390c5e a2 00 00 ldx #$0000 LDX #$0000 -.390c61 e2 20 sep #$20 SEP #$20 ; set A short -.390c63 a9 00 lda #$00 LDA #$00 -.390c65 85 0a sta $0a STA $0A ; Temp Location -.390c67 iinit_lut_loop -.390c67 86 02 stx $02 STX $02 -.390c69 a6 0a ldx $0a LDX $0A -.390c6b bf 00 76 39 lda $397600,x LDA GAMMA_2_2_Tbl, x -.390c6f 49 55 eor #$55 EOR #$55 -.390c71 a6 02 ldx $02 LDX $02 -.390c73 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR, x -.390c77 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR, x -.390c7b 9f 00 28 af sta $af2800,x STA @lGRPH_LUT2_PTR, x -.390c7f 9f 00 2c af sta $af2c00,x STA @lGRPH_LUT3_PTR, x -.390c83 9f 00 30 af sta $af3000,x STA @lGRPH_LUT4_PTR, x -.390c87 9f 00 34 af sta $af3400,x STA @lGRPH_LUT5_PTR, x -.390c8b 9f 00 38 af sta $af3800,x STA @lGRPH_LUT6_PTR, x -.390c8f 9f 00 3c af sta $af3c00,x STA @lGRPH_LUT7_PTR, x -.390c93 e8 inx inx -.390c94 86 02 stx $02 STX $02 -.390c96 a6 0a ldx $0a LDX $0A -.390c98 bf 00 78 39 lda $397800,x LDA RANDOM_LUT_Tbl, x -.390c9c a6 02 ldx $02 LDX $02 -.390c9e 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR, x -.390ca2 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR, x -.390ca6 9f 00 28 af sta $af2800,x STA @lGRPH_LUT2_PTR, x -.390caa 9f 00 2c af sta $af2c00,x STA @lGRPH_LUT3_PTR, x -.390cae 9f 00 30 af sta $af3000,x STA @lGRPH_LUT4_PTR, x -.390cb2 9f 00 34 af sta $af3400,x STA @lGRPH_LUT5_PTR, x -.390cb6 9f 00 38 af sta $af3800,x STA @lGRPH_LUT6_PTR, x -.390cba 9f 00 3c af sta $af3c00,x STA @lGRPH_LUT7_PTR, x -.390cbe e8 inx inx -.390cbf 86 02 stx $02 STX $02 -.390cc1 a6 0a ldx $0a LDX $0A -.390cc3 bf 00 77 39 lda $397700,x LDA GAMMA_1_8_Tbl, x -.390cc7 49 aa eor #$aa EOR #$AA -.390cc9 a6 02 ldx $02 LDX $02 -.390ccb 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR, x -.390ccf 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR, x -.390cd3 9f 00 28 af sta $af2800,x STA @lGRPH_LUT2_PTR, x -.390cd7 9f 00 2c af sta $af2c00,x STA @lGRPH_LUT3_PTR, x -.390cdb 9f 00 30 af sta $af3000,x STA @lGRPH_LUT4_PTR, x -.390cdf 9f 00 34 af sta $af3400,x STA @lGRPH_LUT5_PTR, x -.390ce3 9f 00 38 af sta $af3800,x STA @lGRPH_LUT6_PTR, x -.390ce7 9f 00 3c af sta $af3c00,x STA @lGRPH_LUT7_PTR, x -.390ceb e8 inx inx -.390cec a9 ff lda #$ff LDA #$FF -.390cee 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR, x -.390cf2 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR, x -.390cf6 9f 00 28 af sta $af2800,x STA @lGRPH_LUT2_PTR, x -.390cfa 9f 00 2c af sta $af2c00,x STA @lGRPH_LUT3_PTR, x -.390cfe 9f 00 30 af sta $af3000,x STA @lGRPH_LUT4_PTR, x -.390d02 9f 00 34 af sta $af3400,x STA @lGRPH_LUT5_PTR, x -.390d06 9f 00 38 af sta $af3800,x STA @lGRPH_LUT6_PTR, x -.390d0a 9f 00 3c af sta $af3c00,x STA @lGRPH_LUT7_PTR, x -.390d0e e6 0a inc $0a inc $0A -.390d10 e8 inx inx -.390d11 e0 00 04 cpx #$0400 cpx #$0400 -.390d14 f0 03 beq $390d19 beq iinit_lut_exit -.390d16 82 4e ff brl $390c67 brl iinit_lut_loop -.390d19 iinit_lut_exit -.390d19 c2 30 rep #$30 REP #$30 ; set A&X long -.390d1b fa plx PLX -.390d1c 68 pla PLA -.390d1d 6b rtl RTL -.390d1e 48 pha IINITVKYTXTMODE PHA -.390d1f 08 php PHP -.390d20 e2 20 sep #$20 SEP #$20 ; set A short -.390d22 af 01 00 af lda $af0001 LDA @l MASTER_CTRL_REG_H -.390d26 29 01 and #$01 AND #$01 -.390d28 c9 01 cmp #$01 CMP #$01 -.390d2a d0 15 bne $390d41 BNE INITVICKYMODE -.390d2c a9 00 lda #$00 LDA #$00 -.390d2e 8f 01 00 af sta $af0001 STA @L MASTER_CTRL_REG_H -.390d32 ea nop NOP -.390d33 ea nop NOP -.390d34 ea nop NOP -.390d35 ea nop NOP -.390d36 ea nop NOP -.390d37 a9 01 lda #$01 LDA #$01 -.390d39 8f 01 00 af sta $af0001 STA @L MASTER_CTRL_REG_H -.390d3d ea nop NOP -.390d3e ea nop NOP -.390d3f ea nop NOP -.390d40 ea nop NOP -.390d41 INITVICKYMODE -.390d41 a9 00 lda #$00 LDA #$00 -.390d43 8f 01 00 af sta $af0001 STA @L MASTER_CTRL_REG_H -.390d47 a9 01 lda #$01 LDA #Mstr_Ctrl_Text_Mode_En ; Set it to 640x480 for real -.390d49 8f 00 00 af sta $af0000 STA @L MASTER_CTRL_REG_L -.390d4d e2 20 sep #$20 SEP #$20 ; set A short -.390d4f a9 20 lda #$20 LDA #$20 -.390d51 8f 05 00 af sta $af0005 STA BORDER_COLOR_B -.390d55 8f 07 00 af sta $af0007 STA BORDER_COLOR_R -.390d59 a9 00 lda #$00 LDA #$00 -.390d5b 8f 06 00 af sta $af0006 STA BORDER_COLOR_G -.390d5f a9 01 lda #$01 LDA #Border_Ctrl_Enable ; Enable the Border -.390d61 8f 04 00 af sta $af0004 STA BORDER_CTRL_REG -.390d65 a9 20 lda #$20 LDA #32 ; Set the border to the standard 32 pixels -.390d67 8f 08 00 af sta $af0008 STA BORDER_X_SIZE -.390d6b 8f 09 00 af sta $af0009 STA BORDER_Y_SIZE -.390d6f c2 30 rep #$30 REP #$30 ; set A&X long -.390d71 22 78 0d 39 jsl $390d78 JSL ISETSIZES ; Calculate the size of the text screen -.390d75 28 plp PLP -.390d76 68 pla PLA -.390d77 6b rtl RTL -.390d78 ISETSIZES -.390d78 48 pha PHA -.390d79 da phx PHX -.390d7a 5a phy PHY -.390d7b 8b phb PHB -.390d7c 0b phd PHD -.390d7d 08 php PHP -.390d7e 48 pha PHA ; begin setdp macro -.390d7f 08 php PHP -.390d80 c2 20 rep #$20 REP #$20 ; set A long -.390d82 a9 00 00 lda #$0000 LDA #<>BANK0_BEGIN ; set DP to page 0 -.390d85 5b tcd TCD -.390d86 28 plp PLP -.390d87 68 pla PLA ; end setdp macro -.390d88 48 pha PHA ; begin setdbr macro -.390d89 08 php PHP -.390d8a e2 20 sep #$20 SEP #$20 ; set A short -.390d8c a9 00 lda #$00 LDA #0 -.390d8e 48 pha PHA -.390d8f ab plb PLB -.390d90 28 plp PLP -.390d91 68 pla PLA ; end setdbr macro -.390d92 e2 30 sep #$30 SEP #$30 ; set A&X short -.390d94 af 01 00 af lda $af0001 LDA @l MASTER_CTRL_REG_H -.390d98 29 03 and #$03 AND #$03 ; Mask off the resolution bits -.390d9a 0a asl a ASL A -.390d9b aa tax TAX ; Index to the col/line count in X -.390d9c c2 20 rep #$20 REP #$20 ; set A long -.390d9e bf 1b 0e 39 lda $390e1b,x LDA cols_by_res,X ; Get the number of columns -.390da2 85 11 sta $11 STA COLS_PER_LINE ; This is how many columns there are per line in the memory -.390da4 85 0f sta $0f STA COLS_VISIBLE ; This is how many would be visible with no border -.390da6 bf 23 0e 39 lda $390e23,x LDA lines_by_res,X ; Get the number of lines -.390daa 85 15 sta $15 STA LINES_MAX ; This is the total number of lines in memory -.390dac 85 13 sta $13 STA LINES_VISIBLE ; This is how many lines would be visible with no border -.390dae e2 20 sep #$20 SEP #$20 ; set A short -.390db0 af 04 00 af lda $af0004 LDA @l BORDER_CTRL_REG ; Check to see if we have a border -.390db4 89 01 bit #$01 BIT #Border_Ctrl_Enable -.390db6 f0 5c beq $390e14 BEQ done ; No border... the sizes are correct now -.390db8 af 08 00 af lda $af0008 LDA @l BORDER_X_SIZE ; Get the horizontal border width -.390dbc 29 3f and #$3f AND #$3F -.390dbe 89 03 bit #$03 BIT #$03 ; Check the lower two bits... indicates a partial column is eaten -.390dc0 d0 04 bne $390dc6 BNE frac_width -.390dc2 4a lsr a LSR A ; COLUMNS_HIDDEN := BORDER_X_SIZE / 4 -.390dc3 4a lsr a LSR A -.390dc4 80 03 bra $390dc9 BRA store_width -.390dc6 4a lsr a frac_width LSR A ; COLUMNS_HIDDEN := BORDER_X_SIZE / 4 + 1 -.390dc7 4a lsr a LSR A ; because a column is partially hidden -.390dc8 1a inc a INC A -.390dc9 85 00 sta $00 store_width STA TMPPTR1 -.390dcb 64 01 stz $01 STZ TMPPTR1+1 -.390dcd e2 20 sep #$20 SEP #$20 ; set A short -.390dcf af 01 00 af lda $af0001 LDA @l MASTER_CTRL_REG_H ; Check if we're pixel doubling -.390dd3 89 02 bit #$02 BIT #Mstr_Ctrl_Video_Mode1 -.390dd5 f0 04 beq $390ddb BEQ adjust_width ; No... just adjust the width of the screen -.390dd7 c2 20 rep #$20 REP #$20 ; set A long -.390dd9 46 00 lsr $00 LSR TMPPTR1 ; Yes... cut the adjustment in half -.390ddb adjust_width +.390b73 29 0f 00 and #$000f AND #$0F +.390b76 aa tax TAX +.390b77 bf e1 72 39 lda $3972e1,x LDA hex_digits,X +.390b7b 22 a7 07 39 jsl $3907a7 JSL IPUTC ; Print the digit +.390b7f fa plx PLX +.390b80 6b rtl RTL +.390b81 48 pha ICLRSCREEN PHA +.390b82 da phx PHX +.390b83 08 php PHP +.390b84 e2 20 sep #$20 SEP #$20 ; set A short +.390b86 c2 10 rep #$10 REP #$10 ; set X long +.390b88 a2 00 00 ldx #$0000 LDX #$0000 ; Only Use One Pointer +.390b8b a9 20 lda #$20 LDA #$20 ; Fill the Entire Screen with Space +.390b8d 9f 00 a0 af sta $afa000,x iclearloop0 STA CS_TEXT_MEM_PTR, x ; +.390b91 e8 inx inx +.390b92 e0 00 20 cpx #$2000 cpx #$2000 +.390b95 d0 f6 bne $390b8d bne iclearloop0 +.390b97 a2 00 00 ldx #$0000 LDX #$0000 ; Only Use One Pointer +.390b9a af 1e 00 00 lda $00001e LDA @lCURCOLOR ; Fill the Color Memory with the current color +.390b9e 9f 00 c0 af sta $afc000,x iclearloop1 STA CS_COLOR_MEM_PTR, x ; +.390ba2 e8 inx inx +.390ba3 e0 00 20 cpx #$2000 cpx #$2000 +.390ba6 d0 f6 bne $390b9e bne iclearloop1 +.390ba8 28 plp PLP +.390ba9 fa plx PLX +.390baa 68 pla PLA +.390bab 6b rtl RTL +.390bac COPYBYTES42 +.390bac 08 php PHP +.390bad 0b phd PHD +.390bae 48 pha PHA ; begin setdp macro +.390baf 08 php PHP +.390bb0 c2 20 rep #$20 REP #$20 ; set A long +.390bb2 a9 00 00 lda #$0000 LDA #TMPPTR1 ; set DP to page 0 +.390bb5 5b tcd TCD +.390bb6 28 plp PLP +.390bb7 68 pla PLA ; end setdp macro +.390bb8 e2 20 sep #$20 SEP #$20 ; set A short +.390bba c2 10 rep #$10 REP #$10 ; set X long +.390bbc a0 00 00 ldy #$0000 LDY #0 +.390bbf b7 00 lda [$00],y copy_loop LDA [TMPPTR1],Y +.390bc1 97 04 sta [$04],y STA [TMPPTR2],Y +.390bc3 c8 iny INY +.390bc4 c0 2a 00 cpy #$002a CPY #42 +.390bc7 d0 f6 bne $390bbf BNE copy_loop +.390bc9 2b pld PLD +.390bca 28 plp PLP +.390bcb 60 rts RTS +.390bcc ICOLORFLAG +.390bcc 48 pha PHA +.390bcd da phx PHX +.390bce 5a phy PHY +.390bcf 08 php PHP +.390bd0 8b phb PHB +.390bd1 0b phd PHD +.390bd2 48 pha PHA ; begin setdp macro +.390bd3 08 php PHP +.390bd4 c2 20 rep #$20 REP #$20 ; set A long +.390bd6 a9 00 00 lda #$0000 LDA #0 ; set DP to page 0 +.390bd9 5b tcd TCD +.390bda 28 plp PLP +.390bdb 68 pla PLA ; end setdp macro +.390bdc c2 30 rep #$30 REP #$30 ; set A&X long +.390bde a9 00 c0 lda #$c000 LDA #<>CS_COLOR_MEM_PTR +.390be1 85 04 sta $04 STA TMPPTR2 +.390be3 a9 af 00 lda #$00af LDA #`CS_COLOR_MEM_PTR +.390be6 85 06 sta $06 STA TMPPTR2+2 +.390be8 a9 b8 6f lda #$6fb8 LDA #<>greet_clr_line1 +.390beb 85 00 sta $00 STA TMPPTR1 +.390bed a9 39 00 lda #$0039 LDA #`greet_clr_line1 +.390bf0 85 02 sta $02 STA TMPPTR1+2 +.390bf2 20 ac 0b jsr $390bac JSR COPYBYTES42 +.390bf5 18 clc CLC +.390bf6 a5 04 lda $04 LDA TMPPTR2 +.390bf8 65 11 adc $11 ADC COLS_PER_LINE +.390bfa 85 04 sta $04 STA TMPPTR2 +.390bfc a9 e2 6f lda #$6fe2 LDA #<>greet_clr_line2 +.390bff 85 00 sta $00 STA TMPPTR1 +.390c01 a9 39 00 lda #$0039 LDA #`greet_clr_line2 +.390c04 85 02 sta $02 STA TMPPTR1+2 +.390c06 20 ac 0b jsr $390bac JSR COPYBYTES42 +.390c09 18 clc CLC +.390c0a a5 04 lda $04 LDA TMPPTR2 +.390c0c 65 11 adc $11 ADC COLS_PER_LINE +.390c0e 85 04 sta $04 STA TMPPTR2 +.390c10 a9 0c 70 lda #$700c LDA #<>greet_clr_line3 +.390c13 85 00 sta $00 STA TMPPTR1 +.390c15 a9 39 00 lda #$0039 LDA #`greet_clr_line3 +.390c18 85 02 sta $02 STA TMPPTR1+2 +.390c1a 20 ac 0b jsr $390bac JSR COPYBYTES42 +.390c1d 18 clc CLC +.390c1e a5 04 lda $04 LDA TMPPTR2 +.390c20 65 11 adc $11 ADC COLS_PER_LINE +.390c22 85 04 sta $04 STA TMPPTR2 +.390c24 a9 36 70 lda #$7036 LDA #<>greet_clr_line4 +.390c27 85 00 sta $00 STA TMPPTR1 +.390c29 a9 39 00 lda #$0039 LDA #`greet_clr_line4 +.390c2c 85 02 sta $02 STA TMPPTR1+2 +.390c2e 20 ac 0b jsr $390bac JSR COPYBYTES42 +.390c31 18 clc CLC +.390c32 a5 04 lda $04 LDA TMPPTR2 +.390c34 65 11 adc $11 ADC COLS_PER_LINE +.390c36 85 04 sta $04 STA TMPPTR2 +.390c38 a9 60 70 lda #$7060 LDA #<>greet_clr_line5 +.390c3b 85 00 sta $00 STA TMPPTR1 +.390c3d a9 39 00 lda #$0039 LDA #`greet_clr_line5 +.390c40 85 02 sta $02 STA TMPPTR1+2 +.390c42 20 ac 0b jsr $390bac JSR COPYBYTES42 +.390c45 2b pld PLD +.390c46 ab plb PLB +.390c47 28 plp PLP +.390c48 7a ply PLY +.390c49 fa plx PLX +.390c4a 68 pla PLA +.390c4b 6b rtl RTL +.390c4c 0b phd IINITCHLUT PHD +.390c4d 08 php PHP +.390c4e 48 pha PHA +.390c4f da phx PHX +.390c50 e2 20 sep #$20 SEP #$20 ; set A short +.390c52 e2 10 sep #$10 SEP #$10 ; set X short +.390c54 a2 00 ldx #$00 LDX #$00 +.390c56 bf 8a 70 39 lda $39708a,x lutinitloop0 LDA @lfg_color_lut,x ; get Local Data +.390c5a 9f 40 1f af sta $af1f40,x STA FG_CHAR_LUT_PTR,x ; Write in LUT Memory +.390c5e e8 inx inx +.390c5f e0 40 cpx #$40 cpx #$40 +.390c61 d0 f3 bne $390c56 bne lutinitloop0 +.390c63 a2 00 ldx #$00 LDX #$00 +.390c65 bf ca 70 39 lda $3970ca,x lutinitloop1 LDA @lbg_color_lut,x ; get Local Data +.390c69 9f 80 1f af sta $af1f80,x STA BG_CHAR_LUT_PTR,x ; Write in LUT Memory +.390c6d e8 inx INX +.390c6e e0 40 cpx #$40 CPX #$40 +.390c70 d0 f3 bne $390c65 bne lutinitloop1 +.390c72 c2 20 rep #$20 REP #$20 ; set A long +.390c74 c2 10 rep #$10 REP #$10 ; set X long +.390c76 fa plx PLX +.390c77 68 pla PLA +.390c78 28 plp PLP +.390c79 2b pld PLD +.390c7a 6b rtl RTL +.390c7b IINITGAMMATABLE +.390c7b e2 20 sep #$20 SEP #$20 ; set A short +.390c7d c2 10 rep #$10 REP #$10 ; set X long +.390c7f a2 00 00 ldx #$0000 ldx #$0000 +.390c82 bf 00 77 39 lda $397700,x initgammaloop LDA GAMMA_1_8_Tbl, x +.390c86 9f 00 40 af sta $af4000,x STA GAMMA_B_LUT_PTR, x +.390c8a 9f 00 41 af sta $af4100,x STA GAMMA_G_LUT_PTR, x +.390c8e 9f 00 42 af sta $af4200,x STA GAMMA_R_LUT_PTR, x +.390c92 e8 inx inx +.390c93 e0 00 01 cpx #$0100 cpx #$0100 +.390c96 d0 ea bne $390c82 bne initgammaloop +.390c98 c2 30 rep #$30 REP #$30 ; set A&X long +.390c9a 6b rtl RTL +.390c9b 48 pha IINITALLLUT PHA +.390c9c da phx PHX +.390c9d a2 00 00 ldx #$0000 LDX #$0000 +.390ca0 e2 20 sep #$20 SEP #$20 ; set A short +.390ca2 a9 00 lda #$00 LDA #$00 +.390ca4 85 0a sta $0a STA $0A ; Temp Location +.390ca6 iinit_lut_loop +.390ca6 86 02 stx $02 STX $02 +.390ca8 a6 0a ldx $0a LDX $0A +.390caa bf 00 76 39 lda $397600,x LDA GAMMA_2_2_Tbl, x +.390cae 49 55 eor #$55 EOR #$55 +.390cb0 a6 02 ldx $02 LDX $02 +.390cb2 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR, x +.390cb6 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR, x +.390cba 9f 00 28 af sta $af2800,x STA @lGRPH_LUT2_PTR, x +.390cbe 9f 00 2c af sta $af2c00,x STA @lGRPH_LUT3_PTR, x +.390cc2 9f 00 30 af sta $af3000,x STA @lGRPH_LUT4_PTR, x +.390cc6 9f 00 34 af sta $af3400,x STA @lGRPH_LUT5_PTR, x +.390cca 9f 00 38 af sta $af3800,x STA @lGRPH_LUT6_PTR, x +.390cce 9f 00 3c af sta $af3c00,x STA @lGRPH_LUT7_PTR, x +.390cd2 e8 inx inx +.390cd3 86 02 stx $02 STX $02 +.390cd5 a6 0a ldx $0a LDX $0A +.390cd7 bf 00 78 39 lda $397800,x LDA RANDOM_LUT_Tbl, x +.390cdb a6 02 ldx $02 LDX $02 +.390cdd 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR, x +.390ce1 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR, x +.390ce5 9f 00 28 af sta $af2800,x STA @lGRPH_LUT2_PTR, x +.390ce9 9f 00 2c af sta $af2c00,x STA @lGRPH_LUT3_PTR, x +.390ced 9f 00 30 af sta $af3000,x STA @lGRPH_LUT4_PTR, x +.390cf1 9f 00 34 af sta $af3400,x STA @lGRPH_LUT5_PTR, x +.390cf5 9f 00 38 af sta $af3800,x STA @lGRPH_LUT6_PTR, x +.390cf9 9f 00 3c af sta $af3c00,x STA @lGRPH_LUT7_PTR, x +.390cfd e8 inx inx +.390cfe 86 02 stx $02 STX $02 +.390d00 a6 0a ldx $0a LDX $0A +.390d02 bf 00 77 39 lda $397700,x LDA GAMMA_1_8_Tbl, x +.390d06 49 aa eor #$aa EOR #$AA +.390d08 a6 02 ldx $02 LDX $02 +.390d0a 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR, x +.390d0e 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR, x +.390d12 9f 00 28 af sta $af2800,x STA @lGRPH_LUT2_PTR, x +.390d16 9f 00 2c af sta $af2c00,x STA @lGRPH_LUT3_PTR, x +.390d1a 9f 00 30 af sta $af3000,x STA @lGRPH_LUT4_PTR, x +.390d1e 9f 00 34 af sta $af3400,x STA @lGRPH_LUT5_PTR, x +.390d22 9f 00 38 af sta $af3800,x STA @lGRPH_LUT6_PTR, x +.390d26 9f 00 3c af sta $af3c00,x STA @lGRPH_LUT7_PTR, x +.390d2a e8 inx inx +.390d2b a9 ff lda #$ff LDA #$FF +.390d2d 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR, x +.390d31 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR, x +.390d35 9f 00 28 af sta $af2800,x STA @lGRPH_LUT2_PTR, x +.390d39 9f 00 2c af sta $af2c00,x STA @lGRPH_LUT3_PTR, x +.390d3d 9f 00 30 af sta $af3000,x STA @lGRPH_LUT4_PTR, x +.390d41 9f 00 34 af sta $af3400,x STA @lGRPH_LUT5_PTR, x +.390d45 9f 00 38 af sta $af3800,x STA @lGRPH_LUT6_PTR, x +.390d49 9f 00 3c af sta $af3c00,x STA @lGRPH_LUT7_PTR, x +.390d4d e6 0a inc $0a inc $0A +.390d4f e8 inx inx +.390d50 e0 00 04 cpx #$0400 cpx #$0400 +.390d53 f0 03 beq $390d58 beq iinit_lut_exit +.390d55 82 4e ff brl $390ca6 brl iinit_lut_loop +.390d58 iinit_lut_exit +.390d58 c2 30 rep #$30 REP #$30 ; set A&X long +.390d5a fa plx PLX +.390d5b 68 pla PLA +.390d5c 6b rtl RTL +.390d5d 48 pha IINITVKYTXTMODE PHA +.390d5e 08 php PHP +.390d5f e2 20 sep #$20 SEP #$20 ; set A short +.390d61 af 01 00 af lda $af0001 LDA @l MASTER_CTRL_REG_H +.390d65 29 01 and #$01 AND #$01 +.390d67 c9 01 cmp #$01 CMP #$01 +.390d69 d0 15 bne $390d80 BNE INITVICKYMODE +.390d6b a9 00 lda #$00 LDA #$00 +.390d6d 8f 01 00 af sta $af0001 STA @L MASTER_CTRL_REG_H +.390d71 ea nop NOP +.390d72 ea nop NOP +.390d73 ea nop NOP +.390d74 ea nop NOP +.390d75 ea nop NOP +.390d76 a9 01 lda #$01 LDA #$01 +.390d78 8f 01 00 af sta $af0001 STA @L MASTER_CTRL_REG_H +.390d7c ea nop NOP +.390d7d ea nop NOP +.390d7e ea nop NOP +.390d7f ea nop NOP +.390d80 INITVICKYMODE +.390d80 a9 00 lda #$00 LDA #$00 +.390d82 8f 01 00 af sta $af0001 STA @L MASTER_CTRL_REG_H +.390d86 a9 01 lda #$01 LDA #Mstr_Ctrl_Text_Mode_En ; Set it to 640x480 for real +.390d88 8f 00 00 af sta $af0000 STA @L MASTER_CTRL_REG_L +.390d8c e2 20 sep #$20 SEP #$20 ; set A short +.390d8e a9 20 lda #$20 LDA #$20 +.390d90 8f 05 00 af sta $af0005 STA BORDER_COLOR_B +.390d94 8f 07 00 af sta $af0007 STA BORDER_COLOR_R +.390d98 a9 00 lda #$00 LDA #$00 +.390d9a 8f 06 00 af sta $af0006 STA BORDER_COLOR_G +.390d9e a9 01 lda #$01 LDA #Border_Ctrl_Enable ; Enable the Border +.390da0 8f 04 00 af sta $af0004 STA BORDER_CTRL_REG +.390da4 a9 20 lda #$20 LDA #32 ; Set the border to the standard 32 pixels +.390da6 8f 08 00 af sta $af0008 STA BORDER_X_SIZE +.390daa 8f 09 00 af sta $af0009 STA BORDER_Y_SIZE +.390dae c2 30 rep #$30 REP #$30 ; set A&X long +.390db0 22 b7 0d 39 jsl $390db7 JSL ISETSIZES ; Calculate the size of the text screen +.390db4 28 plp PLP +.390db5 68 pla PLA +.390db6 6b rtl RTL +.390db7 ISETSIZES +.390db7 48 pha PHA +.390db8 da phx PHX +.390db9 5a phy PHY +.390dba 8b phb PHB +.390dbb 0b phd PHD +.390dbc 08 php PHP +.390dbd 48 pha PHA ; begin setdp macro +.390dbe 08 php PHP +.390dbf c2 20 rep #$20 REP #$20 ; set A long +.390dc1 a9 00 00 lda #$0000 LDA #<>BANK0_BEGIN ; set DP to page 0 +.390dc4 5b tcd TCD +.390dc5 28 plp PLP +.390dc6 68 pla PLA ; end setdp macro +.390dc7 48 pha PHA ; begin setdbr macro +.390dc8 08 php PHP +.390dc9 e2 20 sep #$20 SEP #$20 ; set A short +.390dcb a9 00 lda #$00 LDA #0 +.390dcd 48 pha PHA +.390dce ab plb PLB +.390dcf 28 plp PLP +.390dd0 68 pla PLA ; end setdbr macro +.390dd1 e2 30 sep #$30 SEP #$30 ; set A&X short +.390dd3 af 01 00 af lda $af0001 LDA @l MASTER_CTRL_REG_H +.390dd7 29 03 and #$03 AND #$03 ; Mask off the resolution bits +.390dd9 0a asl a ASL A +.390dda aa tax TAX ; Index to the col/line count in X .390ddb c2 20 rep #$20 REP #$20 ; set A long -.390ddd 38 sec SEC -.390dde a5 11 lda $11 LDA COLS_PER_LINE -.390de0 e5 00 sbc $00 SBC TMPPTR1 -.390de2 85 0f sta $0f STA COLS_VISIBLE -.390de4 af 09 00 af lda $af0009 LDA @l BORDER_Y_SIZE ; Get the horizontal border width -.390de8 29 3f 00 and #$003f AND #$3F -.390deb 89 03 00 bit #$0003 BIT #$03 ; Check the lower two bits... indicates a partial column is eaten -.390dee d0 04 bne $390df4 BNE frac_height -.390df0 4a lsr a LSR A ; COLUMNS_HIDDEN := BORDER_X_SIZE / 4 -.390df1 4a lsr a LSR A -.390df2 80 03 bra $390df7 BRA store_height -.390df4 4a lsr a frac_height LSR A ; COLUMNS_HIDDEN := BORDER_X_SIZE / 4 + 1 -.390df5 4a lsr a LSR A ; because a column is partially hidden -.390df6 1a inc a INC A -.390df7 85 00 sta $00 store_height STA TMPPTR1 -.390df9 64 01 stz $01 STZ TMPPTR1+1 -.390dfb e2 20 sep #$20 SEP #$20 ; set A short -.390dfd af 01 00 af lda $af0001 LDA @l MASTER_CTRL_REG_H ; Check if we're pixel doubling -.390e01 89 02 bit #$02 BIT #Mstr_Ctrl_Video_Mode1 -.390e03 f0 04 beq $390e09 BEQ adjust_height ; No... just adjust the height of the screen -.390e05 c2 20 rep #$20 REP #$20 ; set A long -.390e07 46 00 lsr $00 LSR TMPPTR1 ; Yes... cut the adjustment in half -.390e09 adjust_height -.390e09 c2 20 rep #$20 REP #$20 ; set A long -.390e0b 38 sec SEC -.390e0c a5 15 lda $15 LDA LINES_MAX -.390e0e e5 00 sbc $00 SBC TMPPTR1 -.390e10 85 13 sta $13 STA LINES_VISIBLE -.390e12 c2 30 rep #$30 REP #$30 ; set A&X long -.390e14 28 plp done PLP -.390e15 2b pld PLD -.390e16 ab plb PLB -.390e17 7a ply PLY -.390e18 fa plx PLX -.390e19 68 pla PLA -.390e1a 6b rtl RTL ->390e1b 50 00 64 00 28 00 32 00 cols_by_res .word 80,100,40,50 ->390e23 3c 00 4b 00 1e 00 25 00 lines_by_res .word 60,75,30,37 -.390e2b IINITVKYGRPMODE -.390e2b 48 pha PHA -.390e2c e2 20 sep #$20 SEP #$20 ; set A short -.390e2e a9 00 lda #$00 LDA #$00 ; Enable Bit-Map and uses LUT0 -.390e30 8f 00 01 af sta $af0100 STA @lBM0_CONTROL_REG -.390e34 a9 00 lda #$00 LDA #$00 ;; (L)Load Base Address of where Bitmap begins -.390e36 8f 01 01 af sta $af0101 STA @lBM0_START_ADDY_L -.390e3a a9 c0 lda #$c0 LDA #$C0 -.390e3c 8f 02 01 af sta $af0102 STA @lBM0_START_ADDY_M -.390e40 a9 00 lda #$00 LDA #$00 -.390e42 8f 03 01 af sta $af0103 STA @lBM0_START_ADDY_H ; This address is always base from -.390e46 a9 00 lda #$00 LDA #$00 ; Enable Bit-Map and uses LUT0 -.390e48 8f 08 01 af sta $af0108 STA @lBM1_CONTROL_REG -.390e4c a9 00 lda #$00 LDA #$00 ;; (L)Load Base Address of where Bitmap begins -.390e4e 8f 09 01 af sta $af0109 STA @lBM1_START_ADDY_L -.390e52 a9 c0 lda #$c0 LDA #$C0 -.390e54 8f 0a 01 af sta $af010a STA @lBM1_START_ADDY_M -.390e58 a9 00 lda #$00 LDA #$00 -.390e5a 8f 0b 01 af sta $af010b STA @lBM1_START_ADDY_H ; This address is always base from -.390e5e c2 30 rep #$30 REP #$30 ; set A&X long -.390e60 68 pla PLA -.390e61 6b rtl RTL -.390e62 IINITTILEMODE -.390e62 6b rtl RTL -.390e63 48 pha IINITSPRITE PHA -.390e64 e2 20 sep #$20 SEP #$20 ; set A short -.390e66 a9 03 lda #$03 LDA #$03 ; Enable 17 Sprites -.390e68 8f 00 0c af sta $af0c00 STA SP00_CONTROL_REG -.390e6c 8f 08 0c af sta $af0c08 STA SP01_CONTROL_REG -.390e70 8f 10 0c af sta $af0c10 STA SP02_CONTROL_REG -.390e74 8f 18 0c af sta $af0c18 STA SP03_CONTROL_REG -.390e78 8f 20 0c af sta $af0c20 STA SP04_CONTROL_REG -.390e7c 8f 28 0c af sta $af0c28 STA SP05_CONTROL_REG -.390e80 8f 30 0c af sta $af0c30 STA SP06_CONTROL_REG -.390e84 8f 38 0c af sta $af0c38 STA SP07_CONTROL_REG -.390e88 8f 40 0c af sta $af0c40 STA SP08_CONTROL_REG -.390e8c 8f 48 0c af sta $af0c48 STA SP09_CONTROL_REG -.390e90 8f 50 0c af sta $af0c50 STA SP10_CONTROL_REG -.390e94 8f 58 0c af sta $af0c58 STA SP11_CONTROL_REG -.390e98 8f 60 0c af sta $af0c60 STA SP12_CONTROL_REG -.390e9c 8f 68 0c af sta $af0c68 STA SP13_CONTROL_REG -.390ea0 8f 70 0c af sta $af0c70 STA SP14_CONTROL_REG -.390ea4 8f 78 0c af sta $af0c78 STA SP15_CONTROL_REG -.390ea8 8f 80 0c af sta $af0c80 STA SP16_CONTROL_REG -.390eac a9 09 lda #$09 LDA #$09 -.390eae 8f 03 0c af sta $af0c03 STA SP00_ADDY_PTR_H -.390eb2 8f 0b 0c af sta $af0c0b STA SP01_ADDY_PTR_H -.390eb6 8f 13 0c af sta $af0c13 STA SP02_ADDY_PTR_H -.390eba 8f 1b 0c af sta $af0c1b STA SP03_ADDY_PTR_H -.390ebe 8f 23 0c af sta $af0c23 STA SP04_ADDY_PTR_H -.390ec2 8f 2b 0c af sta $af0c2b STA SP05_ADDY_PTR_H -.390ec6 8f 33 0c af sta $af0c33 STA SP06_ADDY_PTR_H -.390eca 8f 3b 0c af sta $af0c3b STA SP07_ADDY_PTR_H -.390ece 8f 43 0c af sta $af0c43 STA SP08_ADDY_PTR_H -.390ed2 8f 4b 0c af sta $af0c4b STA SP09_ADDY_PTR_H -.390ed6 8f 53 0c af sta $af0c53 STA SP10_ADDY_PTR_H -.390eda 8f 5b 0c af sta $af0c5b STA SP11_ADDY_PTR_H -.390ede 8f 63 0c af sta $af0c63 STA SP12_ADDY_PTR_H -.390ee2 8f 6b 0c af sta $af0c6b STA SP13_ADDY_PTR_H -.390ee6 8f 73 0c af sta $af0c73 STA SP14_ADDY_PTR_H -.390eea 8f 7b 0c af sta $af0c7b STA SP15_ADDY_PTR_H -.390eee 8f 83 0c af sta $af0c83 STA SP16_ADDY_PTR_H -.390ef2 a9 00 lda #$00 LDA #$00 -.390ef4 8f 02 0c af sta $af0c02 STA SP00_ADDY_PTR_M -.390ef8 a9 04 lda #$04 LDA #$04 -.390efa 8f 0a 0c af sta $af0c0a STA SP01_ADDY_PTR_M -.390efe a9 08 lda #$08 LDA #$08 -.390f00 8f 12 0c af sta $af0c12 STA SP02_ADDY_PTR_M -.390f04 a9 0c lda #$0c LDA #$0C -.390f06 8f 1a 0c af sta $af0c1a STA SP03_ADDY_PTR_M -.390f0a a9 10 lda #$10 LDA #$10 -.390f0c 8f 22 0c af sta $af0c22 STA SP04_ADDY_PTR_M -.390f10 a9 14 lda #$14 LDA #$14 -.390f12 8f 2a 0c af sta $af0c2a STA SP05_ADDY_PTR_M -.390f16 a9 18 lda #$18 LDA #$18 -.390f18 8f 32 0c af sta $af0c32 STA SP06_ADDY_PTR_M -.390f1c a9 1c lda #$1c LDA #$1C -.390f1e 8f 3a 0c af sta $af0c3a STA SP07_ADDY_PTR_M -.390f22 a9 20 lda #$20 LDA #$20 -.390f24 8f 42 0c af sta $af0c42 STA SP08_ADDY_PTR_M -.390f28 a9 24 lda #$24 LDA #$24 -.390f2a 8f 4a 0c af sta $af0c4a STA SP09_ADDY_PTR_M -.390f2e a9 28 lda #$28 LDA #$28 -.390f30 8f 52 0c af sta $af0c52 STA SP10_ADDY_PTR_M -.390f34 a9 2c lda #$2c LDA #$2C -.390f36 8f 5a 0c af sta $af0c5a STA SP11_ADDY_PTR_M -.390f3a a9 30 lda #$30 LDA #$30 -.390f3c 8f 62 0c af sta $af0c62 STA SP12_ADDY_PTR_M -.390f40 a9 34 lda #$34 LDA #$34 -.390f42 8f 6a 0c af sta $af0c6a STA SP13_ADDY_PTR_M -.390f46 a9 38 lda #$38 LDA #$38 -.390f48 8f 72 0c af sta $af0c72 STA SP14_ADDY_PTR_M -.390f4c a9 3c lda #$3c LDA #$3C -.390f4e 8f 7a 0c af sta $af0c7a STA SP15_ADDY_PTR_M -.390f52 a9 40 lda #$40 LDA #$40 -.390f54 8f 82 0c af sta $af0c82 STA SP16_ADDY_PTR_M -.390f58 a9 00 lda #$00 LDA #$00 -.390f5a 8f 01 0c af sta $af0c01 STA SP00_ADDY_PTR_L -.390f5e 8f 09 0c af sta $af0c09 STA SP01_ADDY_PTR_L -.390f62 8f 11 0c af sta $af0c11 STA SP02_ADDY_PTR_L -.390f66 8f 19 0c af sta $af0c19 STA SP03_ADDY_PTR_L -.390f6a 8f 21 0c af sta $af0c21 STA SP04_ADDY_PTR_L -.390f6e 8f 29 0c af sta $af0c29 STA SP05_ADDY_PTR_L -.390f72 8f 31 0c af sta $af0c31 STA SP06_ADDY_PTR_L -.390f76 8f 39 0c af sta $af0c39 STA SP07_ADDY_PTR_L -.390f7a 8f 41 0c af sta $af0c41 STA SP08_ADDY_PTR_L -.390f7e 8f 49 0c af sta $af0c49 STA SP09_ADDY_PTR_L -.390f82 8f 51 0c af sta $af0c51 STA SP10_ADDY_PTR_L -.390f86 8f 59 0c af sta $af0c59 STA SP11_ADDY_PTR_L -.390f8a 8f 61 0c af sta $af0c61 STA SP12_ADDY_PTR_L -.390f8e 8f 69 0c af sta $af0c69 STA SP13_ADDY_PTR_L -.390f92 8f 71 0c af sta $af0c71 STA SP14_ADDY_PTR_L -.390f96 8f 79 0c af sta $af0c79 STA SP15_ADDY_PTR_L -.390f9a 8f 81 0c af sta $af0c81 STA SP16_ADDY_PTR_L -.390f9e 68 pla PLA -.390f9f 6b rtl RTL -.390fa0 IINITFONTSET -.390fa0 48 pha PHA -.390fa1 da phx PHX -.390fa2 5a phy PHY -.390fa3 8b phb PHB -.390fa4 08 php PHP -.390fa5 c2 30 rep #$30 REP #$30 ; set A&X long -.390fa7 a2 00 f0 ldx #$f000 LDX #<>FONT_4_BANK0 ; Font data to load -.390faa a0 00 80 ldy #$8000 LDY #<>FONT_MEMORY_BANK0 ; Location to load the font data -.390fad a9 00 08 lda #$0800 LDA #8 * 256 ; Size of a FONT in bytes -.390fb0 54 af 3f mvn $3f,$af MVN #`FONT_4_BANK0, #`FONT_MEMORY_BANK0 -.390fb3 28 plp PLP -.390fb4 ab plb PLB -.390fb5 7a ply PLY -.390fb6 fa plx PLX -.390fb7 68 pla PLA -.390fb8 6b rtl RTL -.390fb9 INITMOUSEPOINTER -.390fb9 e2 20 sep #$20 SEP #$20 ; set A short -.390fbb c2 10 rep #$10 REP #$10 ; set X long -.390fbd a2 00 00 ldx #$0000 LDX #$0000 -.390fc0 FILL_MOUSE_MARKER -.390fc0 bf 00 79 39 lda $397900,x LDA @lMOUSE_POINTER_PTR,X -.390fc4 9f 00 05 af sta $af0500,x STA @lMOUSE_PTR_GRAP0_START, X -.390fc8 e8 inx INX -.390fc9 e0 00 01 cpx #$0100 CPX #$0100 -.390fcc d0 f2 bne $390fc0 BNE FILL_MOUSE_MARKER -.390fce ea nop nop -.390fcf a9 01 lda #$01 LDA #$01 -.390fd1 8f 00 07 af sta $af0700 STA @lMOUSE_PTR_CTRL_REG_L ; Enable Mouse, Mouse Pointer Graphic Bank 0 -.390fd5 c2 30 rep #$30 REP #$30 ; set A&X long -.390fd7 6b rtl RTL -.390fd8 48 pha IINITCURSOR PHA -.390fd9 e2 20 sep #$20 SEP #$20 ; set A short -.390fdb a9 b1 lda #$b1 LDA #$B1 ;The Cursor Character will be a Fully Filled Block -.390fdd 8f 12 00 af sta $af0012 STA VKY_TXT_CURSOR_CHAR_REG -.390fe1 a9 03 lda #$03 LDA #$03 ;Set Cursor Enable And Flash Rate @1Hz -.390fe3 8f 10 00 af sta $af0010 STA VKY_TXT_CURSOR_CTRL_REG ; -.390fe7 c2 30 rep #$30 REP #$30 ; set A&X long -.390fe9 a9 00 00 lda #$0000 LDA #$0000; -.390fec 8f 14 00 af sta $af0014 STA VKY_TXT_CURSOR_X_REG_L; // Set the X to Position 1 -.390ff0 a9 06 00 lda #$0006 LDA #$0006; -.390ff3 8f 16 00 af sta $af0016 STA VKY_TXT_CURSOR_Y_REG_L; // Set the Y to Position 6 (Below) -.390ff7 68 pla PLA -.390ff8 6b rtl RTL -.390ff9 0b phd IINITSUPERIO PHD -.390ffa 08 php PHP -.390ffb 48 pha PHA -.390ffc e2 20 sep #$20 SEP #$20 ; set A short -.390ffe a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin -.391000 8f 23 11 af sta $af1123 STA GP10_REG -.391004 af 23 11 af lda $af1123 LDA GP10_REG -.391008 a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin -.39100a 8f 24 11 af sta $af1124 STA GP11_REG -.39100e a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin -.391010 8f 25 11 af sta $af1125 STA GP12_REG -.391014 a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin -.391016 8f 26 11 af sta $af1126 STA GP13_REG -.39101a a9 05 lda #$05 LDA #$05 ;(C256 - POT A Analog BX) Bit[0] = 1, Bit[2] = 1 -.39101c 8f 27 11 af sta $af1127 STA GP14_REG -.391020 a9 05 lda #$05 LDA #$05 ;(C256 - POT A Analog BY) Bit[0] = 1, Bit[2] = 1 -.391022 8f 28 11 af sta $af1128 STA GP15_REG -.391026 a9 05 lda #$05 LDA #$05 ;(C256 - POT B Analog BX) Bit[0] = 1, Bit[2] = 1 -.391028 8f 29 11 af sta $af1129 STA GP16_REG -.39102c a9 05 lda #$05 LDA #$05 ;(C256 - POT B Analog BY) Bit[0] = 1, Bit[2] = 1 -.39102e 8f 2a 11 af sta $af112a STA GP17_REG -.391032 a9 00 lda #$00 LDA #$00 ;(C256 - HEADPHONE MUTE) - Output GPIO - Push-Pull (1 - Headphone On, 0 - HeadPhone Off) -.391034 8f 2b 11 af sta $af112b STA GP20_REG -.391038 a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin -.39103a 8f 2f 11 af sta $af112f STA GP24_REG -.39103e a9 05 lda #$05 LDA #$05 ;(C256 - MIDI IN) Bit[0] = 1, Bit[2] = 1 (Page 132 Manual) -.391040 8f 30 11 af sta $af1130 STA GP25_REG -.391044 a9 84 lda #$84 LDA #$84 ;(C256 - MIDI OUT) Bit[2] = 1, Bit[7] = 1 (Open Drain - To be Checked) -.391046 8f 31 11 af sta $af1131 STA GP26_REG -.39104a a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 1) Setup as GPIO Input for now -.39104c 8f 33 11 af sta $af1133 STA GP30_REG -.391050 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 4) Setup as GPIO Input for now -.391052 8f 34 11 af sta $af1134 STA GP31_REG -.391056 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 3) Setup as GPIO Input for now -.391058 8f 35 11 af sta $af1135 STA GP32_REG -.39105c a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 6) Setup as GPIO Input for now -.39105e 8f 36 11 af sta $af1136 STA GP33_REG -.391062 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 5) Setup as GPIO Input for now -.391064 8f 37 11 af sta $af1137 STA GP34_REG -.391068 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 8) Setup as GPIO Input for now -.39106a 8f 38 11 af sta $af1138 STA GP35_REG -.39106e a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 7) Setup as GPIO Input for now -.391070 8f 39 11 af sta $af1139 STA GP36_REG -.391074 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 10) Setup as GPIO Input for now -.391076 8f 3a 11 af sta $af113a STA GP37_REG -.39107a a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin -.39107c 8f 3d 11 af sta $af113d STA GP42_REG -.391080 a9 01 lda #$01 LDA #$01 ;(C256 - INPUT PLL CLK INTERRUPT) Default Value - Will keep it as an input for now, no real usage for now -.391082 8f 3e 11 af sta $af113e STA GP43_REG -.391086 a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - RI2) - Input - Set Secondary Function -.391088 8f 3f 11 af sta $af113f STA GP50_REG -.39108c a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - DCD2) - Input - Set Secondary Function -.39108e 8f 40 11 af sta $af1140 STA GP51_REG -.391092 a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - RXD2) - Input - Set Secondary Function -.391094 8f 41 11 af sta $af1141 STA GP52_REG -.391098 a9 04 lda #$04 LDA #$04 ;(C256 - UART2 - TXD2) - Output - Set Secondary Function -.39109a 8f 42 11 af sta $af1142 STA GP53_REG -.39109e a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - DSR2) - Input - Set Secondary Function -.3910a0 8f 43 11 af sta $af1143 STA GP54_REG -.3910a4 a9 04 lda #$04 LDA #$04 ;(C256 - UART2 - RTS2) - Output - Set Secondary Function -.3910a6 8f 44 11 af sta $af1144 STA GP55_REG -.3910aa a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - CTS2) - Input - Set Secondary Function -.3910ac 8f 45 11 af sta $af1145 STA GP56_REG -.3910b0 a9 04 lda #$04 LDA #$04 ;(C256 - UART2 - DTR2) - Output - Set Secondary Function -.3910b2 8f 46 11 af sta $af1146 STA GP57_REG -.3910b6 a9 84 lda #$84 LDA #$84 ;(C256 - LED1) - Open Drain - Output -.3910b8 8f 47 11 af sta $af1147 STA GP60_REG -.3910bc a9 84 lda #$84 LDA #$84 ;(C256 - LED2) - Open Drain - Output -.3910be 8f 48 11 af sta $af1148 STA GP61_REG -.3910c2 a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP10..GP17) - Not Used -.3910c4 8f 4b 11 af sta $af114b STA GP1_REG -.3910c8 a9 01 lda #$01 LDA #$01 ;GPIO Data Register (GP20..GP27) - Bit[0] - Headphone Mute (Enabling it) -.3910ca 8f 4c 11 af sta $af114c STA GP2_REG -.3910ce a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP30..GP37) - Since it is in Output mode, nothing to write here. -.3910d0 8f 4d 11 af sta $af114d STA GP3_REG -.3910d4 a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP40..GP47) - Not Used -.3910d6 8f 4e 11 af sta $af114e STA GP4_REG -.3910da a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP50..GP57) - Not Used -.3910dc 8f 4f 11 af sta $af114f STA GP5_REG -.3910e0 a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP60..GP61) - Not Used -.3910e2 8f 50 11 af sta $af1150 STA GP6_REG -.3910e6 a9 01 lda #$01 LDA #$01 ;LED1 Output - Already setup by Vicky Init Phase, for now, I will leave it alone -.3910e8 8f 5d 11 af sta $af115d STA LED1_REG -.3910ec a9 02 lda #$02 LDA #$02 ;LED2 Output - However, I will setup this one, to make sure the Code works (Full On, when Code was ran) -.3910ee 8f 5e 11 af sta $af115e STA LED2_REG -.3910f2 c2 20 rep #$20 REP #$20 ; set A long -.3910f4 68 pla PLA -.3910f5 28 plp PLP -.3910f6 2b pld PLD -.3910f7 6b rtl RTL -.3910f8 0b phd IINITKEYBOARD PHD -.3910f9 08 php PHP -.3910fa 48 pha PHA -.3910fb da phx PHX -.3910fc e2 20 sep #$20 SEP #$20 ; set A short -.3910fe c2 10 rep #$10 REP #$10 ; set X long -.391100 18 clc CLC -.391101 20 b1 11 jsr $3911b1 JSR Poll_Inbuf ; -.391104 a9 aa lda #$aa LDA #$AA ;Send self test command -.391106 8f 64 10 af sta $af1064 STA KBD_CMD_BUF -.39110a 20 bc 11 jsr $3911bc JSR Poll_Outbuf ; -.39110d af 60 10 af lda $af1060 LDA KBD_OUT_BUF ;Check self test result -.391111 c9 55 cmp #$55 CMP #$55 -.391113 f0 03 beq $391118 BEQ passAAtest -.391115 82 89 00 brl $3911a1 BRL initkb_loop_out -.391118 passAAtest -.391118 a9 ab lda #$ab LDA #$AB ;Send test Interface command -.39111a 8f 64 10 af sta $af1064 STA KBD_CMD_BUF -.39111e 20 bc 11 jsr $3911bc JSR Poll_Outbuf ; -.391121 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ;Display Interface test results -.391125 c9 00 cmp #$00 CMP #$00 ;Should be 00 -.391127 f0 03 beq $39112c BEQ passABtest -.391129 82 75 00 brl $3911a1 BRL initkb_loop_out -.39112c passABtest -.39112c a9 60 lda #$60 LDA #$60 ; Send Command 0x60 so to Enable Interrupt -.39112e 8f 64 10 af sta $af1064 STA KBD_CMD_BUF -.391132 20 b1 11 jsr $3911b1 JSR Poll_Inbuf ; -.391135 a9 69 lda #$69 LDA #%01101001 ; Enable Interrupt -.391137 8f 60 10 af sta $af1060 STA KBD_DATA_BUF -.39113b 20 b1 11 jsr $3911b1 JSR Poll_Inbuf ; -.39113e a9 ff lda #$ff LDA #$FF ; Send Keyboard Reset command -.391140 8f 60 10 af sta $af1060 STA KBD_DATA_BUF -.391144 a2 ff ff ldx #$ffff LDX #$FFFF -.391147 ca dex DLY_LOOP1 DEX -.391148 ea nop NOP -.391149 ea nop NOP -.39114a ea nop NOP -.39114b ea nop NOP -.39114c ea nop NOP -.39114d ea nop NOP -.39114e ea nop NOP -.39114f ea nop NOP -.391150 e0 00 00 cpx #$0000 CPX #$0000 -.391153 d0 f2 bne $391147 BNE DLY_LOOP1 -.391155 20 bc 11 jsr $3911bc JSR Poll_Outbuf ; -.391158 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ; Read Output Buffer -.39115c DO_CMD_F4_AGAIN -.39115c 20 b1 11 jsr $3911b1 JSR Poll_Inbuf ; -.39115f a9 f4 lda #$f4 LDA #$F4 ; Enable the Keyboard -.391161 8f 60 10 af sta $af1060 STA KBD_DATA_BUF -.391165 20 bc 11 jsr $3911bc JSR Poll_Outbuf ; -.391168 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ; Clear the Output buffer -.39116c c9 fa cmp #$fa CMP #$FA -.39116e d0 ec bne $39115c BNE DO_CMD_F4_AGAIN -.391170 20 c7 11 jsr $3911c7 JSR INIT_MOUSE -.391173 af 40 01 00 lda $000140 LDA @lINT_PENDING_REG0 ; Read the Pending Register & -.391177 29 80 and #$80 AND #FNX0_INT07_MOUSE -.391179 8f 40 01 00 sta $000140 STA @lINT_PENDING_REG0 ; Writing it back will clear the Active Bit -.39117d af 41 01 00 lda $000141 LDA @lINT_PENDING_REG1 ; Read the Pending Register & -.391181 29 01 and #$01 AND #FNX1_INT00_KBD -.391183 8f 41 01 00 sta $000141 STA @lINT_PENDING_REG1 ; Writing it back will clear the Active Bit -.391187 af 4d 01 00 lda $00014d LDA @lINT_MASK_REG1 -.39118b 29 fe and #$fe AND #~FNX1_INT00_KBD -.39118d 8f 4d 01 00 sta $00014d STA @lINT_MASK_REG1 -.391191 af 4c 01 00 lda $00014c LDA @lINT_MASK_REG0 -.391195 29 7f and #$7f AND #~FNX0_INT07_MOUSE -.391197 8f 4c 01 00 sta $00014c STA @lINT_MASK_REG0 -.39119b a2 26 71 ldx #$7126 LDX #<>Success_kb_init -.39119e 38 sec SEC -.39119f b0 03 bcs $3911a4 BCS InitSuccess -.3911a1 a2 38 71 ldx #$7138 initkb_loop_out LDX #<>Failed_kb_init -.3911a4 22 7e 07 39 jsl $39077e InitSuccess JSL IPRINT ; print Message -.3911a8 c2 20 rep #$20 REP #$20 ; set A long -.3911aa c2 10 rep #$10 REP #$10 ; set X long -.3911ac fa plx PLX -.3911ad 68 pla PLA -.3911ae 28 plp PLP -.3911af 2b pld PLD -.3911b0 6b rtl RTL -.3911b1 Poll_Inbuf -.3911b1 af 64 10 af lda $af1064 LDA STATUS_PORT ; Load Status Byte -.3911b5 29 02 and #$02 AND #bmp_parser_msg0 -.39152d 80 03 bra $391532 BRA BMP_PARSER_END_NO_ERROR -.39152f BMP_PARSER_END_WITH_ERROR -.39152f a2 60 71 ldx #$7160 LDX #<>bmp_parser_err0 -.391532 BMP_PARSER_END_NO_ERROR -.391532 22 7e 07 39 jsl $39077e JSL IPRINT ; print the first line -.391536 6b rtl RTL -.391537 BMP_PARSER_UPDATE_LUT0 -.391537 38 sec SEC -.391538 a0 7a 00 ldy #$007a LDY #$007A -.39153b a2 00 00 ldx #$0000 LDX #$0000 -.39153e e2 20 sep #$20 SEP #$20 ; set A short -.391540 BMP_PARSER_UPDATE_LOOP -.391540 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; First Pixel is Red -.391542 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR+0, X ; The look-up Table point to a pixel Blue -.391546 c8 iny INY -.391547 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Second Pixel is Green -.391549 9f 01 20 af sta $af2001,x STA @lGRPH_LUT0_PTR+1, X ; The look-up Table point to a pixel Blue -.39154d c8 iny INY -.39154e b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Third Pixel is Blue -.391550 9f 02 20 af sta $af2002,x STA @lGRPH_LUT0_PTR+2, X ; The look-up Table point to a pixel Blue -.391554 c8 iny INY -.391555 a9 80 lda #$80 LDA #$80 -.391557 9f 03 20 af sta $af2003,x STA @lGRPH_LUT0_PTR+3, X ; The look-up Table point to a pixel Blue -.39155b c8 iny INY ; For the Alpha Value, nobody cares -.39155c e8 inx INX -.39155d e8 inx INX -.39155e e8 inx INX -.39155f e8 inx INX -.391560 e4 4c cpx $4c CPX BMP_COLOR_PALET ; Apparently sometime there is less than 256 Values in the lookup -.391562 d0 dc bne $391540 BNE BMP_PARSER_UPDATE_LOOP -.391564 c2 20 rep #$20 REP #$20 ; set A long -.391566 60 rts RTS -.391567 BMP_PARSER_UPDATE_LUT1 -.391567 38 sec SEC -.391568 a0 36 00 ldy #$0036 LDY #$0036 -.39156b a2 00 00 ldx #$0000 LDX #$0000 -.39156e e2 20 sep #$20 SEP #$20 ; set A short -.391570 PALETTE_LUT1_LOOP -.391570 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; First Pixel is Red -.391572 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR+0, X ; The look-up Table point to a pixel Blue -.391576 c8 iny INY -.391577 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Second Pixel is Green -.391579 9f 01 24 af sta $af2401,x STA @lGRPH_LUT1_PTR+1, X ; The look-up Table point to a pixel Blue -.39157d c8 iny INY -.39157e b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Third Pixel is Blue -.391580 9f 02 24 af sta $af2402,x STA @lGRPH_LUT1_PTR+2, X ; The look-up Table point to a pixel Blue -.391584 c8 iny INY -.391585 a9 80 lda #$80 LDA #$80 -.391587 9f 03 24 af sta $af2403,x STA @lGRPH_LUT1_PTR+3, X ; The look-up Table point to a pixel Blue -.39158b c8 iny INY ; For the Alpha Value, nobody cares -.39158c e8 inx INX -.39158d e8 inx INX -.39158e e8 inx INX -.39158f e8 inx INX -.391590 e4 4c cpx $4c CPX BMP_COLOR_PALET ; Apparently sometime there is less than 256 Values in the lookup -.391592 d0 dc bne $391570 BNE PALETTE_LUT1_LOOP -.391594 c2 20 rep #$20 REP #$20 ; set A long -.391596 60 rts RTS -.391597 BMP_PARSER_DMA_SHIT_OUT -.391597 a2 00 00 ldx #$0000 LDX #$0000 -.39159a BMP_PARSER_LOOPY -.39159a a0 00 00 ldy #$0000 LDY #$0000 -.39159d e2 20 sep #$20 SEP #$20 ; set A short -.39159f BMP_PARSER_LOOPX -.39159f b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Load First Pixel Y (will be linear) -.3915a1 97 48 sta [$48],y STA [BMP_PRSE_DST_PTR],Y ; This is where the Pixel Go, Video Memory -.3915a3 c8 iny INY -.3915a4 c4 40 cpy $40 CPY BMP_X_SIZE ; Transfer the First line -.3915a6 d0 f7 bne $39159f BNE BMP_PARSER_LOOPX -.3915a8 20 b4 15 jsr $3915b4 JSR BMP_PARSER_COMPUTE_Y_SRC -.3915ab 20 cf 15 jsr $3915cf JSR BMP_PARSER_COMPUTE_Y_DST +.390ddd bf 5a 0e 39 lda $390e5a,x LDA cols_by_res,X ; Get the number of columns +.390de1 85 11 sta $11 STA COLS_PER_LINE ; This is how many columns there are per line in the memory +.390de3 85 0f sta $0f STA COLS_VISIBLE ; This is how many would be visible with no border +.390de5 bf 62 0e 39 lda $390e62,x LDA lines_by_res,X ; Get the number of lines +.390de9 85 15 sta $15 STA LINES_MAX ; This is the total number of lines in memory +.390deb 85 13 sta $13 STA LINES_VISIBLE ; This is how many lines would be visible with no border +.390ded e2 20 sep #$20 SEP #$20 ; set A short +.390def af 04 00 af lda $af0004 LDA @l BORDER_CTRL_REG ; Check to see if we have a border +.390df3 89 01 bit #$01 BIT #Border_Ctrl_Enable +.390df5 f0 5c beq $390e53 BEQ done ; No border... the sizes are correct now +.390df7 af 08 00 af lda $af0008 LDA @l BORDER_X_SIZE ; Get the horizontal border width +.390dfb 29 3f and #$3f AND #$3F +.390dfd 89 03 bit #$03 BIT #$03 ; Check the lower two bits... indicates a partial column is eaten +.390dff d0 04 bne $390e05 BNE frac_width +.390e01 4a lsr a LSR A ; COLUMNS_HIDDEN := BORDER_X_SIZE / 4 +.390e02 4a lsr a LSR A +.390e03 80 03 bra $390e08 BRA store_width +.390e05 4a lsr a frac_width LSR A ; COLUMNS_HIDDEN := BORDER_X_SIZE / 4 + 1 +.390e06 4a lsr a LSR A ; because a column is partially hidden +.390e07 1a inc a INC A +.390e08 85 00 sta $00 store_width STA TMPPTR1 +.390e0a 64 01 stz $01 STZ TMPPTR1+1 +.390e0c e2 20 sep #$20 SEP #$20 ; set A short +.390e0e af 01 00 af lda $af0001 LDA @l MASTER_CTRL_REG_H ; Check if we're pixel doubling +.390e12 89 02 bit #$02 BIT #Mstr_Ctrl_Video_Mode1 +.390e14 f0 04 beq $390e1a BEQ adjust_width ; No... just adjust the width of the screen +.390e16 c2 20 rep #$20 REP #$20 ; set A long +.390e18 46 00 lsr $00 LSR TMPPTR1 ; Yes... cut the adjustment in half +.390e1a adjust_width +.390e1a c2 20 rep #$20 REP #$20 ; set A long +.390e1c 38 sec SEC +.390e1d a5 11 lda $11 LDA COLS_PER_LINE +.390e1f e5 00 sbc $00 SBC TMPPTR1 +.390e21 85 0f sta $0f STA COLS_VISIBLE +.390e23 af 09 00 af lda $af0009 LDA @l BORDER_Y_SIZE ; Get the horizontal border width +.390e27 29 3f 00 and #$003f AND #$3F +.390e2a 89 03 00 bit #$0003 BIT #$03 ; Check the lower two bits... indicates a partial column is eaten +.390e2d d0 04 bne $390e33 BNE frac_height +.390e2f 4a lsr a LSR A ; COLUMNS_HIDDEN := BORDER_X_SIZE / 4 +.390e30 4a lsr a LSR A +.390e31 80 03 bra $390e36 BRA store_height +.390e33 4a lsr a frac_height LSR A ; COLUMNS_HIDDEN := BORDER_X_SIZE / 4 + 1 +.390e34 4a lsr a LSR A ; because a column is partially hidden +.390e35 1a inc a INC A +.390e36 85 00 sta $00 store_height STA TMPPTR1 +.390e38 64 01 stz $01 STZ TMPPTR1+1 +.390e3a e2 20 sep #$20 SEP #$20 ; set A short +.390e3c af 01 00 af lda $af0001 LDA @l MASTER_CTRL_REG_H ; Check if we're pixel doubling +.390e40 89 02 bit #$02 BIT #Mstr_Ctrl_Video_Mode1 +.390e42 f0 04 beq $390e48 BEQ adjust_height ; No... just adjust the height of the screen +.390e44 c2 20 rep #$20 REP #$20 ; set A long +.390e46 46 00 lsr $00 LSR TMPPTR1 ; Yes... cut the adjustment in half +.390e48 adjust_height +.390e48 c2 20 rep #$20 REP #$20 ; set A long +.390e4a 38 sec SEC +.390e4b a5 15 lda $15 LDA LINES_MAX +.390e4d e5 00 sbc $00 SBC TMPPTR1 +.390e4f 85 13 sta $13 STA LINES_VISIBLE +.390e51 c2 30 rep #$30 REP #$30 ; set A&X long +.390e53 28 plp done PLP +.390e54 2b pld PLD +.390e55 ab plb PLB +.390e56 7a ply PLY +.390e57 fa plx PLX +.390e58 68 pla PLA +.390e59 6b rtl RTL +>390e5a 50 00 64 00 28 00 32 00 cols_by_res .word 80,100,40,50 +>390e62 3c 00 4b 00 1e 00 25 00 lines_by_res .word 60,75,30,37 +.390e6a IINITVKYGRPMODE +.390e6a 48 pha PHA +.390e6b e2 20 sep #$20 SEP #$20 ; set A short +.390e6d a9 00 lda #$00 LDA #$00 ; Enable Bit-Map and uses LUT0 +.390e6f 8f 00 01 af sta $af0100 STA @lBM0_CONTROL_REG +.390e73 a9 00 lda #$00 LDA #$00 ;; (L)Load Base Address of where Bitmap begins +.390e75 8f 01 01 af sta $af0101 STA @lBM0_START_ADDY_L +.390e79 a9 c0 lda #$c0 LDA #$C0 +.390e7b 8f 02 01 af sta $af0102 STA @lBM0_START_ADDY_M +.390e7f a9 00 lda #$00 LDA #$00 +.390e81 8f 03 01 af sta $af0103 STA @lBM0_START_ADDY_H ; This address is always base from +.390e85 a9 00 lda #$00 LDA #$00 ; Enable Bit-Map and uses LUT0 +.390e87 8f 08 01 af sta $af0108 STA @lBM1_CONTROL_REG +.390e8b a9 00 lda #$00 LDA #$00 ;; (L)Load Base Address of where Bitmap begins +.390e8d 8f 09 01 af sta $af0109 STA @lBM1_START_ADDY_L +.390e91 a9 c0 lda #$c0 LDA #$C0 +.390e93 8f 0a 01 af sta $af010a STA @lBM1_START_ADDY_M +.390e97 a9 00 lda #$00 LDA #$00 +.390e99 8f 0b 01 af sta $af010b STA @lBM1_START_ADDY_H ; This address is always base from +.390e9d c2 30 rep #$30 REP #$30 ; set A&X long +.390e9f 68 pla PLA +.390ea0 6b rtl RTL +.390ea1 IINITTILEMODE +.390ea1 6b rtl RTL +.390ea2 48 pha IINITSPRITE PHA +.390ea3 e2 20 sep #$20 SEP #$20 ; set A short +.390ea5 a9 03 lda #$03 LDA #$03 ; Enable 17 Sprites +.390ea7 8f 00 0c af sta $af0c00 STA SP00_CONTROL_REG +.390eab 8f 08 0c af sta $af0c08 STA SP01_CONTROL_REG +.390eaf 8f 10 0c af sta $af0c10 STA SP02_CONTROL_REG +.390eb3 8f 18 0c af sta $af0c18 STA SP03_CONTROL_REG +.390eb7 8f 20 0c af sta $af0c20 STA SP04_CONTROL_REG +.390ebb 8f 28 0c af sta $af0c28 STA SP05_CONTROL_REG +.390ebf 8f 30 0c af sta $af0c30 STA SP06_CONTROL_REG +.390ec3 8f 38 0c af sta $af0c38 STA SP07_CONTROL_REG +.390ec7 8f 40 0c af sta $af0c40 STA SP08_CONTROL_REG +.390ecb 8f 48 0c af sta $af0c48 STA SP09_CONTROL_REG +.390ecf 8f 50 0c af sta $af0c50 STA SP10_CONTROL_REG +.390ed3 8f 58 0c af sta $af0c58 STA SP11_CONTROL_REG +.390ed7 8f 60 0c af sta $af0c60 STA SP12_CONTROL_REG +.390edb 8f 68 0c af sta $af0c68 STA SP13_CONTROL_REG +.390edf 8f 70 0c af sta $af0c70 STA SP14_CONTROL_REG +.390ee3 8f 78 0c af sta $af0c78 STA SP15_CONTROL_REG +.390ee7 8f 80 0c af sta $af0c80 STA SP16_CONTROL_REG +.390eeb a9 09 lda #$09 LDA #$09 +.390eed 8f 03 0c af sta $af0c03 STA SP00_ADDY_PTR_H +.390ef1 8f 0b 0c af sta $af0c0b STA SP01_ADDY_PTR_H +.390ef5 8f 13 0c af sta $af0c13 STA SP02_ADDY_PTR_H +.390ef9 8f 1b 0c af sta $af0c1b STA SP03_ADDY_PTR_H +.390efd 8f 23 0c af sta $af0c23 STA SP04_ADDY_PTR_H +.390f01 8f 2b 0c af sta $af0c2b STA SP05_ADDY_PTR_H +.390f05 8f 33 0c af sta $af0c33 STA SP06_ADDY_PTR_H +.390f09 8f 3b 0c af sta $af0c3b STA SP07_ADDY_PTR_H +.390f0d 8f 43 0c af sta $af0c43 STA SP08_ADDY_PTR_H +.390f11 8f 4b 0c af sta $af0c4b STA SP09_ADDY_PTR_H +.390f15 8f 53 0c af sta $af0c53 STA SP10_ADDY_PTR_H +.390f19 8f 5b 0c af sta $af0c5b STA SP11_ADDY_PTR_H +.390f1d 8f 63 0c af sta $af0c63 STA SP12_ADDY_PTR_H +.390f21 8f 6b 0c af sta $af0c6b STA SP13_ADDY_PTR_H +.390f25 8f 73 0c af sta $af0c73 STA SP14_ADDY_PTR_H +.390f29 8f 7b 0c af sta $af0c7b STA SP15_ADDY_PTR_H +.390f2d 8f 83 0c af sta $af0c83 STA SP16_ADDY_PTR_H +.390f31 a9 00 lda #$00 LDA #$00 +.390f33 8f 02 0c af sta $af0c02 STA SP00_ADDY_PTR_M +.390f37 a9 04 lda #$04 LDA #$04 +.390f39 8f 0a 0c af sta $af0c0a STA SP01_ADDY_PTR_M +.390f3d a9 08 lda #$08 LDA #$08 +.390f3f 8f 12 0c af sta $af0c12 STA SP02_ADDY_PTR_M +.390f43 a9 0c lda #$0c LDA #$0C +.390f45 8f 1a 0c af sta $af0c1a STA SP03_ADDY_PTR_M +.390f49 a9 10 lda #$10 LDA #$10 +.390f4b 8f 22 0c af sta $af0c22 STA SP04_ADDY_PTR_M +.390f4f a9 14 lda #$14 LDA #$14 +.390f51 8f 2a 0c af sta $af0c2a STA SP05_ADDY_PTR_M +.390f55 a9 18 lda #$18 LDA #$18 +.390f57 8f 32 0c af sta $af0c32 STA SP06_ADDY_PTR_M +.390f5b a9 1c lda #$1c LDA #$1C +.390f5d 8f 3a 0c af sta $af0c3a STA SP07_ADDY_PTR_M +.390f61 a9 20 lda #$20 LDA #$20 +.390f63 8f 42 0c af sta $af0c42 STA SP08_ADDY_PTR_M +.390f67 a9 24 lda #$24 LDA #$24 +.390f69 8f 4a 0c af sta $af0c4a STA SP09_ADDY_PTR_M +.390f6d a9 28 lda #$28 LDA #$28 +.390f6f 8f 52 0c af sta $af0c52 STA SP10_ADDY_PTR_M +.390f73 a9 2c lda #$2c LDA #$2C +.390f75 8f 5a 0c af sta $af0c5a STA SP11_ADDY_PTR_M +.390f79 a9 30 lda #$30 LDA #$30 +.390f7b 8f 62 0c af sta $af0c62 STA SP12_ADDY_PTR_M +.390f7f a9 34 lda #$34 LDA #$34 +.390f81 8f 6a 0c af sta $af0c6a STA SP13_ADDY_PTR_M +.390f85 a9 38 lda #$38 LDA #$38 +.390f87 8f 72 0c af sta $af0c72 STA SP14_ADDY_PTR_M +.390f8b a9 3c lda #$3c LDA #$3C +.390f8d 8f 7a 0c af sta $af0c7a STA SP15_ADDY_PTR_M +.390f91 a9 40 lda #$40 LDA #$40 +.390f93 8f 82 0c af sta $af0c82 STA SP16_ADDY_PTR_M +.390f97 a9 00 lda #$00 LDA #$00 +.390f99 8f 01 0c af sta $af0c01 STA SP00_ADDY_PTR_L +.390f9d 8f 09 0c af sta $af0c09 STA SP01_ADDY_PTR_L +.390fa1 8f 11 0c af sta $af0c11 STA SP02_ADDY_PTR_L +.390fa5 8f 19 0c af sta $af0c19 STA SP03_ADDY_PTR_L +.390fa9 8f 21 0c af sta $af0c21 STA SP04_ADDY_PTR_L +.390fad 8f 29 0c af sta $af0c29 STA SP05_ADDY_PTR_L +.390fb1 8f 31 0c af sta $af0c31 STA SP06_ADDY_PTR_L +.390fb5 8f 39 0c af sta $af0c39 STA SP07_ADDY_PTR_L +.390fb9 8f 41 0c af sta $af0c41 STA SP08_ADDY_PTR_L +.390fbd 8f 49 0c af sta $af0c49 STA SP09_ADDY_PTR_L +.390fc1 8f 51 0c af sta $af0c51 STA SP10_ADDY_PTR_L +.390fc5 8f 59 0c af sta $af0c59 STA SP11_ADDY_PTR_L +.390fc9 8f 61 0c af sta $af0c61 STA SP12_ADDY_PTR_L +.390fcd 8f 69 0c af sta $af0c69 STA SP13_ADDY_PTR_L +.390fd1 8f 71 0c af sta $af0c71 STA SP14_ADDY_PTR_L +.390fd5 8f 79 0c af sta $af0c79 STA SP15_ADDY_PTR_L +.390fd9 8f 81 0c af sta $af0c81 STA SP16_ADDY_PTR_L +.390fdd 68 pla PLA +.390fde 6b rtl RTL +.390fdf IINITFONTSET +.390fdf 48 pha PHA +.390fe0 da phx PHX +.390fe1 5a phy PHY +.390fe2 8b phb PHB +.390fe3 08 php PHP +.390fe4 c2 30 rep #$30 REP #$30 ; set A&X long +.390fe6 a2 00 00 ldx #$0000 LDX #<>FONT_4_BANK0 ; Font data to load +.390fe9 a0 00 80 ldy #$8000 LDY #<>FONT_MEMORY_BANK0 ; Location to load the font data +.390fec a9 00 08 lda #$0800 LDA #8 * 256 ; Size of a FONT in bytes +.390fef 54 af 3f mvn $3f,$af MVN #`FONT_4_BANK0, #`FONT_MEMORY_BANK0 +.390ff2 28 plp PLP +.390ff3 ab plb PLB +.390ff4 7a ply PLY +.390ff5 fa plx PLX +.390ff6 68 pla PLA +.390ff7 6b rtl RTL +.390ff8 INITMOUSEPOINTER +.390ff8 e2 20 sep #$20 SEP #$20 ; set A short +.390ffa c2 10 rep #$10 REP #$10 ; set X long +.390ffc a2 00 00 ldx #$0000 LDX #$0000 +.390fff FILL_MOUSE_MARKER +.390fff bf 00 79 39 lda $397900,x LDA @lMOUSE_POINTER_PTR,X +.391003 9f 00 05 af sta $af0500,x STA @lMOUSE_PTR_GRAP0_START, X +.391007 e8 inx INX +.391008 e0 00 01 cpx #$0100 CPX #$0100 +.39100b d0 f2 bne $390fff BNE FILL_MOUSE_MARKER +.39100d ea nop nop +.39100e a9 01 lda #$01 LDA #$01 +.391010 8f 00 07 af sta $af0700 STA @lMOUSE_PTR_CTRL_REG_L ; Enable Mouse, Mouse Pointer Graphic Bank 0 +.391014 c2 30 rep #$30 REP #$30 ; set A&X long +.391016 6b rtl RTL +.391017 48 pha IINITCURSOR PHA +.391018 e2 20 sep #$20 SEP #$20 ; set A short +.39101a a9 b1 lda #$b1 LDA #$B1 ;The Cursor Character will be a Fully Filled Block +.39101c 8f 12 00 af sta $af0012 STA VKY_TXT_CURSOR_CHAR_REG +.391020 a9 03 lda #$03 LDA #$03 ;Set Cursor Enable And Flash Rate @1Hz +.391022 8f 10 00 af sta $af0010 STA VKY_TXT_CURSOR_CTRL_REG ; +.391026 c2 30 rep #$30 REP #$30 ; set A&X long +.391028 a9 00 00 lda #$0000 LDA #$0000; +.39102b 8f 14 00 af sta $af0014 STA VKY_TXT_CURSOR_X_REG_L; // Set the X to Position 1 +.39102f a9 06 00 lda #$0006 LDA #$0006; +.391032 8f 16 00 af sta $af0016 STA VKY_TXT_CURSOR_Y_REG_L; // Set the Y to Position 6 (Below) +.391036 68 pla PLA +.391037 6b rtl RTL +.391038 0b phd IINITSUPERIO PHD +.391039 08 php PHP +.39103a 48 pha PHA +.39103b e2 20 sep #$20 SEP #$20 ; set A short +.39103d a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin +.39103f 8f 23 11 af sta $af1123 STA GP10_REG +.391043 af 23 11 af lda $af1123 LDA GP10_REG +.391047 a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin +.391049 8f 24 11 af sta $af1124 STA GP11_REG +.39104d a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin +.39104f 8f 25 11 af sta $af1125 STA GP12_REG +.391053 a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin +.391055 8f 26 11 af sta $af1126 STA GP13_REG +.391059 a9 05 lda #$05 LDA #$05 ;(C256 - POT A Analog BX) Bit[0] = 1, Bit[2] = 1 +.39105b 8f 27 11 af sta $af1127 STA GP14_REG +.39105f a9 05 lda #$05 LDA #$05 ;(C256 - POT A Analog BY) Bit[0] = 1, Bit[2] = 1 +.391061 8f 28 11 af sta $af1128 STA GP15_REG +.391065 a9 05 lda #$05 LDA #$05 ;(C256 - POT B Analog BX) Bit[0] = 1, Bit[2] = 1 +.391067 8f 29 11 af sta $af1129 STA GP16_REG +.39106b a9 05 lda #$05 LDA #$05 ;(C256 - POT B Analog BY) Bit[0] = 1, Bit[2] = 1 +.39106d 8f 2a 11 af sta $af112a STA GP17_REG +.391071 a9 00 lda #$00 LDA #$00 ;(C256 - HEADPHONE MUTE) - Output GPIO - Push-Pull (1 - Headphone On, 0 - HeadPhone Off) +.391073 8f 2b 11 af sta $af112b STA GP20_REG +.391077 a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin +.391079 8f 2f 11 af sta $af112f STA GP24_REG +.39107d a9 05 lda #$05 LDA #$05 ;(C256 - MIDI IN) Bit[0] = 1, Bit[2] = 1 (Page 132 Manual) +.39107f 8f 30 11 af sta $af1130 STA GP25_REG +.391083 a9 84 lda #$84 LDA #$84 ;(C256 - MIDI OUT) Bit[2] = 1, Bit[7] = 1 (Open Drain - To be Checked) +.391085 8f 31 11 af sta $af1131 STA GP26_REG +.391089 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 1) Setup as GPIO Input for now +.39108b 8f 33 11 af sta $af1133 STA GP30_REG +.39108f a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 4) Setup as GPIO Input for now +.391091 8f 34 11 af sta $af1134 STA GP31_REG +.391095 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 3) Setup as GPIO Input for now +.391097 8f 35 11 af sta $af1135 STA GP32_REG +.39109b a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 6) Setup as GPIO Input for now +.39109d 8f 36 11 af sta $af1136 STA GP33_REG +.3910a1 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 5) Setup as GPIO Input for now +.3910a3 8f 37 11 af sta $af1137 STA GP34_REG +.3910a7 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 8) Setup as GPIO Input for now +.3910a9 8f 38 11 af sta $af1138 STA GP35_REG +.3910ad a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 7) Setup as GPIO Input for now +.3910af 8f 39 11 af sta $af1139 STA GP36_REG +.3910b3 a9 01 lda #$01 LDA #$01 ;Default Value - (C256 - JP1 Fanout Pin 10) Setup as GPIO Input for now +.3910b5 8f 3a 11 af sta $af113a STA GP37_REG +.3910b9 a9 01 lda #$01 LDA #$01 ;Default Value - C256 Doesn't use this IO Pin +.3910bb 8f 3d 11 af sta $af113d STA GP42_REG +.3910bf a9 01 lda #$01 LDA #$01 ;(C256 - INPUT PLL CLK INTERRUPT) Default Value - Will keep it as an input for now, no real usage for now +.3910c1 8f 3e 11 af sta $af113e STA GP43_REG +.3910c5 a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - RI2) - Input - Set Secondary Function +.3910c7 8f 3f 11 af sta $af113f STA GP50_REG +.3910cb a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - DCD2) - Input - Set Secondary Function +.3910cd 8f 40 11 af sta $af1140 STA GP51_REG +.3910d1 a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - RXD2) - Input - Set Secondary Function +.3910d3 8f 41 11 af sta $af1141 STA GP52_REG +.3910d7 a9 04 lda #$04 LDA #$04 ;(C256 - UART2 - TXD2) - Output - Set Secondary Function +.3910d9 8f 42 11 af sta $af1142 STA GP53_REG +.3910dd a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - DSR2) - Input - Set Secondary Function +.3910df 8f 43 11 af sta $af1143 STA GP54_REG +.3910e3 a9 04 lda #$04 LDA #$04 ;(C256 - UART2 - RTS2) - Output - Set Secondary Function +.3910e5 8f 44 11 af sta $af1144 STA GP55_REG +.3910e9 a9 05 lda #$05 LDA #$05 ;(C256 - UART2 - CTS2) - Input - Set Secondary Function +.3910eb 8f 45 11 af sta $af1145 STA GP56_REG +.3910ef a9 04 lda #$04 LDA #$04 ;(C256 - UART2 - DTR2) - Output - Set Secondary Function +.3910f1 8f 46 11 af sta $af1146 STA GP57_REG +.3910f5 a9 84 lda #$84 LDA #$84 ;(C256 - LED1) - Open Drain - Output +.3910f7 8f 47 11 af sta $af1147 STA GP60_REG +.3910fb a9 84 lda #$84 LDA #$84 ;(C256 - LED2) - Open Drain - Output +.3910fd 8f 48 11 af sta $af1148 STA GP61_REG +.391101 a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP10..GP17) - Not Used +.391103 8f 4b 11 af sta $af114b STA GP1_REG +.391107 a9 01 lda #$01 LDA #$01 ;GPIO Data Register (GP20..GP27) - Bit[0] - Headphone Mute (Enabling it) +.391109 8f 4c 11 af sta $af114c STA GP2_REG +.39110d a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP30..GP37) - Since it is in Output mode, nothing to write here. +.39110f 8f 4d 11 af sta $af114d STA GP3_REG +.391113 a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP40..GP47) - Not Used +.391115 8f 4e 11 af sta $af114e STA GP4_REG +.391119 a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP50..GP57) - Not Used +.39111b 8f 4f 11 af sta $af114f STA GP5_REG +.39111f a9 00 lda #$00 LDA #$00 ;GPIO Data Register (GP60..GP61) - Not Used +.391121 8f 50 11 af sta $af1150 STA GP6_REG +.391125 a9 01 lda #$01 LDA #$01 ;LED1 Output - Already setup by Vicky Init Phase, for now, I will leave it alone +.391127 8f 5d 11 af sta $af115d STA LED1_REG +.39112b a9 02 lda #$02 LDA #$02 ;LED2 Output - However, I will setup this one, to make sure the Code works (Full On, when Code was ran) +.39112d 8f 5e 11 af sta $af115e STA LED2_REG +.391131 c2 20 rep #$20 REP #$20 ; set A long +.391133 68 pla PLA +.391134 28 plp PLP +.391135 2b pld PLD +.391136 6b rtl RTL +.391137 0b phd IINITKEYBOARD PHD +.391138 08 php PHP +.391139 48 pha PHA +.39113a da phx PHX +.39113b e2 20 sep #$20 SEP #$20 ; set A short +.39113d c2 10 rep #$10 REP #$10 ; set X long +.39113f 18 clc CLC +.391140 20 f0 11 jsr $3911f0 JSR Poll_Inbuf ; +.391143 a9 aa lda #$aa LDA #$AA ;Send self test command +.391145 8f 64 10 af sta $af1064 STA KBD_CMD_BUF +.391149 20 fb 11 jsr $3911fb JSR Poll_Outbuf ; +.39114c af 60 10 af lda $af1060 LDA KBD_OUT_BUF ;Check self test result +.391150 c9 55 cmp #$55 CMP #$55 +.391152 f0 03 beq $391157 BEQ passAAtest +.391154 82 89 00 brl $3911e0 BRL initkb_loop_out +.391157 passAAtest +.391157 a9 ab lda #$ab LDA #$AB ;Send test Interface command +.391159 8f 64 10 af sta $af1064 STA KBD_CMD_BUF +.39115d 20 fb 11 jsr $3911fb JSR Poll_Outbuf ; +.391160 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ;Display Interface test results +.391164 c9 00 cmp #$00 CMP #$00 ;Should be 00 +.391166 f0 03 beq $39116b BEQ passABtest +.391168 82 75 00 brl $3911e0 BRL initkb_loop_out +.39116b passABtest +.39116b a9 60 lda #$60 LDA #$60 ; Send Command 0x60 so to Enable Interrupt +.39116d 8f 64 10 af sta $af1064 STA KBD_CMD_BUF +.391171 20 f0 11 jsr $3911f0 JSR Poll_Inbuf ; +.391174 a9 69 lda #$69 LDA #%01101001 ; Enable Interrupt +.391176 8f 60 10 af sta $af1060 STA KBD_DATA_BUF +.39117a 20 f0 11 jsr $3911f0 JSR Poll_Inbuf ; +.39117d a9 ff lda #$ff LDA #$FF ; Send Keyboard Reset command +.39117f 8f 60 10 af sta $af1060 STA KBD_DATA_BUF +.391183 a2 ff ff ldx #$ffff LDX #$FFFF +.391186 ca dex DLY_LOOP1 DEX +.391187 ea nop NOP +.391188 ea nop NOP +.391189 ea nop NOP +.39118a ea nop NOP +.39118b ea nop NOP +.39118c ea nop NOP +.39118d ea nop NOP +.39118e ea nop NOP +.39118f e0 00 00 cpx #$0000 CPX #$0000 +.391192 d0 f2 bne $391186 BNE DLY_LOOP1 +.391194 20 fb 11 jsr $3911fb JSR Poll_Outbuf ; +.391197 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ; Read Output Buffer +.39119b DO_CMD_F4_AGAIN +.39119b 20 f0 11 jsr $3911f0 JSR Poll_Inbuf ; +.39119e a9 f4 lda #$f4 LDA #$F4 ; Enable the Keyboard +.3911a0 8f 60 10 af sta $af1060 STA KBD_DATA_BUF +.3911a4 20 fb 11 jsr $3911fb JSR Poll_Outbuf ; +.3911a7 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ; Clear the Output buffer +.3911ab c9 fa cmp #$fa CMP #$FA +.3911ad d0 ec bne $39119b BNE DO_CMD_F4_AGAIN +.3911af 20 06 12 jsr $391206 JSR INIT_MOUSE +.3911b2 af 40 01 00 lda $000140 LDA @lINT_PENDING_REG0 ; Read the Pending Register & +.3911b6 29 80 and #$80 AND #FNX0_INT07_MOUSE +.3911b8 8f 40 01 00 sta $000140 STA @lINT_PENDING_REG0 ; Writing it back will clear the Active Bit +.3911bc af 41 01 00 lda $000141 LDA @lINT_PENDING_REG1 ; Read the Pending Register & +.3911c0 29 01 and #$01 AND #FNX1_INT00_KBD +.3911c2 8f 41 01 00 sta $000141 STA @lINT_PENDING_REG1 ; Writing it back will clear the Active Bit +.3911c6 af 4d 01 00 lda $00014d LDA @lINT_MASK_REG1 +.3911ca 29 fe and #$fe AND #~FNX1_INT00_KBD +.3911cc 8f 4d 01 00 sta $00014d STA @lINT_MASK_REG1 +.3911d0 af 4c 01 00 lda $00014c LDA @lINT_MASK_REG0 +.3911d4 29 7f and #$7f AND #~FNX0_INT07_MOUSE +.3911d6 8f 4c 01 00 sta $00014c STA @lINT_MASK_REG0 +.3911da a2 86 71 ldx #$7186 LDX #<>Success_kb_init +.3911dd 38 sec SEC +.3911de b0 03 bcs $3911e3 BCS InitSuccess +.3911e0 a2 98 71 ldx #$7198 initkb_loop_out LDX #<>Failed_kb_init +.3911e3 22 87 07 39 jsl $390787 InitSuccess JSL IPRINT ; print Message +.3911e7 c2 20 rep #$20 REP #$20 ; set A long +.3911e9 c2 10 rep #$10 REP #$10 ; set X long +.3911eb fa plx PLX +.3911ec 68 pla PLA +.3911ed 28 plp PLP +.3911ee 2b pld PLD +.3911ef 6b rtl RTL +.3911f0 Poll_Inbuf +.3911f0 af 64 10 af lda $af1064 LDA STATUS_PORT ; Load Status Byte +.3911f4 29 02 and #$02 AND #bmp_parser_msg0 +.39157f 80 03 bra $391584 BRA BMP_PARSER_END_NO_ERROR +.391581 BMP_PARSER_END_WITH_ERROR +.391581 a2 c0 71 ldx #$71c0 LDX #<>bmp_parser_err0 +.391584 BMP_PARSER_END_NO_ERROR +.391584 22 87 07 39 jsl $390787 JSL IPRINT ; print the first line +.391588 6b rtl RTL +.391589 BMP_PARSER_UPDATE_LUT0 +.391589 38 sec SEC +.39158a a0 7a 00 ldy #$007a LDY #$007A +.39158d a2 00 00 ldx #$0000 LDX #$0000 +.391590 e2 20 sep #$20 SEP #$20 ; set A short +.391592 BMP_PARSER_UPDATE_LOOP +.391592 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; First Pixel is Red +.391594 9f 00 20 af sta $af2000,x STA @lGRPH_LUT0_PTR+0, X ; The look-up Table point to a pixel Blue +.391598 c8 iny INY +.391599 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Second Pixel is Green +.39159b 9f 01 20 af sta $af2001,x STA @lGRPH_LUT0_PTR+1, X ; The look-up Table point to a pixel Blue +.39159f c8 iny INY +.3915a0 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Third Pixel is Blue +.3915a2 9f 02 20 af sta $af2002,x STA @lGRPH_LUT0_PTR+2, X ; The look-up Table point to a pixel Blue +.3915a6 c8 iny INY +.3915a7 a9 80 lda #$80 LDA #$80 +.3915a9 9f 03 20 af sta $af2003,x STA @lGRPH_LUT0_PTR+3, X ; The look-up Table point to a pixel Blue +.3915ad c8 iny INY ; For the Alpha Value, nobody cares .3915ae e8 inx INX -.3915af e4 42 cpx $42 CPX BMP_Y_SIZE -.3915b1 d0 e7 bne $39159a BNE BMP_PARSER_LOOPY -.3915b3 60 rts RTS -.3915b4 BMP_PARSER_COMPUTE_Y_SRC -.3915b4 c2 20 rep #$20 REP #$20 ; set A long -.3915b6 a5 44 lda $44 LDA BMP_PRSE_SRC_PTR ; Right now it is set @ $020000 (128K) + File Size -.3915b8 8f 20 01 00 sta $000120 STA @lADDER32_A_LL -.3915bc a5 46 lda $46 LDA BMP_PRSE_SRC_PTR+2 ; Right now it is set @ $020000 (128K) -.3915be 8f 22 01 00 sta $000122 STA @lADDER32_A_HL -.3915c2 af 28 01 00 lda $000128 LDA @lADDER32_R_LL -.3915c6 85 44 sta $44 STA BMP_PRSE_SRC_PTR -.3915c8 af 2a 01 00 lda $00012a LDA @lADDER32_R_HL -.3915cc 85 46 sta $46 STA BMP_PRSE_SRC_PTR+2 -.3915ce 60 rts RTS -.3915cf BMP_PARSER_COMPUTE_Y_DST -.3915cf c2 20 rep #$20 REP #$20 ; set A long -.3915d1 18 clc CLC -.3915d2 a5 48 lda $48 LDA BMP_PRSE_DST_PTR -.3915d4 65 4e adc $4e ADC SCRN_X_STRIDE ; In Normal Circumstances, it is 640 -.3915d6 85 48 sta $48 STA BMP_PRSE_DST_PTR -.3915d8 a5 4a lda $4a LDA BMP_PRSE_DST_PTR+2 -.3915da 69 00 00 adc #$0000 ADC #$0000 -.3915dd 85 4a sta $4a STA BMP_PRSE_DST_PTR+2 -.3915df 60 rts RTS -.3915e0 ea nop ILOOP NOP -.3915e1 ea nop NOP -.3915e2 ea nop NOP -.3915e3 ea nop NOP -.3915e4 ea nop NOP -.3915e5 ea nop NOP -.3915e6 ea nop NOP -.3915e7 ea nop NOP -.3915e8 ea nop NOP -.3915e9 ea nop NOP -.3915ea 6b rtl RTL -.3915eb 22 e0 15 39 jsl $3915e0 ILOOP_1 JSL ILOOP -.3915ef 22 e0 15 39 jsl $3915e0 JSL ILOOP -.3915f3 22 e0 15 39 jsl $3915e0 JSL ILOOP -.3915f7 22 e0 15 39 jsl $3915e0 JSL ILOOP -.3915fb 22 e0 15 39 jsl $3915e0 JSL ILOOP -.3915ff 22 e0 15 39 jsl $3915e0 JSL ILOOP -.391603 22 e0 15 39 jsl $3915e0 JSL ILOOP -.391607 22 e0 15 39 jsl $3915e0 JSL ILOOP -.39160b 22 e0 15 39 jsl $3915e0 JSL ILOOP -.39160f 22 e0 15 39 jsl $3915e0 JSL ILOOP -.391613 6b rtl RTL -.391614 22 eb 15 39 jsl $3915eb ILOOP_1MS JSL ILOOP_1 -.391618 6b rtl RTL -.391619 e0 00 00 cpx #$0000 ILOOP_MS CPX #0 -.39161c f0 07 beq $391625 BEQ LOOP_MS_END -.39161e 22 14 16 39 jsl $391614 JSL ILOOP_1MS -.391622 ca dex DEX -.391623 80 f4 bra $391619 BRA ILOOP_MS -.391625 6b rtl LOOP_MS_END RTL -.391626 IDELAY -.391626 8b phb PHB -.391627 08 php PHP -.391628 48 pha PHA ; begin setdbr macro -.391629 08 php PHP -.39162a e2 20 sep #$20 SEP #$20 ; set A short -.39162c a9 00 lda #$00 LDA #0 -.39162e 48 pha PHA -.39162f ab plb PLB -.391630 28 plp PLP -.391631 68 pla PLA ; end setdbr macro -.391632 e2 20 sep #$20 SEP #$20 ; set A short -.391634 a9 00 lda #$00 LDA #0 ; Stop the timer if it's running -.391636 8f 60 01 00 sta $000160 STA @l TIMER0_CTRL_REG -.39163a af 4c 01 00 lda $00014c LDA @l INT_MASK_REG0 ; Enable Timer 0 Interrupts -.39163e 29 fb and #$fb AND #~FNX0_INT02_TMR0 -.391640 8f 4c 01 00 sta $00014c STA @l INT_MASK_REG0 -.391644 a9 7f lda #$7f LDA #~TIMER0TRIGGER ; Clear the timer 0 trigger flag -.391646 8d 05 07 sta $0705 STA @w TIMERFLAGS -.391649 a9 00 lda #$00 LDA #0 -.39164b 8f 61 01 00 sta $000161 STA @l TIMER0_CHARGE_L ; Clear the comparator for count-down -.39164f 8f 62 01 00 sta $000162 STA @l TIMER0_CHARGE_M -.391653 8f 63 01 00 sta $000163 STA @l TIMER0_CHARGE_H -.391657 c2 30 rep #$30 REP #$30 ; set A&X long -.391659 8a txa TXA -.39165a 8f 65 01 00 sta $000165 STA @l TIMER0_CMP_L ; Set the number of ticks -.39165e 98 tya TYA -.39165f e2 20 sep #$20 SEP #$20 ; set A short -.391661 8f 67 01 00 sta $000167 STA @l TIMER0_CMP_H -.391665 a9 09 lda #$09 LDA #TMR0_EN | TMR0_UPDWN ; Enable the timer to count up -.391667 8f 60 01 00 sta $000160 STA @l TIMER0_CTRL_REG -.39166b a9 80 lda #$80 LDA #TIMER0TRIGGER ; Timer zero's trigger flag -.39166d cb wai loop WAI ; Wait for an interrupt -.39166e 1c 05 07 trb $0705 TRB @w TIMERFLAGS ; Check for the flag -.391671 f0 fa beq $39166d BEQ loop ; Keep checking until it's set -.391673 a9 00 lda #$00 LDA #0 ; Stop the timer -.391675 8f 60 01 00 sta $000160 STA @l TIMER0_CTRL_REG -.391679 a9 7f lda #$7f LDA #~TIMER0TRIGGER ; Clear the timer 0 trigger flag -.39167b 8d 05 07 sta $0705 STA @w TIMERFLAGS -.39167e af 4c 01 00 lda $00014c LDA @l INT_MASK_REG0 ; Disable Timer 0 Interrupts -.391682 09 04 ora #$04 ORA #FNX0_INT02_TMR0 -.391684 8f 4c 01 00 sta $00014c STA @l INT_MASK_REG0 -.391688 28 plp PLP -.391689 ab plb PLB -.39168a 6b rtl RTL -.39168b SHOW_CREDITS -.39168b 48 pha PHA -.39168c da phx PHX -.39168d 5a phy PHY -.39168e 08 php PHP -.39168f e2 20 sep #$20 SEP #$20 ; set A short -.391691 c2 10 rep #$10 REP #$10 ; set X long -.391693 af 10 00 af lda $af0010 LDA @lVKY_TXT_CURSOR_CTRL_REG ; Disable the cursor -.391697 29 fe and #$fe AND #~Vky_Cursor_Enable -.391699 8f 10 00 af sta $af0010 STA @lVKY_TXT_CURSOR_CTRL_REG -.39169d a2 00 00 ldx #$0000 LDX #0 -.3916a0 bf 00 00 3b lda $3b0000,x credit_loop LDA @lCREDITS_TEXT,X ; Copy a byte of text -.3916a4 9f 00 a0 af sta $afa000,x STA @lCS_TEXT_MEM_PTR,X -.3916a8 bf 00 20 3b lda $3b2000,x LDA @lCREDITS_COLOR,X ; Copy a byte of color -.3916ac 9f 00 c0 af sta $afc000,x STA @lCS_COLOR_MEM_PTR,X -.3916b0 e8 inx INX -.3916b1 e0 00 20 cpx #$2000 CPX #128 * 64 -.3916b4 d0 ea bne $3916a0 BNE credit_loop -.3916b6 22 21 07 39 jsl $390721 JSL IGETCHW ; Wait for a keypress -.3916ba 22 42 0b 39 jsl $390b42 JSL ICLRSCREEN ; Then clear the screen and return -.3916be 22 66 09 39 jsl $390966 JSL ICSRHOME ; Move cursor to the home position -.3916c2 af 10 00 af lda $af0010 LDA @lVKY_TXT_CURSOR_CTRL_REG ; Enable the cursor -.3916c6 09 01 ora #$01 ORA #Vky_Cursor_Enable -.3916c8 8f 10 00 af sta $af0010 STA @lVKY_TXT_CURSOR_CTRL_REG -.3916cc 28 plp PLP -.3916cd 7a ply PLY -.3916ce fa plx PLX -.3916cf 68 pla PLA -.3916d0 6b rtl RTL -.3916d1 00 brk # ISCINIT BRK ; -.3916d2 00 brk # IIOINIT BRK ; -.3916d3 00 brk # ISETLFS BRK ; Obsolete (done in OPEN) -.3916d4 00 brk # ISETNAM BRK ; Obsolete (done in OPEN) -.3916d5 00 brk # IOPEN BRK ; Open a channel for reading and/or writing. Use SETLFS and SETNAM to set the channels and filename first. -.3916d6 00 brk # ICLOSE BRK ; Close a channel -.3916d7 00 brk # IGETB BRK ; Get a byte from input channel. Return 0 if no input. Carry is set if no input. -.3916d8 00 brk # IGETS BRK ; Get a string from the input channel. NULL terminates -.3916d9 00 brk # IGETLINE BRK ; Get a line of text from input channel. CR or NULL terminates. -.3916da 00 brk # IGETFIELD BRK ; Get a field from the input channel. Value in A, CR, or NULL terminates -.3916db 00 brk # ITRIM BRK ; Removes spaces at beginning and end of string. -.3916dc 00 brk # IPRINTC BRK ; Print character to screen. Handles terminal commands -.3916dd 00 brk # IPRINTS BRK ; Print string to screen. Handles terminal commands -.3916de 00 brk # IPRINTF BRK ; Print a float value -.3916df 00 brk # IPRINTI BRK ; Prints integer value in TEMP -.3916e0 00 brk # IPRINTAI BRK ; Prints integer value in A -.3916e1 00 brk # IPUSHKEY BRK ; -.3916e2 00 brk # IPUSHKEYS BRK ; -.3916e3 00 brk # ISCRREADLINE BRK ; Loads the MCMDADDR/BCMDADDR variable with the address of the current line on the screen. This is called when the RETURN key is pressed and is the first step in processing an immediate mode command. -.3916e4 00 brk # ISCRGETWORD BRK ; Read a current word on the screen. A word ends with a space, punctuation (except _), or any control character (value < 32). Loads the address into CMPTEXT_VAL and length into CMPTEXT_LEN variables. -.3916e5 6b rtl IRQHANDLESTUB RTL +.3915af e8 inx INX +.3915b0 e8 inx INX +.3915b1 e8 inx INX +.3915b2 e4 4c cpx $4c CPX BMP_COLOR_PALET ; Apparently sometime there is less than 256 Values in the lookup +.3915b4 d0 dc bne $391592 BNE BMP_PARSER_UPDATE_LOOP +.3915b6 c2 20 rep #$20 REP #$20 ; set A long +.3915b8 60 rts RTS +.3915b9 BMP_PARSER_UPDATE_LUT1 +.3915b9 38 sec SEC +.3915ba a0 36 00 ldy #$0036 LDY #$0036 +.3915bd a2 00 00 ldx #$0000 LDX #$0000 +.3915c0 e2 20 sep #$20 SEP #$20 ; set A short +.3915c2 PALETTE_LUT1_LOOP +.3915c2 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; First Pixel is Red +.3915c4 9f 00 24 af sta $af2400,x STA @lGRPH_LUT1_PTR+0, X ; The look-up Table point to a pixel Blue +.3915c8 c8 iny INY +.3915c9 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Second Pixel is Green +.3915cb 9f 01 24 af sta $af2401,x STA @lGRPH_LUT1_PTR+1, X ; The look-up Table point to a pixel Blue +.3915cf c8 iny INY +.3915d0 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Third Pixel is Blue +.3915d2 9f 02 24 af sta $af2402,x STA @lGRPH_LUT1_PTR+2, X ; The look-up Table point to a pixel Blue +.3915d6 c8 iny INY +.3915d7 a9 80 lda #$80 LDA #$80 +.3915d9 9f 03 24 af sta $af2403,x STA @lGRPH_LUT1_PTR+3, X ; The look-up Table point to a pixel Blue +.3915dd c8 iny INY ; For the Alpha Value, nobody cares +.3915de e8 inx INX +.3915df e8 inx INX +.3915e0 e8 inx INX +.3915e1 e8 inx INX +.3915e2 e4 4c cpx $4c CPX BMP_COLOR_PALET ; Apparently sometime there is less than 256 Values in the lookup +.3915e4 d0 dc bne $3915c2 BNE PALETTE_LUT1_LOOP +.3915e6 c2 20 rep #$20 REP #$20 ; set A long +.3915e8 60 rts RTS +.3915e9 BMP_PARSER_DMA_SHIT_OUT +.3915e9 a2 00 00 ldx #$0000 LDX #$0000 +.3915ec BMP_PARSER_LOOPY +.3915ec a0 00 00 ldy #$0000 LDY #$0000 +.3915ef e2 20 sep #$20 SEP #$20 ; set A short +.3915f1 BMP_PARSER_LOOPX +.3915f1 b7 44 lda [$44],y LDA [BMP_PRSE_SRC_PTR],Y ; Load First Pixel Y (will be linear) +.3915f3 97 48 sta [$48],y STA [BMP_PRSE_DST_PTR],Y ; This is where the Pixel Go, Video Memory +.3915f5 c8 iny INY +.3915f6 c4 40 cpy $40 CPY BMP_X_SIZE ; Transfer the First line +.3915f8 d0 f7 bne $3915f1 BNE BMP_PARSER_LOOPX +.3915fa 20 06 16 jsr $391606 JSR BMP_PARSER_COMPUTE_Y_SRC +.3915fd 20 21 16 jsr $391621 JSR BMP_PARSER_COMPUTE_Y_DST +.391600 e8 inx INX +.391601 e4 42 cpx $42 CPX BMP_Y_SIZE +.391603 d0 e7 bne $3915ec BNE BMP_PARSER_LOOPY +.391605 60 rts RTS +.391606 BMP_PARSER_COMPUTE_Y_SRC +.391606 c2 20 rep #$20 REP #$20 ; set A long +.391608 a5 44 lda $44 LDA BMP_PRSE_SRC_PTR ; Right now it is set @ $020000 (128K) + File Size +.39160a 8f 20 01 00 sta $000120 STA @lADDER32_A_LL +.39160e a5 46 lda $46 LDA BMP_PRSE_SRC_PTR+2 ; Right now it is set @ $020000 (128K) +.391610 8f 22 01 00 sta $000122 STA @lADDER32_A_HL +.391614 af 28 01 00 lda $000128 LDA @lADDER32_R_LL +.391618 85 44 sta $44 STA BMP_PRSE_SRC_PTR +.39161a af 2a 01 00 lda $00012a LDA @lADDER32_R_HL +.39161e 85 46 sta $46 STA BMP_PRSE_SRC_PTR+2 +.391620 60 rts RTS +.391621 BMP_PARSER_COMPUTE_Y_DST +.391621 c2 20 rep #$20 REP #$20 ; set A long +.391623 18 clc CLC +.391624 a5 48 lda $48 LDA BMP_PRSE_DST_PTR +.391626 65 4e adc $4e ADC SCRN_X_STRIDE ; In Normal Circumstances, it is 640 +.391628 85 48 sta $48 STA BMP_PRSE_DST_PTR +.39162a a5 4a lda $4a LDA BMP_PRSE_DST_PTR+2 +.39162c 69 00 00 adc #$0000 ADC #$0000 +.39162f 85 4a sta $4a STA BMP_PRSE_DST_PTR+2 +.391631 60 rts RTS +.391632 ea nop ILOOP NOP +.391633 ea nop NOP +.391634 ea nop NOP +.391635 ea nop NOP +.391636 ea nop NOP +.391637 ea nop NOP +.391638 ea nop NOP +.391639 ea nop NOP +.39163a ea nop NOP +.39163b ea nop NOP +.39163c 6b rtl RTL +.39163d 22 32 16 39 jsl $391632 ILOOP_1 JSL ILOOP +.391641 22 32 16 39 jsl $391632 JSL ILOOP +.391645 22 32 16 39 jsl $391632 JSL ILOOP +.391649 22 32 16 39 jsl $391632 JSL ILOOP +.39164d 22 32 16 39 jsl $391632 JSL ILOOP +.391651 22 32 16 39 jsl $391632 JSL ILOOP +.391655 22 32 16 39 jsl $391632 JSL ILOOP +.391659 22 32 16 39 jsl $391632 JSL ILOOP +.39165d 22 32 16 39 jsl $391632 JSL ILOOP +.391661 22 32 16 39 jsl $391632 JSL ILOOP +.391665 6b rtl RTL +.391666 22 3d 16 39 jsl $39163d ILOOP_1MS JSL ILOOP_1 +.39166a 6b rtl RTL +.39166b e0 00 00 cpx #$0000 ILOOP_MS CPX #0 +.39166e f0 07 beq $391677 BEQ LOOP_MS_END +.391670 22 66 16 39 jsl $391666 JSL ILOOP_1MS +.391674 ca dex DEX +.391675 80 f4 bra $39166b BRA ILOOP_MS +.391677 6b rtl LOOP_MS_END RTL +.391678 IDELAY +.391678 8b phb PHB +.391679 08 php PHP +.39167a 48 pha PHA ; begin setdbr macro +.39167b 08 php PHP +.39167c e2 20 sep #$20 SEP #$20 ; set A short +.39167e a9 00 lda #$00 LDA #0 +.391680 48 pha PHA +.391681 ab plb PLB +.391682 28 plp PLP +.391683 68 pla PLA ; end setdbr macro +.391684 e2 20 sep #$20 SEP #$20 ; set A short +.391686 a9 00 lda #$00 LDA #0 ; Stop the timer if it's running +.391688 8f 60 01 00 sta $000160 STA @l TIMER0_CTRL_REG +.39168c af 4c 01 00 lda $00014c LDA @l INT_MASK_REG0 ; Enable Timer 0 Interrupts +.391690 29 fb and #$fb AND #~FNX0_INT02_TMR0 +.391692 8f 4c 01 00 sta $00014c STA @l INT_MASK_REG0 +.391696 a9 7f lda #$7f LDA #~TIMER0TRIGGER ; Clear the timer 0 trigger flag +.391698 8d 05 07 sta $0705 STA @w TIMERFLAGS +.39169b a9 00 lda #$00 LDA #0 +.39169d 8f 61 01 00 sta $000161 STA @l TIMER0_CHARGE_L ; Clear the comparator for count-down +.3916a1 8f 62 01 00 sta $000162 STA @l TIMER0_CHARGE_M +.3916a5 8f 63 01 00 sta $000163 STA @l TIMER0_CHARGE_H +.3916a9 c2 30 rep #$30 REP #$30 ; set A&X long +.3916ab 8a txa TXA +.3916ac 8f 65 01 00 sta $000165 STA @l TIMER0_CMP_L ; Set the number of ticks +.3916b0 98 tya TYA +.3916b1 e2 20 sep #$20 SEP #$20 ; set A short +.3916b3 8f 67 01 00 sta $000167 STA @l TIMER0_CMP_H +.3916b7 a9 09 lda #$09 LDA #TMR0_EN | TMR0_UPDWN ; Enable the timer to count up +.3916b9 8f 60 01 00 sta $000160 STA @l TIMER0_CTRL_REG +.3916bd a9 80 lda #$80 LDA #TIMER0TRIGGER ; Timer zero's trigger flag +.3916bf cb wai loop WAI ; Wait for an interrupt +.3916c0 1c 05 07 trb $0705 TRB @w TIMERFLAGS ; Check for the flag +.3916c3 f0 fa beq $3916bf BEQ loop ; Keep checking until it's set +.3916c5 a9 00 lda #$00 LDA #0 ; Stop the timer +.3916c7 8f 60 01 00 sta $000160 STA @l TIMER0_CTRL_REG +.3916cb a9 7f lda #$7f LDA #~TIMER0TRIGGER ; Clear the timer 0 trigger flag +.3916cd 8d 05 07 sta $0705 STA @w TIMERFLAGS +.3916d0 af 4c 01 00 lda $00014c LDA @l INT_MASK_REG0 ; Disable Timer 0 Interrupts +.3916d4 09 04 ora #$04 ORA #FNX0_INT02_TMR0 +.3916d6 8f 4c 01 00 sta $00014c STA @l INT_MASK_REG0 +.3916da 28 plp PLP +.3916db ab plb PLB +.3916dc 6b rtl RTL +.3916dd SHOW_CREDITS +.3916dd 48 pha PHA +.3916de da phx PHX +.3916df 5a phy PHY +.3916e0 08 php PHP +.3916e1 e2 20 sep #$20 SEP #$20 ; set A short +.3916e3 c2 10 rep #$10 REP #$10 ; set X long +.3916e5 af 10 00 af lda $af0010 LDA @lVKY_TXT_CURSOR_CTRL_REG ; Disable the cursor +.3916e9 29 fe and #$fe AND #~Vky_Cursor_Enable +.3916eb 8f 10 00 af sta $af0010 STA @lVKY_TXT_CURSOR_CTRL_REG +.3916ef a2 00 00 ldx #$0000 LDX #0 +.3916f2 bf 00 00 3b lda $3b0000,x credit_loop LDA @lCREDITS_TEXT,X ; Copy a byte of text +.3916f6 9f 00 a0 af sta $afa000,x STA @lCS_TEXT_MEM_PTR,X +.3916fa bf 00 20 3b lda $3b2000,x LDA @lCREDITS_COLOR,X ; Copy a byte of color +.3916fe 9f 00 c0 af sta $afc000,x STA @lCS_COLOR_MEM_PTR,X +.391702 e8 inx INX +.391703 e0 00 20 cpx #$2000 CPX #128 * 64 +.391706 d0 ea bne $3916f2 BNE credit_loop +.391708 22 21 07 39 jsl $390721 JSL IGETCHW ; Wait for a keypress +.39170c 22 81 0b 39 jsl $390b81 JSL ICLRSCREEN ; Then clear the screen and return +.391710 22 a5 09 39 jsl $3909a5 JSL ICSRHOME ; Move cursor to the home position +.391714 af 10 00 af lda $af0010 LDA @lVKY_TXT_CURSOR_CTRL_REG ; Enable the cursor +.391718 09 01 ora #$01 ORA #Vky_Cursor_Enable +.39171a 8f 10 00 af sta $af0010 STA @lVKY_TXT_CURSOR_CTRL_REG +.39171e 28 plp PLP +.39171f 7a ply PLY +.391720 fa plx PLX +.391721 68 pla PLA +.391722 6b rtl RTL +.391723 00 brk # ISCINIT BRK ; +.391724 00 brk # IIOINIT BRK ; +.391725 00 brk # ISETLFS BRK ; Obsolete (done in OPEN) +.391726 00 brk # ISETNAM BRK ; Obsolete (done in OPEN) +.391727 00 brk # IOPEN BRK ; Open a channel for reading and/or writing. Use SETLFS and SETNAM to set the channels and filename first. +.391728 00 brk # ICLOSE BRK ; Close a channel +.391729 00 brk # IGETB BRK ; Get a byte from input channel. Return 0 if no input. Carry is set if no input. +.39172a 00 brk # IGETS BRK ; Get a string from the input channel. NULL terminates +.39172b 00 brk # IGETLINE BRK ; Get a line of text from input channel. CR or NULL terminates. +.39172c 00 brk # IGETFIELD BRK ; Get a field from the input channel. Value in A, CR, or NULL terminates +.39172d 00 brk # ITRIM BRK ; Removes spaces at beginning and end of string. +.39172e 00 brk # IPRINTC BRK ; Print character to screen. Handles terminal commands +.39172f 00 brk # IPRINTS BRK ; Print string to screen. Handles terminal commands +.391730 00 brk # IPRINTF BRK ; Print a float value +.391731 00 brk # IPRINTI BRK ; Prints integer value in TEMP +.391732 00 brk # IPRINTAI BRK ; Prints integer value in A +.391733 00 brk # IPUSHKEY BRK ; +.391734 00 brk # IPUSHKEYS BRK ; +.391735 00 brk # ISCRREADLINE BRK ; Loads the MCMDADDR/BCMDADDR variable with the address of the current line on the screen. This is called when the RETURN key is pressed and is the first step in processing an immediate mode command. +.391736 00 brk # ISCRGETWORD BRK ; Read a current word on the screen. A word ends with a space, punctuation (except _), or any control character (value < 32). Loads the address into CMPTEXT_VAL and length into CMPTEXT_LEN variables. +.391737 6b rtl IRQHANDLESTUB RTL ;****** Processing file: src\OPL2_Library.asm @@ -4528,1221 +4629,1170 @@ =10 NOTE_AS = 10 =11 NOTE_B = 11 =12 NOTE_C = 12 ->3916e6 6b 01 81 01 98 01 b0 01 noteFNumbers .word $016B, $0181, $0198, $01B0, $01CA, $01E5, $0202, $0220, $0241, $0263, $0287, $02AE ->3916ee ca 01 e5 01 02 02 20 02 41 02 63 02 87 02 ae 02 ->3916fe 00 01 02 08 09 0a 10 11 registerOffsets_operator0 .byte $00, $01, $02, $08, $09, $0A, $10, $11, $12 ;initializers for operator 1 */ ->391706 12 ->391707 03 04 05 0b 0c 0d 13 14 registerOffsets_operator1 .byte $03, $04, $05, $0B, $0C, $0D, $13, $14, $15 ;initializers for operator 2 */ ->39170f 15 ->391710 10 13 14 12 15 11 drumOffsets .byte $10, $13, $14, $12, $15, $11 ->391716 10 08 04 02 01 drumBits .byte $10, $08, $04, $02, $01 ->39171b 20 40 60 80 e0 c0 instrumentBaseRegs .byte $20, $40, $60, $80, $E0, $C0 +>391738 6b 01 81 01 98 01 b0 01 noteFNumbers .word $016B, $0181, $0198, $01B0, $01CA, $01E5, $0202, $0220, $0241, $0263, $0287, $02AE +>391740 ca 01 e5 01 02 02 20 02 41 02 63 02 87 02 ae 02 +>391750 00 01 02 08 09 0a 10 11 registerOffsets_operator0 .byte $00, $01, $02, $08, $09, $0A, $10, $11, $12 ;initializers for operator 1 */ +>391758 12 +>391759 03 04 05 0b 0c 0d 13 14 registerOffsets_operator1 .byte $03, $04, $05, $0B, $0C, $0D, $13, $14, $15 ;initializers for operator 2 */ +>391761 15 +>391762 10 13 14 12 15 11 drumOffsets .byte $10, $13, $14, $12, $15, $11 +>391768 10 08 04 02 01 drumBits .byte $10, $08, $04, $02, $01 +>39176d 20 40 60 80 e0 c0 instrumentBaseRegs .byte $20, $40, $60, $80, $E0, $C0 ;****** Return to file: src\OPL2_Library.asm ;****** Processing file: src\OPL2_Instruments.asm ->391721 00 24 4f f2 0b 00 0e 31 INSTRUMENT_ACCORDN .text $00, $24, $4F, $F2, $0B, $00, $0E, $31, $00, $52, $0B, $00, 'ACCORDN ' ->391729 00 52 0b 00 41 43 43 4f 52 44 4e 20 20 20 ->391737 00 31 43 6e 17 01 02 22 INSTRUMENT_BAGPIPE1 .text $00, $31, $43, $6E, $17, $01, $02, $22, $05, $8B, $0C, $02, 'BAGPIPE1 ' ->39173f 05 8b 0c 02 42 41 47 50 49 50 45 31 20 20 ->39174d 00 30 00 ff a0 03 00 a3 INSTRUMENT_BAGPIPE2 .text $00, $30, $00, $FF, $A0, $03, $00, $A3, $00, $65, $0B, $02, 'BAGPIPE2 ' ->391755 00 65 0b 02 42 41 47 50 49 50 45 32 20 20 ->391763 00 31 87 a1 11 00 08 16 INSTRUMENT_BANJO1 .text $00, $31, $87, $A1, $11, $00, $08, $16, $80, $7D, $43, $00, 'BANJO1 ' ->39176b 80 7d 43 00 42 41 4e 4a 4f 31 20 20 20 20 ->391779 00 01 15 25 2f 00 0a 21 INSTRUMENT_BASS1 .text $00, $01, $15, $25, $2F, $00, $0A, $21, $80, $65, $6C, $00, 'BASS1 ' ->391781 80 65 6c 00 42 41 53 53 31 20 20 20 20 20 ->39178f 00 01 1d f2 ef 00 0a 01 INSTRUMENT_BASS2 .text $00, $01, $1D, $F2, $EF, $00, $0A, $01, $00, $F5, $78, $00, 'BASS2 ' ->391797 00 f5 78 00 42 41 53 53 32 20 20 20 20 20 ->3917a5 00 c0 6d f9 01 01 0e 41 INSTRUMENT_BASSHARP .text $00, $C0, $6D, $F9, $01, $01, $0E, $41, $00, $F2, $73, $00, 'BASSHARP ' ->3917ad 00 f2 73 00 42 41 53 53 48 41 52 50 20 20 ->3917bb 00 30 c8 d5 19 00 0c 71 INSTRUMENT_BASSOON1 .text $00, $30, $C8, $D5, $19, $00, $0C, $71, $80, $61, $1B, $00, 'BASSOON1 ' ->3917c3 80 61 1b 00 42 41 53 53 4f 4f 4e 31 20 20 ->3917d1 00 c1 4f b1 53 03 06 e0 INSTRUMENT_BASSTRLG .text $00, $C1, $4F, $B1, $53, $03, $06, $E0, $00, $12, $74, $03, 'BASSTRLG ' ->3917d9 00 12 74 03 42 41 53 53 54 52 4c 47 20 20 ->3917e7 06 00 0b a8 4c 00 00 00 INSTRUMENT_BDRUM1 .text $06, $00, $0B, $A8, $4C, $00, $00, $00, $00, $00, $00, $00, 'BDRUM1 ' ->3917ef 00 00 00 00 42 44 52 55 4d 31 20 20 20 20 ->3917fd 00 64 db ff 01 00 04 3e INSTRUMENT_BELLONG .text $00, $64, $DB, $FF, $01, $00, $04, $3E, $C0, $F3, $62, $00, 'BELLONG ' ->391805 c0 f3 62 00 42 45 4c 4c 4f 4e 47 20 20 20 ->391813 00 07 4f f2 60 00 08 12 INSTRUMENT_BELLS .text $00, $07, $4F, $F2, $60, $00, $08, $12, $00, $F2, $72, $00, 'BELLS ' ->39181b 00 f2 72 00 42 45 4c 4c 53 20 20 20 20 20 ->391829 00 64 db ff 01 00 04 3e INSTRUMENT_BELSHORT .text $00, $64, $DB, $FF, $01, $00, $04, $3E, $C0, $F5, $F3, $00, 'BELSHORT ' ->391831 c0 f5 f3 00 42 45 4c 53 48 4f 52 54 20 20 ->39183f 00 20 4b 7b 04 01 0e 21 INSTRUMENT_BNCEBASS .text $00, $20, $4B, $7B, $04, $01, $0E, $21, $00, $F5, $72, $00, 'BNCEBASS ' ->391847 00 f5 72 00 42 4e 43 45 42 41 53 53 20 20 ->391855 00 21 16 71 ae 00 0e 21 INSTRUMENT_BRASS1 .text $00, $21, $16, $71, $AE, $00, $0E, $21, $00, $81, $9E, $00, 'BRASS1 ' ->39185d 00 81 9e 00 42 52 41 53 53 31 20 20 20 20 ->39186b 00 30 c5 52 11 00 00 31 INSTRUMENT_CBASSOON .text $00, $30, $C5, $52, $11, $00, $00, $31, $80, $31, $2E, $00, 'CBASSOON ' ->391873 80 31 2e 00 43 42 41 53 53 4f 4f 4e 20 20 ->391881 00 33 87 01 10 00 08 14 INSTRUMENT_CELESTA .text $00, $33, $87, $01, $10, $00, $08, $14, $80, $7D, $33, $00, 'CELESTA ' ->391889 80 7d 33 00 43 45 4c 45 53 54 41 20 20 20 ->391897 00 32 16 73 24 00 0e 21 INSTRUMENT_CLAR1 .text $00, $32, $16, $73, $24, $00, $0E, $21, $80, $75, $57, $00, 'CLAR1 ' ->39189f 80 75 57 00 43 4c 41 52 31 20 20 20 20 20 ->3918ad 00 31 1c 41 1b 00 0c 60 INSTRUMENT_CLAR2 .text $00, $31, $1C, $41, $1B, $00, $0C, $60, $80, $42, $3B, $00, 'CLAR2 ' ->3918b5 80 42 3b 00 43 4c 41 52 32 20 20 20 20 20 ->3918c3 00 32 9a 51 1b 00 0c 61 INSTRUMENT_CLARINET .text $00, $32, $9A, $51, $1B, $00, $0C, $61, $82, $A2, $3B, $00, 'CLARINET ' ->3918cb 82 a2 3b 00 43 4c 41 52 49 4e 45 54 20 20 ->3918d9 00 11 0d f2 01 00 0a 15 INSTRUMENT_CLAVECIN .text $00, $11, $0D, $F2, $01, $00, $0A, $15, $0D, $F2, $B1, $00, 'CLAVECIN ' ->3918e1 0d f2 b1 00 43 4c 41 56 45 43 49 4e 20 20 ->3918ef 00 00 02 f0 ff 00 06 11 INSTRUMENT_CROMORNE .text $00, $00, $02, $F0, $FF, $00, $06, $11, $80, $F0, $FF, $00, 'CROMORNE ' ->3918f7 80 f0 ff 00 43 52 4f 4d 4f 52 4e 45 20 20 ->391905 09 01 00 f5 b5 00 00 00 INSTRUMENT_CYMBAL1 .text $09, $01, $00, $F5, $B5, $00, $00, $00, $00, $00, $00, $00, 'CYMBAL1 ' ->39190d 00 00 00 00 43 59 4d 42 41 4c 31 20 20 20 ->39191b 00 05 8a f0 7b 00 08 01 INSTRUMENT_ELCLAV1 .text $00, $05, $8A, $F0, $7B, $00, $08, $01, $80, $F4, $7B, $00, 'ELCLAV1 ' ->391923 80 f4 7b 00 45 4c 43 4c 41 56 31 20 20 20 ->391931 00 01 49 f1 53 01 06 11 INSTRUMENT_ELCLAV2 .text $00, $01, $49, $F1, $53, $01, $06, $11, $00, $F1, $74, $02, 'ELCLAV2 ' ->391939 00 f1 74 02 45 4c 43 4c 41 56 32 20 20 20 ->391947 00 e0 6d 57 04 01 0e 61 INSTRUMENT_ELECFL .text $00, $E0, $6D, $57, $04, $01, $0E, $61, $00, $67, $7D, $00, 'ELECFL ' ->39194f 00 67 7d 00 45 4c 45 43 46 4c 20 20 20 20 ->39195d 00 13 97 9a 12 02 0e 91 INSTRUMENT_ELECVIBE .text $00, $13, $97, $9A, $12, $02, $0E, $91, $80, $9B, $11, $00, 'ELECVIBE ' ->391965 80 9b 11 00 45 4c 45 43 56 49 42 45 20 20 ->391973 00 f1 01 97 17 00 08 21 INSTRUMENT_ELGUIT1 .text $00, $F1, $01, $97, $17, $00, $08, $21, $0D, $F1, $18, $00, 'ELGUIT1 ' ->39197b 0d f1 18 00 45 4c 47 55 49 54 31 20 20 20 ->391989 00 13 96 ff 21 00 0a 11 INSTRUMENT_ELGUIT2 .text $00, $13, $96, $FF, $21, $00, $0A, $11, $80, $FF, $03, $00, 'ELGUIT2 ' ->391991 80 ff 03 00 45 4c 47 55 49 54 32 20 20 20 ->39199f 00 07 8f 82 7d 00 0c 14 INSTRUMENT_ELGUIT3 .text $00, $07, $8F, $82, $7D, $00, $0C, $14, $80, $82, $7D, $00, 'ELGUIT3 ' ->3919a7 80 82 7d 00 45 4c 47 55 49 54 33 20 20 20 ->3919b5 00 05 8f da 15 00 0a 01 INSTRUMENT_ELGUIT4 .text $00, $05, $8F, $DA, $15, $00, $0A, $01, $80, $F9, $14, $02, 'ELGUIT4 ' ->3919bd 80 f9 14 02 45 4c 47 55 49 54 34 20 20 20 ->3919cb 00 b2 cd 91 2a 02 09 b1 INSTRUMENT_ELORGAN1 .text $00, $B2, $CD, $91, $2A, $02, $09, $B1, $80, $91, $2A, $01, 'ELORGAN1 ' ->3919d3 80 91 2a 01 45 4c 4f 52 47 41 4e 31 20 20 ->3919e1 00 01 4f f1 50 00 06 01 INSTRUMENT_ELPIANO1 .text $00, $01, $4F, $F1, $50, $00, $06, $01, $04, $D2, $7C, $00, 'ELPIANO1 ' ->3919e9 04 d2 7c 00 45 4c 50 49 41 4e 4f 31 20 20 ->3919f7 00 02 22 f2 13 00 0e 02 INSTRUMENT_ELPIANO2 .text $00, $02, $22, $F2, $13, $00, $0E, $02, $00, $F5, $43, $00, 'ELPIANO2 ' ->3919ff 00 f5 43 00 45 4c 50 49 41 4e 4f 32 20 20 ->391a0d 00 81 63 f3 58 00 00 01 INSTRUMENT_EPIANO1A .text $00, $81, $63, $F3, $58, $00, $00, $01, $80, $F2, $58, $00, 'EPIANO1A ' ->391a15 80 f2 58 00 45 50 49 41 4e 4f 31 41 20 20 ->391a23 00 07 1f f5 fa 00 0e 01 INSTRUMENT_EPIANO1B .text $00, $07, $1F, $F5, $FA, $00, $0E, $01, $57, $F5, $FA, $00, 'EPIANO1B ' ->391a2b 57 f5 fa 00 45 50 49 41 4e 4f 31 42 20 20 ->391a39 00 21 83 74 17 00 07 a2 INSTRUMENT_FLUTE .text $00, $21, $83, $74, $17, $00, $07, $A2, $8D, $65, $17, $00, 'FLUTE ' ->391a41 8d 65 17 00 46 4c 55 54 45 20 20 20 20 20 ->391a4f 00 a1 27 74 8f 00 02 a1 INSTRUMENT_FLUTE1 .text $00, $A1, $27, $74, $8F, $00, $02, $A1, $80, $65, $2A, $00, 'FLUTE1 ' ->391a57 80 65 2a 00 46 4c 55 54 45 31 20 20 20 20 ->391a65 00 e0 ec 6e 8f 00 0e 61 INSTRUMENT_FLUTE2 .text $00, $E0, $EC, $6E, $8F, $00, $0E, $61, $00, $65, $2A, $00, 'FLUTE2 ' ->391a6d 00 65 2a 00 46 4c 55 54 45 32 20 20 20 20 ->391a7b 00 21 9f 53 5a 00 0c 21 INSTRUMENT_FRHORN1 .text $00, $21, $9F, $53, $5A, $00, $0C, $21, $80, $AA, $1A, $00, 'FRHORN1 ' ->391a83 80 aa 1a 00 46 52 48 4f 52 4e 31 20 20 20 ->391a91 00 20 8e a5 8f 02 06 21 INSTRUMENT_FRHORN2 .text $00, $20, $8E, $A5, $8F, $02, $06, $21, $00, $36, $3D, $00, 'FRHORN2 ' ->391a99 00 36 3d 00 46 52 48 4f 52 4e 32 20 20 20 ->391aa7 00 f0 18 55 ef 02 00 e0 INSTRUMENT_FSTRP1 .text $00, $F0, $18, $55, $EF, $02, $00, $E0, $80, $87, $1E, $03, 'FSTRP1 ' ->391aaf 80 87 1e 03 46 53 54 52 50 31 20 20 20 20 ->391abd 00 70 16 55 2f 02 0c e0 INSTRUMENT_FSTRP2 .text $00, $70, $16, $55, $2F, $02, $0C, $E0, $80, $87, $1E, $03, 'FSTRP2 ' ->391ac5 80 87 1e 03 46 53 54 52 50 32 20 20 20 20 ->391ad3 00 f1 00 97 13 00 0a 25 INSTRUMENT_FUZGUIT1 .text $00, $F1, $00, $97, $13, $00, $0A, $25, $0D, $F1, $18, $01, 'FUZGUIT1 ' ->391adb 0d f1 18 01 46 55 5a 47 55 49 54 31 20 20 ->391ae9 00 31 48 f1 53 00 06 32 INSTRUMENT_FUZGUIT2 .text $00, $31, $48, $F1, $53, $00, $06, $32, $00, $F2, $27, $02, 'FUZGUIT2 ' ->391af1 00 f2 27 02 46 55 5a 47 55 49 54 32 20 20 ->391aff 00 01 11 f2 1f 00 0a 01 INSTRUMENT_GUITAR1 .text $00, $01, $11, $F2, $1F, $00, $0A, $01, $00, $F5, $88, $00, 'GUITAR1 ' ->391b07 00 f5 88 00 47 55 49 54 41 52 31 20 20 20 ->391b15 00 02 29 f5 75 00 00 01 INSTRUMENT_HARP1 .text $00, $02, $29, $F5, $75, $00, $00, $01, $83, $F2, $F3, $00, 'HARP1 ' ->391b1d 83 f2 f3 00 48 41 52 50 31 20 20 20 20 20 ->391b2b 00 02 99 f5 55 00 00 01 INSTRUMENT_HARP2 .text $00, $02, $99, $F5, $55, $00, $00, $01, $80, $F6, $53, $00, 'HARP2 ' ->391b33 80 f6 53 00 48 41 52 50 32 20 20 20 20 20 ->391b41 00 02 57 f5 56 00 00 01 INSTRUMENT_HARP3 .text $00, $02, $57, $F5, $56, $00, $00, $01, $80, $F6, $54, $00, 'HARP3 ' ->391b49 80 f6 54 00 48 41 52 50 33 20 20 20 20 20 ->391b57 00 02 29 f5 75 00 00 01 INSTRUMENT_HARPE1 .text $00, $02, $29, $F5, $75, $00, $00, $01, $03, $F2, $F3, $00, 'HARPE1 ' ->391b5f 03 f2 f3 00 48 41 52 50 45 31 20 20 20 20 ->391b6d 00 32 87 a1 10 00 08 16 INSTRUMENT_HARPSI1 .text $00, $32, $87, $A1, $10, $00, $08, $16, $80, $7D, $33, $00, 'HARPSI1 ' ->391b75 80 7d 33 00 48 41 52 50 53 49 31 20 20 20 ->391b83 00 33 87 a1 10 00 06 15 INSTRUMENT_HARPSI2 .text $00, $33, $87, $A1, $10, $00, $06, $15, $80, $7D, $43, $00, 'HARPSI2 ' ->391b8b 80 7d 43 00 48 41 52 50 53 49 32 20 20 20 ->391b99 00 35 84 a8 10 00 08 18 INSTRUMENT_HARPSI3 .text $00, $35, $84, $A8, $10, $00, $08, $18, $80, $7D, $33, $00, 'HARPSI3 ' ->391ba1 80 7d 33 00 48 41 52 50 53 49 33 20 20 20 ->391baf 00 11 0d f2 01 00 0a 15 INSTRUMENT_HARPSI4 .text $00, $11, $0D, $F2, $01, $00, $0A, $15, $0D, $F2, $B1, $00, 'HARPSI4 ' ->391bb7 0d f2 b1 00 48 41 52 50 53 49 34 20 20 20 ->391bc5 00 36 87 8a 00 00 08 1a INSTRUMENT_HARPSI5 .text $00, $36, $87, $8A, $00, $00, $08, $1A, $80, $7F, $33, $00, 'HARPSI5 ' ->391bcd 80 7f 33 00 48 41 52 50 53 49 35 20 20 20 ->391bdb 00 f0 00 1e 11 01 08 e2 INSTRUMENT_HELICPTR .text $00, $F0, $00, $1E, $11, $01, $08, $E2, $C0, $11, $11, $01, 'HELICPTR ' ->391be3 c0 11 11 01 48 45 4c 49 43 50 54 52 20 20 ->391bf1 0a 01 00 f7 b5 00 00 00 INSTRUMENT_HIHAT1 .text $0A, $01, $00, $F7, $B5, $00, $00, $00, $00, $00, $00, $00, 'HIHAT1 ' ->391bf9 00 00 00 00 48 49 48 41 54 31 20 20 20 20 ->391c07 0a 01 03 da 18 00 00 00 INSTRUMENT_HIHAT2 .text $0A, $01, $03, $DA, $18, $00, $00, $00, $00, $00, $00, $00, 'HIHAT2 ' ->391c0f 00 00 00 00 48 49 48 41 54 32 20 20 20 20 ->391c1d 00 87 4d 78 42 00 0a 94 INSTRUMENT_JAVAICAN .text $00, $87, $4D, $78, $42, $00, $0A, $94, $00, $85, $54, $00, 'JAVAICAN ' ->391c25 00 85 54 00 4a 41 56 41 49 43 41 4e 20 20 ->391c33 00 03 5e 85 51 01 0e 11 INSTRUMENT_JAZZGUIT .text $00, $03, $5E, $85, $51, $01, $0E, $11, $00, $D2, $71, $00, 'JAZZGUIT ' ->391c3b 00 d2 71 00 4a 41 5a 5a 47 55 49 54 20 20 ->391c49 00 00 50 f2 70 00 0e 13 INSTRUMENT_JEWSHARP .text $00, $00, $50, $F2, $70, $00, $0E, $13, $00, $F2, $72, $00, 'JEWSHARP ' ->391c51 00 f2 72 00 4a 45 57 53 48 41 52 50 20 20 ->391c5f 00 00 02 f0 fa 01 06 11 INSTRUMENT_KEYBRD1 .text $00, $00, $02, $F0, $FA, $01, $06, $11, $80, $F2, $FA, $01, 'KEYBRD1 ' ->391c67 80 f2 fa 01 4b 45 59 42 52 44 31 20 20 20 ->391c75 00 01 8f f2 bd 00 08 14 INSTRUMENT_KEYBRD2 .text $00, $01, $8F, $F2, $BD, $00, $08, $14, $80, $82, $BD, $00, 'KEYBRD2 ' ->391c7d 80 82 bd 00 4b 45 59 42 52 44 32 20 20 20 ->391c8b 00 01 00 f0 f0 00 00 e4 INSTRUMENT_KEYBRD3 .text $00, $01, $00, $F0, $F0, $00, $00, $E4, $03, $F3, $36, $00, 'KEYBRD3 ' ->391c93 03 f3 36 00 4b 45 59 42 52 44 33 20 20 20 ->391ca1 09 e6 00 25 b5 00 00 00 INSTRUMENT_LASER .text $09, $E6, $00, $25, $B5, $00, $00, $00, $00, $00, $00, $00, 'LASER ' ->391ca9 00 00 00 00 4c 41 53 45 52 20 20 20 20 20 ->391cb7 00 32 44 f8 ff 00 0e 11 INSTRUMENT_LOGDRUM1 .text $00, $32, $44, $F8, $FF, $00, $0E, $11, $00, $F5, $7F, $00, 'LOGDRUM1 ' ->391cbf 00 f5 7f 00 4c 4f 47 44 52 55 4d 31 20 20 ->391ccd 00 05 4e da 25 00 0a 01 INSTRUMENT_MARIMBA1 .text $00, $05, $4E, $DA, $25, $00, $0A, $01, $00, $F9, $15, $00, 'MARIMBA1 ' ->391cd5 00 f9 15 00 4d 41 52 49 4d 42 41 31 20 20 ->391ce3 00 85 4e da 15 00 0a 81 INSTRUMENT_MARIMBA2 .text $00, $85, $4E, $DA, $15, $00, $0A, $81, $80, $F9, $13, $00, 'MARIMBA2 ' ->391ceb 80 f9 13 00 4d 41 52 49 4d 42 41 32 20 20 ->391cf9 00 30 00 fe 11 01 08 ae INSTRUMENT_MDRNPHON .text $00, $30, $00, $FE, $11, $01, $08, $AE, $C0, $F1, $19, $01, 'MDRNPHON ' ->391d01 c0 f1 19 01 4d 44 52 4e 50 48 4f 4e 20 20 ->391d0f 07 0c 00 c8 b6 01 00 00 INSTRUMENT_MLTRDRUM .text $07, $0C, $00, $C8, $B6, $01, $00, $00, $00, $00, $00, $00, 'MLTRDRUM ' ->391d17 00 00 00 00 4d 4c 54 52 44 52 55 4d 20 20 ->391d25 00 20 90 f5 9e 02 0c 11 INSTRUMENT_MOOGSYNT .text $00, $20, $90, $F5, $9E, $02, $0C, $11, $00, $F4, $5B, $03, 'MOOGSYNT ' ->391d2d 00 f4 5b 03 4d 4f 4f 47 53 59 4e 54 20 20 ->391d3b 00 0e 40 d1 53 00 0e 0e INSTRUMENT_NOISE1 .text $00, $0E, $40, $D1, $53, $00, $0E, $0E, $00, $F2, $7F, $03, 'NOISE1 ' ->391d43 00 f2 7f 03 4e 4f 49 53 45 31 20 20 20 20 ->391d51 00 b1 c5 6e 17 00 02 22 INSTRUMENT_OBOE1 .text $00, $B1, $C5, $6E, $17, $00, $02, $22, $05, $8B, $0E, $00, 'OBOE1 ' ->391d59 05 8b 0e 00 4f 42 4f 45 31 20 20 20 20 20 ->391d67 00 65 d2 81 03 00 02 71 INSTRUMENT_ORGAN1 .text $00, $65, $D2, $81, $03, $00, $02, $71, $80, $F1, $05, $00, 'ORGAN1 ' ->391d6f 80 f1 05 00 4f 52 47 41 4e 31 20 20 20 20 ->391d7d 00 24 80 ff 0f 00 01 21 INSTRUMENT_ORGAN2 .text $00, $24, $80, $FF, $0F, $00, $01, $21, $80, $FF, $0F, $00, 'ORGAN2 ' ->391d85 80 ff 0f 00 4f 52 47 41 4e 32 20 20 20 20 ->391d93 00 03 5b f0 1f 00 0a 01 INSTRUMENT_ORGAN3 .text $00, $03, $5B, $F0, $1F, $00, $0A, $01, $80, $F0, $1F, $00, 'ORGAN3 ' ->391d9b 80 f0 1f 00 4f 52 47 41 4e 33 20 20 20 20 ->391da9 00 03 5b f0 1f 00 0a 01 INSTRUMENT_ORGAN3A .text $00, $03, $5B, $F0, $1F, $00, $0A, $01, $8D, $F0, $13, $00, 'ORGAN3A ' ->391db1 8d f0 13 00 4f 52 47 41 4e 33 41 20 20 20 ->391dbf 00 03 5b f0 1f 00 0a 01 INSTRUMENT_ORGAN3B .text $00, $03, $5B, $F0, $1F, $00, $0A, $01, $92, $F0, $12, $00, 'ORGAN3B ' ->391dc7 92 f0 12 00 4f 52 47 41 4e 33 42 20 20 20 ->391dd5 00 0c 00 f8 b5 00 01 00 INSTRUMENT_ORGNPERC .text $00, $0C, $00, $F8, $B5, $00, $01, $00, $00, $D6, $4F, $00, 'ORGNPERC ' ->391ddd 00 d6 4f 00 4f 52 47 4e 50 45 52 43 20 20 ->391deb 00 17 4f f2 61 00 08 12 INSTRUMENT_PHONE1 .text $00, $17, $4F, $F2, $61, $00, $08, $12, $08, $F1, $B2, $00, 'PHONE1 ' ->391df3 08 f1 b2 00 50 48 4f 4e 45 31 20 20 20 20 ->391e01 00 17 4f f2 61 00 08 12 INSTRUMENT_PHONE2 .text $00, $17, $4F, $F2, $61, $00, $08, $12, $0A, $F1, $B4, $00, 'PHONE2 ' ->391e09 0a f1 b4 00 50 48 4f 4e 45 32 20 20 20 20 ->391e17 00 81 63 f3 58 00 00 01 INSTRUMENT_PIAN1A .text $00, $81, $63, $F3, $58, $00, $00, $01, $80, $F2, $58, $00, 'PIAN1A ' ->391e1f 80 f2 58 00 50 49 41 4e 31 41 20 20 20 20 ->391e2d 00 07 1f f5 fa 00 0e 01 INSTRUMENT_PIAN1B .text $00, $07, $1F, $F5, $FA, $00, $0E, $01, $26, $F5, $FA, $00, 'PIAN1B ' ->391e35 26 f5 fa 00 50 49 41 4e 31 42 20 20 20 20 ->391e43 00 07 1f f5 fa 00 0e 01 INSTRUMENT_PIAN1C .text $00, $07, $1F, $F5, $FA, $00, $0E, $01, $57, $F5, $FA, $00, 'PIAN1C ' ->391e4b 57 f5 fa 00 50 49 41 4e 31 43 20 20 20 20 ->391e59 00 03 4f f1 53 00 06 17 INSTRUMENT_PIANO .text $00, $03, $4F, $F1, $53, $00, $06, $17, $00, $F2, $74, $00, 'PIANO ' ->391e61 00 f2 74 00 50 49 41 4e 4f 20 20 20 20 20 ->391e6f 00 01 4f f1 53 00 06 11 INSTRUMENT_PIANO1 .text $00, $01, $4F, $F1, $53, $00, $06, $11, $00, $D2, $74, $00, 'PIANO1 ' ->391e77 00 d2 74 00 50 49 41 4e 4f 31 20 20 20 20 ->391e85 00 41 9d f2 51 00 06 13 INSTRUMENT_PIANO2 .text $00, $41, $9D, $F2, $51, $00, $06, $13, $00, $F2, $F1, $00, 'PIANO2 ' ->391e8d 00 f2 f1 00 50 49 41 4e 4f 32 20 20 20 20 ->391e9b 00 01 4f f1 50 00 06 01 INSTRUMENT_PIANO3 .text $00, $01, $4F, $F1, $50, $00, $06, $01, $04, $D2, $7C, $00, 'PIANO3 ' ->391ea3 04 d2 7c 00 50 49 41 4e 4f 33 20 20 20 20 ->391eb1 00 01 4d f1 60 00 08 11 INSTRUMENT_PIANO4 .text $00, $01, $4D, $F1, $60, $00, $08, $11, $00, $D2, $7B, $00, 'PIANO4 ' ->391eb9 00 d2 7b 00 50 49 41 4e 4f 34 20 20 20 20 ->391ec7 00 03 4f f1 53 00 06 17 INSTRUMENT_PIANOBEL .text $00, $03, $4F, $F1, $53, $00, $06, $17, $03, $F2, $74, $00, 'PIANOBEL ' ->391ecf 03 f2 74 00 50 49 41 4e 4f 42 45 4c 20 20 ->391edd 00 01 cf f1 53 00 02 12 INSTRUMENT_PIANOF .text $00, $01, $CF, $F1, $53, $00, $02, $12, $00, $F2, $83, $00, 'PIANOF ' ->391ee5 00 f2 83 00 50 49 41 4e 4f 46 20 20 20 20 ->391ef3 00 10 00 75 93 01 00 01 INSTRUMENT_POPBASS1 .text $00, $10, $00, $75, $93, $01, $00, $01, $00, $F5, $82, $01, 'POPBASS1 ' ->391efb 00 f5 82 01 50 4f 50 42 41 53 53 31 20 20 ->391f09 07 0c 00 c7 b4 00 00 00 INSTRUMENT_RKSNARE1 .text $07, $0C, $00, $C7, $B4, $00, $00, $00, $00, $00, $00, $00, 'RKSNARE1 ' ->391f11 00 00 00 00 52 4b 53 4e 41 52 45 31 20 20 ->391f1f 00 01 4f 71 53 00 0a 12 INSTRUMENT_SAX1 .text $00, $01, $4F, $71, $53, $00, $0A, $12, $00, $52, $7C, $00, 'SAX1 ' ->391f27 00 52 7c 00 53 41 58 31 20 20 20 20 20 20 ->391f35 00 07 00 f0 f0 00 0e 00 INSTRUMENT_SCRATCH .text $00, $07, $00, $F0, $F0, $00, $0E, $00, $00, $5C, $DC, $00, 'SCRATCH ' ->391f3d 00 5c dc 00 53 43 52 41 54 43 48 20 20 20 ->391f4b 00 07 00 f0 f0 00 0e 00 INSTRUMENT_SCRATCH4 .text $00, $07, $00, $F0, $F0, $00, $0E, $00, $00, $5C, $DC, $00, 'SCRATCH4 ' ->391f53 00 5c dc 00 53 43 52 41 54 43 48 34 20 20 ->391f61 00 06 00 f0 f0 00 0e 00 INSTRUMENT_SDRUM2 .text $00, $06, $00, $F0, $F0, $00, $0E, $00, $00, $F6, $B4, $00, 'SDRUM2 ' ->391f69 00 f6 b4 00 53 44 52 55 4d 32 20 20 20 20 ->391f77 00 e4 0e ff 3f 01 00 c0 INSTRUMENT_SHRTVIBE .text $00, $E4, $0E, $FF, $3F, $01, $00, $C0, $00, $F3, $07, $00, 'SHRTVIBE ' ->391f7f 00 f3 07 00 53 48 52 54 56 49 42 45 20 20 ->391f8d 00 01 40 f1 53 00 00 08 INSTRUMENT_SITAR1 .text $00, $01, $40, $F1, $53, $00, $00, $08, $40, $F1, $53, $00, 'SITAR1 ' ->391f95 40 f1 53 00 53 49 54 41 52 31 20 20 20 20 ->391fa3 00 01 40 f1 53 00 00 08 INSTRUMENT_SITAR2 .text $00, $01, $40, $F1, $53, $00, $00, $08, $40, $F1, $53, $01, 'SITAR2 ' ->391fab 40 f1 53 01 53 49 54 41 52 32 20 20 20 20 ->391fb9 00 61 0c 81 03 00 08 71 INSTRUMENT_SNAKEFL .text $00, $61, $0C, $81, $03, $00, $08, $71, $80, $61, $0C, $00, 'SNAKEFL ' ->391fc1 80 61 0c 00 53 4e 41 4b 45 46 4c 20 20 20 ->391fcf 07 0c 00 f8 b5 00 00 00 INSTRUMENT_SNARE1 .text $07, $0C, $00, $F8, $B5, $00, $00, $00, $00, $00, $00, $00, 'SNARE1 ' ->391fd7 00 00 00 00 53 4e 41 52 45 31 20 20 20 20 ->391fe5 00 06 00 f0 f0 00 0e c4 INSTRUMENT_SNRSUST .text $00, $06, $00, $F0, $F0, $00, $0E, $C4, $03, $C4, $34, $00, 'SNRSUST ' ->391fed 03 c4 34 00 53 4e 52 53 55 53 54 20 20 20 ->391ffb 00 70 1c 51 03 02 0e 20 INSTRUMENT_SOLOVLN .text $00, $70, $1C, $51, $03, $02, $0E, $20, $00, $54, $67, $02, 'SOLOVLN ' ->392003 00 54 67 02 53 4f 4c 4f 56 4c 4e 20 20 20 ->392011 00 01 46 f1 83 00 06 61 INSTRUMENT_STEELGT1 .text $00, $01, $46, $F1, $83, $00, $06, $61, $03, $31, $86, $00, 'STEELGT1 ' ->392019 03 31 86 00 53 54 45 45 4c 47 54 31 20 20 ->392027 00 01 47 f1 83 00 06 61 INSTRUMENT_STEELGT2 .text $00, $01, $47, $F1, $83, $00, $06, $61, $03, $91, $86, $00, 'STEELGT2 ' ->39202f 03 91 86 00 53 54 45 45 4c 47 54 32 20 20 ->39203d 00 b1 8b 71 11 00 06 61 INSTRUMENT_STRINGS1 .text $00, $B1, $8B, $71, $11, $00, $06, $61, $40, $42, $15, $01, 'STRINGS1 ' ->392045 40 42 15 01 53 54 52 49 4e 47 53 31 20 20 ->392053 00 e1 4f b1 d3 03 06 21 INSTRUMENT_STRNLONG .text $00, $E1, $4F, $B1, $D3, $03, $06, $21, $00, $12, $74, $01, 'STRNLONG ' ->39205b 00 12 74 01 53 54 52 4e 4c 4f 4e 47 20 20 ->392069 00 55 97 2a 02 00 00 12 INSTRUMENT_SYN1 .text $00, $55, $97, $2A, $02, $00, $00, $12, $80, $42, $F3, $00, 'SYN1 ' ->392071 80 42 f3 00 53 59 4e 31 20 20 20 20 20 20 ->39207f 00 13 97 9a 12 00 0e 11 INSTRUMENT_SYN2 .text $00, $13, $97, $9A, $12, $00, $0E, $11, $80, $9B, $14, $00, 'SYN2 ' ->392087 80 9b 14 00 53 59 4e 32 20 20 20 20 20 20 ->392095 00 11 8a f1 11 00 06 01 INSTRUMENT_SYN3 .text $00, $11, $8A, $F1, $11, $00, $06, $01, $40, $F1, $B3, $00, 'SYN3 ' ->39209d 40 f1 b3 00 53 59 4e 33 20 20 20 20 20 20 ->3920ab 00 21 0d e9 3a 00 0a 22 INSTRUMENT_SYN4 .text $00, $21, $0D, $E9, $3A, $00, $0A, $22, $80, $65, $6C, $00, 'SYN4 ' ->3920b3 80 65 6c 00 53 59 4e 34 20 20 20 20 20 20 ->3920c1 00 01 4f 71 53 00 06 19 INSTRUMENT_SYN5 .text $00, $01, $4F, $71, $53, $00, $06, $19, $00, $52, $7C, $00, 'SYN5 ' ->3920c9 00 52 7c 00 53 59 4e 35 20 20 20 20 20 20 ->3920d7 00 24 0f 41 7e 00 0a 21 INSTRUMENT_SYN6 .text $00, $24, $0F, $41, $7E, $00, $0A, $21, $00, $F1, $5E, $00, 'SYN6 ' ->3920df 00 f1 5e 00 53 59 4e 36 20 20 20 20 20 20 ->3920ed 00 07 87 f0 05 00 04 01 INSTRUMENT_SYN9 .text $00, $07, $87, $F0, $05, $00, $04, $01, $80, $F0, $05, $00, 'SYN9 ' ->3920f5 80 f0 05 00 53 59 4e 39 20 20 20 20 20 20 ->392103 00 26 03 e0 f0 00 08 1e INSTRUMENT_SYNBAL1 .text $00, $26, $03, $E0, $F0, $00, $08, $1E, $00, $FF, $31, $00, 'SYNBAL1 ' ->39210b 00 ff 31 00 53 59 4e 42 41 4c 31 20 20 20 ->392119 00 28 03 e0 f0 00 04 13 INSTRUMENT_SYNBAL2 .text $00, $28, $03, $E0, $F0, $00, $04, $13, $00, $E8, $11, $00, 'SYNBAL2 ' ->392121 00 e8 11 00 53 59 4e 42 41 4c 32 20 20 20 ->39212f 00 30 88 d5 19 00 0c 71 INSTRUMENT_SYNBASS1 .text $00, $30, $88, $D5, $19, $00, $0C, $71, $80, $61, $1B, $00, 'SYNBASS1 ' ->392137 80 61 1b 00 53 59 4e 42 41 53 53 31 20 20 ->392145 00 81 86 65 01 00 0c 11 INSTRUMENT_SYNBASS2 .text $00, $81, $86, $65, $01, $00, $0C, $11, $00, $32, $74, $00, 'SYNBASS2 ' ->39214d 00 32 74 00 53 59 4e 42 41 53 53 32 20 20 ->39215b 00 81 83 65 05 00 0a 51 INSTRUMENT_SYNBASS4 .text $00, $81, $83, $65, $05, $00, $0A, $51, $00, $32, $74, $00, 'SYNBASS4 ' ->392163 00 32 74 00 53 59 4e 42 41 53 53 34 20 20 ->392171 00 06 00 f0 f0 00 0e 00 INSTRUMENT_SYNSNR1 .text $00, $06, $00, $F0, $F0, $00, $0E, $00, $00, $F8, $B6, $00, 'SYNSNR1 ' ->392179 00 f8 b6 00 53 59 4e 53 4e 52 31 20 20 20 ->392187 00 06 00 f0 f0 00 0e 00 INSTRUMENT_SYNSNR2 .text $00, $06, $00, $F0, $F0, $00, $0E, $00, $00, $F6, $B4, $00, 'SYNSNR2 ' ->39218f 00 f6 b4 00 53 59 4e 53 4e 52 32 20 20 20 ->39219d 00 8f 81 ef 01 00 04 01 INSTRUMENT_TINCAN1 .text $00, $8F, $81, $EF, $01, $00, $04, $01, $00, $98, $F1, $00, 'TINCAN1 ' ->3921a5 00 98 f1 00 54 49 4e 43 41 4e 31 20 20 20 ->3921b3 08 04 00 f7 b5 00 00 00 INSTRUMENT_TOM1 .text $08, $04, $00, $F7, $B5, $00, $00, $00, $00, $00, $00, $00, 'TOM1 ' ->3921bb 00 00 00 00 54 4f 4d 31 20 20 20 20 20 20 ->3921c9 08 02 00 c8 97 00 00 00 INSTRUMENT_TOM2 .text $08, $02, $00, $C8, $97, $00, $00, $00, $00, $00, $00, $00, 'TOM2 ' ->3921d1 00 00 00 00 54 4f 4d 32 20 20 20 20 20 20 ->3921df 00 17 4f f2 61 00 08 12 INSTRUMENT_TRAINBEL .text $00, $17, $4F, $F2, $61, $00, $08, $12, $08, $F2, $74, $00, 'TRAINBEL ' ->3921e7 08 f2 74 00 54 52 41 49 4e 42 45 4c 20 20 ->3921f5 00 26 03 e0 f0 00 08 1e INSTRUMENT_TRIANGLE .text $00, $26, $03, $E0, $F0, $00, $08, $1E, $00, $FF, $31, $00, 'TRIANGLE ' ->3921fd 00 ff 31 00 54 52 49 41 4e 47 4c 45 20 20 ->39220b 00 b1 1c 41 1f 00 0e 61 INSTRUMENT_TROMB1 .text $00, $B1, $1C, $41, $1F, $00, $0E, $61, $80, $92, $3B, $00, 'TROMB1 ' ->392213 80 92 3b 00 54 52 4f 4d 42 31 20 20 20 20 ->392221 00 21 1c 53 1d 00 0c 61 INSTRUMENT_TROMB2 .text $00, $21, $1C, $53, $1D, $00, $0C, $61, $80, $52, $3B, $00, 'TROMB2 ' ->392229 80 52 3b 00 54 52 4f 4d 42 32 20 20 20 20 ->392237 00 31 1c 41 0b 00 0e 61 INSTRUMENT_TRUMPET1 .text $00, $31, $1C, $41, $0B, $00, $0E, $61, $80, $92, $3B, $00, 'TRUMPET1 ' ->39223f 80 92 3b 00 54 52 55 4d 50 45 54 31 20 20 ->39224d 00 31 1c 23 1d 00 0c 61 INSTRUMENT_TRUMPET2 .text $00, $31, $1C, $23, $1D, $00, $0C, $61, $80, $52, $3B, $00, 'TRUMPET2 ' ->392255 80 52 3b 00 54 52 55 4d 50 45 54 32 20 20 ->392263 00 31 1c 41 01 00 0e 61 INSTRUMENT_TRUMPET3 .text $00, $31, $1C, $41, $01, $00, $0E, $61, $80, $92, $3B, $00, 'TRUMPET3 ' ->39226b 80 92 3b 00 54 52 55 4d 50 45 54 33 20 20 ->392279 00 31 1c 41 0b 00 0c 61 INSTRUMENT_TRUMPET4 .text $00, $31, $1C, $41, $0B, $00, $0C, $61, $80, $92, $3B, $00, 'TRUMPET4 ' ->392281 80 92 3b 00 54 52 55 4d 50 45 54 34 20 20 ->39228f 00 21 19 43 8c 00 0c 21 INSTRUMENT_TUBA1 .text $00, $21, $19, $43, $8C, $00, $0C, $21, $80, $85, $2F, $00, 'TUBA1 ' ->392297 80 85 2f 00 54 55 42 41 31 20 20 20 20 20 ->3922a5 00 84 53 f5 33 00 06 a0 INSTRUMENT_VIBRA1 .text $00, $84, $53, $F5, $33, $00, $06, $A0, $80, $FD, $25, $00, 'VIBRA1 ' ->3922ad 80 fd 25 00 56 49 42 52 41 31 20 20 20 20 ->3922bb 00 06 73 f6 54 00 00 81 INSTRUMENT_VIBRA2 .text $00, $06, $73, $F6, $54, $00, $00, $81, $03, $F2, $B3, $00, 'VIBRA2 ' ->3922c3 03 f2 b3 00 56 49 42 52 41 32 20 20 20 20 ->3922d1 00 93 97 aa 12 02 0e 91 INSTRUMENT_VIBRA3 .text $00, $93, $97, $AA, $12, $02, $0E, $91, $80, $AC, $21, $00, 'VIBRA3 ' ->3922d9 80 ac 21 00 56 49 42 52 41 33 20 20 20 20 ->3922e7 00 31 1c 51 03 00 0e 61 INSTRUMENT_VIOLIN1 .text $00, $31, $1C, $51, $03, $00, $0E, $61, $80, $54, $67, $00, 'VIOLIN1 ' ->3922ef 80 54 67 00 56 49 4f 4c 49 4e 31 20 20 20 ->3922fd 00 e1 88 62 29 00 0c 22 INSTRUMENT_VIOLIN2 .text $00, $E1, $88, $62, $29, $00, $0C, $22, $80, $53, $2C, $00, 'VIOLIN2 ' ->392305 80 53 2c 00 56 49 4f 4c 49 4e 32 20 20 20 ->392313 00 e1 88 64 29 00 06 22 INSTRUMENT_VIOLIN3 .text $00, $E1, $88, $64, $29, $00, $06, $22, $83, $53, $2C, $00, 'VIOLIN3 ' ->39231b 83 53 2c 00 56 49 4f 4c 49 4e 33 20 20 20 ->392329 00 31 9c f1 f9 00 0e 31 INSTRUMENT_VLNPIZZ1 .text $00, $31, $9C, $F1, $F9, $00, $0E, $31, $80, $F7, $E6, $00, 'VLNPIZZ1 ' ->392331 80 f7 e6 00 56 4c 4e 50 49 5a 5a 31 20 20 ->39233f 00 00 02 00 f0 00 0e 14 INSTRUMENT_WAVE .text $00, $00, $02, $00, $F0, $00, $0E, $14, $80, $1B, $A2, $00, 'WAVE ' ->392347 80 1b a2 00 57 41 56 45 20 20 20 20 20 20 ->392355 00 11 2d c8 2f 00 0c 31 INSTRUMENT_XYLO1 .text $00, $11, $2D, $C8, $2F, $00, $0C, $31, $00, $F5, $F5, $00, 'XYLO1 ' ->39235d 00 f5 f5 00 58 59 4c 4f 31 20 20 20 20 20 ->39236b 06 2e 00 ff 0f 00 00 00 INSTRUMENT_XYLO2 .text $06, $2E, $00, $FF, $0F, $00, $00, $00, $00, $00, $00, $00, 'XYLO2 ' ->392373 00 00 00 00 58 59 4c 4f 32 20 20 20 20 20 ->392381 00 06 00 ff f0 00 0e c4 INSTRUMENT_XYLO3 .text $00, $06, $00, $FF, $F0, $00, $0E, $C4, $00, $F8, $B5, $00, 'XYLO3 ' ->392389 00 f8 b5 00 58 59 4c 4f 33 20 20 20 20 20 +>391773 00 24 4f f2 0b 00 0e 31 INSTRUMENT_ACCORDN .text $00, $24, $4F, $F2, $0B, $00, $0E, $31, $00, $52, $0B, $00, 'ACCORDN ' +>39177b 00 52 0b 00 41 43 43 4f 52 44 4e 20 20 20 +>391789 00 31 43 6e 17 01 02 22 INSTRUMENT_BAGPIPE1 .text $00, $31, $43, $6E, $17, $01, $02, $22, $05, $8B, $0C, $02, 'BAGPIPE1 ' +>391791 05 8b 0c 02 42 41 47 50 49 50 45 31 20 20 +>39179f 00 30 00 ff a0 03 00 a3 INSTRUMENT_BAGPIPE2 .text $00, $30, $00, $FF, $A0, $03, $00, $A3, $00, $65, $0B, $02, 'BAGPIPE2 ' +>3917a7 00 65 0b 02 42 41 47 50 49 50 45 32 20 20 +>3917b5 00 31 87 a1 11 00 08 16 INSTRUMENT_BANJO1 .text $00, $31, $87, $A1, $11, $00, $08, $16, $80, $7D, $43, $00, 'BANJO1 ' +>3917bd 80 7d 43 00 42 41 4e 4a 4f 31 20 20 20 20 +>3917cb 00 01 15 25 2f 00 0a 21 INSTRUMENT_BASS1 .text $00, $01, $15, $25, $2F, $00, $0A, $21, $80, $65, $6C, $00, 'BASS1 ' +>3917d3 80 65 6c 00 42 41 53 53 31 20 20 20 20 20 +>3917e1 00 01 1d f2 ef 00 0a 01 INSTRUMENT_BASS2 .text $00, $01, $1D, $F2, $EF, $00, $0A, $01, $00, $F5, $78, $00, 'BASS2 ' +>3917e9 00 f5 78 00 42 41 53 53 32 20 20 20 20 20 +>3917f7 00 c0 6d f9 01 01 0e 41 INSTRUMENT_BASSHARP .text $00, $C0, $6D, $F9, $01, $01, $0E, $41, $00, $F2, $73, $00, 'BASSHARP ' +>3917ff 00 f2 73 00 42 41 53 53 48 41 52 50 20 20 +>39180d 00 30 c8 d5 19 00 0c 71 INSTRUMENT_BASSOON1 .text $00, $30, $C8, $D5, $19, $00, $0C, $71, $80, $61, $1B, $00, 'BASSOON1 ' +>391815 80 61 1b 00 42 41 53 53 4f 4f 4e 31 20 20 +>391823 00 c1 4f b1 53 03 06 e0 INSTRUMENT_BASSTRLG .text $00, $C1, $4F, $B1, $53, $03, $06, $E0, $00, $12, $74, $03, 'BASSTRLG ' +>39182b 00 12 74 03 42 41 53 53 54 52 4c 47 20 20 +>391839 06 00 0b a8 4c 00 00 00 INSTRUMENT_BDRUM1 .text $06, $00, $0B, $A8, $4C, $00, $00, $00, $00, $00, $00, $00, 'BDRUM1 ' +>391841 00 00 00 00 42 44 52 55 4d 31 20 20 20 20 +>39184f 00 64 db ff 01 00 04 3e INSTRUMENT_BELLONG .text $00, $64, $DB, $FF, $01, $00, $04, $3E, $C0, $F3, $62, $00, 'BELLONG ' +>391857 c0 f3 62 00 42 45 4c 4c 4f 4e 47 20 20 20 +>391865 00 07 4f f2 60 00 08 12 INSTRUMENT_BELLS .text $00, $07, $4F, $F2, $60, $00, $08, $12, $00, $F2, $72, $00, 'BELLS ' +>39186d 00 f2 72 00 42 45 4c 4c 53 20 20 20 20 20 +>39187b 00 64 db ff 01 00 04 3e INSTRUMENT_BELSHORT .text $00, $64, $DB, $FF, $01, $00, $04, $3E, $C0, $F5, $F3, $00, 'BELSHORT ' +>391883 c0 f5 f3 00 42 45 4c 53 48 4f 52 54 20 20 +>391891 00 20 4b 7b 04 01 0e 21 INSTRUMENT_BNCEBASS .text $00, $20, $4B, $7B, $04, $01, $0E, $21, $00, $F5, $72, $00, 'BNCEBASS ' +>391899 00 f5 72 00 42 4e 43 45 42 41 53 53 20 20 +>3918a7 00 21 16 71 ae 00 0e 21 INSTRUMENT_BRASS1 .text $00, $21, $16, $71, $AE, $00, $0E, $21, $00, $81, $9E, $00, 'BRASS1 ' +>3918af 00 81 9e 00 42 52 41 53 53 31 20 20 20 20 +>3918bd 00 30 c5 52 11 00 00 31 INSTRUMENT_CBASSOON .text $00, $30, $C5, $52, $11, $00, $00, $31, $80, $31, $2E, $00, 'CBASSOON ' +>3918c5 80 31 2e 00 43 42 41 53 53 4f 4f 4e 20 20 +>3918d3 00 33 87 01 10 00 08 14 INSTRUMENT_CELESTA .text $00, $33, $87, $01, $10, $00, $08, $14, $80, $7D, $33, $00, 'CELESTA ' +>3918db 80 7d 33 00 43 45 4c 45 53 54 41 20 20 20 +>3918e9 00 32 16 73 24 00 0e 21 INSTRUMENT_CLAR1 .text $00, $32, $16, $73, $24, $00, $0E, $21, $80, $75, $57, $00, 'CLAR1 ' +>3918f1 80 75 57 00 43 4c 41 52 31 20 20 20 20 20 +>3918ff 00 31 1c 41 1b 00 0c 60 INSTRUMENT_CLAR2 .text $00, $31, $1C, $41, $1B, $00, $0C, $60, $80, $42, $3B, $00, 'CLAR2 ' +>391907 80 42 3b 00 43 4c 41 52 32 20 20 20 20 20 +>391915 00 32 9a 51 1b 00 0c 61 INSTRUMENT_CLARINET .text $00, $32, $9A, $51, $1B, $00, $0C, $61, $82, $A2, $3B, $00, 'CLARINET ' +>39191d 82 a2 3b 00 43 4c 41 52 49 4e 45 54 20 20 +>39192b 00 11 0d f2 01 00 0a 15 INSTRUMENT_CLAVECIN .text $00, $11, $0D, $F2, $01, $00, $0A, $15, $0D, $F2, $B1, $00, 'CLAVECIN ' +>391933 0d f2 b1 00 43 4c 41 56 45 43 49 4e 20 20 +>391941 00 00 02 f0 ff 00 06 11 INSTRUMENT_CROMORNE .text $00, $00, $02, $F0, $FF, $00, $06, $11, $80, $F0, $FF, $00, 'CROMORNE ' +>391949 80 f0 ff 00 43 52 4f 4d 4f 52 4e 45 20 20 +>391957 09 01 00 f5 b5 00 00 00 INSTRUMENT_CYMBAL1 .text $09, $01, $00, $F5, $B5, $00, $00, $00, $00, $00, $00, $00, 'CYMBAL1 ' +>39195f 00 00 00 00 43 59 4d 42 41 4c 31 20 20 20 +>39196d 00 05 8a f0 7b 00 08 01 INSTRUMENT_ELCLAV1 .text $00, $05, $8A, $F0, $7B, $00, $08, $01, $80, $F4, $7B, $00, 'ELCLAV1 ' +>391975 80 f4 7b 00 45 4c 43 4c 41 56 31 20 20 20 +>391983 00 01 49 f1 53 01 06 11 INSTRUMENT_ELCLAV2 .text $00, $01, $49, $F1, $53, $01, $06, $11, $00, $F1, $74, $02, 'ELCLAV2 ' +>39198b 00 f1 74 02 45 4c 43 4c 41 56 32 20 20 20 +>391999 00 e0 6d 57 04 01 0e 61 INSTRUMENT_ELECFL .text $00, $E0, $6D, $57, $04, $01, $0E, $61, $00, $67, $7D, $00, 'ELECFL ' +>3919a1 00 67 7d 00 45 4c 45 43 46 4c 20 20 20 20 +>3919af 00 13 97 9a 12 02 0e 91 INSTRUMENT_ELECVIBE .text $00, $13, $97, $9A, $12, $02, $0E, $91, $80, $9B, $11, $00, 'ELECVIBE ' +>3919b7 80 9b 11 00 45 4c 45 43 56 49 42 45 20 20 +>3919c5 00 f1 01 97 17 00 08 21 INSTRUMENT_ELGUIT1 .text $00, $F1, $01, $97, $17, $00, $08, $21, $0D, $F1, $18, $00, 'ELGUIT1 ' +>3919cd 0d f1 18 00 45 4c 47 55 49 54 31 20 20 20 +>3919db 00 13 96 ff 21 00 0a 11 INSTRUMENT_ELGUIT2 .text $00, $13, $96, $FF, $21, $00, $0A, $11, $80, $FF, $03, $00, 'ELGUIT2 ' +>3919e3 80 ff 03 00 45 4c 47 55 49 54 32 20 20 20 +>3919f1 00 07 8f 82 7d 00 0c 14 INSTRUMENT_ELGUIT3 .text $00, $07, $8F, $82, $7D, $00, $0C, $14, $80, $82, $7D, $00, 'ELGUIT3 ' +>3919f9 80 82 7d 00 45 4c 47 55 49 54 33 20 20 20 +>391a07 00 05 8f da 15 00 0a 01 INSTRUMENT_ELGUIT4 .text $00, $05, $8F, $DA, $15, $00, $0A, $01, $80, $F9, $14, $02, 'ELGUIT4 ' +>391a0f 80 f9 14 02 45 4c 47 55 49 54 34 20 20 20 +>391a1d 00 b2 cd 91 2a 02 09 b1 INSTRUMENT_ELORGAN1 .text $00, $B2, $CD, $91, $2A, $02, $09, $B1, $80, $91, $2A, $01, 'ELORGAN1 ' +>391a25 80 91 2a 01 45 4c 4f 52 47 41 4e 31 20 20 +>391a33 00 01 4f f1 50 00 06 01 INSTRUMENT_ELPIANO1 .text $00, $01, $4F, $F1, $50, $00, $06, $01, $04, $D2, $7C, $00, 'ELPIANO1 ' +>391a3b 04 d2 7c 00 45 4c 50 49 41 4e 4f 31 20 20 +>391a49 00 02 22 f2 13 00 0e 02 INSTRUMENT_ELPIANO2 .text $00, $02, $22, $F2, $13, $00, $0E, $02, $00, $F5, $43, $00, 'ELPIANO2 ' +>391a51 00 f5 43 00 45 4c 50 49 41 4e 4f 32 20 20 +>391a5f 00 81 63 f3 58 00 00 01 INSTRUMENT_EPIANO1A .text $00, $81, $63, $F3, $58, $00, $00, $01, $80, $F2, $58, $00, 'EPIANO1A ' +>391a67 80 f2 58 00 45 50 49 41 4e 4f 31 41 20 20 +>391a75 00 07 1f f5 fa 00 0e 01 INSTRUMENT_EPIANO1B .text $00, $07, $1F, $F5, $FA, $00, $0E, $01, $57, $F5, $FA, $00, 'EPIANO1B ' +>391a7d 57 f5 fa 00 45 50 49 41 4e 4f 31 42 20 20 +>391a8b 00 21 83 74 17 00 07 a2 INSTRUMENT_FLUTE .text $00, $21, $83, $74, $17, $00, $07, $A2, $8D, $65, $17, $00, 'FLUTE ' +>391a93 8d 65 17 00 46 4c 55 54 45 20 20 20 20 20 +>391aa1 00 a1 27 74 8f 00 02 a1 INSTRUMENT_FLUTE1 .text $00, $A1, $27, $74, $8F, $00, $02, $A1, $80, $65, $2A, $00, 'FLUTE1 ' +>391aa9 80 65 2a 00 46 4c 55 54 45 31 20 20 20 20 +>391ab7 00 e0 ec 6e 8f 00 0e 61 INSTRUMENT_FLUTE2 .text $00, $E0, $EC, $6E, $8F, $00, $0E, $61, $00, $65, $2A, $00, 'FLUTE2 ' +>391abf 00 65 2a 00 46 4c 55 54 45 32 20 20 20 20 +>391acd 00 21 9f 53 5a 00 0c 21 INSTRUMENT_FRHORN1 .text $00, $21, $9F, $53, $5A, $00, $0C, $21, $80, $AA, $1A, $00, 'FRHORN1 ' +>391ad5 80 aa 1a 00 46 52 48 4f 52 4e 31 20 20 20 +>391ae3 00 20 8e a5 8f 02 06 21 INSTRUMENT_FRHORN2 .text $00, $20, $8E, $A5, $8F, $02, $06, $21, $00, $36, $3D, $00, 'FRHORN2 ' +>391aeb 00 36 3d 00 46 52 48 4f 52 4e 32 20 20 20 +>391af9 00 f0 18 55 ef 02 00 e0 INSTRUMENT_FSTRP1 .text $00, $F0, $18, $55, $EF, $02, $00, $E0, $80, $87, $1E, $03, 'FSTRP1 ' +>391b01 80 87 1e 03 46 53 54 52 50 31 20 20 20 20 +>391b0f 00 70 16 55 2f 02 0c e0 INSTRUMENT_FSTRP2 .text $00, $70, $16, $55, $2F, $02, $0C, $E0, $80, $87, $1E, $03, 'FSTRP2 ' +>391b17 80 87 1e 03 46 53 54 52 50 32 20 20 20 20 +>391b25 00 f1 00 97 13 00 0a 25 INSTRUMENT_FUZGUIT1 .text $00, $F1, $00, $97, $13, $00, $0A, $25, $0D, $F1, $18, $01, 'FUZGUIT1 ' +>391b2d 0d f1 18 01 46 55 5a 47 55 49 54 31 20 20 +>391b3b 00 31 48 f1 53 00 06 32 INSTRUMENT_FUZGUIT2 .text $00, $31, $48, $F1, $53, $00, $06, $32, $00, $F2, $27, $02, 'FUZGUIT2 ' +>391b43 00 f2 27 02 46 55 5a 47 55 49 54 32 20 20 +>391b51 00 01 11 f2 1f 00 0a 01 INSTRUMENT_GUITAR1 .text $00, $01, $11, $F2, $1F, $00, $0A, $01, $00, $F5, $88, $00, 'GUITAR1 ' +>391b59 00 f5 88 00 47 55 49 54 41 52 31 20 20 20 +>391b67 00 02 29 f5 75 00 00 01 INSTRUMENT_HARP1 .text $00, $02, $29, $F5, $75, $00, $00, $01, $83, $F2, $F3, $00, 'HARP1 ' +>391b6f 83 f2 f3 00 48 41 52 50 31 20 20 20 20 20 +>391b7d 00 02 99 f5 55 00 00 01 INSTRUMENT_HARP2 .text $00, $02, $99, $F5, $55, $00, $00, $01, $80, $F6, $53, $00, 'HARP2 ' +>391b85 80 f6 53 00 48 41 52 50 32 20 20 20 20 20 +>391b93 00 02 57 f5 56 00 00 01 INSTRUMENT_HARP3 .text $00, $02, $57, $F5, $56, $00, $00, $01, $80, $F6, $54, $00, 'HARP3 ' +>391b9b 80 f6 54 00 48 41 52 50 33 20 20 20 20 20 +>391ba9 00 02 29 f5 75 00 00 01 INSTRUMENT_HARPE1 .text $00, $02, $29, $F5, $75, $00, $00, $01, $03, $F2, $F3, $00, 'HARPE1 ' +>391bb1 03 f2 f3 00 48 41 52 50 45 31 20 20 20 20 +>391bbf 00 32 87 a1 10 00 08 16 INSTRUMENT_HARPSI1 .text $00, $32, $87, $A1, $10, $00, $08, $16, $80, $7D, $33, $00, 'HARPSI1 ' +>391bc7 80 7d 33 00 48 41 52 50 53 49 31 20 20 20 +>391bd5 00 33 87 a1 10 00 06 15 INSTRUMENT_HARPSI2 .text $00, $33, $87, $A1, $10, $00, $06, $15, $80, $7D, $43, $00, 'HARPSI2 ' +>391bdd 80 7d 43 00 48 41 52 50 53 49 32 20 20 20 +>391beb 00 35 84 a8 10 00 08 18 INSTRUMENT_HARPSI3 .text $00, $35, $84, $A8, $10, $00, $08, $18, $80, $7D, $33, $00, 'HARPSI3 ' +>391bf3 80 7d 33 00 48 41 52 50 53 49 33 20 20 20 +>391c01 00 11 0d f2 01 00 0a 15 INSTRUMENT_HARPSI4 .text $00, $11, $0D, $F2, $01, $00, $0A, $15, $0D, $F2, $B1, $00, 'HARPSI4 ' +>391c09 0d f2 b1 00 48 41 52 50 53 49 34 20 20 20 +>391c17 00 36 87 8a 00 00 08 1a INSTRUMENT_HARPSI5 .text $00, $36, $87, $8A, $00, $00, $08, $1A, $80, $7F, $33, $00, 'HARPSI5 ' +>391c1f 80 7f 33 00 48 41 52 50 53 49 35 20 20 20 +>391c2d 00 f0 00 1e 11 01 08 e2 INSTRUMENT_HELICPTR .text $00, $F0, $00, $1E, $11, $01, $08, $E2, $C0, $11, $11, $01, 'HELICPTR ' +>391c35 c0 11 11 01 48 45 4c 49 43 50 54 52 20 20 +>391c43 0a 01 00 f7 b5 00 00 00 INSTRUMENT_HIHAT1 .text $0A, $01, $00, $F7, $B5, $00, $00, $00, $00, $00, $00, $00, 'HIHAT1 ' +>391c4b 00 00 00 00 48 49 48 41 54 31 20 20 20 20 +>391c59 0a 01 03 da 18 00 00 00 INSTRUMENT_HIHAT2 .text $0A, $01, $03, $DA, $18, $00, $00, $00, $00, $00, $00, $00, 'HIHAT2 ' +>391c61 00 00 00 00 48 49 48 41 54 32 20 20 20 20 +>391c6f 00 87 4d 78 42 00 0a 94 INSTRUMENT_JAVAICAN .text $00, $87, $4D, $78, $42, $00, $0A, $94, $00, $85, $54, $00, 'JAVAICAN ' +>391c77 00 85 54 00 4a 41 56 41 49 43 41 4e 20 20 +>391c85 00 03 5e 85 51 01 0e 11 INSTRUMENT_JAZZGUIT .text $00, $03, $5E, $85, $51, $01, $0E, $11, $00, $D2, $71, $00, 'JAZZGUIT ' +>391c8d 00 d2 71 00 4a 41 5a 5a 47 55 49 54 20 20 +>391c9b 00 00 50 f2 70 00 0e 13 INSTRUMENT_JEWSHARP .text $00, $00, $50, $F2, $70, $00, $0E, $13, $00, $F2, $72, $00, 'JEWSHARP ' +>391ca3 00 f2 72 00 4a 45 57 53 48 41 52 50 20 20 +>391cb1 00 00 02 f0 fa 01 06 11 INSTRUMENT_KEYBRD1 .text $00, $00, $02, $F0, $FA, $01, $06, $11, $80, $F2, $FA, $01, 'KEYBRD1 ' +>391cb9 80 f2 fa 01 4b 45 59 42 52 44 31 20 20 20 +>391cc7 00 01 8f f2 bd 00 08 14 INSTRUMENT_KEYBRD2 .text $00, $01, $8F, $F2, $BD, $00, $08, $14, $80, $82, $BD, $00, 'KEYBRD2 ' +>391ccf 80 82 bd 00 4b 45 59 42 52 44 32 20 20 20 +>391cdd 00 01 00 f0 f0 00 00 e4 INSTRUMENT_KEYBRD3 .text $00, $01, $00, $F0, $F0, $00, $00, $E4, $03, $F3, $36, $00, 'KEYBRD3 ' +>391ce5 03 f3 36 00 4b 45 59 42 52 44 33 20 20 20 +>391cf3 09 e6 00 25 b5 00 00 00 INSTRUMENT_LASER .text $09, $E6, $00, $25, $B5, $00, $00, $00, $00, $00, $00, $00, 'LASER ' +>391cfb 00 00 00 00 4c 41 53 45 52 20 20 20 20 20 +>391d09 00 32 44 f8 ff 00 0e 11 INSTRUMENT_LOGDRUM1 .text $00, $32, $44, $F8, $FF, $00, $0E, $11, $00, $F5, $7F, $00, 'LOGDRUM1 ' +>391d11 00 f5 7f 00 4c 4f 47 44 52 55 4d 31 20 20 +>391d1f 00 05 4e da 25 00 0a 01 INSTRUMENT_MARIMBA1 .text $00, $05, $4E, $DA, $25, $00, $0A, $01, $00, $F9, $15, $00, 'MARIMBA1 ' +>391d27 00 f9 15 00 4d 41 52 49 4d 42 41 31 20 20 +>391d35 00 85 4e da 15 00 0a 81 INSTRUMENT_MARIMBA2 .text $00, $85, $4E, $DA, $15, $00, $0A, $81, $80, $F9, $13, $00, 'MARIMBA2 ' +>391d3d 80 f9 13 00 4d 41 52 49 4d 42 41 32 20 20 +>391d4b 00 30 00 fe 11 01 08 ae INSTRUMENT_MDRNPHON .text $00, $30, $00, $FE, $11, $01, $08, $AE, $C0, $F1, $19, $01, 'MDRNPHON ' +>391d53 c0 f1 19 01 4d 44 52 4e 50 48 4f 4e 20 20 +>391d61 07 0c 00 c8 b6 01 00 00 INSTRUMENT_MLTRDRUM .text $07, $0C, $00, $C8, $B6, $01, $00, $00, $00, $00, $00, $00, 'MLTRDRUM ' +>391d69 00 00 00 00 4d 4c 54 52 44 52 55 4d 20 20 +>391d77 00 20 90 f5 9e 02 0c 11 INSTRUMENT_MOOGSYNT .text $00, $20, $90, $F5, $9E, $02, $0C, $11, $00, $F4, $5B, $03, 'MOOGSYNT ' +>391d7f 00 f4 5b 03 4d 4f 4f 47 53 59 4e 54 20 20 +>391d8d 00 0e 40 d1 53 00 0e 0e INSTRUMENT_NOISE1 .text $00, $0E, $40, $D1, $53, $00, $0E, $0E, $00, $F2, $7F, $03, 'NOISE1 ' +>391d95 00 f2 7f 03 4e 4f 49 53 45 31 20 20 20 20 +>391da3 00 b1 c5 6e 17 00 02 22 INSTRUMENT_OBOE1 .text $00, $B1, $C5, $6E, $17, $00, $02, $22, $05, $8B, $0E, $00, 'OBOE1 ' +>391dab 05 8b 0e 00 4f 42 4f 45 31 20 20 20 20 20 +>391db9 00 65 d2 81 03 00 02 71 INSTRUMENT_ORGAN1 .text $00, $65, $D2, $81, $03, $00, $02, $71, $80, $F1, $05, $00, 'ORGAN1 ' +>391dc1 80 f1 05 00 4f 52 47 41 4e 31 20 20 20 20 +>391dcf 00 24 80 ff 0f 00 01 21 INSTRUMENT_ORGAN2 .text $00, $24, $80, $FF, $0F, $00, $01, $21, $80, $FF, $0F, $00, 'ORGAN2 ' +>391dd7 80 ff 0f 00 4f 52 47 41 4e 32 20 20 20 20 +>391de5 00 03 5b f0 1f 00 0a 01 INSTRUMENT_ORGAN3 .text $00, $03, $5B, $F0, $1F, $00, $0A, $01, $80, $F0, $1F, $00, 'ORGAN3 ' +>391ded 80 f0 1f 00 4f 52 47 41 4e 33 20 20 20 20 +>391dfb 00 03 5b f0 1f 00 0a 01 INSTRUMENT_ORGAN3A .text $00, $03, $5B, $F0, $1F, $00, $0A, $01, $8D, $F0, $13, $00, 'ORGAN3A ' +>391e03 8d f0 13 00 4f 52 47 41 4e 33 41 20 20 20 +>391e11 00 03 5b f0 1f 00 0a 01 INSTRUMENT_ORGAN3B .text $00, $03, $5B, $F0, $1F, $00, $0A, $01, $92, $F0, $12, $00, 'ORGAN3B ' +>391e19 92 f0 12 00 4f 52 47 41 4e 33 42 20 20 20 +>391e27 00 0c 00 f8 b5 00 01 00 INSTRUMENT_ORGNPERC .text $00, $0C, $00, $F8, $B5, $00, $01, $00, $00, $D6, $4F, $00, 'ORGNPERC ' +>391e2f 00 d6 4f 00 4f 52 47 4e 50 45 52 43 20 20 +>391e3d 00 17 4f f2 61 00 08 12 INSTRUMENT_PHONE1 .text $00, $17, $4F, $F2, $61, $00, $08, $12, $08, $F1, $B2, $00, 'PHONE1 ' +>391e45 08 f1 b2 00 50 48 4f 4e 45 31 20 20 20 20 +>391e53 00 17 4f f2 61 00 08 12 INSTRUMENT_PHONE2 .text $00, $17, $4F, $F2, $61, $00, $08, $12, $0A, $F1, $B4, $00, 'PHONE2 ' +>391e5b 0a f1 b4 00 50 48 4f 4e 45 32 20 20 20 20 +>391e69 00 81 63 f3 58 00 00 01 INSTRUMENT_PIAN1A .text $00, $81, $63, $F3, $58, $00, $00, $01, $80, $F2, $58, $00, 'PIAN1A ' +>391e71 80 f2 58 00 50 49 41 4e 31 41 20 20 20 20 +>391e7f 00 07 1f f5 fa 00 0e 01 INSTRUMENT_PIAN1B .text $00, $07, $1F, $F5, $FA, $00, $0E, $01, $26, $F5, $FA, $00, 'PIAN1B ' +>391e87 26 f5 fa 00 50 49 41 4e 31 42 20 20 20 20 +>391e95 00 07 1f f5 fa 00 0e 01 INSTRUMENT_PIAN1C .text $00, $07, $1F, $F5, $FA, $00, $0E, $01, $57, $F5, $FA, $00, 'PIAN1C ' +>391e9d 57 f5 fa 00 50 49 41 4e 31 43 20 20 20 20 +>391eab 00 03 4f f1 53 00 06 17 INSTRUMENT_PIANO .text $00, $03, $4F, $F1, $53, $00, $06, $17, $00, $F2, $74, $00, 'PIANO ' +>391eb3 00 f2 74 00 50 49 41 4e 4f 20 20 20 20 20 +>391ec1 00 01 4f f1 53 00 06 11 INSTRUMENT_PIANO1 .text $00, $01, $4F, $F1, $53, $00, $06, $11, $00, $D2, $74, $00, 'PIANO1 ' +>391ec9 00 d2 74 00 50 49 41 4e 4f 31 20 20 20 20 +>391ed7 00 41 9d f2 51 00 06 13 INSTRUMENT_PIANO2 .text $00, $41, $9D, $F2, $51, $00, $06, $13, $00, $F2, $F1, $00, 'PIANO2 ' +>391edf 00 f2 f1 00 50 49 41 4e 4f 32 20 20 20 20 +>391eed 00 01 4f f1 50 00 06 01 INSTRUMENT_PIANO3 .text $00, $01, $4F, $F1, $50, $00, $06, $01, $04, $D2, $7C, $00, 'PIANO3 ' +>391ef5 04 d2 7c 00 50 49 41 4e 4f 33 20 20 20 20 +>391f03 00 01 4d f1 60 00 08 11 INSTRUMENT_PIANO4 .text $00, $01, $4D, $F1, $60, $00, $08, $11, $00, $D2, $7B, $00, 'PIANO4 ' +>391f0b 00 d2 7b 00 50 49 41 4e 4f 34 20 20 20 20 +>391f19 00 03 4f f1 53 00 06 17 INSTRUMENT_PIANOBEL .text $00, $03, $4F, $F1, $53, $00, $06, $17, $03, $F2, $74, $00, 'PIANOBEL ' +>391f21 03 f2 74 00 50 49 41 4e 4f 42 45 4c 20 20 +>391f2f 00 01 cf f1 53 00 02 12 INSTRUMENT_PIANOF .text $00, $01, $CF, $F1, $53, $00, $02, $12, $00, $F2, $83, $00, 'PIANOF ' +>391f37 00 f2 83 00 50 49 41 4e 4f 46 20 20 20 20 +>391f45 00 10 00 75 93 01 00 01 INSTRUMENT_POPBASS1 .text $00, $10, $00, $75, $93, $01, $00, $01, $00, $F5, $82, $01, 'POPBASS1 ' +>391f4d 00 f5 82 01 50 4f 50 42 41 53 53 31 20 20 +>391f5b 07 0c 00 c7 b4 00 00 00 INSTRUMENT_RKSNARE1 .text $07, $0C, $00, $C7, $B4, $00, $00, $00, $00, $00, $00, $00, 'RKSNARE1 ' +>391f63 00 00 00 00 52 4b 53 4e 41 52 45 31 20 20 +>391f71 00 01 4f 71 53 00 0a 12 INSTRUMENT_SAX1 .text $00, $01, $4F, $71, $53, $00, $0A, $12, $00, $52, $7C, $00, 'SAX1 ' +>391f79 00 52 7c 00 53 41 58 31 20 20 20 20 20 20 +>391f87 00 07 00 f0 f0 00 0e 00 INSTRUMENT_SCRATCH .text $00, $07, $00, $F0, $F0, $00, $0E, $00, $00, $5C, $DC, $00, 'SCRATCH ' +>391f8f 00 5c dc 00 53 43 52 41 54 43 48 20 20 20 +>391f9d 00 07 00 f0 f0 00 0e 00 INSTRUMENT_SCRATCH4 .text $00, $07, $00, $F0, $F0, $00, $0E, $00, $00, $5C, $DC, $00, 'SCRATCH4 ' +>391fa5 00 5c dc 00 53 43 52 41 54 43 48 34 20 20 +>391fb3 00 06 00 f0 f0 00 0e 00 INSTRUMENT_SDRUM2 .text $00, $06, $00, $F0, $F0, $00, $0E, $00, $00, $F6, $B4, $00, 'SDRUM2 ' +>391fbb 00 f6 b4 00 53 44 52 55 4d 32 20 20 20 20 +>391fc9 00 e4 0e ff 3f 01 00 c0 INSTRUMENT_SHRTVIBE .text $00, $E4, $0E, $FF, $3F, $01, $00, $C0, $00, $F3, $07, $00, 'SHRTVIBE ' +>391fd1 00 f3 07 00 53 48 52 54 56 49 42 45 20 20 +>391fdf 00 01 40 f1 53 00 00 08 INSTRUMENT_SITAR1 .text $00, $01, $40, $F1, $53, $00, $00, $08, $40, $F1, $53, $00, 'SITAR1 ' +>391fe7 40 f1 53 00 53 49 54 41 52 31 20 20 20 20 +>391ff5 00 01 40 f1 53 00 00 08 INSTRUMENT_SITAR2 .text $00, $01, $40, $F1, $53, $00, $00, $08, $40, $F1, $53, $01, 'SITAR2 ' +>391ffd 40 f1 53 01 53 49 54 41 52 32 20 20 20 20 +>39200b 00 61 0c 81 03 00 08 71 INSTRUMENT_SNAKEFL .text $00, $61, $0C, $81, $03, $00, $08, $71, $80, $61, $0C, $00, 'SNAKEFL ' +>392013 80 61 0c 00 53 4e 41 4b 45 46 4c 20 20 20 +>392021 07 0c 00 f8 b5 00 00 00 INSTRUMENT_SNARE1 .text $07, $0C, $00, $F8, $B5, $00, $00, $00, $00, $00, $00, $00, 'SNARE1 ' +>392029 00 00 00 00 53 4e 41 52 45 31 20 20 20 20 +>392037 00 06 00 f0 f0 00 0e c4 INSTRUMENT_SNRSUST .text $00, $06, $00, $F0, $F0, $00, $0E, $C4, $03, $C4, $34, $00, 'SNRSUST ' +>39203f 03 c4 34 00 53 4e 52 53 55 53 54 20 20 20 +>39204d 00 70 1c 51 03 02 0e 20 INSTRUMENT_SOLOVLN .text $00, $70, $1C, $51, $03, $02, $0E, $20, $00, $54, $67, $02, 'SOLOVLN ' +>392055 00 54 67 02 53 4f 4c 4f 56 4c 4e 20 20 20 +>392063 00 01 46 f1 83 00 06 61 INSTRUMENT_STEELGT1 .text $00, $01, $46, $F1, $83, $00, $06, $61, $03, $31, $86, $00, 'STEELGT1 ' +>39206b 03 31 86 00 53 54 45 45 4c 47 54 31 20 20 +>392079 00 01 47 f1 83 00 06 61 INSTRUMENT_STEELGT2 .text $00, $01, $47, $F1, $83, $00, $06, $61, $03, $91, $86, $00, 'STEELGT2 ' +>392081 03 91 86 00 53 54 45 45 4c 47 54 32 20 20 +>39208f 00 b1 8b 71 11 00 06 61 INSTRUMENT_STRINGS1 .text $00, $B1, $8B, $71, $11, $00, $06, $61, $40, $42, $15, $01, 'STRINGS1 ' +>392097 40 42 15 01 53 54 52 49 4e 47 53 31 20 20 +>3920a5 00 e1 4f b1 d3 03 06 21 INSTRUMENT_STRNLONG .text $00, $E1, $4F, $B1, $D3, $03, $06, $21, $00, $12, $74, $01, 'STRNLONG ' +>3920ad 00 12 74 01 53 54 52 4e 4c 4f 4e 47 20 20 +>3920bb 00 55 97 2a 02 00 00 12 INSTRUMENT_SYN1 .text $00, $55, $97, $2A, $02, $00, $00, $12, $80, $42, $F3, $00, 'SYN1 ' +>3920c3 80 42 f3 00 53 59 4e 31 20 20 20 20 20 20 +>3920d1 00 13 97 9a 12 00 0e 11 INSTRUMENT_SYN2 .text $00, $13, $97, $9A, $12, $00, $0E, $11, $80, $9B, $14, $00, 'SYN2 ' +>3920d9 80 9b 14 00 53 59 4e 32 20 20 20 20 20 20 +>3920e7 00 11 8a f1 11 00 06 01 INSTRUMENT_SYN3 .text $00, $11, $8A, $F1, $11, $00, $06, $01, $40, $F1, $B3, $00, 'SYN3 ' +>3920ef 40 f1 b3 00 53 59 4e 33 20 20 20 20 20 20 +>3920fd 00 21 0d e9 3a 00 0a 22 INSTRUMENT_SYN4 .text $00, $21, $0D, $E9, $3A, $00, $0A, $22, $80, $65, $6C, $00, 'SYN4 ' +>392105 80 65 6c 00 53 59 4e 34 20 20 20 20 20 20 +>392113 00 01 4f 71 53 00 06 19 INSTRUMENT_SYN5 .text $00, $01, $4F, $71, $53, $00, $06, $19, $00, $52, $7C, $00, 'SYN5 ' +>39211b 00 52 7c 00 53 59 4e 35 20 20 20 20 20 20 +>392129 00 24 0f 41 7e 00 0a 21 INSTRUMENT_SYN6 .text $00, $24, $0F, $41, $7E, $00, $0A, $21, $00, $F1, $5E, $00, 'SYN6 ' +>392131 00 f1 5e 00 53 59 4e 36 20 20 20 20 20 20 +>39213f 00 07 87 f0 05 00 04 01 INSTRUMENT_SYN9 .text $00, $07, $87, $F0, $05, $00, $04, $01, $80, $F0, $05, $00, 'SYN9 ' +>392147 80 f0 05 00 53 59 4e 39 20 20 20 20 20 20 +>392155 00 26 03 e0 f0 00 08 1e INSTRUMENT_SYNBAL1 .text $00, $26, $03, $E0, $F0, $00, $08, $1E, $00, $FF, $31, $00, 'SYNBAL1 ' +>39215d 00 ff 31 00 53 59 4e 42 41 4c 31 20 20 20 +>39216b 00 28 03 e0 f0 00 04 13 INSTRUMENT_SYNBAL2 .text $00, $28, $03, $E0, $F0, $00, $04, $13, $00, $E8, $11, $00, 'SYNBAL2 ' +>392173 00 e8 11 00 53 59 4e 42 41 4c 32 20 20 20 +>392181 00 30 88 d5 19 00 0c 71 INSTRUMENT_SYNBASS1 .text $00, $30, $88, $D5, $19, $00, $0C, $71, $80, $61, $1B, $00, 'SYNBASS1 ' +>392189 80 61 1b 00 53 59 4e 42 41 53 53 31 20 20 +>392197 00 81 86 65 01 00 0c 11 INSTRUMENT_SYNBASS2 .text $00, $81, $86, $65, $01, $00, $0C, $11, $00, $32, $74, $00, 'SYNBASS2 ' +>39219f 00 32 74 00 53 59 4e 42 41 53 53 32 20 20 +>3921ad 00 81 83 65 05 00 0a 51 INSTRUMENT_SYNBASS4 .text $00, $81, $83, $65, $05, $00, $0A, $51, $00, $32, $74, $00, 'SYNBASS4 ' +>3921b5 00 32 74 00 53 59 4e 42 41 53 53 34 20 20 +>3921c3 00 06 00 f0 f0 00 0e 00 INSTRUMENT_SYNSNR1 .text $00, $06, $00, $F0, $F0, $00, $0E, $00, $00, $F8, $B6, $00, 'SYNSNR1 ' +>3921cb 00 f8 b6 00 53 59 4e 53 4e 52 31 20 20 20 +>3921d9 00 06 00 f0 f0 00 0e 00 INSTRUMENT_SYNSNR2 .text $00, $06, $00, $F0, $F0, $00, $0E, $00, $00, $F6, $B4, $00, 'SYNSNR2 ' +>3921e1 00 f6 b4 00 53 59 4e 53 4e 52 32 20 20 20 +>3921ef 00 8f 81 ef 01 00 04 01 INSTRUMENT_TINCAN1 .text $00, $8F, $81, $EF, $01, $00, $04, $01, $00, $98, $F1, $00, 'TINCAN1 ' +>3921f7 00 98 f1 00 54 49 4e 43 41 4e 31 20 20 20 +>392205 08 04 00 f7 b5 00 00 00 INSTRUMENT_TOM1 .text $08, $04, $00, $F7, $B5, $00, $00, $00, $00, $00, $00, $00, 'TOM1 ' +>39220d 00 00 00 00 54 4f 4d 31 20 20 20 20 20 20 +>39221b 08 02 00 c8 97 00 00 00 INSTRUMENT_TOM2 .text $08, $02, $00, $C8, $97, $00, $00, $00, $00, $00, $00, $00, 'TOM2 ' +>392223 00 00 00 00 54 4f 4d 32 20 20 20 20 20 20 +>392231 00 17 4f f2 61 00 08 12 INSTRUMENT_TRAINBEL .text $00, $17, $4F, $F2, $61, $00, $08, $12, $08, $F2, $74, $00, 'TRAINBEL ' +>392239 08 f2 74 00 54 52 41 49 4e 42 45 4c 20 20 +>392247 00 26 03 e0 f0 00 08 1e INSTRUMENT_TRIANGLE .text $00, $26, $03, $E0, $F0, $00, $08, $1E, $00, $FF, $31, $00, 'TRIANGLE ' +>39224f 00 ff 31 00 54 52 49 41 4e 47 4c 45 20 20 +>39225d 00 b1 1c 41 1f 00 0e 61 INSTRUMENT_TROMB1 .text $00, $B1, $1C, $41, $1F, $00, $0E, $61, $80, $92, $3B, $00, 'TROMB1 ' +>392265 80 92 3b 00 54 52 4f 4d 42 31 20 20 20 20 +>392273 00 21 1c 53 1d 00 0c 61 INSTRUMENT_TROMB2 .text $00, $21, $1C, $53, $1D, $00, $0C, $61, $80, $52, $3B, $00, 'TROMB2 ' +>39227b 80 52 3b 00 54 52 4f 4d 42 32 20 20 20 20 +>392289 00 31 1c 41 0b 00 0e 61 INSTRUMENT_TRUMPET1 .text $00, $31, $1C, $41, $0B, $00, $0E, $61, $80, $92, $3B, $00, 'TRUMPET1 ' +>392291 80 92 3b 00 54 52 55 4d 50 45 54 31 20 20 +>39229f 00 31 1c 23 1d 00 0c 61 INSTRUMENT_TRUMPET2 .text $00, $31, $1C, $23, $1D, $00, $0C, $61, $80, $52, $3B, $00, 'TRUMPET2 ' +>3922a7 80 52 3b 00 54 52 55 4d 50 45 54 32 20 20 +>3922b5 00 31 1c 41 01 00 0e 61 INSTRUMENT_TRUMPET3 .text $00, $31, $1C, $41, $01, $00, $0E, $61, $80, $92, $3B, $00, 'TRUMPET3 ' +>3922bd 80 92 3b 00 54 52 55 4d 50 45 54 33 20 20 +>3922cb 00 31 1c 41 0b 00 0c 61 INSTRUMENT_TRUMPET4 .text $00, $31, $1C, $41, $0B, $00, $0C, $61, $80, $92, $3B, $00, 'TRUMPET4 ' +>3922d3 80 92 3b 00 54 52 55 4d 50 45 54 34 20 20 +>3922e1 00 21 19 43 8c 00 0c 21 INSTRUMENT_TUBA1 .text $00, $21, $19, $43, $8C, $00, $0C, $21, $80, $85, $2F, $00, 'TUBA1 ' +>3922e9 80 85 2f 00 54 55 42 41 31 20 20 20 20 20 +>3922f7 00 84 53 f5 33 00 06 a0 INSTRUMENT_VIBRA1 .text $00, $84, $53, $F5, $33, $00, $06, $A0, $80, $FD, $25, $00, 'VIBRA1 ' +>3922ff 80 fd 25 00 56 49 42 52 41 31 20 20 20 20 +>39230d 00 06 73 f6 54 00 00 81 INSTRUMENT_VIBRA2 .text $00, $06, $73, $F6, $54, $00, $00, $81, $03, $F2, $B3, $00, 'VIBRA2 ' +>392315 03 f2 b3 00 56 49 42 52 41 32 20 20 20 20 +>392323 00 93 97 aa 12 02 0e 91 INSTRUMENT_VIBRA3 .text $00, $93, $97, $AA, $12, $02, $0E, $91, $80, $AC, $21, $00, 'VIBRA3 ' +>39232b 80 ac 21 00 56 49 42 52 41 33 20 20 20 20 +>392339 00 31 1c 51 03 00 0e 61 INSTRUMENT_VIOLIN1 .text $00, $31, $1C, $51, $03, $00, $0E, $61, $80, $54, $67, $00, 'VIOLIN1 ' +>392341 80 54 67 00 56 49 4f 4c 49 4e 31 20 20 20 +>39234f 00 e1 88 62 29 00 0c 22 INSTRUMENT_VIOLIN2 .text $00, $E1, $88, $62, $29, $00, $0C, $22, $80, $53, $2C, $00, 'VIOLIN2 ' +>392357 80 53 2c 00 56 49 4f 4c 49 4e 32 20 20 20 +>392365 00 e1 88 64 29 00 06 22 INSTRUMENT_VIOLIN3 .text $00, $E1, $88, $64, $29, $00, $06, $22, $83, $53, $2C, $00, 'VIOLIN3 ' +>39236d 83 53 2c 00 56 49 4f 4c 49 4e 33 20 20 20 +>39237b 00 31 9c f1 f9 00 0e 31 INSTRUMENT_VLNPIZZ1 .text $00, $31, $9C, $F1, $F9, $00, $0E, $31, $80, $F7, $E6, $00, 'VLNPIZZ1 ' +>392383 80 f7 e6 00 56 4c 4e 50 49 5a 5a 31 20 20 +>392391 00 00 02 00 f0 00 0e 14 INSTRUMENT_WAVE .text $00, $00, $02, $00, $F0, $00, $0E, $14, $80, $1B, $A2, $00, 'WAVE ' +>392399 80 1b a2 00 57 41 56 45 20 20 20 20 20 20 +>3923a7 00 11 2d c8 2f 00 0c 31 INSTRUMENT_XYLO1 .text $00, $11, $2D, $C8, $2F, $00, $0C, $31, $00, $F5, $F5, $00, 'XYLO1 ' +>3923af 00 f5 f5 00 58 59 4c 4f 31 20 20 20 20 20 +>3923bd 06 2e 00 ff 0f 00 00 00 INSTRUMENT_XYLO2 .text $06, $2E, $00, $FF, $0F, $00, $00, $00, $00, $00, $00, $00, 'XYLO2 ' +>3923c5 00 00 00 00 58 59 4c 4f 32 20 20 20 20 20 +>3923d3 00 06 00 ff f0 00 0e c4 INSTRUMENT_XYLO3 .text $00, $06, $00, $FF, $F0, $00, $0E, $C4, $00, $F8, $B5, $00, 'XYLO3 ' +>3923db 00 f8 b5 00 58 59 4c 4f 33 20 20 20 20 20 ;****** Return to file: src\OPL2_Library.asm ;****** Processing file: src\OPL2_Midi_Drums.asm ->392397 00 3e 00 9f 0f 0f 00 30 DRUMINS_CLAP2 .text $00, $3E, $00, $9F, $0F, $0F, $00, $30, $00, $87, $FA, $00 ->39239f 00 87 fa 00 ->3923a3 00 01 00 78 97 09 00 02 DRUMINS_SCRATCH1 .text $00, $01, $00, $78, $97, $09, $00, $02, $00, $88, $98, $03 ->3923ab 00 88 98 03 ->3923af 00 01 00 78 97 09 00 02 DRUMINS_SCRATCH2 .text $00, $01, $00, $78, $97, $09, $00, $02, $00, $88, $98, $03 ->3923b7 00 88 98 03 ->3923bb 00 16 08 f1 fb 01 00 11 DRUMINS_RIMSHOT2 .text $00, $16, $08, $F1, $FB, $01, $00, $11, $00, $F9, $69, $00 ->3923c3 00 f9 69 00 ->3923c7 00 00 00 f8 6c 01 00 0e DRUMINS_HIQ .text $00, $00, $00, $F8, $6C, $01, $00, $0E, $80, $E8, $4A, $00 ->3923cf 80 e8 4a 00 ->3923d3 00 25 1b fa f2 01 00 12 DRUMINS_WOODBLOK .text $00, $25, $1B, $FA, $F2, $01, $00, $12, $00, $F6, $9A, $00 ->3923db 00 f6 9a 00 ->3923df 00 06 03 f4 44 00 01 01 DRUMINS_GLOCK .text $00, $06, $03, $F4, $44, $00, $01, $01, $1B, $F2, $34, $00 ->3923e7 1b f2 34 00 ->3923eb 00 00 00 f9 f3 05 00 01 DRUMINS_BASS_DR2 .text $00, $00, $00, $F9, $F3, $05, $00, $01, $00, $F7, $8A, $00 ->3923f3 00 f7 8a 00 ->3923f7 00 01 07 fa fd 05 00 01 DRUMINS_BASS_DR1 .text $00, $01, $07, $FA, $FD, $05, $00, $01, $00, $F6, $47, $00 ->3923ff 00 f6 47 00 ->392403 00 16 08 f1 fb 01 00 11 DRUMINS_RIMSHOT .text $00, $16, $08, $F1, $FB, $01, $00, $11, $00, $F9, $69, $00 ->39240b 00 f9 69 00 ->39240f 00 24 00 ff 00 0f 00 02 DRUMINS_SNARE_AC .text $00, $24, $00, $FF, $00, $0F, $00, $02, $00, $F7, $A9, $00 ->392417 00 f7 a9 00 ->39241b 00 3e 00 9f 0f 0f 00 30 DRUMINS_CLAP .text $00, $3E, $00, $9F, $0F, $0F, $00, $30, $00, $87, $FA, $00 ->392423 00 87 fa 00 ->392427 00 24 00 ff 00 0f 00 02 DRUMINS_SNARE_EL .text $00, $24, $00, $FF, $00, $0F, $00, $02, $00, $F7, $A9, $00 ->39242f 00 f7 a9 00 ->392433 00 06 0a fa 1f 0c 00 11 DRUMINS_LO_TOMS .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 ->39243b 00 f5 f5 00 ->39243f 00 2c 00 f2 fe 07 00 02 DRUMINS_HIHAT_CL .text $00, $2C, $00, $F2, $FE, $07, $00, $02, $06, $B8, $D8, $03 ->392447 06 b8 d8 03 ->39244b 00 06 0a fa 1f 0c 00 11 DRUMINS_HI_TOMS .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 ->392453 00 f5 f5 00 ->392457 00 2c 00 f2 fe 07 00 02 DRUMINS_HIHAT_PL .text $00, $2C, $00, $F2, $FE, $07, $00, $02, $06, $B8, $D8, $03 ->39245f 06 b8 d8 03 ->392463 00 06 0a fa 1f 0c 00 11 DRUMINS_LOW_TOM .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 ->39246b 00 f5 f5 00 ->39246f 00 2e 00 82 f6 05 00 04 DRUMINS_HIHAT_OP .text $00, $2E, $00, $82, $F6, $05, $00, $04, $10, $74, $F8, $03 ->392477 10 74 f8 03 ->39247b 00 06 0a fa 1f 0c 00 11 DRUMINS_LTOM_MID .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 ->392483 00 f5 f5 00 ->392487 00 06 0a fa 1f 0c 00 11 DRUMINS_HTOM_MID .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 ->39248f 00 f5 f5 00 ->392493 00 2c 00 9f 00 0f 02 0e DRUMINS_CRASH .text $00, $2C, $00, $9F, $00, $0F, $02, $0E, $05, $C5, $D4, $03 ->39249b 05 c5 d4 03 ->39249f 00 06 0a fa 1f 0c 00 11 DRUMINS_TOM_HIGH .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 ->3924a7 00 f5 f5 00 ->3924ab 00 29 10 94 00 0f 00 04 DRUMINS_RIDE_CY .text $00, $29, $10, $94, $00, $0F, $00, $04, $04, $F9, $44, $03 ->3924b3 04 f9 44 03 ->3924b7 00 2c 00 9f 00 0f 02 0e DRUMINS_TAMBOUR .text $00, $2C, $00, $9F, $00, $0F, $02, $0E, $05, $C5, $D4, $03 ->3924bf 05 c5 d4 03 ->3924c3 00 29 10 94 00 0f 00 04 DRUMINS_CYMBAL .text $00, $29, $10, $94, $00, $0F, $00, $04, $04, $F9, $44, $03 ->3924cb 04 f9 44 03 ->3924cf 00 2e 09 f5 f1 01 00 06 DRUMINS_TAMBOU2 .text $00, $2E, $09, $F5, $F1, $01, $00, $06, $03, $87, $F7, $03 ->3924d7 03 87 f7 03 ->3924db 00 2c 00 9f 00 0f 02 0e DRUMINS_SPLASH .text $00, $2C, $00, $9F, $00, $0F, $02, $0E, $05, $C5, $D4, $03 ->3924e3 05 c5 d4 03 ->3924e7 00 37 14 f7 a1 09 01 03 DRUMINS_COWBELL .text $00, $37, $14, $F7, $A1, $09, $01, $03, $00, $F6, $28, $00 ->3924ef 00 f6 28 00 ->3924f3 00 2c 00 9f 00 0f 02 0e DRUMINS_CRASH2 .text $00, $2C, $00, $9F, $00, $0F, $02, $0E, $05, $C5, $D4, $03 ->3924fb 05 c5 d4 03 ->3924ff 00 80 00 ff 00 0d 01 00 DRUMINS_VIBRASLA .text $00, $80, $00, $FF, $00, $0D, $01, $00, $00, $F5, $F7, $01 ->392507 00 f5 f7 01 ->39250b 00 29 10 94 00 0f 00 04 DRUMINS_RIDE2 .text $00, $29, $10, $94, $00, $0F, $00, $04, $04, $F9, $44, $03 ->392513 04 f9 44 03 ->392517 00 25 c4 fa fa 01 00 03 DRUMINS_HI_BONGO .text $00, $25, $C4, $FA, $FA, $01, $00, $03, $00, $99, $F9, $00 ->39251f 00 99 f9 00 ->392523 00 21 03 fb fa 01 01 02 DRUMINS_LO_BONGO .text $00, $21, $03, $FB, $FA, $01, $01, $02, $00, $A8, $F7, $00 ->39252b 00 a8 f7 00 ->39252f 00 25 c4 fa fa 01 00 03 DRUMINS_MUTECONG .text $00, $25, $C4, $FA, $FA, $01, $00, $03, $00, $99, $F9, $00 ->392537 00 99 f9 00 ->39253b 00 24 18 f9 fa 0f 02 03 DRUMINS_OPENCONG .text $00, $24, $18, $F9, $FA, $0F, $02, $03, $00, $A6, $F6, $00 ->392543 00 a6 f6 00 ->392547 00 24 18 f9 fa 0f 02 03 DRUMINS_LOWCONGA .text $00, $24, $18, $F9, $FA, $0F, $02, $03, $00, $A6, $F6, $00 ->39254f 00 a6 f6 00 ->392553 00 05 14 f5 f5 07 02 03 DRUMINS_HI_TIMBA .text $00, $05, $14, $F5, $F5, $07, $02, $03, $00, $F6, $36, $02 ->39255b 00 f6 36 02 ->39255f 00 05 14 f5 f5 07 02 03 DRUMINS_LO_TIMBA .text $00, $05, $14, $F5, $F5, $07, $02, $03, $00, $F6, $36, $02 ->392567 00 f6 36 02 ->39256b 00 1c 0c f9 31 0f 01 15 DRUMINS_HI_AGOGO .text $00, $1C, $0C, $F9, $31, $0F, $01, $15, $00, $96, $E8, $01 ->392573 00 96 e8 01 ->392577 00 1c 0c f9 31 0f 01 15 DRUMINS_LO_AGOGO .text $00, $1C, $0C, $F9, $31, $0F, $01, $15, $00, $96, $E8, $01 ->39257f 00 96 e8 01 ->392583 00 0e 00 ff 01 0f 00 0e DRUMINS_CABASA .text $00, $0E, $00, $FF, $01, $0F, $00, $0E, $02, $79, $77, $03 ->39258b 02 79 77 03 ->39258f 00 0e 00 ff 01 0f 00 0e DRUMINS_MARACAS .text $00, $0E, $00, $FF, $01, $0F, $00, $0E, $02, $79, $77, $03 ->392597 02 79 77 03 ->39259b 00 20 15 af 07 05 01 0e DRUMINS_S_WHISTL .text $00, $20, $15, $AF, $07, $05, $01, $0E, $00, $A5, $2B, $02 ->3925a3 00 a5 2b 02 ->3925a7 00 20 18 bf 07 01 01 0e DRUMINS_L_WHISTL .text $00, $20, $18, $BF, $07, $01, $01, $0E, $00, $93, $3B, $02 ->3925af 00 93 3b 02 ->3925b3 00 20 00 f0 f7 0b 00 08 DRUMINS_S_GUIRO .text $00, $20, $00, $F0, $F7, $0B, $00, $08, $01, $89, $3B, $03 ->3925bb 01 89 3b 03 ->3925bf 00 20 00 f3 fa 09 00 08 DRUMINS_L_GUIRO .text $00, $20, $00, $F3, $FA, $09, $00, $08, $0A, $53, $2B, $02 ->3925c7 0a 53 2b 02 ->3925cb 00 15 21 f8 9a 09 01 13 DRUMINS_CLAVES .text $00, $15, $21, $F8, $9A, $09, $01, $13, $00, $F6, $89, $00 ->3925d3 00 f6 89 00 ->3925d7 00 25 1b fa f2 01 00 12 DRUMINS_HI_WDBLK .text $00, $25, $1B, $FA, $F2, $01, $00, $12, $00, $F6, $9A, $00 ->3925df 00 f6 9a 00 ->3925e3 00 25 1b fa f2 01 00 12 DRUMINS_LO_WDBLK .text $00, $25, $1B, $FA, $F2, $01, $00, $12, $00, $F6, $9A, $00 ->3925eb 00 f6 9a 00 ->3925ef 00 20 01 5f 07 01 00 08 DRUMINS_MU_CUICA .text $00, $20, $01, $5F, $07, $01, $00, $08, $00, $87, $4B, $01 ->3925f7 00 87 4b 01 ->3925fb 00 25 12 57 f7 01 01 03 DRUMINS_OP_CUICA .text $00, $25, $12, $57, $F7, $01, $01, $03, $00, $78, $67, $01 ->392603 00 78 67 01 ->392607 00 22 2f f1 f0 07 00 27 DRUMINS_MU_TRNGL .text $00, $22, $2F, $F1, $F0, $07, $00, $27, $02, $F8, $FC, $00 ->39260f 02 f8 fc 00 ->392613 00 26 44 f1 f0 07 00 27 DRUMINS_OP_TRNGL .text $00, $26, $44, $F1, $F0, $07, $00, $27, $40, $F5, $F5, $00 ->39261b 40 f5 f5 00 ->39261f 00 0e 00 ff 01 0f 00 0e DRUMINS_SHAKER .text $00, $0E, $00, $FF, $01, $0F, $00, $0E, $02, $79, $77, $03 ->392627 02 79 77 03 ->39262b 00 26 44 f1 f0 07 00 27 DRUMINS_TRIANGL1 .text $00, $26, $44, $F1, $F0, $07, $00, $27, $40, $F5, $F5, $00 ->392633 40 f5 f5 00 ->392637 00 26 44 f1 f0 07 00 27 DRUMINS_TRIANGL2 .text $00, $26, $44, $F1, $F0, $07, $00, $27, $40, $F5, $F5, $00 ->39263f 40 f5 f5 00 ->392643 00 16 08 f1 fb 01 00 11 DRUMINS_RIMSHOT3 .text $00, $16, $08, $F1, $FB, $01, $00, $11, $00, $F9, $69, $00 ->39264b 00 f9 69 00 ->39264f 00 16 08 f1 fb 01 00 11 DRUMINS_RIMSHOT4 .text $00, $16, $08, $F1, $FB, $01, $00, $11, $00, $F9, $69, $00 ->392657 00 f9 69 00 ->39265b 00 02 1d f5 93 01 00 00 DRUMINS_TAIKO .text $00, $02, $1D, $F5, $93, $01, $00, $00, $00, $C6, $45, $00 ->392663 00 c6 45 00 +>3923e9 00 3e 00 9f 0f 0f 00 30 DRUMINS_CLAP2 .text $00, $3E, $00, $9F, $0F, $0F, $00, $30, $00, $87, $FA, $00 +>3923f1 00 87 fa 00 +>3923f5 00 01 00 78 97 09 00 02 DRUMINS_SCRATCH1 .text $00, $01, $00, $78, $97, $09, $00, $02, $00, $88, $98, $03 +>3923fd 00 88 98 03 +>392401 00 01 00 78 97 09 00 02 DRUMINS_SCRATCH2 .text $00, $01, $00, $78, $97, $09, $00, $02, $00, $88, $98, $03 +>392409 00 88 98 03 +>39240d 00 16 08 f1 fb 01 00 11 DRUMINS_RIMSHOT2 .text $00, $16, $08, $F1, $FB, $01, $00, $11, $00, $F9, $69, $00 +>392415 00 f9 69 00 +>392419 00 00 00 f8 6c 01 00 0e DRUMINS_HIQ .text $00, $00, $00, $F8, $6C, $01, $00, $0E, $80, $E8, $4A, $00 +>392421 80 e8 4a 00 +>392425 00 25 1b fa f2 01 00 12 DRUMINS_WOODBLOK .text $00, $25, $1B, $FA, $F2, $01, $00, $12, $00, $F6, $9A, $00 +>39242d 00 f6 9a 00 +>392431 00 06 03 f4 44 00 01 01 DRUMINS_GLOCK .text $00, $06, $03, $F4, $44, $00, $01, $01, $1B, $F2, $34, $00 +>392439 1b f2 34 00 +>39243d 00 00 00 f9 f3 05 00 01 DRUMINS_BASS_DR2 .text $00, $00, $00, $F9, $F3, $05, $00, $01, $00, $F7, $8A, $00 +>392445 00 f7 8a 00 +>392449 00 01 07 fa fd 05 00 01 DRUMINS_BASS_DR1 .text $00, $01, $07, $FA, $FD, $05, $00, $01, $00, $F6, $47, $00 +>392451 00 f6 47 00 +>392455 00 16 08 f1 fb 01 00 11 DRUMINS_RIMSHOT .text $00, $16, $08, $F1, $FB, $01, $00, $11, $00, $F9, $69, $00 +>39245d 00 f9 69 00 +>392461 00 24 00 ff 00 0f 00 02 DRUMINS_SNARE_AC .text $00, $24, $00, $FF, $00, $0F, $00, $02, $00, $F7, $A9, $00 +>392469 00 f7 a9 00 +>39246d 00 3e 00 9f 0f 0f 00 30 DRUMINS_CLAP .text $00, $3E, $00, $9F, $0F, $0F, $00, $30, $00, $87, $FA, $00 +>392475 00 87 fa 00 +>392479 00 24 00 ff 00 0f 00 02 DRUMINS_SNARE_EL .text $00, $24, $00, $FF, $00, $0F, $00, $02, $00, $F7, $A9, $00 +>392481 00 f7 a9 00 +>392485 00 06 0a fa 1f 0c 00 11 DRUMINS_LO_TOMS .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 +>39248d 00 f5 f5 00 +>392491 00 2c 00 f2 fe 07 00 02 DRUMINS_HIHAT_CL .text $00, $2C, $00, $F2, $FE, $07, $00, $02, $06, $B8, $D8, $03 +>392499 06 b8 d8 03 +>39249d 00 06 0a fa 1f 0c 00 11 DRUMINS_HI_TOMS .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 +>3924a5 00 f5 f5 00 +>3924a9 00 2c 00 f2 fe 07 00 02 DRUMINS_HIHAT_PL .text $00, $2C, $00, $F2, $FE, $07, $00, $02, $06, $B8, $D8, $03 +>3924b1 06 b8 d8 03 +>3924b5 00 06 0a fa 1f 0c 00 11 DRUMINS_LOW_TOM .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 +>3924bd 00 f5 f5 00 +>3924c1 00 2e 00 82 f6 05 00 04 DRUMINS_HIHAT_OP .text $00, $2E, $00, $82, $F6, $05, $00, $04, $10, $74, $F8, $03 +>3924c9 10 74 f8 03 +>3924cd 00 06 0a fa 1f 0c 00 11 DRUMINS_LTOM_MID .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 +>3924d5 00 f5 f5 00 +>3924d9 00 06 0a fa 1f 0c 00 11 DRUMINS_HTOM_MID .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 +>3924e1 00 f5 f5 00 +>3924e5 00 2c 00 9f 00 0f 02 0e DRUMINS_CRASH .text $00, $2C, $00, $9F, $00, $0F, $02, $0E, $05, $C5, $D4, $03 +>3924ed 05 c5 d4 03 +>3924f1 00 06 0a fa 1f 0c 00 11 DRUMINS_TOM_HIGH .text $00, $06, $0A, $FA, $1F, $0C, $00, $11, $00, $F5, $F5, $00 +>3924f9 00 f5 f5 00 +>3924fd 00 29 10 94 00 0f 00 04 DRUMINS_RIDE_CY .text $00, $29, $10, $94, $00, $0F, $00, $04, $04, $F9, $44, $03 +>392505 04 f9 44 03 +>392509 00 2c 00 9f 00 0f 02 0e DRUMINS_TAMBOUR .text $00, $2C, $00, $9F, $00, $0F, $02, $0E, $05, $C5, $D4, $03 +>392511 05 c5 d4 03 +>392515 00 29 10 94 00 0f 00 04 DRUMINS_CYMBAL .text $00, $29, $10, $94, $00, $0F, $00, $04, $04, $F9, $44, $03 +>39251d 04 f9 44 03 +>392521 00 2e 09 f5 f1 01 00 06 DRUMINS_TAMBOU2 .text $00, $2E, $09, $F5, $F1, $01, $00, $06, $03, $87, $F7, $03 +>392529 03 87 f7 03 +>39252d 00 2c 00 9f 00 0f 02 0e DRUMINS_SPLASH .text $00, $2C, $00, $9F, $00, $0F, $02, $0E, $05, $C5, $D4, $03 +>392535 05 c5 d4 03 +>392539 00 37 14 f7 a1 09 01 03 DRUMINS_COWBELL .text $00, $37, $14, $F7, $A1, $09, $01, $03, $00, $F6, $28, $00 +>392541 00 f6 28 00 +>392545 00 2c 00 9f 00 0f 02 0e DRUMINS_CRASH2 .text $00, $2C, $00, $9F, $00, $0F, $02, $0E, $05, $C5, $D4, $03 +>39254d 05 c5 d4 03 +>392551 00 80 00 ff 00 0d 01 00 DRUMINS_VIBRASLA .text $00, $80, $00, $FF, $00, $0D, $01, $00, $00, $F5, $F7, $01 +>392559 00 f5 f7 01 +>39255d 00 29 10 94 00 0f 00 04 DRUMINS_RIDE2 .text $00, $29, $10, $94, $00, $0F, $00, $04, $04, $F9, $44, $03 +>392565 04 f9 44 03 +>392569 00 25 c4 fa fa 01 00 03 DRUMINS_HI_BONGO .text $00, $25, $C4, $FA, $FA, $01, $00, $03, $00, $99, $F9, $00 +>392571 00 99 f9 00 +>392575 00 21 03 fb fa 01 01 02 DRUMINS_LO_BONGO .text $00, $21, $03, $FB, $FA, $01, $01, $02, $00, $A8, $F7, $00 +>39257d 00 a8 f7 00 +>392581 00 25 c4 fa fa 01 00 03 DRUMINS_MUTECONG .text $00, $25, $C4, $FA, $FA, $01, $00, $03, $00, $99, $F9, $00 +>392589 00 99 f9 00 +>39258d 00 24 18 f9 fa 0f 02 03 DRUMINS_OPENCONG .text $00, $24, $18, $F9, $FA, $0F, $02, $03, $00, $A6, $F6, $00 +>392595 00 a6 f6 00 +>392599 00 24 18 f9 fa 0f 02 03 DRUMINS_LOWCONGA .text $00, $24, $18, $F9, $FA, $0F, $02, $03, $00, $A6, $F6, $00 +>3925a1 00 a6 f6 00 +>3925a5 00 05 14 f5 f5 07 02 03 DRUMINS_HI_TIMBA .text $00, $05, $14, $F5, $F5, $07, $02, $03, $00, $F6, $36, $02 +>3925ad 00 f6 36 02 +>3925b1 00 05 14 f5 f5 07 02 03 DRUMINS_LO_TIMBA .text $00, $05, $14, $F5, $F5, $07, $02, $03, $00, $F6, $36, $02 +>3925b9 00 f6 36 02 +>3925bd 00 1c 0c f9 31 0f 01 15 DRUMINS_HI_AGOGO .text $00, $1C, $0C, $F9, $31, $0F, $01, $15, $00, $96, $E8, $01 +>3925c5 00 96 e8 01 +>3925c9 00 1c 0c f9 31 0f 01 15 DRUMINS_LO_AGOGO .text $00, $1C, $0C, $F9, $31, $0F, $01, $15, $00, $96, $E8, $01 +>3925d1 00 96 e8 01 +>3925d5 00 0e 00 ff 01 0f 00 0e DRUMINS_CABASA .text $00, $0E, $00, $FF, $01, $0F, $00, $0E, $02, $79, $77, $03 +>3925dd 02 79 77 03 +>3925e1 00 0e 00 ff 01 0f 00 0e DRUMINS_MARACAS .text $00, $0E, $00, $FF, $01, $0F, $00, $0E, $02, $79, $77, $03 +>3925e9 02 79 77 03 +>3925ed 00 20 15 af 07 05 01 0e DRUMINS_S_WHISTL .text $00, $20, $15, $AF, $07, $05, $01, $0E, $00, $A5, $2B, $02 +>3925f5 00 a5 2b 02 +>3925f9 00 20 18 bf 07 01 01 0e DRUMINS_L_WHISTL .text $00, $20, $18, $BF, $07, $01, $01, $0E, $00, $93, $3B, $02 +>392601 00 93 3b 02 +>392605 00 20 00 f0 f7 0b 00 08 DRUMINS_S_GUIRO .text $00, $20, $00, $F0, $F7, $0B, $00, $08, $01, $89, $3B, $03 +>39260d 01 89 3b 03 +>392611 00 20 00 f3 fa 09 00 08 DRUMINS_L_GUIRO .text $00, $20, $00, $F3, $FA, $09, $00, $08, $0A, $53, $2B, $02 +>392619 0a 53 2b 02 +>39261d 00 15 21 f8 9a 09 01 13 DRUMINS_CLAVES .text $00, $15, $21, $F8, $9A, $09, $01, $13, $00, $F6, $89, $00 +>392625 00 f6 89 00 +>392629 00 25 1b fa f2 01 00 12 DRUMINS_HI_WDBLK .text $00, $25, $1B, $FA, $F2, $01, $00, $12, $00, $F6, $9A, $00 +>392631 00 f6 9a 00 +>392635 00 25 1b fa f2 01 00 12 DRUMINS_LO_WDBLK .text $00, $25, $1B, $FA, $F2, $01, $00, $12, $00, $F6, $9A, $00 +>39263d 00 f6 9a 00 +>392641 00 20 01 5f 07 01 00 08 DRUMINS_MU_CUICA .text $00, $20, $01, $5F, $07, $01, $00, $08, $00, $87, $4B, $01 +>392649 00 87 4b 01 +>39264d 00 25 12 57 f7 01 01 03 DRUMINS_OP_CUICA .text $00, $25, $12, $57, $F7, $01, $01, $03, $00, $78, $67, $01 +>392655 00 78 67 01 +>392659 00 22 2f f1 f0 07 00 27 DRUMINS_MU_TRNGL .text $00, $22, $2F, $F1, $F0, $07, $00, $27, $02, $F8, $FC, $00 +>392661 02 f8 fc 00 +>392665 00 26 44 f1 f0 07 00 27 DRUMINS_OP_TRNGL .text $00, $26, $44, $F1, $F0, $07, $00, $27, $40, $F5, $F5, $00 +>39266d 40 f5 f5 00 +>392671 00 0e 00 ff 01 0f 00 0e DRUMINS_SHAKER .text $00, $0E, $00, $FF, $01, $0F, $00, $0E, $02, $79, $77, $03 +>392679 02 79 77 03 +>39267d 00 26 44 f1 f0 07 00 27 DRUMINS_TRIANGL1 .text $00, $26, $44, $F1, $F0, $07, $00, $27, $40, $F5, $F5, $00 +>392685 40 f5 f5 00 +>392689 00 26 44 f1 f0 07 00 27 DRUMINS_TRIANGL2 .text $00, $26, $44, $F1, $F0, $07, $00, $27, $40, $F5, $F5, $00 +>392691 40 f5 f5 00 +>392695 00 16 08 f1 fb 01 00 11 DRUMINS_RIMSHOT3 .text $00, $16, $08, $F1, $FB, $01, $00, $11, $00, $F9, $69, $00 +>39269d 00 f9 69 00 +>3926a1 00 16 08 f1 fb 01 00 11 DRUMINS_RIMSHOT4 .text $00, $16, $08, $F1, $FB, $01, $00, $11, $00, $F9, $69, $00 +>3926a9 00 f9 69 00 +>3926ad 00 02 1d f5 93 01 00 00 DRUMINS_TAIKO .text $00, $02, $1D, $F5, $93, $01, $00, $00, $00, $C6, $45, $00 +>3926b5 00 c6 45 00 =27 DRUM_NOTE_BASE = 27; =60 NUM_MIDI_DRUMS = 60; ->392667 97 23 39 00 a3 23 39 00 midiDrums .dword DRUMINS_CLAP2, DRUMINS_SCRATCH1, DRUMINS_SCRATCH2, DRUMINS_RIMSHOT2 ->39266f af 23 39 00 bb 23 39 00 ->392677 c7 23 39 00 d3 23 39 00 .dword DRUMINS_HIQ, DRUMINS_WOODBLOK, DRUMINS_GLOCK, DRUMINS_BASS_DR2 ->39267f df 23 39 00 eb 23 39 00 ->392687 f7 23 39 00 03 24 39 00 .dword DRUMINS_BASS_DR1, DRUMINS_RIMSHOT, DRUMINS_SNARE_AC, DRUMINS_CLAP ->39268f 0f 24 39 00 1b 24 39 00 ->392697 27 24 39 00 33 24 39 00 .dword DRUMINS_SNARE_EL, DRUMINS_LO_TOMS, DRUMINS_HIHAT_CL, DRUMINS_HI_TOMS ->39269f 3f 24 39 00 4b 24 39 00 ->3926a7 57 24 39 00 63 24 39 00 .dword DRUMINS_HIHAT_PL, DRUMINS_LOW_TOM, DRUMINS_HIHAT_OP, DRUMINS_LTOM_MID ->3926af 6f 24 39 00 7b 24 39 00 ->3926b7 87 24 39 00 93 24 39 00 .dword DRUMINS_HTOM_MID, DRUMINS_CRASH, DRUMINS_TOM_HIGH, DRUMINS_RIDE_CY ->3926bf 9f 24 39 00 ab 24 39 00 ->3926c7 b7 24 39 00 c3 24 39 00 .dword DRUMINS_TAMBOUR, DRUMINS_CYMBAL, DRUMINS_TAMBOU2, DRUMINS_SPLASH ->3926cf cf 24 39 00 db 24 39 00 ->3926d7 e7 24 39 00 f3 24 39 00 .dword DRUMINS_COWBELL, DRUMINS_CRASH2, DRUMINS_VIBRASLA, DRUMINS_RIDE2 ->3926df ff 24 39 00 0b 25 39 00 ->3926e7 17 25 39 00 23 25 39 00 .dword DRUMINS_HI_BONGO, DRUMINS_LO_BONGO, DRUMINS_MUTECONG, DRUMINS_OPENCONG ->3926ef 2f 25 39 00 3b 25 39 00 ->3926f7 47 25 39 00 53 25 39 00 .dword DRUMINS_LOWCONGA, DRUMINS_HI_TIMBA, DRUMINS_LO_TIMBA, DRUMINS_HI_AGOGO ->3926ff 5f 25 39 00 6b 25 39 00 ->392707 77 25 39 00 83 25 39 00 .dword DRUMINS_LO_AGOGO, DRUMINS_CABASA, DRUMINS_MARACAS, DRUMINS_S_WHISTL ->39270f 8f 25 39 00 9b 25 39 00 ->392717 a7 25 39 00 b3 25 39 00 .dword DRUMINS_L_WHISTL, DRUMINS_S_GUIRO, DRUMINS_L_GUIRO, DRUMINS_CLAVES ->39271f bf 25 39 00 cb 25 39 00 ->392727 d7 25 39 00 e3 25 39 00 .dword DRUMINS_HI_WDBLK, DRUMINS_LO_WDBLK, DRUMINS_MU_CUICA, DRUMINS_OP_CUICA ->39272f ef 25 39 00 fb 25 39 00 ->392737 07 26 39 00 13 26 39 00 .dword DRUMINS_MU_TRNGL, DRUMINS_OP_TRNGL, DRUMINS_SHAKER, DRUMINS_TRIANGL1 ->39273f 1f 26 39 00 2b 26 39 00 ->392747 37 26 39 00 43 26 39 00 .dword DRUMINS_TRIANGL2, DRUMINS_RIMSHOT3, DRUMINS_RIMSHOT4, DRUMINS_TAIKO ->39274f 4f 26 39 00 5b 26 39 00 +>3926b9 e9 23 39 00 f5 23 39 00 midiDrums .dword DRUMINS_CLAP2, DRUMINS_SCRATCH1, DRUMINS_SCRATCH2, DRUMINS_RIMSHOT2 +>3926c1 01 24 39 00 0d 24 39 00 +>3926c9 19 24 39 00 25 24 39 00 .dword DRUMINS_HIQ, DRUMINS_WOODBLOK, DRUMINS_GLOCK, DRUMINS_BASS_DR2 +>3926d1 31 24 39 00 3d 24 39 00 +>3926d9 49 24 39 00 55 24 39 00 .dword DRUMINS_BASS_DR1, DRUMINS_RIMSHOT, DRUMINS_SNARE_AC, DRUMINS_CLAP +>3926e1 61 24 39 00 6d 24 39 00 +>3926e9 79 24 39 00 85 24 39 00 .dword DRUMINS_SNARE_EL, DRUMINS_LO_TOMS, DRUMINS_HIHAT_CL, DRUMINS_HI_TOMS +>3926f1 91 24 39 00 9d 24 39 00 +>3926f9 a9 24 39 00 b5 24 39 00 .dword DRUMINS_HIHAT_PL, DRUMINS_LOW_TOM, DRUMINS_HIHAT_OP, DRUMINS_LTOM_MID +>392701 c1 24 39 00 cd 24 39 00 +>392709 d9 24 39 00 e5 24 39 00 .dword DRUMINS_HTOM_MID, DRUMINS_CRASH, DRUMINS_TOM_HIGH, DRUMINS_RIDE_CY +>392711 f1 24 39 00 fd 24 39 00 +>392719 09 25 39 00 15 25 39 00 .dword DRUMINS_TAMBOUR, DRUMINS_CYMBAL, DRUMINS_TAMBOU2, DRUMINS_SPLASH +>392721 21 25 39 00 2d 25 39 00 +>392729 39 25 39 00 45 25 39 00 .dword DRUMINS_COWBELL, DRUMINS_CRASH2, DRUMINS_VIBRASLA, DRUMINS_RIDE2 +>392731 51 25 39 00 5d 25 39 00 +>392739 69 25 39 00 75 25 39 00 .dword DRUMINS_HI_BONGO, DRUMINS_LO_BONGO, DRUMINS_MUTECONG, DRUMINS_OPENCONG +>392741 81 25 39 00 8d 25 39 00 +>392749 99 25 39 00 a5 25 39 00 .dword DRUMINS_LOWCONGA, DRUMINS_HI_TIMBA, DRUMINS_LO_TIMBA, DRUMINS_HI_AGOGO +>392751 b1 25 39 00 bd 25 39 00 +>392759 c9 25 39 00 d5 25 39 00 .dword DRUMINS_LO_AGOGO, DRUMINS_CABASA, DRUMINS_MARACAS, DRUMINS_S_WHISTL +>392761 e1 25 39 00 ed 25 39 00 +>392769 f9 25 39 00 05 26 39 00 .dword DRUMINS_L_WHISTL, DRUMINS_S_GUIRO, DRUMINS_L_GUIRO, DRUMINS_CLAVES +>392771 11 26 39 00 1d 26 39 00 +>392779 29 26 39 00 35 26 39 00 .dword DRUMINS_HI_WDBLK, DRUMINS_LO_WDBLK, DRUMINS_MU_CUICA, DRUMINS_OP_CUICA +>392781 41 26 39 00 4d 26 39 00 +>392789 59 26 39 00 65 26 39 00 .dword DRUMINS_MU_TRNGL, DRUMINS_OP_TRNGL, DRUMINS_SHAKER, DRUMINS_TRIANGL1 +>392791 71 26 39 00 7d 26 39 00 +>392799 89 26 39 00 95 26 39 00 .dword DRUMINS_TRIANGL2, DRUMINS_RIMSHOT3, DRUMINS_RIMSHOT4, DRUMINS_TAIKO +>3927a1 a1 26 39 00 ad 26 39 00 ;****** Return to file: src\OPL2_Library.asm ;****** Processing file: src\OPL2_Midi_Instruments.asm ->392757 00 33 5a b2 50 01 00 31 MIDI_INSTRUMENT_PIANO1 .text $00, $33, $5A, $B2, $50, $01, $00, $31, $00, $B1, $F5, $01 ->39275f 00 b1 f5 01 ->392763 00 31 49 f2 53 07 01 11 MIDI_INSTRUMENT_PIANO2 .text $00, $31, $49, $F2, $53, $07, $01, $11, $03, $F1, $F5, $00 ->39276b 03 f1 f5 00 ->39276f 00 31 95 d1 83 0d 01 32 MIDI_INSTRUMENT_PIANO3 .text $00, $31, $95, $D1, $83, $0D, $01, $32, $03, $C1, $F5, $00 ->392777 03 c1 f5 00 ->39277b 00 34 9b f3 63 01 01 11 MIDI_INSTRUMENT_HONKTONK .text $00, $34, $9B, $F3, $63, $01, $01, $11, $00, $92, $F5, $01 ->392783 00 92 f5 01 ->392787 00 27 28 f8 b7 01 02 91 MIDI_INSTRUMENT_EP1 .text $00, $27, $28, $F8, $B7, $01, $02, $91, $00, $F1, $F9, $00 ->39278f 00 f1 f9 00 ->392793 00 1a 2d f3 ee 01 01 11 MIDI_INSTRUMENT_EP2 .text $00, $1A, $2D, $F3, $EE, $01, $01, $11, $00, $F1, $F5, $00 ->39279b 00 f1 f5 00 ->39279f 00 35 95 f2 58 0f 01 32 MIDI_INSTRUMENT_HARPSIC .text $00, $35, $95, $F2, $58, $0F, $01, $32, $02, $81, $F6, $01 ->3927a7 02 81 f6 01 ->3927ab 00 31 85 c9 40 01 00 35 MIDI_INSTRUMENT_CLAVIC .text $00, $31, $85, $C9, $40, $01, $00, $35, $00, $C2, $B9, $01 ->3927b3 00 c2 b9 01 ->3927b7 00 09 15 c7 64 08 00 01 MIDI_INSTRUMENT_CELESTA .text $00, $09, $15, $C7, $64, $08, $00, $01, $05, $B2, $35, $00 ->3927bf 05 b2 35 00 ->3927c3 00 06 03 f4 44 00 01 01 MIDI_INSTRUMENT_GLOCK .text $00, $06, $03, $F4, $44, $00, $01, $01, $1B, $F2, $34, $00 ->3927cb 1b f2 34 00 ->3927cf 00 04 06 a9 24 0a 01 01 MIDI_INSTRUMENT_MUSICBOX .text $00, $04, $06, $A9, $24, $0A, $01, $01, $01, $F5, $74, $00 ->3927d7 01 f5 74 00 ->3927db 00 d4 00 f6 33 00 00 f1 MIDI_INSTRUMENT_VIBES .text $00, $D4, $00, $F6, $33, $00, $00, $F1, $00, $61, $E3, $00 ->3927e3 00 61 e3 00 ->3927e7 00 d4 00 f7 e8 04 00 d1 MIDI_INSTRUMENT_MARIMBA .text $00, $D4, $00, $F7, $E8, $04, $00, $D1, $00, $A4, $64, $00 ->3927ef 00 a4 64 00 ->3927f3 00 36 16 f7 f7 01 00 31 MIDI_INSTRUMENT_XYLO .text $00, $36, $16, $F7, $F7, $01, $00, $31, $07, $B5, $F5, $00 ->3927fb 07 b5 f5 00 ->3927ff 00 03 1b a2 43 0b 00 00 MIDI_INSTRUMENT_TUBEBELL .text $00, $03, $1B, $A2, $43, $0B, $00, $00, $00, $F3, $74, $00 ->392807 00 f3 74 00 ->39280b 00 c3 8e f8 35 01 01 11 MIDI_INSTRUMENT_SANTUR .text $00, $C3, $8E, $F8, $35, $01, $01, $11, $00, $C3, $94, $01 ->392813 00 c3 94 01 ->392817 00 e2 07 f4 1b 06 01 e0 MIDI_INSTRUMENT_ORGAN1 .text $00, $E2, $07, $F4, $1B, $06, $01, $E0, $00, $F4, $0D, $01 ->39281f 00 f4 0d 01 ->392823 00 f2 00 f6 2c 04 00 f0 MIDI_INSTRUMENT_ORGAN2 .text $00, $F2, $00, $F6, $2C, $04, $00, $F0, $00, $F5, $0B, $01 ->39282b 00 f5 0b 01 ->39282f 00 f1 06 b6 15 0a 00 f0 MIDI_INSTRUMENT_ORGAN3 .text $00, $F1, $06, $B6, $15, $0A, $00, $F0, $00, $BF, $07, $00 ->392837 00 bf 07 00 ->39283b 00 22 03 79 16 08 01 e0 MIDI_INSTRUMENT_PIPEORG .text $00, $22, $03, $79, $16, $08, $01, $E0, $00, $6D, $08, $01 ->392843 00 6d 08 01 ->392847 00 31 27 63 06 01 00 72 MIDI_INSTRUMENT_REEDORG .text $00, $31, $27, $63, $06, $01, $00, $72, $00, $51, $17, $01 ->39284f 00 51 17 01 ->392853 00 b4 1d 53 16 0f 01 71 MIDI_INSTRUMENT_ACORDIAN .text $00, $B4, $1D, $53, $16, $0F, $01, $71, $00, $51, $17, $01 ->39285b 00 51 17 01 ->39285f 00 25 29 97 15 01 00 32 MIDI_INSTRUMENT_HARMONIC .text $00, $25, $29, $97, $15, $01, $00, $32, $00, $53, $08, $01 ->392867 00 53 08 01 ->39286b 00 24 9e 67 15 0f 00 31 MIDI_INSTRUMENT_BANDNEON .text $00, $24, $9E, $67, $15, $0F, $00, $31, $00, $53, $06, $01 ->392873 00 53 06 01 ->392877 00 13 27 a3 b4 05 01 31 MIDI_INSTRUMENT_NYLONGT .text $00, $13, $27, $A3, $B4, $05, $01, $31, $00, $D2, $F8, $00 ->39287f 00 d2 f8 00 ->392883 00 17 a3 f3 32 01 00 11 MIDI_INSTRUMENT_STEELGT .text $00, $17, $A3, $F3, $32, $01, $00, $11, $00, $E2, $C7, $01 ->39288b 00 e2 c7 01 ->39288f 00 33 24 d2 c1 0f 01 31 MIDI_INSTRUMENT_JAZZGT .text $00, $33, $24, $D2, $C1, $0F, $01, $31, $00, $F1, $9C, $00 ->392897 00 f1 9c 00 ->39289b 00 31 05 f8 44 01 00 32 MIDI_INSTRUMENT_CLEANGT .text $00, $31, $05, $F8, $44, $01, $00, $32, $02, $F2, $C9, $01 ->3928a3 02 f2 c9 01 ->3928a7 00 21 09 9c 7b 07 00 02 MIDI_INSTRUMENT_MUTEGT .text $00, $21, $09, $9C, $7B, $07, $00, $02, $03, $95, $FB, $00 ->3928af 03 95 fb 00 ->3928b3 00 21 84 81 98 07 01 21 MIDI_INSTRUMENT_OVERDGT .text $00, $21, $84, $81, $98, $07, $01, $21, $04, $A1, $59, $00 ->3928bb 04 a1 59 00 ->3928bf 00 b1 0c 78 43 01 00 22 MIDI_INSTRUMENT_DISTGT .text $00, $B1, $0C, $78, $43, $01, $00, $22, $03, $91, $FC, $03 ->3928c7 03 91 fc 03 ->3928cb 00 00 0a 82 8c 09 00 08 MIDI_INSTRUMENT_GTHARMS .text $00, $00, $0A, $82, $8C, $09, $00, $08, $02, $B4, $EC, $00 ->3928d3 02 b4 ec 00 ->3928d7 00 21 13 ab 46 01 00 21 MIDI_INSTRUMENT_ACOUBASS .text $00, $21, $13, $AB, $46, $01, $00, $21, $00, $93, $F7, $00 ->3928df 00 93 f7 00 ->3928e3 00 01 0a f9 32 01 00 22 MIDI_INSTRUMENT_FINGBASS .text $00, $01, $0A, $F9, $32, $01, $00, $22, $04, $C1, $58, $00 ->3928eb 04 c1 58 00 ->3928ef 00 21 07 fa 77 0b 00 22 MIDI_INSTRUMENT_PICKBASS .text $00, $21, $07, $FA, $77, $0B, $00, $22, $02, $C3, $6A, $00 ->3928f7 02 c3 6a 00 ->3928fb 00 21 17 71 57 0b 00 21 MIDI_INSTRUMENT_FRETLESS .text $00, $21, $17, $71, $57, $0B, $00, $21, $00, $62, $87, $00 ->392903 00 62 87 00 ->392907 00 25 01 fa 78 07 01 12 MIDI_INSTRUMENT_SLAPBAS1 .text $00, $25, $01, $FA, $78, $07, $01, $12, $00, $F3, $97, $00 ->39290f 00 f3 97 00 ->392913 00 21 03 fa 88 0d 00 13 MIDI_INSTRUMENT_SLAPBAS2 .text $00, $21, $03, $FA, $88, $0D, $00, $13, $00, $B3, $97, $00 ->39291b 00 b3 97 00 ->39291f 00 21 09 f5 7f 09 01 23 MIDI_INSTRUMENT_SYNBASS1 .text $00, $21, $09, $F5, $7F, $09, $01, $23, $04, $F3, $CC, $00 ->392927 04 f3 cc 00 ->39292b 00 01 10 a3 9b 09 00 01 MIDI_INSTRUMENT_SYNBASS2 .text $00, $01, $10, $A3, $9B, $09, $00, $01, $00, $93, $AA, $00 ->392933 00 93 aa 00 ->392937 00 e2 19 f6 29 0d 01 e1 MIDI_INSTRUMENT_VIOLIN .text $00, $E2, $19, $F6, $29, $0D, $01, $E1, $00, $78, $08, $01 ->39293f 00 78 08 01 ->392943 00 e2 1c f6 29 0d 01 e1 MIDI_INSTRUMENT_VIOLA .text $00, $E2, $1C, $F6, $29, $0D, $01, $E1, $00, $78, $08, $01 ->39294b 00 78 08 01 ->39294f 00 61 19 69 16 0b 01 61 MIDI_INSTRUMENT_CELLO .text $00, $61, $19, $69, $16, $0B, $01, $61, $00, $54, $27, $01 ->392957 00 54 27 01 ->39295b 00 71 18 82 31 0d 01 32 MIDI_INSTRUMENT_CONTRAB .text $00, $71, $18, $82, $31, $0D, $01, $32, $00, $61, $56, $00 ->392963 00 61 56 00 ->392967 00 e2 23 70 06 0d 01 e1 MIDI_INSTRUMENT_TREMSTR .text $00, $E2, $23, $70, $06, $0D, $01, $E1, $00, $75, $16, $01 ->39296f 00 75 16 01 ->392973 00 02 00 88 e6 08 00 61 MIDI_INSTRUMENT_PIZZ .text $00, $02, $00, $88, $E6, $08, $00, $61, $00, $F5, $F6, $01 ->39297b 00 f5 f6 01 ->39297f 00 12 20 f6 d5 0f 01 11 MIDI_INSTRUMENT_HARP .text $00, $12, $20, $F6, $D5, $0F, $01, $11, $80, $F3, $E3, $00 ->392987 80 f3 e3 00 ->39298b 00 61 0e f4 f4 01 01 00 MIDI_INSTRUMENT_TIMPANI .text $00, $61, $0E, $F4, $F4, $01, $01, $00, $00, $B5, $F5, $00 ->392993 00 b5 f5 00 ->392997 00 61 1e 9c 04 0f 01 21 MIDI_INSTRUMENT_STRINGS .text $00, $61, $1E, $9C, $04, $0F, $01, $21, $80, $71, $16, $00 ->39299f 80 71 16 00 ->3929a3 00 a2 2a c0 d6 0f 02 21 MIDI_INSTRUMENT_SLOWSTR .text $00, $A2, $2A, $C0, $D6, $0F, $02, $21, $00, $30, $55, $01 ->3929ab 00 30 55 01 ->3929af 00 61 21 72 35 0f 01 61 MIDI_INSTRUMENT_SYNSTR1 .text $00, $61, $21, $72, $35, $0F, $01, $61, $00, $62, $36, $01 ->3929b7 00 62 36 01 ->3929bb 00 21 1a 72 23 0f 01 21 MIDI_INSTRUMENT_SYNSTR2 .text $00, $21, $1A, $72, $23, $0F, $01, $21, $02, $51, $07, $00 ->3929c3 02 51 07 00 ->3929c7 00 e1 16 97 31 09 00 61 MIDI_INSTRUMENT_CHOIR .text $00, $E1, $16, $97, $31, $09, $00, $61, $00, $62, $39, $00 ->3929cf 00 62 39 00 ->3929d3 00 22 c3 79 45 01 00 21 MIDI_INSTRUMENT_OOHS .text $00, $22, $C3, $79, $45, $01, $00, $21, $00, $66, $27, $00 ->3929db 00 66 27 00 ->3929df 00 21 de 63 55 01 01 21 MIDI_INSTRUMENT_SYNVOX .text $00, $21, $DE, $63, $55, $01, $01, $21, $00, $73, $46, $00 ->3929e7 00 73 46 00 ->3929eb 00 42 05 86 f7 0a 00 50 MIDI_INSTRUMENT_ORCHIT .text $00, $42, $05, $86, $F7, $0A, $00, $50, $00, $74, $76, $01 ->3929f3 00 74 76 01 ->3929f7 00 31 1c 61 02 0f 00 61 MIDI_INSTRUMENT_TRUMPET .text $00, $31, $1C, $61, $02, $0F, $00, $61, $81, $92, $38, $00 ->3929ff 81 92 38 00 ->392a03 00 71 1e 52 23 0f 00 61 MIDI_INSTRUMENT_TROMBONE .text $00, $71, $1E, $52, $23, $0F, $00, $61, $02, $71, $19, $00 ->392a0b 02 71 19 00 ->392a0f 00 21 1a 76 16 0f 00 21 MIDI_INSTRUMENT_TUBA .text $00, $21, $1A, $76, $16, $0F, $00, $21, $01, $81, $09, $00 ->392a17 01 81 09 00 ->392a1b 00 25 28 89 2c 07 02 20 MIDI_INSTRUMENT_MUTETRP .text $00, $25, $28, $89, $2C, $07, $02, $20, $00, $83, $4B, $02 ->392a23 00 83 4b 02 ->392a27 00 21 1f 79 16 09 00 a2 MIDI_INSTRUMENT_FRHORN .text $00, $21, $1F, $79, $16, $09, $00, $A2, $05, $71, $59, $00 ->392a2f 05 71 59 00 ->392a33 00 21 19 87 16 0f 00 21 MIDI_INSTRUMENT_BRASS1 .text $00, $21, $19, $87, $16, $0F, $00, $21, $03, $82, $39, $00 ->392a3b 03 82 39 00 ->392a3f 00 21 17 75 35 0f 00 22 MIDI_INSTRUMENT_SYNBRAS1 .text $00, $21, $17, $75, $35, $0F, $00, $22, $82, $84, $17, $00 ->392a47 82 84 17 00 ->392a4b 00 21 22 62 58 0f 00 21 MIDI_INSTRUMENT_SYNBRAS2 .text $00, $21, $22, $62, $58, $0F, $00, $21, $02, $72, $16, $00 ->392a53 02 72 16 00 ->392a57 00 b1 1b 59 07 01 01 a1 MIDI_INSTRUMENT_SOPSAX .text $00, $B1, $1B, $59, $07, $01, $01, $A1, $00, $7B, $0A, $00 ->392a5f 00 7b 0a 00 ->392a63 00 21 16 9f 04 0b 00 21 MIDI_INSTRUMENT_ALTOSAX .text $00, $21, $16, $9F, $04, $0B, $00, $21, $00, $85, $0C, $01 ->392a6b 00 85 0c 01 ->392a6f 00 21 0f a8 20 0d 00 23 MIDI_INSTRUMENT_TENSAX .text $00, $21, $0F, $A8, $20, $0D, $00, $23, $00, $7B, $0A, $01 ->392a77 00 7b 0a 01 ->392a7b 00 21 0f 88 04 09 00 26 MIDI_INSTRUMENT_BARISAX .text $00, $21, $0F, $88, $04, $09, $00, $26, $00, $79, $18, $01 ->392a83 00 79 18 01 ->392a87 00 31 18 8f 05 01 00 32 MIDI_INSTRUMENT_OBOE .text $00, $31, $18, $8F, $05, $01, $00, $32, $01, $73, $08, $00 ->392a8f 01 73 08 00 ->392a93 00 a1 0a 8c 37 01 01 24 MIDI_INSTRUMENT_ENGLHORN .text $00, $A1, $0A, $8C, $37, $01, $01, $24, $04, $77, $0A, $00 ->392a9b 04 77 0a 00 ->392a9f 00 31 04 a8 67 0b 00 75 MIDI_INSTRUMENT_BASSOON .text $00, $31, $04, $A8, $67, $0B, $00, $75, $00, $51, $19, $00 ->392aa7 00 51 19 00 ->392aab 00 a2 1f 77 26 01 01 21 MIDI_INSTRUMENT_CLARINET .text $00, $A2, $1F, $77, $26, $01, $01, $21, $01, $74, $09, $00 ->392ab3 01 74 09 00 ->392ab7 00 e1 07 b8 94 01 01 21 MIDI_INSTRUMENT_PICCOLO .text $00, $E1, $07, $B8, $94, $01, $01, $21, $01, $63, $28, $00 ->392abf 01 63 28 00 ->392ac3 00 a1 93 87 59 01 00 e1 MIDI_INSTRUMENT_FLUTE1 .text $00, $A1, $93, $87, $59, $01, $00, $E1, $00, $65, $0A, $00 ->392acb 00 65 0a 00 ->392acf 00 22 10 9f 38 01 00 61 MIDI_INSTRUMENT_RECORDER .text $00, $22, $10, $9F, $38, $01, $00, $61, $00, $67, $29, $00 ->392ad7 00 67 29 00 ->392adb 00 e2 0d 88 9a 01 01 21 MIDI_INSTRUMENT_PANFLUTE .text $00, $E2, $0D, $88, $9A, $01, $01, $21, $00, $67, $09, $00 ->392ae3 00 67 09 00 ->392ae7 00 a2 10 98 94 0f 00 21 MIDI_INSTRUMENT_BOTTLEB .text $00, $A2, $10, $98, $94, $0F, $00, $21, $01, $6A, $28, $00 ->392aef 01 6a 28 00 ->392af3 00 f1 1c 86 26 0f 00 f1 MIDI_INSTRUMENT_SHAKU .text $00, $F1, $1C, $86, $26, $0F, $00, $F1, $00, $55, $27, $00 ->392afb 00 55 27 00 ->392aff 00 e1 3f 9f 09 00 00 e1 MIDI_INSTRUMENT_WHISTLE .text $00, $E1, $3F, $9F, $09, $00, $00, $E1, $00, $6F, $08, $00 ->392b07 00 6f 08 00 ->392b0b 00 e2 3b f7 19 01 00 21 MIDI_INSTRUMENT_OCARINA .text $00, $E2, $3B, $F7, $19, $01, $00, $21, $00, $7A, $07, $00 ->392b13 00 7a 07 00 ->392b17 00 22 1e 92 0c 0f 00 61 MIDI_INSTRUMENT_SQUARWAV .text $00, $22, $1E, $92, $0C, $0F, $00, $61, $06, $A2, $0D, $00 ->392b1f 06 a2 0d 00 ->392b23 00 21 15 f4 22 0f 01 21 MIDI_INSTRUMENT_SAWWAV .text $00, $21, $15, $F4, $22, $0F, $01, $21, $00, $A3, $5F, $00 ->392b2b 00 a3 5f 00 ->392b2f 00 f2 20 47 66 03 01 f1 MIDI_INSTRUMENT_SYNCALLI .text $00, $F2, $20, $47, $66, $03, $01, $F1, $00, $42, $27, $00 ->392b37 00 42 27 00 ->392b3b 00 61 19 88 28 0f 00 61 MIDI_INSTRUMENT_CHIFLEAD .text $00, $61, $19, $88, $28, $0F, $00, $61, $05, $B2, $49, $00 ->392b43 05 b2 49 00 ->392b47 00 21 16 82 1b 01 00 23 MIDI_INSTRUMENT_CHARANG .text $00, $21, $16, $82, $1B, $01, $00, $23, $00, $B2, $79, $01 ->392b4f 00 b2 79 01 ->392b53 00 21 00 ca 93 01 00 22 MIDI_INSTRUMENT_SOLOVOX .text $00, $21, $00, $CA, $93, $01, $00, $22, $00, $7A, $1A, $00 ->392b5b 00 7a 1a 00 ->392b5f 00 23 00 92 c9 08 01 22 MIDI_INSTRUMENT_FIFTHSAW .text $00, $23, $00, $92, $C9, $08, $01, $22, $00, $82, $28, $01 ->392b67 00 82 28 01 ->392b6b 00 21 1d f3 7b 0f 00 22 MIDI_INSTRUMENT_BASSLEAD .text $00, $21, $1D, $F3, $7B, $0F, $00, $22, $02, $C3, $5F, $00 ->392b73 02 c3 5f 00 ->392b77 00 e1 00 81 25 00 01 a6 MIDI_INSTRUMENT_FANTASIA .text $00, $E1, $00, $81, $25, $00, $01, $A6, $86, $C4, $95, $01 ->392b7f 86 c4 95 01 ->392b83 00 21 27 31 01 0f 00 21 MIDI_INSTRUMENT_WARMPAD .text $00, $21, $27, $31, $01, $0F, $00, $21, $00, $44, $15, $00 ->392b8b 00 44 15 00 ->392b8f 00 60 14 83 35 0d 02 61 MIDI_INSTRUMENT_POLYSYN .text $00, $60, $14, $83, $35, $0D, $02, $61, $00, $D1, $06, $00 ->392b97 00 d1 06 00 ->392b9b 00 e1 5c d3 01 01 01 62 MIDI_INSTRUMENT_SPACEVOX .text $00, $E1, $5C, $D3, $01, $01, $01, $62, $00, $82, $37, $00 ->392ba3 00 82 37 00 ->392ba7 00 28 38 34 86 01 02 21 MIDI_INSTRUMENT_BOWEDGLS .text $00, $28, $38, $34, $86, $01, $02, $21, $00, $41, $35, $00 ->392baf 00 41 35 00 ->392bb3 00 24 12 52 f3 05 01 23 MIDI_INSTRUMENT_METALPAD .text $00, $24, $12, $52, $F3, $05, $01, $23, $02, $32, $F5, $01 ->392bbb 02 32 f5 01 ->392bbf 00 61 1d 62 a6 0b 00 a1 MIDI_INSTRUMENT_HALOPAD .text $00, $61, $1D, $62, $A6, $0B, $00, $A1, $00, $61, $26, $00 ->392bc7 00 61 26 00 ->392bcb 00 22 0f 22 d5 0b 01 21 MIDI_INSTRUMENT_SWEEPPAD .text $00, $22, $0F, $22, $D5, $0B, $01, $21, $84, $3F, $05, $01 ->392bd3 84 3f 05 01 ->392bd7 00 e3 1f f9 24 01 00 31 MIDI_INSTRUMENT_ICERAIN .text $00, $E3, $1F, $F9, $24, $01, $00, $31, $01, $D1, $F6, $00 ->392bdf 01 d1 f6 00 ->392be3 00 63 00 41 55 06 01 a2 MIDI_INSTRUMENT_SOUNDTRK .text $00, $63, $00, $41, $55, $06, $01, $A2, $00, $41, $05, $01 ->392beb 00 41 05 01 ->392bef 00 c7 25 a7 65 01 01 c1 MIDI_INSTRUMENT_CRYSTAL .text $00, $C7, $25, $A7, $65, $01, $01, $C1, $05, $F3, $E4, $00 ->392bf7 05 f3 e4 00 ->392bfb 00 e3 19 f7 b7 01 01 61 MIDI_INSTRUMENT_ATMOSPH .text $00, $E3, $19, $F7, $B7, $01, $01, $61, $00, $92, $F5, $01 ->392c03 00 92 f5 01 ->392c07 00 66 9b a8 44 0f 00 41 MIDI_INSTRUMENT_BRIGHT .text $00, $66, $9B, $A8, $44, $0F, $00, $41, $04, $F2, $E4, $01 ->392c0f 04 f2 e4 01 ->392c13 00 61 20 22 75 0d 00 61 MIDI_INSTRUMENT_GOBLIN .text $00, $61, $20, $22, $75, $0D, $00, $61, $00, $45, $25, $00 ->392c1b 00 45 25 00 ->392c1f 00 e1 21 f6 84 0f 00 e1 MIDI_INSTRUMENT_ECHODROP .text $00, $E1, $21, $F6, $84, $0F, $00, $E1, $01, $A3, $36, $00 ->392c27 01 a3 36 00 ->392c2b 00 e2 14 73 64 0b 01 e1 MIDI_INSTRUMENT_STARTHEM .text $00, $E2, $14, $73, $64, $0B, $01, $E1, $01, $98, $05, $01 ->392c33 01 98 05 01 ->392c37 00 21 0b 72 34 09 00 24 MIDI_INSTRUMENT_SITAR .text $00, $21, $0B, $72, $34, $09, $00, $24, $02, $A3, $F6, $01 ->392c3f 02 a3 f6 01 ->392c43 00 21 16 f4 53 0d 00 04 MIDI_INSTRUMENT_BANJO .text $00, $21, $16, $F4, $53, $0D, $00, $04, $00, $F6, $F8, $00 ->392c4b 00 f6 f8 00 ->392c4f 00 21 18 da 02 0d 00 35 MIDI_INSTRUMENT_SHAMISEN .text $00, $21, $18, $DA, $02, $0D, $00, $35, $00, $F3, $F5, $00 ->392c57 00 f3 f5 00 ->392c5b 00 25 0f fa 63 09 00 02 MIDI_INSTRUMENT_KOTO .text $00, $25, $0F, $FA, $63, $09, $00, $02, $00, $94, $E5, $01 ->392c63 00 94 e5 01 ->392c67 00 32 07 f9 96 01 00 11 MIDI_INSTRUMENT_KALIMBA .text $00, $32, $07, $F9, $96, $01, $00, $11, $00, $84, $44, $00 ->392c6f 00 84 44 00 ->392c73 00 20 0e 97 18 09 02 25 MIDI_INSTRUMENT_BAGPIPE .text $00, $20, $0E, $97, $18, $09, $02, $25, $03, $83, $18, $01 ->392c7b 03 83 18 01 ->392c7f 00 61 18 f6 29 01 00 62 MIDI_INSTRUMENT_FIDDLE .text $00, $61, $18, $F6, $29, $01, $00, $62, $01, $78, $08, $01 ->392c87 01 78 08 01 ->392c8b 00 e6 21 76 19 0b 00 61 MIDI_INSTRUMENT_SHANNAI .text $00, $E6, $21, $76, $19, $0B, $00, $61, $03, $8E, $08, $01 ->392c93 03 8e 08 01 ->392c97 00 27 23 f0 d4 01 00 05 MIDI_INSTRUMENT_TINKLBEL .text $00, $27, $23, $F0, $D4, $01, $00, $05, $09, $F2, $46, $00 ->392c9f 09 f2 46 00 ->392ca3 00 1c 0c f9 31 0f 01 15 MIDI_INSTRUMENT_AGOGO .text $00, $1C, $0C, $F9, $31, $0F, $01, $15, $00, $96, $E8, $01 ->392cab 00 96 e8 01 ->392caf 00 02 00 75 16 06 02 01 MIDI_INSTRUMENT_STEELDRM .text $00, $02, $00, $75, $16, $06, $02, $01, $00, $F6, $F6, $01 ->392cb7 00 f6 f6 01 ->392cbb 00 25 1b fa f2 01 00 12 MIDI_INSTRUMENT_WOODBLOK .text $00, $25, $1B, $FA, $F2, $01, $00, $12, $00, $F6, $9A, $00 ->392cc3 00 f6 9a 00 ->392cc7 00 02 1d f5 93 01 00 00 MIDI_INSTRUMENT_TAIKO .text $00, $02, $1D, $F5, $93, $01, $00, $00, $00, $C6, $45, $00 ->392ccf 00 c6 45 00 ->392cd3 00 11 15 f5 32 05 00 10 MIDI_INSTRUMENT_MELOTOM .text $00, $11, $15, $F5, $32, $05, $00, $10, $00, $F4, $B4, $00 ->392cdb 00 f4 b4 00 ->392cdf 00 22 06 fa 99 09 00 01 MIDI_INSTRUMENT_SYNDRUM .text $00, $22, $06, $FA, $99, $09, $00, $01, $00, $D5, $25, $00 ->392ce7 00 d5 25 00 ->392ceb 00 2e 00 ff 00 0f 02 0e MIDI_INSTRUMENT_REVRSCYM .text $00, $2E, $00, $FF, $00, $0F, $02, $0E, $0E, $21, $2D, $00 ->392cf3 0e 21 2d 00 ->392cf7 00 30 0b 56 e4 01 01 17 MIDI_INSTRUMENT_FRETNOIS .text $00, $30, $0B, $56, $E4, $01, $01, $17, $00, $55, $87, $02 ->392cff 00 55 87 02 ->392d03 00 24 00 ff 03 0d 00 05 MIDI_INSTRUMENT_BRTHNOIS .text $00, $24, $00, $FF, $03, $0D, $00, $05, $08, $98, $87, $01 ->392d0b 08 98 87 01 ->392d0f 00 0e 00 f0 00 0f 02 0a MIDI_INSTRUMENT_SEASHORE .text $00, $0E, $00, $F0, $00, $0F, $02, $0A, $04, $17, $04, $03 ->392d17 04 17 04 03 ->392d1b 00 20 08 f6 f7 01 00 0e MIDI_INSTRUMENT_BIRDS .text $00, $20, $08, $F6, $F7, $01, $00, $0E, $05, $77, $F9, $02 ->392d23 05 77 f9 02 ->392d27 00 20 14 f1 08 01 00 2e MIDI_INSTRUMENT_TELEPHON .text $00, $20, $14, $F1, $08, $01, $00, $2E, $02, $F4, $08, $00 ->392d2f 02 f4 08 00 ->392d33 00 20 04 f2 00 03 01 23 MIDI_INSTRUMENT_HELICOPT .text $00, $20, $04, $F2, $00, $03, $01, $23, $00, $36, $05, $01 ->392d3b 00 36 05 01 ->392d3f 00 2e 00 ff 02 0f 00 2a MIDI_INSTRUMENT_APPLAUSE .text $00, $2E, $00, $FF, $02, $0F, $00, $2A, $05, $32, $55, $03 ->392d47 05 32 55 03 ->392d4b 00 20 00 a1 ef 0f 00 10 MIDI_INSTRUMENT_GUNSHOT .text $00, $20, $00, $A1, $EF, $0F, $00, $10, $00, $F3, $DF, $00 ->392d53 00 f3 df 00 ->392d57 57 27 39 00 63 27 39 00 midiInstruments .dword MIDI_INSTRUMENT_PIANO1, MIDI_INSTRUMENT_PIANO2, MIDI_INSTRUMENT_PIANO3, MIDI_INSTRUMENT_HONKTONK, MIDI_INSTRUMENT_EP1, MIDI_INSTRUMENT_EP2 ->392d5f 6f 27 39 00 7b 27 39 00 87 27 39 00 93 27 39 00 ->392d6f 9f 27 39 00 ab 27 39 00 .dword MIDI_INSTRUMENT_HARPSIC, MIDI_INSTRUMENT_CLAVIC, MIDI_INSTRUMENT_CELESTA, MIDI_INSTRUMENT_GLOCK, MIDI_INSTRUMENT_MUSICBOX, MIDI_INSTRUMENT_VIBES ->392d77 b7 27 39 00 c3 27 39 00 cf 27 39 00 db 27 39 00 ->392d87 e7 27 39 00 f3 27 39 00 .dword MIDI_INSTRUMENT_MARIMBA, MIDI_INSTRUMENT_XYLO, MIDI_INSTRUMENT_TUBEBELL, MIDI_INSTRUMENT_SANTUR, MIDI_INSTRUMENT_ORGAN1, MIDI_INSTRUMENT_ORGAN2 ->392d8f ff 27 39 00 0b 28 39 00 17 28 39 00 23 28 39 00 ->392d9f 2f 28 39 00 3b 28 39 00 .dword MIDI_INSTRUMENT_ORGAN3, MIDI_INSTRUMENT_PIPEORG, MIDI_INSTRUMENT_REEDORG, MIDI_INSTRUMENT_ACORDIAN, MIDI_INSTRUMENT_HARMONIC, MIDI_INSTRUMENT_BANDNEON ->392da7 47 28 39 00 53 28 39 00 5f 28 39 00 6b 28 39 00 ->392db7 77 28 39 00 83 28 39 00 .dword MIDI_INSTRUMENT_NYLONGT, MIDI_INSTRUMENT_STEELGT, MIDI_INSTRUMENT_JAZZGT, MIDI_INSTRUMENT_CLEANGT, MIDI_INSTRUMENT_MUTEGT, MIDI_INSTRUMENT_OVERDGT ->392dbf 8f 28 39 00 9b 28 39 00 a7 28 39 00 b3 28 39 00 ->392dcf bf 28 39 00 cb 28 39 00 .dword MIDI_INSTRUMENT_DISTGT, MIDI_INSTRUMENT_GTHARMS, MIDI_INSTRUMENT_ACOUBASS, MIDI_INSTRUMENT_FINGBASS, MIDI_INSTRUMENT_PICKBASS, MIDI_INSTRUMENT_FRETLESS ->392dd7 d7 28 39 00 e3 28 39 00 ef 28 39 00 fb 28 39 00 ->392de7 07 29 39 00 13 29 39 00 .dword MIDI_INSTRUMENT_SLAPBAS1, MIDI_INSTRUMENT_SLAPBAS2, MIDI_INSTRUMENT_SYNBASS1, MIDI_INSTRUMENT_SYNBASS2, MIDI_INSTRUMENT_VIOLIN, MIDI_INSTRUMENT_VIOLA ->392def 1f 29 39 00 2b 29 39 00 37 29 39 00 43 29 39 00 ->392dff 4f 29 39 00 5b 29 39 00 .dword MIDI_INSTRUMENT_CELLO, MIDI_INSTRUMENT_CONTRAB, MIDI_INSTRUMENT_TREMSTR, MIDI_INSTRUMENT_PIZZ, MIDI_INSTRUMENT_HARP, MIDI_INSTRUMENT_TIMPANI ->392e07 67 29 39 00 73 29 39 00 7f 29 39 00 8b 29 39 00 ->392e17 97 29 39 00 a3 29 39 00 .dword MIDI_INSTRUMENT_STRINGS, MIDI_INSTRUMENT_SLOWSTR, MIDI_INSTRUMENT_SYNSTR1, MIDI_INSTRUMENT_SYNSTR2, MIDI_INSTRUMENT_CHOIR, MIDI_INSTRUMENT_OOHS ->392e1f af 29 39 00 bb 29 39 00 c7 29 39 00 d3 29 39 00 ->392e2f df 29 39 00 eb 29 39 00 .dword MIDI_INSTRUMENT_SYNVOX, MIDI_INSTRUMENT_ORCHIT, MIDI_INSTRUMENT_TRUMPET, MIDI_INSTRUMENT_TROMBONE, MIDI_INSTRUMENT_TUBA, MIDI_INSTRUMENT_MUTETRP ->392e37 f7 29 39 00 03 2a 39 00 0f 2a 39 00 1b 2a 39 00 ->392e47 27 2a 39 00 33 2a 39 00 .dword MIDI_INSTRUMENT_FRHORN, MIDI_INSTRUMENT_BRASS1, MIDI_INSTRUMENT_SYNBRAS1, MIDI_INSTRUMENT_SYNBRAS2, MIDI_INSTRUMENT_SOPSAX, MIDI_INSTRUMENT_ALTOSAX ->392e4f 3f 2a 39 00 4b 2a 39 00 57 2a 39 00 63 2a 39 00 ->392e5f 6f 2a 39 00 7b 2a 39 00 .dword MIDI_INSTRUMENT_TENSAX, MIDI_INSTRUMENT_BARISAX, MIDI_INSTRUMENT_OBOE, MIDI_INSTRUMENT_ENGLHORN, MIDI_INSTRUMENT_BASSOON, MIDI_INSTRUMENT_CLARINET ->392e67 87 2a 39 00 93 2a 39 00 9f 2a 39 00 ab 2a 39 00 ->392e77 b7 2a 39 00 c3 2a 39 00 .dword MIDI_INSTRUMENT_PICCOLO, MIDI_INSTRUMENT_FLUTE1, MIDI_INSTRUMENT_RECORDER, MIDI_INSTRUMENT_PANFLUTE, MIDI_INSTRUMENT_BOTTLEB, MIDI_INSTRUMENT_SHAKU ->392e7f cf 2a 39 00 db 2a 39 00 e7 2a 39 00 f3 2a 39 00 ->392e8f ff 2a 39 00 0b 2b 39 00 .dword MIDI_INSTRUMENT_WHISTLE, MIDI_INSTRUMENT_OCARINA, MIDI_INSTRUMENT_SQUARWAV, MIDI_INSTRUMENT_SAWWAV, MIDI_INSTRUMENT_SYNCALLI, MIDI_INSTRUMENT_CHIFLEAD ->392e97 17 2b 39 00 23 2b 39 00 2f 2b 39 00 3b 2b 39 00 ->392ea7 47 2b 39 00 53 2b 39 00 .dword MIDI_INSTRUMENT_CHARANG, MIDI_INSTRUMENT_SOLOVOX, MIDI_INSTRUMENT_FIFTHSAW, MIDI_INSTRUMENT_BASSLEAD, MIDI_INSTRUMENT_FANTASIA, MIDI_INSTRUMENT_WARMPAD ->392eaf 5f 2b 39 00 6b 2b 39 00 77 2b 39 00 83 2b 39 00 ->392ebf 8f 2b 39 00 9b 2b 39 00 .dword MIDI_INSTRUMENT_POLYSYN, MIDI_INSTRUMENT_SPACEVOX, MIDI_INSTRUMENT_BOWEDGLS, MIDI_INSTRUMENT_METALPAD, MIDI_INSTRUMENT_HALOPAD, MIDI_INSTRUMENT_SWEEPPAD ->392ec7 a7 2b 39 00 b3 2b 39 00 bf 2b 39 00 cb 2b 39 00 ->392ed7 d7 2b 39 00 e3 2b 39 00 .dword MIDI_INSTRUMENT_ICERAIN, MIDI_INSTRUMENT_SOUNDTRK, MIDI_INSTRUMENT_CRYSTAL, MIDI_INSTRUMENT_ATMOSPH, MIDI_INSTRUMENT_BRIGHT, MIDI_INSTRUMENT_GOBLIN ->392edf ef 2b 39 00 fb 2b 39 00 07 2c 39 00 13 2c 39 00 ->392eef 1f 2c 39 00 2b 2c 39 00 .dword MIDI_INSTRUMENT_ECHODROP, MIDI_INSTRUMENT_STARTHEM, MIDI_INSTRUMENT_SITAR, MIDI_INSTRUMENT_BANJO, MIDI_INSTRUMENT_SHAMISEN, MIDI_INSTRUMENT_KOTO ->392ef7 37 2c 39 00 43 2c 39 00 4f 2c 39 00 5b 2c 39 00 ->392f07 67 2c 39 00 73 2c 39 00 .dword MIDI_INSTRUMENT_KALIMBA, MIDI_INSTRUMENT_BAGPIPE, MIDI_INSTRUMENT_FIDDLE, MIDI_INSTRUMENT_SHANNAI, MIDI_INSTRUMENT_TINKLBEL, MIDI_INSTRUMENT_AGOGO ->392f0f 7f 2c 39 00 8b 2c 39 00 97 2c 39 00 a3 2c 39 00 ->392f1f af 2c 39 00 bb 2c 39 00 .dword MIDI_INSTRUMENT_STEELDRM, MIDI_INSTRUMENT_WOODBLOK, MIDI_INSTRUMENT_TAIKO, MIDI_INSTRUMENT_MELOTOM, MIDI_INSTRUMENT_SYNDRUM, MIDI_INSTRUMENT_REVRSCYM ->392f27 c7 2c 39 00 d3 2c 39 00 df 2c 39 00 eb 2c 39 00 ->392f37 f7 2c 39 00 03 2d 39 00 .dword MIDI_INSTRUMENT_FRETNOIS, MIDI_INSTRUMENT_BRTHNOIS, MIDI_INSTRUMENT_SEASHORE, MIDI_INSTRUMENT_BIRDS, MIDI_INSTRUMENT_TELEPHON, MIDI_INSTRUMENT_HELICOPT ->392f3f 0f 2d 39 00 1b 2d 39 00 27 2d 39 00 33 2d 39 00 ->392f4f 3f 2d 39 00 4b 2d 39 00 .dword MIDI_INSTRUMENT_APPLAUSE, MIDI_INSTRUMENT_GUNSHOT +>3927a9 00 33 5a b2 50 01 00 31 MIDI_INSTRUMENT_PIANO1 .text $00, $33, $5A, $B2, $50, $01, $00, $31, $00, $B1, $F5, $01 +>3927b1 00 b1 f5 01 +>3927b5 00 31 49 f2 53 07 01 11 MIDI_INSTRUMENT_PIANO2 .text $00, $31, $49, $F2, $53, $07, $01, $11, $03, $F1, $F5, $00 +>3927bd 03 f1 f5 00 +>3927c1 00 31 95 d1 83 0d 01 32 MIDI_INSTRUMENT_PIANO3 .text $00, $31, $95, $D1, $83, $0D, $01, $32, $03, $C1, $F5, $00 +>3927c9 03 c1 f5 00 +>3927cd 00 34 9b f3 63 01 01 11 MIDI_INSTRUMENT_HONKTONK .text $00, $34, $9B, $F3, $63, $01, $01, $11, $00, $92, $F5, $01 +>3927d5 00 92 f5 01 +>3927d9 00 27 28 f8 b7 01 02 91 MIDI_INSTRUMENT_EP1 .text $00, $27, $28, $F8, $B7, $01, $02, $91, $00, $F1, $F9, $00 +>3927e1 00 f1 f9 00 +>3927e5 00 1a 2d f3 ee 01 01 11 MIDI_INSTRUMENT_EP2 .text $00, $1A, $2D, $F3, $EE, $01, $01, $11, $00, $F1, $F5, $00 +>3927ed 00 f1 f5 00 +>3927f1 00 35 95 f2 58 0f 01 32 MIDI_INSTRUMENT_HARPSIC .text $00, $35, $95, $F2, $58, $0F, $01, $32, $02, $81, $F6, $01 +>3927f9 02 81 f6 01 +>3927fd 00 31 85 c9 40 01 00 35 MIDI_INSTRUMENT_CLAVIC .text $00, $31, $85, $C9, $40, $01, $00, $35, $00, $C2, $B9, $01 +>392805 00 c2 b9 01 +>392809 00 09 15 c7 64 08 00 01 MIDI_INSTRUMENT_CELESTA .text $00, $09, $15, $C7, $64, $08, $00, $01, $05, $B2, $35, $00 +>392811 05 b2 35 00 +>392815 00 06 03 f4 44 00 01 01 MIDI_INSTRUMENT_GLOCK .text $00, $06, $03, $F4, $44, $00, $01, $01, $1B, $F2, $34, $00 +>39281d 1b f2 34 00 +>392821 00 04 06 a9 24 0a 01 01 MIDI_INSTRUMENT_MUSICBOX .text $00, $04, $06, $A9, $24, $0A, $01, $01, $01, $F5, $74, $00 +>392829 01 f5 74 00 +>39282d 00 d4 00 f6 33 00 00 f1 MIDI_INSTRUMENT_VIBES .text $00, $D4, $00, $F6, $33, $00, $00, $F1, $00, $61, $E3, $00 +>392835 00 61 e3 00 +>392839 00 d4 00 f7 e8 04 00 d1 MIDI_INSTRUMENT_MARIMBA .text $00, $D4, $00, $F7, $E8, $04, $00, $D1, $00, $A4, $64, $00 +>392841 00 a4 64 00 +>392845 00 36 16 f7 f7 01 00 31 MIDI_INSTRUMENT_XYLO .text $00, $36, $16, $F7, $F7, $01, $00, $31, $07, $B5, $F5, $00 +>39284d 07 b5 f5 00 +>392851 00 03 1b a2 43 0b 00 00 MIDI_INSTRUMENT_TUBEBELL .text $00, $03, $1B, $A2, $43, $0B, $00, $00, $00, $F3, $74, $00 +>392859 00 f3 74 00 +>39285d 00 c3 8e f8 35 01 01 11 MIDI_INSTRUMENT_SANTUR .text $00, $C3, $8E, $F8, $35, $01, $01, $11, $00, $C3, $94, $01 +>392865 00 c3 94 01 +>392869 00 e2 07 f4 1b 06 01 e0 MIDI_INSTRUMENT_ORGAN1 .text $00, $E2, $07, $F4, $1B, $06, $01, $E0, $00, $F4, $0D, $01 +>392871 00 f4 0d 01 +>392875 00 f2 00 f6 2c 04 00 f0 MIDI_INSTRUMENT_ORGAN2 .text $00, $F2, $00, $F6, $2C, $04, $00, $F0, $00, $F5, $0B, $01 +>39287d 00 f5 0b 01 +>392881 00 f1 06 b6 15 0a 00 f0 MIDI_INSTRUMENT_ORGAN3 .text $00, $F1, $06, $B6, $15, $0A, $00, $F0, $00, $BF, $07, $00 +>392889 00 bf 07 00 +>39288d 00 22 03 79 16 08 01 e0 MIDI_INSTRUMENT_PIPEORG .text $00, $22, $03, $79, $16, $08, $01, $E0, $00, $6D, $08, $01 +>392895 00 6d 08 01 +>392899 00 31 27 63 06 01 00 72 MIDI_INSTRUMENT_REEDORG .text $00, $31, $27, $63, $06, $01, $00, $72, $00, $51, $17, $01 +>3928a1 00 51 17 01 +>3928a5 00 b4 1d 53 16 0f 01 71 MIDI_INSTRUMENT_ACORDIAN .text $00, $B4, $1D, $53, $16, $0F, $01, $71, $00, $51, $17, $01 +>3928ad 00 51 17 01 +>3928b1 00 25 29 97 15 01 00 32 MIDI_INSTRUMENT_HARMONIC .text $00, $25, $29, $97, $15, $01, $00, $32, $00, $53, $08, $01 +>3928b9 00 53 08 01 +>3928bd 00 24 9e 67 15 0f 00 31 MIDI_INSTRUMENT_BANDNEON .text $00, $24, $9E, $67, $15, $0F, $00, $31, $00, $53, $06, $01 +>3928c5 00 53 06 01 +>3928c9 00 13 27 a3 b4 05 01 31 MIDI_INSTRUMENT_NYLONGT .text $00, $13, $27, $A3, $B4, $05, $01, $31, $00, $D2, $F8, $00 +>3928d1 00 d2 f8 00 +>3928d5 00 17 a3 f3 32 01 00 11 MIDI_INSTRUMENT_STEELGT .text $00, $17, $A3, $F3, $32, $01, $00, $11, $00, $E2, $C7, $01 +>3928dd 00 e2 c7 01 +>3928e1 00 33 24 d2 c1 0f 01 31 MIDI_INSTRUMENT_JAZZGT .text $00, $33, $24, $D2, $C1, $0F, $01, $31, $00, $F1, $9C, $00 +>3928e9 00 f1 9c 00 +>3928ed 00 31 05 f8 44 01 00 32 MIDI_INSTRUMENT_CLEANGT .text $00, $31, $05, $F8, $44, $01, $00, $32, $02, $F2, $C9, $01 +>3928f5 02 f2 c9 01 +>3928f9 00 21 09 9c 7b 07 00 02 MIDI_INSTRUMENT_MUTEGT .text $00, $21, $09, $9C, $7B, $07, $00, $02, $03, $95, $FB, $00 +>392901 03 95 fb 00 +>392905 00 21 84 81 98 07 01 21 MIDI_INSTRUMENT_OVERDGT .text $00, $21, $84, $81, $98, $07, $01, $21, $04, $A1, $59, $00 +>39290d 04 a1 59 00 +>392911 00 b1 0c 78 43 01 00 22 MIDI_INSTRUMENT_DISTGT .text $00, $B1, $0C, $78, $43, $01, $00, $22, $03, $91, $FC, $03 +>392919 03 91 fc 03 +>39291d 00 00 0a 82 8c 09 00 08 MIDI_INSTRUMENT_GTHARMS .text $00, $00, $0A, $82, $8C, $09, $00, $08, $02, $B4, $EC, $00 +>392925 02 b4 ec 00 +>392929 00 21 13 ab 46 01 00 21 MIDI_INSTRUMENT_ACOUBASS .text $00, $21, $13, $AB, $46, $01, $00, $21, $00, $93, $F7, $00 +>392931 00 93 f7 00 +>392935 00 01 0a f9 32 01 00 22 MIDI_INSTRUMENT_FINGBASS .text $00, $01, $0A, $F9, $32, $01, $00, $22, $04, $C1, $58, $00 +>39293d 04 c1 58 00 +>392941 00 21 07 fa 77 0b 00 22 MIDI_INSTRUMENT_PICKBASS .text $00, $21, $07, $FA, $77, $0B, $00, $22, $02, $C3, $6A, $00 +>392949 02 c3 6a 00 +>39294d 00 21 17 71 57 0b 00 21 MIDI_INSTRUMENT_FRETLESS .text $00, $21, $17, $71, $57, $0B, $00, $21, $00, $62, $87, $00 +>392955 00 62 87 00 +>392959 00 25 01 fa 78 07 01 12 MIDI_INSTRUMENT_SLAPBAS1 .text $00, $25, $01, $FA, $78, $07, $01, $12, $00, $F3, $97, $00 +>392961 00 f3 97 00 +>392965 00 21 03 fa 88 0d 00 13 MIDI_INSTRUMENT_SLAPBAS2 .text $00, $21, $03, $FA, $88, $0D, $00, $13, $00, $B3, $97, $00 +>39296d 00 b3 97 00 +>392971 00 21 09 f5 7f 09 01 23 MIDI_INSTRUMENT_SYNBASS1 .text $00, $21, $09, $F5, $7F, $09, $01, $23, $04, $F3, $CC, $00 +>392979 04 f3 cc 00 +>39297d 00 01 10 a3 9b 09 00 01 MIDI_INSTRUMENT_SYNBASS2 .text $00, $01, $10, $A3, $9B, $09, $00, $01, $00, $93, $AA, $00 +>392985 00 93 aa 00 +>392989 00 e2 19 f6 29 0d 01 e1 MIDI_INSTRUMENT_VIOLIN .text $00, $E2, $19, $F6, $29, $0D, $01, $E1, $00, $78, $08, $01 +>392991 00 78 08 01 +>392995 00 e2 1c f6 29 0d 01 e1 MIDI_INSTRUMENT_VIOLA .text $00, $E2, $1C, $F6, $29, $0D, $01, $E1, $00, $78, $08, $01 +>39299d 00 78 08 01 +>3929a1 00 61 19 69 16 0b 01 61 MIDI_INSTRUMENT_CELLO .text $00, $61, $19, $69, $16, $0B, $01, $61, $00, $54, $27, $01 +>3929a9 00 54 27 01 +>3929ad 00 71 18 82 31 0d 01 32 MIDI_INSTRUMENT_CONTRAB .text $00, $71, $18, $82, $31, $0D, $01, $32, $00, $61, $56, $00 +>3929b5 00 61 56 00 +>3929b9 00 e2 23 70 06 0d 01 e1 MIDI_INSTRUMENT_TREMSTR .text $00, $E2, $23, $70, $06, $0D, $01, $E1, $00, $75, $16, $01 +>3929c1 00 75 16 01 +>3929c5 00 02 00 88 e6 08 00 61 MIDI_INSTRUMENT_PIZZ .text $00, $02, $00, $88, $E6, $08, $00, $61, $00, $F5, $F6, $01 +>3929cd 00 f5 f6 01 +>3929d1 00 12 20 f6 d5 0f 01 11 MIDI_INSTRUMENT_HARP .text $00, $12, $20, $F6, $D5, $0F, $01, $11, $80, $F3, $E3, $00 +>3929d9 80 f3 e3 00 +>3929dd 00 61 0e f4 f4 01 01 00 MIDI_INSTRUMENT_TIMPANI .text $00, $61, $0E, $F4, $F4, $01, $01, $00, $00, $B5, $F5, $00 +>3929e5 00 b5 f5 00 +>3929e9 00 61 1e 9c 04 0f 01 21 MIDI_INSTRUMENT_STRINGS .text $00, $61, $1E, $9C, $04, $0F, $01, $21, $80, $71, $16, $00 +>3929f1 80 71 16 00 +>3929f5 00 a2 2a c0 d6 0f 02 21 MIDI_INSTRUMENT_SLOWSTR .text $00, $A2, $2A, $C0, $D6, $0F, $02, $21, $00, $30, $55, $01 +>3929fd 00 30 55 01 +>392a01 00 61 21 72 35 0f 01 61 MIDI_INSTRUMENT_SYNSTR1 .text $00, $61, $21, $72, $35, $0F, $01, $61, $00, $62, $36, $01 +>392a09 00 62 36 01 +>392a0d 00 21 1a 72 23 0f 01 21 MIDI_INSTRUMENT_SYNSTR2 .text $00, $21, $1A, $72, $23, $0F, $01, $21, $02, $51, $07, $00 +>392a15 02 51 07 00 +>392a19 00 e1 16 97 31 09 00 61 MIDI_INSTRUMENT_CHOIR .text $00, $E1, $16, $97, $31, $09, $00, $61, $00, $62, $39, $00 +>392a21 00 62 39 00 +>392a25 00 22 c3 79 45 01 00 21 MIDI_INSTRUMENT_OOHS .text $00, $22, $C3, $79, $45, $01, $00, $21, $00, $66, $27, $00 +>392a2d 00 66 27 00 +>392a31 00 21 de 63 55 01 01 21 MIDI_INSTRUMENT_SYNVOX .text $00, $21, $DE, $63, $55, $01, $01, $21, $00, $73, $46, $00 +>392a39 00 73 46 00 +>392a3d 00 42 05 86 f7 0a 00 50 MIDI_INSTRUMENT_ORCHIT .text $00, $42, $05, $86, $F7, $0A, $00, $50, $00, $74, $76, $01 +>392a45 00 74 76 01 +>392a49 00 31 1c 61 02 0f 00 61 MIDI_INSTRUMENT_TRUMPET .text $00, $31, $1C, $61, $02, $0F, $00, $61, $81, $92, $38, $00 +>392a51 81 92 38 00 +>392a55 00 71 1e 52 23 0f 00 61 MIDI_INSTRUMENT_TROMBONE .text $00, $71, $1E, $52, $23, $0F, $00, $61, $02, $71, $19, $00 +>392a5d 02 71 19 00 +>392a61 00 21 1a 76 16 0f 00 21 MIDI_INSTRUMENT_TUBA .text $00, $21, $1A, $76, $16, $0F, $00, $21, $01, $81, $09, $00 +>392a69 01 81 09 00 +>392a6d 00 25 28 89 2c 07 02 20 MIDI_INSTRUMENT_MUTETRP .text $00, $25, $28, $89, $2C, $07, $02, $20, $00, $83, $4B, $02 +>392a75 00 83 4b 02 +>392a79 00 21 1f 79 16 09 00 a2 MIDI_INSTRUMENT_FRHORN .text $00, $21, $1F, $79, $16, $09, $00, $A2, $05, $71, $59, $00 +>392a81 05 71 59 00 +>392a85 00 21 19 87 16 0f 00 21 MIDI_INSTRUMENT_BRASS1 .text $00, $21, $19, $87, $16, $0F, $00, $21, $03, $82, $39, $00 +>392a8d 03 82 39 00 +>392a91 00 21 17 75 35 0f 00 22 MIDI_INSTRUMENT_SYNBRAS1 .text $00, $21, $17, $75, $35, $0F, $00, $22, $82, $84, $17, $00 +>392a99 82 84 17 00 +>392a9d 00 21 22 62 58 0f 00 21 MIDI_INSTRUMENT_SYNBRAS2 .text $00, $21, $22, $62, $58, $0F, $00, $21, $02, $72, $16, $00 +>392aa5 02 72 16 00 +>392aa9 00 b1 1b 59 07 01 01 a1 MIDI_INSTRUMENT_SOPSAX .text $00, $B1, $1B, $59, $07, $01, $01, $A1, $00, $7B, $0A, $00 +>392ab1 00 7b 0a 00 +>392ab5 00 21 16 9f 04 0b 00 21 MIDI_INSTRUMENT_ALTOSAX .text $00, $21, $16, $9F, $04, $0B, $00, $21, $00, $85, $0C, $01 +>392abd 00 85 0c 01 +>392ac1 00 21 0f a8 20 0d 00 23 MIDI_INSTRUMENT_TENSAX .text $00, $21, $0F, $A8, $20, $0D, $00, $23, $00, $7B, $0A, $01 +>392ac9 00 7b 0a 01 +>392acd 00 21 0f 88 04 09 00 26 MIDI_INSTRUMENT_BARISAX .text $00, $21, $0F, $88, $04, $09, $00, $26, $00, $79, $18, $01 +>392ad5 00 79 18 01 +>392ad9 00 31 18 8f 05 01 00 32 MIDI_INSTRUMENT_OBOE .text $00, $31, $18, $8F, $05, $01, $00, $32, $01, $73, $08, $00 +>392ae1 01 73 08 00 +>392ae5 00 a1 0a 8c 37 01 01 24 MIDI_INSTRUMENT_ENGLHORN .text $00, $A1, $0A, $8C, $37, $01, $01, $24, $04, $77, $0A, $00 +>392aed 04 77 0a 00 +>392af1 00 31 04 a8 67 0b 00 75 MIDI_INSTRUMENT_BASSOON .text $00, $31, $04, $A8, $67, $0B, $00, $75, $00, $51, $19, $00 +>392af9 00 51 19 00 +>392afd 00 a2 1f 77 26 01 01 21 MIDI_INSTRUMENT_CLARINET .text $00, $A2, $1F, $77, $26, $01, $01, $21, $01, $74, $09, $00 +>392b05 01 74 09 00 +>392b09 00 e1 07 b8 94 01 01 21 MIDI_INSTRUMENT_PICCOLO .text $00, $E1, $07, $B8, $94, $01, $01, $21, $01, $63, $28, $00 +>392b11 01 63 28 00 +>392b15 00 a1 93 87 59 01 00 e1 MIDI_INSTRUMENT_FLUTE1 .text $00, $A1, $93, $87, $59, $01, $00, $E1, $00, $65, $0A, $00 +>392b1d 00 65 0a 00 +>392b21 00 22 10 9f 38 01 00 61 MIDI_INSTRUMENT_RECORDER .text $00, $22, $10, $9F, $38, $01, $00, $61, $00, $67, $29, $00 +>392b29 00 67 29 00 +>392b2d 00 e2 0d 88 9a 01 01 21 MIDI_INSTRUMENT_PANFLUTE .text $00, $E2, $0D, $88, $9A, $01, $01, $21, $00, $67, $09, $00 +>392b35 00 67 09 00 +>392b39 00 a2 10 98 94 0f 00 21 MIDI_INSTRUMENT_BOTTLEB .text $00, $A2, $10, $98, $94, $0F, $00, $21, $01, $6A, $28, $00 +>392b41 01 6a 28 00 +>392b45 00 f1 1c 86 26 0f 00 f1 MIDI_INSTRUMENT_SHAKU .text $00, $F1, $1C, $86, $26, $0F, $00, $F1, $00, $55, $27, $00 +>392b4d 00 55 27 00 +>392b51 00 e1 3f 9f 09 00 00 e1 MIDI_INSTRUMENT_WHISTLE .text $00, $E1, $3F, $9F, $09, $00, $00, $E1, $00, $6F, $08, $00 +>392b59 00 6f 08 00 +>392b5d 00 e2 3b f7 19 01 00 21 MIDI_INSTRUMENT_OCARINA .text $00, $E2, $3B, $F7, $19, $01, $00, $21, $00, $7A, $07, $00 +>392b65 00 7a 07 00 +>392b69 00 22 1e 92 0c 0f 00 61 MIDI_INSTRUMENT_SQUARWAV .text $00, $22, $1E, $92, $0C, $0F, $00, $61, $06, $A2, $0D, $00 +>392b71 06 a2 0d 00 +>392b75 00 21 15 f4 22 0f 01 21 MIDI_INSTRUMENT_SAWWAV .text $00, $21, $15, $F4, $22, $0F, $01, $21, $00, $A3, $5F, $00 +>392b7d 00 a3 5f 00 +>392b81 00 f2 20 47 66 03 01 f1 MIDI_INSTRUMENT_SYNCALLI .text $00, $F2, $20, $47, $66, $03, $01, $F1, $00, $42, $27, $00 +>392b89 00 42 27 00 +>392b8d 00 61 19 88 28 0f 00 61 MIDI_INSTRUMENT_CHIFLEAD .text $00, $61, $19, $88, $28, $0F, $00, $61, $05, $B2, $49, $00 +>392b95 05 b2 49 00 +>392b99 00 21 16 82 1b 01 00 23 MIDI_INSTRUMENT_CHARANG .text $00, $21, $16, $82, $1B, $01, $00, $23, $00, $B2, $79, $01 +>392ba1 00 b2 79 01 +>392ba5 00 21 00 ca 93 01 00 22 MIDI_INSTRUMENT_SOLOVOX .text $00, $21, $00, $CA, $93, $01, $00, $22, $00, $7A, $1A, $00 +>392bad 00 7a 1a 00 +>392bb1 00 23 00 92 c9 08 01 22 MIDI_INSTRUMENT_FIFTHSAW .text $00, $23, $00, $92, $C9, $08, $01, $22, $00, $82, $28, $01 +>392bb9 00 82 28 01 +>392bbd 00 21 1d f3 7b 0f 00 22 MIDI_INSTRUMENT_BASSLEAD .text $00, $21, $1D, $F3, $7B, $0F, $00, $22, $02, $C3, $5F, $00 +>392bc5 02 c3 5f 00 +>392bc9 00 e1 00 81 25 00 01 a6 MIDI_INSTRUMENT_FANTASIA .text $00, $E1, $00, $81, $25, $00, $01, $A6, $86, $C4, $95, $01 +>392bd1 86 c4 95 01 +>392bd5 00 21 27 31 01 0f 00 21 MIDI_INSTRUMENT_WARMPAD .text $00, $21, $27, $31, $01, $0F, $00, $21, $00, $44, $15, $00 +>392bdd 00 44 15 00 +>392be1 00 60 14 83 35 0d 02 61 MIDI_INSTRUMENT_POLYSYN .text $00, $60, $14, $83, $35, $0D, $02, $61, $00, $D1, $06, $00 +>392be9 00 d1 06 00 +>392bed 00 e1 5c d3 01 01 01 62 MIDI_INSTRUMENT_SPACEVOX .text $00, $E1, $5C, $D3, $01, $01, $01, $62, $00, $82, $37, $00 +>392bf5 00 82 37 00 +>392bf9 00 28 38 34 86 01 02 21 MIDI_INSTRUMENT_BOWEDGLS .text $00, $28, $38, $34, $86, $01, $02, $21, $00, $41, $35, $00 +>392c01 00 41 35 00 +>392c05 00 24 12 52 f3 05 01 23 MIDI_INSTRUMENT_METALPAD .text $00, $24, $12, $52, $F3, $05, $01, $23, $02, $32, $F5, $01 +>392c0d 02 32 f5 01 +>392c11 00 61 1d 62 a6 0b 00 a1 MIDI_INSTRUMENT_HALOPAD .text $00, $61, $1D, $62, $A6, $0B, $00, $A1, $00, $61, $26, $00 +>392c19 00 61 26 00 +>392c1d 00 22 0f 22 d5 0b 01 21 MIDI_INSTRUMENT_SWEEPPAD .text $00, $22, $0F, $22, $D5, $0B, $01, $21, $84, $3F, $05, $01 +>392c25 84 3f 05 01 +>392c29 00 e3 1f f9 24 01 00 31 MIDI_INSTRUMENT_ICERAIN .text $00, $E3, $1F, $F9, $24, $01, $00, $31, $01, $D1, $F6, $00 +>392c31 01 d1 f6 00 +>392c35 00 63 00 41 55 06 01 a2 MIDI_INSTRUMENT_SOUNDTRK .text $00, $63, $00, $41, $55, $06, $01, $A2, $00, $41, $05, $01 +>392c3d 00 41 05 01 +>392c41 00 c7 25 a7 65 01 01 c1 MIDI_INSTRUMENT_CRYSTAL .text $00, $C7, $25, $A7, $65, $01, $01, $C1, $05, $F3, $E4, $00 +>392c49 05 f3 e4 00 +>392c4d 00 e3 19 f7 b7 01 01 61 MIDI_INSTRUMENT_ATMOSPH .text $00, $E3, $19, $F7, $B7, $01, $01, $61, $00, $92, $F5, $01 +>392c55 00 92 f5 01 +>392c59 00 66 9b a8 44 0f 00 41 MIDI_INSTRUMENT_BRIGHT .text $00, $66, $9B, $A8, $44, $0F, $00, $41, $04, $F2, $E4, $01 +>392c61 04 f2 e4 01 +>392c65 00 61 20 22 75 0d 00 61 MIDI_INSTRUMENT_GOBLIN .text $00, $61, $20, $22, $75, $0D, $00, $61, $00, $45, $25, $00 +>392c6d 00 45 25 00 +>392c71 00 e1 21 f6 84 0f 00 e1 MIDI_INSTRUMENT_ECHODROP .text $00, $E1, $21, $F6, $84, $0F, $00, $E1, $01, $A3, $36, $00 +>392c79 01 a3 36 00 +>392c7d 00 e2 14 73 64 0b 01 e1 MIDI_INSTRUMENT_STARTHEM .text $00, $E2, $14, $73, $64, $0B, $01, $E1, $01, $98, $05, $01 +>392c85 01 98 05 01 +>392c89 00 21 0b 72 34 09 00 24 MIDI_INSTRUMENT_SITAR .text $00, $21, $0B, $72, $34, $09, $00, $24, $02, $A3, $F6, $01 +>392c91 02 a3 f6 01 +>392c95 00 21 16 f4 53 0d 00 04 MIDI_INSTRUMENT_BANJO .text $00, $21, $16, $F4, $53, $0D, $00, $04, $00, $F6, $F8, $00 +>392c9d 00 f6 f8 00 +>392ca1 00 21 18 da 02 0d 00 35 MIDI_INSTRUMENT_SHAMISEN .text $00, $21, $18, $DA, $02, $0D, $00, $35, $00, $F3, $F5, $00 +>392ca9 00 f3 f5 00 +>392cad 00 25 0f fa 63 09 00 02 MIDI_INSTRUMENT_KOTO .text $00, $25, $0F, $FA, $63, $09, $00, $02, $00, $94, $E5, $01 +>392cb5 00 94 e5 01 +>392cb9 00 32 07 f9 96 01 00 11 MIDI_INSTRUMENT_KALIMBA .text $00, $32, $07, $F9, $96, $01, $00, $11, $00, $84, $44, $00 +>392cc1 00 84 44 00 +>392cc5 00 20 0e 97 18 09 02 25 MIDI_INSTRUMENT_BAGPIPE .text $00, $20, $0E, $97, $18, $09, $02, $25, $03, $83, $18, $01 +>392ccd 03 83 18 01 +>392cd1 00 61 18 f6 29 01 00 62 MIDI_INSTRUMENT_FIDDLE .text $00, $61, $18, $F6, $29, $01, $00, $62, $01, $78, $08, $01 +>392cd9 01 78 08 01 +>392cdd 00 e6 21 76 19 0b 00 61 MIDI_INSTRUMENT_SHANNAI .text $00, $E6, $21, $76, $19, $0B, $00, $61, $03, $8E, $08, $01 +>392ce5 03 8e 08 01 +>392ce9 00 27 23 f0 d4 01 00 05 MIDI_INSTRUMENT_TINKLBEL .text $00, $27, $23, $F0, $D4, $01, $00, $05, $09, $F2, $46, $00 +>392cf1 09 f2 46 00 +>392cf5 00 1c 0c f9 31 0f 01 15 MIDI_INSTRUMENT_AGOGO .text $00, $1C, $0C, $F9, $31, $0F, $01, $15, $00, $96, $E8, $01 +>392cfd 00 96 e8 01 +>392d01 00 02 00 75 16 06 02 01 MIDI_INSTRUMENT_STEELDRM .text $00, $02, $00, $75, $16, $06, $02, $01, $00, $F6, $F6, $01 +>392d09 00 f6 f6 01 +>392d0d 00 25 1b fa f2 01 00 12 MIDI_INSTRUMENT_WOODBLOK .text $00, $25, $1B, $FA, $F2, $01, $00, $12, $00, $F6, $9A, $00 +>392d15 00 f6 9a 00 +>392d19 00 02 1d f5 93 01 00 00 MIDI_INSTRUMENT_TAIKO .text $00, $02, $1D, $F5, $93, $01, $00, $00, $00, $C6, $45, $00 +>392d21 00 c6 45 00 +>392d25 00 11 15 f5 32 05 00 10 MIDI_INSTRUMENT_MELOTOM .text $00, $11, $15, $F5, $32, $05, $00, $10, $00, $F4, $B4, $00 +>392d2d 00 f4 b4 00 +>392d31 00 22 06 fa 99 09 00 01 MIDI_INSTRUMENT_SYNDRUM .text $00, $22, $06, $FA, $99, $09, $00, $01, $00, $D5, $25, $00 +>392d39 00 d5 25 00 +>392d3d 00 2e 00 ff 00 0f 02 0e MIDI_INSTRUMENT_REVRSCYM .text $00, $2E, $00, $FF, $00, $0F, $02, $0E, $0E, $21, $2D, $00 +>392d45 0e 21 2d 00 +>392d49 00 30 0b 56 e4 01 01 17 MIDI_INSTRUMENT_FRETNOIS .text $00, $30, $0B, $56, $E4, $01, $01, $17, $00, $55, $87, $02 +>392d51 00 55 87 02 +>392d55 00 24 00 ff 03 0d 00 05 MIDI_INSTRUMENT_BRTHNOIS .text $00, $24, $00, $FF, $03, $0D, $00, $05, $08, $98, $87, $01 +>392d5d 08 98 87 01 +>392d61 00 0e 00 f0 00 0f 02 0a MIDI_INSTRUMENT_SEASHORE .text $00, $0E, $00, $F0, $00, $0F, $02, $0A, $04, $17, $04, $03 +>392d69 04 17 04 03 +>392d6d 00 20 08 f6 f7 01 00 0e MIDI_INSTRUMENT_BIRDS .text $00, $20, $08, $F6, $F7, $01, $00, $0E, $05, $77, $F9, $02 +>392d75 05 77 f9 02 +>392d79 00 20 14 f1 08 01 00 2e MIDI_INSTRUMENT_TELEPHON .text $00, $20, $14, $F1, $08, $01, $00, $2E, $02, $F4, $08, $00 +>392d81 02 f4 08 00 +>392d85 00 20 04 f2 00 03 01 23 MIDI_INSTRUMENT_HELICOPT .text $00, $20, $04, $F2, $00, $03, $01, $23, $00, $36, $05, $01 +>392d8d 00 36 05 01 +>392d91 00 2e 00 ff 02 0f 00 2a MIDI_INSTRUMENT_APPLAUSE .text $00, $2E, $00, $FF, $02, $0F, $00, $2A, $05, $32, $55, $03 +>392d99 05 32 55 03 +>392d9d 00 20 00 a1 ef 0f 00 10 MIDI_INSTRUMENT_GUNSHOT .text $00, $20, $00, $A1, $EF, $0F, $00, $10, $00, $F3, $DF, $00 +>392da5 00 f3 df 00 +>392da9 a9 27 39 00 b5 27 39 00 midiInstruments .dword MIDI_INSTRUMENT_PIANO1, MIDI_INSTRUMENT_PIANO2, MIDI_INSTRUMENT_PIANO3, MIDI_INSTRUMENT_HONKTONK, MIDI_INSTRUMENT_EP1, MIDI_INSTRUMENT_EP2 +>392db1 c1 27 39 00 cd 27 39 00 d9 27 39 00 e5 27 39 00 +>392dc1 f1 27 39 00 fd 27 39 00 .dword MIDI_INSTRUMENT_HARPSIC, MIDI_INSTRUMENT_CLAVIC, MIDI_INSTRUMENT_CELESTA, MIDI_INSTRUMENT_GLOCK, MIDI_INSTRUMENT_MUSICBOX, MIDI_INSTRUMENT_VIBES +>392dc9 09 28 39 00 15 28 39 00 21 28 39 00 2d 28 39 00 +>392dd9 39 28 39 00 45 28 39 00 .dword MIDI_INSTRUMENT_MARIMBA, MIDI_INSTRUMENT_XYLO, MIDI_INSTRUMENT_TUBEBELL, MIDI_INSTRUMENT_SANTUR, MIDI_INSTRUMENT_ORGAN1, MIDI_INSTRUMENT_ORGAN2 +>392de1 51 28 39 00 5d 28 39 00 69 28 39 00 75 28 39 00 +>392df1 81 28 39 00 8d 28 39 00 .dword MIDI_INSTRUMENT_ORGAN3, MIDI_INSTRUMENT_PIPEORG, MIDI_INSTRUMENT_REEDORG, MIDI_INSTRUMENT_ACORDIAN, MIDI_INSTRUMENT_HARMONIC, MIDI_INSTRUMENT_BANDNEON +>392df9 99 28 39 00 a5 28 39 00 b1 28 39 00 bd 28 39 00 +>392e09 c9 28 39 00 d5 28 39 00 .dword MIDI_INSTRUMENT_NYLONGT, MIDI_INSTRUMENT_STEELGT, MIDI_INSTRUMENT_JAZZGT, MIDI_INSTRUMENT_CLEANGT, MIDI_INSTRUMENT_MUTEGT, MIDI_INSTRUMENT_OVERDGT +>392e11 e1 28 39 00 ed 28 39 00 f9 28 39 00 05 29 39 00 +>392e21 11 29 39 00 1d 29 39 00 .dword MIDI_INSTRUMENT_DISTGT, MIDI_INSTRUMENT_GTHARMS, MIDI_INSTRUMENT_ACOUBASS, MIDI_INSTRUMENT_FINGBASS, MIDI_INSTRUMENT_PICKBASS, MIDI_INSTRUMENT_FRETLESS +>392e29 29 29 39 00 35 29 39 00 41 29 39 00 4d 29 39 00 +>392e39 59 29 39 00 65 29 39 00 .dword MIDI_INSTRUMENT_SLAPBAS1, MIDI_INSTRUMENT_SLAPBAS2, MIDI_INSTRUMENT_SYNBASS1, MIDI_INSTRUMENT_SYNBASS2, MIDI_INSTRUMENT_VIOLIN, MIDI_INSTRUMENT_VIOLA +>392e41 71 29 39 00 7d 29 39 00 89 29 39 00 95 29 39 00 +>392e51 a1 29 39 00 ad 29 39 00 .dword MIDI_INSTRUMENT_CELLO, MIDI_INSTRUMENT_CONTRAB, MIDI_INSTRUMENT_TREMSTR, MIDI_INSTRUMENT_PIZZ, MIDI_INSTRUMENT_HARP, MIDI_INSTRUMENT_TIMPANI +>392e59 b9 29 39 00 c5 29 39 00 d1 29 39 00 dd 29 39 00 +>392e69 e9 29 39 00 f5 29 39 00 .dword MIDI_INSTRUMENT_STRINGS, MIDI_INSTRUMENT_SLOWSTR, MIDI_INSTRUMENT_SYNSTR1, MIDI_INSTRUMENT_SYNSTR2, MIDI_INSTRUMENT_CHOIR, MIDI_INSTRUMENT_OOHS +>392e71 01 2a 39 00 0d 2a 39 00 19 2a 39 00 25 2a 39 00 +>392e81 31 2a 39 00 3d 2a 39 00 .dword MIDI_INSTRUMENT_SYNVOX, MIDI_INSTRUMENT_ORCHIT, MIDI_INSTRUMENT_TRUMPET, MIDI_INSTRUMENT_TROMBONE, MIDI_INSTRUMENT_TUBA, MIDI_INSTRUMENT_MUTETRP +>392e89 49 2a 39 00 55 2a 39 00 61 2a 39 00 6d 2a 39 00 +>392e99 79 2a 39 00 85 2a 39 00 .dword MIDI_INSTRUMENT_FRHORN, MIDI_INSTRUMENT_BRASS1, MIDI_INSTRUMENT_SYNBRAS1, MIDI_INSTRUMENT_SYNBRAS2, MIDI_INSTRUMENT_SOPSAX, MIDI_INSTRUMENT_ALTOSAX +>392ea1 91 2a 39 00 9d 2a 39 00 a9 2a 39 00 b5 2a 39 00 +>392eb1 c1 2a 39 00 cd 2a 39 00 .dword MIDI_INSTRUMENT_TENSAX, MIDI_INSTRUMENT_BARISAX, MIDI_INSTRUMENT_OBOE, MIDI_INSTRUMENT_ENGLHORN, MIDI_INSTRUMENT_BASSOON, MIDI_INSTRUMENT_CLARINET +>392eb9 d9 2a 39 00 e5 2a 39 00 f1 2a 39 00 fd 2a 39 00 +>392ec9 09 2b 39 00 15 2b 39 00 .dword MIDI_INSTRUMENT_PICCOLO, MIDI_INSTRUMENT_FLUTE1, MIDI_INSTRUMENT_RECORDER, MIDI_INSTRUMENT_PANFLUTE, MIDI_INSTRUMENT_BOTTLEB, MIDI_INSTRUMENT_SHAKU +>392ed1 21 2b 39 00 2d 2b 39 00 39 2b 39 00 45 2b 39 00 +>392ee1 51 2b 39 00 5d 2b 39 00 .dword MIDI_INSTRUMENT_WHISTLE, MIDI_INSTRUMENT_OCARINA, MIDI_INSTRUMENT_SQUARWAV, MIDI_INSTRUMENT_SAWWAV, MIDI_INSTRUMENT_SYNCALLI, MIDI_INSTRUMENT_CHIFLEAD +>392ee9 69 2b 39 00 75 2b 39 00 81 2b 39 00 8d 2b 39 00 +>392ef9 99 2b 39 00 a5 2b 39 00 .dword MIDI_INSTRUMENT_CHARANG, MIDI_INSTRUMENT_SOLOVOX, MIDI_INSTRUMENT_FIFTHSAW, MIDI_INSTRUMENT_BASSLEAD, MIDI_INSTRUMENT_FANTASIA, MIDI_INSTRUMENT_WARMPAD +>392f01 b1 2b 39 00 bd 2b 39 00 c9 2b 39 00 d5 2b 39 00 +>392f11 e1 2b 39 00 ed 2b 39 00 .dword MIDI_INSTRUMENT_POLYSYN, MIDI_INSTRUMENT_SPACEVOX, MIDI_INSTRUMENT_BOWEDGLS, MIDI_INSTRUMENT_METALPAD, MIDI_INSTRUMENT_HALOPAD, MIDI_INSTRUMENT_SWEEPPAD +>392f19 f9 2b 39 00 05 2c 39 00 11 2c 39 00 1d 2c 39 00 +>392f29 29 2c 39 00 35 2c 39 00 .dword MIDI_INSTRUMENT_ICERAIN, MIDI_INSTRUMENT_SOUNDTRK, MIDI_INSTRUMENT_CRYSTAL, MIDI_INSTRUMENT_ATMOSPH, MIDI_INSTRUMENT_BRIGHT, MIDI_INSTRUMENT_GOBLIN +>392f31 41 2c 39 00 4d 2c 39 00 59 2c 39 00 65 2c 39 00 +>392f41 71 2c 39 00 7d 2c 39 00 .dword MIDI_INSTRUMENT_ECHODROP, MIDI_INSTRUMENT_STARTHEM, MIDI_INSTRUMENT_SITAR, MIDI_INSTRUMENT_BANJO, MIDI_INSTRUMENT_SHAMISEN, MIDI_INSTRUMENT_KOTO +>392f49 89 2c 39 00 95 2c 39 00 a1 2c 39 00 ad 2c 39 00 +>392f59 b9 2c 39 00 c5 2c 39 00 .dword MIDI_INSTRUMENT_KALIMBA, MIDI_INSTRUMENT_BAGPIPE, MIDI_INSTRUMENT_FIDDLE, MIDI_INSTRUMENT_SHANNAI, MIDI_INSTRUMENT_TINKLBEL, MIDI_INSTRUMENT_AGOGO +>392f61 d1 2c 39 00 dd 2c 39 00 e9 2c 39 00 f5 2c 39 00 +>392f71 01 2d 39 00 0d 2d 39 00 .dword MIDI_INSTRUMENT_STEELDRM, MIDI_INSTRUMENT_WOODBLOK, MIDI_INSTRUMENT_TAIKO, MIDI_INSTRUMENT_MELOTOM, MIDI_INSTRUMENT_SYNDRUM, MIDI_INSTRUMENT_REVRSCYM +>392f79 19 2d 39 00 25 2d 39 00 31 2d 39 00 3d 2d 39 00 +>392f89 49 2d 39 00 55 2d 39 00 .dword MIDI_INSTRUMENT_FRETNOIS, MIDI_INSTRUMENT_BRTHNOIS, MIDI_INSTRUMENT_SEASHORE, MIDI_INSTRUMENT_BIRDS, MIDI_INSTRUMENT_TELEPHON, MIDI_INSTRUMENT_HELICOPT +>392f91 61 2d 39 00 6d 2d 39 00 79 2d 39 00 85 2d 39 00 +>392fa1 91 2d 39 00 9d 2d 39 00 .dword MIDI_INSTRUMENT_APPLAUSE, MIDI_INSTRUMENT_GUNSHOT ;****** Return to file: src\OPL2_Library.asm ;****** Processing file: src\OPL2_Midi_Instruments_Win31.asm ->392f57 00 01 8f f2 f4 38 00 01 MIDIW31_INSTRUMENT_PIANO1 .text $00, $01, $8F, $F2, $F4, $38, $00, $01, $0D, $F2, $F7, $00 ->392f5f 0d f2 f7 00 ->392f63 00 01 4b f2 f4 38 00 01 MIDIW31_INSTRUMENT_PIANO2 .text $00, $01, $4B, $F2, $F4, $38, $00, $01, $07, $F2, $F7, $00 ->392f6b 07 f2 f7 00 ->392f6f 00 01 49 f2 f4 38 00 01 MIDIW31_INSTRUMENT_PIANO3 .text $00, $01, $49, $F2, $F4, $38, $00, $01, $07, $F2, $F6, $00 ->392f77 07 f2 f6 00 ->392f7b 00 81 12 f2 f7 00 00 41 MIDIW31_INSTRUMENT_HONKTONK .text $00, $81, $12, $F2, $F7, $00, $00, $41, $07, $F2, $F7, $00 ->392f83 07 f2 f7 00 ->392f87 00 01 57 f1 f7 00 00 01 MIDIW31_INSTRUMENT_EP1 .text $00, $01, $57, $F1, $F7, $00, $00, $01, $07, $F2, $F7, $00 ->392f8f 07 f2 f7 00 ->392f93 00 01 93 f1 f7 00 00 01 MIDIW31_INSTRUMENT_EP2 .text $00, $01, $93, $F1, $F7, $00, $00, $01, $07, $F2, $F7, $00 ->392f9b 07 f2 f7 00 ->392f9f 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_HARPSIC .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->392fa7 00 00 00 00 ->392fab 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CLAVIC .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->392fb3 00 00 00 00 ->392fb7 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CELESTA .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->392fbf 00 00 00 00 ->392fc3 00 07 97 f3 f2 32 00 11 MIDIW31_INSTRUMENT_GLOCK .text $00, $07, $97, $F3, $F2, $32, $00, $11, $87, $F2, $F1, $00 ->392fcb 87 f2 f1 00 ->392fcf 00 17 21 54 f4 32 00 01 MIDIW31_INSTRUMENT_MUSICBOX .text $00, $17, $21, $54, $F4, $32, $00, $01, $07, $F4, $F4, $00 ->392fd7 07 f4 f4 00 ->392fdb 00 98 62 f3 f6 30 00 81 MIDIW31_INSTRUMENT_VIBES .text $00, $98, $62, $F3, $F6, $30, $00, $81, $07, $F2, $F6, $00 ->392fe3 07 f2 f6 00 ->392fe7 00 18 23 f6 f6 00 00 01 MIDIW31_INSTRUMENT_MARIMBA .text $00, $18, $23, $F6, $F6, $00, $00, $01, $07, $E7, $F7, $00 ->392fef 07 e7 f7 00 ->392ff3 00 15 91 f6 f6 00 00 01 MIDIW31_INSTRUMENT_XYLO .text $00, $15, $91, $F6, $F6, $00, $00, $01, $07, $F6, $F6, $00 ->392ffb 07 f6 f6 00 ->392fff 00 45 59 d3 f3 00 00 81 MIDIW31_INSTRUMENT_TUBEBELL .text $00, $45, $59, $D3, $F3, $00, $00, $81, $87, $A3, $F3, $00 ->393007 87 a3 f3 00 ->39300b 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SANTUR .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393013 00 00 00 00 ->393017 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_ORGAN1 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39301f 00 00 00 00 ->393023 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_ORGAN2 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39302b 00 00 00 00 ->39302f 00 70 44 aa 18 34 00 b1 MIDIW31_INSTRUMENT_ORGAN3 .text $00, $70, $44, $AA, $18, $34, $00, $B1, $07, $8A, $08, $00 ->393037 07 8a 08 00 ->39303b 00 23 93 97 23 34 01 b1 MIDIW31_INSTRUMENT_PIPEORG .text $00, $23, $93, $97, $23, $34, $01, $B1, $07, $55, $14, $00 ->393043 07 55 14 00 ->393047 00 61 13 97 04 30 01 b1 MIDIW31_INSTRUMENT_REEDORG .text $00, $61, $13, $97, $04, $30, $01, $B1, $87, $55, $04, $00 ->39304f 87 55 04 00 ->393053 00 24 48 98 2a 30 01 b1 MIDIW31_INSTRUMENT_ACORDIAN .text $00, $24, $48, $98, $2A, $30, $01, $B1, $07, $46, $1A, $00 ->39305b 07 46 1a 00 ->39305f 00 61 13 91 06 00 01 21 MIDIW31_INSTRUMENT_HARMONIC .text $00, $61, $13, $91, $06, $00, $01, $21, $07, $61, $07, $00 ->393067 07 61 07 00 ->39306b 00 21 13 71 06 00 00 a1 MIDIW31_INSTRUMENT_BANDNEON .text $00, $21, $13, $71, $06, $00, $00, $A1, $90, $61, $07, $00 ->393073 90 61 07 00 ->393077 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_NYLONGT .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39307f 00 00 00 00 ->393083 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_STEELGT .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39308b 00 00 00 00 ->39308f 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_JAZZGT .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393097 00 00 00 00 ->39309b 00 03 87 f6 22 36 01 21 MIDIW31_INSTRUMENT_CLEANGT .text $00, $03, $87, $F6, $22, $36, $01, $21, $87, $F3, $F8, $00 ->3930a3 87 f3 f8 00 ->3930a7 00 03 47 f9 54 30 00 21 MIDIW31_INSTRUMENT_MUTEGT .text $00, $03, $47, $F9, $54, $30, $00, $21, $07, $F6, $3A, $00 ->3930af 07 f6 3a 00 ->3930b3 00 23 4a 91 41 38 01 21 MIDIW31_INSTRUMENT_OVERDGT .text $00, $23, $4A, $91, $41, $38, $01, $21, $0C, $84, $19, $00 ->3930bb 0c 84 19 00 ->3930bf 00 23 4a 95 19 32 01 21 MIDIW31_INSTRUMENT_DISTGT .text $00, $23, $4A, $95, $19, $32, $01, $21, $07, $94, $19, $00 ->3930c7 07 94 19 00 ->3930cb 00 09 a1 20 4f 00 00 84 MIDIW31_INSTRUMENT_GTHARMS .text $00, $09, $A1, $20, $4F, $00, $00, $84, $87, $D1, $F8, $00 ->3930d3 87 d1 f8 00 ->3930d7 00 21 1e 94 06 00 00 a2 MIDIW31_INSTRUMENT_ACOUBASS .text $00, $21, $1E, $94, $06, $00, $00, $A2, $07, $C3, $A6, $00 ->3930df 07 c3 a6 00 ->3930e3 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_FINGBASS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3930eb 00 00 00 00 ->3930ef 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_PICKBASS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3930f7 00 00 00 00 ->3930fb 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_FRETLESS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393103 00 00 00 00 ->393107 00 01 8b a1 9a 38 00 21 MIDIW31_INSTRUMENT_SLAPBAS1 .text $00, $01, $8B, $A1, $9A, $38, $00, $21, $47, $F2, $DF, $00 ->39310f 47 f2 df 00 ->393113 00 21 8b a2 16 38 00 21 MIDIW31_INSTRUMENT_SLAPBAS2 .text $00, $21, $8B, $A2, $16, $38, $00, $21, $0F, $A1, $DF, $00 ->39311b 0f a1 df 00 ->39311f 00 31 8b f4 e8 3a 00 31 MIDIW31_INSTRUMENT_SYNBASS1 .text $00, $31, $8B, $F4, $E8, $3A, $00, $31, $07, $F1, $78, $00 ->393127 07 f1 78 00 ->39312b 00 31 12 f1 28 30 00 31 MIDIW31_INSTRUMENT_SYNBASS2 .text $00, $31, $12, $F1, $28, $30, $00, $31, $07, $F1, $18, $00 ->393133 07 f1 18 00 ->393137 00 31 15 dd 13 00 01 21 MIDIW31_INSTRUMENT_VIOLIN .text $00, $31, $15, $DD, $13, $00, $01, $21, $07, $56, $26, $00 ->39313f 07 56 26 00 ->393143 00 31 16 dd 13 00 01 21 MIDIW31_INSTRUMENT_VIOLA .text $00, $31, $16, $DD, $13, $00, $01, $21, $07, $66, $06, $00 ->39314b 07 66 06 00 ->39314f 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CELLO .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393157 00 00 00 00 ->39315b 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CONTRAB .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393163 00 00 00 00 ->393167 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_TREMSTR .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39316f 00 00 00 00 ->393173 00 02 1a f5 75 30 01 01 MIDIW31_INSTRUMENT_PIZZ .text $00, $02, $1A, $F5, $75, $30, $01, $01, $87, $85, $35, $00 ->39317b 87 85 35 00 ->39317f 00 02 1d f5 75 30 01 01 MIDIW31_INSTRUMENT_HARP .text $00, $02, $1D, $F5, $75, $30, $01, $01, $87, $F3, $F4, $00 ->393187 87 f3 f4 00 ->39318b 00 10 41 f5 05 32 01 11 MIDIW31_INSTRUMENT_TIMPANI .text $00, $10, $41, $F5, $05, $32, $01, $11, $07, $F2, $C3, $00 ->393193 07 f2 c3 00 ->393197 00 21 9b b1 25 3c 01 a2 MIDIW31_INSTRUMENT_STRINGS .text $00, $21, $9B, $B1, $25, $3C, $01, $A2, $08, $72, $08, $00 ->39319f 08 72 08 00 ->3931a3 00 a1 98 7f 03 00 01 21 MIDIW31_INSTRUMENT_SLOWSTR .text $00, $A1, $98, $7F, $03, $00, $01, $21, $07, $3F, $07, $01 ->3931ab 07 3f 07 01 ->3931af 00 a1 93 c1 12 00 00 61 MIDIW31_INSTRUMENT_SYNSTR1 .text $00, $A1, $93, $C1, $12, $00, $00, $61, $07, $4F, $05, $00 ->3931b7 07 4f 05 00 ->3931bb 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SYNSTR2 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3931c3 00 00 00 00 ->3931c7 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CHOIR .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3931cf 00 00 00 00 ->3931d3 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_OOHS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3931db 00 00 00 00 ->3931df 00 71 57 54 05 3c 00 72 MIDIW31_INSTRUMENT_SYNVOX .text $00, $71, $57, $54, $05, $3C, $00, $72, $07, $7A, $05, $00 ->3931e7 07 7a 05 00 ->3931eb 00 90 00 54 63 38 00 41 MIDIW31_INSTRUMENT_ORCHIT .text $00, $90, $00, $54, $63, $38, $00, $41, $07, $A5, $45, $00 ->3931f3 07 a5 45 00 ->3931f7 00 21 92 85 17 3c 00 21 MIDIW31_INSTRUMENT_TRUMPET .text $00, $21, $92, $85, $17, $3C, $00, $21, $08, $8F, $09, $00 ->3931ff 08 8f 09 00 ->393203 00 21 94 75 17 32 00 21 MIDIW31_INSTRUMENT_TROMBONE .text $00, $21, $94, $75, $17, $32, $00, $21, $0C, $8F, $09, $00 ->39320b 0c 8f 09 00 ->39320f 00 21 94 76 15 00 00 61 MIDIW31_INSTRUMENT_TUBA .text $00, $21, $94, $76, $15, $00, $00, $61, $07, $82, $37, $00 ->393217 07 82 37 00 ->39321b 00 31 43 9e 17 00 01 21 MIDIW31_INSTRUMENT_MUTETRP .text $00, $31, $43, $9E, $17, $00, $01, $21, $07, $62, $2C, $01 ->393223 07 62 2c 01 ->393227 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_FRHORN .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39322f 00 00 00 00 ->393233 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BRASS1 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39323b 00 00 00 00 ->39323f 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SYNBRAS1 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393247 00 00 00 00 ->39324b 00 21 4d 54 3c 38 00 21 MIDIW31_INSTRUMENT_SYNBRAS2 .text $00, $21, $4D, $54, $3C, $38, $00, $21, $07, $A6, $1C, $00 ->393253 07 a6 1c 00 ->393257 00 31 8f 93 02 38 01 61 MIDIW31_INSTRUMENT_SOPSAX .text $00, $31, $8F, $93, $02, $38, $01, $61, $07, $72, $0B, $00 ->39325f 07 72 0b 00 ->393263 00 31 8e 93 03 38 01 61 MIDIW31_INSTRUMENT_ALTOSAX .text $00, $31, $8E, $93, $03, $38, $01, $61, $07, $72, $09, $00 ->39326b 07 72 09 00 ->39326f 00 31 91 93 03 30 01 61 MIDIW31_INSTRUMENT_TENSAX .text $00, $31, $91, $93, $03, $30, $01, $61, $07, $82, $09, $00 ->393277 07 82 09 00 ->39327b 00 31 8e 93 0f 00 01 61 MIDIW31_INSTRUMENT_BARISAX .text $00, $31, $8E, $93, $0F, $00, $01, $61, $07, $72, $0F, $00 ->393283 07 72 0f 00 ->393287 00 21 4b aa 16 00 01 21 MIDIW31_INSTRUMENT_OBOE .text $00, $21, $4B, $AA, $16, $00, $01, $21, $07, $8F, $0A, $00 ->39328f 07 8f 0a 00 ->393293 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_ENGLHORN .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39329b 00 00 00 00 ->39329f 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BASSOON .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3932a7 00 00 00 00 ->3932ab 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CLARINET .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3932b3 00 00 00 00 ->3932b7 00 e1 1f 85 5f 30 00 e1 MIDIW31_INSTRUMENT_PICCOLO .text $00, $E1, $1F, $85, $5F, $30, $00, $E1, $07, $65, $1A, $00 ->3932bf 07 65 1a 00 ->3932c3 00 e1 46 88 5f 30 00 e1 MIDIW31_INSTRUMENT_FLUTE1 .text $00, $E1, $46, $88, $5F, $30, $00, $E1, $07, $65, $1A, $00 ->3932cb 07 65 1a 00 ->3932cf 00 a1 9c 75 1f 32 00 21 MIDIW31_INSTRUMENT_RECORDER .text $00, $A1, $9C, $75, $1F, $32, $00, $21, $07, $75, $0A, $00 ->3932d7 07 75 0a 00 ->3932db 00 31 8b 84 58 30 00 21 MIDIW31_INSTRUMENT_PANFLUTE .text $00, $31, $8B, $84, $58, $30, $00, $21, $07, $65, $1A, $00 ->3932e3 07 65 1a 00 ->3932e7 00 e1 4c 66 56 00 00 a1 MIDIW31_INSTRUMENT_BOTTLEB .text $00, $E1, $4C, $66, $56, $00, $00, $A1, $07, $65, $26, $00 ->3932ef 07 65 26 00 ->3932f3 00 62 cb 76 46 00 00 a1 MIDIW31_INSTRUMENT_SHAKU .text $00, $62, $CB, $76, $46, $00, $00, $A1, $07, $55, $36, $00 ->3932fb 07 55 36 00 ->3932ff 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_WHISTLE .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393307 00 00 00 00 ->39330b 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_OCARINA .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393313 00 00 00 00 ->393317 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SQUARWAV .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39331f 00 00 00 00 ->393323 00 21 0e ff 0f 30 01 21 MIDIW31_INSTRUMENT_SAWWAV .text $00, $21, $0E, $FF, $0F, $30, $01, $21, $07, $FF, $0F, $01 ->39332b 07 ff 0f 01 ->39332f 00 22 46 86 55 30 00 21 MIDIW31_INSTRUMENT_SYNCALLI .text $00, $22, $46, $86, $55, $30, $00, $21, $87, $64, $18, $00 ->393337 87 64 18 00 ->39333b 00 21 45 66 12 30 00 a1 MIDIW31_INSTRUMENT_CHIFLEAD .text $00, $21, $45, $66, $12, $30, $00, $A1, $07, $96, $0A, $00 ->393343 07 96 0a 00 ->393347 00 21 8b 92 2a 34 01 22 MIDIW31_INSTRUMENT_CHARANG .text $00, $21, $8B, $92, $2A, $34, $01, $22, $07, $91, $2A, $00 ->39334f 07 91 2a 00 ->393353 00 a2 9e df 05 00 00 61 MIDIW31_INSTRUMENT_SOLOVOX .text $00, $A2, $9E, $DF, $05, $00, $00, $61, $47, $6F, $07, $00 ->39335b 47 6f 07 00 ->39335f 00 20 1a ef 01 00 00 60 MIDIW31_INSTRUMENT_FIFTHSAW .text $00, $20, $1A, $EF, $01, $00, $00, $60, $07, $8F, $06, $02 ->393367 07 8f 06 02 ->39336b 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BASSLEAD .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393373 00 00 00 00 ->393377 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_FANTASIA .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39337f 00 00 00 00 ->393383 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_WARMPAD .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39338b 00 00 00 00 ->39338f 00 61 17 91 34 3c 00 61 MIDIW31_INSTRUMENT_POLYSYN .text $00, $61, $17, $91, $34, $3C, $00, $61, $07, $55, $16, $00 ->393397 07 55 16 00 ->39339b 00 71 5d 54 01 30 00 72 MIDIW31_INSTRUMENT_SPACEVOX .text $00, $71, $5D, $54, $01, $30, $00, $72, $07, $6A, $03, $00 ->3933a3 07 6a 03 00 ->3933a7 00 21 97 21 43 38 00 a2 MIDIW31_INSTRUMENT_BOWEDGLS .text $00, $21, $97, $21, $43, $38, $00, $A2, $07, $42, $35, $00 ->3933af 07 42 35 00 ->3933b3 00 a1 1c a1 77 30 01 21 MIDIW31_INSTRUMENT_METALPAD .text $00, $A1, $1C, $A1, $77, $30, $01, $21, $07, $31, $47, $01 ->3933bb 07 31 47 01 ->3933bf 00 21 89 11 33 00 00 61 MIDIW31_INSTRUMENT_HALOPAD .text $00, $21, $89, $11, $33, $00, $00, $61, $0A, $42, $25, $00 ->3933c7 0a 42 25 00 ->3933cb 00 a1 15 11 47 00 01 21 MIDIW31_INSTRUMENT_SWEEPPAD .text $00, $A1, $15, $11, $47, $00, $01, $21, $07, $CF, $07, $00 ->3933d3 07 cf 07 00 ->3933d7 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_ICERAIN .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3933df 00 00 00 00 ->3933e3 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SOUNDTRK .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3933eb 00 00 00 00 ->3933ef 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CRYSTAL .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3933f7 00 00 00 00 ->3933fb 00 22 92 b1 81 3c 00 61 MIDIW31_INSTRUMENT_ATMOSPH .text $00, $22, $92, $B1, $81, $3C, $00, $61, $8A, $F2, $26, $00 ->393403 8a f2 26 00 ->393407 00 41 4d f1 51 30 01 42 MIDIW31_INSTRUMENT_BRIGHT .text $00, $41, $4D, $F1, $51, $30, $01, $42, $07, $F2, $F5, $00 ->39340f 07 f2 f5 00 ->393413 00 61 94 11 51 36 01 a3 MIDIW31_INSTRUMENT_GOBLIN .text $00, $61, $94, $11, $51, $36, $01, $A3, $87, $11, $13, $00 ->39341b 87 11 13 00 ->39341f 00 61 8c 11 31 3a 00 a1 MIDIW31_INSTRUMENT_ECHODROP .text $00, $61, $8C, $11, $31, $3A, $00, $A1, $87, $1D, $03, $00 ->393427 87 1d 03 00 ->39342b 00 a4 4c f3 73 00 01 61 MIDIW31_INSTRUMENT_STARTHEM .text $00, $A4, $4C, $F3, $73, $00, $01, $61, $07, $81, $23, $00 ->393433 07 81 23 00 ->393437 00 02 85 d2 53 00 00 07 MIDIW31_INSTRUMENT_SITAR .text $00, $02, $85, $D2, $53, $00, $00, $07, $0A, $F2, $F6, $01 ->39343f 0a f2 f6 01 ->393443 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BANJO .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39344b 00 00 00 00 ->39344f 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SHAMISEN .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393457 00 00 00 00 ->39345b 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_KOTO .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393463 00 00 00 00 ->393467 00 04 4f fa 56 3c 00 01 MIDIW31_INSTRUMENT_KALIMBA .text $00, $04, $4F, $FA, $56, $3C, $00, $01, $07, $C2, $05, $00 ->39346f 07 c2 05 00 ->393473 00 21 49 7c 20 36 00 22 MIDIW31_INSTRUMENT_BAGPIPE .text $00, $21, $49, $7C, $20, $36, $00, $22, $07, $6F, $0C, $01 ->39347b 07 6f 0c 01 ->39347f 00 31 85 dd 33 3a 01 21 MIDIW31_INSTRUMENT_FIDDLE .text $00, $31, $85, $DD, $33, $3A, $01, $21, $07, $56, $16, $00 ->393487 07 56 16 00 ->39348b 00 20 04 da 05 30 02 21 MIDIW31_INSTRUMENT_SHANNAI .text $00, $20, $04, $DA, $05, $30, $02, $21, $88, $8F, $0B, $00 ->393493 88 8f 0b 00 ->393497 00 05 6a f1 e5 00 00 03 MIDIW31_INSTRUMENT_TINKLBEL .text $00, $05, $6A, $F1, $E5, $00, $00, $03, $87, $C3, $E5, $00 ->39349f 87 c3 e5 00 ->3934a3 00 07 15 ec 26 00 00 02 MIDIW31_INSTRUMENT_AGOGO .text $00, $07, $15, $EC, $26, $00, $00, $02, $07, $F8, $16, $00 ->3934ab 07 f8 16 00 ->3934af 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_STEELDRM .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3934b7 00 00 00 00 ->3934bb 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_WOODBLOK .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3934c3 00 00 00 00 ->3934c7 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_TAIKO .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->3934cf 00 00 00 00 ->3934d3 00 11 41 f8 47 34 02 10 MIDIW31_INSTRUMENT_MELOTOM .text $00, $11, $41, $F8, $47, $34, $02, $10, $0A, $F3, $03, $00 ->3934db 0a f3 03 00 ->3934df 00 01 8e f1 06 3e 02 10 MIDIW31_INSTRUMENT_SYNDRUM .text $00, $01, $8E, $F1, $06, $3E, $02, $10, $07, $F3, $02, $00 ->3934e7 07 f3 02 00 ->3934eb 00 0e 00 1f 00 3e 00 c0 MIDIW31_INSTRUMENT_REVRSCYM .text $00, $0E, $00, $1F, $00, $3E, $00, $C0, $07, $1F, $FF, $03 ->3934f3 07 1f ff 03 ->3934f7 00 06 80 f8 24 38 00 03 MIDIW31_INSTRUMENT_FRETNOIS .text $00, $06, $80, $F8, $24, $38, $00, $03, $8F, $56, $84, $02 ->3934ff 8f 56 84 02 ->393503 00 0e 00 f8 00 00 00 d0 MIDIW31_INSTRUMENT_BRTHNOIS .text $00, $0E, $00, $F8, $00, $00, $00, $D0, $0C, $34, $04, $03 ->39350b 0c 34 04 03 ->39350f 00 0e 00 f6 00 00 00 c0 MIDIW31_INSTRUMENT_SEASHORE .text $00, $0E, $00, $F6, $00, $00, $00, $C0, $07, $1F, $02, $03 ->393517 07 1f 02 03 ->39351b 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BIRDS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->393523 00 00 00 00 ->393527 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_TELEPHON .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39352f 00 00 00 00 ->393533 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_HELICOPT .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ->39353b 00 00 00 00 ->39353f 00 26 00 ff 01 3e 00 e4 MIDIW31_INSTRUMENT_APPLAUSE .text $00, $26, $00, $FF, $01, $3E, $00, $E4, $07, $12, $16, $01 ->393547 07 12 16 01 ->39354b 00 00 00 f3 f0 3e 00 00 MIDIW31_INSTRUMENT_GUNSHOT .text $00, $00, $00, $F3, $F0, $3E, $00, $00, $07, $F6, $C9, $02 ->393553 07 f6 c9 02 ->393557 57 2f 39 00 63 2f 39 00 midiInstrumentsw31 .dword MIDIW31_INSTRUMENT_PIANO1, MIDIW31_INSTRUMENT_PIANO2, MIDIW31_INSTRUMENT_PIANO3, MIDIW31_INSTRUMENT_HONKTONK, MIDIW31_INSTRUMENT_EP1, MIDIW31_INSTRUMENT_EP2 ->39355f 6f 2f 39 00 7b 2f 39 00 87 2f 39 00 93 2f 39 00 ->39356f 9f 2f 39 00 ab 2f 39 00 .dword MIDIW31_INSTRUMENT_HARPSIC, MIDIW31_INSTRUMENT_CLAVIC, MIDIW31_INSTRUMENT_CELESTA, MIDIW31_INSTRUMENT_GLOCK, MIDIW31_INSTRUMENT_MUSICBOX, MIDIW31_INSTRUMENT_VIBES ->393577 b7 2f 39 00 c3 2f 39 00 cf 2f 39 00 db 2f 39 00 ->393587 e7 2f 39 00 f3 2f 39 00 .dword MIDIW31_INSTRUMENT_MARIMBA, MIDIW31_INSTRUMENT_XYLO, MIDIW31_INSTRUMENT_TUBEBELL, MIDIW31_INSTRUMENT_SANTUR, MIDIW31_INSTRUMENT_ORGAN1, MIDIW31_INSTRUMENT_ORGAN2 ->39358f ff 2f 39 00 0b 30 39 00 17 30 39 00 23 30 39 00 ->39359f 2f 30 39 00 3b 30 39 00 .dword MIDIW31_INSTRUMENT_ORGAN3, MIDIW31_INSTRUMENT_PIPEORG, MIDIW31_INSTRUMENT_REEDORG, MIDIW31_INSTRUMENT_ACORDIAN, MIDIW31_INSTRUMENT_HARMONIC, MIDIW31_INSTRUMENT_BANDNEON ->3935a7 47 30 39 00 53 30 39 00 5f 30 39 00 6b 30 39 00 ->3935b7 77 30 39 00 83 30 39 00 .dword MIDIW31_INSTRUMENT_NYLONGT, MIDIW31_INSTRUMENT_STEELGT, MIDIW31_INSTRUMENT_JAZZGT, MIDIW31_INSTRUMENT_CLEANGT, MIDIW31_INSTRUMENT_MUTEGT, MIDIW31_INSTRUMENT_OVERDGT ->3935bf 8f 30 39 00 9b 30 39 00 a7 30 39 00 b3 30 39 00 ->3935cf bf 30 39 00 cb 30 39 00 .dword MIDIW31_INSTRUMENT_DISTGT, MIDIW31_INSTRUMENT_GTHARMS, MIDIW31_INSTRUMENT_ACOUBASS, MIDIW31_INSTRUMENT_FINGBASS, MIDIW31_INSTRUMENT_PICKBASS, MIDIW31_INSTRUMENT_FRETLESS ->3935d7 d7 30 39 00 e3 30 39 00 ef 30 39 00 fb 30 39 00 ->3935e7 07 31 39 00 13 31 39 00 .dword MIDIW31_INSTRUMENT_SLAPBAS1, MIDIW31_INSTRUMENT_SLAPBAS2, MIDIW31_INSTRUMENT_SYNBASS1, MIDIW31_INSTRUMENT_SYNBASS2, MIDIW31_INSTRUMENT_VIOLIN, MIDIW31_INSTRUMENT_VIOLA ->3935ef 1f 31 39 00 2b 31 39 00 37 31 39 00 43 31 39 00 ->3935ff 4f 31 39 00 5b 31 39 00 .dword MIDIW31_INSTRUMENT_CELLO, MIDIW31_INSTRUMENT_CONTRAB, MIDIW31_INSTRUMENT_TREMSTR, MIDIW31_INSTRUMENT_PIZZ, MIDIW31_INSTRUMENT_HARP, MIDIW31_INSTRUMENT_TIMPANI ->393607 67 31 39 00 73 31 39 00 7f 31 39 00 8b 31 39 00 ->393617 97 31 39 00 a3 31 39 00 .dword MIDIW31_INSTRUMENT_STRINGS, MIDIW31_INSTRUMENT_SLOWSTR, MIDIW31_INSTRUMENT_SYNSTR1, MIDIW31_INSTRUMENT_SYNSTR2, MIDIW31_INSTRUMENT_CHOIR, MIDIW31_INSTRUMENT_OOHS ->39361f af 31 39 00 bb 31 39 00 c7 31 39 00 d3 31 39 00 ->39362f df 31 39 00 eb 31 39 00 .dword MIDIW31_INSTRUMENT_SYNVOX, MIDIW31_INSTRUMENT_ORCHIT, MIDIW31_INSTRUMENT_TRUMPET, MIDIW31_INSTRUMENT_TROMBONE, MIDIW31_INSTRUMENT_TUBA, MIDIW31_INSTRUMENT_MUTETRP ->393637 f7 31 39 00 03 32 39 00 0f 32 39 00 1b 32 39 00 ->393647 27 32 39 00 33 32 39 00 .dword MIDIW31_INSTRUMENT_FRHORN, MIDIW31_INSTRUMENT_BRASS1, MIDIW31_INSTRUMENT_SYNBRAS1, MIDIW31_INSTRUMENT_SYNBRAS2, MIDIW31_INSTRUMENT_SOPSAX, MIDIW31_INSTRUMENT_ALTOSAX ->39364f 3f 32 39 00 4b 32 39 00 57 32 39 00 63 32 39 00 ->39365f 6f 32 39 00 7b 32 39 00 .dword MIDIW31_INSTRUMENT_TENSAX, MIDIW31_INSTRUMENT_BARISAX, MIDIW31_INSTRUMENT_OBOE, MIDIW31_INSTRUMENT_ENGLHORN, MIDIW31_INSTRUMENT_BASSOON, MIDIW31_INSTRUMENT_CLARINET ->393667 87 32 39 00 93 32 39 00 9f 32 39 00 ab 32 39 00 ->393677 b7 32 39 00 c3 32 39 00 .dword MIDIW31_INSTRUMENT_PICCOLO, MIDIW31_INSTRUMENT_FLUTE1, MIDIW31_INSTRUMENT_RECORDER, MIDIW31_INSTRUMENT_PANFLUTE, MIDIW31_INSTRUMENT_BOTTLEB, MIDIW31_INSTRUMENT_SHAKU ->39367f cf 32 39 00 db 32 39 00 e7 32 39 00 f3 32 39 00 ->39368f ff 32 39 00 0b 33 39 00 .dword MIDIW31_INSTRUMENT_WHISTLE, MIDIW31_INSTRUMENT_OCARINA, MIDIW31_INSTRUMENT_SQUARWAV, MIDIW31_INSTRUMENT_SAWWAV, MIDIW31_INSTRUMENT_SYNCALLI, MIDIW31_INSTRUMENT_CHIFLEAD ->393697 17 33 39 00 23 33 39 00 2f 33 39 00 3b 33 39 00 ->3936a7 47 33 39 00 53 33 39 00 .dword MIDIW31_INSTRUMENT_CHARANG, MIDIW31_INSTRUMENT_SOLOVOX, MIDIW31_INSTRUMENT_FIFTHSAW, MIDIW31_INSTRUMENT_BASSLEAD, MIDIW31_INSTRUMENT_FANTASIA, MIDIW31_INSTRUMENT_WARMPAD ->3936af 5f 33 39 00 6b 33 39 00 77 33 39 00 83 33 39 00 ->3936bf 8f 33 39 00 9b 33 39 00 .dword MIDIW31_INSTRUMENT_POLYSYN, MIDIW31_INSTRUMENT_SPACEVOX, MIDIW31_INSTRUMENT_BOWEDGLS, MIDIW31_INSTRUMENT_METALPAD, MIDIW31_INSTRUMENT_HALOPAD, MIDIW31_INSTRUMENT_SWEEPPAD ->3936c7 a7 33 39 00 b3 33 39 00 bf 33 39 00 cb 33 39 00 ->3936d7 d7 33 39 00 e3 33 39 00 .dword MIDIW31_INSTRUMENT_ICERAIN, MIDIW31_INSTRUMENT_SOUNDTRK, MIDIW31_INSTRUMENT_CRYSTAL, MIDIW31_INSTRUMENT_ATMOSPH, MIDIW31_INSTRUMENT_BRIGHT, MIDIW31_INSTRUMENT_GOBLIN ->3936df ef 33 39 00 fb 33 39 00 07 34 39 00 13 34 39 00 ->3936ef 1f 34 39 00 2b 34 39 00 .dword MIDIW31_INSTRUMENT_ECHODROP, MIDIW31_INSTRUMENT_STARTHEM, MIDIW31_INSTRUMENT_SITAR, MIDIW31_INSTRUMENT_BANJO, MIDIW31_INSTRUMENT_SHAMISEN, MIDIW31_INSTRUMENT_KOTO ->3936f7 37 34 39 00 43 34 39 00 4f 34 39 00 5b 34 39 00 ->393707 67 34 39 00 73 34 39 00 .dword MIDIW31_INSTRUMENT_KALIMBA, MIDIW31_INSTRUMENT_BAGPIPE, MIDIW31_INSTRUMENT_FIDDLE, MIDIW31_INSTRUMENT_SHANNAI, MIDIW31_INSTRUMENT_TINKLBEL, MIDIW31_INSTRUMENT_AGOGO ->39370f 7f 34 39 00 8b 34 39 00 97 34 39 00 a3 34 39 00 ->39371f af 34 39 00 bb 34 39 00 .dword MIDIW31_INSTRUMENT_STEELDRM, MIDIW31_INSTRUMENT_WOODBLOK, MIDIW31_INSTRUMENT_TAIKO, MIDIW31_INSTRUMENT_MELOTOM, MIDIW31_INSTRUMENT_SYNDRUM, MIDIW31_INSTRUMENT_REVRSCYM ->393727 c7 34 39 00 d3 34 39 00 df 34 39 00 eb 34 39 00 ->393737 f7 34 39 00 03 35 39 00 .dword MIDIW31_INSTRUMENT_FRETNOIS, MIDIW31_INSTRUMENT_BRTHNOIS, MIDIW31_INSTRUMENT_SEASHORE, MIDIW31_INSTRUMENT_BIRDS, MIDIW31_INSTRUMENT_TELEPHON, MIDIW31_INSTRUMENT_HELICOPT ->39373f 0f 35 39 00 1b 35 39 00 27 35 39 00 33 35 39 00 ->39374f 3f 35 39 00 4b 35 39 00 .dword MIDIW31_INSTRUMENT_APPLAUSE, MIDIW31_INSTRUMENT_GUNSHOT +>392fa9 00 01 8f f2 f4 38 00 01 MIDIW31_INSTRUMENT_PIANO1 .text $00, $01, $8F, $F2, $F4, $38, $00, $01, $0D, $F2, $F7, $00 +>392fb1 0d f2 f7 00 +>392fb5 00 01 4b f2 f4 38 00 01 MIDIW31_INSTRUMENT_PIANO2 .text $00, $01, $4B, $F2, $F4, $38, $00, $01, $07, $F2, $F7, $00 +>392fbd 07 f2 f7 00 +>392fc1 00 01 49 f2 f4 38 00 01 MIDIW31_INSTRUMENT_PIANO3 .text $00, $01, $49, $F2, $F4, $38, $00, $01, $07, $F2, $F6, $00 +>392fc9 07 f2 f6 00 +>392fcd 00 81 12 f2 f7 00 00 41 MIDIW31_INSTRUMENT_HONKTONK .text $00, $81, $12, $F2, $F7, $00, $00, $41, $07, $F2, $F7, $00 +>392fd5 07 f2 f7 00 +>392fd9 00 01 57 f1 f7 00 00 01 MIDIW31_INSTRUMENT_EP1 .text $00, $01, $57, $F1, $F7, $00, $00, $01, $07, $F2, $F7, $00 +>392fe1 07 f2 f7 00 +>392fe5 00 01 93 f1 f7 00 00 01 MIDIW31_INSTRUMENT_EP2 .text $00, $01, $93, $F1, $F7, $00, $00, $01, $07, $F2, $F7, $00 +>392fed 07 f2 f7 00 +>392ff1 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_HARPSIC .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>392ff9 00 00 00 00 +>392ffd 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CLAVIC .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393005 00 00 00 00 +>393009 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CELESTA .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393011 00 00 00 00 +>393015 00 07 97 f3 f2 32 00 11 MIDIW31_INSTRUMENT_GLOCK .text $00, $07, $97, $F3, $F2, $32, $00, $11, $87, $F2, $F1, $00 +>39301d 87 f2 f1 00 +>393021 00 17 21 54 f4 32 00 01 MIDIW31_INSTRUMENT_MUSICBOX .text $00, $17, $21, $54, $F4, $32, $00, $01, $07, $F4, $F4, $00 +>393029 07 f4 f4 00 +>39302d 00 98 62 f3 f6 30 00 81 MIDIW31_INSTRUMENT_VIBES .text $00, $98, $62, $F3, $F6, $30, $00, $81, $07, $F2, $F6, $00 +>393035 07 f2 f6 00 +>393039 00 18 23 f6 f6 00 00 01 MIDIW31_INSTRUMENT_MARIMBA .text $00, $18, $23, $F6, $F6, $00, $00, $01, $07, $E7, $F7, $00 +>393041 07 e7 f7 00 +>393045 00 15 91 f6 f6 00 00 01 MIDIW31_INSTRUMENT_XYLO .text $00, $15, $91, $F6, $F6, $00, $00, $01, $07, $F6, $F6, $00 +>39304d 07 f6 f6 00 +>393051 00 45 59 d3 f3 00 00 81 MIDIW31_INSTRUMENT_TUBEBELL .text $00, $45, $59, $D3, $F3, $00, $00, $81, $87, $A3, $F3, $00 +>393059 87 a3 f3 00 +>39305d 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SANTUR .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393065 00 00 00 00 +>393069 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_ORGAN1 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393071 00 00 00 00 +>393075 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_ORGAN2 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>39307d 00 00 00 00 +>393081 00 70 44 aa 18 34 00 b1 MIDIW31_INSTRUMENT_ORGAN3 .text $00, $70, $44, $AA, $18, $34, $00, $B1, $07, $8A, $08, $00 +>393089 07 8a 08 00 +>39308d 00 23 93 97 23 34 01 b1 MIDIW31_INSTRUMENT_PIPEORG .text $00, $23, $93, $97, $23, $34, $01, $B1, $07, $55, $14, $00 +>393095 07 55 14 00 +>393099 00 61 13 97 04 30 01 b1 MIDIW31_INSTRUMENT_REEDORG .text $00, $61, $13, $97, $04, $30, $01, $B1, $87, $55, $04, $00 +>3930a1 87 55 04 00 +>3930a5 00 24 48 98 2a 30 01 b1 MIDIW31_INSTRUMENT_ACORDIAN .text $00, $24, $48, $98, $2A, $30, $01, $B1, $07, $46, $1A, $00 +>3930ad 07 46 1a 00 +>3930b1 00 61 13 91 06 00 01 21 MIDIW31_INSTRUMENT_HARMONIC .text $00, $61, $13, $91, $06, $00, $01, $21, $07, $61, $07, $00 +>3930b9 07 61 07 00 +>3930bd 00 21 13 71 06 00 00 a1 MIDIW31_INSTRUMENT_BANDNEON .text $00, $21, $13, $71, $06, $00, $00, $A1, $90, $61, $07, $00 +>3930c5 90 61 07 00 +>3930c9 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_NYLONGT .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3930d1 00 00 00 00 +>3930d5 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_STEELGT .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3930dd 00 00 00 00 +>3930e1 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_JAZZGT .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3930e9 00 00 00 00 +>3930ed 00 03 87 f6 22 36 01 21 MIDIW31_INSTRUMENT_CLEANGT .text $00, $03, $87, $F6, $22, $36, $01, $21, $87, $F3, $F8, $00 +>3930f5 87 f3 f8 00 +>3930f9 00 03 47 f9 54 30 00 21 MIDIW31_INSTRUMENT_MUTEGT .text $00, $03, $47, $F9, $54, $30, $00, $21, $07, $F6, $3A, $00 +>393101 07 f6 3a 00 +>393105 00 23 4a 91 41 38 01 21 MIDIW31_INSTRUMENT_OVERDGT .text $00, $23, $4A, $91, $41, $38, $01, $21, $0C, $84, $19, $00 +>39310d 0c 84 19 00 +>393111 00 23 4a 95 19 32 01 21 MIDIW31_INSTRUMENT_DISTGT .text $00, $23, $4A, $95, $19, $32, $01, $21, $07, $94, $19, $00 +>393119 07 94 19 00 +>39311d 00 09 a1 20 4f 00 00 84 MIDIW31_INSTRUMENT_GTHARMS .text $00, $09, $A1, $20, $4F, $00, $00, $84, $87, $D1, $F8, $00 +>393125 87 d1 f8 00 +>393129 00 21 1e 94 06 00 00 a2 MIDIW31_INSTRUMENT_ACOUBASS .text $00, $21, $1E, $94, $06, $00, $00, $A2, $07, $C3, $A6, $00 +>393131 07 c3 a6 00 +>393135 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_FINGBASS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>39313d 00 00 00 00 +>393141 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_PICKBASS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393149 00 00 00 00 +>39314d 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_FRETLESS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393155 00 00 00 00 +>393159 00 01 8b a1 9a 38 00 21 MIDIW31_INSTRUMENT_SLAPBAS1 .text $00, $01, $8B, $A1, $9A, $38, $00, $21, $47, $F2, $DF, $00 +>393161 47 f2 df 00 +>393165 00 21 8b a2 16 38 00 21 MIDIW31_INSTRUMENT_SLAPBAS2 .text $00, $21, $8B, $A2, $16, $38, $00, $21, $0F, $A1, $DF, $00 +>39316d 0f a1 df 00 +>393171 00 31 8b f4 e8 3a 00 31 MIDIW31_INSTRUMENT_SYNBASS1 .text $00, $31, $8B, $F4, $E8, $3A, $00, $31, $07, $F1, $78, $00 +>393179 07 f1 78 00 +>39317d 00 31 12 f1 28 30 00 31 MIDIW31_INSTRUMENT_SYNBASS2 .text $00, $31, $12, $F1, $28, $30, $00, $31, $07, $F1, $18, $00 +>393185 07 f1 18 00 +>393189 00 31 15 dd 13 00 01 21 MIDIW31_INSTRUMENT_VIOLIN .text $00, $31, $15, $DD, $13, $00, $01, $21, $07, $56, $26, $00 +>393191 07 56 26 00 +>393195 00 31 16 dd 13 00 01 21 MIDIW31_INSTRUMENT_VIOLA .text $00, $31, $16, $DD, $13, $00, $01, $21, $07, $66, $06, $00 +>39319d 07 66 06 00 +>3931a1 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CELLO .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3931a9 00 00 00 00 +>3931ad 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CONTRAB .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3931b5 00 00 00 00 +>3931b9 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_TREMSTR .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3931c1 00 00 00 00 +>3931c5 00 02 1a f5 75 30 01 01 MIDIW31_INSTRUMENT_PIZZ .text $00, $02, $1A, $F5, $75, $30, $01, $01, $87, $85, $35, $00 +>3931cd 87 85 35 00 +>3931d1 00 02 1d f5 75 30 01 01 MIDIW31_INSTRUMENT_HARP .text $00, $02, $1D, $F5, $75, $30, $01, $01, $87, $F3, $F4, $00 +>3931d9 87 f3 f4 00 +>3931dd 00 10 41 f5 05 32 01 11 MIDIW31_INSTRUMENT_TIMPANI .text $00, $10, $41, $F5, $05, $32, $01, $11, $07, $F2, $C3, $00 +>3931e5 07 f2 c3 00 +>3931e9 00 21 9b b1 25 3c 01 a2 MIDIW31_INSTRUMENT_STRINGS .text $00, $21, $9B, $B1, $25, $3C, $01, $A2, $08, $72, $08, $00 +>3931f1 08 72 08 00 +>3931f5 00 a1 98 7f 03 00 01 21 MIDIW31_INSTRUMENT_SLOWSTR .text $00, $A1, $98, $7F, $03, $00, $01, $21, $07, $3F, $07, $01 +>3931fd 07 3f 07 01 +>393201 00 a1 93 c1 12 00 00 61 MIDIW31_INSTRUMENT_SYNSTR1 .text $00, $A1, $93, $C1, $12, $00, $00, $61, $07, $4F, $05, $00 +>393209 07 4f 05 00 +>39320d 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SYNSTR2 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393215 00 00 00 00 +>393219 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CHOIR .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393221 00 00 00 00 +>393225 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_OOHS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>39322d 00 00 00 00 +>393231 00 71 57 54 05 3c 00 72 MIDIW31_INSTRUMENT_SYNVOX .text $00, $71, $57, $54, $05, $3C, $00, $72, $07, $7A, $05, $00 +>393239 07 7a 05 00 +>39323d 00 90 00 54 63 38 00 41 MIDIW31_INSTRUMENT_ORCHIT .text $00, $90, $00, $54, $63, $38, $00, $41, $07, $A5, $45, $00 +>393245 07 a5 45 00 +>393249 00 21 92 85 17 3c 00 21 MIDIW31_INSTRUMENT_TRUMPET .text $00, $21, $92, $85, $17, $3C, $00, $21, $08, $8F, $09, $00 +>393251 08 8f 09 00 +>393255 00 21 94 75 17 32 00 21 MIDIW31_INSTRUMENT_TROMBONE .text $00, $21, $94, $75, $17, $32, $00, $21, $0C, $8F, $09, $00 +>39325d 0c 8f 09 00 +>393261 00 21 94 76 15 00 00 61 MIDIW31_INSTRUMENT_TUBA .text $00, $21, $94, $76, $15, $00, $00, $61, $07, $82, $37, $00 +>393269 07 82 37 00 +>39326d 00 31 43 9e 17 00 01 21 MIDIW31_INSTRUMENT_MUTETRP .text $00, $31, $43, $9E, $17, $00, $01, $21, $07, $62, $2C, $01 +>393275 07 62 2c 01 +>393279 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_FRHORN .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393281 00 00 00 00 +>393285 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BRASS1 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>39328d 00 00 00 00 +>393291 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SYNBRAS1 .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393299 00 00 00 00 +>39329d 00 21 4d 54 3c 38 00 21 MIDIW31_INSTRUMENT_SYNBRAS2 .text $00, $21, $4D, $54, $3C, $38, $00, $21, $07, $A6, $1C, $00 +>3932a5 07 a6 1c 00 +>3932a9 00 31 8f 93 02 38 01 61 MIDIW31_INSTRUMENT_SOPSAX .text $00, $31, $8F, $93, $02, $38, $01, $61, $07, $72, $0B, $00 +>3932b1 07 72 0b 00 +>3932b5 00 31 8e 93 03 38 01 61 MIDIW31_INSTRUMENT_ALTOSAX .text $00, $31, $8E, $93, $03, $38, $01, $61, $07, $72, $09, $00 +>3932bd 07 72 09 00 +>3932c1 00 31 91 93 03 30 01 61 MIDIW31_INSTRUMENT_TENSAX .text $00, $31, $91, $93, $03, $30, $01, $61, $07, $82, $09, $00 +>3932c9 07 82 09 00 +>3932cd 00 31 8e 93 0f 00 01 61 MIDIW31_INSTRUMENT_BARISAX .text $00, $31, $8E, $93, $0F, $00, $01, $61, $07, $72, $0F, $00 +>3932d5 07 72 0f 00 +>3932d9 00 21 4b aa 16 00 01 21 MIDIW31_INSTRUMENT_OBOE .text $00, $21, $4B, $AA, $16, $00, $01, $21, $07, $8F, $0A, $00 +>3932e1 07 8f 0a 00 +>3932e5 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_ENGLHORN .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3932ed 00 00 00 00 +>3932f1 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BASSOON .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3932f9 00 00 00 00 +>3932fd 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CLARINET .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393305 00 00 00 00 +>393309 00 e1 1f 85 5f 30 00 e1 MIDIW31_INSTRUMENT_PICCOLO .text $00, $E1, $1F, $85, $5F, $30, $00, $E1, $07, $65, $1A, $00 +>393311 07 65 1a 00 +>393315 00 e1 46 88 5f 30 00 e1 MIDIW31_INSTRUMENT_FLUTE1 .text $00, $E1, $46, $88, $5F, $30, $00, $E1, $07, $65, $1A, $00 +>39331d 07 65 1a 00 +>393321 00 a1 9c 75 1f 32 00 21 MIDIW31_INSTRUMENT_RECORDER .text $00, $A1, $9C, $75, $1F, $32, $00, $21, $07, $75, $0A, $00 +>393329 07 75 0a 00 +>39332d 00 31 8b 84 58 30 00 21 MIDIW31_INSTRUMENT_PANFLUTE .text $00, $31, $8B, $84, $58, $30, $00, $21, $07, $65, $1A, $00 +>393335 07 65 1a 00 +>393339 00 e1 4c 66 56 00 00 a1 MIDIW31_INSTRUMENT_BOTTLEB .text $00, $E1, $4C, $66, $56, $00, $00, $A1, $07, $65, $26, $00 +>393341 07 65 26 00 +>393345 00 62 cb 76 46 00 00 a1 MIDIW31_INSTRUMENT_SHAKU .text $00, $62, $CB, $76, $46, $00, $00, $A1, $07, $55, $36, $00 +>39334d 07 55 36 00 +>393351 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_WHISTLE .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393359 00 00 00 00 +>39335d 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_OCARINA .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393365 00 00 00 00 +>393369 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SQUARWAV .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393371 00 00 00 00 +>393375 00 21 0e ff 0f 30 01 21 MIDIW31_INSTRUMENT_SAWWAV .text $00, $21, $0E, $FF, $0F, $30, $01, $21, $07, $FF, $0F, $01 +>39337d 07 ff 0f 01 +>393381 00 22 46 86 55 30 00 21 MIDIW31_INSTRUMENT_SYNCALLI .text $00, $22, $46, $86, $55, $30, $00, $21, $87, $64, $18, $00 +>393389 87 64 18 00 +>39338d 00 21 45 66 12 30 00 a1 MIDIW31_INSTRUMENT_CHIFLEAD .text $00, $21, $45, $66, $12, $30, $00, $A1, $07, $96, $0A, $00 +>393395 07 96 0a 00 +>393399 00 21 8b 92 2a 34 01 22 MIDIW31_INSTRUMENT_CHARANG .text $00, $21, $8B, $92, $2A, $34, $01, $22, $07, $91, $2A, $00 +>3933a1 07 91 2a 00 +>3933a5 00 a2 9e df 05 00 00 61 MIDIW31_INSTRUMENT_SOLOVOX .text $00, $A2, $9E, $DF, $05, $00, $00, $61, $47, $6F, $07, $00 +>3933ad 47 6f 07 00 +>3933b1 00 20 1a ef 01 00 00 60 MIDIW31_INSTRUMENT_FIFTHSAW .text $00, $20, $1A, $EF, $01, $00, $00, $60, $07, $8F, $06, $02 +>3933b9 07 8f 06 02 +>3933bd 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BASSLEAD .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3933c5 00 00 00 00 +>3933c9 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_FANTASIA .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3933d1 00 00 00 00 +>3933d5 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_WARMPAD .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3933dd 00 00 00 00 +>3933e1 00 61 17 91 34 3c 00 61 MIDIW31_INSTRUMENT_POLYSYN .text $00, $61, $17, $91, $34, $3C, $00, $61, $07, $55, $16, $00 +>3933e9 07 55 16 00 +>3933ed 00 71 5d 54 01 30 00 72 MIDIW31_INSTRUMENT_SPACEVOX .text $00, $71, $5D, $54, $01, $30, $00, $72, $07, $6A, $03, $00 +>3933f5 07 6a 03 00 +>3933f9 00 21 97 21 43 38 00 a2 MIDIW31_INSTRUMENT_BOWEDGLS .text $00, $21, $97, $21, $43, $38, $00, $A2, $07, $42, $35, $00 +>393401 07 42 35 00 +>393405 00 a1 1c a1 77 30 01 21 MIDIW31_INSTRUMENT_METALPAD .text $00, $A1, $1C, $A1, $77, $30, $01, $21, $07, $31, $47, $01 +>39340d 07 31 47 01 +>393411 00 21 89 11 33 00 00 61 MIDIW31_INSTRUMENT_HALOPAD .text $00, $21, $89, $11, $33, $00, $00, $61, $0A, $42, $25, $00 +>393419 0a 42 25 00 +>39341d 00 a1 15 11 47 00 01 21 MIDIW31_INSTRUMENT_SWEEPPAD .text $00, $A1, $15, $11, $47, $00, $01, $21, $07, $CF, $07, $00 +>393425 07 cf 07 00 +>393429 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_ICERAIN .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393431 00 00 00 00 +>393435 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SOUNDTRK .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>39343d 00 00 00 00 +>393441 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_CRYSTAL .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393449 00 00 00 00 +>39344d 00 22 92 b1 81 3c 00 61 MIDIW31_INSTRUMENT_ATMOSPH .text $00, $22, $92, $B1, $81, $3C, $00, $61, $8A, $F2, $26, $00 +>393455 8a f2 26 00 +>393459 00 41 4d f1 51 30 01 42 MIDIW31_INSTRUMENT_BRIGHT .text $00, $41, $4D, $F1, $51, $30, $01, $42, $07, $F2, $F5, $00 +>393461 07 f2 f5 00 +>393465 00 61 94 11 51 36 01 a3 MIDIW31_INSTRUMENT_GOBLIN .text $00, $61, $94, $11, $51, $36, $01, $A3, $87, $11, $13, $00 +>39346d 87 11 13 00 +>393471 00 61 8c 11 31 3a 00 a1 MIDIW31_INSTRUMENT_ECHODROP .text $00, $61, $8C, $11, $31, $3A, $00, $A1, $87, $1D, $03, $00 +>393479 87 1d 03 00 +>39347d 00 a4 4c f3 73 00 01 61 MIDIW31_INSTRUMENT_STARTHEM .text $00, $A4, $4C, $F3, $73, $00, $01, $61, $07, $81, $23, $00 +>393485 07 81 23 00 +>393489 00 02 85 d2 53 00 00 07 MIDIW31_INSTRUMENT_SITAR .text $00, $02, $85, $D2, $53, $00, $00, $07, $0A, $F2, $F6, $01 +>393491 0a f2 f6 01 +>393495 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BANJO .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>39349d 00 00 00 00 +>3934a1 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_SHAMISEN .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3934a9 00 00 00 00 +>3934ad 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_KOTO .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>3934b5 00 00 00 00 +>3934b9 00 04 4f fa 56 3c 00 01 MIDIW31_INSTRUMENT_KALIMBA .text $00, $04, $4F, $FA, $56, $3C, $00, $01, $07, $C2, $05, $00 +>3934c1 07 c2 05 00 +>3934c5 00 21 49 7c 20 36 00 22 MIDIW31_INSTRUMENT_BAGPIPE .text $00, $21, $49, $7C, $20, $36, $00, $22, $07, $6F, $0C, $01 +>3934cd 07 6f 0c 01 +>3934d1 00 31 85 dd 33 3a 01 21 MIDIW31_INSTRUMENT_FIDDLE .text $00, $31, $85, $DD, $33, $3A, $01, $21, $07, $56, $16, $00 +>3934d9 07 56 16 00 +>3934dd 00 20 04 da 05 30 02 21 MIDIW31_INSTRUMENT_SHANNAI .text $00, $20, $04, $DA, $05, $30, $02, $21, $88, $8F, $0B, $00 +>3934e5 88 8f 0b 00 +>3934e9 00 05 6a f1 e5 00 00 03 MIDIW31_INSTRUMENT_TINKLBEL .text $00, $05, $6A, $F1, $E5, $00, $00, $03, $87, $C3, $E5, $00 +>3934f1 87 c3 e5 00 +>3934f5 00 07 15 ec 26 00 00 02 MIDIW31_INSTRUMENT_AGOGO .text $00, $07, $15, $EC, $26, $00, $00, $02, $07, $F8, $16, $00 +>3934fd 07 f8 16 00 +>393501 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_STEELDRM .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393509 00 00 00 00 +>39350d 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_WOODBLOK .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393515 00 00 00 00 +>393519 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_TAIKO .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393521 00 00 00 00 +>393525 00 11 41 f8 47 34 02 10 MIDIW31_INSTRUMENT_MELOTOM .text $00, $11, $41, $F8, $47, $34, $02, $10, $0A, $F3, $03, $00 +>39352d 0a f3 03 00 +>393531 00 01 8e f1 06 3e 02 10 MIDIW31_INSTRUMENT_SYNDRUM .text $00, $01, $8E, $F1, $06, $3E, $02, $10, $07, $F3, $02, $00 +>393539 07 f3 02 00 +>39353d 00 0e 00 1f 00 3e 00 c0 MIDIW31_INSTRUMENT_REVRSCYM .text $00, $0E, $00, $1F, $00, $3E, $00, $C0, $07, $1F, $FF, $03 +>393545 07 1f ff 03 +>393549 00 06 80 f8 24 38 00 03 MIDIW31_INSTRUMENT_FRETNOIS .text $00, $06, $80, $F8, $24, $38, $00, $03, $8F, $56, $84, $02 +>393551 8f 56 84 02 +>393555 00 0e 00 f8 00 00 00 d0 MIDIW31_INSTRUMENT_BRTHNOIS .text $00, $0E, $00, $F8, $00, $00, $00, $D0, $0C, $34, $04, $03 +>39355d 0c 34 04 03 +>393561 00 0e 00 f6 00 00 00 c0 MIDIW31_INSTRUMENT_SEASHORE .text $00, $0E, $00, $F6, $00, $00, $00, $C0, $07, $1F, $02, $03 +>393569 07 1f 02 03 +>39356d 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_BIRDS .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393575 00 00 00 00 +>393579 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_TELEPHON .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>393581 00 00 00 00 +>393585 00 00 00 00 00 00 00 00 MIDIW31_INSTRUMENT_HELICOPT .text $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 +>39358d 00 00 00 00 +>393591 00 26 00 ff 01 3e 00 e4 MIDIW31_INSTRUMENT_APPLAUSE .text $00, $26, $00, $FF, $01, $3E, $00, $E4, $07, $12, $16, $01 +>393599 07 12 16 01 +>39359d 00 00 00 f3 f0 3e 00 00 MIDIW31_INSTRUMENT_GUNSHOT .text $00, $00, $00, $F3, $F0, $3E, $00, $00, $07, $F6, $C9, $02 +>3935a5 07 f6 c9 02 +>3935a9 a9 2f 39 00 b5 2f 39 00 midiInstrumentsw31 .dword MIDIW31_INSTRUMENT_PIANO1, MIDIW31_INSTRUMENT_PIANO2, MIDIW31_INSTRUMENT_PIANO3, MIDIW31_INSTRUMENT_HONKTONK, MIDIW31_INSTRUMENT_EP1, MIDIW31_INSTRUMENT_EP2 +>3935b1 c1 2f 39 00 cd 2f 39 00 d9 2f 39 00 e5 2f 39 00 +>3935c1 f1 2f 39 00 fd 2f 39 00 .dword MIDIW31_INSTRUMENT_HARPSIC, MIDIW31_INSTRUMENT_CLAVIC, MIDIW31_INSTRUMENT_CELESTA, MIDIW31_INSTRUMENT_GLOCK, MIDIW31_INSTRUMENT_MUSICBOX, MIDIW31_INSTRUMENT_VIBES +>3935c9 09 30 39 00 15 30 39 00 21 30 39 00 2d 30 39 00 +>3935d9 39 30 39 00 45 30 39 00 .dword MIDIW31_INSTRUMENT_MARIMBA, MIDIW31_INSTRUMENT_XYLO, MIDIW31_INSTRUMENT_TUBEBELL, MIDIW31_INSTRUMENT_SANTUR, MIDIW31_INSTRUMENT_ORGAN1, MIDIW31_INSTRUMENT_ORGAN2 +>3935e1 51 30 39 00 5d 30 39 00 69 30 39 00 75 30 39 00 +>3935f1 81 30 39 00 8d 30 39 00 .dword MIDIW31_INSTRUMENT_ORGAN3, MIDIW31_INSTRUMENT_PIPEORG, MIDIW31_INSTRUMENT_REEDORG, MIDIW31_INSTRUMENT_ACORDIAN, MIDIW31_INSTRUMENT_HARMONIC, MIDIW31_INSTRUMENT_BANDNEON +>3935f9 99 30 39 00 a5 30 39 00 b1 30 39 00 bd 30 39 00 +>393609 c9 30 39 00 d5 30 39 00 .dword MIDIW31_INSTRUMENT_NYLONGT, MIDIW31_INSTRUMENT_STEELGT, MIDIW31_INSTRUMENT_JAZZGT, MIDIW31_INSTRUMENT_CLEANGT, MIDIW31_INSTRUMENT_MUTEGT, MIDIW31_INSTRUMENT_OVERDGT +>393611 e1 30 39 00 ed 30 39 00 f9 30 39 00 05 31 39 00 +>393621 11 31 39 00 1d 31 39 00 .dword MIDIW31_INSTRUMENT_DISTGT, MIDIW31_INSTRUMENT_GTHARMS, MIDIW31_INSTRUMENT_ACOUBASS, MIDIW31_INSTRUMENT_FINGBASS, MIDIW31_INSTRUMENT_PICKBASS, MIDIW31_INSTRUMENT_FRETLESS +>393629 29 31 39 00 35 31 39 00 41 31 39 00 4d 31 39 00 +>393639 59 31 39 00 65 31 39 00 .dword MIDIW31_INSTRUMENT_SLAPBAS1, MIDIW31_INSTRUMENT_SLAPBAS2, MIDIW31_INSTRUMENT_SYNBASS1, MIDIW31_INSTRUMENT_SYNBASS2, MIDIW31_INSTRUMENT_VIOLIN, MIDIW31_INSTRUMENT_VIOLA +>393641 71 31 39 00 7d 31 39 00 89 31 39 00 95 31 39 00 +>393651 a1 31 39 00 ad 31 39 00 .dword MIDIW31_INSTRUMENT_CELLO, MIDIW31_INSTRUMENT_CONTRAB, MIDIW31_INSTRUMENT_TREMSTR, MIDIW31_INSTRUMENT_PIZZ, MIDIW31_INSTRUMENT_HARP, MIDIW31_INSTRUMENT_TIMPANI +>393659 b9 31 39 00 c5 31 39 00 d1 31 39 00 dd 31 39 00 +>393669 e9 31 39 00 f5 31 39 00 .dword MIDIW31_INSTRUMENT_STRINGS, MIDIW31_INSTRUMENT_SLOWSTR, MIDIW31_INSTRUMENT_SYNSTR1, MIDIW31_INSTRUMENT_SYNSTR2, MIDIW31_INSTRUMENT_CHOIR, MIDIW31_INSTRUMENT_OOHS +>393671 01 32 39 00 0d 32 39 00 19 32 39 00 25 32 39 00 +>393681 31 32 39 00 3d 32 39 00 .dword MIDIW31_INSTRUMENT_SYNVOX, MIDIW31_INSTRUMENT_ORCHIT, MIDIW31_INSTRUMENT_TRUMPET, MIDIW31_INSTRUMENT_TROMBONE, MIDIW31_INSTRUMENT_TUBA, MIDIW31_INSTRUMENT_MUTETRP +>393689 49 32 39 00 55 32 39 00 61 32 39 00 6d 32 39 00 +>393699 79 32 39 00 85 32 39 00 .dword MIDIW31_INSTRUMENT_FRHORN, MIDIW31_INSTRUMENT_BRASS1, MIDIW31_INSTRUMENT_SYNBRAS1, MIDIW31_INSTRUMENT_SYNBRAS2, MIDIW31_INSTRUMENT_SOPSAX, MIDIW31_INSTRUMENT_ALTOSAX +>3936a1 91 32 39 00 9d 32 39 00 a9 32 39 00 b5 32 39 00 +>3936b1 c1 32 39 00 cd 32 39 00 .dword MIDIW31_INSTRUMENT_TENSAX, MIDIW31_INSTRUMENT_BARISAX, MIDIW31_INSTRUMENT_OBOE, MIDIW31_INSTRUMENT_ENGLHORN, MIDIW31_INSTRUMENT_BASSOON, MIDIW31_INSTRUMENT_CLARINET +>3936b9 d9 32 39 00 e5 32 39 00 f1 32 39 00 fd 32 39 00 +>3936c9 09 33 39 00 15 33 39 00 .dword MIDIW31_INSTRUMENT_PICCOLO, MIDIW31_INSTRUMENT_FLUTE1, MIDIW31_INSTRUMENT_RECORDER, MIDIW31_INSTRUMENT_PANFLUTE, MIDIW31_INSTRUMENT_BOTTLEB, MIDIW31_INSTRUMENT_SHAKU +>3936d1 21 33 39 00 2d 33 39 00 39 33 39 00 45 33 39 00 +>3936e1 51 33 39 00 5d 33 39 00 .dword MIDIW31_INSTRUMENT_WHISTLE, MIDIW31_INSTRUMENT_OCARINA, MIDIW31_INSTRUMENT_SQUARWAV, MIDIW31_INSTRUMENT_SAWWAV, MIDIW31_INSTRUMENT_SYNCALLI, MIDIW31_INSTRUMENT_CHIFLEAD +>3936e9 69 33 39 00 75 33 39 00 81 33 39 00 8d 33 39 00 +>3936f9 99 33 39 00 a5 33 39 00 .dword MIDIW31_INSTRUMENT_CHARANG, MIDIW31_INSTRUMENT_SOLOVOX, MIDIW31_INSTRUMENT_FIFTHSAW, MIDIW31_INSTRUMENT_BASSLEAD, MIDIW31_INSTRUMENT_FANTASIA, MIDIW31_INSTRUMENT_WARMPAD +>393701 b1 33 39 00 bd 33 39 00 c9 33 39 00 d5 33 39 00 +>393711 e1 33 39 00 ed 33 39 00 .dword MIDIW31_INSTRUMENT_POLYSYN, MIDIW31_INSTRUMENT_SPACEVOX, MIDIW31_INSTRUMENT_BOWEDGLS, MIDIW31_INSTRUMENT_METALPAD, MIDIW31_INSTRUMENT_HALOPAD, MIDIW31_INSTRUMENT_SWEEPPAD +>393719 f9 33 39 00 05 34 39 00 11 34 39 00 1d 34 39 00 +>393729 29 34 39 00 35 34 39 00 .dword MIDIW31_INSTRUMENT_ICERAIN, MIDIW31_INSTRUMENT_SOUNDTRK, MIDIW31_INSTRUMENT_CRYSTAL, MIDIW31_INSTRUMENT_ATMOSPH, MIDIW31_INSTRUMENT_BRIGHT, MIDIW31_INSTRUMENT_GOBLIN +>393731 41 34 39 00 4d 34 39 00 59 34 39 00 65 34 39 00 +>393741 71 34 39 00 7d 34 39 00 .dword MIDIW31_INSTRUMENT_ECHODROP, MIDIW31_INSTRUMENT_STARTHEM, MIDIW31_INSTRUMENT_SITAR, MIDIW31_INSTRUMENT_BANJO, MIDIW31_INSTRUMENT_SHAMISEN, MIDIW31_INSTRUMENT_KOTO +>393749 89 34 39 00 95 34 39 00 a1 34 39 00 ad 34 39 00 +>393759 b9 34 39 00 c5 34 39 00 .dword MIDIW31_INSTRUMENT_KALIMBA, MIDIW31_INSTRUMENT_BAGPIPE, MIDIW31_INSTRUMENT_FIDDLE, MIDIW31_INSTRUMENT_SHANNAI, MIDIW31_INSTRUMENT_TINKLBEL, MIDIW31_INSTRUMENT_AGOGO +>393761 d1 34 39 00 dd 34 39 00 e9 34 39 00 f5 34 39 00 +>393771 01 35 39 00 0d 35 39 00 .dword MIDIW31_INSTRUMENT_STEELDRM, MIDIW31_INSTRUMENT_WOODBLOK, MIDIW31_INSTRUMENT_TAIKO, MIDIW31_INSTRUMENT_MELOTOM, MIDIW31_INSTRUMENT_SYNDRUM, MIDIW31_INSTRUMENT_REVRSCYM +>393779 19 35 39 00 25 35 39 00 31 35 39 00 3d 35 39 00 +>393789 49 35 39 00 55 35 39 00 .dword MIDIW31_INSTRUMENT_FRETNOIS, MIDIW31_INSTRUMENT_BRTHNOIS, MIDIW31_INSTRUMENT_SEASHORE, MIDIW31_INSTRUMENT_BIRDS, MIDIW31_INSTRUMENT_TELEPHON, MIDIW31_INSTRUMENT_HELICOPT +>393791 61 35 39 00 6d 35 39 00 79 35 39 00 85 35 39 00 +>3937a1 91 35 39 00 9d 35 39 00 .dword MIDIW31_INSTRUMENT_APPLAUSE, MIDIW31_INSTRUMENT_GUNSHOT ;****** Return to file: src\OPL2_Library.asm ->393757 3c 42 44 45 47 49 4b 4c NOTE_INTRO .byte $3C, $42, $44, $45, $47, $49, $4B, $4C -.39375f IOPL2_TONE_TEST -.39375f e2 20 sep #$20 SEP #$20 ; set A short -.393761 c2 10 rep #$10 REP #$10 ; set X long -.393763 a2 00 00 ldx #$0000 LDX #0 -.393766 OPL2_TONE_TESTING_L1 -.393766 bf 57 37 39 lda $393757,x LDA NOTE_INTRO, X -.39376a 29 0f and #$0f AND #$F -.39376c 85 30 sta $30 STA OPL2_NOTE ; start at C -.39376e bf 57 37 39 lda $393757,x LDA NOTE_INTRO, X -.393772 29 70 and #$70 AND #$70 -.393774 4a lsr a LSR A -.393775 4a lsr a LSR A -.393776 4a lsr a LSR A -.393777 4a lsr a LSR A -.393778 85 31 sta $31 STA OPL2_OCTAVE -.39377a 8a txa TXA -.39377b 29 03 and #$03 AND #$03 ; replace modulo 3 - play each note on a different channel -.39377d 85 27 sta $27 STA OPL2_CHANNEL -.39377f 22 4f 39 39 jsl $39394f JSL OPL2_PLAYNOTE -.393783 a0 00 00 ldy #$0000 LDY #$0000 -.393786 OPL2_TONE_TESTING_L2 -.393786 ea nop NOP -.393787 ea nop NOP -.393788 ea nop NOP -.393789 ea nop NOP -.39378a c8 iny INY -.39378b c0 ff ff cpy #$ffff CPY #$FFFF -.39378e d0 f6 bne $393786 BNE OPL2_TONE_TESTING_L2 -.393790 e8 inx INX -.393791 e0 08 00 cpx #$0008 CPX #8 -.393794 d0 d0 bne $393766 BNE OPL2_TONE_TESTING_L1 -.393796 6b rtl RTL -.393797 OPL2_INIT -.393797 c2 20 rep #$20 REP #$20 ; set A long -.393799 a9 00 00 lda #$0000 LDA #$0000 -.39379c 85 28 sta $28 STA OPL2_REG_REGION -.39379e 85 2a sta $2a STA OPL2_REG_OFFSET -.3937a0 85 30 sta $30 STA OPL2_NOTE -.3937a2 85 32 sta $32 STA OPL2_PARAMETER0 -.3937a4 85 34 sta $34 STA OPL2_PARAMETER2 -.3937a6 a9 21 17 lda #$1721 LDA #<>INSTRUMENT_ACCORDN -.3937a9 85 50 sta $50 STA RAD_ADDR -.3937ab a9 39 00 lda #$0039 LDA #<`INSTRUMENT_ACCORDN -.3937ae 85 52 sta $52 STA RAD_ADDR + 2 -.3937b0 e2 20 sep #$20 SEP #$20 ; set A short -.3937b2 6b rtl RTL -.3937b3 OPL2_Reset -.3937b3 6b rtl RTL -.3937b4 OPL2_Get_FrequencyBlock -.3937b4 6b rtl RTL -.3937b5 OPL2_GET_REGISTER -.3937b5 48 pha PHA ; begin setdp macro -.3937b6 08 php PHP -.3937b7 c2 20 rep #$20 REP #$20 ; set A long -.3937b9 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.3937bc 5b tcd TCD -.3937bd 28 plp PLP -.3937be 68 pla PLA ; end setdp macro -.3937bf c2 20 rep #$20 REP #$20 ; set A long -.3937c1 18 clc CLC -.3937c2 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.3937c5 65 32 adc $32 ADC OPL2_PARAMETER0 -.3937c7 85 2c sta $2c STA OPL2_IND_ADDY_LL -.3937c9 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.3937cc 85 2e sta $2e STA OPL2_IND_ADDY_HL -.3937ce e2 20 sep #$20 SEP #$20 ; set A short -.3937d0 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.3937d2 6b rtl RTL -.3937d3 OPL2_GET_WAVEFORM_SELECT -.3937d3 48 pha PHA ; begin setdp macro -.3937d4 08 php PHP -.3937d5 c2 20 rep #$20 REP #$20 ; set A long -.3937d7 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.3937da 5b tcd TCD -.3937db 28 plp PLP -.3937dc 68 pla PLA ; end setdp macro -.3937dd c2 20 rep #$20 REP #$20 ; set A long -.3937df a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.3937e2 69 01 00 adc #$0001 ADC #$0001 -.3937e5 85 2c sta $2c STA OPL2_IND_ADDY_LL -.3937e7 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.3937ea 85 2e sta $2e STA OPL2_IND_ADDY_HL -.3937ec e2 20 sep #$20 SEP #$20 ; set A short -.3937ee a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.3937f0 29 20 and #$20 AND #$20 -.3937f2 6b rtl RTL -.3937f3 OPL2_GET_SCALINGLEVEL -.3937f3 48 pha PHA ; begin setdp macro -.3937f4 08 php PHP -.3937f5 c2 20 rep #$20 REP #$20 ; set A long -.3937f7 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.3937fa 5b tcd TCD -.3937fb 28 plp PLP -.3937fc 68 pla PLA ; end setdp macro -.3937fd c2 20 rep #$20 REP #$20 ; set A long -.3937ff a9 40 00 lda #$0040 LDA #$0040 ; -.393802 85 28 sta $28 STA OPL2_REG_REGION -.393804 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393807 e2 20 sep #$20 SEP #$20 ; set A short -.393809 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.39380b 29 c0 and #$c0 AND #$C0 -.39380d 4a lsr a LSR A -.39380e 4a lsr a LSR A -.39380f 4a lsr a LSR A -.393810 4a lsr a LSR A -.393811 4a lsr a LSR A -.393812 4a lsr a LSR A -.393813 6b rtl RTL -.393814 OPL2_GET_BLOCK -.393814 48 pha PHA ; begin setdp macro -.393815 08 php PHP -.393816 c2 20 rep #$20 REP #$20 ; set A long -.393818 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.39381b 5b tcd TCD -.39381c 28 plp PLP -.39381d 68 pla PLA ; end setdp macro -.39381e e2 20 sep #$20 SEP #$20 ; set A short -.393820 18 clc CLC -.393821 a5 27 lda $27 LDA OPL2_CHANNEL -.393823 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393825 69 b0 adc #$b0 ADC #$B0 -.393827 85 2a sta $2a STA OPL2_REG_OFFSET -.393829 a9 00 lda #$00 LDA #$00 -.39382b 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.39382d c2 30 rep #$30 REP #$30 ; set A&X long -.39382f 18 clc CLC -.393830 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393833 65 2a adc $2a ADC OPL2_REG_OFFSET -.393835 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393837 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.39383a 85 2e sta $2e STA OPL2_IND_ADDY_HL -.39383c e2 20 sep #$20 SEP #$20 ; set A short -.39383e a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393840 29 1c and #$1c AND #$1C -.393842 4a lsr a LSR A -.393843 4a lsr a LSR A +>3937a9 3c 42 44 45 47 49 4b 4c NOTE_INTRO .byte $3C, $42, $44, $45, $47, $49, $4B, $4C +.3937b1 IOPL2_TONE_TEST +.3937b1 e2 20 sep #$20 SEP #$20 ; set A short +.3937b3 c2 10 rep #$10 REP #$10 ; set X long +.3937b5 a2 00 00 ldx #$0000 LDX #0 +.3937b8 OPL2_TONE_TESTING_L1 +.3937b8 bf a9 37 39 lda $3937a9,x LDA NOTE_INTRO, X +.3937bc 29 0f and #$0f AND #$F +.3937be 85 30 sta $30 STA OPL2_NOTE ; start at C +.3937c0 bf a9 37 39 lda $3937a9,x LDA NOTE_INTRO, X +.3937c4 29 70 and #$70 AND #$70 +.3937c6 4a lsr a LSR A +.3937c7 4a lsr a LSR A +.3937c8 4a lsr a LSR A +.3937c9 4a lsr a LSR A +.3937ca 85 31 sta $31 STA OPL2_OCTAVE +.3937cc 8a txa TXA +.3937cd 29 03 and #$03 AND #$03 ; replace modulo 3 - play each note on a different channel +.3937cf 85 27 sta $27 STA OPL2_CHANNEL +.3937d1 22 a1 39 39 jsl $3939a1 JSL OPL2_PLAYNOTE +.3937d5 a0 00 00 ldy #$0000 LDY #$0000 +.3937d8 OPL2_TONE_TESTING_L2 +.3937d8 ea nop NOP +.3937d9 ea nop NOP +.3937da ea nop NOP +.3937db ea nop NOP +.3937dc c8 iny INY +.3937dd c0 ff ff cpy #$ffff CPY #$FFFF +.3937e0 d0 f6 bne $3937d8 BNE OPL2_TONE_TESTING_L2 +.3937e2 e8 inx INX +.3937e3 e0 08 00 cpx #$0008 CPX #8 +.3937e6 d0 d0 bne $3937b8 BNE OPL2_TONE_TESTING_L1 +.3937e8 6b rtl RTL +.3937e9 OPL2_INIT +.3937e9 c2 20 rep #$20 REP #$20 ; set A long +.3937eb a9 00 00 lda #$0000 LDA #$0000 +.3937ee 85 28 sta $28 STA OPL2_REG_REGION +.3937f0 85 2a sta $2a STA OPL2_REG_OFFSET +.3937f2 85 30 sta $30 STA OPL2_NOTE +.3937f4 85 32 sta $32 STA OPL2_PARAMETER0 +.3937f6 85 34 sta $34 STA OPL2_PARAMETER2 +.3937f8 a9 73 17 lda #$1773 LDA #<>INSTRUMENT_ACCORDN +.3937fb 85 50 sta $50 STA RAD_ADDR +.3937fd a9 39 00 lda #$0039 LDA #<`INSTRUMENT_ACCORDN +.393800 85 52 sta $52 STA RAD_ADDR + 2 +.393802 e2 20 sep #$20 SEP #$20 ; set A short +.393804 6b rtl RTL +.393805 OPL2_Reset +.393805 6b rtl RTL +.393806 OPL2_Get_FrequencyBlock +.393806 6b rtl RTL +.393807 OPL2_GET_REGISTER +.393807 48 pha PHA ; begin setdp macro +.393808 08 php PHP +.393809 c2 20 rep #$20 REP #$20 ; set A long +.39380b a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.39380e 5b tcd TCD +.39380f 28 plp PLP +.393810 68 pla PLA ; end setdp macro +.393811 c2 20 rep #$20 REP #$20 ; set A long +.393813 18 clc CLC +.393814 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393817 65 32 adc $32 ADC OPL2_PARAMETER0 +.393819 85 2c sta $2c STA OPL2_IND_ADDY_LL +.39381b a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.39381e 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393820 e2 20 sep #$20 SEP #$20 ; set A short +.393822 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393824 6b rtl RTL +.393825 OPL2_GET_WAVEFORM_SELECT +.393825 48 pha PHA ; begin setdp macro +.393826 08 php PHP +.393827 c2 20 rep #$20 REP #$20 ; set A long +.393829 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.39382c 5b tcd TCD +.39382d 28 plp PLP +.39382e 68 pla PLA ; end setdp macro +.39382f c2 20 rep #$20 REP #$20 ; set A long +.393831 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393834 69 01 00 adc #$0001 ADC #$0001 +.393837 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393839 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.39383c 85 2e sta $2e STA OPL2_IND_ADDY_HL +.39383e e2 20 sep #$20 SEP #$20 ; set A short +.393840 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393842 29 20 and #$20 AND #$20 .393844 6b rtl RTL -.393845 OPL2_GET_KEYON +.393845 OPL2_GET_SCALINGLEVEL .393845 48 pha PHA ; begin setdp macro .393846 08 php PHP .393847 c2 20 rep #$20 REP #$20 ; set A long @@ -5750,1156 +5800,1157 @@ .39384c 5b tcd TCD .39384d 28 plp PLP .39384e 68 pla PLA ; end setdp macro -.39384f e2 20 sep #$20 SEP #$20 ; set A short -.393851 18 clc CLC -.393852 a5 27 lda $27 LDA OPL2_CHANNEL -.393854 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393856 69 b0 adc #$b0 ADC #$B0 -.393858 85 2a sta $2a STA OPL2_REG_OFFSET -.39385a a9 00 lda #$00 LDA #$00 -.39385c 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.39385e c2 30 rep #$30 REP #$30 ; set A&X long -.393860 18 clc CLC -.393861 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393864 65 2a adc $2a ADC OPL2_REG_OFFSET -.393866 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393868 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.39386b 85 2e sta $2e STA OPL2_IND_ADDY_HL -.39386d e2 20 sep #$20 SEP #$20 ; set A short -.39386f a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393871 29 20 and #$20 AND #$20 -.393873 6b rtl RTL -.393874 OPL2_GET_FEEDBACK -.393874 48 pha PHA ; begin setdp macro -.393875 08 php PHP -.393876 c2 20 rep #$20 REP #$20 ; set A long -.393878 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.39387b 5b tcd TCD -.39387c 28 plp PLP -.39387d 68 pla PLA ; end setdp macro -.39387e e2 20 sep #$20 SEP #$20 ; set A short -.393880 18 clc CLC -.393881 a5 27 lda $27 LDA OPL2_CHANNEL -.393883 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393885 69 c0 adc #$c0 ADC #$C0 -.393887 85 2a sta $2a STA OPL2_REG_OFFSET -.393889 a9 00 lda #$00 LDA #$00 -.39388b 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.39388d c2 30 rep #$30 REP #$30 ; set A&X long -.39388f 18 clc CLC -.393890 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393893 65 2a adc $2a ADC OPL2_REG_OFFSET -.393895 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393897 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.39389a 85 2e sta $2e STA OPL2_IND_ADDY_HL -.39389c e2 20 sep #$20 SEP #$20 ; set A short -.39389e a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.3938a0 29 e0 and #$e0 AND #$E0 -.3938a2 4a lsr a LSR -.3938a3 6b rtl RTL -.3938a4 OPL2_GET_SYNTHMODE -.3938a4 48 pha PHA ; begin setdp macro -.3938a5 08 php PHP -.3938a6 c2 20 rep #$20 REP #$20 ; set A long -.3938a8 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.3938ab 5b tcd TCD -.3938ac 28 plp PLP -.3938ad 68 pla PLA ; end setdp macro -.3938ae e2 20 sep #$20 SEP #$20 ; set A short -.3938b0 18 clc CLC -.3938b1 a5 27 lda $27 LDA OPL2_CHANNEL -.3938b3 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.3938b5 69 c0 adc #$c0 ADC #$C0 -.3938b7 85 2a sta $2a STA OPL2_REG_OFFSET -.3938b9 a9 00 lda #$00 LDA #$00 -.3938bb 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.3938bd c2 30 rep #$30 REP #$30 ; set A&X long -.3938bf 18 clc CLC -.3938c0 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.3938c3 65 2a adc $2a ADC OPL2_REG_OFFSET -.3938c5 85 2c sta $2c STA OPL2_IND_ADDY_LL -.3938c7 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.3938ca 85 2e sta $2e STA OPL2_IND_ADDY_HL -.3938cc e2 20 sep #$20 SEP #$20 ; set A short -.3938ce a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.3938d0 29 01 and #$01 AND #$01 -.3938d2 6b rtl RTL -.3938d3 OPL2_GET_DEEPTREMOLO -.3938d3 48 pha PHA ; begin setdp macro -.3938d4 08 php PHP -.3938d5 c2 20 rep #$20 REP #$20 ; set A long -.3938d7 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.3938da 5b tcd TCD -.3938db 28 plp PLP -.3938dc 68 pla PLA ; end setdp macro -.3938dd c2 20 rep #$20 REP #$20 ; set A long -.3938df a9 bd 00 lda #$00bd LDA #$00BD; -.3938e2 85 28 sta $28 STA OPL2_REG_REGION -.3938e4 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.3938e7 e2 20 sep #$20 SEP #$20 ; set A short -.3938e9 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.3938eb 29 80 and #$80 AND #$80 -.3938ed 6b rtl RTL -.3938ee OPL2_GET_DEEPVIBRATO -.3938ee 48 pha PHA ; begin setdp macro -.3938ef 08 php PHP -.3938f0 c2 20 rep #$20 REP #$20 ; set A long -.3938f2 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.3938f5 5b tcd TCD -.3938f6 28 plp PLP -.3938f7 68 pla PLA ; end setdp macro +.39384f c2 20 rep #$20 REP #$20 ; set A long +.393851 a9 40 00 lda #$0040 LDA #$0040 ; +.393854 85 28 sta $28 STA OPL2_REG_REGION +.393856 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393859 e2 20 sep #$20 SEP #$20 ; set A short +.39385b a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.39385d 29 c0 and #$c0 AND #$C0 +.39385f 4a lsr a LSR A +.393860 4a lsr a LSR A +.393861 4a lsr a LSR A +.393862 4a lsr a LSR A +.393863 4a lsr a LSR A +.393864 4a lsr a LSR A +.393865 6b rtl RTL +.393866 OPL2_GET_BLOCK +.393866 48 pha PHA ; begin setdp macro +.393867 08 php PHP +.393868 c2 20 rep #$20 REP #$20 ; set A long +.39386a a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.39386d 5b tcd TCD +.39386e 28 plp PLP +.39386f 68 pla PLA ; end setdp macro +.393870 e2 20 sep #$20 SEP #$20 ; set A short +.393872 18 clc CLC +.393873 a5 27 lda $27 LDA OPL2_CHANNEL +.393875 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.393877 69 b0 adc #$b0 ADC #$B0 +.393879 85 2a sta $2a STA OPL2_REG_OFFSET +.39387b a9 00 lda #$00 LDA #$00 +.39387d 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.39387f c2 30 rep #$30 REP #$30 ; set A&X long +.393881 18 clc CLC +.393882 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393885 65 2a adc $2a ADC OPL2_REG_OFFSET +.393887 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393889 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.39388c 85 2e sta $2e STA OPL2_IND_ADDY_HL +.39388e e2 20 sep #$20 SEP #$20 ; set A short +.393890 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393892 29 1c and #$1c AND #$1C +.393894 4a lsr a LSR A +.393895 4a lsr a LSR A +.393896 6b rtl RTL +.393897 OPL2_GET_KEYON +.393897 48 pha PHA ; begin setdp macro +.393898 08 php PHP +.393899 c2 20 rep #$20 REP #$20 ; set A long +.39389b a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.39389e 5b tcd TCD +.39389f 28 plp PLP +.3938a0 68 pla PLA ; end setdp macro +.3938a1 e2 20 sep #$20 SEP #$20 ; set A short +.3938a3 18 clc CLC +.3938a4 a5 27 lda $27 LDA OPL2_CHANNEL +.3938a6 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.3938a8 69 b0 adc #$b0 ADC #$B0 +.3938aa 85 2a sta $2a STA OPL2_REG_OFFSET +.3938ac a9 00 lda #$00 LDA #$00 +.3938ae 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.3938b0 c2 30 rep #$30 REP #$30 ; set A&X long +.3938b2 18 clc CLC +.3938b3 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3938b6 65 2a adc $2a ADC OPL2_REG_OFFSET +.3938b8 85 2c sta $2c STA OPL2_IND_ADDY_LL +.3938ba a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.3938bd 85 2e sta $2e STA OPL2_IND_ADDY_HL +.3938bf e2 20 sep #$20 SEP #$20 ; set A short +.3938c1 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.3938c3 29 20 and #$20 AND #$20 +.3938c5 6b rtl RTL +.3938c6 OPL2_GET_FEEDBACK +.3938c6 48 pha PHA ; begin setdp macro +.3938c7 08 php PHP +.3938c8 c2 20 rep #$20 REP #$20 ; set A long +.3938ca a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.3938cd 5b tcd TCD +.3938ce 28 plp PLP +.3938cf 68 pla PLA ; end setdp macro +.3938d0 e2 20 sep #$20 SEP #$20 ; set A short +.3938d2 18 clc CLC +.3938d3 a5 27 lda $27 LDA OPL2_CHANNEL +.3938d5 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.3938d7 69 c0 adc #$c0 ADC #$C0 +.3938d9 85 2a sta $2a STA OPL2_REG_OFFSET +.3938db a9 00 lda #$00 LDA #$00 +.3938dd 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.3938df c2 30 rep #$30 REP #$30 ; set A&X long +.3938e1 18 clc CLC +.3938e2 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3938e5 65 2a adc $2a ADC OPL2_REG_OFFSET +.3938e7 85 2c sta $2c STA OPL2_IND_ADDY_LL +.3938e9 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.3938ec 85 2e sta $2e STA OPL2_IND_ADDY_HL +.3938ee e2 20 sep #$20 SEP #$20 ; set A short +.3938f0 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.3938f2 29 e0 and #$e0 AND #$E0 +.3938f4 4a lsr a LSR +.3938f5 6b rtl RTL +.3938f6 OPL2_GET_SYNTHMODE +.3938f6 48 pha PHA ; begin setdp macro +.3938f7 08 php PHP .3938f8 c2 20 rep #$20 REP #$20 ; set A long -.3938fa a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.3938fd 69 bd 00 adc #$00bd ADC #$00BD -.393900 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393902 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393905 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393907 e2 20 sep #$20 SEP #$20 ; set A short -.393909 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.39390b 29 40 and #$40 AND #$40 -.39390d 6b rtl RTL -.39390e OPL2_GET_PERCUSSION -.39390e 48 pha PHA ; begin setdp macro -.39390f 08 php PHP -.393910 c2 20 rep #$20 REP #$20 ; set A long -.393912 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393915 5b tcd TCD -.393916 28 plp PLP -.393917 68 pla PLA ; end setdp macro -.393918 c2 20 rep #$20 REP #$20 ; set A long -.39391a a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.39391d 69 bd 00 adc #$00bd ADC #$00BD -.393920 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393922 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393925 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393927 e2 20 sep #$20 SEP #$20 ; set A short -.393929 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.39392b 29 20 and #$20 AND #$20 -.39392d 6b rtl RTL -.39392e OPL2_GET_DRUMS -.39392e 48 pha PHA ; begin setdp macro -.39392f 08 php PHP -.393930 c2 20 rep #$20 REP #$20 ; set A long -.393932 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393935 5b tcd TCD -.393936 28 plp PLP -.393937 68 pla PLA ; end setdp macro -.393938 c2 20 rep #$20 REP #$20 ; set A long -.39393a a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.39393d 69 bd 00 adc #$00bd ADC #$00BD -.393940 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393942 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393945 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393947 e2 20 sep #$20 SEP #$20 ; set A short -.393949 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.39394b 29 1f and #$1f AND #$1F -.39394d 6b rtl RTL -.39394e OPL2_Get_WaveForm -.39394e 6b rtl RTL -.39394f OPL2_PLAYNOTE -.39394f 48 pha PHA ; begin setdp macro -.393950 08 php PHP -.393951 c2 20 rep #$20 REP #$20 ; set A long -.393953 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393956 5b tcd TCD -.393957 28 plp PLP -.393958 68 pla PLA ; end setdp macro +.3938fa a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.3938fd 5b tcd TCD +.3938fe 28 plp PLP +.3938ff 68 pla PLA ; end setdp macro +.393900 e2 20 sep #$20 SEP #$20 ; set A short +.393902 18 clc CLC +.393903 a5 27 lda $27 LDA OPL2_CHANNEL +.393905 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.393907 69 c0 adc #$c0 ADC #$C0 +.393909 85 2a sta $2a STA OPL2_REG_OFFSET +.39390b a9 00 lda #$00 LDA #$00 +.39390d 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.39390f c2 30 rep #$30 REP #$30 ; set A&X long +.393911 18 clc CLC +.393912 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393915 65 2a adc $2a ADC OPL2_REG_OFFSET +.393917 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393919 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.39391c 85 2e sta $2e STA OPL2_IND_ADDY_HL +.39391e e2 20 sep #$20 SEP #$20 ; set A short +.393920 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393922 29 01 and #$01 AND #$01 +.393924 6b rtl RTL +.393925 OPL2_GET_DEEPTREMOLO +.393925 48 pha PHA ; begin setdp macro +.393926 08 php PHP +.393927 c2 20 rep #$20 REP #$20 ; set A long +.393929 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.39392c 5b tcd TCD +.39392d 28 plp PLP +.39392e 68 pla PLA ; end setdp macro +.39392f c2 20 rep #$20 REP #$20 ; set A long +.393931 a9 bd 00 lda #$00bd LDA #$00BD; +.393934 85 28 sta $28 STA OPL2_REG_REGION +.393936 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393939 e2 20 sep #$20 SEP #$20 ; set A short +.39393b a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.39393d 29 80 and #$80 AND #$80 +.39393f 6b rtl RTL +.393940 OPL2_GET_DEEPVIBRATO +.393940 48 pha PHA ; begin setdp macro +.393941 08 php PHP +.393942 c2 20 rep #$20 REP #$20 ; set A long +.393944 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393947 5b tcd TCD +.393948 28 plp PLP +.393949 68 pla PLA ; end setdp macro +.39394a c2 20 rep #$20 REP #$20 ; set A long +.39394c a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.39394f 69 bd 00 adc #$00bd ADC #$00BD +.393952 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393954 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393957 85 2e sta $2e STA OPL2_IND_ADDY_HL .393959 e2 20 sep #$20 SEP #$20 ; set A short -.39395b da phx PHX -.39395c a9 00 lda #$00 LDA #$00 -.39395e 85 32 sta $32 STA OPL2_PARAMETER0 ; Set Keyon False -.393960 20 37 3f jsr $393f37 JSR OPL2_SET_KEYON -.393963 20 fc 3e jsr $393efc JSR OPL2_SET_BLOCK ; OPL2_SET_BLOCK Already to OPL2_OCTAVE -.393966 e2 10 sep #$10 SEP #$10 ; set X short -.393968 a5 30 lda $30 LDA OPL2_NOTE -.39396a 3a dec a DEC A -.39396b 0a asl a ASL A -.39396c aa tax TAX -.39396d bf e6 16 39 lda $3916e6,x LDA @lnoteFNumbers,X -.393971 85 32 sta $32 STA OPL2_PARAMETER0 ; Store the 8it in Param OPL2_PARAMETER0 -.393973 e8 inx INX -.393974 bf e6 16 39 lda $3916e6,x LDA @lnoteFNumbers,X -.393978 85 33 sta $33 STA OPL2_PARAMETER1 ; Store the 8bit in Param OPL2_PARAMETER1 -.39397a 22 7a 3e 39 jsl $393e7a JSL OPL2_SET_FNUMBER -.39397e a9 01 lda #$01 LDA #$01 -.393980 85 32 sta $32 STA OPL2_PARAMETER0 ; Set Keyon False -.393982 20 37 3f jsr $393f37 JSR OPL2_SET_KEYON -.393985 c2 10 rep #$10 REP #$10 ; set X long -.393987 fa plx PLX -.393988 6b rtl RTL -.393989 OPL2_PLAYDRUM -.393989 6b rtl RTL -.39398a OPL2_SET_INSTRUMENT -.39398a 48 pha PHA ; begin setdp macro -.39398b 08 php PHP -.39398c c2 20 rep #$20 REP #$20 ; set A long -.39398e a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393991 5b tcd TCD -.393992 28 plp PLP -.393993 68 pla PLA ; end setdp macro -.393994 38 sec SEC ; Set the WaveFormSelect to True -.393995 22 78 3b 39 jsl $393b78 JSL OPL2_SET_WAVEFORMSELECT; +.39395b a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.39395d 29 40 and #$40 AND #$40 +.39395f 6b rtl RTL +.393960 OPL2_GET_PERCUSSION +.393960 48 pha PHA ; begin setdp macro +.393961 08 php PHP +.393962 c2 20 rep #$20 REP #$20 ; set A long +.393964 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393967 5b tcd TCD +.393968 28 plp PLP +.393969 68 pla PLA ; end setdp macro +.39396a c2 20 rep #$20 REP #$20 ; set A long +.39396c a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.39396f 69 bd 00 adc #$00bd ADC #$00BD +.393972 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393974 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393977 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393979 e2 20 sep #$20 SEP #$20 ; set A short +.39397b a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.39397d 29 20 and #$20 AND #$20 +.39397f 6b rtl RTL +.393980 OPL2_GET_DRUMS +.393980 48 pha PHA ; begin setdp macro +.393981 08 php PHP +.393982 c2 20 rep #$20 REP #$20 ; set A long +.393984 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393987 5b tcd TCD +.393988 28 plp PLP +.393989 68 pla PLA ; end setdp macro +.39398a c2 20 rep #$20 REP #$20 ; set A long +.39398c a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.39398f 69 bd 00 adc #$00bd ADC #$00BD +.393992 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393994 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393997 85 2e sta $2e STA OPL2_IND_ADDY_HL .393999 e2 20 sep #$20 SEP #$20 ; set A short -.39399b c2 10 rep #$10 REP #$10 ; set X long -.39399d a0 00 00 ldy #$0000 LDY #$0000 -.3939a0 a2 00 00 ldx #$0000 LDX #$0000 -.3939a3 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Pointer Location 0 in Instrument Profile -.3939a5 85 35 sta $35 STA OPL2_PARAMETER3 -.3939a7 c8 iny INY -.3939a8 c9 06 cmp #$06 CMP #$06 -.3939aa d0 03 bne $3939af BNE PERCUSSION_NEXT07 -.3939ac 82 70 01 brl $393b1f BRL Percussion_6 -.3939af PERCUSSION_NEXT07 -.3939af c9 07 cmp #$07 CMP #$07 -.3939b1 d0 03 bne $3939b6 BNE PERCUSSION_NEXT08 -.3939b3 82 44 01 brl $393afa BRL Percussion_7 -.3939b6 PERCUSSION_NEXT08 -.3939b6 c9 08 cmp #$08 CMP #$08 -.3939b8 d0 03 bne $3939bd BNE PERCUSSION_NEXT09 -.3939ba 82 18 01 brl $393ad5 BRL Percussion_8 -.3939bd PERCUSSION_NEXT09 -.3939bd c9 09 cmp #$09 CMP #$09 -.3939bf d0 03 bne $3939c4 BNE PERCUSSION_NEXT0A -.3939c1 82 ec 00 brl $393ab0 BRL Percussion_9 -.3939c4 PERCUSSION_NEXT0A -.3939c4 c9 0a cmp #$0a CMP #$0A -.3939c6 d0 03 bne $3939cb BNE Percussion_Default -.3939c8 82 c0 00 brl $393a8b BRL Percussion_A -.3939cb Percussion_Default -.3939cb a9 00 lda #$00 LDA #$00 -.3939cd 85 26 sta $26 STA OPL2_OPERATOR -.3939cf c2 20 rep #$20 REP #$20 ; set A long -.3939d1 a9 20 00 lda #$0020 LDA #$0020; -.3939d4 85 28 sta $28 STA OPL2_REG_REGION -.3939d6 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.3939d9 e2 20 sep #$20 SEP #$20 ; set A short -.3939db b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.3939dd 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.3939df c8 iny INY -.3939e0 c2 20 rep #$20 REP #$20 ; set A long -.3939e2 a9 40 00 lda #$0040 LDA #$0040; -.3939e5 85 28 sta $28 STA OPL2_REG_REGION -.3939e7 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.3939ea e2 20 sep #$20 SEP #$20 ; set A short -.3939ec b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.3939ee 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.3939f0 c8 iny INY -.3939f1 c2 20 rep #$20 REP #$20 ; set A long -.3939f3 a9 60 00 lda #$0060 LDA #$0060; -.3939f6 85 28 sta $28 STA OPL2_REG_REGION -.3939f8 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.3939fb e2 20 sep #$20 SEP #$20 ; set A short -.3939fd b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.3939ff 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393a01 c8 iny INY -.393a02 c2 20 rep #$20 REP #$20 ; set A long -.393a04 a9 80 00 lda #$0080 LDA #$0080; -.393a07 85 28 sta $28 STA OPL2_REG_REGION -.393a09 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393a0c e2 20 sep #$20 SEP #$20 ; set A short -.393a0e b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.393a10 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393a12 c8 iny INY -.393a13 c2 20 rep #$20 REP #$20 ; set A long -.393a15 a9 e0 00 lda #$00e0 LDA #$00E0; -.393a18 85 28 sta $28 STA OPL2_REG_REGION -.393a1a 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393a1d e2 20 sep #$20 SEP #$20 ; set A short -.393a1f b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.393a21 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393a23 c8 iny INY -.393a24 e2 10 sep #$10 SEP #$10 ; set X short -.393a26 a5 27 lda $27 LDA OPL2_CHANNEL -.393a28 29 0f and #$0f AND #$0F -.393a2a aa tax TAX -.393a2b b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 6 in Instrument Profile -.393a2d 9f c0 e6 af sta $afe6c0,x STA @lOPL3_R_FEEDBACK,X +.39399b a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.39399d 29 1f and #$1f AND #$1F +.39399f 6b rtl RTL +.3939a0 OPL2_Get_WaveForm +.3939a0 6b rtl RTL +.3939a1 OPL2_PLAYNOTE +.3939a1 48 pha PHA ; begin setdp macro +.3939a2 08 php PHP +.3939a3 c2 20 rep #$20 REP #$20 ; set A long +.3939a5 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.3939a8 5b tcd TCD +.3939a9 28 plp PLP +.3939aa 68 pla PLA ; end setdp macro +.3939ab e2 20 sep #$20 SEP #$20 ; set A short +.3939ad da phx PHX +.3939ae a9 00 lda #$00 LDA #$00 +.3939b0 85 32 sta $32 STA OPL2_PARAMETER0 ; Set Keyon False +.3939b2 20 89 3f jsr $393f89 JSR OPL2_SET_KEYON +.3939b5 20 4e 3f jsr $393f4e JSR OPL2_SET_BLOCK ; OPL2_SET_BLOCK Already to OPL2_OCTAVE +.3939b8 e2 10 sep #$10 SEP #$10 ; set X short +.3939ba a5 30 lda $30 LDA OPL2_NOTE +.3939bc 3a dec a DEC A +.3939bd 0a asl a ASL A +.3939be aa tax TAX +.3939bf bf 38 17 39 lda $391738,x LDA @lnoteFNumbers,X +.3939c3 85 32 sta $32 STA OPL2_PARAMETER0 ; Store the 8it in Param OPL2_PARAMETER0 +.3939c5 e8 inx INX +.3939c6 bf 38 17 39 lda $391738,x LDA @lnoteFNumbers,X +.3939ca 85 33 sta $33 STA OPL2_PARAMETER1 ; Store the 8bit in Param OPL2_PARAMETER1 +.3939cc 22 cc 3e 39 jsl $393ecc JSL OPL2_SET_FNUMBER +.3939d0 a9 01 lda #$01 LDA #$01 +.3939d2 85 32 sta $32 STA OPL2_PARAMETER0 ; Set Keyon False +.3939d4 20 89 3f jsr $393f89 JSR OPL2_SET_KEYON +.3939d7 c2 10 rep #$10 REP #$10 ; set X long +.3939d9 fa plx PLX +.3939da 6b rtl RTL +.3939db OPL2_PLAYDRUM +.3939db 6b rtl RTL +.3939dc OPL2_SET_INSTRUMENT +.3939dc 48 pha PHA ; begin setdp macro +.3939dd 08 php PHP +.3939de c2 20 rep #$20 REP #$20 ; set A long +.3939e0 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.3939e3 5b tcd TCD +.3939e4 28 plp PLP +.3939e5 68 pla PLA ; end setdp macro +.3939e6 38 sec SEC ; Set the WaveFormSelect to True +.3939e7 22 ca 3b 39 jsl $393bca JSL OPL2_SET_WAVEFORMSELECT; +.3939eb e2 20 sep #$20 SEP #$20 ; set A short +.3939ed c2 10 rep #$10 REP #$10 ; set X long +.3939ef a0 00 00 ldy #$0000 LDY #$0000 +.3939f2 a2 00 00 ldx #$0000 LDX #$0000 +.3939f5 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Pointer Location 0 in Instrument Profile +.3939f7 85 35 sta $35 STA OPL2_PARAMETER3 +.3939f9 c8 iny INY +.3939fa c9 06 cmp #$06 CMP #$06 +.3939fc d0 03 bne $393a01 BNE PERCUSSION_NEXT07 +.3939fe 82 70 01 brl $393b71 BRL Percussion_6 +.393a01 PERCUSSION_NEXT07 +.393a01 c9 07 cmp #$07 CMP #$07 +.393a03 d0 03 bne $393a08 BNE PERCUSSION_NEXT08 +.393a05 82 44 01 brl $393b4c BRL Percussion_7 +.393a08 PERCUSSION_NEXT08 +.393a08 c9 08 cmp #$08 CMP #$08 +.393a0a d0 03 bne $393a0f BNE PERCUSSION_NEXT09 +.393a0c 82 18 01 brl $393b27 BRL Percussion_8 +.393a0f PERCUSSION_NEXT09 +.393a0f c9 09 cmp #$09 CMP #$09 +.393a11 d0 03 bne $393a16 BNE PERCUSSION_NEXT0A +.393a13 82 ec 00 brl $393b02 BRL Percussion_9 +.393a16 PERCUSSION_NEXT0A +.393a16 c9 0a cmp #$0a CMP #$0A +.393a18 d0 03 bne $393a1d BNE Percussion_Default +.393a1a 82 c0 00 brl $393add BRL Percussion_A +.393a1d Percussion_Default +.393a1d a9 00 lda #$00 LDA #$00 +.393a1f 85 26 sta $26 STA OPL2_OPERATOR +.393a21 c2 20 rep #$20 REP #$20 ; set A long +.393a23 a9 20 00 lda #$0020 LDA #$0020; +.393a26 85 28 sta $28 STA OPL2_REG_REGION +.393a28 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393a2b e2 20 sep #$20 SEP #$20 ; set A short +.393a2d b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile +.393a2f 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] .393a31 c8 iny INY -.393a32 a9 01 lda #$01 LDA #$01 -.393a34 85 26 sta $26 STA OPL2_OPERATOR -.393a36 c2 20 rep #$20 REP #$20 ; set A long -.393a38 a9 20 00 lda #$0020 LDA #$0020; -.393a3b 85 28 sta $28 STA OPL2_REG_REGION -.393a3d 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393a40 e2 20 sep #$20 SEP #$20 ; set A short -.393a42 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 7 in Instrument Profile -.393a44 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393a46 c8 iny INY -.393a47 c2 20 rep #$20 REP #$20 ; set A long -.393a49 a9 40 00 lda #$0040 LDA #$0040; -.393a4c 85 28 sta $28 STA OPL2_REG_REGION -.393a4e 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393a51 e2 20 sep #$20 SEP #$20 ; set A short -.393a53 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 8 in Instrument Profile -.393a55 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393a57 c8 iny INY -.393a58 c2 20 rep #$20 REP #$20 ; set A long -.393a5a a9 60 00 lda #$0060 LDA #$0060; -.393a5d 85 28 sta $28 STA OPL2_REG_REGION -.393a5f 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393a62 e2 20 sep #$20 SEP #$20 ; set A short -.393a64 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 9 in Instrument Profile -.393a66 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393a68 c8 iny INY -.393a69 c2 20 rep #$20 REP #$20 ; set A long -.393a6b a9 80 00 lda #$0080 LDA #$0080; -.393a6e 85 28 sta $28 STA OPL2_REG_REGION -.393a70 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393a73 e2 20 sep #$20 SEP #$20 ; set A short -.393a75 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location A in Instrument Profile -.393a77 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393a79 c8 iny INY -.393a7a c2 20 rep #$20 REP #$20 ; set A long -.393a7c a9 e0 00 lda #$00e0 LDA #$00E0; -.393a7f 85 28 sta $28 STA OPL2_REG_REGION -.393a81 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393a84 e2 20 sep #$20 SEP #$20 ; set A short -.393a86 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location B in Instrument Profile -.393a88 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393a8a 6b rtl RTL -.393a8b Percussion_A -.393a8b e2 20 sep #$20 SEP #$20 ; set A short -.393a8d b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.393a8f 8f 31 e6 af sta $afe631 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $11 -.393a93 c8 iny INY -.393a94 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.393a96 8f 51 e6 af sta $afe651 STA @lOPL3_R_KSL_TL + $11 -.393a9a c8 iny INY -.393a9b b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.393a9d 8f 71 e6 af sta $afe671 STA @lOPL3_R_AR_DR + $11 -.393aa1 c8 iny INY -.393aa2 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.393aa4 8f 91 e6 af sta $afe691 STA @lOPL3_R_SL_RR + $11 -.393aa8 c8 iny INY -.393aa9 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.393aab 8f f1 e6 af sta $afe6f1 STA @lOPL3_R_WAVE_SELECT + $11 -.393aaf 6b rtl RTL -.393ab0 Percussion_9 -.393ab0 e2 20 sep #$20 SEP #$20 ; set A short -.393ab2 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.393ab4 8f 35 e6 af sta $afe635 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $15 -.393ab8 c8 iny INY -.393ab9 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.393abb 8f 55 e6 af sta $afe655 STA @lOPL3_R_KSL_TL + $15 -.393abf c8 iny INY -.393ac0 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.393ac2 8f 75 e6 af sta $afe675 STA @lOPL3_R_AR_DR + $15 -.393ac6 c8 iny INY -.393ac7 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.393ac9 8f 95 e6 af sta $afe695 STA @lOPL3_R_SL_RR + $15 -.393acd c8 iny INY -.393ace b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.393ad0 8f f5 e6 af sta $afe6f5 STA @lOPL3_R_WAVE_SELECT + $15 -.393ad4 6b rtl RTL -.393ad5 Percussion_8 -.393ad5 e2 20 sep #$20 SEP #$20 ; set A short -.393ad7 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.393ad9 8f 32 e6 af sta $afe632 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $12 -.393add c8 iny INY -.393ade b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.393ae0 8f 52 e6 af sta $afe652 STA @lOPL3_R_KSL_TL + $12 -.393ae4 c8 iny INY -.393ae5 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.393ae7 8f 72 e6 af sta $afe672 STA @lOPL3_R_AR_DR + $12 -.393aeb c8 iny INY -.393aec b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.393aee 8f 92 e6 af sta $afe692 STA @lOPL3_R_SL_RR + $12 -.393af2 c8 iny INY -.393af3 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.393af5 8f f2 e6 af sta $afe6f2 STA @lOPL3_R_WAVE_SELECT + $12 -.393af9 6b rtl RTL -.393afa Percussion_7 -.393afa e2 20 sep #$20 SEP #$20 ; set A short -.393afc b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.393afe 8f 34 e6 af sta $afe634 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $14 -.393b02 c8 iny INY -.393b03 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.393b05 8f 54 e6 af sta $afe654 STA @lOPL3_R_KSL_TL + $14 -.393b09 c8 iny INY -.393b0a b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.393b0c 8f 74 e6 af sta $afe674 STA @lOPL3_R_AR_DR + $14 -.393b10 c8 iny INY -.393b11 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.393b13 8f 94 e6 af sta $afe694 STA @lOPL3_R_SL_RR + $14 -.393b17 c8 iny INY -.393b18 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.393b1a 8f f4 e6 af sta $afe6f4 STA @lOPL3_R_WAVE_SELECT + $14 -.393b1e 6b rtl RTL -.393b1f Percussion_6 -.393b1f e2 20 sep #$20 SEP #$20 ; set A short -.393b21 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.393b23 8f 30 e6 af sta $afe630 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $10 -.393b27 8f 33 e6 af sta $afe633 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $13 -.393b2b c8 iny INY -.393b2c b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.393b2e 8f 50 e6 af sta $afe650 STA @lOPL3_R_KSL_TL + $10 -.393b32 8f 53 e6 af sta $afe653 STA @lOPL3_R_KSL_TL + $13 +.393a32 c2 20 rep #$20 REP #$20 ; set A long +.393a34 a9 40 00 lda #$0040 LDA #$0040; +.393a37 85 28 sta $28 STA OPL2_REG_REGION +.393a39 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393a3c e2 20 sep #$20 SEP #$20 ; set A short +.393a3e b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile +.393a40 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393a42 c8 iny INY +.393a43 c2 20 rep #$20 REP #$20 ; set A long +.393a45 a9 60 00 lda #$0060 LDA #$0060; +.393a48 85 28 sta $28 STA OPL2_REG_REGION +.393a4a 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393a4d e2 20 sep #$20 SEP #$20 ; set A short +.393a4f b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile +.393a51 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393a53 c8 iny INY +.393a54 c2 20 rep #$20 REP #$20 ; set A long +.393a56 a9 80 00 lda #$0080 LDA #$0080; +.393a59 85 28 sta $28 STA OPL2_REG_REGION +.393a5b 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393a5e e2 20 sep #$20 SEP #$20 ; set A short +.393a60 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile +.393a62 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393a64 c8 iny INY +.393a65 c2 20 rep #$20 REP #$20 ; set A long +.393a67 a9 e0 00 lda #$00e0 LDA #$00E0; +.393a6a 85 28 sta $28 STA OPL2_REG_REGION +.393a6c 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393a6f e2 20 sep #$20 SEP #$20 ; set A short +.393a71 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile +.393a73 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393a75 c8 iny INY +.393a76 e2 10 sep #$10 SEP #$10 ; set X short +.393a78 a5 27 lda $27 LDA OPL2_CHANNEL +.393a7a 29 0f and #$0f AND #$0F +.393a7c aa tax TAX +.393a7d b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 6 in Instrument Profile +.393a7f 9f c0 e6 af sta $afe6c0,x STA @lOPL3_R_FEEDBACK,X +.393a83 c8 iny INY +.393a84 a9 01 lda #$01 LDA #$01 +.393a86 85 26 sta $26 STA OPL2_OPERATOR +.393a88 c2 20 rep #$20 REP #$20 ; set A long +.393a8a a9 20 00 lda #$0020 LDA #$0020; +.393a8d 85 28 sta $28 STA OPL2_REG_REGION +.393a8f 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393a92 e2 20 sep #$20 SEP #$20 ; set A short +.393a94 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 7 in Instrument Profile +.393a96 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393a98 c8 iny INY +.393a99 c2 20 rep #$20 REP #$20 ; set A long +.393a9b a9 40 00 lda #$0040 LDA #$0040; +.393a9e 85 28 sta $28 STA OPL2_REG_REGION +.393aa0 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393aa3 e2 20 sep #$20 SEP #$20 ; set A short +.393aa5 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 8 in Instrument Profile +.393aa7 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393aa9 c8 iny INY +.393aaa c2 20 rep #$20 REP #$20 ; set A long +.393aac a9 60 00 lda #$0060 LDA #$0060; +.393aaf 85 28 sta $28 STA OPL2_REG_REGION +.393ab1 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393ab4 e2 20 sep #$20 SEP #$20 ; set A short +.393ab6 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 9 in Instrument Profile +.393ab8 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393aba c8 iny INY +.393abb c2 20 rep #$20 REP #$20 ; set A long +.393abd a9 80 00 lda #$0080 LDA #$0080; +.393ac0 85 28 sta $28 STA OPL2_REG_REGION +.393ac2 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393ac5 e2 20 sep #$20 SEP #$20 ; set A short +.393ac7 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location A in Instrument Profile +.393ac9 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393acb c8 iny INY +.393acc c2 20 rep #$20 REP #$20 ; set A long +.393ace a9 e0 00 lda #$00e0 LDA #$00E0; +.393ad1 85 28 sta $28 STA OPL2_REG_REGION +.393ad3 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393ad6 e2 20 sep #$20 SEP #$20 ; set A short +.393ad8 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location B in Instrument Profile +.393ada 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393adc 6b rtl RTL +.393add Percussion_A +.393add e2 20 sep #$20 SEP #$20 ; set A short +.393adf b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile +.393ae1 8f 31 e6 af sta $afe631 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $11 +.393ae5 c8 iny INY +.393ae6 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile +.393ae8 8f 51 e6 af sta $afe651 STA @lOPL3_R_KSL_TL + $11 +.393aec c8 iny INY +.393aed b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile +.393aef 8f 71 e6 af sta $afe671 STA @lOPL3_R_AR_DR + $11 +.393af3 c8 iny INY +.393af4 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile +.393af6 8f 91 e6 af sta $afe691 STA @lOPL3_R_SL_RR + $11 +.393afa c8 iny INY +.393afb b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile +.393afd 8f f1 e6 af sta $afe6f1 STA @lOPL3_R_WAVE_SELECT + $11 +.393b01 6b rtl RTL +.393b02 Percussion_9 +.393b02 e2 20 sep #$20 SEP #$20 ; set A short +.393b04 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile +.393b06 8f 35 e6 af sta $afe635 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $15 +.393b0a c8 iny INY +.393b0b b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile +.393b0d 8f 55 e6 af sta $afe655 STA @lOPL3_R_KSL_TL + $15 +.393b11 c8 iny INY +.393b12 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile +.393b14 8f 75 e6 af sta $afe675 STA @lOPL3_R_AR_DR + $15 +.393b18 c8 iny INY +.393b19 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile +.393b1b 8f 95 e6 af sta $afe695 STA @lOPL3_R_SL_RR + $15 +.393b1f c8 iny INY +.393b20 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile +.393b22 8f f5 e6 af sta $afe6f5 STA @lOPL3_R_WAVE_SELECT + $15 +.393b26 6b rtl RTL +.393b27 Percussion_8 +.393b27 e2 20 sep #$20 SEP #$20 ; set A short +.393b29 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile +.393b2b 8f 32 e6 af sta $afe632 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $12 +.393b2f c8 iny INY +.393b30 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile +.393b32 8f 52 e6 af sta $afe652 STA @lOPL3_R_KSL_TL + $12 .393b36 c8 iny INY .393b37 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.393b39 8f 70 e6 af sta $afe670 STA @lOPL3_R_AR_DR + $10 -.393b3d 8f 73 e6 af sta $afe673 STA @lOPL3_R_AR_DR + $13 -.393b41 c8 iny INY -.393b42 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.393b44 8f 90 e6 af sta $afe690 STA @lOPL3_R_SL_RR + $10 -.393b48 8f 93 e6 af sta $afe693 STA @lOPL3_R_SL_RR + $13 -.393b4c c8 iny INY -.393b4d b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.393b4f 8f f0 e6 af sta $afe6f0 STA @lOPL3_R_WAVE_SELECT + $10 -.393b53 8f f3 e6 af sta $afe6f3 STA @lOPL3_R_WAVE_SELECT + $13 -.393b57 6b rtl RTL -.393b58 OPL2_SET_REGISTER -.393b58 48 pha PHA ; begin setdp macro -.393b59 08 php PHP -.393b5a c2 20 rep #$20 REP #$20 ; set A long -.393b5c a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393b5f 5b tcd TCD -.393b60 28 plp PLP -.393b61 68 pla PLA ; end setdp macro -.393b62 c2 20 rep #$20 REP #$20 ; set A long -.393b64 18 clc CLC -.393b65 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393b68 65 32 adc $32 ADC OPL2_PARAMETER0 -.393b6a 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393b6c a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393b6f 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393b39 8f 72 e6 af sta $afe672 STA @lOPL3_R_AR_DR + $12 +.393b3d c8 iny INY +.393b3e b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile +.393b40 8f 92 e6 af sta $afe692 STA @lOPL3_R_SL_RR + $12 +.393b44 c8 iny INY +.393b45 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile +.393b47 8f f2 e6 af sta $afe6f2 STA @lOPL3_R_WAVE_SELECT + $12 +.393b4b 6b rtl RTL +.393b4c Percussion_7 +.393b4c e2 20 sep #$20 SEP #$20 ; set A short +.393b4e b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile +.393b50 8f 34 e6 af sta $afe634 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $14 +.393b54 c8 iny INY +.393b55 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile +.393b57 8f 54 e6 af sta $afe654 STA @lOPL3_R_KSL_TL + $14 +.393b5b c8 iny INY +.393b5c b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile +.393b5e 8f 74 e6 af sta $afe674 STA @lOPL3_R_AR_DR + $14 +.393b62 c8 iny INY +.393b63 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile +.393b65 8f 94 e6 af sta $afe694 STA @lOPL3_R_SL_RR + $14 +.393b69 c8 iny INY +.393b6a b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile +.393b6c 8f f4 e6 af sta $afe6f4 STA @lOPL3_R_WAVE_SELECT + $14 +.393b70 6b rtl RTL +.393b71 Percussion_6 .393b71 e2 20 sep #$20 SEP #$20 ; set A short -.393b73 a5 33 lda $33 LDA OPL2_PARAMETER1 -.393b75 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393b77 6b rtl RTL -.393b78 OPL2_SET_WAVEFORMSELECT -.393b78 48 pha PHA ; begin setdp macro -.393b79 08 php PHP -.393b7a c2 20 rep #$20 REP #$20 ; set A long -.393b7c a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393b7f 5b tcd TCD -.393b80 28 plp PLP -.393b81 68 pla PLA ; end setdp macro -.393b82 c2 20 rep #$20 REP #$20 ; set A long -.393b84 a9 01 e6 lda #$e601 LDA #<>OPL3_R_BASE + $0001 -.393b87 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393b89 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393b8c 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393b8e e2 20 sep #$20 SEP #$20 ; set A short -.393b90 b0 07 bcs $393b99 BCS OPL2_Set_WaveFormSelect_set -.393b92 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393b94 29 df and #$df AND #$DF -.393b96 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393b98 6b rtl RTL -.393b99 OPL2_Set_WaveFormSelect_set -.393b99 48 pha PHA ; begin setdp macro -.393b9a 08 php PHP -.393b9b c2 20 rep #$20 REP #$20 ; set A long -.393b9d a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393ba0 5b tcd TCD -.393ba1 28 plp PLP -.393ba2 68 pla PLA ; end setdp macro -.393ba3 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393ba5 09 20 00 ora #$0020 ORA #$20 -.393ba8 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393baa 6b rtl RTL -.393bab OPL2_SET_TREMOLO -.393bab 48 pha PHA ; begin setdp macro -.393bac 08 php PHP -.393bad c2 20 rep #$20 REP #$20 ; set A long -.393baf a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393bb2 5b tcd TCD -.393bb3 28 plp PLP -.393bb4 68 pla PLA ; end setdp macro -.393bb5 08 php PHP ; Push the Carry -.393bb6 c2 20 rep #$20 REP #$20 ; set A long -.393bb8 18 clc CLC -.393bb9 a9 20 00 lda #$0020 LDA #$0020 ; -.393bbc 85 28 sta $28 STA OPL2_REG_REGION -.393bbe 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393bc1 28 plp PLP ; Pull the Carry out -.393bc2 e2 20 sep #$20 SEP #$20 ; set A short -.393bc4 b0 08 bcs $393bce BCS OPL2_Set_Tremolo_Set; -.393bc6 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393bc8 29 7f and #$7f AND #$7F -.393bca 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393bcc 80 06 bra $393bd4 BRA OPL2_Set_Tremolo_Exit -.393bce OPL2_Set_Tremolo_Set -.393bce a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393bd0 09 80 ora #$80 ORA #$80 -.393bd2 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393bd4 OPL2_Set_Tremolo_Exit -.393bd4 6b rtl RTL -.393bd5 OPL2_GET_TREMOLO -.393bd5 48 pha PHA ; begin setdp macro -.393bd6 08 php PHP -.393bd7 c2 20 rep #$20 REP #$20 ; set A long -.393bd9 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393bdc 5b tcd TCD -.393bdd 28 plp PLP -.393bde 68 pla PLA ; end setdp macro -.393bdf c2 20 rep #$20 REP #$20 ; set A long -.393be1 a9 20 00 lda #$0020 LDA #$0020; -.393be4 85 28 sta $28 STA OPL2_REG_REGION -.393be6 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393be9 e2 20 sep #$20 SEP #$20 ; set A short -.393beb a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393bed 29 80 and #$80 AND #$80 -.393bef 6b rtl RTL -.393bf0 OPL2_SET_VIBRATO -.393bf0 48 pha PHA ; begin setdp macro -.393bf1 08 php PHP -.393bf2 c2 20 rep #$20 REP #$20 ; set A long -.393bf4 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393bf7 5b tcd TCD -.393bf8 28 plp PLP -.393bf9 68 pla PLA ; end setdp macro -.393bfa 08 php PHP ; Push the Carry -.393bfb c2 20 rep #$20 REP #$20 ; set A long -.393bfd 18 clc CLC -.393bfe a9 20 00 lda #$0020 LDA #$0020; -.393c01 85 28 sta $28 STA OPL2_REG_REGION -.393c03 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393c06 28 plp PLP ; Pull the Carry out -.393c07 e2 20 sep #$20 SEP #$20 ; set A short -.393c09 b0 08 bcs $393c13 BCS OPL2_Set_Vibrato_Set; -.393c0b a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393c0d 29 bf and #$bf AND #$BF -.393c0f 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393c11 80 06 bra $393c19 BRA OPL2_Set_Vibrato_Exit -.393c13 OPL2_Set_Vibrato_Set -.393c13 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393c15 09 40 ora #$40 ORA #$40 -.393c17 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393c19 OPL2_Set_Vibrato_Exit -.393c19 6b rtl RTL -.393c1a OPL2_GET_VIBRATO -.393c1a 48 pha PHA ; begin setdp macro -.393c1b 08 php PHP -.393c1c c2 20 rep #$20 REP #$20 ; set A long -.393c1e a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393c21 5b tcd TCD -.393c22 28 plp PLP -.393c23 68 pla PLA ; end setdp macro -.393c24 c2 20 rep #$20 REP #$20 ; set A long -.393c26 a9 20 00 lda #$0020 LDA #$0020; -.393c29 85 28 sta $28 STA OPL2_REG_REGION -.393c2b 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393c2e e2 20 sep #$20 SEP #$20 ; set A short -.393c30 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393c32 29 40 and #$40 AND #$40 -.393c34 6b rtl RTL -.393c35 OPL2_SET_MAINTAINSUSTAIN -.393c35 48 pha PHA ; begin setdp macro -.393c36 08 php PHP -.393c37 c2 20 rep #$20 REP #$20 ; set A long -.393c39 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393c3c 5b tcd TCD -.393c3d 28 plp PLP -.393c3e 68 pla PLA ; end setdp macro -.393c3f 08 php PHP ; Push the Carry -.393c40 c2 20 rep #$20 REP #$20 ; set A long -.393c42 18 clc CLC -.393c43 a9 20 00 lda #$0020 LDA #$0020; -.393c46 85 28 sta $28 STA OPL2_REG_REGION -.393c48 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393c4b 28 plp PLP ; Pull the Carry out -.393c4c e2 20 sep #$20 SEP #$20 ; set A short -.393c4e b0 08 bcs $393c58 BCS OPL2_Set_MaintainSustain_Set; -.393c50 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393c52 29 df and #$df AND #$DF -.393c54 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393c56 80 06 bra $393c5e BRA OPL2_Set_MaintainSustain_Exit -.393c58 OPL2_Set_MaintainSustain_Set -.393c58 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393c5a 09 20 ora #$20 ORA #$20 -.393c5c 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393c5e OPL2_Set_MaintainSustain_Exit -.393c5e 6b rtl RTL -.393c5f OPL2_GET_MAINTAINSUSTAIN -.393c5f 48 pha PHA ; begin setdp macro -.393c60 08 php PHP -.393c61 c2 20 rep #$20 REP #$20 ; set A long -.393c63 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393c66 5b tcd TCD -.393c67 28 plp PLP -.393c68 68 pla PLA ; end setdp macro -.393c69 c2 20 rep #$20 REP #$20 ; set A long -.393c6b a9 20 00 lda #$0020 LDA #$0020; -.393c6e 85 28 sta $28 STA OPL2_REG_REGION -.393c70 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393c73 e2 20 sep #$20 SEP #$20 ; set A short -.393c75 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393c77 29 20 and #$20 AND #$20 -.393c79 6b rtl RTL -.393c7a OPL2_SET_ENVELOPESCALING -.393c7a 48 pha PHA ; begin setdp macro -.393c7b 08 php PHP -.393c7c c2 20 rep #$20 REP #$20 ; set A long -.393c7e a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393c81 5b tcd TCD -.393c82 28 plp PLP -.393c83 68 pla PLA ; end setdp macro -.393c84 08 php PHP ; Push the Carry -.393c85 c2 20 rep #$20 REP #$20 ; set A long -.393c87 18 clc CLC -.393c88 a9 20 00 lda #$0020 LDA #$0020; -.393c8b 85 28 sta $28 STA OPL2_REG_REGION -.393c8d 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393c90 28 plp PLP ; Pull the Carry out -.393c91 e2 20 sep #$20 SEP #$20 ; set A short -.393c93 b0 08 bcs $393c9d BCS OPL2_Set_EnvelopeScaling_Set; -.393c95 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393c97 29 ef and #$ef AND #$EF -.393c99 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393c9b 80 06 bra $393ca3 BRA OPL2_Set_EnvelopeScaling_Exit -.393c9d OPL2_Set_EnvelopeScaling_Set -.393c9d a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393c9f 09 10 ora #$10 ORA #$10 -.393ca1 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393ca3 OPL2_Set_EnvelopeScaling_Exit -.393ca3 6b rtl RTL -.393ca4 OPL2_GET_ENVELOPESCALING -.393ca4 48 pha PHA ; begin setdp macro -.393ca5 08 php PHP -.393ca6 c2 20 rep #$20 REP #$20 ; set A long -.393ca8 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393cab 5b tcd TCD -.393cac 28 plp PLP -.393cad 68 pla PLA ; end setdp macro -.393cae c2 20 rep #$20 REP #$20 ; set A long -.393cb0 a9 20 00 lda #$0020 LDA #$0020; -.393cb3 85 28 sta $28 STA OPL2_REG_REGION -.393cb5 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393cb8 e2 20 sep #$20 SEP #$20 ; set A short -.393cba a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393cbc 29 10 and #$10 AND #$10 -.393cbe 6b rtl RTL -.393cbf OPL2_GET_MODFREQMULTIPLE -.393cbf 48 pha PHA ; begin setdp macro -.393cc0 08 php PHP -.393cc1 c2 20 rep #$20 REP #$20 ; set A long -.393cc3 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393cc6 5b tcd TCD -.393cc7 28 plp PLP -.393cc8 68 pla PLA ; end setdp macro -.393cc9 c2 20 rep #$20 REP #$20 ; set A long -.393ccb a9 20 00 lda #$0020 LDA #$0020; -.393cce 85 28 sta $28 STA OPL2_REG_REGION -.393cd0 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393cd3 e2 20 sep #$20 SEP #$20 ; set A short -.393cd5 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393cd7 29 0f and #$0f AND #$0F -.393cd9 6b rtl RTL -.393cda OPL2_SET_MODFREQMULTIPLE -.393cda 48 pha PHA ; begin setdp macro -.393cdb 08 php PHP -.393cdc c2 20 rep #$20 REP #$20 ; set A long -.393cde a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393ce1 5b tcd TCD -.393ce2 28 plp PLP -.393ce3 68 pla PLA ; end setdp macro -.393ce4 c2 20 rep #$20 REP #$20 ; set A long -.393ce6 a9 20 00 lda #$0020 LDA #$0020; -.393ce9 85 28 sta $28 STA OPL2_REG_REGION -.393ceb 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393cee e2 20 sep #$20 SEP #$20 ; set A short -.393cf0 a5 32 lda $32 LDA OPL2_PARAMETER0 -.393cf2 29 0f and #$0f AND #$0F -.393cf4 85 32 sta $32 STA OPL2_PARAMETER0 -.393cf6 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393cf8 29 f0 and #$f0 AND #$F0 -.393cfa 05 32 ora $32 ORA OPL2_PARAMETER0 -.393cfc 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393cfe 6b rtl RTL -.393cff OPL2_SET_SCALINGLEVEL -.393cff 48 pha PHA ; begin setdp macro -.393d00 08 php PHP -.393d01 c2 20 rep #$20 REP #$20 ; set A long -.393d03 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393d06 5b tcd TCD -.393d07 28 plp PLP -.393d08 68 pla PLA ; end setdp macro -.393d09 c2 20 rep #$20 REP #$20 ; set A long -.393d0b a9 40 00 lda #$0040 LDA #$0040; -.393d0e 85 28 sta $28 STA OPL2_REG_REGION -.393d10 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393d13 e2 20 sep #$20 SEP #$20 ; set A short -.393d15 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack -.393d17 29 03 and #$03 AND #$03 -.393d19 0a asl a ASL -.393d1a 0a asl a ASL -.393d1b 0a asl a ASL -.393d1c 0a asl a ASL -.393d1d 0a asl a ASL -.393d1e 0a asl a ASL -.393d1f 85 32 sta $32 STA OPL2_PARAMETER0 -.393d21 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393d23 29 3f and #$3f AND #$3F -.393d25 05 32 ora $32 ORA OPL2_PARAMETER0 -.393d27 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393d29 6b rtl RTL -.393d2a OPL2_SET_VOLUME -.393d2a 48 pha PHA ; begin setdp macro -.393d2b 08 php PHP -.393d2c c2 20 rep #$20 REP #$20 ; set A long -.393d2e a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393d31 5b tcd TCD -.393d32 28 plp PLP -.393d33 68 pla PLA ; end setdp macro -.393d34 c2 20 rep #$20 REP #$20 ; set A long -.393d36 a9 40 00 lda #$0040 LDA #$0040 ; -.393d39 85 28 sta $28 STA OPL2_REG_REGION -.393d3b 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393d3e e2 20 sep #$20 SEP #$20 ; set A short -.393d40 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Volume -.393d42 29 3f and #$3f AND #$3F -.393d44 85 32 sta $32 STA OPL2_PARAMETER0 -.393d46 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393d48 29 c0 and #$c0 AND #$C0 -.393d4a 05 32 ora $32 ORA OPL2_PARAMETER0 -.393d4c 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393d4e 6b rtl RTL -.393d4f OPL2_GET_VOLUME -.393d4f 48 pha PHA ; begin setdp macro -.393d50 08 php PHP -.393d51 c2 20 rep #$20 REP #$20 ; set A long -.393d53 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393d56 5b tcd TCD -.393d57 28 plp PLP -.393d58 68 pla PLA ; end setdp macro -.393d59 c2 20 rep #$20 REP #$20 ; set A long -.393d5b a9 40 00 lda #$0040 LDA #$0040 ; -.393d5e 85 28 sta $28 STA OPL2_REG_REGION -.393d60 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393d63 e2 20 sep #$20 SEP #$20 ; set A short -.393d65 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393d67 29 3f and #$3f AND #$3F -.393d69 6b rtl RTL -.393d6a OPL2_SET_ATTACK -.393d6a 48 pha PHA ; begin setdp macro -.393d6b 08 php PHP -.393d6c c2 20 rep #$20 REP #$20 ; set A long -.393d6e a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393d71 5b tcd TCD -.393d72 28 plp PLP -.393d73 68 pla PLA ; end setdp macro -.393d74 c2 20 rep #$20 REP #$20 ; set A long -.393d76 a9 60 00 lda #$0060 LDA #$0060 ; -.393d79 85 28 sta $28 STA OPL2_REG_REGION -.393d7b 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393d7e e2 20 sep #$20 SEP #$20 ; set A short -.393d80 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack -.393d82 29 0f and #$0f AND #$0F -.393d84 0a asl a ASL -.393d85 0a asl a ASL -.393d86 0a asl a ASL -.393d87 0a asl a ASL -.393d88 85 32 sta $32 STA OPL2_PARAMETER0 -.393d8a a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393d8c 29 0f and #$0f AND #$0F -.393d8e 05 32 ora $32 ORA OPL2_PARAMETER0 -.393d90 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393d92 6b rtl RTL -.393d93 OPL2_GET_ATTACK -.393d93 48 pha PHA ; begin setdp macro -.393d94 08 php PHP -.393d95 c2 20 rep #$20 REP #$20 ; set A long -.393d97 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393d9a 5b tcd TCD -.393d9b 28 plp PLP -.393d9c 68 pla PLA ; end setdp macro -.393d9d c2 20 rep #$20 REP #$20 ; set A long -.393d9f a9 60 00 lda #$0060 LDA #$0060 -.393da2 85 28 sta $28 STA OPL2_REG_REGION -.393da4 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393da7 e2 20 sep #$20 SEP #$20 ; set A short -.393da9 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393dab 29 f0 and #$f0 AND #$F0 -.393dad 4a lsr a LSR -.393dae 4a lsr a LSR -.393daf 4a lsr a LSR -.393db0 4a lsr a LSR -.393db1 6b rtl RTL -.393db2 OPL2_SET_DECAY -.393db2 48 pha PHA ; begin setdp macro -.393db3 08 php PHP -.393db4 c2 20 rep #$20 REP #$20 ; set A long -.393db6 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393db9 5b tcd TCD -.393dba 28 plp PLP -.393dbb 68 pla PLA ; end setdp macro -.393dbc c2 20 rep #$20 REP #$20 ; set A long -.393dbe a9 60 00 lda #$0060 LDA #$0060; -.393dc1 85 28 sta $28 STA OPL2_REG_REGION -.393dc3 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393dc6 e2 20 sep #$20 SEP #$20 ; set A short -.393dc8 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack -.393dca 29 0f and #$0f AND #$0F -.393dcc 85 32 sta $32 STA OPL2_PARAMETER0 -.393dce a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393dd0 29 f0 and #$f0 AND #$F0 -.393dd2 05 32 ora $32 ORA OPL2_PARAMETER0 -.393dd4 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393dd6 6b rtl RTL -.393dd7 OPL2_GET_DECAY -.393dd7 48 pha PHA ; begin setdp macro -.393dd8 08 php PHP -.393dd9 c2 20 rep #$20 REP #$20 ; set A long -.393ddb a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393dde 5b tcd TCD -.393ddf 28 plp PLP -.393de0 68 pla PLA ; end setdp macro -.393de1 c2 20 rep #$20 REP #$20 ; set A long -.393de3 a9 60 00 lda #$0060 LDA #$0060 -.393de6 85 28 sta $28 STA OPL2_REG_REGION -.393de8 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393deb e2 20 sep #$20 SEP #$20 ; set A short -.393ded a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393def 29 0f and #$0f AND #$0F -.393df1 6b rtl RTL -.393df2 OPL2_SET_SUSTAIN -.393df2 48 pha PHA ; begin setdp macro -.393df3 08 php PHP -.393df4 c2 20 rep #$20 REP #$20 ; set A long -.393df6 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393df9 5b tcd TCD -.393dfa 28 plp PLP -.393dfb 68 pla PLA ; end setdp macro -.393dfc c2 20 rep #$20 REP #$20 ; set A long -.393dfe a9 80 00 lda #$0080 LDA #$0080; -.393e01 85 28 sta $28 STA OPL2_REG_REGION -.393e03 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393e06 e2 20 sep #$20 SEP #$20 ; set A short -.393e08 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack -.393e0a 29 0f and #$0f AND #$0F -.393e0c 0a asl a ASL -.393e0d 0a asl a ASL -.393e0e 0a asl a ASL -.393e0f 0a asl a ASL -.393e10 85 32 sta $32 STA OPL2_PARAMETER0 -.393e12 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393e14 29 0f and #$0f AND #$0F -.393e16 05 32 ora $32 ORA OPL2_PARAMETER0 -.393e18 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393e1a 6b rtl RTL -.393e1b OPL2_GET_SUSTAIN -.393e1b 48 pha PHA ; begin setdp macro -.393e1c 08 php PHP -.393e1d c2 20 rep #$20 REP #$20 ; set A long -.393e1f a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393e22 5b tcd TCD -.393e23 28 plp PLP -.393e24 68 pla PLA ; end setdp macro -.393e25 c2 20 rep #$20 REP #$20 ; set A long -.393e27 a9 80 00 lda #$0080 LDA #$0080 -.393e2a 85 28 sta $28 STA OPL2_REG_REGION -.393e2c 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393e2f e2 20 sep #$20 SEP #$20 ; set A short -.393e31 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393e33 29 f0 and #$f0 AND #$F0 -.393e35 4a lsr a LSR -.393e36 4a lsr a LSR -.393e37 4a lsr a LSR -.393e38 4a lsr a LSR -.393e39 6b rtl RTL -.393e3a OPL2_SET_RELEASE -.393e3a 48 pha PHA ; begin setdp macro -.393e3b 08 php PHP -.393e3c c2 20 rep #$20 REP #$20 ; set A long -.393e3e a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393e41 5b tcd TCD -.393e42 28 plp PLP -.393e43 68 pla PLA ; end setdp macro -.393e44 c2 20 rep #$20 REP #$20 ; set A long -.393e46 a9 80 00 lda #$0080 LDA #$0080; -.393e49 85 28 sta $28 STA OPL2_REG_REGION -.393e4b 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393e4e e2 20 sep #$20 SEP #$20 ; set A short -.393e50 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack -.393e52 29 0f and #$0f AND #$0F -.393e54 85 32 sta $32 STA OPL2_PARAMETER0 -.393e56 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393e58 29 f0 and #$f0 AND #$F0 -.393e5a 05 32 ora $32 ORA OPL2_PARAMETER0 -.393e5c 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393e5e 6b rtl RTL -.393e5f OPL2_GET_RELEASE -.393e5f 48 pha PHA ; begin setdp macro -.393e60 08 php PHP -.393e61 c2 20 rep #$20 REP #$20 ; set A long -.393e63 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393e66 5b tcd TCD -.393e67 28 plp PLP -.393e68 68 pla PLA ; end setdp macro -.393e69 c2 20 rep #$20 REP #$20 ; set A long -.393e6b a9 80 00 lda #$0080 LDA #$0080 -.393e6e 85 28 sta $28 STA OPL2_REG_REGION -.393e70 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET -.393e73 e2 20 sep #$20 SEP #$20 ; set A short -.393e75 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393e77 29 0f and #$0f AND #$0F -.393e79 6b rtl RTL -.393e7a OPL2_SET_FNUMBER -.393e7a 48 pha PHA ; begin setdp macro -.393e7b 08 php PHP -.393e7c c2 20 rep #$20 REP #$20 ; set A long -.393e7e a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393e81 5b tcd TCD -.393e82 28 plp PLP -.393e83 68 pla PLA ; end setdp macro -.393e84 e2 20 sep #$20 SEP #$20 ; set A short -.393e86 18 clc CLC -.393e87 a5 27 lda $27 LDA OPL2_CHANNEL -.393e89 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393e8b 69 a0 adc #$a0 ADC #$A0 -.393e8d 85 2a sta $2a STA OPL2_REG_OFFSET -.393e8f a9 00 lda #$00 LDA #$00 -.393e91 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.393e93 c2 30 rep #$30 REP #$30 ; set A&X long -.393e95 18 clc CLC -.393e96 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393e99 65 2a adc $2a ADC OPL2_REG_OFFSET -.393e9b 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393e9d a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393ea0 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393ea2 e2 20 sep #$20 SEP #$20 ; set A short -.393ea4 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Load the first 8 Bits Value of FNumber -.393ea6 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] ; Load -.393ea8 18 clc CLC -.393ea9 a5 2c lda $2c LDA OPL2_IND_ADDY_LL -.393eab 69 10 adc #$10 ADC #$10 -.393ead 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393eaf a5 33 lda $33 LDA OPL2_PARAMETER1 -.393eb1 29 03 and #$03 AND #$03 -.393eb3 85 33 sta $33 STA OPL2_PARAMETER1 -.393eb5 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393eb7 29 fc and #$fc AND #$FC -.393eb9 05 33 ora $33 ORA OPL2_PARAMETER1 -.393ebb 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393ebd 6b rtl RTL -.393ebe OPL2_GET_FNUMBER -.393ebe 48 pha PHA ; begin setdp macro -.393ebf 08 php PHP -.393ec0 c2 20 rep #$20 REP #$20 ; set A long -.393ec2 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393ec5 5b tcd TCD -.393ec6 28 plp PLP -.393ec7 68 pla PLA ; end setdp macro -.393ec8 e2 20 sep #$20 SEP #$20 ; set A short -.393eca 18 clc CLC -.393ecb a5 27 lda $27 LDA OPL2_CHANNEL -.393ecd 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393ecf 69 a0 adc #$a0 ADC #$A0 -.393ed1 85 2a sta $2a STA OPL2_REG_OFFSET -.393ed3 a9 00 lda #$00 LDA #$00 -.393ed5 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.393ed7 c2 30 rep #$30 REP #$30 ; set A&X long -.393ed9 18 clc CLC -.393eda a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393edd 65 2a adc $2a ADC OPL2_REG_OFFSET -.393edf 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393ee1 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393ee4 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393ee6 e2 20 sep #$20 SEP #$20 ; set A short -.393ee8 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393eea 85 32 sta $32 STA OPL2_PARAMETER0 -.393eec 18 clc CLC -.393eed a5 2c lda $2c LDA OPL2_IND_ADDY_LL -.393eef 69 10 adc #$10 ADC #$10 -.393ef1 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393ef3 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393ef5 29 03 and #$03 AND #$03 -.393ef7 85 33 sta $33 STA OPL2_PARAMETER1 -.393ef9 6b rtl RTL -.393efa OPL2_Set_Frequency -.393efa 6b rtl RTL -.393efb OPL2_Get_Frequency -.393efb 6b rtl RTL -.393efc OPL2_SET_BLOCK -.393efc 48 pha PHA ; begin setdp macro -.393efd 08 php PHP -.393efe c2 20 rep #$20 REP #$20 ; set A long -.393f00 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393f03 5b tcd TCD -.393f04 28 plp PLP -.393f05 68 pla PLA ; end setdp macro -.393f06 e2 20 sep #$20 SEP #$20 ; set A short -.393f08 18 clc CLC -.393f09 a5 27 lda $27 LDA OPL2_CHANNEL -.393f0b 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393f0d 69 b0 adc #$b0 ADC #$B0 -.393f0f 85 2a sta $2a STA OPL2_REG_OFFSET -.393f11 a9 00 lda #$00 LDA #$00 -.393f13 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.393f15 c2 30 rep #$30 REP #$30 ; set A&X long -.393f17 18 clc CLC -.393f18 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393f1b 65 2a adc $2a ADC OPL2_REG_OFFSET -.393f1d 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393f1f a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393f22 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393f24 e2 20 sep #$20 SEP #$20 ; set A short -.393f26 a5 31 lda $31 LDA OPL2_OCTAVE -.393f28 29 07 and #$07 AND #$07 -.393f2a 0a asl a ASL -.393f2b 0a asl a ASL -.393f2c 85 31 sta $31 STA OPL2_OCTAVE -.393f2e a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393f30 29 e3 and #$e3 AND #$E3 -.393f32 05 31 ora $31 ORA OPL2_OCTAVE -.393f34 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393f36 60 rts RTS -.393f37 OPL2_SET_KEYON -.393f37 48 pha PHA ; begin setdp macro -.393f38 08 php PHP -.393f39 c2 20 rep #$20 REP #$20 ; set A long -.393f3b a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393f3e 5b tcd TCD -.393f3f 28 plp PLP -.393f40 68 pla PLA ; end setdp macro -.393f41 e2 20 sep #$20 SEP #$20 ; set A short -.393f43 18 clc CLC -.393f44 a5 27 lda $27 LDA OPL2_CHANNEL -.393f46 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393f48 69 b0 adc #$b0 ADC #$B0 -.393f4a 85 2a sta $2a STA OPL2_REG_OFFSET -.393f4c a9 00 lda #$00 LDA #$00 -.393f4e 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.393f50 c2 30 rep #$30 REP #$30 ; set A&X long -.393f52 18 clc CLC -.393f53 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393f56 65 2a adc $2a ADC OPL2_REG_OFFSET -.393f58 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393f5a a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393f5d 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393f5f e2 20 sep #$20 SEP #$20 ; set A short -.393f61 a5 32 lda $32 LDA OPL2_PARAMETER0 -.393f63 29 01 and #$01 AND #$01 -.393f65 f0 02 beq $393f69 BEQ SET_KEYON_OFF -.393f67 a9 20 lda #$20 LDA #$20 -.393f69 SET_KEYON_OFF -.393f69 85 32 sta $32 STA OPL2_PARAMETER0 -.393f6b a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393f6d 29 df and #$df AND #$DF -.393f6f 05 32 ora $32 ORA OPL2_PARAMETER0 -.393f71 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393f73 60 rts RTS -.393f74 OPL2_SET_FEEDBACK -.393f74 48 pha PHA ; begin setdp macro -.393f75 08 php PHP -.393f76 c2 20 rep #$20 REP #$20 ; set A long -.393f78 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393f7b 5b tcd TCD -.393f7c 28 plp PLP -.393f7d 68 pla PLA ; end setdp macro -.393f7e e2 20 sep #$20 SEP #$20 ; set A short -.393f80 18 clc CLC -.393f81 a5 27 lda $27 LDA OPL2_CHANNEL -.393f83 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393f85 69 c0 adc #$c0 ADC #$C0 -.393f87 85 2a sta $2a STA OPL2_REG_OFFSET -.393f89 a9 00 lda #$00 LDA #$00 -.393f8b 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.393f8d c2 30 rep #$30 REP #$30 ; set A&X long -.393f8f 18 clc CLC -.393f90 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393f93 65 2a adc $2a ADC OPL2_REG_OFFSET -.393f95 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393f97 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393f9a 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393f9c e2 20 sep #$20 SEP #$20 ; set A short -.393f9e a5 32 lda $32 LDA OPL2_PARAMETER0 -.393fa0 29 07 and #$07 AND #$07 -.393fa2 0a asl a ASL -.393fa3 85 32 sta $32 STA OPL2_PARAMETER0 -.393fa5 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393fa7 29 01 and #$01 AND #$01 -.393fa9 05 32 ora $32 ORA OPL2_PARAMETER0 -.393fab 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393fad 6b rtl RTL -.393fae OPL2_SET_SYNTHMODE -.393fae 48 pha PHA ; begin setdp macro -.393faf 08 php PHP -.393fb0 c2 20 rep #$20 REP #$20 ; set A long -.393fb2 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393fb5 5b tcd TCD -.393fb6 28 plp PLP -.393fb7 68 pla PLA ; end setdp macro -.393fb8 08 php PHP ; Push the Carry -.393fb9 e2 20 sep #$20 SEP #$20 ; set A short -.393fbb 18 clc CLC -.393fbc a5 27 lda $27 LDA OPL2_CHANNEL -.393fbe 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.393fc0 69 c0 adc #$c0 ADC #$C0 -.393fc2 85 2a sta $2a STA OPL2_REG_OFFSET -.393fc4 a9 00 lda #$00 LDA #$00 -.393fc6 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.393fc8 c2 30 rep #$30 REP #$30 ; set A&X long -.393fca 18 clc CLC -.393fcb a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.393fce 65 2a adc $2a ADC OPL2_REG_OFFSET -.393fd0 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393fd2 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393fd5 85 2e sta $2e STA OPL2_IND_ADDY_HL -.393fd7 28 plp PLP ; Pull the Carry out -.393fd8 e2 20 sep #$20 SEP #$20 ; set A short -.393fda b0 08 bcs $393fe4 BCS OPL2_Set_Synthmode_Set; -.393fdc a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393fde 29 fe and #$fe AND #$FE -.393fe0 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393fe2 80 06 bra $393fea BRA OPL2_Set_Synthmode_Exit -.393fe4 OPL2_Set_Synthmode_Set -.393fe4 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.393fe6 09 01 ora #$01 ORA #$01 -.393fe8 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.393fea OPL2_Set_Synthmode_Exit -.393fea 6b rtl RTL -.393feb OPL2_SET_DEEPTREMOLO -.393feb 48 pha PHA ; begin setdp macro -.393fec 08 php PHP -.393fed c2 20 rep #$20 REP #$20 ; set A long -.393fef a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.393ff2 5b tcd TCD -.393ff3 28 plp PLP -.393ff4 68 pla PLA ; end setdp macro -.393ff5 c2 20 rep #$20 REP #$20 ; set A long -.393ff7 a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD -.393ffa 85 2c sta $2c STA OPL2_IND_ADDY_LL -.393ffc a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.393fff 85 2e sta $2e STA OPL2_IND_ADDY_HL -.394001 e2 20 sep #$20 SEP #$20 ; set A short -.394003 b0 08 bcs $39400d BCS OPL2_Set_DeepTremolo_Set; -.394005 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.394007 29 7f and #$7f AND #$7F -.394009 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.39400b 80 06 bra $394013 BRA OPL2_Set_DeepTremolo_Exit -.39400d OPL2_Set_DeepTremolo_Set -.39400d a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.39400f 09 80 ora #$80 ORA #$80 -.394011 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.394013 OPL2_Set_DeepTremolo_Exit -.394013 6b rtl RTL -.394014 OPL2_SET_DEEPVIBRATO -.394014 48 pha PHA ; begin setdp macro -.394015 08 php PHP -.394016 c2 20 rep #$20 REP #$20 ; set A long -.394018 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.39401b 5b tcd TCD -.39401c 28 plp PLP -.39401d 68 pla PLA ; end setdp macro -.39401e c2 20 rep #$20 REP #$20 ; set A long -.394020 a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD -.394023 85 2c sta $2c STA OPL2_IND_ADDY_LL -.394025 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.394028 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393b73 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile +.393b75 8f 30 e6 af sta $afe630 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $10 +.393b79 8f 33 e6 af sta $afe633 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $13 +.393b7d c8 iny INY +.393b7e b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile +.393b80 8f 50 e6 af sta $afe650 STA @lOPL3_R_KSL_TL + $10 +.393b84 8f 53 e6 af sta $afe653 STA @lOPL3_R_KSL_TL + $13 +.393b88 c8 iny INY +.393b89 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile +.393b8b 8f 70 e6 af sta $afe670 STA @lOPL3_R_AR_DR + $10 +.393b8f 8f 73 e6 af sta $afe673 STA @lOPL3_R_AR_DR + $13 +.393b93 c8 iny INY +.393b94 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile +.393b96 8f 90 e6 af sta $afe690 STA @lOPL3_R_SL_RR + $10 +.393b9a 8f 93 e6 af sta $afe693 STA @lOPL3_R_SL_RR + $13 +.393b9e c8 iny INY +.393b9f b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile +.393ba1 8f f0 e6 af sta $afe6f0 STA @lOPL3_R_WAVE_SELECT + $10 +.393ba5 8f f3 e6 af sta $afe6f3 STA @lOPL3_R_WAVE_SELECT + $13 +.393ba9 6b rtl RTL +.393baa OPL2_SET_REGISTER +.393baa 48 pha PHA ; begin setdp macro +.393bab 08 php PHP +.393bac c2 20 rep #$20 REP #$20 ; set A long +.393bae a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393bb1 5b tcd TCD +.393bb2 28 plp PLP +.393bb3 68 pla PLA ; end setdp macro +.393bb4 c2 20 rep #$20 REP #$20 ; set A long +.393bb6 18 clc CLC +.393bb7 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393bba 65 32 adc $32 ADC OPL2_PARAMETER0 +.393bbc 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393bbe a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393bc1 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393bc3 e2 20 sep #$20 SEP #$20 ; set A short +.393bc5 a5 33 lda $33 LDA OPL2_PARAMETER1 +.393bc7 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393bc9 6b rtl RTL +.393bca OPL2_SET_WAVEFORMSELECT +.393bca 48 pha PHA ; begin setdp macro +.393bcb 08 php PHP +.393bcc c2 20 rep #$20 REP #$20 ; set A long +.393bce a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393bd1 5b tcd TCD +.393bd2 28 plp PLP +.393bd3 68 pla PLA ; end setdp macro +.393bd4 c2 20 rep #$20 REP #$20 ; set A long +.393bd6 a9 01 e6 lda #$e601 LDA #<>OPL3_R_BASE + $0001 +.393bd9 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393bdb a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393bde 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393be0 e2 20 sep #$20 SEP #$20 ; set A short +.393be2 b0 07 bcs $393beb BCS OPL2_Set_WaveFormSelect_set +.393be4 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393be6 29 df and #$df AND #$DF +.393be8 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393bea 6b rtl RTL +.393beb OPL2_Set_WaveFormSelect_set +.393beb 48 pha PHA ; begin setdp macro +.393bec 08 php PHP +.393bed c2 20 rep #$20 REP #$20 ; set A long +.393bef a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393bf2 5b tcd TCD +.393bf3 28 plp PLP +.393bf4 68 pla PLA ; end setdp macro +.393bf5 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393bf7 09 20 00 ora #$0020 ORA #$20 +.393bfa 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393bfc 6b rtl RTL +.393bfd OPL2_SET_TREMOLO +.393bfd 48 pha PHA ; begin setdp macro +.393bfe 08 php PHP +.393bff c2 20 rep #$20 REP #$20 ; set A long +.393c01 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393c04 5b tcd TCD +.393c05 28 plp PLP +.393c06 68 pla PLA ; end setdp macro +.393c07 08 php PHP ; Push the Carry +.393c08 c2 20 rep #$20 REP #$20 ; set A long +.393c0a 18 clc CLC +.393c0b a9 20 00 lda #$0020 LDA #$0020 ; +.393c0e 85 28 sta $28 STA OPL2_REG_REGION +.393c10 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393c13 28 plp PLP ; Pull the Carry out +.393c14 e2 20 sep #$20 SEP #$20 ; set A short +.393c16 b0 08 bcs $393c20 BCS OPL2_Set_Tremolo_Set; +.393c18 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393c1a 29 7f and #$7f AND #$7F +.393c1c 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393c1e 80 06 bra $393c26 BRA OPL2_Set_Tremolo_Exit +.393c20 OPL2_Set_Tremolo_Set +.393c20 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393c22 09 80 ora #$80 ORA #$80 +.393c24 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393c26 OPL2_Set_Tremolo_Exit +.393c26 6b rtl RTL +.393c27 OPL2_GET_TREMOLO +.393c27 48 pha PHA ; begin setdp macro +.393c28 08 php PHP +.393c29 c2 20 rep #$20 REP #$20 ; set A long +.393c2b a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393c2e 5b tcd TCD +.393c2f 28 plp PLP +.393c30 68 pla PLA ; end setdp macro +.393c31 c2 20 rep #$20 REP #$20 ; set A long +.393c33 a9 20 00 lda #$0020 LDA #$0020; +.393c36 85 28 sta $28 STA OPL2_REG_REGION +.393c38 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393c3b e2 20 sep #$20 SEP #$20 ; set A short +.393c3d a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393c3f 29 80 and #$80 AND #$80 +.393c41 6b rtl RTL +.393c42 OPL2_SET_VIBRATO +.393c42 48 pha PHA ; begin setdp macro +.393c43 08 php PHP +.393c44 c2 20 rep #$20 REP #$20 ; set A long +.393c46 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393c49 5b tcd TCD +.393c4a 28 plp PLP +.393c4b 68 pla PLA ; end setdp macro +.393c4c 08 php PHP ; Push the Carry +.393c4d c2 20 rep #$20 REP #$20 ; set A long +.393c4f 18 clc CLC +.393c50 a9 20 00 lda #$0020 LDA #$0020; +.393c53 85 28 sta $28 STA OPL2_REG_REGION +.393c55 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393c58 28 plp PLP ; Pull the Carry out +.393c59 e2 20 sep #$20 SEP #$20 ; set A short +.393c5b b0 08 bcs $393c65 BCS OPL2_Set_Vibrato_Set; +.393c5d a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393c5f 29 bf and #$bf AND #$BF +.393c61 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393c63 80 06 bra $393c6b BRA OPL2_Set_Vibrato_Exit +.393c65 OPL2_Set_Vibrato_Set +.393c65 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393c67 09 40 ora #$40 ORA #$40 +.393c69 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393c6b OPL2_Set_Vibrato_Exit +.393c6b 6b rtl RTL +.393c6c OPL2_GET_VIBRATO +.393c6c 48 pha PHA ; begin setdp macro +.393c6d 08 php PHP +.393c6e c2 20 rep #$20 REP #$20 ; set A long +.393c70 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393c73 5b tcd TCD +.393c74 28 plp PLP +.393c75 68 pla PLA ; end setdp macro +.393c76 c2 20 rep #$20 REP #$20 ; set A long +.393c78 a9 20 00 lda #$0020 LDA #$0020; +.393c7b 85 28 sta $28 STA OPL2_REG_REGION +.393c7d 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393c80 e2 20 sep #$20 SEP #$20 ; set A short +.393c82 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393c84 29 40 and #$40 AND #$40 +.393c86 6b rtl RTL +.393c87 OPL2_SET_MAINTAINSUSTAIN +.393c87 48 pha PHA ; begin setdp macro +.393c88 08 php PHP +.393c89 c2 20 rep #$20 REP #$20 ; set A long +.393c8b a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393c8e 5b tcd TCD +.393c8f 28 plp PLP +.393c90 68 pla PLA ; end setdp macro +.393c91 08 php PHP ; Push the Carry +.393c92 c2 20 rep #$20 REP #$20 ; set A long +.393c94 18 clc CLC +.393c95 a9 20 00 lda #$0020 LDA #$0020; +.393c98 85 28 sta $28 STA OPL2_REG_REGION +.393c9a 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393c9d 28 plp PLP ; Pull the Carry out +.393c9e e2 20 sep #$20 SEP #$20 ; set A short +.393ca0 b0 08 bcs $393caa BCS OPL2_Set_MaintainSustain_Set; +.393ca2 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393ca4 29 df and #$df AND #$DF +.393ca6 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393ca8 80 06 bra $393cb0 BRA OPL2_Set_MaintainSustain_Exit +.393caa OPL2_Set_MaintainSustain_Set +.393caa a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393cac 09 20 ora #$20 ORA #$20 +.393cae 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393cb0 OPL2_Set_MaintainSustain_Exit +.393cb0 6b rtl RTL +.393cb1 OPL2_GET_MAINTAINSUSTAIN +.393cb1 48 pha PHA ; begin setdp macro +.393cb2 08 php PHP +.393cb3 c2 20 rep #$20 REP #$20 ; set A long +.393cb5 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393cb8 5b tcd TCD +.393cb9 28 plp PLP +.393cba 68 pla PLA ; end setdp macro +.393cbb c2 20 rep #$20 REP #$20 ; set A long +.393cbd a9 20 00 lda #$0020 LDA #$0020; +.393cc0 85 28 sta $28 STA OPL2_REG_REGION +.393cc2 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393cc5 e2 20 sep #$20 SEP #$20 ; set A short +.393cc7 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393cc9 29 20 and #$20 AND #$20 +.393ccb 6b rtl RTL +.393ccc OPL2_SET_ENVELOPESCALING +.393ccc 48 pha PHA ; begin setdp macro +.393ccd 08 php PHP +.393cce c2 20 rep #$20 REP #$20 ; set A long +.393cd0 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393cd3 5b tcd TCD +.393cd4 28 plp PLP +.393cd5 68 pla PLA ; end setdp macro +.393cd6 08 php PHP ; Push the Carry +.393cd7 c2 20 rep #$20 REP #$20 ; set A long +.393cd9 18 clc CLC +.393cda a9 20 00 lda #$0020 LDA #$0020; +.393cdd 85 28 sta $28 STA OPL2_REG_REGION +.393cdf 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393ce2 28 plp PLP ; Pull the Carry out +.393ce3 e2 20 sep #$20 SEP #$20 ; set A short +.393ce5 b0 08 bcs $393cef BCS OPL2_Set_EnvelopeScaling_Set; +.393ce7 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393ce9 29 ef and #$ef AND #$EF +.393ceb 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393ced 80 06 bra $393cf5 BRA OPL2_Set_EnvelopeScaling_Exit +.393cef OPL2_Set_EnvelopeScaling_Set +.393cef a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393cf1 09 10 ora #$10 ORA #$10 +.393cf3 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393cf5 OPL2_Set_EnvelopeScaling_Exit +.393cf5 6b rtl RTL +.393cf6 OPL2_GET_ENVELOPESCALING +.393cf6 48 pha PHA ; begin setdp macro +.393cf7 08 php PHP +.393cf8 c2 20 rep #$20 REP #$20 ; set A long +.393cfa a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393cfd 5b tcd TCD +.393cfe 28 plp PLP +.393cff 68 pla PLA ; end setdp macro +.393d00 c2 20 rep #$20 REP #$20 ; set A long +.393d02 a9 20 00 lda #$0020 LDA #$0020; +.393d05 85 28 sta $28 STA OPL2_REG_REGION +.393d07 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393d0a e2 20 sep #$20 SEP #$20 ; set A short +.393d0c a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393d0e 29 10 and #$10 AND #$10 +.393d10 6b rtl RTL +.393d11 OPL2_GET_MODFREQMULTIPLE +.393d11 48 pha PHA ; begin setdp macro +.393d12 08 php PHP +.393d13 c2 20 rep #$20 REP #$20 ; set A long +.393d15 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393d18 5b tcd TCD +.393d19 28 plp PLP +.393d1a 68 pla PLA ; end setdp macro +.393d1b c2 20 rep #$20 REP #$20 ; set A long +.393d1d a9 20 00 lda #$0020 LDA #$0020; +.393d20 85 28 sta $28 STA OPL2_REG_REGION +.393d22 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393d25 e2 20 sep #$20 SEP #$20 ; set A short +.393d27 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393d29 29 0f and #$0f AND #$0F +.393d2b 6b rtl RTL +.393d2c OPL2_SET_MODFREQMULTIPLE +.393d2c 48 pha PHA ; begin setdp macro +.393d2d 08 php PHP +.393d2e c2 20 rep #$20 REP #$20 ; set A long +.393d30 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393d33 5b tcd TCD +.393d34 28 plp PLP +.393d35 68 pla PLA ; end setdp macro +.393d36 c2 20 rep #$20 REP #$20 ; set A long +.393d38 a9 20 00 lda #$0020 LDA #$0020; +.393d3b 85 28 sta $28 STA OPL2_REG_REGION +.393d3d 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393d40 e2 20 sep #$20 SEP #$20 ; set A short +.393d42 a5 32 lda $32 LDA OPL2_PARAMETER0 +.393d44 29 0f and #$0f AND #$0F +.393d46 85 32 sta $32 STA OPL2_PARAMETER0 +.393d48 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393d4a 29 f0 and #$f0 AND #$F0 +.393d4c 05 32 ora $32 ORA OPL2_PARAMETER0 +.393d4e 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393d50 6b rtl RTL +.393d51 OPL2_SET_SCALINGLEVEL +.393d51 48 pha PHA ; begin setdp macro +.393d52 08 php PHP +.393d53 c2 20 rep #$20 REP #$20 ; set A long +.393d55 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393d58 5b tcd TCD +.393d59 28 plp PLP +.393d5a 68 pla PLA ; end setdp macro +.393d5b c2 20 rep #$20 REP #$20 ; set A long +.393d5d a9 40 00 lda #$0040 LDA #$0040; +.393d60 85 28 sta $28 STA OPL2_REG_REGION +.393d62 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393d65 e2 20 sep #$20 SEP #$20 ; set A short +.393d67 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack +.393d69 29 03 and #$03 AND #$03 +.393d6b 0a asl a ASL +.393d6c 0a asl a ASL +.393d6d 0a asl a ASL +.393d6e 0a asl a ASL +.393d6f 0a asl a ASL +.393d70 0a asl a ASL +.393d71 85 32 sta $32 STA OPL2_PARAMETER0 +.393d73 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393d75 29 3f and #$3f AND #$3F +.393d77 05 32 ora $32 ORA OPL2_PARAMETER0 +.393d79 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393d7b 6b rtl RTL +.393d7c OPL2_SET_VOLUME +.393d7c 48 pha PHA ; begin setdp macro +.393d7d 08 php PHP +.393d7e c2 20 rep #$20 REP #$20 ; set A long +.393d80 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393d83 5b tcd TCD +.393d84 28 plp PLP +.393d85 68 pla PLA ; end setdp macro +.393d86 c2 20 rep #$20 REP #$20 ; set A long +.393d88 a9 40 00 lda #$0040 LDA #$0040 ; +.393d8b 85 28 sta $28 STA OPL2_REG_REGION +.393d8d 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393d90 e2 20 sep #$20 SEP #$20 ; set A short +.393d92 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Volume +.393d94 29 3f and #$3f AND #$3F +.393d96 85 32 sta $32 STA OPL2_PARAMETER0 +.393d98 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393d9a 29 c0 and #$c0 AND #$C0 +.393d9c 05 32 ora $32 ORA OPL2_PARAMETER0 +.393d9e 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393da0 6b rtl RTL +.393da1 OPL2_GET_VOLUME +.393da1 48 pha PHA ; begin setdp macro +.393da2 08 php PHP +.393da3 c2 20 rep #$20 REP #$20 ; set A long +.393da5 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393da8 5b tcd TCD +.393da9 28 plp PLP +.393daa 68 pla PLA ; end setdp macro +.393dab c2 20 rep #$20 REP #$20 ; set A long +.393dad a9 40 00 lda #$0040 LDA #$0040 ; +.393db0 85 28 sta $28 STA OPL2_REG_REGION +.393db2 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393db5 e2 20 sep #$20 SEP #$20 ; set A short +.393db7 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393db9 29 3f and #$3f AND #$3F +.393dbb 6b rtl RTL +.393dbc OPL2_SET_ATTACK +.393dbc 48 pha PHA ; begin setdp macro +.393dbd 08 php PHP +.393dbe c2 20 rep #$20 REP #$20 ; set A long +.393dc0 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393dc3 5b tcd TCD +.393dc4 28 plp PLP +.393dc5 68 pla PLA ; end setdp macro +.393dc6 c2 20 rep #$20 REP #$20 ; set A long +.393dc8 a9 60 00 lda #$0060 LDA #$0060 ; +.393dcb 85 28 sta $28 STA OPL2_REG_REGION +.393dcd 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393dd0 e2 20 sep #$20 SEP #$20 ; set A short +.393dd2 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack +.393dd4 29 0f and #$0f AND #$0F +.393dd6 0a asl a ASL +.393dd7 0a asl a ASL +.393dd8 0a asl a ASL +.393dd9 0a asl a ASL +.393dda 85 32 sta $32 STA OPL2_PARAMETER0 +.393ddc a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393dde 29 0f and #$0f AND #$0F +.393de0 05 32 ora $32 ORA OPL2_PARAMETER0 +.393de2 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393de4 6b rtl RTL +.393de5 OPL2_GET_ATTACK +.393de5 48 pha PHA ; begin setdp macro +.393de6 08 php PHP +.393de7 c2 20 rep #$20 REP #$20 ; set A long +.393de9 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393dec 5b tcd TCD +.393ded 28 plp PLP +.393dee 68 pla PLA ; end setdp macro +.393def c2 20 rep #$20 REP #$20 ; set A long +.393df1 a9 60 00 lda #$0060 LDA #$0060 +.393df4 85 28 sta $28 STA OPL2_REG_REGION +.393df6 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393df9 e2 20 sep #$20 SEP #$20 ; set A short +.393dfb a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393dfd 29 f0 and #$f0 AND #$F0 +.393dff 4a lsr a LSR +.393e00 4a lsr a LSR +.393e01 4a lsr a LSR +.393e02 4a lsr a LSR +.393e03 6b rtl RTL +.393e04 OPL2_SET_DECAY +.393e04 48 pha PHA ; begin setdp macro +.393e05 08 php PHP +.393e06 c2 20 rep #$20 REP #$20 ; set A long +.393e08 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393e0b 5b tcd TCD +.393e0c 28 plp PLP +.393e0d 68 pla PLA ; end setdp macro +.393e0e c2 20 rep #$20 REP #$20 ; set A long +.393e10 a9 60 00 lda #$0060 LDA #$0060; +.393e13 85 28 sta $28 STA OPL2_REG_REGION +.393e15 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393e18 e2 20 sep #$20 SEP #$20 ; set A short +.393e1a a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack +.393e1c 29 0f and #$0f AND #$0F +.393e1e 85 32 sta $32 STA OPL2_PARAMETER0 +.393e20 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393e22 29 f0 and #$f0 AND #$F0 +.393e24 05 32 ora $32 ORA OPL2_PARAMETER0 +.393e26 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393e28 6b rtl RTL +.393e29 OPL2_GET_DECAY +.393e29 48 pha PHA ; begin setdp macro +.393e2a 08 php PHP +.393e2b c2 20 rep #$20 REP #$20 ; set A long +.393e2d a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393e30 5b tcd TCD +.393e31 28 plp PLP +.393e32 68 pla PLA ; end setdp macro +.393e33 c2 20 rep #$20 REP #$20 ; set A long +.393e35 a9 60 00 lda #$0060 LDA #$0060 +.393e38 85 28 sta $28 STA OPL2_REG_REGION +.393e3a 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393e3d e2 20 sep #$20 SEP #$20 ; set A short +.393e3f a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393e41 29 0f and #$0f AND #$0F +.393e43 6b rtl RTL +.393e44 OPL2_SET_SUSTAIN +.393e44 48 pha PHA ; begin setdp macro +.393e45 08 php PHP +.393e46 c2 20 rep #$20 REP #$20 ; set A long +.393e48 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393e4b 5b tcd TCD +.393e4c 28 plp PLP +.393e4d 68 pla PLA ; end setdp macro +.393e4e c2 20 rep #$20 REP #$20 ; set A long +.393e50 a9 80 00 lda #$0080 LDA #$0080; +.393e53 85 28 sta $28 STA OPL2_REG_REGION +.393e55 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393e58 e2 20 sep #$20 SEP #$20 ; set A short +.393e5a a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack +.393e5c 29 0f and #$0f AND #$0F +.393e5e 0a asl a ASL +.393e5f 0a asl a ASL +.393e60 0a asl a ASL +.393e61 0a asl a ASL +.393e62 85 32 sta $32 STA OPL2_PARAMETER0 +.393e64 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393e66 29 0f and #$0f AND #$0F +.393e68 05 32 ora $32 ORA OPL2_PARAMETER0 +.393e6a 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393e6c 6b rtl RTL +.393e6d OPL2_GET_SUSTAIN +.393e6d 48 pha PHA ; begin setdp macro +.393e6e 08 php PHP +.393e6f c2 20 rep #$20 REP #$20 ; set A long +.393e71 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393e74 5b tcd TCD +.393e75 28 plp PLP +.393e76 68 pla PLA ; end setdp macro +.393e77 c2 20 rep #$20 REP #$20 ; set A long +.393e79 a9 80 00 lda #$0080 LDA #$0080 +.393e7c 85 28 sta $28 STA OPL2_REG_REGION +.393e7e 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393e81 e2 20 sep #$20 SEP #$20 ; set A short +.393e83 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393e85 29 f0 and #$f0 AND #$F0 +.393e87 4a lsr a LSR +.393e88 4a lsr a LSR +.393e89 4a lsr a LSR +.393e8a 4a lsr a LSR +.393e8b 6b rtl RTL +.393e8c OPL2_SET_RELEASE +.393e8c 48 pha PHA ; begin setdp macro +.393e8d 08 php PHP +.393e8e c2 20 rep #$20 REP #$20 ; set A long +.393e90 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393e93 5b tcd TCD +.393e94 28 plp PLP +.393e95 68 pla PLA ; end setdp macro +.393e96 c2 20 rep #$20 REP #$20 ; set A long +.393e98 a9 80 00 lda #$0080 LDA #$0080; +.393e9b 85 28 sta $28 STA OPL2_REG_REGION +.393e9d 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393ea0 e2 20 sep #$20 SEP #$20 ; set A short +.393ea2 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Attack +.393ea4 29 0f and #$0f AND #$0F +.393ea6 85 32 sta $32 STA OPL2_PARAMETER0 +.393ea8 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393eaa 29 f0 and #$f0 AND #$F0 +.393eac 05 32 ora $32 ORA OPL2_PARAMETER0 +.393eae 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393eb0 6b rtl RTL +.393eb1 OPL2_GET_RELEASE +.393eb1 48 pha PHA ; begin setdp macro +.393eb2 08 php PHP +.393eb3 c2 20 rep #$20 REP #$20 ; set A long +.393eb5 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393eb8 5b tcd TCD +.393eb9 28 plp PLP +.393eba 68 pla PLA ; end setdp macro +.393ebb c2 20 rep #$20 REP #$20 ; set A long +.393ebd a9 80 00 lda #$0080 LDA #$0080 +.393ec0 85 28 sta $28 STA OPL2_REG_REGION +.393ec2 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.393ec5 e2 20 sep #$20 SEP #$20 ; set A short +.393ec7 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393ec9 29 0f and #$0f AND #$0F +.393ecb 6b rtl RTL +.393ecc OPL2_SET_FNUMBER +.393ecc 48 pha PHA ; begin setdp macro +.393ecd 08 php PHP +.393ece c2 20 rep #$20 REP #$20 ; set A long +.393ed0 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393ed3 5b tcd TCD +.393ed4 28 plp PLP +.393ed5 68 pla PLA ; end setdp macro +.393ed6 e2 20 sep #$20 SEP #$20 ; set A short +.393ed8 18 clc CLC +.393ed9 a5 27 lda $27 LDA OPL2_CHANNEL +.393edb 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.393edd 69 a0 adc #$a0 ADC #$A0 +.393edf 85 2a sta $2a STA OPL2_REG_OFFSET +.393ee1 a9 00 lda #$00 LDA #$00 +.393ee3 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.393ee5 c2 30 rep #$30 REP #$30 ; set A&X long +.393ee7 18 clc CLC +.393ee8 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393eeb 65 2a adc $2a ADC OPL2_REG_OFFSET +.393eed 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393eef a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393ef2 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393ef4 e2 20 sep #$20 SEP #$20 ; set A short +.393ef6 a5 32 lda $32 LDA OPL2_PARAMETER0 ; Load the first 8 Bits Value of FNumber +.393ef8 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] ; Load +.393efa 18 clc CLC +.393efb a5 2c lda $2c LDA OPL2_IND_ADDY_LL +.393efd 69 10 adc #$10 ADC #$10 +.393eff 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393f01 a5 33 lda $33 LDA OPL2_PARAMETER1 +.393f03 29 03 and #$03 AND #$03 +.393f05 85 33 sta $33 STA OPL2_PARAMETER1 +.393f07 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393f09 29 fc and #$fc AND #$FC +.393f0b 05 33 ora $33 ORA OPL2_PARAMETER1 +.393f0d 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393f0f 6b rtl RTL +.393f10 OPL2_GET_FNUMBER +.393f10 48 pha PHA ; begin setdp macro +.393f11 08 php PHP +.393f12 c2 20 rep #$20 REP #$20 ; set A long +.393f14 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393f17 5b tcd TCD +.393f18 28 plp PLP +.393f19 68 pla PLA ; end setdp macro +.393f1a e2 20 sep #$20 SEP #$20 ; set A short +.393f1c 18 clc CLC +.393f1d a5 27 lda $27 LDA OPL2_CHANNEL +.393f1f 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.393f21 69 a0 adc #$a0 ADC #$A0 +.393f23 85 2a sta $2a STA OPL2_REG_OFFSET +.393f25 a9 00 lda #$00 LDA #$00 +.393f27 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.393f29 c2 30 rep #$30 REP #$30 ; set A&X long +.393f2b 18 clc CLC +.393f2c a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393f2f 65 2a adc $2a ADC OPL2_REG_OFFSET +.393f31 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393f33 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393f36 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393f38 e2 20 sep #$20 SEP #$20 ; set A short +.393f3a a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393f3c 85 32 sta $32 STA OPL2_PARAMETER0 +.393f3e 18 clc CLC +.393f3f a5 2c lda $2c LDA OPL2_IND_ADDY_LL +.393f41 69 10 adc #$10 ADC #$10 +.393f43 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393f45 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393f47 29 03 and #$03 AND #$03 +.393f49 85 33 sta $33 STA OPL2_PARAMETER1 +.393f4b 6b rtl RTL +.393f4c OPL2_Set_Frequency +.393f4c 6b rtl RTL +.393f4d OPL2_Get_Frequency +.393f4d 6b rtl RTL +.393f4e OPL2_SET_BLOCK +.393f4e 48 pha PHA ; begin setdp macro +.393f4f 08 php PHP +.393f50 c2 20 rep #$20 REP #$20 ; set A long +.393f52 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393f55 5b tcd TCD +.393f56 28 plp PLP +.393f57 68 pla PLA ; end setdp macro +.393f58 e2 20 sep #$20 SEP #$20 ; set A short +.393f5a 18 clc CLC +.393f5b a5 27 lda $27 LDA OPL2_CHANNEL +.393f5d 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.393f5f 69 b0 adc #$b0 ADC #$B0 +.393f61 85 2a sta $2a STA OPL2_REG_OFFSET +.393f63 a9 00 lda #$00 LDA #$00 +.393f65 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.393f67 c2 30 rep #$30 REP #$30 ; set A&X long +.393f69 18 clc CLC +.393f6a a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393f6d 65 2a adc $2a ADC OPL2_REG_OFFSET +.393f6f 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393f71 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393f74 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393f76 e2 20 sep #$20 SEP #$20 ; set A short +.393f78 a5 31 lda $31 LDA OPL2_OCTAVE +.393f7a 29 07 and #$07 AND #$07 +.393f7c 0a asl a ASL +.393f7d 0a asl a ASL +.393f7e 85 31 sta $31 STA OPL2_OCTAVE +.393f80 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393f82 29 e3 and #$e3 AND #$E3 +.393f84 05 31 ora $31 ORA OPL2_OCTAVE +.393f86 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393f88 60 rts RTS +.393f89 OPL2_SET_KEYON +.393f89 48 pha PHA ; begin setdp macro +.393f8a 08 php PHP +.393f8b c2 20 rep #$20 REP #$20 ; set A long +.393f8d a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393f90 5b tcd TCD +.393f91 28 plp PLP +.393f92 68 pla PLA ; end setdp macro +.393f93 e2 20 sep #$20 SEP #$20 ; set A short +.393f95 18 clc CLC +.393f96 a5 27 lda $27 LDA OPL2_CHANNEL +.393f98 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.393f9a 69 b0 adc #$b0 ADC #$B0 +.393f9c 85 2a sta $2a STA OPL2_REG_OFFSET +.393f9e a9 00 lda #$00 LDA #$00 +.393fa0 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.393fa2 c2 30 rep #$30 REP #$30 ; set A&X long +.393fa4 18 clc CLC +.393fa5 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393fa8 65 2a adc $2a ADC OPL2_REG_OFFSET +.393faa 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393fac a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393faf 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393fb1 e2 20 sep #$20 SEP #$20 ; set A short +.393fb3 a5 32 lda $32 LDA OPL2_PARAMETER0 +.393fb5 29 01 and #$01 AND #$01 +.393fb7 f0 02 beq $393fbb BEQ SET_KEYON_OFF +.393fb9 a9 20 lda #$20 LDA #$20 +.393fbb SET_KEYON_OFF +.393fbb 85 32 sta $32 STA OPL2_PARAMETER0 +.393fbd a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393fbf 29 df and #$df AND #$DF +.393fc1 05 32 ora $32 ORA OPL2_PARAMETER0 +.393fc3 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393fc5 60 rts RTS +.393fc6 OPL2_SET_FEEDBACK +.393fc6 48 pha PHA ; begin setdp macro +.393fc7 08 php PHP +.393fc8 c2 20 rep #$20 REP #$20 ; set A long +.393fca a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.393fcd 5b tcd TCD +.393fce 28 plp PLP +.393fcf 68 pla PLA ; end setdp macro +.393fd0 e2 20 sep #$20 SEP #$20 ; set A short +.393fd2 18 clc CLC +.393fd3 a5 27 lda $27 LDA OPL2_CHANNEL +.393fd5 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.393fd7 69 c0 adc #$c0 ADC #$C0 +.393fd9 85 2a sta $2a STA OPL2_REG_OFFSET +.393fdb a9 00 lda #$00 LDA #$00 +.393fdd 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.393fdf c2 30 rep #$30 REP #$30 ; set A&X long +.393fe1 18 clc CLC +.393fe2 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.393fe5 65 2a adc $2a ADC OPL2_REG_OFFSET +.393fe7 85 2c sta $2c STA OPL2_IND_ADDY_LL +.393fe9 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.393fec 85 2e sta $2e STA OPL2_IND_ADDY_HL +.393fee e2 20 sep #$20 SEP #$20 ; set A short +.393ff0 a5 32 lda $32 LDA OPL2_PARAMETER0 +.393ff2 29 07 and #$07 AND #$07 +.393ff4 0a asl a ASL +.393ff5 85 32 sta $32 STA OPL2_PARAMETER0 +.393ff7 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.393ff9 29 01 and #$01 AND #$01 +.393ffb 05 32 ora $32 ORA OPL2_PARAMETER0 +.393ffd 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.393fff 6b rtl RTL +.394000 OPL2_SET_SYNTHMODE +.394000 48 pha PHA ; begin setdp macro +.394001 08 php PHP +.394002 c2 20 rep #$20 REP #$20 ; set A long +.394004 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.394007 5b tcd TCD +.394008 28 plp PLP +.394009 68 pla PLA ; end setdp macro +.39400a 08 php PHP ; Push the Carry +.39400b e2 20 sep #$20 SEP #$20 ; set A short +.39400d 18 clc CLC +.39400e a5 27 lda $27 LDA OPL2_CHANNEL +.394010 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.394012 69 c0 adc #$c0 ADC #$C0 +.394014 85 2a sta $2a STA OPL2_REG_OFFSET +.394016 a9 00 lda #$00 LDA #$00 +.394018 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.39401a c2 30 rep #$30 REP #$30 ; set A&X long +.39401c 18 clc CLC +.39401d a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.394020 65 2a adc $2a ADC OPL2_REG_OFFSET +.394022 85 2c sta $2c STA OPL2_IND_ADDY_LL +.394024 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.394027 85 2e sta $2e STA OPL2_IND_ADDY_HL +.394029 28 plp PLP ; Pull the Carry out .39402a e2 20 sep #$20 SEP #$20 ; set A short -.39402c b0 08 bcs $394036 BCS OPL2_Set_DeepVibrato_Set; +.39402c b0 08 bcs $394036 BCS OPL2_Set_Synthmode_Set; .39402e a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.394030 29 bf and #$bf AND #$BF +.394030 29 fe and #$fe AND #$FE .394032 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.394034 80 06 bra $39403c BRA OPL2_Set_DeepVibrato_Exit -.394036 OPL2_Set_DeepVibrato_Set +.394034 80 06 bra $39403c BRA OPL2_Set_Synthmode_Exit +.394036 OPL2_Set_Synthmode_Set .394036 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.394038 09 40 ora #$40 ORA #$40 +.394038 09 01 ora #$01 ORA #$01 .39403a 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.39403c OPL2_Set_DeepVibrato_Exit +.39403c OPL2_Set_Synthmode_Exit .39403c 6b rtl RTL -.39403d OPL2_SET_PERCUSSION +.39403d OPL2_SET_DEEPTREMOLO .39403d 48 pha PHA ; begin setdp macro .39403e 08 php PHP .39403f c2 20 rep #$20 REP #$20 ; set A long @@ -6908,23 +6959,23 @@ .394045 28 plp PLP .394046 68 pla PLA ; end setdp macro .394047 c2 20 rep #$20 REP #$20 ; set A long -.394049 a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD -.39404c 85 2c sta $2c STA OPL2_IND_ADDY_LL -.39404e a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.394051 85 2e sta $2e STA OPL2_IND_ADDY_HL +.394049 a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD +.39404c 85 2c sta $2c STA OPL2_IND_ADDY_LL +.39404e a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.394051 85 2e sta $2e STA OPL2_IND_ADDY_HL .394053 e2 20 sep #$20 SEP #$20 ; set A short -.394055 b0 08 bcs $39405f BCS OPL2_Set_Percussion_Set; -.394057 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.394059 29 df and #$df AND #$DF -.39405b 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.39405d 80 06 bra $394065 BRA OPL2_Set_Percussion_Exit -.39405f OPL2_Set_Percussion_Set -.39405f a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.394061 09 20 ora #$20 ORA #$20 -.394063 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.394065 OPL2_Set_Percussion_Exit +.394055 b0 08 bcs $39405f BCS OPL2_Set_DeepTremolo_Set; +.394057 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.394059 29 7f and #$7f AND #$7F +.39405b 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.39405d 80 06 bra $394065 BRA OPL2_Set_DeepTremolo_Exit +.39405f OPL2_Set_DeepTremolo_Set +.39405f a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.394061 09 80 ora #$80 ORA #$80 +.394063 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.394065 OPL2_Set_DeepTremolo_Exit .394065 6b rtl RTL -.394066 OPL2_SET_DRUMS +.394066 OPL2_SET_DEEPVIBRATO .394066 48 pha PHA ; begin setdp macro .394067 08 php PHP .394068 c2 20 rep #$20 REP #$20 ; set A long @@ -6933,66 +6984,116 @@ .39406e 28 plp PLP .39406f 68 pla PLA ; end setdp macro .394070 c2 20 rep #$20 REP #$20 ; set A long -.394072 a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD -.394075 85 2c sta $2c STA OPL2_IND_ADDY_LL -.394077 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.39407a 85 2e sta $2e STA OPL2_IND_ADDY_HL +.394072 a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD +.394075 85 2c sta $2c STA OPL2_IND_ADDY_LL +.394077 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.39407a 85 2e sta $2e STA OPL2_IND_ADDY_HL .39407c e2 20 sep #$20 SEP #$20 ; set A short -.39407e a5 32 lda $32 LDA OPL2_PARAMETER0 -.394080 29 1f and #$1f AND #$1F -.394082 85 32 sta $32 STA OPL2_PARAMETER0 -.394084 49 ff eor #$ff EOR #$FF -.394086 85 33 sta $33 STA OPL2_PARAMETER1 -.394088 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.39408a 25 33 and $33 AND OPL2_PARAMETER1 -.39408c 05 32 ora $32 ORA OPL2_PARAMETER0 -.39408e 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.394090 6b rtl RTL -.394091 OPL2_SET_WAVEFORM -.394091 48 pha PHA ; begin setdp macro -.394092 08 php PHP -.394093 c2 20 rep #$20 REP #$20 ; set A long -.394095 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 -.394098 5b tcd TCD -.394099 28 plp PLP -.39409a 68 pla PLA ; end setdp macro -.39409b c2 20 rep #$20 REP #$20 ; set A long -.39409d a9 e0 00 lda #$00e0 LDA #$00E0; -.3940a0 85 28 sta $28 STA OPL2_REG_REGION -.3940a2 20 b6 40 jsr $3940b6 JSR OPL2_GET_REG_OFFSET +.39407e b0 08 bcs $394088 BCS OPL2_Set_DeepVibrato_Set; +.394080 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.394082 29 bf and #$bf AND #$BF +.394084 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.394086 80 06 bra $39408e BRA OPL2_Set_DeepVibrato_Exit +.394088 OPL2_Set_DeepVibrato_Set +.394088 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.39408a 09 40 ora #$40 ORA #$40 +.39408c 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.39408e OPL2_Set_DeepVibrato_Exit +.39408e 6b rtl RTL +.39408f OPL2_SET_PERCUSSION +.39408f 48 pha PHA ; begin setdp macro +.394090 08 php PHP +.394091 c2 20 rep #$20 REP #$20 ; set A long +.394093 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.394096 5b tcd TCD +.394097 28 plp PLP +.394098 68 pla PLA ; end setdp macro +.394099 c2 20 rep #$20 REP #$20 ; set A long +.39409b a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD +.39409e 85 2c sta $2c STA OPL2_IND_ADDY_LL +.3940a0 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.3940a3 85 2e sta $2e STA OPL2_IND_ADDY_HL .3940a5 e2 20 sep #$20 SEP #$20 ; set A short -.3940a7 a5 32 lda $32 LDA OPL2_PARAMETER0 -.3940a9 29 03 and #$03 AND #$03 -.3940ab 85 32 sta $32 STA OPL2_PARAMETER0 -.3940ad a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] -.3940af 29 fc and #$fc AND #$FC -.3940b1 05 32 ora $32 ORA OPL2_PARAMETER0 -.3940b3 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.3940b5 6b rtl RTL -.3940b6 OPL2_GET_REG_OFFSET -.3940b6 e2 30 sep #$30 SEP #$30 ; set A&X short -.3940b8 a5 27 lda $27 LDA OPL2_CHANNEL -.3940ba 29 0f and #$0f AND #$0F -.3940bc aa tax TAX -.3940bd a5 26 lda $26 LDA OPL2_OPERATOR ; 0 = operator 1, other = operator 2 -.3940bf d0 06 bne $3940c7 BNE OPL2_Get_Register_Offset_l0 -.3940c1 bf fe 16 39 lda $3916fe,x LDA @lregisterOffsets_operator0, X -.3940c5 80 04 bra $3940cb BRA OPL2_Get_Register_Offset_exit -.3940c7 OPL2_Get_Register_Offset_l0 -.3940c7 bf 07 17 39 lda $391707,x LDA @lregisterOffsets_operator1, X -.3940cb OPL2_Get_Register_Offset_exit -.3940cb 85 2a sta $2a STA OPL2_REG_OFFSET -.3940cd a9 00 lda #$00 LDA #$00 -.3940cf 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.3940d1 c2 30 rep #$30 REP #$30 ; set A&X long -.3940d3 18 clc CLC -.3940d4 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.3940d7 65 2a adc $2a ADC OPL2_REG_OFFSET -.3940d9 65 28 adc $28 ADC OPL2_REG_REGION ; Ex: $20, or $40, $60, $80 (in 16bits) -.3940db 85 2c sta $2c STA OPL2_IND_ADDY_LL -.3940dd a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.3940e0 85 2e sta $2e STA OPL2_IND_ADDY_HL -.3940e2 60 rts RTS +.3940a7 b0 08 bcs $3940b1 BCS OPL2_Set_Percussion_Set; +.3940a9 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.3940ab 29 df and #$df AND #$DF +.3940ad 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.3940af 80 06 bra $3940b7 BRA OPL2_Set_Percussion_Exit +.3940b1 OPL2_Set_Percussion_Set +.3940b1 a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.3940b3 09 20 ora #$20 ORA #$20 +.3940b5 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.3940b7 OPL2_Set_Percussion_Exit +.3940b7 6b rtl RTL +.3940b8 OPL2_SET_DRUMS +.3940b8 48 pha PHA ; begin setdp macro +.3940b9 08 php PHP +.3940ba c2 20 rep #$20 REP #$20 ; set A long +.3940bc a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.3940bf 5b tcd TCD +.3940c0 28 plp PLP +.3940c1 68 pla PLA ; end setdp macro +.3940c2 c2 20 rep #$20 REP #$20 ; set A long +.3940c4 a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD +.3940c7 85 2c sta $2c STA OPL2_IND_ADDY_LL +.3940c9 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.3940cc 85 2e sta $2e STA OPL2_IND_ADDY_HL +.3940ce e2 20 sep #$20 SEP #$20 ; set A short +.3940d0 a5 32 lda $32 LDA OPL2_PARAMETER0 +.3940d2 29 1f and #$1f AND #$1F +.3940d4 85 32 sta $32 STA OPL2_PARAMETER0 +.3940d6 49 ff eor #$ff EOR #$FF +.3940d8 85 33 sta $33 STA OPL2_PARAMETER1 +.3940da a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.3940dc 25 33 and $33 AND OPL2_PARAMETER1 +.3940de 05 32 ora $32 ORA OPL2_PARAMETER0 +.3940e0 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.3940e2 6b rtl RTL +.3940e3 OPL2_SET_WAVEFORM +.3940e3 48 pha PHA ; begin setdp macro +.3940e4 08 php PHP +.3940e5 c2 20 rep #$20 REP #$20 ; set A long +.3940e7 a9 00 00 lda #$0000 LDA #BANK0_BEGIN ; set DP to page 0 +.3940ea 5b tcd TCD +.3940eb 28 plp PLP +.3940ec 68 pla PLA ; end setdp macro +.3940ed c2 20 rep #$20 REP #$20 ; set A long +.3940ef a9 e0 00 lda #$00e0 LDA #$00E0; +.3940f2 85 28 sta $28 STA OPL2_REG_REGION +.3940f4 20 08 41 jsr $394108 JSR OPL2_GET_REG_OFFSET +.3940f7 e2 20 sep #$20 SEP #$20 ; set A short +.3940f9 a5 32 lda $32 LDA OPL2_PARAMETER0 +.3940fb 29 03 and #$03 AND #$03 +.3940fd 85 32 sta $32 STA OPL2_PARAMETER0 +.3940ff a7 2c lda [$2c] LDA [OPL2_IND_ADDY_LL] +.394101 29 fc and #$fc AND #$FC +.394103 05 32 ora $32 ORA OPL2_PARAMETER0 +.394105 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.394107 6b rtl RTL +.394108 OPL2_GET_REG_OFFSET +.394108 e2 30 sep #$30 SEP #$30 ; set A&X short +.39410a a5 27 lda $27 LDA OPL2_CHANNEL +.39410c 29 0f and #$0f AND #$0F +.39410e aa tax TAX +.39410f a5 26 lda $26 LDA OPL2_OPERATOR ; 0 = operator 1, other = operator 2 +.394111 d0 06 bne $394119 BNE OPL2_Get_Register_Offset_l0 +.394113 bf 50 17 39 lda $391750,x LDA @lregisterOffsets_operator0, X +.394117 80 04 bra $39411d BRA OPL2_Get_Register_Offset_exit +.394119 OPL2_Get_Register_Offset_l0 +.394119 bf 59 17 39 lda $391759,x LDA @lregisterOffsets_operator1, X +.39411d OPL2_Get_Register_Offset_exit +.39411d 85 2a sta $2a STA OPL2_REG_OFFSET +.39411f a9 00 lda #$00 LDA #$00 +.394121 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.394123 c2 30 rep #$30 REP #$30 ; set A&X long +.394125 18 clc CLC +.394126 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.394129 65 2a adc $2a ADC OPL2_REG_OFFSET +.39412b 65 28 adc $28 ADC OPL2_REG_REGION ; Ex: $20, or $40, $60, $80 (in 16bits) +.39412d 85 2c sta $2c STA OPL2_IND_ADDY_LL +.39412f a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.394132 85 2e sta $2e STA OPL2_IND_ADDY_HL +.394134 60 rts RTS ;****** Return to file: src\kernel.asm @@ -7069,542 +7170,542 @@ =$8a BIOS_ERR_NOTATA = $8A ; IDE drive is not ATA =$8b BIOS_ERR_NOTINIT = $8B ; Could not initilize the device =$8c BIOS_ERR_TIMEOUT = $8C ; Timeout error -.3940e3 ITRACE -.3940e3 08 php PHP -.3940e4 c2 30 rep #$30 REP #$30 ; set A&X long -.3940e6 8b phb PHB ; Print the text -.3940e7 a3 06 lda $06,s LDA #6,S ; Get bits[15..0] of string pointer -.3940e9 aa tax TAX ; ... into X -.3940ea e2 20 sep #$20 SEP #$20 ; set A short -.3940ec a3 08 lda $08,s LDA #8,S ; Get bits[23..16] of string pointer -.3940ee 48 pha PHA -.3940ef ab plb PLB ; ... into B -.3940f0 22 87 07 39 jsl $390787 JSL IPUTS ; Print the string -.3940f4 c2 20 rep #$20 REP #$20 ; set A long -.3940f6 a3 04 lda $04,s LDA #4,S ; Move P and return address down over the string pointer -.3940f8 83 08 sta $08,s STA #8,S -.3940fa a3 02 lda $02,s LDA #2,S -.3940fc 83 06 sta $06,s STA #6,S -.3940fe ab plb PLB -.3940ff 68 pla PLA ; Clean up the stack -.394100 68 pla PLA -.394101 28 plp PLP -.394102 6b rtl RTL -.394103 ISETTIMEOUT -.394103 8b phb PHB -.394104 0b phd PHD -.394105 08 php PHP -.394106 48 pha PHA ; begin setdbr macro -.394107 08 php PHP -.394108 e2 20 sep #$20 SEP #$20 ; set A short -.39410a a9 00 lda #$00 LDA #0 -.39410c 48 pha PHA -.39410d ab plb PLB -.39410e 28 plp PLP -.39410f 68 pla PLA ; end setdbr macro -.394110 48 pha PHA ; begin setdp macro -.394111 08 php PHP -.394112 c2 20 rep #$20 REP #$20 ; set A long -.394114 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394117 5b tcd TCD -.394118 28 plp PLP -.394119 68 pla PLA ; end setdp macro -.39411a 78 sei SEI ; We don't want to be interrupted -.39411b e2 20 sep #$20 SEP #$20 ; set A short -.39411d 85 0d sta $032d STA @b BIOS_TIMER ; Set the number of ticks to wait -.39411f a5 0c lda $032c LDA @b BIOS_FLAGS ; Clear the BIOS_TIMEOUT flag -.394121 29 7f and #$7f AND #~BIOS_TIMEOUT -.394123 85 0c sta $032c STA @b BIOS_FLAGS -.394125 28 plp done PLP -.394126 2b pld PLD -.394127 ab plb PLB -.394128 6b rtl RTL -.394129 ICMDBLOCK -.394129 0b phd PHD -.39412a 08 php PHP -.39412b 48 pha PHA ; begin setdp macro -.39412c 08 php PHP -.39412d c2 20 rep #$20 REP #$20 ; set A long -.39412f a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394132 5b tcd TCD -.394133 28 plp PLP -.394134 68 pla PLA ; end setdp macro -.394135 e2 20 sep #$20 SEP #$20 ; set A short -.394137 a5 01 lda $0321 LDA BIOS_DEV ; Get the device number -.394139 c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Check to see if we're sending to the floppy -.39413b d0 06 bne $394143 BNE ret_success ; No: just return -.39413d 22 d6 68 39 jsl $3968d6 JSL FDC_CMDBLOCK ; Yes: call upon the floppy code -.394141 90 0c bcc $39414f BCC pass_failure -.394143 ret_success -.394143 e2 20 sep #$20 SEP #$20 ; set A short -.394145 64 00 stz $0320 STZ BIOS_STATUS -.394147 28 plp PLP -.394148 2b pld PLD -.394149 38 sec SEC -.39414a 6b rtl RTL -.39414b ret_failure -.39414b e2 20 sep #$20 SEP #$20 ; set A short -.39414d 85 00 sta $0320 STA BIOS_STATUS -.39414f 28 plp pass_failure PLP -.394150 2b pld PLD -.394151 18 clc CLC -.394152 6b rtl RTL -.394153 IGETBLOCK -.394153 5a phy PHY -.394154 0b phd PHD +.394135 ITRACE +.394135 08 php PHP +.394136 c2 30 rep #$30 REP #$30 ; set A&X long +.394138 8b phb PHB ; Print the text +.394139 a3 06 lda $06,s LDA #6,S ; Get bits[15..0] of string pointer +.39413b aa tax TAX ; ... into X +.39413c e2 20 sep #$20 SEP #$20 ; set A short +.39413e a3 08 lda $08,s LDA #8,S ; Get bits[23..16] of string pointer +.394140 48 pha PHA +.394141 ab plb PLB ; ... into B +.394142 22 90 07 39 jsl $390790 JSL IPUTS ; Print the string +.394146 c2 20 rep #$20 REP #$20 ; set A long +.394148 a3 04 lda $04,s LDA #4,S ; Move P and return address down over the string pointer +.39414a 83 08 sta $08,s STA #8,S +.39414c a3 02 lda $02,s LDA #2,S +.39414e 83 06 sta $06,s STA #6,S +.394150 ab plb PLB +.394151 68 pla PLA ; Clean up the stack +.394152 68 pla PLA +.394153 28 plp PLP +.394154 6b rtl RTL +.394155 ISETTIMEOUT .394155 8b phb PHB -.394156 08 php PHP -.394157 48 pha PHA ; begin setdbr macro -.394158 08 php PHP -.394159 e2 20 sep #$20 SEP #$20 ; set A short -.39415b a9 00 lda #$00 LDA #0 -.39415d 48 pha PHA -.39415e ab plb PLB -.39415f 28 plp PLP -.394160 68 pla PLA ; end setdbr macro -.394161 48 pha PHA ; begin setdp macro -.394162 08 php PHP -.394163 c2 20 rep #$20 REP #$20 ; set A long -.394165 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394168 5b tcd TCD -.394169 28 plp PLP -.39416a 68 pla PLA ; end setdp macro -.39416b e2 20 sep #$20 SEP #$20 ; set A short -.39416d a0 00 00 ldy #$0000 LDY #0 -.394170 a9 5a lda #$5a LDA #$5A ; Fill the buffer with a pattern we can recognize -.394172 97 06 sta [$0326],y clr_loop STA [BIOS_BUFF_PTR],Y ; To make errors loading obvious -.394174 c8 iny INY -.394175 c0 00 02 cpy #$0200 CPY #512 -.394178 d0 f8 bne $394172 BNE clr_loop -.39417a a5 01 lda $0321 LDA BIOS_DEV ; Check the device number -.39417c c9 02 cmp #$02 CMP #BIOS_DEV_SD ; Is it for the SDC? -.39417e f0 14 beq $394194 BEQ sd_getblock ; Yes: go to the SDC GETBLOCK routine -.394180 c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it for the floppy drive? -.394182 f0 18 beq $39419c BEQ fd_getblock ; Yes: go to the FDC GETBLOCK routine -.394184 c9 06 cmp #$06 CMP #BIOS_DEV_HD0 ; Is it for the IDE drive? -.394186 f0 1c beq $3941a4 BEQ hd_getblock -.394188 a9 80 lda #$80 LDA #BIOS_ERR_BADDEV ; Otherwise: return a bad device error -.39418a ret_failure -.39418a e2 20 sep #$20 SEP #$20 ; set A short -.39418c 85 00 sta $0320 STA BIOS_STATUS ; Set BIOS STATUS -.39418e 28 plp PLP -.39418f ab plb PLB -.394190 2b pld PLD -.394191 7a ply PLY -.394192 38 sec SEC ; Return failure -.394193 6b rtl RTL -.394194 22 f8 5d 39 jsl $395df8 sd_getblock JSL SDC_GETBLOCK ; Call the SDC GETBLOCK routine -.394198 b0 12 bcs $3941ac BCS ret_success -.39419a 80 ee bra $39418a BRA ret_failure -.39419c 22 db 66 39 jsl $3966db fd_getblock JSL FDC_GETBLOCK ; Call the FDC GETBLOCK routine -.3941a0 b0 0a bcs $3941ac BCS ret_success -.3941a2 80 e6 bra $39418a BRA ret_failure -.3941a4 22 e9 6c 39 jsl $396ce9 hd_getblock JSL IDE_GETBLOCK ; Call the IDE GETBLOCK routine -.3941a8 b0 02 bcs $3941ac BCS ret_success -.3941aa 80 de bra $39418a BRA ret_failure -.3941ac ret_success -.3941ac e2 20 sep #$20 SEP #$20 ; set A short -.3941ae 64 00 stz $0320 STZ BIOS_STATUS ; Set BIOS STATUS to OK -.3941b0 28 plp PLP -.3941b1 ab plb PLB -.3941b2 2b pld PLD -.3941b3 7a ply PLY -.3941b4 38 sec SEC ; Return success -.3941b5 6b rtl RTL -.3941b6 IPUTBLOCK -.3941b6 0b phd PHD -.3941b7 8b phb PHB -.3941b8 08 php PHP -.3941b9 48 pha PHA ; begin setdbr macro -.3941ba 08 php PHP -.3941bb e2 20 sep #$20 SEP #$20 ; set A short -.3941bd a9 00 lda #$00 LDA #0 -.3941bf 48 pha PHA -.3941c0 ab plb PLB -.3941c1 28 plp PLP -.3941c2 68 pla PLA ; end setdbr macro -.3941c3 48 pha PHA ; begin setdp macro -.3941c4 08 php PHP -.3941c5 c2 20 rep #$20 REP #$20 ; set A long -.3941c7 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3941ca 5b tcd TCD -.3941cb 28 plp PLP -.3941cc 68 pla PLA ; end setdp macro -.3941cd e2 20 sep #$20 SEP #$20 ; set A short -.3941cf a5 01 lda $0321 LDA BIOS_DEV ; Check the device number -.3941d1 c9 02 cmp #$02 CMP #BIOS_DEV_SD ; Is it for the SDC? -.3941d3 f0 13 beq $3941e8 BEQ sd_putblock ; Yes: go to the SDC PUTBLOCK routine -.3941d5 c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it for the FDC? -.3941d7 f0 17 beq $3941f0 BEQ fd_putblock ; Yes: go to the FDC PUTBLOCK routine -.3941d9 c9 06 cmp #$06 CMP #BIOS_DEV_HD0 ; Is it for the IDE drive? -.3941db f0 1b beq $3941f8 BEQ hd_putblock -.3941dd a9 80 lda #$80 LDA #BIOS_ERR_BADDEV ; Otherwise: return a bad device error -.3941df ret_failure -.3941df e2 20 sep #$20 SEP #$20 ; set A short -.3941e1 85 00 sta $0320 STA BIOS_STATUS ; Set BIOS STATUS -.3941e3 28 plp PLP -.3941e4 ab plb PLB -.3941e5 2b pld PLD -.3941e6 18 clc CLC ; Return failure -.3941e7 6b rtl RTL -.3941e8 22 98 5e 39 jsl $395e98 sd_putblock JSL SDC_PUTBLOCK ; Call the SDC PUTBLOCK routine -.3941ec 90 f1 bcc $3941df BCC ret_failure -.3941ee 80 10 bra $394200 BRA ret_success -.3941f0 22 40 67 39 jsl $396740 fd_putblock JSL FDC_PUTBLOCK ; Call the FDC PUTBLOCK routine -.3941f4 90 e9 bcc $3941df BCC ret_failure -.3941f6 80 08 bra $394200 BRA ret_success -.3941f8 22 7a 6d 39 jsl $396d7a hd_putblock JSL IDE_PUTBLOCK ; Call the IDE PUTBLOCK routine -.3941fc 90 e1 bcc $3941df BCC ret_failure -.3941fe 80 00 bra $394200 BRA ret_success -.394200 ret_success -.394200 e2 20 sep #$20 SEP #$20 ; set A short -.394202 64 00 stz $0320 STZ BIOS_STATUS ; Set BIOS STATUS to OK -.394204 28 plp PLP -.394205 ab plb PLB -.394206 2b pld PLD -.394207 38 sec SEC ; Return success -.394208 6b rtl RTL +.394156 0b phd PHD +.394157 08 php PHP +.394158 48 pha PHA ; begin setdbr macro +.394159 08 php PHP +.39415a e2 20 sep #$20 SEP #$20 ; set A short +.39415c a9 00 lda #$00 LDA #0 +.39415e 48 pha PHA +.39415f ab plb PLB +.394160 28 plp PLP +.394161 68 pla PLA ; end setdbr macro +.394162 48 pha PHA ; begin setdp macro +.394163 08 php PHP +.394164 c2 20 rep #$20 REP #$20 ; set A long +.394166 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394169 5b tcd TCD +.39416a 28 plp PLP +.39416b 68 pla PLA ; end setdp macro +.39416c 78 sei SEI ; We don't want to be interrupted +.39416d e2 20 sep #$20 SEP #$20 ; set A short +.39416f 85 0d sta $032d STA @b BIOS_TIMER ; Set the number of ticks to wait +.394171 a5 0c lda $032c LDA @b BIOS_FLAGS ; Clear the BIOS_TIMEOUT flag +.394173 29 7f and #$7f AND #~BIOS_TIMEOUT +.394175 85 0c sta $032c STA @b BIOS_FLAGS +.394177 28 plp done PLP +.394178 2b pld PLD +.394179 ab plb PLB +.39417a 6b rtl RTL +.39417b ICMDBLOCK +.39417b 0b phd PHD +.39417c 08 php PHP +.39417d 48 pha PHA ; begin setdp macro +.39417e 08 php PHP +.39417f c2 20 rep #$20 REP #$20 ; set A long +.394181 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394184 5b tcd TCD +.394185 28 plp PLP +.394186 68 pla PLA ; end setdp macro +.394187 e2 20 sep #$20 SEP #$20 ; set A short +.394189 a5 01 lda $0321 LDA BIOS_DEV ; Get the device number +.39418b c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Check to see if we're sending to the floppy +.39418d d0 06 bne $394195 BNE ret_success ; No: just return +.39418f 22 36 69 39 jsl $396936 JSL FDC_CMDBLOCK ; Yes: call upon the floppy code +.394193 90 0c bcc $3941a1 BCC pass_failure +.394195 ret_success +.394195 e2 20 sep #$20 SEP #$20 ; set A short +.394197 64 00 stz $0320 STZ BIOS_STATUS +.394199 28 plp PLP +.39419a 2b pld PLD +.39419b 38 sec SEC +.39419c 6b rtl RTL +.39419d ret_failure +.39419d e2 20 sep #$20 SEP #$20 ; set A short +.39419f 85 00 sta $0320 STA BIOS_STATUS +.3941a1 28 plp pass_failure PLP +.3941a2 2b pld PLD +.3941a3 18 clc CLC +.3941a4 6b rtl RTL +.3941a5 IGETBLOCK +.3941a5 5a phy PHY +.3941a6 0b phd PHD +.3941a7 8b phb PHB +.3941a8 08 php PHP +.3941a9 48 pha PHA ; begin setdbr macro +.3941aa 08 php PHP +.3941ab e2 20 sep #$20 SEP #$20 ; set A short +.3941ad a9 00 lda #$00 LDA #0 +.3941af 48 pha PHA +.3941b0 ab plb PLB +.3941b1 28 plp PLP +.3941b2 68 pla PLA ; end setdbr macro +.3941b3 48 pha PHA ; begin setdp macro +.3941b4 08 php PHP +.3941b5 c2 20 rep #$20 REP #$20 ; set A long +.3941b7 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3941ba 5b tcd TCD +.3941bb 28 plp PLP +.3941bc 68 pla PLA ; end setdp macro +.3941bd e2 20 sep #$20 SEP #$20 ; set A short +.3941bf a0 00 00 ldy #$0000 LDY #0 +.3941c2 a9 5a lda #$5a LDA #$5A ; Fill the buffer with a pattern we can recognize +.3941c4 97 06 sta [$0326],y clr_loop STA [BIOS_BUFF_PTR],Y ; To make errors loading obvious +.3941c6 c8 iny INY +.3941c7 c0 00 02 cpy #$0200 CPY #512 +.3941ca d0 f8 bne $3941c4 BNE clr_loop +.3941cc a5 01 lda $0321 LDA BIOS_DEV ; Check the device number +.3941ce c9 02 cmp #$02 CMP #BIOS_DEV_SD ; Is it for the SDC? +.3941d0 f0 14 beq $3941e6 BEQ sd_getblock ; Yes: go to the SDC GETBLOCK routine +.3941d2 c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it for the floppy drive? +.3941d4 f0 18 beq $3941ee BEQ fd_getblock ; Yes: go to the FDC GETBLOCK routine +.3941d6 c9 06 cmp #$06 CMP #BIOS_DEV_HD0 ; Is it for the IDE drive? +.3941d8 f0 1c beq $3941f6 BEQ hd_getblock +.3941da a9 80 lda #$80 LDA #BIOS_ERR_BADDEV ; Otherwise: return a bad device error +.3941dc ret_failure +.3941dc e2 20 sep #$20 SEP #$20 ; set A short +.3941de 85 00 sta $0320 STA BIOS_STATUS ; Set BIOS STATUS +.3941e0 28 plp PLP +.3941e1 ab plb PLB +.3941e2 2b pld PLD +.3941e3 7a ply PLY +.3941e4 38 sec SEC ; Return failure +.3941e5 6b rtl RTL +.3941e6 22 58 5e 39 jsl $395e58 sd_getblock JSL SDC_GETBLOCK ; Call the SDC GETBLOCK routine +.3941ea b0 12 bcs $3941fe BCS ret_success +.3941ec 80 ee bra $3941dc BRA ret_failure +.3941ee 22 3b 67 39 jsl $39673b fd_getblock JSL FDC_GETBLOCK ; Call the FDC GETBLOCK routine +.3941f2 b0 0a bcs $3941fe BCS ret_success +.3941f4 80 e6 bra $3941dc BRA ret_failure +.3941f6 22 49 6d 39 jsl $396d49 hd_getblock JSL IDE_GETBLOCK ; Call the IDE GETBLOCK routine +.3941fa b0 02 bcs $3941fe BCS ret_success +.3941fc 80 de bra $3941dc BRA ret_failure +.3941fe ret_success +.3941fe e2 20 sep #$20 SEP #$20 ; set A short +.394200 64 00 stz $0320 STZ BIOS_STATUS ; Set BIOS STATUS to OK +.394202 28 plp PLP +.394203 ab plb PLB +.394204 2b pld PLD +.394205 7a ply PLY +.394206 38 sec SEC ; Return success +.394207 6b rtl RTL +.394208 IPUTBLOCK +.394208 0b phd PHD +.394209 8b phb PHB +.39420a 08 php PHP +.39420b 48 pha PHA ; begin setdbr macro +.39420c 08 php PHP +.39420d e2 20 sep #$20 SEP #$20 ; set A short +.39420f a9 00 lda #$00 LDA #0 +.394211 48 pha PHA +.394212 ab plb PLB +.394213 28 plp PLP +.394214 68 pla PLA ; end setdbr macro +.394215 48 pha PHA ; begin setdp macro +.394216 08 php PHP +.394217 c2 20 rep #$20 REP #$20 ; set A long +.394219 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39421c 5b tcd TCD +.39421d 28 plp PLP +.39421e 68 pla PLA ; end setdp macro +.39421f e2 20 sep #$20 SEP #$20 ; set A short +.394221 a5 01 lda $0321 LDA BIOS_DEV ; Check the device number +.394223 c9 02 cmp #$02 CMP #BIOS_DEV_SD ; Is it for the SDC? +.394225 f0 13 beq $39423a BEQ sd_putblock ; Yes: go to the SDC PUTBLOCK routine +.394227 c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it for the FDC? +.394229 f0 17 beq $394242 BEQ fd_putblock ; Yes: go to the FDC PUTBLOCK routine +.39422b c9 06 cmp #$06 CMP #BIOS_DEV_HD0 ; Is it for the IDE drive? +.39422d f0 1b beq $39424a BEQ hd_putblock +.39422f a9 80 lda #$80 LDA #BIOS_ERR_BADDEV ; Otherwise: return a bad device error +.394231 ret_failure +.394231 e2 20 sep #$20 SEP #$20 ; set A short +.394233 85 00 sta $0320 STA BIOS_STATUS ; Set BIOS STATUS +.394235 28 plp PLP +.394236 ab plb PLB +.394237 2b pld PLD +.394238 18 clc CLC ; Return failure +.394239 6b rtl RTL +.39423a 22 f8 5e 39 jsl $395ef8 sd_putblock JSL SDC_PUTBLOCK ; Call the SDC PUTBLOCK routine +.39423e 90 f1 bcc $394231 BCC ret_failure +.394240 80 10 bra $394252 BRA ret_success +.394242 22 a0 67 39 jsl $3967a0 fd_putblock JSL FDC_PUTBLOCK ; Call the FDC PUTBLOCK routine +.394246 90 e9 bcc $394231 BCC ret_failure +.394248 80 08 bra $394252 BRA ret_success +.39424a 22 da 6d 39 jsl $396dda hd_putblock JSL IDE_PUTBLOCK ; Call the IDE PUTBLOCK routine +.39424e 90 e1 bcc $394231 BCC ret_failure +.394250 80 00 bra $394252 BRA ret_success +.394252 ret_success +.394252 e2 20 sep #$20 SEP #$20 ; set A short +.394254 64 00 stz $0320 STZ BIOS_STATUS ; Set BIOS STATUS to OK +.394256 28 plp PLP +.394257 ab plb PLB +.394258 2b pld PLD +.394259 38 sec SEC ; Return success +.39425a 6b rtl RTL ;****** Return to file: src\sdos_fat.asm ;****** Processing file: src\sdos_dir.asm -.394209 DOS_DIROPEN -.394209 da phx PHX -.39420a 5a phy PHY -.39420b 0b phd PHD -.39420c 8b phb PHB -.39420d 08 php PHP -.39420e 48 pha PHA ; begin setdbr macro -.39420f 08 php PHP -.394210 e2 20 sep #$20 SEP #$20 ; set A short -.394212 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.394214 48 pha PHA -.394215 ab plb PLB -.394216 28 plp PLP -.394217 68 pla PLA ; end setdbr macro -.394218 48 pha PHA ; begin setdp macro -.394219 08 php PHP -.39421a c2 20 rep #$20 REP #$20 ; set A long -.39421c a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39421f 5b tcd TCD -.394220 28 plp PLP -.394221 68 pla PLA ; end setdp macro -.394222 ad 20 a0 lda $38a020 LDA ROOT_DIR_FIRST_CLUSTER ; Set the cluster (or sector for FAT12) -.394225 8d 32 a0 sta $38a032 STA DOS_DIR_BLOCK_ID ; to that of the root directory's start -.394228 ad 22 a0 lda $38a022 LDA ROOT_DIR_FIRST_CLUSTER+2 -.39422b 8d 34 a0 sta $38a034 STA DOS_DIR_BLOCK_ID+2 -.39422e a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Point to the directory cluster buffer for loading -.394231 85 1c sta $033c STA DOS_BUFF_PTR -.394233 85 18 sta $0338 STA DOS_DIR_PTR -.394235 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER -.394238 85 1e sta $033e STA DOS_BUFF_PTR+2 -.39423a 85 1a sta $033a STA DOS_DIR_PTR+2 -.39423c e2 20 sep #$20 SEP #$20 ; set A short -.39423e ad 01 a0 lda $38a001 LDA FILE_SYSTEM ; Check the file system -.394241 c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? -.394243 d0 24 bne $394269 BNE fetch_fat32 ; No: handle processing the diretory as FAT32 -.394245 fetch_fat12 -.394245 e2 20 sep #$20 SEP #$20 ; set A short -.394247 a9 00 lda #$00 LDA #DOS_DIR_TYPE_FAT12ROOT ; Set the directory type to FAT12 root directory -.394249 8d 45 a0 sta $38a045 STA DOS_DIR_TYPE -.39424c c2 20 rep #$20 REP #$20 ; set A long -.39424e a5 18 lda $0338 LDA DOS_DIR_PTR ; Set the BIOS buffer pointer -.394250 85 06 sta $0326 STA BIOS_BUFF_PTR -.394252 a5 1a lda $033a LDA DOS_DIR_PTR+2 -.394254 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394256 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Set the LBA of the sector -.394259 85 02 sta $0322 STA BIOS_LBA -.39425b ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 -.39425e 85 04 sta $0324 STA BIOS_LBA+2 -.394260 22 44 10 00 jsl $001044 JSL GETBLOCK ; Get the sector from the FAT12 device -.394264 b0 1f bcs $394285 BCS do_success ; If sucessful, set the directory cursor -.394266 82 15 17 brl $39597e BRL IF_PASSFAILURE ; Otherwise: pass up the failure -.394269 fetch_fat32 -.394269 e2 20 sep #$20 SEP #$20 ; set A short -.39426b a9 01 lda #$01 LDA #DOS_DIR_TYPE_FILE ; Set the directory type to file type (all FAT32, any FAT12 subdirectory) -.39426d 8d 45 a0 sta $38a045 STA DOS_DIR_TYPE -.394270 c2 20 rep #$20 REP #$20 ; set A long -.394272 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID -.394275 85 10 sta $0330 STA DOS_CLUS_ID -.394277 ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 -.39427a 85 12 sta $0332 STA DOS_CLUS_ID+2 -.39427c 22 ec 47 39 jsl $3947ec JSL DOS_GETCLUSTER ; Try to read the first cluster -.394280 b0 03 bcs $394285 BCS do_success ; If successful: set the directory cursor -.394282 82 f9 16 brl $39597e BRL IF_PASSFAILURE ; Otherwise: pass up the failure -.394285 82 fd 16 brl $395985 do_success BRL IF_SUCCESS -.394288 DOS_DIRFIRST -.394288 0b phd PHD -.394289 08 php PHP -.39428a 48 pha PHA ; begin setdp macro -.39428b 08 php PHP -.39428c c2 20 rep #$20 REP #$20 ; set A long -.39428e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394291 5b tcd TCD -.394292 28 plp PLP -.394293 68 pla PLA ; end setdp macro -.394294 c2 20 rep #$20 REP #$20 ; set A long -.394296 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER -.394299 85 18 sta $0338 STA DOS_DIR_PTR -.39429b a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER -.39429e 85 1a sta $033a STA DOS_DIR_PTR+2 -.3942a0 28 plp PLP -.3942a1 2b pld PLD -.3942a2 6b rtl RTL -.3942a3 DOS_DIRNEXT -.3942a3 da phx PHX -.3942a4 5a phy PHY -.3942a5 0b phd PHD -.3942a6 8b phb PHB -.3942a7 08 php PHP -.3942a8 48 pha PHA ; begin setdbr macro -.3942a9 08 php PHP -.3942aa e2 20 sep #$20 SEP #$20 ; set A short -.3942ac a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3942ae 48 pha PHA -.3942af ab plb PLB -.3942b0 28 plp PLP -.3942b1 68 pla PLA ; end setdbr macro -.3942b2 48 pha PHA ; begin setdp macro -.3942b3 08 php PHP -.3942b4 c2 20 rep #$20 REP #$20 ; set A long -.3942b6 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3942b9 5b tcd TCD -.3942ba 28 plp PLP -.3942bb 68 pla PLA ; end setdp macro -.3942bc c2 20 rep #$20 REP #$20 ; set A long -.3942be 18 clc CLC ; Advance the directory entry pointer to the next entry -.3942bf a5 18 lda $0338 LDA DOS_DIR_PTR -.3942c1 69 20 00 adc #$0020 ADC #DOS_DIR_ENTRY_SIZE -.3942c4 85 18 sta $0338 STA DOS_DIR_PTR -.3942c6 a5 1a lda $033a LDA DOS_DIR_PTR+2 -.3942c8 69 00 00 adc #$0000 ADC #0 -.3942cb 85 1a sta $033a STA DOS_DIR_PTR+2 -.3942cd 38 sec SEC ; Check to see if we've reached the end of the sector buffer -.3942ce a9 00 a3 lda #$a300 LDA #<>DOS_DIR_CLUSTER_END -.3942d1 e5 18 sbc $0338 SBC DOS_DIR_PTR -.3942d3 85 28 sta $0348 STA DOS_TEMP -.3942d5 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER_END -.3942d8 e5 1a sbc $033a SBC DOS_DIR_PTR+2 -.3942da 85 2a sta $034a STA DOS_TEMP+2 -.3942dc 30 0c bmi $3942ea BMI get_next_block ; Yes: try to fetch the next directory entry -.3942de f0 03 beq $3942e3 BEQ check_lower -.3942e0 82 a2 16 brl $395985 BRL IF_SUCCESS -.3942e3 a5 28 lda $0348 check_lower LDA DOS_TEMP -.3942e5 f0 03 beq $3942ea BEQ get_next_block -.3942e7 82 9b 16 brl $395985 BRL IF_SUCCESS -.3942ea get_next_block -.3942ea e2 20 sep #$20 SEP #$20 ; set A short -.3942ec ad 45 a0 lda $38a045 LDA DOS_DIR_TYPE ; Check the type of the directory -.3942ef c9 01 cmp #$01 CMP #DOS_DIR_TYPE_FILE -.3942f1 f0 38 beq $39432b BEQ next_cluster ; FILE TYPE: it's cluster based (FAT32, or FAT12 non-root) -.3942f3 next_sector -.3942f3 c2 20 rep #$20 REP #$20 ; set A long -.3942f5 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID -.3942f8 1a inc a INC A -.3942f9 8d 32 a0 sta $38a032 STA DOS_DIR_BLOCK_ID ; Increment the sector number (FAT12 root directory is sector based) -.3942fc c9 0a 00 cmp #$000a CMP #10 ; See if we're at the end (TODO: calculate this) -.3942ff d0 07 bne $394308 BNE read_sector -.394301 e2 20 sep #$20 SEP #$20 ; set A short -.394303 a9 00 lda #$00 LDA #0 -.394305 82 72 16 brl $39597a BRL IF_FAILURE -.394308 read_sector -.394308 c2 20 rep #$20 REP #$20 ; set A long -.39430a ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Set the LBA to the sector # -.39430d 85 02 sta $0322 STA BIOS_LBA -.39430f ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 -.394312 85 04 sta $0324 STA BIOS_LBA+2 -.394314 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Set the pointers to the buffer -.394317 85 06 sta $0326 STA BIOS_BUFF_PTR -.394319 85 18 sta $0338 STA DOS_DIR_PTR -.39431b a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER -.39431e 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394320 85 1a sta $033a STA DOS_DIR_PTR+2 -.394322 22 44 10 00 jsl $001044 JSL GETBLOCK ; Attempt to read the sector from the FAT12 device -.394326 b0 39 bcs $394361 BCS do_success ; If successful: set the directory cursor -.394328 82 53 16 brl $39597e BRL IF_PASSFAILURE ; Otherwise: pass up the failure -.39432b next_cluster -.39432b c2 20 rep #$20 REP #$20 ; set A long -.39432d ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Get the current block (cluster) ID -.394330 85 10 sta $0330 STA DOS_CLUS_ID -.394332 ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 -.394335 85 12 sta $0332 STA DOS_CLUS_ID+2 -.394337 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER -.39433a 85 1c sta $033c STA DOS_BUFF_PTR -.39433c 85 18 sta $0338 STA DOS_DIR_PTR -.39433e a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER -.394341 85 1e sta $033e STA DOS_BUFF_PTR+2 -.394343 85 1a sta $033a STA DOS_DIR_PTR+2 -.394345 22 fc 4b 39 jsl $394bfc JSL NEXTCLUSTER ; Try to find the next cluster -.394349 b0 03 bcs $39434e BCS set_next -.39434b 82 30 16 brl $39597e BRL IF_PASSFAILURE ; If error: pass it up the chain -.39434e a5 10 lda $0330 set_next LDA DOS_CLUS_ID ; Save the cluster as the current directory cluster -.394350 8d 32 a0 sta $38a032 STA DOS_DIR_BLOCK_ID -.394353 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.394355 8d 34 a0 sta $38a034 STA DOS_DIR_BLOCK_ID+2 -.394358 22 ec 47 39 jsl $3947ec JSL DOS_GETCLUSTER ; Try to read the first cluster -.39435c b0 03 bcs $394361 BCS do_success ; If successful: set the directory cursor -.39435e 82 1d 16 brl $39597e BRL IF_PASSFAILURE ; Otherwise: pass up the failure -.394361 82 21 16 brl $395985 do_success BRL IF_SUCCESS -.394364 DOS_DIRFINDFREE -.394364 da phx PHX -.394365 5a phy PHY -.394366 0b phd PHD -.394367 8b phb PHB -.394368 08 php PHP -.394369 48 pha PHA ; begin setdbr macro -.39436a 08 php PHP -.39436b e2 20 sep #$20 SEP #$20 ; set A short -.39436d a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.39436f 48 pha PHA -.394370 ab plb PLB -.394371 28 plp PLP -.394372 68 pla PLA ; end setdbr macro -.394373 48 pha PHA ; begin setdp macro -.394374 08 php PHP -.394375 c2 20 rep #$20 REP #$20 ; set A long -.394377 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39437a 5b tcd TCD -.39437b 28 plp PLP -.39437c 68 pla PLA ; end setdp macro -.39437d 22 07 56 39 jsl $395607 JSL IF_DIROPEN -.394381 b0 06 bcs $394389 BCS start_walk -.394383 a9 08 00 lda #$0008 LDA #DOS_ERR_NODIR ; Return that we could not read the directory -.394386 82 28 00 brl $3943b1 BRL ret_failure -.394389 a0 00 00 ldy #$0000 start_walk LDY #0 ; We check the first character of the entry -.39438c chk_entry -.39438c e2 20 sep #$20 SEP #$20 ; set A short -.39438e b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y ; Get the first byte of the directory entry -.394390 f0 1c beq $3943ae BEQ ret_success ; If 0: we have a blank... return it -.394392 c9 e5 cmp #$e5 CMP #DOS_DIR_ENT_UNUSED ; Is it an unused (deleted) entry? -.394394 f0 18 beq $3943ae BEQ ret_success ; Yes: return it -.394396 22 41 56 39 jsl $395641 JSL IF_DIRNEXT ; Go to the next directory entry -.39439a b0 ed bcs $394389 BCS start_walk ; If we got one, start walking it -.39439c 22 b4 43 39 jsl $3943b4 JSL DOS_DIRAPPEND ; If there isn't one, create a blank cluster -.3943a0 90 0f bcc $3943b1 BCC ret_failure ; If that didn't work, return the failure -.3943a2 c2 20 rep #$20 REP #$20 ; set A long -.3943a4 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Return the first entry -.3943a7 85 18 sta $0338 STA DOS_DIR_PTR -.3943a9 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER -.3943ac 85 1a sta $033a STA DOS_DIR_PTR+2 -.3943ae 82 d4 15 brl $395985 ret_success BRL IF_SUCCESS -.3943b1 82 c6 15 brl $39597a ret_failure BRL IF_FAILURE -.3943b4 DOS_DIRAPPEND -.3943b4 da phx PHX -.3943b5 8b phb PHB -.3943b6 0b phd PHD -.3943b7 08 php PHP -.3943b8 48 pha PHA ; begin setdbr macro -.3943b9 08 php PHP -.3943ba e2 20 sep #$20 SEP #$20 ; set A short -.3943bc a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3943be 48 pha PHA -.3943bf ab plb PLB -.3943c0 28 plp PLP -.3943c1 68 pla PLA ; end setdbr macro -.3943c2 48 pha PHA ; begin setdp macro -.3943c3 08 php PHP -.3943c4 c2 20 rep #$20 REP #$20 ; set A long -.3943c6 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3943c9 5b tcd TCD -.3943ca 28 plp PLP -.3943cb 68 pla PLA ; end setdp macro -.3943cc e2 20 sep #$20 SEP #$20 ; set A short -.3943ce ad 45 a0 lda $38a045 LDA DOS_DIR_TYPE -.3943d1 c9 01 cmp #$01 CMP #DOS_DIR_TYPE_FILE ; Are we looking at a file type directory -.3943d3 f0 09 beq $3943de BEQ clr_sector ; Yes: clear out the directory data -.3943d5 ret_failure -.3943d5 e2 20 sep #$20 SEP #$20 ; set A short -.3943d7 a9 15 lda #$15 LDA #DOS_ERR_DIRFULL ; No: return a directory-full error -.3943d9 85 0e sta $032e STA DOS_STATUS -.3943db 82 3e 00 brl $39441c BRL pass_failure -.3943de clr_sector -.3943de c2 20 rep #$20 REP #$20 ; set A long -.3943e0 a9 00 00 lda #$0000 LDA #0 -.3943e3 a2 00 00 ldx #$0000 LDX #0 -.3943e6 9d 00 a1 sta $38a100,x clr_loop STA DOS_DIR_CLUSTER,X ; Clear the directory cluster -.3943e9 e8 inx INX -.3943ea e8 inx INX -.3943eb e0 00 02 cpx #$0200 CPX #512 -.3943ee d0 f6 bne $3943e6 BNE clr_loop -.3943f0 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Point to the new, blank directory data -.3943f3 85 1c sta $033c STA DOS_BUFF_PTR -.3943f5 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER -.3943f8 85 1e sta $033e STA DOS_BUFF_PTR+2 -.3943fa ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; We want to append it to the current directory -.3943fd 85 10 sta $0330 STA DOS_CLUS_ID -.3943ff ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 -.394402 85 12 sta $0332 STA DOS_CLUS_ID+2 -.394404 22 1d 50 39 jsl $39501d JSL DOS_APPENDCLUS ; Attempt to append the blank data as a new cluster -.394408 90 12 bcc $39441c BCC pass_failure ; If there was an error, pass it up the chain -.39440a ad 36 a0 lda $38a036 LDA DOS_NEW_CLUSTER ; Set the block ID of the new directory cluster -.39440d 8d 32 a0 sta $38a032 STA DOS_DIR_BLOCK_ID -.394410 ad 38 a0 lda $38a038 LDA DOS_NEW_CLUSTER+2 -.394413 8d 34 a0 sta $38a034 STA DOS_DIR_BLOCK_ID+2 -.394416 28 plp ret_success PLP -.394417 2b pld PLD -.394418 ab plb PLB -.394419 fa plx PLX -.39441a 38 sec SEC -.39441b 6b rtl RTL -.39441c 28 plp pass_failure PLP -.39441d 2b pld PLD -.39441e ab plb PLB -.39441f fa plx PLX -.394420 18 clc CLC -.394421 6b rtl RTL -.394422 DOS_DIRWRITE -.394422 da phx PHX -.394423 5a phy PHY -.394424 0b phd PHD -.394425 8b phb PHB -.394426 08 php PHP -.394427 48 pha PHA ; begin setdbr macro -.394428 08 php PHP -.394429 e2 20 sep #$20 SEP #$20 ; set A short -.39442b a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.39442d 48 pha PHA -.39442e ab plb PLB -.39442f 28 plp PLP -.394430 68 pla PLA ; end setdbr macro -.394431 48 pha PHA ; begin setdp macro -.394432 08 php PHP -.394433 c2 20 rep #$20 REP #$20 ; set A long -.394435 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394438 5b tcd TCD -.394439 28 plp PLP -.39443a 68 pla PLA ; end setdp macro -.39443b e2 20 sep #$20 SEP #$20 ; set A short -.39443d ad 45 a0 lda $38a045 LDA DOS_DIR_TYPE ; Check the type of the directory -.394440 c9 01 cmp #$01 CMP #DOS_DIR_TYPE_FILE ; Is it a file type directory (FAT32 or FAT12 non-root?) -.394442 f0 1f beq $394463 BEQ write_cluster ; Yes: write it back using a cluster ID -.394444 write_sector -.394444 c2 20 rep #$20 REP #$20 ; set A long -.394446 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Set the BIOS_LBA to the LBA of the sector -.394449 85 02 sta $0322 STA BIOS_LBA -.39444b ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 -.39444e 85 04 sta $0324 STA BIOS_LBA+2 -.394450 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Set the pointer to the directory buffer -.394453 85 06 sta $0326 STA BIOS_BUFF_PTR -.394455 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER -.394458 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.39445a 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Try to write the sector to disk -.39445e b0 1f bcs $39447f BCS ret_success -.394460 82 17 15 brl $39597a ret_failure BRL IF_FAILURE -.394463 write_cluster -.394463 c2 20 rep #$20 REP #$20 ; set A long -.394465 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Set the DOS_CLUS_ID to the ID of the cluster -.394468 85 10 sta $0330 STA DOS_CLUS_ID -.39446a ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 -.39446d 85 12 sta $0332 STA DOS_CLUS_ID+2 -.39446f a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Set the pointer to the directory buffer -.394472 85 1c sta $033c STA DOS_BUFF_PTR -.394474 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER -.394477 85 1e sta $033e STA DOS_BUFF_PTR+2 -.394479 22 29 48 39 jsl $394829 JSL DOS_PUTCLUSTER ; Try to write the cluster to disk -.39447d 90 e1 bcc $394460 BCC ret_failure -.39447f 82 03 15 brl $395985 ret_success BRL IF_SUCCESS +.39425b DOS_DIROPEN +.39425b da phx PHX +.39425c 5a phy PHY +.39425d 0b phd PHD +.39425e 8b phb PHB +.39425f 08 php PHP +.394260 48 pha PHA ; begin setdbr macro +.394261 08 php PHP +.394262 e2 20 sep #$20 SEP #$20 ; set A short +.394264 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.394266 48 pha PHA +.394267 ab plb PLB +.394268 28 plp PLP +.394269 68 pla PLA ; end setdbr macro +.39426a 48 pha PHA ; begin setdp macro +.39426b 08 php PHP +.39426c c2 20 rep #$20 REP #$20 ; set A long +.39426e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394271 5b tcd TCD +.394272 28 plp PLP +.394273 68 pla PLA ; end setdp macro +.394274 ad 20 a0 lda $38a020 LDA ROOT_DIR_FIRST_CLUSTER ; Set the cluster (or sector for FAT12) +.394277 8d 32 a0 sta $38a032 STA DOS_DIR_BLOCK_ID ; to that of the root directory's start +.39427a ad 22 a0 lda $38a022 LDA ROOT_DIR_FIRST_CLUSTER+2 +.39427d 8d 34 a0 sta $38a034 STA DOS_DIR_BLOCK_ID+2 +.394280 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Point to the directory cluster buffer for loading +.394283 85 1c sta $033c STA DOS_BUFF_PTR +.394285 85 18 sta $0338 STA DOS_DIR_PTR +.394287 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER +.39428a 85 1e sta $033e STA DOS_BUFF_PTR+2 +.39428c 85 1a sta $033a STA DOS_DIR_PTR+2 +.39428e e2 20 sep #$20 SEP #$20 ; set A short +.394290 ad 01 a0 lda $38a001 LDA FILE_SYSTEM ; Check the file system +.394293 c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? +.394295 d0 24 bne $3942bb BNE fetch_fat32 ; No: handle processing the diretory as FAT32 +.394297 fetch_fat12 +.394297 e2 20 sep #$20 SEP #$20 ; set A short +.394299 a9 00 lda #$00 LDA #DOS_DIR_TYPE_FAT12ROOT ; Set the directory type to FAT12 root directory +.39429b 8d 45 a0 sta $38a045 STA DOS_DIR_TYPE +.39429e c2 20 rep #$20 REP #$20 ; set A long +.3942a0 a5 18 lda $0338 LDA DOS_DIR_PTR ; Set the BIOS buffer pointer +.3942a2 85 06 sta $0326 STA BIOS_BUFF_PTR +.3942a4 a5 1a lda $033a LDA DOS_DIR_PTR+2 +.3942a6 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.3942a8 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Set the LBA of the sector +.3942ab 85 02 sta $0322 STA BIOS_LBA +.3942ad ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 +.3942b0 85 04 sta $0324 STA BIOS_LBA+2 +.3942b2 22 44 10 00 jsl $001044 JSL GETBLOCK ; Get the sector from the FAT12 device +.3942b6 b0 1f bcs $3942d7 BCS do_success ; If sucessful, set the directory cursor +.3942b8 82 15 17 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: pass up the failure +.3942bb fetch_fat32 +.3942bb e2 20 sep #$20 SEP #$20 ; set A short +.3942bd a9 01 lda #$01 LDA #DOS_DIR_TYPE_FILE ; Set the directory type to file type (all FAT32, any FAT12 subdirectory) +.3942bf 8d 45 a0 sta $38a045 STA DOS_DIR_TYPE +.3942c2 c2 20 rep #$20 REP #$20 ; set A long +.3942c4 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID +.3942c7 85 10 sta $0330 STA DOS_CLUS_ID +.3942c9 ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 +.3942cc 85 12 sta $0332 STA DOS_CLUS_ID+2 +.3942ce 22 3e 48 39 jsl $39483e JSL DOS_GETCLUSTER ; Try to read the first cluster +.3942d2 b0 03 bcs $3942d7 BCS do_success ; If successful: set the directory cursor +.3942d4 82 f9 16 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: pass up the failure +.3942d7 82 fd 16 brl $3959d7 do_success BRL IF_SUCCESS +.3942da DOS_DIRFIRST +.3942da 0b phd PHD +.3942db 08 php PHP +.3942dc 48 pha PHA ; begin setdp macro +.3942dd 08 php PHP +.3942de c2 20 rep #$20 REP #$20 ; set A long +.3942e0 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3942e3 5b tcd TCD +.3942e4 28 plp PLP +.3942e5 68 pla PLA ; end setdp macro +.3942e6 c2 20 rep #$20 REP #$20 ; set A long +.3942e8 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER +.3942eb 85 18 sta $0338 STA DOS_DIR_PTR +.3942ed a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER +.3942f0 85 1a sta $033a STA DOS_DIR_PTR+2 +.3942f2 28 plp PLP +.3942f3 2b pld PLD +.3942f4 6b rtl RTL +.3942f5 DOS_DIRNEXT +.3942f5 da phx PHX +.3942f6 5a phy PHY +.3942f7 0b phd PHD +.3942f8 8b phb PHB +.3942f9 08 php PHP +.3942fa 48 pha PHA ; begin setdbr macro +.3942fb 08 php PHP +.3942fc e2 20 sep #$20 SEP #$20 ; set A short +.3942fe a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.394300 48 pha PHA +.394301 ab plb PLB +.394302 28 plp PLP +.394303 68 pla PLA ; end setdbr macro +.394304 48 pha PHA ; begin setdp macro +.394305 08 php PHP +.394306 c2 20 rep #$20 REP #$20 ; set A long +.394308 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39430b 5b tcd TCD +.39430c 28 plp PLP +.39430d 68 pla PLA ; end setdp macro +.39430e c2 20 rep #$20 REP #$20 ; set A long +.394310 18 clc CLC ; Advance the directory entry pointer to the next entry +.394311 a5 18 lda $0338 LDA DOS_DIR_PTR +.394313 69 20 00 adc #$0020 ADC #DOS_DIR_ENTRY_SIZE +.394316 85 18 sta $0338 STA DOS_DIR_PTR +.394318 a5 1a lda $033a LDA DOS_DIR_PTR+2 +.39431a 69 00 00 adc #$0000 ADC #0 +.39431d 85 1a sta $033a STA DOS_DIR_PTR+2 +.39431f 38 sec SEC ; Check to see if we've reached the end of the sector buffer +.394320 a9 00 a3 lda #$a300 LDA #<>DOS_DIR_CLUSTER_END +.394323 e5 18 sbc $0338 SBC DOS_DIR_PTR +.394325 85 28 sta $0348 STA DOS_TEMP +.394327 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER_END +.39432a e5 1a sbc $033a SBC DOS_DIR_PTR+2 +.39432c 85 2a sta $034a STA DOS_TEMP+2 +.39432e 30 0c bmi $39433c BMI get_next_block ; Yes: try to fetch the next directory entry +.394330 f0 03 beq $394335 BEQ check_lower +.394332 82 a2 16 brl $3959d7 BRL IF_SUCCESS +.394335 a5 28 lda $0348 check_lower LDA DOS_TEMP +.394337 f0 03 beq $39433c BEQ get_next_block +.394339 82 9b 16 brl $3959d7 BRL IF_SUCCESS +.39433c get_next_block +.39433c e2 20 sep #$20 SEP #$20 ; set A short +.39433e ad 45 a0 lda $38a045 LDA DOS_DIR_TYPE ; Check the type of the directory +.394341 c9 01 cmp #$01 CMP #DOS_DIR_TYPE_FILE +.394343 f0 38 beq $39437d BEQ next_cluster ; FILE TYPE: it's cluster based (FAT32, or FAT12 non-root) +.394345 next_sector +.394345 c2 20 rep #$20 REP #$20 ; set A long +.394347 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID +.39434a 1a inc a INC A +.39434b 8d 32 a0 sta $38a032 STA DOS_DIR_BLOCK_ID ; Increment the sector number (FAT12 root directory is sector based) +.39434e c9 0a 00 cmp #$000a CMP #10 ; See if we're at the end (TODO: calculate this) +.394351 d0 07 bne $39435a BNE read_sector +.394353 e2 20 sep #$20 SEP #$20 ; set A short +.394355 a9 00 lda #$00 LDA #0 +.394357 82 72 16 brl $3959cc BRL IF_FAILURE +.39435a read_sector +.39435a c2 20 rep #$20 REP #$20 ; set A long +.39435c ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Set the LBA to the sector # +.39435f 85 02 sta $0322 STA BIOS_LBA +.394361 ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 +.394364 85 04 sta $0324 STA BIOS_LBA+2 +.394366 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Set the pointers to the buffer +.394369 85 06 sta $0326 STA BIOS_BUFF_PTR +.39436b 85 18 sta $0338 STA DOS_DIR_PTR +.39436d a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER +.394370 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394372 85 1a sta $033a STA DOS_DIR_PTR+2 +.394374 22 44 10 00 jsl $001044 JSL GETBLOCK ; Attempt to read the sector from the FAT12 device +.394378 b0 39 bcs $3943b3 BCS do_success ; If successful: set the directory cursor +.39437a 82 53 16 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: pass up the failure +.39437d next_cluster +.39437d c2 20 rep #$20 REP #$20 ; set A long +.39437f ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Get the current block (cluster) ID +.394382 85 10 sta $0330 STA DOS_CLUS_ID +.394384 ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 +.394387 85 12 sta $0332 STA DOS_CLUS_ID+2 +.394389 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER +.39438c 85 1c sta $033c STA DOS_BUFF_PTR +.39438e 85 18 sta $0338 STA DOS_DIR_PTR +.394390 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER +.394393 85 1e sta $033e STA DOS_BUFF_PTR+2 +.394395 85 1a sta $033a STA DOS_DIR_PTR+2 +.394397 22 4e 4c 39 jsl $394c4e JSL NEXTCLUSTER ; Try to find the next cluster +.39439b b0 03 bcs $3943a0 BCS set_next +.39439d 82 30 16 brl $3959d0 BRL IF_PASSFAILURE ; If error: pass it up the chain +.3943a0 a5 10 lda $0330 set_next LDA DOS_CLUS_ID ; Save the cluster as the current directory cluster +.3943a2 8d 32 a0 sta $38a032 STA DOS_DIR_BLOCK_ID +.3943a5 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.3943a7 8d 34 a0 sta $38a034 STA DOS_DIR_BLOCK_ID+2 +.3943aa 22 3e 48 39 jsl $39483e JSL DOS_GETCLUSTER ; Try to read the first cluster +.3943ae b0 03 bcs $3943b3 BCS do_success ; If successful: set the directory cursor +.3943b0 82 1d 16 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: pass up the failure +.3943b3 82 21 16 brl $3959d7 do_success BRL IF_SUCCESS +.3943b6 DOS_DIRFINDFREE +.3943b6 da phx PHX +.3943b7 5a phy PHY +.3943b8 0b phd PHD +.3943b9 8b phb PHB +.3943ba 08 php PHP +.3943bb 48 pha PHA ; begin setdbr macro +.3943bc 08 php PHP +.3943bd e2 20 sep #$20 SEP #$20 ; set A short +.3943bf a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3943c1 48 pha PHA +.3943c2 ab plb PLB +.3943c3 28 plp PLP +.3943c4 68 pla PLA ; end setdbr macro +.3943c5 48 pha PHA ; begin setdp macro +.3943c6 08 php PHP +.3943c7 c2 20 rep #$20 REP #$20 ; set A long +.3943c9 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3943cc 5b tcd TCD +.3943cd 28 plp PLP +.3943ce 68 pla PLA ; end setdp macro +.3943cf 22 59 56 39 jsl $395659 JSL IF_DIROPEN +.3943d3 b0 06 bcs $3943db BCS start_walk +.3943d5 a9 08 00 lda #$0008 LDA #DOS_ERR_NODIR ; Return that we could not read the directory +.3943d8 82 28 00 brl $394403 BRL ret_failure +.3943db a0 00 00 ldy #$0000 start_walk LDY #0 ; We check the first character of the entry +.3943de chk_entry +.3943de e2 20 sep #$20 SEP #$20 ; set A short +.3943e0 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y ; Get the first byte of the directory entry +.3943e2 f0 1c beq $394400 BEQ ret_success ; If 0: we have a blank... return it +.3943e4 c9 e5 cmp #$e5 CMP #DOS_DIR_ENT_UNUSED ; Is it an unused (deleted) entry? +.3943e6 f0 18 beq $394400 BEQ ret_success ; Yes: return it +.3943e8 22 93 56 39 jsl $395693 JSL IF_DIRNEXT ; Go to the next directory entry +.3943ec b0 ed bcs $3943db BCS start_walk ; If we got one, start walking it +.3943ee 22 06 44 39 jsl $394406 JSL DOS_DIRAPPEND ; If there isn't one, create a blank cluster +.3943f2 90 0f bcc $394403 BCC ret_failure ; If that didn't work, return the failure +.3943f4 c2 20 rep #$20 REP #$20 ; set A long +.3943f6 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Return the first entry +.3943f9 85 18 sta $0338 STA DOS_DIR_PTR +.3943fb a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER +.3943fe 85 1a sta $033a STA DOS_DIR_PTR+2 +.394400 82 d4 15 brl $3959d7 ret_success BRL IF_SUCCESS +.394403 82 c6 15 brl $3959cc ret_failure BRL IF_FAILURE +.394406 DOS_DIRAPPEND +.394406 da phx PHX +.394407 8b phb PHB +.394408 0b phd PHD +.394409 08 php PHP +.39440a 48 pha PHA ; begin setdbr macro +.39440b 08 php PHP +.39440c e2 20 sep #$20 SEP #$20 ; set A short +.39440e a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.394410 48 pha PHA +.394411 ab plb PLB +.394412 28 plp PLP +.394413 68 pla PLA ; end setdbr macro +.394414 48 pha PHA ; begin setdp macro +.394415 08 php PHP +.394416 c2 20 rep #$20 REP #$20 ; set A long +.394418 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39441b 5b tcd TCD +.39441c 28 plp PLP +.39441d 68 pla PLA ; end setdp macro +.39441e e2 20 sep #$20 SEP #$20 ; set A short +.394420 ad 45 a0 lda $38a045 LDA DOS_DIR_TYPE +.394423 c9 01 cmp #$01 CMP #DOS_DIR_TYPE_FILE ; Are we looking at a file type directory +.394425 f0 09 beq $394430 BEQ clr_sector ; Yes: clear out the directory data +.394427 ret_failure +.394427 e2 20 sep #$20 SEP #$20 ; set A short +.394429 a9 15 lda #$15 LDA #DOS_ERR_DIRFULL ; No: return a directory-full error +.39442b 85 0e sta $032e STA DOS_STATUS +.39442d 82 3e 00 brl $39446e BRL pass_failure +.394430 clr_sector +.394430 c2 20 rep #$20 REP #$20 ; set A long +.394432 a9 00 00 lda #$0000 LDA #0 +.394435 a2 00 00 ldx #$0000 LDX #0 +.394438 9d 00 a1 sta $38a100,x clr_loop STA DOS_DIR_CLUSTER,X ; Clear the directory cluster +.39443b e8 inx INX +.39443c e8 inx INX +.39443d e0 00 02 cpx #$0200 CPX #512 +.394440 d0 f6 bne $394438 BNE clr_loop +.394442 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Point to the new, blank directory data +.394445 85 1c sta $033c STA DOS_BUFF_PTR +.394447 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER +.39444a 85 1e sta $033e STA DOS_BUFF_PTR+2 +.39444c ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; We want to append it to the current directory +.39444f 85 10 sta $0330 STA DOS_CLUS_ID +.394451 ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 +.394454 85 12 sta $0332 STA DOS_CLUS_ID+2 +.394456 22 6f 50 39 jsl $39506f JSL DOS_APPENDCLUS ; Attempt to append the blank data as a new cluster +.39445a 90 12 bcc $39446e BCC pass_failure ; If there was an error, pass it up the chain +.39445c ad 36 a0 lda $38a036 LDA DOS_NEW_CLUSTER ; Set the block ID of the new directory cluster +.39445f 8d 32 a0 sta $38a032 STA DOS_DIR_BLOCK_ID +.394462 ad 38 a0 lda $38a038 LDA DOS_NEW_CLUSTER+2 +.394465 8d 34 a0 sta $38a034 STA DOS_DIR_BLOCK_ID+2 +.394468 28 plp ret_success PLP +.394469 2b pld PLD +.39446a ab plb PLB +.39446b fa plx PLX +.39446c 38 sec SEC +.39446d 6b rtl RTL +.39446e 28 plp pass_failure PLP +.39446f 2b pld PLD +.394470 ab plb PLB +.394471 fa plx PLX +.394472 18 clc CLC +.394473 6b rtl RTL +.394474 DOS_DIRWRITE +.394474 da phx PHX +.394475 5a phy PHY +.394476 0b phd PHD +.394477 8b phb PHB +.394478 08 php PHP +.394479 48 pha PHA ; begin setdbr macro +.39447a 08 php PHP +.39447b e2 20 sep #$20 SEP #$20 ; set A short +.39447d a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.39447f 48 pha PHA +.394480 ab plb PLB +.394481 28 plp PLP +.394482 68 pla PLA ; end setdbr macro +.394483 48 pha PHA ; begin setdp macro +.394484 08 php PHP +.394485 c2 20 rep #$20 REP #$20 ; set A long +.394487 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39448a 5b tcd TCD +.39448b 28 plp PLP +.39448c 68 pla PLA ; end setdp macro +.39448d e2 20 sep #$20 SEP #$20 ; set A short +.39448f ad 45 a0 lda $38a045 LDA DOS_DIR_TYPE ; Check the type of the directory +.394492 c9 01 cmp #$01 CMP #DOS_DIR_TYPE_FILE ; Is it a file type directory (FAT32 or FAT12 non-root?) +.394494 f0 1f beq $3944b5 BEQ write_cluster ; Yes: write it back using a cluster ID +.394496 write_sector +.394496 c2 20 rep #$20 REP #$20 ; set A long +.394498 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Set the BIOS_LBA to the LBA of the sector +.39449b 85 02 sta $0322 STA BIOS_LBA +.39449d ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 +.3944a0 85 04 sta $0324 STA BIOS_LBA+2 +.3944a2 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Set the pointer to the directory buffer +.3944a5 85 06 sta $0326 STA BIOS_BUFF_PTR +.3944a7 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER +.3944aa 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.3944ac 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Try to write the sector to disk +.3944b0 b0 1f bcs $3944d1 BCS ret_success +.3944b2 82 17 15 brl $3959cc ret_failure BRL IF_FAILURE +.3944b5 write_cluster +.3944b5 c2 20 rep #$20 REP #$20 ; set A long +.3944b7 ad 32 a0 lda $38a032 LDA DOS_DIR_BLOCK_ID ; Set the DOS_CLUS_ID to the ID of the cluster +.3944ba 85 10 sta $0330 STA DOS_CLUS_ID +.3944bc ad 34 a0 lda $38a034 LDA DOS_DIR_BLOCK_ID+2 +.3944bf 85 12 sta $0332 STA DOS_CLUS_ID+2 +.3944c1 a9 00 a1 lda #$a100 LDA #<>DOS_DIR_CLUSTER ; Set the pointer to the directory buffer +.3944c4 85 1c sta $033c STA DOS_BUFF_PTR +.3944c6 a9 38 00 lda #$0038 LDA #`DOS_DIR_CLUSTER +.3944c9 85 1e sta $033e STA DOS_BUFF_PTR+2 +.3944cb 22 7b 48 39 jsl $39487b JSL DOS_PUTCLUSTER ; Try to write the cluster to disk +.3944cf 90 e1 bcc $3944b2 BCC ret_failure +.3944d1 82 03 15 brl $3959d7 ret_success BRL IF_SUCCESS ;****** Return to file: src\sdos_fat.asm @@ -7699,6 +7800,9 @@ =39 BPB_VOLUMEID = 39 ; Offset in the BPB sector to the volume ID =$2c BPB_ROOTCLUS_OFF = $2C ; Offset in the BPB sector to the Root Cluster Number =510 BPB_SIGNATURE = 510 ; The offset to the MBR signature bytes + +;****** Processing file: src\sdos_fat_vars_fmx_inc.asm + =$38a000 DOS_HIGH_VARIABLES = $38A000 =$38a000 DEVICE = $38A000 ; 1 byte - The number of the block device =$38a001 FILE_SYSTEM = $38A001 ; 1 byte - The type of filesystem (FAT12, FAT32, etc.) @@ -7741,3258 +7845,3271 @@ =3714592 DOS_FILE_DESCS_END = DOS_FILE_DESCS + SIZE(FILEDESC) * DOS_FD_MAX =$38b000 DOS_FILE_BUFFS = $38B000 =3719168 DOS_FILE_BUFFS_END = DOS_FILE_BUFFS + DOS_SECTOR_SIZE * DOS_FD_MAX -.394482 DOS_INIT -.394482 8b phb PHB -.394483 0b phd PHD -.394484 08 php PHP -.394485 48 pha PHA ; begin setdbr macro -.394486 08 php PHP -.394487 e2 20 sep #$20 SEP #$20 ; set A short -.394489 a9 00 lda #$00 LDA #0 -.39448b 48 pha PHA -.39448c ab plb PLB -.39448d 28 plp PLP -.39448e 68 pla PLA ; end setdbr macro -.39448f 48 pha PHA ; begin setdp macro -.394490 08 php PHP -.394491 c2 20 rep #$20 REP #$20 ; set A long -.394493 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394496 5b tcd TCD -.394497 28 plp PLP -.394498 68 pla PLA ; end setdp macro -.394499 e2 20 sep #$20 SEP #$20 ; set A short -.39449b c2 10 rep #$10 REP #$10 ; set X long -.39449d a2 00 00 ldx #$0000 LDX #0 ; Zero out all the bank 0 variables -.3944a0 a9 00 lda #$00 LDA #0 -.3944a2 9d 20 03 sta $0320,x b0_clr_loop STA @w SDOS_VARIABLES,X -.3944a5 e8 inx INX -.3944a6 e0 15 02 cpx #$0215 CPX #<>(FDC_CMD_RETRY - SDOS_VARIABLES + 1) -.3944a9 d0 f7 bne $3944a2 BNE b0_clr_loop -.3944ab 48 pha PHA ; begin setdbr macro -.3944ac 08 php PHP -.3944ad e2 20 sep #$20 SEP #$20 ; set A short -.3944af a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3944b1 48 pha PHA -.3944b2 ab plb PLB -.3944b3 28 plp PLP -.3944b4 68 pla PLA ; end setdbr macro -.3944b5 48 pha PHA ; begin setdp macro -.3944b6 08 php PHP -.3944b7 c2 20 rep #$20 REP #$20 ; set A long -.3944b9 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3944bc 5b tcd TCD -.3944bd 28 plp PLP -.3944be 68 pla PLA ; end setdp macro -.3944bf e2 20 sep #$20 SEP #$20 ; set A short -.3944c1 c2 10 rep #$10 REP #$10 ; set X long -.3944c3 a2 00 00 ldx #$0000 LDX #0 ; Zero out all the bank $38 variables -.3944c6 a9 00 lda #$00 LDA #0 -.3944c8 9d 00 a0 sta $38a000,x b38_clr_loop STA @w DOS_HIGH_VARIABLES,X -.3944cb e8 inx INX -.3944cc e0 01 20 cpx #$2001 CPX #<>(DOS_FILE_BUFFS_END - DOS_HIGH_VARIABLES + 1) -.3944cf d0 f7 bne $3944c8 BNE b38_clr_loop -.3944d1 c2 20 rep #$20 REP #$20 ; set A long -.3944d3 a9 81 48 lda #$4881 LDA #<>DOS_HD_DESC ; Initialize the device names list -.3944d6 8f 4a a0 38 sta $38a04a STA @l DOS_DEV_NAMES -.3944da a9 39 00 lda #$0039 LDA #`DOS_HD_DESC -.3944dd 8f 4c a0 38 sta $38a04c STA @l DOS_DEV_NAMES+2 -.3944e1 e2 20 sep #$20 SEP #$20 ; set A short -.3944e3 a9 02 lda #$02 LDA #BIOS_DEV_SD ; Default to the SD card -.3944e5 85 01 sta $0321 STA BIOS_DEV -.3944e7 a9 ff lda #$ff LDA #$FF ; Set the mounted device to a sentinel value -.3944e9 8f 50 a0 38 sta $38a050 STA @l DOS_MOUNT_DEV -.3944ed a9 00 lda #$00 LDA #0 -.3944ef a2 00 00 ldx #$0000 LDX #0 -.3944f2 9d 20 ad sta $38ad20,x fd_zero_loop STA @w DOS_FILE_DESCS,X -.3944f5 e8 inx INX -.3944f6 e0 00 01 cpx #$0100 CPX #(DOS_FILE_DESCS_END - DOS_FILE_DESCS) -.3944f9 d0 f7 bne $3944f2 BNE fd_zero_loop -.3944fb a9 00 lda #$00 LDA #0 -.3944fd a2 00 00 ldx #$0000 LDX #0 -.394500 9d 00 b0 sta $38b000,x sect_zero_loop STA @w DOS_FILE_BUFFS,X -.394503 e8 inx INX -.394504 e0 00 10 cpx #$1000 CPX #(DOS_FILE_BUFFS_END - DOS_FILE_BUFFS) -.394507 d0 f7 bne $394500 BNE sect_zero_loop + +;****** Return to file: src\sdos_fat.asm + +.3944d4 DOS_INIT +.3944d4 8b phb PHB +.3944d5 0b phd PHD +.3944d6 08 php PHP +.3944d7 48 pha PHA ; begin setdbr macro +.3944d8 08 php PHP +.3944d9 e2 20 sep #$20 SEP #$20 ; set A short +.3944db a9 00 lda #$00 LDA #0 +.3944dd 48 pha PHA +.3944de ab plb PLB +.3944df 28 plp PLP +.3944e0 68 pla PLA ; end setdbr macro +.3944e1 48 pha PHA ; begin setdp macro +.3944e2 08 php PHP +.3944e3 c2 20 rep #$20 REP #$20 ; set A long +.3944e5 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3944e8 5b tcd TCD +.3944e9 28 plp PLP +.3944ea 68 pla PLA ; end setdp macro +.3944eb e2 20 sep #$20 SEP #$20 ; set A short +.3944ed c2 10 rep #$10 REP #$10 ; set X long +.3944ef a2 00 00 ldx #$0000 LDX #0 ; Zero out all the bank 0 variables +.3944f2 a9 00 lda #$00 LDA #0 +.3944f4 9d 20 03 sta $0320,x b0_clr_loop STA @w SDOS_VARIABLES,X +.3944f7 e8 inx INX +.3944f8 e0 15 02 cpx #$0215 CPX #<>(FDC_CMD_RETRY - SDOS_VARIABLES + 1) +.3944fb d0 f7 bne $3944f4 BNE b0_clr_loop +.3944fd 48 pha PHA ; begin setdbr macro +.3944fe 08 php PHP +.3944ff e2 20 sep #$20 SEP #$20 ; set A short +.394501 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.394503 48 pha PHA +.394504 ab plb PLB +.394505 28 plp PLP +.394506 68 pla PLA ; end setdbr macro +.394507 48 pha PHA ; begin setdp macro +.394508 08 php PHP .394509 c2 20 rep #$20 REP #$20 ; set A long -.39450b a9 20 ad lda #$ad20 LDA #<>DOS_FILE_DESCS ; Initialize a pointer to the file descriptors -.39450e 85 20 sta $0340 STA @b DOS_FD_PTR -.394510 a9 38 00 lda #$0038 LDA #`DOS_FILE_DESCS -.394513 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.394515 a9 00 b0 lda #$b000 LDA #<>DOS_FILE_BUFFS ; Initialize a pointer to the sector buffers -.394518 85 28 sta $0348 STA @b DOS_TEMP -.39451a a9 38 00 lda #$0038 LDA #`DOS_FILE_BUFFS -.39451d 85 2a sta $034a STA @b DOS_TEMP+2 -.39451f a2 08 00 ldx #$0008 LDX #DOS_FD_MAX ; Set how many file descriptors to update -.394522 a0 0e 00 ldy #$000e fd_buff_loop LDY #FILEDESC.BUFFER ; Set the file descriptor's buffer pointer -.394525 a5 28 lda $0348 LDA @b DOS_TEMP -.394527 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.394529 c8 iny INY -.39452a c8 iny INY -.39452b a5 2a lda $034a LDA @b DOS_TEMP+2 -.39452d 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.39452f 18 clc CLC ; Advance the file descriptor pointer to the next file descriptor -.394530 a5 20 lda $0340 LDA @b DOS_FD_PTR -.394532 69 20 00 adc #$0020 ADC #SIZE(FILEDESC) -.394535 85 20 sta $0340 STA @b DOS_FD_PTR -.394537 a5 22 lda $0342 LDA @b DOS_FD_PTR+2 -.394539 69 00 00 adc #$0000 ADC #0 -.39453c 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.39453e 18 clc CLC ; Advance the sector buffer pointer to the next buffer -.39453f a5 28 lda $0348 LDA @b DOS_TEMP -.394541 69 00 02 adc #$0200 ADC #DOS_SECTOR_SIZE -.394544 85 28 sta $0348 STA @b DOS_TEMP -.394546 a5 2a lda $034a LDA @b DOS_TEMP+2 -.394548 69 00 00 adc #$0000 ADC #0 -.39454b 85 2a sta $034a STA @b DOS_TEMP+2 -.39454d ca dex DEX ; Count down the descriptors... -.39454e d0 d2 bne $394522 BNE fd_buff_loop ; If not zero, keep setting the buffer pointers -.394550 28 plp PLP -.394551 2b pld PLD -.394552 ab plb PLB -.394553 6b rtl RTL -.394554 DOS_MOUNT -.394554 8b phb PHB -.394555 0b phd PHD -.394556 08 php PHP -.394557 48 pha PHA ; begin setdbr macro -.394558 08 php PHP -.394559 e2 20 sep #$20 SEP #$20 ; set A short -.39455b a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.39455d 48 pha PHA -.39455e ab plb PLB -.39455f 28 plp PLP -.394560 68 pla PLA ; end setdbr macro -.394561 48 pha PHA ; begin setdp macro -.394562 08 php PHP -.394563 c2 20 rep #$20 REP #$20 ; set A long -.394565 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394568 5b tcd TCD -.394569 28 plp PLP -.39456a 68 pla PLA ; end setdp macro -.39456b e2 20 sep #$20 SEP #$20 ; set A short -.39456d a5 01 lda $0321 LDA BIOS_DEV ; Get the device to moount -.39456f 8f 50 a0 38 sta $38a050 try_mount STA @l DOS_MOUNT_DEV ; Save the device we're going to try to mount -.394573 c9 02 cmp #$02 CMP #BIOS_DEV_SD ; Is it the SDC? -.394575 f0 1f beq $394596 BEQ do_sdc_mount ; Yes: attempt to mount it -.394577 c9 06 cmp #$06 CMP #BIOS_DEV_HD0 ; Is it HD0? -.394579 f0 26 beq $3945a1 BEQ do_ide_mount ; Yes: attempt to mount the IDE drive -.39457b c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it the FDC? -.39457d f0 0b beq $39458a BEQ do_fdc_mount ; Yes: attempt to mount it -.39457f a9 04 lda #$04 LDA #DOS_ERR_NOINIT ; Otherwise: return a bad device error -.394581 85 0e sta $032e STA DOS_STATUS -.394583 a9 80 lda #$80 LDA #BIOS_ERR_BADDEV -.394585 85 00 sta $0320 STA BIOS_STATUS -.394587 82 7c 01 brl $394706 BRL ret_failure -.39458a 22 ac 67 39 jsl $3967ac do_fdc_mount JSL FDC_MOUNT ; Attempt to mount the floppy disk -.39458e b0 03 bcs $394593 BCS fdc_success -.394590 82 73 01 brl $394706 BRL ret_failure -.394593 82 67 01 brl $3946fd fdc_success BRL ret_success -.394596 22 b6 5d 39 jsl $395db6 do_sdc_mount JSL SDC_INIT ; Yes: Initialize access to the SDC -.39459a b0 10 bcs $3945ac BCS get_mbr ; Continue if success -.39459c a9 04 lda #$04 LDA #DOS_ERR_NOINIT ; Otherwise: return an error -.39459e 82 65 01 brl $394706 BRL ret_failure -.3945a1 22 f4 6b 39 jsl $396bf4 do_ide_mount JSL IDE_INIT ; Yes: Initialize access to the IDE drive -.3945a5 b0 05 bcs $3945ac BCS get_mbr ; Continue if success -.3945a7 a9 04 lda #$04 LDA #DOS_ERR_NOINIT ; Otherwise: return an error -.3945a9 82 5a 01 brl $394706 BRL ret_failure -.3945ac get_mbr -.3945ac c2 30 rep #$30 REP #$30 ; set A&X long -.3945ae 64 02 stz $0322 STZ BIOS_LBA ; Get the MBR -.3945b0 64 04 stz $0324 STZ BIOS_LBA+2 -.3945b2 a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; Into DOS_SECTOR -.3945b5 85 06 sta $0326 STA BIOS_BUFF_PTR -.3945b7 a9 38 00 lda #$0038 LDA #`DOS_SECTOR -.3945ba 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.3945bc 22 44 10 00 jsl $001044 JSL GETBLOCK ; Try to read the MBR -.3945c0 b0 07 bcs $3945c9 BCS chk_signature ; If success, check the signature bytes -.3945c2 e2 20 sep #$20 SEP #$20 ; set A short -.3945c4 a9 01 lda #$01 LDA #DOS_ERR_READ ; Otherwise: report we couldn't read the first sector -.3945c6 82 3d 01 brl $394706 BRL ret_failure -.3945c9 chk_signature -.3945c9 e2 20 sep #$20 SEP #$20 ; set A short -.3945cb ad fe a4 lda $38a4fe LDA DOS_SECTOR+MBR_SIGNATURE -.3945ce c9 55 cmp #$55 CMP #$55 ; Is first byte of signature $55? -.3945d0 d0 07 bne $3945d9 BNE not_mbr ; No: signal we could find the MBR -.3945d2 ad ff a4 lda $38a4ff LDA DOS_SECTOR+MBR_SIGNATURE+1 -.3945d5 c9 aa cmp #$aa CMP #$AA ; Is second byte of signature $AA? -.3945d7 f0 05 beq $3945de BEQ chk_part_type ; Yes: we have an MBR -.3945d9 a9 02 lda #$02 not_mbr LDA #DOS_ERR_NOTMBR ; Return that we didn't find the MBR -.3945db 82 28 01 brl $394706 BRL ret_failure -.3945de ad c2 a4 lda $38a4c2 chk_part_type LDA DOS_SECTOR+PART0_OFF+PART_TYPE_OFF -.3945e1 c9 0c cmp #$0c CMP #PART_TYPE_FAT32_LBA -.3945e3 f0 05 beq $3945ea BEQ get_LBA ; Is FAT32 with LBA? -.3945e5 a9 03 lda #$03 LDA #DOS_ERR_NOFAT32 ; No: return No FAT32 found error -.3945e7 82 1c 01 brl $394706 BRL ret_failure -.3945ea 8d 01 a0 sta $38a001 get_LBA STA FILE_SYSTEM ; Save the file system of the partition -.3945ed c2 20 rep #$20 REP #$20 ; set A long -.3945ef ad c6 a4 lda $38a4c6 LDA DOS_SECTOR+PART0_OFF+PART_LBA_OFF -.3945f2 8d 04 a0 sta $38a004 STA FIRSTSECTOR -.3945f5 ad c8 a4 lda $38a4c8 LDA DOS_SECTOR+PART0_OFF+PART_LBA_OFF+2 -.3945f8 8d 06 a0 sta $38a006 STA FIRSTSECTOR+2 -.3945fb ad cb a4 lda $38a4cb LDA DOS_SECTOR+PART0_OFF+PART_SECT_COUNT_OFF -.3945fe 8d 08 a0 sta $38a008 STA SECTORCOUNT -.394601 ad cd a4 lda $38a4cd LDA DOS_SECTOR+PART0_OFF+PART_SECT_COUNT_OFF+2 -.394604 8d 0a a0 sta $38a00a STA SECTORCOUNT+2 -.394607 e2 20 sep #$20 SEP #$20 ; set A short -.394609 a5 01 lda $0321 LDA BIOS_DEV ; Save the device number -.39460b 8d 00 a0 sta $38a000 STA DEVICE -.39460e a9 00 lda #$00 LDA #0 -.394610 8d 02 a0 sta $38a002 STA PARTITION ; For the moment, we only support the first partition -.394613 c2 20 rep #$20 REP #$20 ; set A long -.394615 a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR -.394618 85 06 sta $0326 STA BIOS_BUFF_PTR -.39461a a9 38 00 lda #$0038 LDA #`DOS_SECTOR -.39461d 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.39461f ad 04 a0 lda $38a004 LDA FIRSTSECTOR -.394622 85 02 sta $0322 STA BIOS_LBA -.394624 ad 06 a0 lda $38a006 LDA FIRSTSECTOR+2 -.394627 85 04 sta $0324 STA BIOS_LBA+2 -.394629 22 44 10 00 jsl $001044 JSL GETBLOCK ; Attempt to load the volume ID -.39462d b0 1c bcs $39464b BCS get_first_sec ; Got it? Start parsing it -.39462f e2 20 sep #$20 SEP #$20 ; set A short -.394631 a9 05 lda #$05 LDA #DOS_ERR_VOLID ; Otherwise: return an error -.394633 82 d0 00 brl $394706 BRL ret_failure -.394636 chk_bpb_sig -.394636 e2 20 sep #$20 SEP #$20 ; set A short -.394638 ad fe a4 lda $38a4fe LDA DOS_SECTOR+BPB_SIGNATURE -.39463b c9 55 cmp #$55 CMP #$55 ; Is first byte of signature $55? -.39463d d0 07 bne $394646 BNE not_bpb ; No: signal we could find the volume ID -.39463f ad ff a4 lda $38a4ff LDA DOS_SECTOR+BPB_SIGNATURE+1 -.394642 c9 aa cmp #$aa CMP #$AA ; Is second byte of signature $AA? -.394644 f0 05 beq $39464b BEQ get_first_sec ; Yes: we have an volume ID -.394646 a9 05 lda #$05 not_bpb LDA #DOS_ERR_VOLID ; Return that we didn't find the Volume ID (BPB) -.394648 82 bb 00 brl $394706 BRL ret_failure -.39464b get_first_sec -.39464b c2 20 rep #$20 REP #$20 ; set A long -.39464d ad 2c a3 lda $38a32c LDA DOS_SECTOR+BPB_ROOTCLUS_OFF -.394650 8d 20 a0 sta $38a020 STA ROOT_DIR_FIRST_CLUSTER -.394653 ad 2e a3 lda $38a32e LDA DOS_SECTOR+BPB_ROOTCLUS_OFF+2 -.394656 8d 22 a0 sta $38a022 STA ROOT_DIR_FIRST_CLUSTER+2 -.394659 ad 0e a3 lda $38a30e LDA DOS_SECTOR+BPB_RSRVCLUS_OFF -.39465c 8d 0c a0 sta $38a00c STA NUM_RSRV_SEC -.39465f 18 clc CLC ; fat_begin_lba := FirstSector + Number_of_Reserved_Sectors -.394660 ad 04 a0 lda $38a004 LDA FIRSTSECTOR -.394663 6d 0c a0 adc $38a00c ADC NUM_RSRV_SEC -.394666 8d 14 a0 sta $38a014 STA FAT_BEGIN_LBA -.394669 ad 06 a0 lda $38a006 LDA FIRSTSECTOR+2 -.39466c 69 00 00 adc #$0000 ADC #0 -.39466f 8d 16 a0 sta $38a016 STA FAT_BEGIN_LBA+2 -.394672 e2 20 sep #$20 SEP #$20 ; set A short -.394674 a2 00 00 ldx #$0000 LDX #0 -.394677 bf 24 a3 38 lda $38a324,x cpy_secperfat LDA @l DOS_SECTOR+BPB_SECPERFAT_OFF,X -.39467b 9f 10 a0 38 sta $38a010,x STA @l SEC_PER_FAT,X -.39467f e8 inx INX -.394680 e0 04 00 cpx #$0004 CPX #4 -.394683 d0 f2 bne $394677 BNE cpy_secperfat -.394685 ad 10 a0 lda $38a010 LDA SEC_PER_FAT -.394688 0a asl a ASL A -.394689 8d 1c a0 sta $38a01c STA CLUSTER_BEGIN_LBA -.39468c ad 11 a0 lda $38a011 LDA SEC_PER_FAT+1 -.39468f 2a rol a ROL A -.394690 8d 1d a0 sta $38a01d STA CLUSTER_BEGIN_LBA+1 -.394693 ad 12 a0 lda $38a012 LDA SEC_PER_FAT+2 -.394696 2a rol a ROL A -.394697 8d 1e a0 sta $38a01e STA CLUSTER_BEGIN_LBA+2 -.39469a ad 13 a0 lda $38a013 LDA SEC_PER_FAT+3 -.39469d 2a rol a ROL A -.39469e 8d 1f a0 sta $38a01f STA CLUSTER_BEGIN_LBA+3 -.3946a1 18 clc CLC -.3946a2 ad 1c a0 lda $38a01c LDA CLUSTER_BEGIN_LBA -.3946a5 6d 14 a0 adc $38a014 ADC FAT_BEGIN_LBA -.3946a8 8d 1c a0 sta $38a01c STA CLUSTER_BEGIN_LBA -.3946ab ad 1d a0 lda $38a01d LDA CLUSTER_BEGIN_LBA+1 -.3946ae 6d 15 a0 adc $38a015 ADC FAT_BEGIN_LBA+1 -.3946b1 8d 1d a0 sta $38a01d STA CLUSTER_BEGIN_LBA+1 -.3946b4 ad 1e a0 lda $38a01e LDA CLUSTER_BEGIN_LBA+2 -.3946b7 6d 16 a0 adc $38a016 ADC FAT_BEGIN_LBA+2 -.3946ba 8d 1e a0 sta $38a01e STA CLUSTER_BEGIN_LBA+2 -.3946bd ad 1f a0 lda $38a01f LDA CLUSTER_BEGIN_LBA+3 -.3946c0 6d 17 a0 adc $38a017 ADC FAT_BEGIN_LBA+3 -.3946c3 8d 1f a0 sta $38a01f STA CLUSTER_BEGIN_LBA+3 -.3946c6 e2 20 sep #$20 SEP #$20 ; set A short -.3946c8 ad 0d a3 lda $38a30d LDA DOS_SECTOR+BPB_SECPERCLUS_OFF -.3946cb 8d 03 a0 sta $38a003 STA SECTORS_PER_CLUSTER -.3946ce 18 clc CLC -.3946cf ad 14 a0 lda $38a014 LDA FAT_BEGIN_LBA ; Compute the address of the first sector of -.3946d2 6d 10 a0 adc $38a010 ADC SEC_PER_FAT ; the second copy of the FAT -.3946d5 8d 18 a0 sta $38a018 STA FAT2_BEGIN_LBA -.3946d8 ad 15 a0 lda $38a015 LDA FAT_BEGIN_LBA+1 -.3946db 6d 11 a0 adc $38a011 ADC SEC_PER_FAT+1 -.3946de 8d 19 a0 sta $38a019 STA FAT2_BEGIN_LBA+1 -.3946e1 ad 16 a0 lda $38a016 LDA FAT_BEGIN_LBA+2 -.3946e4 6d 12 a0 adc $38a012 ADC SEC_PER_FAT+2 -.3946e7 8d 1a a0 sta $38a01a STA FAT2_BEGIN_LBA+2 -.3946ea ad 17 a0 lda $38a017 LDA FAT_BEGIN_LBA+3 -.3946ed 6d 13 a0 adc $38a013 ADC SEC_PER_FAT+3 -.3946f0 8d 1b a0 sta $38a01b STA FAT2_BEGIN_LBA+3 -.3946f3 a9 00 lda #$00 LDA #DOS_SECTOR_SIZE -.3946fa 8d 0f a0 sta $38a00f STA CLUSTER_SIZE+1 -.3946fd ret_success -.3946fd e2 20 sep #$20 SEP #$20 ; set A short -.3946ff 64 0e stz $032e STZ DOS_STATUS ; Set status code to 0 -.394701 28 plp PLP -.394702 2b pld PLD -.394703 ab plb PLB -.394704 38 sec SEC -.394705 6b rtl RTL -.394706 ret_failure -.394706 e2 20 sep #$20 SEP #$20 ; set A short -.394708 85 0e sta $032e STA DOS_STATUS ; Save the status code -.39470a 28 plp PLP -.39470b 2b pld PLD -.39470c ab plb PLB -.39470d 18 clc CLC -.39470e 6b rtl RTL -.39470f DOS_TESTBOOT -.39470f 8b phb PHB -.394710 0b phd PHD -.394711 da phx PHX -.394712 08 php PHP -.394713 48 pha PHA ; begin setdbr macro -.394714 08 php PHP -.394715 e2 20 sep #$20 SEP #$20 ; set A short -.394717 a9 00 lda #$00 LDA #0 -.394719 48 pha PHA -.39471a ab plb PLB -.39471b 28 plp PLP -.39471c 68 pla PLA ; end setdbr macro -.39471d 48 pha PHA ; begin setdp macro -.39471e 08 php PHP -.39471f c2 20 rep #$20 REP #$20 ; set A long -.394721 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394724 5b tcd TCD -.394725 28 plp PLP -.394726 68 pla PLA ; end setdp macro -.394727 c2 10 rep #$10 REP #$10 ; set X long -.394729 chk_dev -.394729 e2 20 sep #$20 SEP #$20 ; set A short -.39472b a5 01 lda $0321 LDA @b BIOS_DEV ; Look at the device # -.39472d c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it the floppy drive? -.39472f f0 24 beq $394755 BEQ chk_vbr_brl ; Yes: check if BRL is in the right place in the VBR -.394731 c2 30 rep #$30 REP #$30 ; set A&X long -.394733 a9 00 00 lda #$0000 LDA #0 ; Point to the MBR -.394736 85 02 sta $0322 STA @b BIOS_LBA -.394738 85 04 sta $0324 STA @b BIOS_LBA+2 -.39473a a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; And the buffer -.39473d 85 06 sta $0326 STA @b BIOS_BUFF_PTR -.39473f a9 38 00 lda #$0038 LDA #`DOS_SECTOR -.394742 85 08 sta $0328 STA @b BIOS_BUFF_PTR+2 -.394744 22 44 10 00 jsl $001044 JSL GETBLOCK ; Try to load the MBR -.394748 b0 03 bcs $39474d BCS chk_mbr_brl -.39474a 82 47 00 brl $394794 BRL done ; If failed... just return -.39474d chk_mbr_brl -.39474d e2 20 sep #$20 SEP #$20 ; set A short -.39474f af 00 a3 38 lda $38a300 LDA @l DOS_SECTOR ; Check the first byte of the MBR -.394753 80 04 bra $394759 BRA chk_brl -.394755 af 3e a3 38 lda $38a33e chk_vbr_brl LDA @l DOS_SECTOR+FDC_BOOT_START -.394759 c9 80 cmp #$80 chk_brl CMP #$80 ; Is the first byte a BRL/BRA instruction? -.39475b f0 06 beq $394763 BEQ chk_magic ; Yes: check for the magic text -.39475d c9 82 cmp #$82 CMP #$82 -.39475f f0 02 beq $394763 BEQ chk_magic -.394761 80 31 bra $394794 BRA done ; No: just return -.394763 a2 00 00 ldx #$0000 chk_magic LDX #0 -.394766 bf 03 a3 38 lda $38a303,x magic_loop LDA @l DOS_SECTOR+3,X ; Check the "vendor" byte -.39476a df 99 47 39 cmp $394799,x CMP DOS_BOOT_MAGIC,X ; Compare it against our boot magic code -.39476e d0 24 bne $394794 BNE done ; If it's not equal, just return -.394770 e8 inx INX ; Otherwise, check the next one -.394771 e0 08 00 cpx #$0008 CPX #8 -.394774 d0 f0 bne $394766 BNE magic_loop ; Until we've checked all 8 bytes -.394776 c2 30 rep #$30 REP #$30 ; set A&X long -.394778 a9 00 02 lda #$0200 LDA #DOS_SECTOR_SIZE -.39477b a2 00 a5 ldx #$a500 LDX #<>(DOS_SECTOR+DOS_SECTOR_SIZE) -.39477e a0 00 ab ldy #$ab00 LDY #<>(DOS_BOOT_SECTOR+DOS_SECTOR_SIZE) -.394781 44 38 38 mvp $38,$38 MVP #`DOS_SECTOR, #`DOS_BOOT_SECTOR -.394784 e2 20 sep #$20 SEP #$20 ; set A short -.394786 a5 01 lda $0321 LDA @b BIOS_DEV ; Check the device -.394788 c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it the FDC? -.39478a f0 04 beq $394790 BEQ jmp_fdc_start ; Yes: jump to the start of the VBR code -.39478c 5c 00 a9 38 jmp $38a900 JML DOS_BOOT_SECTOR ; No: it's an MBR, start at the first byte -.394790 5c 3e a9 38 jmp $38a93e jmp_fdc_start JML DOS_BOOT_SECTOR+FDC_BOOT_START -.394794 28 plp done PLP -.394795 2b pld PLD -.394796 ab plb PLB -.394797 fa plx PLX -.394798 6b rtl RTL ->394799 43 32 35 36 44 4f 53 20 DOS_BOOT_MAGIC .text "C256DOS " -.3947a1 DOS_CALC_LBA -.3947a1 8b phb PHB -.3947a2 0b phd PHD -.3947a3 08 php PHP -.3947a4 48 pha PHA ; begin setdbr macro -.3947a5 08 php PHP -.3947a6 e2 20 sep #$20 SEP #$20 ; set A short -.3947a8 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3947aa 48 pha PHA -.3947ab ab plb PLB -.3947ac 28 plp PLP -.3947ad 68 pla PLA ; end setdbr macro -.3947ae 48 pha PHA ; begin setdp macro -.3947af 08 php PHP -.3947b0 c2 20 rep #$20 REP #$20 ; set A long -.3947b2 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3947b5 5b tcd TCD -.3947b6 28 plp PLP -.3947b7 68 pla PLA ; end setdp macro -.3947b8 c2 20 rep #$20 REP #$20 ; set A long -.3947ba 38 sec SEC -.3947bb a5 10 lda $0330 LDA DOS_CLUS_ID ; cluster - 2 -.3947bd e9 02 00 sbc #$0002 SBC #2 -.3947c0 85 28 sta $0348 STA DOS_TEMP -.3947c2 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.3947c4 e9 00 00 sbc #$0000 SBC #0 -.3947c7 85 2a sta $034a STA DOS_TEMP+2 -.3947c9 e2 10 sep #$10 SEP #$10 ; set X short -.3947cb ae 03 a0 ldx $38a003 LDX SECTORS_PER_CLUSTER -.3947ce e0 01 cpx #$01 mult_loop CPX #1 -.3947d0 f0 07 beq $3947d9 BEQ add_offset -.3947d2 06 28 asl $0348 ASL DOS_TEMP -.3947d4 26 28 rol $0348 ROL DOS_TEMP -.3947d6 ca dex DEX -.3947d7 80 f5 bra $3947ce BRA mult_loop -.3947d9 18 clc add_offset CLC -.3947da a5 28 lda $0348 LDA DOS_TEMP ; cluster_being_lba + (cluster - 2) * SECTORS_PER_CLUSTER -.3947dc 6d 1c a0 adc $38a01c ADC CLUSTER_BEGIN_LBA -.3947df 85 02 sta $0322 STA BIOS_LBA -.3947e1 a5 2a lda $034a LDA DOS_TEMP+2 -.3947e3 6d 1e a0 adc $38a01e ADC CLUSTER_BEGIN_LBA+2 -.3947e6 85 04 sta $0324 STA BIOS_LBA+2 -.3947e8 28 plp PLP -.3947e9 2b pld PLD -.3947ea ab plb PLB -.3947eb 6b rtl RTL -.3947ec DOS_GETCLUSTER -.3947ec 8b phb PHB -.3947ed 0b phd PHD -.3947ee 08 php PHP -.3947ef 48 pha PHA ; begin setdbr macro -.3947f0 08 php PHP -.3947f1 e2 20 sep #$20 SEP #$20 ; set A short -.3947f3 a9 00 lda #$00 LDA #0 -.3947f5 48 pha PHA -.3947f6 ab plb PLB -.3947f7 28 plp PLP -.3947f8 68 pla PLA ; end setdbr macro -.3947f9 48 pha PHA ; begin setdp macro -.3947fa 08 php PHP -.3947fb c2 20 rep #$20 REP #$20 ; set A long -.3947fd a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394800 5b tcd TCD -.394801 28 plp PLP -.394802 68 pla PLA ; end setdp macro -.394803 c2 20 rep #$20 REP #$20 ; set A long -.394805 a5 1c lda $033c LDA DOS_BUFF_PTR ; Set the BIOS BUFFER -.394807 85 06 sta $0326 STA BIOS_BUFF_PTR -.394809 a5 1e lda $033e LDA DOS_BUFF_PTR+2 -.39480b 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.39480d 22 a1 47 39 jsl $3947a1 JSL DOS_CALC_LBA ; Convert the cluster # to the first sector's LBA -.394811 22 44 10 00 jsl $001044 JSL GETBLOCK ; Get the first block of the cluster -.394815 90 09 bcc $394820 BCC ret_failure -.394817 ret_success -.394817 e2 20 sep #$20 SEP #$20 ; set A short -.394819 64 0e stz $032e STZ DOS_STATUS -.39481b 28 plp PLP -.39481c 2b pld PLD -.39481d ab plb PLB -.39481e 38 sec SEC -.39481f 6b rtl RTL -.394820 ret_failure -.394820 e2 20 sep #$20 SEP #$20 ; set A short -.394822 85 0e sta $032e STA DOS_STATUS -.394824 28 plp PLP -.394825 2b pld PLD -.394826 ab plb PLB -.394827 18 clc CLC -.394828 6b rtl RTL -.394829 DOS_PUTCLUSTER -.394829 8b phb PHB -.39482a 0b phd PHD -.39482b 08 php PHP -.39482c 48 pha PHA ; begin setdbr macro -.39482d 08 php PHP -.39482e e2 20 sep #$20 SEP #$20 ; set A short -.394830 a9 00 lda #$00 LDA #0 -.394832 48 pha PHA -.394833 ab plb PLB -.394834 28 plp PLP -.394835 68 pla PLA ; end setdbr macro -.394836 48 pha PHA ; begin setdp macro -.394837 08 php PHP -.394838 c2 20 rep #$20 REP #$20 ; set A long -.39483a a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39483d 5b tcd TCD -.39483e 28 plp PLP -.39483f 68 pla PLA ; end setdp macro -.394840 c2 20 rep #$20 REP #$20 ; set A long -.394842 a5 1c lda $033c LDA DOS_BUFF_PTR ; Set the BIOS BUFFER -.394844 85 06 sta $0326 STA BIOS_BUFF_PTR -.394846 a5 1e lda $033e LDA DOS_BUFF_PTR+2 -.394848 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.39484a 22 a1 47 39 jsl $3947a1 JSL DOS_CALC_LBA ; Convert the cluster # to the first sector's LBA -.39484e 22 24 10 00 jsl $001024 JSL PUTBLOCK ; PUT the first block of the cluster -.394852 90 09 bcc $39485d BCC ret_failure -.394854 ret_success -.394854 e2 20 sep #$20 SEP #$20 ; set A short -.394856 64 0e stz $032e STZ DOS_STATUS -.394858 28 plp PLP -.394859 2b pld PLD -.39485a ab plb PLB -.39485b 38 sec SEC -.39485c 6b rtl RTL -.39485d ret_failure -.39485d e2 20 sep #$20 SEP #$20 ; set A short -.39485f 85 0e sta $032e STA DOS_STATUS -.394861 28 plp PLP -.394862 2b pld PLD -.394863 ab plb PLB -.394864 18 clc CLC -.394865 6b rtl RTL ->394866 40 46 00 DOS_FDC_NAME .null "@F" -.394869 DOS_FDC_DESC ->394869 66 48 39 00 DEVNAME .dword DOS_FDC_NAME ; A pointer to the ASCIIZ name of the device ->39486d 00 DEVNUMBER .byte BIOS_DEV_FDC ; The BIOS_DEV number for the device ->39486e 00 00 00 00 NEXT .dword 0 ; A pointer to the next device descriptor ->394872 40 53 00 DOS_SDC_NAME .null "@S" -.394875 DOS_SDC_DESC ->394875 72 48 39 00 DEVNAME .dword DOS_SDC_NAME ; A pointer to the ASCIIZ name of the device ->394879 02 DEVNUMBER .byte BIOS_DEV_SD ; The BIOS_DEV number for the device ->39487a 69 48 39 00 NEXT .dword DOS_FDC_DESC ; A pointer to the next device descriptor ->39487e 40 48 00 DOS_HDC_NAME .null "@H" -.394881 DOS_HD_DESC ->394881 7e 48 39 00 DEVNAME .dword DOS_HDC_NAME ; A pointer to the ASCIIZ name of the device ->394885 06 DEVNUMBER .byte BIOS_DEV_HD0 ; The BIOS_DEV number for the device ->394886 75 48 39 00 NEXT .dword DOS_SDC_DESC ; A pointer to the next device descriptor -.39488a DOS_PARSE_DEV -.39488a 8b phb PHB -.39488b 0b phd PHD -.39488c 08 php PHP -.39488d 48 pha PHA ; begin setdbr macro -.39488e 08 php PHP -.39488f e2 20 sep #$20 SEP #$20 ; set A short -.394891 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.394893 48 pha PHA -.394894 ab plb PLB -.394895 28 plp PLP -.394896 68 pla PLA ; end setdbr macro -.394897 48 pha PHA ; begin setdp macro -.394898 08 php PHP -.394899 c2 20 rep #$20 REP #$20 ; set A long -.39489b a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39489e 5b tcd TCD -.39489f 28 plp PLP -.3948a0 68 pla PLA ; end setdp macro -.3948a1 c2 30 rep #$30 REP #$30 ; set A&X long -.3948a3 af 4a a0 38 lda $38a04a LDA @l DOS_DEV_NAMES ; Point to the first device name to check -.3948a7 85 28 sta $0348 STA DOS_TEMP -.3948a9 af 4c a0 38 lda $38a04c LDA @l DOS_DEV_NAMES+2 -.3948ad 85 2a sta $034a STA DOS_TEMP+2 -.3948af a9 00 04 lda #$0400 LDA #<>DOS_PATH_BUFF ; Make DOS_STR2_PTR point to the path to check -.3948b2 85 48 sta $0368 STA DOS_STR2_PTR -.3948b4 a9 00 00 lda #$0000 LDA #`DOS_PATH_BUFF -.3948b7 85 4a sta $036a STA DOS_STR2_PTR+2 -.3948b9 a0 00 00 ldy #$0000 dev_loop LDY #DEVICE_DESC.DEVNAME ; Get the name of the current device into DOS_STR1_PTR -.3948bc b7 28 lda [$0348],y LDA [DOS_TEMP],Y -.3948be 85 44 sta $0364 STA DOS_STR1_PTR -.3948c0 c8 iny INY -.3948c1 c8 iny INY -.3948c2 b7 28 lda [$0348],y LDA [DOS_TEMP],Y -.3948c4 85 46 sta $0366 STA DOS_STR1_PTR+2 -.3948c6 e2 20 sep #$20 SEP #$20 ; set A short -.3948c8 a0 00 00 ldy #$0000 LDY #0 -.3948cb b7 44 lda [$0364],y cmp_loop LDA [DOS_STR1_PTR],Y ; Get the Yth character of the device name -.3948cd f0 24 beq $3948f3 BEQ found ; If it's NULL, we found a match -.3948cf d7 48 cmp [$0368],y CMP [DOS_STR2_PTR],Y ; Compare it to the Yth character of the path -.3948d1 d0 03 bne $3948d6 BNE next_device ; If no match, try to load the next device -.3948d3 c8 iny INY ; Go to the next character -.3948d4 80 f5 bra $3948cb BRA cmp_loop -.3948d6 next_device -.3948d6 c2 20 rep #$20 REP #$20 ; set A long -.3948d8 a0 05 00 ldy #$0005 LDY #DEVICE_DESC.NEXT ; DOS_TEMP := DOS_TEMP->NEXT -.3948db b7 28 lda [$0348],y LDA [DOS_TEMP],Y -.3948dd 48 pha PHA -.3948de c8 iny INY -.3948df c8 iny INY -.3948e0 b7 28 lda [$0348],y LDA [DOS_TEMP],Y -.3948e2 85 2a sta $034a STA DOS_TEMP+2 -.3948e4 68 pla PLA -.3948e5 85 28 sta $0348 STA DOS_TEMP -.3948e7 a5 28 lda $0348 LDA DOS_TEMP ; Is DOS_TEMP = NULL? -.3948e9 d0 ce bne $3948b9 BNE dev_loop ; No: check this device -.3948eb a5 2a lda $034a LDA DOS_TEMP+2 -.3948ed d0 ca bne $3948b9 BNE dev_loop -.3948ef 28 plp done PLP ; Otherwise, return having not found a match -.3948f0 2b pld PLD -.3948f1 ab plb PLB -.3948f2 6b rtl RTL -.3948f3 22 04 49 39 jsl $394904 found JSL DOS_ADJUSTPATH ; Remove the device name from the buffer -.3948f7 e2 20 sep #$20 SEP #$20 ; set A short -.3948f9 a0 04 00 ldy #$0004 LDY #DEVICE_DESC.DEVNUMBER ; Set the BIOS device number from the found device -.3948fc b7 28 lda [$0348],y LDA [DOS_TEMP],Y -.3948fe 8f 21 03 00 sta $000321 STA @l BIOS_DEV -.394902 80 eb bra $3948ef BRA done -.394904 DOS_ADJUSTPATH -.394904 da phx PHX -.394905 5a phy PHY -.394906 8b phb PHB -.394907 0b phd PHD -.394908 08 php PHP -.394909 48 pha PHA ; begin setdbr macro -.39490a 08 php PHP -.39490b e2 20 sep #$20 SEP #$20 ; set A short -.39490d a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.39490f 48 pha PHA -.394910 ab plb PLB -.394911 28 plp PLP -.394912 68 pla PLA ; end setdbr macro -.394913 48 pha PHA ; begin setdp macro -.394914 08 php PHP -.394915 c2 20 rep #$20 REP #$20 ; set A long -.394917 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39491a 5b tcd TCD -.39491b 28 plp PLP -.39491c 68 pla PLA ; end setdp macro -.39491d c2 30 rep #$30 REP #$30 ; set A&X long -.39491f 84 4b sty $036b STY DOS_SCRATCH ; Save the index to later compute the size -.394921 98 tya TYA ; Compute the address of the first source byte -.394922 18 clc CLC -.394923 69 00 04 adc #$0400 ADC #<>DOS_PATH_BUFF -.394926 aa tax TAX -.394927 a9 00 04 lda #$0400 LDA #<>DOS_PATH_BUFF ; Compute the destination address for the source byte -.39492a a8 tay TAY -.39492b 38 sec SEC ; Compute the number of bytes to copy -.39492c a9 00 01 lda #$0100 LDA #256 -.39492f e5 4b sbc $036b SBC DOS_SCRATCH -.394931 54 00 00 mvn $00,$00 MVN #`DOS_PATH_BUFF, #`DOS_PATH_BUFF -.394934 28 plp PLP -.394935 2b pld PLD -.394936 ab plb PLB -.394937 7a ply PLY -.394938 fa plx PLX -.394939 6b rtl RTL -.39493a DOS_PARSE_PATH -.39493a 8b phb PHB -.39493b 0b phd PHD -.39493c 08 php PHP -.39493d 48 pha PHA ; begin setdbr macro -.39493e 08 php PHP -.39493f e2 20 sep #$20 SEP #$20 ; set A short -.394941 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.394943 48 pha PHA -.394944 ab plb PLB -.394945 28 plp PLP -.394946 68 pla PLA ; end setdbr macro -.394947 48 pha PHA ; begin setdp macro -.394948 08 php PHP -.394949 c2 20 rep #$20 REP #$20 ; set A long -.39494b a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39494e 5b tcd TCD -.39494f 28 plp PLP -.394950 68 pla PLA ; end setdp macro -.394951 c2 10 rep #$10 REP #$10 ; set X long -.394953 e2 20 sep #$20 SEP #$20 ; set A short -.394955 a2 00 00 ldx #$0000 LDX #0 -.394958 b5 e0 lda $0400,x upcase_loop LDA DOS_PATH_BUFF,X ; Get the character -.39495a f0 1b beq $394977 BEQ parse_dev ; If it's NULL, the path is upper case, attempt to parse the device -.39495c c9 20 cmp #$20 CMP #' ' ; Is a control character? -.39495e b0 05 bcs $394965 BGE check_case ; No: check the case -.394960 a9 07 lda #$07 LDA #DOS_ERR_BADPATH ; Yes: return a bad path error -.394962 82 64 00 brl $3949c9 BRL ret_failure -.394965 c9 61 cmp #$61 check_case CMP #'a' ; Is the character lower case? -.394967 90 08 bcc $394971 BLT next_char -.394969 c9 7b cmp #$7b CMP #'z'+1 -.39496b b0 04 bcs $394971 BGE next_char -.39496d 29 5f and #$5f AND #%01011111 ; Yes: Convert to uppercase -.39496f 95 e0 sta $0400,x STA DOS_PATH_BUFF,X -.394971 e8 inx next_char INX ; Move to the next character -.394972 e0 00 01 cpx #$0100 CPX #$100 -.394975 d0 e1 bne $394958 BNE upcase_loop -.394977 22 8a 48 39 jsl $39488a parse_dev JSL DOS_PARSE_DEV ; Parse and extract a device specifier ":xxx:" -.39497b a5 e0 lda $0400 LDA DOS_PATH_BUFF ; Check the first character of the path -.39497d c9 3a cmp #$3a CMP #':' -.39497f d0 07 bne $394988 BNE clr_name ; If not colon, treat it as a file name -.394981 a0 01 00 ldy #$0001 LDY #1 ; Otherwise... -.394984 22 04 49 39 jsl $394904 JSL DOS_ADJUSTPATH ; For now, just remove the leading ":" -.394988 a0 00 00 ldy #$0000 clr_name LDY #0 ; Set the short name to blanks -.39498b a9 20 lda #$20 LDA #' ' -.39498d 99 3a a0 sta $38a03a,y clr_loop STA DOS_SHORT_NAME,Y -.394990 c8 iny INY -.394991 c0 0b 00 cpy #$000b CPY #11 -.394994 d0 f7 bne $39498d BNE clr_loop -.394996 a2 00 00 ldx #$0000 LDX #0 -.394999 a0 00 00 ldy #$0000 LDY #0 -.39499c b5 e0 lda $0400,x cpy_name_loop LDA DOS_PATH_BUFF,X ; Get the character of the name -.39499e f0 20 beq $3949c0 BEQ ret_success ; If NULL: we've finished parsing the path -.3949a0 c9 2e cmp #$2e CMP #'.' ; If it's a dot, we've finished the name part -.3949a2 f0 0a beq $3949ae BEQ cpy_ext ; And move to the extension -.3949a4 99 3a a0 sta $38a03a,y STA DOS_SHORT_NAME,Y ; Otherwise, store it to the name portion -.3949a7 e8 inx INX -.3949a8 c8 iny INY ; Move to the next character -.3949a9 c0 08 00 cpy #$0008 CPY #8 ; Have we processed 8? -.3949ac d0 ee bne $39499c BNE cpy_name_loop ; No: process this one -.3949ae e8 inx cpy_ext INX ; Skip the dot -.3949af a0 08 00 ldy #$0008 LDY #8 -.3949b2 b5 e0 lda $0400,x cpy_ext_loop LDA DOS_PATH_BUFF,X ; Get the character of the extension -.3949b4 f0 0a beq $3949c0 BEQ ret_success ; If it's NULL, we've finished -.3949b6 99 3a a0 sta $38a03a,y STA DOS_SHORT_NAME,Y ; Otherwise, copy it to the short name -.3949b9 e8 inx INX -.3949ba c8 iny INY ; Move to the next character -.3949bb c0 0b 00 cpy #$000b CPY #11 ; Have we processed the three ext characters? -.3949be d0 f2 bne $3949b2 BNE cpy_ext_loop ; No: process this one -.3949c0 ret_success -.3949c0 e2 20 sep #$20 SEP #$20 ; set A short -.3949c2 64 0e stz $032e STZ DOS_STATUS -.3949c4 28 plp PLP -.3949c5 2b pld PLD -.3949c6 ab plb PLB -.3949c7 38 sec SEC -.3949c8 6b rtl RTL -.3949c9 ret_failure -.3949c9 e2 20 sep #$20 SEP #$20 ; set A short -.3949cb 85 0e sta $032e STA DOS_STATUS -.3949cd 28 plp PLP -.3949ce 2b pld PLD -.3949cf ab plb PLB -.3949d0 18 clc CLC -.3949d1 6b rtl RTL -.3949d2 DOS_FINDFILE -.3949d2 8b phb PHB -.3949d3 0b phd PHD -.3949d4 08 php PHP -.3949d5 48 pha PHA ; begin setdbr macro -.3949d6 08 php PHP -.3949d7 e2 20 sep #$20 SEP #$20 ; set A short -.3949d9 a9 00 lda #$00 LDA #0 -.3949db 48 pha PHA -.3949dc ab plb PLB -.3949dd 28 plp PLP -.3949de 68 pla PLA ; end setdbr macro -.3949df 48 pha PHA ; begin setdp macro -.3949e0 08 php PHP -.3949e1 c2 20 rep #$20 REP #$20 ; set A long -.3949e3 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3949e6 5b tcd TCD -.3949e7 28 plp PLP -.3949e8 68 pla PLA ; end setdp macro -.3949e9 c2 30 rep #$30 REP #$30 ; set A&X long -.3949eb 22 3a 49 39 jsl $39493a JSL DOS_PARSE_PATH ; Break out the path into its components -.3949ef b0 05 bcs $3949f6 BCS mount ; If success: try to open the directory -.3949f1 28 plp pass_failure PLP ; If failure, just pass the failure back up -.3949f2 2b pld PLD -.3949f3 ab plb PLB -.3949f4 18 clc CLC -.3949f5 6b rtl RTL -.3949f6 22 54 45 39 jsl $394554 mount JSL DOS_MOUNT -.3949fa b0 03 bcs $3949ff BCS get_directory -.3949fc 82 56 00 brl $394a55 BRL ret_failure -.3949ff get_directory -.3949ff c2 20 rep #$20 REP #$20 ; set A long -.394a01 22 09 42 39 jsl $394209 JSL DOS_DIROPEN ; Get the directory -.394a05 b0 07 bcs $394a0e BCS scan_entries ; If success: start scanning the directory entries -.394a07 e2 20 sep #$20 SEP #$20 ; set A short -.394a09 a9 08 lda #$08 LDA #DOS_ERR_NODIR ; Otherwise: return a no directory error -.394a0b 82 47 00 brl $394a55 BRL ret_failure -.394a0e 22 88 42 39 jsl $394288 scan_entries JSL DOS_DIRFIRST ; Move the DIR pointer to the beginning of the sector -.394a12 scan_loop +.39450b a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39450e 5b tcd TCD +.39450f 28 plp PLP +.394510 68 pla PLA ; end setdp macro +.394511 e2 20 sep #$20 SEP #$20 ; set A short +.394513 c2 10 rep #$10 REP #$10 ; set X long +.394515 a2 00 00 ldx #$0000 LDX #0 ; Zero out all the bank $38 variables +.394518 a9 00 lda #$00 LDA #0 +.39451a 9d 00 a0 sta $38a000,x b38_clr_loop STA @w DOS_HIGH_VARIABLES,X +.39451d e8 inx INX +.39451e e0 01 20 cpx #$2001 CPX #<>(DOS_FILE_BUFFS_END - DOS_HIGH_VARIABLES + 1) +.394521 d0 f7 bne $39451a BNE b38_clr_loop +.394523 c2 20 rep #$20 REP #$20 ; set A long +.394525 a9 d3 48 lda #$48d3 LDA #<>DOS_HD_DESC ; Initialize the device names list +.394528 8f 4a a0 38 sta $38a04a STA @l DOS_DEV_NAMES +.39452c a9 39 00 lda #$0039 LDA #`DOS_HD_DESC +.39452f 8f 4c a0 38 sta $38a04c STA @l DOS_DEV_NAMES+2 +.394533 e2 20 sep #$20 SEP #$20 ; set A short +.394535 a9 02 lda #$02 LDA #BIOS_DEV_SD ; Default to the SD card +.394537 85 01 sta $0321 STA BIOS_DEV +.394539 a9 ff lda #$ff LDA #$FF ; Set the mounted device to a sentinel value +.39453b 8f 50 a0 38 sta $38a050 STA @l DOS_MOUNT_DEV +.39453f a9 00 lda #$00 LDA #0 +.394541 a2 00 00 ldx #$0000 LDX #0 +.394544 9d 20 ad sta $38ad20,x fd_zero_loop STA @w DOS_FILE_DESCS,X +.394547 e8 inx INX +.394548 e0 00 01 cpx #$0100 CPX #(DOS_FILE_DESCS_END - DOS_FILE_DESCS) +.39454b d0 f7 bne $394544 BNE fd_zero_loop +.39454d a9 00 lda #$00 LDA #0 +.39454f a2 00 00 ldx #$0000 LDX #0 +.394552 9d 00 b0 sta $38b000,x sect_zero_loop STA @w DOS_FILE_BUFFS,X +.394555 e8 inx INX +.394556 e0 00 10 cpx #$1000 CPX #(DOS_FILE_BUFFS_END - DOS_FILE_BUFFS) +.394559 d0 f7 bne $394552 BNE sect_zero_loop +.39455b c2 20 rep #$20 REP #$20 ; set A long +.39455d a9 20 ad lda #$ad20 LDA #<>DOS_FILE_DESCS ; Initialize a pointer to the file descriptors +.394560 85 20 sta $0340 STA @b DOS_FD_PTR +.394562 a9 38 00 lda #$0038 LDA #`DOS_FILE_DESCS +.394565 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.394567 a9 00 b0 lda #$b000 LDA #<>DOS_FILE_BUFFS ; Initialize a pointer to the sector buffers +.39456a 85 28 sta $0348 STA @b DOS_TEMP +.39456c a9 38 00 lda #$0038 LDA #`DOS_FILE_BUFFS +.39456f 85 2a sta $034a STA @b DOS_TEMP+2 +.394571 a2 08 00 ldx #$0008 LDX #DOS_FD_MAX ; Set how many file descriptors to update +.394574 a0 0e 00 ldy #$000e fd_buff_loop LDY #FILEDESC.BUFFER ; Set the file descriptor's buffer pointer +.394577 a5 28 lda $0348 LDA @b DOS_TEMP +.394579 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.39457b c8 iny INY +.39457c c8 iny INY +.39457d a5 2a lda $034a LDA @b DOS_TEMP+2 +.39457f 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.394581 18 clc CLC ; Advance the file descriptor pointer to the next file descriptor +.394582 a5 20 lda $0340 LDA @b DOS_FD_PTR +.394584 69 20 00 adc #$0020 ADC #SIZE(FILEDESC) +.394587 85 20 sta $0340 STA @b DOS_FD_PTR +.394589 a5 22 lda $0342 LDA @b DOS_FD_PTR+2 +.39458b 69 00 00 adc #$0000 ADC #0 +.39458e 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.394590 18 clc CLC ; Advance the sector buffer pointer to the next buffer +.394591 a5 28 lda $0348 LDA @b DOS_TEMP +.394593 69 00 02 adc #$0200 ADC #DOS_SECTOR_SIZE +.394596 85 28 sta $0348 STA @b DOS_TEMP +.394598 a5 2a lda $034a LDA @b DOS_TEMP+2 +.39459a 69 00 00 adc #$0000 ADC #0 +.39459d 85 2a sta $034a STA @b DOS_TEMP+2 +.39459f ca dex DEX ; Count down the descriptors... +.3945a0 d0 d2 bne $394574 BNE fd_buff_loop ; If not zero, keep setting the buffer pointers +.3945a2 28 plp PLP +.3945a3 2b pld PLD +.3945a4 ab plb PLB +.3945a5 6b rtl RTL +.3945a6 DOS_MOUNT +.3945a6 8b phb PHB +.3945a7 0b phd PHD +.3945a8 08 php PHP +.3945a9 48 pha PHA ; begin setdbr macro +.3945aa 08 php PHP +.3945ab e2 20 sep #$20 SEP #$20 ; set A short +.3945ad a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3945af 48 pha PHA +.3945b0 ab plb PLB +.3945b1 28 plp PLP +.3945b2 68 pla PLA ; end setdbr macro +.3945b3 48 pha PHA ; begin setdp macro +.3945b4 08 php PHP +.3945b5 c2 20 rep #$20 REP #$20 ; set A long +.3945b7 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3945ba 5b tcd TCD +.3945bb 28 plp PLP +.3945bc 68 pla PLA ; end setdp macro +.3945bd e2 20 sep #$20 SEP #$20 ; set A short +.3945bf a5 01 lda $0321 LDA BIOS_DEV ; Get the device to moount +.3945c1 8f 50 a0 38 sta $38a050 try_mount STA @l DOS_MOUNT_DEV ; Save the device we're going to try to mount +.3945c5 c9 02 cmp #$02 CMP #BIOS_DEV_SD ; Is it the SDC? +.3945c7 f0 1f beq $3945e8 BEQ do_sdc_mount ; Yes: attempt to mount it +.3945c9 c9 06 cmp #$06 CMP #BIOS_DEV_HD0 ; Is it HD0? +.3945cb f0 26 beq $3945f3 BEQ do_ide_mount ; Yes: attempt to mount the IDE drive +.3945cd c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it the FDC? +.3945cf f0 0b beq $3945dc BEQ do_fdc_mount ; Yes: attempt to mount it +.3945d1 a9 04 lda #$04 LDA #DOS_ERR_NOINIT ; Otherwise: return a bad device error +.3945d3 85 0e sta $032e STA DOS_STATUS +.3945d5 a9 80 lda #$80 LDA #BIOS_ERR_BADDEV +.3945d7 85 00 sta $0320 STA BIOS_STATUS +.3945d9 82 7c 01 brl $394758 BRL ret_failure +.3945dc 22 0c 68 39 jsl $39680c do_fdc_mount JSL FDC_MOUNT ; Attempt to mount the floppy disk +.3945e0 b0 03 bcs $3945e5 BCS fdc_success +.3945e2 82 73 01 brl $394758 BRL ret_failure +.3945e5 82 67 01 brl $39474f fdc_success BRL ret_success +.3945e8 22 16 5e 39 jsl $395e16 do_sdc_mount JSL SDC_INIT ; Yes: Initialize access to the SDC +.3945ec b0 10 bcs $3945fe BCS get_mbr ; Continue if success +.3945ee a9 04 lda #$04 LDA #DOS_ERR_NOINIT ; Otherwise: return an error +.3945f0 82 65 01 brl $394758 BRL ret_failure +.3945f3 22 54 6c 39 jsl $396c54 do_ide_mount JSL IDE_INIT ; Yes: Initialize access to the IDE drive +.3945f7 b0 05 bcs $3945fe BCS get_mbr ; Continue if success +.3945f9 a9 04 lda #$04 LDA #DOS_ERR_NOINIT ; Otherwise: return an error +.3945fb 82 5a 01 brl $394758 BRL ret_failure +.3945fe get_mbr +.3945fe c2 30 rep #$30 REP #$30 ; set A&X long +.394600 64 02 stz $0322 STZ BIOS_LBA ; Get the MBR +.394602 64 04 stz $0324 STZ BIOS_LBA+2 +.394604 a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; Into DOS_SECTOR +.394607 85 06 sta $0326 STA BIOS_BUFF_PTR +.394609 a9 38 00 lda #$0038 LDA #`DOS_SECTOR +.39460c 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.39460e 22 44 10 00 jsl $001044 JSL GETBLOCK ; Try to read the MBR +.394612 b0 07 bcs $39461b BCS chk_signature ; If success, check the signature bytes +.394614 e2 20 sep #$20 SEP #$20 ; set A short +.394616 a9 01 lda #$01 LDA #DOS_ERR_READ ; Otherwise: report we couldn't read the first sector +.394618 82 3d 01 brl $394758 BRL ret_failure +.39461b chk_signature +.39461b e2 20 sep #$20 SEP #$20 ; set A short +.39461d ad fe a4 lda $38a4fe LDA DOS_SECTOR+MBR_SIGNATURE +.394620 c9 55 cmp #$55 CMP #$55 ; Is first byte of signature $55? +.394622 d0 07 bne $39462b BNE not_mbr ; No: signal we could find the MBR +.394624 ad ff a4 lda $38a4ff LDA DOS_SECTOR+MBR_SIGNATURE+1 +.394627 c9 aa cmp #$aa CMP #$AA ; Is second byte of signature $AA? +.394629 f0 05 beq $394630 BEQ chk_part_type ; Yes: we have an MBR +.39462b a9 02 lda #$02 not_mbr LDA #DOS_ERR_NOTMBR ; Return that we didn't find the MBR +.39462d 82 28 01 brl $394758 BRL ret_failure +.394630 ad c2 a4 lda $38a4c2 chk_part_type LDA DOS_SECTOR+PART0_OFF+PART_TYPE_OFF +.394633 c9 0c cmp #$0c CMP #PART_TYPE_FAT32_LBA +.394635 f0 05 beq $39463c BEQ get_LBA ; Is FAT32 with LBA? +.394637 a9 03 lda #$03 LDA #DOS_ERR_NOFAT32 ; No: return No FAT32 found error +.394639 82 1c 01 brl $394758 BRL ret_failure +.39463c 8d 01 a0 sta $38a001 get_LBA STA FILE_SYSTEM ; Save the file system of the partition +.39463f c2 20 rep #$20 REP #$20 ; set A long +.394641 ad c6 a4 lda $38a4c6 LDA DOS_SECTOR+PART0_OFF+PART_LBA_OFF +.394644 8d 04 a0 sta $38a004 STA FIRSTSECTOR +.394647 ad c8 a4 lda $38a4c8 LDA DOS_SECTOR+PART0_OFF+PART_LBA_OFF+2 +.39464a 8d 06 a0 sta $38a006 STA FIRSTSECTOR+2 +.39464d ad cb a4 lda $38a4cb LDA DOS_SECTOR+PART0_OFF+PART_SECT_COUNT_OFF +.394650 8d 08 a0 sta $38a008 STA SECTORCOUNT +.394653 ad cd a4 lda $38a4cd LDA DOS_SECTOR+PART0_OFF+PART_SECT_COUNT_OFF+2 +.394656 8d 0a a0 sta $38a00a STA SECTORCOUNT+2 +.394659 e2 20 sep #$20 SEP #$20 ; set A short +.39465b a5 01 lda $0321 LDA BIOS_DEV ; Save the device number +.39465d 8d 00 a0 sta $38a000 STA DEVICE +.394660 a9 00 lda #$00 LDA #0 +.394662 8d 02 a0 sta $38a002 STA PARTITION ; For the moment, we only support the first partition +.394665 c2 20 rep #$20 REP #$20 ; set A long +.394667 a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR +.39466a 85 06 sta $0326 STA BIOS_BUFF_PTR +.39466c a9 38 00 lda #$0038 LDA #`DOS_SECTOR +.39466f 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394671 ad 04 a0 lda $38a004 LDA FIRSTSECTOR +.394674 85 02 sta $0322 STA BIOS_LBA +.394676 ad 06 a0 lda $38a006 LDA FIRSTSECTOR+2 +.394679 85 04 sta $0324 STA BIOS_LBA+2 +.39467b 22 44 10 00 jsl $001044 JSL GETBLOCK ; Attempt to load the volume ID +.39467f b0 1c bcs $39469d BCS get_first_sec ; Got it? Start parsing it +.394681 e2 20 sep #$20 SEP #$20 ; set A short +.394683 a9 05 lda #$05 LDA #DOS_ERR_VOLID ; Otherwise: return an error +.394685 82 d0 00 brl $394758 BRL ret_failure +.394688 chk_bpb_sig +.394688 e2 20 sep #$20 SEP #$20 ; set A short +.39468a ad fe a4 lda $38a4fe LDA DOS_SECTOR+BPB_SIGNATURE +.39468d c9 55 cmp #$55 CMP #$55 ; Is first byte of signature $55? +.39468f d0 07 bne $394698 BNE not_bpb ; No: signal we could find the volume ID +.394691 ad ff a4 lda $38a4ff LDA DOS_SECTOR+BPB_SIGNATURE+1 +.394694 c9 aa cmp #$aa CMP #$AA ; Is second byte of signature $AA? +.394696 f0 05 beq $39469d BEQ get_first_sec ; Yes: we have an volume ID +.394698 a9 05 lda #$05 not_bpb LDA #DOS_ERR_VOLID ; Return that we didn't find the Volume ID (BPB) +.39469a 82 bb 00 brl $394758 BRL ret_failure +.39469d get_first_sec +.39469d c2 20 rep #$20 REP #$20 ; set A long +.39469f ad 2c a3 lda $38a32c LDA DOS_SECTOR+BPB_ROOTCLUS_OFF +.3946a2 8d 20 a0 sta $38a020 STA ROOT_DIR_FIRST_CLUSTER +.3946a5 ad 2e a3 lda $38a32e LDA DOS_SECTOR+BPB_ROOTCLUS_OFF+2 +.3946a8 8d 22 a0 sta $38a022 STA ROOT_DIR_FIRST_CLUSTER+2 +.3946ab ad 0e a3 lda $38a30e LDA DOS_SECTOR+BPB_RSRVCLUS_OFF +.3946ae 8d 0c a0 sta $38a00c STA NUM_RSRV_SEC +.3946b1 18 clc CLC ; fat_begin_lba := FirstSector + Number_of_Reserved_Sectors +.3946b2 ad 04 a0 lda $38a004 LDA FIRSTSECTOR +.3946b5 6d 0c a0 adc $38a00c ADC NUM_RSRV_SEC +.3946b8 8d 14 a0 sta $38a014 STA FAT_BEGIN_LBA +.3946bb ad 06 a0 lda $38a006 LDA FIRSTSECTOR+2 +.3946be 69 00 00 adc #$0000 ADC #0 +.3946c1 8d 16 a0 sta $38a016 STA FAT_BEGIN_LBA+2 +.3946c4 e2 20 sep #$20 SEP #$20 ; set A short +.3946c6 a2 00 00 ldx #$0000 LDX #0 +.3946c9 bf 24 a3 38 lda $38a324,x cpy_secperfat LDA @l DOS_SECTOR+BPB_SECPERFAT_OFF,X +.3946cd 9f 10 a0 38 sta $38a010,x STA @l SEC_PER_FAT,X +.3946d1 e8 inx INX +.3946d2 e0 04 00 cpx #$0004 CPX #4 +.3946d5 d0 f2 bne $3946c9 BNE cpy_secperfat +.3946d7 ad 10 a0 lda $38a010 LDA SEC_PER_FAT +.3946da 0a asl a ASL A +.3946db 8d 1c a0 sta $38a01c STA CLUSTER_BEGIN_LBA +.3946de ad 11 a0 lda $38a011 LDA SEC_PER_FAT+1 +.3946e1 2a rol a ROL A +.3946e2 8d 1d a0 sta $38a01d STA CLUSTER_BEGIN_LBA+1 +.3946e5 ad 12 a0 lda $38a012 LDA SEC_PER_FAT+2 +.3946e8 2a rol a ROL A +.3946e9 8d 1e a0 sta $38a01e STA CLUSTER_BEGIN_LBA+2 +.3946ec ad 13 a0 lda $38a013 LDA SEC_PER_FAT+3 +.3946ef 2a rol a ROL A +.3946f0 8d 1f a0 sta $38a01f STA CLUSTER_BEGIN_LBA+3 +.3946f3 18 clc CLC +.3946f4 ad 1c a0 lda $38a01c LDA CLUSTER_BEGIN_LBA +.3946f7 6d 14 a0 adc $38a014 ADC FAT_BEGIN_LBA +.3946fa 8d 1c a0 sta $38a01c STA CLUSTER_BEGIN_LBA +.3946fd ad 1d a0 lda $38a01d LDA CLUSTER_BEGIN_LBA+1 +.394700 6d 15 a0 adc $38a015 ADC FAT_BEGIN_LBA+1 +.394703 8d 1d a0 sta $38a01d STA CLUSTER_BEGIN_LBA+1 +.394706 ad 1e a0 lda $38a01e LDA CLUSTER_BEGIN_LBA+2 +.394709 6d 16 a0 adc $38a016 ADC FAT_BEGIN_LBA+2 +.39470c 8d 1e a0 sta $38a01e STA CLUSTER_BEGIN_LBA+2 +.39470f ad 1f a0 lda $38a01f LDA CLUSTER_BEGIN_LBA+3 +.394712 6d 17 a0 adc $38a017 ADC FAT_BEGIN_LBA+3 +.394715 8d 1f a0 sta $38a01f STA CLUSTER_BEGIN_LBA+3 +.394718 e2 20 sep #$20 SEP #$20 ; set A short +.39471a ad 0d a3 lda $38a30d LDA DOS_SECTOR+BPB_SECPERCLUS_OFF +.39471d 8d 03 a0 sta $38a003 STA SECTORS_PER_CLUSTER +.394720 18 clc CLC +.394721 ad 14 a0 lda $38a014 LDA FAT_BEGIN_LBA ; Compute the address of the first sector of +.394724 6d 10 a0 adc $38a010 ADC SEC_PER_FAT ; the second copy of the FAT +.394727 8d 18 a0 sta $38a018 STA FAT2_BEGIN_LBA +.39472a ad 15 a0 lda $38a015 LDA FAT_BEGIN_LBA+1 +.39472d 6d 11 a0 adc $38a011 ADC SEC_PER_FAT+1 +.394730 8d 19 a0 sta $38a019 STA FAT2_BEGIN_LBA+1 +.394733 ad 16 a0 lda $38a016 LDA FAT_BEGIN_LBA+2 +.394736 6d 12 a0 adc $38a012 ADC SEC_PER_FAT+2 +.394739 8d 1a a0 sta $38a01a STA FAT2_BEGIN_LBA+2 +.39473c ad 17 a0 lda $38a017 LDA FAT_BEGIN_LBA+3 +.39473f 6d 13 a0 adc $38a013 ADC SEC_PER_FAT+3 +.394742 8d 1b a0 sta $38a01b STA FAT2_BEGIN_LBA+3 +.394745 a9 00 lda #$00 LDA #DOS_SECTOR_SIZE +.39474c 8d 0f a0 sta $38a00f STA CLUSTER_SIZE+1 +.39474f ret_success +.39474f e2 20 sep #$20 SEP #$20 ; set A short +.394751 64 0e stz $032e STZ DOS_STATUS ; Set status code to 0 +.394753 28 plp PLP +.394754 2b pld PLD +.394755 ab plb PLB +.394756 38 sec SEC +.394757 6b rtl RTL +.394758 ret_failure +.394758 e2 20 sep #$20 SEP #$20 ; set A short +.39475a 85 0e sta $032e STA DOS_STATUS ; Save the status code +.39475c 28 plp PLP +.39475d 2b pld PLD +.39475e ab plb PLB +.39475f 18 clc CLC +.394760 6b rtl RTL +.394761 DOS_TESTBOOT +.394761 8b phb PHB +.394762 0b phd PHD +.394763 da phx PHX +.394764 08 php PHP +.394765 48 pha PHA ; begin setdbr macro +.394766 08 php PHP +.394767 e2 20 sep #$20 SEP #$20 ; set A short +.394769 a9 00 lda #$00 LDA #0 +.39476b 48 pha PHA +.39476c ab plb PLB +.39476d 28 plp PLP +.39476e 68 pla PLA ; end setdbr macro +.39476f 48 pha PHA ; begin setdp macro +.394770 08 php PHP +.394771 c2 20 rep #$20 REP #$20 ; set A long +.394773 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394776 5b tcd TCD +.394777 28 plp PLP +.394778 68 pla PLA ; end setdp macro +.394779 c2 10 rep #$10 REP #$10 ; set X long +.39477b chk_dev +.39477b e2 20 sep #$20 SEP #$20 ; set A short +.39477d a5 01 lda $0321 LDA @b BIOS_DEV ; Look at the device # +.39477f c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it the floppy drive? +.394781 f0 24 beq $3947a7 BEQ chk_vbr_brl ; Yes: check if BRL is in the right place in the VBR +.394783 c2 30 rep #$30 REP #$30 ; set A&X long +.394785 a9 00 00 lda #$0000 LDA #0 ; Point to the MBR +.394788 85 02 sta $0322 STA @b BIOS_LBA +.39478a 85 04 sta $0324 STA @b BIOS_LBA+2 +.39478c a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; And the buffer +.39478f 85 06 sta $0326 STA @b BIOS_BUFF_PTR +.394791 a9 38 00 lda #$0038 LDA #`DOS_SECTOR +.394794 85 08 sta $0328 STA @b BIOS_BUFF_PTR+2 +.394796 22 44 10 00 jsl $001044 JSL GETBLOCK ; Try to load the MBR +.39479a b0 03 bcs $39479f BCS chk_mbr_brl +.39479c 82 47 00 brl $3947e6 BRL done ; If failed... just return +.39479f chk_mbr_brl +.39479f e2 20 sep #$20 SEP #$20 ; set A short +.3947a1 af 00 a3 38 lda $38a300 LDA @l DOS_SECTOR ; Check the first byte of the MBR +.3947a5 80 04 bra $3947ab BRA chk_brl +.3947a7 af 3e a3 38 lda $38a33e chk_vbr_brl LDA @l DOS_SECTOR+FDC_BOOT_START +.3947ab c9 80 cmp #$80 chk_brl CMP #$80 ; Is the first byte a BRL/BRA instruction? +.3947ad f0 06 beq $3947b5 BEQ chk_magic ; Yes: check for the magic text +.3947af c9 82 cmp #$82 CMP #$82 +.3947b1 f0 02 beq $3947b5 BEQ chk_magic +.3947b3 80 31 bra $3947e6 BRA done ; No: just return +.3947b5 a2 00 00 ldx #$0000 chk_magic LDX #0 +.3947b8 bf 03 a3 38 lda $38a303,x magic_loop LDA @l DOS_SECTOR+3,X ; Check the "vendor" byte +.3947bc df eb 47 39 cmp $3947eb,x CMP DOS_BOOT_MAGIC,X ; Compare it against our boot magic code +.3947c0 d0 24 bne $3947e6 BNE done ; If it's not equal, just return +.3947c2 e8 inx INX ; Otherwise, check the next one +.3947c3 e0 08 00 cpx #$0008 CPX #8 +.3947c6 d0 f0 bne $3947b8 BNE magic_loop ; Until we've checked all 8 bytes +.3947c8 c2 30 rep #$30 REP #$30 ; set A&X long +.3947ca a9 00 02 lda #$0200 LDA #DOS_SECTOR_SIZE +.3947cd a2 00 a5 ldx #$a500 LDX #<>(DOS_SECTOR+DOS_SECTOR_SIZE) +.3947d0 a0 00 ab ldy #$ab00 LDY #<>(DOS_BOOT_SECTOR+DOS_SECTOR_SIZE) +.3947d3 44 38 38 mvp $38,$38 MVP #`DOS_SECTOR, #`DOS_BOOT_SECTOR +.3947d6 e2 20 sep #$20 SEP #$20 ; set A short +.3947d8 a5 01 lda $0321 LDA @b BIOS_DEV ; Check the device +.3947da c9 00 cmp #$00 CMP #BIOS_DEV_FDC ; Is it the FDC? +.3947dc f0 04 beq $3947e2 BEQ jmp_fdc_start ; Yes: jump to the start of the VBR code +.3947de 5c 00 a9 38 jmp $38a900 JML DOS_BOOT_SECTOR ; No: it's an MBR, start at the first byte +.3947e2 5c 3e a9 38 jmp $38a93e jmp_fdc_start JML DOS_BOOT_SECTOR+FDC_BOOT_START +.3947e6 28 plp done PLP +.3947e7 2b pld PLD +.3947e8 ab plb PLB +.3947e9 fa plx PLX +.3947ea 6b rtl RTL +>3947eb 43 32 35 36 44 4f 53 20 DOS_BOOT_MAGIC .text "C256DOS " +.3947f3 DOS_CALC_LBA +.3947f3 8b phb PHB +.3947f4 0b phd PHD +.3947f5 08 php PHP +.3947f6 48 pha PHA ; begin setdbr macro +.3947f7 08 php PHP +.3947f8 e2 20 sep #$20 SEP #$20 ; set A short +.3947fa a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3947fc 48 pha PHA +.3947fd ab plb PLB +.3947fe 28 plp PLP +.3947ff 68 pla PLA ; end setdbr macro +.394800 48 pha PHA ; begin setdp macro +.394801 08 php PHP +.394802 c2 20 rep #$20 REP #$20 ; set A long +.394804 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394807 5b tcd TCD +.394808 28 plp PLP +.394809 68 pla PLA ; end setdp macro +.39480a c2 20 rep #$20 REP #$20 ; set A long +.39480c 38 sec SEC +.39480d a5 10 lda $0330 LDA DOS_CLUS_ID ; cluster - 2 +.39480f e9 02 00 sbc #$0002 SBC #2 +.394812 85 28 sta $0348 STA DOS_TEMP +.394814 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.394816 e9 00 00 sbc #$0000 SBC #0 +.394819 85 2a sta $034a STA DOS_TEMP+2 +.39481b e2 10 sep #$10 SEP #$10 ; set X short +.39481d ae 03 a0 ldx $38a003 LDX SECTORS_PER_CLUSTER +.394820 e0 01 cpx #$01 mult_loop CPX #1 +.394822 f0 07 beq $39482b BEQ add_offset +.394824 06 28 asl $0348 ASL DOS_TEMP +.394826 26 28 rol $0348 ROL DOS_TEMP +.394828 ca dex DEX +.394829 80 f5 bra $394820 BRA mult_loop +.39482b 18 clc add_offset CLC +.39482c a5 28 lda $0348 LDA DOS_TEMP ; cluster_being_lba + (cluster - 2) * SECTORS_PER_CLUSTER +.39482e 6d 1c a0 adc $38a01c ADC CLUSTER_BEGIN_LBA +.394831 85 02 sta $0322 STA BIOS_LBA +.394833 a5 2a lda $034a LDA DOS_TEMP+2 +.394835 6d 1e a0 adc $38a01e ADC CLUSTER_BEGIN_LBA+2 +.394838 85 04 sta $0324 STA BIOS_LBA+2 +.39483a 28 plp PLP +.39483b 2b pld PLD +.39483c ab plb PLB +.39483d 6b rtl RTL +.39483e DOS_GETCLUSTER +.39483e 8b phb PHB +.39483f 0b phd PHD +.394840 08 php PHP +.394841 48 pha PHA ; begin setdbr macro +.394842 08 php PHP +.394843 e2 20 sep #$20 SEP #$20 ; set A short +.394845 a9 00 lda #$00 LDA #0 +.394847 48 pha PHA +.394848 ab plb PLB +.394849 28 plp PLP +.39484a 68 pla PLA ; end setdbr macro +.39484b 48 pha PHA ; begin setdp macro +.39484c 08 php PHP +.39484d c2 20 rep #$20 REP #$20 ; set A long +.39484f a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394852 5b tcd TCD +.394853 28 plp PLP +.394854 68 pla PLA ; end setdp macro +.394855 c2 20 rep #$20 REP #$20 ; set A long +.394857 a5 1c lda $033c LDA DOS_BUFF_PTR ; Set the BIOS BUFFER +.394859 85 06 sta $0326 STA BIOS_BUFF_PTR +.39485b a5 1e lda $033e LDA DOS_BUFF_PTR+2 +.39485d 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.39485f 22 f3 47 39 jsl $3947f3 JSL DOS_CALC_LBA ; Convert the cluster # to the first sector's LBA +.394863 22 44 10 00 jsl $001044 JSL GETBLOCK ; Get the first block of the cluster +.394867 90 09 bcc $394872 BCC ret_failure +.394869 ret_success +.394869 e2 20 sep #$20 SEP #$20 ; set A short +.39486b 64 0e stz $032e STZ DOS_STATUS +.39486d 28 plp PLP +.39486e 2b pld PLD +.39486f ab plb PLB +.394870 38 sec SEC +.394871 6b rtl RTL +.394872 ret_failure +.394872 e2 20 sep #$20 SEP #$20 ; set A short +.394874 85 0e sta $032e STA DOS_STATUS +.394876 28 plp PLP +.394877 2b pld PLD +.394878 ab plb PLB +.394879 18 clc CLC +.39487a 6b rtl RTL +.39487b DOS_PUTCLUSTER +.39487b 8b phb PHB +.39487c 0b phd PHD +.39487d 08 php PHP +.39487e 48 pha PHA ; begin setdbr macro +.39487f 08 php PHP +.394880 e2 20 sep #$20 SEP #$20 ; set A short +.394882 a9 00 lda #$00 LDA #0 +.394884 48 pha PHA +.394885 ab plb PLB +.394886 28 plp PLP +.394887 68 pla PLA ; end setdbr macro +.394888 48 pha PHA ; begin setdp macro +.394889 08 php PHP +.39488a c2 20 rep #$20 REP #$20 ; set A long +.39488c a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39488f 5b tcd TCD +.394890 28 plp PLP +.394891 68 pla PLA ; end setdp macro +.394892 c2 20 rep #$20 REP #$20 ; set A long +.394894 a5 1c lda $033c LDA DOS_BUFF_PTR ; Set the BIOS BUFFER +.394896 85 06 sta $0326 STA BIOS_BUFF_PTR +.394898 a5 1e lda $033e LDA DOS_BUFF_PTR+2 +.39489a 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.39489c 22 f3 47 39 jsl $3947f3 JSL DOS_CALC_LBA ; Convert the cluster # to the first sector's LBA +.3948a0 22 24 10 00 jsl $001024 JSL PUTBLOCK ; PUT the first block of the cluster +.3948a4 90 09 bcc $3948af BCC ret_failure +.3948a6 ret_success +.3948a6 e2 20 sep #$20 SEP #$20 ; set A short +.3948a8 64 0e stz $032e STZ DOS_STATUS +.3948aa 28 plp PLP +.3948ab 2b pld PLD +.3948ac ab plb PLB +.3948ad 38 sec SEC +.3948ae 6b rtl RTL +.3948af ret_failure +.3948af e2 20 sep #$20 SEP #$20 ; set A short +.3948b1 85 0e sta $032e STA DOS_STATUS +.3948b3 28 plp PLP +.3948b4 2b pld PLD +.3948b5 ab plb PLB +.3948b6 18 clc CLC +.3948b7 6b rtl RTL +>3948b8 40 46 00 DOS_FDC_NAME .null "@F" +.3948bb DOS_FDC_DESC +>3948bb b8 48 39 00 DEVNAME .dword DOS_FDC_NAME ; A pointer to the ASCIIZ name of the device +>3948bf 00 DEVNUMBER .byte BIOS_DEV_FDC ; The BIOS_DEV number for the device +>3948c0 00 00 00 00 NEXT .dword 0 ; A pointer to the next device descriptor +>3948c4 40 53 00 DOS_SDC_NAME .null "@S" +.3948c7 DOS_SDC_DESC +>3948c7 c4 48 39 00 DEVNAME .dword DOS_SDC_NAME ; A pointer to the ASCIIZ name of the device +>3948cb 02 DEVNUMBER .byte BIOS_DEV_SD ; The BIOS_DEV number for the device +>3948cc bb 48 39 00 NEXT .dword DOS_FDC_DESC ; A pointer to the next device descriptor +>3948d0 40 48 00 DOS_HDC_NAME .null "@H" +.3948d3 DOS_HD_DESC +>3948d3 d0 48 39 00 DEVNAME .dword DOS_HDC_NAME ; A pointer to the ASCIIZ name of the device +>3948d7 06 DEVNUMBER .byte BIOS_DEV_HD0 ; The BIOS_DEV number for the device +>3948d8 c7 48 39 00 NEXT .dword DOS_SDC_DESC ; A pointer to the next device descriptor +.3948dc DOS_PARSE_DEV +.3948dc 8b phb PHB +.3948dd 0b phd PHD +.3948de 08 php PHP +.3948df 48 pha PHA ; begin setdbr macro +.3948e0 08 php PHP +.3948e1 e2 20 sep #$20 SEP #$20 ; set A short +.3948e3 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3948e5 48 pha PHA +.3948e6 ab plb PLB +.3948e7 28 plp PLP +.3948e8 68 pla PLA ; end setdbr macro +.3948e9 48 pha PHA ; begin setdp macro +.3948ea 08 php PHP +.3948eb c2 20 rep #$20 REP #$20 ; set A long +.3948ed a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3948f0 5b tcd TCD +.3948f1 28 plp PLP +.3948f2 68 pla PLA ; end setdp macro +.3948f3 c2 30 rep #$30 REP #$30 ; set A&X long +.3948f5 af 4a a0 38 lda $38a04a LDA @l DOS_DEV_NAMES ; Point to the first device name to check +.3948f9 85 28 sta $0348 STA DOS_TEMP +.3948fb af 4c a0 38 lda $38a04c LDA @l DOS_DEV_NAMES+2 +.3948ff 85 2a sta $034a STA DOS_TEMP+2 +.394901 a9 00 04 lda #$0400 LDA #<>DOS_PATH_BUFF ; Make DOS_STR2_PTR point to the path to check +.394904 85 48 sta $0368 STA DOS_STR2_PTR +.394906 a9 00 00 lda #$0000 LDA #`DOS_PATH_BUFF +.394909 85 4a sta $036a STA DOS_STR2_PTR+2 +.39490b a0 00 00 ldy #$0000 dev_loop LDY #DEVICE_DESC.DEVNAME ; Get the name of the current device into DOS_STR1_PTR +.39490e b7 28 lda [$0348],y LDA [DOS_TEMP],Y +.394910 85 44 sta $0364 STA DOS_STR1_PTR +.394912 c8 iny INY +.394913 c8 iny INY +.394914 b7 28 lda [$0348],y LDA [DOS_TEMP],Y +.394916 85 46 sta $0366 STA DOS_STR1_PTR+2 +.394918 e2 20 sep #$20 SEP #$20 ; set A short +.39491a a0 00 00 ldy #$0000 LDY #0 +.39491d b7 44 lda [$0364],y cmp_loop LDA [DOS_STR1_PTR],Y ; Get the Yth character of the device name +.39491f f0 24 beq $394945 BEQ found ; If it's NULL, we found a match +.394921 d7 48 cmp [$0368],y CMP [DOS_STR2_PTR],Y ; Compare it to the Yth character of the path +.394923 d0 03 bne $394928 BNE next_device ; If no match, try to load the next device +.394925 c8 iny INY ; Go to the next character +.394926 80 f5 bra $39491d BRA cmp_loop +.394928 next_device +.394928 c2 20 rep #$20 REP #$20 ; set A long +.39492a a0 05 00 ldy #$0005 LDY #DEVICE_DESC.NEXT ; DOS_TEMP := DOS_TEMP->NEXT +.39492d b7 28 lda [$0348],y LDA [DOS_TEMP],Y +.39492f 48 pha PHA +.394930 c8 iny INY +.394931 c8 iny INY +.394932 b7 28 lda [$0348],y LDA [DOS_TEMP],Y +.394934 85 2a sta $034a STA DOS_TEMP+2 +.394936 68 pla PLA +.394937 85 28 sta $0348 STA DOS_TEMP +.394939 a5 28 lda $0348 LDA DOS_TEMP ; Is DOS_TEMP = NULL? +.39493b d0 ce bne $39490b BNE dev_loop ; No: check this device +.39493d a5 2a lda $034a LDA DOS_TEMP+2 +.39493f d0 ca bne $39490b BNE dev_loop +.394941 28 plp done PLP ; Otherwise, return having not found a match +.394942 2b pld PLD +.394943 ab plb PLB +.394944 6b rtl RTL +.394945 22 56 49 39 jsl $394956 found JSL DOS_ADJUSTPATH ; Remove the device name from the buffer +.394949 e2 20 sep #$20 SEP #$20 ; set A short +.39494b a0 04 00 ldy #$0004 LDY #DEVICE_DESC.DEVNUMBER ; Set the BIOS device number from the found device +.39494e b7 28 lda [$0348],y LDA [DOS_TEMP],Y +.394950 8f 21 03 00 sta $000321 STA @l BIOS_DEV +.394954 80 eb bra $394941 BRA done +.394956 DOS_ADJUSTPATH +.394956 da phx PHX +.394957 5a phy PHY +.394958 8b phb PHB +.394959 0b phd PHD +.39495a 08 php PHP +.39495b 48 pha PHA ; begin setdbr macro +.39495c 08 php PHP +.39495d e2 20 sep #$20 SEP #$20 ; set A short +.39495f a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.394961 48 pha PHA +.394962 ab plb PLB +.394963 28 plp PLP +.394964 68 pla PLA ; end setdbr macro +.394965 48 pha PHA ; begin setdp macro +.394966 08 php PHP +.394967 c2 20 rep #$20 REP #$20 ; set A long +.394969 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39496c 5b tcd TCD +.39496d 28 plp PLP +.39496e 68 pla PLA ; end setdp macro +.39496f c2 30 rep #$30 REP #$30 ; set A&X long +.394971 84 4b sty $036b STY DOS_SCRATCH ; Save the index to later compute the size +.394973 98 tya TYA ; Compute the address of the first source byte +.394974 18 clc CLC +.394975 69 00 04 adc #$0400 ADC #<>DOS_PATH_BUFF +.394978 aa tax TAX +.394979 a9 00 04 lda #$0400 LDA #<>DOS_PATH_BUFF ; Compute the destination address for the source byte +.39497c a8 tay TAY +.39497d 38 sec SEC ; Compute the number of bytes to copy +.39497e a9 00 01 lda #$0100 LDA #256 +.394981 e5 4b sbc $036b SBC DOS_SCRATCH +.394983 54 00 00 mvn $00,$00 MVN #`DOS_PATH_BUFF, #`DOS_PATH_BUFF +.394986 28 plp PLP +.394987 2b pld PLD +.394988 ab plb PLB +.394989 7a ply PLY +.39498a fa plx PLX +.39498b 6b rtl RTL +.39498c DOS_PARSE_PATH +.39498c 8b phb PHB +.39498d 0b phd PHD +.39498e 08 php PHP +.39498f 48 pha PHA ; begin setdbr macro +.394990 08 php PHP +.394991 e2 20 sep #$20 SEP #$20 ; set A short +.394993 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.394995 48 pha PHA +.394996 ab plb PLB +.394997 28 plp PLP +.394998 68 pla PLA ; end setdbr macro +.394999 48 pha PHA ; begin setdp macro +.39499a 08 php PHP +.39499b c2 20 rep #$20 REP #$20 ; set A long +.39499d a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3949a0 5b tcd TCD +.3949a1 28 plp PLP +.3949a2 68 pla PLA ; end setdp macro +.3949a3 c2 10 rep #$10 REP #$10 ; set X long +.3949a5 e2 20 sep #$20 SEP #$20 ; set A short +.3949a7 a2 00 00 ldx #$0000 LDX #0 +.3949aa b5 e0 lda $0400,x upcase_loop LDA DOS_PATH_BUFF,X ; Get the character +.3949ac f0 1b beq $3949c9 BEQ parse_dev ; If it's NULL, the path is upper case, attempt to parse the device +.3949ae c9 20 cmp #$20 CMP #' ' ; Is a control character? +.3949b0 b0 05 bcs $3949b7 BGE check_case ; No: check the case +.3949b2 a9 07 lda #$07 LDA #DOS_ERR_BADPATH ; Yes: return a bad path error +.3949b4 82 64 00 brl $394a1b BRL ret_failure +.3949b7 c9 61 cmp #$61 check_case CMP #'a' ; Is the character lower case? +.3949b9 90 08 bcc $3949c3 BLT next_char +.3949bb c9 7b cmp #$7b CMP #'z'+1 +.3949bd b0 04 bcs $3949c3 BGE next_char +.3949bf 29 5f and #$5f AND #%01011111 ; Yes: Convert to uppercase +.3949c1 95 e0 sta $0400,x STA DOS_PATH_BUFF,X +.3949c3 e8 inx next_char INX ; Move to the next character +.3949c4 e0 00 01 cpx #$0100 CPX #$100 +.3949c7 d0 e1 bne $3949aa BNE upcase_loop +.3949c9 22 dc 48 39 jsl $3948dc parse_dev JSL DOS_PARSE_DEV ; Parse and extract a device specifier ":xxx:" +.3949cd a5 e0 lda $0400 LDA DOS_PATH_BUFF ; Check the first character of the path +.3949cf c9 3a cmp #$3a CMP #':' +.3949d1 d0 07 bne $3949da BNE clr_name ; If not colon, treat it as a file name +.3949d3 a0 01 00 ldy #$0001 LDY #1 ; Otherwise... +.3949d6 22 56 49 39 jsl $394956 JSL DOS_ADJUSTPATH ; For now, just remove the leading ":" +.3949da a0 00 00 ldy #$0000 clr_name LDY #0 ; Set the short name to blanks +.3949dd a9 20 lda #$20 LDA #' ' +.3949df 99 3a a0 sta $38a03a,y clr_loop STA DOS_SHORT_NAME,Y +.3949e2 c8 iny INY +.3949e3 c0 0b 00 cpy #$000b CPY #11 +.3949e6 d0 f7 bne $3949df BNE clr_loop +.3949e8 a2 00 00 ldx #$0000 LDX #0 +.3949eb a0 00 00 ldy #$0000 LDY #0 +.3949ee b5 e0 lda $0400,x cpy_name_loop LDA DOS_PATH_BUFF,X ; Get the character of the name +.3949f0 f0 20 beq $394a12 BEQ ret_success ; If NULL: we've finished parsing the path +.3949f2 c9 2e cmp #$2e CMP #'.' ; If it's a dot, we've finished the name part +.3949f4 f0 0a beq $394a00 BEQ cpy_ext ; And move to the extension +.3949f6 99 3a a0 sta $38a03a,y STA DOS_SHORT_NAME,Y ; Otherwise, store it to the name portion +.3949f9 e8 inx INX +.3949fa c8 iny INY ; Move to the next character +.3949fb c0 08 00 cpy #$0008 CPY #8 ; Have we processed 8? +.3949fe d0 ee bne $3949ee BNE cpy_name_loop ; No: process this one +.394a00 e8 inx cpy_ext INX ; Skip the dot +.394a01 a0 08 00 ldy #$0008 LDY #8 +.394a04 b5 e0 lda $0400,x cpy_ext_loop LDA DOS_PATH_BUFF,X ; Get the character of the extension +.394a06 f0 0a beq $394a12 BEQ ret_success ; If it's NULL, we've finished +.394a08 99 3a a0 sta $38a03a,y STA DOS_SHORT_NAME,Y ; Otherwise, copy it to the short name +.394a0b e8 inx INX +.394a0c c8 iny INY ; Move to the next character +.394a0d c0 0b 00 cpy #$000b CPY #11 ; Have we processed the three ext characters? +.394a10 d0 f2 bne $394a04 BNE cpy_ext_loop ; No: process this one +.394a12 ret_success .394a12 e2 20 sep #$20 SEP #$20 ; set A short -.394a14 a0 00 00 ldy #$0000 LDY #0 -.394a17 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y ; Check the directory entry -.394a19 d0 05 bne $394a20 BNE chk_unused ; If there's an entry, check to see if it's unused -.394a1b a9 09 lda #$09 LDA #DOS_ERR_NOTFOUND ; If end-of-directory, we couldn't find a match -.394a1d 82 35 00 brl $394a55 BRL ret_failure -.394a20 c9 e5 cmp #$e5 chk_unused CMP #DOS_DIR_ENT_UNUSED ; If it's unused... -.394a22 f0 26 beq $394a4a BEQ next_entry ; Go to the next entry -.394a24 a0 0b 00 ldy #$000b LDY #DIRENTRY.ATTRIBUTE ; Check the entry's attributes -.394a27 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y -.394a29 89 08 bit #$08 BIT #DOS_ATTR_VOLUME ; Is it a volume name? -.394a2b d0 1d bne $394a4a BNE next_entry ; Yes: skip it! -.394a2d 29 0f and #$0f AND #DOS_ATTR_LONGNAME -.394a2f c9 0f cmp #$0f CMP #DOS_ATTR_LONGNAME ; Is it a long name field? -.394a31 f0 17 beq $394a4a BEQ next_entry ; Yes: skip it! -.394a33 a2 00 00 ldx #$0000 LDX #0 -.394a36 a0 00 00 ldy #$0000 LDY #DIRENTRY.SHORTNAME -.394a39 b7 18 lda [$0338],y scan_cmp_loop LDA [DOS_DIR_PTR],Y ; Get the X'th character of the entry -.394a3b df 3a a0 38 cmp $38a03a,x CMP DOS_SHORT_NAME,X ; And compare to the X'th character of the name we want -.394a3f d0 09 bne $394a4a BNE next_entry ; If not equal: try the next entry -.394a41 c8 iny INY ; Advance to the next character -.394a42 e8 inx INX -.394a43 e0 0b 00 cpx #$000b CPX #11 ; Did we reach the end of the names? -.394a46 f0 16 beq $394a5e BEQ match ; Yes: we have a match! -.394a48 80 ef bra $394a39 BRA scan_cmp_loop ; No: keep checking -.394a4a 22 a3 42 39 jsl $3942a3 next_entry JSL DOS_DIRNEXT ; Try to get the next directory entry -.394a4e 90 05 bcc $394a55 BCC ret_failure ; If we're at the end of the directory, return a failure. -.394a50 82 bf ff brl $394a12 BRL scan_loop ; If found: keep scanning -.394a53 a9 08 lda #$08 bad_dir LDA #DOS_ERR_NODIR ; Otherwise: fail with a NODIR error (maybe something else is better) -.394a55 ret_failure -.394a55 e2 20 sep #$20 SEP #$20 ; set A short -.394a57 85 0e sta $032e STA DOS_STATUS -.394a59 28 plp PLP -.394a5a 2b pld PLD -.394a5b ab plb PLB -.394a5c 18 clc CLC -.394a5d 6b rtl RTL -.394a5e match -.394a5e c2 20 rep #$20 REP #$20 ; set A long -.394a60 a0 1a 00 ldy #$001a LDY #DIRENTRY.CLUSTER_L ; Copy the cluster number from the directory entry -.394a63 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y -.394a65 85 10 sta $0330 STA DOS_CLUS_ID ; To DOS_CLUS_ID -.394a67 a0 14 00 ldy #$0014 LDY #DIRENTRY.CLUSTER_H -.394a6a b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y -.394a6c 85 12 sta $0332 STA DOS_CLUS_ID+2 -.394a6e ret_success -.394a6e e2 20 sep #$20 SEP #$20 ; set A short -.394a70 64 0e stz $032e STZ DOS_STATUS -.394a72 28 plp PLP -.394a73 2b pld PLD -.394a74 ab plb PLB -.394a75 38 sec SEC -.394a76 6b rtl RTL -.394a77 DOS_READFILE -.394a77 8b phb PHB -.394a78 0b phd PHD -.394a79 08 php PHP -.394a7a 48 pha PHA ; begin setdbr macro -.394a7b 08 php PHP -.394a7c e2 20 sep #$20 SEP #$20 ; set A short -.394a7e a9 00 lda #$00 LDA #0 -.394a80 48 pha PHA -.394a81 ab plb PLB -.394a82 28 plp PLP -.394a83 68 pla PLA ; end setdbr macro -.394a84 48 pha PHA ; begin setdp macro -.394a85 08 php PHP -.394a86 c2 20 rep #$20 REP #$20 ; set A long -.394a88 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394a8b 5b tcd TCD -.394a8c 28 plp PLP -.394a8d 68 pla PLA ; end setdp macro -.394a8e c2 30 rep #$30 REP #$30 ; set A&X long -.394a90 a5 1e lda $033e LDA DOS_BUFF_PTR+2 -.394a92 48 pha PHA -.394a93 a5 1c lda $033c LDA DOS_BUFF_PTR -.394a95 48 pha PHA -.394a96 22 d2 49 39 jsl $3949d2 JSL DOS_FINDFILE ; Attempt to find the file's directory entry -.394a9a 68 pla PLA -.394a9b 85 1c sta $033c STA DOS_BUFF_PTR -.394a9d 68 pla PLA -.394a9e 85 1e sta $033e STA DOS_BUFF_PTR+2 -.394aa0 90 0f bcc $394ab1 BCC pass_failure ; If found: try to load the cluster -.394aa2 22 ec 47 39 jsl $3947ec load_cluster JSL DOS_GETCLUSTER ; Get the first block of the cluster -.394aa6 90 09 bcc $394ab1 BCC pass_failure ; If there's an error... pass it up the chain -.394aa8 ret_success -.394aa8 e2 20 sep #$20 SEP #$20 ; set A short -.394aaa 64 0e stz $032e STZ DOS_STATUS -.394aac 28 plp PLP -.394aad 2b pld PLD -.394aae ab plb PLB -.394aaf 38 sec SEC -.394ab0 6b rtl RTL -.394ab1 28 plp pass_failure PLP ; Otherwise: pass any error up the chain -.394ab2 2b pld PLD -.394ab3 ab plb PLB -.394ab4 18 clc CLC -.394ab5 6b rtl RTL -.394ab6 ENTRYFORCLUS12 -.394ab6 8b phb PHB -.394ab7 0b phd PHD -.394ab8 08 php PHP -.394ab9 48 pha PHA ; begin setdbr macro -.394aba 08 php PHP -.394abb e2 20 sep #$20 SEP #$20 ; set A short -.394abd a9 00 lda #$00 LDA #0 -.394abf 48 pha PHA -.394ac0 ab plb PLB -.394ac1 28 plp PLP -.394ac2 68 pla PLA ; end setdbr macro -.394ac3 48 pha PHA ; begin setdp macro -.394ac4 08 php PHP -.394ac5 c2 20 rep #$20 REP #$20 ; set A long -.394ac7 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394aca 5b tcd TCD -.394acb 28 plp PLP -.394acc 68 pla PLA ; end setdp macro -.394acd c2 30 rep #$30 REP #$30 ; set A&X long -.394acf a5 10 lda $0330 LDA DOS_CLUS_ID ; DOS_TEMP := DOS_CLUS_ID * 3 -.394ad1 0a asl a ASL A -.394ad2 85 28 sta $0348 STA DOS_TEMP -.394ad4 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.394ad6 2a rol a ROL A -.394ad7 85 2a sta $034a STA DOS_TEMP+2 -.394ad9 18 clc CLC -.394ada a5 10 lda $0330 LDA DOS_CLUS_ID -.394adc 65 28 adc $0348 ADC DOS_TEMP -.394ade 85 28 sta $0348 STA DOS_TEMP -.394ae0 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.394ae2 65 2a adc $034a ADC DOS_TEMP+2 -.394ae4 85 2a sta $034a STA DOS_TEMP+2 -.394ae6 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := (DOS_CLUS_ID * 3) / 2 -.394ae8 66 28 ror $0348 ROR DOS_TEMP ; DOS_TEMP is now the offset to the cluster's entry in the FAT -.394aea a5 28 lda $0348 LDA DOS_TEMP ; X should be the offset within the FAT buffer -.394aec 29 ff 03 and #$03ff AND #$003FF -.394aef aa tax TAX -.394af0 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394af2 66 28 ror $0348 ROR DOS_TEMP -.394af4 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394af6 66 28 ror $0348 ROR DOS_TEMP -.394af8 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394afa 66 28 ror $0348 ROR DOS_TEMP -.394afc 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394afe 66 28 ror $0348 ROR DOS_TEMP -.394b00 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394b02 66 28 ror $0348 ROR DOS_TEMP -.394b04 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394b06 66 28 ror $0348 ROR DOS_TEMP -.394b08 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394b0a 66 28 ror $0348 ROR DOS_TEMP -.394b0c 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394b0e 66 28 ror $0348 ROR DOS_TEMP -.394b10 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 -.394b12 66 28 ror $0348 ROR DOS_TEMP -.394b14 18 clc CLC ; DOS_FAT_LBA should be the LBA of the first FAT sector we need -.394b15 af 14 a0 38 lda $38a014 LDA FAT_BEGIN_LBA -.394b19 65 28 adc $0348 ADC DOS_TEMP -.394b1b 85 24 sta $0344 STA DOS_FAT_LBA -.394b1d af 16 a0 38 lda $38a016 LDA FAT_BEGIN_LBA+2 -.394b21 65 2a adc $034a ADC DOS_TEMP+2 -.394b23 85 26 sta $0346 STA DOS_FAT_LBA+2 -.394b25 28 plp PLP -.394b26 2b pld PLD -.394b27 ab plb PLB -.394b28 6b rtl RTL -.394b29 FATFORCLUSTER12 -.394b29 8b phb PHB -.394b2a 0b phd PHD -.394b2b 08 php PHP -.394b2c 48 pha PHA ; begin setdbr macro -.394b2d 08 php PHP -.394b2e e2 20 sep #$20 SEP #$20 ; set A short -.394b30 a9 00 lda #$00 LDA #0 -.394b32 48 pha PHA -.394b33 ab plb PLB -.394b34 28 plp PLP -.394b35 68 pla PLA ; end setdbr macro -.394b36 48 pha PHA ; begin setdp macro -.394b37 08 php PHP -.394b38 c2 20 rep #$20 REP #$20 ; set A long -.394b3a a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394b3d 5b tcd TCD -.394b3e 28 plp PLP -.394b3f 68 pla PLA ; end setdp macro -.394b40 c2 30 rep #$30 REP #$30 ; set A&X long -.394b42 a2 00 00 ldx #$0000 LDX #0 -.394b45 a9 5a 5a lda #$5a5a LDA #$5A5A -.394b48 8f 00 a5 38 sta $38a500 clr_loop STA DOS_FAT_SECTORS -.394b4c e8 inx INX -.394b4d e8 inx INX -.394b4e e0 00 04 cpx #$0400 CPX #1024 -.394b51 d0 f5 bne $394b48 BNE clr_loop -.394b53 22 b6 4a 39 jsl $394ab6 JSL ENTRYFORCLUS12 ; Calculate the LBA -.394b57 a5 24 lda $0344 LDA DOS_FAT_LBA ; Point to the desired sector in the FAT -.394b59 85 02 sta $0322 STA BIOS_LBA -.394b5b a5 26 lda $0346 LDA DOS_FAT_LBA+2 -.394b5d 85 04 sta $0324 STA BIOS_LBA+2 -.394b5f a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS ; Point to the first 512 bytes of the FAT buffer -.394b62 85 06 sta $0326 STA BIOS_BUFF_PTR -.394b64 a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS -.394b67 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394b69 22 44 10 00 jsl $001044 JSL GETBLOCK ; Attempt to load the first FAT sector -.394b6d 90 17 bcc $394b86 BCC error -.394b6f e6 02 inc $0322 INC BIOS_LBA ; Move to the next sector -.394b71 a9 00 a7 lda #$a700 LDA #<>DOS_FAT_SECTORS+512 ; And point to the second 512 bytes of teh FAT buffer -.394b74 85 06 sta $0326 STA BIOS_BUFF_PTR -.394b76 a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS -.394b79 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394b7b 22 44 10 00 jsl $001044 JSL GETBLOCK ; Attempt to load the first FAT sector -.394b7f 90 05 bcc $394b86 BCC error -.394b81 28 plp PLP -.394b82 2b pld PLD -.394b83 ab plb PLB -.394b84 38 sec SEC -.394b85 6b rtl RTL -.394b86 error -.394b86 e2 20 sep #$20 SEP #$20 ; set A short -.394b88 a9 06 lda #$06 LDA #DOS_ERR_FAT -.394b8a 85 0e sta $032e STA DOS_STATUS -.394b8c 28 plp PLP -.394b8d 2b pld PLD -.394b8e ab plb PLB -.394b8f 18 clc CLC -.394b90 6b rtl RTL -.394b91 FATFORCLUSTER32 -.394b91 8b phb PHB -.394b92 0b phd PHD -.394b93 48 pha PHA ; begin setdbr macro -.394b94 08 php PHP -.394b95 e2 20 sep #$20 SEP #$20 ; set A short -.394b97 a9 00 lda #$00 LDA #0 -.394b99 48 pha PHA -.394b9a ab plb PLB -.394b9b 28 plp PLP -.394b9c 68 pla PLA ; end setdbr macro -.394b9d 48 pha PHA ; begin setdp macro -.394b9e 08 php PHP -.394b9f c2 20 rep #$20 REP #$20 ; set A long -.394ba1 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394ba4 5b tcd TCD -.394ba5 28 plp PLP -.394ba6 68 pla PLA ; end setdp macro -.394ba7 c2 30 rep #$30 REP #$30 ; set A&X long -.394ba9 a5 10 lda $0330 LDA DOS_CLUS_ID -.394bab 85 24 sta $0344 STA DOS_FAT_LBA -.394bad a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.394baf 85 26 sta $0346 STA DOS_FAT_LBA+2 -.394bb1 a2 07 00 ldx #$0007 LDX #7 -.394bb4 46 26 lsr $0346 div_loop LSR DOS_FAT_LBA+2 -.394bb6 66 24 ror $0344 ROR DOS_FAT_LBA -.394bb8 ca dex DEX -.394bb9 d0 f9 bne $394bb4 BNE div_loop -.394bbb 18 clc CLC -.394bbc a5 24 lda $0344 LDA DOS_FAT_LBA -.394bbe 6f 14 a0 38 adc $38a014 ADC FAT_BEGIN_LBA -.394bc2 85 24 sta $0344 STA DOS_FAT_LBA -.394bc4 a5 26 lda $0346 LDA DOS_FAT_LBA+2 -.394bc6 6f 16 a0 38 adc $38a016 ADC FAT_BEGIN_LBA+2 -.394bca 85 26 sta $0346 STA DOS_FAT_LBA+2 -.394bcc a5 24 lda $0344 LDA DOS_FAT_LBA ; We want to load the FAT sector -.394bce 85 02 sta $0322 STA BIOS_LBA -.394bd0 a5 26 lda $0346 LDA DOS_FAT_LBA+2 -.394bd2 85 04 sta $0324 STA BIOS_LBA+2 -.394bd4 a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS ; We want to load the FAT sector in DOS_FAT_SECTORS -.394bd7 85 06 sta $0326 STA BIOS_BUFF_PTR -.394bd9 a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS -.394bdc 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394bde 22 44 10 00 jsl $001044 JSL GETBLOCK ; Load the FAT entry -.394be2 b0 06 bcs $394bea BCS find_entry -.394be4 e2 20 sep #$20 SEP #$20 ; set A short -.394be6 a9 06 lda #$06 LDA #DOS_ERR_FAT -.394be8 80 0e bra $394bf8 BRA ret_failure -.394bea find_entry -.394bea c2 20 rep #$20 REP #$20 ; set A long -.394bec a5 10 lda $0330 LDA DOS_CLUS_ID -.394bee 0a asl a ASL A -.394bef 0a asl a ASL A ; * 4 -.394bf0 29 ff 01 and #$01ff AND #$1FF ; DOS_CLUS_ID MOD 512 -.394bf3 aa tax TAX ; X should be the offset within the sector -.394bf4 2b pld ret_success PLD -.394bf5 ab plb PLB -.394bf6 38 sec SEC ; return success -.394bf7 6b rtl RTL -.394bf8 2b pld ret_failure PLD -.394bf9 ab plb PLB -.394bfa 18 clc CLC ; Return failure -.394bfb 6b rtl RTL -.394bfc NEXTCLUSTER -.394bfc 08 php PHP -.394bfd e2 20 sep #$20 SEP #$20 ; set A short -.394bff af 01 a0 38 lda $38a001 LDA @l FILE_SYSTEM ; Get the file system code -.394c03 c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? -.394c05 d0 08 bne $394c0f BNE fat32 ; No: assume it's FAT32 -.394c07 22 1d 4c 39 jsl $394c1d fat12 JSL NEXTCLUSTER12 ; Lookup the next cluster from FAT12 -.394c0b 90 0d bcc $394c1a BCC pass_failure ; If there was an error, pass it up the chain -.394c0d 80 06 bra $394c15 BRA ret_success -.394c0f 22 85 4c 39 jsl $394c85 fat32 JSL NEXTCLUSTER32 ; Lookup the next cluster from FAT32 -.394c13 90 05 bcc $394c1a BCC pass_failure ; If there was an error, pass it up the chain -.394c15 64 0e stz $032e ret_success STZ DOS_STATUS -.394c17 28 plp PLP -.394c18 38 sec SEC -.394c19 6b rtl RTL -.394c1a 28 plp pass_failure PLP -.394c1b 18 clc CLC -.394c1c 6b rtl RTL -.394c1d NEXTCLUSTER12 -.394c1d 8b phb PHB -.394c1e 0b phd PHD -.394c1f 08 php PHP -.394c20 48 pha PHA ; begin setdbr macro -.394c21 08 php PHP -.394c22 e2 20 sep #$20 SEP #$20 ; set A short -.394c24 a9 00 lda #$00 LDA #0 -.394c26 48 pha PHA -.394c27 ab plb PLB -.394c28 28 plp PLP -.394c29 68 pla PLA ; end setdbr macro -.394c2a 48 pha PHA ; begin setdp macro -.394c2b 08 php PHP -.394c2c c2 20 rep #$20 REP #$20 ; set A long -.394c2e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394c31 5b tcd TCD -.394c32 28 plp PLP -.394c33 68 pla PLA ; end setdp macro -.394c34 c2 30 rep #$30 REP #$30 ; set A&X long -.394c36 22 29 4b 39 jsl $394b29 JSL FATFORCLUSTER12 ; Attempt to load the FAT entries -.394c3a b0 03 bcs $394c3f BCS chk_clus_id -.394c3c 82 41 00 brl $394c80 BRL pass_failure -.394c3f a5 10 lda $0330 chk_clus_id LDA DOS_CLUS_ID ; Check the cluster ID... -.394c41 89 01 00 bit #$0001 BIT #1 ; Is it odd? -.394c44 d0 0d bne $394c53 BNE is_odd ; Yes: calculate the next cluster for odd -.394c46 is_even -.394c46 c2 20 rep #$20 REP #$20 ; set A long -.394c48 bf 00 a5 38 lda $38a500,x LDA DOS_FAT_SECTORS,X ; DOS_CLUS_ID := DOS_FAT_SECTORS[X] & $0FFF -.394c4c 29 ff 0f and #$0fff AND #$0FFF -.394c4f 85 28 sta $0348 STA DOS_TEMP -.394c51 80 0c bra $394c5f BRA check_id -.394c53 is_odd -.394c53 c2 20 rep #$20 REP #$20 ; set A long -.394c55 bf 00 a5 38 lda $38a500,x LDA DOS_FAT_SECTORS,X ; DOS_CLUS_ID := DOS_FAT_SECTORS[X] >> 4 -.394c59 4a lsr a LSR A -.394c5a 4a lsr a LSR A -.394c5b 4a lsr a LSR A -.394c5c 4a lsr a LSR A -.394c5d 85 28 sta $0348 STA DOS_TEMP -.394c5f check_id -.394c5f c2 20 rep #$20 REP #$20 ; set A long -.394c61 a5 28 lda $0348 LDA DOS_TEMP ; Check the new cluster ID we got -.394c63 29 f0 0f and #$0ff0 AND #$0FF0 ; Is it in the range $0FF0 -- $0FFF? -.394c66 c9 f0 0f cmp #$0ff0 CMP #$0FF0 -.394c69 f0 0f beq $394c7a BEQ no_more ; Yes: return that we've reached the end of the chain -.394c6b a5 28 lda $0348 LDA DOS_TEMP ; Restore the "current" cluster ID -.394c6d 85 10 sta $0330 STA DOS_CLUS_ID -.394c6f 64 12 stz $0332 STZ DOS_CLUS_ID+2 -.394c71 ret_success -.394c71 e2 20 sep #$20 SEP #$20 ; set A short -.394c73 64 0e stz $032e STZ DOS_STATUS -.394c75 28 plp PLP -.394c76 2b pld PLD -.394c77 ab plb PLB -.394c78 38 sec SEC -.394c79 6b rtl RTL -.394c7a no_more -.394c7a e2 20 sep #$20 SEP #$20 ; set A short -.394c7c a9 0a lda #$0a LDA #DOS_ERR_NOCLUSTER -.394c7e 85 0e sta $032e STA DOS_STATUS -.394c80 28 plp pass_failure PLP -.394c81 2b pld PLD -.394c82 ab plb PLB -.394c83 18 clc CLC -.394c84 6b rtl RTL -.394c85 NEXTCLUSTER32 -.394c85 8b phb PHB -.394c86 0b phd PHD -.394c87 08 php PHP -.394c88 48 pha PHA ; begin setdbr macro -.394c89 08 php PHP -.394c8a e2 20 sep #$20 SEP #$20 ; set A short -.394c8c a9 00 lda #$00 LDA #0 -.394c8e 48 pha PHA -.394c8f ab plb PLB -.394c90 28 plp PLP -.394c91 68 pla PLA ; end setdbr macro -.394c92 48 pha PHA ; begin setdp macro -.394c93 08 php PHP -.394c94 c2 20 rep #$20 REP #$20 ; set A long -.394c96 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394c99 5b tcd TCD -.394c9a 28 plp PLP -.394c9b 68 pla PLA ; end setdp macro -.394c9c c2 30 rep #$30 REP #$30 ; set A&X long -.394c9e 22 91 4b 39 jsl $394b91 JSL FATFORCLUSTER32 ; Get the FAT entry for this cluster -.394ca2 90 53 bcc $394cf7 BCC ret_failure ; If it did not work, return the error -.394ca4 e2 20 sep #$20 SEP #$20 ; set A short -.394ca6 bf 00 a5 38 lda $38a500,x LDA @l DOS_FAT_SECTORS,X ; Get the entry and copy it to DOS_TEMP -.394caa 85 28 sta $0348 STA DOS_TEMP -.394cac bf 01 a5 38 lda $38a501,x LDA @l DOS_FAT_SECTORS+1,X -.394cb0 85 29 sta $0349 STA DOS_TEMP+1 -.394cb2 bf 02 a5 38 lda $38a502,x LDA @l DOS_FAT_SECTORS+2,X -.394cb6 85 2a sta $034a STA DOS_TEMP+2 -.394cb8 bf 03 a5 38 lda $38a503,x LDA @l DOS_FAT_SECTORS+3,X -.394cbc 85 2b sta $034b STA DOS_TEMP+3 -.394cbe a5 28 lda $0348 xxxx LDA DOS_TEMP ; Is DOS_TEMP = $FFFFFFFF? -.394cc0 c9 ff cmp #$ff CMP #$FF -.394cc2 d0 18 bne $394cdc BNE found_next -.394cc4 a5 29 lda $0349 LDA DOS_TEMP+1 -.394cc6 c9 ff cmp #$ff CMP #$FF -.394cc8 d0 12 bne $394cdc BNE found_next -.394cca a5 2a lda $034a LDA DOS_TEMP+2 -.394ccc c9 ff cmp #$ff CMP #$FF -.394cce d0 0c bne $394cdc BNE found_next -.394cd0 a5 2b lda $034b LDA DOS_TEMP+3 -.394cd2 c9 0f cmp #$0f CMP #$0F -.394cd4 d0 06 bne $394cdc BNE found_next ; No: return this cluster as the next -.394cd6 e2 20 sep #$20 SEP #$20 ; set A short -.394cd8 a9 0a lda #$0a LDA #DOS_ERR_NOCLUSTER ; Yes: return that there are no more clusters -.394cda 80 1b bra $394cf7 BRA ret_failure -.394cdc found_next +.394a14 64 0e stz $032e STZ DOS_STATUS +.394a16 28 plp PLP +.394a17 2b pld PLD +.394a18 ab plb PLB +.394a19 38 sec SEC +.394a1a 6b rtl RTL +.394a1b ret_failure +.394a1b e2 20 sep #$20 SEP #$20 ; set A short +.394a1d 85 0e sta $032e STA DOS_STATUS +.394a1f 28 plp PLP +.394a20 2b pld PLD +.394a21 ab plb PLB +.394a22 18 clc CLC +.394a23 6b rtl RTL +.394a24 DOS_FINDFILE +.394a24 8b phb PHB +.394a25 0b phd PHD +.394a26 08 php PHP +.394a27 48 pha PHA ; begin setdbr macro +.394a28 08 php PHP +.394a29 e2 20 sep #$20 SEP #$20 ; set A short +.394a2b a9 00 lda #$00 LDA #0 +.394a2d 48 pha PHA +.394a2e ab plb PLB +.394a2f 28 plp PLP +.394a30 68 pla PLA ; end setdbr macro +.394a31 48 pha PHA ; begin setdp macro +.394a32 08 php PHP +.394a33 c2 20 rep #$20 REP #$20 ; set A long +.394a35 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394a38 5b tcd TCD +.394a39 28 plp PLP +.394a3a 68 pla PLA ; end setdp macro +.394a3b c2 30 rep #$30 REP #$30 ; set A&X long +.394a3d 22 8c 49 39 jsl $39498c JSL DOS_PARSE_PATH ; Break out the path into its components +.394a41 b0 05 bcs $394a48 BCS mount ; If success: try to open the directory +.394a43 28 plp pass_failure PLP ; If failure, just pass the failure back up +.394a44 2b pld PLD +.394a45 ab plb PLB +.394a46 18 clc CLC +.394a47 6b rtl RTL +.394a48 22 a6 45 39 jsl $3945a6 mount JSL DOS_MOUNT +.394a4c b0 03 bcs $394a51 BCS get_directory +.394a4e 82 56 00 brl $394aa7 BRL ret_failure +.394a51 get_directory +.394a51 c2 20 rep #$20 REP #$20 ; set A long +.394a53 22 5b 42 39 jsl $39425b JSL DOS_DIROPEN ; Get the directory +.394a57 b0 07 bcs $394a60 BCS scan_entries ; If success: start scanning the directory entries +.394a59 e2 20 sep #$20 SEP #$20 ; set A short +.394a5b a9 08 lda #$08 LDA #DOS_ERR_NODIR ; Otherwise: return a no directory error +.394a5d 82 47 00 brl $394aa7 BRL ret_failure +.394a60 22 da 42 39 jsl $3942da scan_entries JSL DOS_DIRFIRST ; Move the DIR pointer to the beginning of the sector +.394a64 scan_loop +.394a64 e2 20 sep #$20 SEP #$20 ; set A short +.394a66 a0 00 00 ldy #$0000 LDY #0 +.394a69 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y ; Check the directory entry +.394a6b d0 05 bne $394a72 BNE chk_unused ; If there's an entry, check to see if it's unused +.394a6d a9 09 lda #$09 LDA #DOS_ERR_NOTFOUND ; If end-of-directory, we couldn't find a match +.394a6f 82 35 00 brl $394aa7 BRL ret_failure +.394a72 c9 e5 cmp #$e5 chk_unused CMP #DOS_DIR_ENT_UNUSED ; If it's unused... +.394a74 f0 26 beq $394a9c BEQ next_entry ; Go to the next entry +.394a76 a0 0b 00 ldy #$000b LDY #DIRENTRY.ATTRIBUTE ; Check the entry's attributes +.394a79 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y +.394a7b 89 08 bit #$08 BIT #DOS_ATTR_VOLUME ; Is it a volume name? +.394a7d d0 1d bne $394a9c BNE next_entry ; Yes: skip it! +.394a7f 29 0f and #$0f AND #DOS_ATTR_LONGNAME +.394a81 c9 0f cmp #$0f CMP #DOS_ATTR_LONGNAME ; Is it a long name field? +.394a83 f0 17 beq $394a9c BEQ next_entry ; Yes: skip it! +.394a85 a2 00 00 ldx #$0000 LDX #0 +.394a88 a0 00 00 ldy #$0000 LDY #DIRENTRY.SHORTNAME +.394a8b b7 18 lda [$0338],y scan_cmp_loop LDA [DOS_DIR_PTR],Y ; Get the X'th character of the entry +.394a8d df 3a a0 38 cmp $38a03a,x CMP DOS_SHORT_NAME,X ; And compare to the X'th character of the name we want +.394a91 d0 09 bne $394a9c BNE next_entry ; If not equal: try the next entry +.394a93 c8 iny INY ; Advance to the next character +.394a94 e8 inx INX +.394a95 e0 0b 00 cpx #$000b CPX #11 ; Did we reach the end of the names? +.394a98 f0 16 beq $394ab0 BEQ match ; Yes: we have a match! +.394a9a 80 ef bra $394a8b BRA scan_cmp_loop ; No: keep checking +.394a9c 22 f5 42 39 jsl $3942f5 next_entry JSL DOS_DIRNEXT ; Try to get the next directory entry +.394aa0 90 05 bcc $394aa7 BCC ret_failure ; If we're at the end of the directory, return a failure. +.394aa2 82 bf ff brl $394a64 BRL scan_loop ; If found: keep scanning +.394aa5 a9 08 lda #$08 bad_dir LDA #DOS_ERR_NODIR ; Otherwise: fail with a NODIR error (maybe something else is better) +.394aa7 ret_failure +.394aa7 e2 20 sep #$20 SEP #$20 ; set A short +.394aa9 85 0e sta $032e STA DOS_STATUS +.394aab 28 plp PLP +.394aac 2b pld PLD +.394aad ab plb PLB +.394aae 18 clc CLC +.394aaf 6b rtl RTL +.394ab0 match +.394ab0 c2 20 rep #$20 REP #$20 ; set A long +.394ab2 a0 1a 00 ldy #$001a LDY #DIRENTRY.CLUSTER_L ; Copy the cluster number from the directory entry +.394ab5 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y +.394ab7 85 10 sta $0330 STA DOS_CLUS_ID ; To DOS_CLUS_ID +.394ab9 a0 14 00 ldy #$0014 LDY #DIRENTRY.CLUSTER_H +.394abc b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y +.394abe 85 12 sta $0332 STA DOS_CLUS_ID+2 +.394ac0 ret_success +.394ac0 e2 20 sep #$20 SEP #$20 ; set A short +.394ac2 64 0e stz $032e STZ DOS_STATUS +.394ac4 28 plp PLP +.394ac5 2b pld PLD +.394ac6 ab plb PLB +.394ac7 38 sec SEC +.394ac8 6b rtl RTL +.394ac9 DOS_READFILE +.394ac9 8b phb PHB +.394aca 0b phd PHD +.394acb 08 php PHP +.394acc 48 pha PHA ; begin setdbr macro +.394acd 08 php PHP +.394ace e2 20 sep #$20 SEP #$20 ; set A short +.394ad0 a9 00 lda #$00 LDA #0 +.394ad2 48 pha PHA +.394ad3 ab plb PLB +.394ad4 28 plp PLP +.394ad5 68 pla PLA ; end setdbr macro +.394ad6 48 pha PHA ; begin setdp macro +.394ad7 08 php PHP +.394ad8 c2 20 rep #$20 REP #$20 ; set A long +.394ada a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394add 5b tcd TCD +.394ade 28 plp PLP +.394adf 68 pla PLA ; end setdp macro +.394ae0 c2 30 rep #$30 REP #$30 ; set A&X long +.394ae2 a5 1e lda $033e LDA DOS_BUFF_PTR+2 +.394ae4 48 pha PHA +.394ae5 a5 1c lda $033c LDA DOS_BUFF_PTR +.394ae7 48 pha PHA +.394ae8 22 24 4a 39 jsl $394a24 JSL DOS_FINDFILE ; Attempt to find the file's directory entry +.394aec 68 pla PLA +.394aed 85 1c sta $033c STA DOS_BUFF_PTR +.394aef 68 pla PLA +.394af0 85 1e sta $033e STA DOS_BUFF_PTR+2 +.394af2 90 0f bcc $394b03 BCC pass_failure ; If found: try to load the cluster +.394af4 22 3e 48 39 jsl $39483e load_cluster JSL DOS_GETCLUSTER ; Get the first block of the cluster +.394af8 90 09 bcc $394b03 BCC pass_failure ; If there's an error... pass it up the chain +.394afa ret_success +.394afa e2 20 sep #$20 SEP #$20 ; set A short +.394afc 64 0e stz $032e STZ DOS_STATUS +.394afe 28 plp PLP +.394aff 2b pld PLD +.394b00 ab plb PLB +.394b01 38 sec SEC +.394b02 6b rtl RTL +.394b03 28 plp pass_failure PLP ; Otherwise: pass any error up the chain +.394b04 2b pld PLD +.394b05 ab plb PLB +.394b06 18 clc CLC +.394b07 6b rtl RTL +.394b08 ENTRYFORCLUS12 +.394b08 8b phb PHB +.394b09 0b phd PHD +.394b0a 08 php PHP +.394b0b 48 pha PHA ; begin setdbr macro +.394b0c 08 php PHP +.394b0d e2 20 sep #$20 SEP #$20 ; set A short +.394b0f a9 00 lda #$00 LDA #0 +.394b11 48 pha PHA +.394b12 ab plb PLB +.394b13 28 plp PLP +.394b14 68 pla PLA ; end setdbr macro +.394b15 48 pha PHA ; begin setdp macro +.394b16 08 php PHP +.394b17 c2 20 rep #$20 REP #$20 ; set A long +.394b19 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394b1c 5b tcd TCD +.394b1d 28 plp PLP +.394b1e 68 pla PLA ; end setdp macro +.394b1f c2 30 rep #$30 REP #$30 ; set A&X long +.394b21 a5 10 lda $0330 LDA DOS_CLUS_ID ; DOS_TEMP := DOS_CLUS_ID * 3 +.394b23 0a asl a ASL A +.394b24 85 28 sta $0348 STA DOS_TEMP +.394b26 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.394b28 2a rol a ROL A +.394b29 85 2a sta $034a STA DOS_TEMP+2 +.394b2b 18 clc CLC +.394b2c a5 10 lda $0330 LDA DOS_CLUS_ID +.394b2e 65 28 adc $0348 ADC DOS_TEMP +.394b30 85 28 sta $0348 STA DOS_TEMP +.394b32 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.394b34 65 2a adc $034a ADC DOS_TEMP+2 +.394b36 85 2a sta $034a STA DOS_TEMP+2 +.394b38 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := (DOS_CLUS_ID * 3) / 2 +.394b3a 66 28 ror $0348 ROR DOS_TEMP ; DOS_TEMP is now the offset to the cluster's entry in the FAT +.394b3c a5 28 lda $0348 LDA DOS_TEMP ; X should be the offset within the FAT buffer +.394b3e 29 ff 03 and #$03ff AND #$003FF +.394b41 aa tax TAX +.394b42 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b44 66 28 ror $0348 ROR DOS_TEMP +.394b46 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b48 66 28 ror $0348 ROR DOS_TEMP +.394b4a 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b4c 66 28 ror $0348 ROR DOS_TEMP +.394b4e 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b50 66 28 ror $0348 ROR DOS_TEMP +.394b52 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b54 66 28 ror $0348 ROR DOS_TEMP +.394b56 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b58 66 28 ror $0348 ROR DOS_TEMP +.394b5a 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b5c 66 28 ror $0348 ROR DOS_TEMP +.394b5e 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b60 66 28 ror $0348 ROR DOS_TEMP +.394b62 46 2a lsr $034a LSR DOS_TEMP+2 ; DOS_TEMP := DOS_TEMP / 512 +.394b64 66 28 ror $0348 ROR DOS_TEMP +.394b66 18 clc CLC ; DOS_FAT_LBA should be the LBA of the first FAT sector we need +.394b67 af 14 a0 38 lda $38a014 LDA FAT_BEGIN_LBA +.394b6b 65 28 adc $0348 ADC DOS_TEMP +.394b6d 85 24 sta $0344 STA DOS_FAT_LBA +.394b6f af 16 a0 38 lda $38a016 LDA FAT_BEGIN_LBA+2 +.394b73 65 2a adc $034a ADC DOS_TEMP+2 +.394b75 85 26 sta $0346 STA DOS_FAT_LBA+2 +.394b77 28 plp PLP +.394b78 2b pld PLD +.394b79 ab plb PLB +.394b7a 6b rtl RTL +.394b7b FATFORCLUSTER12 +.394b7b 8b phb PHB +.394b7c 0b phd PHD +.394b7d 08 php PHP +.394b7e 48 pha PHA ; begin setdbr macro +.394b7f 08 php PHP +.394b80 e2 20 sep #$20 SEP #$20 ; set A short +.394b82 a9 00 lda #$00 LDA #0 +.394b84 48 pha PHA +.394b85 ab plb PLB +.394b86 28 plp PLP +.394b87 68 pla PLA ; end setdbr macro +.394b88 48 pha PHA ; begin setdp macro +.394b89 08 php PHP +.394b8a c2 20 rep #$20 REP #$20 ; set A long +.394b8c a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394b8f 5b tcd TCD +.394b90 28 plp PLP +.394b91 68 pla PLA ; end setdp macro +.394b92 c2 30 rep #$30 REP #$30 ; set A&X long +.394b94 a2 00 00 ldx #$0000 LDX #0 +.394b97 a9 5a 5a lda #$5a5a LDA #$5A5A +.394b9a 8f 00 a5 38 sta $38a500 clr_loop STA DOS_FAT_SECTORS +.394b9e e8 inx INX +.394b9f e8 inx INX +.394ba0 e0 00 04 cpx #$0400 CPX #1024 +.394ba3 d0 f5 bne $394b9a BNE clr_loop +.394ba5 22 08 4b 39 jsl $394b08 JSL ENTRYFORCLUS12 ; Calculate the LBA +.394ba9 a5 24 lda $0344 LDA DOS_FAT_LBA ; Point to the desired sector in the FAT +.394bab 85 02 sta $0322 STA BIOS_LBA +.394bad a5 26 lda $0346 LDA DOS_FAT_LBA+2 +.394baf 85 04 sta $0324 STA BIOS_LBA+2 +.394bb1 a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS ; Point to the first 512 bytes of the FAT buffer +.394bb4 85 06 sta $0326 STA BIOS_BUFF_PTR +.394bb6 a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS +.394bb9 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394bbb 22 44 10 00 jsl $001044 JSL GETBLOCK ; Attempt to load the first FAT sector +.394bbf 90 17 bcc $394bd8 BCC error +.394bc1 e6 02 inc $0322 INC BIOS_LBA ; Move to the next sector +.394bc3 a9 00 a7 lda #$a700 LDA #<>DOS_FAT_SECTORS+512 ; And point to the second 512 bytes of teh FAT buffer +.394bc6 85 06 sta $0326 STA BIOS_BUFF_PTR +.394bc8 a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS +.394bcb 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394bcd 22 44 10 00 jsl $001044 JSL GETBLOCK ; Attempt to load the first FAT sector +.394bd1 90 05 bcc $394bd8 BCC error +.394bd3 28 plp PLP +.394bd4 2b pld PLD +.394bd5 ab plb PLB +.394bd6 38 sec SEC +.394bd7 6b rtl RTL +.394bd8 error +.394bd8 e2 20 sep #$20 SEP #$20 ; set A short +.394bda a9 06 lda #$06 LDA #DOS_ERR_FAT +.394bdc 85 0e sta $032e STA DOS_STATUS +.394bde 28 plp PLP +.394bdf 2b pld PLD +.394be0 ab plb PLB +.394be1 18 clc CLC +.394be2 6b rtl RTL +.394be3 FATFORCLUSTER32 +.394be3 8b phb PHB +.394be4 0b phd PHD +.394be5 48 pha PHA ; begin setdbr macro +.394be6 08 php PHP +.394be7 e2 20 sep #$20 SEP #$20 ; set A short +.394be9 a9 00 lda #$00 LDA #0 +.394beb 48 pha PHA +.394bec ab plb PLB +.394bed 28 plp PLP +.394bee 68 pla PLA ; end setdbr macro +.394bef 48 pha PHA ; begin setdp macro +.394bf0 08 php PHP +.394bf1 c2 20 rep #$20 REP #$20 ; set A long +.394bf3 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394bf6 5b tcd TCD +.394bf7 28 plp PLP +.394bf8 68 pla PLA ; end setdp macro +.394bf9 c2 30 rep #$30 REP #$30 ; set A&X long +.394bfb a5 10 lda $0330 LDA DOS_CLUS_ID +.394bfd 85 24 sta $0344 STA DOS_FAT_LBA +.394bff a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.394c01 85 26 sta $0346 STA DOS_FAT_LBA+2 +.394c03 a2 07 00 ldx #$0007 LDX #7 +.394c06 46 26 lsr $0346 div_loop LSR DOS_FAT_LBA+2 +.394c08 66 24 ror $0344 ROR DOS_FAT_LBA +.394c0a ca dex DEX +.394c0b d0 f9 bne $394c06 BNE div_loop +.394c0d 18 clc CLC +.394c0e a5 24 lda $0344 LDA DOS_FAT_LBA +.394c10 6f 14 a0 38 adc $38a014 ADC FAT_BEGIN_LBA +.394c14 85 24 sta $0344 STA DOS_FAT_LBA +.394c16 a5 26 lda $0346 LDA DOS_FAT_LBA+2 +.394c18 6f 16 a0 38 adc $38a016 ADC FAT_BEGIN_LBA+2 +.394c1c 85 26 sta $0346 STA DOS_FAT_LBA+2 +.394c1e a5 24 lda $0344 LDA DOS_FAT_LBA ; We want to load the FAT sector +.394c20 85 02 sta $0322 STA BIOS_LBA +.394c22 a5 26 lda $0346 LDA DOS_FAT_LBA+2 +.394c24 85 04 sta $0324 STA BIOS_LBA+2 +.394c26 a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS ; We want to load the FAT sector in DOS_FAT_SECTORS +.394c29 85 06 sta $0326 STA BIOS_BUFF_PTR +.394c2b a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS +.394c2e 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394c30 22 44 10 00 jsl $001044 JSL GETBLOCK ; Load the FAT entry +.394c34 b0 06 bcs $394c3c BCS find_entry +.394c36 e2 20 sep #$20 SEP #$20 ; set A short +.394c38 a9 06 lda #$06 LDA #DOS_ERR_FAT +.394c3a 80 0e bra $394c4a BRA ret_failure +.394c3c find_entry +.394c3c c2 20 rep #$20 REP #$20 ; set A long +.394c3e a5 10 lda $0330 LDA DOS_CLUS_ID +.394c40 0a asl a ASL A +.394c41 0a asl a ASL A ; * 4 +.394c42 29 ff 01 and #$01ff AND #$1FF ; DOS_CLUS_ID MOD 512 +.394c45 aa tax TAX ; X should be the offset within the sector +.394c46 2b pld ret_success PLD +.394c47 ab plb PLB +.394c48 38 sec SEC ; return success +.394c49 6b rtl RTL +.394c4a 2b pld ret_failure PLD +.394c4b ab plb PLB +.394c4c 18 clc CLC ; Return failure +.394c4d 6b rtl RTL +.394c4e NEXTCLUSTER +.394c4e 08 php PHP +.394c4f e2 20 sep #$20 SEP #$20 ; set A short +.394c51 af 01 a0 38 lda $38a001 LDA @l FILE_SYSTEM ; Get the file system code +.394c55 c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? +.394c57 d0 08 bne $394c61 BNE fat32 ; No: assume it's FAT32 +.394c59 22 6f 4c 39 jsl $394c6f fat12 JSL NEXTCLUSTER12 ; Lookup the next cluster from FAT12 +.394c5d 90 0d bcc $394c6c BCC pass_failure ; If there was an error, pass it up the chain +.394c5f 80 06 bra $394c67 BRA ret_success +.394c61 22 d7 4c 39 jsl $394cd7 fat32 JSL NEXTCLUSTER32 ; Lookup the next cluster from FAT32 +.394c65 90 05 bcc $394c6c BCC pass_failure ; If there was an error, pass it up the chain +.394c67 64 0e stz $032e ret_success STZ DOS_STATUS +.394c69 28 plp PLP +.394c6a 38 sec SEC +.394c6b 6b rtl RTL +.394c6c 28 plp pass_failure PLP +.394c6d 18 clc CLC +.394c6e 6b rtl RTL +.394c6f NEXTCLUSTER12 +.394c6f 8b phb PHB +.394c70 0b phd PHD +.394c71 08 php PHP +.394c72 48 pha PHA ; begin setdbr macro +.394c73 08 php PHP +.394c74 e2 20 sep #$20 SEP #$20 ; set A short +.394c76 a9 00 lda #$00 LDA #0 +.394c78 48 pha PHA +.394c79 ab plb PLB +.394c7a 28 plp PLP +.394c7b 68 pla PLA ; end setdbr macro +.394c7c 48 pha PHA ; begin setdp macro +.394c7d 08 php PHP +.394c7e c2 20 rep #$20 REP #$20 ; set A long +.394c80 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394c83 5b tcd TCD +.394c84 28 plp PLP +.394c85 68 pla PLA ; end setdp macro +.394c86 c2 30 rep #$30 REP #$30 ; set A&X long +.394c88 22 7b 4b 39 jsl $394b7b JSL FATFORCLUSTER12 ; Attempt to load the FAT entries +.394c8c b0 03 bcs $394c91 BCS chk_clus_id +.394c8e 82 41 00 brl $394cd2 BRL pass_failure +.394c91 a5 10 lda $0330 chk_clus_id LDA DOS_CLUS_ID ; Check the cluster ID... +.394c93 89 01 00 bit #$0001 BIT #1 ; Is it odd? +.394c96 d0 0d bne $394ca5 BNE is_odd ; Yes: calculate the next cluster for odd +.394c98 is_even +.394c98 c2 20 rep #$20 REP #$20 ; set A long +.394c9a bf 00 a5 38 lda $38a500,x LDA DOS_FAT_SECTORS,X ; DOS_CLUS_ID := DOS_FAT_SECTORS[X] & $0FFF +.394c9e 29 ff 0f and #$0fff AND #$0FFF +.394ca1 85 28 sta $0348 STA DOS_TEMP +.394ca3 80 0c bra $394cb1 BRA check_id +.394ca5 is_odd +.394ca5 c2 20 rep #$20 REP #$20 ; set A long +.394ca7 bf 00 a5 38 lda $38a500,x LDA DOS_FAT_SECTORS,X ; DOS_CLUS_ID := DOS_FAT_SECTORS[X] >> 4 +.394cab 4a lsr a LSR A +.394cac 4a lsr a LSR A +.394cad 4a lsr a LSR A +.394cae 4a lsr a LSR A +.394caf 85 28 sta $0348 STA DOS_TEMP +.394cb1 check_id +.394cb1 c2 20 rep #$20 REP #$20 ; set A long +.394cb3 a5 28 lda $0348 LDA DOS_TEMP ; Check the new cluster ID we got +.394cb5 29 f0 0f and #$0ff0 AND #$0FF0 ; Is it in the range $0FF0 -- $0FFF? +.394cb8 c9 f0 0f cmp #$0ff0 CMP #$0FF0 +.394cbb f0 0f beq $394ccc BEQ no_more ; Yes: return that we've reached the end of the chain +.394cbd a5 28 lda $0348 LDA DOS_TEMP ; Restore the "current" cluster ID +.394cbf 85 10 sta $0330 STA DOS_CLUS_ID +.394cc1 64 12 stz $0332 STZ DOS_CLUS_ID+2 +.394cc3 ret_success +.394cc3 e2 20 sep #$20 SEP #$20 ; set A short +.394cc5 64 0e stz $032e STZ DOS_STATUS +.394cc7 28 plp PLP +.394cc8 2b pld PLD +.394cc9 ab plb PLB +.394cca 38 sec SEC +.394ccb 6b rtl RTL +.394ccc no_more +.394ccc e2 20 sep #$20 SEP #$20 ; set A short +.394cce a9 0a lda #$0a LDA #DOS_ERR_NOCLUSTER +.394cd0 85 0e sta $032e STA DOS_STATUS +.394cd2 28 plp pass_failure PLP +.394cd3 2b pld PLD +.394cd4 ab plb PLB +.394cd5 18 clc CLC +.394cd6 6b rtl RTL +.394cd7 NEXTCLUSTER32 +.394cd7 8b phb PHB +.394cd8 0b phd PHD +.394cd9 08 php PHP +.394cda 48 pha PHA ; begin setdbr macro +.394cdb 08 php PHP .394cdc e2 20 sep #$20 SEP #$20 ; set A short -.394cde a5 28 lda $0348 LDA DOS_TEMP ; No: return DOS_TEMP as the new DOS_CLUS_ID -.394ce0 85 10 sta $0330 STA DOS_CLUS_ID -.394ce2 a5 29 lda $0349 LDA DOS_TEMP+1 -.394ce4 85 11 sta $0331 STA DOS_CLUS_ID+1 -.394ce6 a5 2a lda $034a LDA DOS_TEMP+2 -.394ce8 85 12 sta $0332 STA DOS_CLUS_ID+2 -.394cea a5 2b lda $034b LDA DOS_TEMP+3 -.394cec 85 13 sta $0333 STA DOS_CLUS_ID+3 -.394cee ret_success -.394cee e2 20 sep #$20 SEP #$20 ; set A short -.394cf0 64 0e stz $032e STZ DOS_STATUS ; Record success -.394cf2 28 plp PLP -.394cf3 2b pld PLD -.394cf4 ab plb PLB -.394cf5 38 sec SEC -.394cf6 6b rtl RTL -.394cf7 ret_failure -.394cf7 e2 20 sep #$20 SEP #$20 ; set A short -.394cf9 85 0e sta $032e STA DOS_STATUS ; Record the error condition -.394cfb 28 plp PLP -.394cfc 2b pld PLD -.394cfd ab plb PLB -.394cfe 18 clc CLC -.394cff 6b rtl RTL -.394d00 DOS_READNEXT -.394d00 08 php PHP -.394d01 c2 30 rep #$30 REP #$30 ; set A&X long -.394d03 22 fc 4b 39 jsl $394bfc JSL NEXTCLUSTER ; Attempt to find the next cluster in the FAT -.394d07 90 09 bcc $394d12 BCC pass_failure ; If nothing found: pass the failure up the chain -.394d09 22 ec 47 39 jsl $3947ec JSL DOS_GETCLUSTER ; Otherwise: attempt to read the cluster -.394d0d 90 03 bcc $394d12 BCC pass_failure ; If nothing read: pass the failure up the chain -.394d0f 28 plp ret_success PLP -.394d10 38 sec SEC -.394d11 6b rtl RTL -.394d12 28 plp pass_failure PLP -.394d13 18 clc CLC -.394d14 6b rtl RTL -.394d15 DOS_FREECLUS -.394d15 08 php PHP -.394d16 48 pha PHA ; begin setdp macro -.394d17 08 php PHP -.394d18 c2 20 rep #$20 REP #$20 ; set A long -.394d1a a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394d1d 5b tcd TCD -.394d1e 28 plp PLP -.394d1f 68 pla PLA ; end setdp macro -.394d20 e2 20 sep #$20 SEP #$20 ; set A short -.394d22 af 01 a0 38 lda $38a001 LDA @l FILE_SYSTEM ; Get the file system code -.394d26 c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? -.394d28 d0 08 bne $394d32 BNE fat32 ; No: assume it's FAT32 -.394d2a 22 a6 4d 39 jsl $394da6 fat12 JSL DOS_FREECLUS12 ; Find the next free cluster from FAT12 -.394d2e 90 0d bcc $394d3d BCC pass_failure ; If there was an error, pass it up the chain -.394d30 80 06 bra $394d38 BRA ret_success -.394d32 22 7e 4e 39 jsl $394e7e fat32 JSL DOS_FREECLUS32 ; Find the next free cluster from FAT32 -.394d36 90 05 bcc $394d3d BCC pass_failure ; If there was an error, pass it up the chain -.394d38 64 0e stz $032e ret_success STZ DOS_STATUS -.394d3a 28 plp PLP -.394d3b 38 sec SEC -.394d3c 6b rtl RTL -.394d3d 28 plp pass_failure PLP -.394d3e 18 clc CLC -.394d3f 6b rtl RTL -.394d40 FDC_READ2FAT12 -.394d40 8b phb PHB -.394d41 0b phd PHD -.394d42 08 php PHP -.394d43 48 pha PHA ; begin setdbr macro -.394d44 08 php PHP -.394d45 e2 20 sep #$20 SEP #$20 ; set A short -.394d47 a9 00 lda #$00 LDA #0 -.394d49 48 pha PHA -.394d4a ab plb PLB -.394d4b 28 plp PLP -.394d4c 68 pla PLA ; end setdbr macro -.394d4d 48 pha PHA ; begin setdp macro -.394d4e 08 php PHP -.394d4f c2 20 rep #$20 REP #$20 ; set A long -.394d51 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394d54 5b tcd TCD -.394d55 28 plp PLP -.394d56 68 pla PLA ; end setdp macro -.394d57 c2 30 rep #$30 REP #$30 ; set A&X long -.394d59 a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS ; Set the location to store the sector -.394d5c 85 06 sta $0326 STA BIOS_BUFF_PTR -.394d5e a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS -.394d61 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394d63 a5 24 lda $0344 LDA DOS_FAT_LBA -.394d65 85 02 sta $0322 STA BIOS_LBA -.394d67 a5 26 lda $0346 LDA DOS_FAT_LBA+2 -.394d69 85 04 sta $0324 STA BIOS_LBA+2 -.394d6b 22 44 10 00 jsl $001044 JSL GETBLOCK ; Read the first sector -.394d6f b0 07 bcs $394d78 BCS inc_sect2 ; If success: start getting the second sector -.394d71 e2 20 sep #$20 SEP #$20 ; set A short -.394d73 a9 06 lda #$06 LDA #DOS_ERR_FAT -.394d75 82 1c 00 brl $394d94 BRL ret_failure -.394d78 inc_sect2 -.394d78 c2 20 rep #$20 REP #$20 ; set A long -.394d7a e6 02 inc $0322 INC BIOS_LBA ; Move to the next sector -.394d7c d0 02 bne $394d80 BNE inc_buff_ptr -.394d7e e6 04 inc $0324 INC BIOS_LBA+2 -.394d80 a9 00 a7 lda #$a700 inc_buff_ptr LDA #<>(DOS_FAT_SECTORS+DOS_SECTOR_SIZE) -.394d83 85 06 sta $0326 STA BIOS_BUFF_PTR -.394d85 a9 38 00 lda #$0038 LDA #`(DOS_FAT_SECTORS+DOS_SECTOR_SIZE) -.394d88 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394d8a 22 44 10 00 jsl $001044 JSL GETBLOCK ; Read the second sector -.394d8e b0 0d bcs $394d9d BCS ret_success ; If success, return success -.394d90 e2 20 sep #$20 SEP #$20 ; set A short -.394d92 a9 06 lda #$06 LDA #DOS_ERR_FAT -.394d94 ret_failure -.394d94 e2 20 sep #$20 SEP #$20 ; set A short -.394d96 85 00 sta $0320 STA BIOS_STATUS -.394d98 28 plp PLP -.394d99 2b pld PLD -.394d9a ab plb PLB -.394d9b 18 clc CLC -.394d9c 6b rtl RTL -.394d9d ret_success -.394d9d e2 20 sep #$20 SEP #$20 ; set A short -.394d9f 64 00 stz $0320 STZ BIOS_STATUS -.394da1 28 plp PLP -.394da2 2b pld PLD -.394da3 ab plb PLB -.394da4 38 sec SEC -.394da5 6b rtl RTL -.394da6 DOS_FREECLUS12 -.394da6 da phx PHX -.394da7 8b phb PHB -.394da8 0b phd PHD -.394da9 08 php PHP -.394daa 48 pha PHA ; begin setdbr macro -.394dab 08 php PHP -.394dac e2 20 sep #$20 SEP #$20 ; set A short -.394dae a9 00 lda #$00 LDA #0 -.394db0 48 pha PHA -.394db1 ab plb PLB -.394db2 28 plp PLP -.394db3 68 pla PLA ; end setdbr macro -.394db4 48 pha PHA ; begin setdp macro -.394db5 08 php PHP -.394db6 c2 20 rep #$20 REP #$20 ; set A long -.394db8 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394dbb 5b tcd TCD -.394dbc 28 plp PLP -.394dbd 68 pla PLA ; end setdp macro -.394dbe c2 30 rep #$30 REP #$30 ; set A&X long -.394dc0 a9 02 00 lda #$0002 LDA #2 ; Cluster ID is 2 to start with -.394dc3 85 10 sta $0330 STA DOS_CLUS_ID -.394dc5 a9 00 00 lda #$0000 LDA #0 -.394dc8 85 12 sta $0332 STA DOS_CLUS_ID+2 -.394dca 22 b6 4a 39 jsl $394ab6 JSL ENTRYFORCLUS12 ; Calculate the LBA and buffer offset for the cluster -.394dce 22 40 4d 39 jsl $394d40 JSL FDC_READ2FAT12 ; Read the first two sectors of the FAT -.394dd2 b0 07 bcs $394ddb BCS start_of_fat ; If success, move X to the start of the FAT -.394dd4 e2 20 sep #$20 SEP #$20 ; set A short -.394dd6 a9 06 lda #$06 LDA #DOS_ERR_FAT -.394dd8 82 99 00 brl $394e74 BRL ret_failure -.394ddb start_of_fat -.394ddb c2 30 rep #$30 REP #$30 ; set A&X long -.394ddd a5 10 lda $0330 chk_cluster LDA DOS_CLUS_ID ; Check to see if cluster number is even or odd -.394ddf 89 01 00 bit #$0001 BIT #1 -.394de2 d0 09 bne $394ded BNE is_odd -.394de4 bf 00 a5 38 lda $38a500,x is_even LDA DOS_FAT_SECTORS,X ; Get the cluster status for an even numbered cluster -.394de8 29 ff 0f and #$0fff AND #$0FFF -.394deb 80 08 bra $394df5 BRA chk_available -.394ded bf 00 a5 38 lda $38a500,x is_odd LDA DOS_FAT_SECTORS,X ; Get the cluster status for an odd numbered cluster -.394df1 4a lsr a LSR A -.394df2 4a lsr a LSR A -.394df3 4a lsr a LSR A -.394df4 4a lsr a LSR A -.394df5 chk_available -.394df5 85 28 sta $0348 STA DOS_TEMP -.394df7 c9 00 00 cmp #$0000 CMP #0 ; Is it available? -.394dfa f0 03 beq $394dff BEQ chk_found -.394dfc 82 39 00 brl $394e38 BRL next_cluster ; No: advance to the next cluster -.394dff 8a txa chk_found TXA -.394e00 85 2a sta $034a STA DOS_TEMP+2 -.394e02 a5 10 lda $0330 LDA DOS_CLUS_ID ; Check to see if cluster number is even or odd -.394e04 89 01 00 bit #$0001 BIT #1 -.394e07 d0 0d bne $394e16 BNE is_odd2 -.394e09 is_even2 -.394e09 bf 00 a5 38 lda $38a500,x LDA DOS_FAT_SECTORS,X ; Reserve the cluster in the FAT, even offset case -.394e0d 09 ff 0f ora #$0fff ORA #$0FFF -.394e10 9f 00 a5 38 sta $38a500,x STA DOS_FAT_SECTORS,X -.394e14 80 0b bra $394e21 BRA write_fat -.394e16 is_odd2 -.394e16 bf 00 a5 38 lda $38a500,x LDA DOS_FAT_SECTORS,X ; Reserve the cluster in the FAT, odd offset case -.394e1a 09 f0 ff ora #$fff0 ORA #$FFF0 -.394e1d 9f 00 a5 38 sta $38a500,x STA DOS_FAT_SECTORS,X -.394e21 22 48 4f 39 jsl $394f48 write_fat JSL WRITEFAT12 ; Write the two FAT sectors back to disk -.394e25 b0 07 bcs $394e2e BCS ret_success ; If success: return success -.394e27 e2 20 sep #$20 SEP #$20 ; set A short -.394e29 a9 14 lda #$14 LDA #DOS_ERR_FATUPDATE ; Flag an error trying to write the FAT back -.394e2b 82 46 00 brl $394e74 BRL ret_failure -.394e2e ret_success -.394e2e e2 20 sep #$20 SEP #$20 ; set A short -.394e30 64 0e stz $032e STZ DOS_STATUS -.394e32 28 plp PLP -.394e33 2b pld PLD -.394e34 ab plb PLB -.394e35 fa plx PLX -.394e36 38 sec SEC -.394e37 6b rtl RTL -.394e38 next_cluster -.394e38 e6 10 inc $0330 INC DOS_CLUS_ID ; And advance the cluster ID -.394e3a d0 02 bne $394e3e BNE calc_entry -.394e3c e6 12 inc $0332 INC DOS_CLUS_ID+2 -.394e3e 22 b6 4a 39 jsl $394ab6 calc_entry JSL ENTRYFORCLUS12 ; Calculate the LBA and offset into the buffer for the cluster -.394e42 e0 00 00 cpx #$0000 CPX #0 ; Did we wrap around? -.394e45 f0 03 beq $394e4a BEQ chk_end_of_fat -.394e47 82 93 ff brl $394ddd BRL chk_cluster ; No: go back and check it too -.394e4a chk_end_of_fat -.394e4a a5 24 lda $0344 LDA DOS_FAT_LBA ; Are we at the end of the FAT? -.394e4c cf 18 a0 38 cmp $38a018 CMP FAT2_BEGIN_LBA ; NOTE: we use the start sector of the second FAT as our sentinel -.394e50 d0 0f bne $394e61 BNE next_2 -.394e52 a5 26 lda $0346 LDA DOS_FAT_LBA+2 -.394e54 cf 1a a0 38 cmp $38a01a CMP FAT2_BEGIN_LBA+2 -.394e58 d0 07 bne $394e61 BNE next_2 ; No: get the next to sectors -.394e5a e2 20 sep #$20 SEP #$20 ; set A short -.394e5c a9 12 lda #$12 LDA #DOS_ERR_MEDIAFULL ; Yes: return media full -.394e5e 82 13 00 brl $394e74 BRL ret_failure -.394e61 next_2 -.394e61 22 40 4d 39 jsl $394d40 JSL FDC_READ2FAT12 ; Read the next two sectors of the FAT -.394e65 90 06 bcc $394e6d BCC fat_fail ; If failed: return error -.394e67 a2 00 00 ldx #$0000 LDX #0 ; If success: Start scanning at the beginning of the sectors -.394e6a 82 70 ff brl $394ddd BRL chk_cluster ; And start checking from there -.394e6d fat_fail -.394e6d e2 20 sep #$20 SEP #$20 ; set A short -.394e6f a9 06 lda #$06 LDA #DOS_ERR_FAT -.394e71 82 00 00 brl $394e74 BRL ret_failure -.394e74 ret_failure -.394e74 e2 20 sep #$20 SEP #$20 ; set A short -.394e76 85 0e sta $032e STA DOS_STATUS -.394e78 28 plp PLP -.394e79 2b pld PLD -.394e7a ab plb PLB -.394e7b fa plx PLX -.394e7c 18 clc CLC -.394e7d 6b rtl RTL -.394e7e DOS_FREECLUS32 -.394e7e 8b phb PHB -.394e7f 0b phd PHD -.394e80 08 php PHP -.394e81 48 pha PHA ; begin setdbr macro -.394e82 08 php PHP -.394e83 e2 20 sep #$20 SEP #$20 ; set A short -.394e85 a9 00 lda #$00 LDA #0 -.394e87 48 pha PHA -.394e88 ab plb PLB -.394e89 28 plp PLP -.394e8a 68 pla PLA ; end setdbr macro -.394e8b 48 pha PHA ; begin setdp macro -.394e8c 08 php PHP -.394e8d c2 20 rep #$20 REP #$20 ; set A long -.394e8f a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394e92 5b tcd TCD -.394e93 28 plp PLP -.394e94 68 pla PLA ; end setdp macro -.394e95 c2 30 rep #$30 REP #$30 ; set A&X long -.394e97 a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; Set the location to store the sector -.394e9a 85 06 sta $0326 STA BIOS_BUFF_PTR -.394e9c a9 38 00 lda #$0038 LDA #`DOS_SECTOR -.394e9f 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394ea1 af 14 a0 38 lda $38a014 LDA FAT_BEGIN_LBA ; Set the LBA to that of the first FAT sector -.394ea5 85 02 sta $0322 STA BIOS_LBA -.394ea7 af 16 a0 38 lda $38a016 LDA FAT_BEGIN_LBA+2 -.394eab 85 04 sta $0324 STA BIOS_LBA+2 -.394ead 22 44 10 00 jsl $001044 JSL GETBLOCK ; Load the sector into memory -.394eb1 b0 07 bcs $394eba BCS initial_entry ; If OK: set the initial entry to check -.394eb3 e2 20 sep #$20 SEP #$20 ; set A short -.394eb5 a9 06 lda #$06 LDA #DOS_ERR_FAT ; Return a NOFAT error -.394eb7 82 6b 00 brl $394f25 BRL ret_failure -.394eba initial_entry -.394eba c2 20 rep #$20 REP #$20 ; set A long -.394ebc a9 02 00 lda #$0002 LDA #2 ; Set DOS_CLUS_ID to 2 -.394ebf 85 10 sta $0330 STA DOS_CLUS_ID -.394ec1 a9 00 00 lda #$0000 LDA #0 -.394ec4 85 12 sta $0332 STA DOS_CLUS_ID+2 -.394ec6 a2 08 00 ldx #$0008 LDX #8 ; Set the offset to DOS_CLUS_ID * 4 -.394ec9 bf 00 a3 38 lda $38a300,x chk_entry LDA DOS_SECTOR,X ; Is the cluster entry == $00000000? -.394ecd d0 06 bne $394ed5 BNE next_entry ; No: move to the next entry -.394ecf bf 02 a3 38 lda $38a302,x LDA DOS_SECTOR+2,X -.394ed3 f0 36 beq $394f0b BEQ found_free ; Yes: go to allocate and return it -.394ed5 e6 10 inc $0330 next_entry INC DOS_CLUS_ID ; Move to the next cluster -.394ed7 d0 02 bne $394edb BNE inc_ptr -.394ed9 e6 12 inc $0332 INC DOS_CLUS_ID+2 -.394edb e8 inx inc_ptr INX ; Update the index to the entry -.394edc e8 inx INX -.394edd e8 inx INX -.394ede e8 inx INX -.394edf e0 00 02 cpx #$0200 CPX #DOS_SECTOR_SIZE ; Are we outside the sector? -.394ee2 90 e5 bcc $394ec9 BLT chk_entry ; No: check this entry -.394ee4 e6 02 inc $0322 INC BIOS_LBA ; Point to the next sector in the FAT -.394ee6 d0 18 bne $394f00 BNE get_block -.394ee8 e6 04 inc $0324 INC BIOS_LBA+2 -.394eea a5 04 lda $0324 LDA BIOS_LBA+2 -.394eec cf 1a a0 38 cmp $38a01a CMP FAT2_BEGIN_LBA+2 -.394ef0 90 0e bcc $394f00 BLT get_block -.394ef2 a5 02 lda $0322 LDA BIOS_LBA -.394ef4 cf 18 a0 38 cmp $38a018 CMP FAT2_BEGIN_LBA -.394ef8 90 06 bcc $394f00 BLT get_block -.394efa e2 20 sep #$20 SEP #$20 ; set A short -.394efc a9 12 lda #$12 LDA #DOS_ERR_MEDIAFULL ; No: throw a media full error -.394efe 80 25 bra $394f25 BRA ret_failure -.394f00 22 44 10 00 jsl $001044 get_block JSL GETBLOCK ; Attempt to read the block -.394f04 90 1b bcc $394f21 BCC ret_fat_error ; If error: throw a FAT error -.394f06 a2 00 00 ldx #$0000 set_ptr LDX #0 ; Set index pointer to the first entry -.394f09 80 be bra $394ec9 BRA chk_entry ; Check this entry -.394f0b found_free -.394f0b c2 20 rep #$20 REP #$20 ; set A long -.394f0d a9 ff ff lda #$ffff LDA #<>FAT_LAST_CLUSTER ; Set the entry to $0FFFFFFF to make it the last entry in its chain -.394f10 9f 00 a3 38 sta $38a300,x STA DOS_SECTOR,X -.394f14 a9 ff 0f lda #$0fff LDA #(FAT_LAST_CLUSTER >> 16) -.394f17 9f 02 a3 38 sta $38a302,x STA DOS_SECTOR+2,X -.394f1b 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Write the sector back to the block device -.394f1f b0 0d bcs $394f2e BCS ret_success ; If OK: return success -.394f21 ret_fat_error -.394f21 e2 20 sep #$20 SEP #$20 ; set A short -.394f23 a9 06 lda #$06 LDA #DOS_ERR_FAT ; Otherwise: return NOFAT error -.394f25 ret_failure -.394f25 e2 20 sep #$20 SEP #$20 ; set A short -.394f27 85 0e sta $032e STA DOS_STATUS -.394f29 28 plp PLP -.394f2a 2b pld PLD -.394f2b ab plb PLB -.394f2c 18 clc CLC -.394f2d 6b rtl RTL -.394f2e ret_success -.394f2e e2 20 sep #$20 SEP #$20 ; set A short -.394f30 64 0e stz $032e STZ DOS_STATUS -.394f32 28 plp PLP -.394f33 2b pld PLD -.394f34 ab plb PLB -.394f35 38 sec SEC -.394f36 6b rtl RTL -.394f37 DELCLUSTER -.394f37 e2 20 sep #$20 SEP #$20 ; set A short -.394f39 af 01 a0 38 lda $38a001 LDA @l FILE_SYSTEM ; Get the file system code -.394f3d c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? -.394f3f d0 04 bne $394f45 BNE fat32 ; No: assume it's FAT32 -.394f41 5c 8f 4f 39 jmp $394f8f fat12 JML DELCLUSTER12 -.394f45 4c dd 4f jmp $394fdd fat32 JMP DELCLUSTER32 -.394f48 WRITEFAT12 -.394f48 8b phb PHB -.394f49 0b phd PHD -.394f4a 48 pha PHA ; begin setdbr macro -.394f4b 08 php PHP +.394cde a9 00 lda #$00 LDA #0 +.394ce0 48 pha PHA +.394ce1 ab plb PLB +.394ce2 28 plp PLP +.394ce3 68 pla PLA ; end setdbr macro +.394ce4 48 pha PHA ; begin setdp macro +.394ce5 08 php PHP +.394ce6 c2 20 rep #$20 REP #$20 ; set A long +.394ce8 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394ceb 5b tcd TCD +.394cec 28 plp PLP +.394ced 68 pla PLA ; end setdp macro +.394cee c2 30 rep #$30 REP #$30 ; set A&X long +.394cf0 22 e3 4b 39 jsl $394be3 JSL FATFORCLUSTER32 ; Get the FAT entry for this cluster +.394cf4 90 53 bcc $394d49 BCC ret_failure ; If it did not work, return the error +.394cf6 e2 20 sep #$20 SEP #$20 ; set A short +.394cf8 bf 00 a5 38 lda $38a500,x LDA @l DOS_FAT_SECTORS,X ; Get the entry and copy it to DOS_TEMP +.394cfc 85 28 sta $0348 STA DOS_TEMP +.394cfe bf 01 a5 38 lda $38a501,x LDA @l DOS_FAT_SECTORS+1,X +.394d02 85 29 sta $0349 STA DOS_TEMP+1 +.394d04 bf 02 a5 38 lda $38a502,x LDA @l DOS_FAT_SECTORS+2,X +.394d08 85 2a sta $034a STA DOS_TEMP+2 +.394d0a bf 03 a5 38 lda $38a503,x LDA @l DOS_FAT_SECTORS+3,X +.394d0e 85 2b sta $034b STA DOS_TEMP+3 +.394d10 a5 28 lda $0348 xxxx LDA DOS_TEMP ; Is DOS_TEMP = $FFFFFFFF? +.394d12 c9 ff cmp #$ff CMP #$FF +.394d14 d0 18 bne $394d2e BNE found_next +.394d16 a5 29 lda $0349 LDA DOS_TEMP+1 +.394d18 c9 ff cmp #$ff CMP #$FF +.394d1a d0 12 bne $394d2e BNE found_next +.394d1c a5 2a lda $034a LDA DOS_TEMP+2 +.394d1e c9 ff cmp #$ff CMP #$FF +.394d20 d0 0c bne $394d2e BNE found_next +.394d22 a5 2b lda $034b LDA DOS_TEMP+3 +.394d24 c9 0f cmp #$0f CMP #$0F +.394d26 d0 06 bne $394d2e BNE found_next ; No: return this cluster as the next +.394d28 e2 20 sep #$20 SEP #$20 ; set A short +.394d2a a9 0a lda #$0a LDA #DOS_ERR_NOCLUSTER ; Yes: return that there are no more clusters +.394d2c 80 1b bra $394d49 BRA ret_failure +.394d2e found_next +.394d2e e2 20 sep #$20 SEP #$20 ; set A short +.394d30 a5 28 lda $0348 LDA DOS_TEMP ; No: return DOS_TEMP as the new DOS_CLUS_ID +.394d32 85 10 sta $0330 STA DOS_CLUS_ID +.394d34 a5 29 lda $0349 LDA DOS_TEMP+1 +.394d36 85 11 sta $0331 STA DOS_CLUS_ID+1 +.394d38 a5 2a lda $034a LDA DOS_TEMP+2 +.394d3a 85 12 sta $0332 STA DOS_CLUS_ID+2 +.394d3c a5 2b lda $034b LDA DOS_TEMP+3 +.394d3e 85 13 sta $0333 STA DOS_CLUS_ID+3 +.394d40 ret_success +.394d40 e2 20 sep #$20 SEP #$20 ; set A short +.394d42 64 0e stz $032e STZ DOS_STATUS ; Record success +.394d44 28 plp PLP +.394d45 2b pld PLD +.394d46 ab plb PLB +.394d47 38 sec SEC +.394d48 6b rtl RTL +.394d49 ret_failure +.394d49 e2 20 sep #$20 SEP #$20 ; set A short +.394d4b 85 0e sta $032e STA DOS_STATUS ; Record the error condition +.394d4d 28 plp PLP +.394d4e 2b pld PLD +.394d4f ab plb PLB +.394d50 18 clc CLC +.394d51 6b rtl RTL +.394d52 DOS_READNEXT +.394d52 08 php PHP +.394d53 c2 30 rep #$30 REP #$30 ; set A&X long +.394d55 22 4e 4c 39 jsl $394c4e JSL NEXTCLUSTER ; Attempt to find the next cluster in the FAT +.394d59 90 09 bcc $394d64 BCC pass_failure ; If nothing found: pass the failure up the chain +.394d5b 22 3e 48 39 jsl $39483e JSL DOS_GETCLUSTER ; Otherwise: attempt to read the cluster +.394d5f 90 03 bcc $394d64 BCC pass_failure ; If nothing read: pass the failure up the chain +.394d61 28 plp ret_success PLP +.394d62 38 sec SEC +.394d63 6b rtl RTL +.394d64 28 plp pass_failure PLP +.394d65 18 clc CLC +.394d66 6b rtl RTL +.394d67 DOS_FREECLUS +.394d67 08 php PHP +.394d68 48 pha PHA ; begin setdp macro +.394d69 08 php PHP +.394d6a c2 20 rep #$20 REP #$20 ; set A long +.394d6c a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394d6f 5b tcd TCD +.394d70 28 plp PLP +.394d71 68 pla PLA ; end setdp macro +.394d72 e2 20 sep #$20 SEP #$20 ; set A short +.394d74 af 01 a0 38 lda $38a001 LDA @l FILE_SYSTEM ; Get the file system code +.394d78 c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? +.394d7a d0 08 bne $394d84 BNE fat32 ; No: assume it's FAT32 +.394d7c 22 f8 4d 39 jsl $394df8 fat12 JSL DOS_FREECLUS12 ; Find the next free cluster from FAT12 +.394d80 90 0d bcc $394d8f BCC pass_failure ; If there was an error, pass it up the chain +.394d82 80 06 bra $394d8a BRA ret_success +.394d84 22 d0 4e 39 jsl $394ed0 fat32 JSL DOS_FREECLUS32 ; Find the next free cluster from FAT32 +.394d88 90 05 bcc $394d8f BCC pass_failure ; If there was an error, pass it up the chain +.394d8a 64 0e stz $032e ret_success STZ DOS_STATUS +.394d8c 28 plp PLP +.394d8d 38 sec SEC +.394d8e 6b rtl RTL +.394d8f 28 plp pass_failure PLP +.394d90 18 clc CLC +.394d91 6b rtl RTL +.394d92 FDC_READ2FAT12 +.394d92 8b phb PHB +.394d93 0b phd PHD +.394d94 08 php PHP +.394d95 48 pha PHA ; begin setdbr macro +.394d96 08 php PHP +.394d97 e2 20 sep #$20 SEP #$20 ; set A short +.394d99 a9 00 lda #$00 LDA #0 +.394d9b 48 pha PHA +.394d9c ab plb PLB +.394d9d 28 plp PLP +.394d9e 68 pla PLA ; end setdbr macro +.394d9f 48 pha PHA ; begin setdp macro +.394da0 08 php PHP +.394da1 c2 20 rep #$20 REP #$20 ; set A long +.394da3 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394da6 5b tcd TCD +.394da7 28 plp PLP +.394da8 68 pla PLA ; end setdp macro +.394da9 c2 30 rep #$30 REP #$30 ; set A&X long +.394dab a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS ; Set the location to store the sector +.394dae 85 06 sta $0326 STA BIOS_BUFF_PTR +.394db0 a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS +.394db3 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394db5 a5 24 lda $0344 LDA DOS_FAT_LBA +.394db7 85 02 sta $0322 STA BIOS_LBA +.394db9 a5 26 lda $0346 LDA DOS_FAT_LBA+2 +.394dbb 85 04 sta $0324 STA BIOS_LBA+2 +.394dbd 22 44 10 00 jsl $001044 JSL GETBLOCK ; Read the first sector +.394dc1 b0 07 bcs $394dca BCS inc_sect2 ; If success: start getting the second sector +.394dc3 e2 20 sep #$20 SEP #$20 ; set A short +.394dc5 a9 06 lda #$06 LDA #DOS_ERR_FAT +.394dc7 82 1c 00 brl $394de6 BRL ret_failure +.394dca inc_sect2 +.394dca c2 20 rep #$20 REP #$20 ; set A long +.394dcc e6 02 inc $0322 INC BIOS_LBA ; Move to the next sector +.394dce d0 02 bne $394dd2 BNE inc_buff_ptr +.394dd0 e6 04 inc $0324 INC BIOS_LBA+2 +.394dd2 a9 00 a7 lda #$a700 inc_buff_ptr LDA #<>(DOS_FAT_SECTORS+DOS_SECTOR_SIZE) +.394dd5 85 06 sta $0326 STA BIOS_BUFF_PTR +.394dd7 a9 38 00 lda #$0038 LDA #`(DOS_FAT_SECTORS+DOS_SECTOR_SIZE) +.394dda 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394ddc 22 44 10 00 jsl $001044 JSL GETBLOCK ; Read the second sector +.394de0 b0 0d bcs $394def BCS ret_success ; If success, return success +.394de2 e2 20 sep #$20 SEP #$20 ; set A short +.394de4 a9 06 lda #$06 LDA #DOS_ERR_FAT +.394de6 ret_failure +.394de6 e2 20 sep #$20 SEP #$20 ; set A short +.394de8 85 00 sta $0320 STA BIOS_STATUS +.394dea 28 plp PLP +.394deb 2b pld PLD +.394dec ab plb PLB +.394ded 18 clc CLC +.394dee 6b rtl RTL +.394def ret_success +.394def e2 20 sep #$20 SEP #$20 ; set A short +.394df1 64 00 stz $0320 STZ BIOS_STATUS +.394df3 28 plp PLP +.394df4 2b pld PLD +.394df5 ab plb PLB +.394df6 38 sec SEC +.394df7 6b rtl RTL +.394df8 DOS_FREECLUS12 +.394df8 da phx PHX +.394df9 8b phb PHB +.394dfa 0b phd PHD +.394dfb 08 php PHP +.394dfc 48 pha PHA ; begin setdbr macro +.394dfd 08 php PHP +.394dfe e2 20 sep #$20 SEP #$20 ; set A short +.394e00 a9 00 lda #$00 LDA #0 +.394e02 48 pha PHA +.394e03 ab plb PLB +.394e04 28 plp PLP +.394e05 68 pla PLA ; end setdbr macro +.394e06 48 pha PHA ; begin setdp macro +.394e07 08 php PHP +.394e08 c2 20 rep #$20 REP #$20 ; set A long +.394e0a a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394e0d 5b tcd TCD +.394e0e 28 plp PLP +.394e0f 68 pla PLA ; end setdp macro +.394e10 c2 30 rep #$30 REP #$30 ; set A&X long +.394e12 a9 02 00 lda #$0002 LDA #2 ; Cluster ID is 2 to start with +.394e15 85 10 sta $0330 STA DOS_CLUS_ID +.394e17 a9 00 00 lda #$0000 LDA #0 +.394e1a 85 12 sta $0332 STA DOS_CLUS_ID+2 +.394e1c 22 08 4b 39 jsl $394b08 JSL ENTRYFORCLUS12 ; Calculate the LBA and buffer offset for the cluster +.394e20 22 92 4d 39 jsl $394d92 JSL FDC_READ2FAT12 ; Read the first two sectors of the FAT +.394e24 b0 07 bcs $394e2d BCS start_of_fat ; If success, move X to the start of the FAT +.394e26 e2 20 sep #$20 SEP #$20 ; set A short +.394e28 a9 06 lda #$06 LDA #DOS_ERR_FAT +.394e2a 82 99 00 brl $394ec6 BRL ret_failure +.394e2d start_of_fat +.394e2d c2 30 rep #$30 REP #$30 ; set A&X long +.394e2f a5 10 lda $0330 chk_cluster LDA DOS_CLUS_ID ; Check to see if cluster number is even or odd +.394e31 89 01 00 bit #$0001 BIT #1 +.394e34 d0 09 bne $394e3f BNE is_odd +.394e36 bf 00 a5 38 lda $38a500,x is_even LDA DOS_FAT_SECTORS,X ; Get the cluster status for an even numbered cluster +.394e3a 29 ff 0f and #$0fff AND #$0FFF +.394e3d 80 08 bra $394e47 BRA chk_available +.394e3f bf 00 a5 38 lda $38a500,x is_odd LDA DOS_FAT_SECTORS,X ; Get the cluster status for an odd numbered cluster +.394e43 4a lsr a LSR A +.394e44 4a lsr a LSR A +.394e45 4a lsr a LSR A +.394e46 4a lsr a LSR A +.394e47 chk_available +.394e47 85 28 sta $0348 STA DOS_TEMP +.394e49 c9 00 00 cmp #$0000 CMP #0 ; Is it available? +.394e4c f0 03 beq $394e51 BEQ chk_found +.394e4e 82 39 00 brl $394e8a BRL next_cluster ; No: advance to the next cluster +.394e51 8a txa chk_found TXA +.394e52 85 2a sta $034a STA DOS_TEMP+2 +.394e54 a5 10 lda $0330 LDA DOS_CLUS_ID ; Check to see if cluster number is even or odd +.394e56 89 01 00 bit #$0001 BIT #1 +.394e59 d0 0d bne $394e68 BNE is_odd2 +.394e5b is_even2 +.394e5b bf 00 a5 38 lda $38a500,x LDA DOS_FAT_SECTORS,X ; Reserve the cluster in the FAT, even offset case +.394e5f 09 ff 0f ora #$0fff ORA #$0FFF +.394e62 9f 00 a5 38 sta $38a500,x STA DOS_FAT_SECTORS,X +.394e66 80 0b bra $394e73 BRA write_fat +.394e68 is_odd2 +.394e68 bf 00 a5 38 lda $38a500,x LDA DOS_FAT_SECTORS,X ; Reserve the cluster in the FAT, odd offset case +.394e6c 09 f0 ff ora #$fff0 ORA #$FFF0 +.394e6f 9f 00 a5 38 sta $38a500,x STA DOS_FAT_SECTORS,X +.394e73 22 9a 4f 39 jsl $394f9a write_fat JSL WRITEFAT12 ; Write the two FAT sectors back to disk +.394e77 b0 07 bcs $394e80 BCS ret_success ; If success: return success +.394e79 e2 20 sep #$20 SEP #$20 ; set A short +.394e7b a9 14 lda #$14 LDA #DOS_ERR_FATUPDATE ; Flag an error trying to write the FAT back +.394e7d 82 46 00 brl $394ec6 BRL ret_failure +.394e80 ret_success +.394e80 e2 20 sep #$20 SEP #$20 ; set A short +.394e82 64 0e stz $032e STZ DOS_STATUS +.394e84 28 plp PLP +.394e85 2b pld PLD +.394e86 ab plb PLB +.394e87 fa plx PLX +.394e88 38 sec SEC +.394e89 6b rtl RTL +.394e8a next_cluster +.394e8a e6 10 inc $0330 INC DOS_CLUS_ID ; And advance the cluster ID +.394e8c d0 02 bne $394e90 BNE calc_entry +.394e8e e6 12 inc $0332 INC DOS_CLUS_ID+2 +.394e90 22 08 4b 39 jsl $394b08 calc_entry JSL ENTRYFORCLUS12 ; Calculate the LBA and offset into the buffer for the cluster +.394e94 e0 00 00 cpx #$0000 CPX #0 ; Did we wrap around? +.394e97 f0 03 beq $394e9c BEQ chk_end_of_fat +.394e99 82 93 ff brl $394e2f BRL chk_cluster ; No: go back and check it too +.394e9c chk_end_of_fat +.394e9c a5 24 lda $0344 LDA DOS_FAT_LBA ; Are we at the end of the FAT? +.394e9e cf 18 a0 38 cmp $38a018 CMP FAT2_BEGIN_LBA ; NOTE: we use the start sector of the second FAT as our sentinel +.394ea2 d0 0f bne $394eb3 BNE next_2 +.394ea4 a5 26 lda $0346 LDA DOS_FAT_LBA+2 +.394ea6 cf 1a a0 38 cmp $38a01a CMP FAT2_BEGIN_LBA+2 +.394eaa d0 07 bne $394eb3 BNE next_2 ; No: get the next to sectors +.394eac e2 20 sep #$20 SEP #$20 ; set A short +.394eae a9 12 lda #$12 LDA #DOS_ERR_MEDIAFULL ; Yes: return media full +.394eb0 82 13 00 brl $394ec6 BRL ret_failure +.394eb3 next_2 +.394eb3 22 92 4d 39 jsl $394d92 JSL FDC_READ2FAT12 ; Read the next two sectors of the FAT +.394eb7 90 06 bcc $394ebf BCC fat_fail ; If failed: return error +.394eb9 a2 00 00 ldx #$0000 LDX #0 ; If success: Start scanning at the beginning of the sectors +.394ebc 82 70 ff brl $394e2f BRL chk_cluster ; And start checking from there +.394ebf fat_fail +.394ebf e2 20 sep #$20 SEP #$20 ; set A short +.394ec1 a9 06 lda #$06 LDA #DOS_ERR_FAT +.394ec3 82 00 00 brl $394ec6 BRL ret_failure +.394ec6 ret_failure +.394ec6 e2 20 sep #$20 SEP #$20 ; set A short +.394ec8 85 0e sta $032e STA DOS_STATUS +.394eca 28 plp PLP +.394ecb 2b pld PLD +.394ecc ab plb PLB +.394ecd fa plx PLX +.394ece 18 clc CLC +.394ecf 6b rtl RTL +.394ed0 DOS_FREECLUS32 +.394ed0 8b phb PHB +.394ed1 0b phd PHD +.394ed2 08 php PHP +.394ed3 48 pha PHA ; begin setdbr macro +.394ed4 08 php PHP +.394ed5 e2 20 sep #$20 SEP #$20 ; set A short +.394ed7 a9 00 lda #$00 LDA #0 +.394ed9 48 pha PHA +.394eda ab plb PLB +.394edb 28 plp PLP +.394edc 68 pla PLA ; end setdbr macro +.394edd 48 pha PHA ; begin setdp macro +.394ede 08 php PHP +.394edf c2 20 rep #$20 REP #$20 ; set A long +.394ee1 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394ee4 5b tcd TCD +.394ee5 28 plp PLP +.394ee6 68 pla PLA ; end setdp macro +.394ee7 c2 30 rep #$30 REP #$30 ; set A&X long +.394ee9 a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; Set the location to store the sector +.394eec 85 06 sta $0326 STA BIOS_BUFF_PTR +.394eee a9 38 00 lda #$0038 LDA #`DOS_SECTOR +.394ef1 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394ef3 af 14 a0 38 lda $38a014 LDA FAT_BEGIN_LBA ; Set the LBA to that of the first FAT sector +.394ef7 85 02 sta $0322 STA BIOS_LBA +.394ef9 af 16 a0 38 lda $38a016 LDA FAT_BEGIN_LBA+2 +.394efd 85 04 sta $0324 STA BIOS_LBA+2 +.394eff 22 44 10 00 jsl $001044 JSL GETBLOCK ; Load the sector into memory +.394f03 b0 07 bcs $394f0c BCS initial_entry ; If OK: set the initial entry to check +.394f05 e2 20 sep #$20 SEP #$20 ; set A short +.394f07 a9 06 lda #$06 LDA #DOS_ERR_FAT ; Return a NOFAT error +.394f09 82 6b 00 brl $394f77 BRL ret_failure +.394f0c initial_entry +.394f0c c2 20 rep #$20 REP #$20 ; set A long +.394f0e a9 02 00 lda #$0002 LDA #2 ; Set DOS_CLUS_ID to 2 +.394f11 85 10 sta $0330 STA DOS_CLUS_ID +.394f13 a9 00 00 lda #$0000 LDA #0 +.394f16 85 12 sta $0332 STA DOS_CLUS_ID+2 +.394f18 a2 08 00 ldx #$0008 LDX #8 ; Set the offset to DOS_CLUS_ID * 4 +.394f1b bf 00 a3 38 lda $38a300,x chk_entry LDA DOS_SECTOR,X ; Is the cluster entry == $00000000? +.394f1f d0 06 bne $394f27 BNE next_entry ; No: move to the next entry +.394f21 bf 02 a3 38 lda $38a302,x LDA DOS_SECTOR+2,X +.394f25 f0 36 beq $394f5d BEQ found_free ; Yes: go to allocate and return it +.394f27 e6 10 inc $0330 next_entry INC DOS_CLUS_ID ; Move to the next cluster +.394f29 d0 02 bne $394f2d BNE inc_ptr +.394f2b e6 12 inc $0332 INC DOS_CLUS_ID+2 +.394f2d e8 inx inc_ptr INX ; Update the index to the entry +.394f2e e8 inx INX +.394f2f e8 inx INX +.394f30 e8 inx INX +.394f31 e0 00 02 cpx #$0200 CPX #DOS_SECTOR_SIZE ; Are we outside the sector? +.394f34 90 e5 bcc $394f1b BLT chk_entry ; No: check this entry +.394f36 e6 02 inc $0322 INC BIOS_LBA ; Point to the next sector in the FAT +.394f38 d0 18 bne $394f52 BNE get_block +.394f3a e6 04 inc $0324 INC BIOS_LBA+2 +.394f3c a5 04 lda $0324 LDA BIOS_LBA+2 +.394f3e cf 1a a0 38 cmp $38a01a CMP FAT2_BEGIN_LBA+2 +.394f42 90 0e bcc $394f52 BLT get_block +.394f44 a5 02 lda $0322 LDA BIOS_LBA +.394f46 cf 18 a0 38 cmp $38a018 CMP FAT2_BEGIN_LBA +.394f4a 90 06 bcc $394f52 BLT get_block .394f4c e2 20 sep #$20 SEP #$20 ; set A short -.394f4e a9 00 lda #$00 LDA #0 -.394f50 48 pha PHA -.394f51 ab plb PLB -.394f52 28 plp PLP -.394f53 68 pla PLA ; end setdbr macro -.394f54 48 pha PHA ; begin setdp macro -.394f55 08 php PHP -.394f56 c2 20 rep #$20 REP #$20 ; set A long -.394f58 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394f5b 5b tcd TCD -.394f5c 28 plp PLP -.394f5d 68 pla PLA ; end setdp macro -.394f5e c2 30 rep #$30 REP #$30 ; set A&X long -.394f60 a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS ; Point to the first FAT sector in memory -.394f63 85 06 sta $0326 STA BIOS_BUFF_PTR -.394f65 a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS -.394f68 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394f6a a5 24 lda $0344 LDA DOS_FAT_LBA ; Set the LBA to that of the first sector's -.394f6c 85 02 sta $0322 STA BIOS_LBA -.394f6e a5 26 lda $0346 LDA DOS_FAT_LBA+2 -.394f70 85 04 sta $0324 STA BIOS_LBA+2 -.394f72 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Write the first sector back to the block device -.394f76 90 14 bcc $394f8c BCC done -.394f78 a9 00 a7 lda #$a700 LDA #<>(DOS_FAT_SECTORS+DOS_SECTOR_SIZE) -.394f7b 85 06 sta $0326 STA BIOS_BUFF_PTR -.394f7d a9 38 00 lda #$0038 LDA #`(DOS_FAT_SECTORS+DOS_SECTOR_SIZE) -.394f80 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.394f82 e6 02 inc $0322 INC BIOS_LBA ; Point to the next sector in the FAT -.394f84 d0 02 bne $394f88 BNE put_second -.394f86 e6 04 inc $0324 INC BIOS_LBA+2 -.394f88 22 24 10 00 jsl $001024 put_second JSL PUTBLOCK ; Write the second sector back to the block device -.394f8c 2b pld done PLD -.394f8d ab plb PLB -.394f8e 6b rtl RTL -.394f8f DELCLUSTER12 -.394f8f 8b phb PHB -.394f90 0b phd PHD -.394f91 08 php PHP -.394f92 48 pha PHA ; begin setdbr macro -.394f93 08 php PHP -.394f94 e2 20 sep #$20 SEP #$20 ; set A short -.394f96 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.394f98 48 pha PHA -.394f99 ab plb PLB -.394f9a 28 plp PLP -.394f9b 68 pla PLA ; end setdbr macro -.394f9c 48 pha PHA ; begin setdp macro +.394f4e a9 12 lda #$12 LDA #DOS_ERR_MEDIAFULL ; No: throw a media full error +.394f50 80 25 bra $394f77 BRA ret_failure +.394f52 22 44 10 00 jsl $001044 get_block JSL GETBLOCK ; Attempt to read the block +.394f56 90 1b bcc $394f73 BCC ret_fat_error ; If error: throw a FAT error +.394f58 a2 00 00 ldx #$0000 set_ptr LDX #0 ; Set index pointer to the first entry +.394f5b 80 be bra $394f1b BRA chk_entry ; Check this entry +.394f5d found_free +.394f5d c2 20 rep #$20 REP #$20 ; set A long +.394f5f a9 ff ff lda #$ffff LDA #<>FAT_LAST_CLUSTER ; Set the entry to $0FFFFFFF to make it the last entry in its chain +.394f62 9f 00 a3 38 sta $38a300,x STA DOS_SECTOR,X +.394f66 a9 ff 0f lda #$0fff LDA #(FAT_LAST_CLUSTER >> 16) +.394f69 9f 02 a3 38 sta $38a302,x STA DOS_SECTOR+2,X +.394f6d 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Write the sector back to the block device +.394f71 b0 0d bcs $394f80 BCS ret_success ; If OK: return success +.394f73 ret_fat_error +.394f73 e2 20 sep #$20 SEP #$20 ; set A short +.394f75 a9 06 lda #$06 LDA #DOS_ERR_FAT ; Otherwise: return NOFAT error +.394f77 ret_failure +.394f77 e2 20 sep #$20 SEP #$20 ; set A short +.394f79 85 0e sta $032e STA DOS_STATUS +.394f7b 28 plp PLP +.394f7c 2b pld PLD +.394f7d ab plb PLB +.394f7e 18 clc CLC +.394f7f 6b rtl RTL +.394f80 ret_success +.394f80 e2 20 sep #$20 SEP #$20 ; set A short +.394f82 64 0e stz $032e STZ DOS_STATUS +.394f84 28 plp PLP +.394f85 2b pld PLD +.394f86 ab plb PLB +.394f87 38 sec SEC +.394f88 6b rtl RTL +.394f89 DELCLUSTER +.394f89 e2 20 sep #$20 SEP #$20 ; set A short +.394f8b af 01 a0 38 lda $38a001 LDA @l FILE_SYSTEM ; Get the file system code +.394f8f c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? +.394f91 d0 04 bne $394f97 BNE fat32 ; No: assume it's FAT32 +.394f93 5c e1 4f 39 jmp $394fe1 fat12 JML DELCLUSTER12 +.394f97 4c 2f 50 jmp $39502f fat32 JMP DELCLUSTER32 +.394f9a WRITEFAT12 +.394f9a 8b phb PHB +.394f9b 0b phd PHD +.394f9c 48 pha PHA ; begin setdbr macro .394f9d 08 php PHP -.394f9e c2 20 rep #$20 REP #$20 ; set A long -.394fa0 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394fa3 5b tcd TCD +.394f9e e2 20 sep #$20 SEP #$20 ; set A short +.394fa0 a9 00 lda #$00 LDA #0 +.394fa2 48 pha PHA +.394fa3 ab plb PLB .394fa4 28 plp PLP -.394fa5 68 pla PLA ; end setdp macro -.394fa6 c2 30 rep #$30 REP #$30 ; set A&X long -.394fa8 22 29 4b 39 jsl $394b29 JSL FATFORCLUSTER12 -.394fac 8a txa TXA ; Check to see if the index is odd or even -.394fad 89 01 00 bit #$0001 BIT #1 -.394fb0 d0 08 bne $394fba BNE is_odd -.394fb2 bd 00 a5 lda $38a500,x is_even LDA DOS_FAT_SECTORS,X ; Get the two bytes from the FAT -.394fb5 29 00 f0 and #$f000 AND #$F000 ; Mask out the lower 12 bits -.394fb8 80 06 bra $394fc0 BRA save_update -.394fba bd 00 a5 lda $38a500,x is_odd LDA DOS_FAT_SECTORS,X ; Get the two bytes from the FAT -.394fbd 29 0f 00 and #$000f AND #$000F ; Mask out the upper 12 bits -.394fc0 9d 00 a5 sta $38a500,x save_update STA DOS_FAT_SECTORS,X ; And write it back -.394fc3 22 48 4f 39 jsl $394f48 JSL WRITEFAT12 ; Write the two FAT12 sectors back to the drive -.394fc7 b0 0b bcs $394fd4 BCS ret_success -.394fc9 ret_failure -.394fc9 e2 20 sep #$20 SEP #$20 ; set A short -.394fcb a9 06 lda #$06 LDA #DOS_ERR_FAT -.394fcd 85 0e sta $032e STA DOS_STATUS -.394fcf 28 plp PLP -.394fd0 2b pld PLD -.394fd1 ab plb PLB -.394fd2 18 clc CLC -.394fd3 6b rtl RTL -.394fd4 ret_success -.394fd4 e2 20 sep #$20 SEP #$20 ; set A short -.394fd6 64 0e stz $032e STZ DOS_STATUS -.394fd8 28 plp PLP -.394fd9 2b pld PLD -.394fda ab plb PLB -.394fdb 38 sec SEC -.394fdc 6b rtl RTL -.394fdd DELCLUSTER32 -.394fdd 8b phb PHB -.394fde 0b phd PHD -.394fdf 08 php PHP -.394fe0 c2 30 rep #$30 REP #$30 ; set A&X long -.394fe2 48 pha PHA ; begin setdbr macro +.394fa5 68 pla PLA ; end setdbr macro +.394fa6 48 pha PHA ; begin setdp macro +.394fa7 08 php PHP +.394fa8 c2 20 rep #$20 REP #$20 ; set A long +.394faa a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394fad 5b tcd TCD +.394fae 28 plp PLP +.394faf 68 pla PLA ; end setdp macro +.394fb0 c2 30 rep #$30 REP #$30 ; set A&X long +.394fb2 a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS ; Point to the first FAT sector in memory +.394fb5 85 06 sta $0326 STA BIOS_BUFF_PTR +.394fb7 a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS +.394fba 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394fbc a5 24 lda $0344 LDA DOS_FAT_LBA ; Set the LBA to that of the first sector's +.394fbe 85 02 sta $0322 STA BIOS_LBA +.394fc0 a5 26 lda $0346 LDA DOS_FAT_LBA+2 +.394fc2 85 04 sta $0324 STA BIOS_LBA+2 +.394fc4 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Write the first sector back to the block device +.394fc8 90 14 bcc $394fde BCC done +.394fca a9 00 a7 lda #$a700 LDA #<>(DOS_FAT_SECTORS+DOS_SECTOR_SIZE) +.394fcd 85 06 sta $0326 STA BIOS_BUFF_PTR +.394fcf a9 38 00 lda #$0038 LDA #`(DOS_FAT_SECTORS+DOS_SECTOR_SIZE) +.394fd2 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.394fd4 e6 02 inc $0322 INC BIOS_LBA ; Point to the next sector in the FAT +.394fd6 d0 02 bne $394fda BNE put_second +.394fd8 e6 04 inc $0324 INC BIOS_LBA+2 +.394fda 22 24 10 00 jsl $001024 put_second JSL PUTBLOCK ; Write the second sector back to the block device +.394fde 2b pld done PLD +.394fdf ab plb PLB +.394fe0 6b rtl RTL +.394fe1 DELCLUSTER12 +.394fe1 8b phb PHB +.394fe2 0b phd PHD .394fe3 08 php PHP -.394fe4 e2 20 sep #$20 SEP #$20 ; set A short -.394fe6 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.394fe8 48 pha PHA -.394fe9 ab plb PLB -.394fea 28 plp PLP -.394feb 68 pla PLA ; end setdbr macro -.394fec 48 pha PHA ; begin setdp macro -.394fed 08 php PHP -.394fee c2 20 rep #$20 REP #$20 ; set A long -.394ff0 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.394ff3 5b tcd TCD -.394ff4 28 plp PLP -.394ff5 68 pla PLA ; end setdp macro -.394ff6 22 91 4b 39 jsl $394b91 JSL FATFORCLUSTER32 -.394ffa a9 00 00 lda #$0000 LDA #0 -.394ffd 9d 00 a5 sta $38a500,x STA DOS_FAT_SECTORS,X ; Set the cluster entry to 0 -.395000 9d 02 a5 sta $38a502,x STA DOS_FAT_SECTORS+2,X -.395003 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Write the sector back to the block device -.395007 b0 0b bcs $395014 BCS ret_success -.395009 ret_failure -.395009 e2 20 sep #$20 SEP #$20 ; set A short -.39500b a9 06 lda #$06 LDA #DOS_ERR_FAT -.39500d 85 0e sta $032e STA DOS_STATUS -.39500f 28 plp PLP -.395010 2b pld PLD -.395011 ab plb PLB -.395012 18 clc CLC -.395013 6b rtl RTL -.395014 ret_success -.395014 e2 20 sep #$20 SEP #$20 ; set A short -.395016 64 0e stz $032e STZ DOS_STATUS -.395018 28 plp PLP -.395019 2b pld PLD -.39501a ab plb PLB -.39501b 38 sec SEC -.39501c 6b rtl RTL -.39501d DOS_APPENDCLUS -.39501d 8b phb PHB -.39501e 0b phd PHD -.39501f 08 php PHP -.395020 48 pha PHA ; begin setdbr macro -.395021 08 php PHP -.395022 e2 20 sep #$20 SEP #$20 ; set A short -.395024 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395026 48 pha PHA -.395027 ab plb PLB -.395028 28 plp PLP -.395029 68 pla PLA ; end setdbr macro -.39502a 48 pha PHA ; begin setdp macro -.39502b 08 php PHP -.39502c c2 20 rep #$20 REP #$20 ; set A long -.39502e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395031 5b tcd TCD -.395032 28 plp PLP -.395033 68 pla PLA ; end setdp macro -.395034 c2 30 rep #$30 REP #$30 ; set A&X long -.395036 a5 12 lda $0332 LDA DOS_CLUS_ID+2 ; Save the cluster number for later -.395038 48 pha PHA -.395039 a5 10 lda $0330 LDA DOS_CLUS_ID -.39503b 48 pha PHA -.39503c 22 15 4d 39 jsl $394d15 JSL DOS_FREECLUS ; Find a free cluster on the block device -.395040 b0 09 bcs $39504b BCS save_cluster ; If we got a cluster, write the data to it -.395042 68 pla fail_cleanup PLA ; Restore the cluster of the file -.395043 85 10 sta $0330 STA DOS_CLUS_ID -.395045 68 pla PLA -.395046 85 12 sta $0332 STA DOS_CLUS_ID+2 -.395048 82 7d 00 brl $3950c8 BRL pass_failure ; Pass the failure back up the chain -.39504b a5 10 lda $0330 save_cluster LDA DOS_CLUS_ID -.39504d 8d 36 a0 sta $38a036 STA DOS_NEW_CLUSTER -.395050 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.395052 8d 38 a0 sta $38a038 STA DOS_NEW_CLUSTER+2 -.395055 22 29 48 39 jsl $394829 JSL DOS_PUTCLUSTER ; Write the data to the free cluster -.395059 90 e7 bcc $395042 BCC fail_cleanup ; If failure: clean up stack and pass the failure up -.39505b 68 pla PLA ; Restore the cluster of the file -.39505c 85 10 sta $0330 STA DOS_CLUS_ID -.39505e 68 pla PLA -.39505f 85 12 sta $0332 STA DOS_CLUS_ID+2 -.395061 22 fc 4b 39 jsl $394bfc walk_loop JSL NEXTCLUSTER ; Try to get the next cluster in the chain -.395065 b0 fa bcs $395061 BCS walk_loop ; If found a cluster, keep walking the chain -.395067 e2 20 sep #$20 SEP #$20 ; set A short -.395069 af 01 a0 38 lda $38a001 LDA @l FILE_SYSTEM ; Get the file system code -.39506d c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? -.39506f d0 3d bne $3950ae BNE fat32 ; No: assume it's FAT32 -.395071 fat12 -.395071 c2 20 rep #$20 REP #$20 ; set A long -.395073 22 b6 4a 39 jsl $394ab6 JSL ENTRYFORCLUS12 ; Make sure we have the right offset for the cluster -.395077 a5 10 lda $0330 LDA DOS_CLUS_ID ; Check to see if the last cluster ID is even or odd -.395079 89 01 00 bit #$0001 BIT #1 -.39507c d0 11 bne $39508f BNE is_odd -.39507e ad 36 a0 lda $38a036 is_even LDA DOS_NEW_CLUSTER ; Handle the even case (change the lower 12 bits) -.395081 29 ff 0f and #$0fff AND #$0FFF -.395084 8d 36 a0 sta $38a036 STA DOS_NEW_CLUSTER -.395087 bd 00 a5 lda $38a500,x LDA DOS_FAT_SECTORS,X -.39508a 29 00 f0 and #$f000 AND #$F000 -.39508d 80 10 bra $39509f BRA update_fat12 -.39508f ad 36 a0 lda $38a036 is_odd LDA DOS_NEW_CLUSTER ; Handle the odd case (change the upper 12 bits) -.395092 0a asl a ASL A -.395093 0a asl a ASL A -.395094 0a asl a ASL A -.395095 0a asl a ASL A -.395096 8d 36 a0 sta $38a036 STA DOS_NEW_CLUSTER -.395099 bd 00 a5 lda $38a500,x LDA DOS_FAT_SECTORS,X -.39509c 29 0f 00 and #$000f AND #$000F -.39509f 0d 36 a0 ora $38a036 update_fat12 ORA DOS_NEW_CLUSTER -.3950a2 9d 00 a5 sta $38a500,x STA DOS_FAT_SECTORS,X -.3950a5 22 48 4f 39 jsl $394f48 JSL WRITEFAT12 ; Write the two FAT12 sectors back to the drive -.3950a9 b0 22 bcs $3950cd BCS ret_success -.3950ab 82 1a 00 brl $3950c8 BRL pass_failure -.3950ae fat32 -.3950ae c2 20 rep #$20 REP #$20 ; set A long -.3950b0 ad 36 a0 lda $38a036 LDA DOS_NEW_CLUSTER ; Write the ID of the new cluster to the end of the chain -.3950b3 9d 00 a5 sta $38a500,x STA DOS_FAT_SECTORS,X -.3950b6 ad 38 a0 lda $38a038 LDA DOS_NEW_CLUSTER+2 -.3950b9 9d 02 a5 sta $38a502,x STA DOS_FAT_SECTORS+2,X -.3950bc 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Write the FAT sector back (assumes BIOS_LBA and BIOS_BUFF_PTR haven't changed) -.3950c0 b0 0b bcs $3950cd BCS ret_success -.3950c2 e2 20 sep #$20 SEP #$20 ; set A short -.3950c4 a9 06 lda #$06 LDA #DOS_ERR_FAT ; Problem working with the FAT -.3950c6 85 0e sta $032e STA DOS_STATUS -.3950c8 28 plp pass_failure PLP -.3950c9 2b pld PLD -.3950ca ab plb PLB -.3950cb 18 clc CLC -.3950cc 6b rtl RTL -.3950cd ret_success -.3950cd e2 20 sep #$20 SEP #$20 ; set A short -.3950cf 64 0e stz $032e STZ DOS_STATUS -.3950d1 28 plp PLP -.3950d2 2b pld PLD -.3950d3 ab plb PLB -.3950d4 38 sec SEC -.3950d5 6b rtl RTL -.3950d6 BCD2BIN -.3950d6 8b phb PHB -.3950d7 0b phd PHD -.3950d8 08 php PHP -.3950d9 48 pha PHA ; begin setdbr macro -.3950da 08 php PHP -.3950db e2 20 sep #$20 SEP #$20 ; set A short -.3950dd a9 00 lda #$00 LDA #0 -.3950df 48 pha PHA -.3950e0 ab plb PLB -.3950e1 28 plp PLP -.3950e2 68 pla PLA ; end setdbr macro -.3950e3 48 pha PHA ; begin setdp macro -.3950e4 08 php PHP -.3950e5 c2 20 rep #$20 REP #$20 ; set A long -.3950e7 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3950ea 5b tcd TCD -.3950eb 28 plp PLP -.3950ec 68 pla PLA ; end setdp macro -.3950ed c2 30 rep #$30 REP #$30 ; set A&X long -.3950ef 85 28 sta $0348 STA DOS_TEMP -.3950f1 29 0f 00 and #$000f AND #$000F -.3950f4 85 2a sta $034a STA DOS_TEMP+2 -.3950f6 a5 28 lda $0348 LDA DOS_TEMP -.3950f8 4a lsr a LSR A -.3950f9 4a lsr a LSR A -.3950fa 4a lsr a LSR A -.3950fb 4a lsr a LSR A -.3950fc 85 28 sta $0348 STA DOS_TEMP -.3950fe 29 0f 00 and #$000f AND #$000F -.395101 8f 00 01 00 sta $000100 STA @l UNSIGNED_MULT_A_LO -.395105 a9 0a 00 lda #$000a LDA #10 -.395108 8f 02 01 00 sta $000102 STA @l UNSIGNED_MULT_B_LO -.39510c af 04 01 00 lda $000104 LDA @l UNSIGNED_MULT_AL_LO -.395110 18 clc CLC -.395111 65 2a adc $034a ADC DOS_TEMP+2 -.395113 85 2a sta $034a STA DOS_TEMP+2 -.395115 a5 28 lda $0348 LDA DOS_TEMP -.395117 4a lsr a LSR A -.395118 4a lsr a LSR A -.395119 4a lsr a LSR A -.39511a 4a lsr a LSR A -.39511b 85 28 sta $0348 STA DOS_TEMP -.39511d 29 0f 00 and #$000f AND #$000F -.395120 8f 00 01 00 sta $000100 STA @l UNSIGNED_MULT_A_LO -.395124 a9 64 00 lda #$0064 LDA #100 -.395127 8f 02 01 00 sta $000102 STA @l UNSIGNED_MULT_B_LO -.39512b af 04 01 00 lda $000104 LDA @l UNSIGNED_MULT_AL_LO -.39512f 18 clc CLC -.395130 65 2a adc $034a ADC DOS_TEMP+2 -.395132 85 2a sta $034a STA DOS_TEMP+2 -.395134 a5 28 lda $0348 LDA DOS_TEMP -.395136 4a lsr a LSR A -.395137 4a lsr a LSR A -.395138 4a lsr a LSR A -.395139 4a lsr a LSR A -.39513a 29 0f 00 and #$000f AND #$000F -.39513d 8f 00 01 00 sta $000100 STA @l UNSIGNED_MULT_A_LO -.395141 a9 e8 03 lda #$03e8 LDA #1000 -.395144 8f 02 01 00 sta $000102 STA @l UNSIGNED_MULT_B_LO -.395148 af 04 01 00 lda $000104 LDA @l UNSIGNED_MULT_AL_LO -.39514c 18 clc CLC -.39514d 65 2a adc $034a ADC DOS_TEMP+2 -.39514f 28 plp PLP -.395150 2b pld PLD -.395151 ab plb PLB -.395152 6b rtl RTL -.395153 DOS_RTCCREATE -.395153 8b phb PHB -.395154 0b phd PHD -.395155 08 php PHP -.395156 48 pha PHA ; begin setdbr macro -.395157 08 php PHP -.395158 e2 20 sep #$20 SEP #$20 ; set A short -.39515a a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.39515c 48 pha PHA -.39515d ab plb PLB -.39515e 28 plp PLP -.39515f 68 pla PLA ; end setdbr macro -.395160 48 pha PHA ; begin setdp macro -.395161 08 php PHP -.395162 c2 20 rep #$20 REP #$20 ; set A long -.395164 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395167 5b tcd TCD -.395168 28 plp PLP -.395169 68 pla PLA ; end setdp macro -.39516a c2 10 rep #$10 REP #$10 ; set X long -.39516c e2 20 sep #$20 SEP #$20 ; set A short -.39516e af 0e 08 af lda $af080e LDA @l RTC_CTRL ; Turn off the updates to the clock -.395172 09 08 ora #$08 ORA #%00001000 -.395174 8f 0e 08 af sta $af080e STA @l RTC_CTRL -.395178 af 0f 08 af lda $af080f LDA @l RTC_CENTURY -.39517c 85 29 sta $0349 STA DOS_TEMP+1 -.39517e af 0a 08 af lda $af080a LDA @l RTC_YEAR ; Get the year -.395182 85 28 sta $0348 STA DOS_TEMP -.395184 c2 20 rep #$20 REP #$20 ; set A long +.394fe4 48 pha PHA ; begin setdbr macro +.394fe5 08 php PHP +.394fe6 e2 20 sep #$20 SEP #$20 ; set A short +.394fe8 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.394fea 48 pha PHA +.394feb ab plb PLB +.394fec 28 plp PLP +.394fed 68 pla PLA ; end setdbr macro +.394fee 48 pha PHA ; begin setdp macro +.394fef 08 php PHP +.394ff0 c2 20 rep #$20 REP #$20 ; set A long +.394ff2 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.394ff5 5b tcd TCD +.394ff6 28 plp PLP +.394ff7 68 pla PLA ; end setdp macro +.394ff8 c2 30 rep #$30 REP #$30 ; set A&X long +.394ffa 22 7b 4b 39 jsl $394b7b JSL FATFORCLUSTER12 +.394ffe 8a txa TXA ; Check to see if the index is odd or even +.394fff 89 01 00 bit #$0001 BIT #1 +.395002 d0 08 bne $39500c BNE is_odd +.395004 bd 00 a5 lda $38a500,x is_even LDA DOS_FAT_SECTORS,X ; Get the two bytes from the FAT +.395007 29 00 f0 and #$f000 AND #$F000 ; Mask out the lower 12 bits +.39500a 80 06 bra $395012 BRA save_update +.39500c bd 00 a5 lda $38a500,x is_odd LDA DOS_FAT_SECTORS,X ; Get the two bytes from the FAT +.39500f 29 0f 00 and #$000f AND #$000F ; Mask out the upper 12 bits +.395012 9d 00 a5 sta $38a500,x save_update STA DOS_FAT_SECTORS,X ; And write it back +.395015 22 9a 4f 39 jsl $394f9a JSL WRITEFAT12 ; Write the two FAT12 sectors back to the drive +.395019 b0 0b bcs $395026 BCS ret_success +.39501b ret_failure +.39501b e2 20 sep #$20 SEP #$20 ; set A short +.39501d a9 06 lda #$06 LDA #DOS_ERR_FAT +.39501f 85 0e sta $032e STA DOS_STATUS +.395021 28 plp PLP +.395022 2b pld PLD +.395023 ab plb PLB +.395024 18 clc CLC +.395025 6b rtl RTL +.395026 ret_success +.395026 e2 20 sep #$20 SEP #$20 ; set A short +.395028 64 0e stz $032e STZ DOS_STATUS +.39502a 28 plp PLP +.39502b 2b pld PLD +.39502c ab plb PLB +.39502d 38 sec SEC +.39502e 6b rtl RTL +.39502f DELCLUSTER32 +.39502f 8b phb PHB +.395030 0b phd PHD +.395031 08 php PHP +.395032 c2 30 rep #$30 REP #$30 ; set A&X long +.395034 48 pha PHA ; begin setdbr macro +.395035 08 php PHP +.395036 e2 20 sep #$20 SEP #$20 ; set A short +.395038 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.39503a 48 pha PHA +.39503b ab plb PLB +.39503c 28 plp PLP +.39503d 68 pla PLA ; end setdbr macro +.39503e 48 pha PHA ; begin setdp macro +.39503f 08 php PHP +.395040 c2 20 rep #$20 REP #$20 ; set A long +.395042 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395045 5b tcd TCD +.395046 28 plp PLP +.395047 68 pla PLA ; end setdp macro +.395048 22 e3 4b 39 jsl $394be3 JSL FATFORCLUSTER32 +.39504c a9 00 00 lda #$0000 LDA #0 +.39504f 9d 00 a5 sta $38a500,x STA DOS_FAT_SECTORS,X ; Set the cluster entry to 0 +.395052 9d 02 a5 sta $38a502,x STA DOS_FAT_SECTORS+2,X +.395055 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Write the sector back to the block device +.395059 b0 0b bcs $395066 BCS ret_success +.39505b ret_failure +.39505b e2 20 sep #$20 SEP #$20 ; set A short +.39505d a9 06 lda #$06 LDA #DOS_ERR_FAT +.39505f 85 0e sta $032e STA DOS_STATUS +.395061 28 plp PLP +.395062 2b pld PLD +.395063 ab plb PLB +.395064 18 clc CLC +.395065 6b rtl RTL +.395066 ret_success +.395066 e2 20 sep #$20 SEP #$20 ; set A short +.395068 64 0e stz $032e STZ DOS_STATUS +.39506a 28 plp PLP +.39506b 2b pld PLD +.39506c ab plb PLB +.39506d 38 sec SEC +.39506e 6b rtl RTL +.39506f DOS_APPENDCLUS +.39506f 8b phb PHB +.395070 0b phd PHD +.395071 08 php PHP +.395072 48 pha PHA ; begin setdbr macro +.395073 08 php PHP +.395074 e2 20 sep #$20 SEP #$20 ; set A short +.395076 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395078 48 pha PHA +.395079 ab plb PLB +.39507a 28 plp PLP +.39507b 68 pla PLA ; end setdbr macro +.39507c 48 pha PHA ; begin setdp macro +.39507d 08 php PHP +.39507e c2 20 rep #$20 REP #$20 ; set A long +.395080 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395083 5b tcd TCD +.395084 28 plp PLP +.395085 68 pla PLA ; end setdp macro +.395086 c2 30 rep #$30 REP #$30 ; set A&X long +.395088 a5 12 lda $0332 LDA DOS_CLUS_ID+2 ; Save the cluster number for later +.39508a 48 pha PHA +.39508b a5 10 lda $0330 LDA DOS_CLUS_ID +.39508d 48 pha PHA +.39508e 22 67 4d 39 jsl $394d67 JSL DOS_FREECLUS ; Find a free cluster on the block device +.395092 b0 09 bcs $39509d BCS save_cluster ; If we got a cluster, write the data to it +.395094 68 pla fail_cleanup PLA ; Restore the cluster of the file +.395095 85 10 sta $0330 STA DOS_CLUS_ID +.395097 68 pla PLA +.395098 85 12 sta $0332 STA DOS_CLUS_ID+2 +.39509a 82 7d 00 brl $39511a BRL pass_failure ; Pass the failure back up the chain +.39509d a5 10 lda $0330 save_cluster LDA DOS_CLUS_ID +.39509f 8d 36 a0 sta $38a036 STA DOS_NEW_CLUSTER +.3950a2 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.3950a4 8d 38 a0 sta $38a038 STA DOS_NEW_CLUSTER+2 +.3950a7 22 7b 48 39 jsl $39487b JSL DOS_PUTCLUSTER ; Write the data to the free cluster +.3950ab 90 e7 bcc $395094 BCC fail_cleanup ; If failure: clean up stack and pass the failure up +.3950ad 68 pla PLA ; Restore the cluster of the file +.3950ae 85 10 sta $0330 STA DOS_CLUS_ID +.3950b0 68 pla PLA +.3950b1 85 12 sta $0332 STA DOS_CLUS_ID+2 +.3950b3 22 4e 4c 39 jsl $394c4e walk_loop JSL NEXTCLUSTER ; Try to get the next cluster in the chain +.3950b7 b0 fa bcs $3950b3 BCS walk_loop ; If found a cluster, keep walking the chain +.3950b9 e2 20 sep #$20 SEP #$20 ; set A short +.3950bb af 01 a0 38 lda $38a001 LDA @l FILE_SYSTEM ; Get the file system code +.3950bf c9 00 cmp #$00 CMP #PART_TYPE_FAT12 ; Is it FAT12? +.3950c1 d0 3d bne $395100 BNE fat32 ; No: assume it's FAT32 +.3950c3 fat12 +.3950c3 c2 20 rep #$20 REP #$20 ; set A long +.3950c5 22 08 4b 39 jsl $394b08 JSL ENTRYFORCLUS12 ; Make sure we have the right offset for the cluster +.3950c9 a5 10 lda $0330 LDA DOS_CLUS_ID ; Check to see if the last cluster ID is even or odd +.3950cb 89 01 00 bit #$0001 BIT #1 +.3950ce d0 11 bne $3950e1 BNE is_odd +.3950d0 ad 36 a0 lda $38a036 is_even LDA DOS_NEW_CLUSTER ; Handle the even case (change the lower 12 bits) +.3950d3 29 ff 0f and #$0fff AND #$0FFF +.3950d6 8d 36 a0 sta $38a036 STA DOS_NEW_CLUSTER +.3950d9 bd 00 a5 lda $38a500,x LDA DOS_FAT_SECTORS,X +.3950dc 29 00 f0 and #$f000 AND #$F000 +.3950df 80 10 bra $3950f1 BRA update_fat12 +.3950e1 ad 36 a0 lda $38a036 is_odd LDA DOS_NEW_CLUSTER ; Handle the odd case (change the upper 12 bits) +.3950e4 0a asl a ASL A +.3950e5 0a asl a ASL A +.3950e6 0a asl a ASL A +.3950e7 0a asl a ASL A +.3950e8 8d 36 a0 sta $38a036 STA DOS_NEW_CLUSTER +.3950eb bd 00 a5 lda $38a500,x LDA DOS_FAT_SECTORS,X +.3950ee 29 0f 00 and #$000f AND #$000F +.3950f1 0d 36 a0 ora $38a036 update_fat12 ORA DOS_NEW_CLUSTER +.3950f4 9d 00 a5 sta $38a500,x STA DOS_FAT_SECTORS,X +.3950f7 22 9a 4f 39 jsl $394f9a JSL WRITEFAT12 ; Write the two FAT12 sectors back to the drive +.3950fb b0 22 bcs $39511f BCS ret_success +.3950fd 82 1a 00 brl $39511a BRL pass_failure +.395100 fat32 +.395100 c2 20 rep #$20 REP #$20 ; set A long +.395102 ad 36 a0 lda $38a036 LDA DOS_NEW_CLUSTER ; Write the ID of the new cluster to the end of the chain +.395105 9d 00 a5 sta $38a500,x STA DOS_FAT_SECTORS,X +.395108 ad 38 a0 lda $38a038 LDA DOS_NEW_CLUSTER+2 +.39510b 9d 02 a5 sta $38a502,x STA DOS_FAT_SECTORS+2,X +.39510e 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Write the FAT sector back (assumes BIOS_LBA and BIOS_BUFF_PTR haven't changed) +.395112 b0 0b bcs $39511f BCS ret_success +.395114 e2 20 sep #$20 SEP #$20 ; set A short +.395116 a9 06 lda #$06 LDA #DOS_ERR_FAT ; Problem working with the FAT +.395118 85 0e sta $032e STA DOS_STATUS +.39511a 28 plp pass_failure PLP +.39511b 2b pld PLD +.39511c ab plb PLB +.39511d 18 clc CLC +.39511e 6b rtl RTL +.39511f ret_success +.39511f e2 20 sep #$20 SEP #$20 ; set A short +.395121 64 0e stz $032e STZ DOS_STATUS +.395123 28 plp PLP +.395124 2b pld PLD +.395125 ab plb PLB +.395126 38 sec SEC +.395127 6b rtl RTL +.395128 BCD2BIN +.395128 8b phb PHB +.395129 0b phd PHD +.39512a 08 php PHP +.39512b 48 pha PHA ; begin setdbr macro +.39512c 08 php PHP +.39512d e2 20 sep #$20 SEP #$20 ; set A short +.39512f a9 00 lda #$00 LDA #0 +.395131 48 pha PHA +.395132 ab plb PLB +.395133 28 plp PLP +.395134 68 pla PLA ; end setdbr macro +.395135 48 pha PHA ; begin setdp macro +.395136 08 php PHP +.395137 c2 20 rep #$20 REP #$20 ; set A long +.395139 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39513c 5b tcd TCD +.39513d 28 plp PLP +.39513e 68 pla PLA ; end setdp macro +.39513f c2 30 rep #$30 REP #$30 ; set A&X long +.395141 85 28 sta $0348 STA DOS_TEMP +.395143 29 0f 00 and #$000f AND #$000F +.395146 85 2a sta $034a STA DOS_TEMP+2 +.395148 a5 28 lda $0348 LDA DOS_TEMP +.39514a 4a lsr a LSR A +.39514b 4a lsr a LSR A +.39514c 4a lsr a LSR A +.39514d 4a lsr a LSR A +.39514e 85 28 sta $0348 STA DOS_TEMP +.395150 29 0f 00 and #$000f AND #$000F +.395153 8f 00 01 00 sta $000100 STA @l UNSIGNED_MULT_A_LO +.395157 a9 0a 00 lda #$000a LDA #10 +.39515a 8f 02 01 00 sta $000102 STA @l UNSIGNED_MULT_B_LO +.39515e af 04 01 00 lda $000104 LDA @l UNSIGNED_MULT_AL_LO +.395162 18 clc CLC +.395163 65 2a adc $034a ADC DOS_TEMP+2 +.395165 85 2a sta $034a STA DOS_TEMP+2 +.395167 a5 28 lda $0348 LDA DOS_TEMP +.395169 4a lsr a LSR A +.39516a 4a lsr a LSR A +.39516b 4a lsr a LSR A +.39516c 4a lsr a LSR A +.39516d 85 28 sta $0348 STA DOS_TEMP +.39516f 29 0f 00 and #$000f AND #$000F +.395172 8f 00 01 00 sta $000100 STA @l UNSIGNED_MULT_A_LO +.395176 a9 64 00 lda #$0064 LDA #100 +.395179 8f 02 01 00 sta $000102 STA @l UNSIGNED_MULT_B_LO +.39517d af 04 01 00 lda $000104 LDA @l UNSIGNED_MULT_AL_LO +.395181 18 clc CLC +.395182 65 2a adc $034a ADC DOS_TEMP+2 +.395184 85 2a sta $034a STA DOS_TEMP+2 .395186 a5 28 lda $0348 LDA DOS_TEMP -.395188 22 d6 50 39 jsl $3950d6 JSL BCD2BIN ; Convert it to binary -.39518c 85 28 sta $0348 STA DOS_TEMP -.39518e 38 sec SEC ; Year is relative to 1980 -.39518f e9 bc 07 sbc #$07bc SBC #1980 -.395192 c2 20 rep #$20 REP #$20 ; set A long -.395194 0a asl a ASL A -.395195 0a asl a ASL A -.395196 0a asl a ASL A -.395197 0a asl a ASL A -.395198 0a asl a ASL A -.395199 0a asl a ASL A -.39519a 0a asl a ASL A -.39519b 0a asl a ASL A -.39519c 0a asl a ASL A -.39519d 29 00 fe and #$fe00 AND #$FE00 -.3951a0 a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; And save it to the creation date field -.3951a3 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3951a5 e2 20 sep #$20 SEP #$20 ; set A short -.3951a7 af 09 08 af lda $af0809 LDA @l RTC_MONTH ; Get the month -.3951ab c2 20 rep #$20 REP #$20 ; set A long -.3951ad 29 ff 00 and #$00ff AND #$00FF -.3951b0 22 d6 50 39 jsl $3950d6 JSL BCD2BIN ; Convert it to binary -.3951b4 29 ff 00 and #$00ff AND #$00FF ; Move the year to bits 15 - 9 -.3951b7 0a asl a ASL A -.3951b8 0a asl a ASL A -.3951b9 0a asl a ASL A -.3951ba 0a asl a ASL A -.3951bb 0a asl a ASL A -.3951bc 29 e0 01 and #$01e0 AND #$01E0 ; Make sure only the month is covered -.3951bf a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; And save it to the creation date field -.3951c2 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y -.3951c4 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3951c6 e2 20 sep #$20 SEP #$20 ; set A short -.3951c8 af 06 08 af lda $af0806 LDA @l RTC_DAY ; Get the day -.3951cc c2 20 rep #$20 REP #$20 ; set A long -.3951ce 29 ff 00 and #$00ff AND #$00FF -.3951d1 22 d6 50 39 jsl $3950d6 JSL BCD2BIN ; Convert it to binary -.3951d5 29 1f 00 and #$001f AND #$001F ; Make sure only the day is covered -.3951d8 a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; And save it to the creation date field -.3951db 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y -.3951dd 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3951df e2 20 sep #$20 SEP #$20 ; set A short -.3951e1 af 04 08 af lda $af0804 LDA @l RTC_HRS ; Get the hour -.3951e5 29 1f and #$1f AND #$1F ; Trim AM/PM bit -.3951e7 c2 20 rep #$20 REP #$20 ; set A long -.3951e9 29 ff 00 and #$00ff AND #$00FF -.3951ec 22 d6 50 39 jsl $3950d6 JSL BCD2BIN ; Convert it to binary -.3951f0 c2 20 rep #$20 REP #$20 ; set A long -.3951f2 0a asl a ASL A -.3951f3 0a asl a ASL A -.3951f4 0a asl a ASL A -.3951f5 0a asl a ASL A -.3951f6 0a asl a ASL A -.3951f7 0a asl a ASL A -.3951f8 0a asl a ASL A -.3951f9 0a asl a ASL A -.3951fa 0a asl a ASL A -.3951fb 0a asl a ASL A -.3951fc 0a asl a ASL A -.3951fd 29 00 f8 and #$f800 AND #$F800 -.395200 a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME ; And save it to the creation time field -.395203 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395205 e2 20 sep #$20 SEP #$20 ; set A short -.395207 af 02 08 af lda $af0802 LDA @l RTC_MIN ; Get the minute -.39520b c2 20 rep #$20 REP #$20 ; set A long -.39520d 29 ff 00 and #$00ff AND #$00FF -.395210 22 d6 50 39 jsl $3950d6 JSL BCD2BIN ; Convert it to binary -.395214 c2 20 rep #$20 REP #$20 ; set A long -.395216 0a asl a ASL A -.395217 0a asl a ASL A -.395218 0a asl a ASL A -.395219 0a asl a ASL A -.39521a 0a asl a ASL A -.39521b 29 e0 07 and #$07e0 AND #$07E0 -.39521e a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME ; And save it to the creation time field -.395221 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y -.395223 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395225 e2 20 sep #$20 SEP #$20 ; set A short -.395227 af 00 08 af lda $af0800 LDA @l RTC_SEC ; Get the second -.39522b c2 20 rep #$20 REP #$20 ; set A long -.39522d 29 ff 00 and #$00ff AND #$00FF -.395230 22 d6 50 39 jsl $3950d6 JSL BCD2BIN ; Convert it to binary -.395234 c2 20 rep #$20 REP #$20 ; set A long -.395236 29 1f 00 and #$001f AND #$001F -.395239 a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME ; And save it to the creation time field -.39523c 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y -.39523e 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395240 af 0e 08 af lda $af080e LDA @l RTC_CTRL ; Turn on the updates again -.395244 29 f7 00 and #$00f7 AND #%11110111 -.395247 8f 0e 08 af sta $af080e STA @l RTC_CTRL -.39524b 28 plp PLP -.39524c 2b pld PLD -.39524d ab plb PLB -.39524e 6b rtl RTL -.39524f DOS_CREATE -.39524f 8b phb PHB -.395250 0b phd PHD -.395251 08 php PHP -.395252 48 pha PHA ; begin setdbr macro -.395253 08 php PHP -.395254 e2 20 sep #$20 SEP #$20 ; set A short -.395256 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395258 48 pha PHA -.395259 ab plb PLB -.39525a 28 plp PLP -.39525b 68 pla PLA ; end setdbr macro -.39525c 48 pha PHA ; begin setdp macro -.39525d 08 php PHP -.39525e c2 20 rep #$20 REP #$20 ; set A long -.395260 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395263 5b tcd TCD -.395264 28 plp PLP -.395265 68 pla PLA ; end setdp macro -.395266 c2 30 rep #$30 REP #$30 ; set A&X long -.395268 a0 02 00 ldy #$0002 LDY #FILEDESC.PATH ; DOS_TEMP := DOS_FD_PTR->PATH -.39526b b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39526d 85 28 sta $0348 STA DOS_TEMP -.39526f c8 iny INY -.395270 c8 iny INY -.395271 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395273 85 2a sta $034a STA DOS_TEMP+2 -.395275 e2 20 sep #$20 SEP #$20 ; set A short -.395277 a0 00 00 ldy #$0000 LDY #0 -.39527a a2 00 00 ldx #$0000 LDX #0 -.39527d b7 28 lda [$0348],y path_loop LDA [DOS_TEMP],Y ; Get a byte of the path -.39527f 95 e0 sta $0400,x STA DOS_PATH_BUFF,X ; ... save it to the path buffer -.395281 f0 04 beq $395287 BEQ find_file ; If it's NULL, we're done -.395283 e8 inx INX -.395284 c8 iny INY -.395285 80 f6 bra $39527d BRA path_loop -.395287 22 3a 49 39 jsl $39493a find_file JSL DOS_PARSE_PATH -.39528b 22 d2 49 39 jsl $3949d2 JSL DOS_FINDFILE -.39528f 90 07 bcc $395298 BCC set_device -.395291 e2 20 sep #$20 SEP #$20 ; set A short -.395293 a9 0b lda #$0b LDA #DOS_ERR_FILEEXISTS -.395295 82 d2 00 brl $39536a BRL ret_failure -.395298 set_device -.395298 e2 20 sep #$20 SEP #$20 ; set A short -.39529a a0 01 00 ldy #$0001 LDY #FILEDESC.DEV ; Set the device in the file descriptor -.39529d a5 01 lda $0321 LDA BIOS_DEV -.39529f 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3952a1 validate_name -.3952a1 22 15 4d 39 jsl $394d15 JSL DOS_FREECLUS -.3952a5 b0 03 bcs $3952aa BCS save_data -.3952a7 82 c4 00 brl $39536e BRL pass_failure -.3952aa save_data -.3952aa c2 20 rep #$20 REP #$20 ; set A long -.3952ac a0 0a 00 ldy #$000a LDY #FILEDESC.FIRST_CLUSTER -.3952af a5 10 lda $0330 LDA DOS_CLUS_ID ; DOS_FD_PTR->FIRST_CLUSTER := DOS_CLUS_ID -.3952b1 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3952b3 c8 iny INY -.3952b4 c8 iny INY -.3952b5 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.3952b7 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3952b9 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; DOS_BUFF_PTR := DOS_FD_PTR->BUFFER -.3952bc b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3952be 85 1c sta $033c STA DOS_BUFF_PTR -.3952c0 c8 iny INY +.395188 4a lsr a LSR A +.395189 4a lsr a LSR A +.39518a 4a lsr a LSR A +.39518b 4a lsr a LSR A +.39518c 29 0f 00 and #$000f AND #$000F +.39518f 8f 00 01 00 sta $000100 STA @l UNSIGNED_MULT_A_LO +.395193 a9 e8 03 lda #$03e8 LDA #1000 +.395196 8f 02 01 00 sta $000102 STA @l UNSIGNED_MULT_B_LO +.39519a af 04 01 00 lda $000104 LDA @l UNSIGNED_MULT_AL_LO +.39519e 18 clc CLC +.39519f 65 2a adc $034a ADC DOS_TEMP+2 +.3951a1 28 plp PLP +.3951a2 2b pld PLD +.3951a3 ab plb PLB +.3951a4 6b rtl RTL +.3951a5 DOS_RTCCREATE +.3951a5 8b phb PHB +.3951a6 0b phd PHD +.3951a7 08 php PHP +.3951a8 48 pha PHA ; begin setdbr macro +.3951a9 08 php PHP +.3951aa e2 20 sep #$20 SEP #$20 ; set A short +.3951ac a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3951ae 48 pha PHA +.3951af ab plb PLB +.3951b0 28 plp PLP +.3951b1 68 pla PLA ; end setdbr macro +.3951b2 48 pha PHA ; begin setdp macro +.3951b3 08 php PHP +.3951b4 c2 20 rep #$20 REP #$20 ; set A long +.3951b6 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3951b9 5b tcd TCD +.3951ba 28 plp PLP +.3951bb 68 pla PLA ; end setdp macro +.3951bc c2 10 rep #$10 REP #$10 ; set X long +.3951be e2 20 sep #$20 SEP #$20 ; set A short +.3951c0 af 0e 08 af lda $af080e LDA @l RTC_CTRL ; Turn off the updates to the clock +.3951c4 09 08 ora #$08 ORA #%00001000 +.3951c6 8f 0e 08 af sta $af080e STA @l RTC_CTRL +.3951ca af 0f 08 af lda $af080f LDA @l RTC_CENTURY +.3951ce 85 29 sta $0349 STA DOS_TEMP+1 +.3951d0 af 0a 08 af lda $af080a LDA @l RTC_YEAR ; Get the year +.3951d4 85 28 sta $0348 STA DOS_TEMP +.3951d6 c2 20 rep #$20 REP #$20 ; set A long +.3951d8 a5 28 lda $0348 LDA DOS_TEMP +.3951da 22 28 51 39 jsl $395128 JSL BCD2BIN ; Convert it to binary +.3951de 85 28 sta $0348 STA DOS_TEMP +.3951e0 38 sec SEC ; Year is relative to 1980 +.3951e1 e9 bc 07 sbc #$07bc SBC #1980 +.3951e4 c2 20 rep #$20 REP #$20 ; set A long +.3951e6 0a asl a ASL A +.3951e7 0a asl a ASL A +.3951e8 0a asl a ASL A +.3951e9 0a asl a ASL A +.3951ea 0a asl a ASL A +.3951eb 0a asl a ASL A +.3951ec 0a asl a ASL A +.3951ed 0a asl a ASL A +.3951ee 0a asl a ASL A +.3951ef 29 00 fe and #$fe00 AND #$FE00 +.3951f2 a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; And save it to the creation date field +.3951f5 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3951f7 e2 20 sep #$20 SEP #$20 ; set A short +.3951f9 af 09 08 af lda $af0809 LDA @l RTC_MONTH ; Get the month +.3951fd c2 20 rep #$20 REP #$20 ; set A long +.3951ff 29 ff 00 and #$00ff AND #$00FF +.395202 22 28 51 39 jsl $395128 JSL BCD2BIN ; Convert it to binary +.395206 29 ff 00 and #$00ff AND #$00FF ; Move the year to bits 15 - 9 +.395209 0a asl a ASL A +.39520a 0a asl a ASL A +.39520b 0a asl a ASL A +.39520c 0a asl a ASL A +.39520d 0a asl a ASL A +.39520e 29 e0 01 and #$01e0 AND #$01E0 ; Make sure only the month is covered +.395211 a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; And save it to the creation date field +.395214 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y +.395216 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395218 e2 20 sep #$20 SEP #$20 ; set A short +.39521a af 06 08 af lda $af0806 LDA @l RTC_DAY ; Get the day +.39521e c2 20 rep #$20 REP #$20 ; set A long +.395220 29 ff 00 and #$00ff AND #$00FF +.395223 22 28 51 39 jsl $395128 JSL BCD2BIN ; Convert it to binary +.395227 29 1f 00 and #$001f AND #$001F ; Make sure only the day is covered +.39522a a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; And save it to the creation date field +.39522d 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y +.39522f 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395231 e2 20 sep #$20 SEP #$20 ; set A short +.395233 af 04 08 af lda $af0804 LDA @l RTC_HRS ; Get the hour +.395237 29 1f and #$1f AND #$1F ; Trim AM/PM bit +.395239 c2 20 rep #$20 REP #$20 ; set A long +.39523b 29 ff 00 and #$00ff AND #$00FF +.39523e 22 28 51 39 jsl $395128 JSL BCD2BIN ; Convert it to binary +.395242 c2 20 rep #$20 REP #$20 ; set A long +.395244 0a asl a ASL A +.395245 0a asl a ASL A +.395246 0a asl a ASL A +.395247 0a asl a ASL A +.395248 0a asl a ASL A +.395249 0a asl a ASL A +.39524a 0a asl a ASL A +.39524b 0a asl a ASL A +.39524c 0a asl a ASL A +.39524d 0a asl a ASL A +.39524e 0a asl a ASL A +.39524f 29 00 f8 and #$f800 AND #$F800 +.395252 a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME ; And save it to the creation time field +.395255 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395257 e2 20 sep #$20 SEP #$20 ; set A short +.395259 af 02 08 af lda $af0802 LDA @l RTC_MIN ; Get the minute +.39525d c2 20 rep #$20 REP #$20 ; set A long +.39525f 29 ff 00 and #$00ff AND #$00FF +.395262 22 28 51 39 jsl $395128 JSL BCD2BIN ; Convert it to binary +.395266 c2 20 rep #$20 REP #$20 ; set A long +.395268 0a asl a ASL A +.395269 0a asl a ASL A +.39526a 0a asl a ASL A +.39526b 0a asl a ASL A +.39526c 0a asl a ASL A +.39526d 29 e0 07 and #$07e0 AND #$07E0 +.395270 a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME ; And save it to the creation time field +.395273 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y +.395275 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395277 e2 20 sep #$20 SEP #$20 ; set A short +.395279 af 00 08 af lda $af0800 LDA @l RTC_SEC ; Get the second +.39527d c2 20 rep #$20 REP #$20 ; set A long +.39527f 29 ff 00 and #$00ff AND #$00FF +.395282 22 28 51 39 jsl $395128 JSL BCD2BIN ; Convert it to binary +.395286 c2 20 rep #$20 REP #$20 ; set A long +.395288 29 1f 00 and #$001f AND #$001F +.39528b a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME ; And save it to the creation time field +.39528e 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y +.395290 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395292 af 0e 08 af lda $af080e LDA @l RTC_CTRL ; Turn on the updates again +.395296 29 f7 00 and #$00f7 AND #%11110111 +.395299 8f 0e 08 af sta $af080e STA @l RTC_CTRL +.39529d 28 plp PLP +.39529e 2b pld PLD +.39529f ab plb PLB +.3952a0 6b rtl RTL +.3952a1 DOS_CREATE +.3952a1 8b phb PHB +.3952a2 0b phd PHD +.3952a3 08 php PHP +.3952a4 48 pha PHA ; begin setdbr macro +.3952a5 08 php PHP +.3952a6 e2 20 sep #$20 SEP #$20 ; set A short +.3952a8 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3952aa 48 pha PHA +.3952ab ab plb PLB +.3952ac 28 plp PLP +.3952ad 68 pla PLA ; end setdbr macro +.3952ae 48 pha PHA ; begin setdp macro +.3952af 08 php PHP +.3952b0 c2 20 rep #$20 REP #$20 ; set A long +.3952b2 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3952b5 5b tcd TCD +.3952b6 28 plp PLP +.3952b7 68 pla PLA ; end setdp macro +.3952b8 c2 30 rep #$30 REP #$30 ; set A&X long +.3952ba a0 02 00 ldy #$0002 LDY #FILEDESC.PATH ; DOS_TEMP := DOS_FD_PTR->PATH +.3952bd b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3952bf 85 28 sta $0348 STA DOS_TEMP .3952c1 c8 iny INY -.3952c2 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3952c4 85 1e sta $033e STA DOS_BUFF_PTR+2 -.3952c6 22 29 48 39 jsl $394829 JSL DOS_PUTCLUSTER -.3952ca b0 00 bcs $3952cc BCS find_dir -.3952cc find_dir -.3952cc c2 20 rep #$20 REP #$20 ; set A long -.3952ce 22 64 43 39 jsl $394364 JSL DOS_DIRFINDFREE -.3952d2 b0 1a bcs $3952ee BCS set_entry -.3952d4 c2 20 rep #$20 REP #$20 ; set A long -.3952d6 a0 0a 00 ldy #$000a LDY #FILEDESC.FIRST_CLUSTER ; Failed to get the directory entry... -.3952d9 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y ; DOS_CLUS_ID := DOS_FD_PTR->FIRST_CLUSTER -.3952db 85 10 sta $0330 STA DOS_CLUS_ID -.3952dd c8 iny INY -.3952de c8 iny INY -.3952df b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3952e1 85 12 sta $0332 STA DOS_CLUS_ID+2 -.3952e3 22 dd 4f 39 jsl $394fdd JSL DELCLUSTER32 ; Delete the cluster -.3952e7 e2 20 sep #$20 SEP #$20 ; set A short -.3952e9 a9 08 lda #$08 LDA #DOS_ERR_NODIR ; Return that we couldn't read the directory -.3952eb 82 7c 00 brl $39536a BRL ret_failure -.3952ee set_entry -.3952ee e2 20 sep #$20 SEP #$20 ; set A short -.3952f0 a0 00 00 ldy #$0000 LDY #0 -.3952f3 a9 00 lda #$00 LDA #0 ; NULL -.3952f5 97 18 sta [$0338],y copy_dir_loop STA [DOS_DIR_PTR],Y ; Save it to the directory cluster -.3952f7 c8 iny INY -.3952f8 c0 20 00 cpy #$0020 CPY #SIZE(DIRENTRY) -.3952fb d0 f8 bne $3952f5 BNE copy_dir_loop -.3952fd a0 00 00 ldy #$0000 LDY #0 -.395300 b9 3a a0 lda $38a03a,y name_loop LDA DOS_SHORT_NAME,Y ; Copy the name over -.395303 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.3952c2 c8 iny INY +.3952c3 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3952c5 85 2a sta $034a STA DOS_TEMP+2 +.3952c7 e2 20 sep #$20 SEP #$20 ; set A short +.3952c9 a0 00 00 ldy #$0000 LDY #0 +.3952cc a2 00 00 ldx #$0000 LDX #0 +.3952cf b7 28 lda [$0348],y path_loop LDA [DOS_TEMP],Y ; Get a byte of the path +.3952d1 95 e0 sta $0400,x STA DOS_PATH_BUFF,X ; ... save it to the path buffer +.3952d3 f0 04 beq $3952d9 BEQ find_file ; If it's NULL, we're done +.3952d5 e8 inx INX +.3952d6 c8 iny INY +.3952d7 80 f6 bra $3952cf BRA path_loop +.3952d9 22 8c 49 39 jsl $39498c find_file JSL DOS_PARSE_PATH +.3952dd 22 24 4a 39 jsl $394a24 JSL DOS_FINDFILE +.3952e1 90 07 bcc $3952ea BCC set_device +.3952e3 e2 20 sep #$20 SEP #$20 ; set A short +.3952e5 a9 0b lda #$0b LDA #DOS_ERR_FILEEXISTS +.3952e7 82 d2 00 brl $3953bc BRL ret_failure +.3952ea set_device +.3952ea e2 20 sep #$20 SEP #$20 ; set A short +.3952ec a0 01 00 ldy #$0001 LDY #FILEDESC.DEV ; Set the device in the file descriptor +.3952ef a5 01 lda $0321 LDA BIOS_DEV +.3952f1 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3952f3 validate_name +.3952f3 22 67 4d 39 jsl $394d67 JSL DOS_FREECLUS +.3952f7 b0 03 bcs $3952fc BCS save_data +.3952f9 82 c4 00 brl $3953c0 BRL pass_failure +.3952fc save_data +.3952fc c2 20 rep #$20 REP #$20 ; set A long +.3952fe a0 0a 00 ldy #$000a LDY #FILEDESC.FIRST_CLUSTER +.395301 a5 10 lda $0330 LDA DOS_CLUS_ID ; DOS_FD_PTR->FIRST_CLUSTER := DOS_CLUS_ID +.395303 97 20 sta [$0340],y STA [DOS_FD_PTR],Y .395305 c8 iny INY -.395306 c0 0b 00 cpy #$000b CPY #11 -.395309 d0 f5 bne $395300 BNE name_loop -.39530b c2 20 rep #$20 REP #$20 ; set A long -.39530d a0 0a 00 ldy #$000a LDY #FILEDESC.FIRST_CLUSTER ; DOS_DIR_PTR->CLUSTER_L := DOS_FD_PTR->FIRST_CLUSTER[15..0] -.395310 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395312 a0 1a 00 ldy #$001a LDY #DIRENTRY.CLUSTER_L -.395315 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.395317 a0 0c 00 ldy #$000c LDY #FILEDESC.FIRST_CLUSTER+2 ; DOS_DIR_PTR->CLUSTER_H := DOS_FD_PTR->FIRST_CLUSTER[31..16] -.39531a b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39531c a0 14 00 ldy #$0014 LDY #DIRENTRY.CLUSTER_H -.39531f 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.395321 a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE ; DOS_DIR_PTR->SIZE := DOS_FD_PTR->SIZE -.395324 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395326 a0 1c 00 ldy #$001c LDY #DIRENTRY.SIZE -.395329 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.39532b a0 14 00 ldy #$0014 LDY #FILEDESC.SIZE+2 -.39532e b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395330 a0 1e 00 ldy #$001e LDY #DIRENTRY.SIZE+2 -.395333 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.395335 a9 00 00 lda #$0000 LDA #0 ; Force create date-time to 0 -.395338 a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; TODO: restore the RTC integration when that is working better. -.39533b 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.39533d a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME -.395340 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395342 a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; DOS_DIR_PTR->CREATE_DATE := DOS_FD_PTR->CREATE_DATE -.395345 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395347 a0 10 00 ldy #$0010 LDY #DIRENTRY.CREATE_DATE -.39534a 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.39534c a0 18 00 ldy #$0018 LDY #DIRENTRY.MODIFIED_DATE ; And DOS_DIR_PTR->MODIFIED_DATE -.39534f 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.395351 a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME ; DOS_DIR_PTR->CREATE_TIME := DOS_FD_PTR->CREATE_TIME -.395354 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395356 a0 0e 00 ldy #$000e LDY #DIRENTRY.CREATE_TIME -.395359 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.39535b a0 16 00 ldy #$0016 LDY #DIRENTRY.MODIFIED_TIME ; And DOS_DIR_PTR->MODIFIED_TIME -.39535e 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.395360 c2 20 rep #$20 REP #$20 ; set A long -.395362 22 22 44 39 jsl $394422 JSL DOS_DIRWRITE -.395366 b0 0b bcs $395373 BCS ret_success -.395368 80 04 bra $39536e BRA pass_failure -.39536a ret_failure -.39536a e2 20 sep #$20 SEP #$20 ; set A short -.39536c 85 0e sta $032e STA DOS_STATUS -.39536e 28 plp pass_failure PLP -.39536f 2b pld PLD -.395370 ab plb PLB -.395371 18 clc CLC -.395372 6b rtl RTL -.395373 ret_success -.395373 e2 20 sep #$20 SEP #$20 ; set A short -.395375 64 0e stz $032e STZ DOS_STATUS -.395377 28 plp PLP -.395378 2b pld PLD -.395379 ab plb PLB -.39537a 38 sec SEC -.39537b 6b rtl RTL -.39537c DOS_COPYPATH -.39537c da phx PHX -.39537d 5a phy PHY -.39537e 8b phb PHB -.39537f 0b phd PHD -.395380 08 php PHP -.395381 48 pha PHA ; begin setdbr macro -.395382 08 php PHP -.395383 e2 20 sep #$20 SEP #$20 ; set A short -.395385 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395387 48 pha PHA -.395388 ab plb PLB -.395389 28 plp PLP -.39538a 68 pla PLA ; end setdbr macro -.39538b 48 pha PHA ; begin setdp macro -.39538c 08 php PHP -.39538d c2 20 rep #$20 REP #$20 ; set A long -.39538f a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395392 5b tcd TCD -.395393 28 plp PLP -.395394 68 pla PLA ; end setdp macro -.395395 c2 30 rep #$30 REP #$30 ; set A&X long -.395397 a9 00 00 lda #$0000 LDA #0 ; Set the DOS_PATH_BUFF to all zeros -.39539a a2 00 00 ldx #$0000 LDX #0 -.39539d 95 e0 sta $0400,x clr_loop STA DOS_PATH_BUFF,X -.39539f e8 inx INX -.3953a0 e8 inx INX -.3953a1 e0 00 01 cpx #$0100 CPX #256 -.3953a4 d0 f7 bne $39539d BNE clr_loop -.3953a6 a5 20 lda $0340 LDA DOS_FD_PTR ; Is the DOS_FD_PTR null? -.3953a8 d0 04 bne $3953ae BNE get_path ; No: attempt to fetch the path -.3953aa a5 22 lda $0342 LDA DOS_FD_PTR+2 -.3953ac f0 27 beq $3953d5 BEQ done ; Yes: return an empty buffer -.3953ae a0 02 00 ldy #$0002 get_path LDY #FILEDESC.PATH ; Get the path buffer -.3953b1 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3953b3 85 28 sta $0348 STA DOS_TEMP -.3953b5 c8 iny INY -.3953b6 c8 iny INY -.3953b7 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3953b9 85 2a sta $034a STA DOS_TEMP+2 -.3953bb a5 28 lda $0348 LDA DOS_TEMP ; Is the path pointer NULL? -.3953bd d0 04 bne $3953c3 BNE start_copy ; No: start copying it -.3953bf a5 2a lda $034a LDA DOS_TEMP+2 -.3953c1 f0 12 beq $3953d5 BEQ done ; Yes: return an empty buffer -.3953c3 start_copy -.3953c3 e2 20 sep #$20 SEP #$20 ; set A short -.3953c5 a2 00 00 ldx #$0000 LDX #0 -.3953c8 a0 00 00 ldy #$0000 LDY #0 -.3953cb b7 28 lda [$0348],y loop LDA [DOS_TEMP],Y -.3953cd 95 e0 sta $0400,x STA DOS_PATH_BUFF,X -.3953cf f0 04 beq $3953d5 BEQ done -.3953d1 e8 inx INX -.3953d2 c8 iny INY -.3953d3 d0 f6 bne $3953cb BNE loop -.3953d5 28 plp done PLP -.3953d6 2b pld PLD -.3953d7 ab plb PLB -.3953d8 7a ply PLY -.3953d9 fa plx PLX -.3953da 6b rtl RTL +.395306 c8 iny INY +.395307 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.395309 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.39530b a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; DOS_BUFF_PTR := DOS_FD_PTR->BUFFER +.39530e b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395310 85 1c sta $033c STA DOS_BUFF_PTR +.395312 c8 iny INY +.395313 c8 iny INY +.395314 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395316 85 1e sta $033e STA DOS_BUFF_PTR+2 +.395318 22 7b 48 39 jsl $39487b JSL DOS_PUTCLUSTER +.39531c b0 00 bcs $39531e BCS find_dir +.39531e find_dir +.39531e c2 20 rep #$20 REP #$20 ; set A long +.395320 22 b6 43 39 jsl $3943b6 JSL DOS_DIRFINDFREE +.395324 b0 1a bcs $395340 BCS set_entry +.395326 c2 20 rep #$20 REP #$20 ; set A long +.395328 a0 0a 00 ldy #$000a LDY #FILEDESC.FIRST_CLUSTER ; Failed to get the directory entry... +.39532b b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y ; DOS_CLUS_ID := DOS_FD_PTR->FIRST_CLUSTER +.39532d 85 10 sta $0330 STA DOS_CLUS_ID +.39532f c8 iny INY +.395330 c8 iny INY +.395331 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395333 85 12 sta $0332 STA DOS_CLUS_ID+2 +.395335 22 2f 50 39 jsl $39502f JSL DELCLUSTER32 ; Delete the cluster +.395339 e2 20 sep #$20 SEP #$20 ; set A short +.39533b a9 08 lda #$08 LDA #DOS_ERR_NODIR ; Return that we couldn't read the directory +.39533d 82 7c 00 brl $3953bc BRL ret_failure +.395340 set_entry +.395340 e2 20 sep #$20 SEP #$20 ; set A short +.395342 a0 00 00 ldy #$0000 LDY #0 +.395345 a9 00 lda #$00 LDA #0 ; NULL +.395347 97 18 sta [$0338],y copy_dir_loop STA [DOS_DIR_PTR],Y ; Save it to the directory cluster +.395349 c8 iny INY +.39534a c0 20 00 cpy #$0020 CPY #SIZE(DIRENTRY) +.39534d d0 f8 bne $395347 BNE copy_dir_loop +.39534f a0 00 00 ldy #$0000 LDY #0 +.395352 b9 3a a0 lda $38a03a,y name_loop LDA DOS_SHORT_NAME,Y ; Copy the name over +.395355 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.395357 c8 iny INY +.395358 c0 0b 00 cpy #$000b CPY #11 +.39535b d0 f5 bne $395352 BNE name_loop +.39535d c2 20 rep #$20 REP #$20 ; set A long +.39535f a0 0a 00 ldy #$000a LDY #FILEDESC.FIRST_CLUSTER ; DOS_DIR_PTR->CLUSTER_L := DOS_FD_PTR->FIRST_CLUSTER[15..0] +.395362 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395364 a0 1a 00 ldy #$001a LDY #DIRENTRY.CLUSTER_L +.395367 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.395369 a0 0c 00 ldy #$000c LDY #FILEDESC.FIRST_CLUSTER+2 ; DOS_DIR_PTR->CLUSTER_H := DOS_FD_PTR->FIRST_CLUSTER[31..16] +.39536c b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39536e a0 14 00 ldy #$0014 LDY #DIRENTRY.CLUSTER_H +.395371 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.395373 a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE ; DOS_DIR_PTR->SIZE := DOS_FD_PTR->SIZE +.395376 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395378 a0 1c 00 ldy #$001c LDY #DIRENTRY.SIZE +.39537b 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.39537d a0 14 00 ldy #$0014 LDY #FILEDESC.SIZE+2 +.395380 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395382 a0 1e 00 ldy #$001e LDY #DIRENTRY.SIZE+2 +.395385 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.395387 a9 00 00 lda #$0000 LDA #0 ; Force create date-time to 0 +.39538a a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; TODO: restore the RTC integration when that is working better. +.39538d 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.39538f a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME +.395392 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395394 a0 16 00 ldy #$0016 LDY #FILEDESC.CREATE_DATE ; DOS_DIR_PTR->CREATE_DATE := DOS_FD_PTR->CREATE_DATE +.395397 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395399 a0 10 00 ldy #$0010 LDY #DIRENTRY.CREATE_DATE +.39539c 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.39539e a0 18 00 ldy #$0018 LDY #DIRENTRY.MODIFIED_DATE ; And DOS_DIR_PTR->MODIFIED_DATE +.3953a1 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.3953a3 a0 18 00 ldy #$0018 LDY #FILEDESC.CREATE_TIME ; DOS_DIR_PTR->CREATE_TIME := DOS_FD_PTR->CREATE_TIME +.3953a6 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3953a8 a0 0e 00 ldy #$000e LDY #DIRENTRY.CREATE_TIME +.3953ab 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.3953ad a0 16 00 ldy #$0016 LDY #DIRENTRY.MODIFIED_TIME ; And DOS_DIR_PTR->MODIFIED_TIME +.3953b0 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.3953b2 c2 20 rep #$20 REP #$20 ; set A long +.3953b4 22 74 44 39 jsl $394474 JSL DOS_DIRWRITE +.3953b8 b0 0b bcs $3953c5 BCS ret_success +.3953ba 80 04 bra $3953c0 BRA pass_failure +.3953bc ret_failure +.3953bc e2 20 sep #$20 SEP #$20 ; set A short +.3953be 85 0e sta $032e STA DOS_STATUS +.3953c0 28 plp pass_failure PLP +.3953c1 2b pld PLD +.3953c2 ab plb PLB +.3953c3 18 clc CLC +.3953c4 6b rtl RTL +.3953c5 ret_success +.3953c5 e2 20 sep #$20 SEP #$20 ; set A short +.3953c7 64 0e stz $032e STZ DOS_STATUS +.3953c9 28 plp PLP +.3953ca 2b pld PLD +.3953cb ab plb PLB +.3953cc 38 sec SEC +.3953cd 6b rtl RTL +.3953ce DOS_COPYPATH +.3953ce da phx PHX +.3953cf 5a phy PHY +.3953d0 8b phb PHB +.3953d1 0b phd PHD +.3953d2 08 php PHP +.3953d3 48 pha PHA ; begin setdbr macro +.3953d4 08 php PHP +.3953d5 e2 20 sep #$20 SEP #$20 ; set A short +.3953d7 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3953d9 48 pha PHA +.3953da ab plb PLB +.3953db 28 plp PLP +.3953dc 68 pla PLA ; end setdbr macro +.3953dd 48 pha PHA ; begin setdp macro +.3953de 08 php PHP +.3953df c2 20 rep #$20 REP #$20 ; set A long +.3953e1 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3953e4 5b tcd TCD +.3953e5 28 plp PLP +.3953e6 68 pla PLA ; end setdp macro +.3953e7 c2 30 rep #$30 REP #$30 ; set A&X long +.3953e9 a9 00 00 lda #$0000 LDA #0 ; Set the DOS_PATH_BUFF to all zeros +.3953ec a2 00 00 ldx #$0000 LDX #0 +.3953ef 95 e0 sta $0400,x clr_loop STA DOS_PATH_BUFF,X +.3953f1 e8 inx INX +.3953f2 e8 inx INX +.3953f3 e0 00 01 cpx #$0100 CPX #256 +.3953f6 d0 f7 bne $3953ef BNE clr_loop +.3953f8 a5 20 lda $0340 LDA DOS_FD_PTR ; Is the DOS_FD_PTR null? +.3953fa d0 04 bne $395400 BNE get_path ; No: attempt to fetch the path +.3953fc a5 22 lda $0342 LDA DOS_FD_PTR+2 +.3953fe f0 27 beq $395427 BEQ done ; Yes: return an empty buffer +.395400 a0 02 00 ldy #$0002 get_path LDY #FILEDESC.PATH ; Get the path buffer +.395403 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395405 85 28 sta $0348 STA DOS_TEMP +.395407 c8 iny INY +.395408 c8 iny INY +.395409 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39540b 85 2a sta $034a STA DOS_TEMP+2 +.39540d a5 28 lda $0348 LDA DOS_TEMP ; Is the path pointer NULL? +.39540f d0 04 bne $395415 BNE start_copy ; No: start copying it +.395411 a5 2a lda $034a LDA DOS_TEMP+2 +.395413 f0 12 beq $395427 BEQ done ; Yes: return an empty buffer +.395415 start_copy +.395415 e2 20 sep #$20 SEP #$20 ; set A short +.395417 a2 00 00 ldx #$0000 LDX #0 +.39541a a0 00 00 ldy #$0000 LDY #0 +.39541d b7 28 lda [$0348],y loop LDA [DOS_TEMP],Y +.39541f 95 e0 sta $0400,x STA DOS_PATH_BUFF,X +.395421 f0 04 beq $395427 BEQ done +.395423 e8 inx INX +.395424 c8 iny INY +.395425 d0 f6 bne $39541d BNE loop +.395427 28 plp done PLP +.395428 2b pld PLD +.395429 ab plb PLB +.39542a 7a ply PLY +.39542b fa plx PLX +.39542c 6b rtl RTL ;****** Return to file: src\sdos.asm -.3953db DOS_TEST -.3953db 8b phb PHB -.3953dc 0b phd PHD -.3953dd 08 php PHP -.3953de 48 pha PHA ; begin setdbr macro -.3953df 08 php PHP -.3953e0 e2 20 sep #$20 SEP #$20 ; set A short -.3953e2 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3953e4 48 pha PHA -.3953e5 ab plb PLB -.3953e6 28 plp PLP -.3953e7 68 pla PLA ; end setdbr macro -.3953e8 48 pha PHA ; begin setdp macro -.3953e9 08 php PHP -.3953ea c2 20 rep #$20 REP #$20 ; set A long -.3953ec a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3953ef 5b tcd TCD -.3953f0 28 plp PLP -.3953f1 68 pla PLA ; end setdp macro -.3953f2 c2 30 rep #$30 REP #$30 ; set A&X long -.3953f4 a9 1a 54 lda #$541a LDA #<>src_file -.3953f7 8f 64 03 00 sta $000364 STA @l DOS_STR1_PTR -.3953fb a9 39 00 lda #$0039 LDA #`src_file -.3953fe 8f 66 03 00 sta $000366 STA @l DOS_STR1_PTR+2 -.395402 a9 27 54 lda #$5427 LDA #<>dst_file -.395405 8f 68 03 00 sta $000368 STA @l DOS_STR2_PTR -.395409 a9 39 00 lda #$0039 LDA #`dst_file -.39540c 8f 6a 03 00 sta $00036a STA @l DOS_STR2_PTR+2 -.395410 22 bb 5a 39 jsl $395abb JSL IF_COPY -.395414 b0 00 bcs $395416 BCS done -.395416 28 plp done PLP -.395417 2b pld PLD -.395418 ab plb PLB -.395419 6b rtl RTL ->39541a 40 73 3a 68 65 6c 6c 6f src_file .null "@s:hello.bas" ->395422 2e 62 61 73 00 ->395427 40 73 3a 68 65 6c 6c 6f dst_file .null "@s:hello2.bas" ->39542f 32 2e 62 61 73 00 -.395435 IF_OPEN -.395435 da phx PHX -.395436 5a phy PHY -.395437 0b phd PHD -.395438 8b phb PHB -.395439 08 php PHP -.39543a 48 pha PHA ; begin setdbr macro +.39542d DOS_TEST +.39542d 8b phb PHB +.39542e 0b phd PHD +.39542f 08 php PHP +.395430 48 pha PHA ; begin setdbr macro +.395431 08 php PHP +.395432 e2 20 sep #$20 SEP #$20 ; set A short +.395434 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395436 48 pha PHA +.395437 ab plb PLB +.395438 28 plp PLP +.395439 68 pla PLA ; end setdbr macro +.39543a 48 pha PHA ; begin setdp macro .39543b 08 php PHP -.39543c e2 20 sep #$20 SEP #$20 ; set A short -.39543e a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395440 48 pha PHA -.395441 ab plb PLB +.39543c c2 20 rep #$20 REP #$20 ; set A long +.39543e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395441 5b tcd TCD .395442 28 plp PLP -.395443 68 pla PLA ; end setdbr macro -.395444 48 pha PHA ; begin setdp macro -.395445 08 php PHP -.395446 c2 20 rep #$20 REP #$20 ; set A long -.395448 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39544b 5b tcd TCD -.39544c 28 plp PLP -.39544d 68 pla PLA ; end setdp macro -.39544e e2 20 sep #$20 SEP #$20 ; set A short -.395450 a0 00 00 ldy #$0000 LDY #FILEDESC.STATUS ; Get the status to make sure a open is ok -.395453 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395455 89 38 bit #$38 BIT #FD_STAT_OPEN -.395457 f0 05 beq $39545e BEQ ok_to_open -.395459 a9 0f lda #$0f LDA #DOS_ERR_OPEN ; If already open: throw an error -.39545b 82 1c 05 brl $39597a BRL IF_FAILURE -.39545e 22 7c 53 39 jsl $39537c ok_to_open JSL DOS_COPYPATH ; Copy the path to the path buffer -.395462 22 d2 49 39 jsl $3949d2 JSL DOS_FINDFILE ; Attempt to find the file -.395466 b0 03 bcs $39546b BCS is_found ; If OK: we found the file -.395468 82 13 05 brl $39597e BRL IF_PASSFAILURE ; Otherwise: pass the failure up the chain -.39546b is_found -.39546b e2 20 sep #$20 SEP #$20 ; set A short -.39546d a0 01 00 ldy #$0001 LDY #FILEDESC.DEV ; Set the device in the file descriptor -.395470 a5 01 lda $0321 LDA BIOS_DEV -.395472 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395474 c2 20 rep #$20 REP #$20 ; set A long -.395476 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; Set the buffer point to the one provided in the file -.395479 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39547b 85 1c sta $033c STA DOS_BUFF_PTR -.39547d c8 iny INY -.39547e c8 iny INY -.39547f b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395481 85 1e sta $033e STA DOS_BUFF_PTR+2 -.395483 22 ec 47 39 jsl $3947ec JSL DOS_GETCLUSTER ; Attempt to load the cluster -.395487 b0 03 bcs $39548c BCS read_cluster -.395489 82 f2 04 brl $39597e BRL IF_PASSFAILURE -.39548c a0 0a 00 ldy #$000a read_cluster LDY #FILEDESC.FIRST_CLUSTER ; Set the first cluster in the file descriptor -.39548f a5 10 lda $0330 LDA DOS_CLUS_ID -.395491 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395493 c8 iny INY -.395494 c8 iny INY -.395495 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.395497 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395499 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Set the current cluster in the file descriptor -.39549c a5 10 lda $0330 LDA DOS_CLUS_ID -.39549e 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3954a0 c8 iny INY -.3954a1 c8 iny INY -.3954a2 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.3954a4 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3954a6 a0 1c 00 ldy #$001c LDY #DIRENTRY.SIZE ; Copy the filesize from the directory entry to the file descriptor -.3954a9 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y -.3954ab a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE -.3954ae 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3954b0 a0 1e 00 ldy #$001e LDY #DIRENTRY.SIZE+2 -.3954b3 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y -.3954b5 a0 14 00 ldy #$0014 LDY #FILEDESC.SIZE+2 -.3954b8 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3954ba e2 20 sep #$20 SEP #$20 ; set A short -.3954bc a0 00 00 ldy #$0000 LDY #FILEDESC.STATUS ; Mark file as open and readable -.3954bf a9 39 lda #$39 LDA #FD_STAT_OPEN | FD_STAT_READ -.3954c1 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y -.3954c3 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3954c5 82 bd 04 brl $395985 BRL IF_SUCCESS -.3954c8 IF_CREATE -.3954c8 da phx PHX -.3954c9 5a phy PHY -.3954ca 0b phd PHD -.3954cb 8b phb PHB -.3954cc 08 php PHP -.3954cd 48 pha PHA ; begin setdbr macro -.3954ce 08 php PHP -.3954cf e2 20 sep #$20 SEP #$20 ; set A short -.3954d1 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3954d3 48 pha PHA -.3954d4 ab plb PLB -.3954d5 28 plp PLP -.3954d6 68 pla PLA ; end setdbr macro -.3954d7 48 pha PHA ; begin setdp macro -.3954d8 08 php PHP -.3954d9 c2 20 rep #$20 REP #$20 ; set A long -.3954db a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3954de 5b tcd TCD -.3954df 28 plp PLP -.3954e0 68 pla PLA ; end setdp macro -.3954e1 22 4f 52 39 jsl $39524f JSL DOS_CREATE ; Attempt to create the file -.3954e5 90 18 bcc $3954ff BCC pass_failure ; If it fails: pass the failure up the chain -.3954e7 c2 30 rep #$30 REP #$30 ; set A&X long -.3954e9 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Sets the current cluster to 0 to make sure the next write appends -.3954ec a9 00 00 lda #$0000 LDA #0 -.3954ef 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3954f1 c8 iny INY +.395443 68 pla PLA ; end setdp macro +.395444 c2 30 rep #$30 REP #$30 ; set A&X long +.395446 a9 6c 54 lda #$546c LDA #<>src_file +.395449 8f 64 03 00 sta $000364 STA @l DOS_STR1_PTR +.39544d a9 39 00 lda #$0039 LDA #`src_file +.395450 8f 66 03 00 sta $000366 STA @l DOS_STR1_PTR+2 +.395454 a9 79 54 lda #$5479 LDA #<>dst_file +.395457 8f 68 03 00 sta $000368 STA @l DOS_STR2_PTR +.39545b a9 39 00 lda #$0039 LDA #`dst_file +.39545e 8f 6a 03 00 sta $00036a STA @l DOS_STR2_PTR+2 +.395462 22 1b 5b 39 jsl $395b1b JSL IF_COPY +.395466 b0 00 bcs $395468 BCS done +.395468 28 plp done PLP +.395469 2b pld PLD +.39546a ab plb PLB +.39546b 6b rtl RTL +>39546c 40 73 3a 68 65 6c 6c 6f src_file .null "@s:hello.bas" +>395474 2e 62 61 73 00 +>395479 40 73 3a 68 65 6c 6c 6f dst_file .null "@s:hello2.bas" +>395481 32 2e 62 61 73 00 +.395487 IF_OPEN +.395487 da phx PHX +.395488 5a phy PHY +.395489 0b phd PHD +.39548a 8b phb PHB +.39548b 08 php PHP +.39548c 48 pha PHA ; begin setdbr macro +.39548d 08 php PHP +.39548e e2 20 sep #$20 SEP #$20 ; set A short +.395490 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395492 48 pha PHA +.395493 ab plb PLB +.395494 28 plp PLP +.395495 68 pla PLA ; end setdbr macro +.395496 48 pha PHA ; begin setdp macro +.395497 08 php PHP +.395498 c2 20 rep #$20 REP #$20 ; set A long +.39549a a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39549d 5b tcd TCD +.39549e 28 plp PLP +.39549f 68 pla PLA ; end setdp macro +.3954a0 e2 20 sep #$20 SEP #$20 ; set A short +.3954a2 a0 00 00 ldy #$0000 LDY #FILEDESC.STATUS ; Get the status to make sure a open is ok +.3954a5 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3954a7 89 38 bit #$38 BIT #FD_STAT_OPEN +.3954a9 f0 05 beq $3954b0 BEQ ok_to_open +.3954ab a9 0f lda #$0f LDA #DOS_ERR_OPEN ; If already open: throw an error +.3954ad 82 1c 05 brl $3959cc BRL IF_FAILURE +.3954b0 22 ce 53 39 jsl $3953ce ok_to_open JSL DOS_COPYPATH ; Copy the path to the path buffer +.3954b4 22 24 4a 39 jsl $394a24 JSL DOS_FINDFILE ; Attempt to find the file +.3954b8 b0 03 bcs $3954bd BCS is_found ; If OK: we found the file +.3954ba 82 13 05 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: pass the failure up the chain +.3954bd is_found +.3954bd e2 20 sep #$20 SEP #$20 ; set A short +.3954bf a0 01 00 ldy #$0001 LDY #FILEDESC.DEV ; Set the device in the file descriptor +.3954c2 a5 01 lda $0321 LDA BIOS_DEV +.3954c4 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3954c6 c2 20 rep #$20 REP #$20 ; set A long +.3954c8 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; Set the buffer point to the one provided in the file +.3954cb b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3954cd 85 1c sta $033c STA DOS_BUFF_PTR +.3954cf c8 iny INY +.3954d0 c8 iny INY +.3954d1 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3954d3 85 1e sta $033e STA DOS_BUFF_PTR+2 +.3954d5 22 3e 48 39 jsl $39483e JSL DOS_GETCLUSTER ; Attempt to load the cluster +.3954d9 b0 03 bcs $3954de BCS read_cluster +.3954db 82 f2 04 brl $3959d0 BRL IF_PASSFAILURE +.3954de a0 0a 00 ldy #$000a read_cluster LDY #FILEDESC.FIRST_CLUSTER ; Set the first cluster in the file descriptor +.3954e1 a5 10 lda $0330 LDA DOS_CLUS_ID +.3954e3 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3954e5 c8 iny INY +.3954e6 c8 iny INY +.3954e7 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.3954e9 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3954eb a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Set the current cluster in the file descriptor +.3954ee a5 10 lda $0330 LDA DOS_CLUS_ID +.3954f0 97 20 sta [$0340],y STA [DOS_FD_PTR],Y .3954f2 c8 iny INY -.3954f3 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.3954f5 e2 20 sep #$20 SEP #$20 ; set A short -.3954f7 a0 00 00 ldy #$0000 LDY #FILEDESC.STATUS -.3954fa a9 3a lda #$3a LDA #FD_STAT_OPEN | FD_STAT_WRITE ; Set the file to open and APPEND only -.3954fc 82 86 04 brl $395985 BRL IF_SUCCESS -.3954ff 82 78 04 brl $39597a pass_failure BRL IF_FAILURE -.395502 IF_CLOSE -.395502 da phx PHX -.395503 5a phy PHY -.395504 0b phd PHD -.395505 8b phb PHB -.395506 08 php PHP -.395507 48 pha PHA ; begin setdbr macro -.395508 08 php PHP -.395509 e2 20 sep #$20 SEP #$20 ; set A short -.39550b a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.39550d 48 pha PHA -.39550e ab plb PLB -.39550f 28 plp PLP -.395510 68 pla PLA ; end setdbr macro -.395511 48 pha PHA ; begin setdp macro -.395512 08 php PHP -.395513 c2 20 rep #$20 REP #$20 ; set A long -.395515 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395518 5b tcd TCD -.395519 28 plp PLP -.39551a 68 pla PLA ; end setdp macro -.39551b e2 20 sep #$20 SEP #$20 ; set A short -.39551d a0 00 00 ldy #$0000 LDY #FILEDESC.STATUS ; Check to see if we were writing the file -.395520 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395522 89 02 bit #$02 BIT #FD_STAT_WRITE -.395524 f0 09 beq $39552f BEQ set_flag ; No, just mark it closed -.395526 22 9b 55 39 jsl $39559b JSL IF_WRITE ; Attempt to write the cluster -.39552a b0 03 bcs $39552f BCS set_flag -.39552c 82 4f 04 brl $39597e BRL IF_PASSFAILURE ; If there was a problem, pass it up the chain -.39552f 22 71 5a 39 jsl $395a71 set_flag JSL IF_FREEFD ; Free the file descriptor as well -.395533 82 4f 04 brl $395985 BRL IF_SUCCESS -.395536 IF_READ -.395536 da phx PHX -.395537 5a phy PHY -.395538 0b phd PHD -.395539 8b phb PHB -.39553a 08 php PHP -.39553b 48 pha PHA ; begin setdbr macro -.39553c 08 php PHP -.39553d e2 20 sep #$20 SEP #$20 ; set A short -.39553f a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395541 48 pha PHA -.395542 ab plb PLB -.395543 28 plp PLP -.395544 68 pla PLA ; end setdbr macro -.395545 48 pha PHA ; begin setdp macro -.395546 08 php PHP -.395547 c2 20 rep #$20 REP #$20 ; set A long -.395549 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39554c 5b tcd TCD -.39554d 28 plp PLP -.39554e 68 pla PLA ; end setdp macro -.39554f c2 10 rep #$10 REP #$10 ; set X long -.395551 e2 20 sep #$20 SEP #$20 ; set A short -.395553 get_dev -.395553 e2 20 sep #$20 SEP #$20 ; set A short -.395555 a0 01 00 ldy #$0001 LDY #FILEDESC.DEV ; Get the device number from the file descriptor -.395558 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39555a 85 01 sta $0321 STA BIOS_DEV -.39555c 22 54 45 39 jsl $394554 JSL DOS_MOUNT ; Make sure the device is mounted (if needed) -.395560 c2 20 rep #$20 REP #$20 ; set A long -.395562 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Get the file's current cluster -.395565 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395567 85 10 sta $0330 STA DOS_CLUS_ID -.395569 c8 iny INY -.39556a c8 iny INY -.39556b b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39556d 85 12 sta $0332 STA DOS_CLUS_ID+2 -.39556f 22 fc 4b 39 jsl $394bfc JSL NEXTCLUSTER ; Find the next cluster of the file -.395573 90 13 bcc $395588 BCC pass_failure ; If not OK: pass the failure up the chain -.395575 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; Get the pointer to the file's cluster buffer -.395578 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39557a 85 1c sta $033c STA DOS_BUFF_PTR -.39557c c8 iny INY -.39557d c8 iny INY -.39557e b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395580 85 1e sta $033e STA DOS_BUFF_PTR+2 -.395582 22 ec 47 39 jsl $3947ec JSL DOS_GETCLUSTER ; Get the cluster -.395586 b0 03 bcs $39558b BCS ret_success ; If ok: return success -.395588 pass_failure -.395588 82 f3 03 brl $39597e BRL IF_PASSFAILURE ; Otherwise: bubble up the failure -.39558b a0 06 00 ldy #$0006 ret_success LDY #FILEDESC.CLUSTER ; Save the new cluster as the file's current cluster -.39558e a5 10 lda $0330 LDA DOS_CLUS_ID -.395590 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395592 c8 iny INY -.395593 c8 iny INY -.395594 a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.395596 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395598 82 ea 03 brl $395985 BRL IF_SUCCESS -.39559b IF_WRITE -.39559b da phx PHX -.39559c 5a phy PHY -.39559d 0b phd PHD -.39559e 8b phb PHB -.39559f 08 php PHP -.3955a0 48 pha PHA ; begin setdbr macro -.3955a1 08 php PHP -.3955a2 e2 20 sep #$20 SEP #$20 ; set A short -.3955a4 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3955a6 48 pha PHA -.3955a7 ab plb PLB -.3955a8 28 plp PLP -.3955a9 68 pla PLA ; end setdbr macro -.3955aa 48 pha PHA ; begin setdp macro -.3955ab 08 php PHP -.3955ac c2 20 rep #$20 REP #$20 ; set A long -.3955ae a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3955b1 5b tcd TCD -.3955b2 28 plp PLP -.3955b3 68 pla PLA ; end setdp macro -.3955b4 c2 10 rep #$10 REP #$10 ; set X long -.3955b6 e2 20 sep #$20 SEP #$20 ; set A short -.3955b8 a0 01 00 ldy #$0001 get_dev LDY #FILEDESC.DEV ; Get the device number from the file descriptor -.3955bb b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3955bd 85 01 sta $0321 STA BIOS_DEV -.3955bf 22 54 45 39 jsl $394554 JSL DOS_MOUNT ; Make sure the device is mounted (if needed) -.3955c3 c2 20 rep #$20 REP #$20 ; set A long -.3955c5 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; Get the pointer to the file's cluster buffer -.3955c8 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3955ca 85 1c sta $033c STA DOS_BUFF_PTR -.3955cc c8 iny INY -.3955cd c8 iny INY -.3955ce b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3955d0 85 1e sta $033e STA DOS_BUFF_PTR+2 -.3955d2 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Get the file's current cluster -.3955d5 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3955d7 85 10 sta $0330 STA DOS_CLUS_ID -.3955d9 c8 iny INY -.3955da c8 iny INY -.3955db b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3955dd 85 12 sta $0332 STA DOS_CLUS_ID+2 -.3955df d0 1a bne $3955fb BNE rewrite_cluster ; If the cluster ID <> 0, overwrite it -.3955e1 a5 10 lda $0330 LDA DOS_CLUS_ID -.3955e3 d0 16 bne $3955fb BNE rewrite_cluster -.3955e5 a0 0a 00 ldy #$000a LDY #FILEDESC.FIRST_CLUSTER ; Get the file's first cluster -.3955e8 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3955ea 85 10 sta $0330 STA DOS_CLUS_ID -.3955ec c8 iny INY -.3955ed c8 iny INY -.3955ee b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3955f0 85 12 sta $0332 STA DOS_CLUS_ID+2 -.3955f2 22 1d 50 39 jsl $39501d JSL DOS_APPENDCLUS ; Append the cluster -.3955f6 b0 0c bcs $395604 BCS ret_success ; If OK: return success -.3955f8 82 83 03 brl $39597e BRL IF_PASSFAILURE ; Otherwise: bubble up the failure -.3955fb 22 29 48 39 jsl $394829 rewrite_cluster JSL DOS_PUTCLUSTER ; Over-write the cluster -.3955ff b0 03 bcs $395604 BCS ret_success ; If ok: return success -.395601 82 7a 03 brl $39597e pass_failure BRL IF_PASSFAILURE ; Otherwise: bubble up the failure -.395604 82 7e 03 brl $395985 ret_success BRL IF_SUCCESS -.395607 IF_DIROPEN -.395607 da phx PHX -.395608 5a phy PHY -.395609 0b phd PHD -.39560a 8b phb PHB -.39560b 08 php PHP -.39560c 48 pha PHA ; begin setdbr macro -.39560d 08 php PHP -.39560e e2 20 sep #$20 SEP #$20 ; set A short -.395610 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395612 48 pha PHA -.395613 ab plb PLB -.395614 28 plp PLP -.395615 68 pla PLA ; end setdbr macro -.395616 48 pha PHA ; begin setdp macro -.395617 08 php PHP -.395618 c2 20 rep #$20 REP #$20 ; set A long -.39561a a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39561d 5b tcd TCD -.39561e 28 plp PLP -.39561f 68 pla PLA ; end setdp macro -.395620 c2 30 rep #$30 REP #$30 ; set A&X long -.395622 22 7c 53 39 jsl $39537c JSL DOS_COPYPATH ; Copy the path from the file descriptor to the path buffer -.395626 22 3a 49 39 jsl $39493a JSL DOS_PARSE_PATH ; Parse the path -.39562a 22 54 45 39 jsl $394554 JSL DOS_MOUNT ; Make sure we've mounted the SDC. -.39562e b0 03 bcs $395633 BCS get_root_dir ; If successful: get the root directory -.395630 82 4b 03 brl $39597e BRL IF_PASSFAILURE ; Otherwise: pass the error up the chain -.395633 get_root_dir -.395633 c2 30 rep #$30 REP #$30 ; set A&X long -.395635 22 09 42 39 jsl $394209 JSL DOS_DIROPEN -.395639 b0 03 bcs $39563e BCS success -.39563b 82 40 03 brl $39597e BRL IF_PASSFAILURE -.39563e 82 44 03 brl $395985 success BRL IF_SUCCESS -.395641 IF_DIRNEXT -.395641 5c a3 42 39 jmp $3942a3 JML DOS_DIRNEXT -.395645 IF_DELETE -.395645 da phx PHX -.395646 5a phy PHY -.395647 0b phd PHD -.395648 8b phb PHB -.395649 08 php PHP -.39564a 48 pha PHA ; begin setdbr macro -.39564b 08 php PHP -.39564c e2 20 sep #$20 SEP #$20 ; set A short -.39564e a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395650 48 pha PHA -.395651 ab plb PLB -.395652 28 plp PLP -.395653 68 pla PLA ; end setdbr macro -.395654 48 pha PHA ; begin setdp macro -.395655 08 php PHP -.395656 c2 20 rep #$20 REP #$20 ; set A long -.395658 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39565b 5b tcd TCD -.39565c 28 plp PLP -.39565d 68 pla PLA ; end setdp macro -.39565e c2 30 rep #$30 REP #$30 ; set A&X long -.395660 22 d2 49 39 jsl $3949d2 JSL DOS_FINDFILE -.395664 b0 03 bcs $395669 BCS get_first_clus -.395666 82 15 03 brl $39597e BRL IF_PASSFAILURE -.395669 get_first_clus -.395669 a0 1a 00 ldy #$001a LDY #DIRENTRY.CLUSTER_L -.39566c b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y -.39566e 85 10 sta $0330 STA DOS_CLUS_ID -.395670 a0 14 00 ldy #$0014 LDY #DIRENTRY.CLUSTER_H -.395673 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y -.395675 85 12 sta $0332 STA DOS_CLUS_ID+2 -.395677 a5 10 lda $0330 LDA DOS_CLUS_ID -.395679 8d 2a a0 sta $38a02a STA DOS_CURR_CLUS -.39567c a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.39567e 8d 2c a0 sta $38a02c STA DOS_CURR_CLUS+2 -.395681 22 fc 4b 39 jsl $394bfc del_loop JSL NEXTCLUSTER -.395685 90 2f bcc $3956b6 BCC del_one -.395687 a5 10 lda $0330 LDA DOS_CLUS_ID -.395689 8d 2e a0 sta $38a02e STA DOS_NEXT_CLUS -.39568c a5 12 lda $0332 LDA DOS_CLUS_ID+2 -.39568e 8d 30 a0 sta $38a030 STA DOS_NEXT_CLUS+2 -.395691 ad 2a a0 lda $38a02a LDA DOS_CURR_CLUS -.395694 85 10 sta $0330 STA DOS_CLUS_ID -.395696 ad 2c a0 lda $38a02c LDA DOS_CURR_CLUS+2 -.395699 85 12 sta $0332 STA DOS_CLUS_ID+2 -.39569b 22 dd 4f 39 jsl $394fdd JSL DELCLUSTER32 -.39569f b0 03 bcs $3956a4 BCS go_next -.3956a1 82 da 02 brl $39597e BRL IF_PASSFAILURE -.3956a4 go_next -.3956a4 ad 2e a0 lda $38a02e LDA DOS_NEXT_CLUS -.3956a7 85 10 sta $0330 STA DOS_CLUS_ID -.3956a9 8d 2a a0 sta $38a02a STA DOS_CURR_CLUS -.3956ac ad 30 a0 lda $38a030 LDA DOS_NEXT_CLUS+2 -.3956af 85 12 sta $0332 STA DOS_CLUS_ID+2 -.3956b1 8d 2c a0 sta $38a02c STA DOS_CURR_CLUS+2 -.3956b4 80 cb bra $395681 BRA del_loop -.3956b6 del_one -.3956b6 ad 2a a0 lda $38a02a LDA DOS_CURR_CLUS -.3956b9 85 10 sta $0330 STA DOS_CLUS_ID -.3956bb ad 2c a0 lda $38a02c LDA DOS_CURR_CLUS+2 -.3956be 85 12 sta $0332 STA DOS_CLUS_ID+2 -.3956c0 22 37 4f 39 jsl $394f37 JSL DELCLUSTER -.3956c4 b0 03 bcs $3956c9 BCS free_dir_entry -.3956c6 82 b5 02 brl $39597e BRL IF_PASSFAILURE -.3956c9 free_dir_entry -.3956c9 e2 20 sep #$20 SEP #$20 ; set A short -.3956cb a0 00 00 ldy #$0000 LDY #DIRENTRY.SHORTNAME ; Flag the directory entry as deleted -.3956ce a9 e5 lda #$e5 LDA #DOS_DIR_ENT_UNUSED -.3956d0 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y -.3956d2 22 22 44 39 jsl $394422 JSL DOS_DIRWRITE ; Write the directory entry back -.3956d6 b0 03 bcs $3956db BCS ret_success -.3956d8 82 a3 02 brl $39597e BRL IF_PASSFAILURE -.3956db 82 a7 02 brl $395985 ret_success BRL IF_SUCCESS -.3956de IF_DIRREAD -.3956de da phx PHX -.3956df 5a phy PHY -.3956e0 0b phd PHD -.3956e1 8b phb PHB -.3956e2 08 php PHP -.3956e3 48 pha PHA ; begin setdbr macro -.3956e4 08 php PHP -.3956e5 e2 20 sep #$20 SEP #$20 ; set A short -.3956e7 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3956e9 48 pha PHA -.3956ea ab plb PLB -.3956eb 28 plp PLP -.3956ec 68 pla PLA ; end setdbr macro -.3956ed 48 pha PHA ; begin setdp macro -.3956ee 08 php PHP -.3956ef c2 20 rep #$20 REP #$20 ; set A long -.3956f1 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3956f4 5b tcd TCD -.3956f5 28 plp PLP -.3956f6 68 pla PLA ; end setdp macro -.3956f7 c2 30 rep #$30 REP #$30 ; set A&X long -.3956f9 22 d2 49 39 jsl $3949d2 JSL DOS_FINDFILE -.3956fd b0 03 bcs $395702 BCS success -.3956ff 82 78 02 brl $39597a BRL IF_FAILURE -.395702 82 80 02 brl $395985 success BRL IF_SUCCESS -.395705 IF_DIRWRITE -.395705 5c 22 44 39 jmp $394422 JML DOS_DIRWRITE -.395709 IF_LOAD -.395709 da phx PHX -.39570a 5a phy PHY -.39570b 0b phd PHD -.39570c 8b phb PHB -.39570d 08 php PHP -.39570e 48 pha PHA ; begin setdbr macro -.39570f 08 php PHP -.395710 e2 20 sep #$20 SEP #$20 ; set A short -.395712 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395714 48 pha PHA -.395715 ab plb PLB -.395716 28 plp PLP -.395717 68 pla PLA ; end setdbr macro -.395718 48 pha PHA ; begin setdp macro -.395719 08 php PHP -.39571a c2 20 rep #$20 REP #$20 ; set A long -.39571c a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39571f 5b tcd TCD -.395720 28 plp PLP -.395721 68 pla PLA ; end setdp macro -.395722 c2 30 rep #$30 REP #$30 ; set A&X long -.395724 22 35 54 39 jsl $395435 JSL IF_OPEN -.395728 b0 03 bcs $39572d BCS setup ; If success: start setting things up -.39572a 82 51 02 brl $39597e BRL IF_PASSFAILURE ; Otherwise: pass the failure up the chain -.39572d setup -.39572d c2 20 rep #$20 REP #$20 ; set A long -.39572f a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE ; Record the size of the file in DOS_FILE_SIZE -.395732 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395734 85 2c sta $034c STA DOS_FILE_SIZE -.395736 c8 iny INY -.395737 c8 iny INY -.395738 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39573a 85 2e sta $034e STA DOS_FILE_SIZE+2 -.39573c a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; Set up the source pointer -.39573f b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395741 85 30 sta $0350 STA DOS_SRC_PTR -.395743 c8 iny INY -.395744 c8 iny INY -.395745 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395747 85 32 sta $0352 STA DOS_SRC_PTR+2 -.395749 a5 36 lda $0356 LDA DOS_DST_PTR+2 ; Is there a destination address in RAM? -.39574b c9 40 00 cmp #$0040 CMP #$0040 -.39574e b0 04 bcs $395754 BGE load_by_type ; No: try to load it by type -.395750 5c 2f 58 39 jmp $39582f JML IF_LOADRAW ; Otherwise, load it to the supplied destination -.395754 a0 08 00 ldy #$0008 load_by_type LDY #8 ; Point to the first extension byte -.395757 a2 00 00 ldx #$0000 LDX #0 ; and the first byte of the table -.39575a type_loop -.39575a e2 20 sep #$20 SEP #$20 ; set A short -.39575c bf a0 57 39 lda $3957a0,x LDA LOAD_TYPE_TABLE,X ; Get 1st extension character of the entry -.395760 f0 37 beq $395799 BEQ no_match ; If NULL... we didn't get a match -.395762 d9 3a a0 cmp $38a03a,y CMP DOS_SHORT_NAME,Y ; Get the character of the extension -.395765 d0 28 bne $39578f BNE next_entry ; If they don't match, try the next entry -.395767 bf a1 57 39 lda $3957a1,x LDA LOAD_TYPE_TABLE+1,X ; Get 2nd extension character of the entry -.39576b d9 3b a0 cmp $38a03b,y CMP DOS_SHORT_NAME+1,Y ; Get the 2nd character of the extension -.39576e d0 1f bne $39578f BNE next_entry ; If they don't match, try the next entry -.395770 bf a2 57 39 lda $3957a2,x LDA LOAD_TYPE_TABLE+2,X ; Get 3rd extension character of the entry -.395774 d9 3c a0 cmp $38a03c,y CMP DOS_SHORT_NAME+2,Y ; Get the 3rd character of the extension -.395777 d0 16 bne $39578f BNE next_entry ; If they don't match, try the next entry -.395779 c2 20 rep #$20 REP #$20 ; set A long -.39577b bf a3 57 39 lda $3957a3,x LDA LOAD_TYPE_TABLE+3,X ; Get the low word of the address -.39577f 85 28 sta $0348 STA DOS_TEMP ; Save it to the jump vector -.395781 e2 20 sep #$20 SEP #$20 ; set A short -.395783 bf a5 57 39 lda $3957a5,x LDA LOAD_TYPE_TABLE+5,X ; Get the high byte of the address -.395787 85 2a sta $034a STA DOS_TEMP+2 ; Save it to the jump vector -.395789 a2 00 00 ldx #$0000 LDX #0 -.39578c dc 48 03 jmp [$0348] JML [DOS_TEMP] ; Jump to the loading routine -.39578f next_entry -.39578f c2 30 rep #$30 REP #$30 ; set A&X long -.395791 8a txa TXA -.395792 18 clc CLC -.395793 69 06 00 adc #$0006 ADC #6 -.395796 aa tax TAX -.395797 80 c1 bra $39575a BRA type_loop ; And check it against the file -.395799 no_match -.395799 e2 20 sep #$20 SEP #$20 ; set A short -.39579b a9 11 lda #$11 LDA #DOS_ERR_NOEXEC ; Return an not-executable error -.39579d 82 da 01 brl $39597a BRL IF_FAILURE ->3957a0 50 47 58 LOAD_TYPE_TABLE .text "PGX" ; "PGX" --> IF_LOADPGX ->3957a3 a7 57 .word <>IF_LOADPGX ->3957a5 39 .byte `IF_LOADPGX ->3957a6 00 .byte 0 -.3957a7 IF_LOADPGX -.3957a7 c2 10 rep #$10 REP #$10 ; set X long -.3957a9 e2 20 sep #$20 SEP #$20 ; set A short -.3957ab a0 00 00 ldy #$0000 LDY #0 -.3957ae b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Check for "PGX" signature -.3957b0 c9 50 cmp #$50 CMP #'P' -.3957b2 d0 15 bne $3957c9 BNE fail_sig ; If not found, fail -.3957b4 c8 iny INY -.3957b5 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y -.3957b7 c9 47 cmp #$47 CMP #'G' -.3957b9 d0 0e bne $3957c9 BNE fail_sig -.3957bb c8 iny INY -.3957bc b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y -.3957be c9 58 cmp #$58 CMP #'X' -.3957c0 d0 07 bne $3957c9 BNE fail_sig -.3957c2 c8 iny INY ; Check for CPU and version code ($01 for 65816) -.3957c3 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y -.3957c5 c9 01 cmp #$01 CMP #$01 -.3957c7 f0 17 beq $3957e0 BEQ get_dest ; All passes: go to get the destination address -.3957c9 a9 10 lda #$10 fail_sig LDA #DOS_ERR_PGXSIG ; Fail with a PGXSIG error code -.3957cb 22 7a 59 39 jsl $39597a JSL IF_FAILURE -.3957cf adjust_size -.3957cf c2 20 rep #$20 REP #$20 ; set A long -.3957d1 38 sec SEC ; Subtract the 8 bytes of the header from the file size -.3957d2 a5 2c lda $034c LDA DOS_FILE_SIZE -.3957d4 e9 08 00 sbc #$0008 SBC #8 -.3957d7 85 2c sta $034c STA DOS_FILE_SIZE -.3957d9 a5 2e lda $034e LDA DOS_FILE_SIZE+2 -.3957db e9 00 00 sbc #$0000 SBC #0 -.3957de 85 2e sta $034e STA DOS_FILE_SIZE+2 -.3957e0 get_dest -.3957e0 c2 20 rep #$20 REP #$20 ; set A long -.3957e2 c8 iny INY -.3957e3 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Get low word of destination address -.3957e5 85 34 sta $0354 STA DOS_DST_PTR ; And save it to the destination pointer -.3957e7 85 3c sta $035c STA DOS_RUN_PTR ; And save it to the RUN pointer -.3957e9 c8 iny INY -.3957ea c8 iny INY -.3957eb b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Get high word of destination address -.3957ed 85 36 sta $0356 STA DOS_DST_PTR+2 -.3957ef 85 3e sta $035e STA DOS_RUN_PTR+2 -.3957f1 c8 iny INY ; Point to the first data byte -.3957f2 c8 iny INY -.3957f3 copy_loop -.3957f3 e2 20 sep #$20 SEP #$20 ; set A short -.3957f5 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Read a byte from the file -.3957f7 87 34 sta [$0354] STA [DOS_DST_PTR] ; Write it to the destination -.3957f9 c2 20 rep #$20 REP #$20 ; set A long -.3957fb e6 34 inc $0354 INC DOS_DST_PTR ; Move to the next destination location -.3957fd d0 02 bne $395801 BNE dec_file_size -.3957ff e6 36 inc $0356 INC DOS_DST_PTR+2 -.395801 38 sec dec_file_size SEC ; Count down the number of bytes to read -.395802 a5 2c lda $034c LDA DOS_FILE_SIZE -.395804 e9 01 00 sbc #$0001 SBC #1 -.395807 85 2c sta $034c STA DOS_FILE_SIZE -.395809 a5 2e lda $034e LDA DOS_FILE_SIZE+2 -.39580b e9 00 00 sbc #$0000 SBC #0 -.39580e 85 2e sta $034e STA DOS_FILE_SIZE+2 -.395810 a5 2c lda $034c LDA DOS_FILE_SIZE ; Are we at the end of the file? -.395812 d0 04 bne $395818 BNE next_byte -.395814 a5 2e lda $034e LDA DOS_FILE_SIZE+2 -.395816 f0 14 beq $39582c BEQ done ; Yes: we're done -.395818 c8 iny next_byte INY ; Otherwise, move to the next source location -.395819 cc 0e a0 cpy $38a00e CPY CLUSTER_SIZE ; Are we at the end of the cluster? -.39581c d0 d5 bne $3957f3 BNE copy_loop ; No: keep copying -.39581e 22 00 4d 39 jsl $394d00 JSL DOS_READNEXT ; Yes: Load the next cluster -.395822 b0 03 bcs $395827 BCS next_cluster -.395824 82 57 01 brl $39597e BRL IF_PASSFAILURE ; If failed: pass that up the chain -.395827 a0 00 00 ldy #$0000 next_cluster LDY #0 -.39582a 80 c7 bra $3957f3 BRA copy_loop ; Go back to copying -.39582c 82 56 01 brl $395985 done BRL IF_SUCCESS -.39582f IF_LOADRAW -.39582f c2 30 rep #$30 REP #$30 ; set A&X long -.395831 a0 00 00 ldy #$0000 copy_cluster LDY #0 -.395834 copy_loop -.395834 e2 20 sep #$20 SEP #$20 ; set A short -.395836 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Copy byte from cluster to destination -.395838 97 34 sta [$0354],y STA [DOS_DST_PTR],Y -.39583a c2 20 rep #$20 REP #$20 ; set A long -.39583c 38 sec SEC ; Count down the number of bytes left -.39583d a5 2c lda $034c LDA DOS_FILE_SIZE -.39583f e9 01 00 sbc #$0001 SBC #1 -.395842 85 2c sta $034c STA DOS_FILE_SIZE -.395844 a5 2e lda $034e LDA DOS_FILE_SIZE+2 -.395846 e9 00 00 sbc #$0000 SBC #0 -.395849 85 2e sta $034e STA DOS_FILE_SIZE+2 -.39584b d0 04 bne $395851 BNE continue -.39584d a5 2c lda $034c LDA DOS_FILE_SIZE -.39584f f0 1b beq $39586c BEQ close_file ; If not: we're done -.395851 c8 iny continue INY -.395852 cc 0e a0 cpy $38a00e CPY CLUSTER_SIZE ; Are we done with the cluster? -.395855 d0 dd bne $395834 BNE copy_loop ; No: keep processing the bytes -.395857 18 clc CLC ; Advance the destination pointer to the next chunk of memory -.395858 a5 34 lda $0354 LDA DOS_DST_PTR -.39585a 6d 0e a0 adc $38a00e ADC CLUSTER_SIZE -.39585d 85 34 sta $0354 STA DOS_DST_PTR -.39585f a5 36 lda $0356 LDA DOS_DST_PTR+2 -.395861 69 00 00 adc #$0000 ADC #0 -.395864 85 36 sta $0356 STA DOS_DST_PTR+2 -.395866 22 36 55 39 jsl $395536 JSL IF_READ ; Yes: load the next cluster -.39586a b0 c5 bcs $395831 BCS copy_cluster ; And start copying it -.39586c close_file -.39586c 82 16 01 brl $395985 ret_success BRL IF_SUCCESS -.39586f IF_NULLBUFFER -.39586f 5a phy PHY -.395870 8b phb PHB -.395871 0b phd PHD -.395872 08 php PHP -.395873 48 pha PHA ; begin setdbr macro -.395874 08 php PHP -.395875 e2 20 sep #$20 SEP #$20 ; set A short -.395877 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395879 48 pha PHA -.39587a ab plb PLB -.39587b 28 plp PLP -.39587c 68 pla PLA ; end setdbr macro -.39587d 48 pha PHA ; begin setdp macro -.39587e 08 php PHP -.39587f c2 20 rep #$20 REP #$20 ; set A long -.395881 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395884 5b tcd TCD -.395885 28 plp PLP -.395886 68 pla PLA ; end setdp macro -.395887 c2 30 rep #$30 REP #$30 ; set A&X long -.395889 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER -.39588c b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39588e 85 28 sta $0348 STA DOS_TEMP -.395890 c8 iny INY -.395891 c8 iny INY -.395892 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395894 85 2a sta $034a STA DOS_TEMP+2 -.395896 a0 00 00 ldy #$0000 LDY #0 -.395899 a9 00 00 lda #$0000 LDA #0 -.39589c 97 28 sta [$0348],y loop STA [DOS_TEMP],Y -.39589e c8 iny INY -.39589f c8 iny INY -.3958a0 c0 00 02 cpy #$0200 CPY #DOS_SECTOR_SIZE -.3958a3 d0 f7 bne $39589c BNE loop -.3958a5 28 plp PLP -.3958a6 2b pld PLD -.3958a7 ab plb PLB -.3958a8 7a ply PLY -.3958a9 6b rtl RTL -.3958aa IF_COPY2BUFF -.3958aa 5a phy PHY -.3958ab 8b phb PHB -.3958ac 0b phd PHD -.3958ad 08 php PHP -.3958ae 48 pha PHA ; begin setdbr macro -.3958af 08 php PHP -.3958b0 e2 20 sep #$20 SEP #$20 ; set A short -.3958b2 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.3958b4 48 pha PHA -.3958b5 ab plb PLB -.3958b6 28 plp PLP -.3958b7 68 pla PLA ; end setdbr macro -.3958b8 48 pha PHA ; begin setdp macro -.3958b9 08 php PHP -.3958ba c2 20 rep #$20 REP #$20 ; set A long -.3958bc a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3958bf 5b tcd TCD -.3958c0 28 plp PLP -.3958c1 68 pla PLA ; end setdp macro -.3958c2 c2 30 rep #$30 REP #$30 ; set A&X long -.3958c4 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER -.3958c7 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3958c9 85 28 sta $0348 STA DOS_TEMP -.3958cb c8 iny INY -.3958cc c8 iny INY -.3958cd b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.3958cf 85 2a sta $034a STA DOS_TEMP+2 -.3958d1 a0 00 00 ldy #$0000 LDY #0 -.3958d4 copy_loop -.3958d4 e2 20 sep #$20 SEP #$20 ; set A short -.3958d6 a7 30 lda [$0350] LDA [DOS_SRC_PTR] ; Copy a byte -.3958d8 97 28 sta [$0348],y STA [DOS_TEMP],Y -.3958da c2 20 rep #$20 REP #$20 ; set A long -.3958dc e6 30 inc $0350 INC DOS_SRC_PTR ; Advance the source pointer -.3958de d0 02 bne $3958e2 BNE adv_dest -.3958e0 e6 32 inc $0352 INC DOS_SRC_PTR+2 -.3958e2 c8 iny adv_dest INY ; Count it -.3958e3 c0 00 02 cpy #$0200 CPY #DOS_SECTOR_SIZE ; Have we reached the limit? -.3958e6 f0 0c beq $3958f4 BEQ done ; Yes: we're done -.3958e8 a5 30 lda $0350 LDA DOS_SRC_PTR ; Check if we copied the last byte -.3958ea c5 38 cmp $0358 CMP DOS_END_PTR -.3958ec d0 e6 bne $3958d4 BNE copy_loop ; No: keep copying -.3958ee a5 32 lda $0352 LDA DOS_SRC_PTR+2 -.3958f0 c5 3a cmp $035a CMP DOS_END_PTR+2 -.3958f2 d0 e0 bne $3958d4 BNE copy_loop -.3958f4 28 plp done PLP -.3958f5 2b pld PLD -.3958f6 ab plb PLB -.3958f7 7a ply PLY -.3958f8 6b rtl RTL -.3958f9 IF_SAVE -.3958f9 da phx PHX -.3958fa 5a phy PHY -.3958fb 0b phd PHD -.3958fc 8b phb PHB -.3958fd 08 php PHP -.3958fe 48 pha PHA ; begin setdbr macro +.3954f3 c8 iny INY +.3954f4 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.3954f6 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3954f8 a0 1c 00 ldy #$001c LDY #DIRENTRY.SIZE ; Copy the filesize from the directory entry to the file descriptor +.3954fb b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y +.3954fd a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE +.395500 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395502 a0 1e 00 ldy #$001e LDY #DIRENTRY.SIZE+2 +.395505 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y +.395507 a0 14 00 ldy #$0014 LDY #FILEDESC.SIZE+2 +.39550a 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.39550c e2 20 sep #$20 SEP #$20 ; set A short +.39550e a0 00 00 ldy #$0000 LDY #FILEDESC.STATUS ; Mark file as open and readable +.395511 a9 39 lda #$39 LDA #FD_STAT_OPEN | FD_STAT_READ +.395513 17 20 ora [$0340],y ORA [DOS_FD_PTR],Y +.395515 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395517 82 bd 04 brl $3959d7 BRL IF_SUCCESS +.39551a IF_CREATE +.39551a da phx PHX +.39551b 5a phy PHY +.39551c 0b phd PHD +.39551d 8b phb PHB +.39551e 08 php PHP +.39551f 48 pha PHA ; begin setdbr macro +.395520 08 php PHP +.395521 e2 20 sep #$20 SEP #$20 ; set A short +.395523 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395525 48 pha PHA +.395526 ab plb PLB +.395527 28 plp PLP +.395528 68 pla PLA ; end setdbr macro +.395529 48 pha PHA ; begin setdp macro +.39552a 08 php PHP +.39552b c2 20 rep #$20 REP #$20 ; set A long +.39552d a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395530 5b tcd TCD +.395531 28 plp PLP +.395532 68 pla PLA ; end setdp macro +.395533 22 a1 52 39 jsl $3952a1 JSL DOS_CREATE ; Attempt to create the file +.395537 90 18 bcc $395551 BCC pass_failure ; If it fails: pass the failure up the chain +.395539 c2 30 rep #$30 REP #$30 ; set A&X long +.39553b a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Sets the current cluster to 0 to make sure the next write appends +.39553e a9 00 00 lda #$0000 LDA #0 +.395541 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395543 c8 iny INY +.395544 c8 iny INY +.395545 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395547 e2 20 sep #$20 SEP #$20 ; set A short +.395549 a0 00 00 ldy #$0000 LDY #FILEDESC.STATUS +.39554c a9 3a lda #$3a LDA #FD_STAT_OPEN | FD_STAT_WRITE ; Set the file to open and APPEND only +.39554e 82 86 04 brl $3959d7 BRL IF_SUCCESS +.395551 82 78 04 brl $3959cc pass_failure BRL IF_FAILURE +.395554 IF_CLOSE +.395554 da phx PHX +.395555 5a phy PHY +.395556 0b phd PHD +.395557 8b phb PHB +.395558 08 php PHP +.395559 48 pha PHA ; begin setdbr macro +.39555a 08 php PHP +.39555b e2 20 sep #$20 SEP #$20 ; set A short +.39555d a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.39555f 48 pha PHA +.395560 ab plb PLB +.395561 28 plp PLP +.395562 68 pla PLA ; end setdbr macro +.395563 48 pha PHA ; begin setdp macro +.395564 08 php PHP +.395565 c2 20 rep #$20 REP #$20 ; set A long +.395567 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39556a 5b tcd TCD +.39556b 28 plp PLP +.39556c 68 pla PLA ; end setdp macro +.39556d e2 20 sep #$20 SEP #$20 ; set A short +.39556f a0 00 00 ldy #$0000 LDY #FILEDESC.STATUS ; Check to see if we were writing the file +.395572 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395574 89 02 bit #$02 BIT #FD_STAT_WRITE +.395576 f0 09 beq $395581 BEQ set_flag ; No, just mark it closed +.395578 22 ed 55 39 jsl $3955ed JSL IF_WRITE ; Attempt to write the cluster +.39557c b0 03 bcs $395581 BCS set_flag +.39557e 82 4f 04 brl $3959d0 BRL IF_PASSFAILURE ; If there was a problem, pass it up the chain +.395581 22 d1 5a 39 jsl $395ad1 set_flag JSL IF_FREEFD ; Free the file descriptor as well +.395585 82 4f 04 brl $3959d7 BRL IF_SUCCESS +.395588 IF_READ +.395588 da phx PHX +.395589 5a phy PHY +.39558a 0b phd PHD +.39558b 8b phb PHB +.39558c 08 php PHP +.39558d 48 pha PHA ; begin setdbr macro +.39558e 08 php PHP +.39558f e2 20 sep #$20 SEP #$20 ; set A short +.395591 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395593 48 pha PHA +.395594 ab plb PLB +.395595 28 plp PLP +.395596 68 pla PLA ; end setdbr macro +.395597 48 pha PHA ; begin setdp macro +.395598 08 php PHP +.395599 c2 20 rep #$20 REP #$20 ; set A long +.39559b a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39559e 5b tcd TCD +.39559f 28 plp PLP +.3955a0 68 pla PLA ; end setdp macro +.3955a1 c2 10 rep #$10 REP #$10 ; set X long +.3955a3 e2 20 sep #$20 SEP #$20 ; set A short +.3955a5 get_dev +.3955a5 e2 20 sep #$20 SEP #$20 ; set A short +.3955a7 a0 01 00 ldy #$0001 LDY #FILEDESC.DEV ; Get the device number from the file descriptor +.3955aa b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3955ac 85 01 sta $0321 STA BIOS_DEV +.3955ae 22 a6 45 39 jsl $3945a6 JSL DOS_MOUNT ; Make sure the device is mounted (if needed) +.3955b2 c2 20 rep #$20 REP #$20 ; set A long +.3955b4 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Get the file's current cluster +.3955b7 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3955b9 85 10 sta $0330 STA DOS_CLUS_ID +.3955bb c8 iny INY +.3955bc c8 iny INY +.3955bd b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3955bf 85 12 sta $0332 STA DOS_CLUS_ID+2 +.3955c1 22 4e 4c 39 jsl $394c4e JSL NEXTCLUSTER ; Find the next cluster of the file +.3955c5 90 13 bcc $3955da BCC pass_failure ; If not OK: pass the failure up the chain +.3955c7 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; Get the pointer to the file's cluster buffer +.3955ca b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3955cc 85 1c sta $033c STA DOS_BUFF_PTR +.3955ce c8 iny INY +.3955cf c8 iny INY +.3955d0 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3955d2 85 1e sta $033e STA DOS_BUFF_PTR+2 +.3955d4 22 3e 48 39 jsl $39483e JSL DOS_GETCLUSTER ; Get the cluster +.3955d8 b0 03 bcs $3955dd BCS ret_success ; If ok: return success +.3955da pass_failure +.3955da 82 f3 03 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: bubble up the failure +.3955dd a0 06 00 ldy #$0006 ret_success LDY #FILEDESC.CLUSTER ; Save the new cluster as the file's current cluster +.3955e0 a5 10 lda $0330 LDA DOS_CLUS_ID +.3955e2 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3955e4 c8 iny INY +.3955e5 c8 iny INY +.3955e6 a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.3955e8 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3955ea 82 ea 03 brl $3959d7 BRL IF_SUCCESS +.3955ed IF_WRITE +.3955ed da phx PHX +.3955ee 5a phy PHY +.3955ef 0b phd PHD +.3955f0 8b phb PHB +.3955f1 08 php PHP +.3955f2 48 pha PHA ; begin setdbr macro +.3955f3 08 php PHP +.3955f4 e2 20 sep #$20 SEP #$20 ; set A short +.3955f6 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3955f8 48 pha PHA +.3955f9 ab plb PLB +.3955fa 28 plp PLP +.3955fb 68 pla PLA ; end setdbr macro +.3955fc 48 pha PHA ; begin setdp macro +.3955fd 08 php PHP +.3955fe c2 20 rep #$20 REP #$20 ; set A long +.395600 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395603 5b tcd TCD +.395604 28 plp PLP +.395605 68 pla PLA ; end setdp macro +.395606 c2 10 rep #$10 REP #$10 ; set X long +.395608 e2 20 sep #$20 SEP #$20 ; set A short +.39560a a0 01 00 ldy #$0001 get_dev LDY #FILEDESC.DEV ; Get the device number from the file descriptor +.39560d b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39560f 85 01 sta $0321 STA BIOS_DEV +.395611 22 a6 45 39 jsl $3945a6 JSL DOS_MOUNT ; Make sure the device is mounted (if needed) +.395615 c2 20 rep #$20 REP #$20 ; set A long +.395617 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; Get the pointer to the file's cluster buffer +.39561a b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39561c 85 1c sta $033c STA DOS_BUFF_PTR +.39561e c8 iny INY +.39561f c8 iny INY +.395620 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395622 85 1e sta $033e STA DOS_BUFF_PTR+2 +.395624 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Get the file's current cluster +.395627 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395629 85 10 sta $0330 STA DOS_CLUS_ID +.39562b c8 iny INY +.39562c c8 iny INY +.39562d b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39562f 85 12 sta $0332 STA DOS_CLUS_ID+2 +.395631 d0 1a bne $39564d BNE rewrite_cluster ; If the cluster ID <> 0, overwrite it +.395633 a5 10 lda $0330 LDA DOS_CLUS_ID +.395635 d0 16 bne $39564d BNE rewrite_cluster +.395637 a0 0a 00 ldy #$000a LDY #FILEDESC.FIRST_CLUSTER ; Get the file's first cluster +.39563a b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39563c 85 10 sta $0330 STA DOS_CLUS_ID +.39563e c8 iny INY +.39563f c8 iny INY +.395640 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395642 85 12 sta $0332 STA DOS_CLUS_ID+2 +.395644 22 6f 50 39 jsl $39506f JSL DOS_APPENDCLUS ; Append the cluster +.395648 b0 0c bcs $395656 BCS ret_success ; If OK: return success +.39564a 82 83 03 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: bubble up the failure +.39564d 22 7b 48 39 jsl $39487b rewrite_cluster JSL DOS_PUTCLUSTER ; Over-write the cluster +.395651 b0 03 bcs $395656 BCS ret_success ; If ok: return success +.395653 82 7a 03 brl $3959d0 pass_failure BRL IF_PASSFAILURE ; Otherwise: bubble up the failure +.395656 82 7e 03 brl $3959d7 ret_success BRL IF_SUCCESS +.395659 IF_DIROPEN +.395659 da phx PHX +.39565a 5a phy PHY +.39565b 0b phd PHD +.39565c 8b phb PHB +.39565d 08 php PHP +.39565e 48 pha PHA ; begin setdbr macro +.39565f 08 php PHP +.395660 e2 20 sep #$20 SEP #$20 ; set A short +.395662 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395664 48 pha PHA +.395665 ab plb PLB +.395666 28 plp PLP +.395667 68 pla PLA ; end setdbr macro +.395668 48 pha PHA ; begin setdp macro +.395669 08 php PHP +.39566a c2 20 rep #$20 REP #$20 ; set A long +.39566c a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.39566f 5b tcd TCD +.395670 28 plp PLP +.395671 68 pla PLA ; end setdp macro +.395672 c2 30 rep #$30 REP #$30 ; set A&X long +.395674 22 ce 53 39 jsl $3953ce JSL DOS_COPYPATH ; Copy the path from the file descriptor to the path buffer +.395678 22 8c 49 39 jsl $39498c JSL DOS_PARSE_PATH ; Parse the path +.39567c 22 a6 45 39 jsl $3945a6 JSL DOS_MOUNT ; Make sure we've mounted the SDC. +.395680 b0 03 bcs $395685 BCS get_root_dir ; If successful: get the root directory +.395682 82 4b 03 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: pass the error up the chain +.395685 get_root_dir +.395685 c2 30 rep #$30 REP #$30 ; set A&X long +.395687 22 5b 42 39 jsl $39425b JSL DOS_DIROPEN +.39568b b0 03 bcs $395690 BCS success +.39568d 82 40 03 brl $3959d0 BRL IF_PASSFAILURE +.395690 82 44 03 brl $3959d7 success BRL IF_SUCCESS +.395693 IF_DIRNEXT +.395693 5c f5 42 39 jmp $3942f5 JML DOS_DIRNEXT +.395697 IF_DELETE +.395697 da phx PHX +.395698 5a phy PHY +.395699 0b phd PHD +.39569a 8b phb PHB +.39569b 08 php PHP +.39569c 48 pha PHA ; begin setdbr macro +.39569d 08 php PHP +.39569e e2 20 sep #$20 SEP #$20 ; set A short +.3956a0 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3956a2 48 pha PHA +.3956a3 ab plb PLB +.3956a4 28 plp PLP +.3956a5 68 pla PLA ; end setdbr macro +.3956a6 48 pha PHA ; begin setdp macro +.3956a7 08 php PHP +.3956a8 c2 20 rep #$20 REP #$20 ; set A long +.3956aa a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3956ad 5b tcd TCD +.3956ae 28 plp PLP +.3956af 68 pla PLA ; end setdp macro +.3956b0 c2 30 rep #$30 REP #$30 ; set A&X long +.3956b2 22 24 4a 39 jsl $394a24 JSL DOS_FINDFILE +.3956b6 b0 03 bcs $3956bb BCS get_first_clus +.3956b8 82 15 03 brl $3959d0 BRL IF_PASSFAILURE +.3956bb get_first_clus +.3956bb a0 1a 00 ldy #$001a LDY #DIRENTRY.CLUSTER_L +.3956be b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y +.3956c0 85 10 sta $0330 STA DOS_CLUS_ID +.3956c2 a0 14 00 ldy #$0014 LDY #DIRENTRY.CLUSTER_H +.3956c5 b7 18 lda [$0338],y LDA [DOS_DIR_PTR],Y +.3956c7 85 12 sta $0332 STA DOS_CLUS_ID+2 +.3956c9 a5 10 lda $0330 LDA DOS_CLUS_ID +.3956cb 8d 2a a0 sta $38a02a STA DOS_CURR_CLUS +.3956ce a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.3956d0 8d 2c a0 sta $38a02c STA DOS_CURR_CLUS+2 +.3956d3 22 4e 4c 39 jsl $394c4e del_loop JSL NEXTCLUSTER +.3956d7 90 2f bcc $395708 BCC del_one +.3956d9 a5 10 lda $0330 LDA DOS_CLUS_ID +.3956db 8d 2e a0 sta $38a02e STA DOS_NEXT_CLUS +.3956de a5 12 lda $0332 LDA DOS_CLUS_ID+2 +.3956e0 8d 30 a0 sta $38a030 STA DOS_NEXT_CLUS+2 +.3956e3 ad 2a a0 lda $38a02a LDA DOS_CURR_CLUS +.3956e6 85 10 sta $0330 STA DOS_CLUS_ID +.3956e8 ad 2c a0 lda $38a02c LDA DOS_CURR_CLUS+2 +.3956eb 85 12 sta $0332 STA DOS_CLUS_ID+2 +.3956ed 22 2f 50 39 jsl $39502f JSL DELCLUSTER32 +.3956f1 b0 03 bcs $3956f6 BCS go_next +.3956f3 82 da 02 brl $3959d0 BRL IF_PASSFAILURE +.3956f6 go_next +.3956f6 ad 2e a0 lda $38a02e LDA DOS_NEXT_CLUS +.3956f9 85 10 sta $0330 STA DOS_CLUS_ID +.3956fb 8d 2a a0 sta $38a02a STA DOS_CURR_CLUS +.3956fe ad 30 a0 lda $38a030 LDA DOS_NEXT_CLUS+2 +.395701 85 12 sta $0332 STA DOS_CLUS_ID+2 +.395703 8d 2c a0 sta $38a02c STA DOS_CURR_CLUS+2 +.395706 80 cb bra $3956d3 BRA del_loop +.395708 del_one +.395708 ad 2a a0 lda $38a02a LDA DOS_CURR_CLUS +.39570b 85 10 sta $0330 STA DOS_CLUS_ID +.39570d ad 2c a0 lda $38a02c LDA DOS_CURR_CLUS+2 +.395710 85 12 sta $0332 STA DOS_CLUS_ID+2 +.395712 22 89 4f 39 jsl $394f89 JSL DELCLUSTER +.395716 b0 03 bcs $39571b BCS free_dir_entry +.395718 82 b5 02 brl $3959d0 BRL IF_PASSFAILURE +.39571b free_dir_entry +.39571b e2 20 sep #$20 SEP #$20 ; set A short +.39571d a0 00 00 ldy #$0000 LDY #DIRENTRY.SHORTNAME ; Flag the directory entry as deleted +.395720 a9 e5 lda #$e5 LDA #DOS_DIR_ENT_UNUSED +.395722 97 18 sta [$0338],y STA [DOS_DIR_PTR],Y +.395724 22 74 44 39 jsl $394474 JSL DOS_DIRWRITE ; Write the directory entry back +.395728 b0 03 bcs $39572d BCS ret_success +.39572a 82 a3 02 brl $3959d0 BRL IF_PASSFAILURE +.39572d 82 a7 02 brl $3959d7 ret_success BRL IF_SUCCESS +.395730 IF_DIRREAD +.395730 da phx PHX +.395731 5a phy PHY +.395732 0b phd PHD +.395733 8b phb PHB +.395734 08 php PHP +.395735 48 pha PHA ; begin setdbr macro +.395736 08 php PHP +.395737 e2 20 sep #$20 SEP #$20 ; set A short +.395739 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.39573b 48 pha PHA +.39573c ab plb PLB +.39573d 28 plp PLP +.39573e 68 pla PLA ; end setdbr macro +.39573f 48 pha PHA ; begin setdp macro +.395740 08 php PHP +.395741 c2 20 rep #$20 REP #$20 ; set A long +.395743 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395746 5b tcd TCD +.395747 28 plp PLP +.395748 68 pla PLA ; end setdp macro +.395749 c2 30 rep #$30 REP #$30 ; set A&X long +.39574b 22 24 4a 39 jsl $394a24 JSL DOS_FINDFILE +.39574f b0 03 bcs $395754 BCS success +.395751 82 78 02 brl $3959cc BRL IF_FAILURE +.395754 82 80 02 brl $3959d7 success BRL IF_SUCCESS +.395757 IF_DIRWRITE +.395757 5c 74 44 39 jmp $394474 JML DOS_DIRWRITE +.39575b IF_LOAD +.39575b da phx PHX +.39575c 5a phy PHY +.39575d 0b phd PHD +.39575e 8b phb PHB +.39575f 08 php PHP +.395760 48 pha PHA ; begin setdbr macro +.395761 08 php PHP +.395762 e2 20 sep #$20 SEP #$20 ; set A short +.395764 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395766 48 pha PHA +.395767 ab plb PLB +.395768 28 plp PLP +.395769 68 pla PLA ; end setdbr macro +.39576a 48 pha PHA ; begin setdp macro +.39576b 08 php PHP +.39576c c2 20 rep #$20 REP #$20 ; set A long +.39576e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395771 5b tcd TCD +.395772 28 plp PLP +.395773 68 pla PLA ; end setdp macro +.395774 c2 30 rep #$30 REP #$30 ; set A&X long +.395776 22 87 54 39 jsl $395487 JSL IF_OPEN +.39577a b0 03 bcs $39577f BCS setup ; If success: start setting things up +.39577c 82 51 02 brl $3959d0 BRL IF_PASSFAILURE ; Otherwise: pass the failure up the chain +.39577f setup +.39577f c2 20 rep #$20 REP #$20 ; set A long +.395781 a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE ; Record the size of the file in DOS_FILE_SIZE +.395784 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395786 85 2c sta $034c STA DOS_FILE_SIZE +.395788 c8 iny INY +.395789 c8 iny INY +.39578a b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39578c 85 2e sta $034e STA DOS_FILE_SIZE+2 +.39578e a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER ; Set up the source pointer +.395791 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395793 85 30 sta $0350 STA DOS_SRC_PTR +.395795 c8 iny INY +.395796 c8 iny INY +.395797 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395799 85 32 sta $0352 STA DOS_SRC_PTR+2 +.39579b a5 36 lda $0356 LDA DOS_DST_PTR+2 ; Is there a destination address in RAM? +.39579d c9 40 00 cmp #$0040 CMP #$0040 +.3957a0 b0 04 bcs $3957a6 BGE load_by_type ; No: try to load it by type +.3957a2 5c 81 58 39 jmp $395881 JML IF_LOADRAW ; Otherwise, load it to the supplied destination +.3957a6 a0 08 00 ldy #$0008 load_by_type LDY #8 ; Point to the first extension byte +.3957a9 a2 00 00 ldx #$0000 LDX #0 ; and the first byte of the table +.3957ac type_loop +.3957ac e2 20 sep #$20 SEP #$20 ; set A short +.3957ae bf f2 57 39 lda $3957f2,x LDA LOAD_TYPE_TABLE,X ; Get 1st extension character of the entry +.3957b2 f0 37 beq $3957eb BEQ no_match ; If NULL... we didn't get a match +.3957b4 d9 3a a0 cmp $38a03a,y CMP DOS_SHORT_NAME,Y ; Get the character of the extension +.3957b7 d0 28 bne $3957e1 BNE next_entry ; If they don't match, try the next entry +.3957b9 bf f3 57 39 lda $3957f3,x LDA LOAD_TYPE_TABLE+1,X ; Get 2nd extension character of the entry +.3957bd d9 3b a0 cmp $38a03b,y CMP DOS_SHORT_NAME+1,Y ; Get the 2nd character of the extension +.3957c0 d0 1f bne $3957e1 BNE next_entry ; If they don't match, try the next entry +.3957c2 bf f4 57 39 lda $3957f4,x LDA LOAD_TYPE_TABLE+2,X ; Get 3rd extension character of the entry +.3957c6 d9 3c a0 cmp $38a03c,y CMP DOS_SHORT_NAME+2,Y ; Get the 3rd character of the extension +.3957c9 d0 16 bne $3957e1 BNE next_entry ; If they don't match, try the next entry +.3957cb c2 20 rep #$20 REP #$20 ; set A long +.3957cd bf f5 57 39 lda $3957f5,x LDA LOAD_TYPE_TABLE+3,X ; Get the low word of the address +.3957d1 85 28 sta $0348 STA DOS_TEMP ; Save it to the jump vector +.3957d3 e2 20 sep #$20 SEP #$20 ; set A short +.3957d5 bf f7 57 39 lda $3957f7,x LDA LOAD_TYPE_TABLE+5,X ; Get the high byte of the address +.3957d9 85 2a sta $034a STA DOS_TEMP+2 ; Save it to the jump vector +.3957db a2 00 00 ldx #$0000 LDX #0 +.3957de dc 48 03 jmp [$0348] JML [DOS_TEMP] ; Jump to the loading routine +.3957e1 next_entry +.3957e1 c2 30 rep #$30 REP #$30 ; set A&X long +.3957e3 8a txa TXA +.3957e4 18 clc CLC +.3957e5 69 06 00 adc #$0006 ADC #6 +.3957e8 aa tax TAX +.3957e9 80 c1 bra $3957ac BRA type_loop ; And check it against the file +.3957eb no_match +.3957eb e2 20 sep #$20 SEP #$20 ; set A short +.3957ed a9 11 lda #$11 LDA #DOS_ERR_NOEXEC ; Return an not-executable error +.3957ef 82 da 01 brl $3959cc BRL IF_FAILURE +>3957f2 50 47 58 LOAD_TYPE_TABLE .text "PGX" ; "PGX" --> IF_LOADPGX +>3957f5 f9 57 .word <>IF_LOADPGX +>3957f7 39 .byte `IF_LOADPGX +>3957f8 00 .byte 0 +.3957f9 IF_LOADPGX +.3957f9 c2 10 rep #$10 REP #$10 ; set X long +.3957fb e2 20 sep #$20 SEP #$20 ; set A short +.3957fd a0 00 00 ldy #$0000 LDY #0 +.395800 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Check for "PGX" signature +.395802 c9 50 cmp #$50 CMP #'P' +.395804 d0 15 bne $39581b BNE fail_sig ; If not found, fail +.395806 c8 iny INY +.395807 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y +.395809 c9 47 cmp #$47 CMP #'G' +.39580b d0 0e bne $39581b BNE fail_sig +.39580d c8 iny INY +.39580e b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y +.395810 c9 58 cmp #$58 CMP #'X' +.395812 d0 07 bne $39581b BNE fail_sig +.395814 c8 iny INY ; Check for CPU and version code ($01 for 65816) +.395815 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y +.395817 c9 01 cmp #$01 CMP #$01 +.395819 f0 17 beq $395832 BEQ get_dest ; All passes: go to get the destination address +.39581b a9 10 lda #$10 fail_sig LDA #DOS_ERR_PGXSIG ; Fail with a PGXSIG error code +.39581d 22 cc 59 39 jsl $3959cc JSL IF_FAILURE +.395821 adjust_size +.395821 c2 20 rep #$20 REP #$20 ; set A long +.395823 38 sec SEC ; Subtract the 8 bytes of the header from the file size +.395824 a5 2c lda $034c LDA DOS_FILE_SIZE +.395826 e9 08 00 sbc #$0008 SBC #8 +.395829 85 2c sta $034c STA DOS_FILE_SIZE +.39582b a5 2e lda $034e LDA DOS_FILE_SIZE+2 +.39582d e9 00 00 sbc #$0000 SBC #0 +.395830 85 2e sta $034e STA DOS_FILE_SIZE+2 +.395832 get_dest +.395832 c2 20 rep #$20 REP #$20 ; set A long +.395834 c8 iny INY +.395835 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Get low word of destination address +.395837 85 34 sta $0354 STA DOS_DST_PTR ; And save it to the destination pointer +.395839 85 3c sta $035c STA DOS_RUN_PTR ; And save it to the RUN pointer +.39583b c8 iny INY +.39583c c8 iny INY +.39583d b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Get high word of destination address +.39583f 85 36 sta $0356 STA DOS_DST_PTR+2 +.395841 85 3e sta $035e STA DOS_RUN_PTR+2 +.395843 c8 iny INY ; Point to the first data byte +.395844 c8 iny INY +.395845 copy_loop +.395845 e2 20 sep #$20 SEP #$20 ; set A short +.395847 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Read a byte from the file +.395849 87 34 sta [$0354] STA [DOS_DST_PTR] ; Write it to the destination +.39584b c2 20 rep #$20 REP #$20 ; set A long +.39584d e6 34 inc $0354 INC DOS_DST_PTR ; Move to the next destination location +.39584f d0 02 bne $395853 BNE dec_file_size +.395851 e6 36 inc $0356 INC DOS_DST_PTR+2 +.395853 38 sec dec_file_size SEC ; Count down the number of bytes to read +.395854 a5 2c lda $034c LDA DOS_FILE_SIZE +.395856 e9 01 00 sbc #$0001 SBC #1 +.395859 85 2c sta $034c STA DOS_FILE_SIZE +.39585b a5 2e lda $034e LDA DOS_FILE_SIZE+2 +.39585d e9 00 00 sbc #$0000 SBC #0 +.395860 85 2e sta $034e STA DOS_FILE_SIZE+2 +.395862 a5 2c lda $034c LDA DOS_FILE_SIZE ; Are we at the end of the file? +.395864 d0 04 bne $39586a BNE next_byte +.395866 a5 2e lda $034e LDA DOS_FILE_SIZE+2 +.395868 f0 14 beq $39587e BEQ done ; Yes: we're done +.39586a c8 iny next_byte INY ; Otherwise, move to the next source location +.39586b cc 0e a0 cpy $38a00e CPY CLUSTER_SIZE ; Are we at the end of the cluster? +.39586e d0 d5 bne $395845 BNE copy_loop ; No: keep copying +.395870 22 52 4d 39 jsl $394d52 JSL DOS_READNEXT ; Yes: Load the next cluster +.395874 b0 03 bcs $395879 BCS next_cluster +.395876 82 57 01 brl $3959d0 BRL IF_PASSFAILURE ; If failed: pass that up the chain +.395879 a0 00 00 ldy #$0000 next_cluster LDY #0 +.39587c 80 c7 bra $395845 BRA copy_loop ; Go back to copying +.39587e 82 56 01 brl $3959d7 done BRL IF_SUCCESS +.395881 IF_LOADRAW +.395881 c2 30 rep #$30 REP #$30 ; set A&X long +.395883 a0 00 00 ldy #$0000 copy_cluster LDY #0 +.395886 copy_loop +.395886 e2 20 sep #$20 SEP #$20 ; set A short +.395888 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y ; Copy byte from cluster to destination +.39588a 97 34 sta [$0354],y STA [DOS_DST_PTR],Y +.39588c c2 20 rep #$20 REP #$20 ; set A long +.39588e 38 sec SEC ; Count down the number of bytes left +.39588f a5 2c lda $034c LDA DOS_FILE_SIZE +.395891 e9 01 00 sbc #$0001 SBC #1 +.395894 85 2c sta $034c STA DOS_FILE_SIZE +.395896 a5 2e lda $034e LDA DOS_FILE_SIZE+2 +.395898 e9 00 00 sbc #$0000 SBC #0 +.39589b 85 2e sta $034e STA DOS_FILE_SIZE+2 +.39589d d0 04 bne $3958a3 BNE continue +.39589f a5 2c lda $034c LDA DOS_FILE_SIZE +.3958a1 f0 1b beq $3958be BEQ close_file ; If not: we're done +.3958a3 c8 iny continue INY +.3958a4 cc 0e a0 cpy $38a00e CPY CLUSTER_SIZE ; Are we done with the cluster? +.3958a7 d0 dd bne $395886 BNE copy_loop ; No: keep processing the bytes +.3958a9 18 clc CLC ; Advance the destination pointer to the next chunk of memory +.3958aa a5 34 lda $0354 LDA DOS_DST_PTR +.3958ac 6d 0e a0 adc $38a00e ADC CLUSTER_SIZE +.3958af 85 34 sta $0354 STA DOS_DST_PTR +.3958b1 a5 36 lda $0356 LDA DOS_DST_PTR+2 +.3958b3 69 00 00 adc #$0000 ADC #0 +.3958b6 85 36 sta $0356 STA DOS_DST_PTR+2 +.3958b8 22 88 55 39 jsl $395588 JSL IF_READ ; Yes: load the next cluster +.3958bc b0 c5 bcs $395883 BCS copy_cluster ; And start copying it +.3958be close_file +.3958be 82 16 01 brl $3959d7 ret_success BRL IF_SUCCESS +.3958c1 IF_NULLBUFFER +.3958c1 5a phy PHY +.3958c2 8b phb PHB +.3958c3 0b phd PHD +.3958c4 08 php PHP +.3958c5 48 pha PHA ; begin setdbr macro +.3958c6 08 php PHP +.3958c7 e2 20 sep #$20 SEP #$20 ; set A short +.3958c9 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.3958cb 48 pha PHA +.3958cc ab plb PLB +.3958cd 28 plp PLP +.3958ce 68 pla PLA ; end setdbr macro +.3958cf 48 pha PHA ; begin setdp macro +.3958d0 08 php PHP +.3958d1 c2 20 rep #$20 REP #$20 ; set A long +.3958d3 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3958d6 5b tcd TCD +.3958d7 28 plp PLP +.3958d8 68 pla PLA ; end setdp macro +.3958d9 c2 30 rep #$30 REP #$30 ; set A&X long +.3958db a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER +.3958de b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3958e0 85 28 sta $0348 STA DOS_TEMP +.3958e2 c8 iny INY +.3958e3 c8 iny INY +.3958e4 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.3958e6 85 2a sta $034a STA DOS_TEMP+2 +.3958e8 a0 00 00 ldy #$0000 LDY #0 +.3958eb a9 00 00 lda #$0000 LDA #0 +.3958ee 97 28 sta [$0348],y loop STA [DOS_TEMP],Y +.3958f0 c8 iny INY +.3958f1 c8 iny INY +.3958f2 c0 00 02 cpy #$0200 CPY #DOS_SECTOR_SIZE +.3958f5 d0 f7 bne $3958ee BNE loop +.3958f7 28 plp PLP +.3958f8 2b pld PLD +.3958f9 ab plb PLB +.3958fa 7a ply PLY +.3958fb 6b rtl RTL +.3958fc IF_COPY2BUFF +.3958fc 5a phy PHY +.3958fd 8b phb PHB +.3958fe 0b phd PHD .3958ff 08 php PHP -.395900 e2 20 sep #$20 SEP #$20 ; set A short -.395902 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395904 48 pha PHA -.395905 ab plb PLB -.395906 28 plp PLP -.395907 68 pla PLA ; end setdbr macro -.395908 48 pha PHA ; begin setdp macro -.395909 08 php PHP -.39590a c2 20 rep #$20 REP #$20 ; set A long -.39590c a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.39590f 5b tcd TCD -.395910 28 plp PLP -.395911 68 pla PLA ; end setdp macro -.395912 c2 30 rep #$30 REP #$30 ; set A&X long -.395914 a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE ; DOS_FD_PTR->SIZE := DOS_END_PTR - DOS_SRC_PTR -.395917 38 sec SEC -.395918 a5 38 lda $0358 LDA DOS_END_PTR -.39591a e5 30 sbc $0350 SBC DOS_SRC_PTR -.39591c 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395900 48 pha PHA ; begin setdbr macro +.395901 08 php PHP +.395902 e2 20 sep #$20 SEP #$20 ; set A short +.395904 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395906 48 pha PHA +.395907 ab plb PLB +.395908 28 plp PLP +.395909 68 pla PLA ; end setdbr macro +.39590a 48 pha PHA ; begin setdp macro +.39590b 08 php PHP +.39590c c2 20 rep #$20 REP #$20 ; set A long +.39590e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395911 5b tcd TCD +.395912 28 plp PLP +.395913 68 pla PLA ; end setdp macro +.395914 c2 30 rep #$30 REP #$30 ; set A&X long +.395916 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER +.395919 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39591b 85 28 sta $0348 STA DOS_TEMP +.39591d c8 iny INY .39591e c8 iny INY -.39591f c8 iny INY -.395920 a5 3a lda $035a LDA DOS_END_PTR+2 -.395922 e5 32 sbc $0352 SBC DOS_SRC_PTR+2 -.395924 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395926 a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE ; DOS_FD_PTR->SIZE++ -.395929 18 clc CLC -.39592a b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.39592c 69 01 00 adc #$0001 ADC #1 -.39592f 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395931 90 09 bcc $39593c BCC first_block -.395933 c8 iny INY -.395934 c8 iny INY -.395935 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y -.395937 69 00 00 adc #$0000 ADC #0 -.39593a 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.39593c 22 6f 58 39 jsl $39586f first_block JSL IF_NULLBUFFER ; Fill FD buffer with NULL -.395940 22 aa 58 39 jsl $3958aa JSL IF_COPY2BUFF ; Copy first (at most) 512 bytes of data to FD buffer -.395944 22 c8 54 39 jsl $3954c8 JSL IF_CREATE ; Create file. -.395948 b0 03 bcs $39594d BCS check_for_end -.39594a 82 31 00 brl $39597e BRL IF_PASSFAILURE ; If we couldn't create the file, pass the failure up -.39594d a5 30 lda $0350 check_for_end LDA DOS_SRC_PTR ; Check if we copied the last byte -.39594f c5 38 cmp $0358 CMP DOS_END_PTR -.395951 d0 06 bne $395959 BNE next_block -.395953 a5 32 lda $0352 LDA DOS_SRC_PTR+2 -.395955 c5 3a cmp $035a CMP DOS_END_PTR+2 -.395957 f0 1d beq $395976 BEQ done ; Yes: we're done -.395959 22 6f 58 39 jsl $39586f next_block JSL IF_NULLBUFFER ; Fill FD buffer with NULL -.39595d 22 aa 58 39 jsl $3958aa JSL IF_COPY2BUFF ; Copy next (at most) 512 bytes of data to FD buffer -.395961 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Make sure the CLUSTER is 0 to force an append -.395964 a9 00 00 lda #$0000 LDA #0 -.395967 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395969 c8 iny INY -.39596a c8 iny INY -.39596b 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.39596d 22 9b 55 39 jsl $39559b JSL IF_WRITE ; Append to the file -.395971 b0 da bcs $39594d BCS check_for_end ; And try again -.395973 82 08 00 brl $39597e BRL IF_PASSFAILURE ; If we couldn't update the file, pass the failure up -.395976 5c 85 59 39 jmp $395985 done JML IF_SUCCESS -.39597a IF_FAILURE -.39597a e2 20 sep #$20 SEP #$20 ; set A short -.39597c 85 0e sta $032e STA DOS_STATUS -.39597e 28 plp IF_PASSFAILURE PLP -.39597f 18 clc CLC -.395980 ab plb PLB -.395981 2b pld PLD -.395982 7a ply PLY -.395983 fa plx PLX -.395984 6b rtl RTL -.395985 IF_SUCCESS -.395985 e2 20 sep #$20 SEP #$20 ; set A short -.395987 64 00 stz $0320 STZ BIOS_STATUS -.395989 64 0e stz $032e STZ DOS_STATUS -.39598b 28 plp PLP -.39598c 38 sec SEC -.39598d ab plb PLB -.39598e 2b pld PLD -.39598f 7a ply PLY -.395990 fa plx PLX -.395991 6b rtl RTL -.395992 IF_RUN -.395992 da phx PHX -.395993 5a phy PHY -.395994 0b phd PHD -.395995 8b phb PHB -.395996 08 php PHP -.395997 48 pha PHA ; begin setdbr macro -.395998 08 php PHP -.395999 e2 20 sep #$20 SEP #$20 ; set A short -.39599b a9 00 lda #$00 LDA #0 -.39599d 48 pha PHA -.39599e ab plb PLB -.39599f 28 plp PLP -.3959a0 68 pla PLA ; end setdbr macro -.3959a1 48 pha PHA ; begin setdp macro -.3959a2 08 php PHP -.3959a3 c2 20 rep #$20 REP #$20 ; set A long -.3959a5 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.3959a8 5b tcd TCD -.3959a9 28 plp PLP -.3959aa 68 pla PLA ; end setdp macro -.3959ab e2 20 sep #$20 SEP #$20 ; set A short -.3959ad c2 10 rep #$10 REP #$10 ; set X long -.3959af a9 00 lda #$00 LDA #0 ; Zero out the file descriptor -.3959b1 a2 00 00 ldx #$0000 LDX #0 -.3959b4 9f 00 ad 38 sta $38ad00,x clr_fd_loop STA @l DOS_SPARE_FD,X -.3959b8 e8 inx INX -.3959b9 e0 20 00 cpx #$0020 CPX #SIZE(FILEDESC) -.3959bc d0 f6 bne $3959b4 BNE clr_fd_loop -.3959be c2 20 rep #$20 REP #$20 ; set A long -.3959c0 a9 00 ab lda #$ab00 LDA #<>DOS_SPARE_SECTOR ; Set the buffer for the file descriptor -.3959c3 8f 0e ad 38 sta $38ad0e STA @l DOS_SPARE_FD+FILEDESC.BUFFER -.3959c7 a9 38 00 lda #$0038 LDA #`DOS_SPARE_SECTOR -.3959ca 8f 10 ad 38 sta $38ad10 STA @l DOS_SPARE_FD+FILEDESC.BUFFER+2 -.3959ce a5 40 lda $0360 LDA DOS_RUN_PARAM ; Set the path for the file descriptor -.3959d0 8f 02 ad 38 sta $38ad02 STA @l DOS_SPARE_FD+FILEDESC.PATH -.3959d4 a5 42 lda $0362 LDA DOS_RUN_PARAM+2 -.3959d6 8f 04 ad 38 sta $38ad04 STA @l DOS_SPARE_FD+FILEDESC.PATH+2 -.3959da a9 00 00 lda #$0000 LDA #0 ; Clear the run pointer -.3959dd 85 3c sta $035c STA DOS_RUN_PTR ; This is used to check that we loaded an executable binary -.3959df 85 3e sta $035e STA DOS_RUN_PTR+2 -.3959e1 a9 00 ad lda #$ad00 LDA #<>DOS_SPARE_FD -.3959e4 85 20 sta $0340 STA DOS_FD_PTR -.3959e6 a9 38 00 lda #$0038 LDA #`DOS_SPARE_FD -.3959e9 85 22 sta $0342 STA DOS_FD_PTR+2 -.3959eb a9 ff ff lda #$ffff LDA #$FFFF ; We want to load to the address provided by the file -.3959ee 8f 54 03 00 sta $000354 STA @l DOS_DST_PTR -.3959f2 8f 56 03 00 sta $000356 STA @l DOS_DST_PTR+2 -.3959f6 22 18 11 00 jsl $001118 JSL F_LOAD ; Try to load the file -.3959fa b0 14 bcs $395a10 BCS try_execute -.3959fc 82 7f ff brl $39597e BRL IF_PASSFAILURE ; On error: pass failure up the chain -.3959ff chk_execute -.3959ff c2 20 rep #$20 REP #$20 ; set A long -.395a01 a5 3c lda $035c LDA DOS_RUN_PTR ; Check to see if we got a startup address back -.395a03 d0 0b bne $395a10 BNE try_execute ; If so: call it -.395a05 a5 3e lda $035e LDA DOS_RUN_PTR+2 -.395a07 d0 07 bne $395a10 BNE try_execute -.395a09 e2 20 sep #$20 SEP #$20 ; set A short -.395a0b a9 11 lda #$11 LDA #DOS_ERR_NOEXEC ; If not: return an error that it's not executable -.395a0d 82 6a ff brl $39597a BRL IF_FAILURE -.395a10 try_execute -.395a10 e2 20 sep #$20 SEP #$20 ; set A short -.395a12 a9 5c lda #$5c LDA #$5C ; Write a JML opcode -.395a14 85 3b sta $035b STA DOS_RUN_PTR-1 -.395a16 22 5b 03 00 jsl $00035b JSL DOS_RUN_PTR-1 ; And call to it -.395a1a 82 68 ff brl $395985 BRL IF_SUCCESS ; Return success -.395a1d IF_ALLOCFD -.395a1d da phx PHX -.395a1e 5a phy PHY -.395a1f 0b phd PHD -.395a20 8b phb PHB -.395a21 08 php PHP -.395a22 48 pha PHA ; begin setdbr macro -.395a23 08 php PHP -.395a24 e2 20 sep #$20 SEP #$20 ; set A short -.395a26 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395a28 48 pha PHA -.395a29 ab plb PLB -.395a2a 28 plp PLP -.395a2b 68 pla PLA ; end setdbr macro -.395a2c 48 pha PHA ; begin setdp macro -.395a2d 08 php PHP -.395a2e c2 20 rep #$20 REP #$20 ; set A long -.395a30 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395a33 5b tcd TCD -.395a34 28 plp PLP -.395a35 68 pla PLA ; end setdp macro -.395a36 c2 10 rep #$10 REP #$10 ; set X long -.395a38 a2 00 00 ldx #$0000 LDX #0 ; Point to the first file descriptor -.395a3b chk_fd -.395a3b e2 20 sep #$20 SEP #$20 ; set A short -.395a3d bd 20 ad lda $38ad20,x LDA @w DOS_FILE_DESCS,X ; Check the file descriptor's status -.395a40 89 10 bit #$10 BIT #FD_STAT_ALLOC ; Is the file descriptor allocated? -.395a42 f0 14 beq $395a58 BEQ found ; No: flag and return the found descriptor -.395a44 next_fd -.395a44 c2 20 rep #$20 REP #$20 ; set A long -.395a46 8a txa TXA ; Yes: Move to the next file descriptor -.395a47 18 clc CLC -.395a48 69 20 00 adc #$0020 ADC #SIZE(FILEDESC) -.395a4b aa tax TAX -.395a4c e0 00 01 cpx #$0100 CPX #SIZE(FILEDESC) * DOS_FD_MAX ; Are we out of file descriptors? -.395a4f 90 ea bcc $395a3b BLT chk_fd ; No: check this new file descriptor -.395a51 e2 20 sep #$20 SEP #$20 ; set A short -.395a53 a9 16 lda #$16 LDA #DOS_ERR_NOFD ; Yes: Return failure (no file descriptors available) -.395a55 82 22 ff brl $39597a BRL IF_FAILURE -.395a58 09 10 ora #$10 found ORA #FD_STAT_ALLOC ; No: Set the ALLOC bit -.395a5a 9d 20 ad sta $38ad20,x STA @w DOS_FILE_DESCS,X ; And store it in the file descriptor's status -.395a5d c2 20 rep #$20 REP #$20 ; set A long -.395a5f 8a txa TXA -.395a60 18 clc CLC -.395a61 69 20 ad adc #$ad20 ADC #<>DOS_FILE_DESCS -.395a64 85 20 sta $0340 STA @b DOS_FD_PTR -.395a66 a9 38 00 lda #$0038 LDA #`DOS_FILE_DESCS -.395a69 69 00 00 adc #$0000 ADC #0 -.395a6c 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395a6e 82 14 ff brl $395985 BRL IF_SUCCESS ; Return this file descriptor -.395a71 IF_FREEFD -.395a71 da phx PHX -.395a72 5a phy PHY -.395a73 0b phd PHD -.395a74 8b phb PHB -.395a75 08 php PHP -.395a76 48 pha PHA ; begin setdbr macro -.395a77 08 php PHP -.395a78 e2 20 sep #$20 SEP #$20 ; set A short -.395a7a a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES -.395a7c 48 pha PHA -.395a7d ab plb PLB -.395a7e 28 plp PLP -.395a7f 68 pla PLA ; end setdbr macro -.395a80 48 pha PHA ; begin setdp macro +.39591f b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395921 85 2a sta $034a STA DOS_TEMP+2 +.395923 a0 00 00 ldy #$0000 LDY #0 +.395926 copy_loop +.395926 e2 20 sep #$20 SEP #$20 ; set A short +.395928 a7 30 lda [$0350] LDA [DOS_SRC_PTR] ; Copy a byte +.39592a 97 28 sta [$0348],y STA [DOS_TEMP],Y +.39592c c2 20 rep #$20 REP #$20 ; set A long +.39592e e6 30 inc $0350 INC DOS_SRC_PTR ; Advance the source pointer +.395930 d0 02 bne $395934 BNE adv_dest +.395932 e6 32 inc $0352 INC DOS_SRC_PTR+2 +.395934 c8 iny adv_dest INY ; Count it +.395935 c0 00 02 cpy #$0200 CPY #DOS_SECTOR_SIZE ; Have we reached the limit? +.395938 f0 0c beq $395946 BEQ done ; Yes: we're done +.39593a a5 30 lda $0350 LDA DOS_SRC_PTR ; Check if we copied the last byte +.39593c c5 38 cmp $0358 CMP DOS_END_PTR +.39593e d0 e6 bne $395926 BNE copy_loop ; No: keep copying +.395940 a5 32 lda $0352 LDA DOS_SRC_PTR+2 +.395942 c5 3a cmp $035a CMP DOS_END_PTR+2 +.395944 d0 e0 bne $395926 BNE copy_loop +.395946 28 plp done PLP +.395947 2b pld PLD +.395948 ab plb PLB +.395949 7a ply PLY +.39594a 6b rtl RTL +.39594b IF_SAVE +.39594b da phx PHX +.39594c 5a phy PHY +.39594d 0b phd PHD +.39594e 8b phb PHB +.39594f 08 php PHP +.395950 48 pha PHA ; begin setdbr macro +.395951 08 php PHP +.395952 e2 20 sep #$20 SEP #$20 ; set A short +.395954 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395956 48 pha PHA +.395957 ab plb PLB +.395958 28 plp PLP +.395959 68 pla PLA ; end setdbr macro +.39595a 48 pha PHA ; begin setdp macro +.39595b 08 php PHP +.39595c c2 20 rep #$20 REP #$20 ; set A long +.39595e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395961 5b tcd TCD +.395962 28 plp PLP +.395963 68 pla PLA ; end setdp macro +.395964 c2 30 rep #$30 REP #$30 ; set A&X long +.395966 a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE ; DOS_FD_PTR->SIZE := DOS_END_PTR - DOS_SRC_PTR +.395969 38 sec SEC +.39596a a5 38 lda $0358 LDA DOS_END_PTR +.39596c e5 30 sbc $0350 SBC DOS_SRC_PTR +.39596e 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395970 c8 iny INY +.395971 c8 iny INY +.395972 a5 3a lda $035a LDA DOS_END_PTR+2 +.395974 e5 32 sbc $0352 SBC DOS_SRC_PTR+2 +.395976 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395978 a0 12 00 ldy #$0012 LDY #FILEDESC.SIZE ; DOS_FD_PTR->SIZE++ +.39597b 18 clc CLC +.39597c b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.39597e 69 01 00 adc #$0001 ADC #1 +.395981 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395983 90 09 bcc $39598e BCC first_block +.395985 c8 iny INY +.395986 c8 iny INY +.395987 b7 20 lda [$0340],y LDA [DOS_FD_PTR],Y +.395989 69 00 00 adc #$0000 ADC #0 +.39598c 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.39598e 22 c1 58 39 jsl $3958c1 first_block JSL IF_NULLBUFFER ; Fill FD buffer with NULL +.395992 22 fc 58 39 jsl $3958fc JSL IF_COPY2BUFF ; Copy first (at most) 512 bytes of data to FD buffer +.395996 22 1a 55 39 jsl $39551a JSL IF_CREATE ; Create file. +.39599a b0 03 bcs $39599f BCS check_for_end +.39599c 82 31 00 brl $3959d0 BRL IF_PASSFAILURE ; If we couldn't create the file, pass the failure up +.39599f a5 30 lda $0350 check_for_end LDA DOS_SRC_PTR ; Check if we copied the last byte +.3959a1 c5 38 cmp $0358 CMP DOS_END_PTR +.3959a3 d0 06 bne $3959ab BNE next_block +.3959a5 a5 32 lda $0352 LDA DOS_SRC_PTR+2 +.3959a7 c5 3a cmp $035a CMP DOS_END_PTR+2 +.3959a9 f0 1d beq $3959c8 BEQ done ; Yes: we're done +.3959ab 22 c1 58 39 jsl $3958c1 next_block JSL IF_NULLBUFFER ; Fill FD buffer with NULL +.3959af 22 fc 58 39 jsl $3958fc JSL IF_COPY2BUFF ; Copy next (at most) 512 bytes of data to FD buffer +.3959b3 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; Make sure the CLUSTER is 0 to force an append +.3959b6 a9 00 00 lda #$0000 LDA #0 +.3959b9 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3959bb c8 iny INY +.3959bc c8 iny INY +.3959bd 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.3959bf 22 ed 55 39 jsl $3955ed JSL IF_WRITE ; Append to the file +.3959c3 b0 da bcs $39599f BCS check_for_end ; And try again +.3959c5 82 08 00 brl $3959d0 BRL IF_PASSFAILURE ; If we couldn't update the file, pass the failure up +.3959c8 5c d7 59 39 jmp $3959d7 done JML IF_SUCCESS +.3959cc IF_FAILURE +.3959cc e2 20 sep #$20 SEP #$20 ; set A short +.3959ce 85 0e sta $032e STA DOS_STATUS +.3959d0 28 plp IF_PASSFAILURE PLP +.3959d1 18 clc CLC +.3959d2 ab plb PLB +.3959d3 2b pld PLD +.3959d4 7a ply PLY +.3959d5 fa plx PLX +.3959d6 6b rtl RTL +.3959d7 IF_SUCCESS +.3959d7 e2 20 sep #$20 SEP #$20 ; set A short +.3959d9 64 00 stz $0320 STZ BIOS_STATUS +.3959db 64 0e stz $032e STZ DOS_STATUS +.3959dd 28 plp PLP +.3959de 38 sec SEC +.3959df ab plb PLB +.3959e0 2b pld PLD +.3959e1 7a ply PLY +.3959e2 fa plx PLX +.3959e3 6b rtl RTL +.3959e4 IF_RUN +.3959e4 da phx PHX +.3959e5 5a phy PHY +.3959e6 0b phd PHD +.3959e7 8b phb PHB +.3959e8 08 php PHP +.3959e9 48 pha PHA ; begin setdbr macro +.3959ea 08 php PHP +.3959eb e2 20 sep #$20 SEP #$20 ; set A short +.3959ed a9 00 lda #$00 LDA #0 +.3959ef 48 pha PHA +.3959f0 ab plb PLB +.3959f1 28 plp PLP +.3959f2 68 pla PLA ; end setdbr macro +.3959f3 48 pha PHA ; begin setdp macro +.3959f4 08 php PHP +.3959f5 c2 20 rep #$20 REP #$20 ; set A long +.3959f7 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3959fa 5b tcd TCD +.3959fb 28 plp PLP +.3959fc 68 pla PLA ; end setdp macro +.3959fd e2 20 sep #$20 SEP #$20 ; set A short +.3959ff c2 10 rep #$10 REP #$10 ; set X long +.395a01 a9 00 lda #$00 LDA #0 ; Zero out the file descriptor +.395a03 a2 00 00 ldx #$0000 LDX #0 +.395a06 9f 00 ad 38 sta $38ad00,x clr_fd_loop STA @l DOS_SPARE_FD,X +.395a0a e8 inx INX +.395a0b e0 20 00 cpx #$0020 CPX #SIZE(FILEDESC) +.395a0e d0 f6 bne $395a06 BNE clr_fd_loop +.395a10 c2 20 rep #$20 REP #$20 ; set A long +.395a12 a9 00 ab lda #$ab00 LDA #<>DOS_SPARE_SECTOR ; Set the buffer for the file descriptor +.395a15 8f 0e ad 38 sta $38ad0e STA @l DOS_SPARE_FD+FILEDESC.BUFFER +.395a19 a9 38 00 lda #$0038 LDA #`DOS_SPARE_SECTOR +.395a1c 8f 10 ad 38 sta $38ad10 STA @l DOS_SPARE_FD+FILEDESC.BUFFER+2 +.395a20 a5 40 lda $0360 LDA DOS_RUN_PARAM ; Set the path for the file descriptor +.395a22 8f 02 ad 38 sta $38ad02 STA @l DOS_SPARE_FD+FILEDESC.PATH +.395a26 a5 42 lda $0362 LDA DOS_RUN_PARAM+2 +.395a28 8f 04 ad 38 sta $38ad04 STA @l DOS_SPARE_FD+FILEDESC.PATH+2 +.395a2c a9 00 00 lda #$0000 LDA #0 ; Clear the run pointer +.395a2f 85 3c sta $035c STA DOS_RUN_PTR ; This is used to check that we loaded an executable binary +.395a31 85 3e sta $035e STA DOS_RUN_PTR+2 +.395a33 a9 00 ad lda #$ad00 LDA #<>DOS_SPARE_FD +.395a36 85 20 sta $0340 STA DOS_FD_PTR +.395a38 a9 38 00 lda #$0038 LDA #`DOS_SPARE_FD +.395a3b 85 22 sta $0342 STA DOS_FD_PTR+2 +.395a3d a9 ff ff lda #$ffff LDA #$FFFF ; We want to load to the address provided by the file +.395a40 8f 54 03 00 sta $000354 STA @l DOS_DST_PTR +.395a44 8f 56 03 00 sta $000356 STA @l DOS_DST_PTR+2 +.395a48 22 18 11 00 jsl $001118 JSL F_LOAD ; Try to load the file +.395a4c b0 14 bcs $395a62 BCS try_execute +.395a4e 82 7f ff brl $3959d0 BRL IF_PASSFAILURE ; On error: pass failure up the chain +.395a51 chk_execute +.395a51 c2 20 rep #$20 REP #$20 ; set A long +.395a53 a5 3c lda $035c LDA DOS_RUN_PTR ; Check to see if we got a startup address back +.395a55 d0 0b bne $395a62 BNE try_execute ; If so: call it +.395a57 a5 3e lda $035e LDA DOS_RUN_PTR+2 +.395a59 d0 07 bne $395a62 BNE try_execute +.395a5b e2 20 sep #$20 SEP #$20 ; set A short +.395a5d a9 11 lda #$11 LDA #DOS_ERR_NOEXEC ; If not: return an error that it's not executable +.395a5f 82 6a ff brl $3959cc BRL IF_FAILURE +.395a62 try_execute +.395a62 e2 20 sep #$20 SEP #$20 ; set A short +.395a64 a5 42 lda $0362 LDA DOS_RUN_PARAM+2 +.395a66 48 pha PHA +.395a67 a5 41 lda $0361 LDA DOS_RUN_PARAM+1 +.395a69 48 pha PHA +.395a6a a5 40 lda $0360 LDA DOS_RUN_PARAM +.395a6c 48 pha PHA +.395a6d a9 5c lda #$5c LDA #$5C ; Write a JML opcode +.395a6f 85 3b sta $035b STA DOS_RUN_PTR-1 +.395a71 22 5b 03 00 jsl $00035b JSL DOS_RUN_PTR-1 ; And call to it +.395a75 e2 20 sep #$20 SEP #$20 ; set A short +.395a77 68 pla PLA ; Remove the path and parameters string from the stack +.395a78 68 pla PLA +.395a79 68 pla PLA +.395a7a 82 5a ff brl $3959d7 BRL IF_SUCCESS ; Return success +.395a7d IF_ALLOCFD +.395a7d da phx PHX +.395a7e 5a phy PHY +.395a7f 0b phd PHD +.395a80 8b phb PHB .395a81 08 php PHP -.395a82 c2 20 rep #$20 REP #$20 ; set A long -.395a84 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395a87 5b tcd TCD -.395a88 28 plp PLP -.395a89 68 pla PLA ; end setdp macro -.395a8a e2 20 sep #$20 SEP #$20 ; set A short -.395a8c c2 10 rep #$10 REP #$10 ; set X long -.395a8e a9 00 lda #$00 LDA #0 -.395a90 87 20 sta [$0340] STA [DOS_FD_PTR] -.395a92 82 f0 fe brl $395985 BRL IF_SUCCESS -.395a95 DOS_SRC2DST -.395a95 da phx PHX -.395a96 5a phy PHY -.395a97 0b phd PHD -.395a98 8b phb PHB -.395a99 08 php PHP -.395a9a 48 pha PHA ; begin setdp macro -.395a9b 08 php PHP -.395a9c c2 20 rep #$20 REP #$20 ; set A long -.395a9e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395aa1 5b tcd TCD -.395aa2 28 plp PLP -.395aa3 68 pla PLA ; end setdp macro -.395aa4 c2 30 rep #$30 REP #$30 ; set A&X long -.395aa6 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER -.395aa9 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y -.395aab aa tax TAX ; X := source buffer address -.395aac b7 34 lda [$0354],y LDA [DOS_DST_PTR],Y -.395aae a8 tay TAY ; Y := destination buffer address -.395aaf a9 00 02 lda #$0200 LDA #DOS_SECTOR_SIZE ; A := the size of the buffers -.395ab2 54 38 38 mvn $38,$38 MVN #`DOS_FILE_BUFFS,#`DOS_FILE_BUFFS ; Copy the sector data -.395ab5 28 plp PLP -.395ab6 ab plb PLB -.395ab7 2b pld PLD -.395ab8 7a ply PLY -.395ab9 fa plx PLX -.395aba 6b rtl RTL -.395abb IF_COPY -.395abb da phx PHX -.395abc 5a phy PHY -.395abd 0b phd PHD -.395abe 8b phb PHB -.395abf 08 php PHP -.395ac0 48 pha PHA ; begin setdbr macro -.395ac1 08 php PHP -.395ac2 e2 20 sep #$20 SEP #$20 ; set A short -.395ac4 a9 00 lda #$00 LDA #0 -.395ac6 48 pha PHA -.395ac7 ab plb PLB -.395ac8 28 plp PLP -.395ac9 68 pla PLA ; end setdbr macro -.395aca 48 pha PHA ; begin setdp macro -.395acb 08 php PHP -.395acc c2 20 rep #$20 REP #$20 ; set A long -.395ace a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395ad1 5b tcd TCD -.395ad2 28 plp PLP -.395ad3 68 pla PLA ; end setdp macro -.395ad4 22 1d 5a 39 jsl $395a1d JSL IF_ALLOCFD ; Allocate an FD for the source -.395ad8 b0 03 bcs $395add BCS set_src_path -.395ada 82 a1 fe brl $39597e BRL IF_PASSFAILURE ; If failed: pass the failure up the chain -.395add set_src_path -.395add c2 30 rep #$30 REP #$30 ; set A&X long -.395adf a0 02 00 ldy #$0002 LDY #FILEDESC.PATH ; Set the source path -.395ae2 a5 44 lda $0364 LDA @b DOS_STR1_PTR -.395ae4 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395ae6 c8 iny INY -.395ae7 c8 iny INY -.395ae8 a5 46 lda $0366 LDA @b DOS_STR1_PTR+2 -.395aea 97 20 sta [$0340],y STA [DOS_FD_PTR],Y -.395aec alloc_dest -.395aec c2 30 rep #$30 REP #$30 ; set A&X long -.395aee a5 20 lda $0340 LDA @b DOS_FD_PTR ; set DOS_SRC_PTR to the file descriptor pointer -.395af0 85 30 sta $0350 STA @b DOS_SRC_PTR -.395af2 a5 22 lda $0342 LDA @b DOS_FD_PTR+2 -.395af4 85 32 sta $0352 STA @b DOS_SRC_PTR+2 -.395af6 22 1d 5a 39 jsl $395a1d JSL IF_ALLOCFD ; Allocate an FD for the destination -.395afa b0 0f bcs $395b0b BCS set_paths ; If everything is ok... start setting the paths -.395afc a5 30 lda $0350 err_free_src_fd LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer -.395afe 85 20 sta $0340 STA @b DOS_FD_PTR -.395b00 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 -.395b02 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395b04 22 71 5a 39 jsl $395a71 JSL IF_FREEFD ; And free it -.395b08 82 73 fe brl $39597e BRL IF_PASSFAILURE ; Pass the failure up the chain -.395b0b set_paths -.395b0b c2 30 rep #$30 REP #$30 ; set A&X long -.395b0d a5 20 lda $0340 LDA @b DOS_FD_PTR ; Set DOS_DST_PTR to the file descriptor pointer for the destination -.395b0f 85 34 sta $0354 STA @b DOS_DST_PTR -.395b11 a5 22 lda $0342 LDA @b DOS_FD_PTR+2 -.395b13 85 36 sta $0356 STA @b DOS_DST_PTR+2 -.395b15 a0 02 00 ldy #$0002 LDY #FILEDESC.PATH ; Set the destination path -.395b18 a5 48 lda $0368 LDA @b DOS_STR2_PTR -.395b1a 97 34 sta [$0354],y STA [DOS_DST_PTR],Y -.395b1c c8 iny INY -.395b1d c8 iny INY -.395b1e a5 4a lda $036a LDA @b DOS_STR2_PTR+2 -.395b20 97 34 sta [$0354],y STA [DOS_DST_PTR],Y -.395b22 a5 30 lda $0350 LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer -.395b24 85 20 sta $0340 STA @b DOS_FD_PTR -.395b26 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 -.395b28 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395b2a 22 f0 10 00 jsl $0010f0 JSL F_OPEN ; Try to open the file -.395b2e b0 0f bcs $395b3f BCS src_open ; If success, work with the openned file -.395b30 a5 34 lda $0354 err_free_dst_fd LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer -.395b32 85 20 sta $0340 STA @b DOS_FD_PTR -.395b34 a5 36 lda $0356 LDA @b DOS_DST_PTR+2 -.395b36 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395b38 22 71 5a 39 jsl $395a71 JSL IF_FREEFD ; And free it -.395b3c 82 bd ff brl $395afc BRL err_free_src_fd ; Free the source file descriptor -.395b3f a0 12 00 ldy #$0012 src_open LDY #FILEDESC.SIZE ; destination file size := source file size -.395b42 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y -.395b44 97 34 sta [$0354],y STA [DOS_DST_PTR],Y +.395a82 48 pha PHA ; begin setdbr macro +.395a83 08 php PHP +.395a84 e2 20 sep #$20 SEP #$20 ; set A short +.395a86 a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395a88 48 pha PHA +.395a89 ab plb PLB +.395a8a 28 plp PLP +.395a8b 68 pla PLA ; end setdbr macro +.395a8c 48 pha PHA ; begin setdp macro +.395a8d 08 php PHP +.395a8e c2 20 rep #$20 REP #$20 ; set A long +.395a90 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395a93 5b tcd TCD +.395a94 28 plp PLP +.395a95 68 pla PLA ; end setdp macro +.395a96 c2 10 rep #$10 REP #$10 ; set X long +.395a98 a2 00 00 ldx #$0000 LDX #0 ; Point to the first file descriptor +.395a9b chk_fd +.395a9b e2 20 sep #$20 SEP #$20 ; set A short +.395a9d bd 20 ad lda $38ad20,x LDA @w DOS_FILE_DESCS,X ; Check the file descriptor's status +.395aa0 89 10 bit #$10 BIT #FD_STAT_ALLOC ; Is the file descriptor allocated? +.395aa2 f0 14 beq $395ab8 BEQ found ; No: flag and return the found descriptor +.395aa4 next_fd +.395aa4 c2 20 rep #$20 REP #$20 ; set A long +.395aa6 8a txa TXA ; Yes: Move to the next file descriptor +.395aa7 18 clc CLC +.395aa8 69 20 00 adc #$0020 ADC #SIZE(FILEDESC) +.395aab aa tax TAX +.395aac e0 00 01 cpx #$0100 CPX #SIZE(FILEDESC) * DOS_FD_MAX ; Are we out of file descriptors? +.395aaf 90 ea bcc $395a9b BLT chk_fd ; No: check this new file descriptor +.395ab1 e2 20 sep #$20 SEP #$20 ; set A short +.395ab3 a9 16 lda #$16 LDA #DOS_ERR_NOFD ; Yes: Return failure (no file descriptors available) +.395ab5 82 14 ff brl $3959cc BRL IF_FAILURE +.395ab8 09 10 ora #$10 found ORA #FD_STAT_ALLOC ; No: Set the ALLOC bit +.395aba 9d 20 ad sta $38ad20,x STA @w DOS_FILE_DESCS,X ; And store it in the file descriptor's status +.395abd c2 20 rep #$20 REP #$20 ; set A long +.395abf 8a txa TXA +.395ac0 18 clc CLC +.395ac1 69 20 ad adc #$ad20 ADC #<>DOS_FILE_DESCS +.395ac4 85 20 sta $0340 STA @b DOS_FD_PTR +.395ac6 a9 38 00 lda #$0038 LDA #`DOS_FILE_DESCS +.395ac9 69 00 00 adc #$0000 ADC #0 +.395acc 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395ace 82 06 ff brl $3959d7 BRL IF_SUCCESS ; Return this file descriptor +.395ad1 IF_FREEFD +.395ad1 da phx PHX +.395ad2 5a phy PHY +.395ad3 0b phd PHD +.395ad4 8b phb PHB +.395ad5 08 php PHP +.395ad6 48 pha PHA ; begin setdbr macro +.395ad7 08 php PHP +.395ad8 e2 20 sep #$20 SEP #$20 ; set A short +.395ada a9 38 lda #$38 LDA #`DOS_HIGH_VARIABLES +.395adc 48 pha PHA +.395add ab plb PLB +.395ade 28 plp PLP +.395adf 68 pla PLA ; end setdbr macro +.395ae0 48 pha PHA ; begin setdp macro +.395ae1 08 php PHP +.395ae2 c2 20 rep #$20 REP #$20 ; set A long +.395ae4 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395ae7 5b tcd TCD +.395ae8 28 plp PLP +.395ae9 68 pla PLA ; end setdp macro +.395aea e2 20 sep #$20 SEP #$20 ; set A short +.395aec c2 10 rep #$10 REP #$10 ; set X long +.395aee a9 00 lda #$00 LDA #0 +.395af0 87 20 sta [$0340] STA [DOS_FD_PTR] +.395af2 82 e2 fe brl $3959d7 BRL IF_SUCCESS +.395af5 DOS_SRC2DST +.395af5 da phx PHX +.395af6 5a phy PHY +.395af7 0b phd PHD +.395af8 8b phb PHB +.395af9 08 php PHP +.395afa 48 pha PHA ; begin setdp macro +.395afb 08 php PHP +.395afc c2 20 rep #$20 REP #$20 ; set A long +.395afe a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395b01 5b tcd TCD +.395b02 28 plp PLP +.395b03 68 pla PLA ; end setdp macro +.395b04 c2 30 rep #$30 REP #$30 ; set A&X long +.395b06 a0 0e 00 ldy #$000e LDY #FILEDESC.BUFFER +.395b09 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y +.395b0b aa tax TAX ; X := source buffer address +.395b0c b7 34 lda [$0354],y LDA [DOS_DST_PTR],Y +.395b0e a8 tay TAY ; Y := destination buffer address +.395b0f a9 00 02 lda #$0200 LDA #DOS_SECTOR_SIZE ; A := the size of the buffers +.395b12 54 38 38 mvn $38,$38 MVN #`DOS_FILE_BUFFS,#`DOS_FILE_BUFFS ; Copy the sector data +.395b15 28 plp PLP +.395b16 ab plb PLB +.395b17 2b pld PLD +.395b18 7a ply PLY +.395b19 fa plx PLX +.395b1a 6b rtl RTL +.395b1b IF_COPY +.395b1b da phx PHX +.395b1c 5a phy PHY +.395b1d 0b phd PHD +.395b1e 8b phb PHB +.395b1f 08 php PHP +.395b20 48 pha PHA ; begin setdbr macro +.395b21 08 php PHP +.395b22 e2 20 sep #$20 SEP #$20 ; set A short +.395b24 a9 00 lda #$00 LDA #0 +.395b26 48 pha PHA +.395b27 ab plb PLB +.395b28 28 plp PLP +.395b29 68 pla PLA ; end setdbr macro +.395b2a 48 pha PHA ; begin setdp macro +.395b2b 08 php PHP +.395b2c c2 20 rep #$20 REP #$20 ; set A long +.395b2e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395b31 5b tcd TCD +.395b32 28 plp PLP +.395b33 68 pla PLA ; end setdp macro +.395b34 22 7d 5a 39 jsl $395a7d JSL IF_ALLOCFD ; Allocate an FD for the source +.395b38 b0 03 bcs $395b3d BCS set_src_path +.395b3a 82 93 fe brl $3959d0 BRL IF_PASSFAILURE ; If failed: pass the failure up the chain +.395b3d set_src_path +.395b3d c2 30 rep #$30 REP #$30 ; set A&X long +.395b3f a0 02 00 ldy #$0002 LDY #FILEDESC.PATH ; Set the source path +.395b42 a5 44 lda $0364 LDA @b DOS_STR1_PTR +.395b44 97 20 sta [$0340],y STA [DOS_FD_PTR],Y .395b46 c8 iny INY .395b47 c8 iny INY -.395b48 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y -.395b4a 97 34 sta [$0354],y STA [DOS_DST_PTR],Y -.395b4c 22 95 5a 39 jsl $395a95 JSL DOS_SRC2DST ; Copy the first sector's worth of data -.395b50 a5 34 lda $0354 LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer -.395b52 85 20 sta $0340 STA @b DOS_FD_PTR -.395b54 a5 36 lda $0356 LDA @b DOS_DST_PTR+2 -.395b56 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395b58 22 f4 10 00 jsl $0010f4 JSL F_CREATE ; Attempt to create the file -.395b5c b0 0f bcs $395b6d BCS read_next ; If sucessful, try to get the next cluster -.395b5e a5 30 lda $0350 err_src_close LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer -.395b60 85 20 sta $0340 STA @b DOS_FD_PTR -.395b62 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 -.395b64 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395b66 22 f8 10 00 jsl $0010f8 JSL F_CLOSE ; Close the source file (maybe not really necessary) -.395b6a 82 c3 ff brl $395b30 BRL err_free_dst_fd ; Free the file descriptors and return an error -.395b6d read_next -.395b6d a5 30 lda $0350 LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer -.395b6f 85 20 sta $0340 STA @b DOS_FD_PTR -.395b71 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 -.395b73 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395b75 22 00 11 00 jsl $001100 JSL F_READ ; Attempt to read the next sector of the source -.395b79 b0 19 bcs $395b94 BCS copy2dest ; If successful, copy the sector -.395b7b e2 20 sep #$20 SEP #$20 ; set A short -.395b7d a5 0e lda $032e LDA @b DOS_STATUS -.395b7f c9 0a cmp #$0a CMP #DOS_ERR_NOCLUSTER ; Are there no more clusters in the source file? -.395b81 f0 32 beq $395bb5 BEQ file_copied ; Yes: we're done copying -.395b83 err_dest_close -.395b83 c2 20 rep #$20 REP #$20 ; set A long -.395b85 a5 34 lda $0354 LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer -.395b87 85 20 sta $0340 STA @b DOS_FD_PTR -.395b89 a5 36 lda $0356 LDA @b DOS_DST_PTR+2 -.395b8b 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395b8d 22 f8 10 00 jsl $0010f8 JSL F_CLOSE ; Attempt to close the destination -.395b91 82 ca ff brl $395b5e BRL err_src_close ; Close the source and throw an error -.395b94 copy2dest -.395b94 22 95 5a 39 jsl $395a95 JSL DOS_SRC2DST ; Copy the source sector to the destination sector -.395b98 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; destination sector cluster ID := 0 to append -.395b9b a9 00 00 lda #$0000 LDA #0 -.395b9e 97 34 sta [$0354],y STA [DOS_DST_PTR],Y -.395ba0 c8 iny INY -.395ba1 c8 iny INY -.395ba2 97 34 sta [$0354],y STA [DOS_DST_PTR],Y -.395ba4 a5 34 lda $0354 LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer -.395ba6 85 20 sta $0340 STA @b DOS_FD_PTR -.395ba8 a5 36 lda $0356 LDA @b DOS_DST_PTR+2 -.395baa 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395bac 22 fc 10 00 jsl $0010fc JSL F_WRITE ; Attempt to write the destionation sector to the disk -.395bb0 90 d1 bcc $395b83 BCC err_dest_close ; If error: close all files and throw the error -.395bb2 82 b8 ff brl $395b6d BRL read_next ; Otherwise: repeat the loop -.395bb5 file_copied -.395bb5 c2 20 rep #$20 REP #$20 ; set A long -.395bb7 a5 34 lda $0354 LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer -.395bb9 85 20 sta $0340 STA @b DOS_FD_PTR -.395bbb a5 36 lda $0356 LDA @b DOS_DST_PTR+2 -.395bbd 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395bbf 22 f8 10 00 jsl $0010f8 JSL F_CLOSE ; Close the destination -.395bc3 a5 30 lda $0350 LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer -.395bc5 85 20 sta $0340 STA @b DOS_FD_PTR -.395bc7 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 -.395bc9 85 22 sta $0342 STA @b DOS_FD_PTR+2 -.395bcb 22 f8 10 00 jsl $0010f8 JSL F_CLOSE ; Close the source -.395bcf 82 b3 fd brl $395985 BRL IF_SUCCESS +.395b48 a5 46 lda $0366 LDA @b DOS_STR1_PTR+2 +.395b4a 97 20 sta [$0340],y STA [DOS_FD_PTR],Y +.395b4c alloc_dest +.395b4c c2 30 rep #$30 REP #$30 ; set A&X long +.395b4e a5 20 lda $0340 LDA @b DOS_FD_PTR ; set DOS_SRC_PTR to the file descriptor pointer +.395b50 85 30 sta $0350 STA @b DOS_SRC_PTR +.395b52 a5 22 lda $0342 LDA @b DOS_FD_PTR+2 +.395b54 85 32 sta $0352 STA @b DOS_SRC_PTR+2 +.395b56 22 7d 5a 39 jsl $395a7d JSL IF_ALLOCFD ; Allocate an FD for the destination +.395b5a b0 0f bcs $395b6b BCS set_paths ; If everything is ok... start setting the paths +.395b5c a5 30 lda $0350 err_free_src_fd LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer +.395b5e 85 20 sta $0340 STA @b DOS_FD_PTR +.395b60 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 +.395b62 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395b64 22 d1 5a 39 jsl $395ad1 JSL IF_FREEFD ; And free it +.395b68 82 65 fe brl $3959d0 BRL IF_PASSFAILURE ; Pass the failure up the chain +.395b6b set_paths +.395b6b c2 30 rep #$30 REP #$30 ; set A&X long +.395b6d a5 20 lda $0340 LDA @b DOS_FD_PTR ; Set DOS_DST_PTR to the file descriptor pointer for the destination +.395b6f 85 34 sta $0354 STA @b DOS_DST_PTR +.395b71 a5 22 lda $0342 LDA @b DOS_FD_PTR+2 +.395b73 85 36 sta $0356 STA @b DOS_DST_PTR+2 +.395b75 a0 02 00 ldy #$0002 LDY #FILEDESC.PATH ; Set the destination path +.395b78 a5 48 lda $0368 LDA @b DOS_STR2_PTR +.395b7a 97 34 sta [$0354],y STA [DOS_DST_PTR],Y +.395b7c c8 iny INY +.395b7d c8 iny INY +.395b7e a5 4a lda $036a LDA @b DOS_STR2_PTR+2 +.395b80 97 34 sta [$0354],y STA [DOS_DST_PTR],Y +.395b82 a5 30 lda $0350 LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer +.395b84 85 20 sta $0340 STA @b DOS_FD_PTR +.395b86 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 +.395b88 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395b8a 22 f0 10 00 jsl $0010f0 JSL F_OPEN ; Try to open the file +.395b8e b0 0f bcs $395b9f BCS src_open ; If success, work with the openned file +.395b90 a5 34 lda $0354 err_free_dst_fd LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer +.395b92 85 20 sta $0340 STA @b DOS_FD_PTR +.395b94 a5 36 lda $0356 LDA @b DOS_DST_PTR+2 +.395b96 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395b98 22 d1 5a 39 jsl $395ad1 JSL IF_FREEFD ; And free it +.395b9c 82 bd ff brl $395b5c BRL err_free_src_fd ; Free the source file descriptor +.395b9f a0 12 00 ldy #$0012 src_open LDY #FILEDESC.SIZE ; destination file size := source file size +.395ba2 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y +.395ba4 97 34 sta [$0354],y STA [DOS_DST_PTR],Y +.395ba6 c8 iny INY +.395ba7 c8 iny INY +.395ba8 b7 30 lda [$0350],y LDA [DOS_SRC_PTR],Y +.395baa 97 34 sta [$0354],y STA [DOS_DST_PTR],Y +.395bac 22 f5 5a 39 jsl $395af5 JSL DOS_SRC2DST ; Copy the first sector's worth of data +.395bb0 a5 34 lda $0354 LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer +.395bb2 85 20 sta $0340 STA @b DOS_FD_PTR +.395bb4 a5 36 lda $0356 LDA @b DOS_DST_PTR+2 +.395bb6 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395bb8 22 f4 10 00 jsl $0010f4 JSL F_CREATE ; Attempt to create the file +.395bbc b0 0f bcs $395bcd BCS read_next ; If sucessful, try to get the next cluster +.395bbe a5 30 lda $0350 err_src_close LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer +.395bc0 85 20 sta $0340 STA @b DOS_FD_PTR +.395bc2 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 +.395bc4 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395bc6 22 f8 10 00 jsl $0010f8 JSL F_CLOSE ; Close the source file (maybe not really necessary) +.395bca 82 c3 ff brl $395b90 BRL err_free_dst_fd ; Free the file descriptors and return an error +.395bcd read_next +.395bcd a5 30 lda $0350 LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer +.395bcf 85 20 sta $0340 STA @b DOS_FD_PTR +.395bd1 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 +.395bd3 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395bd5 22 00 11 00 jsl $001100 JSL F_READ ; Attempt to read the next sector of the source +.395bd9 b0 19 bcs $395bf4 BCS copy2dest ; If successful, copy the sector +.395bdb e2 20 sep #$20 SEP #$20 ; set A short +.395bdd a5 0e lda $032e LDA @b DOS_STATUS +.395bdf c9 0a cmp #$0a CMP #DOS_ERR_NOCLUSTER ; Are there no more clusters in the source file? +.395be1 f0 32 beq $395c15 BEQ file_copied ; Yes: we're done copying +.395be3 err_dest_close +.395be3 c2 20 rep #$20 REP #$20 ; set A long +.395be5 a5 34 lda $0354 LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer +.395be7 85 20 sta $0340 STA @b DOS_FD_PTR +.395be9 a5 36 lda $0356 LDA @b DOS_DST_PTR+2 +.395beb 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395bed 22 f8 10 00 jsl $0010f8 JSL F_CLOSE ; Attempt to close the destination +.395bf1 82 ca ff brl $395bbe BRL err_src_close ; Close the source and throw an error +.395bf4 copy2dest +.395bf4 22 f5 5a 39 jsl $395af5 JSL DOS_SRC2DST ; Copy the source sector to the destination sector +.395bf8 a0 06 00 ldy #$0006 LDY #FILEDESC.CLUSTER ; destination sector cluster ID := 0 to append +.395bfb a9 00 00 lda #$0000 LDA #0 +.395bfe 97 34 sta [$0354],y STA [DOS_DST_PTR],Y +.395c00 c8 iny INY +.395c01 c8 iny INY +.395c02 97 34 sta [$0354],y STA [DOS_DST_PTR],Y +.395c04 a5 34 lda $0354 LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer +.395c06 85 20 sta $0340 STA @b DOS_FD_PTR +.395c08 a5 36 lda $0356 LDA @b DOS_DST_PTR+2 +.395c0a 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395c0c 22 fc 10 00 jsl $0010fc JSL F_WRITE ; Attempt to write the destionation sector to the disk +.395c10 90 d1 bcc $395be3 BCC err_dest_close ; If error: close all files and throw the error +.395c12 82 b8 ff brl $395bcd BRL read_next ; Otherwise: repeat the loop +.395c15 file_copied +.395c15 c2 20 rep #$20 REP #$20 ; set A long +.395c17 a5 34 lda $0354 LDA @b DOS_DST_PTR ; Get the destination file descriptor pointer +.395c19 85 20 sta $0340 STA @b DOS_FD_PTR +.395c1b a5 36 lda $0356 LDA @b DOS_DST_PTR+2 +.395c1d 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395c1f 22 f8 10 00 jsl $0010f8 JSL F_CLOSE ; Close the destination +.395c23 a5 30 lda $0350 LDA @b DOS_SRC_PTR ; Get the source file descriptor pointer +.395c25 85 20 sta $0340 STA @b DOS_FD_PTR +.395c27 a5 32 lda $0352 LDA @b DOS_SRC_PTR+2 +.395c29 85 22 sta $0342 STA @b DOS_FD_PTR+2 +.395c2b 22 f8 10 00 jsl $0010f8 JSL F_CLOSE ; Close the source +.395c2f 82 a5 fd brl $3959d7 BRL IF_SUCCESS ;****** Return to file: src\kernel.asm @@ -11057,478 +11174,478 @@ =3 UART_38400 = 3 ; Code for 28400 bps =2 UART_57600 = 2 ; Code for 57600 bps =1 UART_115200 = 1 ; Code for 115200 bps -.395bd2 UART_SELECT -.395bd2 08 php PHP -.395bd3 c2 20 rep #$20 REP #$20 ; set A long -.395bd5 c9 02 00 cmp #$0002 CMP #2 -.395bd8 f0 07 beq $395be1 BEQ is_COM2 -.395bda c2 20 rep #$20 REP #$20 ; set A long -.395bdc a9 f8 13 lda #$13f8 LDA #<>UART1_BASE -.395bdf 80 05 bra $395be6 BRA setaddr -.395be1 is_COM2 -.395be1 c2 20 rep #$20 REP #$20 ; set A long -.395be3 a9 f8 12 lda #$12f8 LDA #<>UART2_BASE -.395be6 8f 00 07 00 sta $000700 setaddr STA @lCURRUART -.395bea e2 20 sep #$20 SEP #$20 ; set A short -.395bec a9 af lda #$af LDA #`UART1_BASE -.395bee 8f 02 07 00 sta $000702 STA @lCURRUART+2 -.395bf2 28 plp PLP -.395bf3 6b rtl RTL -.395bf4 UART_SETBPS -.395bf4 08 php PHP -.395bf5 0b phd PHD -.395bf6 48 pha PHA ; begin setdp macro -.395bf7 08 php PHP -.395bf8 c2 20 rep #$20 REP #$20 ; set A long -.395bfa a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 -.395bfd 5b tcd TCD -.395bfe 28 plp PLP -.395bff 68 pla PLA ; end setdp macro -.395c00 c2 30 rep #$30 REP #$30 ; set A&X long -.395c02 48 pha PHA -.395c03 e2 20 sep #$20 SEP #$20 ; set A short -.395c05 a0 03 00 ldy #$0003 LDY #UART_LCR ; Enable divisor latch -.395c08 b7 00 lda [$0700],y LDA [CURRUART],Y -.395c0a 09 80 ora #$80 ORA #LCR_DLB -.395c0c 97 00 sta [$0700],y STA [CURRUART],Y -.395c0e c2 20 rep #$20 REP #$20 ; set A long -.395c10 68 pla PLA -.395c11 a0 00 00 ldy #$0000 LDY #UART_DLL -.395c14 97 00 sta [$0700],y STA [CURRUART],Y ; Save the divisor to the UART -.395c16 e2 20 sep #$20 SEP #$20 ; set A short -.395c18 a0 03 00 ldy #$0003 LDY #UART_LCR ; Disable divisor latch -.395c1b b7 00 lda [$0700],y LDA [CURRUART],Y -.395c1d 49 80 eor #$80 EOR #LCR_DLB -.395c1f 97 00 sta [$0700],y STA [CURRUART],Y -.395c21 2b pld PLD -.395c22 28 plp PLP -.395c23 6b rtl RTL -.395c24 UART_SETLCR -.395c24 08 php PHP -.395c25 0b phd PHD -.395c26 48 pha PHA ; begin setdp macro -.395c27 08 php PHP -.395c28 c2 20 rep #$20 REP #$20 ; set A long -.395c2a a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 -.395c2d 5b tcd TCD -.395c2e 28 plp PLP -.395c2f 68 pla PLA ; end setdp macro -.395c30 e2 20 sep #$20 SEP #$20 ; set A short -.395c32 c2 10 rep #$10 REP #$10 ; set X long -.395c34 29 7f and #$7f AND #$7F ; We don't want to alter divisor latch -.395c36 a0 03 00 ldy #$0003 LDY #UART_LCR -.395c39 97 00 sta [$0700],y STA [CURRUART],Y -.395c3b 2b pld PLD -.395c3c 28 plp PLP -.395c3d 6b rtl RTL -.395c3e UART_INIT -.395c3e 08 php PHP -.395c3f 0b phd PHD -.395c40 c2 30 rep #$30 REP #$30 ; set A&X long -.395c42 48 pha PHA ; begin setdp macro -.395c43 08 php PHP -.395c44 c2 20 rep #$20 REP #$20 ; set A long -.395c46 a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 -.395c49 5b tcd TCD -.395c4a 28 plp PLP -.395c4b 68 pla PLA ; end setdp macro -.395c4c a9 01 00 lda #$0001 LDA #UART_115200 -.395c4f 22 f4 5b 39 jsl $395bf4 JSL UART_SETBPS -.395c53 e2 20 sep #$20 SEP #$20 ; set A short -.395c55 a9 03 lda #$03 LDA #LCR_PARITY_NONE | LCR_STOPBIT_1 | LCR_DATABITS_8 -.395c57 22 24 5c 39 jsl $395c24 JSL UART_SETLCR -.395c5b a9 e1 lda #$e1 LDA #%11100001 -.395c5d a0 02 00 ldy #$0002 LDY #UART_FCR -.395c60 97 00 sta [$0700],y STA [CURRUART],Y -.395c62 2b pld PLD -.395c63 28 plp PLP -.395c64 6b rtl RTL -.395c65 UART_HASBYT -.395c65 08 php PHP -.395c66 0b phd PHD -.395c67 c2 30 rep #$30 REP #$30 ; set A&X long -.395c69 48 pha PHA ; begin setdp macro -.395c6a 08 php PHP -.395c6b c2 20 rep #$20 REP #$20 ; set A long -.395c6d a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 -.395c70 5b tcd TCD -.395c71 28 plp PLP -.395c72 68 pla PLA ; end setdp macro -.395c73 e2 20 sep #$20 SEP #$20 ; set A short -.395c75 a0 05 00 ldy #$0005 LDY #UART_LSR ; Check the receive FIFO -.395c78 b7 00 lda [$0700],y wait_putc LDA [CURRUART],Y -.395c7a 29 01 and #$01 AND #LSR_DATA_AVAIL -.395c7c d0 04 bne $395c82 BNE ret_true ; If flag is set, return true -.395c7e 2b pld ret_false PLD ; Return false -.395c7f 28 plp PLP -.395c80 18 clc CLC -.395c81 6b rtl RTL -.395c82 2b pld ret_true PLD ; Return true -.395c83 28 plp PLP -.395c84 38 sec SEC -.395c85 6b rtl RTL -.395c86 UART_GETC -.395c86 08 php PHP -.395c87 0b phd PHD -.395c88 c2 30 rep #$30 REP #$30 ; set A&X long -.395c8a 48 pha PHA ; begin setdp macro -.395c8b 08 php PHP -.395c8c c2 20 rep #$20 REP #$20 ; set A long -.395c8e a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 -.395c91 5b tcd TCD -.395c92 28 plp PLP -.395c93 68 pla PLA ; end setdp macro -.395c94 e2 20 sep #$20 SEP #$20 ; set A short -.395c96 a0 05 00 ldy #$0005 LDY #UART_LSR ; Check the receive FIFO -.395c99 b7 00 lda [$0700],y wait_getc LDA [CURRUART],Y -.395c9b 29 01 and #$01 AND #LSR_DATA_AVAIL -.395c9d f0 fa beq $395c99 BEQ wait_getc ; If the flag is clear, wait -.395c9f a0 00 00 ldy #$0000 LDY #UART_TRHB ; Get the byte from the receive FIFO -.395ca2 b7 00 lda [$0700],y LDA [CURRUART],Y -.395ca4 2b pld PLD -.395ca5 28 plp PLP -.395ca6 6b rtl RTL -.395ca7 UART_PUTC -.395ca7 08 php PHP -.395ca8 0b phd PHD -.395ca9 c2 30 rep #$30 REP #$30 ; set A&X long -.395cab 48 pha PHA ; begin setdp macro -.395cac 08 php PHP -.395cad c2 20 rep #$20 REP #$20 ; set A long -.395caf a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 -.395cb2 5b tcd TCD -.395cb3 28 plp PLP -.395cb4 68 pla PLA ; end setdp macro -.395cb5 e2 20 sep #$20 SEP #$20 ; set A short -.395cb7 48 pha PHA ; Wait for the transmit FIFO to free up -.395cb8 a0 05 00 ldy #$0005 LDY #UART_LSR -.395cbb b7 00 lda [$0700],y wait_putc LDA [CURRUART],Y -.395cbd 29 20 and #$20 AND #LSR_XMIT_EMPTY -.395cbf f0 fa beq $395cbb BEQ wait_putc -.395cc1 68 pla PLA -.395cc2 a0 00 00 ldy #$0000 LDY #UART_TRHB -.395cc5 97 00 sta [$0700],y STA [CURRUART],Y -.395cc7 2b pld PLD -.395cc8 28 plp PLP -.395cc9 6b rtl RTL -.395cca UART_PUTS -.395cca 08 php PHP -.395ccb e2 20 sep #$20 SEP #$20 ; set A short -.395ccd bd 00 00 lda $0000,x put_loop LDA #0,B,X -.395cd0 f0 07 beq $395cd9 BEQ done -.395cd2 22 a7 5c 39 jsl $395ca7 JSL UART_PUTC -.395cd6 e8 inx INX -.395cd7 80 f4 bra $395ccd BRA put_loop -.395cd9 28 plp done PLP -.395cda 6b rtl RTL +.395c32 UART_SELECT +.395c32 08 php PHP +.395c33 c2 20 rep #$20 REP #$20 ; set A long +.395c35 c9 02 00 cmp #$0002 CMP #2 +.395c38 f0 07 beq $395c41 BEQ is_COM2 +.395c3a c2 20 rep #$20 REP #$20 ; set A long +.395c3c a9 f8 13 lda #$13f8 LDA #<>UART1_BASE +.395c3f 80 05 bra $395c46 BRA setaddr +.395c41 is_COM2 +.395c41 c2 20 rep #$20 REP #$20 ; set A long +.395c43 a9 f8 12 lda #$12f8 LDA #<>UART2_BASE +.395c46 8f 00 07 00 sta $000700 setaddr STA @lCURRUART +.395c4a e2 20 sep #$20 SEP #$20 ; set A short +.395c4c a9 af lda #$af LDA #`UART1_BASE +.395c4e 8f 02 07 00 sta $000702 STA @lCURRUART+2 +.395c52 28 plp PLP +.395c53 6b rtl RTL +.395c54 UART_SETBPS +.395c54 08 php PHP +.395c55 0b phd PHD +.395c56 48 pha PHA ; begin setdp macro +.395c57 08 php PHP +.395c58 c2 20 rep #$20 REP #$20 ; set A long +.395c5a a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 +.395c5d 5b tcd TCD +.395c5e 28 plp PLP +.395c5f 68 pla PLA ; end setdp macro +.395c60 c2 30 rep #$30 REP #$30 ; set A&X long +.395c62 48 pha PHA +.395c63 e2 20 sep #$20 SEP #$20 ; set A short +.395c65 a0 03 00 ldy #$0003 LDY #UART_LCR ; Enable divisor latch +.395c68 b7 00 lda [$0700],y LDA [CURRUART],Y +.395c6a 09 80 ora #$80 ORA #LCR_DLB +.395c6c 97 00 sta [$0700],y STA [CURRUART],Y +.395c6e c2 20 rep #$20 REP #$20 ; set A long +.395c70 68 pla PLA +.395c71 a0 00 00 ldy #$0000 LDY #UART_DLL +.395c74 97 00 sta [$0700],y STA [CURRUART],Y ; Save the divisor to the UART +.395c76 e2 20 sep #$20 SEP #$20 ; set A short +.395c78 a0 03 00 ldy #$0003 LDY #UART_LCR ; Disable divisor latch +.395c7b b7 00 lda [$0700],y LDA [CURRUART],Y +.395c7d 49 80 eor #$80 EOR #LCR_DLB +.395c7f 97 00 sta [$0700],y STA [CURRUART],Y +.395c81 2b pld PLD +.395c82 28 plp PLP +.395c83 6b rtl RTL +.395c84 UART_SETLCR +.395c84 08 php PHP +.395c85 0b phd PHD +.395c86 48 pha PHA ; begin setdp macro +.395c87 08 php PHP +.395c88 c2 20 rep #$20 REP #$20 ; set A long +.395c8a a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 +.395c8d 5b tcd TCD +.395c8e 28 plp PLP +.395c8f 68 pla PLA ; end setdp macro +.395c90 e2 20 sep #$20 SEP #$20 ; set A short +.395c92 c2 10 rep #$10 REP #$10 ; set X long +.395c94 29 7f and #$7f AND #$7F ; We don't want to alter divisor latch +.395c96 a0 03 00 ldy #$0003 LDY #UART_LCR +.395c99 97 00 sta [$0700],y STA [CURRUART],Y +.395c9b 2b pld PLD +.395c9c 28 plp PLP +.395c9d 6b rtl RTL +.395c9e UART_INIT +.395c9e 08 php PHP +.395c9f 0b phd PHD +.395ca0 c2 30 rep #$30 REP #$30 ; set A&X long +.395ca2 48 pha PHA ; begin setdp macro +.395ca3 08 php PHP +.395ca4 c2 20 rep #$20 REP #$20 ; set A long +.395ca6 a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 +.395ca9 5b tcd TCD +.395caa 28 plp PLP +.395cab 68 pla PLA ; end setdp macro +.395cac a9 01 00 lda #$0001 LDA #UART_115200 +.395caf 22 54 5c 39 jsl $395c54 JSL UART_SETBPS +.395cb3 e2 20 sep #$20 SEP #$20 ; set A short +.395cb5 a9 03 lda #$03 LDA #LCR_PARITY_NONE | LCR_STOPBIT_1 | LCR_DATABITS_8 +.395cb7 22 84 5c 39 jsl $395c84 JSL UART_SETLCR +.395cbb a9 e1 lda #$e1 LDA #%11100001 +.395cbd a0 02 00 ldy #$0002 LDY #UART_FCR +.395cc0 97 00 sta [$0700],y STA [CURRUART],Y +.395cc2 2b pld PLD +.395cc3 28 plp PLP +.395cc4 6b rtl RTL +.395cc5 UART_HASBYT +.395cc5 08 php PHP +.395cc6 0b phd PHD +.395cc7 c2 30 rep #$30 REP #$30 ; set A&X long +.395cc9 48 pha PHA ; begin setdp macro +.395cca 08 php PHP +.395ccb c2 20 rep #$20 REP #$20 ; set A long +.395ccd a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 +.395cd0 5b tcd TCD +.395cd1 28 plp PLP +.395cd2 68 pla PLA ; end setdp macro +.395cd3 e2 20 sep #$20 SEP #$20 ; set A short +.395cd5 a0 05 00 ldy #$0005 LDY #UART_LSR ; Check the receive FIFO +.395cd8 b7 00 lda [$0700],y wait_putc LDA [CURRUART],Y +.395cda 29 01 and #$01 AND #LSR_DATA_AVAIL +.395cdc d0 04 bne $395ce2 BNE ret_true ; If flag is set, return true +.395cde 2b pld ret_false PLD ; Return false +.395cdf 28 plp PLP +.395ce0 18 clc CLC +.395ce1 6b rtl RTL +.395ce2 2b pld ret_true PLD ; Return true +.395ce3 28 plp PLP +.395ce4 38 sec SEC +.395ce5 6b rtl RTL +.395ce6 UART_GETC +.395ce6 08 php PHP +.395ce7 0b phd PHD +.395ce8 c2 30 rep #$30 REP #$30 ; set A&X long +.395cea 48 pha PHA ; begin setdp macro +.395ceb 08 php PHP +.395cec c2 20 rep #$20 REP #$20 ; set A long +.395cee a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 +.395cf1 5b tcd TCD +.395cf2 28 plp PLP +.395cf3 68 pla PLA ; end setdp macro +.395cf4 e2 20 sep #$20 SEP #$20 ; set A short +.395cf6 a0 05 00 ldy #$0005 LDY #UART_LSR ; Check the receive FIFO +.395cf9 b7 00 lda [$0700],y wait_getc LDA [CURRUART],Y +.395cfb 29 01 and #$01 AND #LSR_DATA_AVAIL +.395cfd f0 fa beq $395cf9 BEQ wait_getc ; If the flag is clear, wait +.395cff a0 00 00 ldy #$0000 LDY #UART_TRHB ; Get the byte from the receive FIFO +.395d02 b7 00 lda [$0700],y LDA [CURRUART],Y +.395d04 2b pld PLD +.395d05 28 plp PLP +.395d06 6b rtl RTL +.395d07 UART_PUTC +.395d07 08 php PHP +.395d08 0b phd PHD +.395d09 c2 30 rep #$30 REP #$30 ; set A&X long +.395d0b 48 pha PHA ; begin setdp macro +.395d0c 08 php PHP +.395d0d c2 20 rep #$20 REP #$20 ; set A long +.395d0f a9 00 07 lda #$0700 LDA #CURRUART ; set DP to page 0 +.395d12 5b tcd TCD +.395d13 28 plp PLP +.395d14 68 pla PLA ; end setdp macro +.395d15 e2 20 sep #$20 SEP #$20 ; set A short +.395d17 48 pha PHA ; Wait for the transmit FIFO to free up +.395d18 a0 05 00 ldy #$0005 LDY #UART_LSR +.395d1b b7 00 lda [$0700],y wait_putc LDA [CURRUART],Y +.395d1d 29 20 and #$20 AND #LSR_XMIT_EMPTY +.395d1f f0 fa beq $395d1b BEQ wait_putc +.395d21 68 pla PLA +.395d22 a0 00 00 ldy #$0000 LDY #UART_TRHB +.395d25 97 00 sta [$0700],y STA [CURRUART],Y +.395d27 2b pld PLD +.395d28 28 plp PLP +.395d29 6b rtl RTL +.395d2a UART_PUTS +.395d2a 08 php PHP +.395d2b e2 20 sep #$20 SEP #$20 ; set A short +.395d2d bd 00 00 lda $0000,x put_loop LDA #0,B,X +.395d30 f0 07 beq $395d39 BEQ done +.395d32 22 07 5d 39 jsl $395d07 JSL UART_PUTC +.395d36 e8 inx INX +.395d37 80 f4 bra $395d2d BRA put_loop +.395d39 28 plp done PLP +.395d3a 6b rtl RTL ;****** Return to file: src\kernel.asm ;****** Processing file: src\joystick.asm -.395cdb JOYSTICK_SET_NES_MODE -.395cdb e2 20 sep #$20 SEP #$20 ; set A short -.395cdd af 04 e8 af lda $afe804 LDA JOYSTICK_MODE -.395ce1 29 fb and #$fb AND #~NES_SNES_JOY ; 0 = NES (8 bit shift) -.395ce3 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE -.395ce7 6b rtl RTL -.395ce8 JOYSTICK_SET_SNES_MODE -.395ce8 e2 20 sep #$20 SEP #$20 ; set A short -.395cea af 04 e8 af lda $afe804 LDA JOYSTICK_MODE -.395cee 29 fb and #$fb AND #~NES_SNES_JOY -.395cf0 09 04 ora #$04 ORA #NES_SNES_JOY ; 1 = SNES (12 Bit Shift) -.395cf2 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE -.395cf6 6b rtl RTL -.395cf7 JOYSTICK_ENABLE_NES_SNES_PORT0 -.395cf7 e2 20 sep #$20 SEP #$20 ; set A short -.395cf9 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE -.395cfd 29 fe and #$fe AND #~NES_SNES_EN0 -.395cff 09 01 ora #$01 ORA #NES_SNES_EN0 -.395d01 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE -.395d05 6b rtl RTL -.395d06 JOYSTICK_ENABLE_NES_SNES_PORT1 -.395d06 e2 20 sep #$20 SEP #$20 ; set A short -.395d08 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE -.395d0c 29 fd and #$fd AND #~NES_SNES_EN1 -.395d0e 09 02 ora #$02 ORA #NES_SNES_EN1 -.395d10 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE -.395d14 6b rtl RTL -.395d15 JOYSTICK_DISABLE_NES_SNES_PORT0 -.395d15 e2 20 sep #$20 SEP #$20 ; set A short -.395d17 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE -.395d1b 29 fe and #$fe AND #~NES_SNES_EN0 -.395d1d 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE -.395d21 6b rtl RTL -.395d22 JOYSTICK_DISABLE_NES_SNES_PORT1 -.395d22 e2 20 sep #$20 SEP #$20 ; set A short -.395d24 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE -.395d28 29 fd and #$fd AND #~NES_SNES_EN1 -.395d2a 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE -.395d2e 6b rtl RTL -.395d2f JOYSTICK_NES_SNES_TRIG_WITH_POLL -.395d2f e2 20 sep #$20 SEP #$20 ; set A short -.395d31 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE -.395d35 29 03 and #$03 AND #(NES_SNES_EN0 | NES_SNES_EN1) -.395d37 c9 00 cmp #$00 CMP #$00 -.395d39 f0 14 beq $395d4f BEQ END_OF_JOYSTICK_POLL -.395d3b af 04 e8 af lda $afe804 LDA JOYSTICK_MODE -.395d3f 09 80 ora #$80 ORA #NES_SNES_TRIG ; Set to 1 (Will auto Clear) -.395d41 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE -.395d45 JOYSTICK_POLLING_ISNOTOVER -.395d45 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE ; -.395d49 29 40 and #$40 AND #NES_SNES_DONE -.395d4b c9 40 cmp #$40 CMP #NES_SNES_DONE -.395d4d d0 f6 bne $395d45 BNE JOYSTICK_POLLING_ISNOTOVER -.395d4f END_OF_JOYSTICK_POLL -.395d4f 6b rtl RTL +.395d3b JOYSTICK_SET_NES_MODE +.395d3b e2 20 sep #$20 SEP #$20 ; set A short +.395d3d af 04 e8 af lda $afe804 LDA JOYSTICK_MODE +.395d41 29 fb and #$fb AND #~NES_SNES_JOY ; 0 = NES (8 bit shift) +.395d43 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE +.395d47 6b rtl RTL +.395d48 JOYSTICK_SET_SNES_MODE +.395d48 e2 20 sep #$20 SEP #$20 ; set A short +.395d4a af 04 e8 af lda $afe804 LDA JOYSTICK_MODE +.395d4e 29 fb and #$fb AND #~NES_SNES_JOY +.395d50 09 04 ora #$04 ORA #NES_SNES_JOY ; 1 = SNES (12 Bit Shift) +.395d52 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE +.395d56 6b rtl RTL +.395d57 JOYSTICK_ENABLE_NES_SNES_PORT0 +.395d57 e2 20 sep #$20 SEP #$20 ; set A short +.395d59 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE +.395d5d 29 fe and #$fe AND #~NES_SNES_EN0 +.395d5f 09 01 ora #$01 ORA #NES_SNES_EN0 +.395d61 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE +.395d65 6b rtl RTL +.395d66 JOYSTICK_ENABLE_NES_SNES_PORT1 +.395d66 e2 20 sep #$20 SEP #$20 ; set A short +.395d68 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE +.395d6c 29 fd and #$fd AND #~NES_SNES_EN1 +.395d6e 09 02 ora #$02 ORA #NES_SNES_EN1 +.395d70 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE +.395d74 6b rtl RTL +.395d75 JOYSTICK_DISABLE_NES_SNES_PORT0 +.395d75 e2 20 sep #$20 SEP #$20 ; set A short +.395d77 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE +.395d7b 29 fe and #$fe AND #~NES_SNES_EN0 +.395d7d 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE +.395d81 6b rtl RTL +.395d82 JOYSTICK_DISABLE_NES_SNES_PORT1 +.395d82 e2 20 sep #$20 SEP #$20 ; set A short +.395d84 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE +.395d88 29 fd and #$fd AND #~NES_SNES_EN1 +.395d8a 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE +.395d8e 6b rtl RTL +.395d8f JOYSTICK_NES_SNES_TRIG_WITH_POLL +.395d8f e2 20 sep #$20 SEP #$20 ; set A short +.395d91 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE +.395d95 29 03 and #$03 AND #(NES_SNES_EN0 | NES_SNES_EN1) +.395d97 c9 00 cmp #$00 CMP #$00 +.395d99 f0 14 beq $395daf BEQ END_OF_JOYSTICK_POLL +.395d9b af 04 e8 af lda $afe804 LDA JOYSTICK_MODE +.395d9f 09 80 ora #$80 ORA #NES_SNES_TRIG ; Set to 1 (Will auto Clear) +.395da1 8f 04 e8 af sta $afe804 STA JOYSTICK_MODE +.395da5 JOYSTICK_POLLING_ISNOTOVER +.395da5 af 04 e8 af lda $afe804 LDA JOYSTICK_MODE ; +.395da9 29 40 and #$40 AND #NES_SNES_DONE +.395dab c9 40 cmp #$40 CMP #NES_SNES_DONE +.395dad d0 f6 bne $395da5 BNE JOYSTICK_POLLING_ISNOTOVER +.395daf END_OF_JOYSTICK_POLL +.395daf 6b rtl RTL ;****** Return to file: src\kernel.asm ;****** Processing file: src\sdc_library.asm -.395d50 SDC_TEST -.395d50 8b phb PHB -.395d51 0b phd PHD -.395d52 08 php PHP -.395d53 48 pha PHA ; begin setdbr macro -.395d54 08 php PHP -.395d55 e2 20 sep #$20 SEP #$20 ; set A short -.395d57 a9 00 lda #$00 LDA #0 -.395d59 48 pha PHA -.395d5a ab plb PLB -.395d5b 28 plp PLP -.395d5c 68 pla PLA ; end setdbr macro -.395d5d 48 pha PHA ; begin setdp macro -.395d5e 08 php PHP -.395d5f c2 20 rep #$20 REP #$20 ; set A long -.395d61 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395d64 5b tcd TCD -.395d65 28 plp PLP -.395d66 68 pla PLA ; end setdp macro -.395d67 e2 20 sep #$20 SEP #$20 ; set A short -.395d69 a9 f0 lda #$f0 LDA #$F0 ; Set white on black background -.395d6b 8d 1e 00 sta $001e STA @w CURCOLOR -.395d6e 22 a8 10 00 jsl $0010a8 JSL CLRSCREEN -.395d72 22 a0 10 00 jsl $0010a0 JSL CSRHOME -.395d76 22 b6 5d 39 jsl $395db6 JSL SDC_INIT ; Attempt to initilize the SDC interface -.395d7a b0 03 bcs $395d7f BCS init_ok -.395d7c 82 15 00 brl $395d94 BRL done -.395d7f a9 02 lda #$02 init_ok LDA #BIOS_DEV_SD -.395d81 85 01 sta $0321 STA BIOS_DEV -.395d83 22 54 45 39 jsl $394554 JSL DOS_MOUNT ; Attempt to mount the SDC -.395d87 b0 03 bcs $395d8c BCS mount_ok -.395d89 82 08 00 brl $395d94 BRL done -.395d8c 22 07 56 39 jsl $395607 mount_ok JSL IF_DIROPEN -.395d90 b0 02 bcs $395d94 BCS all_ok -.395d92 80 00 bra $395d94 BRA done -.395d94 all_ok -.395d94 22 6c 10 00 jsl $00106c done JSL PRINTCR -.395d98 28 plp PLP -.395d99 2b pld PLD -.395d9a ab plb PLB -.395d9b 6b rtl RTL -.395d9c SDC_WAITBUSY -.395d9c 08 php PHP -.395d9d e2 20 sep #$20 SEP #$20 ; set A short -.395d9f af 04 ea af lda $afea04 wait_xact LDA @l SDC_TRANS_STATUS_REG ; Wait for the transaction to complete -.395da3 29 01 and #$01 AND #SDC_TRANS_BUSY -.395da5 c9 01 cmp #$01 CMP #SDC_TRANS_BUSY -.395da7 f0 f6 beq $395d9f BEQ wait_xact -.395da9 28 plp PLP -.395daa 6b rtl RTL -.395dab SDC_RESET -.395dab 08 php PHP -.395dac e2 20 sep #$20 SEP #$20 ; set A short -.395dae a9 01 lda #$01 LDA #1 -.395db0 8f 01 ea af sta $afea01 STA @l SDC_CONTROL_REG -.395db4 28 plp PLP -.395db5 6b rtl RTL -.395db6 SDC_INIT -.395db6 0b phd PHD -.395db7 8b phb PHB -.395db8 08 php PHP -.395db9 48 pha PHA ; begin setdbr macro -.395dba 08 php PHP -.395dbb e2 20 sep #$20 SEP #$20 ; set A short -.395dbd a9 00 lda #$00 LDA #0 -.395dbf 48 pha PHA -.395dc0 ab plb PLB -.395dc1 28 plp PLP -.395dc2 68 pla PLA ; end setdbr macro -.395dc3 48 pha PHA ; begin setdp macro -.395dc4 08 php PHP -.395dc5 c2 20 rep #$20 REP #$20 ; set A long -.395dc7 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395dca 5b tcd TCD -.395dcb 28 plp PLP -.395dcc 68 pla PLA ; end setdp macro -.395dcd e2 20 sep #$20 SEP #$20 ; set A short -.395dcf a9 01 lda #$01 start_trans LDA #SDC_TRANS_INIT_SD -.395dd1 8f 02 ea af sta $afea02 STA @l SDC_TRANS_TYPE_REG ; Set Init SD -.395dd5 a9 01 lda #$01 LDA #SDC_TRANS_START ; Set the transaction to start -.395dd7 8f 03 ea af sta $afea03 STA @l SDC_TRANS_CONTROL_REG -.395ddb 22 9c 5d 39 jsl $395d9c JSL SDC_WAITBUSY ; Wait for initialization to complete -.395ddf af 05 ea af lda $afea05 LDA @l SDC_TRANS_ERROR_REG ; Check for errors -.395de3 d0 07 bne $395dec BNE ret_error ; Is there one? Process the error -.395de5 64 00 stz $0320 ret_success STZ BIOS_STATUS -.395de7 28 plp PLP -.395de8 ab plb PLB -.395de9 2b pld PLD -.395dea 38 sec SEC -.395deb 6b rtl RTL -.395dec 8d 06 03 sta $0306 ret_error STA @w FDC_ST0 -.395def a9 8b lda #$8b LDA #BIOS_ERR_NOTINIT -.395df1 85 00 sta $0320 set_error STA BIOS_STATUS -.395df3 28 plp PLP -.395df4 ab plb PLB -.395df5 2b pld PLD -.395df6 18 clc CLC -.395df7 6b rtl RTL -.395df8 SDC_GETBLOCK -.395df8 0b phd PHD -.395df9 8b phb PHB -.395dfa 08 php PHP -.395dfb 48 pha PHA ; begin setdbr macro +.395db0 SDC_TEST +.395db0 8b phb PHB +.395db1 0b phd PHD +.395db2 08 php PHP +.395db3 48 pha PHA ; begin setdbr macro +.395db4 08 php PHP +.395db5 e2 20 sep #$20 SEP #$20 ; set A short +.395db7 a9 00 lda #$00 LDA #0 +.395db9 48 pha PHA +.395dba ab plb PLB +.395dbb 28 plp PLP +.395dbc 68 pla PLA ; end setdbr macro +.395dbd 48 pha PHA ; begin setdp macro +.395dbe 08 php PHP +.395dbf c2 20 rep #$20 REP #$20 ; set A long +.395dc1 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395dc4 5b tcd TCD +.395dc5 28 plp PLP +.395dc6 68 pla PLA ; end setdp macro +.395dc7 e2 20 sep #$20 SEP #$20 ; set A short +.395dc9 a9 f0 lda #$f0 LDA #$F0 ; Set white on black background +.395dcb 8d 1e 00 sta $001e STA @w CURCOLOR +.395dce 22 a8 10 00 jsl $0010a8 JSL CLRSCREEN +.395dd2 22 a0 10 00 jsl $0010a0 JSL CSRHOME +.395dd6 22 16 5e 39 jsl $395e16 JSL SDC_INIT ; Attempt to initilize the SDC interface +.395dda b0 03 bcs $395ddf BCS init_ok +.395ddc 82 15 00 brl $395df4 BRL done +.395ddf a9 02 lda #$02 init_ok LDA #BIOS_DEV_SD +.395de1 85 01 sta $0321 STA BIOS_DEV +.395de3 22 a6 45 39 jsl $3945a6 JSL DOS_MOUNT ; Attempt to mount the SDC +.395de7 b0 03 bcs $395dec BCS mount_ok +.395de9 82 08 00 brl $395df4 BRL done +.395dec 22 59 56 39 jsl $395659 mount_ok JSL IF_DIROPEN +.395df0 b0 02 bcs $395df4 BCS all_ok +.395df2 80 00 bra $395df4 BRA done +.395df4 all_ok +.395df4 22 6c 10 00 jsl $00106c done JSL PRINTCR +.395df8 28 plp PLP +.395df9 2b pld PLD +.395dfa ab plb PLB +.395dfb 6b rtl RTL +.395dfc SDC_WAITBUSY .395dfc 08 php PHP .395dfd e2 20 sep #$20 SEP #$20 ; set A short -.395dff a9 00 lda #$00 LDA #0 -.395e01 48 pha PHA -.395e02 ab plb PLB -.395e03 28 plp PLP -.395e04 68 pla PLA ; end setdbr macro -.395e05 48 pha PHA ; begin setdp macro -.395e06 08 php PHP -.395e07 c2 20 rep #$20 REP #$20 ; set A long -.395e09 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395e0c 5b tcd TCD -.395e0d 28 plp PLP -.395e0e 68 pla PLA ; end setdp macro -.395e0f e2 20 sep #$20 SEP #$20 ; set A short -.395e11 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn on the SDC activity light -.395e15 09 02 ora #$02 ORA #GABE_CTRL_SDC_LED -.395e17 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL -.395e1b a9 00 lda #$00 LDA #0 -.395e1d 8f 07 ea af sta $afea07 STA @l SDC_SD_ADDR_7_0_REG -.395e21 a5 02 lda $0322 LDA BIOS_LBA ; Set the LBA to read -.395e23 0a asl a ASL A -.395e24 8f 08 ea af sta $afea08 STA @l SDC_SD_ADDR_15_8_REG -.395e28 a5 03 lda $0323 LDA BIOS_LBA+1 -.395e2a 2a rol a ROL A -.395e2b 8f 09 ea af sta $afea09 STA @l SDC_SD_ADDR_23_16_REG -.395e2f a5 04 lda $0324 LDA BIOS_LBA+2 -.395e31 2a rol a ROL A -.395e32 8f 0a ea af sta $afea0a STA @l SDC_SD_ADDR_31_24_REG -.395e36 a9 02 lda #$02 LDA #SDC_TRANS_READ_BLK ; Set the transaction to READ -.395e38 8f 02 ea af sta $afea02 STA @l SDC_TRANS_TYPE_REG -.395e3c a9 01 lda #$01 LDA #SDC_TRANS_START ; Set the transaction to start -.395e3e 8f 03 ea af sta $afea03 STA @l SDC_TRANS_CONTROL_REG -.395e42 22 9c 5d 39 jsl $395d9c JSL SDC_WAITBUSY ; Wait for transaction to complete -.395e46 af 05 ea af lda $afea05 LDA @l SDC_TRANS_ERROR_REG ; Check for errors -.395e4a d0 36 bne $395e82 BNE ret_error ; Is there one? Process the error -.395e4c e2 20 sep #$20 SEP #$20 ; set A short -.395e4e af 13 ea af lda $afea13 LDA @l SDC_RX_FIFO_DATA_CNT_LO ; Record the number of bytes read -.395e52 85 0a sta $032a STA BIOS_FIFO_COUNT -.395e54 af 12 ea af lda $afea12 LDA @l SDC_RX_FIFO_DATA_CNT_HI -.395e58 85 0b sta $032b STA BIOS_FIFO_COUNT+1 -.395e5a c2 10 rep #$10 REP #$10 ; set X long -.395e5c a0 00 00 ldy #$0000 LDY #0 -.395e5f af 10 ea af lda $afea10 loop_rd LDA @l SDC_RX_FIFO_DATA_REG ; Get the byte... -.395e63 97 06 sta [$0326],y STA [BIOS_BUFF_PTR],Y ; Save it to the buffer -.395e65 c8 iny INY ; Advance to the next byte -.395e66 c0 00 02 cpy #$0200 CPY #512 ; Have we read all the bytes? -.395e69 d0 f4 bne $395e5f BNE loop_rd ; No: keep reading -.395e6b af 05 ea af lda $afea05 LDA @l SDC_TRANS_ERROR_REG ; Check for errors -.395e6f d0 11 bne $395e82 BNE ret_error ; Is there one? Process the error -.395e71 64 00 stz $0320 ret_success STZ BIOS_STATUS ; Return success -.395e73 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn off the SDC activity light -.395e77 29 fd and #$fd AND #~GABE_CTRL_SDC_LED -.395e79 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL -.395e7d 28 plp PLP -.395e7e ab plb PLB -.395e7f 2b pld PLD -.395e80 38 sec SEC -.395e81 6b rtl RTL -.395e82 8d 06 03 sta $0306 ret_error STA @w FDC_ST0 -.395e85 a9 82 lda #$82 LDA #BIOS_ERR_READ -.395e87 85 00 sta $0320 STA BIOS_STATUS -.395e89 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn off the SDC activity light -.395e8d 29 fd and #$fd AND #~GABE_CTRL_SDC_LED -.395e8f 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL -.395e93 28 plp PLP -.395e94 ab plb PLB -.395e95 2b pld PLD -.395e96 18 clc CLC -.395e97 6b rtl RTL -.395e98 SDC_PUTBLOCK -.395e98 0b phd PHD -.395e99 8b phb PHB -.395e9a 08 php PHP -.395e9b 48 pha PHA ; begin setdbr macro -.395e9c 08 php PHP -.395e9d e2 20 sep #$20 SEP #$20 ; set A short -.395e9f a9 00 lda #$00 LDA #0 -.395ea1 48 pha PHA -.395ea2 ab plb PLB -.395ea3 28 plp PLP -.395ea4 68 pla PLA ; end setdbr macro -.395ea5 48 pha PHA ; begin setdp macro -.395ea6 08 php PHP -.395ea7 c2 20 rep #$20 REP #$20 ; set A long -.395ea9 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.395eac 5b tcd TCD -.395ead 28 plp PLP -.395eae 68 pla PLA ; end setdp macro -.395eaf e2 20 sep #$20 SEP #$20 ; set A short -.395eb1 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn on the SDC activity light -.395eb5 09 02 ora #$02 ORA #GABE_CTRL_SDC_LED -.395eb7 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL -.395ebb c2 10 rep #$10 REP #$10 ; set X long -.395ebd a0 00 00 ldy #$0000 LDY #0 -.395ec0 b7 06 lda [$0326],y loop_wr LDA [BIOS_BUFF_PTR],Y ; Get the byte... -.395ec2 8f 20 ea af sta $afea20 STA @l SDC_TX_FIFO_DATA_REG ; Save it to the SDC -.395ec6 c8 iny INY ; Advance to the next byte -.395ec7 c0 00 02 cpy #$0200 CPY #512 ; Have we read all the bytes? -.395eca d0 f4 bne $395ec0 BNE loop_wr ; No: keep writing -.395ecc a9 00 lda #$00 LDA #0 -.395ece 8f 07 ea af sta $afea07 STA @l SDC_SD_ADDR_7_0_REG -.395ed2 a5 02 lda $0322 LDA BIOS_LBA ; Set the LBA to write -.395ed4 0a asl a ASL A -.395ed5 8f 08 ea af sta $afea08 STA @l SDC_SD_ADDR_15_8_REG -.395ed9 a5 03 lda $0323 LDA BIOS_LBA+1 -.395edb 2a rol a ROL A -.395edc 8f 09 ea af sta $afea09 STA @l SDC_SD_ADDR_23_16_REG -.395ee0 a5 04 lda $0324 LDA BIOS_LBA+2 -.395ee2 2a rol a ROL A -.395ee3 8f 0a ea af sta $afea0a STA @l SDC_SD_ADDR_31_24_REG -.395ee7 a9 03 lda #$03 LDA #SDC_TRANS_WRITE_BLK ; Set the transaction to WRITE -.395ee9 8f 02 ea af sta $afea02 STA @l SDC_TRANS_TYPE_REG -.395eed a9 01 lda #$01 LDA #SDC_TRANS_START ; Set the transaction to start -.395eef 8f 03 ea af sta $afea03 STA @l SDC_TRANS_CONTROL_REG -.395ef3 22 9c 5d 39 jsl $395d9c JSL SDC_WAITBUSY ; Wait for transaction to complete -.395ef7 af 05 ea af lda $afea05 LDA @l SDC_TRANS_ERROR_REG ; Check for errors -.395efb d0 11 bne $395f0e BNE ret_error ; Is there one? Process the error -.395efd 64 00 stz $0320 ret_success STZ BIOS_STATUS ; Return success -.395eff af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn off the SDC activity light -.395f03 29 fd and #$fd AND #~GABE_CTRL_SDC_LED -.395f05 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL -.395f09 28 plp PLP -.395f0a ab plb PLB -.395f0b 2b pld PLD -.395f0c 38 sec SEC -.395f0d 6b rtl RTL -.395f0e 8d 06 03 sta $0306 ret_error STA @w FDC_ST0 -.395f11 a9 82 lda #$82 LDA #BIOS_ERR_READ -.395f13 85 00 sta $0320 STA BIOS_STATUS -.395f15 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn off the SDC activity light -.395f19 29 fd and #$fd AND #~GABE_CTRL_SDC_LED -.395f1b 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL -.395f1f 28 plp PLP -.395f20 ab plb PLB -.395f21 2b pld PLD -.395f22 18 clc CLC -.395f23 6b rtl RTL +.395dff af 04 ea af lda $afea04 wait_xact LDA @l SDC_TRANS_STATUS_REG ; Wait for the transaction to complete +.395e03 29 01 and #$01 AND #SDC_TRANS_BUSY +.395e05 c9 01 cmp #$01 CMP #SDC_TRANS_BUSY +.395e07 f0 f6 beq $395dff BEQ wait_xact +.395e09 28 plp PLP +.395e0a 6b rtl RTL +.395e0b SDC_RESET +.395e0b 08 php PHP +.395e0c e2 20 sep #$20 SEP #$20 ; set A short +.395e0e a9 01 lda #$01 LDA #1 +.395e10 8f 01 ea af sta $afea01 STA @l SDC_CONTROL_REG +.395e14 28 plp PLP +.395e15 6b rtl RTL +.395e16 SDC_INIT +.395e16 0b phd PHD +.395e17 8b phb PHB +.395e18 08 php PHP +.395e19 48 pha PHA ; begin setdbr macro +.395e1a 08 php PHP +.395e1b e2 20 sep #$20 SEP #$20 ; set A short +.395e1d a9 00 lda #$00 LDA #0 +.395e1f 48 pha PHA +.395e20 ab plb PLB +.395e21 28 plp PLP +.395e22 68 pla PLA ; end setdbr macro +.395e23 48 pha PHA ; begin setdp macro +.395e24 08 php PHP +.395e25 c2 20 rep #$20 REP #$20 ; set A long +.395e27 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395e2a 5b tcd TCD +.395e2b 28 plp PLP +.395e2c 68 pla PLA ; end setdp macro +.395e2d e2 20 sep #$20 SEP #$20 ; set A short +.395e2f a9 01 lda #$01 start_trans LDA #SDC_TRANS_INIT_SD +.395e31 8f 02 ea af sta $afea02 STA @l SDC_TRANS_TYPE_REG ; Set Init SD +.395e35 a9 01 lda #$01 LDA #SDC_TRANS_START ; Set the transaction to start +.395e37 8f 03 ea af sta $afea03 STA @l SDC_TRANS_CONTROL_REG +.395e3b 22 fc 5d 39 jsl $395dfc JSL SDC_WAITBUSY ; Wait for initialization to complete +.395e3f af 05 ea af lda $afea05 LDA @l SDC_TRANS_ERROR_REG ; Check for errors +.395e43 d0 07 bne $395e4c BNE ret_error ; Is there one? Process the error +.395e45 64 00 stz $0320 ret_success STZ BIOS_STATUS +.395e47 28 plp PLP +.395e48 ab plb PLB +.395e49 2b pld PLD +.395e4a 38 sec SEC +.395e4b 6b rtl RTL +.395e4c 8d 06 03 sta $0306 ret_error STA @w FDC_ST0 +.395e4f a9 8b lda #$8b LDA #BIOS_ERR_NOTINIT +.395e51 85 00 sta $0320 set_error STA BIOS_STATUS +.395e53 28 plp PLP +.395e54 ab plb PLB +.395e55 2b pld PLD +.395e56 18 clc CLC +.395e57 6b rtl RTL +.395e58 SDC_GETBLOCK +.395e58 0b phd PHD +.395e59 8b phb PHB +.395e5a 08 php PHP +.395e5b 48 pha PHA ; begin setdbr macro +.395e5c 08 php PHP +.395e5d e2 20 sep #$20 SEP #$20 ; set A short +.395e5f a9 00 lda #$00 LDA #0 +.395e61 48 pha PHA +.395e62 ab plb PLB +.395e63 28 plp PLP +.395e64 68 pla PLA ; end setdbr macro +.395e65 48 pha PHA ; begin setdp macro +.395e66 08 php PHP +.395e67 c2 20 rep #$20 REP #$20 ; set A long +.395e69 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395e6c 5b tcd TCD +.395e6d 28 plp PLP +.395e6e 68 pla PLA ; end setdp macro +.395e6f e2 20 sep #$20 SEP #$20 ; set A short +.395e71 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn on the SDC activity light +.395e75 09 02 ora #$02 ORA #GABE_CTRL_SDC_LED +.395e77 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL +.395e7b a9 00 lda #$00 LDA #0 +.395e7d 8f 07 ea af sta $afea07 STA @l SDC_SD_ADDR_7_0_REG +.395e81 a5 02 lda $0322 LDA BIOS_LBA ; Set the LBA to read +.395e83 0a asl a ASL A +.395e84 8f 08 ea af sta $afea08 STA @l SDC_SD_ADDR_15_8_REG +.395e88 a5 03 lda $0323 LDA BIOS_LBA+1 +.395e8a 2a rol a ROL A +.395e8b 8f 09 ea af sta $afea09 STA @l SDC_SD_ADDR_23_16_REG +.395e8f a5 04 lda $0324 LDA BIOS_LBA+2 +.395e91 2a rol a ROL A +.395e92 8f 0a ea af sta $afea0a STA @l SDC_SD_ADDR_31_24_REG +.395e96 a9 02 lda #$02 LDA #SDC_TRANS_READ_BLK ; Set the transaction to READ +.395e98 8f 02 ea af sta $afea02 STA @l SDC_TRANS_TYPE_REG +.395e9c a9 01 lda #$01 LDA #SDC_TRANS_START ; Set the transaction to start +.395e9e 8f 03 ea af sta $afea03 STA @l SDC_TRANS_CONTROL_REG +.395ea2 22 fc 5d 39 jsl $395dfc JSL SDC_WAITBUSY ; Wait for transaction to complete +.395ea6 af 05 ea af lda $afea05 LDA @l SDC_TRANS_ERROR_REG ; Check for errors +.395eaa d0 36 bne $395ee2 BNE ret_error ; Is there one? Process the error +.395eac e2 20 sep #$20 SEP #$20 ; set A short +.395eae af 13 ea af lda $afea13 LDA @l SDC_RX_FIFO_DATA_CNT_LO ; Record the number of bytes read +.395eb2 85 0a sta $032a STA BIOS_FIFO_COUNT +.395eb4 af 12 ea af lda $afea12 LDA @l SDC_RX_FIFO_DATA_CNT_HI +.395eb8 85 0b sta $032b STA BIOS_FIFO_COUNT+1 +.395eba c2 10 rep #$10 REP #$10 ; set X long +.395ebc a0 00 00 ldy #$0000 LDY #0 +.395ebf af 10 ea af lda $afea10 loop_rd LDA @l SDC_RX_FIFO_DATA_REG ; Get the byte... +.395ec3 97 06 sta [$0326],y STA [BIOS_BUFF_PTR],Y ; Save it to the buffer +.395ec5 c8 iny INY ; Advance to the next byte +.395ec6 c0 00 02 cpy #$0200 CPY #512 ; Have we read all the bytes? +.395ec9 d0 f4 bne $395ebf BNE loop_rd ; No: keep reading +.395ecb af 05 ea af lda $afea05 LDA @l SDC_TRANS_ERROR_REG ; Check for errors +.395ecf d0 11 bne $395ee2 BNE ret_error ; Is there one? Process the error +.395ed1 64 00 stz $0320 ret_success STZ BIOS_STATUS ; Return success +.395ed3 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn off the SDC activity light +.395ed7 29 fd and #$fd AND #~GABE_CTRL_SDC_LED +.395ed9 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL +.395edd 28 plp PLP +.395ede ab plb PLB +.395edf 2b pld PLD +.395ee0 38 sec SEC +.395ee1 6b rtl RTL +.395ee2 8d 06 03 sta $0306 ret_error STA @w FDC_ST0 +.395ee5 a9 82 lda #$82 LDA #BIOS_ERR_READ +.395ee7 85 00 sta $0320 STA BIOS_STATUS +.395ee9 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn off the SDC activity light +.395eed 29 fd and #$fd AND #~GABE_CTRL_SDC_LED +.395eef 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL +.395ef3 28 plp PLP +.395ef4 ab plb PLB +.395ef5 2b pld PLD +.395ef6 18 clc CLC +.395ef7 6b rtl RTL +.395ef8 SDC_PUTBLOCK +.395ef8 0b phd PHD +.395ef9 8b phb PHB +.395efa 08 php PHP +.395efb 48 pha PHA ; begin setdbr macro +.395efc 08 php PHP +.395efd e2 20 sep #$20 SEP #$20 ; set A short +.395eff a9 00 lda #$00 LDA #0 +.395f01 48 pha PHA +.395f02 ab plb PLB +.395f03 28 plp PLP +.395f04 68 pla PLA ; end setdbr macro +.395f05 48 pha PHA ; begin setdp macro +.395f06 08 php PHP +.395f07 c2 20 rep #$20 REP #$20 ; set A long +.395f09 a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.395f0c 5b tcd TCD +.395f0d 28 plp PLP +.395f0e 68 pla PLA ; end setdp macro +.395f0f e2 20 sep #$20 SEP #$20 ; set A short +.395f11 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn on the SDC activity light +.395f15 09 02 ora #$02 ORA #GABE_CTRL_SDC_LED +.395f17 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL +.395f1b c2 10 rep #$10 REP #$10 ; set X long +.395f1d a0 00 00 ldy #$0000 LDY #0 +.395f20 b7 06 lda [$0326],y loop_wr LDA [BIOS_BUFF_PTR],Y ; Get the byte... +.395f22 8f 20 ea af sta $afea20 STA @l SDC_TX_FIFO_DATA_REG ; Save it to the SDC +.395f26 c8 iny INY ; Advance to the next byte +.395f27 c0 00 02 cpy #$0200 CPY #512 ; Have we read all the bytes? +.395f2a d0 f4 bne $395f20 BNE loop_wr ; No: keep writing +.395f2c a9 00 lda #$00 LDA #0 +.395f2e 8f 07 ea af sta $afea07 STA @l SDC_SD_ADDR_7_0_REG +.395f32 a5 02 lda $0322 LDA BIOS_LBA ; Set the LBA to write +.395f34 0a asl a ASL A +.395f35 8f 08 ea af sta $afea08 STA @l SDC_SD_ADDR_15_8_REG +.395f39 a5 03 lda $0323 LDA BIOS_LBA+1 +.395f3b 2a rol a ROL A +.395f3c 8f 09 ea af sta $afea09 STA @l SDC_SD_ADDR_23_16_REG +.395f40 a5 04 lda $0324 LDA BIOS_LBA+2 +.395f42 2a rol a ROL A +.395f43 8f 0a ea af sta $afea0a STA @l SDC_SD_ADDR_31_24_REG +.395f47 a9 03 lda #$03 LDA #SDC_TRANS_WRITE_BLK ; Set the transaction to WRITE +.395f49 8f 02 ea af sta $afea02 STA @l SDC_TRANS_TYPE_REG +.395f4d a9 01 lda #$01 LDA #SDC_TRANS_START ; Set the transaction to start +.395f4f 8f 03 ea af sta $afea03 STA @l SDC_TRANS_CONTROL_REG +.395f53 22 fc 5d 39 jsl $395dfc JSL SDC_WAITBUSY ; Wait for transaction to complete +.395f57 af 05 ea af lda $afea05 LDA @l SDC_TRANS_ERROR_REG ; Check for errors +.395f5b d0 11 bne $395f6e BNE ret_error ; Is there one? Process the error +.395f5d 64 00 stz $0320 ret_success STZ BIOS_STATUS ; Return success +.395f5f af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn off the SDC activity light +.395f63 29 fd and #$fd AND #~GABE_CTRL_SDC_LED +.395f65 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL +.395f69 28 plp PLP +.395f6a ab plb PLB +.395f6b 2b pld PLD +.395f6c 38 sec SEC +.395f6d 6b rtl RTL +.395f6e 8d 06 03 sta $0306 ret_error STA @w FDC_ST0 +.395f71 a9 82 lda #$82 LDA #BIOS_ERR_READ +.395f73 85 00 sta $0320 STA BIOS_STATUS +.395f75 af 80 e8 af lda $afe880 LDA @l GABE_MSTR_CTRL ; Turn off the SDC activity light +.395f79 29 fd and #$fd AND #~GABE_CTRL_SDC_LED +.395f7b 8f 80 e8 af sta $afe880 STA @l GABE_MSTR_CTRL +.395f7f 28 plp PLP +.395f80 ab plb PLB +.395f81 2b pld PLD +.395f82 18 clc CLC +.395f83 6b rtl RTL ;****** Return to file: src\kernel.asm @@ -11542,213 +11659,155 @@ =13 BPB_SECPERCLUS12_OFF = 13 ; Offset to sectors per cluster in a FAT12 boot sector =17 BPB_ROOT_MAX_ENTRY12_OFF = 17 ; Offset to the maximum number of entries in the root directory in FAT12 boot sector =22 BPB_SECPERFAT12_OFF = 22 ; Offset to sectors per FAT on a FAT12 boot sector -.395f24 FDC_TEST -.395f24 8b phb PHB -.395f25 0b phd PHD -.395f26 08 php PHP -.395f27 48 pha PHA ; begin setdbr macro -.395f28 08 php PHP -.395f29 e2 20 sep #$20 SEP #$20 ; set A short -.395f2b a9 00 lda #$00 LDA #0 -.395f2d 48 pha PHA -.395f2e ab plb PLB -.395f2f 28 plp PLP -.395f30 68 pla PLA ; end setdbr macro -.395f31 48 pha PHA ; begin setdp macro -.395f32 08 php PHP -.395f33 c2 20 rep #$20 REP #$20 ; set A long -.395f35 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.395f38 5b tcd TCD -.395f39 28 plp PLP -.395f3a 68 pla PLA ; end setdp macro -.395f3b e2 20 sep #$20 SEP #$20 ; set A short -.395f3d a9 f0 lda #$f0 LDA #$F0 -.395f3f 8d 1e 00 sta $001e STA @w CURCOLOR -.395f42 22 42 0b 39 jsl $390b42 JSL ICLRSCREEN -.395f46 22 66 09 39 jsl $390966 JSL ICSRHOME -.395f4a c2 30 rep #$30 REP #$30 ; set A&X long -.395f4c 22 1a 62 39 jsl $39621a JSL FDC_Init -.395f50 b0 03 bcs $395f55 BCS init_ok -.395f52 82 20 00 brl $395f75 BRL motor_off -.395f55 22 19 69 39 jsl $396919 init_ok JSL FDC_CHK_MEDIA -.395f59 90 03 bcc $395f5e BCC no_media -.395f5b 82 03 00 brl $395f61 BRL is_ok1 -.395f5e no_media -.395f5e 82 14 00 brl $395f75 BRL motor_off -.395f61 22 ac 67 39 jsl $3967ac is_ok1 JSL FDC_MOUNT -.395f65 90 03 bcc $395f6a BCC mount_err -.395f67 82 03 00 brl $395f6d BRL is_ok2 -.395f6a mount_err -.395f6a 82 08 00 brl $395f75 BRL motor_off -.395f6d 22 81 5f 39 jsl $395f81 is_ok2 JSL FDC_TEST_PUTBLOCK -.395f71 b0 02 bcs $395f75 BCS all_ok -.395f73 80 00 bra $395f75 BRA motor_off -.395f75 all_ok -.395f75 22 6c 10 00 jsl $00106c motor_off JSL PRINTCR -.395f79 22 ca 62 39 jsl $3962ca JSL FDC_Motor_Off -.395f7d 28 plp PLP -.395f7e 2b pld PLD -.395f7f ab plb PLB -.395f80 6b rtl RTL -.395f81 FDC_TEST_PUTBLOCK -.395f81 e2 20 sep #$20 SEP #$20 ; set A short -.395f83 a9 00 lda #$00 LDA #0 ; Initialize the data to write to the drive -.395f85 a2 00 00 ldx #$0000 LDX #0 -.395f88 9f 00 00 03 sta $030000,x init_loop STA @l TEST_BUFFER,X -.395f8c 1a inc a INC A -.395f8d e8 inx INX -.395f8e e0 00 02 cpx #$0200 CPX #512 -.395f91 d0 f5 bne $395f88 BNE init_loop +.395f84 FDC_TEST +.395f84 8b phb PHB +.395f85 0b phd PHD +.395f86 08 php PHP +.395f87 48 pha PHA ; begin setdbr macro +.395f88 08 php PHP +.395f89 e2 20 sep #$20 SEP #$20 ; set A short +.395f8b a9 00 lda #$00 LDA #0 +.395f8d 48 pha PHA +.395f8e ab plb PLB +.395f8f 28 plp PLP +.395f90 68 pla PLA ; end setdbr macro +.395f91 48 pha PHA ; begin setdp macro +.395f92 08 php PHP .395f93 c2 20 rep #$20 REP #$20 ; set A long -.395f95 a9 00 00 lda #$0000 LDA #<>TEST_BUFFER ; Set BIOS_BUFF_PTR -.395f98 8f 26 03 00 sta $000326 STA @l BIOS_BUFF_PTR -.395f9c a9 03 00 lda #$0003 LDA #`TEST_BUFFER -.395f9f 8f 28 03 00 sta $000328 STA @l BIOS_BUFF_PTR+2 -.395fa3 a9 64 00 lda #$0064 LDA #100 ; Set LBA = 100 -.395fa6 8f 22 03 00 sta $000322 STA @l BIOS_LBA -.395faa a9 00 00 lda #$0000 LDA #0 -.395fad 8f 24 03 00 sta $000324 STA @l BIOS_LBA+2 -.395fb1 22 40 67 39 jsl $396740 JSL FDC_PUTBLOCK ; Try to write the data -.395fb5 6b rtl RTL ->395fb6 40 46 3a 53 41 4d 50 4c BOOT_FILE .null "@F:SAMPLE.PGX Hello, world!" ->395fbe 45 2e 50 47 58 20 48 65 6c 6c 6f 2c 20 77 6f 72 ->395fce 6c 64 21 00 +.395f95 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.395f98 5b tcd TCD +.395f99 28 plp PLP +.395f9a 68 pla PLA ; end setdp macro +.395f9b e2 20 sep #$20 SEP #$20 ; set A short +.395f9d a9 f0 lda #$f0 LDA #$F0 +.395f9f 8d 1e 00 sta $001e STA @w CURCOLOR +.395fa2 22 81 0b 39 jsl $390b81 JSL ICLRSCREEN +.395fa6 22 a5 09 39 jsl $3909a5 JSL ICSRHOME +.395faa c2 30 rep #$30 REP #$30 ; set A&X long +.395fac 22 7a 62 39 jsl $39627a JSL FDC_Init +.395fb0 b0 03 bcs $395fb5 BCS init_ok +.395fb2 82 20 00 brl $395fd5 BRL motor_off +.395fb5 22 79 69 39 jsl $396979 init_ok JSL FDC_CHK_MEDIA +.395fb9 90 03 bcc $395fbe BCC no_media +.395fbb 82 03 00 brl $395fc1 BRL is_ok1 +.395fbe no_media +.395fbe 82 14 00 brl $395fd5 BRL motor_off +.395fc1 22 0c 68 39 jsl $39680c is_ok1 JSL FDC_MOUNT +.395fc5 90 03 bcc $395fca BCC mount_err +.395fc7 82 03 00 brl $395fcd BRL is_ok2 +.395fca mount_err +.395fca 82 08 00 brl $395fd5 BRL motor_off +.395fcd 22 e1 5f 39 jsl $395fe1 is_ok2 JSL FDC_TEST_PUTBLOCK +.395fd1 b0 02 bcs $395fd5 BCS all_ok +.395fd3 80 00 bra $395fd5 BRA motor_off +.395fd5 all_ok +.395fd5 22 6c 10 00 jsl $00106c motor_off JSL PRINTCR +.395fd9 22 2a 63 39 jsl $39632a JSL FDC_Motor_Off +.395fdd 28 plp PLP +.395fde 2b pld PLD +.395fdf ab plb PLB +.395fe0 6b rtl RTL +.395fe1 FDC_TEST_PUTBLOCK +.395fe1 e2 20 sep #$20 SEP #$20 ; set A short +.395fe3 a9 00 lda #$00 LDA #0 ; Initialize the data to write to the drive +.395fe5 a2 00 00 ldx #$0000 LDX #0 +.395fe8 9f 00 00 03 sta $030000,x init_loop STA @l TEST_BUFFER,X +.395fec 1a inc a INC A +.395fed e8 inx INX +.395fee e0 00 02 cpx #$0200 CPX #512 +.395ff1 d0 f5 bne $395fe8 BNE init_loop +.395ff3 c2 20 rep #$20 REP #$20 ; set A long +.395ff5 a9 00 00 lda #$0000 LDA #<>TEST_BUFFER ; Set BIOS_BUFF_PTR +.395ff8 8f 26 03 00 sta $000326 STA @l BIOS_BUFF_PTR +.395ffc a9 03 00 lda #$0003 LDA #`TEST_BUFFER +.395fff 8f 28 03 00 sta $000328 STA @l BIOS_BUFF_PTR+2 +.396003 a9 64 00 lda #$0064 LDA #100 ; Set LBA = 100 +.396006 8f 22 03 00 sta $000322 STA @l BIOS_LBA +.39600a a9 00 00 lda #$0000 LDA #0 +.39600d 8f 24 03 00 sta $000324 STA @l BIOS_LBA+2 +.396011 22 a0 67 39 jsl $3967a0 JSL FDC_PUTBLOCK ; Try to write the data +.396015 6b rtl RTL +>396016 40 46 3a 53 41 4d 50 4c BOOT_FILE .null "@F:SAMPLE.PGX Hello, world!" +>39601e 45 2e 50 47 58 20 48 65 6c 6c 6f 2c 20 77 6f 72 +>39602e 6c 64 21 00 =$020000 TEST_LOCATION = $020000 ; Location to try to load it =$030000 TEST_BUFFER = $030000 ; Temporary location for a cluster buffer -.395fd2 FDC_Check_RQM -.395fd2 0b phd PHD -.395fd3 08 php PHP -.395fd4 48 pha PHA ; begin setdp macro -.395fd5 08 php PHP -.395fd6 c2 20 rep #$20 REP #$20 ; set A long -.395fd8 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.395fdb 5b tcd TCD -.395fdc 28 plp PLP -.395fdd 68 pla PLA ; end setdp macro -.395fde e2 20 sep #$20 SEP #$20 ; set A short -.395fe0 a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop -.395fe2 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.395fe6 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out -.395fe8 30 12 bmi $395ffc BMI time_out ; If so: signal a time out -.395fea af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR -.395fee 89 80 bit #$80 BIT #FDC_MSR_RQM -.395ff0 f0 f4 beq $395fe6 BEQ loop -.395ff2 a9 00 lda #$00 LDA #0 ; Clear the time out -.395ff4 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.395ff8 28 plp PLP -.395ff9 2b pld PLD -.395ffa 38 sec SEC -.395ffb 60 rts RTS -.395ffc 28 plp time_out PLP -.395ffd 2b pld PLD -.395ffe 18 clc CLC -.395fff 60 rts RTS -.396000 FDC_Check_DRV0_BSY -.396000 0b phd PHD -.396001 08 php PHP -.396002 48 pha PHA ; begin setdp macro -.396003 08 php PHP -.396004 c2 20 rep #$20 REP #$20 ; set A long -.396006 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396009 5b tcd TCD -.39600a 28 plp PLP -.39600b 68 pla PLA ; end setdp macro -.39600c e2 20 sep #$20 SEP #$20 ; set A short -.39600e a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop -.396010 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.396014 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out -.396016 30 12 bmi $39602a BMI time_out ; If so: signal a time out -.396018 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR -.39601c 89 01 bit #$01 BIT #FDC_MSR_DRV0BSY -.39601e d0 f4 bne $396014 BNE loop -.396020 a9 00 lda #$00 LDA #0 ; Clear the time out -.396022 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.396026 28 plp PLP -.396027 2b pld PLD -.396028 38 sec SEC -.396029 60 rts RTS -.39602a 28 plp time_out PLP -.39602b 2b pld PLD -.39602c 18 clc CLC -.39602d 60 rts RTS -.39602e FDC_Check_CMD_BSY -.39602e 0b phd PHD -.39602f 08 php PHP -.396030 48 pha PHA ; begin setdp macro -.396031 08 php PHP -.396032 c2 20 rep #$20 REP #$20 ; set A long -.396034 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396037 5b tcd TCD -.396038 28 plp PLP -.396039 68 pla PLA ; end setdp macro -.39603a e2 20 sep #$20 SEP #$20 ; set A short -.39603c a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop -.39603e 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.396042 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out -.396044 30 12 bmi $396058 BMI time_out ; If so: signal a time out -.396046 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR -.39604a 89 10 bit #$10 BIT #FDC_MSR_CMDBSY -.39604c d0 f4 bne $396042 BNE loop -.39604e a9 00 lda #$00 LDA #0 ; Clear the time out -.396050 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.396054 28 plp PLP -.396055 2b pld PLD -.396056 38 sec SEC -.396057 60 rts RTS -.396058 28 plp time_out PLP +.396032 FDC_Check_RQM +.396032 0b phd PHD +.396033 08 php PHP +.396034 48 pha PHA ; begin setdp macro +.396035 08 php PHP +.396036 c2 20 rep #$20 REP #$20 ; set A long +.396038 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.39603b 5b tcd TCD +.39603c 28 plp PLP +.39603d 68 pla PLA ; end setdp macro +.39603e e2 20 sep #$20 SEP #$20 ; set A short +.396040 a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop +.396042 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.396046 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out +.396048 30 12 bmi $39605c BMI time_out ; If so: signal a time out +.39604a af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR +.39604e 89 80 bit #$80 BIT #FDC_MSR_RQM +.396050 f0 f4 beq $396046 BEQ loop +.396052 a9 00 lda #$00 LDA #0 ; Clear the time out +.396054 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.396058 28 plp PLP .396059 2b pld PLD -.39605a 18 clc CLC +.39605a 38 sec SEC .39605b 60 rts RTS -.39605c FDC_Can_Read_Data -.39605c 0b phd PHD -.39605d 08 php PHP -.39605e 48 pha PHA ; begin setdp macro -.39605f 08 php PHP -.396060 c2 20 rep #$20 REP #$20 ; set A long -.396062 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396065 5b tcd TCD -.396066 28 plp PLP -.396067 68 pla PLA ; end setdp macro -.396068 e2 20 sep #$20 SEP #$20 ; set A short -.39606a a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop -.39606c 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.396070 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out -.396072 30 14 bmi $396088 BMI time_out ; If so: signal a time out -.396074 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR -.396078 29 40 and #$40 AND #FDC_MSR_DIO -.39607a c9 40 cmp #$40 CMP #FDC_MSR_DIO -.39607c d0 f2 bne $396070 BNE loop -.39607e a9 00 lda #$00 LDA #0 ; Clear the time out -.396080 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.396084 28 plp PLP -.396085 2b pld PLD -.396086 38 sec SEC -.396087 60 rts RTS -.396088 28 plp time_out PLP -.396089 2b pld PLD -.39608a 18 clc CLC -.39608b 60 rts RTS -.39608c FDC_CAN_WRITE -.39608c 0b phd PHD -.39608d 08 php PHP -.39608e 48 pha PHA ; begin setdp macro -.39608f 08 php PHP -.396090 c2 20 rep #$20 REP #$20 ; set A long -.396092 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396095 5b tcd TCD -.396096 28 plp PLP -.396097 68 pla PLA ; end setdp macro -.396098 e2 20 sep #$20 SEP #$20 ; set A short -.39609a a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop -.39609c 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.3960a0 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out -.3960a2 30 14 bmi $3960b8 BMI time_out ; If so: signal a time out -.3960a4 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR -.3960a8 29 c0 and #$c0 AND #FDC_MSR_RQM | FDC_MSR_DIO -.3960aa c9 80 cmp #$80 CMP #FDC_MSR_RQM -.3960ac d0 f2 bne $3960a0 BNE loop +.39605c 28 plp time_out PLP +.39605d 2b pld PLD +.39605e 18 clc CLC +.39605f 60 rts RTS +.396060 FDC_Check_DRV0_BSY +.396060 0b phd PHD +.396061 08 php PHP +.396062 48 pha PHA ; begin setdp macro +.396063 08 php PHP +.396064 c2 20 rep #$20 REP #$20 ; set A long +.396066 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396069 5b tcd TCD +.39606a 28 plp PLP +.39606b 68 pla PLA ; end setdp macro +.39606c e2 20 sep #$20 SEP #$20 ; set A short +.39606e a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop +.396070 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.396074 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out +.396076 30 12 bmi $39608a BMI time_out ; If so: signal a time out +.396078 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR +.39607c 89 01 bit #$01 BIT #FDC_MSR_DRV0BSY +.39607e d0 f4 bne $396074 BNE loop +.396080 a9 00 lda #$00 LDA #0 ; Clear the time out +.396082 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.396086 28 plp PLP +.396087 2b pld PLD +.396088 38 sec SEC +.396089 60 rts RTS +.39608a 28 plp time_out PLP +.39608b 2b pld PLD +.39608c 18 clc CLC +.39608d 60 rts RTS +.39608e FDC_Check_CMD_BSY +.39608e 0b phd PHD +.39608f 08 php PHP +.396090 48 pha PHA ; begin setdp macro +.396091 08 php PHP +.396092 c2 20 rep #$20 REP #$20 ; set A long +.396094 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396097 5b tcd TCD +.396098 28 plp PLP +.396099 68 pla PLA ; end setdp macro +.39609a e2 20 sep #$20 SEP #$20 ; set A short +.39609c a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop +.39609e 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.3960a2 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out +.3960a4 30 12 bmi $3960b8 BMI time_out ; If so: signal a time out +.3960a6 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR +.3960aa 89 10 bit #$10 BIT #FDC_MSR_CMDBSY +.3960ac d0 f4 bne $3960a2 BNE loop .3960ae a9 00 lda #$00 LDA #0 ; Clear the time out -.3960b0 22 03 41 39 jsl $394103 JSL ISETTIMEOUT +.3960b0 22 55 41 39 jsl $394155 JSL ISETTIMEOUT .3960b4 28 plp PLP .3960b5 2b pld PLD .3960b6 38 sec SEC @@ -11757,923 +11816,921 @@ .3960b9 2b pld PLD .3960ba 18 clc CLC .3960bb 60 rts RTS -.3960bc FDC_DELAY_10MS -.3960bc da phx PHX +.3960bc FDC_Can_Read_Data +.3960bc 0b phd PHD .3960bd 08 php PHP -.3960be c2 10 rep #$10 REP #$10 ; set X long -.3960c0 a2 80 3e ldx #$3e80 LDX #16000 ; Wait for around 10ms -.3960c3 ea nop loop NOP ; Each iteration should take 9 cycles -.3960c4 ca dex DEX -.3960c5 e0 00 00 cpx #$0000 CPX #0 -.3960c8 d0 f9 bne $3960c3 BNE loop -.3960ca 28 plp PLP -.3960cb fa plx PLX -.3960cc 6b rtl RTL -.3960cd FDC_COMMAND -.3960cd da phx PHX -.3960ce 8b phb PHB -.3960cf 0b phd PHD -.3960d0 08 php PHP -.3960d1 48 pha PHA ; begin setdbr macro -.3960d2 08 php PHP -.3960d3 e2 20 sep #$20 SEP #$20 ; set A short -.3960d5 a9 00 lda #$00 LDA #0 -.3960d7 48 pha PHA -.3960d8 ab plb PLB -.3960d9 28 plp PLP -.3960da 68 pla PLA ; end setdbr macro -.3960db 48 pha PHA ; begin setdp macro -.3960dc 08 php PHP -.3960dd c2 20 rep #$20 REP #$20 ; set A long -.3960df a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.3960e2 5b tcd TCD -.3960e3 28 plp PLP -.3960e4 68 pla PLA ; end setdp macro -.3960e5 22 bc 60 39 jsl $3960bc JSL FDC_DELAY_10MS ; Wait around 10ms -.3960e9 e2 30 sep #$30 SEP #$30 ; set A&X short -.3960eb a2 00 ldx #$00 LDX #0 -.3960ed a9 00 lda #$00 LDA #0 -.3960ef 9d 10 05 sta $0510,x clr_results STA FDC_RESULTS,X ; Clear the result buffer -.3960f2 e8 inx INX -.3960f3 e0 10 cpx #$10 CPX #16 -.3960f5 d0 f8 bne $3960ef BNE clr_results -.3960f7 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR ; Validate we can send a command -.3960fb 29 c0 and #$c0 AND #FDC_MSR_RQM | FDC_MSR_DIO -.3960fd c9 80 cmp #$80 CMP #FDC_MSR_RQM -.3960ff f0 04 beq $396105 BEQ start_send ; If so, start sending -.396101 22 1a 62 39 jsl $39621a fdc_reset JSL FDC_INIT ; Reset the FDC -.396105 start_send -.396105 e2 10 sep #$10 SEP #$10 ; set X short -.396107 a2 00 ldx #$00 LDX #0 -.396109 20 d2 5f jsr $395fd2 send_loop JSR FDC_Check_RQM ; Wait until we can write -.39610c b0 03 bcs $396111 BCS send_param -.39610e 82 5e 00 brl $39616f BRL time_out ; If there was a timeout, flag the time out -.396111 bd 00 05 lda $0500,x send_param LDA FDC_PARAMETERS,X ; Get the parameter/command byte to write -.396114 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA ; Send it -.396118 22 bc 60 39 jsl $3960bc JSL FDC_DELAY_10MS ; Wait around 10ms for things to settle -.39611c e8 inx INX ; Advance to the next byte -.39611d ec 30 05 cpx $0530 CPX FDC_PARAM_NUM -.396120 d0 e7 bne $396109 BNE send_loop ; Keep sending until we've sent them all -.396122 ad 33 05 lda $0533 LDA FDC_EXPECT_DAT ; Check the data expectation byte -.396125 d0 03 bne $39612a BNE chk_data_dir -.396127 82 80 00 brl $3961aa BRL result_phase ; If 0: we just want a result -.39612a 10 3c bpl $396168 chk_data_dir BPL rd_data ; If >0: we want to read data -.39612c wr_data -.39612c a5 0b lda $030b wr_data_rdy LDA FDC_STATUS ; Check that the motor is still spinning -.39612e 30 03 bmi $396133 BMI wr_chk_rqm -.396130 82 3c 00 brl $39616f BRL time_out ; If not, raise an error -.396133 af f4 13 af lda $af13f4 wr_chk_rqm LDA @l SIO_FDC_MSR ; Wait for ready to write -.396137 89 80 bit #$80 BIT #FDC_MSR_RQM -.396139 f0 f1 beq $39612c BEQ wr_data_rdy -.39613b 89 20 bit #$20 BIT #FDC_MSR_NONDMA ; Check if in execution mode -.39613d d0 03 bne $396142 BNE wr_data_phase ; If so: transfer the data -.39613f 82 68 00 brl $3961aa BRL result_phase ; If not: it's an error -.396142 wr_data_phase -.396142 c2 10 rep #$10 REP #$10 ; set X long -.396144 a0 00 00 ldy #$0000 LDY #0 -.396147 a5 0b lda $030b wr_data_loop LDA FDC_STATUS ; Check that the motor is still spinning -.396149 30 03 bmi $39614e BMI wr_chk_nondma -.39614b 82 21 00 brl $39616f BRL time_out ; If not, raise an error -.39614e af f4 13 af lda $af13f4 wr_chk_nondma LDA @l SIO_FDC_MSR ; Check to see if the FDC is in execution phase -.396152 89 20 bit #$20 BIT #FDC_MSR_NONDMA -.396154 f0 54 beq $3961aa BEQ result_phase ; If not: break out to result phase -.396156 89 80 bit #$80 BIT #FDC_MSR_RQM ; Check if we can read data -.396158 f0 ed beq $396147 BEQ wr_data_loop ; No: keep waiting -.39615a b7 26 lda [$0326],y LDA [BIOS_BUFF_PTR],Y ; Get the data byte -.39615c 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA ; And save it to the buffer -.396160 c8 iny INY ; Move to the next position -.396161 c0 00 02 cpy #$0200 CPY #512 ; TODO: set this from the parameters? -.396164 d0 e1 bne $396147 BNE wr_data_loop ; If not at the end, keep fetching -.396166 80 42 bra $3961aa BRA result_phase ; ready for the result phase -.396168 20 5c 60 jsr $39605c rd_data JSR FDC_Can_Read_Data -.39616b a5 0b lda $030b rd_data_rdy LDA FDC_STATUS ; Check that the motor is still spinning -.39616d 30 07 bmi $396176 BMI chk_rd_rdy ; If so, check to see if the data is ready -.39616f time_out -.39616f e2 20 sep #$20 SEP #$20 ; set A short -.396171 a9 8c lda #$8c LDA #BIOS_ERR_TIMEOUT ; Otherwise: throw a BIOS_ERR_TIMEOUT error -.396173 82 9c 00 brl $396212 BRL pass_error -.396176 af f4 13 af lda $af13f4 chk_rd_rdy LDA @l SIO_FDC_MSR ; Wait for data to be ready -.39617a 29 c0 and #$c0 AND #FDC_MSR_RQM | FDC_MSR_DIO -.39617c c9 c0 cmp #$c0 CMP #FDC_MSR_RQM | FDC_MSR_DIO -.39617e d0 eb bne $39616b BNE rd_data_rdy -.396180 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR ; Check to see if the FDC is in execution phase -.396184 89 20 bit #$20 BIT #FDC_MSR_NONDMA -.396186 d0 03 bne $39618b BNE rd_data_phase ; If so: transfer the data -.396188 82 83 00 brl $39620e BRL error ; If not: it's an error -.39618b rd_data_phase -.39618b c2 10 rep #$10 REP #$10 ; set X long -.39618d a0 00 00 ldy #$0000 LDY #0 -.396190 a5 0b lda $030b rd_data_loop LDA FDC_STATUS ; Check that the motor is still spinning -.396192 10 db bpl $39616f BPL time_out ; If not: throw a timeout error -.396194 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR ; Wait for the next byte to be ready -.396198 29 c0 and #$c0 AND #FDC_MSR_RQM | FDC_MSR_DIO -.39619a c9 c0 cmp #$c0 CMP #FDC_MSR_RQM | FDC_MSR_DIO -.39619c d0 f2 bne $396190 BNE rd_data_loop -.39619e af f5 13 af lda $af13f5 LDA @l SIO_FDC_DTA ; Get the data byte -.3961a2 97 26 sta [$0326],y STA [BIOS_BUFF_PTR],Y ; And save it to the buffer -.3961a4 c8 iny INY ; Move to the next position -.3961a5 c0 00 02 cpy #$0200 CPY #512 ; TODO: set this from the parameters? -.3961a8 d0 e6 bne $396190 BNE rd_data_loop ; If not at the end, keep fetching -.3961aa ad 32 05 lda $0532 result_phase LDA FDC_RESULT_NUM ; If no results are expected... -.3961ad f0 34 beq $3961e3 BEQ chk_busy ; Then we're done -.3961af e2 10 sep #$10 SEP #$10 ; set X short -.3961b1 a2 00 ldx #$00 LDX #0 -.3961b3 a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set the watchdog timer -.3961b5 22 03 41 39 jsl $394103 JSL ISETTIMEOUT -.3961b9 20 5c 60 jsr $39605c result_loop JSR FDC_Can_Read_Data ; Wait until we can read -.3961bc 90 b1 bcc $39616f BCC time_out ; If there was a time out, raise an error -.3961be af f5 13 af lda $af13f5 LDA @l SIO_FDC_DTA ; Yes: get the data -.3961c2 20 5c 60 jsr $39605c JSR FDC_Can_Read_Data ; Wait until we can read -.3961c5 90 a8 bcc $39616f BCC time_out ; If there was a time out, raise an error -.3961c7 af f5 13 af lda $af13f5 read_result LDA @l SIO_FDC_DTA ; Yes: get the data -.3961cb 9d 10 05 sta $0510,x STA FDC_RESULTS,X ; Save it to the result buffer -.3961ce 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM -.3961d1 90 9c bcc $39616f BCC time_out ; If there was a time out, flag the error -.3961d3 af f4 13 af lda $af13f4 rd_chk_1 LDA @l SIO_FDC_MSR -.3961d7 29 50 and #$50 AND #FDC_MSR_DIO | FDC_MSR_CMDBSY -.3961d9 c9 50 cmp #$50 CMP #FDC_MSR_DIO | FDC_MSR_CMDBSY -.3961db d0 06 bne $3961e3 BNE chk_busy -.3961dd e8 inx INX ; Move to the next result positions -.3961de ec 32 05 cpx $0532 CPX FDC_RESULT_NUM -.3961e1 d0 e4 bne $3961c7 BNE read_result ; And keep looping until we've read all -.3961e3 chk_busy -.3961e3 c2 10 rep #$10 REP #$10 ; set X long -.3961e5 a2 0a 00 ldx #$000a LDX #10 ; Wait 10ms (I guess?) -.3961e8 22 19 16 39 jsl $391619 JSL ILOOP_MS -.3961ec af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR ; Check the command busy bit -.3961f0 89 10 bit #$10 BIT #FDC_MSR_CMDBSY -.3961f2 f0 12 beq $396206 BEQ done ; If not set: we're done -.3961f4 20 5c 60 jsr $39605c JSR FDC_Can_Read_Data ; Wait until we can read -.3961f7 b0 03 bcs $3961fc BCS get_result_byte -.3961f9 82 73 ff brl $39616f BRL time_out ; If there was a time out, flag the error -.3961fc af f5 13 af lda $af13f5 get_result_byte LDA @l SIO_FDC_DTA ; Read the data -.396200 9d 10 05 sta $0510,x STA FDC_RESULTS,X -.396203 e8 inx INX -.396204 80 dd bra $3961e3 BRA chk_busy ; And keep checking -.396206 done -.396206 64 20 stz $0320 STZ BIOS_STATUS -.396208 28 plp PLP -.396209 2b pld PLD -.39620a ab plb PLB -.39620b fa plx PLX -.39620c 38 sec SEC -.39620d 6b rtl RTL -.39620e error -.39620e e2 20 sep #$20 SEP #$20 ; set A short -.396210 a9 85 lda #$85 LDA #BIOS_ERR_CMD -.396212 85 20 sta $0320 pass_error STA BIOS_STATUS -.396214 28 plp PLP -.396215 2b pld PLD -.396216 ab plb PLB -.396217 fa plx PLX -.396218 18 clc CLC -.396219 6b rtl RTL -.39621a FDC_Init -.39621a 08 php PHP -.39621b c2 10 rep #$10 REP #$10 ; set X long -.39621d e2 20 sep #$20 SEP #$20 ; set A short -.39621f a9 00 lda #$00 LDA #0 -.396221 8f f2 13 af sta $af13f2 STA @l SIO_FDC_DOR -.396225 a2 e8 03 ldx #$03e8 LDX #1000 ; Wait -.396228 a0 00 00 ldy #$0000 LDY #0 -.39622b 22 26 16 39 jsl $391626 JSL IDELAY -.39622f a9 04 lda #$04 LDA #FDC_DOR_NRESET ; Reset the FDC -.396231 8f f2 13 af sta $af13f2 STA @l SIO_FDC_DOR -.396235 ea nop NOP -.396236 ea nop NOP -.396237 ea nop NOP -.396238 ea nop NOP -.396239 a9 00 lda #$00 LDA #$00 ; Make sure the Speed and Compensation has been set -.39623b 8f f4 13 af sta $af13f4 STA @l SIO_FDC_DSR -.39623f a9 00 lda #$00 LDA #$00 ; Precompensation set to 0 -.396241 8f f7 13 af sta $af13f7 STA @l SIO_FDC_CCR -.396245 a2 8f c5 ldx #$c58f LDX #<>FDC_SEEK_TIME -.396248 a0 20 00 ldy #$0020 LDY #`FDC_SEEK_TIME -.39624b 22 26 16 39 jsl $391626 JSL IDELAY -.39624f 22 2a 63 39 jsl $39632a JSL FDC_Sense_Int_Status -.396253 90 25 bcc $39627a BCC pass_failure -.396255 22 2a 63 39 jsl $39632a JSL FDC_Sense_Int_Status -.396259 90 1f bcc $39627a BCC pass_failure -.39625b 22 2a 63 39 jsl $39632a JSL FDC_Sense_Int_Status -.39625f 90 19 bcc $39627a BCC pass_failure -.396261 22 2a 63 39 jsl $39632a JSL FDC_Sense_Int_Status -.396265 90 13 bcc $39627a BCC pass_failure -.396267 22 ec 63 39 jsl $3963ec JSL FDC_Configure_Command -.39626b 90 0d bcc $39627a BCC pass_failure -.39626d 22 93 63 39 jsl $396393 JSL FDC_Specify_Command -.396271 90 07 bcc $39627a BCC pass_failure -.396273 22 96 62 39 jsl $396296 JSL FDC_Motor_On -.396277 28 plp PLP -.396278 38 sec SEC +.3960be 48 pha PHA ; begin setdp macro +.3960bf 08 php PHP +.3960c0 c2 20 rep #$20 REP #$20 ; set A long +.3960c2 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.3960c5 5b tcd TCD +.3960c6 28 plp PLP +.3960c7 68 pla PLA ; end setdp macro +.3960c8 e2 20 sep #$20 SEP #$20 ; set A short +.3960ca a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop +.3960cc 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.3960d0 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out +.3960d2 30 14 bmi $3960e8 BMI time_out ; If so: signal a time out +.3960d4 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR +.3960d8 29 40 and #$40 AND #FDC_MSR_DIO +.3960da c9 40 cmp #$40 CMP #FDC_MSR_DIO +.3960dc d0 f2 bne $3960d0 BNE loop +.3960de a9 00 lda #$00 LDA #0 ; Clear the time out +.3960e0 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.3960e4 28 plp PLP +.3960e5 2b pld PLD +.3960e6 38 sec SEC +.3960e7 60 rts RTS +.3960e8 28 plp time_out PLP +.3960e9 2b pld PLD +.3960ea 18 clc CLC +.3960eb 60 rts RTS +.3960ec FDC_CAN_WRITE +.3960ec 0b phd PHD +.3960ed 08 php PHP +.3960ee 48 pha PHA ; begin setdp macro +.3960ef 08 php PHP +.3960f0 c2 20 rep #$20 REP #$20 ; set A long +.3960f2 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.3960f5 5b tcd TCD +.3960f6 28 plp PLP +.3960f7 68 pla PLA ; end setdp macro +.3960f8 e2 20 sep #$20 SEP #$20 ; set A short +.3960fa a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set a time out for the loop +.3960fc 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.396100 a5 2c lda $032c loop LDA @b BIOS_FLAGS ; Check if there was a time out +.396102 30 14 bmi $396118 BMI time_out ; If so: signal a time out +.396104 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR +.396108 29 c0 and #$c0 AND #FDC_MSR_RQM | FDC_MSR_DIO +.39610a c9 80 cmp #$80 CMP #FDC_MSR_RQM +.39610c d0 f2 bne $396100 BNE loop +.39610e a9 00 lda #$00 LDA #0 ; Clear the time out +.396110 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.396114 28 plp PLP +.396115 2b pld PLD +.396116 38 sec SEC +.396117 60 rts RTS +.396118 28 plp time_out PLP +.396119 2b pld PLD +.39611a 18 clc CLC +.39611b 60 rts RTS +.39611c FDC_DELAY_10MS +.39611c da phx PHX +.39611d 08 php PHP +.39611e c2 10 rep #$10 REP #$10 ; set X long +.396120 a2 80 3e ldx #$3e80 LDX #16000 ; Wait for around 10ms +.396123 ea nop loop NOP ; Each iteration should take 9 cycles +.396124 ca dex DEX +.396125 e0 00 00 cpx #$0000 CPX #0 +.396128 d0 f9 bne $396123 BNE loop +.39612a 28 plp PLP +.39612b fa plx PLX +.39612c 6b rtl RTL +.39612d FDC_COMMAND +.39612d da phx PHX +.39612e 8b phb PHB +.39612f 0b phd PHD +.396130 08 php PHP +.396131 48 pha PHA ; begin setdbr macro +.396132 08 php PHP +.396133 e2 20 sep #$20 SEP #$20 ; set A short +.396135 a9 00 lda #$00 LDA #0 +.396137 48 pha PHA +.396138 ab plb PLB +.396139 28 plp PLP +.39613a 68 pla PLA ; end setdbr macro +.39613b 48 pha PHA ; begin setdp macro +.39613c 08 php PHP +.39613d c2 20 rep #$20 REP #$20 ; set A long +.39613f a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396142 5b tcd TCD +.396143 28 plp PLP +.396144 68 pla PLA ; end setdp macro +.396145 22 1c 61 39 jsl $39611c JSL FDC_DELAY_10MS ; Wait around 10ms +.396149 e2 30 sep #$30 SEP #$30 ; set A&X short +.39614b a2 00 ldx #$00 LDX #0 +.39614d a9 00 lda #$00 LDA #0 +.39614f 9d 10 05 sta $0510,x clr_results STA FDC_RESULTS,X ; Clear the result buffer +.396152 e8 inx INX +.396153 e0 10 cpx #$10 CPX #16 +.396155 d0 f8 bne $39614f BNE clr_results +.396157 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR ; Validate we can send a command +.39615b 29 c0 and #$c0 AND #FDC_MSR_RQM | FDC_MSR_DIO +.39615d c9 80 cmp #$80 CMP #FDC_MSR_RQM +.39615f f0 04 beq $396165 BEQ start_send ; If so, start sending +.396161 22 7a 62 39 jsl $39627a fdc_reset JSL FDC_INIT ; Reset the FDC +.396165 start_send +.396165 e2 10 sep #$10 SEP #$10 ; set X short +.396167 a2 00 ldx #$00 LDX #0 +.396169 20 32 60 jsr $396032 send_loop JSR FDC_Check_RQM ; Wait until we can write +.39616c b0 03 bcs $396171 BCS send_param +.39616e 82 5e 00 brl $3961cf BRL time_out ; If there was a timeout, flag the time out +.396171 bd 00 05 lda $0500,x send_param LDA FDC_PARAMETERS,X ; Get the parameter/command byte to write +.396174 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA ; Send it +.396178 22 1c 61 39 jsl $39611c JSL FDC_DELAY_10MS ; Wait around 10ms for things to settle +.39617c e8 inx INX ; Advance to the next byte +.39617d ec 30 05 cpx $0530 CPX FDC_PARAM_NUM +.396180 d0 e7 bne $396169 BNE send_loop ; Keep sending until we've sent them all +.396182 ad 33 05 lda $0533 LDA FDC_EXPECT_DAT ; Check the data expectation byte +.396185 d0 03 bne $39618a BNE chk_data_dir +.396187 82 80 00 brl $39620a BRL result_phase ; If 0: we just want a result +.39618a 10 3c bpl $3961c8 chk_data_dir BPL rd_data ; If >0: we want to read data +.39618c wr_data +.39618c a5 0b lda $030b wr_data_rdy LDA FDC_STATUS ; Check that the motor is still spinning +.39618e 30 03 bmi $396193 BMI wr_chk_rqm +.396190 82 3c 00 brl $3961cf BRL time_out ; If not, raise an error +.396193 af f4 13 af lda $af13f4 wr_chk_rqm LDA @l SIO_FDC_MSR ; Wait for ready to write +.396197 89 80 bit #$80 BIT #FDC_MSR_RQM +.396199 f0 f1 beq $39618c BEQ wr_data_rdy +.39619b 89 20 bit #$20 BIT #FDC_MSR_NONDMA ; Check if in execution mode +.39619d d0 03 bne $3961a2 BNE wr_data_phase ; If so: transfer the data +.39619f 82 68 00 brl $39620a BRL result_phase ; If not: it's an error +.3961a2 wr_data_phase +.3961a2 c2 10 rep #$10 REP #$10 ; set X long +.3961a4 a0 00 00 ldy #$0000 LDY #0 +.3961a7 a5 0b lda $030b wr_data_loop LDA FDC_STATUS ; Check that the motor is still spinning +.3961a9 30 03 bmi $3961ae BMI wr_chk_nondma +.3961ab 82 21 00 brl $3961cf BRL time_out ; If not, raise an error +.3961ae af f4 13 af lda $af13f4 wr_chk_nondma LDA @l SIO_FDC_MSR ; Check to see if the FDC is in execution phase +.3961b2 89 20 bit #$20 BIT #FDC_MSR_NONDMA +.3961b4 f0 54 beq $39620a BEQ result_phase ; If not: break out to result phase +.3961b6 89 80 bit #$80 BIT #FDC_MSR_RQM ; Check if we can read data +.3961b8 f0 ed beq $3961a7 BEQ wr_data_loop ; No: keep waiting +.3961ba b7 26 lda [$0326],y LDA [BIOS_BUFF_PTR],Y ; Get the data byte +.3961bc 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA ; And save it to the buffer +.3961c0 c8 iny INY ; Move to the next position +.3961c1 c0 00 02 cpy #$0200 CPY #512 ; TODO: set this from the parameters? +.3961c4 d0 e1 bne $3961a7 BNE wr_data_loop ; If not at the end, keep fetching +.3961c6 80 42 bra $39620a BRA result_phase ; ready for the result phase +.3961c8 20 bc 60 jsr $3960bc rd_data JSR FDC_Can_Read_Data +.3961cb a5 0b lda $030b rd_data_rdy LDA FDC_STATUS ; Check that the motor is still spinning +.3961cd 30 07 bmi $3961d6 BMI chk_rd_rdy ; If so, check to see if the data is ready +.3961cf time_out +.3961cf e2 20 sep #$20 SEP #$20 ; set A short +.3961d1 a9 8c lda #$8c LDA #BIOS_ERR_TIMEOUT ; Otherwise: throw a BIOS_ERR_TIMEOUT error +.3961d3 82 9c 00 brl $396272 BRL pass_error +.3961d6 af f4 13 af lda $af13f4 chk_rd_rdy LDA @l SIO_FDC_MSR ; Wait for data to be ready +.3961da 29 c0 and #$c0 AND #FDC_MSR_RQM | FDC_MSR_DIO +.3961dc c9 c0 cmp #$c0 CMP #FDC_MSR_RQM | FDC_MSR_DIO +.3961de d0 eb bne $3961cb BNE rd_data_rdy +.3961e0 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR ; Check to see if the FDC is in execution phase +.3961e4 89 20 bit #$20 BIT #FDC_MSR_NONDMA +.3961e6 d0 03 bne $3961eb BNE rd_data_phase ; If so: transfer the data +.3961e8 82 83 00 brl $39626e BRL error ; If not: it's an error +.3961eb rd_data_phase +.3961eb c2 10 rep #$10 REP #$10 ; set X long +.3961ed a0 00 00 ldy #$0000 LDY #0 +.3961f0 a5 0b lda $030b rd_data_loop LDA FDC_STATUS ; Check that the motor is still spinning +.3961f2 10 db bpl $3961cf BPL time_out ; If not: throw a timeout error +.3961f4 af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR ; Wait for the next byte to be ready +.3961f8 29 c0 and #$c0 AND #FDC_MSR_RQM | FDC_MSR_DIO +.3961fa c9 c0 cmp #$c0 CMP #FDC_MSR_RQM | FDC_MSR_DIO +.3961fc d0 f2 bne $3961f0 BNE rd_data_loop +.3961fe af f5 13 af lda $af13f5 LDA @l SIO_FDC_DTA ; Get the data byte +.396202 97 26 sta [$0326],y STA [BIOS_BUFF_PTR],Y ; And save it to the buffer +.396204 c8 iny INY ; Move to the next position +.396205 c0 00 02 cpy #$0200 CPY #512 ; TODO: set this from the parameters? +.396208 d0 e6 bne $3961f0 BNE rd_data_loop ; If not at the end, keep fetching +.39620a ad 32 05 lda $0532 result_phase LDA FDC_RESULT_NUM ; If no results are expected... +.39620d f0 34 beq $396243 BEQ chk_busy ; Then we're done +.39620f e2 10 sep #$10 SEP #$10 ; set X short +.396211 a2 00 ldx #$00 LDX #0 +.396213 a9 1e lda #$1e LDA #FDC_WAIT_TIME ; Set the watchdog timer +.396215 22 55 41 39 jsl $394155 JSL ISETTIMEOUT +.396219 20 bc 60 jsr $3960bc result_loop JSR FDC_Can_Read_Data ; Wait until we can read +.39621c 90 b1 bcc $3961cf BCC time_out ; If there was a time out, raise an error +.39621e af f5 13 af lda $af13f5 LDA @l SIO_FDC_DTA ; Yes: get the data +.396222 20 bc 60 jsr $3960bc JSR FDC_Can_Read_Data ; Wait until we can read +.396225 90 a8 bcc $3961cf BCC time_out ; If there was a time out, raise an error +.396227 af f5 13 af lda $af13f5 read_result LDA @l SIO_FDC_DTA ; Yes: get the data +.39622b 9d 10 05 sta $0510,x STA FDC_RESULTS,X ; Save it to the result buffer +.39622e 20 32 60 jsr $396032 JSR FDC_Check_RQM +.396231 90 9c bcc $3961cf BCC time_out ; If there was a time out, flag the error +.396233 af f4 13 af lda $af13f4 rd_chk_1 LDA @l SIO_FDC_MSR +.396237 29 50 and #$50 AND #FDC_MSR_DIO | FDC_MSR_CMDBSY +.396239 c9 50 cmp #$50 CMP #FDC_MSR_DIO | FDC_MSR_CMDBSY +.39623b d0 06 bne $396243 BNE chk_busy +.39623d e8 inx INX ; Move to the next result positions +.39623e ec 32 05 cpx $0532 CPX FDC_RESULT_NUM +.396241 d0 e4 bne $396227 BNE read_result ; And keep looping until we've read all +.396243 chk_busy +.396243 c2 10 rep #$10 REP #$10 ; set X long +.396245 a2 0a 00 ldx #$000a LDX #10 ; Wait 10ms (I guess?) +.396248 22 6b 16 39 jsl $39166b JSL ILOOP_MS +.39624c af f4 13 af lda $af13f4 LDA @l SIO_FDC_MSR ; Check the command busy bit +.396250 89 10 bit #$10 BIT #FDC_MSR_CMDBSY +.396252 f0 12 beq $396266 BEQ done ; If not set: we're done +.396254 20 bc 60 jsr $3960bc JSR FDC_Can_Read_Data ; Wait until we can read +.396257 b0 03 bcs $39625c BCS get_result_byte +.396259 82 73 ff brl $3961cf BRL time_out ; If there was a time out, flag the error +.39625c af f5 13 af lda $af13f5 get_result_byte LDA @l SIO_FDC_DTA ; Read the data +.396260 9d 10 05 sta $0510,x STA FDC_RESULTS,X +.396263 e8 inx INX +.396264 80 dd bra $396243 BRA chk_busy ; And keep checking +.396266 done +.396266 64 20 stz $0320 STZ BIOS_STATUS +.396268 28 plp PLP +.396269 2b pld PLD +.39626a ab plb PLB +.39626b fa plx PLX +.39626c 38 sec SEC +.39626d 6b rtl RTL +.39626e error +.39626e e2 20 sep #$20 SEP #$20 ; set A short +.396270 a9 85 lda #$85 LDA #BIOS_ERR_CMD +.396272 85 20 sta $0320 pass_error STA BIOS_STATUS +.396274 28 plp PLP +.396275 2b pld PLD +.396276 ab plb PLB +.396277 fa plx PLX +.396278 18 clc CLC .396279 6b rtl RTL -.39627a 28 plp pass_failure PLP -.39627b 18 clc CLC -.39627c 6b rtl RTL -.39627d FDC_MOTOR_NEEDED -.39627d 08 php PHP -.39627e c2 20 rep #$20 REP #$20 ; set A long -.396280 78 sei SEI ; Turn off interrupts -.396281 a9 84 03 lda #$0384 LDA #FDC_MOTOR_ON_TIME ; Reset the FDC timeout clock -.396284 8f 4e a0 38 sta $38a04e STA @l FDC_MOTOR_TIMER -.396288 e2 20 sep #$20 SEP #$20 ; set A short -.39628a af 4c 01 00 lda $00014c LDA @l INT_MASK_REG0 -.39628e 29 fe and #$fe AND #~FNX0_INT00_SOF ; Enable the SOF interrupt -.396290 8f 4c 01 00 sta $00014c STA @l INT_MASK_REG0 -.396294 28 plp PLP -.396295 6b rtl RTL -.396296 FDC_Motor_On -.396296 08 php PHP -.396297 22 7d 62 39 jsl $39627d JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock -.39629b e2 20 sep #$20 SEP #$20 ; set A short -.39629d af f2 13 af lda $af13f2 LDA @l SIO_FDC_DOR ; Check to see if the motor is already on -.3962a1 89 10 bit #$10 BIT #FDC_DOR_MOT0 -.3962a3 d0 1f bne $3962c4 BNE done ; If so: skip -.3962a5 a9 14 lda #$14 LDA #FDC_DOR_MOT0 | FDC_DOR_NRESET -.3962a7 8f f2 13 af sta $af13f2 STA @l SIO_FDC_DOR -.3962ab 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Make sure we can leave knowing that everything set properly -.3962ae 90 17 bcc $3962c7 BCC time_out -.3962b0 a2 1e 8b ldx #$8b1e LDX #<>FDC_MOTOR_TIME ; Wait a suitable time for the motor to spin up -.3962b3 a0 41 00 ldy #$0041 LDY #`FDC_MOTOR_TIME -.3962b6 22 26 16 39 jsl $391626 JSL IDELAY -.3962ba af 0b 03 00 lda $00030b LDA @l FDC_STATUS -.3962be 09 80 ora #$80 ORA #$80 ; Flag that the motor should be on -.3962c0 8f 0b 03 00 sta $00030b STA @l FDC_STATUS -.3962c4 28 plp done PLP -.3962c5 38 sec SEC -.3962c6 6b rtl RTL -.3962c7 28 plp time_out PLP ; Return a timeout error -.3962c8 18 clc CLC -.3962c9 6b rtl RTL -.3962ca FDC_Motor_Off -.3962ca 08 php PHP -.3962cb e2 20 sep #$20 SEP #$20 ; set A short -.3962cd a9 04 lda #$04 LDA #FDC_DOR_NRESET -.3962cf 8f f2 13 af sta $af13f2 STA @L SIO_FDC_DOR -.3962d3 c2 20 rep #$20 REP #$20 ; set A long -.3962d5 78 sei SEI ; Turn off interrupts -.3962d6 a9 00 00 lda #$0000 LDA #0 ; Set FDC motor timeout counter to 0 to disable it -.3962d9 8f 4e a0 38 sta $38a04e STA @l FDC_MOTOR_TIMER -.3962dd e2 20 sep #$20 SEP #$20 ; set A short -.3962df af 4c 01 00 lda $00014c LDA @l INT_MASK_REG0 -.3962e3 09 01 ora #$01 ORA #FNX0_INT00_SOF ; Disable the SOF interrupt -.3962e5 8f 4c 01 00 sta $00014c STA @l INT_MASK_REG0 -.3962e9 af 0b 03 00 lda $00030b LDA @l FDC_STATUS -.3962ed 29 7f and #$7f AND #$7F ; Flag that the motor should be off -.3962ef 8f 0b 03 00 sta $00030b STA @l FDC_STATUS -.3962f3 28 plp PLP -.3962f4 6b rtl RTL -.3962f5 FDC_Recalibrate_Command -.3962f5 0b phd PHD +.39627a FDC_Init +.39627a 08 php PHP +.39627b c2 10 rep #$10 REP #$10 ; set X long +.39627d e2 20 sep #$20 SEP #$20 ; set A short +.39627f a9 00 lda #$00 LDA #0 +.396281 8f f2 13 af sta $af13f2 STA @l SIO_FDC_DOR +.396285 a2 e8 03 ldx #$03e8 LDX #1000 ; Wait +.396288 a0 00 00 ldy #$0000 LDY #0 +.39628b 22 78 16 39 jsl $391678 JSL IDELAY +.39628f a9 04 lda #$04 LDA #FDC_DOR_NRESET ; Reset the FDC +.396291 8f f2 13 af sta $af13f2 STA @l SIO_FDC_DOR +.396295 ea nop NOP +.396296 ea nop NOP +.396297 ea nop NOP +.396298 ea nop NOP +.396299 a9 00 lda #$00 LDA #$00 ; Make sure the Speed and Compensation has been set +.39629b 8f f4 13 af sta $af13f4 STA @l SIO_FDC_DSR +.39629f a9 00 lda #$00 LDA #$00 ; Precompensation set to 0 +.3962a1 8f f7 13 af sta $af13f7 STA @l SIO_FDC_CCR +.3962a5 a2 8f c5 ldx #$c58f LDX #<>FDC_SEEK_TIME +.3962a8 a0 20 00 ldy #$0020 LDY #`FDC_SEEK_TIME +.3962ab 22 78 16 39 jsl $391678 JSL IDELAY +.3962af 22 8a 63 39 jsl $39638a JSL FDC_Sense_Int_Status +.3962b3 90 25 bcc $3962da BCC pass_failure +.3962b5 22 8a 63 39 jsl $39638a JSL FDC_Sense_Int_Status +.3962b9 90 1f bcc $3962da BCC pass_failure +.3962bb 22 8a 63 39 jsl $39638a JSL FDC_Sense_Int_Status +.3962bf 90 19 bcc $3962da BCC pass_failure +.3962c1 22 8a 63 39 jsl $39638a JSL FDC_Sense_Int_Status +.3962c5 90 13 bcc $3962da BCC pass_failure +.3962c7 22 4c 64 39 jsl $39644c JSL FDC_Configure_Command +.3962cb 90 0d bcc $3962da BCC pass_failure +.3962cd 22 f3 63 39 jsl $3963f3 JSL FDC_Specify_Command +.3962d1 90 07 bcc $3962da BCC pass_failure +.3962d3 22 f6 62 39 jsl $3962f6 JSL FDC_Motor_On +.3962d7 28 plp PLP +.3962d8 38 sec SEC +.3962d9 6b rtl RTL +.3962da 28 plp pass_failure PLP +.3962db 18 clc CLC +.3962dc 6b rtl RTL +.3962dd FDC_MOTOR_NEEDED +.3962dd 08 php PHP +.3962de c2 20 rep #$20 REP #$20 ; set A long +.3962e0 78 sei SEI ; Turn off interrupts +.3962e1 a9 84 03 lda #$0384 LDA #FDC_MOTOR_ON_TIME ; Reset the FDC timeout clock +.3962e4 8f 4e a0 38 sta $38a04e STA @l FDC_MOTOR_TIMER +.3962e8 e2 20 sep #$20 SEP #$20 ; set A short +.3962ea af 4c 01 00 lda $00014c LDA @l INT_MASK_REG0 +.3962ee 29 fe and #$fe AND #~FNX0_INT00_SOF ; Enable the SOF interrupt +.3962f0 8f 4c 01 00 sta $00014c STA @l INT_MASK_REG0 +.3962f4 28 plp PLP +.3962f5 6b rtl RTL +.3962f6 FDC_Motor_On .3962f6 08 php PHP -.3962f7 48 pha PHA ; begin setdp macro -.3962f8 08 php PHP -.3962f9 c2 20 rep #$20 REP #$20 ; set A long -.3962fb a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.3962fe 5b tcd TCD -.3962ff 28 plp PLP -.396300 68 pla PLA ; end setdp macro -.396301 22 7d 62 39 jsl $39627d JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock -.396305 e2 20 sep #$20 SEP #$20 ; set A short -.396307 a9 07 lda #$07 LDA #FDC_CMD_RECALIBRATE ; RECALIBRATE Command -.396309 8d 00 05 sta $0500 STA FDC_PARAMETERS -.39630c a5 00 lda $0300 LDA FDC_DRIVE -.39630e 8d 01 05 sta $0501 STA FDC_PARAMETERS+1 -.396311 a9 02 lda #$02 LDA #2 -.396313 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 2 parameters -.396316 9c 33 05 stz $0533 STZ FDC_EXPECT_DAT ; 0 data -.396319 9c 32 05 stz $0532 STZ FDC_RESULT_NUM ; 0 results -.39631c 22 cd 60 39 jsl $3960cd JSL FDC_COMMAND ; Issue the command -.396320 90 04 bcc $396326 BCC pass_failure ; If failure, pass the failure up -.396322 28 plp PLP -.396323 2b pld PLD -.396324 38 sec SEC -.396325 6b rtl RTL -.396326 28 plp pass_failure PLP -.396327 2b pld PLD +.3962f7 22 dd 62 39 jsl $3962dd JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock +.3962fb e2 20 sep #$20 SEP #$20 ; set A short +.3962fd af f2 13 af lda $af13f2 LDA @l SIO_FDC_DOR ; Check to see if the motor is already on +.396301 89 10 bit #$10 BIT #FDC_DOR_MOT0 +.396303 d0 1f bne $396324 BNE done ; If so: skip +.396305 a9 14 lda #$14 LDA #FDC_DOR_MOT0 | FDC_DOR_NRESET +.396307 8f f2 13 af sta $af13f2 STA @l SIO_FDC_DOR +.39630b 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Make sure we can leave knowing that everything set properly +.39630e 90 17 bcc $396327 BCC time_out +.396310 a2 1e 8b ldx #$8b1e LDX #<>FDC_MOTOR_TIME ; Wait a suitable time for the motor to spin up +.396313 a0 41 00 ldy #$0041 LDY #`FDC_MOTOR_TIME +.396316 22 78 16 39 jsl $391678 JSL IDELAY +.39631a af 0b 03 00 lda $00030b LDA @l FDC_STATUS +.39631e 09 80 ora #$80 ORA #$80 ; Flag that the motor should be on +.396320 8f 0b 03 00 sta $00030b STA @l FDC_STATUS +.396324 28 plp done PLP +.396325 38 sec SEC +.396326 6b rtl RTL +.396327 28 plp time_out PLP ; Return a timeout error .396328 18 clc CLC .396329 6b rtl RTL -.39632a FDC_Sense_Int_Status -.39632a 8b phb PHB -.39632b 0b phd PHD -.39632c 08 php PHP -.39632d 48 pha PHA ; begin setdbr macro -.39632e 08 php PHP -.39632f e2 20 sep #$20 SEP #$20 ; set A short -.396331 a9 00 lda #$00 LDA #0 -.396333 48 pha PHA -.396334 ab plb PLB -.396335 28 plp PLP -.396336 68 pla PLA ; end setdbr macro -.396337 48 pha PHA ; begin setdp macro -.396338 08 php PHP -.396339 c2 20 rep #$20 REP #$20 ; set A long -.39633b a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.39633e 5b tcd TCD -.39633f 28 plp PLP -.396340 68 pla PLA ; end setdp macro -.396341 c2 30 rep #$30 REP #$30 ; set A&X long -.396343 a2 0a 00 ldx #$000a LDX #10 ; Wait for 10ms -.396346 22 19 16 39 jsl $391619 JSL ILOOP_MS -.39634a e2 20 sep #$20 SEP #$20 ; set A short -.39634c 64 06 stz $0306 STZ FDC_ST0 ; Clear ST0 -.39634e a9 ff lda #$ff LDA #$FF -.396350 85 0a sta $030a STA FDC_PCN ; Set PCN to some obviously bad value -.396352 20 2e 60 jsr $39602e JSR FDC_Check_CMD_BSY ; Check I can send a command -.396355 90 30 bcc $396387 BCC time_out ; If there was a time out, raise an error -.396357 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.39635a 90 2b bcc $396387 BCC time_out ; If there was a time out, raise an error -.39635c a9 08 lda #$08 LDA #FDC_CMD_SENSE_INTERRUPT -.39635e 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA -.396362 20 5c 60 jsr $39605c JSR FDC_Can_Read_Data -.396365 90 20 bcc $396387 BCC time_out ; If there was a time out, raise an error -.396367 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.39636a 90 1b bcc $396387 BCC time_out ; If there was a time out, raise an error -.39636c af f5 13 af lda $af13f5 LDA @l SIO_FDC_DTA -.396370 85 06 sta $0306 STA FDC_ST0 ; --- ST0 --- -.396372 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.396375 90 10 bcc $396387 BCC time_out ; If there was a time out, raise an error -.396377 af f5 13 af lda $af13f5 LDA @l SIO_FDC_DTA -.39637b 85 0a sta $030a STA FDC_PCN ; --- Cylinder --- -.39637d e2 20 sep #$20 SEP #$20 ; set A short -.39637f 9c 20 03 stz $0320 STZ @w BIOS_STATUS +.39632a FDC_Motor_Off +.39632a 08 php PHP +.39632b e2 20 sep #$20 SEP #$20 ; set A short +.39632d a9 04 lda #$04 LDA #FDC_DOR_NRESET +.39632f 8f f2 13 af sta $af13f2 STA @L SIO_FDC_DOR +.396333 c2 20 rep #$20 REP #$20 ; set A long +.396335 78 sei SEI ; Turn off interrupts +.396336 a9 00 00 lda #$0000 LDA #0 ; Set FDC motor timeout counter to 0 to disable it +.396339 8f 4e a0 38 sta $38a04e STA @l FDC_MOTOR_TIMER +.39633d e2 20 sep #$20 SEP #$20 ; set A short +.39633f af 4c 01 00 lda $00014c LDA @l INT_MASK_REG0 +.396343 09 01 ora #$01 ORA #FNX0_INT00_SOF ; Disable the SOF interrupt +.396345 8f 4c 01 00 sta $00014c STA @l INT_MASK_REG0 +.396349 af 0b 03 00 lda $00030b LDA @l FDC_STATUS +.39634d 29 7f and #$7f AND #$7F ; Flag that the motor should be off +.39634f 8f 0b 03 00 sta $00030b STA @l FDC_STATUS +.396353 28 plp PLP +.396354 6b rtl RTL +.396355 FDC_Recalibrate_Command +.396355 0b phd PHD +.396356 08 php PHP +.396357 48 pha PHA ; begin setdp macro +.396358 08 php PHP +.396359 c2 20 rep #$20 REP #$20 ; set A long +.39635b a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.39635e 5b tcd TCD +.39635f 28 plp PLP +.396360 68 pla PLA ; end setdp macro +.396361 22 dd 62 39 jsl $3962dd JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock +.396365 e2 20 sep #$20 SEP #$20 ; set A short +.396367 a9 07 lda #$07 LDA #FDC_CMD_RECALIBRATE ; RECALIBRATE Command +.396369 8d 00 05 sta $0500 STA FDC_PARAMETERS +.39636c a5 00 lda $0300 LDA FDC_DRIVE +.39636e 8d 01 05 sta $0501 STA FDC_PARAMETERS+1 +.396371 a9 02 lda #$02 LDA #2 +.396373 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 2 parameters +.396376 9c 33 05 stz $0533 STZ FDC_EXPECT_DAT ; 0 data +.396379 9c 32 05 stz $0532 STZ FDC_RESULT_NUM ; 0 results +.39637c 22 2d 61 39 jsl $39612d JSL FDC_COMMAND ; Issue the command +.396380 90 04 bcc $396386 BCC pass_failure ; If failure, pass the failure up .396382 28 plp PLP .396383 2b pld PLD -.396384 ab plb PLB -.396385 38 sec SEC -.396386 6b rtl RTL -.396387 time_out -.396387 e2 20 sep #$20 SEP #$20 ; set A short -.396389 a9 8c lda #$8c LDA #BIOS_ERR_TIMEOUT ; Return a time out error -.39638b 8d 20 03 sta $0320 STA @w BIOS_STATUS -.39638e 28 plp PLP -.39638f 2b pld PLD -.396390 ab plb PLB -.396391 18 clc CLC -.396392 6b rtl RTL -.396393 FDC_Specify_Command -.396393 8b phb PHB -.396394 0b phd PHD -.396395 08 php PHP -.396396 48 pha PHA ; begin setdbr macro -.396397 08 php PHP -.396398 e2 20 sep #$20 SEP #$20 ; set A short -.39639a a9 00 lda #$00 LDA #0 -.39639c 48 pha PHA -.39639d ab plb PLB -.39639e 28 plp PLP -.39639f 68 pla PLA ; end setdbr macro -.3963a0 48 pha PHA ; begin setdp macro -.3963a1 08 php PHP -.3963a2 c2 20 rep #$20 REP #$20 ; set A long -.3963a4 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.3963a7 5b tcd TCD -.3963a8 28 plp PLP -.3963a9 68 pla PLA ; end setdp macro -.3963aa c2 30 rep #$30 REP #$30 ; set A&X long -.3963ac a2 0a 00 ldx #$000a LDX #10 ; Wait for 10ms -.3963af 22 19 16 39 jsl $391619 JSL ILOOP_MS -.3963b3 e2 20 sep #$20 SEP #$20 ; set A short -.3963b5 20 2e 60 jsr $39602e JSR FDC_Check_CMD_BSY ; Check I can send a command -.3963b8 90 26 bcc $3963e0 BCC time_out ; If there was a time out, raise an error -.3963ba 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.3963bd 90 21 bcc $3963e0 BCC time_out ; If there was a time out, raise an error -.3963bf a9 03 lda #$03 LDA #FDC_CMD_SPECIFY ; Specify Command -.3963c1 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA -.3963c5 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.3963c8 90 16 bcc $3963e0 BCC time_out ; If there was a time out, raise an error -.3963ca a9 cf lda #$cf LDA #$CF -.3963cc 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA -.3963d0 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.3963d3 90 0b bcc $3963e0 BCC time_out ; If there was a time out, raise an error -.3963d5 a9 01 lda #$01 LDA #$01 ; 1 = Non-DMA -.3963d7 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA -.3963db 28 plp PLP -.3963dc 2b pld PLD -.3963dd ab plb PLB -.3963de 38 sec SEC -.3963df 6b rtl RTL -.3963e0 time_out -.3963e0 e2 20 sep #$20 SEP #$20 ; set A short -.3963e2 a9 8c lda #$8c LDA #BIOS_ERR_TIMEOUT ; Return a time out error -.3963e4 8d 20 03 sta $0320 STA @w BIOS_STATUS -.3963e7 28 plp PLP -.3963e8 2b pld PLD -.3963e9 ab plb PLB -.3963ea 18 clc CLC -.3963eb 6b rtl RTL -.3963ec FDC_Configure_Command -.3963ec 8b phb PHB -.3963ed 0b phd PHD -.3963ee 08 php PHP -.3963ef 48 pha PHA ; begin setdbr macro -.3963f0 08 php PHP -.3963f1 e2 20 sep #$20 SEP #$20 ; set A short -.3963f3 a9 00 lda #$00 LDA #0 -.3963f5 48 pha PHA -.3963f6 ab plb PLB -.3963f7 28 plp PLP -.3963f8 68 pla PLA ; end setdbr macro -.3963f9 48 pha PHA ; begin setdp macro -.3963fa 08 php PHP -.3963fb c2 20 rep #$20 REP #$20 ; set A long -.3963fd a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396400 5b tcd TCD -.396401 28 plp PLP -.396402 68 pla PLA ; end setdp macro -.396403 c2 30 rep #$30 REP #$30 ; set A&X long -.396405 a2 0a 00 ldx #$000a LDX #10 ; Wait for 10ms -.396408 22 19 16 39 jsl $391619 JSL ILOOP_MS -.39640c e2 20 sep #$20 SEP #$20 ; set A short -.39640e 20 2e 60 jsr $39602e JSR FDC_Check_CMD_BSY ; Check I can send a command -.396411 90 36 bcc $396449 BCC time_out ; If there was a time out, raise an error -.396413 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.396416 90 31 bcc $396449 BCC time_out ; If there was a time out, raise an error -.396418 a9 13 lda #$13 LDA #FDC_CMD_CONFIGURE ; Specify Command -.39641a 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA -.39641e 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.396421 90 26 bcc $396449 BCC time_out ; If there was a time out, raise an error -.396423 a9 00 lda #$00 LDA #$00 -.396425 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA -.396429 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.39642c 90 1b bcc $396449 BCC time_out ; If there was a time out, raise an error -.39642e a9 44 lda #$44 LDA #$44 ; Implied Seek, FIFOTHR = 4 byte -.396430 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA -.396434 20 d2 5f jsr $395fd2 JSR FDC_Check_RQM ; Check if I can transfer data -.396437 90 10 bcc $396449 BCC time_out ; If there was a time out, raise an error -.396439 a9 00 lda #$00 LDA #$00 -.39643b 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA -.39643f 20 2e 60 jsr $39602e JSR FDC_Check_CMD_BSY ; Check I can send a command -.396442 90 05 bcc $396449 BCC time_out ; If there was a time out, raise an error -.396444 28 plp PLP -.396445 2b pld PLD -.396446 ab plb PLB -.396447 38 sec SEC -.396448 6b rtl RTL -.396449 time_out -.396449 e2 20 sep #$20 SEP #$20 ; set A short -.39644b a9 8c lda #$8c LDA #BIOS_ERR_TIMEOUT ; Return a time out error -.39644d 8d 20 03 sta $0320 STA @w BIOS_STATUS -.396450 28 plp PLP -.396451 2b pld PLD -.396452 ab plb PLB -.396453 18 clc CLC -.396454 6b rtl RTL -.396455 FDC_Read_ID_Command -.396455 8b phb PHB -.396456 0b phd PHD -.396457 08 php PHP -.396458 48 pha PHA ; begin setdbr macro -.396459 08 php PHP -.39645a e2 20 sep #$20 SEP #$20 ; set A short -.39645c a9 00 lda #$00 LDA #0 -.39645e 48 pha PHA -.39645f ab plb PLB -.396460 28 plp PLP -.396461 68 pla PLA ; end setdbr macro -.396462 48 pha PHA ; begin setdp macro -.396463 08 php PHP -.396464 c2 20 rep #$20 REP #$20 ; set A long -.396466 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396469 5b tcd TCD -.39646a 28 plp PLP -.39646b 68 pla PLA ; end setdp macro +.396384 38 sec SEC +.396385 6b rtl RTL +.396386 28 plp pass_failure PLP +.396387 2b pld PLD +.396388 18 clc CLC +.396389 6b rtl RTL +.39638a FDC_Sense_Int_Status +.39638a 8b phb PHB +.39638b 0b phd PHD +.39638c 08 php PHP +.39638d 48 pha PHA ; begin setdbr macro +.39638e 08 php PHP +.39638f e2 20 sep #$20 SEP #$20 ; set A short +.396391 a9 00 lda #$00 LDA #0 +.396393 48 pha PHA +.396394 ab plb PLB +.396395 28 plp PLP +.396396 68 pla PLA ; end setdbr macro +.396397 48 pha PHA ; begin setdp macro +.396398 08 php PHP +.396399 c2 20 rep #$20 REP #$20 ; set A long +.39639b a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.39639e 5b tcd TCD +.39639f 28 plp PLP +.3963a0 68 pla PLA ; end setdp macro +.3963a1 c2 30 rep #$30 REP #$30 ; set A&X long +.3963a3 a2 0a 00 ldx #$000a LDX #10 ; Wait for 10ms +.3963a6 22 6b 16 39 jsl $39166b JSL ILOOP_MS +.3963aa e2 20 sep #$20 SEP #$20 ; set A short +.3963ac 64 06 stz $0306 STZ FDC_ST0 ; Clear ST0 +.3963ae a9 ff lda #$ff LDA #$FF +.3963b0 85 0a sta $030a STA FDC_PCN ; Set PCN to some obviously bad value +.3963b2 20 8e 60 jsr $39608e JSR FDC_Check_CMD_BSY ; Check I can send a command +.3963b5 90 30 bcc $3963e7 BCC time_out ; If there was a time out, raise an error +.3963b7 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.3963ba 90 2b bcc $3963e7 BCC time_out ; If there was a time out, raise an error +.3963bc a9 08 lda #$08 LDA #FDC_CMD_SENSE_INTERRUPT +.3963be 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA +.3963c2 20 bc 60 jsr $3960bc JSR FDC_Can_Read_Data +.3963c5 90 20 bcc $3963e7 BCC time_out ; If there was a time out, raise an error +.3963c7 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.3963ca 90 1b bcc $3963e7 BCC time_out ; If there was a time out, raise an error +.3963cc af f5 13 af lda $af13f5 LDA @l SIO_FDC_DTA +.3963d0 85 06 sta $0306 STA FDC_ST0 ; --- ST0 --- +.3963d2 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.3963d5 90 10 bcc $3963e7 BCC time_out ; If there was a time out, raise an error +.3963d7 af f5 13 af lda $af13f5 LDA @l SIO_FDC_DTA +.3963db 85 0a sta $030a STA FDC_PCN ; --- Cylinder --- +.3963dd e2 20 sep #$20 SEP #$20 ; set A short +.3963df 9c 20 03 stz $0320 STZ @w BIOS_STATUS +.3963e2 28 plp PLP +.3963e3 2b pld PLD +.3963e4 ab plb PLB +.3963e5 38 sec SEC +.3963e6 6b rtl RTL +.3963e7 time_out +.3963e7 e2 20 sep #$20 SEP #$20 ; set A short +.3963e9 a9 8c lda #$8c LDA #BIOS_ERR_TIMEOUT ; Return a time out error +.3963eb 8d 20 03 sta $0320 STA @w BIOS_STATUS +.3963ee 28 plp PLP +.3963ef 2b pld PLD +.3963f0 ab plb PLB +.3963f1 18 clc CLC +.3963f2 6b rtl RTL +.3963f3 FDC_Specify_Command +.3963f3 8b phb PHB +.3963f4 0b phd PHD +.3963f5 08 php PHP +.3963f6 48 pha PHA ; begin setdbr macro +.3963f7 08 php PHP +.3963f8 e2 20 sep #$20 SEP #$20 ; set A short +.3963fa a9 00 lda #$00 LDA #0 +.3963fc 48 pha PHA +.3963fd ab plb PLB +.3963fe 28 plp PLP +.3963ff 68 pla PLA ; end setdbr macro +.396400 48 pha PHA ; begin setdp macro +.396401 08 php PHP +.396402 c2 20 rep #$20 REP #$20 ; set A long +.396404 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396407 5b tcd TCD +.396408 28 plp PLP +.396409 68 pla PLA ; end setdp macro +.39640a c2 30 rep #$30 REP #$30 ; set A&X long +.39640c a2 0a 00 ldx #$000a LDX #10 ; Wait for 10ms +.39640f 22 6b 16 39 jsl $39166b JSL ILOOP_MS +.396413 e2 20 sep #$20 SEP #$20 ; set A short +.396415 20 8e 60 jsr $39608e JSR FDC_Check_CMD_BSY ; Check I can send a command +.396418 90 26 bcc $396440 BCC time_out ; If there was a time out, raise an error +.39641a 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.39641d 90 21 bcc $396440 BCC time_out ; If there was a time out, raise an error +.39641f a9 03 lda #$03 LDA #FDC_CMD_SPECIFY ; Specify Command +.396421 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA +.396425 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.396428 90 16 bcc $396440 BCC time_out ; If there was a time out, raise an error +.39642a a9 cf lda #$cf LDA #$CF +.39642c 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA +.396430 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.396433 90 0b bcc $396440 BCC time_out ; If there was a time out, raise an error +.396435 a9 01 lda #$01 LDA #$01 ; 1 = Non-DMA +.396437 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA +.39643b 28 plp PLP +.39643c 2b pld PLD +.39643d ab plb PLB +.39643e 38 sec SEC +.39643f 6b rtl RTL +.396440 time_out +.396440 e2 20 sep #$20 SEP #$20 ; set A short +.396442 a9 8c lda #$8c LDA #BIOS_ERR_TIMEOUT ; Return a time out error +.396444 8d 20 03 sta $0320 STA @w BIOS_STATUS +.396447 28 plp PLP +.396448 2b pld PLD +.396449 ab plb PLB +.39644a 18 clc CLC +.39644b 6b rtl RTL +.39644c FDC_Configure_Command +.39644c 8b phb PHB +.39644d 0b phd PHD +.39644e 08 php PHP +.39644f 48 pha PHA ; begin setdbr macro +.396450 08 php PHP +.396451 e2 20 sep #$20 SEP #$20 ; set A short +.396453 a9 00 lda #$00 LDA #0 +.396455 48 pha PHA +.396456 ab plb PLB +.396457 28 plp PLP +.396458 68 pla PLA ; end setdbr macro +.396459 48 pha PHA ; begin setdp macro +.39645a 08 php PHP +.39645b c2 20 rep #$20 REP #$20 ; set A long +.39645d a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396460 5b tcd TCD +.396461 28 plp PLP +.396462 68 pla PLA ; end setdp macro +.396463 c2 30 rep #$30 REP #$30 ; set A&X long +.396465 a2 0a 00 ldx #$000a LDX #10 ; Wait for 10ms +.396468 22 6b 16 39 jsl $39166b JSL ILOOP_MS .39646c e2 20 sep #$20 SEP #$20 ; set A short -.39646e a9 0a lda #$0a LDA #FDC_CMD_READ_ID ; READID Command -.396470 8d 00 05 sta $0500 STA FDC_PARAMETERS -.396473 a9 01 lda #$01 LDA #1 -.396475 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 4 parameter (the command) -.396478 9c 33 05 stz $0533 STZ FDC_EXPECT_DAT ; 0 data -.39647b a9 07 lda #$07 LDA #7 -.39647d 8d 32 05 sta $0532 STA FDC_RESULT_NUM ; 7 results -.396480 22 cd 60 39 jsl $3960cd JSL FDC_COMMAND ; Issue the command -.396484 90 27 bcc $3964ad BCC pass_failure -.396486 ad 10 05 lda $0510 LDA FDC_RESULTS -.396489 85 06 sta $0306 STA FDC_ST0 ; Get ST0 -.39648b ad 11 05 lda $0511 LDA FDC_RESULTS+1 -.39648e 85 07 sta $0307 STA FDC_ST1 ; Get ST1 -.396490 ad 12 05 lda $0512 LDA FDC_RESULTS+2 -.396493 85 08 sta $0308 STA FDC_ST2 ; Get ST2 -.396495 ad 13 05 lda $0513 LDA FDC_RESULTS+3 -.396498 85 02 sta $0302 STA FDC_CYLINDER ; Get the cylinder -.39649a ad 14 05 lda $0514 LDA FDC_RESULTS+4 -.39649d 85 01 sta $0301 STA FDC_HEAD ; Get the head -.39649f ad 15 05 lda $0515 LDA FDC_RESULTS+5 -.3964a2 85 0a sta $030a STA FDC_PCN ; Get the sector -.3964a4 ad 16 05 lda $0516 LDA FDC_RESULTS+6 -.3964a7 85 04 sta $0304 STA FDC_SECTOR_SIZE ; Get the sector size code -.3964a9 28 plp PLP -.3964aa 2b pld PLD -.3964ab ab plb PLB -.3964ac 6b rtl RTL -.3964ad 28 plp pass_failure PLP -.3964ae 2b pld PLD -.3964af ab plb PLB -.3964b0 18 clc CLC -.3964b1 6b rtl RTL -.3964b2 FDC_DumpReg_Command -.3964b2 0b phd PHD -.3964b3 08 php PHP -.3964b4 e2 20 sep #$20 SEP #$20 ; set A short -.3964b6 a9 0e lda #$0e LDA #FDC_CMD_DUMPREG ; DUMPREG Command -.3964b8 8d 00 05 sta $0500 STA FDC_PARAMETERS -.3964bb a9 01 lda #$01 LDA #1 -.3964bd 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 4 parameter (the command) -.3964c0 9c 33 05 stz $0533 STZ FDC_EXPECT_DAT ; 0 data -.3964c3 a9 0a lda #$0a LDA #10 -.3964c5 8d 32 05 sta $0532 STA FDC_RESULT_NUM ; 10 results -.3964c8 22 cd 60 39 jsl $3960cd JSL FDC_COMMAND ; Issue the command -.3964cc 90 03 bcc $3964d1 BCC pass_failure -.3964ce 28 plp PLP -.3964cf 2b pld PLD -.3964d0 6b rtl RTL -.3964d1 28 plp pass_failure PLP -.3964d2 2b pld PLD -.3964d3 18 clc CLC -.3964d4 6b rtl RTL -.3964d5 FDC_Seek_Track -.3964d5 8b phb PHB -.3964d6 0b phd PHD -.3964d7 08 php PHP -.3964d8 48 pha PHA ; begin setdbr macro -.3964d9 08 php PHP -.3964da e2 20 sep #$20 SEP #$20 ; set A short -.3964dc a9 00 lda #$00 LDA #0 -.3964de 48 pha PHA -.3964df ab plb PLB -.3964e0 28 plp PLP -.3964e1 68 pla PLA ; end setdbr macro -.3964e2 48 pha PHA ; begin setdp macro -.3964e3 08 php PHP -.3964e4 c2 20 rep #$20 REP #$20 ; set A long -.3964e6 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.3964e9 5b tcd TCD -.3964ea 28 plp PLP -.3964eb 68 pla PLA ; end setdp macro -.3964ec 22 7d 62 39 jsl $39627d JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock -.3964f0 e2 20 sep #$20 SEP #$20 ; set A short -.3964f2 a9 0f lda #$0f LDA #FDC_CMD_SEEK ; Seek Command -.3964f4 8d 00 05 sta $0500 STA FDC_PARAMETERS -.3964f7 a5 01 lda $0301 LDA FDC_HEAD ; Get the head -.3964f9 29 01 and #$01 AND #$01 -.3964fb 0a asl a ASL A -.3964fc 0a asl a ASL A -.3964fd 05 00 ora $0300 ORA FDC_DRIVE ; And the drive number -.3964ff 8d 01 05 sta $0501 STA FDC_PARAMETERS+1 -.396502 a5 02 lda $0302 LDA FDC_CYLINDER ; And the track -.396504 8d 02 05 sta $0502 STA FDC_PARAMETERS+2 -.396507 a9 03 lda #$03 LDA #3 -.396509 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 3 parameter (the command) -.39650c 9c 33 05 stz $0533 STZ FDC_EXPECT_DAT ; 0 data -.39650f 9c 32 05 stz $0532 STZ FDC_RESULT_NUM ; 0 results -.396512 22 cd 60 39 jsl $3960cd JSL FDC_COMMAND ; Issue the command -.396516 90 05 bcc $39651d BCC pass_failure -.396518 28 plp PLP -.396519 2b pld PLD -.39651a ab plb PLB -.39651b 38 sec SEC -.39651c 6b rtl RTL -.39651d 28 plp pass_failure PLP -.39651e 2b pld PLD -.39651f ab plb PLB -.396520 18 clc CLC -.396521 6b rtl RTL -.396522 FDC_Read_Sector -.396522 8b phb PHB -.396523 0b phd PHD -.396524 08 php PHP -.396525 48 pha PHA ; begin setdbr macro -.396526 08 php PHP -.396527 e2 20 sep #$20 SEP #$20 ; set A short -.396529 a9 00 lda #$00 LDA #0 -.39652b 48 pha PHA -.39652c ab plb PLB -.39652d 28 plp PLP -.39652e 68 pla PLA ; end setdbr macro -.39652f 48 pha PHA ; begin setdp macro -.396530 08 php PHP -.396531 c2 20 rep #$20 REP #$20 ; set A long -.396533 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396536 5b tcd TCD -.396537 28 plp PLP -.396538 68 pla PLA ; end setdp macro -.396539 22 7d 62 39 jsl $39627d JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock -.39653d e2 20 sep #$20 SEP #$20 ; set A short -.39653f a9 06 lda #$06 LDA #FDC_CMD_READ_DATA ; The READ_DATA command -.396541 09 40 ora #$40 ORA #FDC_CMD_MFM ; Turn on MFM mode -.396543 8d 00 05 sta $0500 STA FDC_PARAMETERS -.396546 a5 01 lda $0301 LDA FDC_HEAD ; Get the head -.396548 29 01 and #$01 AND #$01 -.39654a 0a asl a ASL A -.39654b 0a asl a ASL A -.39654c 05 00 ora $0300 ORA FDC_DRIVE ; And the drive number -.39654e 8d 01 05 sta $0501 STA FDC_PARAMETERS+1 -.396551 a5 02 lda $0302 LDA FDC_CYLINDER ; Send the cylinder number -.396553 8d 02 05 sta $0502 STA FDC_PARAMETERS+2 -.396556 a5 01 lda $0301 LDA FDC_HEAD ; Send the head number -.396558 8d 03 05 sta $0503 STA FDC_PARAMETERS+3 -.39655b a5 03 lda $0303 LDA FDC_SECTOR ; Send the sector number -.39655d 8d 04 05 sta $0504 STA FDC_PARAMETERS+4 -.396560 a9 02 lda #$02 LDA #$02 ; --- N ---- Sector Size (2 = 512Bytes) -.396562 8d 05 05 sta $0505 STA FDC_PARAMETERS+5 -.396565 a9 12 lda #$12 LDA #18 ; --- EOT ---- End of Track -.396567 8d 06 05 sta $0506 STA FDC_PARAMETERS+6 -.39656a a9 1b lda #$1b LDA #$1B ; --- GPL ---- End of Track -.39656c 8d 07 05 sta $0507 STA FDC_PARAMETERS+7 -.39656f a9 ff lda #$ff LDA #$FF ; --- DTL ---- Special sector size -.396571 8d 08 05 sta $0508 STA FDC_PARAMETERS+8 -.396574 a9 09 lda #$09 LDA #9 -.396576 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 9 parameter (the command) -.396579 a9 01 lda #$01 LDA #1 -.39657b 8d 33 05 sta $0533 STA FDC_EXPECT_DAT ; Expect data -.39657e a9 07 lda #$07 LDA #7 -.396580 8d 32 05 sta $0532 STA FDC_RESULT_NUM ; 7 results -.396583 22 cd 60 39 jsl $3960cd command JSL FDC_COMMAND ; Issue the command -.396587 08 php PHP -.396588 ad 10 05 lda $0510 get_results LDA FDC_RESULTS -.39658b 85 06 sta $0306 STA FDC_ST0 ; --- ST0 ---- -.39658d ad 11 05 lda $0511 LDA FDC_RESULTS+1 -.396590 85 07 sta $0307 STA FDC_ST1 ; --- ST1 ---- -.396592 ad 12 05 lda $0512 LDA FDC_RESULTS+2 -.396595 85 08 sta $0308 STA FDC_ST2 ; --- ST2 ---- -.396597 ad 13 05 lda $0513 LDA FDC_RESULTS+3 -.39659a 85 02 sta $0302 STA FDC_CYLINDER ; -- C --- -.39659c ad 14 05 lda $0514 LDA FDC_RESULTS+4 -.39659f 85 01 sta $0301 STA FDC_HEAD ; --- H --- -.3965a1 ad 15 05 lda $0515 LDA FDC_RESULTS+5 -.3965a4 85 0a sta $030a STA FDC_PCN ; --- R --- -.3965a6 ad 16 05 lda $0516 LDA FDC_RESULTS+6 -.3965a9 85 04 sta $0304 STA FDC_SECTOR_SIZE ; --- N --- -.3965ab 28 plp PLP -.3965ac 90 04 bcc $3965b2 BCC pass_failure -.3965ae 28 plp done PLP -.3965af 2b pld PLD -.3965b0 ab plb PLB -.3965b1 6b rtl RTL -.3965b2 28 plp pass_failure PLP -.3965b3 2b pld PLD -.3965b4 ab plb PLB -.3965b5 18 clc CLC -.3965b6 6b rtl RTL -.3965b7 FDC_Write_Sector -.3965b7 8b phb PHB -.3965b8 0b phd PHD -.3965b9 08 php PHP -.3965ba 48 pha PHA ; begin setdbr macro -.3965bb 08 php PHP -.3965bc e2 20 sep #$20 SEP #$20 ; set A short -.3965be a9 00 lda #$00 LDA #0 -.3965c0 48 pha PHA -.3965c1 ab plb PLB -.3965c2 28 plp PLP -.3965c3 68 pla PLA ; end setdbr macro -.3965c4 48 pha PHA ; begin setdp macro -.3965c5 08 php PHP -.3965c6 c2 20 rep #$20 REP #$20 ; set A long -.3965c8 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.3965cb 5b tcd TCD -.3965cc 28 plp PLP -.3965cd 68 pla PLA ; end setdp macro -.3965ce e2 20 sep #$20 SEP #$20 ; set A short -.3965d0 22 7d 62 39 jsl $39627d JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock -.3965d4 a9 05 lda #$05 LDA #FDC_CMD_WRITE_DATA ; The WRITE_DATA command -.3965d6 09 40 ora #$40 ORA #FDC_CMD_MFM ; Turn on MFM mode -.3965d8 8d 00 05 sta $0500 STA FDC_PARAMETERS -.3965db a5 01 lda $0301 LDA FDC_HEAD ; Get the head -.3965dd 29 01 and #$01 AND #$01 -.3965df 0a asl a ASL A -.3965e0 0a asl a ASL A -.3965e1 05 00 ora $0300 ORA FDC_DRIVE ; And the drive number -.3965e3 8d 01 05 sta $0501 STA FDC_PARAMETERS+1 -.3965e6 a5 02 lda $0302 LDA FDC_CYLINDER ; Send the cylinder number -.3965e8 8d 02 05 sta $0502 STA FDC_PARAMETERS+2 -.3965eb a5 01 lda $0301 LDA FDC_HEAD ; Send the head number -.3965ed 8d 03 05 sta $0503 STA FDC_PARAMETERS+3 -.3965f0 a5 03 lda $0303 LDA FDC_SECTOR ; Send the sector number -.3965f2 8d 04 05 sta $0504 STA FDC_PARAMETERS+4 -.3965f5 a9 02 lda #$02 LDA #$02 ; --- N ---- Sector Size (2 = 512Bytes) -.3965f7 8d 05 05 sta $0505 STA FDC_PARAMETERS+5 -.3965fa a9 12 lda #$12 LDA #18 ; --- EOT ---- End of Track -.3965fc 8d 06 05 sta $0506 STA FDC_PARAMETERS+6 -.3965ff a9 1b lda #$1b LDA #$1B ; --- GPL ---- End of Track -.396601 8d 07 05 sta $0507 STA FDC_PARAMETERS+7 -.396604 a9 ff lda #$ff LDA #$FF ; --- DTL ---- Special sector size -.396606 8d 08 05 sta $0508 STA FDC_PARAMETERS+8 -.396609 a9 09 lda #$09 LDA #9 -.39660b 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 9 parameter (the command) -.39660e a9 ff lda #$ff LDA #$FF -.396610 8d 33 05 sta $0533 STA FDC_EXPECT_DAT ; Expect to write data -.396613 a9 07 lda #$07 LDA #7 -.396615 8d 32 05 sta $0532 STA FDC_RESULT_NUM ; 7 results -.396618 22 cd 60 39 jsl $3960cd command JSL FDC_COMMAND ; Issue the command -.39661c 08 php PHP -.39661d ad 10 05 lda $0510 get_results LDA FDC_RESULTS -.396620 85 06 sta $0306 STA FDC_ST0 ; --- ST0 --- -.396622 ad 11 05 lda $0511 LDA FDC_RESULTS+1 -.396625 85 07 sta $0307 STA FDC_ST1 ; --- ST1 --- -.396627 ad 12 05 lda $0512 LDA FDC_RESULTS+2 -.39662a 85 08 sta $0308 STA FDC_ST2 ; --- ST2 --- -.39662c ad 13 05 lda $0513 LDA FDC_RESULTS+3 -.39662f 85 02 sta $0302 STA FDC_CYLINDER ; --- C --- -.396631 ad 14 05 lda $0514 LDA FDC_RESULTS+4 -.396634 85 01 sta $0301 STA FDC_HEAD ; --- H --- -.396636 ad 15 05 lda $0515 LDA FDC_RESULTS+5 -.396639 85 0a sta $030a STA FDC_PCN ; --- R --- -.39663b ad 16 05 lda $0516 LDA FDC_RESULTS+6 -.39663e 85 04 sta $0304 STA FDC_SECTOR_SIZE ; --- N --- -.396640 28 plp check_status PLP -.396641 90 04 bcc $396647 BCC pass_failure -.396643 28 plp done PLP -.396644 2b pld PLD -.396645 ab plb PLB -.396646 6b rtl RTL -.396647 28 plp pass_failure PLP -.396648 2b pld PLD -.396649 ab plb PLB -.39664a 18 clc CLC -.39664b 6b rtl RTL -.39664c DIVIDE32 -.39664c da phx PHX -.39664d 5a phy PHY -.39664e 0b phd PHD -.39664f 08 php PHP -.396650 48 pha PHA ; begin setdp macro -.396651 08 php PHP -.396652 c2 20 rep #$20 REP #$20 ; set A long -.396654 a9 0c 03 lda #$030c LDA #DIVIDEND ; set DP to page 0 -.396657 5b tcd TCD -.396658 28 plp PLP -.396659 68 pla PLA ; end setdp macro -.39665a c2 30 rep #$30 REP #$30 ; set A&X long -.39665c 64 08 stz $0314 STZ REMAINDER ; Initialize the remainder -.39665e 64 0a stz $0316 STZ REMAINDER+2 -.396660 a2 20 00 ldx #$0020 LDX #32 ; Set the number of bits to process -.396663 06 00 asl $030c loop ASL DIVIDEND -.396665 26 02 rol $030e ROL DIVIDEND+2 -.396667 26 08 rol $0314 ROL REMAINDER -.396669 26 0a rol $0316 ROL REMAINDER+2 -.39666b a5 08 lda $0314 LDA REMAINDER -.39666d 38 sec SEC -.39666e e5 04 sbc $0310 SBC DIVISOR -.396670 a8 tay TAY -.396671 a5 0a lda $0316 LDA REMAINDER+2 -.396673 e5 06 sbc $0312 SBC DIVISOR+2 -.396675 90 06 bcc $39667d BCC skip -.396677 85 0a sta $0316 STA REMAINDER+2 -.396679 84 08 sty $0314 STY REMAINDER -.39667b e6 00 inc $030c INC DIVIDEND -.39667d ca dex skip DEX -.39667e d0 e3 bne $396663 BNE loop -.396680 28 plp PLP -.396681 2b pld PLD -.396682 7a ply PLY -.396683 fa plx PLX -.396684 60 rts RTS -.396685 LBA2CHS -.396685 8b phb PHB -.396686 0b phd PHD -.396687 08 php PHP -.396688 48 pha PHA ; begin setdbr macro -.396689 08 php PHP -.39668a e2 20 sep #$20 SEP #$20 ; set A short -.39668c a9 00 lda #$00 LDA #0 -.39668e 48 pha PHA -.39668f ab plb PLB -.396690 28 plp PLP -.396691 68 pla PLA ; end setdbr macro -.396692 48 pha PHA ; begin setdp macro -.396693 08 php PHP -.396694 c2 20 rep #$20 REP #$20 ; set A long -.396696 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396699 5b tcd TCD -.39669a 28 plp PLP -.39669b 68 pla PLA ; end setdp macro -.39669c c2 30 rep #$30 REP #$30 ; set A&X long -.39669e a5 22 lda $0322 LDA BIOS_LBA -.3966a0 85 0c sta $030c STA DIVIDEND -.3966a2 a5 24 lda $0324 LDA BIOS_LBA+2 -.3966a4 85 0e sta $030e STA DIVIDEND+2 -.3966a6 a9 24 00 lda #$0024 LDA #36 -.3966a9 85 10 sta $0310 STA DIVISOR -.3966ab 64 12 stz $0312 STZ DIVISOR+2 -.3966ad 20 4c 66 jsr $39664c JSR DIVIDE32 -.3966b0 e2 20 sep #$20 SEP #$20 ; set A short -.3966b2 a5 0c lda $030c LDA DIVIDEND -.3966b4 85 02 sta $0302 STA FDC_CYLINDER -.3966b6 c2 20 rep #$20 REP #$20 ; set A long -.3966b8 a5 14 lda $0314 LDA REMAINDER -.3966ba 85 0c sta $030c STA DIVIDEND -.3966bc a5 16 lda $0316 LDA REMAINDER+2 -.3966be 85 0e sta $030e STA DIVIDEND+2 -.3966c0 a9 12 00 lda #$0012 LDA #18 -.3966c3 85 10 sta $0310 STA DIVISOR -.3966c5 64 12 stz $0312 STZ DIVISOR+2 -.3966c7 20 4c 66 jsr $39664c JSR DIVIDE32 -.3966ca e2 20 sep #$20 SEP #$20 ; set A short -.3966cc a5 0c lda $030c LDA DIVIDEND -.3966ce 29 01 and #$01 AND #$01 -.3966d0 85 01 sta $0301 STA FDC_HEAD -.3966d2 a5 14 lda $0314 LDA REMAINDER -.3966d4 1a inc a INC A -.3966d5 85 03 sta $0303 STA FDC_SECTOR -.3966d7 28 plp PLP -.3966d8 2b pld PLD -.3966d9 ab plb PLB -.3966da 6b rtl RTL -.3966db FDC_GETBLOCK -.3966db 8b phb PHB -.3966dc 0b phd PHD -.3966dd 08 php PHP -.3966de 48 pha PHA ; begin setdbr macro -.3966df 08 php PHP -.3966e0 e2 20 sep #$20 SEP #$20 ; set A short -.3966e2 a9 00 lda #$00 LDA #0 -.3966e4 48 pha PHA -.3966e5 ab plb PLB -.3966e6 28 plp PLP -.3966e7 68 pla PLA ; end setdbr macro -.3966e8 48 pha PHA ; begin setdp macro +.39646e 20 8e 60 jsr $39608e JSR FDC_Check_CMD_BSY ; Check I can send a command +.396471 90 36 bcc $3964a9 BCC time_out ; If there was a time out, raise an error +.396473 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.396476 90 31 bcc $3964a9 BCC time_out ; If there was a time out, raise an error +.396478 a9 13 lda #$13 LDA #FDC_CMD_CONFIGURE ; Specify Command +.39647a 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA +.39647e 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.396481 90 26 bcc $3964a9 BCC time_out ; If there was a time out, raise an error +.396483 a9 00 lda #$00 LDA #$00 +.396485 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA +.396489 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.39648c 90 1b bcc $3964a9 BCC time_out ; If there was a time out, raise an error +.39648e a9 44 lda #$44 LDA #$44 ; Implied Seek, FIFOTHR = 4 byte +.396490 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA +.396494 20 32 60 jsr $396032 JSR FDC_Check_RQM ; Check if I can transfer data +.396497 90 10 bcc $3964a9 BCC time_out ; If there was a time out, raise an error +.396499 a9 00 lda #$00 LDA #$00 +.39649b 8f f5 13 af sta $af13f5 STA @l SIO_FDC_DTA +.39649f 20 8e 60 jsr $39608e JSR FDC_Check_CMD_BSY ; Check I can send a command +.3964a2 90 05 bcc $3964a9 BCC time_out ; If there was a time out, raise an error +.3964a4 28 plp PLP +.3964a5 2b pld PLD +.3964a6 ab plb PLB +.3964a7 38 sec SEC +.3964a8 6b rtl RTL +.3964a9 time_out +.3964a9 e2 20 sep #$20 SEP #$20 ; set A short +.3964ab a9 8c lda #$8c LDA #BIOS_ERR_TIMEOUT ; Return a time out error +.3964ad 8d 20 03 sta $0320 STA @w BIOS_STATUS +.3964b0 28 plp PLP +.3964b1 2b pld PLD +.3964b2 ab plb PLB +.3964b3 18 clc CLC +.3964b4 6b rtl RTL +.3964b5 FDC_Read_ID_Command +.3964b5 8b phb PHB +.3964b6 0b phd PHD +.3964b7 08 php PHP +.3964b8 48 pha PHA ; begin setdbr macro +.3964b9 08 php PHP +.3964ba e2 20 sep #$20 SEP #$20 ; set A short +.3964bc a9 00 lda #$00 LDA #0 +.3964be 48 pha PHA +.3964bf ab plb PLB +.3964c0 28 plp PLP +.3964c1 68 pla PLA ; end setdbr macro +.3964c2 48 pha PHA ; begin setdp macro +.3964c3 08 php PHP +.3964c4 c2 20 rep #$20 REP #$20 ; set A long +.3964c6 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.3964c9 5b tcd TCD +.3964ca 28 plp PLP +.3964cb 68 pla PLA ; end setdp macro +.3964cc e2 20 sep #$20 SEP #$20 ; set A short +.3964ce a9 0a lda #$0a LDA #FDC_CMD_READ_ID ; READID Command +.3964d0 8d 00 05 sta $0500 STA FDC_PARAMETERS +.3964d3 a9 01 lda #$01 LDA #1 +.3964d5 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 4 parameter (the command) +.3964d8 9c 33 05 stz $0533 STZ FDC_EXPECT_DAT ; 0 data +.3964db a9 07 lda #$07 LDA #7 +.3964dd 8d 32 05 sta $0532 STA FDC_RESULT_NUM ; 7 results +.3964e0 22 2d 61 39 jsl $39612d JSL FDC_COMMAND ; Issue the command +.3964e4 90 27 bcc $39650d BCC pass_failure +.3964e6 ad 10 05 lda $0510 LDA FDC_RESULTS +.3964e9 85 06 sta $0306 STA FDC_ST0 ; Get ST0 +.3964eb ad 11 05 lda $0511 LDA FDC_RESULTS+1 +.3964ee 85 07 sta $0307 STA FDC_ST1 ; Get ST1 +.3964f0 ad 12 05 lda $0512 LDA FDC_RESULTS+2 +.3964f3 85 08 sta $0308 STA FDC_ST2 ; Get ST2 +.3964f5 ad 13 05 lda $0513 LDA FDC_RESULTS+3 +.3964f8 85 02 sta $0302 STA FDC_CYLINDER ; Get the cylinder +.3964fa ad 14 05 lda $0514 LDA FDC_RESULTS+4 +.3964fd 85 01 sta $0301 STA FDC_HEAD ; Get the head +.3964ff ad 15 05 lda $0515 LDA FDC_RESULTS+5 +.396502 85 0a sta $030a STA FDC_PCN ; Get the sector +.396504 ad 16 05 lda $0516 LDA FDC_RESULTS+6 +.396507 85 04 sta $0304 STA FDC_SECTOR_SIZE ; Get the sector size code +.396509 28 plp PLP +.39650a 2b pld PLD +.39650b ab plb PLB +.39650c 6b rtl RTL +.39650d 28 plp pass_failure PLP +.39650e 2b pld PLD +.39650f ab plb PLB +.396510 18 clc CLC +.396511 6b rtl RTL +.396512 FDC_DumpReg_Command +.396512 0b phd PHD +.396513 08 php PHP +.396514 e2 20 sep #$20 SEP #$20 ; set A short +.396516 a9 0e lda #$0e LDA #FDC_CMD_DUMPREG ; DUMPREG Command +.396518 8d 00 05 sta $0500 STA FDC_PARAMETERS +.39651b a9 01 lda #$01 LDA #1 +.39651d 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 4 parameter (the command) +.396520 9c 33 05 stz $0533 STZ FDC_EXPECT_DAT ; 0 data +.396523 a9 0a lda #$0a LDA #10 +.396525 8d 32 05 sta $0532 STA FDC_RESULT_NUM ; 10 results +.396528 22 2d 61 39 jsl $39612d JSL FDC_COMMAND ; Issue the command +.39652c 90 03 bcc $396531 BCC pass_failure +.39652e 28 plp PLP +.39652f 2b pld PLD +.396530 6b rtl RTL +.396531 28 plp pass_failure PLP +.396532 2b pld PLD +.396533 18 clc CLC +.396534 6b rtl RTL +.396535 FDC_Seek_Track +.396535 8b phb PHB +.396536 0b phd PHD +.396537 08 php PHP +.396538 48 pha PHA ; begin setdbr macro +.396539 08 php PHP +.39653a e2 20 sep #$20 SEP #$20 ; set A short +.39653c a9 00 lda #$00 LDA #0 +.39653e 48 pha PHA +.39653f ab plb PLB +.396540 28 plp PLP +.396541 68 pla PLA ; end setdbr macro +.396542 48 pha PHA ; begin setdp macro +.396543 08 php PHP +.396544 c2 20 rep #$20 REP #$20 ; set A long +.396546 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396549 5b tcd TCD +.39654a 28 plp PLP +.39654b 68 pla PLA ; end setdp macro +.39654c 22 dd 62 39 jsl $3962dd JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock +.396550 e2 20 sep #$20 SEP #$20 ; set A short +.396552 a9 0f lda #$0f LDA #FDC_CMD_SEEK ; Seek Command +.396554 8d 00 05 sta $0500 STA FDC_PARAMETERS +.396557 a5 01 lda $0301 LDA FDC_HEAD ; Get the head +.396559 29 01 and #$01 AND #$01 +.39655b 0a asl a ASL A +.39655c 0a asl a ASL A +.39655d 05 00 ora $0300 ORA FDC_DRIVE ; And the drive number +.39655f 8d 01 05 sta $0501 STA FDC_PARAMETERS+1 +.396562 a5 02 lda $0302 LDA FDC_CYLINDER ; And the track +.396564 8d 02 05 sta $0502 STA FDC_PARAMETERS+2 +.396567 a9 03 lda #$03 LDA #3 +.396569 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 3 parameter (the command) +.39656c 9c 33 05 stz $0533 STZ FDC_EXPECT_DAT ; 0 data +.39656f 9c 32 05 stz $0532 STZ FDC_RESULT_NUM ; 0 results +.396572 22 2d 61 39 jsl $39612d JSL FDC_COMMAND ; Issue the command +.396576 90 05 bcc $39657d BCC pass_failure +.396578 28 plp PLP +.396579 2b pld PLD +.39657a ab plb PLB +.39657b 38 sec SEC +.39657c 6b rtl RTL +.39657d 28 plp pass_failure PLP +.39657e 2b pld PLD +.39657f ab plb PLB +.396580 18 clc CLC +.396581 6b rtl RTL +.396582 FDC_Read_Sector +.396582 8b phb PHB +.396583 0b phd PHD +.396584 08 php PHP +.396585 48 pha PHA ; begin setdbr macro +.396586 08 php PHP +.396587 e2 20 sep #$20 SEP #$20 ; set A short +.396589 a9 00 lda #$00 LDA #0 +.39658b 48 pha PHA +.39658c ab plb PLB +.39658d 28 plp PLP +.39658e 68 pla PLA ; end setdbr macro +.39658f 48 pha PHA ; begin setdp macro +.396590 08 php PHP +.396591 c2 20 rep #$20 REP #$20 ; set A long +.396593 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396596 5b tcd TCD +.396597 28 plp PLP +.396598 68 pla PLA ; end setdp macro +.396599 22 dd 62 39 jsl $3962dd JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock +.39659d e2 20 sep #$20 SEP #$20 ; set A short +.39659f a9 06 lda #$06 LDA #FDC_CMD_READ_DATA ; The READ_DATA command +.3965a1 09 40 ora #$40 ORA #FDC_CMD_MFM ; Turn on MFM mode +.3965a3 8d 00 05 sta $0500 STA FDC_PARAMETERS +.3965a6 a5 01 lda $0301 LDA FDC_HEAD ; Get the head +.3965a8 29 01 and #$01 AND #$01 +.3965aa 0a asl a ASL A +.3965ab 0a asl a ASL A +.3965ac 05 00 ora $0300 ORA FDC_DRIVE ; And the drive number +.3965ae 8d 01 05 sta $0501 STA FDC_PARAMETERS+1 +.3965b1 a5 02 lda $0302 LDA FDC_CYLINDER ; Send the cylinder number +.3965b3 8d 02 05 sta $0502 STA FDC_PARAMETERS+2 +.3965b6 a5 01 lda $0301 LDA FDC_HEAD ; Send the head number +.3965b8 8d 03 05 sta $0503 STA FDC_PARAMETERS+3 +.3965bb a5 03 lda $0303 LDA FDC_SECTOR ; Send the sector number +.3965bd 8d 04 05 sta $0504 STA FDC_PARAMETERS+4 +.3965c0 a9 02 lda #$02 LDA #$02 ; --- N ---- Sector Size (2 = 512Bytes) +.3965c2 8d 05 05 sta $0505 STA FDC_PARAMETERS+5 +.3965c5 a9 12 lda #$12 LDA #18 ; --- EOT ---- End of Track +.3965c7 8d 06 05 sta $0506 STA FDC_PARAMETERS+6 +.3965ca a9 1b lda #$1b LDA #$1B ; --- GPL ---- End of Track +.3965cc 8d 07 05 sta $0507 STA FDC_PARAMETERS+7 +.3965cf a9 ff lda #$ff LDA #$FF ; --- DTL ---- Special sector size +.3965d1 8d 08 05 sta $0508 STA FDC_PARAMETERS+8 +.3965d4 a9 09 lda #$09 LDA #9 +.3965d6 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 9 parameter (the command) +.3965d9 a9 01 lda #$01 LDA #1 +.3965db 8d 33 05 sta $0533 STA FDC_EXPECT_DAT ; Expect data +.3965de a9 07 lda #$07 LDA #7 +.3965e0 8d 32 05 sta $0532 STA FDC_RESULT_NUM ; 7 results +.3965e3 22 2d 61 39 jsl $39612d command JSL FDC_COMMAND ; Issue the command +.3965e7 08 php PHP +.3965e8 ad 10 05 lda $0510 get_results LDA FDC_RESULTS +.3965eb 85 06 sta $0306 STA FDC_ST0 ; --- ST0 ---- +.3965ed ad 11 05 lda $0511 LDA FDC_RESULTS+1 +.3965f0 85 07 sta $0307 STA FDC_ST1 ; --- ST1 ---- +.3965f2 ad 12 05 lda $0512 LDA FDC_RESULTS+2 +.3965f5 85 08 sta $0308 STA FDC_ST2 ; --- ST2 ---- +.3965f7 ad 13 05 lda $0513 LDA FDC_RESULTS+3 +.3965fa 85 02 sta $0302 STA FDC_CYLINDER ; -- C --- +.3965fc ad 14 05 lda $0514 LDA FDC_RESULTS+4 +.3965ff 85 01 sta $0301 STA FDC_HEAD ; --- H --- +.396601 ad 15 05 lda $0515 LDA FDC_RESULTS+5 +.396604 85 0a sta $030a STA FDC_PCN ; --- R --- +.396606 ad 16 05 lda $0516 LDA FDC_RESULTS+6 +.396609 85 04 sta $0304 STA FDC_SECTOR_SIZE ; --- N --- +.39660b 28 plp PLP +.39660c 90 04 bcc $396612 BCC pass_failure +.39660e 28 plp done PLP +.39660f 2b pld PLD +.396610 ab plb PLB +.396611 6b rtl RTL +.396612 28 plp pass_failure PLP +.396613 2b pld PLD +.396614 ab plb PLB +.396615 18 clc CLC +.396616 6b rtl RTL +.396617 FDC_Write_Sector +.396617 8b phb PHB +.396618 0b phd PHD +.396619 08 php PHP +.39661a 48 pha PHA ; begin setdbr macro +.39661b 08 php PHP +.39661c e2 20 sep #$20 SEP #$20 ; set A short +.39661e a9 00 lda #$00 LDA #0 +.396620 48 pha PHA +.396621 ab plb PLB +.396622 28 plp PLP +.396623 68 pla PLA ; end setdbr macro +.396624 48 pha PHA ; begin setdp macro +.396625 08 php PHP +.396626 c2 20 rep #$20 REP #$20 ; set A long +.396628 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.39662b 5b tcd TCD +.39662c 28 plp PLP +.39662d 68 pla PLA ; end setdp macro +.39662e e2 20 sep #$20 SEP #$20 ; set A short +.396630 22 dd 62 39 jsl $3962dd JSL FDC_MOTOR_NEEDED ; Reset the spindle motor timeout clock +.396634 a9 05 lda #$05 LDA #FDC_CMD_WRITE_DATA ; The WRITE_DATA command +.396636 09 40 ora #$40 ORA #FDC_CMD_MFM ; Turn on MFM mode +.396638 8d 00 05 sta $0500 STA FDC_PARAMETERS +.39663b a5 01 lda $0301 LDA FDC_HEAD ; Get the head +.39663d 29 01 and #$01 AND #$01 +.39663f 0a asl a ASL A +.396640 0a asl a ASL A +.396641 05 00 ora $0300 ORA FDC_DRIVE ; And the drive number +.396643 8d 01 05 sta $0501 STA FDC_PARAMETERS+1 +.396646 a5 02 lda $0302 LDA FDC_CYLINDER ; Send the cylinder number +.396648 8d 02 05 sta $0502 STA FDC_PARAMETERS+2 +.39664b a5 01 lda $0301 LDA FDC_HEAD ; Send the head number +.39664d 8d 03 05 sta $0503 STA FDC_PARAMETERS+3 +.396650 a5 03 lda $0303 LDA FDC_SECTOR ; Send the sector number +.396652 8d 04 05 sta $0504 STA FDC_PARAMETERS+4 +.396655 a9 02 lda #$02 LDA #$02 ; --- N ---- Sector Size (2 = 512Bytes) +.396657 8d 05 05 sta $0505 STA FDC_PARAMETERS+5 +.39665a a9 12 lda #$12 LDA #18 ; --- EOT ---- End of Track +.39665c 8d 06 05 sta $0506 STA FDC_PARAMETERS+6 +.39665f a9 1b lda #$1b LDA #$1B ; --- GPL ---- End of Track +.396661 8d 07 05 sta $0507 STA FDC_PARAMETERS+7 +.396664 a9 ff lda #$ff LDA #$FF ; --- DTL ---- Special sector size +.396666 8d 08 05 sta $0508 STA FDC_PARAMETERS+8 +.396669 a9 09 lda #$09 LDA #9 +.39666b 8d 30 05 sta $0530 STA FDC_PARAM_NUM ; 9 parameter (the command) +.39666e a9 ff lda #$ff LDA #$FF +.396670 8d 33 05 sta $0533 STA FDC_EXPECT_DAT ; Expect to write data +.396673 a9 07 lda #$07 LDA #7 +.396675 8d 32 05 sta $0532 STA FDC_RESULT_NUM ; 7 results +.396678 22 2d 61 39 jsl $39612d command JSL FDC_COMMAND ; Issue the command +.39667c 08 php PHP +.39667d ad 10 05 lda $0510 get_results LDA FDC_RESULTS +.396680 85 06 sta $0306 STA FDC_ST0 ; --- ST0 --- +.396682 ad 11 05 lda $0511 LDA FDC_RESULTS+1 +.396685 85 07 sta $0307 STA FDC_ST1 ; --- ST1 --- +.396687 ad 12 05 lda $0512 LDA FDC_RESULTS+2 +.39668a 85 08 sta $0308 STA FDC_ST2 ; --- ST2 --- +.39668c ad 13 05 lda $0513 LDA FDC_RESULTS+3 +.39668f 85 02 sta $0302 STA FDC_CYLINDER ; --- C --- +.396691 ad 14 05 lda $0514 LDA FDC_RESULTS+4 +.396694 85 01 sta $0301 STA FDC_HEAD ; --- H --- +.396696 ad 15 05 lda $0515 LDA FDC_RESULTS+5 +.396699 85 0a sta $030a STA FDC_PCN ; --- R --- +.39669b ad 16 05 lda $0516 LDA FDC_RESULTS+6 +.39669e 85 04 sta $0304 STA FDC_SECTOR_SIZE ; --- N --- +.3966a0 28 plp check_status PLP +.3966a1 90 04 bcc $3966a7 BCC pass_failure +.3966a3 28 plp done PLP +.3966a4 2b pld PLD +.3966a5 ab plb PLB +.3966a6 6b rtl RTL +.3966a7 28 plp pass_failure PLP +.3966a8 2b pld PLD +.3966a9 ab plb PLB +.3966aa 18 clc CLC +.3966ab 6b rtl RTL +.3966ac DIVIDE32 +.3966ac da phx PHX +.3966ad 5a phy PHY +.3966ae 0b phd PHD +.3966af 08 php PHP +.3966b0 48 pha PHA ; begin setdp macro +.3966b1 08 php PHP +.3966b2 c2 20 rep #$20 REP #$20 ; set A long +.3966b4 a9 0c 03 lda #$030c LDA #DIVIDEND ; set DP to page 0 +.3966b7 5b tcd TCD +.3966b8 28 plp PLP +.3966b9 68 pla PLA ; end setdp macro +.3966ba c2 30 rep #$30 REP #$30 ; set A&X long +.3966bc 64 08 stz $0314 STZ REMAINDER ; Initialize the remainder +.3966be 64 0a stz $0316 STZ REMAINDER+2 +.3966c0 a2 20 00 ldx #$0020 LDX #32 ; Set the number of bits to process +.3966c3 06 00 asl $030c loop ASL DIVIDEND +.3966c5 26 02 rol $030e ROL DIVIDEND+2 +.3966c7 26 08 rol $0314 ROL REMAINDER +.3966c9 26 0a rol $0316 ROL REMAINDER+2 +.3966cb a5 08 lda $0314 LDA REMAINDER +.3966cd 38 sec SEC +.3966ce e5 04 sbc $0310 SBC DIVISOR +.3966d0 a8 tay TAY +.3966d1 a5 0a lda $0316 LDA REMAINDER+2 +.3966d3 e5 06 sbc $0312 SBC DIVISOR+2 +.3966d5 90 06 bcc $3966dd BCC skip +.3966d7 85 0a sta $0316 STA REMAINDER+2 +.3966d9 84 08 sty $0314 STY REMAINDER +.3966db e6 00 inc $030c INC DIVIDEND +.3966dd ca dex skip DEX +.3966de d0 e3 bne $3966c3 BNE loop +.3966e0 28 plp PLP +.3966e1 2b pld PLD +.3966e2 7a ply PLY +.3966e3 fa plx PLX +.3966e4 60 rts RTS +.3966e5 LBA2CHS +.3966e5 8b phb PHB +.3966e6 0b phd PHD +.3966e7 08 php PHP +.3966e8 48 pha PHA ; begin setdbr macro .3966e9 08 php PHP -.3966ea c2 20 rep #$20 REP #$20 ; set A long -.3966ec a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.3966ef 5b tcd TCD +.3966ea e2 20 sep #$20 SEP #$20 ; set A short +.3966ec a9 00 lda #$00 LDA #0 +.3966ee 48 pha PHA +.3966ef ab plb PLB .3966f0 28 plp PLP -.3966f1 68 pla PLA ; end setdp macro -.3966f2 e2 20 sep #$20 SEP #$20 ; set A short -.3966f4 a9 03 lda #$03 LDA #3 ; We can retry 3 times -.3966f6 8d 34 05 sta $0534 STA FDC_CMD_RETRY -.3966f9 c2 30 rep #$30 REP #$30 ; set A&X long -.3966fb 22 85 66 39 jsl $396685 JSL LBA2CHS ; Convert the LBA to CHS -.3966ff e2 20 sep #$20 SEP #$20 ; set A short -.396701 a5 03 lda $0303 LDA FDC_SECTOR ; Just make sure the sector is ok -.396703 f0 29 beq $39672e BEQ read_failure -.396705 try_read -.396705 c2 20 rep #$20 REP #$20 ; set A long -.396707 22 22 65 39 jsl $396522 JSL FDC_Read_Sector ; Read the sector -.39670b 90 14 bcc $396721 BCC retry -.39670d e2 20 sep #$20 SEP #$20 ; set A short -.39670f a5 06 lda $0306 LDA FDC_ST0 -.396711 29 d0 and #$d0 AND #%11010000 ; Check the error bits -.396713 d0 19 bne $39672e BNE read_failure -.396715 ret_success -.396715 e2 20 sep #$20 SEP #$20 ; set A short -.396717 a9 00 lda #$00 LDA #0 -.396719 8d 20 03 sta $0320 STA @w BIOS_STATUS -.39671c 28 plp PLP -.39671d 2b pld PLD -.39671e ab plb PLB -.39671f 38 sec SEC -.396720 6b rtl RTL -.396721 retry -.396721 e2 20 sep #$20 SEP #$20 ; set A short -.396723 ce 34 05 dec $0534 DEC FDC_CMD_RETRY ; Decrement the retry counter -.396726 30 13 bmi $39673b BMI pass_failure ; If it's gone negative, we should quit with an error -.396728 22 1a 62 39 jsl $39621a JSL FDC_INIT ; Otherwise, reinitialize the FDC -.39672c 80 d7 bra $396705 BRA try_read ; And try the read again -.39672e read_failure -.39672e e2 20 sep #$20 SEP #$20 ; set A short -.396730 a9 82 lda #$82 LDA #BIOS_ERR_READ -.396732 80 04 bra $396738 BRA ret_failure -.396734 seek_failure -.396734 e2 20 sep #$20 SEP #$20 ; set A short -.396736 a9 84 lda #$84 LDA #BIOS_ERR_TRACK -.396738 8d 20 03 sta $0320 ret_failure STA @w BIOS_STATUS -.39673b 28 plp pass_failure PLP -.39673c 2b pld PLD -.39673d ab plb PLB -.39673e 18 clc CLC -.39673f 6b rtl RTL -.396740 FDC_PUTBLOCK -.396740 8b phb PHB -.396741 0b phd PHD -.396742 08 php PHP -.396743 48 pha PHA ; begin setdbr macro -.396744 08 php PHP -.396745 e2 20 sep #$20 SEP #$20 ; set A short -.396747 a9 00 lda #$00 LDA #0 -.396749 48 pha PHA -.39674a ab plb PLB -.39674b 28 plp PLP -.39674c 68 pla PLA ; end setdbr macro -.39674d 48 pha PHA ; begin setdp macro -.39674e 08 php PHP -.39674f c2 20 rep #$20 REP #$20 ; set A long -.396751 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396754 5b tcd TCD -.396755 28 plp PLP -.396756 68 pla PLA ; end setdp macro -.396757 e2 20 sep #$20 SEP #$20 ; set A short -.396759 a9 03 lda #$03 LDA #3 ; Set the number of retries we're willing to do -.39675b 8d 34 05 sta $0534 STA @w FDC_CMD_RETRY -.39675e c2 30 rep #$30 REP #$30 ; set A&X long -.396760 22 85 66 39 jsl $396685 JSL LBA2CHS ; Convert the LBA to CHS -.396764 22 b7 65 39 jsl $3965b7 retry JSL FDC_Write_Sector ; Write the sector -.396768 b0 03 bcs $39676d BCS chk_st0 -.39676a 82 28 00 brl $396795 BRL attempt_retry -.39676d chk_st0 +.3966f1 68 pla PLA ; end setdbr macro +.3966f2 48 pha PHA ; begin setdp macro +.3966f3 08 php PHP +.3966f4 c2 20 rep #$20 REP #$20 ; set A long +.3966f6 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.3966f9 5b tcd TCD +.3966fa 28 plp PLP +.3966fb 68 pla PLA ; end setdp macro +.3966fc c2 30 rep #$30 REP #$30 ; set A&X long +.3966fe a5 22 lda $0322 LDA BIOS_LBA +.396700 85 0c sta $030c STA DIVIDEND +.396702 a5 24 lda $0324 LDA BIOS_LBA+2 +.396704 85 0e sta $030e STA DIVIDEND+2 +.396706 a9 24 00 lda #$0024 LDA #36 +.396709 85 10 sta $0310 STA DIVISOR +.39670b 64 12 stz $0312 STZ DIVISOR+2 +.39670d 20 ac 66 jsr $3966ac JSR DIVIDE32 +.396710 e2 20 sep #$20 SEP #$20 ; set A short +.396712 a5 0c lda $030c LDA DIVIDEND +.396714 85 02 sta $0302 STA FDC_CYLINDER +.396716 c2 20 rep #$20 REP #$20 ; set A long +.396718 a5 14 lda $0314 LDA REMAINDER +.39671a 85 0c sta $030c STA DIVIDEND +.39671c a5 16 lda $0316 LDA REMAINDER+2 +.39671e 85 0e sta $030e STA DIVIDEND+2 +.396720 a9 12 00 lda #$0012 LDA #18 +.396723 85 10 sta $0310 STA DIVISOR +.396725 64 12 stz $0312 STZ DIVISOR+2 +.396727 20 ac 66 jsr $3966ac JSR DIVIDE32 +.39672a e2 20 sep #$20 SEP #$20 ; set A short +.39672c a5 0c lda $030c LDA DIVIDEND +.39672e 29 01 and #$01 AND #$01 +.396730 85 01 sta $0301 STA FDC_HEAD +.396732 a5 14 lda $0314 LDA REMAINDER +.396734 1a inc a INC A +.396735 85 03 sta $0303 STA FDC_SECTOR +.396737 28 plp PLP +.396738 2b pld PLD +.396739 ab plb PLB +.39673a 6b rtl RTL +.39673b FDC_GETBLOCK +.39673b 8b phb PHB +.39673c 0b phd PHD +.39673d 08 php PHP +.39673e 48 pha PHA ; begin setdbr macro +.39673f 08 php PHP +.396740 e2 20 sep #$20 SEP #$20 ; set A short +.396742 a9 00 lda #$00 LDA #0 +.396744 48 pha PHA +.396745 ab plb PLB +.396746 28 plp PLP +.396747 68 pla PLA ; end setdbr macro +.396748 48 pha PHA ; begin setdp macro +.396749 08 php PHP +.39674a c2 20 rep #$20 REP #$20 ; set A long +.39674c a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.39674f 5b tcd TCD +.396750 28 plp PLP +.396751 68 pla PLA ; end setdp macro +.396752 e2 20 sep #$20 SEP #$20 ; set A short +.396754 a9 03 lda #$03 LDA #3 ; We can retry 3 times +.396756 8d 34 05 sta $0534 STA FDC_CMD_RETRY +.396759 c2 30 rep #$30 REP #$30 ; set A&X long +.39675b 22 e5 66 39 jsl $3966e5 JSL LBA2CHS ; Convert the LBA to CHS +.39675f e2 20 sep #$20 SEP #$20 ; set A short +.396761 a5 03 lda $0303 LDA FDC_SECTOR ; Just make sure the sector is ok +.396763 f0 29 beq $39678e BEQ read_failure +.396765 try_read +.396765 c2 20 rep #$20 REP #$20 ; set A long +.396767 22 82 65 39 jsl $396582 JSL FDC_Read_Sector ; Read the sector +.39676b 90 14 bcc $396781 BCC retry .39676d e2 20 sep #$20 SEP #$20 ; set A short .39676f a5 06 lda $0306 LDA FDC_ST0 .396771 29 d0 and #$d0 AND #%11010000 ; Check the error bits -.396773 d0 0c bne $396781 BNE write_failure +.396773 d0 19 bne $39678e BNE read_failure .396775 ret_success .396775 e2 20 sep #$20 SEP #$20 ; set A short .396777 a9 00 lda #$00 LDA #0 @@ -12683,403 +12740,463 @@ .39677e ab plb PLB .39677f 38 sec SEC .396780 6b rtl RTL -.396781 write_failure +.396781 retry .396781 e2 20 sep #$20 SEP #$20 ; set A short -.396783 a5 07 lda $0307 LDA FDC_ST1 ; Check ST1 for write protect -.396785 89 02 bit #$02 BIT #FDC_ST1_NW -.396787 f0 04 beq $39678d BEQ generic_err -.396789 a9 86 lda #$86 LDA #BIOS_ERR_WRITEPROT ; Yes: return a write-protect error -.39678b 80 17 bra $3967a4 BRA ret_failure -.39678d 89 10 bit #$10 generic_err BIT #FDC_ST1_OR ; TODO: properly handle over/under run errors -.39678f d0 e4 bne $396775 BNE ret_success -.396791 89 80 bit #$80 BIT #FDC_ST1_EN ; TODO: properly handle end-of-track -.396793 d0 e0 bne $396775 BNE ret_success -.396795 attempt_retry -.396795 e2 20 sep #$20 SEP #$20 ; set A short -.396797 ce 34 05 dec $0534 DEC @w FDC_CMD_RETRY ; Count down the retries -.39679a d0 c8 bne $396764 BNE retry ; And retry unless we have none left -.39679c a9 83 lda #$83 LDA #BIOS_ERR_WRITE ; Otherwise: return a generic write error -.39679e 80 04 bra $3967a4 BRA ret_failure -.3967a0 seek_failure -.3967a0 e2 20 sep #$20 SEP #$20 ; set A short -.3967a2 a9 84 lda #$84 LDA #BIOS_ERR_TRACK -.3967a4 ret_failure -.3967a4 8d 20 03 sta $0320 STA @w BIOS_STATUS -.3967a7 28 plp pass_failure PLP -.3967a8 2b pld PLD -.3967a9 ab plb PLB -.3967aa 18 clc CLC -.3967ab 6b rtl RTL -.3967ac FDC_MOUNT -.3967ac 8b phb PHB -.3967ad 0b phd PHD -.3967ae 08 php PHP -.3967af 48 pha PHA ; begin setdbr macro -.3967b0 08 php PHP -.3967b1 e2 20 sep #$20 SEP #$20 ; set A short -.3967b3 a9 00 lda #$00 LDA #0 -.3967b5 48 pha PHA -.3967b6 ab plb PLB -.3967b7 28 plp PLP -.3967b8 68 pla PLA ; end setdbr macro -.3967b9 48 pha PHA ; begin setdp macro -.3967ba 08 php PHP -.3967bb c2 20 rep #$20 REP #$20 ; set A long -.3967bd a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.3967c0 5b tcd TCD -.3967c1 28 plp PLP -.3967c2 68 pla PLA ; end setdp macro -.3967c3 22 1a 62 39 jsl $39621a JSL FDC_INIT -.3967c7 e2 20 sep #$20 SEP #$20 ; set A short -.3967c9 c2 10 rep #$10 REP #$10 ; set X long -.3967cb a9 00 lda #$00 LDA #0 -.3967cd a2 00 00 ldx #$0000 LDX #0 -.3967d0 9f 00 a3 38 sta $38a300,x zero_loop STA DOS_SECTOR,X -.3967d4 e8 inx INX -.3967d5 e0 00 02 cpx #$0200 CPX #512 -.3967d8 d0 f6 bne $3967d0 BNE zero_loop -.3967da a9 00 lda #$00 LDA #0 ; We only support drive 0 -.3967dc 85 00 sta $0300 STA FDC_DRIVE -.3967de 22 96 62 39 jsl $396296 JSL FDC_Motor_On ; Turn the motor on -.3967e2 c2 30 rep #$30 REP #$30 ; set A&X long -.3967e4 a9 00 00 lda #$0000 LDA #0 ; We want sector 0 -.3967e7 85 22 sta $0322 STA BIOS_LBA -.3967e9 85 24 sta $0324 STA BIOS_LBA+2 -.3967eb a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; And load it into DOS_SECTOR -.3967ee 85 26 sta $0326 STA BIOS_BUFF_PTR -.3967f0 a9 38 00 lda #$0038 LDA #`DOS_SECTOR -.3967f3 85 28 sta $0328 STA BIOS_BUFF_PTR+2 -.3967f5 22 db 66 39 jsl $3966db JSL FDC_GETBLOCK ; Attempt to read the data -.3967f9 b0 03 bcs $3967fe BCS parse_boot ; If ok: start parsing the boot record -.3967fb 82 d3 00 brl $3968d1 BRL pass_failure ; Pass the error up the chain -.3967fe parse_boot -.3967fe e2 20 sep #$20 SEP #$20 ; set A short -.396800 a9 00 lda #$00 LDA #PART_TYPE_FAT12 ; Set the file system to FAT12 -.396802 8f 01 a0 38 sta $38a001 STA @l FILE_SYSTEM -.396806 a9 00 lda #$00 LDA #0 ; There are no partitions on the disk -.396808 8f 02 a0 38 sta $38a002 STA @l PARTITION -.39680c e2 20 sep #$20 SEP #$20 ; set A short -.39680e af 0d a3 38 lda $38a30d LDA DOS_SECTOR+BPB_SECPERCLUS12_OFF ; Get the # of sectors per cluster (usually 1) -.396812 8f 03 a0 38 sta $38a003 STA @l SECTORS_PER_CLUSTER -.396816 c2 20 rep #$20 REP #$20 ; set A long -.396818 a9 00 00 lda #$0000 LDA #0 ; First sector of the "partition" is 0 -.39681b 8f 04 a0 38 sta $38a004 STA @l FIRSTSECTOR -.39681f 8f 06 a0 38 sta $38a006 STA @l FIRSTSECTOR+2 -.396823 af 16 a3 38 lda $38a316 LDA DOS_SECTOR+BPB_SECPERFAT12_OFF ; Get the number of sectors per FAT -.396827 8f 10 a0 38 sta $38a010 STA @l SEC_PER_FAT -.39682b a9 00 00 lda #$0000 LDA #0 -.39682e 8f 12 a0 38 sta $38a012 STA @l SEC_PER_FAT+2 -.396832 a9 01 00 lda #$0001 LDA #1 ; FAT#1 begins at sector 1 -.396835 8f 14 a0 38 sta $38a014 STA @l FAT_BEGIN_LBA -.396839 18 clc CLC -.39683a 6f 10 a0 38 adc $38a010 ADC @l SEC_PER_FAT -.39683e 8f 18 a0 38 sta $38a018 STA @l FAT2_BEGIN_LBA ; FAT#2 begins SEC_PER_FAT sectors later -.396842 a9 00 00 lda #$0000 LDA #0 -.396845 8f 16 a0 38 sta $38a016 STA @l FAT_BEGIN_LBA+2 -.396849 8f 1a a0 38 sta $38a01a STA @L FAT2_BEGIN_LBA+2 -.39684d 18 clc CLC ; Calculate the root directory's starting sector -.39684e af 18 a0 38 lda $38a018 LDA @l FAT2_BEGIN_LBA -.396852 6f 10 a0 38 adc $38a010 ADC @l SEC_PER_FAT -.396856 8f 20 a0 38 sta $38a020 STA @l ROOT_DIR_FIRST_CLUSTER ; ROOT_DIR_FIRST_CLUSTER will be a sector LBA for FAT12! -.39685a a9 00 00 lda #$0000 LDA #0 -.39685d 8f 22 a0 38 sta $38a022 STA @l ROOT_DIR_FIRST_CLUSTER+2 -.396861 af 11 a3 38 lda $38a311 LDA DOS_SECTOR+BPB_ROOT_MAX_ENTRY12_OFF ; Get the maximum number of directory entries for the root dir -.396865 8f 24 a0 38 sta $38a024 STA @l ROOT_DIR_MAX_ENTRY -.396869 4a lsr a LSR A ; 16 entries per sector -.39686a 4a lsr a LSR A -.39686b 4a lsr a LSR A -.39686c 4a lsr a LSR A ; So now A is the number of sectors in the root directory -.39686d 18 clc CLC -.39686e 6f 20 a0 38 adc $38a020 ADC @L ROOT_DIR_FIRST_CLUSTER ; Add that to the first sector LBA for the root directory -.396872 8f 1c a0 38 sta $38a01c STA @l CLUSTER_BEGIN_LBA ; And that is the LBA for the first cluster -.396876 a9 00 00 lda #$0000 LDA #0 -.396879 8f 1e a0 38 sta $38a01e STA @l CLUSTER_BEGIN_LBA+2 -.39687d af 13 a3 38 lda $38a313 LDA DOS_SECTOR+BPB_TOTAL_SECTORS ; Set the sector limit -.396881 8f 08 a0 38 sta $38a008 STA @l SECTORCOUNT -.396885 a9 00 00 lda #$0000 LDA #0 -.396888 8f 0a a0 38 sta $38a00a STA @l SECTORCOUNT+2 -.39688c af 0e a3 38 lda $38a30e LDA DOS_SECTOR+BPB_RSRVCLUS_OFF ; Get the number of reserved clusters -.396890 8f 0c a0 38 sta $38a00c STA @l NUM_RSRV_SEC -.396894 a9 00 02 lda #$0200 LDA #DOS_SECTOR_SIZE ; Set the size of a FAT12 cluster -.396897 8f 0e a0 38 sta $38a00e STA @l CLUSTER_SIZE -.39689b e2 20 sep #$20 SEP #$20 ; set A short -.39689d af 26 a3 38 lda $38a326 LDA DOS_SECTOR+BPB_SIGNATUREB ; Is signature B $29? -.3968a1 c9 29 cmp #$29 CMP #BPB_EXTENDED_RECORD -.3968a3 80 14 bra $3968b9 BRA no_volume_id ; No: there is no volume ID -.3968a5 is_extended -.3968a5 c2 20 rep #$20 REP #$20 ; set A long -.3968a7 af 27 a3 38 lda $38a327 LDA DOS_SECTOR+BPB_VOLUMEID ; Yes: set the volume ID -.3968ab 8f 26 a0 38 sta $38a026 STA @l VOLUME_ID -.3968af af 29 a3 38 lda $38a329 LDA DOS_SECTOR+BPB_VOLUMEID+2 -.3968b3 8f 28 a0 38 sta $38a028 STA @l VOLUME_ID+2 -.3968b7 80 0d bra $3968c6 BRA ret_success -.3968b9 no_volume_id -.3968b9 c2 20 rep #$20 REP #$20 ; set A long -.3968bb a9 00 00 lda #$0000 LDA #0 ; No: blank the Volume ID -.3968be 8f 26 a0 38 sta $38a026 STA @l VOLUME_ID -.3968c2 8f 28 a0 38 sta $38a028 STA @L VOLUME_ID+2 -.3968c6 ret_success -.3968c6 e2 20 sep #$20 SEP #$20 ; set A short -.3968c8 a9 00 lda #$00 LDA #0 -.3968ca 85 20 sta $0320 STA BIOS_STATUS -.3968cc 28 plp PLP -.3968cd 2b pld PLD -.3968ce ab plb PLB -.3968cf 38 sec SEC -.3968d0 6b rtl RTL -.3968d1 28 plp pass_failure PLP -.3968d2 2b pld PLD -.3968d3 ab plb PLB -.3968d4 18 clc CLC -.3968d5 6b rtl RTL -.3968d6 FDC_CMDBLOCK -.3968d6 8b phb PHB -.3968d7 0b phd PHD -.3968d8 08 php PHP -.3968d9 48 pha PHA ; begin setdbr macro -.3968da 08 php PHP -.3968db e2 20 sep #$20 SEP #$20 ; set A short -.3968dd a9 00 lda #$00 LDA #0 -.3968df 48 pha PHA -.3968e0 ab plb PLB -.3968e1 28 plp PLP -.3968e2 68 pla PLA ; end setdbr macro -.3968e3 48 pha PHA ; begin setdp macro -.3968e4 08 php PHP -.3968e5 c2 20 rep #$20 REP #$20 ; set A long -.3968e7 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.3968ea 5b tcd TCD -.3968eb 28 plp PLP -.3968ec 68 pla PLA ; end setdp macro -.3968ed e2 30 sep #$30 SEP #$30 ; set A&X short -.3968ef e0 01 cpx #$01 CPX #FDC_DEVCMD_MOTOR_ON -.3968f1 f0 0f beq $396902 BEQ motor_on -.3968f3 e0 02 cpx #$02 CPX #FDC_DEVCMD_MOTOR_OFF -.3968f5 f0 11 beq $396908 BEQ motor_off -.3968f7 e0 03 cpx #$03 CPX #FDC_DEVCMD_RECAL -.3968f9 f0 13 beq $39690e BEQ recalibrate -.3968fb 64 20 stz $0320 ret_success STZ BIOS_STATUS -.3968fd 28 plp PLP -.3968fe 2b pld PLD -.3968ff ab plb PLB -.396900 38 sec SEC -.396901 6b rtl RTL -.396902 22 96 62 39 jsl $396296 motor_on JSL FDC_Motor_On -.396906 80 f3 bra $3968fb BRA ret_success -.396908 22 ca 62 39 jsl $3962ca motor_off JSL FDC_Motor_Off -.39690c 80 ed bra $3968fb BRA ret_success -.39690e 22 f5 62 39 jsl $3962f5 recalibrate JSL FDC_Recalibrate_Command -.396912 b0 e7 bcs $3968fb BCS ret_success -.396914 28 plp pass_failure PLP -.396915 2b pld PLD -.396916 ab plb PLB -.396917 18 clc CLC -.396918 6b rtl RTL -.396919 FDC_CHK_MEDIA -.396919 0b phd PHD -.39691a 08 php PHP -.39691b 48 pha PHA ; begin setdp macro -.39691c 08 php PHP -.39691d c2 20 rep #$20 REP #$20 ; set A long -.39691f a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 -.396922 5b tcd TCD -.396923 28 plp PLP -.396924 68 pla PLA ; end setdp macro -.396925 22 96 62 39 jsl $396296 JSL FDC_Motor_On ; Turn on the motor -.396929 e2 20 sep #$20 SEP #$20 ; set A short -.39692b af f7 13 af lda $af13f7 LDA @l SIO_FDC_DIR ; Check if the DSKCHG bit is set -.39692f 89 80 bit #$80 BIT #FDC_DIR_DSKCHG -.396931 f0 42 beq $396975 BEQ ret_true ; If not: assume the disk is present -.396933 a9 00 lda #$00 LDA #0 -.396935 85 00 sta $0300 STA FDC_DRIVE -.396937 a9 00 lda #$00 LDA #0 -.396939 85 01 sta $0301 STA FDC_HEAD -.39693b a9 50 lda #$50 LDA #80 -.39693d 85 02 sta $0302 STA FDC_CYLINDER -.39693f 22 d5 64 39 jsl $3964d5 JSL FDC_Seek_Track ; Attempt to seek to track 80 -.396943 90 34 bcc $396979 BCC ret_false ; If fail: return false -.396945 c2 10 rep #$10 REP #$10 ; set X long -.396947 a2 1e 8b ldx #$8b1e LDX #<>FDC_MOTOR_TIME ; Wait a suitable time for the motor to spin up -.39694a a0 41 00 ldy #$0041 LDY #`FDC_MOTOR_TIME -.39694d 22 26 16 39 jsl $391626 JSL IDELAY -.396951 22 2a 63 39 jsl $39632a JSL FDC_Sense_Int_Status -.396955 a5 06 lda $0306 LDA FDC_ST0 -.396957 29 d0 and #$d0 AND #%11010000 -.396959 d0 1e bne $396979 BNE ret_false -.39695b 22 f5 62 39 jsl $3962f5 JSL FDC_Recalibrate_Command ; Attempt to recalibrate -.39695f 90 18 bcc $396979 BCC ret_false ; If fail: return false -.396961 a2 1e 8b ldx #$8b1e LDX #<>FDC_MOTOR_TIME ; Wait a suitable time for the motor to spin up -.396964 a0 41 00 ldy #$0041 LDY #`FDC_MOTOR_TIME -.396967 22 26 16 39 jsl $391626 JSL IDELAY -.39696b 22 2a 63 39 jsl $39632a JSL FDC_Sense_Int_Status -.39696f a5 06 lda $0306 LDA FDC_ST0 -.396971 29 d0 and #$d0 AND #%11010000 -.396973 d0 04 bne $396979 BNE ret_false -.396975 ret_true -.396975 28 plp PLP -.396976 2b pld PLD -.396977 38 sec SEC +.396783 ce 34 05 dec $0534 DEC FDC_CMD_RETRY ; Decrement the retry counter +.396786 30 13 bmi $39679b BMI pass_failure ; If it's gone negative, we should quit with an error +.396788 22 7a 62 39 jsl $39627a JSL FDC_INIT ; Otherwise, reinitialize the FDC +.39678c 80 d7 bra $396765 BRA try_read ; And try the read again +.39678e read_failure +.39678e e2 20 sep #$20 SEP #$20 ; set A short +.396790 a9 82 lda #$82 LDA #BIOS_ERR_READ +.396792 80 04 bra $396798 BRA ret_failure +.396794 seek_failure +.396794 e2 20 sep #$20 SEP #$20 ; set A short +.396796 a9 84 lda #$84 LDA #BIOS_ERR_TRACK +.396798 8d 20 03 sta $0320 ret_failure STA @w BIOS_STATUS +.39679b 28 plp pass_failure PLP +.39679c 2b pld PLD +.39679d ab plb PLB +.39679e 18 clc CLC +.39679f 6b rtl RTL +.3967a0 FDC_PUTBLOCK +.3967a0 8b phb PHB +.3967a1 0b phd PHD +.3967a2 08 php PHP +.3967a3 48 pha PHA ; begin setdbr macro +.3967a4 08 php PHP +.3967a5 e2 20 sep #$20 SEP #$20 ; set A short +.3967a7 a9 00 lda #$00 LDA #0 +.3967a9 48 pha PHA +.3967aa ab plb PLB +.3967ab 28 plp PLP +.3967ac 68 pla PLA ; end setdbr macro +.3967ad 48 pha PHA ; begin setdp macro +.3967ae 08 php PHP +.3967af c2 20 rep #$20 REP #$20 ; set A long +.3967b1 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.3967b4 5b tcd TCD +.3967b5 28 plp PLP +.3967b6 68 pla PLA ; end setdp macro +.3967b7 e2 20 sep #$20 SEP #$20 ; set A short +.3967b9 a9 03 lda #$03 LDA #3 ; Set the number of retries we're willing to do +.3967bb 8d 34 05 sta $0534 STA @w FDC_CMD_RETRY +.3967be c2 30 rep #$30 REP #$30 ; set A&X long +.3967c0 22 e5 66 39 jsl $3966e5 JSL LBA2CHS ; Convert the LBA to CHS +.3967c4 22 17 66 39 jsl $396617 retry JSL FDC_Write_Sector ; Write the sector +.3967c8 b0 03 bcs $3967cd BCS chk_st0 +.3967ca 82 28 00 brl $3967f5 BRL attempt_retry +.3967cd chk_st0 +.3967cd e2 20 sep #$20 SEP #$20 ; set A short +.3967cf a5 06 lda $0306 LDA FDC_ST0 +.3967d1 29 d0 and #$d0 AND #%11010000 ; Check the error bits +.3967d3 d0 0c bne $3967e1 BNE write_failure +.3967d5 ret_success +.3967d5 e2 20 sep #$20 SEP #$20 ; set A short +.3967d7 a9 00 lda #$00 LDA #0 +.3967d9 8d 20 03 sta $0320 STA @w BIOS_STATUS +.3967dc 28 plp PLP +.3967dd 2b pld PLD +.3967de ab plb PLB +.3967df 38 sec SEC +.3967e0 6b rtl RTL +.3967e1 write_failure +.3967e1 e2 20 sep #$20 SEP #$20 ; set A short +.3967e3 a5 07 lda $0307 LDA FDC_ST1 ; Check ST1 for write protect +.3967e5 89 02 bit #$02 BIT #FDC_ST1_NW +.3967e7 f0 04 beq $3967ed BEQ generic_err +.3967e9 a9 86 lda #$86 LDA #BIOS_ERR_WRITEPROT ; Yes: return a write-protect error +.3967eb 80 17 bra $396804 BRA ret_failure +.3967ed 89 10 bit #$10 generic_err BIT #FDC_ST1_OR ; TODO: properly handle over/under run errors +.3967ef d0 e4 bne $3967d5 BNE ret_success +.3967f1 89 80 bit #$80 BIT #FDC_ST1_EN ; TODO: properly handle end-of-track +.3967f3 d0 e0 bne $3967d5 BNE ret_success +.3967f5 attempt_retry +.3967f5 e2 20 sep #$20 SEP #$20 ; set A short +.3967f7 ce 34 05 dec $0534 DEC @w FDC_CMD_RETRY ; Count down the retries +.3967fa d0 c8 bne $3967c4 BNE retry ; And retry unless we have none left +.3967fc a9 83 lda #$83 LDA #BIOS_ERR_WRITE ; Otherwise: return a generic write error +.3967fe 80 04 bra $396804 BRA ret_failure +.396800 seek_failure +.396800 e2 20 sep #$20 SEP #$20 ; set A short +.396802 a9 84 lda #$84 LDA #BIOS_ERR_TRACK +.396804 ret_failure +.396804 8d 20 03 sta $0320 STA @w BIOS_STATUS +.396807 28 plp pass_failure PLP +.396808 2b pld PLD +.396809 ab plb PLB +.39680a 18 clc CLC +.39680b 6b rtl RTL +.39680c FDC_MOUNT +.39680c 8b phb PHB +.39680d 0b phd PHD +.39680e 08 php PHP +.39680f 48 pha PHA ; begin setdbr macro +.396810 08 php PHP +.396811 e2 20 sep #$20 SEP #$20 ; set A short +.396813 a9 00 lda #$00 LDA #0 +.396815 48 pha PHA +.396816 ab plb PLB +.396817 28 plp PLP +.396818 68 pla PLA ; end setdbr macro +.396819 48 pha PHA ; begin setdp macro +.39681a 08 php PHP +.39681b c2 20 rep #$20 REP #$20 ; set A long +.39681d a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396820 5b tcd TCD +.396821 28 plp PLP +.396822 68 pla PLA ; end setdp macro +.396823 22 7a 62 39 jsl $39627a JSL FDC_INIT +.396827 e2 20 sep #$20 SEP #$20 ; set A short +.396829 c2 10 rep #$10 REP #$10 ; set X long +.39682b a9 00 lda #$00 LDA #0 +.39682d a2 00 00 ldx #$0000 LDX #0 +.396830 9f 00 a3 38 sta $38a300,x zero_loop STA DOS_SECTOR,X +.396834 e8 inx INX +.396835 e0 00 02 cpx #$0200 CPX #512 +.396838 d0 f6 bne $396830 BNE zero_loop +.39683a a9 00 lda #$00 LDA #0 ; We only support drive 0 +.39683c 85 00 sta $0300 STA FDC_DRIVE +.39683e 22 f6 62 39 jsl $3962f6 JSL FDC_Motor_On ; Turn the motor on +.396842 c2 30 rep #$30 REP #$30 ; set A&X long +.396844 a9 00 00 lda #$0000 LDA #0 ; We want sector 0 +.396847 85 22 sta $0322 STA BIOS_LBA +.396849 85 24 sta $0324 STA BIOS_LBA+2 +.39684b a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; And load it into DOS_SECTOR +.39684e 85 26 sta $0326 STA BIOS_BUFF_PTR +.396850 a9 38 00 lda #$0038 LDA #`DOS_SECTOR +.396853 85 28 sta $0328 STA BIOS_BUFF_PTR+2 +.396855 22 3b 67 39 jsl $39673b JSL FDC_GETBLOCK ; Attempt to read the data +.396859 b0 03 bcs $39685e BCS parse_boot ; If ok: start parsing the boot record +.39685b 82 d3 00 brl $396931 BRL pass_failure ; Pass the error up the chain +.39685e parse_boot +.39685e e2 20 sep #$20 SEP #$20 ; set A short +.396860 a9 00 lda #$00 LDA #PART_TYPE_FAT12 ; Set the file system to FAT12 +.396862 8f 01 a0 38 sta $38a001 STA @l FILE_SYSTEM +.396866 a9 00 lda #$00 LDA #0 ; There are no partitions on the disk +.396868 8f 02 a0 38 sta $38a002 STA @l PARTITION +.39686c e2 20 sep #$20 SEP #$20 ; set A short +.39686e af 0d a3 38 lda $38a30d LDA DOS_SECTOR+BPB_SECPERCLUS12_OFF ; Get the # of sectors per cluster (usually 1) +.396872 8f 03 a0 38 sta $38a003 STA @l SECTORS_PER_CLUSTER +.396876 c2 20 rep #$20 REP #$20 ; set A long +.396878 a9 00 00 lda #$0000 LDA #0 ; First sector of the "partition" is 0 +.39687b 8f 04 a0 38 sta $38a004 STA @l FIRSTSECTOR +.39687f 8f 06 a0 38 sta $38a006 STA @l FIRSTSECTOR+2 +.396883 af 16 a3 38 lda $38a316 LDA DOS_SECTOR+BPB_SECPERFAT12_OFF ; Get the number of sectors per FAT +.396887 8f 10 a0 38 sta $38a010 STA @l SEC_PER_FAT +.39688b a9 00 00 lda #$0000 LDA #0 +.39688e 8f 12 a0 38 sta $38a012 STA @l SEC_PER_FAT+2 +.396892 a9 01 00 lda #$0001 LDA #1 ; FAT#1 begins at sector 1 +.396895 8f 14 a0 38 sta $38a014 STA @l FAT_BEGIN_LBA +.396899 18 clc CLC +.39689a 6f 10 a0 38 adc $38a010 ADC @l SEC_PER_FAT +.39689e 8f 18 a0 38 sta $38a018 STA @l FAT2_BEGIN_LBA ; FAT#2 begins SEC_PER_FAT sectors later +.3968a2 a9 00 00 lda #$0000 LDA #0 +.3968a5 8f 16 a0 38 sta $38a016 STA @l FAT_BEGIN_LBA+2 +.3968a9 8f 1a a0 38 sta $38a01a STA @L FAT2_BEGIN_LBA+2 +.3968ad 18 clc CLC ; Calculate the root directory's starting sector +.3968ae af 18 a0 38 lda $38a018 LDA @l FAT2_BEGIN_LBA +.3968b2 6f 10 a0 38 adc $38a010 ADC @l SEC_PER_FAT +.3968b6 8f 20 a0 38 sta $38a020 STA @l ROOT_DIR_FIRST_CLUSTER ; ROOT_DIR_FIRST_CLUSTER will be a sector LBA for FAT12! +.3968ba a9 00 00 lda #$0000 LDA #0 +.3968bd 8f 22 a0 38 sta $38a022 STA @l ROOT_DIR_FIRST_CLUSTER+2 +.3968c1 af 11 a3 38 lda $38a311 LDA DOS_SECTOR+BPB_ROOT_MAX_ENTRY12_OFF ; Get the maximum number of directory entries for the root dir +.3968c5 8f 24 a0 38 sta $38a024 STA @l ROOT_DIR_MAX_ENTRY +.3968c9 4a lsr a LSR A ; 16 entries per sector +.3968ca 4a lsr a LSR A +.3968cb 4a lsr a LSR A +.3968cc 4a lsr a LSR A ; So now A is the number of sectors in the root directory +.3968cd 18 clc CLC +.3968ce 6f 20 a0 38 adc $38a020 ADC @L ROOT_DIR_FIRST_CLUSTER ; Add that to the first sector LBA for the root directory +.3968d2 8f 1c a0 38 sta $38a01c STA @l CLUSTER_BEGIN_LBA ; And that is the LBA for the first cluster +.3968d6 a9 00 00 lda #$0000 LDA #0 +.3968d9 8f 1e a0 38 sta $38a01e STA @l CLUSTER_BEGIN_LBA+2 +.3968dd af 13 a3 38 lda $38a313 LDA DOS_SECTOR+BPB_TOTAL_SECTORS ; Set the sector limit +.3968e1 8f 08 a0 38 sta $38a008 STA @l SECTORCOUNT +.3968e5 a9 00 00 lda #$0000 LDA #0 +.3968e8 8f 0a a0 38 sta $38a00a STA @l SECTORCOUNT+2 +.3968ec af 0e a3 38 lda $38a30e LDA DOS_SECTOR+BPB_RSRVCLUS_OFF ; Get the number of reserved clusters +.3968f0 8f 0c a0 38 sta $38a00c STA @l NUM_RSRV_SEC +.3968f4 a9 00 02 lda #$0200 LDA #DOS_SECTOR_SIZE ; Set the size of a FAT12 cluster +.3968f7 8f 0e a0 38 sta $38a00e STA @l CLUSTER_SIZE +.3968fb e2 20 sep #$20 SEP #$20 ; set A short +.3968fd af 26 a3 38 lda $38a326 LDA DOS_SECTOR+BPB_SIGNATUREB ; Is signature B $29? +.396901 c9 29 cmp #$29 CMP #BPB_EXTENDED_RECORD +.396903 80 14 bra $396919 BRA no_volume_id ; No: there is no volume ID +.396905 is_extended +.396905 c2 20 rep #$20 REP #$20 ; set A long +.396907 af 27 a3 38 lda $38a327 LDA DOS_SECTOR+BPB_VOLUMEID ; Yes: set the volume ID +.39690b 8f 26 a0 38 sta $38a026 STA @l VOLUME_ID +.39690f af 29 a3 38 lda $38a329 LDA DOS_SECTOR+BPB_VOLUMEID+2 +.396913 8f 28 a0 38 sta $38a028 STA @l VOLUME_ID+2 +.396917 80 0d bra $396926 BRA ret_success +.396919 no_volume_id +.396919 c2 20 rep #$20 REP #$20 ; set A long +.39691b a9 00 00 lda #$0000 LDA #0 ; No: blank the Volume ID +.39691e 8f 26 a0 38 sta $38a026 STA @l VOLUME_ID +.396922 8f 28 a0 38 sta $38a028 STA @L VOLUME_ID+2 +.396926 ret_success +.396926 e2 20 sep #$20 SEP #$20 ; set A short +.396928 a9 00 lda #$00 LDA #0 +.39692a 85 20 sta $0320 STA BIOS_STATUS +.39692c 28 plp PLP +.39692d 2b pld PLD +.39692e ab plb PLB +.39692f 38 sec SEC +.396930 6b rtl RTL +.396931 28 plp pass_failure PLP +.396932 2b pld PLD +.396933 ab plb PLB +.396934 18 clc CLC +.396935 6b rtl RTL +.396936 FDC_CMDBLOCK +.396936 8b phb PHB +.396937 0b phd PHD +.396938 08 php PHP +.396939 48 pha PHA ; begin setdbr macro +.39693a 08 php PHP +.39693b e2 20 sep #$20 SEP #$20 ; set A short +.39693d a9 00 lda #$00 LDA #0 +.39693f 48 pha PHA +.396940 ab plb PLB +.396941 28 plp PLP +.396942 68 pla PLA ; end setdbr macro +.396943 48 pha PHA ; begin setdp macro +.396944 08 php PHP +.396945 c2 20 rep #$20 REP #$20 ; set A long +.396947 a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.39694a 5b tcd TCD +.39694b 28 plp PLP +.39694c 68 pla PLA ; end setdp macro +.39694d e2 30 sep #$30 SEP #$30 ; set A&X short +.39694f e0 01 cpx #$01 CPX #FDC_DEVCMD_MOTOR_ON +.396951 f0 0f beq $396962 BEQ motor_on +.396953 e0 02 cpx #$02 CPX #FDC_DEVCMD_MOTOR_OFF +.396955 f0 11 beq $396968 BEQ motor_off +.396957 e0 03 cpx #$03 CPX #FDC_DEVCMD_RECAL +.396959 f0 13 beq $39696e BEQ recalibrate +.39695b 64 20 stz $0320 ret_success STZ BIOS_STATUS +.39695d 28 plp PLP +.39695e 2b pld PLD +.39695f ab plb PLB +.396960 38 sec SEC +.396961 6b rtl RTL +.396962 22 f6 62 39 jsl $3962f6 motor_on JSL FDC_Motor_On +.396966 80 f3 bra $39695b BRA ret_success +.396968 22 2a 63 39 jsl $39632a motor_off JSL FDC_Motor_Off +.39696c 80 ed bra $39695b BRA ret_success +.39696e 22 55 63 39 jsl $396355 recalibrate JSL FDC_Recalibrate_Command +.396972 b0 e7 bcs $39695b BCS ret_success +.396974 28 plp pass_failure PLP +.396975 2b pld PLD +.396976 ab plb PLB +.396977 18 clc CLC .396978 6b rtl RTL -.396979 ret_false -.396979 28 plp PLP -.39697a 2b pld PLD -.39697b 18 clc CLC -.39697c 6b rtl RTL -.39697d FDC_WRITEVBR -.39697d 8b phb PHB -.39697e 0b phd PHD -.39697f 08 php PHP -.396980 48 pha PHA ; begin setdbr macro -.396981 08 php PHP -.396982 e2 20 sep #$20 SEP #$20 ; set A short -.396984 a9 00 lda #$00 LDA #0 -.396986 48 pha PHA -.396987 ab plb PLB -.396988 28 plp PLP -.396989 68 pla PLA ; end setdbr macro -.39698a 48 pha PHA ; begin setdp macro -.39698b 08 php PHP -.39698c c2 20 rep #$20 REP #$20 ; set A long -.39698e a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.396991 5b tcd TCD -.396992 28 plp PLP -.396993 68 pla PLA ; end setdp macro -.396994 22 ac 67 39 jsl $3967ac JSL FDC_MOUNT ; Mount the floppy disk -.396998 c2 30 rep #$30 REP #$30 ; set A&X long -.39699a a9 00 00 lda #$0000 LDA #0 ; Clear the sector buffer -.39699d a2 00 00 ldx #$0000 LDX #0 -.3969a0 9f 00 a3 38 sta $38a300,x clr_loop STA DOS_SECTOR,X -.3969a4 e8 inx INX -.3969a5 e8 inx INX -.3969a6 e0 00 02 cpx #$0200 CPX #512 -.3969a9 d0 f5 bne $3969a0 BNE clr_loop -.3969ab e2 20 sep #$20 SEP #$20 ; set A short -.3969ad a2 00 00 ldx #$0000 LDX #0 ; Copy the prototype VBR to the sector buffer -.3969b0 bf 65 6a 39 lda $396a65,x copy_loop LDA FDC_VBR_BEGIN,X -.3969b4 9f 00 a3 38 sta $38a300,x STA DOS_SECTOR,X -.3969b8 e8 inx INX -.3969b9 e0 c9 00 cpx #$00c9 CPX #<>(FDC_VBR_END - FDC_VBR_BEGIN + 1) -.3969bc d0 f2 bne $3969b0 BNE copy_loop -.3969be a0 00 00 ldy #$0000 LDY #0 ; Copy the boot binary path to the VBR -.3969c1 a2 40 00 ldx #$0040 LDX #FDC_VBR_PATH -.3969c4 b7 3c lda [$035c],y path_copy_loop LDA [DOS_RUN_PTR],Y -.3969c6 9f 00 a3 38 sta $38a300,x STA DOS_SECTOR,X -.3969ca f0 07 beq $3969d3 BEQ path_copy_done -.3969cc e8 inx INX -.3969cd c8 iny INY -.3969ce c0 80 00 cpy #$0080 CPY #128 -.3969d1 d0 f1 bne $3969c4 BNE path_copy_loop -.3969d3 path_copy_done -.3969d3 c2 20 rep #$20 REP #$20 ; set A long -.3969d5 a9 55 aa lda #$aa55 LDA #$AA55 ; Set the VBR signature bytes at the end -.3969d8 8f fe a4 38 sta $38a4fe STA DOS_SECTOR+BPB_SIGNATURE -.3969dc c2 20 rep #$20 REP #$20 ; set A long -.3969de a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; Point to the BIOS buffer -.3969e1 85 06 sta $0326 STA BIOS_BUFF_PTR -.3969e3 a9 38 00 lda #$0038 LDA #`DOS_SECTOR -.3969e6 85 08 sta $0328 STA BIOS_BUFF_PTR+2 -.3969e8 a9 00 00 lda #$0000 LDA #0 ; Set the sector to #0 (boot record) -.3969eb 85 02 sta $0322 STA BIOS_LBA -.3969ed 85 04 sta $0324 STA BIOS_LBA+2 -.3969ef e2 20 sep #$20 SEP #$20 ; set A short -.3969f1 a9 00 lda #$00 LDA #BIOS_DEV_FDC -.3969f3 85 01 sta $0321 STA BIOS_DEV -.3969f5 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Attempt to write the boot record -.3969f9 b0 09 bcs $396a04 BCS ret_success -.3969fb 22 ca 62 39 jsl $3962ca JSL FDC_Motor_Off -.3969ff 28 plp PLP ; Return the failure -.396a00 2b pld PLD -.396a01 ab plb PLB -.396a02 18 clc CLC -.396a03 6b rtl RTL -.396a04 22 ca 62 39 jsl $3962ca ret_success JSL FDC_Motor_Off -.396a08 e2 20 sep #$20 SEP #$20 ; set A short -.396a0a a9 00 lda #$00 LDA #0 -.396a0c 85 00 sta $0320 STA BIOS_STATUS -.396a0e 28 plp PLP -.396a0f 2b pld PLD -.396a10 ab plb PLB -.396a11 38 sec SEC -.396a12 6b rtl RTL -.396a13 FDC_TIME_HANDLE -.396a13 08 php PHP -.396a14 e2 20 sep #$20 SEP #$20 ; set A short -.396a16 af 4e a0 38 lda $38a04e LDA @l FDC_MOTOR_TIMER ; Check the FDC motor count-down timer -.396a1a d0 06 bne $396a22 BNE dec_motor ; If not zero: decrement the timer -.396a1c af 4f a0 38 lda $38a04f LDA @l FDC_MOTOR_TIMER+1 ; Check the high byte -.396a20 f0 28 beq $396a4a BEQ sof_timeout ; If zero: move on to the next timer -.396a22 af 4e a0 38 lda $38a04e dec_motor LDA @l FDC_MOTOR_TIMER ; Decrement the low byte -.396a26 3a dec a DEC A -.396a27 8f 4e a0 38 sta $38a04e STA @l FDC_MOTOR_TIMER -.396a2b c9 ff cmp #$ff CMP #$FF ; Did it roll over? -.396a2d d0 0b bne $396a3a BNE chk_motor_end ; No: check to see if we're a the end -.396a2f af 4f a0 38 lda $38a04f LDA @l FDC_MOTOR_TIMER+1 ; Decrement the high byte -.396a33 3a dec a DEC A -.396a34 8f 4f a0 38 sta $38a04f STA @l FDC_MOTOR_TIMER+1 -.396a38 80 10 bra $396a4a BRA sof_timeout ; And move on to the next timer -.396a3a af 4e a0 38 lda $38a04e chk_motor_end LDA @l FDC_MOTOR_TIMER ; Check timer -.396a3e d0 0a bne $396a4a BNE sof_timeout ; if it's <>0, move on to the next timer -.396a40 af 4f a0 38 lda $38a04f LDA @l FDC_MOTOR_TIMER+1 -.396a44 d0 04 bne $396a4a BNE sof_timeout -.396a46 22 ca 62 39 jsl $3962ca JSL FDC_Motor_Off ; Otherwise, turn off the motor -.396a4a sof_timeout -.396a4a e2 20 sep #$20 SEP #$20 ; set A short -.396a4c af 2d 03 00 lda $00032d LDA @l BIOS_TIMER ; Check the BIOS_TIMER -.396a50 f0 11 beq $396a63 BEQ sof_int_done ; If it's 0, we don't do anything -.396a52 3a dec a DEC A ; Count down one tick -.396a53 8f 2d 03 00 sta $00032d STA @l BIOS_TIMER -.396a57 d0 0a bne $396a63 BNE sof_int_done ; If not 0, we're done -.396a59 af 2c 03 00 lda $00032c LDA @l BIOS_FLAGS ; Otherwise: flag a time out event -.396a5d 09 80 ora #$80 ORA #BIOS_TIMEOUT -.396a5f 8f 2c 03 00 sta $00032c STA @l BIOS_FLAGS -.396a63 28 plp sof_int_done PLP -.396a64 6b rtl RTL +.396979 FDC_CHK_MEDIA +.396979 0b phd PHD +.39697a 08 php PHP +.39697b 48 pha PHA ; begin setdp macro +.39697c 08 php PHP +.39697d c2 20 rep #$20 REP #$20 ; set A long +.39697f a9 00 03 lda #$0300 LDA #FDC_DRIVE ; set DP to page 0 +.396982 5b tcd TCD +.396983 28 plp PLP +.396984 68 pla PLA ; end setdp macro +.396985 22 f6 62 39 jsl $3962f6 JSL FDC_Motor_On ; Turn on the motor +.396989 e2 20 sep #$20 SEP #$20 ; set A short +.39698b af f7 13 af lda $af13f7 LDA @l SIO_FDC_DIR ; Check if the DSKCHG bit is set +.39698f 89 80 bit #$80 BIT #FDC_DIR_DSKCHG +.396991 f0 42 beq $3969d5 BEQ ret_true ; If not: assume the disk is present +.396993 a9 00 lda #$00 LDA #0 +.396995 85 00 sta $0300 STA FDC_DRIVE +.396997 a9 00 lda #$00 LDA #0 +.396999 85 01 sta $0301 STA FDC_HEAD +.39699b a9 50 lda #$50 LDA #80 +.39699d 85 02 sta $0302 STA FDC_CYLINDER +.39699f 22 35 65 39 jsl $396535 JSL FDC_Seek_Track ; Attempt to seek to track 80 +.3969a3 90 34 bcc $3969d9 BCC ret_false ; If fail: return false +.3969a5 c2 10 rep #$10 REP #$10 ; set X long +.3969a7 a2 1e 8b ldx #$8b1e LDX #<>FDC_MOTOR_TIME ; Wait a suitable time for the motor to spin up +.3969aa a0 41 00 ldy #$0041 LDY #`FDC_MOTOR_TIME +.3969ad 22 78 16 39 jsl $391678 JSL IDELAY +.3969b1 22 8a 63 39 jsl $39638a JSL FDC_Sense_Int_Status +.3969b5 a5 06 lda $0306 LDA FDC_ST0 +.3969b7 29 d0 and #$d0 AND #%11010000 +.3969b9 d0 1e bne $3969d9 BNE ret_false +.3969bb 22 55 63 39 jsl $396355 JSL FDC_Recalibrate_Command ; Attempt to recalibrate +.3969bf 90 18 bcc $3969d9 BCC ret_false ; If fail: return false +.3969c1 a2 1e 8b ldx #$8b1e LDX #<>FDC_MOTOR_TIME ; Wait a suitable time for the motor to spin up +.3969c4 a0 41 00 ldy #$0041 LDY #`FDC_MOTOR_TIME +.3969c7 22 78 16 39 jsl $391678 JSL IDELAY +.3969cb 22 8a 63 39 jsl $39638a JSL FDC_Sense_Int_Status +.3969cf a5 06 lda $0306 LDA FDC_ST0 +.3969d1 29 d0 and #$d0 AND #%11010000 +.3969d3 d0 04 bne $3969d9 BNE ret_false +.3969d5 ret_true +.3969d5 28 plp PLP +.3969d6 2b pld PLD +.3969d7 38 sec SEC +.3969d8 6b rtl RTL +.3969d9 ret_false +.3969d9 28 plp PLP +.3969da 2b pld PLD +.3969db 18 clc CLC +.3969dc 6b rtl RTL +.3969dd FDC_WRITEVBR +.3969dd 8b phb PHB +.3969de 0b phd PHD +.3969df 08 php PHP +.3969e0 48 pha PHA ; begin setdbr macro +.3969e1 08 php PHP +.3969e2 e2 20 sep #$20 SEP #$20 ; set A short +.3969e4 a9 00 lda #$00 LDA #0 +.3969e6 48 pha PHA +.3969e7 ab plb PLB +.3969e8 28 plp PLP +.3969e9 68 pla PLA ; end setdbr macro +.3969ea 48 pha PHA ; begin setdp macro +.3969eb 08 php PHP +.3969ec c2 20 rep #$20 REP #$20 ; set A long +.3969ee a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.3969f1 5b tcd TCD +.3969f2 28 plp PLP +.3969f3 68 pla PLA ; end setdp macro +.3969f4 22 0c 68 39 jsl $39680c JSL FDC_MOUNT ; Mount the floppy disk +.3969f8 c2 30 rep #$30 REP #$30 ; set A&X long +.3969fa a9 00 00 lda #$0000 LDA #0 ; Clear the sector buffer +.3969fd a2 00 00 ldx #$0000 LDX #0 +.396a00 9f 00 a3 38 sta $38a300,x clr_loop STA DOS_SECTOR,X +.396a04 e8 inx INX +.396a05 e8 inx INX +.396a06 e0 00 02 cpx #$0200 CPX #512 +.396a09 d0 f5 bne $396a00 BNE clr_loop +.396a0b e2 20 sep #$20 SEP #$20 ; set A short +.396a0d a2 00 00 ldx #$0000 LDX #0 ; Copy the prototype VBR to the sector buffer +.396a10 bf c5 6a 39 lda $396ac5,x copy_loop LDA FDC_VBR_BEGIN,X +.396a14 9f 00 a3 38 sta $38a300,x STA DOS_SECTOR,X +.396a18 e8 inx INX +.396a19 e0 c9 00 cpx #$00c9 CPX #<>(FDC_VBR_END - FDC_VBR_BEGIN + 1) +.396a1c d0 f2 bne $396a10 BNE copy_loop +.396a1e a0 00 00 ldy #$0000 LDY #0 ; Copy the boot binary path to the VBR +.396a21 a2 40 00 ldx #$0040 LDX #FDC_VBR_PATH +.396a24 b7 3c lda [$035c],y path_copy_loop LDA [DOS_RUN_PTR],Y +.396a26 9f 00 a3 38 sta $38a300,x STA DOS_SECTOR,X +.396a2a f0 07 beq $396a33 BEQ path_copy_done +.396a2c e8 inx INX +.396a2d c8 iny INY +.396a2e c0 80 00 cpy #$0080 CPY #128 +.396a31 d0 f1 bne $396a24 BNE path_copy_loop +.396a33 path_copy_done +.396a33 c2 20 rep #$20 REP #$20 ; set A long +.396a35 a9 55 aa lda #$aa55 LDA #$AA55 ; Set the VBR signature bytes at the end +.396a38 8f fe a4 38 sta $38a4fe STA DOS_SECTOR+BPB_SIGNATURE +.396a3c c2 20 rep #$20 REP #$20 ; set A long +.396a3e a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR ; Point to the BIOS buffer +.396a41 85 06 sta $0326 STA BIOS_BUFF_PTR +.396a43 a9 38 00 lda #$0038 LDA #`DOS_SECTOR +.396a46 85 08 sta $0328 STA BIOS_BUFF_PTR+2 +.396a48 a9 00 00 lda #$0000 LDA #0 ; Set the sector to #0 (boot record) +.396a4b 85 02 sta $0322 STA BIOS_LBA +.396a4d 85 04 sta $0324 STA BIOS_LBA+2 +.396a4f e2 20 sep #$20 SEP #$20 ; set A short +.396a51 a9 00 lda #$00 LDA #BIOS_DEV_FDC +.396a53 85 01 sta $0321 STA BIOS_DEV +.396a55 22 24 10 00 jsl $001024 JSL PUTBLOCK ; Attempt to write the boot record +.396a59 b0 09 bcs $396a64 BCS ret_success +.396a5b 22 2a 63 39 jsl $39632a JSL FDC_Motor_Off +.396a5f 28 plp PLP ; Return the failure +.396a60 2b pld PLD +.396a61 ab plb PLB +.396a62 18 clc CLC +.396a63 6b rtl RTL +.396a64 22 2a 63 39 jsl $39632a ret_success JSL FDC_Motor_Off +.396a68 e2 20 sep #$20 SEP #$20 ; set A short +.396a6a a9 00 lda #$00 LDA #0 +.396a6c 85 00 sta $0320 STA BIOS_STATUS +.396a6e 28 plp PLP +.396a6f 2b pld PLD +.396a70 ab plb PLB +.396a71 38 sec SEC +.396a72 6b rtl RTL +.396a73 FDC_TIME_HANDLE +.396a73 08 php PHP +.396a74 e2 20 sep #$20 SEP #$20 ; set A short +.396a76 af 4e a0 38 lda $38a04e LDA @l FDC_MOTOR_TIMER ; Check the FDC motor count-down timer +.396a7a d0 06 bne $396a82 BNE dec_motor ; If not zero: decrement the timer +.396a7c af 4f a0 38 lda $38a04f LDA @l FDC_MOTOR_TIMER+1 ; Check the high byte +.396a80 f0 28 beq $396aaa BEQ sof_timeout ; If zero: move on to the next timer +.396a82 af 4e a0 38 lda $38a04e dec_motor LDA @l FDC_MOTOR_TIMER ; Decrement the low byte +.396a86 3a dec a DEC A +.396a87 8f 4e a0 38 sta $38a04e STA @l FDC_MOTOR_TIMER +.396a8b c9 ff cmp #$ff CMP #$FF ; Did it roll over? +.396a8d d0 0b bne $396a9a BNE chk_motor_end ; No: check to see if we're a the end +.396a8f af 4f a0 38 lda $38a04f LDA @l FDC_MOTOR_TIMER+1 ; Decrement the high byte +.396a93 3a dec a DEC A +.396a94 8f 4f a0 38 sta $38a04f STA @l FDC_MOTOR_TIMER+1 +.396a98 80 10 bra $396aaa BRA sof_timeout ; And move on to the next timer +.396a9a af 4e a0 38 lda $38a04e chk_motor_end LDA @l FDC_MOTOR_TIMER ; Check timer +.396a9e d0 0a bne $396aaa BNE sof_timeout ; if it's <>0, move on to the next timer +.396aa0 af 4f a0 38 lda $38a04f LDA @l FDC_MOTOR_TIMER+1 +.396aa4 d0 04 bne $396aaa BNE sof_timeout +.396aa6 22 2a 63 39 jsl $39632a JSL FDC_Motor_Off ; Otherwise, turn off the motor +.396aaa sof_timeout +.396aaa e2 20 sep #$20 SEP #$20 ; set A short +.396aac af 2d 03 00 lda $00032d LDA @l BIOS_TIMER ; Check the BIOS_TIMER +.396ab0 f0 11 beq $396ac3 BEQ sof_int_done ; If it's 0, we don't do anything +.396ab2 3a dec a DEC A ; Count down one tick +.396ab3 8f 2d 03 00 sta $00032d STA @l BIOS_TIMER +.396ab7 d0 0a bne $396ac3 BNE sof_int_done ; If not 0, we're done +.396ab9 af 2c 03 00 lda $00032c LDA @l BIOS_FLAGS ; Otherwise: flag a time out event +.396abd 09 80 ora #$80 ORA #BIOS_TIMEOUT +.396abf 8f 2c 03 00 sta $00032c STA @l BIOS_FLAGS +.396ac3 28 plp sof_int_done PLP +.396ac4 6b rtl RTL =62 FDC_BOOT_START = 62 ; Entry point to the boot code =64 FDC_VBR_PATH = 64 ; Offset to the path in the VBR -.396a65 FDC_VBR_BEGIN ->396a65 eb 00 90 start .byte $EB, $00, $90 ; Entry point ->396a68 43 32 35 36 44 4f 53 20 magic .text "C256DOS " ; OEM name / magic text for booting ->396a70 00 02 bytes_per_sec .word 512 ; How many bytes per sector ->396a72 01 sec_per_cluster .byte 1 ; How many sectors per cluster ->396a73 01 00 rsrv_sectors .word 1 ; Number of reserved sectors ->396a75 02 num_fat .byte 2 ; Number of FATs ->396a76 e0 00 max_dir_entry .word (32-18)*16 ; Total number of root dir entries ->396a78 40 0b total_sectors .word 2880 ; Total sectors ->396a7a f0 media_descriptor .byte $F0 ; 3.5" 1.44 MB floppy 80 tracks, 18 tracks per sector ->396a7b 09 00 sec_per_fat .word 9 ; Sectors per FAT ->396a7d 12 00 sec_per_track .word 18 ; Sectors per track ->396a7f 02 00 num_head .word 2 ; Number of heads ->396a81 00 00 00 00 ignore2 .dword 0 ->396a85 00 00 00 00 fat32_sector .dword 0 ; # of sectors in FAT32 ->396a89 00 00 ignore3 .word 0 ->396a8b 29 boot_signature .byte $29 ->396a8c 78 56 34 12 volume_id .dword $12345678 ; Replaced by code ->396a90 55 4e 54 49 54 4c 45 44 volume_name .text "UNTITLED " ; Replace by code ->396a98 20 20 20 ->396a9b 46 41 54 31 32 20 20 20 fs_type .text "FAT12 " -.396aa3 80 40 bra $396ae5 BRA vbr_start ->396aa5 file_path .fill 64 ; Reserve 64 bytes for a path and any options -.396ae5 vbr_start -.396ae5 c2 20 rep #$20 REP #$20 ; set A long -.396ae7 a9 40 a3 lda #$a340 LDA #<>(DOS_SECTOR + (file_path - FDC_VBR_BEGIN)) -.396aea 8f 60 03 00 sta $000360 STA @l DOS_RUN_PARAM -.396aee a9 38 00 lda #$0038 LDA #`(DOS_SECTOR + (file_path - FDC_VBR_BEGIN)) -.396af1 8f 62 03 00 sta $000362 STA @l DOS_RUN_PARAM+2 -.396af5 22 92 59 39 jsl $395992 JSL IF_RUN ; And try to execute the binary file -.396af9 b0 0c bcs $396b07 BCS lock ; If it returned success... lock up... I guess? -.396afb error -.396afb e2 20 sep #$20 SEP #$20 ; set A short -.396afd 4b phk PHK ; Otherwise, print an error message -.396afe ab plb PLB -.396aff 62 08 00 per $396b0a PER message -.396b02 fa plx PLX -.396b03 22 1c 10 00 jsl $00101c JSL PUTS -.396b07 ea nop lock NOP ; And lock up -.396b08 80 fd bra $396b07 BRA lock ->396b0a 43 6f 75 6c 64 20 6e 6f message .null "Could not find a bootable binary.",13 ->396b12 74 20 66 69 6e 64 20 61 20 62 6f 6f 74 61 62 6c ->396b22 65 20 62 69 6e 61 72 79 2e 0d 00 -.396b2d FDC_VBR_END +.396ac5 FDC_VBR_BEGIN +>396ac5 eb 00 90 start .byte $EB, $00, $90 ; Entry point +>396ac8 43 32 35 36 44 4f 53 20 magic .text "C256DOS " ; OEM name / magic text for booting +>396ad0 00 02 bytes_per_sec .word 512 ; How many bytes per sector +>396ad2 01 sec_per_cluster .byte 1 ; How many sectors per cluster +>396ad3 01 00 rsrv_sectors .word 1 ; Number of reserved sectors +>396ad5 02 num_fat .byte 2 ; Number of FATs +>396ad6 e0 00 max_dir_entry .word (32-18)*16 ; Total number of root dir entries +>396ad8 40 0b total_sectors .word 2880 ; Total sectors +>396ada f0 media_descriptor .byte $F0 ; 3.5" 1.44 MB floppy 80 tracks, 18 tracks per sector +>396adb 09 00 sec_per_fat .word 9 ; Sectors per FAT +>396add 12 00 sec_per_track .word 18 ; Sectors per track +>396adf 02 00 num_head .word 2 ; Number of heads +>396ae1 00 00 00 00 ignore2 .dword 0 +>396ae5 00 00 00 00 fat32_sector .dword 0 ; # of sectors in FAT32 +>396ae9 00 00 ignore3 .word 0 +>396aeb 29 boot_signature .byte $29 +>396aec 78 56 34 12 volume_id .dword $12345678 ; Replaced by code +>396af0 55 4e 54 49 54 4c 45 44 volume_name .text "UNTITLED " ; Replace by code +>396af8 20 20 20 +>396afb 46 41 54 31 32 20 20 20 fs_type .text "FAT12 " +.396b03 80 40 bra $396b45 BRA vbr_start +>396b05 file_path .fill 64 ; Reserve 64 bytes for a path and any options +.396b45 vbr_start +.396b45 c2 20 rep #$20 REP #$20 ; set A long +.396b47 a9 40 a3 lda #$a340 LDA #<>(DOS_SECTOR + (file_path - FDC_VBR_BEGIN)) +.396b4a 8f 60 03 00 sta $000360 STA @l DOS_RUN_PARAM +.396b4e a9 38 00 lda #$0038 LDA #`(DOS_SECTOR + (file_path - FDC_VBR_BEGIN)) +.396b51 8f 62 03 00 sta $000362 STA @l DOS_RUN_PARAM+2 +.396b55 22 e4 59 39 jsl $3959e4 JSL IF_RUN ; And try to execute the binary file +.396b59 b0 0c bcs $396b67 BCS lock ; If it returned success... lock up... I guess? +.396b5b error +.396b5b e2 20 sep #$20 SEP #$20 ; set A short +.396b5d 4b phk PHK ; Otherwise, print an error message +.396b5e ab plb PLB +.396b5f 62 08 00 per $396b6a PER message +.396b62 fa plx PLX +.396b63 22 1c 10 00 jsl $00101c JSL PUTS +.396b67 ea nop lock NOP ; And lock up +.396b68 80 fd bra $396b67 BRA lock +>396b6a 43 6f 75 6c 64 20 6e 6f message .null "Could not find a bootable binary.",13 +>396b72 74 20 66 69 6e 64 20 61 20 62 6f 6f 74 61 62 6c +>396b82 65 20 62 69 6e 61 72 79 2e 0d 00 +.396b8d FDC_VBR_END ;****** Return to file: src\kernel.asm @@ -13146,520 +13263,520 @@ >00c8 00 00 00 00 00 00 00 00 Tot_Num_Add_Logic_Sec .word $0000, $0000, $0000, $0000 >00d0 00 00 Streaming_Trf_Time .word $0000 ; Word 104 >00d2 00 00 Reserved5 .word $0000 ; Word 105 -.396b2d IDE_TEST -.396b2d 08 php PHP -.396b2e c2 20 rep #$20 REP #$20 ; set A long -.396b30 a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR -.396b33 8f 26 03 00 sta $000326 STA @l BIOS_BUFF_PTR -.396b37 a9 38 00 lda #$0038 LDA #`DOS_SECTOR -.396b3a 8f 28 03 00 sta $000328 STA @l BIOS_BUFF_PTR+2 -.396b3e 22 5b 6c 39 jsl $396c5b JSL IDE_IDENTIFY -.396b42 b0 03 bcs $396b47 BCS id_ok -.396b44 82 ab 00 brl $396bf2 BRL done -.396b47 id_ok -.396b47 c2 10 rep #$10 REP #$10 ; set X long -.396b49 e2 20 sep #$20 SEP #$20 ; set A short -.396b4b a0 28 00 ldy #$0028 LDY #40 -.396b4e a2 36 00 ldx #$0036 LDX #27*2 -.396b51 bf 01 a3 38 lda $38a301,x pr_model LDA DOS_SECTOR+1,X -.396b55 22 18 10 00 jsl $001018 JSL PUTC -.396b59 bf 00 a3 38 lda $38a300,x LDA DOS_SECTOR,X -.396b5d 22 18 10 00 jsl $001018 JSL PUTC -.396b61 e8 inx INX -.396b62 e8 inx INX -.396b63 88 dey DEY -.396b64 88 dey DEY -.396b65 d0 ea bne $396b51 BNE pr_model -.396b67 c2 10 rep #$10 REP #$10 ; set X long -.396b69 e2 20 sep #$20 SEP #$20 ; set A short -.396b6b a0 14 00 ldy #$0014 LDY #20 -.396b6e a2 14 00 ldx #$0014 LDX #10*2 -.396b71 bf 01 a3 38 lda $38a301,x pr_serial LDA DOS_SECTOR+1,X -.396b75 22 18 10 00 jsl $001018 JSL PUTC -.396b79 bf 00 a3 38 lda $38a300,x LDA DOS_SECTOR,X -.396b7d 22 18 10 00 jsl $001018 JSL PUTC -.396b81 e8 inx INX -.396b82 e8 inx INX -.396b83 88 dey DEY -.396b84 88 dey DEY -.396b85 d0 ea bne $396b71 BNE pr_serial -.396b87 22 6c 10 00 jsl $00106c JSL PRINTCR -.396b8b c2 30 rep #$30 REP #$30 ; set A&X long -.396b8d a9 01 00 lda #$0001 LDA #1 ; Set LBA = 1 -.396b90 8f 22 03 00 sta $000322 STA @l BIOS_LBA -.396b94 a9 00 00 lda #$0000 LDA #0 -.396b97 8f 24 03 00 sta $000324 STA @l BIOS_LBA+2 -.396b9b a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR -.396b9e 8f 26 03 00 sta $000326 STA @l BIOS_BUFF_PTR -.396ba2 a9 38 00 lda #$0038 LDA #`DOS_SECTOR -.396ba5 8f 28 03 00 sta $000328 STA @l BIOS_BUFF_PTR+2 -.396ba9 a2 00 00 ldx #$0000 LDX #0 ; Initialize the block to some recognizable data -.396bac a9 a5 5a lda #$5aa5 LDA #$5AA5 -.396baf 9f 00 a3 38 sta $38a300,x init_loop STA DOS_SECTOR,X -.396bb3 e8 inx INX -.396bb4 e8 inx INX -.396bb5 e0 00 02 cpx #$0200 CPX #512 -.396bb8 d0 f5 bne $396baf BNE init_loop -.396bba 22 7a 6d 39 jsl $396d7a JSL IDE_PUTBLOCK ; Attempt to write the block -.396bbe b0 06 bcs $396bc6 BCS read_sect1 -.396bc0 22 6c 10 00 jsl $00106c JSL PRINTCR -.396bc4 80 2c bra $396bf2 BRA done -.396bc6 a9 01 00 lda #$0001 read_sect1 LDA #1 ; Set LBA = 1 -.396bc9 8f 22 03 00 sta $000322 STA @l BIOS_LBA -.396bcd a9 00 00 lda #$0000 LDA #0 -.396bd0 8f 24 03 00 sta $000324 STA @l BIOS_LBA+2 -.396bd4 a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS -.396bd7 8f 26 03 00 sta $000326 STA @l BIOS_BUFF_PTR -.396bdb a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS -.396bde 8f 28 03 00 sta $000328 STA @l BIOS_BUFF_PTR+2 -.396be2 22 e9 6c 39 jsl $396ce9 JSL IDE_GETBLOCK ; Attempt to read the block -.396be6 b0 06 bcs $396bee BCS all_ok -.396be8 22 6c 10 00 jsl $00106c JSL PRINTCR -.396bec 80 04 bra $396bf2 BRA done -.396bee all_ok -.396bee 22 6c 10 00 jsl $00106c JSL PRINTCR -.396bf2 28 plp done PLP -.396bf3 6b rtl RTL -.396bf4 IDE_INIT -.396bf4 e2 20 sep #$20 SEP #$20 ; set A short -.396bf6 20 17 6c jsr $396c17 JSR IDE_DRIVE_BSY ; Check to see if drive is busy -.396bf9 a9 00 lda #$00 LDA #$00 -.396bfb 8f 35 e8 af sta $afe835 STA IDE_CLDR_HI -.396bff 8f 34 e8 af sta $afe834 STA IDE_CLDR_LO -.396c03 8f 32 e8 af sta $afe832 STA IDE_SECT_CNT -.396c07 a9 01 lda #$01 LDA #$01 -.396c09 8f 33 e8 af sta $afe833 STA IDE_SECT_SRT -.396c0d a9 a0 lda #$a0 LDA #$A0 ; HEAD 0 - Select Master Drive -.396c0f 8f 36 e8 af sta $afe836 STA IDE_HEAD -.396c13 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY -.396c16 6b rtl RTL -.396c17 IDE_DRIVE_BSY -.396c17 08 php PHP -.396c18 e2 20 sep #$20 SEP #$20 ; set A short -.396c1a af 37 e8 af lda $afe837 loop LDA @l IDE_CMD_STAT -.396c1e 29 80 and #$80 AND #IDE_STAT_BSY ; Check for RDY Bit, this needs to be 1'b1 -.396c20 c9 80 cmp #$80 CMP #IDE_STAT_BSY ; If not go read again -.396c22 f0 f6 beq $396c1a BEQ loop -.396c24 28 plp PLP -.396c25 60 rts RTS -.396c26 IDE_DRIVE_READY -.396c26 08 php PHP -.396c27 e2 20 sep #$20 SEP #$20 ; set A short -.396c29 af 37 e8 af lda $afe837 loop LDA @l IDE_CMD_STAT -.396c2d 29 40 and #$40 AND #IDE_STAT_DRDY ; Check to see if the Busy Signal is Cleared -.396c2f c9 40 cmp #$40 CMP #IDE_STAT_DRDY ; if it is still one, then go back to read again. -.396c31 d0 f6 bne $396c29 BNE loop -.396c33 28 plp PLP -.396c34 60 rts RTS -.396c35 IDE_DRV_READY_NOTBUSY -.396c35 08 php PHP -.396c36 e2 20 sep #$20 SEP #$20 ; set A short -.396c38 af 37 e8 af lda $afe837 loop LDA @l IDE_CMD_STAT ; Check the status -.396c3c 29 c0 and #$c0 AND #IDE_STAT_BSY | IDE_STAT_DRDY -.396c3e c9 40 cmp #$40 CMP #IDE_STAT_DRDY ; Is it READY but not BUSY? -.396c40 d0 f6 bne $396c38 BNE loop ; No: keep waiting -.396c42 28 plp ret_success PLP ; Return success -.396c43 38 sec SEC -.396c44 60 rts RTS -.396c45 8f 07 03 00 sta $000307 ret_failure STA @l FDC_ST1 ; Save the status code to FDC_ST1 -.396c49 28 plp PLP ; Return failure -.396c4a 18 clc CLC -.396c4b 60 rts RTS -.396c4c IDE_NOT_DRQ -.396c4c 08 php PHP -.396c4d e2 20 sep #$20 SEP #$20 ; set A short -.396c4f af 37 e8 af lda $afe837 loop LDA @l IDE_CMD_STAT ; Get the status -.396c53 29 08 and #$08 AND #IDE_STAT_DRQ -.396c55 c9 08 cmp #$08 CMP #IDE_STAT_DRQ ; Is the DRQ bit set? -.396c57 d0 f6 bne $396c4f BNE loop ; No: keep waiting -.396c59 28 plp PLP -.396c5a 60 rts RTS -.396c5b IDE_IDENTIFY -.396c5b 5a phy PHY -.396c5c 8b phb PHB -.396c5d 0b phd PHD -.396c5e 08 php PHP -.396c5f 48 pha PHA ; begin setdbr macro -.396c60 08 php PHP -.396c61 e2 20 sep #$20 SEP #$20 ; set A short -.396c63 a9 00 lda #$00 LDA #0 -.396c65 48 pha PHA -.396c66 ab plb PLB -.396c67 28 plp PLP -.396c68 68 pla PLA ; end setdbr macro -.396c69 48 pha PHA ; begin setdp macro -.396c6a 08 php PHP -.396c6b c2 20 rep #$20 REP #$20 ; set A long -.396c6d a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.396c70 5b tcd TCD -.396c71 28 plp PLP -.396c72 68 pla PLA ; end setdp macro -.396c73 e2 20 sep #$20 SEP #$20 ; set A short -.396c75 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; Wait until the IDE is clear to accept commands -.396c78 a5 05 lda $0325 LDA BIOS_LBA+3 ; Get the high bits of the LBA -.396c7a 29 07 and #$07 AND #$07 -.396c7c 09 a0 ora #$a0 ORA #%10100000 ; Select DEV=0 and LBA mode = 1 -.396c7e 8f 36 e8 af sta $afe836 STA @l IDE_HEAD ; Ensure master is selected -.396c82 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; And wait for it to take effect -.396c85 e2 20 sep #$20 SEP #$20 ; set A short -.396c87 a9 00 lda #$00 LDA #0 ; Clear sector count and LBA -.396c89 8f 32 e8 af sta $afe832 STA @l IDE_SECT_CNT -.396c8d 8f 33 e8 af sta $afe833 STA @l IDE_SECT_SRT -.396c91 8f 34 e8 af sta $afe834 STA @l IDE_CLDR_LO -.396c95 8f 35 e8 af sta $afe835 STA @l IDE_CLDR_HI -.396c99 a9 ec lda #$ec LDA #IDE_CMD_IDENTIFY ; The IDENTIFY command -.396c9b 8f 37 e8 af sta $afe837 STA @l IDE_CMD_STAT ; Check the status -.396c9f f0 29 beq $396cca BEQ no_media ; If 0: there is no drive -.396ca1 20 17 6c jsr $396c17 JSR IDE_DRIVE_BSY ; Othewise: wait for drive to not be busy -.396ca4 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; Wait for the device to be ready -.396ca7 90 2d bcc $396cd6 BCC ret_failure ; If an error occurred, return it -.396ca9 c2 30 rep #$30 REP #$30 ; set A&X long -.396cab a0 00 00 ldy #$0000 LDY #0 -.396cae af 38 e8 af lda $afe838 read_loop LDA @l IDE_DATA_LO ; Get the word of data from the device -.396cb2 97 06 sta [$0326],y STA [BIOS_BUFF_PTR],Y ; Save it to the buffer -.396cb4 c8 iny INY ; Move to the next position -.396cb5 c8 iny INY -.396cb6 c0 00 02 cpy #$0200 CPY #512 -.396cb9 d0 f3 bne $396cae BNE read_loop -.396cbb ret_success -.396cbb e2 20 sep #$20 SEP #$20 ; set A short -.396cbd a9 00 lda #$00 LDA #0 -.396cbf 85 00 sta $0320 STA BIOS_STATUS -.396cc1 8d 06 03 sta $0306 STA @w FDC_ST0 -.396cc4 28 plp PLP ; Return success -.396cc5 2b pld PLD +.396b8d IDE_TEST +.396b8d 08 php PHP +.396b8e c2 20 rep #$20 REP #$20 ; set A long +.396b90 a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR +.396b93 8f 26 03 00 sta $000326 STA @l BIOS_BUFF_PTR +.396b97 a9 38 00 lda #$0038 LDA #`DOS_SECTOR +.396b9a 8f 28 03 00 sta $000328 STA @l BIOS_BUFF_PTR+2 +.396b9e 22 bb 6c 39 jsl $396cbb JSL IDE_IDENTIFY +.396ba2 b0 03 bcs $396ba7 BCS id_ok +.396ba4 82 ab 00 brl $396c52 BRL done +.396ba7 id_ok +.396ba7 c2 10 rep #$10 REP #$10 ; set X long +.396ba9 e2 20 sep #$20 SEP #$20 ; set A short +.396bab a0 28 00 ldy #$0028 LDY #40 +.396bae a2 36 00 ldx #$0036 LDX #27*2 +.396bb1 bf 01 a3 38 lda $38a301,x pr_model LDA DOS_SECTOR+1,X +.396bb5 22 18 10 00 jsl $001018 JSL PUTC +.396bb9 bf 00 a3 38 lda $38a300,x LDA DOS_SECTOR,X +.396bbd 22 18 10 00 jsl $001018 JSL PUTC +.396bc1 e8 inx INX +.396bc2 e8 inx INX +.396bc3 88 dey DEY +.396bc4 88 dey DEY +.396bc5 d0 ea bne $396bb1 BNE pr_model +.396bc7 c2 10 rep #$10 REP #$10 ; set X long +.396bc9 e2 20 sep #$20 SEP #$20 ; set A short +.396bcb a0 14 00 ldy #$0014 LDY #20 +.396bce a2 14 00 ldx #$0014 LDX #10*2 +.396bd1 bf 01 a3 38 lda $38a301,x pr_serial LDA DOS_SECTOR+1,X +.396bd5 22 18 10 00 jsl $001018 JSL PUTC +.396bd9 bf 00 a3 38 lda $38a300,x LDA DOS_SECTOR,X +.396bdd 22 18 10 00 jsl $001018 JSL PUTC +.396be1 e8 inx INX +.396be2 e8 inx INX +.396be3 88 dey DEY +.396be4 88 dey DEY +.396be5 d0 ea bne $396bd1 BNE pr_serial +.396be7 22 6c 10 00 jsl $00106c JSL PRINTCR +.396beb c2 30 rep #$30 REP #$30 ; set A&X long +.396bed a9 01 00 lda #$0001 LDA #1 ; Set LBA = 1 +.396bf0 8f 22 03 00 sta $000322 STA @l BIOS_LBA +.396bf4 a9 00 00 lda #$0000 LDA #0 +.396bf7 8f 24 03 00 sta $000324 STA @l BIOS_LBA+2 +.396bfb a9 00 a3 lda #$a300 LDA #<>DOS_SECTOR +.396bfe 8f 26 03 00 sta $000326 STA @l BIOS_BUFF_PTR +.396c02 a9 38 00 lda #$0038 LDA #`DOS_SECTOR +.396c05 8f 28 03 00 sta $000328 STA @l BIOS_BUFF_PTR+2 +.396c09 a2 00 00 ldx #$0000 LDX #0 ; Initialize the block to some recognizable data +.396c0c a9 a5 5a lda #$5aa5 LDA #$5AA5 +.396c0f 9f 00 a3 38 sta $38a300,x init_loop STA DOS_SECTOR,X +.396c13 e8 inx INX +.396c14 e8 inx INX +.396c15 e0 00 02 cpx #$0200 CPX #512 +.396c18 d0 f5 bne $396c0f BNE init_loop +.396c1a 22 da 6d 39 jsl $396dda JSL IDE_PUTBLOCK ; Attempt to write the block +.396c1e b0 06 bcs $396c26 BCS read_sect1 +.396c20 22 6c 10 00 jsl $00106c JSL PRINTCR +.396c24 80 2c bra $396c52 BRA done +.396c26 a9 01 00 lda #$0001 read_sect1 LDA #1 ; Set LBA = 1 +.396c29 8f 22 03 00 sta $000322 STA @l BIOS_LBA +.396c2d a9 00 00 lda #$0000 LDA #0 +.396c30 8f 24 03 00 sta $000324 STA @l BIOS_LBA+2 +.396c34 a9 00 a5 lda #$a500 LDA #<>DOS_FAT_SECTORS +.396c37 8f 26 03 00 sta $000326 STA @l BIOS_BUFF_PTR +.396c3b a9 38 00 lda #$0038 LDA #`DOS_FAT_SECTORS +.396c3e 8f 28 03 00 sta $000328 STA @l BIOS_BUFF_PTR+2 +.396c42 22 49 6d 39 jsl $396d49 JSL IDE_GETBLOCK ; Attempt to read the block +.396c46 b0 06 bcs $396c4e BCS all_ok +.396c48 22 6c 10 00 jsl $00106c JSL PRINTCR +.396c4c 80 04 bra $396c52 BRA done +.396c4e all_ok +.396c4e 22 6c 10 00 jsl $00106c JSL PRINTCR +.396c52 28 plp done PLP +.396c53 6b rtl RTL +.396c54 IDE_INIT +.396c54 e2 20 sep #$20 SEP #$20 ; set A short +.396c56 20 77 6c jsr $396c77 JSR IDE_DRIVE_BSY ; Check to see if drive is busy +.396c59 a9 00 lda #$00 LDA #$00 +.396c5b 8f 35 e8 af sta $afe835 STA IDE_CLDR_HI +.396c5f 8f 34 e8 af sta $afe834 STA IDE_CLDR_LO +.396c63 8f 32 e8 af sta $afe832 STA IDE_SECT_CNT +.396c67 a9 01 lda #$01 LDA #$01 +.396c69 8f 33 e8 af sta $afe833 STA IDE_SECT_SRT +.396c6d a9 a0 lda #$a0 LDA #$A0 ; HEAD 0 - Select Master Drive +.396c6f 8f 36 e8 af sta $afe836 STA IDE_HEAD +.396c73 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY +.396c76 6b rtl RTL +.396c77 IDE_DRIVE_BSY +.396c77 08 php PHP +.396c78 e2 20 sep #$20 SEP #$20 ; set A short +.396c7a af 37 e8 af lda $afe837 loop LDA @l IDE_CMD_STAT +.396c7e 29 80 and #$80 AND #IDE_STAT_BSY ; Check for RDY Bit, this needs to be 1'b1 +.396c80 c9 80 cmp #$80 CMP #IDE_STAT_BSY ; If not go read again +.396c82 f0 f6 beq $396c7a BEQ loop +.396c84 28 plp PLP +.396c85 60 rts RTS +.396c86 IDE_DRIVE_READY +.396c86 08 php PHP +.396c87 e2 20 sep #$20 SEP #$20 ; set A short +.396c89 af 37 e8 af lda $afe837 loop LDA @l IDE_CMD_STAT +.396c8d 29 40 and #$40 AND #IDE_STAT_DRDY ; Check to see if the Busy Signal is Cleared +.396c8f c9 40 cmp #$40 CMP #IDE_STAT_DRDY ; if it is still one, then go back to read again. +.396c91 d0 f6 bne $396c89 BNE loop +.396c93 28 plp PLP +.396c94 60 rts RTS +.396c95 IDE_DRV_READY_NOTBUSY +.396c95 08 php PHP +.396c96 e2 20 sep #$20 SEP #$20 ; set A short +.396c98 af 37 e8 af lda $afe837 loop LDA @l IDE_CMD_STAT ; Check the status +.396c9c 29 c0 and #$c0 AND #IDE_STAT_BSY | IDE_STAT_DRDY +.396c9e c9 40 cmp #$40 CMP #IDE_STAT_DRDY ; Is it READY but not BUSY? +.396ca0 d0 f6 bne $396c98 BNE loop ; No: keep waiting +.396ca2 28 plp ret_success PLP ; Return success +.396ca3 38 sec SEC +.396ca4 60 rts RTS +.396ca5 8f 07 03 00 sta $000307 ret_failure STA @l FDC_ST1 ; Save the status code to FDC_ST1 +.396ca9 28 plp PLP ; Return failure +.396caa 18 clc CLC +.396cab 60 rts RTS +.396cac IDE_NOT_DRQ +.396cac 08 php PHP +.396cad e2 20 sep #$20 SEP #$20 ; set A short +.396caf af 37 e8 af lda $afe837 loop LDA @l IDE_CMD_STAT ; Get the status +.396cb3 29 08 and #$08 AND #IDE_STAT_DRQ +.396cb5 c9 08 cmp #$08 CMP #IDE_STAT_DRQ ; Is the DRQ bit set? +.396cb7 d0 f6 bne $396caf BNE loop ; No: keep waiting +.396cb9 28 plp PLP +.396cba 60 rts RTS +.396cbb IDE_IDENTIFY +.396cbb 5a phy PHY +.396cbc 8b phb PHB +.396cbd 0b phd PHD +.396cbe 08 php PHP +.396cbf 48 pha PHA ; begin setdbr macro +.396cc0 08 php PHP +.396cc1 e2 20 sep #$20 SEP #$20 ; set A short +.396cc3 a9 00 lda #$00 LDA #0 +.396cc5 48 pha PHA .396cc6 ab plb PLB -.396cc7 7a ply PLY -.396cc8 38 sec SEC -.396cc9 6b rtl RTL -.396cca no_media -.396cca e2 20 sep #$20 SEP #$20 ; set A short -.396ccc a9 87 lda #$87 LDA #BIOS_ERR_NOMEDIA -.396cce 80 0a bra $396cda BRA pass_failure -.396cd0 not_ata -.396cd0 e2 20 sep #$20 SEP #$20 ; set A short -.396cd2 a9 8a lda #$8a LDA #BIOS_ERR_NOTATA -.396cd4 80 04 bra $396cda BRA pass_failure -.396cd6 ret_failure -.396cd6 e2 20 sep #$20 SEP #$20 ; set A short -.396cd8 a9 82 lda #$82 LDA #BIOS_ERR_READ -.396cda 85 00 sta $0320 pass_failure STA BIOS_STATUS -.396cdc af 31 e8 af lda $afe831 LDA @l IDE_ERROR -.396ce0 8d 06 03 sta $0306 STA @w FDC_ST0 -.396ce3 28 plp PLP -.396ce4 2b pld PLD -.396ce5 ab plb PLB -.396ce6 7a ply PLY -.396ce7 18 clc CLC -.396ce8 6b rtl RTL -.396ce9 IDE_GETBLOCK -.396ce9 5a phy PHY -.396cea 8b phb PHB -.396ceb 0b phd PHD -.396cec 08 php PHP -.396ced 48 pha PHA ; begin setdbr macro -.396cee 08 php PHP -.396cef e2 20 sep #$20 SEP #$20 ; set A short -.396cf1 a9 00 lda #$00 LDA #0 -.396cf3 48 pha PHA -.396cf4 ab plb PLB -.396cf5 28 plp PLP -.396cf6 68 pla PLA ; end setdbr macro -.396cf7 48 pha PHA ; begin setdp macro -.396cf8 08 php PHP -.396cf9 c2 20 rep #$20 REP #$20 ; set A long -.396cfb a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.396cfe 5b tcd TCD -.396cff 28 plp PLP -.396d00 68 pla PLA ; end setdp macro -.396d01 e2 20 sep #$20 SEP #$20 ; set A short -.396d03 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; Wait until the IDE is clear to accept commands -.396d06 a5 05 lda $0325 LDA BIOS_LBA+3 ; Get the high bits of the LBA -.396d08 29 07 and #$07 AND #$07 -.396d0a 09 e0 ora #$e0 ORA #%11100000 ; Select DEV=0 and LBA mode = 1 -.396d0c 8f 36 e8 af sta $afe836 STA @l IDE_HEAD ; Ensure master is selected -.396d10 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; And wait for it to take effect -.396d13 e2 20 sep #$20 SEP #$20 ; set A short -.396d15 a9 01 lda #$01 LDA #1 ; Set that we want one sector -.396d17 8f 32 e8 af sta $afe832 STA @l IDE_SECT_CNT -.396d1b a5 02 lda $0322 LDA BIOS_LBA ; Set the lower bits of the LBA -.396d1d 8f 33 e8 af sta $afe833 STA @l IDE_SECT_SRT -.396d21 a5 03 lda $0323 LDA BIOS_LBA+1 -.396d23 8f 34 e8 af sta $afe834 STA @l IDE_CLDR_LO -.396d27 a5 04 lda $0324 LDA BIOS_LBA+2 -.396d29 8f 35 e8 af sta $afe835 STA @l IDE_CLDR_HI -.396d2d a9 21 lda #$21 LDA #IDE_CMD_READ_SECTOR ; The READ SECTOR command -.396d2f 8f 37 e8 af sta $afe837 STA @l IDE_CMD_STAT -.396d33 ea nop NOP ; Wait about 500ns -.396d34 ea nop NOP -.396d35 ea nop NOP -.396d36 ea nop NOP -.396d37 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; Wait for the device to be ready -.396d3a 90 2b bcc $396d67 BCC ret_failure ; If an error occurred, return it -.396d3c e2 20 sep #$20 SEP #$20 ; set A short -.396d3e af 30 e8 af lda $afe830 LDA @l IDE_DATA ; Read and toss out one byte from the 8-bit interface -.396d42 a0 00 00 ldy #$0000 LDY #0 -.396d45 c2 20 rep #$20 REP #$20 ; set A long -.396d47 af 38 e8 af lda $afe838 read_loop LDA @l IDE_DATA_LO ; Get the word of data from the device -.396d4b 97 06 sta [$0326],y STA [BIOS_BUFF_PTR],Y ; Save it to the buffer -.396d4d c8 iny INY ; Move to the next position -.396d4e c8 iny INY -.396d4f c0 00 02 cpy #$0200 CPY #512 -.396d52 d0 f3 bne $396d47 BNE read_loop -.396d54 ea nop NOP ; Wait about 500ns -.396d55 ea nop NOP -.396d56 ea nop NOP -.396d57 ea nop NOP -.396d58 ret_success -.396d58 e2 20 sep #$20 SEP #$20 ; set A short -.396d5a a9 00 lda #$00 LDA #0 -.396d5c 85 00 sta $0320 STA BIOS_STATUS -.396d5e 8d 06 03 sta $0306 STA @w FDC_ST0 -.396d61 28 plp PLP ; Return success -.396d62 2b pld PLD -.396d63 ab plb PLB -.396d64 7a ply PLY -.396d65 38 sec SEC -.396d66 6b rtl RTL -.396d67 ret_failure -.396d67 e2 20 sep #$20 SEP #$20 ; set A short -.396d69 af 31 e8 af lda $afe831 LDA @l IDE_ERROR -.396d6d 8d 06 03 sta $0306 STA @w FDC_ST0 -.396d70 a9 82 lda #$82 LDA #BIOS_ERR_READ -.396d72 85 00 sta $0320 STA BIOS_STATUS -.396d74 28 plp PLP -.396d75 2b pld PLD -.396d76 ab plb PLB -.396d77 7a ply PLY -.396d78 18 clc CLC -.396d79 6b rtl RTL -.396d7a IDE_PUTBLOCK -.396d7a 5a phy PHY -.396d7b 8b phb PHB -.396d7c 0b phd PHD -.396d7d 08 php PHP -.396d7e 48 pha PHA ; begin setdbr macro -.396d7f 08 php PHP -.396d80 e2 20 sep #$20 SEP #$20 ; set A short -.396d82 a9 00 lda #$00 LDA #0 -.396d84 48 pha PHA -.396d85 ab plb PLB -.396d86 28 plp PLP -.396d87 68 pla PLA ; end setdbr macro -.396d88 48 pha PHA ; begin setdp macro -.396d89 08 php PHP -.396d8a c2 20 rep #$20 REP #$20 ; set A long -.396d8c a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 -.396d8f 5b tcd TCD -.396d90 28 plp PLP -.396d91 68 pla PLA ; end setdp macro -.396d92 e2 20 sep #$20 SEP #$20 ; set A short -.396d94 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; Wait until the IDE is clear to accept commands -.396d97 a5 05 lda $0325 LDA BIOS_LBA+3 ; Get the high bits of the LBA -.396d99 29 07 and #$07 AND #$07 -.396d9b 09 e0 ora #$e0 ORA #%11100000 ; Select DEV=0 and LBA mode = 1 -.396d9d 8f 36 e8 af sta $afe836 STA @l IDE_HEAD ; Ensure master is selected -.396da1 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; And wait for it to take effect -.396da4 e2 20 sep #$20 SEP #$20 ; set A short -.396da6 a9 01 lda #$01 LDA #1 ; Set that we want one sector -.396da8 8f 32 e8 af sta $afe832 STA @l IDE_SECT_CNT -.396dac a5 02 lda $0322 LDA BIOS_LBA ; Set the lower bits of the LBA -.396dae 8f 33 e8 af sta $afe833 STA @l IDE_SECT_SRT -.396db2 a5 03 lda $0323 LDA BIOS_LBA+1 -.396db4 8f 34 e8 af sta $afe834 STA @l IDE_CLDR_LO -.396db8 a5 04 lda $0324 LDA BIOS_LBA+2 -.396dba 8f 35 e8 af sta $afe835 STA @l IDE_CLDR_HI -.396dbe a9 30 lda #$30 LDA #IDE_CMD_WRITE_SECTOR ; The READ SECTOR command -.396dc0 8f 37 e8 af sta $afe837 STA @l IDE_CMD_STAT -.396dc4 ea nop NOP ; Wait about 500ns -.396dc5 ea nop NOP -.396dc6 ea nop NOP -.396dc7 ea nop NOP -.396dc8 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; Wait for the device to be ready -.396dcb 90 33 bcc $396e00 BCC ret_failure ; If an error occurred, return it -.396dcd c2 30 rep #$30 REP #$30 ; set A&X long -.396dcf a0 00 00 ldy #$0000 LDY #0 -.396dd2 b7 06 lda [$0326],y read_loop LDA [BIOS_BUFF_PTR],Y ; Get the word from the buffer -.396dd4 8f 38 e8 af sta $afe838 STA @l IDE_DATA_LO ; Save the word to the device -.396dd8 c8 iny INY ; Move to the next position -.396dd9 c8 iny INY -.396dda c0 00 02 cpy #$0200 CPY #512 -.396ddd d0 f3 bne $396dd2 BNE read_loop -.396ddf ea nop NOP ; Wait about 500ns -.396de0 ea nop NOP -.396de1 ea nop NOP -.396de2 ea nop NOP -.396de3 20 35 6c jsr $396c35 JSR IDE_DRV_READY_NOTBUSY ; Wait for the device to be ready -.396de6 90 18 bcc $396e00 BCC ret_failure ; If an error occurred, return it -.396de8 af 37 e8 af lda $afe837 LDA @l IDE_CMD_STAT ; Check the status -.396dec 89 21 00 bit #$0021 BIT #IDE_STAT_ERR | IDE_STAT_DF -.396def d0 0f bne $396e00 BNE ret_failure ; If error: return failure -.396df1 ret_success -.396df1 e2 20 sep #$20 SEP #$20 ; set A short -.396df3 a9 00 lda #$00 LDA #0 -.396df5 85 00 sta $0320 STA BIOS_STATUS -.396df7 8d 06 03 sta $0306 STA @w FDC_ST0 -.396dfa 28 plp PLP ; Return success -.396dfb 2b pld PLD -.396dfc ab plb PLB -.396dfd 7a ply PLY -.396dfe 38 sec SEC -.396dff 6b rtl RTL -.396e00 ret_failure -.396e00 e2 20 sep #$20 SEP #$20 ; set A short -.396e02 af 31 e8 af lda $afe831 LDA @l IDE_ERROR -.396e06 8d 06 03 sta $0306 STA @w FDC_ST0 -.396e09 a9 82 lda #$82 LDA #BIOS_ERR_READ -.396e0b 85 00 sta $0320 STA BIOS_STATUS -.396e0d 28 plp PLP -.396e0e 2b pld PLD -.396e0f ab plb PLB -.396e10 7a ply PLY -.396e11 18 clc CLC -.396e12 6b rtl RTL +.396cc7 28 plp PLP +.396cc8 68 pla PLA ; end setdbr macro +.396cc9 48 pha PHA ; begin setdp macro +.396cca 08 php PHP +.396ccb c2 20 rep #$20 REP #$20 ; set A long +.396ccd a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.396cd0 5b tcd TCD +.396cd1 28 plp PLP +.396cd2 68 pla PLA ; end setdp macro +.396cd3 e2 20 sep #$20 SEP #$20 ; set A short +.396cd5 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; Wait until the IDE is clear to accept commands +.396cd8 a5 05 lda $0325 LDA BIOS_LBA+3 ; Get the high bits of the LBA +.396cda 29 07 and #$07 AND #$07 +.396cdc 09 a0 ora #$a0 ORA #%10100000 ; Select DEV=0 and LBA mode = 1 +.396cde 8f 36 e8 af sta $afe836 STA @l IDE_HEAD ; Ensure master is selected +.396ce2 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; And wait for it to take effect +.396ce5 e2 20 sep #$20 SEP #$20 ; set A short +.396ce7 a9 00 lda #$00 LDA #0 ; Clear sector count and LBA +.396ce9 8f 32 e8 af sta $afe832 STA @l IDE_SECT_CNT +.396ced 8f 33 e8 af sta $afe833 STA @l IDE_SECT_SRT +.396cf1 8f 34 e8 af sta $afe834 STA @l IDE_CLDR_LO +.396cf5 8f 35 e8 af sta $afe835 STA @l IDE_CLDR_HI +.396cf9 a9 ec lda #$ec LDA #IDE_CMD_IDENTIFY ; The IDENTIFY command +.396cfb 8f 37 e8 af sta $afe837 STA @l IDE_CMD_STAT ; Check the status +.396cff f0 29 beq $396d2a BEQ no_media ; If 0: there is no drive +.396d01 20 77 6c jsr $396c77 JSR IDE_DRIVE_BSY ; Othewise: wait for drive to not be busy +.396d04 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; Wait for the device to be ready +.396d07 90 2d bcc $396d36 BCC ret_failure ; If an error occurred, return it +.396d09 c2 30 rep #$30 REP #$30 ; set A&X long +.396d0b a0 00 00 ldy #$0000 LDY #0 +.396d0e af 38 e8 af lda $afe838 read_loop LDA @l IDE_DATA_LO ; Get the word of data from the device +.396d12 97 06 sta [$0326],y STA [BIOS_BUFF_PTR],Y ; Save it to the buffer +.396d14 c8 iny INY ; Move to the next position +.396d15 c8 iny INY +.396d16 c0 00 02 cpy #$0200 CPY #512 +.396d19 d0 f3 bne $396d0e BNE read_loop +.396d1b ret_success +.396d1b e2 20 sep #$20 SEP #$20 ; set A short +.396d1d a9 00 lda #$00 LDA #0 +.396d1f 85 00 sta $0320 STA BIOS_STATUS +.396d21 8d 06 03 sta $0306 STA @w FDC_ST0 +.396d24 28 plp PLP ; Return success +.396d25 2b pld PLD +.396d26 ab plb PLB +.396d27 7a ply PLY +.396d28 38 sec SEC +.396d29 6b rtl RTL +.396d2a no_media +.396d2a e2 20 sep #$20 SEP #$20 ; set A short +.396d2c a9 87 lda #$87 LDA #BIOS_ERR_NOMEDIA +.396d2e 80 0a bra $396d3a BRA pass_failure +.396d30 not_ata +.396d30 e2 20 sep #$20 SEP #$20 ; set A short +.396d32 a9 8a lda #$8a LDA #BIOS_ERR_NOTATA +.396d34 80 04 bra $396d3a BRA pass_failure +.396d36 ret_failure +.396d36 e2 20 sep #$20 SEP #$20 ; set A short +.396d38 a9 82 lda #$82 LDA #BIOS_ERR_READ +.396d3a 85 00 sta $0320 pass_failure STA BIOS_STATUS +.396d3c af 31 e8 af lda $afe831 LDA @l IDE_ERROR +.396d40 8d 06 03 sta $0306 STA @w FDC_ST0 +.396d43 28 plp PLP +.396d44 2b pld PLD +.396d45 ab plb PLB +.396d46 7a ply PLY +.396d47 18 clc CLC +.396d48 6b rtl RTL +.396d49 IDE_GETBLOCK +.396d49 5a phy PHY +.396d4a 8b phb PHB +.396d4b 0b phd PHD +.396d4c 08 php PHP +.396d4d 48 pha PHA ; begin setdbr macro +.396d4e 08 php PHP +.396d4f e2 20 sep #$20 SEP #$20 ; set A short +.396d51 a9 00 lda #$00 LDA #0 +.396d53 48 pha PHA +.396d54 ab plb PLB +.396d55 28 plp PLP +.396d56 68 pla PLA ; end setdbr macro +.396d57 48 pha PHA ; begin setdp macro +.396d58 08 php PHP +.396d59 c2 20 rep #$20 REP #$20 ; set A long +.396d5b a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.396d5e 5b tcd TCD +.396d5f 28 plp PLP +.396d60 68 pla PLA ; end setdp macro +.396d61 e2 20 sep #$20 SEP #$20 ; set A short +.396d63 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; Wait until the IDE is clear to accept commands +.396d66 a5 05 lda $0325 LDA BIOS_LBA+3 ; Get the high bits of the LBA +.396d68 29 07 and #$07 AND #$07 +.396d6a 09 e0 ora #$e0 ORA #%11100000 ; Select DEV=0 and LBA mode = 1 +.396d6c 8f 36 e8 af sta $afe836 STA @l IDE_HEAD ; Ensure master is selected +.396d70 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; And wait for it to take effect +.396d73 e2 20 sep #$20 SEP #$20 ; set A short +.396d75 a9 01 lda #$01 LDA #1 ; Set that we want one sector +.396d77 8f 32 e8 af sta $afe832 STA @l IDE_SECT_CNT +.396d7b a5 02 lda $0322 LDA BIOS_LBA ; Set the lower bits of the LBA +.396d7d 8f 33 e8 af sta $afe833 STA @l IDE_SECT_SRT +.396d81 a5 03 lda $0323 LDA BIOS_LBA+1 +.396d83 8f 34 e8 af sta $afe834 STA @l IDE_CLDR_LO +.396d87 a5 04 lda $0324 LDA BIOS_LBA+2 +.396d89 8f 35 e8 af sta $afe835 STA @l IDE_CLDR_HI +.396d8d a9 21 lda #$21 LDA #IDE_CMD_READ_SECTOR ; The READ SECTOR command +.396d8f 8f 37 e8 af sta $afe837 STA @l IDE_CMD_STAT +.396d93 ea nop NOP ; Wait about 500ns +.396d94 ea nop NOP +.396d95 ea nop NOP +.396d96 ea nop NOP +.396d97 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; Wait for the device to be ready +.396d9a 90 2b bcc $396dc7 BCC ret_failure ; If an error occurred, return it +.396d9c e2 20 sep #$20 SEP #$20 ; set A short +.396d9e af 30 e8 af lda $afe830 LDA @l IDE_DATA ; Read and toss out one byte from the 8-bit interface +.396da2 a0 00 00 ldy #$0000 LDY #0 +.396da5 c2 20 rep #$20 REP #$20 ; set A long +.396da7 af 38 e8 af lda $afe838 read_loop LDA @l IDE_DATA_LO ; Get the word of data from the device +.396dab 97 06 sta [$0326],y STA [BIOS_BUFF_PTR],Y ; Save it to the buffer +.396dad c8 iny INY ; Move to the next position +.396dae c8 iny INY +.396daf c0 00 02 cpy #$0200 CPY #512 +.396db2 d0 f3 bne $396da7 BNE read_loop +.396db4 ea nop NOP ; Wait about 500ns +.396db5 ea nop NOP +.396db6 ea nop NOP +.396db7 ea nop NOP +.396db8 ret_success +.396db8 e2 20 sep #$20 SEP #$20 ; set A short +.396dba a9 00 lda #$00 LDA #0 +.396dbc 85 00 sta $0320 STA BIOS_STATUS +.396dbe 8d 06 03 sta $0306 STA @w FDC_ST0 +.396dc1 28 plp PLP ; Return success +.396dc2 2b pld PLD +.396dc3 ab plb PLB +.396dc4 7a ply PLY +.396dc5 38 sec SEC +.396dc6 6b rtl RTL +.396dc7 ret_failure +.396dc7 e2 20 sep #$20 SEP #$20 ; set A short +.396dc9 af 31 e8 af lda $afe831 LDA @l IDE_ERROR +.396dcd 8d 06 03 sta $0306 STA @w FDC_ST0 +.396dd0 a9 82 lda #$82 LDA #BIOS_ERR_READ +.396dd2 85 00 sta $0320 STA BIOS_STATUS +.396dd4 28 plp PLP +.396dd5 2b pld PLD +.396dd6 ab plb PLB +.396dd7 7a ply PLY +.396dd8 18 clc CLC +.396dd9 6b rtl RTL +.396dda IDE_PUTBLOCK +.396dda 5a phy PHY +.396ddb 8b phb PHB +.396ddc 0b phd PHD +.396ddd 08 php PHP +.396dde 48 pha PHA ; begin setdbr macro +.396ddf 08 php PHP +.396de0 e2 20 sep #$20 SEP #$20 ; set A short +.396de2 a9 00 lda #$00 LDA #0 +.396de4 48 pha PHA +.396de5 ab plb PLB +.396de6 28 plp PLP +.396de7 68 pla PLA ; end setdbr macro +.396de8 48 pha PHA ; begin setdp macro +.396de9 08 php PHP +.396dea c2 20 rep #$20 REP #$20 ; set A long +.396dec a9 20 03 lda #$0320 LDA #SDOS_VARIABLES ; set DP to page 0 +.396def 5b tcd TCD +.396df0 28 plp PLP +.396df1 68 pla PLA ; end setdp macro +.396df2 e2 20 sep #$20 SEP #$20 ; set A short +.396df4 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; Wait until the IDE is clear to accept commands +.396df7 a5 05 lda $0325 LDA BIOS_LBA+3 ; Get the high bits of the LBA +.396df9 29 07 and #$07 AND #$07 +.396dfb 09 e0 ora #$e0 ORA #%11100000 ; Select DEV=0 and LBA mode = 1 +.396dfd 8f 36 e8 af sta $afe836 STA @l IDE_HEAD ; Ensure master is selected +.396e01 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; And wait for it to take effect +.396e04 e2 20 sep #$20 SEP #$20 ; set A short +.396e06 a9 01 lda #$01 LDA #1 ; Set that we want one sector +.396e08 8f 32 e8 af sta $afe832 STA @l IDE_SECT_CNT +.396e0c a5 02 lda $0322 LDA BIOS_LBA ; Set the lower bits of the LBA +.396e0e 8f 33 e8 af sta $afe833 STA @l IDE_SECT_SRT +.396e12 a5 03 lda $0323 LDA BIOS_LBA+1 +.396e14 8f 34 e8 af sta $afe834 STA @l IDE_CLDR_LO +.396e18 a5 04 lda $0324 LDA BIOS_LBA+2 +.396e1a 8f 35 e8 af sta $afe835 STA @l IDE_CLDR_HI +.396e1e a9 30 lda #$30 LDA #IDE_CMD_WRITE_SECTOR ; The READ SECTOR command +.396e20 8f 37 e8 af sta $afe837 STA @l IDE_CMD_STAT +.396e24 ea nop NOP ; Wait about 500ns +.396e25 ea nop NOP +.396e26 ea nop NOP +.396e27 ea nop NOP +.396e28 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; Wait for the device to be ready +.396e2b 90 33 bcc $396e60 BCC ret_failure ; If an error occurred, return it +.396e2d c2 30 rep #$30 REP #$30 ; set A&X long +.396e2f a0 00 00 ldy #$0000 LDY #0 +.396e32 b7 06 lda [$0326],y read_loop LDA [BIOS_BUFF_PTR],Y ; Get the word from the buffer +.396e34 8f 38 e8 af sta $afe838 STA @l IDE_DATA_LO ; Save the word to the device +.396e38 c8 iny INY ; Move to the next position +.396e39 c8 iny INY +.396e3a c0 00 02 cpy #$0200 CPY #512 +.396e3d d0 f3 bne $396e32 BNE read_loop +.396e3f ea nop NOP ; Wait about 500ns +.396e40 ea nop NOP +.396e41 ea nop NOP +.396e42 ea nop NOP +.396e43 20 95 6c jsr $396c95 JSR IDE_DRV_READY_NOTBUSY ; Wait for the device to be ready +.396e46 90 18 bcc $396e60 BCC ret_failure ; If an error occurred, return it +.396e48 af 37 e8 af lda $afe837 LDA @l IDE_CMD_STAT ; Check the status +.396e4c 89 21 00 bit #$0021 BIT #IDE_STAT_ERR | IDE_STAT_DF +.396e4f d0 0f bne $396e60 BNE ret_failure ; If error: return failure +.396e51 ret_success +.396e51 e2 20 sep #$20 SEP #$20 ; set A short +.396e53 a9 00 lda #$00 LDA #0 +.396e55 85 00 sta $0320 STA BIOS_STATUS +.396e57 8d 06 03 sta $0306 STA @w FDC_ST0 +.396e5a 28 plp PLP ; Return success +.396e5b 2b pld PLD +.396e5c ab plb PLB +.396e5d 7a ply PLY +.396e5e 38 sec SEC +.396e5f 6b rtl RTL +.396e60 ret_failure +.396e60 e2 20 sep #$20 SEP #$20 ; set A short +.396e62 af 31 e8 af lda $afe831 LDA @l IDE_ERROR +.396e66 8d 06 03 sta $0306 STA @w FDC_ST0 +.396e69 a9 82 lda #$82 LDA #BIOS_ERR_READ +.396e6b 85 00 sta $0320 STA BIOS_STATUS +.396e6d 28 plp PLP +.396e6e 2b pld PLD +.396e6f ab plb PLB +.396e70 7a ply PLY +.396e71 18 clc CLC +.396e72 6b rtl RTL ;****** Return to file: src\kernel.asm -.396e13 KERNEL_DATA ->396e13 20 20 20 20 0b 0c 0b 0c greet_msg .text $20, $20, $20, $20, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, " FFFFFFF MMMMMMMM XX XXX " ,$0D ->396e1b 0b 0c 0b 0c 0b 0c 20 46 46 46 46 46 46 46 20 4d ->396e2b 4d 4d 4d 4d 4d 4d 4d 20 58 58 20 20 20 20 58 58 ->396e3b 58 20 0d ->396e3e 20 20 20 0b 0c 0b 0c 0b .text $20, $20, $20, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $20, "FF MM MM MM XX XXX ",$0D ->396e46 0c 0b 0c 0b 0c 20 46 46 20 20 20 20 20 20 4d 4d ->396e56 20 4d 4d 20 4d 4d 20 20 20 58 58 20 58 58 58 20 ->396e66 20 20 0d ->396e69 20 20 0b 0c 0b 0c 0b 0c .text $20, $20, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $20, "FFFFF MM MM MM XXX ",$0D ->396e71 0b 0c 0b 0c 20 46 46 46 46 46 20 20 20 4d 4d 20 ->396e81 4d 4d 20 4d 4d 20 20 20 20 58 58 58 20 20 20 20 ->396e91 20 20 0d ->396e94 20 0b 0c 0b 0c 0b 0c 0b .text $20, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $20, "FF MM MM MM XXX XX ",$0D ->396e9c 0c 0b 0c 20 46 46 20 20 20 20 20 20 4d 4d 20 4d ->396eac 4d 20 4d 4d 20 20 58 58 58 20 20 58 58 20 20 20 ->396ebc 20 20 0d ->396ebf 0b 0c 0b 0c 0b 0c 0b 0c .text $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $20, "FF MM MM MM XXX XX ",$0D ->396ec7 0b 0c 20 46 46 20 20 20 20 20 20 4d 4d 20 4d 4d ->396ed7 20 4d 4d 20 58 58 58 20 20 20 20 20 58 58 20 20 ->396ee7 20 20 0d ->396eea 0d 43 32 35 36 20 46 4f .text $0D, "C256 FOENIX FMX -- 3,670,016 Bytes Free", $0D ->396ef2 45 4e 49 58 20 46 4d 58 20 2d 2d 20 33 2c 36 37 ->396f02 30 2c 30 31 36 20 42 79 74 65 73 20 46 72 65 65 ->396f12 0d ->396f13 77 77 77 2e 63 32 35 36 .text "www.c256foenix.com - Kernel version: " ->396f1b 66 6f 65 6e 69 78 2e 63 6f 6d 20 2d 20 4b 65 72 ->396f2b 6e 65 6c 20 76 65 72 73 69 6f 6e 3a 20 +.396e73 KERNEL_DATA +>396e73 20 20 20 20 0b 0c 0b 0c greet_msg .text $20, $20, $20, $20, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, " FFFFFFF MMMMMMMM XX XXX " ,$0D +>396e7b 0b 0c 0b 0c 0b 0c 20 46 46 46 46 46 46 46 20 4d +>396e8b 4d 4d 4d 4d 4d 4d 4d 20 58 58 20 20 20 20 58 58 +>396e9b 58 20 0d +>396e9e 20 20 20 0b 0c 0b 0c 0b .text $20, $20, $20, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $20, "FF MM MM MM XX XXX ",$0D +>396ea6 0c 0b 0c 0b 0c 20 46 46 20 20 20 20 20 20 4d 4d +>396eb6 20 4d 4d 20 4d 4d 20 20 20 58 58 20 58 58 58 20 +>396ec6 20 20 0d +>396ec9 20 20 0b 0c 0b 0c 0b 0c .text $20, $20, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $20, "FFFFF MM MM MM XXX ",$0D +>396ed1 0b 0c 0b 0c 20 46 46 46 46 46 20 20 20 4d 4d 20 +>396ee1 4d 4d 20 4d 4d 20 20 20 20 58 58 58 20 20 20 20 +>396ef1 20 20 0d +>396ef4 20 0b 0c 0b 0c 0b 0c 0b .text $20, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $20, "FF MM MM MM XXX XX ",$0D +>396efc 0c 0b 0c 20 46 46 20 20 20 20 20 20 4d 4d 20 4d +>396f0c 4d 20 4d 4d 20 20 58 58 58 20 20 58 58 20 20 20 +>396f1c 20 20 0d +>396f1f 0b 0c 0b 0c 0b 0c 0b 0c .text $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $0B, $0C, $20, "FF MM MM MM XXX XX ",$0D +>396f27 0b 0c 20 46 46 20 20 20 20 20 20 4d 4d 20 4d 4d +>396f37 20 4d 4d 20 58 58 58 20 20 20 20 20 58 58 20 20 +>396f47 20 20 0d +>396f4a 0d 43 32 35 36 20 46 4f .text $0D, "C256 FOENIX FMX -- 3,670,016 Bytes Free", $0D +>396f52 45 4e 49 58 20 46 4d 58 20 2d 2d 20 33 2c 36 37 +>396f62 30 2c 30 31 36 20 42 79 74 65 73 20 46 72 65 65 +>396f72 0d +>396f73 77 77 77 2e 63 32 35 36 .text "www.c256foenix.com - Kernel version: " +>396f7b 66 6f 65 6e 69 78 2e 63 6f 6d 20 2d 20 4b 65 72 +>396f8b 6e 65 6c 20 76 65 72 73 69 6f 6e 3a 20 ;****** Processing file: src\version.asm ->396f38 76 30 2e 31 2e 30 2d 61 .text "v0.1.0-alpha+1011 (2020-12-31)" ->396f40 6c 70 68 61 2b 31 30 31 31 20 28 32 30 32 30 2d ->396f50 31 32 2d 33 31 29 +>396f98 76 30 2e 31 2e 30 2d 61 .text "v0.1.0-alpha+1044 (2021-03-08)" +>396fa0 6c 70 68 61 2b 31 30 34 34 20 28 32 30 32 31 2d +>396fb0 30 33 2d 30 38 29 ;****** Return to file: src\kernel.asm ->396f56 0d 00 .text $0D,$00 -.396f58 old_pc_style_stat ->396f58 1d 1d 1d 1d 1d 1d 8d 8d greet_clr_line1 .text $1D, $1D, $1D, $1D, $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD ->396f60 4d 4d 2d 2d 5d 5d fd fd fd fd fd fd fd fd fd fd ->396f70 fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ->396f80 fd fd ->396f82 1d 1d 1d 1d 1d 8d 8d 4d greet_clr_line2 .text $1D, $1D, $1D, $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD ->396f8a 4d 2d 2d 5d 5d fd fd fd fd fd fd fd fd fd fd fd ->396f9a fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ->396faa fd fd ->396fac 1d 1d 1d 1d 8d 8d 4d 4d greet_clr_line3 .text $1D, $1D, $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD ->396fb4 2d 2d 5d 5d fd fd fd fd fd fd fd fd fd fd fd fd ->396fc4 fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ->396fd4 fd fd ->396fd6 1d 1d 1d 8d 8d 4d 4d 2d greet_clr_line4 .text $1D, $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD ->396fde 2d 5d 5d fd fd fd fd fd fd fd fd fd fd fd fd fd ->396fee fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ->396ffe fd fd ->397000 1d 1d 8d 8d 4d 4d 2d 2d greet_clr_line5 .text $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD ->397008 5d 5d fd fd fd fd fd fd fd fd fd fd fd fd fd fd ->397018 fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd ->397028 fd fd ->39702a 00 00 00 ff fg_color_lut .text $00, $00, $00, $FF ->39702e 00 00 80 ff .text $00, $00, $80, $FF ->397032 00 80 00 ff .text $00, $80, $00, $FF ->397036 80 00 00 ff .text $80, $00, $00, $FF ->39703a 00 80 80 ff .text $00, $80, $80, $FF ->39703e 80 80 00 ff .text $80, $80, $00, $FF ->397042 80 00 80 ff .text $80, $00, $80, $FF ->397046 80 80 80 ff .text $80, $80, $80, $FF ->39704a 00 45 ff ff .text $00, $45, $FF, $FF ->39704e 13 45 8b ff .text $13, $45, $8B, $FF ->397052 00 00 20 ff .text $00, $00, $20, $FF ->397056 00 20 00 ff .text $00, $20, $00, $FF ->39705a 20 00 00 ff .text $20, $00, $00, $FF ->39705e 20 20 20 ff .text $20, $20, $20, $FF ->397062 40 40 40 ff .text $40, $40, $40, $FF ->397066 ff ff ff ff .text $FF, $FF, $FF, $FF ->39706a 00 00 00 ff bg_color_lut .text $00, $00, $00, $FF ->39706e 00 00 80 ff .text $00, $00, $80, $FF ->397072 00 80 00 ff .text $00, $80, $00, $FF ->397076 80 00 00 ff .text $80, $00, $00, $FF ->39707a 00 20 20 ff .text $00, $20, $20, $FF ->39707e 20 20 00 ff .text $20, $20, $00, $FF ->397082 20 00 20 ff .text $20, $00, $20, $FF ->397086 20 20 20 ff .text $20, $20, $20, $FF ->39708a 1e 69 d2 ff .text $1E, $69, $D2, $FF ->39708e 13 45 8b ff .text $13, $45, $8B, $FF ->397092 00 00 20 ff .text $00, $00, $20, $FF ->397096 00 20 00 ff .text $00, $20, $00, $FF ->39709a 40 00 00 ff .text $40, $00, $00, $FF ->39709e 10 10 10 ff .text $10, $10, $10, $FF ->3970a2 40 40 40 ff .text $40, $40, $40, $FF ->3970a6 ff ff ff ff .text $FF, $FF, $FF, $FF ->3970aa 43 6d 64 20 30 78 41 41 pass_tst0xAAmsg .text "Cmd 0xAA Test passed...", $0D, $00 ->3970b2 20 54 65 73 74 20 70 61 73 73 65 64 2e 2e 2e 0d ->3970c2 00 ->3970c3 43 6d 64 20 30 78 41 42 pass_tst0xABmsg .text "Cmd 0xAB Test passed...", $0D, $00 ->3970cb 20 54 65 73 74 20 70 61 73 73 65 64 2e 2e 2e 0d ->3970db 00 ->3970dc 43 6d 64 20 30 78 36 30 pass_cmd0x60msg .text "Cmd 0x60 Executed.", $0D, $00 ->3970e4 20 45 78 65 63 75 74 65 64 2e 0d 00 ->3970f0 43 6d 64 20 30 78 46 46 pass_cmd0xFFmsg .text "Cmd 0xFF (Reset) Done.", $0D, $00 ->3970f8 20 28 52 65 73 65 74 29 20 44 6f 6e 65 2e 0d 00 ->397108 43 6d 64 20 30 78 45 45 pass_cmd0xEEmsg .text "Cmd 0xEE Echo Test passed...", $0D, $00 ->397110 20 45 63 68 6f 20 54 65 73 74 20 70 61 73 73 65 ->397120 64 2e 2e 2e 0d 00 ->397126 4b 65 79 62 6f 61 72 64 Success_kb_init .text "Keyboard Present", $0D, $00 ->39712e 20 50 72 65 73 65 6e 74 0d 00 ->397138 4e 6f 20 4b 65 79 62 6f Failed_kb_init .text "No Keyboard Attached or Failed Init...", $0D, $00 ->397140 61 72 64 20 41 74 74 61 63 68 65 64 20 6f 72 20 ->397150 46 61 69 6c 65 64 20 49 6e 69 74 2e 2e 2e 0d 00 ->397160 4e 4f 20 53 49 47 4e 41 bmp_parser_err0 .text "NO SIGNATURE FOUND.", $00 ->397168 54 55 52 45 20 46 4f 55 4e 44 2e 00 ->397174 42 4d 50 20 4c 4f 41 44 bmp_parser_msg0 .text "BMP LOADED.", $00 ->39717c 45 44 2e 00 ->397180 45 58 45 43 55 54 49 4e bmp_parser_msg1 .text "EXECUTING BMP PARSER", $00 ->397188 47 20 42 4d 50 20 50 41 52 53 45 52 00 ->397195 49 44 45 20 48 44 44 20 IDE_HDD_Present_msg0 .text "IDE HDD Present:", $00 ->39719d 50 72 65 73 65 6e 74 3a 00 ->3971a6 42 6f 6f 74 20 44 49 50 boot_invalid .null "Boot DIP switch settings are invalid." ->3971ae 20 73 77 69 74 63 68 20 73 65 74 74 69 6e 67 73 ->3971be 20 61 72 65 20 69 6e 76 61 6c 69 64 2e 00 ->3971cc 50 72 65 73 73 20 52 20 boot_retry .null "Press R to retry, B to go to BASIC.", 13 ->3971d4 74 6f 20 72 65 74 72 79 2c 20 42 20 74 6f 20 67 ->3971e4 6f 20 74 6f 20 42 41 53 49 43 2e 0d 00 ->3971f1 55 6e 61 62 6c 65 20 74 sdc_err_boot .null "Unable to read the SD card." ->3971f9 6f 20 72 65 61 64 20 74 68 65 20 53 44 20 63 61 ->397209 72 64 2e 00 ->39720d 55 6e 61 62 6c 65 20 74 ide_err_boot .null "Unable to read from the IDE drive." ->397215 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 ->397225 49 44 45 20 64 72 69 76 65 2e 00 ->397230 55 6e 61 62 6c 65 20 74 fdc_err_boot .null "Unable to read from the floppy drive." ->397238 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 ->397248 66 6c 6f 70 70 79 20 64 72 69 76 65 2e 00 ->397256 42 6f 6f 74 69 6e 67 20 fdc_boot .null "Booting from floppy..." ->39725e 66 72 6f 6d 20 66 6c 6f 70 70 79 2e 2e 2e 00 ->39726d 0d 52 45 41 44 59 2e 00 ready_msg .null $0D,"READY." ->397275 41 42 4f 52 54 20 45 52 error_01 .null "ABORT ERROR" ->39727d 52 4f 52 00 ->397281 30 31 32 33 34 35 36 37 hex_digits .text "0123456789ABCDEF",0 ->397289 38 39 41 42 43 44 45 46 00 ->397292 .align 256 +>396fb6 0d 00 .text $0D,$00 +.396fb8 old_pc_style_stat +>396fb8 1d 1d 1d 1d 1d 1d 8d 8d greet_clr_line1 .text $1D, $1D, $1D, $1D, $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD +>396fc0 4d 4d 2d 2d 5d 5d fd fd fd fd fd fd fd fd fd fd +>396fd0 fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd +>396fe0 fd fd +>396fe2 1d 1d 1d 1d 1d 8d 8d 4d greet_clr_line2 .text $1D, $1D, $1D, $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD +>396fea 4d 2d 2d 5d 5d fd fd fd fd fd fd fd fd fd fd fd +>396ffa fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd +>39700a fd fd +>39700c 1d 1d 1d 1d 8d 8d 4d 4d greet_clr_line3 .text $1D, $1D, $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD +>397014 2d 2d 5d 5d fd fd fd fd fd fd fd fd fd fd fd fd +>397024 fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd +>397034 fd fd +>397036 1d 1d 1d 8d 8d 4d 4d 2d greet_clr_line4 .text $1D, $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD +>39703e 2d 5d 5d fd fd fd fd fd fd fd fd fd fd fd fd fd +>39704e fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd +>39705e fd fd +>397060 1d 1d 8d 8d 4d 4d 2d 2d greet_clr_line5 .text $1D, $1D, $8D, $8D, $4D, $4D, $2D, $2D, $5D, $5D, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD, $FD +>397068 5d 5d fd fd fd fd fd fd fd fd fd fd fd fd fd fd +>397078 fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd +>397088 fd fd +>39708a 00 00 00 ff fg_color_lut .text $00, $00, $00, $FF +>39708e 00 00 80 ff .text $00, $00, $80, $FF +>397092 00 80 00 ff .text $00, $80, $00, $FF +>397096 80 00 00 ff .text $80, $00, $00, $FF +>39709a 00 80 80 ff .text $00, $80, $80, $FF +>39709e 80 80 00 ff .text $80, $80, $00, $FF +>3970a2 80 00 80 ff .text $80, $00, $80, $FF +>3970a6 80 80 80 ff .text $80, $80, $80, $FF +>3970aa 00 45 ff ff .text $00, $45, $FF, $FF +>3970ae 13 45 8b ff .text $13, $45, $8B, $FF +>3970b2 00 00 20 ff .text $00, $00, $20, $FF +>3970b6 00 20 00 ff .text $00, $20, $00, $FF +>3970ba 20 00 00 ff .text $20, $00, $00, $FF +>3970be 20 20 20 ff .text $20, $20, $20, $FF +>3970c2 40 40 40 ff .text $40, $40, $40, $FF +>3970c6 ff ff ff ff .text $FF, $FF, $FF, $FF +>3970ca 00 00 00 ff bg_color_lut .text $00, $00, $00, $FF +>3970ce 00 00 80 ff .text $00, $00, $80, $FF +>3970d2 00 80 00 ff .text $00, $80, $00, $FF +>3970d6 80 00 00 ff .text $80, $00, $00, $FF +>3970da 00 20 20 ff .text $00, $20, $20, $FF +>3970de 20 20 00 ff .text $20, $20, $00, $FF +>3970e2 20 00 20 ff .text $20, $00, $20, $FF +>3970e6 20 20 20 ff .text $20, $20, $20, $FF +>3970ea 1e 69 d2 ff .text $1E, $69, $D2, $FF +>3970ee 13 45 8b ff .text $13, $45, $8B, $FF +>3970f2 00 00 20 ff .text $00, $00, $20, $FF +>3970f6 00 20 00 ff .text $00, $20, $00, $FF +>3970fa 40 00 00 ff .text $40, $00, $00, $FF +>3970fe 10 10 10 ff .text $10, $10, $10, $FF +>397102 40 40 40 ff .text $40, $40, $40, $FF +>397106 ff ff ff ff .text $FF, $FF, $FF, $FF +>39710a 43 6d 64 20 30 78 41 41 pass_tst0xAAmsg .text "Cmd 0xAA Test passed...", $0D, $00 +>397112 20 54 65 73 74 20 70 61 73 73 65 64 2e 2e 2e 0d +>397122 00 +>397123 43 6d 64 20 30 78 41 42 pass_tst0xABmsg .text "Cmd 0xAB Test passed...", $0D, $00 +>39712b 20 54 65 73 74 20 70 61 73 73 65 64 2e 2e 2e 0d +>39713b 00 +>39713c 43 6d 64 20 30 78 36 30 pass_cmd0x60msg .text "Cmd 0x60 Executed.", $0D, $00 +>397144 20 45 78 65 63 75 74 65 64 2e 0d 00 +>397150 43 6d 64 20 30 78 46 46 pass_cmd0xFFmsg .text "Cmd 0xFF (Reset) Done.", $0D, $00 +>397158 20 28 52 65 73 65 74 29 20 44 6f 6e 65 2e 0d 00 +>397168 43 6d 64 20 30 78 45 45 pass_cmd0xEEmsg .text "Cmd 0xEE Echo Test passed...", $0D, $00 +>397170 20 45 63 68 6f 20 54 65 73 74 20 70 61 73 73 65 +>397180 64 2e 2e 2e 0d 00 +>397186 4b 65 79 62 6f 61 72 64 Success_kb_init .text "Keyboard Present", $0D, $00 +>39718e 20 50 72 65 73 65 6e 74 0d 00 +>397198 4e 6f 20 4b 65 79 62 6f Failed_kb_init .text "No Keyboard Attached or Failed Init...", $0D, $00 +>3971a0 61 72 64 20 41 74 74 61 63 68 65 64 20 6f 72 20 +>3971b0 46 61 69 6c 65 64 20 49 6e 69 74 2e 2e 2e 0d 00 +>3971c0 4e 4f 20 53 49 47 4e 41 bmp_parser_err0 .text "NO SIGNATURE FOUND.", $00 +>3971c8 54 55 52 45 20 46 4f 55 4e 44 2e 00 +>3971d4 42 4d 50 20 4c 4f 41 44 bmp_parser_msg0 .text "BMP LOADED.", $00 +>3971dc 45 44 2e 00 +>3971e0 45 58 45 43 55 54 49 4e bmp_parser_msg1 .text "EXECUTING BMP PARSER", $00 +>3971e8 47 20 42 4d 50 20 50 41 52 53 45 52 00 +>3971f5 49 44 45 20 48 44 44 20 IDE_HDD_Present_msg0 .text "IDE HDD Present:", $00 +>3971fd 50 72 65 73 65 6e 74 3a 00 +>397206 42 6f 6f 74 20 44 49 50 boot_invalid .null "Boot DIP switch settings are invalid." +>39720e 20 73 77 69 74 63 68 20 73 65 74 74 69 6e 67 73 +>39721e 20 61 72 65 20 69 6e 76 61 6c 69 64 2e 00 +>39722c 50 72 65 73 73 20 52 20 boot_retry .null "Press R to retry, B to go to BASIC.", 13 +>397234 74 6f 20 72 65 74 72 79 2c 20 42 20 74 6f 20 67 +>397244 6f 20 74 6f 20 42 41 53 49 43 2e 0d 00 +>397251 55 6e 61 62 6c 65 20 74 sdc_err_boot .null "Unable to read the SD card." +>397259 6f 20 72 65 61 64 20 74 68 65 20 53 44 20 63 61 +>397269 72 64 2e 00 +>39726d 55 6e 61 62 6c 65 20 74 ide_err_boot .null "Unable to read from the IDE drive." +>397275 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 +>397285 49 44 45 20 64 72 69 76 65 2e 00 +>397290 55 6e 61 62 6c 65 20 74 fdc_err_boot .null "Unable to read from the floppy drive." +>397298 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 +>3972a8 66 6c 6f 70 70 79 20 64 72 69 76 65 2e 00 +>3972b6 42 6f 6f 74 69 6e 67 20 fdc_boot .null "Booting from floppy..." +>3972be 66 72 6f 6d 20 66 6c 6f 70 70 79 2e 2e 2e 00 +>3972cd 0d 52 45 41 44 59 2e 00 ready_msg .null $0D,"READY." +>3972d5 41 42 4f 52 54 20 45 52 error_01 .null "ABORT ERROR" +>3972dd 52 4f 52 00 +>3972e1 30 31 32 33 34 35 36 37 hex_digits .text "0123456789ABCDEF",0 +>3972e9 38 39 41 42 43 44 45 46 00 +>3972f2 .align 256 >397300 00 1b 31 32 33 34 35 36 ScanCode_Press_Set1 .text $00, $1B, $31, $32, $33, $34, $35, $36, $37, $38, $39, $30, $2D, $3D, $08, $09 ; $00 >397308 37 38 39 30 2d 3d 08 09 >397310 71 77 65 72 74 79 75 69 .text $71, $77, $65, $72, $74, $79, $75, $69, $6F, $70, $5B, $5D, $0D, $00, $61, $73 ; $10 @@ -13888,270 +14005,12 @@ >3979e8 00 01 01 00 00 00 00 00 >3979f0 00 00 00 00 00 00 00 00 .text $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 >3979f8 00 00 00 00 00 00 00 00 -.3ff000 FONT_4_BANK0 ->3ff000 00 00 00 00 00 00 00 00 .binary "FONT/Bm437_PhoenixEGA_8x8.bin", 0, 2048 ->3ff008 7e 81 a5 81 bd 99 81 7e 3c 7e db ff c3 7e 3c 00 ->3ff018 00 ee fe fe 7c 38 10 00 10 38 7c fe 7c 38 10 00 ->3ff028 00 3c 18 ff ff 08 18 00 10 38 7c fe fe 10 38 00 ->3ff038 00 00 18 3c 18 00 00 00 ff ff e7 c3 e7 ff ff ff ->3ff048 00 3c 42 81 81 42 3c 00 ff c3 bd 7e 7e bd c3 ff ->3ff058 01 03 07 0f 1f 3f 7f ff ff fe fc f8 f0 e0 c0 80 ->3ff068 04 06 07 04 04 fc f8 00 0c 0a 0d 0b f9 f9 1f 1f ->3ff078 00 92 7c 44 c6 7c 92 00 00 00 60 78 7e 78 60 00 ->3ff088 00 00 06 1e 7e 1e 06 00 18 7e 18 18 18 18 7e 18 ->3ff098 66 66 66 66 66 00 66 00 ff b6 76 36 36 36 36 00 ->3ff0a8 7e c1 dc 22 22 1f 83 7e 00 00 00 7e 7e 00 00 00 ->3ff0b8 18 7e 18 18 7e 18 00 ff 18 7e 18 18 18 18 18 00 ->3ff0c8 18 18 18 18 18 7e 18 00 00 04 06 ff 06 04 00 00 ->3ff0d8 00 20 60 ff 60 20 00 00 00 00 00 c0 c0 c0 ff 00 ->3ff0e8 00 24 66 ff 66 24 00 00 00 00 10 38 7c fe 00 00 ->3ff0f8 00 00 00 fe 7c 38 10 00 00 00 00 00 00 00 00 00 ->3ff108 30 30 30 30 30 00 30 00 66 66 00 00 00 00 00 00 ->3ff118 6c 6c fe 6c fe 6c 6c 00 10 7c d2 7c 86 7c 10 00 ->3ff128 f0 96 fc 18 3e 72 de 00 30 48 30 78 ce cc 78 00 ->3ff138 0c 0c 18 00 00 00 00 00 10 60 c0 c0 c0 60 10 00 ->3ff148 10 0c 06 06 06 0c 10 00 00 54 38 fe 38 54 00 00 ->3ff158 00 18 18 7e 18 18 00 00 00 00 00 00 00 00 18 70 ->3ff168 00 00 00 7e 00 00 00 00 00 00 00 00 00 00 18 00 ->3ff178 02 06 0c 18 30 60 c0 00 7c ce de f6 e6 e6 7c 00 ->3ff188 18 38 78 18 18 18 3c 00 7c c6 06 0c 30 60 fe 00 ->3ff198 7c c6 06 3c 06 c6 7c 00 0e 1e 36 66 fe 06 06 00 ->3ff1a8 fe c0 c0 fc 06 06 fc 00 7c c6 c0 fc c6 c6 7c 00 ->3ff1b8 fe 06 0c 18 30 60 60 00 7c c6 c6 7c c6 c6 7c 00 ->3ff1c8 7c c6 c6 7e 06 c6 7c 00 00 30 00 00 00 30 00 00 ->3ff1d8 00 30 00 00 00 30 20 00 00 1c 30 60 30 1c 00 00 ->3ff1e8 00 00 7e 00 7e 00 00 00 00 70 18 0c 18 70 00 00 ->3ff1f8 7c c6 0c 18 30 00 30 00 7c 82 9a aa aa 9e 7c 00 ->3ff208 7c c6 c6 fe c6 c6 c6 00 fc 66 66 7c 66 66 fc 00 ->3ff218 7c c6 c0 c0 c0 c6 7c 00 fc 66 66 66 66 66 fc 00 ->3ff228 fe 62 68 78 68 62 fe 00 fe 62 68 78 68 60 f0 00 ->3ff238 7c c6 c6 c0 de c6 7c 00 c6 c6 c6 fe c6 c6 c6 00 ->3ff248 3c 18 18 18 18 18 3c 00 1e 0c 0c 0c 0c cc 78 00 ->3ff258 c6 cc d8 f0 d8 cc c6 00 f0 60 60 60 60 62 fe 00 ->3ff268 c6 ee fe d6 c6 c6 c6 00 c6 e6 f6 de ce c6 c6 00 ->3ff278 7c c6 c6 c6 c6 c6 7c 00 fc 66 66 7c 60 60 f0 00 ->3ff288 7c c6 c6 c6 c6 c6 7c 0c fc 66 66 7c 66 66 e6 00 ->3ff298 7c c6 c0 7c 06 c6 7c 00 7e 5a 18 18 18 18 3c 00 ->3ff2a8 c6 c6 c6 c6 c6 c6 7c 00 c6 c6 c6 c6 c6 6c 38 00 ->3ff2b8 c6 c6 c6 c6 d6 ee c6 00 c6 6c 38 38 38 6c c6 00 ->3ff2c8 66 66 66 3c 18 18 3c 00 fe c6 0c 18 30 66 fe 00 ->3ff2d8 1c 18 18 18 18 18 1c 00 c0 60 30 18 0c 06 02 00 ->3ff2e8 70 30 30 30 30 30 70 00 00 00 10 38 6c c6 00 00 ->3ff2f8 00 00 00 00 00 00 00 ff 30 30 18 00 00 00 00 00 ->3ff308 00 00 7c 06 7e c6 7e 00 c0 c0 fc c6 c6 c6 fc 00 ->3ff318 00 00 7c c6 c0 c6 7c 00 06 06 7e c6 c6 c6 7e 00 ->3ff328 00 00 7c c6 fe c0 7c 00 3c 66 60 f0 60 60 60 00 ->3ff338 00 00 7e c6 c6 7e 06 7c c0 c0 fc c6 c6 c6 c6 00 ->3ff348 18 00 38 18 18 18 3c 00 00 0c 00 1c 0c 0c cc 78 ->3ff358 c0 c0 c6 d8 f0 d8 c6 00 38 18 18 18 18 18 3c 00 ->3ff368 00 00 ee fe d6 c6 c6 00 00 00 fc c6 c6 c6 c6 00 ->3ff378 00 00 7c c6 c6 c6 7c 00 00 00 fc c6 c6 fc c0 c0 ->3ff388 00 00 7e c6 c6 7e 06 06 00 00 de 76 60 60 60 00 ->3ff398 00 00 7c c0 7c 06 7c 00 18 18 7e 18 18 18 1e 00 ->3ff3a8 00 00 c6 c6 c6 c6 7e 00 00 00 c6 c6 c6 6c 38 00 ->3ff3b8 00 00 c6 c6 d6 fe c6 00 00 00 c6 6c 38 6c c6 00 ->3ff3c8 00 00 c6 c6 c6 7e 06 7c 00 00 fe 0c 18 60 fe 00 ->3ff3d8 0e 18 18 70 18 18 0e 00 18 18 18 00 18 18 18 00 ->3ff3e8 e0 30 30 1c 30 30 e0 00 00 00 70 9a 0e 00 00 00 ->3ff3f8 00 00 18 3c 66 ff 00 00 7c c6 c0 c0 c6 7c 18 70 ->3ff408 66 00 c6 c6 c6 c6 7e 00 0e 18 7c c6 fe c0 7c 00 ->3ff418 18 24 7c 06 7e c6 7e 00 66 00 7c 06 7e c6 7e 00 ->3ff428 38 0c 7c 06 7e c6 7e 00 18 00 7c 06 7e c6 7e 00 ->3ff438 00 00 7c c0 c0 7c 18 70 18 24 7c c6 fe c0 7c 00 ->3ff448 66 00 7c c6 fe c0 7c 00 70 18 7c c6 fe c0 7c 00 ->3ff458 66 00 38 18 18 18 3c 00 18 24 38 18 18 18 3c 00 ->3ff468 38 0c 38 18 18 18 3c 00 66 00 7c c6 fe c6 c6 00 ->3ff478 18 00 7c c6 fe c6 c6 00 0e 18 fe 60 78 60 fe 00 ->3ff488 00 00 7c 1a 7e d8 7e 00 7e d8 d8 de f8 d8 de 00 ->3ff498 18 24 7c c6 c6 c6 7c 00 66 00 7c c6 c6 c6 7c 00 ->3ff4a8 38 0c 7c c6 c6 c6 7c 00 18 24 c6 c6 c6 c6 7e 00 ->3ff4b8 38 0c c6 c6 c6 c6 7e 00 66 00 c6 c6 c6 7e 06 7c ->3ff4c8 66 7c c6 c6 c6 c6 7c 00 c6 00 c6 c6 c6 c6 7c 00 ->3ff4d8 18 7c c6 c0 c6 7c 18 00 1e 32 30 78 30 70 fe 00 ->3ff4e8 66 3c 18 7e 18 3c 18 00 fc c6 fc c0 cc de cc 0e ->3ff4f8 00 1c 32 30 fc 30 f0 00 0e 18 7c 06 7e c6 7e 00 ->3ff508 1a 30 38 18 18 18 3c 00 0e 18 7c c6 c6 c6 7c 00 ->3ff518 0e 18 c6 c6 c6 c6 7e 00 66 98 fc c6 c6 c6 c6 00 ->3ff528 66 98 e6 f6 de ce c6 00 7c 06 7e c6 7e 00 fe 00 ->3ff538 7c c6 c6 c6 7c 00 fe 00 18 00 18 30 60 c6 7c 00 ->3ff548 00 00 fe c0 c0 c0 c0 00 00 00 fe 06 06 06 06 00 ->3ff558 c0 c0 c0 de 06 0c 1e 00 c0 c0 c0 cc 1c 3e 0c 00 ->3ff568 30 00 30 30 30 30 30 00 00 36 6c d8 6c 36 00 00 ->3ff578 00 d8 6c 36 6c d8 00 00 aa aa aa aa aa aa aa aa ->3ff588 aa 55 aa 55 aa 55 aa 55 44 22 44 22 44 22 44 22 ->3ff598 18 18 18 18 18 18 18 18 18 18 18 f8 18 18 18 18 ->3ff5a8 18 18 18 f8 18 f8 18 18 36 36 36 f6 36 36 36 36 ->3ff5b8 00 00 00 fe 36 36 36 36 00 00 00 f8 18 f8 18 18 ->3ff5c8 36 36 36 f6 06 f6 36 36 36 36 36 36 36 36 36 36 ->3ff5d8 00 00 00 fe 06 f6 36 36 36 36 36 f6 06 fe 00 00 ->3ff5e8 36 36 36 fe 00 00 00 00 18 18 18 f8 18 f8 00 00 ->3ff5f8 00 00 00 f8 18 18 18 18 18 18 18 1f 00 00 00 00 ->3ff608 18 18 18 ff 00 00 00 00 00 00 00 ff 18 18 18 18 ->3ff618 18 18 18 1f 18 18 18 18 00 00 00 ff 00 00 00 00 ->3ff628 18 18 18 ff 18 18 18 18 18 18 18 1f 18 1f 18 18 ->3ff638 36 36 36 37 36 36 36 36 36 36 36 37 30 3f 00 00 ->3ff648 00 00 00 3f 30 37 36 36 36 36 36 f7 00 ff 00 00 ->3ff658 00 00 00 ff 00 f7 36 36 36 36 36 37 30 37 36 36 ->3ff668 00 00 00 ff 00 ff 00 00 36 36 36 f7 00 f7 36 36 ->3ff678 18 18 18 ff 00 ff 00 00 36 36 36 ff 00 00 00 00 ->3ff688 00 00 00 ff 00 ff 18 18 00 00 00 ff 36 36 36 36 ->3ff698 36 36 36 3f 00 00 00 00 18 18 18 1f 18 1f 00 00 ->3ff6a8 00 00 00 1f 18 1f 18 18 00 00 00 3f 36 36 36 36 ->3ff6b8 36 36 36 ff 36 36 36 36 18 18 18 ff 18 ff 18 18 ->3ff6c8 18 18 18 f8 00 00 00 00 00 00 00 1f 18 18 18 18 ->3ff6d8 ff ff ff ff ff ff ff ff 00 00 00 00 ff ff ff ff ->3ff6e8 f0 f0 f0 f0 f0 f0 f0 f0 0f 0f 0f 0f 0f 0f 0f 0f ->3ff6f8 ff ff ff ff 00 00 00 00 00 00 77 98 98 77 00 00 ->3ff708 1c 36 66 fc c6 c6 fc c0 fe 62 60 60 60 60 60 00 ->3ff718 00 00 ff 66 66 66 66 00 fe 62 30 18 30 62 fe 00 ->3ff728 00 00 3f 66 c6 cc 78 00 00 00 33 33 33 3e 30 f0 ->3ff738 00 00 ff 18 18 18 18 00 3c 18 3c 66 66 3c 18 3c ->3ff748 00 7c c6 fe c6 7c 00 00 00 7e c3 c3 c3 66 e7 00 ->3ff758 1e 19 3c 66 c6 cc 78 00 00 00 66 99 99 66 00 00 ->3ff768 00 03 7c ce e6 7c c0 00 00 3e c0 fe c0 3e 00 00 ->3ff778 00 7e c3 c3 c3 c3 00 00 00 fe 00 fe 00 fe 00 00 ->3ff788 18 18 7e 18 18 7e 00 00 70 18 0c 18 70 00 fe 00 ->3ff798 1c 30 60 30 1c 00 fe 00 00 0e 1b 18 18 18 18 18 ->3ff7a8 18 18 18 18 18 d8 70 00 00 18 00 7e 00 18 00 00 ->3ff7b8 00 76 dc 00 76 dc 00 00 3c 66 3c 00 00 00 00 00 ->3ff7c8 00 18 3c 18 00 00 00 00 00 00 00 00 18 00 00 00 ->3ff7d8 0f 0c 0c 0c ec 6c 38 00 d8 ec cc cc 00 00 00 00 ->3ff7e8 f0 30 c0 f0 00 00 00 00 00 00 00 3c 3c 3c 3c 00 ->3ff7f8 00 00 00 00 00 00 00 00 -.3ff800 FONT_4_BANK1 ->3ff800 00 00 00 00 00 00 00 00 .binary "FONT/CBM-ASCII_8x8.bin", 0, 2048 ->3ff808 7c 82 aa 82 ba 92 82 7c 7c fe d6 fe c6 ee fe 7c ->3ff818 ff fd fb f5 eb d5 ab ff ff e1 fd 85 85 87 87 ff ->3ff828 ff bd db e7 e7 db bd ff ff 81 81 bd bd bd 81 ff ->3ff838 ff ff ff ff ff 81 81 ff 00 08 10 20 10 08 00 00 ->3ff848 00 24 14 0c 14 24 00 00 00 8e 88 8c 88 e8 00 00 ->3ff858 00 00 00 00 00 00 00 00 00 ee 88 cc 88 88 00 00 ->3ff868 00 00 04 14 3c 10 00 00 00 30 4c 4c 30 00 00 00 ->3ff878 00 38 28 38 28 00 00 00 ff 81 bd bd bd bd 81 ff ->3ff888 ff 55 aa 55 aa 55 aa ff ab d5 ab d5 ab d5 ab d5 ->3ff898 ff 81 81 81 81 81 81 ff ff f9 e1 81 81 e1 f9 ff ->3ff8a8 ff 9f 87 81 81 87 9f ff ff e7 e7 c3 c3 81 81 ff ->3ff8b8 ff 81 81 c3 c3 e7 e7 ff 00 26 54 04 04 04 06 00 ->3ff8c8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -; ...repeated 3 times (48 bytes)... ->3ff908 10 10 10 10 00 10 00 00 24 24 24 00 00 00 00 00 ->3ff918 24 7e 24 24 7e 24 00 00 10 3c 50 38 14 78 10 00 ->3ff928 62 64 08 10 20 4c 8c 00 30 48 48 30 58 4c 4c 38 ->3ff938 10 10 10 00 00 00 00 00 08 10 20 20 20 20 10 08 ->3ff948 10 08 04 04 04 04 08 10 00 24 18 7e 18 24 00 00 ->3ff958 00 10 10 7c 10 10 00 00 00 00 00 00 10 10 20 00 ->3ff968 00 00 00 3c 00 00 00 00 00 00 00 00 18 18 00 00 ->3ff978 04 04 08 08 10 10 20 20 3c 46 4a 52 62 42 3c 00 ->3ff988 10 30 10 10 10 10 38 00 38 44 04 18 20 40 7c 00 ->3ff998 38 44 04 18 04 44 38 00 08 18 28 48 7c 08 08 00 ->3ff9a8 7c 40 78 04 04 44 38 00 38 44 40 78 44 44 38 00 ->3ff9b8 7c 44 04 08 08 10 10 00 38 44 44 38 44 44 38 00 ->3ff9c8 38 44 44 3c 04 44 38 00 00 00 18 00 00 18 00 00 ->3ff9d8 00 00 18 00 00 18 18 30 00 08 10 20 10 08 00 00 ->3ff9e8 00 00 3c 00 3c 00 00 00 00 10 08 04 08 10 00 00 ->3ff9f8 38 44 04 08 10 00 10 00 38 44 4c 4c 40 44 38 00 ->3ffa08 10 28 44 7c 44 44 00 00 78 44 78 44 44 78 00 00 ->3ffa18 38 44 40 40 44 38 00 00 78 44 44 44 44 78 00 00 ->3ffa28 7c 40 78 40 40 7c 00 00 7c 40 78 40 40 40 00 00 ->3ffa38 38 44 40 4c 44 38 00 00 44 44 7c 44 44 44 00 00 ->3ffa48 38 10 10 10 10 38 00 00 1c 08 08 08 48 30 00 00 ->3ffa58 24 28 30 30 28 24 00 00 20 20 20 20 20 3c 00 00 ->3ffa68 44 6c 7c 54 44 44 00 00 44 64 54 4c 44 44 00 00 ->3ffa78 38 44 44 44 44 38 00 00 78 44 44 78 40 40 00 00 ->3ffa88 38 44 44 44 44 38 0c 00 78 44 44 78 48 44 00 00 ->3ffa98 3c 40 38 04 04 78 00 00 7c 10 10 10 10 10 00 00 ->3ffaa8 44 44 44 44 44 38 00 00 44 44 44 44 28 10 00 00 ->3ffab8 82 82 82 92 92 6c 00 00 42 24 18 18 24 42 00 00 ->3ffac8 44 44 28 10 10 10 00 00 7c 08 10 20 40 7c 00 00 ->3ffad8 38 20 20 20 20 20 38 00 20 20 10 10 08 08 04 04 ->3ffae8 38 08 08 08 08 08 38 00 00 10 28 44 00 00 00 00 ->3ffaf8 00 00 00 00 00 00 00 7e 40 20 10 00 00 00 00 00 ->3ffb08 00 38 04 3c 64 3c 00 00 40 40 78 44 44 78 00 00 ->3ffb18 00 00 38 40 40 38 00 00 04 04 3c 44 44 3c 00 00 ->3ffb28 00 38 44 7c 40 3c 00 00 0c 10 3c 10 10 10 00 00 ->3ffb38 00 00 3c 44 44 3c 04 78 40 40 78 44 44 44 00 00 ->3ffb48 10 00 30 10 10 38 00 00 08 00 08 08 08 08 08 30 ->3ffb58 20 20 24 38 28 24 00 00 30 10 10 10 10 10 00 00 ->3ffb68 00 00 68 54 54 44 00 00 00 00 38 24 24 24 00 00 ->3ffb78 00 00 38 44 44 38 00 00 00 00 78 44 44 78 40 40 ->3ffb88 00 00 3c 44 44 3c 04 04 00 00 78 44 40 40 00 00 ->3ffb98 00 00 1c 30 0c 38 00 00 00 10 7c 10 10 10 0c 00 ->3ffba8 00 00 44 44 44 3c 00 00 00 00 42 42 24 18 00 00 ->3ffbb8 00 00 82 82 92 6c 00 00 00 00 24 18 18 24 00 00 ->3ffbc8 00 00 24 24 24 1c 04 38 00 00 7c 18 30 7c 00 00 ->3ffbd8 0c 10 10 30 30 10 10 0c 18 18 18 00 18 18 18 00 ->3ffbe8 30 08 08 0c 0c 08 08 30 00 00 32 7e 4c 00 00 00 ->3ffbf8 00 00 10 28 38 00 00 00 00 00 3c 3c 3c 3c 00 00 ->3ffc08 00 00 3c 24 24 3c 00 00 00 00 18 3c 3c 18 00 00 ->3ffc18 00 00 18 24 24 18 00 00 18 24 24 18 00 00 00 00 ->3ffc28 00 3c 42 42 66 24 66 00 00 18 00 18 0c 06 66 3c ->3ffc38 0c 12 30 7c 30 62 fc 00 1c 20 70 20 70 20 1c 00 ->3ffc48 02 06 0c d8 f0 e0 c0 00 18 18 ff 00 00 ff 00 00 ->3ffc58 00 00 ff 00 00 ff 18 18 24 24 24 e7 e7 24 24 24 ->3ffc68 18 18 ff 00 00 ff 18 18 24 24 24 27 27 24 24 24 ->3ffc78 24 24 24 e4 e4 24 24 24 00 00 00 ff ff ff ff ff ->3ffc88 00 00 ff ff ff ff ff ff 00 ff ff ff ff ff ff ff ->3ffc98 ff ff ff ff ff ff ff 00 ff ff ff ff ff ff 00 00 ->3ffca8 ff ff ff ff ff 00 00 00 ff ff ff ff 00 00 00 00 ->3ffcb8 f8 f8 f8 f8 f8 f8 f8 f8 fc fc fc fc fc fc fc fc ->3ffcc8 fe fe fe fe fe fe fe fe 7f 7f 7f 7f 7f 7f 7f 7f ->3ffcd8 3f 3f 3f 3f 3f 3f 3f 3f 1f 1f 1f 1f 1f 1f 1f 1f ->3ffce8 0f 0f 0f 0f 0f 0f 0f 0f 00 00 00 00 00 00 00 00 ->3ffcf8 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ->3ffd08 f0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 ff ff ff ff ->3ffd18 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ->3ffd28 80 80 80 80 80 80 80 80 aa 55 aa 55 aa 55 aa 55 ->3ffd38 01 01 01 01 01 01 01 01 00 00 00 00 aa 55 aa 55 ->3ffd48 ff fe fc f8 f0 e0 c0 80 03 03 03 03 03 03 03 03 ->3ffd58 18 18 18 1f 1f 18 18 18 00 00 00 00 0f 0f 0f 0f ->3ffd68 18 18 18 1f 1f 00 00 00 00 00 00 f8 f8 18 18 18 ->3ffd78 00 00 00 00 00 00 ff ff 00 00 00 1f 1f 18 18 18 ->3ffd88 18 18 18 ff ff 00 00 00 00 00 00 ff ff 18 18 18 ->3ffd98 18 18 18 f8 f8 18 18 18 c0 c0 c0 c0 c0 c0 c0 c0 ->3ffda8 e0 e0 e0 e0 e0 e0 e0 e0 07 07 07 07 07 07 07 07 ->3ffdb8 ff ff 00 00 00 00 00 00 ff ff ff 00 00 00 00 00 ->3ffdc8 00 00 00 00 00 ff ff ff 03 03 03 03 03 03 ff ff ->3ffdd8 00 00 00 00 f0 f0 f0 f0 0f 0f 0f 0f 00 00 00 00 ->3ffde8 18 18 18 f8 f8 00 00 00 f0 f0 f0 f0 00 00 00 00 ->3ffdf8 f0 f0 f0 f0 0f 0f 0f 0f 00 00 00 ff ff 00 00 00 ->3ffe08 08 1c 3e 7f 7f 1c 3e 00 18 18 18 18 18 18 18 18 ->3ffe18 00 00 00 ff ff 00 00 00 00 00 ff ff 00 00 00 00 ->3ffe28 00 ff ff 00 00 00 00 00 00 00 00 00 ff ff 00 00 ->3ffe38 30 30 30 30 30 30 30 30 0c 0c 0c 0c 0c 0c 0c 0c ->3ffe48 00 00 00 e0 f0 38 18 18 18 18 1c 0f 07 00 00 00 ->3ffe58 18 18 38 f0 e0 00 00 00 c0 c0 c0 c0 c0 c0 ff ff ->3ffe68 c0 e0 70 38 1c 0e 07 03 03 07 0e 1c 38 70 e0 c0 ->3ffe78 ff ff c0 c0 c0 c0 c0 c0 ff ff 03 03 03 03 03 03 ->3ffe88 00 3c 7e 7e 7e 7e 3c 00 00 00 00 00 00 ff ff 00 ->3ffe98 36 7f 7f 7f 3e 1c 08 00 60 60 60 60 60 60 60 60 ->3ffea8 00 00 00 07 0f 1c 18 18 c3 e7 7e 3c 3c 7e e7 c3 ->3ffeb8 00 3c 7e 66 66 7e 3c 00 18 18 66 66 18 18 3c 00 ->3ffec8 06 06 06 06 06 06 06 06 08 1c 3e 7f 3e 1c 08 00 ->3ffed8 18 18 18 ff ff 18 18 18 c0 c0 30 30 c0 c0 30 30 ->3ffee8 18 18 18 18 18 18 18 18 00 00 03 3e 76 36 36 00 ->3ffef8 ff 7f 3f 1f 0f 07 03 01 24 24 24 24 24 24 24 24 ->3fff08 00 00 ff 00 00 ff 00 00 00 00 3f 20 20 27 24 24 ->3fff18 00 00 ff 00 00 e7 24 24 00 00 fc 04 04 e4 24 24 ->3fff28 24 24 27 20 20 3f 00 00 24 24 e7 00 00 ff 00 00 ->3fff38 24 24 e4 04 04 fc 00 00 24 24 27 20 20 27 24 24 ->3fff48 24 24 e4 04 04 e4 24 24 24 24 e7 00 00 e7 24 24 ->3fff58 0f 0f 0f 0f f0 f0 f0 f0 01 03 07 0f 1f 3f 7f ff ->3fff68 80 c0 e0 f0 f8 fc fe ff 33 99 cc 66 33 99 cc 66 ->3fff78 cc 99 33 66 cc 99 33 66 f0 f0 f0 f0 ff ff ff ff ->3fff88 0f 0f 0f 0f ff ff ff ff ff ff ff ff f0 f0 f0 f0 ->3fff98 ff ff ff ff 0f 0f 0f 0f 05 0a 05 0a 00 00 00 00 ->3fffa8 00 00 00 00 0a 05 0a 05 a0 50 a0 50 00 00 00 00 ->3fffb8 00 00 00 00 a0 50 a0 50 0a 05 0a 05 0a 05 0a 05 ->3fffc8 aa 55 aa 55 00 00 00 00 00 18 3c 7e 18 18 18 18 ->3fffd8 00 10 30 7f 7f 30 10 00 00 08 0c fe fe 0c 08 00 ->3fffe8 18 18 18 18 7e 3c 18 00 00 00 36 49 36 00 00 00 ->3ffff8 00 00 00 00 00 00 00 00 ->3a0000 5c 04 6e 3a 5c 16 54 3a .binary "binaries/basic816.bin" ->3a0008 5c eb 21 3a 5c 40 01 3a 5c 58 00 3a 5c d6 00 3a ->3a0018 5c 6b 02 3a 5c e4 00 3a 5c ff 00 3a 5c 06 01 3a ->3a0028 0b 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 85 b3 ->3a0038 c2 20 a5 a4 d0 06 e2 20 a5 a6 f0 11 c2 10 a4 a9 ->3a0048 c4 a7 f0 09 e2 20 a5 b3 97 a4 c8 84 a9 28 2b 60 +>3a0000 5c c2 7d 3a 5c d1 63 3a .binary "binaries/basic816.bin" +>3a0008 5c f5 24 3a 5c 5b 01 3a 5c 58 00 3a 5c d6 00 3a +>3a0018 5c 86 02 3a 5c ff 00 3a 5c 1a 01 3a 5c 21 01 3a +>3a0028 0b 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 85 b5 +>3a0038 c2 20 a5 a6 d0 06 e2 20 a5 a8 f0 11 c2 10 a4 ab +>3a0048 c4 a9 f0 09 e2 20 a5 b5 97 a6 c8 84 ab 28 2b 60 >3a0058 08 c2 10 e2 20 a9 01 20 1c 00 a2 00 00 a9 00 9f >3a0068 00 4c 00 e8 e0 00 01 d0 f6 a2 00 00 20 14 00 c9 >3a0078 0d d0 03 4c cf 00 c9 9d d0 08 e0 00 00 f0 ed ca @@ -14160,1774 +14019,2026 @@ >3a00a8 4c 00 9f 00 4c 00 f0 06 e8 e0 ff 00 d0 f0 fa ca >3a00b8 80 0e c9 20 90 b6 9f 00 4c 00 e8 20 18 00 80 ac >3a00c8 a9 08 20 18 00 80 a5 a9 00 20 1c 00 28 60 22 4c ->3a00d8 10 00 60 20 14 00 48 20 18 00 68 60 08 e2 20 c9 ->3a00e8 00 f0 08 af 10 00 af 09 01 80 06 af 10 00 af 29 ->3a00f8 fe 8f 10 00 af 28 60 08 22 84 10 00 28 60 48 da ->3a0108 5a 0b 08 e2 20 c2 10 a2 00 00 a9 20 9f 00 a0 af ->3a0118 af 1e 00 00 9f 00 c0 af e8 e0 00 20 d0 ec 08 c2 ->3a0128 20 48 a9 00 00 5b 68 28 a2 00 00 a0 00 00 22 84 ->3a0138 10 00 28 2b 7a fa 68 60 da 5a 0b 08 08 c2 20 48 ->3a0148 a9 00 08 5b 68 28 c2 30 af 0c 00 00 85 08 e2 20 ->3a0158 af 0e 00 00 c2 20 29 ff 00 85 0a af 11 00 00 8f ->3a0168 08 01 00 af 1c 00 00 3a 8f 0a 01 00 18 a5 08 6f ->3a0178 0c 01 00 85 08 a5 0a 69 00 00 85 0a e2 20 af 0f ->3a0188 00 00 85 8d a0 00 00 a2 00 00 b7 08 9f 00 4f 00 ->3a0198 e8 c8 c4 8d d0 f4 ca bf 00 4f 00 c9 20 d0 09 a9 ->3a01a8 00 9f 00 4f 00 ca 10 ef 28 2b 7a fa 60 e2 20 a9 ->3a01b8 48 8f 0f 00 00 a9 34 8f 13 00 00 a9 20 8f 08 00 ->3a01c8 af 8f 09 00 af a2 00 00 a9 00 9f 18 f0 3a e8 e0 ->3a01d8 40 00 d0 f6 a9 80 8f b2 08 00 e2 20 a9 00 8f 89 ->3a01e8 0f 00 a9 00 8f 00 02 af 8f 0c 02 af 8f 18 02 af ->3a01f8 8f 24 02 af 60 08 e2 20 48 48 a9 00 22 3c 10 00 ->3a0208 68 22 18 10 00 af 89 0f 00 29 01 d0 f8 68 28 60 ->3a0218 08 e2 20 48 48 a9 01 22 3c 10 00 68 22 18 10 00 ->3a0228 af 89 0f 00 29 01 d0 f8 68 28 60 08 c2 20 48 e2 ->3a0238 20 a9 0d 20 18 00 c2 20 68 28 60 08 22 78 10 00 ->3a0248 28 60 08 0b 08 c2 20 48 a9 00 08 5b 68 28 e2 20 ->3a0258 a5 b4 1a 85 b4 cf 13 00 00 90 05 20 14 00 64 b4 ->3a0268 2b 28 60 da 5a 0b 08 08 c2 20 48 a9 00 08 5b 68 ->3a0278 28 e2 20 c2 10 8f b3 08 00 af b2 08 00 29 20 f0 ->3a0288 07 af b3 08 00 20 28 00 af b2 08 00 29 80 f0 07 ->3a0298 af b3 08 00 20 fd 01 af b2 08 00 29 40 f0 14 af ->3a02a8 b3 08 00 20 18 02 af b3 08 00 c9 0d d0 05 a9 0a ->3a02b8 20 18 02 28 2b 7a fa 60 08 e2 20 bd 00 00 f0 06 ->3a02c8 20 18 00 e8 80 f5 28 60 08 c2 20 48 48 4a 4a 4a ->3a02d8 4a 4a 4a 4a 4a 20 ea 02 68 29 ff 00 20 ea 02 68 ->3a02e8 28 60 08 c2 20 48 e2 20 48 4a 4a 4a 4a 20 01 03 ->3a02f8 68 20 01 03 c2 20 68 28 60 08 c2 30 da 29 0f 00 ->3a0308 aa bf 00 d0 3a 20 18 00 fa 28 60 08 c2 30 48 da ->3a0318 5a 8b 0b c2 30 a3 0b 18 69 03 00 aa e2 20 a9 3a ->3a0328 48 ab bd 00 00 f0 06 20 fd 01 e8 80 f5 c2 30 2b ->3a0338 ab 7a fa 68 28 60 08 e2 20 c9 5b b0 04 c9 41 b0 ->3a0348 0b c9 7b b0 04 c9 61 b0 03 28 18 60 28 38 60 08 ->3a0358 e2 20 c9 3a b0 04 c9 30 b0 03 28 18 60 28 38 60 ->3a0368 08 e2 20 c9 3a b0 04 c9 30 b0 13 c9 67 b0 04 c9 ->3a0378 61 b0 0b c9 47 b0 04 c9 41 b0 03 28 18 60 28 38 ->3a0388 60 08 e2 20 c9 3a b0 04 c9 30 b0 12 c9 67 b0 04 ->3a0398 c9 61 b0 0f c9 47 b0 04 c9 41 b0 09 28 60 38 e9 ->3a03a8 30 80 f9 29 df 38 e9 37 80 f2 08 e2 20 c9 7b b0 ->3a03b8 06 c9 61 90 02 29 df 28 60 08 e2 20 c2 10 bd 00 ->3a03c8 00 f0 09 20 b2 03 9d 00 00 e8 80 f2 28 60 08 0b ->3a03d8 08 c2 20 48 a9 00 08 5b 68 28 c2 20 48 06 21 26 ->3a03e8 23 a5 21 85 0c a5 23 85 0e 06 0c 26 0e 06 0c 26 ->3a03f8 0e 18 a5 21 65 0c 85 21 a5 23 65 0e 85 23 68 2b ->3a0408 28 60 08 0b 08 c2 20 48 a9 00 08 5b 68 28 c2 20 ->3a0418 a5 21 8f 12 01 00 a9 0a 00 8f 10 01 00 af 14 01 ->3a0428 00 85 21 64 23 af 16 01 00 85 27 64 29 e2 20 a9 ->3a0438 00 85 25 85 2b 2b 28 60 08 0b 08 c2 20 48 a9 00 ->3a0448 08 5b 68 28 c2 20 a5 21 8f 12 01 00 a9 64 00 8f ->3a0458 10 01 00 af 14 01 00 85 21 64 23 af 16 01 00 85 ->3a0468 27 64 29 e2 20 a9 00 85 25 85 2b 2b 28 60 08 c2 ->3a0478 20 a5 21 d0 08 a5 23 d0 04 28 e2 02 60 28 c2 02 ->3a0488 60 08 e2 20 a5 25 c9 00 d0 02 28 60 08 c2 20 48 ->3a0498 a9 00 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 ->3a04a8 29 ff 00 20 f1 18 e2 20 dc d2 08 08 e2 20 a5 25 ->3a04b8 c9 02 d0 02 28 60 08 c2 20 48 a9 00 08 5b 68 28 ->3a04c8 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 f1 18 ->3a04d8 e2 20 dc d2 08 08 e2 20 a5 25 c9 00 d0 08 c2 20 ->3a04e8 a5 23 d0 21 28 60 08 c2 20 48 a9 00 08 5b 68 28 ->3a04f8 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 f1 18 ->3a0508 e2 20 dc d2 08 08 c2 20 48 a9 00 08 5b 68 28 e2 ->3a0518 20 a9 09 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 ->3a0528 20 dc d2 08 08 e2 20 a5 25 c9 00 d0 0e a5 24 d0 ->3a0538 29 a5 23 d0 25 a5 22 d0 21 28 60 08 c2 20 48 a9 ->3a0548 00 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ->3a0558 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 a9 00 ->3a0568 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 20 29 ff ->3a0578 00 20 f1 18 e2 20 dc d2 08 08 0b 08 c2 20 48 a9 ->3a0588 00 08 5b 68 28 c2 30 64 21 64 23 e2 20 64 25 a7 ->3a0598 00 c9 26 f0 44 e2 20 a7 00 20 57 03 90 76 20 d6 ->3a05a8 03 38 e9 30 c2 20 29 ff 00 18 65 21 85 21 a5 23 ->3a05b8 69 00 00 85 23 20 96 1b 80 db 08 c2 20 48 a9 00 ->3a05c8 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 20 29 ff ->3a05d8 00 20 f1 18 e2 20 dc d2 08 20 96 1b a7 00 c9 48 ->3a05e8 f0 04 c9 68 d0 d4 20 96 1b e2 20 a7 00 20 68 03 ->3a05f8 90 22 20 89 03 c2 20 06 21 26 23 06 21 26 23 06 ->3a0608 21 26 23 06 21 26 23 29 ff 00 18 65 21 85 21 20 ->3a0618 96 1b 80 d5 2b 28 60 08 c2 30 38 a5 04 e5 18 a8 ->3a0628 e2 20 b7 18 f0 10 c9 20 f0 06 c9 09 f0 02 28 60 ->3a0638 88 c0 ff ff d0 ec a9 00 60 08 0b 08 c2 20 48 a9 ->3a0648 00 08 5b 68 28 c2 30 a5 18 85 00 e2 20 a5 1a 85 ->3a0658 02 20 b7 1b a7 00 20 57 03 90 0c 20 81 05 c2 20 ->3a0668 a5 21 85 d5 20 b7 1b c2 20 a5 00 85 18 e2 20 a5 ->3a0678 02 85 1a 20 8f 06 e2 20 20 00 07 c9 00 f0 05 20 ->3a0688 89 08 80 f4 2b 28 60 08 c2 20 a5 18 85 00 a5 1a ->3a0698 85 02 a2 00 00 e2 20 a0 00 00 e0 00 00 f0 0d b7 ->3a06a8 00 f0 53 c9 3a f0 04 c9 20 d0 33 c8 b7 00 f0 46 ->3a06b8 c9 52 f0 10 c9 72 d0 26 b7 00 f0 3a c9 52 f0 04 ->3a06c8 c9 72 d0 1a c8 b7 00 f0 2d c9 45 f0 04 c9 65 d0 ->3a06d8 0d c8 b7 00 f0 20 c9 4d f0 0a c9 6d f0 06 e8 20 ->3a06e8 96 1b 80 b3 a7 00 c9 3a d0 03 20 96 1b a9 03 85 ->3a06f8 1c a9 8e 20 89 08 28 60 08 0b 08 c2 20 48 a9 00 ->3a0708 08 5b 68 28 e2 20 a9 7f 85 1c c2 10 20 3e 08 a5 ->3a0718 1c d0 03 4c a3 07 c2 20 a5 18 85 00 e2 20 a5 1a ->3a0728 85 02 c2 20 64 04 64 06 e2 30 a0 00 b7 00 f0 da ->3a0738 c9 8e f0 d6 c8 c4 1c 90 f3 c2 10 a7 00 c9 22 d0 ->3a0748 05 20 c5 07 80 28 a5 1c c9 01 f0 19 c2 20 a5 00 ->3a0758 c5 18 d0 08 e2 20 a5 02 c5 1a f0 09 e2 20 a7 04 ->3a0768 20 1d 47 b0 09 e2 20 20 d5 07 c9 00 d0 11 c2 20 ->3a0778 a5 00 85 04 e2 20 a5 02 85 06 20 96 1b 80 a9 c9 ->3a0788 81 d0 18 20 1f 06 c9 00 f0 14 89 80 10 0b 20 2a ->3a0798 09 c9 30 f0 04 a9 af 80 02 a9 81 2b 28 60 08 c2 ->3a07a8 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 ->3a07b8 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 e2 20 ->3a07c8 20 96 1b a7 00 f0 04 c9 22 d0 f5 28 60 08 0b c2 ->3a07d8 30 da 5a 08 c2 20 48 a9 00 08 5b 68 28 a9 54 09 ->3a07e8 85 08 e2 20 a9 3a 85 0a a2 80 00 e2 20 a0 01 00 ->3a07f8 b7 08 f0 26 c5 1c d0 29 c2 30 a0 02 00 b7 08 85 ->3a0808 0c e2 20 a9 3a 85 0e e2 10 a0 00 b7 00 20 b2 03 ->3a0818 d7 0c d0 0d c8 c4 1c 90 f2 8a c2 10 7a fa 2b 28 ->3a0828 60 c2 30 18 a5 08 69 08 00 85 08 e2 20 a5 0a 69 ->3a0838 00 85 0a e8 80 b5 08 0b 8b 08 c2 20 48 a9 00 08 ->3a0848 5b 68 28 c2 30 a9 54 09 85 08 a9 3a 00 85 0a 64 ->3a0858 0c e2 20 a0 01 00 b7 08 f0 1d c5 1c b0 06 c5 0c ->3a0868 90 02 85 0c c2 20 18 a5 08 69 08 00 85 08 a5 0a ->3a0878 69 00 00 85 0a 80 da e2 20 a5 0c 85 1c ab 2b 28 ->3a0888 60 08 0b 08 c2 20 48 a9 00 08 5b 68 28 e2 20 87 ->3a0898 00 c2 20 18 a5 00 69 01 00 85 08 a5 02 69 00 00 ->3a08a8 85 0a e2 10 a4 1c 88 e2 20 b7 08 87 08 f0 13 c2 ->3a08b8 20 18 a5 08 69 01 00 85 08 a5 0a 69 00 00 85 0a ->3a08c8 80 e5 2b 28 60 08 c2 30 29 7f 00 0a 0a 0a 18 69 ->3a08d8 54 09 aa 28 60 08 8b 0b 08 c2 20 48 a9 00 08 5b ->3a08e8 68 28 08 e2 20 48 a9 3a 48 ab 68 28 e2 20 c2 10 ->3a08f8 20 cd 08 bd 00 00 c2 20 29 0f 00 2b ab 28 60 08 ->3a0908 8b 0b 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 ->3a0918 a9 3a 48 ab 68 28 c2 30 20 cd 08 bd 04 00 2b ab ->3a0928 28 60 08 8b 0b 08 c2 20 48 a9 00 08 5b 68 28 08 ->3a0938 e2 20 48 a9 3a 48 ab 68 28 e2 20 c2 10 20 cd 08 ->3a0948 bd 00 00 c2 20 29 f0 00 2b ab 28 60 03 01 10 d0 ->3a0958 81 22 00 00 03 01 12 d0 c0 22 00 00 02 01 14 d0 ->3a0968 ce 22 00 00 02 01 16 d0 e7 22 00 00 02 03 18 d0 ->3a0978 fa 22 00 00 00 01 1c d0 00 00 00 00 04 01 1e d0 ->3a0988 3c 23 00 00 04 01 20 d0 72 23 00 00 04 01 22 d0 ->3a0998 57 23 00 00 05 03 24 d0 2b 23 00 00 06 03 28 d0 ->3a09a8 0d 23 00 00 07 02 2c d0 1c 23 00 00 ff 01 2f d0 ->3a09b8 00 00 00 00 40 01 31 d0 00 00 00 00 20 03 33 d0 ->3a09c8 22 39 00 00 20 05 37 d0 27 3d 00 00 20 03 3d d0 ->3a09d8 72 3c 00 00 20 04 41 d0 12 3c 00 00 20 03 46 d0 ->3a09e8 09 3c 00 00 20 02 4a d0 a1 3b 00 00 50 04 4d d0 ->3a09f8 00 00 00 00 50 04 52 d0 00 00 00 00 20 05 57 d0 ->3a0a08 e4 3a 00 00 20 06 5d d0 5d 3b 00 00 20 03 64 d0 ->3a0a18 39 39 00 00 50 02 68 d0 00 00 00 00 50 04 6b d0 ->3a0a28 00 00 00 00 20 04 70 d0 2d 3a 00 00 20 02 75 d0 ->3a0a38 33 39 00 00 20 04 78 d0 36 39 00 00 50 05 7d d0 ->3a0a48 00 00 00 00 50 05 83 d0 00 00 00 00 20 04 89 d0 ->3a0a58 30 39 00 00 20 03 8e d0 68 3c 00 00 20 04 92 d0 ->3a0a68 03 39 00 00 20 04 97 d0 93 38 00 00 20 05 9c d0 ->3a0a78 29 38 00 00 20 05 a2 d0 b6 37 00 00 20 03 a8 d0 ->3a0a88 b2 37 00 00 20 04 ac d0 93 36 00 00 20 04 b1 d0 ->3a0a98 a5 37 00 00 20 07 b6 d0 a9 37 00 00 20 03 be d0 ->3a0aa8 e6 35 00 00 20 04 c2 d0 4f 35 00 00 04 02 c7 d0 ->3a0ab8 c5 23 00 00 04 02 ca d0 a8 23 00 00 04 02 cd d0 ->3a0ac8 8d 23 00 00 30 01 d0 d0 bb 3e 00 00 30 03 d2 d0 ->3a0ad8 cf 42 00 00 30 04 d6 d0 1f 43 00 00 30 05 db d0 ->3a0ae8 b0 43 00 00 30 05 e1 d0 62 43 00 00 30 04 e7 d0 ->3a0af8 ef 43 00 00 30 03 ec d0 44 44 00 00 30 03 f0 d0 ->3a0b08 89 44 00 00 30 03 f4 d0 12 45 00 00 30 03 f8 d0 ->3a0b18 9b 45 00 00 30 03 fc d0 cb 45 00 00 30 04 00 d1 ->3a0b28 41 42 00 00 30 03 05 d1 e0 41 00 00 30 04 09 d1 ->3a0b38 92 41 00 00 30 03 0e d1 3c 41 00 00 30 05 12 d1 ->3a0b48 73 40 00 00 30 06 18 d1 92 3f 00 00 30 04 1f d1 ->3a0b58 dd 3e 00 00 10 03 24 d1 59 46 00 00 10 03 28 d1 ->3a0b68 24 46 00 00 10 04 2c d1 ef 4f 00 00 10 04 31 d1 ->3a0b78 70 46 00 00 10 03 36 d1 16 4d 00 00 20 05 3a d1 ->3a0b88 c1 4e 00 00 10 04 40 d1 9c 4f 00 00 20 05 45 d1 ->3a0b98 a8 50 00 00 20 03 4b d1 c7 51 00 00 10 04 4f d1 ->3a0ba8 34 51 00 00 20 06 54 d1 3d 52 00 00 20 04 5b d1 ->3a0bb8 61 53 00 00 10 07 60 d1 21 46 00 00 20 03 68 d1 ->3a0bc8 de 34 00 00 20 05 6c d1 13 34 00 00 20 09 72 d1 ->3a0bd8 47 25 00 00 20 09 7c d1 e2 24 00 00 20 0a 86 d1 ->3a0be8 10 25 00 00 20 07 91 d1 4f 24 00 00 30 08 99 d1 ->3a0bf8 ec 3d 00 00 20 07 a2 d1 e4 23 00 00 30 08 aa d1 ->3a0c08 56 3e 00 00 20 08 b3 d1 58 26 00 00 20 08 bc d1 ->3a0c18 b4 25 00 00 20 06 c5 d1 96 27 00 00 20 09 cc d1 ->3a0c28 94 28 00 00 20 04 d6 d1 26 2a 00 00 20 04 db d1 ->3a0c38 7b 2a 00 00 20 04 e0 d1 f0 2a 00 00 20 06 e5 d1 ->3a0c48 a5 2b 00 00 20 08 ec d1 32 2c 00 00 20 0a f5 d1 ->3a0c58 66 2c 00 00 20 07 00 d2 89 2d 00 00 20 07 08 d2 ->3a0c68 17 2e 00 00 20 08 10 d2 93 2e 00 00 20 06 19 d2 ->3a0c78 d2 2e 00 00 20 07 20 d2 fe 31 00 00 50 06 28 d2 ->3a0c88 00 00 00 00 50 04 2f d2 00 00 00 00 00 00 00 00 ->3a0c98 00 00 00 00 08 0b 08 c2 20 48 a9 00 08 5b 68 28 ->3a0ca8 c2 30 a9 ff ff 85 b8 e2 20 a9 37 85 ba c2 20 64 ->3a0cb8 b5 64 bb e2 20 64 b7 64 bd 2b 28 60 5a 08 e2 20 ->3a0cc8 85 e8 c2 10 86 8d c2 20 a5 0e 48 a5 0c 48 a5 12 ->3a0cd8 48 a5 10 48 20 74 0d b0 03 20 f8 0c 20 00 0f c2 ->3a0ce8 20 68 85 10 68 85 12 68 85 0c 68 85 0e 28 7a 60 ->3a0cf8 08 0b 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a6 8d ->3a0d08 ca 86 0c e8 c2 30 38 a5 b8 e5 0c 85 be e2 20 a5 ->3a0d18 ba e9 00 85 c0 20 00 0f e2 20 a5 e8 a0 00 00 97 ->3a0d28 c1 a9 00 a0 01 00 97 c1 a0 02 00 97 c1 c2 20 a9 ->3a0d38 00 00 97 c1 c2 20 18 a5 b8 69 01 00 a0 05 00 97 ->3a0d48 c1 e2 20 c8 c8 a5 ba 69 00 97 c1 c2 20 a5 be 85 ->3a0d58 b5 e2 20 a5 c0 85 b7 c2 20 38 a5 c1 e9 01 00 85 ->3a0d68 b8 e2 20 a5 c3 e9 00 85 ba 2b 28 60 08 0b 08 c2 ->3a0d78 20 48 a9 00 08 5b 68 28 c2 30 c2 20 a5 bb 85 c7 ->3a0d88 e2 20 a5 bd 85 c9 a5 c7 d0 17 e2 20 a5 c9 d0 11 ->3a0d98 c2 20 a9 00 00 85 cd e2 20 a9 00 85 cf 2b 28 18 ->3a0da8 60 c2 20 a0 05 00 b7 c7 85 ca e2 20 c8 c8 b7 c7 ->3a0db8 85 cc c2 20 18 a5 c7 65 8d 85 0c e2 20 a5 c9 69 ->3a0dc8 00 85 0e c2 20 18 a5 0c 69 08 00 85 0c e2 20 a5 ->3a0dd8 0e 69 00 85 0e c2 20 a5 0c c5 ca d0 28 e2 20 a5 ->3a0de8 0e c5 cc d0 20 c2 20 a5 cd d0 5d e2 20 a5 cf d0 ->3a0df8 57 c2 20 a0 02 00 b7 c7 85 bb e2 20 c8 c8 b7 c7 ->3a0e08 85 bd 4c b1 0e c2 20 a5 0c 69 08 00 85 10 e2 20 ->3a0e18 a5 0e 69 00 85 12 e2 20 a5 c4 c5 10 b0 3e 90 08 ->3a0e28 c2 20 a5 c4 c5 10 b0 34 c2 20 a5 c7 85 cd e2 20 ->3a0e38 a5 c9 85 cf c2 20 a0 02 00 b7 cd 85 c7 e2 20 c8 ->3a0e48 c8 b7 cd 85 c9 4c 8e 0d c2 20 a0 02 00 b7 c7 97 ->3a0e58 cd e2 20 c8 c8 b7 c7 97 cd 4c b1 0e c2 20 a0 05 ->3a0e68 00 b7 c7 97 0c e2 20 c8 c8 b7 c7 97 0c c2 20 a0 ->3a0e78 02 00 b7 c7 97 0c e2 20 c8 c8 b7 c7 97 0c c2 20 ->3a0e88 a5 cd d0 14 e2 20 a5 cd d0 0e c2 20 a5 0c 85 bb ->3a0e98 e2 20 a5 0e 85 bd 80 11 c2 20 a0 02 00 a5 0c 97 ->3a0ea8 cd e2 20 c8 c8 a5 0e 97 cd c2 20 a5 c7 85 c1 e2 ->3a0eb8 20 a5 c9 85 c3 c2 20 a5 c1 85 b5 e2 20 a5 c3 85 ->3a0ec8 b7 c2 20 a0 05 00 a5 0c 97 c1 e2 20 c8 c8 a5 0e ->3a0ed8 97 c1 c2 20 a0 02 00 a9 00 00 97 c1 e2 20 c8 c8 ->3a0ee8 97 c1 e2 20 a5 e8 e2 20 a0 00 00 97 c1 a0 01 00 ->3a0ef8 a9 00 97 c1 2b 28 38 60 08 c2 20 38 a5 be e9 08 ->3a0f08 00 85 c1 e2 20 a5 c0 e9 00 85 c3 28 60 08 e2 20 ->3a0f18 a5 c3 f0 04 c9 38 b0 12 c2 20 a5 c1 f0 0c e2 20 ->3a0f28 a0 01 00 b7 c1 1a 97 c1 28 60 00 ea 08 e2 20 a5 ->3a0f38 c3 f0 04 c9 38 b0 17 c2 20 a5 c1 f0 11 e2 20 a0 ->3a0f48 01 00 b7 c1 3a 97 c1 d0 03 20 58 0f 28 60 00 ea ->3a0f58 08 c2 20 a5 bb d0 21 e2 20 a5 bd d0 1b a5 c3 85 ->3a0f68 bd c2 20 a5 c1 85 bb a9 00 00 a0 02 00 97 c1 c8 ->3a0f78 c8 e2 20 97 c1 4c 3f 10 e2 20 a5 bd c5 c3 90 28 ->3a0f88 c2 20 a5 bb c5 c1 90 20 c2 20 a5 bb a0 02 00 97 ->3a0f98 c1 e2 20 c8 c8 a5 bd 97 c1 c2 20 a5 c1 85 bb e2 ->3a0fa8 20 a5 c3 85 bd 4c 3f 10 c2 20 a5 bb 85 08 e2 20 ->3a0fb8 a5 bd 85 0a e2 20 a0 04 00 b7 08 c5 c6 90 32 d0 ->3a0fc8 0b c2 20 a0 02 00 b7 08 c5 c4 90 25 c2 20 a0 02 ->3a0fd8 00 b7 08 97 c1 e2 20 c8 c8 b7 08 97 c1 c2 20 a5 ->3a0fe8 c1 a0 02 00 97 08 e2 20 a5 c3 c8 c8 97 08 4c 3f ->3a0ff8 10 c2 20 a0 02 00 b7 08 d0 08 e2 20 c8 c8 b7 08 ->3a1008 f0 19 c2 20 a0 02 00 b7 08 85 0c e2 20 c8 c8 b7 ->3a1018 08 85 0a c2 20 a5 0c 85 08 80 99 c2 20 a5 c1 a0 ->3a1028 02 00 97 08 e2 20 c8 c8 a5 c3 97 08 a9 00 97 c1 ->3a1038 c2 20 a0 02 00 97 c1 20 44 10 28 60 08 c2 20 a5 ->3a1048 bb 85 c1 e2 20 a5 bd 85 c3 c2 20 a5 c1 d0 09 e2 ->3a1058 20 a5 c3 d0 03 4c e7 10 c2 20 a0 02 00 b7 c1 85 ->3a1068 0c e2 20 c8 c8 b7 c1 85 0e c2 20 a0 05 00 b7 c1 ->3a1078 85 10 e2 20 c8 c8 b7 c1 85 12 c2 20 a5 0c c5 10 ->3a1088 d0 08 e2 20 a5 0e c5 12 f0 1f c2 20 a0 02 00 b7 ->3a1098 c1 85 0c e2 20 c8 c8 b7 c1 85 0e c2 20 a5 0c 85 ->3a10a8 c1 e2 20 a5 0e 85 c3 80 a0 c2 20 a0 02 00 b7 c1 ->3a10b8 85 0c e2 20 c8 c8 b7 c1 85 0e c2 20 a0 02 00 b7 ->3a10c8 0c 97 c1 e2 20 c8 c8 b7 0c 97 c1 c2 20 a0 05 00 ->3a10d8 b7 0c 97 c1 e2 20 c8 c8 b7 0c 97 c1 4c 60 10 28 ->3a10e8 60 08 c2 20 64 14 64 16 28 60 08 c2 30 a5 14 d0 ->3a10f8 16 a5 16 d0 12 e2 20 64 14 a5 e0 1a 1a 85 15 a5 ->3a1108 e1 85 16 64 17 80 07 c2 20 a5 15 1a 85 15 c2 20 ->3a1118 a5 b9 3a c5 15 f0 02 b0 1f 08 c2 20 48 a9 00 08 ->3a1128 5b 68 28 e2 20 a9 03 8f d1 08 00 c2 20 29 ff 00 ->3a1138 20 f1 18 e2 20 dc d2 08 28 60 c9 00 d0 05 c0 01 ->3a1148 00 f0 05 09 30 97 14 c8 60 08 c2 30 64 0c a5 23 ->3a1158 10 1a 18 a5 21 49 ff ff 69 01 00 85 21 a5 23 49 ->3a1168 ff ff 69 00 00 85 23 a9 ff ff 85 0c 64 10 64 12 ->3a1178 a2 1f 00 f8 06 21 26 23 a5 10 65 10 85 10 a5 12 ->3a1188 65 12 85 12 ca 10 ed d8 e2 20 20 f2 10 a0 00 00 ->3a1198 a5 0c f0 04 a9 2d 80 02 a9 20 97 14 c8 a2 03 00 ->3a11a8 b5 10 29 f0 4a 4a 4a 4a 20 42 11 b5 10 29 0f 20 ->3a11b8 42 11 ca 10 eb c0 01 00 d0 0c a9 20 87 14 a0 01 ->3a11c8 00 a9 30 97 14 c8 a9 00 97 14 28 60 00 ea 08 e2 ->3a11d8 20 c2 10 a0 00 00 bd 00 00 f0 04 e8 c8 80 f7 28 ->3a11e8 60 08 0b 8b 08 c2 20 48 a9 00 08 5b 68 28 e2 20 ->3a11f8 c2 10 08 c2 20 48 e2 20 a5 23 48 ab c2 20 68 28 ->3a1208 a6 21 20 d6 11 84 0c 08 c2 20 48 e2 20 a5 29 48 ->3a1218 ab c2 20 68 28 a6 27 20 d6 11 c2 20 98 38 65 0c ->3a1228 aa e2 20 a9 02 20 c4 0c c2 20 a5 b5 85 08 e2 20 ->3a1238 a5 b7 85 0a a0 00 00 08 c2 20 48 e2 20 a5 23 48 ->3a1248 ab c2 20 68 28 a6 21 bd 00 00 f0 06 97 08 e8 c8 ->3a1258 80 f5 e2 20 08 c2 20 48 e2 20 a5 29 48 ab c2 20 ->3a1268 68 28 a6 27 bd 00 00 97 08 f0 04 e8 c8 80 f5 c2 ->3a1278 20 a5 08 85 21 e2 20 a5 0a 85 23 a9 02 85 25 ab ->3a1288 2b 28 60 da 5a 08 0b 8b 08 c2 20 48 a9 00 08 5b ->3a1298 68 28 c2 20 a5 0a 48 a5 08 48 c2 30 08 c2 20 48 ->3a12a8 e2 20 a5 23 48 ab c2 20 68 28 a6 21 20 d6 11 98 ->3a12b8 aa e8 e2 20 a9 02 20 c4 0c c2 20 a5 be 85 08 a5 ->3a12c8 c0 85 0a a0 00 00 e2 20 b7 21 97 08 f0 03 c8 80 ->3a12d8 f7 c2 20 a5 08 85 21 a5 0a 85 23 c2 20 68 85 08 ->3a12e8 68 85 0a ab 2b 28 7a fa 60 08 e2 20 c2 10 a0 00 ->3a12f8 00 b7 21 f0 05 c8 80 f9 84 90 c2 30 c4 27 90 13 ->3a1308 f0 11 a5 8d 30 0d f0 0b c4 8d b0 12 a5 27 d0 0e ->3a1318 4c 6f 13 20 f2 10 e2 20 a9 00 87 14 80 39 20 f2 ->3a1328 10 c2 30 18 a5 21 65 27 85 21 a5 23 69 00 00 85 ->3a1338 23 a0 00 00 e2 20 a7 21 97 14 f0 1b c2 20 18 a5 ->3a1348 21 69 01 00 85 21 a5 23 69 00 00 85 23 c8 c4 8d ->3a1358 d0 e2 a9 00 00 97 14 c2 20 a5 14 85 21 a5 16 85 ->3a1368 23 e2 20 a9 02 85 25 28 60 48 5a 0b 08 08 c2 20 ->3a1378 48 a9 00 08 5b 68 28 c2 30 a9 00 00 85 00 85 18 ->3a1388 a9 36 00 85 02 85 1a ad 8a 0f 30 20 a0 02 00 b7 ->3a1398 18 f0 0f c5 53 90 10 c5 57 f0 02 b0 05 20 d3 13 ->3a13a8 80 e5 28 2b 7a 68 60 20 73 1c 80 db 08 c2 20 48 ->3a13b8 a9 00 08 5b 68 28 e2 20 a9 01 8f d1 08 00 c2 20 ->3a13c8 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 30 85 21 ->3a13d8 64 23 20 51 11 a5 14 1a 85 21 a5 16 85 23 20 9c ->3a13e8 3d 18 a5 18 69 04 00 85 00 a5 1a 69 00 00 85 02 ->3a13f8 e2 20 a9 20 20 18 00 c2 20 20 12 14 90 fb e2 20 ->3a1408 a9 0d 20 18 00 20 73 1c 28 60 08 0b 8b 08 c2 20 ->3a1418 48 a9 00 08 5b 68 28 08 e2 20 48 a9 00 48 ab 68 ->3a1428 28 e2 20 c2 10 a7 00 f0 3a 30 05 20 18 00 80 29 ->3a1438 c2 20 29 7f 00 0a 0a 0a 18 69 54 09 85 08 a9 3a ->3a1448 00 69 00 00 85 0a 08 e2 20 48 a9 3a 48 ab 68 28 ->3a1458 a0 02 00 b7 08 aa 20 c0 02 c2 20 20 96 1b ab 2b ->3a1468 28 18 60 ab 2b 28 38 60 08 c2 20 a9 ff 6f 85 1d ->3a1478 a9 ff 7f 85 1f a9 ff ff 85 21 85 23 85 27 85 29 ->3a1488 e2 20 85 25 85 2b 28 60 08 0b 8b 08 c2 20 48 a9 ->3a1498 00 08 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 c2 ->3a14a8 30 5a a4 1d bd 00 00 99 00 00 bd 02 00 99 02 00 ->3a14b8 e2 20 bd 04 00 99 04 00 c2 20 38 98 e9 05 00 85 ->3a14c8 1d 7a ab 2b 28 60 08 0b 8b 08 c2 20 48 a9 00 08 ->3a14d8 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 c2 30 5a ->3a14e8 18 a5 1d 69 05 00 85 1d a8 b9 00 00 9d 00 00 b9 ->3a14f8 02 00 9d 02 00 e2 20 b9 04 00 9d 04 00 bd 00 00 ->3a1508 7a ab 2b 28 60 08 0b 8b 08 c2 20 48 a9 00 08 5b ->3a1518 68 28 08 e2 20 48 a9 00 48 ab 68 28 e2 20 c2 10 ->3a1528 5a a4 1f 99 00 00 88 84 1f 7a ab 2b 28 60 08 0b ->3a1538 8b 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 ->3a1548 00 48 ab 68 28 e2 20 c2 10 5a a4 1f c8 84 1f b9 ->3a1558 00 00 c2 20 29 ff 00 7a ab 2b 28 60 08 e2 20 a9 ->3a1568 01 20 0d 15 28 60 5a 08 8b 08 e2 20 48 a9 00 48 ->3a1578 ab 68 28 e2 20 a4 1f b9 01 00 c9 01 d0 08 c2 20 ->3a1588 e6 1f ab 28 7a 60 08 c2 20 48 a9 00 08 5b 68 28 ->3a1598 e2 20 a9 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 ->3a15a8 e2 20 dc d2 08 08 0b 8b c2 20 48 08 c2 20 48 a9 ->3a15b8 00 08 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 e2 ->3a15c8 20 c2 10 a4 1f c0 ff 7f f0 11 20 dd 08 85 0c b9 ->3a15d8 01 00 20 dd 08 c5 0c f0 02 90 08 c2 20 68 ab 2b ->3a15e8 28 18 60 c2 20 68 ab 2b 28 38 60 4c 81 05 08 e2 ->3a15f8 20 a9 00 8f 00 4d 00 a2 01 00 20 9f 17 20 dd 04 ->3a1608 c2 20 a5 21 9f 00 4d 00 e2 20 af 00 4d 00 1a 30 ->3a1618 3e 8f 00 4d 00 e8 e8 20 b7 1b e2 20 a7 00 c9 8d ->3a1628 f0 09 c9 2c d0 0a 20 96 1b 80 cf 20 96 1b 28 60 ->3a1638 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 ->3a1648 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 ->3a1658 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f d1 08 ->3a1668 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 20 ->3a1678 a5 49 90 23 e2 20 a5 e8 29 80 d0 06 20 f1 47 4c ->3a1688 9d 16 e2 20 a9 8c 20 a3 1c 20 64 15 20 f6 15 20 ->3a1698 8c 4c 20 6e 15 28 60 08 c2 20 48 a9 00 08 5b 68 ->3a16a8 28 e2 20 a9 02 8f d1 08 00 c2 20 29 ff 00 20 f1 ->3a16b8 18 e2 20 dc d2 08 08 0b 08 c2 20 48 a9 00 08 5b ->3a16c8 68 28 e2 20 c2 10 20 96 1b a0 00 00 b7 00 f0 24 ->3a16d8 c9 22 f0 03 c8 80 f5 84 0c e2 20 a9 02 a6 0c e8 ->3a16e8 20 f2 10 a0 00 00 c4 0c f0 29 a7 00 97 14 c8 20 ->3a16f8 96 1b 80 f2 08 c2 20 48 a9 00 08 5b 68 28 e2 20 ->3a1708 a9 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 ->3a1718 dc d2 08 a9 00 97 14 c2 20 a5 14 85 21 a5 16 85 ->3a1728 23 a9 02 00 85 25 20 96 1b 2b 28 60 08 e2 20 a7 ->3a1738 00 c2 20 29 ff 00 20 07 09 85 2d 20 64 15 08 e2 ->3a1748 20 48 a9 00 48 ab 68 28 20 58 17 20 6e 15 28 60 ->3a1758 20 96 1b 6c 2d 08 08 0b 8b c2 20 48 08 c2 20 48 ->3a1768 a9 00 08 5b 68 28 c2 30 a2 27 08 20 ce 14 a2 21 ->3a1778 08 20 ce 14 20 36 15 20 07 09 85 2d 08 e2 20 48 ->3a1788 a9 00 48 ab 68 28 20 9c 17 a2 21 08 20 90 14 68 ->3a1798 ab 2b 28 60 6c 2d 08 08 08 c2 20 48 a9 00 08 5b ->3a17a8 68 28 08 e2 20 48 a9 00 48 ab 68 28 c2 10 da e2 ->3a17b8 20 a7 00 d0 03 4c 62 18 30 33 c9 20 d0 03 4c 5c ->3a17c8 18 c9 3a b0 04 c9 30 b0 56 c9 26 f0 52 c9 22 d0 ->3a17d8 03 4c 75 18 c9 5b b0 07 c9 41 90 03 4c 81 18 c9 ->3a17e8 7b b0 07 c9 61 90 03 4c 81 18 4c 62 18 c9 8c f0 ->3a17f8 40 c9 8d f0 41 20 2a 09 c9 30 d0 0c 20 34 17 a2 ->3a1808 21 08 20 90 14 4c b7 17 c9 00 d0 4e a7 00 a6 1f ->3a1818 e0 ff 7f f0 05 20 ad 15 b0 12 20 0d 15 80 35 c2 ->3a1828 20 20 f3 15 a2 21 08 20 90 14 80 83 20 5e 17 80 ->3a1838 dd 20 0d 15 80 1e e2 20 a4 1f c0 ff 7f f0 46 a4 ->3a1848 1f b9 01 00 c9 01 f0 3d c9 8c f0 05 20 5e 17 80 ->3a1858 ee 20 36 15 20 96 1b 4c b7 17 a6 1f e0 ff 7f b0 ->3a1868 24 bd 01 00 c9 01 f0 1d 20 5e 17 80 ed 20 be 16 ->3a1878 a2 21 08 20 90 14 4c b7 17 20 76 16 a2 21 08 20 ->3a1888 90 14 4c b7 17 a2 21 08 20 ce 14 fa 28 60 08 0b ->3a1898 8b 08 e2 20 48 a9 00 48 ab 68 28 08 c2 20 48 a9 ->3a18a8 00 08 5b 68 28 c2 30 a9 fd 5f 85 31 ab 2b 28 60 ->3a18b8 08 0b 08 c2 20 48 a9 00 08 5b 68 28 c2 30 92 31 ->3a18c8 c6 31 c6 31 2b 28 60 08 c2 30 29 ff 00 20 b8 18 ->3a18d8 28 60 08 0b 08 c2 20 48 a9 00 08 5b 68 28 c2 30 ->3a18e8 e6 31 e6 31 b2 31 2b 28 60 8b 0b 08 08 c2 20 48 ->3a18f8 a9 00 08 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 ->3a1908 c2 20 85 21 a9 00 00 85 23 e2 20 a9 00 85 25 85 ->3a1918 e8 a9 3a 85 e7 c2 20 a9 4b 19 85 e5 20 3f 49 c2 ->3a1928 20 a5 d5 85 21 a5 d7 85 23 e2 20 a9 00 85 25 85 ->3a1938 e8 a9 3a 85 e7 c2 20 a9 4f 19 85 e5 20 3f 49 28 ->3a1948 2b ab 60 45 52 52 00 45 52 4c 00 e2 20 c2 10 20 ->3a1958 33 02 af d1 08 00 0a c2 20 29 ff 00 a8 08 e2 20 ->3a1968 48 a9 3a 48 ab 68 28 be a5 19 20 c0 02 c2 20 a5 ->3a1978 d5 f0 27 a2 d3 19 20 c0 02 08 e2 20 48 a9 00 48 ->3a1988 ab 68 28 c2 20 af d5 08 00 8f 21 08 00 a9 00 00 ->3a1998 8f 23 08 00 20 bc 3d 20 33 02 4c 33 22 d7 19 da ->3a19a8 19 e0 19 ed 19 fb 19 09 1a 1c 1a 32 1a 42 1a 51 ->3a19b8 1a 5e 1a 6f 1a 7e 1a 8b 1a 99 1a a8 1a b9 1a d2 ->3a19c8 1a e6 1a fa 1a 10 1b 24 1b 3f 1b 20 61 74 00 4f ->3a19d8 4b 00 42 72 65 61 6b 00 53 79 6e 74 61 78 20 65 ->3a19e8 72 72 6f 72 00 4f 75 74 20 6f 66 20 6d 65 6d 6f ->3a19f8 72 79 00 54 79 70 65 20 6d 69 73 6d 61 74 63 68 ->3a1a08 00 56 61 72 69 61 62 6c 65 20 6e 6f 74 20 66 6f ->3a1a18 75 6e 64 00 4c 69 6e 65 20 6e 75 6d 62 65 72 20 ->3a1a28 6e 6f 74 20 66 6f 75 6e 64 00 53 74 61 63 6b 20 ->3a1a38 75 6e 64 65 72 66 6c 6f 77 00 53 74 61 63 6b 20 ->3a1a48 6f 76 65 72 66 6c 6f 77 00 4f 75 74 20 6f 66 20 ->3a1a58 72 61 6e 67 65 00 49 6c 6c 65 67 61 6c 20 61 72 ->3a1a68 67 75 6d 65 6e 74 00 46 69 6c 65 20 6e 6f 74 20 ->3a1a78 66 6f 75 6e 64 00 4e 6f 74 20 61 20 6e 75 6d 62 ->3a1a88 65 72 00 4d 61 74 68 20 6f 76 65 72 66 6c 6f 77 ->3a1a98 00 4d 61 74 68 20 75 6e 64 65 72 66 6c 6f 77 00 ->3a1aa8 44 69 76 69 73 69 6f 6e 20 62 79 20 7a 65 72 6f ->3a1ab8 00 55 6e 61 62 6c 65 20 74 6f 20 72 65 61 64 20 ->3a1ac8 64 69 72 65 63 74 6f 72 79 00 55 6e 61 62 6c 65 ->3a1ad8 20 74 6f 20 6c 6f 61 64 20 66 69 6c 65 00 55 6e ->3a1ae8 61 62 6c 65 20 74 6f 20 73 61 76 65 20 66 69 6c ->3a1af8 65 00 55 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65 ->3a1b08 74 65 20 66 69 6c 65 00 43 6f 75 6c 64 20 6e 6f ->3a1b18 74 20 66 69 6e 64 20 66 69 6c 65 00 43 6f 75 6c ->3a1b28 64 20 6e 6f 74 20 75 70 64 61 74 65 20 64 69 72 ->3a1b38 65 63 74 6f 72 79 00 43 6f 75 6c 64 20 6e 6f 74 ->3a1b48 20 63 6f 70 79 20 74 68 65 20 66 69 6c 65 00 08 ->3a1b58 0b 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 00 85 ->3a1b68 d0 2b 28 60 0b 08 08 c2 20 48 a9 00 08 5b 68 28 ->3a1b78 08 c2 20 a9 53 19 8f d2 08 00 e2 20 a9 3a 8f d4 ->3a1b88 08 00 28 20 68 3c 20 a9 37 64 2f 28 2b 60 08 0b ->3a1b98 08 c2 20 48 a9 00 08 5b 68 28 c2 20 18 a5 00 69 ->3a1ba8 01 00 85 00 e2 20 a5 02 69 00 85 02 2b 28 60 08 ->3a1bb8 0b 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a7 00 f0 ->3a1bc8 0f c9 20 f0 06 c9 09 f0 02 80 05 20 96 1b 80 ed ->3a1bd8 2b 28 60 08 e2 20 a7 00 f0 09 c9 3a f0 05 20 96 ->3a1be8 1b 80 f3 28 60 08 e2 20 64 34 a7 00 f0 19 c5 35 ->3a1bf8 f0 2c c9 98 f0 1e c9 9c f0 1a c9 9b f0 1a c9 9d ->3a1c08 f0 16 20 96 1b 80 e3 20 73 1c c2 20 a5 d5 f0 1d ->3a1c18 e2 20 80 d6 e6 34 80 ea c6 34 30 30 80 e4 a5 33 ->3a1c28 30 06 a5 34 f0 02 80 da 20 96 1b 28 60 08 c2 20 ->3a1c38 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 ->3a1c48 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 ->3a1c58 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 20 ->3a1c68 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 30 a0 00 ->3a1c78 00 b7 18 85 0c 18 a5 18 65 0c 85 18 a5 1a 69 00 ->3a1c88 00 85 1a a0 02 00 b7 18 85 d5 18 a5 18 69 04 00 ->3a1c98 85 00 a5 1a 69 00 00 85 02 28 60 08 e2 20 48 20 ->3a1ca8 b7 1b 68 e2 20 c7 00 d0 08 20 96 1b 20 b7 1b 28 ->3a1cb8 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f ->3a1cc8 d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 ->3a1cd8 08 e2 20 20 b7 1b e2 20 a7 00 f0 10 c9 3a f0 0c ->3a1ce8 c5 35 f0 05 20 96 1b 80 ef 28 38 60 28 18 60 5a ->3a1cf8 08 e2 20 a0 00 00 b7 00 f0 0d c9 3a f0 07 c9 20 ->3a1d08 d0 05 c8 80 f1 a9 00 28 7a 60 08 0b 8b 08 c2 20 ->3a1d18 48 a9 00 08 5b 68 28 20 70 14 e2 20 a9 00 85 da ->3a1d28 ad 8a 0f 30 4b a7 00 c9 3a d0 03 20 96 1b 20 b7 ->3a1d38 1b a7 00 d0 03 4c c2 1d 20 3e 03 b0 52 a7 00 10 ->3a1d48 10 20 2a 09 85 0c c9 20 d0 03 4c b0 1d a5 d0 f0 ->3a1d58 51 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f ->3a1d68 d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 ->3a1d78 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 01 8f d1 ->3a1d88 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 20 ->3a1d98 72 3c 4c c2 1d 08 e2 20 48 a9 00 48 ab 68 28 6c ->3a1da8 2d 08 a5 0c c9 10 d0 a9 a7 00 20 07 09 c2 20 85 ->3a1db8 2d 20 70 14 20 96 1b 20 9d 1d ab 2b 28 60 08 58 ->3a1dc8 20 57 1b 20 96 18 e2 20 9c 8a 0f c2 20 a5 18 85 ->3a1dd8 00 a5 1a 85 02 4c 07 1e 08 c2 20 a0 02 00 b7 18 ->3a1de8 85 d5 20 e9 10 e2 20 a5 da c9 03 f0 12 c2 20 18 ->3a1df8 a5 18 69 04 00 85 00 e2 20 a5 1a 69 00 85 02 c2 ->3a1e08 20 20 12 1d e2 20 a5 da c9 03 f0 f3 c9 00 d0 31 ->3a1e18 e2 20 20 b7 1b a7 00 f0 28 c9 3a f0 1f 08 c2 20 ->3a1e28 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 ->3a1e38 20 29 ff 00 20 f1 18 e2 20 dc d2 08 20 96 1b 80 ->3a1e48 be 28 60 08 58 e2 20 a9 80 85 d0 9c 8a 0f 20 96 ->3a1e58 18 c2 30 64 2f a0 02 00 b7 18 f0 29 20 e0 1d e2 ->3a1e68 20 a5 da c9 01 f0 1e c9 02 f0 ea c9 03 f0 e6 c2 ->3a1e78 20 a0 00 00 18 a5 18 77 18 85 18 e2 20 a5 1a 69 ->3a1e88 00 85 1a 80 d0 e2 20 a9 00 85 d0 28 60 08 c2 30 ->3a1e98 c2 20 a9 00 00 85 08 a9 36 00 85 0a c2 20 a0 02 ->3a1ea8 00 b7 08 f0 31 c5 21 f0 1e b0 2b c2 20 a0 00 00 ->3a1eb8 18 a5 08 77 08 85 0c e2 20 a5 0a 69 00 85 0a c2 ->3a1ec8 20 a5 0c 85 08 80 d7 c2 20 a5 08 85 18 e2 20 a5 ->3a1ed8 0a 85 1a 28 38 60 28 18 60 08 e2 20 a7 0c 87 08 ->3a1ee8 c2 20 a5 0c c5 00 d0 08 e2 20 a5 0e c5 02 f0 26 ->3a1ef8 c2 20 18 a5 0c 69 01 00 85 0c e2 20 a5 0e 69 00 ->3a1f08 85 0e c2 20 18 a5 08 69 01 00 85 08 e2 20 a5 0a ->3a1f18 69 00 85 0a 80 c4 28 60 08 e2 20 a7 0c 87 08 c2 ->3a1f28 20 a5 0c c5 00 d0 06 a5 0e c5 02 f0 26 c2 20 38 ->3a1f38 a5 0c e9 01 00 85 0c e2 20 a5 0e e9 00 85 0e c2 ->3a1f48 20 38 a5 08 e9 01 00 85 08 e2 20 a5 0a e9 00 85 ->3a1f58 0a 80 c6 28 60 08 a0 00 00 c2 20 18 a5 08 77 08 ->3a1f68 85 0c e2 20 a5 0a 69 00 85 0e c2 20 18 a5 d7 69 ->3a1f78 04 00 85 00 e2 20 a5 d9 69 00 85 02 a0 00 00 c2 ->3a1f88 20 38 a5 d7 f7 08 85 d7 e2 20 a5 d9 e9 00 85 d9 ->3a1f98 20 e1 1e 20 68 3c 28 60 08 08 c2 20 48 a9 00 08 ->3a1fa8 5b 68 28 c2 30 a0 02 00 97 d7 18 a5 d7 69 04 00 ->3a1fb8 85 08 e2 20 a5 d9 69 00 85 0a e2 20 a0 00 00 b7 ->3a1fc8 18 97 08 f0 03 c8 80 f7 c2 20 98 18 69 05 00 85 ->3a1fd8 0c c2 20 a0 00 00 a5 0c 97 d7 c2 20 18 a5 d7 65 ->3a1fe8 0c 85 0c e2 20 a5 d9 69 00 85 d9 c2 20 a5 0c 85 ->3a1ff8 d7 c2 20 a0 00 00 a9 00 00 97 d7 c8 c0 05 00 d0 ->3a2008 f8 20 68 3c 28 60 0b 08 08 c2 20 48 a9 00 08 5b ->3a2018 68 28 c2 30 a9 00 00 85 08 a9 36 00 85 0a a0 02 ->3a2028 00 b7 08 f0 1d c5 d5 f0 25 b0 1d a0 00 00 18 a5 ->3a2038 08 77 08 85 0c a5 0a 69 00 00 85 0a a5 0c 85 08 ->3a2048 80 dc a9 00 00 28 2b 60 a9 01 00 28 2b 60 a9 02 ->3a2058 00 28 2b 60 08 c2 30 a9 05 00 85 10 a0 00 00 e2 ->3a2068 20 b7 18 f0 07 c2 20 e6 10 c8 80 f3 c2 20 a5 08 ->3a2078 85 00 a5 0a 85 02 18 a5 d7 69 04 00 85 0c a5 d9 ->3a2088 69 00 00 85 0e 18 a5 d7 65 10 85 d7 a5 d9 69 00 ->3a2098 00 85 d9 18 a5 d7 69 04 00 85 08 a5 d9 69 00 00 ->3a20a8 85 0a 20 20 1f c2 20 a5 10 a0 00 00 97 00 a5 d5 ->3a20b8 a0 02 00 97 00 18 a5 00 69 04 00 85 00 a5 02 69 ->3a20c8 00 00 85 02 a0 00 00 e2 20 b7 18 97 00 f0 03 c8 ->3a20d8 80 f7 20 68 3c 28 60 08 c2 30 85 d5 20 0e 20 c9 ->3a20e8 00 00 f0 2c c9 01 00 f0 22 c2 20 a5 08 48 a5 0a ->3a20f8 48 20 5d 1f 68 85 0a 68 85 08 a5 18 85 00 a5 1a ->3a2108 85 02 20 b7 1b e2 20 a7 00 f0 0a 20 5c 20 80 05 ->3a2118 a5 d5 20 a0 1f 28 60 0b 08 08 c2 20 48 a9 00 08 ->3a2128 5b 68 28 e2 20 c2 10 a2 00 00 bd 00 4f f0 03 e8 ->3a2138 80 f8 86 0c c2 30 8a c9 02 00 90 12 3a 18 69 00 ->3a2148 4f aa 18 65 8d a8 a5 0c 3a 8b 44 00 00 ab c2 20 ->3a2158 a6 53 a0 00 4f a5 8d 8b 54 00 3a ab e2 20 a5 0c ->3a2168 c9 02 90 18 a6 8d a9 22 9d 00 4f e8 bd 00 4f d0 ->3a2178 fa a9 22 9d 00 4f a9 00 e8 9d 00 4f 28 2b 60 da ->3a2188 5a 8b 0b 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 ->3a2198 c2 10 ad 00 4f c9 23 f0 0a c9 7c f0 17 28 2b ab ->3a21a8 7a fa 60 c2 20 a9 03 00 85 8d a9 cd 21 85 53 20 ->3a21b8 1f 21 80 e9 c2 20 a9 04 00 85 8d a9 d1 21 85 53 ->3a21c8 20 1f 21 80 d8 44 49 52 00 42 52 55 4e 00 8b 08 ->3a21d8 08 e2 20 48 a9 3a 48 ab 68 28 a2 34 d2 20 c0 02 ->3a21e8 28 ab 60 08 e2 30 a9 01 20 1c 00 20 db 00 f0 06 ->3a21f8 c9 0d f0 02 80 f5 28 60 0b 08 08 c2 20 48 a9 00 ->3a2208 08 5b 68 28 c2 30 64 d5 a9 00 4f 85 18 a9 00 00 ->3a2218 85 1a 20 41 06 c2 20 a5 d5 d0 05 20 c6 1d 80 07 ->3a2228 20 df 20 28 2b 38 60 28 2b 18 60 c2 30 a2 ff fe ->3a2238 9a 20 d6 21 20 08 00 20 0c 00 a9 00 00 20 1c 00 ->3a2248 20 87 21 20 00 22 b0 ec 80 e7 e2 20 a5 25 c5 2b ->3a2258 d0 06 c2 20 29 ff 00 60 c2 20 08 c2 20 48 a9 00 ->3a2268 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff ->3a2278 00 20 f1 18 e2 20 dc d2 08 20 52 22 c2 20 c9 00 ->3a2288 00 f0 27 c9 02 00 d0 03 4c e9 11 08 c2 20 48 a9 ->3a2298 00 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ->3a22a8 ff 00 20 f1 18 e2 20 dc d2 08 18 a5 21 65 27 85 ->3a22b8 21 a5 23 65 29 85 23 60 38 a5 21 e5 27 85 21 a5 ->3a22c8 23 e5 29 85 23 60 a5 21 8f 08 01 00 a5 27 8f 0a ->3a22d8 01 00 af 0c 01 00 85 21 af 0e 01 00 85 23 60 a5 ->3a22e8 21 8f 12 01 00 a5 27 8f 10 01 00 af 14 01 00 85 ->3a22f8 21 60 a5 21 8f 12 01 00 a5 27 8f 10 01 00 af 16 ->3a2308 01 00 85 21 60 c2 20 a5 21 25 27 85 21 a5 23 25 ->3a2318 29 85 23 60 c2 20 a5 21 05 27 85 21 a5 23 05 29 ->3a2328 85 23 60 c2 20 a5 21 49 ff ff 85 21 a5 23 49 ff ->3a2338 ff 85 23 60 c2 20 a5 23 c5 29 90 0b a5 21 c5 27 ->3a2348 90 05 64 21 64 23 60 a9 ff ff 85 21 85 23 60 c2 ->3a2358 20 a5 29 c5 23 90 0b a5 27 c5 21 90 05 64 21 64 ->3a2368 23 60 a9 ff ff 85 21 85 23 60 c2 20 a5 29 c5 23 ->3a2378 d0 0e a5 27 c5 21 d0 08 a9 ff ff 85 21 85 23 60 ->3a2388 64 21 64 23 60 c2 20 a5 29 c5 23 d0 0e a5 27 c5 ->3a2398 21 d0 08 a9 ff ff 85 21 85 23 60 64 21 64 23 60 ->3a23a8 c2 20 a5 23 c5 29 90 10 d0 06 a5 21 c5 27 90 08 ->3a23b8 a9 ff ff 85 21 85 23 60 64 21 64 23 60 c2 20 a5 ->3a23c8 23 c5 29 90 0f f0 05 64 21 64 23 60 a5 21 c5 27 ->3a23d8 f0 02 b0 f3 a9 ff ff 85 21 85 23 60 08 e2 20 20 ->3a23e8 9f 17 20 2c 05 20 0a 04 a5 21 0a 0a 0a 0a 05 27 ->3a23f8 48 a9 2c 20 a3 1c 20 9f 17 20 2c 05 20 0a 04 a5 ->3a2408 21 0a 0a 0a 0a 05 27 48 a9 2c 20 a3 1c 20 9f 17 ->3a2418 20 2c 05 20 0a 04 a5 21 0a 0a 0a 0a 05 27 48 af ->3a2428 0e 08 af 09 0c 8f 0e 08 af 68 8f 00 08 af 68 8f ->3a2438 02 08 af 68 8f 04 08 af af 0e 08 af 29 f7 8f 0e ->3a2448 08 af 20 db 1b 28 60 08 e2 20 20 9f 17 20 2c 05 ->3a2458 20 0a 04 a5 21 0a 0a 0a 0a 05 27 48 a9 2c 20 a3 ->3a2468 1c 20 9f 17 20 2c 05 20 0a 04 a5 21 0a 0a 0a 0a ->3a2478 05 27 48 a9 2c 20 a3 1c 20 9f 17 20 89 04 20 40 ->3a2488 04 c2 20 a5 21 85 90 a5 27 85 21 20 0a 04 e2 20 ->3a2498 a5 21 0a 0a 0a 0a 05 27 48 c2 20 a5 90 85 21 20 ->3a24a8 0a 04 e2 20 a5 21 0a 0a 0a 0a 05 27 48 af 0e 08 ->3a24b8 af 09 0c 8f 0e 08 af 68 8f 0f 08 af 68 8f 0a 08 ->3a24c8 af 68 8f 09 08 af 68 8f 06 08 af af 0e 08 af 29 ->3a24d8 f7 8f 0e 08 af 20 db 1b 28 60 08 20 9f 17 20 2c ->3a24e8 05 e2 20 a5 21 29 0f 0a 0a 0a 0a 8f 53 08 00 a9 ->3a24f8 2c 20 a3 1c 20 9f 17 20 2c 05 a5 21 29 0f 0f 53 ->3a2508 08 00 8f 1e 00 00 28 60 08 e2 20 20 9f 17 20 2c ->3a2518 05 a5 21 48 a9 2c 20 a3 1c 20 9f 17 20 2c 05 a5 ->3a2528 21 48 a9 2c 20 a3 1c 20 9f 17 20 2c 05 a5 21 8f ->3a2538 0d 00 af 68 8f 0e 00 af 68 8f 0f 00 af 28 60 08 ->3a2548 e2 20 20 9f 17 20 89 04 a5 21 f0 16 a9 01 8f 04 ->3a2558 00 af a9 20 8f 08 00 af 8f 09 00 af 22 2c 11 00 ->3a2568 80 0a a9 00 8f 04 00 af 22 2c 11 00 a9 2c 85 35 ->3a2578 20 d8 1c 90 35 20 96 1b 20 9f 17 20 2c 05 a5 21 ->3a2588 48 a9 2c 20 a3 1c 20 9f 17 20 2c 05 a5 21 48 a9 ->3a2598 2c 20 a3 1c 20 9f 17 20 2c 05 a5 21 8f 05 00 af ->3a25a8 68 8f 06 00 af 68 8f 07 00 af 28 60 08 c2 20 20 ->3a25b8 9f 17 20 2c 05 a9 af 00 85 9e a5 21 c9 0a 00 b0 ->3a25c8 5c 0a aa bf 44 26 3a 85 9c a9 2c 00 20 a3 1c 20 ->3a25d8 9f 17 20 2c 05 a5 21 0a 0a 18 65 9c 85 9c a9 2c ->3a25e8 00 20 a3 1c 20 9f 17 20 2c 05 a0 02 00 a5 21 e2 ->3a25f8 20 97 9c a9 2c 20 a3 1c 20 9f 17 20 2c 05 a0 01 ->3a2608 00 a5 21 e2 20 97 9c a9 2c 20 a3 1c 20 9f 17 20 ->3a2618 2c 05 a0 00 00 a5 21 e2 20 97 9c 28 60 08 c2 20 ->3a2628 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f d1 08 00 c2 ->3a2638 20 29 ff 00 20 f1 18 e2 20 dc d2 08 00 20 00 24 ->3a2648 00 28 00 2c 00 30 00 34 00 38 00 3c 40 1f 80 1f ->3a2658 da 5a 08 20 9f 17 20 89 04 c2 20 a5 21 89 00 01 ->3a2668 d0 17 af 00 00 af 89 00 01 f0 0e e2 20 a9 00 8f ->3a2678 01 00 af a9 01 8f 01 00 af c2 20 a5 21 8f 00 00 ->3a2688 af e2 20 a5 22 c2 20 29 03 00 0a aa c2 20 bf df ->3a2698 26 3a 8f 10 f0 3a bf e7 26 3a 8f 12 f0 3a af 10 ->3a26a8 f0 3a 8f 08 01 00 af 12 f0 3a 8f 0a 01 00 af 0c ->3a26b8 01 00 8f 14 f0 3a e2 20 af 0e 01 00 8f 16 f0 3a ->3a26c8 22 2c 11 00 c2 20 af 1a 00 00 aa af 1c 00 00 a8 ->3a26d8 20 20 00 28 7a fa 60 80 02 20 03 40 01 90 01 e0 ->3a26e8 01 58 02 f0 00 2c 01 50 00 64 00 28 00 32 00 3c ->3a26f8 00 4b 00 1e 00 32 00 48 00 5c 00 20 00 2a 00 34 ->3a2708 00 43 00 16 00 34 00 da 08 c2 30 a5 21 c9 02 00 ->3a2718 b0 1c 0a 0a aa bf 00 f0 3a 85 9c bf 02 f0 3a 85 ->3a2728 9e c9 f0 00 b0 08 c9 b0 00 90 03 28 fa 60 08 c2 ->3a2738 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 ->3a2748 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 da 08 c2 ->3a2758 30 a5 21 c9 02 00 b0 17 0a 0a aa bf 08 f0 3a 85 ->3a2768 9c bf 0a f0 3a 85 9e c9 40 00 b0 03 28 fa 60 08 ->3a2778 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 ->3a2788 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 ->3a2798 20 20 9f 17 20 2c 05 c2 20 a5 21 c9 02 00 b0 5d ->3a27a8 85 53 a9 2c 00 20 a3 1c 20 9f 17 20 2c 05 c2 20 ->3a27b8 a5 21 85 57 a9 2c 00 20 a3 1c 20 9f 17 20 2c 05 ->3a27c8 a5 53 0a 0a 0a aa e2 20 a5 57 d0 05 a5 21 0a 80 ->3a27d8 04 a5 21 38 2a 9f 00 01 af c2 20 a9 2c 00 85 35 ->3a27e8 20 d8 1c b0 37 c2 20 08 c2 20 a9 00 00 85 21 a9 ->3a27f8 b0 00 85 23 e2 20 a9 00 85 25 28 80 27 08 c2 20 ->3a2808 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 ->3a2818 20 29 ff 00 20 f1 18 e2 20 dc d2 08 c2 20 20 96 ->3a2828 1b 20 9f 17 c2 20 a5 53 0a 0a aa a5 21 9f 00 f0 ->3a2838 3a 9f 08 f0 3a 85 5b a5 23 9f 02 f0 3a 38 e9 b0 ->3a2848 00 9f 0a f0 3a 85 5d a5 53 0a 0a 0a aa e2 20 a5 ->3a2858 5b 9f 01 01 af a5 5c 9f 02 01 af a5 5d 9f 03 01 ->3a2868 af a9 00 9f 04 01 af 9f 05 01 af 28 60 08 c2 20 ->3a2878 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f d1 08 00 c2 ->3a2888 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 20 ->3a2898 9f 17 20 2c 05 20 55 27 c2 20 a5 9c 8f 05 04 af ->3a28a8 af 14 f0 3a 8f 08 04 af e2 20 a5 9e 8f 07 04 af ->3a28b8 af 16 f0 3a 8f 0a 04 af a9 00 8f 01 04 af a9 85 ->3a28c8 8f 00 04 af af 01 04 af 30 fa a9 00 8f 00 04 af ->3a28d8 28 60 08 c2 20 a5 5b 8f 08 01 00 af 10 f0 3a 8f ->3a28e8 0a 01 00 18 af 0c 01 00 65 57 85 0c af 0e 01 00 ->3a28f8 69 00 00 85 0e 18 a5 0c 65 9c 85 0c a5 0e 65 9e ->3a2908 85 0e e2 20 a5 53 87 0c 28 60 c2 20 a9 01 00 85 ->3a2918 db 38 a5 5f e5 57 85 67 10 0b 49 ff ff 1a 85 67 ->3a2928 a9 ff ff 85 db a9 01 00 85 dd 38 a5 63 e5 5b 85 ->3a2938 6b 10 0b 49 ff ff 1a 85 6b a9 ff ff 85 dd a5 6b ->3a2948 c5 67 b0 04 a5 67 80 06 a5 6b 49 ff ff 1a 48 0a ->3a2958 68 6a 85 6f 20 da 28 a5 57 c5 5f d0 06 a5 5b c5 ->3a2968 63 f0 36 a5 6f 85 73 a5 67 49 ff ff 1a c5 73 10 ->3a2978 10 f0 0e 38 a5 6f e5 6b 85 6f 18 a5 57 65 db 85 ->3a2988 57 a5 73 c5 6b 10 cd f0 cb 18 a5 6f 65 67 85 6f ->3a2998 18 a5 5b 65 dd 85 5b 80 bb 60 08 a9 00 00 8f 00 ->3a29a8 04 af c2 20 a5 5b 8f 08 01 00 af 10 f0 3a 8f 0a ->3a29b8 01 00 18 af 0c 01 00 65 57 85 0c e2 20 af 0e 01 ->3a29c8 00 69 00 85 0e c2 20 18 a5 9c 65 0c 8f 05 04 af ->3a29d8 e2 20 a5 9e 65 0e 8f 07 04 af c2 20 38 a5 5f e5 ->3a29e8 57 85 0c 8f 08 04 af 38 af 10 f0 3a 8f 0e 04 af ->3a29f8 38 a5 63 e5 5b 8f 0a 04 af a9 01 00 8f 0c 04 af ->3a2a08 e2 20 af 53 08 00 8f 01 04 af a9 87 8f 00 04 af ->3a2a18 af 01 04 af 30 fa a9 00 8f 00 04 af 28 60 08 08 ->3a2a28 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 00 48 ->3a2a38 ab 68 28 c2 30 20 9f 17 20 2c 05 20 0f 27 a9 2c ->3a2a48 00 20 a3 1c 20 9f 17 20 89 04 a5 21 85 57 a9 2c ->3a2a58 00 20 a3 1c 20 9f 17 20 89 04 a5 21 85 5b a9 2c ->3a2a68 00 20 a3 1c 20 9f 17 20 2c 05 a5 21 85 53 20 da ->3a2a78 28 28 60 08 08 c2 20 48 a9 00 08 5b 68 28 08 e2 ->3a2a88 20 48 a9 00 48 ab 68 28 c2 30 20 9f 17 20 2c 05 ->3a2a98 20 0f 27 a9 2c 00 20 a3 1c 20 9f 17 20 89 04 a5 ->3a2aa8 21 85 57 a9 2c 00 20 a3 1c 20 9f 17 20 89 04 a5 ->3a2ab8 21 85 5b a9 2c 00 20 a3 1c 20 9f 17 20 89 04 a5 ->3a2ac8 21 85 5f a9 2c 00 20 a3 1c 20 9f 17 20 89 04 a5 ->3a2ad8 21 85 63 a9 2c 00 20 a3 1c 20 9f 17 20 2c 05 a5 ->3a2ae8 21 85 53 20 12 29 28 60 08 08 c2 20 48 a9 00 08 ->3a2af8 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 c2 30 20 ->3a2b08 9f 17 20 2c 05 20 55 27 a9 2c 00 20 a3 1c 20 9f ->3a2b18 17 20 89 04 a5 21 85 57 a9 2c 00 20 a3 1c 20 9f ->3a2b28 17 20 89 04 a5 21 85 5b a9 2c 00 20 a3 1c 20 9f ->3a2b38 17 20 89 04 a5 21 85 5f a9 2c 00 20 a3 1c 20 9f ->3a2b48 17 20 89 04 a5 21 85 63 a9 2c 00 20 a3 1c 20 9f ->3a2b58 17 20 2c 05 a5 21 85 53 20 a2 29 28 60 08 e2 20 ->3a2b68 a5 21 c9 40 b0 18 0a 0a 0a 18 69 00 85 9c a9 0c ->3a2b78 69 00 85 9d a9 af 69 00 85 9e 64 9f 28 60 08 c2 ->3a2b88 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 ->3a2b98 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 e2 20 ->3a2ba8 20 9f 17 20 2c 05 20 65 2b a5 21 8f 16 f0 3a a9 ->3a2bb8 2c 20 a3 1c 20 9f 17 20 2c 05 a5 21 c9 08 b0 4b ->3a2bc8 48 a9 2c 20 a3 1c 20 9f 17 20 89 04 c2 20 38 a5 ->3a2bd8 21 e9 00 00 85 21 a5 23 e9 b0 00 85 23 30 2c c2 ->3a2be8 20 a5 21 a0 01 00 97 9c e2 20 a5 23 c8 c8 97 9c ->3a2bf8 af 16 f0 3a aa bf 18 f0 3a 29 f1 85 0c 68 0a 29 ->3a2c08 0e 05 0c 87 9c 9f 18 f0 3a 28 60 08 c2 20 48 a9 ->3a2c18 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 20 29 ->3a2c28 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 20 9f 17 ->3a2c38 20 2c 05 20 65 2b a9 2c 00 20 a3 1c 20 9f 17 20 ->3a2c48 89 04 a5 21 a0 04 00 97 9c a9 2c 00 20 a3 1c 20 ->3a2c58 9f 17 20 89 04 a5 21 a0 06 00 97 9c 28 60 08 c2 ->3a2c68 20 20 9f 17 20 2c 05 20 65 2b a5 21 8f 16 f0 3a ->3a2c78 a9 2c 00 20 a3 1c 20 9f 17 20 89 04 a5 21 48 a9 ->3a2c88 2c 00 85 35 20 d8 1c b0 1e af 16 f0 3a aa bf 18 ->3a2c98 f0 3a 29 fe 00 85 0c 68 29 01 00 05 0c 9f 18 f0 ->3a2ca8 3a e2 20 87 9c 80 35 c2 20 20 96 1b 20 9f 17 20 ->3a2cb8 2c 05 a5 21 c9 08 00 b0 25 0a 0a 0a 0a 85 0c 68 ->3a2cc8 29 01 00 05 0c 85 0c af 16 f0 3a aa e2 20 bf 18 ->3a2cd8 f0 3a 29 8e 05 0c 87 9c 9f 18 f0 3a 28 60 08 c2 ->3a2ce8 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 ->3a2cf8 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 ->3a2d08 a5 21 c9 04 00 b0 19 8d 00 01 a9 04 00 8d 02 01 ->3a2d18 18 ad 04 01 69 80 02 85 9c a9 af 00 85 9e 28 60 ->3a2d28 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 ->3a2d38 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 ->3a2d48 c2 20 a5 21 c9 04 00 b0 19 8d 00 01 a9 0c 00 8d ->3a2d58 02 01 18 ad 04 01 69 00 02 85 9c a9 af 00 85 9e ->3a2d68 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 ->3a2d78 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 ->3a2d88 08 08 c2 20 20 9f 17 20 2c 05 20 05 2d c2 20 a5 ->3a2d98 9e 48 a5 9c 48 a9 2c 00 20 a3 1c 20 9f 17 20 2c ->3a2da8 05 c2 20 a5 21 48 a9 2c 00 20 a3 1c 20 9f 17 20 ->3a2db8 2c 05 c2 20 a5 21 48 a9 2c 00 20 a3 1c 20 9f 17 ->3a2dc8 20 89 04 c2 20 a5 21 85 5b a5 23 85 5d 68 85 57 ->3a2dd8 68 85 53 68 85 9c 68 85 9e a5 5b 87 9c e2 20 38 ->3a2de8 a5 5d e9 b0 a0 02 00 97 9c c2 20 a5 57 d0 11 a5 ->3a2df8 59 d0 0d e2 20 a5 53 29 07 a0 03 00 97 9c 80 0d ->3a2e08 e2 20 a5 53 29 07 09 08 a0 03 00 97 9c 28 60 08 ->3a2e18 c2 20 20 9f 17 20 2c 05 20 47 2d c2 20 a5 9e 48 ->3a2e28 a5 9c 48 a9 2c 00 20 a3 1c 20 9f 17 20 89 04 c2 ->3a2e38 20 a5 21 48 a9 2c 00 20 a3 1c 20 9f 17 20 89 04 ->3a2e48 c2 20 a5 21 48 a9 2c 00 20 a3 1c 20 9f 17 20 89 ->3a2e58 04 c2 20 a5 21 85 5b a5 23 85 5d 68 85 57 68 85 ->3a2e68 53 68 85 9c 68 85 9e a5 5b a0 01 00 97 9c e2 20 ->3a2e78 38 a5 5d e9 b0 c8 c8 97 9c c2 20 a5 53 a0 04 00 ->3a2e88 97 9c a5 57 a0 06 00 97 9c 28 60 08 c2 20 20 9f ->3a2e98 17 20 2c 05 20 47 2d c2 20 a5 9e 48 a5 9c 48 a9 ->3a2ea8 2c 00 20 a3 1c 20 9f 17 20 89 04 c2 20 68 85 9c ->3a2eb8 68 85 9e a5 21 d0 06 e2 20 a9 00 80 04 e2 20 a9 ->3a2ec8 01 e2 20 a0 00 00 97 9c 28 60 08 c2 20 20 9f 17 ->3a2ed8 20 2c 05 20 47 2d a5 9e 48 a5 9c 48 a9 2c 00 20 ->3a2ee8 a3 1c 20 9f 17 20 89 04 a5 21 48 a9 2c 00 20 a3 ->3a2ef8 1c 20 9f 17 20 89 04 a5 21 85 57 68 85 53 68 85 ->3a2f08 9c 68 85 9e a5 53 a0 08 00 97 9c a5 57 a0 0a 00 ->3a2f18 97 9c 28 60 0b 08 08 c2 20 48 a9 00 08 5b 68 28 ->3a2f28 e2 20 a9 00 8f 58 f0 3a af 5c f0 3a c9 b0 b0 1c ->3a2f38 8f 24 04 af af 5b f0 3a 8f 23 04 af af 5a f0 3a ->3a2f48 8f 22 04 af a9 10 8f 58 f0 3a 80 17 38 e9 b0 8f ->3a2f58 04 04 af af 5b f0 3a 8f 03 04 af af 5a f0 3a 8f ->3a2f68 02 04 af af 59 f0 3a d0 3c af 58 f0 3a f0 1b af ->3a2f78 5d f0 3a 8f 28 04 af af 5e f0 3a 8f 29 04 af af ->3a2f88 5f f0 3a 8f 2a 04 af 82 8b 00 af 5d f0 3a 8f 08 ->3a2f98 04 af af 5e f0 3a 8f 09 04 af af 5f f0 3a 8f 0a ->3a2fa8 04 af 82 70 00 af 58 f0 3a 09 01 8f 58 f0 3a 89 ->3a2fb8 10 f0 32 af 60 f0 3a 8f 28 04 af af 61 f0 3a 8f ->3a2fc8 29 04 af af 62 f0 3a 8f 2a 04 af af 63 f0 3a 8f ->3a2fd8 2b 04 af af 64 f0 3a 8f 2c 04 af af 65 f0 3a 8f ->3a2fe8 2d 04 af 80 30 af 60 f0 3a 8f 08 04 af af 61 f0 ->3a2ff8 3a 8f 09 04 af af 62 f0 3a 8f 0a 04 af af 63 f0 ->3a3008 3a 8f 0b 04 af af 64 f0 3a 8f 0c 04 af af 65 f0 ->3a3018 3a 8f 0d 04 af e2 20 af 69 f0 3a c9 b0 b0 20 8f ->3a3028 27 04 af af 68 f0 3a 8f 26 04 af af 67 f0 3a 8f ->3a3038 25 04 af af 58 f0 3a 09 20 8f 58 f0 3a 80 17 38 ->3a3048 e9 b0 8f 07 04 af af 68 f0 3a 8f 06 04 af af 67 ->3a3058 f0 3a 8f 05 04 af af 66 f0 3a d0 3e af 58 f0 3a ->3a3068 89 20 f0 1b af 6a f0 3a 8f 28 04 af af 6b f0 3a ->3a3078 8f 29 04 af af 6c f0 3a 8f 2a 04 af 82 8b 00 af ->3a3088 6a f0 3a 8f 08 04 af af 6b f0 3a 8f 09 04 af af ->3a3098 6c f0 3a 8f 0a 04 af 82 70 00 af 58 f0 3a 09 02 ->3a30a8 8f 58 f0 3a 89 20 f0 32 af 6d f0 3a 8f 28 04 af ->3a30b8 af 6e f0 3a 8f 29 04 af af 6f f0 3a 8f 2a 04 af ->3a30c8 af 70 f0 3a 8f 2b 04 af af 71 f0 3a 8f 2e 04 af ->3a30d8 af 72 f0 3a 8f 2f 04 af 80 30 af 6d f0 3a 8f 08 ->3a30e8 04 af af 6e f0 3a 8f 09 04 af af 6f f0 3a 8f 0a ->3a30f8 04 af af 70 f0 3a 8f 0b 04 af af 71 f0 3a 8f 0e ->3a3108 04 af af 72 f0 3a 8f 0f 04 af af 58 f0 3a 29 30 ->3a3118 f0 43 c9 10 f0 76 c9 20 d0 03 82 8a 00 af 58 f0 ->3a3128 3a 29 03 f0 23 c9 03 f0 23 08 c2 20 48 a9 00 08 ->3a3138 5b 68 28 e2 20 a9 0a 8f d1 08 00 c2 20 29 ff 00 ->3a3148 20 f1 18 e2 20 dc d2 08 a9 01 80 02 a9 03 8f 20 ->3a3158 04 af 82 7d 00 af 58 f0 3a 29 03 f0 23 c9 03 f0 ->3a3168 23 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f ->3a3178 d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 ->3a3188 a9 01 80 02 a9 03 8f 00 04 af 80 34 af 58 f0 3a ->3a3198 29 01 0a 09 11 8f 20 04 af af 58 f0 3a 29 02 09 ->3a31a8 11 8f 00 04 af 80 19 af 58 f0 3a 29 02 09 21 8f ->3a31b8 20 04 af af 58 f0 3a 29 01 0a 09 21 8f 00 04 af ->3a31c8 af 00 04 af 09 80 8f 00 04 af af 58 f0 3a 29 30 ->3a31d8 f0 0f af 20 04 af 09 80 8f 20 04 af ea ea ea ea ->3a31e8 ea af 01 04 af 89 80 d0 f8 a9 00 8f 20 04 af 8f ->3a31f8 00 04 af 28 2b 60 0b 08 e2 20 c2 10 a9 00 a2 00 ->3a3208 00 8f 59 f0 3a e8 e0 1a 00 d0 f6 20 f7 1c c9 e6 ->3a3218 f0 23 c9 e7 f0 5e 08 c2 20 48 a9 00 08 5b 68 28 ->3a3228 e2 20 a9 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 ->3a3238 e2 20 dc d2 08 20 a3 1c 20 9f 17 20 89 04 c2 20 ->3a3248 a5 21 8f 5a f0 3a e2 20 a5 23 8f 5c f0 3a a9 2c ->3a3258 20 a3 1c 20 9f 17 20 89 04 c2 20 a5 21 8f 5d f0 ->3a3268 3a e2 20 a5 23 8f 5f f0 3a e2 20 a9 00 8f 59 f0 ->3a3278 3a 82 74 00 20 a3 1c 20 9f 17 20 89 04 c2 20 a5 ->3a3288 21 8f 5a f0 3a e2 20 a5 23 8f 5c f0 3a a9 2c 20 ->3a3298 a3 1c 20 9f 17 20 dd 04 c2 20 a5 21 8f 60 f0 3a ->3a32a8 8d 00 01 a9 2c 00 20 a3 1c 20 9f 17 20 dd 04 c2 ->3a32b8 20 a5 21 8f 62 f0 3a 8d 02 01 a9 2c 00 20 a3 1c ->3a32c8 20 9f 17 20 dd 04 c2 20 a5 21 8f 64 f0 3a c2 20 ->3a32d8 ad 04 01 8f 5d f0 3a e2 20 ad 06 01 8f 5f f0 3a ->3a32e8 e2 20 a9 01 8f 59 f0 3a e2 20 a9 99 20 a3 1c 20 ->3a32f8 f7 1c c9 e6 f0 23 c9 e7 f0 5e 08 c2 20 48 a9 00 ->3a3308 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 20 29 ff ->3a3318 00 20 f1 18 e2 20 dc d2 08 20 a3 1c 20 9f 17 20 ->3a3328 89 04 c2 20 a5 21 8f 67 f0 3a e2 20 a5 23 8f 69 ->3a3338 f0 3a a9 2c 20 a3 1c 20 9f 17 20 89 04 c2 20 a5 ->3a3348 21 8f 6a f0 3a e2 20 a5 23 8f 6c f0 3a e2 20 a9 ->3a3358 00 8f 66 f0 3a 82 74 00 20 a3 1c 20 9f 17 20 89 ->3a3368 04 c2 20 a5 21 8f 67 f0 3a e2 20 a5 23 8f 69 f0 ->3a3378 3a a9 2c 20 a3 1c 20 9f 17 20 dd 04 c2 20 a5 21 ->3a3388 8f 6d f0 3a 8d 00 01 a9 2c 00 20 a3 1c 20 9f 17 ->3a3398 20 dd 04 c2 20 a5 21 8f 6f f0 3a 8d 02 01 a9 2c ->3a33a8 00 20 a3 1c 20 9f 17 20 dd 04 c2 20 a5 21 8f 71 ->3a33b8 f0 3a c2 20 ad 04 01 8f 6a f0 3a e2 20 ad 06 01 ->3a33c8 8f 6c f0 3a e2 20 a9 01 8f 66 f0 3a c2 20 af 5d ->3a33d8 f0 3a cf 6a f0 3a d0 14 e2 20 af 5f f0 3a cf 6c ->3a33e8 f0 3a d0 08 c2 20 20 1c 2f 28 2b 60 08 c2 20 48 ->3a33f8 a9 00 08 5b 68 28 e2 20 a9 0a 8f d1 08 00 c2 20 ->3a3408 29 ff 00 20 f1 18 e2 20 dc d2 08 08 20 b7 1b e2 ->3a3418 20 a7 00 d0 03 4c b8 34 c9 3a d0 03 4c b8 34 c9 ->3a3428 22 d0 0b 20 be 16 20 9c 3d a9 3b 20 a3 1c 20 3e ->3a3438 03 90 41 20 a5 49 90 3c a9 3f 20 18 00 a9 20 20 ->3a3448 18 00 20 10 00 e2 20 a5 e8 c9 02 f0 46 c9 00 f0 ->3a3458 62 c9 01 f0 5d 08 c2 20 48 a9 00 08 5b 68 28 e2 ->3a3468 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 ->3a3478 20 dc d2 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 ->3a3488 a9 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 ->3a3498 dc d2 08 c2 20 a9 00 4c 85 21 a9 00 00 85 23 e2 ->3a34a8 20 a9 02 85 25 c2 20 20 3f 49 a9 0d 00 20 18 00 ->3a34b8 28 60 ea c2 20 a5 00 85 3e a5 02 85 40 a9 00 4c ->3a34c8 85 00 a9 00 00 85 02 20 81 05 c2 20 a5 3e 85 00 ->3a34d8 a5 40 85 02 80 cf 08 20 b7 1b e2 20 a7 00 f0 46 ->3a34e8 c9 3a f0 42 20 3e 03 90 3f 20 a5 49 90 3a 20 14 ->3a34f8 00 e2 20 8f 00 4e 00 a9 00 8f 01 4e 00 c2 20 a9 ->3a3508 00 4e 85 21 a9 00 00 85 23 e2 20 a9 02 85 25 20 ->3a3518 3f 49 20 b7 1b a7 00 f0 0d c9 3a f0 09 c9 2c d0 ->3a3528 07 20 96 1b 80 b1 28 60 08 c2 20 48 a9 00 08 5b ->3a3538 68 28 e2 20 a9 02 8f d1 08 00 c2 20 29 ff 00 20 ->3a3548 f1 18 e2 20 dc d2 08 08 20 9f 17 20 89 04 e2 20 ->3a3558 a9 5c 85 a0 c2 20 a5 21 85 a1 e2 20 a5 23 85 a3 ->3a3568 e2 20 a9 2c 85 35 20 d8 1c 90 41 20 96 1b 20 9f ->3a3578 17 20 dd 04 c2 20 a5 21 85 53 e2 20 a9 2c 85 35 ->3a3588 20 d8 1c 90 27 20 96 1b 20 9f 17 20 dd 04 c2 20 ->3a3598 a5 21 85 57 e2 20 a9 2c 85 35 20 d8 1c 90 0d 20 ->3a35a8 96 1b 20 9f 17 20 dd 04 c2 20 a4 21 a6 57 a5 53 ->3a35b8 0b 8b 08 22 a0 08 00 28 ab 2b 20 db 1b 28 60 08 ->3a35c8 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f d1 08 ->3a35d8 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 e2 ->3a35e8 20 20 b7 1b 20 a5 49 90 64 a9 8c 20 a3 1c a9 01 ->3a35f8 20 0d 15 a2 01 00 a9 00 8f 00 4d 00 20 9f 17 20 ->3a3608 dd 04 c2 20 a5 21 9f 00 4d 00 e2 20 af 00 4d 00 ->3a3618 1a 8f 00 4d 00 30 55 e8 e8 20 b7 1b a7 00 c9 2c ->3a3628 f0 25 c9 8d d0 27 20 96 1b 20 53 4a c2 20 a5 be ->3a3638 85 21 e2 20 a5 c0 85 23 64 24 a5 e8 09 80 85 e8 ->3a3648 85 25 20 3f 49 28 60 20 96 1b 4c 04 36 08 c2 20 ->3a3658 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 ->3a3668 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 ->3a3678 a9 00 08 5b 68 28 e2 20 a9 0a 8f d1 08 00 c2 20 ->3a3688 29 ff 00 20 f1 18 e2 20 dc d2 08 08 20 b7 1b e2 ->3a3698 20 a7 00 f0 28 c9 3a f0 24 20 3e 03 90 21 20 a5 ->3a36a8 49 90 1c 20 e6 36 20 3f 49 20 b7 1b a7 00 f0 0d ->3a36b8 c9 3a f0 09 c9 2c d0 07 20 96 1b 80 cf 28 60 08 ->3a36c8 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 ->3a36d8 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 a5 ->3a36e8 02 85 40 a5 00 85 3e a5 1a 85 44 a5 18 85 42 c2 ->3a36f8 20 a5 38 d0 04 a5 36 f0 4e a5 36 85 00 a5 38 85 ->3a3708 02 a5 3a 85 18 a5 3c 85 1a e2 20 a7 00 f0 53 c9 ->3a3718 3a f0 4f c9 2c d0 03 20 96 1b 20 b7 1b a7 00 c9 ->3a3728 22 f0 4e 20 57 03 b0 4e 08 c2 20 48 a9 00 08 5b ->3a3738 68 28 e2 20 a9 02 8f d1 08 00 c2 20 29 ff 00 20 ->3a3748 f1 18 e2 20 dc d2 08 c2 20 a9 00 00 85 18 a9 36 ->3a3758 00 85 1a 18 a5 18 69 04 00 85 00 a5 1a 69 00 00 ->3a3768 85 02 e2 20 a9 80 85 33 a9 a8 85 35 20 ed 1b 80 ->3a3778 a9 20 be 16 80 03 20 f3 15 c2 20 a5 00 85 36 a5 ->3a3788 02 85 38 a5 18 85 3a a5 1a 85 3c a5 42 85 18 a5 ->3a3798 44 85 1a a5 3e 85 00 a5 40 85 02 28 60 20 db 1b ->3a37a8 60 64 36 64 38 64 3a 64 3c 60 20 24 00 60 20 9f ->3a37b8 17 c2 20 a5 23 48 a5 21 48 e2 20 a7 00 c9 2c d0 ->3a37c8 22 20 96 1b 20 9f 17 c2 20 a5 24 d0 35 68 85 08 ->3a37d8 68 85 0a c2 20 a5 21 87 08 e2 20 a0 02 00 a5 23 ->3a37e8 97 08 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 ->3a37f8 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc ->3a3808 d2 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 ->3a3818 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 ->3a3828 08 20 9f 17 c2 20 a5 23 48 a5 21 48 e2 20 a7 00 ->3a3838 c9 2c d0 19 20 96 1b 20 9f 17 c2 20 a5 23 d0 2c ->3a3848 68 85 08 68 85 0a c2 20 a5 21 87 08 60 08 c2 20 ->3a3858 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 ->3a3868 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 ->3a3878 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 20 ->3a3888 29 ff 00 20 f1 18 e2 20 dc d2 08 20 9f 17 c2 20 ->3a3898 a5 23 48 a5 21 48 e2 20 a7 00 c9 2c d0 1f 20 96 ->3a38a8 1b 20 9f 17 e2 20 a5 22 d0 32 c2 20 a5 23 d0 2c ->3a38b8 68 85 08 68 85 0a e2 20 a5 21 87 08 60 08 c2 20 ->3a38c8 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 ->3a38d8 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 ->3a38e8 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 20 ->3a38f8 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 a9 ->3a3908 00 08 5b 68 28 e2 20 a9 01 8f d1 08 00 c2 20 29 ->3a3918 ff 00 20 f1 18 e2 20 dc d2 08 08 e2 20 a7 00 f0 ->3a3928 05 20 96 1b 80 f7 28 60 08 28 60 08 28 60 08 28 ->3a3938 60 08 c2 20 a5 1a 20 b8 18 a5 18 20 b8 18 a5 02 ->3a3948 48 a5 00 48 20 db 1b a5 02 20 b8 18 a5 00 20 b8 ->3a3958 18 68 85 00 68 85 02 20 b7 1b 20 a5 49 b0 1f 08 ->3a3968 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 05 8f d1 08 ->3a3978 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 e2 20 ->3a3988 a5 e8 20 cf 18 a5 e7 20 cf 18 c2 20 a5 e5 20 b8 ->3a3998 18 20 b7 1b e2 20 a7 00 c9 87 d0 6a a5 e8 c9 00 ->3a39a8 f0 04 c9 01 f0 00 20 96 1b 20 9f 17 20 3f 49 e2 ->3a39b8 20 a9 99 20 a3 1c 20 9f 17 c2 20 a5 25 20 b8 18 ->3a39c8 a5 23 20 b8 18 a5 21 20 b8 18 e2 20 a9 9a 85 35 ->3a39d8 20 d8 1c 90 1b 20 96 1b 20 9f 17 e2 20 a5 25 20 ->3a39e8 b8 18 c2 20 a5 23 20 b8 18 a5 21 20 b8 18 80 14 ->3a39f8 c2 20 a9 00 00 20 b8 18 a9 00 00 20 b8 18 a9 01 ->3a3a08 00 20 b8 18 28 60 08 c2 20 48 a9 00 08 5b 68 28 ->3a3a18 e2 20 a9 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 ->3a3a28 e2 20 dc d2 08 08 8b 08 e2 20 48 a9 00 48 ab 68 ->3a3a38 28 08 c2 20 48 a9 00 08 5b 68 28 c2 30 a4 31 c8 ->3a3a48 c8 c2 20 b9 0c 00 85 e5 b9 0e 00 e2 20 85 e7 b9 ->3a3a58 10 00 85 e8 c2 20 5a 20 f1 47 7a c2 20 b9 00 00 ->3a3a68 85 27 b9 02 00 85 29 e2 20 b9 04 00 85 2b c2 20 ->3a3a78 5a 20 81 22 20 3f 49 7a c2 20 b9 06 00 85 27 b9 ->3a3a88 08 00 85 29 e2 20 b9 0a 00 85 2b c2 20 b9 02 00 ->3a3a98 30 0a 20 c5 23 20 76 04 f0 28 80 08 20 a8 23 20 ->3a3aa8 76 04 f0 1e c2 20 b9 12 00 85 00 b9 14 00 85 02 ->3a3ab8 b9 16 00 85 18 b9 18 00 85 1a e2 20 a9 03 85 da ->3a3ac8 80 17 a2 21 08 20 ce 14 c2 20 18 a5 31 69 1a 00 ->3a3ad8 85 31 a5 33 69 00 00 85 33 ab 28 60 08 a5 18 48 ->3a3ae8 a5 1a 48 20 b7 1b 20 81 05 a5 21 f0 26 20 95 1e ->3a3af8 90 42 e2 20 a9 02 85 da 20 db 1b c2 20 68 20 b8 ->3a3b08 18 68 20 b8 18 a5 02 20 b8 18 a5 00 20 b8 18 e6 ->3a3b18 2f 28 60 68 68 08 c2 20 48 a9 00 08 5b 68 28 e2 ->3a3b28 20 a9 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 ->3a3b38 20 dc d2 08 68 68 08 c2 20 48 a9 00 08 5b 68 28 ->3a3b48 e2 20 a9 06 8f d1 08 00 c2 20 29 ff 00 20 f1 18 ->3a3b58 e2 20 dc d2 08 08 c2 30 a5 2f f0 1e 20 da 18 85 ->3a3b68 00 20 da 18 85 02 20 da 18 85 18 20 da 18 85 1a ->3a3b78 c6 2f e2 20 a9 03 85 da 28 60 08 c2 20 48 a9 00 ->3a3b88 08 5b 68 28 e2 20 a9 07 8f d1 08 00 c2 20 29 ff ->3a3b98 00 20 f1 18 e2 20 dc d2 08 08 20 9f 17 20 76 04 ->3a3ba8 f0 1c e2 20 a9 94 20 a3 1c 20 81 05 20 76 04 f0 ->3a3bb8 12 20 95 1e 90 2c e2 20 a9 02 85 da 80 03 20 db ->3a3bc8 1b 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 ->3a3bd8 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc ->3a3be8 d2 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 06 ->3a3bf8 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 ->3a3c08 08 08 e2 20 a9 01 85 da 28 60 08 20 b7 1b 20 81 ->3a3c18 05 a5 21 f0 0d 20 95 1e 90 27 e2 20 a9 02 85 da ->3a3c28 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 ->3a3c38 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 ->3a3c48 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 06 8f ->3a3c58 d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 ->3a3c68 20 70 14 20 9c 0c 20 f0 46 60 08 a7 00 10 03 20 ->3a3c78 96 1b 20 a5 49 b0 03 4c e9 3c e2 20 20 f7 1c c9 ->3a3c88 8c d0 0e a9 8c 20 a3 1c a9 00 8f 00 4d 00 20 f6 ->3a3c98 15 20 b7 1b e2 20 a7 00 c9 87 f0 03 4c e9 3c 20 ->3a3ca8 96 1b a5 e8 48 a5 e7 48 a5 e6 48 a5 e5 48 20 9f ->3a3cb8 17 68 85 e5 68 85 e6 68 85 e7 68 85 e8 29 80 f0 ->3a3cc8 1b 20 63 47 90 3a c2 20 a0 09 00 b7 08 85 be e2 ->3a3cd8 20 c8 c8 b7 08 85 c0 20 34 4c 80 03 20 3f 49 28 ->3a3ce8 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f ->3a3cf8 d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 ->3a3d08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 05 8f d1 ->3a3d18 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 ->3a3d28 e2 20 20 f7 1c c9 00 f0 66 20 9f 17 e2 20 a5 25 ->3a3d38 c9 ff f0 14 c9 02 d0 05 20 9c 3d 80 0b c9 00 d0 ->3a3d48 05 20 bc 3d 80 02 80 4a 20 b7 1b a7 00 f0 40 c9 ->3a3d58 3a f0 3c c9 2c f0 23 c9 3b f0 24 08 c2 20 48 a9 ->3a3d68 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 20 29 ->3a3d78 ff 00 20 f1 18 e2 20 dc d2 08 a9 09 20 18 00 20 ->3a3d88 96 1b 20 b7 1b a7 00 f0 09 c9 3a f0 05 80 9a 20 ->3a3d98 33 02 28 60 08 8b 08 c2 20 48 a9 00 08 5b 68 28 ->3a3da8 e2 20 c2 10 a0 00 00 b7 21 f0 06 20 18 00 c8 80 ->3a3db8 f6 ab 28 60 08 c2 20 20 51 11 a5 14 85 21 a5 16 ->3a3dc8 85 23 20 9c 3d 28 60 08 e2 20 85 b3 4a 4a 4a 4a ->3a3dd8 29 0f 18 69 30 97 14 c8 a5 b3 29 0f 18 69 30 97 ->3a3de8 14 c8 28 60 e2 20 a9 8c 20 a3 1c 08 20 9f 17 e2 ->3a3df8 20 c2 10 af 0e 08 af 09 08 8f 0e 08 af 20 f2 10 ->3a3e08 a0 00 00 af 06 08 af 20 cf 3d a9 2f 97 14 c8 af ->3a3e18 09 08 af 20 cf 3d a9 2f 97 14 c8 af 0f 08 af 20 ->3a3e28 cf 3d af 0a 08 af 20 cf 3d a9 00 97 14 af 0e 08 ->3a3e38 af 29 f7 8f 0e 08 af c2 20 a5 14 85 21 a5 16 85 ->3a3e48 23 e2 20 a9 02 85 25 28 e2 20 20 96 1b 60 e2 20 ->3a3e58 a9 8c 20 a3 1c 08 20 9f 17 e2 20 c2 10 af 0e 08 ->3a3e68 af 09 08 8f 0e 08 af 20 f2 10 a0 00 00 af 04 08 ->3a3e78 af 29 7f 20 cf 3d a9 3a 97 14 c8 af 02 08 af 20 ->3a3e88 cf 3d a9 3a 97 14 c8 af 00 08 af 20 cf 3d a9 00 ->3a3e98 97 14 af 0e 08 af 29 f7 8f 0e 08 af c2 20 a5 14 ->3a3ea8 85 21 a5 16 85 23 e2 20 a9 02 85 25 28 e2 20 20 ->3a3eb8 96 1b 60 08 c2 20 20 9f 17 20 89 04 c2 20 a5 21 ->3a3ec8 49 ff ff 85 21 a5 23 49 ff ff 85 23 e6 21 d0 03 ->3a3ed8 e6 23 00 28 60 e2 20 a9 8c 20 a3 1c 08 c2 30 20 ->3a3ee8 9f 17 20 b3 04 c2 20 a5 23 48 a5 21 48 20 b7 1b ->3a3ef8 e2 20 a7 00 c9 2c f0 03 4c 54 3f 20 96 1b 20 9f ->3a3f08 17 20 dd 04 c2 20 a5 21 48 20 b7 1b e2 20 a7 00 ->3a3f18 c9 2c f0 03 4c 54 3f 20 96 1b 20 9f 17 20 dd 04 ->3a3f28 c2 20 a5 21 85 8d e2 20 a5 23 85 8f c2 20 68 85 ->3a3f38 27 a9 00 00 85 29 68 85 21 68 85 23 e2 20 a9 02 ->3a3f48 85 25 20 f1 12 e2 20 20 96 1b 28 60 08 c2 20 48 ->3a3f58 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 20 ->3a3f68 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 a9 ->3a3f78 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 20 29 ->3a3f88 ff 00 20 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 ->3a3f98 1c 08 c2 30 20 9f 17 e2 20 a5 25 c9 02 f0 03 4c ->3a3fa8 16 40 c2 20 a5 23 48 a5 21 48 20 b7 1b e2 20 a7 ->3a3fb8 00 c9 2c f0 03 4c 35 40 20 96 1b 20 9f 17 e2 20 ->3a3fc8 a5 25 c9 00 d0 48 c2 20 a5 21 85 8d c2 20 68 85 ->3a3fd8 21 68 85 23 e2 20 a9 02 85 25 e2 20 a0 00 00 b7 ->3a3fe8 21 f0 03 c8 80 f9 c2 20 98 38 e5 8d 30 09 85 27 ->3a3ff8 a9 00 00 85 29 80 07 a9 00 00 85 27 85 29 e2 20 ->3a4008 a9 00 85 2b 20 f1 12 e2 20 20 96 1b 28 60 08 c2 ->3a4018 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f d1 08 00 ->3a4028 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 ->3a4038 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 ->3a4048 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 ->3a4058 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 20 ->3a4068 29 ff 00 20 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 ->3a4078 a3 1c 08 c2 30 20 9f 17 e2 20 a5 25 c9 02 f0 03 ->3a4088 4c df 40 c2 20 a5 23 48 a5 21 48 20 b7 1b e2 20 ->3a4098 a7 00 c9 2c f0 03 4c fe 40 20 96 1b 20 9f 17 e2 ->3a40a8 20 a5 25 c9 00 d0 30 c2 20 a5 21 85 8d c2 20 a9 ->3a40b8 00 00 85 27 a9 00 00 85 29 e2 20 a9 00 85 2b c2 ->3a40c8 20 68 85 21 68 85 23 e2 20 a9 02 85 25 20 f1 12 ->3a40d8 e2 20 20 96 1b 28 60 08 c2 20 48 a9 00 08 5b 68 ->3a40e8 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 f1 ->3a40f8 18 e2 20 dc d2 08 08 c2 20 48 a9 00 08 5b 68 28 ->3a4108 e2 20 a9 02 8f d1 08 00 c2 20 29 ff 00 20 f1 18 ->3a4118 e2 20 dc d2 08 08 c2 20 48 a9 00 08 5b 68 28 e2 ->3a4128 20 a9 09 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 ->3a4138 20 dc d2 08 e2 20 a9 8c 20 a3 1c 20 9f 17 c2 10 ->3a4148 e2 20 a5 25 c9 02 d0 23 c2 20 a5 00 85 3e a5 02 ->3a4158 85 40 a5 21 85 00 a5 23 85 02 20 81 05 a5 3e 85 ->3a4168 00 a5 40 85 02 e2 20 20 96 1b 60 08 c2 20 48 a9 ->3a4178 00 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ->3a4188 ff 00 20 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 ->3a4198 1c 08 20 9f 17 c2 10 e2 20 a5 25 c9 00 d0 1a 20 ->3a41a8 51 11 c2 20 a5 14 85 21 a5 16 85 23 e2 20 a9 02 ->3a41b8 85 25 28 e2 20 20 96 1b 60 08 c2 20 48 a9 00 08 ->3a41c8 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 ->3a41d8 20 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 1c 08 ->3a41e8 20 9f 17 20 b3 04 c2 20 64 0c 64 0e e2 30 a0 00 ->3a41f8 b7 21 c9 20 f0 04 c9 24 d0 03 c8 80 f3 b7 21 20 ->3a4208 68 03 90 1e c2 20 06 0c 26 0e 06 0c 26 0e 06 0c ->3a4218 26 0e 06 0c 26 0e e2 20 20 89 03 05 0c 85 0c c8 ->3a4228 80 db c2 20 a5 0c 85 21 a5 0e 85 23 e2 20 a9 00 ->3a4238 85 25 28 e2 20 20 96 1b 60 e2 20 a9 8c 20 a3 1c ->3a4248 08 20 9f 17 20 89 04 20 f2 10 e2 30 a0 ff a9 00 ->3a4258 97 14 88 a5 21 29 0f aa bf 00 d0 3a 97 14 88 a5 ->3a4268 21 29 f0 4a 4a 4a 4a aa bf 00 d0 3a 97 14 88 a5 ->3a4278 22 85 21 a5 23 85 22 a5 24 85 23 a9 00 85 24 a5 ->3a4288 21 d0 d0 a5 22 d0 cc a5 23 d0 c8 98 38 65 14 85 ->3a4298 21 a5 15 85 22 a5 16 85 23 a5 17 85 24 a9 02 85 ->3a42a8 25 28 e2 20 20 96 1b 60 08 c2 20 48 a9 00 08 5b ->3a42b8 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 ->3a42c8 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 1c 20 9f ->3a42d8 17 e2 20 a5 25 c9 02 d0 1f 8b a5 23 48 ab c2 10 ->3a42e8 a6 21 20 d6 11 ab 84 21 c2 20 64 23 e2 20 a9 00 ->3a42f8 85 25 e2 20 20 96 1b 60 08 c2 20 48 a9 00 08 5b ->3a4308 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 ->3a4318 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 1c 20 9f ->3a4328 17 e2 20 a5 25 c9 00 d0 12 e2 20 a7 21 85 21 64 ->3a4338 22 64 23 64 2e e2 20 20 96 1b 60 08 c2 20 48 a9 ->3a4348 00 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ->3a4358 ff 00 20 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 ->3a4368 1c 20 9f 17 e2 20 a5 25 c9 00 d0 1d c2 20 a7 21 ->3a4378 85 0c e2 20 a0 02 00 b7 21 85 23 64 24 c2 20 a5 ->3a4388 0c 85 21 e2 20 20 96 1b 60 08 c2 20 48 a9 00 08 ->3a4398 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 ->3a43a8 20 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 1c 20 ->3a43b8 9f 17 e2 20 a5 25 c9 00 d0 0e c2 20 a7 21 85 21 ->3a43c8 64 23 e2 20 20 96 1b 60 08 c2 20 48 a9 00 08 5b ->3a43d8 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 ->3a43e8 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 1c 20 9f ->3a43f8 17 e2 20 a5 25 c9 00 d0 24 20 f2 10 a5 21 87 14 ->3a4408 a9 00 a0 01 00 97 14 c2 20 a5 14 85 21 a5 16 85 ->3a4418 23 e2 20 a9 02 85 25 e2 20 20 96 1b 60 08 c2 20 ->3a4428 48 a9 00 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 ->3a4438 20 29 ff 00 20 f1 18 e2 20 dc d2 08 e2 20 a9 8c ->3a4448 20 a3 1c 20 9f 17 e2 20 a5 25 c9 02 d0 14 a7 21 ->3a4458 85 21 64 22 64 23 64 24 a9 00 85 25 e2 20 20 96 ->3a4468 1b 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 ->3a4478 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 ->3a4488 08 e2 20 a9 8c 20 a3 1c 20 9f 17 e2 20 a5 25 c9 ->3a4498 00 d0 39 e2 20 a5 24 d0 52 a5 23 d0 4e a5 22 d0 ->3a44a8 4a c2 10 20 f2 10 a4 21 e2 20 a9 00 97 14 88 30 ->3a44b8 07 a9 20 97 14 88 10 fb a9 02 85 25 c2 20 a5 14 ->3a44c8 85 21 a5 16 85 23 e2 20 20 96 1b 60 08 c2 20 48 ->3a44d8 a9 00 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 ->3a44e8 29 ff 00 20 f1 18 e2 20 dc d2 08 08 c2 20 48 a9 ->3a44f8 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 20 29 ->3a4508 ff 00 20 f1 18 e2 20 dc d2 08 e2 20 a9 8c 20 a3 ->3a4518 1c 20 9f 17 e2 20 a5 25 c9 00 d0 39 e2 20 a5 24 ->3a4528 d0 52 a5 23 d0 4e a5 22 d0 4a c2 10 20 f2 10 a4 ->3a4538 21 e2 20 a9 00 97 14 88 30 07 a9 09 97 14 88 10 ->3a4548 fb a9 02 85 25 c2 20 a5 14 85 21 a5 16 85 23 e2 ->3a4558 20 20 96 1b 60 08 c2 20 48 a9 00 08 5b 68 28 e2 ->3a4568 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 ->3a4578 20 dc d2 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 ->3a4588 a9 09 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 ->3a4598 dc d2 08 e2 20 a9 8c 20 a3 1c 20 9f 17 20 89 04 ->3a45a8 c2 20 a5 23 10 17 49 ff ff 85 23 a5 21 49 ff ff ->3a45b8 18 69 01 00 85 21 a5 23 69 00 00 85 23 e2 20 20 ->3a45c8 96 1b 60 e2 20 a9 8c 20 a3 1c 20 9f 17 e2 20 a5 ->3a45d8 25 c9 00 d0 25 c2 20 a5 23 30 12 d0 04 a5 21 f0 ->3a45e8 13 a9 00 00 85 23 a9 01 00 85 21 80 07 a9 ff ff ->3a45f8 85 23 85 21 e2 20 20 96 1b 60 08 c2 20 48 a9 00 ->3a4608 08 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff ->3a4618 00 20 f1 18 e2 20 dc d2 08 00 ea 60 08 0b 08 c2 ->3a4628 20 48 a9 00 08 5b 68 28 c2 30 c2 20 a9 00 00 85 ->3a4638 d7 e2 20 a9 36 85 d9 c2 30 a9 00 00 a0 00 00 97 ->3a4648 d7 a0 02 00 97 d7 a0 04 00 97 d7 20 6c 1b 2b 28 ->3a4658 60 8b 08 c2 20 a9 00 00 85 18 a9 36 00 85 1a 20 ->3a4668 6c 1b 20 4b 1e 28 ab 60 08 c2 20 64 53 a9 ff 7f ->3a4678 85 57 20 33 02 20 f7 1c 29 ff 00 c9 00 00 f0 2c ->3a4688 c9 81 00 f0 1a 20 b7 1b 20 81 05 a5 21 85 53 20 ->3a4698 f7 1c 29 ff 00 c9 00 00 f0 12 c9 81 00 d0 2a 20 ->3a46a8 a3 1c 20 b7 1b 20 81 05 a5 21 85 57 a5 1a 48 a5 ->3a46b8 18 48 a5 02 48 a5 00 48 20 71 13 68 85 00 68 85 ->3a46c8 02 68 85 18 68 85 1a 28 60 08 c2 20 48 a9 00 08 ->3a46d8 5b 68 28 e2 20 a9 02 8f d1 08 00 c2 20 29 ff 00 ->3a46e8 20 f1 18 e2 20 dc d2 08 08 08 c2 20 48 a9 00 08 ->3a46f8 5b 68 28 c2 20 64 e2 64 e5 e2 20 64 e4 64 e7 64 ->3a4708 e8 c2 20 38 a5 d7 69 04 00 85 df e2 20 a5 d9 69 ->3a4718 00 85 e1 28 60 c9 5f f0 1a c9 3a b0 04 c9 30 b0 ->3a4728 12 c9 5b b0 04 c9 41 b0 0a c9 7b b0 04 c9 61 b0 ->3a4738 02 18 60 38 60 08 e2 20 c2 10 a0 00 00 b7 0c f0 ->3a4748 0a d7 e5 d0 13 c8 c0 08 00 d0 f2 b7 e5 20 b2 03 ->3a4758 20 1d 47 b0 03 28 38 60 28 18 60 08 e2 20 c2 10 ->3a4768 a0 00 00 a2 00 00 b7 e5 f0 0b 20 b2 03 9f 00 4e ->3a4778 00 c8 e8 80 f1 a9 00 9f 00 4e 00 c2 20 a9 00 4e ->3a4788 85 e5 e2 20 a9 00 85 e7 c2 20 a5 e2 85 08 d0 06 ->3a4798 e2 20 a5 e4 f0 4d e2 20 a5 e4 85 0a a5 e8 a0 00 ->3a47a8 00 d7 08 d0 17 c2 20 18 a5 08 69 01 00 85 0c e2 ->3a47b8 20 a5 0a 69 00 85 0e 20 3d 47 b0 2a a0 0d 00 c2 ->3a47c8 20 b7 08 85 0c c8 c8 e2 20 b7 08 85 0e d0 06 c2 ->3a47d8 20 a5 0c f0 0e c2 20 a5 0c 85 08 e2 20 a5 0e 85 ->3a47e8 0a 80 b9 28 18 60 28 38 60 08 20 63 47 b0 1f 08 ->3a47f8 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 05 8f d1 08 ->3a4808 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 c2 30 ->3a4818 a0 09 00 b7 08 85 21 c8 c8 b7 08 85 23 e2 20 a0 ->3a4828 00 00 b7 08 85 25 28 60 08 c2 20 18 a5 df 69 10 ->3a4838 00 85 08 e2 20 a5 e1 69 00 85 0a c5 ba 90 27 c2 ->3a4848 20 a5 08 c5 b8 90 1f 08 c2 20 48 a9 00 08 5b 68 ->3a4858 28 e2 20 a9 09 8f d1 08 00 c2 20 29 ff 00 20 f1 ->3a4868 18 e2 20 dc d2 08 c2 20 a5 df 85 be e2 20 a5 e1 ->3a4878 85 c0 c2 20 a5 08 85 df e2 20 a5 0a 85 e1 28 60 ->3a4888 08 e2 20 a5 25 c5 e8 f0 1f 08 c2 20 48 a9 00 08 ->3a4898 5b 68 28 e2 20 a9 04 8f d1 08 00 c2 20 29 ff 00 ->3a48a8 20 f1 18 e2 20 dc d2 08 c9 02 d0 03 20 8b 12 c2 ->3a48b8 10 20 30 48 c2 30 18 a5 be 69 01 00 85 08 e2 20 ->3a48c8 a5 c0 69 00 85 0a a0 00 00 a9 00 97 08 c8 c0 08 ->3a48d8 00 d0 f8 a0 00 00 b7 e5 f0 10 20 b2 03 20 1d 47 ->3a48e8 90 08 97 08 c8 c0 08 00 d0 ec c2 20 a0 09 00 a5 ->3a48f8 21 97 be a5 23 c8 c8 97 be a5 e2 a0 0d 00 97 be ->3a4908 c8 c8 e2 20 a5 e4 97 be c2 20 a5 be 85 e2 e2 20 ->3a4918 a5 c0 85 e4 e2 20 a0 00 00 a5 25 97 be c9 02 f0 ->3a4928 02 28 60 c2 20 a5 21 85 be e2 20 a5 23 85 c0 20 ->3a4938 00 0f 20 15 0f 80 ea 08 c2 30 a5 e2 d0 06 e2 20 ->3a4948 a5 e4 f0 05 20 63 47 b0 05 20 88 48 80 17 e2 20 ->3a4958 a5 25 c9 02 f0 11 c2 30 a0 09 00 a5 21 97 08 c8 ->3a4968 c8 a5 23 97 08 28 60 20 8b 12 a0 09 00 b7 08 85 ->3a4978 be c8 c8 e2 20 b7 08 85 c0 20 00 0f 20 34 0f e2 ->3a4988 20 a5 25 c9 02 f0 02 80 cd c2 20 a5 21 85 be e2 ->3a4998 20 a5 23 85 c0 20 00 0f 20 15 0f 80 b9 08 20 b7 ->3a49a8 1b e2 20 a7 00 20 3e 03 90 42 c2 20 a5 00 85 e5 ->3a49b8 e2 20 a5 02 85 e7 20 96 1b a7 00 f0 0d c9 24 f0 ->3a49c8 14 c9 25 f0 09 20 1d 47 b0 ec a9 00 80 0c 20 96 ->3a49d8 1b a9 00 80 05 20 96 1b a9 02 85 e8 20 f7 1c c9 ->3a49e8 8c d0 06 a5 e8 09 80 85 e8 28 38 60 28 18 60 08 ->3a49f8 c2 20 48 a9 00 08 5b 68 28 c2 20 a5 21 85 0c a5 ->3a4a08 23 64 0e 64 21 64 23 e2 20 64 26 a9 01 85 25 c2 ->3a4a18 20 a5 0c f0 35 10 0e e2 20 a9 80 85 26 c2 20 49 ->3a4a28 ff ff 1a 85 0c e2 20 e6 24 c2 20 46 0e 66 0c e2 ->3a4a38 20 66 23 66 22 66 21 c2 20 a5 0c c9 01 00 d0 e5 ->3a4a48 e2 20 06 26 66 23 66 22 66 21 60 08 20 00 0f c2 ->3a4a58 20 a9 01 00 85 21 a9 00 00 85 23 e2 20 af 00 4d ->3a4a68 00 c2 20 29 ff 00 85 8d a8 a2 01 00 c2 20 bf 00 ->3a4a78 4d 00 85 27 a9 00 00 85 29 20 ce 22 e8 e8 88 d0 ->3a4a88 eb c2 20 a9 04 00 85 27 a9 00 00 85 29 20 ce 22 ->3a4a98 e2 20 af 00 4d 00 85 0c a9 00 85 0d c2 20 06 0c ->3a4aa8 38 a5 21 65 0c 85 21 a5 23 69 00 00 85 23 d0 29 ->3a4ab8 e2 20 a5 e8 09 80 a6 21 20 c4 0c e2 20 af 00 4d ->3a4ac8 00 87 be a0 01 00 a2 00 00 e2 20 bf 01 4d 00 97 ->3a4ad8 be e4 8d f0 23 e8 c8 80 f0 08 c2 20 48 a9 00 08 ->3a4ae8 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 20 29 ff 00 ->3a4af8 20 f1 18 e2 20 dc d2 08 e2 20 38 a5 be 67 be 85 ->3a4b08 08 a5 bf 69 00 85 09 a5 c0 69 00 85 0a 64 0b c2 ->3a4b18 20 a0 05 00 b7 c1 85 0c e2 20 c8 c8 b7 c1 85 0e ->3a4b28 64 0f e2 20 a9 00 87 08 c2 20 18 a5 08 69 01 00 ->3a4b38 85 08 a5 0a 69 00 00 85 0a c5 0e d0 e5 a5 08 c5 ->3a4b48 0c d0 df 28 60 08 c2 20 64 08 64 0a e2 20 af 00 ->3a4b58 4d 00 85 8d 64 8e a2 01 00 e2 20 a7 be c5 8d f0 ->3a4b68 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f ->3a4b78 d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 ->3a4b88 c9 01 f0 3a a0 01 00 e2 20 bf 00 4d 00 85 21 64 ->3a4b98 22 64 23 64 24 b7 be 85 27 64 28 64 29 64 2a a5 ->3a4ba8 21 c5 27 b0 68 20 ce 22 c2 20 18 a5 08 65 21 85 ->3a4bb8 08 a5 0a 65 23 85 0a e8 e8 c8 c4 8d d0 c9 e2 20 ->3a4bc8 18 bf 00 4d 00 85 8e 65 08 85 08 a5 09 69 00 85 ->3a4bd8 09 c2 20 a5 0a 69 00 00 85 0a c2 20 06 08 26 0a ->3a4be8 06 08 26 0a e2 20 38 a5 08 65 8d 85 08 a5 09 69 ->3a4bf8 00 85 09 c2 20 a5 0a 69 00 00 85 0a 18 a5 08 65 ->3a4c08 be 85 08 e2 20 a5 0a 65 c0 85 0a 28 60 08 c2 20 ->3a4c18 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d1 08 00 c2 ->3a4c28 20 29 ff 00 20 f1 18 e2 20 dc d2 08 08 20 00 0f ->3a4c38 e2 20 a0 00 00 b7 c1 29 7f c5 25 d0 28 a5 25 48 ->3a4c48 c2 20 a5 23 48 a5 21 48 20 4d 4b 68 85 21 68 85 ->3a4c58 23 e2 20 68 85 25 c2 20 a5 21 87 08 a0 02 00 a5 ->3a4c68 23 97 08 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 ->3a4c78 20 a9 04 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 ->3a4c88 20 dc d2 08 08 20 00 0f f4 00 00 f4 00 00 e2 20 ->3a4c98 48 20 4d 4b e2 20 68 c2 20 68 68 c2 20 a7 08 85 ->3a4ca8 21 a0 02 00 b7 08 85 23 e2 20 a0 00 00 b7 c1 29 ->3a4cb8 7f 85 25 28 60 da 0b 08 08 c2 20 48 a9 00 08 5b ->3a4cc8 68 28 c2 30 a5 23 89 f0 ff d0 29 89 0f 00 d0 0c ->3a4cd8 a5 21 89 00 fc d0 05 20 bc 3d 80 2e a2 0a 00 46 ->3a4ce8 23 66 21 ca d0 f9 20 bc 3d e2 20 a9 4b 20 18 00 ->3a4cf8 c2 20 80 16 a2 14 00 46 23 66 21 ca d0 f9 20 bc ->3a4d08 3d e2 20 a9 4d 20 18 00 c2 20 28 2b fa 60 0b 08 ->3a4d18 c2 30 a9 00 00 8f b4 08 00 8f b6 08 00 e2 20 20 ->3a4d28 f7 1c c9 00 f0 08 20 9f 17 20 b3 04 80 11 c2 20 ->3a4d38 a9 00 00 85 21 85 23 e2 20 a9 02 85 25 c2 20 20 ->3a4d48 77 4e 22 08 11 00 b0 22 20 28 4f 08 c2 20 48 a9 ->3a4d58 00 08 5b 68 28 e2 20 a9 10 8f d1 08 00 c2 20 29 ->3a4d68 ff 00 20 f1 18 e2 20 dc d2 08 20 33 02 08 c2 20 ->3a4d78 48 a9 20 03 5b 68 28 e2 20 a0 00 00 b7 18 d0 03 ->3a4d88 82 a9 00 c9 e5 d0 03 82 96 00 a0 0b 00 b7 18 89 ->3a4d98 08 f0 03 82 a9 00 89 02 f0 03 82 83 00 29 0f c9 ->3a4da8 0f d0 03 82 7a 00 a0 00 00 b7 18 20 18 00 c8 c0 ->3a4db8 08 00 d0 f5 a9 20 20 18 00 a0 08 00 b7 18 20 18 ->3a4dc8 00 c8 c0 0b 00 d0 f5 a9 09 20 18 00 a0 0b 00 b7 ->3a4dd8 18 89 10 d0 1e c2 20 a0 1c 00 b7 18 8f 21 08 00 ->3a4de8 c8 c8 b7 18 8f 23 08 00 e2 20 a9 00 8f 25 08 00 ->3a4df8 20 bd 4c a9 09 20 18 00 a0 0b 00 b7 18 89 08 d0 ->3a4e08 1c 89 01 f0 05 a9 52 20 18 00 89 04 f0 05 a9 53 ->3a4e18 20 18 00 89 10 f0 05 a9 44 20 18 00 ea 20 33 02 ->3a4e28 20 4a 02 22 0c 11 00 90 03 82 41 ff 20 28 4f 08 ->3a4e38 c2 20 48 a9 00 08 5b 68 28 20 db 1b 28 2b 60 08 ->3a4e48 c2 20 48 a9 20 03 5b 68 28 e2 20 29 0f c9 0f f0 ->3a4e58 cf a9 5b 20 18 00 a0 00 00 b7 18 c9 20 f0 09 20 ->3a4e68 18 00 c8 c0 08 00 d0 f1 a9 5d 20 18 00 80 ae 0b ->3a4e78 08 08 c2 20 48 a9 20 03 5b 68 28 c2 30 a9 73 f2 ->3a4e88 85 20 a9 3a 00 85 22 a0 00 00 e2 20 a9 00 97 20 ->3a4e98 c8 c0 1e 00 d0 f8 c2 20 a9 73 f0 8f 81 f2 3a a9 ->3a4ea8 3a 00 8f 83 f2 3a af 21 08 00 8f 75 f2 3a af 23 ->3a4eb8 08 00 8f 77 f2 3a 28 2b 60 08 c2 30 20 b7 1b 20 ->3a4ec8 9f 17 20 b3 04 20 77 4e e2 20 a9 2c 85 35 20 d8 ->3a4ed8 1c b0 0f c2 20 a9 ff ff 8f 54 03 00 8f 56 03 00 ->3a4ee8 80 17 20 96 1b 20 9f 17 20 89 04 c2 20 a5 21 8f ->3a4ef8 54 03 00 a5 23 8f 56 03 00 22 18 11 00 b0 1f 08 ->3a4f08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 11 8f d1 08 ->3a4f18 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 28 60 ->3a4f28 8b 0b 08 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 ->3a4f38 48 a9 00 48 ab 68 28 e2 20 af 2e 03 00 85 21 a9 ->3a4f48 00 85 22 85 23 85 24 a9 00 85 25 85 e8 a9 3a 85 ->3a4f58 e7 c2 20 a9 8b 4f 85 e5 20 3f 49 e2 20 af 20 03 ->3a4f68 00 85 21 a9 00 85 22 85 23 85 24 a9 00 85 25 85 ->3a4f78 e8 a9 3a 85 e7 c2 20 a9 93 4f 85 e5 20 3f 49 28 ->3a4f88 2b ab 60 44 4f 53 53 54 41 54 00 42 49 4f 53 53 ->3a4f98 54 41 54 00 08 c2 30 20 b7 1b 20 9f 17 20 b3 04 ->3a4fa8 a5 21 8f 60 03 00 a5 23 8f 62 03 00 a9 ff ff 8f ->3a4fb8 54 03 00 8f 56 03 00 22 24 11 00 b0 25 20 f1 18 ->3a4fc8 20 28 4f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 ->3a4fd8 11 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc ->3a4fe8 d2 08 20 f1 18 28 60 08 c2 30 20 b7 1b 20 9f 17 ->3a4ff8 20 b3 04 20 77 4e a9 00 00 8f 54 03 00 a9 01 00 ->3a5008 8f 56 03 00 20 24 46 22 18 11 00 b0 22 20 28 4f ->3a5018 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 11 8f d1 ->3a5028 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 20 ->3a5038 28 4f c2 20 a2 12 00 18 bf 73 f2 3a 69 00 00 85 ->3a5048 90 bf 75 f2 3a 69 01 00 85 92 e2 20 a9 00 87 90 ->3a5058 c2 20 a9 00 00 85 78 a9 01 00 85 7a a2 00 00 e2 ->3a5068 20 a7 78 f0 2a c9 0d f0 12 c9 0a f0 04 9d 00 4f ->3a5078 e8 c2 20 e6 78 d0 e8 e6 7a 80 e4 e2 20 a9 00 9d ->3a5088 00 4f 20 00 22 c2 20 e6 78 d0 d1 e6 7a 80 cd e0 ->3a5098 00 00 f0 0a e2 20 a9 00 9d 00 4f 20 00 22 28 60 ->3a50a8 08 c2 30 20 b7 1b 20 9f 17 20 b3 04 20 77 4e e2 ->3a50b8 20 a9 2c 20 a3 1c c2 20 20 9f 17 20 89 04 a5 21 ->3a50c8 8f 50 03 00 a5 23 8f 52 03 00 e2 20 a9 2c c2 20 ->3a50d8 20 a3 1c 20 9f 17 20 89 04 a5 21 8f 58 03 00 a5 ->3a50e8 23 8f 5a 03 00 22 1c 11 00 b0 22 20 28 4f 08 c2 ->3a50f8 20 48 a9 00 08 5b 68 28 e2 20 a9 12 8f d1 08 00 ->3a5108 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 20 28 4f ->3a5118 28 60 da 5a 08 a2 00 00 a0 00 00 e2 20 b7 21 9d ->3a5128 00 04 f0 04 e8 c8 80 f5 28 7a fa 60 08 c2 30 20 ->3a5138 b7 1b 20 9f 17 20 b3 04 20 77 4e a9 00 00 85 a4 ->3a5148 e2 20 a9 01 85 a6 a9 20 85 b2 c2 20 a9 00 00 85 ->3a5158 a9 a9 ff ff 85 a7 c2 20 a9 00 00 85 53 85 55 a9 ->3a5168 ff ff 85 57 a9 ff 7f 85 59 20 71 13 e2 20 a9 80 ->3a5178 85 b2 c2 20 c6 a9 18 a9 00 00 8f 50 03 00 65 a9 ->3a5188 8f 58 03 00 a9 01 00 8f 52 03 00 69 00 00 8f 5a ->3a5198 03 00 22 1c 11 00 b0 22 20 28 4f 08 c2 20 48 a9 ->3a51a8 00 08 5b 68 28 e2 20 a9 12 8f d1 08 00 c2 20 29 ->3a51b8 ff 00 20 f1 18 e2 20 dc d2 08 20 28 4f 28 60 08 ->3a51c8 c2 30 20 b7 1b 20 9f 17 20 b3 04 20 1a 51 22 04 ->3a51d8 11 00 b0 22 20 28 4f 08 c2 20 48 a9 00 08 5b 68 ->3a51e8 28 e2 20 a9 13 8f d1 08 00 c2 20 29 ff 00 20 f1 ->3a51f8 18 e2 20 dc d2 08 20 28 4f 28 60 da 08 e2 20 c9 ->3a5208 61 90 08 c9 7b b0 04 29 df 80 13 c9 20 90 13 a2 ->3a5218 00 00 df 2e 52 3a f0 0a e8 e0 0f 00 d0 f4 28 38 ->3a5228 fa 6b 28 18 fa 6b 2a 2b 2c 2f 3a 3b 3c 3d 3e 3f ->3a5238 5c 5b 5d 7c 22 08 08 c2 20 48 a9 00 08 5b 68 28 ->3a5248 c2 30 20 9f 17 20 b3 04 20 1a 51 22 10 11 00 b0 ->3a5258 22 20 28 4f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 ->3a5268 a9 14 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 ->3a5278 dc d2 08 e2 20 a9 2c 20 a3 1c c2 20 20 9f 17 20 ->3a5288 b3 04 ad 38 03 85 08 ad 3a 03 85 0a e2 20 a2 00 ->3a5298 00 a9 20 95 7c e8 e0 0b 00 d0 f8 a2 00 00 a0 00 ->3a52a8 00 b7 21 f0 76 c9 2e f0 39 22 03 52 3a b0 1f 08 ->3a52b8 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f d1 08 ->3a52c8 00 c2 20 29 ff 00 20 f1 18 e2 20 dc d2 08 95 7c ->3a52d8 c8 e8 c0 08 00 d0 ca b7 21 f0 40 c9 2e f0 03 c8 ->3a52e8 80 f5 c8 a2 08 00 b7 21 f0 31 22 03 52 3a b0 22 ->3a52f8 20 28 4f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 ->3a5308 0a 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 20 dc ->3a5318 d2 08 95 7c c8 e8 c0 0c 00 d0 cb a2 00 00 a0 00 ->3a5328 00 b5 7c 97 08 e8 c8 c0 0b 00 d0 f5 22 14 11 00 ->3a5338 b0 22 20 28 4f 08 c2 20 48 a9 00 08 5b 68 28 e2 ->3a5348 20 a9 15 8f d1 08 00 c2 20 29 ff 00 20 f1 18 e2 ->3a5358 20 dc d2 08 20 28 4f 28 60 08 08 c2 20 48 a9 00 ->3a5368 08 5b 68 28 c2 30 20 9f 17 20 b3 04 a5 21 8f 64 ->3a5378 03 00 a5 23 8f 66 03 00 e2 20 a9 2c 20 a3 1c c2 ->3a5388 20 20 9f 17 20 b3 04 a5 21 8f 68 03 00 a5 23 8f ->3a5398 6a 03 00 22 30 11 00 b0 1f 08 c2 20 48 a9 00 08 ->3a53a8 5b 68 28 e2 20 a9 16 8f d1 08 00 c2 20 29 ff 00 ->3a53b8 20 f1 18 e2 20 dc d2 08 28 60 5c 7f 6d 3a 5c d0 ->3a53c8 6b 3a 5c 80 6d 3a 5c fc 5c 3a 5c 59 5d 3a 5c 8c ->3a53d8 5c 3a 5c 12 5c 3a 5c 8f 61 3a 5c 7d 58 3a 5c aa ->3a53e8 5b 3a 5c 65 5b 3a 5c ef 5a 3a 5c 8e 6c 3a 5c 8b ->3a53f8 59 3a 5c e1 57 3a 5c 09 6d 3a 5c b9 58 3a 5c 82 ->3a5408 6d 3a 5c 7b 6d 3a 5c a8 5a 3a 5c 83 6d 3a 18 fb ->3a5418 c2 20 a9 ff fe 1b 58 5c 23 54 3a c2 30 22 e1 57 ->3a5428 3a 20 08 00 20 0c 00 8b e2 20 a9 00 48 ab a2 00 ->3a5438 4f 20 c1 03 ab 22 c6 53 3a 22 ce 53 3a 80 e2 08 ->3a5448 8b e2 20 a9 3a 48 ab c2 10 a2 5a 54 20 c0 02 ab ->3a5458 28 6b 41 20 3c 73 74 61 72 74 3e 20 3c 61 73 73 ->3a5468 65 6d 62 6c 79 3e 0d 20 20 41 73 73 65 6d 62 6c ->3a5478 65 20 61 20 70 72 6f 67 72 61 6d 0d 0d 43 20 3c ->3a5488 73 74 61 72 74 31 3e 20 3c 73 74 61 72 74 32 3e ->3a5498 20 5b 6c 65 6e 20 28 31 20 69 66 20 62 6c 61 6e ->3a54a8 6b 29 5d 0d 20 20 43 6f 6d 70 61 72 65 20 74 6f ->3a54b8 20 73 65 63 74 69 6f 6e 73 20 6f 66 20 6d 65 6d ->3a54c8 6f 72 79 0d 0d 44 20 3c 73 74 61 72 74 3e 20 5b ->3a54d8 65 6e 64 5d 0d 20 20 44 69 73 61 73 73 65 6d 62 ->3a54e8 6c 65 20 61 20 70 72 6f 67 72 61 6d 0d 0d 46 20 ->3a54f8 3c 73 74 61 72 74 3e 20 3c 65 6e 64 3e 20 3c 62 ->3a5508 79 74 65 3e 0d 20 20 46 69 6c 6c 20 61 20 62 6c ->3a5518 6f 63 6b 20 6f 66 20 6d 65 6d 6f 72 79 20 77 69 ->3a5528 74 68 20 61 20 62 79 74 65 0d 0d 47 20 5b 61 64 ->3a5538 64 72 65 73 73 5d 0d 20 20 53 74 61 72 74 20 65 ->3a5548 78 65 63 75 74 69 6f 6e 20 61 74 20 61 20 6c 6f ->3a5558 63 61 74 69 6f 6e 0d 0d 4a 20 5b 61 64 64 72 65 ->3a5568 73 73 5d 20 2d 20 4a 75 6d 70 20 74 6f 20 61 20 ->3a5578 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 6d 65 6d 6f ->3a5588 72 79 0d 20 20 4a 75 6d 70 20 74 6f 20 61 20 6c ->3a5598 6f 63 61 74 69 6f 6e 20 69 6e 20 6d 65 6d 6f 72 ->3a55a8 79 0d 0d 48 20 3c 73 74 61 72 74 3e 20 3c 65 6e ->3a55b8 64 3e 20 3c 62 79 74 65 3e 20 5b 62 79 74 65 5d ->3a55c8 2e 2e 0d 20 20 48 75 6e 74 20 66 6f 72 20 76 61 ->3a55d8 6c 75 65 73 20 69 6e 20 6d 65 6d 6f 72 79 0d 0d ->3a55e8 4c 20 20 20 20 20 4c 4f 41 44 20 20 20 20 20 20 ->3a55f8 20 20 20 22 46 69 6c 65 22 20 5b 64 65 73 74 69 ->3a5608 6e 61 74 69 6f 6e 5d 0d 4d 20 3c 73 74 61 72 74 ->3a5618 3e 20 5b 65 6e 64 5d 0d 20 20 44 75 6d 70 20 74 ->3a5628 68 65 20 76 61 6c 75 65 20 69 6e 20 6d 65 6d 6f ->3a5638 72 79 0d 0d 52 20 2d 20 44 69 73 70 6c 61 79 20 ->3a5648 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 ->3a5658 65 20 72 65 67 69 73 74 65 72 73 0d 0d 3b 20 3c ->3a5668 50 43 3e 20 3c 41 3e 20 3c 58 3e 20 3c 59 3e 20 ->3a5678 3c 53 50 3e 20 3c 44 42 52 3e 20 3c 44 50 3e 20 ->3a5688 3c 4e 56 4d 58 44 49 5a 43 3e 0d 20 20 43 68 61 ->3a5698 6e 67 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 ->3a56a8 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72 ->3a56b8 73 0d 0d 53 20 20 20 20 20 53 41 56 45 20 20 20 ->3a56c8 20 20 20 20 20 20 22 46 69 6c 65 22 20 3c 73 74 ->3a56d8 61 72 74 3e 20 3c 65 6e 64 3e 0d 54 20 3c 73 74 ->3a56e8 61 72 74 3e 20 3c 65 6e 64 3e 20 3c 64 65 73 74 ->3a56f8 69 6e 61 74 69 6f 6e 3e 0d 20 20 54 72 61 6e 73 ->3a5708 66 65 72 20 28 63 6f 70 79 29 20 64 61 74 61 20 ->3a5718 77 69 74 68 69 6e 20 6d 65 6d 6f 72 79 0d 0d 57 ->3a5728 20 3c 62 79 74 65 3e 0d 20 20 53 65 74 20 74 68 ->3a5738 65 20 72 65 67 69 73 74 65 72 20 77 69 64 74 68 ->3a5748 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 64 ->3a5758 69 73 61 73 73 65 6d 62 6c 65 72 0d 0d 58 20 2d ->3a5768 20 52 65 74 75 72 6e 20 74 6f 20 42 41 53 49 43 ->3a5778 0d 0d 3e 20 3c 73 74 61 72 74 3e 20 3c 62 79 74 ->3a5788 65 3e 20 5b 62 79 74 65 5d 2e 2e 2e 0d 20 20 45 ->3a5798 64 69 74 20 64 61 74 61 20 69 6e 20 6d 65 6d 6f ->3a57a8 72 79 0d 0d 3f 20 2d 20 44 69 73 70 6c 61 79 20 ->3a57b8 61 20 73 68 6f 72 74 20 68 65 6c 70 20 73 63 72 ->3a57c8 65 65 6e 0d 0d 00 08 08 c2 20 48 a9 46 08 5b 68 ->3a57d8 28 e2 20 a5 0d 85 4e 28 6b 08 e2 20 48 a9 3a 48 ->3a57e8 ab 68 28 a2 c0 6d 20 c0 02 e2 20 a9 3b 20 18 00 ->3a57f8 a9 20 20 18 00 c2 30 08 e2 20 48 a9 00 48 ab 68 ->3a5808 28 a0 03 00 a2 42 02 20 43 02 c2 20 a9 20 00 20 ->3a5818 18 00 af 44 02 00 20 d0 02 a9 20 00 20 18 00 af ->3a5828 46 02 00 20 d0 02 a9 20 00 20 18 00 af 48 02 00 ->3a5838 20 d0 02 a9 20 00 20 18 00 af 4a 02 00 20 d0 02 ->3a5848 a9 20 00 20 18 00 af 4e 02 00 20 ea 02 a9 20 00 ->3a5858 20 18 00 20 18 00 af 4c 02 00 20 d0 02 a9 20 00 ->3a5868 20 18 00 08 e2 20 ad 4f 02 22 d9 6a 3a 28 20 33 ->3a5878 02 20 33 02 6b 08 0b 08 c2 20 48 a9 46 08 5b 68 ->3a5888 28 e2 20 a5 15 87 0d e2 20 a5 0f c5 13 d0 0e c2 ->3a5898 20 a5 0d c5 11 d0 06 20 33 02 2b 28 6b c2 20 18 ->3a58a8 a5 0d 69 01 00 85 0d e2 20 a5 0e 69 00 85 0e 80 ->3a58b8 d0 08 0b 08 c2 20 48 a9 46 08 5b 68 28 e2 20 a5 ->3a58c8 0f c5 17 90 45 c2 20 a5 0d c5 15 90 3d e2 20 a7 ->3a58d8 0d 87 15 a5 0f c5 13 d0 0b c2 20 a5 0d c5 11 d0 ->3a58e8 03 4c 70 59 c2 20 18 a5 0d 69 01 00 85 0d e2 20 ->3a58f8 a5 0e 69 00 85 0e c2 20 18 a5 15 69 01 00 85 15 ->3a5908 e2 20 a5 16 69 00 85 16 80 c3 c2 20 38 a5 11 e5 ->3a5918 0d 85 19 e2 20 a5 13 e5 0f 85 1b c2 20 18 a5 19 ->3a5928 65 15 85 15 e2 20 a5 1b 65 17 85 17 e2 20 a7 11 ->3a5938 87 15 a5 13 c5 0f d0 0a c2 20 a5 11 c5 0d d0 02 ->3a5948 80 26 c2 20 38 a5 11 e9 01 00 85 11 e2 20 a5 12 ->3a5958 e9 00 85 12 c2 20 38 a5 15 e9 01 00 85 15 e2 20 ->3a5968 a5 16 e9 00 85 16 80 c4 20 33 02 2b 28 6b 08 e2 ->3a5978 20 c9 21 90 0b c9 7f 90 04 c9 a0 90 03 28 38 6b ->3a5988 28 18 6b 08 8b 0b 08 c2 20 48 a9 46 08 5b 68 28 ->3a5998 e2 20 a9 00 8f b4 08 00 a5 31 c9 02 b0 16 c9 01 ->3a59a8 90 20 c2 20 18 a5 0d 69 00 01 85 11 e2 20 a5 0f ->3a59b8 69 00 85 13 c2 20 a5 0d 85 32 e2 20 a5 0f 85 34 ->3a59c8 80 12 c2 20 18 a5 32 69 00 01 85 11 e2 20 a5 34 ->3a59d8 69 00 85 13 e2 20 a0 00 00 c2 20 a5 32 85 19 e2 ->3a59e8 20 a5 34 85 1b e2 20 a7 19 22 76 59 3a b0 02 a9 ->3a59f8 3f 99 7c 08 c2 20 18 a5 19 69 01 00 85 19 e2 20 ->3a5a08 a5 1b 69 00 85 1b c8 c0 08 00 90 db a9 00 99 7c ->3a5a18 08 a9 3e 20 18 00 a9 20 20 18 00 e2 20 a5 34 20 ->3a5a28 ea 02 a9 3a 20 18 00 c2 20 a5 32 20 d0 02 c2 20 ->3a5a38 a9 08 00 85 47 e2 20 a9 20 20 18 00 a7 32 20 ea ->3a5a48 02 22 b8 6a 3a e2 20 c6 47 d0 ea a9 20 20 18 00 ->3a5a58 a9 20 20 18 00 08 e2 20 48 a9 00 48 ab 68 28 a2 ->3a5a68 7c 08 20 c0 02 20 33 02 20 4a 02 a5 34 c5 13 90 ->3a5a78 0f c2 20 a5 32 c5 11 90 07 20 33 02 2b ab 28 6b ->3a5a88 4c dc 59 08 8d 90 08 e2 20 bd 00 00 99 00 00 ad ->3a5a98 90 08 f0 0a c8 e8 e8 e8 e8 ce 90 08 80 eb 28 6b ->3a5aa8 08 0b 8b 08 c2 20 48 a9 46 08 5b 68 28 08 e2 20 ->3a5ab8 48 a9 00 48 ab 68 28 c2 30 a5 0d 85 32 a5 0f 85 ->3a5ac8 34 e2 20 a5 31 3a 85 47 a2 57 08 a0 7c 08 22 8b ->3a5ad8 5a 3a a0 00 00 b9 7c 08 87 32 22 b8 6a 3a c8 c4 ->3a5ae8 47 d0 f2 ab 2b 28 6b 08 0b 8b 08 c2 20 48 a9 46 ->3a5af8 08 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 e2 20 ->3a5b08 c2 10 a5 31 3a 3a 85 47 a2 5b 08 a0 7c 08 22 8b ->3a5b18 5a 3a c2 20 a5 0d 85 32 a5 0f 85 34 c2 20 a5 34 ->3a5b28 c5 13 d0 06 a5 32 c5 11 f0 2c e2 20 a0 00 00 b7 ->3a5b38 32 d9 7c 08 d0 1a c8 c4 47 d0 f4 c2 20 a5 32 85 ->3a5b48 4a a5 34 85 4c 22 62 65 3a e2 20 a9 20 20 18 00 ->3a5b58 22 b8 6a 3a 80 c6 20 33 02 ab 2b 28 6b 08 c2 20 ->3a5b68 48 a9 46 08 5b 68 28 e2 20 a5 31 f0 0e c2 30 a5 ->3a5b78 0d 8f 40 02 00 a5 0f 8f 42 02 00 af 46 02 00 aa ->3a5b88 af 48 02 00 a8 af 4a 02 00 1b af 4c 02 00 5b e2 ->3a5b98 20 a9 3a 48 a9 5b 48 a9 a5 48 4c dc 5b ea 5c 04 ->3a5ba8 00 3a 08 c2 20 48 a9 46 08 5b 68 28 e2 20 a5 31 ->3a5bb8 f0 c9 c2 30 a5 0d 8f 40 02 00 a5 0f 8f 42 02 00 ->3a5bc8 af 46 02 00 aa af 48 02 00 a8 af 4a 02 00 1b af ->3a5bd8 4c 02 00 5b e2 20 af 4e 02 00 48 ab a9 5c 8f a0 ->3a5be8 08 00 af 42 02 00 8f a3 08 00 af 41 02 00 8f a2 ->3a5bf8 08 00 af 40 02 00 8f a1 08 00 af 4f 02 00 48 c2 ->3a5c08 20 af 44 02 00 28 5c a0 08 00 08 0b 8b 08 e2 20 ->3a5c18 48 a9 3a 48 ab 68 28 08 c2 20 48 a9 46 08 5b 68 ->3a5c28 28 c2 10 e2 20 a5 31 c9 02 f0 0c c9 03 d0 11 c2 ->3a5c38 20 a5 15 85 47 80 11 c2 20 a9 01 00 85 47 80 08 ->3a5c48 a2 84 6d 20 c0 02 80 35 a5 0d 85 4a a5 0f 85 4c ->3a5c58 a0 00 00 e2 20 a7 4a d7 11 f0 09 22 62 65 3a a9 ->3a5c68 20 20 18 00 c2 20 18 a5 4a 69 01 00 85 4a a5 4c ->3a5c78 69 00 00 85 4c c8 c4 47 d0 d9 20 33 02 20 33 02 ->3a5c88 ab 2b 28 6b 08 0b 8b 08 e2 20 48 a9 00 48 ab 68 ->3a5c98 28 08 c2 20 48 a9 46 08 5b 68 28 e2 20 a5 31 f0 ->3a5ca8 4f a6 0d 8e 40 02 a6 0f 8e 42 02 c9 01 f0 41 a6 ->3a5cb8 11 8e 44 02 c9 02 f0 38 a6 15 8e 46 02 c9 03 f0 ->3a5cc8 2f a6 19 8e 48 02 c9 04 f0 26 a6 1d 8e 4a 02 c9 ->3a5cd8 05 f0 1d e2 10 a6 21 8e 4e 02 c9 06 f0 12 c2 10 ->3a5ce8 a6 25 8e 4c 02 c9 07 f0 07 e2 10 a6 29 8e 4f 02 ->3a5cf8 ab 2b 28 6b 08 0b 8b 08 c2 20 48 a9 46 08 5b 68 ->3a5d08 28 e2 20 c2 10 a2 00 00 bf f1 6d 3a f0 18 c7 08 ->3a5d18 f0 03 e8 80 f3 c2 20 8a 0a aa bf 32 5d 3a 8f 2d ->3a5d28 08 00 22 56 5d 3a ab 2b 28 6b d2 53 da 53 de 53 ->3a5d38 e2 53 e6 53 ea 53 ee 53 f2 53 f6 53 fa 53 d6 53 ->3a5d48 fe 53 02 54 06 54 ce 57 0a 54 0e 54 47 54 6c 2d ->3a5d58 08 08 8b 0b 08 c2 20 48 a9 46 08 5b 68 28 e2 20 ->3a5d68 a5 31 c9 02 b0 03 4c ff 5e c2 20 a5 0d 85 32 a5 ->3a5d78 0f 85 34 c2 20 22 01 61 3a c9 ff ff f0 10 85 54 ->3a5d88 e2 20 a5 31 c9 03 f0 36 a9 13 85 4f 80 4c 20 33 ->3a5d98 02 08 e2 20 48 a9 3a 48 ab 68 28 c2 10 a2 36 5f ->3a5da8 20 c0 02 4c ff 5e 20 33 02 08 e2 20 48 a9 3a 48 ->3a5db8 ab 68 28 c2 10 a2 45 5f 20 c0 02 4c ff 5e e2 20 ->3a5dc8 22 37 61 3a c9 ff f0 de 85 4f c9 03 f0 62 c9 0b ->3a5dd8 f0 5e c9 13 f0 04 c9 08 f0 00 22 2f 60 3a b0 03 ->3a5de8 4c c8 5e 87 32 22 b8 6a 3a 08 e2 20 48 a9 00 48 ->3a5df8 ab 68 28 c2 20 a5 32 85 56 a5 34 85 58 e2 20 a5 ->3a5e08 4f c9 12 f0 6c c9 16 f0 68 c9 14 f0 7c 29 3f c9 ->3a5e18 02 d0 03 4c f6 5e c2 20 29 ff 00 aa e2 20 bf fe ->3a5e28 69 3a c9 03 f0 57 c9 02 f0 5f c9 01 f0 67 80 71 ->3a5e38 c2 20 a5 54 c9 76 66 f0 26 c9 da 66 f0 2a c9 5a ->3a5e48 66 f0 1c c9 5e 66 f0 17 c9 66 66 f0 12 c9 4e 66 ->3a5e58 f0 0d c9 62 66 f0 08 c9 4a 66 f0 03 4c e2 5d e2 ->3a5e68 20 a9 12 85 4f 4c e2 5d e2 20 a9 16 85 4f 4c e2 ->3a5e78 5d 22 72 5f 3a 90 60 c9 02 f0 0e 80 18 a0 02 00 ->3a5e88 b9 96 08 97 56 22 b8 6a 3a a0 01 00 b9 96 08 97 ->3a5e98 56 22 b8 6a 3a a0 00 00 b9 96 08 97 56 22 b8 6a ->3a5ea8 3a e2 20 a9 41 20 18 00 a9 20 20 18 00 a6 32 86 ->3a5eb8 4a a6 34 86 4c 22 62 65 3a a9 20 20 18 00 80 37 ->3a5ec8 20 33 02 08 e2 20 48 a9 3a 48 ab 68 28 c2 10 a2 ->3a5ed8 03 5f 20 c0 02 80 20 20 33 02 08 e2 20 48 a9 3a ->3a5ee8 48 ab 68 28 c2 10 a2 53 5f 20 c0 02 80 09 a5 4f ->3a5ef8 29 c0 d0 95 4c 9d 5e 2b ab 28 6b 41 64 64 72 65 ->3a5f08 73 73 69 6e 67 20 6d 6f 64 65 20 6e 6f 74 20 64 ->3a5f18 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 ->3a5f28 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0d 00 42 61 ->3a5f38 64 20 6d 6e 65 6d 6f 6e 69 63 2e 0d 00 42 61 64 ->3a5f48 20 6f 70 65 72 61 6e 64 2e 0d 00 52 65 6c 61 74 ->3a5f58 69 76 65 20 6f 66 66 73 65 74 20 69 73 20 74 6f ->3a5f68 6f 20 6c 61 72 67 65 2e 0d 00 08 0b 08 c2 20 48 ->3a5f78 a9 46 08 5b 68 28 e2 20 a5 4f c9 12 f0 0a c2 20 ->3a5f88 18 a5 32 69 02 00 80 08 c2 20 18 a5 32 69 01 00 ->3a5f98 85 4a a5 34 69 00 00 85 4c 38 a5 50 e5 4a 85 50 ->3a5fa8 a5 52 e5 4c 85 52 e2 20 a5 4f c9 16 f0 1e a5 50 ->3a5fb8 30 0c a5 51 d0 2a a5 52 d0 26 a9 01 80 26 a5 51 ->3a5fc8 c9 ff d0 1c a5 52 c9 ff d0 16 80 18 a5 51 30 06 ->3a5fd8 a5 52 d0 0c 80 0e a5 52 c9 ff d0 04 a9 02 80 04 ->3a5fe8 2b 28 18 6b 2b 28 38 6b 08 0b c2 10 da 08 c2 20 ->3a5ff8 48 a9 46 08 5b 68 28 e2 20 a2 00 00 df 00 d0 3a ->3a6008 f0 08 e8 e0 10 00 f0 1b 80 f2 c2 20 06 50 26 52 ->3a6018 06 50 26 52 06 50 26 52 06 50 26 52 e2 20 8a 05 ->3a6028 50 85 50 fa 2b 28 6b 0b 8b 08 c2 20 48 a9 46 08 ->3a6038 5b 68 28 08 e2 20 48 a9 3a 48 ab 68 28 e2 20 a5 ->3a6048 4f 29 3f 85 4a c2 30 a2 00 00 a0 00 00 bd fc 66 ->3a6058 f0 1b c5 54 d0 0d e2 20 b9 fe 68 29 3f c5 4a f0 ->3a6068 07 c2 20 e8 e8 c8 80 e5 98 38 ab 2b 6b 18 ab 2b ->3a6078 6b 08 0b 08 c2 20 48 a9 46 08 5b 68 28 e2 20 c2 ->3a6088 10 a0 00 00 64 50 64 52 b7 03 f0 11 c9 64 f0 19 ->3a6098 48 b7 36 85 4a 68 c5 4a d0 0b c8 80 eb b7 36 d0 ->3a60a8 04 2b 28 38 6b 2b 28 18 6b e2 20 b7 36 c9 3a b0 ->3a60b8 04 c9 30 b0 14 c9 47 b0 04 c9 41 b0 0c c9 67 b0 ->3a60c8 e4 c9 61 b0 02 80 de 29 df 22 f0 5f 3a 80 cb 0b ->3a60d8 08 c2 20 48 a9 46 08 5b 68 28 a0 00 00 e2 20 b7 ->3a60e8 03 f0 03 c8 80 f9 c2 20 c8 5a 68 18 65 03 85 03 ->3a60f8 a5 05 69 00 00 85 05 2b 6b 0b 08 c2 20 48 a9 46 ->3a6108 08 5b 68 28 c2 20 a5 11 85 36 a5 13 85 38 a9 8a ->3a6118 65 85 03 a9 3a 00 85 05 22 79 60 3a b0 0d 22 d7 ->3a6128 60 3a a7 03 d0 f2 a9 ff ff 80 02 a5 03 2b 6b 08 ->3a6138 0b 08 c2 20 48 a9 46 08 5b 68 28 c2 30 a5 15 85 ->3a6148 36 a5 17 85 38 a9 16 6a 85 03 a9 3a 00 85 05 22 ->3a6158 79 60 3a b0 22 22 d7 60 3a c2 20 18 a5 03 69 01 ->3a6168 00 85 03 a5 05 69 00 00 85 05 e2 20 a7 03 d0 df ->3a6178 c2 20 a9 ff ff 80 0d 22 d7 60 3a e2 20 a7 03 c2 ->3a6188 20 29 ff 00 2b 28 6b 08 8b 0b 08 c2 20 48 a9 46 ->3a6198 08 5b 68 28 e2 20 a9 00 8f b4 08 00 a5 31 c9 02 ->3a61a8 b0 16 c9 01 90 20 c2 20 18 a5 0d 69 00 01 85 11 ->3a61b8 e2 20 a5 0f 69 00 85 13 c2 20 a5 0d 85 32 e2 20 ->3a61c8 a5 0f 85 34 80 12 c2 20 18 a5 32 69 00 01 85 11 ->3a61d8 e2 20 a5 34 69 00 85 13 22 fb 61 3a e2 20 a5 34 ->3a61e8 c5 13 90 f4 c2 20 a5 32 c5 11 90 ec 20 33 02 2b ->3a61f8 ab 28 6b 08 0b e2 20 a9 41 20 18 00 a9 20 20 18 ->3a6208 00 08 c2 20 48 a9 78 08 5b 68 28 c2 20 a5 00 85 ->3a6218 18 e2 20 a5 02 85 1a 22 62 65 3a a9 20 20 18 00 ->3a6228 c2 20 18 a5 00 69 01 00 85 18 e2 20 a5 02 69 00 ->3a6238 85 1a e2 20 c2 10 a7 00 c9 c2 d0 0b 48 a7 18 49 ->3a6248 ff 2f 94 08 00 80 0b c9 e2 d0 0c 48 a7 18 0f 94 ->3a6258 08 00 8f 94 08 00 68 c2 20 29 ff 00 0a aa bf fc ->3a6268 66 3a aa 22 dc 64 3a e2 20 a7 00 aa bf fe 68 3a ->3a6278 22 b8 6a 3a 22 89 62 3a 20 33 02 20 4a 02 2b 28 ->3a6288 6b 08 e2 20 48 29 3f 0a c2 10 aa 68 7c 97 62 c7 ->3a6298 62 e2 62 e9 62 0e 63 15 63 30 63 52 63 63 63 a0 ->3a62a8 63 a8 63 b9 63 ca 63 d1 63 f6 63 23 64 8f 63 74 ->3a62b8 63 41 63 16 64 20 64 34 64 63 64 11 64 74 64 a9 ->3a62c8 28 20 18 00 22 8b 64 3a a9 2c 20 18 00 a9 58 20 ->3a62d8 18 00 a9 29 20 18 00 4c 85 64 22 8b 64 3a 4c 85 ->3a62e8 64 e2 20 48 a9 23 20 18 00 68 29 c0 c9 00 f0 0f ->3a62f8 4a 4a 2f 94 08 00 d0 07 22 95 64 3a 4c 85 64 22 ->3a6308 8b 64 3a 4c 85 64 22 95 64 3a 4c 85 64 a9 28 20 ->3a6318 18 00 22 8b 64 3a a9 29 20 18 00 a9 2c 20 18 00 ->3a6328 a9 59 20 18 00 4c 85 64 22 8b 64 3a a9 2c 20 18 ->3a6338 00 a9 58 20 18 00 4c 85 64 22 8b 64 3a a9 2c 20 ->3a6348 18 00 a9 59 20 18 00 4c 85 64 22 95 64 3a a9 2c ->3a6358 20 18 00 a9 59 20 18 00 4c 85 64 22 95 64 3a a9 ->3a6368 2c 20 18 00 a9 58 20 18 00 4c 85 64 a9 28 20 18 ->3a6378 00 22 95 64 3a a9 2c 20 18 00 a9 58 20 18 00 a9 ->3a6388 29 20 18 00 4c 85 64 a9 28 20 18 00 22 8b 64 3a ->3a6398 a9 29 20 18 00 4c 85 64 a9 41 20 18 00 4c 89 64 ->3a63a8 22 8b 64 3a a9 2c 20 18 00 a9 53 20 18 00 4c 85 ->3a63b8 64 a9 5b 20 18 00 22 8b 64 3a a9 5d 20 18 00 4c ->3a63c8 85 64 22 a3 64 3a 4c 89 64 a9 28 20 18 00 22 8b ->3a63d8 64 3a a9 2c 20 18 00 a9 53 20 18 00 a9 29 20 18 ->3a63e8 00 a9 2c 20 18 00 a9 59 20 18 00 4c 85 64 a9 5b ->3a63f8 20 18 00 22 8b 64 3a a9 5d 20 18 00 a9 2c 20 18 ->3a6408 00 a9 59 20 18 00 4c 85 64 a0 02 00 80 03 a0 01 ->3a6418 00 22 09 65 3a 4c 89 64 4c 89 64 22 a3 64 3a a9 ->3a6428 2c 20 18 00 a9 58 20 18 00 4c 89 64 a9 23 20 18 ->3a6438 00 8b a5 02 48 ab a6 00 e8 a0 01 00 22 43 02 3a ->3a6448 a9 2c 20 18 00 a9 23 20 18 00 a6 00 a0 01 00 22 ->3a6458 43 02 3a ab 22 b8 6a 3a 4c 85 64 a9 28 20 18 00 ->3a6468 22 95 64 3a a9 29 20 18 00 4c 85 64 a9 5b 20 18 ->3a6478 00 22 95 64 3a a9 5d 20 18 00 4c 85 64 22 b8 6a ->3a6488 3a 28 6b 08 e2 20 a7 00 20 ea 02 28 6b 08 c2 30 ->3a6498 a7 00 20 d0 02 22 b8 6a 3a 28 6b 08 8b 0b c2 30 ->3a64a8 5a 08 c2 20 48 a9 78 08 5b 68 28 08 e2 20 48 a9 ->3a64b8 00 48 ab 68 28 e2 20 a0 00 00 a7 00 99 90 08 22 ->3a64c8 b8 6a 3a c8 c0 03 00 d0 f1 22 62 65 3a c2 30 7a ->3a64d8 2b ab 28 6b 08 8b e2 20 c2 10 08 e2 20 48 a9 3a ->3a64e8 48 ab 68 28 bd 00 00 20 18 00 e8 bd 00 00 20 18 ->3a64f8 00 e8 bd 00 00 20 18 00 e8 a9 20 20 18 00 ab 28 ->3a6508 6b 08 0b 08 c2 20 48 a9 78 08 5b 68 28 e2 20 c0 ->3a6518 02 00 f0 14 a7 00 85 18 30 06 64 19 64 1a 80 1e ->3a6528 a9 ff 85 19 85 1a 80 16 a7 00 85 18 22 b8 6a 3a ->3a6538 a7 00 85 19 30 04 64 1a 80 04 a9 ff 85 1a c2 20 ->3a6548 38 a5 00 65 18 85 18 e2 20 a5 02 65 1a 85 1a 22 ->3a6558 62 65 3a 22 b8 6a 3a 2b 28 6b 08 0b c2 20 48 08 ->3a6568 c2 20 48 a9 46 08 5b 68 28 e2 20 a5 4c 20 ea 02 ->3a6578 e2 20 a9 3a 20 18 00 c2 20 a5 4a 20 d0 02 68 2b ->3a6588 28 6b 4f 52 41 00 41 4e 44 00 45 4f 52 00 41 44 ->3a6598 43 00 53 54 41 00 4c 44 41 00 43 4d 50 00 53 42 ->3a65a8 43 00 41 53 4c 00 52 4f 4c 00 4c 53 52 00 52 4f ->3a65b8 52 00 53 54 58 00 4c 44 58 00 44 45 43 00 49 4e ->3a65c8 43 00 42 49 54 00 4a 4d 50 00 53 54 59 00 4c 44 ->3a65d8 59 00 43 50 59 00 43 50 58 00 42 52 4b 00 4a 53 ->3a65e8 52 00 52 54 49 00 52 54 53 00 50 48 50 00 50 4c ->3a65f8 50 00 50 48 41 00 50 4c 41 00 44 45 59 00 54 41 ->3a6608 59 00 49 4e 59 00 49 4e 58 00 43 4c 43 00 53 45 ->3a6618 43 00 43 4c 49 00 53 45 49 00 54 59 41 00 43 4c ->3a6628 56 00 43 4c 44 00 53 45 44 00 54 58 41 00 54 58 ->3a6638 53 00 54 41 58 00 54 53 58 00 44 45 58 00 4e 4f ->3a6648 50 00 42 50 4c 00 42 4d 49 00 42 56 43 00 42 56 ->3a6658 53 00 42 43 43 00 42 43 53 00 42 4e 45 00 42 45 ->3a6668 51 00 54 53 42 00 54 52 42 00 53 54 5a 00 42 52 ->3a6678 41 00 50 48 59 00 50 4c 59 00 50 48 58 00 50 4c ->3a6688 58 00 50 48 44 00 50 4c 44 00 50 48 4b 00 52 54 ->3a6698 4c 00 50 48 42 00 50 4c 42 00 57 41 49 00 58 42 ->3a66a8 41 00 54 43 53 00 54 53 43 00 54 43 44 00 54 44 ->3a66b8 43 00 54 58 59 00 54 59 58 00 53 54 50 00 58 43 ->3a66c8 45 00 43 4f 50 00 4a 53 4c 00 57 44 4d 00 50 45 ->3a66d8 52 00 42 52 4c 00 52 45 50 00 53 45 50 00 4d 56 ->3a66e8 50 00 4d 56 4e 00 50 45 49 00 50 45 41 00 4a 4d ->3a66f8 4c 00 00 00 e2 65 8a 65 ca 66 8a 65 6a 66 8a 65 ->3a6708 aa 65 8a 65 f2 65 8a 65 aa 65 8a 66 6a 66 8a 65 ->3a6718 aa 65 8a 65 4a 66 8a 65 8a 65 8a 65 6e 66 8a 65 ->3a6728 aa 65 8a 65 12 66 8a 65 c6 65 aa 66 6e 66 8a 65 ->3a6738 aa 65 8a 65 e6 65 8e 65 ce 66 8e 65 ca 65 8e 65 ->3a6748 ae 65 8e 65 f6 65 8e 65 ae 65 8e 66 ca 65 8e 65 ->3a6758 ae 65 8e 65 4e 66 8e 65 8e 65 8e 65 ca 65 8e 65 ->3a6768 ae 65 8e 65 16 66 8e 65 c2 65 ae 66 ca 65 8e 65 ->3a6778 ae 65 8e 65 ea 65 92 65 d2 66 92 65 e6 66 92 65 ->3a6788 b2 65 92 65 fa 65 92 65 b2 65 92 66 ce 65 92 65 ->3a6798 b2 65 92 65 52 66 92 65 92 65 92 65 ea 66 92 65 ->3a67a8 b2 65 92 65 1a 66 92 65 7a 66 b2 66 f6 66 92 65 ->3a67b8 b2 65 92 65 ee 65 96 65 d6 66 96 65 72 66 96 65 ->3a67c8 b6 65 96 65 fe 65 96 65 b6 65 96 66 ce 65 96 65 ->3a67d8 b6 65 96 65 56 66 96 65 96 65 96 65 72 66 96 65 ->3a67e8 b6 65 96 65 1e 66 96 65 7e 66 b6 66 ce 65 96 65 ->3a67f8 b6 65 96 65 76 66 9a 65 da 66 9a 65 d2 65 9a 65 ->3a6808 ba 65 9a 65 02 66 ca 65 32 66 9a 66 d2 65 9a 65 ->3a6818 ba 65 9a 65 5a 66 9a 65 9a 65 9a 65 d2 65 9a 65 ->3a6828 ba 65 9a 65 22 66 9a 65 36 66 ba 66 72 66 9a 65 ->3a6838 72 66 9a 65 d6 65 9e 65 be 65 9e 65 d6 65 9e 65 ->3a6848 be 65 9e 65 06 66 9e 65 3a 66 9e 66 d6 65 9e 65 ->3a6858 be 65 9e 65 5e 66 9e 65 9e 65 9e 65 d6 65 9e 65 ->3a6868 be 65 9e 65 26 66 9e 65 3e 66 be 66 d6 65 9e 65 ->3a6878 be 65 9e 65 da 65 a2 65 de 66 a2 65 da 65 a2 65 ->3a6888 c2 65 a2 65 0a 66 a2 65 42 66 a2 66 da 65 a2 65 ->3a6898 c2 65 a2 65 62 66 a2 65 a2 65 a2 65 ee 66 a2 65 ->3a68a8 c2 65 a2 65 2a 66 a2 65 82 66 c2 66 f6 66 a2 65 ->3a68b8 c2 65 a2 65 de 65 a6 65 e2 66 a6 65 de 65 a6 65 ->3a68c8 c6 65 a6 65 0e 66 a6 65 46 66 a6 66 de 65 a6 65 ->3a68d8 c6 65 a6 65 66 66 a6 65 a6 65 a6 65 f2 66 a6 65 ->3a68e8 c6 65 a6 65 2e 66 a6 65 86 66 c6 66 e6 65 a6 65 ->3a68f8 c6 65 a6 65 00 00 13 00 02 09 01 01 01 0a 13 82 ->3a6908 08 13 03 03 03 0b 12 04 0f 0c 01 05 05 0d 13 06 ->3a6918 08 13 03 07 07 0e 03 00 0b 09 01 01 01 0a 13 82 ->3a6928 08 13 03 03 03 0b 12 04 0f 0c 05 05 05 0d 13 06 ->3a6938 08 13 07 07 07 0e 13 00 13 09 14 01 01 0a 13 82 ->3a6948 08 13 03 03 03 0b 12 04 0f 0c 14 05 05 0d 13 06 ->3a6958 13 13 0b 07 07 0b 13 00 16 09 01 01 01 0a 13 82 ->3a6968 08 13 15 03 03 0b 12 04 0f 0c 05 05 05 0d 13 06 ->3a6978 13 13 10 07 07 0e 12 00 16 09 01 01 01 0a 13 82 ->3a6988 13 13 03 03 03 0b 12 04 0f 0c 05 05 11 0d 13 06 ->3a6998 13 13 03 07 07 0e 82 00 42 09 01 01 01 0a 13 82 ->3a69a8 13 13 03 03 03 0b 12 04 0f 0c 05 05 11 0d 13 06 ->3a69b8 13 13 07 07 06 0e 42 00 02 09 01 01 01 0a 13 82 ->3a69c8 13 13 03 03 03 0b 12 04 0f 0c 01 05 05 0d 13 06 ->3a69d8 13 13 17 07 07 0e 42 00 02 09 01 01 01 0f 13 82 ->3a69e8 13 13 03 03 03 0b 12 04 0f 0c 03 05 05 0d 13 06 ->3a69f8 13 13 10 07 07 0e 01 01 01 02 01 01 02 02 00 01 ->3a6a08 01 03 01 01 03 01 02 01 01 00 02 02 02 02 41 00 ->3a6a18 08 64 64 3a 64 64 64 64 2c 58 00 0e 64 64 3a 64 ->3a6a28 64 64 64 00 0b 64 64 64 64 2c 58 00 07 64 64 64 ->3a6a38 64 2c 59 00 06 64 64 64 64 00 03 64 64 2c 58 00 ->3a6a48 05 64 64 2c 59 00 11 64 64 2c 53 00 09 64 64 00 ->3a6a58 01 23 64 64 64 64 00 c2 23 64 64 2c 23 64 64 00 ->3a6a68 14 23 64 64 00 02 28 64 64 2c 53 29 2c 59 00 0c ->3a6a78 28 64 64 64 64 2c 58 29 00 10 28 64 64 64 64 29 ->3a6a88 00 10 28 64 64 2c 58 29 00 00 28 64 64 29 2c 59 ->3a6a98 00 04 28 64 64 29 00 0f 5b 64 64 64 64 5d 00 17 ->3a6aa8 5b 64 64 5d 2c 59 00 0d 5b 64 64 5d 00 0a 00 00 ->3a6ab8 08 c2 20 48 18 af 78 08 00 69 01 00 8f 78 08 00 ->3a6ac8 e2 20 af 7a 08 00 69 00 8f 7a 08 00 c2 20 68 28 ->3a6ad8 6b 08 c2 10 e2 20 da a2 08 00 0a b0 08 48 a9 30 ->3a6ae8 20 18 00 80 06 48 a9 31 20 18 00 68 ca d0 eb fa ->3a6af8 28 6b 08 c2 20 48 a9 46 08 5b 68 28 e2 20 a7 32 ->3a6b08 f0 0a c9 20 d0 06 22 b8 6a 3a 80 f2 6b 08 08 c2 ->3a6b18 20 48 a9 46 08 5b 68 28 22 b8 6a 3a 22 fa 6a 3a ->3a6b28 c2 30 a5 31 c2 20 29 ff 00 0a 0a aa a5 32 95 0d ->3a6b38 a5 34 95 0f e2 20 a7 32 f0 14 c9 22 f0 06 22 b8 ->3a6b48 6a 3a 80 f2 a9 00 87 32 22 b8 6a 3a e6 31 28 6b ->3a6b58 08 c2 20 48 a9 46 08 5b 68 28 e2 20 64 4a c2 20 ->3a6b68 64 50 64 52 e2 20 a7 32 c9 3a f0 0d 20 68 03 90 ->3a6b78 0e 22 f0 5f 3a a9 01 85 4a 22 b8 6a 3a 80 e5 a5 ->3a6b88 4a f0 16 a5 31 c2 20 29 ff 00 0a 0a aa a5 50 95 ->3a6b98 0d a5 52 95 0f e2 20 e6 31 6b e2 20 64 31 22 fa ->3a6ba8 6a 3a a7 32 f0 21 c9 22 d0 06 22 15 6b 3a 80 0a ->3a6bb8 22 58 6b 3a a5 31 c9 09 b0 0d a7 32 f0 09 c9 20 ->3a6bc8 f0 dc 20 68 03 b0 d7 6b 08 0b 08 c2 20 48 a9 46 ->3a6bd8 08 5b 68 28 c2 10 e2 20 a2 31 00 74 00 ca d0 fb ->3a6be8 a9 00 85 02 85 34 c2 20 a9 00 4f 85 00 85 32 e2 ->3a6bf8 20 22 fa 6a 3a c9 00 f0 38 c2 20 a5 32 85 08 e2 ->3a6c08 20 a5 34 85 0a a2 01 00 22 b8 6a 3a a7 32 d0 06 ->3a6c18 86 0b 64 31 80 1b c9 20 f0 03 e8 80 eb 86 0b a9 ->3a6c28 00 87 32 22 b8 6a 3a a7 08 c9 41 f0 07 22 a2 6b ->3a6c38 3a 2b 28 6b 22 fa 6a 3a a7 32 f0 f5 22 58 6b 3a ->3a6c48 22 fa 6a 3a a7 32 f0 e9 c2 20 a5 32 85 11 e2 20 ->3a6c58 a5 34 85 13 22 b8 6a 3a a7 32 f0 26 c9 20 d0 f4 ->3a6c68 a9 00 87 32 e6 31 22 b8 6a 3a 22 fa 6a 3a a7 32 ->3a6c78 f0 bf c2 20 a5 32 85 15 e2 20 a5 34 85 17 e6 31 ->3a6c88 80 af e6 31 80 ab 08 c2 10 e2 20 a5 31 d0 0f a2 ->3a6c98 84 6d a9 3a 48 ab 20 c0 02 20 33 02 80 61 c2 20 ->3a6ca8 a5 0d 8f 21 08 00 a5 0f 8f 23 08 00 20 77 4e e2 ->3a6cb8 20 a5 31 c9 01 d0 0f c2 20 a9 ff ff 8f 54 03 00 ->3a6cc8 8f 56 03 00 80 0e c2 20 a5 11 8f 54 03 00 a5 13 ->3a6cd8 8f 56 03 00 22 18 11 00 b0 25 e2 20 a2 aa 6d a9 ->3a6ce8 3a 48 ab 20 c0 02 af 2e 03 00 20 ea 02 a9 20 20 ->3a6cf8 18 00 af 20 03 00 20 ea 02 20 33 02 20 33 02 28 ->3a6d08 6b 8b 08 c2 10 e2 20 a5 31 c9 03 f0 0f a2 84 6d ->3a6d18 a9 3a 48 ab 20 c0 02 20 33 02 80 54 c2 20 a5 0d ->3a6d28 8f 21 08 00 a5 0f 8f 23 08 00 20 77 4e a5 11 8f ->3a6d38 50 03 00 a5 13 8f 52 03 00 a5 15 8f 58 03 00 a5 ->3a6d48 17 8f 5a 03 00 22 1c 11 00 b0 25 e2 20 a2 94 6d ->3a6d58 a9 3a 48 ab 20 c0 02 af 2e 03 00 20 ea 02 a9 20 ->3a6d68 20 18 00 af 20 03 00 20 ea 02 20 33 02 20 33 02 ->3a6d78 28 ab 6b 5c 33 22 3a 6b 00 00 00 00 42 61 64 20 ->3a6d88 61 72 67 75 6d 65 6e 74 73 0d 0d 00 55 6e 61 62 ->3a6d98 6c 65 20 74 6f 20 73 61 76 65 20 66 69 6c 65 3a ->3a6da8 20 00 55 6e 61 62 6c 65 20 74 6f 20 6c 6f 61 64 ->3a6db8 20 66 69 6c 65 3a 20 00 0d 20 20 50 43 20 20 20 ->3a6dc8 20 20 41 20 20 20 20 58 20 20 20 20 59 20 20 20 ->3a6dd8 20 53 50 20 20 20 44 42 52 20 44 50 20 20 20 4e ->3a6de8 56 4d 58 44 49 5a 43 0d 00 41 43 44 46 47 4a 48 ->3a6df8 4c 4d 52 3b 53 54 56 57 58 3e 3f 00 18 fb 08 c2 ->3a6e08 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 00 48 ab ->3a6e18 68 28 c2 30 20 43 6e a9 ff fe 1b 08 e2 20 48 a9 ->3a6e28 3a 48 ab 68 28 a2 3c d2 20 c0 02 08 e2 20 48 a9 ->3a6e38 00 48 ab 68 28 4c 33 22 4c 40 6e 08 20 b5 01 20 ->3a6e48 24 46 28 60 00 00 00 00 00 00 00 00 00 00 00 00 ->3a6e58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -; ...repeated 1561 times (24976 bytes)... +>3a00d8 10 00 60 20 14 00 48 20 18 00 68 60 08 e2 20 af +>3a00e8 00 00 af 89 3c f0 08 09 03 8f 00 00 af 80 06 09 +>3a00f8 01 8f 00 00 af 28 60 08 e2 20 c9 00 f0 08 af 10 +>3a0108 00 af 09 01 80 06 af 10 00 af 29 fe 8f 10 00 af +>3a0118 28 60 08 22 84 10 00 28 60 48 da 5a 0b 08 e2 20 +>3a0128 c2 10 a2 00 00 a9 20 9f 00 a0 af af 1e 00 00 9f +>3a0138 00 c0 af e8 e0 00 20 d0 ec 08 c2 20 48 a9 00 00 +>3a0148 5b 68 28 a2 00 00 a0 00 00 22 84 10 00 28 2b 7a +>3a0158 fa 68 60 da 5a 0b 08 08 c2 20 48 a9 00 08 5b 68 +>3a0168 28 c2 30 af 0c 00 00 85 08 e2 20 af 0e 00 00 c2 +>3a0178 20 29 ff 00 85 0a af 11 00 00 8f 08 01 00 af 1c +>3a0188 00 00 3a 8f 0a 01 00 18 a5 08 6f 0c 01 00 85 08 +>3a0198 a5 0a 69 00 00 85 0a e2 20 af 0f 00 00 85 8f a0 +>3a01a8 00 00 a2 00 00 b7 08 9f 00 4f 00 e8 c8 c4 8f d0 +>3a01b8 f4 ca bf 00 4f 00 c9 20 d0 09 a9 00 9f 00 4f 00 +>3a01c8 ca 10 ef 28 2b 7a fa 60 e2 20 a9 48 8f 0f 00 00 +>3a01d8 a9 34 8f 13 00 00 a9 20 8f 08 00 af 8f 09 00 af +>3a01e8 a2 00 00 a9 00 9f 18 f0 3a e8 e0 40 00 d0 f6 a9 +>3a01f8 80 8f b4 08 00 e2 20 a9 00 8f 89 0f 00 a9 00 8f +>3a0208 00 02 af 8f 0c 02 af 8f 18 02 af 8f 24 02 af 60 +>3a0218 08 e2 20 48 48 a9 00 22 3c 10 00 68 22 18 10 00 +>3a0228 af 89 0f 00 29 01 d0 f8 68 28 60 08 e2 20 48 48 +>3a0238 a9 01 22 3c 10 00 68 22 18 10 00 af 89 0f 00 29 +>3a0248 01 d0 f8 68 28 60 08 c2 20 48 e2 20 a9 0d 20 18 +>3a0258 00 c2 20 68 28 60 08 22 78 10 00 28 60 08 0b 08 +>3a0268 c2 20 48 a9 00 08 5b 68 28 e2 20 a5 b6 1a 85 b6 +>3a0278 cf 13 00 00 90 05 20 14 00 64 b6 2b 28 60 da 5a +>3a0288 0b 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 c2 10 +>3a0298 8f b5 08 00 af b4 08 00 29 20 f0 07 af b5 08 00 +>3a02a8 20 28 00 af b4 08 00 29 80 f0 07 af b5 08 00 20 +>3a02b8 18 02 af b4 08 00 29 40 f0 14 af b5 08 00 20 33 +>3a02c8 02 af b5 08 00 c9 0d d0 05 a9 0a 20 33 02 28 2b +>3a02d8 7a fa 60 08 e2 20 bd 00 00 f0 06 20 18 00 e8 80 +>3a02e8 f5 28 60 08 c2 20 48 48 4a 4a 4a 4a 4a 4a 4a 4a +>3a02f8 20 05 03 68 29 ff 00 20 05 03 68 28 60 08 c2 20 +>3a0308 48 e2 20 48 4a 4a 4a 4a 20 1c 03 68 20 1c 03 c2 +>3a0318 20 68 28 60 08 c2 30 da 29 0f 00 aa bf 00 d0 3a +>3a0328 20 18 00 fa 28 60 08 c2 30 48 da 5a 8b 0b c2 30 +>3a0338 a3 0b 18 69 03 00 aa e2 20 a9 3a 48 ab bd 00 00 +>3a0348 f0 06 20 18 02 e8 80 f5 c2 30 2b ab 7a fa 68 28 +>3a0358 60 08 e2 20 c9 5b b0 04 c9 41 b0 0b c9 7b b0 04 +>3a0368 c9 61 b0 03 28 18 60 28 38 60 08 e2 20 c9 3a b0 +>3a0378 04 c9 30 b0 03 28 18 60 28 38 60 08 e2 20 c9 3a +>3a0388 b0 04 c9 30 b0 13 c9 67 b0 04 c9 61 b0 0b c9 47 +>3a0398 b0 04 c9 41 b0 03 28 18 60 28 38 60 08 e2 20 c9 +>3a03a8 3a b0 04 c9 30 b0 12 c9 67 b0 04 c9 61 b0 0f c9 +>3a03b8 47 b0 04 c9 41 b0 09 28 60 38 e9 30 80 f9 29 df +>3a03c8 38 e9 37 80 f2 08 e2 20 c9 7b b0 06 c9 61 90 02 +>3a03d8 29 df 28 60 08 e2 20 c2 10 bd 00 00 f0 09 20 cd +>3a03e8 03 9d 00 00 e8 80 f2 28 60 08 0b 08 c2 20 48 a9 +>3a03f8 00 08 5b 68 28 c2 20 48 06 23 26 25 a5 23 85 0c +>3a0408 a5 25 85 0e 06 0c 26 0e 06 0c 26 0e 18 a5 23 65 +>3a0418 0c 85 23 a5 25 65 0e 85 25 68 2b 28 60 08 0b 08 +>3a0428 c2 20 48 a9 00 08 5b 68 28 c2 20 a5 23 8f 1a 01 +>3a0438 00 a9 0a 00 8f 18 01 00 af 1c 01 00 85 23 64 25 +>3a0448 af 1e 01 00 85 29 64 2b e2 20 a9 00 85 27 85 2d +>3a0458 2b 28 60 08 0b 08 c2 20 48 a9 00 08 5b 68 28 c2 +>3a0468 20 a5 23 8f 1a 01 00 a9 64 00 8f 18 01 00 af 1c +>3a0478 01 00 85 23 64 25 af 1e 01 00 85 29 64 2b e2 20 +>3a0488 a9 00 85 27 85 2d 2b 28 60 08 c2 20 a5 23 d0 08 +>3a0498 a5 25 d0 04 28 e2 02 60 28 c2 02 60 08 c2 30 a9 +>3a04a8 ff ff 85 23 85 25 e2 20 a9 00 85 27 28 60 08 c2 +>3a04b8 30 a9 00 00 85 23 85 25 e2 20 a9 00 85 27 28 60 +>3a04c8 08 e2 20 a5 27 c9 00 f0 07 c9 01 d0 05 20 c6 57 +>3a04d8 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 +>3a04e8 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 +>3a04f8 08 08 e2 20 a5 2d c9 00 f0 37 c9 01 d0 35 c2 20 +>3a0508 a5 25 48 a5 23 48 c2 20 a5 29 85 23 a5 2b 85 25 +>3a0518 e2 20 a9 01 85 27 20 c6 57 c2 20 a5 23 85 29 a5 +>3a0528 25 85 2b e2 20 a9 00 85 2d c2 20 68 85 23 68 85 +>3a0538 25 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a0548 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a0558 d4 08 08 e2 20 a5 27 c9 02 d0 02 28 60 08 c2 20 +>3a0568 48 a9 00 08 5b 68 28 e2 20 a9 04 8f d3 08 00 c2 +>3a0578 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 e2 20 a5 +>3a0588 27 c9 00 f0 07 c9 01 d0 0b 20 c6 57 c2 20 a5 25 +>3a0598 d0 21 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a05a8 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a05b8 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a05c8 09 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a05d8 d4 08 08 e2 20 a5 27 c9 00 f0 07 c9 01 d0 11 20 +>3a05e8 c6 57 a5 26 d0 29 a5 25 d0 25 a5 24 d0 21 28 60 +>3a05f8 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f d3 +>3a0608 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 +>3a0618 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 +>3a0628 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 e2 +>3a0638 20 a5 27 c9 01 f0 26 c9 00 f0 1f 08 c2 20 48 a9 +>3a0648 00 08 5b 68 28 e2 20 a9 04 8f d3 08 00 c2 20 29 +>3a0658 ff 00 20 f8 1b e2 20 dc d4 08 20 38 57 28 60 08 +>3a0668 e2 20 a5 2d c9 01 f0 26 c9 00 f0 1f 08 c2 20 48 +>3a0678 a9 00 08 5b 68 28 e2 20 a9 04 8f d3 08 00 c2 20 +>3a0688 29 ff 00 20 f8 1b e2 20 dc d4 08 20 98 06 28 60 +>3a0698 c2 20 a5 25 48 a5 23 48 c2 20 a5 29 85 23 a5 2b +>3a06a8 85 25 e2 20 a9 00 85 27 20 38 57 c2 20 a5 23 85 +>3a06b8 29 a5 25 85 2b e2 20 a9 01 85 2d c2 20 68 85 23 +>3a06c8 68 85 25 60 08 e2 20 a5 27 c9 00 f0 23 c9 01 f0 +>3a06d8 2e 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f +>3a06e8 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a06f8 a5 2d c9 00 f0 16 c9 01 d0 d7 20 38 57 80 0d a5 +>3a0708 2d c9 01 f0 07 c9 00 d0 c8 20 98 06 e2 20 a5 27 +>3a0718 28 60 08 e2 20 a5 27 c9 02 d0 25 a5 2d c9 02 f0 +>3a0728 24 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f +>3a0738 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a0748 20 cc 06 a5 27 28 60 08 0b 08 c2 20 48 a9 00 08 +>3a0758 5b 68 28 c2 30 64 23 64 25 e2 20 64 27 a7 00 c9 +>3a0768 26 f0 44 e2 20 a7 00 20 72 03 90 76 20 f1 03 38 +>3a0778 e9 30 c2 20 29 ff 00 18 65 23 85 23 a5 25 69 00 +>3a0788 00 85 25 20 9d 1e 80 db 08 c2 20 48 a9 00 08 5b +>3a0798 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 +>3a07a8 f8 1b e2 20 dc d4 08 20 9d 1e a7 00 c9 48 f0 04 +>3a07b8 c9 68 d0 d4 20 9d 1e e2 20 a7 00 20 83 03 90 22 +>3a07c8 20 a4 03 c2 20 06 23 26 25 06 23 26 25 06 23 26 +>3a07d8 25 06 23 26 25 29 ff 00 18 65 23 85 23 20 9d 1e +>3a07e8 80 d5 2b 28 60 08 c2 30 38 a5 04 e5 1a a8 e2 20 +>3a07f8 b7 1a f0 10 c9 20 f0 06 c9 09 f0 02 28 60 88 c0 +>3a0808 ff ff d0 ec a9 00 60 08 0b 08 c2 20 48 a9 00 08 +>3a0818 5b 68 28 c2 30 a5 1a 85 00 e2 20 a5 1c 85 02 20 +>3a0828 be 1e a7 00 20 72 03 90 0c 20 4f 07 c2 20 a5 23 +>3a0838 85 d7 20 be 1e c2 20 a5 00 85 1a e2 20 a5 02 85 +>3a0848 1c 20 5d 08 e2 20 20 ce 08 c9 00 f0 05 20 6c 0a +>3a0858 80 f4 2b 28 60 08 c2 20 a5 1a 85 00 a5 1c 85 02 +>3a0868 a2 00 00 e2 20 a0 00 00 e0 00 00 f0 0d b7 00 f0 +>3a0878 53 c9 3a f0 04 c9 20 d0 33 c8 b7 00 f0 46 c9 52 +>3a0888 f0 10 c9 72 d0 26 b7 00 f0 3a c9 52 f0 04 c9 72 +>3a0898 d0 1a c8 b7 00 f0 2d c9 45 f0 04 c9 65 d0 0d c8 +>3a08a8 b7 00 f0 20 c9 4d f0 0a c9 6d f0 06 e8 20 9d 1e +>3a08b8 80 b3 a7 00 c9 3a d0 03 20 9d 1e a9 03 85 1e a9 +>3a08c8 91 20 6c 0a 28 60 08 0b 08 c2 20 48 a9 00 08 5b +>3a08d8 68 28 e2 20 a9 7f 85 1e c2 10 20 21 0a a5 1e d0 +>3a08e8 03 4c 71 09 c2 20 a5 1a 85 00 e2 20 a5 1c 85 02 +>3a08f8 c2 20 64 04 64 06 e2 30 a0 00 b7 00 f0 da c9 91 +>3a0908 f0 d6 c8 c4 1e 90 f3 c2 10 a7 00 c9 22 d0 05 20 +>3a0918 93 09 80 28 a5 1e c9 03 90 19 c2 20 a5 00 c5 1a +>3a0928 d0 08 e2 20 a5 02 c5 1c f0 09 e2 20 a7 04 20 69 +>3a0938 4c b0 09 e2 20 20 a3 09 c9 00 d0 11 c2 20 a5 00 +>3a0948 85 04 e2 20 a5 02 85 06 20 9d 1e 80 a9 c9 81 d0 +>3a0958 18 20 ed 07 c9 00 f0 14 89 80 10 0b 20 0d 0b c9 +>3a0968 30 f0 04 a9 af 80 02 a9 81 2b 28 60 08 c2 20 48 +>3a0978 a9 00 08 5b 68 28 e2 20 a9 02 8f d3 08 00 c2 20 +>3a0988 29 ff 00 20 f8 1b e2 20 dc d4 08 08 e2 20 20 9d +>3a0998 1e a7 00 f0 04 c9 22 d0 f5 28 60 da 5a 08 0b 08 +>3a09a8 c2 20 48 a9 00 08 5b 68 28 e2 20 a7 04 20 69 4c +>3a09b8 a9 00 2a 85 28 c2 30 a9 61 0b 85 08 e2 20 a9 3a +>3a09c8 85 0a a2 80 00 e2 20 a0 01 00 b7 08 f0 31 c5 1e +>3a09d8 d0 32 c2 30 a0 02 00 b7 08 85 0c e2 20 a9 3a 85 +>3a09e8 0e a5 28 f0 07 a7 0c 20 69 4c b0 18 e2 10 a0 00 +>3a09f8 b7 00 20 cd 03 d7 0c d0 0b c8 c4 1e 90 f2 8a 2b +>3a0a08 28 7a fa 60 c2 30 18 a5 08 69 08 00 85 08 e2 20 +>3a0a18 a5 0a 69 00 85 0a e8 80 ac 08 0b 8b 08 c2 20 48 +>3a0a28 a9 00 08 5b 68 28 c2 30 a9 61 0b 85 08 a9 3a 00 +>3a0a38 85 0a 64 0c e2 20 a0 01 00 b7 08 f0 1d c5 1e b0 +>3a0a48 06 c5 0c 90 02 85 0c c2 20 18 a5 08 69 08 00 85 +>3a0a58 08 a5 0a 69 00 00 85 0a 80 da e2 20 a5 0c 85 1e +>3a0a68 ab 2b 28 60 08 0b 08 c2 20 48 a9 00 08 5b 68 28 +>3a0a78 e2 20 87 00 c2 20 18 a5 00 69 01 00 85 08 a5 02 +>3a0a88 69 00 00 85 0a e2 10 a4 1e 88 e2 20 b7 08 87 08 +>3a0a98 f0 13 c2 20 18 a5 08 69 01 00 85 08 a5 0a 69 00 +>3a0aa8 00 85 0a 80 e5 2b 28 60 08 c2 30 29 7f 00 0a 0a +>3a0ab8 0a 18 69 61 0b aa 28 60 08 8b 0b 08 c2 20 48 a9 +>3a0ac8 00 08 5b 68 28 08 e2 20 48 a9 3a 48 ab 68 28 e2 +>3a0ad8 20 c2 10 20 b0 0a bd 00 00 c2 20 29 0f 00 2b ab +>3a0ae8 28 60 08 8b 0b 08 c2 20 48 a9 00 08 5b 68 28 08 +>3a0af8 e2 20 48 a9 3a 48 ab 68 28 c2 30 20 b0 0a bd 04 +>3a0b08 00 2b ab 28 60 08 8b 0b 08 c2 20 48 a9 00 08 5b +>3a0b18 68 28 08 e2 20 48 a9 3a 48 ab 68 28 e2 20 c2 10 +>3a0b28 20 b0 0a bd 00 00 c2 20 29 f0 00 2b ab 28 60 08 +>3a0b38 8b 0b 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 +>3a0b48 a9 3a 48 ab 68 28 e2 20 c2 10 20 b0 0a bd 06 00 +>3a0b58 c2 20 29 ff 00 2b ab 28 60 03 01 10 d0 5c 25 02 +>3a0b68 00 03 01 12 d0 9c 25 02 00 02 01 14 d0 d3 25 02 +>3a0b78 00 02 01 16 d0 0a 26 02 00 02 03 18 d0 14 26 02 +>3a0b88 00 00 01 1c d0 00 00 02 00 04 02 1e d0 ab 27 02 +>3a0b98 00 04 02 21 d0 6b 27 02 00 04 02 24 d0 2b 27 02 +>3a0ba8 00 04 01 27 d0 6b 26 02 00 04 01 29 d0 eb 26 02 +>3a0bb8 00 04 01 2b d0 ab 26 02 00 05 03 2d d0 55 26 01 +>3a0bc8 00 06 03 31 d0 27 26 02 00 07 02 35 d0 3e 26 02 +>3a0bd8 00 ff 01 38 d0 00 00 00 00 40 01 3a d0 00 00 00 +>3a0be8 00 20 03 3c d0 44 3e 00 00 20 05 40 d0 49 42 00 +>3a0bf8 00 20 03 46 d0 94 41 00 00 20 04 4a d0 34 41 00 +>3a0c08 00 20 03 4f d0 2b 41 00 00 20 02 53 d0 c3 40 00 +>3a0c18 00 50 04 56 d0 00 00 00 00 50 04 5b d0 00 00 00 +>3a0c28 00 20 05 60 d0 06 40 00 00 20 06 66 d0 7f 40 00 +>3a0c38 00 20 03 6d d0 5b 3e 00 00 50 02 71 d0 00 00 00 +>3a0c48 00 50 04 74 d0 00 00 00 00 20 04 79 d0 4f 3f 00 +>3a0c58 00 20 02 7e d0 55 3e 00 00 20 04 81 d0 58 3e 00 +>3a0c68 00 50 05 86 d0 00 00 00 00 50 05 8c d0 00 00 00 +>3a0c78 00 20 04 92 d0 52 3e 00 00 20 03 97 d0 8a 41 00 +>3a0c88 00 20 04 9b d0 25 3e 00 00 20 04 a0 d0 b5 3d 00 +>3a0c98 00 20 05 a5 d0 4b 3d 00 00 20 05 ab d0 d8 3c 00 +>3a0ca8 00 20 03 b1 d0 d4 3c 00 00 20 04 b5 d0 b5 3b 00 +>3a0cb8 00 20 04 ba d0 c7 3c 00 00 20 07 bf d0 cb 3c 00 +>3a0cc8 00 20 03 c7 d0 08 3b 00 00 20 04 cb d0 71 3a 00 +>3a0cd8 00 00 01 d0 d0 eb 27 01 00 30 03 d2 d0 e9 47 00 +>3a0ce8 00 30 04 d6 d0 39 48 00 00 30 05 db d0 ca 48 00 +>3a0cf8 00 30 05 e1 d0 7c 48 00 00 30 04 e7 d0 09 49 00 +>3a0d08 00 30 03 ec d0 5e 49 00 00 30 03 f0 d0 a3 49 00 +>3a0d18 00 30 03 f4 d0 2c 4a 00 00 30 03 f8 d0 b5 4a 00 +>3a0d28 00 30 03 fc d0 17 4b 00 00 30 04 00 d1 5b 47 00 +>3a0d38 00 30 03 05 d1 fa 46 00 00 30 04 09 d1 ac 46 00 +>3a0d48 00 30 03 0e d1 56 46 00 00 30 05 12 d1 8d 45 00 +>3a0d58 00 30 06 18 d1 ac 44 00 00 30 04 1f d1 f7 43 00 +>3a0d68 00 10 03 24 d1 a5 4b 00 00 10 03 28 d1 70 4b 00 +>3a0d78 00 10 04 2c d1 aa 5f 00 00 10 04 31 d1 bc 4b 00 +>3a0d88 00 10 03 36 d1 d1 5c 00 00 20 05 3a d1 7c 5e 00 +>3a0d98 00 10 04 40 d1 57 5f 00 00 20 05 45 d1 63 60 00 +>3a0da8 00 20 03 4b d1 82 61 00 00 10 04 4f d1 ef 60 00 +>3a0db8 00 20 06 54 d1 f8 61 00 00 20 04 5b d1 1c 63 00 +>3a0dc8 00 10 07 60 d1 6d 4b 00 00 20 03 68 d1 00 3a 00 +>3a0dd8 00 20 05 6c d1 35 39 00 00 20 09 72 d1 aa 29 00 +>3a0de8 00 20 09 7c d1 37 29 00 00 20 0a 86 d1 67 29 00 +>3a0df8 00 20 07 91 d1 a4 28 00 00 30 08 99 d1 28 43 00 +>3a0e08 00 20 07 a2 d1 39 28 00 00 30 08 aa d1 92 43 00 +>3a0e18 00 20 08 b3 d1 ee 2a 00 00 20 08 bc d1 23 2a 00 +>3a0e28 00 20 06 c5 d1 28 2c 00 00 20 09 cc d1 30 2d 00 +>3a0e38 00 20 04 d6 d1 40 2e 00 00 20 04 db d1 b1 2e 00 +>3a0e48 00 20 04 e0 d1 4a 2f 00 00 20 06 e5 d1 86 30 00 +>3a0e58 00 20 08 ec d1 22 31 00 00 20 0a f5 d1 6e 31 00 +>3a0e68 00 20 07 00 d2 a3 32 00 00 20 07 08 d2 21 33 00 +>3a0e78 00 20 08 10 d2 93 33 00 00 20 06 19 d2 d0 33 00 +>3a0e88 00 20 07 20 d2 00 37 00 00 50 06 28 d2 00 00 00 +>3a0e98 00 50 04 2f d2 00 00 00 00 20 06 34 d2 15 39 00 +>3a0ea8 00 00 00 00 00 00 00 00 00 08 0b 08 c2 20 48 a9 +>3a0eb8 00 08 5b 68 28 c2 30 a9 ff ff 85 ba e2 20 a9 37 +>3a0ec8 85 bc c2 20 64 b7 64 bd e2 20 64 b9 64 bf 2b 28 +>3a0ed8 60 5a 08 e2 20 85 ea c2 10 86 8f c2 20 a5 0e 48 +>3a0ee8 a5 0c 48 a5 12 48 a5 10 48 20 89 0f b0 03 20 0d +>3a0ef8 0f 20 15 11 c2 20 68 85 10 68 85 12 68 85 0c 68 +>3a0f08 85 0e 28 7a 60 08 0b 08 c2 20 48 a9 00 08 5b 68 +>3a0f18 28 e2 20 a6 8f ca 86 0c e8 c2 30 38 a5 ba e5 0c +>3a0f28 85 c0 e2 20 a5 bc e9 00 85 c2 20 15 11 e2 20 a5 +>3a0f38 ea a0 00 00 97 c3 a9 00 a0 01 00 97 c3 a0 02 00 +>3a0f48 97 c3 c2 20 a9 00 00 97 c3 c2 20 18 a5 ba 69 01 +>3a0f58 00 a0 05 00 97 c3 e2 20 c8 c8 a5 bc 69 00 97 c3 +>3a0f68 c2 20 a5 c0 85 b7 e2 20 a5 c2 85 b9 c2 20 38 a5 +>3a0f78 c3 e9 01 00 85 ba e2 20 a5 c5 e9 00 85 bc 2b 28 +>3a0f88 60 08 0b 08 c2 20 48 a9 00 08 5b 68 28 c2 30 c2 +>3a0f98 20 a5 bd 85 c9 e2 20 a5 bf 85 cb a5 c9 d0 17 e2 +>3a0fa8 20 a5 cb d0 11 c2 20 a9 00 00 85 cf e2 20 a9 00 +>3a0fb8 85 d1 2b 28 18 60 c2 20 a0 05 00 b7 c9 85 cc e2 +>3a0fc8 20 c8 c8 b7 c9 85 ce c2 20 18 a5 c9 65 8f 85 0c +>3a0fd8 e2 20 a5 cb 69 00 85 0e c2 20 18 a5 0c 69 08 00 +>3a0fe8 85 0c e2 20 a5 0e 69 00 85 0e c2 20 a5 0c c5 cc +>3a0ff8 d0 28 e2 20 a5 0e c5 ce d0 20 c2 20 a5 cf d0 5d +>3a1008 e2 20 a5 d1 d0 57 c2 20 a0 02 00 b7 c9 85 bd e2 +>3a1018 20 c8 c8 b7 c9 85 bf 4c c6 10 c2 20 a5 0c 69 08 +>3a1028 00 85 10 e2 20 a5 0e 69 00 85 12 e2 20 a5 c6 c5 +>3a1038 10 b0 3e 90 08 c2 20 a5 c6 c5 10 b0 34 c2 20 a5 +>3a1048 c9 85 cf e2 20 a5 cb 85 d1 c2 20 a0 02 00 b7 cf +>3a1058 85 c9 e2 20 c8 c8 b7 cf 85 cb 4c a3 0f c2 20 a0 +>3a1068 02 00 b7 c9 97 cf e2 20 c8 c8 b7 c9 97 cf 4c c6 +>3a1078 10 c2 20 a0 05 00 b7 c9 97 0c e2 20 c8 c8 b7 c9 +>3a1088 97 0c c2 20 a0 02 00 b7 c9 97 0c e2 20 c8 c8 b7 +>3a1098 c9 97 0c c2 20 a5 cf d0 14 e2 20 a5 cf d0 0e c2 +>3a10a8 20 a5 0c 85 bd e2 20 a5 0e 85 bf 80 11 c2 20 a0 +>3a10b8 02 00 a5 0c 97 cf e2 20 c8 c8 a5 0e 97 cf c2 20 +>3a10c8 a5 c9 85 c3 e2 20 a5 cb 85 c5 c2 20 a5 c3 85 b7 +>3a10d8 e2 20 a5 c5 85 b9 c2 20 a0 05 00 a5 0c 97 c3 e2 +>3a10e8 20 c8 c8 a5 0e 97 c3 c2 20 a0 02 00 a9 00 00 97 +>3a10f8 c3 e2 20 c8 c8 97 c3 e2 20 a5 ea e2 20 a0 00 00 +>3a1108 97 c3 a0 01 00 a9 00 97 c3 2b 28 38 60 08 c2 20 +>3a1118 38 a5 c0 e9 08 00 85 c3 e2 20 a5 c2 e9 00 85 c5 +>3a1128 28 60 08 e2 20 a5 c5 f0 04 c9 38 b0 12 c2 20 a5 +>3a1138 c3 f0 0c e2 20 a0 01 00 b7 c3 1a 97 c3 28 60 00 +>3a1148 ea 08 e2 20 a5 c5 f0 04 c9 38 b0 17 c2 20 a5 c3 +>3a1158 f0 11 e2 20 a0 01 00 b7 c3 3a 97 c3 d0 03 20 6d +>3a1168 11 28 60 00 ea 08 c2 20 a5 bd d0 21 e2 20 a5 bf +>3a1178 d0 1b a5 c5 85 bf c2 20 a5 c3 85 bd a9 00 00 a0 +>3a1188 02 00 97 c3 c8 c8 e2 20 97 c3 4c 54 12 e2 20 a5 +>3a1198 bf c5 c5 90 28 c2 20 a5 bd c5 c3 90 20 c2 20 a5 +>3a11a8 bd a0 02 00 97 c3 e2 20 c8 c8 a5 bf 97 c3 c2 20 +>3a11b8 a5 c3 85 bd e2 20 a5 c5 85 bf 4c 54 12 c2 20 a5 +>3a11c8 bd 85 08 e2 20 a5 bf 85 0a e2 20 a0 04 00 b7 08 +>3a11d8 c5 c8 90 32 d0 0b c2 20 a0 02 00 b7 08 c5 c6 90 +>3a11e8 25 c2 20 a0 02 00 b7 08 97 c3 e2 20 c8 c8 b7 08 +>3a11f8 97 c3 c2 20 a5 c3 a0 02 00 97 08 e2 20 a5 c5 c8 +>3a1208 c8 97 08 4c 54 12 c2 20 a0 02 00 b7 08 d0 08 e2 +>3a1218 20 c8 c8 b7 08 f0 19 c2 20 a0 02 00 b7 08 85 0c +>3a1228 e2 20 c8 c8 b7 08 85 0a c2 20 a5 0c 85 08 80 99 +>3a1238 c2 20 a5 c3 a0 02 00 97 08 e2 20 c8 c8 a5 c5 97 +>3a1248 08 a9 00 97 c3 c2 20 a0 02 00 97 c3 20 59 12 28 +>3a1258 60 08 c2 20 a5 bd 85 c3 e2 20 a5 bf 85 c5 c2 20 +>3a1268 a5 c3 d0 09 e2 20 a5 c5 d0 03 4c fc 12 c2 20 a0 +>3a1278 02 00 b7 c3 85 0c e2 20 c8 c8 b7 c3 85 0e c2 20 +>3a1288 a0 05 00 b7 c3 85 10 e2 20 c8 c8 b7 c3 85 12 c2 +>3a1298 20 a5 0c c5 10 d0 08 e2 20 a5 0e c5 12 f0 1f c2 +>3a12a8 20 a0 02 00 b7 c3 85 0c e2 20 c8 c8 b7 c3 85 0e +>3a12b8 c2 20 a5 0c 85 c3 e2 20 a5 0e 85 c5 80 a0 c2 20 +>3a12c8 a0 02 00 b7 c3 85 0c e2 20 c8 c8 b7 c3 85 0e c2 +>3a12d8 20 a0 02 00 b7 0c 97 c3 e2 20 c8 c8 b7 0c 97 c3 +>3a12e8 c2 20 a0 05 00 b7 0c 97 c3 e2 20 c8 c8 b7 0c 97 +>3a12f8 c3 4c 75 12 28 60 08 c2 20 64 16 64 18 28 60 08 +>3a1308 c2 30 a5 16 d0 16 a5 18 d0 12 e2 20 64 16 a5 e2 +>3a1318 1a 1a 85 17 a5 e3 85 18 64 19 80 07 c2 20 a5 17 +>3a1328 1a 85 17 c2 20 a5 bb 3a c5 17 f0 02 b0 1f 08 c2 +>3a1338 20 48 a9 00 08 5b 68 28 e2 20 a9 03 8f d3 08 00 +>3a1348 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 28 60 c9 +>3a1358 00 d0 05 c0 01 00 f0 05 09 30 97 16 c8 60 08 c2 +>3a1368 30 64 0c a5 25 10 1a 18 a5 23 49 ff ff 69 01 00 +>3a1378 85 23 a5 25 49 ff ff 69 00 00 85 25 a9 ff ff 85 +>3a1388 0c 64 10 64 12 64 14 a2 1f 00 f8 06 23 26 25 a5 +>3a1398 10 65 10 85 10 a5 12 65 12 85 12 a5 14 65 14 85 +>3a13a8 14 ca 10 e7 d8 e2 20 20 07 13 a0 00 00 a5 0c f0 +>3a13b8 04 a9 2d 80 02 a9 20 97 16 c8 a2 05 00 b5 10 29 +>3a13c8 f0 4a 4a 4a 4a 20 57 13 b5 10 29 0f 20 57 13 ca +>3a13d8 10 eb c0 01 00 d0 0c a9 20 87 16 a0 01 00 a9 30 +>3a13e8 97 16 c8 a9 00 97 16 28 60 00 ea 08 e2 20 c2 10 +>3a13f8 a0 00 00 bd 00 00 f0 04 e8 c8 80 f7 28 60 08 0b +>3a1408 08 c2 20 48 a9 00 08 5b 68 28 e2 20 c2 10 a0 00 +>3a1418 00 b7 23 d0 04 b7 29 f0 25 b7 23 d7 29 90 12 d0 +>3a1428 03 c8 80 ed c2 20 a9 01 00 85 23 e2 20 64 25 80 +>3a1438 15 c2 20 a9 ff ff 85 23 e2 20 85 25 80 08 c2 20 +>3a1448 64 23 e2 20 64 25 e2 20 a9 00 85 27 2b 28 60 08 +>3a1458 0b 8b 08 c2 20 48 a9 00 08 5b 68 28 e2 20 c2 10 +>3a1468 08 c2 20 48 e2 20 a5 25 48 ab c2 20 68 28 a6 23 +>3a1478 20 f3 13 84 0c 08 c2 20 48 e2 20 a5 2b 48 ab c2 +>3a1488 20 68 28 a6 29 20 f3 13 c2 20 98 38 65 0c aa e2 +>3a1498 20 a9 02 20 d9 0e c2 20 a5 b7 85 08 e2 20 a5 b9 +>3a14a8 85 0a a0 00 00 08 c2 20 48 e2 20 a5 25 48 ab c2 +>3a14b8 20 68 28 a6 23 bd 00 00 f0 06 97 08 e8 c8 80 f5 +>3a14c8 e2 20 08 c2 20 48 e2 20 a5 2b 48 ab c2 20 68 28 +>3a14d8 a6 29 bd 00 00 97 08 f0 04 e8 c8 80 f5 c2 20 a5 +>3a14e8 08 85 23 e2 20 a5 0a 85 25 a9 02 85 27 ab 2b 28 +>3a14f8 60 da 5a 08 0b 8b 08 c2 20 48 a9 00 08 5b 68 28 +>3a1508 c2 20 a5 0a 48 a5 08 48 c2 30 08 c2 20 48 e2 20 +>3a1518 a5 25 48 ab c2 20 68 28 a6 23 20 f3 13 98 aa e8 +>3a1528 e2 20 a9 02 20 d9 0e c2 20 a5 c0 85 08 a5 c2 85 +>3a1538 0a a0 00 00 e2 20 b7 23 97 08 f0 03 c8 80 f7 c2 +>3a1548 20 a5 08 85 23 a5 0a 85 25 c2 20 68 85 08 68 85 +>3a1558 0a ab 2b 28 7a fa 60 08 e2 20 c2 10 a0 00 00 b7 +>3a1568 23 f0 05 c8 80 f9 84 92 c2 30 c4 29 90 13 f0 11 +>3a1578 a5 8f 30 0d f0 0b c4 8f b0 12 a5 29 d0 0e 4c dd +>3a1588 15 20 07 13 e2 20 a9 00 87 16 80 39 20 07 13 c2 +>3a1598 30 18 a5 23 65 29 85 23 a5 25 69 00 00 85 25 a0 +>3a15a8 00 00 e2 20 a7 23 97 16 f0 1b c2 20 18 a5 23 69 +>3a15b8 01 00 85 23 a5 25 69 00 00 85 25 c8 c4 8f d0 e2 +>3a15c8 a9 00 00 97 16 c2 20 a5 16 85 23 a5 18 85 25 e2 +>3a15d8 20 a9 02 85 27 28 60 08 c2 30 20 06 14 a5 23 c9 +>3a15e8 ff ff d0 05 20 a4 04 80 03 20 b6 04 28 60 08 c2 +>3a15f8 30 20 06 14 a5 23 c9 01 00 d0 05 20 a4 04 80 03 +>3a1608 20 b6 04 28 60 08 c2 30 20 06 14 a5 23 c9 00 00 +>3a1618 d0 05 20 a4 04 80 03 20 b6 04 28 60 08 c2 30 20 +>3a1628 06 14 a5 23 c9 00 00 f0 05 20 a4 04 80 03 20 b6 +>3a1638 04 28 60 08 c2 30 20 06 14 a5 23 c9 ff ff f0 05 +>3a1648 20 a4 04 80 03 20 b6 04 28 60 08 c2 30 20 06 14 +>3a1658 a5 23 c9 01 00 f0 05 20 a4 04 80 03 20 b6 04 28 +>3a1668 60 48 5a 0b 08 08 c2 20 48 a9 00 08 5b 68 28 c2 +>3a1678 30 a9 00 00 85 00 85 1a a9 36 00 85 02 85 1c ad +>3a1688 8a 0f 30 20 a0 02 00 b7 1a f0 0f c5 55 90 10 c5 +>3a1698 59 f0 02 b0 05 20 cb 16 80 e5 28 2b 7a 68 60 20 +>3a16a8 7a 1f 80 db 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a16b8 a9 01 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a16c8 dc d4 08 08 c2 30 85 23 64 25 20 66 13 a5 16 1a +>3a16d8 85 23 a5 18 85 25 20 c5 42 18 a5 1a 69 04 00 85 +>3a16e8 00 a5 1c 69 00 00 85 02 e2 20 a9 20 20 18 00 c2 +>3a16f8 20 20 0a 17 90 fb e2 20 a9 0d 20 18 00 20 7a 1f +>3a1708 28 60 08 0b 8b 08 c2 20 48 a9 00 08 5b 68 28 08 +>3a1718 e2 20 48 a9 00 48 ab 68 28 e2 20 c2 10 a7 00 f0 +>3a1728 3a 30 05 20 18 00 80 29 c2 20 29 7f 00 0a 0a 0a +>3a1738 18 69 61 0b 85 08 a9 3a 00 69 00 00 85 0a 08 e2 +>3a1748 20 48 a9 3a 48 ab 68 28 a0 02 00 b7 08 aa 20 db +>3a1758 02 c2 20 20 9d 1e ab 2b 28 18 60 ab 2b 28 38 60 +>3a1768 08 c2 20 a9 ff 6f 85 1f a9 ff 7f 85 21 a9 ff ff +>3a1778 85 23 85 25 85 29 85 2b e2 20 85 27 85 2d 28 60 +>3a1788 08 0b 8b 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 +>3a1798 48 a9 00 48 ab 68 28 c2 30 5a a4 1f bd 00 00 99 +>3a17a8 00 00 bd 02 00 99 02 00 e2 20 bd 04 00 99 04 00 +>3a17b8 c2 20 38 98 e9 05 00 85 1f 7a ab 2b 28 60 08 0b +>3a17c8 8b 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 +>3a17d8 00 48 ab 68 28 c2 30 5a 18 a5 1f 69 05 00 85 1f +>3a17e8 a8 b9 00 00 9d 00 00 b9 02 00 9d 02 00 e2 20 b9 +>3a17f8 04 00 9d 04 00 bd 00 00 7a ab 2b 28 60 08 0b 8b +>3a1808 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 00 +>3a1818 48 ab 68 28 e2 20 c2 10 5a a4 21 99 00 00 88 84 +>3a1828 21 7a ab 2b 28 60 08 0b 8b 08 c2 20 48 a9 00 08 +>3a1838 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 e2 20 c2 +>3a1848 10 5a a4 21 c8 84 21 b9 00 00 c2 20 29 ff 00 7a +>3a1858 ab 2b 28 60 08 e2 20 a9 01 20 05 18 28 60 5a 08 +>3a1868 8b 08 e2 20 48 a9 00 48 ab 68 28 e2 20 a4 21 b9 +>3a1878 01 00 c9 01 d0 08 c2 20 e6 21 ab 28 7a 60 08 c2 +>3a1888 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d3 08 00 +>3a1898 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 48 08 0b +>3a18a8 8b 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 +>3a18b8 00 48 ab 68 28 e2 20 a4 21 c0 ff 7f f0 11 20 c0 +>3a18c8 0a 85 0c b9 01 00 20 c0 0a c5 0c f0 02 90 08 c2 +>3a18d8 20 ab 2b 28 68 18 60 c2 20 ab 2b 28 68 38 60 4c +>3a18e8 4f 07 08 e2 20 a9 00 8f 00 4d 00 a2 01 00 20 a6 +>3a18f8 1a 20 84 05 c2 20 a5 23 9f 00 4d 00 e2 20 af 00 +>3a1908 4d 00 1a 30 3e 8f 00 4d 00 e8 e8 20 be 1e e2 20 +>3a1918 a7 00 c9 90 f0 09 c9 2c d0 0a 20 9d 1e 80 cf 20 +>3a1928 9d 1e 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a1938 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a1948 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a1958 0a 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a1968 d4 08 08 20 3c 4f 90 23 e2 20 a5 ea 29 80 d0 06 +>3a1978 20 3d 4d 4c 91 19 e2 20 a9 8f 20 aa 1f 20 5c 18 +>3a1988 20 ea 18 20 47 5c 20 66 18 28 60 08 c2 20 48 a9 +>3a1998 00 08 5b 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 +>3a19a8 ff 00 20 f8 1b e2 20 dc d4 08 08 0b 08 c2 20 48 +>3a19b8 a9 00 08 5b 68 28 e2 20 c2 10 20 9d 1e a0 00 00 +>3a19c8 b7 00 f0 24 c9 22 f0 03 c8 80 f5 84 0c e2 20 a9 +>3a19d8 02 a6 0c e8 20 07 13 a0 00 00 c4 0c f0 29 a7 00 +>3a19e8 97 16 c8 20 9d 1e 80 f2 08 c2 20 48 a9 00 08 5b +>3a19f8 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 +>3a1a08 f8 1b e2 20 dc d4 08 a9 00 97 16 c2 20 a5 16 85 +>3a1a18 23 a5 18 85 25 a9 02 00 85 27 20 9d 1e 2b 28 60 +>3a1a28 08 e2 20 a7 00 c2 20 29 ff 00 20 ea 0a 85 2f 20 +>3a1a38 5c 18 08 e2 20 48 a9 00 48 ab 68 28 20 4c 1a 20 +>3a1a48 66 18 28 60 20 9d 1e 6c 2f 08 48 08 0b 8b 08 c2 +>3a1a58 20 48 a9 00 08 5b 68 28 c2 30 20 2e 18 89 80 00 +>3a1a68 f0 37 48 20 ea 0a 85 2f 68 20 37 0b c9 01 00 f0 +>3a1a78 08 c2 30 a2 29 08 20 c6 17 c2 30 a2 23 08 20 c6 +>3a1a88 17 08 e2 20 48 a9 00 48 ab 68 28 20 a3 1a a2 23 +>3a1a98 08 20 88 17 ab 2b 28 68 60 00 ea 6c 2f 08 08 08 +>3a1aa8 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 00 48 +>3a1ab8 ab 68 28 c2 10 da e2 20 a7 00 d0 03 4c 69 1b 30 +>3a1ac8 33 c9 20 d0 03 4c 63 1b c9 3a b0 04 c9 30 b0 56 +>3a1ad8 c9 26 f0 52 c9 22 d0 03 4c 7c 1b c9 5b b0 07 c9 +>3a1ae8 41 90 03 4c 88 1b c9 7b b0 07 c9 61 90 03 4c 88 +>3a1af8 1b 4c 69 1b c9 8f f0 40 c9 90 f0 41 20 0d 0b c9 +>3a1b08 30 d0 0c 20 28 1a a2 23 08 20 88 17 4c be 1a c9 +>3a1b18 00 d0 4e a7 00 a6 21 e0 ff 7f f0 05 20 a5 18 b0 +>3a1b28 12 20 05 18 80 35 c2 20 20 92 55 a2 23 08 20 88 +>3a1b38 17 80 83 20 52 1a 80 dd 20 05 18 80 1e e2 20 a4 +>3a1b48 21 c0 ff 7f f0 46 a4 21 b9 01 00 c9 01 f0 3d c9 +>3a1b58 8f f0 05 20 52 1a 80 ee 20 2e 18 20 9d 1e 4c be +>3a1b68 1a a6 21 e0 ff 7f b0 24 bd 01 00 c9 01 f0 1d 20 +>3a1b78 52 1a 80 ed 20 b2 19 a2 23 08 20 88 17 4c be 1a +>3a1b88 20 6a 19 a2 23 08 20 88 17 4c be 1a a2 23 08 20 +>3a1b98 c6 17 fa 28 60 08 0b 8b 08 e2 20 48 a9 00 48 ab +>3a1ba8 68 28 08 c2 20 48 a9 00 08 5b 68 28 c2 30 a9 fd +>3a1bb8 5f 85 33 ab 2b 28 60 08 0b 08 c2 20 48 a9 00 08 +>3a1bc8 5b 68 28 c2 30 92 33 c6 33 c6 33 2b 28 60 08 c2 +>3a1bd8 30 29 ff 00 20 bf 1b 28 60 08 0b 08 c2 20 48 a9 +>3a1be8 00 08 5b 68 28 c2 30 e6 33 e6 33 b2 33 2b 28 60 +>3a1bf8 8b 0b 08 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 +>3a1c08 48 a9 00 48 ab 68 28 c2 20 85 23 a9 00 00 85 25 +>3a1c18 e2 20 a9 00 85 27 85 ea a9 3a 85 e9 c2 20 a9 52 +>3a1c28 1c 85 e7 20 9f 4e c2 20 a5 d7 85 23 a5 d9 85 25 +>3a1c38 e2 20 a9 00 85 27 85 ea a9 3a 85 e9 c2 20 a9 56 +>3a1c48 1c 85 e7 20 9f 4e 28 2b ab 60 45 52 52 00 45 52 +>3a1c58 4c 00 e2 20 c2 10 20 4e 02 af d3 08 00 0a c2 20 +>3a1c68 29 ff 00 a8 08 e2 20 48 a9 3a 48 ab 68 28 be ac +>3a1c78 1c 20 db 02 c2 20 a5 d7 f0 27 a2 da 1c 20 db 02 +>3a1c88 08 e2 20 48 a9 00 48 ab 68 28 c2 20 af d7 08 00 +>3a1c98 8f 23 08 00 a9 00 00 8f 25 08 00 20 e5 42 20 4e +>3a1ca8 02 4c 3d 25 de 1c e1 1c e7 1c f4 1c 02 1d 10 1d +>3a1cb8 23 1d 39 1d 49 1d 58 1d 65 1d 76 1d 85 1d 92 1d +>3a1cc8 a0 1d af 1d c0 1d d9 1d ed 1d 01 1e 17 1e 2b 1e +>3a1cd8 46 1e 20 61 74 00 4f 4b 00 42 72 65 61 6b 00 53 +>3a1ce8 79 6e 74 61 78 20 65 72 72 6f 72 00 4f 75 74 20 +>3a1cf8 6f 66 20 6d 65 6d 6f 72 79 00 54 79 70 65 20 6d +>3a1d08 69 73 6d 61 74 63 68 00 56 61 72 69 61 62 6c 65 +>3a1d18 20 6e 6f 74 20 66 6f 75 6e 64 00 4c 69 6e 65 20 +>3a1d28 6e 75 6d 62 65 72 20 6e 6f 74 20 66 6f 75 6e 64 +>3a1d38 00 53 74 61 63 6b 20 75 6e 64 65 72 66 6c 6f 77 +>3a1d48 00 53 74 61 63 6b 20 6f 76 65 72 66 6c 6f 77 00 +>3a1d58 4f 75 74 20 6f 66 20 72 61 6e 67 65 00 49 6c 6c +>3a1d68 65 67 61 6c 20 61 72 67 75 6d 65 6e 74 00 46 69 +>3a1d78 6c 65 20 6e 6f 74 20 66 6f 75 6e 64 00 4e 6f 74 +>3a1d88 20 61 20 6e 75 6d 62 65 72 00 4d 61 74 68 20 6f +>3a1d98 76 65 72 66 6c 6f 77 00 4d 61 74 68 20 75 6e 64 +>3a1da8 65 72 66 6c 6f 77 00 44 69 76 69 73 69 6f 6e 20 +>3a1db8 62 79 20 7a 65 72 6f 00 55 6e 61 62 6c 65 20 74 +>3a1dc8 6f 20 72 65 61 64 20 64 69 72 65 63 74 6f 72 79 +>3a1dd8 00 55 6e 61 62 6c 65 20 74 6f 20 6c 6f 61 64 20 +>3a1de8 66 69 6c 65 00 55 6e 61 62 6c 65 20 74 6f 20 73 +>3a1df8 61 76 65 20 66 69 6c 65 00 55 6e 61 62 6c 65 20 +>3a1e08 74 6f 20 64 65 6c 65 74 65 20 66 69 6c 65 00 43 +>3a1e18 6f 75 6c 64 20 6e 6f 74 20 66 69 6e 64 20 66 69 +>3a1e28 6c 65 00 43 6f 75 6c 64 20 6e 6f 74 20 75 70 64 +>3a1e38 61 74 65 20 64 69 72 65 63 74 6f 72 79 00 43 6f +>3a1e48 75 6c 64 20 6e 6f 74 20 63 6f 70 79 20 74 68 65 +>3a1e58 20 66 69 6c 65 00 08 0b 08 c2 20 48 a9 00 08 5b +>3a1e68 68 28 e2 20 a9 00 85 d2 2b 28 60 0b 08 08 c2 20 +>3a1e78 48 a9 00 08 5b 68 28 08 c2 20 a9 5a 1c 8f d4 08 +>3a1e88 00 e2 20 a9 3a 8f d6 08 00 28 20 8a 41 20 cb 3c +>3a1e98 64 31 28 2b 60 08 0b 08 c2 20 48 a9 00 08 5b 68 +>3a1ea8 28 c2 20 18 a5 00 69 01 00 85 00 e2 20 a5 02 69 +>3a1eb8 00 85 02 2b 28 60 08 0b 08 c2 20 48 a9 00 08 5b +>3a1ec8 68 28 e2 20 a7 00 f0 0f c9 20 f0 06 c9 09 f0 02 +>3a1ed8 80 05 20 9d 1e 80 ed 2b 28 60 08 e2 20 a7 00 f0 +>3a1ee8 09 c9 3a f0 05 20 9d 1e 80 f3 28 60 08 e2 20 64 +>3a1ef8 36 a7 00 f0 19 c5 37 f0 2c c9 9b f0 1e c9 9f f0 +>3a1f08 1a c9 9e f0 1a c9 a0 f0 16 20 9d 1e 80 e3 20 7a +>3a1f18 1f c2 20 a5 d7 f0 1d e2 20 80 d6 e6 36 80 ea c6 +>3a1f28 36 30 30 80 e4 a5 35 30 06 a5 36 f0 02 80 da 20 +>3a1f38 9d 1e 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a1f48 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a1f58 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a1f68 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a1f78 d4 08 08 c2 30 a0 00 00 b7 1a 85 0c 18 a5 1a 65 +>3a1f88 0c 85 1a a5 1c 69 00 00 85 1c a0 02 00 b7 1a 85 +>3a1f98 d7 18 a5 1a 69 04 00 85 00 a5 1c 69 00 00 85 02 +>3a1fa8 28 60 08 e2 20 48 20 be 1e 68 e2 20 c7 00 d0 08 +>3a1fb8 20 9d 1e 20 be 1e 28 60 08 c2 20 48 a9 00 08 5b +>3a1fc8 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 +>3a1fd8 f8 1b e2 20 dc d4 08 08 e2 20 20 be 1e e2 20 a7 +>3a1fe8 00 f0 10 c9 3a f0 0c c5 37 f0 05 20 9d 1e 80 ef +>3a1ff8 28 38 60 28 18 60 5a 08 e2 20 a0 00 00 b7 00 f0 +>3a2008 0d c9 3a f0 07 c9 20 d0 05 c8 80 f1 a9 00 28 7a +>3a2018 60 08 0b 8b 08 c2 20 48 a9 00 08 5b 68 28 20 68 +>3a2028 17 e2 20 a9 00 85 dc ad 8a 0f 30 4b a7 00 c9 3a +>3a2038 d0 03 20 9d 1e 20 be 1e a7 00 d0 03 4c c9 20 20 +>3a2048 59 03 b0 52 a7 00 10 10 20 0d 0b 85 0c c9 20 d0 +>3a2058 03 4c b7 20 a5 d2 f0 51 08 c2 20 48 a9 00 08 5b +>3a2068 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 +>3a2078 f8 1b e2 20 dc d4 08 08 c2 20 48 a9 00 08 5b 68 +>3a2088 28 e2 20 a9 01 8f d3 08 00 c2 20 29 ff 00 20 f8 +>3a2098 1b e2 20 dc d4 08 20 94 41 4c c9 20 08 e2 20 48 +>3a20a8 a9 00 48 ab 68 28 6c 2f 08 a5 0c c9 10 d0 a9 a7 +>3a20b8 00 20 ea 0a c2 20 85 2f 20 68 17 20 9d 1e 20 a4 +>3a20c8 20 ab 2b 28 60 08 58 20 5e 1e 20 9d 1b e2 20 9c +>3a20d8 8a 0f c2 20 a5 1a 85 00 a5 1c 85 02 4c 0e 21 08 +>3a20e8 c2 20 a0 02 00 b7 1a 85 d7 20 fe 12 e2 20 a5 dc +>3a20f8 c9 03 f0 12 c2 20 18 a5 1a 69 04 00 85 00 e2 20 +>3a2108 a5 1c 69 00 85 02 c2 20 20 19 20 e2 20 a5 dc c9 +>3a2118 03 f0 f3 c9 00 d0 31 e2 20 20 be 1e a7 00 f0 28 +>3a2128 c9 3a f0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a2138 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a2148 dc d4 08 20 9d 1e 80 be 28 60 08 58 e2 20 a9 80 +>3a2158 85 d2 9c 8a 0f 20 9d 1b c2 30 64 31 a0 02 00 b7 +>3a2168 1a f0 29 20 e7 20 e2 20 a5 dc c9 01 f0 1e c9 02 +>3a2178 f0 ea c9 03 f0 e6 c2 20 a0 00 00 18 a5 1a 77 1a +>3a2188 85 1a e2 20 a5 1c 69 00 85 1c 80 d0 e2 20 a9 00 +>3a2198 85 d2 28 60 08 c2 30 c2 20 a9 00 00 85 08 a9 36 +>3a21a8 00 85 0a c2 20 a0 02 00 b7 08 f0 31 c5 23 f0 1e +>3a21b8 b0 2b c2 20 a0 00 00 18 a5 08 77 08 85 0c e2 20 +>3a21c8 a5 0a 69 00 85 0a c2 20 a5 0c 85 08 80 d7 c2 20 +>3a21d8 a5 08 85 1a e2 20 a5 0a 85 1c 28 38 60 28 18 60 +>3a21e8 08 e2 20 a7 0c 87 08 c2 20 a5 0c c5 00 d0 08 e2 +>3a21f8 20 a5 0e c5 02 f0 26 c2 20 18 a5 0c 69 01 00 85 +>3a2208 0c e2 20 a5 0e 69 00 85 0e c2 20 18 a5 08 69 01 +>3a2218 00 85 08 e2 20 a5 0a 69 00 85 0a 80 c4 28 60 08 +>3a2228 e2 20 a7 0c 87 08 c2 20 a5 0c c5 00 d0 06 a5 0e +>3a2238 c5 02 f0 26 c2 20 38 a5 0c e9 01 00 85 0c e2 20 +>3a2248 a5 0e e9 00 85 0e c2 20 38 a5 08 e9 01 00 85 08 +>3a2258 e2 20 a5 0a e9 00 85 0a 80 c6 28 60 08 a0 00 00 +>3a2268 c2 20 18 a5 08 77 08 85 0c e2 20 a5 0a 69 00 85 +>3a2278 0e c2 20 18 a5 d9 69 04 00 85 00 e2 20 a5 db 69 +>3a2288 00 85 02 a0 00 00 c2 20 38 a5 d9 f7 08 85 d9 e2 +>3a2298 20 a5 db e9 00 85 db 20 e8 21 20 8a 41 28 60 08 +>3a22a8 08 c2 20 48 a9 00 08 5b 68 28 c2 30 a0 02 00 97 +>3a22b8 d9 18 a5 d9 69 04 00 85 08 e2 20 a5 db 69 00 85 +>3a22c8 0a e2 20 a0 00 00 b7 1a 97 08 f0 03 c8 80 f7 c2 +>3a22d8 20 98 18 69 05 00 85 0c c2 20 a0 00 00 a5 0c 97 +>3a22e8 d9 c2 20 18 a5 d9 65 0c 85 0c e2 20 a5 db 69 00 +>3a22f8 85 db c2 20 a5 0c 85 d9 c2 20 a0 00 00 a9 00 00 +>3a2308 97 d9 c8 c0 05 00 d0 f8 20 8a 41 28 60 0b 08 08 +>3a2318 c2 20 48 a9 00 08 5b 68 28 c2 30 a9 00 00 85 08 +>3a2328 a9 36 00 85 0a a0 02 00 b7 08 f0 1d c5 d7 f0 25 +>3a2338 b0 1d a0 00 00 18 a5 08 77 08 85 0c a5 0a 69 00 +>3a2348 00 85 0a a5 0c 85 08 80 dc a9 00 00 28 2b 60 a9 +>3a2358 01 00 28 2b 60 a9 02 00 28 2b 60 08 c2 30 a9 05 +>3a2368 00 85 10 a0 00 00 e2 20 b7 1a f0 07 c2 20 e6 10 +>3a2378 c8 80 f3 c2 20 a5 08 85 00 a5 0a 85 02 18 a5 d9 +>3a2388 69 04 00 85 0c a5 db 69 00 00 85 0e 18 a5 d9 65 +>3a2398 10 85 d9 a5 db 69 00 00 85 db 18 a5 d9 69 04 00 +>3a23a8 85 08 a5 db 69 00 00 85 0a 20 27 22 c2 20 a5 10 +>3a23b8 a0 00 00 97 00 a5 d7 a0 02 00 97 00 18 a5 00 69 +>3a23c8 04 00 85 00 a5 02 69 00 00 85 02 a0 00 00 e2 20 +>3a23d8 b7 1a 97 00 f0 03 c8 80 f7 20 8a 41 28 60 08 c2 +>3a23e8 30 85 d7 20 15 23 c9 00 00 f0 2c c9 01 00 f0 22 +>3a23f8 c2 20 a5 08 48 a5 0a 48 20 64 22 68 85 0a 68 85 +>3a2408 08 a5 1a 85 00 a5 1c 85 02 20 be 1e e2 20 a7 00 +>3a2418 f0 0a 20 63 23 80 05 a5 d7 20 a7 22 28 60 0b 08 +>3a2428 08 c2 20 48 a9 00 08 5b 68 28 e2 20 c2 10 a2 00 +>3a2438 00 bd 00 4f f0 03 e8 80 f8 86 0c c2 30 8a c9 02 +>3a2448 00 90 12 3a 18 69 00 4f aa 18 65 8f a8 a5 0c 3a +>3a2458 8b 44 00 00 ab c2 20 a6 55 a0 00 4f a5 8f 8b 54 +>3a2468 00 3a ab e2 20 a5 0c c9 02 90 18 a6 8f a9 22 9d +>3a2478 00 4f e8 bd 00 4f d0 fa a9 22 9d 00 4f a9 00 e8 +>3a2488 9d 00 4f 28 2b 60 da 5a 8b 0b 08 08 c2 20 48 a9 +>3a2498 00 08 5b 68 28 e2 20 c2 10 ad 00 4f c9 23 f0 0a +>3a24a8 c9 7c f0 17 28 2b ab 7a fa 60 c2 20 a9 03 00 85 +>3a24b8 8f a9 d4 24 85 55 20 26 24 80 e9 c2 20 a9 04 00 +>3a24c8 85 8f a9 d8 24 85 55 20 26 24 80 d8 44 49 52 00 +>3a24d8 42 52 55 4e 00 8b 08 20 e4 00 08 e2 20 48 a9 3a +>3a24e8 48 ab 68 28 a2 3b d2 20 db 02 28 ab 60 08 e2 30 +>3a24f8 a9 01 20 1c 00 20 db 00 f0 06 c9 0d f0 02 80 f5 +>3a2508 28 60 0b 08 08 c2 20 48 a9 00 08 5b 68 28 c2 30 +>3a2518 64 d7 a9 00 4f 85 1a a9 00 00 85 1c 20 0f 08 c2 +>3a2528 20 a5 d7 d0 05 20 cd 20 80 07 20 e6 23 28 2b 38 +>3a2538 60 28 2b 18 60 c2 30 a2 ff fe 9a 20 dd 24 20 08 +>3a2548 00 20 0c 00 a9 00 00 20 1c 00 20 8e 24 20 0a 25 +>3a2558 b0 ec 80 e7 08 e2 20 20 1a 07 c9 00 f0 2c c9 01 +>3a2568 f0 2d c9 02 f0 1f 08 c2 20 48 a9 00 08 5b 68 28 +>3a2578 e2 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b +>3a2588 e2 20 dc d4 08 20 57 14 80 08 20 8e 4f 80 03 20 +>3a2598 31 52 28 60 08 e2 20 20 cc 06 c9 00 f0 23 c9 01 +>3a25a8 f0 24 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 +>3a25b8 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 +>3a25c8 08 20 a0 4f 80 03 20 26 52 28 60 08 e2 20 20 cc +>3a25d8 06 c9 00 f0 23 c9 01 f0 24 08 c2 20 48 a9 00 08 +>3a25e8 5b 68 28 e2 20 a9 04 8f d3 08 00 c2 20 29 ff 00 +>3a25f8 20 f8 1b e2 20 dc d4 08 20 b2 4f 80 03 20 c7 52 +>3a2608 28 60 20 36 06 20 67 06 20 7c 52 60 a5 23 8f 1a +>3a2618 01 00 a5 29 8f 18 01 00 af 1e 01 00 85 23 60 08 +>3a2628 20 c8 04 20 f9 04 c2 20 a5 23 25 29 85 23 a5 25 +>3a2638 25 2b 85 25 28 60 08 20 c8 04 20 f9 04 c2 20 a5 +>3a2648 23 05 29 85 23 a5 25 05 2b 85 25 28 60 08 20 c8 +>3a2658 04 c2 20 a5 23 49 ff ff 85 23 a5 25 49 ff ff 85 +>3a2668 25 28 60 08 e2 20 20 1a 07 c9 00 f0 2c c9 01 f0 +>3a2678 2d c9 02 f0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a2688 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a2698 20 dc d4 08 20 df 15 80 08 20 b3 50 80 03 20 0c +>3a26a8 58 28 60 08 e2 20 20 1a 07 c9 00 f0 2c c9 01 f0 +>3a26b8 2d c9 02 f0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a26c8 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a26d8 20 dc d4 08 20 f6 15 80 08 20 d4 50 80 03 20 21 +>3a26e8 58 28 60 08 e2 20 20 1a 07 c9 00 f0 2c c9 01 f0 +>3a26f8 2d c9 02 f0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a2708 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a2718 20 dc d4 08 20 0d 16 80 08 20 01 51 80 03 20 36 +>3a2728 58 28 60 08 e2 20 20 1a 07 c9 00 f0 2c c9 01 f0 +>3a2738 2d c9 02 f0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a2748 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a2758 20 dc d4 08 20 24 16 80 08 20 1f 51 80 03 20 75 +>3a2768 58 28 60 08 e2 20 20 1a 07 c9 00 f0 2c c9 01 f0 +>3a2778 2d c9 02 f0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a2788 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a2798 20 dc d4 08 20 3b 16 80 08 20 3d 51 80 03 20 60 +>3a27a8 58 28 60 08 e2 20 20 1a 07 c9 00 f0 2c c9 01 f0 +>3a27b8 2d c9 02 f0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a27c8 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a27d8 20 dc d4 08 20 52 16 80 08 20 6a 51 80 03 20 4b +>3a27e8 58 28 60 08 e2 20 a5 27 c9 00 f0 2d c9 01 f0 1f +>3a27f8 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f d3 +>3a2808 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 e2 +>3a2818 20 a5 26 49 80 85 26 80 16 c2 20 a5 23 49 ff ff +>3a2828 85 23 a5 25 49 ff ff 85 25 e6 23 d0 02 e6 25 28 +>3a2838 60 08 e2 20 20 a6 1a 20 da 05 20 25 04 a5 23 0a +>3a2848 0a 0a 0a 05 29 48 a9 2c 20 aa 1f 20 a6 1a 20 da +>3a2858 05 20 25 04 a5 23 0a 0a 0a 0a 05 29 48 a9 2c 20 +>3a2868 aa 1f 20 a6 1a 20 da 05 20 25 04 a5 23 0a 0a 0a +>3a2878 0a 05 29 48 af 0e 08 af 09 0c 8f 0e 08 af 68 8f +>3a2888 00 08 af 68 8f 02 08 af 68 8f 04 08 af af 0e 08 +>3a2898 af 29 f7 8f 0e 08 af 20 e2 1e 28 60 08 e2 20 20 +>3a28a8 a6 1a 20 da 05 20 25 04 a5 23 0a 0a 0a 0a 05 29 +>3a28b8 48 a9 2c 20 aa 1f 20 a6 1a 20 da 05 20 25 04 a5 +>3a28c8 23 0a 0a 0a 0a 05 29 48 a9 2c 20 aa 1f 20 a6 1a +>3a28d8 20 c8 04 20 5b 04 c2 20 a5 23 85 92 a5 29 85 23 +>3a28e8 20 25 04 e2 20 a5 23 0a 0a 0a 0a 05 29 48 c2 20 +>3a28f8 a5 92 85 23 20 25 04 e2 20 a5 23 0a 0a 0a 0a 05 +>3a2908 29 48 af 0e 08 af 09 0c 8f 0e 08 af 68 8f 0f 08 +>3a2918 af 68 8f 0a 08 af 68 8f 09 08 af 68 8f 06 08 af +>3a2928 af 0e 08 af 29 f7 8f 0e 08 af 20 e2 1e 28 60 08 +>3a2938 e2 20 48 20 a6 1a 20 da 05 e2 20 a5 23 29 0f 0a +>3a2948 0a 0a 0a 83 01 a9 2c 20 aa 1f 20 a6 1a 20 da 05 +>3a2958 a5 23 29 0f 03 01 8f 1e 00 00 e2 20 68 28 60 08 +>3a2968 c2 20 f4 00 00 e2 20 20 a6 1a 20 da 05 a5 23 83 +>3a2978 01 a9 2c 20 aa 1f 20 a6 1a 20 da 05 a5 23 83 02 +>3a2988 a9 2c 20 aa 1f 20 a6 1a 20 da 05 a5 23 8f 0d 00 +>3a2998 af a3 02 8f 0e 00 af a3 01 8f 0f 00 af c2 20 68 +>3a29a8 28 60 08 c2 20 f4 00 00 e2 20 20 a6 1a 20 c8 04 +>3a29b8 a5 23 f0 16 a9 01 8f 04 00 af a9 20 8f 08 00 af +>3a29c8 8f 09 00 af 22 2c 11 00 80 0a a9 00 8f 04 00 af +>3a29d8 22 2c 11 00 a9 2c 85 37 20 df 1f 90 39 20 9d 1e +>3a29e8 20 a6 1a 20 da 05 a5 23 83 01 a9 2c 20 aa 1f 20 +>3a29f8 a6 1a 20 da 05 a5 23 83 02 a9 2c 20 aa 1f 20 a6 +>3a2a08 1a 20 da 05 a5 23 8f 05 00 af a3 02 8f 06 00 af +>3a2a18 a3 01 8f 07 00 af c2 20 68 28 60 08 c2 20 3b 38 +>3a2a28 e9 05 00 1b e2 20 20 a6 1a 20 da 05 c9 0a 90 1f +>3a2a38 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f d3 +>3a2a48 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 a5 +>3a2a58 23 83 01 a9 2c 20 aa 1f 20 a6 1a 20 da 05 a5 23 +>3a2a68 83 02 a9 2c 20 aa 1f 20 a6 1a 20 da 05 a5 23 83 +>3a2a78 03 a9 2c 20 aa 1f 20 a6 1a 20 da 05 a5 23 83 04 +>3a2a88 a9 2c 20 aa 1f 20 a6 1a 20 da 05 a5 23 83 05 a9 +>3a2a98 af 85 a0 a3 01 0a c2 20 29 ff 00 aa bf da 2a 3a +>3a2aa8 85 9e e2 20 a3 02 0a 0a 18 65 9e 85 9e a5 9f 69 +>3a2ab8 00 85 9f a0 02 00 a3 03 97 9e a0 01 00 a3 04 97 +>3a2ac8 9e a0 00 00 a3 05 97 9e c2 20 3b 18 69 05 00 1b +>3a2ad8 28 60 00 20 00 24 00 28 00 2c 00 30 00 34 00 38 +>3a2ae8 00 3c 40 1f 80 1f da 5a 08 20 a6 1a 20 c8 04 c2 +>3a2af8 20 a5 23 89 00 01 d0 17 af 00 00 af 89 00 01 f0 +>3a2b08 0e e2 20 a9 00 8f 01 00 af a9 01 8f 01 00 af c2 +>3a2b18 20 a5 23 8f 00 00 af e2 20 a5 24 c2 20 29 03 00 +>3a2b28 0a aa c2 20 bf 75 2b 3a 8f 10 f0 3a bf 7d 2b 3a +>3a2b38 8f 12 f0 3a af 10 f0 3a 8f 08 01 00 af 12 f0 3a +>3a2b48 8f 0a 01 00 af 0c 01 00 8f 14 f0 3a e2 20 af 0e +>3a2b58 01 00 8f 16 f0 3a 22 2c 11 00 c2 20 af 1a 00 00 +>3a2b68 aa af 1c 00 00 a8 20 20 00 28 7a fa 60 80 02 20 +>3a2b78 03 40 01 90 01 e0 01 58 02 f0 00 2c 01 50 00 64 +>3a2b88 00 28 00 32 00 3c 00 4b 00 1e 00 32 00 48 00 5c +>3a2b98 00 20 00 2a 00 34 00 43 00 16 00 34 00 da 08 c2 +>3a2ba8 30 c9 02 00 b0 1c 0a 0a aa bf 00 f0 3a 85 9e bf +>3a2bb8 02 f0 3a 85 a0 c9 f0 00 b0 08 c9 b0 00 90 03 28 +>3a2bc8 fa 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 +>3a2bd8 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 +>3a2be8 08 da 08 c2 30 c9 02 00 b0 17 0a 0a aa bf 08 f0 +>3a2bf8 3a 85 9e bf 0a f0 3a 85 a0 c9 40 00 b0 03 28 fa +>3a2c08 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f +>3a2c18 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a2c28 08 c2 30 3b 38 e9 07 00 1b 20 a6 1a 20 da 05 c2 +>3a2c38 20 a5 23 c9 02 00 b0 59 83 01 e2 20 a9 2c 20 aa +>3a2c48 1f 20 a6 1a 20 da 05 a5 23 83 03 a9 2c 20 aa 1f +>3a2c58 20 a6 1a 20 da 05 a3 01 0a 0a 0a aa a3 03 d0 05 +>3a2c68 a5 23 0a 80 04 a5 23 38 2a 9f 00 01 af c2 20 a9 +>3a2c78 2c 00 85 37 20 df 1f b0 37 c2 20 08 c2 20 a9 00 +>3a2c88 00 85 23 a9 b0 00 85 25 e2 20 a9 00 85 27 28 80 +>3a2c98 27 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f +>3a2ca8 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a2cb8 c2 20 20 9d 1e 20 a6 1a c2 20 a3 01 0a 0a aa a5 +>3a2cc8 23 9f 00 f0 3a 9f 08 f0 3a 83 04 a5 25 9f 02 f0 +>3a2cd8 3a 38 e9 b0 00 9f 0a f0 3a 83 06 a3 01 0a 0a 0a +>3a2ce8 aa e2 20 a3 04 9f 01 01 af a3 05 9f 02 01 af a3 +>3a2cf8 06 9f 03 01 af a9 00 9f 04 01 af 9f 05 01 af c2 +>3a2d08 30 3b 18 69 07 00 1b 28 60 08 c2 20 48 a9 00 08 +>3a2d18 5b 68 28 e2 20 a9 0a 8f d3 08 00 c2 20 29 ff 00 +>3a2d28 20 f8 1b e2 20 dc d4 08 08 c2 20 20 a6 1a 20 da +>3a2d38 05 a5 23 20 e9 2b c2 20 a5 9e 8f 05 04 af af 14 +>3a2d48 f0 3a 8f 08 04 af e2 20 a5 a0 8f 07 04 af af 16 +>3a2d58 f0 3a 8f 0a 04 af a9 00 8f 01 04 af a9 85 8f 00 +>3a2d68 04 af af 01 04 af 30 fa a9 00 8f 00 04 af 28 60 +>3a2d78 08 c2 20 a5 5d 8f 08 01 00 af 10 f0 3a 8f 0a 01 +>3a2d88 00 18 af 0c 01 00 65 59 85 0c af 0e 01 00 69 00 +>3a2d98 00 85 0e 18 a5 0c 65 9e 85 0c a5 0e 65 a0 85 0e +>3a2da8 e2 20 a5 55 87 0c 28 60 c2 20 a9 01 00 85 dd 38 +>3a2db8 a5 61 e5 59 85 69 10 0b 49 ff ff 1a 85 69 a9 ff +>3a2dc8 ff 85 dd a9 01 00 85 df 38 a5 65 e5 5d 85 6d 10 +>3a2dd8 0b 49 ff ff 1a 85 6d a9 ff ff 85 df a5 6d c5 69 +>3a2de8 b0 04 a5 69 80 06 a5 6d 49 ff ff 1a 48 0a 68 6a +>3a2df8 85 71 20 78 2d a5 59 c5 61 d0 06 a5 5d c5 65 f0 +>3a2e08 36 a5 71 85 75 a5 69 49 ff ff 1a c5 75 10 10 f0 +>3a2e18 0e 38 a5 71 e5 6d 85 71 18 a5 59 65 dd 85 59 a5 +>3a2e28 75 c5 6d 10 cd f0 cb 18 a5 71 65 69 85 71 18 a5 +>3a2e38 5d 65 df 85 5d 80 bb 60 08 c2 20 3b 38 e9 04 00 +>3a2e48 1b 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 +>3a2e58 00 48 ab 68 28 c2 30 20 a6 1a 20 da 05 83 01 a9 +>3a2e68 2c 00 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 01 a9 +>3a2e78 2c 00 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 03 a9 +>3a2e88 2c 00 20 aa 1f 20 a6 1a 20 da 05 a5 23 85 55 a3 +>3a2e98 01 85 59 a3 03 85 5d a3 01 20 a5 2b 20 78 2d c2 +>3a2ea8 20 3b 18 69 04 00 1b 28 60 08 c2 20 3b 38 e9 0a +>3a2eb8 00 1b 08 c2 20 48 a9 00 08 5b 68 28 08 e2 20 48 +>3a2ec8 a9 00 48 ab 68 28 c2 30 20 a6 1a 20 da 05 83 01 +>3a2ed8 a9 2c 00 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 03 +>3a2ee8 a9 2c 00 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 05 +>3a2ef8 a9 2c 00 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 07 +>3a2f08 a9 2c 00 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 09 +>3a2f18 a9 2c 00 20 aa 1f 20 a6 1a 20 da 05 a5 23 85 55 +>3a2f28 a3 03 85 59 a3 05 85 5d a3 07 85 61 a3 09 85 65 +>3a2f38 a3 01 20 a5 2b 20 b0 2d c2 20 3b 18 69 0a 00 1b +>3a2f48 28 60 08 c2 20 3b 38 e9 0c 00 1b 08 c2 20 48 a9 +>3a2f58 00 08 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 c2 +>3a2f68 30 20 a6 1a 20 da 05 83 01 a9 2c 00 20 aa 1f 20 +>3a2f78 a6 1a 20 c8 04 a5 23 83 03 a9 2c 00 20 aa 1f 20 +>3a2f88 a6 1a 20 c8 04 a5 23 83 05 a9 2c 00 20 aa 1f 20 +>3a2f98 a6 1a 20 c8 04 a5 23 83 07 a9 2c 00 20 aa 1f 20 +>3a2fa8 a6 1a 20 c8 04 a5 23 83 09 a9 2c 00 20 aa 1f 20 +>3a2fb8 a6 1a 20 da 05 a5 23 83 0b a3 01 20 e9 2b a9 07 +>3a2fc8 00 8f 00 04 af c2 20 a3 05 8f 00 01 00 af 10 f0 +>3a2fd8 3a 8f 02 01 00 18 af 04 01 00 63 03 85 0c e2 20 +>3a2fe8 af 06 01 00 69 00 85 0e c2 20 18 a5 9e 65 0c 8f +>3a2ff8 05 04 af e2 20 a5 a0 65 0e 8f 07 04 af c2 20 38 +>3a3008 a3 07 e3 03 85 0c 8f 08 04 af 38 af 10 f0 3a 8f +>3a3018 0e 04 af 38 a3 09 e3 05 8f 0a 04 af e2 20 a3 0b +>3a3028 8f 01 04 af af 00 04 af 09 80 8f 00 04 af af 01 +>3a3038 04 af 30 fa a9 00 8f 00 04 af c2 20 3b 18 69 0c +>3a3048 00 1b 28 60 08 c2 20 c9 40 00 b0 13 0a 0a 0a 18 +>3a3058 69 00 0c 85 9e a9 af 00 69 00 00 85 a0 28 60 08 +>3a3068 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 +>3a3078 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 +>3a3088 20 3b 38 e9 03 00 1b c2 30 20 a6 1a 20 da 05 83 +>3a3098 01 a9 2c 00 20 aa 1f e2 20 20 a6 1a 20 da 05 a5 +>3a30a8 23 c9 08 b0 56 83 03 a9 2c 20 aa 1f 20 a6 1a 20 +>3a30b8 c8 04 c2 20 38 a5 23 e9 00 00 85 23 a5 25 e9 b0 +>3a30c8 00 85 25 30 36 c2 20 a3 01 aa 20 4c 30 a5 23 a0 +>3a30d8 01 00 97 9e e2 20 a5 25 c8 c8 97 9e bf 18 f0 3a +>3a30e8 29 f1 85 0c a3 03 0a 29 0e 05 0c 87 9e 9f 18 f0 +>3a30f8 3a c2 20 3b 18 69 03 00 1b 28 60 08 c2 20 48 a9 +>3a3108 00 08 5b 68 28 e2 20 a9 09 8f d3 08 00 c2 20 29 +>3a3118 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 20 3b 38 e9 +>3a3128 04 00 1b c2 30 20 a6 1a 20 da 05 83 01 a9 2c 00 +>3a3138 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 03 a9 2c 00 +>3a3148 20 aa 1f 20 a6 1a 20 c8 04 a3 01 20 4c 30 a3 03 +>3a3158 a0 04 00 97 9e a5 23 a0 06 00 97 9e c2 20 3b 18 +>3a3168 69 04 00 1b 28 60 08 c2 20 3b 38 e9 03 00 1b c2 +>3a3178 30 20 a6 1a 20 da 05 83 01 a9 2c 00 20 aa 1f e2 +>3a3188 20 20 a6 1a 20 c8 04 a5 23 d0 04 83 03 80 04 a9 +>3a3198 01 83 03 a9 2c 85 37 20 df 1f b0 20 c2 30 a3 01 +>3a31a8 aa 20 4c 30 e2 20 bf 18 f0 3a 29 fe 85 0c a3 03 +>3a31b8 29 01 05 0c 9f 18 f0 3a 87 9e 80 36 c2 30 20 9d +>3a31c8 1e 20 a6 1a 20 da 05 a5 23 c9 08 00 b0 2e 0a 0a +>3a31d8 0a 0a 85 0c a3 01 aa 20 4c 30 e2 20 a3 03 29 01 +>3a31e8 05 0c 85 0c bf 18 f0 3a 29 8e 05 0c 87 9e 9f 18 +>3a31f8 f0 3a c2 20 3b 18 69 03 00 1b 28 60 08 c2 20 48 +>3a3208 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 00 c2 20 +>3a3218 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 20 c9 04 +>3a3228 00 b0 19 8d 00 01 a9 04 00 8d 02 01 18 ad 04 01 +>3a3238 69 80 02 85 9e a9 af 00 85 a0 28 60 08 c2 20 48 +>3a3248 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 00 c2 20 +>3a3258 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 20 c9 04 +>3a3268 00 b0 19 8d 00 01 a9 0c 00 8d 02 01 18 ad 04 01 +>3a3278 69 00 02 85 9e a9 af 00 85 a0 28 60 08 c2 20 48 +>3a3288 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 00 c2 20 +>3a3298 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 20 3b 38 +>3a32a8 e9 06 00 1b c2 20 20 a6 1a 20 da 05 a5 23 83 01 +>3a32b8 a9 2c 00 20 aa 1f 20 a6 1a 20 da 05 a5 23 83 03 +>3a32c8 a9 2c 00 20 aa 1f 20 a6 1a 20 da 05 a5 23 83 05 +>3a32d8 a9 2c 00 20 aa 1f 20 a6 1a 20 c8 04 a3 01 20 23 +>3a32e8 32 a5 23 87 9e e2 20 38 a5 25 e9 b0 a0 02 00 97 +>3a32f8 9e a3 05 d0 0d e2 20 a3 03 29 07 a0 03 00 97 9e +>3a3308 80 0d e2 20 a3 03 29 07 09 08 a0 03 00 97 9e c2 +>3a3318 20 3b 18 69 06 00 1b 28 60 08 c2 20 3b 38 e9 06 +>3a3328 00 1b c2 20 20 a6 1a 20 da 05 a5 23 83 01 a9 2c +>3a3338 00 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 03 a9 2c +>3a3348 00 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 05 a9 2c +>3a3358 00 20 aa 1f 20 a6 1a 20 c8 04 a3 01 20 63 32 a5 +>3a3368 23 a0 01 00 97 9e e2 20 38 a5 25 e9 b0 c8 c8 97 +>3a3378 9e c2 20 a3 03 a0 04 00 97 9e a3 05 a0 06 00 97 +>3a3388 9e c2 20 3b 18 69 06 00 1b 28 60 08 c2 20 f4 00 +>3a3398 00 c2 20 20 a6 1a 20 da 05 a5 23 83 01 a9 2c 00 +>3a33a8 20 aa 1f 20 a6 1a 20 c8 04 a3 01 20 63 32 a5 23 +>3a33b8 d0 06 e2 20 a9 00 80 04 e2 20 a9 01 e2 20 a0 00 +>3a33c8 00 97 9e c2 20 68 28 60 08 c2 20 3b 38 e9 04 00 +>3a33d8 1b c2 20 20 a6 1a 20 da 05 a5 23 83 01 a9 2c 00 +>3a33e8 20 aa 1f 20 a6 1a 20 c8 04 a5 23 83 03 a9 2c 00 +>3a33f8 20 aa 1f 20 a6 1a 20 c8 04 a3 01 20 63 32 a5 23 +>3a3408 a0 0a 00 97 9e a3 03 a0 08 00 97 9e c2 20 3b 18 +>3a3418 69 04 00 1b 28 60 0b 08 08 c2 20 48 a9 00 08 5b +>3a3428 68 28 e2 20 a9 00 8f 58 f0 3a af 5c f0 3a c9 b0 +>3a3438 b0 1c 8f 24 04 af af 5b f0 3a 8f 23 04 af af 5a +>3a3448 f0 3a 8f 22 04 af a9 10 8f 58 f0 3a 80 17 38 e9 +>3a3458 b0 8f 04 04 af af 5b f0 3a 8f 03 04 af af 5a f0 +>3a3468 3a 8f 02 04 af af 59 f0 3a d0 3c af 58 f0 3a f0 +>3a3478 1b af 5d f0 3a 8f 28 04 af af 5e f0 3a 8f 29 04 +>3a3488 af af 5f f0 3a 8f 2a 04 af 82 8b 00 af 5d f0 3a +>3a3498 8f 08 04 af af 5e f0 3a 8f 09 04 af af 5f f0 3a +>3a34a8 8f 0a 04 af 82 70 00 af 58 f0 3a 09 01 8f 58 f0 +>3a34b8 3a 89 10 f0 32 af 60 f0 3a 8f 28 04 af af 61 f0 +>3a34c8 3a 8f 29 04 af af 62 f0 3a 8f 2a 04 af af 63 f0 +>3a34d8 3a 8f 2b 04 af af 64 f0 3a 8f 2c 04 af af 65 f0 +>3a34e8 3a 8f 2d 04 af 80 30 af 60 f0 3a 8f 08 04 af af +>3a34f8 61 f0 3a 8f 09 04 af af 62 f0 3a 8f 0a 04 af af +>3a3508 63 f0 3a 8f 0b 04 af af 64 f0 3a 8f 0c 04 af af +>3a3518 65 f0 3a 8f 0d 04 af e2 20 af 69 f0 3a c9 b0 b0 +>3a3528 20 8f 27 04 af af 68 f0 3a 8f 26 04 af af 67 f0 +>3a3538 3a 8f 25 04 af af 58 f0 3a 09 20 8f 58 f0 3a 80 +>3a3548 17 38 e9 b0 8f 07 04 af af 68 f0 3a 8f 06 04 af +>3a3558 af 67 f0 3a 8f 05 04 af af 66 f0 3a d0 3e af 58 +>3a3568 f0 3a 89 20 f0 1b af 6a f0 3a 8f 28 04 af af 6b +>3a3578 f0 3a 8f 29 04 af af 6c f0 3a 8f 2a 04 af 82 8b +>3a3588 00 af 6a f0 3a 8f 08 04 af af 6b f0 3a 8f 09 04 +>3a3598 af af 6c f0 3a 8f 0a 04 af 82 70 00 af 58 f0 3a +>3a35a8 09 02 8f 58 f0 3a 89 20 f0 32 af 6d f0 3a 8f 28 +>3a35b8 04 af af 6e f0 3a 8f 29 04 af af 6f f0 3a 8f 2a +>3a35c8 04 af af 70 f0 3a 8f 2b 04 af af 71 f0 3a 8f 2e +>3a35d8 04 af af 72 f0 3a 8f 2f 04 af 80 30 af 6d f0 3a +>3a35e8 8f 08 04 af af 6e f0 3a 8f 09 04 af af 6f f0 3a +>3a35f8 8f 0a 04 af af 70 f0 3a 8f 0b 04 af af 71 f0 3a +>3a3608 8f 0e 04 af af 72 f0 3a 8f 0f 04 af af 58 f0 3a +>3a3618 29 30 f0 43 c9 10 f0 76 c9 20 d0 03 82 8a 00 af +>3a3628 58 f0 3a 29 03 f0 23 c9 03 f0 23 08 c2 20 48 a9 +>3a3638 00 08 5b 68 28 e2 20 a9 0a 8f d3 08 00 c2 20 29 +>3a3648 ff 00 20 f8 1b e2 20 dc d4 08 a9 01 80 02 a9 03 +>3a3658 8f 20 04 af 82 7d 00 af 58 f0 3a 29 03 f0 23 c9 +>3a3668 03 f0 23 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a3678 0a 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a3688 d4 08 a9 01 80 02 a9 03 8f 00 04 af 80 34 af 58 +>3a3698 f0 3a 29 01 0a 09 11 8f 20 04 af af 58 f0 3a 29 +>3a36a8 02 09 11 8f 00 04 af 80 19 af 58 f0 3a 29 02 09 +>3a36b8 21 8f 20 04 af af 58 f0 3a 29 01 0a 09 21 8f 00 +>3a36c8 04 af af 00 04 af 09 80 8f 00 04 af af 58 f0 3a +>3a36d8 29 30 f0 0f af 20 04 af 09 80 8f 20 04 af ea ea +>3a36e8 ea ea ea af 01 04 af 89 80 d0 f8 a9 00 8f 20 04 +>3a36f8 af 8f 00 04 af 28 2b 60 0b 08 e2 20 c2 10 a9 00 +>3a3708 a2 00 00 8f 59 f0 3a e8 e0 1a 00 d0 f6 20 fe 1f +>3a3718 c9 e6 f0 23 c9 e7 f0 5e 08 c2 20 48 a9 00 08 5b +>3a3728 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 +>3a3738 f8 1b e2 20 dc d4 08 20 aa 1f 20 a6 1a 20 c8 04 +>3a3748 c2 20 a5 23 8f 5a f0 3a e2 20 a5 25 8f 5c f0 3a +>3a3758 a9 2c 20 aa 1f 20 a6 1a 20 c8 04 c2 20 a5 23 8f +>3a3768 5d f0 3a e2 20 a5 25 8f 5f f0 3a e2 20 a9 00 8f +>3a3778 59 f0 3a 82 74 00 20 aa 1f 20 a6 1a 20 c8 04 c2 +>3a3788 20 a5 23 8f 5a f0 3a e2 20 a5 25 8f 5c f0 3a a9 +>3a3798 2c 20 aa 1f 20 a6 1a 20 84 05 c2 20 a5 23 8f 60 +>3a37a8 f0 3a 8d 00 01 a9 2c 00 20 aa 1f 20 a6 1a 20 84 +>3a37b8 05 c2 20 a5 23 8f 62 f0 3a 8d 02 01 a9 2c 00 20 +>3a37c8 aa 1f 20 a6 1a 20 84 05 c2 20 a5 23 8f 64 f0 3a +>3a37d8 c2 20 ad 04 01 8f 5d f0 3a e2 20 ad 06 01 8f 5f +>3a37e8 f0 3a e2 20 a9 01 8f 59 f0 3a e2 20 a9 9c 20 aa +>3a37f8 1f 20 fe 1f c9 e6 f0 23 c9 e7 f0 5e 08 c2 20 48 +>3a3808 a9 00 08 5b 68 28 e2 20 a9 02 8f d3 08 00 c2 20 +>3a3818 29 ff 00 20 f8 1b e2 20 dc d4 08 20 aa 1f 20 a6 +>3a3828 1a 20 c8 04 c2 20 a5 23 8f 67 f0 3a e2 20 a5 25 +>3a3838 8f 69 f0 3a a9 2c 20 aa 1f 20 a6 1a 20 c8 04 c2 +>3a3848 20 a5 23 8f 6a f0 3a e2 20 a5 25 8f 6c f0 3a e2 +>3a3858 20 a9 00 8f 66 f0 3a 82 74 00 20 aa 1f 20 a6 1a +>3a3868 20 c8 04 c2 20 a5 23 8f 67 f0 3a e2 20 a5 25 8f +>3a3878 69 f0 3a a9 2c 20 aa 1f 20 a6 1a 20 84 05 c2 20 +>3a3888 a5 23 8f 6d f0 3a 8d 00 01 a9 2c 00 20 aa 1f 20 +>3a3898 a6 1a 20 84 05 c2 20 a5 23 8f 6f f0 3a 8d 02 01 +>3a38a8 a9 2c 00 20 aa 1f 20 a6 1a 20 84 05 c2 20 a5 23 +>3a38b8 8f 71 f0 3a c2 20 ad 04 01 8f 6a f0 3a e2 20 ad +>3a38c8 06 01 8f 6c f0 3a e2 20 a9 01 8f 66 f0 3a c2 20 +>3a38d8 af 5d f0 3a cf 6a f0 3a d0 14 e2 20 af 5f f0 3a +>3a38e8 cf 6c f0 3a d0 08 c2 20 20 1e 34 28 2b 60 08 c2 +>3a38f8 20 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f d3 08 00 +>3a3908 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 30 +>3a3918 20 a6 1a 20 da 05 a5 23 48 a9 2c 00 20 aa 1f 20 +>3a3928 a6 1a 20 da 05 a4 23 fa 20 20 00 28 60 08 20 be +>3a3938 1e e2 20 a7 00 d0 03 4c da 39 c9 3a d0 03 4c da +>3a3948 39 c9 22 d0 0b 20 b2 19 20 c5 42 a9 3b 20 aa 1f +>3a3958 20 59 03 90 41 20 3c 4f 90 3c a9 3f 20 18 00 a9 +>3a3968 20 20 18 00 20 10 00 e2 20 a5 ea c9 02 f0 46 c9 +>3a3978 00 f0 62 c9 01 f0 5d 08 c2 20 48 a9 00 08 5b 68 +>3a3988 28 e2 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 +>3a3998 1b e2 20 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 +>3a39a8 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b +>3a39b8 e2 20 dc d4 08 c2 20 a9 00 4c 85 23 a9 00 00 85 +>3a39c8 25 e2 20 a9 02 85 27 c2 20 20 9f 4e a9 0d 00 20 +>3a39d8 18 00 28 60 ea c2 20 a5 00 85 40 a5 02 85 42 a9 +>3a39e8 00 4c 85 00 a9 00 00 85 02 20 4f 07 c2 20 a5 40 +>3a39f8 85 00 a5 42 85 02 80 cf 08 20 be 1e e2 20 a7 00 +>3a3a08 f0 46 c9 3a f0 42 20 59 03 90 3f 20 3c 4f 90 3a +>3a3a18 20 14 00 e2 20 8f 00 4e 00 a9 00 8f 01 4e 00 c2 +>3a3a28 20 a9 00 4e 85 23 a9 00 00 85 25 e2 20 a9 02 85 +>3a3a38 27 20 9f 4e 20 be 1e a7 00 f0 0d c9 3a f0 09 c9 +>3a3a48 2c d0 07 20 9d 1e 80 b1 28 60 08 c2 20 48 a9 00 +>3a3a58 08 5b 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff +>3a3a68 00 20 f8 1b e2 20 dc d4 08 08 20 a6 1a 20 c8 04 +>3a3a78 e2 20 a9 5c 85 a2 c2 20 a5 23 85 a3 e2 20 a5 25 +>3a3a88 85 a5 e2 20 a9 2c 85 37 20 df 1f 90 41 20 9d 1e +>3a3a98 20 a6 1a 20 84 05 c2 20 a5 23 85 55 e2 20 a9 2c +>3a3aa8 85 37 20 df 1f 90 27 20 9d 1e 20 a6 1a 20 84 05 +>3a3ab8 c2 20 a5 23 85 59 e2 20 a9 2c 85 37 20 df 1f 90 +>3a3ac8 0d 20 9d 1e 20 a6 1a 20 84 05 c2 20 a4 23 a6 59 +>3a3ad8 a5 55 0b 8b 08 22 a2 08 00 28 ab 2b 20 e2 1e 28 +>3a3ae8 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f +>3a3af8 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a3b08 08 e2 20 20 be 1e 20 3c 4f 90 64 a9 8f 20 aa 1f +>3a3b18 a9 01 20 05 18 a2 01 00 a9 00 8f 00 4d 00 20 a6 +>3a3b28 1a 20 84 05 c2 20 a5 23 9f 00 4d 00 e2 20 af 00 +>3a3b38 4d 00 1a 8f 00 4d 00 30 55 e8 e8 20 be 1e a7 00 +>3a3b48 c9 2c f0 25 c9 90 d0 27 20 9d 1e 20 0e 5a c2 20 +>3a3b58 a5 c0 85 23 e2 20 a5 c2 85 25 64 26 a5 ea 09 80 +>3a3b68 85 ea 85 27 20 9f 4e 28 60 20 9d 1e 4c 26 3b 08 +>3a3b78 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d3 08 +>3a3b88 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 +>3a3b98 20 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f d3 08 00 +>3a3ba8 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 20 be +>3a3bb8 1e e2 20 a7 00 f0 28 c9 3a f0 24 20 59 03 90 21 +>3a3bc8 20 3c 4f 90 1c 20 08 3c 20 9f 4e 20 be 1e a7 00 +>3a3bd8 f0 0d c9 3a f0 09 c9 2c d0 07 20 9d 1e 80 cf 28 +>3a3be8 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f +>3a3bf8 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a3c08 08 a5 02 85 42 a5 00 85 40 a5 1c 85 46 a5 1a 85 +>3a3c18 44 c2 20 a5 3a d0 04 a5 38 f0 4e a5 38 85 00 a5 +>3a3c28 3a 85 02 a5 3c 85 1a a5 3e 85 1c e2 20 a7 00 f0 +>3a3c38 53 c9 3a f0 4f c9 2c d0 03 20 9d 1e 20 be 1e a7 +>3a3c48 00 c9 22 f0 4e 20 72 03 b0 4e 08 c2 20 48 a9 00 +>3a3c58 08 5b 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff +>3a3c68 00 20 f8 1b e2 20 dc d4 08 c2 20 a9 00 00 85 1a +>3a3c78 a9 36 00 85 1c 18 a5 1a 69 04 00 85 00 a5 1c 69 +>3a3c88 00 00 85 02 e2 20 a9 80 85 35 a9 ab 85 37 20 f4 +>3a3c98 1e 80 a9 20 b2 19 80 03 20 e7 18 c2 20 a5 00 85 +>3a3ca8 38 a5 02 85 3a a5 1a 85 3c a5 1c 85 3e a5 44 85 +>3a3cb8 1a a5 46 85 1c a5 40 85 00 a5 42 85 02 28 60 20 +>3a3cc8 e2 1e 60 64 38 64 3a 64 3c 64 3e 60 20 24 00 60 +>3a3cd8 20 a6 1a c2 20 a5 25 48 a5 23 48 e2 20 a7 00 c9 +>3a3ce8 2c d0 22 20 9d 1e 20 a6 1a c2 20 a5 26 d0 35 68 +>3a3cf8 85 08 68 85 0a c2 20 a5 23 87 08 e2 20 a0 02 00 +>3a3d08 a5 25 97 08 60 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a3d18 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a3d28 20 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a3d38 a9 09 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a3d48 dc d4 08 20 a6 1a c2 20 a5 25 48 a5 23 48 e2 20 +>3a3d58 a7 00 c9 2c d0 19 20 9d 1e 20 a6 1a c2 20 a5 25 +>3a3d68 d0 2c 68 85 08 68 85 0a c2 20 a5 23 87 08 60 08 +>3a3d78 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d3 08 +>3a3d88 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 +>3a3d98 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 00 +>3a3da8 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 20 a6 1a +>3a3db8 c2 20 a5 25 48 a5 23 48 e2 20 a7 00 c9 2c d0 1f +>3a3dc8 20 9d 1e 20 a6 1a e2 20 a5 24 d0 32 c2 20 a5 25 +>3a3dd8 d0 2c 68 85 08 68 85 0a e2 20 a5 23 87 08 60 08 +>3a3de8 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d3 08 +>3a3df8 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 +>3a3e08 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 00 +>3a3e18 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 20 +>3a3e28 48 a9 00 08 5b 68 28 e2 20 a9 01 8f d3 08 00 c2 +>3a3e38 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 e2 20 a7 +>3a3e48 00 f0 05 20 9d 1e 80 f7 28 60 08 28 60 08 28 60 +>3a3e58 08 28 60 08 c2 20 a5 1c 20 bf 1b a5 1a 20 bf 1b +>3a3e68 a5 02 48 a5 00 48 20 e2 1e a5 02 20 bf 1b a5 00 +>3a3e78 20 bf 1b 68 85 00 68 85 02 20 be 1e 20 3c 4f b0 +>3a3e88 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 05 8f +>3a3e98 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a3ea8 e2 20 a5 ea 20 d6 1b a5 e9 20 d6 1b c2 20 a5 e7 +>3a3eb8 20 bf 1b 20 be 1e e2 20 a7 00 c9 8a d0 6a a5 ea +>3a3ec8 c9 00 f0 04 c9 01 f0 00 20 9d 1e 20 a6 1a 20 9f +>3a3ed8 4e e2 20 a9 9c 20 aa 1f 20 a6 1a c2 20 a5 27 20 +>3a3ee8 bf 1b a5 25 20 bf 1b a5 23 20 bf 1b e2 20 a9 9d +>3a3ef8 85 37 20 df 1f 90 1b 20 9d 1e 20 a6 1a e2 20 a5 +>3a3f08 27 20 bf 1b c2 20 a5 25 20 bf 1b a5 23 20 bf 1b +>3a3f18 80 14 c2 20 a9 00 00 20 bf 1b a9 00 00 20 bf 1b +>3a3f28 a9 01 00 20 bf 1b 28 60 08 c2 20 48 a9 00 08 5b +>3a3f38 68 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 +>3a3f48 f8 1b e2 20 dc d4 08 08 8b 08 e2 20 48 a9 00 48 +>3a3f58 ab 68 28 08 c2 20 48 a9 00 08 5b 68 28 c2 30 a4 +>3a3f68 33 c8 c8 c2 20 b9 0c 00 85 e7 b9 0e 00 e2 20 85 +>3a3f78 e9 b9 10 00 85 ea c2 20 5a 20 3d 4d 7a c2 20 b9 +>3a3f88 00 00 85 29 b9 02 00 85 2b e2 20 b9 04 00 85 2d +>3a3f98 c2 20 5a 20 5c 25 20 9f 4e 7a c2 20 b9 06 00 85 +>3a3fa8 29 b9 08 00 85 2b e2 20 b9 0a 00 85 2d c2 20 b9 +>3a3fb8 02 00 30 0a 20 ab 27 20 91 04 f0 28 80 08 20 6b +>3a3fc8 27 20 91 04 f0 1e c2 20 b9 12 00 85 00 b9 14 00 +>3a3fd8 85 02 b9 16 00 85 1a b9 18 00 85 1c e2 20 a9 03 +>3a3fe8 85 dc 80 17 a2 23 08 20 c6 17 c2 20 18 a5 33 69 +>3a3ff8 1a 00 85 33 a5 35 69 00 00 85 35 ab 28 60 08 a5 +>3a4008 1a 48 a5 1c 48 20 be 1e 20 4f 07 a5 23 f0 26 20 +>3a4018 9c 21 90 42 e2 20 a9 02 85 dc 20 e2 1e c2 20 68 +>3a4028 20 bf 1b 68 20 bf 1b a5 02 20 bf 1b a5 00 20 bf +>3a4038 1b e6 31 28 60 68 68 08 c2 20 48 a9 00 08 5b 68 +>3a4048 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 +>3a4058 1b e2 20 dc d4 08 68 68 08 c2 20 48 a9 00 08 5b +>3a4068 68 28 e2 20 a9 06 8f d3 08 00 c2 20 29 ff 00 20 +>3a4078 f8 1b e2 20 dc d4 08 08 c2 30 a5 31 f0 1e 20 e1 +>3a4088 1b 85 00 20 e1 1b 85 02 20 e1 1b 85 1a 20 e1 1b +>3a4098 85 1c c6 31 e2 20 a9 03 85 dc 28 60 08 c2 20 48 +>3a40a8 a9 00 08 5b 68 28 e2 20 a9 07 8f d3 08 00 c2 20 +>3a40b8 29 ff 00 20 f8 1b e2 20 dc d4 08 08 20 a6 1a 20 +>3a40c8 91 04 f0 1c e2 20 a9 97 20 aa 1f 20 4f 07 20 91 +>3a40d8 04 f0 12 20 9c 21 90 2c e2 20 a9 02 85 dc 80 03 +>3a40e8 20 e2 1e 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a40f8 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a4108 20 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a4118 a9 06 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a4128 dc d4 08 08 e2 20 a9 01 85 dc 28 60 08 20 be 1e +>3a4138 20 4f 07 a5 23 f0 0d 20 9c 21 90 27 e2 20 a9 02 +>3a4148 85 dc 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a4158 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a4168 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a4178 06 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a4188 d4 08 20 68 17 20 b1 0e 20 3c 4c 60 08 a7 00 10 +>3a4198 03 20 9d 1e 20 3c 4f b0 03 4c 0b 42 e2 20 20 fe +>3a41a8 1f c9 8f d0 0e a9 8f 20 aa 1f a9 00 8f 00 4d 00 +>3a41b8 20 ea 18 20 be 1e e2 20 a7 00 c9 8a f0 03 4c 0b +>3a41c8 42 20 9d 1e a5 ea 48 a5 e9 48 a5 e8 48 a5 e7 48 +>3a41d8 20 a6 1a 68 85 e7 68 85 e8 68 85 e9 68 85 ea 29 +>3a41e8 80 f0 1b 20 af 4c 90 3a c2 20 a0 09 00 b7 08 85 +>3a41f8 c0 e2 20 c8 c8 b7 08 85 c2 20 ef 5b 80 03 20 9f +>3a4208 4e 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a4218 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a4228 d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 05 +>3a4238 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 +>3a4248 08 08 e2 20 20 fe 1f c9 00 f0 6d 20 a6 1a e2 20 +>3a4258 a5 27 c9 ff f0 1b c9 02 d0 05 20 c5 42 80 12 c9 +>3a4268 00 d0 05 20 e5 42 80 09 c9 01 d0 4f 20 f8 42 80 +>3a4278 00 20 be 1e a7 00 f0 40 c9 3a f0 3c c9 2c f0 23 +>3a4288 c9 3b f0 24 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a4298 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a42a8 dc d4 08 a9 09 20 18 00 20 9d 1e 20 be 1e a7 00 +>3a42b8 f0 09 c9 3a f0 05 80 93 20 4e 02 28 60 08 8b 08 +>3a42c8 c2 20 48 a9 00 08 5b 68 28 e2 20 c2 10 a0 00 00 +>3a42d8 b7 23 f0 06 20 18 00 c8 80 f6 ab 28 60 08 c2 20 +>3a42e8 20 66 13 a5 16 85 23 a5 18 85 25 20 c5 42 28 60 +>3a42f8 08 20 e9 58 c2 20 a5 16 85 23 a5 18 85 25 20 c5 +>3a4308 42 28 60 08 e2 20 85 b5 4a 4a 4a 4a 29 0f 18 69 +>3a4318 30 97 16 c8 a5 b5 29 0f 18 69 30 97 16 c8 28 60 +>3a4328 e2 20 a9 8f 20 aa 1f 08 20 a6 1a e2 20 c2 10 af +>3a4338 0e 08 af 09 08 8f 0e 08 af 20 07 13 a0 00 00 af +>3a4348 06 08 af 20 0b 43 a9 2f 97 16 c8 af 09 08 af 20 +>3a4358 0b 43 a9 2f 97 16 c8 af 0f 08 af 20 0b 43 af 0a +>3a4368 08 af 20 0b 43 a9 00 97 16 af 0e 08 af 29 f7 8f +>3a4378 0e 08 af c2 20 a5 16 85 23 a5 18 85 25 e2 20 a9 +>3a4388 02 85 27 28 e2 20 20 9d 1e 60 e2 20 a9 8f 20 aa +>3a4398 1f 08 20 a6 1a e2 20 c2 10 af 0e 08 af 09 08 8f +>3a43a8 0e 08 af 20 07 13 a0 00 00 af 04 08 af 29 7f 20 +>3a43b8 0b 43 a9 3a 97 16 c8 af 02 08 af 20 0b 43 a9 3a +>3a43c8 97 16 c8 af 00 08 af 20 0b 43 a9 00 97 16 af 0e +>3a43d8 08 af 29 f7 8f 0e 08 af c2 20 a5 16 85 23 a5 18 +>3a43e8 85 25 e2 20 a9 02 85 27 28 e2 20 20 9d 1e 60 e2 +>3a43f8 20 a9 8f 20 aa 1f 08 c2 30 20 a6 1a 20 5a 05 c2 +>3a4408 20 a5 25 48 a5 23 48 20 be 1e e2 20 a7 00 c9 2c +>3a4418 f0 03 4c 6e 44 20 9d 1e 20 a6 1a 20 84 05 c2 20 +>3a4428 a5 23 48 20 be 1e e2 20 a7 00 c9 2c f0 03 4c 6e +>3a4438 44 20 9d 1e 20 a6 1a 20 84 05 c2 20 a5 23 85 8f +>3a4448 e2 20 a5 25 85 91 c2 20 68 85 29 a9 00 00 85 2b +>3a4458 68 85 23 68 85 25 e2 20 a9 02 85 27 20 5f 15 e2 +>3a4468 20 20 9d 1e 28 60 08 c2 20 48 a9 00 08 5b 68 28 +>3a4478 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b +>3a4488 e2 20 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a4498 20 a9 09 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a44a8 20 dc d4 08 e2 20 a9 8f 20 aa 1f 08 c2 30 20 a6 +>3a44b8 1a e2 20 a5 27 c9 02 f0 03 4c 30 45 c2 20 a5 25 +>3a44c8 48 a5 23 48 20 be 1e e2 20 a7 00 c9 2c f0 03 4c +>3a44d8 4f 45 20 9d 1e 20 a6 1a e2 20 a5 27 c9 00 d0 48 +>3a44e8 c2 20 a5 23 85 8f c2 20 68 85 23 68 85 25 e2 20 +>3a44f8 a9 02 85 27 e2 20 a0 00 00 b7 23 f0 03 c8 80 f9 +>3a4508 c2 20 98 38 e5 8f 30 09 85 29 a9 00 00 85 2b 80 +>3a4518 07 a9 00 00 85 29 85 2b e2 20 a9 00 85 2d 20 5f +>3a4528 15 e2 20 20 9d 1e 28 60 08 c2 20 48 a9 00 08 5b +>3a4538 68 28 e2 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 +>3a4548 f8 1b e2 20 dc d4 08 08 c2 20 48 a9 00 08 5b 68 +>3a4558 28 e2 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 +>3a4568 1b e2 20 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 +>3a4578 e2 20 a9 09 8f d3 08 00 c2 20 29 ff 00 20 f8 1b +>3a4588 e2 20 dc d4 08 e2 20 a9 8f 20 aa 1f 08 c2 30 20 +>3a4598 a6 1a e2 20 a5 27 c9 02 f0 03 4c f9 45 c2 20 a5 +>3a45a8 25 48 a5 23 48 20 be 1e e2 20 a7 00 c9 2c f0 03 +>3a45b8 4c 18 46 20 9d 1e 20 a6 1a e2 20 a5 27 c9 00 d0 +>3a45c8 30 c2 20 a5 23 85 8f c2 20 a9 00 00 85 29 a9 00 +>3a45d8 00 85 2b e2 20 a9 00 85 2d c2 20 68 85 23 68 85 +>3a45e8 25 e2 20 a9 02 85 27 20 5f 15 e2 20 20 9d 1e 28 +>3a45f8 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f +>3a4608 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a4618 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 02 8f d3 +>3a4628 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 +>3a4638 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 +>3a4648 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 e2 20 +>3a4658 a9 8f 20 aa 1f 20 a6 1a c2 10 e2 20 a5 27 c9 02 +>3a4668 d0 23 c2 20 a5 00 85 40 a5 02 85 42 a5 23 85 00 +>3a4678 a5 25 85 02 20 4f 07 a5 40 85 00 a5 42 85 02 e2 +>3a4688 20 20 9d 1e 60 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a4698 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a46a8 20 dc d4 08 e2 20 a9 8f 20 aa 1f 08 20 a6 1a c2 +>3a46b8 10 e2 20 a5 27 c9 00 d0 1a 20 66 13 c2 20 a5 16 +>3a46c8 85 23 a5 18 85 25 e2 20 a9 02 85 27 28 e2 20 20 +>3a46d8 9d 1e 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a46e8 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a46f8 d4 08 e2 20 a9 8f 20 aa 1f 08 20 a6 1a 20 5a 05 +>3a4708 c2 20 64 0c 64 0e e2 30 a0 00 b7 23 c9 20 f0 04 +>3a4718 c9 24 d0 03 c8 80 f3 b7 23 20 83 03 90 1e c2 20 +>3a4728 06 0c 26 0e 06 0c 26 0e 06 0c 26 0e 06 0c 26 0e +>3a4738 e2 20 20 a4 03 05 0c 85 0c c8 80 db c2 20 a5 0c +>3a4748 85 23 a5 0e 85 25 e2 20 a9 00 85 27 28 e2 20 20 +>3a4758 9d 1e 60 e2 20 a9 8f 20 aa 1f 08 20 a6 1a 20 c8 +>3a4768 04 20 07 13 e2 30 a0 ff a9 00 97 16 88 a5 23 29 +>3a4778 0f aa bf 00 d0 3a 97 16 88 a5 23 29 f0 4a 4a 4a +>3a4788 4a aa bf 00 d0 3a 97 16 88 a5 24 85 23 a5 25 85 +>3a4798 24 a5 26 85 25 a9 00 85 26 a5 23 d0 d0 a5 24 d0 +>3a47a8 cc a5 25 d0 c8 98 38 65 16 85 23 a5 17 85 24 a5 +>3a47b8 18 85 25 a5 19 85 26 a9 02 85 27 28 e2 20 20 9d +>3a47c8 1e 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 +>3a47d8 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 +>3a47e8 08 e2 20 a9 8f 20 aa 1f 20 a6 1a e2 20 a5 27 c9 +>3a47f8 02 d0 1f 8b a5 25 48 ab c2 10 a6 23 20 f3 13 ab +>3a4808 84 23 c2 20 64 25 e2 20 a9 00 85 27 e2 20 20 9d +>3a4818 1e 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 +>3a4828 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 +>3a4838 08 e2 20 a9 8f 20 aa 1f 20 a6 1a e2 20 a5 27 c9 +>3a4848 00 d0 12 e2 20 a7 23 85 23 64 24 64 25 64 30 e2 +>3a4858 20 20 9d 1e 60 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a4868 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a4878 20 dc d4 08 e2 20 a9 8f 20 aa 1f 20 a6 1a e2 20 +>3a4888 a5 27 c9 00 d0 1d c2 20 a7 23 85 0c e2 20 a0 02 +>3a4898 00 b7 23 85 25 64 26 c2 20 a5 0c 85 23 e2 20 20 +>3a48a8 9d 1e 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a48b8 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a48c8 d4 08 e2 20 a9 8f 20 aa 1f 20 a6 1a e2 20 a5 27 +>3a48d8 c9 00 d0 0e c2 20 a7 23 85 23 64 25 e2 20 20 9d +>3a48e8 1e 60 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 +>3a48f8 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 +>3a4908 08 e2 20 a9 8f 20 aa 1f 20 a6 1a e2 20 a5 27 c9 +>3a4918 00 d0 24 20 07 13 a5 23 87 16 a9 00 a0 01 00 97 +>3a4928 16 c2 20 a5 16 85 23 a5 18 85 25 e2 20 a9 02 85 +>3a4938 27 e2 20 20 9d 1e 60 08 c2 20 48 a9 00 08 5b 68 +>3a4948 28 e2 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 +>3a4958 1b e2 20 dc d4 08 e2 20 a9 8f 20 aa 1f 20 a6 1a +>3a4968 e2 20 a5 27 c9 02 d0 14 a7 23 85 23 64 24 64 25 +>3a4978 64 26 a9 00 85 27 e2 20 20 9d 1e 60 08 c2 20 48 +>3a4988 a9 00 08 5b 68 28 e2 20 a9 04 8f d3 08 00 c2 20 +>3a4998 29 ff 00 20 f8 1b e2 20 dc d4 08 e2 20 a9 8f 20 +>3a49a8 aa 1f 20 a6 1a e2 20 a5 27 c9 00 d0 39 e2 20 a5 +>3a49b8 26 d0 52 a5 25 d0 4e a5 24 d0 4a c2 10 20 07 13 +>3a49c8 a4 23 e2 20 a9 00 97 16 88 30 07 a9 20 97 16 88 +>3a49d8 10 fb a9 02 85 27 c2 20 a5 16 85 23 a5 18 85 25 +>3a49e8 e2 20 20 9d 1e 60 08 c2 20 48 a9 00 08 5b 68 28 +>3a49f8 e2 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b +>3a4a08 e2 20 dc d4 08 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a4a18 20 a9 09 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a4a28 20 dc d4 08 e2 20 a9 8f 20 aa 1f 20 a6 1a e2 20 +>3a4a38 a5 27 c9 00 d0 39 e2 20 a5 26 d0 52 a5 25 d0 4e +>3a4a48 a5 24 d0 4a c2 10 20 07 13 a4 23 e2 20 a9 00 97 +>3a4a58 16 88 30 07 a9 09 97 16 88 10 fb a9 02 85 27 c2 +>3a4a68 20 a5 16 85 23 a5 18 85 25 e2 20 20 9d 1e 60 08 +>3a4a78 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f d3 08 +>3a4a88 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 c2 +>3a4a98 20 48 a9 00 08 5b 68 28 e2 20 a9 09 8f d3 08 00 +>3a4aa8 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 e2 20 a9 +>3a4ab8 8f 20 aa 1f 20 a6 1a e2 20 a5 27 c9 00 f0 23 c9 +>3a4ac8 01 f0 3e 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a4ad8 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a4ae8 d4 08 c2 20 a5 25 10 21 49 ff ff 85 25 a5 23 49 +>3a4af8 ff ff 18 69 01 00 85 23 a5 25 69 00 00 85 25 80 +>3a4b08 08 e2 20 a5 26 29 7f 85 26 e2 20 20 9d 1e 60 e2 +>3a4b18 20 a9 8f 20 aa 1f 20 a6 1a e2 20 a5 27 c9 00 d0 +>3a4b28 25 c2 20 a5 25 30 12 d0 04 a5 23 f0 13 a9 00 00 +>3a4b38 85 25 a9 01 00 85 23 80 07 a9 ff ff 85 25 85 23 +>3a4b48 e2 20 20 9d 1e 60 08 c2 20 48 a9 00 08 5b 68 28 +>3a4b58 e2 20 a9 04 8f d3 08 00 c2 20 29 ff 00 20 f8 1b +>3a4b68 e2 20 dc d4 08 00 ea 60 08 0b 08 c2 20 48 a9 00 +>3a4b78 08 5b 68 28 c2 30 c2 20 a9 00 00 85 d9 e2 20 a9 +>3a4b88 36 85 db c2 30 a9 00 00 a0 00 00 97 d9 a0 02 00 +>3a4b98 97 d9 a0 04 00 97 d9 20 73 1e 2b 28 60 8b 08 c2 +>3a4ba8 20 a9 00 00 85 1a a9 36 00 85 1c 20 73 1e 20 52 +>3a4bb8 21 28 ab 60 08 c2 20 64 55 a9 ff 7f 85 59 20 4e +>3a4bc8 02 20 fe 1f 29 ff 00 c9 00 00 f0 2c c9 81 00 f0 +>3a4bd8 1a 20 be 1e 20 4f 07 a5 23 85 55 20 fe 1f 29 ff +>3a4be8 00 c9 00 00 f0 12 c9 81 00 d0 2a 20 aa 1f 20 be +>3a4bf8 1e 20 4f 07 a5 23 85 59 a5 1c 48 a5 1a 48 a5 02 +>3a4c08 48 a5 00 48 20 69 16 68 85 00 68 85 02 68 85 1a +>3a4c18 68 85 1c 28 60 08 c2 20 48 a9 00 08 5b 68 28 e2 +>3a4c28 20 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 +>3a4c38 20 dc d4 08 08 08 c2 20 48 a9 00 08 5b 68 28 c2 +>3a4c48 20 64 e4 64 e7 e2 20 64 e6 64 e9 64 ea c2 20 38 +>3a4c58 a5 d9 69 04 00 85 e1 e2 20 a5 db 69 00 85 e3 28 +>3a4c68 60 c9 5f f0 1a c9 3a b0 04 c9 30 b0 12 c9 5b b0 +>3a4c78 04 c9 41 b0 0a c9 7b b0 04 c9 61 b0 02 18 60 38 +>3a4c88 60 08 e2 20 c2 10 a0 00 00 b7 0c f0 0a d7 e7 d0 +>3a4c98 13 c8 c0 08 00 d0 f2 b7 e7 20 cd 03 20 69 4c b0 +>3a4ca8 03 28 38 60 28 18 60 08 e2 20 c2 10 a0 00 00 a2 +>3a4cb8 00 00 b7 e7 f0 0b 20 cd 03 9f 00 4e 00 c8 e8 80 +>3a4cc8 f1 a9 00 9f 00 4e 00 c2 20 a9 00 4e 85 e7 e2 20 +>3a4cd8 a9 00 85 e9 c2 20 a5 e4 85 08 d0 06 e2 20 a5 e6 +>3a4ce8 f0 4d e2 20 a5 e6 85 0a a5 ea a0 00 00 d7 08 d0 +>3a4cf8 17 c2 20 18 a5 08 69 01 00 85 0c e2 20 a5 0a 69 +>3a4d08 00 85 0e 20 89 4c b0 2a a0 0d 00 c2 20 b7 08 85 +>3a4d18 0c c8 c8 e2 20 b7 08 85 0e d0 06 c2 20 a5 0c f0 +>3a4d28 0e c2 20 a5 0c 85 08 e2 20 a5 0e 85 0a 80 b9 28 +>3a4d38 18 60 28 38 60 08 20 af 4c b0 1f 08 c2 20 48 a9 +>3a4d48 00 08 5b 68 28 e2 20 a9 05 8f d3 08 00 c2 20 29 +>3a4d58 ff 00 20 f8 1b e2 20 dc d4 08 c2 30 a0 09 00 b7 +>3a4d68 08 85 23 c8 c8 b7 08 85 25 e2 20 a0 00 00 b7 08 +>3a4d78 85 27 28 60 08 c2 20 18 a5 e1 69 10 00 85 08 e2 +>3a4d88 20 a5 e3 69 00 85 0a c5 bc 90 27 c2 20 a5 08 c5 +>3a4d98 ba 90 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 +>3a4da8 09 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc +>3a4db8 d4 08 c2 20 a5 e1 85 c0 e2 20 a5 e3 85 c2 c2 20 +>3a4dc8 a5 08 85 e1 e2 20 a5 0a 85 e3 28 60 08 e2 20 a5 +>3a4dd8 27 c5 ea f0 33 a5 ea c9 00 d0 05 20 c8 04 80 2f +>3a4de8 c9 01 d0 05 20 36 06 80 26 08 c2 20 48 a9 00 08 +>3a4df8 5b 68 28 e2 20 a9 04 8f d3 08 00 c2 20 29 ff 00 +>3a4e08 20 f8 1b e2 20 dc d4 08 c9 02 d0 03 20 f9 14 c2 +>3a4e18 10 20 7c 4d c2 30 18 a5 c0 69 01 00 85 08 e2 20 +>3a4e28 a5 c2 69 00 85 0a a0 00 00 a9 00 97 08 c8 c0 08 +>3a4e38 00 d0 f8 a0 00 00 b7 e7 f0 10 20 cd 03 20 69 4c +>3a4e48 90 08 97 08 c8 c0 08 00 d0 ec c2 20 a0 09 00 a5 +>3a4e58 23 97 c0 a5 25 c8 c8 97 c0 a5 e4 a0 0d 00 97 c0 +>3a4e68 c8 c8 e2 20 a5 e6 97 c0 c2 20 a5 c0 85 e4 e2 20 +>3a4e78 a5 c2 85 e6 e2 20 a0 00 00 a5 27 97 c0 c9 02 f0 +>3a4e88 02 28 60 c2 20 a5 23 85 c0 e2 20 a5 25 85 c2 20 +>3a4e98 15 11 20 2a 11 80 ea 08 c2 30 a5 e4 d0 06 e2 20 +>3a4ea8 a5 e6 f0 05 20 af 4c b0 05 20 d4 4d 80 4e e2 20 +>3a4eb8 a5 27 c5 ea f0 33 a5 ea c9 00 d0 05 20 c8 04 80 +>3a4ec8 2c c9 01 d0 05 20 36 06 80 23 08 c2 20 48 a9 00 +>3a4ed8 08 5b 68 28 e2 20 a9 04 8f d3 08 00 c2 20 29 ff +>3a4ee8 00 20 f8 1b e2 20 dc d4 08 c9 02 f0 11 c2 30 a0 +>3a4ef8 09 00 a5 23 97 08 c8 c8 a5 25 97 08 28 60 20 f9 +>3a4f08 14 a0 09 00 b7 08 85 c0 c8 c8 e2 20 b7 08 85 c2 +>3a4f18 20 15 11 20 49 11 e2 20 a5 27 c9 02 f0 02 80 cd +>3a4f28 c2 20 a5 23 85 c0 e2 20 a5 25 85 c2 20 15 11 20 +>3a4f38 2a 11 80 b9 08 20 be 1e e2 20 a7 00 20 59 03 90 +>3a4f48 42 c2 20 a5 00 85 e7 e2 20 a5 02 85 e9 20 9d 1e +>3a4f58 a7 00 f0 0d c9 24 f0 14 c9 25 f0 09 20 69 4c b0 +>3a4f68 ec a9 01 80 0c 20 9d 1e a9 00 80 05 20 9d 1e a9 +>3a4f78 02 85 ea 20 fe 1f c9 8f d0 06 a5 ea 09 80 85 ea +>3a4f88 28 38 60 28 18 60 08 c2 20 18 a5 23 65 29 85 23 +>3a4f98 a5 25 65 2b 85 25 28 60 08 c2 20 38 a5 23 e5 29 +>3a4fa8 85 23 a5 25 e5 2b 85 25 28 60 08 c2 20 3b 38 e9 +>3a4fb8 0a 00 1b c2 30 a9 00 00 83 01 83 03 83 05 83 07 +>3a4fc8 83 09 a5 25 10 18 a9 00 80 83 01 a5 25 49 ff ff +>3a4fd8 85 25 a5 23 49 ff ff 1a 85 23 d0 02 e6 25 a5 2b +>3a4fe8 10 1a a3 01 49 00 80 83 01 a5 2b 49 ff ff 85 2b +>3a4ff8 a5 29 49 ff ff 1a 85 29 d0 02 e6 2b a5 25 f0 04 +>3a5008 a5 2b d0 5a a5 23 8f 00 01 00 a5 29 8f 02 01 00 +>3a5018 af 04 01 00 83 03 af 06 01 00 83 05 a5 25 8f 00 +>3a5028 01 00 a5 29 8f 02 01 00 18 af 04 01 00 63 05 83 +>3a5038 05 af 06 01 00 63 07 83 07 a5 23 8f 00 01 00 a5 +>3a5048 2b 8f 02 01 00 18 af 04 01 00 63 05 83 05 af 06 +>3a5058 01 00 63 07 83 07 a3 07 f0 23 a3 09 f0 1f 08 c2 +>3a5068 20 48 a9 00 08 5b 68 28 e2 20 a9 0d 8f d3 08 00 +>3a5078 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 c2 30 a3 +>3a5088 01 10 16 a3 05 49 ff ff 83 05 a3 03 49 ff ff 1a +>3a5098 83 03 d0 05 a3 05 1a 83 05 a3 03 85 23 a3 05 85 +>3a50a8 25 c2 20 3b 18 69 0a 00 1b 28 60 08 c2 20 a5 23 +>3a50b8 c5 29 a5 25 e5 2b 50 03 49 00 80 30 06 64 23 64 +>3a50c8 25 80 07 a9 ff ff 85 23 85 25 28 60 08 c2 20 a5 +>3a50d8 23 c5 29 d0 0c a5 25 c5 2b d0 06 64 23 64 25 80 +>3a50e8 16 a5 29 c5 23 a5 2b e5 25 50 03 49 00 80 10 eb +>3a50f8 a9 ff ff 85 23 85 25 28 60 08 c2 20 a5 2b c5 25 +>3a5108 d0 0f a5 29 c5 23 d0 09 a9 ff ff 85 23 85 25 80 +>3a5118 04 64 23 64 25 28 60 08 c2 20 a5 2b c5 25 d0 0c +>3a5128 a5 29 c5 23 d0 06 64 23 64 25 80 07 a9 ff ff 85 +>3a5138 23 85 25 28 60 08 c2 20 a5 23 c5 29 d0 0f a5 25 +>3a5148 c5 2b d0 09 a9 ff ff 85 23 85 25 80 13 a5 29 c5 +>3a5158 23 a5 2b e5 25 50 03 49 00 80 30 e8 64 23 64 25 +>3a5168 28 60 08 c2 20 a5 23 c5 29 d0 0f a5 25 c5 2b d0 +>3a5178 09 a9 ff ff 85 23 85 25 80 13 a5 23 c5 29 a5 25 +>3a5188 e5 2b 50 03 49 00 80 30 e8 64 23 64 25 28 60 08 +>3a5198 c2 20 8f 12 01 00 8a 8f 10 01 00 af 16 01 00 aa +>3a51a8 af 14 01 00 28 60 08 e2 20 a9 49 8f 00 e2 af a9 +>3a51b8 02 8f 01 e2 af c2 20 a9 00 00 8f 08 e2 af 8f 0a +>3a51c8 e2 af a5 23 8f 0c e2 af a5 25 8f 0e e2 af ea ea +>3a51d8 ea ea ea ea af 0c e2 af 85 23 af 0e e2 af 85 25 +>3a51e8 e2 20 a5 24 85 23 a5 25 85 24 a5 26 85 25 30 04 +>3a51f8 64 26 80 04 a9 ff 85 26 c2 20 a5 25 0a 66 25 66 +>3a5208 23 a5 25 0a 66 25 66 23 a5 25 0a 66 25 66 23 a5 +>3a5218 25 0a 66 25 66 23 e2 20 a9 00 85 27 28 60 08 e2 +>3a5228 20 a9 40 8f 00 e2 af 80 09 08 e2 20 a9 48 8f 00 +>3a5238 e2 af a9 02 8f 01 e2 af c2 20 a5 23 8f 08 e2 af +>3a5248 a5 25 8f 0a e2 af a5 29 8f 0c e2 af a5 2b 8f 0e +>3a5258 e2 af ea ea ea e2 20 af 06 e2 af 29 07 d0 10 c2 +>3a5268 20 af 08 e2 af 85 23 af 0a e2 af 85 25 28 60 20 +>3a5278 12 53 80 f9 08 e2 20 a9 01 8f 01 e2 af a9 00 8f +>3a5288 00 e2 af c2 20 a5 23 8f 08 e2 af a5 25 8f 0a e2 +>3a5298 af a5 29 8f 0c e2 af a5 2b 8f 0e e2 af ea ea ea +>3a52a8 e2 20 af 05 e2 af 29 17 d0 10 c2 20 af 08 e2 af +>3a52b8 85 23 af 0a e2 af 85 25 28 60 20 12 53 80 f9 08 +>3a52c8 e2 20 a9 00 8f 01 e2 af a9 00 8f 00 e2 af c2 20 +>3a52d8 a5 23 8f 08 e2 af a5 25 8f 0a e2 af a5 29 8f 0c +>3a52e8 e2 af a5 2b 8f 0e e2 af ea ea ea e2 20 af 04 e2 +>3a52f8 af 29 07 d0 10 c2 20 af 08 e2 af 85 23 af 0a e2 +>3a5308 af 85 25 28 60 20 12 53 80 f9 e2 20 89 01 f0 20 +>3a5318 00 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 0c 8f +>3a5328 d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 +>3a5338 89 02 f0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a5348 a9 0d 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a5358 dc d4 08 89 04 f0 1f 08 c2 20 48 a9 00 08 5b 68 +>3a5368 28 e2 20 a9 0e 8f d3 08 00 c2 20 29 ff 00 20 f8 +>3a5378 1b e2 20 dc d4 08 60 08 e2 20 a9 00 8f 01 e2 af +>3a5388 a9 02 8f 00 e2 af c2 20 a9 00 a0 8f 0c e2 af a9 +>3a5398 00 00 8f 0e e2 af a5 23 8f 08 e2 af a5 25 8f 0a +>3a53a8 e2 af ea ea ea e2 20 af 04 e2 af 89 07 f0 01 00 +>3a53b8 c2 20 af 08 e2 af 85 23 af 0a e2 af 85 25 28 60 +>3a53c8 08 e2 20 a9 01 8f 01 e2 af a9 02 8f 00 e2 af c2 +>3a53d8 20 a9 00 a0 8f 0c e2 af a9 00 00 8f 0e e2 af a5 +>3a53e8 23 8f 08 e2 af a5 25 8f 0a e2 af ea ea ea af 08 +>3a53f8 e2 af 85 23 af 0a e2 af 85 25 28 60 08 c2 20 a5 +>3a5408 23 d0 0a a5 25 29 ff 7f d0 03 28 38 60 28 18 60 +>3a5418 08 e2 20 38 e9 30 20 f1 03 c2 20 29 ff 00 18 65 +>3a5428 23 85 23 a5 25 69 00 00 85 25 28 60 08 e2 20 c9 +>3a5438 30 90 04 c9 3a 90 1c c9 61 90 04 c9 67 90 0a c9 +>3a5448 41 90 04 c9 47 90 07 80 31 38 e9 57 80 08 38 e9 +>3a5458 37 80 03 38 e9 30 06 23 26 24 26 25 26 26 06 23 +>3a5468 26 24 26 25 26 26 06 23 26 24 26 25 26 26 06 23 +>3a5478 26 24 26 25 26 26 05 23 85 23 28 60 08 e2 20 c9 +>3a5488 30 f0 06 c9 31 f0 0a 80 0f c2 20 06 23 26 25 80 +>3a5498 07 c2 20 38 26 23 26 25 28 60 08 e2 30 a5 61 f0 +>3a54a8 0d aa a5 69 d0 15 a9 00 8f 01 e2 af 80 15 e2 20 +>3a54b8 a9 03 8f 01 e2 af ea ea ea 80 62 e2 20 a9 01 8f +>3a54c8 01 e2 af e2 20 a9 43 8f 00 e2 af c2 20 a9 00 10 +>3a54d8 8f 08 e2 af a9 00 00 8f 0a e2 af c2 20 a9 00 a0 +>3a54e8 8f 0c e2 af a9 00 00 8f 0e e2 af ea ea ea ca f0 +>3a54f8 2c af 08 e2 af 8f 0c 08 00 af 0a e2 af 8f 0e 08 +>3a5508 00 e2 20 a9 42 8f 00 e2 af c2 20 af 0c 08 00 8f +>3a5518 08 e2 af af 0e 08 00 8f 0a e2 af 80 be c2 20 af +>3a5528 08 e2 af 85 23 af 0a e2 af 85 25 e2 20 a9 01 85 +>3a5538 27 28 60 08 c2 20 a5 5d 85 23 a5 5f 85 25 20 38 +>3a5548 57 c2 20 a5 23 85 29 a5 25 85 2b c2 20 a5 59 85 +>3a5558 23 a5 5b 85 25 20 7c 52 c2 20 a5 55 85 29 a5 57 +>3a5568 85 2b 20 31 52 c2 20 a5 23 85 29 a5 25 85 2b 20 +>3a5578 a2 54 20 c7 52 c2 20 a5 65 f0 07 a5 25 09 00 80 +>3a5588 85 25 e2 20 a9 01 85 27 28 60 5a 08 c2 30 64 23 +>3a5598 64 25 64 55 64 57 64 65 64 59 64 5b a9 01 00 85 +>3a55a8 5d 64 5f 64 61 64 63 64 69 e2 20 a0 00 00 b7 00 +>3a55b8 c9 2b f0 33 c9 2d f0 2b c9 26 f0 3a 20 72 03 90 +>3a55c8 03 82 ac 00 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a55d8 a9 02 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a55e8 dc d4 08 a9 01 85 65 c8 b7 00 c9 26 f0 08 20 72 +>3a55f8 03 90 d1 82 7a 00 c8 b7 00 c9 68 f0 0e c9 48 f0 +>3a5608 0a c9 62 f0 4c c9 42 f0 48 80 b9 c8 b7 00 20 83 +>3a5618 03 b0 02 80 af 20 34 54 c8 b7 00 20 83 03 b0 f5 +>3a5628 e2 20 a5 65 f0 11 c2 20 38 a9 00 00 e5 23 85 23 +>3a5638 a9 00 00 e5 25 85 25 e2 20 a9 00 85 27 c2 20 18 +>3a5648 98 65 00 85 00 a5 02 69 00 00 85 02 e2 20 28 7a +>3a5658 60 c8 b7 00 c9 30 f0 07 c9 31 f0 03 82 65 ff 20 +>3a5668 84 54 c8 b7 00 c9 30 f0 f6 c9 31 f0 f2 82 b0 ff +>3a5678 20 18 54 c8 b7 00 c9 2e f0 08 20 72 03 b0 f1 82 +>3a5688 9e ff c2 20 20 38 57 c2 20 a5 23 85 55 a5 25 85 +>3a5698 57 64 23 64 25 e2 20 80 1a 20 18 54 c2 20 a5 5d +>3a56a8 8f 00 01 00 a9 0a 00 8f 02 01 00 af 04 01 00 85 +>3a56b8 5d e2 20 c8 b7 00 c9 65 f0 24 c9 45 f0 20 20 72 +>3a56c8 03 b0 d6 c2 20 20 38 57 c2 20 a5 23 85 59 a5 25 +>3a56d8 85 5b 64 23 64 25 20 3b 55 e2 20 82 5f ff c2 20 +>3a56e8 20 38 57 c2 20 a5 23 85 59 a5 25 85 5b 64 23 64 +>3a56f8 25 e2 20 c8 b7 00 c9 2b f0 10 c9 2d f0 08 20 72 +>3a5708 03 b0 12 82 be fe a9 01 85 69 c8 b7 00 20 72 03 +>3a5718 b0 03 82 af fe 20 18 54 c8 b7 00 20 72 03 b0 f5 +>3a5728 c2 20 a5 23 85 61 a5 25 85 63 20 3b 55 82 0d ff +>3a5738 08 e2 20 a9 96 85 0c a9 00 85 0d c2 30 a5 23 d0 +>3a5748 0d a5 25 d0 09 e2 20 a9 01 85 27 82 6e 00 a5 25 +>3a5758 10 17 c2 20 38 a9 00 00 e5 23 85 23 a9 00 00 e5 +>3a5768 25 85 25 e2 20 a9 80 85 0d c2 20 a5 25 29 80 ff +>3a5778 f0 1c c9 80 00 f0 2b 46 25 66 23 e2 20 e6 0c c2 +>3a5788 20 a5 25 29 80 ff c9 80 00 d0 ec 82 14 00 06 23 +>3a5798 26 25 e2 20 c6 0c c2 20 a5 25 29 80 ff c9 80 00 +>3a57a8 d0 ec e2 20 a5 25 29 7f 85 25 a5 0c 4a 05 0d 85 +>3a57b8 26 a9 00 6a 05 25 85 25 a9 01 85 27 28 60 c2 20 +>3a57c8 20 04 54 90 0a e2 20 a9 00 85 27 64 28 80 05 c2 +>3a57d8 20 20 ae 51 60 da 08 c2 20 a5 25 48 a5 23 48 20 +>3a57e8 26 52 20 04 54 b0 11 a5 25 89 00 80 d0 05 a9 01 +>3a57f8 00 80 08 a9 ff ff 80 03 a9 00 00 fa 86 23 fa 86 +>3a5808 25 28 fa 60 08 c2 30 20 dd 57 c9 ff ff d0 05 20 +>3a5818 a4 04 80 03 20 b6 04 28 60 08 c2 30 20 dd 57 c9 +>3a5828 01 00 d0 05 20 a4 04 80 03 20 b6 04 28 60 08 c2 +>3a5838 30 20 dd 57 c9 00 00 d0 05 20 a4 04 80 03 20 b6 +>3a5848 04 28 60 08 c2 30 20 dd 57 c9 01 00 f0 05 20 a4 +>3a5858 04 80 03 20 b6 04 28 60 08 c2 30 20 dd 57 c9 ff +>3a5868 ff f0 05 20 a4 04 80 03 20 b6 04 28 60 08 c2 30 +>3a5878 20 dd 57 c9 00 00 f0 05 20 a4 04 80 03 20 b6 04 +>3a5888 28 60 08 e2 20 97 23 c8 a9 00 97 23 28 60 da 08 +>3a5898 e2 20 c9 80 90 0a 48 a9 2d 20 8a 58 68 49 ff 1a +>3a58a8 c2 30 29 ff 00 c9 64 00 90 0e a2 64 00 20 97 51 +>3a58b8 18 69 30 00 20 8a 58 8a a2 0a 00 20 97 51 18 69 +>3a58c8 30 00 20 8a 58 8a 18 69 30 00 20 8a 58 28 fa 60 +>3a58d8 08 e2 20 c2 10 a0 00 00 b7 23 f0 03 c8 80 f9 28 +>3a58e8 60 08 e2 20 c2 10 f4 00 00 f4 00 00 f4 00 00 20 +>3a58f8 04 54 90 19 20 07 13 e2 20 a0 00 00 a9 20 97 16 +>3a5908 c8 a9 30 97 16 c8 a9 00 97 16 82 cf 00 e2 20 a5 +>3a5918 26 10 08 29 7f 85 26 a9 01 83 01 c2 20 a9 00 00 +>3a5928 83 03 c2 20 af fe 59 3a 85 29 af 00 5a 3a 85 2b +>3a5938 20 dd 57 89 00 80 d0 13 20 c8 53 a3 03 1a 83 03 +>3a5948 20 dd 57 c9 00 00 b0 f0 82 10 00 20 7f 53 a3 03 +>3a5958 3a 83 03 20 dd 57 c9 ff ff f0 f0 e2 30 a5 25 0a +>3a5968 a5 26 2a 83 05 38 a9 96 e3 05 aa f0 0f a5 25 09 +>3a5978 80 85 25 46 25 66 24 66 23 ca d0 f7 c2 10 e2 20 +>3a5988 64 26 a9 00 85 27 a3 01 f0 11 c2 20 38 a9 00 00 +>3a5998 e5 23 85 23 a9 00 00 e5 25 85 25 20 66 13 c2 20 +>3a59a8 a5 16 85 23 a5 18 85 25 20 d8 58 e2 20 c8 a9 00 +>3a59b8 97 23 88 88 b7 23 c8 97 23 c0 02 00 d0 f4 a9 2e +>3a59c8 97 23 e2 20 18 a3 03 69 05 83 06 f0 19 20 d8 58 +>3a59d8 a9 45 20 8a 58 a3 06 20 96 58 80 0a c2 20 a5 16 +>3a59e8 85 23 a5 18 85 25 e2 20 a9 02 85 27 c2 20 3b 18 +>3a59f8 69 06 00 1b 28 60 00 50 c3 47 00 00 80 3f f3 04 +>3a5a08 b5 3f f3 04 35 3f 08 20 15 11 c2 20 a9 01 00 85 +>3a5a18 23 a9 00 00 85 25 e2 20 af 00 4d 00 c2 20 29 ff +>3a5a28 00 85 8f a8 a2 01 00 c2 20 bf 00 4d 00 85 29 a9 +>3a5a38 00 00 85 2b 20 d3 25 e8 e8 88 d0 eb c2 20 a9 04 +>3a5a48 00 85 29 a9 00 00 85 2b 20 d3 25 e2 20 af 00 4d +>3a5a58 00 85 0c a9 00 85 0d c2 20 06 0c 38 a5 23 65 0c +>3a5a68 85 23 a5 25 69 00 00 85 25 d0 29 e2 20 a5 ea 09 +>3a5a78 80 a6 23 20 d9 0e e2 20 af 00 4d 00 87 c0 a0 01 +>3a5a88 00 a2 00 00 e2 20 bf 01 4d 00 97 c0 e4 8f f0 23 +>3a5a98 e8 c8 80 f0 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a5aa8 a9 09 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a5ab8 dc d4 08 e2 20 38 a5 c0 67 c0 85 08 a5 c1 69 00 +>3a5ac8 85 09 a5 c2 69 00 85 0a 64 0b c2 20 a0 05 00 b7 +>3a5ad8 c3 85 0c e2 20 c8 c8 b7 c3 85 0e 64 0f e2 20 a9 +>3a5ae8 00 87 08 c2 20 18 a5 08 69 01 00 85 08 a5 0a 69 +>3a5af8 00 00 85 0a c5 0e d0 e5 a5 08 c5 0c d0 df 28 60 +>3a5b08 08 c2 20 64 08 64 0a e2 20 af 00 4d 00 85 8f 64 +>3a5b18 90 a2 01 00 e2 20 a7 c0 c5 8f f0 1f 08 c2 20 48 +>3a5b28 a9 00 08 5b 68 28 e2 20 a9 0a 8f d3 08 00 c2 20 +>3a5b38 29 ff 00 20 f8 1b e2 20 dc d4 08 c9 01 f0 3a a0 +>3a5b48 01 00 e2 20 bf 00 4d 00 85 23 64 24 64 25 64 26 +>3a5b58 b7 c0 85 29 64 2a 64 2b 64 2c a5 23 c5 29 b0 68 +>3a5b68 20 d3 25 c2 20 18 a5 08 65 23 85 08 a5 0a 65 25 +>3a5b78 85 0a e8 e8 c8 c4 8f d0 c9 e2 20 18 bf 00 4d 00 +>3a5b88 85 90 65 08 85 08 a5 09 69 00 85 09 c2 20 a5 0a +>3a5b98 69 00 00 85 0a c2 20 06 08 26 0a 06 08 26 0a e2 +>3a5ba8 20 38 a5 08 65 8f 85 08 a5 09 69 00 85 09 c2 20 +>3a5bb8 a5 0a 69 00 00 85 0a 18 a5 08 65 c0 85 08 e2 20 +>3a5bc8 a5 0a 65 c2 85 0a 28 60 08 c2 20 48 a9 00 08 5b +>3a5bd8 68 28 e2 20 a9 09 8f d3 08 00 c2 20 29 ff 00 20 +>3a5be8 f8 1b e2 20 dc d4 08 08 20 15 11 e2 20 a0 00 00 +>3a5bf8 b7 c3 29 7f c5 27 d0 28 a5 27 48 c2 20 a5 25 48 +>3a5c08 a5 23 48 20 08 5b 68 85 23 68 85 25 e2 20 68 85 +>3a5c18 27 c2 20 a5 23 87 08 a0 02 00 a5 25 97 08 28 60 +>3a5c28 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 04 8f d3 +>3a5c38 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 08 +>3a5c48 20 15 11 f4 00 00 f4 00 00 e2 20 48 20 08 5b e2 +>3a5c58 20 68 c2 20 68 68 c2 20 a7 08 85 23 a0 02 00 b7 +>3a5c68 08 85 25 e2 20 a0 00 00 b7 c3 29 7f 85 27 28 60 +>3a5c78 da 0b 08 08 c2 20 48 a9 00 08 5b 68 28 c2 30 a5 +>3a5c88 25 89 f0 ff d0 29 89 0f 00 d0 0c a5 23 89 00 fc +>3a5c98 d0 05 20 e5 42 80 2e a2 0a 00 46 25 66 23 ca d0 +>3a5ca8 f9 20 e5 42 e2 20 a9 4b 20 18 00 c2 20 80 16 a2 +>3a5cb8 14 00 46 25 66 23 ca d0 f9 20 e5 42 e2 20 a9 4d +>3a5cc8 20 18 00 c2 20 28 2b fa 60 0b 08 c2 30 a9 00 00 +>3a5cd8 8f b6 08 00 8f b8 08 00 e2 20 20 fe 1f c9 00 f0 +>3a5ce8 08 20 a6 1a 20 5a 05 80 11 c2 20 a9 00 00 85 23 +>3a5cf8 85 25 e2 20 a9 02 85 27 c2 20 20 32 5e 22 08 11 +>3a5d08 00 b0 22 20 e3 5e 08 c2 20 48 a9 00 08 5b 68 28 +>3a5d18 e2 20 a9 10 8f d3 08 00 c2 20 29 ff 00 20 f8 1b +>3a5d28 e2 20 dc d4 08 20 4e 02 08 c2 20 48 a9 20 03 5b +>3a5d38 68 28 e2 20 a0 00 00 b7 18 d0 03 82 a9 00 c9 e5 +>3a5d48 d0 03 82 96 00 a0 0b 00 b7 18 89 08 f0 03 82 a9 +>3a5d58 00 89 02 f0 03 82 83 00 29 0f c9 0f d0 03 82 7a +>3a5d68 00 a0 00 00 b7 18 20 18 00 c8 c0 08 00 d0 f5 a9 +>3a5d78 20 20 18 00 a0 08 00 b7 18 20 18 00 c8 c0 0b 00 +>3a5d88 d0 f5 a9 09 20 18 00 a0 0b 00 b7 18 89 10 d0 1e +>3a5d98 c2 20 a0 1c 00 b7 18 8f 23 08 00 c8 c8 b7 18 8f +>3a5da8 25 08 00 e2 20 a9 00 8f 27 08 00 20 78 5c a9 09 +>3a5db8 20 18 00 a0 0b 00 b7 18 89 08 d0 1c 89 01 f0 05 +>3a5dc8 a9 52 20 18 00 89 04 f0 05 a9 53 20 18 00 89 10 +>3a5dd8 f0 05 a9 44 20 18 00 ea 20 4e 02 20 65 02 22 0c +>3a5de8 11 00 90 03 82 41 ff 20 e3 5e 08 c2 20 48 a9 00 +>3a5df8 08 5b 68 28 20 e2 1e 28 2b 60 08 c2 20 48 a9 20 +>3a5e08 03 5b 68 28 e2 20 29 0f c9 0f f0 cf a9 5b 20 18 +>3a5e18 00 a0 00 00 b7 18 c9 20 f0 09 20 18 00 c8 c0 08 +>3a5e28 00 d0 f1 a9 5d 20 18 00 80 ae 0b 08 08 c2 20 48 +>3a5e38 a9 20 03 5b 68 28 c2 30 a9 73 f2 85 20 a9 3a 00 +>3a5e48 85 22 a0 00 00 e2 20 a9 00 97 20 c8 c0 1e 00 d0 +>3a5e58 f8 c2 20 a9 73 f0 8f 81 f2 3a a9 3a 00 8f 83 f2 +>3a5e68 3a af 23 08 00 8f 75 f2 3a af 25 08 00 8f 77 f2 +>3a5e78 3a 28 2b 60 08 c2 30 20 be 1e 20 a6 1a 20 5a 05 +>3a5e88 20 32 5e e2 20 a9 2c 85 37 20 df 1f b0 0f c2 20 +>3a5e98 a9 ff ff 8f 54 03 00 8f 56 03 00 80 17 20 9d 1e +>3a5ea8 20 a6 1a 20 c8 04 c2 20 a5 23 8f 54 03 00 a5 25 +>3a5eb8 8f 56 03 00 22 18 11 00 b0 1f 08 c2 20 48 a9 00 +>3a5ec8 08 5b 68 28 e2 20 a9 11 8f d3 08 00 c2 20 29 ff +>3a5ed8 00 20 f8 1b e2 20 dc d4 08 28 60 8b 0b 08 08 c2 +>3a5ee8 20 48 a9 00 08 5b 68 28 08 e2 20 48 a9 00 48 ab +>3a5ef8 68 28 e2 20 af 2e 03 00 85 23 a9 00 85 24 85 25 +>3a5f08 85 26 a9 00 85 27 85 ea a9 3a 85 e9 c2 20 a9 46 +>3a5f18 5f 85 e7 20 9f 4e e2 20 af 20 03 00 85 23 a9 00 +>3a5f28 85 24 85 25 85 26 a9 00 85 27 85 ea a9 3a 85 e9 +>3a5f38 c2 20 a9 4e 5f 85 e7 20 9f 4e 28 2b ab 60 44 4f +>3a5f48 53 53 54 41 54 00 42 49 4f 53 53 54 41 54 00 08 +>3a5f58 c2 30 20 be 1e 20 a6 1a 20 5a 05 a5 23 8f 60 03 +>3a5f68 00 a5 25 8f 62 03 00 a9 ff ff 8f 54 03 00 8f 56 +>3a5f78 03 00 22 24 11 00 b0 25 20 f8 1b 20 e3 5e 08 c2 +>3a5f88 20 48 a9 00 08 5b 68 28 e2 20 a9 11 8f d3 08 00 +>3a5f98 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 20 f8 1b +>3a5fa8 28 60 08 c2 30 20 be 1e 20 a6 1a 20 5a 05 20 32 +>3a5fb8 5e a9 00 00 8f 54 03 00 a9 01 00 8f 56 03 00 20 +>3a5fc8 70 4b 22 18 11 00 b0 22 20 e3 5e 08 c2 20 48 a9 +>3a5fd8 00 08 5b 68 28 e2 20 a9 11 8f d3 08 00 c2 20 29 +>3a5fe8 ff 00 20 f8 1b e2 20 dc d4 08 20 e3 5e c2 20 a2 +>3a5ff8 12 00 18 bf 73 f2 3a 69 00 00 85 92 bf 75 f2 3a +>3a6008 69 01 00 85 94 e2 20 a9 00 87 92 c2 20 a9 00 00 +>3a6018 85 7a a9 01 00 85 7c a2 00 00 e2 20 a7 7a f0 2a +>3a6028 c9 0d f0 12 c9 0a f0 04 9d 00 4f e8 c2 20 e6 7a +>3a6038 d0 e8 e6 7c 80 e4 e2 20 a9 00 9d 00 4f 20 0a 25 +>3a6048 c2 20 e6 7a d0 d1 e6 7c 80 cd e0 00 00 f0 0a e2 +>3a6058 20 a9 00 9d 00 4f 20 0a 25 28 60 08 c2 30 20 be +>3a6068 1e 20 a6 1a 20 5a 05 20 32 5e e2 20 a9 2c 20 aa +>3a6078 1f c2 20 20 a6 1a 20 c8 04 a5 23 8f 50 03 00 a5 +>3a6088 25 8f 52 03 00 e2 20 a9 2c c2 20 20 aa 1f 20 a6 +>3a6098 1a 20 c8 04 a5 23 8f 58 03 00 a5 25 8f 5a 03 00 +>3a60a8 22 1c 11 00 b0 22 20 e3 5e 08 c2 20 48 a9 00 08 +>3a60b8 5b 68 28 e2 20 a9 12 8f d3 08 00 c2 20 29 ff 00 +>3a60c8 20 f8 1b e2 20 dc d4 08 20 e3 5e 28 60 da 5a 08 +>3a60d8 a2 00 00 a0 00 00 e2 20 b7 23 9d 00 04 f0 04 e8 +>3a60e8 c8 80 f5 28 7a fa 60 08 c2 30 20 be 1e 20 a6 1a +>3a60f8 20 5a 05 20 32 5e a9 00 00 85 a6 e2 20 a9 01 85 +>3a6108 a8 a9 20 85 b4 c2 20 a9 00 00 85 ab a9 ff ff 85 +>3a6118 a9 c2 20 a9 00 00 85 55 85 57 a9 ff ff 85 59 a9 +>3a6128 ff 7f 85 5b 20 69 16 e2 20 a9 80 85 b4 c2 20 c6 +>3a6138 ab 18 a9 00 00 8f 50 03 00 65 ab 8f 58 03 00 a9 +>3a6148 01 00 8f 52 03 00 69 00 00 8f 5a 03 00 22 1c 11 +>3a6158 00 b0 22 20 e3 5e 08 c2 20 48 a9 00 08 5b 68 28 +>3a6168 e2 20 a9 12 8f d3 08 00 c2 20 29 ff 00 20 f8 1b +>3a6178 e2 20 dc d4 08 20 e3 5e 28 60 08 c2 30 20 be 1e +>3a6188 20 a6 1a 20 5a 05 20 d5 60 22 04 11 00 b0 22 20 +>3a6198 e3 5e 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 13 +>3a61a8 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 +>3a61b8 08 20 e3 5e 28 60 da 08 e2 20 c9 61 90 08 c9 7b +>3a61c8 b0 04 29 df 80 13 c9 20 90 13 a2 00 00 df e9 61 +>3a61d8 3a f0 0a e8 e0 0f 00 d0 f4 28 38 fa 6b 28 18 fa +>3a61e8 6b 2a 2b 2c 2f 3a 3b 3c 3d 3e 3f 5c 5b 5d 7c 22 +>3a61f8 08 08 c2 20 48 a9 00 08 5b 68 28 c2 30 20 a6 1a +>3a6208 20 5a 05 20 d5 60 22 10 11 00 b0 22 20 e3 5e 08 +>3a6218 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 14 8f d3 08 +>3a6228 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 e2 20 +>3a6238 a9 2c 20 aa 1f c2 20 20 a6 1a 20 5a 05 ad 38 03 +>3a6248 85 08 ad 3a 03 85 0a e2 20 a2 00 00 a9 20 95 7e +>3a6258 e8 e0 0b 00 d0 f8 a2 00 00 a0 00 00 b7 23 f0 76 +>3a6268 c9 2e f0 39 22 be 61 3a b0 1f 08 c2 20 48 a9 00 +>3a6278 08 5b 68 28 e2 20 a9 0a 8f d3 08 00 c2 20 29 ff +>3a6288 00 20 f8 1b e2 20 dc d4 08 95 7e c8 e8 c0 08 00 +>3a6298 d0 ca b7 23 f0 40 c9 2e f0 03 c8 80 f5 c8 a2 08 +>3a62a8 00 b7 23 f0 31 22 be 61 3a b0 22 20 e3 5e 08 c2 +>3a62b8 20 48 a9 00 08 5b 68 28 e2 20 a9 0a 8f d3 08 00 +>3a62c8 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 95 7e c8 +>3a62d8 e8 c0 0c 00 d0 cb a2 00 00 a0 00 00 b5 7e 97 08 +>3a62e8 e8 c8 c0 0b 00 d0 f5 22 14 11 00 b0 22 20 e3 5e +>3a62f8 08 c2 20 48 a9 00 08 5b 68 28 e2 20 a9 15 8f d3 +>3a6308 08 00 c2 20 29 ff 00 20 f8 1b e2 20 dc d4 08 20 +>3a6318 e3 5e 28 60 08 08 c2 20 48 a9 00 08 5b 68 28 c2 +>3a6328 30 20 a6 1a 20 5a 05 a5 23 8f 64 03 00 a5 25 8f +>3a6338 66 03 00 e2 20 a9 2c 20 aa 1f c2 20 20 a6 1a 20 +>3a6348 5a 05 a5 23 8f 68 03 00 a5 25 8f 6a 03 00 22 30 +>3a6358 11 00 b0 1f 08 c2 20 48 a9 00 08 5b 68 28 e2 20 +>3a6368 a9 16 8f d3 08 00 c2 20 29 ff 00 20 f8 1b e2 20 +>3a6378 dc d4 08 28 60 5c 3d 7d 3a 5c 8e 7b 3a 5c 3e 7d +>3a6388 3a 5c ba 6c 3a 5c 17 6d 3a 5c 4a 6c 3a 5c d0 6b +>3a6398 3a 5c 4d 71 3a 5c 3b 68 3a 5c 68 6b 3a 5c 23 6b +>3a63a8 3a 5c ad 6a 3a 5c 4c 7c 3a 5c 49 69 3a 5c 9c 67 +>3a63b8 3a 5c c7 7c 3a 5c 77 68 3a 5c 40 7d 3a 5c 39 7d +>3a63c8 3a 5c 66 6a 3a 5c 41 7d 3a 18 fb c2 20 a9 ff fe +>3a63d8 1b 58 5c de 63 3a c2 30 22 9c 67 3a 20 08 00 20 +>3a63e8 0c 00 8b e2 20 a9 00 48 ab a2 00 4f 20 dc 03 ab +>3a63f8 22 81 63 3a 22 89 63 3a 80 e2 08 8b e2 20 a9 3a +>3a6408 48 ab c2 10 a2 15 64 20 db 02 ab 28 6b 41 20 3c +>3a6418 73 74 61 72 74 3e 20 3c 61 73 73 65 6d 62 6c 79 +>3a6428 3e 0d 20 20 41 73 73 65 6d 62 6c 65 20 61 20 70 +>3a6438 72 6f 67 72 61 6d 0d 0d 43 20 3c 73 74 61 72 74 +>3a6448 31 3e 20 3c 73 74 61 72 74 32 3e 20 5b 6c 65 6e +>3a6458 20 28 31 20 69 66 20 62 6c 61 6e 6b 29 5d 0d 20 +>3a6468 20 43 6f 6d 70 61 72 65 20 74 6f 20 73 65 63 74 +>3a6478 69 6f 6e 73 20 6f 66 20 6d 65 6d 6f 72 79 0d 0d +>3a6488 44 20 3c 73 74 61 72 74 3e 20 5b 65 6e 64 5d 0d +>3a6498 20 20 44 69 73 61 73 73 65 6d 62 6c 65 20 61 20 +>3a64a8 70 72 6f 67 72 61 6d 0d 0d 46 20 3c 73 74 61 72 +>3a64b8 74 3e 20 3c 65 6e 64 3e 20 3c 62 79 74 65 3e 0d +>3a64c8 20 20 46 69 6c 6c 20 61 20 62 6c 6f 63 6b 20 6f +>3a64d8 66 20 6d 65 6d 6f 72 79 20 77 69 74 68 20 61 20 +>3a64e8 62 79 74 65 0d 0d 47 20 5b 61 64 64 72 65 73 73 +>3a64f8 5d 0d 20 20 53 74 61 72 74 20 65 78 65 63 75 74 +>3a6508 69 6f 6e 20 61 74 20 61 20 6c 6f 63 61 74 69 6f +>3a6518 6e 0d 0d 4a 20 5b 61 64 64 72 65 73 73 5d 20 2d +>3a6528 20 4a 75 6d 70 20 74 6f 20 61 20 6c 6f 63 61 74 +>3a6538 69 6f 6e 20 69 6e 20 6d 65 6d 6f 72 79 0d 20 20 +>3a6548 4a 75 6d 70 20 74 6f 20 61 20 6c 6f 63 61 74 69 +>3a6558 6f 6e 20 69 6e 20 6d 65 6d 6f 72 79 0d 0d 48 20 +>3a6568 3c 73 74 61 72 74 3e 20 3c 65 6e 64 3e 20 3c 62 +>3a6578 79 74 65 3e 20 5b 62 79 74 65 5d 2e 2e 0d 20 20 +>3a6588 48 75 6e 74 20 66 6f 72 20 76 61 6c 75 65 73 20 +>3a6598 69 6e 20 6d 65 6d 6f 72 79 0d 0d 4c 20 20 20 20 +>3a65a8 20 4c 4f 41 44 20 20 20 20 20 20 20 20 20 22 46 +>3a65b8 69 6c 65 22 20 5b 64 65 73 74 69 6e 61 74 69 6f +>3a65c8 6e 5d 0d 4d 20 3c 73 74 61 72 74 3e 20 5b 65 6e +>3a65d8 64 5d 0d 20 20 44 75 6d 70 20 74 68 65 20 76 61 +>3a65e8 6c 75 65 20 69 6e 20 6d 65 6d 6f 72 79 0d 0d 52 +>3a65f8 20 2d 20 44 69 73 70 6c 61 79 20 74 68 65 20 76 +>3a6608 61 6c 75 65 73 20 6f 66 20 74 68 65 20 72 65 67 +>3a6618 69 73 74 65 72 73 0d 0d 3b 20 3c 50 43 3e 20 3c +>3a6628 41 3e 20 3c 58 3e 20 3c 59 3e 20 3c 53 50 3e 20 +>3a6638 3c 44 42 52 3e 20 3c 44 50 3e 20 3c 4e 56 4d 58 +>3a6648 44 49 5a 43 3e 0d 20 20 43 68 61 6e 67 65 20 74 +>3a6658 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 +>3a6668 68 65 20 72 65 67 69 73 74 65 72 73 0d 0d 53 20 +>3a6678 20 20 20 20 53 41 56 45 20 20 20 20 20 20 20 20 +>3a6688 20 22 46 69 6c 65 22 20 3c 73 74 61 72 74 3e 20 +>3a6698 3c 65 6e 64 3e 0d 54 20 3c 73 74 61 72 74 3e 20 +>3a66a8 3c 65 6e 64 3e 20 3c 64 65 73 74 69 6e 61 74 69 +>3a66b8 6f 6e 3e 0d 20 20 54 72 61 6e 73 66 65 72 20 28 +>3a66c8 63 6f 70 79 29 20 64 61 74 61 20 77 69 74 68 69 +>3a66d8 6e 20 6d 65 6d 6f 72 79 0d 0d 57 20 3c 62 79 74 +>3a66e8 65 3e 0d 20 20 53 65 74 20 74 68 65 20 72 65 67 +>3a66f8 69 73 74 65 72 20 77 69 64 74 68 20 66 6c 61 67 +>3a6708 73 20 66 6f 72 20 74 68 65 20 64 69 73 61 73 73 +>3a6718 65 6d 62 6c 65 72 0d 0d 58 20 2d 20 52 65 74 75 +>3a6728 72 6e 20 74 6f 20 42 41 53 49 43 0d 0d 3e 20 3c +>3a6738 73 74 61 72 74 3e 20 3c 62 79 74 65 3e 20 5b 62 +>3a6748 79 74 65 5d 2e 2e 2e 0d 20 20 45 64 69 74 20 64 +>3a6758 61 74 61 20 69 6e 20 6d 65 6d 6f 72 79 0d 0d 3f +>3a6768 20 2d 20 44 69 73 70 6c 61 79 20 61 20 73 68 6f +>3a6778 72 74 20 68 65 6c 70 20 73 63 72 65 65 6e 0d 0d +>3a6788 00 08 08 c2 20 48 a9 48 08 5b 68 28 e2 20 a5 0d +>3a6798 85 4e 28 6b 20 e4 00 08 e2 20 48 a9 3a 48 ab 68 +>3a67a8 28 a2 7e 7d 20 db 02 e2 20 a9 3b 20 18 00 a9 20 +>3a67b8 20 18 00 c2 30 08 e2 20 48 a9 00 48 ab 68 28 a0 +>3a67c8 03 00 a2 42 02 20 5e 02 c2 20 a9 20 00 20 18 00 +>3a67d8 af 44 02 00 20 eb 02 a9 20 00 20 18 00 af 46 02 +>3a67e8 00 20 eb 02 a9 20 00 20 18 00 af 48 02 00 20 eb +>3a67f8 02 a9 20 00 20 18 00 af 4a 02 00 20 eb 02 a9 20 +>3a6808 00 20 18 00 af 4e 02 00 20 05 03 a9 20 00 20 18 +>3a6818 00 20 18 00 af 4c 02 00 20 eb 02 a9 20 00 20 18 +>3a6828 00 08 e2 20 ad 4f 02 22 97 7a 3a 28 20 4e 02 20 +>3a6838 4e 02 6b 08 0b 08 c2 20 48 a9 48 08 5b 68 28 e2 +>3a6848 20 a5 15 87 0d e2 20 a5 0f c5 13 d0 0e c2 20 a5 +>3a6858 0d c5 11 d0 06 20 4e 02 2b 28 6b c2 20 18 a5 0d +>3a6868 69 01 00 85 0d e2 20 a5 0e 69 00 85 0e 80 d0 08 +>3a6878 0b 08 c2 20 48 a9 48 08 5b 68 28 e2 20 a5 0f c5 +>3a6888 17 90 45 c2 20 a5 0d c5 15 90 3d e2 20 a7 0d 87 +>3a6898 15 a5 0f c5 13 d0 0b c2 20 a5 0d c5 11 d0 03 4c +>3a68a8 2e 69 c2 20 18 a5 0d 69 01 00 85 0d e2 20 a5 0e +>3a68b8 69 00 85 0e c2 20 18 a5 15 69 01 00 85 15 e2 20 +>3a68c8 a5 16 69 00 85 16 80 c3 c2 20 38 a5 11 e5 0d 85 +>3a68d8 19 e2 20 a5 13 e5 0f 85 1b c2 20 18 a5 19 65 15 +>3a68e8 85 15 e2 20 a5 1b 65 17 85 17 e2 20 a7 11 87 15 +>3a68f8 a5 13 c5 0f d0 0a c2 20 a5 11 c5 0d d0 02 80 26 +>3a6908 c2 20 38 a5 11 e9 01 00 85 11 e2 20 a5 12 e9 00 +>3a6918 85 12 c2 20 38 a5 15 e9 01 00 85 15 e2 20 a5 16 +>3a6928 e9 00 85 16 80 c4 20 4e 02 2b 28 6b 08 e2 20 c9 +>3a6938 21 90 0b c9 7f 90 04 c9 a0 90 03 28 38 6b 28 18 +>3a6948 6b 08 8b 0b 08 c2 20 48 a9 48 08 5b 68 28 e2 20 +>3a6958 a9 00 8f b6 08 00 a5 31 c9 02 b0 16 c9 01 90 20 +>3a6968 c2 20 18 a5 0d 69 00 01 85 11 e2 20 a5 0f 69 00 +>3a6978 85 13 c2 20 a5 0d 85 32 e2 20 a5 0f 85 34 80 12 +>3a6988 c2 20 18 a5 32 69 00 01 85 11 e2 20 a5 34 69 00 +>3a6998 85 13 e2 20 a0 00 00 c2 20 a5 32 85 19 e2 20 a5 +>3a69a8 34 85 1b e2 20 a7 19 22 34 69 3a b0 02 a9 3f 99 +>3a69b8 7e 08 c2 20 18 a5 19 69 01 00 85 19 e2 20 a5 1b +>3a69c8 69 00 85 1b c8 c0 08 00 90 db a9 00 99 7e 08 a9 +>3a69d8 3e 20 18 00 a9 20 20 18 00 e2 20 a5 34 20 05 03 +>3a69e8 a9 3a 20 18 00 c2 20 a5 32 20 eb 02 c2 20 a9 08 +>3a69f8 00 85 47 e2 20 a9 20 20 18 00 a7 32 20 05 03 22 +>3a6a08 76 7a 3a e2 20 c6 47 d0 ea a9 20 20 18 00 a9 20 +>3a6a18 20 18 00 08 e2 20 48 a9 00 48 ab 68 28 a2 7e 08 +>3a6a28 20 db 02 20 4e 02 20 65 02 a5 34 c5 13 90 0f c2 +>3a6a38 20 a5 32 c5 11 90 07 20 4e 02 2b ab 28 6b 4c 9a +>3a6a48 69 08 8d 92 08 e2 20 bd 00 00 99 00 00 ad 92 08 +>3a6a58 f0 0a c8 e8 e8 e8 e8 ce 92 08 80 eb 28 6b 08 0b +>3a6a68 8b 08 c2 20 48 a9 48 08 5b 68 28 08 e2 20 48 a9 +>3a6a78 00 48 ab 68 28 c2 30 a5 0d 85 32 a5 0f 85 34 e2 +>3a6a88 20 a5 31 3a 85 47 a2 59 08 a0 7e 08 22 49 6a 3a +>3a6a98 a0 00 00 b9 7e 08 87 32 22 76 7a 3a c8 c4 47 d0 +>3a6aa8 f2 ab 2b 28 6b 08 0b 8b 08 c2 20 48 a9 48 08 5b +>3a6ab8 68 28 08 e2 20 48 a9 00 48 ab 68 28 e2 20 c2 10 +>3a6ac8 a5 31 3a 3a 85 47 a2 5d 08 a0 7e 08 22 49 6a 3a +>3a6ad8 c2 20 a5 0d 85 32 a5 0f 85 34 c2 20 a5 34 c5 13 +>3a6ae8 d0 06 a5 32 c5 11 f0 2c e2 20 a0 00 00 b7 32 d9 +>3a6af8 7e 08 d0 1a c8 c4 47 d0 f4 c2 20 a5 32 85 4a a5 +>3a6b08 34 85 4c 22 20 75 3a e2 20 a9 20 20 18 00 22 76 +>3a6b18 7a 3a 80 c6 20 4e 02 ab 2b 28 6b 08 c2 20 48 a9 +>3a6b28 48 08 5b 68 28 e2 20 a5 31 f0 0e c2 30 a5 0d 8f +>3a6b38 40 02 00 a5 0f 8f 42 02 00 af 46 02 00 aa af 48 +>3a6b48 02 00 a8 af 4a 02 00 1b af 4c 02 00 5b e2 20 a9 +>3a6b58 3a 48 a9 6b 48 a9 63 48 4c 9a 6b ea 5c 04 00 3a +>3a6b68 08 c2 20 48 a9 48 08 5b 68 28 e2 20 a5 31 f0 c9 +>3a6b78 c2 30 a5 0d 8f 40 02 00 a5 0f 8f 42 02 00 af 46 +>3a6b88 02 00 aa af 48 02 00 a8 af 4a 02 00 1b af 4c 02 +>3a6b98 00 5b e2 20 af 4e 02 00 48 ab a9 5c 8f a2 08 00 +>3a6ba8 af 42 02 00 8f a5 08 00 af 41 02 00 8f a4 08 00 +>3a6bb8 af 40 02 00 8f a3 08 00 af 4f 02 00 48 c2 20 af +>3a6bc8 44 02 00 28 5c a2 08 00 08 0b 8b 08 e2 20 48 a9 +>3a6bd8 3a 48 ab 68 28 08 c2 20 48 a9 48 08 5b 68 28 c2 +>3a6be8 10 e2 20 a5 31 c9 02 f0 0c c9 03 d0 11 c2 20 a5 +>3a6bf8 15 85 47 80 11 c2 20 a9 01 00 85 47 80 08 a2 42 +>3a6c08 7d 20 db 02 80 35 a5 0d 85 4a a5 0f 85 4c a0 00 +>3a6c18 00 e2 20 a7 4a d7 11 f0 09 22 20 75 3a a9 20 20 +>3a6c28 18 00 c2 20 18 a5 4a 69 01 00 85 4a a5 4c 69 00 +>3a6c38 00 85 4c c8 c4 47 d0 d9 20 4e 02 20 4e 02 ab 2b +>3a6c48 28 6b 08 0b 8b 08 e2 20 48 a9 00 48 ab 68 28 08 +>3a6c58 c2 20 48 a9 48 08 5b 68 28 e2 20 a5 31 f0 4f a6 +>3a6c68 0d 8e 40 02 a6 0f 8e 42 02 c9 01 f0 41 a6 11 8e +>3a6c78 44 02 c9 02 f0 38 a6 15 8e 46 02 c9 03 f0 2f a6 +>3a6c88 19 8e 48 02 c9 04 f0 26 a6 1d 8e 4a 02 c9 05 f0 +>3a6c98 1d e2 10 a6 21 8e 4e 02 c9 06 f0 12 c2 10 a6 25 +>3a6ca8 8e 4c 02 c9 07 f0 07 e2 10 a6 29 8e 4f 02 ab 2b +>3a6cb8 28 6b 08 0b 8b 08 c2 20 48 a9 48 08 5b 68 28 e2 +>3a6cc8 20 c2 10 a2 00 00 bf af 7d 3a f0 18 c7 08 f0 03 +>3a6cd8 e8 80 f3 c2 20 8a 0a aa bf f0 6c 3a 8f 2f 08 00 +>3a6ce8 22 14 6d 3a ab 2b 28 6b 8d 63 95 63 99 63 9d 63 +>3a6cf8 a1 63 a5 63 a9 63 ad 63 b1 63 b5 63 91 63 b9 63 +>3a6d08 bd 63 c1 63 89 67 c5 63 c9 63 02 64 6c 2f 08 08 +>3a6d18 8b 0b 08 c2 20 48 a9 48 08 5b 68 28 e2 20 a5 31 +>3a6d28 c9 02 b0 03 4c bd 6e c2 20 a5 0d 85 32 a5 0f 85 +>3a6d38 34 c2 20 22 bf 70 3a c9 ff ff f0 10 85 54 e2 20 +>3a6d48 a5 31 c9 03 f0 36 a9 13 85 4f 80 4c 20 4e 02 08 +>3a6d58 e2 20 48 a9 3a 48 ab 68 28 c2 10 a2 f4 6e 20 db +>3a6d68 02 4c bd 6e 20 4e 02 08 e2 20 48 a9 3a 48 ab 68 +>3a6d78 28 c2 10 a2 03 6f 20 db 02 4c bd 6e e2 20 22 f5 +>3a6d88 70 3a c9 ff f0 de 85 4f c9 03 f0 62 c9 0b f0 5e +>3a6d98 c9 13 f0 04 c9 08 f0 00 22 ed 6f 3a b0 03 4c 86 +>3a6da8 6e 87 32 22 76 7a 3a 08 e2 20 48 a9 00 48 ab 68 +>3a6db8 28 c2 20 a5 32 85 56 a5 34 85 58 e2 20 a5 4f c9 +>3a6dc8 12 f0 6c c9 16 f0 68 c9 14 f0 7c 29 3f c9 02 d0 +>3a6dd8 03 4c b4 6e c2 20 29 ff 00 aa e2 20 bf bc 79 3a +>3a6de8 c9 03 f0 57 c9 02 f0 5f c9 01 f0 67 80 71 c2 20 +>3a6df8 a5 54 c9 34 76 f0 26 c9 98 76 f0 2a c9 18 76 f0 +>3a6e08 1c c9 1c 76 f0 17 c9 24 76 f0 12 c9 0c 76 f0 0d +>3a6e18 c9 20 76 f0 08 c9 08 76 f0 03 4c a0 6d e2 20 a9 +>3a6e28 12 85 4f 4c a0 6d e2 20 a9 16 85 4f 4c a0 6d 22 +>3a6e38 30 6f 3a 90 60 c9 02 f0 0e 80 18 a0 02 00 b9 98 +>3a6e48 08 97 56 22 76 7a 3a a0 01 00 b9 98 08 97 56 22 +>3a6e58 76 7a 3a a0 00 00 b9 98 08 97 56 22 76 7a 3a e2 +>3a6e68 20 a9 41 20 18 00 a9 20 20 18 00 a6 32 86 4a a6 +>3a6e78 34 86 4c 22 20 75 3a a9 20 20 18 00 80 37 20 4e +>3a6e88 02 08 e2 20 48 a9 3a 48 ab 68 28 c2 10 a2 c1 6e +>3a6e98 20 db 02 80 20 20 4e 02 08 e2 20 48 a9 3a 48 ab +>3a6ea8 68 28 c2 10 a2 11 6f 20 db 02 80 09 a5 4f 29 c0 +>3a6eb8 d0 95 4c 5b 6e 2b ab 28 6b 41 64 64 72 65 73 73 +>3a6ec8 69 6e 67 20 6d 6f 64 65 20 6e 6f 74 20 64 65 66 +>3a6ed8 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 69 6e +>3a6ee8 73 74 72 75 63 74 69 6f 6e 2e 0d 00 42 61 64 20 +>3a6ef8 6d 6e 65 6d 6f 6e 69 63 2e 0d 00 42 61 64 20 6f +>3a6f08 70 65 72 61 6e 64 2e 0d 00 52 65 6c 61 74 69 76 +>3a6f18 65 20 6f 66 66 73 65 74 20 69 73 20 74 6f 6f 20 +>3a6f28 6c 61 72 67 65 2e 0d 00 08 0b 08 c2 20 48 a9 48 +>3a6f38 08 5b 68 28 e2 20 a5 4f c9 12 f0 0a c2 20 18 a5 +>3a6f48 32 69 02 00 80 08 c2 20 18 a5 32 69 01 00 85 4a +>3a6f58 a5 34 69 00 00 85 4c 38 a5 50 e5 4a 85 50 a5 52 +>3a6f68 e5 4c 85 52 e2 20 a5 4f c9 16 f0 1e a5 50 30 0c +>3a6f78 a5 51 d0 2a a5 52 d0 26 a9 01 80 26 a5 51 c9 ff +>3a6f88 d0 1c a5 52 c9 ff d0 16 80 18 a5 51 30 06 a5 52 +>3a6f98 d0 0c 80 0e a5 52 c9 ff d0 04 a9 02 80 04 2b 28 +>3a6fa8 18 6b 2b 28 38 6b 08 0b c2 10 da 08 c2 20 48 a9 +>3a6fb8 48 08 5b 68 28 e2 20 a2 00 00 df 00 d0 3a f0 08 +>3a6fc8 e8 e0 10 00 f0 1b 80 f2 c2 20 06 50 26 52 06 50 +>3a6fd8 26 52 06 50 26 52 06 50 26 52 e2 20 8a 05 50 85 +>3a6fe8 50 fa 2b 28 6b 0b 8b 08 c2 20 48 a9 48 08 5b 68 +>3a6ff8 28 08 e2 20 48 a9 3a 48 ab 68 28 e2 20 a5 4f 29 +>3a7008 3f 85 4a c2 30 a2 00 00 a0 00 00 bd ba 76 f0 1b +>3a7018 c5 54 d0 0d e2 20 b9 bc 78 29 3f c5 4a f0 07 c2 +>3a7028 20 e8 e8 c8 80 e5 98 38 ab 2b 6b 18 ab 2b 6b 08 +>3a7038 0b 08 c2 20 48 a9 48 08 5b 68 28 e2 20 c2 10 a0 +>3a7048 00 00 64 50 64 52 b7 03 f0 11 c9 64 f0 19 48 b7 +>3a7058 36 85 4a 68 c5 4a d0 0b c8 80 eb b7 36 d0 04 2b +>3a7068 28 38 6b 2b 28 18 6b e2 20 b7 36 c9 3a b0 04 c9 +>3a7078 30 b0 14 c9 47 b0 04 c9 41 b0 0c c9 67 b0 e4 c9 +>3a7088 61 b0 02 80 de 29 df 22 ae 6f 3a 80 cb 0b 08 c2 +>3a7098 20 48 a9 48 08 5b 68 28 a0 00 00 e2 20 b7 03 f0 +>3a70a8 03 c8 80 f9 c2 20 c8 5a 68 18 65 03 85 03 a5 05 +>3a70b8 69 00 00 85 05 2b 6b 0b 08 c2 20 48 a9 48 08 5b +>3a70c8 68 28 c2 20 a5 11 85 36 a5 13 85 38 a9 48 75 85 +>3a70d8 03 a9 3a 00 85 05 22 37 70 3a b0 0d 22 95 70 3a +>3a70e8 a7 03 d0 f2 a9 ff ff 80 02 a5 03 2b 6b 08 0b 08 +>3a70f8 c2 20 48 a9 48 08 5b 68 28 c2 30 a5 15 85 36 a5 +>3a7108 17 85 38 a9 d4 79 85 03 a9 3a 00 85 05 22 37 70 +>3a7118 3a b0 22 22 95 70 3a c2 20 18 a5 03 69 01 00 85 +>3a7128 03 a5 05 69 00 00 85 05 e2 20 a7 03 d0 df c2 20 +>3a7138 a9 ff ff 80 0d 22 95 70 3a e2 20 a7 03 c2 20 29 +>3a7148 ff 00 2b 28 6b 08 8b 0b 08 c2 20 48 a9 48 08 5b +>3a7158 68 28 e2 20 a9 00 8f b6 08 00 a5 31 c9 02 b0 16 +>3a7168 c9 01 90 20 c2 20 18 a5 0d 69 00 01 85 11 e2 20 +>3a7178 a5 0f 69 00 85 13 c2 20 a5 0d 85 32 e2 20 a5 0f +>3a7188 85 34 80 12 c2 20 18 a5 32 69 00 01 85 11 e2 20 +>3a7198 a5 34 69 00 85 13 22 b9 71 3a e2 20 a5 34 c5 13 +>3a71a8 90 f4 c2 20 a5 32 c5 11 90 ec 20 4e 02 2b ab 28 +>3a71b8 6b 08 0b e2 20 a9 41 20 18 00 a9 20 20 18 00 08 +>3a71c8 c2 20 48 a9 7a 08 5b 68 28 c2 20 a5 00 85 18 e2 +>3a71d8 20 a5 02 85 1a 22 20 75 3a a9 20 20 18 00 c2 20 +>3a71e8 18 a5 00 69 01 00 85 18 e2 20 a5 02 69 00 85 1a +>3a71f8 e2 20 c2 10 a7 00 c9 c2 d0 0b 48 a7 18 49 ff 2f +>3a7208 96 08 00 80 0b c9 e2 d0 0c 48 a7 18 0f 96 08 00 +>3a7218 8f 96 08 00 68 c2 20 29 ff 00 0a aa bf ba 76 3a +>3a7228 aa 22 9a 74 3a e2 20 a7 00 aa bf bc 78 3a 22 76 +>3a7238 7a 3a 22 47 72 3a 20 4e 02 20 65 02 2b 28 6b 08 +>3a7248 e2 20 48 29 3f 0a c2 10 aa 68 7c 55 72 85 72 a0 +>3a7258 72 a7 72 cc 72 d3 72 ee 72 10 73 21 73 5e 73 66 +>3a7268 73 77 73 88 73 8f 73 b4 73 e1 73 4d 73 32 73 ff +>3a7278 72 d4 73 de 73 f2 73 21 74 cf 73 32 74 a9 28 20 +>3a7288 18 00 22 49 74 3a a9 2c 20 18 00 a9 58 20 18 00 +>3a7298 a9 29 20 18 00 4c 43 74 22 49 74 3a 4c 43 74 e2 +>3a72a8 20 48 a9 23 20 18 00 68 29 c0 c9 00 f0 0f 4a 4a +>3a72b8 2f 96 08 00 d0 07 22 53 74 3a 4c 43 74 22 49 74 +>3a72c8 3a 4c 43 74 22 53 74 3a 4c 43 74 a9 28 20 18 00 +>3a72d8 22 49 74 3a a9 29 20 18 00 a9 2c 20 18 00 a9 59 +>3a72e8 20 18 00 4c 43 74 22 49 74 3a a9 2c 20 18 00 a9 +>3a72f8 58 20 18 00 4c 43 74 22 49 74 3a a9 2c 20 18 00 +>3a7308 a9 59 20 18 00 4c 43 74 22 53 74 3a a9 2c 20 18 +>3a7318 00 a9 59 20 18 00 4c 43 74 22 53 74 3a a9 2c 20 +>3a7328 18 00 a9 58 20 18 00 4c 43 74 a9 28 20 18 00 22 +>3a7338 53 74 3a a9 2c 20 18 00 a9 58 20 18 00 a9 29 20 +>3a7348 18 00 4c 43 74 a9 28 20 18 00 22 49 74 3a a9 29 +>3a7358 20 18 00 4c 43 74 a9 41 20 18 00 4c 47 74 22 49 +>3a7368 74 3a a9 2c 20 18 00 a9 53 20 18 00 4c 43 74 a9 +>3a7378 5b 20 18 00 22 49 74 3a a9 5d 20 18 00 4c 43 74 +>3a7388 22 61 74 3a 4c 47 74 a9 28 20 18 00 22 49 74 3a +>3a7398 a9 2c 20 18 00 a9 53 20 18 00 a9 29 20 18 00 a9 +>3a73a8 2c 20 18 00 a9 59 20 18 00 4c 43 74 a9 5b 20 18 +>3a73b8 00 22 49 74 3a a9 5d 20 18 00 a9 2c 20 18 00 a9 +>3a73c8 59 20 18 00 4c 43 74 a0 02 00 80 03 a0 01 00 22 +>3a73d8 c7 74 3a 4c 47 74 4c 47 74 22 61 74 3a a9 2c 20 +>3a73e8 18 00 a9 58 20 18 00 4c 47 74 a9 23 20 18 00 8b +>3a73f8 a5 02 48 ab a6 00 e8 a0 01 00 22 5e 02 3a a9 2c +>3a7408 20 18 00 a9 23 20 18 00 a6 00 a0 01 00 22 5e 02 +>3a7418 3a ab 22 76 7a 3a 4c 43 74 a9 28 20 18 00 22 53 +>3a7428 74 3a a9 29 20 18 00 4c 43 74 a9 5b 20 18 00 22 +>3a7438 53 74 3a a9 5d 20 18 00 4c 43 74 22 76 7a 3a 28 +>3a7448 6b 08 e2 20 a7 00 20 05 03 28 6b 08 c2 30 a7 00 +>3a7458 20 eb 02 22 76 7a 3a 28 6b 08 8b 0b c2 30 5a 08 +>3a7468 c2 20 48 a9 7a 08 5b 68 28 08 e2 20 48 a9 00 48 +>3a7478 ab 68 28 e2 20 a0 00 00 a7 00 99 92 08 22 76 7a +>3a7488 3a c8 c0 03 00 d0 f1 22 20 75 3a c2 30 7a 2b ab +>3a7498 28 6b 08 8b e2 20 c2 10 08 e2 20 48 a9 3a 48 ab +>3a74a8 68 28 bd 00 00 20 18 00 e8 bd 00 00 20 18 00 e8 +>3a74b8 bd 00 00 20 18 00 e8 a9 20 20 18 00 ab 28 6b 08 +>3a74c8 0b 08 c2 20 48 a9 7a 08 5b 68 28 e2 20 c0 02 00 +>3a74d8 f0 14 a7 00 85 18 30 06 64 19 64 1a 80 1e a9 ff +>3a74e8 85 19 85 1a 80 16 a7 00 85 18 22 76 7a 3a a7 00 +>3a74f8 85 19 30 04 64 1a 80 04 a9 ff 85 1a c2 20 38 a5 +>3a7508 00 65 18 85 18 e2 20 a5 02 65 1a 85 1a 22 20 75 +>3a7518 3a 22 76 7a 3a 2b 28 6b 08 0b c2 20 48 08 c2 20 +>3a7528 48 a9 48 08 5b 68 28 e2 20 a5 4c 20 05 03 e2 20 +>3a7538 a9 3a 20 18 00 c2 20 a5 4a 20 eb 02 68 2b 28 6b +>3a7548 4f 52 41 00 41 4e 44 00 45 4f 52 00 41 44 43 00 +>3a7558 53 54 41 00 4c 44 41 00 43 4d 50 00 53 42 43 00 +>3a7568 41 53 4c 00 52 4f 4c 00 4c 53 52 00 52 4f 52 00 +>3a7578 53 54 58 00 4c 44 58 00 44 45 43 00 49 4e 43 00 +>3a7588 42 49 54 00 4a 4d 50 00 53 54 59 00 4c 44 59 00 +>3a7598 43 50 59 00 43 50 58 00 42 52 4b 00 4a 53 52 00 +>3a75a8 52 54 49 00 52 54 53 00 50 48 50 00 50 4c 50 00 +>3a75b8 50 48 41 00 50 4c 41 00 44 45 59 00 54 41 59 00 +>3a75c8 49 4e 59 00 49 4e 58 00 43 4c 43 00 53 45 43 00 +>3a75d8 43 4c 49 00 53 45 49 00 54 59 41 00 43 4c 56 00 +>3a75e8 43 4c 44 00 53 45 44 00 54 58 41 00 54 58 53 00 +>3a75f8 54 41 58 00 54 53 58 00 44 45 58 00 4e 4f 50 00 +>3a7608 42 50 4c 00 42 4d 49 00 42 56 43 00 42 56 53 00 +>3a7618 42 43 43 00 42 43 53 00 42 4e 45 00 42 45 51 00 +>3a7628 54 53 42 00 54 52 42 00 53 54 5a 00 42 52 41 00 +>3a7638 50 48 59 00 50 4c 59 00 50 48 58 00 50 4c 58 00 +>3a7648 50 48 44 00 50 4c 44 00 50 48 4b 00 52 54 4c 00 +>3a7658 50 48 42 00 50 4c 42 00 57 41 49 00 58 42 41 00 +>3a7668 54 43 53 00 54 53 43 00 54 43 44 00 54 44 43 00 +>3a7678 54 58 59 00 54 59 58 00 53 54 50 00 58 43 45 00 +>3a7688 43 4f 50 00 4a 53 4c 00 57 44 4d 00 50 45 52 00 +>3a7698 42 52 4c 00 52 45 50 00 53 45 50 00 4d 56 50 00 +>3a76a8 4d 56 4e 00 50 45 49 00 50 45 41 00 4a 4d 4c 00 +>3a76b8 00 00 a0 75 48 75 88 76 48 75 28 76 48 75 68 75 +>3a76c8 48 75 b0 75 48 75 68 75 48 76 28 76 48 75 68 75 +>3a76d8 48 75 08 76 48 75 48 75 48 75 2c 76 48 75 68 75 +>3a76e8 48 75 d0 75 48 75 84 75 68 76 2c 76 48 75 68 75 +>3a76f8 48 75 a4 75 4c 75 8c 76 4c 75 88 75 4c 75 6c 75 +>3a7708 4c 75 b4 75 4c 75 6c 75 4c 76 88 75 4c 75 6c 75 +>3a7718 4c 75 0c 76 4c 75 4c 75 4c 75 88 75 4c 75 6c 75 +>3a7728 4c 75 d4 75 4c 75 80 75 6c 76 88 75 4c 75 6c 75 +>3a7738 4c 75 a8 75 50 75 90 76 50 75 a4 76 50 75 70 75 +>3a7748 50 75 b8 75 50 75 70 75 50 76 8c 75 50 75 70 75 +>3a7758 50 75 10 76 50 75 50 75 50 75 a8 76 50 75 70 75 +>3a7768 50 75 d8 75 50 75 38 76 70 76 b4 76 50 75 70 75 +>3a7778 50 75 ac 75 54 75 94 76 54 75 30 76 54 75 74 75 +>3a7788 54 75 bc 75 54 75 74 75 54 76 8c 75 54 75 74 75 +>3a7798 54 75 14 76 54 75 54 75 54 75 30 76 54 75 74 75 +>3a77a8 54 75 dc 75 54 75 3c 76 74 76 8c 75 54 75 74 75 +>3a77b8 54 75 34 76 58 75 98 76 58 75 90 75 58 75 78 75 +>3a77c8 58 75 c0 75 88 75 f0 75 58 76 90 75 58 75 78 75 +>3a77d8 58 75 18 76 58 75 58 75 58 75 90 75 58 75 78 75 +>3a77e8 58 75 e0 75 58 75 f4 75 78 76 30 76 58 75 30 76 +>3a77f8 58 75 94 75 5c 75 7c 75 5c 75 94 75 5c 75 7c 75 +>3a7808 5c 75 c4 75 5c 75 f8 75 5c 76 94 75 5c 75 7c 75 +>3a7818 5c 75 1c 76 5c 75 5c 75 5c 75 94 75 5c 75 7c 75 +>3a7828 5c 75 e4 75 5c 75 fc 75 7c 76 94 75 5c 75 7c 75 +>3a7838 5c 75 98 75 60 75 9c 76 60 75 98 75 60 75 80 75 +>3a7848 60 75 c8 75 60 75 00 76 60 76 98 75 60 75 80 75 +>3a7858 60 75 20 76 60 75 60 75 60 75 ac 76 60 75 80 75 +>3a7868 60 75 e8 75 60 75 40 76 80 76 b4 76 60 75 80 75 +>3a7878 60 75 9c 75 64 75 a0 76 64 75 9c 75 64 75 84 75 +>3a7888 64 75 cc 75 64 75 04 76 64 76 9c 75 64 75 84 75 +>3a7898 64 75 24 76 64 75 64 75 64 75 b0 76 64 75 84 75 +>3a78a8 64 75 ec 75 64 75 44 76 84 76 a4 75 64 75 84 75 +>3a78b8 64 75 00 00 13 00 02 09 01 01 01 0a 13 82 08 13 +>3a78c8 03 03 03 0b 12 04 0f 0c 01 05 05 0d 13 06 08 13 +>3a78d8 03 07 07 0e 03 00 0b 09 01 01 01 0a 13 82 08 13 +>3a78e8 03 03 03 0b 12 04 0f 0c 05 05 05 0d 13 06 08 13 +>3a78f8 07 07 07 0e 13 00 13 09 14 01 01 0a 13 82 08 13 +>3a7908 03 03 03 0b 12 04 0f 0c 14 05 05 0d 13 06 13 13 +>3a7918 0b 07 07 0b 13 00 16 09 01 01 01 0a 13 82 08 13 +>3a7928 15 03 03 0b 12 04 0f 0c 05 05 05 0d 13 06 13 13 +>3a7938 10 07 07 0e 12 00 16 09 01 01 01 0a 13 82 13 13 +>3a7948 03 03 03 0b 12 04 0f 0c 05 05 11 0d 13 06 13 13 +>3a7958 03 07 07 0e 82 00 42 09 01 01 01 0a 13 82 13 13 +>3a7968 03 03 03 0b 12 04 0f 0c 05 05 11 0d 13 06 13 13 +>3a7978 07 07 06 0e 42 00 02 09 01 01 01 0a 13 82 13 13 +>3a7988 03 03 03 0b 12 04 0f 0c 01 05 05 0d 13 06 13 13 +>3a7998 17 07 07 0e 42 00 02 09 01 01 01 0f 13 82 13 13 +>3a79a8 03 03 03 0b 12 04 0f 0c 03 05 05 0d 13 06 13 13 +>3a79b8 10 07 07 0e 01 01 01 02 01 01 02 02 00 01 01 03 +>3a79c8 01 01 03 01 02 01 01 00 02 02 02 02 41 00 08 64 +>3a79d8 64 3a 64 64 64 64 2c 58 00 0e 64 64 3a 64 64 64 +>3a79e8 64 00 0b 64 64 64 64 2c 58 00 07 64 64 64 64 2c +>3a79f8 59 00 06 64 64 64 64 00 03 64 64 2c 58 00 05 64 +>3a7a08 64 2c 59 00 11 64 64 2c 53 00 09 64 64 00 01 23 +>3a7a18 64 64 64 64 00 c2 23 64 64 2c 23 64 64 00 14 23 +>3a7a28 64 64 00 02 28 64 64 2c 53 29 2c 59 00 0c 28 64 +>3a7a38 64 64 64 2c 58 29 00 10 28 64 64 64 64 29 00 10 +>3a7a48 28 64 64 2c 58 29 00 00 28 64 64 29 2c 59 00 04 +>3a7a58 28 64 64 29 00 0f 5b 64 64 64 64 5d 00 17 5b 64 +>3a7a68 64 5d 2c 59 00 0d 5b 64 64 5d 00 0a 00 00 08 c2 +>3a7a78 20 48 18 af 7a 08 00 69 01 00 8f 7a 08 00 e2 20 +>3a7a88 af 7c 08 00 69 00 8f 7c 08 00 c2 20 68 28 6b 08 +>3a7a98 c2 10 e2 20 da a2 08 00 0a b0 08 48 a9 30 20 18 +>3a7aa8 00 80 06 48 a9 31 20 18 00 68 ca d0 eb fa 28 6b +>3a7ab8 08 c2 20 48 a9 48 08 5b 68 28 e2 20 a7 32 f0 0a +>3a7ac8 c9 20 d0 06 22 76 7a 3a 80 f2 6b 08 08 c2 20 48 +>3a7ad8 a9 48 08 5b 68 28 22 76 7a 3a 22 b8 7a 3a c2 30 +>3a7ae8 a5 31 c2 20 29 ff 00 0a 0a aa a5 32 95 0d a5 34 +>3a7af8 95 0f e2 20 a7 32 f0 14 c9 22 f0 06 22 76 7a 3a +>3a7b08 80 f2 a9 00 87 32 22 76 7a 3a e6 31 28 6b 08 c2 +>3a7b18 20 48 a9 48 08 5b 68 28 e2 20 64 4a c2 20 64 50 +>3a7b28 64 52 e2 20 a7 32 c9 3a f0 0d 20 83 03 90 0e 22 +>3a7b38 ae 6f 3a a9 01 85 4a 22 76 7a 3a 80 e5 a5 4a f0 +>3a7b48 16 a5 31 c2 20 29 ff 00 0a 0a aa a5 50 95 0d a5 +>3a7b58 52 95 0f e2 20 e6 31 6b e2 20 64 31 22 b8 7a 3a +>3a7b68 a7 32 f0 21 c9 22 d0 06 22 d3 7a 3a 80 0a 22 16 +>3a7b78 7b 3a a5 31 c9 09 b0 0d a7 32 f0 09 c9 20 f0 dc +>3a7b88 20 83 03 b0 d7 6b 08 0b 08 c2 20 48 a9 48 08 5b +>3a7b98 68 28 c2 10 e2 20 a2 31 00 74 00 ca d0 fb a9 00 +>3a7ba8 85 02 85 34 c2 20 a9 00 4f 85 00 85 32 e2 20 22 +>3a7bb8 b8 7a 3a c9 00 f0 38 c2 20 a5 32 85 08 e2 20 a5 +>3a7bc8 34 85 0a a2 01 00 22 76 7a 3a a7 32 d0 06 86 0b +>3a7bd8 64 31 80 1b c9 20 f0 03 e8 80 eb 86 0b a9 00 87 +>3a7be8 32 22 76 7a 3a a7 08 c9 41 f0 07 22 60 7b 3a 2b +>3a7bf8 28 6b 22 b8 7a 3a a7 32 f0 f5 22 16 7b 3a 22 b8 +>3a7c08 7a 3a a7 32 f0 e9 c2 20 a5 32 85 11 e2 20 a5 34 +>3a7c18 85 13 22 76 7a 3a a7 32 f0 26 c9 20 d0 f4 a9 00 +>3a7c28 87 32 e6 31 22 76 7a 3a 22 b8 7a 3a a7 32 f0 bf +>3a7c38 c2 20 a5 32 85 15 e2 20 a5 34 85 17 e6 31 80 af +>3a7c48 e6 31 80 ab 08 c2 10 e2 20 a5 31 d0 0f a2 42 7d +>3a7c58 a9 3a 48 ab 20 db 02 20 4e 02 80 61 c2 20 a5 0d +>3a7c68 8f 23 08 00 a5 0f 8f 25 08 00 20 32 5e e2 20 a5 +>3a7c78 31 c9 01 d0 0f c2 20 a9 ff ff 8f 54 03 00 8f 56 +>3a7c88 03 00 80 0e c2 20 a5 11 8f 54 03 00 a5 13 8f 56 +>3a7c98 03 00 22 18 11 00 b0 25 e2 20 a2 68 7d a9 3a 48 +>3a7ca8 ab 20 db 02 af 2e 03 00 20 05 03 a9 20 20 18 00 +>3a7cb8 af 20 03 00 20 05 03 20 4e 02 20 4e 02 28 6b 8b +>3a7cc8 08 c2 10 e2 20 a5 31 c9 03 f0 0f a2 42 7d a9 3a +>3a7cd8 48 ab 20 db 02 20 4e 02 80 54 c2 20 a5 0d 8f 23 +>3a7ce8 08 00 a5 0f 8f 25 08 00 20 32 5e a5 11 8f 50 03 +>3a7cf8 00 a5 13 8f 52 03 00 a5 15 8f 58 03 00 a5 17 8f +>3a7d08 5a 03 00 22 1c 11 00 b0 25 e2 20 a2 52 7d a9 3a +>3a7d18 48 ab 20 db 02 af 2e 03 00 20 05 03 a9 20 20 18 +>3a7d28 00 af 20 03 00 20 05 03 20 4e 02 20 4e 02 28 ab +>3a7d38 6b 5c 3d 25 3a 6b 00 00 00 00 42 61 64 20 61 72 +>3a7d48 67 75 6d 65 6e 74 73 0d 0d 00 55 6e 61 62 6c 65 +>3a7d58 20 74 6f 20 73 61 76 65 20 66 69 6c 65 3a 20 00 +>3a7d68 55 6e 61 62 6c 65 20 74 6f 20 6c 6f 61 64 20 66 +>3a7d78 69 6c 65 3a 20 00 0d 20 20 50 43 20 20 20 20 20 +>3a7d88 41 20 20 20 20 58 20 20 20 20 59 20 20 20 20 53 +>3a7d98 50 20 20 20 44 42 52 20 44 50 20 20 20 4e 56 4d +>3a7da8 58 44 49 5a 43 0d 00 41 43 44 46 47 4a 48 4c 4d +>3a7db8 52 3b 53 54 56 57 58 3e 3f 00 18 fb 08 c2 20 48 +>3a7dc8 a9 00 08 5b 68 28 08 e2 20 48 a9 00 48 ab 68 28 +>3a7dd8 c2 30 20 01 7e a9 ff fe 1b 08 e2 20 48 a9 3a 48 +>3a7de8 ab 68 28 a2 43 d2 20 db 02 08 e2 20 48 a9 00 48 +>3a7df8 ab 68 28 4c 3d 25 4c fe 7d 08 20 d0 01 20 70 4b +>3a7e08 28 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +>3a7e18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +; ...repeated 1309 times (20944 bytes)... >3acff8 00 00 00 00 00 00 00 00 30 31 32 33 34 35 36 37 >3ad008 38 39 41 42 43 44 45 46 2b 00 2d 00 2a 00 2f 00 ->3ad018 4d 4f 44 00 5e 00 3c 00 3d 00 3e 00 4e 4f 54 00 ->3ad028 41 4e 44 00 4f 52 00 28 00 29 00 52 45 4d 00 50 ->3ad038 52 49 4e 54 00 4c 45 54 00 47 4f 54 4f 00 45 4e ->3ad048 44 00 49 46 00 54 48 45 4e 00 45 4c 53 45 00 47 ->3ad058 4f 53 55 42 00 52 45 54 55 52 4e 00 46 4f 52 00 ->3ad068 54 4f 00 53 54 45 50 00 4e 45 58 54 00 44 4f 00 ->3ad078 4c 4f 4f 50 00 57 48 49 4c 45 00 55 4e 54 49 4c ->3ad088 00 45 58 49 54 00 43 4c 52 00 53 54 4f 50 00 50 ->3ad098 4f 4b 45 00 50 4f 4b 45 57 00 50 4f 4b 45 4c 00 ->3ad0a8 43 4c 53 00 52 45 41 44 00 44 41 54 41 00 52 45 ->3ad0b8 53 54 4f 52 45 00 44 49 4d 00 43 41 4c 4c 00 3c ->3ad0c8 3d 00 3e 3d 00 3c 3e 00 2d 00 4c 45 4e 00 50 45 +>3ad018 4d 4f 44 00 5e 00 3c 3d 00 3e 3d 00 3c 3e 00 3c +>3ad028 00 3d 00 3e 00 4e 4f 54 00 41 4e 44 00 4f 52 00 +>3ad038 28 00 29 00 52 45 4d 00 50 52 49 4e 54 00 4c 45 +>3ad048 54 00 47 4f 54 4f 00 45 4e 44 00 49 46 00 54 48 +>3ad058 45 4e 00 45 4c 53 45 00 47 4f 53 55 42 00 52 45 +>3ad068 54 55 52 4e 00 46 4f 52 00 54 4f 00 53 54 45 50 +>3ad078 00 4e 45 58 54 00 44 4f 00 4c 4f 4f 50 00 57 48 +>3ad088 49 4c 45 00 55 4e 54 49 4c 00 45 58 49 54 00 43 +>3ad098 4c 52 00 53 54 4f 50 00 50 4f 4b 45 00 50 4f 4b +>3ad0a8 45 57 00 50 4f 4b 45 4c 00 43 4c 53 00 52 45 41 +>3ad0b8 44 00 44 41 54 41 00 52 45 53 54 4f 52 45 00 44 +>3ad0c8 49 4d 00 43 41 4c 4c 00 2d 00 4c 45 4e 00 50 45 >3ad0d8 45 4b 00 50 45 45 4b 57 00 50 45 45 4b 4c 00 43 >3ad0e8 48 52 24 00 41 53 43 00 53 50 43 00 54 41 42 00 >3ad0f8 41 42 53 00 53 47 4e 00 48 45 58 24 00 44 45 43 @@ -15949,10 +16060,11 @@ >3ad1f8 49 54 45 53 48 4f 57 00 54 49 4c 45 53 45 54 00 >3ad208 54 49 4c 45 4d 41 50 00 54 49 4c 45 53 48 4f 57 >3ad218 00 54 49 4c 45 41 54 00 4d 45 4d 43 4f 50 59 00 ->3ad228 4c 49 4e 45 41 52 00 52 45 43 54 00 0d 52 45 41 ->3ad238 44 59 0d 00 43 32 35 36 20 46 6f 65 6e 69 78 20 ->3ad248 42 41 53 49 43 38 31 36 20 76 30 2e 31 2e 30 2d ->3ad258 61 6c 70 68 61 2b 32 36 33 0d 00 +>3ad228 4c 49 4e 45 41 52 00 52 45 43 54 00 4c 4f 43 41 +>3ad238 54 45 00 0d 52 45 41 44 59 0d 00 43 32 35 36 20 +>3ad248 46 6f 65 6e 69 78 20 42 41 53 49 43 38 31 36 20 +>3ad258 76 30 2e 32 2e 30 2d 61 6c 70 68 61 2b 31 32 38 +>3ad268 0d 00 >3b0000 .align 256 .3b0000 CREDITS_TEXT >3b0000 54 68 69 73 20 69 73 20 .text "This is the credits screen!" @@ -15990,5 +16102,264 @@ >3b2008 f3 f3 f3 f3 f3 f3 f3 f3 f3 f3 f3 f3 f3 f3 f3 f3 ; ...repeated 510 times (8160 bytes)... >3b3ff8 f3 f3 f3 f3 f3 f3 f3 f3 +.3f0000 FONT_4_BANK0 +>3f0000 00 00 00 00 00 00 00 00 .binary "FONT/Bm437_PhoenixEGA_8x8.bin", 0, 2048 +>3f0008 7e 81 a5 81 bd 99 81 7e 3c 7e db ff c3 7e 3c 00 +>3f0018 00 ee fe fe 7c 38 10 00 10 38 7c fe 7c 38 10 00 +>3f0028 00 3c 18 ff ff 08 18 00 10 38 7c fe fe 10 38 00 +>3f0038 00 00 18 3c 18 00 00 00 ff ff e7 c3 e7 ff ff ff +>3f0048 00 3c 42 81 81 42 3c 00 ff c3 bd 7e 7e bd c3 ff +>3f0058 01 03 07 0f 1f 3f 7f ff ff fe fc f8 f0 e0 c0 80 +>3f0068 04 06 07 04 04 fc f8 00 0c 0a 0d 0b f9 f9 1f 1f +>3f0078 00 92 7c 44 c6 7c 92 00 00 00 60 78 7e 78 60 00 +>3f0088 00 00 06 1e 7e 1e 06 00 18 7e 18 18 18 18 7e 18 +>3f0098 66 66 66 66 66 00 66 00 ff b6 76 36 36 36 36 00 +>3f00a8 7e c1 dc 22 22 1f 83 7e 00 00 00 7e 7e 00 00 00 +>3f00b8 18 7e 18 18 7e 18 00 ff 18 7e 18 18 18 18 18 00 +>3f00c8 18 18 18 18 18 7e 18 00 00 04 06 ff 06 04 00 00 +>3f00d8 00 20 60 ff 60 20 00 00 00 00 00 c0 c0 c0 ff 00 +>3f00e8 00 24 66 ff 66 24 00 00 00 00 10 38 7c fe 00 00 +>3f00f8 00 00 00 fe 7c 38 10 00 00 00 00 00 00 00 00 00 +>3f0108 30 30 30 30 30 00 30 00 66 66 00 00 00 00 00 00 +>3f0118 6c 6c fe 6c fe 6c 6c 00 10 7c d2 7c 86 7c 10 00 +>3f0128 f0 96 fc 18 3e 72 de 00 30 48 30 78 ce cc 78 00 +>3f0138 0c 0c 18 00 00 00 00 00 10 60 c0 c0 c0 60 10 00 +>3f0148 10 0c 06 06 06 0c 10 00 00 54 38 fe 38 54 00 00 +>3f0158 00 18 18 7e 18 18 00 00 00 00 00 00 00 00 18 70 +>3f0168 00 00 00 7e 00 00 00 00 00 00 00 00 00 00 18 00 +>3f0178 02 06 0c 18 30 60 c0 00 7c ce de f6 e6 e6 7c 00 +>3f0188 18 38 78 18 18 18 3c 00 7c c6 06 0c 30 60 fe 00 +>3f0198 7c c6 06 3c 06 c6 7c 00 0e 1e 36 66 fe 06 06 00 +>3f01a8 fe c0 c0 fc 06 06 fc 00 7c c6 c0 fc c6 c6 7c 00 +>3f01b8 fe 06 0c 18 30 60 60 00 7c c6 c6 7c c6 c6 7c 00 +>3f01c8 7c c6 c6 7e 06 c6 7c 00 00 30 00 00 00 30 00 00 +>3f01d8 00 30 00 00 00 30 20 00 00 1c 30 60 30 1c 00 00 +>3f01e8 00 00 7e 00 7e 00 00 00 00 70 18 0c 18 70 00 00 +>3f01f8 7c c6 0c 18 30 00 30 00 7c 82 9a aa aa 9e 7c 00 +>3f0208 7c c6 c6 fe c6 c6 c6 00 fc 66 66 7c 66 66 fc 00 +>3f0218 7c c6 c0 c0 c0 c6 7c 00 fc 66 66 66 66 66 fc 00 +>3f0228 fe 62 68 78 68 62 fe 00 fe 62 68 78 68 60 f0 00 +>3f0238 7c c6 c6 c0 de c6 7c 00 c6 c6 c6 fe c6 c6 c6 00 +>3f0248 3c 18 18 18 18 18 3c 00 1e 0c 0c 0c 0c cc 78 00 +>3f0258 c6 cc d8 f0 d8 cc c6 00 f0 60 60 60 60 62 fe 00 +>3f0268 c6 ee fe d6 c6 c6 c6 00 c6 e6 f6 de ce c6 c6 00 +>3f0278 7c c6 c6 c6 c6 c6 7c 00 fc 66 66 7c 60 60 f0 00 +>3f0288 7c c6 c6 c6 c6 c6 7c 0c fc 66 66 7c 66 66 e6 00 +>3f0298 7c c6 c0 7c 06 c6 7c 00 7e 5a 18 18 18 18 3c 00 +>3f02a8 c6 c6 c6 c6 c6 c6 7c 00 c6 c6 c6 c6 c6 6c 38 00 +>3f02b8 c6 c6 c6 c6 d6 ee c6 00 c6 6c 38 38 38 6c c6 00 +>3f02c8 66 66 66 3c 18 18 3c 00 fe c6 0c 18 30 66 fe 00 +>3f02d8 1c 18 18 18 18 18 1c 00 c0 60 30 18 0c 06 02 00 +>3f02e8 70 30 30 30 30 30 70 00 00 00 10 38 6c c6 00 00 +>3f02f8 00 00 00 00 00 00 00 ff 30 30 18 00 00 00 00 00 +>3f0308 00 00 7c 06 7e c6 7e 00 c0 c0 fc c6 c6 c6 fc 00 +>3f0318 00 00 7c c6 c0 c6 7c 00 06 06 7e c6 c6 c6 7e 00 +>3f0328 00 00 7c c6 fe c0 7c 00 3c 66 60 f0 60 60 60 00 +>3f0338 00 00 7e c6 c6 7e 06 7c c0 c0 fc c6 c6 c6 c6 00 +>3f0348 18 00 38 18 18 18 3c 00 00 0c 00 1c 0c 0c cc 78 +>3f0358 c0 c0 c6 d8 f0 d8 c6 00 38 18 18 18 18 18 3c 00 +>3f0368 00 00 ee fe d6 c6 c6 00 00 00 fc c6 c6 c6 c6 00 +>3f0378 00 00 7c c6 c6 c6 7c 00 00 00 fc c6 c6 fc c0 c0 +>3f0388 00 00 7e c6 c6 7e 06 06 00 00 de 76 60 60 60 00 +>3f0398 00 00 7c c0 7c 06 7c 00 18 18 7e 18 18 18 1e 00 +>3f03a8 00 00 c6 c6 c6 c6 7e 00 00 00 c6 c6 c6 6c 38 00 +>3f03b8 00 00 c6 c6 d6 fe c6 00 00 00 c6 6c 38 6c c6 00 +>3f03c8 00 00 c6 c6 c6 7e 06 7c 00 00 fe 0c 18 60 fe 00 +>3f03d8 0e 18 18 70 18 18 0e 00 18 18 18 00 18 18 18 00 +>3f03e8 e0 30 30 1c 30 30 e0 00 00 00 70 9a 0e 00 00 00 +>3f03f8 00 00 18 3c 66 ff 00 00 7c c6 c0 c0 c6 7c 18 70 +>3f0408 66 00 c6 c6 c6 c6 7e 00 0e 18 7c c6 fe c0 7c 00 +>3f0418 18 24 7c 06 7e c6 7e 00 66 00 7c 06 7e c6 7e 00 +>3f0428 38 0c 7c 06 7e c6 7e 00 18 00 7c 06 7e c6 7e 00 +>3f0438 00 00 7c c0 c0 7c 18 70 18 24 7c c6 fe c0 7c 00 +>3f0448 66 00 7c c6 fe c0 7c 00 70 18 7c c6 fe c0 7c 00 +>3f0458 66 00 38 18 18 18 3c 00 18 24 38 18 18 18 3c 00 +>3f0468 38 0c 38 18 18 18 3c 00 66 00 7c c6 fe c6 c6 00 +>3f0478 18 00 7c c6 fe c6 c6 00 0e 18 fe 60 78 60 fe 00 +>3f0488 00 00 7c 1a 7e d8 7e 00 7e d8 d8 de f8 d8 de 00 +>3f0498 18 24 7c c6 c6 c6 7c 00 66 00 7c c6 c6 c6 7c 00 +>3f04a8 38 0c 7c c6 c6 c6 7c 00 18 24 c6 c6 c6 c6 7e 00 +>3f04b8 38 0c c6 c6 c6 c6 7e 00 66 00 c6 c6 c6 7e 06 7c +>3f04c8 66 7c c6 c6 c6 c6 7c 00 c6 00 c6 c6 c6 c6 7c 00 +>3f04d8 18 7c c6 c0 c6 7c 18 00 1e 32 30 78 30 70 fe 00 +>3f04e8 66 3c 18 7e 18 3c 18 00 fc c6 fc c0 cc de cc 0e +>3f04f8 00 1c 32 30 fc 30 f0 00 0e 18 7c 06 7e c6 7e 00 +>3f0508 1a 30 38 18 18 18 3c 00 0e 18 7c c6 c6 c6 7c 00 +>3f0518 0e 18 c6 c6 c6 c6 7e 00 66 98 fc c6 c6 c6 c6 00 +>3f0528 66 98 e6 f6 de ce c6 00 7c 06 7e c6 7e 00 fe 00 +>3f0538 7c c6 c6 c6 7c 00 fe 00 18 00 18 30 60 c6 7c 00 +>3f0548 00 00 fe c0 c0 c0 c0 00 00 00 fe 06 06 06 06 00 +>3f0558 c0 c0 c0 de 06 0c 1e 00 c0 c0 c0 cc 1c 3e 0c 00 +>3f0568 30 00 30 30 30 30 30 00 00 36 6c d8 6c 36 00 00 +>3f0578 00 d8 6c 36 6c d8 00 00 aa aa aa aa aa aa aa aa +>3f0588 aa 55 aa 55 aa 55 aa 55 44 22 44 22 44 22 44 22 +>3f0598 18 18 18 18 18 18 18 18 18 18 18 f8 18 18 18 18 +>3f05a8 18 18 18 f8 18 f8 18 18 36 36 36 f6 36 36 36 36 +>3f05b8 00 00 00 fe 36 36 36 36 00 00 00 f8 18 f8 18 18 +>3f05c8 36 36 36 f6 06 f6 36 36 36 36 36 36 36 36 36 36 +>3f05d8 00 00 00 fe 06 f6 36 36 36 36 36 f6 06 fe 00 00 +>3f05e8 36 36 36 fe 00 00 00 00 18 18 18 f8 18 f8 00 00 +>3f05f8 00 00 00 f8 18 18 18 18 18 18 18 1f 00 00 00 00 +>3f0608 18 18 18 ff 00 00 00 00 00 00 00 ff 18 18 18 18 +>3f0618 18 18 18 1f 18 18 18 18 00 00 00 ff 00 00 00 00 +>3f0628 18 18 18 ff 18 18 18 18 18 18 18 1f 18 1f 18 18 +>3f0638 36 36 36 37 36 36 36 36 36 36 36 37 30 3f 00 00 +>3f0648 00 00 00 3f 30 37 36 36 36 36 36 f7 00 ff 00 00 +>3f0658 00 00 00 ff 00 f7 36 36 36 36 36 37 30 37 36 36 +>3f0668 00 00 00 ff 00 ff 00 00 36 36 36 f7 00 f7 36 36 +>3f0678 18 18 18 ff 00 ff 00 00 36 36 36 ff 00 00 00 00 +>3f0688 00 00 00 ff 00 ff 18 18 00 00 00 ff 36 36 36 36 +>3f0698 36 36 36 3f 00 00 00 00 18 18 18 1f 18 1f 00 00 +>3f06a8 00 00 00 1f 18 1f 18 18 00 00 00 3f 36 36 36 36 +>3f06b8 36 36 36 ff 36 36 36 36 18 18 18 ff 18 ff 18 18 +>3f06c8 18 18 18 f8 00 00 00 00 00 00 00 1f 18 18 18 18 +>3f06d8 ff ff ff ff ff ff ff ff 00 00 00 00 ff ff ff ff +>3f06e8 f0 f0 f0 f0 f0 f0 f0 f0 0f 0f 0f 0f 0f 0f 0f 0f +>3f06f8 ff ff ff ff 00 00 00 00 00 00 77 98 98 77 00 00 +>3f0708 1c 36 66 fc c6 c6 fc c0 fe 62 60 60 60 60 60 00 +>3f0718 00 00 ff 66 66 66 66 00 fe 62 30 18 30 62 fe 00 +>3f0728 00 00 3f 66 c6 cc 78 00 00 00 33 33 33 3e 30 f0 +>3f0738 00 00 ff 18 18 18 18 00 3c 18 3c 66 66 3c 18 3c +>3f0748 00 7c c6 fe c6 7c 00 00 00 7e c3 c3 c3 66 e7 00 +>3f0758 1e 19 3c 66 c6 cc 78 00 00 00 66 99 99 66 00 00 +>3f0768 00 03 7c ce e6 7c c0 00 00 3e c0 fe c0 3e 00 00 +>3f0778 00 7e c3 c3 c3 c3 00 00 00 fe 00 fe 00 fe 00 00 +>3f0788 18 18 7e 18 18 7e 00 00 70 18 0c 18 70 00 fe 00 +>3f0798 1c 30 60 30 1c 00 fe 00 00 0e 1b 18 18 18 18 18 +>3f07a8 18 18 18 18 18 d8 70 00 00 18 00 7e 00 18 00 00 +>3f07b8 00 76 dc 00 76 dc 00 00 3c 66 3c 00 00 00 00 00 +>3f07c8 00 18 3c 18 00 00 00 00 00 00 00 00 18 00 00 00 +>3f07d8 0f 0c 0c 0c ec 6c 38 00 d8 ec cc cc 00 00 00 00 +>3f07e8 f0 30 c0 f0 00 00 00 00 00 00 00 3c 3c 3c 3c 00 +>3f07f8 00 00 00 00 00 00 00 00 +.3f0800 FONT_4_BANK1 +>3f0800 00 00 00 00 00 00 00 00 .binary "FONT/CBM-ASCII_8x8.bin", 0, 2048 +>3f0808 7c 82 aa 82 ba 92 82 7c 7c fe d6 fe c6 ee fe 7c +>3f0818 ff fd fb f5 eb d5 ab ff ff e1 fd 85 85 87 87 ff +>3f0828 ff bd db e7 e7 db bd ff ff 81 81 bd bd bd 81 ff +>3f0838 ff ff ff ff ff 81 81 ff 00 08 10 20 10 08 00 00 +>3f0848 00 24 14 0c 14 24 00 00 00 8e 88 8c 88 e8 00 00 +>3f0858 00 00 00 00 00 00 00 00 00 ee 88 cc 88 88 00 00 +>3f0868 00 00 04 14 3c 10 00 00 00 30 4c 4c 30 00 00 00 +>3f0878 00 38 28 38 28 00 00 00 ff 81 bd bd bd bd 81 ff +>3f0888 ff 55 aa 55 aa 55 aa ff ab d5 ab d5 ab d5 ab d5 +>3f0898 ff 81 81 81 81 81 81 ff ff f9 e1 81 81 e1 f9 ff +>3f08a8 ff 9f 87 81 81 87 9f ff ff e7 e7 c3 c3 81 81 ff +>3f08b8 ff 81 81 c3 c3 e7 e7 ff 00 26 54 04 04 04 06 00 +>3f08c8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +; ...repeated 3 times (48 bytes)... +>3f0908 10 10 10 10 00 10 00 00 24 24 24 00 00 00 00 00 +>3f0918 24 7e 24 24 7e 24 00 00 10 3c 50 38 14 78 10 00 +>3f0928 62 64 08 10 20 4c 8c 00 30 48 48 30 58 4c 4c 38 +>3f0938 10 10 10 00 00 00 00 00 08 10 20 20 20 20 10 08 +>3f0948 10 08 04 04 04 04 08 10 00 24 18 7e 18 24 00 00 +>3f0958 00 10 10 7c 10 10 00 00 00 00 00 00 10 10 20 00 +>3f0968 00 00 00 3c 00 00 00 00 00 00 00 00 18 18 00 00 +>3f0978 04 04 08 08 10 10 20 20 3c 46 4a 52 62 42 3c 00 +>3f0988 10 30 10 10 10 10 38 00 38 44 04 18 20 40 7c 00 +>3f0998 38 44 04 18 04 44 38 00 08 18 28 48 7c 08 08 00 +>3f09a8 7c 40 78 04 04 44 38 00 38 44 40 78 44 44 38 00 +>3f09b8 7c 44 04 08 08 10 10 00 38 44 44 38 44 44 38 00 +>3f09c8 38 44 44 3c 04 44 38 00 00 00 18 00 00 18 00 00 +>3f09d8 00 00 18 00 00 18 18 30 00 08 10 20 10 08 00 00 +>3f09e8 00 00 3c 00 3c 00 00 00 00 10 08 04 08 10 00 00 +>3f09f8 38 44 04 08 10 00 10 00 38 44 4c 4c 40 44 38 00 +>3f0a08 10 28 44 7c 44 44 00 00 78 44 78 44 44 78 00 00 +>3f0a18 38 44 40 40 44 38 00 00 78 44 44 44 44 78 00 00 +>3f0a28 7c 40 78 40 40 7c 00 00 7c 40 78 40 40 40 00 00 +>3f0a38 38 44 40 4c 44 38 00 00 44 44 7c 44 44 44 00 00 +>3f0a48 38 10 10 10 10 38 00 00 1c 08 08 08 48 30 00 00 +>3f0a58 24 28 30 30 28 24 00 00 20 20 20 20 20 3c 00 00 +>3f0a68 44 6c 7c 54 44 44 00 00 44 64 54 4c 44 44 00 00 +>3f0a78 38 44 44 44 44 38 00 00 78 44 44 78 40 40 00 00 +>3f0a88 38 44 44 44 44 38 0c 00 78 44 44 78 48 44 00 00 +>3f0a98 3c 40 38 04 04 78 00 00 7c 10 10 10 10 10 00 00 +>3f0aa8 44 44 44 44 44 38 00 00 44 44 44 44 28 10 00 00 +>3f0ab8 82 82 82 92 92 6c 00 00 42 24 18 18 24 42 00 00 +>3f0ac8 44 44 28 10 10 10 00 00 7c 08 10 20 40 7c 00 00 +>3f0ad8 38 20 20 20 20 20 38 00 20 20 10 10 08 08 04 04 +>3f0ae8 38 08 08 08 08 08 38 00 00 10 28 44 00 00 00 00 +>3f0af8 00 00 00 00 00 00 00 7e 40 20 10 00 00 00 00 00 +>3f0b08 00 38 04 3c 64 3c 00 00 40 40 78 44 44 78 00 00 +>3f0b18 00 00 38 40 40 38 00 00 04 04 3c 44 44 3c 00 00 +>3f0b28 00 38 44 7c 40 3c 00 00 0c 10 3c 10 10 10 00 00 +>3f0b38 00 00 3c 44 44 3c 04 78 40 40 78 44 44 44 00 00 +>3f0b48 10 00 30 10 10 38 00 00 08 00 08 08 08 08 08 30 +>3f0b58 20 20 24 38 28 24 00 00 30 10 10 10 10 10 00 00 +>3f0b68 00 00 68 54 54 44 00 00 00 00 38 24 24 24 00 00 +>3f0b78 00 00 38 44 44 38 00 00 00 00 78 44 44 78 40 40 +>3f0b88 00 00 3c 44 44 3c 04 04 00 00 78 44 40 40 00 00 +>3f0b98 00 00 1c 30 0c 38 00 00 00 10 7c 10 10 10 0c 00 +>3f0ba8 00 00 44 44 44 3c 00 00 00 00 42 42 24 18 00 00 +>3f0bb8 00 00 82 82 92 6c 00 00 00 00 24 18 18 24 00 00 +>3f0bc8 00 00 24 24 24 1c 04 38 00 00 7c 18 30 7c 00 00 +>3f0bd8 0c 10 10 30 30 10 10 0c 18 18 18 00 18 18 18 00 +>3f0be8 30 08 08 0c 0c 08 08 30 00 00 32 7e 4c 00 00 00 +>3f0bf8 00 00 10 28 38 00 00 00 00 00 3c 3c 3c 3c 00 00 +>3f0c08 00 00 3c 24 24 3c 00 00 00 00 18 3c 3c 18 00 00 +>3f0c18 00 00 18 24 24 18 00 00 18 24 24 18 00 00 00 00 +>3f0c28 00 3c 42 42 66 24 66 00 00 18 00 18 0c 06 66 3c +>3f0c38 0c 12 30 7c 30 62 fc 00 1c 20 70 20 70 20 1c 00 +>3f0c48 02 06 0c d8 f0 e0 c0 00 18 18 ff 00 00 ff 00 00 +>3f0c58 00 00 ff 00 00 ff 18 18 24 24 24 e7 e7 24 24 24 +>3f0c68 18 18 ff 00 00 ff 18 18 24 24 24 27 27 24 24 24 +>3f0c78 24 24 24 e4 e4 24 24 24 00 00 00 ff ff ff ff ff +>3f0c88 00 00 ff ff ff ff ff ff 00 ff ff ff ff ff ff ff +>3f0c98 ff ff ff ff ff ff ff 00 ff ff ff ff ff ff 00 00 +>3f0ca8 ff ff ff ff ff 00 00 00 ff ff ff ff 00 00 00 00 +>3f0cb8 f8 f8 f8 f8 f8 f8 f8 f8 fc fc fc fc fc fc fc fc +>3f0cc8 fe fe fe fe fe fe fe fe 7f 7f 7f 7f 7f 7f 7f 7f +>3f0cd8 3f 3f 3f 3f 3f 3f 3f 3f 1f 1f 1f 1f 1f 1f 1f 1f +>3f0ce8 0f 0f 0f 0f 0f 0f 0f 0f 00 00 00 00 00 00 00 00 +>3f0cf8 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff +>3f0d08 f0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 ff ff ff ff +>3f0d18 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff +>3f0d28 80 80 80 80 80 80 80 80 aa 55 aa 55 aa 55 aa 55 +>3f0d38 01 01 01 01 01 01 01 01 00 00 00 00 aa 55 aa 55 +>3f0d48 ff fe fc f8 f0 e0 c0 80 03 03 03 03 03 03 03 03 +>3f0d58 18 18 18 1f 1f 18 18 18 00 00 00 00 0f 0f 0f 0f +>3f0d68 18 18 18 1f 1f 00 00 00 00 00 00 f8 f8 18 18 18 +>3f0d78 00 00 00 00 00 00 ff ff 00 00 00 1f 1f 18 18 18 +>3f0d88 18 18 18 ff ff 00 00 00 00 00 00 ff ff 18 18 18 +>3f0d98 18 18 18 f8 f8 18 18 18 c0 c0 c0 c0 c0 c0 c0 c0 +>3f0da8 e0 e0 e0 e0 e0 e0 e0 e0 07 07 07 07 07 07 07 07 +>3f0db8 ff ff 00 00 00 00 00 00 ff ff ff 00 00 00 00 00 +>3f0dc8 00 00 00 00 00 ff ff ff 03 03 03 03 03 03 ff ff +>3f0dd8 00 00 00 00 f0 f0 f0 f0 0f 0f 0f 0f 00 00 00 00 +>3f0de8 18 18 18 f8 f8 00 00 00 f0 f0 f0 f0 00 00 00 00 +>3f0df8 f0 f0 f0 f0 0f 0f 0f 0f 00 00 00 ff ff 00 00 00 +>3f0e08 08 1c 3e 7f 7f 1c 3e 00 18 18 18 18 18 18 18 18 +>3f0e18 00 00 00 ff ff 00 00 00 00 00 ff ff 00 00 00 00 +>3f0e28 00 ff ff 00 00 00 00 00 00 00 00 00 ff ff 00 00 +>3f0e38 30 30 30 30 30 30 30 30 0c 0c 0c 0c 0c 0c 0c 0c +>3f0e48 00 00 00 e0 f0 38 18 18 18 18 1c 0f 07 00 00 00 +>3f0e58 18 18 38 f0 e0 00 00 00 c0 c0 c0 c0 c0 c0 ff ff +>3f0e68 c0 e0 70 38 1c 0e 07 03 03 07 0e 1c 38 70 e0 c0 +>3f0e78 ff ff c0 c0 c0 c0 c0 c0 ff ff 03 03 03 03 03 03 +>3f0e88 00 3c 7e 7e 7e 7e 3c 00 00 00 00 00 00 ff ff 00 +>3f0e98 36 7f 7f 7f 3e 1c 08 00 60 60 60 60 60 60 60 60 +>3f0ea8 00 00 00 07 0f 1c 18 18 c3 e7 7e 3c 3c 7e e7 c3 +>3f0eb8 00 3c 7e 66 66 7e 3c 00 18 18 66 66 18 18 3c 00 +>3f0ec8 06 06 06 06 06 06 06 06 08 1c 3e 7f 3e 1c 08 00 +>3f0ed8 18 18 18 ff ff 18 18 18 c0 c0 30 30 c0 c0 30 30 +>3f0ee8 18 18 18 18 18 18 18 18 00 00 03 3e 76 36 36 00 +>3f0ef8 ff 7f 3f 1f 0f 07 03 01 24 24 24 24 24 24 24 24 +>3f0f08 00 00 ff 00 00 ff 00 00 00 00 3f 20 20 27 24 24 +>3f0f18 00 00 ff 00 00 e7 24 24 00 00 fc 04 04 e4 24 24 +>3f0f28 24 24 27 20 20 3f 00 00 24 24 e7 00 00 ff 00 00 +>3f0f38 24 24 e4 04 04 fc 00 00 24 24 27 20 20 27 24 24 +>3f0f48 24 24 e4 04 04 e4 24 24 24 24 e7 00 00 e7 24 24 +>3f0f58 0f 0f 0f 0f f0 f0 f0 f0 01 03 07 0f 1f 3f 7f ff +>3f0f68 80 c0 e0 f0 f8 fc fe ff 33 99 cc 66 33 99 cc 66 +>3f0f78 cc 99 33 66 cc 99 33 66 f0 f0 f0 f0 ff ff ff ff +>3f0f88 0f 0f 0f 0f ff ff ff ff ff ff ff ff f0 f0 f0 f0 +>3f0f98 ff ff ff ff 0f 0f 0f 0f 05 0a 05 0a 00 00 00 00 +>3f0fa8 00 00 00 00 0a 05 0a 05 a0 50 a0 50 00 00 00 00 +>3f0fb8 00 00 00 00 a0 50 a0 50 0a 05 0a 05 0a 05 0a 05 +>3f0fc8 aa 55 aa 55 00 00 00 00 00 18 3c 7e 18 18 18 18 +>3f0fd8 00 10 30 7f 7f 30 10 00 00 08 0c fe fe 0c 08 00 +>3f0fe8 18 18 18 18 7e 3c 18 00 00 00 36 49 36 00 00 00 +>3f0ff8 00 00 00 00 00 00 00 00 +>3fffff ff .byte $FF ; Last byte of flash data ;****** End of listing diff --git a/bin/Release/roms/matrix.hex b/bin/Release/roms/matrix.hex deleted file mode 100644 index f150604..0000000 --- a/bin/Release/roms/matrix.hex +++ /dev/null @@ -1,70 +0,0 @@ -:020000040003F7 -:2000000018FB0B08C23048DA222200032226010322410103224F0003C220FA68282B5CED58 -:2000200004190B08C23048DAE220A20000A9209F00A0AFE8E00020D0F6A20000A9119F0078 -:20004000C0AFE8E00020D0F6C220FA68282B6BEAC220A9220385E285E4A9000885E0A51349 -:200060003A85E6C230A5E60AAABFA0010318650FAAE220A40FEA2004019F00A0AFCA8810FD -:20008000F4EAC230A5E63A85E610DAEAE220C210A60F201501C903B006A9F19F00C0AFCAD9 -:2000A00010F0C220A5133A3A85E6A5E60AAABFA0010318650FAAE220A40FEABF00C0AF29F9 -:2000C000F0D00909119F80C0AF4CE10009019F80C0AF4A4A4A4A3A0A0A0A0A09019F00C0F7 -:2000E000AFCA8810D5C230A5E63A85E610BCA9000085E8E6E8A5E8C9008090F7C6E0F00352 -:200100004C8B006BDAA6E2BF200203CA1003A2220386E2FA60DAA6E4BF430503CA1003A204 -:20012000220386E4FA60C230A5150AAAA5150A0A0A0A0A0A0A38E511CACA9FA00103D0F5AC -:200140006BEAE220C210A20000BF5C01039F401FAF9F801FAFE8E04000D0EE6B001A0000D0 -:20016000001A00000033000000330000005000000061000000630000006300000067000021 -:1C0180000069000000790000007A000000800000008F000000E60000CCFFCC007B -:2001A000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE7F -:2001C000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE5F -:2001E000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3F -:20020000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE1E -:20022000D2BC2449743B5256348DF5B2CFADC56552ED9AC37D84A259466C81202C33B0471D -:20024000A0F8D8E063615645343048A17A1E8A1347E93E9747D37EF11B1CD4025B22CBE9A1 -:2002600099437CF384C51E029E8C2E1F65D7B4D5E8E561126BABC805493BA7D99A9CB187F9 -:20028000BC55CE85520CCA891B02932BCA24C2735FB4DA5F916273B8B664DFC9E1060D1E0D -:2002A0008EBDD41D585604272C17656A10C1DEB6F17F5B3429CF878E3310F8760B92DF0F6A -:2002C0004DB5BCC23826AC6EBBAF0033ACF9FCC9AE7BAA259CF48500211ED25B8ED8FAA4A2 -:2002E0009489198AFA6C6269FEC909C2D15021DB69A8115BD12614A7052769B46D9851D4BC -:20030000ABB7791A30816761C01FFAD23392943EBC93D049AD301292D336E3F5B650C64453 -:20032000535DE6D63D997963571F21FEEC4EF2FB94652BA143A588E77FAA062BE99D765021 -:20034000989A919AF64AAAF2E7588E047EE95F19BF8A808819C12BC3C67BBBCCBF72CDE3F2 -:20036000975BDB469DF7944D5C81EB6CD6AA2FAE89C8A15B2C79387327C873BFE76CA46A45 -:200380007ED0DE33F775504913E463DBD210D3347B7F0A21D7607F702B5F23E72D80C6B6D3 -:2003A000FB3DBDF9D501781540B88A8DC54958CAC2EC94430D5B3405696030ACF71D2EDBC5 -:2003C00041439BC2A9239B8920F20566A249DA5427F72938AC34EB440D4054BC85F0CFF592 -:2003E000BE8F8914033C57354E031E3F62B8D6D0390180B94072836DAD0FB73C7900182E57 -:200400007F960F924D81E4AD8D2856D994542EBB1876A7825DC724D46599E084B24F2FD4D9 -:200420000AA71C9B61923882AB331DC4F0E6F8CCFCDF142A9D517082C2AC4676FFF469F0DF -:200440004E0EE8719C3696971D6FDCBC0C5D5304A8444D441E42750E3F7CB4D8F81E5A8469 -:2004600040A5654C357B8B5623FCADFFACED0417D380653F915730C4DBB81F0137B1EEEB8F -:200480000486CCD29D56C0C3269F94151EE86FB66AF27675FB8A059A1686131470BCBEB558 -:2004A000723A7182C4037F67BB00652E936577C61C9F8F2A8D1603B819F07E6D21BD9086B3 -:2004C0007DF3EC1A0EA3291EC968235BD769143A5514D447C99A79B15BEEC74CF00FD67AB5 -:2004E000B9FB83B2041E2711B6235F14FA88AA85543711DC69410CB3BAF436CE89F48D110E -:200500009D074AA6EB555C394B87A861BBCC0CAA37A097F421614A5E8D9BC51DD75AD96A50 -:2005200072E05BACDF5D0C8EB8C120E2BE448531A7E7161923695BA228FBA54CB4D939E554 -:20054000AAD10C461D44103E1853015902485C1749400B4C1A1260251656580B3E3B3A4446 -:200560001C0E3D54023D49035C50384D0F38630C1F4B385B481C0D55075330364B19194D01 -:20058000594A1F2F4D333610364E13115B133D54065E622B3B34434319240C41373A4201D9 -:2005A0003455271A011F54222F361701245A581A145C055A3631082A565D3B290C302E5C29 -:2005C000152D403723384E0D3F3C5B2E545545541E5D2103490A3C0E121E511E3B542C03CD -:2005E0000E292E4A1703391E53553C5712352A03152F5010151E58434F484D614C26355876 -:2006000055153C34073F56444F3905151A00254A492A1B4B3648021C3C042B4F54403940B9 -:200620004B59481107423C083639581031034249603959364B313A5A4D5C330C262E593B92 -:2006400062221B0D125E064A1F395F092258375E24320B2013154C441F243931134B5E625B -:20066000154E11504B1C321A36493E2E3E1B26235056143732135B0724085F2B4949114F36 -:20068000360D4D10172E2A225C4149464C4A3D47071A12440B32154640031E034216375C85 -:2006A000473E53151D0B1D295F11111D2D2E16332C370A3F0C1455425855265A525A1C291C -:2006C0004845000A003D2B455D3E60582B4C4C58411D52094A33493F24525D5D2D074E45B3 -:2006E0001E27550D0C0E614A0B264F571D2F632144630B29613E04551D171A36380F57589A -:20070000035F050A582E1B4D2C1328445D034D1A304B53311C2E1744555A4B1A0B4F091AD3 -:20072000630E111C5342143A5A3310182E52595648001E30580D3662440437066244195825 -:20074000173E43180B13170C1B11410B1C061914612428022235283A0414622B0423105449 -:200760004F0A054E4B233A534E12233B604D5C244746634E121A56522E1210003C1F1753C0 -:20078000453C311413140D2F23082459501B485F49043E3E0D0F55265C26621540601E2738 -:2007A0005F08613250515134410C0C2E134A08030A302B240636312E5A19552F0A18310CB0 -:2007C0003A3154133F3131430F3E314E3D2F543A5A30231720175F5D4D5C51065C3C3760B7 -:2007E00038262E0F5E6009000A3637434703083A4F5A270F5C6007230F4B5F11322B2343FF -:200800000554045F201332324F34331F602E59504F3D310A48173A5C21020400580C1E19FB -:200820004A272403615358520A5E2E431D00430145051C413D5422040E4E602C0140223BA4 -:200840004A4D44001D4F62451E0E2A0D4F2D1D2751163F361E450F5A0C322C0638250B27E0 -:06086000381B1220285A8B -:00000001FF diff --git a/bin/Release/roms/matrix.lst b/bin/Release/roms/matrix.lst deleted file mode 100644 index 95b3fed..0000000 --- a/bin/Release/roms/matrix.lst +++ /dev/null @@ -1,847 +0,0 @@ - -; 64tass Turbo Assembler Macro V1.54.1900 listing file -; 64tass.exe --long-address -x --intel-hex -o matrix.hex --list matrix.lst matrix.asm -; Wed Aug 07 21:08:32 2019 - -;Offset ;Hex ;Monitor ;Source - -;****** Processing input file: matrix.asm - - -;****** Processing file: macros_inc.asm - - -;****** Return to file: matrix.asm - - -;****** Processing file: page_00_inc.asm - -=$000000 BANK0_BEGIN = $000000 ;Start of bank 0 and Direct page -=$000000 unused_0000 = $000000 ;12 Bytes unused -=$000008 OPL2_ADDY_PTR_LO = $000008 ; THis Points towards the Instruments Database -=$000009 OPL2_ADDY_PTR_MD = $000009 -=$00000a OPL2_ADDY_PTR_HI = $00000A -=$00000c SCREENBEGIN = $00000C ;3 Bytes Start of screen in video RAM. This is the upper-left corrner of the current video page being written to. This may not be what's being displayed by VICKY. Update this if you change VICKY's display page. -=$00000f COLS_VISIBLE = $00000F ;2 Bytes Columns visible per screen line. A virtual line can be longer than displayed, up to COLS_PER_LINE long. Default = 80 -=$000011 COLS_PER_LINE = $000011 ;2 Bytes Columns in memory per screen line. A virtual line can be this long. Default=128 -=$000013 LINES_VISIBLE = $000013 ;2 Bytes The number of rows visible on the screen. Default=25 -=$000015 LINES_MAX = $000015 ;2 Bytes The number of rows in memory for the screen. Default=64 -=$000017 CURSORPOS = $000017 ;3 Bytes The next character written to the screen will be written in this location. -=$00001a CURSORX = $00001A ;2 Bytes This is where the blinking cursor sits. Do not edit this direectly. Call LOCATE to update the location and handle moving the cursor correctly. -=$00001c CURSORY = $00001C ;2 Bytes This is where the blinking cursor sits. Do not edit this direectly. Call LOCATE to update the location and handle moving the cursor correctly. -=$00001e CURCOLOR = $00001E ;2 Bytes Color of next character to be printed to the screen. -=$000020 CURATTR = $000020 ;2 Bytes Attribute of next character to be printed to the screen. -=$000022 STACKBOT = $000022 ;2 Bytes Lowest location the stack should be allowed to write to. If SP falls below this value, the runtime should generate STACK OVERFLOW error and abort. -=$000024 STACKTOP = $000024 ;2 Bytes Highest location the stack can occupy. If SP goes above this value, the runtime should generate STACK OVERFLOW error and abort. -=$000026 OPL2_OPERATOR = $000026 ; -=$000027 OPL2_CHANNEL = $000027 ; -=$000028 OPL2_REG_REGION = $000028 ; Offset to the Group of Registers -=$00002a OPL2_REG_OFFSET = $00002A ; 2 Bytes (16Bits) -=$00002c OPL2_IND_ADDY_LL = $00002C ; 2 Bytes Reserved (Only need 3) -=$00002e OPL2_IND_ADDY_HL = $00002E ; 2 Bytes Reserved (Only need 3) -=$000030 OPL2_NOTE = $000030 ; 1 Byte -=$000031 OPL2_OCTAVE = $000031 ; 1 Byte -=$000032 OPL2_PARAMETER0 = $000032 ; 1 Byte - Key On/Feedback -=$000033 OPL2_PARAMETER1 = $000033 ; 1 Byte -=$000034 OPL2_PARAMETER2 = $000034 ; 1 Byte -=$000035 OPL2_PARAMETER3 = $000035 ; 1 Byte -=$000036 OPL2_LOOP = $000036 ; -=$000036 OPL2_BLOCK = $000036 -=$000038 SDCARD_FILE_PTR = $000038 ; 3 Bytes Pointer to Filename to open -=$00003c SDCARD_BYTE_NUM = $00003C ; 2Bytes -=$00003f SDCARD_PRSNT_MNT = $00003F ; 1 Byte, Indicate that the SDCard is Present and that it is Mounted -=$000040 CMD_PARSER_TMPX = $000040 ; <<< Command Parser 2Bytes -=$000042 CMD_PARSER_TMPY = $000042 ; <<< Command Parser 2Bytes -=$000044 CMD_LIST_PTR = $000044 ; <<< Command Parser 3 Bytes -=$000048 CMD_PARSER_PTR = $000048 ; <<< Command Parser 3 Bytes -=$00004b CMD_ATTRIBUTE = $00004B ; <<< Command Parser 2 Bytes (16bits Attribute Field) -=$00004d CMD_EXEC_ADDY = $00004D ; <<< Command Parser 3 Bytes 24 Bits Address Jump to execute the Command -=$000050 KEY_BUFFER_RPOS = $000050 ; -=$000052 KEY_BUFFER_WPOS = $000052 ; -=$000054 CMD_VARIABLE_TMP = $000054 ; -=$000056 CMD_ARG_DEV = $000056 ; -=$000057 CMD_ARG_SA = $000057 ; -=$00005a CMD_ARG_EA = $00005A ; -=$00005d CMD_VALID = $00005D ; -=$000040 BM_CLEAR_SCRN_X = $000040 -=$000042 BM_CLEAR_SCRN_Y = $000042 -=$000040 RAD_STARTLINE = $000040 ; 1 Byte -=$000041 RAD_PATTERN_IDX = $000041 ; 1 Byte -=$000042 RAD_LINE = $000042 ; 1 Byte -=$000043 RAD_LINENUMBER = $000043 ; 1 Byte -=$000044 RAD_CHANNEL_NUM = $000044 ; 1 Byte -=$000045 RAD_ISLASTCHAN = $000045 ; 1 Byte -=$000046 RAD_Y_POINTER = $000046 ; 2 Bytes -=$000048 RAD_TICK = $000048 -=$00004a RAD_CHANNEL_DATA = $00004A ; 2 Bytes -=$00004c RAD_CHANNE_EFFCT = $00004C -=$00004d RAD_TEMP = $00004D -=$000040 BMP_X_SIZE = $000040 ; 2 Bytes -=$000042 BMP_Y_SIZE = $000042 ; 2 Bytes -=$000044 BMP_PRSE_SRC_PTR = $000044 ; 3 Bytes -=$000048 BMP_PRSE_DST_PTR = $000048 ; 3 Bytes -=$00004c BMP_COLOR_PALET = $00004C ; 2 Bytes -=$00004e SCRN_X_STRIDE = $00004E ; 2 Bytes, Basically How many Pixel Accross in Bitmap Mode -=$000050 BMP_FILE_SIZE = $000050 ; 4 Bytes -=$000054 BMP_POSITION_X = $000054 ; 2 Bytes Where, the BMP will be position on the X Axis -=$000056 BMP_POSITION_Y = $000056 ; 2 Bytes Where, the BMP will be position on the Y Axis -=$000058 BMP_PALET_CHOICE = $000058 ; -=$0000e0 MOUSE_PTR = $0000E0 -=$0000e1 MOUSE_POS_X_LO = $0000E1 -=$0000e2 MOUSE_POS_X_HI = $0000E2 -=$0000e3 MOUSE_POS_Y_LO = $0000E3 -=$0000e4 MOUSE_POS_Y_HI = $0000E4 -=$0000f0 USER_TEMP = $0000F0 ;32 Bytes Temp space for user programs -=$000100 GAVIN_BLOCK = $000100 ;256 Bytes Gavin reserved, overlaps debugging registers at $1F0 -=$000100 MULTIPLIER_0 = $000100 ;0 Byte Unsigned multiplier -=$000100 M0_OPERAND_A = $000100 ;2 Bytes Operand A (ie: A x B) -=$000102 M0_OPERAND_B = $000102 ;2 Bytes Operand B (ie: A x B) -=$000104 M0_RESULT = $000104 ;4 Bytes Result of A x B -=$000108 MULTIPLIER_1 = $000108 ;0 Byte Signed Multiplier -=$000108 M1_OPERAND_A = $000108 ;2 Bytes Operand A (ie: A x B) -=$00010a M1_OPERAND_B = $00010A ;2 Bytes Operand B (ie: A x B) -=$00010c M1_RESULT = $00010C ;4 Bytes Result of A x B -=$000118 DIVIDER_1 = $000118 ;0 Byte Unsigned divider -=$000118 D1_OPERAND_A = $000118 ;2 Bytes Divider 0 Dividend ex: A in A/B -=$00011a D1_OPERAND_B = $00011A ;2 Bytes Divider 0 Divisor ex B in A/B -=$00011c D1_RESULT = $00011C ;2 Bytes Quotient result of A/B ex: 7/2 = 3 r 1 -=$00011e D1_REMAINDER = $00011E ;2 Bytes Remainder of A/B ex: 1 in 7/2=3 r 1 -=$000110 DIVIDER_0 = $000110 ;0 Byte Signed divider -=$000110 D0_OPERAND_A = $000110 ;2 Bytes Divider 1 Dividend ex: A in A/B -=$000112 D0_OPERAND_B = $000112 ;2 Bytes Divider 1 Divisor ex B in A/B -=$000114 D0_RESULT = $000114 ;2 Bytes Signed quotient result of A/B ex: 7/2 = 3 r 1 -=$000116 D0_REMAINDER = $000116 ;2 Bytes Signed remainder of A/B ex: 1 in 7/2=3 r 1 -=$000120 ADDER_SIGNED_32 = $000120 ; The 32 Bit Adders takes 12Byte that are NOT RAM Location -=$000140 INT_CONTROLLER = $000140 ; $000140...$00015F Interrupt Controller -=$000160 TIMER_CONTROLLER = $000160 ; $000160...$00017F Timer0/Timer1/Timer2 Block -=$000160 TIMER_CTRL_REGLL = $000160 ; -=$000161 TIMER_CTRL_REGLH = $000161 ; -=$000162 TIMER_CTRL_REGHL = $000162 ; -=$000163 TIMER_CTRL_REGHH = $000163 ; -=$000240 CPU_REGISTERS = $000240 ; Byte -=$000240 CPUPC = $000240 ;2 Bytes Program Counter (PC) -=$000242 CPUPBR = $000242 ;2 Bytes Program Bank Register (K) -=$000244 CPUA = $000244 ;2 Bytes Accumulator (A) -=$000246 CPUX = $000246 ;2 Bytes X Register (X) -=$000248 CPUY = $000248 ;2 Bytes Y Register (Y) -=$00024a CPUSTACK = $00024A ;2 Bytes Stack Pointer (S) -=$00024c CPUDP = $00024C ;2 Bytes Direct Page Register (D) -=$00024e CPUDBR = $00024E ;1 Byte Data Bank Register (B) -=$00024f CPUFLAGS = $00024F ;1 Byte Flags (P) -=$000250 MONITOR_VARS = $000250 ; Byte MONITOR Variables. BASIC variables may overlap this space -=$000250 MCMDADDR = $000250 ;3 Bytes Address of the current line of text being processed by the command parser. Can be in display memory or a variable in memory. MONITOR will parse up to MTEXTLEN characters or to a null character. -=$000253 MCMP_TEXT = $000253 ;3 Bytes Address of symbol being evaluated for COMPARE routine -=$000256 MCMP_LEN = $000256 ;2 Bytes Length of symbol being evaluated for COMPARE routine -=$000258 MCMD = $000258 ;3 Bytes Address of the current command/function string -=$00025b MCMD_LEN = $00025B ;2 Bytes Length of the current command/function string -=$00025d MARG1 = $00025D ;4 Bytes First command argument. May be data or address, depending on command -=$000261 MARG2 = $000261 ;4 Bytes First command argument. May be data or address, depending on command. Data is 32-bit number. Address is 24-bit address and 8-bit length. -=$000265 MARG3 = $000265 ;4 Bytes First command argument. May be data or address, depending on command. Data is 32-bit number. Address is 24-bit address and 8-bit length. -=$000269 MARG4 = $000269 ;4 Bytes First command argument. May be data or address, depending on command. Data is 32-bit number. Address is 24-bit address and 8-bit length. -=$00026d MARG5 = $00026D ;4 Bytes First command argument. May be data or address, depending on command. Data is 32-bit number. Address is 24-bit address and 8-bit length. -=$000271 MARG6 = $000271 ;4 Bytes First command argument. May be data or address, depending on command. Data is 32-bit number. Address is 24-bit address and 8-bit length. -=$000275 MARG7 = $000275 ;4 Bytes First command argument. May be data or address, depending on command. Data is 32-bit number. Address is 24-bit address and 8-bit length. -=$000279 MARG8 = $000279 ;4 Bytes First command argument. May be data or address, depending on command. Data is 32-bit number. Address is 24-bit address and 8-bit length. -=$000300 LOADFILE_VARS = $000300 ; Byte -=$000300 LOADFILE_NAME = $000300 ;3 Bytes (addr) Name of file to load. Address in Data Page -=$000303 LOADFILE_LEN = $000303 ;1 Byte Length of filename. 0=Null Terminated -=$000304 LOADPBR = $000304 ;1 Byte First Program Bank of loaded file ($05 segment) -=$000305 LOADPC = $000305 ;2 Bytes Start address of loaded file ($05 segment) -=$000307 LOADDBR = $000307 ;1 Byte First data bank of loaded file ($06 segment) -=$000308 LOADADDR = $000308 ;2 Bytes FIrst data address of loaded file ($06 segment) -=$00030a LOADFILE_TYPE = $00030A ;3 Bytes (addr) File type string in loaded data file. Actual string data will be in Bank 1. Valid values are BIN, PRG, P16 -=$00030d BLOCK_LEN = $00030D ;2 Bytes Length of block being loaded -=$00030f BLOCK_ADDR = $00030F ;2 Bytes (temp) Address of block being loaded -=$000311 BLOCK_BANK = $000311 ;1 Byte (temp) Bank of block being loaded -=$000312 BLOCK_COUNT = $000312 ;2 Bytes (temp) Counter of bytes read as file is loaded -=$000320 SDOS_BLOCK_BEGIN = $000320 ; -=$000324 SDOS_LOAD_ADDY = $000324 ; 4 Bytes (Uses 3 Only) -=$000328 SDOS_FILE_SIZE = $000328 ; -=$00032c SDOS_BYTE_NUMBER = $00032C ; Number of Byte to Read or Write before changing the Pointer -=$000330 SDOS_REG_WR32_AD = $000330 ; 4 Bytes (Used to read and Write Values in/from CH376S) -=$000334 SDOS_BYTE_PTR = $000334 -=$000380 SDOS_FILE_NAME = $000380 ; // Max of 128 Chars -=$000400 SDOS_BLK_BEGIN = $000400 ; 512 Bytes to Store SD Card Incoming or Outcoming Block -=$0006ff SDOS_BLK_END = $0006FF ; -=$000f00 KEY_BUFFER = $000F00 ;64 Bytes keyboard buffer -=$0080 KEY_BUFFER_SIZE = $0080 ;128 Bytes (constant) keyboard buffer length -=$000f00 MOUSE_BUTTONS_REG= $000F00 ; bit 2=middle, bit 1=right, bit 0=left -=$000f7f KEY_BUFFER_END = $000F7F ;1 Byte Last byte of keyboard buffer -=$000f83 KEY_BUFFER_CMD = $000F83 ;1 Byte Indicates the Command Process Status -=$000f84 COMMAND_SIZE_STR = $000F84 ; 1 Byte -=$000f86 COMMAND_COMP_TMP = $000F86 ; 2 Bytes -=$000f87 KEYBOARD_SC_FLG = $000F87 ;1 Bytes that indicate the Status of Left Shift, Left CTRL, Left ALT, Right Shift -=$000f88 KEYBOARD_SC_TMP = $000F88 ;1 Byte, Interrupt Save Scan Code while Processing -=$001000 TEST_BEGIN = $001000 ;28672 Bytes Test/diagnostic code for prototype. -=$007fff TEST_END = $007FFF ;0 Byte -=$008000 STACK_BEGIN = $008000 ;32512 Bytes The default beginning of stack space -=$00feff STACK_END = $00FEFF ;0 Byte End of stack space. Everything below this is I/O space -=$18ff00 ISR_BEGIN = $18FF00 ; Byte Beginning of CPU vectors in Direct page -=$18ff00 HRESET = $18FF00 ;16 Bytes Handle RESET asserted. Reboot computer and re-initialize the kernel. -=$18ff10 HCOP = $18FF10 ;16 Bytes Handle the COP instruction. Program use; not used by OS -=$18ff20 HBRK = $18FF20 ;16 Bytes Handle the BRK instruction. Returns to BASIC Ready prompt. -=$18ff30 HABORT = $18FF30 ;16 Bytes Handle ABORT asserted. Return to Ready prompt with an error message. -=$18ff40 HNMI = $18FF40 ;32 Bytes Handle NMI -=$18ff60 HIRQ = $18FF60 ;32 Bytes Handle IRQ -=$18ff80 Unused_FF80 = $18FF80 ;End of direct page Interrrupt handlers -=$18ffe0 VECTORS_BEGIN = $18FFE0 ;0 Byte Interrupt vectors -=$00ffe0 JMP_READY = $00FFE0 ;4 Bytes Jumps to ROM READY routine. Modified whenever alternate command interpreter is loaded. -=$00ffe4 VECTOR_COP = $00FFE4 ;2 Bytes Native COP Interrupt vector -=$00ffe6 VECTOR_BRK = $00FFE6 ;2 Bytes Native BRK Interrupt vector -=$00ffe8 VECTOR_ABORT = $00FFE8 ;2 Bytes Native ABORT Interrupt vector -=$00ffea VECTOR_NMI = $00FFEA ;2 Bytes Native NMI Interrupt vector -=$00ffec VECTOR_RESET = $00FFEC ;2 Bytes Unused (Native RESET vector) -=$00ffee VECTOR_IRQ = $00FFEE ;2 Bytes Native IRQ Vector -=$00fff0 RETURN = $00FFF0 ;4 Bytes RETURN key handler. Points to BASIC or MONITOR subroutine to execute when RETURN is pressed. -=$00fff4 VECTOR_ECOP = $00FFF4 ;2 Bytes Emulation mode interrupt handler -=$00fff6 VECTOR_EBRK = $00FFF6 ;2 Bytes Emulation mode interrupt handler -=$00fff8 VECTOR_EABORT = $00FFF8 ;2 Bytes Emulation mode interrupt handler -=$00fffa VECTOR_ENMI = $00FFFA ;2 Bytes Emulation mode interrupt handler -=$00fffc VECTOR_ERESET = $00FFFC ;2 Bytes Emulation mode interrupt handler -=$00fffe VECTOR_EIRQ = $00FFFE ;2 Bytes Emulation mode interrupt handler -=$200000 VECTORS_END = $200000 ;*End of vector space -=$00ffff BANK0_END = $00FFFF ;End of Bank 00 and Direct page - -;****** Return to file: matrix.asm - - -;****** Processing file: vicky_def.asm - -=$af0000 MASTER_CTRL_REG_L = $AF0000 -=$01 Mstr_Ctrl_Text_Mode_En = $01 ; Enable the Text Mode -=$02 Mstr_Ctrl_Text_Overlay = $02 ; Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored) -=$04 Mstr_Ctrl_Graph_Mode_En = $04 ; Enable the Graphic Mode -=$08 Mstr_Ctrl_Bitmap_En = $08 ; Enable the Bitmap Module In Vicky -=$10 Mstr_Ctrl_TileMap_En = $10 ; Enable the Tile Module in Vicky -=$20 Mstr_Ctrl_Sprite_En = $20 ; Enable the Sprite Module in Vicky -=$40 Mstr_Ctrl_GAMMA_En = $40 ; this Enable the GAMMA correction - The Analog and DVI have different color value, the GAMMA is great to correct the difference -=$80 Mstr_Ctrl_Disable_Vid = $80 ; This will disable the Scanning of the Video hence giving 100% bandwith to the CPU -=$af0001 MASTER_CTRL_REG_H = $AF0001 -=$af0002 VKY_RESERVED_00 = $AF0002 -=$af0003 VKY_RESERVED_01 = $AF0003 -=$af0004 BORDER_CTRL_REG = $AF0004 ; Bit[0] - Enable (1 by default) Bit[4..6]: X Scroll Offset ( Will scroll Left) (Acceptable Value: 0..7) -=$01 Border_Ctrl_Enable = $01 -=$af0005 BORDER_COLOR_B = $AF0005 -=$af0006 BORDER_COLOR_G = $AF0006 -=$af0007 BORDER_COLOR_R = $AF0007 -=$af0008 BORDER_X_SIZE = $AF0008 ; X- Values: 0 - 32 (Default: 32) -=$af0009 BORDER_Y_SIZE = $AF0009 ; Y- Values 0 -32 (Default: 32) -=$af000d BACKGROUND_COLOR_B = $AF000D ; When in Graphic Mode, if a pixel is "0" then the Background pixel is chosen -=$af000e BACKGROUND_COLOR_G = $AF000E -=$af000f BACKGROUND_COLOR_R = $AF000F ; -=$af0010 VKY_TXT_CURSOR_CTRL_REG = $AF0010 ;[0] Enable Text Mode -=$01 Vky_Cursor_Enable = $01 -=$02 Vky_Cursor_Flash_Rate0 = $02 -=$04 Vky_Cursor_Flash_Rate1 = $04 -=$08 Vky_Cursor_FONT_Page0 = $08 ; Pick Font Page 0 or Font Page 1 -=$10 Vky_Cursor_FONT_Page1 = $10 ; Pick Font Page 0 or Font Page 1 -=$af0011 VKY_TXT_RESERVED = $AF0011 ;Not in Use -=$af0012 VKY_TXT_CURSOR_CHAR_REG = $AF0012 -=$af0013 VKY_TXT_CURSOR_COLR_REG = $AF0013 -=$af0014 VKY_TXT_CURSOR_X_REG_L = $AF0014 -=$af0015 VKY_TXT_CURSOR_X_REG_H = $AF0015 -=$af0016 VKY_TXT_CURSOR_Y_REG_L = $AF0016 -=$af0017 VKY_TXT_CURSOR_Y_REG_H = $AF0017 -=$af0018 TXT_CLR_START_DISPLAY_PTR = $AF0018 ; (0 to 255) (this Add a X Offset to the Display Start Address) -=$af001c VKY_INFO_CHIP_NUM_L = $AF001C -=$af001d VKY_INFO_CHIP_NUM_H = $AF001D -=$af001e VKY_INFO_CHIP_VER_L = $AF001E -=$af001f VKY_INFO_CHIP_VER_H = $AF001F -=$01 TILE_Enable = $01 -=$02 TILE_LUT0 = $02 -=$04 TILE_LUT1 = $04 -=$08 TILE_LUT2 = $08 -=$80 TILESHEET_256x256_En = $80 ; 0 -> Sequential, 1-> 256x256 Tile Sheet Striding -=$af0100 TL0_CONTROL_REG = $AF0100 ; Bit[0] - Enable, Bit[3:1] - LUT Select, -=$af0101 TL0_START_ADDY_L = $AF0101 ; Not USed right now - Starting Address to where is the MAP -=$af0102 TL0_START_ADDY_M = $AF0102 -=$af0103 TL0_START_ADDY_H = $AF0103 -=$af0104 TL0_MAP_X_STRIDE_L = $AF0104 ; The Stride of the Map -=$af0105 TL0_MAP_X_STRIDE_H = $AF0105 -=$af0106 TL0_MAP_Y_STRIDE_L = $AF0106 ; The Stride of the Map -=$af0107 TL0_MAP_Y_STRIDE_H = $AF0107 -=$af0108 TL1_CONTROL_REG = $AF0108 ; Bit[0] - Enable, Bit[3:1] - LUT Select, -=$af0109 TL1_START_ADDY_L = $AF0109 ; Not USed right now - Starting Address to where is the MAP -=$af010a TL1_START_ADDY_M = $AF010A -=$af010b TL1_START_ADDY_H = $AF010B -=$af010c TL1_MAP_X_STRIDE_L = $AF010C ; The Stride of the Map -=$af010d TL1_MAP_X_STRIDE_H = $AF010D -=$af010e TL1_MAP_Y_STRIDE_L = $AF010E ; The Stride of the Map -=$af010f TL1_MAP_Y_STRIDE_H = $AF010F -=$af0110 TL2_CONTROL_REG = $AF0110 ; Bit[0] - Enable, Bit[3:1] - LUT Select, -=$af0111 TL2_START_ADDY_L = $AF0111 ; Not USed right now - Starting Address to where is the MAP -=$af0112 TL2_START_ADDY_M = $AF0112 -=$af0113 TL2_START_ADDY_H = $AF0113 -=$af0114 TL2_MAP_X_STRIDE_L = $AF0114 ; The Stride of the Map -=$af0115 TL2_MAP_X_STRIDE_H = $AF0115 -=$af0116 TL2_MAP_Y_STRIDE_L = $AF0116 ; The Stride of the Map -=$af0117 TL2_MAP_Y_STRIDE_H = $AF0117 -=$af0118 TL3_CONTROL_REG = $AF0118 ; Bit[0] - Enable, Bit[3:1] - LUT Select, -=$af0119 TL3_START_ADDY_L = $AF0119 ; Not USed right now - Starting Address to where is the MAP -=$af011a TL3_START_ADDY_M = $AF011A -=$af011b TL3_START_ADDY_H = $AF011B -=$af011c TL3_MAP_X_STRIDE_L = $AF011C ; The Stride of the Map -=$af011d TL3_MAP_X_STRIDE_H = $AF011D -=$af011e TL3_MAP_Y_STRIDE_L = $AF011E ; The Stride of the Map -=$af011f TL3_MAP_Y_STRIDE_H = $AF011F -=$af0140 BM_CONTROL_REG = $AF0140 -=$af0141 BM_START_ADDY_L = $AF0141 -=$af0142 BM_START_ADDY_M = $AF0142 -=$af0143 BM_START_ADDY_H = $AF0143 -=$af0144 BM_X_SIZE_L = $AF0144 -=$af0145 BM_X_SIZE_H = $AF0145 -=$af0146 BM_Y_SIZE_L = $AF0146 -=$af0147 BM_Y_SIZE_H = $AF0147 -=$af0148 BM_RESERVED_0 = $AF0148 -=$af0149 BM_RESERVED_1 = $AF0149 -=$af014a BM_RESERVED_2 = $AF014A -=$af014b BM_RESERVED_3 = $AF014B -=$af014c BM_RESERVED_4 = $AF014C -=$af014d BM_RESERVED_5 = $AF014D -=$af014e BM_RESERVED_6 = $AF014E -=$af014f BM_RESERVED_7 = $AF014F -=$01 SPRITE_Enable = $01 -=$02 SPRITE_LUT0 = $02 ; This is the LUT that the Sprite will use -=$04 SPRITE_LUT1 = $04 -=$08 SPRITE_LUT2 = $08 ; Only 4 LUT for Now, So this bit is not used. -=$10 SPRITE_DEPTH0 = $10 ; This is the Layer the Sprite will be Displayed in -=$20 SPRITE_DEPTH1 = $20 -=$40 SPRITE_DEPTH2 = $40 -=$af0200 SP00_CONTROL_REG = $AF0200 -=$af0201 SP00_ADDY_PTR_L = $AF0201 -=$af0202 SP00_ADDY_PTR_M = $AF0202 -=$af0203 SP00_ADDY_PTR_H = $AF0203 -=$af0204 SP00_X_POS_L = $AF0204 -=$af0205 SP00_X_POS_H = $AF0205 -=$af0206 SP00_Y_POS_L = $AF0206 -=$af0207 SP00_Y_POS_H = $AF0207 -=$af0208 SP01_CONTROL_REG = $AF0208 -=$af0209 SP01_ADDY_PTR_L = $AF0209 -=$af020a SP01_ADDY_PTR_M = $AF020A -=$af020b SP01_ADDY_PTR_H = $AF020B -=$af020c SP01_X_POS_L = $AF020C -=$af020d SP01_X_POS_H = $AF020D -=$af020e SP01_Y_POS_L = $AF020E -=$af020f SP01_Y_POS_H = $AF020F -=$af0210 SP02_CONTROL_REG = $AF0210 -=$af0211 SP02_ADDY_PTR_L = $AF0211 -=$af0212 SP02_ADDY_PTR_M = $AF0212 -=$af0213 SP02_ADDY_PTR_H = $AF0213 -=$af0214 SP02_X_POS_L = $AF0214 -=$af0215 SP02_X_POS_H = $AF0215 -=$af0216 SP02_Y_POS_L = $AF0216 -=$af0217 SP02_Y_POS_H = $AF0217 -=$af0218 SP03_CONTROL_REG = $AF0218 -=$af0219 SP03_ADDY_PTR_L = $AF0219 -=$af021a SP03_ADDY_PTR_M = $AF021A -=$af021b SP03_ADDY_PTR_H = $AF021B -=$af021c SP03_X_POS_L = $AF021C -=$af021d SP03_X_POS_H = $AF021D -=$af021e SP03_Y_POS_L = $AF021E -=$af021f SP03_Y_POS_H = $AF021F -=$af0220 SP04_CONTROL_REG = $AF0220 -=$af0221 SP04_ADDY_PTR_L = $AF0221 -=$af0222 SP04_ADDY_PTR_M = $AF0222 -=$af0223 SP04_ADDY_PTR_H = $AF0223 -=$af0224 SP04_X_POS_L = $AF0224 -=$af0225 SP04_X_POS_H = $AF0225 -=$af0226 SP04_Y_POS_L = $AF0226 -=$af0227 SP04_Y_POS_H = $AF0227 -=$af0228 SP05_CONTROL_REG = $AF0228 -=$af0229 SP05_ADDY_PTR_L = $AF0229 -=$af022a SP05_ADDY_PTR_M = $AF022A -=$af022b SP05_ADDY_PTR_H = $AF022B -=$af022c SP05_X_POS_L = $AF022C -=$af022d SP05_X_POS_H = $AF022D -=$af022e SP05_Y_POS_L = $AF022E -=$af022f SP05_Y_POS_H = $AF022F -=$af0230 SP06_CONTROL_REG = $AF0230 -=$af0231 SP06_ADDY_PTR_L = $AF0231 -=$af0232 SP06_ADDY_PTR_M = $AF0232 -=$af0233 SP06_ADDY_PTR_H = $AF0233 -=$af0234 SP06_X_POS_L = $AF0234 -=$af0235 SP06_X_POS_H = $AF0235 -=$af0236 SP06_Y_POS_L = $AF0236 -=$af0237 SP06_Y_POS_H = $AF0237 -=$af0238 SP07_CONTROL_REG = $AF0238 -=$af0239 SP07_ADDY_PTR_L = $AF0239 -=$af023a SP07_ADDY_PTR_M = $AF023A -=$af023b SP07_ADDY_PTR_H = $AF023B -=$af023c SP07_X_POS_L = $AF023C -=$af023d SP07_X_POS_H = $AF023D -=$af023e SP07_Y_POS_L = $AF023E -=$af023f SP07_Y_POS_H = $AF023F -=$af0240 SP08_CONTROL_REG = $AF0240 -=$af0241 SP08_ADDY_PTR_L = $AF0241 -=$af0242 SP08_ADDY_PTR_M = $AF0242 -=$af0243 SP08_ADDY_PTR_H = $AF0243 -=$af0244 SP08_X_POS_L = $AF0244 -=$af0245 SP08_X_POS_H = $AF0245 -=$af0246 SP08_Y_POS_L = $AF0246 -=$af0247 SP08_Y_POS_H = $AF0247 -=$af0248 SP09_CONTROL_REG = $AF0248 -=$af0249 SP09_ADDY_PTR_L = $AF0249 -=$af024a SP09_ADDY_PTR_M = $AF024A -=$af024b SP09_ADDY_PTR_H = $AF024B -=$af024c SP09_X_POS_L = $AF024C -=$af024d SP09_X_POS_H = $AF024D -=$af024e SP09_Y_POS_L = $AF024E -=$af024f SP09_Y_POS_H = $AF024F -=$af0250 SP10_CONTROL_REG = $AF0250 -=$af0251 SP10_ADDY_PTR_L = $AF0251 -=$af0252 SP10_ADDY_PTR_M = $AF0252 -=$af0253 SP10_ADDY_PTR_H = $AF0253 -=$af0254 SP10_X_POS_L = $AF0254 -=$af0255 SP10_X_POS_H = $AF0255 -=$af0256 SP10_Y_POS_L = $AF0256 -=$af0257 SP10_Y_POS_H = $AF0257 -=$af0258 SP11_CONTROL_REG = $AF0258 -=$af0259 SP11_ADDY_PTR_L = $AF0259 -=$af025a SP11_ADDY_PTR_M = $AF025A -=$af025b SP11_ADDY_PTR_H = $AF025B -=$af025c SP11_X_POS_L = $AF025C -=$af025d SP11_X_POS_H = $AF025D -=$af025e SP11_Y_POS_L = $AF025E -=$af025f SP11_Y_POS_H = $AF025F -=$af0260 SP12_CONTROL_REG = $AF0260 -=$af0261 SP12_ADDY_PTR_L = $AF0261 -=$af0262 SP12_ADDY_PTR_M = $AF0262 -=$af0263 SP12_ADDY_PTR_H = $AF0263 -=$af0264 SP12_X_POS_L = $AF0264 -=$af0265 SP12_X_POS_H = $AF0265 -=$af0266 SP12_Y_POS_L = $AF0266 -=$af0267 SP12_Y_POS_H = $AF0267 -=$af0268 SP13_CONTROL_REG = $AF0268 -=$af0269 SP13_ADDY_PTR_L = $AF0269 -=$af026a SP13_ADDY_PTR_M = $AF026A -=$af026b SP13_ADDY_PTR_H = $AF026B -=$af026c SP13_X_POS_L = $AF026C -=$af026d SP13_X_POS_H = $AF026D -=$af026e SP13_Y_POS_L = $AF026E -=$af026f SP13_Y_POS_H = $AF026F -=$af0270 SP14_CONTROL_REG = $AF0270 -=$af0271 SP14_ADDY_PTR_L = $AF0271 -=$af0272 SP14_ADDY_PTR_M = $AF0272 -=$af0273 SP14_ADDY_PTR_H = $AF0273 -=$af0274 SP14_X_POS_L = $AF0274 -=$af0275 SP14_X_POS_H = $AF0275 -=$af0276 SP14_Y_POS_L = $AF0276 -=$af0277 SP14_Y_POS_H = $AF0277 -=$af0278 SP15_CONTROL_REG = $AF0278 -=$af0279 SP15_ADDY_PTR_L = $AF0279 -=$af027a SP15_ADDY_PTR_M = $AF027A -=$af027b SP15_ADDY_PTR_H = $AF027B -=$af027c SP15_X_POS_L = $AF027C -=$af027d SP15_X_POS_H = $AF027D -=$af027e SP15_Y_POS_L = $AF027E -=$af027f SP15_Y_POS_H = $AF027F -=$af0280 SP16_CONTROL_REG = $AF0280 -=$af0281 SP16_ADDY_PTR_L = $AF0281 -=$af0282 SP16_ADDY_PTR_M = $AF0282 -=$af0283 SP16_ADDY_PTR_H = $AF0283 -=$af0284 SP16_X_POS_L = $AF0284 -=$af0285 SP16_X_POS_H = $AF0285 -=$af0286 SP16_Y_POS_L = $AF0286 -=$af0287 SP16_Y_POS_H = $AF0287 -=$af0288 SP17_CONTROL_REG = $AF0288 -=$af0289 SP17_ADDY_PTR_L = $AF0289 -=$af028a SP17_ADDY_PTR_M = $AF028A -=$af028b SP17_ADDY_PTR_H = $AF028B -=$af028c SP17_X_POS_L = $AF028C -=$af028d SP17_X_POS_H = $AF028D -=$af028e SP17_Y_POS_L = $AF028E -=$af028f SP17_Y_POS_H = $AF028F -=$af0400 VDMA_CONTROL_REG = $AF0400 -=$01 VDMA_CTRL_Enable = $01 -=$02 VDMA_CTRL_1D_2D = $02 ; 0 - 1D (Linear) Transfer , 1 - 2D (Block) Transfer -=$04 VDMA_CTRL_TRF_Fill = $04 ; 0 - Transfer Src -> Dst, 1 - Fill Destination with "Byte2Write" -=$08 VDMA_CTRL_Int_Enable = $08 ; Set to 1 to Enable the Generation of Interrupt when the Transfer is over. -=$80 VDMA_CTRL_Start_TRF = $80 ; Set to 1 To Begin Process, Need to Cleared before, you can start another -=$af0401 VDMA_BYTE_2_WRITE = $AF0401 ; Write Only - Byte to Write in the Fill Function -=$af0401 VDMA_STATUS_REG = $AF0401 ; Read only -=$01 VDMA_STAT_Size_Err = $01 ; If Set to 1, Overall Size is Invalid -=$02 VDMA_STAT_Dst_Add_Err = $02 ; If Set to 1, Destination Address Invalid -=$04 VDMA_STAT_Src_Add_Err = $04 ; If Set to 1, Source Address Invalid -=$80 VDMA_STAT_VDMA_IPS = $80 ; If Set to 1, VDMA Transfer in Progress (this Inhibit CPU Access to Mem) -=$af0402 VDMA_SRC_ADDY_L = $AF0402 ; Pointer to the Source of the Data to be stransfered -=$af0403 VDMA_SRC_ADDY_M = $AF0403 ; This needs to be within Vicky's Range ($00_0000 - $3F_0000) -=$af0404 VDMA_SRC_ADDY_H = $AF0404 -=$af0405 VDMA_DST_ADDY_L = $AF0405 ; Destination Pointer within Vicky's video memory Range -=$af0406 VDMA_DST_ADDY_M = $AF0406 ; ($00_0000 - $3F_0000) -=$af0407 VDMA_DST_ADDY_H = $AF0407 -=$af0408 VDMA_SIZE_L = $AF0408 ; Maximum Value: $40:0000 (4Megs) -=$af0409 VDMA_SIZE_M = $AF0409 -=$af040a VDMA_SIZE_H = $AF040A -=$af040b VDMA_IGNORED = $AF040B -=$af0408 VDMA_X_SIZE_L = $AF0408 ; Maximum Value: 65535 -=$af0409 VDMA_X_SIZE_H = $AF0409 -=$af040a VDMA_Y_SIZE_L = $AF040A ; Maximum Value: 65535 -=$af040b VDMA_Y_SIZE_H = $AF040B -=$af040c VDMA_SRC_STRIDE_L = $AF040C ; Always use an Even Number ( The Engine uses Even Ver of that value) -=$af040d VDMA_SRC_STRIDE_H = $AF040D ; -=$af040e VDMA_DST_STRIDE_L = $AF040E ; Always use an Even Number ( The Engine uses Even Ver of that value) -=$af040f VDMA_DST_STRIDE_H = $AF040F ; -=$af0500 MOUSE_PTR_GRAP0_START = $AF0500 ; 16 x 16 = 256 Pixels (Grey Scale) 0 = Transparent, 1 = Black , 255 = White -=$af05ff MOUSE_PTR_GRAP0_END = $AF05FF ; Pointer 0 -=$af0600 MOUSE_PTR_GRAP1_START = $AF0600 ; -=$af06ff MOUSE_PTR_GRAP1_END = $AF06FF ; Pointer 1 -=$af0700 MOUSE_PTR_CTRL_REG_L = $AF0700 ; Bit[0] Enable, Bit[1] = 0 ( 0 = Pointer0, 1 = Pointer1) -=$af0701 MOUSE_PTR_CTRL_REG_H = $AF0701 ; -=$af0702 MOUSE_PTR_X_POS_L = $AF0702 ; X Position (0 - 639) (Can only read now) Writing will have no effect -=$af0703 MOUSE_PTR_X_POS_H = $AF0703 ; -=$af0704 MOUSE_PTR_Y_POS_L = $AF0704 ; Y Position (0 - 479) (Can only read now) Writing will have no effect -=$af0705 MOUSE_PTR_Y_POS_H = $AF0705 ; -=$af0706 MOUSE_PTR_BYTE0 = $AF0706 ; Byte 0 of Mouse Packet (you must write 3 Bytes) -=$af0707 MOUSE_PTR_BYTE1 = $AF0707 ; Byte 1 of Mouse Packet (if you don't, then ) -=$af0708 MOUSE_PTR_BYTE2 = $AF0708 ; Byte 2 of Mouse Packet (state Machine will be jammed in 1 state) -=$af070b C256F_MODEL_MAJOR = $AF070B ; -=$af070c C256F_MODEL_MINOR = $AF070C ; -=$af070d FPGA_DOR = $AF070D ; -=$af070e FPGA_MOR = $AF070E ; -=$af070f FPGA_YOR = $AF070F ; -=$af1f40 FG_CHAR_LUT_PTR = $AF1F40 -=$af1f80 BG_CHAR_LUT_PTR = $AF1F80 -=$af2000 GRPH_LUT0_PTR = $AF2000 -=$af2400 GRPH_LUT1_PTR = $AF2400 -=$af2800 GRPH_LUT2_PTR = $AF2800 -=$af2c00 GRPH_LUT3_PTR = $AF2C00 -=$af3000 GRPH_LUT4_PTR = $AF3000 -=$af3400 GRPH_LUT5_PTR = $AF3400 -=$af3800 GRPH_LUT6_PTR = $AF3800 -=$af3c00 GRPH_LUT7_PTR = $AF3C00 -=$af4000 GAMMA_B_LUT_PTR = $AF4000 -=$af4100 GAMMA_G_LUT_PTR = $AF4100 -=$af4200 GAMMA_R_LUT_PTR = $AF4200 -=$af5000 TILE_MAP0 = $AF5000 ;$AF5000 - $AF57FF -=$af5800 TILE_MAP1 = $AF5800 ;$AF5800 - $AF5FFF -=$af6000 TILE_MAP2 = $AF6000 ;$AF6000 - $AF67FF -=$af6800 TILE_MAP3 = $AF6800 ;$AF6800 - $AF6FFF -=$af8000 FONT_MEMORY_BANK0 = $AF8000 ;$AF8000 - $AF87FF -=$af8800 FONT_MEMORY_BANK1 = $AF8800 ;$AF8800 - $AF8FFF -=$afa000 CS_TEXT_MEM_PTR = $AFA000 -=$afc000 CS_COLOR_MEM_PTR = $AFC000 -=$afe000 BTX_START = $AFE000 ; BEATRIX Registers -=$afffff BTX_END = $AFFFFF - -;****** Return to file: matrix.asm - -=$1900a8 CLRSCREEN = $1900a8 -=$1904ed ENDLESS_LOOP = $1904ed ; so lame, but works for testing... -=803 RAND_SIZE = 803 -.030000 18 clc clc ; switch to native -.030001 fb xce xce ; -.030002 0b phd phd -.030003 08 php php -.030004 c2 30 rep #$30 REP #$30 ; set A&X long -.030006 48 pha pha -.030007 da phx phx -.030008 22 22 00 03 jsl $030022 jsl ICLRSCREEN2 -.03000c 22 26 01 03 jsl $030126 jsl TBOX_INIT ; init line offsets -.030010 22 41 01 03 jsl $030141 jsl INIT_LUT -.030014 22 4f 00 03 jsl $03004f jsl MATRIX_PRINT -.030018 c2 20 rep #$20 REP #$20 ; set A long -.03001a fa plx plx -.03001b 68 pla pla -.03001c 28 plp plp -.03001d 2b pld pld -.03001e 5c ed 04 19 jmp $1904ed jmp ENDLESS_LOOP -.030022 0b phd ICLRSCREEN2 PHD -.030023 08 php PHP -.030024 c2 30 rep #$30 REP #$30 ; set A&X long -.030026 48 pha PHA -.030027 da phx PHX -.030028 e2 20 sep #$20 SEP #$20 ; set A short -.03002a a2 00 00 ldx #$0000 LDX #$0000 ; Only Use One Pointer -.03002d a9 20 lda #$20 LDA #$20 ; Fill the Entire Screen with Space -.03002f 9f 00 a0 af sta $afa000,x iclearprint_text STA CS_TEXT_MEM_PTR, x ; -.030033 e8 inx INX -.030034 e0 00 20 cpx #$2000 CPX #$2000 -.030037 d0 f6 bne $03002f BNE iclearprint_text -.030039 a2 00 00 ldx #$0000 LDX #$0000 ; Only Use One Pointer -.03003c a9 11 lda #$11 LDA #$11 ; Fill the Color Memory with Foreground: 75% Purple, Background 12.5% White -.03003e 9f 00 c0 af sta $afc000,x iclearloop1 STA CS_COLOR_MEM_PTR, x ; -.030042 e8 inx INX -.030043 e0 00 20 cpx #$2000 CPX #$2000 -.030046 d0 f6 bne $03003e BNE iclearloop1 -.030048 c2 20 rep #$20 REP #$20 ; set A long -.03004a fa plx PLX -.03004b 68 pla PLA -.03004c 28 plp PLP -.03004d 2b pld PLD -.03004e 6b rtl RTL -.00e0 matrix ->00e0 counter .word ? ; ->00e2 rnd_pos .word ? ; for displaying characters ->00e4 rnd2_pos .word ? ; for new rain chance ->00e6 row_current .word ? ; ->00e8 delay_counter .word ? ; -.03004f ea nop MATRIX_PRINT nop -.030050 c2 20 rep #$20 REP #$20 ; set A long -.030052 a9 22 03 lda #$0322 lda #RAND_SIZE-1 -.030055 85 e2 sta $e2 sta matrix.rnd_pos -.030057 85 e4 sta $e4 sta matrix.rnd2_pos -.030059 a9 00 08 lda #$0800 lda #2048 ; how many iterations? -.03005c 85 e0 sta $e0 sta matrix.counter -.03005e a5 13 lda $13 lda LINES_VISIBLE -.030060 3a dec a dec a ; assume that LINES_VISIBLE > 0 -.030061 85 e6 sta $e6 sta matrix.row_current -.030063 c2 30 rep #$30 REP #$30 ; set A&X long -.030065 a5 e6 lda $e6 print_text lda matrix.row_current -.030067 0a asl a asl a ; because we have array of words -.030068 aa tax tax -.030069 bf a0 01 03 lda $0301a0,x lda line_offset, x -.03006d 18 clc clc -.03006e 65 0f adc $0f adc COLS_VISIBLE -.030070 aa tax tax -.030071 e2 20 sep #$20 SEP #$20 ; set A short -.030073 a4 0f ldy $0f ldy COLS_VISIBLE -.030075 ea nop put_char nop -.030076 20 04 01 jsr $030104 jsr GET_RAND -.030079 9f 00 a0 af sta $afa000,x sta CS_TEXT_MEM_PTR, x -.03007d ca dex dex -.03007e 88 dey dey -.03007f 10 f4 bpl $030075 bpl put_char -.030081 ea nop next_line nop -.030082 c2 30 rep #$30 REP #$30 ; set A&X long -.030084 a5 e6 lda $e6 lda matrix.row_current -.030086 3a dec a dec a -.030087 85 e6 sta $e6 sta matrix.row_current -.030089 10 da bpl $030065 bpl print_text -.03008b ea nop text_done nop -.03008c e2 20 sep #$20 SEP #$20 ; set A short -.03008e c2 10 rep #$10 REP #$10 ; set X long -.030090 a6 0f ldx $0f ldx COLS_VISIBLE -.030092 20 15 01 jsr $030115 line0 jsr GET_RAND2 -.030095 c9 03 cmp #$03 cmp #3 ; 2% chance -.030097 b0 06 bcs $03009f bcs line1 -.030099 a9 f1 lda #$f1 lda #$f1 -.03009b 9f 00 c0 af sta $afc000,x sta CS_COLOR_MEM_PTR, x -.03009f ca dex line1 dex -.0300a0 10 f0 bpl $030092 bpl line0 -.0300a2 c2 20 rep #$20 REP #$20 ; set A long -.0300a4 a5 13 lda $13 matrix_preloop lda LINES_VISIBLE -.0300a6 3a dec a dec a ; assume that LINES_VISIBLE >= 2 -.0300a7 3a dec a dec a ; assume that LINES_VISIBLE >= 2 -.0300a8 85 e6 sta $e6 sta matrix.row_current -.0300aa a5 e6 lda $e6 matrix_loop lda matrix.row_current -.0300ac 0a asl a asl a ; because we have array of words -.0300ad aa tax tax -.0300ae bf a0 01 03 lda $0301a0,x lda line_offset, x -.0300b2 18 clc clc -.0300b3 65 0f adc $0f adc COLS_VISIBLE -.0300b5 aa tax tax -.0300b6 e2 20 sep #$20 SEP #$20 ; set A short -.0300b8 a4 0f ldy $0f ldy COLS_VISIBLE -.0300ba ea nop move0 nop -.0300bb bf 00 c0 af lda $afc000,x lda CS_COLOR_MEM_PTR, x -.0300bf 29 f0 and #$f0 and #$f0 -.0300c1 d0 09 bne $0300cc bne move2 -.0300c3 09 11 ora #$11 ora #$11 -.0300c5 9f 80 c0 af sta $afc080,x sta CS_COLOR_MEM_PTR+$80, x -.0300c9 4c e1 00 jmp $0300e1 jmp move1 -.0300cc 09 01 ora #$01 move2 ora #$01 -.0300ce 9f 80 c0 af sta $afc080,x sta CS_COLOR_MEM_PTR+$80, x -.0300d2 4a lsr a lsr a -.0300d3 4a lsr a lsr a -.0300d4 4a lsr a lsr a -.0300d5 4a lsr a lsr a -.0300d6 3a dec a dec a -.0300d7 0a asl a asl a -.0300d8 0a asl a asl a -.0300d9 0a asl a asl a -.0300da 0a asl a asl a -.0300db 09 01 ora #$01 ora #$01 -.0300dd 9f 00 c0 af sta $afc000,x sta CS_COLOR_MEM_PTR, x -.0300e1 ca dex move1 dex -.0300e2 88 dey dey -.0300e3 10 d5 bpl $0300ba bpl move0 -.0300e5 c2 30 rep #$30 REP #$30 ; set A&X long -.0300e7 a5 e6 lda $e6 lda matrix.row_current -.0300e9 3a dec a dec a -.0300ea 85 e6 sta $e6 sta matrix.row_current -.0300ec 10 bc bpl $0300aa bpl matrix_loop -.0300ee a9 00 00 lda #$0000 lda #$0000 -.0300f1 85 e8 sta $e8 sta matrix.delay_counter -.0300f3 e6 e8 inc $e8 delay_loop inc matrix.delay_counter -.0300f5 a5 e8 lda $e8 lda matrix.delay_counter -.0300f7 c9 00 80 cmp #$8000 cmp #$8000 -.0300fa 90 f7 bcc $0300f3 bcc delay_loop -.0300fc c6 e0 dec $e0 dec matrix.counter -.0300fe f0 03 beq $030103 beq finish -.030100 4c 8b 00 jmp $03008b jmp text_done -.030103 6b rtl finish rtl -.030104 da phx GET_RAND phx -.030105 a6 e2 ldx $e2 ldx matrix.rnd_pos -.030107 bf 20 02 03 lda $030220,x lda rnd0,x -.03010b ca dex dex -.03010c 10 03 bpl $030111 bpl get_rand_out -.03010e a2 22 03 ldx #$0322 ldx #RAND_SIZE-1 -.030111 86 e2 stx $e2 get_rand_out stx matrix.rnd_pos -.030113 fa plx plx -.030114 60 rts rts -.030115 da phx GET_RAND2 phx -.030116 a6 e4 ldx $e4 ldx matrix.rnd2_pos -.030118 bf 43 05 03 lda $030543,x lda rnd1,x -.03011c ca dex dex -.03011d 10 03 bpl $030122 bpl get_rand2_out -.03011f a2 22 03 ldx #$0322 ldx #RAND_SIZE-1 -.030122 86 e4 stx $e4 get_rand2_out stx matrix.rnd2_pos -.030124 fa plx plx -.030125 60 rts rts -.030126 TBOX_INIT -.030126 c2 30 rep #$30 REP #$30 ; set A&X long -.030128 a5 15 lda $15 lda LINES_MAX -.03012a 0a asl a asl a ; *2 because X indexes a words -.03012b aa tax tax -.03012c a5 15 lda $15 lda LINES_MAX -.03012e 0a asl a asl a -.03012f 0a asl a asl a -.030130 0a asl a asl a -.030131 0a asl a asl a -.030132 0a asl a asl a -.030133 0a asl a asl a -.030134 0a asl a asl a ; in A: LINES_MAX*$80 -.030135 38 sec tinit0 sec -.030136 e5 11 sbc $11 sbc COLS_PER_LINE ; default 128 bytes -.030138 ca dex dex -.030139 ca dex dex -.03013a 9f a0 01 03 sta $0301a0,x sta line_offset,x -.03013e d0 f5 bne $030135 bne tinit0 -.030140 6b rtl rtl -.030141 ea nop INIT_LUT nop -.030142 e2 20 sep #$20 SEP #$20 ; set A short -.030144 c2 10 rep #$10 REP #$10 ; set X long -.030146 a2 00 00 ldx #$0000 ldx #0 -.030149 bf 5c 01 03 lda $03015c,x init_fg_lut lda lut_fg_tbl, x -.03014d 9f 40 1f af sta $af1f40,x sta FG_CHAR_LUT_PTR, x -.030151 9f 80 1f af sta $af1f80,x sta BG_CHAR_LUT_PTR, x -.030155 e8 inx inx -.030156 e0 40 00 cpx #$0040 cpx #$40 -.030159 d0 ee bne $030149 bne init_fg_lut -.03015b 6b rtl rtl ->03015c 00 1a 00 00 lut_fg_tbl .byte $00, $1a, $00, $00 ->030160 00 1a 00 00 .byte $00, $1a, $00, $00 ->030164 00 33 00 00 .byte $00, $33, $00, $00 ->030168 00 33 00 00 .byte $00, $33, $00, $00 ->03016c 00 50 00 00 .byte $00, $50, $00, $00 ->030170 00 61 00 00 .byte $00, $61, $00, $00 ->030174 00 63 00 00 .byte $00, $63, $00, $00 ->030178 00 63 00 00 .byte $00, $63, $00, $00 ->03017c 00 67 00 00 .byte $00, $67, $00, $00 ->030180 00 69 00 00 .byte $00, $69, $00, $00 ->030184 00 79 00 00 .byte $00, $79, $00, $00 ->030188 00 7a 00 00 .byte $00, $7a, $00, $00 ->03018c 00 80 00 00 .byte $00, $80, $00, $00 ->030190 00 8f 00 00 .byte $00, $8f, $00, $00 ->030194 00 e6 00 00 .byte $00, $e6, $00, $00 ->030198 cc ff cc 00 .byte $cc, $ff, $cc, $00 ->03019c .align $10 ; waste of memory, but debugging is easier ->0301a0 fe fe fe fe fe fe fe fe line_offset .fill 64 * 2, $FE ; not possible to determine at compile time ->0301a8 fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe -; ...repeated 6 times (96 bytes)... ->030218 fe fe fe fe fe fe fe fe ->030220 .align $10 ; waste of memory, but debugging is easier ->030220 d2 bc 24 49 74 3b 52 56 rnd0 .byte random([256] x RAND_SIZE) ->030228 34 8d f5 b2 cf ad c5 65 52 ed 9a c3 7d 84 a2 59 ->030238 46 6c 81 20 2c 33 b0 47 a0 f8 d8 e0 63 61 56 45 ->030248 34 30 48 a1 7a 1e 8a 13 47 e9 3e 97 47 d3 7e f1 ->030258 1b 1c d4 02 5b 22 cb e9 99 43 7c f3 84 c5 1e 02 ->030268 9e 8c 2e 1f 65 d7 b4 d5 e8 e5 61 12 6b ab c8 05 ->030278 49 3b a7 d9 9a 9c b1 87 bc 55 ce 85 52 0c ca 89 ->030288 1b 02 93 2b ca 24 c2 73 5f b4 da 5f 91 62 73 b8 ->030298 b6 64 df c9 e1 06 0d 1e 8e bd d4 1d 58 56 04 27 ->0302a8 2c 17 65 6a 10 c1 de b6 f1 7f 5b 34 29 cf 87 8e ->0302b8 33 10 f8 76 0b 92 df 0f 4d b5 bc c2 38 26 ac 6e ->0302c8 bb af 00 33 ac f9 fc c9 ae 7b aa 25 9c f4 85 00 ->0302d8 21 1e d2 5b 8e d8 fa a4 94 89 19 8a fa 6c 62 69 ->0302e8 fe c9 09 c2 d1 50 21 db 69 a8 11 5b d1 26 14 a7 ->0302f8 05 27 69 b4 6d 98 51 d4 ab b7 79 1a 30 81 67 61 ->030308 c0 1f fa d2 33 92 94 3e bc 93 d0 49 ad 30 12 92 ->030318 d3 36 e3 f5 b6 50 c6 44 53 5d e6 d6 3d 99 79 63 ->030328 57 1f 21 fe ec 4e f2 fb 94 65 2b a1 43 a5 88 e7 ->030338 7f aa 06 2b e9 9d 76 50 98 9a 91 9a f6 4a aa f2 ->030348 e7 58 8e 04 7e e9 5f 19 bf 8a 80 88 19 c1 2b c3 ->030358 c6 7b bb cc bf 72 cd e3 97 5b db 46 9d f7 94 4d ->030368 5c 81 eb 6c d6 aa 2f ae 89 c8 a1 5b 2c 79 38 73 ->030378 27 c8 73 bf e7 6c a4 6a 7e d0 de 33 f7 75 50 49 ->030388 13 e4 63 db d2 10 d3 34 7b 7f 0a 21 d7 60 7f 70 ->030398 2b 5f 23 e7 2d 80 c6 b6 fb 3d bd f9 d5 01 78 15 ->0303a8 40 b8 8a 8d c5 49 58 ca c2 ec 94 43 0d 5b 34 05 ->0303b8 69 60 30 ac f7 1d 2e db 41 43 9b c2 a9 23 9b 89 ->0303c8 20 f2 05 66 a2 49 da 54 27 f7 29 38 ac 34 eb 44 ->0303d8 0d 40 54 bc 85 f0 cf f5 be 8f 89 14 03 3c 57 35 ->0303e8 4e 03 1e 3f 62 b8 d6 d0 39 01 80 b9 40 72 83 6d ->0303f8 ad 0f b7 3c 79 00 18 2e 7f 96 0f 92 4d 81 e4 ad ->030408 8d 28 56 d9 94 54 2e bb 18 76 a7 82 5d c7 24 d4 ->030418 65 99 e0 84 b2 4f 2f d4 0a a7 1c 9b 61 92 38 82 ->030428 ab 33 1d c4 f0 e6 f8 cc fc df 14 2a 9d 51 70 82 ->030438 c2 ac 46 76 ff f4 69 f0 4e 0e e8 71 9c 36 96 97 ->030448 1d 6f dc bc 0c 5d 53 04 a8 44 4d 44 1e 42 75 0e ->030458 3f 7c b4 d8 f8 1e 5a 84 40 a5 65 4c 35 7b 8b 56 ->030468 23 fc ad ff ac ed 04 17 d3 80 65 3f 91 57 30 c4 ->030478 db b8 1f 01 37 b1 ee eb 04 86 cc d2 9d 56 c0 c3 ->030488 26 9f 94 15 1e e8 6f b6 6a f2 76 75 fb 8a 05 9a ->030498 16 86 13 14 70 bc be b5 72 3a 71 82 c4 03 7f 67 ->0304a8 bb 00 65 2e 93 65 77 c6 1c 9f 8f 2a 8d 16 03 b8 ->0304b8 19 f0 7e 6d 21 bd 90 86 7d f3 ec 1a 0e a3 29 1e ->0304c8 c9 68 23 5b d7 69 14 3a 55 14 d4 47 c9 9a 79 b1 ->0304d8 5b ee c7 4c f0 0f d6 7a b9 fb 83 b2 04 1e 27 11 ->0304e8 b6 23 5f 14 fa 88 aa 85 54 37 11 dc 69 41 0c b3 ->0304f8 ba f4 36 ce 89 f4 8d 11 9d 07 4a a6 eb 55 5c 39 ->030508 4b 87 a8 61 bb cc 0c aa 37 a0 97 f4 21 61 4a 5e ->030518 8d 9b c5 1d d7 5a d9 6a 72 e0 5b ac df 5d 0c 8e ->030528 b8 c1 20 e2 be 44 85 31 a7 e7 16 19 23 69 5b a2 ->030538 28 fb a5 4c b4 d9 39 e5 aa d1 0c ->030543 46 1d 44 10 3e 18 53 01 rnd1 .byte random([100] x RAND_SIZE) ->03054b 59 02 48 5c 17 49 40 0b 4c 1a 12 60 25 16 56 58 ->03055b 0b 3e 3b 3a 44 1c 0e 3d 54 02 3d 49 03 5c 50 38 ->03056b 4d 0f 38 63 0c 1f 4b 38 5b 48 1c 0d 55 07 53 30 ->03057b 36 4b 19 19 4d 59 4a 1f 2f 4d 33 36 10 36 4e 13 ->03058b 11 5b 13 3d 54 06 5e 62 2b 3b 34 43 43 19 24 0c ->03059b 41 37 3a 42 01 34 55 27 1a 01 1f 54 22 2f 36 17 ->0305ab 01 24 5a 58 1a 14 5c 05 5a 36 31 08 2a 56 5d 3b ->0305bb 29 0c 30 2e 5c 15 2d 40 37 23 38 4e 0d 3f 3c 5b ->0305cb 2e 54 55 45 54 1e 5d 21 03 49 0a 3c 0e 12 1e 51 ->0305db 1e 3b 54 2c 03 0e 29 2e 4a 17 03 39 1e 53 55 3c ->0305eb 57 12 35 2a 03 15 2f 50 10 15 1e 58 43 4f 48 4d ->0305fb 61 4c 26 35 58 55 15 3c 34 07 3f 56 44 4f 39 05 ->03060b 15 1a 00 25 4a 49 2a 1b 4b 36 48 02 1c 3c 04 2b ->03061b 4f 54 40 39 40 4b 59 48 11 07 42 3c 08 36 39 58 ->03062b 10 31 03 42 49 60 39 59 36 4b 31 3a 5a 4d 5c 33 ->03063b 0c 26 2e 59 3b 62 22 1b 0d 12 5e 06 4a 1f 39 5f ->03064b 09 22 58 37 5e 24 32 0b 20 13 15 4c 44 1f 24 39 ->03065b 31 13 4b 5e 62 15 4e 11 50 4b 1c 32 1a 36 49 3e ->03066b 2e 3e 1b 26 23 50 56 14 37 32 13 5b 07 24 08 5f ->03067b 2b 49 49 11 4f 36 0d 4d 10 17 2e 2a 22 5c 41 49 ->03068b 46 4c 4a 3d 47 07 1a 12 44 0b 32 15 46 40 03 1e ->03069b 03 42 16 37 5c 47 3e 53 15 1d 0b 1d 29 5f 11 11 ->0306ab 1d 2d 2e 16 33 2c 37 0a 3f 0c 14 55 42 58 55 26 ->0306bb 5a 52 5a 1c 29 48 45 00 0a 00 3d 2b 45 5d 3e 60 ->0306cb 58 2b 4c 4c 58 41 1d 52 09 4a 33 49 3f 24 52 5d ->0306db 5d 2d 07 4e 45 1e 27 55 0d 0c 0e 61 4a 0b 26 4f ->0306eb 57 1d 2f 63 21 44 63 0b 29 61 3e 04 55 1d 17 1a ->0306fb 36 38 0f 57 58 03 5f 05 0a 58 2e 1b 4d 2c 13 28 ->03070b 44 5d 03 4d 1a 30 4b 53 31 1c 2e 17 44 55 5a 4b ->03071b 1a 0b 4f 09 1a 63 0e 11 1c 53 42 14 3a 5a 33 10 ->03072b 18 2e 52 59 56 48 00 1e 30 58 0d 36 62 44 04 37 ->03073b 06 62 44 19 58 17 3e 43 18 0b 13 17 0c 1b 11 41 ->03074b 0b 1c 06 19 14 61 24 28 02 22 35 28 3a 04 14 62 ->03075b 2b 04 23 10 54 4f 0a 05 4e 4b 23 3a 53 4e 12 23 ->03076b 3b 60 4d 5c 24 47 46 63 4e 12 1a 56 52 2e 12 10 ->03077b 00 3c 1f 17 53 45 3c 31 14 13 14 0d 2f 23 08 24 ->03078b 59 50 1b 48 5f 49 04 3e 3e 0d 0f 55 26 5c 26 62 ->03079b 15 40 60 1e 27 5f 08 61 32 50 51 51 34 41 0c 0c ->0307ab 2e 13 4a 08 03 0a 30 2b 24 06 36 31 2e 5a 19 55 ->0307bb 2f 0a 18 31 0c 3a 31 54 13 3f 31 31 43 0f 3e 31 ->0307cb 4e 3d 2f 54 3a 5a 30 23 17 20 17 5f 5d 4d 5c 51 ->0307db 06 5c 3c 37 60 38 26 2e 0f 5e 60 09 00 0a 36 37 ->0307eb 43 47 03 08 3a 4f 5a 27 0f 5c 60 07 23 0f 4b 5f ->0307fb 11 32 2b 23 43 05 54 04 5f 20 13 32 32 4f 34 33 ->03080b 1f 60 2e 59 50 4f 3d 31 0a 48 17 3a 5c 21 02 04 ->03081b 00 58 0c 1e 19 4a 27 24 03 61 53 58 52 0a 5e 2e ->03082b 43 1d 00 43 01 45 05 1c 41 3d 54 22 04 0e 4e 60 ->03083b 2c 01 40 22 3b 4a 4d 44 00 1d 4f 62 45 1e 0e 2a ->03084b 0d 4f 2d 1d 27 51 16 3f 36 1e 45 0f 5a 0c 32 2c ->03085b 06 38 25 0b 27 38 1b 12 20 28 5a - -;****** End of listing