From a0df2178b5a259555ad5445ac7e822690b189ffe Mon Sep 17 00:00:00 2001 From: dtremblay Date: Thu, 23 Apr 2020 00:19:26 -0300 Subject: [PATCH] Fixed issue with the display message subroutine. --- display_func.asm | 2 +- tracker.hex | 393 ++-- tracker.lst | 4962 +++++++++++++++++++++++----------------------- 3 files changed, 2704 insertions(+), 2653 deletions(-) diff --git a/display_func.asm b/display_func.asm index 8a92dae..b3e82ec 100644 --- a/display_func.asm +++ b/display_func.asm @@ -920,7 +920,7 @@ DISPLAY_MSG PLB - RTL + RTS ; **************************************************** ; * Display data stored in "current_fat_record". diff --git a/tracker.hex b/tracker.hex index 5adbd77..5e63141 100644 --- a/tracker.hex +++ b/tracker.hex @@ -1,9 +1,9 @@ :1700600000000000000000000000170001010101000000000000006E :020000040038C2 :1A0F000000000000003031323334353637383941424344454600007D0101B6 -:07FF000018FB785C866238F3 +:07FF000018FB785CD769389B :11FF6000C2308B0B48DA5A22A457387AFA682BAB4045 -:20FFE0005C86623810FF20FF30FF40FF000060FF5C86623810FF20FF30FF40FF00FF60FF14 +:20FFE0005CD7693810FF20FF30FF40FF000060FF5CD7693810FF20FF30FF40FF00FF60FF64 :201000006B0181019801B001CA01E50102022002410263028702AE0200010208090A1011A1 :20102000120304050B0C0D131415101314121511100804020120406080E0C000244FF20B54 :20104000000E3100520B004143434F52444E2020200031436E17010222058B0C0242414714 @@ -266,33 +266,33 @@ :2030600000412E38004D2E3800592E3800652E38003C42444547494B4CE220C210A20000C8 :20308000BF713038290F8530BF71303829704A4A4A4A85318A2903852722013238A000000D :2030A000EAEAEAEAC8C0FFFFD0F6E8E00800D0D06BC220A900008528852A85308532853435 -:2030C000A93B1085F0A9380085F2E220A9018F05E6AF6B6B6BC22018A900E66532852CA99F -:2030E000AF00852EE220A72C6BC220A900E6690100852CA9AF00852EE220A72C29206BC24C +:2030C000A93B1085F0A9380085F2E220A9018F05E7AF6B6B6BC22018A900E76532852CA99D +:2030E000AF00852EE220A72C6BC220A900E7690100852CA9AF00852EE220A72C29206BC24B :2031000020A94000852820F537E220A72C29C04A4A4A4A4A4A6BE22018A527290F69B0850C -:203120002AA900852BC23018A900E6652A852CA9AF00852EE220A72C291C4A4A6BE22018F5 -:20314000A527290F69B0852AA900852BC23018A900E6652A852CA9AF00852EE220A72C2968 -:20316000206BE22018A527290F69C0852AA900852BC23018A900E6652A852CA9AF00852E91 -:20318000E220A72C29E04A6BE22018A527290F69C0852AA900852BC23018A900E6652A85A0 +:203120002AA900852BC23018A900E7652A852CA9AF00852EE220A72C291C4A4A6BE22018F4 +:20314000A527290F69B0852AA900852BC23018A900E7652A852CA9AF00852EE220A72C2967 +:20316000206BE22018A527290F69C0852AA900852BC23018A900E7652A852CA9AF00852E90 +:20318000E220A72C29E04A6BE22018A527290F69C0852AA900852BC23018A900E7652A859F :2031A0002CA9AF00852EE220A72C29016BC220A9BD00852820F537E220A72C29806BC22062 -:2031C000A900E669BD00852CA9AF00852EE220A72C29406BC220A900E669BD00852CA9AF35 -:2031E00000852EE220A72C29206BC220A900E669BD00852CA9AF00852EE220A72C291F6BB8 +:2031C000A900E769BD00852CA9AF00852EE220A72C29406BC220A900E769BD00852CA9AF33 +:2031E00000852EE220A72C29206BC220A900E769BD00852CA9AF00852EE220A72C291F6BB7 :203200006BE220DAA900853220C636209536E210A5303A0AAABF0010388532E8BF0010389E :20322000853322273638A901853220C636C210FA6B6B38220C3438E220C210A00000A20018 :2032400000B7088535C8C906D003827001C907D003824401C908D003821801C909D00382C8 :20326000EC00C90AD00382C000A9008526C220A92000852820F537E220B708872CC8C22064 :20328000A94000852820F537E220B708872CC8C220A96000852820F537E220B708872CC8F0 :2032A000C220A98000852820F537E220B708872CC8C220A9E000852820F537E220B7088722 -:2032C0002CC8E210A527290FAAB7089FC0E6AFC8A9018526C220A92000852820F537E220E4 +:2032C0002CC8E210A527290FAAB7089FC0E7AFC8A9018526C220A92000852820F537E220E3 :2032E000B708872CC8C220A94000852820F537E220B708872CC8C220A96000852820F537B0 :20330000E220B708872CC8C220A98000852820F537E220B708872CC8C220A9E000852820F9 -:20332000F537E220B708872C6BE220B7088F31E6AFC8B7088F51E6AFC8B7088F71E6AFC88C -:20334000B7088F91E6AFC8B7088FF1E6AF6BE220B7088F35E6AFC8B7088F55E6AFC8B70851 -:203360008F75E6AFC8B7088F95E6AFC8B7088FF5E6AF6BE220B7088F32E6AFC8B7088F52EA -:20338000E6AFC8B7088F72E6AFC8B7088F92E6AFC8B7088FF2E6AF6BE220B7088F34E6AF1D -:2033A000C8B7088F54E6AFC8B7088F74E6AFC8B7088F94E6AFC8B7088FF4E6AF6BE220B7ED -:2033C000088F30E6AF8F33E6AFC8B7088F50E6AF8F53E6AFC8B7088F70E6AF8F73E6AFC84E -:2033E000B7088F90E6AF8F93E6AFC8B7088FF0E6AF8FF3E6AF6BC22018A900E66532852CB5 -:20340000A9AF00852EE220A533872C6BC220A901E6852CA9AF00852EE220B007A72C29DFE7 +:20332000F537E220B708872C6BE220B7088F31E7AFC8B7088F51E7AFC8B7088F71E7AFC889 +:20334000B7088F91E7AFC8B7088FF1E7AF6BE220B7088F35E7AFC8B7088F55E7AFC8B7084D +:203360008F75E7AFC8B7088F95E7AFC8B7088FF5E7AF6BE220B7088F32E7AFC8B7088F52E6 +:20338000E7AFC8B7088F72E7AFC8B7088F92E7AFC8B7088FF2E7AF6BE220B7088F34E7AF18 +:2033A000C8B7088F54E7AFC8B7088F74E7AFC8B7088F94E7AFC8B7088FF4E7AF6BE220B7E9 +:2033C000088F30E7AF8F33E7AFC8B7088F50E7AF8F53E7AFC8B7088F70E7AF8F73E7AFC848 +:2033E000B7088F90E7AF8F93E7AFC8B7088FF0E7AF8FF3E7AF6BC22018A900E76532852CB0 +:20340000A9AF00852EE220A533872C6BC220A901E7852CA9AF00852EE220B007A72C29DFE6 :20342000872C6BA72C0920872C6B08C22018A92000852820F53728E220B008A72C297F87AC :203440002C8006A72C0980872C6BC220A92000852820F537E220A72C29806B08C22018A908 :203460002000852820F53728E220B008A72C29BF872C8006A72C0940872C6BC220A9200078 @@ -309,22 +309,22 @@ :2035C000E220A72C290F6BC220A98000852820F537E220A532290F0A0A0A0A8532A72C2983 :2035E0000F0532872C6BC220A98000852820F537E220A72C29F04A4A4A4A6BC220A98000D7 :20360000852820F537E220A532290F8532A72C29F00532872C6BC220A98000852820F537A4 -:20362000E220A72C290F6BE22018A527290F69A0852AA900852BC23018A900E6652A852C0A +:20362000E220A72C290F6BE22018A527290F69A0852AA900852BC23018A900E7652A852C09 :20364000A9AF00852EE220A532872C18A52C6910852CA53329038533A72C29FC0533872C21 -:203660006BE22018A527290F69A0852AA900852BC23018A900E6652A852CA9AF00852EE2EA +:203660006BE22018A527290F69A0852AA900852BC23018A900E7652A852CA9AF00852EE2E9 :2036800020A72C853218A52C6910852CA72C290385336B6B6BE22018A527290F69B0852A8F -:2036A000A900852BC23018A900E6652A852CA9AF00852EE220A53129070A0A8531A72C29FF -:2036C000E30531872C60E22018A527290F69B0852AA900852BC23018A900E6652A852CA9FD +:2036A000A900852BC23018A900E7652A852CA9AF00852EE220A53129070A0A8531A72C29FE +:2036C000E30531872C60E22018A527290F69B0852AA900852BC23018A900E7652A852CA9FC :2036E000AF00852EE220A5322901F002A9208532A72C29DF0532872C60E22018A527290FB0 -:2037000069C0852AA900852BC23018A900E6652A852CA9AF00852EE220A53229070A8532CA -:20372000A72C29010532872C6B08E22018A527290F69C0852AA900852BC23018A900E665E2 +:2037000069C0852AA900852BC23018A900E7652A852CA9AF00852EE220A53229070A8532C9 +:20372000A72C29010532872C6B08E22018A527290F69C0852AA900852BC23018A900E765E1 :203740002A852CA9AF00852E28E220B008A72C29FE872C8006A72C0901872C6BC220A9BD2B -:20376000E6852CA9AF00852EE220B008A72C297F872C8006A72C0980872C6BC220A9BDE691 -:20378000852CA9AF00852EE220B008A72C29BF872C8006A72C0940872C6BC220A9BDE685D2 -:2037A0002CA9AF00852EE220B008A72C29DF872C8006A72C0920872C6BC220A9BDE6852C0B +:20376000E7852CA9AF00852EE220B008A72C297F872C8006A72C0980872C6BC220A9BDE78F +:20378000852CA9AF00852EE220B008A72C29BF872C8006A72C0940872C6BC220A9BDE785D1 +:2037A0002CA9AF00852EE220B008A72C29DF872C8006A72C0920872C6BC220A9BDE7852C0A :2037C000A9AF00852EE220A532291F853249FF8533A72C25330532872C6BC220A9E0008596 :2037E0002820F537E220A53229038532A72C29FC0532872C6BE230A527290FAAA526D006EB -:20380000BF1810388004BF211038852AA900852BC23018A900E6652A6528852CA9AF008592 +:20380000BF1810388004BF211038852AA900852BC23018A900E7652A6528852CA9AF008591 :023820002E6018 :20390000001B313233343536373839302D3D080971776572747975696F705B5D0D00617302 :20392000646667686A6B6C3B2760005C7A786376626E6D2C2E2F002A0020000000000000B4 @@ -577,26 +577,26 @@ :2058000008C908D0068D410120AA5BAD41012910C910D0068D410120AB5BAD41012920C918 :2058200020D0068D4101200D5BAD41012940C940D0068D410120AC5BE220AD4201F000C24A :20584000306BA20000AF6010AF8D880FC210A0460020B15DC901D00FAF150F38C902D007DD -:2058600022F468384CE959C91AD008C66A2001644CE959C91BD008E66A2001644CE959C9FE +:20586000224770384CE959C91AD008C66A20526B4CE959C91BD008E66A20526B4CE959C9F3 :205880000CD01FAF150F38290FD014AF180F38C901F00CF838E9018F180F38D820615E4C07 :2058A000E959C90DD01FAF150F38290FD014AF180F38C930F00CF81869018F180F38D82057 :2058C000615E4CE959C927D00BAF170F38C904F0F13A800DC928D016AF170F38C9F0F0E2BF -:2058E0001A8F170F3820C9602074634CE959C929D01CA900EBAF150F384829304A4AAA680F +:2058E0001A8F170F3820C96020C56A4CE959C929D01CA900EBAF150F384829304A4AAA68B7 :205900005FCD60388F150F3820D6604CE959C92AD003822C01C9AAD003823001C91DD003CD :20592000823401C99DD003823801C938D003823C01C9B8D003824001C948D01848AF150FFE :2059400038290FD00320EC5AC902D004226F6238684CE959C950D01848AF150F38290FD082 :205960000320A15AC902D00422566238684CE9592980C980D00AA900853220C63682000197 :20598000AD880FE210AAAD870F2910C910F026AD870F2920C920F024AD870F2940C940F08E -:2059A00035C210AD880F202267E210AE880FBF003938823400BF803938822D00BF003A3846 -:2059C000F027C902D00EAF150F38290FC902F00422EB67388013BF803A38F00D290F206C54 -:2059E00067C210206D61E21060C210A04A0020B15DC90DD01F48AF150F38F01BC902F0392D -:205A0000AF4C010009048F4C0100A9008F150F3820116B684C805AAD870FD006202C6320FB -:205A2000615EA9018F150F38202F6BAF4C010029FB8F4C0100684C805A6822BC68384C801C +:2059A00035C210AD880F20756EE210AE880FBF003938823400BF803938822D00BF003A38EC +:2059C000F027C902D00EAF150F38290FC902F004223E6F388013BF803A38F00D290F20BFA6 +:2059E0006EC210206D61E21060C210A04A0020B15DC90DD01F48AF150F38F01BC902F03926 +:205A0000AF4C010009048F4C0100A9008F150F38209372684C805AAD870FD006207D6A201A +:205A2000615EA9018F150F3820B172AF4C010029FB8F4C0100684C805A68220F70384C8038 :205A40005AAD870F09108D870F4C805AAD870F29EF8D870F4C805AAD870F09208D870F4CC8 :205A6000805AAD870F29DF8D870F4C805AAD870F09408D870F4C805AAD870F29BF8D870F95 :205A8000AF6410AF2901C901D0034C455860AF150F382901F045AF160F381ACF020017D0DC :205AA0003CA56C8903D00CAF80E8AF29FD09028F80E8AF18F8E66CAF190F386901C965D0BB -:205AC00007A901646C204D63D88F190F3820615EAF150F382901F003202F6BA9008F160F90 +:205AC00007A901646C209E6AD88F190F3820615EAF150F382901F00320B172A9008F160FAF :205AE00038AF80E8AF29FD8F80E8AF6038F8C66CAF190F38E901D006A93F856CA964D88FFE :205B0000190F3820615EA9008F160F386048C210AF3113AF85612980C980F00DAF3013AF1F :205B200020D95BA561C980D0E76860AF6010AF48A20000E210A6E0D00629078F000F3868CF @@ -605,7 +605,7 @@ :205B8000F026C22018AF0207AF4A4A4A851A8F1400AF18AF0407AF4A4A4A851C8F1600AF6B :205BA000E220A9038F1000AF60606060606B48E22064606466A9058F3011AFA93F8F3113DE :205BC000AFA04605AF3013AF20B15DC8C8AF3113AF2980C980D0ED6860C210481016482902 -:205BE0000F85636829704A4A4A8562C90ED01120C25C800C48E210A562AA68FCD967C21005 +:205BE0000F85636829704A4A4A8562C90ED01120C25C800C48E210A562AA68FC2C6FC210AA :205C00006860A66095648A1A8560C902D0716460A9008527C210A562A0420620B15DA56417 :205C20008F120100A0440620B15DA9008F1101008F130100A90C8F10010038AF140100E983 :205C4000028531A0480620B15DAF1601008530A04A0620B15DA565A04C0620B15DC900D014 @@ -641,7 +641,7 @@ :206000000F38970CC868290FF007AABF050F38970CC8BB7A605A489B29F04A4A4A4AAABF9B :20602000050F38970CC868290FAABF050F38970CC8BB7A60482907856F6829F8184A4A4A69 :206040008576F8F00918A9006908C676D0FA656F201560D8605A48489BC220290F00AAE250 -:2060600020BF076938970CC86829704A4A4A4A186930970CC8BB687A608BA9AF48ABA90964 +:2060600020BF5A7038970CC86829704A4A4A4A186930970CC8BB687A608BA9AF48ABA9090A :20608000856DA9429900C0C89900C0C89900C0C8A9529900C0C89900C0C8A9429900C0C877 :2060A0009900C0C89900C0C8C8C66DD0D5AB605AAF020017A0A80B20B15DAF030017F00790 :2060C000A92AA0A70B970C7A6060402020102040203020204020A900EBAF150F3829304A9C @@ -649,111 +649,171 @@ :206100000500A0B522970CC8CAD0FA68AABFCC6038A20900A0012D970CC8C8C8C8C8970C28 :20612000C8C8C8C8CAD0F0206D6160AF010017F03BC90E9002A90E856DA20000A0B503C2A7 :2061400020A924FC85F0A9390085F2E2208A20B15DC8C8C85A9BB7F01A7A20B15DE8C2204E -:206160009818697D00A8E220C66DD0E160A20900A04B2DBF626738F006A940970C8004A969 +:206160009818697D00A8E220C66DD0E160A20900A04B2DBFB56E38F006A940970C8004A90F :2061800020970C888888888888888888CAD0E4605AA41A970CC8841A7A6BC220A51A298046 :2061A000FF18699F00851AE2206B8B4808E220A90048AB2868BD0000F00722906138E88044 -:2061C000F4229A6138AB6B5AA00B00B751C910D023A9E022906138A00000B75122906138C0 +:2061C000F4229A6138AB605AA00B00B751C910D023A9E022906138A00000B75122906138CB :2061E000C8C00800D0F4A92022906138C8C01100D0F48033A92022906138A00000B7512249 :20620000906138C8C00800D0F4A92E22906138B75122906138C8C00B00D0F4A92022906159 :2062200038C8C01000D0F47A6B48C230A900C08517AD1F038D0001A980008D0201AD0401DE :2062400018699F05A8E220A9AF8519A21200689717C8CAD0FA6B18AD1F031AC926B00FA990 :206260005022296238EE1F03A905222962386B18AD1F033A30F8A95022296238CE1F03A91B -:2062800005222962386BA9FF8F4801008F4901008F4A0100A9FF8F4C01008F4D01008F4E38 -:2062A000010020DB5C20DD6520746620EA62202C63A9388569A9428F6A0000A20000A90011 -:2062C000EBDABF181038AA200164FAE8E00900D0ED22793038200B6322B130385820AE5BD6 -:2062E000202B6120615EEAEA80FC48A9E98F1200AFA9008F1000AFC230A900008F1400AFB5 -:20630000A900008F1600AFE2206860AF40010029848F400100AF41010029A18F410100A914 -:206320007B8F4C0100A95E8F4D010060A9008F150F388548646C6449A9018F190F38A6485D -:20634000BF24FC391A8F180F3820AF606048A900EBAF4800001ACF010017D002A9008F4868 -:206360000000AAA0800220B15DBF24FC391A8F180F3868608BA90048ABA9038D00019C013D -:20638000019C030138AF170F38E9048D0201C220AD0401AAE220A9008D61018D62018D63E2 -:2063A00001BF00003A8D6501BF01003A8D6601BF02003A8D6701A9018D6401A90B8D6001D4 -:2063C000AB608BA90048ABE220A9008D61018D62018D6301A9018D6401A90B8D6001AB60C7 -:2063E000A9808F04E6AF20FA63A9108F02E6AF8F03E6AFA9038F04E6AF60A23002CAD0FD2A -:2064000060AF6A00008F000100A9008F0101008F030100A9168F020100C220AF04010018A7 -:20642000693B108567E220AF6A0000A0930220B15DA767D04BE667D002E668208164E66756 -:20644000D002E66820F164E667D002E668202B65E667D002E668206765E667D002E668DAEA -:20646000A62720A365FAE667D002E66820BD65C220A5676906008567E220A09802203D5E3E -:2064800060A767484848489F20E6AF2980A08D0320EE5D682940A00D0420EE5D682920A098 -:2064A0008D0420EE5D682910A00D0520EE5D68290FA08E0520B15DA00600B767484848483D -:2064C0009F23E6AF2980A0A70320EE5D682940A0270420EE5D682920A0A70420EE5D682908 -:2064E00010A0270520EE5D68290FA0A80520B15D60A767489F40E6AF29C02A2A2AA00E06F5 -:2065000020B15D68293FA08E0620B15DA00600B767489F43E6AF29C02A2A2AA0280620B192 -:206520005D68293FA0A80620B15D60A767489F60E6AF29F04A4A4A4AA00E0720B15D6829B3 -:206540000FA08E0720B15DA00600B767489F63E6AF29F04A4A4A4AA0280720B15D68290F48 -:20656000A0A80720B15D60A767489F80E6AF29F04A4A4A4AA00E0820B15D68290FA08E0839 -:2065800020B15DA00600B767489F83E6AF29F04A4A4A4AA0280820B15D68290FA0A80820BB -:2065A000B15D60A767489FC0E6AF290E4AA0280A20B15D682901A0A80A20B15D60A7679F83 -:2065C000E0E6AF2907A00E0920B15DA00500B7679FE3E6AF2907A0280920B15D600B48DA9B -:2065E0000818E220A9008D870F208B66A9AA8F6410AF209666AF6010AFC955F003826F00AB -:20660000A9AB8F6410AF209666AF6010AFC900F003825B00A9608F6410AF208B66A9698F84 -:206620006010AF208B66A9FF8F6010AFA2FFFFCAEAEAEAEAEAEAEAEAE00000D0F22096665C -:20664000AF6010AF208B66A9F48F6010AF209666AF6010AFC9FAD0EC20A166AF4001002967 -:20666000808F400100AF41010029018F41010028FA682B60C230A28053A90001A0000554BF -:20668000AF38E220A9018F0007AF60AF6410AF2902C902F0F660AF6410AF2901C901D0F628 -:2066A00060208B66A9A88F6410AF208B66A9A98F6410AF209666AF6010AFC900D0EC208B37 -:2066C00066A9208F6410AF209666AF6010AF090248208B66A9608F6410AF208B66688F6068 -:2066E00010AFA9F6200767201A67A9E8200767201A67A900200767201A67A9F4200767202A -:206700001A67A90085E06048208B66A9D48F6410AF208B66688F6010AF60209666AF601040 -:20672000AF6048DAE210AA3035BF796738C210A0C60020B15D8F300000302329704A4A4A61 -:206740004A8F310000AF300000290F8F300000A9008F27000020F53722013238E220C2104D -:20676000FA6860010101010101010101AACABF63673849019F636738608080803133803634 -:20678000383A804180808080802C32343537393B3C4280808080808021238026282A80801A -:2067A00080808080801C22242527292B808080808080808080808080808080808080808057 -:2067C00080808080808080808080808080808080808080808080808080025C025C825C821D -:2067E0005CAB5CAB5C825CC25CDA5CC210A9028F150F3822C7023AA9008D1F03A934855363 -:2068000064526451201068203B68208168E2106BA900A00004975188D0FBA53FF01C22278B -:20682000033A2205063AC220A900668580A900008582858622AC063AE22060C230A900A058 -:20684000850CA900C08517E220A9AF850E8519A01E05A9288580A29F05861AA20000A91439 -:206860008581BF805438970CA9509717C8E8C681D0F0C2209818696C00A8E220C680D0DE41 -:206880006064516452A9348553A20000A00B00B751F02022C76138229A6138C220A55169FB -:2068A00012008551C98004B00AE8E02600F004E22080D9E220A9052229623860A900EBAD76 -:2068C0001F03C2308D0001A912008D0201AD04018551A900808580A937008582A01000B7C7 -:2068E00051225C073AE22022B130382214693822F468386B202C6320DB5C20595F20615E96 -:20690000202B6120AF606B4390449145469247934194424322B1303820116BA20000A90016 -:206920009F000039E8D0F9C230A900808508A93700850AE220A01000B708C910D005224F27 -:2069400069386B224869386BA9028F0000176BA9018F00001720A269200F6A20346AA01176 -:2069600000B7088940F017A9018F030017A90F8D6501A9018D6601A90C8D67018015A90004 -:206980008F030017A9988D6501A95E8D6601A9048D670120C2636B0701080209030A04059C -:2069A0000B06C8B708291F8F020017B7082980F007C8B708C900D0F9C8A93885F2E220B7FE -:2069C00008F04AC2203A8F000100A916008F020100AF04010018693B1085F0A90000E220D8 -:2069E000C8644E87F0A64EBF976938AAB7085A9B97F07AC8E64EA54EC90B90E95AA00C001A -:206A0000A92097F0C8C01600D0F87A80B0C860B7088F010017AAC8C220A924FC85F0A93914 -:206A20000085F2E220B708C887F0E6F0B002E6F1CAD0F26064F3A93985F6C220B708F01F30 -:206A40005AA8A5F329FF008F000100A901078F020100AF0401001A85F4E220206C6A7AC820 -:206A6000C8E220E6F3A5F3C920D0CF60B7088F420000C8C220297F008F000100A91C008F2D -:206A8000020100AF0401001A8FFA0000E220A6FAB708C88FF90000290F8FF70000C2208AC1 -:206AA0001865F765F765F7AAE220B7085A9B97F47AC8E8B7085A9B97F47AC8E8290FF009FB -:206AC000B7085A9B97F47AC8E8AFF9000010BFAF4200001097605ADAA21200A00000A92D80 -:206AE000970CC8CAD0FAFA7A605AA5F620B15DC8C8A5F520B15DC8C8A5F420B15D7A6048CF -:206B000048E2206820B15D88886820B15DC22068605AC220A900E6852CA9AF00852EE220BC -:206B2000A0A000A900972CC8C0B900D0F87A605A20D66AC220AF180F3829FF003A8F00012A -:206B400000A901078F020100AF0401001A85F4E220A93985F6A0000120E96AC220A56C291C -:206B60007F008F000100A91C008F020100AF0401001AA0820020FF6AA8A90000E220642857 -:206B80008F270000AABF636738D005C8C8C88058B7F4297F204F6DB7F429804A4A4A854E9B -:206BA000C8B7F429F04A4A4A4A654EF0143A8F6A00005AA627A900EBBF181038AA2001642E -:206BC0007AAF300000F011C90FF02BC2205A20F537220132387AE220A900EBB7F4C8290F98 -:206BE000F0050AAAFC076CC8A900EBAF2700001AC909D08C7A60AF2700001869B0852CA9C8 -:206C000000872CC8C880E1276C9A6C9A6C276C276C276C276C276C276C276C286C276C10F5 -:206C20006D7F6C276C906C605AB7F4854CC220A900E6852CA9AF00852EE230A527AABF18AB -:206C40001038186940A8B72C48293F18654CC9409002A93F293F854E6829C0054E972CC83A -:206C6000C8C8B72C48293F18654CC9409002A93F293F854E6829C0054E972CC2107A60B7A0 -:206C8000F43A856CA9008F190F38204D637A7A60B7F48F02001720AF60605A4A8550B7F413 -:206CA000854CC220A900E6852CA9AF00852EE230A5271869A0A8B72CC210BBA08A0020B1C4 -:206CC0005D9BE2104898186910A8B72C854EC210BBA0080120B15D2903A0880020B15D9B7A -:206CE000EB68AAA5508902F00AC2208A38E54CE2208008C2208A18654CE220E210EB29037E -:206D0000054E972C9838E910A8EB972CC2107A605AC220A900E6852CA9AF00852EE220B752 -:206D2000F4297FF0013A493F854EE210A627BF181038186940A8B72C29C018654E972CC8C8 -:206D4000C8C8B72C29C018654E972CC2107A605A4848AF2700000AA868F00320B15D297009 -:206D60004A4A4A4A8F31000068290F8F3000007A605AE220A9018526C220A93800850AA54A -:206D80003229FF003A0A0A0A0A18693B108508C220A9200022F53738E220A00000B70887C5 -:206DA0002CC220A9400022F53738E220A00200B708872CC220A9600022F53738E220A00429 -:206DC00000B708872CC220A9800022F53738E220A00600B708872CC220A9E00022F53738A5 -:206DE000E220A00900B708290F872CA9008526C220A9200022F53738E220A00100B70887D0 -:206E00002CC220A9400022F53738E220A00300B708872CC220A9600022F53738E220A005C6 -:206E200000B708872CC220A9800022F53738E220A07100B708872CC220A9E00022F53738D9 -:206E4000E220A00900B70829F04A4A4A4A872CA52718290F69C0852AA900852BC23018A9D4 -:166E600000E6652A852CA9AF00852EE220A00800B708872C7A60F5 +:2062800005222962386BAF80E8AF29FD09028F80E8AFC220A900008D085F8D225FE22085F8 +:2062A0003FA9018F02EAAFA9018F03EAAFAF04EAAF2901C901F0F6AF05EAAFF008A29568EC +:2062C00020AA618006A901853F8000AF80E8AF29FD8F80E8AF6BA58A0A858B18A5880A8505 +:2062E000899002E68BE2206488C22060A53FD0016BC220A900608580A900008582A9000079 +:206300008F07EAAF8F09EAAFE22022D66338AF05EAAFF0016BC220ADFE61C955AAF0016BCD +:20632000C220A2BE01BD08608588BD0A60858A20D662A5888D005F8F07EAAFA58A8D025FF5 +:206340008F09EAAFA900628580A900008582E22022D66338AF05EAAFF0016BC220A200008A +:20636000BD0B628D145FE220BD0D628D245FA9008D255FC220BD106229FF008D165FBD11F2 +:20638000628D1C5FBD1362F0288D185FA900008D1A5FAD185F8D1201AD245F8D1001AD1443 +:2063A00001C9F70FB017E220A9008D265FC2208015BD20628D185FBD22628D1A5FE220A9DD +:2063C000018D265FC220BD0E628D105FBD16628D125F20C5676B5AAF80E8AF29FD09028FD5 +:2063E00080E8AFA53FD002802DA9028F02EAAFA9018F03EAAFAF04EAAF2901C901F0F6AFA4 +:2064000005EAAFF002800FA00000AF10EAAF9780C8C00002D0F4A9018F14EAAFAF80E8AF54 +:2064200029FD8F80E8AF7A6B48A00000B78022181000C8C00800F007C00B00D0EF800E683B +:20644000488918D0E7A92E2218100080DF688918D03BA9388B48ABA2C469221C1000ABA041 +:206460001B00B78022801000A01A00B78022801000A9388B48ABA2CF69221C1000ABA01F84 +:2064800000B7802280100088C01B00D0F4A90D2218100060A53FD0016BC220A900008D2034 +:2064A0005FA900648580A900008582AD205F0AEB8D2001A900008D2201AD085F8D2401AD20 +:2064C0000A5F8D2601AD28018F07EAAFAD2A018F09EAAFE22022D66338AF05EAAFF008A215 +:2064E000356920AA61806AA780D0045C516538C9E5F035A00B00B780C90FD0045C7C6538CE +:206500008902F00280228908F0045C6765388910F0045C52653848A9388B48ABA2B6692215 +:206520001C1000AB68202864C220A58029E001C9E001D00FAD205F1ACD1C5FB0148D205F78 +:206540004CA164A580186920008580E2205CE764386B48A9388B48ABA2A869221C1000AB80 +:20656000682028644C286548A9388B48ABA28C69221C1000AB682028644C28654C2865A091 +:206580000B00C910F002A9019751A00000A20B00B7809751C8CAD0F8C220A01A00B780A05A +:2065A00010009751A01C00B780A00C009751A01E00B780A00E009751A55118691200855172 +:2065C000E22060A53FD0016BC220A900008D205FA900648580A900008582AD205F0AEB8D32 +:2065E0002001A900008D2201AD085F8D2401AD0A5F8D2601AD28018F07EAAFAD2A018F091C +:20660000EAAFE22022D66338AF05EAAFF0045C6E6638A780D0045C6E6638C9E5F027A00BD0 +:2066200000B780C90FD0045C4566388902F00280148908F0045C4566388910F005207F65D1 +:206640008003207F65C220A58029E001C9E001D00FAD205F1ACD1C5FB0148D205F4CD0653A +:20666000A580186920008580E2205C1266386B48A53F29FF00D002686B688588A90000853A +:206680008A20D662A5888D2001A58A8D2201AD045F8D2401AD065F8D2601AD28018F07EA80 +:2066A000AFAD2A018F09EAAFE22022D66338AF05EAAFF008A2166920AA618000C2206B48E7 +:2066C000A53F29FF00D002686B6838E902008D0001AD245F8D0201AD040148A20000858887 +:2066E000A90000858A20D662A5888D2001A58A8D2201AD0C5F8D2401AD0E5F8D2601AD2863 +:20670000018F07EAAFAD2A018F09EAAFE22022D66338AF05EAAFF00AA9FF8D275F8D285F95 +:206720008017C220A5801869000285809002E682681A48E8EC245FD0A5C220686B48A53FC2 +:2067400029FF00D002686B688D275F22BF6638AD265F2901000AAAFC5D67D0EF6B6167862A +:2067600067AD275F4A900E186D275FA8B900664A4A4A4A800A6D275FA8B9006629FF0F8D95 +:20678000275FC9FF0F60AD275FEB29FF00C586F02248A5808583A5828585A900668580A936 +:2067A00000008582688586226F6638A5838580A5858582AD275F29FF000AA8B900668D27F2 +:2067C0005FC9FFFF60AD105F8588A90000858A20D662A5888D2001A58A8D2201AD005F8DA7 +:2067E0002401AD025F8D2601AD28018D045FAD2A018D065FAD165F8D0001AD125F8D0201C4 +:20680000AD04018588AD0601858A20D662A5888D2001A58A8D2201AD045F8D2401AD065F10 +:206820008D2601AD28018D085FAD2A018D0A5FAD085F8D2001AD0A5F8D2201A920008588AE +:20684000A90000858A20D662A5888D2401A58A8D2601AD28018D0C5FAD2A018D0E5F603036 +:2068600030202D2057656C636F6D6520746F20746865205344436172642054657374657283 +:206880000D003031202D20436172642050726573656E740D003031202D204E4F2053444330 +:2068A0004152442050524553454E540D003032202D2043616E27742072656164204D42527A +:2068C000202D204E6F20436172642070726573656E740D003033202D204572726F72206468 +:2068E0007572696E672072656164206F7065726174696F6E0D003034202D204572726F72DE +:206900002072656164696E6720426F6F7420736563746F720D003035202D204572726F7230 +:206920002072656164696E672046415420736563746F720D003035202D204572726F7220A9 +:2069400072656164696E6720526F6F7420736563746F720D003035202D204572726F7220E0 +:2069600072656164696E67204461746120736563746F720D00496E76616C6964204D42521E +:20698000205369676E61747572650D00566F6C756D65204E616D653A200056464154204E06 +:2069A000616D6520203A20004469726563746F727920203A200046696C656E616D6520205A +:2069C000203A20002C20436C75737465723A002C2053697A653A00A9FF8F4801008F49015B +:2069E000008F4A0100A9FF8F4C01008F4D01008F4E010020DB5C20306D20C76D203B6A2031 +:206A00007D6AA9388569A9428F6A0000A20000A900EBDABF181038AA20526BFAE8E009005B +:206A2000D0ED22793038205C6A22B130385820AE5B202B6120615EEAEA80FC48A9E98F129E +:206A400000AFA9008F1000AFC230A900008F1400AFA900008F1600AFE2206860AF400100EC +:206A600029848F400100AF41010029A18F410100A97B8F4C0100A95E8F4D010060A9008F91 +:206A8000150F388548646C6449A9018F190F38A648BF24FC391A8F180F3820AF606048A929 +:206AA00000EBAF4800001ACF010017D002A9008F480000AAA0800220B15DBF24FC391A8FE6 +:206AC000180F3868608BA90048ABA9038D00019C01019C030138AF170F38E9048D0201C26C +:206AE00020AD0401AAE220A9008D61018D62018D6301BF00003A8D6501BF01003A8D6601C5 +:206B0000BF02003A8D6701A9018D6401A90B8D6001AB608BA90048ABE220A9008D61018DEE +:206B200062018D6301A9018D6401A90B8D6001AB60A9808F04E6AF204B6BA9108F02E6AFB2 +:206B40008F03E6AFA9038F04E6AF60A23002CAD0FD60AF6A00008F000100A9008F0101002C +:206B60008F030100A9168F020100C220AF04010018693B108567E220AF6A0000A093022073 +:206B8000B15DA767D04BE667D002E66820D26BE667D002E66820426CE667D002E668207CB0 +:206BA0006CE667D002E66820B86CE667D002E668DAA62720F46CFAE667D002E66820106D20 +:206BC000C220A5676906008567E220A09802203D5E60A767484848489F20E7AF2980A08DBC +:206BE0000320EE5D682940A00D0420EE5D682920A08D0420EE5D682910A00D0520EE5D68C7 +:206C0000290FA08E0520B15DA00600B767484848489F23E7AF2980A0A70320EE5D68294070 +:206C2000A0270420EE5D682920A0A70420EE5D682910A0270520EE5D68290FA0A80520B121 +:206C40005D60A767489F40E7AF29C02A2A2AA00E0620B15D68293FA08E0620B15DA006008B +:206C6000B767489F43E7AF29C02A2A2AA0280620B15D68293FA0A80620B15D60A767489F32 +:206C800060E7AF29F04A4A4A4AA00E0720B15D68290FA08E0720B15DA00600B767489F63C9 +:206CA000E7AF29F04A4A4A4AA0280720B15D68290FA0A80720B15D60A767489F80E7AF294F +:206CC000F04A4A4A4AA00E0820B15D68290FA08E0820B15DA00600B767489F83E7AF29F0D7 +:206CE0004A4A4A4AA0280820B15D68290FA0A80820B15D60A7674809F09FC0E7AF290E4A2B +:206D0000A0280A20B15D682901A0A80A20B15D60A7679FE0E7AF2907A00E0920B15DA00524 +:206D200000B7679FE3E7AF2907A0280920B15D600B48DA0818E220A9008D870F20DE6DA95F +:206D4000AA8F6410AF20E96DAF6010AFC955F003826F00A9AB8F6410AF20E96DAF6010AF47 +:206D6000C900F003825B00A9608F6410AF20DE6DA9698F6010AF20DE6DA9FF8F6010AFA231 +:206D8000FFFFCAEAEAEAEAEAEAEAEAE00000D0F220E96DAF6010AF20DE6DA9F48F6010AF3F +:206DA00020E96DAF6010AFC9FAD0EC20F46DAF40010029808F400100AF41010029018F413B +:206DC000010028FA682B60C230A28053A90001A0000554AF38E220A9018F0007AF60AF6448 +:206DE00010AF2902C902F0F660AF6410AF2901C901D0F66020DE6DA9A88F6410AF20DE6DD3 +:206E0000A9A98F6410AF20E96DAF6010AFC900D0EC20DE6DA9208F6410AF20E96DAF60102A +:206E2000AF09024820DE6DA9608F6410AF20DE6D688F6010AFA9F6205A6E206D6EA9E82076 +:206E40005A6E206D6EA900205A6E206D6EA9F4205A6E206D6EA90085E0604820DE6DA9D4C5 +:206E60008F6410AF20DE6D688F6010AF6020E96DAF6010AF6048DAE210AA3035BFCC6E3887 +:206E8000C210A0C60020B15D8F300000302329704A4A4A4A8F310000AF300000290F8F3023 +:206EA0000000A9008F27000020F53722013238E220C210FA6860010101010101010101AA51 +:206EC000CABFB66E3849019FB66E386080808031338036383A804180808080802C32343514 +:206EE00037393B3C4280808080808021238026282A808080808080801C22242527292B802B +:206F0000808080808080808080808080808080808080808080808080808080808080808071 +:206F2000808080808080808080808080025C025C825C825CAB5CAB5C825CC25CDA5CC210C7 +:206F4000A9028F150F3822866238A9008D1F03A93485536452645120636F208E6F20D46F6F +:206F6000E2106BA900A00004975188D0FBA53FF01C22EC623822C36538C220A9006685801C +:206F8000A9000085828586226F6638E22060C230A900A0850CA900C08517E220A9AF850EE7 +:206FA0008519A01E05A9288580A29F05861AA20000A9148581BF805438970CA9509717C872 +:206FC000E8C681D0F0C2209818696C00A8E220C680D0DE6064516452A9348553A20000A0FB +:206FE0000B00B751F02022C76138229A6138C220A5516912008551C98004B00AE8E0260079 +:20700000F004E22080D9E220A9052229623860A900EBAD1F03C2308D0001A912008D0201FE +:20702000AD04018551A900808580A937008582A01000B751223D6738E22022B13038226737 +:207040007038224770386B207D6A20DB5C20595F20615E202B6120AF606B4390449145467E +:207060009247934194424322B13038209372A20000A9009F000039E8D0F9C230A900808576 +:2070800008A93700850AE220A01000B708C910D00522F370386BC921D004229F70386BA9F7 +:2070A000028F00001720AC70207E716BA01100B7088940F017A9018F030017A90F8D650134 +:2070C000A9018D6601A90C8D670180238920F00AC8C220B708E220C88015A9008F03001708 +:2070E000A9988D6501A95E8D6601A9048D670120136B60A9018F000017201171209171208D +:20710000B67120AC706B0701080209030A04050B06C8B708291F8F020017B7082980F00789 +:20712000C8B708C900D0F9C8A93885F2E220B708F04AC2203A8F000100A916008F0201001E +:20714000AF04010018693B1085F0A90000E220C8644E87F0A64EBF067138AAB7085A9B9747 +:20716000F07AC8E64EA54EC90B90E95AA00C00A92097F0C8C01600D0F87A80B0C860B7081C +:20718000C8C900D0F9A93885F2E220B708F000C860B7088F010017AAC8C220A924FC85F06C +:2071A000A9390085F2E220B708C887F0E6F0B002E6F1CAD0F26064F3A93985F6C220B708D6 +:2071C000F01F5AA8A5F329FF008F000100A901078F020100AF0401001A85F4E22020EE7143 +:2071E0007AC8C8E220E6F3A5F3C920D0CF60B7088F420000C8C220297F008F000100A91CF3 +:20720000008F020100AF0401001A8FFA0000E220A6FAB708C88FF90000290F8FF70000C254 +:20722000208A1865F765F765F7AAE220B7085A9B97F47AC8E8B7085A9B97F47AC8E8290FC2 +:20724000F009B7085A9B97F47AC8E8AFF9000010BFAF4200001097605ADAA21200A00000D5 +:20726000A92D970CC8CAD0FAFA7A605AA5F620B15DC8C8A5F520B15DC8C8A5F420B15D7A19 +:20728000604848E2206820B15D88886820B15DC22068605AC220A900E7852CA9AF00852E8E +:2072A000E220A0A000A900972CC8C0B900D0F87A605A205872C220AF180F3829FF003A8F18 +:2072C000000100A901078F020100AF0401001A85F4E220A93985F6A00001206B72C220A59F +:2072E0006C297F008F000100A91C008F020100AF0401001AA08200208172A8A90000E2203D +:2073000064288F270000AABFB66E38D005C8C8C88058B7F4297F20D174B7F429804A4A4A77 +:20732000854EC8B7F429F04A4A4A4A654EF0143A8F6A00005AA627A900EBBF181038AA2038 +:20734000526B7AAF300000F011C90FF02BC2205A20F537220132387AE220A900EBB7F4C88B +:20736000290FF0050AAAFC8973C8A900EBAF2700001AC909D08C7A60AF2700001869B08554 +:207380002CA900872CC8C880E1A9731C741C74A973A973A973A973A973A973A973AA73A9AE +:2073A0007392740174A9731274605AB7F4854CC220A900E7852CA9AF00852EE230A527AA51 +:2073C000BF181038186940A8B72C48293F18654CC9409002A93F293F854E6829C0054E97D0 +:2073E0002CC8C8C8B72C48293F18654CC9409002A93F293F854E6829C0054E972CC2107A3C +:2074000060B7F43A856CA9008F190F38209E6A7A7A60B7F48F02001720AF60605A4A8550C7 +:20742000B7F4854CC220A900E7852CA9AF00852EE230A5271869A0A8B72CC210BBA08A0061 +:2074400020B15D9BE2104898186910A8B72C854EC210BBA0080120B15D2903A0880020B119 +:207460005D9BEB68AAA5508902F00AC2208A38E54CE2208008C2208A18654CE220E210EB2A +:207480002903054E972C9838E910A8EB972CC2107A605AC220A900E7852CA9AF00852EE275 +:2074A00020B7F4297FF0013A493F854EE210A627BF181038186940A8B72C29C018654E975E +:2074C0002CC8C8C8B72C29C018654E972CC2107A605A4848AF2700000AA868F00320B15D27 +:2074E00029704A4A4A4A8F31000068290F8F3000007A605AE220A9018526C220A9380085D9 +:207500000AA53229FF003A0A0A0A0A18693B108508C220A9200022F53738E220A00000B71D +:2075200008872CC220A9400022F53738E220A00200B708872CC220A9600022F53738E220B6 +:20754000A00400B708872CC220A9800022F53738E220A00600B708872CC220A9E00022F5E8 +:207560003738E220A00900B708290F872CA9008526C220A9200022F53738E220A00100B768 +:2075800008872CC220A9400022F53738E220A00300B708872CC220A9600022F53738E22055 +:2075A000A00500B708872CC220A9800022F53738E220A07100B708872CC220A9E00022F51C +:2075C0003738E220A00900B70829F04A4A4A4A872CA52718290F69C0852AA900852BC2309F +:1875E00018A900E7652A852CA9AF00852EE220A00800B708872C7A60AA :020000040017E3 :0400000000000600F6 :020000040039C1 @@ -2801,62 +2861,5 @@ :200260000338F50359F00385EB03BEE60302E20352DD03ADD80313D40384CF0300CB0386B0 :20028000C60317C203B3BD0358B90308B503C2B00385AC0352A80329A40309A003F29B03C0 :2002A000E59703E19303E58F03F38B030988032784034F80037E7C03B67803F674033E71F2 -:2002C000038E6D03E66903AF80E8AF29FD09028F80E8AFC220A900008D085F8D225FE2209F -:2002E000853FA9018F02EAAFA9018F03EAAFAF04EAAF2901C901F0F6AF05EAAFF0028006A6 -:20030000A901853F8000AF80E8AF29FD8F80E8AF6BA58A0A858B18A5880A85899002E68B49 -:20032000E2206488C22060A53FD0016BC220A900608580A900008582A900008F07EAAF8F66 -:2003400009EAAFE2202211043AAF05EAAFF0016BC220ADFE61C955AAF0016BC220A2BE018A -:20036000BD08608588BD0A60858A201103A5888D005F8F07EAAFA58A8D025F8F09EAAFA9A2 -:2003800000628580A900008582E2202211043AAF05EAAFF0016BC220A20000BD0B628D14DB -:2003A0005FE220BD0D628D245FA9008D255FC220BD106229FF008D165FBD11628D1C5FBDB6 -:2003C0001362F0288D185FA900008D1A5FAD185F8D1201AD245F8D1001AD1401C9F70FB00A -:2003E00017E220A9008D265FC2208015BD20628D185FBD22628D1A5FE220A9018D265FC2A8 -:2004000020BD0E628D105FBD16628D125F20DB076B5AAF80E8AF29FD09028F80E8AFA53F18 -:20042000D002802DA9028F02EAAFA9018F03EAAFAF04EAAF2901C901F0F6AF05EAAFF0022E -:20044000800FA00000AF10EAAF9780C8C00002D0F4A9018F14EAAFAF80E8AF29FD8F80E8E7 -:20046000AF7A6B48A00000B78022181000C8C00800F007C00B00D0EF800E68488918D0E7D8 -:20048000A92E2218100080DF688918D03BA93A8B48ABA2DA09221C1000ABA01B00B78022D5 -:2004A000801000A01A00B78022801000A93A8B48ABA2E509221C1000ABA01F00B780228087 -:2004C000100088C01B00D0F4A90D2218100060C220A900008D205FA900648580A9000085AE -:2004E00082AD205F0AEB8D2001A900008D2201AD085F8D2401AD0A5F8D2601AD28018F0756 -:20050000EAAFAD2A018F09EAAFE2202211043AAF05EAAFF014E220DAA93A8B48ABA24B0942 -:20052000221C1000ABFA826A00A780D0045C93053AC9E5F035A00B00B780C90FD0045CBE38 -:20054000053A8902F00280228908F0045CA9053A8910F0045C94053A48A93A8B48ABA2CCA1 -:2005600009221C1000AB68206304C220A58029E001C9E001D00FAD205F1ACD1C5FB0148D11 -:20058000205F4CD704A580186920008580E2205C29053A6B48A93A8B48ABA2BE09221C1059 -:2005A00000AB682063044C6A0548A93A8B48ABA2A209221C1000AB682063044C6A054C6A97 -:2005C00005A00B00C910F002A9019751A00000A20B00B7809751C8CAD0F8C220A01A00B7F5 -:2005E00080A010009751A01C00B780A00C009751A01E00B780A00E009751A5511869120048 -:200600008551E22060C220A900008D205FA900648580A900008582AD205F0AEB8D2001A9D1 -:2006200000008D2201AD085F8D2401AD0A5F8D2601AD28018F07EAAFAD2A018F09EAAFE28A -:20064000202211043AAF05EAAFF0045CAB063AA780D0045CAB063AC9E5F027A00B00B78098 -:20066000C90FD0045C82063A8902F00280148908F0045C82063A8910F00520C105800320E5 -:20068000C105C220A58029E001C9E001D00FAD205F1ACD1C5FB0148D205F4C0D06A5801800 -:2006A0006920008580E2205C4F063A6B8588A90000858A201103A5888D2001A58A8D2201A1 -:2006C000AD045F8D2401AD065F8D2601AD28018F07EAAFAD2A018F09EAAFE2202211043A11 -:2006E000AF05EAAFF000C2206B38E902008D0001AD245F8D0201AD040148A200008588A9AD -:200700000000858A201103A5888D2001A58A8D2201AD0C5F8D2401AD0E5F8D2601AD28016E -:200720008F07EAAFAD2A018F09EAAFE2202211043AAF05EAAFF00AA9FF8D275F8D285F8078 -:2007400017C220A5801869000285809002E682681A48E8EC245FD0A5C220686B8D275F2279 -:20076000E9063AAD265F2901000AAAFC7707AD275FC9FFFFD0E96B7B079F07A5808583A5AE -:20078000828585A900668580A900008582AD275FEB29FF0022AC063AA9FF0F8D275F60ADDE -:2007A000275FEB29FF00C586F02248A5808583A5828585A900668580A90000858268858666 -:2007C00022AC063AA5838580A5858582AD275F29FF000AA8B900668D275F60AD105F8588E5 -:2007E000A90000858A201103A5888D2001A58A8D2201AD005F8D2401AD025F8D2601AD28FE -:20080000018D045FAD2A018D065FAD165F8D0001AD125F8D0201AD04018588AD0601858A3D -:20082000201103A5888D2001A58A8D2201AD045F8D2401AD065F8D2601AD28018D085FADCB -:200840002A018D0A5FAD085F8D2001AD0A5F8D2201A920008588A90000858A201103A58800 -:200860008D2401A58A8D2601AD28018D0C5FAD2A018D0E5F603030202D2057656C636F6DAF -:200880006520746F2074686520534443617264205465737465720D003031202D20436172D6 -:2008A000642050726573656E740D003031202D204E4F205344434152442050524553454E9D -:2008C000540D003032202D2043616E27742072656164204D4252202D204E6F2043617264BA -:2008E0002070726573656E740D003033202D204572726F7220647572696E6720726561648B -:20090000206F7065726174696F6E0D003034202D204572726F722072656164696E672042A2 -:200920006F6F7420736563746F720D003035202D204572726F722072656164696E6720466C -:20094000415420736563746F720D003035202D204572726F722072656164696E6720526F8E -:200960006F7420736563746F720D003035202D204572726F722072656164696E672044613C -:20098000746120736563746F720D00496E76616C6964204D4252205369676E61747572652B -:2009A0000D00566F6C756D65204E616D653A200056464154204E616D6520203A200044699E -:2009C000726563746F727920203A200046696C656E616D652020203A20002C20436C7573B7 -:0D09E0007465723A002C2053697A653A0064 +:0702C000038E6D03E66903E4 :00000001FF diff --git a/tracker.lst b/tracker.lst index 6a1a91c..523c59c 100644 --- a/tracker.lst +++ b/tracker.lst @@ -1,7 +1,7 @@ ; 64tass Turbo Assembler Macro V1.54.1900 listing file ; 64tass.exe --long-address -x --intel-hex -o tracker.hex --list tracker.lst tracker.asm -; Sat Apr 11 21:24:43 2020 +; Wed Apr 22 22:04:40 2020 ;Offset ;Hex ;Monitor ;Source @@ -786,7 +786,7 @@ .38ff00 18 clc CLC .38ff01 fb xce XCE ; go into native mode .38ff02 78 sei SEI ; ignore interrupts -.38ff03 5c 86 62 38 jmp $386286 JML TRACKER +.38ff03 5c d7 69 38 jmp $3869d7 JML TRACKER .38ff60 RHIRQ .38ff60 c2 30 rep #$30 REP #$30 ; set A&X long .38ff62 8b phb PHB @@ -801,14 +801,14 @@ .38ff6e 2b pld PLD .38ff6f ab plb PLB .38ff70 40 rti RTI -.38ffe0 5c 86 62 38 jmp $386286 JUMP_READY JML TRACKER ; Kernel READY routine. Rewrite this address to jump to a custom kernel. +.38ffe0 5c d7 69 38 jmp $3869d7 JUMP_READY JML TRACKER ; Kernel READY routine. Rewrite this address to jump to a custom kernel. >38ffe4 10 ff RVECTOR_COP .addr HCOP ; FFE4 >38ffe6 20 ff RVECTOR_BRK .addr HBRK ; FFE6 >38ffe8 30 ff RVECTOR_ABORT .addr HABORT ; FFE8 >38ffea 40 ff RVECTOR_NMI .addr HNMI ; FFEA >38ffec 00 00 .word $0000 ; FFEC >38ffee 60 ff RVECTOR_IRQ .addr HIRQ ; FFEE -.38fff0 5c 86 62 38 jmp $386286 RRETURN JML TRACKER +.38fff0 5c d7 69 38 jmp $3869d7 RRETURN JML TRACKER >38fff4 10 ff RVECTOR_ECOP .addr HCOP ; FFF4 >38fff6 20 ff RVECTOR_EBRK .addr HBRK ; FFF6 >38fff8 30 ff RVECTOR_EABORT .addr HABORT ; FFF8 @@ -821,41 +821,22 @@ ;****** Processing file: OPL3_def.asm -=$afe600 OPL3_R_BASE = $AFE600 -=$e600 OPL3_R_BASE_LL = $E600 -=$00af OPL3_R_BASE_HL = $00AF -=$afe601 OPL3_R_TEST = $AFE601 ; TEST -=$afe602 OPL3_R_TIMER1 = $AFE602 ; TIMER-1 -=$afe603 OPL3_R_TIMER2 = $AFE603 ; TIMER-2 -=$afe604 OPL3_R_IRQ = $AFE604 ; -=$afe605 OPL3_R_OPL3_MODE = $AFE605 ; Set bit 0 to 1 if you want to use in OPL3 Mode -=$afe608 OPL3_R_CSM = $AFE608 ; -=$afe620 OPL3_R_AM_VID_EG_KSR_MULT = $AFE620 ; $40..$35 (21 Registers) -=$afe640 OPL3_R_KSL_TL = $AFE640; $40..$55 (21 Registers) -=$afe660 OPL3_R_AR_DR = $AFE660; $60..$75 (21 Registers) -=$afe680 OPL3_R_SL_RR = $AFE680; $80..$95 (21 Registers) -=$afe6a0 OPL3_R_FNumber = $AFE6A0; $A0..$A8 -=$afe6b0 OPL3_R_KON_BLOCK_FNumber = $AFE6B0; $B0..$B9 -=$afe6bd OPL3_R_DPTH_RHYTM = $AFE6BD; $BD -=$afe6c0 OPL3_R_FEEDBACK = $AFE6C0; $C0..$C9 -=$afe6e0 OPL3_R_WAVE_SELECT = $AFE6E0; $E0..$F5 -=$afe700 OPL3_L_BASE = $AFE700 -=$e700 OPL3_L_BASE_LL = $E700 -=$00af OPL3_L_BASE_HL = $00AF -=$afe701 OPL3_L_TEST = $AFE701 ; TEST -=$afe702 OPL3_L_TIMER1 = $AFE702 ; TIMER-1 -=$afe703 OPL3_L_TIMER2 = $AFE703 ; TIMER-2 -=$afe704 OPL3_L_IRQ = $AFE704 ; -=$afe708 OPL3_L_CSM = $AFE708 ; -=$afe720 OPL3_L_AM_VID_EG_KSR_MULT = $AFE720 ; $40..$35 (21 Registers) -=$afe740 OPL3_L_KSL_TL = $AFE740; $40..$55 (21 Registers) -=$afe760 OPL3_L_AR_DR = $AFE760; $60..$75 (21 Registers) -=$afe780 OPL3_L_SL_RR = $AFE780; $80..$95 (21 Registers) -=$afe7a0 OPL3_L_FNumber = $AFE7A0; $A0..$A8 -=$afe7b0 OPL3_L_KON_BLOCK_FNumber = $AFE7B0; $B0..$B9 -=$afe7bd OPL3_L_DPTH_RHYTM = $AFE7BD; $BD -=$afe7c0 OPL3_L_FEEDBACK = $AFE7C0; $C0..$C9 -=$afe7e0 OPL3_L_WAVE_SELECT = $AFE7E0; $E0..$F5 +=$afe700 OPL3_R_BASE = $AFE700 +=$afe701 OPL3_R_TEST = $AFE701 ; TEST +=$afe704 OPL3_R_CONN_SEL = $AFE704 ; six bits for 4 op channels +=$afe705 OPL3_R_OPL3_MODE = $AFE705 ; Set bit 0 to 1 if you want to use in OPL3 Mode +=$afe720 OPL3_R_AM_VID_EG_KSR_MULT = $AFE720 ; $40..$35 (21 Registers) +=$afe740 OPL3_R_KSL_TL = $AFE740; $40..$55 (21 Registers) +=$afe760 OPL3_R_AR_DR = $AFE760; $60..$75 (21 Registers) +=$afe780 OPL3_R_SL_RR = $AFE780; $80..$95 (21 Registers) +=$afe7a0 OPL3_R_FNumber = $AFE7A0; $A0..$A8 +=$afe7b0 OPL3_R_KON_BLOCK_FNumber = $AFE7B0; $B0..$B9 +=$afe7bd OPL3_R_DPTH_RHYTM = $AFE7BD; $BD +=$afe7c0 OPL3_R_FEEDBACK = $AFE7C0; $C0..$C9 +=$afe7e0 OPL3_R_WAVE_SELECT = $AFE7E0; $E0..$F5 +=$afe602 OPL3_L_TIMER1 = $AFE602 ; TIMER-1 +=$afe603 OPL3_L_TIMER2 = $AFE603 ; TIMER-2 +=$afe604 OPL3_L_IRQ = $AFE604 ; =$80 TREMOLO = $80 =$40 VIBRATO = $40 =$20 SUSTAINING = $20 @@ -2016,7 +1997,7 @@ .3830c8 85 f2 sta $f2 STA RAD_ADDR + 2 .3830ca e2 20 sep #$20 SEP #$20 ; set A short .3830cc a9 01 lda #$01 LDA #1 -.3830ce 8f 05 e6 af sta $afe605 STA OPL3_R_OPL3_MODE +.3830ce 8f 05 e7 af sta $afe705 STA OPL3_R_OPL3_MODE .3830d2 6b rtl RTL .3830d3 OPL2_Reset .3830d3 6b rtl RTL @@ -2025,7 +2006,7 @@ .3830d5 OPL2_GET_REGISTER .3830d5 c2 20 rep #$20 REP #$20 ; set A long .3830d7 18 clc CLC -.3830d8 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3830d8 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .3830db 65 32 adc $32 ADC OPL2_PARAMETER0 .3830dd 85 2c sta $2c STA OPL2_IND_ADDY_LL .3830df a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2035,7 +2016,7 @@ .3830e8 6b rtl RTL .3830e9 OPL2_GET_WAVEFORM_SELECT .3830e9 c2 20 rep #$20 REP #$20 ; set A long -.3830eb a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3830eb a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .3830ee 69 01 00 adc #$0001 ADC #$0001 .3830f1 85 2c sta $2c STA OPL2_IND_ADDY_LL .3830f3 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2070,7 +2051,7 @@ .383123 85 2b sta $2b STA OPL2_REG_OFFSET+1; .383125 c2 30 rep #$30 REP #$30 ; set A&X long .383127 18 clc CLC -.383128 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.383128 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .38312b 65 2a adc $2a ADC OPL2_REG_OFFSET .38312d 85 2c sta $2c STA OPL2_IND_ADDY_LL .38312f a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2092,7 +2073,7 @@ .38314a 85 2b sta $2b STA OPL2_REG_OFFSET+1; .38314c c2 30 rep #$30 REP #$30 ; set A&X long .38314e 18 clc CLC -.38314f a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.38314f a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .383152 65 2a adc $2a ADC OPL2_REG_OFFSET .383154 85 2c sta $2c STA OPL2_IND_ADDY_LL .383156 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2112,7 +2093,7 @@ .38316f 85 2b sta $2b STA OPL2_REG_OFFSET+1; .383171 c2 30 rep #$30 REP #$30 ; set A&X long .383173 18 clc CLC -.383174 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.383174 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .383177 65 2a adc $2a ADC OPL2_REG_OFFSET .383179 85 2c sta $2c STA OPL2_IND_ADDY_LL .38317b a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2133,7 +2114,7 @@ .383195 85 2b sta $2b STA OPL2_REG_OFFSET+1; .383197 c2 30 rep #$30 REP #$30 ; set A&X long .383199 18 clc CLC -.38319a a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.38319a a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .38319d 65 2a adc $2a ADC OPL2_REG_OFFSET .38319f 85 2c sta $2c STA OPL2_IND_ADDY_LL .3831a1 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2153,7 +2134,7 @@ .3831bd 6b rtl RTL .3831be OPL2_GET_DEEPVIBRATO .3831be c2 20 rep #$20 REP #$20 ; set A long -.3831c0 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3831c0 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .3831c3 69 bd 00 adc #$00bd ADC #$00BD .3831c6 85 2c sta $2c STA OPL2_IND_ADDY_LL .3831c8 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2164,7 +2145,7 @@ .3831d3 6b rtl RTL .3831d4 OPL2_GET_PERCUSSION .3831d4 c2 20 rep #$20 REP #$20 ; set A long -.3831d6 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3831d6 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .3831d9 69 bd 00 adc #$00bd ADC #$00BD .3831dc 85 2c sta $2c STA OPL2_IND_ADDY_LL .3831de a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2175,7 +2156,7 @@ .3831e9 6b rtl RTL .3831ea OPL2_GET_DRUMS .3831ea c2 20 rep #$20 REP #$20 ; set A long -.3831ec a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3831ec a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .3831ef 69 bd 00 adc #$00bd ADC #$00BD .3831f2 85 2c sta $2c STA OPL2_IND_ADDY_LL .3831f4 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2289,7 +2270,7 @@ .3832c6 29 0f and #$0f AND #$0F .3832c8 aa tax TAX .3832c9 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 6 in Instrument Profile -.3832cb 9f c0 e6 af sta $afe6c0,x STA @lOPL3_R_FEEDBACK,X +.3832cb 9f c0 e7 af sta $afe7c0,x STA @lOPL3_R_FEEDBACK,X .3832cf c8 iny INY .3832d0 a9 01 lda #$01 LDA #$01 .3832d2 85 26 sta $26 STA OPL2_OPERATOR @@ -2336,97 +2317,97 @@ .383329 Percussion_A .383329 e2 20 sep #$20 SEP #$20 ; set A short .38332b b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.38332d 8f 31 e6 af sta $afe631 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $11 +.38332d 8f 31 e7 af sta $afe731 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $11 .383331 c8 iny INY .383332 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.383334 8f 51 e6 af sta $afe651 STA @lOPL3_R_KSL_TL + $11 +.383334 8f 51 e7 af sta $afe751 STA @lOPL3_R_KSL_TL + $11 .383338 c8 iny INY .383339 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.38333b 8f 71 e6 af sta $afe671 STA @lOPL3_R_AR_DR + $11 +.38333b 8f 71 e7 af sta $afe771 STA @lOPL3_R_AR_DR + $11 .38333f c8 iny INY .383340 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.383342 8f 91 e6 af sta $afe691 STA @lOPL3_R_SL_RR + $11 +.383342 8f 91 e7 af sta $afe791 STA @lOPL3_R_SL_RR + $11 .383346 c8 iny INY .383347 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.383349 8f f1 e6 af sta $afe6f1 STA @lOPL3_R_WAVE_SELECT + $11 +.383349 8f f1 e7 af sta $afe7f1 STA @lOPL3_R_WAVE_SELECT + $11 .38334d 6b rtl RTL .38334e Percussion_9 .38334e e2 20 sep #$20 SEP #$20 ; set A short .383350 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.383352 8f 35 e6 af sta $afe635 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $15 +.383352 8f 35 e7 af sta $afe735 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $15 .383356 c8 iny INY .383357 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.383359 8f 55 e6 af sta $afe655 STA @lOPL3_R_KSL_TL + $15 +.383359 8f 55 e7 af sta $afe755 STA @lOPL3_R_KSL_TL + $15 .38335d c8 iny INY .38335e b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.383360 8f 75 e6 af sta $afe675 STA @lOPL3_R_AR_DR + $15 +.383360 8f 75 e7 af sta $afe775 STA @lOPL3_R_AR_DR + $15 .383364 c8 iny INY .383365 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.383367 8f 95 e6 af sta $afe695 STA @lOPL3_R_SL_RR + $15 +.383367 8f 95 e7 af sta $afe795 STA @lOPL3_R_SL_RR + $15 .38336b c8 iny INY .38336c b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.38336e 8f f5 e6 af sta $afe6f5 STA @lOPL3_R_WAVE_SELECT + $15 +.38336e 8f f5 e7 af sta $afe7f5 STA @lOPL3_R_WAVE_SELECT + $15 .383372 6b rtl RTL .383373 Percussion_8 .383373 e2 20 sep #$20 SEP #$20 ; set A short .383375 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.383377 8f 32 e6 af sta $afe632 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $12 +.383377 8f 32 e7 af sta $afe732 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $12 .38337b c8 iny INY .38337c b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.38337e 8f 52 e6 af sta $afe652 STA @lOPL3_R_KSL_TL + $12 +.38337e 8f 52 e7 af sta $afe752 STA @lOPL3_R_KSL_TL + $12 .383382 c8 iny INY .383383 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.383385 8f 72 e6 af sta $afe672 STA @lOPL3_R_AR_DR + $12 +.383385 8f 72 e7 af sta $afe772 STA @lOPL3_R_AR_DR + $12 .383389 c8 iny INY .38338a b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.38338c 8f 92 e6 af sta $afe692 STA @lOPL3_R_SL_RR + $12 +.38338c 8f 92 e7 af sta $afe792 STA @lOPL3_R_SL_RR + $12 .383390 c8 iny INY .383391 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.383393 8f f2 e6 af sta $afe6f2 STA @lOPL3_R_WAVE_SELECT + $12 +.383393 8f f2 e7 af sta $afe7f2 STA @lOPL3_R_WAVE_SELECT + $12 .383397 6b rtl RTL .383398 Percussion_7 .383398 e2 20 sep #$20 SEP #$20 ; set A short .38339a b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.38339c 8f 34 e6 af sta $afe634 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $14 +.38339c 8f 34 e7 af sta $afe734 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $14 .3833a0 c8 iny INY .3833a1 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.3833a3 8f 54 e6 af sta $afe654 STA @lOPL3_R_KSL_TL + $14 +.3833a3 8f 54 e7 af sta $afe754 STA @lOPL3_R_KSL_TL + $14 .3833a7 c8 iny INY .3833a8 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.3833aa 8f 74 e6 af sta $afe674 STA @lOPL3_R_AR_DR + $14 +.3833aa 8f 74 e7 af sta $afe774 STA @lOPL3_R_AR_DR + $14 .3833ae c8 iny INY .3833af b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.3833b1 8f 94 e6 af sta $afe694 STA @lOPL3_R_SL_RR + $14 +.3833b1 8f 94 e7 af sta $afe794 STA @lOPL3_R_SL_RR + $14 .3833b5 c8 iny INY .3833b6 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.3833b8 8f f4 e6 af sta $afe6f4 STA @lOPL3_R_WAVE_SELECT + $14 +.3833b8 8f f4 e7 af sta $afe7f4 STA @lOPL3_R_WAVE_SELECT + $14 .3833bc 6b rtl RTL .3833bd Percussion_6 .3833bd e2 20 sep #$20 SEP #$20 ; set A short .3833bf b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 1 in Instrument Profile -.3833c1 8f 30 e6 af sta $afe630 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $10 -.3833c5 8f 33 e6 af sta $afe633 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $13 +.3833c1 8f 30 e7 af sta $afe730 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $10 +.3833c5 8f 33 e7 af sta $afe733 STA @lOPL3_R_AM_VID_EG_KSR_MULT + $13 .3833c9 c8 iny INY .3833ca b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 2 in Instrument Profile -.3833cc 8f 50 e6 af sta $afe650 STA @lOPL3_R_KSL_TL + $10 -.3833d0 8f 53 e6 af sta $afe653 STA @lOPL3_R_KSL_TL + $13 +.3833cc 8f 50 e7 af sta $afe750 STA @lOPL3_R_KSL_TL + $10 +.3833d0 8f 53 e7 af sta $afe753 STA @lOPL3_R_KSL_TL + $13 .3833d4 c8 iny INY .3833d5 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 3 in Instrument Profile -.3833d7 8f 70 e6 af sta $afe670 STA @lOPL3_R_AR_DR + $10 -.3833db 8f 73 e6 af sta $afe673 STA @lOPL3_R_AR_DR + $13 +.3833d7 8f 70 e7 af sta $afe770 STA @lOPL3_R_AR_DR + $10 +.3833db 8f 73 e7 af sta $afe773 STA @lOPL3_R_AR_DR + $13 .3833df c8 iny INY .3833e0 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 4 in Instrument Profile -.3833e2 8f 90 e6 af sta $afe690 STA @lOPL3_R_SL_RR + $10 -.3833e6 8f 93 e6 af sta $afe693 STA @lOPL3_R_SL_RR + $13 +.3833e2 8f 90 e7 af sta $afe790 STA @lOPL3_R_SL_RR + $10 +.3833e6 8f 93 e7 af sta $afe793 STA @lOPL3_R_SL_RR + $13 .3833ea c8 iny INY .3833eb b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO], Y ; Pointer Location 5 in Instrument Profile -.3833ed 8f f0 e6 af sta $afe6f0 STA @lOPL3_R_WAVE_SELECT + $10 -.3833f1 8f f3 e6 af sta $afe6f3 STA @lOPL3_R_WAVE_SELECT + $13 +.3833ed 8f f0 e7 af sta $afe7f0 STA @lOPL3_R_WAVE_SELECT + $10 +.3833f1 8f f3 e7 af sta $afe7f3 STA @lOPL3_R_WAVE_SELECT + $13 .3833f5 6b rtl RTL .3833f6 OPL2_SET_REGISTER .3833f6 c2 20 rep #$20 REP #$20 ; set A long .3833f8 18 clc CLC -.3833f9 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3833f9 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .3833fc 65 32 adc $32 ADC OPL2_PARAMETER0 .3833fe 85 2c sta $2c STA OPL2_IND_ADDY_LL .383400 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2437,7 +2418,7 @@ .38340b 6b rtl RTL .38340c OPL2_SET_WAVEFORMSELECT .38340c c2 20 rep #$20 REP #$20 ; set A long -.38340e a9 01 e6 lda #$e601 LDA #<>OPL3_R_BASE + $0001 +.38340e a9 01 e7 lda #$e701 LDA #<>OPL3_R_BASE + $0001 .383411 85 2c sta $2c STA OPL2_IND_ADDY_LL .383413 a9 af 00 lda #$00af LDA #`OPL3_R_BASE .383416 85 2e sta $2e STA OPL2_IND_ADDY_HL @@ -2753,7 +2734,7 @@ .383634 85 2b sta $2b STA OPL2_REG_OFFSET+1; .383636 c2 30 rep #$30 REP #$30 ; set A&X long .383638 18 clc CLC -.383639 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.383639 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .38363c 65 2a adc $2a ADC OPL2_REG_OFFSET .38363e 85 2c sta $2c STA OPL2_IND_ADDY_LL .383640 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2784,7 +2765,7 @@ .38366e 85 2b sta $2b STA OPL2_REG_OFFSET+1; .383670 c2 30 rep #$30 REP #$30 ; set A&X long .383672 18 clc CLC -.383673 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.383673 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .383676 65 2a adc $2a ADC OPL2_REG_OFFSET .383678 85 2c sta $2c STA OPL2_IND_ADDY_LL .38367a a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2815,7 +2796,7 @@ .3836a2 85 2b sta $2b STA OPL2_REG_OFFSET+1; .3836a4 c2 30 rep #$30 REP #$30 ; set A&X long .3836a6 18 clc CLC -.3836a7 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3836a7 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .3836aa 65 2a adc $2a ADC OPL2_REG_OFFSET .3836ac 85 2c sta $2c STA OPL2_IND_ADDY_LL .3836ae a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2842,7 +2823,7 @@ .3836d3 85 2b sta $2b STA OPL2_REG_OFFSET+1; .3836d5 c2 30 rep #$30 REP #$30 ; set A&X long .3836d7 18 clc CLC -.3836d8 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.3836d8 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .3836db 65 2a adc $2a ADC OPL2_REG_OFFSET .3836dd 85 2c sta $2c STA OPL2_IND_ADDY_LL .3836df a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2870,7 +2851,7 @@ .383706 85 2b sta $2b STA OPL2_REG_OFFSET+1; .383708 c2 30 rep #$30 REP #$30 ; set A&X long .38370a 18 clc CLC -.38370b a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.38370b a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .38370e 65 2a adc $2a ADC OPL2_REG_OFFSET .383710 85 2c sta $2c STA OPL2_IND_ADDY_LL .383712 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2897,7 +2878,7 @@ .383737 85 2b sta $2b STA OPL2_REG_OFFSET+1; .383739 c2 30 rep #$30 REP #$30 ; set A&X long .38373b 18 clc CLC -.38373c a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.38373c a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .38373f 65 2a adc $2a ADC OPL2_REG_OFFSET .383741 85 2c sta $2c STA OPL2_IND_ADDY_LL .383743 a9 af 00 lda #$00af LDA #`OPL3_R_BASE @@ -2917,7 +2898,7 @@ .38375b 6b rtl RTL .38375c OPL2_SET_DEEPTREMOLO .38375c c2 20 rep #$20 REP #$20 ; set A long -.38375e a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD +.38375e a9 bd e7 lda #$e7bd LDA #<>OPL3_R_BASE + $00BD .383761 85 2c sta $2c STA OPL2_IND_ADDY_LL .383763 a9 af 00 lda #$00af LDA #`OPL3_R_BASE .383766 85 2e sta $2e STA OPL2_IND_ADDY_HL @@ -2935,7 +2916,7 @@ .38377a 6b rtl RTL .38377b OPL2_SET_DEEPVIBRATO .38377b c2 20 rep #$20 REP #$20 ; set A long -.38377d a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD +.38377d a9 bd e7 lda #$e7bd LDA #<>OPL3_R_BASE + $00BD .383780 85 2c sta $2c STA OPL2_IND_ADDY_LL .383782 a9 af 00 lda #$00af LDA #`OPL3_R_BASE .383785 85 2e sta $2e STA OPL2_IND_ADDY_HL @@ -2953,7 +2934,7 @@ .383799 6b rtl RTL .38379a OPL2_SET_PERCUSSION .38379a c2 20 rep #$20 REP #$20 ; set A long -.38379c a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD +.38379c a9 bd e7 lda #$e7bd LDA #<>OPL3_R_BASE + $00BD .38379f 85 2c sta $2c STA OPL2_IND_ADDY_LL .3837a1 a9 af 00 lda #$00af LDA #`OPL3_R_BASE .3837a4 85 2e sta $2e STA OPL2_IND_ADDY_HL @@ -2971,7 +2952,7 @@ .3837b8 6b rtl RTL .3837b9 OPL2_SET_DRUMS .3837b9 c2 20 rep #$20 REP #$20 ; set A long -.3837bb a9 bd e6 lda #$e6bd LDA #<>OPL3_R_BASE + $00BD +.3837bb a9 bd e7 lda #$e7bd LDA #<>OPL3_R_BASE + $00BD .3837be 85 2c sta $2c STA OPL2_IND_ADDY_LL .3837c0 a9 af 00 lda #$00af LDA #`OPL3_R_BASE .3837c3 85 2e sta $2e STA OPL2_IND_ADDY_HL @@ -3017,7 +2998,7 @@ .38380e 85 2b sta $2b STA OPL2_REG_OFFSET+1; .383810 c2 30 rep #$30 REP #$30 ; set A&X long .383812 18 clc CLC -.383813 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE +.383813 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE .383816 65 2a adc $2a ADC OPL2_REG_OFFSET .383818 65 28 adc $28 ADC OPL2_REG_REGION ; Ex: $20, or $40, $60, $80 (in 16bits) .38381a 85 2c sta $2c STA OPL2_IND_ADDY_LL @@ -4329,19 +4310,19 @@ .385858 af 15 0f 38 lda $380f15 LDA STATE_MACHINE .38585c c9 02 cmp #$02 CMP #2 .38585e d0 07 bne $385867 BNE NOT_ESCAPE -.385860 22 f4 68 38 jsl $3868f4 JSL EXIT_FILE +.385860 22 47 70 38 jsl $387047 JSL EXIT_FILE .385864 4c e9 59 jmp $3859e9 JMP KB_WR_2_SCREEN .385867 NOT_ESCAPE .385867 c9 1a cmp #$1a CMP #$1A ; left bracket .385869 d0 08 bne $385873 BNE NOT_LEFT_BRACKET .38586b c6 6a dec $6a DEC INSTR_NUMBER -.38586d 20 01 64 jsr $386401 JSR LOAD_INSTRUMENT ; X is already set to 0 +.38586d 20 52 6b jsr $386b52 JSR LOAD_INSTRUMENT ; X is already set to 0 .385870 4c e9 59 jmp $3859e9 JMP KB_WR_2_SCREEN .385873 NOT_LEFT_BRACKET .385873 c9 1b cmp #$1b CMP #$1B ; right bracket .385875 d0 08 bne $38587f BNE NOT_RIGHT_BRACKET .385877 e6 6a inc $6a INC INSTR_NUMBER -.385879 20 01 64 jsr $386401 JSR LOAD_INSTRUMENT ; X is already set to 0 +.385879 20 52 6b jsr $386b52 JSR LOAD_INSTRUMENT ; X is already set to 0 .38587c 4c e9 59 jmp $3859e9 JMP KB_WR_2_SCREEN .38587f NOT_RIGHT_BRACKET .38587f c9 0c cmp #$0c CMP #$0C ; minus @@ -4395,7 +4376,7 @@ .3858e1 SETUP_TIMER .3858e1 8f 17 0f 38 sta $380f17 STA BPM .3858e5 20 c9 60 jsr $3860c9 JSR DISPLAY_BPM -.3858e8 20 74 63 jsr $386374 JSR INIT_TIMER0_BPM +.3858e8 20 c5 6a jsr $386ac5 JSR INIT_TIMER0_BPM .3858eb 4c e9 59 jmp $3859e9 JMP KB_WR_2_SCREEN .3858ee TRY_GRAVE .3858ee c9 29 cmp #$29 CMP #$29 @@ -4494,7 +4475,7 @@ .38599f f0 35 beq $3859d6 BEQ ALT_KEY_ON .3859a1 c2 10 rep #$10 REP #$10 ; set X long .3859a3 ad 88 0f lda $0f88 LDA KEYBOARD_SC_TMP -.3859a6 20 22 67 jsr $386722 JSR PLAY_TRACKER_NOTE +.3859a6 20 75 6e jsr $386e75 JSR PLAY_TRACKER_NOTE .3859a9 e2 10 sep #$10 SEP #$10 ; set X short .3859ab ae 88 0f ldx $0f88 LDX KEYBOARD_SC_TMP .3859ae bf 00 39 38 lda $383900,x LDA @lScanCode_Press_Set1, x @@ -4509,13 +4490,13 @@ .3859ca 29 0f and #$0f AND #$F .3859cc c9 02 cmp #$02 CMP #2 .3859ce f0 04 beq $3859d4 BEQ CONTINUE_KEY -.3859d0 22 eb 67 38 jsl $3867eb JSL LOAD_FILE_DISPLAY +.3859d0 22 3e 6f 38 jsl $386f3e JSL LOAD_FILE_DISPLAY .3859d4 CONTINUE_KEY .3859d4 80 13 bra $3859e9 BRA KB_WR_2_SCREEN .3859d6 bf 80 3a 38 lda $383a80,x ALT_KEY_ON LDA @lScanCode_Alt_Set1, x .3859da f0 0d beq $3859e9 BEQ KB_WR_2_SCREEN .3859dc 29 0f and #$0f AND #$F -.3859de 20 6c 67 jsr $38676c JSR TOGGLE_CHANNEL +.3859de 20 bf 6e jsr $386ebf JSR TOGGLE_CHANNEL .3859e1 c2 10 rep #$10 REP #$10 ; set X long .3859e3 20 6d 61 jsr $38616d JSR DISPLAY_ACTIVE_CHANNELS .3859e6 e2 10 sep #$10 SEP #$10 ; set X short @@ -4537,19 +4518,19 @@ .385a06 8f 4c 01 00 sta $00014c STA @lINT_MASK_REG0 .385a0a a9 00 lda #$00 LDA #0 ; record mode .385a0c 8f 15 0f 38 sta $380f15 STA STATE_MACHINE -.385a10 20 11 6b jsr $386b11 JSR RAD_ALL_NOTES_OFF +.385a10 20 93 72 jsr $387293 JSR RAD_ALL_NOTES_OFF .385a13 68 pla PLA .385a14 KB_CHECK_B_DONE_R .385a14 4c 80 5a jmp $385a80 JMP KB_CHECK_B_DONE .385a17 START_SOF .385a17 ad 87 0f lda $0f87 LDA KEYBOARD_SC_FLG .385a1a d0 06 bne $385a22 BNE CONTINUE_FROM_CURRENT_LOCATION -.385a1c 20 2c 63 jsr $38632c JSR RESET_STATE_MACHINE +.385a1c 20 7d 6a jsr $386a7d JSR RESET_STATE_MACHINE .385a1f 20 61 5e jsr $385e61 JSR DISPLAY_PATTERN .385a22 CONTINUE_FROM_CURRENT_LOCATION .385a22 a9 01 lda #$01 LDA #1 .385a24 8f 15 0f 38 sta $380f15 STA STATE_MACHINE -.385a28 20 2f 6b jsr $386b2f JSR RAD_PLAYNOTES +.385a28 20 b1 72 jsr $3872b1 JSR RAD_PLAYNOTES .385a2b af 4c 01 00 lda $00014c LDA @lINT_MASK_REG0 .385a2f 29 fb and #$fb AND #~(FNX0_INT02_TMR0) .385a31 8f 4c 01 00 sta $00014c STA @lINT_MASK_REG0 @@ -4557,7 +4538,7 @@ .385a36 4c 80 5a jmp $385a80 JMP KB_CHECK_B_DONE .385a39 GO_LOAD_FILE .385a39 68 pla PLA -.385a3a 22 bc 68 38 jsl $3868bc JSL READ_FILE +.385a3a 22 0f 70 38 jsl $38700f JSL READ_FILE .385a3e 4c 80 5a jmp $385a80 JMP KB_CHECK_B_DONE .385a41 ad 87 0f lda $0f87 KB_SET_SHIFT LDA KEYBOARD_SC_FLG .385a44 09 10 ora #$10 ORA #$10 @@ -4617,7 +4598,7 @@ .385abf d0 07 bne $385ac8 BNE INCR_DONE .385ac1 a9 01 lda #$01 LDA #1 .385ac3 64 6c stz $6c STZ LINE_NUM_HEX -.385ac5 20 4d 63 jsr $38634d JSR INCREMENT_ORDER +.385ac5 20 9e 6a jsr $386a9e JSR INCREMENT_ORDER .385ac8 INCR_DONE .385ac8 d8 cld CLD .385ac9 8f 19 0f 38 sta $380f19 STA @lLINE_NUM_DEC @@ -4625,7 +4606,7 @@ .385ad0 af 15 0f 38 lda $380f15 LDA STATE_MACHINE .385ad4 29 01 and #$01 AND #1 .385ad6 f0 03 beq $385adb BEQ EDIT_MODE -.385ad8 20 2f 6b jsr $386b2f JSR RAD_PLAYNOTES +.385ad8 20 b1 72 jsr $3872b1 JSR RAD_PLAYNOTES .385adb EDIT_MODE .385adb a9 00 lda #$00 LDA #0 ; reset the tick to 0 .385add TICK_DONE @@ -4790,7 +4771,7 @@ .385bf7 a5 62 lda $62 LDA MIDI_CTRL .385bf9 aa tax TAX .385bfa 68 pla PLA -.385bfb fc d9 67 jsr ($3867d9,x) JSR (MIDI_COMMAND_TABLE,X) +.385bfb fc 2c 6f jsr ($386f2c,x) JSR (MIDI_COMMAND_TABLE,X) .385bfe c2 10 rep #$10 REP #$10 ; set X long .385c00 RECEIVE_MIDI_DATA_DONE .385c00 68 pla PLA @@ -5379,7 +5360,7 @@ .38605b 29 0f 00 and #$000f AND #$F ; low-nibble - C#=1, D=2, ... C=12, 0 is no note and $F is Key Off .38605e aa tax TAX .38605f e2 20 sep #$20 SEP #$20 ; set A short -.386061 bf 07 69 38 lda $386907,x LDA @lnote_array, X +.386061 bf 5a 70 38 lda $38705a,x LDA @lnote_array, X .386065 97 0c sta [$0c],y STA [SCREENBEGIN], Y .386067 c8 iny INY .386068 68 pla PLA @@ -5545,7 +5526,7 @@ .38616d a2 09 00 ldx #$0009 LDX #9 .386170 a0 4b 2d ldy #$2d4b LDY #$2000 + 128 * 26 + 75 .386173 DAC_LOOP -.386173 bf 62 67 38 lda $386762,x LDA CHANNELS-1,X +.386173 bf b5 6e 38 lda $386eb5,x LDA CHANNELS-1,X .386177 f0 06 beq $38617f BEQ INACTIVE_CHANNEL .386179 a9 40 lda #$40 LDA #$40 ; white .38617b 97 0c sta [$0c],y STA [SCREENBEGIN], Y @@ -5601,7 +5582,7 @@ .3861bf 80 f4 bra $3861b5 BRA MSG_LOOP .3861c1 22 9a 61 38 jsl $38619a MSG_DONE JSL DISPLAY_NEXT_LINE .3861c5 ab plb PLB -.3861c6 6b rtl RTL +.3861c6 60 rts RTS .3861c7 DISPLAY_FAT_RECORD .3861c7 5a phy PHY .3861c8 a0 0b 00 ldy #$000b LDY #11 ; record type @@ -5702,738 +5683,1651 @@ ;****** Return to file: tracker.asm -.386286 TRACKER -.386286 a9 ff lda #$ff LDA #$FF -.386288 8f 48 01 00 sta $000148 STA @lINT_EDGE_REG0 -.38628c 8f 49 01 00 sta $000149 STA @lINT_EDGE_REG1 -.386290 8f 4a 01 00 sta $00014a STA @lINT_EDGE_REG2 -.386294 a9 ff lda #$ff LDA #$FF -.386296 8f 4c 01 00 sta $00014c STA @lINT_MASK_REG0 -.38629a 8f 4d 01 00 sta $00014d STA @lINT_MASK_REG1 -.38629e 8f 4e 01 00 sta $00014e STA @lINT_MASK_REG2 -.3862a2 20 db 5c jsr $385cdb JSR DRAW_DISPLAY -.3862a5 20 dd 65 jsr $3865dd JSR INIT_KEYBOARD -.3862a8 20 74 66 jsr $386674 JSR INIT_MOUSEPOINTER -.3862ab 20 ea 62 jsr $3862ea JSR INIT_CURSOR -.3862ae 20 2c 63 jsr $38632c JSR RESET_STATE_MACHINE -.3862b1 a9 38 lda #$38 LDA #`INSTRUMENT_ACCORDN -.3862b3 85 69 sta $69 STA INSTR_ADDR+2 -.3862b5 a9 42 lda #$42 LDA #$42 -.3862b7 8f 6a 00 00 sta $00006a STA @lINSTR_NUMBER -.3862bb a2 00 00 ldx #$0000 LDX #0 ; setup channels -.3862be NEXT_INSTR -.3862be a9 00 lda #$00 LDA #0 -.3862c0 eb xba XBA -.3862c1 da phx PHX -.3862c2 bf 18 10 38 lda $381018,x LDA registerOffsets_operator0,X -.3862c6 aa tax TAX -.3862c7 20 01 64 jsr $386401 JSR LOAD_INSTRUMENT -.3862ca fa plx PLX -.3862cb e8 inx INX -.3862cc e0 09 00 cpx #$0009 CPX #9 -.3862cf d0 ed bne $3862be BNE NEXT_INSTR -.3862d1 22 79 30 38 jsl $383079 JSL IOPL2_TONE_TEST -.3862d5 20 0b 63 jsr $38630b JSR ENABLE_IRQS -.3862d8 22 b1 30 38 jsl $3830b1 JSL OPL2_INIT -.3862dc 58 cli CLI -.3862dd 20 ae 5b jsr $385bae JSR INIT_MIDI -.3862e0 20 2b 61 jsr $38612b JSR DISPLAY_ORDERS -.3862e3 20 61 5e jsr $385e61 JSR DISPLAY_PATTERN -.3862e6 ea nop ALWAYS NOP -.3862e7 ea nop NOP -.3862e8 80 fc bra $3862e6 BRA ALWAYS -.3862ea 48 pha INIT_CURSOR PHA -.3862eb a9 e9 lda #$e9 LDA #$E9 ;The Cursor Character will be a Fully Filled Block -.3862ed 8f 12 00 af sta $af0012 STA VKY_TXT_CURSOR_CHAR_REG -.3862f1 a9 00 lda #$00 LDA #$0 ;Set Cursor Disabled -.3862f3 8f 10 00 af sta $af0010 STA VKY_TXT_CURSOR_CTRL_REG ; -.3862f7 c2 30 rep #$30 REP #$30 ; set A&X long -.3862f9 a9 00 00 lda #$0000 LDA #$0000; -.3862fc 8f 14 00 af sta $af0014 STA VKY_TXT_CURSOR_X_REG_L; // Set the X to Position 1 -.386300 a9 00 00 lda #$0000 LDA #$0000; -.386303 8f 16 00 af sta $af0016 STA VKY_TXT_CURSOR_Y_REG_L; // Set the Y to Position 1 (Below) -.386307 e2 20 sep #$20 SEP #$20 ; set A short -.386309 68 pla PLA -.38630a 60 rts RTS -.38630b ENABLE_IRQS -.38630b af 40 01 00 lda $000140 LDA @lINT_PENDING_REG0 -.38630f 29 84 and #$84 AND #FNX0_INT07_MOUSE | FNX0_INT02_TMR0 ;AND #FNX0_INT00_SOF -.386311 8f 40 01 00 sta $000140 STA @lINT_PENDING_REG0 ; Writing it back will clear the Active Bit -.386315 af 41 01 00 lda $000141 LDA @lINT_PENDING_REG1 -.386319 29 a1 and #$a1 AND #FNX1_INT00_KBD | FNX1_INT05_MPU401 | FNX1_INT07_SDCARD -.38631b 8f 41 01 00 sta $000141 STA @lINT_PENDING_REG1 ; Writing it back will clear the Active Bit -.38631f a9 7b lda #$7b LDA #~(FNX0_INT07_MOUSE | FNX0_INT02_TMR0) ;LDA #~(FNX0_INT00_SOF | FNX0_INT00_SOF ) -.386321 8f 4c 01 00 sta $00014c STA @lINT_MASK_REG0 -.386325 a9 5e lda #$5e LDA #~(FNX1_INT00_KBD | FNX1_INT05_MPU401 | FNX1_INT07_SDCARD) -.386327 8f 4d 01 00 sta $00014d STA @lINT_MASK_REG1 -.38632b 60 rts RTS -.38632c RESET_STATE_MACHINE -.38632c a9 00 lda #$00 LDA #0 -.38632e 8f 15 0f 38 sta $380f15 STA STATE_MACHINE -.386332 85 48 sta $48 STA RAD_ORDER_NUM -.386334 64 6c stz $6c STZ LINE_NUM_HEX -.386336 64 49 stz $49 STZ RAD_ORDER_NUM + 1 -.386338 a9 01 lda #$01 LDA #1 -.38633a 8f 19 0f 38 sta $380f19 STA LINE_NUM_DEC -.38633e a6 48 ldx $48 LDX RAD_ORDER_NUM -.386340 bf 24 fc 39 lda $39fc24,x LDA @lORDERS,X ; load the first pattern in the order list -.386344 1a inc a INC A -.386345 PATTN_OK -.386345 8f 18 0f 38 sta $380f18 STA PATTERN_NUM -.386349 20 af 60 jsr $3860af JSR DISPLAY_SPEED -.38634c 60 rts RTS -.38634d INCREMENT_ORDER -.38634d 48 pha PHA -.38634e a9 00 lda #$00 LDA #0 -.386350 eb xba XBA -.386351 af 48 00 00 lda $000048 LDA @lRAD_ORDER_NUM -.386355 1a inc a INC A -.386356 cf 01 00 17 cmp $170001 CMP @lTuneInfo.songLength -.38635a d0 02 bne $38635e BNE LOAD_ORDER -.38635c a9 00 lda #$00 LDA #0 -.38635e LOAD_ORDER -.38635e 8f 48 00 00 sta $000048 STA @lRAD_ORDER_NUM -.386362 aa tax TAX -.386363 a0 80 02 ldy #$0280 LDY #128 * 5 -.386366 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386369 bf 24 fc 39 lda $39fc24,x LDA @lORDERS,X ; load the pattern from the order list -.38636d 1a inc a INC A -.38636e 8f 18 0f 38 sta $380f18 STA PATTERN_NUM -.386372 68 pla PLA -.386373 60 rts RTS -.386374 INIT_TIMER0_BPM -.386374 8b phb PHB -.386375 a9 00 lda #$00 LDA #0 -.386377 48 pha PHA -.386378 ab plb PLB ; set databank to 0 -.386379 a9 03 lda #$03 LDA #3 ; each timer counter is 24 bits - 3 bytes -.38637b 8d 00 01 sta $0100 STA UNSIGNED_MULT_A -.38637e 9c 01 01 stz $0101 STZ UNSIGNED_MULT_A + 1 -.386381 9c 03 01 stz $0103 STZ UNSIGNED_MULT_B + 1 -.386384 38 sec SEC -.386385 af 17 0f 38 lda $380f17 LDA BPM ; multiply by the BPM, the 4 offset is the lowest BPM -.386389 e9 04 sbc #$04 SBC #4 -.38638b 8d 02 01 sta $0102 STA UNSIGNED_MULT_B -.38638e c2 20 rep #$20 REP #$20 ; set A long -.386390 ad 04 01 lda $0104 LDA UNSIGNED_MULT_RESULT -.386393 aa tax TAX -.386394 e2 20 sep #$20 SEP #$20 ; set A short -.386396 a9 00 lda #$00 LDA #0 ; set timer0 charge to 0 -.386398 8d 61 01 sta $0161 STA TIMER0_CHARGE_L -.38639b 8d 62 01 sta $0162 STA TIMER0_CHARGE_M -.38639e 8d 63 01 sta $0163 STA TIMER0_CHARGE_H -.3863a1 bf 00 00 3a lda $3a0000,x LDA @lSPM_004,X -.3863a5 8d 65 01 sta $0165 STA TIMER0_CMP_L -.3863a8 bf 01 00 3a lda $3a0001,x LDA @lSPM_004+1,X -.3863ac 8d 66 01 sta $0166 STA TIMER0_CMP_M -.3863af bf 02 00 3a lda $3a0002,x LDA @lSPM_004+2,X -.3863b3 8d 67 01 sta $0167 STA TIMER0_CMP_H -.3863b6 a9 01 lda #$01 LDA #TMR0_CMP_RECLR ; count up from "CHARGE" value to TIMER_CMP -.3863b8 8d 64 01 sta $0164 STA TIMER0_CMP_REG -.3863bb a9 0b lda #$0b LDA #(TMR0_EN | TMR0_UPDWN | TMR0_SCLR) -.3863bd 8d 60 01 sta $0160 STA TIMER0_CTRL_REG -.3863c0 ab plb PLB -.3863c1 60 rts RTS -.3863c2 INIT_TIMER0 -.3863c2 8b phb PHB -.3863c3 a9 00 lda #$00 LDA #0 -.3863c5 48 pha PHA -.3863c6 ab plb PLB ; set databank to 0 -.3863c7 e2 20 sep #$20 SEP #$20 ; set A short -.3863c9 a9 00 lda #$00 LDA #0 ; set timer0 charge to 0 -.3863cb 8d 61 01 sta $0161 STA TIMER0_CHARGE_L -.3863ce 8d 62 01 sta $0162 STA TIMER0_CHARGE_M -.3863d1 8d 63 01 sta $0163 STA TIMER0_CHARGE_H -.3863d4 a9 01 lda #$01 LDA #TMR0_CMP_RECLR ; count up from "CHARGE" value to TIMER_CMP -.3863d6 8d 64 01 sta $0164 STA TIMER0_CMP_REG -.3863d9 a9 0b lda #$0b LDA #(TMR0_EN | TMR0_UPDWN | TMR0_SCLR) -.3863db 8d 60 01 sta $0160 STA TIMER0_CTRL_REG -.3863de ab plb PLB -.3863df 60 rts RTS -.3863e0 INIT_OPL2_TMRS -.3863e0 a9 80 lda #$80 LDA #$80 ; Reset OPL2 Interrupts -.3863e2 8f 04 e6 af sta $afe604 STA OPL3_R_IRQ ; byte 4 of OPL2 -.3863e6 20 fa 63 jsr $3863fa JSR WAIT_80 -.3863e9 a9 10 lda #$10 LDA #$10 -.3863eb 8f 02 e6 af sta $afe602 STA OPL3_R_TIMER1 ; byte 2 of OPL2 -.3863ef 8f 03 e6 af sta $afe603 STA OPL3_R_TIMER2 ; byte 2 of OPL2 -.3863f3 a9 03 lda #$03 LDA #$3 ; enable timers 1 and 2 -.3863f5 8f 04 e6 af sta $afe604 STA OPL3_R_IRQ ; byte 4 of OPL2 -.3863f9 60 rts RTS -.3863fa WAIT_80 -.3863fa a2 30 02 ldx #$0230 LDX #560 -.3863fd WAIT_LP -.3863fd ca dex DEX -.3863fe d0 fd bne $3863fd BNE WAIT_LP -.386400 60 rts RTS -.386401 LOAD_INSTRUMENT -.386401 af 6a 00 00 lda $00006a LDA @lINSTR_NUMBER -.386405 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A -.386409 a9 00 lda #$00 LDA #0 -.38640b 8f 01 01 00 sta $000101 STA @lUNSIGNED_MULT_A + 1 -.38640f 8f 03 01 00 sta $000103 STA @lUNSIGNED_MULT_B + 1 -.386413 a9 16 lda #$16 LDA #INSTR_REC_LEN -.386415 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B -.386419 c2 20 rep #$20 REP #$20 ; set A long -.38641b af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT -.38641f 18 clc CLC -.386420 69 3b 10 adc #$103b ADC #<>INSTRUMENT_ACCORDN -.386423 85 67 sta $67 STA INSTR_ADDR -.386425 e2 20 sep #$20 SEP #$20 ; set A short -.386427 af 6a 00 00 lda $00006a LDA @lINSTR_NUMBER -.38642b a0 93 02 ldy #$0293 LDY #5 * 128 + 19 -.38642e 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386431 a7 67 lda [$67] LDA [INSTR_ADDR] -.386433 d0 4b bne $386480 BNE DRUM_SET -.386435 e6 67 inc $67 INC INSTR_ADDR -.386437 d0 02 bne $38643b BNE LD_INST_1 -.386439 e6 68 inc $68 INC INSTR_ADDR+1 -.38643b LD_INST_1 -.38643b 20 81 64 jsr $386481 JSR LOAD_AM_VIB_MULT -.38643e e6 67 inc $67 INC INSTR_ADDR -.386440 d0 02 bne $386444 BNE LD_INST_2 -.386442 e6 68 inc $68 INC INSTR_ADDR+1 -.386444 LD_INST_2 -.386444 20 f1 64 jsr $3864f1 JSR LOAD_KEY_OP_LVL -.386447 e6 67 inc $67 INC INSTR_ADDR -.386449 d0 02 bne $38644d BNE LD_INST_3 -.38644b e6 68 inc $68 INC INSTR_ADDR+1 -.38644d LD_INST_3 -.38644d 20 2b 65 jsr $38652b JSR LOAD_ATT_DEC_RATE -.386450 e6 67 inc $67 INC INSTR_ADDR -.386452 d0 02 bne $386456 BNE LD_INST_4 -.386454 e6 68 inc $68 INC INSTR_ADDR+1 -.386456 LD_INST_4 -.386456 20 67 65 jsr $386567 JSR LOAD_SUSTAIN_RELEASE_RATE -.386459 e6 67 inc $67 INC INSTR_ADDR -.38645b d0 02 bne $38645f BNE LD_INST_5 -.38645d e6 68 inc $68 INC INSTR_ADDR+1 -.38645f LD_INST_5 -.38645f da phx PHX -.386460 a6 27 ldx $27 LDX OPL2_CHANNEL -.386462 20 a3 65 jsr $3865a3 JSR LOAD_FEEDBACK_ALGO -.386465 fa plx PLX -.386466 e6 67 inc $67 INC INSTR_ADDR -.386468 d0 02 bne $38646c BNE LD_INST_6 -.38646a e6 68 inc $68 INC INSTR_ADDR+1 -.38646c LD_INST_6 -.38646c 20 bd 65 jsr $3865bd JSR LOAD_WAVE -.38646f c2 20 rep #$20 REP #$20 ; set A long -.386471 a5 67 lda $67 LDA INSTR_ADDR -.386473 69 06 00 adc #$0006 ADC #6 -.386476 85 67 sta $67 STA INSTR_ADDR -.386478 e2 20 sep #$20 SEP #$20 ; set A short -.38647a a0 98 02 ldy #$0298 LDY #5 * 128 + 24 -.38647d 20 3d 5e jsr $385e3d JSR WRITE_INSTRUMENT_NAME -.386480 DRUM_SET -.386480 60 rts RTS -.386481 LOAD_AM_VIB_MULT -.386481 a7 67 lda [$67] LDA [INSTR_ADDR] -.386483 48 pha PHA -.386484 48 pha PHA -.386485 48 pha PHA -.386486 48 pha PHA -.386487 9f 20 e6 af sta $afe620,x STA @lOPL3_R_AM_VID_EG_KSR_MULT,X -.38648b 29 80 and #$80 AND #TREMOLO -.38648d a0 8d 03 ldy #$038d LDY #7 * 128 + 13 -.386490 20 ee 5d jsr $385dee JSR WRITE_OFF_ON -.386493 68 pla PLA -.386494 29 40 and #$40 AND #VIBRATO -.386496 a0 0d 04 ldy #$040d LDY #8 * 128 + 13 -.386499 20 ee 5d jsr $385dee JSR WRITE_OFF_ON -.38649c 68 pla PLA -.38649d 29 20 and #$20 AND #SUSTAINING -.38649f a0 8d 04 ldy #$048d LDY #9 * 128 + 13 -.3864a2 20 ee 5d jsr $385dee JSR WRITE_OFF_ON -.3864a5 68 pla PLA -.3864a6 29 10 and #$10 AND #KSR -.3864a8 a0 0d 05 ldy #$050d LDY #10 * 128 + 13 -.3864ab 20 ee 5d jsr $385dee JSR WRITE_OFF_ON -.3864ae 68 pla PLA -.3864af 29 0f and #$0f AND #MULTIPLIER -.3864b1 a0 8e 05 ldy #$058e LDY #11 * 128 + 14 -.3864b4 20 b1 5d jsr $385db1 JSR WRITE_HEX -.3864b7 a0 06 00 ldy #$0006 LDY #6 -.3864ba b7 67 lda [$67],y LDA [INSTR_ADDR], Y -.3864bc 48 pha PHA -.3864bd 48 pha PHA -.3864be 48 pha PHA -.3864bf 48 pha PHA -.3864c0 9f 23 e6 af sta $afe623,x STA @lOPL3_R_AM_VID_EG_KSR_MULT + 3,X -.3864c4 29 80 and #$80 AND #TREMOLO -.3864c6 a0 a7 03 ldy #$03a7 LDY #7 * 128 + 39 -.3864c9 20 ee 5d jsr $385dee JSR WRITE_OFF_ON -.3864cc 68 pla PLA -.3864cd 29 40 and #$40 AND #VIBRATO -.3864cf a0 27 04 ldy #$0427 LDY #8 * 128 + 39 -.3864d2 20 ee 5d jsr $385dee JSR WRITE_OFF_ON -.3864d5 68 pla PLA -.3864d6 29 20 and #$20 AND #SUSTAINING -.3864d8 a0 a7 04 ldy #$04a7 LDY #9 * 128 + 39 -.3864db 20 ee 5d jsr $385dee JSR WRITE_OFF_ON -.3864de 68 pla PLA -.3864df 29 10 and #$10 AND #KSR -.3864e1 a0 27 05 ldy #$0527 LDY #10 * 128 + 39 -.3864e4 20 ee 5d jsr $385dee JSR WRITE_OFF_ON -.3864e7 68 pla PLA -.3864e8 29 0f and #$0f AND #MULTIPLIER -.3864ea a0 a8 05 ldy #$05a8 LDY #11 * 128 + 40 -.3864ed 20 b1 5d jsr $385db1 JSR WRITE_HEX -.3864f0 60 rts RTS -.3864f1 LOAD_KEY_OP_LVL -.3864f1 a7 67 lda [$67] LDA [INSTR_ADDR] -.3864f3 48 pha PHA -.3864f4 9f 40 e6 af sta $afe640,x STA @lOPL3_R_KSL_TL,X -.3864f8 29 c0 and #$c0 AND #KEY_SCALE -.3864fa 2a rol a ROL A -.3864fb 2a rol a ROL A -.3864fc 2a rol a ROL A -.3864fd a0 0e 06 ldy #$060e LDY #12 * 128 + 14 -.386500 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386503 68 pla PLA -.386504 29 3f and #$3f AND #OP_LEVEL -.386506 a0 8e 06 ldy #$068e LDY #13 * 128 + 14 -.386509 20 b1 5d jsr $385db1 JSR WRITE_HEX -.38650c a0 06 00 ldy #$0006 LDY #6 -.38650f b7 67 lda [$67],y LDA [INSTR_ADDR],Y -.386511 48 pha PHA -.386512 9f 43 e6 af sta $afe643,x STA @lOPL3_R_KSL_TL + 3,X -.386516 29 c0 and #$c0 AND #KEY_SCALE -.386518 2a rol a ROL A -.386519 2a rol a ROL A -.38651a 2a rol a ROL A -.38651b a0 28 06 ldy #$0628 LDY #12 * 128 + 40 -.38651e 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386521 68 pla PLA -.386522 29 3f and #$3f AND #OP_LEVEL -.386524 a0 a8 06 ldy #$06a8 LDY #13 * 128 + 40 -.386527 20 b1 5d jsr $385db1 JSR WRITE_HEX -.38652a 60 rts RTS -.38652b LOAD_ATT_DEC_RATE -.38652b a7 67 lda [$67] LDA [INSTR_ADDR] -.38652d 48 pha PHA -.38652e 9f 60 e6 af sta $afe660,x STA @lOPL3_R_AR_DR,X -.386532 29 f0 and #$f0 AND #ATTACK_RT -.386534 4a lsr a LSR A -.386535 4a lsr a LSR A -.386536 4a lsr a LSR A -.386537 4a lsr a LSR A -.386538 a0 0e 07 ldy #$070e LDY #14 * 128 + 14 -.38653b 20 b1 5d jsr $385db1 JSR WRITE_HEX -.38653e 68 pla PLA -.38653f 29 0f and #$0f AND #DECAY_RT -.386541 a0 8e 07 ldy #$078e LDY #15 * 128 + 14 -.386544 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386547 a0 06 00 ldy #$0006 LDY #6 -.38654a b7 67 lda [$67],y LDA [INSTR_ADDR],Y -.38654c 48 pha PHA -.38654d 9f 63 e6 af sta $afe663,x STA @lOPL3_R_AR_DR + 3,X -.386551 29 f0 and #$f0 AND #ATTACK_RT -.386553 4a lsr a LSR A -.386554 4a lsr a LSR A -.386555 4a lsr a LSR A -.386556 4a lsr a LSR A -.386557 a0 28 07 ldy #$0728 LDY #14 * 128 + 40 -.38655a 20 b1 5d jsr $385db1 JSR WRITE_HEX -.38655d 68 pla PLA -.38655e 29 0f and #$0f AND #DECAY_RT -.386560 a0 a8 07 ldy #$07a8 LDY #15 * 128 + 40 -.386563 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386566 60 rts RTS -.386567 LOAD_SUSTAIN_RELEASE_RATE -.386567 a7 67 lda [$67] LDA [INSTR_ADDR] -.386569 48 pha PHA -.38656a 9f 80 e6 af sta $afe680,x STA @lOPL3_R_SL_RR,X -.38656e 29 f0 and #$f0 AND #ATTACK_RT -.386570 4a lsr a LSR A -.386571 4a lsr a LSR A -.386572 4a lsr a LSR A -.386573 4a lsr a LSR A -.386574 a0 0e 08 ldy #$080e LDY #16 * 128 + 14 -.386577 20 b1 5d jsr $385db1 JSR WRITE_HEX -.38657a 68 pla PLA -.38657b 29 0f and #$0f AND #DECAY_RT -.38657d a0 8e 08 ldy #$088e LDY #17 * 128 + 14 -.386580 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386583 a0 06 00 ldy #$0006 LDY #6 -.386586 b7 67 lda [$67],y LDA [INSTR_ADDR],Y -.386588 48 pha PHA -.386589 9f 83 e6 af sta $afe683,x STA @lOPL3_R_SL_RR + 3,X -.38658d 29 f0 and #$f0 AND #ATTACK_RT -.38658f 4a lsr a LSR A -.386590 4a lsr a LSR A -.386591 4a lsr a LSR A -.386592 4a lsr a LSR A -.386593 a0 28 08 ldy #$0828 LDY #16 * 128 + 40 -.386596 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386599 68 pla PLA -.38659a 29 0f and #$0f AND #DECAY_RT -.38659c a0 a8 08 ldy #$08a8 LDY #17 * 128 + 40 -.38659f 20 b1 5d jsr $385db1 JSR WRITE_HEX -.3865a2 60 rts RTS -.3865a3 LOAD_FEEDBACK_ALGO -.3865a3 a7 67 lda [$67] LDA [INSTR_ADDR] -.3865a5 48 pha PHA -.3865a6 9f c0 e6 af sta $afe6c0,x STA @lOPL3_R_FEEDBACK,X -.3865aa 29 0e and #$0e AND #FEEDBACK -.3865ac 4a lsr a LSR A -.3865ad a0 28 0a ldy #$0a28 LDY #20 * 128 + 40 -.3865b0 20 b1 5d jsr $385db1 JSR WRITE_HEX -.3865b3 68 pla PLA -.3865b4 29 01 and #$01 AND #ALGORITHM -.3865b6 a0 a8 0a ldy #$0aa8 LDY #21 * 128 + 40 -.3865b9 20 b1 5d jsr $385db1 JSR WRITE_HEX -.3865bc 60 rts RTS -.3865bd LOAD_WAVE -.3865bd a7 67 lda [$67] LDA [INSTR_ADDR] -.3865bf 9f e0 e6 af sta $afe6e0,x STA @lOPL3_R_WAVE_SELECT,X -.3865c3 29 07 and #$07 AND #$7 -.3865c5 a0 0e 09 ldy #$090e LDY #18 * 128 + 14 -.3865c8 20 b1 5d jsr $385db1 JSR WRITE_HEX -.3865cb a0 05 00 ldy #$0005 LDY #5 -.3865ce b7 67 lda [$67],y LDA [INSTR_ADDR],Y -.3865d0 9f e3 e6 af sta $afe6e3,x STA @lOPL3_R_WAVE_SELECT+3,X -.3865d4 29 07 and #$07 AND #$7 -.3865d6 a0 28 09 ldy #$0928 LDY #18 * 128 + 40 -.3865d9 20 b1 5d jsr $385db1 JSR WRITE_HEX -.3865dc 60 rts RTS -.3865dd INIT_KEYBOARD -.3865dd 0b phd PHD -.3865de 48 pha PHA -.3865df da phx PHX -.3865e0 08 php PHP -.3865e1 18 clc CLC -.3865e2 e2 20 sep #$20 SEP #$20 ; set A short -.3865e4 a9 00 lda #$00 LDA #$00 -.3865e6 8d 87 0f sta $0f87 STA KEYBOARD_SC_FLG ; Clear the Keyboard Flag -.3865e9 20 8b 66 jsr $38668b JSR Poll_Inbuf -.3865ec a9 aa lda #$aa LDA #$AA ;Send self test command -.3865ee 8f 64 10 af sta $af1064 STA KBD_CMD_BUF -.3865f2 20 96 66 jsr $386696 JSR Poll_Outbuf ; -.3865f5 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ;Check self test result -.3865f9 c9 55 cmp #$55 CMP #$55 -.3865fb f0 03 beq $386600 BEQ passAAtest -.3865fd 82 6f 00 brl $38666f BRL initkb_loop_out -.386600 passAAtest -.386600 a9 ab lda #$ab LDA #$AB ;Send test Interface command -.386602 8f 64 10 af sta $af1064 STA KBD_CMD_BUF -.386606 20 96 66 jsr $386696 JSR Poll_Outbuf ; -.386609 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ;Display Interface test results -.38660d c9 00 cmp #$00 CMP #$00 ;Should be 00 -.38660f f0 03 beq $386614 BEQ passABtest -.386611 82 5b 00 brl $38666f BRL initkb_loop_out -.386614 passABtest -.386614 a9 60 lda #$60 LDA #$60 ; Send Command 0x60 so to Enable Interrupt -.386616 8f 64 10 af sta $af1064 STA KBD_CMD_BUF -.38661a 20 8b 66 jsr $38668b JSR Poll_Inbuf ; -.38661d a9 69 lda #$69 LDA #%01101001 ; Enable Interrupt -.38661f 8f 60 10 af sta $af1060 STA KBD_DATA_BUF -.386623 20 8b 66 jsr $38668b JSR Poll_Inbuf ; -.386626 a9 ff lda #$ff LDA #$FF ; Send Keyboard Reset command -.386628 8f 60 10 af sta $af1060 STA KBD_DATA_BUF -.38662c a2 ff ff ldx #$ffff LDX #$FFFF -.38662f ca dex DLY_LOOP1 DEX -.386630 ea nop NOP -.386631 ea nop NOP -.386632 ea nop NOP -.386633 ea nop NOP -.386634 ea nop NOP -.386635 ea nop NOP -.386636 ea nop NOP -.386637 ea nop NOP -.386638 e0 00 00 cpx #$0000 CPX #$0000 -.38663b d0 f2 bne $38662f BNE DLY_LOOP1 -.38663d 20 96 66 jsr $386696 JSR Poll_Outbuf ; -.386640 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ; Read Output Buffer -.386644 DO_CMD_F4_AGAIN -.386644 20 8b 66 jsr $38668b JSR Poll_Inbuf ; -.386647 a9 f4 lda #$f4 LDA #$F4 ; Enable the Keyboard -.386649 8f 60 10 af sta $af1060 STA KBD_DATA_BUF -.38664d 20 96 66 jsr $386696 JSR Poll_Outbuf ; -.386650 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ; Clear the Output buffer -.386654 c9 fa cmp #$fa CMP #$FA -.386656 d0 ec bne $386644 BNE DO_CMD_F4_AGAIN -.386658 20 a1 66 jsr $3866a1 JSR INIT_MOUSE -.38665b af 40 01 00 lda $000140 LDA @lINT_PENDING_REG0 ; Read the Pending Register & -.38665f 29 80 and #$80 AND #FNX0_INT07_MOUSE -.386661 8f 40 01 00 sta $000140 STA @lINT_PENDING_REG0 ; Writing it back will clear the Active Bit -.386665 af 41 01 00 lda $000141 LDA @lINT_PENDING_REG1 ; Read the Pending Register & -.386669 29 01 and #$01 AND #FNX1_INT00_KBD -.38666b 8f 41 01 00 sta $000141 STA @lINT_PENDING_REG1 ; Writing it back will clear the Active Bit -.38666f initkb_loop_out -.38666f InitSuccess -.38666f 28 plp PLP -.386670 fa plx PLX -.386671 68 pla PLA -.386672 2b pld PLD -.386673 60 rts RTS -.386674 INIT_MOUSEPOINTER -.386674 c2 30 rep #$30 REP #$30 ; set A&X long -.386676 a2 80 53 ldx #$5380 LDX #<>MOUSE_POINTER_PTR -.386679 a9 00 01 lda #$0100 LDA #$100 -.38667c a0 00 05 ldy #$0500 LDY #$0500 -.38667f 54 af 38 mvn $38,$af MVN #`MOUSE_POINTER_PTR,#$AF -.386682 e2 20 sep #$20 SEP #$20 ; set A short -.386684 a9 01 lda #$01 LDA #$01 -.386686 8f 00 07 af sta $af0700 STA @lMOUSE_PTR_CTRL_REG_L ; Enable Mouse, Mouse Pointer Graphic Bank 0 -.38668a 60 rts RTS -.38668b Poll_Inbuf -.38668b af 64 10 af lda $af1064 LDA STATUS_PORT ; Load Status Byte -.38668f 29 02 and #$02 AND #386763 01 01 01 01 01 01 01 01 CHANNELS .byte 1,1,1,1,1,1,1,1,1 ->38676b 01 -.38676c TOGGLE_CHANNEL -.38676c aa tax TAX -.38676d ca dex DEX -.38676e bf 63 67 38 lda $386763,x LDA CHANNELS,X -.386772 49 01 eor #$01 EOR #1 -.386774 9f 63 67 38 sta $386763,x STA CHANNELS,X -.386778 60 rts RTS ->386779 80 80 80 31 33 80 36 38 SCAN_TO_NOTE .text $80, $80, $80, $31, $33, $80, $36, $38, $3A, $80, $41, $80, $80, $80, $80, $80 ->386781 3a 80 41 80 80 80 80 80 ->386789 2c 32 34 35 37 39 3b 3c .text $2C, $32, $34, $35, $37, $39, $3B, $3C, $42, $80, $80, $80, $80, $80, $80, $21 ->386791 42 80 80 80 80 80 80 21 ->386799 23 80 26 28 2a 80 80 80 .text $23, $80, $26, $28, $2A, $80, $80, $80, $80, $80, $80, $80, $1C, $22, $24, $25 ->3867a1 80 80 80 80 1c 22 24 25 ->3867a9 27 29 2b 80 80 80 80 80 .text $27, $29, $2B, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 ->3867b1 80 80 80 80 80 80 80 80 ->3867b9 80 80 80 80 80 80 80 80 .text $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 ->3867c1 80 80 80 80 80 80 80 80 ->3867c9 80 80 80 80 80 80 80 80 .text $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 ->3867d1 80 80 80 80 80 80 80 80 -.3867d9 MIDI_COMMAND_TABLE ->3867d9 02 5c 02 5c .word <>NOTE_OFF, <>NOTE_ON ->3867dd 82 5c 82 5c .word <>POLY_PRESSURE, <>CONTROL_CHANGE ->3867e1 ab 5c ab 5c .word <>PROGRAM_CHANGE, <>CHANNEL_PRESSURE ; these two command expect 1 datat byte only - no running status ->3867e5 82 5c c2 5c .word <>PITCH_BEND, <>SYSTEM_COMMAND ->3867e9 da 5c .word <>INVALID_COMMAND + +;****** Processing file: SDOS.asm + + +;****** Processing file: SDCard_Controller_def.asm + +=$afea00 SDC_VERSION_REG = $AFEA00 ; Ought to read 12 +=$afea01 SDC_CONTROL_REG = $AFEA01 ; Bit0 1 = Reset core logic, and registers. Self clearing +=$afea02 SDC_TRANS_TYPE_REG = $AFEA02 ; Bit[1:0] +=$00 SDC_TRANS_DIRECT = $00 ; 00 = Direct Access +=$01 SDC_TRANS_INIT_SD = $01 ; 01 = Init SD +=$02 SDC_TRANS_READ_BLK = $02 ; 10 = RW_READ_BLOCK (512 Bytes) +=$03 SDC_TRANS_WRITE_BLK = $03 ; 11 = RW_WRITE_SD_BLOCK +=$afea03 SDC_TRANS_CONTROL_REG = $AFEA03 +=$01 SDC_TRANS_START = $01 +=$afea04 SDC_TRANS_STATUS_REG = $AFEA04 +=$01 SDC_TRANS_BUSY = $01 ; 1= Transaction Busy +=$afea05 SDC_TRANS_ERROR_REG = $AFEA05 +=$00 SDC_TRANS_INIT_NO_ERR = $00 ; Init Error Report [1:0] +=$01 SDC_TRANS_INIT_CMD0_ERR = $01 +=$02 SDC_TRANS_INIT_CMD1_ERR = $02 +=$00 SDC_TRANS_RD_NO_ERR = $00 ; Read Error Report [3:2] +=$04 SDC_TRANS_RD_CMD_ERR = $04 +=$08 SDC_TRANS_RD_TOKEN_ERR = $08 +=$00 SDC_TRANS_WR_NO_ERR = $00 ; Write Report Error [5:4] +=$10 SDC_TRANS_WR_CMD_ERR = $10 ; +=$20 SDC_TRANS_WR_DATA_ERR = $20 +=$30 SDC_TRANS_WR_BUSY_ERR = $30 +=$afea06 SDC_DIRECT_ACCESS_REG = $AFEA06 ; SPI Direct Read and Write - Set DATA before initiating direct Access Transaction +=$afea07 SDC_SD_ADDR_7_0_REG = $AFEA07 ; Set the ADDR before a block read or block write +=$afea08 SDC_SD_ADDR_15_8_REG = $AFEA08 ; Addr0 [8:0] Always should be 0, since each block is 512Bytes +=$afea09 SDC_SD_ADDR_23_16_REG = $AFEA09 +=$afea0a SDC_SD_ADDR_31_24_REG = $AFEA0A +=$afea0b SDC_SPI_CLK_DEL_REG = $AFEA0B +=$afea10 SDC_RX_FIFO_DATA_REG = $AFEA10 ; Data from the Block Read +=$afea12 SDC_RX_FIFO_DATA_CNT_HI = $AFEA12 ; How many Bytes in the FIFO HI +=$afea13 SDC_RX_FIFO_DATA_CNT_LO = $AFEA13 ; How many Bytes in the FIFO LO +=$afea14 SDC_RX_FIFO_CTRL_REG = $AFEA14 ; Bit0 Force Empty - Set to 1 to clear FIFO, self clearing (the bit) +=$afea20 SDC_TX_FIFO_DATA_REG = $AFEA20 ; Write Data Block here +=$afea24 SDC_TX_FIFO_CTRL_REG = $AFEA24 ; Bit0 Force Empty - Set to 1 to clear FIFO, self clearing (the bit) + +;****** Return to file: SDOS.asm + + +;****** Processing file: GABE_Control_Registers_def.asm + +=$afe880 GABE_MSTR_CTRL = $AFE880 +=$01 GABE_CTRL_PWR_LED = $01 ; Controls the LED in the Front of the case (Next to the reset button) +=$02 GABE_CTRL_SDC_LED = $02 ; Controls the LED in the Front of the Case (Next to SDCard) +=$10 GABE_CTRL_BUZZER = $10 ; Controls the Buzzer +=$80 GABE_CTRL_WRM_RST = $80 ; Warm Reset (needs to Setup other registers) +=$afe881 GABE_NOTUSED = $AFE881 ; Reserved for future use +=$afe882 GABE_RST_AUTH0 = $AFE882 ; Must Contain the BYTE $AD for Reset to Activate +=$afe883 GABE_RST_AUTH1 = $AFE883 ; Must Contain the BYTE $DE for Reset to Activate +=$afe884 GABE_RNG_DAT_LO = $AFE884 ; Low Part of 16Bit RNG Generator +=$afe885 GABE_RNG_DAT_HI = $AFE885 ; Hi Part of 16Bit RNG Generator +=$afe884 GABE_RNG_SEED_LO = $AFE884 ; Low Part of 16Bit RNG Generator +=$afe885 GABE_RNG_SEED_HI = $AFE885 ; Hi Part of 16Bit RNG Generator +=$afe886 GABE_RNG_STAT = $AFE886 ; +=$80 GABE_RNG_LFSR_DONE = $80 ; indicates that Output = SEED Database +=$afe886 GABE_RNG_CTRL = $AFE886 ; +=$01 GABE_RNG_CTRL_EN = $01 ; Enable the LFSR BLOCK_LEN +=$02 GABE_RNG_CTRL_DV = $02 ; After Setting the Seed Value, Toggle that Bit for it be registered +=$afe887 GABE_SYS_STAT = $AFE887 ; +=$01 GABE_SYS_STAT_MID0 = $01 ; Machine ID -- LSB +=$02 GABE_SYS_STAT_MID1 = $02 ; Machine ID -- MSB +=$08 GABE_SYS_STAT_EXP = $08 ; if Zero, there is an Expansion Card Preset +=$40 GABE_SYS_STAT_CPUA = $40 ; Indicates the (8bit/16bit) Size of the Accumulator +=$80 GABE_SYS_STAT_CPUX = $80 ; Indicates the (8bit/16bit) Size of the Accumulator + +;****** Return to file: SDOS.asm + + +;****** Processing file: ch376s_inc.asm + +=$00 DEF_NULL_CHAR = $00 +=$2a DEF_WILDCARD_CHAR = $2A +=$5c DEF_SEPAR_CHAR1 = $5C +=$2f DEF_SEPAR_CHAR2 = $2F +=$06 CH_CMD_CHECK_EXIST = $06 +=$0c CH_CMD_GET_FILE_SIZE = $0C +=$15 CH_CMD_SET_MODE = $15 ; Set the Controller's mode, in our Case in SDCARD +=$22 CH_CMD_GET_STATUS = $22 ; Get Interrupt Status +=$27 CH_CMD_RD_DATA0 = $27 ; +=$2c CH_CMD_WR_DATA = $2C +=$2f CH_CMD_SET_FILENAME = $2F ;SET_FILE_NAME +=$31 CH_CMD_DISK_MOUNT = $31 ;DISK_MOUNT +=$32 CH_CMD_FILE_OPEN = $32 ;FILE_OPEN +=$33 CH_CMD_FILE_ENUM_GO = $33 +=$36 CH_CMD_FILE_CLOSE = $36 ; To be Implemented +=$39 CH_CMD_BYTE_LOCATE = $39 +=$3a CH_CMD_BYTE_READ = $3A +=$3b CH_CMD_BYTE_RD_GO = $3B +=$3c CH_CMD_BYTE_WRITE = $3C +=$3d CH_CMD_BYTE_WR_GO = $3D +=$44 CH_VAR_DISK_ROOT = $44 +=$48 CH_VAR_DSK_TOTAL_CLUS = $48 +=$4c CH_VAR_DSK_START_LBA = $4C +=$50 CH_VAR_DSK_DAT_START = $50 +=$54 CH_VAR_LBA_BUFFER = $54 +=$58 CH_VAR_LBA_CURRENT = $58 +=$5c CH_VAR_FAT_DIR_LBA = $5C +=$60 CH_VAR_START_CLUSTER = $60 +=$64 CH_VAR_CURRENT_CLUST = $64 +=$68 CH_VAR_FILE_SIZE = $68 +=$6c CH_VAR_CURRENT_OFFSET = $6C +=$14 CH376S_STAT_SUCCESS = $14 +=$17 CH376S_STAT_BUF_OVF = $17 +=$1d CH376S_STAT_DSK_RD = $1D +=$1e CH376S_STAT_DSK_WR = $1E +=$41 CH376S_ERR_OPEN_DIR = $41 +=$42 CH376S_ERR_MISS_FIL = $42 +=$43 CH376S_ERR_FOUND_NAME = $43 +=$82 CH376S_ERR_DISK_DSC = $82 +=$84 CH376S_ERR_LRG_SEC = $84 +=$92 CH376S_ERR_PARTTION = $92 +=$a1 CH376S_ERR_NOT_FORM = $A1 +=$b1 CH376S_ERR_DSK_FULL = $B1 +=$b2 CH376S_FDT_OVER = $B2 +=$b4 CH376S_FILE_CLOSED = $B4 +=$51 CH376S_CMD_RET_SUCCESS = $51 +=$5f CH376S_CMD_RET_ABORT = $5F +=$00 SDCARD_PRSNT_NO_CARD = $00 +=$01 SDCARD_PRSNT_CD = $01 +=$02 SDCARD_PRSNT_WP = $02 +=$04 SDCARD_PRSNT_MNTED = $04 ; Card is present and Mounted1 + +;****** Return to file: SDOS.asm + +=$5f00 SD_FIRST_SECTOR = $5F00 ; 4 bytes +=$5f04 SD_FAT_OFFSET = $5F04 ; 4 bytes +=$5f08 SD_ROOT_OFFSET = $5F08 ; 4 bytes +=$5f0c SD_DATA_OFFSET = $5F0C ; 4 bytes +=$5f10 SD_RESERVED_SECTORS = $5F10 ; 2 bytes +=$5f12 SD_SECTORS_PER_FAT = $5F12 ; 2 bytes +=$5f14 SD_BYTES_PER_SECTOR = $5F14 ; 2 bytes +=$5f16 SD_FAT_COUNT = $5F16 ; 2 bytes +=$5f18 SD_SECTORS = $5F18 ; 4 bytes +=$5f1c SD_ROOT_ENTRIES = $5F1C ; 2 bytes +=$5f20 SD_DIR_OFFSET = $5F20 ; 2 bytes - use this to read the root directory +=$5f22 SD_NEXT_CLUSTER = $5F22 ; 2 bytes - use this to point to the next file cluster in the FAT +=$5f24 SD_SECTORS_PER_CLUSTER = $5F24 ; 2 byte +=$5f26 SD_FAT16 = $5F26 ; 1 byte - write 1 for FAT16, 0 for FAT12 +=$5f27 CLUSTER_PTR = $5F27 ; 2 bytes +=$5f29 LOG_CLUSTER_PTR = $5F29 ; 4 bytes +=$0080 SD_DATA = $0080 ; 3 bytes - used indirect addressing +=$0083 SD_TMP_DATA = $0083 ; 3 bytes - used indirect addressing +=$0086 SD_DATA_FAT_PAGE = $0086 ; 2 bytes - last FAT page that was loaded +=$0088 SD_MULT_AREA = $0088 ; 4 bytes +=$6000 SD_BLK_BEGIN = $6000 ; 512 bytes +=$6200 SD_BTSCT_BEGIN = $6200 ; 512 bytes +=$6400 SD_ROOT_BEGIN = $6400 ; 512 bytes +=$6600 FAT_DATA = $6600 ; 512 bytes +.0000 simplefilestruct +>0000 name .fill 8 +>0008 extension .fill 3 +>000b 00 type .byte 0 +>000c 00 00 size_l .word 0 +>000e 00 00 size_h .word 0 +.0000 fatrec +>0000 name .fill 8 +>0008 extension .fill 3 +>000b 00 type .byte 0 +>000c 00 user_attr .byte 0 +>000d 00 deleted_char .byte 0 ; this is only populated when byte 1 is $E5 - deleted_char +>000e 00 00 create_time .word 0 +>0010 00 00 create_date .word 0 +>0012 00 00 access_date .word 0 +>0014 00 00 access_rights .word 0 +>0016 00 00 mod_time .word 0 +>0018 00 00 mod_date .word 0 +>001a 00 00 cluster .word 0 +>001c 00 00 size_l .word 0 +>001e 00 00 size_h .word 0 +.386286 ISDOS_INIT +.386286 af 80 e8 af lda $afe880 LDA GABE_MSTR_CTRL +.38628a 29 fd and #$fd AND #~GABE_CTRL_SDC_LED +.38628c 09 02 ora #$02 ORA #GABE_CTRL_SDC_LED +.38628e 8f 80 e8 af sta $afe880 STA GABE_MSTR_CTRL +.386292 c2 20 rep #$20 REP #$20 ; set A long +.386294 a9 00 00 lda #$0000 LDA #0 +.386297 8d 08 5f sta $5f08 STA SD_ROOT_OFFSET +.38629a 8d 22 5f sta $5f22 STA SD_NEXT_CLUSTER +.38629d e2 20 sep #$20 SEP #$20 ; set A short +.38629f 85 3f sta $3f STA SDCARD_PRSNT_MNT +.3862a1 a9 01 lda #$01 LDA #SDC_TRANS_INIT_SD +.3862a3 8f 02 ea af sta $afea02 STA SDC_TRANS_TYPE_REG +.3862a7 a9 01 lda #$01 LDA #SDC_TRANS_START +.3862a9 8f 03 ea af sta $afea03 STA SDC_TRANS_CONTROL_REG +.3862ad af 04 ea af lda $afea04 SD_WAIT LDA SDC_TRANS_STATUS_REG +.3862b1 29 01 and #$01 AND #SDC_TRANS_BUSY +.3862b3 c9 01 cmp #$01 CMP #SDC_TRANS_BUSY +.3862b5 f0 f6 beq $3862ad BEQ SD_WAIT +.3862b7 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG +.3862bb f0 08 beq $3862c5 BEQ SD_INIT_SUCCESS +.3862bd a2 95 68 ldx #$6895 LDX #<>sd_no_card_msg +.3862c0 20 aa 61 jsr $3861aa JSR DISPLAY_MSG +.3862c3 80 06 bra $3862cb BRA SD_INIT_DONE +.3862c5 SD_INIT_SUCCESS +.3862c5 a9 01 lda #$01 LDA #1 +.3862c7 85 3f sta $3f STA SDCARD_PRSNT_MNT +.3862c9 80 00 bra $3862cb BRA SD_INIT_DONE +.3862cb SD_INIT_DONE +.3862cb af 80 e8 af lda $afe880 LDA GABE_MSTR_CTRL +.3862cf 29 fd and #$fd AND #~GABE_CTRL_SDC_LED +.3862d1 8f 80 e8 af sta $afe880 STA GABE_MSTR_CTRL +.3862d5 6b rtl RTL +.3862d6 CALC_OFFSET_BYTES +.3862d6 a5 8a lda $8a LDA SD_MULT_AREA + 2 ; high 16-bits +.3862d8 0a asl a ASL A +.3862d9 85 8b sta $8b STA SD_MULT_AREA + 3 +.3862db 18 clc CLC +.3862dc a5 88 lda $88 LDA SD_MULT_AREA +.3862de 0a asl a ASL A +.3862df 85 89 sta $89 STA SD_MULT_AREA + 1 +.3862e1 90 02 bcc $3862e5 BCC CALC_DONE +.3862e3 e6 8b inc $8b INC SD_MULT_AREA + 3 +.3862e5 CALC_DONE +.3862e5 e2 20 sep #$20 SEP #$20 ; set A short +.3862e7 64 88 stz $88 stz SD_MULT_AREA +.3862e9 c2 20 rep #$20 REP #$20 ; set A long +.3862eb 60 rts RTS +.3862ec ISDOS_READ_MBR_BOOT +.3862ec a5 3f lda $3f LDA SDCARD_PRSNT_MNT ; this must be non-zero +.3862ee d0 01 bne $3862f1 BNE RMBR_CARD_PRESENT +.3862f0 6b rtl RTL +.3862f1 RMBR_CARD_PRESENT +.3862f1 c2 20 rep #$20 REP #$20 ; set A long +.3862f3 a9 00 60 lda #$6000 LDA #SD_BLK_BEGIN +.3862f6 85 80 sta $80 STA SD_DATA +.3862f8 a9 00 00 lda #$0000 LDA #0 +.3862fb 85 82 sta $82 STA SD_DATA + 2 +.3862fd a9 00 00 lda #$0000 LDA #0 +.386300 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG +.386304 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG +.386308 e2 20 sep #$20 SEP #$20 ; set A short +.38630a 22 d6 63 38 jsl $3863d6 JSL ISDOS_READ_BLOCK +.38630e af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG +.386312 f0 01 beq $386315 BEQ SD_CONTINUE_1 +.386314 6b rtl RTL +.386315 SD_CONTINUE_1 +.386315 c2 20 rep #$20 REP #$20 ; set A long +.386317 ad fe 61 lda $61fe LDA SD_BLK_BEGIN + 510 +.38631a c9 55 aa cmp #$aa55 CMP #$AA55 +.38631d f0 01 beq $386320 BEQ VALID_SIG +.38631f 6b rtl RTL +.386320 VALID_SIG +.386320 c2 20 rep #$20 REP #$20 ; set A long +.386322 a2 be 01 ldx #$01be LDX #446 ; offset to first partition +.386325 bd 08 60 lda $6008,x LDA SD_BLK_BEGIN,X + 8 +.386328 85 88 sta $88 STA SD_MULT_AREA +.38632a bd 0a 60 lda $600a,x LDA SD_BLK_BEGIN,X + 10 +.38632d 85 8a sta $8a STA SD_MULT_AREA + 2 +.38632f 20 d6 62 jsr $3862d6 JSR CALC_OFFSET_BYTES +.386332 a5 88 lda $88 LDA SD_MULT_AREA +.386334 8d 00 5f sta $5f00 STA SD_FIRST_SECTOR +.386337 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG +.38633b a5 8a lda $8a LDA SD_MULT_AREA + 2 +.38633d 8d 02 5f sta $5f02 STA SD_FIRST_SECTOR + 2 +.386340 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG +.386344 a9 00 62 lda #$6200 LDA #SD_BTSCT_BEGIN +.386347 85 80 sta $80 STA SD_DATA +.386349 a9 00 00 lda #$0000 LDA #0 +.38634c 85 82 sta $82 STA SD_DATA + 2 +.38634e e2 20 sep #$20 SEP #$20 ; set A short +.386350 22 d6 63 38 jsl $3863d6 JSL ISDOS_READ_BLOCK +.386354 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG +.386358 f0 01 beq $38635b BEQ SD_CONTINUE_2 +.38635a 6b rtl RTL +.38635b SD_CONTINUE_2 +.38635b c2 20 rep #$20 REP #$20 ; set A long +.38635d a2 00 00 ldx #$0000 LDX #0 +.386360 bd 0b 62 lda $620b,x LDA SD_BTSCT_BEGIN,X + $B +.386363 8d 14 5f sta $5f14 STA SD_BYTES_PER_SECTOR +.386366 e2 20 sep #$20 SEP #$20 ; set A short +.386368 bd 0d 62 lda $620d,x LDA SD_BTSCT_BEGIN,X + $D +.38636b 8d 24 5f sta $5f24 STA SD_SECTORS_PER_CLUSTER +.38636e a9 00 lda #$00 LDA #0 +.386370 8d 25 5f sta $5f25 STA SD_SECTORS_PER_CLUSTER + 1 +.386373 c2 20 rep #$20 REP #$20 ; set A long +.386375 bd 10 62 lda $6210,x LDA SD_BTSCT_BEGIN,X + $10 +.386378 29 ff 00 and #$00ff AND #$FF +.38637b 8d 16 5f sta $5f16 STA SD_FAT_COUNT +.38637e bd 11 62 lda $6211,x LDA SD_BTSCT_BEGIN,X + $11 +.386381 8d 1c 5f sta $5f1c STA SD_ROOT_ENTRIES +.386384 bd 13 62 lda $6213,x LDA SD_BTSCT_BEGIN,X + $13 +.386387 f0 28 beq $3863b1 BEQ SD_LARGE_SECTORS +.386389 8d 18 5f sta $5f18 STA SD_SECTORS +.38638c a9 00 00 lda #$0000 LDA #0 +.38638f 8d 1a 5f sta $5f1a STA SD_SECTORS + 2 +.386392 ad 18 5f lda $5f18 LDA SD_SECTORS +.386395 8d 12 01 sta $0112 STA D0_OPERAND_B +.386398 ad 24 5f lda $5f24 LDA SD_SECTORS_PER_CLUSTER +.38639b 8d 10 01 sta $0110 STA D0_OPERAND_A +.38639e ad 14 01 lda $0114 LDA D0_RESULT +.3863a1 c9 f7 0f cmp #$0ff7 CMP #$FF7 +.3863a4 b0 17 bcs $3863bd BCS SD_SMALL_SECTORS ; number of sectors is more than fat12 can handle +.3863a6 e2 20 sep #$20 SEP #$20 ; set A short +.3863a8 a9 00 lda #$00 LDA #0 +.3863aa 8d 26 5f sta $5f26 STA SD_FAT16 +.3863ad c2 20 rep #$20 REP #$20 ; set A long +.3863af 80 15 bra $3863c6 BRA SD_FAT12 +.3863b1 SD_LARGE_SECTORS +.3863b1 bd 20 62 lda $6220,x LDA SD_BTSCT_BEGIN,X + $20 +.3863b4 8d 18 5f sta $5f18 STA SD_SECTORS +.3863b7 bd 22 62 lda $6222,x LDA SD_BTSCT_BEGIN,X + $22 +.3863ba 8d 1a 5f sta $5f1a STA SD_SECTORS + 2 +.3863bd SD_SMALL_SECTORS +.3863bd e2 20 sep #$20 SEP #$20 ; set A short +.3863bf a9 01 lda #$01 LDA #1 +.3863c1 8d 26 5f sta $5f26 STA SD_FAT16 +.3863c4 c2 20 rep #$20 REP #$20 ; set A long +.3863c6 SD_FAT12 +.3863c6 bd 0e 62 lda $620e,x LDA SD_BTSCT_BEGIN,X + $E +.3863c9 8d 10 5f sta $5f10 STA SD_RESERVED_SECTORS +.3863cc bd 16 62 lda $6216,x LDA SD_BTSCT_BEGIN,X + $16 +.3863cf 8d 12 5f sta $5f12 STA SD_SECTORS_PER_FAT +.3863d2 20 c5 67 jsr $3867c5 JSR COMPUTE_FAT_ROOT_DATA_OFFSETS +.3863d5 RMBR_DONE +.3863d5 6b rtl RTL +.3863d6 ISDOS_READ_BLOCK +.3863d6 5a phy PHY +.3863d7 af 80 e8 af lda $afe880 LDA GABE_MSTR_CTRL +.3863db 29 fd and #$fd AND #~GABE_CTRL_SDC_LED +.3863dd 09 02 ora #$02 ORA #GABE_CTRL_SDC_LED +.3863df 8f 80 e8 af sta $afe880 STA GABE_MSTR_CTRL +.3863e3 a5 3f lda $3f LDA SDCARD_PRSNT_MNT +.3863e5 d0 02 bne $3863e9 BNE SR_CARD_PRESENT +.3863e7 80 2d bra $386416 BRA SR_DONE +.3863e9 SR_CARD_PRESENT +.3863e9 a9 02 lda #$02 LDA #SDC_TRANS_READ_BLK +.3863eb 8f 02 ea af sta $afea02 STA SDC_TRANS_TYPE_REG +.3863ef a9 01 lda #$01 LDA #SDC_TRANS_START +.3863f1 8f 03 ea af sta $afea03 STA SDC_TRANS_CONTROL_REG +.3863f5 af 04 ea af lda $afea04 SR_WAIT LDA SDC_TRANS_STATUS_REG +.3863f9 29 01 and #$01 AND #SDC_TRANS_BUSY +.3863fb c9 01 cmp #$01 CMP #SDC_TRANS_BUSY +.3863fd f0 f6 beq $3863f5 BEQ SR_WAIT +.3863ff af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG +.386403 f0 02 beq $386407 BEQ SD_READ_BLOCK_OK +.386405 80 0f bra $386416 BRA SR_DONE +.386407 SD_READ_BLOCK_OK +.386407 a0 00 00 ldy #$0000 LDY #0 +.38640a SR_READ_LOOP +.38640a af 10 ea af lda $afea10 LDA SDC_RX_FIFO_DATA_REG +.38640e 97 80 sta [$80],y STA [SD_DATA],Y +.386410 c8 iny INY +.386411 c0 00 02 cpy #$0200 CPY #512 +.386414 d0 f4 bne $38640a BNE SR_READ_LOOP +.386416 SR_DONE +.386416 a9 01 lda #$01 LDA #1 +.386418 8f 14 ea af sta $afea14 STA SDC_RX_FIFO_CTRL_REG +.38641c af 80 e8 af lda $afe880 LDA GABE_MSTR_CTRL +.386420 29 fd and #$fd AND #~GABE_CTRL_SDC_LED +.386422 8f 80 e8 af sta $afe880 STA GABE_MSTR_CTRL +.386426 7a ply PLY +.386427 6b rtl RTL +.386428 DISPLAY_FAT_NAME +.386428 48 pha PHA ; - store the value of filetype +.386429 a0 00 00 ldy #$0000 LDY #0 +.38642c _RD_VOLNAME_LOOP +.38642c b7 80 lda [$80],y LDA [SD_DATA],Y +.38642e 22 18 10 00 jsl $001018 JSL PUTC +.386432 c8 iny INY +.386433 c0 08 00 cpy #$0008 CPY #8 +.386436 f0 07 beq $38643f BEQ _RD_DOT +.386438 c0 0b 00 cpy #$000b CPY #11 +.38643b d0 ef bne $38642c BNE _RD_VOLNAME_LOOP +.38643d 80 0e bra $38644d BRA _DFAT_NAME_DONE +.38643f _RD_DOT +.38643f 68 pla PLA ; - read the value of filetype +.386440 48 pha PHA ; - store the value of filetype +.386441 89 18 bit #$18 BIT #$18 +.386443 d0 e7 bne $38642c BNE _RD_VOLNAME_LOOP +.386445 a9 2e lda #$2e LDA #"." +.386447 22 18 10 00 jsl $001018 JSL PUTC +.38644b 80 df bra $38642c BRA _RD_VOLNAME_LOOP +.38644d _DFAT_NAME_DONE +.38644d 68 pla PLA ; - read the value of filetype +.38644e 89 18 bit #$18 BIT #$18 +.386450 d0 3b bne $38648d BNE RD_DFAT_DONE +.386452 a9 38 lda #$38 LDA #`sd_cluster_str +.386454 8b phb PHB +.386455 48 pha PHA +.386456 ab plb PLB +.386457 a2 c4 69 ldx #$69c4 LDX #<>sd_cluster_str +.38645a 22 1c 10 00 jsl $00101c JSL PUTS +.38645e ab plb PLB +.38645f a0 1b 00 ldy #$001b LDY #fatrec.cluster + 1 +.386462 b7 80 lda [$80],y LDA [SD_DATA],Y +.386464 22 80 10 00 jsl $001080 JSL PRINTAH +.386468 a0 1a 00 ldy #$001a LDY #fatrec.cluster +.38646b b7 80 lda [$80],y LDA [SD_DATA],Y +.38646d 22 80 10 00 jsl $001080 JSL PRINTAH +.386471 a9 38 lda #$38 LDA #`sd_filesize_str +.386473 8b phb PHB +.386474 48 pha PHA +.386475 ab plb PLB +.386476 a2 cf 69 ldx #$69cf LDX #<>sd_filesize_str +.386479 22 1c 10 00 jsl $00101c JSL PUTS +.38647d ab plb PLB +.38647e a0 1f 00 ldy #$001f LDY #fatrec.size_h + 1 +.386481 RD_SIZE_LOOP +.386481 b7 80 lda [$80],y LDA [SD_DATA],Y +.386483 22 80 10 00 jsl $001080 JSL PRINTAH +.386487 88 dey DEY +.386488 c0 1b 00 cpy #$001b CPY #$1B +.38648b d0 f4 bne $386481 BNE RD_SIZE_LOOP +.38648d RD_DFAT_DONE +.38648d a9 0d lda #$0d LDA #$D +.38648f 22 18 10 00 jsl $001018 JSL PUTC +.386493 60 rts RTS +.386494 ISDOS_DISPLAY_ROOT_DIR +.386494 a5 3f lda $3f LDA SDCARD_PRSNT_MNT ; this must be non-zero +.386496 d0 01 bne $386499 BNE RD_CARD_PRESENT +.386498 6b rtl RTL +.386499 RD_CARD_PRESENT +.386499 c2 20 rep #$20 REP #$20 ; set A long +.38649b a9 00 00 lda #$0000 LDA #0 ; reset the root entries offset +.38649e 8d 20 5f sta $5f20 STA SD_DIR_OFFSET +.3864a1 RD_NEXT_SECTOR +.3864a1 a9 00 64 lda #$6400 LDA #SD_ROOT_BEGIN +.3864a4 85 80 sta $80 STA SD_DATA +.3864a6 a9 00 00 lda #$0000 LDA #0 +.3864a9 85 82 sta $82 STA SD_DATA + 2 +.3864ab ad 20 5f lda $5f20 LDA SD_DIR_OFFSET ; multiply by 512 +.3864ae 0a asl a ASL A +.3864af eb xba XBA +.3864b0 8d 20 01 sta $0120 STA ADDER_A +.3864b3 a9 00 00 lda #$0000 LDA #0 +.3864b6 8d 22 01 sta $0122 STA ADDER_A + 2 +.3864b9 ad 08 5f lda $5f08 LDA SD_ROOT_OFFSET +.3864bc 8d 24 01 sta $0124 STA ADDER_B +.3864bf ad 0a 5f lda $5f0a LDA SD_ROOT_OFFSET+2 +.3864c2 8d 26 01 sta $0126 STA ADDER_B + 2 +.3864c5 ad 28 01 lda $0128 LDA ADDER_R +.3864c8 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG +.3864cc ad 2a 01 lda $012a LDA ADDER_R + 2 +.3864cf 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG +.3864d3 e2 20 sep #$20 SEP #$20 ; set A short +.3864d5 22 d6 63 38 jsl $3863d6 JSL ISDOS_READ_BLOCK +.3864d9 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG +.3864dd f0 08 beq $3864e7 BEQ RD_DIR_ENTRY +.3864df a2 35 69 ldx #$6935 LDX #<>SD_ROOT_ERROR_MSG +.3864e2 20 aa 61 jsr $3861aa JSR DISPLAY_MSG +.3864e5 80 6a bra $386551 BRA RD_DONE +.3864e7 RD_DIR_ENTRY +.3864e7 a7 80 lda [$80] LDA [SD_DATA] +.3864e9 d0 04 bne $3864ef BNE RD_CONTINUE ; if first byte is 0, entry is available and there are no following entries +.3864eb 5c 51 65 38 jmp $386551 JML RD_DONE +.3864ef RD_CONTINUE +.3864ef c9 e5 cmp #$e5 CMP #$E5 +.3864f1 f0 35 beq $386528 BEQ RD_SKIP +.3864f3 RD_LOOP +.3864f3 a0 0b 00 ldy #$000b LDY #fatrec.type +.3864f6 b7 80 lda [$80],y LDA [SD_DATA],Y +.3864f8 c9 0f cmp #$0f CMP #$F ; long file name +.3864fa d0 04 bne $386500 BNE RD_NOT_VFAT +.3864fc 5c 7c 65 38 jmp $38657c JML RD_READ_LONG_FILENAME +.386500 RD_NOT_VFAT +.386500 89 02 bit #$02 BIT #2 ; hidden +.386502 f0 02 beq $386506 BEQ RD_NOT_HIDDEN +.386504 80 22 bra $386528 BRA RD_SKIP +.386506 RD_NOT_HIDDEN +.386506 89 08 bit #$08 BIT #8 ; volume name +.386508 f0 04 beq $38650e BEQ RD_NOT_VOLUME +.38650a 5c 67 65 38 jmp $386567 JML RD_READ_VOLNAME +.38650e RD_NOT_VOLUME +.38650e 89 10 bit #$10 BIT #$10 ; directory +.386510 f0 04 beq $386516 BEQ RD_NOT_DIRECTORY +.386512 5c 52 65 38 jmp $386552 JML RD_DIRNAME +.386516 RD_NOT_DIRECTORY +.386516 48 pha PHA ; - store the value of filetype +.386517 a9 38 lda #$38 LDA #`sd_filename +.386519 8b phb PHB +.38651a 48 pha PHA +.38651b ab plb PLB +.38651c a2 b6 69 ldx #$69b6 LDX #<>sd_filename +.38651f 22 1c 10 00 jsl $00101c JSL PUTS +.386523 ab plb PLB +.386524 68 pla PLA +.386525 20 28 64 jsr $386428 JSR DISPLAY_FAT_NAME +.386528 RD_SKIP +.386528 c2 20 rep #$20 REP #$20 ; set A long +.38652a a5 80 lda $80 LDA SD_DATA +.38652c 29 e0 01 and #$01e0 AND #$1E0 +.38652f c9 e0 01 cmp #$01e0 CMP #$1E0 +.386532 d0 0f bne $386543 BNE RD_SKIP_NEXT +.386534 ad 20 5f lda $5f20 LDA SD_DIR_OFFSET +.386537 1a inc a INC A +.386538 cd 1c 5f cmp $5f1c CMP SD_ROOT_ENTRIES +.38653b b0 14 bcs $386551 BCS RD_DONE +.38653d 8d 20 5f sta $5f20 STA SD_DIR_OFFSET ; next sector +.386540 4c a1 64 jmp $3864a1 JMP RD_NEXT_SECTOR +.386543 RD_SKIP_NEXT +.386543 a5 80 lda $80 LDA SD_DATA +.386545 18 clc CLC +.386546 69 20 00 adc #$0020 ADC #$20 +.386549 85 80 sta $80 STA SD_DATA +.38654b e2 20 sep #$20 SEP #$20 ; set A short +.38654d 5c e7 64 38 jmp $3864e7 JML RD_DIR_ENTRY +.386551 RD_DONE +.386551 6b rtl RTL +.386552 RD_DIRNAME +.386552 48 pha PHA ; - store the value of filetype +.386553 a9 38 lda #$38 LDA #`sd_dir_name +.386555 8b phb PHB +.386556 48 pha PHA +.386557 ab plb PLB +.386558 a2 a8 69 ldx #$69a8 LDX #<>sd_dir_name +.38655b 22 1c 10 00 jsl $00101c JSL PUTS +.38655f ab plb PLB +.386560 68 pla PLA +.386561 20 28 64 jsr $386428 JSR DISPLAY_FAT_NAME +.386564 4c 28 65 jmp $386528 JMP RD_SKIP +.386567 RD_READ_VOLNAME +.386567 48 pha PHA ; - store the value of filetype +.386568 a9 38 lda #$38 LDA #`sd_volume_name +.38656a 8b phb PHB +.38656b 48 pha PHA +.38656c ab plb PLB +.38656d a2 8c 69 ldx #$698c LDX #<>sd_volume_name +.386570 22 1c 10 00 jsl $00101c JSL PUTS +.386574 ab plb PLB +.386575 68 pla PLA +.386576 20 28 64 jsr $386428 JSR DISPLAY_FAT_NAME +.386579 4c 28 65 jmp $386528 JMP RD_SKIP +.38657c RD_READ_LONG_FILENAME +.38657c 4c 28 65 jmp $386528 JMP RD_SKIP +.38657f STORE_FILE_LIST +.38657f a0 0b 00 ldy #$000b LDY #11 +.386582 c9 10 cmp #$10 CMP #$10 +.386584 f0 02 beq $386588 BEQ SF_DIR +.386586 a9 01 lda #$01 LDA #1 +.386588 SF_DIR +.386588 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y +.38658a a0 00 00 ldy #$0000 LDY #0 +.38658d a2 0b 00 ldx #$000b LDX #11 +.386590 SF_LOOP_NAME +.386590 b7 80 lda [$80],y LDA [SD_DATA],Y +.386592 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y +.386594 c8 iny INY +.386595 ca dex DEX +.386596 d0 f8 bne $386590 BNE SF_LOOP_NAME +.386598 c2 20 rep #$20 REP #$20 ; set A long +.38659a a0 1a 00 ldy #$001a LDY #fatrec.cluster +.38659d b7 80 lda [$80],y LDA [SD_DATA],Y +.38659f a0 10 00 ldy #$0010 LDY #16 +.3865a2 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y +.3865a4 a0 1c 00 ldy #$001c LDY #fatrec.size_l +.3865a7 b7 80 lda [$80],y LDA [SD_DATA],Y +.3865a9 a0 0c 00 ldy #$000c LDY #12 +.3865ac 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y +.3865ae a0 1e 00 ldy #$001e LDY #fatrec.size_h +.3865b1 b7 80 lda [$80],y LDA [SD_DATA],Y +.3865b3 a0 0e 00 ldy #$000e LDY #14 +.3865b6 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y +.3865b8 a5 51 lda $51 LDA SDOS_FILE_REC_PTR +.3865ba 18 clc CLC +.3865bb 69 12 00 adc #$0012 ADC #18 +.3865be 85 51 sta $51 STA SDOS_FILE_REC_PTR +.3865c0 e2 20 sep #$20 SEP #$20 ; set A short +.3865c2 60 rts RTS +.3865c3 ISDOS_PARSE_ROOT_DIR +.3865c3 a5 3f lda $3f LDA SDCARD_PRSNT_MNT +.3865c5 d0 01 bne $3865c8 BNE SP_CARD_PRESENT +.3865c7 6b rtl RTL +.3865c8 SP_CARD_PRESENT +.3865c8 c2 20 rep #$20 REP #$20 ; set A long +.3865ca a9 00 00 lda #$0000 LDA #0 ; reset the root entries offset +.3865cd 8d 20 5f sta $5f20 STA SD_DIR_OFFSET +.3865d0 SP_NEXT_SECTOR +.3865d0 a9 00 64 lda #$6400 LDA #SD_ROOT_BEGIN +.3865d3 85 80 sta $80 STA SD_DATA +.3865d5 a9 00 00 lda #$0000 LDA #0 +.3865d8 85 82 sta $82 STA SD_DATA + 2 +.3865da ad 20 5f lda $5f20 LDA SD_DIR_OFFSET ; multiply by 512 +.3865dd 0a asl a ASL A +.3865de eb xba XBA +.3865df 8d 20 01 sta $0120 STA ADDER_A +.3865e2 a9 00 00 lda #$0000 LDA #0 +.3865e5 8d 22 01 sta $0122 STA ADDER_A + 2 +.3865e8 ad 08 5f lda $5f08 LDA SD_ROOT_OFFSET +.3865eb 8d 24 01 sta $0124 STA ADDER_B +.3865ee ad 0a 5f lda $5f0a LDA SD_ROOT_OFFSET+2 +.3865f1 8d 26 01 sta $0126 STA ADDER_B + 2 +.3865f4 ad 28 01 lda $0128 LDA ADDER_R +.3865f7 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG +.3865fb ad 2a 01 lda $012a LDA ADDER_R + 2 +.3865fe 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG +.386602 e2 20 sep #$20 SEP #$20 ; set A short +.386604 22 d6 63 38 jsl $3863d6 JSL ISDOS_READ_BLOCK +.386608 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG +.38660c f0 04 beq $386612 BEQ SP_DIR_ENTRY +.38660e 5c 6e 66 38 jmp $38666e JML SP_DONE +.386612 SP_DIR_ENTRY +.386612 a7 80 lda [$80] LDA [SD_DATA] +.386614 d0 04 bne $38661a BNE SP_CONTINUE ; if first byte is 0, entry is available and there are no following entries +.386616 5c 6e 66 38 jmp $38666e JML SP_DONE +.38661a SP_CONTINUE +.38661a c9 e5 cmp #$e5 CMP #$E5 +.38661c f0 27 beq $386645 BEQ SP_SKIP +.38661e SP_LOOP +.38661e a0 0b 00 ldy #$000b LDY #fatrec.type +.386621 b7 80 lda [$80],y LDA [SD_DATA],Y +.386623 c9 0f cmp #$0f CMP #$F ; long file name +.386625 d0 04 bne $38662b BNE SP_NOT_VFAT +.386627 5c 45 66 38 jmp $386645 JML SP_SKIP +.38662b SP_NOT_VFAT +.38662b 89 02 bit #$02 BIT #2 ; hidden +.38662d f0 02 beq $386631 BEQ SP_NOT_HIDDEN +.38662f 80 14 bra $386645 BRA SP_SKIP +.386631 SP_NOT_HIDDEN +.386631 89 08 bit #$08 BIT #8 ; volume name +.386633 f0 04 beq $386639 BEQ SP_NOT_VOLUME +.386635 5c 45 66 38 jmp $386645 JML SP_SKIP +.386639 SP_NOT_VOLUME +.386639 89 10 bit #$10 BIT #$10 ; directory +.38663b f0 05 beq $386642 BEQ SP_NOT_DIRECTORY +.38663d 20 7f 65 jsr $38657f JSR STORE_FILE_LIST +.386640 80 03 bra $386645 BRA SP_SKIP +.386642 SP_NOT_DIRECTORY +.386642 20 7f 65 jsr $38657f JSR STORE_FILE_LIST +.386645 SP_SKIP +.386645 c2 20 rep #$20 REP #$20 ; set A long +.386647 a5 80 lda $80 LDA SD_DATA +.386649 29 e0 01 and #$01e0 AND #$1E0 ; each record in FAT is $20 bytes long +.38664c c9 e0 01 cmp #$01e0 CMP #$1E0 +.38664f d0 0f bne $386660 BNE SP_SKIP_NEXT +.386651 ad 20 5f lda $5f20 LDA SD_DIR_OFFSET +.386654 1a inc a INC A +.386655 cd 1c 5f cmp $5f1c CMP SD_ROOT_ENTRIES +.386658 b0 14 bcs $38666e BCS SP_DONE +.38665a 8d 20 5f sta $5f20 STA SD_DIR_OFFSET ; next sector +.38665d 4c d0 65 jmp $3865d0 JMP SP_NEXT_SECTOR +.386660 SP_SKIP_NEXT +.386660 a5 80 lda $80 LDA SD_DATA +.386662 18 clc CLC +.386663 69 20 00 adc #$0020 ADC #$20 +.386666 85 80 sta $80 STA SD_DATA +.386668 e2 20 sep #$20 SEP #$20 ; set A short +.38666a 5c 12 66 38 jmp $386612 JML SP_DIR_ENTRY +.38666e SP_DONE +.38666e 6b rtl RTL +.38666f ISDOS_READ_FAT_SECTOR +.38666f 48 pha PHA +.386670 a5 3f lda $3f LDA SDCARD_PRSNT_MNT +.386672 29 ff 00 and #$00ff AND #$FF +.386675 d0 02 bne $386679 BNE RF_CARD_PRESENT +.386677 68 pla PLA +.386678 6b rtl RTL +.386679 RF_CARD_PRESENT +.386679 68 pla PLA +.38667a 85 88 sta $88 STA SD_MULT_AREA +.38667c a9 00 00 lda #$0000 LDA #0 +.38667f 85 8a sta $8a STA SD_MULT_AREA + 2 +.386681 20 d6 62 jsr $3862d6 JSR CALC_OFFSET_BYTES +.386684 a5 88 lda $88 LDA SD_MULT_AREA +.386686 8d 20 01 sta $0120 STA ADDER_A +.386689 a5 8a lda $8a LDA SD_MULT_AREA + 2 +.38668b 8d 22 01 sta $0122 STA ADDER_A + 2 +.38668e ad 04 5f lda $5f04 LDA SD_FAT_OFFSET +.386691 8d 24 01 sta $0124 STA ADDER_B +.386694 ad 06 5f lda $5f06 LDA SD_FAT_OFFSET+2 +.386697 8d 26 01 sta $0126 STA ADDER_B + 2 +.38669a ad 28 01 lda $0128 LDA ADDER_R +.38669d 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG +.3866a1 ad 2a 01 lda $012a LDA ADDER_R + 2 +.3866a4 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG +.3866a8 e2 20 sep #$20 SEP #$20 ; set A short +.3866aa 22 d6 63 38 jsl $3863d6 JSL ISDOS_READ_BLOCK +.3866ae af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG +.3866b2 f0 08 beq $3866bc BEQ SD_CONTINUE_FAT +.3866b4 a2 16 69 ldx #$6916 LDX #<>SD_FAT_ERROR_MSG +.3866b7 20 aa 61 jsr $3861aa JSR DISPLAY_MSG +.3866ba 80 00 bra $3866bc BRA SD_CONTINUE_FAT +.3866bc SD_CONTINUE_FAT +.3866bc c2 20 rep #$20 REP #$20 ; set A long +.3866be 6b rtl RTL +.3866bf ISDOS_READ_DATA_CLUSTER +.3866bf 48 pha PHA +.3866c0 a5 3f lda $3f LDA SDCARD_PRSNT_MNT +.3866c2 29 ff 00 and #$00ff AND #$FF +.3866c5 d0 02 bne $3866c9 BNE SDR_CARD_PRESENT +.3866c7 68 pla PLA +.3866c8 6b rtl RTL +.3866c9 SDR_CARD_PRESENT +.3866c9 68 pla PLA +.3866ca 38 sec SEC +.3866cb e9 02 00 sbc #$0002 SBC #2 +.3866ce 8d 00 01 sta $0100 STA UNSIGNED_MULT_A +.3866d1 ad 24 5f lda $5f24 LDA SD_SECTORS_PER_CLUSTER +.3866d4 8d 02 01 sta $0102 STA UNSIGNED_MULT_B +.3866d7 ad 04 01 lda $0104 LDA UNSIGNED_MULT_RESULT +.3866da 48 pha PHA +.3866db a2 00 00 ldx #$0000 LDX #0 +.3866de SDR_NEXT_SECTOR +.3866de 85 88 sta $88 STA SD_MULT_AREA +.3866e0 a9 00 00 lda #$0000 LDA #0 +.3866e3 85 8a sta $8a STA SD_MULT_AREA + 2 +.3866e5 20 d6 62 jsr $3862d6 JSR CALC_OFFSET_BYTES +.3866e8 a5 88 lda $88 LDA SD_MULT_AREA +.3866ea 8d 20 01 sta $0120 STA ADDER_A +.3866ed a5 8a lda $8a LDA SD_MULT_AREA + 2 +.3866ef 8d 22 01 sta $0122 STA ADDER_A + 2 +.3866f2 ad 0c 5f lda $5f0c LDA SD_DATA_OFFSET +.3866f5 8d 24 01 sta $0124 STA ADDER_B +.3866f8 ad 0e 5f lda $5f0e LDA SD_DATA_OFFSET+2 +.3866fb 8d 26 01 sta $0126 STA ADDER_B + 2 +.3866fe ad 28 01 lda $0128 LDA ADDER_R +.386701 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG +.386705 ad 2a 01 lda $012a LDA ADDER_R + 2 +.386708 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG +.38670c e2 20 sep #$20 SEP #$20 ; set A short +.38670e 22 d6 63 38 jsl $3863d6 JSL ISDOS_READ_BLOCK +.386712 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG +.386716 f0 0a beq $386722 BEQ SD_CONTINUE_DATA +.386718 a9 ff lda #$ff LDA #$FF +.38671a 8d 27 5f sta $5f27 STA CLUSTER_PTR +.38671d 8d 28 5f sta $5f28 STA CLUSTER_PTR + 1 +.386720 80 17 bra $386739 BRA SD_CONTINUE_DATA_DONE +.386722 SD_CONTINUE_DATA +.386722 c2 20 rep #$20 REP #$20 ; set A long +.386724 a5 80 lda $80 LDA SD_DATA +.386726 18 clc CLC +.386727 69 00 02 adc #$0200 ADC #$200 +.38672a 85 80 sta $80 STA SD_DATA +.38672c 90 02 bcc $386730 BCC SD_CONT_NO_CARRY +.38672e e6 82 inc $82 INC SD_DATA + 2 +.386730 SD_CONT_NO_CARRY +.386730 68 pla PLA +.386731 1a inc a INC A +.386732 48 pha PHA +.386733 e8 inx INX +.386734 ec 24 5f cpx $5f24 CPX SD_SECTORS_PER_CLUSTER +.386737 d0 a5 bne $3866de BNE SDR_NEXT_SECTOR +.386739 SD_CONTINUE_DATA_DONE +.386739 c2 20 rep #$20 REP #$20 ; set A long +.38673b 68 pla PLA +.38673c 6b rtl RTL +.38673d ISDOS_READ_FILE +.38673d 48 pha PHA +.38673e a5 3f lda $3f LDA SDCARD_PRSNT_MNT +.386740 29 ff 00 and #$00ff AND #$FF +.386743 d0 02 bne $386747 BNE SD_CARD_PRESENT +.386745 68 pla PLA +.386746 6b rtl RTL +.386747 SD_CARD_PRESENT +.386747 68 pla PLA +.386748 8d 27 5f sta $5f27 STA CLUSTER_PTR +.38674b SD_CLUSTER_LOOP +.38674b 22 bf 66 38 jsl $3866bf JSL ISDOS_READ_DATA_CLUSTER +.38674f ad 26 5f lda $5f26 LDA SD_FAT16 +.386752 29 01 00 and #$0001 AND #$1 +.386755 0a asl a ASL +.386756 aa tax TAX +.386757 fc 5d 67 jsr ($38675d,x) JSR (READ_FAT_TABLE,X) +.38675a d0 ef bne $38674b BNE SD_CLUSTER_LOOP +.38675c 6b rtl RTL +>38675d 61 67 READ_FAT_TABLE .word <>FAT12_GET_NEXT_CLUSTER +>38675f 86 67 .word <>FAT16_GET_NEXT_CLUSTER +.386761 FAT12_GET_NEXT_CLUSTER +.386761 ad 27 5f lda $5f27 LDA CLUSTER_PTR ; a FAT12 page contains about 340 entries +.386764 4a lsr a LSR A ; this may result in a carry, if the cluster to read is odd +.386765 90 0e bcc $386775 BCC F12_NC_NO_CARRY +.386767 18 clc CLC +.386768 6d 27 5f adc $5f27 ADC CLUSTER_PTR +.38676b a8 tay TAY +.38676c b9 00 66 lda $6600,y LDA FAT_DATA,Y +.38676f 4a lsr a LSR A +.386770 4a lsr a LSR A +.386771 4a lsr a LSR A +.386772 4a lsr a LSR A ; divide by 16 +.386773 80 0a bra $38677f BRA F12_NC_CONTINUE +.386775 F12_NC_NO_CARRY +.386775 6d 27 5f adc $5f27 ADC CLUSTER_PTR +.386778 a8 tay TAY +.386779 b9 00 66 lda $6600,y LDA FAT_DATA,Y +.38677c 29 ff 0f and #$0fff AND #$FFF +.38677f F12_NC_CONTINUE +.38677f 8d 27 5f sta $5f27 STA CLUSTER_PTR +.386782 c9 ff 0f cmp #$0fff CMP #$FFF +.386785 60 rts RTS +.386786 FAT16_GET_NEXT_CLUSTER +.386786 ad 27 5f lda $5f27 LDA CLUSTER_PTR +.386789 eb xba XBA +.38678a 29 ff 00 and #$00ff AND #$FF +.38678d c5 86 cmp $86 CMP SD_DATA_FAT_PAGE +.38678f f0 22 beq $3867b3 BEQ SKIP_FAT_LOADING +.386791 48 pha PHA +.386792 a5 80 lda $80 LDA SD_DATA +.386794 85 83 sta $83 STA SD_TMP_DATA +.386796 a5 82 lda $82 LDA SD_DATA + 2 +.386798 85 85 sta $85 STA SD_TMP_DATA + 2 +.38679a a9 00 66 lda #$6600 LDA #FAT_DATA +.38679d 85 80 sta $80 STA SD_DATA +.38679f a9 00 00 lda #$0000 LDA #0 +.3867a2 85 82 sta $82 STA SD_DATA + 2 +.3867a4 68 pla PLA +.3867a5 85 86 sta $86 STA SD_DATA_FAT_PAGE +.3867a7 22 6f 66 38 jsl $38666f JSL ISDOS_READ_FAT_SECTOR +.3867ab a5 83 lda $83 LDA SD_TMP_DATA +.3867ad 85 80 sta $80 STA SD_DATA +.3867af a5 85 lda $85 LDA SD_TMP_DATA + 2 +.3867b1 85 82 sta $82 STA SD_DATA + 2 +.3867b3 SKIP_FAT_LOADING +.3867b3 ad 27 5f lda $5f27 LDA CLUSTER_PTR +.3867b6 29 ff 00 and #$00ff AND #$FF +.3867b9 0a asl a ASL A ; multiply by 2 +.3867ba a8 tay TAY +.3867bb b9 00 66 lda $6600,y LDA FAT_DATA,Y +.3867be 8d 27 5f sta $5f27 STA CLUSTER_PTR +.3867c1 c9 ff ff cmp #$ffff CMP #$FFFF +.3867c4 60 rts RTS +.3867c5 COMPUTE_FAT_ROOT_DATA_OFFSETS +.3867c5 ad 10 5f lda $5f10 LDA SD_RESERVED_SECTORS ; 16 bit value +.3867c8 85 88 sta $88 STA SD_MULT_AREA +.3867ca a9 00 00 lda #$0000 LDA #0 +.3867cd 85 8a sta $8a STA SD_MULT_AREA + 2 +.3867cf 20 d6 62 jsr $3862d6 JSR CALC_OFFSET_BYTES ; compute the byte offset +.3867d2 a5 88 lda $88 LDA SD_MULT_AREA +.3867d4 8d 20 01 sta $0120 STA ADDER_A +.3867d7 a5 8a lda $8a LDA SD_MULT_AREA + 2 +.3867d9 8d 22 01 sta $0122 STA ADDER_A+2 +.3867dc ad 00 5f lda $5f00 LDA SD_FIRST_SECTOR ; 32 bit value +.3867df 8d 24 01 sta $0124 STA ADDER_B +.3867e2 ad 02 5f lda $5f02 LDA SD_FIRST_SECTOR + 2 +.3867e5 8d 26 01 sta $0126 STA ADDER_B + 2 +.3867e8 ad 28 01 lda $0128 LDA ADDER_R +.3867eb 8d 04 5f sta $5f04 STA SD_FAT_OFFSET +.3867ee ad 2a 01 lda $012a LDA ADDER_R + 2 +.3867f1 8d 06 5f sta $5f06 STA SD_FAT_OFFSET + 2 +.3867f4 ad 16 5f lda $5f16 LDA SD_FAT_COUNT +.3867f7 8d 00 01 sta $0100 STA UNSIGNED_MULT_A +.3867fa ad 12 5f lda $5f12 LDA SD_SECTORS_PER_FAT +.3867fd 8d 02 01 sta $0102 STA UNSIGNED_MULT_B +.386800 ad 04 01 lda $0104 LDA UNSIGNED_MULT_RESULT +.386803 85 88 sta $88 STA SD_MULT_AREA +.386805 ad 06 01 lda $0106 LDA UNSIGNED_MULT_RESULT + 2 +.386808 85 8a sta $8a STA SD_MULT_AREA + 2 +.38680a 20 d6 62 jsr $3862d6 JSR CALC_OFFSET_BYTES ; compute the byte offset +.38680d a5 88 lda $88 LDA SD_MULT_AREA +.38680f 8d 20 01 sta $0120 STA ADDER_A +.386812 a5 8a lda $8a LDA SD_MULT_AREA + 2 +.386814 8d 22 01 sta $0122 STA ADDER_A + 2 +.386817 ad 04 5f lda $5f04 LDA SD_FAT_OFFSET +.38681a 8d 24 01 sta $0124 STA ADDER_B +.38681d ad 06 5f lda $5f06 LDA SD_FAT_OFFSET + 2 +.386820 8d 26 01 sta $0126 STA ADDER_B +2 +.386823 ad 28 01 lda $0128 LDA ADDER_R +.386826 8d 08 5f sta $5f08 STA SD_ROOT_OFFSET +.386829 ad 2a 01 lda $012a LDA ADDER_R +2 +.38682c 8d 0a 5f sta $5f0a STA SD_ROOT_OFFSET + 2 +.38682f ad 08 5f lda $5f08 LDA SD_ROOT_OFFSET +.386832 8d 20 01 sta $0120 STA ADDER_A +.386835 ad 0a 5f lda $5f0a LDA SD_ROOT_OFFSET + 2 +.386838 8d 22 01 sta $0122 STA ADDER_A + 2 +.38683b a9 20 00 lda #$0020 LDA #32 ; the root contains 512 entries at 32 bytes each +.38683e 85 88 sta $88 STA SD_MULT_AREA +.386840 a9 00 00 lda #$0000 LDA #0 +.386843 85 8a sta $8a STA SD_MULT_AREA + 2 +.386845 20 d6 62 jsr $3862d6 JSR CALC_OFFSET_BYTES +.386848 a5 88 lda $88 LDA SD_MULT_AREA +.38684a 8d 24 01 sta $0124 STA ADDER_B +.38684d a5 8a lda $8a LDA SD_MULT_AREA + 2 +.38684f 8d 26 01 sta $0126 STA ADDER_B + 2 +.386852 ad 28 01 lda $0128 LDA ADDER_R +.386855 8d 0c 5f sta $5f0c STA SD_DATA_OFFSET +.386858 ad 2a 01 lda $012a LDA ADDER_R + 2 +.38685b 8d 0e 5f sta $5f0e STA SD_DATA_OFFSET + 2 +.38685e 60 rts RTS +>38685f 30 30 20 2d 20 57 65 6c sd_card_tester .text "00 - Welcome to the SDCard Tester", $d, 0 +>386867 63 6f 6d 65 20 74 6f 20 74 68 65 20 53 44 43 61 +>386877 72 64 20 54 65 73 74 65 72 0d 00 +>386882 30 31 20 2d 20 43 61 72 sd_card_present_msg .text "01 - Card Present", $d, 0 +>38688a 64 20 50 72 65 73 65 6e 74 0d 00 +>386895 30 31 20 2d 20 4e 4f 20 sd_no_card_msg .text "01 - NO SDCARD PRESENT", $0D, $00 +>38689d 53 44 43 41 52 44 20 50 52 45 53 45 4e 54 0d 00 +>3868ad 30 32 20 2d 20 43 61 6e sd_cant_read_mbr_msg .text "02 - Can't read MBR - No Card present", $D, $0 +>3868b5 27 74 20 72 65 61 64 20 4d 42 52 20 2d 20 4e 6f +>3868c5 20 43 61 72 64 20 70 72 65 73 65 6e 74 0d 00 +>3868d4 30 33 20 2d 20 45 72 72 sd_read_failure .text "03 - Error during read operation", $d, $0 +>3868dc 6f 72 20 64 75 72 69 6e 67 20 72 65 61 64 20 6f +>3868ec 70 65 72 61 74 69 6f 6e 0d 00 +>3868f6 30 34 20 2d 20 45 72 72 SD_BOOT_SECTOR_MSG .text "04 - Error reading Boot sector", $d, $0 +>3868fe 6f 72 20 72 65 61 64 69 6e 67 20 42 6f 6f 74 20 +>38690e 73 65 63 74 6f 72 0d 00 +>386916 30 35 20 2d 20 45 72 72 SD_FAT_ERROR_MSG .text "05 - Error reading FAT sector", $d, $0 +>38691e 6f 72 20 72 65 61 64 69 6e 67 20 46 41 54 20 73 +>38692e 65 63 74 6f 72 0d 00 +>386935 30 35 20 2d 20 45 72 72 SD_ROOT_ERROR_MSG .text "05 - Error reading Root sector", $d, $0 +>38693d 6f 72 20 72 65 61 64 69 6e 67 20 52 6f 6f 74 20 +>38694d 73 65 63 74 6f 72 0d 00 +>386955 30 35 20 2d 20 45 72 72 SD_DATA_ERROR_MSG .text "05 - Error reading Data sector", $d, $0 +>38695d 6f 72 20 72 65 61 64 69 6e 67 20 44 61 74 61 20 +>38696d 73 65 63 74 6f 72 0d 00 +>386975 49 6e 76 61 6c 69 64 20 INVALID_SIG_MSG .text 'Invalid MBR Signature',$D,0 +>38697d 4d 42 52 20 53 69 67 6e 61 74 75 72 65 0d 00 +>38698c 56 6f 6c 75 6d 65 20 4e sd_volume_name .text "Volume Name: ", $0 +>386994 61 6d 65 3a 20 00 +>38699a 56 46 41 54 20 4e 61 6d sd_vfat_name .text "VFAT Name : ", $0 +>3869a2 65 20 20 3a 20 00 +>3869a8 44 69 72 65 63 74 6f 72 sd_dir_name .text "Directory : ", $0 +>3869b0 79 20 20 3a 20 00 +>3869b6 46 69 6c 65 6e 61 6d 65 sd_filename .text "Filename : ", $0 +>3869be 20 20 20 3a 20 00 +>3869c4 2c 20 43 6c 75 73 74 65 sd_cluster_str .text ", Cluster:", $0 +>3869cc 72 3a 00 +>3869cf 2c 20 53 69 7a 65 3a 00 sd_filesize_str .text ", Size:", $0 + +;****** Return to file: tracker.asm + +.3869d7 TRACKER +.3869d7 a9 ff lda #$ff LDA #$FF +.3869d9 8f 48 01 00 sta $000148 STA @lINT_EDGE_REG0 +.3869dd 8f 49 01 00 sta $000149 STA @lINT_EDGE_REG1 +.3869e1 8f 4a 01 00 sta $00014a STA @lINT_EDGE_REG2 +.3869e5 a9 ff lda #$ff LDA #$FF +.3869e7 8f 4c 01 00 sta $00014c STA @lINT_MASK_REG0 +.3869eb 8f 4d 01 00 sta $00014d STA @lINT_MASK_REG1 +.3869ef 8f 4e 01 00 sta $00014e STA @lINT_MASK_REG2 +.3869f3 20 db 5c jsr $385cdb JSR DRAW_DISPLAY +.3869f6 20 30 6d jsr $386d30 JSR INIT_KEYBOARD +.3869f9 20 c7 6d jsr $386dc7 JSR INIT_MOUSEPOINTER +.3869fc 20 3b 6a jsr $386a3b JSR INIT_CURSOR +.3869ff 20 7d 6a jsr $386a7d JSR RESET_STATE_MACHINE +.386a02 a9 38 lda #$38 LDA #`INSTRUMENT_ACCORDN +.386a04 85 69 sta $69 STA INSTR_ADDR+2 +.386a06 a9 42 lda #$42 LDA #$42 +.386a08 8f 6a 00 00 sta $00006a STA @lINSTR_NUMBER +.386a0c a2 00 00 ldx #$0000 LDX #0 ; setup channels +.386a0f NEXT_INSTR +.386a0f a9 00 lda #$00 LDA #0 +.386a11 eb xba XBA +.386a12 da phx PHX +.386a13 bf 18 10 38 lda $381018,x LDA registerOffsets_operator0,X +.386a17 aa tax TAX +.386a18 20 52 6b jsr $386b52 JSR LOAD_INSTRUMENT +.386a1b fa plx PLX +.386a1c e8 inx INX +.386a1d e0 09 00 cpx #$0009 CPX #9 +.386a20 d0 ed bne $386a0f BNE NEXT_INSTR +.386a22 22 79 30 38 jsl $383079 JSL IOPL2_TONE_TEST +.386a26 20 5c 6a jsr $386a5c JSR ENABLE_IRQS +.386a29 22 b1 30 38 jsl $3830b1 JSL OPL2_INIT +.386a2d 58 cli CLI +.386a2e 20 ae 5b jsr $385bae JSR INIT_MIDI +.386a31 20 2b 61 jsr $38612b JSR DISPLAY_ORDERS +.386a34 20 61 5e jsr $385e61 JSR DISPLAY_PATTERN +.386a37 ea nop ALWAYS NOP +.386a38 ea nop NOP +.386a39 80 fc bra $386a37 BRA ALWAYS +.386a3b 48 pha INIT_CURSOR PHA +.386a3c a9 e9 lda #$e9 LDA #$E9 ;The Cursor Character will be a Fully Filled Block +.386a3e 8f 12 00 af sta $af0012 STA VKY_TXT_CURSOR_CHAR_REG +.386a42 a9 00 lda #$00 LDA #$0 ;Set Cursor Disabled +.386a44 8f 10 00 af sta $af0010 STA VKY_TXT_CURSOR_CTRL_REG ; +.386a48 c2 30 rep #$30 REP #$30 ; set A&X long +.386a4a a9 00 00 lda #$0000 LDA #$0000; +.386a4d 8f 14 00 af sta $af0014 STA VKY_TXT_CURSOR_X_REG_L; // Set the X to Position 1 +.386a51 a9 00 00 lda #$0000 LDA #$0000; +.386a54 8f 16 00 af sta $af0016 STA VKY_TXT_CURSOR_Y_REG_L; // Set the Y to Position 1 (Below) +.386a58 e2 20 sep #$20 SEP #$20 ; set A short +.386a5a 68 pla PLA +.386a5b 60 rts RTS +.386a5c ENABLE_IRQS +.386a5c af 40 01 00 lda $000140 LDA @lINT_PENDING_REG0 +.386a60 29 84 and #$84 AND #FNX0_INT07_MOUSE | FNX0_INT02_TMR0 ;AND #FNX0_INT00_SOF +.386a62 8f 40 01 00 sta $000140 STA @lINT_PENDING_REG0 ; Writing it back will clear the Active Bit +.386a66 af 41 01 00 lda $000141 LDA @lINT_PENDING_REG1 +.386a6a 29 a1 and #$a1 AND #FNX1_INT00_KBD | FNX1_INT05_MPU401 | FNX1_INT07_SDCARD +.386a6c 8f 41 01 00 sta $000141 STA @lINT_PENDING_REG1 ; Writing it back will clear the Active Bit +.386a70 a9 7b lda #$7b LDA #~(FNX0_INT07_MOUSE | FNX0_INT02_TMR0) ;LDA #~(FNX0_INT00_SOF | FNX0_INT00_SOF ) +.386a72 8f 4c 01 00 sta $00014c STA @lINT_MASK_REG0 +.386a76 a9 5e lda #$5e LDA #~(FNX1_INT00_KBD | FNX1_INT05_MPU401 | FNX1_INT07_SDCARD) +.386a78 8f 4d 01 00 sta $00014d STA @lINT_MASK_REG1 +.386a7c 60 rts RTS +.386a7d RESET_STATE_MACHINE +.386a7d a9 00 lda #$00 LDA #0 +.386a7f 8f 15 0f 38 sta $380f15 STA STATE_MACHINE +.386a83 85 48 sta $48 STA RAD_ORDER_NUM +.386a85 64 6c stz $6c STZ LINE_NUM_HEX +.386a87 64 49 stz $49 STZ RAD_ORDER_NUM + 1 +.386a89 a9 01 lda #$01 LDA #1 +.386a8b 8f 19 0f 38 sta $380f19 STA LINE_NUM_DEC +.386a8f a6 48 ldx $48 LDX RAD_ORDER_NUM +.386a91 bf 24 fc 39 lda $39fc24,x LDA @lORDERS,X ; load the first pattern in the order list +.386a95 1a inc a INC A +.386a96 PATTN_OK +.386a96 8f 18 0f 38 sta $380f18 STA PATTERN_NUM +.386a9a 20 af 60 jsr $3860af JSR DISPLAY_SPEED +.386a9d 60 rts RTS +.386a9e INCREMENT_ORDER +.386a9e 48 pha PHA +.386a9f a9 00 lda #$00 LDA #0 +.386aa1 eb xba XBA +.386aa2 af 48 00 00 lda $000048 LDA @lRAD_ORDER_NUM +.386aa6 1a inc a INC A +.386aa7 cf 01 00 17 cmp $170001 CMP @lTuneInfo.songLength +.386aab d0 02 bne $386aaf BNE LOAD_ORDER +.386aad a9 00 lda #$00 LDA #0 +.386aaf LOAD_ORDER +.386aaf 8f 48 00 00 sta $000048 STA @lRAD_ORDER_NUM +.386ab3 aa tax TAX +.386ab4 a0 80 02 ldy #$0280 LDY #128 * 5 +.386ab7 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386aba bf 24 fc 39 lda $39fc24,x LDA @lORDERS,X ; load the pattern from the order list +.386abe 1a inc a INC A +.386abf 8f 18 0f 38 sta $380f18 STA PATTERN_NUM +.386ac3 68 pla PLA +.386ac4 60 rts RTS +.386ac5 INIT_TIMER0_BPM +.386ac5 8b phb PHB +.386ac6 a9 00 lda #$00 LDA #0 +.386ac8 48 pha PHA +.386ac9 ab plb PLB ; set databank to 0 +.386aca a9 03 lda #$03 LDA #3 ; each timer counter is 24 bits - 3 bytes +.386acc 8d 00 01 sta $0100 STA UNSIGNED_MULT_A +.386acf 9c 01 01 stz $0101 STZ UNSIGNED_MULT_A + 1 +.386ad2 9c 03 01 stz $0103 STZ UNSIGNED_MULT_B + 1 +.386ad5 38 sec SEC +.386ad6 af 17 0f 38 lda $380f17 LDA BPM ; multiply by the BPM, the 4 offset is the lowest BPM +.386ada e9 04 sbc #$04 SBC #4 +.386adc 8d 02 01 sta $0102 STA UNSIGNED_MULT_B +.386adf c2 20 rep #$20 REP #$20 ; set A long +.386ae1 ad 04 01 lda $0104 LDA UNSIGNED_MULT_RESULT +.386ae4 aa tax TAX +.386ae5 e2 20 sep #$20 SEP #$20 ; set A short +.386ae7 a9 00 lda #$00 LDA #0 ; set timer0 charge to 0 +.386ae9 8d 61 01 sta $0161 STA TIMER0_CHARGE_L +.386aec 8d 62 01 sta $0162 STA TIMER0_CHARGE_M +.386aef 8d 63 01 sta $0163 STA TIMER0_CHARGE_H +.386af2 bf 00 00 3a lda $3a0000,x LDA @lSPM_004,X +.386af6 8d 65 01 sta $0165 STA TIMER0_CMP_L +.386af9 bf 01 00 3a lda $3a0001,x LDA @lSPM_004+1,X +.386afd 8d 66 01 sta $0166 STA TIMER0_CMP_M +.386b00 bf 02 00 3a lda $3a0002,x LDA @lSPM_004+2,X +.386b04 8d 67 01 sta $0167 STA TIMER0_CMP_H +.386b07 a9 01 lda #$01 LDA #TMR0_CMP_RECLR ; count up from "CHARGE" value to TIMER_CMP +.386b09 8d 64 01 sta $0164 STA TIMER0_CMP_REG +.386b0c a9 0b lda #$0b LDA #(TMR0_EN | TMR0_UPDWN | TMR0_SCLR) +.386b0e 8d 60 01 sta $0160 STA TIMER0_CTRL_REG +.386b11 ab plb PLB +.386b12 60 rts RTS +.386b13 INIT_TIMER0 +.386b13 8b phb PHB +.386b14 a9 00 lda #$00 LDA #0 +.386b16 48 pha PHA +.386b17 ab plb PLB ; set databank to 0 +.386b18 e2 20 sep #$20 SEP #$20 ; set A short +.386b1a a9 00 lda #$00 LDA #0 ; set timer0 charge to 0 +.386b1c 8d 61 01 sta $0161 STA TIMER0_CHARGE_L +.386b1f 8d 62 01 sta $0162 STA TIMER0_CHARGE_M +.386b22 8d 63 01 sta $0163 STA TIMER0_CHARGE_H +.386b25 a9 01 lda #$01 LDA #TMR0_CMP_RECLR ; count up from "CHARGE" value to TIMER_CMP +.386b27 8d 64 01 sta $0164 STA TIMER0_CMP_REG +.386b2a a9 0b lda #$0b LDA #(TMR0_EN | TMR0_UPDWN | TMR0_SCLR) +.386b2c 8d 60 01 sta $0160 STA TIMER0_CTRL_REG +.386b2f ab plb PLB +.386b30 60 rts RTS +.386b31 INIT_OPL2_TMRS +.386b31 a9 80 lda #$80 LDA #$80 ; Reset OPL2 Interrupts +.386b33 8f 04 e6 af sta $afe604 STA OPL3_L_IRQ ; byte 4 of OPL2 +.386b37 20 4b 6b jsr $386b4b JSR WAIT_80 +.386b3a a9 10 lda #$10 LDA #$10 +.386b3c 8f 02 e6 af sta $afe602 STA OPL3_L_TIMER1 ; byte 2 of OPL2 +.386b40 8f 03 e6 af sta $afe603 STA OPL3_L_TIMER2 ; byte 2 of OPL2 +.386b44 a9 03 lda #$03 LDA #$3 ; enable timers 1 and 2 +.386b46 8f 04 e6 af sta $afe604 STA OPL3_L_IRQ ; byte 4 of OPL2 +.386b4a 60 rts RTS +.386b4b WAIT_80 +.386b4b a2 30 02 ldx #$0230 LDX #560 +.386b4e WAIT_LP +.386b4e ca dex DEX +.386b4f d0 fd bne $386b4e BNE WAIT_LP +.386b51 60 rts RTS +.386b52 LOAD_INSTRUMENT +.386b52 af 6a 00 00 lda $00006a LDA @lINSTR_NUMBER +.386b56 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A +.386b5a a9 00 lda #$00 LDA #0 +.386b5c 8f 01 01 00 sta $000101 STA @lUNSIGNED_MULT_A + 1 +.386b60 8f 03 01 00 sta $000103 STA @lUNSIGNED_MULT_B + 1 +.386b64 a9 16 lda #$16 LDA #INSTR_REC_LEN +.386b66 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B +.386b6a c2 20 rep #$20 REP #$20 ; set A long +.386b6c af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT +.386b70 18 clc CLC +.386b71 69 3b 10 adc #$103b ADC #<>INSTRUMENT_ACCORDN +.386b74 85 67 sta $67 STA INSTR_ADDR +.386b76 e2 20 sep #$20 SEP #$20 ; set A short +.386b78 af 6a 00 00 lda $00006a LDA @lINSTR_NUMBER +.386b7c a0 93 02 ldy #$0293 LDY #5 * 128 + 19 +.386b7f 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386b82 a7 67 lda [$67] LDA [INSTR_ADDR] +.386b84 d0 4b bne $386bd1 BNE DRUM_SET +.386b86 e6 67 inc $67 INC INSTR_ADDR +.386b88 d0 02 bne $386b8c BNE LD_INST_1 +.386b8a e6 68 inc $68 INC INSTR_ADDR+1 +.386b8c LD_INST_1 +.386b8c 20 d2 6b jsr $386bd2 JSR LOAD_AM_VIB_MULT +.386b8f e6 67 inc $67 INC INSTR_ADDR +.386b91 d0 02 bne $386b95 BNE LD_INST_2 +.386b93 e6 68 inc $68 INC INSTR_ADDR+1 +.386b95 LD_INST_2 +.386b95 20 42 6c jsr $386c42 JSR LOAD_KEY_OP_LVL +.386b98 e6 67 inc $67 INC INSTR_ADDR +.386b9a d0 02 bne $386b9e BNE LD_INST_3 +.386b9c e6 68 inc $68 INC INSTR_ADDR+1 +.386b9e LD_INST_3 +.386b9e 20 7c 6c jsr $386c7c JSR LOAD_ATT_DEC_RATE +.386ba1 e6 67 inc $67 INC INSTR_ADDR +.386ba3 d0 02 bne $386ba7 BNE LD_INST_4 +.386ba5 e6 68 inc $68 INC INSTR_ADDR+1 +.386ba7 LD_INST_4 +.386ba7 20 b8 6c jsr $386cb8 JSR LOAD_SUSTAIN_RELEASE_RATE +.386baa e6 67 inc $67 INC INSTR_ADDR +.386bac d0 02 bne $386bb0 BNE LD_INST_5 +.386bae e6 68 inc $68 INC INSTR_ADDR+1 +.386bb0 LD_INST_5 +.386bb0 da phx PHX +.386bb1 a6 27 ldx $27 LDX OPL2_CHANNEL +.386bb3 20 f4 6c jsr $386cf4 JSR LOAD_FEEDBACK_ALGO +.386bb6 fa plx PLX +.386bb7 e6 67 inc $67 INC INSTR_ADDR +.386bb9 d0 02 bne $386bbd BNE LD_INST_6 +.386bbb e6 68 inc $68 INC INSTR_ADDR+1 +.386bbd LD_INST_6 +.386bbd 20 10 6d jsr $386d10 JSR LOAD_WAVE +.386bc0 c2 20 rep #$20 REP #$20 ; set A long +.386bc2 a5 67 lda $67 LDA INSTR_ADDR +.386bc4 69 06 00 adc #$0006 ADC #6 +.386bc7 85 67 sta $67 STA INSTR_ADDR +.386bc9 e2 20 sep #$20 SEP #$20 ; set A short +.386bcb a0 98 02 ldy #$0298 LDY #5 * 128 + 24 +.386bce 20 3d 5e jsr $385e3d JSR WRITE_INSTRUMENT_NAME +.386bd1 DRUM_SET +.386bd1 60 rts RTS +.386bd2 LOAD_AM_VIB_MULT +.386bd2 a7 67 lda [$67] LDA [INSTR_ADDR] +.386bd4 48 pha PHA +.386bd5 48 pha PHA +.386bd6 48 pha PHA +.386bd7 48 pha PHA +.386bd8 9f 20 e7 af sta $afe720,x STA @lOPL3_R_AM_VID_EG_KSR_MULT,X +.386bdc 29 80 and #$80 AND #TREMOLO +.386bde a0 8d 03 ldy #$038d LDY #7 * 128 + 13 +.386be1 20 ee 5d jsr $385dee JSR WRITE_OFF_ON +.386be4 68 pla PLA +.386be5 29 40 and #$40 AND #VIBRATO +.386be7 a0 0d 04 ldy #$040d LDY #8 * 128 + 13 +.386bea 20 ee 5d jsr $385dee JSR WRITE_OFF_ON +.386bed 68 pla PLA +.386bee 29 20 and #$20 AND #SUSTAINING +.386bf0 a0 8d 04 ldy #$048d LDY #9 * 128 + 13 +.386bf3 20 ee 5d jsr $385dee JSR WRITE_OFF_ON +.386bf6 68 pla PLA +.386bf7 29 10 and #$10 AND #KSR +.386bf9 a0 0d 05 ldy #$050d LDY #10 * 128 + 13 +.386bfc 20 ee 5d jsr $385dee JSR WRITE_OFF_ON +.386bff 68 pla PLA +.386c00 29 0f and #$0f AND #MULTIPLIER +.386c02 a0 8e 05 ldy #$058e LDY #11 * 128 + 14 +.386c05 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386c08 a0 06 00 ldy #$0006 LDY #6 +.386c0b b7 67 lda [$67],y LDA [INSTR_ADDR], Y +.386c0d 48 pha PHA +.386c0e 48 pha PHA +.386c0f 48 pha PHA +.386c10 48 pha PHA +.386c11 9f 23 e7 af sta $afe723,x STA @lOPL3_R_AM_VID_EG_KSR_MULT + 3,X +.386c15 29 80 and #$80 AND #TREMOLO +.386c17 a0 a7 03 ldy #$03a7 LDY #7 * 128 + 39 +.386c1a 20 ee 5d jsr $385dee JSR WRITE_OFF_ON +.386c1d 68 pla PLA +.386c1e 29 40 and #$40 AND #VIBRATO +.386c20 a0 27 04 ldy #$0427 LDY #8 * 128 + 39 +.386c23 20 ee 5d jsr $385dee JSR WRITE_OFF_ON +.386c26 68 pla PLA +.386c27 29 20 and #$20 AND #SUSTAINING +.386c29 a0 a7 04 ldy #$04a7 LDY #9 * 128 + 39 +.386c2c 20 ee 5d jsr $385dee JSR WRITE_OFF_ON +.386c2f 68 pla PLA +.386c30 29 10 and #$10 AND #KSR +.386c32 a0 27 05 ldy #$0527 LDY #10 * 128 + 39 +.386c35 20 ee 5d jsr $385dee JSR WRITE_OFF_ON +.386c38 68 pla PLA +.386c39 29 0f and #$0f AND #MULTIPLIER +.386c3b a0 a8 05 ldy #$05a8 LDY #11 * 128 + 40 +.386c3e 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386c41 60 rts RTS +.386c42 LOAD_KEY_OP_LVL +.386c42 a7 67 lda [$67] LDA [INSTR_ADDR] +.386c44 48 pha PHA +.386c45 9f 40 e7 af sta $afe740,x STA @lOPL3_R_KSL_TL,X +.386c49 29 c0 and #$c0 AND #KEY_SCALE +.386c4b 2a rol a ROL A +.386c4c 2a rol a ROL A +.386c4d 2a rol a ROL A +.386c4e a0 0e 06 ldy #$060e LDY #12 * 128 + 14 +.386c51 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386c54 68 pla PLA +.386c55 29 3f and #$3f AND #OP_LEVEL +.386c57 a0 8e 06 ldy #$068e LDY #13 * 128 + 14 +.386c5a 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386c5d a0 06 00 ldy #$0006 LDY #6 +.386c60 b7 67 lda [$67],y LDA [INSTR_ADDR],Y +.386c62 48 pha PHA +.386c63 9f 43 e7 af sta $afe743,x STA @lOPL3_R_KSL_TL + 3,X +.386c67 29 c0 and #$c0 AND #KEY_SCALE +.386c69 2a rol a ROL A +.386c6a 2a rol a ROL A +.386c6b 2a rol a ROL A +.386c6c a0 28 06 ldy #$0628 LDY #12 * 128 + 40 +.386c6f 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386c72 68 pla PLA +.386c73 29 3f and #$3f AND #OP_LEVEL +.386c75 a0 a8 06 ldy #$06a8 LDY #13 * 128 + 40 +.386c78 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386c7b 60 rts RTS +.386c7c LOAD_ATT_DEC_RATE +.386c7c a7 67 lda [$67] LDA [INSTR_ADDR] +.386c7e 48 pha PHA +.386c7f 9f 60 e7 af sta $afe760,x STA @lOPL3_R_AR_DR,X +.386c83 29 f0 and #$f0 AND #ATTACK_RT +.386c85 4a lsr a LSR A +.386c86 4a lsr a LSR A +.386c87 4a lsr a LSR A +.386c88 4a lsr a LSR A +.386c89 a0 0e 07 ldy #$070e LDY #14 * 128 + 14 +.386c8c 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386c8f 68 pla PLA +.386c90 29 0f and #$0f AND #DECAY_RT +.386c92 a0 8e 07 ldy #$078e LDY #15 * 128 + 14 +.386c95 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386c98 a0 06 00 ldy #$0006 LDY #6 +.386c9b b7 67 lda [$67],y LDA [INSTR_ADDR],Y +.386c9d 48 pha PHA +.386c9e 9f 63 e7 af sta $afe763,x STA @lOPL3_R_AR_DR + 3,X +.386ca2 29 f0 and #$f0 AND #ATTACK_RT +.386ca4 4a lsr a LSR A +.386ca5 4a lsr a LSR A +.386ca6 4a lsr a LSR A +.386ca7 4a lsr a LSR A +.386ca8 a0 28 07 ldy #$0728 LDY #14 * 128 + 40 +.386cab 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386cae 68 pla PLA +.386caf 29 0f and #$0f AND #DECAY_RT +.386cb1 a0 a8 07 ldy #$07a8 LDY #15 * 128 + 40 +.386cb4 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386cb7 60 rts RTS +.386cb8 LOAD_SUSTAIN_RELEASE_RATE +.386cb8 a7 67 lda [$67] LDA [INSTR_ADDR] +.386cba 48 pha PHA +.386cbb 9f 80 e7 af sta $afe780,x STA @lOPL3_R_SL_RR,X +.386cbf 29 f0 and #$f0 AND #ATTACK_RT +.386cc1 4a lsr a LSR A +.386cc2 4a lsr a LSR A +.386cc3 4a lsr a LSR A +.386cc4 4a lsr a LSR A +.386cc5 a0 0e 08 ldy #$080e LDY #16 * 128 + 14 +.386cc8 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386ccb 68 pla PLA +.386ccc 29 0f and #$0f AND #DECAY_RT +.386cce a0 8e 08 ldy #$088e LDY #17 * 128 + 14 +.386cd1 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386cd4 a0 06 00 ldy #$0006 LDY #6 +.386cd7 b7 67 lda [$67],y LDA [INSTR_ADDR],Y +.386cd9 48 pha PHA +.386cda 9f 83 e7 af sta $afe783,x STA @lOPL3_R_SL_RR + 3,X +.386cde 29 f0 and #$f0 AND #ATTACK_RT +.386ce0 4a lsr a LSR A +.386ce1 4a lsr a LSR A +.386ce2 4a lsr a LSR A +.386ce3 4a lsr a LSR A +.386ce4 a0 28 08 ldy #$0828 LDY #16 * 128 + 40 +.386ce7 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386cea 68 pla PLA +.386ceb 29 0f and #$0f AND #DECAY_RT +.386ced a0 a8 08 ldy #$08a8 LDY #17 * 128 + 40 +.386cf0 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386cf3 60 rts RTS +.386cf4 LOAD_FEEDBACK_ALGO +.386cf4 a7 67 lda [$67] LDA [INSTR_ADDR] +.386cf6 48 pha PHA +.386cf7 09 f0 ora #$f0 ORA #$F0 ; Channel B +.386cf9 9f c0 e7 af sta $afe7c0,x STA @lOPL3_R_FEEDBACK,X +.386cfd 29 0e and #$0e AND #FEEDBACK +.386cff 4a lsr a LSR A +.386d00 a0 28 0a ldy #$0a28 LDY #20 * 128 + 40 +.386d03 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386d06 68 pla PLA +.386d07 29 01 and #$01 AND #ALGORITHM +.386d09 a0 a8 0a ldy #$0aa8 LDY #21 * 128 + 40 +.386d0c 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386d0f 60 rts RTS +.386d10 LOAD_WAVE +.386d10 a7 67 lda [$67] LDA [INSTR_ADDR] +.386d12 9f e0 e7 af sta $afe7e0,x STA @lOPL3_R_WAVE_SELECT,X +.386d16 29 07 and #$07 AND #$7 +.386d18 a0 0e 09 ldy #$090e LDY #18 * 128 + 14 +.386d1b 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386d1e a0 05 00 ldy #$0005 LDY #5 +.386d21 b7 67 lda [$67],y LDA [INSTR_ADDR],Y +.386d23 9f e3 e7 af sta $afe7e3,x STA @lOPL3_R_WAVE_SELECT+3,X +.386d27 29 07 and #$07 AND #$7 +.386d29 a0 28 09 ldy #$0928 LDY #18 * 128 + 40 +.386d2c 20 b1 5d jsr $385db1 JSR WRITE_HEX +.386d2f 60 rts RTS +.386d30 INIT_KEYBOARD +.386d30 0b phd PHD +.386d31 48 pha PHA +.386d32 da phx PHX +.386d33 08 php PHP +.386d34 18 clc CLC +.386d35 e2 20 sep #$20 SEP #$20 ; set A short +.386d37 a9 00 lda #$00 LDA #$00 +.386d39 8d 87 0f sta $0f87 STA KEYBOARD_SC_FLG ; Clear the Keyboard Flag +.386d3c 20 de 6d jsr $386dde JSR Poll_Inbuf +.386d3f a9 aa lda #$aa LDA #$AA ;Send self test command +.386d41 8f 64 10 af sta $af1064 STA KBD_CMD_BUF +.386d45 20 e9 6d jsr $386de9 JSR Poll_Outbuf ; +.386d48 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ;Check self test result +.386d4c c9 55 cmp #$55 CMP #$55 +.386d4e f0 03 beq $386d53 BEQ passAAtest +.386d50 82 6f 00 brl $386dc2 BRL initkb_loop_out +.386d53 passAAtest +.386d53 a9 ab lda #$ab LDA #$AB ;Send test Interface command +.386d55 8f 64 10 af sta $af1064 STA KBD_CMD_BUF +.386d59 20 e9 6d jsr $386de9 JSR Poll_Outbuf ; +.386d5c af 60 10 af lda $af1060 LDA KBD_OUT_BUF ;Display Interface test results +.386d60 c9 00 cmp #$00 CMP #$00 ;Should be 00 +.386d62 f0 03 beq $386d67 BEQ passABtest +.386d64 82 5b 00 brl $386dc2 BRL initkb_loop_out +.386d67 passABtest +.386d67 a9 60 lda #$60 LDA #$60 ; Send Command 0x60 so to Enable Interrupt +.386d69 8f 64 10 af sta $af1064 STA KBD_CMD_BUF +.386d6d 20 de 6d jsr $386dde JSR Poll_Inbuf ; +.386d70 a9 69 lda #$69 LDA #%01101001 ; Enable Interrupt +.386d72 8f 60 10 af sta $af1060 STA KBD_DATA_BUF +.386d76 20 de 6d jsr $386dde JSR Poll_Inbuf ; +.386d79 a9 ff lda #$ff LDA #$FF ; Send Keyboard Reset command +.386d7b 8f 60 10 af sta $af1060 STA KBD_DATA_BUF +.386d7f a2 ff ff ldx #$ffff LDX #$FFFF +.386d82 ca dex DLY_LOOP1 DEX +.386d83 ea nop NOP +.386d84 ea nop NOP +.386d85 ea nop NOP +.386d86 ea nop NOP +.386d87 ea nop NOP +.386d88 ea nop NOP +.386d89 ea nop NOP +.386d8a ea nop NOP +.386d8b e0 00 00 cpx #$0000 CPX #$0000 +.386d8e d0 f2 bne $386d82 BNE DLY_LOOP1 +.386d90 20 e9 6d jsr $386de9 JSR Poll_Outbuf ; +.386d93 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ; Read Output Buffer +.386d97 DO_CMD_F4_AGAIN +.386d97 20 de 6d jsr $386dde JSR Poll_Inbuf ; +.386d9a a9 f4 lda #$f4 LDA #$F4 ; Enable the Keyboard +.386d9c 8f 60 10 af sta $af1060 STA KBD_DATA_BUF +.386da0 20 e9 6d jsr $386de9 JSR Poll_Outbuf ; +.386da3 af 60 10 af lda $af1060 LDA KBD_OUT_BUF ; Clear the Output buffer +.386da7 c9 fa cmp #$fa CMP #$FA +.386da9 d0 ec bne $386d97 BNE DO_CMD_F4_AGAIN +.386dab 20 f4 6d jsr $386df4 JSR INIT_MOUSE +.386dae af 40 01 00 lda $000140 LDA @lINT_PENDING_REG0 ; Read the Pending Register & +.386db2 29 80 and #$80 AND #FNX0_INT07_MOUSE +.386db4 8f 40 01 00 sta $000140 STA @lINT_PENDING_REG0 ; Writing it back will clear the Active Bit +.386db8 af 41 01 00 lda $000141 LDA @lINT_PENDING_REG1 ; Read the Pending Register & +.386dbc 29 01 and #$01 AND #FNX1_INT00_KBD +.386dbe 8f 41 01 00 sta $000141 STA @lINT_PENDING_REG1 ; Writing it back will clear the Active Bit +.386dc2 initkb_loop_out +.386dc2 InitSuccess +.386dc2 28 plp PLP +.386dc3 fa plx PLX +.386dc4 68 pla PLA +.386dc5 2b pld PLD +.386dc6 60 rts RTS +.386dc7 INIT_MOUSEPOINTER +.386dc7 c2 30 rep #$30 REP #$30 ; set A&X long +.386dc9 a2 80 53 ldx #$5380 LDX #<>MOUSE_POINTER_PTR +.386dcc a9 00 01 lda #$0100 LDA #$100 +.386dcf a0 00 05 ldy #$0500 LDY #$0500 +.386dd2 54 af 38 mvn $38,$af MVN #`MOUSE_POINTER_PTR,#$AF +.386dd5 e2 20 sep #$20 SEP #$20 ; set A short +.386dd7 a9 01 lda #$01 LDA #$01 +.386dd9 8f 00 07 af sta $af0700 STA @lMOUSE_PTR_CTRL_REG_L ; Enable Mouse, Mouse Pointer Graphic Bank 0 +.386ddd 60 rts RTS +.386dde Poll_Inbuf +.386dde af 64 10 af lda $af1064 LDA STATUS_PORT ; Load Status Byte +.386de2 29 02 and #$02 AND #386eb6 01 01 01 01 01 01 01 01 CHANNELS .byte 1,1,1,1,1,1,1,1,1 +>386ebe 01 +.386ebf TOGGLE_CHANNEL +.386ebf aa tax TAX +.386ec0 ca dex DEX +.386ec1 bf b6 6e 38 lda $386eb6,x LDA CHANNELS,X +.386ec5 49 01 eor #$01 EOR #1 +.386ec7 9f b6 6e 38 sta $386eb6,x STA CHANNELS,X +.386ecb 60 rts RTS +>386ecc 80 80 80 31 33 80 36 38 SCAN_TO_NOTE .text $80, $80, $80, $31, $33, $80, $36, $38, $3A, $80, $41, $80, $80, $80, $80, $80 +>386ed4 3a 80 41 80 80 80 80 80 +>386edc 2c 32 34 35 37 39 3b 3c .text $2C, $32, $34, $35, $37, $39, $3B, $3C, $42, $80, $80, $80, $80, $80, $80, $21 +>386ee4 42 80 80 80 80 80 80 21 +>386eec 23 80 26 28 2a 80 80 80 .text $23, $80, $26, $28, $2A, $80, $80, $80, $80, $80, $80, $80, $1C, $22, $24, $25 +>386ef4 80 80 80 80 1c 22 24 25 +>386efc 27 29 2b 80 80 80 80 80 .text $27, $29, $2B, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 +>386f04 80 80 80 80 80 80 80 80 +>386f0c 80 80 80 80 80 80 80 80 .text $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 +>386f14 80 80 80 80 80 80 80 80 +>386f1c 80 80 80 80 80 80 80 80 .text $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 +>386f24 80 80 80 80 80 80 80 80 +.386f2c MIDI_COMMAND_TABLE +>386f2c 02 5c 02 5c .word <>NOTE_OFF, <>NOTE_ON +>386f30 82 5c 82 5c .word <>POLY_PRESSURE, <>CONTROL_CHANGE +>386f34 ab 5c ab 5c .word <>PROGRAM_CHANGE, <>CHANNEL_PRESSURE ; these two command expect 1 datat byte only - no running status +>386f38 82 5c c2 5c .word <>PITCH_BEND, <>SYSTEM_COMMAND +>386f3c da 5c .word <>INVALID_COMMAND ;****** Processing file: file_load.asm -.3867eb LOAD_FILE_DISPLAY -.3867eb c2 10 rep #$10 REP #$10 ; set X long -.3867ed a9 02 lda #$02 LDA #2 -.3867ef 8f 15 0f 38 sta $380f15 STA STATE_MACHINE -.3867f3 22 c7 02 3a jsl $3a02c7 JSL ISDOS_INIT -.3867f7 LOAD_DIRECTORY -.3867f7 a9 00 lda #$00 LDA #0 -.3867f9 8d 1f 03 sta $031f STA SDOS_LINE_SELECT -.3867fc a9 34 lda #$34 LDA #`SDCARD_LIST -.3867fe 85 53 sta $53 STA SDOS_FILE_REC_PTR+2 -.386800 64 52 stz $52 STZ SDOS_FILE_REC_PTR+1 -.386802 64 51 stz $51 STZ SDOS_FILE_REC_PTR -.386804 20 10 68 jsr $386810 JSR LOAD_SDCARD_DATA -.386807 20 3b 68 jsr $38683b JSR SHOW_FILE_MENU -.38680a 20 81 68 jsr $386881 JSR POPULATE_FILES -.38680d e2 10 sep #$10 SEP #$10 ; set X short -.38680f 6b rtl RTL -.386810 LOAD_SDCARD_DATA -.386810 a9 00 lda #$00 LDA #0 -.386812 a0 00 04 ldy #$0400 LDY #1024 ; each struct is 18 bytes long, so this allows to load a 64 entries directory -.386815 CLEAR_FILE_AREA -.386815 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR], Y -.386817 88 dey DEY -.386818 d0 fb bne $386815 BNE CLEAR_FILE_AREA -.38681a a5 3f lda $3f LDA SDCARD_PRSNT_MNT -.38681c f0 1c beq $38683a BEQ LOAD_SDCARD_DATA_DONE ; if SD not present, exit -.38681e 22 27 03 3a jsl $3a0327 JSL ISDOS_READ_MBR_BOOT -.386822 22 05 06 3a jsl $3a0605 JSL ISDOS_PARSE_ROOT_DIR -.386826 c2 20 rep #$20 REP #$20 ; set A long -.386828 a9 00 66 lda #$6600 LDA #FAT_DATA -.38682b 85 80 sta $80 STA SD_DATA -.38682d a9 00 00 lda #$0000 LDA #0 -.386830 85 82 sta $82 STA SD_DATA + 2 -.386832 85 86 sta $86 STA SD_DATA_FAT_PAGE -.386834 22 ac 06 3a jsl $3a06ac JSL ISDOS_READ_FAT_SECTOR -.386838 e2 20 sep #$20 SEP #$20 ; set A short -.38683a LOAD_SDCARD_DATA_DONE -.38683a 60 rts RTS -.38683b SHOW_FILE_MENU -.38683b c2 30 rep #$30 REP #$30 ; set A&X long -.38683d a9 00 a0 lda #$a000 LDA #<>CS_TEXT_MEM_PTR ; store the initial screen buffer location -.386840 85 0c sta $0c STA SCREENBEGIN -.386842 a9 00 c0 lda #$c000 LDA #<>CS_COLOR_MEM_PTR ; store the initial colour buffer location -.386845 85 17 sta $17 STA CURSORPOS -.386847 e2 20 sep #$20 SEP #$20 ; set A short -.386849 a9 af lda #$af LDA #`CS_TEXT_MEM_PTR -.38684b 85 0e sta $0e STA SCREENBEGIN+2 -.38684d 85 19 sta $19 STA CURSORPOS+2 -.38684f a0 1e 05 ldy #$051e LDY #128 * 10 + 30 -.386852 a9 28 lda #$28 LDA #40 ; lines to copy -.386854 85 80 sta $80 STA LINE_COPY -.386856 a2 9f 05 ldx #$059f LDX #128 * 11 + 31 ; initialize the cursor position for file display -.386859 86 1a stx $1a STX CURSORX -.38685b a2 00 00 ldx #$0000 LDX #0 -.38685e a9 14 lda #$14 COPY_LINE LDA #20 ; columns to copy -.386860 85 81 sta $81 STA CHAR_COPY -.386862 bf 80 54 38 lda $385480,x COPY_CHAR LDA FILE_LOAD_SCREEN,X -.386866 97 0c sta [$0c],y STA [SCREENBEGIN],Y -.386868 a9 50 lda #$50 LDA #$50 ; yellow -.38686a 97 17 sta [$17],y STA [CURSORPOS],Y -.38686c c8 iny INY -.38686d e8 inx INX -.38686e c6 81 dec $81 DEC CHAR_COPY -.386870 d0 f0 bne $386862 BNE COPY_CHAR -.386872 c2 20 rep #$20 REP #$20 ; set A long -.386874 98 tya TYA -.386875 18 clc CLC -.386876 69 6c 00 adc #$006c ADC #108 ; skip to next line -.386879 a8 tay TAY -.38687a e2 20 sep #$20 SEP #$20 ; set A short -.38687c c6 80 dec $80 DEC LINE_COPY -.38687e d0 de bne $38685e BNE COPY_LINE -.386880 60 rts RTS -.386881 POPULATE_FILES -.386881 64 51 stz $51 STZ SDOS_FILE_REC_PTR -.386883 64 52 stz $52 STZ SDOS_FILE_REC_PTR+1 -.386885 a9 34 lda #$34 LDA #`SDCARD_LIST -.386887 85 53 sta $53 STA SDOS_FILE_REC_PTR+2 -.386889 a2 00 00 ldx #$0000 LDX #0 -.38688c PF_NEXT_FILE -.38688c a0 0b 00 ldy #$000b LDY #11 -.38688f b7 51 lda [$51],y LDA [SDOS_FILE_REC_PTR],Y -.386891 f0 20 beq $3868b3 BEQ PF_DONE -.386893 22 c7 61 38 jsl $3861c7 JSL DISPLAY_FAT_RECORD -.386897 22 9a 61 38 jsl $38619a JSL DISPLAY_NEXT_LINE ; Print the character -.38689b c2 20 rep #$20 REP #$20 ; set A long -.38689d a5 51 lda $51 LDA SDOS_FILE_REC_PTR -.38689f 69 12 00 adc #$0012 ADC #18 -.3868a2 85 51 sta $51 STA SDOS_FILE_REC_PTR -.3868a4 c9 80 04 cmp #$0480 CMP #1152 -.3868a7 b0 0a bcs $3868b3 BCS PF_DONE -.3868a9 e8 inx INX -.3868aa e0 26 00 cpx #$0026 CPX #38 -.3868ad f0 04 beq $3868b3 BEQ PF_DONE -.3868af e2 20 sep #$20 SEP #$20 ; set A short -.3868b1 80 d9 bra $38688c BRA PF_NEXT_FILE -.3868b3 PF_DONE -.3868b3 e2 20 sep #$20 SEP #$20 ; set A short -.3868b5 a9 05 lda #$05 LDA #5 ; Yellow Background -.3868b7 22 29 62 38 jsl $386229 JSL TEXT_COLOUR_SELECTED -.3868bb 60 rts RTS -.3868bc READ_FILE -.3868bc a9 00 lda #$00 LDA #0 -.3868be eb xba XBA -.3868bf ad 1f 03 lda $031f LDA SDOS_LINE_SELECT -.3868c2 c2 30 rep #$30 REP #$30 ; set A&X long -.3868c4 8d 00 01 sta $0100 STA UNSIGNED_MULT_A -.3868c7 a9 12 00 lda #$0012 LDA #18 -.3868ca 8d 02 01 sta $0102 STA UNSIGNED_MULT_B -.3868cd ad 04 01 lda $0104 LDA UNSIGNED_MULT_RESULT -.3868d0 85 51 sta $51 STA SDOS_FILE_REC_PTR -.3868d2 a9 00 80 lda #$8000 LDA #<>RAD_FILE_TEMP -.3868d5 85 80 sta $80 STA SD_DATA -.3868d7 a9 37 00 lda #$0037 LDA #`RAD_FILE_TEMP -.3868da 85 82 sta $82 STA SD_DATA + 2 -.3868dc a0 10 00 ldy #$0010 LDY #16 -.3868df b7 51 lda [$51],y LDA [SDOS_FILE_REC_PTR],Y -.3868e1 22 5c 07 3a jsl $3a075c JSL ISDOS_READ_FILE -.3868e5 e2 20 sep #$20 SEP #$20 ; set A short -.3868e7 22 b1 30 38 jsl $3830b1 JSL OPL2_INIT -.3868eb 22 14 69 38 jsl $386914 JSL RAD_INIT_PLAYER -.3868ef 22 f4 68 38 jsl $3868f4 JSL EXIT_FILE -.3868f3 6b rtl RTL -.3868f4 EXIT_FILE -.3868f4 20 2c 63 jsr $38632c JSR RESET_STATE_MACHINE -.3868f7 20 db 5c jsr $385cdb JSR DRAW_DISPLAY -.3868fa 20 59 5f jsr $385f59 JSR DISPLAY_FILENAME -.3868fd 20 61 5e jsr $385e61 JSR DISPLAY_PATTERN -.386900 20 2b 61 jsr $38612b JSR DISPLAY_ORDERS -.386903 20 af 60 jsr $3860af JSR DISPLAY_SPEED -.386906 6b rtl RTL +.386f3e LOAD_FILE_DISPLAY +.386f3e c2 10 rep #$10 REP #$10 ; set X long +.386f40 a9 02 lda #$02 LDA #2 +.386f42 8f 15 0f 38 sta $380f15 STA STATE_MACHINE +.386f46 22 86 62 38 jsl $386286 JSL ISDOS_INIT +.386f4a LOAD_DIRECTORY +.386f4a a9 00 lda #$00 LDA #0 +.386f4c 8d 1f 03 sta $031f STA SDOS_LINE_SELECT +.386f4f a9 34 lda #$34 LDA #`SDCARD_LIST +.386f51 85 53 sta $53 STA SDOS_FILE_REC_PTR+2 +.386f53 64 52 stz $52 STZ SDOS_FILE_REC_PTR+1 +.386f55 64 51 stz $51 STZ SDOS_FILE_REC_PTR +.386f57 20 63 6f jsr $386f63 JSR LOAD_SDCARD_DATA +.386f5a 20 8e 6f jsr $386f8e JSR SHOW_FILE_MENU +.386f5d 20 d4 6f jsr $386fd4 JSR POPULATE_FILES +.386f60 e2 10 sep #$10 SEP #$10 ; set X short +.386f62 6b rtl RTL +.386f63 LOAD_SDCARD_DATA +.386f63 a9 00 lda #$00 LDA #0 +.386f65 a0 00 04 ldy #$0400 LDY #1024 ; each struct is 18 bytes long, so this allows to load a 64 entries directory +.386f68 CLEAR_FILE_AREA +.386f68 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR], Y +.386f6a 88 dey DEY +.386f6b d0 fb bne $386f68 BNE CLEAR_FILE_AREA +.386f6d a5 3f lda $3f LDA SDCARD_PRSNT_MNT +.386f6f f0 1c beq $386f8d BEQ LOAD_SDCARD_DATA_DONE ; if SD not present, exit +.386f71 22 ec 62 38 jsl $3862ec JSL ISDOS_READ_MBR_BOOT +.386f75 22 c3 65 38 jsl $3865c3 JSL ISDOS_PARSE_ROOT_DIR +.386f79 c2 20 rep #$20 REP #$20 ; set A long +.386f7b a9 00 66 lda #$6600 LDA #FAT_DATA +.386f7e 85 80 sta $80 STA SD_DATA +.386f80 a9 00 00 lda #$0000 LDA #0 +.386f83 85 82 sta $82 STA SD_DATA + 2 +.386f85 85 86 sta $86 STA SD_DATA_FAT_PAGE +.386f87 22 6f 66 38 jsl $38666f JSL ISDOS_READ_FAT_SECTOR +.386f8b e2 20 sep #$20 SEP #$20 ; set A short +.386f8d LOAD_SDCARD_DATA_DONE +.386f8d 60 rts RTS +.386f8e SHOW_FILE_MENU +.386f8e c2 30 rep #$30 REP #$30 ; set A&X long +.386f90 a9 00 a0 lda #$a000 LDA #<>CS_TEXT_MEM_PTR ; store the initial screen buffer location +.386f93 85 0c sta $0c STA SCREENBEGIN +.386f95 a9 00 c0 lda #$c000 LDA #<>CS_COLOR_MEM_PTR ; store the initial colour buffer location +.386f98 85 17 sta $17 STA CURSORPOS +.386f9a e2 20 sep #$20 SEP #$20 ; set A short +.386f9c a9 af lda #$af LDA #`CS_TEXT_MEM_PTR +.386f9e 85 0e sta $0e STA SCREENBEGIN+2 +.386fa0 85 19 sta $19 STA CURSORPOS+2 +.386fa2 a0 1e 05 ldy #$051e LDY #128 * 10 + 30 +.386fa5 a9 28 lda #$28 LDA #40 ; lines to copy +.386fa7 85 80 sta $80 STA LINE_COPY +.386fa9 a2 9f 05 ldx #$059f LDX #128 * 11 + 31 ; initialize the cursor position for file display +.386fac 86 1a stx $1a STX CURSORX +.386fae a2 00 00 ldx #$0000 LDX #0 +.386fb1 a9 14 lda #$14 COPY_LINE LDA #20 ; columns to copy +.386fb3 85 81 sta $81 STA CHAR_COPY +.386fb5 bf 80 54 38 lda $385480,x COPY_CHAR LDA FILE_LOAD_SCREEN,X +.386fb9 97 0c sta [$0c],y STA [SCREENBEGIN],Y +.386fbb a9 50 lda #$50 LDA #$50 ; yellow +.386fbd 97 17 sta [$17],y STA [CURSORPOS],Y +.386fbf c8 iny INY +.386fc0 e8 inx INX +.386fc1 c6 81 dec $81 DEC CHAR_COPY +.386fc3 d0 f0 bne $386fb5 BNE COPY_CHAR +.386fc5 c2 20 rep #$20 REP #$20 ; set A long +.386fc7 98 tya TYA +.386fc8 18 clc CLC +.386fc9 69 6c 00 adc #$006c ADC #108 ; skip to next line +.386fcc a8 tay TAY +.386fcd e2 20 sep #$20 SEP #$20 ; set A short +.386fcf c6 80 dec $80 DEC LINE_COPY +.386fd1 d0 de bne $386fb1 BNE COPY_LINE +.386fd3 60 rts RTS +.386fd4 POPULATE_FILES +.386fd4 64 51 stz $51 STZ SDOS_FILE_REC_PTR +.386fd6 64 52 stz $52 STZ SDOS_FILE_REC_PTR+1 +.386fd8 a9 34 lda #$34 LDA #`SDCARD_LIST +.386fda 85 53 sta $53 STA SDOS_FILE_REC_PTR+2 +.386fdc a2 00 00 ldx #$0000 LDX #0 +.386fdf PF_NEXT_FILE +.386fdf a0 0b 00 ldy #$000b LDY #11 +.386fe2 b7 51 lda [$51],y LDA [SDOS_FILE_REC_PTR],Y +.386fe4 f0 20 beq $387006 BEQ PF_DONE +.386fe6 22 c7 61 38 jsl $3861c7 JSL DISPLAY_FAT_RECORD +.386fea 22 9a 61 38 jsl $38619a JSL DISPLAY_NEXT_LINE ; Print the character +.386fee c2 20 rep #$20 REP #$20 ; set A long +.386ff0 a5 51 lda $51 LDA SDOS_FILE_REC_PTR +.386ff2 69 12 00 adc #$0012 ADC #18 +.386ff5 85 51 sta $51 STA SDOS_FILE_REC_PTR +.386ff7 c9 80 04 cmp #$0480 CMP #1152 +.386ffa b0 0a bcs $387006 BCS PF_DONE +.386ffc e8 inx INX +.386ffd e0 26 00 cpx #$0026 CPX #38 +.387000 f0 04 beq $387006 BEQ PF_DONE +.387002 e2 20 sep #$20 SEP #$20 ; set A short +.387004 80 d9 bra $386fdf BRA PF_NEXT_FILE +.387006 PF_DONE +.387006 e2 20 sep #$20 SEP #$20 ; set A short +.387008 a9 05 lda #$05 LDA #5 ; Yellow Background +.38700a 22 29 62 38 jsl $386229 JSL TEXT_COLOUR_SELECTED +.38700e 60 rts RTS +.38700f READ_FILE +.38700f a9 00 lda #$00 LDA #0 +.387011 eb xba XBA +.387012 ad 1f 03 lda $031f LDA SDOS_LINE_SELECT +.387015 c2 30 rep #$30 REP #$30 ; set A&X long +.387017 8d 00 01 sta $0100 STA UNSIGNED_MULT_A +.38701a a9 12 00 lda #$0012 LDA #18 +.38701d 8d 02 01 sta $0102 STA UNSIGNED_MULT_B +.387020 ad 04 01 lda $0104 LDA UNSIGNED_MULT_RESULT +.387023 85 51 sta $51 STA SDOS_FILE_REC_PTR +.387025 a9 00 80 lda #$8000 LDA #<>RAD_FILE_TEMP +.387028 85 80 sta $80 STA SD_DATA +.38702a a9 37 00 lda #$0037 LDA #`RAD_FILE_TEMP +.38702d 85 82 sta $82 STA SD_DATA + 2 +.38702f a0 10 00 ldy #$0010 LDY #16 +.387032 b7 51 lda [$51],y LDA [SDOS_FILE_REC_PTR],Y +.387034 22 3d 67 38 jsl $38673d JSL ISDOS_READ_FILE +.387038 e2 20 sep #$20 SEP #$20 ; set A short +.38703a 22 b1 30 38 jsl $3830b1 JSL OPL2_INIT +.38703e 22 67 70 38 jsl $387067 JSL RAD_INIT_PLAYER +.387042 22 47 70 38 jsl $387047 JSL EXIT_FILE +.387046 6b rtl RTL +.387047 EXIT_FILE +.387047 20 7d 6a jsr $386a7d JSR RESET_STATE_MACHINE +.38704a 20 db 5c jsr $385cdb JSR DRAW_DISPLAY +.38704d 20 59 5f jsr $385f59 JSR DISPLAY_FILENAME +.387050 20 61 5e jsr $385e61 JSR DISPLAY_PATTERN +.387053 20 2b 61 jsr $38612b JSR DISPLAY_ORDERS +.387056 20 af 60 jsr $3860af JSR DISPLAY_SPEED +.387059 6b rtl RTL ;****** Return to file: tracker.asm @@ -6456,746 +7350,778 @@ >0001 00 songLength .byte $00 >0002 06 InitialSpeed .byte $06 >0003 00 hasSlowTimer .byte $00 ;BOOL $00 = False, $01 = True ->386907 43 90 44 91 45 46 92 47 note_array .byte $43, $90, $44, $91, $45, $46, $92, $47, $93, $41, $94, $42, $43 ->38690f 93 41 94 42 43 -.386914 RAD_INIT_PLAYER -.386914 22 b1 30 38 jsl $3830b1 JSL OPL2_INIT ; Init OPL2 -.386918 20 11 6b jsr $386b11 JSR RAD_ALL_NOTES_OFF -.38691b a2 00 00 ldx #$0000 LDX #0 -.38691e a9 00 lda #$00 LDA #0 -.386920 RI_RESET -.386920 9f 00 00 39 sta $390000,x STA PATTERNS,X -.386924 e8 inx INX -.386925 d0 f9 bne $386920 BNE RI_RESET -.386927 c2 30 rep #$30 REP #$30 ; set A&X long -.386929 a9 00 80 lda #$8000 LDA #<>RAD_FILE_TEMP ; Set the Pointer where the File Begins -.38692c 85 08 sta $08 STA OPL2_ADDY_PTR_LO; -.38692e a9 37 00 lda #$0037 LDA #<`RAD_FILE_TEMP -.386931 85 0a sta $0a STA OPL2_ADDY_PTR_HI; -.386933 e2 20 sep #$20 SEP #$20 ; set A short -.386935 a0 10 00 ldy #$0010 LDY #$0010 -.386938 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.38693a c9 10 cmp #$10 CMP #$10 ; BCD version 1.0 or 2.1 -.38693c d0 05 bne $386943 BNE LOAD_VERSION_21 -.38693e 22 4f 69 38 jsl $38694f JSL READ_VERSION_10 -.386942 6b rtl RTL ; End of RAD_INIT_PLAYER -.386943 LOAD_VERSION_21 -.386943 22 48 69 38 jsl $386948 JSL READ_VERSION_21 -.386947 6b rtl RTL ; End of RAD_INIT_PLAYER -.386948 READ_VERSION_21 -.386948 a9 02 lda #$02 LDA #2 -.38694a 8f 00 00 17 sta $170000 STA @lTuneInfo.version -.38694e 6b rtl RTL ; End of READ_VERSION_21 -.38694f READ_VERSION_10 -.38694f a9 01 lda #$01 LDA #1 -.386951 8f 00 00 17 sta $170000 STA @lTuneInfo.version -.386955 20 a2 69 jsr $3869a2 JSR PARSER_RAD_FILE_INSTRUMENT_10; Go Parse the Instrument and Order list -.386958 20 0f 6a jsr $386a0f JSR PROCESS_ORDER_LIST_10 -.38695b 20 34 6a jsr $386a34 JSR READ_PATTERNS_10 -.38695e a0 11 00 ldy #$0011 LDY #$11 -.386961 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386963 89 40 bit #$40 BIT #$40 -.386965 f0 17 beq $38697e BEQ NORMAL_TIMER -.386967 a9 01 lda #$01 LDA #1 -.386969 8f 03 00 17 sta $170003 STA @lTuneInfo.hasSlowTimer -.38696d a9 0f lda #$0f LDA #SLOW_TIMER -.386974 8d 66 01 sta $0166 STA TIMER0_CMP_M -.386977 a9 0c lda #$0c LDA #<`SLOW_TIMER -.386979 8d 67 01 sta $0167 STA TIMER0_CMP_H -.38697c 80 15 bra $386993 BRA SET_TIMER -.38697e NORMAL_TIMER -.38697e a9 00 lda #$00 LDA #0 -.386980 8f 03 00 17 sta $170003 STA @lTuneInfo.hasSlowTimer -.386984 a9 98 lda #$98 LDA #FIFTY_HZ_COUNT -.38698b 8d 66 01 sta $0166 STA TIMER0_CMP_M -.38698e a9 04 lda #$04 LDA #<`FIFTY_HZ_COUNT -.386990 8d 67 01 sta $0167 STA TIMER0_CMP_H -.386993 SET_TIMER -.386993 20 c2 63 jsr $3863c2 JSR INIT_TIMER0 -.386996 6b rtl RTL ; End of READ_VERSION_10 ->386997 07 01 08 02 09 03 0a 04 ADLIB_OFFSETS .byte 7,1,8,2,9,3,10,4,5,11,6 ->38699f 05 0b 06 -.3869a2 PARSER_RAD_FILE_INSTRUMENT_10 -.3869a2 c8 iny INY ; $11 bit 7: description, bit6: slow timer, bits4..0: speed -.3869a3 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.3869a5 29 1f and #$1f AND #$1F -.3869a7 8f 02 00 17 sta $170002 STA @lTuneInfo.InitialSpeed -.3869ab b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.3869ad 29 80 and #$80 AND #$80 -.3869af f0 07 beq $3869b8 BEQ READ_INSTR_DATA -.3869b1 Not_Done_With_Description -.3869b1 c8 iny INY ; Move the Pointer Forward -.3869b2 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.3869b4 c9 00 cmp #$00 CMP #$00 ; Check for the End of Text -.3869b6 d0 f9 bne $3869b1 BNE Not_Done_With_Description -.3869b8 READ_INSTR_DATA -.3869b8 c8 iny INY ; This points after either After Description or next to Offset 0x11 -.3869b9 a9 38 lda #$38 LDA #<`INSTRUMENT_ACCORDN -.3869bb 85 f2 sta $f2 STA RAD_ADDR + 2 -.3869bd ProcessNextInstruments -.3869bd e2 20 sep #$20 SEP #$20 ; set A short -.3869bf b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Read Instrument Number -.3869c1 f0 4a beq $386a0d BEQ DoneProcessingInstrument; -.3869c3 c2 20 rep #$20 REP #$20 ; set A long -.3869c5 3a dec a DEC A -.3869c6 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A -.3869ca a9 16 00 lda #$0016 LDA #INSTR_REC_LEN -.3869cd 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B -.3869d1 af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT ; not sure why this one requires a long address - bank is still 0 -.3869d5 18 clc CLC -.3869d6 69 3b 10 adc #$103b ADC #<>INSTRUMENT_ACCORDN -.3869d9 85 f0 sta $f0 STA RAD_ADDR -.3869db a9 00 00 lda #$0000 LDA #0 -.3869de e2 20 sep #$20 SEP #$20 ; set A short -.3869e0 c8 iny INY -.3869e1 64 4e stz $4e STZ RAD_TEMP -.3869e3 87 f0 sta [$f0] STA [RAD_ADDR] ; Not a drum instrument -.3869e5 Transfer_Instrument_Info -.3869e5 a6 4e ldx $4e LDX RAD_TEMP -.3869e7 bf 97 69 38 lda $386997,x LDA ADLIB_OFFSETS,X ; RAD uses a different order for registers -.3869eb aa tax TAX -.3869ec b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Read Register -.3869ee 5a phy PHY -.3869ef 9b txy TXY -.3869f0 97 f0 sta [$f0],y STA [RAD_ADDR],Y ; Write to the instrument table -.3869f2 7a ply PLY -.3869f3 c8 iny INY -.3869f4 e6 4e inc $4e INC RAD_TEMP -.3869f6 a5 4e lda $4e LDA RAD_TEMP -.3869f8 c9 0b cmp #$0b CMP #11 -.3869fa 90 e9 bcc $3869e5 BCC Transfer_Instrument_Info -.3869fc 5a phy PHY ; store the position in the file on the stack -.3869fd a0 0c 00 ldy #$000c LDY #12 ; beginning of text -.386a00 a9 20 lda #$20 LDA #$20 -.386a02 BLANK_INSTR_DESCR -.386a02 97 f0 sta [$f0],y STA [RAD_ADDR],Y -.386a04 c8 iny INY -.386a05 c0 16 00 cpy #$0016 CPY #22 -.386a08 d0 f8 bne $386a02 BNE BLANK_INSTR_DESCR -.386a0a 7a ply PLY -.386a0b 80 b0 bra $3869bd BRA ProcessNextInstruments; -.386a0d DoneProcessingInstrument -.386a0d c8 iny INY -.386a0e 60 rts RTS -.386a0f PROCESS_ORDER_LIST_10 -.386a0f b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Read Song Length -.386a11 8f 01 00 17 sta $170001 STA @lTuneInfo.songLength -.386a15 aa tax TAX -.386a16 c8 iny INY -.386a17 c2 20 rep #$20 REP #$20 ; set A long -.386a19 a9 24 fc lda #$fc24 LDA #<>ORDERS -.386a1c 85 f0 sta $f0 STA RAD_ADDR -.386a1e a9 39 00 lda #$0039 LDA #<`ORDERS -.386a21 85 f2 sta $f2 STA RAD_ADDR + 2 -.386a23 e2 20 sep #$20 SEP #$20 ; set A short -.386a25 READ_ORDER -.386a25 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386a27 c8 iny INY -.386a28 87 f0 sta [$f0] STA [RAD_ADDR] -.386a2a e6 f0 inc $f0 INC RAD_ADDR -.386a2c b0 02 bcs $386a30 BCS ORDER_CONTINUE -.386a2e e6 f1 inc $f1 INC RAD_ADDR + 1 -.386a30 ORDER_CONTINUE -.386a30 ca dex DEX -.386a31 d0 f2 bne $386a25 BNE READ_ORDER -.386a33 60 rts RTS -.386a34 READ_PATTERNS_10 -.386a34 64 f3 stz $f3 STZ RAD_PATTRN -.386a36 a9 39 lda #$39 LDA #<`PATTERNS -.386a38 85 f6 sta $f6 STA RAD_PTN_DEST + 2 -.386a3a NEXT_PATTERN -.386a3a c2 20 rep #$20 REP #$20 ; set A long -.386a3c b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386a3e f0 1f beq $386a5f BEQ SKIP_PATTERN -.386a40 5a phy PHY -.386a41 a8 tay TAY -.386a42 a5 f3 lda $f3 LDA RAD_PATTRN -.386a44 29 ff 00 and #$00ff AND #$00FF -.386a47 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A -.386a4b a9 01 07 lda #$0701 LDA #PATTERN_BYTES -.386a4e 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B -.386a52 af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT -.386a56 1a inc a INC A ; skip the pattern byte -.386a57 85 f4 sta $f4 STA RAD_PTN_DEST -.386a59 e2 20 sep #$20 SEP #$20 ; set A short -.386a5b 20 6c 6a jsr $386a6c JSR READ_PATTERN_10 -.386a5e 7a ply PLY -.386a5f SKIP_PATTERN -.386a5f c8 iny INY -.386a60 c8 iny INY -.386a61 e2 20 sep #$20 SEP #$20 ; set A short -.386a63 e6 f3 inc $f3 INC RAD_PATTRN -.386a65 a5 f3 lda $f3 LDA RAD_PATTRN -.386a67 c9 20 cmp #$20 CMP #32 -.386a69 d0 cf bne $386a3a BNE NEXT_PATTERN -.386a6b 60 rts RTS -.386a6c READ_PATTERN_10 -.386a6c b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; read the line number - bit 7 indicates the last line -.386a6e 8f 42 00 00 sta $000042 STA @lRAD_LINE -.386a72 c8 iny INY -.386a73 c2 20 rep #$20 REP #$20 ; set A long -.386a75 29 7f 00 and #$007f AND #$7F -.386a78 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A -.386a7c a9 1c 00 lda #$001c LDA #LINE_BYTES -.386a7f 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B -.386a83 af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT -.386a87 1a inc a INC A ; skip the line number -.386a88 8f fa 00 00 sta $0000fa STA @lRAD_LINE_PTR -.386a8c e2 20 sep #$20 SEP #$20 ; set A short -.386a8e READ_NOTE -.386a8e a6 fa ldx $fa LDX RAD_LINE_PTR ; X contains the offset in the destination memory -.386a90 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; channel - bit 7 indicates the last note -.386a92 c8 iny INY -.386a93 8f f9 00 00 sta $0000f9 STA @lRAD_LAST_NOTE -.386a97 29 0f and #$0f AND #$F -.386a99 8f f7 00 00 sta $0000f7 STA @lRAD_CHANNEL -.386a9d c2 20 rep #$20 REP #$20 ; set A long -.386a9f 8a txa TXA -.386aa0 18 clc CLC -.386aa1 65 f7 adc $f7 ADC RAD_CHANNEL ; multiply channel by 3 -.386aa3 65 f7 adc $f7 ADC RAD_CHANNEL -.386aa5 65 f7 adc $f7 ADC RAD_CHANNEL -.386aa7 aa tax TAX -.386aa8 e2 20 sep #$20 SEP #$20 ; set A short -.386aaa b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; note / octave -.386aac 5a phy PHY -.386aad 9b txy TXY -.386aae 97 f4 sta [$f4],y STA [RAD_PTN_DEST],Y -.386ab0 7a ply PLY -.386ab1 c8 iny INY -.386ab2 e8 inx INX -.386ab3 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; instrument/effect -.386ab5 5a phy PHY -.386ab6 9b txy TXY -.386ab7 97 f4 sta [$f4],y STA [RAD_PTN_DEST],Y -.386ab9 7a ply PLY -.386aba c8 iny INY -.386abb e8 inx INX -.386abc 29 0f and #$0f AND #$F -.386abe f0 09 beq $386ac9 BEQ CHECK_LASTNOTE -.386ac0 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; effect parameter -.386ac2 5a phy PHY -.386ac3 9b txy TXY -.386ac4 97 f4 sta [$f4],y STA [RAD_PTN_DEST],Y -.386ac6 7a ply PLY -.386ac7 c8 iny INY -.386ac8 e8 inx INX -.386ac9 CHECK_LASTNOTE -.386ac9 af f9 00 00 lda $0000f9 LDA @lRAD_LAST_NOTE -.386acd 10 bf bpl $386a8e BPL READ_NOTE -.386acf af 42 00 00 lda $000042 LDA @lRAD_LINE -.386ad3 10 97 bpl $386a6c BPL READ_PATTERN_10 -.386ad5 60 rts RTS -.386ad6 DRAW_BLANKS -.386ad6 5a phy PHY -.386ad7 da phx PHX -.386ad8 a2 12 00 ldx #$0012 LDX #18 -.386adb a0 00 00 ldy #$0000 LDY #0 -.386ade a9 2d lda #$2d LDA #'-' -.386ae0 BL_NEXT -.386ae0 97 0c sta [$0c],y STA [SCREENBEGIN], Y -.386ae2 c8 iny INY -.386ae3 ca dex DEX -.386ae4 d0 fa bne $386ae0 BNE BL_NEXT -.386ae6 fa plx PLX -.386ae7 7a ply PLY -.386ae8 60 rts RTS -.386ae9 DISPLAY_RAD_PTN_DEST -.386ae9 5a phy PHY -.386aea a5 f6 lda $f6 LDA RAD_PTN_DEST+2 -.386aec 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386aef c8 iny INY -.386af0 c8 iny INY -.386af1 a5 f5 lda $f5 LDA RAD_PTN_DEST+1 -.386af3 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386af6 c8 iny INY -.386af7 c8 iny INY -.386af8 a5 f4 lda $f4 LDA RAD_PTN_DEST -.386afa 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386afd 7a ply PLY -.386afe 60 rts RTS -.386aff WRITE_A_LNG -.386aff 48 pha PHA -.386b00 48 pha PHA -.386b01 e2 20 sep #$20 SEP #$20 ; set A short -.386b03 68 pla PLA -.386b04 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386b07 88 dey DEY -.386b08 88 dey DEY -.386b09 68 pla PLA -.386b0a 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386b0d c2 20 rep #$20 REP #$20 ; set A long -.386b0f 68 pla PLA -.386b10 60 rts RTS -.386b11 RAD_ALL_NOTES_OFF -.386b11 5a phy PHY -.386b12 c2 20 rep #$20 REP #$20 ; set A long -.386b14 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.386b17 85 2c sta $2c STA OPL2_IND_ADDY_LL -.386b19 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.386b1c 85 2e sta $2e STA OPL2_IND_ADDY_LL + 2 -.386b1e e2 20 sep #$20 SEP #$20 ; set A short -.386b20 a0 a0 00 ldy #$00a0 LDY #$A0 -.386b23 a9 00 lda #$00 LDA #0 -.386b25 NEXT_NOTE_OFF -.386b25 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y -.386b27 c8 iny INY -.386b28 c0 b9 00 cpy #$00b9 CPY #$B9 -.386b2b d0 f8 bne $386b25 BNE NEXT_NOTE_OFF -.386b2d 7a ply PLY -.386b2e 60 rts RTS -.386b2f RAD_PLAYNOTES -.386b2f 5a phy PHY -.386b30 20 d6 6a jsr $386ad6 JSR DRAW_BLANKS -.386b33 c2 20 rep #$20 REP #$20 ; set A long -.386b35 af 18 0f 38 lda $380f18 LDA PATTERN_NUM -.386b39 29 ff 00 and #$00ff AND #$FF -.386b3c 3a dec a DEC A ; start at 0 -.386b3d 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A -.386b41 a9 01 07 lda #$0701 LDA #PATTERN_BYTES -.386b44 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B -.386b48 af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT -.386b4c 1a inc a INC A ; skip the pattern number byte -.386b4d 85 f4 sta $f4 STA RAD_PTN_DEST -.386b4f e2 20 sep #$20 SEP #$20 ; set A short -.386b51 a9 39 lda #$39 LDA #<`PATTERNS -.386b53 85 f6 sta $f6 STA RAD_PTN_DEST + 2 -.386b55 a0 00 01 ldy #$0100 LDY #128 * 2 -.386b58 20 e9 6a jsr $386ae9 JSR DISPLAY_RAD_PTN_DEST ; display the address of the pattern -.386b5b c2 20 rep #$20 REP #$20 ; set A long -.386b5d a5 6c lda $6c LDA LINE_NUM_HEX -.386b5f 29 7f 00 and #$007f AND #$7F -.386b62 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A -.386b66 a9 1c 00 lda #$001c LDA #LINE_BYTES -.386b69 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B -.386b6d af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT -.386b71 1a inc a INC A ; skip the line number byte -.386b72 a0 82 00 ldy #$0082 LDY #128 + 2 -.386b75 20 ff 6a jsr $386aff JSR WRITE_A_LNG ; display the line offset from the pattern address -.386b78 a8 tay TAY ; Y contains the line offset -.386b79 a9 00 00 lda #$0000 LDA #0 -.386b7c e2 20 sep #$20 SEP #$20 ; set A short -.386b7e 64 28 stz $28 STZ OPL2_REG_REGION -.386b80 PN_NEXT_NOTE -.386b80 8f 27 00 00 sta $000027 STA @lOPL2_CHANNEL -.386b84 aa tax TAX -.386b85 bf 63 67 38 lda $386763,x LDA CHANNELS,X -.386b89 d0 05 bne $386b90 BNE PN_PLAY_NOTE -.386b8b c8 iny INY ; skip the channel data -.386b8c c8 iny INY -.386b8d c8 iny INY -.386b8e 80 58 bra $386be8 BRA PN_CONTINUE -.386b90 PN_PLAY_NOTE -.386b90 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; octave/note -.386b92 29 7f and #$7f AND #$7F -.386b94 20 4f 6d jsr $386d4f JSR RAD_WRITE_OCT_NOTE -.386b97 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; bit 7 is bit 4 of the instrument number -.386b99 29 80 and #$80 AND #$80 -.386b9b 4a lsr a LSR A -.386b9c 4a lsr a LSR A -.386b9d 4a lsr a LSR A -.386b9e 85 4e sta $4e STA RAD_TEMP -.386ba0 c8 iny INY -.386ba1 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; instrument/effect -.386ba3 29 f0 and #$f0 AND #$F0 -.386ba5 4a lsr a LSR A -.386ba6 4a lsr a LSR A -.386ba7 4a lsr a LSR A -.386ba8 4a lsr a LSR A -.386ba9 65 4e adc $4e ADC RAD_TEMP -.386bab f0 14 beq $386bc1 BEQ SKIP_INSTRUMENT -.386bad 3a dec a DEC A ; instruments are starting at 0 -.386bae 8f 6a 00 00 sta $00006a STA @lINSTR_NUMBER -.386bb2 5a phy PHY -.386bb3 a6 27 ldx $27 LDX OPL2_CHANNEL -.386bb5 a9 00 lda #$00 LDA #0 -.386bb7 eb xba XBA -.386bb8 bf 18 10 38 lda $381018,x LDA @lregisterOffsets_operator0,X -.386bbc aa tax TAX -.386bbd 20 01 64 jsr $386401 JSR LOAD_INSTRUMENT -.386bc0 7a ply PLY -.386bc1 SKIP_INSTRUMENT -.386bc1 af 30 00 00 lda $000030 LDA @lOPL2_NOTE -.386bc5 f0 11 beq $386bd8 BEQ SKIP_NOTE ; if the note is 0, don't play anything. -.386bc7 c9 0f cmp #$0f CMP #$0F ; NOTE OFF -.386bc9 f0 2b beq $386bf6 BEQ RAD_NOTE_OFF -.386bcb c2 20 rep #$20 REP #$20 ; set A long -.386bcd 5a phy PHY -.386bce 20 f5 37 jsr $3837f5 JSR OPL2_GET_REG_OFFSET -.386bd1 22 01 32 38 jsl $383201 JSL OPL2_PLAYNOTE -.386bd5 7a ply PLY -.386bd6 e2 20 sep #$20 SEP #$20 ; set A short -.386bd8 SKIP_NOTE -.386bd8 a9 00 lda #$00 LDA #0 -.386bda eb xba XBA -.386bdb b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; instrument/effect -.386bdd c8 iny INY -.386bde 29 0f and #$0f AND #$F -.386be0 f0 05 beq $386be7 BEQ SKIP_EFFECT -.386be2 0a asl a ASL A ; double bytes -.386be3 aa tax TAX -.386be4 fc 07 6c jsr ($386c07,x) JSR (RAD_EFFECT_TABLE,X) -.386be7 SKIP_EFFECT -.386be7 c8 iny INY -.386be8 PN_CONTINUE -.386be8 a9 00 lda #$00 LDA #0 ; clear B -.386bea eb xba XBA -.386beb af 27 00 00 lda $000027 LDA @lOPL2_CHANNEL -.386bef 1a inc a INC A -.386bf0 c9 09 cmp #$09 CMP #9 -.386bf2 d0 8c bne $386b80 BNE PN_NEXT_NOTE -.386bf4 7a ply PLY -.386bf5 60 rts RTS -.386bf6 RAD_NOTE_OFF -.386bf6 af 27 00 00 lda $000027 LDA @lOPL2_CHANNEL -.386bfa 18 clc CLC -.386bfb 69 b0 adc #$b0 ADC #$B0 -.386bfd 85 2c sta $2c STA OPL2_IND_ADDY_LL -.386bff a9 00 lda #$00 LDA #0 -.386c01 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386c03 c8 iny INY -.386c04 c8 iny INY -.386c05 80 e1 bra $386be8 BRA PN_CONTINUE -.386c07 RAD_EFFECT_TABLE ->386c07 27 6c .word <>RAD_EFFECT_NONE ; 00 ->386c09 9a 6c .word <>RAD_EFFECT_NOTE_SLIDE_UP ; 01 ->386c0b 9a 6c .word <>RAD_EFFECT_NOTE_SLIDE_DOWN ; 02 ->386c0d 27 6c .word <>RAD_EFFECT_NOTE_SLIDE_TO ; 03 ->386c0f 27 6c .word <>RAD_NOOP ->386c11 27 6c .word <>RAD_EFFECT_NOTE_SLIDE_VOLUME ; 05 ->386c13 27 6c .word <>RAD_NOOP ->386c15 27 6c .word <>RAD_NOOP ->386c17 27 6c .word <>RAD_NOOP ->386c19 27 6c .word <>RAD_NOOP ->386c1b 28 6c .word <>RAD_EFFECT_VOLUME_SLIDE ; 0A ->386c1d 27 6c .word <>RAD_NOOP ->386c1f 10 6d .word <>RAD_EFFECT_SET_VOLUME ; 0C ->386c21 7f 6c .word <>RAD_EFFECT_PATTERN_BREAK ; 0D ->386c23 27 6c .word <>RAD_NOOP ->386c25 90 6c .word <>RAD_EFFECT_SET_SPEED ; 0F -.386c27 RAD_NOOP -.386c27 RAD_EFFECT_NONE -.386c27 RAD_EFFECT_NOTE_SLIDE_TO -.386c27 RAD_EFFECT_NOTE_SLIDE_VOLUME -.386c27 60 rts RTS -.386c28 RAD_EFFECT_VOLUME_SLIDE -.386c28 5a phy PHY -.386c29 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; store value of the effect in RAD_CHANNE_EFFCT -.386c2b 85 4c sta $4c STA RAD_CHANNE_EFFCT -.386c2d c2 20 rep #$20 REP #$20 ; set A long -.386c2f a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.386c32 85 2c sta $2c STA OPL2_IND_ADDY_LL -.386c34 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.386c37 85 2e sta $2e STA OPL2_IND_ADDY_LL + 2 -.386c39 e2 30 sep #$30 SEP #$30 ; set A&X short -.386c3b a5 27 lda $27 LDA OPL2_CHANNEL -.386c3d aa tax TAX -.386c3e bf 18 10 38 lda $381018,x LDA @lregisterOffsets_operator0,X -.386c42 18 clc CLC -.386c43 69 40 adc #$40 ADC #$40 -.386c45 a8 tay TAY -.386c46 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y ; volume -.386c48 48 pha PHA -.386c49 29 3f and #$3f AND #$3F -.386c4b 18 clc CLC -.386c4c 65 4c adc $4c ADC RAD_CHANNE_EFFCT ; check for values greater than 50 -.386c4e c9 40 cmp #$40 CMP #$40 ; if there's an overflow, use #$3F (low volume) -.386c50 90 02 bcc $386c54 BCC NO_OVERFLOW_0 -.386c52 a9 3f lda #$3f LDA #$3F -.386c54 NO_OVERFLOW_0 -.386c54 29 3f and #$3f AND #$3F -.386c56 85 4e sta $4e STA RAD_TEMP -.386c58 68 pla PLA -.386c59 29 c0 and #$c0 AND #$C0 -.386c5b 05 4e ora $4e ORA RAD_TEMP -.386c5d 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y -.386c5f c8 iny INY -.386c60 c8 iny INY -.386c61 c8 iny INY -.386c62 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y ; volume -.386c64 48 pha PHA -.386c65 29 3f and #$3f AND #$3F -.386c67 18 clc CLC -.386c68 65 4c adc $4c ADC RAD_CHANNE_EFFCT -.386c6a c9 40 cmp #$40 CMP #$40 ; if there's an overflow, use #$3F (low volume) -.386c6c 90 02 bcc $386c70 BCC NO_OVERFLOW_1 -.386c6e a9 3f lda #$3f LDA #$3F -.386c70 NO_OVERFLOW_1 -.386c70 29 3f and #$3f AND #$3F -.386c72 85 4e sta $4e STA RAD_TEMP -.386c74 68 pla PLA -.386c75 29 c0 and #$c0 AND #$C0 -.386c77 05 4e ora $4e ORA RAD_TEMP -.386c79 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y -.386c7b c2 10 rep #$10 REP #$10 ; set X long -.386c7d 7a ply PLY -.386c7e 60 rts RTS -.386c7f RAD_EFFECT_PATTERN_BREAK -.386c7f b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; effect parameter -.386c81 3a dec a DEC A ; DECREMENT by 1, because the next timer interrupt will increment at the beginning -.386c82 85 6c sta $6c STA LINE_NUM_HEX -.386c84 a9 00 lda #$00 LDA #0 ; convert the effect to a decimal line number -.386c86 8f 19 0f 38 sta $380f19 STA @lLINE_NUM_DEC -.386c8a 20 4d 63 jsr $38634d JSR INCREMENT_ORDER -.386c8d 7a ply PLY ; don't return to the calling method, return to the parent -.386c8e 7a ply PLY -.386c8f 60 rts RTS -.386c90 RAD_EFFECT_SET_SPEED -.386c90 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; effect parameter -.386c92 8f 02 00 17 sta $170002 STA @lTuneInfo.InitialSpeed -.386c96 20 af 60 jsr $3860af JSR DISPLAY_SPEED -.386c99 60 rts RTS -.386c9a RAD_EFFECT_NOTE_SLIDE_UP -.386c9a RAD_EFFECT_NOTE_SLIDE_DOWN -.386c9a 5a phy PHY -.386c9b 4a lsr a LSR -.386c9c 85 50 sta $50 STA RAD_EFFECT ; 1 slide down, 2 slide up -.386c9e b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; store value of the effect in RAD_CHANNE_EFFCT -.386ca0 85 4c sta $4c STA RAD_CHANNE_EFFCT -.386ca2 c2 20 rep #$20 REP #$20 ; set A long -.386ca4 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.386ca7 85 2c sta $2c STA OPL2_IND_ADDY_LL -.386ca9 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.386cac 85 2e sta $2e STA OPL2_IND_ADDY_LL + 2 -.386cae e2 30 sep #$30 SEP #$30 ; set A&X short -.386cb0 a5 27 lda $27 LDA OPL2_CHANNEL -.386cb2 18 clc CLC -.386cb3 69 a0 adc #$a0 ADC #$A0 -.386cb5 a8 tay TAY -.386cb6 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y ; read low fnumber byte -.386cb8 c2 10 rep #$10 REP #$10 ; set X long -.386cba bb tyx TYX -.386cbb a0 8a 00 ldy #$008a LDY #128 + 10 -.386cbe 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386cc1 9b txy TXY -.386cc2 e2 10 sep #$10 SEP #$10 ; set X short -.386cc4 48 pha PHA ; store A on the stack -.386cc5 98 tya TYA -.386cc6 18 clc CLC -.386cc7 69 10 adc #$10 ADC #$10 -.386cc9 a8 tay TAY -.386cca b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y ; read bits 0,1 of high fnumber -.386ccc 85 4e sta $4e STA RAD_TEMP ; store the entire value of $B0 -.386cce c2 10 rep #$10 REP #$10 ; set X long -.386cd0 bb tyx TYX -.386cd1 a0 08 01 ldy #$0108 LDY #256 + 8 -.386cd4 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386cd7 29 03 and #$03 AND #3 -.386cd9 a0 88 00 ldy #$0088 LDY #128 + 8 -.386cdc 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386cdf 9b txy TXY -.386ce0 eb xba XBA -.386ce1 68 pla PLA ; A is now the FNUMBER -.386ce2 aa tax TAX ; X is now the FNUMBER -.386ce3 a5 50 lda $50 LDA RAD_EFFECT -.386ce5 89 02 bit #$02 BIT #2 -.386ce7 f0 0a beq $386cf3 BEQ SLIDE_UP -.386ce9 c2 20 rep #$20 REP #$20 ; set A long -.386ceb 8a txa TXA -.386cec 38 sec SEC -.386ced e5 4c sbc $4c SBC RAD_CHANNE_EFFCT ; substract the effect parameter -.386cef e2 20 sep #$20 SEP #$20 ; set A short -.386cf1 80 08 bra $386cfb BRA FINISH_SLIDE -.386cf3 SLIDE_UP -.386cf3 c2 20 rep #$20 REP #$20 ; set A long -.386cf5 8a txa TXA -.386cf6 18 clc CLC -.386cf7 65 4c adc $4c ADC RAD_CHANNE_EFFCT ; substract the effect parameter -.386cf9 e2 20 sep #$20 SEP #$20 ; set A short -.386cfb FINISH_SLIDE -.386cfb e2 10 sep #$10 SEP #$10 ; set X short -.386cfd eb xba XBA -.386cfe 29 03 and #$03 AND #3 -.386d00 05 4e ora $4e ORA RAD_TEMP -.386d02 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y -.386d04 98 tya TYA -.386d05 38 sec SEC -.386d06 e9 10 sbc #$10 SBC #$10 -.386d08 a8 tay TAY -.386d09 eb xba XBA -.386d0a 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y -.386d0c c2 10 rep #$10 REP #$10 ; set X long -.386d0e 7a ply PLY -.386d0f 60 rts RTS -.386d10 RAD_EFFECT_SET_VOLUME -.386d10 5a phy PHY -.386d11 c2 20 rep #$20 REP #$20 ; set A long -.386d13 a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.386d16 85 2c sta $2c STA OPL2_IND_ADDY_LL -.386d18 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.386d1b 85 2e sta $2e STA OPL2_IND_ADDY_LL + 2 -.386d1d e2 20 sep #$20 SEP #$20 ; set A short -.386d1f b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; effect parameter -.386d21 29 7f and #$7f AND #$7F -.386d23 f0 01 beq $386d26 BEQ HANDLE_ZERO -.386d25 3a dec a DEC A -.386d26 HANDLE_ZERO -.386d26 49 3f eor #$3f EOR #$3F ; complement -.386d28 85 4e sta $4e STA RAD_TEMP -.386d2a e2 10 sep #$10 SEP #$10 ; set X short -.386d2c a6 27 ldx $27 LDX OPL2_CHANNEL -.386d2e bf 18 10 38 lda $381018,x LDA @lregisterOffsets_operator0,X -.386d32 18 clc CLC -.386d33 69 40 adc #$40 ADC #$40 -.386d35 a8 tay TAY -.386d36 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y -.386d38 29 c0 and #$c0 AND #$C0 ; -.386d3a 18 clc CLC -.386d3b 65 4e adc $4e ADC RAD_TEMP -.386d3d 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y -.386d3f c8 iny INY -.386d40 c8 iny INY -.386d41 c8 iny INY -.386d42 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y -.386d44 29 c0 and #$c0 AND #$C0 ; -.386d46 18 clc CLC -.386d47 65 4e adc $4e ADC RAD_TEMP -.386d49 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y -.386d4b c2 10 rep #$10 REP #$10 ; set X long -.386d4d 7a ply PLY -.386d4e 60 rts RTS -.386d4f RAD_WRITE_OCT_NOTE -.386d4f 5a phy PHY -.386d50 48 pha PHA -.386d51 48 pha PHA -.386d52 af 27 00 00 lda $000027 LDA @lOPL2_CHANNEL -.386d56 0a asl a ASL A ; multiply the channel by 2 for the screen position -.386d57 a8 tay TAY -.386d58 68 pla PLA -.386d59 f0 03 beq $386d5e BEQ DONT_DISPLAY_00 -.386d5b 20 b1 5d jsr $385db1 JSR WRITE_HEX -.386d5e DONT_DISPLAY_00 -.386d5e 29 70 and #$70 AND #$70 ; octave -.386d60 4a lsr a LSR -.386d61 4a lsr a LSR -.386d62 4a lsr a LSR -.386d63 4a lsr a LSR -.386d64 8f 31 00 00 sta $000031 STA @lOPL2_OCTAVE -.386d68 68 pla PLA -.386d69 29 0f and #$0f AND #$0F ; note -.386d6b 8f 30 00 00 sta $000030 STA @lOPL2_NOTE -.386d6f 7a ply PLY -.386d70 60 rts RTS -.386d71 RAD_SETINSTRUMENT -.386d71 5a phy PHY -.386d72 e2 20 sep #$20 SEP #$20 ; set A short -.386d74 a9 01 lda #$01 LDA #$01 -.386d76 85 26 sta $26 STA OPL2_OPERATOR -.386d78 c2 20 rep #$20 REP #$20 ; set A long -.386d7a a9 38 00 lda #$0038 LDA #<`INSTRUMENT_ACCORDN -.386d7d 85 0a sta $0a STA OPL2_ADDY_PTR_HI -.386d7f a5 32 lda $32 LDA OPL2_PARAMETER0 -.386d81 29 ff 00 and #$00ff AND #$00FF -.386d84 3a dec a DEC A -.386d85 0a asl a ASL A -.386d86 0a asl a ASL A -.386d87 0a asl a ASL A -.386d88 0a asl a ASL A -.386d89 18 clc CLC -.386d8a 69 3b 10 adc #$103b ADC #<>INSTRUMENT_ACCORDN -.386d8d 85 08 sta $08 STA OPL2_ADDY_PTR_LO -.386d8f c2 20 rep #$20 REP #$20 ; set A long -.386d91 a9 20 00 lda #$0020 LDA #$0020 -.386d94 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386d98 e2 20 sep #$20 SEP #$20 ; set A short -.386d9a a0 00 00 ldy #$0000 LDY #$0000 -.386d9d b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386d9f 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386da1 c2 20 rep #$20 REP #$20 ; set A long -.386da3 a9 40 00 lda #$0040 LDA #$0040 -.386da6 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386daa e2 20 sep #$20 SEP #$20 ; set A short -.386dac a0 02 00 ldy #$0002 LDY #$0002 -.386daf b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386db1 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386db3 c2 20 rep #$20 REP #$20 ; set A long -.386db5 a9 60 00 lda #$0060 LDA #$0060 -.386db8 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386dbc e2 20 sep #$20 SEP #$20 ; set A short -.386dbe a0 04 00 ldy #$0004 LDY #$0004 -.386dc1 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386dc3 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386dc5 c2 20 rep #$20 REP #$20 ; set A long -.386dc7 a9 80 00 lda #$0080 LDA #$0080 -.386dca 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386dce e2 20 sep #$20 SEP #$20 ; set A short -.386dd0 a0 06 00 ldy #$0006 LDY #$0006 -.386dd3 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386dd5 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386dd7 c2 20 rep #$20 REP #$20 ; set A long -.386dd9 a9 e0 00 lda #$00e0 LDA #$00E0 -.386ddc 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386de0 e2 20 sep #$20 SEP #$20 ; set A short -.386de2 a0 09 00 ldy #$0009 LDY #$0009 -.386de5 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386de7 29 0f and #$0f AND #$0F -.386de9 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386deb a9 00 lda #$00 LDA #$00 -.386ded 85 26 sta $26 STA OPL2_OPERATOR -.386def c2 20 rep #$20 REP #$20 ; set A long -.386df1 a9 20 00 lda #$0020 LDA #$0020 -.386df4 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386df8 e2 20 sep #$20 SEP #$20 ; set A short -.386dfa a0 01 00 ldy #$0001 LDY #$0001 -.386dfd b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386dff 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386e01 c2 20 rep #$20 REP #$20 ; set A long -.386e03 a9 40 00 lda #$0040 LDA #$0040 -.386e06 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386e0a e2 20 sep #$20 SEP #$20 ; set A short -.386e0c a0 03 00 ldy #$0003 LDY #$0003 -.386e0f b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386e11 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386e13 c2 20 rep #$20 REP #$20 ; set A long -.386e15 a9 60 00 lda #$0060 LDA #$0060 -.386e18 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386e1c e2 20 sep #$20 SEP #$20 ; set A short -.386e1e a0 05 00 ldy #$0005 LDY #$0005 -.386e21 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386e23 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386e25 c2 20 rep #$20 REP #$20 ; set A long -.386e27 a9 80 00 lda #$0080 LDA #$0080 -.386e2a 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386e2e e2 20 sep #$20 SEP #$20 ; set A short -.386e30 a0 71 00 ldy #$0071 LDY #$00071 -.386e33 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386e35 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386e37 c2 20 rep #$20 REP #$20 ; set A long -.386e39 a9 e0 00 lda #$00e0 LDA #$00E0 -.386e3c 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET -.386e40 e2 20 sep #$20 SEP #$20 ; set A short -.386e42 a0 09 00 ldy #$0009 LDY #$0009 -.386e45 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386e47 29 f0 and #$f0 AND #$F0 -.386e49 4a lsr a LSR A -.386e4a 4a lsr a LSR A -.386e4b 4a lsr a LSR A -.386e4c 4a lsr a LSR A -.386e4d 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386e4f a5 27 lda $27 LDA OPL2_CHANNEL -.386e51 18 clc CLC -.386e52 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 -.386e54 69 c0 adc #$c0 ADC #$C0 -.386e56 85 2a sta $2a STA OPL2_REG_OFFSET -.386e58 a9 00 lda #$00 LDA #$00 -.386e5a 85 2b sta $2b STA OPL2_REG_OFFSET+1; -.386e5c c2 30 rep #$30 REP #$30 ; set A&X long -.386e5e 18 clc CLC -.386e5f a9 00 e6 lda #$e600 LDA #<>OPL3_R_BASE -.386e62 65 2a adc $2a ADC OPL2_REG_OFFSET -.386e64 85 2c sta $2c STA OPL2_IND_ADDY_LL -.386e66 a9 af 00 lda #$00af LDA #`OPL3_R_BASE -.386e69 85 2e sta $2e STA OPL2_IND_ADDY_HL -.386e6b e2 20 sep #$20 SEP #$20 ; set A short -.386e6d a0 08 00 ldy #$0008 LDY #$0008 -.386e70 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y -.386e72 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] -.386e74 7a ply PLY -.386e75 60 rts RTS +>38705a 43 90 44 91 45 46 92 47 note_array .byte $43, $90, $44, $91, $45, $46, $92, $47, $93, $41, $94, $42, $43 +>387062 93 41 94 42 43 +.387067 RAD_INIT_PLAYER +.387067 22 b1 30 38 jsl $3830b1 JSL OPL2_INIT ; Init OPL2 +.38706b 20 93 72 jsr $387293 JSR RAD_ALL_NOTES_OFF +.38706e a2 00 00 ldx #$0000 LDX #0 +.387071 a9 00 lda #$00 LDA #0 +.387073 RI_RESET +.387073 9f 00 00 39 sta $390000,x STA PATTERNS,X +.387077 e8 inx INX +.387078 d0 f9 bne $387073 BNE RI_RESET +.38707a c2 30 rep #$30 REP #$30 ; set A&X long +.38707c a9 00 80 lda #$8000 LDA #<>RAD_FILE_TEMP ; Set the Pointer where the File Begins +.38707f 85 08 sta $08 STA OPL2_ADDY_PTR_LO; +.387081 a9 37 00 lda #$0037 LDA #<`RAD_FILE_TEMP +.387084 85 0a sta $0a STA OPL2_ADDY_PTR_HI; +.387086 e2 20 sep #$20 SEP #$20 ; set A short +.387088 a0 10 00 ldy #$0010 LDY #$0010 +.38708b b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.38708d c9 10 cmp #$10 CMP #$10 ; BCD version 1.0 or 2.1 +.38708f d0 05 bne $387096 BNE RI_LOAD_VERSION_21 +.387091 22 f3 70 38 jsl $3870f3 JSL READ_VERSION_10 +.387095 6b rtl RTL ; End of RAD_INIT_PLAYER +.387096 RI_LOAD_VERSION_21 +.387096 c9 21 cmp #$21 CMP #$21 +.387098 d0 04 bne $38709e BNE RI_INVALID +.38709a 22 9f 70 38 jsl $38709f JSL READ_VERSION_21 +.38709e RI_INVALID +.38709e 6b rtl RTL ; End of RAD_INIT_PLAYER +.38709f READ_VERSION_21 +.38709f a9 02 lda #$02 LDA #2 +.3870a1 8f 00 00 17 sta $170000 STA @lTuneInfo.version +.3870a5 20 ac 70 jsr $3870ac JSR READ_TIMER +.3870a8 20 7e 71 jsr $38717e JSR PARSER_RAD_FILE_INSTRUMENT_21; Parse the Instrument +.3870ab 6b rtl RTL ; End of READ_VERSION_21 +.3870ac READ_TIMER +.3870ac a0 11 00 ldy #$0011 LDY #$11 +.3870af b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.3870b1 89 40 bit #$40 BIT #$40 +.3870b3 f0 17 beq $3870cc BEQ RT_NOT_SLOW +.3870b5 a9 01 lda #$01 LDA #1 +.3870b7 8f 03 00 17 sta $170003 STA @lTuneInfo.hasSlowTimer +.3870bb a9 0f lda #$0f LDA #SLOW_TIMER +.3870c2 8d 66 01 sta $0166 STA TIMER0_CMP_M +.3870c5 a9 0c lda #$0c LDA #<`SLOW_TIMER +.3870c7 8d 67 01 sta $0167 STA TIMER0_CMP_H +.3870ca 80 23 bra $3870ef BRA SET_TIMER +.3870cc RT_NOT_SLOW +.3870cc 89 20 bit #$20 BIT #$20 +.3870ce f0 0a beq $3870da BEQ RT_NOT_BPM +.3870d0 c8 iny INY +.3870d1 c2 20 rep #$20 REP #$20 ; set A long +.3870d3 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.3870d5 e2 20 sep #$20 SEP #$20 ; set A short +.3870d7 c8 iny INY +.3870d8 80 15 bra $3870ef BRA SET_TIMER +.3870da RT_NOT_BPM +.3870da a9 00 lda #$00 LDA #0 +.3870dc 8f 03 00 17 sta $170003 STA @lTuneInfo.hasSlowTimer +.3870e0 a9 98 lda #$98 LDA #FIFTY_HZ_COUNT +.3870e7 8d 66 01 sta $0166 STA TIMER0_CMP_M +.3870ea a9 04 lda #$04 LDA #<`FIFTY_HZ_COUNT +.3870ec 8d 67 01 sta $0167 STA TIMER0_CMP_H +.3870ef SET_TIMER +.3870ef 20 13 6b jsr $386b13 JSR INIT_TIMER0 +.3870f2 60 rts RTS +.3870f3 READ_VERSION_10 +.3870f3 a9 01 lda #$01 LDA #1 +.3870f5 8f 00 00 17 sta $170000 STA @lTuneInfo.version +.3870f9 20 11 71 jsr $387111 JSR PARSER_RAD_FILE_INSTRUMENT_10; Parse the Instrument +.3870fc 20 91 71 jsr $387191 JSR PROCESS_ORDER_LIST_10 ; Parse the Order List +.3870ff 20 b6 71 jsr $3871b6 JSR READ_PATTERNS_10 +.387102 20 ac 70 jsr $3870ac JSR READ_TIMER +.387105 6b rtl RTL ; End of READ_VERSION_10 +>387106 07 01 08 02 09 03 0a 04 ADLIB_OFFSETS .byte 7,1,8,2,9,3,10,4,5,11,6 +>38710e 05 0b 06 +.387111 PARSER_RAD_FILE_INSTRUMENT_10 +.387111 c8 iny INY ; $11 bit 7: description, bit6: slow timer, bits4..0: speed +.387112 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387114 29 1f and #$1f AND #$1F +.387116 8f 02 00 17 sta $170002 STA @lTuneInfo.InitialSpeed +.38711a b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.38711c 29 80 and #$80 AND #$80 +.38711e f0 07 beq $387127 BEQ READ_INSTR_DATA +.387120 Not_Done_With_Description +.387120 c8 iny INY ; Move the Pointer Forward +.387121 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387123 c9 00 cmp #$00 CMP #$00 ; Check for the End of Text +.387125 d0 f9 bne $387120 BNE Not_Done_With_Description +.387127 READ_INSTR_DATA +.387127 c8 iny INY ; This points after either After Description or next to Offset 0x11 +.387128 a9 38 lda #$38 LDA #<`INSTRUMENT_ACCORDN +.38712a 85 f2 sta $f2 STA RAD_ADDR + 2 +.38712c ProcessNextInstruments_10 +.38712c e2 20 sep #$20 SEP #$20 ; set A short +.38712e b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Read Instrument Number +.387130 f0 4a beq $38717c BEQ DoneProcessingInstrument_10 +.387132 c2 20 rep #$20 REP #$20 ; set A long +.387134 3a dec a DEC A +.387135 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A +.387139 a9 16 00 lda #$0016 LDA #INSTR_REC_LEN +.38713c 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B +.387140 af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT ; not sure why this one requires a long address - bank is still 0 +.387144 18 clc CLC +.387145 69 3b 10 adc #$103b ADC #<>INSTRUMENT_ACCORDN +.387148 85 f0 sta $f0 STA RAD_ADDR +.38714a a9 00 00 lda #$0000 LDA #0 +.38714d e2 20 sep #$20 SEP #$20 ; set A short +.38714f c8 iny INY +.387150 64 4e stz $4e STZ RAD_TEMP +.387152 87 f0 sta [$f0] STA [RAD_ADDR] ; Not a drum instrument +.387154 Transfer_Instrument_Info +.387154 a6 4e ldx $4e LDX RAD_TEMP +.387156 bf 06 71 38 lda $387106,x LDA ADLIB_OFFSETS,X ; RAD uses a different order for registers +.38715a aa tax TAX +.38715b b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Read Register +.38715d 5a phy PHY +.38715e 9b txy TXY +.38715f 97 f0 sta [$f0],y STA [RAD_ADDR],Y ; Write to the instrument table +.387161 7a ply PLY +.387162 c8 iny INY +.387163 e6 4e inc $4e INC RAD_TEMP +.387165 a5 4e lda $4e LDA RAD_TEMP +.387167 c9 0b cmp #$0b CMP #11 +.387169 90 e9 bcc $387154 BCC Transfer_Instrument_Info +.38716b 5a phy PHY ; store the position in the file on the stack +.38716c a0 0c 00 ldy #$000c LDY #12 ; beginning of text +.38716f a9 20 lda #$20 LDA #$20 +.387171 BLANK_INSTR_DESCR +.387171 97 f0 sta [$f0],y STA [RAD_ADDR],Y +.387173 c8 iny INY +.387174 c0 16 00 cpy #$0016 CPY #22 +.387177 d0 f8 bne $387171 BNE BLANK_INSTR_DESCR +.387179 7a ply PLY +.38717a 80 b0 bra $38712c BRA ProcessNextInstruments_10 +.38717c DoneProcessingInstrument_10 +.38717c c8 iny INY +.38717d 60 rts RTS +.38717e PARSER_RAD_FILE_INSTRUMENT_21 +.38717e PR_LOOP +.38717e b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387180 c8 iny INY +.387181 c9 00 cmp #$00 CMP #0 +.387183 d0 f9 bne $38717e BNE PR_LOOP +.387185 a9 38 lda #$38 LDA #<`INSTRUMENT_ACCORDN +.387187 85 f2 sta $f2 STA RAD_ADDR + 2 +.387189 ProcessNextInstruments_21 +.387189 e2 20 sep #$20 SEP #$20 ; set A short +.38718b b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Read Instrument Number +.38718d f0 00 beq $38718f BEQ DoneProcessingInstrument_21 +.38718f DoneProcessingInstrument_21 +.38718f c8 iny INY +.387190 60 rts RTS +.387191 PROCESS_ORDER_LIST_10 +.387191 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; Read Song Length +.387193 8f 01 00 17 sta $170001 STA @lTuneInfo.songLength +.387197 aa tax TAX +.387198 c8 iny INY +.387199 c2 20 rep #$20 REP #$20 ; set A long +.38719b a9 24 fc lda #$fc24 LDA #<>ORDERS +.38719e 85 f0 sta $f0 STA RAD_ADDR +.3871a0 a9 39 00 lda #$0039 LDA #<`ORDERS +.3871a3 85 f2 sta $f2 STA RAD_ADDR + 2 +.3871a5 e2 20 sep #$20 SEP #$20 ; set A short +.3871a7 READ_ORDER +.3871a7 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.3871a9 c8 iny INY +.3871aa 87 f0 sta [$f0] STA [RAD_ADDR] +.3871ac e6 f0 inc $f0 INC RAD_ADDR +.3871ae b0 02 bcs $3871b2 BCS ORDER_CONTINUE +.3871b0 e6 f1 inc $f1 INC RAD_ADDR + 1 +.3871b2 ORDER_CONTINUE +.3871b2 ca dex DEX +.3871b3 d0 f2 bne $3871a7 BNE READ_ORDER +.3871b5 60 rts RTS +.3871b6 READ_PATTERNS_10 +.3871b6 64 f3 stz $f3 STZ RAD_PATTRN +.3871b8 a9 39 lda #$39 LDA #<`PATTERNS +.3871ba 85 f6 sta $f6 STA RAD_PTN_DEST + 2 +.3871bc NEXT_PATTERN +.3871bc c2 20 rep #$20 REP #$20 ; set A long +.3871be b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.3871c0 f0 1f beq $3871e1 BEQ SKIP_PATTERN +.3871c2 5a phy PHY +.3871c3 a8 tay TAY +.3871c4 a5 f3 lda $f3 LDA RAD_PATTRN +.3871c6 29 ff 00 and #$00ff AND #$00FF +.3871c9 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A +.3871cd a9 01 07 lda #$0701 LDA #PATTERN_BYTES +.3871d0 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B +.3871d4 af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT +.3871d8 1a inc a INC A ; skip the pattern byte +.3871d9 85 f4 sta $f4 STA RAD_PTN_DEST +.3871db e2 20 sep #$20 SEP #$20 ; set A short +.3871dd 20 ee 71 jsr $3871ee JSR READ_PATTERN_10 +.3871e0 7a ply PLY +.3871e1 SKIP_PATTERN +.3871e1 c8 iny INY +.3871e2 c8 iny INY +.3871e3 e2 20 sep #$20 SEP #$20 ; set A short +.3871e5 e6 f3 inc $f3 INC RAD_PATTRN +.3871e7 a5 f3 lda $f3 LDA RAD_PATTRN +.3871e9 c9 20 cmp #$20 CMP #32 +.3871eb d0 cf bne $3871bc BNE NEXT_PATTERN +.3871ed 60 rts RTS +.3871ee READ_PATTERN_10 +.3871ee b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; read the line number - bit 7 indicates the last line +.3871f0 8f 42 00 00 sta $000042 STA @lRAD_LINE +.3871f4 c8 iny INY +.3871f5 c2 20 rep #$20 REP #$20 ; set A long +.3871f7 29 7f 00 and #$007f AND #$7F +.3871fa 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A +.3871fe a9 1c 00 lda #$001c LDA #LINE_BYTES +.387201 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B +.387205 af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT +.387209 1a inc a INC A ; skip the line number +.38720a 8f fa 00 00 sta $0000fa STA @lRAD_LINE_PTR +.38720e e2 20 sep #$20 SEP #$20 ; set A short +.387210 READ_NOTE +.387210 a6 fa ldx $fa LDX RAD_LINE_PTR ; X contains the offset in the destination memory +.387212 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; channel - bit 7 indicates the last note +.387214 c8 iny INY +.387215 8f f9 00 00 sta $0000f9 STA @lRAD_LAST_NOTE +.387219 29 0f and #$0f AND #$F +.38721b 8f f7 00 00 sta $0000f7 STA @lRAD_CHANNEL +.38721f c2 20 rep #$20 REP #$20 ; set A long +.387221 8a txa TXA +.387222 18 clc CLC +.387223 65 f7 adc $f7 ADC RAD_CHANNEL ; multiply channel by 3 +.387225 65 f7 adc $f7 ADC RAD_CHANNEL +.387227 65 f7 adc $f7 ADC RAD_CHANNEL +.387229 aa tax TAX +.38722a e2 20 sep #$20 SEP #$20 ; set A short +.38722c b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; note / octave +.38722e 5a phy PHY +.38722f 9b txy TXY +.387230 97 f4 sta [$f4],y STA [RAD_PTN_DEST],Y +.387232 7a ply PLY +.387233 c8 iny INY +.387234 e8 inx INX +.387235 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; instrument/effect +.387237 5a phy PHY +.387238 9b txy TXY +.387239 97 f4 sta [$f4],y STA [RAD_PTN_DEST],Y +.38723b 7a ply PLY +.38723c c8 iny INY +.38723d e8 inx INX +.38723e 29 0f and #$0f AND #$F +.387240 f0 09 beq $38724b BEQ CHECK_LASTNOTE +.387242 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y ; effect parameter +.387244 5a phy PHY +.387245 9b txy TXY +.387246 97 f4 sta [$f4],y STA [RAD_PTN_DEST],Y +.387248 7a ply PLY +.387249 c8 iny INY +.38724a e8 inx INX +.38724b CHECK_LASTNOTE +.38724b af f9 00 00 lda $0000f9 LDA @lRAD_LAST_NOTE +.38724f 10 bf bpl $387210 BPL READ_NOTE +.387251 af 42 00 00 lda $000042 LDA @lRAD_LINE +.387255 10 97 bpl $3871ee BPL READ_PATTERN_10 +.387257 60 rts RTS +.387258 DRAW_BLANKS +.387258 5a phy PHY +.387259 da phx PHX +.38725a a2 12 00 ldx #$0012 LDX #18 +.38725d a0 00 00 ldy #$0000 LDY #0 +.387260 a9 2d lda #$2d LDA #'-' +.387262 BL_NEXT +.387262 97 0c sta [$0c],y STA [SCREENBEGIN], Y +.387264 c8 iny INY +.387265 ca dex DEX +.387266 d0 fa bne $387262 BNE BL_NEXT +.387268 fa plx PLX +.387269 7a ply PLY +.38726a 60 rts RTS +.38726b DISPLAY_RAD_PTN_DEST +.38726b 5a phy PHY +.38726c a5 f6 lda $f6 LDA RAD_PTN_DEST+2 +.38726e 20 b1 5d jsr $385db1 JSR WRITE_HEX +.387271 c8 iny INY +.387272 c8 iny INY +.387273 a5 f5 lda $f5 LDA RAD_PTN_DEST+1 +.387275 20 b1 5d jsr $385db1 JSR WRITE_HEX +.387278 c8 iny INY +.387279 c8 iny INY +.38727a a5 f4 lda $f4 LDA RAD_PTN_DEST +.38727c 20 b1 5d jsr $385db1 JSR WRITE_HEX +.38727f 7a ply PLY +.387280 60 rts RTS +.387281 WRITE_A_LNG +.387281 48 pha PHA +.387282 48 pha PHA +.387283 e2 20 sep #$20 SEP #$20 ; set A short +.387285 68 pla PLA +.387286 20 b1 5d jsr $385db1 JSR WRITE_HEX +.387289 88 dey DEY +.38728a 88 dey DEY +.38728b 68 pla PLA +.38728c 20 b1 5d jsr $385db1 JSR WRITE_HEX +.38728f c2 20 rep #$20 REP #$20 ; set A long +.387291 68 pla PLA +.387292 60 rts RTS +.387293 RAD_ALL_NOTES_OFF +.387293 5a phy PHY +.387294 c2 20 rep #$20 REP #$20 ; set A long +.387296 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE +.387299 85 2c sta $2c STA OPL2_IND_ADDY_LL +.38729b a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.38729e 85 2e sta $2e STA OPL2_IND_ADDY_LL + 2 +.3872a0 e2 20 sep #$20 SEP #$20 ; set A short +.3872a2 a0 a0 00 ldy #$00a0 LDY #$A0 +.3872a5 a9 00 lda #$00 LDA #0 +.3872a7 NEXT_NOTE_OFF +.3872a7 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y +.3872a9 c8 iny INY +.3872aa c0 b9 00 cpy #$00b9 CPY #$B9 +.3872ad d0 f8 bne $3872a7 BNE NEXT_NOTE_OFF +.3872af 7a ply PLY +.3872b0 60 rts RTS +.3872b1 RAD_PLAYNOTES +.3872b1 5a phy PHY +.3872b2 20 58 72 jsr $387258 JSR DRAW_BLANKS +.3872b5 c2 20 rep #$20 REP #$20 ; set A long +.3872b7 af 18 0f 38 lda $380f18 LDA PATTERN_NUM +.3872bb 29 ff 00 and #$00ff AND #$FF +.3872be 3a dec a DEC A ; start at 0 +.3872bf 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A +.3872c3 a9 01 07 lda #$0701 LDA #PATTERN_BYTES +.3872c6 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B +.3872ca af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT +.3872ce 1a inc a INC A ; skip the pattern number byte +.3872cf 85 f4 sta $f4 STA RAD_PTN_DEST +.3872d1 e2 20 sep #$20 SEP #$20 ; set A short +.3872d3 a9 39 lda #$39 LDA #<`PATTERNS +.3872d5 85 f6 sta $f6 STA RAD_PTN_DEST + 2 +.3872d7 a0 00 01 ldy #$0100 LDY #128 * 2 +.3872da 20 6b 72 jsr $38726b JSR DISPLAY_RAD_PTN_DEST ; display the address of the pattern +.3872dd c2 20 rep #$20 REP #$20 ; set A long +.3872df a5 6c lda $6c LDA LINE_NUM_HEX +.3872e1 29 7f 00 and #$007f AND #$7F +.3872e4 8f 00 01 00 sta $000100 STA @lUNSIGNED_MULT_A +.3872e8 a9 1c 00 lda #$001c LDA #LINE_BYTES +.3872eb 8f 02 01 00 sta $000102 STA @lUNSIGNED_MULT_B +.3872ef af 04 01 00 lda $000104 LDA @lUNSIGNED_MULT_RESULT +.3872f3 1a inc a INC A ; skip the line number byte +.3872f4 a0 82 00 ldy #$0082 LDY #128 + 2 +.3872f7 20 81 72 jsr $387281 JSR WRITE_A_LNG ; display the line offset from the pattern address +.3872fa a8 tay TAY ; Y contains the line offset +.3872fb a9 00 00 lda #$0000 LDA #0 +.3872fe e2 20 sep #$20 SEP #$20 ; set A short +.387300 64 28 stz $28 STZ OPL2_REG_REGION +.387302 PN_NEXT_NOTE +.387302 8f 27 00 00 sta $000027 STA @lOPL2_CHANNEL +.387306 aa tax TAX +.387307 bf b6 6e 38 lda $386eb6,x LDA CHANNELS,X +.38730b d0 05 bne $387312 BNE PN_PLAY_NOTE +.38730d c8 iny INY ; skip the channel data +.38730e c8 iny INY +.38730f c8 iny INY +.387310 80 58 bra $38736a BRA PN_CONTINUE +.387312 PN_PLAY_NOTE +.387312 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; octave/note +.387314 29 7f and #$7f AND #$7F +.387316 20 d1 74 jsr $3874d1 JSR RAD_WRITE_OCT_NOTE +.387319 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; bit 7 is bit 4 of the instrument number +.38731b 29 80 and #$80 AND #$80 +.38731d 4a lsr a LSR A +.38731e 4a lsr a LSR A +.38731f 4a lsr a LSR A +.387320 85 4e sta $4e STA RAD_TEMP +.387322 c8 iny INY +.387323 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; instrument/effect +.387325 29 f0 and #$f0 AND #$F0 +.387327 4a lsr a LSR A +.387328 4a lsr a LSR A +.387329 4a lsr a LSR A +.38732a 4a lsr a LSR A +.38732b 65 4e adc $4e ADC RAD_TEMP +.38732d f0 14 beq $387343 BEQ SKIP_INSTRUMENT +.38732f 3a dec a DEC A ; instruments are starting at 0 +.387330 8f 6a 00 00 sta $00006a STA @lINSTR_NUMBER +.387334 5a phy PHY +.387335 a6 27 ldx $27 LDX OPL2_CHANNEL +.387337 a9 00 lda #$00 LDA #0 +.387339 eb xba XBA +.38733a bf 18 10 38 lda $381018,x LDA @lregisterOffsets_operator0,X +.38733e aa tax TAX +.38733f 20 52 6b jsr $386b52 JSR LOAD_INSTRUMENT +.387342 7a ply PLY +.387343 SKIP_INSTRUMENT +.387343 af 30 00 00 lda $000030 LDA @lOPL2_NOTE +.387347 f0 11 beq $38735a BEQ SKIP_NOTE ; if the note is 0, don't play anything. +.387349 c9 0f cmp #$0f CMP #$0F ; NOTE OFF +.38734b f0 2b beq $387378 BEQ RAD_NOTE_OFF +.38734d c2 20 rep #$20 REP #$20 ; set A long +.38734f 5a phy PHY +.387350 20 f5 37 jsr $3837f5 JSR OPL2_GET_REG_OFFSET +.387353 22 01 32 38 jsl $383201 JSL OPL2_PLAYNOTE +.387357 7a ply PLY +.387358 e2 20 sep #$20 SEP #$20 ; set A short +.38735a SKIP_NOTE +.38735a a9 00 lda #$00 LDA #0 +.38735c eb xba XBA +.38735d b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; instrument/effect +.38735f c8 iny INY +.387360 29 0f and #$0f AND #$F +.387362 f0 05 beq $387369 BEQ SKIP_EFFECT +.387364 0a asl a ASL A ; double bytes +.387365 aa tax TAX +.387366 fc 89 73 jsr ($387389,x) JSR (RAD_EFFECT_TABLE,X) +.387369 SKIP_EFFECT +.387369 c8 iny INY +.38736a PN_CONTINUE +.38736a a9 00 lda #$00 LDA #0 ; clear B +.38736c eb xba XBA +.38736d af 27 00 00 lda $000027 LDA @lOPL2_CHANNEL +.387371 1a inc a INC A +.387372 c9 09 cmp #$09 CMP #9 +.387374 d0 8c bne $387302 BNE PN_NEXT_NOTE +.387376 7a ply PLY +.387377 60 rts RTS +.387378 RAD_NOTE_OFF +.387378 af 27 00 00 lda $000027 LDA @lOPL2_CHANNEL +.38737c 18 clc CLC +.38737d 69 b0 adc #$b0 ADC #$B0 +.38737f 85 2c sta $2c STA OPL2_IND_ADDY_LL +.387381 a9 00 lda #$00 LDA #0 +.387383 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.387385 c8 iny INY +.387386 c8 iny INY +.387387 80 e1 bra $38736a BRA PN_CONTINUE +.387389 RAD_EFFECT_TABLE +>387389 a9 73 .word <>RAD_EFFECT_NONE ; 00 +>38738b 1c 74 .word <>RAD_EFFECT_NOTE_SLIDE_UP ; 01 +>38738d 1c 74 .word <>RAD_EFFECT_NOTE_SLIDE_DOWN ; 02 +>38738f a9 73 .word <>RAD_EFFECT_NOTE_SLIDE_TO ; 03 +>387391 a9 73 .word <>RAD_NOOP +>387393 a9 73 .word <>RAD_EFFECT_NOTE_SLIDE_VOLUME ; 05 +>387395 a9 73 .word <>RAD_NOOP +>387397 a9 73 .word <>RAD_NOOP +>387399 a9 73 .word <>RAD_NOOP +>38739b a9 73 .word <>RAD_NOOP +>38739d aa 73 .word <>RAD_EFFECT_VOLUME_SLIDE ; 0A +>38739f a9 73 .word <>RAD_NOOP +>3873a1 92 74 .word <>RAD_EFFECT_SET_VOLUME ; 0C +>3873a3 01 74 .word <>RAD_EFFECT_PATTERN_BREAK ; 0D +>3873a5 a9 73 .word <>RAD_NOOP +>3873a7 12 74 .word <>RAD_EFFECT_SET_SPEED ; 0F +.3873a9 RAD_NOOP +.3873a9 RAD_EFFECT_NONE +.3873a9 RAD_EFFECT_NOTE_SLIDE_TO +.3873a9 RAD_EFFECT_NOTE_SLIDE_VOLUME +.3873a9 60 rts RTS +.3873aa RAD_EFFECT_VOLUME_SLIDE +.3873aa 5a phy PHY +.3873ab b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; store value of the effect in RAD_CHANNE_EFFCT +.3873ad 85 4c sta $4c STA RAD_CHANNE_EFFCT +.3873af c2 20 rep #$20 REP #$20 ; set A long +.3873b1 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE +.3873b4 85 2c sta $2c STA OPL2_IND_ADDY_LL +.3873b6 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.3873b9 85 2e sta $2e STA OPL2_IND_ADDY_LL + 2 +.3873bb e2 30 sep #$30 SEP #$30 ; set A&X short +.3873bd a5 27 lda $27 LDA OPL2_CHANNEL +.3873bf aa tax TAX +.3873c0 bf 18 10 38 lda $381018,x LDA @lregisterOffsets_operator0,X +.3873c4 18 clc CLC +.3873c5 69 40 adc #$40 ADC #$40 +.3873c7 a8 tay TAY +.3873c8 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y ; volume +.3873ca 48 pha PHA +.3873cb 29 3f and #$3f AND #$3F +.3873cd 18 clc CLC +.3873ce 65 4c adc $4c ADC RAD_CHANNE_EFFCT ; check for values greater than 50 +.3873d0 c9 40 cmp #$40 CMP #$40 ; if there's an overflow, use #$3F (low volume) +.3873d2 90 02 bcc $3873d6 BCC NO_OVERFLOW_0 +.3873d4 a9 3f lda #$3f LDA #$3F +.3873d6 NO_OVERFLOW_0 +.3873d6 29 3f and #$3f AND #$3F +.3873d8 85 4e sta $4e STA RAD_TEMP +.3873da 68 pla PLA +.3873db 29 c0 and #$c0 AND #$C0 +.3873dd 05 4e ora $4e ORA RAD_TEMP +.3873df 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y +.3873e1 c8 iny INY +.3873e2 c8 iny INY +.3873e3 c8 iny INY +.3873e4 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y ; volume +.3873e6 48 pha PHA +.3873e7 29 3f and #$3f AND #$3F +.3873e9 18 clc CLC +.3873ea 65 4c adc $4c ADC RAD_CHANNE_EFFCT +.3873ec c9 40 cmp #$40 CMP #$40 ; if there's an overflow, use #$3F (low volume) +.3873ee 90 02 bcc $3873f2 BCC NO_OVERFLOW_1 +.3873f0 a9 3f lda #$3f LDA #$3F +.3873f2 NO_OVERFLOW_1 +.3873f2 29 3f and #$3f AND #$3F +.3873f4 85 4e sta $4e STA RAD_TEMP +.3873f6 68 pla PLA +.3873f7 29 c0 and #$c0 AND #$C0 +.3873f9 05 4e ora $4e ORA RAD_TEMP +.3873fb 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y +.3873fd c2 10 rep #$10 REP #$10 ; set X long +.3873ff 7a ply PLY +.387400 60 rts RTS +.387401 RAD_EFFECT_PATTERN_BREAK +.387401 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; effect parameter +.387403 3a dec a DEC A ; DECREMENT by 1, because the next timer interrupt will increment at the beginning +.387404 85 6c sta $6c STA LINE_NUM_HEX +.387406 a9 00 lda #$00 LDA #0 ; convert the effect to a decimal line number +.387408 8f 19 0f 38 sta $380f19 STA @lLINE_NUM_DEC +.38740c 20 9e 6a jsr $386a9e JSR INCREMENT_ORDER +.38740f 7a ply PLY ; don't return to the calling method, return to the parent +.387410 7a ply PLY +.387411 60 rts RTS +.387412 RAD_EFFECT_SET_SPEED +.387412 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; effect parameter +.387414 8f 02 00 17 sta $170002 STA @lTuneInfo.InitialSpeed +.387418 20 af 60 jsr $3860af JSR DISPLAY_SPEED +.38741b 60 rts RTS +.38741c RAD_EFFECT_NOTE_SLIDE_UP +.38741c RAD_EFFECT_NOTE_SLIDE_DOWN +.38741c 5a phy PHY +.38741d 4a lsr a LSR +.38741e 85 50 sta $50 STA RAD_EFFECT ; 1 slide down, 2 slide up +.387420 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; store value of the effect in RAD_CHANNE_EFFCT +.387422 85 4c sta $4c STA RAD_CHANNE_EFFCT +.387424 c2 20 rep #$20 REP #$20 ; set A long +.387426 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE +.387429 85 2c sta $2c STA OPL2_IND_ADDY_LL +.38742b a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.38742e 85 2e sta $2e STA OPL2_IND_ADDY_LL + 2 +.387430 e2 30 sep #$30 SEP #$30 ; set A&X short +.387432 a5 27 lda $27 LDA OPL2_CHANNEL +.387434 18 clc CLC +.387435 69 a0 adc #$a0 ADC #$A0 +.387437 a8 tay TAY +.387438 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y ; read low fnumber byte +.38743a c2 10 rep #$10 REP #$10 ; set X long +.38743c bb tyx TYX +.38743d a0 8a 00 ldy #$008a LDY #128 + 10 +.387440 20 b1 5d jsr $385db1 JSR WRITE_HEX +.387443 9b txy TXY +.387444 e2 10 sep #$10 SEP #$10 ; set X short +.387446 48 pha PHA ; store A on the stack +.387447 98 tya TYA +.387448 18 clc CLC +.387449 69 10 adc #$10 ADC #$10 +.38744b a8 tay TAY +.38744c b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y ; read bits 0,1 of high fnumber +.38744e 85 4e sta $4e STA RAD_TEMP ; store the entire value of $B0 +.387450 c2 10 rep #$10 REP #$10 ; set X long +.387452 bb tyx TYX +.387453 a0 08 01 ldy #$0108 LDY #256 + 8 +.387456 20 b1 5d jsr $385db1 JSR WRITE_HEX +.387459 29 03 and #$03 AND #3 +.38745b a0 88 00 ldy #$0088 LDY #128 + 8 +.38745e 20 b1 5d jsr $385db1 JSR WRITE_HEX +.387461 9b txy TXY +.387462 eb xba XBA +.387463 68 pla PLA ; A is now the FNUMBER +.387464 aa tax TAX ; X is now the FNUMBER +.387465 a5 50 lda $50 LDA RAD_EFFECT +.387467 89 02 bit #$02 BIT #2 +.387469 f0 0a beq $387475 BEQ SLIDE_UP +.38746b c2 20 rep #$20 REP #$20 ; set A long +.38746d 8a txa TXA +.38746e 38 sec SEC +.38746f e5 4c sbc $4c SBC RAD_CHANNE_EFFCT ; substract the effect parameter +.387471 e2 20 sep #$20 SEP #$20 ; set A short +.387473 80 08 bra $38747d BRA FINISH_SLIDE +.387475 SLIDE_UP +.387475 c2 20 rep #$20 REP #$20 ; set A long +.387477 8a txa TXA +.387478 18 clc CLC +.387479 65 4c adc $4c ADC RAD_CHANNE_EFFCT ; substract the effect parameter +.38747b e2 20 sep #$20 SEP #$20 ; set A short +.38747d FINISH_SLIDE +.38747d e2 10 sep #$10 SEP #$10 ; set X short +.38747f eb xba XBA +.387480 29 03 and #$03 AND #3 +.387482 05 4e ora $4e ORA RAD_TEMP +.387484 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y +.387486 98 tya TYA +.387487 38 sec SEC +.387488 e9 10 sbc #$10 SBC #$10 +.38748a a8 tay TAY +.38748b eb xba XBA +.38748c 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y +.38748e c2 10 rep #$10 REP #$10 ; set X long +.387490 7a ply PLY +.387491 60 rts RTS +.387492 RAD_EFFECT_SET_VOLUME +.387492 5a phy PHY +.387493 c2 20 rep #$20 REP #$20 ; set A long +.387495 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE +.387498 85 2c sta $2c STA OPL2_IND_ADDY_LL +.38749a a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.38749d 85 2e sta $2e STA OPL2_IND_ADDY_LL + 2 +.38749f e2 20 sep #$20 SEP #$20 ; set A short +.3874a1 b7 f4 lda [$f4],y LDA [RAD_PTN_DEST],Y ; effect parameter +.3874a3 29 7f and #$7f AND #$7F +.3874a5 f0 01 beq $3874a8 BEQ HANDLE_ZERO +.3874a7 3a dec a DEC A +.3874a8 HANDLE_ZERO +.3874a8 49 3f eor #$3f EOR #$3F ; complement +.3874aa 85 4e sta $4e STA RAD_TEMP +.3874ac e2 10 sep #$10 SEP #$10 ; set X short +.3874ae a6 27 ldx $27 LDX OPL2_CHANNEL +.3874b0 bf 18 10 38 lda $381018,x LDA @lregisterOffsets_operator0,X +.3874b4 18 clc CLC +.3874b5 69 40 adc #$40 ADC #$40 +.3874b7 a8 tay TAY +.3874b8 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y +.3874ba 29 c0 and #$c0 AND #$C0 ; +.3874bc 18 clc CLC +.3874bd 65 4e adc $4e ADC RAD_TEMP +.3874bf 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y +.3874c1 c8 iny INY +.3874c2 c8 iny INY +.3874c3 c8 iny INY +.3874c4 b7 2c lda [$2c],y LDA [OPL2_IND_ADDY_LL],Y +.3874c6 29 c0 and #$c0 AND #$C0 ; +.3874c8 18 clc CLC +.3874c9 65 4e adc $4e ADC RAD_TEMP +.3874cb 97 2c sta [$2c],y STA [OPL2_IND_ADDY_LL],Y +.3874cd c2 10 rep #$10 REP #$10 ; set X long +.3874cf 7a ply PLY +.3874d0 60 rts RTS +.3874d1 RAD_WRITE_OCT_NOTE +.3874d1 5a phy PHY +.3874d2 48 pha PHA +.3874d3 48 pha PHA +.3874d4 af 27 00 00 lda $000027 LDA @lOPL2_CHANNEL +.3874d8 0a asl a ASL A ; multiply the channel by 2 for the screen position +.3874d9 a8 tay TAY +.3874da 68 pla PLA +.3874db f0 03 beq $3874e0 BEQ DONT_DISPLAY_00 +.3874dd 20 b1 5d jsr $385db1 JSR WRITE_HEX +.3874e0 DONT_DISPLAY_00 +.3874e0 29 70 and #$70 AND #$70 ; octave +.3874e2 4a lsr a LSR +.3874e3 4a lsr a LSR +.3874e4 4a lsr a LSR +.3874e5 4a lsr a LSR +.3874e6 8f 31 00 00 sta $000031 STA @lOPL2_OCTAVE +.3874ea 68 pla PLA +.3874eb 29 0f and #$0f AND #$0F ; note +.3874ed 8f 30 00 00 sta $000030 STA @lOPL2_NOTE +.3874f1 7a ply PLY +.3874f2 60 rts RTS +.3874f3 RAD_SETINSTRUMENT +.3874f3 5a phy PHY +.3874f4 e2 20 sep #$20 SEP #$20 ; set A short +.3874f6 a9 01 lda #$01 LDA #$01 +.3874f8 85 26 sta $26 STA OPL2_OPERATOR +.3874fa c2 20 rep #$20 REP #$20 ; set A long +.3874fc a9 38 00 lda #$0038 LDA #<`INSTRUMENT_ACCORDN +.3874ff 85 0a sta $0a STA OPL2_ADDY_PTR_HI +.387501 a5 32 lda $32 LDA OPL2_PARAMETER0 +.387503 29 ff 00 and #$00ff AND #$00FF +.387506 3a dec a DEC A +.387507 0a asl a ASL A +.387508 0a asl a ASL A +.387509 0a asl a ASL A +.38750a 0a asl a ASL A +.38750b 18 clc CLC +.38750c 69 3b 10 adc #$103b ADC #<>INSTRUMENT_ACCORDN +.38750f 85 08 sta $08 STA OPL2_ADDY_PTR_LO +.387511 c2 20 rep #$20 REP #$20 ; set A long +.387513 a9 20 00 lda #$0020 LDA #$0020 +.387516 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.38751a e2 20 sep #$20 SEP #$20 ; set A short +.38751c a0 00 00 ldy #$0000 LDY #$0000 +.38751f b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387521 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.387523 c2 20 rep #$20 REP #$20 ; set A long +.387525 a9 40 00 lda #$0040 LDA #$0040 +.387528 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.38752c e2 20 sep #$20 SEP #$20 ; set A short +.38752e a0 02 00 ldy #$0002 LDY #$0002 +.387531 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387533 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.387535 c2 20 rep #$20 REP #$20 ; set A long +.387537 a9 60 00 lda #$0060 LDA #$0060 +.38753a 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.38753e e2 20 sep #$20 SEP #$20 ; set A short +.387540 a0 04 00 ldy #$0004 LDY #$0004 +.387543 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387545 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.387547 c2 20 rep #$20 REP #$20 ; set A long +.387549 a9 80 00 lda #$0080 LDA #$0080 +.38754c 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.387550 e2 20 sep #$20 SEP #$20 ; set A short +.387552 a0 06 00 ldy #$0006 LDY #$0006 +.387555 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387557 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.387559 c2 20 rep #$20 REP #$20 ; set A long +.38755b a9 e0 00 lda #$00e0 LDA #$00E0 +.38755e 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.387562 e2 20 sep #$20 SEP #$20 ; set A short +.387564 a0 09 00 ldy #$0009 LDY #$0009 +.387567 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387569 29 0f and #$0f AND #$0F +.38756b 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.38756d a9 00 lda #$00 LDA #$00 +.38756f 85 26 sta $26 STA OPL2_OPERATOR +.387571 c2 20 rep #$20 REP #$20 ; set A long +.387573 a9 20 00 lda #$0020 LDA #$0020 +.387576 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.38757a e2 20 sep #$20 SEP #$20 ; set A short +.38757c a0 01 00 ldy #$0001 LDY #$0001 +.38757f b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387581 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.387583 c2 20 rep #$20 REP #$20 ; set A long +.387585 a9 40 00 lda #$0040 LDA #$0040 +.387588 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.38758c e2 20 sep #$20 SEP #$20 ; set A short +.38758e a0 03 00 ldy #$0003 LDY #$0003 +.387591 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.387593 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.387595 c2 20 rep #$20 REP #$20 ; set A long +.387597 a9 60 00 lda #$0060 LDA #$0060 +.38759a 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.38759e e2 20 sep #$20 SEP #$20 ; set A short +.3875a0 a0 05 00 ldy #$0005 LDY #$0005 +.3875a3 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.3875a5 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.3875a7 c2 20 rep #$20 REP #$20 ; set A long +.3875a9 a9 80 00 lda #$0080 LDA #$0080 +.3875ac 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.3875b0 e2 20 sep #$20 SEP #$20 ; set A short +.3875b2 a0 71 00 ldy #$0071 LDY #$00071 +.3875b5 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.3875b7 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.3875b9 c2 20 rep #$20 REP #$20 ; set A long +.3875bb a9 e0 00 lda #$00e0 LDA #$00E0 +.3875be 22 f5 37 38 jsl $3837f5 JSL OPL2_GET_REG_OFFSET +.3875c2 e2 20 sep #$20 SEP #$20 ; set A short +.3875c4 a0 09 00 ldy #$0009 LDY #$0009 +.3875c7 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.3875c9 29 f0 and #$f0 AND #$F0 +.3875cb 4a lsr a LSR A +.3875cc 4a lsr a LSR A +.3875cd 4a lsr a LSR A +.3875ce 4a lsr a LSR A +.3875cf 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.3875d1 a5 27 lda $27 LDA OPL2_CHANNEL +.3875d3 18 clc CLC +.3875d4 29 0f and #$0f AND #$0F ; This is just precaution, it should be between 0 to 8 +.3875d6 69 c0 adc #$c0 ADC #$C0 +.3875d8 85 2a sta $2a STA OPL2_REG_OFFSET +.3875da a9 00 lda #$00 LDA #$00 +.3875dc 85 2b sta $2b STA OPL2_REG_OFFSET+1; +.3875de c2 30 rep #$30 REP #$30 ; set A&X long +.3875e0 18 clc CLC +.3875e1 a9 00 e7 lda #$e700 LDA #<>OPL3_R_BASE +.3875e4 65 2a adc $2a ADC OPL2_REG_OFFSET +.3875e6 85 2c sta $2c STA OPL2_IND_ADDY_LL +.3875e8 a9 af 00 lda #$00af LDA #`OPL3_R_BASE +.3875eb 85 2e sta $2e STA OPL2_IND_ADDY_HL +.3875ed e2 20 sep #$20 SEP #$20 ; set A short +.3875ef a0 08 00 ldy #$0008 LDY #$0008 +.3875f2 b7 08 lda [$08],y LDA [OPL2_ADDY_PTR_LO],Y +.3875f4 87 2c sta [$2c] STA [OPL2_IND_ADDY_LL] +.3875f6 7a ply PLY +.3875f7 60 rts RTS .170000 TuneInfo >170000 00 version .byte $00 ; bit 1 is RAD 1, bit 2 is RAD 2 >170001 00 songLength .byte $00 @@ -30531,882 +31457,4 @@ ;****** Return to file: tracker.asm -;****** Processing file: SDOS.asm - - -;****** Processing file: SDCard_Controller_def.asm - -=$afea00 SDC_VERSION_REG = $AFEA00 ; Ought to read 12 -=$afea01 SDC_CONTROL_REG = $AFEA01 ; Bit0 1 = Reset core logic, and registers. Self clearing -=$afea02 SDC_TRANS_TYPE_REG = $AFEA02 ; Bit[1:0] -=$00 SDC_TRANS_DIRECT = $00 ; 00 = Direct Access -=$01 SDC_TRANS_INIT_SD = $01 ; 01 = Init SD -=$02 SDC_TRANS_READ_BLK = $02 ; 10 = RW_READ_BLOCK (512 Bytes) -=$03 SDC_TRANS_WRITE_BLK = $03 ; 11 = RW_WRITE_SD_BLOCK -=$afea03 SDC_TRANS_CONTROL_REG = $AFEA03 -=$01 SDC_TRANS_START = $01 -=$afea04 SDC_TRANS_STATUS_REG = $AFEA04 -=$01 SDC_TRANS_BUSY = $01 ; 1= Transaction Busy -=$afea05 SDC_TRANS_ERROR_REG = $AFEA05 -=$00 SDC_TRANS_INIT_NO_ERR = $00 ; Init Error Report [1:0] -=$01 SDC_TRANS_INIT_CMD0_ERR = $01 -=$02 SDC_TRANS_INIT_CMD1_ERR = $02 -=$00 SDC_TRANS_RD_NO_ERR = $00 ; Read Error Report [3:2] -=$04 SDC_TRANS_RD_CMD_ERR = $04 -=$08 SDC_TRANS_RD_TOKEN_ERR = $08 -=$00 SDC_TRANS_WR_NO_ERR = $00 ; Write Report Error [5:4] -=$10 SDC_TRANS_WR_CMD_ERR = $10 ; -=$20 SDC_TRANS_WR_DATA_ERR = $20 -=$30 SDC_TRANS_WR_BUSY_ERR = $30 -=$afea06 SDC_DIRECT_ACCESS_REG = $AFEA06 ; SPI Direct Read and Write - Set DATA before initiating direct Access Transaction -=$afea07 SDC_SD_ADDR_7_0_REG = $AFEA07 ; Set the ADDR before a block read or block write -=$afea08 SDC_SD_ADDR_15_8_REG = $AFEA08 ; Addr0 [8:0] Always should be 0, since each block is 512Bytes -=$afea09 SDC_SD_ADDR_23_16_REG = $AFEA09 -=$afea0a SDC_SD_ADDR_31_24_REG = $AFEA0A -=$afea0b SDC_SPI_CLK_DEL_REG = $AFEA0B -=$afea10 SDC_RX_FIFO_DATA_REG = $AFEA10 ; Data from the Block Read -=$afea12 SDC_RX_FIFO_DATA_CNT_HI = $AFEA12 ; How many Bytes in the FIFO HI -=$afea13 SDC_RX_FIFO_DATA_CNT_LO = $AFEA13 ; How many Bytes in the FIFO LO -=$afea14 SDC_RX_FIFO_CTRL_REG = $AFEA14 ; Bit0 Force Empty - Set to 1 to clear FIFO, self clearing (the bit) -=$afea20 SDC_TX_FIFO_DATA_REG = $AFEA20 ; Write Data Block here -=$afea24 SDC_TX_FIFO_CTRL_REG = $AFEA24 ; Bit0 Force Empty - Set to 1 to clear FIFO, self clearing (the bit) - -;****** Return to file: SDOS.asm - - -;****** Processing file: GABE_Control_Registers_def.asm - -=$afe880 GABE_MSTR_CTRL = $AFE880 -=$01 GABE_CTRL_PWR_LED = $01 ; Controls the LED in the Front of the case (Next to the reset button) -=$02 GABE_CTRL_SDC_LED = $02 ; Controls the LED in the Front of the Case (Next to SDCard) -=$10 GABE_CTRL_BUZZER = $10 ; Controls the Buzzer -=$80 GABE_CTRL_WRM_RST = $80 ; Warm Reset (needs to Setup other registers) -=$afe881 GABE_NOTUSED = $AFE881 ; Reserved for future use -=$afe882 GABE_RST_AUTH0 = $AFE882 ; Must Contain the BYTE $AD for Reset to Activate -=$afe883 GABE_RST_AUTH1 = $AFE883 ; Must Contain the BYTE $DE for Reset to Activate -=$afe884 GABE_RNG_DAT_LO = $AFE884 ; Low Part of 16Bit RNG Generator -=$afe885 GABE_RNG_DAT_HI = $AFE885 ; Hi Part of 16Bit RNG Generator -=$afe884 GABE_RNG_SEED_LO = $AFE884 ; Low Part of 16Bit RNG Generator -=$afe885 GABE_RNG_SEED_HI = $AFE885 ; Hi Part of 16Bit RNG Generator -=$afe886 GABE_RNG_STAT = $AFE886 ; -=$80 GABE_RNG_LFSR_DONE = $80 ; indicates that Output = SEED Database -=$afe886 GABE_RNG_CTRL = $AFE886 ; -=$01 GABE_RNG_CTRL_EN = $01 ; Enable the LFSR BLOCK_LEN -=$02 GABE_RNG_CTRL_DV = $02 ; After Setting the Seed Value, Toggle that Bit for it be registered -=$afe887 GABE_SYS_STAT = $AFE887 ; -=$01 GABE_SYS_STAT_MID0 = $01 ; Machine ID -- LSB -=$02 GABE_SYS_STAT_MID1 = $02 ; Machine ID -- MSB -=$08 GABE_SYS_STAT_EXP = $08 ; if Zero, there is an Expansion Card Preset -=$40 GABE_SYS_STAT_CPUA = $40 ; Indicates the (8bit/16bit) Size of the Accumulator -=$80 GABE_SYS_STAT_CPUX = $80 ; Indicates the (8bit/16bit) Size of the Accumulator - -;****** Return to file: SDOS.asm - - -;****** Processing file: ch376s_inc.asm - -=$00 DEF_NULL_CHAR = $00 -=$2a DEF_WILDCARD_CHAR = $2A -=$5c DEF_SEPAR_CHAR1 = $5C -=$2f DEF_SEPAR_CHAR2 = $2F -=$06 CH_CMD_CHECK_EXIST = $06 -=$0c CH_CMD_GET_FILE_SIZE = $0C -=$15 CH_CMD_SET_MODE = $15 ; Set the Controller's mode, in our Case in SDCARD -=$22 CH_CMD_GET_STATUS = $22 ; Get Interrupt Status -=$27 CH_CMD_RD_DATA0 = $27 ; -=$2c CH_CMD_WR_DATA = $2C -=$2f CH_CMD_SET_FILENAME = $2F ;SET_FILE_NAME -=$31 CH_CMD_DISK_MOUNT = $31 ;DISK_MOUNT -=$32 CH_CMD_FILE_OPEN = $32 ;FILE_OPEN -=$33 CH_CMD_FILE_ENUM_GO = $33 -=$36 CH_CMD_FILE_CLOSE = $36 ; To be Implemented -=$39 CH_CMD_BYTE_LOCATE = $39 -=$3a CH_CMD_BYTE_READ = $3A -=$3b CH_CMD_BYTE_RD_GO = $3B -=$3c CH_CMD_BYTE_WRITE = $3C -=$3d CH_CMD_BYTE_WR_GO = $3D -=$44 CH_VAR_DISK_ROOT = $44 -=$48 CH_VAR_DSK_TOTAL_CLUS = $48 -=$4c CH_VAR_DSK_START_LBA = $4C -=$50 CH_VAR_DSK_DAT_START = $50 -=$54 CH_VAR_LBA_BUFFER = $54 -=$58 CH_VAR_LBA_CURRENT = $58 -=$5c CH_VAR_FAT_DIR_LBA = $5C -=$60 CH_VAR_START_CLUSTER = $60 -=$64 CH_VAR_CURRENT_CLUST = $64 -=$68 CH_VAR_FILE_SIZE = $68 -=$6c CH_VAR_CURRENT_OFFSET = $6C -=$14 CH376S_STAT_SUCCESS = $14 -=$17 CH376S_STAT_BUF_OVF = $17 -=$1d CH376S_STAT_DSK_RD = $1D -=$1e CH376S_STAT_DSK_WR = $1E -=$41 CH376S_ERR_OPEN_DIR = $41 -=$42 CH376S_ERR_MISS_FIL = $42 -=$43 CH376S_ERR_FOUND_NAME = $43 -=$82 CH376S_ERR_DISK_DSC = $82 -=$84 CH376S_ERR_LRG_SEC = $84 -=$92 CH376S_ERR_PARTTION = $92 -=$a1 CH376S_ERR_NOT_FORM = $A1 -=$b1 CH376S_ERR_DSK_FULL = $B1 -=$b2 CH376S_FDT_OVER = $B2 -=$b4 CH376S_FILE_CLOSED = $B4 -=$51 CH376S_CMD_RET_SUCCESS = $51 -=$5f CH376S_CMD_RET_ABORT = $5F -=$00 SDCARD_PRSNT_NO_CARD = $00 -=$01 SDCARD_PRSNT_CD = $01 -=$02 SDCARD_PRSNT_WP = $02 -=$04 SDCARD_PRSNT_MNTED = $04 ; Card is present and Mounted1 - -;****** Return to file: SDOS.asm - -=$5f00 SD_FIRST_SECTOR = $5F00 ; 4 bytes -=$5f04 SD_FAT_OFFSET = $5F04 ; 4 bytes -=$5f08 SD_ROOT_OFFSET = $5F08 ; 4 bytes -=$5f0c SD_DATA_OFFSET = $5F0C ; 4 bytes -=$5f10 SD_RESERVED_SECTORS = $5F10 ; 2 bytes -=$5f12 SD_SECTORS_PER_FAT = $5F12 ; 2 bytes -=$5f14 SD_BYTES_PER_SECTOR = $5F14 ; 2 bytes -=$5f16 SD_FAT_COUNT = $5F16 ; 2 bytes -=$5f18 SD_SECTORS = $5F18 ; 4 bytes -=$5f1c SD_ROOT_ENTRIES = $5F1C ; 2 bytes -=$5f20 SD_DIR_OFFSET = $5F20 ; 2 bytes - use this to read the root directory -=$5f22 SD_NEXT_CLUSTER = $5F22 ; 2 bytes - use this to point to the next file cluster in the FAT -=$5f24 SD_SECTORS_PER_CLUSTER = $5F24 ; 2 byte -=$5f26 SD_FAT16 = $5F26 ; 1 byte - write 1 for FAT16, 0 for FAT12 -=$5f27 CLUSTER_PTR = $5F27 ; 2 bytes -=$5f29 LOG_CLUSTER_PTR = $5F29 ; 4 bytes -=$0080 SD_DATA = $0080 ; 3 bytes - used indirect addressing -=$0083 SD_TMP_DATA = $0083 ; 3 bytes - used indirect addressing -=$0086 SD_DATA_FAT_PAGE = $0086 ; 2 bytes - last FAT page that was loaded -=$0088 SD_MULT_AREA = $0088 ; 4 bytes -=$6000 SD_BLK_BEGIN = $6000 ; 512 bytes -=$6200 SD_BTSCT_BEGIN = $6200 ; 512 bytes -=$6400 SD_ROOT_BEGIN = $6400 ; 512 bytes -=$6600 FAT_DATA = $6600 ; 512 bytes -.0000 simplefilestruct ->0000 name .fill 8 ->0008 extension .fill 3 ->000b 00 type .byte 0 ->000c 00 00 size_l .word 0 ->000e 00 00 size_h .word 0 -.0000 fatrec ->0000 name .fill 8 ->0008 extension .fill 3 ->000b 00 type .byte 0 ->000c 00 user_attr .byte 0 ->000d 00 deleted_char .byte 0 ; this is only populated when byte 1 is $E5 - deleted_char ->000e 00 00 create_time .word 0 ->0010 00 00 create_date .word 0 ->0012 00 00 access_date .word 0 ->0014 00 00 access_rights .word 0 ->0016 00 00 mod_time .word 0 ->0018 00 00 mod_date .word 0 ->001a 00 00 cluster .word 0 ->001c 00 00 size_l .word 0 ->001e 00 00 size_h .word 0 -.3a02c7 ISDOS_INIT -.3a02c7 af 80 e8 af lda $afe880 LDA GABE_MSTR_CTRL -.3a02cb 29 fd and #$fd AND #~GABE_CTRL_SDC_LED -.3a02cd 09 02 ora #$02 ORA #GABE_CTRL_SDC_LED -.3a02cf 8f 80 e8 af sta $afe880 STA GABE_MSTR_CTRL -.3a02d3 c2 20 rep #$20 REP #$20 ; set A long -.3a02d5 a9 00 00 lda #$0000 LDA #0 -.3a02d8 8d 08 5f sta $5f08 STA SD_ROOT_OFFSET -.3a02db 8d 22 5f sta $5f22 STA SD_NEXT_CLUSTER -.3a02de e2 20 sep #$20 SEP #$20 ; set A short -.3a02e0 85 3f sta $3f STA SDCARD_PRSNT_MNT -.3a02e2 a9 01 lda #$01 LDA #SDC_TRANS_INIT_SD -.3a02e4 8f 02 ea af sta $afea02 STA SDC_TRANS_TYPE_REG -.3a02e8 a9 01 lda #$01 LDA #SDC_TRANS_START -.3a02ea 8f 03 ea af sta $afea03 STA SDC_TRANS_CONTROL_REG -.3a02ee af 04 ea af lda $afea04 SD_WAIT LDA SDC_TRANS_STATUS_REG -.3a02f2 29 01 and #$01 AND #SDC_TRANS_BUSY -.3a02f4 c9 01 cmp #$01 CMP #SDC_TRANS_BUSY -.3a02f6 f0 f6 beq $3a02ee BEQ SD_WAIT -.3a02f8 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG -.3a02fc f0 02 beq $3a0300 BEQ SD_INIT_SUCCESS -.3a02fe 80 06 bra $3a0306 BRA SD_INIT_DONE -.3a0300 SD_INIT_SUCCESS -.3a0300 a9 01 lda #$01 LDA #1 -.3a0302 85 3f sta $3f STA SDCARD_PRSNT_MNT -.3a0304 80 00 bra $3a0306 BRA SD_INIT_DONE -.3a0306 SD_INIT_DONE -.3a0306 af 80 e8 af lda $afe880 LDA GABE_MSTR_CTRL -.3a030a 29 fd and #$fd AND #~GABE_CTRL_SDC_LED -.3a030c 8f 80 e8 af sta $afe880 STA GABE_MSTR_CTRL -.3a0310 6b rtl RTL -.3a0311 CALC_OFFSET_BYTES -.3a0311 a5 8a lda $8a LDA SD_MULT_AREA + 2 ; high 16-bits -.3a0313 0a asl a ASL A -.3a0314 85 8b sta $8b STA SD_MULT_AREA + 3 -.3a0316 18 clc CLC -.3a0317 a5 88 lda $88 LDA SD_MULT_AREA -.3a0319 0a asl a ASL A -.3a031a 85 89 sta $89 STA SD_MULT_AREA + 1 -.3a031c 90 02 bcc $3a0320 BCC CALC_DONE -.3a031e e6 8b inc $8b INC SD_MULT_AREA + 3 -.3a0320 CALC_DONE -.3a0320 e2 20 sep #$20 SEP #$20 ; set A short -.3a0322 64 88 stz $88 stz SD_MULT_AREA -.3a0324 c2 20 rep #$20 REP #$20 ; set A long -.3a0326 60 rts RTS -.3a0327 ISDOS_READ_MBR_BOOT -.3a0327 a5 3f lda $3f LDA SDCARD_PRSNT_MNT ; this must be non-zero -.3a0329 d0 01 bne $3a032c BNE RMBR_CARD_PRESENT -.3a032b 6b rtl RTL -.3a032c RMBR_CARD_PRESENT -.3a032c c2 20 rep #$20 REP #$20 ; set A long -.3a032e a9 00 60 lda #$6000 LDA #SD_BLK_BEGIN -.3a0331 85 80 sta $80 STA SD_DATA -.3a0333 a9 00 00 lda #$0000 LDA #0 -.3a0336 85 82 sta $82 STA SD_DATA + 2 -.3a0338 a9 00 00 lda #$0000 LDA #0 -.3a033b 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG -.3a033f 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG -.3a0343 e2 20 sep #$20 SEP #$20 ; set A short -.3a0345 22 11 04 3a jsl $3a0411 JSL ISDOS_READ_BLOCK -.3a0349 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG -.3a034d f0 01 beq $3a0350 BEQ SD_CONTINUE_1 -.3a034f 6b rtl RTL -.3a0350 SD_CONTINUE_1 -.3a0350 c2 20 rep #$20 REP #$20 ; set A long -.3a0352 ad fe 61 lda $61fe LDA SD_BLK_BEGIN + 510 -.3a0355 c9 55 aa cmp #$aa55 CMP #$AA55 -.3a0358 f0 01 beq $3a035b BEQ VALID_SIG -.3a035a 6b rtl RTL -.3a035b VALID_SIG -.3a035b c2 20 rep #$20 REP #$20 ; set A long -.3a035d a2 be 01 ldx #$01be LDX #446 ; offset to first partition -.3a0360 bd 08 60 lda $6008,x LDA SD_BLK_BEGIN,X + 8 -.3a0363 85 88 sta $88 STA SD_MULT_AREA -.3a0365 bd 0a 60 lda $600a,x LDA SD_BLK_BEGIN,X + 10 -.3a0368 85 8a sta $8a STA SD_MULT_AREA + 2 -.3a036a 20 11 03 jsr $3a0311 JSR CALC_OFFSET_BYTES -.3a036d a5 88 lda $88 LDA SD_MULT_AREA -.3a036f 8d 00 5f sta $5f00 STA SD_FIRST_SECTOR -.3a0372 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG -.3a0376 a5 8a lda $8a LDA SD_MULT_AREA + 2 -.3a0378 8d 02 5f sta $5f02 STA SD_FIRST_SECTOR + 2 -.3a037b 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG -.3a037f a9 00 62 lda #$6200 LDA #SD_BTSCT_BEGIN -.3a0382 85 80 sta $80 STA SD_DATA -.3a0384 a9 00 00 lda #$0000 LDA #0 -.3a0387 85 82 sta $82 STA SD_DATA + 2 -.3a0389 e2 20 sep #$20 SEP #$20 ; set A short -.3a038b 22 11 04 3a jsl $3a0411 JSL ISDOS_READ_BLOCK -.3a038f af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG -.3a0393 f0 01 beq $3a0396 BEQ SD_CONTINUE_2 -.3a0395 6b rtl RTL -.3a0396 SD_CONTINUE_2 -.3a0396 c2 20 rep #$20 REP #$20 ; set A long -.3a0398 a2 00 00 ldx #$0000 LDX #0 -.3a039b bd 0b 62 lda $620b,x LDA SD_BTSCT_BEGIN,X + $B -.3a039e 8d 14 5f sta $5f14 STA SD_BYTES_PER_SECTOR -.3a03a1 e2 20 sep #$20 SEP #$20 ; set A short -.3a03a3 bd 0d 62 lda $620d,x LDA SD_BTSCT_BEGIN,X + $D -.3a03a6 8d 24 5f sta $5f24 STA SD_SECTORS_PER_CLUSTER -.3a03a9 a9 00 lda #$00 LDA #0 -.3a03ab 8d 25 5f sta $5f25 STA SD_SECTORS_PER_CLUSTER + 1 -.3a03ae c2 20 rep #$20 REP #$20 ; set A long -.3a03b0 bd 10 62 lda $6210,x LDA SD_BTSCT_BEGIN,X + $10 -.3a03b3 29 ff 00 and #$00ff AND #$FF -.3a03b6 8d 16 5f sta $5f16 STA SD_FAT_COUNT -.3a03b9 bd 11 62 lda $6211,x LDA SD_BTSCT_BEGIN,X + $11 -.3a03bc 8d 1c 5f sta $5f1c STA SD_ROOT_ENTRIES -.3a03bf bd 13 62 lda $6213,x LDA SD_BTSCT_BEGIN,X + $13 -.3a03c2 f0 28 beq $3a03ec BEQ SD_LARGE_SECTORS -.3a03c4 8d 18 5f sta $5f18 STA SD_SECTORS -.3a03c7 a9 00 00 lda #$0000 LDA #0 -.3a03ca 8d 1a 5f sta $5f1a STA SD_SECTORS + 2 -.3a03cd ad 18 5f lda $5f18 LDA SD_SECTORS -.3a03d0 8d 12 01 sta $0112 STA D0_OPERAND_B -.3a03d3 ad 24 5f lda $5f24 LDA SD_SECTORS_PER_CLUSTER -.3a03d6 8d 10 01 sta $0110 STA D0_OPERAND_A -.3a03d9 ad 14 01 lda $0114 LDA D0_RESULT -.3a03dc c9 f7 0f cmp #$0ff7 CMP #$FF7 -.3a03df b0 17 bcs $3a03f8 BCS SD_SMALL_SECTORS ; number of sectors is more than fat12 can handle -.3a03e1 e2 20 sep #$20 SEP #$20 ; set A short -.3a03e3 a9 00 lda #$00 LDA #0 -.3a03e5 8d 26 5f sta $5f26 STA SD_FAT16 -.3a03e8 c2 20 rep #$20 REP #$20 ; set A long -.3a03ea 80 15 bra $3a0401 BRA SD_FAT12 -.3a03ec SD_LARGE_SECTORS -.3a03ec bd 20 62 lda $6220,x LDA SD_BTSCT_BEGIN,X + $20 -.3a03ef 8d 18 5f sta $5f18 STA SD_SECTORS -.3a03f2 bd 22 62 lda $6222,x LDA SD_BTSCT_BEGIN,X + $22 -.3a03f5 8d 1a 5f sta $5f1a STA SD_SECTORS + 2 -.3a03f8 SD_SMALL_SECTORS -.3a03f8 e2 20 sep #$20 SEP #$20 ; set A short -.3a03fa a9 01 lda #$01 LDA #1 -.3a03fc 8d 26 5f sta $5f26 STA SD_FAT16 -.3a03ff c2 20 rep #$20 REP #$20 ; set A long -.3a0401 SD_FAT12 -.3a0401 bd 0e 62 lda $620e,x LDA SD_BTSCT_BEGIN,X + $E -.3a0404 8d 10 5f sta $5f10 STA SD_RESERVED_SECTORS -.3a0407 bd 16 62 lda $6216,x LDA SD_BTSCT_BEGIN,X + $16 -.3a040a 8d 12 5f sta $5f12 STA SD_SECTORS_PER_FAT -.3a040d 20 db 07 jsr $3a07db JSR COMPUTE_FAT_ROOT_DATA_OFFSETS -.3a0410 RMBR_DONE -.3a0410 6b rtl RTL -.3a0411 ISDOS_READ_BLOCK -.3a0411 5a phy PHY -.3a0412 af 80 e8 af lda $afe880 LDA GABE_MSTR_CTRL -.3a0416 29 fd and #$fd AND #~GABE_CTRL_SDC_LED -.3a0418 09 02 ora #$02 ORA #GABE_CTRL_SDC_LED -.3a041a 8f 80 e8 af sta $afe880 STA GABE_MSTR_CTRL -.3a041e a5 3f lda $3f LDA SDCARD_PRSNT_MNT -.3a0420 d0 02 bne $3a0424 BNE SR_CARD_PRESENT -.3a0422 80 2d bra $3a0451 BRA SR_DONE -.3a0424 SR_CARD_PRESENT -.3a0424 a9 02 lda #$02 LDA #SDC_TRANS_READ_BLK -.3a0426 8f 02 ea af sta $afea02 STA SDC_TRANS_TYPE_REG -.3a042a a9 01 lda #$01 LDA #SDC_TRANS_START -.3a042c 8f 03 ea af sta $afea03 STA SDC_TRANS_CONTROL_REG -.3a0430 af 04 ea af lda $afea04 SR_WAIT LDA SDC_TRANS_STATUS_REG -.3a0434 29 01 and #$01 AND #SDC_TRANS_BUSY -.3a0436 c9 01 cmp #$01 CMP #SDC_TRANS_BUSY -.3a0438 f0 f6 beq $3a0430 BEQ SR_WAIT -.3a043a af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG -.3a043e f0 02 beq $3a0442 BEQ SD_READ_BLOCK_OK -.3a0440 80 0f bra $3a0451 BRA SR_DONE -.3a0442 SD_READ_BLOCK_OK -.3a0442 a0 00 00 ldy #$0000 LDY #0 -.3a0445 SR_READ_LOOP -.3a0445 af 10 ea af lda $afea10 LDA SDC_RX_FIFO_DATA_REG -.3a0449 97 80 sta [$80],y STA [SD_DATA],Y -.3a044b c8 iny INY -.3a044c c0 00 02 cpy #$0200 CPY #512 -.3a044f d0 f4 bne $3a0445 BNE SR_READ_LOOP -.3a0451 SR_DONE -.3a0451 a9 01 lda #$01 LDA #1 -.3a0453 8f 14 ea af sta $afea14 STA SDC_RX_FIFO_CTRL_REG -.3a0457 af 80 e8 af lda $afe880 LDA GABE_MSTR_CTRL -.3a045b 29 fd and #$fd AND #~GABE_CTRL_SDC_LED -.3a045d 8f 80 e8 af sta $afe880 STA GABE_MSTR_CTRL -.3a0461 7a ply PLY -.3a0462 6b rtl RTL -.3a0463 DISPLAY_FAT_NAME -.3a0463 48 pha PHA ; - store the value of filetype -.3a0464 a0 00 00 ldy #$0000 LDY #0 -.3a0467 _RD_VOLNAME_LOOP -.3a0467 b7 80 lda [$80],y LDA [SD_DATA],Y -.3a0469 22 18 10 00 jsl $001018 JSL PUTC -.3a046d c8 iny INY -.3a046e c0 08 00 cpy #$0008 CPY #8 -.3a0471 f0 07 beq $3a047a BEQ _RD_DOT -.3a0473 c0 0b 00 cpy #$000b CPY #11 -.3a0476 d0 ef bne $3a0467 BNE _RD_VOLNAME_LOOP -.3a0478 80 0e bra $3a0488 BRA _DFAT_NAME_DONE -.3a047a _RD_DOT -.3a047a 68 pla PLA ; - read the value of filetype -.3a047b 48 pha PHA ; - store the value of filetype -.3a047c 89 18 bit #$18 BIT #$18 -.3a047e d0 e7 bne $3a0467 BNE _RD_VOLNAME_LOOP -.3a0480 a9 2e lda #$2e LDA #"." -.3a0482 22 18 10 00 jsl $001018 JSL PUTC -.3a0486 80 df bra $3a0467 BRA _RD_VOLNAME_LOOP -.3a0488 _DFAT_NAME_DONE -.3a0488 68 pla PLA ; - read the value of filetype -.3a0489 89 18 bit #$18 BIT #$18 -.3a048b d0 3b bne $3a04c8 BNE RD_DFAT_DONE -.3a048d a9 3a lda #$3a LDA #`sd_cluster_str -.3a048f 8b phb PHB -.3a0490 48 pha PHA -.3a0491 ab plb PLB -.3a0492 a2 da 09 ldx #$09da LDX #<>sd_cluster_str -.3a0495 22 1c 10 00 jsl $00101c JSL PUTS -.3a0499 ab plb PLB -.3a049a a0 1b 00 ldy #$001b LDY #fatrec.cluster + 1 -.3a049d b7 80 lda [$80],y LDA [SD_DATA],Y -.3a049f 22 80 10 00 jsl $001080 JSL PRINTAH -.3a04a3 a0 1a 00 ldy #$001a LDY #fatrec.cluster -.3a04a6 b7 80 lda [$80],y LDA [SD_DATA],Y -.3a04a8 22 80 10 00 jsl $001080 JSL PRINTAH -.3a04ac a9 3a lda #$3a LDA #`sd_filesize_str -.3a04ae 8b phb PHB -.3a04af 48 pha PHA -.3a04b0 ab plb PLB -.3a04b1 a2 e5 09 ldx #$09e5 LDX #<>sd_filesize_str -.3a04b4 22 1c 10 00 jsl $00101c JSL PUTS -.3a04b8 ab plb PLB -.3a04b9 a0 1f 00 ldy #$001f LDY #fatrec.size_h + 1 -.3a04bc RD_SIZE_LOOP -.3a04bc b7 80 lda [$80],y LDA [SD_DATA],Y -.3a04be 22 80 10 00 jsl $001080 JSL PRINTAH -.3a04c2 88 dey DEY -.3a04c3 c0 1b 00 cpy #$001b CPY #$1B -.3a04c6 d0 f4 bne $3a04bc BNE RD_SIZE_LOOP -.3a04c8 RD_DFAT_DONE -.3a04c8 a9 0d lda #$0d LDA #$D -.3a04ca 22 18 10 00 jsl $001018 JSL PUTC -.3a04ce 60 rts RTS -.3a04cf ISDOS_DISPLAY_ROOT_DIR -.3a04cf c2 20 rep #$20 REP #$20 ; set A long -.3a04d1 a9 00 00 lda #$0000 LDA #0 ; reset the root entries offset -.3a04d4 8d 20 5f sta $5f20 STA SD_DIR_OFFSET -.3a04d7 RD_NEXT_SECTOR -.3a04d7 a9 00 64 lda #$6400 LDA #SD_ROOT_BEGIN -.3a04da 85 80 sta $80 STA SD_DATA -.3a04dc a9 00 00 lda #$0000 LDA #0 -.3a04df 85 82 sta $82 STA SD_DATA + 2 -.3a04e1 ad 20 5f lda $5f20 LDA SD_DIR_OFFSET ; multiply by 512 -.3a04e4 0a asl a ASL A -.3a04e5 eb xba XBA -.3a04e6 8d 20 01 sta $0120 STA ADDER_A -.3a04e9 a9 00 00 lda #$0000 LDA #0 -.3a04ec 8d 22 01 sta $0122 STA ADDER_A + 2 -.3a04ef ad 08 5f lda $5f08 LDA SD_ROOT_OFFSET -.3a04f2 8d 24 01 sta $0124 STA ADDER_B -.3a04f5 ad 0a 5f lda $5f0a LDA SD_ROOT_OFFSET+2 -.3a04f8 8d 26 01 sta $0126 STA ADDER_B + 2 -.3a04fb ad 28 01 lda $0128 LDA ADDER_R -.3a04fe 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG -.3a0502 ad 2a 01 lda $012a LDA ADDER_R + 2 -.3a0505 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG -.3a0509 e2 20 sep #$20 SEP #$20 ; set A short -.3a050b 22 11 04 3a jsl $3a0411 JSL ISDOS_READ_BLOCK -.3a050f af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG -.3a0513 f0 14 beq $3a0529 BEQ RD_DIR_ENTRY -.3a0515 e2 20 sep #$20 SEP #$20 ; set A short -.3a0517 da phx PHX -.3a0518 a9 3a lda #$3a LDA #`SD_ROOT_ERROR_MSG -.3a051a 8b phb PHB -.3a051b 48 pha PHA -.3a051c ab plb PLB -.3a051d a2 4b 09 ldx #$094b LDX #<>SD_ROOT_ERROR_MSG -.3a0520 22 1c 10 00 jsl $00101c JSL PUTS -.3a0524 ab plb PLB -.3a0525 fa plx PLX -.3a0526 82 6a 00 brl $3a0593 BRL RD_DONE -.3a0529 RD_DIR_ENTRY -.3a0529 a7 80 lda [$80] LDA [SD_DATA] -.3a052b d0 04 bne $3a0531 BNE RD_CONTINUE ; if first byte is 0, entry is available and there are no following entries -.3a052d 5c 93 05 3a jmp $3a0593 JML RD_DONE -.3a0531 RD_CONTINUE -.3a0531 c9 e5 cmp #$e5 CMP #$E5 -.3a0533 f0 35 beq $3a056a BEQ RD_SKIP -.3a0535 RD_LOOP -.3a0535 a0 0b 00 ldy #$000b LDY #fatrec.type -.3a0538 b7 80 lda [$80],y LDA [SD_DATA],Y -.3a053a c9 0f cmp #$0f CMP #$F ; long file name -.3a053c d0 04 bne $3a0542 BNE RD_NOT_VFAT -.3a053e 5c be 05 3a jmp $3a05be JML RD_READ_LONG_FILENAME -.3a0542 RD_NOT_VFAT -.3a0542 89 02 bit #$02 BIT #2 ; hidden -.3a0544 f0 02 beq $3a0548 BEQ RD_NOT_HIDDEN -.3a0546 80 22 bra $3a056a BRA RD_SKIP -.3a0548 RD_NOT_HIDDEN -.3a0548 89 08 bit #$08 BIT #8 ; volume name -.3a054a f0 04 beq $3a0550 BEQ RD_NOT_VOLUME -.3a054c 5c a9 05 3a jmp $3a05a9 JML RD_READ_VOLNAME -.3a0550 RD_NOT_VOLUME -.3a0550 89 10 bit #$10 BIT #$10 ; directory -.3a0552 f0 04 beq $3a0558 BEQ RD_NOT_DIRECTORY -.3a0554 5c 94 05 3a jmp $3a0594 JML RD_DIRNAME -.3a0558 RD_NOT_DIRECTORY -.3a0558 48 pha PHA ; - store the value of filetype -.3a0559 a9 3a lda #$3a LDA #`sd_filename -.3a055b 8b phb PHB -.3a055c 48 pha PHA -.3a055d ab plb PLB -.3a055e a2 cc 09 ldx #$09cc LDX #<>sd_filename -.3a0561 22 1c 10 00 jsl $00101c JSL PUTS -.3a0565 ab plb PLB -.3a0566 68 pla PLA -.3a0567 20 63 04 jsr $3a0463 JSR DISPLAY_FAT_NAME -.3a056a RD_SKIP -.3a056a c2 20 rep #$20 REP #$20 ; set A long -.3a056c a5 80 lda $80 LDA SD_DATA -.3a056e 29 e0 01 and #$01e0 AND #$1E0 -.3a0571 c9 e0 01 cmp #$01e0 CMP #$1E0 -.3a0574 d0 0f bne $3a0585 BNE RD_SKIP_NEXT -.3a0576 ad 20 5f lda $5f20 LDA SD_DIR_OFFSET -.3a0579 1a inc a INC A -.3a057a cd 1c 5f cmp $5f1c CMP SD_ROOT_ENTRIES -.3a057d b0 14 bcs $3a0593 BCS RD_DONE -.3a057f 8d 20 5f sta $5f20 STA SD_DIR_OFFSET ; next sector -.3a0582 4c d7 04 jmp $3a04d7 JMP RD_NEXT_SECTOR -.3a0585 RD_SKIP_NEXT -.3a0585 a5 80 lda $80 LDA SD_DATA -.3a0587 18 clc CLC -.3a0588 69 20 00 adc #$0020 ADC #$20 -.3a058b 85 80 sta $80 STA SD_DATA -.3a058d e2 20 sep #$20 SEP #$20 ; set A short -.3a058f 5c 29 05 3a jmp $3a0529 JML RD_DIR_ENTRY -.3a0593 RD_DONE -.3a0593 6b rtl RTL -.3a0594 RD_DIRNAME -.3a0594 48 pha PHA ; - store the value of filetype -.3a0595 a9 3a lda #$3a LDA #`sd_dir_name -.3a0597 8b phb PHB -.3a0598 48 pha PHA -.3a0599 ab plb PLB -.3a059a a2 be 09 ldx #$09be LDX #<>sd_dir_name -.3a059d 22 1c 10 00 jsl $00101c JSL PUTS -.3a05a1 ab plb PLB -.3a05a2 68 pla PLA -.3a05a3 20 63 04 jsr $3a0463 JSR DISPLAY_FAT_NAME -.3a05a6 4c 6a 05 jmp $3a056a JMP RD_SKIP -.3a05a9 RD_READ_VOLNAME -.3a05a9 48 pha PHA ; - store the value of filetype -.3a05aa a9 3a lda #$3a LDA #`sd_volume_name -.3a05ac 8b phb PHB -.3a05ad 48 pha PHA -.3a05ae ab plb PLB -.3a05af a2 a2 09 ldx #$09a2 LDX #<>sd_volume_name -.3a05b2 22 1c 10 00 jsl $00101c JSL PUTS -.3a05b6 ab plb PLB -.3a05b7 68 pla PLA -.3a05b8 20 63 04 jsr $3a0463 JSR DISPLAY_FAT_NAME -.3a05bb 4c 6a 05 jmp $3a056a JMP RD_SKIP -.3a05be RD_READ_LONG_FILENAME -.3a05be 4c 6a 05 jmp $3a056a JMP RD_SKIP -.3a05c1 STORE_FILE_LIST -.3a05c1 a0 0b 00 ldy #$000b LDY #11 -.3a05c4 c9 10 cmp #$10 CMP #$10 -.3a05c6 f0 02 beq $3a05ca BEQ SF_DIR -.3a05c8 a9 01 lda #$01 LDA #1 -.3a05ca SF_DIR -.3a05ca 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y -.3a05cc a0 00 00 ldy #$0000 LDY #0 -.3a05cf a2 0b 00 ldx #$000b LDX #11 -.3a05d2 SF_LOOP_NAME -.3a05d2 b7 80 lda [$80],y LDA [SD_DATA],Y -.3a05d4 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y -.3a05d6 c8 iny INY -.3a05d7 ca dex DEX -.3a05d8 d0 f8 bne $3a05d2 BNE SF_LOOP_NAME -.3a05da c2 20 rep #$20 REP #$20 ; set A long -.3a05dc a0 1a 00 ldy #$001a LDY #fatrec.cluster -.3a05df b7 80 lda [$80],y LDA [SD_DATA],Y -.3a05e1 a0 10 00 ldy #$0010 LDY #16 -.3a05e4 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y -.3a05e6 a0 1c 00 ldy #$001c LDY #fatrec.size_l -.3a05e9 b7 80 lda [$80],y LDA [SD_DATA],Y -.3a05eb a0 0c 00 ldy #$000c LDY #12 -.3a05ee 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y -.3a05f0 a0 1e 00 ldy #$001e LDY #fatrec.size_h -.3a05f3 b7 80 lda [$80],y LDA [SD_DATA],Y -.3a05f5 a0 0e 00 ldy #$000e LDY #14 -.3a05f8 97 51 sta [$51],y STA [SDOS_FILE_REC_PTR],Y -.3a05fa a5 51 lda $51 LDA SDOS_FILE_REC_PTR -.3a05fc 18 clc CLC -.3a05fd 69 12 00 adc #$0012 ADC #18 -.3a0600 85 51 sta $51 STA SDOS_FILE_REC_PTR -.3a0602 e2 20 sep #$20 SEP #$20 ; set A short -.3a0604 60 rts RTS -.3a0605 ISDOS_PARSE_ROOT_DIR -.3a0605 c2 20 rep #$20 REP #$20 ; set A long -.3a0607 a9 00 00 lda #$0000 LDA #0 ; reset the root entries offset -.3a060a 8d 20 5f sta $5f20 STA SD_DIR_OFFSET -.3a060d SP_NEXT_SECTOR -.3a060d a9 00 64 lda #$6400 LDA #SD_ROOT_BEGIN -.3a0610 85 80 sta $80 STA SD_DATA -.3a0612 a9 00 00 lda #$0000 LDA #0 -.3a0615 85 82 sta $82 STA SD_DATA + 2 -.3a0617 ad 20 5f lda $5f20 LDA SD_DIR_OFFSET ; multiply by 512 -.3a061a 0a asl a ASL A -.3a061b eb xba XBA -.3a061c 8d 20 01 sta $0120 STA ADDER_A -.3a061f a9 00 00 lda #$0000 LDA #0 -.3a0622 8d 22 01 sta $0122 STA ADDER_A + 2 -.3a0625 ad 08 5f lda $5f08 LDA SD_ROOT_OFFSET -.3a0628 8d 24 01 sta $0124 STA ADDER_B -.3a062b ad 0a 5f lda $5f0a LDA SD_ROOT_OFFSET+2 -.3a062e 8d 26 01 sta $0126 STA ADDER_B + 2 -.3a0631 ad 28 01 lda $0128 LDA ADDER_R -.3a0634 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG -.3a0638 ad 2a 01 lda $012a LDA ADDER_R + 2 -.3a063b 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG -.3a063f e2 20 sep #$20 SEP #$20 ; set A short -.3a0641 22 11 04 3a jsl $3a0411 JSL ISDOS_READ_BLOCK -.3a0645 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG -.3a0649 f0 04 beq $3a064f BEQ SP_DIR_ENTRY -.3a064b 5c ab 06 3a jmp $3a06ab JML SP_DONE -.3a064f SP_DIR_ENTRY -.3a064f a7 80 lda [$80] LDA [SD_DATA] -.3a0651 d0 04 bne $3a0657 BNE SP_CONTINUE ; if first byte is 0, entry is available and there are no following entries -.3a0653 5c ab 06 3a jmp $3a06ab JML SP_DONE -.3a0657 SP_CONTINUE -.3a0657 c9 e5 cmp #$e5 CMP #$E5 -.3a0659 f0 27 beq $3a0682 BEQ SP_SKIP -.3a065b SP_LOOP -.3a065b a0 0b 00 ldy #$000b LDY #fatrec.type -.3a065e b7 80 lda [$80],y LDA [SD_DATA],Y -.3a0660 c9 0f cmp #$0f CMP #$F ; long file name -.3a0662 d0 04 bne $3a0668 BNE SP_NOT_VFAT -.3a0664 5c 82 06 3a jmp $3a0682 JML SP_SKIP -.3a0668 SP_NOT_VFAT -.3a0668 89 02 bit #$02 BIT #2 ; hidden -.3a066a f0 02 beq $3a066e BEQ SP_NOT_HIDDEN -.3a066c 80 14 bra $3a0682 BRA SP_SKIP -.3a066e SP_NOT_HIDDEN -.3a066e 89 08 bit #$08 BIT #8 ; volume name -.3a0670 f0 04 beq $3a0676 BEQ SP_NOT_VOLUME -.3a0672 5c 82 06 3a jmp $3a0682 JML SP_SKIP -.3a0676 SP_NOT_VOLUME -.3a0676 89 10 bit #$10 BIT #$10 ; directory -.3a0678 f0 05 beq $3a067f BEQ SP_NOT_DIRECTORY -.3a067a 20 c1 05 jsr $3a05c1 JSR STORE_FILE_LIST -.3a067d 80 03 bra $3a0682 BRA SP_SKIP -.3a067f SP_NOT_DIRECTORY -.3a067f 20 c1 05 jsr $3a05c1 JSR STORE_FILE_LIST -.3a0682 SP_SKIP -.3a0682 c2 20 rep #$20 REP #$20 ; set A long -.3a0684 a5 80 lda $80 LDA SD_DATA -.3a0686 29 e0 01 and #$01e0 AND #$1E0 ; each record in FAT is $20 bytes long -.3a0689 c9 e0 01 cmp #$01e0 CMP #$1E0 -.3a068c d0 0f bne $3a069d BNE SP_SKIP_NEXT -.3a068e ad 20 5f lda $5f20 LDA SD_DIR_OFFSET -.3a0691 1a inc a INC A -.3a0692 cd 1c 5f cmp $5f1c CMP SD_ROOT_ENTRIES -.3a0695 b0 14 bcs $3a06ab BCS SP_DONE -.3a0697 8d 20 5f sta $5f20 STA SD_DIR_OFFSET ; next sector -.3a069a 4c 0d 06 jmp $3a060d JMP SP_NEXT_SECTOR -.3a069d SP_SKIP_NEXT -.3a069d a5 80 lda $80 LDA SD_DATA -.3a069f 18 clc CLC -.3a06a0 69 20 00 adc #$0020 ADC #$20 -.3a06a3 85 80 sta $80 STA SD_DATA -.3a06a5 e2 20 sep #$20 SEP #$20 ; set A short -.3a06a7 5c 4f 06 3a jmp $3a064f JML SP_DIR_ENTRY -.3a06ab SP_DONE -.3a06ab 6b rtl RTL -.3a06ac ISDOS_READ_FAT_SECTOR -.3a06ac 85 88 sta $88 STA SD_MULT_AREA -.3a06ae a9 00 00 lda #$0000 LDA #0 -.3a06b1 85 8a sta $8a STA SD_MULT_AREA + 2 -.3a06b3 20 11 03 jsr $3a0311 JSR CALC_OFFSET_BYTES -.3a06b6 a5 88 lda $88 LDA SD_MULT_AREA -.3a06b8 8d 20 01 sta $0120 STA ADDER_A -.3a06bb a5 8a lda $8a LDA SD_MULT_AREA + 2 -.3a06bd 8d 22 01 sta $0122 STA ADDER_A + 2 -.3a06c0 ad 04 5f lda $5f04 LDA SD_FAT_OFFSET -.3a06c3 8d 24 01 sta $0124 STA ADDER_B -.3a06c6 ad 06 5f lda $5f06 LDA SD_FAT_OFFSET+2 -.3a06c9 8d 26 01 sta $0126 STA ADDER_B + 2 -.3a06cc ad 28 01 lda $0128 LDA ADDER_R -.3a06cf 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG -.3a06d3 ad 2a 01 lda $012a LDA ADDER_R + 2 -.3a06d6 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG -.3a06da e2 20 sep #$20 SEP #$20 ; set A short -.3a06dc 22 11 04 3a jsl $3a0411 JSL ISDOS_READ_BLOCK -.3a06e0 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG -.3a06e4 f0 00 beq $3a06e6 BEQ SD_CONTINUE_FAT -.3a06e6 SD_CONTINUE_FAT -.3a06e6 c2 20 rep #$20 REP #$20 ; set A long -.3a06e8 6b rtl RTL -.3a06e9 ISDOS_READ_DATA_CLUSTER -.3a06e9 38 sec SEC -.3a06ea e9 02 00 sbc #$0002 SBC #2 -.3a06ed 8d 00 01 sta $0100 STA UNSIGNED_MULT_A -.3a06f0 ad 24 5f lda $5f24 LDA SD_SECTORS_PER_CLUSTER -.3a06f3 8d 02 01 sta $0102 STA UNSIGNED_MULT_B -.3a06f6 ad 04 01 lda $0104 LDA UNSIGNED_MULT_RESULT -.3a06f9 48 pha PHA -.3a06fa a2 00 00 ldx #$0000 LDX #0 -.3a06fd SDR_NEXT_SECTOR -.3a06fd 85 88 sta $88 STA SD_MULT_AREA -.3a06ff a9 00 00 lda #$0000 LDA #0 -.3a0702 85 8a sta $8a STA SD_MULT_AREA + 2 -.3a0704 20 11 03 jsr $3a0311 JSR CALC_OFFSET_BYTES -.3a0707 a5 88 lda $88 LDA SD_MULT_AREA -.3a0709 8d 20 01 sta $0120 STA ADDER_A -.3a070c a5 8a lda $8a LDA SD_MULT_AREA + 2 -.3a070e 8d 22 01 sta $0122 STA ADDER_A + 2 -.3a0711 ad 0c 5f lda $5f0c LDA SD_DATA_OFFSET -.3a0714 8d 24 01 sta $0124 STA ADDER_B -.3a0717 ad 0e 5f lda $5f0e LDA SD_DATA_OFFSET+2 -.3a071a 8d 26 01 sta $0126 STA ADDER_B + 2 -.3a071d ad 28 01 lda $0128 LDA ADDER_R -.3a0720 8f 07 ea af sta $afea07 STA SDC_SD_ADDR_7_0_REG -.3a0724 ad 2a 01 lda $012a LDA ADDER_R + 2 -.3a0727 8f 09 ea af sta $afea09 STA SDC_SD_ADDR_23_16_REG -.3a072b e2 20 sep #$20 SEP #$20 ; set A short -.3a072d 22 11 04 3a jsl $3a0411 JSL ISDOS_READ_BLOCK -.3a0731 af 05 ea af lda $afea05 LDA SDC_TRANS_ERROR_REG -.3a0735 f0 0a beq $3a0741 BEQ SD_CONTINUE_DATA -.3a0737 a9 ff lda #$ff LDA #$FF -.3a0739 8d 27 5f sta $5f27 STA CLUSTER_PTR -.3a073c 8d 28 5f sta $5f28 STA CLUSTER_PTR + 1 -.3a073f 80 17 bra $3a0758 BRA SD_CONTINUE_DATA_DONE -.3a0741 SD_CONTINUE_DATA -.3a0741 c2 20 rep #$20 REP #$20 ; set A long -.3a0743 a5 80 lda $80 LDA SD_DATA -.3a0745 18 clc CLC -.3a0746 69 00 02 adc #$0200 ADC #$200 -.3a0749 85 80 sta $80 STA SD_DATA -.3a074b 90 02 bcc $3a074f BCC SD_CONT_NO_CARRY -.3a074d e6 82 inc $82 INC SD_DATA + 2 -.3a074f SD_CONT_NO_CARRY -.3a074f 68 pla PLA -.3a0750 1a inc a INC A -.3a0751 48 pha PHA -.3a0752 e8 inx INX -.3a0753 ec 24 5f cpx $5f24 CPX SD_SECTORS_PER_CLUSTER -.3a0756 d0 a5 bne $3a06fd BNE SDR_NEXT_SECTOR -.3a0758 SD_CONTINUE_DATA_DONE -.3a0758 c2 20 rep #$20 REP #$20 ; set A long -.3a075a 68 pla PLA -.3a075b 6b rtl RTL -.3a075c ISDOS_READ_FILE -.3a075c 8d 27 5f sta $5f27 STA CLUSTER_PTR -.3a075f SD_CLUSTER_LOOP -.3a075f 22 e9 06 3a jsl $3a06e9 JSL ISDOS_READ_DATA_CLUSTER -.3a0763 ad 26 5f lda $5f26 LDA SD_FAT16 -.3a0766 29 01 00 and #$0001 AND #$1 -.3a0769 0a asl a ASL -.3a076a aa tax TAX -.3a076b fc 77 07 jsr ($3a0777,x) JSR (READ_FAT_TABLE,X) -.3a076e ad 27 5f lda $5f27 LDA CLUSTER_PTR -.3a0771 c9 ff ff cmp #$ffff CMP #$FFFF -.3a0774 d0 e9 bne $3a075f BNE SD_CLUSTER_LOOP -.3a0776 6b rtl RTL ->3a0777 7b 07 READ_FAT_TABLE .word <>FAT12_GET_NEXT_CLUSTER ->3a0779 9f 07 .word <>FAT16_GET_NEXT_CLUSTER -.3a077b FAT12_GET_NEXT_CLUSTER -.3a077b a5 80 lda $80 LDA SD_DATA -.3a077d 85 83 sta $83 STA SD_TMP_DATA -.3a077f a5 82 lda $82 LDA SD_DATA + 2 -.3a0781 85 85 sta $85 STA SD_TMP_DATA + 2 -.3a0783 a9 00 66 lda #$6600 LDA #FAT_DATA -.3a0786 85 80 sta $80 STA SD_DATA -.3a0788 a9 00 00 lda #$0000 LDA #0 -.3a078b 85 82 sta $82 STA SD_DATA + 2 -.3a078d ad 27 5f lda $5f27 LDA CLUSTER_PTR -.3a0790 eb xba XBA -.3a0791 29 ff 00 and #$00ff AND #$FF -.3a0794 22 ac 06 3a jsl $3a06ac JSL ISDOS_READ_FAT_SECTOR -.3a0798 a9 ff 0f lda #$0fff LDA #$FFF -.3a079b 8d 27 5f sta $5f27 STA CLUSTER_PTR -.3a079e 60 rts RTS -.3a079f FAT16_GET_NEXT_CLUSTER -.3a079f ad 27 5f lda $5f27 LDA CLUSTER_PTR -.3a07a2 eb xba XBA -.3a07a3 29 ff 00 and #$00ff AND #$FF -.3a07a6 c5 86 cmp $86 CMP SD_DATA_FAT_PAGE -.3a07a8 f0 22 beq $3a07cc BEQ SKIP_FAT_LOADING -.3a07aa 48 pha PHA -.3a07ab a5 80 lda $80 LDA SD_DATA -.3a07ad 85 83 sta $83 STA SD_TMP_DATA -.3a07af a5 82 lda $82 LDA SD_DATA + 2 -.3a07b1 85 85 sta $85 STA SD_TMP_DATA + 2 -.3a07b3 a9 00 66 lda #$6600 LDA #FAT_DATA -.3a07b6 85 80 sta $80 STA SD_DATA -.3a07b8 a9 00 00 lda #$0000 LDA #0 -.3a07bb 85 82 sta $82 STA SD_DATA + 2 -.3a07bd 68 pla PLA -.3a07be 85 86 sta $86 STA SD_DATA_FAT_PAGE -.3a07c0 22 ac 06 3a jsl $3a06ac JSL ISDOS_READ_FAT_SECTOR -.3a07c4 a5 83 lda $83 LDA SD_TMP_DATA -.3a07c6 85 80 sta $80 STA SD_DATA -.3a07c8 a5 85 lda $85 LDA SD_TMP_DATA + 2 -.3a07ca 85 82 sta $82 STA SD_DATA + 2 -.3a07cc SKIP_FAT_LOADING -.3a07cc ad 27 5f lda $5f27 LDA CLUSTER_PTR -.3a07cf 29 ff 00 and #$00ff AND #$FF -.3a07d2 0a asl a ASL A ; multiply by 2 -.3a07d3 a8 tay TAY -.3a07d4 b9 00 66 lda $6600,y LDA FAT_DATA,Y -.3a07d7 8d 27 5f sta $5f27 STA CLUSTER_PTR -.3a07da 60 rts RTS -.3a07db COMPUTE_FAT_ROOT_DATA_OFFSETS -.3a07db ad 10 5f lda $5f10 LDA SD_RESERVED_SECTORS ; 16 bit value -.3a07de 85 88 sta $88 STA SD_MULT_AREA -.3a07e0 a9 00 00 lda #$0000 LDA #0 -.3a07e3 85 8a sta $8a STA SD_MULT_AREA + 2 -.3a07e5 20 11 03 jsr $3a0311 JSR CALC_OFFSET_BYTES ; compute the byte offset -.3a07e8 a5 88 lda $88 LDA SD_MULT_AREA -.3a07ea 8d 20 01 sta $0120 STA ADDER_A -.3a07ed a5 8a lda $8a LDA SD_MULT_AREA + 2 -.3a07ef 8d 22 01 sta $0122 STA ADDER_A+2 -.3a07f2 ad 00 5f lda $5f00 LDA SD_FIRST_SECTOR ; 32 bit value -.3a07f5 8d 24 01 sta $0124 STA ADDER_B -.3a07f8 ad 02 5f lda $5f02 LDA SD_FIRST_SECTOR + 2 -.3a07fb 8d 26 01 sta $0126 STA ADDER_B + 2 -.3a07fe ad 28 01 lda $0128 LDA ADDER_R -.3a0801 8d 04 5f sta $5f04 STA SD_FAT_OFFSET -.3a0804 ad 2a 01 lda $012a LDA ADDER_R + 2 -.3a0807 8d 06 5f sta $5f06 STA SD_FAT_OFFSET + 2 -.3a080a ad 16 5f lda $5f16 LDA SD_FAT_COUNT -.3a080d 8d 00 01 sta $0100 STA UNSIGNED_MULT_A -.3a0810 ad 12 5f lda $5f12 LDA SD_SECTORS_PER_FAT -.3a0813 8d 02 01 sta $0102 STA UNSIGNED_MULT_B -.3a0816 ad 04 01 lda $0104 LDA UNSIGNED_MULT_RESULT -.3a0819 85 88 sta $88 STA SD_MULT_AREA -.3a081b ad 06 01 lda $0106 LDA UNSIGNED_MULT_RESULT + 2 -.3a081e 85 8a sta $8a STA SD_MULT_AREA + 2 -.3a0820 20 11 03 jsr $3a0311 JSR CALC_OFFSET_BYTES ; compute the byte offset -.3a0823 a5 88 lda $88 LDA SD_MULT_AREA -.3a0825 8d 20 01 sta $0120 STA ADDER_A -.3a0828 a5 8a lda $8a LDA SD_MULT_AREA + 2 -.3a082a 8d 22 01 sta $0122 STA ADDER_A + 2 -.3a082d ad 04 5f lda $5f04 LDA SD_FAT_OFFSET -.3a0830 8d 24 01 sta $0124 STA ADDER_B -.3a0833 ad 06 5f lda $5f06 LDA SD_FAT_OFFSET + 2 -.3a0836 8d 26 01 sta $0126 STA ADDER_B +2 -.3a0839 ad 28 01 lda $0128 LDA ADDER_R -.3a083c 8d 08 5f sta $5f08 STA SD_ROOT_OFFSET -.3a083f ad 2a 01 lda $012a LDA ADDER_R +2 -.3a0842 8d 0a 5f sta $5f0a STA SD_ROOT_OFFSET + 2 -.3a0845 ad 08 5f lda $5f08 LDA SD_ROOT_OFFSET -.3a0848 8d 20 01 sta $0120 STA ADDER_A -.3a084b ad 0a 5f lda $5f0a LDA SD_ROOT_OFFSET + 2 -.3a084e 8d 22 01 sta $0122 STA ADDER_A + 2 -.3a0851 a9 20 00 lda #$0020 LDA #32 ; the root contains 512 entries at 32 bytes each -.3a0854 85 88 sta $88 STA SD_MULT_AREA -.3a0856 a9 00 00 lda #$0000 LDA #0 -.3a0859 85 8a sta $8a STA SD_MULT_AREA + 2 -.3a085b 20 11 03 jsr $3a0311 JSR CALC_OFFSET_BYTES -.3a085e a5 88 lda $88 LDA SD_MULT_AREA -.3a0860 8d 24 01 sta $0124 STA ADDER_B -.3a0863 a5 8a lda $8a LDA SD_MULT_AREA + 2 -.3a0865 8d 26 01 sta $0126 STA ADDER_B + 2 -.3a0868 ad 28 01 lda $0128 LDA ADDER_R -.3a086b 8d 0c 5f sta $5f0c STA SD_DATA_OFFSET -.3a086e ad 2a 01 lda $012a LDA ADDER_R + 2 -.3a0871 8d 0e 5f sta $5f0e STA SD_DATA_OFFSET + 2 -.3a0874 60 rts RTS ->3a0875 30 30 20 2d 20 57 65 6c sd_card_tester .text "00 - Welcome to the SDCard Tester", $d, 0 ->3a087d 63 6f 6d 65 20 74 6f 20 74 68 65 20 53 44 43 61 ->3a088d 72 64 20 54 65 73 74 65 72 0d 00 ->3a0898 30 31 20 2d 20 43 61 72 sd_card_present .text "01 - Card Present", $d, 0 ->3a08a0 64 20 50 72 65 73 65 6e 74 0d 00 ->3a08ab 30 31 20 2d 20 4e 4f 20 sd_no_card_msg .text "01 - NO SDCARD PRESENT", $0D, $00 ->3a08b3 53 44 43 41 52 44 20 50 52 45 53 45 4e 54 0d 00 ->3a08c3 30 32 20 2d 20 43 61 6e sd_cant_read_mbr_msg .text "02 - Can't read MBR - No Card present", $D, $0 ->3a08cb 27 74 20 72 65 61 64 20 4d 42 52 20 2d 20 4e 6f ->3a08db 20 43 61 72 64 20 70 72 65 73 65 6e 74 0d 00 ->3a08ea 30 33 20 2d 20 45 72 72 sd_read_failure .text "03 - Error during read operation", $d, $0 ->3a08f2 6f 72 20 64 75 72 69 6e 67 20 72 65 61 64 20 6f ->3a0902 70 65 72 61 74 69 6f 6e 0d 00 ->3a090c 30 34 20 2d 20 45 72 72 SD_BOOT_SECTOR_MSG .text "04 - Error reading Boot sector", $d, $0 ->3a0914 6f 72 20 72 65 61 64 69 6e 67 20 42 6f 6f 74 20 ->3a0924 73 65 63 74 6f 72 0d 00 ->3a092c 30 35 20 2d 20 45 72 72 SD_FAT_ERROR_MSG .text "05 - Error reading FAT sector", $d, $0 ->3a0934 6f 72 20 72 65 61 64 69 6e 67 20 46 41 54 20 73 ->3a0944 65 63 74 6f 72 0d 00 ->3a094b 30 35 20 2d 20 45 72 72 SD_ROOT_ERROR_MSG .text "05 - Error reading Root sector", $d, $0 ->3a0953 6f 72 20 72 65 61 64 69 6e 67 20 52 6f 6f 74 20 ->3a0963 73 65 63 74 6f 72 0d 00 ->3a096b 30 35 20 2d 20 45 72 72 SD_DATA_ERROR_MSG .text "05 - Error reading Data sector", $d, $0 ->3a0973 6f 72 20 72 65 61 64 69 6e 67 20 44 61 74 61 20 ->3a0983 73 65 63 74 6f 72 0d 00 ->3a098b 49 6e 76 61 6c 69 64 20 INVALID_SIG_MSG .text 'Invalid MBR Signature',$D,0 ->3a0993 4d 42 52 20 53 69 67 6e 61 74 75 72 65 0d 00 ->3a09a2 56 6f 6c 75 6d 65 20 4e sd_volume_name .text "Volume Name: ", $0 ->3a09aa 61 6d 65 3a 20 00 ->3a09b0 56 46 41 54 20 4e 61 6d sd_vfat_name .text "VFAT Name : ", $0 ->3a09b8 65 20 20 3a 20 00 ->3a09be 44 69 72 65 63 74 6f 72 sd_dir_name .text "Directory : ", $0 ->3a09c6 79 20 20 3a 20 00 ->3a09cc 46 69 6c 65 6e 61 6d 65 sd_filename .text "Filename : ", $0 ->3a09d4 20 20 20 3a 20 00 ->3a09da 2c 20 43 6c 75 73 74 65 sd_cluster_str .text ", Cluster:", $0 ->3a09e2 72 3a 00 ->3a09e5 2c 20 53 69 7a 65 3a 00 sd_filesize_str .text ", Size:", $0 - -;****** Return to file: tracker.asm - - ;****** End of listing