Fix esp32 wait-timing race, rename wc_api.lib, keyboard: Enter-to-advance
esp32.c: two-phase esp_wait_busy() so a stale non-BUSY status right after esp_cmd() isn't mistaken for completion (fixed a real TRACK_PLAY/0x88 race on heavier XM files); added single-phase esp_wait_not_busy() for esp_send_dma()'s per-chunk wait, which never actually sets BUSY and was timing out on every chunk under the two-phase version. vgm_wc_api.lib renamed to wc_api.lib (build.bat updated to match). Keyboard: tried replacing wc_key_esc/pgup/pgdn/space with a raw PS/2-FIFO reader (matching how VGMPLAY.WMF's own player reads keys) so Enter could also advance to the next file. Reverted after two confirmed hardware regressions (esp32 transfers failing with ESP_ERR_INV_XM, and the keyboard going unresponsive once WC's own PS/2 scanning was disabled to stop it competing with the raw reads) - VGMPLAY's approach relies on a full custom interrupt handler xmplay has no equivalent need for. Back to the simple wc_key_*() wrappers, plus wc_key_enter() so Enter now advances too, and wc_key_wait_release() (called after wc_gedpl()) to debounce the Enter/F3 that launched the plugin itself. Also: About window now centers dynamically for all three WC text modes (90x36/80x25/80x30) instead of a fixed position, and matches the main window's color scheme. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
BIN
Binary file not shown.
@@ -2,7 +2,7 @@ REM NOTE: xmplay pins its OWN SDCC version here, independent of the rest of
|
|||||||
REM ft812sdk (which stays on 4.0.0 for ABI reasons - see project memory on
|
REM ft812sdk (which stays on 4.0.0 for ABI reasons - see project memory on
|
||||||
REM the earlier shared-lib ABI mismatch incident). 4.6.0 is needed here
|
REM the earlier shared-lib ABI mismatch incident). 4.6.0 is needed here
|
||||||
REM specifically for --sdcccall 1, required to link demyanenko-d/
|
REM specifically for --sdcccall 1, required to link demyanenko-d/
|
||||||
REM VGMPLAY.WMF's wc_api library (vgm_wc_api.lib) - our own hand-rolled
|
REM VGMPLAY.WMF's wc_api library (wc_api.lib) - our own hand-rolled
|
||||||
REM PRSRW+PRIAT implementations corrupted esp32 file loading in three
|
REM PRSRW+PRIAT implementations corrupted esp32 file loading in three
|
||||||
REM different shapes and were abandoned in favor of their tested code.
|
REM different shapes and were abandoned in favor of their tested code.
|
||||||
set SDCC=E:\SDCC\4.6.0
|
set SDCC=E:\SDCC\4.6.0
|
||||||
@@ -14,7 +14,7 @@ del /q /s obj >nul
|
|||||||
sdasz80 -o obj/crt0.rel src/crt0.s
|
sdasz80 -o obj/crt0.rel src/crt0.s
|
||||||
if errorlevel 1 pause & exit
|
if errorlevel 1 pause & exit
|
||||||
|
|
||||||
sdcc -Isrc -I../lib/sdk -I../../../esp32/src/main -mz80 --sdcccall 1 --std-sdcc11 --opt-code-speed --no-std-crt0 obj/crt0.rel --code-loc 0x8003 --data-loc 0xA800 src/main.c vgm_wc_api.lib -o obj/out.hex
|
sdcc -Isrc -I../lib/sdk -I../../../esp32/src/main -mz80 --sdcccall 1 --std-sdcc11 --opt-code-speed --no-std-crt0 obj/crt0.rel --code-loc 0x8003 --data-loc 0xA800 src/main.c wc_api.lib -o obj/out.hex
|
||||||
if errorlevel 1 pause & exit
|
if errorlevel 1 pause & exit
|
||||||
if exist obj/out.hex hex2bin obj/out.hex >nul
|
if exist obj/out.hex hex2bin obj/out.hex >nul
|
||||||
|
|
||||||
|
|||||||
+658
-488
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
+126
-117
@@ -7,121 +7,130 @@
|
|||||||
:2080C300B72807DB571213C3C1803E03D377E133E9474D3E13D3773E01D35778D357DB5768
|
:2080C300B72807DB571213C3C1803E03D377E133E9474D3E13D3773E01D35778D357DB5768
|
||||||
:2080E30079D3573E03D377C94F3E13D3773E01D35779D357DB57FD210200FD39FD7E00D3BA
|
:2080E30079D3573E03D377C94F3E13D3773E01D35779D357DB57FD210200FD39FD7E00D3BA
|
||||||
:2081030057FD7E01D357FD7E02D357FD7E03D3573E03D377E1F1F1E93E13D3773E07D357CF
|
:2081030057FD7E01D357FD7E02D357FD7E03D3573E03D377E1F1F1E93E13D3773E07D357CF
|
||||||
:20812300DB573E03D377C97D01AF1AED797C01AF1BED79FD210200FD39FD7E0001AF1CEDD2
|
:20812300DB573E03D377C9DDE5DD210000DD39F5F5DD75FEDD74FF2109607EDD77FC237E5D
|
||||||
:2081430079FD7E01FD4E02FD23CB39CB1F3D01AF26ED79FD7E023D01AF28ED793E13D377C0
|
:20814300DD77FD2A09607DDD96FC4F7CDD9EFD4779DD96FE78DD9EFF300E3E01CD2180FEFD
|
||||||
:208163003E03D357DB57DB573E8201AF27ED793E27DBAF0738F93E03D377CD1B8121640090
|
:208163000228E03E01C36C81AFDDF9DDE1C97D01AF1AED797C01AF1BED79FD210200FD3947
|
||||||
:20818300CDE881E1F1F133E93E13D3773E08D357DB573E03D377C9DDE5DD210000DD39213F
|
:20818300FD7E0001AF1CED79FD7E01FD4E02FD23CB39CB1F3D01AF26ED79FD7E023D01AF75
|
||||||
:2081A300FBFF39F9DD77FFDD73FDDD72FE2109607EDD77FB237EDD77FC2A09607DDD96FBDD
|
:2081A30028ED793E13D3773E03D357DB57DB573E8201AF27ED793E27DBAF0738F93E03D38C
|
||||||
:2081C3004F7CDD9EFC4779DD96FD78DD9EFE300F3E01CD2180DD96FF20DF3E01C3E381AFC7
|
:2081C30077CD1B81216400CD2A81E1F1F133E93E13D3773E08D357DB573E03D377C9DDE58D
|
||||||
:2081E300DDF9DDE1C9DDE5DD210000DD39F5F5DD75FEDD74FF2109607EDD77FC237EDD7772
|
:2081E300DD210000DD3921FBFF39F9DD77FFDD73FDDD72FE2109607EDD77FB237EDD77FCE6
|
||||||
:20820300FD2A09607DDD96FC4F7CDD9EFD4779DD96FE78DD9EFF300E3E01CD2180FE022866
|
:208203002A09607DDD96FB4F7CDD9EFC4779DD96FD78DD9EFE300F3E01CD2180DD96FF20FC
|
||||||
:20822300E03E01C32A82AFDDF9DDE1C9E5D53E03CDEB80FD210200FD39FD6E003E02CDD4CC
|
:20822300DF3E01C32A82AFDDF9DDE1C9EBED4B0960C5D53E01CD2180D1C1FE02280D2A09D5
|
||||||
:20824300803EE0CD0880216400CDE8813E0BCD21805F1600E133E9AFCD0880CD8B81CD1B7F
|
:2082430060BFED42AFED5238E8AFC92A0960BFED42AFED523010C5D53E01CD2180D1C1FEC1
|
||||||
:20826300813E01C98100190A280C7000000000008B82A582A5820100160A24054F00000036
|
:208263000228E83E01C9AFC9E5D53E03CDEB80FD210200FD39FD6E003E02CDD4803EE0CD29
|
||||||
:208283000000A682A582AF820E20584D2F584D5A2F53334D20506C617965722076302E31A6
|
:208283000880216400CD2F823E0BCD21805F1600E133E9AFCD0880CDD281CD1B813E01C992
|
||||||
:2082A3002000000E2041626F757420000E0C01584D20506C617965722076302E3100DDE51E
|
:2082A3008100190A280C700000000000C782E182E1820100160A2407700000000000E28244
|
||||||
:2082C300DD210000DD3921ECFF39F93EA2CD0880216400CDE8813EE4CD0880216400CDE8A8
|
:2082C300E182EB820E20584D2F584D5A2F53334D20506C617965722076302E312000000EE8
|
||||||
:2082E300813A06B83D280A3A06B8D6022808C3FE823E08C300833E0CC300833E05F533EDDC
|
:2082E3002041626F757420000D0E584D20506C617965722076302E310D0E627920416C65A6
|
||||||
:208303005B02B82A04B8CD2F822130B8733E01CD21803208B83A08B83D2804AFC3E8842164
|
:2083030078204B6F726F6368696E736B697900DDE5DD210000DD3921ECFF39F93EA2CD08FC
|
||||||
:208323000C0039EB2102B8010400EDB0AFDD77FCDD77FDDD77FEDD77FFDD7EFBDDB6FADDD8
|
:2083230080216400CD2F823EE4CD0880216400CD2F823A06B83D280A3A06B8D6022808C313
|
||||||
:20834300B6F9DDB6F8CA5184DD7EF9D610DD7EFADE00DD7EFBDE00301121000039EB210CED
|
:208343004F833E08C351833E0CC351833E05F533ED5B02B82A04B8CD6B822130B8733E01C2
|
||||||
:208363000039010400EDB0C37C83DD36EC00DD36ED10AFDD77EEDD77EF21050039EB2100AF
|
:20836300CD21803208B83A08B83D2804AFC33985210C0039EB2102B8010400EDB0AFDD7736
|
||||||
:208383000039010400EDB0DD7EF1C6FFDD7EF2CE01473E00CE005F3E00CE005748435ACB0D
|
:20838300FCDD77FDDD77FEDD77FFDD7EFBDDB6FADDB6F9DDB6F8CAA284DD7EF9D610DD7E69
|
||||||
:2083A3003BCB18CB19DD71F779F5332100A8CD0E8D210000E5DD6EF1DD66F2E53E03CDEB4C
|
:2083A300FADE00DD7EFBDE00301121000039EB210C0039010400EDB0C3CD83DD36EC00DD31
|
||||||
:2083C30080DD6EFEDD66FFE5DD6EFCDD66FDE53E07CDEB803EE1CD08801164003E03CD9A30
|
:2083C30036ED10AFDD77EEDD77EF21050039EB21000039010400EDB0DD7EF1C6FFDD7EF28F
|
||||||
:2083E30081DD7EF7DD77F5DD36F6003A0260DD77F7DD6EF52600E5210002E5DD7EF7F533A1
|
:2083E300CE01473E00CE005F3E00CE005748435ACB3BCB18CB19DD71F779F5332100A8CD68
|
||||||
:208403002100A8CD2A81DD5EF1DD56F2DD6EFCDD66FD19DD75FCDD74FDDD7EFEDD8EF3DDF7
|
:20840300008E210000E5DD6EF1DD66F2E53E03CDEB80DD6EFEDD66FFE5DD6EFCDD66FDE51A
|
||||||
:2084230077FE3003DD34FFDD7EF8DD96F1DD77F8DD7EF9DD9EF2DD77F9DD7EFADD9EF3DDD0
|
:208423003E07CDEB803EE1CD08801164003E03CDE181DD7EF7DD77F5DD36F6003A0260DD46
|
||||||
:2084430077FADD7EFBDD9EF4DD77FBC33C833A06B83D203A3A30B86F3E0BCDD4802E053E17
|
:2084430077F7DD6EF52600E5210002E5DD7EF7F5332100A8CD7181DD5EF1DD56F2DD6EFCBE
|
||||||
:2084630002CDD4802A04B8E52A02B8E53E03CDEB803EF2CD088021FA00CDE8813E01CD21C6
|
:20846300DD66FD19DD75FCDD74FDDD7EFEDD8EF3DD77FE3003DD34FFDD7EF8DD96F1DD77AD
|
||||||
:20848300803208B83A08B83D2804AFC3E8843EA0CD0880219001CDE8813E01CD2180320824
|
:20848300F8DD7EF9DD9EF2DD77F9DD7EFADD9EF3DD77FADD7EFBDD9EF4DD77FBC38D833AA1
|
||||||
:2084A300B83A08B83D2804AFC3E8843A30B86F3E0BCDD4802E013E3ACDD4803EA6CD0880C4
|
:2084A30006B83D203A3A30B86F3E0BCDD4802E053E02CDD4802A04B8E52A02B8E53E03CD33
|
||||||
:2084C300216400CDE8813EA1CD0880216400CDE8813E01CD21803208B83A08B83D2804AF3E
|
:2084C300EB803EF2CD088021FA00CD2F823E01CD21803208B83A08B83D2804AFC339853EA0
|
||||||
:2084E300C3E8843E01DDF9DDE1C976CD108EB728F9C94F790DB7C876C3F684217982CD65D7
|
:2084E300A0CD088021F401CD2F823E01CD21803208B83A08B83D2804AFC339853A30B86F2D
|
||||||
:208503008DCDED84217982CDF78DAFC303803BFD210000FD39FD77003EA2CD08802164006E
|
:208503003E0BCDD4802E013E3ACDD4803EA6CD0880216400CD2F823EA1CD0880216400CD64
|
||||||
:20852300CDE8813EE4CD0880216400CDE881216782CDF78D210000397E33C3038033C92107
|
:208523002F823E01CD21803208B83A08B83D2804AFC339853E01DDF9DDE1C976CD208FB710
|
||||||
:208543006782CDF78DAFC3038076CD818DB728053E02CD1185CD1A8EB728053E04CD118513
|
:2085430028F9C94F790DB7C876C347853A0E60D62438033E5AC93E50C9DDE5DD210000DDA3
|
||||||
:20856300CD108EB728E3AFCD1185C34C853A8EB8F533218885CD1987CDED84216782CDF7D6
|
:2085630039F5DD77FFDD75FE7DDD96FF301BDD7EFFDD5EFE934F9F475950CB7828035950D2
|
||||||
:208583008DAFC303804E6F20455350333220666F756E64003E01CD728DFE023E01C8AFC966
|
:20858300137BCB2ACB1FC38D85AFDDF9DDE1C91144B821B582011200EDB02148B86EE5CD34
|
||||||
:2085A3003A08B8F53321C785CD1987CD9785B72803CD4C853E32CDF584216782CDF78D3E04
|
:2085A3004F85E1CD5C853246B82149B86E3A0E60CD5C853247B82144B8CD578ECD3E85218E
|
||||||
:2085C30002C3038046696C6520746F6F206C61726765003A08B8F53321FA85CD1987CD97A0
|
:2085C30044B8CD078FAFC303803BFD210000FD39FD77003EA2CD0880216400CD2F823EE4E7
|
||||||
:2085E30085B72803CD4C853E32CDF584216782CDF78D3E02C30380506C61796261636B2095
|
:2085E300CD0880216400CD2F822132B8CD078F210000397E33C3038033C92132B8CD078FF7
|
||||||
:208603006572726F7200ED4B09B81E006B260009563E0B836F3EB8CE00677AB7280A7BD60C
|
:20860300AFC3038076CD878EB72006CD648EB728053E02CDCC85CD2A8FB728053E04CDCCE7
|
||||||
:20862300203005721CC30F863600C9210500E5210201E5117A86216782CD2F8D210BB8CD94
|
:2086230085CD208FB728DDAFCDCC85C307863AB2B8F533214986CDDA87CD3E852132B8CD0B
|
||||||
:20864300048E3E71F533D5210207E5110BB8216782CDB08D210700E5210301E51180862193
|
:20864300078FAFC303804E6F20455350333220666F756E64003E01CD6E8EFE023E01C8AF68
|
||||||
:208663006782CD2F8D212400E5210A02E5118886216782CD2F8DC946696C653A00537461EC
|
:20866300C93A08B8F533218886CDDA87CD5886B72803CD07863E32CD46852132B8CD078F52
|
||||||
:208683007475733A00506755702F5067446E3A547261636B204573633A53746F7020537000
|
:208683003E02C3038046696C6520746F6F206C61726765003A08B8F53321BB86CDDA87CDB5
|
||||||
:2086A3006163653A4C6561766500DDE5DD210000DD39F51E007B854F3E008C470A4FB728E6
|
:2086A3005886B72803CD07863E32CD46852132B8CD078F3E02C30380506C61796261636B7A
|
||||||
:2086C3001F7BD618301A3E3283DD77FE3EB8CE00DD77FFE5DD6EFEDD66FF71E11CC3B8868A
|
:2086C300206572726F7200ED4B09B81E006B260009563E0B836F3EB8CE00677AB7280A7B02
|
||||||
:2086E3007BD618300C2132B81600191C3620C3E386216782DD7E04F533111800D51103094E
|
:2086E300D6203005721CC3D0863600C9210500E5210201E5113B872132B8CD218E210BB854
|
||||||
:20870300D51132B8CDB08DDDF9DDE1E133E93E71F533CDAD86C9DDE5DD210000DD393BEB4F
|
:20870300CD148F3E71F533D5210207E5110BB82132B8CDB68E210700E5210301E51141874B
|
||||||
:208723000E0069260019463E4A816F3EB8CE0067793CDD77FF78B7280C79D611300770DD48
|
:208723002132B8CD218E212400E5210A02E51149872132B8CD218EC946696C653A005374C1
|
||||||
:208743004EFFC32587DD4EFF3620690C2600114AB8193628690C2600114AB8193630690C13
|
:20874300617475733A00506755702F5067446E3A547261636B204573633A53746F7020534E
|
||||||
:208763002600114AB8193678690C2600114AB819DD7E0407070707E60FC6C05F3E00CE8747
|
:20876300706163653A4C6561766500DDE5DD210000DD39F51E007B854F3E008C470A4FB7DD
|
||||||
:20878300571A77690C2600114AB819DD7E04E60FC6C05F3E00CE87571A77690C2600114A7D
|
:20878300281F7BD618301A3E5683DD77FE3EB8CE00DD77FFE5DD6EFEDD66FF71E11CC37942
|
||||||
:2087A300B8193629692600114AB81936003E72F533214AB8CDAD8633DDE1E133E930313219
|
:2087A300877BD618300C2156B81600191C3620C3A4872132B8DD7E04F533111800D5110328
|
||||||
:2087C3003334353637383941424344454600DDE5DD210000DD39EB01FD87DD7E04070707CD
|
:2087C30009D51156B8CDB68EDDF9DDE1E133E93E71F533CD6E87C9DDE5DD210000DD393B84
|
||||||
:2087E30007E60F6F2600097E1213DD7E04E60F6F2600097E12DDE1E133E9303132333435CD
|
:2087E300EB0E0069260019463E6E816F3EB8CE0067793CDD77FF78B7280C79D61130077056
|
||||||
:208803003637383941424344454600DDE5DD210000DD39F54D44E1D5C5116400DD6EFEDD70
|
:20880300DD4EFFC3E687DD4EFF3620690C2600116EB8193628690C2600116EB81936306978
|
||||||
:2088230066FFCDD58CEB110A00CD2A8DC17BC63002696023E5C5110A00DD6EFEDD66FFCDDB
|
:208823000C2600116EB8193678690C2600116EB819DD7E0407070707E60FC6815F3E00CEF8
|
||||||
:20884300D58CEB110A00CD2A8DC1E17BC630770303C5110A00DD6EFEDD66FFCD2A8DC17B6F
|
:2088430088571A77690C2600116EB819DD7E04E60FC6815F3E00CE88571A77690C26001198
|
||||||
:20886300C63002DDF9DDE1C9DDE5DD210000DD39E5210000E52E3CE5DD5E04DD5605DD6ECE
|
:208863006EB8193629692600116EB81936003E72F533216EB8CD6E8733DDE1E133E9303112
|
||||||
:2088830006DD6607CD16B9F1F1010000C50E64C5CD8FB8F1F14BC5210000E52E3CE5DD5E74
|
:20888300323334353637383941424344454600DDE5DD210000DD39EB01BE88DD7E0407071F
|
||||||
:2088A30004DD5605DD6E06DD6607CD8FB8F1F1C151D52E0A7ACDD08C7B2E0ACD238D7BD1AA
|
:2088A3000707E60F6F2600097E1213DD7E04E60F6F2600097E12DDE1E133E930313233343A
|
||||||
:2088C300C630E1E577C1C503C5D52E0A7ACD238D7BD1C1C63002E1E52323363AC1C5030303
|
:2088C300353637383941424344454600DDE5DD210000DD39F54D44E1D5C5116400DD6EFE58
|
||||||
:2088E30003C5D52E0A7BCDD08C7B2E0ACD238D7BD1C1C63002DD7EFEC6044FDD7EFFCE002D
|
:2088E300DD66FFCDC78DEB110A00CD1C8EC17BC63002696023E5C5110A00DD6EFEDD66FF25
|
||||||
:2089030047C52E0A7BCD238D7BC1C63002DDF9DDE1E1F1F1E9210900E5210401E511B78939
|
:20890300CDC78DEB110A00CD1C8EC1E17BC630770303C5110A00DD6EFEDD66FFCD1C8EC183
|
||||||
:20892300216782CD2F8D210700E521040CE511C189216782CD2F8D210600E5210415E51154
|
:208923007BC63002DDF9DDE1C9DDE5DD210000DD39E5210000E52E3CE5DD5E04DD5605DD00
|
||||||
:20894300C989216782CD2F8D210500E5210601E511D089216782CD2F8D210300E521060CDE
|
:208943006E06DD6607CD3AB9F1F1010000C50E64C5CDB3B8F1F14BC5210000E52E3CE5DD5B
|
||||||
:20896300E511D689216782CD2F8D116CB80E006926001936200C79D62038F4212000E521DD
|
:208963005E04DD5605DD6E06DD6607CDB3B8F1F1C151D52E0A7ACDC28D7B2E0ACD158E7B52
|
||||||
:208983000804E5216782CD2F8D210804E5216782CD8B8D7AE63F57CBFBED538CB80E002AD7
|
:20898300D1C630E1E577C1C503C5D52E0A7ACD158E7BD1C1C63002E1E52323363AC1C50381
|
||||||
:2089A3008CB85D7CC6C0576926001936070C79D62038ECC95061747465726E3A23002020F2
|
:2089A3000303C5D52E0A7BCDC28D7B2E0ACD158E7BD1C1C63002DD7EFEC6044FDD7EFFCE83
|
||||||
:2089C300526F773A2300202042504D3A0054696D653A00202F2000DDE5DD210000DD394B4D
|
:2089C3000047C52E0A7BCD158E7BC1C63002DDF9DDE1E1F1F1E9210900E5210401E511784E
|
||||||
:2089E30042EBDD7E07DDB606DDB605DDB604283069603E0529CB13CB123D20F8DD4E06DD72
|
:2089E3008A2132B8CD218E210700E521040CE511828A2132B8CD218E210600E5210415E571
|
||||||
:208A03004607C5DD4E04DD4605C5EBCD16B9F1F14B423E20BB3E009A3009012000C3268A71
|
:208A0300118A8A2132B8CD218E210500E5210601E511918A2132B8CD218E210300E52106AC
|
||||||
:208A23000100001100002A8CB87CC6C067197B917A9830053E40C33E8A3E0777136B627DBC
|
:208A23000CE511978A2132B8CD218E1190B80E006926001936200C79D62038F4212000E557
|
||||||
:208A4300D6207CDE0038DFDDE1E1F1F1E9DDE5DD210000DD3921F8FF39F93A30B86F3E0B48
|
:208A4300210804E52132B8CD218E210804E52132B8CD918E7AE63F57CBFBED53B0B80E00FF
|
||||||
:208A6300CDD4803EA8CD0880213200CDE8813E28CD2180DD77FF3A31B8D621201DDD7EFF36
|
:208A63002AB0B85D7CC6C0576926001936070C79D62038ECC95061747465726E3A23002003
|
||||||
:208A8300D62020163EE4CD0880216400CDE881216782CDF78D3E02CD0380DD7EFF3231B815
|
:208A830020526F773A2300202042504D3A0054696D653A00202F2000DDE5DD210000DD39B7
|
||||||
:208AA3003E2BCD2180DD77FA3E2CCD2180DD77FB3E02F53321010039EB3E31CDA8803E2DEA
|
:208AA3004B42EBDD7E07DDB606DDB605DDB604283069603E0529CB13CB123D20F8DD4E0643
|
||||||
:208AC300CD3A80DD73FCDD72FDDD75FEDD74FF3A2FB8FD212CB8FDB602FDB601FDB6002075
|
:208AC300DD4607C5DD4E04DD4605C5EBCD3AB9F1F14B423E20BB3E009A3009012000C3E779
|
||||||
:208AE3000C3E36CD3A80ED532CB8222EB8DD7EFAF5332162B8CDD1873E71F533210200E584
|
:208AE3008A0100001100002AB0B87CC6C067197B917A9830053E40C3FF8A3E0777136B620A
|
||||||
:208B030021040AE51162B8216782CDB08DDD7EFBF5332162B8CDD1873E71F533210200E542
|
:208B03007DD6207CDE0038DFDDE1E1F1F1E9DDE5DD210000DD3921F8FF39F93A30B86F3E15
|
||||||
:208B2300210413E51162B8216782CDB08DD1D52164B8CD0E883E71F533210300E521041B70
|
:208B23000BCDD4803EA8CD0880213200CD2F823E28CD2180DD77FF3A31B8D621201DDD7E21
|
||||||
:208B4300E51164B8216782CDB08D210000E52144ACE5DD5EFCDD56FDDD6EFEDD66FFCD161B
|
:208B4300FFD62020163EE4CD0880216400CD2F822132B8CD078F3E02CD0380DD7EFF3231B2
|
||||||
:208B6300B9F1E3D52167B8CD6B883E71F533210500E5210607E51167B8216782CDB08D2136
|
:208B6300B83E2BCD2180DD77FA3E2CCD2180DD77FB3E02F53321010039EB3E31CDA8803E9E
|
||||||
:208B83000000E52144ACE5ED5B2CB82A2EB8CD16B9F1E3D52167B8CD6B883E71F533210579
|
:208B83002DCD3A80DD73FCDD72FDDD75FEDD74FF3A2FB8FD212CB8FDB602FDB601FDB600A7
|
||||||
:208BA30000E521060FE51167B8216782CDB08D2A2EB8E52A2CB8E5DD5EFCDD56FDDD6EFED6
|
:208BA300200C3E36CD3A80ED532CB8222EB8DD7EFAF5332186B8CD92883E71F533210200A2
|
||||||
:208BC300DD66FFCDDA89DDF9DDE1C93BCD0986216782CD658DCD2E8621878CCD11873A8E81
|
:208BC300E521040AE51186B82132B8CDB68EDD7EFBF5332186B8CD92883E71F53321020070
|
||||||
:208BE300B83C200DCD5A82B73E0120023E02328EB83A8EB83D280733C37085C3858CAF324C
|
:208BE300E5210413E51186B82132B8CDB68ED1D52188B8CDCF883E71F533210300E52104D5
|
||||||
:208C03002CB8322DB8322EB8322FB8CDC182B720123A08B8D699200733C3A385C3858C3377
|
:208C03001BE51188B82132B8CDB68E210000E52144ACE5DD5EFCDD56FDDD6EFEDD66FFCD29
|
||||||
:208C2300C3D685219F8CCD1187CD18892131B83621CD508AFD210000FD39FD36000076FDF2
|
:208C23003AB9F1E3D5218BB8CD2C893E71F533210500E5210607E5118BB82132B8CDB68E4A
|
||||||
:208C4300210000FD39FD3400FD7E00D60A3807FD360000CD508ACD818DB728053E02CD1138
|
:208C4300210000E52144ACE5ED5B2CB82A2EB8CD3AB9F1E3D5218BB8CD2C893E71F5332192
|
||||||
:208C630085CD1A8EB728053E04CD1185CD108EB72804AFCD1185CD048DB728C2CD4285C3B8
|
:208C63000500E521060FE5118BB82132B8CDB68E2A2EB8E52A2CB8E5DD5EFCDD56FDDD6EE2
|
||||||
:208C8300418C33C94C6F6164696E672C20706C6561736520776169742E2E2E00506C61798F
|
:208C8300FEDD66FFCD9B8ADDF9DDE1C9DDE5DD210000DD393BCDCA861132B821A3820112C0
|
||||||
:208CA300696E6700ED7300B83207B8ED4309B8083206B82202B8ED5304B83A07B8B7CACE61
|
:208CA30000EDB02136B86EE5CD4F85E1CD5C853234B82137B86E3A0E60CD5C853235B8CDA4
|
||||||
:0D8CC3008B3A07B8D603CAFE84AFC3038006
|
:208CC3007D8ECDFD8E2132B8CD578ECDEF8621798DCDD2873AB2B83C200DCD9682B73E01FA
|
||||||
:01B99900FFAE
|
:208CE30020023E0232B2B83AB2B83D2806CD3186C3758DAF322CB8322DB8322EB8322FB80E
|
||||||
:03800000C3A78C87
|
:208D0300CD1283B720133A08B8D6992006CD6486C3758DCD9786C3758D21918DCDD287CD18
|
||||||
:208CD0005D6F2600547BE680B220110610ED6A17933001833FED6A10F65FEBC906097D6C08
|
:208D2300D9892131B83621CD118BDD36FF0076DD34FFDD7EFFD60A3807DD36FF00CD118B78
|
||||||
:208CF0002600CB1DED6AED523001193F1710F5CB10505FC9DDE53E10CD0660DDE1C9DDE53C
|
:208D4300CD878EB72006CD648EB728053E02CDCC85CD2A8FB728053E04CDCC85CD208FB753
|
||||||
:208D1000DD210000DD39DD46043E30CD0660DDE1E133E95D6FCDD28CEBC9CDD58CEBC9DD42
|
:208D63002804AFCDCC85CDF68DB728C2CDFD85C3318D33DDE1C94C6F6164696E672C207002
|
||||||
:208D3000E5E5D5DD210000DD39DD460BDD4E0ADD5608DD5E09DD6E00DD6601D9DD6E02DDFC
|
:208D83006C6561736520776169742E2E2E00506C6179696E6700ED7300B83207B8ED430951
|
||||||
:208D50006603E5DDE1D93E03CD0660D1E1DDE1E133333333E9DDE5E5DDE13E01CD0660DDF0
|
:1F8DA300B8083206B82202B8ED5304B83A07B8B7CA8F8C3A07B8D603CA9285AFC30380EC
|
||||||
:118D7000E1C908DDE53E53CD066020023EFFDDE1C9D4
|
:01B9BD00FF8A
|
||||||
:20B88F00DDE5DD210000DD39010000DD7E07073838DDCB0426DDCB0516DDCB0616DDCB07E1
|
:03800000C3998D94
|
||||||
:20B8AF00167BDD96047ADD9E057DDD9E067CDD9E073012DDCB073EDDCB061EDDCB051EDDD8
|
:208DC2005D6F2600547BE680B220110610ED6A17933001833FED6A10F65FEBC906097D6C15
|
||||||
:20B8CF00CB041E1804044818C27BDD96047ADD9E057DDD9E067CDD9E0738147BDD96045FA5
|
:208DE2002600CB1DED6AED523001193F1710F5CB10505FC9DDE53E10CD0660DDE1C9DDE549
|
||||||
:20B8EF007ADD9E05577DDD9E066F7CDD9E0767DDCB073EDDCB061EDDCB051EDDCB041E794F
|
:208E0200DD210000DD39DD46043E30CD0660DDE1E133E95D6FCDC48DEBC9CDC78DEBC9DD69
|
||||||
:20B90F000DB720C5DDE1C9DDE5DD210000DD39F5F5AFDD77FCDD77FDDD77FEDD77FF06200D
|
:208E2200E5E5D5DD210000DD39DD460BDD4E0ADD5608DD5E09DD6E00DD6601D9DD6E02DD09
|
||||||
:20B92F007C07E6014FCB23CB12ED6ADDCBFC26DDCBFD16DDCBFE16DDCBFF16CB412804DD0A
|
:208E42006603E5DDE1D93E03CD0660D1E1DDE1E133333333E9DDE5E5DDE13E01CD0660DDFD
|
||||||
:20B94F00CBFCC6DD7EFCDD9604DD7EFDDD9E05DD7EFEDD9E06DD7EFFDD9E073826DD7EFC3A
|
:1B8E6200E1C9DDE53E16CD0660DDE1C908DDE53E53CD066020023EFFDDE1C907
|
||||||
:20B96F00DD9604DD77FCDD7EFDDD9E05DD77FDDD7EFEDD9E06DD77FEDD7EFFDD9E07DD776C
|
:20B8B300DDE5DD210000DD39010000DD7E07073838DDCB0426DDCB0516DDCB0616DDCB07BD
|
||||||
:0AB98F00FFCBC3109BDDF9DDE1C919
|
:20B8D300167BDD96047ADD9E057DDD9E067CDD9E073012DDCB073EDDCB061EDDCB051EDDB4
|
||||||
:208D8100DDE53E1ACD0660DDE1C9DDE5E5DD210000DD39DD5606DD5E07DD6E00DD6601E554
|
:20B8F300CB041E1804044818C27BDD96047ADD9E057DDD9E067CDD9E0738147BDD96045F81
|
||||||
:208DA100DDE13E05CD0660EBE1DDE1E13333E9DDE5E5D5DD210000DD39DD460BDD4E0ADDF4
|
:20B913007ADD9E05577DDD9E066F7CDD9E0767DDCB073EDDCB061EDDCB051EDDCB041E792A
|
||||||
:208DC1005608DD5E09DD6E00DD6601D9DD6E02DD6603DD7E0CF5E5DDE1D93E03CD0660F1B8
|
:07B933000DB720C5DDE1C9DD
|
||||||
:208DE10008D9E5DDE1D93E04CD0660D1E1DDE1E13333333333E9DDE5E5DDE13E02CD06608F
|
:0A8E7D00DDE53E0FCD0660DDE1C922
|
||||||
:208E0100DDE1C9AF474FEDB121FFFFED42EBC9DDE53E17CD0660DDE1C9DDE53E19CD0660C8
|
:20B93A00DDE5DD210000DD39F5F5AFDD77FCDD77FDDD77FEDD77FF06207C07E6014FCB236B
|
||||||
:038E2100DDE1C9C7
|
:20B95A00CB12ED6ADDCBFC26DDCBFD16DDCBFE16DDCBFF16CB412804DDCBFCC6DD7EFCDDC5
|
||||||
|
:20B97A009604DD7EFDDD9E05DD7EFEDD9E06DD7EFFDD9E073826DD7EFCDD9604DD77FCDD2C
|
||||||
|
:20B99A007EFDDD9E05DD77FDDD7EFEDD9E06DD77FEDD7EFFDD9E07DD77FFCBC3109BDDF9D7
|
||||||
|
:03B9BA00DDE1C903
|
||||||
|
:208E8700DDE53E1ACD0660DDE1C9DDE5E5DD210000DD39DD5606DD5E07DD6E00DD6601E54D
|
||||||
|
:208EA700DDE13E05CD0660EBE1DDE1E13333E9DDE5E5D5DD210000DD39DD460BDD4E0ADDED
|
||||||
|
:208EC7005608DD5E09DD6E00DD6601D9DD6E02DD6603DD7E0CF5E5DDE1D93E03CD0660F1B1
|
||||||
|
:208EE70008D9E5DDE1D93E04CD0660D1E1DDE1E13333333333E9DDE53E2ECD0660DDE1C978
|
||||||
|
:208F0700DDE5E5DDE13E02CD0660DDE1C9AF474FEDB121FFFFED42EBC9DDE53E17CD0660BC
|
||||||
|
:0D8F2700DDE1C9DDE53E19CD0660DDE1C9E3
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
-b _CODE = 0x8003
|
-b _CODE = 0x8003
|
||||||
-b _DATA = 0xa800
|
-b _DATA = 0xa800
|
||||||
-k E:\SDCC\4.6.0\bin\..\lib\z80
|
-k E:\SDCC\4.6.0\bin\..\lib\z80
|
||||||
-l vgm_wc_api.lib
|
-l wc_api.lib
|
||||||
-l z80
|
-l z80
|
||||||
obj/out.rel
|
obj/out.rel
|
||||||
obj/crt0.rel
|
obj/crt0.rel
|
||||||
|
|||||||
+2490
-2318
File diff suppressed because it is too large
Load Diff
+93
-81
@@ -24,25 +24,25 @@ Area Addr Size Decimal Bytes (A
|
|||||||
00000001 l__INITIALIZER
|
00000001 l__INITIALIZER
|
||||||
00000003 l__HEADER0
|
00000003 l__HEADER0
|
||||||
0000010A l__HOME
|
0000010A l__HOME
|
||||||
00000E21 l__CODE
|
00000F31 l__CODE
|
||||||
0000108E l__DATA
|
000010B2 l__DATA
|
||||||
00008003 s__CODE
|
00008003 s__CODE
|
||||||
0000A800 s__DATA
|
0000A800 s__DATA
|
||||||
0000B88E s__INITIALIZED
|
0000B8B2 s__INITIALIZED
|
||||||
0000B88F s__HOME
|
0000B8B3 s__HOME
|
||||||
0000B999 s__GSFINAL
|
0000B9BD s__GSFINAL
|
||||||
0000B999 s__GSINIT
|
0000B9BD s__GSINIT
|
||||||
0000B999 s__INITIALIZER
|
0000B9BD s__INITIALIZER
|
||||||
0000B99A s__BSEG
|
0000B9BE s__BSEG
|
||||||
0000B99A s__BSS
|
0000B9BE s__BSS
|
||||||
0000B99A s__HEAP
|
0000B9BE s__HEAP
|
||||||
|
|
||||||
ASxxxx Linker V05.50.4-SDLD, page 2.
|
ASxxxx Linker V05.50.4-SDLD, page 2.
|
||||||
Hexadecimal [32-Bits]
|
Hexadecimal [32-Bits]
|
||||||
|
|
||||||
Area Addr Size Decimal Bytes (Attributes)
|
Area Addr Size Decimal Bytes (Attributes)
|
||||||
-------------------------------- ---- ---- ------- ----- ------------
|
-------------------------------- ---- ---- ------- ----- ------------
|
||||||
_CODE 00008003 00000E21 = 3617. bytes (REL,CON)
|
_CODE 00008003 00000F31 = 3889. bytes (REL,CON)
|
||||||
|
|
||||||
Value Global Global Defined In Module
|
Value Global Global Defined In Module
|
||||||
----- -------------------------------- ------------------------
|
----- -------------------------------- ------------------------
|
||||||
@@ -54,72 +54,78 @@ _CODE 00008003 00000E21 = 3617. bytes (R
|
|||||||
000080D4 _esp_wr_reg8 main
|
000080D4 _esp_wr_reg8 main
|
||||||
000080EB _esp_wr_reg32 main
|
000080EB _esp_wr_reg32 main
|
||||||
0000811B _esp_wr_end main
|
0000811B _esp_wr_end main
|
||||||
0000812A _esp_send_dma main
|
0000812A _esp_wait_not_busy main
|
||||||
0000818B _esp_rd_end main
|
00008171 _esp_send_dma main
|
||||||
0000819A _esp_wait_status main
|
000081D2 _esp_rd_end main
|
||||||
000081E8 _esp_wait_busy main
|
000081E1 _esp_wait_status main
|
||||||
0000822F _esp_create_obj main
|
0000822F _esp_wait_busy main
|
||||||
0000825A _esp_init main
|
0000826B _esp_create_obj main
|
||||||
00008267 _win_xm main
|
00008296 _esp_init main
|
||||||
00008279 _win_about main
|
000082A3 _win_xm_tpl main
|
||||||
000082C1 _play_xm main
|
000082B5 _win_about_tpl main
|
||||||
000084ED _wait_esc_key main
|
00008312 _play_xm main
|
||||||
000084F5 _wait_frames main
|
0000853E _wait_esc_key main
|
||||||
000084FE _about main
|
00008546 _wait_frames main
|
||||||
00008511 _unload_and_exit main
|
0000854F _wc_screen_width main
|
||||||
00008542 _leave_playing_and_exit main
|
0000855C _wc_center main
|
||||||
0000854C _wait_for_manual_exit main
|
00008592 _about main
|
||||||
00008570 _error_esp main
|
000085CC _unload_and_exit main
|
||||||
00008597 _stop_on_error main
|
000085FD _leave_playing_and_exit main
|
||||||
000085A3 _error_oom main
|
00008607 _wait_for_manual_exit main
|
||||||
000085D6 _error_playback main
|
00008631 _error_esp main
|
||||||
00008609 _copy_file_name main
|
00008658 _stop_on_error main
|
||||||
0000862E _xm_draw_static_labels main
|
00008664 _error_oom main
|
||||||
000086AD _xm_set_status_attr main
|
00008697 _error_playback main
|
||||||
00008711 _xm_set_status main
|
000086CA _copy_file_name main
|
||||||
00008719 _xm_set_status_code main
|
000086EF _xm_draw_static_labels main
|
||||||
000087D1 _put_hex2 main
|
0000876E _xm_set_status_attr main
|
||||||
0000880E _put_dec3 main
|
000087D2 _xm_set_status main
|
||||||
0000886B _put_time main
|
000087DA _xm_set_status_code main
|
||||||
00008918 _xm_draw_stats_labels main
|
00008892 _put_hex2 main
|
||||||
000089DA _draw_progress_bar main
|
000088CF _put_dec3 main
|
||||||
00008A50 _xm_update_info main
|
0000892C _put_time main
|
||||||
00008BCE _main_start main
|
000089D9 _xm_draw_stats_labels main
|
||||||
00008CA7 _main main
|
00008A9B _draw_progress_bar main
|
||||||
00008CD0 __divuchar divunsigned
|
00008B11 _xm_update_info main
|
||||||
00008CD2 __divu8 divunsigned
|
00008C8F _main_start main
|
||||||
00008CD5 __divu16 divunsigned
|
00008D99 _main main
|
||||||
00008CD5 __divuint divunsigned
|
00008DC2 __divuchar divunsigned
|
||||||
00008D04 _wc_key_space wc_key_space
|
00008DC4 __divu8 divunsigned
|
||||||
00008D0E _wc_load512 wc_load512
|
00008DC7 __divu16 divunsigned
|
||||||
00008D23 __moduchar modunsigned
|
00008DC7 __divuint divunsigned
|
||||||
00008D2A __moduint modunsigned
|
00008DF6 _wc_key_space wc_key_space
|
||||||
00008D2F _wc_prsrw wc_prsrw
|
00008E00 _wc_load512 wc_load512
|
||||||
00008D65 _wc_prwow wc_prwow
|
00008E15 __moduchar modunsigned
|
||||||
ASxxxx Linker V05.50.4-SDLD, page 3.
|
ASxxxx Linker V05.50.4-SDLD, page 3.
|
||||||
Hexadecimal [32-Bits]
|
Hexadecimal [32-Bits]
|
||||||
|
|
||||||
Area Addr Size Decimal Bytes (Attributes)
|
Area Addr Size Decimal Bytes (Attributes)
|
||||||
-------------------------------- ---- ---- ------- ----- ------------
|
-------------------------------- ---- ---- ------- ----- ------------
|
||||||
_CODE 00008003 00000E21 = 3617. bytes (REL,CON)
|
_CODE 00008003 00000F31 = 3889. bytes (REL,CON)
|
||||||
|
|
||||||
Value Global Global Defined In Module
|
Value Global Global Defined In Module
|
||||||
----- -------------------------------- ------------------------
|
----- -------------------------------- ------------------------
|
||||||
00008D72 _wc_prm_pl wc_prm_pl
|
00008E1C __moduint modunsigned
|
||||||
00008D81 _wc_key_pgdn wc_key_pgdn
|
00008E21 _wc_prsrw wc_prsrw
|
||||||
00008D8B _wc_gadrw wc_gadrw
|
00008E57 _wc_prwow wc_prwow
|
||||||
00008DB0 _wc_prsrw_attr wc_prsrw_attr
|
00008E64 _wc_key_enter wc_key_enter
|
||||||
00008DF7 _wc_rresb wc_rresb
|
00008E6E _wc_prm_pl wc_prm_pl
|
||||||
00008E04 _strlen strlen
|
00008E7D _wc_gedpl wc_gedpl
|
||||||
00008E10 _wc_key_esc wc_key_esc
|
00008E87 _wc_key_pgdn wc_key_pgdn
|
||||||
00008E1A _wc_key_pgup wc_key_pgup
|
00008E91 _wc_gadrw wc_gadrw
|
||||||
|
00008EB6 _wc_prsrw_attr wc_prsrw_attr
|
||||||
|
00008EFD _wc_key_wait_release wc_key_wait_release
|
||||||
|
00008F07 _wc_rresb wc_rresb
|
||||||
|
00008F14 _strlen strlen
|
||||||
|
00008F20 _wc_key_esc wc_key_esc
|
||||||
|
00008F2A _wc_key_pgup wc_key_pgup
|
||||||
|
|
||||||
ASxxxx Linker V05.50.4-SDLD, page 4.
|
ASxxxx Linker V05.50.4-SDLD, page 4.
|
||||||
Hexadecimal [32-Bits]
|
Hexadecimal [32-Bits]
|
||||||
|
|
||||||
Area Addr Size Decimal Bytes (Attributes)
|
Area Addr Size Decimal Bytes (Attributes)
|
||||||
-------------------------------- ---- ---- ------- ----- ------------
|
-------------------------------- ---- ---- ------- ----- ------------
|
||||||
_DATA 0000A800 0000108E = 4238. bytes (REL,CON)
|
_DATA 0000A800 000010B2 = 4274. bytes (REL,CON)
|
||||||
|
|
||||||
Value Global Global Defined In Module
|
Value Global Global Defined In Module
|
||||||
----- -------------------------------- ------------------------
|
----- -------------------------------- ------------------------
|
||||||
@@ -134,36 +140,39 @@ _DATA 0000A800 0000108E = 4238. bytes (R
|
|||||||
0000B82C _total_samples main
|
0000B82C _total_samples main
|
||||||
0000B830 _xm_handle main
|
0000B830 _xm_handle main
|
||||||
0000B831 _last_track_status main
|
0000B831 _last_track_status main
|
||||||
0000B88C _bar_attr_ofs main
|
0000B832 _win_xm main
|
||||||
|
0000B844 _win_about main
|
||||||
|
0000B8B0 _bar_attr_ofs main
|
||||||
|
|
||||||
ASxxxx Linker V05.50.4-SDLD, page 5.
|
ASxxxx Linker V05.50.4-SDLD, page 5.
|
||||||
Hexadecimal [32-Bits]
|
Hexadecimal [32-Bits]
|
||||||
|
|
||||||
Area Addr Size Decimal Bytes (Attributes)
|
Area Addr Size Decimal Bytes (Attributes)
|
||||||
-------------------------------- ---- ---- ------- ----- ------------
|
-------------------------------- ---- ---- ------- ----- ------------
|
||||||
_INITIALIZED 0000B88E 00000001 = 1. bytes (REL,CON)
|
_INITIALIZED 0000B8B2 00000001 = 1. bytes (REL,CON)
|
||||||
|
|
||||||
Value Global Global Defined In Module
|
Value Global Global Defined In Module
|
||||||
----- -------------------------------- ------------------------
|
----- -------------------------------- ------------------------
|
||||||
0000B88E _state_esp main
|
0000B8B2 _state_esp main
|
||||||
|
|
||||||
ASxxxx Linker V05.50.4-SDLD, page 6.
|
ASxxxx Linker V05.50.4-SDLD, page 6.
|
||||||
Hexadecimal [32-Bits]
|
Hexadecimal [32-Bits]
|
||||||
|
|
||||||
Area Addr Size Decimal Bytes (Attributes)
|
Area Addr Size Decimal Bytes (Attributes)
|
||||||
-------------------------------- ---- ---- ------- ----- ------------
|
-------------------------------- ---- ---- ------- ----- ------------
|
||||||
_HOME 0000B88F 0000010A = 266. bytes (REL,CON)
|
_HOME 0000B8B3 0000010A = 266. bytes (REL,CON)
|
||||||
|
|
||||||
Value Global Global Defined In Module
|
Value Global Global Defined In Module
|
||||||
----- -------------------------------- ------------------------
|
----- -------------------------------- ------------------------
|
||||||
0000B88F __modulong _modulong
|
0000B8B3 __modulong _modulong
|
||||||
0000B916 __divulong _divulong
|
0000B93A __divulong _divulong
|
||||||
|
|
||||||
ASxxxx Linker V05.50.4-SDLD, page 7.
|
ASxxxx Linker V05.50.4-SDLD, page 7.
|
||||||
Hexadecimal [32-Bits]
|
Hexadecimal [32-Bits]
|
||||||
|
|
||||||
Area Addr Size Decimal Bytes (Attributes)
|
Area Addr Size Decimal Bytes (Attributes)
|
||||||
-------------------------------- ---- ---- ------- ----- ------------
|
-------------------------------- ---- ---- ------- ----- ------------
|
||||||
_INITIALIZER 0000B999 00000001 = 1. bytes (REL,CON)
|
_INITIALIZER 0000B9BD 00000001 = 1. bytes (REL,CON)
|
||||||
|
|
||||||
Value Global Global Defined In Module
|
Value Global Global Defined In Module
|
||||||
----- -------------------------------- ------------------------
|
----- -------------------------------- ------------------------
|
||||||
@@ -187,21 +196,24 @@ obj/crt0.rel [ crt0 ]
|
|||||||
Libraries Linked [ object file ]
|
Libraries Linked [ object file ]
|
||||||
|
|
||||||
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ divunsigned.rel ]
|
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ divunsigned.rel ]
|
||||||
vgm_wc_api.lib [ wc_key_space.rel ]
|
wc_api.lib [ wc_key_space.rel ]
|
||||||
vgm_wc_api.lib [ wc_load512.rel ]
|
wc_api.lib [ wc_load512.rel ]
|
||||||
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ modunsigned.rel ]
|
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ modunsigned.rel ]
|
||||||
vgm_wc_api.lib [ wc_prsrw.rel ]
|
wc_api.lib [ wc_prsrw.rel ]
|
||||||
vgm_wc_api.lib [ wc_prwow.rel ]
|
wc_api.lib [ wc_prwow.rel ]
|
||||||
vgm_wc_api.lib [ wc_prm_pl.rel ]
|
wc_api.lib [ wc_key_enter.rel ]
|
||||||
|
wc_api.lib [ wc_prm_pl.rel ]
|
||||||
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ _modulong.rel ]
|
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ _modulong.rel ]
|
||||||
|
wc_api.lib [ wc_gedpl.rel ]
|
||||||
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ _divulong.rel ]
|
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ _divulong.rel ]
|
||||||
vgm_wc_api.lib [ wc_key_pgdn.rel ]
|
wc_api.lib [ wc_key_pgdn.rel ]
|
||||||
vgm_wc_api.lib [ wc_gadrw.rel ]
|
wc_api.lib [ wc_gadrw.rel ]
|
||||||
vgm_wc_api.lib [ wc_prsrw_attr.rel ]
|
wc_api.lib [ wc_prsrw_attr.rel ]
|
||||||
vgm_wc_api.lib [ wc_rresb.rel ]
|
wc_api.lib [ wc_key_wait_release.rel ]
|
||||||
|
wc_api.lib [ wc_rresb.rel ]
|
||||||
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ strlen.rel ]
|
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ strlen.rel ]
|
||||||
vgm_wc_api.lib [ wc_key_esc.rel ]
|
wc_api.lib [ wc_key_esc.rel ]
|
||||||
vgm_wc_api.lib [ wc_key_pgup.rel ]
|
wc_api.lib [ wc_key_pgup.rel ]
|
||||||
|
|
||||||
ASxxxx Linker V05.50.4-SDLD, page 10.
|
ASxxxx Linker V05.50.4-SDLD, page 10.
|
||||||
|
|
||||||
|
|||||||
+72
-64
@@ -15,18 +15,18 @@ DEF l__INITIALIZED 0x1
|
|||||||
DEF l__INITIALIZER 0x1
|
DEF l__INITIALIZER 0x1
|
||||||
DEF l__HEADER0 0x3
|
DEF l__HEADER0 0x3
|
||||||
DEF l__HOME 0x10A
|
DEF l__HOME 0x10A
|
||||||
DEF l__CODE 0xE21
|
DEF l__CODE 0xF31
|
||||||
DEF l__DATA 0x108E
|
DEF l__DATA 0x10B2
|
||||||
DEF s__CODE 0x8003
|
DEF s__CODE 0x8003
|
||||||
DEF s__DATA 0xA800
|
DEF s__DATA 0xA800
|
||||||
DEF s__INITIALIZED 0xB88E
|
DEF s__INITIALIZED 0xB8B2
|
||||||
DEF s__HOME 0xB88F
|
DEF s__HOME 0xB8B3
|
||||||
DEF s__GSFINAL 0xB999
|
DEF s__GSFINAL 0xB9BD
|
||||||
DEF s__GSINIT 0xB999
|
DEF s__GSINIT 0xB9BD
|
||||||
DEF s__INITIALIZER 0xB999
|
DEF s__INITIALIZER 0xB9BD
|
||||||
DEF s__BSEG 0xB99A
|
DEF s__BSEG 0xB9BE
|
||||||
DEF s__BSS 0xB99A
|
DEF s__BSS 0xB9BE
|
||||||
DEF s__HEAP 0xB99A
|
DEF s__HEAP 0xB9BE
|
||||||
DEF _wc_exit 0x8003
|
DEF _wc_exit 0x8003
|
||||||
DEF _esp_cmd 0x8008
|
DEF _esp_cmd 0x8008
|
||||||
DEF _esp_rd_reg8 0x8021
|
DEF _esp_rd_reg8 0x8021
|
||||||
@@ -35,56 +35,62 @@ DEF _esp_rd_regs 0x80A8
|
|||||||
DEF _esp_wr_reg8 0x80D4
|
DEF _esp_wr_reg8 0x80D4
|
||||||
DEF _esp_wr_reg32 0x80EB
|
DEF _esp_wr_reg32 0x80EB
|
||||||
DEF _esp_wr_end 0x811B
|
DEF _esp_wr_end 0x811B
|
||||||
DEF _esp_send_dma 0x812A
|
DEF _esp_wait_not_busy 0x812A
|
||||||
DEF _esp_rd_end 0x818B
|
DEF _esp_send_dma 0x8171
|
||||||
DEF _esp_wait_status 0x819A
|
DEF _esp_rd_end 0x81D2
|
||||||
DEF _esp_wait_busy 0x81E8
|
DEF _esp_wait_status 0x81E1
|
||||||
DEF _esp_create_obj 0x822F
|
DEF _esp_wait_busy 0x822F
|
||||||
DEF _esp_init 0x825A
|
DEF _esp_create_obj 0x826B
|
||||||
DEF _win_xm 0x8267
|
DEF _esp_init 0x8296
|
||||||
DEF _win_about 0x8279
|
DEF _win_xm_tpl 0x82A3
|
||||||
DEF _play_xm 0x82C1
|
DEF _win_about_tpl 0x82B5
|
||||||
DEF _wait_esc_key 0x84ED
|
DEF _play_xm 0x8312
|
||||||
DEF _wait_frames 0x84F5
|
DEF _wait_esc_key 0x853E
|
||||||
DEF _about 0x84FE
|
DEF _wait_frames 0x8546
|
||||||
DEF _unload_and_exit 0x8511
|
DEF _wc_screen_width 0x854F
|
||||||
DEF _leave_playing_and_exit 0x8542
|
DEF _wc_center 0x855C
|
||||||
DEF _wait_for_manual_exit 0x854C
|
DEF _about 0x8592
|
||||||
DEF _error_esp 0x8570
|
DEF _unload_and_exit 0x85CC
|
||||||
DEF _stop_on_error 0x8597
|
DEF _leave_playing_and_exit 0x85FD
|
||||||
DEF _error_oom 0x85A3
|
DEF _wait_for_manual_exit 0x8607
|
||||||
DEF _error_playback 0x85D6
|
DEF _error_esp 0x8631
|
||||||
DEF _copy_file_name 0x8609
|
DEF _stop_on_error 0x8658
|
||||||
DEF _xm_draw_static_labels 0x862E
|
DEF _error_oom 0x8664
|
||||||
DEF _xm_set_status_attr 0x86AD
|
DEF _error_playback 0x8697
|
||||||
DEF _xm_set_status 0x8711
|
DEF _copy_file_name 0x86CA
|
||||||
DEF _xm_set_status_code 0x8719
|
DEF _xm_draw_static_labels 0x86EF
|
||||||
DEF _put_hex2 0x87D1
|
DEF _xm_set_status_attr 0x876E
|
||||||
DEF _put_dec3 0x880E
|
DEF _xm_set_status 0x87D2
|
||||||
DEF _put_time 0x886B
|
DEF _xm_set_status_code 0x87DA
|
||||||
DEF _xm_draw_stats_labels 0x8918
|
DEF _put_hex2 0x8892
|
||||||
DEF _draw_progress_bar 0x89DA
|
DEF _put_dec3 0x88CF
|
||||||
DEF _xm_update_info 0x8A50
|
DEF _put_time 0x892C
|
||||||
DEF _main_start 0x8BCE
|
DEF _xm_draw_stats_labels 0x89D9
|
||||||
DEF _main 0x8CA7
|
DEF _draw_progress_bar 0x8A9B
|
||||||
DEF __divuchar 0x8CD0
|
DEF _xm_update_info 0x8B11
|
||||||
DEF __divu8 0x8CD2
|
DEF _main_start 0x8C8F
|
||||||
DEF __divu16 0x8CD5
|
DEF _main 0x8D99
|
||||||
DEF __divuint 0x8CD5
|
DEF __divuchar 0x8DC2
|
||||||
DEF _wc_key_space 0x8D04
|
DEF __divu8 0x8DC4
|
||||||
DEF _wc_load512 0x8D0E
|
DEF __divu16 0x8DC7
|
||||||
DEF __moduchar 0x8D23
|
DEF __divuint 0x8DC7
|
||||||
DEF __moduint 0x8D2A
|
DEF _wc_key_space 0x8DF6
|
||||||
DEF _wc_prsrw 0x8D2F
|
DEF _wc_load512 0x8E00
|
||||||
DEF _wc_prwow 0x8D65
|
DEF __moduchar 0x8E15
|
||||||
DEF _wc_prm_pl 0x8D72
|
DEF __moduint 0x8E1C
|
||||||
DEF _wc_key_pgdn 0x8D81
|
DEF _wc_prsrw 0x8E21
|
||||||
DEF _wc_gadrw 0x8D8B
|
DEF _wc_prwow 0x8E57
|
||||||
DEF _wc_prsrw_attr 0x8DB0
|
DEF _wc_key_enter 0x8E64
|
||||||
DEF _wc_rresb 0x8DF7
|
DEF _wc_prm_pl 0x8E6E
|
||||||
DEF _strlen 0x8E04
|
DEF _wc_gedpl 0x8E7D
|
||||||
DEF _wc_key_esc 0x8E10
|
DEF _wc_key_pgdn 0x8E87
|
||||||
DEF _wc_key_pgup 0x8E1A
|
DEF _wc_gadrw 0x8E91
|
||||||
|
DEF _wc_prsrw_attr 0x8EB6
|
||||||
|
DEF _wc_key_wait_release 0x8EFD
|
||||||
|
DEF _wc_rresb 0x8F07
|
||||||
|
DEF _strlen 0x8F14
|
||||||
|
DEF _wc_key_esc 0x8F20
|
||||||
|
DEF _wc_key_pgup 0x8F2A
|
||||||
DEF _fs_buf 0xA800
|
DEF _fs_buf 0xA800
|
||||||
DEF _ret_sp 0xB800
|
DEF _ret_sp 0xB800
|
||||||
DEF _filesize 0xB802
|
DEF _filesize 0xB802
|
||||||
@@ -96,8 +102,10 @@ DEF _file_name 0xB80B
|
|||||||
DEF _total_samples 0xB82C
|
DEF _total_samples 0xB82C
|
||||||
DEF _xm_handle 0xB830
|
DEF _xm_handle 0xB830
|
||||||
DEF _last_track_status 0xB831
|
DEF _last_track_status 0xB831
|
||||||
DEF _bar_attr_ofs 0xB88C
|
DEF _win_xm 0xB832
|
||||||
DEF _state_esp 0xB88E
|
DEF _win_about 0xB844
|
||||||
DEF __modulong 0xB88F
|
DEF _bar_attr_ofs 0xB8B0
|
||||||
DEF __divulong 0xB916
|
DEF _state_esp 0xB8B2
|
||||||
|
DEF __modulong 0xB8B3
|
||||||
|
DEF __divulong 0xB93A
|
||||||
LOAD obj/out.ihx
|
LOAD obj/out.ihx
|
||||||
|
|||||||
+787
-691
File diff suppressed because it is too large
Load Diff
+68
-60
@@ -63,50 +63,51 @@ Hexadecimal [32-Bits]
|
|||||||
|
|
||||||
Symbol Table
|
Symbol Table
|
||||||
|
|
||||||
0 ___str_12 000009B4 R
|
0 ___str_12 00000A75 R
|
||||||
0 ___str_13 000009BE R
|
0 ___str_13 00000A7F R
|
||||||
0 ___str_14 000009C6 R
|
0 ___str_14 00000A87 R
|
||||||
0 ___str_15 000009CD R
|
0 ___str_15 00000A8E R
|
||||||
0 ___str_16 000009D3 R
|
0 ___str_16 00000A94 R
|
||||||
0 ___str_17 00000C84 R
|
0 ___str_17 00000D76 R
|
||||||
0 ___str_18 00000C9C R
|
0 ___str_18 00000D8E R
|
||||||
0 ___str_4 00000585 R
|
0 ___str_4 00000646 R
|
||||||
0 ___str_5 000005C4 R
|
0 ___str_5 00000685 R
|
||||||
0 ___str_6 000005F7 R
|
0 ___str_6 000006B8 R
|
||||||
0 ___str_7 00000677 R
|
0 ___str_7 00000738 R
|
||||||
0 ___str_8 0000067D R
|
0 ___str_8 0000073E R
|
||||||
0 ___str_9 00000685 R
|
0 ___str_9 00000746 R
|
||||||
__divuchar ******** GX
|
__divuchar ******** GX
|
||||||
__divuint ******** GX
|
__divuint ******** GX
|
||||||
__divulong ******** GX
|
__divulong ******** GX
|
||||||
__moduchar ******** GX
|
__moduchar ******** GX
|
||||||
__moduint ******** GX
|
__moduint ******** GX
|
||||||
__modulong ******** GX
|
__modulong ******** GX
|
||||||
0 __str_0 00000288 R
|
0 __str_0 000002C4 R
|
||||||
0 __str_1 000002A2 R
|
0 __str_1 000002DE R
|
||||||
0 __str_2 000002A3 R
|
0 __str_2 000002DF R
|
||||||
0 __str_3 000002AC R
|
0 __str_3 000002E8 R
|
||||||
7 __xinit__state_esp 00000000 R
|
7 __xinit__state_esp 00000000 R
|
||||||
0 _about 000004FB GR
|
0 _about 0000058F GR
|
||||||
1 _bar_attr_ofs 0000108C GR
|
1 _bar_attr_ofs 000010B0 GR
|
||||||
1 _barbuf 0000106C R
|
1 _barbuf 00001090 R
|
||||||
1 _call_type 00001007 GR
|
1 _call_type 00001007 GR
|
||||||
0 _copy_file_name 00000606 GR
|
0 _copy_file_name 000006C7 GR
|
||||||
1 _decbuf 00001064 R
|
1 _decbuf 00001088 R
|
||||||
0 _draw_progress_bar 000009D7 GR
|
0 _draw_progress_bar 00000A98 GR
|
||||||
0 _error_esp 0000056D GR
|
0 _error_esp 0000062E GR
|
||||||
0 _error_oom 000005A0 GR
|
0 _error_oom 00000661 GR
|
||||||
0 _error_playback 000005D3 GR
|
0 _error_playback 00000694 GR
|
||||||
0 _esp_cmd 00000005 GR
|
0 _esp_cmd 00000005 GR
|
||||||
0 _esp_create_obj 0000022C GR
|
0 _esp_create_obj 00000268 GR
|
||||||
0 _esp_init 00000257 GR
|
0 _esp_init 00000293 GR
|
||||||
0 _esp_rd_end 00000188 GR
|
0 _esp_rd_end 000001CF GR
|
||||||
0 _esp_rd_reg32 00000037 GR
|
0 _esp_rd_reg32 00000037 GR
|
||||||
0 _esp_rd_reg8 0000001E GR
|
0 _esp_rd_reg8 0000001E GR
|
||||||
0 _esp_rd_regs 000000A5 GR
|
0 _esp_rd_regs 000000A5 GR
|
||||||
0 _esp_send_dma 00000127 GR
|
0 _esp_send_dma 0000016E GR
|
||||||
0 _esp_wait_busy 000001E5 GR
|
0 _esp_wait_busy 0000022C GR
|
||||||
0 _esp_wait_status 00000197 GR
|
0 _esp_wait_not_busy 00000127 GR
|
||||||
|
0 _esp_wait_status 000001DE GR
|
||||||
0 _esp_wr_end 00000118 GR
|
0 _esp_wr_end 00000118 GR
|
||||||
0 _esp_wr_reg32 000000E8 GR
|
0 _esp_wr_reg32 000000E8 GR
|
||||||
0 _esp_wr_reg8 000000D1 GR
|
0 _esp_wr_reg8 000000D1 GR
|
||||||
@@ -114,57 +115,64 @@ Symbol Table
|
|||||||
1 _file_name 0000100B GR
|
1 _file_name 0000100B GR
|
||||||
1 _filesize 00001002 GR
|
1 _filesize 00001002 GR
|
||||||
1 _fs_buf 00000000 GR
|
1 _fs_buf 00000000 GR
|
||||||
1 _hexbuf 00001062 R
|
1 _hexbuf 00001086 R
|
||||||
1 _last_esp_status 00001008 GR
|
1 _last_esp_status 00001008 GR
|
||||||
1 _last_track_status 00001031 GR
|
1 _last_track_status 00001031 GR
|
||||||
0 _leave_playing_and_exit 0000053F GR
|
|
||||||
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 3
|
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 3
|
||||||
Hexadecimal [32-Bits]
|
Hexadecimal [32-Bits]
|
||||||
|
|
||||||
Symbol Table
|
Symbol Table
|
||||||
|
|
||||||
0 _main 00000CA4 GR
|
0 _leave_playing_and_exit 000005FA GR
|
||||||
0 _main_start 00000BCB GR
|
0 _main 00000D96 GR
|
||||||
|
0 _main_start 00000C8C GR
|
||||||
1 _p_file_name 00001009 GR
|
1 _p_file_name 00001009 GR
|
||||||
0 _play_xm 000002BE GR
|
0 _play_xm 0000030F GR
|
||||||
0 _put_dec3 0000080B GR
|
0 _put_dec3 000008CC GR
|
||||||
0 _put_hex2 000007CE GR
|
0 _put_hex2 0000088F GR
|
||||||
0 _put_hex2_hexch_10000_132 000007FA R
|
0 _put_hex2_hexch_10000_144 000008BB R
|
||||||
0 _put_time 00000868 GR
|
0 _put_time 00000929 GR
|
||||||
1 _ret_sp 00001000 GR
|
1 _ret_sp 00001000 GR
|
||||||
2 _state_esp 00000000 GR
|
2 _state_esp 00000000 GR
|
||||||
1 _status_buf 00001032 R
|
1 _status_buf 00001056 R
|
||||||
1 _status_code_buf 0000104A R
|
1 _status_code_buf 0000106E R
|
||||||
0 _stop_on_error 00000594 GR
|
0 _stop_on_error 00000655 GR
|
||||||
_strlen ******** GX
|
_strlen ******** GX
|
||||||
1 _timebuf 00001067 R
|
1 _timebuf 0000108B R
|
||||||
1 _total_samples 0000102C GR
|
1 _total_samples 0000102C GR
|
||||||
0 _unload_and_exit 0000050E GR
|
0 _unload_and_exit 000005C9 GR
|
||||||
0 _wait_esc_key 000004EA GR
|
0 _wait_esc_key 0000053B GR
|
||||||
0 _wait_for_manual_exit 00000549 GR
|
0 _wait_for_manual_exit 00000604 GR
|
||||||
0 _wait_frames 000004F2 GR
|
0 _wait_frames 00000543 GR
|
||||||
|
0 _wc_center 00000559 GR
|
||||||
0 _wc_exit 00000000 GR
|
0 _wc_exit 00000000 GR
|
||||||
_wc_gadrw ******** GX
|
_wc_gadrw ******** GX
|
||||||
|
_wc_gedpl ******** GX
|
||||||
|
_wc_key_enter ******** GX
|
||||||
_wc_key_esc ******** GX
|
_wc_key_esc ******** GX
|
||||||
_wc_key_pgdn ******** GX
|
_wc_key_pgdn ******** GX
|
||||||
_wc_key_pgup ******** GX
|
_wc_key_pgup ******** GX
|
||||||
_wc_key_space ******** GX
|
_wc_key_space ******** GX
|
||||||
|
_wc_key_wait_release ******** GX
|
||||||
_wc_load512 ******** GX
|
_wc_load512 ******** GX
|
||||||
_wc_prm_pl ******** GX
|
_wc_prm_pl ******** GX
|
||||||
_wc_prsrw ******** GX
|
_wc_prsrw ******** GX
|
||||||
_wc_prsrw_attr ******** GX
|
_wc_prsrw_attr ******** GX
|
||||||
_wc_prwow ******** GX
|
_wc_prwow ******** GX
|
||||||
_wc_rresb ******** GX
|
_wc_rresb ******** GX
|
||||||
0 _win_about 00000276 GR
|
0 _wc_screen_width 0000054C GR
|
||||||
0 _win_xm 00000264 GR
|
1 _win_about 00001044 GR
|
||||||
0 _xm_draw_static_labels 0000062B GR
|
0 _win_about_tpl 000002B2 GR
|
||||||
0 _xm_draw_stats_labels 00000915 GR
|
1 _win_xm 00001032 GR
|
||||||
|
0 _win_xm_tpl 000002A0 GR
|
||||||
|
0 _xm_draw_static_labels 000006EC GR
|
||||||
|
0 _xm_draw_stats_labels 000009D6 GR
|
||||||
1 _xm_handle 00001030 GR
|
1 _xm_handle 00001030 GR
|
||||||
0 _xm_set_status 0000070E GR
|
0 _xm_set_status 000007CF GR
|
||||||
0 _xm_set_status_attr 000006AA GR
|
0 _xm_set_status_attr 0000076B GR
|
||||||
0 _xm_set_status_code 00000716 GR
|
0 _xm_set_status_code 000007D7 GR
|
||||||
0 _xm_set_status_code_hexch_10000_129 000007BD R
|
0 _xm_set_status_code_hexch_10000_141 0000087E R
|
||||||
0 _xm_update_info 00000A4D GR
|
0 _xm_update_info 00000B0E GR
|
||||||
|
|
||||||
|
|
||||||
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 4
|
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 4
|
||||||
@@ -172,8 +180,8 @@ Hexadecimal [32-Bits]
|
|||||||
|
|
||||||
Area Table
|
Area Table
|
||||||
|
|
||||||
0 _CODE size CCD flags 0
|
0 _CODE size DBF flags 0
|
||||||
1 _DATA size 108E flags 0
|
1 _DATA size 10B2 flags 0
|
||||||
2 _INITIALIZED size 1 flags 0
|
2 _INITIALIZED size 1 flags 0
|
||||||
3 _DABS size 0 flags 8
|
3 _DABS size 0 flags 8
|
||||||
4 _HOME size 0 flags 0
|
4 _HOME size 0 flags 0
|
||||||
|
|||||||
+51
-1
@@ -99,6 +99,31 @@ void esp_wr_end()
|
|||||||
SPI_CTRL = SPI_ESP_CS_OFF;
|
SPI_CTRL = SPI_ESP_CS_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Plain single-phase "not busy" wait - for the one call site (esp_send_dma()
|
||||||
|
// below) where BUSY is genuinely never set for the awaited transition.
|
||||||
|
// Confirmed by reading the firmware (spi_slave.cpp's DREQ_DATA handler,
|
||||||
|
// reached via esp_wr_end() -> the low-level SPI W_END transaction, NOT
|
||||||
|
// esp_cmd()/the command() ISR dispatcher): it does the memcpy and jumps
|
||||||
|
// straight from DATA_M2S to READY, no BUSY in between. esp_wait_busy()'s
|
||||||
|
// two-phase "see BUSY first" logic is correct for actual commands (anything
|
||||||
|
// issued via esp_cmd(), which always sets BUSY before dispatching to
|
||||||
|
// xm_task/helper_task - see esp_wait_busy() below) but hangs here for its
|
||||||
|
// full timeout on every single chunk waiting for a BUSY that never appears -
|
||||||
|
// confirmed on hardware as "plays, but loading takes forever" after
|
||||||
|
// esp_wait_busy() was made two-phase project-wide.
|
||||||
|
u8 esp_wait_not_busy(u16 max_frames)
|
||||||
|
{
|
||||||
|
u16 start = *(u16*)_TMN;
|
||||||
|
|
||||||
|
while ((u16)(*(u16*)_TMN - start) < max_frames)
|
||||||
|
{
|
||||||
|
if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void esp_send_dma(u16 a, u8 p, u16 l, u16 n)
|
void esp_send_dma(u16 a, u8 p, u16 l, u16 n)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -117,7 +142,7 @@ void esp_send_dma(u16 a, u8 p, u16 l, u16 n)
|
|||||||
SPI_CTRL = SPI_ESP_CS_OFF;
|
SPI_CTRL = SPI_ESP_CS_OFF;
|
||||||
|
|
||||||
esp_wr_end();
|
esp_wr_end();
|
||||||
esp_wait_busy(100); // 2s - esp32 consuming one DMA'd chunk should be near-instant
|
esp_wait_not_busy(100); // 2s - esp32 consuming one DMA'd chunk should be near-instant
|
||||||
}
|
}
|
||||||
|
|
||||||
void esp_rd_end()
|
void esp_rd_end()
|
||||||
@@ -149,10 +174,35 @@ u8 esp_wait_status(u8 status, u16 max_frames)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A bare "status != BUSY" poll right after issuing a command can't tell
|
||||||
|
// "already finished" apart from "hasn't started yet": esp_cmd() doesn't
|
||||||
|
// touch ESP_REG_STATUS, so until the esp32's command() ISR gets around to
|
||||||
|
// setting BUSY for THIS command, the register still holds whatever the
|
||||||
|
// PREVIOUS command left there (typically READY) - and that stale READY
|
||||||
|
// satisfies "!= BUSY" just as well as a real completion does. Confirmed on
|
||||||
|
// real hardware via firmware-side timestamps (tbfire.xm, ESP_ERR_INV_XM_HANDLE
|
||||||
|
// on TRACK_PLAY): the esp32 recorded PLAY being rejected 1ms *before*
|
||||||
|
// TRACK_INIT even started processing - proving esp_wait_busy() had already
|
||||||
|
// returned "done" on TRACK_INIT's leftover-READY-from-WRITE_OBJECT, not on
|
||||||
|
// its actual completion. Fixed by requiring a genuine BUSY sighting first,
|
||||||
|
// so a "not busy" seen afterward is guaranteed to be THIS command's own
|
||||||
|
// completion. Every esp_wait_busy() call site in this plugin waits on an
|
||||||
|
// esp32 command that's handled by a background task (xm_task/helper_task),
|
||||||
|
// never resolved synchronously inside the ISR, so BUSY is always genuinely
|
||||||
|
// observable for at least one poll - this doesn't risk a regression on a
|
||||||
|
// command that completes "too fast to see".
|
||||||
u8 esp_wait_busy(u16 max_frames)
|
u8 esp_wait_busy(u16 max_frames)
|
||||||
{
|
{
|
||||||
u16 start = *(u16*)_TMN;
|
u16 start = *(u16*)_TMN;
|
||||||
|
|
||||||
|
// Phase 1: wait for the esp32 to actually start processing this command.
|
||||||
|
while (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY)
|
||||||
|
{
|
||||||
|
if ((u16)(*(u16*)_TMN - start) >= max_frames)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Phase 2: wait for it to finish (status becomes anything other than BUSY).
|
||||||
while ((u16)(*(u16*)_TMN - start) < max_frames)
|
while ((u16)(*(u16*)_TMN - start) < max_frames)
|
||||||
{
|
{
|
||||||
if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY)
|
if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY)
|
||||||
|
|||||||
+91
-12
@@ -65,11 +65,24 @@ enum
|
|||||||
// auto-center) - no wc_prsrw() calls yet, still just static wnd_txt like
|
// auto-center) - no wc_prsrw() calls yet, still just static wnd_txt like
|
||||||
// before. This exact size/position was already confirmed stable on its own
|
// before. This exact size/position was already confirmed stable on its own
|
||||||
// earlier (before wc_prsrw/live-info were layered on top).
|
// earlier (before wc_prsrw/live-info were layered on top).
|
||||||
const WC_TX_WINDOW win_xm =
|
// win_xm_tpl is the compile-time template (const -> lands in CODE, so its
|
||||||
|
// bytes are genuinely baked into the loaded blob - unlike a non-const
|
||||||
|
// initialized global here, which would NOT be: this project's crt0.s never
|
||||||
|
// calls GSINIT, so _INITIALIZED-area bytes are simply absent from out.bin
|
||||||
|
// and read back as hex2bin's 0xFF fill regardless of the initializer given
|
||||||
|
// (confirmed by inspecting obj/out.bin - state_esp's own "give it a real
|
||||||
|
// initializer" fix above only works because 0xFF was picked to coincide
|
||||||
|
// with that fill value, not because the initializer is actually emitted).
|
||||||
|
// win_xm (below) is the mutable, actually-used instance: memcpy'd from this
|
||||||
|
// template at the point of use (see main_start()), then y_pos is patched to
|
||||||
|
// the real HEI-based center (HEI = screen height, 25/30/36 rows, see
|
||||||
|
// wc_api.h - WC's own 255,255 "auto-center" sentinel doesn't work on this
|
||||||
|
// WC build, see win_about's history below).
|
||||||
|
const WC_TX_WINDOW win_xm_tpl =
|
||||||
{
|
{
|
||||||
/* window with header and text + shadow (0x80) */ WC_WIND_HDR_TXT | 0x80,
|
/* window with header and text + shadow (0x80) */ WC_WIND_HDR_TXT | 0x80,
|
||||||
/* cursor color mask */ 0,
|
/* cursor color mask */ 0,
|
||||||
/* X,Y (position) */ 25, 10,
|
/* X,Y (position) */ 25, 10, // both placeholders, overwritten at runtime - see main_start()
|
||||||
/* W,H (size) */ 40, 12,
|
/* W,H (size) */ 40, 12,
|
||||||
/* paper/ink (window color) */ 0x70, // white paper, black ink/border - matches VGMPLAY.WMF's CLR_WIN = WC_COLOR(WC_WHITE, WC_BLACK)
|
/* paper/ink (window color) */ 0x70, // white paper, black ink/border - matches VGMPLAY.WMF's CLR_WIN = WC_COLOR(WC_WHITE, WC_BLACK)
|
||||||
/* -reserved- */ 0,
|
/* -reserved- */ 0,
|
||||||
@@ -80,21 +93,52 @@ const WC_TX_WINDOW win_xm =
|
|||||||
/* window text */ "" // replaced by the dynamic "Status:" line, see xm_set_status()
|
/* window text */ "" // replaced by the dynamic "Status:" line, see xm_set_status()
|
||||||
};
|
};
|
||||||
|
|
||||||
const WC_TX_WINDOW win_about =
|
// The actually-used, mutable instance - populated via memcpy from win_xm_tpl
|
||||||
|
// (see main_start()). Left without an initializer here on purpose: it would
|
||||||
|
// be silently ignored by this project's crt0.s anyway (see comment above),
|
||||||
|
// and an explicit memcpy at point of use is clearer than relying on that.
|
||||||
|
WC_TX_WINDOW win_xm;
|
||||||
|
|
||||||
|
// win_about_tpl/win_about follow the exact same const-template + memcpy'd-
|
||||||
|
// instance split as win_xm_tpl/win_xm above, for the same reason.
|
||||||
|
const WC_TX_WINDOW win_about_tpl =
|
||||||
{
|
{
|
||||||
/* window with header and text */ WC_WIND_HDR_TXT,
|
/* window with header and text */ WC_WIND_HDR_TXT,
|
||||||
/* cursor color mask */ 0,
|
/* cursor color mask */ 0,
|
||||||
/* X,Y (position) */ 22, 10,
|
/* X,Y (position) */ 22, 10, // both placeholders, overwritten at runtime - see about(). Screen
|
||||||
/* W,H (size) */ 36, 5,
|
// width is NOT always 80: WC has three text modes - 90x36, 80x25,
|
||||||
/* paper/ink (window color) */ 0x4F,
|
// 80x30 (user-confirmed) - so width depends on HEI same as height
|
||||||
|
// does. (255,255 "auto-center" made the window not appear at all
|
||||||
|
// on this WC build, see project memory - not retried here.)
|
||||||
|
/* W,H (size) */ 36, 7, // +1 row for the 2nd centered line, +1 more for the blank line
|
||||||
|
// before the player name below
|
||||||
|
/* paper/ink (window color) */ 0x70, // matches win_xm_tpl's own color (white paper, black ink) - was
|
||||||
|
// 0x4F before, per explicit request to make About look the same
|
||||||
/* -reserved- */ 0,
|
/* -reserved- */ 0,
|
||||||
/* window restore buffer address */ 0,
|
/* window restore buffer address */ 0,
|
||||||
/* separators */ 0, 0,
|
/* separators */ 0, 0,
|
||||||
/* header text */ "\x0E" " About ",
|
/* header text */ "\x0E" " About ",
|
||||||
/* footer text */ "",
|
/* footer text */ "",
|
||||||
/* window text */ "\x0E\x0C\x01" "XM Player v0.1"
|
/* window text */ "\x0D" "\x0E" "XM Player v0.1" "\x0D" "\x0E" "by Alex Korochinskiy"
|
||||||
|
// Leading \x0D adds one blank row before the player name (purely cosmetic,
|
||||||
|
// per request) - see win_about_tpl's height above, bumped to make room.
|
||||||
|
// Root cause (read straight from WC's own firmware source - WCIF.ASM's
|
||||||
|
// TXTPR/CNTR/STSCN, not guessed): \x0E centers by scanning FORWARD through
|
||||||
|
// the text to measure the line's length (STSCN). That scan skips right
|
||||||
|
// over \x0C,YY (down-shift) without treating it as a line end - only a
|
||||||
|
// real \x0D or the string's own 0x00 terminate the scan. So with \x0C,01
|
||||||
|
// between the two lines (as this used to be), line 1's scan ran straight
|
||||||
|
// through the shift and hit line 2's OWN \x0E before reaching any real
|
||||||
|
// terminator - STSCN treats hitting a second \x0E mid-scan as a measurement
|
||||||
|
// failure and CNTR silently skips centering for it. Line 2 always worked
|
||||||
|
// because nothing follows it but the string's NUL. Using a real \x0D here
|
||||||
|
// gives line 1's scan a proper stopping point, fixing it - and \x0D moves
|
||||||
|
// to the next row exactly like \x0C,01 did (both land on Y+1 here), so this
|
||||||
|
// doesn't change vertical position at all.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
WC_TX_WINDOW win_about; // mutable instance - see win_xm's comment above
|
||||||
|
|
||||||
void xm_set_status(const char *msg); // defined below, used by error_*() before that point
|
void xm_set_status(const char *msg); // defined below, used by error_*() before that point
|
||||||
void xm_set_status_code(const char *msg, u8 code); // ditto
|
void xm_set_status_code(const char *msg, u8 code); // ditto
|
||||||
|
|
||||||
@@ -168,12 +212,12 @@ bool play_xm()
|
|||||||
}
|
}
|
||||||
|
|
||||||
esp_cmd(ESP_CMD_TRACK_INIT);
|
esp_cmd(ESP_CMD_TRACK_INIT);
|
||||||
// 400 frames = 8s, comfortably past the firmware's 5s song-length
|
// 500 frames = 10s, comfortably past the firmware's 5s song-length
|
||||||
// measurement cap (XM_MEASURE_MAX_US in tracker.cpp) - see esp_wait_busy()
|
// measurement cap (XM_MEASURE_MAX_US in tracker.cpp) - see esp_wait_busy()
|
||||||
// in esp32.c for why this needs to be real-time-based, not an iteration
|
// in esp32.c for why this needs to be real-time-based, not an iteration
|
||||||
// count (an uncalibrated guess here previously caused ESP_ERR_INV_XM_HANDLE
|
// count (an uncalibrated guess here previously caused ESP_ERR_INV_XM_HANDLE
|
||||||
// failures on heavier files that legitimately needed close to the full 5s).
|
// failures on heavier files that legitimately needed close to the full 5s).
|
||||||
esp_wait_busy(400);
|
esp_wait_busy(500);
|
||||||
|
|
||||||
last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
|
last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
|
||||||
if (last_esp_status != ESP_ST_READY)
|
if (last_esp_status != ESP_ST_READY)
|
||||||
@@ -221,8 +265,29 @@ void wait_frames(u8 n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Screen width isn't fixed at 80 either - WC has three text modes: 90x36,
|
||||||
|
// 80x25, 80x30 (user-confirmed), so width tracks HEI the same way height
|
||||||
|
// does (there's no separate documented width system variable to read).
|
||||||
|
// Matches demyanenko-d/VGMPLAY.WMF's own centering code (src_sdcc/main.c,
|
||||||
|
// "scr_w = (scr_h >= 36) ? 90 : 80") - same three modes, same mapping.
|
||||||
|
u8 wc_screen_width()
|
||||||
|
{
|
||||||
|
return (*(u8*)_HEI >= 36) ? 90 : 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clamps to 0 instead of underflowing (u8 wraparound) if the window is ever
|
||||||
|
// bigger than the screen - matches VGMPLAY.WMF's own centering code, same
|
||||||
|
// guard.
|
||||||
|
u8 wc_center(u8 screen_size, u8 win_size)
|
||||||
|
{
|
||||||
|
return (screen_size > win_size) ? (screen_size - win_size) / 2 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
void about()
|
void about()
|
||||||
{
|
{
|
||||||
|
memcpy(&win_about, &win_about_tpl, sizeof(win_about));
|
||||||
|
win_about.x_pos = wc_center(wc_screen_width(), win_about.x_size);
|
||||||
|
win_about.y_pos = wc_center(*(u8*)_HEI, win_about.y_size);
|
||||||
wc_prwow(&win_about);
|
wc_prwow(&win_about);
|
||||||
wait_esc_key();
|
wait_esc_key();
|
||||||
wc_rresb(&win_about);
|
wc_rresb(&win_about);
|
||||||
@@ -262,7 +327,7 @@ void wait_for_manual_exit()
|
|||||||
halt
|
halt
|
||||||
__endasm;
|
__endasm;
|
||||||
|
|
||||||
if (wc_key_pgdn())
|
if (wc_key_pgdn() || wc_key_enter())
|
||||||
unload_and_exit(WC_NEXT_FILE);
|
unload_and_exit(WC_NEXT_FILE);
|
||||||
|
|
||||||
if (wc_key_pgup())
|
if (wc_key_pgup())
|
||||||
@@ -602,8 +667,21 @@ void main_start()
|
|||||||
// deferred until after play_xm() succeeded, because opening a window
|
// deferred until after play_xm() succeeded, because opening a window
|
||||||
// before esp32 activity used to corrupt the transfer - that was tied to
|
// before esp32 activity used to corrupt the transfer - that was tied to
|
||||||
// our old hand-rolled PRSRW/PRIAT wrappers, not to window timing itself,
|
// our old hand-rolled PRSRW/PRIAT wrappers, not to window timing itself,
|
||||||
// and no longer applies now that we're on the real vgm_wc_api library
|
// and no longer applies now that we're on the real wc_api library
|
||||||
// (see project memory).
|
// (see project memory).
|
||||||
|
memcpy(&win_xm, &win_xm_tpl, sizeof(win_xm));
|
||||||
|
win_xm.x_pos = wc_center(wc_screen_width(), win_xm.x_size);
|
||||||
|
win_xm.y_pos = wc_center(*(u8*)_HEI, win_xm.y_size);
|
||||||
|
|
||||||
|
// GEDPL must run before ANY other WC API call - plugins/READ_ME.TXT is
|
||||||
|
// explicit that the screen can be in an arbitrary state on entry ("!при
|
||||||
|
// запуске плагина надо вызывать GEDPL... т.к. при входе в плагин может
|
||||||
|
// быть любой экран!"), so wc_key_wait_release() (see wc_api.c's comment -
|
||||||
|
// debounces the Enter/F3 that launched this plugin, so the main loop's
|
||||||
|
// wc_key_enter() check below doesn't immediately treat it as a fresh
|
||||||
|
// keypress) goes right after it, not before.
|
||||||
|
wc_gedpl();
|
||||||
|
wc_key_wait_release();
|
||||||
wc_prwow(&win_xm);
|
wc_prwow(&win_xm);
|
||||||
xm_draw_static_labels();
|
xm_draw_static_labels();
|
||||||
xm_set_status("Loading, please wait...");
|
xm_set_status("Loading, please wait...");
|
||||||
@@ -636,6 +714,7 @@ void main_start()
|
|||||||
frame_ctr = 0;
|
frame_ctr = 0;
|
||||||
|
|
||||||
// poll keys
|
// poll keys
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
@@ -648,7 +727,7 @@ void main_start()
|
|||||||
xm_update_info();
|
xm_update_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wc_key_pgdn()) // PgDn - unload and go to next file
|
if (wc_key_pgdn() || wc_key_enter()) // PgDn or Enter - unload and go to next file
|
||||||
unload_and_exit(WC_NEXT_FILE);
|
unload_and_exit(WC_NEXT_FILE);
|
||||||
|
|
||||||
if (wc_key_pgup()) // PgUp - unload and go to previous file
|
if (wc_key_pgup()) // PgUp - unload and go to previous file
|
||||||
|
|||||||
+30
-6
@@ -1,22 +1,29 @@
|
|||||||
|
|
||||||
// This project now builds under SDCC 4.6.0 + `--sdcccall 1` (SDCC's
|
// This project now builds under SDCC 4.6.0 + `--sdcccall 1` (SDCC's
|
||||||
// register calling convention) - see build.bat for why this is pinned
|
// register calling convention) - see build.bat for why this is pinned
|
||||||
// PER-PROJECT, independent of the rest of ft812sdk (which stays on 4.0.0).
|
// PER-PROJECT, independent of the rest of ft812sdk (which stays on 4.0.0).
|
||||||
// This lets us link directly against demyanenko-d/VGMPLAY.WMF's real,
|
// This lets us link directly against demyanenko-d/VGMPLAY.WMF's real,
|
||||||
// hardware-tested wc_api library (vgm_wc_api.lib, assembled verbatim from
|
// hardware-tested wc_api library (wc_api.lib, assembled verbatim from
|
||||||
// their src_sdcc/lib/wc_api/*.s with the SAME SDCC 4.6.0's sdasz80) instead
|
// their src_sdcc/lib/wc_api/*.s with the SAME SDCC 4.6.0's sdasz80) instead
|
||||||
// of our own hand-rolled __naked wrappers - our attempts at PRSRW+PRIAT (in
|
// of our own hand-rolled __naked wrappers - our attempts at PRSRW+PRIAT (in
|
||||||
// three different shapes: globals-based single function, two separate
|
// three different shapes: globals-based single function, two separate
|
||||||
// naked functions, and a stack-based hand-port of their EXX logic) all
|
// naked functions, and a stack-based hand-port of their EXX logic) all
|
||||||
// corrupted esp32 file loading in ways never fully root-caused.
|
// corrupted esp32 file loading in ways never fully root-caused.
|
||||||
//
|
//
|
||||||
|
// Keyboard handling went through a raw-PS/2-FIFO rewrite (keys.c, since
|
||||||
|
// reverted) attempting to match how VGMPLAY.WMF's own player reads keys.
|
||||||
|
// That approach caused two confirmed hardware regressions - esp32 file
|
||||||
|
// transfers failing (ESP_ERR_INV_XM, 0x90, right after upload) and, once
|
||||||
|
// wc_int_pl() was worked around, the keyboard not responding at all (WC's
|
||||||
|
// own interrupt-driven PS/2 scan competes with raw FIFO reads for the same
|
||||||
|
// hardware) - so it's back to these simple WC-#6006-API wrappers
|
||||||
|
// (wc_key_esc/pgup/pgdn/space, plus wc_key_enter for PgDn's alternate).
|
||||||
// Their key-check constants (wc_key_esc=0x17, wc_key_pgup=0x19,
|
// Their key-check constants (wc_key_esc=0x17, wc_key_pgup=0x19,
|
||||||
// wc_key_pgdn=0x1A) were confirmed to exactly match our own _ESC/_PGU/_PGD
|
// wc_key_pgdn=0x1A, wc_key_enter=0x16) were confirmed to exactly match our
|
||||||
// constants in wc_api.h before relying on them - same underlying WC #6006
|
// own _ESC/_PGU/_PGD/_ENKE constants in wc_api.h - same underlying WC
|
||||||
// API, just a different project's wrapper names.
|
// #6006 API, just a different project's wrapper names.
|
||||||
//
|
//
|
||||||
// Everything below is just extern declarations for symbols the linker
|
// Everything below is just extern declarations for symbols the linker
|
||||||
// pulls out of vgm_wc_api.lib (added to build.bat) - no bodies here.
|
// pulls out of wc_api.lib (added to build.bat) - no bodies here.
|
||||||
void wc_prwow(void *win);
|
void wc_prwow(void *win);
|
||||||
void wc_rresb(void *win);
|
void wc_rresb(void *win);
|
||||||
u8 wc_load512(u16 dest, u8 blocks);
|
u8 wc_load512(u16 dest, u8 blocks);
|
||||||
@@ -24,6 +31,23 @@ u8 wc_key_esc(void);
|
|||||||
u8 wc_key_pgup(void);
|
u8 wc_key_pgup(void);
|
||||||
u8 wc_key_pgdn(void);
|
u8 wc_key_pgdn(void);
|
||||||
u8 wc_key_space(void);
|
u8 wc_key_space(void);
|
||||||
|
u8 wc_key_enter(void);
|
||||||
|
|
||||||
|
// Waits for all keys to be reported released from WC's own point of view -
|
||||||
|
// called once at the top of main_start(), after wc_gedpl(). Needed because
|
||||||
|
// the plugin is launched BY an Enter keypress (or F3): without this, the
|
||||||
|
// very first wc_key_enter() check in the main loop can still see that same
|
||||||
|
// launch keypress as "down" and immediately treat it as a fresh Enter,
|
||||||
|
// jumping to the next file right after loading with no real keypress -
|
||||||
|
// confirmed on hardware, reproduces the same way whether Enter is read via
|
||||||
|
// this library's wc_key_enter() or via the raw-PS/2 rewrite that preceded
|
||||||
|
// it (see the file header comment) - a real human-timing race (the user
|
||||||
|
// hasn't necessarily released Enter yet by the time the file's done
|
||||||
|
// loading), not a bug tied to either keyboard-reading mechanism
|
||||||
|
// specifically.
|
||||||
|
void wc_key_wait_release(void);
|
||||||
|
|
||||||
|
void wc_gedpl(void);
|
||||||
void wc_prsrw(void *win, const u8 *text, u8 y, u8 x, u16 len);
|
void wc_prsrw(void *win, const u8 *text, u8 y, u8 x, u16 len);
|
||||||
void wc_prsrw_attr(void *win, const u8 *text, u8 y, u8 x, u16 len, u8 attr);
|
void wc_prsrw_attr(void *win, const u8 *text, u8 y, u8 x, u16 len, u8 attr);
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
#define _WCAPI 0x6006 // точка доступа к функциям
|
#define _WCAPI 0x6006 // точка доступа к функциям
|
||||||
#define _TMN 0x6009 // синхра. переменная-таймер, инкрементится по инту
|
#define _TMN 0x6009 // синхра. переменная-таймер, инкрементится по инту
|
||||||
|
|
||||||
|
#define _HEI 0x600E // screen height in text rows: 25, 30 or 36 (see plugins/READ_ME.TXT)
|
||||||
|
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
// API functions
|
// API functions
|
||||||
#define _MNGC_PL 0x00 // включение страницы на 0xC000 (из выделенного блока)
|
#define _MNGC_PL 0x00 // включение страницы на 0xC000 (из выделенного блока)
|
||||||
|
|||||||
Reference in New Issue
Block a user