From 168d6a71bd012675f7f3c4783454f2598dbc3bc8 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 7 Sep 2026 12:40:36 +0300 Subject: [PATCH] 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 --- XMPLAY.WMF | Bin 15360 -> 15360 bytes build.bat | 4 +- obj/out.asm | 1146 ++++---- obj/out.bin | Bin 14848 -> 14848 bytes obj/out.hex | 243 +- obj/out.lk | 2 +- obj/out.lst | 4808 ++++++++++++++++++---------------- obj/out.map | 174 +- obj/out.noi | 136 +- obj/out.rel | 1478 ++++++----- obj/out.sym | 128 +- src/esp32.c | 52 +- src/main.c | 103 +- src/wc_api.c | 36 +- src/wc_api.h | 2 + vgm_wc_api.lib => wc_api.lib | Bin 16 files changed, 4471 insertions(+), 3841 deletions(-) rename vgm_wc_api.lib => wc_api.lib (100%) diff --git a/XMPLAY.WMF b/XMPLAY.WMF index 3309aab75f8acbe60b2b5c022e333be53c264689..45aefd6f0c31d082e684902e2b803ae328c155ce 100644 GIT binary patch delta 2050 zcmah~eN0nV6o2pa^^?->=|oT#-y2M8gQc{r)1q(FF&HBXYJwjuiVjpFX$MX|?Bt`Q z1#vCIoA|N)u`mBLE0Jxzi^(Q-MJrx6O(5Bl_ebZR(-5+dj4j4VcW?RhW7%tRbMEh) z-#zD^bM9$-b9-|?%`oQz0}5sp4elvkRo8Wdqz6(QtX5RgX5dp)zHas=k=WRHskSOQ zBGO1`zco0;m{QH!s_(})g~qq7y%&njZLH5NG`c6!u@JDZD>meM#S~24n?}X$_d`h2 zj&66LKCkEYUe+3IQJSG*qsJ?u*>Qw=*e^W}B>T51~jMyn++ z)v&*X-&j}E%$K?w-0vK!bsafe+X61LOG~k{->?gznnJl=rwVQ`>F_$rm^6{HPEixt z+9~SEqMWpkS2EDdLUh%_Y*OqhU+ft+53h&>eA5->3Zd|Io|j%kjrR+0LYIund~x))&sGG566nGn$fg(y zg%IrsBGE?#buUO&FC|gWCs?o%97nLO)gDo_+hfx}2+NJAD;VZgs5%%nDMbd|@F6q4 zh*D&UNbV$suoO}IofqMxT`2LRU%H5^C(;qe|klHWWP|*xsWH7&|wyuVM&+X>x_B9-=p{6O9{)+-8)%oQ=`5jbD zP*SqM&@xxhMS>B6LJCCB_lotC_7Qq)TwQY|FBmgWwJWKNBGCnMw9DG=c1c?j4!%~ulHy!2!(p0}taDQHtc2aD z@psoa)Uj8jZg%fj*0ezNEZDIcJ4+r+i48dSE{KD%CnK}w+3fiss!e0Q>jsjxq~K~` zjMGslGdSoOvNE+*S#lKbr>~CYm2s?XQYaSaGJ{~BZdIG}+ldL9qN0ZCC>nqh6Qxny zVzOnuEbU>X3Z>*yNe9$P&EVD%i|!b@67X1bXi3m>Yseaxn+BtbXc8yLAPyleXJt8@ z7{=bP!n1%t)Kcrz5L`+^o1mc^BB?wM%`QhHV|bKY4% zMSvwT*E0){E>dAi-z=aY0H&Oo0k{u=J0<;v=@!$lGC8>~cm^6xcY9X9r_B%1sczCk0z)Fz$((NMCgX-$7wRT1iM`3x@X@2 zE{srk0axZ9sp8R0iE+SpMud|P<(x=*#HnZ#RQTnbe1bJznFGxhh@L?ZRK|IGY$Ka< z;NxCC?nw^F*%4TPuKPI~6uy|5YmNnTEg!ZCugnd$mmxYHM2~_bJ9xbP;TKv0=yn&L zL+kleblMvhX`T@o+eL_>4JH-J^GA*bLbe=eTLWztXv>9YQD>N6j7Q4oIWpsj9-Sep z&_|9!Kc5itphH01Ny(9*8m0Wg1a7ZU-C8x-WB7lkBTJ?u`YRANT|tk0k-PwYYrt<< zuj~E5sfMG9>!*C+hGDn%hrn2jyr~%IH)ertMxK>qF%8ri(^(@@Re@HcM2 delta 1828 zcmZ`)du&r>6#wqMeXnd>(Yf-Fdu2e^jMBABBV}BX2t=MEBp{IR%Em+%21B>8lJ&v5 z0&Az_{-I)`qEQp0DajK18KYs|v{Ln3z@+`dbDOGa>s`(rK$-8^5{ZOG#`xjFZD z&hNaw^PL7ef*scwmi;o;&#@~R`82nm8IgbE4j6|+3H6>jBv*0kjgIiN{HAW{x{;7n zLd4*qax~<*lOU!b=?#%ZA&JR^kj-MZoE`h@Fq4OG7|C`@H)E%-Z|E8QYOQaNkQi&D}Cw5J);L$ z?9gGdIxM>I8Hs^(+$QWZ0Y{fmM!MxQ`jyNs`9rX1vfkiiuE@29O2#4Y zGi+w+2<6Q>Qcw8w@8EgSiT%AqzaT|%Djmxx=`F%&tq)C?o2TCbEpiclOX^R>#E>OmuzH>2Xh1WQ`hMf+>D2E*im*1H<5qVI=?- zR^u-e0oiBXb<}-cZJ(6zAX3|>H1*`9dTi?S&|(Gm_;VF5tLVn%$hO!kD8rPbcIn1F zdb;josxfh&bZ%-5sF$kqf z8&c#QJT|s91tn_EI!!&OQ}^iAlLqyev7i~)m33M=$<3JGX(7wv{#$9+kk&qs;!*{i zA_Hj`JESdJ=Jf##(LmvUh(Oh9*JN6^Q|+1>M4MAi%Nu^`s-U2~9vizOn&BjMaJ0#b z#TlSyt+Q(UzzkrZz;ha(nE~k77=Utf2H+?Flw1+un`M`^V#)MOnRFWU+#Bz_{qo*l z?~m?|;Zo#?$&J<%)wCU3H%P+w61w6tGXhdpT!QxS2n_JK^z|m2|8nR1F1@r~k>m%~ z+A6s0c33blV7?lh6NM#ET22tkAKF$l*hF03H}7EJC?>a}beu$%)?m^2qs563BOlw3sonEE0W z7sVRv6-oW2;!5-))K(O0QN9c1EH4@J0D{HS7vBQ-1E4!l2b=LHvLT|p67$F%Wp$Rp zUY`-?xL+o_nul sdasz80 -o obj/crt0.rel src/crt0.s 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 exist obj/out.hex hex2bin obj/out.hex >nul diff --git a/obj/out.asm b/obj/out.asm index 58d7085..70e1cac 100644 --- a/obj/out.asm +++ b/obj/out.asm @@ -27,6 +27,8 @@ .globl _leave_playing_and_exit .globl _unload_and_exit .globl _about + .globl _wc_center + .globl _wc_screen_width .globl _wait_frames .globl _wait_esc_key .globl _play_xm @@ -35,6 +37,7 @@ .globl _esp_wait_status .globl _esp_rd_end .globl _esp_send_dma + .globl _esp_wait_not_busy .globl _esp_wr_end .globl _esp_wr_reg32 .globl _esp_wr_reg8 @@ -47,6 +50,9 @@ .globl _wc_gadrw .globl _wc_prsrw_attr .globl _wc_prsrw + .globl _wc_gedpl + .globl _wc_key_wait_release + .globl _wc_key_enter .globl _wc_key_space .globl _wc_key_pgdn .globl _wc_key_pgup @@ -57,6 +63,8 @@ .globl _strlen .globl _state_esp .globl _bar_attr_ofs + .globl _win_about + .globl _win_xm .globl _last_track_status .globl _xm_handle .globl _total_samples @@ -68,8 +76,8 @@ .globl _filesize .globl _ret_sp .globl _fs_buf - .globl _win_about - .globl _win_xm + .globl _win_about_tpl + .globl _win_xm_tpl .globl _esp_wait_busy .globl _xm_set_status .globl _xm_set_status_code @@ -153,6 +161,10 @@ _xm_handle:: .ds 1 _last_track_status:: .ds 1 +_win_xm:: + .ds 18 +_win_about:: + .ds 18 _status_buf: .ds 24 _status_code_buf: @@ -194,15 +206,15 @@ _state_esp:: ; code ;-------------------------------------------------------- .area _CODE -;src/wc_api.c:47: void wc_exit(u8 rc) __naked +;src/wc_api.c:71: void wc_exit(u8 rc) __naked ; --------------------------------- ; Function wc_exit ; --------------------------------- _wc_exit:: -;src/wc_api.c:53: __endasm; +;src/wc_api.c:77: __endasm; ld sp, (_ret_sp) ret -;src/wc_api.c:54: } +;src/wc_api.c:78: } ;src/esp32.c:18: void esp_cmd(u8 cmd) ; --------------------------------- ; Function esp_cmd @@ -451,147 +463,11 @@ _esp_wr_end:: out (_SPI_CTRL), a ;src/esp32.c:100: } ret -;src/esp32.c:102: void esp_send_dma(u16 a, u8 p, u16 l, u16 n) +;src/esp32.c:114: u8 esp_wait_not_busy(u16 max_frames) ; --------------------------------- -; Function esp_send_dma +; Function esp_wait_not_busy ; --------------------------------- -_esp_send_dma:: - ld a, l -;src/esp32.c:105: TS_DMASADDRL = (u8)a; - ld bc, #_TS_DMASADDRL - out (c), a -;src/esp32.c:106: TS_DMASADDRH = (u8)((u16)a >> 8); - ld a, h - ld bc, #_TS_DMASADDRH - out (c), a -;src/esp32.c:107: TS_DMASADDRX = p; - ld iy, #2 - add iy, sp - ld a, 0 (iy) - ld bc, #_TS_DMASADDRX - out (c), a -;src/esp32.c:108: TS_DMALEN = (u8)((l >> 1) - 1); - ld a, 1 (iy) - ld c, 2 (iy) - inc iy - srl c - rr a - dec a - ld bc, #_TS_DMALEN - out (c), a -;src/esp32.c:109: TS_DMANUM = (u8)(n - 1); - ld a, 2 (iy) - dec a - ld bc, #_TS_DMANUM - out (c), a -;src/esp32.c:111: SPI_CTRL = SPI_ESP_CS_ON; - ld a, #0x13 - out (_SPI_CTRL), a -;src/esp32.c:112: SPI_DATA = ESP_SPI_CMD_WR_DATA; - ld a, #0x03 - out (_SPI_DATA), a -;src/esp32.c:113: SPI_DATA; // dummy - in a, (_SPI_DATA) -;src/esp32.c:114: SPI_DATA; // dummy - in a, (_SPI_DATA) -;src/esp32.c:115: TS_DMACTR = TS_DMA_RAM_SPI; - ld a, #0x82 - ld bc, #_TS_DMACTR - out (c), a -;src/esp32.c:116: while (TS_DMASTATUS & 0x80); -00101$: - ld a, #>(_TS_DMASTATUS) - in a, (#<(_TS_DMASTATUS)) - rlca - jr c, 00101$ -;src/esp32.c:117: SPI_CTRL = SPI_ESP_CS_OFF; - ld a, #0x03 - out (_SPI_CTRL), a -;src/esp32.c:119: esp_wr_end(); - call _esp_wr_end -;src/esp32.c:120: esp_wait_busy(100); // 2s - esp32 consuming one DMA'd chunk should be near-instant - ld hl, #0x0064 - call _esp_wait_busy -;src/esp32.c:121: } - pop hl - pop af - pop af - inc sp - jp (hl) -;src/esp32.c:123: void esp_rd_end() -; --------------------------------- -; Function esp_rd_end -; --------------------------------- -_esp_rd_end:: -;src/esp32.c:125: SPI_CTRL = SPI_ESP_CS_ON; - ld a, #0x13 - out (_SPI_CTRL), a -;src/esp32.c:126: SPI_DATA = ESP_SPI_CMD_R_END; - ld a, #0x08 - out (_SPI_DATA), a -;src/esp32.c:127: SPI_DATA; // dummy - in a, (_SPI_DATA) -;src/esp32.c:128: SPI_CTRL = SPI_ESP_CS_OFF; - ld a, #0x03 - out (_SPI_CTRL), a -;src/esp32.c:129: } - ret -;src/esp32.c:139: u8 esp_wait_status(u8 status, u16 max_frames) -; --------------------------------- -; Function esp_wait_status -; --------------------------------- -_esp_wait_status:: - push ix - ld ix, #0 - add ix, sp - ld hl, #-5 - add hl, sp - ld sp, hl - ld -1 (ix), a - ld -3 (ix), e - ld -2 (ix), d -;src/esp32.c:141: u16 start = *(u16*)_TMN; - ld hl, #0x6009 - ld a, (hl) - ld -5 (ix), a - inc hl - ld a, (hl) - ld -4 (ix), a -;src/esp32.c:143: while ((u16)(*(u16*)_TMN - start) < max_frames) -00103$: - ld hl, (#0x6009) - ld a, l - sub a, -5 (ix) - ld c, a - ld a, h - sbc a, -4 (ix) - ld b, a - ld a, c - sub a, -3 (ix) - ld a, b - sbc a, -2 (ix) - jr nc, 00105$ -;src/esp32.c:145: if (esp_rd_reg8(ESP_REG_STATUS) == status) - ld a, #0x01 - call _esp_rd_reg8 - sub a, -1 (ix) - jr nz, 00103$ -;src/esp32.c:146: return 1; - ld a, #0x01 - jp 00106$ -00105$: -;src/esp32.c:149: return 0; - xor a, a -00106$: -;src/esp32.c:150: } - ld sp, ix - pop ix - ret -;src/esp32.c:152: u8 esp_wait_busy(u16 max_frames) -; --------------------------------- -; Function esp_wait_busy -; --------------------------------- -_esp_wait_busy:: +_esp_wait_not_busy:: push ix ld ix, #0 add ix, sp @@ -599,14 +475,14 @@ _esp_wait_busy:: push af ld -2 (ix), l ld -1 (ix), h -;src/esp32.c:154: u16 start = *(u16*)_TMN; +;src/esp32.c:116: u16 start = *(u16*)_TMN; ld hl, #0x6009 ld a, (hl) ld -4 (ix), a inc hl ld a, (hl) ld -3 (ix), a -;src/esp32.c:156: while ((u16)(*(u16*)_TMN - start) < max_frames) +;src/esp32.c:118: while ((u16)(*(u16*)_TMN - start) < max_frames) 00103$: ld hl, (#0x6009) ld a, l @@ -620,70 +496,259 @@ _esp_wait_busy:: ld a, b sbc a, -1 (ix) jr nc, 00105$ -;src/esp32.c:158: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) +;src/esp32.c:120: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) ld a, #0x01 call _esp_rd_reg8 cp a, #0x02 jr z, 00103$ -;src/esp32.c:159: return 1; +;src/esp32.c:121: return 1; ld a, #0x01 jp 00106$ 00105$: -;src/esp32.c:162: return 0; +;src/esp32.c:124: return 0; xor a, a 00106$: -;src/esp32.c:163: } +;src/esp32.c:125: } ld sp, ix pop ix ret -;src/esp32.c:165: int esp_create_obj(u32 size, u8 type) +;src/esp32.c:127: void esp_send_dma(u16 a, u8 p, u16 l, u16 n) +; --------------------------------- +; Function esp_send_dma +; --------------------------------- +_esp_send_dma:: + ld a, l +;src/esp32.c:130: TS_DMASADDRL = (u8)a; + ld bc, #_TS_DMASADDRL + out (c), a +;src/esp32.c:131: TS_DMASADDRH = (u8)((u16)a >> 8); + ld a, h + ld bc, #_TS_DMASADDRH + out (c), a +;src/esp32.c:132: TS_DMASADDRX = p; + ld iy, #2 + add iy, sp + ld a, 0 (iy) + ld bc, #_TS_DMASADDRX + out (c), a +;src/esp32.c:133: TS_DMALEN = (u8)((l >> 1) - 1); + ld a, 1 (iy) + ld c, 2 (iy) + inc iy + srl c + rr a + dec a + ld bc, #_TS_DMALEN + out (c), a +;src/esp32.c:134: TS_DMANUM = (u8)(n - 1); + ld a, 2 (iy) + dec a + ld bc, #_TS_DMANUM + out (c), a +;src/esp32.c:136: SPI_CTRL = SPI_ESP_CS_ON; + ld a, #0x13 + out (_SPI_CTRL), a +;src/esp32.c:137: SPI_DATA = ESP_SPI_CMD_WR_DATA; + ld a, #0x03 + out (_SPI_DATA), a +;src/esp32.c:138: SPI_DATA; // dummy + in a, (_SPI_DATA) +;src/esp32.c:139: SPI_DATA; // dummy + in a, (_SPI_DATA) +;src/esp32.c:140: TS_DMACTR = TS_DMA_RAM_SPI; + ld a, #0x82 + ld bc, #_TS_DMACTR + out (c), a +;src/esp32.c:141: while (TS_DMASTATUS & 0x80); +00101$: + ld a, #>(_TS_DMASTATUS) + in a, (#<(_TS_DMASTATUS)) + rlca + jr c, 00101$ +;src/esp32.c:142: SPI_CTRL = SPI_ESP_CS_OFF; + ld a, #0x03 + out (_SPI_CTRL), a +;src/esp32.c:144: esp_wr_end(); + call _esp_wr_end +;src/esp32.c:145: esp_wait_not_busy(100); // 2s - esp32 consuming one DMA'd chunk should be near-instant + ld hl, #0x0064 + call _esp_wait_not_busy +;src/esp32.c:146: } + pop hl + pop af + pop af + inc sp + jp (hl) +;src/esp32.c:148: void esp_rd_end() +; --------------------------------- +; Function esp_rd_end +; --------------------------------- +_esp_rd_end:: +;src/esp32.c:150: SPI_CTRL = SPI_ESP_CS_ON; + ld a, #0x13 + out (_SPI_CTRL), a +;src/esp32.c:151: SPI_DATA = ESP_SPI_CMD_R_END; + ld a, #0x08 + out (_SPI_DATA), a +;src/esp32.c:152: SPI_DATA; // dummy + in a, (_SPI_DATA) +;src/esp32.c:153: SPI_CTRL = SPI_ESP_CS_OFF; + ld a, #0x03 + out (_SPI_CTRL), a +;src/esp32.c:154: } + ret +;src/esp32.c:164: u8 esp_wait_status(u8 status, u16 max_frames) +; --------------------------------- +; Function esp_wait_status +; --------------------------------- +_esp_wait_status:: + push ix + ld ix, #0 + add ix, sp + ld hl, #-5 + add hl, sp + ld sp, hl + ld -1 (ix), a + ld -3 (ix), e + ld -2 (ix), d +;src/esp32.c:166: u16 start = *(u16*)_TMN; + ld hl, #0x6009 + ld a, (hl) + ld -5 (ix), a + inc hl + ld a, (hl) + ld -4 (ix), a +;src/esp32.c:168: while ((u16)(*(u16*)_TMN - start) < max_frames) +00103$: + ld hl, (#0x6009) + ld a, l + sub a, -5 (ix) + ld c, a + ld a, h + sbc a, -4 (ix) + ld b, a + ld a, c + sub a, -3 (ix) + ld a, b + sbc a, -2 (ix) + jr nc, 00105$ +;src/esp32.c:170: if (esp_rd_reg8(ESP_REG_STATUS) == status) + ld a, #0x01 + call _esp_rd_reg8 + sub a, -1 (ix) + jr nz, 00103$ +;src/esp32.c:171: return 1; + ld a, #0x01 + jp 00106$ +00105$: +;src/esp32.c:174: return 0; + xor a, a +00106$: +;src/esp32.c:175: } + ld sp, ix + pop ix + ret +;src/esp32.c:194: u8 esp_wait_busy(u16 max_frames) +; --------------------------------- +; Function esp_wait_busy +; --------------------------------- +_esp_wait_busy:: + ex de, hl +;src/esp32.c:196: u16 start = *(u16*)_TMN; + ld bc, (#0x6009) +;src/esp32.c:199: while (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) +00103$: + push bc + push de + ld a, #0x01 + call _esp_rd_reg8 + pop de + pop bc + cp a, #0x02 + jr z, 00108$ +;src/esp32.c:201: if ((u16)(*(u16*)_TMN - start) >= max_frames) + ld hl, (#0x6009) + cp a, a + sbc hl, bc + xor a, a + sbc hl, de + jr c, 00103$ +;src/esp32.c:202: return 0; + xor a, a + ret +;src/esp32.c:206: while ((u16)(*(u16*)_TMN - start) < max_frames) +00108$: + ld hl, (#0x6009) + cp a, a + sbc hl, bc + xor a, a + sbc hl, de + jr nc, 00110$ +;src/esp32.c:208: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) + push bc + push de + ld a, #0x01 + call _esp_rd_reg8 + pop de + pop bc + cp a, #0x02 + jr z, 00108$ +;src/esp32.c:209: return 1; + ld a, #0x01 + ret +00110$: +;src/esp32.c:212: return 0; + xor a, a +;src/esp32.c:213: } + ret +;src/esp32.c:215: int esp_create_obj(u32 size, u8 type) ; --------------------------------- ; Function esp_create_obj ; --------------------------------- _esp_create_obj:: -;src/esp32.c:167: esp_wr_reg32(ESP_REG_DATA_SIZE, size); +;src/esp32.c:217: esp_wr_reg32(ESP_REG_DATA_SIZE, size); push hl push de ld a, #0x03 call _esp_wr_reg32 -;src/esp32.c:168: esp_wr_reg8(ESP_REG_OBJ_TYPE, type); +;src/esp32.c:218: esp_wr_reg8(ESP_REG_OBJ_TYPE, type); ld iy, #2 add iy, sp ld l, 0 (iy) ld a, #0x02 call _esp_wr_reg8 -;src/esp32.c:169: esp_cmd(ESP_CMD_MAKE_OBJECT); +;src/esp32.c:219: esp_cmd(ESP_CMD_MAKE_OBJECT); ld a, #0xe0 call _esp_cmd -;src/esp32.c:170: esp_wait_busy(100); // 2s - object allocation should be near-instant +;src/esp32.c:220: esp_wait_busy(100); // 2s - object allocation should be near-instant ld hl, #0x0064 call _esp_wait_busy -;src/esp32.c:173: return esp_rd_reg8(ESP_REG_OBJ_HANDLE); +;src/esp32.c:223: return esp_rd_reg8(ESP_REG_OBJ_HANDLE); ld a, #0x0b call _esp_rd_reg8 ld e, a ld d, #0x00 -;src/esp32.c:174: } +;src/esp32.c:224: } pop hl inc sp jp (hl) -;src/main.c:101: bool esp_init() +;src/main.c:145: bool esp_init() ; --------------------------------- ; Function esp_init ; --------------------------------- _esp_init:: -;src/main.c:103: esp_cmd(ESP_CMD_NOP); +;src/main.c:147: esp_cmd(ESP_CMD_NOP); xor a, a call _esp_cmd -;src/main.c:104: esp_rd_end(); +;src/main.c:148: esp_rd_end(); call _esp_rd_end -;src/main.c:105: esp_wr_end(); +;src/main.c:149: esp_wr_end(); call _esp_wr_end -;src/main.c:109: return true; +;src/main.c:153: return true; ld a, #0x01 -;src/main.c:110: } +;src/main.c:154: } ret -_win_xm: +_win_xm_tpl: .db #0x81 ; 129 .db #0x00 ; 0 .db #0x19 ; 25 @@ -698,14 +763,14 @@ _win_xm: .dw __str_0 .dw __str_1 .dw __str_1 -_win_about: +_win_about_tpl: .db #0x01 ; 1 .db #0x00 ; 0 .db #0x16 ; 22 .db #0x0a ; 10 .db #0x24 ; 36 - .db #0x05 ; 5 - .db #0x4f ; 79 'O' + .db #0x07 ; 7 + .db #0x70 ; 112 'p' .db #0x00 ; 0 .dw #0x0000 .db #0x00 ; 0 @@ -724,12 +789,14 @@ __str_2: .ascii " About " .db 0x00 __str_3: + .db 0x0d .db 0x0e - .db 0x0c - .db 0x01 .ascii "XM Player v0.1" + .db 0x0d + .db 0x0e + .ascii "by Alex Korochinskiy" .db 0x00 -;src/main.c:114: bool play_xm() +;src/main.c:158: bool play_xm() ; --------------------------------- ; Function play_xm ; --------------------------------- @@ -740,19 +807,19 @@ _play_xm:: ld hl, #-20 add hl, sp ld sp, hl -;src/main.c:116: esp_cmd(ESP_CMD_TRACK_STOP); +;src/main.c:160: esp_cmd(ESP_CMD_TRACK_STOP); ld a, #0xa2 call _esp_cmd -;src/main.c:117: esp_wait_busy(100); // 2s - both should be near-instant +;src/main.c:161: esp_wait_busy(100); // 2s - both should be near-instant ld hl, #0x0064 call _esp_wait_busy -;src/main.c:118: esp_cmd(ESP_CMD_KILL_OBJECTS); +;src/main.c:162: esp_cmd(ESP_CMD_KILL_OBJECTS); ld a, #0xe4 call _esp_cmd -;src/main.c:119: esp_wait_busy(100); +;src/main.c:163: esp_wait_busy(100); ld hl, #0x0064 call _esp_wait_busy -;src/main.c:122: switch (file_ext) +;src/main.c:166: switch (file_ext) ld a, (_file_ext) dec a jr z, 00101$ @@ -760,20 +827,20 @@ _play_xm:: sub a, #0x02 jr z, 00102$ jp 00103$ -;src/main.c:124: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; +;src/main.c:168: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; 00101$: ld a, #0x08 jp 00104$ -;src/main.c:125: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; +;src/main.c:169: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; 00102$: ld a, #0x0c jp 00104$ -;src/main.c:126: default: obj_type = OBJ_TYPE_XM; break; +;src/main.c:170: default: obj_type = OBJ_TYPE_XM; break; 00103$: ld a, #0x05 -;src/main.c:127: } +;src/main.c:171: } 00104$: -;src/main.c:129: xm_handle = esp_create_obj(filesize, obj_type); +;src/main.c:173: xm_handle = esp_create_obj(filesize, obj_type); push af inc sp ld de, (_filesize) @@ -781,39 +848,39 @@ _play_xm:: call _esp_create_obj ld hl, #_xm_handle ld (hl), e -;src/main.c:130: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); +;src/main.c:174: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); ld a, #0x01 call _esp_rd_reg8 ld (#_last_esp_status), a -;src/main.c:131: if (last_esp_status != ESP_ST_READY) +;src/main.c:175: if (last_esp_status != ESP_ST_READY) ld a, (_last_esp_status) dec a jr z, 00106$ -;src/main.c:132: return false; +;src/main.c:176: return false; xor a, a jp 00118$ 00106$: -;src/main.c:134: u32 sz = filesize; +;src/main.c:178: u32 sz = filesize; ld hl, #12 add hl, sp ex de, hl ld hl, #_filesize ld bc, #4 ldir -;src/main.c:135: u32 offs = 0; +;src/main.c:179: u32 offs = 0; xor a, a ld -4 (ix), a ld -3 (ix), a ld -2 (ix), a ld -1 (ix), a -;src/main.c:137: while (sz) +;src/main.c:181: while (sz) 00107$: ld a, -5 (ix) or a, -6 (ix) or a, -7 (ix) or a, -8 (ix) jp z, 00109$ -;src/main.c:139: u32 s = min(sz, FS_BUF_SIZE); +;src/main.c:183: u32 s = min(sz, FS_BUF_SIZE); ld a, -7 (ix) sub a, #0x10 ld a, -6 (ix) @@ -843,7 +910,7 @@ _play_xm:: add hl, sp ld bc, #4 ldir -;src/main.c:140: u8 sec = (s + 511) >> 9; +;src/main.c:184: u8 sec = (s + 511) >> 9; ld a, -15 (ix) add a, #0xff ld a, -14 (ix) @@ -861,14 +928,14 @@ _play_xm:: srl e rr b rr c -;src/main.c:142: wc_load512((u16)fs_buf, sec); +;src/main.c:186: wc_load512((u16)fs_buf, sec); ld -9 (ix), c ld a, c push af inc sp ld hl, #_fs_buf call _wc_load512 -;src/main.c:144: esp_wr_reg32(ESP_REG_DATA_SIZE, s); +;src/main.c:188: esp_wr_reg32(ESP_REG_DATA_SIZE, s); ld hl, #0x0 push hl ld l, -15 (ix) @@ -876,7 +943,7 @@ _play_xm:: push hl ld a, #0x03 call _esp_wr_reg32 -;src/main.c:145: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); +;src/main.c:189: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); ld l, -2 (ix) ld h, -1 (ix) push hl @@ -885,14 +952,14 @@ _play_xm:: push hl ld a, #0x07 call _esp_wr_reg32 -;src/main.c:146: esp_cmd(ESP_CMD_WRITE_OBJECT); +;src/main.c:190: esp_cmd(ESP_CMD_WRITE_OBJECT); ld a, #0xe1 call _esp_cmd -;src/main.c:147: esp_wait_status(ESP_ST_DATA_M2S, 100); // 2s - near-instant state transition +;src/main.c:191: esp_wait_status(ESP_ST_DATA_M2S, 100); // 2s - near-instant state transition ld de, #0x0064 ld a, #0x03 call _esp_wait_status -;src/main.c:148: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); +;src/main.c:192: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); ld a, -9 (ix) ld -11 (ix), a ld -10 (ix), #0x00 @@ -908,7 +975,7 @@ _play_xm:: inc sp ld hl, #_fs_buf call _esp_send_dma -;src/main.c:150: offs += s; +;src/main.c:194: offs += s; ld e, -15 (ix) ld d, -14 (ix) ld l, -4 (ix) @@ -922,7 +989,7 @@ _play_xm:: jr nc, 00207$ inc -1 (ix) 00207$: -;src/main.c:151: sz -= s; +;src/main.c:195: sz -= s; ld a, -8 (ix) sub a, -15 (ix) ld -8 (ix), a @@ -937,152 +1004,226 @@ _play_xm:: ld -5 (ix), a jp 00107$ 00109$: -;src/main.c:154: if (file_ext == EXT_XMZ) +;src/main.c:198: if (file_ext == EXT_XMZ) ld a, (_file_ext) dec a jr nz, 00113$ -;src/main.c:159: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); +;src/main.c:203: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); ld a, (_xm_handle) ld l, a ld a, #0x0b call _esp_wr_reg8 -;src/main.c:160: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); +;src/main.c:204: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); ld l, #0x05 ld a, #0x02 call _esp_wr_reg8 -;src/main.c:161: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize); +;src/main.c:205: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize); ld hl, (_filesize + 2) push hl ld hl, (_filesize) push hl ld a, #0x03 call _esp_wr_reg32 -;src/main.c:162: esp_cmd(ESP_CMD_UNZIP); +;src/main.c:206: esp_cmd(ESP_CMD_UNZIP); ld a, #0xf2 call _esp_cmd -;src/main.c:163: esp_wait_busy(250); // 5s - decompression time scales with file size +;src/main.c:207: esp_wait_busy(250); // 5s - decompression time scales with file size ld hl, #0x00fa call _esp_wait_busy -;src/main.c:165: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); +;src/main.c:209: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); ld a, #0x01 call _esp_rd_reg8 ld (#_last_esp_status), a -;src/main.c:166: if (last_esp_status != ESP_ST_READY) +;src/main.c:210: if (last_esp_status != ESP_ST_READY) ld a, (_last_esp_status) dec a jr z, 00113$ -;src/main.c:167: return false; +;src/main.c:211: return false; xor a, a jp 00118$ 00113$: -;src/main.c:170: esp_cmd(ESP_CMD_TRACK_INIT); +;src/main.c:214: esp_cmd(ESP_CMD_TRACK_INIT); ld a, #0xa0 call _esp_cmd -;src/main.c:176: esp_wait_busy(400); - ld hl, #0x0190 +;src/main.c:220: esp_wait_busy(500); + ld hl, #0x01f4 call _esp_wait_busy -;src/main.c:178: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); +;src/main.c:222: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); ld a, #0x01 call _esp_rd_reg8 ld (#_last_esp_status), a -;src/main.c:179: if (last_esp_status != ESP_ST_READY) +;src/main.c:223: if (last_esp_status != ESP_ST_READY) ld a, (_last_esp_status) dec a jr z, 00115$ -;src/main.c:180: return false; +;src/main.c:224: return false; xor a, a jp 00118$ 00115$: -;src/main.c:185: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); +;src/main.c:229: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); ld a, (_xm_handle) ld l, a ld a, #0x0b call _esp_wr_reg8 -;src/main.c:186: esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1); +;src/main.c:230: esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1); ld l, #0x01 ld a, #0x3a call _esp_wr_reg8 -;src/main.c:187: esp_cmd(ESP_CMD_TRACK_SET_PARAMS); +;src/main.c:231: esp_cmd(ESP_CMD_TRACK_SET_PARAMS); ld a, #0xa6 call _esp_cmd -;src/main.c:188: esp_wait_busy(100); // 2s - both should be near-instant +;src/main.c:232: esp_wait_busy(100); // 2s - both should be near-instant ld hl, #0x0064 call _esp_wait_busy -;src/main.c:190: esp_cmd(ESP_CMD_TRACK_PLAY); +;src/main.c:234: esp_cmd(ESP_CMD_TRACK_PLAY); ld a, #0xa1 call _esp_cmd -;src/main.c:191: esp_wait_busy(100); +;src/main.c:235: esp_wait_busy(100); ld hl, #0x0064 call _esp_wait_busy -;src/main.c:193: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); +;src/main.c:237: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); ld a, #0x01 call _esp_rd_reg8 ld (#_last_esp_status), a -;src/main.c:194: if (last_esp_status != ESP_ST_READY) +;src/main.c:238: if (last_esp_status != ESP_ST_READY) ld a, (_last_esp_status) dec a jr z, 00117$ -;src/main.c:195: return false; +;src/main.c:239: return false; xor a, a jp 00118$ 00117$: -;src/main.c:197: return true; +;src/main.c:241: return true; ld a, #0x01 00118$: -;src/main.c:198: } +;src/main.c:242: } ld sp, ix pop ix ret -;src/main.c:201: void wait_esc_key() +;src/main.c:245: void wait_esc_key() ; --------------------------------- ; Function wait_esc_key ; --------------------------------- _wait_esc_key:: -;src/main.c:203: while (1) +;src/main.c:247: while (1) 00104$: -;src/main.c:207: __endasm; +;src/main.c:251: __endasm; halt -;src/main.c:209: if (wc_key_esc()) +;src/main.c:253: if (wc_key_esc()) call _wc_key_esc or a, a jr z, 00104$ -;src/main.c:210: break; -;src/main.c:212: } +;src/main.c:254: break; +;src/main.c:256: } ret -;src/main.c:214: void wait_frames(u8 n) +;src/main.c:258: void wait_frames(u8 n) ; --------------------------------- ; Function wait_frames ; --------------------------------- _wait_frames:: ld c, a -;src/main.c:216: while (n--) +;src/main.c:260: while (n--) 00101$: ld a, c dec c or a, a ret z -;src/main.c:220: __endasm; +;src/main.c:264: __endasm; halt -;src/main.c:222: } +;src/main.c:266: } jp 00101$ -;src/main.c:224: void about() +;src/main.c:273: u8 wc_screen_width() +; --------------------------------- +; Function wc_screen_width +; --------------------------------- +_wc_screen_width:: +;src/main.c:275: return (*(u8*)_HEI >= 36) ? 90 : 80; + ld a, (#0x600e) + sub a, #0x24 + jr c, 00103$ + ld a, #0x5a + ret +00103$: + ld a, #0x50 +;src/main.c:276: } + ret +;src/main.c:281: u8 wc_center(u8 screen_size, u8 win_size) +; --------------------------------- +; Function wc_center +; --------------------------------- +_wc_center:: + push ix + ld ix, #0 + add ix, sp + push af + ld -1 (ix), a +;src/main.c:283: return (screen_size > win_size) ? (screen_size - win_size) / 2 : 0; + ld -2 (ix), l + ld a, l + sub a, -1 (ix) + jr nc, 00103$ + ld a, -1 (ix) + ld e, -2 (ix) + sub a, e + ld c, a + sbc a, a + ld b, a + ld e, c + ld d, b + bit 7, b + jr z, 00105$ + ld e, c + ld d, b + inc de +00105$: + ld a, e + sra d + rr a + jp 00104$ +00103$: + xor a, a +00104$: +;src/main.c:284: } + ld sp, ix + pop ix + ret +;src/main.c:286: void about() ; --------------------------------- ; Function about ; --------------------------------- _about:: -;src/main.c:226: wc_prwow(&win_about); +;src/main.c:288: memcpy(&win_about, &win_about_tpl, sizeof(win_about)); + ld de, #_win_about + ld hl, #_win_about_tpl + ld bc, #0x0012 + ldir +;src/main.c:289: win_about.x_pos = wc_center(wc_screen_width(), win_about.x_size); + ld hl, #_win_about + 4 + ld l, (hl) + push hl + call _wc_screen_width + pop hl + call _wc_center + ld (#(_win_about + 2)), a +;src/main.c:290: win_about.y_pos = wc_center(*(u8*)_HEI, win_about.y_size); + ld hl, #_win_about + 5 + ld l, (hl) + ld a, (#0x600e) + call _wc_center + ld (#(_win_about + 3)), a +;src/main.c:291: wc_prwow(&win_about); ld hl, #_win_about call _wc_prwow -;src/main.c:227: wait_esc_key(); +;src/main.c:292: wait_esc_key(); call _wait_esc_key -;src/main.c:228: wc_rresb(&win_about); +;src/main.c:293: wc_rresb(&win_about); ld hl, #_win_about call _wc_rresb -;src/main.c:229: wc_exit(WC_EXIT); +;src/main.c:294: wc_exit(WC_EXIT); xor a, a -;src/main.c:230: } +;src/main.c:295: } jp _wc_exit -;src/main.c:235: void unload_and_exit(WC_EXIT_SIGNAL sig) +;src/main.c:300: void unload_and_exit(WC_EXIT_SIGNAL sig) ; --------------------------------- ; Function unload_and_exit ; --------------------------------- @@ -1091,219 +1232,223 @@ _unload_and_exit:: ld iy, #0 add iy, sp ld 0 (iy), a -;src/main.c:237: esp_cmd(ESP_CMD_TRACK_STOP); +;src/main.c:302: esp_cmd(ESP_CMD_TRACK_STOP); ld a, #0xa2 call _esp_cmd -;src/main.c:238: esp_wait_busy(100); // 2s - both should be near-instant +;src/main.c:303: esp_wait_busy(100); // 2s - both should be near-instant ld hl, #0x0064 call _esp_wait_busy -;src/main.c:239: esp_cmd(ESP_CMD_KILL_OBJECTS); +;src/main.c:304: esp_cmd(ESP_CMD_KILL_OBJECTS); ld a, #0xe4 call _esp_cmd -;src/main.c:240: esp_wait_busy(100); +;src/main.c:305: esp_wait_busy(100); ld hl, #0x0064 call _esp_wait_busy -;src/main.c:241: wc_rresb(&win_xm); +;src/main.c:306: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:242: wc_exit(sig); +;src/main.c:307: wc_exit(sig); ld hl, #0 add hl, sp ld a, (hl) inc sp jp _wc_exit -;src/main.c:243: } +;src/main.c:308: } inc sp ret -;src/main.c:247: void leave_playing_and_exit() +;src/main.c:312: void leave_playing_and_exit() ; --------------------------------- ; Function leave_playing_and_exit ; --------------------------------- _leave_playing_and_exit:: -;src/main.c:249: wc_rresb(&win_xm); +;src/main.c:314: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:250: wc_exit(WC_EXIT); +;src/main.c:315: wc_exit(WC_EXIT); xor a, a -;src/main.c:251: } +;src/main.c:316: } jp _wc_exit -;src/main.c:257: void wait_for_manual_exit() +;src/main.c:322: void wait_for_manual_exit() ; --------------------------------- ; Function wait_for_manual_exit ; --------------------------------- _wait_for_manual_exit:: -;src/main.c:259: while (1) -00108$: -;src/main.c:263: __endasm; +;src/main.c:324: while (1) +00109$: +;src/main.c:328: __endasm; halt -;src/main.c:265: if (wc_key_pgdn()) +;src/main.c:330: if (wc_key_pgdn() || wc_key_enter()) call _wc_key_pgdn or a, a + jr nz, 00101$ + call _wc_key_enter + or a, a jr z, 00102$ -;src/main.c:266: unload_and_exit(WC_NEXT_FILE); +00101$: +;src/main.c:331: unload_and_exit(WC_NEXT_FILE); ld a, #0x02 call _unload_and_exit 00102$: -;src/main.c:268: if (wc_key_pgup()) +;src/main.c:333: if (wc_key_pgup()) call _wc_key_pgup or a, a - jr z, 00104$ -;src/main.c:269: unload_and_exit(WC_PREV_FILE); + jr z, 00105$ +;src/main.c:334: unload_and_exit(WC_PREV_FILE); ld a, #0x04 call _unload_and_exit -00104$: -;src/main.c:271: if (wc_key_esc()) +00105$: +;src/main.c:336: if (wc_key_esc()) call _wc_key_esc or a, a - jr z, 00108$ -;src/main.c:272: unload_and_exit(WC_EXIT); + jr z, 00109$ +;src/main.c:337: unload_and_exit(WC_EXIT); xor a, a call _unload_and_exit -;src/main.c:274: } - jp 00108$ -;src/main.c:280: void error_esp() +;src/main.c:339: } + jp 00109$ +;src/main.c:345: void error_esp() ; --------------------------------- ; Function error_esp ; --------------------------------- _error_esp:: -;src/main.c:285: xm_set_status_code("No ESP32 found", state_esp); +;src/main.c:350: xm_set_status_code("No ESP32 found", state_esp); ld a, (_state_esp) push af inc sp ld hl, #___str_4 call _xm_set_status_code -;src/main.c:286: wait_esc_key(); +;src/main.c:351: wait_esc_key(); call _wait_esc_key -;src/main.c:287: wc_rresb(&win_xm); +;src/main.c:352: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:288: wc_exit(WC_EXIT); +;src/main.c:353: wc_exit(WC_EXIT); xor a, a -;src/main.c:289: } +;src/main.c:354: } jp _wc_exit ___str_4: .ascii "No ESP32 found" .db 0x00 -;src/main.c:299: u8 stop_on_error() +;src/main.c:364: u8 stop_on_error() ; --------------------------------- ; Function stop_on_error ; --------------------------------- _stop_on_error:: -;src/main.c:301: return wc_prm_pl(1) == 2; +;src/main.c:366: return wc_prm_pl(1) == 2; ld a, #0x01 call _wc_prm_pl cp a, #0x02 ld a, #0x01 ret z xor a, a -;src/main.c:302: } +;src/main.c:367: } ret -;src/main.c:304: void error_oom() +;src/main.c:369: void error_oom() ; --------------------------------- ; Function error_oom ; --------------------------------- _error_oom:: -;src/main.c:306: xm_set_status_code("File too large", last_esp_status); +;src/main.c:371: xm_set_status_code("File too large", last_esp_status); ld a, (_last_esp_status) push af inc sp ld hl, #___str_5 call _xm_set_status_code -;src/main.c:308: if (stop_on_error()) +;src/main.c:373: if (stop_on_error()) call _stop_on_error or a, a jr z, 00102$ -;src/main.c:309: wait_for_manual_exit(); +;src/main.c:374: wait_for_manual_exit(); call _wait_for_manual_exit 00102$: -;src/main.c:311: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance +;src/main.c:376: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance ld a, #0x32 call _wait_frames -;src/main.c:312: wc_rresb(&win_xm); +;src/main.c:377: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:313: wc_exit(WC_NEXT_FILE); +;src/main.c:378: wc_exit(WC_NEXT_FILE); ld a, #0x02 -;src/main.c:314: } +;src/main.c:379: } jp _wc_exit ___str_5: .ascii "File too large" .db 0x00 -;src/main.c:316: void error_playback() +;src/main.c:381: void error_playback() ; --------------------------------- ; Function error_playback ; --------------------------------- _error_playback:: -;src/main.c:318: xm_set_status_code("Playback error", last_esp_status); +;src/main.c:383: xm_set_status_code("Playback error", last_esp_status); ld a, (_last_esp_status) push af inc sp ld hl, #___str_6 call _xm_set_status_code -;src/main.c:320: if (stop_on_error()) +;src/main.c:385: if (stop_on_error()) call _stop_on_error or a, a jr z, 00102$ -;src/main.c:321: wait_for_manual_exit(); +;src/main.c:386: wait_for_manual_exit(); call _wait_for_manual_exit 00102$: -;src/main.c:323: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance +;src/main.c:388: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance ld a, #0x32 call _wait_frames -;src/main.c:324: wc_rresb(&win_xm); +;src/main.c:389: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:325: wc_exit(WC_NEXT_FILE); +;src/main.c:390: wc_exit(WC_NEXT_FILE); ld a, #0x02 -;src/main.c:326: } +;src/main.c:391: } jp _wc_exit ___str_6: .ascii "Playback error" .db 0x00 -;src/main.c:333: void copy_file_name() +;src/main.c:398: void copy_file_name() ; --------------------------------- ; Function copy_file_name ; --------------------------------- _copy_file_name:: -;src/main.c:335: u8 *src = (u8*)p_file_name; +;src/main.c:400: u8 *src = (u8*)p_file_name; ld bc, (_p_file_name) -;src/main.c:338: while (src[i] && i < sizeof(file_name) - 1) +;src/main.c:403: while (src[i] && i < sizeof(file_name) - 1) ld e, #0x00 00102$: ld l, e ld h, #0x00 add hl, bc ld d, (hl) -;src/main.c:340: file_name[i] = src[i]; +;src/main.c:405: file_name[i] = src[i]; ld a, #<(_file_name) add a, e ld l, a ld a, #>(_file_name) adc a, #0x00 ld h, a -;src/main.c:338: while (src[i] && i < sizeof(file_name) - 1) +;src/main.c:403: while (src[i] && i < sizeof(file_name) - 1) ld a, d or a, a jr z, 00104$ ld a, e sub a, #0x20 jr nc, 00104$ -;src/main.c:340: file_name[i] = src[i]; +;src/main.c:405: file_name[i] = src[i]; ld (hl), d -;src/main.c:341: i++; +;src/main.c:406: i++; inc e jp 00102$ 00104$: -;src/main.c:343: file_name[i] = 0; +;src/main.c:408: file_name[i] = 0; ld (hl), #0x00 -;src/main.c:344: } +;src/main.c:409: } ret -;src/main.c:377: void xm_draw_static_labels() +;src/main.c:442: void xm_draw_static_labels() ; --------------------------------- ; Function xm_draw_static_labels ; --------------------------------- _xm_draw_static_labels:: -;src/main.c:379: wc_prsrw(&win_xm, "File:", ROW_FILE, 1, 5); +;src/main.c:444: wc_prsrw(&win_xm, "File:", ROW_FILE, 1, 5); ld hl, #0x0005 push hl ld hl, #0x102 @@ -1311,7 +1456,7 @@ _xm_draw_static_labels:: ld de, #___str_7 ld hl, #_win_xm call _wc_prsrw -;src/main.c:380: wc_prsrw_attr(&win_xm, file_name, ROW_FILE, 7, strlen(file_name), ATTR_VALUE); +;src/main.c:445: wc_prsrw_attr(&win_xm, file_name, ROW_FILE, 7, strlen(file_name), ATTR_VALUE); ld hl, #_file_name call _strlen ld a, #0x71 @@ -1323,7 +1468,7 @@ _xm_draw_static_labels:: ld de, #_file_name ld hl, #_win_xm call _wc_prsrw_attr -;src/main.c:381: wc_prsrw(&win_xm, "Status:", ROW_STATUS, 1, 7); +;src/main.c:446: wc_prsrw(&win_xm, "Status:", ROW_STATUS, 1, 7); ld hl, #0x0007 push hl ld hl, #0x103 @@ -1331,7 +1476,7 @@ _xm_draw_static_labels:: ld de, #___str_8 ld hl, #_win_xm call _wc_prsrw -;src/main.c:384: wc_prsrw(&win_xm, HINT_TEXT, ROW_HINT, 2, sizeof(HINT_TEXT) - 1); +;src/main.c:449: wc_prsrw(&win_xm, HINT_TEXT, ROW_HINT, 2, sizeof(HINT_TEXT) - 1); ld hl, #0x0024 push hl ld hl, #0x20a @@ -1339,7 +1484,7 @@ _xm_draw_static_labels:: ld de, #___str_9 ld hl, #_win_xm call _wc_prsrw -;src/main.c:385: } +;src/main.c:450: } ret ___str_7: .ascii "File:" @@ -1350,7 +1495,7 @@ ___str_8: ___str_9: .ascii "PgUp/PgDn:Track Esc:Stop Space:Leave" .db 0x00 -;src/main.c:391: void xm_set_status_attr(const char *msg, u8 attr) +;src/main.c:456: void xm_set_status_attr(const char *msg, u8 attr) ; --------------------------------- ; Function xm_set_status_attr ; --------------------------------- @@ -1359,7 +1504,7 @@ _xm_set_status_attr:: ld ix, #0 add ix, sp push af -;src/main.c:395: while (msg[i] && i < STATUS_VALUE_WIDTH) +;src/main.c:460: while (msg[i] && i < STATUS_VALUE_WIDTH) ld e, #0x00 00102$: ld a, e @@ -1375,7 +1520,7 @@ _xm_set_status_attr:: ld a, e sub a, #0x18 jr nc, 00119$ -;src/main.c:397: status_buf[i] = msg[i]; +;src/main.c:462: status_buf[i] = msg[i]; ld a, #<(_status_buf) add a, e ld -2 (ix), a @@ -1387,16 +1532,16 @@ _xm_set_status_attr:: ld h, -1 (ix) ld (hl), c pop hl -;src/main.c:398: i++; +;src/main.c:463: i++; inc e jp 00102$ -;src/main.c:400: while (i < STATUS_VALUE_WIDTH) +;src/main.c:465: while (i < STATUS_VALUE_WIDTH) 00119$: 00105$: ld a, e sub a, #0x18 jr nc, 00107$ -;src/main.c:401: status_buf[i++] = ' '; +;src/main.c:466: status_buf[i++] = ' '; ld hl, #_status_buf ld d, #0x00 add hl, de @@ -1404,7 +1549,7 @@ _xm_set_status_attr:: ld (hl), #0x20 jp 00105$ 00107$: -;src/main.c:403: wc_prsrw_attr(&win_xm, status_buf, ROW_STATUS, STATUS_VALUE_X, STATUS_VALUE_WIDTH, attr); +;src/main.c:468: wc_prsrw_attr(&win_xm, status_buf, ROW_STATUS, STATUS_VALUE_X, STATUS_VALUE_WIDTH, attr); ld hl, #_win_xm ld a, 4 (ix) push af @@ -1415,25 +1560,25 @@ _xm_set_status_attr:: push de ld de, #_status_buf call _wc_prsrw_attr -;src/main.c:404: } +;src/main.c:469: } ld sp, ix pop ix pop hl inc sp jp (hl) -;src/main.c:406: void xm_set_status(const char *msg) +;src/main.c:471: void xm_set_status(const char *msg) ; --------------------------------- ; Function xm_set_status ; --------------------------------- _xm_set_status:: -;src/main.c:408: xm_set_status_attr(msg, ATTR_VALUE); +;src/main.c:473: xm_set_status_attr(msg, ATTR_VALUE); ld a, #0x71 push af inc sp call _xm_set_status_attr -;src/main.c:409: } +;src/main.c:474: } ret -;src/main.c:416: void xm_set_status_code(const char *msg, u8 code) +;src/main.c:481: void xm_set_status_code(const char *msg, u8 code) ; --------------------------------- ; Function xm_set_status_code ; --------------------------------- @@ -1443,62 +1588,62 @@ _xm_set_status_code:: add ix, sp dec sp ex de, hl -;src/main.c:421: while (msg[i] && i < sizeof(status_code_buf) - 7) +;src/main.c:486: while (msg[i] && i < sizeof(status_code_buf) - 7) ld c, #0x00 00102$: ld l, c ld h, #0x00 add hl, de ld b, (hl) -;src/main.c:423: status_code_buf[i] = msg[i]; +;src/main.c:488: status_code_buf[i] = msg[i]; ld a, #<(_status_code_buf) add a, c ld l, a ld a, #>(_status_code_buf) adc a, #0x00 ld h, a -;src/main.c:424: i++; +;src/main.c:489: i++; ld a, c inc a ld -1 (ix), a -;src/main.c:421: while (msg[i] && i < sizeof(status_code_buf) - 7) +;src/main.c:486: while (msg[i] && i < sizeof(status_code_buf) - 7) ld a, b or a, a jr z, 00104$ ld a, c sub a, #0x11 jr nc, 00104$ -;src/main.c:423: status_code_buf[i] = msg[i]; +;src/main.c:488: status_code_buf[i] = msg[i]; ld (hl), b -;src/main.c:424: i++; +;src/main.c:489: i++; ld c, -1 (ix) jp 00102$ 00104$: -;src/main.c:427: status_code_buf[i++] = ' '; +;src/main.c:492: status_code_buf[i++] = ' '; ld c, -1 (ix) ld (hl), #0x20 -;src/main.c:428: status_code_buf[i++] = '('; +;src/main.c:493: status_code_buf[i++] = '('; ld l, c inc c ld h, #0x00 ld de, #_status_code_buf add hl, de ld (hl), #0x28 -;src/main.c:429: status_code_buf[i++] = '0'; +;src/main.c:494: status_code_buf[i++] = '0'; ld l, c inc c ld h, #0x00 ld de, #_status_code_buf add hl, de ld (hl), #0x30 -;src/main.c:430: status_code_buf[i++] = 'x'; +;src/main.c:495: status_code_buf[i++] = 'x'; ld l, c inc c ld h, #0x00 ld de, #_status_code_buf add hl, de ld (hl), #0x78 -;src/main.c:431: status_code_buf[i++] = hexch[(code >> 4) & 0xF]; +;src/main.c:496: status_code_buf[i++] = hexch[(code >> 4) & 0xF]; ld l, c inc c ld h, #0x00 @@ -1510,14 +1655,14 @@ _xm_set_status_code:: rlca rlca and a, #0xf - add a, #<(_xm_set_status_code_hexch_10000_129) + add a, #<(_xm_set_status_code_hexch_10000_141) ld e, a ld a, #0x00 - adc a, #>(_xm_set_status_code_hexch_10000_129) + adc a, #>(_xm_set_status_code_hexch_10000_141) ld d, a ld a, (de) ld (hl), a -;src/main.c:432: status_code_buf[i++] = hexch[code & 0xF]; +;src/main.c:497: status_code_buf[i++] = hexch[code & 0xF]; ld l, c inc c ld h, #0x00 @@ -1525,42 +1670,42 @@ _xm_set_status_code:: add hl, de ld a, 4 (ix) and a, #0x0f - add a, #<(_xm_set_status_code_hexch_10000_129) + add a, #<(_xm_set_status_code_hexch_10000_141) ld e, a ld a, #0x00 - adc a, #>(_xm_set_status_code_hexch_10000_129) + adc a, #>(_xm_set_status_code_hexch_10000_141) ld d, a ld a, (de) ld (hl), a -;src/main.c:433: status_code_buf[i++] = ')'; +;src/main.c:498: status_code_buf[i++] = ')'; ld l, c inc c ld h, #0x00 ld de, #_status_code_buf add hl, de ld (hl), #0x29 -;src/main.c:434: status_code_buf[i] = 0; +;src/main.c:499: status_code_buf[i] = 0; ld l, c ld h, #0x00 ld de, #_status_code_buf add hl, de ld (hl), #0x00 -;src/main.c:436: xm_set_status_attr(status_code_buf, ATTR_ERROR); +;src/main.c:501: xm_set_status_attr(status_code_buf, ATTR_ERROR); ld a, #0x72 push af inc sp ld hl, #_status_code_buf call _xm_set_status_attr -;src/main.c:437: } +;src/main.c:502: } inc sp pop ix pop hl inc sp jp (hl) -_xm_set_status_code_hexch_10000_129: +_xm_set_status_code_hexch_10000_141: .ascii "0123456789ABCDEF" .db 0x00 -;src/main.c:450: void put_hex2(char *dst, u8 val) +;src/main.c:515: void put_hex2(char *dst, u8 val) ; --------------------------------- ; Function put_hex2 ; --------------------------------- @@ -1569,8 +1714,8 @@ _put_hex2:: ld ix, #0 add ix, sp ex de, hl -;src/main.c:453: dst[0] = hexch[(val >> 4) & 0xF]; - ld bc, #_put_hex2_hexch_10000_132+0 +;src/main.c:518: dst[0] = hexch[(val >> 4) & 0xF]; + ld bc, #_put_hex2_hexch_10000_144+0 ld a, 4 (ix) rlca rlca @@ -1582,7 +1727,7 @@ _put_hex2:: add hl, bc ld a, (hl) ld (de), a -;src/main.c:454: dst[1] = hexch[val & 0xF]; +;src/main.c:519: dst[1] = hexch[val & 0xF]; inc de ld a, 4 (ix) and a, #0x0f @@ -1591,15 +1736,15 @@ _put_hex2:: add hl, bc ld a, (hl) ld (de), a -;src/main.c:455: } +;src/main.c:520: } pop ix pop hl inc sp jp (hl) -_put_hex2_hexch_10000_132: +_put_hex2_hexch_10000_144: .ascii "0123456789ABCDEF" .db 0x00 -;src/main.c:457: void put_dec3(char *dst, u16 val) +;src/main.c:522: void put_dec3(char *dst, u16 val) ; --------------------------------- ; Function put_dec3 ; --------------------------------- @@ -1610,7 +1755,7 @@ _put_dec3:: push af ld c, l ld b, h -;src/main.c:459: dst[0] = '0' + (val / 100) % 10; +;src/main.c:524: dst[0] = '0' + (val / 100) % 10; pop hl push de push bc @@ -1625,7 +1770,7 @@ _put_dec3:: ld a, e add a, #0x30 ld (bc), a -;src/main.c:460: dst[1] = '0' + (val / 10) % 10; +;src/main.c:525: dst[1] = '0' + (val / 10) % 10; ld l, c ld h, b inc hl @@ -1643,7 +1788,7 @@ _put_dec3:: ld a, e add a, #0x30 ld (hl), a -;src/main.c:461: dst[2] = '0' + val % 10; +;src/main.c:526: dst[2] = '0' + val % 10; inc bc inc bc push bc @@ -1655,11 +1800,11 @@ _put_dec3:: ld a, e add a, #0x30 ld (bc), a -;src/main.c:462: } +;src/main.c:527: } ld sp, ix pop ix ret -;src/main.c:464: void put_time(char *dst, u32 sec) +;src/main.c:529: void put_time(char *dst, u32 sec) ; --------------------------------- ; Function put_time ; --------------------------------- @@ -1668,7 +1813,7 @@ _put_time:: ld ix, #0 add ix, sp push hl -;src/main.c:466: u8 m = (sec / 60) % 100; +;src/main.c:531: u8 m = (sec / 60) % 100; ld hl, #0x0000 push hl ld l, #0x3c @@ -1688,7 +1833,7 @@ _put_time:: pop af pop af ld c, e -;src/main.c:467: u8 s = sec % 60; +;src/main.c:532: u8 s = sec % 60; push bc ld hl, #0x0000 push hl @@ -1702,7 +1847,7 @@ _put_time:: pop af pop af pop bc -;src/main.c:469: dst[0] = '0' + (m / 10) % 10; +;src/main.c:534: dst[0] = '0' + (m / 10) % 10; ld d, c push de ld l, #0x0a @@ -1717,7 +1862,7 @@ _put_time:: pop hl push hl ld (hl), a -;src/main.c:470: dst[1] = '0' + m % 10; +;src/main.c:535: dst[1] = '0' + m % 10; pop bc push bc inc bc @@ -1731,13 +1876,13 @@ _put_time:: pop bc add a, #0x30 ld (bc), a -;src/main.c:471: dst[2] = ':'; +;src/main.c:536: dst[2] = ':'; pop hl push hl inc hl inc hl ld (hl), #0x3a -;src/main.c:472: dst[3] = '0' + (s / 10) % 10; +;src/main.c:537: dst[3] = '0' + (s / 10) % 10; pop bc push bc inc bc @@ -1756,7 +1901,7 @@ _put_time:: pop bc add a, #0x30 ld (bc), a -;src/main.c:473: dst[4] = '0' + s % 10; +;src/main.c:538: dst[4] = '0' + s % 10; ld a, -2 (ix) add a, #0x04 ld c, a @@ -1771,19 +1916,19 @@ _put_time:: pop bc add a, #0x30 ld (bc), a -;src/main.c:474: } +;src/main.c:539: } ld sp, ix pop ix pop hl pop af pop af jp (hl) -;src/main.c:503: void xm_draw_stats_labels() +;src/main.c:568: void xm_draw_stats_labels() ; --------------------------------- ; Function xm_draw_stats_labels ; --------------------------------- _xm_draw_stats_labels:: -;src/main.c:507: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); +;src/main.c:572: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); ld hl, #0x0009 push hl ld hl, #0x104 @@ -1791,7 +1936,7 @@ _xm_draw_stats_labels:: ld de, #___str_12 ld hl, #_win_xm call _wc_prsrw -;src/main.c:508: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); +;src/main.c:573: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); ld hl, #0x0007 push hl ld hl, #0xc04 @@ -1799,7 +1944,7 @@ _xm_draw_stats_labels:: ld de, #___str_13 ld hl, #_win_xm call _wc_prsrw -;src/main.c:509: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); +;src/main.c:574: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); ld hl, #0x0006 push hl ld hl, #0x1504 @@ -1807,7 +1952,7 @@ _xm_draw_stats_labels:: ld de, #___str_14 ld hl, #_win_xm call _wc_prsrw -;src/main.c:511: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); +;src/main.c:576: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); ld hl, #0x0005 push hl ld hl, #0x106 @@ -1815,7 +1960,7 @@ _xm_draw_stats_labels:: ld de, #___str_15 ld hl, #_win_xm call _wc_prsrw -;src/main.c:512: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); +;src/main.c:577: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); ld hl, #0x0003 push hl ld hl, #0xc06 @@ -1823,30 +1968,30 @@ _xm_draw_stats_labels:: ld de, #___str_16 ld hl, #_win_xm call _wc_prsrw -;src/main.c:514: for (i = 0; i < BAR_WIDTH; i++) +;src/main.c:579: for (i = 0; i < BAR_WIDTH; i++) ld de, #_barbuf+0 ld c, #0x00 00103$: -;src/main.c:515: barbuf[i] = ' '; +;src/main.c:580: barbuf[i] = ' '; ld l, c ld h, #0x00 add hl, de ld (hl), #0x20 -;src/main.c:514: for (i = 0; i < BAR_WIDTH; i++) +;src/main.c:579: for (i = 0; i < BAR_WIDTH; i++) inc c ld a, c sub a, #0x20 jr c, 00103$ -;src/main.c:516: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); -;src/main.c:507: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); -;src/main.c:516: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); +;src/main.c:581: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); +;src/main.c:572: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); +;src/main.c:581: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); ld hl, #0x0020 push hl ld hl, #0x408 push hl ld hl, #_win_xm call _wc_prsrw -;src/main.c:518: bar_attr_ofs = (wc_gadrw(&win_xm, ROW_BAR, BAR_X) & 0x3FFF) | 0x0080; +;src/main.c:583: bar_attr_ofs = (wc_gadrw(&win_xm, ROW_BAR, BAR_X) & 0x3FFF) | 0x0080; ld hl, #0x408 push hl ld hl, #_win_xm @@ -1856,10 +2001,10 @@ _xm_draw_stats_labels:: ld d, a set 7, e ld (_bar_attr_ofs), de -;src/main.c:520: for (i = 0; i < BAR_WIDTH; i++) +;src/main.c:585: for (i = 0; i < BAR_WIDTH; i++) ld c, #0x00 00105$: -;src/main.c:521: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = ATTR_BAR_EMPTY; +;src/main.c:586: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = ATTR_BAR_EMPTY; ld hl, (_bar_attr_ofs) ld e, l ld a, h @@ -1869,12 +2014,12 @@ _xm_draw_stats_labels:: ld h, #0x00 add hl, de ld (hl), #0x07 -;src/main.c:520: for (i = 0; i < BAR_WIDTH; i++) +;src/main.c:585: for (i = 0; i < BAR_WIDTH; i++) inc c ld a, c sub a, #0x20 jr c, 00105$ -;src/main.c:522: } +;src/main.c:587: } ret ___str_12: .ascii "Pattern:#" @@ -1891,7 +2036,7 @@ ___str_15: ___str_16: .ascii " / " .db 0x00 -;src/main.c:524: void draw_progress_bar(u32 samples, u32 total) +;src/main.c:589: void draw_progress_bar(u32 samples, u32 total) ; --------------------------------- ; Function draw_progress_bar ; --------------------------------- @@ -1902,13 +2047,13 @@ _draw_progress_bar:: ld c, e ld b, d ex de, hl -;src/main.c:528: if (total) +;src/main.c:593: if (total) ld a, 7 (ix) or a, 6 (ix) or a, 5 (ix) or a, 4 (ix) jr z, 00104$ -;src/main.c:530: filled = (u16)(((u32)samples * BAR_WIDTH) / total); +;src/main.c:595: filled = (u16)(((u32)samples * BAR_WIDTH) / total); ld l, c ld h, b ld a, #0x05 @@ -1928,7 +2073,7 @@ _draw_progress_bar:: call __divulong pop af pop af -;src/main.c:531: if (filled > BAR_WIDTH) +;src/main.c:596: if (filled > BAR_WIDTH) ld c,e ld b,d ld a, #0x20 @@ -1936,17 +2081,17 @@ _draw_progress_bar:: ld a, #0x00 sbc a, d jr nc, 00120$ -;src/main.c:532: filled = BAR_WIDTH; +;src/main.c:597: filled = BAR_WIDTH; ld bc, #0x0020 jp 00120$ 00104$: -;src/main.c:535: filled = 0; // total length unknown (measurement timed out) - show empty +;src/main.c:600: filled = 0; // total length unknown (measurement timed out) - show empty ld bc, #0x0000 -;src/main.c:537: for (i = 0; i < BAR_WIDTH; i++) +;src/main.c:602: for (i = 0; i < BAR_WIDTH; i++) 00120$: ld de, #0x0000 00107$: -;src/main.c:538: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = (i < filled) ? ATTR_BAR_FILLED : ATTR_BAR_EMPTY; +;src/main.c:603: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = (i < filled) ? ATTR_BAR_FILLED : ATTR_BAR_EMPTY; ld hl, (_bar_attr_ofs) ld a, h add a, #0xc0 @@ -1963,7 +2108,7 @@ _draw_progress_bar:: ld a, #0x07 00112$: ld (hl), a -;src/main.c:537: for (i = 0; i < BAR_WIDTH; i++) +;src/main.c:602: for (i = 0; i < BAR_WIDTH; i++) inc de ld l, e ld h, d @@ -1972,13 +2117,13 @@ _draw_progress_bar:: ld a, h sbc a, #0x00 jr c, 00107$ -;src/main.c:539: } +;src/main.c:604: } pop ix pop hl pop af pop af jp (hl) -;src/main.c:541: void xm_update_info() +;src/main.c:606: void xm_update_info() ; --------------------------------- ; Function xm_update_info ; --------------------------------- @@ -1989,53 +2134,53 @@ _xm_update_info:: ld hl, #-8 add hl, sp ld sp, hl -;src/main.c:547: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); +;src/main.c:612: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); ld a, (_xm_handle) ld l, a ld a, #0x0b call _esp_wr_reg8 -;src/main.c:548: esp_cmd(ESP_CMD_TRACK_GET_INFO); +;src/main.c:613: esp_cmd(ESP_CMD_TRACK_GET_INFO); ld a, #0xa8 call _esp_cmd -;src/main.c:549: esp_wait_busy(50); // 1s - a plain info read should be near-instant +;src/main.c:614: esp_wait_busy(50); // 1s - a plain info read should be near-instant ld hl, #0x0032 call _esp_wait_busy -;src/main.c:554: status = esp_rd_reg8(ESP_REG_TRACK_STATUS); +;src/main.c:619: status = esp_rd_reg8(ESP_REG_TRACK_STATUS); ld a, #0x28 call _esp_rd_reg8 ld -1 (ix), a -;src/main.c:555: if (last_track_status == TRACK_OBJ_ST_PLAYING && status == TRACK_OBJ_ST_STOPPED) +;src/main.c:620: if (last_track_status == TRACK_OBJ_ST_PLAYING && status == TRACK_OBJ_ST_STOPPED) ld a, (_last_track_status) sub a, #0x21 jr nz, 00102$ ld a, -1 (ix) sub a, #0x20 jr nz, 00102$ -;src/main.c:557: esp_cmd(ESP_CMD_KILL_OBJECTS); +;src/main.c:622: esp_cmd(ESP_CMD_KILL_OBJECTS); ld a, #0xe4 call _esp_cmd -;src/main.c:558: esp_wait_busy(100); +;src/main.c:623: esp_wait_busy(100); ld hl, #0x0064 call _esp_wait_busy -;src/main.c:559: wc_rresb(&win_xm); +;src/main.c:624: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:560: wc_exit(WC_NEXT_FILE); +;src/main.c:625: wc_exit(WC_NEXT_FILE); ld a, #0x02 call _wc_exit 00102$: -;src/main.c:562: last_track_status = status; +;src/main.c:627: last_track_status = status; ld a, -1 (ix) ld (#_last_track_status), a -;src/main.c:564: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); +;src/main.c:629: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); ld a, #0x2b call _esp_rd_reg8 ld -6 (ix), a -;src/main.c:565: row = esp_rd_reg8(ESP_REG_TRACK_ROW); +;src/main.c:630: row = esp_rd_reg8(ESP_REG_TRACK_ROW); ld a, #0x2c call _esp_rd_reg8 ld -5 (ix), a -;src/main.c:566: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); +;src/main.c:631: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); ld a, #0x02 push af inc sp @@ -2044,33 +2189,33 @@ _xm_update_info:: ex de, hl ld a, #0x31 call _esp_rd_regs -;src/main.c:567: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES); +;src/main.c:632: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES); ld a, #0x2d call _esp_rd_reg32 ld -4 (ix), e ld -3 (ix), d ld -2 (ix), l ld -1 (ix), h -;src/main.c:569: if (!total_samples) +;src/main.c:634: if (!total_samples) ld a, (_total_samples+3) ld iy, #_total_samples or a, 2 (iy) or a, 1 (iy) or a, 0 (iy) jr nz, 00105$ -;src/main.c:570: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES); +;src/main.c:635: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES); ld a, #0x36 call _esp_rd_reg32 ld (_total_samples), de ld (_total_samples + 2), hl 00105$: -;src/main.c:572: put_hex2(hexbuf, pattern); +;src/main.c:637: put_hex2(hexbuf, pattern); ld a, -6 (ix) push af inc sp ld hl, #_hexbuf call _put_hex2 -;src/main.c:573: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 10, 2, ATTR_VALUE); +;src/main.c:638: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 10, 2, ATTR_VALUE); ld a, #0x71 push af inc sp @@ -2081,13 +2226,13 @@ _xm_update_info:: ld de, #_hexbuf ld hl, #_win_xm call _wc_prsrw_attr -;src/main.c:575: put_hex2(hexbuf, row); +;src/main.c:640: put_hex2(hexbuf, row); ld a, -5 (ix) push af inc sp ld hl, #_hexbuf call _put_hex2 -;src/main.c:576: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 19, 2, ATTR_VALUE); +;src/main.c:641: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 19, 2, ATTR_VALUE); ld a, #0x71 push af inc sp @@ -2098,12 +2243,12 @@ _xm_update_info:: ld de, #_hexbuf ld hl, #_win_xm call _wc_prsrw_attr -;src/main.c:578: put_dec3(decbuf, bpm); +;src/main.c:643: put_dec3(decbuf, bpm); pop de push de ld hl, #_decbuf call _put_dec3 -;src/main.c:579: wc_prsrw_attr(&win_xm, decbuf, ROW_STATS, 27, 3, ATTR_VALUE); +;src/main.c:644: wc_prsrw_attr(&win_xm, decbuf, ROW_STATS, 27, 3, ATTR_VALUE); ld a, #0x71 push af inc sp @@ -2114,7 +2259,7 @@ _xm_update_info:: ld de, #_decbuf ld hl, #_win_xm call _wc_prsrw_attr -;src/main.c:581: put_time(timebuf, samples / 44100UL); +;src/main.c:646: put_time(timebuf, samples / 44100UL); ld hl, #0x0000 push hl ld hl, #0xac44 @@ -2129,7 +2274,7 @@ _xm_update_info:: push de ld hl, #_timebuf call _put_time -;src/main.c:582: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 7, 5, ATTR_VALUE); +;src/main.c:647: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 7, 5, ATTR_VALUE); ld a, #0x71 push af inc sp @@ -2140,7 +2285,7 @@ _xm_update_info:: ld de, #_timebuf ld hl, #_win_xm call _wc_prsrw_attr -;src/main.c:584: put_time(timebuf, total_samples / 44100UL); +;src/main.c:649: put_time(timebuf, total_samples / 44100UL); ld hl, #0x0000 push hl ld hl, #0xac44 @@ -2153,7 +2298,7 @@ _xm_update_info:: push de ld hl, #_timebuf call _put_time -;src/main.c:585: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 15, 5, ATTR_VALUE); +;src/main.c:650: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 15, 5, ATTR_VALUE); ld a, #0x71 push af inc sp @@ -2164,7 +2309,7 @@ _xm_update_info:: ld de, #_timebuf ld hl, #_win_xm call _wc_prsrw_attr -;src/main.c:587: draw_progress_bar(samples, total_samples); +;src/main.c:652: draw_progress_bar(samples, total_samples); ld hl, (_total_samples + 2) push hl ld hl, (_total_samples) @@ -2174,137 +2319,162 @@ _xm_update_info:: ld l, -2 (ix) ld h, -1 (ix) call _draw_progress_bar -;src/main.c:589: } +;src/main.c:654: } ld sp, ix pop ix ret -;src/main.c:591: void main_start() +;src/main.c:656: void main_start() ; --------------------------------- ; Function main_start ; --------------------------------- _main_start:: + push ix + ld ix, #0 + add ix, sp dec sp -;src/main.c:595: copy_file_name(); +;src/main.c:660: copy_file_name(); call _copy_file_name -;src/main.c:607: wc_prwow(&win_xm); +;src/main.c:672: memcpy(&win_xm, &win_xm_tpl, sizeof(win_xm)); + ld de, #_win_xm + ld hl, #_win_xm_tpl + ld bc, #0x0012 + ldir +;src/main.c:673: win_xm.x_pos = wc_center(wc_screen_width(), win_xm.x_size); + ld hl, #_win_xm + 4 + ld l, (hl) + push hl + call _wc_screen_width + pop hl + call _wc_center + ld (#(_win_xm + 2)), a +;src/main.c:674: win_xm.y_pos = wc_center(*(u8*)_HEI, win_xm.y_size); + ld hl, #_win_xm + 5 + ld l, (hl) + ld a, (#0x600e) + call _wc_center + ld (#(_win_xm + 3)), a +;src/main.c:683: wc_gedpl(); + call _wc_gedpl +;src/main.c:684: wc_key_wait_release(); + call _wc_key_wait_release +;src/main.c:685: wc_prwow(&win_xm); ld hl, #_win_xm call _wc_prwow -;src/main.c:608: xm_draw_static_labels(); +;src/main.c:686: xm_draw_static_labels(); call _xm_draw_static_labels -;src/main.c:609: xm_set_status("Loading, please wait..."); +;src/main.c:687: xm_set_status("Loading, please wait..."); ld hl, #___str_17 call _xm_set_status -;src/main.c:611: if (state_esp == 0xFF) +;src/main.c:689: if (state_esp == 0xFF) ld a, (_state_esp) inc a jr nz, 00102$ -;src/main.c:612: state_esp = esp_init() ? 1 : 2; +;src/main.c:690: state_esp = esp_init() ? 1 : 2; call _esp_init or a, a ld a, #0x01 - jr nz, 00126$ + jr nz, 00127$ ld a, #0x02 -00126$: +00127$: ld (#_state_esp), a 00102$: -;src/main.c:614: if (state_esp != 1) +;src/main.c:692: if (state_esp != 1) ld a, (_state_esp) dec a jr z, 00104$ -;src/main.c:616: error_esp(); - inc sp - jp _error_esp -;src/main.c:617: return; - jp 00123$ +;src/main.c:694: error_esp(); + call _error_esp +;src/main.c:695: return; + jp 00124$ 00104$: -;src/main.c:620: total_samples = 0; +;src/main.c:698: total_samples = 0; xor a, a ld (_total_samples+0), a ld (_total_samples+1), a ld (_total_samples+2), a ld (_total_samples+3), a -;src/main.c:622: if (!play_xm()) +;src/main.c:700: if (!play_xm()) call _play_xm or a, a jr nz, 00109$ -;src/main.c:624: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) +;src/main.c:702: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) ld a, (_last_esp_status) sub a, #0x99 jr nz, 00106$ -;src/main.c:625: error_oom(); - inc sp - jp _error_oom - jp 00123$ +;src/main.c:703: error_oom(); + call _error_oom + jp 00124$ 00106$: -;src/main.c:627: error_playback(); - inc sp -;src/main.c:628: return; - jp _error_playback +;src/main.c:705: error_playback(); + call _error_playback +;src/main.c:706: return; + jp 00124$ 00109$: -;src/main.c:631: xm_set_status("Playing"); +;src/main.c:709: xm_set_status("Playing"); ld hl, #___str_18 call _xm_set_status -;src/main.c:632: xm_draw_stats_labels(); +;src/main.c:710: xm_draw_stats_labels(); call _xm_draw_stats_labels -;src/main.c:633: last_track_status = TRACK_OBJ_ST_PLAYING; +;src/main.c:711: last_track_status = TRACK_OBJ_ST_PLAYING; ld hl, #_last_track_status ld (hl), #0x21 -;src/main.c:634: xm_update_info(); +;src/main.c:712: xm_update_info(); call _xm_update_info -;src/main.c:636: frame_ctr = 0; - ld iy, #0 - add iy, sp - ld 0 (iy), #0x00 -;src/main.c:639: while (1) -00121$: -;src/main.c:643: __endasm; +;src/main.c:714: frame_ctr = 0; + ld -1 (ix), #0x00 +;src/main.c:718: while (1) +00122$: +;src/main.c:722: __endasm; halt -;src/main.c:645: if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz - ld iy, #0 - add iy, sp - inc 0 (iy) - ld a, 0 (iy) +;src/main.c:724: if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz + inc -1 (ix) + ld a, -1 (ix) sub a, #0x0a jr c, 00111$ -;src/main.c:647: frame_ctr = 0; - ld 0 (iy), #0x00 -;src/main.c:648: xm_update_info(); +;src/main.c:726: frame_ctr = 0; + ld -1 (ix), #0x00 +;src/main.c:727: xm_update_info(); call _xm_update_info 00111$: -;src/main.c:651: if (wc_key_pgdn()) // PgDn - unload and go to next file +;src/main.c:730: if (wc_key_pgdn() || wc_key_enter()) // PgDn or Enter - unload and go to next file call _wc_key_pgdn or a, a + jr nz, 00112$ + call _wc_key_enter + or a, a jr z, 00113$ -;src/main.c:652: unload_and_exit(WC_NEXT_FILE); +00112$: +;src/main.c:731: unload_and_exit(WC_NEXT_FILE); ld a, #0x02 call _unload_and_exit 00113$: -;src/main.c:654: if (wc_key_pgup()) // PgUp - unload and go to previous file +;src/main.c:733: if (wc_key_pgup()) // PgUp - unload and go to previous file call _wc_key_pgup or a, a - jr z, 00115$ -;src/main.c:655: unload_and_exit(WC_PREV_FILE); + jr z, 00116$ +;src/main.c:734: unload_and_exit(WC_PREV_FILE); ld a, #0x04 call _unload_and_exit -00115$: -;src/main.c:657: if (wc_key_esc()) // Esc - unload and exit +00116$: +;src/main.c:736: if (wc_key_esc()) // Esc - unload and exit call _wc_key_esc or a, a - jr z, 00117$ -;src/main.c:658: unload_and_exit(WC_EXIT); + jr z, 00118$ +;src/main.c:737: unload_and_exit(WC_EXIT); xor a, a call _unload_and_exit -00117$: -;src/main.c:660: if (wc_key_space()) // Space - leave the track playing, just exit +00118$: +;src/main.c:739: if (wc_key_space()) // Space - leave the track playing, just exit call _wc_key_space or a, a - jr z, 00121$ -;src/main.c:661: leave_playing_and_exit(); + jr z, 00122$ +;src/main.c:740: leave_playing_and_exit(); call _leave_playing_and_exit - jp 00121$ -00123$: -;src/main.c:663: } + jp 00122$ +00124$: +;src/main.c:742: } inc sp + pop ix ret ___str_17: .ascii "Loading, please wait..." @@ -2312,12 +2482,12 @@ ___str_17: ___str_18: .ascii "Playing" .db 0x00 -;src/main.c:666: void main() +;src/main.c:745: void main() ; --------------------------------- ; Function main ; --------------------------------- _main:: -;src/main.c:676: __endasm; +;src/main.c:755: __endasm; ld (_ret_sp), sp ld (_call_type), a ld (_p_file_name), bc @@ -2325,24 +2495,24 @@ _main:: ld (_file_ext), a ld (_filesize), hl ld (_filesize + 2), de -;src/main.c:678: switch (call_type) +;src/main.c:757: switch (call_type) ld a, (_call_type+0) or a, a jp z, _main_start ld a, (_call_type) sub a, #0x03 jp z, _about -;src/main.c:680: case WC_CALL_EXT: -;src/main.c:681: main_start(); -;src/main.c:682: break; -;src/main.c:684: case WC_CALL_MENU: -;src/main.c:685: about(); -;src/main.c:686: break; -;src/main.c:688: default: -;src/main.c:689: wc_exit(WC_EXIT); +;src/main.c:759: case WC_CALL_EXT: +;src/main.c:760: main_start(); +;src/main.c:761: break; +;src/main.c:763: case WC_CALL_MENU: +;src/main.c:764: about(); +;src/main.c:765: break; +;src/main.c:767: default: +;src/main.c:768: wc_exit(WC_EXIT); xor a, a -;src/main.c:690: } -;src/main.c:691: } +;src/main.c:769: } +;src/main.c:770: } jp _wc_exit .area _CODE .area _INITIALIZER diff --git a/obj/out.bin b/obj/out.bin index 0195211fbf9af05d3ed028933545a76411d17094..7553f205e7dac991391c54408c6941fa235a45f5 100644 GIT binary patch delta 2047 zcmah~drXs86#rg*N^ze~1ZDBNgK2HBl$Lb}`fWM}V?;qs@WGhHdzc6-;b;hj%?1k7mUtqY|qU#x+k;IAhdGJ)@FL-d4#$viHSMx2eG~l-)_fC z+ljuNNimue-eu@_)e|E>mPsn4$3$$l7iaW5@5C2rdwmDcQTuBw+BY}PDO;+|${ zT}@S!R9stM`_BGq*TDnT&G0g}xR^Nmjko}n49@iAYSCJ=k*q_USsyMrChNnSj>!ph z(Tq7p$~j~a5I*1mHgqt4J-Z&|>Ip{(hF5#xizGLn!MAw8Vpzi$a7+Mx#ar1Jyu+un zbxuN8%b(CN{$xoQPb=XULP{%9d^!{A(>5|o>k)0hQg_JwAX?IF z3SDam7kYCOD~8f@czH)uE{!Ux0vJYFJ*G5HD2K<7DyJrFOO=)hW#>37`M7X<=|Gd2 z-(I@VJzyDF7WR85D=OwA@O74lUBHa=f;W*%#Ue3`jgMeM1h7;0mrIh zUIz^Z1i(CmpYN9I#vFry)2ZS-MDcF|Kt~LDVz_SFFr5HKP8Ex$0NAYEw5RNt(l{=o zn+&Ous<_6Ly%Tk@)Npf$dnnnK0LoAjlalI`!sjSSX%WU8Vlp!*@`gdNjJlz1Kwb{@ zk6j%zCC?j9WU7}lDFw0%X6Tl*-tAB}PB^9NgyoFrLMcx3jAWaUnx-Y-tSQ)_=(dcM#gtVAyU85>H z1*J@*xU|Y%U0l<*Y0zpsg0J}9RwG^%aNp{;#ni^W2p@^#6zL-&#MHDjXD)$>H==OQ zAyBo_GTtwgkY{s~DU4W+``z@YxPqpBbo4$jkirV2(oJ1cEkR2!B&eci8qiW;kt%jg z1GI~@gwit&@Dw1F(^G)>0jxD7zcATidO@Wp_XLjIeRb==!;vk$D3P)B!gGcL88jWm z>t*SZ%zS7wuo4sgy^EwrWQYNJumAGC6nD>&Gd7LuT; zG45>jA$+ov_7LD`q()WrO|`Mo@{piU=oilFZw-P@gnyhQ(@O|TRk3sW4Uocs{PUzT z|0rdTrbkq))>3r&()zJ z{`yHTypgcO@PmIiO5aoz_L|b*W|Jf+s+RT~e&xmP HoDJ;10qt?d delta 1826 zcmZ`)eQZ-z6uZl2q98}jj*yqxzt z=XbvDxu@Nyx=#t(=aFxOZIs)F!vPUDa3;p4kk3{{(MJBch|hIx|`0w8J~YJFVJeNVRI{oLb0UrU~!ZKAu#H zgsu!JZgNuPARUjD)LDTe##h=G^PpNtFsD1+1hLeQa_&aIM)ZIIYe(q!KSv$3+CPw0|L|Bb{dSvohFs1 zQkc$%P$pGmB8xf_14-Kwt{Wf|Ugdn4mi4i?Id3fPwpMxl&IYeXKHU2Hu|@GX^QVJz_6C{A8EprWC^-Sa!{Q#}gyRY0(uW2Cl0^EVMl#+%E`UG4GK;9hG9 zpY6jRSYNWGBex_wqLoqnxAm!KXTJuA{YiI+AS6IJ-3Mm!oNala_gH}w6YzRRQ^GwX*fInCgXw9DQ}uSNVWJ6#g>Ur)M+jgG;DkjUW-8BDtQ zVPnY>Umd^@4HW+S2u!VaO(wC1!ESr$qUo8kiU#xCAML#H{O(`xj_r&P z2da$VCi~GU){f2VRQY=qU3A+x8EMPjfc8iT49MB!mF6=4+nw*aP3l@r#rNzr6>!;| zuwY=o>Z(abkrzQ}8Cfp5Z(Ffox1)GZ!T!J@La+C+aZ-3zgWZr0uIHtP{;WknUyClFr>zr>i|cly!a)Y**$$%Hh;iS%1ByiCiLhu37Qm8%y5aCA7G8` zt0I*yLLWg;%*Au|U}IEPk^e{e<3etmt){lz#e)Ur>Q(w8RO*A}QZE_#EVZC)!T>q>ntQA z{4&{te=OQ-`8{$gMbiCS8e6+wc7Ik E09d64YXATM diff --git a/obj/out.hex b/obj/out.hex index 0221df7..f82e488 100644 --- a/obj/out.hex +++ b/obj/out.hex @@ -7,121 +7,130 @@ :2080C300B72807DB571213C3C1803E03D377E133E9474D3E13D3773E01D35778D357DB5768 :2080E30079D3573E03D377C94F3E13D3773E01D35779D357DB57FD210200FD39FD7E00D3BA :2081030057FD7E01D357FD7E02D357FD7E03D3573E03D377E1F1F1E93E13D3773E07D357CF -:20812300DB573E03D377C97D01AF1AED797C01AF1BED79FD210200FD39FD7E0001AF1CEDD2 -:2081430079FD7E01FD4E02FD23CB39CB1F3D01AF26ED79FD7E023D01AF28ED793E13D377C0 -:208163003E03D357DB57DB573E8201AF27ED793E27DBAF0738F93E03D377CD1B8121640090 -:20818300CDE881E1F1F133E93E13D3773E08D357DB573E03D377C9DDE5DD210000DD39213F -:2081A300FBFF39F9DD77FFDD73FDDD72FE2109607EDD77FB237EDD77FC2A09607DDD96FBDD -:2081C3004F7CDD9EFC4779DD96FD78DD9EFE300F3E01CD2180DD96FF20DF3E01C3E381AFC7 -:2081E300DDF9DDE1C9DDE5DD210000DD39F5F5DD75FEDD74FF2109607EDD77FC237EDD7772 -:20820300FD2A09607DDD96FC4F7CDD9EFD4779DD96FE78DD9EFF300E3E01CD2180FE022866 -:20822300E03E01C32A82AFDDF9DDE1C9E5D53E03CDEB80FD210200FD39FD6E003E02CDD4CC -:20824300803EE0CD0880216400CDE8813E0BCD21805F1600E133E9AFCD0880CD8B81CD1B7F -:20826300813E01C98100190A280C7000000000008B82A582A5820100160A24054F00000036 -:208283000000A682A582AF820E20584D2F584D5A2F53334D20506C617965722076302E31A6 -:2082A3002000000E2041626F757420000E0C01584D20506C617965722076302E3100DDE51E -:2082C300DD210000DD3921ECFF39F93EA2CD0880216400CDE8813EE4CD0880216400CDE8A8 -:2082E300813A06B83D280A3A06B8D6022808C3FE823E08C300833E0CC300833E05F533EDDC -:208303005B02B82A04B8CD2F822130B8733E01CD21803208B83A08B83D2804AFC3E8842164 -:208323000C0039EB2102B8010400EDB0AFDD77FCDD77FDDD77FEDD77FFDD7EFBDDB6FADDD8 -:20834300B6F9DDB6F8CA5184DD7EF9D610DD7EFADE00DD7EFBDE00301121000039EB210CED -:208363000039010400EDB0C37C83DD36EC00DD36ED10AFDD77EEDD77EF21050039EB2100AF -:208383000039010400EDB0DD7EF1C6FFDD7EF2CE01473E00CE005F3E00CE005748435ACB0D -:2083A3003BCB18CB19DD71F779F5332100A8CD0E8D210000E5DD6EF1DD66F2E53E03CDEB4C -:2083C30080DD6EFEDD66FFE5DD6EFCDD66FDE53E07CDEB803EE1CD08801164003E03CD9A30 -:2083E30081DD7EF7DD77F5DD36F6003A0260DD77F7DD6EF52600E5210002E5DD7EF7F533A1 -:208403002100A8CD2A81DD5EF1DD56F2DD6EFCDD66FD19DD75FCDD74FDDD7EFEDD8EF3DDF7 -:2084230077FE3003DD34FFDD7EF8DD96F1DD77F8DD7EF9DD9EF2DD77F9DD7EFADD9EF3DDD0 -:2084430077FADD7EFBDD9EF4DD77FBC33C833A06B83D203A3A30B86F3E0BCDD4802E053E17 -:2084630002CDD4802A04B8E52A02B8E53E03CDEB803EF2CD088021FA00CDE8813E01CD21C6 -:20848300803208B83A08B83D2804AFC3E8843EA0CD0880219001CDE8813E01CD2180320824 -:2084A300B83A08B83D2804AFC3E8843A30B86F3E0BCDD4802E013E3ACDD4803EA6CD0880C4 -:2084C300216400CDE8813EA1CD0880216400CDE8813E01CD21803208B83A08B83D2804AF3E -:2084E300C3E8843E01DDF9DDE1C976CD108EB728F9C94F790DB7C876C3F684217982CD65D7 -:208503008DCDED84217982CDF78DAFC303803BFD210000FD39FD77003EA2CD08802164006E -:20852300CDE8813EE4CD0880216400CDE881216782CDF78D210000397E33C3038033C92107 -:208543006782CDF78DAFC3038076CD818DB728053E02CD1185CD1A8EB728053E04CD118513 -:20856300CD108EB728E3AFCD1185C34C853A8EB8F533218885CD1987CDED84216782CDF7D6 -:208583008DAFC303804E6F20455350333220666F756E64003E01CD728DFE023E01C8AFC966 -:2085A3003A08B8F53321C785CD1987CD9785B72803CD4C853E32CDF584216782CDF78D3E04 -:2085C30002C3038046696C6520746F6F206C61726765003A08B8F53321FA85CD1987CD97A0 -:2085E30085B72803CD4C853E32CDF584216782CDF78D3E02C30380506C61796261636B2095 -:208603006572726F7200ED4B09B81E006B260009563E0B836F3EB8CE00677AB7280A7BD60C -:20862300203005721CC30F863600C9210500E5210201E5117A86216782CD2F8D210BB8CD94 -:20864300048E3E71F533D5210207E5110BB8216782CDB08D210700E5210301E51180862193 -:208663006782CD2F8D212400E5210A02E5118886216782CD2F8DC946696C653A00537461EC -:208683007475733A00506755702F5067446E3A547261636B204573633A53746F7020537000 -:2086A3006163653A4C6561766500DDE5DD210000DD39F51E007B854F3E008C470A4FB728E6 -:2086C3001F7BD618301A3E3283DD77FE3EB8CE00DD77FFE5DD6EFEDD66FF71E11CC3B8868A -:2086E3007BD618300C2132B81600191C3620C3E386216782DD7E04F533111800D51103094E -:20870300D51132B8CDB08DDDF9DDE1E133E93E71F533CDAD86C9DDE5DD210000DD393BEB4F -:208723000E0069260019463E4A816F3EB8CE0067793CDD77FF78B7280C79D611300770DD48 -:208743004EFFC32587DD4EFF3620690C2600114AB8193628690C2600114AB8193630690C13 -:208763002600114AB8193678690C2600114AB819DD7E0407070707E60FC6C05F3E00CE8747 -:20878300571A77690C2600114AB819DD7E04E60FC6C05F3E00CE87571A77690C2600114A7D -:2087A300B8193629692600114AB81936003E72F533214AB8CDAD8633DDE1E133E930313219 -:2087C3003334353637383941424344454600DDE5DD210000DD39EB01FD87DD7E04070707CD -:2087E30007E60F6F2600097E1213DD7E04E60F6F2600097E12DDE1E133E9303132333435CD -:208803003637383941424344454600DDE5DD210000DD39F54D44E1D5C5116400DD6EFEDD70 -:2088230066FFCDD58CEB110A00CD2A8DC17BC63002696023E5C5110A00DD6EFEDD66FFCDDB -:20884300D58CEB110A00CD2A8DC1E17BC630770303C5110A00DD6EFEDD66FFCD2A8DC17B6F -:20886300C63002DDF9DDE1C9DDE5DD210000DD39E5210000E52E3CE5DD5E04DD5605DD6ECE -:2088830006DD6607CD16B9F1F1010000C50E64C5CD8FB8F1F14BC5210000E52E3CE5DD5E74 -:2088A30004DD5605DD6E06DD6607CD8FB8F1F1C151D52E0A7ACDD08C7B2E0ACD238D7BD1AA -:2088C300C630E1E577C1C503C5D52E0A7ACD238D7BD1C1C63002E1E52323363AC1C5030303 -:2088E30003C5D52E0A7BCDD08C7B2E0ACD238D7BD1C1C63002DD7EFEC6044FDD7EFFCE002D -:2089030047C52E0A7BCD238D7BC1C63002DDF9DDE1E1F1F1E9210900E5210401E511B78939 -:20892300216782CD2F8D210700E521040CE511C189216782CD2F8D210600E5210415E51154 -:20894300C989216782CD2F8D210500E5210601E511D089216782CD2F8D210300E521060CDE -:20896300E511D689216782CD2F8D116CB80E006926001936200C79D62038F4212000E521DD -:208983000804E5216782CD2F8D210804E5216782CD8B8D7AE63F57CBFBED538CB80E002AD7 -:2089A3008CB85D7CC6C0576926001936070C79D62038ECC95061747465726E3A23002020F2 -:2089C300526F773A2300202042504D3A0054696D653A00202F2000DDE5DD210000DD394B4D -:2089E30042EBDD7E07DDB606DDB605DDB604283069603E0529CB13CB123D20F8DD4E06DD72 -:208A03004607C5DD4E04DD4605C5EBCD16B9F1F14B423E20BB3E009A3009012000C3268A71 -:208A23000100001100002A8CB87CC6C067197B917A9830053E40C33E8A3E0777136B627DBC -:208A4300D6207CDE0038DFDDE1E1F1F1E9DDE5DD210000DD3921F8FF39F93A30B86F3E0B48 -:208A6300CDD4803EA8CD0880213200CDE8813E28CD2180DD77FF3A31B8D621201DDD7EFF36 -:208A8300D62020163EE4CD0880216400CDE881216782CDF78D3E02CD0380DD7EFF3231B815 -:208AA3003E2BCD2180DD77FA3E2CCD2180DD77FB3E02F53321010039EB3E31CDA8803E2DEA -:208AC300CD3A80DD73FCDD72FDDD75FEDD74FF3A2FB8FD212CB8FDB602FDB601FDB6002075 -:208AE3000C3E36CD3A80ED532CB8222EB8DD7EFAF5332162B8CDD1873E71F533210200E584 -:208B030021040AE51162B8216782CDB08DDD7EFBF5332162B8CDD1873E71F533210200E542 -:208B2300210413E51162B8216782CDB08DD1D52164B8CD0E883E71F533210300E521041B70 -:208B4300E51164B8216782CDB08D210000E52144ACE5DD5EFCDD56FDDD6EFEDD66FFCD161B -:208B6300B9F1E3D52167B8CD6B883E71F533210500E5210607E51167B8216782CDB08D2136 -:208B83000000E52144ACE5ED5B2CB82A2EB8CD16B9F1E3D52167B8CD6B883E71F533210579 -:208BA30000E521060FE51167B8216782CDB08D2A2EB8E52A2CB8E5DD5EFCDD56FDDD6EFED6 -:208BC300DD66FFCDDA89DDF9DDE1C93BCD0986216782CD658DCD2E8621878CCD11873A8E81 -:208BE300B83C200DCD5A82B73E0120023E02328EB83A8EB83D280733C37085C3858CAF324C -:208C03002CB8322DB8322EB8322FB8CDC182B720123A08B8D699200733C3A385C3858C3377 -:208C2300C3D685219F8CCD1187CD18892131B83621CD508AFD210000FD39FD36000076FDF2 -:208C4300210000FD39FD3400FD7E00D60A3807FD360000CD508ACD818DB728053E02CD1138 -:208C630085CD1A8EB728053E04CD1185CD108EB72804AFCD1185CD048DB728C2CD4285C3B8 -:208C8300418C33C94C6F6164696E672C20706C6561736520776169742E2E2E00506C61798F -:208CA300696E6700ED7300B83207B8ED4309B8083206B82202B8ED5304B83A07B8B7CACE61 -:0D8CC3008B3A07B8D603CAFE84AFC3038006 -:01B99900FFAE -:03800000C3A78C87 -:208CD0005D6F2600547BE680B220110610ED6A17933001833FED6A10F65FEBC906097D6C08 -:208CF0002600CB1DED6AED523001193F1710F5CB10505FC9DDE53E10CD0660DDE1C9DDE53C -:208D1000DD210000DD39DD46043E30CD0660DDE1E133E95D6FCDD28CEBC9CDD58CEBC9DD42 -:208D3000E5E5D5DD210000DD39DD460BDD4E0ADD5608DD5E09DD6E00DD6601D9DD6E02DDFC -:208D50006603E5DDE1D93E03CD0660D1E1DDE1E133333333E9DDE5E5DDE13E01CD0660DDF0 -:118D7000E1C908DDE53E53CD066020023EFFDDE1C9D4 -:20B88F00DDE5DD210000DD39010000DD7E07073838DDCB0426DDCB0516DDCB0616DDCB07E1 -:20B8AF00167BDD96047ADD9E057DDD9E067CDD9E073012DDCB073EDDCB061EDDCB051EDDD8 -:20B8CF00CB041E1804044818C27BDD96047ADD9E057DDD9E067CDD9E0738147BDD96045FA5 -:20B8EF007ADD9E05577DDD9E066F7CDD9E0767DDCB073EDDCB061EDDCB051EDDCB041E794F -:20B90F000DB720C5DDE1C9DDE5DD210000DD39F5F5AFDD77FCDD77FDDD77FEDD77FF06200D -:20B92F007C07E6014FCB23CB12ED6ADDCBFC26DDCBFD16DDCBFE16DDCBFF16CB412804DD0A -:20B94F00CBFCC6DD7EFCDD9604DD7EFDDD9E05DD7EFEDD9E06DD7EFFDD9E073826DD7EFC3A -:20B96F00DD9604DD77FCDD7EFDDD9E05DD77FDDD7EFEDD9E06DD77FEDD7EFFDD9E07DD776C -:0AB98F00FFCBC3109BDDF9DDE1C919 -:208D8100DDE53E1ACD0660DDE1C9DDE5E5DD210000DD39DD5606DD5E07DD6E00DD6601E554 -:208DA100DDE13E05CD0660EBE1DDE1E13333E9DDE5E5D5DD210000DD39DD460BDD4E0ADDF4 -:208DC1005608DD5E09DD6E00DD6601D9DD6E02DD6603DD7E0CF5E5DDE1D93E03CD0660F1B8 -:208DE10008D9E5DDE1D93E04CD0660D1E1DDE1E13333333333E9DDE5E5DDE13E02CD06608F -:208E0100DDE1C9AF474FEDB121FFFFED42EBC9DDE53E17CD0660DDE1C9DDE53E19CD0660C8 -:038E2100DDE1C9C7 +:20812300DB573E03D377C9DDE5DD210000DD39F5F5DD75FEDD74FF2109607EDD77FC237E5D +:20814300DD77FD2A09607DDD96FC4F7CDD9EFD4779DD96FE78DD9EFF300E3E01CD2180FEFD +:208163000228E03E01C36C81AFDDF9DDE1C97D01AF1AED797C01AF1BED79FD210200FD3947 +:20818300FD7E0001AF1CED79FD7E01FD4E02FD23CB39CB1F3D01AF26ED79FD7E023D01AF75 +:2081A30028ED793E13D3773E03D357DB57DB573E8201AF27ED793E27DBAF0738F93E03D38C +:2081C30077CD1B81216400CD2A81E1F1F133E93E13D3773E08D357DB573E03D377C9DDE58D +:2081E300DD210000DD3921FBFF39F9DD77FFDD73FDDD72FE2109607EDD77FB237EDD77FCE6 +:208203002A09607DDD96FB4F7CDD9EFC4779DD96FD78DD9EFE300F3E01CD2180DD96FF20FC +:20822300DF3E01C32A82AFDDF9DDE1C9EBED4B0960C5D53E01CD2180D1C1FE02280D2A09D5 +:2082430060BFED42AFED5238E8AFC92A0960BFED42AFED523010C5D53E01CD2180D1C1FEC1 +:208263000228E83E01C9AFC9E5D53E03CDEB80FD210200FD39FD6E003E02CDD4803EE0CD29 +:208283000880216400CD2F823E0BCD21805F1600E133E9AFCD0880CDD281CD1B813E01C992 +:2082A3008100190A280C700000000000C782E182E1820100160A2407700000000000E28244 +:2082C300E182EB820E20584D2F584D5A2F53334D20506C617965722076302E312000000EE8 +:2082E3002041626F757420000D0E584D20506C617965722076302E310D0E627920416C65A6 +:2083030078204B6F726F6368696E736B697900DDE5DD210000DD3921ECFF39F93EA2CD08FC +:2083230080216400CD2F823EE4CD0880216400CD2F823A06B83D280A3A06B8D6022808C313 +:208343004F833E08C351833E0CC351833E05F533ED5B02B82A04B8CD6B822130B8733E01C2 +:20836300CD21803208B83A08B83D2804AFC33985210C0039EB2102B8010400EDB0AFDD7736 +:20838300FCDD77FDDD77FEDD77FFDD7EFBDDB6FADDB6F9DDB6F8CAA284DD7EF9D610DD7E69 +:2083A300FADE00DD7EFBDE00301121000039EB210C0039010400EDB0C3CD83DD36EC00DD31 +:2083C30036ED10AFDD77EEDD77EF21050039EB21000039010400EDB0DD7EF1C6FFDD7EF28F +:2083E300CE01473E00CE005F3E00CE005748435ACB3BCB18CB19DD71F779F5332100A8CD68 +:20840300008E210000E5DD6EF1DD66F2E53E03CDEB80DD6EFEDD66FFE5DD6EFCDD66FDE51A +:208423003E07CDEB803EE1CD08801164003E03CDE181DD7EF7DD77F5DD36F6003A0260DD46 +:2084430077F7DD6EF52600E5210002E5DD7EF7F5332100A8CD7181DD5EF1DD56F2DD6EFCBE +:20846300DD66FD19DD75FCDD74FDDD7EFEDD8EF3DD77FE3003DD34FFDD7EF8DD96F1DD77AD +:20848300F8DD7EF9DD9EF2DD77F9DD7EFADD9EF3DD77FADD7EFBDD9EF4DD77FBC38D833AA1 +:2084A30006B83D203A3A30B86F3E0BCDD4802E053E02CDD4802A04B8E52A02B8E53E03CD33 +:2084C300EB803EF2CD088021FA00CD2F823E01CD21803208B83A08B83D2804AFC339853EA0 +:2084E300A0CD088021F401CD2F823E01CD21803208B83A08B83D2804AFC339853A30B86F2D +:208503003E0BCDD4802E013E3ACDD4803EA6CD0880216400CD2F823EA1CD0880216400CD64 +:208523002F823E01CD21803208B83A08B83D2804AFC339853E01DDF9DDE1C976CD208FB710 +:2085430028F9C94F790DB7C876C347853A0E60D62438033E5AC93E50C9DDE5DD210000DDA3 +:2085630039F5DD77FFDD75FE7DDD96FF301BDD7EFFDD5EFE934F9F475950CB7828035950D2 +:20858300137BCB2ACB1FC38D85AFDDF9DDE1C91144B821B582011200EDB02148B86EE5CD34 +:2085A3004F85E1CD5C853246B82149B86E3A0E60CD5C853247B82144B8CD578ECD3E85218E +:2085C30044B8CD078FAFC303803BFD210000FD39FD77003EA2CD0880216400CD2F823EE4E7 +:2085E300CD0880216400CD2F822132B8CD078F210000397E33C3038033C92132B8CD078FF7 +:20860300AFC3038076CD878EB72006CD648EB728053E02CDCC85CD2A8FB728053E04CDCCE7 +:2086230085CD208FB728DDAFCDCC85C307863AB2B8F533214986CDDA87CD3E852132B8CD0B +:20864300078FAFC303804E6F20455350333220666F756E64003E01CD6E8EFE023E01C8AF68 +:20866300C93A08B8F533218886CDDA87CD5886B72803CD07863E32CD46852132B8CD078F52 +:208683003E02C3038046696C6520746F6F206C61726765003A08B8F53321BB86CDDA87CDB5 +:2086A3005886B72803CD07863E32CD46852132B8CD078F3E02C30380506C61796261636B7A +:2086C300206572726F7200ED4B09B81E006B260009563E0B836F3EB8CE00677AB7280A7B02 +:2086E300D6203005721CC3D0863600C9210500E5210201E5113B872132B8CD218E210BB854 +:20870300CD148F3E71F533D5210207E5110BB82132B8CDB68E210700E5210301E51141874B +:208723002132B8CD218E212400E5210A02E51149872132B8CD218EC946696C653A005374C1 +:20874300617475733A00506755702F5067446E3A547261636B204573633A53746F7020534E +:20876300706163653A4C6561766500DDE5DD210000DD39F51E007B854F3E008C470A4FB7DD +:20878300281F7BD618301A3E5683DD77FE3EB8CE00DD77FFE5DD6EFEDD66FF71E11CC37942 +:2087A300877BD618300C2156B81600191C3620C3A4872132B8DD7E04F533111800D5110328 +:2087C30009D51156B8CDB68EDDF9DDE1E133E93E71F533CD6E87C9DDE5DD210000DD393B84 +:2087E300EB0E0069260019463E6E816F3EB8CE0067793CDD77FF78B7280C79D61130077056 +:20880300DD4EFFC3E687DD4EFF3620690C2600116EB8193628690C2600116EB81936306978 +:208823000C2600116EB8193678690C2600116EB819DD7E0407070707E60FC6815F3E00CEF8 +:2088430088571A77690C2600116EB819DD7E04E60FC6815F3E00CE88571A77690C26001198 +:208863006EB8193629692600116EB81936003E72F533216EB8CD6E8733DDE1E133E9303112 +:20888300323334353637383941424344454600DDE5DD210000DD39EB01BE88DD7E0407071F +:2088A3000707E60F6F2600097E1213DD7E04E60F6F2600097E12DDE1E133E930313233343A +:2088C300353637383941424344454600DDE5DD210000DD39F54D44E1D5C5116400DD6EFE58 +:2088E300DD66FFCDC78DEB110A00CD1C8EC17BC63002696023E5C5110A00DD6EFEDD66FF25 +:20890300CDC78DEB110A00CD1C8EC1E17BC630770303C5110A00DD6EFEDD66FFCD1C8EC183 +:208923007BC63002DDF9DDE1C9DDE5DD210000DD39E5210000E52E3CE5DD5E04DD5605DD00 +:208943006E06DD6607CD3AB9F1F1010000C50E64C5CDB3B8F1F14BC5210000E52E3CE5DD5B +:208963005E04DD5605DD6E06DD6607CDB3B8F1F1C151D52E0A7ACDC28D7B2E0ACD158E7B52 +:20898300D1C630E1E577C1C503C5D52E0A7ACD158E7BD1C1C63002E1E52323363AC1C50381 +:2089A3000303C5D52E0A7BCDC28D7B2E0ACD158E7BD1C1C63002DD7EFEC6044FDD7EFFCE83 +:2089C3000047C52E0A7BCD158E7BC1C63002DDF9DDE1E1F1F1E9210900E5210401E511784E +:2089E3008A2132B8CD218E210700E521040CE511828A2132B8CD218E210600E5210415E571 +:208A0300118A8A2132B8CD218E210500E5210601E511918A2132B8CD218E210300E52106AC +:208A23000CE511978A2132B8CD218E1190B80E006926001936200C79D62038F4212000E557 +:208A4300210804E52132B8CD218E210804E52132B8CD918E7AE63F57CBFBED53B0B80E00FF +:208A63002AB0B85D7CC6C0576926001936070C79D62038ECC95061747465726E3A23002003 +:208A830020526F773A2300202042504D3A0054696D653A00202F2000DDE5DD210000DD39B7 +:208AA3004B42EBDD7E07DDB606DDB605DDB604283069603E0529CB13CB123D20F8DD4E0643 +:208AC300DD4607C5DD4E04DD4605C5EBCD3AB9F1F14B423E20BB3E009A3009012000C3E779 +:208AE3008A0100001100002AB0B87CC6C067197B917A9830053E40C3FF8A3E0777136B620A +:208B03007DD6207CDE0038DFDDE1E1F1F1E9DDE5DD210000DD3921F8FF39F93A30B86F3E15 +:208B23000BCDD4803EA8CD0880213200CD2F823E28CD2180DD77FF3A31B8D621201DDD7E21 +:208B4300FFD62020163EE4CD0880216400CD2F822132B8CD078F3E02CD0380DD7EFF3231B2 +:208B6300B83E2BCD2180DD77FA3E2CCD2180DD77FB3E02F53321010039EB3E31CDA8803E9E +:208B83002DCD3A80DD73FCDD72FDDD75FEDD74FF3A2FB8FD212CB8FDB602FDB601FDB600A7 +:208BA300200C3E36CD3A80ED532CB8222EB8DD7EFAF5332186B8CD92883E71F533210200A2 +:208BC300E521040AE51186B82132B8CDB68EDD7EFBF5332186B8CD92883E71F53321020070 +:208BE300E5210413E51186B82132B8CDB68ED1D52188B8CDCF883E71F533210300E52104D5 +:208C03001BE51188B82132B8CDB68E210000E52144ACE5DD5EFCDD56FDDD6EFEDD66FFCD29 +:208C23003AB9F1E3D5218BB8CD2C893E71F533210500E5210607E5118BB82132B8CDB68E4A +:208C4300210000E52144ACE5ED5B2CB82A2EB8CD3AB9F1E3D5218BB8CD2C893E71F5332192 +:208C63000500E521060FE5118BB82132B8CDB68E2A2EB8E52A2CB8E5DD5EFCDD56FDDD6EE2 +:208C8300FEDD66FFCD9B8ADDF9DDE1C9DDE5DD210000DD393BCDCA861132B821A3820112C0 +:208CA30000EDB02136B86EE5CD4F85E1CD5C853234B82137B86E3A0E60CD5C853235B8CDA4 +:208CC3007D8ECDFD8E2132B8CD578ECDEF8621798DCDD2873AB2B83C200DCD9682B73E01FA +:208CE30020023E0232B2B83AB2B83D2806CD3186C3758DAF322CB8322DB8322EB8322FB80E +:208D0300CD1283B720133A08B8D6992006CD6486C3758DCD9786C3758D21918DCDD287CD18 +:208D2300D9892131B83621CD118BDD36FF0076DD34FFDD7EFFD60A3807DD36FF00CD118B78 +:208D4300CD878EB72006CD648EB728053E02CDCC85CD2A8FB728053E04CDCC85CD208FB753 +:208D63002804AFCDCC85CDF68DB728C2CDFD85C3318D33DDE1C94C6F6164696E672C207002 +:208D83006C6561736520776169742E2E2E00506C6179696E6700ED7300B83207B8ED430951 +:1F8DA300B8083206B82202B8ED5304B83A07B8B7CA8F8C3A07B8D603CA9285AFC30380EC +:01B9BD00FF8A +:03800000C3998D94 +:208DC2005D6F2600547BE680B220110610ED6A17933001833FED6A10F65FEBC906097D6C15 +:208DE2002600CB1DED6AED523001193F1710F5CB10505FC9DDE53E10CD0660DDE1C9DDE549 +:208E0200DD210000DD39DD46043E30CD0660DDE1E133E95D6FCDC48DEBC9CDC78DEBC9DD69 +:208E2200E5E5D5DD210000DD39DD460BDD4E0ADD5608DD5E09DD6E00DD6601D9DD6E02DD09 +:208E42006603E5DDE1D93E03CD0660D1E1DDE1E133333333E9DDE5E5DDE13E01CD0660DDFD +:1B8E6200E1C9DDE53E16CD0660DDE1C908DDE53E53CD066020023EFFDDE1C907 +:20B8B300DDE5DD210000DD39010000DD7E07073838DDCB0426DDCB0516DDCB0616DDCB07BD +:20B8D300167BDD96047ADD9E057DDD9E067CDD9E073012DDCB073EDDCB061EDDCB051EDDB4 +:20B8F300CB041E1804044818C27BDD96047ADD9E057DDD9E067CDD9E0738147BDD96045F81 +:20B913007ADD9E05577DDD9E066F7CDD9E0767DDCB073EDDCB061EDDCB051EDDCB041E792A +:07B933000DB720C5DDE1C9DD +:0A8E7D00DDE53E0FCD0660DDE1C922 +:20B93A00DDE5DD210000DD39F5F5AFDD77FCDD77FDDD77FEDD77FF06207C07E6014FCB236B +:20B95A00CB12ED6ADDCBFC26DDCBFD16DDCBFE16DDCBFF16CB412804DDCBFCC6DD7EFCDDC5 +:20B97A009604DD7EFDDD9E05DD7EFEDD9E06DD7EFFDD9E073826DD7EFCDD9604DD77FCDD2C +:20B99A007EFDDD9E05DD77FDDD7EFEDD9E06DD77FEDD7EFFDD9E07DD77FFCBC3109BDDF9D7 +:03B9BA00DDE1C903 +:208E8700DDE53E1ACD0660DDE1C9DDE5E5DD210000DD39DD5606DD5E07DD6E00DD6601E54D +:208EA700DDE13E05CD0660EBE1DDE1E13333E9DDE5E5D5DD210000DD39DD460BDD4E0ADDED +:208EC7005608DD5E09DD6E00DD6601D9DD6E02DD6603DD7E0CF5E5DDE1D93E03CD0660F1B1 +:208EE70008D9E5DDE1D93E04CD0660D1E1DDE1E13333333333E9DDE53E2ECD0660DDE1C978 +:208F0700DDE5E5DDE13E02CD0660DDE1C9AF474FEDB121FFFFED42EBC9DDE53E17CD0660BC +:0D8F2700DDE1C9DDE53E19CD0660DDE1C9E3 :00000001FF diff --git a/obj/out.lk b/obj/out.lk index 21d2c01..02d3845 100644 --- a/obj/out.lk +++ b/obj/out.lk @@ -3,7 +3,7 @@ -b _CODE = 0x8003 -b _DATA = 0xa800 -k E:\SDCC\4.6.0\bin\..\lib\z80 --l vgm_wc_api.lib +-l wc_api.lib -l z80 obj/out.rel obj/crt0.rel diff --git a/obj/out.lst b/obj/out.lst index e0062bd..1ea38f6 100644 --- a/obj/out.lst +++ b/obj/out.lst @@ -27,2345 +27,2517 @@ 27 .globl _leave_playing_and_exit 28 .globl _unload_and_exit 29 .globl _about - 30 .globl _wait_frames - 31 .globl _wait_esc_key - 32 .globl _play_xm - 33 .globl _esp_init - 34 .globl _esp_create_obj - 35 .globl _esp_wait_status - 36 .globl _esp_rd_end - 37 .globl _esp_send_dma - 38 .globl _esp_wr_end - 39 .globl _esp_wr_reg32 - 40 .globl _esp_wr_reg8 - 41 .globl _esp_rd_regs - 42 .globl _esp_rd_reg32 - 43 .globl _esp_rd_reg8 - 44 .globl _esp_cmd - 45 .globl _wc_exit - 46 .globl _wc_prm_pl - 47 .globl _wc_gadrw - 48 .globl _wc_prsrw_attr - 49 .globl _wc_prsrw - 50 .globl _wc_key_space - 51 .globl _wc_key_pgdn - 52 .globl _wc_key_pgup - 53 .globl _wc_key_esc - 54 .globl _wc_load512 - 55 .globl _wc_rresb - 56 .globl _wc_prwow - 57 .globl _strlen - 58 .globl _state_esp - 59 .globl _bar_attr_ofs - 60 .globl _last_track_status - 61 .globl _xm_handle - 62 .globl _total_samples - 63 .globl _file_name - 64 .globl _p_file_name - 65 .globl _last_esp_status - 66 .globl _call_type - 67 .globl _file_ext - 68 .globl _filesize - 69 .globl _ret_sp - 70 .globl _fs_buf - 71 .globl _win_about - 72 .globl _win_xm - 73 .globl _esp_wait_busy - 74 .globl _xm_set_status - 75 .globl _xm_set_status_code - 76 ;-------------------------------------------------------- - 77 ; special function registers - 78 ;-------------------------------------------------------- - 00000057 79 _SPI_DATA = 0x0057 - 00000077 80 _SPI_CTRL = 0x0077 - 000000FE 81 _BORDER = 0x00fe - 000000AF 82 _TS_VCONFIG = 0x00af - 000000AF 83 _TS_STATUS = 0x00af - 000001AF 84 _TS_VPAGE = 0x01af - 000002AF 85 _TS_GXOFFSL = 0x02af - 000003AF 86 _TS_GXOFFSH = 0x03af - 000004AF 87 _TS_GYOFFSL = 0x04af - 000005AF 88 _TS_GYOFFSH = 0x05af - 000006AF 89 _TS_TSCONFIG = 0x06af - 000007AF 90 _TS_PALSEL = 0x07af - 00000FAF 91 _TS_BORDER = 0x0faf - 000010AF 92 _TS_PAGE0 = 0x10af - 000011AF 93 _TS_PAGE1 = 0x11af - 000012AF 94 _TS_PAGE2 = 0x12af - 000013AF 95 _TS_PAGE3 = 0x13af - 000015AF 96 _TS_FMADDR = 0x15af - 000016AF 97 _TS_TMPAGE = 0x16af - 000017AF 98 _TS_T0GPAGE = 0x17af - 000018AF 99 _TS_T1GPAGE = 0x18af - 000019AF 100 _TS_SGPAGE = 0x19af - 00001AAF 101 _TS_DMASADDRL = 0x1aaf - 00001BAF 102 _TS_DMASADDRH = 0x1baf - 00001CAF 103 _TS_DMASADDRX = 0x1caf - 00001DAF 104 _TS_DMADADDRL = 0x1daf - 00001EAF 105 _TS_DMADADDRH = 0x1eaf - 00001FAF 106 _TS_DMADADDRX = 0x1faf - 000020AF 107 _TS_SYSCONFIG = 0x20af - 000021AF 108 _TS_MEMCONFIG = 0x21af - 000022AF 109 _TS_HSINT = 0x22af - 000023AF 110 _TS_VSINTL = 0x23af - 000024AF 111 _TS_VSINTH = 0x24af - 000025AF 112 _TS_DMAWPD = 0x25af - 000026AF 113 _TS_DMALEN = 0x26af - 000027AF 114 _TS_DMACTR = 0x27af - 000027AF 115 _TS_DMASTATUS = 0x27af - 000028AF 116 _TS_DMANUM = 0x28af - 000029AF 117 _TS_FDDVIRT = 0x29af - 00002AAF 118 _TS_INTMASK = 0x2aaf - 00002BAF 119 _TS_CACHECONF = 0x2baf - 00002CAF 120 _TS_DMANUMH = 0x2caf - 00002DAF 121 _TS_DMAWPA = 0x2daf - 000040AF 122 _TS_T0XOFFSL = 0x40af - 000041AF 123 _TS_T0XOFFSH = 0x41af - 000042AF 124 _TS_T0YOFFSL = 0x42af - 000043AF 125 _TS_T0YOFFSH = 0x43af - 000044AF 126 _TS_T1XOFFSL = 0x44af - 000045AF 127 _TS_T1XOFFSH = 0x45af - 000046AF 128 _TS_T1YOFFSL = 0x46af - 000047AF 129 _TS_T1YOFFSH = 0x47af - 130 ;-------------------------------------------------------- - 131 ; ram data - 132 ;-------------------------------------------------------- - 133 .area _DATA - 00000000 134 _fs_buf:: - 00000000 135 .ds 4096 - 00001000 136 _ret_sp:: - 00001000 137 .ds 2 - 00001002 138 _filesize:: - 00001002 139 .ds 4 - 00001006 140 _file_ext:: - 00001006 141 .ds 1 - 00001007 142 _call_type:: - 00001007 143 .ds 1 - 00001008 144 _last_esp_status:: - 00001008 145 .ds 1 - 00001009 146 _p_file_name:: - 00001009 147 .ds 2 - 0000100B 148 _file_name:: - 0000100B 149 .ds 33 - 0000102C 150 _total_samples:: - 0000102C 151 .ds 4 - 00001030 152 _xm_handle:: - 00001030 153 .ds 1 - 00001031 154 _last_track_status:: - 00001031 155 .ds 1 - 00001032 156 _status_buf: - 00001032 157 .ds 24 - 0000104A 158 _status_code_buf: - 0000104A 159 .ds 24 - 00001062 160 _hexbuf: - 00001062 161 .ds 2 - 00001064 162 _decbuf: - 00001064 163 .ds 3 - 00001067 164 _timebuf: - 00001067 165 .ds 5 - 0000106C 166 _barbuf: - 0000106C 167 .ds 32 - 0000108C 168 _bar_attr_ofs:: - 0000108C 169 .ds 2 - 170 ;-------------------------------------------------------- - 171 ; ram data - 172 ;-------------------------------------------------------- - 173 .area _INITIALIZED - 00000000 174 _state_esp:: - 00000000 175 .ds 1 - 176 ;-------------------------------------------------------- - 177 ; absolute ram data - 178 ;-------------------------------------------------------- - 179 .area _DABS (ABS) - 180 .area _DABS (ABS) - 181 ;-------------------------------------------------------- - 182 ; global & static initialisations - 183 ;-------------------------------------------------------- - 184 .area _HOME - 185 .area _GSINIT - 186 .area _GSFINAL - 187 .area _GSINIT + 30 .globl _wc_center + 31 .globl _wc_screen_width + 32 .globl _wait_frames + 33 .globl _wait_esc_key + 34 .globl _play_xm + 35 .globl _esp_init + 36 .globl _esp_create_obj + 37 .globl _esp_wait_status + 38 .globl _esp_rd_end + 39 .globl _esp_send_dma + 40 .globl _esp_wait_not_busy + 41 .globl _esp_wr_end + 42 .globl _esp_wr_reg32 + 43 .globl _esp_wr_reg8 + 44 .globl _esp_rd_regs + 45 .globl _esp_rd_reg32 + 46 .globl _esp_rd_reg8 + 47 .globl _esp_cmd + 48 .globl _wc_exit + 49 .globl _wc_prm_pl + 50 .globl _wc_gadrw + 51 .globl _wc_prsrw_attr + 52 .globl _wc_prsrw + 53 .globl _wc_gedpl + 54 .globl _wc_key_wait_release + 55 .globl _wc_key_enter + 56 .globl _wc_key_space + 57 .globl _wc_key_pgdn + 58 .globl _wc_key_pgup + 59 .globl _wc_key_esc + 60 .globl _wc_load512 + 61 .globl _wc_rresb + 62 .globl _wc_prwow + 63 .globl _strlen + 64 .globl _state_esp + 65 .globl _bar_attr_ofs + 66 .globl _win_about + 67 .globl _win_xm + 68 .globl _last_track_status + 69 .globl _xm_handle + 70 .globl _total_samples + 71 .globl _file_name + 72 .globl _p_file_name + 73 .globl _last_esp_status + 74 .globl _call_type + 75 .globl _file_ext + 76 .globl _filesize + 77 .globl _ret_sp + 78 .globl _fs_buf + 79 .globl _win_about_tpl + 80 .globl _win_xm_tpl + 81 .globl _esp_wait_busy + 82 .globl _xm_set_status + 83 .globl _xm_set_status_code + 84 ;-------------------------------------------------------- + 85 ; special function registers + 86 ;-------------------------------------------------------- + 00000057 87 _SPI_DATA = 0x0057 + 00000077 88 _SPI_CTRL = 0x0077 + 000000FE 89 _BORDER = 0x00fe + 000000AF 90 _TS_VCONFIG = 0x00af + 000000AF 91 _TS_STATUS = 0x00af + 000001AF 92 _TS_VPAGE = 0x01af + 000002AF 93 _TS_GXOFFSL = 0x02af + 000003AF 94 _TS_GXOFFSH = 0x03af + 000004AF 95 _TS_GYOFFSL = 0x04af + 000005AF 96 _TS_GYOFFSH = 0x05af + 000006AF 97 _TS_TSCONFIG = 0x06af + 000007AF 98 _TS_PALSEL = 0x07af + 00000FAF 99 _TS_BORDER = 0x0faf + 000010AF 100 _TS_PAGE0 = 0x10af + 000011AF 101 _TS_PAGE1 = 0x11af + 000012AF 102 _TS_PAGE2 = 0x12af + 000013AF 103 _TS_PAGE3 = 0x13af + 000015AF 104 _TS_FMADDR = 0x15af + 000016AF 105 _TS_TMPAGE = 0x16af + 000017AF 106 _TS_T0GPAGE = 0x17af + 000018AF 107 _TS_T1GPAGE = 0x18af + 000019AF 108 _TS_SGPAGE = 0x19af + 00001AAF 109 _TS_DMASADDRL = 0x1aaf + 00001BAF 110 _TS_DMASADDRH = 0x1baf + 00001CAF 111 _TS_DMASADDRX = 0x1caf + 00001DAF 112 _TS_DMADADDRL = 0x1daf + 00001EAF 113 _TS_DMADADDRH = 0x1eaf + 00001FAF 114 _TS_DMADADDRX = 0x1faf + 000020AF 115 _TS_SYSCONFIG = 0x20af + 000021AF 116 _TS_MEMCONFIG = 0x21af + 000022AF 117 _TS_HSINT = 0x22af + 000023AF 118 _TS_VSINTL = 0x23af + 000024AF 119 _TS_VSINTH = 0x24af + 000025AF 120 _TS_DMAWPD = 0x25af + 000026AF 121 _TS_DMALEN = 0x26af + 000027AF 122 _TS_DMACTR = 0x27af + 000027AF 123 _TS_DMASTATUS = 0x27af + 000028AF 124 _TS_DMANUM = 0x28af + 000029AF 125 _TS_FDDVIRT = 0x29af + 00002AAF 126 _TS_INTMASK = 0x2aaf + 00002BAF 127 _TS_CACHECONF = 0x2baf + 00002CAF 128 _TS_DMANUMH = 0x2caf + 00002DAF 129 _TS_DMAWPA = 0x2daf + 000040AF 130 _TS_T0XOFFSL = 0x40af + 000041AF 131 _TS_T0XOFFSH = 0x41af + 000042AF 132 _TS_T0YOFFSL = 0x42af + 000043AF 133 _TS_T0YOFFSH = 0x43af + 000044AF 134 _TS_T1XOFFSL = 0x44af + 000045AF 135 _TS_T1XOFFSH = 0x45af + 000046AF 136 _TS_T1YOFFSL = 0x46af + 000047AF 137 _TS_T1YOFFSH = 0x47af + 138 ;-------------------------------------------------------- + 139 ; ram data + 140 ;-------------------------------------------------------- + 141 .area _DATA + 00000000 142 _fs_buf:: + 00000000 143 .ds 4096 + 00001000 144 _ret_sp:: + 00001000 145 .ds 2 + 00001002 146 _filesize:: + 00001002 147 .ds 4 + 00001006 148 _file_ext:: + 00001006 149 .ds 1 + 00001007 150 _call_type:: + 00001007 151 .ds 1 + 00001008 152 _last_esp_status:: + 00001008 153 .ds 1 + 00001009 154 _p_file_name:: + 00001009 155 .ds 2 + 0000100B 156 _file_name:: + 0000100B 157 .ds 33 + 0000102C 158 _total_samples:: + 0000102C 159 .ds 4 + 00001030 160 _xm_handle:: + 00001030 161 .ds 1 + 00001031 162 _last_track_status:: + 00001031 163 .ds 1 + 00001032 164 _win_xm:: + 00001032 165 .ds 18 + 00001044 166 _win_about:: + 00001044 167 .ds 18 + 00001056 168 _status_buf: + 00001056 169 .ds 24 + 0000106E 170 _status_code_buf: + 0000106E 171 .ds 24 + 00001086 172 _hexbuf: + 00001086 173 .ds 2 + 00001088 174 _decbuf: + 00001088 175 .ds 3 + 0000108B 176 _timebuf: + 0000108B 177 .ds 5 + 00001090 178 _barbuf: + 00001090 179 .ds 32 + 000010B0 180 _bar_attr_ofs:: + 000010B0 181 .ds 2 + 182 ;-------------------------------------------------------- + 183 ; ram data + 184 ;-------------------------------------------------------- + 185 .area _INITIALIZED + 00000000 186 _state_esp:: + 00000000 187 .ds 1 188 ;-------------------------------------------------------- - 189 ; Home + 189 ; absolute ram data 190 ;-------------------------------------------------------- - 191 .area _HOME - 192 .area _HOME + 191 .area _DABS (ABS) + 192 .area _DABS (ABS) 193 ;-------------------------------------------------------- - 194 ; code + 194 ; global & static initialisations 195 ;-------------------------------------------------------- - 196 .area _CODE - 197 ;src/wc_api.c:47: void wc_exit(u8 rc) __naked - 198 ; --------------------------------- - 199 ; Function wc_exit - 200 ; --------------------------------- - 00000000 201 _wc_exit:: - 202 ;src/wc_api.c:53: __endasm; - 00000000 ED 7Br00r10 [20] 203 ld sp, (_ret_sp) - 00000004 C9 [10] 204 ret - 205 ;src/wc_api.c:54: } - 206 ;src/esp32.c:18: void esp_cmd(u8 cmd) - 207 ; --------------------------------- - 208 ; Function esp_cmd - 209 ; --------------------------------- - 00000005 210 _esp_cmd:: - 00000005 4F [ 4] 211 ld c, a - 212 ;src/esp32.c:20: SPI_CTRL = SPI_ESP_CS_ON; - 00000006 3E 13 [ 7] 213 ld a, #0x13 - 00000008 D3 77 [11] 214 out (_SPI_CTRL), a - 215 ;src/esp32.c:21: SPI_DATA = ESP_SPI_CMD_WR_REGS; - 0000000A 3E 01 [ 7] 216 ld a, #0x01 - 0000000C D3 57 [11] 217 out (_SPI_DATA), a - 218 ;src/esp32.c:22: SPI_DATA = ESP_REG_COMMAND; - 0000000E AF [ 4] 219 xor a, a - 0000000F D3 57 [11] 220 out (_SPI_DATA), a - 221 ;src/esp32.c:23: SPI_DATA; // dummy - 00000011 DB 57 [11] 222 in a, (_SPI_DATA) - 223 ;src/esp32.c:24: SPI_DATA = cmd; // Command - 00000013 79 [ 4] 224 ld a, c - 00000014 D3 57 [11] 225 out (_SPI_DATA), a - 226 ;src/esp32.c:25: SPI_DATA = ESP_ST_IDLE; // Reset status - 00000016 AF [ 4] 227 xor a, a - 00000017 D3 57 [11] 228 out (_SPI_DATA), a - 229 ;src/esp32.c:26: SPI_CTRL = SPI_ESP_CS_OFF; - 00000019 3E 03 [ 7] 230 ld a, #0x03 - 0000001B D3 77 [11] 231 out (_SPI_CTRL), a - 232 ;src/esp32.c:27: } - 0000001D C9 [10] 233 ret - 234 ;src/esp32.c:29: u8 esp_rd_reg8(u8 reg) - 235 ; --------------------------------- - 236 ; Function esp_rd_reg8 - 237 ; --------------------------------- - 0000001E 238 _esp_rd_reg8:: - 0000001E 4F [ 4] 239 ld c, a - 240 ;src/esp32.c:31: SPI_CTRL = SPI_ESP_CS_ON; - 0000001F 3E 13 [ 7] 241 ld a, #0x13 - 00000021 D3 77 [11] 242 out (_SPI_CTRL), a - 243 ;src/esp32.c:32: SPI_DATA = ESP_SPI_CMD_RD_REGS; - 00000023 3E 02 [ 7] 244 ld a, #0x02 - 00000025 D3 57 [11] 245 out (_SPI_DATA), a - 246 ;src/esp32.c:33: SPI_DATA = reg; - 00000027 79 [ 4] 247 ld a, c - 00000028 D3 57 [11] 248 out (_SPI_DATA), a - 249 ;src/esp32.c:34: SPI_DATA; // dummy - 0000002A DB 57 [11] 250 in a, (_SPI_DATA) - 251 ;src/esp32.c:35: SPI_DATA; // dummy - 0000002C DB 57 [11] 252 in a, (_SPI_DATA) - 253 ;src/esp32.c:36: u8 rc = SPI_DATA; - 0000002E DB 57 [11] 254 in a, (_SPI_DATA) - 00000030 4F [ 4] 255 ld c, a - 256 ;src/esp32.c:37: SPI_CTRL = SPI_ESP_CS_OFF; - 00000031 3E 03 [ 7] 257 ld a, #0x03 - 00000033 D3 77 [11] 258 out (_SPI_CTRL), a - 259 ;src/esp32.c:39: return rc; - 00000035 79 [ 4] 260 ld a, c - 261 ;src/esp32.c:40: } - 00000036 C9 [10] 262 ret - 263 ;src/esp32.c:42: u32 esp_rd_reg32(u8 reg) - 264 ; --------------------------------- - 265 ; Function esp_rd_reg32 - 266 ; --------------------------------- - 00000037 267 _esp_rd_reg32:: - 00000037 DD E5 [15] 268 push ix - 00000039 DD 21 00 00 [14] 269 ld ix, #0 - 0000003D DD 39 [15] 270 add ix, sp - 0000003F F5 [11] 271 push af - 00000040 F5 [11] 272 push af - 00000041 4F [ 4] 273 ld c, a - 274 ;src/esp32.c:44: SPI_CTRL = SPI_ESP_CS_ON; - 00000042 3E 13 [ 7] 275 ld a, #0x13 - 00000044 D3 77 [11] 276 out (_SPI_CTRL), a - 277 ;src/esp32.c:45: SPI_DATA = ESP_SPI_CMD_RD_REGS; - 00000046 3E 02 [ 7] 278 ld a, #0x02 - 00000048 D3 57 [11] 279 out (_SPI_DATA), a - 280 ;src/esp32.c:46: SPI_DATA = reg; - 0000004A 79 [ 4] 281 ld a, c - 0000004B D3 57 [11] 282 out (_SPI_DATA), a - 283 ;src/esp32.c:47: SPI_DATA; // dummy - 0000004D DB 57 [11] 284 in a, (_SPI_DATA) - 285 ;src/esp32.c:48: SPI_DATA; // dummy - 0000004F DB 57 [11] 286 in a, (_SPI_DATA) - 287 ;src/esp32.c:49: u32 rc = SPI_DATA; - 00000051 DB 57 [11] 288 in a, (_SPI_DATA) - 00000053 4F [ 4] 289 ld c, a - 290 ;src/esp32.c:50: rc |= (u32)SPI_DATA << 8; - 00000054 DB 57 [11] 291 in a, (_SPI_DATA) - 00000056 57 [ 4] 292 ld d, a - 00000057 59 [ 4] 293 ld e, c - 294 ;src/esp32.c:51: rc |= (u32)SPI_DATA << 16; - 00000058 DB 57 [11] 295 in a, (_SPI_DATA) - 0000005A DD 77 FC [19] 296 ld -4 (ix), a - 0000005D AF [ 4] 297 xor a, a - 0000005E DD 77 FD [19] 298 ld -3 (ix), a - 00000061 DD 77 FE [19] 299 ld -2 (ix), a - 00000064 DD 77 FF [19] 300 ld -1 (ix), a - 00000067 DD 7E FC [19] 301 ld a, -4 (ix) - 0000006A DD 77 FE [19] 302 ld -2 (ix), a - 0000006D AF [ 4] 303 xor a, a - 0000006E DD 77 FF [19] 304 ld -1 (ix), a - 00000071 DD 77 FC [19] 305 ld -4 (ix), a - 00000074 DD 77 FD [19] 306 ld -3 (ix), a - 00000077 DD 6E FE [19] 307 ld l, -2 (ix) - 308 ;src/esp32.c:52: rc |= (u32)SPI_DATA << 24; - 0000007A DB 57 [11] 309 in a, (_SPI_DATA) - 0000007C DD 77 FC [19] 310 ld -4 (ix), a - 0000007F AF [ 4] 311 xor a, a - 00000080 DD 77 FD [19] 312 ld -3 (ix), a - 00000083 DD 77 FE [19] 313 ld -2 (ix), a - 00000086 DD 77 FF [19] 314 ld -1 (ix), a - 00000089 DD 7E FC [19] 315 ld a, -4 (ix) - 0000008C DD 77 FF [19] 316 ld -1 (ix), a - 0000008F AF [ 4] 317 xor a, a - 00000090 DD 77 FC [19] 318 ld -4 (ix), a - 00000093 DD 77 FD [19] 319 ld -3 (ix), a - 00000096 DD 77 FE [19] 320 ld -2 (ix), a - 00000099 DD 66 FF [19] 321 ld h, -1 (ix) - 322 ;src/esp32.c:53: SPI_CTRL = SPI_ESP_CS_OFF; - 0000009C 3E 03 [ 7] 323 ld a, #0x03 - 0000009E D3 77 [11] 324 out (_SPI_CTRL), a - 325 ;src/esp32.c:55: return rc; - 326 ;src/esp32.c:56: } - 000000A0 DD F9 [10] 327 ld sp, ix - 000000A2 DD E1 [14] 328 pop ix - 000000A4 C9 [10] 329 ret - 330 ;src/esp32.c:58: void esp_rd_regs(u8 reg, void *data, u8 size) - 331 ; --------------------------------- - 332 ; Function esp_rd_regs - 333 ; --------------------------------- - 000000A5 334 _esp_rd_regs:: - 000000A5 4F [ 4] 335 ld c, a - 336 ;src/esp32.c:60: u8 *d = (u8*)data; - 337 ;src/esp32.c:62: SPI_CTRL = SPI_ESP_CS_ON; - 000000A6 3E 13 [ 7] 338 ld a, #0x13 - 000000A8 D3 77 [11] 339 out (_SPI_CTRL), a - 340 ;src/esp32.c:63: SPI_DATA = ESP_SPI_CMD_RD_REGS; - 000000AA 3E 02 [ 7] 341 ld a, #0x02 - 000000AC D3 57 [11] 342 out (_SPI_DATA), a - 343 ;src/esp32.c:64: SPI_DATA = reg; - 000000AE 79 [ 4] 344 ld a, c - 000000AF D3 57 [11] 345 out (_SPI_DATA), a - 346 ;src/esp32.c:65: SPI_DATA; // dummy - 000000B1 DB 57 [11] 347 in a, (_SPI_DATA) - 348 ;src/esp32.c:66: SPI_DATA; // dummy - 000000B3 DB 57 [11] 349 in a, (_SPI_DATA) - 350 ;src/esp32.c:67: while (size--) *d++ = SPI_DATA; - 000000B5 FD 21 02 00 [14] 351 ld iy, #2 - 000000B9 FD 39 [15] 352 add iy, sp - 000000BB FD 4E 00 [19] 353 ld c, 0 (iy) - 000000BE 354 00101$: - 000000BE 79 [ 4] 355 ld a, c - 000000BF 0D [ 4] 356 dec c - 000000C0 B7 [ 4] 357 or a, a - 000000C1 28 07 [12] 358 jr z, 00103$ - 000000C3 DB 57 [11] 359 in a, (_SPI_DATA) - 000000C5 12 [ 7] 360 ld (de), a - 000000C6 13 [ 6] 361 inc de - 000000C7 C3rBEr00 [10] 362 jp 00101$ - 000000CA 363 00103$: - 364 ;src/esp32.c:68: SPI_CTRL = SPI_ESP_CS_OFF; - 000000CA 3E 03 [ 7] 365 ld a, #0x03 - 000000CC D3 77 [11] 366 out (_SPI_CTRL), a - 367 ;src/esp32.c:69: } - 000000CE E1 [10] 368 pop hl - 000000CF 33 [ 6] 369 inc sp - 000000D0 E9 [ 4] 370 jp (hl) - 371 ;src/esp32.c:71: void esp_wr_reg8(u8 reg, u8 data) - 372 ; --------------------------------- - 373 ; Function esp_wr_reg8 - 374 ; --------------------------------- - 000000D1 375 _esp_wr_reg8:: - 000000D1 47 [ 4] 376 ld b, a - 000000D2 4D [ 4] 377 ld c, l - 378 ;src/esp32.c:73: SPI_CTRL = SPI_ESP_CS_ON; - 000000D3 3E 13 [ 7] 379 ld a, #0x13 - 000000D5 D3 77 [11] 380 out (_SPI_CTRL), a - 381 ;src/esp32.c:74: SPI_DATA = ESP_SPI_CMD_WR_REGS; - 000000D7 3E 01 [ 7] 382 ld a, #0x01 - 000000D9 D3 57 [11] 383 out (_SPI_DATA), a - 384 ;src/esp32.c:75: SPI_DATA = reg; - 000000DB 78 [ 4] 385 ld a, b - 000000DC D3 57 [11] 386 out (_SPI_DATA), a - 387 ;src/esp32.c:76: SPI_DATA; // dummy - 000000DE DB 57 [11] 388 in a, (_SPI_DATA) - 389 ;src/esp32.c:77: SPI_DATA = data; - 000000E0 79 [ 4] 390 ld a, c - 000000E1 D3 57 [11] 391 out (_SPI_DATA), a - 392 ;src/esp32.c:78: SPI_CTRL = SPI_ESP_CS_OFF; - 000000E3 3E 03 [ 7] 393 ld a, #0x03 - 000000E5 D3 77 [11] 394 out (_SPI_CTRL), a - 395 ;src/esp32.c:79: } - 000000E7 C9 [10] 396 ret - 397 ;src/esp32.c:81: void esp_wr_reg32(u8 reg, u32 data) - 398 ; --------------------------------- - 399 ; Function esp_wr_reg32 - 400 ; --------------------------------- - 000000E8 401 _esp_wr_reg32:: - 000000E8 4F [ 4] 402 ld c, a - 403 ;src/esp32.c:83: SPI_CTRL = SPI_ESP_CS_ON; - 000000E9 3E 13 [ 7] 404 ld a, #0x13 - 000000EB D3 77 [11] 405 out (_SPI_CTRL), a - 406 ;src/esp32.c:84: SPI_DATA = ESP_SPI_CMD_WR_REGS; - 000000ED 3E 01 [ 7] 407 ld a, #0x01 - 000000EF D3 57 [11] 408 out (_SPI_DATA), a - 409 ;src/esp32.c:85: SPI_DATA = reg; - 000000F1 79 [ 4] 410 ld a, c - 000000F2 D3 57 [11] 411 out (_SPI_DATA), a - 412 ;src/esp32.c:86: SPI_DATA; // dummy - 000000F4 DB 57 [11] 413 in a, (_SPI_DATA) - 414 ;src/esp32.c:87: SPI_DATA = (u8)data; - 000000F6 FD 21 02 00 [14] 415 ld iy, #2 - 000000FA FD 39 [15] 416 add iy, sp - 000000FC FD 7E 00 [19] 417 ld a, 0 (iy) - 000000FF D3 57 [11] 418 out (_SPI_DATA), a - 419 ;src/esp32.c:88: SPI_DATA = (u8)(data >> 8); - 00000101 FD 7E 01 [19] 420 ld a, 1 (iy) - 00000104 D3 57 [11] 421 out (_SPI_DATA), a - 422 ;src/esp32.c:89: SPI_DATA = (u8)(data >> 16); - 00000106 FD 7E 02 [19] 423 ld a, 2 (iy) - 00000109 D3 57 [11] 424 out (_SPI_DATA), a - 425 ;src/esp32.c:90: SPI_DATA = (u8)(data >> 24); - 0000010B FD 7E 03 [19] 426 ld a, 3 (iy) - 0000010E D3 57 [11] 427 out (_SPI_DATA), a - 428 ;src/esp32.c:91: SPI_CTRL = SPI_ESP_CS_OFF; - 00000110 3E 03 [ 7] 429 ld a, #0x03 - 00000112 D3 77 [11] 430 out (_SPI_CTRL), a - 431 ;src/esp32.c:92: } - 00000114 E1 [10] 432 pop hl - 00000115 F1 [10] 433 pop af - 00000116 F1 [10] 434 pop af - 00000117 E9 [ 4] 435 jp (hl) - 436 ;src/esp32.c:94: void esp_wr_end() - 437 ; --------------------------------- - 438 ; Function esp_wr_end - 439 ; --------------------------------- - 00000118 440 _esp_wr_end:: - 441 ;src/esp32.c:96: SPI_CTRL = SPI_ESP_CS_ON; - 00000118 3E 13 [ 7] 442 ld a, #0x13 - 0000011A D3 77 [11] 443 out (_SPI_CTRL), a - 444 ;src/esp32.c:97: SPI_DATA = ESP_SPI_CMD_W_END; - 0000011C 3E 07 [ 7] 445 ld a, #0x07 - 0000011E D3 57 [11] 446 out (_SPI_DATA), a - 447 ;src/esp32.c:98: SPI_DATA; // dummy - 00000120 DB 57 [11] 448 in a, (_SPI_DATA) - 449 ;src/esp32.c:99: SPI_CTRL = SPI_ESP_CS_OFF; - 00000122 3E 03 [ 7] 450 ld a, #0x03 - 00000124 D3 77 [11] 451 out (_SPI_CTRL), a - 452 ;src/esp32.c:100: } - 00000126 C9 [10] 453 ret - 454 ;src/esp32.c:102: void esp_send_dma(u16 a, u8 p, u16 l, u16 n) - 455 ; --------------------------------- - 456 ; Function esp_send_dma - 457 ; --------------------------------- - 00000127 458 _esp_send_dma:: - 00000127 7D [ 4] 459 ld a, l - 460 ;src/esp32.c:105: TS_DMASADDRL = (u8)a; - 00000128 01 AF 1A [10] 461 ld bc, #_TS_DMASADDRL - 0000012B ED 79 [12] 462 out (c), a - 463 ;src/esp32.c:106: TS_DMASADDRH = (u8)((u16)a >> 8); - 0000012D 7C [ 4] 464 ld a, h - 0000012E 01 AF 1B [10] 465 ld bc, #_TS_DMASADDRH - 00000131 ED 79 [12] 466 out (c), a - 467 ;src/esp32.c:107: TS_DMASADDRX = p; - 00000133 FD 21 02 00 [14] 468 ld iy, #2 - 00000137 FD 39 [15] 469 add iy, sp - 00000139 FD 7E 00 [19] 470 ld a, 0 (iy) - 0000013C 01 AF 1C [10] 471 ld bc, #_TS_DMASADDRX - 0000013F ED 79 [12] 472 out (c), a - 473 ;src/esp32.c:108: TS_DMALEN = (u8)((l >> 1) - 1); - 00000141 FD 7E 01 [19] 474 ld a, 1 (iy) - 00000144 FD 4E 02 [19] 475 ld c, 2 (iy) - 00000147 FD 23 [10] 476 inc iy - 00000149 CB 39 [ 8] 477 srl c - 0000014B CB 1F [ 8] 478 rr a - 0000014D 3D [ 4] 479 dec a - 0000014E 01 AF 26 [10] 480 ld bc, #_TS_DMALEN - 00000151 ED 79 [12] 481 out (c), a - 482 ;src/esp32.c:109: TS_DMANUM = (u8)(n - 1); - 00000153 FD 7E 02 [19] 483 ld a, 2 (iy) - 00000156 3D [ 4] 484 dec a - 00000157 01 AF 28 [10] 485 ld bc, #_TS_DMANUM - 0000015A ED 79 [12] 486 out (c), a - 487 ;src/esp32.c:111: SPI_CTRL = SPI_ESP_CS_ON; - 0000015C 3E 13 [ 7] 488 ld a, #0x13 - 0000015E D3 77 [11] 489 out (_SPI_CTRL), a - 490 ;src/esp32.c:112: SPI_DATA = ESP_SPI_CMD_WR_DATA; - 00000160 3E 03 [ 7] 491 ld a, #0x03 - 00000162 D3 57 [11] 492 out (_SPI_DATA), a - 493 ;src/esp32.c:113: SPI_DATA; // dummy - 00000164 DB 57 [11] 494 in a, (_SPI_DATA) - 495 ;src/esp32.c:114: SPI_DATA; // dummy - 00000166 DB 57 [11] 496 in a, (_SPI_DATA) - 497 ;src/esp32.c:115: TS_DMACTR = TS_DMA_RAM_SPI; - 00000168 3E 82 [ 7] 498 ld a, #0x82 - 0000016A 01 AF 27 [10] 499 ld bc, #_TS_DMACTR - 0000016D ED 79 [12] 500 out (c), a - 501 ;src/esp32.c:116: while (TS_DMASTATUS & 0x80); - 0000016F 502 00101$: - 0000016F 3E 27 [ 7] 503 ld a, #>(_TS_DMASTATUS) - 00000171 DB AF [11] 504 in a, (#<(_TS_DMASTATUS)) - 00000173 07 [ 4] 505 rlca - 00000174 38 F9 [12] 506 jr c, 00101$ - 507 ;src/esp32.c:117: SPI_CTRL = SPI_ESP_CS_OFF; - 00000176 3E 03 [ 7] 508 ld a, #0x03 - 00000178 D3 77 [11] 509 out (_SPI_CTRL), a - 510 ;src/esp32.c:119: esp_wr_end(); - 0000017A CDr18r01 [17] 511 call _esp_wr_end - 512 ;src/esp32.c:120: esp_wait_busy(100); // 2s - esp32 consuming one DMA'd chunk should be near-instant - 0000017D 21 64 00 [10] 513 ld hl, #0x0064 - 00000180 CDrE5r01 [17] 514 call _esp_wait_busy - 515 ;src/esp32.c:121: } - 00000183 E1 [10] 516 pop hl - 00000184 F1 [10] 517 pop af - 00000185 F1 [10] 518 pop af - 00000186 33 [ 6] 519 inc sp - 00000187 E9 [ 4] 520 jp (hl) - 521 ;src/esp32.c:123: void esp_rd_end() - 522 ; --------------------------------- - 523 ; Function esp_rd_end - 524 ; --------------------------------- - 00000188 525 _esp_rd_end:: - 526 ;src/esp32.c:125: SPI_CTRL = SPI_ESP_CS_ON; - 00000188 3E 13 [ 7] 527 ld a, #0x13 - 0000018A D3 77 [11] 528 out (_SPI_CTRL), a - 529 ;src/esp32.c:126: SPI_DATA = ESP_SPI_CMD_R_END; - 0000018C 3E 08 [ 7] 530 ld a, #0x08 - 0000018E D3 57 [11] 531 out (_SPI_DATA), a - 532 ;src/esp32.c:127: SPI_DATA; // dummy - 00000190 DB 57 [11] 533 in a, (_SPI_DATA) - 534 ;src/esp32.c:128: SPI_CTRL = SPI_ESP_CS_OFF; - 00000192 3E 03 [ 7] 535 ld a, #0x03 - 00000194 D3 77 [11] 536 out (_SPI_CTRL), a - 537 ;src/esp32.c:129: } - 00000196 C9 [10] 538 ret - 539 ;src/esp32.c:139: u8 esp_wait_status(u8 status, u16 max_frames) - 540 ; --------------------------------- - 541 ; Function esp_wait_status - 542 ; --------------------------------- - 00000197 543 _esp_wait_status:: - 00000197 DD E5 [15] 544 push ix - 00000199 DD 21 00 00 [14] 545 ld ix, #0 - 0000019D DD 39 [15] 546 add ix, sp - 0000019F 21 FB FF [10] 547 ld hl, #-5 - 000001A2 39 [11] 548 add hl, sp - 000001A3 F9 [ 6] 549 ld sp, hl - 000001A4 DD 77 FF [19] 550 ld -1 (ix), a - 000001A7 DD 73 FD [19] 551 ld -3 (ix), e - 000001AA DD 72 FE [19] 552 ld -2 (ix), d - 553 ;src/esp32.c:141: u16 start = *(u16*)_TMN; - 000001AD 21 09 60 [10] 554 ld hl, #0x6009 - 000001B0 7E [ 7] 555 ld a, (hl) - 000001B1 DD 77 FB [19] 556 ld -5 (ix), a - 000001B4 23 [ 6] 557 inc hl - 000001B5 7E [ 7] 558 ld a, (hl) - 000001B6 DD 77 FC [19] 559 ld -4 (ix), a - 560 ;src/esp32.c:143: while ((u16)(*(u16*)_TMN - start) < max_frames) - 000001B9 561 00103$: - 000001B9 2A 09 60 [16] 562 ld hl, (#0x6009) - 000001BC 7D [ 4] 563 ld a, l - 000001BD DD 96 FB [19] 564 sub a, -5 (ix) - 000001C0 4F [ 4] 565 ld c, a - 000001C1 7C [ 4] 566 ld a, h - 000001C2 DD 9E FC [19] 567 sbc a, -4 (ix) - 000001C5 47 [ 4] 568 ld b, a - 000001C6 79 [ 4] 569 ld a, c - 000001C7 DD 96 FD [19] 570 sub a, -3 (ix) - 000001CA 78 [ 4] 571 ld a, b - 000001CB DD 9E FE [19] 572 sbc a, -2 (ix) - 000001CE 30 0F [12] 573 jr nc, 00105$ - 574 ;src/esp32.c:145: if (esp_rd_reg8(ESP_REG_STATUS) == status) - 000001D0 3E 01 [ 7] 575 ld a, #0x01 - 000001D2 CDr1Er00 [17] 576 call _esp_rd_reg8 - 000001D5 DD 96 FF [19] 577 sub a, -1 (ix) - 000001D8 20 DF [12] 578 jr nz, 00103$ - 579 ;src/esp32.c:146: return 1; - 000001DA 3E 01 [ 7] 580 ld a, #0x01 - 000001DC C3rE0r01 [10] 581 jp 00106$ - 000001DF 582 00105$: - 583 ;src/esp32.c:149: return 0; - 000001DF AF [ 4] 584 xor a, a - 000001E0 585 00106$: - 586 ;src/esp32.c:150: } - 000001E0 DD F9 [10] 587 ld sp, ix - 000001E2 DD E1 [14] 588 pop ix - 000001E4 C9 [10] 589 ret - 590 ;src/esp32.c:152: u8 esp_wait_busy(u16 max_frames) - 591 ; --------------------------------- - 592 ; Function esp_wait_busy - 593 ; --------------------------------- - 000001E5 594 _esp_wait_busy:: - 000001E5 DD E5 [15] 595 push ix - 000001E7 DD 21 00 00 [14] 596 ld ix, #0 - 000001EB DD 39 [15] 597 add ix, sp - 000001ED F5 [11] 598 push af - 000001EE F5 [11] 599 push af - 000001EF DD 75 FE [19] 600 ld -2 (ix), l - 000001F2 DD 74 FF [19] 601 ld -1 (ix), h - 602 ;src/esp32.c:154: u16 start = *(u16*)_TMN; - 000001F5 21 09 60 [10] 603 ld hl, #0x6009 - 000001F8 7E [ 7] 604 ld a, (hl) - 000001F9 DD 77 FC [19] 605 ld -4 (ix), a - 000001FC 23 [ 6] 606 inc hl - 000001FD 7E [ 7] 607 ld a, (hl) - 000001FE DD 77 FD [19] 608 ld -3 (ix), a - 609 ;src/esp32.c:156: while ((u16)(*(u16*)_TMN - start) < max_frames) - 00000201 610 00103$: - 00000201 2A 09 60 [16] 611 ld hl, (#0x6009) - 00000204 7D [ 4] 612 ld a, l - 00000205 DD 96 FC [19] 613 sub a, -4 (ix) - 00000208 4F [ 4] 614 ld c, a - 00000209 7C [ 4] 615 ld a, h - 0000020A DD 9E FD [19] 616 sbc a, -3 (ix) - 0000020D 47 [ 4] 617 ld b, a - 0000020E 79 [ 4] 618 ld a, c - 0000020F DD 96 FE [19] 619 sub a, -2 (ix) - 00000212 78 [ 4] 620 ld a, b - 00000213 DD 9E FF [19] 621 sbc a, -1 (ix) - 00000216 30 0E [12] 622 jr nc, 00105$ - 623 ;src/esp32.c:158: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) - 00000218 3E 01 [ 7] 624 ld a, #0x01 - 0000021A CDr1Er00 [17] 625 call _esp_rd_reg8 - 0000021D FE 02 [ 7] 626 cp a, #0x02 - 0000021F 28 E0 [12] 627 jr z, 00103$ - 628 ;src/esp32.c:159: return 1; - 00000221 3E 01 [ 7] 629 ld a, #0x01 - 00000223 C3r27r02 [10] 630 jp 00106$ - 00000226 631 00105$: - 632 ;src/esp32.c:162: return 0; - 00000226 AF [ 4] 633 xor a, a - 00000227 634 00106$: - 635 ;src/esp32.c:163: } - 00000227 DD F9 [10] 636 ld sp, ix - 00000229 DD E1 [14] 637 pop ix - 0000022B C9 [10] 638 ret - 639 ;src/esp32.c:165: int esp_create_obj(u32 size, u8 type) - 640 ; --------------------------------- - 641 ; Function esp_create_obj - 642 ; --------------------------------- - 0000022C 643 _esp_create_obj:: - 644 ;src/esp32.c:167: esp_wr_reg32(ESP_REG_DATA_SIZE, size); - 0000022C E5 [11] 645 push hl - 0000022D D5 [11] 646 push de - 0000022E 3E 03 [ 7] 647 ld a, #0x03 - 00000230 CDrE8r00 [17] 648 call _esp_wr_reg32 - 649 ;src/esp32.c:168: esp_wr_reg8(ESP_REG_OBJ_TYPE, type); - 00000233 FD 21 02 00 [14] 650 ld iy, #2 - 00000237 FD 39 [15] 651 add iy, sp - 00000239 FD 6E 00 [19] 652 ld l, 0 (iy) - 0000023C 3E 02 [ 7] 653 ld a, #0x02 - 0000023E CDrD1r00 [17] 654 call _esp_wr_reg8 - 655 ;src/esp32.c:169: esp_cmd(ESP_CMD_MAKE_OBJECT); - 00000241 3E E0 [ 7] 656 ld a, #0xe0 - 00000243 CDr05r00 [17] 657 call _esp_cmd - 658 ;src/esp32.c:170: esp_wait_busy(100); // 2s - object allocation should be near-instant - 00000246 21 64 00 [10] 659 ld hl, #0x0064 - 00000249 CDrE5r01 [17] 660 call _esp_wait_busy - 661 ;src/esp32.c:173: return esp_rd_reg8(ESP_REG_OBJ_HANDLE); - 0000024C 3E 0B [ 7] 662 ld a, #0x0b - 0000024E CDr1Er00 [17] 663 call _esp_rd_reg8 - 00000251 5F [ 4] 664 ld e, a - 00000252 16 00 [ 7] 665 ld d, #0x00 - 666 ;src/esp32.c:174: } - 00000254 E1 [10] 667 pop hl - 00000255 33 [ 6] 668 inc sp - 00000256 E9 [ 4] 669 jp (hl) - 670 ;src/main.c:101: bool esp_init() - 671 ; --------------------------------- - 672 ; Function esp_init - 673 ; --------------------------------- - 00000257 674 _esp_init:: - 675 ;src/main.c:103: esp_cmd(ESP_CMD_NOP); - 00000257 AF [ 4] 676 xor a, a - 00000258 CDr05r00 [17] 677 call _esp_cmd - 678 ;src/main.c:104: esp_rd_end(); - 0000025B CDr88r01 [17] 679 call _esp_rd_end - 680 ;src/main.c:105: esp_wr_end(); - 0000025E CDr18r01 [17] 681 call _esp_wr_end - 682 ;src/main.c:109: return true; - 00000261 3E 01 [ 7] 683 ld a, #0x01 - 684 ;src/main.c:110: } - 00000263 C9 [10] 685 ret - 00000264 686 _win_xm: - 00000264 81 687 .db #0x81 ; 129 - 00000265 00 688 .db #0x00 ; 0 - 00000266 19 689 .db #0x19 ; 25 - 00000267 0A 690 .db #0x0a ; 10 - 00000268 28 691 .db #0x28 ; 40 - 00000269 0C 692 .db #0x0c ; 12 - 0000026A 70 693 .db #0x70 ; 112 'p' - 0000026B 00 694 .db #0x00 ; 0 - 0000026C 00 00 695 .dw #0x0000 - 0000026E 00 696 .db #0x00 ; 0 - 0000026F 00 697 .db #0x00 ; 0 - 00000270r88r02 698 .dw __str_0 - 00000272rA2r02 699 .dw __str_1 - 00000274rA2r02 700 .dw __str_1 - 00000276 701 _win_about: - 00000276 01 702 .db #0x01 ; 1 - 00000277 00 703 .db #0x00 ; 0 - 00000278 16 704 .db #0x16 ; 22 - 00000279 0A 705 .db #0x0a ; 10 - 0000027A 24 706 .db #0x24 ; 36 - 0000027B 05 707 .db #0x05 ; 5 - 0000027C 4F 708 .db #0x4f ; 79 'O' - 0000027D 00 709 .db #0x00 ; 0 - 0000027E 00 00 710 .dw #0x0000 - 00000280 00 711 .db #0x00 ; 0 - 00000281 00 712 .db #0x00 ; 0 - 00000282rA3r02 713 .dw __str_2 - 00000284rA2r02 714 .dw __str_1 - 00000286rACr02 715 .dw __str_3 - 00000288 716 __str_0: - 00000288 0E 717 .db 0x0e - 00000289 20 58 4D 2F 58 4D 5A 718 .ascii " XM/XMZ/S3M Player v0.1 " + 196 .area _HOME + 197 .area _GSINIT + 198 .area _GSFINAL + 199 .area _GSINIT + 200 ;-------------------------------------------------------- + 201 ; Home + 202 ;-------------------------------------------------------- + 203 .area _HOME + 204 .area _HOME + 205 ;-------------------------------------------------------- + 206 ; code + 207 ;-------------------------------------------------------- + 208 .area _CODE + 209 ;src/wc_api.c:71: void wc_exit(u8 rc) __naked + 210 ; --------------------------------- + 211 ; Function wc_exit + 212 ; --------------------------------- + 00000000 213 _wc_exit:: + 214 ;src/wc_api.c:77: __endasm; + 00000000 ED 7Br00r10 [20] 215 ld sp, (_ret_sp) + 00000004 C9 [10] 216 ret + 217 ;src/wc_api.c:78: } + 218 ;src/esp32.c:18: void esp_cmd(u8 cmd) + 219 ; --------------------------------- + 220 ; Function esp_cmd + 221 ; --------------------------------- + 00000005 222 _esp_cmd:: + 00000005 4F [ 4] 223 ld c, a + 224 ;src/esp32.c:20: SPI_CTRL = SPI_ESP_CS_ON; + 00000006 3E 13 [ 7] 225 ld a, #0x13 + 00000008 D3 77 [11] 226 out (_SPI_CTRL), a + 227 ;src/esp32.c:21: SPI_DATA = ESP_SPI_CMD_WR_REGS; + 0000000A 3E 01 [ 7] 228 ld a, #0x01 + 0000000C D3 57 [11] 229 out (_SPI_DATA), a + 230 ;src/esp32.c:22: SPI_DATA = ESP_REG_COMMAND; + 0000000E AF [ 4] 231 xor a, a + 0000000F D3 57 [11] 232 out (_SPI_DATA), a + 233 ;src/esp32.c:23: SPI_DATA; // dummy + 00000011 DB 57 [11] 234 in a, (_SPI_DATA) + 235 ;src/esp32.c:24: SPI_DATA = cmd; // Command + 00000013 79 [ 4] 236 ld a, c + 00000014 D3 57 [11] 237 out (_SPI_DATA), a + 238 ;src/esp32.c:25: SPI_DATA = ESP_ST_IDLE; // Reset status + 00000016 AF [ 4] 239 xor a, a + 00000017 D3 57 [11] 240 out (_SPI_DATA), a + 241 ;src/esp32.c:26: SPI_CTRL = SPI_ESP_CS_OFF; + 00000019 3E 03 [ 7] 242 ld a, #0x03 + 0000001B D3 77 [11] 243 out (_SPI_CTRL), a + 244 ;src/esp32.c:27: } + 0000001D C9 [10] 245 ret + 246 ;src/esp32.c:29: u8 esp_rd_reg8(u8 reg) + 247 ; --------------------------------- + 248 ; Function esp_rd_reg8 + 249 ; --------------------------------- + 0000001E 250 _esp_rd_reg8:: + 0000001E 4F [ 4] 251 ld c, a + 252 ;src/esp32.c:31: SPI_CTRL = SPI_ESP_CS_ON; + 0000001F 3E 13 [ 7] 253 ld a, #0x13 + 00000021 D3 77 [11] 254 out (_SPI_CTRL), a + 255 ;src/esp32.c:32: SPI_DATA = ESP_SPI_CMD_RD_REGS; + 00000023 3E 02 [ 7] 256 ld a, #0x02 + 00000025 D3 57 [11] 257 out (_SPI_DATA), a + 258 ;src/esp32.c:33: SPI_DATA = reg; + 00000027 79 [ 4] 259 ld a, c + 00000028 D3 57 [11] 260 out (_SPI_DATA), a + 261 ;src/esp32.c:34: SPI_DATA; // dummy + 0000002A DB 57 [11] 262 in a, (_SPI_DATA) + 263 ;src/esp32.c:35: SPI_DATA; // dummy + 0000002C DB 57 [11] 264 in a, (_SPI_DATA) + 265 ;src/esp32.c:36: u8 rc = SPI_DATA; + 0000002E DB 57 [11] 266 in a, (_SPI_DATA) + 00000030 4F [ 4] 267 ld c, a + 268 ;src/esp32.c:37: SPI_CTRL = SPI_ESP_CS_OFF; + 00000031 3E 03 [ 7] 269 ld a, #0x03 + 00000033 D3 77 [11] 270 out (_SPI_CTRL), a + 271 ;src/esp32.c:39: return rc; + 00000035 79 [ 4] 272 ld a, c + 273 ;src/esp32.c:40: } + 00000036 C9 [10] 274 ret + 275 ;src/esp32.c:42: u32 esp_rd_reg32(u8 reg) + 276 ; --------------------------------- + 277 ; Function esp_rd_reg32 + 278 ; --------------------------------- + 00000037 279 _esp_rd_reg32:: + 00000037 DD E5 [15] 280 push ix + 00000039 DD 21 00 00 [14] 281 ld ix, #0 + 0000003D DD 39 [15] 282 add ix, sp + 0000003F F5 [11] 283 push af + 00000040 F5 [11] 284 push af + 00000041 4F [ 4] 285 ld c, a + 286 ;src/esp32.c:44: SPI_CTRL = SPI_ESP_CS_ON; + 00000042 3E 13 [ 7] 287 ld a, #0x13 + 00000044 D3 77 [11] 288 out (_SPI_CTRL), a + 289 ;src/esp32.c:45: SPI_DATA = ESP_SPI_CMD_RD_REGS; + 00000046 3E 02 [ 7] 290 ld a, #0x02 + 00000048 D3 57 [11] 291 out (_SPI_DATA), a + 292 ;src/esp32.c:46: SPI_DATA = reg; + 0000004A 79 [ 4] 293 ld a, c + 0000004B D3 57 [11] 294 out (_SPI_DATA), a + 295 ;src/esp32.c:47: SPI_DATA; // dummy + 0000004D DB 57 [11] 296 in a, (_SPI_DATA) + 297 ;src/esp32.c:48: SPI_DATA; // dummy + 0000004F DB 57 [11] 298 in a, (_SPI_DATA) + 299 ;src/esp32.c:49: u32 rc = SPI_DATA; + 00000051 DB 57 [11] 300 in a, (_SPI_DATA) + 00000053 4F [ 4] 301 ld c, a + 302 ;src/esp32.c:50: rc |= (u32)SPI_DATA << 8; + 00000054 DB 57 [11] 303 in a, (_SPI_DATA) + 00000056 57 [ 4] 304 ld d, a + 00000057 59 [ 4] 305 ld e, c + 306 ;src/esp32.c:51: rc |= (u32)SPI_DATA << 16; + 00000058 DB 57 [11] 307 in a, (_SPI_DATA) + 0000005A DD 77 FC [19] 308 ld -4 (ix), a + 0000005D AF [ 4] 309 xor a, a + 0000005E DD 77 FD [19] 310 ld -3 (ix), a + 00000061 DD 77 FE [19] 311 ld -2 (ix), a + 00000064 DD 77 FF [19] 312 ld -1 (ix), a + 00000067 DD 7E FC [19] 313 ld a, -4 (ix) + 0000006A DD 77 FE [19] 314 ld -2 (ix), a + 0000006D AF [ 4] 315 xor a, a + 0000006E DD 77 FF [19] 316 ld -1 (ix), a + 00000071 DD 77 FC [19] 317 ld -4 (ix), a + 00000074 DD 77 FD [19] 318 ld -3 (ix), a + 00000077 DD 6E FE [19] 319 ld l, -2 (ix) + 320 ;src/esp32.c:52: rc |= (u32)SPI_DATA << 24; + 0000007A DB 57 [11] 321 in a, (_SPI_DATA) + 0000007C DD 77 FC [19] 322 ld -4 (ix), a + 0000007F AF [ 4] 323 xor a, a + 00000080 DD 77 FD [19] 324 ld -3 (ix), a + 00000083 DD 77 FE [19] 325 ld -2 (ix), a + 00000086 DD 77 FF [19] 326 ld -1 (ix), a + 00000089 DD 7E FC [19] 327 ld a, -4 (ix) + 0000008C DD 77 FF [19] 328 ld -1 (ix), a + 0000008F AF [ 4] 329 xor a, a + 00000090 DD 77 FC [19] 330 ld -4 (ix), a + 00000093 DD 77 FD [19] 331 ld -3 (ix), a + 00000096 DD 77 FE [19] 332 ld -2 (ix), a + 00000099 DD 66 FF [19] 333 ld h, -1 (ix) + 334 ;src/esp32.c:53: SPI_CTRL = SPI_ESP_CS_OFF; + 0000009C 3E 03 [ 7] 335 ld a, #0x03 + 0000009E D3 77 [11] 336 out (_SPI_CTRL), a + 337 ;src/esp32.c:55: return rc; + 338 ;src/esp32.c:56: } + 000000A0 DD F9 [10] 339 ld sp, ix + 000000A2 DD E1 [14] 340 pop ix + 000000A4 C9 [10] 341 ret + 342 ;src/esp32.c:58: void esp_rd_regs(u8 reg, void *data, u8 size) + 343 ; --------------------------------- + 344 ; Function esp_rd_regs + 345 ; --------------------------------- + 000000A5 346 _esp_rd_regs:: + 000000A5 4F [ 4] 347 ld c, a + 348 ;src/esp32.c:60: u8 *d = (u8*)data; + 349 ;src/esp32.c:62: SPI_CTRL = SPI_ESP_CS_ON; + 000000A6 3E 13 [ 7] 350 ld a, #0x13 + 000000A8 D3 77 [11] 351 out (_SPI_CTRL), a + 352 ;src/esp32.c:63: SPI_DATA = ESP_SPI_CMD_RD_REGS; + 000000AA 3E 02 [ 7] 353 ld a, #0x02 + 000000AC D3 57 [11] 354 out (_SPI_DATA), a + 355 ;src/esp32.c:64: SPI_DATA = reg; + 000000AE 79 [ 4] 356 ld a, c + 000000AF D3 57 [11] 357 out (_SPI_DATA), a + 358 ;src/esp32.c:65: SPI_DATA; // dummy + 000000B1 DB 57 [11] 359 in a, (_SPI_DATA) + 360 ;src/esp32.c:66: SPI_DATA; // dummy + 000000B3 DB 57 [11] 361 in a, (_SPI_DATA) + 362 ;src/esp32.c:67: while (size--) *d++ = SPI_DATA; + 000000B5 FD 21 02 00 [14] 363 ld iy, #2 + 000000B9 FD 39 [15] 364 add iy, sp + 000000BB FD 4E 00 [19] 365 ld c, 0 (iy) + 000000BE 366 00101$: + 000000BE 79 [ 4] 367 ld a, c + 000000BF 0D [ 4] 368 dec c + 000000C0 B7 [ 4] 369 or a, a + 000000C1 28 07 [12] 370 jr z, 00103$ + 000000C3 DB 57 [11] 371 in a, (_SPI_DATA) + 000000C5 12 [ 7] 372 ld (de), a + 000000C6 13 [ 6] 373 inc de + 000000C7 C3rBEr00 [10] 374 jp 00101$ + 000000CA 375 00103$: + 376 ;src/esp32.c:68: SPI_CTRL = SPI_ESP_CS_OFF; + 000000CA 3E 03 [ 7] 377 ld a, #0x03 + 000000CC D3 77 [11] 378 out (_SPI_CTRL), a + 379 ;src/esp32.c:69: } + 000000CE E1 [10] 380 pop hl + 000000CF 33 [ 6] 381 inc sp + 000000D0 E9 [ 4] 382 jp (hl) + 383 ;src/esp32.c:71: void esp_wr_reg8(u8 reg, u8 data) + 384 ; --------------------------------- + 385 ; Function esp_wr_reg8 + 386 ; --------------------------------- + 000000D1 387 _esp_wr_reg8:: + 000000D1 47 [ 4] 388 ld b, a + 000000D2 4D [ 4] 389 ld c, l + 390 ;src/esp32.c:73: SPI_CTRL = SPI_ESP_CS_ON; + 000000D3 3E 13 [ 7] 391 ld a, #0x13 + 000000D5 D3 77 [11] 392 out (_SPI_CTRL), a + 393 ;src/esp32.c:74: SPI_DATA = ESP_SPI_CMD_WR_REGS; + 000000D7 3E 01 [ 7] 394 ld a, #0x01 + 000000D9 D3 57 [11] 395 out (_SPI_DATA), a + 396 ;src/esp32.c:75: SPI_DATA = reg; + 000000DB 78 [ 4] 397 ld a, b + 000000DC D3 57 [11] 398 out (_SPI_DATA), a + 399 ;src/esp32.c:76: SPI_DATA; // dummy + 000000DE DB 57 [11] 400 in a, (_SPI_DATA) + 401 ;src/esp32.c:77: SPI_DATA = data; + 000000E0 79 [ 4] 402 ld a, c + 000000E1 D3 57 [11] 403 out (_SPI_DATA), a + 404 ;src/esp32.c:78: SPI_CTRL = SPI_ESP_CS_OFF; + 000000E3 3E 03 [ 7] 405 ld a, #0x03 + 000000E5 D3 77 [11] 406 out (_SPI_CTRL), a + 407 ;src/esp32.c:79: } + 000000E7 C9 [10] 408 ret + 409 ;src/esp32.c:81: void esp_wr_reg32(u8 reg, u32 data) + 410 ; --------------------------------- + 411 ; Function esp_wr_reg32 + 412 ; --------------------------------- + 000000E8 413 _esp_wr_reg32:: + 000000E8 4F [ 4] 414 ld c, a + 415 ;src/esp32.c:83: SPI_CTRL = SPI_ESP_CS_ON; + 000000E9 3E 13 [ 7] 416 ld a, #0x13 + 000000EB D3 77 [11] 417 out (_SPI_CTRL), a + 418 ;src/esp32.c:84: SPI_DATA = ESP_SPI_CMD_WR_REGS; + 000000ED 3E 01 [ 7] 419 ld a, #0x01 + 000000EF D3 57 [11] 420 out (_SPI_DATA), a + 421 ;src/esp32.c:85: SPI_DATA = reg; + 000000F1 79 [ 4] 422 ld a, c + 000000F2 D3 57 [11] 423 out (_SPI_DATA), a + 424 ;src/esp32.c:86: SPI_DATA; // dummy + 000000F4 DB 57 [11] 425 in a, (_SPI_DATA) + 426 ;src/esp32.c:87: SPI_DATA = (u8)data; + 000000F6 FD 21 02 00 [14] 427 ld iy, #2 + 000000FA FD 39 [15] 428 add iy, sp + 000000FC FD 7E 00 [19] 429 ld a, 0 (iy) + 000000FF D3 57 [11] 430 out (_SPI_DATA), a + 431 ;src/esp32.c:88: SPI_DATA = (u8)(data >> 8); + 00000101 FD 7E 01 [19] 432 ld a, 1 (iy) + 00000104 D3 57 [11] 433 out (_SPI_DATA), a + 434 ;src/esp32.c:89: SPI_DATA = (u8)(data >> 16); + 00000106 FD 7E 02 [19] 435 ld a, 2 (iy) + 00000109 D3 57 [11] 436 out (_SPI_DATA), a + 437 ;src/esp32.c:90: SPI_DATA = (u8)(data >> 24); + 0000010B FD 7E 03 [19] 438 ld a, 3 (iy) + 0000010E D3 57 [11] 439 out (_SPI_DATA), a + 440 ;src/esp32.c:91: SPI_CTRL = SPI_ESP_CS_OFF; + 00000110 3E 03 [ 7] 441 ld a, #0x03 + 00000112 D3 77 [11] 442 out (_SPI_CTRL), a + 443 ;src/esp32.c:92: } + 00000114 E1 [10] 444 pop hl + 00000115 F1 [10] 445 pop af + 00000116 F1 [10] 446 pop af + 00000117 E9 [ 4] 447 jp (hl) + 448 ;src/esp32.c:94: void esp_wr_end() + 449 ; --------------------------------- + 450 ; Function esp_wr_end + 451 ; --------------------------------- + 00000118 452 _esp_wr_end:: + 453 ;src/esp32.c:96: SPI_CTRL = SPI_ESP_CS_ON; + 00000118 3E 13 [ 7] 454 ld a, #0x13 + 0000011A D3 77 [11] 455 out (_SPI_CTRL), a + 456 ;src/esp32.c:97: SPI_DATA = ESP_SPI_CMD_W_END; + 0000011C 3E 07 [ 7] 457 ld a, #0x07 + 0000011E D3 57 [11] 458 out (_SPI_DATA), a + 459 ;src/esp32.c:98: SPI_DATA; // dummy + 00000120 DB 57 [11] 460 in a, (_SPI_DATA) + 461 ;src/esp32.c:99: SPI_CTRL = SPI_ESP_CS_OFF; + 00000122 3E 03 [ 7] 462 ld a, #0x03 + 00000124 D3 77 [11] 463 out (_SPI_CTRL), a + 464 ;src/esp32.c:100: } + 00000126 C9 [10] 465 ret + 466 ;src/esp32.c:114: u8 esp_wait_not_busy(u16 max_frames) + 467 ; --------------------------------- + 468 ; Function esp_wait_not_busy + 469 ; --------------------------------- + 00000127 470 _esp_wait_not_busy:: + 00000127 DD E5 [15] 471 push ix + 00000129 DD 21 00 00 [14] 472 ld ix, #0 + 0000012D DD 39 [15] 473 add ix, sp + 0000012F F5 [11] 474 push af + 00000130 F5 [11] 475 push af + 00000131 DD 75 FE [19] 476 ld -2 (ix), l + 00000134 DD 74 FF [19] 477 ld -1 (ix), h + 478 ;src/esp32.c:116: u16 start = *(u16*)_TMN; + 00000137 21 09 60 [10] 479 ld hl, #0x6009 + 0000013A 7E [ 7] 480 ld a, (hl) + 0000013B DD 77 FC [19] 481 ld -4 (ix), a + 0000013E 23 [ 6] 482 inc hl + 0000013F 7E [ 7] 483 ld a, (hl) + 00000140 DD 77 FD [19] 484 ld -3 (ix), a + 485 ;src/esp32.c:118: while ((u16)(*(u16*)_TMN - start) < max_frames) + 00000143 486 00103$: + 00000143 2A 09 60 [16] 487 ld hl, (#0x6009) + 00000146 7D [ 4] 488 ld a, l + 00000147 DD 96 FC [19] 489 sub a, -4 (ix) + 0000014A 4F [ 4] 490 ld c, a + 0000014B 7C [ 4] 491 ld a, h + 0000014C DD 9E FD [19] 492 sbc a, -3 (ix) + 0000014F 47 [ 4] 493 ld b, a + 00000150 79 [ 4] 494 ld a, c + 00000151 DD 96 FE [19] 495 sub a, -2 (ix) + 00000154 78 [ 4] 496 ld a, b + 00000155 DD 9E FF [19] 497 sbc a, -1 (ix) + 00000158 30 0E [12] 498 jr nc, 00105$ + 499 ;src/esp32.c:120: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) + 0000015A 3E 01 [ 7] 500 ld a, #0x01 + 0000015C CDr1Er00 [17] 501 call _esp_rd_reg8 + 0000015F FE 02 [ 7] 502 cp a, #0x02 + 00000161 28 E0 [12] 503 jr z, 00103$ + 504 ;src/esp32.c:121: return 1; + 00000163 3E 01 [ 7] 505 ld a, #0x01 + 00000165 C3r69r01 [10] 506 jp 00106$ + 00000168 507 00105$: + 508 ;src/esp32.c:124: return 0; + 00000168 AF [ 4] 509 xor a, a + 00000169 510 00106$: + 511 ;src/esp32.c:125: } + 00000169 DD F9 [10] 512 ld sp, ix + 0000016B DD E1 [14] 513 pop ix + 0000016D C9 [10] 514 ret + 515 ;src/esp32.c:127: void esp_send_dma(u16 a, u8 p, u16 l, u16 n) + 516 ; --------------------------------- + 517 ; Function esp_send_dma + 518 ; --------------------------------- + 0000016E 519 _esp_send_dma:: + 0000016E 7D [ 4] 520 ld a, l + 521 ;src/esp32.c:130: TS_DMASADDRL = (u8)a; + 0000016F 01 AF 1A [10] 522 ld bc, #_TS_DMASADDRL + 00000172 ED 79 [12] 523 out (c), a + 524 ;src/esp32.c:131: TS_DMASADDRH = (u8)((u16)a >> 8); + 00000174 7C [ 4] 525 ld a, h + 00000175 01 AF 1B [10] 526 ld bc, #_TS_DMASADDRH + 00000178 ED 79 [12] 527 out (c), a + 528 ;src/esp32.c:132: TS_DMASADDRX = p; + 0000017A FD 21 02 00 [14] 529 ld iy, #2 + 0000017E FD 39 [15] 530 add iy, sp + 00000180 FD 7E 00 [19] 531 ld a, 0 (iy) + 00000183 01 AF 1C [10] 532 ld bc, #_TS_DMASADDRX + 00000186 ED 79 [12] 533 out (c), a + 534 ;src/esp32.c:133: TS_DMALEN = (u8)((l >> 1) - 1); + 00000188 FD 7E 01 [19] 535 ld a, 1 (iy) + 0000018B FD 4E 02 [19] 536 ld c, 2 (iy) + 0000018E FD 23 [10] 537 inc iy + 00000190 CB 39 [ 8] 538 srl c + 00000192 CB 1F [ 8] 539 rr a + 00000194 3D [ 4] 540 dec a + 00000195 01 AF 26 [10] 541 ld bc, #_TS_DMALEN + 00000198 ED 79 [12] 542 out (c), a + 543 ;src/esp32.c:134: TS_DMANUM = (u8)(n - 1); + 0000019A FD 7E 02 [19] 544 ld a, 2 (iy) + 0000019D 3D [ 4] 545 dec a + 0000019E 01 AF 28 [10] 546 ld bc, #_TS_DMANUM + 000001A1 ED 79 [12] 547 out (c), a + 548 ;src/esp32.c:136: SPI_CTRL = SPI_ESP_CS_ON; + 000001A3 3E 13 [ 7] 549 ld a, #0x13 + 000001A5 D3 77 [11] 550 out (_SPI_CTRL), a + 551 ;src/esp32.c:137: SPI_DATA = ESP_SPI_CMD_WR_DATA; + 000001A7 3E 03 [ 7] 552 ld a, #0x03 + 000001A9 D3 57 [11] 553 out (_SPI_DATA), a + 554 ;src/esp32.c:138: SPI_DATA; // dummy + 000001AB DB 57 [11] 555 in a, (_SPI_DATA) + 556 ;src/esp32.c:139: SPI_DATA; // dummy + 000001AD DB 57 [11] 557 in a, (_SPI_DATA) + 558 ;src/esp32.c:140: TS_DMACTR = TS_DMA_RAM_SPI; + 000001AF 3E 82 [ 7] 559 ld a, #0x82 + 000001B1 01 AF 27 [10] 560 ld bc, #_TS_DMACTR + 000001B4 ED 79 [12] 561 out (c), a + 562 ;src/esp32.c:141: while (TS_DMASTATUS & 0x80); + 000001B6 563 00101$: + 000001B6 3E 27 [ 7] 564 ld a, #>(_TS_DMASTATUS) + 000001B8 DB AF [11] 565 in a, (#<(_TS_DMASTATUS)) + 000001BA 07 [ 4] 566 rlca + 000001BB 38 F9 [12] 567 jr c, 00101$ + 568 ;src/esp32.c:142: SPI_CTRL = SPI_ESP_CS_OFF; + 000001BD 3E 03 [ 7] 569 ld a, #0x03 + 000001BF D3 77 [11] 570 out (_SPI_CTRL), a + 571 ;src/esp32.c:144: esp_wr_end(); + 000001C1 CDr18r01 [17] 572 call _esp_wr_end + 573 ;src/esp32.c:145: esp_wait_not_busy(100); // 2s - esp32 consuming one DMA'd chunk should be near-instant + 000001C4 21 64 00 [10] 574 ld hl, #0x0064 + 000001C7 CDr27r01 [17] 575 call _esp_wait_not_busy + 576 ;src/esp32.c:146: } + 000001CA E1 [10] 577 pop hl + 000001CB F1 [10] 578 pop af + 000001CC F1 [10] 579 pop af + 000001CD 33 [ 6] 580 inc sp + 000001CE E9 [ 4] 581 jp (hl) + 582 ;src/esp32.c:148: void esp_rd_end() + 583 ; --------------------------------- + 584 ; Function esp_rd_end + 585 ; --------------------------------- + 000001CF 586 _esp_rd_end:: + 587 ;src/esp32.c:150: SPI_CTRL = SPI_ESP_CS_ON; + 000001CF 3E 13 [ 7] 588 ld a, #0x13 + 000001D1 D3 77 [11] 589 out (_SPI_CTRL), a + 590 ;src/esp32.c:151: SPI_DATA = ESP_SPI_CMD_R_END; + 000001D3 3E 08 [ 7] 591 ld a, #0x08 + 000001D5 D3 57 [11] 592 out (_SPI_DATA), a + 593 ;src/esp32.c:152: SPI_DATA; // dummy + 000001D7 DB 57 [11] 594 in a, (_SPI_DATA) + 595 ;src/esp32.c:153: SPI_CTRL = SPI_ESP_CS_OFF; + 000001D9 3E 03 [ 7] 596 ld a, #0x03 + 000001DB D3 77 [11] 597 out (_SPI_CTRL), a + 598 ;src/esp32.c:154: } + 000001DD C9 [10] 599 ret + 600 ;src/esp32.c:164: u8 esp_wait_status(u8 status, u16 max_frames) + 601 ; --------------------------------- + 602 ; Function esp_wait_status + 603 ; --------------------------------- + 000001DE 604 _esp_wait_status:: + 000001DE DD E5 [15] 605 push ix + 000001E0 DD 21 00 00 [14] 606 ld ix, #0 + 000001E4 DD 39 [15] 607 add ix, sp + 000001E6 21 FB FF [10] 608 ld hl, #-5 + 000001E9 39 [11] 609 add hl, sp + 000001EA F9 [ 6] 610 ld sp, hl + 000001EB DD 77 FF [19] 611 ld -1 (ix), a + 000001EE DD 73 FD [19] 612 ld -3 (ix), e + 000001F1 DD 72 FE [19] 613 ld -2 (ix), d + 614 ;src/esp32.c:166: u16 start = *(u16*)_TMN; + 000001F4 21 09 60 [10] 615 ld hl, #0x6009 + 000001F7 7E [ 7] 616 ld a, (hl) + 000001F8 DD 77 FB [19] 617 ld -5 (ix), a + 000001FB 23 [ 6] 618 inc hl + 000001FC 7E [ 7] 619 ld a, (hl) + 000001FD DD 77 FC [19] 620 ld -4 (ix), a + 621 ;src/esp32.c:168: while ((u16)(*(u16*)_TMN - start) < max_frames) + 00000200 622 00103$: + 00000200 2A 09 60 [16] 623 ld hl, (#0x6009) + 00000203 7D [ 4] 624 ld a, l + 00000204 DD 96 FB [19] 625 sub a, -5 (ix) + 00000207 4F [ 4] 626 ld c, a + 00000208 7C [ 4] 627 ld a, h + 00000209 DD 9E FC [19] 628 sbc a, -4 (ix) + 0000020C 47 [ 4] 629 ld b, a + 0000020D 79 [ 4] 630 ld a, c + 0000020E DD 96 FD [19] 631 sub a, -3 (ix) + 00000211 78 [ 4] 632 ld a, b + 00000212 DD 9E FE [19] 633 sbc a, -2 (ix) + 00000215 30 0F [12] 634 jr nc, 00105$ + 635 ;src/esp32.c:170: if (esp_rd_reg8(ESP_REG_STATUS) == status) + 00000217 3E 01 [ 7] 636 ld a, #0x01 + 00000219 CDr1Er00 [17] 637 call _esp_rd_reg8 + 0000021C DD 96 FF [19] 638 sub a, -1 (ix) + 0000021F 20 DF [12] 639 jr nz, 00103$ + 640 ;src/esp32.c:171: return 1; + 00000221 3E 01 [ 7] 641 ld a, #0x01 + 00000223 C3r27r02 [10] 642 jp 00106$ + 00000226 643 00105$: + 644 ;src/esp32.c:174: return 0; + 00000226 AF [ 4] 645 xor a, a + 00000227 646 00106$: + 647 ;src/esp32.c:175: } + 00000227 DD F9 [10] 648 ld sp, ix + 00000229 DD E1 [14] 649 pop ix + 0000022B C9 [10] 650 ret + 651 ;src/esp32.c:194: u8 esp_wait_busy(u16 max_frames) + 652 ; --------------------------------- + 653 ; Function esp_wait_busy + 654 ; --------------------------------- + 0000022C 655 _esp_wait_busy:: + 0000022C EB [ 4] 656 ex de, hl + 657 ;src/esp32.c:196: u16 start = *(u16*)_TMN; + 0000022D ED 4B 09 60 [20] 658 ld bc, (#0x6009) + 659 ;src/esp32.c:199: while (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) + 00000231 660 00103$: + 00000231 C5 [11] 661 push bc + 00000232 D5 [11] 662 push de + 00000233 3E 01 [ 7] 663 ld a, #0x01 + 00000235 CDr1Er00 [17] 664 call _esp_rd_reg8 + 00000238 D1 [10] 665 pop de + 00000239 C1 [10] 666 pop bc + 0000023A FE 02 [ 7] 667 cp a, #0x02 + 0000023C 28 0D [12] 668 jr z, 00108$ + 669 ;src/esp32.c:201: if ((u16)(*(u16*)_TMN - start) >= max_frames) + 0000023E 2A 09 60 [16] 670 ld hl, (#0x6009) + 00000241 BF [ 4] 671 cp a, a + 00000242 ED 42 [15] 672 sbc hl, bc + 00000244 AF [ 4] 673 xor a, a + 00000245 ED 52 [15] 674 sbc hl, de + 00000247 38 E8 [12] 675 jr c, 00103$ + 676 ;src/esp32.c:202: return 0; + 00000249 AF [ 4] 677 xor a, a + 0000024A C9 [10] 678 ret + 679 ;src/esp32.c:206: while ((u16)(*(u16*)_TMN - start) < max_frames) + 0000024B 680 00108$: + 0000024B 2A 09 60 [16] 681 ld hl, (#0x6009) + 0000024E BF [ 4] 682 cp a, a + 0000024F ED 42 [15] 683 sbc hl, bc + 00000251 AF [ 4] 684 xor a, a + 00000252 ED 52 [15] 685 sbc hl, de + 00000254 30 10 [12] 686 jr nc, 00110$ + 687 ;src/esp32.c:208: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) + 00000256 C5 [11] 688 push bc + 00000257 D5 [11] 689 push de + 00000258 3E 01 [ 7] 690 ld a, #0x01 + 0000025A CDr1Er00 [17] 691 call _esp_rd_reg8 + 0000025D D1 [10] 692 pop de + 0000025E C1 [10] 693 pop bc + 0000025F FE 02 [ 7] 694 cp a, #0x02 + 00000261 28 E8 [12] 695 jr z, 00108$ + 696 ;src/esp32.c:209: return 1; + 00000263 3E 01 [ 7] 697 ld a, #0x01 + 00000265 C9 [10] 698 ret + 00000266 699 00110$: + 700 ;src/esp32.c:212: return 0; + 00000266 AF [ 4] 701 xor a, a + 702 ;src/esp32.c:213: } + 00000267 C9 [10] 703 ret + 704 ;src/esp32.c:215: int esp_create_obj(u32 size, u8 type) + 705 ; --------------------------------- + 706 ; Function esp_create_obj + 707 ; --------------------------------- + 00000268 708 _esp_create_obj:: + 709 ;src/esp32.c:217: esp_wr_reg32(ESP_REG_DATA_SIZE, size); + 00000268 E5 [11] 710 push hl + 00000269 D5 [11] 711 push de + 0000026A 3E 03 [ 7] 712 ld a, #0x03 + 0000026C CDrE8r00 [17] 713 call _esp_wr_reg32 + 714 ;src/esp32.c:218: esp_wr_reg8(ESP_REG_OBJ_TYPE, type); + 0000026F FD 21 02 00 [14] 715 ld iy, #2 + 00000273 FD 39 [15] 716 add iy, sp + 00000275 FD 6E 00 [19] 717 ld l, 0 (iy) + 00000278 3E 02 [ 7] 718 ld a, #0x02 + 0000027A CDrD1r00 [17] 719 call _esp_wr_reg8 + 720 ;src/esp32.c:219: esp_cmd(ESP_CMD_MAKE_OBJECT); + 0000027D 3E E0 [ 7] 721 ld a, #0xe0 + 0000027F CDr05r00 [17] 722 call _esp_cmd + 723 ;src/esp32.c:220: esp_wait_busy(100); // 2s - object allocation should be near-instant + 00000282 21 64 00 [10] 724 ld hl, #0x0064 + 00000285 CDr2Cr02 [17] 725 call _esp_wait_busy + 726 ;src/esp32.c:223: return esp_rd_reg8(ESP_REG_OBJ_HANDLE); + 00000288 3E 0B [ 7] 727 ld a, #0x0b + 0000028A CDr1Er00 [17] 728 call _esp_rd_reg8 + 0000028D 5F [ 4] 729 ld e, a + 0000028E 16 00 [ 7] 730 ld d, #0x00 + 731 ;src/esp32.c:224: } + 00000290 E1 [10] 732 pop hl + 00000291 33 [ 6] 733 inc sp + 00000292 E9 [ 4] 734 jp (hl) + 735 ;src/main.c:145: bool esp_init() + 736 ; --------------------------------- + 737 ; Function esp_init + 738 ; --------------------------------- + 00000293 739 _esp_init:: + 740 ;src/main.c:147: esp_cmd(ESP_CMD_NOP); + 00000293 AF [ 4] 741 xor a, a + 00000294 CDr05r00 [17] 742 call _esp_cmd + 743 ;src/main.c:148: esp_rd_end(); + 00000297 CDrCFr01 [17] 744 call _esp_rd_end + 745 ;src/main.c:149: esp_wr_end(); + 0000029A CDr18r01 [17] 746 call _esp_wr_end + 747 ;src/main.c:153: return true; + 0000029D 3E 01 [ 7] 748 ld a, #0x01 + 749 ;src/main.c:154: } + 0000029F C9 [10] 750 ret + 000002A0 751 _win_xm_tpl: + 000002A0 81 752 .db #0x81 ; 129 + 000002A1 00 753 .db #0x00 ; 0 + 000002A2 19 754 .db #0x19 ; 25 + 000002A3 0A 755 .db #0x0a ; 10 + 000002A4 28 756 .db #0x28 ; 40 + 000002A5 0C 757 .db #0x0c ; 12 + 000002A6 70 758 .db #0x70 ; 112 'p' + 000002A7 00 759 .db #0x00 ; 0 + 000002A8 00 00 760 .dw #0x0000 + 000002AA 00 761 .db #0x00 ; 0 + 000002AB 00 762 .db #0x00 ; 0 + 000002ACrC4r02 763 .dw __str_0 + 000002AErDEr02 764 .dw __str_1 + 000002B0rDEr02 765 .dw __str_1 + 000002B2 766 _win_about_tpl: + 000002B2 01 767 .db #0x01 ; 1 + 000002B3 00 768 .db #0x00 ; 0 + 000002B4 16 769 .db #0x16 ; 22 + 000002B5 0A 770 .db #0x0a ; 10 + 000002B6 24 771 .db #0x24 ; 36 + 000002B7 07 772 .db #0x07 ; 7 + 000002B8 70 773 .db #0x70 ; 112 'p' + 000002B9 00 774 .db #0x00 ; 0 + 000002BA 00 00 775 .dw #0x0000 + 000002BC 00 776 .db #0x00 ; 0 + 000002BD 00 777 .db #0x00 ; 0 + 000002BErDFr02 778 .dw __str_2 + 000002C0rDEr02 779 .dw __str_1 + 000002C2rE8r02 780 .dw __str_3 + 000002C4 781 __str_0: + 000002C4 0E 782 .db 0x0e + 000002C5 20 58 4D 2F 58 4D 5A 783 .ascii " XM/XMZ/S3M Player v0.1 " 2F 53 33 4D 20 50 6C 61 79 65 72 20 76 30 2E 31 20 - 000002A1 00 719 .db 0x00 - 000002A2 720 __str_1: - 000002A2 00 721 .db 0x00 - 000002A3 722 __str_2: - 000002A3 0E 723 .db 0x0e - 000002A4 20 41 62 6F 75 74 20 724 .ascii " About " - 000002AB 00 725 .db 0x00 - 000002AC 726 __str_3: - 000002AC 0E 727 .db 0x0e - 000002AD 0C 728 .db 0x0c - 000002AE 01 729 .db 0x01 - 000002AF 58 4D 20 50 6C 61 79 730 .ascii "XM Player v0.1" + 000002DD 00 784 .db 0x00 + 000002DE 785 __str_1: + 000002DE 00 786 .db 0x00 + 000002DF 787 __str_2: + 000002DF 0E 788 .db 0x0e + 000002E0 20 41 62 6F 75 74 20 789 .ascii " About " + 000002E7 00 790 .db 0x00 + 000002E8 791 __str_3: + 000002E8 0D 792 .db 0x0d + 000002E9 0E 793 .db 0x0e + 000002EA 58 4D 20 50 6C 61 79 794 .ascii "XM Player v0.1" 65 72 20 76 30 2E 31 - 000002BD 00 731 .db 0x00 - 732 ;src/main.c:114: bool play_xm() - 733 ; --------------------------------- - 734 ; Function play_xm - 735 ; --------------------------------- - 000002BE 736 _play_xm:: - 000002BE DD E5 [15] 737 push ix - 000002C0 DD 21 00 00 [14] 738 ld ix, #0 - 000002C4 DD 39 [15] 739 add ix, sp - 000002C6 21 EC FF [10] 740 ld hl, #-20 - 000002C9 39 [11] 741 add hl, sp - 000002CA F9 [ 6] 742 ld sp, hl - 743 ;src/main.c:116: esp_cmd(ESP_CMD_TRACK_STOP); - 000002CB 3E A2 [ 7] 744 ld a, #0xa2 - 000002CD CDr05r00 [17] 745 call _esp_cmd - 746 ;src/main.c:117: esp_wait_busy(100); // 2s - both should be near-instant - 000002D0 21 64 00 [10] 747 ld hl, #0x0064 - 000002D3 CDrE5r01 [17] 748 call _esp_wait_busy - 749 ;src/main.c:118: esp_cmd(ESP_CMD_KILL_OBJECTS); - 000002D6 3E E4 [ 7] 750 ld a, #0xe4 - 000002D8 CDr05r00 [17] 751 call _esp_cmd - 752 ;src/main.c:119: esp_wait_busy(100); - 000002DB 21 64 00 [10] 753 ld hl, #0x0064 - 000002DE CDrE5r01 [17] 754 call _esp_wait_busy - 755 ;src/main.c:122: switch (file_ext) - 000002E1 3Ar06r10 [13] 756 ld a, (_file_ext) - 000002E4 3D [ 4] 757 dec a - 000002E5 28 0A [12] 758 jr z, 00101$ - 000002E7 3Ar06r10 [13] 759 ld a, (_file_ext) - 000002EA D6 02 [ 7] 760 sub a, #0x02 - 000002EC 28 08 [12] 761 jr z, 00102$ - 000002EE C3rFBr02 [10] 762 jp 00103$ - 763 ;src/main.c:124: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; - 000002F1 764 00101$: - 000002F1 3E 08 [ 7] 765 ld a, #0x08 - 000002F3 C3rFDr02 [10] 766 jp 00104$ - 767 ;src/main.c:125: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; - 000002F6 768 00102$: - 000002F6 3E 0C [ 7] 769 ld a, #0x0c - 000002F8 C3rFDr02 [10] 770 jp 00104$ - 771 ;src/main.c:126: default: obj_type = OBJ_TYPE_XM; break; - 000002FB 772 00103$: - 000002FB 3E 05 [ 7] 773 ld a, #0x05 - 774 ;src/main.c:127: } - 000002FD 775 00104$: - 776 ;src/main.c:129: xm_handle = esp_create_obj(filesize, obj_type); - 000002FD F5 [11] 777 push af - 000002FE 33 [ 6] 778 inc sp - 000002FF ED 5Br02r10 [20] 779 ld de, (_filesize) - 00000303 2Ar04r10 [16] 780 ld hl, (_filesize + 2) - 00000306 CDr2Cr02 [17] 781 call _esp_create_obj - 00000309 21r30r10 [10] 782 ld hl, #_xm_handle - 0000030C 73 [ 7] 783 ld (hl), e - 784 ;src/main.c:130: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); - 0000030D 3E 01 [ 7] 785 ld a, #0x01 - 0000030F CDr1Er00 [17] 786 call _esp_rd_reg8 - 00000312 32r08r10 [13] 787 ld (#_last_esp_status), a - 788 ;src/main.c:131: if (last_esp_status != ESP_ST_READY) - 00000315 3Ar08r10 [13] 789 ld a, (_last_esp_status) - 00000318 3D [ 4] 790 dec a - 00000319 28 04 [12] 791 jr z, 00106$ - 792 ;src/main.c:132: return false; - 0000031B AF [ 4] 793 xor a, a - 0000031C C3rE5r04 [10] 794 jp 00118$ - 0000031F 795 00106$: - 796 ;src/main.c:134: u32 sz = filesize; - 0000031F 21 0C 00 [10] 797 ld hl, #12 - 00000322 39 [11] 798 add hl, sp - 00000323 EB [ 4] 799 ex de, hl - 00000324 21r02r10 [10] 800 ld hl, #_filesize - 00000327 01 04 00 [10] 801 ld bc, #4 - 0000032A ED B0 [21] 802 ldir - 803 ;src/main.c:135: u32 offs = 0; - 0000032C AF [ 4] 804 xor a, a - 0000032D DD 77 FC [19] 805 ld -4 (ix), a - 00000330 DD 77 FD [19] 806 ld -3 (ix), a - 00000333 DD 77 FE [19] 807 ld -2 (ix), a - 00000336 DD 77 FF [19] 808 ld -1 (ix), a - 809 ;src/main.c:137: while (sz) - 00000339 810 00107$: - 00000339 DD 7E FB [19] 811 ld a, -5 (ix) - 0000033C DD B6 FA [19] 812 or a, -6 (ix) - 0000033F DD B6 F9 [19] 813 or a, -7 (ix) - 00000342 DD B6 F8 [19] 814 or a, -8 (ix) - 00000345 CAr4Er04 [10] 815 jp z, 00109$ - 816 ;src/main.c:139: u32 s = min(sz, FS_BUF_SIZE); - 00000348 DD 7E F9 [19] 817 ld a, -7 (ix) - 0000034B D6 10 [ 7] 818 sub a, #0x10 - 0000034D DD 7E FA [19] 819 ld a, -6 (ix) - 00000350 DE 00 [ 7] 820 sbc a, #0x00 - 00000352 DD 7E FB [19] 821 ld a, -5 (ix) - 00000355 DE 00 [ 7] 822 sbc a, #0x00 - 00000357 30 11 [12] 823 jr nc, 00120$ - 00000359 21 00 00 [10] 824 ld hl, #0 - 0000035C 39 [11] 825 add hl, sp - 0000035D EB [ 4] 826 ex de, hl - 0000035E 21 0C 00 [10] 827 ld hl, #12 - 00000361 39 [11] 828 add hl, sp - 00000362 01 04 00 [10] 829 ld bc, #4 - 00000365 ED B0 [21] 830 ldir - 00000367 C3r79r03 [10] 831 jp 00121$ - 0000036A 832 00120$: - 0000036A DD 36 EC 00 [19] 833 ld -20 (ix), #0x00 - 0000036E DD 36 ED 10 [19] 834 ld -19 (ix), #0x10 - 00000372 AF [ 4] 835 xor a, a - 00000373 DD 77 EE [19] 836 ld -18 (ix), a - 00000376 DD 77 EF [19] 837 ld -17 (ix), a - 00000379 838 00121$: - 00000379 21 05 00 [10] 839 ld hl, #5 - 0000037C 39 [11] 840 add hl, sp - 0000037D EB [ 4] 841 ex de, hl - 0000037E 21 00 00 [10] 842 ld hl, #0 - 00000381 39 [11] 843 add hl, sp - 00000382 01 04 00 [10] 844 ld bc, #4 - 00000385 ED B0 [21] 845 ldir - 846 ;src/main.c:140: u8 sec = (s + 511) >> 9; - 00000387 DD 7E F1 [19] 847 ld a, -15 (ix) - 0000038A C6 FF [ 7] 848 add a, #0xff - 0000038C DD 7E F2 [19] 849 ld a, -14 (ix) - 0000038F CE 01 [ 7] 850 adc a, #0x01 - 00000391 47 [ 4] 851 ld b, a - 00000392 3E 00 [ 7] 852 ld a, #0x00 - 00000394 CE 00 [ 7] 853 adc a, #0x00 - 00000396 5F [ 4] 854 ld e, a - 00000397 3E 00 [ 7] 855 ld a, #0x00 - 00000399 CE 00 [ 7] 856 adc a, #0x00 - 0000039B 57 [ 4] 857 ld d, a - 0000039C 48 [ 4] 858 ld c, b - 0000039D 43 [ 4] 859 ld b, e - 0000039E 5A [ 4] 860 ld e, d - 0000039F CB 3B [ 8] 861 srl e - 000003A1 CB 18 [ 8] 862 rr b - 000003A3 CB 19 [ 8] 863 rr c - 864 ;src/main.c:142: wc_load512((u16)fs_buf, sec); - 000003A5 DD 71 F7 [19] 865 ld -9 (ix), c - 000003A8 79 [ 4] 866 ld a, c - 000003A9 F5 [11] 867 push af - 000003AA 33 [ 6] 868 inc sp - 000003AB 21r00r00 [10] 869 ld hl, #_fs_buf - 000003AE CDr00r00 [17] 870 call _wc_load512 - 871 ;src/main.c:144: esp_wr_reg32(ESP_REG_DATA_SIZE, s); - 000003B1 21 00 00 [10] 872 ld hl, #0x0 - 000003B4 E5 [11] 873 push hl - 000003B5 DD 6E F1 [19] 874 ld l, -15 (ix) - 000003B8 DD 66 F2 [19] 875 ld h, -14 (ix) - 000003BB E5 [11] 876 push hl - 000003BC 3E 03 [ 7] 877 ld a, #0x03 - 000003BE CDrE8r00 [17] 878 call _esp_wr_reg32 - 879 ;src/main.c:145: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); - 000003C1 DD 6E FE [19] 880 ld l, -2 (ix) - 000003C4 DD 66 FF [19] 881 ld h, -1 (ix) - 000003C7 E5 [11] 882 push hl - 000003C8 DD 6E FC [19] 883 ld l, -4 (ix) - 000003CB DD 66 FD [19] 884 ld h, -3 (ix) - 000003CE E5 [11] 885 push hl - 000003CF 3E 07 [ 7] 886 ld a, #0x07 - 000003D1 CDrE8r00 [17] 887 call _esp_wr_reg32 - 888 ;src/main.c:146: esp_cmd(ESP_CMD_WRITE_OBJECT); - 000003D4 3E E1 [ 7] 889 ld a, #0xe1 - 000003D6 CDr05r00 [17] 890 call _esp_cmd - 891 ;src/main.c:147: esp_wait_status(ESP_ST_DATA_M2S, 100); // 2s - near-instant state transition - 000003D9 11 64 00 [10] 892 ld de, #0x0064 - 000003DC 3E 03 [ 7] 893 ld a, #0x03 - 000003DE CDr97r01 [17] 894 call _esp_wait_status - 895 ;src/main.c:148: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); - 000003E1 DD 7E F7 [19] 896 ld a, -9 (ix) - 000003E4 DD 77 F5 [19] 897 ld -11 (ix), a - 000003E7 DD 36 F6 00 [19] 898 ld -10 (ix), #0x00 - 000003EB 3A 02 60 [13] 899 ld a, (#0x6002) - 000003EE DD 77 F7 [19] 900 ld -9 (ix), a - 000003F1 DD 6E F5 [19] 901 ld l, -11 (ix) - 000003F4 26 00 [ 7] 902 ld h, #0x00 - 000003F6 E5 [11] 903 push hl - 000003F7 21 00 02 [10] 904 ld hl, #0x0200 - 000003FA E5 [11] 905 push hl - 000003FB DD 7E F7 [19] 906 ld a, -9 (ix) - 000003FE F5 [11] 907 push af - 000003FF 33 [ 6] 908 inc sp - 00000400 21r00r00 [10] 909 ld hl, #_fs_buf - 00000403 CDr27r01 [17] 910 call _esp_send_dma - 911 ;src/main.c:150: offs += s; - 00000406 DD 5E F1 [19] 912 ld e, -15 (ix) - 00000409 DD 56 F2 [19] 913 ld d, -14 (ix) - 0000040C DD 6E FC [19] 914 ld l, -4 (ix) - 0000040F DD 66 FD [19] 915 ld h, -3 (ix) - 00000412 19 [11] 916 add hl, de - 00000413 DD 75 FC [19] 917 ld -4 (ix), l - 00000416 DD 74 FD [19] 918 ld -3 (ix), h - 00000419 DD 7E FE [19] 919 ld a, -2 (ix) - 0000041C DD 8E F3 [19] 920 adc a, -13 (ix) - 0000041F DD 77 FE [19] 921 ld -2 (ix), a - 00000422 30 03 [12] 922 jr nc, 00207$ - 00000424 DD 34 FF [23] 923 inc -1 (ix) - 00000427 924 00207$: - 925 ;src/main.c:151: sz -= s; - 00000427 DD 7E F8 [19] 926 ld a, -8 (ix) - 0000042A DD 96 F1 [19] 927 sub a, -15 (ix) - 0000042D DD 77 F8 [19] 928 ld -8 (ix), a - 00000430 DD 7E F9 [19] 929 ld a, -7 (ix) - 00000433 DD 9E F2 [19] 930 sbc a, -14 (ix) - 00000436 DD 77 F9 [19] 931 ld -7 (ix), a - 00000439 DD 7E FA [19] 932 ld a, -6 (ix) - 0000043C DD 9E F3 [19] 933 sbc a, -13 (ix) - 0000043F DD 77 FA [19] 934 ld -6 (ix), a - 00000442 DD 7E FB [19] 935 ld a, -5 (ix) - 00000445 DD 9E F4 [19] 936 sbc a, -12 (ix) - 00000448 DD 77 FB [19] 937 ld -5 (ix), a - 0000044B C3r39r03 [10] 938 jp 00107$ - 0000044E 939 00109$: - 940 ;src/main.c:154: if (file_ext == EXT_XMZ) - 0000044E 3Ar06r10 [13] 941 ld a, (_file_ext) - 00000451 3D [ 4] 942 dec a - 00000452 20 3A [12] 943 jr nz, 00113$ - 944 ;src/main.c:159: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); - 00000454 3Ar30r10 [13] 945 ld a, (_xm_handle) - 00000457 6F [ 4] 946 ld l, a - 00000458 3E 0B [ 7] 947 ld a, #0x0b - 0000045A CDrD1r00 [17] 948 call _esp_wr_reg8 - 949 ;src/main.c:160: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); - 0000045D 2E 05 [ 7] 950 ld l, #0x05 - 0000045F 3E 02 [ 7] 951 ld a, #0x02 - 00000461 CDrD1r00 [17] 952 call _esp_wr_reg8 - 953 ;src/main.c:161: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize); - 00000464 2Ar04r10 [16] 954 ld hl, (_filesize + 2) - 00000467 E5 [11] 955 push hl - 00000468 2Ar02r10 [16] 956 ld hl, (_filesize) - 0000046B E5 [11] 957 push hl - 0000046C 3E 03 [ 7] 958 ld a, #0x03 - 0000046E CDrE8r00 [17] 959 call _esp_wr_reg32 - 960 ;src/main.c:162: esp_cmd(ESP_CMD_UNZIP); - 00000471 3E F2 [ 7] 961 ld a, #0xf2 - 00000473 CDr05r00 [17] 962 call _esp_cmd - 963 ;src/main.c:163: esp_wait_busy(250); // 5s - decompression time scales with file size - 00000476 21 FA 00 [10] 964 ld hl, #0x00fa - 00000479 CDrE5r01 [17] 965 call _esp_wait_busy - 966 ;src/main.c:165: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); - 0000047C 3E 01 [ 7] 967 ld a, #0x01 - 0000047E CDr1Er00 [17] 968 call _esp_rd_reg8 - 00000481 32r08r10 [13] 969 ld (#_last_esp_status), a - 970 ;src/main.c:166: if (last_esp_status != ESP_ST_READY) - 00000484 3Ar08r10 [13] 971 ld a, (_last_esp_status) - 00000487 3D [ 4] 972 dec a - 00000488 28 04 [12] 973 jr z, 00113$ - 974 ;src/main.c:167: return false; - 0000048A AF [ 4] 975 xor a, a - 0000048B C3rE5r04 [10] 976 jp 00118$ - 0000048E 977 00113$: - 978 ;src/main.c:170: esp_cmd(ESP_CMD_TRACK_INIT); - 0000048E 3E A0 [ 7] 979 ld a, #0xa0 - 00000490 CDr05r00 [17] 980 call _esp_cmd - 981 ;src/main.c:176: esp_wait_busy(400); - 00000493 21 90 01 [10] 982 ld hl, #0x0190 - 00000496 CDrE5r01 [17] 983 call _esp_wait_busy - 984 ;src/main.c:178: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); - 00000499 3E 01 [ 7] 985 ld a, #0x01 - 0000049B CDr1Er00 [17] 986 call _esp_rd_reg8 - 0000049E 32r08r10 [13] 987 ld (#_last_esp_status), a - 988 ;src/main.c:179: if (last_esp_status != ESP_ST_READY) - 000004A1 3Ar08r10 [13] 989 ld a, (_last_esp_status) - 000004A4 3D [ 4] 990 dec a - 000004A5 28 04 [12] 991 jr z, 00115$ - 992 ;src/main.c:180: return false; - 000004A7 AF [ 4] 993 xor a, a - 000004A8 C3rE5r04 [10] 994 jp 00118$ - 000004AB 995 00115$: - 996 ;src/main.c:185: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); - 000004AB 3Ar30r10 [13] 997 ld a, (_xm_handle) - 000004AE 6F [ 4] 998 ld l, a - 000004AF 3E 0B [ 7] 999 ld a, #0x0b - 000004B1 CDrD1r00 [17] 1000 call _esp_wr_reg8 - 1001 ;src/main.c:186: esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1); - 000004B4 2E 01 [ 7] 1002 ld l, #0x01 - 000004B6 3E 3A [ 7] 1003 ld a, #0x3a - 000004B8 CDrD1r00 [17] 1004 call _esp_wr_reg8 - 1005 ;src/main.c:187: esp_cmd(ESP_CMD_TRACK_SET_PARAMS); - 000004BB 3E A6 [ 7] 1006 ld a, #0xa6 - 000004BD CDr05r00 [17] 1007 call _esp_cmd - 1008 ;src/main.c:188: esp_wait_busy(100); // 2s - both should be near-instant - 000004C0 21 64 00 [10] 1009 ld hl, #0x0064 - 000004C3 CDrE5r01 [17] 1010 call _esp_wait_busy - 1011 ;src/main.c:190: esp_cmd(ESP_CMD_TRACK_PLAY); - 000004C6 3E A1 [ 7] 1012 ld a, #0xa1 - 000004C8 CDr05r00 [17] 1013 call _esp_cmd - 1014 ;src/main.c:191: esp_wait_busy(100); - 000004CB 21 64 00 [10] 1015 ld hl, #0x0064 - 000004CE CDrE5r01 [17] 1016 call _esp_wait_busy - 1017 ;src/main.c:193: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); - 000004D1 3E 01 [ 7] 1018 ld a, #0x01 - 000004D3 CDr1Er00 [17] 1019 call _esp_rd_reg8 - 000004D6 32r08r10 [13] 1020 ld (#_last_esp_status), a - 1021 ;src/main.c:194: if (last_esp_status != ESP_ST_READY) - 000004D9 3Ar08r10 [13] 1022 ld a, (_last_esp_status) - 000004DC 3D [ 4] 1023 dec a - 000004DD 28 04 [12] 1024 jr z, 00117$ - 1025 ;src/main.c:195: return false; - 000004DF AF [ 4] 1026 xor a, a - 000004E0 C3rE5r04 [10] 1027 jp 00118$ - 000004E3 1028 00117$: - 1029 ;src/main.c:197: return true; - 000004E3 3E 01 [ 7] 1030 ld a, #0x01 - 000004E5 1031 00118$: - 1032 ;src/main.c:198: } - 000004E5 DD F9 [10] 1033 ld sp, ix - 000004E7 DD E1 [14] 1034 pop ix - 000004E9 C9 [10] 1035 ret - 1036 ;src/main.c:201: void wait_esc_key() - 1037 ; --------------------------------- - 1038 ; Function wait_esc_key - 1039 ; --------------------------------- - 000004EA 1040 _wait_esc_key:: - 1041 ;src/main.c:203: while (1) - 000004EA 1042 00104$: - 1043 ;src/main.c:207: __endasm; - 000004EA 76 [ 4] 1044 halt - 1045 ;src/main.c:209: if (wc_key_esc()) - 000004EB CDr00r00 [17] 1046 call _wc_key_esc - 000004EE B7 [ 4] 1047 or a, a - 000004EF 28 F9 [12] 1048 jr z, 00104$ - 1049 ;src/main.c:210: break; - 1050 ;src/main.c:212: } - 000004F1 C9 [10] 1051 ret - 1052 ;src/main.c:214: void wait_frames(u8 n) - 1053 ; --------------------------------- - 1054 ; Function wait_frames - 1055 ; --------------------------------- - 000004F2 1056 _wait_frames:: - 000004F2 4F [ 4] 1057 ld c, a - 1058 ;src/main.c:216: while (n--) - 000004F3 1059 00101$: - 000004F3 79 [ 4] 1060 ld a, c - 000004F4 0D [ 4] 1061 dec c - 000004F5 B7 [ 4] 1062 or a, a - 000004F6 C8 [11] 1063 ret z - 1064 ;src/main.c:220: __endasm; - 000004F7 76 [ 4] 1065 halt - 1066 ;src/main.c:222: } - 000004F8 C3rF3r04 [10] 1067 jp 00101$ - 1068 ;src/main.c:224: void about() - 1069 ; --------------------------------- - 1070 ; Function about - 1071 ; --------------------------------- - 000004FB 1072 _about:: - 1073 ;src/main.c:226: wc_prwow(&win_about); - 000004FB 21r76r02 [10] 1074 ld hl, #_win_about - 000004FE CDr00r00 [17] 1075 call _wc_prwow - 1076 ;src/main.c:227: wait_esc_key(); - 00000501 CDrEAr04 [17] 1077 call _wait_esc_key - 1078 ;src/main.c:228: wc_rresb(&win_about); - 00000504 21r76r02 [10] 1079 ld hl, #_win_about - 00000507 CDr00r00 [17] 1080 call _wc_rresb - 1081 ;src/main.c:229: wc_exit(WC_EXIT); - 0000050A AF [ 4] 1082 xor a, a - 1083 ;src/main.c:230: } - 0000050B C3r00r00 [10] 1084 jp _wc_exit - 1085 ;src/main.c:235: void unload_and_exit(WC_EXIT_SIGNAL sig) - 1086 ; --------------------------------- - 1087 ; Function unload_and_exit - 1088 ; --------------------------------- - 0000050E 1089 _unload_and_exit:: - 0000050E 3B [ 6] 1090 dec sp - 0000050F FD 21 00 00 [14] 1091 ld iy, #0 - 00000513 FD 39 [15] 1092 add iy, sp - 00000515 FD 77 00 [19] 1093 ld 0 (iy), a - 1094 ;src/main.c:237: esp_cmd(ESP_CMD_TRACK_STOP); - 00000518 3E A2 [ 7] 1095 ld a, #0xa2 - 0000051A CDr05r00 [17] 1096 call _esp_cmd - 1097 ;src/main.c:238: esp_wait_busy(100); // 2s - both should be near-instant - 0000051D 21 64 00 [10] 1098 ld hl, #0x0064 - 00000520 CDrE5r01 [17] 1099 call _esp_wait_busy - 1100 ;src/main.c:239: esp_cmd(ESP_CMD_KILL_OBJECTS); - 00000523 3E E4 [ 7] 1101 ld a, #0xe4 - 00000525 CDr05r00 [17] 1102 call _esp_cmd - 1103 ;src/main.c:240: esp_wait_busy(100); - 00000528 21 64 00 [10] 1104 ld hl, #0x0064 - 0000052B CDrE5r01 [17] 1105 call _esp_wait_busy - 1106 ;src/main.c:241: wc_rresb(&win_xm); - 0000052E 21r64r02 [10] 1107 ld hl, #_win_xm - 00000531 CDr00r00 [17] 1108 call _wc_rresb - 1109 ;src/main.c:242: wc_exit(sig); - 00000534 21 00 00 [10] 1110 ld hl, #0 - 00000537 39 [11] 1111 add hl, sp - 00000538 7E [ 7] 1112 ld a, (hl) - 00000539 33 [ 6] 1113 inc sp - 0000053A C3r00r00 [10] 1114 jp _wc_exit - 1115 ;src/main.c:243: } - 0000053D 33 [ 6] 1116 inc sp - 0000053E C9 [10] 1117 ret - 1118 ;src/main.c:247: void leave_playing_and_exit() - 1119 ; --------------------------------- - 1120 ; Function leave_playing_and_exit - 1121 ; --------------------------------- - 0000053F 1122 _leave_playing_and_exit:: - 1123 ;src/main.c:249: wc_rresb(&win_xm); - 0000053F 21r64r02 [10] 1124 ld hl, #_win_xm - 00000542 CDr00r00 [17] 1125 call _wc_rresb - 1126 ;src/main.c:250: wc_exit(WC_EXIT); - 00000545 AF [ 4] 1127 xor a, a - 1128 ;src/main.c:251: } - 00000546 C3r00r00 [10] 1129 jp _wc_exit - 1130 ;src/main.c:257: void wait_for_manual_exit() - 1131 ; --------------------------------- - 1132 ; Function wait_for_manual_exit - 1133 ; --------------------------------- - 00000549 1134 _wait_for_manual_exit:: - 1135 ;src/main.c:259: while (1) - 00000549 1136 00108$: - 1137 ;src/main.c:263: __endasm; - 00000549 76 [ 4] 1138 halt - 1139 ;src/main.c:265: if (wc_key_pgdn()) - 0000054A CDr00r00 [17] 1140 call _wc_key_pgdn - 0000054D B7 [ 4] 1141 or a, a - 0000054E 28 05 [12] 1142 jr z, 00102$ - 1143 ;src/main.c:266: unload_and_exit(WC_NEXT_FILE); - 00000550 3E 02 [ 7] 1144 ld a, #0x02 - 00000552 CDr0Er05 [17] 1145 call _unload_and_exit - 00000555 1146 00102$: - 1147 ;src/main.c:268: if (wc_key_pgup()) - 00000555 CDr00r00 [17] 1148 call _wc_key_pgup - 00000558 B7 [ 4] 1149 or a, a - 00000559 28 05 [12] 1150 jr z, 00104$ - 1151 ;src/main.c:269: unload_and_exit(WC_PREV_FILE); - 0000055B 3E 04 [ 7] 1152 ld a, #0x04 - 0000055D CDr0Er05 [17] 1153 call _unload_and_exit - 00000560 1154 00104$: - 1155 ;src/main.c:271: if (wc_key_esc()) - 00000560 CDr00r00 [17] 1156 call _wc_key_esc - 00000563 B7 [ 4] 1157 or a, a - 00000564 28 E3 [12] 1158 jr z, 00108$ - 1159 ;src/main.c:272: unload_and_exit(WC_EXIT); - 00000566 AF [ 4] 1160 xor a, a - 00000567 CDr0Er05 [17] 1161 call _unload_and_exit - 1162 ;src/main.c:274: } - 0000056A C3r49r05 [10] 1163 jp 00108$ - 1164 ;src/main.c:280: void error_esp() - 1165 ; --------------------------------- - 1166 ; Function error_esp - 1167 ; --------------------------------- - 0000056D 1168 _error_esp:: - 1169 ;src/main.c:285: xm_set_status_code("No ESP32 found", state_esp); - 0000056D 3Ar00r00 [13] 1170 ld a, (_state_esp) - 00000570 F5 [11] 1171 push af - 00000571 33 [ 6] 1172 inc sp - 00000572 21r85r05 [10] 1173 ld hl, #___str_4 - 00000575 CDr16r07 [17] 1174 call _xm_set_status_code - 1175 ;src/main.c:286: wait_esc_key(); - 00000578 CDrEAr04 [17] 1176 call _wait_esc_key - 1177 ;src/main.c:287: wc_rresb(&win_xm); - 0000057B 21r64r02 [10] 1178 ld hl, #_win_xm - 0000057E CDr00r00 [17] 1179 call _wc_rresb - 1180 ;src/main.c:288: wc_exit(WC_EXIT); - 00000581 AF [ 4] 1181 xor a, a - 1182 ;src/main.c:289: } - 00000582 C3r00r00 [10] 1183 jp _wc_exit - 00000585 1184 ___str_4: - 00000585 4E 6F 20 45 53 50 33 1185 .ascii "No ESP32 found" + 000002F8 0D 795 .db 0x0d + 000002F9 0E 796 .db 0x0e + 000002FA 62 79 20 41 6C 65 78 797 .ascii "by Alex Korochinskiy" + 20 4B 6F 72 6F 63 68 + 69 6E 73 6B 69 79 + 0000030E 00 798 .db 0x00 + 799 ;src/main.c:158: bool play_xm() + 800 ; --------------------------------- + 801 ; Function play_xm + 802 ; --------------------------------- + 0000030F 803 _play_xm:: + 0000030F DD E5 [15] 804 push ix + 00000311 DD 21 00 00 [14] 805 ld ix, #0 + 00000315 DD 39 [15] 806 add ix, sp + 00000317 21 EC FF [10] 807 ld hl, #-20 + 0000031A 39 [11] 808 add hl, sp + 0000031B F9 [ 6] 809 ld sp, hl + 810 ;src/main.c:160: esp_cmd(ESP_CMD_TRACK_STOP); + 0000031C 3E A2 [ 7] 811 ld a, #0xa2 + 0000031E CDr05r00 [17] 812 call _esp_cmd + 813 ;src/main.c:161: esp_wait_busy(100); // 2s - both should be near-instant + 00000321 21 64 00 [10] 814 ld hl, #0x0064 + 00000324 CDr2Cr02 [17] 815 call _esp_wait_busy + 816 ;src/main.c:162: esp_cmd(ESP_CMD_KILL_OBJECTS); + 00000327 3E E4 [ 7] 817 ld a, #0xe4 + 00000329 CDr05r00 [17] 818 call _esp_cmd + 819 ;src/main.c:163: esp_wait_busy(100); + 0000032C 21 64 00 [10] 820 ld hl, #0x0064 + 0000032F CDr2Cr02 [17] 821 call _esp_wait_busy + 822 ;src/main.c:166: switch (file_ext) + 00000332 3Ar06r10 [13] 823 ld a, (_file_ext) + 00000335 3D [ 4] 824 dec a + 00000336 28 0A [12] 825 jr z, 00101$ + 00000338 3Ar06r10 [13] 826 ld a, (_file_ext) + 0000033B D6 02 [ 7] 827 sub a, #0x02 + 0000033D 28 08 [12] 828 jr z, 00102$ + 0000033F C3r4Cr03 [10] 829 jp 00103$ + 830 ;src/main.c:168: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; + 00000342 831 00101$: + 00000342 3E 08 [ 7] 832 ld a, #0x08 + 00000344 C3r4Er03 [10] 833 jp 00104$ + 834 ;src/main.c:169: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; + 00000347 835 00102$: + 00000347 3E 0C [ 7] 836 ld a, #0x0c + 00000349 C3r4Er03 [10] 837 jp 00104$ + 838 ;src/main.c:170: default: obj_type = OBJ_TYPE_XM; break; + 0000034C 839 00103$: + 0000034C 3E 05 [ 7] 840 ld a, #0x05 + 841 ;src/main.c:171: } + 0000034E 842 00104$: + 843 ;src/main.c:173: xm_handle = esp_create_obj(filesize, obj_type); + 0000034E F5 [11] 844 push af + 0000034F 33 [ 6] 845 inc sp + 00000350 ED 5Br02r10 [20] 846 ld de, (_filesize) + 00000354 2Ar04r10 [16] 847 ld hl, (_filesize + 2) + 00000357 CDr68r02 [17] 848 call _esp_create_obj + 0000035A 21r30r10 [10] 849 ld hl, #_xm_handle + 0000035D 73 [ 7] 850 ld (hl), e + 851 ;src/main.c:174: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); + 0000035E 3E 01 [ 7] 852 ld a, #0x01 + 00000360 CDr1Er00 [17] 853 call _esp_rd_reg8 + 00000363 32r08r10 [13] 854 ld (#_last_esp_status), a + 855 ;src/main.c:175: if (last_esp_status != ESP_ST_READY) + 00000366 3Ar08r10 [13] 856 ld a, (_last_esp_status) + 00000369 3D [ 4] 857 dec a + 0000036A 28 04 [12] 858 jr z, 00106$ + 859 ;src/main.c:176: return false; + 0000036C AF [ 4] 860 xor a, a + 0000036D C3r36r05 [10] 861 jp 00118$ + 00000370 862 00106$: + 863 ;src/main.c:178: u32 sz = filesize; + 00000370 21 0C 00 [10] 864 ld hl, #12 + 00000373 39 [11] 865 add hl, sp + 00000374 EB [ 4] 866 ex de, hl + 00000375 21r02r10 [10] 867 ld hl, #_filesize + 00000378 01 04 00 [10] 868 ld bc, #4 + 0000037B ED B0 [21] 869 ldir + 870 ;src/main.c:179: u32 offs = 0; + 0000037D AF [ 4] 871 xor a, a + 0000037E DD 77 FC [19] 872 ld -4 (ix), a + 00000381 DD 77 FD [19] 873 ld -3 (ix), a + 00000384 DD 77 FE [19] 874 ld -2 (ix), a + 00000387 DD 77 FF [19] 875 ld -1 (ix), a + 876 ;src/main.c:181: while (sz) + 0000038A 877 00107$: + 0000038A DD 7E FB [19] 878 ld a, -5 (ix) + 0000038D DD B6 FA [19] 879 or a, -6 (ix) + 00000390 DD B6 F9 [19] 880 or a, -7 (ix) + 00000393 DD B6 F8 [19] 881 or a, -8 (ix) + 00000396 CAr9Fr04 [10] 882 jp z, 00109$ + 883 ;src/main.c:183: u32 s = min(sz, FS_BUF_SIZE); + 00000399 DD 7E F9 [19] 884 ld a, -7 (ix) + 0000039C D6 10 [ 7] 885 sub a, #0x10 + 0000039E DD 7E FA [19] 886 ld a, -6 (ix) + 000003A1 DE 00 [ 7] 887 sbc a, #0x00 + 000003A3 DD 7E FB [19] 888 ld a, -5 (ix) + 000003A6 DE 00 [ 7] 889 sbc a, #0x00 + 000003A8 30 11 [12] 890 jr nc, 00120$ + 000003AA 21 00 00 [10] 891 ld hl, #0 + 000003AD 39 [11] 892 add hl, sp + 000003AE EB [ 4] 893 ex de, hl + 000003AF 21 0C 00 [10] 894 ld hl, #12 + 000003B2 39 [11] 895 add hl, sp + 000003B3 01 04 00 [10] 896 ld bc, #4 + 000003B6 ED B0 [21] 897 ldir + 000003B8 C3rCAr03 [10] 898 jp 00121$ + 000003BB 899 00120$: + 000003BB DD 36 EC 00 [19] 900 ld -20 (ix), #0x00 + 000003BF DD 36 ED 10 [19] 901 ld -19 (ix), #0x10 + 000003C3 AF [ 4] 902 xor a, a + 000003C4 DD 77 EE [19] 903 ld -18 (ix), a + 000003C7 DD 77 EF [19] 904 ld -17 (ix), a + 000003CA 905 00121$: + 000003CA 21 05 00 [10] 906 ld hl, #5 + 000003CD 39 [11] 907 add hl, sp + 000003CE EB [ 4] 908 ex de, hl + 000003CF 21 00 00 [10] 909 ld hl, #0 + 000003D2 39 [11] 910 add hl, sp + 000003D3 01 04 00 [10] 911 ld bc, #4 + 000003D6 ED B0 [21] 912 ldir + 913 ;src/main.c:184: u8 sec = (s + 511) >> 9; + 000003D8 DD 7E F1 [19] 914 ld a, -15 (ix) + 000003DB C6 FF [ 7] 915 add a, #0xff + 000003DD DD 7E F2 [19] 916 ld a, -14 (ix) + 000003E0 CE 01 [ 7] 917 adc a, #0x01 + 000003E2 47 [ 4] 918 ld b, a + 000003E3 3E 00 [ 7] 919 ld a, #0x00 + 000003E5 CE 00 [ 7] 920 adc a, #0x00 + 000003E7 5F [ 4] 921 ld e, a + 000003E8 3E 00 [ 7] 922 ld a, #0x00 + 000003EA CE 00 [ 7] 923 adc a, #0x00 + 000003EC 57 [ 4] 924 ld d, a + 000003ED 48 [ 4] 925 ld c, b + 000003EE 43 [ 4] 926 ld b, e + 000003EF 5A [ 4] 927 ld e, d + 000003F0 CB 3B [ 8] 928 srl e + 000003F2 CB 18 [ 8] 929 rr b + 000003F4 CB 19 [ 8] 930 rr c + 931 ;src/main.c:186: wc_load512((u16)fs_buf, sec); + 000003F6 DD 71 F7 [19] 932 ld -9 (ix), c + 000003F9 79 [ 4] 933 ld a, c + 000003FA F5 [11] 934 push af + 000003FB 33 [ 6] 935 inc sp + 000003FC 21r00r00 [10] 936 ld hl, #_fs_buf + 000003FF CDr00r00 [17] 937 call _wc_load512 + 938 ;src/main.c:188: esp_wr_reg32(ESP_REG_DATA_SIZE, s); + 00000402 21 00 00 [10] 939 ld hl, #0x0 + 00000405 E5 [11] 940 push hl + 00000406 DD 6E F1 [19] 941 ld l, -15 (ix) + 00000409 DD 66 F2 [19] 942 ld h, -14 (ix) + 0000040C E5 [11] 943 push hl + 0000040D 3E 03 [ 7] 944 ld a, #0x03 + 0000040F CDrE8r00 [17] 945 call _esp_wr_reg32 + 946 ;src/main.c:189: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); + 00000412 DD 6E FE [19] 947 ld l, -2 (ix) + 00000415 DD 66 FF [19] 948 ld h, -1 (ix) + 00000418 E5 [11] 949 push hl + 00000419 DD 6E FC [19] 950 ld l, -4 (ix) + 0000041C DD 66 FD [19] 951 ld h, -3 (ix) + 0000041F E5 [11] 952 push hl + 00000420 3E 07 [ 7] 953 ld a, #0x07 + 00000422 CDrE8r00 [17] 954 call _esp_wr_reg32 + 955 ;src/main.c:190: esp_cmd(ESP_CMD_WRITE_OBJECT); + 00000425 3E E1 [ 7] 956 ld a, #0xe1 + 00000427 CDr05r00 [17] 957 call _esp_cmd + 958 ;src/main.c:191: esp_wait_status(ESP_ST_DATA_M2S, 100); // 2s - near-instant state transition + 0000042A 11 64 00 [10] 959 ld de, #0x0064 + 0000042D 3E 03 [ 7] 960 ld a, #0x03 + 0000042F CDrDEr01 [17] 961 call _esp_wait_status + 962 ;src/main.c:192: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); + 00000432 DD 7E F7 [19] 963 ld a, -9 (ix) + 00000435 DD 77 F5 [19] 964 ld -11 (ix), a + 00000438 DD 36 F6 00 [19] 965 ld -10 (ix), #0x00 + 0000043C 3A 02 60 [13] 966 ld a, (#0x6002) + 0000043F DD 77 F7 [19] 967 ld -9 (ix), a + 00000442 DD 6E F5 [19] 968 ld l, -11 (ix) + 00000445 26 00 [ 7] 969 ld h, #0x00 + 00000447 E5 [11] 970 push hl + 00000448 21 00 02 [10] 971 ld hl, #0x0200 + 0000044B E5 [11] 972 push hl + 0000044C DD 7E F7 [19] 973 ld a, -9 (ix) + 0000044F F5 [11] 974 push af + 00000450 33 [ 6] 975 inc sp + 00000451 21r00r00 [10] 976 ld hl, #_fs_buf + 00000454 CDr6Er01 [17] 977 call _esp_send_dma + 978 ;src/main.c:194: offs += s; + 00000457 DD 5E F1 [19] 979 ld e, -15 (ix) + 0000045A DD 56 F2 [19] 980 ld d, -14 (ix) + 0000045D DD 6E FC [19] 981 ld l, -4 (ix) + 00000460 DD 66 FD [19] 982 ld h, -3 (ix) + 00000463 19 [11] 983 add hl, de + 00000464 DD 75 FC [19] 984 ld -4 (ix), l + 00000467 DD 74 FD [19] 985 ld -3 (ix), h + 0000046A DD 7E FE [19] 986 ld a, -2 (ix) + 0000046D DD 8E F3 [19] 987 adc a, -13 (ix) + 00000470 DD 77 FE [19] 988 ld -2 (ix), a + 00000473 30 03 [12] 989 jr nc, 00207$ + 00000475 DD 34 FF [23] 990 inc -1 (ix) + 00000478 991 00207$: + 992 ;src/main.c:195: sz -= s; + 00000478 DD 7E F8 [19] 993 ld a, -8 (ix) + 0000047B DD 96 F1 [19] 994 sub a, -15 (ix) + 0000047E DD 77 F8 [19] 995 ld -8 (ix), a + 00000481 DD 7E F9 [19] 996 ld a, -7 (ix) + 00000484 DD 9E F2 [19] 997 sbc a, -14 (ix) + 00000487 DD 77 F9 [19] 998 ld -7 (ix), a + 0000048A DD 7E FA [19] 999 ld a, -6 (ix) + 0000048D DD 9E F3 [19] 1000 sbc a, -13 (ix) + 00000490 DD 77 FA [19] 1001 ld -6 (ix), a + 00000493 DD 7E FB [19] 1002 ld a, -5 (ix) + 00000496 DD 9E F4 [19] 1003 sbc a, -12 (ix) + 00000499 DD 77 FB [19] 1004 ld -5 (ix), a + 0000049C C3r8Ar03 [10] 1005 jp 00107$ + 0000049F 1006 00109$: + 1007 ;src/main.c:198: if (file_ext == EXT_XMZ) + 0000049F 3Ar06r10 [13] 1008 ld a, (_file_ext) + 000004A2 3D [ 4] 1009 dec a + 000004A3 20 3A [12] 1010 jr nz, 00113$ + 1011 ;src/main.c:203: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); + 000004A5 3Ar30r10 [13] 1012 ld a, (_xm_handle) + 000004A8 6F [ 4] 1013 ld l, a + 000004A9 3E 0B [ 7] 1014 ld a, #0x0b + 000004AB CDrD1r00 [17] 1015 call _esp_wr_reg8 + 1016 ;src/main.c:204: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); + 000004AE 2E 05 [ 7] 1017 ld l, #0x05 + 000004B0 3E 02 [ 7] 1018 ld a, #0x02 + 000004B2 CDrD1r00 [17] 1019 call _esp_wr_reg8 + 1020 ;src/main.c:205: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize); + 000004B5 2Ar04r10 [16] 1021 ld hl, (_filesize + 2) + 000004B8 E5 [11] 1022 push hl + 000004B9 2Ar02r10 [16] 1023 ld hl, (_filesize) + 000004BC E5 [11] 1024 push hl + 000004BD 3E 03 [ 7] 1025 ld a, #0x03 + 000004BF CDrE8r00 [17] 1026 call _esp_wr_reg32 + 1027 ;src/main.c:206: esp_cmd(ESP_CMD_UNZIP); + 000004C2 3E F2 [ 7] 1028 ld a, #0xf2 + 000004C4 CDr05r00 [17] 1029 call _esp_cmd + 1030 ;src/main.c:207: esp_wait_busy(250); // 5s - decompression time scales with file size + 000004C7 21 FA 00 [10] 1031 ld hl, #0x00fa + 000004CA CDr2Cr02 [17] 1032 call _esp_wait_busy + 1033 ;src/main.c:209: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); + 000004CD 3E 01 [ 7] 1034 ld a, #0x01 + 000004CF CDr1Er00 [17] 1035 call _esp_rd_reg8 + 000004D2 32r08r10 [13] 1036 ld (#_last_esp_status), a + 1037 ;src/main.c:210: if (last_esp_status != ESP_ST_READY) + 000004D5 3Ar08r10 [13] 1038 ld a, (_last_esp_status) + 000004D8 3D [ 4] 1039 dec a + 000004D9 28 04 [12] 1040 jr z, 00113$ + 1041 ;src/main.c:211: return false; + 000004DB AF [ 4] 1042 xor a, a + 000004DC C3r36r05 [10] 1043 jp 00118$ + 000004DF 1044 00113$: + 1045 ;src/main.c:214: esp_cmd(ESP_CMD_TRACK_INIT); + 000004DF 3E A0 [ 7] 1046 ld a, #0xa0 + 000004E1 CDr05r00 [17] 1047 call _esp_cmd + 1048 ;src/main.c:220: esp_wait_busy(500); + 000004E4 21 F4 01 [10] 1049 ld hl, #0x01f4 + 000004E7 CDr2Cr02 [17] 1050 call _esp_wait_busy + 1051 ;src/main.c:222: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); + 000004EA 3E 01 [ 7] 1052 ld a, #0x01 + 000004EC CDr1Er00 [17] 1053 call _esp_rd_reg8 + 000004EF 32r08r10 [13] 1054 ld (#_last_esp_status), a + 1055 ;src/main.c:223: if (last_esp_status != ESP_ST_READY) + 000004F2 3Ar08r10 [13] 1056 ld a, (_last_esp_status) + 000004F5 3D [ 4] 1057 dec a + 000004F6 28 04 [12] 1058 jr z, 00115$ + 1059 ;src/main.c:224: return false; + 000004F8 AF [ 4] 1060 xor a, a + 000004F9 C3r36r05 [10] 1061 jp 00118$ + 000004FC 1062 00115$: + 1063 ;src/main.c:229: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); + 000004FC 3Ar30r10 [13] 1064 ld a, (_xm_handle) + 000004FF 6F [ 4] 1065 ld l, a + 00000500 3E 0B [ 7] 1066 ld a, #0x0b + 00000502 CDrD1r00 [17] 1067 call _esp_wr_reg8 + 1068 ;src/main.c:230: esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1); + 00000505 2E 01 [ 7] 1069 ld l, #0x01 + 00000507 3E 3A [ 7] 1070 ld a, #0x3a + 00000509 CDrD1r00 [17] 1071 call _esp_wr_reg8 + 1072 ;src/main.c:231: esp_cmd(ESP_CMD_TRACK_SET_PARAMS); + 0000050C 3E A6 [ 7] 1073 ld a, #0xa6 + 0000050E CDr05r00 [17] 1074 call _esp_cmd + 1075 ;src/main.c:232: esp_wait_busy(100); // 2s - both should be near-instant + 00000511 21 64 00 [10] 1076 ld hl, #0x0064 + 00000514 CDr2Cr02 [17] 1077 call _esp_wait_busy + 1078 ;src/main.c:234: esp_cmd(ESP_CMD_TRACK_PLAY); + 00000517 3E A1 [ 7] 1079 ld a, #0xa1 + 00000519 CDr05r00 [17] 1080 call _esp_cmd + 1081 ;src/main.c:235: esp_wait_busy(100); + 0000051C 21 64 00 [10] 1082 ld hl, #0x0064 + 0000051F CDr2Cr02 [17] 1083 call _esp_wait_busy + 1084 ;src/main.c:237: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); + 00000522 3E 01 [ 7] 1085 ld a, #0x01 + 00000524 CDr1Er00 [17] 1086 call _esp_rd_reg8 + 00000527 32r08r10 [13] 1087 ld (#_last_esp_status), a + 1088 ;src/main.c:238: if (last_esp_status != ESP_ST_READY) + 0000052A 3Ar08r10 [13] 1089 ld a, (_last_esp_status) + 0000052D 3D [ 4] 1090 dec a + 0000052E 28 04 [12] 1091 jr z, 00117$ + 1092 ;src/main.c:239: return false; + 00000530 AF [ 4] 1093 xor a, a + 00000531 C3r36r05 [10] 1094 jp 00118$ + 00000534 1095 00117$: + 1096 ;src/main.c:241: return true; + 00000534 3E 01 [ 7] 1097 ld a, #0x01 + 00000536 1098 00118$: + 1099 ;src/main.c:242: } + 00000536 DD F9 [10] 1100 ld sp, ix + 00000538 DD E1 [14] 1101 pop ix + 0000053A C9 [10] 1102 ret + 1103 ;src/main.c:245: void wait_esc_key() + 1104 ; --------------------------------- + 1105 ; Function wait_esc_key + 1106 ; --------------------------------- + 0000053B 1107 _wait_esc_key:: + 1108 ;src/main.c:247: while (1) + 0000053B 1109 00104$: + 1110 ;src/main.c:251: __endasm; + 0000053B 76 [ 4] 1111 halt + 1112 ;src/main.c:253: if (wc_key_esc()) + 0000053C CDr00r00 [17] 1113 call _wc_key_esc + 0000053F B7 [ 4] 1114 or a, a + 00000540 28 F9 [12] 1115 jr z, 00104$ + 1116 ;src/main.c:254: break; + 1117 ;src/main.c:256: } + 00000542 C9 [10] 1118 ret + 1119 ;src/main.c:258: void wait_frames(u8 n) + 1120 ; --------------------------------- + 1121 ; Function wait_frames + 1122 ; --------------------------------- + 00000543 1123 _wait_frames:: + 00000543 4F [ 4] 1124 ld c, a + 1125 ;src/main.c:260: while (n--) + 00000544 1126 00101$: + 00000544 79 [ 4] 1127 ld a, c + 00000545 0D [ 4] 1128 dec c + 00000546 B7 [ 4] 1129 or a, a + 00000547 C8 [11] 1130 ret z + 1131 ;src/main.c:264: __endasm; + 00000548 76 [ 4] 1132 halt + 1133 ;src/main.c:266: } + 00000549 C3r44r05 [10] 1134 jp 00101$ + 1135 ;src/main.c:273: u8 wc_screen_width() + 1136 ; --------------------------------- + 1137 ; Function wc_screen_width + 1138 ; --------------------------------- + 0000054C 1139 _wc_screen_width:: + 1140 ;src/main.c:275: return (*(u8*)_HEI >= 36) ? 90 : 80; + 0000054C 3A 0E 60 [13] 1141 ld a, (#0x600e) + 0000054F D6 24 [ 7] 1142 sub a, #0x24 + 00000551 38 03 [12] 1143 jr c, 00103$ + 00000553 3E 5A [ 7] 1144 ld a, #0x5a + 00000555 C9 [10] 1145 ret + 00000556 1146 00103$: + 00000556 3E 50 [ 7] 1147 ld a, #0x50 + 1148 ;src/main.c:276: } + 00000558 C9 [10] 1149 ret + 1150 ;src/main.c:281: u8 wc_center(u8 screen_size, u8 win_size) + 1151 ; --------------------------------- + 1152 ; Function wc_center + 1153 ; --------------------------------- + 00000559 1154 _wc_center:: + 00000559 DD E5 [15] 1155 push ix + 0000055B DD 21 00 00 [14] 1156 ld ix, #0 + 0000055F DD 39 [15] 1157 add ix, sp + 00000561 F5 [11] 1158 push af + 00000562 DD 77 FF [19] 1159 ld -1 (ix), a + 1160 ;src/main.c:283: return (screen_size > win_size) ? (screen_size - win_size) / 2 : 0; + 00000565 DD 75 FE [19] 1161 ld -2 (ix), l + 00000568 7D [ 4] 1162 ld a, l + 00000569 DD 96 FF [19] 1163 sub a, -1 (ix) + 0000056C 30 1B [12] 1164 jr nc, 00103$ + 0000056E DD 7E FF [19] 1165 ld a, -1 (ix) + 00000571 DD 5E FE [19] 1166 ld e, -2 (ix) + 00000574 93 [ 4] 1167 sub a, e + 00000575 4F [ 4] 1168 ld c, a + 00000576 9F [ 4] 1169 sbc a, a + 00000577 47 [ 4] 1170 ld b, a + 00000578 59 [ 4] 1171 ld e, c + 00000579 50 [ 4] 1172 ld d, b + 0000057A CB 78 [ 8] 1173 bit 7, b + 0000057C 28 03 [12] 1174 jr z, 00105$ + 0000057E 59 [ 4] 1175 ld e, c + 0000057F 50 [ 4] 1176 ld d, b + 00000580 13 [ 6] 1177 inc de + 00000581 1178 00105$: + 00000581 7B [ 4] 1179 ld a, e + 00000582 CB 2A [ 8] 1180 sra d + 00000584 CB 1F [ 8] 1181 rr a + 00000586 C3r8Ar05 [10] 1182 jp 00104$ + 00000589 1183 00103$: + 00000589 AF [ 4] 1184 xor a, a + 0000058A 1185 00104$: + 1186 ;src/main.c:284: } + 0000058A DD F9 [10] 1187 ld sp, ix + 0000058C DD E1 [14] 1188 pop ix + 0000058E C9 [10] 1189 ret + 1190 ;src/main.c:286: void about() + 1191 ; --------------------------------- + 1192 ; Function about + 1193 ; --------------------------------- + 0000058F 1194 _about:: + 1195 ;src/main.c:288: memcpy(&win_about, &win_about_tpl, sizeof(win_about)); + 0000058F 11r44r10 [10] 1196 ld de, #_win_about + 00000592 21rB2r02 [10] 1197 ld hl, #_win_about_tpl + 00000595 01 12 00 [10] 1198 ld bc, #0x0012 + 00000598 ED B0 [21] 1199 ldir + 1200 ;src/main.c:289: win_about.x_pos = wc_center(wc_screen_width(), win_about.x_size); + 0000059A 21r48r10 [10] 1201 ld hl, #_win_about + 4 + 0000059D 6E [ 7] 1202 ld l, (hl) + 0000059E E5 [11] 1203 push hl + 0000059F CDr4Cr05 [17] 1204 call _wc_screen_width + 000005A2 E1 [10] 1205 pop hl + 000005A3 CDr59r05 [17] 1206 call _wc_center + 000005A6 32r46r10 [13] 1207 ld (#(_win_about + 2)), a + 1208 ;src/main.c:290: win_about.y_pos = wc_center(*(u8*)_HEI, win_about.y_size); + 000005A9 21r49r10 [10] 1209 ld hl, #_win_about + 5 + 000005AC 6E [ 7] 1210 ld l, (hl) + 000005AD 3A 0E 60 [13] 1211 ld a, (#0x600e) + 000005B0 CDr59r05 [17] 1212 call _wc_center + 000005B3 32r47r10 [13] 1213 ld (#(_win_about + 3)), a + 1214 ;src/main.c:291: wc_prwow(&win_about); + 000005B6 21r44r10 [10] 1215 ld hl, #_win_about + 000005B9 CDr00r00 [17] 1216 call _wc_prwow + 1217 ;src/main.c:292: wait_esc_key(); + 000005BC CDr3Br05 [17] 1218 call _wait_esc_key + 1219 ;src/main.c:293: wc_rresb(&win_about); + 000005BF 21r44r10 [10] 1220 ld hl, #_win_about + 000005C2 CDr00r00 [17] 1221 call _wc_rresb + 1222 ;src/main.c:294: wc_exit(WC_EXIT); + 000005C5 AF [ 4] 1223 xor a, a + 1224 ;src/main.c:295: } + 000005C6 C3r00r00 [10] 1225 jp _wc_exit + 1226 ;src/main.c:300: void unload_and_exit(WC_EXIT_SIGNAL sig) + 1227 ; --------------------------------- + 1228 ; Function unload_and_exit + 1229 ; --------------------------------- + 000005C9 1230 _unload_and_exit:: + 000005C9 3B [ 6] 1231 dec sp + 000005CA FD 21 00 00 [14] 1232 ld iy, #0 + 000005CE FD 39 [15] 1233 add iy, sp + 000005D0 FD 77 00 [19] 1234 ld 0 (iy), a + 1235 ;src/main.c:302: esp_cmd(ESP_CMD_TRACK_STOP); + 000005D3 3E A2 [ 7] 1236 ld a, #0xa2 + 000005D5 CDr05r00 [17] 1237 call _esp_cmd + 1238 ;src/main.c:303: esp_wait_busy(100); // 2s - both should be near-instant + 000005D8 21 64 00 [10] 1239 ld hl, #0x0064 + 000005DB CDr2Cr02 [17] 1240 call _esp_wait_busy + 1241 ;src/main.c:304: esp_cmd(ESP_CMD_KILL_OBJECTS); + 000005DE 3E E4 [ 7] 1242 ld a, #0xe4 + 000005E0 CDr05r00 [17] 1243 call _esp_cmd + 1244 ;src/main.c:305: esp_wait_busy(100); + 000005E3 21 64 00 [10] 1245 ld hl, #0x0064 + 000005E6 CDr2Cr02 [17] 1246 call _esp_wait_busy + 1247 ;src/main.c:306: wc_rresb(&win_xm); + 000005E9 21r32r10 [10] 1248 ld hl, #_win_xm + 000005EC CDr00r00 [17] 1249 call _wc_rresb + 1250 ;src/main.c:307: wc_exit(sig); + 000005EF 21 00 00 [10] 1251 ld hl, #0 + 000005F2 39 [11] 1252 add hl, sp + 000005F3 7E [ 7] 1253 ld a, (hl) + 000005F4 33 [ 6] 1254 inc sp + 000005F5 C3r00r00 [10] 1255 jp _wc_exit + 1256 ;src/main.c:308: } + 000005F8 33 [ 6] 1257 inc sp + 000005F9 C9 [10] 1258 ret + 1259 ;src/main.c:312: void leave_playing_and_exit() + 1260 ; --------------------------------- + 1261 ; Function leave_playing_and_exit + 1262 ; --------------------------------- + 000005FA 1263 _leave_playing_and_exit:: + 1264 ;src/main.c:314: wc_rresb(&win_xm); + 000005FA 21r32r10 [10] 1265 ld hl, #_win_xm + 000005FD CDr00r00 [17] 1266 call _wc_rresb + 1267 ;src/main.c:315: wc_exit(WC_EXIT); + 00000600 AF [ 4] 1268 xor a, a + 1269 ;src/main.c:316: } + 00000601 C3r00r00 [10] 1270 jp _wc_exit + 1271 ;src/main.c:322: void wait_for_manual_exit() + 1272 ; --------------------------------- + 1273 ; Function wait_for_manual_exit + 1274 ; --------------------------------- + 00000604 1275 _wait_for_manual_exit:: + 1276 ;src/main.c:324: while (1) + 00000604 1277 00109$: + 1278 ;src/main.c:328: __endasm; + 00000604 76 [ 4] 1279 halt + 1280 ;src/main.c:330: if (wc_key_pgdn() || wc_key_enter()) + 00000605 CDr00r00 [17] 1281 call _wc_key_pgdn + 00000608 B7 [ 4] 1282 or a, a + 00000609 20 06 [12] 1283 jr nz, 00101$ + 0000060B CDr00r00 [17] 1284 call _wc_key_enter + 0000060E B7 [ 4] 1285 or a, a + 0000060F 28 05 [12] 1286 jr z, 00102$ + 00000611 1287 00101$: + 1288 ;src/main.c:331: unload_and_exit(WC_NEXT_FILE); + 00000611 3E 02 [ 7] 1289 ld a, #0x02 + 00000613 CDrC9r05 [17] 1290 call _unload_and_exit + 00000616 1291 00102$: + 1292 ;src/main.c:333: if (wc_key_pgup()) + 00000616 CDr00r00 [17] 1293 call _wc_key_pgup + 00000619 B7 [ 4] 1294 or a, a + 0000061A 28 05 [12] 1295 jr z, 00105$ + 1296 ;src/main.c:334: unload_and_exit(WC_PREV_FILE); + 0000061C 3E 04 [ 7] 1297 ld a, #0x04 + 0000061E CDrC9r05 [17] 1298 call _unload_and_exit + 00000621 1299 00105$: + 1300 ;src/main.c:336: if (wc_key_esc()) + 00000621 CDr00r00 [17] 1301 call _wc_key_esc + 00000624 B7 [ 4] 1302 or a, a + 00000625 28 DD [12] 1303 jr z, 00109$ + 1304 ;src/main.c:337: unload_and_exit(WC_EXIT); + 00000627 AF [ 4] 1305 xor a, a + 00000628 CDrC9r05 [17] 1306 call _unload_and_exit + 1307 ;src/main.c:339: } + 0000062B C3r04r06 [10] 1308 jp 00109$ + 1309 ;src/main.c:345: void error_esp() + 1310 ; --------------------------------- + 1311 ; Function error_esp + 1312 ; --------------------------------- + 0000062E 1313 _error_esp:: + 1314 ;src/main.c:350: xm_set_status_code("No ESP32 found", state_esp); + 0000062E 3Ar00r00 [13] 1315 ld a, (_state_esp) + 00000631 F5 [11] 1316 push af + 00000632 33 [ 6] 1317 inc sp + 00000633 21r46r06 [10] 1318 ld hl, #___str_4 + 00000636 CDrD7r07 [17] 1319 call _xm_set_status_code + 1320 ;src/main.c:351: wait_esc_key(); + 00000639 CDr3Br05 [17] 1321 call _wait_esc_key + 1322 ;src/main.c:352: wc_rresb(&win_xm); + 0000063C 21r32r10 [10] 1323 ld hl, #_win_xm + 0000063F CDr00r00 [17] 1324 call _wc_rresb + 1325 ;src/main.c:353: wc_exit(WC_EXIT); + 00000642 AF [ 4] 1326 xor a, a + 1327 ;src/main.c:354: } + 00000643 C3r00r00 [10] 1328 jp _wc_exit + 00000646 1329 ___str_4: + 00000646 4E 6F 20 45 53 50 33 1330 .ascii "No ESP32 found" 32 20 66 6F 75 6E 64 - 00000593 00 1186 .db 0x00 - 1187 ;src/main.c:299: u8 stop_on_error() - 1188 ; --------------------------------- - 1189 ; Function stop_on_error - 1190 ; --------------------------------- - 00000594 1191 _stop_on_error:: - 1192 ;src/main.c:301: return wc_prm_pl(1) == 2; - 00000594 3E 01 [ 7] 1193 ld a, #0x01 - 00000596 CDr00r00 [17] 1194 call _wc_prm_pl - 00000599 FE 02 [ 7] 1195 cp a, #0x02 - 0000059B 3E 01 [ 7] 1196 ld a, #0x01 - 0000059D C8 [11] 1197 ret z - 0000059E AF [ 4] 1198 xor a, a - 1199 ;src/main.c:302: } - 0000059F C9 [10] 1200 ret - 1201 ;src/main.c:304: void error_oom() - 1202 ; --------------------------------- - 1203 ; Function error_oom - 1204 ; --------------------------------- - 000005A0 1205 _error_oom:: - 1206 ;src/main.c:306: xm_set_status_code("File too large", last_esp_status); - 000005A0 3Ar08r10 [13] 1207 ld a, (_last_esp_status) - 000005A3 F5 [11] 1208 push af - 000005A4 33 [ 6] 1209 inc sp - 000005A5 21rC4r05 [10] 1210 ld hl, #___str_5 - 000005A8 CDr16r07 [17] 1211 call _xm_set_status_code - 1212 ;src/main.c:308: if (stop_on_error()) - 000005AB CDr94r05 [17] 1213 call _stop_on_error - 000005AE B7 [ 4] 1214 or a, a - 000005AF 28 03 [12] 1215 jr z, 00102$ - 1216 ;src/main.c:309: wait_for_manual_exit(); - 000005B1 CDr49r05 [17] 1217 call _wait_for_manual_exit - 000005B4 1218 00102$: - 1219 ;src/main.c:311: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance - 000005B4 3E 32 [ 7] 1220 ld a, #0x32 - 000005B6 CDrF2r04 [17] 1221 call _wait_frames - 1222 ;src/main.c:312: wc_rresb(&win_xm); - 000005B9 21r64r02 [10] 1223 ld hl, #_win_xm - 000005BC CDr00r00 [17] 1224 call _wc_rresb - 1225 ;src/main.c:313: wc_exit(WC_NEXT_FILE); - 000005BF 3E 02 [ 7] 1226 ld a, #0x02 - 1227 ;src/main.c:314: } - 000005C1 C3r00r00 [10] 1228 jp _wc_exit - 000005C4 1229 ___str_5: - 000005C4 46 69 6C 65 20 74 6F 1230 .ascii "File too large" + 00000654 00 1331 .db 0x00 + 1332 ;src/main.c:364: u8 stop_on_error() + 1333 ; --------------------------------- + 1334 ; Function stop_on_error + 1335 ; --------------------------------- + 00000655 1336 _stop_on_error:: + 1337 ;src/main.c:366: return wc_prm_pl(1) == 2; + 00000655 3E 01 [ 7] 1338 ld a, #0x01 + 00000657 CDr00r00 [17] 1339 call _wc_prm_pl + 0000065A FE 02 [ 7] 1340 cp a, #0x02 + 0000065C 3E 01 [ 7] 1341 ld a, #0x01 + 0000065E C8 [11] 1342 ret z + 0000065F AF [ 4] 1343 xor a, a + 1344 ;src/main.c:367: } + 00000660 C9 [10] 1345 ret + 1346 ;src/main.c:369: void error_oom() + 1347 ; --------------------------------- + 1348 ; Function error_oom + 1349 ; --------------------------------- + 00000661 1350 _error_oom:: + 1351 ;src/main.c:371: xm_set_status_code("File too large", last_esp_status); + 00000661 3Ar08r10 [13] 1352 ld a, (_last_esp_status) + 00000664 F5 [11] 1353 push af + 00000665 33 [ 6] 1354 inc sp + 00000666 21r85r06 [10] 1355 ld hl, #___str_5 + 00000669 CDrD7r07 [17] 1356 call _xm_set_status_code + 1357 ;src/main.c:373: if (stop_on_error()) + 0000066C CDr55r06 [17] 1358 call _stop_on_error + 0000066F B7 [ 4] 1359 or a, a + 00000670 28 03 [12] 1360 jr z, 00102$ + 1361 ;src/main.c:374: wait_for_manual_exit(); + 00000672 CDr04r06 [17] 1362 call _wait_for_manual_exit + 00000675 1363 00102$: + 1364 ;src/main.c:376: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance + 00000675 3E 32 [ 7] 1365 ld a, #0x32 + 00000677 CDr43r05 [17] 1366 call _wait_frames + 1367 ;src/main.c:377: wc_rresb(&win_xm); + 0000067A 21r32r10 [10] 1368 ld hl, #_win_xm + 0000067D CDr00r00 [17] 1369 call _wc_rresb + 1370 ;src/main.c:378: wc_exit(WC_NEXT_FILE); + 00000680 3E 02 [ 7] 1371 ld a, #0x02 + 1372 ;src/main.c:379: } + 00000682 C3r00r00 [10] 1373 jp _wc_exit + 00000685 1374 ___str_5: + 00000685 46 69 6C 65 20 74 6F 1375 .ascii "File too large" 6F 20 6C 61 72 67 65 - 000005D2 00 1231 .db 0x00 - 1232 ;src/main.c:316: void error_playback() - 1233 ; --------------------------------- - 1234 ; Function error_playback - 1235 ; --------------------------------- - 000005D3 1236 _error_playback:: - 1237 ;src/main.c:318: xm_set_status_code("Playback error", last_esp_status); - 000005D3 3Ar08r10 [13] 1238 ld a, (_last_esp_status) - 000005D6 F5 [11] 1239 push af - 000005D7 33 [ 6] 1240 inc sp - 000005D8 21rF7r05 [10] 1241 ld hl, #___str_6 - 000005DB CDr16r07 [17] 1242 call _xm_set_status_code - 1243 ;src/main.c:320: if (stop_on_error()) - 000005DE CDr94r05 [17] 1244 call _stop_on_error - 000005E1 B7 [ 4] 1245 or a, a - 000005E2 28 03 [12] 1246 jr z, 00102$ - 1247 ;src/main.c:321: wait_for_manual_exit(); - 000005E4 CDr49r05 [17] 1248 call _wait_for_manual_exit - 000005E7 1249 00102$: - 1250 ;src/main.c:323: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance - 000005E7 3E 32 [ 7] 1251 ld a, #0x32 - 000005E9 CDrF2r04 [17] 1252 call _wait_frames - 1253 ;src/main.c:324: wc_rresb(&win_xm); - 000005EC 21r64r02 [10] 1254 ld hl, #_win_xm - 000005EF CDr00r00 [17] 1255 call _wc_rresb - 1256 ;src/main.c:325: wc_exit(WC_NEXT_FILE); - 000005F2 3E 02 [ 7] 1257 ld a, #0x02 - 1258 ;src/main.c:326: } - 000005F4 C3r00r00 [10] 1259 jp _wc_exit - 000005F7 1260 ___str_6: - 000005F7 50 6C 61 79 62 61 63 1261 .ascii "Playback error" + 00000693 00 1376 .db 0x00 + 1377 ;src/main.c:381: void error_playback() + 1378 ; --------------------------------- + 1379 ; Function error_playback + 1380 ; --------------------------------- + 00000694 1381 _error_playback:: + 1382 ;src/main.c:383: xm_set_status_code("Playback error", last_esp_status); + 00000694 3Ar08r10 [13] 1383 ld a, (_last_esp_status) + 00000697 F5 [11] 1384 push af + 00000698 33 [ 6] 1385 inc sp + 00000699 21rB8r06 [10] 1386 ld hl, #___str_6 + 0000069C CDrD7r07 [17] 1387 call _xm_set_status_code + 1388 ;src/main.c:385: if (stop_on_error()) + 0000069F CDr55r06 [17] 1389 call _stop_on_error + 000006A2 B7 [ 4] 1390 or a, a + 000006A3 28 03 [12] 1391 jr z, 00102$ + 1392 ;src/main.c:386: wait_for_manual_exit(); + 000006A5 CDr04r06 [17] 1393 call _wait_for_manual_exit + 000006A8 1394 00102$: + 1395 ;src/main.c:388: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance + 000006A8 3E 32 [ 7] 1396 ld a, #0x32 + 000006AA CDr43r05 [17] 1397 call _wait_frames + 1398 ;src/main.c:389: wc_rresb(&win_xm); + 000006AD 21r32r10 [10] 1399 ld hl, #_win_xm + 000006B0 CDr00r00 [17] 1400 call _wc_rresb + 1401 ;src/main.c:390: wc_exit(WC_NEXT_FILE); + 000006B3 3E 02 [ 7] 1402 ld a, #0x02 + 1403 ;src/main.c:391: } + 000006B5 C3r00r00 [10] 1404 jp _wc_exit + 000006B8 1405 ___str_6: + 000006B8 50 6C 61 79 62 61 63 1406 .ascii "Playback error" 6B 20 65 72 72 6F 72 - 00000605 00 1262 .db 0x00 - 1263 ;src/main.c:333: void copy_file_name() - 1264 ; --------------------------------- - 1265 ; Function copy_file_name - 1266 ; --------------------------------- - 00000606 1267 _copy_file_name:: - 1268 ;src/main.c:335: u8 *src = (u8*)p_file_name; - 00000606 ED 4Br09r10 [20] 1269 ld bc, (_p_file_name) - 1270 ;src/main.c:338: while (src[i] && i < sizeof(file_name) - 1) - 0000060A 1E 00 [ 7] 1271 ld e, #0x00 - 0000060C 1272 00102$: - 0000060C 6B [ 4] 1273 ld l, e - 0000060D 26 00 [ 7] 1274 ld h, #0x00 - 0000060F 09 [11] 1275 add hl, bc - 00000610 56 [ 7] 1276 ld d, (hl) - 1277 ;src/main.c:340: file_name[i] = src[i]; - 00000611 3Er0B [ 7] 1278 ld a, #<(_file_name) - 00000613 83 [ 4] 1279 add a, e - 00000614 6F [ 4] 1280 ld l, a - 00000615 3Es10 [ 7] 1281 ld a, #>(_file_name) - 00000617 CE 00 [ 7] 1282 adc a, #0x00 - 00000619 67 [ 4] 1283 ld h, a - 1284 ;src/main.c:338: while (src[i] && i < sizeof(file_name) - 1) - 0000061A 7A [ 4] 1285 ld a, d - 0000061B B7 [ 4] 1286 or a, a - 0000061C 28 0A [12] 1287 jr z, 00104$ - 0000061E 7B [ 4] 1288 ld a, e - 0000061F D6 20 [ 7] 1289 sub a, #0x20 - 00000621 30 05 [12] 1290 jr nc, 00104$ - 1291 ;src/main.c:340: file_name[i] = src[i]; - 00000623 72 [ 7] 1292 ld (hl), d - 1293 ;src/main.c:341: i++; - 00000624 1C [ 4] 1294 inc e - 00000625 C3r0Cr06 [10] 1295 jp 00102$ - 00000628 1296 00104$: - 1297 ;src/main.c:343: file_name[i] = 0; - 00000628 36 00 [10] 1298 ld (hl), #0x00 - 1299 ;src/main.c:344: } - 0000062A C9 [10] 1300 ret - 1301 ;src/main.c:377: void xm_draw_static_labels() - 1302 ; --------------------------------- - 1303 ; Function xm_draw_static_labels - 1304 ; --------------------------------- - 0000062B 1305 _xm_draw_static_labels:: - 1306 ;src/main.c:379: wc_prsrw(&win_xm, "File:", ROW_FILE, 1, 5); - 0000062B 21 05 00 [10] 1307 ld hl, #0x0005 - 0000062E E5 [11] 1308 push hl - 0000062F 21 02 01 [10] 1309 ld hl, #0x102 - 00000632 E5 [11] 1310 push hl - 00000633 11r77r06 [10] 1311 ld de, #___str_7 - 00000636 21r64r02 [10] 1312 ld hl, #_win_xm - 00000639 CDr00r00 [17] 1313 call _wc_prsrw - 1314 ;src/main.c:380: wc_prsrw_attr(&win_xm, file_name, ROW_FILE, 7, strlen(file_name), ATTR_VALUE); - 0000063C 21r0Br10 [10] 1315 ld hl, #_file_name - 0000063F CDr00r00 [17] 1316 call _strlen - 00000642 3E 71 [ 7] 1317 ld a, #0x71 - 00000644 F5 [11] 1318 push af - 00000645 33 [ 6] 1319 inc sp - 00000646 D5 [11] 1320 push de - 00000647 21 02 07 [10] 1321 ld hl, #0x702 - 0000064A E5 [11] 1322 push hl - 0000064B 11r0Br10 [10] 1323 ld de, #_file_name - 0000064E 21r64r02 [10] 1324 ld hl, #_win_xm - 00000651 CDr00r00 [17] 1325 call _wc_prsrw_attr - 1326 ;src/main.c:381: wc_prsrw(&win_xm, "Status:", ROW_STATUS, 1, 7); - 00000654 21 07 00 [10] 1327 ld hl, #0x0007 - 00000657 E5 [11] 1328 push hl - 00000658 21 03 01 [10] 1329 ld hl, #0x103 - 0000065B E5 [11] 1330 push hl - 0000065C 11r7Dr06 [10] 1331 ld de, #___str_8 - 0000065F 21r64r02 [10] 1332 ld hl, #_win_xm - 00000662 CDr00r00 [17] 1333 call _wc_prsrw - 1334 ;src/main.c:384: wc_prsrw(&win_xm, HINT_TEXT, ROW_HINT, 2, sizeof(HINT_TEXT) - 1); - 00000665 21 24 00 [10] 1335 ld hl, #0x0024 - 00000668 E5 [11] 1336 push hl - 00000669 21 0A 02 [10] 1337 ld hl, #0x20a - 0000066C E5 [11] 1338 push hl - 0000066D 11r85r06 [10] 1339 ld de, #___str_9 - 00000670 21r64r02 [10] 1340 ld hl, #_win_xm - 00000673 CDr00r00 [17] 1341 call _wc_prsrw - 1342 ;src/main.c:385: } - 00000676 C9 [10] 1343 ret - 00000677 1344 ___str_7: - 00000677 46 69 6C 65 3A 1345 .ascii "File:" - 0000067C 00 1346 .db 0x00 - 0000067D 1347 ___str_8: - 0000067D 53 74 61 74 75 73 3A 1348 .ascii "Status:" - 00000684 00 1349 .db 0x00 - 00000685 1350 ___str_9: - 00000685 50 67 55 70 2F 50 67 1351 .ascii "PgUp/PgDn:Track Esc:Stop Space:Leave" + 000006C6 00 1407 .db 0x00 + 1408 ;src/main.c:398: void copy_file_name() + 1409 ; --------------------------------- + 1410 ; Function copy_file_name + 1411 ; --------------------------------- + 000006C7 1412 _copy_file_name:: + 1413 ;src/main.c:400: u8 *src = (u8*)p_file_name; + 000006C7 ED 4Br09r10 [20] 1414 ld bc, (_p_file_name) + 1415 ;src/main.c:403: while (src[i] && i < sizeof(file_name) - 1) + 000006CB 1E 00 [ 7] 1416 ld e, #0x00 + 000006CD 1417 00102$: + 000006CD 6B [ 4] 1418 ld l, e + 000006CE 26 00 [ 7] 1419 ld h, #0x00 + 000006D0 09 [11] 1420 add hl, bc + 000006D1 56 [ 7] 1421 ld d, (hl) + 1422 ;src/main.c:405: file_name[i] = src[i]; + 000006D2 3Er0B [ 7] 1423 ld a, #<(_file_name) + 000006D4 83 [ 4] 1424 add a, e + 000006D5 6F [ 4] 1425 ld l, a + 000006D6 3Es10 [ 7] 1426 ld a, #>(_file_name) + 000006D8 CE 00 [ 7] 1427 adc a, #0x00 + 000006DA 67 [ 4] 1428 ld h, a + 1429 ;src/main.c:403: while (src[i] && i < sizeof(file_name) - 1) + 000006DB 7A [ 4] 1430 ld a, d + 000006DC B7 [ 4] 1431 or a, a + 000006DD 28 0A [12] 1432 jr z, 00104$ + 000006DF 7B [ 4] 1433 ld a, e + 000006E0 D6 20 [ 7] 1434 sub a, #0x20 + 000006E2 30 05 [12] 1435 jr nc, 00104$ + 1436 ;src/main.c:405: file_name[i] = src[i]; + 000006E4 72 [ 7] 1437 ld (hl), d + 1438 ;src/main.c:406: i++; + 000006E5 1C [ 4] 1439 inc e + 000006E6 C3rCDr06 [10] 1440 jp 00102$ + 000006E9 1441 00104$: + 1442 ;src/main.c:408: file_name[i] = 0; + 000006E9 36 00 [10] 1443 ld (hl), #0x00 + 1444 ;src/main.c:409: } + 000006EB C9 [10] 1445 ret + 1446 ;src/main.c:442: void xm_draw_static_labels() + 1447 ; --------------------------------- + 1448 ; Function xm_draw_static_labels + 1449 ; --------------------------------- + 000006EC 1450 _xm_draw_static_labels:: + 1451 ;src/main.c:444: wc_prsrw(&win_xm, "File:", ROW_FILE, 1, 5); + 000006EC 21 05 00 [10] 1452 ld hl, #0x0005 + 000006EF E5 [11] 1453 push hl + 000006F0 21 02 01 [10] 1454 ld hl, #0x102 + 000006F3 E5 [11] 1455 push hl + 000006F4 11r38r07 [10] 1456 ld de, #___str_7 + 000006F7 21r32r10 [10] 1457 ld hl, #_win_xm + 000006FA CDr00r00 [17] 1458 call _wc_prsrw + 1459 ;src/main.c:445: wc_prsrw_attr(&win_xm, file_name, ROW_FILE, 7, strlen(file_name), ATTR_VALUE); + 000006FD 21r0Br10 [10] 1460 ld hl, #_file_name + 00000700 CDr00r00 [17] 1461 call _strlen + 00000703 3E 71 [ 7] 1462 ld a, #0x71 + 00000705 F5 [11] 1463 push af + 00000706 33 [ 6] 1464 inc sp + 00000707 D5 [11] 1465 push de + 00000708 21 02 07 [10] 1466 ld hl, #0x702 + 0000070B E5 [11] 1467 push hl + 0000070C 11r0Br10 [10] 1468 ld de, #_file_name + 0000070F 21r32r10 [10] 1469 ld hl, #_win_xm + 00000712 CDr00r00 [17] 1470 call _wc_prsrw_attr + 1471 ;src/main.c:446: wc_prsrw(&win_xm, "Status:", ROW_STATUS, 1, 7); + 00000715 21 07 00 [10] 1472 ld hl, #0x0007 + 00000718 E5 [11] 1473 push hl + 00000719 21 03 01 [10] 1474 ld hl, #0x103 + 0000071C E5 [11] 1475 push hl + 0000071D 11r3Er07 [10] 1476 ld de, #___str_8 + 00000720 21r32r10 [10] 1477 ld hl, #_win_xm + 00000723 CDr00r00 [17] 1478 call _wc_prsrw + 1479 ;src/main.c:449: wc_prsrw(&win_xm, HINT_TEXT, ROW_HINT, 2, sizeof(HINT_TEXT) - 1); + 00000726 21 24 00 [10] 1480 ld hl, #0x0024 + 00000729 E5 [11] 1481 push hl + 0000072A 21 0A 02 [10] 1482 ld hl, #0x20a + 0000072D E5 [11] 1483 push hl + 0000072E 11r46r07 [10] 1484 ld de, #___str_9 + 00000731 21r32r10 [10] 1485 ld hl, #_win_xm + 00000734 CDr00r00 [17] 1486 call _wc_prsrw + 1487 ;src/main.c:450: } + 00000737 C9 [10] 1488 ret + 00000738 1489 ___str_7: + 00000738 46 69 6C 65 3A 1490 .ascii "File:" + 0000073D 00 1491 .db 0x00 + 0000073E 1492 ___str_8: + 0000073E 53 74 61 74 75 73 3A 1493 .ascii "Status:" + 00000745 00 1494 .db 0x00 + 00000746 1495 ___str_9: + 00000746 50 67 55 70 2F 50 67 1496 .ascii "PgUp/PgDn:Track Esc:Stop Space:Leave" 44 6E 3A 54 72 61 63 6B 20 45 73 63 3A 53 74 6F 70 20 53 70 61 63 65 3A 4C 65 61 76 65 - 000006A9 00 1352 .db 0x00 - 1353 ;src/main.c:391: void xm_set_status_attr(const char *msg, u8 attr) - 1354 ; --------------------------------- - 1355 ; Function xm_set_status_attr - 1356 ; --------------------------------- - 000006AA 1357 _xm_set_status_attr:: - 000006AA DD E5 [15] 1358 push ix - 000006AC DD 21 00 00 [14] 1359 ld ix, #0 - 000006B0 DD 39 [15] 1360 add ix, sp - 000006B2 F5 [11] 1361 push af - 1362 ;src/main.c:395: while (msg[i] && i < STATUS_VALUE_WIDTH) - 000006B3 1E 00 [ 7] 1363 ld e, #0x00 - 000006B5 1364 00102$: - 000006B5 7B [ 4] 1365 ld a, e - 000006B6 85 [ 4] 1366 add a, l - 000006B7 4F [ 4] 1367 ld c, a - 000006B8 3E 00 [ 7] 1368 ld a, #0x00 - 000006BA 8C [ 4] 1369 adc a, h - 000006BB 47 [ 4] 1370 ld b, a - 000006BC 0A [ 7] 1371 ld a, (bc) - 000006BD 4F [ 4] 1372 ld c, a - 000006BE B7 [ 4] 1373 or a, a - 000006BF 28 1F [12] 1374 jr z, 00119$ - 000006C1 7B [ 4] 1375 ld a, e - 000006C2 D6 18 [ 7] 1376 sub a, #0x18 - 000006C4 30 1A [12] 1377 jr nc, 00119$ - 1378 ;src/main.c:397: status_buf[i] = msg[i]; - 000006C6 3Er32 [ 7] 1379 ld a, #<(_status_buf) - 000006C8 83 [ 4] 1380 add a, e - 000006C9 DD 77 FE [19] 1381 ld -2 (ix), a - 000006CC 3Es10 [ 7] 1382 ld a, #>(_status_buf) - 000006CE CE 00 [ 7] 1383 adc a, #0x00 - 000006D0 DD 77 FF [19] 1384 ld -1 (ix), a - 000006D3 E5 [11] 1385 push hl - 000006D4 DD 6E FE [19] 1386 ld l, -2 (ix) - 000006D7 DD 66 FF [19] 1387 ld h, -1 (ix) - 000006DA 71 [ 7] 1388 ld (hl), c - 000006DB E1 [10] 1389 pop hl - 1390 ;src/main.c:398: i++; - 000006DC 1C [ 4] 1391 inc e - 000006DD C3rB5r06 [10] 1392 jp 00102$ - 1393 ;src/main.c:400: while (i < STATUS_VALUE_WIDTH) - 000006E0 1394 00119$: - 000006E0 1395 00105$: - 000006E0 7B [ 4] 1396 ld a, e - 000006E1 D6 18 [ 7] 1397 sub a, #0x18 - 000006E3 30 0C [12] 1398 jr nc, 00107$ - 1399 ;src/main.c:401: status_buf[i++] = ' '; - 000006E5 21r32r10 [10] 1400 ld hl, #_status_buf - 000006E8 16 00 [ 7] 1401 ld d, #0x00 - 000006EA 19 [11] 1402 add hl, de - 000006EB 1C [ 4] 1403 inc e - 000006EC 36 20 [10] 1404 ld (hl), #0x20 - 000006EE C3rE0r06 [10] 1405 jp 00105$ - 000006F1 1406 00107$: - 1407 ;src/main.c:403: wc_prsrw_attr(&win_xm, status_buf, ROW_STATUS, STATUS_VALUE_X, STATUS_VALUE_WIDTH, attr); - 000006F1 21r64r02 [10] 1408 ld hl, #_win_xm - 000006F4 DD 7E 04 [19] 1409 ld a, 4 (ix) - 000006F7 F5 [11] 1410 push af - 000006F8 33 [ 6] 1411 inc sp - 000006F9 11 18 00 [10] 1412 ld de, #0x0018 - 000006FC D5 [11] 1413 push de - 000006FD 11 03 09 [10] 1414 ld de, #0x903 - 00000700 D5 [11] 1415 push de - 00000701 11r32r10 [10] 1416 ld de, #_status_buf - 00000704 CDr00r00 [17] 1417 call _wc_prsrw_attr - 1418 ;src/main.c:404: } - 00000707 DD F9 [10] 1419 ld sp, ix - 00000709 DD E1 [14] 1420 pop ix - 0000070B E1 [10] 1421 pop hl - 0000070C 33 [ 6] 1422 inc sp - 0000070D E9 [ 4] 1423 jp (hl) - 1424 ;src/main.c:406: void xm_set_status(const char *msg) - 1425 ; --------------------------------- - 1426 ; Function xm_set_status - 1427 ; --------------------------------- - 0000070E 1428 _xm_set_status:: - 1429 ;src/main.c:408: xm_set_status_attr(msg, ATTR_VALUE); - 0000070E 3E 71 [ 7] 1430 ld a, #0x71 - 00000710 F5 [11] 1431 push af - 00000711 33 [ 6] 1432 inc sp - 00000712 CDrAAr06 [17] 1433 call _xm_set_status_attr - 1434 ;src/main.c:409: } - 00000715 C9 [10] 1435 ret - 1436 ;src/main.c:416: void xm_set_status_code(const char *msg, u8 code) - 1437 ; --------------------------------- - 1438 ; Function xm_set_status_code - 1439 ; --------------------------------- - 00000716 1440 _xm_set_status_code:: - 00000716 DD E5 [15] 1441 push ix - 00000718 DD 21 00 00 [14] 1442 ld ix, #0 - 0000071C DD 39 [15] 1443 add ix, sp - 0000071E 3B [ 6] 1444 dec sp - 0000071F EB [ 4] 1445 ex de, hl - 1446 ;src/main.c:421: while (msg[i] && i < sizeof(status_code_buf) - 7) - 00000720 0E 00 [ 7] 1447 ld c, #0x00 - 00000722 1448 00102$: - 00000722 69 [ 4] 1449 ld l, c - 00000723 26 00 [ 7] 1450 ld h, #0x00 - 00000725 19 [11] 1451 add hl, de - 00000726 46 [ 7] 1452 ld b, (hl) - 1453 ;src/main.c:423: status_code_buf[i] = msg[i]; - 00000727 3Er4A [ 7] 1454 ld a, #<(_status_code_buf) - 00000729 81 [ 4] 1455 add a, c - 0000072A 6F [ 4] 1456 ld l, a - 0000072B 3Es10 [ 7] 1457 ld a, #>(_status_code_buf) - 0000072D CE 00 [ 7] 1458 adc a, #0x00 - 0000072F 67 [ 4] 1459 ld h, a - 1460 ;src/main.c:424: i++; - 00000730 79 [ 4] 1461 ld a, c - 00000731 3C [ 4] 1462 inc a - 00000732 DD 77 FF [19] 1463 ld -1 (ix), a - 1464 ;src/main.c:421: while (msg[i] && i < sizeof(status_code_buf) - 7) - 00000735 78 [ 4] 1465 ld a, b - 00000736 B7 [ 4] 1466 or a, a - 00000737 28 0C [12] 1467 jr z, 00104$ - 00000739 79 [ 4] 1468 ld a, c - 0000073A D6 11 [ 7] 1469 sub a, #0x11 - 0000073C 30 07 [12] 1470 jr nc, 00104$ - 1471 ;src/main.c:423: status_code_buf[i] = msg[i]; - 0000073E 70 [ 7] 1472 ld (hl), b - 1473 ;src/main.c:424: i++; - 0000073F DD 4E FF [19] 1474 ld c, -1 (ix) - 00000742 C3r22r07 [10] 1475 jp 00102$ - 00000745 1476 00104$: - 1477 ;src/main.c:427: status_code_buf[i++] = ' '; - 00000745 DD 4E FF [19] 1478 ld c, -1 (ix) - 00000748 36 20 [10] 1479 ld (hl), #0x20 - 1480 ;src/main.c:428: status_code_buf[i++] = '('; - 0000074A 69 [ 4] 1481 ld l, c - 0000074B 0C [ 4] 1482 inc c - 0000074C 26 00 [ 7] 1483 ld h, #0x00 - 0000074E 11r4Ar10 [10] 1484 ld de, #_status_code_buf - 00000751 19 [11] 1485 add hl, de - 00000752 36 28 [10] 1486 ld (hl), #0x28 - 1487 ;src/main.c:429: status_code_buf[i++] = '0'; - 00000754 69 [ 4] 1488 ld l, c - 00000755 0C [ 4] 1489 inc c - 00000756 26 00 [ 7] 1490 ld h, #0x00 - 00000758 11r4Ar10 [10] 1491 ld de, #_status_code_buf - 0000075B 19 [11] 1492 add hl, de - 0000075C 36 30 [10] 1493 ld (hl), #0x30 - 1494 ;src/main.c:430: status_code_buf[i++] = 'x'; - 0000075E 69 [ 4] 1495 ld l, c - 0000075F 0C [ 4] 1496 inc c - 00000760 26 00 [ 7] 1497 ld h, #0x00 - 00000762 11r4Ar10 [10] 1498 ld de, #_status_code_buf - 00000765 19 [11] 1499 add hl, de - 00000766 36 78 [10] 1500 ld (hl), #0x78 - 1501 ;src/main.c:431: status_code_buf[i++] = hexch[(code >> 4) & 0xF]; - 00000768 69 [ 4] 1502 ld l, c - 00000769 0C [ 4] 1503 inc c - 0000076A 26 00 [ 7] 1504 ld h, #0x00 - 0000076C 11r4Ar10 [10] 1505 ld de, #_status_code_buf - 0000076F 19 [11] 1506 add hl, de - 00000770 DD 7E 04 [19] 1507 ld a, 4 (ix) - 00000773 07 [ 4] 1508 rlca - 00000774 07 [ 4] 1509 rlca - 00000775 07 [ 4] 1510 rlca - 00000776 07 [ 4] 1511 rlca - 00000777 E6 0F [ 7] 1512 and a, #0xf - 00000779 C6rBD [ 7] 1513 add a, #<(_xm_set_status_code_hexch_10000_129) - 0000077B 5F [ 4] 1514 ld e, a - 0000077C 3E 00 [ 7] 1515 ld a, #0x00 - 0000077E CEs07 [ 7] 1516 adc a, #>(_xm_set_status_code_hexch_10000_129) - 00000780 57 [ 4] 1517 ld d, a - 00000781 1A [ 7] 1518 ld a, (de) - 00000782 77 [ 7] 1519 ld (hl), a - 1520 ;src/main.c:432: status_code_buf[i++] = hexch[code & 0xF]; - 00000783 69 [ 4] 1521 ld l, c - 00000784 0C [ 4] 1522 inc c - 00000785 26 00 [ 7] 1523 ld h, #0x00 - 00000787 11r4Ar10 [10] 1524 ld de, #_status_code_buf - 0000078A 19 [11] 1525 add hl, de - 0000078B DD 7E 04 [19] 1526 ld a, 4 (ix) - 0000078E E6 0F [ 7] 1527 and a, #0x0f - 00000790 C6rBD [ 7] 1528 add a, #<(_xm_set_status_code_hexch_10000_129) - 00000792 5F [ 4] 1529 ld e, a - 00000793 3E 00 [ 7] 1530 ld a, #0x00 - 00000795 CEs07 [ 7] 1531 adc a, #>(_xm_set_status_code_hexch_10000_129) - 00000797 57 [ 4] 1532 ld d, a - 00000798 1A [ 7] 1533 ld a, (de) - 00000799 77 [ 7] 1534 ld (hl), a - 1535 ;src/main.c:433: status_code_buf[i++] = ')'; - 0000079A 69 [ 4] 1536 ld l, c - 0000079B 0C [ 4] 1537 inc c - 0000079C 26 00 [ 7] 1538 ld h, #0x00 - 0000079E 11r4Ar10 [10] 1539 ld de, #_status_code_buf - 000007A1 19 [11] 1540 add hl, de - 000007A2 36 29 [10] 1541 ld (hl), #0x29 - 1542 ;src/main.c:434: status_code_buf[i] = 0; - 000007A4 69 [ 4] 1543 ld l, c - 000007A5 26 00 [ 7] 1544 ld h, #0x00 - 000007A7 11r4Ar10 [10] 1545 ld de, #_status_code_buf - 000007AA 19 [11] 1546 add hl, de - 000007AB 36 00 [10] 1547 ld (hl), #0x00 - 1548 ;src/main.c:436: xm_set_status_attr(status_code_buf, ATTR_ERROR); - 000007AD 3E 72 [ 7] 1549 ld a, #0x72 - 000007AF F5 [11] 1550 push af - 000007B0 33 [ 6] 1551 inc sp - 000007B1 21r4Ar10 [10] 1552 ld hl, #_status_code_buf - 000007B4 CDrAAr06 [17] 1553 call _xm_set_status_attr - 1554 ;src/main.c:437: } - 000007B7 33 [ 6] 1555 inc sp - 000007B8 DD E1 [14] 1556 pop ix - 000007BA E1 [10] 1557 pop hl - 000007BB 33 [ 6] 1558 inc sp - 000007BC E9 [ 4] 1559 jp (hl) - 000007BD 1560 _xm_set_status_code_hexch_10000_129: - 000007BD 30 31 32 33 34 35 36 1561 .ascii "0123456789ABCDEF" + 0000076A 00 1497 .db 0x00 + 1498 ;src/main.c:456: void xm_set_status_attr(const char *msg, u8 attr) + 1499 ; --------------------------------- + 1500 ; Function xm_set_status_attr + 1501 ; --------------------------------- + 0000076B 1502 _xm_set_status_attr:: + 0000076B DD E5 [15] 1503 push ix + 0000076D DD 21 00 00 [14] 1504 ld ix, #0 + 00000771 DD 39 [15] 1505 add ix, sp + 00000773 F5 [11] 1506 push af + 1507 ;src/main.c:460: while (msg[i] && i < STATUS_VALUE_WIDTH) + 00000774 1E 00 [ 7] 1508 ld e, #0x00 + 00000776 1509 00102$: + 00000776 7B [ 4] 1510 ld a, e + 00000777 85 [ 4] 1511 add a, l + 00000778 4F [ 4] 1512 ld c, a + 00000779 3E 00 [ 7] 1513 ld a, #0x00 + 0000077B 8C [ 4] 1514 adc a, h + 0000077C 47 [ 4] 1515 ld b, a + 0000077D 0A [ 7] 1516 ld a, (bc) + 0000077E 4F [ 4] 1517 ld c, a + 0000077F B7 [ 4] 1518 or a, a + 00000780 28 1F [12] 1519 jr z, 00119$ + 00000782 7B [ 4] 1520 ld a, e + 00000783 D6 18 [ 7] 1521 sub a, #0x18 + 00000785 30 1A [12] 1522 jr nc, 00119$ + 1523 ;src/main.c:462: status_buf[i] = msg[i]; + 00000787 3Er56 [ 7] 1524 ld a, #<(_status_buf) + 00000789 83 [ 4] 1525 add a, e + 0000078A DD 77 FE [19] 1526 ld -2 (ix), a + 0000078D 3Es10 [ 7] 1527 ld a, #>(_status_buf) + 0000078F CE 00 [ 7] 1528 adc a, #0x00 + 00000791 DD 77 FF [19] 1529 ld -1 (ix), a + 00000794 E5 [11] 1530 push hl + 00000795 DD 6E FE [19] 1531 ld l, -2 (ix) + 00000798 DD 66 FF [19] 1532 ld h, -1 (ix) + 0000079B 71 [ 7] 1533 ld (hl), c + 0000079C E1 [10] 1534 pop hl + 1535 ;src/main.c:463: i++; + 0000079D 1C [ 4] 1536 inc e + 0000079E C3r76r07 [10] 1537 jp 00102$ + 1538 ;src/main.c:465: while (i < STATUS_VALUE_WIDTH) + 000007A1 1539 00119$: + 000007A1 1540 00105$: + 000007A1 7B [ 4] 1541 ld a, e + 000007A2 D6 18 [ 7] 1542 sub a, #0x18 + 000007A4 30 0C [12] 1543 jr nc, 00107$ + 1544 ;src/main.c:466: status_buf[i++] = ' '; + 000007A6 21r56r10 [10] 1545 ld hl, #_status_buf + 000007A9 16 00 [ 7] 1546 ld d, #0x00 + 000007AB 19 [11] 1547 add hl, de + 000007AC 1C [ 4] 1548 inc e + 000007AD 36 20 [10] 1549 ld (hl), #0x20 + 000007AF C3rA1r07 [10] 1550 jp 00105$ + 000007B2 1551 00107$: + 1552 ;src/main.c:468: wc_prsrw_attr(&win_xm, status_buf, ROW_STATUS, STATUS_VALUE_X, STATUS_VALUE_WIDTH, attr); + 000007B2 21r32r10 [10] 1553 ld hl, #_win_xm + 000007B5 DD 7E 04 [19] 1554 ld a, 4 (ix) + 000007B8 F5 [11] 1555 push af + 000007B9 33 [ 6] 1556 inc sp + 000007BA 11 18 00 [10] 1557 ld de, #0x0018 + 000007BD D5 [11] 1558 push de + 000007BE 11 03 09 [10] 1559 ld de, #0x903 + 000007C1 D5 [11] 1560 push de + 000007C2 11r56r10 [10] 1561 ld de, #_status_buf + 000007C5 CDr00r00 [17] 1562 call _wc_prsrw_attr + 1563 ;src/main.c:469: } + 000007C8 DD F9 [10] 1564 ld sp, ix + 000007CA DD E1 [14] 1565 pop ix + 000007CC E1 [10] 1566 pop hl + 000007CD 33 [ 6] 1567 inc sp + 000007CE E9 [ 4] 1568 jp (hl) + 1569 ;src/main.c:471: void xm_set_status(const char *msg) + 1570 ; --------------------------------- + 1571 ; Function xm_set_status + 1572 ; --------------------------------- + 000007CF 1573 _xm_set_status:: + 1574 ;src/main.c:473: xm_set_status_attr(msg, ATTR_VALUE); + 000007CF 3E 71 [ 7] 1575 ld a, #0x71 + 000007D1 F5 [11] 1576 push af + 000007D2 33 [ 6] 1577 inc sp + 000007D3 CDr6Br07 [17] 1578 call _xm_set_status_attr + 1579 ;src/main.c:474: } + 000007D6 C9 [10] 1580 ret + 1581 ;src/main.c:481: void xm_set_status_code(const char *msg, u8 code) + 1582 ; --------------------------------- + 1583 ; Function xm_set_status_code + 1584 ; --------------------------------- + 000007D7 1585 _xm_set_status_code:: + 000007D7 DD E5 [15] 1586 push ix + 000007D9 DD 21 00 00 [14] 1587 ld ix, #0 + 000007DD DD 39 [15] 1588 add ix, sp + 000007DF 3B [ 6] 1589 dec sp + 000007E0 EB [ 4] 1590 ex de, hl + 1591 ;src/main.c:486: while (msg[i] && i < sizeof(status_code_buf) - 7) + 000007E1 0E 00 [ 7] 1592 ld c, #0x00 + 000007E3 1593 00102$: + 000007E3 69 [ 4] 1594 ld l, c + 000007E4 26 00 [ 7] 1595 ld h, #0x00 + 000007E6 19 [11] 1596 add hl, de + 000007E7 46 [ 7] 1597 ld b, (hl) + 1598 ;src/main.c:488: status_code_buf[i] = msg[i]; + 000007E8 3Er6E [ 7] 1599 ld a, #<(_status_code_buf) + 000007EA 81 [ 4] 1600 add a, c + 000007EB 6F [ 4] 1601 ld l, a + 000007EC 3Es10 [ 7] 1602 ld a, #>(_status_code_buf) + 000007EE CE 00 [ 7] 1603 adc a, #0x00 + 000007F0 67 [ 4] 1604 ld h, a + 1605 ;src/main.c:489: i++; + 000007F1 79 [ 4] 1606 ld a, c + 000007F2 3C [ 4] 1607 inc a + 000007F3 DD 77 FF [19] 1608 ld -1 (ix), a + 1609 ;src/main.c:486: while (msg[i] && i < sizeof(status_code_buf) - 7) + 000007F6 78 [ 4] 1610 ld a, b + 000007F7 B7 [ 4] 1611 or a, a + 000007F8 28 0C [12] 1612 jr z, 00104$ + 000007FA 79 [ 4] 1613 ld a, c + 000007FB D6 11 [ 7] 1614 sub a, #0x11 + 000007FD 30 07 [12] 1615 jr nc, 00104$ + 1616 ;src/main.c:488: status_code_buf[i] = msg[i]; + 000007FF 70 [ 7] 1617 ld (hl), b + 1618 ;src/main.c:489: i++; + 00000800 DD 4E FF [19] 1619 ld c, -1 (ix) + 00000803 C3rE3r07 [10] 1620 jp 00102$ + 00000806 1621 00104$: + 1622 ;src/main.c:492: status_code_buf[i++] = ' '; + 00000806 DD 4E FF [19] 1623 ld c, -1 (ix) + 00000809 36 20 [10] 1624 ld (hl), #0x20 + 1625 ;src/main.c:493: status_code_buf[i++] = '('; + 0000080B 69 [ 4] 1626 ld l, c + 0000080C 0C [ 4] 1627 inc c + 0000080D 26 00 [ 7] 1628 ld h, #0x00 + 0000080F 11r6Er10 [10] 1629 ld de, #_status_code_buf + 00000812 19 [11] 1630 add hl, de + 00000813 36 28 [10] 1631 ld (hl), #0x28 + 1632 ;src/main.c:494: status_code_buf[i++] = '0'; + 00000815 69 [ 4] 1633 ld l, c + 00000816 0C [ 4] 1634 inc c + 00000817 26 00 [ 7] 1635 ld h, #0x00 + 00000819 11r6Er10 [10] 1636 ld de, #_status_code_buf + 0000081C 19 [11] 1637 add hl, de + 0000081D 36 30 [10] 1638 ld (hl), #0x30 + 1639 ;src/main.c:495: status_code_buf[i++] = 'x'; + 0000081F 69 [ 4] 1640 ld l, c + 00000820 0C [ 4] 1641 inc c + 00000821 26 00 [ 7] 1642 ld h, #0x00 + 00000823 11r6Er10 [10] 1643 ld de, #_status_code_buf + 00000826 19 [11] 1644 add hl, de + 00000827 36 78 [10] 1645 ld (hl), #0x78 + 1646 ;src/main.c:496: status_code_buf[i++] = hexch[(code >> 4) & 0xF]; + 00000829 69 [ 4] 1647 ld l, c + 0000082A 0C [ 4] 1648 inc c + 0000082B 26 00 [ 7] 1649 ld h, #0x00 + 0000082D 11r6Er10 [10] 1650 ld de, #_status_code_buf + 00000830 19 [11] 1651 add hl, de + 00000831 DD 7E 04 [19] 1652 ld a, 4 (ix) + 00000834 07 [ 4] 1653 rlca + 00000835 07 [ 4] 1654 rlca + 00000836 07 [ 4] 1655 rlca + 00000837 07 [ 4] 1656 rlca + 00000838 E6 0F [ 7] 1657 and a, #0xf + 0000083A C6r7E [ 7] 1658 add a, #<(_xm_set_status_code_hexch_10000_141) + 0000083C 5F [ 4] 1659 ld e, a + 0000083D 3E 00 [ 7] 1660 ld a, #0x00 + 0000083F CEs08 [ 7] 1661 adc a, #>(_xm_set_status_code_hexch_10000_141) + 00000841 57 [ 4] 1662 ld d, a + 00000842 1A [ 7] 1663 ld a, (de) + 00000843 77 [ 7] 1664 ld (hl), a + 1665 ;src/main.c:497: status_code_buf[i++] = hexch[code & 0xF]; + 00000844 69 [ 4] 1666 ld l, c + 00000845 0C [ 4] 1667 inc c + 00000846 26 00 [ 7] 1668 ld h, #0x00 + 00000848 11r6Er10 [10] 1669 ld de, #_status_code_buf + 0000084B 19 [11] 1670 add hl, de + 0000084C DD 7E 04 [19] 1671 ld a, 4 (ix) + 0000084F E6 0F [ 7] 1672 and a, #0x0f + 00000851 C6r7E [ 7] 1673 add a, #<(_xm_set_status_code_hexch_10000_141) + 00000853 5F [ 4] 1674 ld e, a + 00000854 3E 00 [ 7] 1675 ld a, #0x00 + 00000856 CEs08 [ 7] 1676 adc a, #>(_xm_set_status_code_hexch_10000_141) + 00000858 57 [ 4] 1677 ld d, a + 00000859 1A [ 7] 1678 ld a, (de) + 0000085A 77 [ 7] 1679 ld (hl), a + 1680 ;src/main.c:498: status_code_buf[i++] = ')'; + 0000085B 69 [ 4] 1681 ld l, c + 0000085C 0C [ 4] 1682 inc c + 0000085D 26 00 [ 7] 1683 ld h, #0x00 + 0000085F 11r6Er10 [10] 1684 ld de, #_status_code_buf + 00000862 19 [11] 1685 add hl, de + 00000863 36 29 [10] 1686 ld (hl), #0x29 + 1687 ;src/main.c:499: status_code_buf[i] = 0; + 00000865 69 [ 4] 1688 ld l, c + 00000866 26 00 [ 7] 1689 ld h, #0x00 + 00000868 11r6Er10 [10] 1690 ld de, #_status_code_buf + 0000086B 19 [11] 1691 add hl, de + 0000086C 36 00 [10] 1692 ld (hl), #0x00 + 1693 ;src/main.c:501: xm_set_status_attr(status_code_buf, ATTR_ERROR); + 0000086E 3E 72 [ 7] 1694 ld a, #0x72 + 00000870 F5 [11] 1695 push af + 00000871 33 [ 6] 1696 inc sp + 00000872 21r6Er10 [10] 1697 ld hl, #_status_code_buf + 00000875 CDr6Br07 [17] 1698 call _xm_set_status_attr + 1699 ;src/main.c:502: } + 00000878 33 [ 6] 1700 inc sp + 00000879 DD E1 [14] 1701 pop ix + 0000087B E1 [10] 1702 pop hl + 0000087C 33 [ 6] 1703 inc sp + 0000087D E9 [ 4] 1704 jp (hl) + 0000087E 1705 _xm_set_status_code_hexch_10000_141: + 0000087E 30 31 32 33 34 35 36 1706 .ascii "0123456789ABCDEF" 37 38 39 41 42 43 44 45 46 - 000007CD 00 1562 .db 0x00 - 1563 ;src/main.c:450: void put_hex2(char *dst, u8 val) - 1564 ; --------------------------------- - 1565 ; Function put_hex2 - 1566 ; --------------------------------- - 000007CE 1567 _put_hex2:: - 000007CE DD E5 [15] 1568 push ix - 000007D0 DD 21 00 00 [14] 1569 ld ix, #0 - 000007D4 DD 39 [15] 1570 add ix, sp - 000007D6 EB [ 4] 1571 ex de, hl - 1572 ;src/main.c:453: dst[0] = hexch[(val >> 4) & 0xF]; - 000007D7 01rFAr07 [10] 1573 ld bc, #_put_hex2_hexch_10000_132+0 - 000007DA DD 7E 04 [19] 1574 ld a, 4 (ix) - 000007DD 07 [ 4] 1575 rlca - 000007DE 07 [ 4] 1576 rlca - 000007DF 07 [ 4] 1577 rlca - 000007E0 07 [ 4] 1578 rlca - 000007E1 E6 0F [ 7] 1579 and a, #0xf - 000007E3 6F [ 4] 1580 ld l, a - 000007E4 26 00 [ 7] 1581 ld h, #0x00 - 000007E6 09 [11] 1582 add hl, bc - 000007E7 7E [ 7] 1583 ld a, (hl) - 000007E8 12 [ 7] 1584 ld (de), a - 1585 ;src/main.c:454: dst[1] = hexch[val & 0xF]; - 000007E9 13 [ 6] 1586 inc de - 000007EA DD 7E 04 [19] 1587 ld a, 4 (ix) - 000007ED E6 0F [ 7] 1588 and a, #0x0f - 000007EF 6F [ 4] 1589 ld l, a - 000007F0 26 00 [ 7] 1590 ld h, #0x00 - 000007F2 09 [11] 1591 add hl, bc - 000007F3 7E [ 7] 1592 ld a, (hl) - 000007F4 12 [ 7] 1593 ld (de), a - 1594 ;src/main.c:455: } - 000007F5 DD E1 [14] 1595 pop ix - 000007F7 E1 [10] 1596 pop hl - 000007F8 33 [ 6] 1597 inc sp - 000007F9 E9 [ 4] 1598 jp (hl) - 000007FA 1599 _put_hex2_hexch_10000_132: - 000007FA 30 31 32 33 34 35 36 1600 .ascii "0123456789ABCDEF" + 0000088E 00 1707 .db 0x00 + 1708 ;src/main.c:515: void put_hex2(char *dst, u8 val) + 1709 ; --------------------------------- + 1710 ; Function put_hex2 + 1711 ; --------------------------------- + 0000088F 1712 _put_hex2:: + 0000088F DD E5 [15] 1713 push ix + 00000891 DD 21 00 00 [14] 1714 ld ix, #0 + 00000895 DD 39 [15] 1715 add ix, sp + 00000897 EB [ 4] 1716 ex de, hl + 1717 ;src/main.c:518: dst[0] = hexch[(val >> 4) & 0xF]; + 00000898 01rBBr08 [10] 1718 ld bc, #_put_hex2_hexch_10000_144+0 + 0000089B DD 7E 04 [19] 1719 ld a, 4 (ix) + 0000089E 07 [ 4] 1720 rlca + 0000089F 07 [ 4] 1721 rlca + 000008A0 07 [ 4] 1722 rlca + 000008A1 07 [ 4] 1723 rlca + 000008A2 E6 0F [ 7] 1724 and a, #0xf + 000008A4 6F [ 4] 1725 ld l, a + 000008A5 26 00 [ 7] 1726 ld h, #0x00 + 000008A7 09 [11] 1727 add hl, bc + 000008A8 7E [ 7] 1728 ld a, (hl) + 000008A9 12 [ 7] 1729 ld (de), a + 1730 ;src/main.c:519: dst[1] = hexch[val & 0xF]; + 000008AA 13 [ 6] 1731 inc de + 000008AB DD 7E 04 [19] 1732 ld a, 4 (ix) + 000008AE E6 0F [ 7] 1733 and a, #0x0f + 000008B0 6F [ 4] 1734 ld l, a + 000008B1 26 00 [ 7] 1735 ld h, #0x00 + 000008B3 09 [11] 1736 add hl, bc + 000008B4 7E [ 7] 1737 ld a, (hl) + 000008B5 12 [ 7] 1738 ld (de), a + 1739 ;src/main.c:520: } + 000008B6 DD E1 [14] 1740 pop ix + 000008B8 E1 [10] 1741 pop hl + 000008B9 33 [ 6] 1742 inc sp + 000008BA E9 [ 4] 1743 jp (hl) + 000008BB 1744 _put_hex2_hexch_10000_144: + 000008BB 30 31 32 33 34 35 36 1745 .ascii "0123456789ABCDEF" 37 38 39 41 42 43 44 45 46 - 0000080A 00 1601 .db 0x00 - 1602 ;src/main.c:457: void put_dec3(char *dst, u16 val) - 1603 ; --------------------------------- - 1604 ; Function put_dec3 - 1605 ; --------------------------------- - 0000080B 1606 _put_dec3:: - 0000080B DD E5 [15] 1607 push ix - 0000080D DD 21 00 00 [14] 1608 ld ix, #0 - 00000811 DD 39 [15] 1609 add ix, sp - 00000813 F5 [11] 1610 push af - 00000814 4D [ 4] 1611 ld c, l - 00000815 44 [ 4] 1612 ld b, h - 1613 ;src/main.c:459: dst[0] = '0' + (val / 100) % 10; - 00000816 E1 [10] 1614 pop hl - 00000817 D5 [11] 1615 push de - 00000818 C5 [11] 1616 push bc - 00000819 11 64 00 [10] 1617 ld de, #0x0064 - 0000081C DD 6E FE [19] 1618 ld l, -2 (ix) - 0000081F DD 66 FF [19] 1619 ld h, -1 (ix) - 00000822 CDr00r00 [17] 1620 call __divuint - 00000825 EB [ 4] 1621 ex de, hl - 00000826 11 0A 00 [10] 1622 ld de, #0x000a - 00000829 CDr00r00 [17] 1623 call __moduint - 0000082C C1 [10] 1624 pop bc - 0000082D 7B [ 4] 1625 ld a, e - 0000082E C6 30 [ 7] 1626 add a, #0x30 - 00000830 02 [ 7] 1627 ld (bc), a - 1628 ;src/main.c:460: dst[1] = '0' + (val / 10) % 10; - 00000831 69 [ 4] 1629 ld l, c - 00000832 60 [ 4] 1630 ld h, b - 00000833 23 [ 6] 1631 inc hl - 00000834 E5 [11] 1632 push hl - 00000835 C5 [11] 1633 push bc - 00000836 11 0A 00 [10] 1634 ld de, #0x000a - 00000839 DD 6E FE [19] 1635 ld l, -2 (ix) - 0000083C DD 66 FF [19] 1636 ld h, -1 (ix) - 0000083F CDr00r00 [17] 1637 call __divuint - 00000842 EB [ 4] 1638 ex de, hl - 00000843 11 0A 00 [10] 1639 ld de, #0x000a - 00000846 CDr00r00 [17] 1640 call __moduint - 00000849 C1 [10] 1641 pop bc - 0000084A E1 [10] 1642 pop hl - 0000084B 7B [ 4] 1643 ld a, e - 0000084C C6 30 [ 7] 1644 add a, #0x30 - 0000084E 77 [ 7] 1645 ld (hl), a - 1646 ;src/main.c:461: dst[2] = '0' + val % 10; - 0000084F 03 [ 6] 1647 inc bc - 00000850 03 [ 6] 1648 inc bc - 00000851 C5 [11] 1649 push bc - 00000852 11 0A 00 [10] 1650 ld de, #0x000a - 00000855 DD 6E FE [19] 1651 ld l, -2 (ix) - 00000858 DD 66 FF [19] 1652 ld h, -1 (ix) - 0000085B CDr00r00 [17] 1653 call __moduint - 0000085E C1 [10] 1654 pop bc - 0000085F 7B [ 4] 1655 ld a, e - 00000860 C6 30 [ 7] 1656 add a, #0x30 - 00000862 02 [ 7] 1657 ld (bc), a - 1658 ;src/main.c:462: } - 00000863 DD F9 [10] 1659 ld sp, ix - 00000865 DD E1 [14] 1660 pop ix - 00000867 C9 [10] 1661 ret - 1662 ;src/main.c:464: void put_time(char *dst, u32 sec) - 1663 ; --------------------------------- - 1664 ; Function put_time - 1665 ; --------------------------------- - 00000868 1666 _put_time:: - 00000868 DD E5 [15] 1667 push ix - 0000086A DD 21 00 00 [14] 1668 ld ix, #0 - 0000086E DD 39 [15] 1669 add ix, sp - 00000870 E5 [11] 1670 push hl - 1671 ;src/main.c:466: u8 m = (sec / 60) % 100; - 00000871 21 00 00 [10] 1672 ld hl, #0x0000 - 00000874 E5 [11] 1673 push hl - 00000875 2E 3C [ 7] 1674 ld l, #0x3c - 00000877 E5 [11] 1675 push hl - 00000878 DD 5E 04 [19] 1676 ld e, 4 (ix) - 0000087B DD 56 05 [19] 1677 ld d, 5 (ix) - 0000087E DD 6E 06 [19] 1678 ld l, 6 (ix) - 00000881 DD 66 07 [19] 1679 ld h, 7 (ix) - 00000884 CDr00r00 [17] 1680 call __divulong - 00000887 F1 [10] 1681 pop af - 00000888 F1 [10] 1682 pop af - 00000889 01 00 00 [10] 1683 ld bc, #0x0000 - 0000088C C5 [11] 1684 push bc - 0000088D 0E 64 [ 7] 1685 ld c, #0x64 - 0000088F C5 [11] 1686 push bc - 00000890 CDr00r00 [17] 1687 call __modulong - 00000893 F1 [10] 1688 pop af - 00000894 F1 [10] 1689 pop af - 00000895 4B [ 4] 1690 ld c, e - 1691 ;src/main.c:467: u8 s = sec % 60; - 00000896 C5 [11] 1692 push bc - 00000897 21 00 00 [10] 1693 ld hl, #0x0000 - 0000089A E5 [11] 1694 push hl - 0000089B 2E 3C [ 7] 1695 ld l, #0x3c - 0000089D E5 [11] 1696 push hl - 0000089E DD 5E 04 [19] 1697 ld e, 4 (ix) - 000008A1 DD 56 05 [19] 1698 ld d, 5 (ix) - 000008A4 DD 6E 06 [19] 1699 ld l, 6 (ix) - 000008A7 DD 66 07 [19] 1700 ld h, 7 (ix) - 000008AA CDr00r00 [17] 1701 call __modulong - 000008AD F1 [10] 1702 pop af - 000008AE F1 [10] 1703 pop af - 000008AF C1 [10] 1704 pop bc - 1705 ;src/main.c:469: dst[0] = '0' + (m / 10) % 10; - 000008B0 51 [ 4] 1706 ld d, c - 000008B1 D5 [11] 1707 push de - 000008B2 2E 0A [ 7] 1708 ld l, #0x0a - 000008B4 7A [ 4] 1709 ld a, d - 000008B5 CDr00r00 [17] 1710 call __divuchar - 000008B8 7B [ 4] 1711 ld a, e - 000008B9 2E 0A [ 7] 1712 ld l, #0x0a - 000008BB CDr00r00 [17] 1713 call __moduchar - 000008BE 7B [ 4] 1714 ld a, e - 000008BF D1 [10] 1715 pop de - 000008C0 C6 30 [ 7] 1716 add a, #0x30 - 000008C2 E1 [10] 1717 pop hl - 000008C3 E5 [11] 1718 push hl - 000008C4 77 [ 7] 1719 ld (hl), a - 1720 ;src/main.c:470: dst[1] = '0' + m % 10; - 000008C5 C1 [10] 1721 pop bc - 000008C6 C5 [11] 1722 push bc - 000008C7 03 [ 6] 1723 inc bc - 000008C8 C5 [11] 1724 push bc - 000008C9 D5 [11] 1725 push de - 000008CA 2E 0A [ 7] 1726 ld l, #0x0a - 000008CC 7A [ 4] 1727 ld a, d - 000008CD CDr00r00 [17] 1728 call __moduchar - 000008D0 7B [ 4] 1729 ld a, e - 000008D1 D1 [10] 1730 pop de - 000008D2 C1 [10] 1731 pop bc - 000008D3 C6 30 [ 7] 1732 add a, #0x30 - 000008D5 02 [ 7] 1733 ld (bc), a - 1734 ;src/main.c:471: dst[2] = ':'; - 000008D6 E1 [10] 1735 pop hl - 000008D7 E5 [11] 1736 push hl - 000008D8 23 [ 6] 1737 inc hl - 000008D9 23 [ 6] 1738 inc hl - 000008DA 36 3A [10] 1739 ld (hl), #0x3a - 1740 ;src/main.c:472: dst[3] = '0' + (s / 10) % 10; - 000008DC C1 [10] 1741 pop bc - 000008DD C5 [11] 1742 push bc - 000008DE 03 [ 6] 1743 inc bc - 000008DF 03 [ 6] 1744 inc bc - 000008E0 03 [ 6] 1745 inc bc - 000008E1 C5 [11] 1746 push bc - 000008E2 D5 [11] 1747 push de - 000008E3 2E 0A [ 7] 1748 ld l, #0x0a - 000008E5 7B [ 4] 1749 ld a, e - 000008E6 CDr00r00 [17] 1750 call __divuchar - 000008E9 7B [ 4] 1751 ld a, e - 000008EA 2E 0A [ 7] 1752 ld l, #0x0a - 000008EC CDr00r00 [17] 1753 call __moduchar - 000008EF 7B [ 4] 1754 ld a, e - 000008F0 D1 [10] 1755 pop de - 000008F1 C1 [10] 1756 pop bc - 000008F2 C6 30 [ 7] 1757 add a, #0x30 - 000008F4 02 [ 7] 1758 ld (bc), a - 1759 ;src/main.c:473: dst[4] = '0' + s % 10; - 000008F5 DD 7E FE [19] 1760 ld a, -2 (ix) - 000008F8 C6 04 [ 7] 1761 add a, #0x04 - 000008FA 4F [ 4] 1762 ld c, a - 000008FB DD 7E FF [19] 1763 ld a, -1 (ix) - 000008FE CE 00 [ 7] 1764 adc a, #0x00 - 00000900 47 [ 4] 1765 ld b, a - 00000901 C5 [11] 1766 push bc - 00000902 2E 0A [ 7] 1767 ld l, #0x0a - 00000904 7B [ 4] 1768 ld a, e - 00000905 CDr00r00 [17] 1769 call __moduchar - 00000908 7B [ 4] 1770 ld a, e - 00000909 C1 [10] 1771 pop bc - 0000090A C6 30 [ 7] 1772 add a, #0x30 - 0000090C 02 [ 7] 1773 ld (bc), a - 1774 ;src/main.c:474: } - 0000090D DD F9 [10] 1775 ld sp, ix - 0000090F DD E1 [14] 1776 pop ix - 00000911 E1 [10] 1777 pop hl - 00000912 F1 [10] 1778 pop af - 00000913 F1 [10] 1779 pop af - 00000914 E9 [ 4] 1780 jp (hl) - 1781 ;src/main.c:503: void xm_draw_stats_labels() - 1782 ; --------------------------------- - 1783 ; Function xm_draw_stats_labels - 1784 ; --------------------------------- - 00000915 1785 _xm_draw_stats_labels:: - 1786 ;src/main.c:507: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); - 00000915 21 09 00 [10] 1787 ld hl, #0x0009 - 00000918 E5 [11] 1788 push hl - 00000919 21 04 01 [10] 1789 ld hl, #0x104 - 0000091C E5 [11] 1790 push hl - 0000091D 11rB4r09 [10] 1791 ld de, #___str_12 - 00000920 21r64r02 [10] 1792 ld hl, #_win_xm - 00000923 CDr00r00 [17] 1793 call _wc_prsrw - 1794 ;src/main.c:508: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); - 00000926 21 07 00 [10] 1795 ld hl, #0x0007 - 00000929 E5 [11] 1796 push hl - 0000092A 21 04 0C [10] 1797 ld hl, #0xc04 - 0000092D E5 [11] 1798 push hl - 0000092E 11rBEr09 [10] 1799 ld de, #___str_13 - 00000931 21r64r02 [10] 1800 ld hl, #_win_xm - 00000934 CDr00r00 [17] 1801 call _wc_prsrw - 1802 ;src/main.c:509: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); - 00000937 21 06 00 [10] 1803 ld hl, #0x0006 - 0000093A E5 [11] 1804 push hl - 0000093B 21 04 15 [10] 1805 ld hl, #0x1504 - 0000093E E5 [11] 1806 push hl - 0000093F 11rC6r09 [10] 1807 ld de, #___str_14 - 00000942 21r64r02 [10] 1808 ld hl, #_win_xm - 00000945 CDr00r00 [17] 1809 call _wc_prsrw - 1810 ;src/main.c:511: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); - 00000948 21 05 00 [10] 1811 ld hl, #0x0005 - 0000094B E5 [11] 1812 push hl - 0000094C 21 06 01 [10] 1813 ld hl, #0x106 - 0000094F E5 [11] 1814 push hl - 00000950 11rCDr09 [10] 1815 ld de, #___str_15 - 00000953 21r64r02 [10] 1816 ld hl, #_win_xm - 00000956 CDr00r00 [17] 1817 call _wc_prsrw - 1818 ;src/main.c:512: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); - 00000959 21 03 00 [10] 1819 ld hl, #0x0003 - 0000095C E5 [11] 1820 push hl - 0000095D 21 06 0C [10] 1821 ld hl, #0xc06 - 00000960 E5 [11] 1822 push hl - 00000961 11rD3r09 [10] 1823 ld de, #___str_16 - 00000964 21r64r02 [10] 1824 ld hl, #_win_xm - 00000967 CDr00r00 [17] 1825 call _wc_prsrw - 1826 ;src/main.c:514: for (i = 0; i < BAR_WIDTH; i++) - 0000096A 11r6Cr10 [10] 1827 ld de, #_barbuf+0 - 0000096D 0E 00 [ 7] 1828 ld c, #0x00 - 0000096F 1829 00103$: - 1830 ;src/main.c:515: barbuf[i] = ' '; - 0000096F 69 [ 4] 1831 ld l, c - 00000970 26 00 [ 7] 1832 ld h, #0x00 - 00000972 19 [11] 1833 add hl, de - 00000973 36 20 [10] 1834 ld (hl), #0x20 - 1835 ;src/main.c:514: for (i = 0; i < BAR_WIDTH; i++) - 00000975 0C [ 4] 1836 inc c - 00000976 79 [ 4] 1837 ld a, c - 00000977 D6 20 [ 7] 1838 sub a, #0x20 - 00000979 38 F4 [12] 1839 jr c, 00103$ - 1840 ;src/main.c:516: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); - 1841 ;src/main.c:507: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); - 1842 ;src/main.c:516: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); - 0000097B 21 20 00 [10] 1843 ld hl, #0x0020 - 0000097E E5 [11] 1844 push hl - 0000097F 21 08 04 [10] 1845 ld hl, #0x408 - 00000982 E5 [11] 1846 push hl - 00000983 21r64r02 [10] 1847 ld hl, #_win_xm - 00000986 CDr00r00 [17] 1848 call _wc_prsrw - 1849 ;src/main.c:518: bar_attr_ofs = (wc_gadrw(&win_xm, ROW_BAR, BAR_X) & 0x3FFF) | 0x0080; - 00000989 21 08 04 [10] 1850 ld hl, #0x408 - 0000098C E5 [11] 1851 push hl - 0000098D 21r64r02 [10] 1852 ld hl, #_win_xm - 00000990 CDr00r00 [17] 1853 call _wc_gadrw - 00000993 7A [ 4] 1854 ld a, d - 00000994 E6 3F [ 7] 1855 and a, #0x3f - 00000996 57 [ 4] 1856 ld d, a - 00000997 CB FB [ 8] 1857 set 7, e - 00000999 ED 53r8Cr10 [20] 1858 ld (_bar_attr_ofs), de - 1859 ;src/main.c:520: for (i = 0; i < BAR_WIDTH; i++) - 0000099D 0E 00 [ 7] 1860 ld c, #0x00 - 0000099F 1861 00105$: - 1862 ;src/main.c:521: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = ATTR_BAR_EMPTY; - 0000099F 2Ar8Cr10 [16] 1863 ld hl, (_bar_attr_ofs) - 000009A2 5D [ 4] 1864 ld e, l - 000009A3 7C [ 4] 1865 ld a, h - 000009A4 C6 C0 [ 7] 1866 add a, #0xc0 - 000009A6 57 [ 4] 1867 ld d, a - 000009A7 69 [ 4] 1868 ld l, c - 000009A8 26 00 [ 7] 1869 ld h, #0x00 - 000009AA 19 [11] 1870 add hl, de - 000009AB 36 07 [10] 1871 ld (hl), #0x07 - 1872 ;src/main.c:520: for (i = 0; i < BAR_WIDTH; i++) - 000009AD 0C [ 4] 1873 inc c - 000009AE 79 [ 4] 1874 ld a, c - 000009AF D6 20 [ 7] 1875 sub a, #0x20 - 000009B1 38 EC [12] 1876 jr c, 00105$ - 1877 ;src/main.c:522: } - 000009B3 C9 [10] 1878 ret - 000009B4 1879 ___str_12: - 000009B4 50 61 74 74 65 72 6E 1880 .ascii "Pattern:#" + 000008CB 00 1746 .db 0x00 + 1747 ;src/main.c:522: void put_dec3(char *dst, u16 val) + 1748 ; --------------------------------- + 1749 ; Function put_dec3 + 1750 ; --------------------------------- + 000008CC 1751 _put_dec3:: + 000008CC DD E5 [15] 1752 push ix + 000008CE DD 21 00 00 [14] 1753 ld ix, #0 + 000008D2 DD 39 [15] 1754 add ix, sp + 000008D4 F5 [11] 1755 push af + 000008D5 4D [ 4] 1756 ld c, l + 000008D6 44 [ 4] 1757 ld b, h + 1758 ;src/main.c:524: dst[0] = '0' + (val / 100) % 10; + 000008D7 E1 [10] 1759 pop hl + 000008D8 D5 [11] 1760 push de + 000008D9 C5 [11] 1761 push bc + 000008DA 11 64 00 [10] 1762 ld de, #0x0064 + 000008DD DD 6E FE [19] 1763 ld l, -2 (ix) + 000008E0 DD 66 FF [19] 1764 ld h, -1 (ix) + 000008E3 CDr00r00 [17] 1765 call __divuint + 000008E6 EB [ 4] 1766 ex de, hl + 000008E7 11 0A 00 [10] 1767 ld de, #0x000a + 000008EA CDr00r00 [17] 1768 call __moduint + 000008ED C1 [10] 1769 pop bc + 000008EE 7B [ 4] 1770 ld a, e + 000008EF C6 30 [ 7] 1771 add a, #0x30 + 000008F1 02 [ 7] 1772 ld (bc), a + 1773 ;src/main.c:525: dst[1] = '0' + (val / 10) % 10; + 000008F2 69 [ 4] 1774 ld l, c + 000008F3 60 [ 4] 1775 ld h, b + 000008F4 23 [ 6] 1776 inc hl + 000008F5 E5 [11] 1777 push hl + 000008F6 C5 [11] 1778 push bc + 000008F7 11 0A 00 [10] 1779 ld de, #0x000a + 000008FA DD 6E FE [19] 1780 ld l, -2 (ix) + 000008FD DD 66 FF [19] 1781 ld h, -1 (ix) + 00000900 CDr00r00 [17] 1782 call __divuint + 00000903 EB [ 4] 1783 ex de, hl + 00000904 11 0A 00 [10] 1784 ld de, #0x000a + 00000907 CDr00r00 [17] 1785 call __moduint + 0000090A C1 [10] 1786 pop bc + 0000090B E1 [10] 1787 pop hl + 0000090C 7B [ 4] 1788 ld a, e + 0000090D C6 30 [ 7] 1789 add a, #0x30 + 0000090F 77 [ 7] 1790 ld (hl), a + 1791 ;src/main.c:526: dst[2] = '0' + val % 10; + 00000910 03 [ 6] 1792 inc bc + 00000911 03 [ 6] 1793 inc bc + 00000912 C5 [11] 1794 push bc + 00000913 11 0A 00 [10] 1795 ld de, #0x000a + 00000916 DD 6E FE [19] 1796 ld l, -2 (ix) + 00000919 DD 66 FF [19] 1797 ld h, -1 (ix) + 0000091C CDr00r00 [17] 1798 call __moduint + 0000091F C1 [10] 1799 pop bc + 00000920 7B [ 4] 1800 ld a, e + 00000921 C6 30 [ 7] 1801 add a, #0x30 + 00000923 02 [ 7] 1802 ld (bc), a + 1803 ;src/main.c:527: } + 00000924 DD F9 [10] 1804 ld sp, ix + 00000926 DD E1 [14] 1805 pop ix + 00000928 C9 [10] 1806 ret + 1807 ;src/main.c:529: void put_time(char *dst, u32 sec) + 1808 ; --------------------------------- + 1809 ; Function put_time + 1810 ; --------------------------------- + 00000929 1811 _put_time:: + 00000929 DD E5 [15] 1812 push ix + 0000092B DD 21 00 00 [14] 1813 ld ix, #0 + 0000092F DD 39 [15] 1814 add ix, sp + 00000931 E5 [11] 1815 push hl + 1816 ;src/main.c:531: u8 m = (sec / 60) % 100; + 00000932 21 00 00 [10] 1817 ld hl, #0x0000 + 00000935 E5 [11] 1818 push hl + 00000936 2E 3C [ 7] 1819 ld l, #0x3c + 00000938 E5 [11] 1820 push hl + 00000939 DD 5E 04 [19] 1821 ld e, 4 (ix) + 0000093C DD 56 05 [19] 1822 ld d, 5 (ix) + 0000093F DD 6E 06 [19] 1823 ld l, 6 (ix) + 00000942 DD 66 07 [19] 1824 ld h, 7 (ix) + 00000945 CDr00r00 [17] 1825 call __divulong + 00000948 F1 [10] 1826 pop af + 00000949 F1 [10] 1827 pop af + 0000094A 01 00 00 [10] 1828 ld bc, #0x0000 + 0000094D C5 [11] 1829 push bc + 0000094E 0E 64 [ 7] 1830 ld c, #0x64 + 00000950 C5 [11] 1831 push bc + 00000951 CDr00r00 [17] 1832 call __modulong + 00000954 F1 [10] 1833 pop af + 00000955 F1 [10] 1834 pop af + 00000956 4B [ 4] 1835 ld c, e + 1836 ;src/main.c:532: u8 s = sec % 60; + 00000957 C5 [11] 1837 push bc + 00000958 21 00 00 [10] 1838 ld hl, #0x0000 + 0000095B E5 [11] 1839 push hl + 0000095C 2E 3C [ 7] 1840 ld l, #0x3c + 0000095E E5 [11] 1841 push hl + 0000095F DD 5E 04 [19] 1842 ld e, 4 (ix) + 00000962 DD 56 05 [19] 1843 ld d, 5 (ix) + 00000965 DD 6E 06 [19] 1844 ld l, 6 (ix) + 00000968 DD 66 07 [19] 1845 ld h, 7 (ix) + 0000096B CDr00r00 [17] 1846 call __modulong + 0000096E F1 [10] 1847 pop af + 0000096F F1 [10] 1848 pop af + 00000970 C1 [10] 1849 pop bc + 1850 ;src/main.c:534: dst[0] = '0' + (m / 10) % 10; + 00000971 51 [ 4] 1851 ld d, c + 00000972 D5 [11] 1852 push de + 00000973 2E 0A [ 7] 1853 ld l, #0x0a + 00000975 7A [ 4] 1854 ld a, d + 00000976 CDr00r00 [17] 1855 call __divuchar + 00000979 7B [ 4] 1856 ld a, e + 0000097A 2E 0A [ 7] 1857 ld l, #0x0a + 0000097C CDr00r00 [17] 1858 call __moduchar + 0000097F 7B [ 4] 1859 ld a, e + 00000980 D1 [10] 1860 pop de + 00000981 C6 30 [ 7] 1861 add a, #0x30 + 00000983 E1 [10] 1862 pop hl + 00000984 E5 [11] 1863 push hl + 00000985 77 [ 7] 1864 ld (hl), a + 1865 ;src/main.c:535: dst[1] = '0' + m % 10; + 00000986 C1 [10] 1866 pop bc + 00000987 C5 [11] 1867 push bc + 00000988 03 [ 6] 1868 inc bc + 00000989 C5 [11] 1869 push bc + 0000098A D5 [11] 1870 push de + 0000098B 2E 0A [ 7] 1871 ld l, #0x0a + 0000098D 7A [ 4] 1872 ld a, d + 0000098E CDr00r00 [17] 1873 call __moduchar + 00000991 7B [ 4] 1874 ld a, e + 00000992 D1 [10] 1875 pop de + 00000993 C1 [10] 1876 pop bc + 00000994 C6 30 [ 7] 1877 add a, #0x30 + 00000996 02 [ 7] 1878 ld (bc), a + 1879 ;src/main.c:536: dst[2] = ':'; + 00000997 E1 [10] 1880 pop hl + 00000998 E5 [11] 1881 push hl + 00000999 23 [ 6] 1882 inc hl + 0000099A 23 [ 6] 1883 inc hl + 0000099B 36 3A [10] 1884 ld (hl), #0x3a + 1885 ;src/main.c:537: dst[3] = '0' + (s / 10) % 10; + 0000099D C1 [10] 1886 pop bc + 0000099E C5 [11] 1887 push bc + 0000099F 03 [ 6] 1888 inc bc + 000009A0 03 [ 6] 1889 inc bc + 000009A1 03 [ 6] 1890 inc bc + 000009A2 C5 [11] 1891 push bc + 000009A3 D5 [11] 1892 push de + 000009A4 2E 0A [ 7] 1893 ld l, #0x0a + 000009A6 7B [ 4] 1894 ld a, e + 000009A7 CDr00r00 [17] 1895 call __divuchar + 000009AA 7B [ 4] 1896 ld a, e + 000009AB 2E 0A [ 7] 1897 ld l, #0x0a + 000009AD CDr00r00 [17] 1898 call __moduchar + 000009B0 7B [ 4] 1899 ld a, e + 000009B1 D1 [10] 1900 pop de + 000009B2 C1 [10] 1901 pop bc + 000009B3 C6 30 [ 7] 1902 add a, #0x30 + 000009B5 02 [ 7] 1903 ld (bc), a + 1904 ;src/main.c:538: dst[4] = '0' + s % 10; + 000009B6 DD 7E FE [19] 1905 ld a, -2 (ix) + 000009B9 C6 04 [ 7] 1906 add a, #0x04 + 000009BB 4F [ 4] 1907 ld c, a + 000009BC DD 7E FF [19] 1908 ld a, -1 (ix) + 000009BF CE 00 [ 7] 1909 adc a, #0x00 + 000009C1 47 [ 4] 1910 ld b, a + 000009C2 C5 [11] 1911 push bc + 000009C3 2E 0A [ 7] 1912 ld l, #0x0a + 000009C5 7B [ 4] 1913 ld a, e + 000009C6 CDr00r00 [17] 1914 call __moduchar + 000009C9 7B [ 4] 1915 ld a, e + 000009CA C1 [10] 1916 pop bc + 000009CB C6 30 [ 7] 1917 add a, #0x30 + 000009CD 02 [ 7] 1918 ld (bc), a + 1919 ;src/main.c:539: } + 000009CE DD F9 [10] 1920 ld sp, ix + 000009D0 DD E1 [14] 1921 pop ix + 000009D2 E1 [10] 1922 pop hl + 000009D3 F1 [10] 1923 pop af + 000009D4 F1 [10] 1924 pop af + 000009D5 E9 [ 4] 1925 jp (hl) + 1926 ;src/main.c:568: void xm_draw_stats_labels() + 1927 ; --------------------------------- + 1928 ; Function xm_draw_stats_labels + 1929 ; --------------------------------- + 000009D6 1930 _xm_draw_stats_labels:: + 1931 ;src/main.c:572: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); + 000009D6 21 09 00 [10] 1932 ld hl, #0x0009 + 000009D9 E5 [11] 1933 push hl + 000009DA 21 04 01 [10] 1934 ld hl, #0x104 + 000009DD E5 [11] 1935 push hl + 000009DE 11r75r0A [10] 1936 ld de, #___str_12 + 000009E1 21r32r10 [10] 1937 ld hl, #_win_xm + 000009E4 CDr00r00 [17] 1938 call _wc_prsrw + 1939 ;src/main.c:573: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); + 000009E7 21 07 00 [10] 1940 ld hl, #0x0007 + 000009EA E5 [11] 1941 push hl + 000009EB 21 04 0C [10] 1942 ld hl, #0xc04 + 000009EE E5 [11] 1943 push hl + 000009EF 11r7Fr0A [10] 1944 ld de, #___str_13 + 000009F2 21r32r10 [10] 1945 ld hl, #_win_xm + 000009F5 CDr00r00 [17] 1946 call _wc_prsrw + 1947 ;src/main.c:574: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); + 000009F8 21 06 00 [10] 1948 ld hl, #0x0006 + 000009FB E5 [11] 1949 push hl + 000009FC 21 04 15 [10] 1950 ld hl, #0x1504 + 000009FF E5 [11] 1951 push hl + 00000A00 11r87r0A [10] 1952 ld de, #___str_14 + 00000A03 21r32r10 [10] 1953 ld hl, #_win_xm + 00000A06 CDr00r00 [17] 1954 call _wc_prsrw + 1955 ;src/main.c:576: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); + 00000A09 21 05 00 [10] 1956 ld hl, #0x0005 + 00000A0C E5 [11] 1957 push hl + 00000A0D 21 06 01 [10] 1958 ld hl, #0x106 + 00000A10 E5 [11] 1959 push hl + 00000A11 11r8Er0A [10] 1960 ld de, #___str_15 + 00000A14 21r32r10 [10] 1961 ld hl, #_win_xm + 00000A17 CDr00r00 [17] 1962 call _wc_prsrw + 1963 ;src/main.c:577: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); + 00000A1A 21 03 00 [10] 1964 ld hl, #0x0003 + 00000A1D E5 [11] 1965 push hl + 00000A1E 21 06 0C [10] 1966 ld hl, #0xc06 + 00000A21 E5 [11] 1967 push hl + 00000A22 11r94r0A [10] 1968 ld de, #___str_16 + 00000A25 21r32r10 [10] 1969 ld hl, #_win_xm + 00000A28 CDr00r00 [17] 1970 call _wc_prsrw + 1971 ;src/main.c:579: for (i = 0; i < BAR_WIDTH; i++) + 00000A2B 11r90r10 [10] 1972 ld de, #_barbuf+0 + 00000A2E 0E 00 [ 7] 1973 ld c, #0x00 + 00000A30 1974 00103$: + 1975 ;src/main.c:580: barbuf[i] = ' '; + 00000A30 69 [ 4] 1976 ld l, c + 00000A31 26 00 [ 7] 1977 ld h, #0x00 + 00000A33 19 [11] 1978 add hl, de + 00000A34 36 20 [10] 1979 ld (hl), #0x20 + 1980 ;src/main.c:579: for (i = 0; i < BAR_WIDTH; i++) + 00000A36 0C [ 4] 1981 inc c + 00000A37 79 [ 4] 1982 ld a, c + 00000A38 D6 20 [ 7] 1983 sub a, #0x20 + 00000A3A 38 F4 [12] 1984 jr c, 00103$ + 1985 ;src/main.c:581: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); + 1986 ;src/main.c:572: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); + 1987 ;src/main.c:581: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); + 00000A3C 21 20 00 [10] 1988 ld hl, #0x0020 + 00000A3F E5 [11] 1989 push hl + 00000A40 21 08 04 [10] 1990 ld hl, #0x408 + 00000A43 E5 [11] 1991 push hl + 00000A44 21r32r10 [10] 1992 ld hl, #_win_xm + 00000A47 CDr00r00 [17] 1993 call _wc_prsrw + 1994 ;src/main.c:583: bar_attr_ofs = (wc_gadrw(&win_xm, ROW_BAR, BAR_X) & 0x3FFF) | 0x0080; + 00000A4A 21 08 04 [10] 1995 ld hl, #0x408 + 00000A4D E5 [11] 1996 push hl + 00000A4E 21r32r10 [10] 1997 ld hl, #_win_xm + 00000A51 CDr00r00 [17] 1998 call _wc_gadrw + 00000A54 7A [ 4] 1999 ld a, d + 00000A55 E6 3F [ 7] 2000 and a, #0x3f + 00000A57 57 [ 4] 2001 ld d, a + 00000A58 CB FB [ 8] 2002 set 7, e + 00000A5A ED 53rB0r10 [20] 2003 ld (_bar_attr_ofs), de + 2004 ;src/main.c:585: for (i = 0; i < BAR_WIDTH; i++) + 00000A5E 0E 00 [ 7] 2005 ld c, #0x00 + 00000A60 2006 00105$: + 2007 ;src/main.c:586: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = ATTR_BAR_EMPTY; + 00000A60 2ArB0r10 [16] 2008 ld hl, (_bar_attr_ofs) + 00000A63 5D [ 4] 2009 ld e, l + 00000A64 7C [ 4] 2010 ld a, h + 00000A65 C6 C0 [ 7] 2011 add a, #0xc0 + 00000A67 57 [ 4] 2012 ld d, a + 00000A68 69 [ 4] 2013 ld l, c + 00000A69 26 00 [ 7] 2014 ld h, #0x00 + 00000A6B 19 [11] 2015 add hl, de + 00000A6C 36 07 [10] 2016 ld (hl), #0x07 + 2017 ;src/main.c:585: for (i = 0; i < BAR_WIDTH; i++) + 00000A6E 0C [ 4] 2018 inc c + 00000A6F 79 [ 4] 2019 ld a, c + 00000A70 D6 20 [ 7] 2020 sub a, #0x20 + 00000A72 38 EC [12] 2021 jr c, 00105$ + 2022 ;src/main.c:587: } + 00000A74 C9 [10] 2023 ret + 00000A75 2024 ___str_12: + 00000A75 50 61 74 74 65 72 6E 2025 .ascii "Pattern:#" 3A 23 - 000009BD 00 1881 .db 0x00 - 000009BE 1882 ___str_13: - 000009BE 20 20 52 6F 77 3A 23 1883 .ascii " Row:#" - 000009C5 00 1884 .db 0x00 - 000009C6 1885 ___str_14: - 000009C6 20 20 42 50 4D 3A 1886 .ascii " BPM:" - 000009CC 00 1887 .db 0x00 - 000009CD 1888 ___str_15: - 000009CD 54 69 6D 65 3A 1889 .ascii "Time:" - 000009D2 00 1890 .db 0x00 - 000009D3 1891 ___str_16: - 000009D3 20 2F 20 1892 .ascii " / " - 000009D6 00 1893 .db 0x00 - 1894 ;src/main.c:524: void draw_progress_bar(u32 samples, u32 total) - 1895 ; --------------------------------- - 1896 ; Function draw_progress_bar - 1897 ; --------------------------------- - 000009D7 1898 _draw_progress_bar:: - 000009D7 DD E5 [15] 1899 push ix - 000009D9 DD 21 00 00 [14] 1900 ld ix, #0 - 000009DD DD 39 [15] 1901 add ix, sp - 000009DF 4B [ 4] 1902 ld c, e - 000009E0 42 [ 4] 1903 ld b, d - 000009E1 EB [ 4] 1904 ex de, hl - 1905 ;src/main.c:528: if (total) - 000009E2 DD 7E 07 [19] 1906 ld a, 7 (ix) - 000009E5 DD B6 06 [19] 1907 or a, 6 (ix) - 000009E8 DD B6 05 [19] 1908 or a, 5 (ix) - 000009EB DD B6 04 [19] 1909 or a, 4 (ix) - 000009EE 28 30 [12] 1910 jr z, 00104$ - 1911 ;src/main.c:530: filled = (u16)(((u32)samples * BAR_WIDTH) / total); - 000009F0 69 [ 4] 1912 ld l, c - 000009F1 60 [ 4] 1913 ld h, b - 000009F2 3E 05 [ 7] 1914 ld a, #0x05 - 000009F4 1915 00146$: - 000009F4 29 [11] 1916 add hl, hl - 000009F5 CB 13 [ 8] 1917 rl e - 000009F7 CB 12 [ 8] 1918 rl d - 000009F9 3D [ 4] 1919 dec a - 000009FA 20 F8 [12] 1920 jr nz, 00146$ - 000009FC DD 4E 06 [19] 1921 ld c, 6 (ix) - 000009FF DD 46 07 [19] 1922 ld b, 7 (ix) - 00000A02 C5 [11] 1923 push bc - 00000A03 DD 4E 04 [19] 1924 ld c, 4 (ix) - 00000A06 DD 46 05 [19] 1925 ld b, 5 (ix) - 00000A09 C5 [11] 1926 push bc - 00000A0A EB [ 4] 1927 ex de, hl - 00000A0B CDr00r00 [17] 1928 call __divulong - 00000A0E F1 [10] 1929 pop af - 00000A0F F1 [10] 1930 pop af - 1931 ;src/main.c:531: if (filled > BAR_WIDTH) - 00000A10 4B [ 4] 1932 ld c,e - 00000A11 42 [ 4] 1933 ld b,d - 00000A12 3E 20 [ 7] 1934 ld a, #0x20 - 00000A14 BB [ 4] 1935 cp a, e - 00000A15 3E 00 [ 7] 1936 ld a, #0x00 - 00000A17 9A [ 4] 1937 sbc a, d - 00000A18 30 09 [12] 1938 jr nc, 00120$ - 1939 ;src/main.c:532: filled = BAR_WIDTH; - 00000A1A 01 20 00 [10] 1940 ld bc, #0x0020 - 00000A1D C3r23r0A [10] 1941 jp 00120$ - 00000A20 1942 00104$: - 1943 ;src/main.c:535: filled = 0; // total length unknown (measurement timed out) - show empty - 00000A20 01 00 00 [10] 1944 ld bc, #0x0000 - 1945 ;src/main.c:537: for (i = 0; i < BAR_WIDTH; i++) - 00000A23 1946 00120$: - 00000A23 11 00 00 [10] 1947 ld de, #0x0000 - 00000A26 1948 00107$: - 1949 ;src/main.c:538: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = (i < filled) ? ATTR_BAR_FILLED : ATTR_BAR_EMPTY; - 00000A26 2Ar8Cr10 [16] 1950 ld hl, (_bar_attr_ofs) - 00000A29 7C [ 4] 1951 ld a, h - 00000A2A C6 C0 [ 7] 1952 add a, #0xc0 - 00000A2C 67 [ 4] 1953 ld h, a - 00000A2D 19 [11] 1954 add hl, de - 00000A2E 7B [ 4] 1955 ld a, e - 00000A2F 91 [ 4] 1956 sub a, c - 00000A30 7A [ 4] 1957 ld a, d - 00000A31 98 [ 4] 1958 sbc a, b - 00000A32 30 05 [12] 1959 jr nc, 00111$ - 00000A34 3E 40 [ 7] 1960 ld a, #0x40 - 00000A36 C3r3Br0A [10] 1961 jp 00112$ - 00000A39 1962 00111$: - 00000A39 3E 07 [ 7] 1963 ld a, #0x07 - 00000A3B 1964 00112$: - 00000A3B 77 [ 7] 1965 ld (hl), a - 1966 ;src/main.c:537: for (i = 0; i < BAR_WIDTH; i++) - 00000A3C 13 [ 6] 1967 inc de - 00000A3D 6B [ 4] 1968 ld l, e - 00000A3E 62 [ 4] 1969 ld h, d - 00000A3F 7D [ 4] 1970 ld a, l - 00000A40 D6 20 [ 7] 1971 sub a, #0x20 - 00000A42 7C [ 4] 1972 ld a, h - 00000A43 DE 00 [ 7] 1973 sbc a, #0x00 - 00000A45 38 DF [12] 1974 jr c, 00107$ - 1975 ;src/main.c:539: } - 00000A47 DD E1 [14] 1976 pop ix - 00000A49 E1 [10] 1977 pop hl - 00000A4A F1 [10] 1978 pop af - 00000A4B F1 [10] 1979 pop af - 00000A4C E9 [ 4] 1980 jp (hl) - 1981 ;src/main.c:541: void xm_update_info() - 1982 ; --------------------------------- - 1983 ; Function xm_update_info - 1984 ; --------------------------------- - 00000A4D 1985 _xm_update_info:: - 00000A4D DD E5 [15] 1986 push ix - 00000A4F DD 21 00 00 [14] 1987 ld ix, #0 - 00000A53 DD 39 [15] 1988 add ix, sp - 00000A55 21 F8 FF [10] 1989 ld hl, #-8 - 00000A58 39 [11] 1990 add hl, sp - 00000A59 F9 [ 6] 1991 ld sp, hl - 1992 ;src/main.c:547: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); - 00000A5A 3Ar30r10 [13] 1993 ld a, (_xm_handle) - 00000A5D 6F [ 4] 1994 ld l, a - 00000A5E 3E 0B [ 7] 1995 ld a, #0x0b - 00000A60 CDrD1r00 [17] 1996 call _esp_wr_reg8 - 1997 ;src/main.c:548: esp_cmd(ESP_CMD_TRACK_GET_INFO); - 00000A63 3E A8 [ 7] 1998 ld a, #0xa8 - 00000A65 CDr05r00 [17] 1999 call _esp_cmd - 2000 ;src/main.c:549: esp_wait_busy(50); // 1s - a plain info read should be near-instant - 00000A68 21 32 00 [10] 2001 ld hl, #0x0032 - 00000A6B CDrE5r01 [17] 2002 call _esp_wait_busy - 2003 ;src/main.c:554: status = esp_rd_reg8(ESP_REG_TRACK_STATUS); - 00000A6E 3E 28 [ 7] 2004 ld a, #0x28 - 00000A70 CDr1Er00 [17] 2005 call _esp_rd_reg8 - 00000A73 DD 77 FF [19] 2006 ld -1 (ix), a - 2007 ;src/main.c:555: if (last_track_status == TRACK_OBJ_ST_PLAYING && status == TRACK_OBJ_ST_STOPPED) - 00000A76 3Ar31r10 [13] 2008 ld a, (_last_track_status) - 00000A79 D6 21 [ 7] 2009 sub a, #0x21 - 00000A7B 20 1D [12] 2010 jr nz, 00102$ - 00000A7D DD 7E FF [19] 2011 ld a, -1 (ix) - 00000A80 D6 20 [ 7] 2012 sub a, #0x20 - 00000A82 20 16 [12] 2013 jr nz, 00102$ - 2014 ;src/main.c:557: esp_cmd(ESP_CMD_KILL_OBJECTS); - 00000A84 3E E4 [ 7] 2015 ld a, #0xe4 - 00000A86 CDr05r00 [17] 2016 call _esp_cmd - 2017 ;src/main.c:558: esp_wait_busy(100); - 00000A89 21 64 00 [10] 2018 ld hl, #0x0064 - 00000A8C CDrE5r01 [17] 2019 call _esp_wait_busy - 2020 ;src/main.c:559: wc_rresb(&win_xm); - 00000A8F 21r64r02 [10] 2021 ld hl, #_win_xm - 00000A92 CDr00r00 [17] 2022 call _wc_rresb - 2023 ;src/main.c:560: wc_exit(WC_NEXT_FILE); - 00000A95 3E 02 [ 7] 2024 ld a, #0x02 - 00000A97 CDr00r00 [17] 2025 call _wc_exit - 00000A9A 2026 00102$: - 2027 ;src/main.c:562: last_track_status = status; - 00000A9A DD 7E FF [19] 2028 ld a, -1 (ix) - 00000A9D 32r31r10 [13] 2029 ld (#_last_track_status), a - 2030 ;src/main.c:564: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); - 00000AA0 3E 2B [ 7] 2031 ld a, #0x2b - 00000AA2 CDr1Er00 [17] 2032 call _esp_rd_reg8 - 00000AA5 DD 77 FA [19] 2033 ld -6 (ix), a - 2034 ;src/main.c:565: row = esp_rd_reg8(ESP_REG_TRACK_ROW); - 00000AA8 3E 2C [ 7] 2035 ld a, #0x2c - 00000AAA CDr1Er00 [17] 2036 call _esp_rd_reg8 - 00000AAD DD 77 FB [19] 2037 ld -5 (ix), a - 2038 ;src/main.c:566: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); - 00000AB0 3E 02 [ 7] 2039 ld a, #0x02 - 00000AB2 F5 [11] 2040 push af - 00000AB3 33 [ 6] 2041 inc sp - 00000AB4 21 01 00 [10] 2042 ld hl, #1 - 00000AB7 39 [11] 2043 add hl, sp - 00000AB8 EB [ 4] 2044 ex de, hl - 00000AB9 3E 31 [ 7] 2045 ld a, #0x31 - 00000ABB CDrA5r00 [17] 2046 call _esp_rd_regs - 2047 ;src/main.c:567: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES); - 00000ABE 3E 2D [ 7] 2048 ld a, #0x2d - 00000AC0 CDr37r00 [17] 2049 call _esp_rd_reg32 - 00000AC3 DD 73 FC [19] 2050 ld -4 (ix), e - 00000AC6 DD 72 FD [19] 2051 ld -3 (ix), d - 00000AC9 DD 75 FE [19] 2052 ld -2 (ix), l - 00000ACC DD 74 FF [19] 2053 ld -1 (ix), h - 2054 ;src/main.c:569: if (!total_samples) - 00000ACF 3Ar2Fr10 [13] 2055 ld a, (_total_samples+3) - 00000AD2 FD 21r2Cr10 [14] 2056 ld iy, #_total_samples - 00000AD6 FD B6 02 [19] 2057 or a, 2 (iy) - 00000AD9 FD B6 01 [19] 2058 or a, 1 (iy) - 00000ADC FD B6 00 [19] 2059 or a, 0 (iy) - 00000ADF 20 0C [12] 2060 jr nz, 00105$ - 2061 ;src/main.c:570: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES); - 00000AE1 3E 36 [ 7] 2062 ld a, #0x36 - 00000AE3 CDr37r00 [17] 2063 call _esp_rd_reg32 - 00000AE6 ED 53r2Cr10 [20] 2064 ld (_total_samples), de - 00000AEA 22r2Er10 [16] 2065 ld (_total_samples + 2), hl - 00000AED 2066 00105$: - 2067 ;src/main.c:572: put_hex2(hexbuf, pattern); - 00000AED DD 7E FA [19] 2068 ld a, -6 (ix) - 00000AF0 F5 [11] 2069 push af - 00000AF1 33 [ 6] 2070 inc sp - 00000AF2 21r62r10 [10] 2071 ld hl, #_hexbuf - 00000AF5 CDrCEr07 [17] 2072 call _put_hex2 - 2073 ;src/main.c:573: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 10, 2, ATTR_VALUE); - 00000AF8 3E 71 [ 7] 2074 ld a, #0x71 - 00000AFA F5 [11] 2075 push af - 00000AFB 33 [ 6] 2076 inc sp - 00000AFC 21 02 00 [10] 2077 ld hl, #0x0002 - 00000AFF E5 [11] 2078 push hl - 00000B00 21 04 0A [10] 2079 ld hl, #0xa04 - 00000B03 E5 [11] 2080 push hl - 00000B04 11r62r10 [10] 2081 ld de, #_hexbuf - 00000B07 21r64r02 [10] 2082 ld hl, #_win_xm - 00000B0A CDr00r00 [17] 2083 call _wc_prsrw_attr - 2084 ;src/main.c:575: put_hex2(hexbuf, row); - 00000B0D DD 7E FB [19] 2085 ld a, -5 (ix) - 00000B10 F5 [11] 2086 push af - 00000B11 33 [ 6] 2087 inc sp - 00000B12 21r62r10 [10] 2088 ld hl, #_hexbuf - 00000B15 CDrCEr07 [17] 2089 call _put_hex2 - 2090 ;src/main.c:576: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 19, 2, ATTR_VALUE); - 00000B18 3E 71 [ 7] 2091 ld a, #0x71 - 00000B1A F5 [11] 2092 push af - 00000B1B 33 [ 6] 2093 inc sp - 00000B1C 21 02 00 [10] 2094 ld hl, #0x0002 - 00000B1F E5 [11] 2095 push hl - 00000B20 21 04 13 [10] 2096 ld hl, #0x1304 - 00000B23 E5 [11] 2097 push hl - 00000B24 11r62r10 [10] 2098 ld de, #_hexbuf - 00000B27 21r64r02 [10] 2099 ld hl, #_win_xm - 00000B2A CDr00r00 [17] 2100 call _wc_prsrw_attr - 2101 ;src/main.c:578: put_dec3(decbuf, bpm); - 00000B2D D1 [10] 2102 pop de - 00000B2E D5 [11] 2103 push de - 00000B2F 21r64r10 [10] 2104 ld hl, #_decbuf - 00000B32 CDr0Br08 [17] 2105 call _put_dec3 - 2106 ;src/main.c:579: wc_prsrw_attr(&win_xm, decbuf, ROW_STATS, 27, 3, ATTR_VALUE); - 00000B35 3E 71 [ 7] 2107 ld a, #0x71 - 00000B37 F5 [11] 2108 push af - 00000B38 33 [ 6] 2109 inc sp - 00000B39 21 03 00 [10] 2110 ld hl, #0x0003 - 00000B3C E5 [11] 2111 push hl - 00000B3D 21 04 1B [10] 2112 ld hl, #0x1b04 - 00000B40 E5 [11] 2113 push hl - 00000B41 11r64r10 [10] 2114 ld de, #_decbuf - 00000B44 21r64r02 [10] 2115 ld hl, #_win_xm - 00000B47 CDr00r00 [17] 2116 call _wc_prsrw_attr - 2117 ;src/main.c:581: put_time(timebuf, samples / 44100UL); - 00000B4A 21 00 00 [10] 2118 ld hl, #0x0000 - 00000B4D E5 [11] 2119 push hl - 00000B4E 21 44 AC [10] 2120 ld hl, #0xac44 - 00000B51 E5 [11] 2121 push hl - 00000B52 DD 5E FC [19] 2122 ld e, -4 (ix) - 00000B55 DD 56 FD [19] 2123 ld d, -3 (ix) - 00000B58 DD 6E FE [19] 2124 ld l, -2 (ix) - 00000B5B DD 66 FF [19] 2125 ld h, -1 (ix) - 00000B5E CDr00r00 [17] 2126 call __divulong - 00000B61 F1 [10] 2127 pop af - 00000B62 E3 [19] 2128 ex (sp),hl - 00000B63 D5 [11] 2129 push de - 00000B64 21r67r10 [10] 2130 ld hl, #_timebuf - 00000B67 CDr68r08 [17] 2131 call _put_time - 2132 ;src/main.c:582: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 7, 5, ATTR_VALUE); - 00000B6A 3E 71 [ 7] 2133 ld a, #0x71 - 00000B6C F5 [11] 2134 push af - 00000B6D 33 [ 6] 2135 inc sp - 00000B6E 21 05 00 [10] 2136 ld hl, #0x0005 - 00000B71 E5 [11] 2137 push hl - 00000B72 21 06 07 [10] 2138 ld hl, #0x706 - 00000B75 E5 [11] 2139 push hl - 00000B76 11r67r10 [10] 2140 ld de, #_timebuf - 00000B79 21r64r02 [10] 2141 ld hl, #_win_xm - 00000B7C CDr00r00 [17] 2142 call _wc_prsrw_attr - 2143 ;src/main.c:584: put_time(timebuf, total_samples / 44100UL); - 00000B7F 21 00 00 [10] 2144 ld hl, #0x0000 - 00000B82 E5 [11] 2145 push hl - 00000B83 21 44 AC [10] 2146 ld hl, #0xac44 - 00000B86 E5 [11] 2147 push hl - 00000B87 ED 5Br2Cr10 [20] 2148 ld de, (_total_samples) - 00000B8B 2Ar2Er10 [16] 2149 ld hl, (_total_samples + 2) - 00000B8E CDr00r00 [17] 2150 call __divulong - 00000B91 F1 [10] 2151 pop af - 00000B92 E3 [19] 2152 ex (sp),hl - 00000B93 D5 [11] 2153 push de - 00000B94 21r67r10 [10] 2154 ld hl, #_timebuf - 00000B97 CDr68r08 [17] 2155 call _put_time - 2156 ;src/main.c:585: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 15, 5, ATTR_VALUE); - 00000B9A 3E 71 [ 7] 2157 ld a, #0x71 - 00000B9C F5 [11] 2158 push af - 00000B9D 33 [ 6] 2159 inc sp - 00000B9E 21 05 00 [10] 2160 ld hl, #0x0005 - 00000BA1 E5 [11] 2161 push hl - 00000BA2 21 06 0F [10] 2162 ld hl, #0xf06 - 00000BA5 E5 [11] 2163 push hl - 00000BA6 11r67r10 [10] 2164 ld de, #_timebuf - 00000BA9 21r64r02 [10] 2165 ld hl, #_win_xm - 00000BAC CDr00r00 [17] 2166 call _wc_prsrw_attr - 2167 ;src/main.c:587: draw_progress_bar(samples, total_samples); - 00000BAF 2Ar2Er10 [16] 2168 ld hl, (_total_samples + 2) - 00000BB2 E5 [11] 2169 push hl - 00000BB3 2Ar2Cr10 [16] 2170 ld hl, (_total_samples) - 00000BB6 E5 [11] 2171 push hl - 00000BB7 DD 5E FC [19] 2172 ld e, -4 (ix) - 00000BBA DD 56 FD [19] 2173 ld d, -3 (ix) - 00000BBD DD 6E FE [19] 2174 ld l, -2 (ix) - 00000BC0 DD 66 FF [19] 2175 ld h, -1 (ix) - 00000BC3 CDrD7r09 [17] 2176 call _draw_progress_bar - 2177 ;src/main.c:589: } - 00000BC6 DD F9 [10] 2178 ld sp, ix - 00000BC8 DD E1 [14] 2179 pop ix - 00000BCA C9 [10] 2180 ret - 2181 ;src/main.c:591: void main_start() - 2182 ; --------------------------------- - 2183 ; Function main_start - 2184 ; --------------------------------- - 00000BCB 2185 _main_start:: - 00000BCB 3B [ 6] 2186 dec sp - 2187 ;src/main.c:595: copy_file_name(); - 00000BCC CDr06r06 [17] 2188 call _copy_file_name - 2189 ;src/main.c:607: wc_prwow(&win_xm); - 00000BCF 21r64r02 [10] 2190 ld hl, #_win_xm - 00000BD2 CDr00r00 [17] 2191 call _wc_prwow - 2192 ;src/main.c:608: xm_draw_static_labels(); - 00000BD5 CDr2Br06 [17] 2193 call _xm_draw_static_labels - 2194 ;src/main.c:609: xm_set_status("Loading, please wait..."); - 00000BD8 21r84r0C [10] 2195 ld hl, #___str_17 - 00000BDB CDr0Er07 [17] 2196 call _xm_set_status - 2197 ;src/main.c:611: if (state_esp == 0xFF) - 00000BDE 3Ar00r00 [13] 2198 ld a, (_state_esp) - 00000BE1 3C [ 4] 2199 inc a - 00000BE2 20 0D [12] 2200 jr nz, 00102$ - 2201 ;src/main.c:612: state_esp = esp_init() ? 1 : 2; - 00000BE4 CDr57r02 [17] 2202 call _esp_init - 00000BE7 B7 [ 4] 2203 or a, a - 00000BE8 3E 01 [ 7] 2204 ld a, #0x01 - 00000BEA 20 02 [12] 2205 jr nz, 00126$ - 00000BEC 3E 02 [ 7] 2206 ld a, #0x02 - 00000BEE 2207 00126$: - 00000BEE 32r00r00 [13] 2208 ld (#_state_esp), a - 00000BF1 2209 00102$: - 2210 ;src/main.c:614: if (state_esp != 1) - 00000BF1 3Ar00r00 [13] 2211 ld a, (_state_esp) - 00000BF4 3D [ 4] 2212 dec a - 00000BF5 28 07 [12] 2213 jr z, 00104$ - 2214 ;src/main.c:616: error_esp(); - 00000BF7 33 [ 6] 2215 inc sp - 00000BF8 C3r6Dr05 [10] 2216 jp _error_esp - 2217 ;src/main.c:617: return; - 00000BFB C3r82r0C [10] 2218 jp 00123$ - 00000BFE 2219 00104$: - 2220 ;src/main.c:620: total_samples = 0; - 00000BFE AF [ 4] 2221 xor a, a - 00000BFF 32r2Cr10 [13] 2222 ld (_total_samples+0), a - 00000C02 32r2Dr10 [13] 2223 ld (_total_samples+1), a - 00000C05 32r2Er10 [13] 2224 ld (_total_samples+2), a - 00000C08 32r2Fr10 [13] 2225 ld (_total_samples+3), a - 2226 ;src/main.c:622: if (!play_xm()) - 00000C0B CDrBEr02 [17] 2227 call _play_xm - 00000C0E B7 [ 4] 2228 or a, a - 00000C0F 20 12 [12] 2229 jr nz, 00109$ - 2230 ;src/main.c:624: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) - 00000C11 3Ar08r10 [13] 2231 ld a, (_last_esp_status) - 00000C14 D6 99 [ 7] 2232 sub a, #0x99 - 00000C16 20 07 [12] 2233 jr nz, 00106$ - 2234 ;src/main.c:625: error_oom(); - 00000C18 33 [ 6] 2235 inc sp - 00000C19 C3rA0r05 [10] 2236 jp _error_oom - 00000C1C C3r82r0C [10] 2237 jp 00123$ - 00000C1F 2238 00106$: - 2239 ;src/main.c:627: error_playback(); - 00000C1F 33 [ 6] 2240 inc sp - 2241 ;src/main.c:628: return; - 00000C20 C3rD3r05 [10] 2242 jp _error_playback - 00000C23 2243 00109$: - 2244 ;src/main.c:631: xm_set_status("Playing"); - 00000C23 21r9Cr0C [10] 2245 ld hl, #___str_18 - 00000C26 CDr0Er07 [17] 2246 call _xm_set_status - 2247 ;src/main.c:632: xm_draw_stats_labels(); - 00000C29 CDr15r09 [17] 2248 call _xm_draw_stats_labels - 2249 ;src/main.c:633: last_track_status = TRACK_OBJ_ST_PLAYING; - 00000C2C 21r31r10 [10] 2250 ld hl, #_last_track_status - 00000C2F 36 21 [10] 2251 ld (hl), #0x21 - 2252 ;src/main.c:634: xm_update_info(); - 00000C31 CDr4Dr0A [17] 2253 call _xm_update_info - 2254 ;src/main.c:636: frame_ctr = 0; - 00000C34 FD 21 00 00 [14] 2255 ld iy, #0 - 00000C38 FD 39 [15] 2256 add iy, sp - 00000C3A FD 36 00 00 [19] 2257 ld 0 (iy), #0x00 - 2258 ;src/main.c:639: while (1) - 00000C3E 2259 00121$: - 2260 ;src/main.c:643: __endasm; - 00000C3E 76 [ 4] 2261 halt - 2262 ;src/main.c:645: if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz - 00000C3F FD 21 00 00 [14] 2263 ld iy, #0 - 00000C43 FD 39 [15] 2264 add iy, sp - 00000C45 FD 34 00 [23] 2265 inc 0 (iy) - 00000C48 FD 7E 00 [19] 2266 ld a, 0 (iy) - 00000C4B D6 0A [ 7] 2267 sub a, #0x0a - 00000C4D 38 07 [12] 2268 jr c, 00111$ - 2269 ;src/main.c:647: frame_ctr = 0; - 00000C4F FD 36 00 00 [19] 2270 ld 0 (iy), #0x00 - 2271 ;src/main.c:648: xm_update_info(); - 00000C53 CDr4Dr0A [17] 2272 call _xm_update_info - 00000C56 2273 00111$: - 2274 ;src/main.c:651: if (wc_key_pgdn()) // PgDn - unload and go to next file - 00000C56 CDr00r00 [17] 2275 call _wc_key_pgdn - 00000C59 B7 [ 4] 2276 or a, a - 00000C5A 28 05 [12] 2277 jr z, 00113$ - 2278 ;src/main.c:652: unload_and_exit(WC_NEXT_FILE); - 00000C5C 3E 02 [ 7] 2279 ld a, #0x02 - 00000C5E CDr0Er05 [17] 2280 call _unload_and_exit - 00000C61 2281 00113$: - 2282 ;src/main.c:654: if (wc_key_pgup()) // PgUp - unload and go to previous file - 00000C61 CDr00r00 [17] 2283 call _wc_key_pgup - 00000C64 B7 [ 4] 2284 or a, a - 00000C65 28 05 [12] 2285 jr z, 00115$ - 2286 ;src/main.c:655: unload_and_exit(WC_PREV_FILE); - 00000C67 3E 04 [ 7] 2287 ld a, #0x04 - 00000C69 CDr0Er05 [17] 2288 call _unload_and_exit - 00000C6C 2289 00115$: - 2290 ;src/main.c:657: if (wc_key_esc()) // Esc - unload and exit - 00000C6C CDr00r00 [17] 2291 call _wc_key_esc - 00000C6F B7 [ 4] 2292 or a, a - 00000C70 28 04 [12] 2293 jr z, 00117$ - 2294 ;src/main.c:658: unload_and_exit(WC_EXIT); - 00000C72 AF [ 4] 2295 xor a, a - 00000C73 CDr0Er05 [17] 2296 call _unload_and_exit - 00000C76 2297 00117$: - 2298 ;src/main.c:660: if (wc_key_space()) // Space - leave the track playing, just exit - 00000C76 CDr00r00 [17] 2299 call _wc_key_space - 00000C79 B7 [ 4] 2300 or a, a - 00000C7A 28 C2 [12] 2301 jr z, 00121$ - 2302 ;src/main.c:661: leave_playing_and_exit(); - 00000C7C CDr3Fr05 [17] 2303 call _leave_playing_and_exit - 00000C7F C3r3Er0C [10] 2304 jp 00121$ - 00000C82 2305 00123$: - 2306 ;src/main.c:663: } - 00000C82 33 [ 6] 2307 inc sp - 00000C83 C9 [10] 2308 ret - 00000C84 2309 ___str_17: - 00000C84 4C 6F 61 64 69 6E 67 2310 .ascii "Loading, please wait..." + 00000A7E 00 2026 .db 0x00 + 00000A7F 2027 ___str_13: + 00000A7F 20 20 52 6F 77 3A 23 2028 .ascii " Row:#" + 00000A86 00 2029 .db 0x00 + 00000A87 2030 ___str_14: + 00000A87 20 20 42 50 4D 3A 2031 .ascii " BPM:" + 00000A8D 00 2032 .db 0x00 + 00000A8E 2033 ___str_15: + 00000A8E 54 69 6D 65 3A 2034 .ascii "Time:" + 00000A93 00 2035 .db 0x00 + 00000A94 2036 ___str_16: + 00000A94 20 2F 20 2037 .ascii " / " + 00000A97 00 2038 .db 0x00 + 2039 ;src/main.c:589: void draw_progress_bar(u32 samples, u32 total) + 2040 ; --------------------------------- + 2041 ; Function draw_progress_bar + 2042 ; --------------------------------- + 00000A98 2043 _draw_progress_bar:: + 00000A98 DD E5 [15] 2044 push ix + 00000A9A DD 21 00 00 [14] 2045 ld ix, #0 + 00000A9E DD 39 [15] 2046 add ix, sp + 00000AA0 4B [ 4] 2047 ld c, e + 00000AA1 42 [ 4] 2048 ld b, d + 00000AA2 EB [ 4] 2049 ex de, hl + 2050 ;src/main.c:593: if (total) + 00000AA3 DD 7E 07 [19] 2051 ld a, 7 (ix) + 00000AA6 DD B6 06 [19] 2052 or a, 6 (ix) + 00000AA9 DD B6 05 [19] 2053 or a, 5 (ix) + 00000AAC DD B6 04 [19] 2054 or a, 4 (ix) + 00000AAF 28 30 [12] 2055 jr z, 00104$ + 2056 ;src/main.c:595: filled = (u16)(((u32)samples * BAR_WIDTH) / total); + 00000AB1 69 [ 4] 2057 ld l, c + 00000AB2 60 [ 4] 2058 ld h, b + 00000AB3 3E 05 [ 7] 2059 ld a, #0x05 + 00000AB5 2060 00146$: + 00000AB5 29 [11] 2061 add hl, hl + 00000AB6 CB 13 [ 8] 2062 rl e + 00000AB8 CB 12 [ 8] 2063 rl d + 00000ABA 3D [ 4] 2064 dec a + 00000ABB 20 F8 [12] 2065 jr nz, 00146$ + 00000ABD DD 4E 06 [19] 2066 ld c, 6 (ix) + 00000AC0 DD 46 07 [19] 2067 ld b, 7 (ix) + 00000AC3 C5 [11] 2068 push bc + 00000AC4 DD 4E 04 [19] 2069 ld c, 4 (ix) + 00000AC7 DD 46 05 [19] 2070 ld b, 5 (ix) + 00000ACA C5 [11] 2071 push bc + 00000ACB EB [ 4] 2072 ex de, hl + 00000ACC CDr00r00 [17] 2073 call __divulong + 00000ACF F1 [10] 2074 pop af + 00000AD0 F1 [10] 2075 pop af + 2076 ;src/main.c:596: if (filled > BAR_WIDTH) + 00000AD1 4B [ 4] 2077 ld c,e + 00000AD2 42 [ 4] 2078 ld b,d + 00000AD3 3E 20 [ 7] 2079 ld a, #0x20 + 00000AD5 BB [ 4] 2080 cp a, e + 00000AD6 3E 00 [ 7] 2081 ld a, #0x00 + 00000AD8 9A [ 4] 2082 sbc a, d + 00000AD9 30 09 [12] 2083 jr nc, 00120$ + 2084 ;src/main.c:597: filled = BAR_WIDTH; + 00000ADB 01 20 00 [10] 2085 ld bc, #0x0020 + 00000ADE C3rE4r0A [10] 2086 jp 00120$ + 00000AE1 2087 00104$: + 2088 ;src/main.c:600: filled = 0; // total length unknown (measurement timed out) - show empty + 00000AE1 01 00 00 [10] 2089 ld bc, #0x0000 + 2090 ;src/main.c:602: for (i = 0; i < BAR_WIDTH; i++) + 00000AE4 2091 00120$: + 00000AE4 11 00 00 [10] 2092 ld de, #0x0000 + 00000AE7 2093 00107$: + 2094 ;src/main.c:603: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = (i < filled) ? ATTR_BAR_FILLED : ATTR_BAR_EMPTY; + 00000AE7 2ArB0r10 [16] 2095 ld hl, (_bar_attr_ofs) + 00000AEA 7C [ 4] 2096 ld a, h + 00000AEB C6 C0 [ 7] 2097 add a, #0xc0 + 00000AED 67 [ 4] 2098 ld h, a + 00000AEE 19 [11] 2099 add hl, de + 00000AEF 7B [ 4] 2100 ld a, e + 00000AF0 91 [ 4] 2101 sub a, c + 00000AF1 7A [ 4] 2102 ld a, d + 00000AF2 98 [ 4] 2103 sbc a, b + 00000AF3 30 05 [12] 2104 jr nc, 00111$ + 00000AF5 3E 40 [ 7] 2105 ld a, #0x40 + 00000AF7 C3rFCr0A [10] 2106 jp 00112$ + 00000AFA 2107 00111$: + 00000AFA 3E 07 [ 7] 2108 ld a, #0x07 + 00000AFC 2109 00112$: + 00000AFC 77 [ 7] 2110 ld (hl), a + 2111 ;src/main.c:602: for (i = 0; i < BAR_WIDTH; i++) + 00000AFD 13 [ 6] 2112 inc de + 00000AFE 6B [ 4] 2113 ld l, e + 00000AFF 62 [ 4] 2114 ld h, d + 00000B00 7D [ 4] 2115 ld a, l + 00000B01 D6 20 [ 7] 2116 sub a, #0x20 + 00000B03 7C [ 4] 2117 ld a, h + 00000B04 DE 00 [ 7] 2118 sbc a, #0x00 + 00000B06 38 DF [12] 2119 jr c, 00107$ + 2120 ;src/main.c:604: } + 00000B08 DD E1 [14] 2121 pop ix + 00000B0A E1 [10] 2122 pop hl + 00000B0B F1 [10] 2123 pop af + 00000B0C F1 [10] 2124 pop af + 00000B0D E9 [ 4] 2125 jp (hl) + 2126 ;src/main.c:606: void xm_update_info() + 2127 ; --------------------------------- + 2128 ; Function xm_update_info + 2129 ; --------------------------------- + 00000B0E 2130 _xm_update_info:: + 00000B0E DD E5 [15] 2131 push ix + 00000B10 DD 21 00 00 [14] 2132 ld ix, #0 + 00000B14 DD 39 [15] 2133 add ix, sp + 00000B16 21 F8 FF [10] 2134 ld hl, #-8 + 00000B19 39 [11] 2135 add hl, sp + 00000B1A F9 [ 6] 2136 ld sp, hl + 2137 ;src/main.c:612: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); + 00000B1B 3Ar30r10 [13] 2138 ld a, (_xm_handle) + 00000B1E 6F [ 4] 2139 ld l, a + 00000B1F 3E 0B [ 7] 2140 ld a, #0x0b + 00000B21 CDrD1r00 [17] 2141 call _esp_wr_reg8 + 2142 ;src/main.c:613: esp_cmd(ESP_CMD_TRACK_GET_INFO); + 00000B24 3E A8 [ 7] 2143 ld a, #0xa8 + 00000B26 CDr05r00 [17] 2144 call _esp_cmd + 2145 ;src/main.c:614: esp_wait_busy(50); // 1s - a plain info read should be near-instant + 00000B29 21 32 00 [10] 2146 ld hl, #0x0032 + 00000B2C CDr2Cr02 [17] 2147 call _esp_wait_busy + 2148 ;src/main.c:619: status = esp_rd_reg8(ESP_REG_TRACK_STATUS); + 00000B2F 3E 28 [ 7] 2149 ld a, #0x28 + 00000B31 CDr1Er00 [17] 2150 call _esp_rd_reg8 + 00000B34 DD 77 FF [19] 2151 ld -1 (ix), a + 2152 ;src/main.c:620: if (last_track_status == TRACK_OBJ_ST_PLAYING && status == TRACK_OBJ_ST_STOPPED) + 00000B37 3Ar31r10 [13] 2153 ld a, (_last_track_status) + 00000B3A D6 21 [ 7] 2154 sub a, #0x21 + 00000B3C 20 1D [12] 2155 jr nz, 00102$ + 00000B3E DD 7E FF [19] 2156 ld a, -1 (ix) + 00000B41 D6 20 [ 7] 2157 sub a, #0x20 + 00000B43 20 16 [12] 2158 jr nz, 00102$ + 2159 ;src/main.c:622: esp_cmd(ESP_CMD_KILL_OBJECTS); + 00000B45 3E E4 [ 7] 2160 ld a, #0xe4 + 00000B47 CDr05r00 [17] 2161 call _esp_cmd + 2162 ;src/main.c:623: esp_wait_busy(100); + 00000B4A 21 64 00 [10] 2163 ld hl, #0x0064 + 00000B4D CDr2Cr02 [17] 2164 call _esp_wait_busy + 2165 ;src/main.c:624: wc_rresb(&win_xm); + 00000B50 21r32r10 [10] 2166 ld hl, #_win_xm + 00000B53 CDr00r00 [17] 2167 call _wc_rresb + 2168 ;src/main.c:625: wc_exit(WC_NEXT_FILE); + 00000B56 3E 02 [ 7] 2169 ld a, #0x02 + 00000B58 CDr00r00 [17] 2170 call _wc_exit + 00000B5B 2171 00102$: + 2172 ;src/main.c:627: last_track_status = status; + 00000B5B DD 7E FF [19] 2173 ld a, -1 (ix) + 00000B5E 32r31r10 [13] 2174 ld (#_last_track_status), a + 2175 ;src/main.c:629: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); + 00000B61 3E 2B [ 7] 2176 ld a, #0x2b + 00000B63 CDr1Er00 [17] 2177 call _esp_rd_reg8 + 00000B66 DD 77 FA [19] 2178 ld -6 (ix), a + 2179 ;src/main.c:630: row = esp_rd_reg8(ESP_REG_TRACK_ROW); + 00000B69 3E 2C [ 7] 2180 ld a, #0x2c + 00000B6B CDr1Er00 [17] 2181 call _esp_rd_reg8 + 00000B6E DD 77 FB [19] 2182 ld -5 (ix), a + 2183 ;src/main.c:631: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); + 00000B71 3E 02 [ 7] 2184 ld a, #0x02 + 00000B73 F5 [11] 2185 push af + 00000B74 33 [ 6] 2186 inc sp + 00000B75 21 01 00 [10] 2187 ld hl, #1 + 00000B78 39 [11] 2188 add hl, sp + 00000B79 EB [ 4] 2189 ex de, hl + 00000B7A 3E 31 [ 7] 2190 ld a, #0x31 + 00000B7C CDrA5r00 [17] 2191 call _esp_rd_regs + 2192 ;src/main.c:632: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES); + 00000B7F 3E 2D [ 7] 2193 ld a, #0x2d + 00000B81 CDr37r00 [17] 2194 call _esp_rd_reg32 + 00000B84 DD 73 FC [19] 2195 ld -4 (ix), e + 00000B87 DD 72 FD [19] 2196 ld -3 (ix), d + 00000B8A DD 75 FE [19] 2197 ld -2 (ix), l + 00000B8D DD 74 FF [19] 2198 ld -1 (ix), h + 2199 ;src/main.c:634: if (!total_samples) + 00000B90 3Ar2Fr10 [13] 2200 ld a, (_total_samples+3) + 00000B93 FD 21r2Cr10 [14] 2201 ld iy, #_total_samples + 00000B97 FD B6 02 [19] 2202 or a, 2 (iy) + 00000B9A FD B6 01 [19] 2203 or a, 1 (iy) + 00000B9D FD B6 00 [19] 2204 or a, 0 (iy) + 00000BA0 20 0C [12] 2205 jr nz, 00105$ + 2206 ;src/main.c:635: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES); + 00000BA2 3E 36 [ 7] 2207 ld a, #0x36 + 00000BA4 CDr37r00 [17] 2208 call _esp_rd_reg32 + 00000BA7 ED 53r2Cr10 [20] 2209 ld (_total_samples), de + 00000BAB 22r2Er10 [16] 2210 ld (_total_samples + 2), hl + 00000BAE 2211 00105$: + 2212 ;src/main.c:637: put_hex2(hexbuf, pattern); + 00000BAE DD 7E FA [19] 2213 ld a, -6 (ix) + 00000BB1 F5 [11] 2214 push af + 00000BB2 33 [ 6] 2215 inc sp + 00000BB3 21r86r10 [10] 2216 ld hl, #_hexbuf + 00000BB6 CDr8Fr08 [17] 2217 call _put_hex2 + 2218 ;src/main.c:638: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 10, 2, ATTR_VALUE); + 00000BB9 3E 71 [ 7] 2219 ld a, #0x71 + 00000BBB F5 [11] 2220 push af + 00000BBC 33 [ 6] 2221 inc sp + 00000BBD 21 02 00 [10] 2222 ld hl, #0x0002 + 00000BC0 E5 [11] 2223 push hl + 00000BC1 21 04 0A [10] 2224 ld hl, #0xa04 + 00000BC4 E5 [11] 2225 push hl + 00000BC5 11r86r10 [10] 2226 ld de, #_hexbuf + 00000BC8 21r32r10 [10] 2227 ld hl, #_win_xm + 00000BCB CDr00r00 [17] 2228 call _wc_prsrw_attr + 2229 ;src/main.c:640: put_hex2(hexbuf, row); + 00000BCE DD 7E FB [19] 2230 ld a, -5 (ix) + 00000BD1 F5 [11] 2231 push af + 00000BD2 33 [ 6] 2232 inc sp + 00000BD3 21r86r10 [10] 2233 ld hl, #_hexbuf + 00000BD6 CDr8Fr08 [17] 2234 call _put_hex2 + 2235 ;src/main.c:641: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 19, 2, ATTR_VALUE); + 00000BD9 3E 71 [ 7] 2236 ld a, #0x71 + 00000BDB F5 [11] 2237 push af + 00000BDC 33 [ 6] 2238 inc sp + 00000BDD 21 02 00 [10] 2239 ld hl, #0x0002 + 00000BE0 E5 [11] 2240 push hl + 00000BE1 21 04 13 [10] 2241 ld hl, #0x1304 + 00000BE4 E5 [11] 2242 push hl + 00000BE5 11r86r10 [10] 2243 ld de, #_hexbuf + 00000BE8 21r32r10 [10] 2244 ld hl, #_win_xm + 00000BEB CDr00r00 [17] 2245 call _wc_prsrw_attr + 2246 ;src/main.c:643: put_dec3(decbuf, bpm); + 00000BEE D1 [10] 2247 pop de + 00000BEF D5 [11] 2248 push de + 00000BF0 21r88r10 [10] 2249 ld hl, #_decbuf + 00000BF3 CDrCCr08 [17] 2250 call _put_dec3 + 2251 ;src/main.c:644: wc_prsrw_attr(&win_xm, decbuf, ROW_STATS, 27, 3, ATTR_VALUE); + 00000BF6 3E 71 [ 7] 2252 ld a, #0x71 + 00000BF8 F5 [11] 2253 push af + 00000BF9 33 [ 6] 2254 inc sp + 00000BFA 21 03 00 [10] 2255 ld hl, #0x0003 + 00000BFD E5 [11] 2256 push hl + 00000BFE 21 04 1B [10] 2257 ld hl, #0x1b04 + 00000C01 E5 [11] 2258 push hl + 00000C02 11r88r10 [10] 2259 ld de, #_decbuf + 00000C05 21r32r10 [10] 2260 ld hl, #_win_xm + 00000C08 CDr00r00 [17] 2261 call _wc_prsrw_attr + 2262 ;src/main.c:646: put_time(timebuf, samples / 44100UL); + 00000C0B 21 00 00 [10] 2263 ld hl, #0x0000 + 00000C0E E5 [11] 2264 push hl + 00000C0F 21 44 AC [10] 2265 ld hl, #0xac44 + 00000C12 E5 [11] 2266 push hl + 00000C13 DD 5E FC [19] 2267 ld e, -4 (ix) + 00000C16 DD 56 FD [19] 2268 ld d, -3 (ix) + 00000C19 DD 6E FE [19] 2269 ld l, -2 (ix) + 00000C1C DD 66 FF [19] 2270 ld h, -1 (ix) + 00000C1F CDr00r00 [17] 2271 call __divulong + 00000C22 F1 [10] 2272 pop af + 00000C23 E3 [19] 2273 ex (sp),hl + 00000C24 D5 [11] 2274 push de + 00000C25 21r8Br10 [10] 2275 ld hl, #_timebuf + 00000C28 CDr29r09 [17] 2276 call _put_time + 2277 ;src/main.c:647: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 7, 5, ATTR_VALUE); + 00000C2B 3E 71 [ 7] 2278 ld a, #0x71 + 00000C2D F5 [11] 2279 push af + 00000C2E 33 [ 6] 2280 inc sp + 00000C2F 21 05 00 [10] 2281 ld hl, #0x0005 + 00000C32 E5 [11] 2282 push hl + 00000C33 21 06 07 [10] 2283 ld hl, #0x706 + 00000C36 E5 [11] 2284 push hl + 00000C37 11r8Br10 [10] 2285 ld de, #_timebuf + 00000C3A 21r32r10 [10] 2286 ld hl, #_win_xm + 00000C3D CDr00r00 [17] 2287 call _wc_prsrw_attr + 2288 ;src/main.c:649: put_time(timebuf, total_samples / 44100UL); + 00000C40 21 00 00 [10] 2289 ld hl, #0x0000 + 00000C43 E5 [11] 2290 push hl + 00000C44 21 44 AC [10] 2291 ld hl, #0xac44 + 00000C47 E5 [11] 2292 push hl + 00000C48 ED 5Br2Cr10 [20] 2293 ld de, (_total_samples) + 00000C4C 2Ar2Er10 [16] 2294 ld hl, (_total_samples + 2) + 00000C4F CDr00r00 [17] 2295 call __divulong + 00000C52 F1 [10] 2296 pop af + 00000C53 E3 [19] 2297 ex (sp),hl + 00000C54 D5 [11] 2298 push de + 00000C55 21r8Br10 [10] 2299 ld hl, #_timebuf + 00000C58 CDr29r09 [17] 2300 call _put_time + 2301 ;src/main.c:650: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 15, 5, ATTR_VALUE); + 00000C5B 3E 71 [ 7] 2302 ld a, #0x71 + 00000C5D F5 [11] 2303 push af + 00000C5E 33 [ 6] 2304 inc sp + 00000C5F 21 05 00 [10] 2305 ld hl, #0x0005 + 00000C62 E5 [11] 2306 push hl + 00000C63 21 06 0F [10] 2307 ld hl, #0xf06 + 00000C66 E5 [11] 2308 push hl + 00000C67 11r8Br10 [10] 2309 ld de, #_timebuf + 00000C6A 21r32r10 [10] 2310 ld hl, #_win_xm + 00000C6D CDr00r00 [17] 2311 call _wc_prsrw_attr + 2312 ;src/main.c:652: draw_progress_bar(samples, total_samples); + 00000C70 2Ar2Er10 [16] 2313 ld hl, (_total_samples + 2) + 00000C73 E5 [11] 2314 push hl + 00000C74 2Ar2Cr10 [16] 2315 ld hl, (_total_samples) + 00000C77 E5 [11] 2316 push hl + 00000C78 DD 5E FC [19] 2317 ld e, -4 (ix) + 00000C7B DD 56 FD [19] 2318 ld d, -3 (ix) + 00000C7E DD 6E FE [19] 2319 ld l, -2 (ix) + 00000C81 DD 66 FF [19] 2320 ld h, -1 (ix) + 00000C84 CDr98r0A [17] 2321 call _draw_progress_bar + 2322 ;src/main.c:654: } + 00000C87 DD F9 [10] 2323 ld sp, ix + 00000C89 DD E1 [14] 2324 pop ix + 00000C8B C9 [10] 2325 ret + 2326 ;src/main.c:656: void main_start() + 2327 ; --------------------------------- + 2328 ; Function main_start + 2329 ; --------------------------------- + 00000C8C 2330 _main_start:: + 00000C8C DD E5 [15] 2331 push ix + 00000C8E DD 21 00 00 [14] 2332 ld ix, #0 + 00000C92 DD 39 [15] 2333 add ix, sp + 00000C94 3B [ 6] 2334 dec sp + 2335 ;src/main.c:660: copy_file_name(); + 00000C95 CDrC7r06 [17] 2336 call _copy_file_name + 2337 ;src/main.c:672: memcpy(&win_xm, &win_xm_tpl, sizeof(win_xm)); + 00000C98 11r32r10 [10] 2338 ld de, #_win_xm + 00000C9B 21rA0r02 [10] 2339 ld hl, #_win_xm_tpl + 00000C9E 01 12 00 [10] 2340 ld bc, #0x0012 + 00000CA1 ED B0 [21] 2341 ldir + 2342 ;src/main.c:673: win_xm.x_pos = wc_center(wc_screen_width(), win_xm.x_size); + 00000CA3 21r36r10 [10] 2343 ld hl, #_win_xm + 4 + 00000CA6 6E [ 7] 2344 ld l, (hl) + 00000CA7 E5 [11] 2345 push hl + 00000CA8 CDr4Cr05 [17] 2346 call _wc_screen_width + 00000CAB E1 [10] 2347 pop hl + 00000CAC CDr59r05 [17] 2348 call _wc_center + 00000CAF 32r34r10 [13] 2349 ld (#(_win_xm + 2)), a + 2350 ;src/main.c:674: win_xm.y_pos = wc_center(*(u8*)_HEI, win_xm.y_size); + 00000CB2 21r37r10 [10] 2351 ld hl, #_win_xm + 5 + 00000CB5 6E [ 7] 2352 ld l, (hl) + 00000CB6 3A 0E 60 [13] 2353 ld a, (#0x600e) + 00000CB9 CDr59r05 [17] 2354 call _wc_center + 00000CBC 32r35r10 [13] 2355 ld (#(_win_xm + 3)), a + 2356 ;src/main.c:683: wc_gedpl(); + 00000CBF CDr00r00 [17] 2357 call _wc_gedpl + 2358 ;src/main.c:684: wc_key_wait_release(); + 00000CC2 CDr00r00 [17] 2359 call _wc_key_wait_release + 2360 ;src/main.c:685: wc_prwow(&win_xm); + 00000CC5 21r32r10 [10] 2361 ld hl, #_win_xm + 00000CC8 CDr00r00 [17] 2362 call _wc_prwow + 2363 ;src/main.c:686: xm_draw_static_labels(); + 00000CCB CDrECr06 [17] 2364 call _xm_draw_static_labels + 2365 ;src/main.c:687: xm_set_status("Loading, please wait..."); + 00000CCE 21r76r0D [10] 2366 ld hl, #___str_17 + 00000CD1 CDrCFr07 [17] 2367 call _xm_set_status + 2368 ;src/main.c:689: if (state_esp == 0xFF) + 00000CD4 3Ar00r00 [13] 2369 ld a, (_state_esp) + 00000CD7 3C [ 4] 2370 inc a + 00000CD8 20 0D [12] 2371 jr nz, 00102$ + 2372 ;src/main.c:690: state_esp = esp_init() ? 1 : 2; + 00000CDA CDr93r02 [17] 2373 call _esp_init + 00000CDD B7 [ 4] 2374 or a, a + 00000CDE 3E 01 [ 7] 2375 ld a, #0x01 + 00000CE0 20 02 [12] 2376 jr nz, 00127$ + 00000CE2 3E 02 [ 7] 2377 ld a, #0x02 + 00000CE4 2378 00127$: + 00000CE4 32r00r00 [13] 2379 ld (#_state_esp), a + 00000CE7 2380 00102$: + 2381 ;src/main.c:692: if (state_esp != 1) + 00000CE7 3Ar00r00 [13] 2382 ld a, (_state_esp) + 00000CEA 3D [ 4] 2383 dec a + 00000CEB 28 06 [12] 2384 jr z, 00104$ + 2385 ;src/main.c:694: error_esp(); + 00000CED CDr2Er06 [17] 2386 call _error_esp + 2387 ;src/main.c:695: return; + 00000CF0 C3r72r0D [10] 2388 jp 00124$ + 00000CF3 2389 00104$: + 2390 ;src/main.c:698: total_samples = 0; + 00000CF3 AF [ 4] 2391 xor a, a + 00000CF4 32r2Cr10 [13] 2392 ld (_total_samples+0), a + 00000CF7 32r2Dr10 [13] 2393 ld (_total_samples+1), a + 00000CFA 32r2Er10 [13] 2394 ld (_total_samples+2), a + 00000CFD 32r2Fr10 [13] 2395 ld (_total_samples+3), a + 2396 ;src/main.c:700: if (!play_xm()) + 00000D00 CDr0Fr03 [17] 2397 call _play_xm + 00000D03 B7 [ 4] 2398 or a, a + 00000D04 20 13 [12] 2399 jr nz, 00109$ + 2400 ;src/main.c:702: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) + 00000D06 3Ar08r10 [13] 2401 ld a, (_last_esp_status) + 00000D09 D6 99 [ 7] 2402 sub a, #0x99 + 00000D0B 20 06 [12] 2403 jr nz, 00106$ + 2404 ;src/main.c:703: error_oom(); + 00000D0D CDr61r06 [17] 2405 call _error_oom + 00000D10 C3r72r0D [10] 2406 jp 00124$ + 00000D13 2407 00106$: + 2408 ;src/main.c:705: error_playback(); + 00000D13 CDr94r06 [17] 2409 call _error_playback + 2410 ;src/main.c:706: return; + 00000D16 C3r72r0D [10] 2411 jp 00124$ + 00000D19 2412 00109$: + 2413 ;src/main.c:709: xm_set_status("Playing"); + 00000D19 21r8Er0D [10] 2414 ld hl, #___str_18 + 00000D1C CDrCFr07 [17] 2415 call _xm_set_status + 2416 ;src/main.c:710: xm_draw_stats_labels(); + 00000D1F CDrD6r09 [17] 2417 call _xm_draw_stats_labels + 2418 ;src/main.c:711: last_track_status = TRACK_OBJ_ST_PLAYING; + 00000D22 21r31r10 [10] 2419 ld hl, #_last_track_status + 00000D25 36 21 [10] 2420 ld (hl), #0x21 + 2421 ;src/main.c:712: xm_update_info(); + 00000D27 CDr0Er0B [17] 2422 call _xm_update_info + 2423 ;src/main.c:714: frame_ctr = 0; + 00000D2A DD 36 FF 00 [19] 2424 ld -1 (ix), #0x00 + 2425 ;src/main.c:718: while (1) + 00000D2E 2426 00122$: + 2427 ;src/main.c:722: __endasm; + 00000D2E 76 [ 4] 2428 halt + 2429 ;src/main.c:724: if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz + 00000D2F DD 34 FF [23] 2430 inc -1 (ix) + 00000D32 DD 7E FF [19] 2431 ld a, -1 (ix) + 00000D35 D6 0A [ 7] 2432 sub a, #0x0a + 00000D37 38 07 [12] 2433 jr c, 00111$ + 2434 ;src/main.c:726: frame_ctr = 0; + 00000D39 DD 36 FF 00 [19] 2435 ld -1 (ix), #0x00 + 2436 ;src/main.c:727: xm_update_info(); + 00000D3D CDr0Er0B [17] 2437 call _xm_update_info + 00000D40 2438 00111$: + 2439 ;src/main.c:730: if (wc_key_pgdn() || wc_key_enter()) // PgDn or Enter - unload and go to next file + 00000D40 CDr00r00 [17] 2440 call _wc_key_pgdn + 00000D43 B7 [ 4] 2441 or a, a + 00000D44 20 06 [12] 2442 jr nz, 00112$ + 00000D46 CDr00r00 [17] 2443 call _wc_key_enter + 00000D49 B7 [ 4] 2444 or a, a + 00000D4A 28 05 [12] 2445 jr z, 00113$ + 00000D4C 2446 00112$: + 2447 ;src/main.c:731: unload_and_exit(WC_NEXT_FILE); + 00000D4C 3E 02 [ 7] 2448 ld a, #0x02 + 00000D4E CDrC9r05 [17] 2449 call _unload_and_exit + 00000D51 2450 00113$: + 2451 ;src/main.c:733: if (wc_key_pgup()) // PgUp - unload and go to previous file + 00000D51 CDr00r00 [17] 2452 call _wc_key_pgup + 00000D54 B7 [ 4] 2453 or a, a + 00000D55 28 05 [12] 2454 jr z, 00116$ + 2455 ;src/main.c:734: unload_and_exit(WC_PREV_FILE); + 00000D57 3E 04 [ 7] 2456 ld a, #0x04 + 00000D59 CDrC9r05 [17] 2457 call _unload_and_exit + 00000D5C 2458 00116$: + 2459 ;src/main.c:736: if (wc_key_esc()) // Esc - unload and exit + 00000D5C CDr00r00 [17] 2460 call _wc_key_esc + 00000D5F B7 [ 4] 2461 or a, a + 00000D60 28 04 [12] 2462 jr z, 00118$ + 2463 ;src/main.c:737: unload_and_exit(WC_EXIT); + 00000D62 AF [ 4] 2464 xor a, a + 00000D63 CDrC9r05 [17] 2465 call _unload_and_exit + 00000D66 2466 00118$: + 2467 ;src/main.c:739: if (wc_key_space()) // Space - leave the track playing, just exit + 00000D66 CDr00r00 [17] 2468 call _wc_key_space + 00000D69 B7 [ 4] 2469 or a, a + 00000D6A 28 C2 [12] 2470 jr z, 00122$ + 2471 ;src/main.c:740: leave_playing_and_exit(); + 00000D6C CDrFAr05 [17] 2472 call _leave_playing_and_exit + 00000D6F C3r2Er0D [10] 2473 jp 00122$ + 00000D72 2474 00124$: + 2475 ;src/main.c:742: } + 00000D72 33 [ 6] 2476 inc sp + 00000D73 DD E1 [14] 2477 pop ix + 00000D75 C9 [10] 2478 ret + 00000D76 2479 ___str_17: + 00000D76 4C 6F 61 64 69 6E 67 2480 .ascii "Loading, please wait..." 2C 20 70 6C 65 61 73 65 20 77 61 69 74 2E 2E 2E - 00000C9B 00 2311 .db 0x00 - 00000C9C 2312 ___str_18: - 00000C9C 50 6C 61 79 69 6E 67 2313 .ascii "Playing" - 00000CA3 00 2314 .db 0x00 - 2315 ;src/main.c:666: void main() - 2316 ; --------------------------------- - 2317 ; Function main - 2318 ; --------------------------------- - 00000CA4 2319 _main:: - 2320 ;src/main.c:676: __endasm; - 00000CA4 ED 73r00r10 [20] 2321 ld (_ret_sp), sp - 00000CA8 32r07r10 [13] 2322 ld (_call_type), a - 00000CAB ED 43r09r10 [20] 2323 ld (_p_file_name), bc - 00000CAF 08 [ 4] 2324 ex af, af - 00000CB0 32r06r10 [13] 2325 ld (_file_ext), a - 00000CB3 22r02r10 [16] 2326 ld (_filesize), hl - 00000CB6 ED 53r04r10 [20] 2327 ld (_filesize + 2), de - 2328 ;src/main.c:678: switch (call_type) - 00000CBA 3Ar07r10 [13] 2329 ld a, (_call_type+0) - 00000CBD B7 [ 4] 2330 or a, a - 00000CBE CArCBr0B [10] 2331 jp z, _main_start - 00000CC1 3Ar07r10 [13] 2332 ld a, (_call_type) - 00000CC4 D6 03 [ 7] 2333 sub a, #0x03 - 00000CC6 CArFBr04 [10] 2334 jp z, _about - 2335 ;src/main.c:680: case WC_CALL_EXT: - 2336 ;src/main.c:681: main_start(); - 2337 ;src/main.c:682: break; - 2338 ;src/main.c:684: case WC_CALL_MENU: - 2339 ;src/main.c:685: about(); - 2340 ;src/main.c:686: break; - 2341 ;src/main.c:688: default: - 2342 ;src/main.c:689: wc_exit(WC_EXIT); - 00000CC9 AF [ 4] 2343 xor a, a - 2344 ;src/main.c:690: } - 2345 ;src/main.c:691: } - 00000CCA C3r00r00 [10] 2346 jp _wc_exit - 2347 .area _CODE - 2348 .area _INITIALIZER - 00000000 2349 __xinit__state_esp: - 00000000 FF 2350 .db #0xff ; 255 - 2351 .area _CABS (ABS) + 00000D8D 00 2481 .db 0x00 + 00000D8E 2482 ___str_18: + 00000D8E 50 6C 61 79 69 6E 67 2483 .ascii "Playing" + 00000D95 00 2484 .db 0x00 + 2485 ;src/main.c:745: void main() + 2486 ; --------------------------------- + 2487 ; Function main + 2488 ; --------------------------------- + 00000D96 2489 _main:: + 2490 ;src/main.c:755: __endasm; + 00000D96 ED 73r00r10 [20] 2491 ld (_ret_sp), sp + 00000D9A 32r07r10 [13] 2492 ld (_call_type), a + 00000D9D ED 43r09r10 [20] 2493 ld (_p_file_name), bc + 00000DA1 08 [ 4] 2494 ex af, af + 00000DA2 32r06r10 [13] 2495 ld (_file_ext), a + 00000DA5 22r02r10 [16] 2496 ld (_filesize), hl + 00000DA8 ED 53r04r10 [20] 2497 ld (_filesize + 2), de + 2498 ;src/main.c:757: switch (call_type) + 00000DAC 3Ar07r10 [13] 2499 ld a, (_call_type+0) + 00000DAF B7 [ 4] 2500 or a, a + 00000DB0 CAr8Cr0C [10] 2501 jp z, _main_start + 00000DB3 3Ar07r10 [13] 2502 ld a, (_call_type) + 00000DB6 D6 03 [ 7] 2503 sub a, #0x03 + 00000DB8 CAr8Fr05 [10] 2504 jp z, _about + 2505 ;src/main.c:759: case WC_CALL_EXT: + 2506 ;src/main.c:760: main_start(); + 2507 ;src/main.c:761: break; + 2508 ;src/main.c:763: case WC_CALL_MENU: + 2509 ;src/main.c:764: about(); + 2510 ;src/main.c:765: break; + 2511 ;src/main.c:767: default: + 2512 ;src/main.c:768: wc_exit(WC_EXIT); + 00000DBB AF [ 4] 2513 xor a, a + 2514 ;src/main.c:769: } + 2515 ;src/main.c:770: } + 00000DBC C3r00r00 [10] 2516 jp _wc_exit + 2517 .area _CODE + 2518 .area _INITIALIZER + 00000000 2519 __xinit__state_esp: + 00000000 FF 2520 .db #0xff ; 255 + 2521 .area _CABS (ABS) diff --git a/obj/out.map b/obj/out.map index f878d52..7c6d8a4 100644 --- a/obj/out.map +++ b/obj/out.map @@ -24,25 +24,25 @@ Area Addr Size Decimal Bytes (A 00000001 l__INITIALIZER 00000003 l__HEADER0 0000010A l__HOME - 00000E21 l__CODE - 0000108E l__DATA + 00000F31 l__CODE + 000010B2 l__DATA 00008003 s__CODE 0000A800 s__DATA - 0000B88E s__INITIALIZED - 0000B88F s__HOME - 0000B999 s__GSFINAL - 0000B999 s__GSINIT - 0000B999 s__INITIALIZER - 0000B99A s__BSEG - 0000B99A s__BSS - 0000B99A s__HEAP + 0000B8B2 s__INITIALIZED + 0000B8B3 s__HOME + 0000B9BD s__GSFINAL + 0000B9BD s__GSINIT + 0000B9BD s__INITIALIZER + 0000B9BE s__BSEG + 0000B9BE s__BSS + 0000B9BE s__HEAP ASxxxx Linker V05.50.4-SDLD, page 2. Hexadecimal [32-Bits] 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 ----- -------------------------------- ------------------------ @@ -54,72 +54,78 @@ _CODE 00008003 00000E21 = 3617. bytes (R 000080D4 _esp_wr_reg8 main 000080EB _esp_wr_reg32 main 0000811B _esp_wr_end main - 0000812A _esp_send_dma main - 0000818B _esp_rd_end main - 0000819A _esp_wait_status main - 000081E8 _esp_wait_busy main - 0000822F _esp_create_obj main - 0000825A _esp_init main - 00008267 _win_xm main - 00008279 _win_about main - 000082C1 _play_xm main - 000084ED _wait_esc_key main - 000084F5 _wait_frames main - 000084FE _about main - 00008511 _unload_and_exit main - 00008542 _leave_playing_and_exit main - 0000854C _wait_for_manual_exit main - 00008570 _error_esp main - 00008597 _stop_on_error main - 000085A3 _error_oom main - 000085D6 _error_playback main - 00008609 _copy_file_name main - 0000862E _xm_draw_static_labels main - 000086AD _xm_set_status_attr main - 00008711 _xm_set_status main - 00008719 _xm_set_status_code main - 000087D1 _put_hex2 main - 0000880E _put_dec3 main - 0000886B _put_time main - 00008918 _xm_draw_stats_labels main - 000089DA _draw_progress_bar main - 00008A50 _xm_update_info main - 00008BCE _main_start main - 00008CA7 _main main - 00008CD0 __divuchar divunsigned - 00008CD2 __divu8 divunsigned - 00008CD5 __divu16 divunsigned - 00008CD5 __divuint divunsigned - 00008D04 _wc_key_space wc_key_space - 00008D0E _wc_load512 wc_load512 - 00008D23 __moduchar modunsigned - 00008D2A __moduint modunsigned - 00008D2F _wc_prsrw wc_prsrw - 00008D65 _wc_prwow wc_prwow + 0000812A _esp_wait_not_busy main + 00008171 _esp_send_dma main + 000081D2 _esp_rd_end main + 000081E1 _esp_wait_status main + 0000822F _esp_wait_busy main + 0000826B _esp_create_obj main + 00008296 _esp_init main + 000082A3 _win_xm_tpl main + 000082B5 _win_about_tpl main + 00008312 _play_xm main + 0000853E _wait_esc_key main + 00008546 _wait_frames main + 0000854F _wc_screen_width main + 0000855C _wc_center main + 00008592 _about main + 000085CC _unload_and_exit main + 000085FD _leave_playing_and_exit main + 00008607 _wait_for_manual_exit main + 00008631 _error_esp main + 00008658 _stop_on_error main + 00008664 _error_oom main + 00008697 _error_playback main + 000086CA _copy_file_name main + 000086EF _xm_draw_static_labels main + 0000876E _xm_set_status_attr main + 000087D2 _xm_set_status main + 000087DA _xm_set_status_code main + 00008892 _put_hex2 main + 000088CF _put_dec3 main + 0000892C _put_time main + 000089D9 _xm_draw_stats_labels main + 00008A9B _draw_progress_bar main + 00008B11 _xm_update_info main + 00008C8F _main_start main + 00008D99 _main main + 00008DC2 __divuchar divunsigned + 00008DC4 __divu8 divunsigned + 00008DC7 __divu16 divunsigned + 00008DC7 __divuint divunsigned + 00008DF6 _wc_key_space wc_key_space + 00008E00 _wc_load512 wc_load512 + 00008E15 __moduchar modunsigned ASxxxx Linker V05.50.4-SDLD, page 3. Hexadecimal [32-Bits] 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 ----- -------------------------------- ------------------------ - 00008D72 _wc_prm_pl wc_prm_pl - 00008D81 _wc_key_pgdn wc_key_pgdn - 00008D8B _wc_gadrw wc_gadrw - 00008DB0 _wc_prsrw_attr wc_prsrw_attr - 00008DF7 _wc_rresb wc_rresb - 00008E04 _strlen strlen - 00008E10 _wc_key_esc wc_key_esc - 00008E1A _wc_key_pgup wc_key_pgup + 00008E1C __moduint modunsigned + 00008E21 _wc_prsrw wc_prsrw + 00008E57 _wc_prwow wc_prwow + 00008E64 _wc_key_enter wc_key_enter + 00008E6E _wc_prm_pl wc_prm_pl + 00008E7D _wc_gedpl wc_gedpl + 00008E87 _wc_key_pgdn wc_key_pgdn + 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. Hexadecimal [32-Bits] 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 ----- -------------------------------- ------------------------ @@ -134,36 +140,39 @@ _DATA 0000A800 0000108E = 4238. bytes (R 0000B82C _total_samples main 0000B830 _xm_handle 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. Hexadecimal [32-Bits] 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 ----- -------------------------------- ------------------------ - 0000B88E _state_esp main + 0000B8B2 _state_esp main ASxxxx Linker V05.50.4-SDLD, page 6. Hexadecimal [32-Bits] 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 ----- -------------------------------- ------------------------ - 0000B88F __modulong _modulong - 0000B916 __divulong _divulong + 0000B8B3 __modulong _modulong + 0000B93A __divulong _divulong ASxxxx Linker V05.50.4-SDLD, page 7. Hexadecimal [32-Bits] 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 ----- -------------------------------- ------------------------ @@ -187,21 +196,24 @@ obj/crt0.rel [ crt0 ] Libraries Linked [ object file ] E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ divunsigned.rel ] -vgm_wc_api.lib [ wc_key_space.rel ] -vgm_wc_api.lib [ wc_load512.rel ] +wc_api.lib [ wc_key_space.rel ] +wc_api.lib [ wc_load512.rel ] E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ modunsigned.rel ] -vgm_wc_api.lib [ wc_prsrw.rel ] -vgm_wc_api.lib [ wc_prwow.rel ] -vgm_wc_api.lib [ wc_prm_pl.rel ] +wc_api.lib [ wc_prsrw.rel ] +wc_api.lib [ wc_prwow.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 ] +wc_api.lib [ wc_gedpl.rel ] E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ _divulong.rel ] -vgm_wc_api.lib [ wc_key_pgdn.rel ] -vgm_wc_api.lib [ wc_gadrw.rel ] -vgm_wc_api.lib [ wc_prsrw_attr.rel ] -vgm_wc_api.lib [ wc_rresb.rel ] +wc_api.lib [ wc_key_pgdn.rel ] +wc_api.lib [ wc_gadrw.rel ] +wc_api.lib [ wc_prsrw_attr.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 ] -vgm_wc_api.lib [ wc_key_esc.rel ] -vgm_wc_api.lib [ wc_key_pgup.rel ] +wc_api.lib [ wc_key_esc.rel ] +wc_api.lib [ wc_key_pgup.rel ] ASxxxx Linker V05.50.4-SDLD, page 10. diff --git a/obj/out.noi b/obj/out.noi index d9c2f6a..4bece68 100644 --- a/obj/out.noi +++ b/obj/out.noi @@ -15,18 +15,18 @@ DEF l__INITIALIZED 0x1 DEF l__INITIALIZER 0x1 DEF l__HEADER0 0x3 DEF l__HOME 0x10A -DEF l__CODE 0xE21 -DEF l__DATA 0x108E +DEF l__CODE 0xF31 +DEF l__DATA 0x10B2 DEF s__CODE 0x8003 DEF s__DATA 0xA800 -DEF s__INITIALIZED 0xB88E -DEF s__HOME 0xB88F -DEF s__GSFINAL 0xB999 -DEF s__GSINIT 0xB999 -DEF s__INITIALIZER 0xB999 -DEF s__BSEG 0xB99A -DEF s__BSS 0xB99A -DEF s__HEAP 0xB99A +DEF s__INITIALIZED 0xB8B2 +DEF s__HOME 0xB8B3 +DEF s__GSFINAL 0xB9BD +DEF s__GSINIT 0xB9BD +DEF s__INITIALIZER 0xB9BD +DEF s__BSEG 0xB9BE +DEF s__BSS 0xB9BE +DEF s__HEAP 0xB9BE DEF _wc_exit 0x8003 DEF _esp_cmd 0x8008 DEF _esp_rd_reg8 0x8021 @@ -35,56 +35,62 @@ DEF _esp_rd_regs 0x80A8 DEF _esp_wr_reg8 0x80D4 DEF _esp_wr_reg32 0x80EB DEF _esp_wr_end 0x811B -DEF _esp_send_dma 0x812A -DEF _esp_rd_end 0x818B -DEF _esp_wait_status 0x819A -DEF _esp_wait_busy 0x81E8 -DEF _esp_create_obj 0x822F -DEF _esp_init 0x825A -DEF _win_xm 0x8267 -DEF _win_about 0x8279 -DEF _play_xm 0x82C1 -DEF _wait_esc_key 0x84ED -DEF _wait_frames 0x84F5 -DEF _about 0x84FE -DEF _unload_and_exit 0x8511 -DEF _leave_playing_and_exit 0x8542 -DEF _wait_for_manual_exit 0x854C -DEF _error_esp 0x8570 -DEF _stop_on_error 0x8597 -DEF _error_oom 0x85A3 -DEF _error_playback 0x85D6 -DEF _copy_file_name 0x8609 -DEF _xm_draw_static_labels 0x862E -DEF _xm_set_status_attr 0x86AD -DEF _xm_set_status 0x8711 -DEF _xm_set_status_code 0x8719 -DEF _put_hex2 0x87D1 -DEF _put_dec3 0x880E -DEF _put_time 0x886B -DEF _xm_draw_stats_labels 0x8918 -DEF _draw_progress_bar 0x89DA -DEF _xm_update_info 0x8A50 -DEF _main_start 0x8BCE -DEF _main 0x8CA7 -DEF __divuchar 0x8CD0 -DEF __divu8 0x8CD2 -DEF __divu16 0x8CD5 -DEF __divuint 0x8CD5 -DEF _wc_key_space 0x8D04 -DEF _wc_load512 0x8D0E -DEF __moduchar 0x8D23 -DEF __moduint 0x8D2A -DEF _wc_prsrw 0x8D2F -DEF _wc_prwow 0x8D65 -DEF _wc_prm_pl 0x8D72 -DEF _wc_key_pgdn 0x8D81 -DEF _wc_gadrw 0x8D8B -DEF _wc_prsrw_attr 0x8DB0 -DEF _wc_rresb 0x8DF7 -DEF _strlen 0x8E04 -DEF _wc_key_esc 0x8E10 -DEF _wc_key_pgup 0x8E1A +DEF _esp_wait_not_busy 0x812A +DEF _esp_send_dma 0x8171 +DEF _esp_rd_end 0x81D2 +DEF _esp_wait_status 0x81E1 +DEF _esp_wait_busy 0x822F +DEF _esp_create_obj 0x826B +DEF _esp_init 0x8296 +DEF _win_xm_tpl 0x82A3 +DEF _win_about_tpl 0x82B5 +DEF _play_xm 0x8312 +DEF _wait_esc_key 0x853E +DEF _wait_frames 0x8546 +DEF _wc_screen_width 0x854F +DEF _wc_center 0x855C +DEF _about 0x8592 +DEF _unload_and_exit 0x85CC +DEF _leave_playing_and_exit 0x85FD +DEF _wait_for_manual_exit 0x8607 +DEF _error_esp 0x8631 +DEF _stop_on_error 0x8658 +DEF _error_oom 0x8664 +DEF _error_playback 0x8697 +DEF _copy_file_name 0x86CA +DEF _xm_draw_static_labels 0x86EF +DEF _xm_set_status_attr 0x876E +DEF _xm_set_status 0x87D2 +DEF _xm_set_status_code 0x87DA +DEF _put_hex2 0x8892 +DEF _put_dec3 0x88CF +DEF _put_time 0x892C +DEF _xm_draw_stats_labels 0x89D9 +DEF _draw_progress_bar 0x8A9B +DEF _xm_update_info 0x8B11 +DEF _main_start 0x8C8F +DEF _main 0x8D99 +DEF __divuchar 0x8DC2 +DEF __divu8 0x8DC4 +DEF __divu16 0x8DC7 +DEF __divuint 0x8DC7 +DEF _wc_key_space 0x8DF6 +DEF _wc_load512 0x8E00 +DEF __moduchar 0x8E15 +DEF __moduint 0x8E1C +DEF _wc_prsrw 0x8E21 +DEF _wc_prwow 0x8E57 +DEF _wc_key_enter 0x8E64 +DEF _wc_prm_pl 0x8E6E +DEF _wc_gedpl 0x8E7D +DEF _wc_key_pgdn 0x8E87 +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 _ret_sp 0xB800 DEF _filesize 0xB802 @@ -96,8 +102,10 @@ DEF _file_name 0xB80B DEF _total_samples 0xB82C DEF _xm_handle 0xB830 DEF _last_track_status 0xB831 -DEF _bar_attr_ofs 0xB88C -DEF _state_esp 0xB88E -DEF __modulong 0xB88F -DEF __divulong 0xB916 +DEF _win_xm 0xB832 +DEF _win_about 0xB844 +DEF _bar_attr_ofs 0xB8B0 +DEF _state_esp 0xB8B2 +DEF __modulong 0xB8B3 +DEF __divulong 0xB93A LOAD obj/out.ihx diff --git a/obj/out.rel b/obj/out.rel index fcf7683..6ffc0d8 100644 --- a/obj/out.rel +++ b/obj/out.rel @@ -1,5 +1,5 @@ XL4 -H 9 areas 48 global symbols +H 9 areas 50 global symbols M main O -mz80 sdcccall(1) S __divuint Ref00000000 @@ -9,69 +9,77 @@ S __moduchar Ref00000000 S __divuchar Ref00000000 S _wc_prsrw Ref00000000 S _wc_prwow Ref00000000 +S _wc_key_enter Ref00000000 S .__.ABS. Def00000000 S _wc_prm_pl Ref00000000 S __modulong Ref00000000 +S _wc_gedpl Ref00000000 S __divulong Ref00000000 S _wc_key_pgdn Ref00000000 S _wc_gadrw Ref00000000 S _wc_prsrw_attr Ref00000000 +S _wc_key_wait_release Ref00000000 S _wc_rresb Ref00000000 S _strlen Ref00000000 S _wc_key_esc Ref00000000 S _wc_key_pgup Ref00000000 S __moduint Ref00000000 -A _CODE size CCD flags 0 addr 0 -S _esp_send_dma Def00000127 +A _CODE size DBF flags 0 addr 0 +S _esp_send_dma Def0000016E S _esp_wr_reg8 Def000000D1 -S _main Def00000CA4 +S _main Def00000D96 S _esp_wr_end Def00000118 -S _put_time Def00000868 -S _xm_draw_static_labels Def0000062B -S _xm_set_status_attr Def000006AA -S _unload_and_exit Def0000050E -S _put_hex2 Def000007CE -S _main_start Def00000BCB +S _put_time Def00000929 +S _xm_draw_static_labels Def000006EC +S _xm_set_status_attr Def0000076B +S _esp_wait_not_busy Def00000127 +S _unload_and_exit Def000005C9 +S _put_hex2 Def0000088F +S _main_start Def00000C8C S _wc_exit Def00000000 -S _esp_create_obj Def0000022C -S _wait_esc_key Def000004EA -S _play_xm Def000002BE -S _copy_file_name Def00000606 -S _esp_wait_busy Def000001E5 +S _esp_create_obj Def00000268 +S _win_about_tpl Def000002B2 +S _wait_esc_key Def0000053B +S _wc_screen_width Def0000054C +S _play_xm Def0000030F +S _wc_center Def00000559 +S _copy_file_name Def000006C7 +S _esp_wait_busy Def0000022C S _esp_rd_reg32 Def00000037 -S _win_about Def00000276 -S _leave_playing_and_exit Def0000053F -S _stop_on_error Def00000594 -S _xm_set_status_code Def00000716 +S _win_xm_tpl Def000002A0 +S _leave_playing_and_exit Def000005FA +S _stop_on_error Def00000655 +S _xm_set_status_code Def000007D7 S _esp_rd_regs Def000000A5 -S _error_playback Def000005D3 -S _wait_for_manual_exit Def00000549 -S _error_esp Def0000056D -S _win_xm Def00000264 +S _error_playback Def00000694 +S _wait_for_manual_exit Def00000604 +S _error_esp Def0000062E S _esp_rd_reg8 Def0000001E S _esp_wr_reg32 Def000000E8 -S _wait_frames Def000004F2 -S _xm_draw_stats_labels Def00000915 -S _xm_update_info Def00000A4D -S _xm_set_status Def0000070E -S _esp_rd_end Def00000188 -S _error_oom Def000005A0 -S _draw_progress_bar Def000009D7 -S _put_dec3 Def0000080B +S _wait_frames Def00000543 +S _xm_draw_stats_labels Def000009D6 +S _xm_update_info Def00000B0E +S _xm_set_status Def000007CF +S _esp_rd_end Def000001CF +S _error_oom Def00000661 +S _draw_progress_bar Def00000A98 +S _put_dec3 Def000008CC S _esp_cmd Def00000005 -S _esp_init Def00000257 -S _about Def000004FB -S _esp_wait_status Def00000197 -A _DATA size 108E flags 0 addr 0 +S _esp_init Def00000293 +S _about Def0000058F +S _esp_wait_status Def000001DE +A _DATA size 10B2 flags 0 addr 0 S _last_track_status Def00001031 S _p_file_name Def00001009 S _xm_handle Def00001030 S _fs_buf Def00000000 -S _bar_attr_ofs Def0000108C +S _bar_attr_ofs Def000010B0 S _total_samples Def0000102C S _call_type Def00001007 +S _win_about Def00001044 S _ret_sp Def00001000 S _file_ext Def00001006 +S _win_xm Def00001032 S _filesize Def00001002 S _last_esp_status Def00001008 S _file_name Def0000100B @@ -131,29 +139,37 @@ T 32 10 00 00 R 00 00 01 00 T 32 10 00 00 R 00 00 01 00 -T 4A 10 00 00 +T 44 10 00 00 R 00 00 01 00 -T 4A 10 00 00 +T 44 10 00 00 R 00 00 01 00 -T 62 10 00 00 +T 56 10 00 00 R 00 00 01 00 -T 62 10 00 00 +T 56 10 00 00 R 00 00 01 00 -T 64 10 00 00 +T 6E 10 00 00 R 00 00 01 00 -T 64 10 00 00 +T 6E 10 00 00 R 00 00 01 00 -T 67 10 00 00 +T 86 10 00 00 R 00 00 01 00 -T 67 10 00 00 +T 86 10 00 00 R 00 00 01 00 -T 6C 10 00 00 +T 88 10 00 00 R 00 00 01 00 -T 6C 10 00 00 +T 88 10 00 00 R 00 00 01 00 -T 8C 10 00 00 +T 8B 10 00 00 R 00 00 01 00 -T 8C 10 00 00 +T 8B 10 00 00 +R 00 00 01 00 +T 90 10 00 00 +R 00 00 01 00 +T 90 10 00 00 +R 00 00 01 00 +T B0 10 00 00 +R 00 00 01 00 +T B0 10 00 00 R 00 00 01 00 T 00 00 00 00 R 00 00 02 00 @@ -241,73 +257,73 @@ T 24 01 00 00 D3 77 C9 R 00 00 00 00 T 27 01 00 00 R 00 00 00 00 -T 27 01 00 00 7D 01 AF 1A ED 79 7C 01 AF 1B ED 79 +T 27 01 00 00 DD E5 DD 21 00 00 DD 39 F5 F5 DD 75 R 00 00 00 00 -T 33 01 00 00 FD 21 02 00 FD 39 FD 7E 00 01 AF 1C +T 33 01 00 00 FE DD 74 FF 21 09 60 7E DD 77 FC 23 R 00 00 00 00 -T 3F 01 00 00 ED 79 FD 7E 01 FD 4E 02 FD 23 CB 39 +T 3F 01 00 00 7E DD 77 FD R 00 00 00 00 -T 4B 01 00 00 CB 1F 3D 01 AF 26 ED 79 FD 7E 02 3D +T 43 01 00 00 R 00 00 00 00 -T 57 01 00 00 01 AF 28 ED 79 3E 13 D3 77 3E 03 D3 +T 43 01 00 00 2A 09 60 7D DD 96 FC 4F 7C DD 9E FD R 00 00 00 00 -T 63 01 00 00 57 DB 57 DB 57 3E 82 01 AF 27 ED 79 +T 4F 01 00 00 47 79 DD 96 FE 78 DD 9E FF 30 0E 3E R 00 00 00 00 -T 6F 01 00 00 -R 00 00 00 00 -T 6F 01 00 00 3E 27 DB AF 07 38 F9 3E 03 D3 77 CD -R 00 00 00 00 -T 7B 01 00 00 18 01 21 64 00 CD E5 01 E1 F1 F1 33 -R 00 00 00 00 00 04 00 00 00 0A 00 00 -T 87 01 00 00 E9 -R 00 00 00 00 -T 88 01 00 00 -R 00 00 00 00 -T 88 01 00 00 3E 13 D3 77 3E 08 D3 57 DB 57 3E 03 -R 00 00 00 00 -T 94 01 00 00 D3 77 C9 -R 00 00 00 00 -T 97 01 00 00 -R 00 00 00 00 -T 97 01 00 00 DD E5 DD 21 00 00 DD 39 21 FB FF 39 -R 00 00 00 00 -T A3 01 00 00 F9 DD 77 FF DD 73 FD DD 72 FE 21 -R 00 00 00 00 -T AE 01 00 00 09 60 7E DD 77 FB 23 7E DD 77 FC -R 00 00 00 00 -T B9 01 00 00 -R 00 00 00 00 -T B9 01 00 00 2A 09 60 7D DD 96 FB 4F 7C DD 9E FC -R 00 00 00 00 -T C5 01 00 00 47 79 DD 96 FD 78 DD 9E FE 30 0F 3E -R 00 00 00 00 -T D1 01 00 00 01 CD 1E 00 DD 96 FF 20 DF 3E 01 C3 +T 5B 01 00 00 01 CD 1E 00 FE 02 28 E0 3E 01 C3 R 00 00 00 00 00 06 00 00 -T DD 01 00 00 E0 01 +T 66 01 00 00 69 01 R 00 00 00 00 00 04 00 00 -T DF 01 00 00 +T 68 01 00 00 R 00 00 00 00 -T DF 01 00 00 AF +T 68 01 00 00 AF R 00 00 00 00 -T E0 01 00 00 +T 69 01 00 00 R 00 00 00 00 -T E0 01 00 00 DD F9 DD E1 C9 +T 69 01 00 00 DD F9 DD E1 C9 R 00 00 00 00 -T E5 01 00 00 +T 6E 01 00 00 R 00 00 00 00 -T E5 01 00 00 DD E5 DD 21 00 00 DD 39 F5 F5 DD 75 +T 6E 01 00 00 7D 01 AF 1A ED 79 7C 01 AF 1B ED 79 R 00 00 00 00 -T F1 01 00 00 FE DD 74 FF 21 09 60 7E DD 77 FC 23 +T 7A 01 00 00 FD 21 02 00 FD 39 FD 7E 00 01 AF 1C R 00 00 00 00 -T FD 01 00 00 7E DD 77 FD +T 86 01 00 00 ED 79 FD 7E 01 FD 4E 02 FD 23 CB 39 R 00 00 00 00 -T 01 02 00 00 +T 92 01 00 00 CB 1F 3D 01 AF 26 ED 79 FD 7E 02 3D R 00 00 00 00 -T 01 02 00 00 2A 09 60 7D DD 96 FC 4F 7C DD 9E FD +T 9E 01 00 00 01 AF 28 ED 79 3E 13 D3 77 3E 03 D3 R 00 00 00 00 -T 0D 02 00 00 47 79 DD 96 FE 78 DD 9E FF 30 0E 3E +T AA 01 00 00 57 DB 57 DB 57 3E 82 01 AF 27 ED 79 R 00 00 00 00 -T 19 02 00 00 01 CD 1E 00 FE 02 28 E0 3E 01 C3 +T B6 01 00 00 +R 00 00 00 00 +T B6 01 00 00 3E 27 DB AF 07 38 F9 3E 03 D3 77 CD +R 00 00 00 00 +T C2 01 00 00 18 01 21 64 00 CD 27 01 E1 F1 F1 33 +R 00 00 00 00 00 04 00 00 00 0A 00 00 +T CE 01 00 00 E9 +R 00 00 00 00 +T CF 01 00 00 +R 00 00 00 00 +T CF 01 00 00 3E 13 D3 77 3E 08 D3 57 DB 57 3E 03 +R 00 00 00 00 +T DB 01 00 00 D3 77 C9 +R 00 00 00 00 +T DE 01 00 00 +R 00 00 00 00 +T DE 01 00 00 DD E5 DD 21 00 00 DD 39 21 FB FF 39 +R 00 00 00 00 +T EA 01 00 00 F9 DD 77 FF DD 73 FD DD 72 FE 21 +R 00 00 00 00 +T F5 01 00 00 09 60 7E DD 77 FB 23 7E DD 77 FC +R 00 00 00 00 +T 00 02 00 00 +R 00 00 00 00 +T 00 02 00 00 2A 09 60 7D DD 96 FB 4F 7C DD 9E FC +R 00 00 00 00 +T 0C 02 00 00 47 79 DD 96 FD 78 DD 9E FE 30 0F 3E +R 00 00 00 00 +T 18 02 00 00 01 CD 1E 00 DD 96 FF 20 DF 3E 01 C3 R 00 00 00 00 00 06 00 00 T 24 02 00 00 27 02 R 00 00 00 00 00 04 00 00 @@ -321,753 +337,833 @@ T 27 02 00 00 DD F9 DD E1 C9 R 00 00 00 00 T 2C 02 00 00 R 00 00 00 00 -T 2C 02 00 00 E5 D5 3E 03 CD E8 00 FD 21 02 00 FD +T 2C 02 00 00 EB ED 4B 09 60 +R 00 00 00 00 +T 31 02 00 00 +R 00 00 00 00 +T 31 02 00 00 C5 D5 3E 01 CD 1E 00 D1 C1 FE 02 28 R 00 00 00 00 00 09 00 00 -T 38 02 00 00 39 FD 6E 00 3E 02 CD D1 00 3E E0 CD +T 3D 02 00 00 0D 2A 09 60 BF ED 42 AF ED 52 38 E8 +R 00 00 00 00 +T 49 02 00 00 AF C9 +R 00 00 00 00 +T 4B 02 00 00 +R 00 00 00 00 +T 4B 02 00 00 2A 09 60 BF ED 42 AF ED 52 30 10 C5 +R 00 00 00 00 +T 57 02 00 00 D5 3E 01 CD 1E 00 D1 C1 FE 02 28 E8 +R 00 00 00 00 00 08 00 00 +T 63 02 00 00 3E 01 C9 +R 00 00 00 00 +T 66 02 00 00 +R 00 00 00 00 +T 66 02 00 00 AF C9 +R 00 00 00 00 +T 68 02 00 00 +R 00 00 00 00 +T 68 02 00 00 E5 D5 3E 03 CD E8 00 FD 21 02 00 FD +R 00 00 00 00 00 09 00 00 +T 74 02 00 00 39 FD 6E 00 3E 02 CD D1 00 3E E0 CD R 00 00 00 00 00 0B 00 00 -T 44 02 00 00 05 00 21 64 00 CD E5 01 3E 0B CD +T 80 02 00 00 05 00 21 64 00 CD 2C 02 3E 0B CD R 00 00 00 00 00 04 00 00 00 0A 00 00 -T 4F 02 00 00 1E 00 5F 16 00 E1 33 E9 +T 8B 02 00 00 1E 00 5F 16 00 E1 33 E9 R 00 00 00 00 00 04 00 00 -T 57 02 00 00 +T 93 02 00 00 R 00 00 00 00 -T 57 02 00 00 AF CD 05 00 CD 88 01 CD 18 01 3E 01 +T 93 02 00 00 AF CD 05 00 CD CF 01 CD 18 01 3E 01 R 00 00 00 00 00 06 00 00 00 09 00 00 00 0C 00 00 -T 63 02 00 00 C9 +T 9F 02 00 00 C9 R 00 00 00 00 -T 64 02 00 00 +T A0 02 00 00 R 00 00 00 00 -T 64 02 00 00 81 00 19 0A 28 0C 70 00 00 00 00 00 +T A0 02 00 00 81 00 19 0A 28 0C 70 00 00 00 00 00 R 00 00 00 00 -T 70 02 00 00 88 02 A2 02 A2 02 +T AC 02 00 00 C4 02 DE 02 DE 02 R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00 -T 76 02 00 00 +T B2 02 00 00 R 00 00 00 00 -T 76 02 00 00 01 00 16 0A 24 05 4F 00 00 00 00 00 +T B2 02 00 00 01 00 16 0A 24 07 70 00 00 00 00 00 R 00 00 00 00 -T 82 02 00 00 A3 02 A2 02 AC 02 +T BE 02 00 00 DF 02 DE 02 E8 02 R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00 -T 88 02 00 00 +T C4 02 00 00 R 00 00 00 00 -T 88 02 00 00 0E 20 58 4D 2F 58 4D 5A 2F 53 33 4D +T C4 02 00 00 0E 20 58 4D 2F 58 4D 5A 2F 53 33 4D R 00 00 00 00 -T 94 02 00 00 20 50 6C 61 79 65 72 20 76 30 2E 31 +T D0 02 00 00 20 50 6C 61 79 65 72 20 76 30 2E 31 R 00 00 00 00 -T A0 02 00 00 20 00 +T DC 02 00 00 20 00 R 00 00 00 00 -T A2 02 00 00 +T DE 02 00 00 R 00 00 00 00 -T A2 02 00 00 00 +T DE 02 00 00 00 R 00 00 00 00 -T A3 02 00 00 +T DF 02 00 00 R 00 00 00 00 -T A3 02 00 00 0E 20 41 62 6F 75 74 20 00 +T DF 02 00 00 0E 20 41 62 6F 75 74 20 00 R 00 00 00 00 -T AC 02 00 00 +T E8 02 00 00 R 00 00 00 00 -T AC 02 00 00 0E 0C 01 58 4D 20 50 6C 61 79 65 72 +T E8 02 00 00 0D 0E 58 4D 20 50 6C 61 79 65 72 20 R 00 00 00 00 -T B8 02 00 00 20 76 30 2E 31 00 +T F4 02 00 00 76 30 2E 31 0D 0E 62 79 20 41 6C 65 R 00 00 00 00 -T BE 02 00 00 +T 00 03 00 00 78 20 4B 6F 72 6F 63 68 69 6E 73 6B R 00 00 00 00 -T BE 02 00 00 DD E5 DD 21 00 00 DD 39 21 EC FF 39 +T 0C 03 00 00 69 79 00 R 00 00 00 00 -T CA 02 00 00 F9 3E A2 CD 05 00 21 64 00 CD E5 01 +T 0F 03 00 00 +R 00 00 00 00 +T 0F 03 00 00 DD E5 DD 21 00 00 DD 39 21 EC FF 39 +R 00 00 00 00 +T 1B 03 00 00 F9 3E A2 CD 05 00 21 64 00 CD 2C 02 R 00 00 00 00 00 08 00 00 00 0E 00 00 -T D6 02 00 00 3E E4 CD 05 00 21 64 00 CD E5 01 3A +T 27 03 00 00 3E E4 CD 05 00 21 64 00 CD 2C 02 3A R 00 00 00 00 00 07 00 00 00 0D 00 00 -T E2 02 00 00 06 10 3D 28 0A 3A 06 10 D6 02 28 08 +T 33 03 00 00 06 10 3D 28 0A 3A 06 10 D6 02 28 08 R 00 00 00 00 00 04 01 00 00 0A 01 00 -T EE 02 00 00 C3 FB 02 +T 3F 03 00 00 C3 4C 03 R 00 00 00 00 00 05 00 00 -T F1 02 00 00 +T 42 03 00 00 R 00 00 00 00 -T F1 02 00 00 3E 08 C3 FD 02 +T 42 03 00 00 3E 08 C3 4E 03 R 00 00 00 00 00 07 00 00 -T F6 02 00 00 +T 47 03 00 00 R 00 00 00 00 -T F6 02 00 00 3E 0C C3 FD 02 +T 47 03 00 00 3E 0C C3 4E 03 R 00 00 00 00 00 07 00 00 -T FB 02 00 00 +T 4C 03 00 00 R 00 00 00 00 -T FB 02 00 00 3E 05 +T 4C 03 00 00 3E 05 R 00 00 00 00 -T FD 02 00 00 +T 4E 03 00 00 R 00 00 00 00 -T FD 02 00 00 F5 33 ED 5B 02 10 2A 04 10 CD 2C 02 +T 4E 03 00 00 F5 33 ED 5B 02 10 2A 04 10 CD 68 02 R 00 00 00 00 00 08 01 00 00 0B 01 00 00 0E 00 00 -T 09 03 00 00 21 30 10 73 3E 01 CD 1E 00 32 08 10 +T 5A 03 00 00 21 30 10 73 3E 01 CD 1E 00 32 08 10 R 00 00 00 00 00 05 01 00 00 0B 00 00 00 0E 01 00 -T 15 03 00 00 3A 08 10 3D 28 04 AF C3 E5 04 +T 66 03 00 00 3A 08 10 3D 28 04 AF C3 36 05 R 00 00 00 00 00 05 01 00 00 0C 00 00 -T 1F 03 00 00 +T 70 03 00 00 R 00 00 00 00 -T 1F 03 00 00 21 0C 00 39 EB 21 02 10 01 04 00 ED +T 70 03 00 00 21 0C 00 39 EB 21 02 10 01 04 00 ED R 00 00 00 00 00 0A 01 00 -T 2B 03 00 00 B0 AF DD 77 FC DD 77 FD DD 77 FE DD +T 7C 03 00 00 B0 AF DD 77 FC DD 77 FD DD 77 FE DD R 00 00 00 00 -T 37 03 00 00 77 FF +T 88 03 00 00 77 FF R 00 00 00 00 -T 39 03 00 00 +T 8A 03 00 00 R 00 00 00 00 -T 39 03 00 00 DD 7E FB DD B6 FA DD B6 F9 DD B6 F8 +T 8A 03 00 00 DD 7E FB DD B6 FA DD B6 F9 DD B6 F8 R 00 00 00 00 -T 45 03 00 00 CA 4E 04 DD 7E F9 D6 10 DD 7E FA DE +T 96 03 00 00 CA 9F 04 DD 7E F9 D6 10 DD 7E FA DE R 00 00 00 00 00 05 00 00 -T 51 03 00 00 00 DD 7E FB DE 00 30 11 21 00 00 39 +T A2 03 00 00 00 DD 7E FB DE 00 30 11 21 00 00 39 R 00 00 00 00 -T 5D 03 00 00 EB 21 0C 00 39 01 04 00 ED B0 C3 +T AE 03 00 00 EB 21 0C 00 39 01 04 00 ED B0 C3 R 00 00 00 00 -T 68 03 00 00 79 03 +T B9 03 00 00 CA 03 R 00 00 00 00 00 04 00 00 -T 6A 03 00 00 +T BB 03 00 00 R 00 00 00 00 -T 6A 03 00 00 DD 36 EC 00 DD 36 ED 10 AF DD 77 EE +T BB 03 00 00 DD 36 EC 00 DD 36 ED 10 AF DD 77 EE R 00 00 00 00 -T 76 03 00 00 DD 77 EF +T C7 03 00 00 DD 77 EF R 00 00 00 00 -T 79 03 00 00 +T CA 03 00 00 R 00 00 00 00 -T 79 03 00 00 21 05 00 39 EB 21 00 00 39 01 04 00 +T CA 03 00 00 21 05 00 39 EB 21 00 00 39 01 04 00 R 00 00 00 00 -T 85 03 00 00 ED B0 DD 7E F1 C6 FF DD 7E F2 CE 01 +T D6 03 00 00 ED B0 DD 7E F1 C6 FF DD 7E F2 CE 01 R 00 00 00 00 -T 91 03 00 00 47 3E 00 CE 00 5F 3E 00 CE 00 57 48 +T E2 03 00 00 47 3E 00 CE 00 5F 3E 00 CE 00 57 48 R 00 00 00 00 -T 9D 03 00 00 43 5A CB 3B CB 18 CB 19 DD 71 F7 79 +T EE 03 00 00 43 5A CB 3B CB 18 CB 19 DD 71 F7 79 R 00 00 00 00 -T A9 03 00 00 F5 33 21 00 00 CD 00 00 21 00 00 E5 +T FA 03 00 00 F5 33 21 00 00 CD 00 00 21 00 00 E5 R 00 00 00 00 00 07 01 00 02 0A 02 00 -T B5 03 00 00 DD 6E F1 DD 66 F2 E5 3E 03 CD E8 00 +T 06 04 00 00 DD 6E F1 DD 66 F2 E5 3E 03 CD E8 00 R 00 00 00 00 00 0E 00 00 -T C1 03 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD 66 +T 12 04 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD 66 R 00 00 00 00 -T CD 03 00 00 FD E5 3E 07 CD E8 00 3E E1 CD 05 00 +T 1E 04 00 00 FD E5 3E 07 CD E8 00 3E E1 CD 05 00 R 00 00 00 00 00 09 00 00 00 0E 00 00 -T D9 03 00 00 11 64 00 3E 03 CD 97 01 DD 7E F7 DD +T 2A 04 00 00 11 64 00 3E 03 CD DE 01 DD 7E F7 DD R 00 00 00 00 00 0A 00 00 -T E5 03 00 00 77 F5 DD 36 F6 00 3A 02 60 DD 77 F7 +T 36 04 00 00 77 F5 DD 36 F6 00 3A 02 60 DD 77 F7 R 00 00 00 00 -T F1 03 00 00 DD 6E F5 26 00 E5 21 00 02 E5 DD 7E +T 42 04 00 00 DD 6E F5 26 00 E5 21 00 02 E5 DD 7E R 00 00 00 00 -T FD 03 00 00 F7 F5 33 21 00 00 CD 27 01 DD 5E F1 +T 4E 04 00 00 F7 F5 33 21 00 00 CD 6E 01 DD 5E F1 R 00 00 00 00 00 08 01 00 00 0B 00 00 -T 09 04 00 00 DD 56 F2 DD 6E FC DD 66 FD 19 DD 75 +T 5A 04 00 00 DD 56 F2 DD 6E FC DD 66 FD 19 DD 75 R 00 00 00 00 -T 15 04 00 00 FC DD 74 FD DD 7E FE DD 8E F3 DD 77 +T 66 04 00 00 FC DD 74 FD DD 7E FE DD 8E F3 DD 77 R 00 00 00 00 -T 21 04 00 00 FE 30 03 DD 34 FF +T 72 04 00 00 FE 30 03 DD 34 FF R 00 00 00 00 -T 27 04 00 00 +T 78 04 00 00 R 00 00 00 00 -T 27 04 00 00 DD 7E F8 DD 96 F1 DD 77 F8 DD 7E F9 +T 78 04 00 00 DD 7E F8 DD 96 F1 DD 77 F8 DD 7E F9 R 00 00 00 00 -T 33 04 00 00 DD 9E F2 DD 77 F9 DD 7E FA DD 9E F3 +T 84 04 00 00 DD 9E F2 DD 77 F9 DD 7E FA DD 9E F3 R 00 00 00 00 -T 3F 04 00 00 DD 77 FA DD 7E FB DD 9E F4 DD 77 FB +T 90 04 00 00 DD 77 FA DD 7E FB DD 9E F4 DD 77 FB R 00 00 00 00 -T 4B 04 00 00 C3 39 03 +T 9C 04 00 00 C3 8A 03 R 00 00 00 00 00 05 00 00 -T 4E 04 00 00 +T 9F 04 00 00 R 00 00 00 00 -T 4E 04 00 00 3A 06 10 3D 20 3A 3A 30 10 6F 3E 0B +T 9F 04 00 00 3A 06 10 3D 20 3A 3A 30 10 6F 3E 0B R 00 00 00 00 00 05 01 00 00 0B 01 00 -T 5A 04 00 00 CD D1 00 2E 05 3E 02 CD D1 00 2A +T AB 04 00 00 CD D1 00 2E 05 3E 02 CD D1 00 2A R 00 00 00 00 00 05 00 00 00 0C 00 00 -T 65 04 00 00 04 10 E5 2A 02 10 E5 3E 03 CD E8 00 +T B6 04 00 00 04 10 E5 2A 02 10 E5 3E 03 CD E8 00 R 00 00 00 00 00 04 01 00 00 08 01 00 00 0E 00 00 -T 71 04 00 00 3E F2 CD 05 00 21 FA 00 CD E5 01 3E +T C2 04 00 00 3E F2 CD 05 00 21 FA 00 CD 2C 02 3E R 00 00 00 00 00 07 00 00 00 0D 00 00 -T 7D 04 00 00 01 CD 1E 00 32 08 10 3A 08 10 3D 28 +T CE 04 00 00 01 CD 1E 00 32 08 10 3A 08 10 3D 28 R 00 00 00 00 00 06 00 00 00 09 01 00 00 0C 01 00 -T 89 04 00 00 04 AF C3 E5 04 +T DA 04 00 00 04 AF C3 36 05 R 00 00 00 00 00 07 00 00 -T 8E 04 00 00 +T DF 04 00 00 R 00 00 00 00 -T 8E 04 00 00 3E A0 CD 05 00 21 90 01 CD E5 01 3E +T DF 04 00 00 3E A0 CD 05 00 21 F4 01 CD 2C 02 3E R 00 00 00 00 00 07 00 00 00 0D 00 00 -T 9A 04 00 00 01 CD 1E 00 32 08 10 3A 08 10 3D 28 +T EB 04 00 00 01 CD 1E 00 32 08 10 3A 08 10 3D 28 R 00 00 00 00 00 06 00 00 00 09 01 00 00 0C 01 00 -T A6 04 00 00 04 AF C3 E5 04 +T F7 04 00 00 04 AF C3 36 05 R 00 00 00 00 00 07 00 00 -T AB 04 00 00 +T FC 04 00 00 R 00 00 00 00 -T AB 04 00 00 3A 30 10 6F 3E 0B CD D1 00 2E 01 3E +T FC 04 00 00 3A 30 10 6F 3E 0B CD D1 00 2E 01 3E R 00 00 00 00 00 05 01 00 00 0B 00 00 -T B7 04 00 00 3A CD D1 00 3E A6 CD 05 00 21 64 00 +T 08 05 00 00 3A CD D1 00 3E A6 CD 05 00 21 64 00 R 00 00 00 00 00 06 00 00 00 0B 00 00 -T C3 04 00 00 CD E5 01 3E A1 CD 05 00 21 64 00 CD +T 14 05 00 00 CD 2C 02 3E A1 CD 05 00 21 64 00 CD R 00 00 00 00 00 05 00 00 00 0A 00 00 -T CF 04 00 00 E5 01 3E 01 CD 1E 00 32 08 10 3A +T 20 05 00 00 2C 02 3E 01 CD 1E 00 32 08 10 3A R 00 00 00 00 00 04 00 00 00 09 00 00 00 0C 01 00 -T DA 04 00 00 08 10 3D 28 04 AF C3 E5 04 +T 2B 05 00 00 08 10 3D 28 04 AF C3 36 05 R 00 00 00 00 00 04 01 00 00 0B 00 00 -T E3 04 00 00 +T 34 05 00 00 R 00 00 00 00 -T E3 04 00 00 3E 01 +T 34 05 00 00 3E 01 R 00 00 00 00 -T E5 04 00 00 +T 36 05 00 00 R 00 00 00 00 -T E5 04 00 00 DD F9 DD E1 C9 +T 36 05 00 00 DD F9 DD E1 C9 R 00 00 00 00 -T EA 04 00 00 +T 3B 05 00 00 R 00 00 00 00 -T EA 04 00 00 +T 3B 05 00 00 R 00 00 00 00 -T EA 04 00 00 76 CD 00 00 B7 28 F9 C9 -R 00 00 00 00 02 06 10 00 -T F2 04 00 00 +T 3B 05 00 00 76 CD 00 00 B7 28 F9 C9 +R 00 00 00 00 02 06 13 00 +T 43 05 00 00 R 00 00 00 00 -T F2 04 00 00 4F +T 43 05 00 00 4F R 00 00 00 00 -T F3 04 00 00 +T 44 05 00 00 R 00 00 00 00 -T F3 04 00 00 79 0D B7 C8 76 C3 F3 04 +T 44 05 00 00 79 0D B7 C8 76 C3 44 05 R 00 00 00 00 00 0A 00 00 -T FB 04 00 00 +T 4C 05 00 00 R 00 00 00 00 -T FB 04 00 00 21 76 02 CD 00 00 CD EA 04 21 -R 00 00 00 00 00 05 00 00 02 08 06 00 00 0B 00 00 -T 05 05 00 00 76 02 CD 00 00 AF C3 00 00 -R 00 00 00 00 00 04 00 00 02 07 0E 00 00 0B 00 00 -T 0E 05 00 00 +T 4C 05 00 00 3A 0E 60 D6 24 38 03 3E 5A C9 R 00 00 00 00 -T 0E 05 00 00 3B FD 21 00 00 FD 39 FD 77 00 3E A2 +T 56 05 00 00 R 00 00 00 00 -T 1A 05 00 00 CD 05 00 21 64 00 CD E5 01 3E E4 CD +T 56 05 00 00 3E 50 C9 +R 00 00 00 00 +T 59 05 00 00 +R 00 00 00 00 +T 59 05 00 00 DD E5 DD 21 00 00 DD 39 F5 DD 77 FF +R 00 00 00 00 +T 65 05 00 00 DD 75 FE 7D DD 96 FF 30 1B DD 7E FF +R 00 00 00 00 +T 71 05 00 00 DD 5E FE 93 4F 9F 47 59 50 CB 78 28 +R 00 00 00 00 +T 7D 05 00 00 03 59 50 13 +R 00 00 00 00 +T 81 05 00 00 +R 00 00 00 00 +T 81 05 00 00 7B CB 2A CB 1F C3 8A 05 +R 00 00 00 00 00 0A 00 00 +T 89 05 00 00 +R 00 00 00 00 +T 89 05 00 00 AF +R 00 00 00 00 +T 8A 05 00 00 +R 00 00 00 00 +T 8A 05 00 00 DD F9 DD E1 C9 +R 00 00 00 00 +T 8F 05 00 00 +R 00 00 00 00 +T 8F 05 00 00 11 44 10 21 B2 02 01 12 00 ED B0 21 +R 00 00 00 00 00 05 01 00 00 08 00 00 +T 9B 05 00 00 48 10 6E E5 CD 4C 05 E1 CD 59 05 32 +R 00 00 00 00 00 04 01 00 00 09 00 00 00 0D 00 00 +T A7 05 00 00 46 10 21 49 10 6E 3A 0E 60 CD 59 05 +R 00 00 00 00 00 04 01 00 00 07 01 00 00 0E 00 00 +T B3 05 00 00 32 47 10 21 44 10 CD 00 00 CD +R 00 00 00 00 00 05 01 00 00 08 01 00 02 0B 06 00 +T BD 05 00 00 3B 05 21 44 10 CD 00 00 AF C3 +R 00 00 00 00 00 04 00 00 00 07 01 00 02 0A 11 00 +T C7 05 00 00 00 00 +R 00 00 00 00 00 04 00 00 +T C9 05 00 00 +R 00 00 00 00 +T C9 05 00 00 3B FD 21 00 00 FD 39 FD 77 00 3E A2 +R 00 00 00 00 +T D5 05 00 00 CD 05 00 21 64 00 CD 2C 02 3E E4 CD R 00 00 00 00 00 05 00 00 00 0B 00 00 -T 26 05 00 00 05 00 21 64 00 CD E5 01 21 64 02 CD -R 00 00 00 00 00 04 00 00 00 0A 00 00 00 0D 00 00 -T 32 05 00 00 00 00 21 00 00 39 7E 33 C3 00 00 33 -R 00 00 00 00 02 04 0E 00 00 0D 00 00 -T 3E 05 00 00 C9 +T E1 05 00 00 05 00 21 64 00 CD 2C 02 21 32 10 CD +R 00 00 00 00 00 04 00 00 00 0A 00 00 00 0D 01 00 +T ED 05 00 00 00 00 21 00 00 39 7E 33 C3 00 00 33 +R 00 00 00 00 02 04 11 00 00 0D 00 00 +T F9 05 00 00 C9 R 00 00 00 00 -T 3F 05 00 00 +T FA 05 00 00 R 00 00 00 00 -T 3F 05 00 00 21 64 02 CD 00 00 AF C3 00 00 -R 00 00 00 00 00 05 00 00 02 08 0E 00 00 0C 00 00 -T 49 05 00 00 +T FA 05 00 00 21 32 10 CD 00 00 AF C3 00 00 +R 00 00 00 00 00 05 01 00 02 08 11 00 00 0C 00 00 +T 04 06 00 00 R 00 00 00 00 -T 49 05 00 00 +T 04 06 00 00 R 00 00 00 00 -T 49 05 00 00 76 CD 00 00 B7 28 05 3E 02 CD 0E 05 -R 00 00 00 00 02 06 0B 00 00 0E 00 00 -T 55 05 00 00 +T 04 06 00 00 76 CD 00 00 B7 20 06 CD 00 00 B7 28 +R 00 00 00 00 02 06 0D 00 02 0C 07 00 +T 10 06 00 00 05 R 00 00 00 00 -T 55 05 00 00 CD 00 00 B7 28 05 3E 04 CD 0E 05 -R 00 00 00 00 02 05 11 00 00 0D 00 00 -T 60 05 00 00 +T 11 06 00 00 R 00 00 00 00 -T 60 05 00 00 CD 00 00 B7 28 E3 AF CD 0E 05 C3 -R 00 00 00 00 02 05 10 00 00 0C 00 00 -T 6B 05 00 00 49 05 +T 11 06 00 00 3E 02 CD C9 05 +R 00 00 00 00 00 07 00 00 +T 16 06 00 00 +R 00 00 00 00 +T 16 06 00 00 CD 00 00 B7 28 05 3E 04 CD C9 05 +R 00 00 00 00 02 05 14 00 00 0D 00 00 +T 21 06 00 00 +R 00 00 00 00 +T 21 06 00 00 CD 00 00 B7 28 DD AF CD C9 05 C3 +R 00 00 00 00 02 05 13 00 00 0C 00 00 +T 2C 06 00 00 04 06 R 00 00 00 00 00 04 00 00 -T 6D 05 00 00 +T 2E 06 00 00 R 00 00 00 00 -T 6D 05 00 00 3A 00 00 F5 33 21 85 05 CD 16 07 CD +T 2E 06 00 00 3A 00 00 F5 33 21 46 06 CD D7 07 CD R 00 00 00 00 00 05 02 00 00 0A 00 00 00 0D 00 00 -T 79 05 00 00 EA 04 21 64 02 CD 00 00 AF C3 -R 00 00 00 00 00 04 00 00 00 07 00 00 02 0A 0E 00 -T 83 05 00 00 00 00 +T 3A 06 00 00 3B 05 21 32 10 CD 00 00 AF C3 +R 00 00 00 00 00 04 00 00 00 07 01 00 02 0A 11 00 +T 44 06 00 00 00 00 R 00 00 00 00 00 04 00 00 -T 85 05 00 00 +T 46 06 00 00 R 00 00 00 00 -T 85 05 00 00 4E 6F 20 45 53 50 33 32 20 66 6F 75 +T 46 06 00 00 4E 6F 20 45 53 50 33 32 20 66 6F 75 R 00 00 00 00 -T 91 05 00 00 6E 64 00 +T 52 06 00 00 6E 64 00 R 00 00 00 00 -T 94 05 00 00 +T 55 06 00 00 R 00 00 00 00 -T 94 05 00 00 3E 01 CD 00 00 FE 02 3E 01 C8 AF C9 -R 00 00 00 00 02 07 08 00 -T A0 05 00 00 +T 55 06 00 00 3E 01 CD 00 00 FE 02 3E 01 C8 AF C9 +R 00 00 00 00 02 07 09 00 +T 61 06 00 00 R 00 00 00 00 -T A0 05 00 00 3A 08 10 F5 33 21 C4 05 CD 16 07 CD +T 61 06 00 00 3A 08 10 F5 33 21 85 06 CD D7 07 CD R 00 00 00 00 00 05 01 00 00 0A 00 00 00 0D 00 00 -T AC 05 00 00 94 05 B7 28 03 CD 49 05 +T 6D 06 00 00 55 06 B7 28 03 CD 04 06 R 00 00 00 00 00 04 00 00 00 0A 00 00 -T B4 05 00 00 +T 75 06 00 00 R 00 00 00 00 -T B4 05 00 00 3E 32 CD F2 04 21 64 02 CD 00 00 3E -R 00 00 00 00 00 07 00 00 00 0A 00 00 02 0D 0E 00 -T C0 05 00 00 02 C3 00 00 +T 75 06 00 00 3E 32 CD 43 05 21 32 10 CD 00 00 3E +R 00 00 00 00 00 07 00 00 00 0A 01 00 02 0D 11 00 +T 81 06 00 00 02 C3 00 00 R 00 00 00 00 00 06 00 00 -T C4 05 00 00 -R 00 00 00 00 -T C4 05 00 00 46 69 6C 65 20 74 6F 6F 20 6C 61 72 -R 00 00 00 00 -T D0 05 00 00 67 65 00 -R 00 00 00 00 -T D3 05 00 00 -R 00 00 00 00 -T D3 05 00 00 3A 08 10 F5 33 21 F7 05 CD 16 07 CD -R 00 00 00 00 00 05 01 00 00 0A 00 00 00 0D 00 00 -T DF 05 00 00 94 05 B7 28 03 CD 49 05 -R 00 00 00 00 00 04 00 00 00 0A 00 00 -T E7 05 00 00 -R 00 00 00 00 -T E7 05 00 00 3E 32 CD F2 04 21 64 02 CD 00 00 3E -R 00 00 00 00 00 07 00 00 00 0A 00 00 02 0D 0E 00 -T F3 05 00 00 02 C3 00 00 -R 00 00 00 00 00 06 00 00 -T F7 05 00 00 -R 00 00 00 00 -T F7 05 00 00 50 6C 61 79 62 61 63 6B 20 65 72 72 -R 00 00 00 00 -T 03 06 00 00 6F 72 00 -R 00 00 00 00 -T 06 06 00 00 -R 00 00 00 00 -T 06 06 00 00 ED 4B 09 10 1E 00 -R 00 00 00 00 00 06 01 00 -T 0C 06 00 00 -R 00 00 00 00 -T 0C 06 00 00 6B 26 00 09 56 3E 0B 10 00 00 83 6F -R 00 00 00 00 09 0A 01 00 -T 15 06 00 00 3E 0B 10 00 00 CE 00 67 7A B7 28 0A -R 00 00 00 00 89 05 01 00 -T 1E 06 00 00 7B D6 20 30 05 72 1C C3 0C 06 -R 00 00 00 00 00 0C 00 00 -T 28 06 00 00 -R 00 00 00 00 -T 28 06 00 00 36 00 C9 -R 00 00 00 00 -T 2B 06 00 00 -R 00 00 00 00 -T 2B 06 00 00 21 05 00 E5 21 02 01 E5 11 77 06 21 -R 00 00 00 00 00 0D 00 00 -T 37 06 00 00 64 02 CD 00 00 21 0B 10 CD -R 00 00 00 00 00 04 00 00 02 07 05 00 00 0A 01 00 -T 40 06 00 00 00 00 3E 71 F5 33 D5 21 02 07 E5 11 -R 00 00 00 00 02 04 0F 00 -T 4C 06 00 00 0B 10 21 64 02 CD 00 00 21 07 00 E5 -R 00 00 00 00 00 04 01 00 00 07 00 00 02 0A 0D 00 -T 58 06 00 00 21 03 01 E5 11 7D 06 21 64 02 CD -R 00 00 00 00 00 09 00 00 00 0C 00 00 -T 63 06 00 00 00 00 21 24 00 E5 21 0A 02 E5 11 -R 00 00 00 00 02 04 05 00 -T 6E 06 00 00 85 06 21 64 02 CD 00 00 C9 -R 00 00 00 00 00 04 00 00 00 07 00 00 02 0A 05 00 -T 77 06 00 00 -R 00 00 00 00 -T 77 06 00 00 46 69 6C 65 3A 00 -R 00 00 00 00 -T 7D 06 00 00 -R 00 00 00 00 -T 7D 06 00 00 53 74 61 74 75 73 3A 00 -R 00 00 00 00 T 85 06 00 00 R 00 00 00 00 -T 85 06 00 00 50 67 55 70 2F 50 67 44 6E 3A 54 72 +T 85 06 00 00 46 69 6C 65 20 74 6F 6F 20 6C 61 72 R 00 00 00 00 -T 91 06 00 00 61 63 6B 20 45 73 63 3A 53 74 6F 70 +T 91 06 00 00 67 65 00 R 00 00 00 00 -T 9D 06 00 00 20 53 70 61 63 65 3A 4C 65 61 76 65 +T 94 06 00 00 R 00 00 00 00 -T A9 06 00 00 00 +T 94 06 00 00 3A 08 10 F5 33 21 B8 06 CD D7 07 CD +R 00 00 00 00 00 05 01 00 00 0A 00 00 00 0D 00 00 +T A0 06 00 00 55 06 B7 28 03 CD 04 06 +R 00 00 00 00 00 04 00 00 00 0A 00 00 +T A8 06 00 00 R 00 00 00 00 -T AA 06 00 00 -R 00 00 00 00 -T AA 06 00 00 DD E5 DD 21 00 00 DD 39 F5 1E 00 -R 00 00 00 00 -T B5 06 00 00 -R 00 00 00 00 -T B5 06 00 00 7B 85 4F 3E 00 8C 47 0A 4F B7 28 1F -R 00 00 00 00 -T C1 06 00 00 7B D6 18 30 1A 3E 32 10 00 00 83 DD -R 00 00 00 00 09 0A 01 00 -T CA 06 00 00 77 FE 3E 32 10 00 00 CE 00 DD 77 FF -R 00 00 00 00 89 07 01 00 -T D3 06 00 00 E5 DD 6E FE DD 66 FF 71 E1 1C C3 -R 00 00 00 00 -T DE 06 00 00 B5 06 -R 00 00 00 00 00 04 00 00 -T E0 06 00 00 -R 00 00 00 00 -T E0 06 00 00 -R 00 00 00 00 -T E0 06 00 00 7B D6 18 30 0C 21 32 10 16 00 19 1C -R 00 00 00 00 00 0A 01 00 -T EC 06 00 00 36 20 C3 E0 06 -R 00 00 00 00 00 07 00 00 -T F1 06 00 00 -R 00 00 00 00 -T F1 06 00 00 21 64 02 DD 7E 04 F5 33 11 18 00 D5 -R 00 00 00 00 00 05 00 00 -T FD 06 00 00 11 03 09 D5 11 32 10 CD 00 00 DD F9 -R 00 00 00 00 00 09 01 00 02 0C 0D 00 -T 09 07 00 00 DD E1 E1 33 E9 -R 00 00 00 00 -T 0E 07 00 00 -R 00 00 00 00 -T 0E 07 00 00 3E 71 F5 33 CD AA 06 C9 -R 00 00 00 00 00 09 00 00 -T 16 07 00 00 -R 00 00 00 00 -T 16 07 00 00 DD E5 DD 21 00 00 DD 39 3B EB 0E 00 -R 00 00 00 00 -T 22 07 00 00 -R 00 00 00 00 -T 22 07 00 00 69 26 00 19 46 3E 4A 10 00 00 81 6F -R 00 00 00 00 09 0A 01 00 -T 2B 07 00 00 3E 4A 10 00 00 CE 00 67 79 3C DD 77 -R 00 00 00 00 89 05 01 00 -T 34 07 00 00 FF 78 B7 28 0C 79 D6 11 30 07 70 DD -R 00 00 00 00 -T 40 07 00 00 4E FF C3 22 07 -R 00 00 00 00 00 07 00 00 -T 45 07 00 00 -R 00 00 00 00 -T 45 07 00 00 DD 4E FF 36 20 69 0C 26 00 11 4A 10 -R 00 00 00 00 00 0E 01 00 -T 51 07 00 00 19 36 28 69 0C 26 00 11 4A 10 19 36 -R 00 00 00 00 00 0C 01 00 -T 5D 07 00 00 30 69 0C 26 00 11 4A 10 19 36 78 69 -R 00 00 00 00 00 0A 01 00 -T 69 07 00 00 0C 26 00 11 4A 10 19 DD 7E 04 07 07 -R 00 00 00 00 00 08 01 00 -T 75 07 00 00 07 07 E6 0F C6 BD 07 00 00 5F 3E 00 -R 00 00 00 00 09 09 00 00 -T 7E 07 00 00 CE BD 07 00 00 57 1A 77 69 0C 26 00 -R 00 00 00 00 89 05 00 00 -T 87 07 00 00 11 4A 10 19 DD 7E 04 E6 0F C6 -R 00 00 00 00 00 05 01 00 -T 91 07 00 00 BD 07 00 00 5F 3E 00 CE BD 07 00 00 -R 00 00 00 00 09 04 00 00 89 0C 00 00 -T 97 07 00 00 57 1A 77 69 0C 26 00 11 4A 10 19 36 -R 00 00 00 00 00 0C 01 00 -T A3 07 00 00 29 69 26 00 11 4A 10 19 36 00 3E 72 -R 00 00 00 00 00 09 01 00 -T AF 07 00 00 F5 33 21 4A 10 CD AA 06 33 DD E1 E1 -R 00 00 00 00 00 07 01 00 00 0A 00 00 -T BB 07 00 00 33 E9 -R 00 00 00 00 -T BD 07 00 00 -R 00 00 00 00 -T BD 07 00 00 30 31 32 33 34 35 36 37 38 39 41 42 -R 00 00 00 00 -T C9 07 00 00 43 44 45 46 00 -R 00 00 00 00 -T CE 07 00 00 -R 00 00 00 00 -T CE 07 00 00 DD E5 DD 21 00 00 DD 39 EB 01 FA 07 -R 00 00 00 00 00 0E 00 00 -T DA 07 00 00 DD 7E 04 07 07 07 07 E6 0F 6F 26 00 -R 00 00 00 00 -T E6 07 00 00 09 7E 12 13 DD 7E 04 E6 0F 6F 26 00 -R 00 00 00 00 -T F2 07 00 00 09 7E 12 DD E1 E1 33 E9 -R 00 00 00 00 -T FA 07 00 00 -R 00 00 00 00 -T FA 07 00 00 30 31 32 33 34 35 36 37 38 39 41 42 -R 00 00 00 00 -T 06 08 00 00 43 44 45 46 00 -R 00 00 00 00 -T 0B 08 00 00 -R 00 00 00 00 -T 0B 08 00 00 DD E5 DD 21 00 00 DD 39 F5 4D 44 E1 -R 00 00 00 00 -T 17 08 00 00 D5 C5 11 64 00 DD 6E FE DD 66 FF CD -R 00 00 00 00 -T 23 08 00 00 00 00 EB 11 0A 00 CD 00 00 C1 7B C6 -R 00 00 00 00 02 04 00 00 02 0B 12 00 -T 2F 08 00 00 30 02 69 60 23 E5 C5 11 0A 00 DD 6E -R 00 00 00 00 -T 3B 08 00 00 FE DD 66 FF CD 00 00 EB 11 0A 00 CD -R 00 00 00 00 02 09 00 00 -T 47 08 00 00 00 00 C1 E1 7B C6 30 77 03 03 C5 11 -R 00 00 00 00 02 04 12 00 -T 53 08 00 00 0A 00 DD 6E FE DD 66 FF CD 00 00 C1 -R 00 00 00 00 02 0D 12 00 -T 5F 08 00 00 7B C6 30 02 DD F9 DD E1 C9 -R 00 00 00 00 -T 68 08 00 00 -R 00 00 00 00 -T 68 08 00 00 DD E5 DD 21 00 00 DD 39 E5 21 00 00 -R 00 00 00 00 -T 74 08 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 DD 6E -R 00 00 00 00 -T 80 08 00 00 06 DD 66 07 CD 00 00 F1 F1 01 00 00 -R 00 00 00 00 02 09 0A 00 -T 8C 08 00 00 C5 0E 64 C5 CD 00 00 F1 F1 4B C5 21 -R 00 00 00 00 02 09 09 00 -T 98 08 00 00 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 -R 00 00 00 00 -T A4 08 00 00 DD 6E 06 DD 66 07 CD 00 00 F1 F1 C1 -R 00 00 00 00 02 0B 09 00 -T B0 08 00 00 51 D5 2E 0A 7A CD 00 00 7B 2E 0A CD -R 00 00 00 00 02 0A 04 00 -T BC 08 00 00 00 00 7B D1 C6 30 E1 E5 77 C1 C5 03 -R 00 00 00 00 02 04 03 00 -T C8 08 00 00 C5 D5 2E 0A 7A CD 00 00 7B D1 C1 C6 -R 00 00 00 00 02 0A 03 00 -T D4 08 00 00 30 02 E1 E5 23 23 36 3A C1 C5 03 03 -R 00 00 00 00 -T E0 08 00 00 03 C5 D5 2E 0A 7B CD 00 00 7B 2E 0A -R 00 00 00 00 02 0B 04 00 -T EC 08 00 00 CD 00 00 7B D1 C1 C6 30 02 DD 7E FE -R 00 00 00 00 02 05 03 00 -T F8 08 00 00 C6 04 4F DD 7E FF CE 00 47 C5 2E 0A -R 00 00 00 00 -T 04 09 00 00 7B CD 00 00 7B C1 C6 30 02 DD F9 DD -R 00 00 00 00 02 06 03 00 -T 10 09 00 00 E1 E1 F1 F1 E9 -R 00 00 00 00 -T 15 09 00 00 -R 00 00 00 00 -T 15 09 00 00 21 09 00 E5 21 04 01 E5 11 B4 09 21 -R 00 00 00 00 00 0D 00 00 -T 21 09 00 00 64 02 CD 00 00 21 07 00 E5 21 04 0C -R 00 00 00 00 00 04 00 00 02 07 05 00 -T 2D 09 00 00 E5 11 BE 09 21 64 02 CD 00 00 21 -R 00 00 00 00 00 06 00 00 00 09 00 00 02 0C 05 00 -T 38 09 00 00 06 00 E5 21 04 15 E5 11 C6 09 21 -R 00 00 00 00 00 0C 00 00 -T 43 09 00 00 64 02 CD 00 00 21 05 00 E5 21 06 01 -R 00 00 00 00 00 04 00 00 02 07 05 00 -T 4F 09 00 00 E5 11 CD 09 21 64 02 CD 00 00 21 -R 00 00 00 00 00 06 00 00 00 09 00 00 02 0C 05 00 -T 5A 09 00 00 03 00 E5 21 06 0C E5 11 D3 09 21 -R 00 00 00 00 00 0C 00 00 -T 65 09 00 00 64 02 CD 00 00 11 6C 10 0E 00 -R 00 00 00 00 00 04 00 00 02 07 05 00 00 0A 01 00 -T 6F 09 00 00 -R 00 00 00 00 -T 6F 09 00 00 69 26 00 19 36 20 0C 79 D6 20 38 F4 -R 00 00 00 00 -T 7B 09 00 00 21 20 00 E5 21 08 04 E5 21 64 02 CD -R 00 00 00 00 00 0D 00 00 -T 87 09 00 00 00 00 21 08 04 E5 21 64 02 CD 00 00 -R 00 00 00 00 02 04 05 00 00 0B 00 00 02 0E 0C 00 -T 93 09 00 00 7A E6 3F 57 CB FB ED 53 8C 10 0E 00 -R 00 00 00 00 00 0C 01 00 -T 9F 09 00 00 -R 00 00 00 00 -T 9F 09 00 00 2A 8C 10 5D 7C C6 C0 57 69 26 00 19 -R 00 00 00 00 00 05 01 00 -T AB 09 00 00 36 07 0C 79 D6 20 38 EC C9 -R 00 00 00 00 -T B4 09 00 00 -R 00 00 00 00 -T B4 09 00 00 50 61 74 74 65 72 6E 3A 23 00 -R 00 00 00 00 -T BE 09 00 00 -R 00 00 00 00 -T BE 09 00 00 20 20 52 6F 77 3A 23 00 -R 00 00 00 00 -T C6 09 00 00 -R 00 00 00 00 -T C6 09 00 00 20 20 42 50 4D 3A 00 -R 00 00 00 00 -T CD 09 00 00 -R 00 00 00 00 -T CD 09 00 00 54 69 6D 65 3A 00 -R 00 00 00 00 -T D3 09 00 00 -R 00 00 00 00 -T D3 09 00 00 20 2F 20 00 -R 00 00 00 00 -T D7 09 00 00 -R 00 00 00 00 -T D7 09 00 00 DD E5 DD 21 00 00 DD 39 4B 42 EB DD -R 00 00 00 00 -T E3 09 00 00 7E 07 DD B6 06 DD B6 05 DD B6 04 28 -R 00 00 00 00 -T EF 09 00 00 30 69 60 3E 05 -R 00 00 00 00 -T F4 09 00 00 -R 00 00 00 00 -T F4 09 00 00 29 CB 13 CB 12 3D 20 F8 DD 4E 06 DD -R 00 00 00 00 -T 00 0A 00 00 46 07 C5 DD 4E 04 DD 46 05 C5 EB CD -R 00 00 00 00 -T 0C 0A 00 00 00 00 F1 F1 4B 42 3E 20 BB 3E 00 9A -R 00 00 00 00 02 04 0A 00 -T 18 0A 00 00 30 09 01 20 00 C3 23 0A -R 00 00 00 00 00 0A 00 00 -T 20 0A 00 00 -R 00 00 00 00 -T 20 0A 00 00 01 00 00 -R 00 00 00 00 -T 23 0A 00 00 -R 00 00 00 00 -T 23 0A 00 00 11 00 00 -R 00 00 00 00 -T 26 0A 00 00 -R 00 00 00 00 -T 26 0A 00 00 2A 8C 10 7C C6 C0 67 19 7B 91 7A 98 -R 00 00 00 00 00 05 01 00 -T 32 0A 00 00 30 05 3E 40 C3 3B 0A -R 00 00 00 00 00 09 00 00 -T 39 0A 00 00 -R 00 00 00 00 -T 39 0A 00 00 3E 07 -R 00 00 00 00 -T 3B 0A 00 00 -R 00 00 00 00 -T 3B 0A 00 00 77 13 6B 62 7D D6 20 7C DE 00 38 DF -R 00 00 00 00 -T 47 0A 00 00 DD E1 E1 F1 F1 E9 -R 00 00 00 00 -T 4D 0A 00 00 -R 00 00 00 00 -T 4D 0A 00 00 DD E5 DD 21 00 00 DD 39 21 F8 FF 39 -R 00 00 00 00 -T 59 0A 00 00 F9 3A 30 10 6F 3E 0B CD D1 00 3E A8 -R 00 00 00 00 00 06 01 00 00 0C 00 00 -T 65 0A 00 00 CD 05 00 21 32 00 CD E5 01 3E 28 CD -R 00 00 00 00 00 05 00 00 00 0B 00 00 -T 71 0A 00 00 1E 00 DD 77 FF 3A 31 10 D6 21 20 1D -R 00 00 00 00 00 04 00 00 00 0A 01 00 -T 7D 0A 00 00 DD 7E FF D6 20 20 16 3E E4 CD 05 00 -R 00 00 00 00 00 0E 00 00 -T 89 0A 00 00 21 64 00 CD E5 01 21 64 02 CD 00 00 -R 00 00 00 00 00 08 00 00 00 0B 00 00 02 0E 0E 00 -T 95 0A 00 00 3E 02 CD 00 00 -R 00 00 00 00 00 07 00 00 -T 9A 0A 00 00 -R 00 00 00 00 -T 9A 0A 00 00 DD 7E FF 32 31 10 3E 2B CD 1E 00 DD -R 00 00 00 00 00 08 01 00 00 0D 00 00 -T A6 0A 00 00 77 FA 3E 2C CD 1E 00 DD 77 FB 3E 02 -R 00 00 00 00 00 09 00 00 -T B2 0A 00 00 F5 33 21 01 00 39 EB 3E 31 CD A5 00 -R 00 00 00 00 00 0E 00 00 -T BE 0A 00 00 3E 2D CD 37 00 DD 73 FC DD 72 FD DD -R 00 00 00 00 00 07 00 00 -T CA 0A 00 00 75 FE DD 74 FF 3A 2F 10 FD 21 2C 10 -R 00 00 00 00 00 0A 01 00 00 0E 01 00 -T D6 0A 00 00 FD B6 02 FD B6 01 FD B6 00 20 0C 3E -R 00 00 00 00 -T E2 0A 00 00 36 CD 37 00 ED 53 2C 10 22 2E 10 -R 00 00 00 00 00 06 00 00 00 0A 01 00 00 0D 01 00 -T ED 0A 00 00 -R 00 00 00 00 -T ED 0A 00 00 DD 7E FA F5 33 21 62 10 CD CE 07 3E -R 00 00 00 00 00 0A 01 00 00 0D 00 00 -T F9 0A 00 00 71 F5 33 21 02 00 E5 21 04 0A E5 11 -R 00 00 00 00 -T 05 0B 00 00 62 10 21 64 02 CD 00 00 DD 7E FB F5 -R 00 00 00 00 00 04 01 00 00 07 00 00 02 0A 0D 00 -T 11 0B 00 00 33 21 62 10 CD CE 07 3E 71 F5 33 21 -R 00 00 00 00 00 06 01 00 00 09 00 00 -T 1D 0B 00 00 02 00 E5 21 04 13 E5 11 62 10 21 -R 00 00 00 00 00 0C 01 00 -T 28 0B 00 00 64 02 CD 00 00 D1 D5 21 64 10 CD -R 00 00 00 00 00 04 00 00 02 07 0D 00 00 0C 01 00 -T 33 0B 00 00 0B 08 3E 71 F5 33 21 03 00 E5 21 -R 00 00 00 00 00 04 00 00 -T 3E 0B 00 00 04 1B E5 11 64 10 21 64 02 CD 00 00 -R 00 00 00 00 00 08 01 00 00 0B 00 00 02 0E 0D 00 -T 4A 0B 00 00 21 00 00 E5 21 44 AC E5 DD 5E FC DD -R 00 00 00 00 -T 56 0B 00 00 56 FD DD 6E FE DD 66 FF CD 00 00 F1 -R 00 00 00 00 02 0D 0A 00 -T 62 0B 00 00 E3 D5 21 67 10 CD 68 08 3E 71 F5 33 -R 00 00 00 00 00 07 01 00 00 0A 00 00 -T 6E 0B 00 00 21 05 00 E5 21 06 07 E5 11 67 10 21 -R 00 00 00 00 00 0D 01 00 -T 7A 0B 00 00 64 02 CD 00 00 21 00 00 E5 21 44 AC -R 00 00 00 00 00 04 00 00 02 07 0D 00 -T 86 0B 00 00 E5 ED 5B 2C 10 2A 2E 10 CD 00 00 F1 -R 00 00 00 00 00 07 01 00 00 0A 01 00 02 0D 0A 00 -T 92 0B 00 00 E3 D5 21 67 10 CD 68 08 3E 71 F5 33 -R 00 00 00 00 00 07 01 00 00 0A 00 00 -T 9E 0B 00 00 21 05 00 E5 21 06 0F E5 11 67 10 21 -R 00 00 00 00 00 0D 01 00 -T AA 0B 00 00 64 02 CD 00 00 2A 2E 10 E5 2A -R 00 00 00 00 00 04 00 00 02 07 0D 00 00 0A 01 00 -T B4 0B 00 00 2C 10 E5 DD 5E FC DD 56 FD DD 6E FE -R 00 00 00 00 00 04 01 00 -T C0 0B 00 00 DD 66 FF CD D7 09 DD F9 DD E1 C9 -R 00 00 00 00 00 08 00 00 -T CB 0B 00 00 -R 00 00 00 00 -T CB 0B 00 00 3B CD 06 06 21 64 02 CD 00 00 CD -R 00 00 00 00 00 06 00 00 00 09 00 00 02 0C 06 00 -T D6 0B 00 00 2B 06 21 84 0C CD 0E 07 3A -R 00 00 00 00 00 04 00 00 00 07 00 00 00 0A 00 00 -T DF 0B 00 00 00 00 3C 20 0D CD 57 02 B7 3E 01 20 -R 00 00 00 00 00 04 02 00 00 0A 00 00 -T EB 0B 00 00 02 3E 02 -R 00 00 00 00 -T EE 0B 00 00 -R 00 00 00 00 -T EE 0B 00 00 32 00 00 -R 00 00 00 00 00 05 02 00 -T F1 0B 00 00 -R 00 00 00 00 -T F1 0B 00 00 3A 00 00 3D 28 07 33 C3 6D 05 C3 -R 00 00 00 00 00 05 02 00 00 0C 00 00 -T FC 0B 00 00 82 0C -R 00 00 00 00 00 04 00 00 -T FE 0B 00 00 -R 00 00 00 00 -T FE 0B 00 00 AF 32 2C 10 32 2D 10 32 2E 10 32 -R 00 00 00 00 00 06 01 00 00 09 01 00 00 0C 01 00 -T 09 0C 00 00 2F 10 CD BE 02 B7 20 12 3A 08 10 D6 -R 00 00 00 00 00 04 01 00 00 07 00 00 00 0D 01 00 -T 15 0C 00 00 99 20 07 33 C3 A0 05 C3 82 0C -R 00 00 00 00 00 09 00 00 00 0C 00 00 -T 1F 0C 00 00 -R 00 00 00 00 -T 1F 0C 00 00 33 C3 D3 05 +T A8 06 00 00 3E 32 CD 43 05 21 32 10 CD 00 00 3E +R 00 00 00 00 00 07 00 00 00 0A 01 00 02 0D 11 00 +T B4 06 00 00 02 C3 00 00 R 00 00 00 00 00 06 00 00 -T 23 0C 00 00 +T B8 06 00 00 R 00 00 00 00 -T 23 0C 00 00 21 9C 0C CD 0E 07 CD 15 09 21 -R 00 00 00 00 00 05 00 00 00 08 00 00 00 0B 00 00 -T 2D 0C 00 00 31 10 36 21 CD 4D 0A FD 21 00 00 FD -R 00 00 00 00 00 04 01 00 00 09 00 00 -T 39 0C 00 00 39 FD 36 00 00 +T B8 06 00 00 50 6C 61 79 62 61 63 6B 20 65 72 72 R 00 00 00 00 -T 3E 0C 00 00 +T C4 06 00 00 6F 72 00 R 00 00 00 00 -T 3E 0C 00 00 76 FD 21 00 00 FD 39 FD 34 00 FD 7E +T C7 06 00 00 R 00 00 00 00 -T 4A 0C 00 00 00 D6 0A 38 07 FD 36 00 00 CD 4D 0A +T C7 06 00 00 ED 4B 09 10 1E 00 +R 00 00 00 00 00 06 01 00 +T CD 06 00 00 +R 00 00 00 00 +T CD 06 00 00 6B 26 00 09 56 3E 0B 10 00 00 83 6F +R 00 00 00 00 09 0A 01 00 +T D6 06 00 00 3E 0B 10 00 00 CE 00 67 7A B7 28 0A +R 00 00 00 00 89 05 01 00 +T DF 06 00 00 7B D6 20 30 05 72 1C C3 CD 06 +R 00 00 00 00 00 0C 00 00 +T E9 06 00 00 +R 00 00 00 00 +T E9 06 00 00 36 00 C9 +R 00 00 00 00 +T EC 06 00 00 +R 00 00 00 00 +T EC 06 00 00 21 05 00 E5 21 02 01 E5 11 38 07 21 +R 00 00 00 00 00 0D 00 00 +T F8 06 00 00 32 10 CD 00 00 21 0B 10 CD +R 00 00 00 00 00 04 01 00 02 07 05 00 00 0A 01 00 +T 01 07 00 00 00 00 3E 71 F5 33 D5 21 02 07 E5 11 +R 00 00 00 00 02 04 12 00 +T 0D 07 00 00 0B 10 21 32 10 CD 00 00 21 07 00 E5 +R 00 00 00 00 00 04 01 00 00 07 01 00 02 0A 0F 00 +T 19 07 00 00 21 03 01 E5 11 3E 07 21 32 10 CD +R 00 00 00 00 00 09 00 00 00 0C 01 00 +T 24 07 00 00 00 00 21 24 00 E5 21 0A 02 E5 11 +R 00 00 00 00 02 04 05 00 +T 2F 07 00 00 46 07 21 32 10 CD 00 00 C9 +R 00 00 00 00 00 04 00 00 00 07 01 00 02 0A 05 00 +T 38 07 00 00 +R 00 00 00 00 +T 38 07 00 00 46 69 6C 65 3A 00 +R 00 00 00 00 +T 3E 07 00 00 +R 00 00 00 00 +T 3E 07 00 00 53 74 61 74 75 73 3A 00 +R 00 00 00 00 +T 46 07 00 00 +R 00 00 00 00 +T 46 07 00 00 50 67 55 70 2F 50 67 44 6E 3A 54 72 +R 00 00 00 00 +T 52 07 00 00 61 63 6B 20 45 73 63 3A 53 74 6F 70 +R 00 00 00 00 +T 5E 07 00 00 20 53 70 61 63 65 3A 4C 65 61 76 65 +R 00 00 00 00 +T 6A 07 00 00 00 +R 00 00 00 00 +T 6B 07 00 00 +R 00 00 00 00 +T 6B 07 00 00 DD E5 DD 21 00 00 DD 39 F5 1E 00 +R 00 00 00 00 +T 76 07 00 00 +R 00 00 00 00 +T 76 07 00 00 7B 85 4F 3E 00 8C 47 0A 4F B7 28 1F +R 00 00 00 00 +T 82 07 00 00 7B D6 18 30 1A 3E 56 10 00 00 83 DD +R 00 00 00 00 09 0A 01 00 +T 8B 07 00 00 77 FE 3E 56 10 00 00 CE 00 DD 77 FF +R 00 00 00 00 89 07 01 00 +T 94 07 00 00 E5 DD 6E FE DD 66 FF 71 E1 1C C3 +R 00 00 00 00 +T 9F 07 00 00 76 07 +R 00 00 00 00 00 04 00 00 +T A1 07 00 00 +R 00 00 00 00 +T A1 07 00 00 +R 00 00 00 00 +T A1 07 00 00 7B D6 18 30 0C 21 56 10 16 00 19 1C +R 00 00 00 00 00 0A 01 00 +T AD 07 00 00 36 20 C3 A1 07 +R 00 00 00 00 00 07 00 00 +T B2 07 00 00 +R 00 00 00 00 +T B2 07 00 00 21 32 10 DD 7E 04 F5 33 11 18 00 D5 +R 00 00 00 00 00 05 01 00 +T BE 07 00 00 11 03 09 D5 11 56 10 CD 00 00 DD F9 +R 00 00 00 00 00 09 01 00 02 0C 0F 00 +T CA 07 00 00 DD E1 E1 33 E9 +R 00 00 00 00 +T CF 07 00 00 +R 00 00 00 00 +T CF 07 00 00 3E 71 F5 33 CD 6B 07 C9 +R 00 00 00 00 00 09 00 00 +T D7 07 00 00 +R 00 00 00 00 +T D7 07 00 00 DD E5 DD 21 00 00 DD 39 3B EB 0E 00 +R 00 00 00 00 +T E3 07 00 00 +R 00 00 00 00 +T E3 07 00 00 69 26 00 19 46 3E 6E 10 00 00 81 6F +R 00 00 00 00 09 0A 01 00 +T EC 07 00 00 3E 6E 10 00 00 CE 00 67 79 3C DD 77 +R 00 00 00 00 89 05 01 00 +T F5 07 00 00 FF 78 B7 28 0C 79 D6 11 30 07 70 DD +R 00 00 00 00 +T 01 08 00 00 4E FF C3 E3 07 +R 00 00 00 00 00 07 00 00 +T 06 08 00 00 +R 00 00 00 00 +T 06 08 00 00 DD 4E FF 36 20 69 0C 26 00 11 6E 10 +R 00 00 00 00 00 0E 01 00 +T 12 08 00 00 19 36 28 69 0C 26 00 11 6E 10 19 36 +R 00 00 00 00 00 0C 01 00 +T 1E 08 00 00 30 69 0C 26 00 11 6E 10 19 36 78 69 +R 00 00 00 00 00 0A 01 00 +T 2A 08 00 00 0C 26 00 11 6E 10 19 DD 7E 04 07 07 +R 00 00 00 00 00 08 01 00 +T 36 08 00 00 07 07 E6 0F C6 7E 08 00 00 5F 3E 00 +R 00 00 00 00 09 09 00 00 +T 3F 08 00 00 CE 7E 08 00 00 57 1A 77 69 0C 26 00 +R 00 00 00 00 89 05 00 00 +T 48 08 00 00 11 6E 10 19 DD 7E 04 E6 0F C6 +R 00 00 00 00 00 05 01 00 +T 52 08 00 00 7E 08 00 00 5F 3E 00 CE 7E 08 00 00 +R 00 00 00 00 09 04 00 00 89 0C 00 00 +T 58 08 00 00 57 1A 77 69 0C 26 00 11 6E 10 19 36 +R 00 00 00 00 00 0C 01 00 +T 64 08 00 00 29 69 26 00 11 6E 10 19 36 00 3E 72 +R 00 00 00 00 00 09 01 00 +T 70 08 00 00 F5 33 21 6E 10 CD 6B 07 33 DD E1 E1 +R 00 00 00 00 00 07 01 00 00 0A 00 00 +T 7C 08 00 00 33 E9 +R 00 00 00 00 +T 7E 08 00 00 +R 00 00 00 00 +T 7E 08 00 00 30 31 32 33 34 35 36 37 38 39 41 42 +R 00 00 00 00 +T 8A 08 00 00 43 44 45 46 00 +R 00 00 00 00 +T 8F 08 00 00 +R 00 00 00 00 +T 8F 08 00 00 DD E5 DD 21 00 00 DD 39 EB 01 BB 08 R 00 00 00 00 00 0E 00 00 -T 56 0C 00 00 +T 9B 08 00 00 DD 7E 04 07 07 07 07 E6 0F 6F 26 00 R 00 00 00 00 -T 56 0C 00 00 CD 00 00 B7 28 05 3E 02 CD 0E 05 -R 00 00 00 00 02 05 0B 00 00 0D 00 00 -T 61 0C 00 00 +T A7 08 00 00 09 7E 12 13 DD 7E 04 E6 0F 6F 26 00 R 00 00 00 00 -T 61 0C 00 00 CD 00 00 B7 28 05 3E 04 CD 0E 05 -R 00 00 00 00 02 05 11 00 00 0D 00 00 -T 6C 0C 00 00 +T B3 08 00 00 09 7E 12 DD E1 E1 33 E9 R 00 00 00 00 -T 6C 0C 00 00 CD 00 00 B7 28 04 AF CD 0E 05 -R 00 00 00 00 02 05 10 00 00 0C 00 00 -T 76 0C 00 00 +T BB 08 00 00 R 00 00 00 00 -T 76 0C 00 00 CD 00 00 B7 28 C2 CD 3F 05 C3 3E 0C +T BB 08 00 00 30 31 32 33 34 35 36 37 38 39 41 42 +R 00 00 00 00 +T C7 08 00 00 43 44 45 46 00 +R 00 00 00 00 +T CC 08 00 00 +R 00 00 00 00 +T CC 08 00 00 DD E5 DD 21 00 00 DD 39 F5 4D 44 E1 +R 00 00 00 00 +T D8 08 00 00 D5 C5 11 64 00 DD 6E FE DD 66 FF CD +R 00 00 00 00 +T E4 08 00 00 00 00 EB 11 0A 00 CD 00 00 C1 7B C6 +R 00 00 00 00 02 04 00 00 02 0B 15 00 +T F0 08 00 00 30 02 69 60 23 E5 C5 11 0A 00 DD 6E +R 00 00 00 00 +T FC 08 00 00 FE DD 66 FF CD 00 00 EB 11 0A 00 CD +R 00 00 00 00 02 09 00 00 +T 08 09 00 00 00 00 C1 E1 7B C6 30 77 03 03 C5 11 +R 00 00 00 00 02 04 15 00 +T 14 09 00 00 0A 00 DD 6E FE DD 66 FF CD 00 00 C1 +R 00 00 00 00 02 0D 15 00 +T 20 09 00 00 7B C6 30 02 DD F9 DD E1 C9 +R 00 00 00 00 +T 29 09 00 00 +R 00 00 00 00 +T 29 09 00 00 DD E5 DD 21 00 00 DD 39 E5 21 00 00 +R 00 00 00 00 +T 35 09 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 DD 6E +R 00 00 00 00 +T 41 09 00 00 06 DD 66 07 CD 00 00 F1 F1 01 00 00 +R 00 00 00 00 02 09 0C 00 +T 4D 09 00 00 C5 0E 64 C5 CD 00 00 F1 F1 4B C5 21 +R 00 00 00 00 02 09 0A 00 +T 59 09 00 00 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 +R 00 00 00 00 +T 65 09 00 00 DD 6E 06 DD 66 07 CD 00 00 F1 F1 C1 +R 00 00 00 00 02 0B 0A 00 +T 71 09 00 00 51 D5 2E 0A 7A CD 00 00 7B 2E 0A CD +R 00 00 00 00 02 0A 04 00 +T 7D 09 00 00 00 00 7B D1 C6 30 E1 E5 77 C1 C5 03 +R 00 00 00 00 02 04 03 00 +T 89 09 00 00 C5 D5 2E 0A 7A CD 00 00 7B D1 C1 C6 +R 00 00 00 00 02 0A 03 00 +T 95 09 00 00 30 02 E1 E5 23 23 36 3A C1 C5 03 03 +R 00 00 00 00 +T A1 09 00 00 03 C5 D5 2E 0A 7B CD 00 00 7B 2E 0A +R 00 00 00 00 02 0B 04 00 +T AD 09 00 00 CD 00 00 7B D1 C1 C6 30 02 DD 7E FE +R 00 00 00 00 02 05 03 00 +T B9 09 00 00 C6 04 4F DD 7E FF CE 00 47 C5 2E 0A +R 00 00 00 00 +T C5 09 00 00 7B CD 00 00 7B C1 C6 30 02 DD F9 DD +R 00 00 00 00 02 06 03 00 +T D1 09 00 00 E1 E1 F1 F1 E9 +R 00 00 00 00 +T D6 09 00 00 +R 00 00 00 00 +T D6 09 00 00 21 09 00 E5 21 04 01 E5 11 75 0A 21 +R 00 00 00 00 00 0D 00 00 +T E2 09 00 00 32 10 CD 00 00 21 07 00 E5 21 04 0C +R 00 00 00 00 00 04 01 00 02 07 05 00 +T EE 09 00 00 E5 11 7F 0A 21 32 10 CD 00 00 21 +R 00 00 00 00 00 06 00 00 00 09 01 00 02 0C 05 00 +T F9 09 00 00 06 00 E5 21 04 15 E5 11 87 0A 21 +R 00 00 00 00 00 0C 00 00 +T 04 0A 00 00 32 10 CD 00 00 21 05 00 E5 21 06 01 +R 00 00 00 00 00 04 01 00 02 07 05 00 +T 10 0A 00 00 E5 11 8E 0A 21 32 10 CD 00 00 21 +R 00 00 00 00 00 06 00 00 00 09 01 00 02 0C 05 00 +T 1B 0A 00 00 03 00 E5 21 06 0C E5 11 94 0A 21 +R 00 00 00 00 00 0C 00 00 +T 26 0A 00 00 32 10 CD 00 00 11 90 10 0E 00 +R 00 00 00 00 00 04 01 00 02 07 05 00 00 0A 01 00 +T 30 0A 00 00 +R 00 00 00 00 +T 30 0A 00 00 69 26 00 19 36 20 0C 79 D6 20 38 F4 +R 00 00 00 00 +T 3C 0A 00 00 21 20 00 E5 21 08 04 E5 21 32 10 CD +R 00 00 00 00 00 0D 01 00 +T 48 0A 00 00 00 00 21 08 04 E5 21 32 10 CD 00 00 +R 00 00 00 00 02 04 05 00 00 0B 01 00 02 0E 0E 00 +T 54 0A 00 00 7A E6 3F 57 CB FB ED 53 B0 10 0E 00 +R 00 00 00 00 00 0C 01 00 +T 60 0A 00 00 +R 00 00 00 00 +T 60 0A 00 00 2A B0 10 5D 7C C6 C0 57 69 26 00 19 +R 00 00 00 00 00 05 01 00 +T 6C 0A 00 00 36 07 0C 79 D6 20 38 EC C9 +R 00 00 00 00 +T 75 0A 00 00 +R 00 00 00 00 +T 75 0A 00 00 50 61 74 74 65 72 6E 3A 23 00 +R 00 00 00 00 +T 7F 0A 00 00 +R 00 00 00 00 +T 7F 0A 00 00 20 20 52 6F 77 3A 23 00 +R 00 00 00 00 +T 87 0A 00 00 +R 00 00 00 00 +T 87 0A 00 00 20 20 42 50 4D 3A 00 +R 00 00 00 00 +T 8E 0A 00 00 +R 00 00 00 00 +T 8E 0A 00 00 54 69 6D 65 3A 00 +R 00 00 00 00 +T 94 0A 00 00 +R 00 00 00 00 +T 94 0A 00 00 20 2F 20 00 +R 00 00 00 00 +T 98 0A 00 00 +R 00 00 00 00 +T 98 0A 00 00 DD E5 DD 21 00 00 DD 39 4B 42 EB DD +R 00 00 00 00 +T A4 0A 00 00 7E 07 DD B6 06 DD B6 05 DD B6 04 28 +R 00 00 00 00 +T B0 0A 00 00 30 69 60 3E 05 +R 00 00 00 00 +T B5 0A 00 00 +R 00 00 00 00 +T B5 0A 00 00 29 CB 13 CB 12 3D 20 F8 DD 4E 06 DD +R 00 00 00 00 +T C1 0A 00 00 46 07 C5 DD 4E 04 DD 46 05 C5 EB CD +R 00 00 00 00 +T CD 0A 00 00 00 00 F1 F1 4B 42 3E 20 BB 3E 00 9A +R 00 00 00 00 02 04 0C 00 +T D9 0A 00 00 30 09 01 20 00 C3 E4 0A +R 00 00 00 00 00 0A 00 00 +T E1 0A 00 00 +R 00 00 00 00 +T E1 0A 00 00 01 00 00 +R 00 00 00 00 +T E4 0A 00 00 +R 00 00 00 00 +T E4 0A 00 00 11 00 00 +R 00 00 00 00 +T E7 0A 00 00 +R 00 00 00 00 +T E7 0A 00 00 2A B0 10 7C C6 C0 67 19 7B 91 7A 98 +R 00 00 00 00 00 05 01 00 +T F3 0A 00 00 30 05 3E 40 C3 FC 0A +R 00 00 00 00 00 09 00 00 +T FA 0A 00 00 +R 00 00 00 00 +T FA 0A 00 00 3E 07 +R 00 00 00 00 +T FC 0A 00 00 +R 00 00 00 00 +T FC 0A 00 00 77 13 6B 62 7D D6 20 7C DE 00 38 DF +R 00 00 00 00 +T 08 0B 00 00 DD E1 E1 F1 F1 E9 +R 00 00 00 00 +T 0E 0B 00 00 +R 00 00 00 00 +T 0E 0B 00 00 DD E5 DD 21 00 00 DD 39 21 F8 FF 39 +R 00 00 00 00 +T 1A 0B 00 00 F9 3A 30 10 6F 3E 0B CD D1 00 3E A8 +R 00 00 00 00 00 06 01 00 00 0C 00 00 +T 26 0B 00 00 CD 05 00 21 32 00 CD 2C 02 3E 28 CD +R 00 00 00 00 00 05 00 00 00 0B 00 00 +T 32 0B 00 00 1E 00 DD 77 FF 3A 31 10 D6 21 20 1D +R 00 00 00 00 00 04 00 00 00 0A 01 00 +T 3E 0B 00 00 DD 7E FF D6 20 20 16 3E E4 CD 05 00 +R 00 00 00 00 00 0E 00 00 +T 4A 0B 00 00 21 64 00 CD 2C 02 21 32 10 CD 00 00 +R 00 00 00 00 00 08 00 00 00 0B 01 00 02 0E 11 00 +T 56 0B 00 00 3E 02 CD 00 00 +R 00 00 00 00 00 07 00 00 +T 5B 0B 00 00 +R 00 00 00 00 +T 5B 0B 00 00 DD 7E FF 32 31 10 3E 2B CD 1E 00 DD +R 00 00 00 00 00 08 01 00 00 0D 00 00 +T 67 0B 00 00 77 FA 3E 2C CD 1E 00 DD 77 FB 3E 02 +R 00 00 00 00 00 09 00 00 +T 73 0B 00 00 F5 33 21 01 00 39 EB 3E 31 CD A5 00 +R 00 00 00 00 00 0E 00 00 +T 7F 0B 00 00 3E 2D CD 37 00 DD 73 FC DD 72 FD DD +R 00 00 00 00 00 07 00 00 +T 8B 0B 00 00 75 FE DD 74 FF 3A 2F 10 FD 21 2C 10 +R 00 00 00 00 00 0A 01 00 00 0E 01 00 +T 97 0B 00 00 FD B6 02 FD B6 01 FD B6 00 20 0C 3E +R 00 00 00 00 +T A3 0B 00 00 36 CD 37 00 ED 53 2C 10 22 2E 10 +R 00 00 00 00 00 06 00 00 00 0A 01 00 00 0D 01 00 +T AE 0B 00 00 +R 00 00 00 00 +T AE 0B 00 00 DD 7E FA F5 33 21 86 10 CD 8F 08 3E +R 00 00 00 00 00 0A 01 00 00 0D 00 00 +T BA 0B 00 00 71 F5 33 21 02 00 E5 21 04 0A E5 11 +R 00 00 00 00 +T C6 0B 00 00 86 10 21 32 10 CD 00 00 DD 7E FB F5 +R 00 00 00 00 00 04 01 00 00 07 01 00 02 0A 0F 00 +T D2 0B 00 00 33 21 86 10 CD 8F 08 3E 71 F5 33 21 +R 00 00 00 00 00 06 01 00 00 09 00 00 +T DE 0B 00 00 02 00 E5 21 04 13 E5 11 86 10 21 +R 00 00 00 00 00 0C 01 00 +T E9 0B 00 00 32 10 CD 00 00 D1 D5 21 88 10 CD +R 00 00 00 00 00 04 01 00 02 07 0F 00 00 0C 01 00 +T F4 0B 00 00 CC 08 3E 71 F5 33 21 03 00 E5 21 +R 00 00 00 00 00 04 00 00 +T FF 0B 00 00 04 1B E5 11 88 10 21 32 10 CD 00 00 +R 00 00 00 00 00 08 01 00 00 0B 01 00 02 0E 0F 00 +T 0B 0C 00 00 21 00 00 E5 21 44 AC E5 DD 5E FC DD +R 00 00 00 00 +T 17 0C 00 00 56 FD DD 6E FE DD 66 FF CD 00 00 F1 +R 00 00 00 00 02 0D 0C 00 +T 23 0C 00 00 E3 D5 21 8B 10 CD 29 09 3E 71 F5 33 +R 00 00 00 00 00 07 01 00 00 0A 00 00 +T 2F 0C 00 00 21 05 00 E5 21 06 07 E5 11 8B 10 21 +R 00 00 00 00 00 0D 01 00 +T 3B 0C 00 00 32 10 CD 00 00 21 00 00 E5 21 44 AC +R 00 00 00 00 00 04 01 00 02 07 0F 00 +T 47 0C 00 00 E5 ED 5B 2C 10 2A 2E 10 CD 00 00 F1 +R 00 00 00 00 00 07 01 00 00 0A 01 00 02 0D 0C 00 +T 53 0C 00 00 E3 D5 21 8B 10 CD 29 09 3E 71 F5 33 +R 00 00 00 00 00 07 01 00 00 0A 00 00 +T 5F 0C 00 00 21 05 00 E5 21 06 0F E5 11 8B 10 21 +R 00 00 00 00 00 0D 01 00 +T 6B 0C 00 00 32 10 CD 00 00 2A 2E 10 E5 2A +R 00 00 00 00 00 04 01 00 02 07 0F 00 00 0A 01 00 +T 75 0C 00 00 2C 10 E5 DD 5E FC DD 56 FD DD 6E FE +R 00 00 00 00 00 04 01 00 +T 81 0C 00 00 DD 66 FF CD 98 0A DD F9 DD E1 C9 +R 00 00 00 00 00 08 00 00 +T 8C 0C 00 00 +R 00 00 00 00 +T 8C 0C 00 00 DD E5 DD 21 00 00 DD 39 3B CD C7 06 +R 00 00 00 00 00 0E 00 00 +T 98 0C 00 00 11 32 10 21 A0 02 01 12 00 ED B0 21 +R 00 00 00 00 00 05 01 00 00 08 00 00 +T A4 0C 00 00 36 10 6E E5 CD 4C 05 E1 CD 59 05 32 +R 00 00 00 00 00 04 01 00 00 09 00 00 00 0D 00 00 +T B0 0C 00 00 34 10 21 37 10 6E 3A 0E 60 CD 59 05 +R 00 00 00 00 00 04 01 00 00 07 01 00 00 0E 00 00 +T BC 0C 00 00 32 35 10 CD 00 00 CD 00 00 21 +R 00 00 00 00 00 05 01 00 02 08 0B 00 02 0B 10 00 +T C6 0C 00 00 32 10 CD 00 00 CD EC 06 21 +R 00 00 00 00 00 04 01 00 02 07 06 00 00 0A 00 00 +T CF 0C 00 00 76 0D CD CF 07 3A 00 00 3C 20 0D CD +R 00 00 00 00 00 04 00 00 00 07 00 00 00 0A 02 00 +T DB 0C 00 00 93 02 B7 3E 01 20 02 3E 02 +R 00 00 00 00 00 04 00 00 +T E4 0C 00 00 +R 00 00 00 00 +T E4 0C 00 00 32 00 00 +R 00 00 00 00 00 05 02 00 +T E7 0C 00 00 +R 00 00 00 00 +T E7 0C 00 00 3A 00 00 3D 28 06 CD 2E 06 C3 72 0D +R 00 00 00 00 00 05 02 00 00 0B 00 00 00 0E 00 00 +T F3 0C 00 00 +R 00 00 00 00 +T F3 0C 00 00 AF 32 2C 10 32 2D 10 32 2E 10 32 +R 00 00 00 00 00 06 01 00 00 09 01 00 00 0C 01 00 +T FE 0C 00 00 2F 10 CD 0F 03 B7 20 13 3A 08 10 D6 +R 00 00 00 00 00 04 01 00 00 07 00 00 00 0D 01 00 +T 0A 0D 00 00 99 20 06 CD 61 06 C3 72 0D +R 00 00 00 00 00 08 00 00 00 0B 00 00 +T 13 0D 00 00 +R 00 00 00 00 +T 13 0D 00 00 CD 94 06 C3 72 0D +R 00 00 00 00 00 05 00 00 00 08 00 00 +T 19 0D 00 00 +R 00 00 00 00 +T 19 0D 00 00 21 8E 0D CD CF 07 CD D6 09 21 +R 00 00 00 00 00 05 00 00 00 08 00 00 00 0B 00 00 +T 23 0D 00 00 31 10 36 21 CD 0E 0B DD 36 FF 00 +R 00 00 00 00 00 04 01 00 00 09 00 00 +T 2E 0D 00 00 +R 00 00 00 00 +T 2E 0D 00 00 76 DD 34 FF DD 7E FF D6 0A 38 07 DD +R 00 00 00 00 +T 3A 0D 00 00 36 FF 00 CD 0E 0B +R 00 00 00 00 00 08 00 00 +T 40 0D 00 00 +R 00 00 00 00 +T 40 0D 00 00 CD 00 00 B7 20 06 CD 00 00 B7 28 05 +R 00 00 00 00 02 05 0D 00 02 0B 07 00 +T 4C 0D 00 00 +R 00 00 00 00 +T 4C 0D 00 00 3E 02 CD C9 05 +R 00 00 00 00 00 07 00 00 +T 51 0D 00 00 +R 00 00 00 00 +T 51 0D 00 00 CD 00 00 B7 28 05 3E 04 CD C9 05 +R 00 00 00 00 02 05 14 00 00 0D 00 00 +T 5C 0D 00 00 +R 00 00 00 00 +T 5C 0D 00 00 CD 00 00 B7 28 04 AF CD C9 05 +R 00 00 00 00 02 05 13 00 00 0C 00 00 +T 66 0D 00 00 +R 00 00 00 00 +T 66 0D 00 00 CD 00 00 B7 28 C2 CD FA 05 C3 2E 0D R 00 00 00 00 02 05 01 00 00 0B 00 00 00 0E 00 00 -T 82 0C 00 00 +T 72 0D 00 00 R 00 00 00 00 -T 82 0C 00 00 33 C9 +T 72 0D 00 00 33 DD E1 C9 R 00 00 00 00 -T 84 0C 00 00 +T 76 0D 00 00 R 00 00 00 00 -T 84 0C 00 00 4C 6F 61 64 69 6E 67 2C 20 70 6C 65 +T 76 0D 00 00 4C 6F 61 64 69 6E 67 2C 20 70 6C 65 R 00 00 00 00 -T 90 0C 00 00 61 73 65 20 77 61 69 74 2E 2E 2E 00 +T 82 0D 00 00 61 73 65 20 77 61 69 74 2E 2E 2E 00 R 00 00 00 00 -T 9C 0C 00 00 +T 8E 0D 00 00 R 00 00 00 00 -T 9C 0C 00 00 50 6C 61 79 69 6E 67 00 +T 8E 0D 00 00 50 6C 61 79 69 6E 67 00 R 00 00 00 00 -T A4 0C 00 00 +T 96 0D 00 00 R 00 00 00 00 -T A4 0C 00 00 ED 73 00 10 32 07 10 ED 43 09 10 08 +T 96 0D 00 00 ED 73 00 10 32 07 10 ED 43 09 10 08 R 00 00 00 00 00 06 01 00 00 09 01 00 00 0D 01 00 -T B0 0C 00 00 32 06 10 22 02 10 ED 53 04 10 3A +T A2 0D 00 00 32 06 10 22 02 10 ED 53 04 10 3A R 00 00 00 00 00 05 01 00 00 08 01 00 00 0C 01 00 -T BB 0C 00 00 07 10 B7 CA CB 0B 3A 07 10 D6 03 CA +T AD 0D 00 00 07 10 B7 CA 8C 0C 3A 07 10 D6 03 CA R 00 00 00 00 00 04 01 00 00 08 00 00 00 0B 01 00 -T C7 0C 00 00 FB 04 AF C3 00 00 +T B9 0D 00 00 8F 05 AF C3 00 00 R 00 00 00 00 00 04 00 00 00 08 00 00 T 00 00 00 00 R 00 00 07 00 diff --git a/obj/out.sym b/obj/out.sym index d144280..bd3df57 100644 --- a/obj/out.sym +++ b/obj/out.sym @@ -63,50 +63,51 @@ Hexadecimal [32-Bits] Symbol Table - 0 ___str_12 000009B4 R - 0 ___str_13 000009BE R - 0 ___str_14 000009C6 R - 0 ___str_15 000009CD R - 0 ___str_16 000009D3 R - 0 ___str_17 00000C84 R - 0 ___str_18 00000C9C R - 0 ___str_4 00000585 R - 0 ___str_5 000005C4 R - 0 ___str_6 000005F7 R - 0 ___str_7 00000677 R - 0 ___str_8 0000067D R - 0 ___str_9 00000685 R + 0 ___str_12 00000A75 R + 0 ___str_13 00000A7F R + 0 ___str_14 00000A87 R + 0 ___str_15 00000A8E R + 0 ___str_16 00000A94 R + 0 ___str_17 00000D76 R + 0 ___str_18 00000D8E R + 0 ___str_4 00000646 R + 0 ___str_5 00000685 R + 0 ___str_6 000006B8 R + 0 ___str_7 00000738 R + 0 ___str_8 0000073E R + 0 ___str_9 00000746 R __divuchar ******** GX __divuint ******** GX __divulong ******** GX __moduchar ******** GX __moduint ******** GX __modulong ******** GX - 0 __str_0 00000288 R - 0 __str_1 000002A2 R - 0 __str_2 000002A3 R - 0 __str_3 000002AC R + 0 __str_0 000002C4 R + 0 __str_1 000002DE R + 0 __str_2 000002DF R + 0 __str_3 000002E8 R 7 __xinit__state_esp 00000000 R - 0 _about 000004FB GR - 1 _bar_attr_ofs 0000108C GR - 1 _barbuf 0000106C R + 0 _about 0000058F GR + 1 _bar_attr_ofs 000010B0 GR + 1 _barbuf 00001090 R 1 _call_type 00001007 GR - 0 _copy_file_name 00000606 GR - 1 _decbuf 00001064 R - 0 _draw_progress_bar 000009D7 GR - 0 _error_esp 0000056D GR - 0 _error_oom 000005A0 GR - 0 _error_playback 000005D3 GR + 0 _copy_file_name 000006C7 GR + 1 _decbuf 00001088 R + 0 _draw_progress_bar 00000A98 GR + 0 _error_esp 0000062E GR + 0 _error_oom 00000661 GR + 0 _error_playback 00000694 GR 0 _esp_cmd 00000005 GR - 0 _esp_create_obj 0000022C GR - 0 _esp_init 00000257 GR - 0 _esp_rd_end 00000188 GR + 0 _esp_create_obj 00000268 GR + 0 _esp_init 00000293 GR + 0 _esp_rd_end 000001CF GR 0 _esp_rd_reg32 00000037 GR 0 _esp_rd_reg8 0000001E GR 0 _esp_rd_regs 000000A5 GR - 0 _esp_send_dma 00000127 GR - 0 _esp_wait_busy 000001E5 GR - 0 _esp_wait_status 00000197 GR + 0 _esp_send_dma 0000016E GR + 0 _esp_wait_busy 0000022C GR + 0 _esp_wait_not_busy 00000127 GR + 0 _esp_wait_status 000001DE GR 0 _esp_wr_end 00000118 GR 0 _esp_wr_reg32 000000E8 GR 0 _esp_wr_reg8 000000D1 GR @@ -114,57 +115,64 @@ Symbol Table 1 _file_name 0000100B GR 1 _filesize 00001002 GR 1 _fs_buf 00000000 GR - 1 _hexbuf 00001062 R + 1 _hexbuf 00001086 R 1 _last_esp_status 00001008 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 Hexadecimal [32-Bits] Symbol Table - 0 _main 00000CA4 GR - 0 _main_start 00000BCB GR + 0 _leave_playing_and_exit 000005FA GR + 0 _main 00000D96 GR + 0 _main_start 00000C8C GR 1 _p_file_name 00001009 GR - 0 _play_xm 000002BE GR - 0 _put_dec3 0000080B GR - 0 _put_hex2 000007CE GR - 0 _put_hex2_hexch_10000_132 000007FA R - 0 _put_time 00000868 GR + 0 _play_xm 0000030F GR + 0 _put_dec3 000008CC GR + 0 _put_hex2 0000088F GR + 0 _put_hex2_hexch_10000_144 000008BB R + 0 _put_time 00000929 GR 1 _ret_sp 00001000 GR 2 _state_esp 00000000 GR - 1 _status_buf 00001032 R - 1 _status_code_buf 0000104A R - 0 _stop_on_error 00000594 GR + 1 _status_buf 00001056 R + 1 _status_code_buf 0000106E R + 0 _stop_on_error 00000655 GR _strlen ******** GX - 1 _timebuf 00001067 R + 1 _timebuf 0000108B R 1 _total_samples 0000102C GR - 0 _unload_and_exit 0000050E GR - 0 _wait_esc_key 000004EA GR - 0 _wait_for_manual_exit 00000549 GR - 0 _wait_frames 000004F2 GR + 0 _unload_and_exit 000005C9 GR + 0 _wait_esc_key 0000053B GR + 0 _wait_for_manual_exit 00000604 GR + 0 _wait_frames 00000543 GR + 0 _wc_center 00000559 GR 0 _wc_exit 00000000 GR _wc_gadrw ******** GX + _wc_gedpl ******** GX + _wc_key_enter ******** GX _wc_key_esc ******** GX _wc_key_pgdn ******** GX _wc_key_pgup ******** GX _wc_key_space ******** GX + _wc_key_wait_release ******** GX _wc_load512 ******** GX _wc_prm_pl ******** GX _wc_prsrw ******** GX _wc_prsrw_attr ******** GX _wc_prwow ******** GX _wc_rresb ******** GX - 0 _win_about 00000276 GR - 0 _win_xm 00000264 GR - 0 _xm_draw_static_labels 0000062B GR - 0 _xm_draw_stats_labels 00000915 GR + 0 _wc_screen_width 0000054C GR + 1 _win_about 00001044 GR + 0 _win_about_tpl 000002B2 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 - 0 _xm_set_status 0000070E GR - 0 _xm_set_status_attr 000006AA GR - 0 _xm_set_status_code 00000716 GR - 0 _xm_set_status_code_hexch_10000_129 000007BD R - 0 _xm_update_info 00000A4D GR + 0 _xm_set_status 000007CF GR + 0 _xm_set_status_attr 0000076B GR + 0 _xm_set_status_code 000007D7 GR + 0 _xm_set_status_code_hexch_10000_141 0000087E R + 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 @@ -172,8 +180,8 @@ Hexadecimal [32-Bits] Area Table - 0 _CODE size CCD flags 0 - 1 _DATA size 108E flags 0 + 0 _CODE size DBF flags 0 + 1 _DATA size 10B2 flags 0 2 _INITIALIZED size 1 flags 0 3 _DABS size 0 flags 8 4 _HOME size 0 flags 0 diff --git a/src/esp32.c b/src/esp32.c index a4cd7b2..5e8a03d 100644 --- a/src/esp32.c +++ b/src/esp32.c @@ -99,6 +99,31 @@ void esp_wr_end() 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) { @@ -117,7 +142,7 @@ void esp_send_dma(u16 a, u8 p, u16 l, u16 n) SPI_CTRL = SPI_ESP_CS_OFF; 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() @@ -149,10 +174,35 @@ u8 esp_wait_status(u8 status, u16 max_frames) 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) { 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) { if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) diff --git a/src/main.c b/src/main.c index ed27615..aff3d57 100644 --- a/src/main.c +++ b/src/main.c @@ -65,11 +65,24 @@ enum // 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 // 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, /* 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, /* paper/ink (window color) */ 0x70, // white paper, black ink/border - matches VGMPLAY.WMF's CLR_WIN = WC_COLOR(WC_WHITE, WC_BLACK) /* -reserved- */ 0, @@ -80,21 +93,52 @@ const WC_TX_WINDOW win_xm = /* 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, /* cursor color mask */ 0, - /* X,Y (position) */ 22, 10, - /* W,H (size) */ 36, 5, - /* paper/ink (window color) */ 0x4F, + /* X,Y (position) */ 22, 10, // both placeholders, overwritten at runtime - see about(). Screen + // width is NOT always 80: WC has three text modes - 90x36, 80x25, + // 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, /* window restore buffer address */ 0, /* separators */ 0, 0, /* header text */ "\x0E" " About ", /* 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_code(const char *msg, u8 code); // ditto @@ -168,12 +212,12 @@ bool play_xm() } 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() // 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 // 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); 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() { + 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); wait_esc_key(); wc_rresb(&win_about); @@ -262,7 +327,7 @@ void wait_for_manual_exit() halt __endasm; - if (wc_key_pgdn()) + if (wc_key_pgdn() || wc_key_enter()) unload_and_exit(WC_NEXT_FILE); if (wc_key_pgup()) @@ -602,8 +667,21 @@ void main_start() // deferred until after play_xm() succeeded, because opening a window // before esp32 activity used to corrupt the transfer - that was tied to // 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). + 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); xm_draw_static_labels(); xm_set_status("Loading, please wait..."); @@ -636,6 +714,7 @@ void main_start() frame_ctr = 0; // poll keys + while (1) { __asm @@ -648,7 +727,7 @@ void main_start() 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); if (wc_key_pgup()) // PgUp - unload and go to previous file diff --git a/src/wc_api.c b/src/wc_api.c index 79209a5..8407a29 100644 --- a/src/wc_api.c +++ b/src/wc_api.c @@ -1,22 +1,29 @@ - // This project now builds under SDCC 4.6.0 + `--sdcccall 1` (SDCC's // 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). // 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 // of our own hand-rolled __naked wrappers - our attempts at PRSRW+PRIAT (in // three different shapes: globals-based single function, two separate // naked functions, and a stack-based hand-port of their EXX logic) all // 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, -// wc_key_pgdn=0x1A) were confirmed to exactly match our own _ESC/_PGU/_PGD -// constants in wc_api.h before relying on them - same underlying WC #6006 -// API, just a different project's wrapper names. +// wc_key_pgdn=0x1A, wc_key_enter=0x16) were confirmed to exactly match our +// own _ESC/_PGU/_PGD/_ENKE constants in wc_api.h - same underlying WC +// #6006 API, just a different project's wrapper names. // // 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_rresb(void *win); u8 wc_load512(u16 dest, u8 blocks); @@ -24,6 +31,23 @@ u8 wc_key_esc(void); u8 wc_key_pgup(void); u8 wc_key_pgdn(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_attr(void *win, const u8 *text, u8 y, u8 x, u16 len, u8 attr); diff --git a/src/wc_api.h b/src/wc_api.h index 423e64e..b6d68cd 100644 --- a/src/wc_api.h +++ b/src/wc_api.h @@ -17,6 +17,8 @@ #define _WCAPI 0x6006 // òî÷êà äîñòóïà ê ôóíêöèÿì #define _TMN 0x6009 // ñèíõðà. ïåðåìåííàÿ-òàéìåð, èíêðåìåíòèòñÿ ïî èíòó +#define _HEI 0x600E // screen height in text rows: 25, 30 or 36 (see plugins/READ_ME.TXT) + //--------------------------------------- // API functions #define _MNGC_PL 0x00 // âêëþ÷åíèå ñòðàíèöû íà 0xC000 (èç âûäåëåííîãî áëîêà) diff --git a/vgm_wc_api.lib b/wc_api.lib similarity index 100% rename from vgm_wc_api.lib rename to wc_api.lib