From ee64fb85a9e43519de84a4b2387c646dc416354d Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 30 Aug 2026 21:40:24 +0300 Subject: [PATCH] Fix esp32 detection, add colored caption, live stats, single-loop playback - Fix state_esp init bug: crt0.s never runs GSINIT and hex2bin fills unbacked memory with 0xFF (not 0), so a plain zero-init global always read 0xFF on load; give it a real 0xFF sentinel initializer instead. - Vendor demyanenko-d/VGMPLAY.WMF's wc_api library (SDCC 4.6.0 + --sdcccall 1) instead of hand-rolled PRSRW/PRIAT wrappers, which corrupted esp32 file loading in three different shapes; colored "File:" caption now works. - Trim shared-file footprint: vendor only the esp32.c functions actually used, drop unused sdklib.h/sdk.lib linkage. - Re-enable periodic live stats (Pattern/Row/BPM/Time/progress bar). - Limit playback to one loop via TRACK_SET_PARAMS/MAX_LOOP_COUNT, and auto-advance to the next file when a track finishes on its own (detected via a PLAYING->STOPPED ESP_REG_TRACK_STATUS transition). - Pin the Z80 clock to 14MHz for the whole plugin lifetime so esp32 SPI wait-loop timeouts (raw iteration counts, not real time) don't depend on whatever turbo setting was active before the plugin started. - Pad TRACK_INIT's timeout well past the firmware's 5s song-length measurement cap (XM_MEASURE_MAX_US). Co-Authored-By: Claude Sonnet 5 --- XMPLAY.WMF | Bin 15360 -> 15872 bytes obj/hdr.asm | 2 +- obj/hdr.bin | Bin 512 -> 512 bytes obj/hdr.hex | 2 +- obj/hdr.lst | 2 +- obj/hdr.rel | 2 +- obj/out.asm | 640 ++++++--- obj/out.bin | Bin 14848 -> 15360 bytes obj/out.hex | 216 +-- obj/out.lst | 3790 ++++++++++++++++++++++++++------------------------ obj/out.map | 200 +-- obj/out.noi | 156 ++- obj/out.rel | 978 +++++++------ obj/out.sym | 136 +- src/main.c | 111 +- src/wc_api.c | 22 + 16 files changed, 3455 insertions(+), 2802 deletions(-) diff --git a/XMPLAY.WMF b/XMPLAY.WMF index e876fae8389e5b96c91b31f284a5657471c3e582..980c271227d1c7acc8c5c0cda142bfffa20d7879 100644 GIT binary patch delta 2117 zcmaJ?eQZ-z6uscT~5#Wna$aA{%}C$g=p=k|jQ2=o-9k^@+P++7CZHULN46WSS&^H9ZzEGlOttMH?8S(1f+6eg{%Ko@9L z5VliUbAmOFs%cqR^Au}L0W`@PlPcDOQaA>=a6kE`o;#gaw&@DBz%EmKy7k_^4xXO1 z%Ize3K{)0smeP_!N@|fvGGX!P%z7Tp5r4w%)iv@Q=o(1fpa}X@D&`TV`F1jxu z!*Vo;Meev`8ii#Rjn^7YWD(l)EHZAzW~Em@w|X#8jv{#NSeYz=VuGMr7Iw-le)?HZ zHWQi(4#|REwU`OV>VlDVO>gdUBc?JCm{p7jFDhEY3#(=aM=T~pw*?2mZfNY>P5g@eX-;i{yV(75DCs zBfh`~@1~yT0CQ`Hxn->>cPWX=Rx4-}wOR}C1813Q!l#F7d|-E#68v16G>#qV_XHMU zb_6)GxRmz#@G`pE#|})gx01|zaEi60+$AI_J4mumO!f)MK4i_q<=_+F;vlwS!aUtZomIRfl@|w?8RyXNoTa(!t z1aWT<$twu`rZYX~63q09hZyng4pLN1cq1P4oiptVcD2Ysc=YMu!^hL-cNI1G==FfR zj#OG_(NcfE7YkMqi>^8XSe0F07CIRS-8#|ZauC-t;wmPt5<;Kv=(j!rmtXWFD>!`2 z9m+yq2e|BT_Wugd-N)rpQZCb-T}h}7{sPJoI+R^5M@bKgnpWyL2p;rou;0D}pUd1X z-fWj2*H1bR?wkAG|KqHM=BF>Gu3YHHJNJNZsOm&nB!0k#h)Yl6tBu6q(h-|T;#;)D zttb80etH*PQO&g@%FpJ_dUJ3j0=I74m%4nbR%bY}^txq%Qz*#4I}*8= z$Xn{TSm`zi-rU_YHa3=>v-Fs4Si|bHY^&7NK%YKYTf_EGv3)7#(XrNXeg<17VuM3! zm^F{H#tHBk888AP<5ZVqjZ(N6y`nQL<@=2f7+E?dkJy-;VF1c5==?+8?4ZP2bim=S zo_GyL3s|e3k4U3-2ALh4WGzWnu0_l<$vU<5%#&o@(yMSmv2NX7I9;q;zdJojsoud7 J;neUu{{ip?n8^SD delta 1600 zcmah}Z)h837{5QcCb_27Aa1&9$=kX$>)NzUXGdfEx-#c*17{r+Wa5T&l{snIs?A(< zxg=yY`7kX9$_C;TKLk-zEhewxmo#RW!mBMTbuwNxxD#fH(8*x!n#SjnbZxEReYkt> z_xzr_-}CQP-cU}zvz32%tar;7yA!-|Je2eBB&}M7B%e?-!k2Q5&wBJv#BubhIwtPr zk@}NZ??uW?c3H6hn$|K{q;pCh30%H2KgeN$UQzIG)TCH#PZy(nxRN5}$R;k^ej^Gv zJ@2D6KFp_i?g7~*wQ&0Nw*P|vqMzpqg|*1|24vdr;~tdlwUq~pVShoG7~r{0@*`3S zu?8;qx2W$KKKFuxdmG9MuIqYM-dsk~ZI|IbE7(oRp#U}|PX@3>ze%^+bB9IJC=t5o zLv3Uj^Pt^nCN49?7^2CpAhK|sb4Vn-fy<3YnR|)3^US@>+y!>_4vQ_a*aC~)o=U6V zNr=y>e@J^e`3S8FgA$Dm&a;7=TCrkmaG4Dh09s-Lc?}z(h&T%}bsm~F>ZJG87c1%w z5Z$PTD)xCl3+T#i-L5t=1U0>)IHY2=L9Ny(lG11K&9$j+l#eg{kN?B}A6+~c8hOwX%pIb%2 zETg#tGO6WGY~##**b*4RmgfLA+73T8NH0!s#cEzjDmQF^xe%S?3(TRo!9Q|JW~~IjhXk?cs#ya;tFs zXuXz#_fjwDsxu2-w_Dllg1W8 zf$LpQzGszOoPYXp(8WdKwkm4($1!gcu;An(0Ci6u3p$&L(?Ogq#Mw${Qy^}ugu`O? z!qn+t@_cbXVNcRQx_gv&Y0Y(5Kb_9z6 delta 15 WcmZo*X<(V4$|yTAP->&Y0Y(5KZUl+| diff --git a/obj/hdr.hex b/obj/hdr.hex index 76a8915..575accb 100644 --- a/obj/hdr.hex +++ b/obj/hdr.hex @@ -1,5 +1,5 @@ :200200000000000000000000000000000000000057696C64436F6D6D616E6465724D444CDB -:2002200007000100001D000000000000000000000000000000000000000000000000000099 +:2002200007000100001E000000000000000000000000000000000000000000000000000098 :20024000584D20584D5A53334D000000000000000000000000000000000000000000000007 :2002600000000000000000000000000000000000000000000000000000000000000000007E :2002800000000000000000000000000000000000000000000000000000000000000000005E diff --git a/obj/hdr.lst b/obj/hdr.lst index 45d035e..4131236 100644 --- a/obj/hdr.lst +++ b/obj/hdr.lst @@ -79,7 +79,7 @@ 00000022 01 79 .db #0x01 ; 1 00000023 00 80 .db #0x00 ; 0 00000024 00 81 .db #0x00 ; 0 - 00000025 1D 82 .db #0x1d ; 29 + 00000025 1E 82 .db #0x1e ; 30 00000026 00 83 .db 0x00 00000027 00 84 .db 0x00 00000028 00 85 .db 0x00 diff --git a/obj/hdr.rel b/obj/hdr.rel index 67ebad8..1330980 100644 --- a/obj/hdr.rel +++ b/obj/hdr.rel @@ -20,7 +20,7 @@ T 0C 00 00 00 00 00 00 00 57 69 6C 64 43 6F 6D 6D R 00 00 00 00 T 18 00 00 00 61 6E 64 65 72 4D 44 4C 07 00 01 00 R 00 00 00 00 -T 24 00 00 00 00 1D 00 00 00 00 00 00 00 00 00 00 +T 24 00 00 00 00 1E 00 00 00 00 00 00 00 00 00 00 R 00 00 00 00 T 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R 00 00 00 00 diff --git a/obj/out.asm b/obj/out.asm index 0d3721b..d0245a3 100644 --- a/obj/out.asm +++ b/obj/out.asm @@ -11,6 +11,7 @@ .globl _main .globl _main_start .globl _xm_update_info + .globl _draw_progress_bar .globl _xm_draw_stats_labels .globl _put_time .globl _put_dec3 @@ -36,6 +37,7 @@ .globl _esp_rd_reg32 .globl _esp_rd_reg8 .globl _esp_cmd + .globl _wc_set_freq_14mhz .globl _wc_exit .globl _wc_prsrw_attr .globl _wc_prsrw @@ -46,6 +48,8 @@ .globl _wc_rresb .globl _wc_prwow .globl _strlen + .globl _state_esp + .globl _last_track_status .globl _xm_handle .globl _total_samples .globl _file_name @@ -56,7 +60,6 @@ .globl _filesize .globl _ret_sp .globl _fs_buf - .globl _state_esp .globl _win_about .globl _win_xm .globl _err_playback @@ -121,8 +124,6 @@ _TS_T1YOFFSH = 0x47af ; ram data ;-------------------------------------------------------- .area _DATA -_state_esp:: - .ds 1 _fs_buf:: .ds 4096 _ret_sp:: @@ -143,16 +144,22 @@ _total_samples:: .ds 4 _xm_handle:: .ds 1 +_last_track_status:: + .ds 1 _hexbuf: .ds 2 _decbuf: .ds 3 _timebuf: .ds 5 +_barbuf: + .ds 34 ;-------------------------------------------------------- ; ram data ;-------------------------------------------------------- .area _INITIALIZED +_state_esp:: + .ds 1 ;-------------------------------------------------------- ; absolute ram data ;-------------------------------------------------------- @@ -183,6 +190,17 @@ _wc_exit:: ld sp, (_ret_sp) ret ;src/wc_api.c:41: } +;src/wc_api.c:55: void wc_set_freq_14mhz() __naked +; --------------------------------- +; Function wc_set_freq_14mhz +; --------------------------------- +_wc_set_freq_14mhz:: +;src/wc_api.c:62: __endasm; + ld b, #0x00 ; type: Z80 frequency + ld c, #0x02 ; %10 = 14 MHz + ld a, #0x0E + jp 0x6006 +;src/wc_api.c:63: } ;src/esp32.c:18: void esp_cmd(u8 cmd) ; --------------------------------- ; Function esp_cmd @@ -629,21 +647,21 @@ _esp_create_obj:: pop hl inc sp jp (hl) -;src/main.c:129: bool esp_init() +;src/main.c:143: bool esp_init() ; --------------------------------- ; Function esp_init ; --------------------------------- _esp_init:: -;src/main.c:131: esp_cmd(ESP_CMD_NOP); +;src/main.c:145: esp_cmd(ESP_CMD_NOP); xor a, a call _esp_cmd -;src/main.c:132: esp_rd_end(); +;src/main.c:146: esp_rd_end(); call _esp_rd_end -;src/main.c:133: esp_wr_end(); +;src/main.c:147: esp_wr_end(); call _esp_wr_end -;src/main.c:137: return true; +;src/main.c:151: return true; ld a, #0x01 -;src/main.c:138: } +;src/main.c:152: } ret _err_no_esp: .db #0x01 ; 1 @@ -764,7 +782,7 @@ __str_8: .db 0x01 .ascii "XM Player v1.0" .db 0x00 -;src/main.c:142: bool play_xm() +;src/main.c:156: bool play_xm() ; --------------------------------- ; Function play_xm ; --------------------------------- @@ -775,21 +793,21 @@ _play_xm:: ld hl, #-20 add hl, sp ld sp, hl -;src/main.c:144: esp_cmd(ESP_CMD_TRACK_STOP); +;src/main.c:158: esp_cmd(ESP_CMD_TRACK_STOP); ld a, #0xa2 call _esp_cmd -;src/main.c:145: esp_wait_busy(10000); +;src/main.c:159: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:146: esp_cmd(ESP_CMD_KILL_OBJECTS); +;src/main.c:160: esp_cmd(ESP_CMD_KILL_OBJECTS); ld a, #0xe4 call _esp_cmd -;src/main.c:147: esp_wait_busy(10000); +;src/main.c:161: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:150: switch (file_ext) +;src/main.c:164: switch (file_ext) ld a, (_file_ext) dec a jr z, 00101$ @@ -797,20 +815,20 @@ _play_xm:: sub a, #0x02 jr z, 00102$ jp 00103$ -;src/main.c:152: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; +;src/main.c:166: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; 00101$: ld a, #0x08 jp 00104$ -;src/main.c:153: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; +;src/main.c:167: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; 00102$: ld a, #0x0c jp 00104$ -;src/main.c:154: default: obj_type = OBJ_TYPE_XM; break; +;src/main.c:168: default: obj_type = OBJ_TYPE_XM; break; 00103$: ld a, #0x05 -;src/main.c:155: } +;src/main.c:169: } 00104$: -;src/main.c:157: xm_handle = esp_create_obj(filesize, obj_type); +;src/main.c:171: xm_handle = esp_create_obj(filesize, obj_type); push af inc sp ld de, (_filesize) @@ -818,39 +836,39 @@ _play_xm:: call _esp_create_obj ld hl, #_xm_handle ld (hl), e -;src/main.c:158: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); +;src/main.c:172: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); ld a, #0x01 call _esp_rd_reg8 ld (#_last_esp_status), a -;src/main.c:159: if (last_esp_status != ESP_ST_READY) +;src/main.c:173: if (last_esp_status != ESP_ST_READY) ld a, (_last_esp_status) dec a jr z, 00106$ -;src/main.c:160: return false; +;src/main.c:174: return false; xor a, a jp 00116$ 00106$: -;src/main.c:162: u32 sz = filesize; +;src/main.c:176: u32 sz = filesize; ld hl, #12 add hl, sp ex de, hl ld hl, #_filesize ld bc, #4 ldir -;src/main.c:163: u32 offs = 0; +;src/main.c:177: 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:165: while (sz) +;src/main.c:179: 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:167: u32 s = min(sz, FS_BUF_SIZE); +;src/main.c:181: u32 s = min(sz, FS_BUF_SIZE); ld a, -7 (ix) sub a, #0x10 ld a, -6 (ix) @@ -880,7 +898,7 @@ _play_xm:: add hl, sp ld bc, #4 ldir -;src/main.c:168: u8 sec = (s + 511) >> 9; +;src/main.c:182: u8 sec = (s + 511) >> 9; ld a, -15 (ix) add a, #0xff ld a, -14 (ix) @@ -898,14 +916,14 @@ _play_xm:: srl e rr b rr c -;src/main.c:170: wc_load512((u16)fs_buf, sec); +;src/main.c:184: 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:172: esp_wr_reg32(ESP_REG_DATA_SIZE, s); +;src/main.c:186: esp_wr_reg32(ESP_REG_DATA_SIZE, s); ld hl, #0x0 push hl ld l, -15 (ix) @@ -913,7 +931,7 @@ _play_xm:: push hl ld a, #0x03 call _esp_wr_reg32 -;src/main.c:173: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); +;src/main.c:187: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); ld l, -2 (ix) ld h, -1 (ix) push hl @@ -922,10 +940,10 @@ _play_xm:: push hl ld a, #0x07 call _esp_wr_reg32 -;src/main.c:174: esp_cmd(ESP_CMD_WRITE_OBJECT); +;src/main.c:188: esp_cmd(ESP_CMD_WRITE_OBJECT); ld a, #0xe1 call _esp_cmd -;src/main.c:175: esp_wait_status(ESP_ST_DATA_M2S, 2000); +;src/main.c:189: esp_wait_status(ESP_ST_DATA_M2S, 2000); ld hl, #0x0000 push hl ld hl, #0x07d0 @@ -934,7 +952,7 @@ _play_xm:: call _esp_wait_status pop af pop af -;src/main.c:176: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); +;src/main.c:190: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); ld a, -9 (ix) ld -11 (ix), a ld -10 (ix), #0x00 @@ -950,7 +968,7 @@ _play_xm:: inc sp ld hl, #_fs_buf call _esp_send_dma -;src/main.c:178: offs += s; +;src/main.c:192: offs += s; ld e, -15 (ix) ld d, -14 (ix) ld l, -4 (ix) @@ -964,7 +982,7 @@ _play_xm:: jr nc, 00197$ inc -1 (ix) 00197$: -;src/main.c:179: sz -= s; +;src/main.c:193: sz -= s; ld a, -8 (ix) sub a, -15 (ix) ld -8 (ix), a @@ -979,224 +997,240 @@ _play_xm:: ld -5 (ix), a jp 00107$ 00109$: -;src/main.c:182: if (file_ext == EXT_XMZ) +;src/main.c:196: if (file_ext == EXT_XMZ) ld a, (_file_ext) dec a jr nz, 00113$ -;src/main.c:187: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); +;src/main.c:201: 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:188: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); +;src/main.c:202: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); ld l, #0x05 ld a, #0x02 call _esp_wr_reg8 -;src/main.c:189: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize); +;src/main.c:203: 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:190: esp_cmd(ESP_CMD_UNZIP); +;src/main.c:204: esp_cmd(ESP_CMD_UNZIP); ld a, #0xf2 call _esp_cmd -;src/main.c:191: esp_wait_busy(10000); +;src/main.c:205: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:193: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); +;src/main.c:207: 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:208: if (last_esp_status != ESP_ST_READY) ld a, (_last_esp_status) dec a jr z, 00113$ -;src/main.c:195: return false; +;src/main.c:209: return false; xor a, a jp 00116$ 00113$: -;src/main.c:198: esp_cmd(ESP_CMD_TRACK_INIT); +;src/main.c:212: esp_cmd(ESP_CMD_TRACK_INIT); ld a, #0xa0 call _esp_cmd -;src/main.c:199: esp_wait_busy(10000); - ld de, #0x2710 - ld hl, #0x0000 +;src/main.c:220: esp_wait_busy(1000000); + ld de, #0x4240 + ld hl, #0x000f call _esp_wait_busy -;src/main.c:201: 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:202: 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:203: return false; +;src/main.c:224: return false; xor a, a jp 00116$ 00115$: -;src/main.c:205: esp_cmd(ESP_CMD_TRACK_PLAY); - ld a, #0xa1 +;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:230: esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1); + ld l, #0x01 + ld a, #0x3a + call _esp_wr_reg8 +;src/main.c:231: esp_cmd(ESP_CMD_TRACK_SET_PARAMS); + ld a, #0xa6 call _esp_cmd -;src/main.c:206: esp_wait_busy(10000); +;src/main.c:232: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:208: return true; +;src/main.c:234: esp_cmd(ESP_CMD_TRACK_PLAY); + ld a, #0xa1 + call _esp_cmd +;src/main.c:235: esp_wait_busy(10000); + ld de, #0x2710 + ld hl, #0x0000 + call _esp_wait_busy +;src/main.c:237: return true; ld a, #0x01 00116$: -;src/main.c:209: } +;src/main.c:238: } ld sp, ix pop ix ret -;src/main.c:212: void wait_esc_key() +;src/main.c:241: void wait_esc_key() ; --------------------------------- ; Function wait_esc_key ; --------------------------------- _wait_esc_key:: -;src/main.c:214: while (1) +;src/main.c:243: while (1) 00104$: -;src/main.c:218: __endasm; +;src/main.c:247: __endasm; halt -;src/main.c:220: if (wc_key_esc()) +;src/main.c:249: if (wc_key_esc()) call _wc_key_esc or a, a jr z, 00104$ -;src/main.c:221: break; -;src/main.c:223: } +;src/main.c:250: break; +;src/main.c:252: } ret -;src/main.c:225: void wait_frames(u8 n) +;src/main.c:254: void wait_frames(u8 n) ; --------------------------------- ; Function wait_frames ; --------------------------------- _wait_frames:: ld c, a -;src/main.c:227: while (n--) +;src/main.c:256: while (n--) 00101$: ld a, c dec c or a, a ret z -;src/main.c:231: __endasm; +;src/main.c:260: __endasm; halt -;src/main.c:233: } +;src/main.c:262: } jp 00101$ -;src/main.c:235: void about() +;src/main.c:264: void about() ; --------------------------------- ; Function about ; --------------------------------- _about:: -;src/main.c:237: wc_prwow(&win_about); +;src/main.c:266: wc_prwow(&win_about); ld hl, #_win_about call _wc_prwow -;src/main.c:238: wait_esc_key(); +;src/main.c:267: wait_esc_key(); call _wait_esc_key -;src/main.c:239: wc_rresb(&win_about); +;src/main.c:268: wc_rresb(&win_about); ld hl, #_win_about call _wc_rresb -;src/main.c:240: wc_exit(WC_EXIT); +;src/main.c:269: wc_exit(WC_EXIT); xor a, a -;src/main.c:241: } +;src/main.c:270: } jp _wc_exit -;src/main.c:243: void error_esp() +;src/main.c:272: void error_esp() ; --------------------------------- ; Function error_esp ; --------------------------------- _error_esp:: -;src/main.c:245: wc_prwow(&err_no_esp); +;src/main.c:274: wc_prwow(&err_no_esp); ld hl, #_err_no_esp call _wc_prwow -;src/main.c:246: wait_esc_key(); +;src/main.c:275: wait_esc_key(); call _wait_esc_key -;src/main.c:247: wc_rresb(&err_no_esp); +;src/main.c:276: wc_rresb(&err_no_esp); ld hl, #_err_no_esp call _wc_rresb -;src/main.c:248: wc_exit(WC_EXIT); +;src/main.c:277: wc_exit(WC_EXIT); xor a, a -;src/main.c:249: } +;src/main.c:278: } jp _wc_exit -;src/main.c:251: void error_oom() +;src/main.c:280: void error_oom() ; --------------------------------- ; Function error_oom ; --------------------------------- _error_oom:: -;src/main.c:253: wc_prwow(&err_out_of_mem); +;src/main.c:282: wc_prwow(&err_out_of_mem); ld hl, #_err_out_of_mem call _wc_prwow -;src/main.c:254: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance +;src/main.c:283: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance ld a, #0x32 call _wait_frames -;src/main.c:255: wc_rresb(&err_out_of_mem); +;src/main.c:284: wc_rresb(&err_out_of_mem); ld hl, #_err_out_of_mem call _wc_rresb -;src/main.c:256: wc_exit(WC_NEXT_FILE); +;src/main.c:285: wc_exit(WC_NEXT_FILE); ld a, #0x02 -;src/main.c:257: } +;src/main.c:286: } jp _wc_exit -;src/main.c:259: void error_playback() +;src/main.c:288: void error_playback() ; --------------------------------- ; Function error_playback ; --------------------------------- _error_playback:: -;src/main.c:261: wc_prwow(&err_playback); +;src/main.c:290: wc_prwow(&err_playback); ld hl, #_err_playback call _wc_prwow -;src/main.c:262: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance +;src/main.c:291: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance ld a, #0x32 call _wait_frames -;src/main.c:263: wc_rresb(&err_playback); +;src/main.c:292: wc_rresb(&err_playback); ld hl, #_err_playback call _wc_rresb -;src/main.c:264: wc_exit(WC_NEXT_FILE); +;src/main.c:293: wc_exit(WC_NEXT_FILE); ld a, #0x02 -;src/main.c:265: } +;src/main.c:294: } jp _wc_exit -;src/main.c:272: void copy_file_name() +;src/main.c:301: void copy_file_name() ; --------------------------------- ; Function copy_file_name ; --------------------------------- _copy_file_name:: -;src/main.c:274: u8 *src = (u8*)p_file_name; +;src/main.c:303: u8 *src = (u8*)p_file_name; ld bc, (_p_file_name) -;src/main.c:277: while (src[i] && i < sizeof(file_name) - 1) +;src/main.c:306: 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:279: file_name[i] = src[i]; +;src/main.c:308: 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:277: while (src[i] && i < sizeof(file_name) - 1) +;src/main.c:306: 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:279: file_name[i] = src[i]; +;src/main.c:308: file_name[i] = src[i]; ld (hl), d -;src/main.c:280: i++; +;src/main.c:309: i++; inc e jp 00102$ 00104$: -;src/main.c:282: file_name[i] = 0; +;src/main.c:311: file_name[i] = 0; ld (hl), #0x00 -;src/main.c:283: } +;src/main.c:312: } ret -;src/main.c:291: void xm_draw_static_labels() +;src/main.c:320: void xm_draw_static_labels() ; --------------------------------- ; Function xm_draw_static_labels ; --------------------------------- _xm_draw_static_labels:: -;src/main.c:293: wc_prsrw_attr(&win_xm, "File:", ROW_FILE, 1, 5, ATTR_CAPTION); +;src/main.c:322: wc_prsrw_attr(&win_xm, "File:", ROW_FILE, 1, 5, ATTR_CAPTION); ld a, #0x45 push af inc sp @@ -1207,7 +1241,7 @@ _xm_draw_static_labels:: ld de, #___str_9 ld hl, #_win_xm call _wc_prsrw_attr -;src/main.c:294: wc_prsrw(&win_xm, file_name, ROW_FILE, 7, strlen(file_name)); +;src/main.c:323: wc_prsrw(&win_xm, file_name, ROW_FILE, 7, strlen(file_name)); ld hl, #_file_name call _strlen push de @@ -1216,12 +1250,12 @@ _xm_draw_static_labels:: ld de, #_file_name ld hl, #_win_xm call _wc_prsrw -;src/main.c:295: } +;src/main.c:324: } ret ___str_9: .ascii "File:" .db 0x00 -;src/main.c:304: void put_hex2(char *dst, u8 val) +;src/main.c:333: void put_hex2(char *dst, u8 val) ; --------------------------------- ; Function put_hex2 ; --------------------------------- @@ -1230,8 +1264,8 @@ _put_hex2:: ld ix, #0 add ix, sp ex de, hl -;src/main.c:307: dst[0] = hexch[(val >> 4) & 0xF]; - ld bc, #_put_hex2_hexch_10000_105+0 +;src/main.c:336: dst[0] = hexch[(val >> 4) & 0xF]; + ld bc, #_put_hex2_hexch_10000_106+0 ld a, 4 (ix) rlca rlca @@ -1243,7 +1277,7 @@ _put_hex2:: add hl, bc ld a, (hl) ld (de), a -;src/main.c:308: dst[1] = hexch[val & 0xF]; +;src/main.c:337: dst[1] = hexch[val & 0xF]; inc de ld a, 4 (ix) and a, #0x0f @@ -1252,15 +1286,15 @@ _put_hex2:: add hl, bc ld a, (hl) ld (de), a -;src/main.c:309: } +;src/main.c:338: } pop ix pop hl inc sp jp (hl) -_put_hex2_hexch_10000_105: +_put_hex2_hexch_10000_106: .ascii "0123456789ABCDEF" .db 0x00 -;src/main.c:311: void put_dec3(char *dst, u16 val) +;src/main.c:340: void put_dec3(char *dst, u16 val) ; --------------------------------- ; Function put_dec3 ; --------------------------------- @@ -1271,7 +1305,7 @@ _put_dec3:: push af ld c, l ld b, h -;src/main.c:313: dst[0] = '0' + (val / 100) % 10; +;src/main.c:342: dst[0] = '0' + (val / 100) % 10; pop hl push de push bc @@ -1286,7 +1320,7 @@ _put_dec3:: ld a, e add a, #0x30 ld (bc), a -;src/main.c:314: dst[1] = '0' + (val / 10) % 10; +;src/main.c:343: dst[1] = '0' + (val / 10) % 10; ld l, c ld h, b inc hl @@ -1304,7 +1338,7 @@ _put_dec3:: ld a, e add a, #0x30 ld (hl), a -;src/main.c:315: dst[2] = '0' + val % 10; +;src/main.c:344: dst[2] = '0' + val % 10; inc bc inc bc push bc @@ -1316,11 +1350,11 @@ _put_dec3:: ld a, e add a, #0x30 ld (bc), a -;src/main.c:316: } +;src/main.c:345: } ld sp, ix pop ix ret -;src/main.c:318: void put_time(char *dst, u32 sec) +;src/main.c:347: void put_time(char *dst, u32 sec) ; --------------------------------- ; Function put_time ; --------------------------------- @@ -1329,7 +1363,7 @@ _put_time:: ld ix, #0 add ix, sp push hl -;src/main.c:320: u8 m = (sec / 60) % 100; +;src/main.c:349: u8 m = (sec / 60) % 100; ld hl, #0x0000 push hl ld l, #0x3c @@ -1349,7 +1383,7 @@ _put_time:: pop af pop af ld c, e -;src/main.c:321: u8 s = sec % 60; +;src/main.c:350: u8 s = sec % 60; push bc ld hl, #0x0000 push hl @@ -1363,7 +1397,7 @@ _put_time:: pop af pop af pop bc -;src/main.c:323: dst[0] = '0' + (m / 10) % 10; +;src/main.c:352: dst[0] = '0' + (m / 10) % 10; ld d, c push de ld l, #0x0a @@ -1378,7 +1412,7 @@ _put_time:: pop hl push hl ld (hl), a -;src/main.c:324: dst[1] = '0' + m % 10; +;src/main.c:353: dst[1] = '0' + m % 10; pop bc push bc inc bc @@ -1392,13 +1426,13 @@ _put_time:: pop bc add a, #0x30 ld (bc), a -;src/main.c:325: dst[2] = ':'; +;src/main.c:354: dst[2] = ':'; pop hl push hl inc hl inc hl ld (hl), #0x3a -;src/main.c:326: dst[3] = '0' + (s / 10) % 10; +;src/main.c:355: dst[3] = '0' + (s / 10) % 10; pop bc push bc inc bc @@ -1417,7 +1451,7 @@ _put_time:: pop bc add a, #0x30 ld (bc), a -;src/main.c:327: dst[4] = '0' + s % 10; +;src/main.c:356: dst[4] = '0' + s % 10; ld a, -2 (ix) add a, #0x04 ld c, a @@ -1432,19 +1466,19 @@ _put_time:: pop bc add a, #0x30 ld (bc), a -;src/main.c:328: } +;src/main.c:357: } ld sp, ix pop ix pop hl pop af pop af jp (hl) -;src/main.c:330: void xm_draw_stats_labels() +;src/main.c:359: void xm_draw_stats_labels() ; --------------------------------- ; Function xm_draw_stats_labels ; --------------------------------- _xm_draw_stats_labels:: -;src/main.c:332: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); +;src/main.c:361: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); ld hl, #0x0009 push hl ld hl, #0x103 @@ -1452,7 +1486,7 @@ _xm_draw_stats_labels:: ld de, #___str_11 ld hl, #_win_xm call _wc_prsrw -;src/main.c:333: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); +;src/main.c:362: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); ld hl, #0x0007 push hl ld hl, #0xc03 @@ -1460,7 +1494,7 @@ _xm_draw_stats_labels:: ld de, #___str_12 ld hl, #_win_xm call _wc_prsrw -;src/main.c:334: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); +;src/main.c:363: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); ld hl, #0x0006 push hl ld hl, #0x1503 @@ -1468,7 +1502,7 @@ _xm_draw_stats_labels:: ld de, #___str_13 ld hl, #_win_xm call _wc_prsrw -;src/main.c:336: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); +;src/main.c:365: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); ld hl, #0x0005 push hl ld hl, #0x105 @@ -1476,7 +1510,7 @@ _xm_draw_stats_labels:: ld de, #___str_14 ld hl, #_win_xm call _wc_prsrw -;src/main.c:337: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); +;src/main.c:366: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); ld hl, #0x0003 push hl ld hl, #0xc05 @@ -1484,7 +1518,7 @@ _xm_draw_stats_labels:: ld de, #___str_15 ld hl, #_win_xm call _wc_prsrw -;src/main.c:338: } +;src/main.c:367: } ret ___str_11: .ascii "Pattern:#" @@ -1501,7 +1535,96 @@ ___str_14: ___str_15: .ascii " / " .db 0x00 -;src/main.c:353: void xm_update_info() +;src/main.c:386: void draw_progress_bar(u32 samples, u32 total) +; --------------------------------- +; Function draw_progress_bar +; --------------------------------- +_draw_progress_bar:: + push ix + ld ix, #0 + add ix, sp + ld c, e + ld b, d + ex de, hl +;src/main.c:390: if (total) + ld a, 7 (ix) + or a, 6 (ix) + or a, 5 (ix) + or a, 4 (ix) + jr z, 00104$ +;src/main.c:392: filled = (u16)(((u32)samples * BAR_WIDTH) / total); + push de + push bc + ld de, #0x0022 + ld hl, #0x0000 + call __mullong + pop af + pop af + ld c, 6 (ix) + ld b, 7 (ix) + push bc + ld c, 4 (ix) + ld b, 5 (ix) + push bc + call __divulong + pop af + pop af +;src/main.c:393: if (filled > BAR_WIDTH) + ld c,e + ld b,d + ld a, #0x22 + cp a, e + ld a, #0x00 + sbc a, d + jr nc, 00121$ +;src/main.c:394: filled = BAR_WIDTH; + ld bc, #0x0022 + jp 00121$ +00104$: +;src/main.c:397: filled = 0; // total length unknown (measurement timed out) - show empty + ld bc, #0x0000 +;src/main.c:399: for (i = 0; i < BAR_WIDTH; i++) +00121$: + ld de, #0x0000 +00107$: +;src/main.c:400: barbuf[i] = (i < filled) ? BAR_FILLED_CH : BAR_EMPTY_CH; + ld hl, #_barbuf + add hl, de + ld a, e + sub a, c + ld a, d + sbc a, b + jr nc, 00111$ + ld a, #0x3d + jp 00112$ +00111$: + ld a, #0x2d +00112$: + ld (hl), a +;src/main.c:399: for (i = 0; i < BAR_WIDTH; i++) + inc de + ld l, e + ld h, d + ld a, l + sub a, #0x22 + ld a, h + sbc a, #0x00 + jr c, 00107$ +;src/main.c:402: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); + ld hl, #0x0022 + push hl + ld hl, #0x106 + push hl + ld de, #_barbuf + ld hl, #_win_xm + call _wc_prsrw +;src/main.c:403: } + pop ix + pop hl + pop af + pop af + jp (hl) +;src/main.c:405: void xm_update_info() ; --------------------------------- ; Function xm_update_info ; --------------------------------- @@ -1512,27 +1635,55 @@ _xm_update_info:: ld hl, #-8 add hl, sp ld sp, hl -;src/main.c:359: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); +;src/main.c:411: 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:360: esp_cmd(ESP_CMD_TRACK_GET_INFO); +;src/main.c:412: esp_cmd(ESP_CMD_TRACK_GET_INFO); ld a, #0xa8 call _esp_cmd -;src/main.c:361: esp_wait_busy(2000); +;src/main.c:413: esp_wait_busy(2000); ld de, #0x07d0 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:363: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); +;src/main.c:418: status = esp_rd_reg8(ESP_REG_TRACK_STATUS); + ld a, #0x28 + call _esp_rd_reg8 + ld -1 (ix), a +;src/main.c:419: 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:421: esp_cmd(ESP_CMD_KILL_OBJECTS); + ld a, #0xe4 + call _esp_cmd +;src/main.c:422: esp_wait_busy(10000); + ld de, #0x2710 + ld hl, #0x0000 + call _esp_wait_busy +;src/main.c:423: wc_rresb(&win_xm); + ld hl, #_win_xm + call _wc_rresb +;src/main.c:424: wc_exit(WC_NEXT_FILE); + ld a, #0x02 + call _wc_exit +00102$: +;src/main.c:426: last_track_status = status; + ld a, -1 (ix) + ld (#_last_track_status), a +;src/main.c:428: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); ld a, #0x2b call _esp_rd_reg8 ld -6 (ix), a -;src/main.c:364: row = esp_rd_reg8(ESP_REG_TRACK_ROW); +;src/main.c:429: row = esp_rd_reg8(ESP_REG_TRACK_ROW); ld a, #0x2c call _esp_rd_reg8 ld -5 (ix), a -;src/main.c:365: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); +;src/main.c:430: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); ld a, #0x02 push af inc sp @@ -1541,33 +1692,33 @@ _xm_update_info:: ex de, hl ld a, #0x31 call _esp_rd_regs -;src/main.c:366: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES); +;src/main.c:431: 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:368: if (!total_samples) +;src/main.c:433: 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, 00102$ -;src/main.c:369: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES); + jr nz, 00105$ +;src/main.c:434: 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 -00102$: -;src/main.c:371: put_hex2(hexbuf, pattern); +00105$: +;src/main.c:436: put_hex2(hexbuf, pattern); ld a, -6 (ix) push af inc sp ld hl, #_hexbuf call _put_hex2 -;src/main.c:372: wc_prsrw(&win_xm, hexbuf, ROW_STATS, 10, 2); +;src/main.c:437: wc_prsrw(&win_xm, hexbuf, ROW_STATS, 10, 2); ld hl, #0x0002 push hl ld hl, #0xa03 @@ -1575,13 +1726,13 @@ _xm_update_info:: ld de, #_hexbuf ld hl, #_win_xm call _wc_prsrw -;src/main.c:374: put_hex2(hexbuf, row); +;src/main.c:439: put_hex2(hexbuf, row); ld a, -5 (ix) push af inc sp ld hl, #_hexbuf call _put_hex2 -;src/main.c:375: wc_prsrw(&win_xm, hexbuf, ROW_STATS, 19, 2); +;src/main.c:440: wc_prsrw(&win_xm, hexbuf, ROW_STATS, 19, 2); ld hl, #0x0002 push hl ld hl, #0x1303 @@ -1589,12 +1740,12 @@ _xm_update_info:: ld de, #_hexbuf ld hl, #_win_xm call _wc_prsrw -;src/main.c:377: put_dec3(decbuf, bpm); +;src/main.c:442: put_dec3(decbuf, bpm); pop de push de ld hl, #_decbuf call _put_dec3 -;src/main.c:378: wc_prsrw(&win_xm, decbuf, ROW_STATS, 27, 3); +;src/main.c:443: wc_prsrw(&win_xm, decbuf, ROW_STATS, 27, 3); ld hl, #0x0003 push hl ld hl, #0x1b03 @@ -1602,7 +1753,7 @@ _xm_update_info:: ld de, #_decbuf ld hl, #_win_xm call _wc_prsrw -;src/main.c:380: put_time(timebuf, samples / 44100UL); +;src/main.c:445: put_time(timebuf, samples / 44100UL); ld hl, #0x0000 push hl ld hl, #0xac44 @@ -1617,7 +1768,7 @@ _xm_update_info:: push de ld hl, #_timebuf call _put_time -;src/main.c:381: wc_prsrw(&win_xm, timebuf, ROW_TIME, 7, 5); +;src/main.c:446: wc_prsrw(&win_xm, timebuf, ROW_TIME, 7, 5); ld hl, #0x0005 push hl ld hl, #0x705 @@ -1625,7 +1776,7 @@ _xm_update_info:: ld de, #_timebuf ld hl, #_win_xm call _wc_prsrw -;src/main.c:383: put_time(timebuf, total_samples / 44100UL); +;src/main.c:448: put_time(timebuf, total_samples / 44100UL); ld hl, #0x0000 push hl ld hl, #0xac44 @@ -1638,7 +1789,7 @@ _xm_update_info:: push de ld hl, #_timebuf call _put_time -;src/main.c:384: wc_prsrw(&win_xm, timebuf, ROW_TIME, 15, 5); +;src/main.c:449: wc_prsrw(&win_xm, timebuf, ROW_TIME, 15, 5); ld hl, #0x0005 push hl ld hl, #0xf05 @@ -1646,149 +1797,194 @@ _xm_update_info:: ld de, #_timebuf ld hl, #_win_xm call _wc_prsrw -;src/main.c:388: } +;src/main.c:451: draw_progress_bar(samples, total_samples); + ld hl, (_total_samples + 2) + push hl + ld hl, (_total_samples) + push hl + ld e, -4 (ix) + ld d, -3 (ix) + ld l, -2 (ix) + ld h, -1 (ix) + call _draw_progress_bar +;src/main.c:453: } ld sp, ix pop ix ret -;src/main.c:390: void main_start() +;src/main.c:455: void main_start() ; --------------------------------- ; Function main_start ; --------------------------------- _main_start:: -;src/main.c:394: copy_file_name(); + dec sp +;src/main.c:463: wc_set_freq_14mhz(); + call _wc_set_freq_14mhz +;src/main.c:465: copy_file_name(); call _copy_file_name -;src/main.c:396: if (!state_esp) - ld a, (_state_esp+0) - or a, a +;src/main.c:467: if (state_esp == 0xFF) + ld a, (_state_esp) + inc a jr nz, 00102$ -;src/main.c:397: state_esp = esp_init() ? 1 : 2; +;src/main.c:468: state_esp = esp_init() ? 1 : 2; call _esp_init or a, a ld a, #0x01 - jr nz, 00122$ + jr nz, 00124$ ld a, #0x02 -00122$: +00124$: ld (#_state_esp), a 00102$: -;src/main.c:399: if (state_esp != 1) +;src/main.c:470: if (state_esp != 1) ld a, (_state_esp) -;src/main.c:401: error_esp(); -;src/main.c:402: return; -;src/main.c:405: total_samples = 0; dec a - jp nz,_error_esp + jr z, 00104$ +;src/main.c:472: error_esp(); + inc sp + jp _error_esp +;src/main.c:473: return; + jp 00121$ +00104$: +;src/main.c:476: 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:407: if (!play_xm()) +;src/main.c:478: if (!play_xm()) call _play_xm or a, a jr nz, 00109$ -;src/main.c:409: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) +;src/main.c:480: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) ld a, (_last_esp_status) sub a, #0x99 - jp z, _error_oom -;src/main.c:410: error_oom(); -;src/main.c:412: error_playback(); -;src/main.c:413: return; + jr nz, 00106$ +;src/main.c:481: error_oom(); + inc sp + jp _error_oom + jp 00121$ +00106$: +;src/main.c:483: error_playback(); + inc sp +;src/main.c:484: return; jp _error_playback 00109$: -;src/main.c:419: wc_prwow(&win_xm); +;src/main.c:490: wc_prwow(&win_xm); ld hl, #_win_xm call _wc_prwow -;src/main.c:420: xm_draw_static_labels(); +;src/main.c:491: xm_draw_static_labels(); call _xm_draw_static_labels -;src/main.c:421: xm_draw_stats_labels(); +;src/main.c:492: xm_draw_stats_labels(); call _xm_draw_stats_labels -;src/main.c:422: xm_update_info(); // single call for now - periodic re-calling is a separate step, once this is confirmed stable +;src/main.c:493: last_track_status = TRACK_OBJ_ST_PLAYING; + ld hl, #_last_track_status + ld (hl), #0x21 +;src/main.c:494: xm_update_info(); call _xm_update_info -;src/main.c:427: while (1) -00117$: -;src/main.c:431: __endasm; +;src/main.c:496: frame_ctr = 0; + ld iy, #0 + add iy, sp + ld 0 (iy), #0x00 +;src/main.c:499: while (1) +00119$: +;src/main.c:503: __endasm; halt -;src/main.c:442: if (wc_key_pgdn()) // PgDn - unload and go to next file +;src/main.c:505: if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz + ld iy, #0 + add iy, sp + inc 0 (iy) + ld a, 0 (iy) + sub a, #0x0a + jr c, 00111$ +;src/main.c:507: frame_ctr = 0; + ld 0 (iy), #0x00 +;src/main.c:508: xm_update_info(); + call _xm_update_info +00111$: +;src/main.c:511: if (wc_key_pgdn()) // PgDn - unload and go to next file call _wc_key_pgdn or a, a - jr z, 00111$ -;src/main.c:444: esp_cmd(ESP_CMD_TRACK_STOP); + jr z, 00113$ +;src/main.c:513: esp_cmd(ESP_CMD_TRACK_STOP); ld a, #0xa2 call _esp_cmd -;src/main.c:445: esp_wait_busy(10000); +;src/main.c:514: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:446: esp_cmd(ESP_CMD_KILL_OBJECTS); +;src/main.c:515: esp_cmd(ESP_CMD_KILL_OBJECTS); ld a, #0xe4 call _esp_cmd -;src/main.c:447: esp_wait_busy(10000); +;src/main.c:516: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:448: wc_rresb(&win_xm); +;src/main.c:517: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:449: wc_exit(WC_NEXT_FILE); +;src/main.c:518: wc_exit(WC_NEXT_FILE); ld a, #0x02 call _wc_exit -00111$: -;src/main.c:452: if (wc_key_pgup()) // PgUp - unload and go to previous file +00113$: +;src/main.c:521: if (wc_key_pgup()) // PgUp - unload and go to previous file call _wc_key_pgup or a, a - jr z, 00113$ -;src/main.c:454: esp_cmd(ESP_CMD_TRACK_STOP); + jr z, 00115$ +;src/main.c:523: esp_cmd(ESP_CMD_TRACK_STOP); ld a, #0xa2 call _esp_cmd -;src/main.c:455: esp_wait_busy(10000); +;src/main.c:524: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:456: esp_cmd(ESP_CMD_KILL_OBJECTS); +;src/main.c:525: esp_cmd(ESP_CMD_KILL_OBJECTS); ld a, #0xe4 call _esp_cmd -;src/main.c:457: esp_wait_busy(10000); +;src/main.c:526: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:458: wc_rresb(&win_xm); +;src/main.c:527: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:459: wc_exit(WC_PREV_FILE); +;src/main.c:528: wc_exit(WC_PREV_FILE); ld a, #0x04 call _wc_exit -00113$: -;src/main.c:462: if (wc_key_esc()) // Esc - unload and exit +00115$: +;src/main.c:531: if (wc_key_esc()) // Esc - unload and exit call _wc_key_esc or a, a - jr z, 00117$ -;src/main.c:464: esp_cmd(ESP_CMD_TRACK_STOP); + jr z, 00119$ +;src/main.c:533: esp_cmd(ESP_CMD_TRACK_STOP); ld a, #0xa2 call _esp_cmd -;src/main.c:465: esp_wait_busy(10000); +;src/main.c:534: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:466: esp_cmd(ESP_CMD_KILL_OBJECTS); +;src/main.c:535: esp_cmd(ESP_CMD_KILL_OBJECTS); ld a, #0xe4 call _esp_cmd -;src/main.c:467: esp_wait_busy(10000); +;src/main.c:536: esp_wait_busy(10000); ld de, #0x2710 ld hl, #0x0000 call _esp_wait_busy -;src/main.c:468: wc_rresb(&win_xm); +;src/main.c:537: wc_rresb(&win_xm); ld hl, #_win_xm call _wc_rresb -;src/main.c:469: wc_exit(WC_EXIT); +;src/main.c:538: wc_exit(WC_EXIT); xor a, a call _wc_exit -;src/main.c:472: } - jp 00117$ -;src/main.c:475: void main() + jp 00119$ +00121$: +;src/main.c:541: } + inc sp + ret +;src/main.c:544: void main() ; --------------------------------- ; Function main ; --------------------------------- _main:: -;src/main.c:485: __endasm; +;src/main.c:554: __endasm; ld (_ret_sp), sp ld (_call_type), a ld (_p_file_name), bc @@ -1796,25 +1992,27 @@ _main:: ld (_file_ext), a ld (_filesize), hl ld (_filesize + 2), de -;src/main.c:487: switch (call_type) +;src/main.c:556: 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:489: case WC_CALL_EXT: -;src/main.c:490: main_start(); -;src/main.c:491: break; -;src/main.c:493: case WC_CALL_MENU: -;src/main.c:494: about(); -;src/main.c:495: break; -;src/main.c:497: default: -;src/main.c:498: wc_exit(WC_EXIT); +;src/main.c:558: case WC_CALL_EXT: +;src/main.c:559: main_start(); +;src/main.c:560: break; +;src/main.c:562: case WC_CALL_MENU: +;src/main.c:563: about(); +;src/main.c:564: break; +;src/main.c:566: default: +;src/main.c:567: wc_exit(WC_EXIT); xor a, a -;src/main.c:499: } -;src/main.c:500: } +;src/main.c:568: } +;src/main.c:569: } jp _wc_exit .area _CODE .area _INITIALIZER +__xinit__state_esp: + .db #0xff ; 255 .area _CABS (ABS) diff --git a/obj/out.bin b/obj/out.bin index 56d42b1d788c56c1e9afc0df4225217ccdb0c710..27527706c6575e764b810d2fca584a9c720356b2 100644 GIT binary patch delta 2110 zcmaJ?eQZ-z6uyP-#Pcz-{wDTjodk&>_8+Yp&}6%MWm*arigI;j{*)1-38hC^Ba|vP zg%V$>e=spAI)00(Ls&=u_NQeLrK{4d2#b{Y@f~XQTWuRORwpi?rT)gbC{b}Q3^@I$ zlP>JULQFu1sgTmeV`R~323fmp&^UR z?>ZMKQF_HM8X$vNi*gzK&hyE?c_dQfu)uFzbeJNCyRa#8v^@QpI zvWpzR0_5&C5swKt`fy}NP%cDO!?LKH*4cy~l`A?~_(x&7RaNK$tqH+)Dr-%#<`Gqs zg|$wy<_tg+tU0Y>BPfLvkPG*dZyCAMd1b4+9m_*=js4vKNG7{xX9m zDWs&9iXc?xC3NBy|@7MW!JfB85n}5yH*#nk{9ijy% z`W+8q8;{KB|L#y^e^BlY&<{fNEp0Ip3P*H)8RsEbm=LKZmf(w+3hS{})!AcavYep+%11Kg4s&#(1+!mmph2#Q4Goc|_Fsjx9 z!m)->Y;DWiyF7@g3X4V^M3z}l|U zO|xwcDep^*X8b`?DFLBq(atDsRIWHVu_oj#6`|qs&5I3v~=$b0yUFfv7I3 z;T#!&?GkE9Nu>v1hzy2~X#{R&-pOnFjm(?5iPlBA8F(5FnkQ1Jd$Jko)A|zLn;*OI?Pq_@Z zCQ{pjm$c8`v;Doe{oUJW#a-DBJ4=vCb*@F(s(6QdyhZZAnW_g5#}QxPgLliwbAY*Z zz}&L-jHjH$Wt$B&irZ|(_>r^BHR01kb$+nB%L#r_BaLCF_8i9|%#Hv@7MIhDe!PUP z^0NaI?43089h_us8P8IZmYpQsC#L&^bRV)6;!5yIZgvuT8DZWrpt}jRb;AV*DqB>m zJ70-+{88KNDcj(Xyo}H{yJarC?m5-EEJuRMRC)F1Dr=bVu`TJ`41&0Khvemie$%bZ zxdCQ+`D2XaHYX`9BfJrh`p%s41-n}6Bs}_5@H@w}^ShFo{Paf9(?F_iGiZ6B--iX8 zh(&h;0j$PhtcaWlMs6PuyPd?ngt*IydnutWb@khxfy*!cu?-wP;SLp%uY+86IQxGE z>F#54IjNNCj-E8s27dvS2p!5Tm!Y&5#Vsq090U(~Hq`G}gwJJf7hkT+PwOY01NY5C z@BeYuL-V!EsV5)$>CR#Bjno{kh$Ro$5pf$ya+R5w+!C>iB)M5nJVw%g{ipZg5!YQm zqWo;$WGn~`$KaMwoR-ME^{c~szm#U#^pfew;v3d^E}?kV{o&Z9lx4B=QuPXp;LG1V zqobp_In%~${c6^rXIl&{P4xK_^>u9jB-@u^UWv7j@iW*yo){cbqpWp|HIIYG@PHW@ zS*M0HYc@p7(Cd(!pS;}=CO7oACYGL zG%`Cl!P?TSQjeH-f_3W~nK#XP4R62&#d@W^aJpEpakn-~8D&#dSZS&{1K*wh0pmTF ASpWb4 delta 1589 zcmah}Z)h837{ALUO?pk$AZ}`<TIL*X;H-m!Ox%#JGAAutXEPUE zE(ux9eVCL3rGjjVAA+bU7L!-;OM7OR!mBMTbuwNxxD#fH(8*x!n#Si%(zUgM_u=lj z-}8I!e$T&GIisAm>EqFyUnJ>Khb~TzX16wNY`eh_s)?x&TsUvnwXo zuW2KLB|5L#$O%RJ|QFu^x zTABrZy&D<}eGn3bLSa2Jz6qHL1%-!XS8dh7V%T30CWS>|i~OjiggC-up@+5iO&zW2{eK3q|`pGc1^PA;XTkfz#8Z3k^1yL&*!Xjw*R1$9` z#F*oHX9U@Wj(H>z(JbV~KmLz4`q?7OribY@H5qU%rVqYVo&0`S z-ycD5hiIQlyNkw@8rLNSJ-!NoQHJ($2z%&r5d`LxicOsO(i#e88O(kIcJOI)Fb+*Pes~=G~Row4OyTQ|AS&>z(d60L^A zPB`XP)6X7%UAOoD{0QCHXQ1sMJY4*%T%t=qb_4_KVUn~+^txPdAma|tqk zZ={qZvU0#~I4-RM6&!fLaKu&tUMvfQ#8&}{0}%368PLA9HU`k`LdW9W!NM^<1T$91 zjb07nov;JUw}cyu&pX%zJrH3Fa4U@|xQTidHnhx6<=LAn>~z7~Lh`7I> 8); - 00000101 FD 7E 01 [19] 400 ld a, 1 (iy) - 00000104 D3 57 [11] 401 out (_SPI_DATA), a - 402 ;src/esp32.c:89: SPI_DATA = (u8)(data >> 16); - 00000106 FD 7E 02 [19] 403 ld a, 2 (iy) - 00000109 D3 57 [11] 404 out (_SPI_DATA), a - 405 ;src/esp32.c:90: SPI_DATA = (u8)(data >> 24); - 0000010B FD 7E 03 [19] 406 ld a, 3 (iy) - 0000010E D3 57 [11] 407 out (_SPI_DATA), a - 408 ;src/esp32.c:91: SPI_CTRL = SPI_ESP_CS_OFF; - 00000110 3E 03 [ 7] 409 ld a, #0x03 - 00000112 D3 77 [11] 410 out (_SPI_CTRL), a - 411 ;src/esp32.c:92: } - 00000114 E1 [10] 412 pop hl - 00000115 F1 [10] 413 pop af - 00000116 F1 [10] 414 pop af - 00000117 E9 [ 4] 415 jp (hl) - 416 ;src/esp32.c:94: void esp_wr_end() - 417 ; --------------------------------- - 418 ; Function esp_wr_end - 419 ; --------------------------------- - 00000118 420 _esp_wr_end:: - 421 ;src/esp32.c:96: SPI_CTRL = SPI_ESP_CS_ON; - 00000118 3E 13 [ 7] 422 ld a, #0x13 - 0000011A D3 77 [11] 423 out (_SPI_CTRL), a - 424 ;src/esp32.c:97: SPI_DATA = ESP_SPI_CMD_W_END; - 0000011C 3E 07 [ 7] 425 ld a, #0x07 - 0000011E D3 57 [11] 426 out (_SPI_DATA), a - 427 ;src/esp32.c:98: SPI_DATA; // dummy - 00000120 DB 57 [11] 428 in a, (_SPI_DATA) - 429 ;src/esp32.c:99: SPI_CTRL = SPI_ESP_CS_OFF; - 00000122 3E 03 [ 7] 430 ld a, #0x03 - 00000124 D3 77 [11] 431 out (_SPI_CTRL), a - 432 ;src/esp32.c:100: } - 00000126 C9 [10] 433 ret - 434 ;src/esp32.c:102: void esp_send_dma(u16 a, u8 p, u16 l, u16 n) + 176 ; Home + 177 ;-------------------------------------------------------- + 178 .area _HOME + 179 .area _HOME + 180 ;-------------------------------------------------------- + 181 ; code + 182 ;-------------------------------------------------------- + 183 .area _CODE + 184 ;src/wc_api.c:34: void wc_exit(u8 rc) __naked + 185 ; --------------------------------- + 186 ; Function wc_exit + 187 ; --------------------------------- + 00000000 188 _wc_exit:: + 189 ;src/wc_api.c:40: __endasm; + 00000000 ED 7Br00r10 [20] 190 ld sp, (_ret_sp) + 00000004 C9 [10] 191 ret + 192 ;src/wc_api.c:41: } + 193 ;src/wc_api.c:55: void wc_set_freq_14mhz() __naked + 194 ; --------------------------------- + 195 ; Function wc_set_freq_14mhz + 196 ; --------------------------------- + 00000005 197 _wc_set_freq_14mhz:: + 198 ;src/wc_api.c:62: __endasm; + 00000005 06 00 [ 7] 199 ld b, #0x00 ; type: Z80 frequency + 00000007 0E 02 [ 7] 200 ld c, #0x02 ; %10 = 14 MHz + 00000009 3E 0E [ 7] 201 ld a, #0x0E + 0000000B C3 06 60 [10] 202 jp 0x6006 + 203 ;src/wc_api.c:63: } + 204 ;src/esp32.c:18: void esp_cmd(u8 cmd) + 205 ; --------------------------------- + 206 ; Function esp_cmd + 207 ; --------------------------------- + 0000000E 208 _esp_cmd:: + 0000000E 4F [ 4] 209 ld c, a + 210 ;src/esp32.c:20: SPI_CTRL = SPI_ESP_CS_ON; + 0000000F 3E 13 [ 7] 211 ld a, #0x13 + 00000011 D3 77 [11] 212 out (_SPI_CTRL), a + 213 ;src/esp32.c:21: SPI_DATA = ESP_SPI_CMD_WR_REGS; + 00000013 3E 01 [ 7] 214 ld a, #0x01 + 00000015 D3 57 [11] 215 out (_SPI_DATA), a + 216 ;src/esp32.c:22: SPI_DATA = ESP_REG_COMMAND; + 00000017 AF [ 4] 217 xor a, a + 00000018 D3 57 [11] 218 out (_SPI_DATA), a + 219 ;src/esp32.c:23: SPI_DATA; // dummy + 0000001A DB 57 [11] 220 in a, (_SPI_DATA) + 221 ;src/esp32.c:24: SPI_DATA = cmd; // Command + 0000001C 79 [ 4] 222 ld a, c + 0000001D D3 57 [11] 223 out (_SPI_DATA), a + 224 ;src/esp32.c:25: SPI_DATA = ESP_ST_IDLE; // Reset status + 0000001F AF [ 4] 225 xor a, a + 00000020 D3 57 [11] 226 out (_SPI_DATA), a + 227 ;src/esp32.c:26: SPI_CTRL = SPI_ESP_CS_OFF; + 00000022 3E 03 [ 7] 228 ld a, #0x03 + 00000024 D3 77 [11] 229 out (_SPI_CTRL), a + 230 ;src/esp32.c:27: } + 00000026 C9 [10] 231 ret + 232 ;src/esp32.c:29: u8 esp_rd_reg8(u8 reg) + 233 ; --------------------------------- + 234 ; Function esp_rd_reg8 + 235 ; --------------------------------- + 00000027 236 _esp_rd_reg8:: + 00000027 4F [ 4] 237 ld c, a + 238 ;src/esp32.c:31: SPI_CTRL = SPI_ESP_CS_ON; + 00000028 3E 13 [ 7] 239 ld a, #0x13 + 0000002A D3 77 [11] 240 out (_SPI_CTRL), a + 241 ;src/esp32.c:32: SPI_DATA = ESP_SPI_CMD_RD_REGS; + 0000002C 3E 02 [ 7] 242 ld a, #0x02 + 0000002E D3 57 [11] 243 out (_SPI_DATA), a + 244 ;src/esp32.c:33: SPI_DATA = reg; + 00000030 79 [ 4] 245 ld a, c + 00000031 D3 57 [11] 246 out (_SPI_DATA), a + 247 ;src/esp32.c:34: SPI_DATA; // dummy + 00000033 DB 57 [11] 248 in a, (_SPI_DATA) + 249 ;src/esp32.c:35: SPI_DATA; // dummy + 00000035 DB 57 [11] 250 in a, (_SPI_DATA) + 251 ;src/esp32.c:36: u8 rc = SPI_DATA; + 00000037 DB 57 [11] 252 in a, (_SPI_DATA) + 00000039 4F [ 4] 253 ld c, a + 254 ;src/esp32.c:37: SPI_CTRL = SPI_ESP_CS_OFF; + 0000003A 3E 03 [ 7] 255 ld a, #0x03 + 0000003C D3 77 [11] 256 out (_SPI_CTRL), a + 257 ;src/esp32.c:39: return rc; + 0000003E 79 [ 4] 258 ld a, c + 259 ;src/esp32.c:40: } + 0000003F C9 [10] 260 ret + 261 ;src/esp32.c:42: u32 esp_rd_reg32(u8 reg) + 262 ; --------------------------------- + 263 ; Function esp_rd_reg32 + 264 ; --------------------------------- + 00000040 265 _esp_rd_reg32:: + 00000040 DD E5 [15] 266 push ix + 00000042 DD 21 00 00 [14] 267 ld ix, #0 + 00000046 DD 39 [15] 268 add ix, sp + 00000048 F5 [11] 269 push af + 00000049 F5 [11] 270 push af + 0000004A 4F [ 4] 271 ld c, a + 272 ;src/esp32.c:44: SPI_CTRL = SPI_ESP_CS_ON; + 0000004B 3E 13 [ 7] 273 ld a, #0x13 + 0000004D D3 77 [11] 274 out (_SPI_CTRL), a + 275 ;src/esp32.c:45: SPI_DATA = ESP_SPI_CMD_RD_REGS; + 0000004F 3E 02 [ 7] 276 ld a, #0x02 + 00000051 D3 57 [11] 277 out (_SPI_DATA), a + 278 ;src/esp32.c:46: SPI_DATA = reg; + 00000053 79 [ 4] 279 ld a, c + 00000054 D3 57 [11] 280 out (_SPI_DATA), a + 281 ;src/esp32.c:47: SPI_DATA; // dummy + 00000056 DB 57 [11] 282 in a, (_SPI_DATA) + 283 ;src/esp32.c:48: SPI_DATA; // dummy + 00000058 DB 57 [11] 284 in a, (_SPI_DATA) + 285 ;src/esp32.c:49: u32 rc = SPI_DATA; + 0000005A DB 57 [11] 286 in a, (_SPI_DATA) + 0000005C 4F [ 4] 287 ld c, a + 288 ;src/esp32.c:50: rc |= (u32)SPI_DATA << 8; + 0000005D DB 57 [11] 289 in a, (_SPI_DATA) + 0000005F 57 [ 4] 290 ld d, a + 00000060 59 [ 4] 291 ld e, c + 292 ;src/esp32.c:51: rc |= (u32)SPI_DATA << 16; + 00000061 DB 57 [11] 293 in a, (_SPI_DATA) + 00000063 DD 77 FC [19] 294 ld -4 (ix), a + 00000066 AF [ 4] 295 xor a, a + 00000067 DD 77 FD [19] 296 ld -3 (ix), a + 0000006A DD 77 FE [19] 297 ld -2 (ix), a + 0000006D DD 77 FF [19] 298 ld -1 (ix), a + 00000070 DD 7E FC [19] 299 ld a, -4 (ix) + 00000073 DD 77 FE [19] 300 ld -2 (ix), a + 00000076 AF [ 4] 301 xor a, a + 00000077 DD 77 FF [19] 302 ld -1 (ix), a + 0000007A DD 77 FC [19] 303 ld -4 (ix), a + 0000007D DD 77 FD [19] 304 ld -3 (ix), a + 00000080 DD 6E FE [19] 305 ld l, -2 (ix) + 306 ;src/esp32.c:52: rc |= (u32)SPI_DATA << 24; + 00000083 DB 57 [11] 307 in a, (_SPI_DATA) + 00000085 DD 77 FC [19] 308 ld -4 (ix), a + 00000088 AF [ 4] 309 xor a, a + 00000089 DD 77 FD [19] 310 ld -3 (ix), a + 0000008C DD 77 FE [19] 311 ld -2 (ix), a + 0000008F DD 77 FF [19] 312 ld -1 (ix), a + 00000092 DD 7E FC [19] 313 ld a, -4 (ix) + 00000095 DD 77 FF [19] 314 ld -1 (ix), a + 00000098 AF [ 4] 315 xor a, a + 00000099 DD 77 FC [19] 316 ld -4 (ix), a + 0000009C DD 77 FD [19] 317 ld -3 (ix), a + 0000009F DD 77 FE [19] 318 ld -2 (ix), a + 000000A2 DD 66 FF [19] 319 ld h, -1 (ix) + 320 ;src/esp32.c:53: SPI_CTRL = SPI_ESP_CS_OFF; + 000000A5 3E 03 [ 7] 321 ld a, #0x03 + 000000A7 D3 77 [11] 322 out (_SPI_CTRL), a + 323 ;src/esp32.c:55: return rc; + 324 ;src/esp32.c:56: } + 000000A9 DD F9 [10] 325 ld sp, ix + 000000AB DD E1 [14] 326 pop ix + 000000AD C9 [10] 327 ret + 328 ;src/esp32.c:58: void esp_rd_regs(u8 reg, void *data, u8 size) + 329 ; --------------------------------- + 330 ; Function esp_rd_regs + 331 ; --------------------------------- + 000000AE 332 _esp_rd_regs:: + 000000AE 4F [ 4] 333 ld c, a + 334 ;src/esp32.c:60: u8 *d = (u8*)data; + 335 ;src/esp32.c:62: SPI_CTRL = SPI_ESP_CS_ON; + 000000AF 3E 13 [ 7] 336 ld a, #0x13 + 000000B1 D3 77 [11] 337 out (_SPI_CTRL), a + 338 ;src/esp32.c:63: SPI_DATA = ESP_SPI_CMD_RD_REGS; + 000000B3 3E 02 [ 7] 339 ld a, #0x02 + 000000B5 D3 57 [11] 340 out (_SPI_DATA), a + 341 ;src/esp32.c:64: SPI_DATA = reg; + 000000B7 79 [ 4] 342 ld a, c + 000000B8 D3 57 [11] 343 out (_SPI_DATA), a + 344 ;src/esp32.c:65: SPI_DATA; // dummy + 000000BA DB 57 [11] 345 in a, (_SPI_DATA) + 346 ;src/esp32.c:66: SPI_DATA; // dummy + 000000BC DB 57 [11] 347 in a, (_SPI_DATA) + 348 ;src/esp32.c:67: while (size--) *d++ = SPI_DATA; + 000000BE FD 21 02 00 [14] 349 ld iy, #2 + 000000C2 FD 39 [15] 350 add iy, sp + 000000C4 FD 4E 00 [19] 351 ld c, 0 (iy) + 000000C7 352 00101$: + 000000C7 79 [ 4] 353 ld a, c + 000000C8 0D [ 4] 354 dec c + 000000C9 B7 [ 4] 355 or a, a + 000000CA 28 07 [12] 356 jr z, 00103$ + 000000CC DB 57 [11] 357 in a, (_SPI_DATA) + 000000CE 12 [ 7] 358 ld (de), a + 000000CF 13 [ 6] 359 inc de + 000000D0 C3rC7r00 [10] 360 jp 00101$ + 000000D3 361 00103$: + 362 ;src/esp32.c:68: SPI_CTRL = SPI_ESP_CS_OFF; + 000000D3 3E 03 [ 7] 363 ld a, #0x03 + 000000D5 D3 77 [11] 364 out (_SPI_CTRL), a + 365 ;src/esp32.c:69: } + 000000D7 E1 [10] 366 pop hl + 000000D8 33 [ 6] 367 inc sp + 000000D9 E9 [ 4] 368 jp (hl) + 369 ;src/esp32.c:71: void esp_wr_reg8(u8 reg, u8 data) + 370 ; --------------------------------- + 371 ; Function esp_wr_reg8 + 372 ; --------------------------------- + 000000DA 373 _esp_wr_reg8:: + 000000DA 47 [ 4] 374 ld b, a + 000000DB 4D [ 4] 375 ld c, l + 376 ;src/esp32.c:73: SPI_CTRL = SPI_ESP_CS_ON; + 000000DC 3E 13 [ 7] 377 ld a, #0x13 + 000000DE D3 77 [11] 378 out (_SPI_CTRL), a + 379 ;src/esp32.c:74: SPI_DATA = ESP_SPI_CMD_WR_REGS; + 000000E0 3E 01 [ 7] 380 ld a, #0x01 + 000000E2 D3 57 [11] 381 out (_SPI_DATA), a + 382 ;src/esp32.c:75: SPI_DATA = reg; + 000000E4 78 [ 4] 383 ld a, b + 000000E5 D3 57 [11] 384 out (_SPI_DATA), a + 385 ;src/esp32.c:76: SPI_DATA; // dummy + 000000E7 DB 57 [11] 386 in a, (_SPI_DATA) + 387 ;src/esp32.c:77: SPI_DATA = data; + 000000E9 79 [ 4] 388 ld a, c + 000000EA D3 57 [11] 389 out (_SPI_DATA), a + 390 ;src/esp32.c:78: SPI_CTRL = SPI_ESP_CS_OFF; + 000000EC 3E 03 [ 7] 391 ld a, #0x03 + 000000EE D3 77 [11] 392 out (_SPI_CTRL), a + 393 ;src/esp32.c:79: } + 000000F0 C9 [10] 394 ret + 395 ;src/esp32.c:81: void esp_wr_reg32(u8 reg, u32 data) + 396 ; --------------------------------- + 397 ; Function esp_wr_reg32 + 398 ; --------------------------------- + 000000F1 399 _esp_wr_reg32:: + 000000F1 4F [ 4] 400 ld c, a + 401 ;src/esp32.c:83: SPI_CTRL = SPI_ESP_CS_ON; + 000000F2 3E 13 [ 7] 402 ld a, #0x13 + 000000F4 D3 77 [11] 403 out (_SPI_CTRL), a + 404 ;src/esp32.c:84: SPI_DATA = ESP_SPI_CMD_WR_REGS; + 000000F6 3E 01 [ 7] 405 ld a, #0x01 + 000000F8 D3 57 [11] 406 out (_SPI_DATA), a + 407 ;src/esp32.c:85: SPI_DATA = reg; + 000000FA 79 [ 4] 408 ld a, c + 000000FB D3 57 [11] 409 out (_SPI_DATA), a + 410 ;src/esp32.c:86: SPI_DATA; // dummy + 000000FD DB 57 [11] 411 in a, (_SPI_DATA) + 412 ;src/esp32.c:87: SPI_DATA = (u8)data; + 000000FF FD 21 02 00 [14] 413 ld iy, #2 + 00000103 FD 39 [15] 414 add iy, sp + 00000105 FD 7E 00 [19] 415 ld a, 0 (iy) + 00000108 D3 57 [11] 416 out (_SPI_DATA), a + 417 ;src/esp32.c:88: SPI_DATA = (u8)(data >> 8); + 0000010A FD 7E 01 [19] 418 ld a, 1 (iy) + 0000010D D3 57 [11] 419 out (_SPI_DATA), a + 420 ;src/esp32.c:89: SPI_DATA = (u8)(data >> 16); + 0000010F FD 7E 02 [19] 421 ld a, 2 (iy) + 00000112 D3 57 [11] 422 out (_SPI_DATA), a + 423 ;src/esp32.c:90: SPI_DATA = (u8)(data >> 24); + 00000114 FD 7E 03 [19] 424 ld a, 3 (iy) + 00000117 D3 57 [11] 425 out (_SPI_DATA), a + 426 ;src/esp32.c:91: SPI_CTRL = SPI_ESP_CS_OFF; + 00000119 3E 03 [ 7] 427 ld a, #0x03 + 0000011B D3 77 [11] 428 out (_SPI_CTRL), a + 429 ;src/esp32.c:92: } + 0000011D E1 [10] 430 pop hl + 0000011E F1 [10] 431 pop af + 0000011F F1 [10] 432 pop af + 00000120 E9 [ 4] 433 jp (hl) + 434 ;src/esp32.c:94: void esp_wr_end() 435 ; --------------------------------- - 436 ; Function esp_send_dma + 436 ; Function esp_wr_end 437 ; --------------------------------- - 00000127 438 _esp_send_dma:: - 00000127 7D [ 4] 439 ld a, l - 440 ;src/esp32.c:105: TS_DMASADDRL = (u8)a; - 00000128 01 AF 1A [10] 441 ld bc, #_TS_DMASADDRL - 0000012B ED 79 [12] 442 out (c), a - 443 ;src/esp32.c:106: TS_DMASADDRH = (u8)((u16)a >> 8); - 0000012D 7C [ 4] 444 ld a, h - 0000012E 01 AF 1B [10] 445 ld bc, #_TS_DMASADDRH - 00000131 ED 79 [12] 446 out (c), a - 447 ;src/esp32.c:107: TS_DMASADDRX = p; - 00000133 FD 21 02 00 [14] 448 ld iy, #2 - 00000137 FD 39 [15] 449 add iy, sp - 00000139 FD 7E 00 [19] 450 ld a, 0 (iy) - 0000013C 01 AF 1C [10] 451 ld bc, #_TS_DMASADDRX - 0000013F ED 79 [12] 452 out (c), a - 453 ;src/esp32.c:108: TS_DMALEN = (u8)((l >> 1) - 1); - 00000141 FD 7E 01 [19] 454 ld a, 1 (iy) - 00000144 FD 4E 02 [19] 455 ld c, 2 (iy) - 00000147 FD 23 [10] 456 inc iy - 00000149 CB 39 [ 8] 457 srl c - 0000014B CB 1F [ 8] 458 rr a - 0000014D 3D [ 4] 459 dec a - 0000014E 01 AF 26 [10] 460 ld bc, #_TS_DMALEN - 00000151 ED 79 [12] 461 out (c), a - 462 ;src/esp32.c:109: TS_DMANUM = (u8)(n - 1); - 00000153 FD 7E 02 [19] 463 ld a, 2 (iy) - 00000156 3D [ 4] 464 dec a - 00000157 01 AF 28 [10] 465 ld bc, #_TS_DMANUM - 0000015A ED 79 [12] 466 out (c), a - 467 ;src/esp32.c:111: SPI_CTRL = SPI_ESP_CS_ON; - 0000015C 3E 13 [ 7] 468 ld a, #0x13 - 0000015E D3 77 [11] 469 out (_SPI_CTRL), a - 470 ;src/esp32.c:112: SPI_DATA = ESP_SPI_CMD_WR_DATA; - 00000160 3E 03 [ 7] 471 ld a, #0x03 - 00000162 D3 57 [11] 472 out (_SPI_DATA), a - 473 ;src/esp32.c:113: SPI_DATA; // dummy - 00000164 DB 57 [11] 474 in a, (_SPI_DATA) - 475 ;src/esp32.c:114: SPI_DATA; // dummy - 00000166 DB 57 [11] 476 in a, (_SPI_DATA) - 477 ;src/esp32.c:115: TS_DMACTR = TS_DMA_RAM_SPI; - 00000168 3E 82 [ 7] 478 ld a, #0x82 - 0000016A 01 AF 27 [10] 479 ld bc, #_TS_DMACTR - 0000016D ED 79 [12] 480 out (c), a - 481 ;src/esp32.c:116: while (TS_DMASTATUS & 0x80); - 0000016F 482 00101$: - 0000016F 3E 27 [ 7] 483 ld a, #>(_TS_DMASTATUS) - 00000171 DB AF [11] 484 in a, (#<(_TS_DMASTATUS)) - 00000173 07 [ 4] 485 rlca - 00000174 38 F9 [12] 486 jr c, 00101$ - 487 ;src/esp32.c:117: SPI_CTRL = SPI_ESP_CS_OFF; - 00000176 3E 03 [ 7] 488 ld a, #0x03 - 00000178 D3 77 [11] 489 out (_SPI_CTRL), a - 490 ;src/esp32.c:119: esp_wr_end(); - 0000017A CDr18r01 [17] 491 call _esp_wr_end - 492 ;src/esp32.c:120: esp_wait_busy(60000); - 0000017D 11 60 EA [10] 493 ld de, #0xea60 - 00000180 21 00 00 [10] 494 ld hl, #0x0000 - 00000183 CDrD5r01 [17] 495 call _esp_wait_busy - 496 ;src/esp32.c:121: } - 00000186 E1 [10] 497 pop hl - 00000187 F1 [10] 498 pop af - 00000188 F1 [10] 499 pop af - 00000189 33 [ 6] 500 inc sp - 0000018A E9 [ 4] 501 jp (hl) - 502 ;src/esp32.c:123: void esp_rd_end() - 503 ; --------------------------------- - 504 ; Function esp_rd_end - 505 ; --------------------------------- - 0000018B 506 _esp_rd_end:: - 507 ;src/esp32.c:125: SPI_CTRL = SPI_ESP_CS_ON; - 0000018B 3E 13 [ 7] 508 ld a, #0x13 - 0000018D D3 77 [11] 509 out (_SPI_CTRL), a - 510 ;src/esp32.c:126: SPI_DATA = ESP_SPI_CMD_R_END; - 0000018F 3E 08 [ 7] 511 ld a, #0x08 - 00000191 D3 57 [11] 512 out (_SPI_DATA), a - 513 ;src/esp32.c:127: SPI_DATA; // dummy - 00000193 DB 57 [11] 514 in a, (_SPI_DATA) - 515 ;src/esp32.c:128: SPI_CTRL = SPI_ESP_CS_OFF; - 00000195 3E 03 [ 7] 516 ld a, #0x03 - 00000197 D3 77 [11] 517 out (_SPI_CTRL), a - 518 ;src/esp32.c:129: } - 00000199 C9 [10] 519 ret - 520 ;src/esp32.c:131: u32 esp_wait_status(u8 status, u32 timeout) + 00000121 438 _esp_wr_end:: + 439 ;src/esp32.c:96: SPI_CTRL = SPI_ESP_CS_ON; + 00000121 3E 13 [ 7] 440 ld a, #0x13 + 00000123 D3 77 [11] 441 out (_SPI_CTRL), a + 442 ;src/esp32.c:97: SPI_DATA = ESP_SPI_CMD_W_END; + 00000125 3E 07 [ 7] 443 ld a, #0x07 + 00000127 D3 57 [11] 444 out (_SPI_DATA), a + 445 ;src/esp32.c:98: SPI_DATA; // dummy + 00000129 DB 57 [11] 446 in a, (_SPI_DATA) + 447 ;src/esp32.c:99: SPI_CTRL = SPI_ESP_CS_OFF; + 0000012B 3E 03 [ 7] 448 ld a, #0x03 + 0000012D D3 77 [11] 449 out (_SPI_CTRL), a + 450 ;src/esp32.c:100: } + 0000012F C9 [10] 451 ret + 452 ;src/esp32.c:102: void esp_send_dma(u16 a, u8 p, u16 l, u16 n) + 453 ; --------------------------------- + 454 ; Function esp_send_dma + 455 ; --------------------------------- + 00000130 456 _esp_send_dma:: + 00000130 7D [ 4] 457 ld a, l + 458 ;src/esp32.c:105: TS_DMASADDRL = (u8)a; + 00000131 01 AF 1A [10] 459 ld bc, #_TS_DMASADDRL + 00000134 ED 79 [12] 460 out (c), a + 461 ;src/esp32.c:106: TS_DMASADDRH = (u8)((u16)a >> 8); + 00000136 7C [ 4] 462 ld a, h + 00000137 01 AF 1B [10] 463 ld bc, #_TS_DMASADDRH + 0000013A ED 79 [12] 464 out (c), a + 465 ;src/esp32.c:107: TS_DMASADDRX = p; + 0000013C FD 21 02 00 [14] 466 ld iy, #2 + 00000140 FD 39 [15] 467 add iy, sp + 00000142 FD 7E 00 [19] 468 ld a, 0 (iy) + 00000145 01 AF 1C [10] 469 ld bc, #_TS_DMASADDRX + 00000148 ED 79 [12] 470 out (c), a + 471 ;src/esp32.c:108: TS_DMALEN = (u8)((l >> 1) - 1); + 0000014A FD 7E 01 [19] 472 ld a, 1 (iy) + 0000014D FD 4E 02 [19] 473 ld c, 2 (iy) + 00000150 FD 23 [10] 474 inc iy + 00000152 CB 39 [ 8] 475 srl c + 00000154 CB 1F [ 8] 476 rr a + 00000156 3D [ 4] 477 dec a + 00000157 01 AF 26 [10] 478 ld bc, #_TS_DMALEN + 0000015A ED 79 [12] 479 out (c), a + 480 ;src/esp32.c:109: TS_DMANUM = (u8)(n - 1); + 0000015C FD 7E 02 [19] 481 ld a, 2 (iy) + 0000015F 3D [ 4] 482 dec a + 00000160 01 AF 28 [10] 483 ld bc, #_TS_DMANUM + 00000163 ED 79 [12] 484 out (c), a + 485 ;src/esp32.c:111: SPI_CTRL = SPI_ESP_CS_ON; + 00000165 3E 13 [ 7] 486 ld a, #0x13 + 00000167 D3 77 [11] 487 out (_SPI_CTRL), a + 488 ;src/esp32.c:112: SPI_DATA = ESP_SPI_CMD_WR_DATA; + 00000169 3E 03 [ 7] 489 ld a, #0x03 + 0000016B D3 57 [11] 490 out (_SPI_DATA), a + 491 ;src/esp32.c:113: SPI_DATA; // dummy + 0000016D DB 57 [11] 492 in a, (_SPI_DATA) + 493 ;src/esp32.c:114: SPI_DATA; // dummy + 0000016F DB 57 [11] 494 in a, (_SPI_DATA) + 495 ;src/esp32.c:115: TS_DMACTR = TS_DMA_RAM_SPI; + 00000171 3E 82 [ 7] 496 ld a, #0x82 + 00000173 01 AF 27 [10] 497 ld bc, #_TS_DMACTR + 00000176 ED 79 [12] 498 out (c), a + 499 ;src/esp32.c:116: while (TS_DMASTATUS & 0x80); + 00000178 500 00101$: + 00000178 3E 27 [ 7] 501 ld a, #>(_TS_DMASTATUS) + 0000017A DB AF [11] 502 in a, (#<(_TS_DMASTATUS)) + 0000017C 07 [ 4] 503 rlca + 0000017D 38 F9 [12] 504 jr c, 00101$ + 505 ;src/esp32.c:117: SPI_CTRL = SPI_ESP_CS_OFF; + 0000017F 3E 03 [ 7] 506 ld a, #0x03 + 00000181 D3 77 [11] 507 out (_SPI_CTRL), a + 508 ;src/esp32.c:119: esp_wr_end(); + 00000183 CDr21r01 [17] 509 call _esp_wr_end + 510 ;src/esp32.c:120: esp_wait_busy(60000); + 00000186 11 60 EA [10] 511 ld de, #0xea60 + 00000189 21 00 00 [10] 512 ld hl, #0x0000 + 0000018C CDrDEr01 [17] 513 call _esp_wait_busy + 514 ;src/esp32.c:121: } + 0000018F E1 [10] 515 pop hl + 00000190 F1 [10] 516 pop af + 00000191 F1 [10] 517 pop af + 00000192 33 [ 6] 518 inc sp + 00000193 E9 [ 4] 519 jp (hl) + 520 ;src/esp32.c:123: void esp_rd_end() 521 ; --------------------------------- - 522 ; Function esp_wait_status + 522 ; Function esp_rd_end 523 ; --------------------------------- - 0000019A 524 _esp_wait_status:: - 0000019A DD E5 [15] 525 push ix - 0000019C DD 21 00 00 [14] 526 ld ix, #0 - 000001A0 DD 39 [15] 527 add ix, sp - 000001A2 4F [ 4] 528 ld c, a - 529 ;src/esp32.c:133: while (--timeout) if (esp_rd_reg8(ESP_REG_STATUS) == status) break; - 000001A3 DD 5E 04 [19] 530 ld e, 4 (ix) - 000001A6 DD 56 05 [19] 531 ld d, 5 (ix) - 000001A9 DD 6E 06 [19] 532 ld l, 6 (ix) - 000001AC DD 66 07 [19] 533 ld h, 7 (ix) - 000001AF 534 00103$: - 000001AF 7B [ 4] 535 ld a, e - 000001B0 C6 FF [ 7] 536 add a, #0xff - 000001B2 5F [ 4] 537 ld e, a - 000001B3 7A [ 4] 538 ld a, d - 000001B4 CE FF [ 7] 539 adc a, #0xff - 000001B6 57 [ 4] 540 ld d, a - 000001B7 7D [ 4] 541 ld a, l - 000001B8 CE FF [ 7] 542 adc a, #0xff - 000001BA 6F [ 4] 543 ld l, a - 000001BB 7C [ 4] 544 ld a, h - 000001BC CE FF [ 7] 545 adc a, #0xff - 000001BE 67 [ 4] 546 ld h, a - 000001BF B5 [ 4] 547 or a, l - 000001C0 B2 [ 4] 548 or a, d - 000001C1 B3 [ 4] 549 or a, e - 000001C2 28 0E [12] 550 jr z, 00105$ - 000001C4 E5 [11] 551 push hl - 000001C5 C5 [11] 552 push bc - 000001C6 D5 [11] 553 push de - 000001C7 3E 01 [ 7] 554 ld a, #0x01 - 000001C9 CDr1Er00 [17] 555 call _esp_rd_reg8 - 000001CC D1 [10] 556 pop de - 000001CD C1 [10] 557 pop bc - 000001CE E1 [10] 558 pop hl - 000001CF 91 [ 4] 559 sub a, c - 000001D0 20 DD [12] 560 jr nz, 00103$ - 000001D2 561 00105$: - 562 ;src/esp32.c:135: return timeout; - 563 ;src/esp32.c:136: } - 000001D2 DD E1 [14] 564 pop ix - 000001D4 C9 [10] 565 ret - 566 ;src/esp32.c:138: u32 esp_wait_busy(u32 timeout) - 567 ; --------------------------------- - 568 ; Function esp_wait_busy - 569 ; --------------------------------- - 000001D5 570 _esp_wait_busy:: - 571 ;src/esp32.c:140: while (--timeout) if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) break; - 000001D5 572 00103$: - 000001D5 7B [ 4] 573 ld a, e - 000001D6 C6 FF [ 7] 574 add a, #0xff - 000001D8 5F [ 4] 575 ld e, a - 000001D9 7A [ 4] 576 ld a, d - 000001DA CE FF [ 7] 577 adc a, #0xff - 000001DC 57 [ 4] 578 ld d, a - 000001DD 7D [ 4] 579 ld a, l - 000001DE CE FF [ 7] 580 adc a, #0xff - 000001E0 6F [ 4] 581 ld l, a - 000001E1 7C [ 4] 582 ld a, h - 000001E2 CE FF [ 7] 583 adc a, #0xff - 000001E4 67 [ 4] 584 ld h, a - 000001E5 B5 [ 4] 585 or a, l - 000001E6 B2 [ 4] 586 or a, d - 000001E7 B3 [ 4] 587 or a, e - 000001E8 C8 [11] 588 ret z - 000001E9 E5 [11] 589 push hl - 000001EA D5 [11] 590 push de - 000001EB 3E 01 [ 7] 591 ld a, #0x01 - 000001ED CDr1Er00 [17] 592 call _esp_rd_reg8 - 000001F0 D1 [10] 593 pop de - 000001F1 E1 [10] 594 pop hl - 000001F2 FE 02 [ 7] 595 cp a, #0x02 - 000001F4 28 DF [12] 596 jr z, 00103$ - 597 ;src/esp32.c:142: return timeout; - 598 ;src/esp32.c:143: } - 000001F6 C9 [10] 599 ret - 600 ;src/esp32.c:145: int esp_create_obj(u32 size, u8 type) - 601 ; --------------------------------- - 602 ; Function esp_create_obj - 603 ; --------------------------------- - 000001F7 604 _esp_create_obj:: - 605 ;src/esp32.c:147: esp_wr_reg32(ESP_REG_DATA_SIZE, size); - 000001F7 E5 [11] 606 push hl - 000001F8 D5 [11] 607 push de - 000001F9 3E 03 [ 7] 608 ld a, #0x03 - 000001FB CDrE8r00 [17] 609 call _esp_wr_reg32 - 610 ;src/esp32.c:148: esp_wr_reg8(ESP_REG_OBJ_TYPE, type); - 000001FE FD 21 02 00 [14] 611 ld iy, #2 - 00000202 FD 39 [15] 612 add iy, sp - 00000204 FD 6E 00 [19] 613 ld l, 0 (iy) - 00000207 3E 02 [ 7] 614 ld a, #0x02 - 00000209 CDrD1r00 [17] 615 call _esp_wr_reg8 - 616 ;src/esp32.c:149: esp_cmd(ESP_CMD_MAKE_OBJECT); - 0000020C 3E E0 [ 7] 617 ld a, #0xe0 - 0000020E CDr05r00 [17] 618 call _esp_cmd - 619 ;src/esp32.c:150: esp_wait_busy(20000); - 00000211 11 20 4E [10] 620 ld de, #0x4e20 - 00000214 21 00 00 [10] 621 ld hl, #0x0000 - 00000217 CDrD5r01 [17] 622 call _esp_wait_busy - 623 ;src/esp32.c:153: return esp_rd_reg8(ESP_REG_OBJ_HANDLE); - 0000021A 3E 0B [ 7] 624 ld a, #0x0b - 0000021C CDr1Er00 [17] 625 call _esp_rd_reg8 - 0000021F 5F [ 4] 626 ld e, a - 00000220 16 00 [ 7] 627 ld d, #0x00 - 628 ;src/esp32.c:154: } - 00000222 E1 [10] 629 pop hl - 00000223 33 [ 6] 630 inc sp - 00000224 E9 [ 4] 631 jp (hl) - 632 ;src/main.c:129: bool esp_init() - 633 ; --------------------------------- - 634 ; Function esp_init - 635 ; --------------------------------- - 00000225 636 _esp_init:: - 637 ;src/main.c:131: esp_cmd(ESP_CMD_NOP); - 00000225 AF [ 4] 638 xor a, a - 00000226 CDr05r00 [17] 639 call _esp_cmd - 640 ;src/main.c:132: esp_rd_end(); - 00000229 CDr8Br01 [17] 641 call _esp_rd_end - 642 ;src/main.c:133: esp_wr_end(); - 0000022C CDr18r01 [17] 643 call _esp_wr_end - 644 ;src/main.c:137: return true; - 0000022F 3E 01 [ 7] 645 ld a, #0x01 - 646 ;src/main.c:138: } - 00000231 C9 [10] 647 ret - 00000232 648 _err_no_esp: - 00000232 01 649 .db #0x01 ; 1 - 00000233 00 650 .db #0x00 ; 0 - 00000234 18 651 .db #0x18 ; 24 - 00000235 0A 652 .db #0x0a ; 10 - 00000236 20 653 .db #0x20 ; 32 - 00000237 05 654 .db #0x05 ; 5 - 00000238 2F 655 .db #0x2f ; 47 - 00000239 00 656 .db #0x00 ; 0 - 0000023A 00 00 657 .dw #0x0000 - 0000023C 00 658 .db #0x00 ; 0 - 0000023D 00 659 .db #0x00 ; 0 - 0000023Er8Cr02 660 .dw __str_0 - 00000240r96r02 661 .dw __str_1 - 00000242r97r02 662 .dw __str_2 - 00000244 663 _err_out_of_mem: - 00000244 01 664 .db #0x01 ; 1 - 00000245 00 665 .db #0x00 ; 0 - 00000246 FF 666 .db #0xff ; 255 - 00000247 FF 667 .db #0xff ; 255 - 00000248 20 668 .db #0x20 ; 32 - 00000249 05 669 .db #0x05 ; 5 - 0000024A 2F 670 .db #0x2f ; 47 - 0000024B 00 671 .db #0x00 ; 0 - 0000024C 00 00 672 .dw #0x0000 - 0000024E 00 673 .db #0x00 ; 0 - 0000024F 00 674 .db #0x00 ; 0 - 00000250r8Cr02 675 .dw __str_0 - 00000252r96r02 676 .dw __str_1 - 00000254rADr02 677 .dw __str_3 - 00000256 678 _err_playback: - 00000256 01 679 .db #0x01 ; 1 - 00000257 00 680 .db #0x00 ; 0 - 00000258 FF 681 .db #0xff ; 255 - 00000259 FF 682 .db #0xff ; 255 - 0000025A 20 683 .db #0x20 ; 32 - 0000025B 05 684 .db #0x05 ; 5 - 0000025C 2F 685 .db #0x2f ; 47 - 0000025D 00 686 .db #0x00 ; 0 - 0000025E 00 00 687 .dw #0x0000 - 00000260 00 688 .db #0x00 ; 0 - 00000261 00 689 .db #0x00 ; 0 - 00000262r8Cr02 690 .dw __str_0 - 00000264r96r02 691 .dw __str_1 - 00000266rCDr02 692 .dw __str_4 - 00000268 693 _win_xm: - 00000268 81 694 .db #0x81 ; 129 - 00000269 00 695 .db #0x00 ; 0 - 0000026A 19 696 .db #0x19 ; 25 - 0000026B 0A 697 .db #0x0a ; 10 - 0000026C 28 698 .db #0x28 ; 40 - 0000026D 0B 699 .db #0x0b ; 11 - 0000026E 4F 700 .db #0x4f ; 79 'O' - 0000026F 00 701 .db #0x00 ; 0 - 00000270 00 00 702 .dw #0x0000 - 00000272 00 703 .db #0x00 ; 0 - 00000273 00 704 .db #0x00 ; 0 - 00000274rEBr02 705 .dw __str_5 - 00000276r96r02 706 .dw __str_1 - 00000278r00r03 707 .dw __str_6 - 0000027A 708 _win_about: - 0000027A 01 709 .db #0x01 ; 1 - 0000027B 00 710 .db #0x00 ; 0 - 0000027C 16 711 .db #0x16 ; 22 - 0000027D 0A 712 .db #0x0a ; 10 - 0000027E 24 713 .db #0x24 ; 36 - 0000027F 05 714 .db #0x05 ; 5 - 00000280 4F 715 .db #0x4f ; 79 'O' - 00000281 00 716 .db #0x00 ; 0 - 00000282 00 00 717 .dw #0x0000 - 00000284 00 718 .db #0x00 ; 0 - 00000285 00 719 .db #0x00 ; 0 - 00000286r0Er03 720 .dw __str_7 - 00000288r96r02 721 .dw __str_1 - 0000028Ar17r03 722 .dw __str_8 - 0000028C 723 __str_0: - 0000028C 0E 724 .db 0x0e - 0000028D 20 45 72 72 6F 72 21 725 .ascii " Error! " + 00000194 524 _esp_rd_end:: + 525 ;src/esp32.c:125: SPI_CTRL = SPI_ESP_CS_ON; + 00000194 3E 13 [ 7] 526 ld a, #0x13 + 00000196 D3 77 [11] 527 out (_SPI_CTRL), a + 528 ;src/esp32.c:126: SPI_DATA = ESP_SPI_CMD_R_END; + 00000198 3E 08 [ 7] 529 ld a, #0x08 + 0000019A D3 57 [11] 530 out (_SPI_DATA), a + 531 ;src/esp32.c:127: SPI_DATA; // dummy + 0000019C DB 57 [11] 532 in a, (_SPI_DATA) + 533 ;src/esp32.c:128: SPI_CTRL = SPI_ESP_CS_OFF; + 0000019E 3E 03 [ 7] 534 ld a, #0x03 + 000001A0 D3 77 [11] 535 out (_SPI_CTRL), a + 536 ;src/esp32.c:129: } + 000001A2 C9 [10] 537 ret + 538 ;src/esp32.c:131: u32 esp_wait_status(u8 status, u32 timeout) + 539 ; --------------------------------- + 540 ; Function esp_wait_status + 541 ; --------------------------------- + 000001A3 542 _esp_wait_status:: + 000001A3 DD E5 [15] 543 push ix + 000001A5 DD 21 00 00 [14] 544 ld ix, #0 + 000001A9 DD 39 [15] 545 add ix, sp + 000001AB 4F [ 4] 546 ld c, a + 547 ;src/esp32.c:133: while (--timeout) if (esp_rd_reg8(ESP_REG_STATUS) == status) break; + 000001AC DD 5E 04 [19] 548 ld e, 4 (ix) + 000001AF DD 56 05 [19] 549 ld d, 5 (ix) + 000001B2 DD 6E 06 [19] 550 ld l, 6 (ix) + 000001B5 DD 66 07 [19] 551 ld h, 7 (ix) + 000001B8 552 00103$: + 000001B8 7B [ 4] 553 ld a, e + 000001B9 C6 FF [ 7] 554 add a, #0xff + 000001BB 5F [ 4] 555 ld e, a + 000001BC 7A [ 4] 556 ld a, d + 000001BD CE FF [ 7] 557 adc a, #0xff + 000001BF 57 [ 4] 558 ld d, a + 000001C0 7D [ 4] 559 ld a, l + 000001C1 CE FF [ 7] 560 adc a, #0xff + 000001C3 6F [ 4] 561 ld l, a + 000001C4 7C [ 4] 562 ld a, h + 000001C5 CE FF [ 7] 563 adc a, #0xff + 000001C7 67 [ 4] 564 ld h, a + 000001C8 B5 [ 4] 565 or a, l + 000001C9 B2 [ 4] 566 or a, d + 000001CA B3 [ 4] 567 or a, e + 000001CB 28 0E [12] 568 jr z, 00105$ + 000001CD E5 [11] 569 push hl + 000001CE C5 [11] 570 push bc + 000001CF D5 [11] 571 push de + 000001D0 3E 01 [ 7] 572 ld a, #0x01 + 000001D2 CDr27r00 [17] 573 call _esp_rd_reg8 + 000001D5 D1 [10] 574 pop de + 000001D6 C1 [10] 575 pop bc + 000001D7 E1 [10] 576 pop hl + 000001D8 91 [ 4] 577 sub a, c + 000001D9 20 DD [12] 578 jr nz, 00103$ + 000001DB 579 00105$: + 580 ;src/esp32.c:135: return timeout; + 581 ;src/esp32.c:136: } + 000001DB DD E1 [14] 582 pop ix + 000001DD C9 [10] 583 ret + 584 ;src/esp32.c:138: u32 esp_wait_busy(u32 timeout) + 585 ; --------------------------------- + 586 ; Function esp_wait_busy + 587 ; --------------------------------- + 000001DE 588 _esp_wait_busy:: + 589 ;src/esp32.c:140: while (--timeout) if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) break; + 000001DE 590 00103$: + 000001DE 7B [ 4] 591 ld a, e + 000001DF C6 FF [ 7] 592 add a, #0xff + 000001E1 5F [ 4] 593 ld e, a + 000001E2 7A [ 4] 594 ld a, d + 000001E3 CE FF [ 7] 595 adc a, #0xff + 000001E5 57 [ 4] 596 ld d, a + 000001E6 7D [ 4] 597 ld a, l + 000001E7 CE FF [ 7] 598 adc a, #0xff + 000001E9 6F [ 4] 599 ld l, a + 000001EA 7C [ 4] 600 ld a, h + 000001EB CE FF [ 7] 601 adc a, #0xff + 000001ED 67 [ 4] 602 ld h, a + 000001EE B5 [ 4] 603 or a, l + 000001EF B2 [ 4] 604 or a, d + 000001F0 B3 [ 4] 605 or a, e + 000001F1 C8 [11] 606 ret z + 000001F2 E5 [11] 607 push hl + 000001F3 D5 [11] 608 push de + 000001F4 3E 01 [ 7] 609 ld a, #0x01 + 000001F6 CDr27r00 [17] 610 call _esp_rd_reg8 + 000001F9 D1 [10] 611 pop de + 000001FA E1 [10] 612 pop hl + 000001FB FE 02 [ 7] 613 cp a, #0x02 + 000001FD 28 DF [12] 614 jr z, 00103$ + 615 ;src/esp32.c:142: return timeout; + 616 ;src/esp32.c:143: } + 000001FF C9 [10] 617 ret + 618 ;src/esp32.c:145: int esp_create_obj(u32 size, u8 type) + 619 ; --------------------------------- + 620 ; Function esp_create_obj + 621 ; --------------------------------- + 00000200 622 _esp_create_obj:: + 623 ;src/esp32.c:147: esp_wr_reg32(ESP_REG_DATA_SIZE, size); + 00000200 E5 [11] 624 push hl + 00000201 D5 [11] 625 push de + 00000202 3E 03 [ 7] 626 ld a, #0x03 + 00000204 CDrF1r00 [17] 627 call _esp_wr_reg32 + 628 ;src/esp32.c:148: esp_wr_reg8(ESP_REG_OBJ_TYPE, type); + 00000207 FD 21 02 00 [14] 629 ld iy, #2 + 0000020B FD 39 [15] 630 add iy, sp + 0000020D FD 6E 00 [19] 631 ld l, 0 (iy) + 00000210 3E 02 [ 7] 632 ld a, #0x02 + 00000212 CDrDAr00 [17] 633 call _esp_wr_reg8 + 634 ;src/esp32.c:149: esp_cmd(ESP_CMD_MAKE_OBJECT); + 00000215 3E E0 [ 7] 635 ld a, #0xe0 + 00000217 CDr0Er00 [17] 636 call _esp_cmd + 637 ;src/esp32.c:150: esp_wait_busy(20000); + 0000021A 11 20 4E [10] 638 ld de, #0x4e20 + 0000021D 21 00 00 [10] 639 ld hl, #0x0000 + 00000220 CDrDEr01 [17] 640 call _esp_wait_busy + 641 ;src/esp32.c:153: return esp_rd_reg8(ESP_REG_OBJ_HANDLE); + 00000223 3E 0B [ 7] 642 ld a, #0x0b + 00000225 CDr27r00 [17] 643 call _esp_rd_reg8 + 00000228 5F [ 4] 644 ld e, a + 00000229 16 00 [ 7] 645 ld d, #0x00 + 646 ;src/esp32.c:154: } + 0000022B E1 [10] 647 pop hl + 0000022C 33 [ 6] 648 inc sp + 0000022D E9 [ 4] 649 jp (hl) + 650 ;src/main.c:143: bool esp_init() + 651 ; --------------------------------- + 652 ; Function esp_init + 653 ; --------------------------------- + 0000022E 654 _esp_init:: + 655 ;src/main.c:145: esp_cmd(ESP_CMD_NOP); + 0000022E AF [ 4] 656 xor a, a + 0000022F CDr0Er00 [17] 657 call _esp_cmd + 658 ;src/main.c:146: esp_rd_end(); + 00000232 CDr94r01 [17] 659 call _esp_rd_end + 660 ;src/main.c:147: esp_wr_end(); + 00000235 CDr21r01 [17] 661 call _esp_wr_end + 662 ;src/main.c:151: return true; + 00000238 3E 01 [ 7] 663 ld a, #0x01 + 664 ;src/main.c:152: } + 0000023A C9 [10] 665 ret + 0000023B 666 _err_no_esp: + 0000023B 01 667 .db #0x01 ; 1 + 0000023C 00 668 .db #0x00 ; 0 + 0000023D 18 669 .db #0x18 ; 24 + 0000023E 0A 670 .db #0x0a ; 10 + 0000023F 20 671 .db #0x20 ; 32 + 00000240 05 672 .db #0x05 ; 5 + 00000241 2F 673 .db #0x2f ; 47 + 00000242 00 674 .db #0x00 ; 0 + 00000243 00 00 675 .dw #0x0000 + 00000245 00 676 .db #0x00 ; 0 + 00000246 00 677 .db #0x00 ; 0 + 00000247r95r02 678 .dw __str_0 + 00000249r9Fr02 679 .dw __str_1 + 0000024BrA0r02 680 .dw __str_2 + 0000024D 681 _err_out_of_mem: + 0000024D 01 682 .db #0x01 ; 1 + 0000024E 00 683 .db #0x00 ; 0 + 0000024F FF 684 .db #0xff ; 255 + 00000250 FF 685 .db #0xff ; 255 + 00000251 20 686 .db #0x20 ; 32 + 00000252 05 687 .db #0x05 ; 5 + 00000253 2F 688 .db #0x2f ; 47 + 00000254 00 689 .db #0x00 ; 0 + 00000255 00 00 690 .dw #0x0000 + 00000257 00 691 .db #0x00 ; 0 + 00000258 00 692 .db #0x00 ; 0 + 00000259r95r02 693 .dw __str_0 + 0000025Br9Fr02 694 .dw __str_1 + 0000025DrB6r02 695 .dw __str_3 + 0000025F 696 _err_playback: + 0000025F 01 697 .db #0x01 ; 1 + 00000260 00 698 .db #0x00 ; 0 + 00000261 FF 699 .db #0xff ; 255 + 00000262 FF 700 .db #0xff ; 255 + 00000263 20 701 .db #0x20 ; 32 + 00000264 05 702 .db #0x05 ; 5 + 00000265 2F 703 .db #0x2f ; 47 + 00000266 00 704 .db #0x00 ; 0 + 00000267 00 00 705 .dw #0x0000 + 00000269 00 706 .db #0x00 ; 0 + 0000026A 00 707 .db #0x00 ; 0 + 0000026Br95r02 708 .dw __str_0 + 0000026Dr9Fr02 709 .dw __str_1 + 0000026FrD6r02 710 .dw __str_4 + 00000271 711 _win_xm: + 00000271 81 712 .db #0x81 ; 129 + 00000272 00 713 .db #0x00 ; 0 + 00000273 19 714 .db #0x19 ; 25 + 00000274 0A 715 .db #0x0a ; 10 + 00000275 28 716 .db #0x28 ; 40 + 00000276 0B 717 .db #0x0b ; 11 + 00000277 4F 718 .db #0x4f ; 79 'O' + 00000278 00 719 .db #0x00 ; 0 + 00000279 00 00 720 .dw #0x0000 + 0000027B 00 721 .db #0x00 ; 0 + 0000027C 00 722 .db #0x00 ; 0 + 0000027DrF4r02 723 .dw __str_5 + 0000027Fr9Fr02 724 .dw __str_1 + 00000281r09r03 725 .dw __str_6 + 00000283 726 _win_about: + 00000283 01 727 .db #0x01 ; 1 + 00000284 00 728 .db #0x00 ; 0 + 00000285 16 729 .db #0x16 ; 22 + 00000286 0A 730 .db #0x0a ; 10 + 00000287 24 731 .db #0x24 ; 36 + 00000288 05 732 .db #0x05 ; 5 + 00000289 4F 733 .db #0x4f ; 79 'O' + 0000028A 00 734 .db #0x00 ; 0 + 0000028B 00 00 735 .dw #0x0000 + 0000028D 00 736 .db #0x00 ; 0 + 0000028E 00 737 .db #0x00 ; 0 + 0000028Fr17r03 738 .dw __str_7 + 00000291r9Fr02 739 .dw __str_1 + 00000293r20r03 740 .dw __str_8 + 00000295 741 __str_0: + 00000295 0E 742 .db 0x0e + 00000296 20 45 72 72 6F 72 21 743 .ascii " Error! " 20 - 00000295 00 726 .db 0x00 - 00000296 727 __str_1: - 00000296 00 728 .db 0x00 - 00000297 729 __str_2: - 00000297 0E 730 .db 0x0e - 00000298 0C 731 .db 0x0c - 00000299 01 732 .db 0x01 - 0000029A 4E 6F 20 45 53 50 33 733 .ascii "No ESP32 detected!" + 0000029E 00 744 .db 0x00 + 0000029F 745 __str_1: + 0000029F 00 746 .db 0x00 + 000002A0 747 __str_2: + 000002A0 0E 748 .db 0x0e + 000002A1 0C 749 .db 0x0c + 000002A2 01 750 .db 0x01 + 000002A3 4E 6F 20 45 53 50 33 751 .ascii "No ESP32 detected!" 32 20 64 65 74 65 63 74 65 64 21 - 000002AC 00 734 .db 0x00 - 000002AD 735 __str_3: - 000002AD 0E 736 .db 0x0e - 000002AE 0C 737 .db 0x0c - 000002AF 01 738 .db 0x01 - 000002B0 4F 75 74 20 6F 66 20 739 .ascii "Out of memory (file too big)" + 000002B5 00 752 .db 0x00 + 000002B6 753 __str_3: + 000002B6 0E 754 .db 0x0e + 000002B7 0C 755 .db 0x0c + 000002B8 01 756 .db 0x01 + 000002B9 4F 75 74 20 6F 66 20 757 .ascii "Out of memory (file too big)" 6D 65 6D 6F 72 79 20 28 66 69 6C 65 20 74 6F 6F 20 62 69 67 29 - 000002CC 00 740 .db 0x00 - 000002CD 741 __str_4: - 000002CD 0E 742 .db 0x0e - 000002CE 0C 743 .db 0x0c - 000002CF 01 744 .db 0x01 - 000002D0 50 6C 61 79 62 61 63 745 .ascii "Playback error (bad file?)" + 000002D5 00 758 .db 0x00 + 000002D6 759 __str_4: + 000002D6 0E 760 .db 0x0e + 000002D7 0C 761 .db 0x0c + 000002D8 01 762 .db 0x01 + 000002D9 50 6C 61 79 62 61 63 763 .ascii "Playback error (bad file?)" 6B 20 65 72 72 6F 72 20 28 62 61 64 20 66 69 6C 65 3F 29 - 000002EA 00 746 .db 0x00 - 000002EB 747 __str_5: - 000002EB 0E 748 .db 0x0e - 000002EC 20 58 4D 2F 58 4D 5A 749 .ascii " XM/XMZ/S3M Player " + 000002F3 00 764 .db 0x00 + 000002F4 765 __str_5: + 000002F4 0E 766 .db 0x0e + 000002F5 20 58 4D 2F 58 4D 5A 767 .ascii " XM/XMZ/S3M Player " 2F 53 33 4D 20 50 6C 61 79 65 72 20 - 000002FF 00 750 .db 0x00 - 00000300 751 __str_6: - 00000300 0E 752 .db 0x0e - 00000301 0C 753 .db 0x0c - 00000302 01 754 .db 0x01 - 00000303 50 6C 61 79 69 6E 67 755 .ascii "Playing..." + 00000308 00 768 .db 0x00 + 00000309 769 __str_6: + 00000309 0E 770 .db 0x0e + 0000030A 0C 771 .db 0x0c + 0000030B 01 772 .db 0x01 + 0000030C 50 6C 61 79 69 6E 67 773 .ascii "Playing..." 2E 2E 2E - 0000030D 00 756 .db 0x00 - 0000030E 757 __str_7: - 0000030E 0E 758 .db 0x0e - 0000030F 20 41 62 6F 75 74 20 759 .ascii " About " - 00000316 00 760 .db 0x00 - 00000317 761 __str_8: - 00000317 0E 762 .db 0x0e - 00000318 0C 763 .db 0x0c - 00000319 01 764 .db 0x01 - 0000031A 58 4D 20 50 6C 61 79 765 .ascii "XM Player v1.0" + 00000316 00 774 .db 0x00 + 00000317 775 __str_7: + 00000317 0E 776 .db 0x0e + 00000318 20 41 62 6F 75 74 20 777 .ascii " About " + 0000031F 00 778 .db 0x00 + 00000320 779 __str_8: + 00000320 0E 780 .db 0x0e + 00000321 0C 781 .db 0x0c + 00000322 01 782 .db 0x01 + 00000323 58 4D 20 50 6C 61 79 783 .ascii "XM Player v1.0" 65 72 20 76 31 2E 30 - 00000328 00 766 .db 0x00 - 767 ;src/main.c:142: bool play_xm() - 768 ; --------------------------------- - 769 ; Function play_xm - 770 ; --------------------------------- - 00000329 771 _play_xm:: - 00000329 DD E5 [15] 772 push ix - 0000032B DD 21 00 00 [14] 773 ld ix, #0 - 0000032F DD 39 [15] 774 add ix, sp - 00000331 21 EC FF [10] 775 ld hl, #-20 - 00000334 39 [11] 776 add hl, sp - 00000335 F9 [ 6] 777 ld sp, hl - 778 ;src/main.c:144: esp_cmd(ESP_CMD_TRACK_STOP); - 00000336 3E A2 [ 7] 779 ld a, #0xa2 - 00000338 CDr05r00 [17] 780 call _esp_cmd - 781 ;src/main.c:145: esp_wait_busy(10000); - 0000033B 11 10 27 [10] 782 ld de, #0x2710 - 0000033E 21 00 00 [10] 783 ld hl, #0x0000 - 00000341 CDrD5r01 [17] 784 call _esp_wait_busy - 785 ;src/main.c:146: esp_cmd(ESP_CMD_KILL_OBJECTS); - 00000344 3E E4 [ 7] 786 ld a, #0xe4 - 00000346 CDr05r00 [17] 787 call _esp_cmd - 788 ;src/main.c:147: esp_wait_busy(10000); - 00000349 11 10 27 [10] 789 ld de, #0x2710 - 0000034C 21 00 00 [10] 790 ld hl, #0x0000 - 0000034F CDrD5r01 [17] 791 call _esp_wait_busy - 792 ;src/main.c:150: switch (file_ext) - 00000352 3Ar07r10 [13] 793 ld a, (_file_ext) - 00000355 3D [ 4] 794 dec a - 00000356 28 0A [12] 795 jr z, 00101$ - 00000358 3Ar07r10 [13] 796 ld a, (_file_ext) - 0000035B D6 02 [ 7] 797 sub a, #0x02 - 0000035D 28 08 [12] 798 jr z, 00102$ - 0000035F C3r6Cr03 [10] 799 jp 00103$ - 800 ;src/main.c:152: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; - 00000362 801 00101$: - 00000362 3E 08 [ 7] 802 ld a, #0x08 - 00000364 C3r6Er03 [10] 803 jp 00104$ - 804 ;src/main.c:153: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; - 00000367 805 00102$: - 00000367 3E 0C [ 7] 806 ld a, #0x0c - 00000369 C3r6Er03 [10] 807 jp 00104$ - 808 ;src/main.c:154: default: obj_type = OBJ_TYPE_XM; break; - 0000036C 809 00103$: - 0000036C 3E 05 [ 7] 810 ld a, #0x05 - 811 ;src/main.c:155: } - 0000036E 812 00104$: - 813 ;src/main.c:157: xm_handle = esp_create_obj(filesize, obj_type); - 0000036E F5 [11] 814 push af - 0000036F 33 [ 6] 815 inc sp - 00000370 ED 5Br03r10 [20] 816 ld de, (_filesize) - 00000374 2Ar05r10 [16] 817 ld hl, (_filesize + 2) - 00000377 CDrF7r01 [17] 818 call _esp_create_obj - 0000037A 21r31r10 [10] 819 ld hl, #_xm_handle - 0000037D 73 [ 7] 820 ld (hl), e - 821 ;src/main.c:158: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); - 0000037E 3E 01 [ 7] 822 ld a, #0x01 - 00000380 CDr1Er00 [17] 823 call _esp_rd_reg8 - 00000383 32r09r10 [13] 824 ld (#_last_esp_status), a - 825 ;src/main.c:159: if (last_esp_status != ESP_ST_READY) - 00000386 3Ar09r10 [13] 826 ld a, (_last_esp_status) - 00000389 3D [ 4] 827 dec a - 0000038A 28 04 [12] 828 jr z, 00106$ - 829 ;src/main.c:160: return false; - 0000038C AF [ 4] 830 xor a, a - 0000038D C3r39r05 [10] 831 jp 00116$ - 00000390 832 00106$: - 833 ;src/main.c:162: u32 sz = filesize; - 00000390 21 0C 00 [10] 834 ld hl, #12 - 00000393 39 [11] 835 add hl, sp - 00000394 EB [ 4] 836 ex de, hl - 00000395 21r03r10 [10] 837 ld hl, #_filesize - 00000398 01 04 00 [10] 838 ld bc, #4 - 0000039B ED B0 [21] 839 ldir - 840 ;src/main.c:163: u32 offs = 0; - 0000039D AF [ 4] 841 xor a, a - 0000039E DD 77 FC [19] 842 ld -4 (ix), a - 000003A1 DD 77 FD [19] 843 ld -3 (ix), a - 000003A4 DD 77 FE [19] 844 ld -2 (ix), a - 000003A7 DD 77 FF [19] 845 ld -1 (ix), a - 846 ;src/main.c:165: while (sz) - 000003AA 847 00107$: - 000003AA DD 7E FB [19] 848 ld a, -5 (ix) - 000003AD DD B6 FA [19] 849 or a, -6 (ix) - 000003B0 DD B6 F9 [19] 850 or a, -7 (ix) - 000003B3 DD B6 F8 [19] 851 or a, -8 (ix) - 000003B6 CArC6r04 [10] 852 jp z, 00109$ - 853 ;src/main.c:167: u32 s = min(sz, FS_BUF_SIZE); - 000003B9 DD 7E F9 [19] 854 ld a, -7 (ix) - 000003BC D6 10 [ 7] 855 sub a, #0x10 - 000003BE DD 7E FA [19] 856 ld a, -6 (ix) - 000003C1 DE 00 [ 7] 857 sbc a, #0x00 - 000003C3 DD 7E FB [19] 858 ld a, -5 (ix) - 000003C6 DE 00 [ 7] 859 sbc a, #0x00 - 000003C8 30 11 [12] 860 jr nc, 00118$ - 000003CA 21 00 00 [10] 861 ld hl, #0 - 000003CD 39 [11] 862 add hl, sp - 000003CE EB [ 4] 863 ex de, hl - 000003CF 21 0C 00 [10] 864 ld hl, #12 - 000003D2 39 [11] 865 add hl, sp - 000003D3 01 04 00 [10] 866 ld bc, #4 - 000003D6 ED B0 [21] 867 ldir - 000003D8 C3rEAr03 [10] 868 jp 00119$ - 000003DB 869 00118$: - 000003DB DD 36 EC 00 [19] 870 ld -20 (ix), #0x00 - 000003DF DD 36 ED 10 [19] 871 ld -19 (ix), #0x10 - 000003E3 AF [ 4] 872 xor a, a - 000003E4 DD 77 EE [19] 873 ld -18 (ix), a - 000003E7 DD 77 EF [19] 874 ld -17 (ix), a - 000003EA 875 00119$: - 000003EA 21 05 00 [10] 876 ld hl, #5 - 000003ED 39 [11] 877 add hl, sp - 000003EE EB [ 4] 878 ex de, hl - 000003EF 21 00 00 [10] 879 ld hl, #0 - 000003F2 39 [11] 880 add hl, sp - 000003F3 01 04 00 [10] 881 ld bc, #4 - 000003F6 ED B0 [21] 882 ldir - 883 ;src/main.c:168: u8 sec = (s + 511) >> 9; - 000003F8 DD 7E F1 [19] 884 ld a, -15 (ix) - 000003FB C6 FF [ 7] 885 add a, #0xff - 000003FD DD 7E F2 [19] 886 ld a, -14 (ix) - 00000400 CE 01 [ 7] 887 adc a, #0x01 - 00000402 47 [ 4] 888 ld b, a - 00000403 3E 00 [ 7] 889 ld a, #0x00 - 00000405 CE 00 [ 7] 890 adc a, #0x00 - 00000407 5F [ 4] 891 ld e, a - 00000408 3E 00 [ 7] 892 ld a, #0x00 - 0000040A CE 00 [ 7] 893 adc a, #0x00 - 0000040C 57 [ 4] 894 ld d, a - 0000040D 48 [ 4] 895 ld c, b - 0000040E 43 [ 4] 896 ld b, e - 0000040F 5A [ 4] 897 ld e, d - 00000410 CB 3B [ 8] 898 srl e - 00000412 CB 18 [ 8] 899 rr b - 00000414 CB 19 [ 8] 900 rr c - 901 ;src/main.c:170: wc_load512((u16)fs_buf, sec); - 00000416 DD 71 F7 [19] 902 ld -9 (ix), c - 00000419 79 [ 4] 903 ld a, c - 0000041A F5 [11] 904 push af - 0000041B 33 [ 6] 905 inc sp - 0000041C 21r01r00 [10] 906 ld hl, #_fs_buf - 0000041F CDr00r00 [17] 907 call _wc_load512 - 908 ;src/main.c:172: esp_wr_reg32(ESP_REG_DATA_SIZE, s); - 00000422 21 00 00 [10] 909 ld hl, #0x0 - 00000425 E5 [11] 910 push hl - 00000426 DD 6E F1 [19] 911 ld l, -15 (ix) - 00000429 DD 66 F2 [19] 912 ld h, -14 (ix) - 0000042C E5 [11] 913 push hl - 0000042D 3E 03 [ 7] 914 ld a, #0x03 - 0000042F CDrE8r00 [17] 915 call _esp_wr_reg32 - 916 ;src/main.c:173: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); - 00000432 DD 6E FE [19] 917 ld l, -2 (ix) - 00000435 DD 66 FF [19] 918 ld h, -1 (ix) - 00000438 E5 [11] 919 push hl - 00000439 DD 6E FC [19] 920 ld l, -4 (ix) - 0000043C DD 66 FD [19] 921 ld h, -3 (ix) - 0000043F E5 [11] 922 push hl - 00000440 3E 07 [ 7] 923 ld a, #0x07 - 00000442 CDrE8r00 [17] 924 call _esp_wr_reg32 - 925 ;src/main.c:174: esp_cmd(ESP_CMD_WRITE_OBJECT); - 00000445 3E E1 [ 7] 926 ld a, #0xe1 - 00000447 CDr05r00 [17] 927 call _esp_cmd - 928 ;src/main.c:175: esp_wait_status(ESP_ST_DATA_M2S, 2000); - 0000044A 21 00 00 [10] 929 ld hl, #0x0000 - 0000044D E5 [11] 930 push hl - 0000044E 21 D0 07 [10] 931 ld hl, #0x07d0 - 00000451 E5 [11] 932 push hl - 00000452 3E 03 [ 7] 933 ld a, #0x03 - 00000454 CDr9Ar01 [17] 934 call _esp_wait_status - 00000457 F1 [10] 935 pop af - 00000458 F1 [10] 936 pop af - 937 ;src/main.c:176: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); - 00000459 DD 7E F7 [19] 938 ld a, -9 (ix) - 0000045C DD 77 F5 [19] 939 ld -11 (ix), a - 0000045F DD 36 F6 00 [19] 940 ld -10 (ix), #0x00 - 00000463 3A 02 60 [13] 941 ld a, (#0x6002) - 00000466 DD 77 F7 [19] 942 ld -9 (ix), a - 00000469 DD 6E F5 [19] 943 ld l, -11 (ix) - 0000046C 26 00 [ 7] 944 ld h, #0x00 - 0000046E E5 [11] 945 push hl - 0000046F 21 00 02 [10] 946 ld hl, #0x0200 - 00000472 E5 [11] 947 push hl - 00000473 DD 7E F7 [19] 948 ld a, -9 (ix) - 00000476 F5 [11] 949 push af - 00000477 33 [ 6] 950 inc sp - 00000478 21r01r00 [10] 951 ld hl, #_fs_buf - 0000047B CDr27r01 [17] 952 call _esp_send_dma - 953 ;src/main.c:178: offs += s; - 0000047E DD 5E F1 [19] 954 ld e, -15 (ix) - 00000481 DD 56 F2 [19] 955 ld d, -14 (ix) - 00000484 DD 6E FC [19] 956 ld l, -4 (ix) - 00000487 DD 66 FD [19] 957 ld h, -3 (ix) - 0000048A 19 [11] 958 add hl, de - 0000048B DD 75 FC [19] 959 ld -4 (ix), l - 0000048E DD 74 FD [19] 960 ld -3 (ix), h - 00000491 DD 7E FE [19] 961 ld a, -2 (ix) - 00000494 DD 8E F3 [19] 962 adc a, -13 (ix) - 00000497 DD 77 FE [19] 963 ld -2 (ix), a - 0000049A 30 03 [12] 964 jr nc, 00197$ - 0000049C DD 34 FF [23] 965 inc -1 (ix) - 0000049F 966 00197$: - 967 ;src/main.c:179: sz -= s; - 0000049F DD 7E F8 [19] 968 ld a, -8 (ix) - 000004A2 DD 96 F1 [19] 969 sub a, -15 (ix) - 000004A5 DD 77 F8 [19] 970 ld -8 (ix), a - 000004A8 DD 7E F9 [19] 971 ld a, -7 (ix) - 000004AB DD 9E F2 [19] 972 sbc a, -14 (ix) - 000004AE DD 77 F9 [19] 973 ld -7 (ix), a - 000004B1 DD 7E FA [19] 974 ld a, -6 (ix) - 000004B4 DD 9E F3 [19] 975 sbc a, -13 (ix) - 000004B7 DD 77 FA [19] 976 ld -6 (ix), a - 000004BA DD 7E FB [19] 977 ld a, -5 (ix) - 000004BD DD 9E F4 [19] 978 sbc a, -12 (ix) - 000004C0 DD 77 FB [19] 979 ld -5 (ix), a - 000004C3 C3rAAr03 [10] 980 jp 00107$ - 000004C6 981 00109$: - 982 ;src/main.c:182: if (file_ext == EXT_XMZ) - 000004C6 3Ar07r10 [13] 983 ld a, (_file_ext) - 000004C9 3D [ 4] 984 dec a - 000004CA 20 3D [12] 985 jr nz, 00113$ - 986 ;src/main.c:187: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); - 000004CC 3Ar31r10 [13] 987 ld a, (_xm_handle) - 000004CF 6F [ 4] 988 ld l, a - 000004D0 3E 0B [ 7] 989 ld a, #0x0b - 000004D2 CDrD1r00 [17] 990 call _esp_wr_reg8 - 991 ;src/main.c:188: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); - 000004D5 2E 05 [ 7] 992 ld l, #0x05 - 000004D7 3E 02 [ 7] 993 ld a, #0x02 - 000004D9 CDrD1r00 [17] 994 call _esp_wr_reg8 - 995 ;src/main.c:189: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize); - 000004DC 2Ar05r10 [16] 996 ld hl, (_filesize + 2) - 000004DF E5 [11] 997 push hl - 000004E0 2Ar03r10 [16] 998 ld hl, (_filesize) - 000004E3 E5 [11] 999 push hl - 000004E4 3E 03 [ 7] 1000 ld a, #0x03 - 000004E6 CDrE8r00 [17] 1001 call _esp_wr_reg32 - 1002 ;src/main.c:190: esp_cmd(ESP_CMD_UNZIP); - 000004E9 3E F2 [ 7] 1003 ld a, #0xf2 - 000004EB CDr05r00 [17] 1004 call _esp_cmd - 1005 ;src/main.c:191: esp_wait_busy(10000); - 000004EE 11 10 27 [10] 1006 ld de, #0x2710 - 000004F1 21 00 00 [10] 1007 ld hl, #0x0000 - 000004F4 CDrD5r01 [17] 1008 call _esp_wait_busy - 1009 ;src/main.c:193: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); - 000004F7 3E 01 [ 7] 1010 ld a, #0x01 - 000004F9 CDr1Er00 [17] 1011 call _esp_rd_reg8 - 000004FC 32r09r10 [13] 1012 ld (#_last_esp_status), a - 1013 ;src/main.c:194: if (last_esp_status != ESP_ST_READY) - 000004FF 3Ar09r10 [13] 1014 ld a, (_last_esp_status) - 00000502 3D [ 4] 1015 dec a - 00000503 28 04 [12] 1016 jr z, 00113$ - 1017 ;src/main.c:195: return false; - 00000505 AF [ 4] 1018 xor a, a - 00000506 C3r39r05 [10] 1019 jp 00116$ - 00000509 1020 00113$: - 1021 ;src/main.c:198: esp_cmd(ESP_CMD_TRACK_INIT); - 00000509 3E A0 [ 7] 1022 ld a, #0xa0 - 0000050B CDr05r00 [17] 1023 call _esp_cmd - 1024 ;src/main.c:199: esp_wait_busy(10000); - 0000050E 11 10 27 [10] 1025 ld de, #0x2710 - 00000511 21 00 00 [10] 1026 ld hl, #0x0000 - 00000514 CDrD5r01 [17] 1027 call _esp_wait_busy - 1028 ;src/main.c:201: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); - 00000517 3E 01 [ 7] 1029 ld a, #0x01 - 00000519 CDr1Er00 [17] 1030 call _esp_rd_reg8 - 0000051C 32r09r10 [13] 1031 ld (#_last_esp_status), a - 1032 ;src/main.c:202: if (last_esp_status != ESP_ST_READY) - 0000051F 3Ar09r10 [13] 1033 ld a, (_last_esp_status) - 00000522 3D [ 4] 1034 dec a - 00000523 28 04 [12] 1035 jr z, 00115$ - 1036 ;src/main.c:203: return false; - 00000525 AF [ 4] 1037 xor a, a - 00000526 C3r39r05 [10] 1038 jp 00116$ - 00000529 1039 00115$: - 1040 ;src/main.c:205: esp_cmd(ESP_CMD_TRACK_PLAY); - 00000529 3E A1 [ 7] 1041 ld a, #0xa1 - 0000052B CDr05r00 [17] 1042 call _esp_cmd - 1043 ;src/main.c:206: esp_wait_busy(10000); - 0000052E 11 10 27 [10] 1044 ld de, #0x2710 - 00000531 21 00 00 [10] 1045 ld hl, #0x0000 - 00000534 CDrD5r01 [17] 1046 call _esp_wait_busy - 1047 ;src/main.c:208: return true; - 00000537 3E 01 [ 7] 1048 ld a, #0x01 - 00000539 1049 00116$: - 1050 ;src/main.c:209: } - 00000539 DD F9 [10] 1051 ld sp, ix - 0000053B DD E1 [14] 1052 pop ix - 0000053D C9 [10] 1053 ret - 1054 ;src/main.c:212: void wait_esc_key() - 1055 ; --------------------------------- - 1056 ; Function wait_esc_key - 1057 ; --------------------------------- - 0000053E 1058 _wait_esc_key:: - 1059 ;src/main.c:214: while (1) - 0000053E 1060 00104$: - 1061 ;src/main.c:218: __endasm; - 0000053E 76 [ 4] 1062 halt - 1063 ;src/main.c:220: if (wc_key_esc()) - 0000053F CDr00r00 [17] 1064 call _wc_key_esc - 00000542 B7 [ 4] 1065 or a, a - 00000543 28 F9 [12] 1066 jr z, 00104$ - 1067 ;src/main.c:221: break; - 1068 ;src/main.c:223: } - 00000545 C9 [10] 1069 ret - 1070 ;src/main.c:225: void wait_frames(u8 n) - 1071 ; --------------------------------- - 1072 ; Function wait_frames - 1073 ; --------------------------------- - 00000546 1074 _wait_frames:: - 00000546 4F [ 4] 1075 ld c, a - 1076 ;src/main.c:227: while (n--) - 00000547 1077 00101$: - 00000547 79 [ 4] 1078 ld a, c - 00000548 0D [ 4] 1079 dec c - 00000549 B7 [ 4] 1080 or a, a - 0000054A C8 [11] 1081 ret z - 1082 ;src/main.c:231: __endasm; - 0000054B 76 [ 4] 1083 halt - 1084 ;src/main.c:233: } - 0000054C C3r47r05 [10] 1085 jp 00101$ - 1086 ;src/main.c:235: void about() - 1087 ; --------------------------------- - 1088 ; Function about - 1089 ; --------------------------------- - 0000054F 1090 _about:: - 1091 ;src/main.c:237: wc_prwow(&win_about); - 0000054F 21r7Ar02 [10] 1092 ld hl, #_win_about - 00000552 CDr00r00 [17] 1093 call _wc_prwow - 1094 ;src/main.c:238: wait_esc_key(); - 00000555 CDr3Er05 [17] 1095 call _wait_esc_key - 1096 ;src/main.c:239: wc_rresb(&win_about); - 00000558 21r7Ar02 [10] 1097 ld hl, #_win_about - 0000055B CDr00r00 [17] 1098 call _wc_rresb - 1099 ;src/main.c:240: wc_exit(WC_EXIT); - 0000055E AF [ 4] 1100 xor a, a - 1101 ;src/main.c:241: } - 0000055F C3r00r00 [10] 1102 jp _wc_exit - 1103 ;src/main.c:243: void error_esp() - 1104 ; --------------------------------- - 1105 ; Function error_esp - 1106 ; --------------------------------- - 00000562 1107 _error_esp:: - 1108 ;src/main.c:245: wc_prwow(&err_no_esp); - 00000562 21r32r02 [10] 1109 ld hl, #_err_no_esp - 00000565 CDr00r00 [17] 1110 call _wc_prwow - 1111 ;src/main.c:246: wait_esc_key(); - 00000568 CDr3Er05 [17] 1112 call _wait_esc_key - 1113 ;src/main.c:247: wc_rresb(&err_no_esp); - 0000056B 21r32r02 [10] 1114 ld hl, #_err_no_esp - 0000056E CDr00r00 [17] 1115 call _wc_rresb - 1116 ;src/main.c:248: wc_exit(WC_EXIT); - 00000571 AF [ 4] 1117 xor a, a - 1118 ;src/main.c:249: } - 00000572 C3r00r00 [10] 1119 jp _wc_exit - 1120 ;src/main.c:251: void error_oom() + 00000331 00 784 .db 0x00 + 785 ;src/main.c:156: bool play_xm() + 786 ; --------------------------------- + 787 ; Function play_xm + 788 ; --------------------------------- + 00000332 789 _play_xm:: + 00000332 DD E5 [15] 790 push ix + 00000334 DD 21 00 00 [14] 791 ld ix, #0 + 00000338 DD 39 [15] 792 add ix, sp + 0000033A 21 EC FF [10] 793 ld hl, #-20 + 0000033D 39 [11] 794 add hl, sp + 0000033E F9 [ 6] 795 ld sp, hl + 796 ;src/main.c:158: esp_cmd(ESP_CMD_TRACK_STOP); + 0000033F 3E A2 [ 7] 797 ld a, #0xa2 + 00000341 CDr0Er00 [17] 798 call _esp_cmd + 799 ;src/main.c:159: esp_wait_busy(10000); + 00000344 11 10 27 [10] 800 ld de, #0x2710 + 00000347 21 00 00 [10] 801 ld hl, #0x0000 + 0000034A CDrDEr01 [17] 802 call _esp_wait_busy + 803 ;src/main.c:160: esp_cmd(ESP_CMD_KILL_OBJECTS); + 0000034D 3E E4 [ 7] 804 ld a, #0xe4 + 0000034F CDr0Er00 [17] 805 call _esp_cmd + 806 ;src/main.c:161: esp_wait_busy(10000); + 00000352 11 10 27 [10] 807 ld de, #0x2710 + 00000355 21 00 00 [10] 808 ld hl, #0x0000 + 00000358 CDrDEr01 [17] 809 call _esp_wait_busy + 810 ;src/main.c:164: switch (file_ext) + 0000035B 3Ar06r10 [13] 811 ld a, (_file_ext) + 0000035E 3D [ 4] 812 dec a + 0000035F 28 0A [12] 813 jr z, 00101$ + 00000361 3Ar06r10 [13] 814 ld a, (_file_ext) + 00000364 D6 02 [ 7] 815 sub a, #0x02 + 00000366 28 08 [12] 816 jr z, 00102$ + 00000368 C3r75r03 [10] 817 jp 00103$ + 818 ;src/main.c:166: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; + 0000036B 819 00101$: + 0000036B 3E 08 [ 7] 820 ld a, #0x08 + 0000036D C3r77r03 [10] 821 jp 00104$ + 822 ;src/main.c:167: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; + 00000370 823 00102$: + 00000370 3E 0C [ 7] 824 ld a, #0x0c + 00000372 C3r77r03 [10] 825 jp 00104$ + 826 ;src/main.c:168: default: obj_type = OBJ_TYPE_XM; break; + 00000375 827 00103$: + 00000375 3E 05 [ 7] 828 ld a, #0x05 + 829 ;src/main.c:169: } + 00000377 830 00104$: + 831 ;src/main.c:171: xm_handle = esp_create_obj(filesize, obj_type); + 00000377 F5 [11] 832 push af + 00000378 33 [ 6] 833 inc sp + 00000379 ED 5Br02r10 [20] 834 ld de, (_filesize) + 0000037D 2Ar04r10 [16] 835 ld hl, (_filesize + 2) + 00000380 CDr00r02 [17] 836 call _esp_create_obj + 00000383 21r30r10 [10] 837 ld hl, #_xm_handle + 00000386 73 [ 7] 838 ld (hl), e + 839 ;src/main.c:172: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); + 00000387 3E 01 [ 7] 840 ld a, #0x01 + 00000389 CDr27r00 [17] 841 call _esp_rd_reg8 + 0000038C 32r08r10 [13] 842 ld (#_last_esp_status), a + 843 ;src/main.c:173: if (last_esp_status != ESP_ST_READY) + 0000038F 3Ar08r10 [13] 844 ld a, (_last_esp_status) + 00000392 3D [ 4] 845 dec a + 00000393 28 04 [12] 846 jr z, 00106$ + 847 ;src/main.c:174: return false; + 00000395 AF [ 4] 848 xor a, a + 00000396 C3r60r05 [10] 849 jp 00116$ + 00000399 850 00106$: + 851 ;src/main.c:176: u32 sz = filesize; + 00000399 21 0C 00 [10] 852 ld hl, #12 + 0000039C 39 [11] 853 add hl, sp + 0000039D EB [ 4] 854 ex de, hl + 0000039E 21r02r10 [10] 855 ld hl, #_filesize + 000003A1 01 04 00 [10] 856 ld bc, #4 + 000003A4 ED B0 [21] 857 ldir + 858 ;src/main.c:177: u32 offs = 0; + 000003A6 AF [ 4] 859 xor a, a + 000003A7 DD 77 FC [19] 860 ld -4 (ix), a + 000003AA DD 77 FD [19] 861 ld -3 (ix), a + 000003AD DD 77 FE [19] 862 ld -2 (ix), a + 000003B0 DD 77 FF [19] 863 ld -1 (ix), a + 864 ;src/main.c:179: while (sz) + 000003B3 865 00107$: + 000003B3 DD 7E FB [19] 866 ld a, -5 (ix) + 000003B6 DD B6 FA [19] 867 or a, -6 (ix) + 000003B9 DD B6 F9 [19] 868 or a, -7 (ix) + 000003BC DD B6 F8 [19] 869 or a, -8 (ix) + 000003BF CArCFr04 [10] 870 jp z, 00109$ + 871 ;src/main.c:181: u32 s = min(sz, FS_BUF_SIZE); + 000003C2 DD 7E F9 [19] 872 ld a, -7 (ix) + 000003C5 D6 10 [ 7] 873 sub a, #0x10 + 000003C7 DD 7E FA [19] 874 ld a, -6 (ix) + 000003CA DE 00 [ 7] 875 sbc a, #0x00 + 000003CC DD 7E FB [19] 876 ld a, -5 (ix) + 000003CF DE 00 [ 7] 877 sbc a, #0x00 + 000003D1 30 11 [12] 878 jr nc, 00118$ + 000003D3 21 00 00 [10] 879 ld hl, #0 + 000003D6 39 [11] 880 add hl, sp + 000003D7 EB [ 4] 881 ex de, hl + 000003D8 21 0C 00 [10] 882 ld hl, #12 + 000003DB 39 [11] 883 add hl, sp + 000003DC 01 04 00 [10] 884 ld bc, #4 + 000003DF ED B0 [21] 885 ldir + 000003E1 C3rF3r03 [10] 886 jp 00119$ + 000003E4 887 00118$: + 000003E4 DD 36 EC 00 [19] 888 ld -20 (ix), #0x00 + 000003E8 DD 36 ED 10 [19] 889 ld -19 (ix), #0x10 + 000003EC AF [ 4] 890 xor a, a + 000003ED DD 77 EE [19] 891 ld -18 (ix), a + 000003F0 DD 77 EF [19] 892 ld -17 (ix), a + 000003F3 893 00119$: + 000003F3 21 05 00 [10] 894 ld hl, #5 + 000003F6 39 [11] 895 add hl, sp + 000003F7 EB [ 4] 896 ex de, hl + 000003F8 21 00 00 [10] 897 ld hl, #0 + 000003FB 39 [11] 898 add hl, sp + 000003FC 01 04 00 [10] 899 ld bc, #4 + 000003FF ED B0 [21] 900 ldir + 901 ;src/main.c:182: u8 sec = (s + 511) >> 9; + 00000401 DD 7E F1 [19] 902 ld a, -15 (ix) + 00000404 C6 FF [ 7] 903 add a, #0xff + 00000406 DD 7E F2 [19] 904 ld a, -14 (ix) + 00000409 CE 01 [ 7] 905 adc a, #0x01 + 0000040B 47 [ 4] 906 ld b, a + 0000040C 3E 00 [ 7] 907 ld a, #0x00 + 0000040E CE 00 [ 7] 908 adc a, #0x00 + 00000410 5F [ 4] 909 ld e, a + 00000411 3E 00 [ 7] 910 ld a, #0x00 + 00000413 CE 00 [ 7] 911 adc a, #0x00 + 00000415 57 [ 4] 912 ld d, a + 00000416 48 [ 4] 913 ld c, b + 00000417 43 [ 4] 914 ld b, e + 00000418 5A [ 4] 915 ld e, d + 00000419 CB 3B [ 8] 916 srl e + 0000041B CB 18 [ 8] 917 rr b + 0000041D CB 19 [ 8] 918 rr c + 919 ;src/main.c:184: wc_load512((u16)fs_buf, sec); + 0000041F DD 71 F7 [19] 920 ld -9 (ix), c + 00000422 79 [ 4] 921 ld a, c + 00000423 F5 [11] 922 push af + 00000424 33 [ 6] 923 inc sp + 00000425 21r00r00 [10] 924 ld hl, #_fs_buf + 00000428 CDr00r00 [17] 925 call _wc_load512 + 926 ;src/main.c:186: esp_wr_reg32(ESP_REG_DATA_SIZE, s); + 0000042B 21 00 00 [10] 927 ld hl, #0x0 + 0000042E E5 [11] 928 push hl + 0000042F DD 6E F1 [19] 929 ld l, -15 (ix) + 00000432 DD 66 F2 [19] 930 ld h, -14 (ix) + 00000435 E5 [11] 931 push hl + 00000436 3E 03 [ 7] 932 ld a, #0x03 + 00000438 CDrF1r00 [17] 933 call _esp_wr_reg32 + 934 ;src/main.c:187: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); + 0000043B DD 6E FE [19] 935 ld l, -2 (ix) + 0000043E DD 66 FF [19] 936 ld h, -1 (ix) + 00000441 E5 [11] 937 push hl + 00000442 DD 6E FC [19] 938 ld l, -4 (ix) + 00000445 DD 66 FD [19] 939 ld h, -3 (ix) + 00000448 E5 [11] 940 push hl + 00000449 3E 07 [ 7] 941 ld a, #0x07 + 0000044B CDrF1r00 [17] 942 call _esp_wr_reg32 + 943 ;src/main.c:188: esp_cmd(ESP_CMD_WRITE_OBJECT); + 0000044E 3E E1 [ 7] 944 ld a, #0xe1 + 00000450 CDr0Er00 [17] 945 call _esp_cmd + 946 ;src/main.c:189: esp_wait_status(ESP_ST_DATA_M2S, 2000); + 00000453 21 00 00 [10] 947 ld hl, #0x0000 + 00000456 E5 [11] 948 push hl + 00000457 21 D0 07 [10] 949 ld hl, #0x07d0 + 0000045A E5 [11] 950 push hl + 0000045B 3E 03 [ 7] 951 ld a, #0x03 + 0000045D CDrA3r01 [17] 952 call _esp_wait_status + 00000460 F1 [10] 953 pop af + 00000461 F1 [10] 954 pop af + 955 ;src/main.c:190: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); + 00000462 DD 7E F7 [19] 956 ld a, -9 (ix) + 00000465 DD 77 F5 [19] 957 ld -11 (ix), a + 00000468 DD 36 F6 00 [19] 958 ld -10 (ix), #0x00 + 0000046C 3A 02 60 [13] 959 ld a, (#0x6002) + 0000046F DD 77 F7 [19] 960 ld -9 (ix), a + 00000472 DD 6E F5 [19] 961 ld l, -11 (ix) + 00000475 26 00 [ 7] 962 ld h, #0x00 + 00000477 E5 [11] 963 push hl + 00000478 21 00 02 [10] 964 ld hl, #0x0200 + 0000047B E5 [11] 965 push hl + 0000047C DD 7E F7 [19] 966 ld a, -9 (ix) + 0000047F F5 [11] 967 push af + 00000480 33 [ 6] 968 inc sp + 00000481 21r00r00 [10] 969 ld hl, #_fs_buf + 00000484 CDr30r01 [17] 970 call _esp_send_dma + 971 ;src/main.c:192: offs += s; + 00000487 DD 5E F1 [19] 972 ld e, -15 (ix) + 0000048A DD 56 F2 [19] 973 ld d, -14 (ix) + 0000048D DD 6E FC [19] 974 ld l, -4 (ix) + 00000490 DD 66 FD [19] 975 ld h, -3 (ix) + 00000493 19 [11] 976 add hl, de + 00000494 DD 75 FC [19] 977 ld -4 (ix), l + 00000497 DD 74 FD [19] 978 ld -3 (ix), h + 0000049A DD 7E FE [19] 979 ld a, -2 (ix) + 0000049D DD 8E F3 [19] 980 adc a, -13 (ix) + 000004A0 DD 77 FE [19] 981 ld -2 (ix), a + 000004A3 30 03 [12] 982 jr nc, 00197$ + 000004A5 DD 34 FF [23] 983 inc -1 (ix) + 000004A8 984 00197$: + 985 ;src/main.c:193: sz -= s; + 000004A8 DD 7E F8 [19] 986 ld a, -8 (ix) + 000004AB DD 96 F1 [19] 987 sub a, -15 (ix) + 000004AE DD 77 F8 [19] 988 ld -8 (ix), a + 000004B1 DD 7E F9 [19] 989 ld a, -7 (ix) + 000004B4 DD 9E F2 [19] 990 sbc a, -14 (ix) + 000004B7 DD 77 F9 [19] 991 ld -7 (ix), a + 000004BA DD 7E FA [19] 992 ld a, -6 (ix) + 000004BD DD 9E F3 [19] 993 sbc a, -13 (ix) + 000004C0 DD 77 FA [19] 994 ld -6 (ix), a + 000004C3 DD 7E FB [19] 995 ld a, -5 (ix) + 000004C6 DD 9E F4 [19] 996 sbc a, -12 (ix) + 000004C9 DD 77 FB [19] 997 ld -5 (ix), a + 000004CC C3rB3r03 [10] 998 jp 00107$ + 000004CF 999 00109$: + 1000 ;src/main.c:196: if (file_ext == EXT_XMZ) + 000004CF 3Ar06r10 [13] 1001 ld a, (_file_ext) + 000004D2 3D [ 4] 1002 dec a + 000004D3 20 3D [12] 1003 jr nz, 00113$ + 1004 ;src/main.c:201: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); + 000004D5 3Ar30r10 [13] 1005 ld a, (_xm_handle) + 000004D8 6F [ 4] 1006 ld l, a + 000004D9 3E 0B [ 7] 1007 ld a, #0x0b + 000004DB CDrDAr00 [17] 1008 call _esp_wr_reg8 + 1009 ;src/main.c:202: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); + 000004DE 2E 05 [ 7] 1010 ld l, #0x05 + 000004E0 3E 02 [ 7] 1011 ld a, #0x02 + 000004E2 CDrDAr00 [17] 1012 call _esp_wr_reg8 + 1013 ;src/main.c:203: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize); + 000004E5 2Ar04r10 [16] 1014 ld hl, (_filesize + 2) + 000004E8 E5 [11] 1015 push hl + 000004E9 2Ar02r10 [16] 1016 ld hl, (_filesize) + 000004EC E5 [11] 1017 push hl + 000004ED 3E 03 [ 7] 1018 ld a, #0x03 + 000004EF CDrF1r00 [17] 1019 call _esp_wr_reg32 + 1020 ;src/main.c:204: esp_cmd(ESP_CMD_UNZIP); + 000004F2 3E F2 [ 7] 1021 ld a, #0xf2 + 000004F4 CDr0Er00 [17] 1022 call _esp_cmd + 1023 ;src/main.c:205: esp_wait_busy(10000); + 000004F7 11 10 27 [10] 1024 ld de, #0x2710 + 000004FA 21 00 00 [10] 1025 ld hl, #0x0000 + 000004FD CDrDEr01 [17] 1026 call _esp_wait_busy + 1027 ;src/main.c:207: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); + 00000500 3E 01 [ 7] 1028 ld a, #0x01 + 00000502 CDr27r00 [17] 1029 call _esp_rd_reg8 + 00000505 32r08r10 [13] 1030 ld (#_last_esp_status), a + 1031 ;src/main.c:208: if (last_esp_status != ESP_ST_READY) + 00000508 3Ar08r10 [13] 1032 ld a, (_last_esp_status) + 0000050B 3D [ 4] 1033 dec a + 0000050C 28 04 [12] 1034 jr z, 00113$ + 1035 ;src/main.c:209: return false; + 0000050E AF [ 4] 1036 xor a, a + 0000050F C3r60r05 [10] 1037 jp 00116$ + 00000512 1038 00113$: + 1039 ;src/main.c:212: esp_cmd(ESP_CMD_TRACK_INIT); + 00000512 3E A0 [ 7] 1040 ld a, #0xa0 + 00000514 CDr0Er00 [17] 1041 call _esp_cmd + 1042 ;src/main.c:220: esp_wait_busy(1000000); + 00000517 11 40 42 [10] 1043 ld de, #0x4240 + 0000051A 21 0F 00 [10] 1044 ld hl, #0x000f + 0000051D CDrDEr01 [17] 1045 call _esp_wait_busy + 1046 ;src/main.c:222: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); + 00000520 3E 01 [ 7] 1047 ld a, #0x01 + 00000522 CDr27r00 [17] 1048 call _esp_rd_reg8 + 00000525 32r08r10 [13] 1049 ld (#_last_esp_status), a + 1050 ;src/main.c:223: if (last_esp_status != ESP_ST_READY) + 00000528 3Ar08r10 [13] 1051 ld a, (_last_esp_status) + 0000052B 3D [ 4] 1052 dec a + 0000052C 28 04 [12] 1053 jr z, 00115$ + 1054 ;src/main.c:224: return false; + 0000052E AF [ 4] 1055 xor a, a + 0000052F C3r60r05 [10] 1056 jp 00116$ + 00000532 1057 00115$: + 1058 ;src/main.c:229: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); + 00000532 3Ar30r10 [13] 1059 ld a, (_xm_handle) + 00000535 6F [ 4] 1060 ld l, a + 00000536 3E 0B [ 7] 1061 ld a, #0x0b + 00000538 CDrDAr00 [17] 1062 call _esp_wr_reg8 + 1063 ;src/main.c:230: esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1); + 0000053B 2E 01 [ 7] 1064 ld l, #0x01 + 0000053D 3E 3A [ 7] 1065 ld a, #0x3a + 0000053F CDrDAr00 [17] 1066 call _esp_wr_reg8 + 1067 ;src/main.c:231: esp_cmd(ESP_CMD_TRACK_SET_PARAMS); + 00000542 3E A6 [ 7] 1068 ld a, #0xa6 + 00000544 CDr0Er00 [17] 1069 call _esp_cmd + 1070 ;src/main.c:232: esp_wait_busy(10000); + 00000547 11 10 27 [10] 1071 ld de, #0x2710 + 0000054A 21 00 00 [10] 1072 ld hl, #0x0000 + 0000054D CDrDEr01 [17] 1073 call _esp_wait_busy + 1074 ;src/main.c:234: esp_cmd(ESP_CMD_TRACK_PLAY); + 00000550 3E A1 [ 7] 1075 ld a, #0xa1 + 00000552 CDr0Er00 [17] 1076 call _esp_cmd + 1077 ;src/main.c:235: esp_wait_busy(10000); + 00000555 11 10 27 [10] 1078 ld de, #0x2710 + 00000558 21 00 00 [10] 1079 ld hl, #0x0000 + 0000055B CDrDEr01 [17] 1080 call _esp_wait_busy + 1081 ;src/main.c:237: return true; + 0000055E 3E 01 [ 7] 1082 ld a, #0x01 + 00000560 1083 00116$: + 1084 ;src/main.c:238: } + 00000560 DD F9 [10] 1085 ld sp, ix + 00000562 DD E1 [14] 1086 pop ix + 00000564 C9 [10] 1087 ret + 1088 ;src/main.c:241: void wait_esc_key() + 1089 ; --------------------------------- + 1090 ; Function wait_esc_key + 1091 ; --------------------------------- + 00000565 1092 _wait_esc_key:: + 1093 ;src/main.c:243: while (1) + 00000565 1094 00104$: + 1095 ;src/main.c:247: __endasm; + 00000565 76 [ 4] 1096 halt + 1097 ;src/main.c:249: if (wc_key_esc()) + 00000566 CDr00r00 [17] 1098 call _wc_key_esc + 00000569 B7 [ 4] 1099 or a, a + 0000056A 28 F9 [12] 1100 jr z, 00104$ + 1101 ;src/main.c:250: break; + 1102 ;src/main.c:252: } + 0000056C C9 [10] 1103 ret + 1104 ;src/main.c:254: void wait_frames(u8 n) + 1105 ; --------------------------------- + 1106 ; Function wait_frames + 1107 ; --------------------------------- + 0000056D 1108 _wait_frames:: + 0000056D 4F [ 4] 1109 ld c, a + 1110 ;src/main.c:256: while (n--) + 0000056E 1111 00101$: + 0000056E 79 [ 4] 1112 ld a, c + 0000056F 0D [ 4] 1113 dec c + 00000570 B7 [ 4] 1114 or a, a + 00000571 C8 [11] 1115 ret z + 1116 ;src/main.c:260: __endasm; + 00000572 76 [ 4] 1117 halt + 1118 ;src/main.c:262: } + 00000573 C3r6Er05 [10] 1119 jp 00101$ + 1120 ;src/main.c:264: void about() 1121 ; --------------------------------- - 1122 ; Function error_oom + 1122 ; Function about 1123 ; --------------------------------- - 00000575 1124 _error_oom:: - 1125 ;src/main.c:253: wc_prwow(&err_out_of_mem); - 00000575 21r44r02 [10] 1126 ld hl, #_err_out_of_mem - 00000578 CDr00r00 [17] 1127 call _wc_prwow - 1128 ;src/main.c:254: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance - 0000057B 3E 32 [ 7] 1129 ld a, #0x32 - 0000057D CDr46r05 [17] 1130 call _wait_frames - 1131 ;src/main.c:255: wc_rresb(&err_out_of_mem); - 00000580 21r44r02 [10] 1132 ld hl, #_err_out_of_mem - 00000583 CDr00r00 [17] 1133 call _wc_rresb - 1134 ;src/main.c:256: wc_exit(WC_NEXT_FILE); - 00000586 3E 02 [ 7] 1135 ld a, #0x02 - 1136 ;src/main.c:257: } - 00000588 C3r00r00 [10] 1137 jp _wc_exit - 1138 ;src/main.c:259: void error_playback() - 1139 ; --------------------------------- - 1140 ; Function error_playback - 1141 ; --------------------------------- - 0000058B 1142 _error_playback:: - 1143 ;src/main.c:261: wc_prwow(&err_playback); - 0000058B 21r56r02 [10] 1144 ld hl, #_err_playback - 0000058E CDr00r00 [17] 1145 call _wc_prwow - 1146 ;src/main.c:262: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance - 00000591 3E 32 [ 7] 1147 ld a, #0x32 - 00000593 CDr46r05 [17] 1148 call _wait_frames - 1149 ;src/main.c:263: wc_rresb(&err_playback); - 00000596 21r56r02 [10] 1150 ld hl, #_err_playback - 00000599 CDr00r00 [17] 1151 call _wc_rresb - 1152 ;src/main.c:264: wc_exit(WC_NEXT_FILE); - 0000059C 3E 02 [ 7] 1153 ld a, #0x02 - 1154 ;src/main.c:265: } - 0000059E C3r00r00 [10] 1155 jp _wc_exit - 1156 ;src/main.c:272: void copy_file_name() - 1157 ; --------------------------------- - 1158 ; Function copy_file_name - 1159 ; --------------------------------- - 000005A1 1160 _copy_file_name:: - 1161 ;src/main.c:274: u8 *src = (u8*)p_file_name; - 000005A1 ED 4Br0Ar10 [20] 1162 ld bc, (_p_file_name) - 1163 ;src/main.c:277: while (src[i] && i < sizeof(file_name) - 1) - 000005A5 1E 00 [ 7] 1164 ld e, #0x00 - 000005A7 1165 00102$: - 000005A7 6B [ 4] 1166 ld l, e - 000005A8 26 00 [ 7] 1167 ld h, #0x00 - 000005AA 09 [11] 1168 add hl, bc - 000005AB 56 [ 7] 1169 ld d, (hl) - 1170 ;src/main.c:279: file_name[i] = src[i]; - 000005AC 3Er0C [ 7] 1171 ld a, #<(_file_name) - 000005AE 83 [ 4] 1172 add a, e - 000005AF 6F [ 4] 1173 ld l, a - 000005B0 3Es10 [ 7] 1174 ld a, #>(_file_name) - 000005B2 CE 00 [ 7] 1175 adc a, #0x00 - 000005B4 67 [ 4] 1176 ld h, a - 1177 ;src/main.c:277: while (src[i] && i < sizeof(file_name) - 1) - 000005B5 7A [ 4] 1178 ld a, d - 000005B6 B7 [ 4] 1179 or a, a - 000005B7 28 0A [12] 1180 jr z, 00104$ - 000005B9 7B [ 4] 1181 ld a, e - 000005BA D6 20 [ 7] 1182 sub a, #0x20 - 000005BC 30 05 [12] 1183 jr nc, 00104$ - 1184 ;src/main.c:279: file_name[i] = src[i]; - 000005BE 72 [ 7] 1185 ld (hl), d - 1186 ;src/main.c:280: i++; - 000005BF 1C [ 4] 1187 inc e - 000005C0 C3rA7r05 [10] 1188 jp 00102$ - 000005C3 1189 00104$: - 1190 ;src/main.c:282: file_name[i] = 0; - 000005C3 36 00 [10] 1191 ld (hl), #0x00 - 1192 ;src/main.c:283: } - 000005C5 C9 [10] 1193 ret - 1194 ;src/main.c:291: void xm_draw_static_labels() - 1195 ; --------------------------------- - 1196 ; Function xm_draw_static_labels - 1197 ; --------------------------------- - 000005C6 1198 _xm_draw_static_labels:: - 1199 ;src/main.c:293: wc_prsrw_attr(&win_xm, "File:", ROW_FILE, 1, 5, ATTR_CAPTION); - 000005C6 3E 45 [ 7] 1200 ld a, #0x45 - 000005C8 F5 [11] 1201 push af - 000005C9 33 [ 6] 1202 inc sp - 000005CA 21 05 00 [10] 1203 ld hl, #0x0005 - 000005CD E5 [11] 1204 push hl - 000005CE 21 01 01 [10] 1205 ld hl, #0x101 - 000005D1 E5 [11] 1206 push hl - 000005D2 11rF0r05 [10] 1207 ld de, #___str_9 - 000005D5 21r68r02 [10] 1208 ld hl, #_win_xm - 000005D8 CDr00r00 [17] 1209 call _wc_prsrw_attr - 1210 ;src/main.c:294: wc_prsrw(&win_xm, file_name, ROW_FILE, 7, strlen(file_name)); - 000005DB 21r0Cr10 [10] 1211 ld hl, #_file_name - 000005DE CDr00r00 [17] 1212 call _strlen - 000005E1 D5 [11] 1213 push de - 000005E2 21 01 07 [10] 1214 ld hl, #0x701 - 000005E5 E5 [11] 1215 push hl - 000005E6 11r0Cr10 [10] 1216 ld de, #_file_name - 000005E9 21r68r02 [10] 1217 ld hl, #_win_xm - 000005EC CDr00r00 [17] 1218 call _wc_prsrw - 1219 ;src/main.c:295: } - 000005EF C9 [10] 1220 ret - 000005F0 1221 ___str_9: - 000005F0 46 69 6C 65 3A 1222 .ascii "File:" - 000005F5 00 1223 .db 0x00 - 1224 ;src/main.c:304: void put_hex2(char *dst, u8 val) - 1225 ; --------------------------------- - 1226 ; Function put_hex2 - 1227 ; --------------------------------- - 000005F6 1228 _put_hex2:: - 000005F6 DD E5 [15] 1229 push ix - 000005F8 DD 21 00 00 [14] 1230 ld ix, #0 - 000005FC DD 39 [15] 1231 add ix, sp - 000005FE EB [ 4] 1232 ex de, hl - 1233 ;src/main.c:307: dst[0] = hexch[(val >> 4) & 0xF]; - 000005FF 01r22r06 [10] 1234 ld bc, #_put_hex2_hexch_10000_105+0 - 00000602 DD 7E 04 [19] 1235 ld a, 4 (ix) - 00000605 07 [ 4] 1236 rlca - 00000606 07 [ 4] 1237 rlca - 00000607 07 [ 4] 1238 rlca - 00000608 07 [ 4] 1239 rlca - 00000609 E6 0F [ 7] 1240 and a, #0xf - 0000060B 6F [ 4] 1241 ld l, a - 0000060C 26 00 [ 7] 1242 ld h, #0x00 - 0000060E 09 [11] 1243 add hl, bc - 0000060F 7E [ 7] 1244 ld a, (hl) - 00000610 12 [ 7] 1245 ld (de), a - 1246 ;src/main.c:308: dst[1] = hexch[val & 0xF]; - 00000611 13 [ 6] 1247 inc de - 00000612 DD 7E 04 [19] 1248 ld a, 4 (ix) - 00000615 E6 0F [ 7] 1249 and a, #0x0f - 00000617 6F [ 4] 1250 ld l, a - 00000618 26 00 [ 7] 1251 ld h, #0x00 - 0000061A 09 [11] 1252 add hl, bc - 0000061B 7E [ 7] 1253 ld a, (hl) - 0000061C 12 [ 7] 1254 ld (de), a - 1255 ;src/main.c:309: } - 0000061D DD E1 [14] 1256 pop ix - 0000061F E1 [10] 1257 pop hl - 00000620 33 [ 6] 1258 inc sp - 00000621 E9 [ 4] 1259 jp (hl) - 00000622 1260 _put_hex2_hexch_10000_105: - 00000622 30 31 32 33 34 35 36 1261 .ascii "0123456789ABCDEF" + 00000576 1124 _about:: + 1125 ;src/main.c:266: wc_prwow(&win_about); + 00000576 21r83r02 [10] 1126 ld hl, #_win_about + 00000579 CDr00r00 [17] 1127 call _wc_prwow + 1128 ;src/main.c:267: wait_esc_key(); + 0000057C CDr65r05 [17] 1129 call _wait_esc_key + 1130 ;src/main.c:268: wc_rresb(&win_about); + 0000057F 21r83r02 [10] 1131 ld hl, #_win_about + 00000582 CDr00r00 [17] 1132 call _wc_rresb + 1133 ;src/main.c:269: wc_exit(WC_EXIT); + 00000585 AF [ 4] 1134 xor a, a + 1135 ;src/main.c:270: } + 00000586 C3r00r00 [10] 1136 jp _wc_exit + 1137 ;src/main.c:272: void error_esp() + 1138 ; --------------------------------- + 1139 ; Function error_esp + 1140 ; --------------------------------- + 00000589 1141 _error_esp:: + 1142 ;src/main.c:274: wc_prwow(&err_no_esp); + 00000589 21r3Br02 [10] 1143 ld hl, #_err_no_esp + 0000058C CDr00r00 [17] 1144 call _wc_prwow + 1145 ;src/main.c:275: wait_esc_key(); + 0000058F CDr65r05 [17] 1146 call _wait_esc_key + 1147 ;src/main.c:276: wc_rresb(&err_no_esp); + 00000592 21r3Br02 [10] 1148 ld hl, #_err_no_esp + 00000595 CDr00r00 [17] 1149 call _wc_rresb + 1150 ;src/main.c:277: wc_exit(WC_EXIT); + 00000598 AF [ 4] 1151 xor a, a + 1152 ;src/main.c:278: } + 00000599 C3r00r00 [10] 1153 jp _wc_exit + 1154 ;src/main.c:280: void error_oom() + 1155 ; --------------------------------- + 1156 ; Function error_oom + 1157 ; --------------------------------- + 0000059C 1158 _error_oom:: + 1159 ;src/main.c:282: wc_prwow(&err_out_of_mem); + 0000059C 21r4Dr02 [10] 1160 ld hl, #_err_out_of_mem + 0000059F CDr00r00 [17] 1161 call _wc_prwow + 1162 ;src/main.c:283: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance + 000005A2 3E 32 [ 7] 1163 ld a, #0x32 + 000005A4 CDr6Dr05 [17] 1164 call _wait_frames + 1165 ;src/main.c:284: wc_rresb(&err_out_of_mem); + 000005A7 21r4Dr02 [10] 1166 ld hl, #_err_out_of_mem + 000005AA CDr00r00 [17] 1167 call _wc_rresb + 1168 ;src/main.c:285: wc_exit(WC_NEXT_FILE); + 000005AD 3E 02 [ 7] 1169 ld a, #0x02 + 1170 ;src/main.c:286: } + 000005AF C3r00r00 [10] 1171 jp _wc_exit + 1172 ;src/main.c:288: void error_playback() + 1173 ; --------------------------------- + 1174 ; Function error_playback + 1175 ; --------------------------------- + 000005B2 1176 _error_playback:: + 1177 ;src/main.c:290: wc_prwow(&err_playback); + 000005B2 21r5Fr02 [10] 1178 ld hl, #_err_playback + 000005B5 CDr00r00 [17] 1179 call _wc_prwow + 1180 ;src/main.c:291: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance + 000005B8 3E 32 [ 7] 1181 ld a, #0x32 + 000005BA CDr6Dr05 [17] 1182 call _wait_frames + 1183 ;src/main.c:292: wc_rresb(&err_playback); + 000005BD 21r5Fr02 [10] 1184 ld hl, #_err_playback + 000005C0 CDr00r00 [17] 1185 call _wc_rresb + 1186 ;src/main.c:293: wc_exit(WC_NEXT_FILE); + 000005C3 3E 02 [ 7] 1187 ld a, #0x02 + 1188 ;src/main.c:294: } + 000005C5 C3r00r00 [10] 1189 jp _wc_exit + 1190 ;src/main.c:301: void copy_file_name() + 1191 ; --------------------------------- + 1192 ; Function copy_file_name + 1193 ; --------------------------------- + 000005C8 1194 _copy_file_name:: + 1195 ;src/main.c:303: u8 *src = (u8*)p_file_name; + 000005C8 ED 4Br09r10 [20] 1196 ld bc, (_p_file_name) + 1197 ;src/main.c:306: while (src[i] && i < sizeof(file_name) - 1) + 000005CC 1E 00 [ 7] 1198 ld e, #0x00 + 000005CE 1199 00102$: + 000005CE 6B [ 4] 1200 ld l, e + 000005CF 26 00 [ 7] 1201 ld h, #0x00 + 000005D1 09 [11] 1202 add hl, bc + 000005D2 56 [ 7] 1203 ld d, (hl) + 1204 ;src/main.c:308: file_name[i] = src[i]; + 000005D3 3Er0B [ 7] 1205 ld a, #<(_file_name) + 000005D5 83 [ 4] 1206 add a, e + 000005D6 6F [ 4] 1207 ld l, a + 000005D7 3Es10 [ 7] 1208 ld a, #>(_file_name) + 000005D9 CE 00 [ 7] 1209 adc a, #0x00 + 000005DB 67 [ 4] 1210 ld h, a + 1211 ;src/main.c:306: while (src[i] && i < sizeof(file_name) - 1) + 000005DC 7A [ 4] 1212 ld a, d + 000005DD B7 [ 4] 1213 or a, a + 000005DE 28 0A [12] 1214 jr z, 00104$ + 000005E0 7B [ 4] 1215 ld a, e + 000005E1 D6 20 [ 7] 1216 sub a, #0x20 + 000005E3 30 05 [12] 1217 jr nc, 00104$ + 1218 ;src/main.c:308: file_name[i] = src[i]; + 000005E5 72 [ 7] 1219 ld (hl), d + 1220 ;src/main.c:309: i++; + 000005E6 1C [ 4] 1221 inc e + 000005E7 C3rCEr05 [10] 1222 jp 00102$ + 000005EA 1223 00104$: + 1224 ;src/main.c:311: file_name[i] = 0; + 000005EA 36 00 [10] 1225 ld (hl), #0x00 + 1226 ;src/main.c:312: } + 000005EC C9 [10] 1227 ret + 1228 ;src/main.c:320: void xm_draw_static_labels() + 1229 ; --------------------------------- + 1230 ; Function xm_draw_static_labels + 1231 ; --------------------------------- + 000005ED 1232 _xm_draw_static_labels:: + 1233 ;src/main.c:322: wc_prsrw_attr(&win_xm, "File:", ROW_FILE, 1, 5, ATTR_CAPTION); + 000005ED 3E 45 [ 7] 1234 ld a, #0x45 + 000005EF F5 [11] 1235 push af + 000005F0 33 [ 6] 1236 inc sp + 000005F1 21 05 00 [10] 1237 ld hl, #0x0005 + 000005F4 E5 [11] 1238 push hl + 000005F5 21 01 01 [10] 1239 ld hl, #0x101 + 000005F8 E5 [11] 1240 push hl + 000005F9 11r17r06 [10] 1241 ld de, #___str_9 + 000005FC 21r71r02 [10] 1242 ld hl, #_win_xm + 000005FF CDr00r00 [17] 1243 call _wc_prsrw_attr + 1244 ;src/main.c:323: wc_prsrw(&win_xm, file_name, ROW_FILE, 7, strlen(file_name)); + 00000602 21r0Br10 [10] 1245 ld hl, #_file_name + 00000605 CDr00r00 [17] 1246 call _strlen + 00000608 D5 [11] 1247 push de + 00000609 21 01 07 [10] 1248 ld hl, #0x701 + 0000060C E5 [11] 1249 push hl + 0000060D 11r0Br10 [10] 1250 ld de, #_file_name + 00000610 21r71r02 [10] 1251 ld hl, #_win_xm + 00000613 CDr00r00 [17] 1252 call _wc_prsrw + 1253 ;src/main.c:324: } + 00000616 C9 [10] 1254 ret + 00000617 1255 ___str_9: + 00000617 46 69 6C 65 3A 1256 .ascii "File:" + 0000061C 00 1257 .db 0x00 + 1258 ;src/main.c:333: void put_hex2(char *dst, u8 val) + 1259 ; --------------------------------- + 1260 ; Function put_hex2 + 1261 ; --------------------------------- + 0000061D 1262 _put_hex2:: + 0000061D DD E5 [15] 1263 push ix + 0000061F DD 21 00 00 [14] 1264 ld ix, #0 + 00000623 DD 39 [15] 1265 add ix, sp + 00000625 EB [ 4] 1266 ex de, hl + 1267 ;src/main.c:336: dst[0] = hexch[(val >> 4) & 0xF]; + 00000626 01r49r06 [10] 1268 ld bc, #_put_hex2_hexch_10000_106+0 + 00000629 DD 7E 04 [19] 1269 ld a, 4 (ix) + 0000062C 07 [ 4] 1270 rlca + 0000062D 07 [ 4] 1271 rlca + 0000062E 07 [ 4] 1272 rlca + 0000062F 07 [ 4] 1273 rlca + 00000630 E6 0F [ 7] 1274 and a, #0xf + 00000632 6F [ 4] 1275 ld l, a + 00000633 26 00 [ 7] 1276 ld h, #0x00 + 00000635 09 [11] 1277 add hl, bc + 00000636 7E [ 7] 1278 ld a, (hl) + 00000637 12 [ 7] 1279 ld (de), a + 1280 ;src/main.c:337: dst[1] = hexch[val & 0xF]; + 00000638 13 [ 6] 1281 inc de + 00000639 DD 7E 04 [19] 1282 ld a, 4 (ix) + 0000063C E6 0F [ 7] 1283 and a, #0x0f + 0000063E 6F [ 4] 1284 ld l, a + 0000063F 26 00 [ 7] 1285 ld h, #0x00 + 00000641 09 [11] 1286 add hl, bc + 00000642 7E [ 7] 1287 ld a, (hl) + 00000643 12 [ 7] 1288 ld (de), a + 1289 ;src/main.c:338: } + 00000644 DD E1 [14] 1290 pop ix + 00000646 E1 [10] 1291 pop hl + 00000647 33 [ 6] 1292 inc sp + 00000648 E9 [ 4] 1293 jp (hl) + 00000649 1294 _put_hex2_hexch_10000_106: + 00000649 30 31 32 33 34 35 36 1295 .ascii "0123456789ABCDEF" 37 38 39 41 42 43 44 45 46 - 00000632 00 1262 .db 0x00 - 1263 ;src/main.c:311: void put_dec3(char *dst, u16 val) - 1264 ; --------------------------------- - 1265 ; Function put_dec3 - 1266 ; --------------------------------- - 00000633 1267 _put_dec3:: - 00000633 DD E5 [15] 1268 push ix - 00000635 DD 21 00 00 [14] 1269 ld ix, #0 - 00000639 DD 39 [15] 1270 add ix, sp - 0000063B F5 [11] 1271 push af - 0000063C 4D [ 4] 1272 ld c, l - 0000063D 44 [ 4] 1273 ld b, h - 1274 ;src/main.c:313: dst[0] = '0' + (val / 100) % 10; - 0000063E E1 [10] 1275 pop hl - 0000063F D5 [11] 1276 push de - 00000640 C5 [11] 1277 push bc - 00000641 11 64 00 [10] 1278 ld de, #0x0064 - 00000644 DD 6E FE [19] 1279 ld l, -2 (ix) - 00000647 DD 66 FF [19] 1280 ld h, -1 (ix) - 0000064A CDr00r00 [17] 1281 call __divuint - 0000064D EB [ 4] 1282 ex de, hl - 0000064E 11 0A 00 [10] 1283 ld de, #0x000a - 00000651 CDr00r00 [17] 1284 call __moduint - 00000654 C1 [10] 1285 pop bc - 00000655 7B [ 4] 1286 ld a, e - 00000656 C6 30 [ 7] 1287 add a, #0x30 - 00000658 02 [ 7] 1288 ld (bc), a - 1289 ;src/main.c:314: dst[1] = '0' + (val / 10) % 10; - 00000659 69 [ 4] 1290 ld l, c - 0000065A 60 [ 4] 1291 ld h, b - 0000065B 23 [ 6] 1292 inc hl - 0000065C E5 [11] 1293 push hl - 0000065D C5 [11] 1294 push bc - 0000065E 11 0A 00 [10] 1295 ld de, #0x000a - 00000661 DD 6E FE [19] 1296 ld l, -2 (ix) - 00000664 DD 66 FF [19] 1297 ld h, -1 (ix) - 00000667 CDr00r00 [17] 1298 call __divuint - 0000066A EB [ 4] 1299 ex de, hl - 0000066B 11 0A 00 [10] 1300 ld de, #0x000a - 0000066E CDr00r00 [17] 1301 call __moduint - 00000671 C1 [10] 1302 pop bc - 00000672 E1 [10] 1303 pop hl - 00000673 7B [ 4] 1304 ld a, e - 00000674 C6 30 [ 7] 1305 add a, #0x30 - 00000676 77 [ 7] 1306 ld (hl), a - 1307 ;src/main.c:315: dst[2] = '0' + val % 10; - 00000677 03 [ 6] 1308 inc bc - 00000678 03 [ 6] 1309 inc bc - 00000679 C5 [11] 1310 push bc - 0000067A 11 0A 00 [10] 1311 ld de, #0x000a - 0000067D DD 6E FE [19] 1312 ld l, -2 (ix) - 00000680 DD 66 FF [19] 1313 ld h, -1 (ix) - 00000683 CDr00r00 [17] 1314 call __moduint - 00000686 C1 [10] 1315 pop bc - 00000687 7B [ 4] 1316 ld a, e - 00000688 C6 30 [ 7] 1317 add a, #0x30 - 0000068A 02 [ 7] 1318 ld (bc), a - 1319 ;src/main.c:316: } - 0000068B DD F9 [10] 1320 ld sp, ix - 0000068D DD E1 [14] 1321 pop ix - 0000068F C9 [10] 1322 ret - 1323 ;src/main.c:318: void put_time(char *dst, u32 sec) - 1324 ; --------------------------------- - 1325 ; Function put_time - 1326 ; --------------------------------- - 00000690 1327 _put_time:: - 00000690 DD E5 [15] 1328 push ix - 00000692 DD 21 00 00 [14] 1329 ld ix, #0 - 00000696 DD 39 [15] 1330 add ix, sp - 00000698 E5 [11] 1331 push hl - 1332 ;src/main.c:320: u8 m = (sec / 60) % 100; - 00000699 21 00 00 [10] 1333 ld hl, #0x0000 - 0000069C E5 [11] 1334 push hl - 0000069D 2E 3C [ 7] 1335 ld l, #0x3c - 0000069F E5 [11] 1336 push hl - 000006A0 DD 5E 04 [19] 1337 ld e, 4 (ix) - 000006A3 DD 56 05 [19] 1338 ld d, 5 (ix) - 000006A6 DD 6E 06 [19] 1339 ld l, 6 (ix) - 000006A9 DD 66 07 [19] 1340 ld h, 7 (ix) - 000006AC CDr00r00 [17] 1341 call __divulong - 000006AF F1 [10] 1342 pop af - 000006B0 F1 [10] 1343 pop af - 000006B1 01 00 00 [10] 1344 ld bc, #0x0000 - 000006B4 C5 [11] 1345 push bc - 000006B5 0E 64 [ 7] 1346 ld c, #0x64 - 000006B7 C5 [11] 1347 push bc - 000006B8 CDr00r00 [17] 1348 call __modulong - 000006BB F1 [10] 1349 pop af - 000006BC F1 [10] 1350 pop af - 000006BD 4B [ 4] 1351 ld c, e - 1352 ;src/main.c:321: u8 s = sec % 60; - 000006BE C5 [11] 1353 push bc - 000006BF 21 00 00 [10] 1354 ld hl, #0x0000 - 000006C2 E5 [11] 1355 push hl - 000006C3 2E 3C [ 7] 1356 ld l, #0x3c - 000006C5 E5 [11] 1357 push hl - 000006C6 DD 5E 04 [19] 1358 ld e, 4 (ix) - 000006C9 DD 56 05 [19] 1359 ld d, 5 (ix) - 000006CC DD 6E 06 [19] 1360 ld l, 6 (ix) - 000006CF DD 66 07 [19] 1361 ld h, 7 (ix) - 000006D2 CDr00r00 [17] 1362 call __modulong - 000006D5 F1 [10] 1363 pop af - 000006D6 F1 [10] 1364 pop af - 000006D7 C1 [10] 1365 pop bc - 1366 ;src/main.c:323: dst[0] = '0' + (m / 10) % 10; - 000006D8 51 [ 4] 1367 ld d, c - 000006D9 D5 [11] 1368 push de - 000006DA 2E 0A [ 7] 1369 ld l, #0x0a - 000006DC 7A [ 4] 1370 ld a, d - 000006DD CDr00r00 [17] 1371 call __divuchar - 000006E0 7B [ 4] 1372 ld a, e - 000006E1 2E 0A [ 7] 1373 ld l, #0x0a - 000006E3 CDr00r00 [17] 1374 call __moduchar - 000006E6 7B [ 4] 1375 ld a, e - 000006E7 D1 [10] 1376 pop de - 000006E8 C6 30 [ 7] 1377 add a, #0x30 - 000006EA E1 [10] 1378 pop hl - 000006EB E5 [11] 1379 push hl - 000006EC 77 [ 7] 1380 ld (hl), a - 1381 ;src/main.c:324: dst[1] = '0' + m % 10; - 000006ED C1 [10] 1382 pop bc - 000006EE C5 [11] 1383 push bc - 000006EF 03 [ 6] 1384 inc bc - 000006F0 C5 [11] 1385 push bc - 000006F1 D5 [11] 1386 push de - 000006F2 2E 0A [ 7] 1387 ld l, #0x0a - 000006F4 7A [ 4] 1388 ld a, d - 000006F5 CDr00r00 [17] 1389 call __moduchar - 000006F8 7B [ 4] 1390 ld a, e - 000006F9 D1 [10] 1391 pop de - 000006FA C1 [10] 1392 pop bc - 000006FB C6 30 [ 7] 1393 add a, #0x30 - 000006FD 02 [ 7] 1394 ld (bc), a - 1395 ;src/main.c:325: dst[2] = ':'; - 000006FE E1 [10] 1396 pop hl - 000006FF E5 [11] 1397 push hl - 00000700 23 [ 6] 1398 inc hl - 00000701 23 [ 6] 1399 inc hl - 00000702 36 3A [10] 1400 ld (hl), #0x3a - 1401 ;src/main.c:326: dst[3] = '0' + (s / 10) % 10; - 00000704 C1 [10] 1402 pop bc - 00000705 C5 [11] 1403 push bc - 00000706 03 [ 6] 1404 inc bc - 00000707 03 [ 6] 1405 inc bc - 00000708 03 [ 6] 1406 inc bc - 00000709 C5 [11] 1407 push bc - 0000070A D5 [11] 1408 push de - 0000070B 2E 0A [ 7] 1409 ld l, #0x0a - 0000070D 7B [ 4] 1410 ld a, e - 0000070E CDr00r00 [17] 1411 call __divuchar - 00000711 7B [ 4] 1412 ld a, e - 00000712 2E 0A [ 7] 1413 ld l, #0x0a - 00000714 CDr00r00 [17] 1414 call __moduchar - 00000717 7B [ 4] 1415 ld a, e - 00000718 D1 [10] 1416 pop de - 00000719 C1 [10] 1417 pop bc - 0000071A C6 30 [ 7] 1418 add a, #0x30 - 0000071C 02 [ 7] 1419 ld (bc), a - 1420 ;src/main.c:327: dst[4] = '0' + s % 10; - 0000071D DD 7E FE [19] 1421 ld a, -2 (ix) - 00000720 C6 04 [ 7] 1422 add a, #0x04 - 00000722 4F [ 4] 1423 ld c, a - 00000723 DD 7E FF [19] 1424 ld a, -1 (ix) - 00000726 CE 00 [ 7] 1425 adc a, #0x00 - 00000728 47 [ 4] 1426 ld b, a - 00000729 C5 [11] 1427 push bc - 0000072A 2E 0A [ 7] 1428 ld l, #0x0a - 0000072C 7B [ 4] 1429 ld a, e - 0000072D CDr00r00 [17] 1430 call __moduchar - 00000730 7B [ 4] 1431 ld a, e - 00000731 C1 [10] 1432 pop bc - 00000732 C6 30 [ 7] 1433 add a, #0x30 - 00000734 02 [ 7] 1434 ld (bc), a - 1435 ;src/main.c:328: } - 00000735 DD F9 [10] 1436 ld sp, ix - 00000737 DD E1 [14] 1437 pop ix - 00000739 E1 [10] 1438 pop hl - 0000073A F1 [10] 1439 pop af - 0000073B F1 [10] 1440 pop af - 0000073C E9 [ 4] 1441 jp (hl) - 1442 ;src/main.c:330: void xm_draw_stats_labels() - 1443 ; --------------------------------- - 1444 ; Function xm_draw_stats_labels - 1445 ; --------------------------------- - 0000073D 1446 _xm_draw_stats_labels:: - 1447 ;src/main.c:332: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); - 0000073D 21 09 00 [10] 1448 ld hl, #0x0009 - 00000740 E5 [11] 1449 push hl - 00000741 21 03 01 [10] 1450 ld hl, #0x103 - 00000744 E5 [11] 1451 push hl - 00000745 11r93r07 [10] 1452 ld de, #___str_11 - 00000748 21r68r02 [10] 1453 ld hl, #_win_xm - 0000074B CDr00r00 [17] 1454 call _wc_prsrw - 1455 ;src/main.c:333: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); - 0000074E 21 07 00 [10] 1456 ld hl, #0x0007 - 00000751 E5 [11] 1457 push hl - 00000752 21 03 0C [10] 1458 ld hl, #0xc03 - 00000755 E5 [11] 1459 push hl - 00000756 11r9Dr07 [10] 1460 ld de, #___str_12 - 00000759 21r68r02 [10] 1461 ld hl, #_win_xm - 0000075C CDr00r00 [17] 1462 call _wc_prsrw - 1463 ;src/main.c:334: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); - 0000075F 21 06 00 [10] 1464 ld hl, #0x0006 - 00000762 E5 [11] 1465 push hl - 00000763 21 03 15 [10] 1466 ld hl, #0x1503 - 00000766 E5 [11] 1467 push hl - 00000767 11rA5r07 [10] 1468 ld de, #___str_13 - 0000076A 21r68r02 [10] 1469 ld hl, #_win_xm - 0000076D CDr00r00 [17] 1470 call _wc_prsrw - 1471 ;src/main.c:336: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); - 00000770 21 05 00 [10] 1472 ld hl, #0x0005 - 00000773 E5 [11] 1473 push hl - 00000774 21 05 01 [10] 1474 ld hl, #0x105 - 00000777 E5 [11] 1475 push hl - 00000778 11rACr07 [10] 1476 ld de, #___str_14 - 0000077B 21r68r02 [10] 1477 ld hl, #_win_xm - 0000077E CDr00r00 [17] 1478 call _wc_prsrw - 1479 ;src/main.c:337: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); - 00000781 21 03 00 [10] 1480 ld hl, #0x0003 - 00000784 E5 [11] 1481 push hl - 00000785 21 05 0C [10] 1482 ld hl, #0xc05 - 00000788 E5 [11] 1483 push hl - 00000789 11rB2r07 [10] 1484 ld de, #___str_15 - 0000078C 21r68r02 [10] 1485 ld hl, #_win_xm - 0000078F CDr00r00 [17] 1486 call _wc_prsrw - 1487 ;src/main.c:338: } - 00000792 C9 [10] 1488 ret - 00000793 1489 ___str_11: - 00000793 50 61 74 74 65 72 6E 1490 .ascii "Pattern:#" + 00000659 00 1296 .db 0x00 + 1297 ;src/main.c:340: void put_dec3(char *dst, u16 val) + 1298 ; --------------------------------- + 1299 ; Function put_dec3 + 1300 ; --------------------------------- + 0000065A 1301 _put_dec3:: + 0000065A DD E5 [15] 1302 push ix + 0000065C DD 21 00 00 [14] 1303 ld ix, #0 + 00000660 DD 39 [15] 1304 add ix, sp + 00000662 F5 [11] 1305 push af + 00000663 4D [ 4] 1306 ld c, l + 00000664 44 [ 4] 1307 ld b, h + 1308 ;src/main.c:342: dst[0] = '0' + (val / 100) % 10; + 00000665 E1 [10] 1309 pop hl + 00000666 D5 [11] 1310 push de + 00000667 C5 [11] 1311 push bc + 00000668 11 64 00 [10] 1312 ld de, #0x0064 + 0000066B DD 6E FE [19] 1313 ld l, -2 (ix) + 0000066E DD 66 FF [19] 1314 ld h, -1 (ix) + 00000671 CDr00r00 [17] 1315 call __divuint + 00000674 EB [ 4] 1316 ex de, hl + 00000675 11 0A 00 [10] 1317 ld de, #0x000a + 00000678 CDr00r00 [17] 1318 call __moduint + 0000067B C1 [10] 1319 pop bc + 0000067C 7B [ 4] 1320 ld a, e + 0000067D C6 30 [ 7] 1321 add a, #0x30 + 0000067F 02 [ 7] 1322 ld (bc), a + 1323 ;src/main.c:343: dst[1] = '0' + (val / 10) % 10; + 00000680 69 [ 4] 1324 ld l, c + 00000681 60 [ 4] 1325 ld h, b + 00000682 23 [ 6] 1326 inc hl + 00000683 E5 [11] 1327 push hl + 00000684 C5 [11] 1328 push bc + 00000685 11 0A 00 [10] 1329 ld de, #0x000a + 00000688 DD 6E FE [19] 1330 ld l, -2 (ix) + 0000068B DD 66 FF [19] 1331 ld h, -1 (ix) + 0000068E CDr00r00 [17] 1332 call __divuint + 00000691 EB [ 4] 1333 ex de, hl + 00000692 11 0A 00 [10] 1334 ld de, #0x000a + 00000695 CDr00r00 [17] 1335 call __moduint + 00000698 C1 [10] 1336 pop bc + 00000699 E1 [10] 1337 pop hl + 0000069A 7B [ 4] 1338 ld a, e + 0000069B C6 30 [ 7] 1339 add a, #0x30 + 0000069D 77 [ 7] 1340 ld (hl), a + 1341 ;src/main.c:344: dst[2] = '0' + val % 10; + 0000069E 03 [ 6] 1342 inc bc + 0000069F 03 [ 6] 1343 inc bc + 000006A0 C5 [11] 1344 push bc + 000006A1 11 0A 00 [10] 1345 ld de, #0x000a + 000006A4 DD 6E FE [19] 1346 ld l, -2 (ix) + 000006A7 DD 66 FF [19] 1347 ld h, -1 (ix) + 000006AA CDr00r00 [17] 1348 call __moduint + 000006AD C1 [10] 1349 pop bc + 000006AE 7B [ 4] 1350 ld a, e + 000006AF C6 30 [ 7] 1351 add a, #0x30 + 000006B1 02 [ 7] 1352 ld (bc), a + 1353 ;src/main.c:345: } + 000006B2 DD F9 [10] 1354 ld sp, ix + 000006B4 DD E1 [14] 1355 pop ix + 000006B6 C9 [10] 1356 ret + 1357 ;src/main.c:347: void put_time(char *dst, u32 sec) + 1358 ; --------------------------------- + 1359 ; Function put_time + 1360 ; --------------------------------- + 000006B7 1361 _put_time:: + 000006B7 DD E5 [15] 1362 push ix + 000006B9 DD 21 00 00 [14] 1363 ld ix, #0 + 000006BD DD 39 [15] 1364 add ix, sp + 000006BF E5 [11] 1365 push hl + 1366 ;src/main.c:349: u8 m = (sec / 60) % 100; + 000006C0 21 00 00 [10] 1367 ld hl, #0x0000 + 000006C3 E5 [11] 1368 push hl + 000006C4 2E 3C [ 7] 1369 ld l, #0x3c + 000006C6 E5 [11] 1370 push hl + 000006C7 DD 5E 04 [19] 1371 ld e, 4 (ix) + 000006CA DD 56 05 [19] 1372 ld d, 5 (ix) + 000006CD DD 6E 06 [19] 1373 ld l, 6 (ix) + 000006D0 DD 66 07 [19] 1374 ld h, 7 (ix) + 000006D3 CDr00r00 [17] 1375 call __divulong + 000006D6 F1 [10] 1376 pop af + 000006D7 F1 [10] 1377 pop af + 000006D8 01 00 00 [10] 1378 ld bc, #0x0000 + 000006DB C5 [11] 1379 push bc + 000006DC 0E 64 [ 7] 1380 ld c, #0x64 + 000006DE C5 [11] 1381 push bc + 000006DF CDr00r00 [17] 1382 call __modulong + 000006E2 F1 [10] 1383 pop af + 000006E3 F1 [10] 1384 pop af + 000006E4 4B [ 4] 1385 ld c, e + 1386 ;src/main.c:350: u8 s = sec % 60; + 000006E5 C5 [11] 1387 push bc + 000006E6 21 00 00 [10] 1388 ld hl, #0x0000 + 000006E9 E5 [11] 1389 push hl + 000006EA 2E 3C [ 7] 1390 ld l, #0x3c + 000006EC E5 [11] 1391 push hl + 000006ED DD 5E 04 [19] 1392 ld e, 4 (ix) + 000006F0 DD 56 05 [19] 1393 ld d, 5 (ix) + 000006F3 DD 6E 06 [19] 1394 ld l, 6 (ix) + 000006F6 DD 66 07 [19] 1395 ld h, 7 (ix) + 000006F9 CDr00r00 [17] 1396 call __modulong + 000006FC F1 [10] 1397 pop af + 000006FD F1 [10] 1398 pop af + 000006FE C1 [10] 1399 pop bc + 1400 ;src/main.c:352: dst[0] = '0' + (m / 10) % 10; + 000006FF 51 [ 4] 1401 ld d, c + 00000700 D5 [11] 1402 push de + 00000701 2E 0A [ 7] 1403 ld l, #0x0a + 00000703 7A [ 4] 1404 ld a, d + 00000704 CDr00r00 [17] 1405 call __divuchar + 00000707 7B [ 4] 1406 ld a, e + 00000708 2E 0A [ 7] 1407 ld l, #0x0a + 0000070A CDr00r00 [17] 1408 call __moduchar + 0000070D 7B [ 4] 1409 ld a, e + 0000070E D1 [10] 1410 pop de + 0000070F C6 30 [ 7] 1411 add a, #0x30 + 00000711 E1 [10] 1412 pop hl + 00000712 E5 [11] 1413 push hl + 00000713 77 [ 7] 1414 ld (hl), a + 1415 ;src/main.c:353: dst[1] = '0' + m % 10; + 00000714 C1 [10] 1416 pop bc + 00000715 C5 [11] 1417 push bc + 00000716 03 [ 6] 1418 inc bc + 00000717 C5 [11] 1419 push bc + 00000718 D5 [11] 1420 push de + 00000719 2E 0A [ 7] 1421 ld l, #0x0a + 0000071B 7A [ 4] 1422 ld a, d + 0000071C CDr00r00 [17] 1423 call __moduchar + 0000071F 7B [ 4] 1424 ld a, e + 00000720 D1 [10] 1425 pop de + 00000721 C1 [10] 1426 pop bc + 00000722 C6 30 [ 7] 1427 add a, #0x30 + 00000724 02 [ 7] 1428 ld (bc), a + 1429 ;src/main.c:354: dst[2] = ':'; + 00000725 E1 [10] 1430 pop hl + 00000726 E5 [11] 1431 push hl + 00000727 23 [ 6] 1432 inc hl + 00000728 23 [ 6] 1433 inc hl + 00000729 36 3A [10] 1434 ld (hl), #0x3a + 1435 ;src/main.c:355: dst[3] = '0' + (s / 10) % 10; + 0000072B C1 [10] 1436 pop bc + 0000072C C5 [11] 1437 push bc + 0000072D 03 [ 6] 1438 inc bc + 0000072E 03 [ 6] 1439 inc bc + 0000072F 03 [ 6] 1440 inc bc + 00000730 C5 [11] 1441 push bc + 00000731 D5 [11] 1442 push de + 00000732 2E 0A [ 7] 1443 ld l, #0x0a + 00000734 7B [ 4] 1444 ld a, e + 00000735 CDr00r00 [17] 1445 call __divuchar + 00000738 7B [ 4] 1446 ld a, e + 00000739 2E 0A [ 7] 1447 ld l, #0x0a + 0000073B CDr00r00 [17] 1448 call __moduchar + 0000073E 7B [ 4] 1449 ld a, e + 0000073F D1 [10] 1450 pop de + 00000740 C1 [10] 1451 pop bc + 00000741 C6 30 [ 7] 1452 add a, #0x30 + 00000743 02 [ 7] 1453 ld (bc), a + 1454 ;src/main.c:356: dst[4] = '0' + s % 10; + 00000744 DD 7E FE [19] 1455 ld a, -2 (ix) + 00000747 C6 04 [ 7] 1456 add a, #0x04 + 00000749 4F [ 4] 1457 ld c, a + 0000074A DD 7E FF [19] 1458 ld a, -1 (ix) + 0000074D CE 00 [ 7] 1459 adc a, #0x00 + 0000074F 47 [ 4] 1460 ld b, a + 00000750 C5 [11] 1461 push bc + 00000751 2E 0A [ 7] 1462 ld l, #0x0a + 00000753 7B [ 4] 1463 ld a, e + 00000754 CDr00r00 [17] 1464 call __moduchar + 00000757 7B [ 4] 1465 ld a, e + 00000758 C1 [10] 1466 pop bc + 00000759 C6 30 [ 7] 1467 add a, #0x30 + 0000075B 02 [ 7] 1468 ld (bc), a + 1469 ;src/main.c:357: } + 0000075C DD F9 [10] 1470 ld sp, ix + 0000075E DD E1 [14] 1471 pop ix + 00000760 E1 [10] 1472 pop hl + 00000761 F1 [10] 1473 pop af + 00000762 F1 [10] 1474 pop af + 00000763 E9 [ 4] 1475 jp (hl) + 1476 ;src/main.c:359: void xm_draw_stats_labels() + 1477 ; --------------------------------- + 1478 ; Function xm_draw_stats_labels + 1479 ; --------------------------------- + 00000764 1480 _xm_draw_stats_labels:: + 1481 ;src/main.c:361: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); + 00000764 21 09 00 [10] 1482 ld hl, #0x0009 + 00000767 E5 [11] 1483 push hl + 00000768 21 03 01 [10] 1484 ld hl, #0x103 + 0000076B E5 [11] 1485 push hl + 0000076C 11rBAr07 [10] 1486 ld de, #___str_11 + 0000076F 21r71r02 [10] 1487 ld hl, #_win_xm + 00000772 CDr00r00 [17] 1488 call _wc_prsrw + 1489 ;src/main.c:362: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); + 00000775 21 07 00 [10] 1490 ld hl, #0x0007 + 00000778 E5 [11] 1491 push hl + 00000779 21 03 0C [10] 1492 ld hl, #0xc03 + 0000077C E5 [11] 1493 push hl + 0000077D 11rC4r07 [10] 1494 ld de, #___str_12 + 00000780 21r71r02 [10] 1495 ld hl, #_win_xm + 00000783 CDr00r00 [17] 1496 call _wc_prsrw + 1497 ;src/main.c:363: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); + 00000786 21 06 00 [10] 1498 ld hl, #0x0006 + 00000789 E5 [11] 1499 push hl + 0000078A 21 03 15 [10] 1500 ld hl, #0x1503 + 0000078D E5 [11] 1501 push hl + 0000078E 11rCCr07 [10] 1502 ld de, #___str_13 + 00000791 21r71r02 [10] 1503 ld hl, #_win_xm + 00000794 CDr00r00 [17] 1504 call _wc_prsrw + 1505 ;src/main.c:365: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); + 00000797 21 05 00 [10] 1506 ld hl, #0x0005 + 0000079A E5 [11] 1507 push hl + 0000079B 21 05 01 [10] 1508 ld hl, #0x105 + 0000079E E5 [11] 1509 push hl + 0000079F 11rD3r07 [10] 1510 ld de, #___str_14 + 000007A2 21r71r02 [10] 1511 ld hl, #_win_xm + 000007A5 CDr00r00 [17] 1512 call _wc_prsrw + 1513 ;src/main.c:366: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); + 000007A8 21 03 00 [10] 1514 ld hl, #0x0003 + 000007AB E5 [11] 1515 push hl + 000007AC 21 05 0C [10] 1516 ld hl, #0xc05 + 000007AF E5 [11] 1517 push hl + 000007B0 11rD9r07 [10] 1518 ld de, #___str_15 + 000007B3 21r71r02 [10] 1519 ld hl, #_win_xm + 000007B6 CDr00r00 [17] 1520 call _wc_prsrw + 1521 ;src/main.c:367: } + 000007B9 C9 [10] 1522 ret + 000007BA 1523 ___str_11: + 000007BA 50 61 74 74 65 72 6E 1524 .ascii "Pattern:#" 3A 23 - 0000079C 00 1491 .db 0x00 - 0000079D 1492 ___str_12: - 0000079D 20 20 52 6F 77 3A 23 1493 .ascii " Row:#" - 000007A4 00 1494 .db 0x00 - 000007A5 1495 ___str_13: - 000007A5 20 20 42 50 4D 3A 1496 .ascii " BPM:" - 000007AB 00 1497 .db 0x00 - 000007AC 1498 ___str_14: - 000007AC 54 69 6D 65 3A 1499 .ascii "Time:" - 000007B1 00 1500 .db 0x00 - 000007B2 1501 ___str_15: - 000007B2 20 2F 20 1502 .ascii " / " - 000007B5 00 1503 .db 0x00 - 1504 ;src/main.c:353: void xm_update_info() - 1505 ; --------------------------------- - 1506 ; Function xm_update_info - 1507 ; --------------------------------- - 000007B6 1508 _xm_update_info:: - 000007B6 DD E5 [15] 1509 push ix - 000007B8 DD 21 00 00 [14] 1510 ld ix, #0 - 000007BC DD 39 [15] 1511 add ix, sp - 000007BE 21 F8 FF [10] 1512 ld hl, #-8 - 000007C1 39 [11] 1513 add hl, sp - 000007C2 F9 [ 6] 1514 ld sp, hl - 1515 ;src/main.c:359: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); - 000007C3 3Ar31r10 [13] 1516 ld a, (_xm_handle) - 000007C6 6F [ 4] 1517 ld l, a - 000007C7 3E 0B [ 7] 1518 ld a, #0x0b - 000007C9 CDrD1r00 [17] 1519 call _esp_wr_reg8 - 1520 ;src/main.c:360: esp_cmd(ESP_CMD_TRACK_GET_INFO); - 000007CC 3E A8 [ 7] 1521 ld a, #0xa8 - 000007CE CDr05r00 [17] 1522 call _esp_cmd - 1523 ;src/main.c:361: esp_wait_busy(2000); - 000007D1 11 D0 07 [10] 1524 ld de, #0x07d0 - 000007D4 21 00 00 [10] 1525 ld hl, #0x0000 - 000007D7 CDrD5r01 [17] 1526 call _esp_wait_busy - 1527 ;src/main.c:363: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); - 000007DA 3E 2B [ 7] 1528 ld a, #0x2b - 000007DC CDr1Er00 [17] 1529 call _esp_rd_reg8 - 000007DF DD 77 FA [19] 1530 ld -6 (ix), a - 1531 ;src/main.c:364: row = esp_rd_reg8(ESP_REG_TRACK_ROW); - 000007E2 3E 2C [ 7] 1532 ld a, #0x2c - 000007E4 CDr1Er00 [17] 1533 call _esp_rd_reg8 - 000007E7 DD 77 FB [19] 1534 ld -5 (ix), a - 1535 ;src/main.c:365: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); - 000007EA 3E 02 [ 7] 1536 ld a, #0x02 - 000007EC F5 [11] 1537 push af - 000007ED 33 [ 6] 1538 inc sp - 000007EE 21 01 00 [10] 1539 ld hl, #1 - 000007F1 39 [11] 1540 add hl, sp - 000007F2 EB [ 4] 1541 ex de, hl - 000007F3 3E 31 [ 7] 1542 ld a, #0x31 - 000007F5 CDrA5r00 [17] 1543 call _esp_rd_regs - 1544 ;src/main.c:366: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES); - 000007F8 3E 2D [ 7] 1545 ld a, #0x2d - 000007FA CDr37r00 [17] 1546 call _esp_rd_reg32 - 000007FD DD 73 FC [19] 1547 ld -4 (ix), e - 00000800 DD 72 FD [19] 1548 ld -3 (ix), d - 00000803 DD 75 FE [19] 1549 ld -2 (ix), l - 00000806 DD 74 FF [19] 1550 ld -1 (ix), h - 1551 ;src/main.c:368: if (!total_samples) - 00000809 3Ar30r10 [13] 1552 ld a, (_total_samples+3) - 0000080C FD 21r2Dr10 [14] 1553 ld iy, #_total_samples - 00000810 FD B6 02 [19] 1554 or a, 2 (iy) - 00000813 FD B6 01 [19] 1555 or a, 1 (iy) - 00000816 FD B6 00 [19] 1556 or a, 0 (iy) - 00000819 20 0C [12] 1557 jr nz, 00102$ - 1558 ;src/main.c:369: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES); - 0000081B 3E 36 [ 7] 1559 ld a, #0x36 - 0000081D CDr37r00 [17] 1560 call _esp_rd_reg32 - 00000820 ED 53r2Dr10 [20] 1561 ld (_total_samples), de - 00000824 22r2Fr10 [16] 1562 ld (_total_samples + 2), hl - 00000827 1563 00102$: - 1564 ;src/main.c:371: put_hex2(hexbuf, pattern); - 00000827 DD 7E FA [19] 1565 ld a, -6 (ix) - 0000082A F5 [11] 1566 push af - 0000082B 33 [ 6] 1567 inc sp - 0000082C 21r32r10 [10] 1568 ld hl, #_hexbuf - 0000082F CDrF6r05 [17] 1569 call _put_hex2 - 1570 ;src/main.c:372: wc_prsrw(&win_xm, hexbuf, ROW_STATS, 10, 2); - 00000832 21 02 00 [10] 1571 ld hl, #0x0002 - 00000835 E5 [11] 1572 push hl - 00000836 21 03 0A [10] 1573 ld hl, #0xa03 - 00000839 E5 [11] 1574 push hl - 0000083A 11r32r10 [10] 1575 ld de, #_hexbuf - 0000083D 21r68r02 [10] 1576 ld hl, #_win_xm - 00000840 CDr00r00 [17] 1577 call _wc_prsrw - 1578 ;src/main.c:374: put_hex2(hexbuf, row); - 00000843 DD 7E FB [19] 1579 ld a, -5 (ix) - 00000846 F5 [11] 1580 push af - 00000847 33 [ 6] 1581 inc sp - 00000848 21r32r10 [10] 1582 ld hl, #_hexbuf - 0000084B CDrF6r05 [17] 1583 call _put_hex2 - 1584 ;src/main.c:375: wc_prsrw(&win_xm, hexbuf, ROW_STATS, 19, 2); - 0000084E 21 02 00 [10] 1585 ld hl, #0x0002 - 00000851 E5 [11] 1586 push hl - 00000852 21 03 13 [10] 1587 ld hl, #0x1303 - 00000855 E5 [11] 1588 push hl - 00000856 11r32r10 [10] 1589 ld de, #_hexbuf - 00000859 21r68r02 [10] 1590 ld hl, #_win_xm - 0000085C CDr00r00 [17] 1591 call _wc_prsrw - 1592 ;src/main.c:377: put_dec3(decbuf, bpm); - 0000085F D1 [10] 1593 pop de - 00000860 D5 [11] 1594 push de - 00000861 21r34r10 [10] 1595 ld hl, #_decbuf - 00000864 CDr33r06 [17] 1596 call _put_dec3 - 1597 ;src/main.c:378: wc_prsrw(&win_xm, decbuf, ROW_STATS, 27, 3); - 00000867 21 03 00 [10] 1598 ld hl, #0x0003 - 0000086A E5 [11] 1599 push hl - 0000086B 21 03 1B [10] 1600 ld hl, #0x1b03 - 0000086E E5 [11] 1601 push hl - 0000086F 11r34r10 [10] 1602 ld de, #_decbuf - 00000872 21r68r02 [10] 1603 ld hl, #_win_xm - 00000875 CDr00r00 [17] 1604 call _wc_prsrw - 1605 ;src/main.c:380: put_time(timebuf, samples / 44100UL); - 00000878 21 00 00 [10] 1606 ld hl, #0x0000 - 0000087B E5 [11] 1607 push hl - 0000087C 21 44 AC [10] 1608 ld hl, #0xac44 - 0000087F E5 [11] 1609 push hl - 00000880 DD 5E FC [19] 1610 ld e, -4 (ix) - 00000883 DD 56 FD [19] 1611 ld d, -3 (ix) - 00000886 DD 6E FE [19] 1612 ld l, -2 (ix) - 00000889 DD 66 FF [19] 1613 ld h, -1 (ix) - 0000088C CDr00r00 [17] 1614 call __divulong - 0000088F F1 [10] 1615 pop af - 00000890 E3 [19] 1616 ex (sp),hl - 00000891 D5 [11] 1617 push de - 00000892 21r37r10 [10] 1618 ld hl, #_timebuf - 00000895 CDr90r06 [17] 1619 call _put_time - 1620 ;src/main.c:381: wc_prsrw(&win_xm, timebuf, ROW_TIME, 7, 5); - 00000898 21 05 00 [10] 1621 ld hl, #0x0005 - 0000089B E5 [11] 1622 push hl - 0000089C 21 05 07 [10] 1623 ld hl, #0x705 - 0000089F E5 [11] 1624 push hl - 000008A0 11r37r10 [10] 1625 ld de, #_timebuf - 000008A3 21r68r02 [10] 1626 ld hl, #_win_xm - 000008A6 CDr00r00 [17] 1627 call _wc_prsrw - 1628 ;src/main.c:383: put_time(timebuf, total_samples / 44100UL); - 000008A9 21 00 00 [10] 1629 ld hl, #0x0000 - 000008AC E5 [11] 1630 push hl - 000008AD 21 44 AC [10] 1631 ld hl, #0xac44 - 000008B0 E5 [11] 1632 push hl - 000008B1 ED 5Br2Dr10 [20] 1633 ld de, (_total_samples) - 000008B5 2Ar2Fr10 [16] 1634 ld hl, (_total_samples + 2) - 000008B8 CDr00r00 [17] 1635 call __divulong - 000008BB F1 [10] 1636 pop af - 000008BC E3 [19] 1637 ex (sp),hl - 000008BD D5 [11] 1638 push de - 000008BE 21r37r10 [10] 1639 ld hl, #_timebuf - 000008C1 CDr90r06 [17] 1640 call _put_time - 1641 ;src/main.c:384: wc_prsrw(&win_xm, timebuf, ROW_TIME, 15, 5); - 000008C4 21 05 00 [10] 1642 ld hl, #0x0005 - 000008C7 E5 [11] 1643 push hl - 000008C8 21 05 0F [10] 1644 ld hl, #0xf05 - 000008CB E5 [11] 1645 push hl - 000008CC 11r37r10 [10] 1646 ld de, #_timebuf - 000008CF 21r68r02 [10] 1647 ld hl, #_win_xm - 000008D2 CDr00r00 [17] 1648 call _wc_prsrw - 1649 ;src/main.c:388: } - 000008D5 DD F9 [10] 1650 ld sp, ix - 000008D7 DD E1 [14] 1651 pop ix - 000008D9 C9 [10] 1652 ret - 1653 ;src/main.c:390: void main_start() - 1654 ; --------------------------------- - 1655 ; Function main_start - 1656 ; --------------------------------- - 000008DA 1657 _main_start:: - 1658 ;src/main.c:394: copy_file_name(); - 000008DA CDrA1r05 [17] 1659 call _copy_file_name - 1660 ;src/main.c:396: if (!state_esp) - 000008DD 3Ar00r00 [13] 1661 ld a, (_state_esp+0) - 000008E0 B7 [ 4] 1662 or a, a - 000008E1 20 0D [12] 1663 jr nz, 00102$ - 1664 ;src/main.c:397: state_esp = esp_init() ? 1 : 2; - 000008E3 CDr25r02 [17] 1665 call _esp_init - 000008E6 B7 [ 4] 1666 or a, a - 000008E7 3E 01 [ 7] 1667 ld a, #0x01 - 000008E9 20 02 [12] 1668 jr nz, 00122$ - 000008EB 3E 02 [ 7] 1669 ld a, #0x02 - 000008ED 1670 00122$: - 000008ED 32r00r00 [13] 1671 ld (#_state_esp), a - 000008F0 1672 00102$: - 1673 ;src/main.c:399: if (state_esp != 1) - 000008F0 3Ar00r00 [13] 1674 ld a, (_state_esp) - 1675 ;src/main.c:401: error_esp(); - 1676 ;src/main.c:402: return; - 1677 ;src/main.c:405: total_samples = 0; - 000008F3 3D [ 4] 1678 dec a - 000008F4 C2r62r05 [10] 1679 jp nz,_error_esp - 000008F7 32r2Dr10 [13] 1680 ld (_total_samples+0), a - 000008FA 32r2Er10 [13] 1681 ld (_total_samples+1), a - 000008FD 32r2Fr10 [13] 1682 ld (_total_samples+2), a - 00000900 32r30r10 [13] 1683 ld (_total_samples+3), a - 1684 ;src/main.c:407: if (!play_xm()) - 00000903 CDr29r03 [17] 1685 call _play_xm - 00000906 B7 [ 4] 1686 or a, a - 00000907 20 0B [12] 1687 jr nz, 00109$ - 1688 ;src/main.c:409: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) - 00000909 3Ar09r10 [13] 1689 ld a, (_last_esp_status) - 0000090C D6 99 [ 7] 1690 sub a, #0x99 - 0000090E CAr75r05 [10] 1691 jp z, _error_oom - 1692 ;src/main.c:410: error_oom(); - 1693 ;src/main.c:412: error_playback(); - 1694 ;src/main.c:413: return; - 00000911 C3r8Br05 [10] 1695 jp _error_playback - 00000914 1696 00109$: - 1697 ;src/main.c:419: wc_prwow(&win_xm); - 00000914 21r68r02 [10] 1698 ld hl, #_win_xm - 00000917 CDr00r00 [17] 1699 call _wc_prwow - 1700 ;src/main.c:420: xm_draw_static_labels(); - 0000091A CDrC6r05 [17] 1701 call _xm_draw_static_labels - 1702 ;src/main.c:421: xm_draw_stats_labels(); - 0000091D CDr3Dr07 [17] 1703 call _xm_draw_stats_labels - 1704 ;src/main.c:422: xm_update_info(); // single call for now - periodic re-calling is a separate step, once this is confirmed stable - 00000920 CDrB6r07 [17] 1705 call _xm_update_info - 1706 ;src/main.c:427: while (1) - 00000923 1707 00117$: - 1708 ;src/main.c:431: __endasm; - 00000923 76 [ 4] 1709 halt - 1710 ;src/main.c:442: if (wc_key_pgdn()) // PgDn - unload and go to next file - 00000924 CDr00r00 [17] 1711 call _wc_key_pgdn - 00000927 B7 [ 4] 1712 or a, a - 00000928 28 27 [12] 1713 jr z, 00111$ - 1714 ;src/main.c:444: esp_cmd(ESP_CMD_TRACK_STOP); - 0000092A 3E A2 [ 7] 1715 ld a, #0xa2 - 0000092C CDr05r00 [17] 1716 call _esp_cmd - 1717 ;src/main.c:445: esp_wait_busy(10000); - 0000092F 11 10 27 [10] 1718 ld de, #0x2710 - 00000932 21 00 00 [10] 1719 ld hl, #0x0000 - 00000935 CDrD5r01 [17] 1720 call _esp_wait_busy - 1721 ;src/main.c:446: esp_cmd(ESP_CMD_KILL_OBJECTS); - 00000938 3E E4 [ 7] 1722 ld a, #0xe4 - 0000093A CDr05r00 [17] 1723 call _esp_cmd - 1724 ;src/main.c:447: esp_wait_busy(10000); - 0000093D 11 10 27 [10] 1725 ld de, #0x2710 - 00000940 21 00 00 [10] 1726 ld hl, #0x0000 - 00000943 CDrD5r01 [17] 1727 call _esp_wait_busy - 1728 ;src/main.c:448: wc_rresb(&win_xm); - 00000946 21r68r02 [10] 1729 ld hl, #_win_xm - 00000949 CDr00r00 [17] 1730 call _wc_rresb - 1731 ;src/main.c:449: wc_exit(WC_NEXT_FILE); - 0000094C 3E 02 [ 7] 1732 ld a, #0x02 - 0000094E CDr00r00 [17] 1733 call _wc_exit - 00000951 1734 00111$: - 1735 ;src/main.c:452: if (wc_key_pgup()) // PgUp - unload and go to previous file - 00000951 CDr00r00 [17] 1736 call _wc_key_pgup - 00000954 B7 [ 4] 1737 or a, a - 00000955 28 27 [12] 1738 jr z, 00113$ - 1739 ;src/main.c:454: esp_cmd(ESP_CMD_TRACK_STOP); - 00000957 3E A2 [ 7] 1740 ld a, #0xa2 - 00000959 CDr05r00 [17] 1741 call _esp_cmd - 1742 ;src/main.c:455: esp_wait_busy(10000); - 0000095C 11 10 27 [10] 1743 ld de, #0x2710 - 0000095F 21 00 00 [10] 1744 ld hl, #0x0000 - 00000962 CDrD5r01 [17] 1745 call _esp_wait_busy - 1746 ;src/main.c:456: esp_cmd(ESP_CMD_KILL_OBJECTS); - 00000965 3E E4 [ 7] 1747 ld a, #0xe4 - 00000967 CDr05r00 [17] 1748 call _esp_cmd - 1749 ;src/main.c:457: esp_wait_busy(10000); - 0000096A 11 10 27 [10] 1750 ld de, #0x2710 - 0000096D 21 00 00 [10] 1751 ld hl, #0x0000 - 00000970 CDrD5r01 [17] 1752 call _esp_wait_busy - 1753 ;src/main.c:458: wc_rresb(&win_xm); - 00000973 21r68r02 [10] 1754 ld hl, #_win_xm - 00000976 CDr00r00 [17] 1755 call _wc_rresb - 1756 ;src/main.c:459: wc_exit(WC_PREV_FILE); - 00000979 3E 04 [ 7] 1757 ld a, #0x04 - 0000097B CDr00r00 [17] 1758 call _wc_exit - 0000097E 1759 00113$: - 1760 ;src/main.c:462: if (wc_key_esc()) // Esc - unload and exit - 0000097E CDr00r00 [17] 1761 call _wc_key_esc - 00000981 B7 [ 4] 1762 or a, a - 00000982 28 9F [12] 1763 jr z, 00117$ - 1764 ;src/main.c:464: esp_cmd(ESP_CMD_TRACK_STOP); - 00000984 3E A2 [ 7] 1765 ld a, #0xa2 - 00000986 CDr05r00 [17] 1766 call _esp_cmd - 1767 ;src/main.c:465: esp_wait_busy(10000); - 00000989 11 10 27 [10] 1768 ld de, #0x2710 - 0000098C 21 00 00 [10] 1769 ld hl, #0x0000 - 0000098F CDrD5r01 [17] 1770 call _esp_wait_busy - 1771 ;src/main.c:466: esp_cmd(ESP_CMD_KILL_OBJECTS); - 00000992 3E E4 [ 7] 1772 ld a, #0xe4 - 00000994 CDr05r00 [17] 1773 call _esp_cmd - 1774 ;src/main.c:467: esp_wait_busy(10000); - 00000997 11 10 27 [10] 1775 ld de, #0x2710 - 0000099A 21 00 00 [10] 1776 ld hl, #0x0000 - 0000099D CDrD5r01 [17] 1777 call _esp_wait_busy - 1778 ;src/main.c:468: wc_rresb(&win_xm); - 000009A0 21r68r02 [10] 1779 ld hl, #_win_xm - 000009A3 CDr00r00 [17] 1780 call _wc_rresb - 1781 ;src/main.c:469: wc_exit(WC_EXIT); - 000009A6 AF [ 4] 1782 xor a, a - 000009A7 CDr00r00 [17] 1783 call _wc_exit - 1784 ;src/main.c:472: } - 000009AA C3r23r09 [10] 1785 jp 00117$ - 1786 ;src/main.c:475: void main() - 1787 ; --------------------------------- - 1788 ; Function main - 1789 ; --------------------------------- - 000009AD 1790 _main:: - 1791 ;src/main.c:485: __endasm; - 000009AD ED 73r01r10 [20] 1792 ld (_ret_sp), sp - 000009B1 32r08r10 [13] 1793 ld (_call_type), a - 000009B4 ED 43r0Ar10 [20] 1794 ld (_p_file_name), bc - 000009B8 08 [ 4] 1795 ex af, af - 000009B9 32r07r10 [13] 1796 ld (_file_ext), a - 000009BC 22r03r10 [16] 1797 ld (_filesize), hl - 000009BF ED 53r05r10 [20] 1798 ld (_filesize + 2), de - 1799 ;src/main.c:487: switch (call_type) - 000009C3 3Ar08r10 [13] 1800 ld a, (_call_type+0) - 000009C6 B7 [ 4] 1801 or a, a - 000009C7 CArDAr08 [10] 1802 jp z, _main_start - 000009CA 3Ar08r10 [13] 1803 ld a, (_call_type) - 000009CD D6 03 [ 7] 1804 sub a, #0x03 - 000009CF CAr4Fr05 [10] 1805 jp z, _about - 1806 ;src/main.c:489: case WC_CALL_EXT: - 1807 ;src/main.c:490: main_start(); - 1808 ;src/main.c:491: break; - 1809 ;src/main.c:493: case WC_CALL_MENU: - 1810 ;src/main.c:494: about(); - 1811 ;src/main.c:495: break; - 1812 ;src/main.c:497: default: - 1813 ;src/main.c:498: wc_exit(WC_EXIT); - 000009D2 AF [ 4] 1814 xor a, a - 1815 ;src/main.c:499: } - 1816 ;src/main.c:500: } - 000009D3 C3r00r00 [10] 1817 jp _wc_exit - 1818 .area _CODE - 1819 .area _INITIALIZER - 1820 .area _CABS (ABS) + 000007C3 00 1525 .db 0x00 + 000007C4 1526 ___str_12: + 000007C4 20 20 52 6F 77 3A 23 1527 .ascii " Row:#" + 000007CB 00 1528 .db 0x00 + 000007CC 1529 ___str_13: + 000007CC 20 20 42 50 4D 3A 1530 .ascii " BPM:" + 000007D2 00 1531 .db 0x00 + 000007D3 1532 ___str_14: + 000007D3 54 69 6D 65 3A 1533 .ascii "Time:" + 000007D8 00 1534 .db 0x00 + 000007D9 1535 ___str_15: + 000007D9 20 2F 20 1536 .ascii " / " + 000007DC 00 1537 .db 0x00 + 1538 ;src/main.c:386: void draw_progress_bar(u32 samples, u32 total) + 1539 ; --------------------------------- + 1540 ; Function draw_progress_bar + 1541 ; --------------------------------- + 000007DD 1542 _draw_progress_bar:: + 000007DD DD E5 [15] 1543 push ix + 000007DF DD 21 00 00 [14] 1544 ld ix, #0 + 000007E3 DD 39 [15] 1545 add ix, sp + 000007E5 4B [ 4] 1546 ld c, e + 000007E6 42 [ 4] 1547 ld b, d + 000007E7 EB [ 4] 1548 ex de, hl + 1549 ;src/main.c:390: if (total) + 000007E8 DD 7E 07 [19] 1550 ld a, 7 (ix) + 000007EB DD B6 06 [19] 1551 or a, 6 (ix) + 000007EE DD B6 05 [19] 1552 or a, 5 (ix) + 000007F1 DD B6 04 [19] 1553 or a, 4 (ix) + 000007F4 28 30 [12] 1554 jr z, 00104$ + 1555 ;src/main.c:392: filled = (u16)(((u32)samples * BAR_WIDTH) / total); + 000007F6 D5 [11] 1556 push de + 000007F7 C5 [11] 1557 push bc + 000007F8 11 22 00 [10] 1558 ld de, #0x0022 + 000007FB 21 00 00 [10] 1559 ld hl, #0x0000 + 000007FE CDr00r00 [17] 1560 call __mullong + 00000801 F1 [10] 1561 pop af + 00000802 F1 [10] 1562 pop af + 00000803 DD 4E 06 [19] 1563 ld c, 6 (ix) + 00000806 DD 46 07 [19] 1564 ld b, 7 (ix) + 00000809 C5 [11] 1565 push bc + 0000080A DD 4E 04 [19] 1566 ld c, 4 (ix) + 0000080D DD 46 05 [19] 1567 ld b, 5 (ix) + 00000810 C5 [11] 1568 push bc + 00000811 CDr00r00 [17] 1569 call __divulong + 00000814 F1 [10] 1570 pop af + 00000815 F1 [10] 1571 pop af + 1572 ;src/main.c:393: if (filled > BAR_WIDTH) + 00000816 4B [ 4] 1573 ld c,e + 00000817 42 [ 4] 1574 ld b,d + 00000818 3E 22 [ 7] 1575 ld a, #0x22 + 0000081A BB [ 4] 1576 cp a, e + 0000081B 3E 00 [ 7] 1577 ld a, #0x00 + 0000081D 9A [ 4] 1578 sbc a, d + 0000081E 30 09 [12] 1579 jr nc, 00121$ + 1580 ;src/main.c:394: filled = BAR_WIDTH; + 00000820 01 22 00 [10] 1581 ld bc, #0x0022 + 00000823 C3r29r08 [10] 1582 jp 00121$ + 00000826 1583 00104$: + 1584 ;src/main.c:397: filled = 0; // total length unknown (measurement timed out) - show empty + 00000826 01 00 00 [10] 1585 ld bc, #0x0000 + 1586 ;src/main.c:399: for (i = 0; i < BAR_WIDTH; i++) + 00000829 1587 00121$: + 00000829 11 00 00 [10] 1588 ld de, #0x0000 + 0000082C 1589 00107$: + 1590 ;src/main.c:400: barbuf[i] = (i < filled) ? BAR_FILLED_CH : BAR_EMPTY_CH; + 0000082C 21r3Cr10 [10] 1591 ld hl, #_barbuf + 0000082F 19 [11] 1592 add hl, de + 00000830 7B [ 4] 1593 ld a, e + 00000831 91 [ 4] 1594 sub a, c + 00000832 7A [ 4] 1595 ld a, d + 00000833 98 [ 4] 1596 sbc a, b + 00000834 30 05 [12] 1597 jr nc, 00111$ + 00000836 3E 3D [ 7] 1598 ld a, #0x3d + 00000838 C3r3Dr08 [10] 1599 jp 00112$ + 0000083B 1600 00111$: + 0000083B 3E 2D [ 7] 1601 ld a, #0x2d + 0000083D 1602 00112$: + 0000083D 77 [ 7] 1603 ld (hl), a + 1604 ;src/main.c:399: for (i = 0; i < BAR_WIDTH; i++) + 0000083E 13 [ 6] 1605 inc de + 0000083F 6B [ 4] 1606 ld l, e + 00000840 62 [ 4] 1607 ld h, d + 00000841 7D [ 4] 1608 ld a, l + 00000842 D6 22 [ 7] 1609 sub a, #0x22 + 00000844 7C [ 4] 1610 ld a, h + 00000845 DE 00 [ 7] 1611 sbc a, #0x00 + 00000847 38 E3 [12] 1612 jr c, 00107$ + 1613 ;src/main.c:402: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); + 00000849 21 22 00 [10] 1614 ld hl, #0x0022 + 0000084C E5 [11] 1615 push hl + 0000084D 21 06 01 [10] 1616 ld hl, #0x106 + 00000850 E5 [11] 1617 push hl + 00000851 11r3Cr10 [10] 1618 ld de, #_barbuf + 00000854 21r71r02 [10] 1619 ld hl, #_win_xm + 00000857 CDr00r00 [17] 1620 call _wc_prsrw + 1621 ;src/main.c:403: } + 0000085A DD E1 [14] 1622 pop ix + 0000085C E1 [10] 1623 pop hl + 0000085D F1 [10] 1624 pop af + 0000085E F1 [10] 1625 pop af + 0000085F E9 [ 4] 1626 jp (hl) + 1627 ;src/main.c:405: void xm_update_info() + 1628 ; --------------------------------- + 1629 ; Function xm_update_info + 1630 ; --------------------------------- + 00000860 1631 _xm_update_info:: + 00000860 DD E5 [15] 1632 push ix + 00000862 DD 21 00 00 [14] 1633 ld ix, #0 + 00000866 DD 39 [15] 1634 add ix, sp + 00000868 21 F8 FF [10] 1635 ld hl, #-8 + 0000086B 39 [11] 1636 add hl, sp + 0000086C F9 [ 6] 1637 ld sp, hl + 1638 ;src/main.c:411: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); + 0000086D 3Ar30r10 [13] 1639 ld a, (_xm_handle) + 00000870 6F [ 4] 1640 ld l, a + 00000871 3E 0B [ 7] 1641 ld a, #0x0b + 00000873 CDrDAr00 [17] 1642 call _esp_wr_reg8 + 1643 ;src/main.c:412: esp_cmd(ESP_CMD_TRACK_GET_INFO); + 00000876 3E A8 [ 7] 1644 ld a, #0xa8 + 00000878 CDr0Er00 [17] 1645 call _esp_cmd + 1646 ;src/main.c:413: esp_wait_busy(2000); + 0000087B 11 D0 07 [10] 1647 ld de, #0x07d0 + 0000087E 21 00 00 [10] 1648 ld hl, #0x0000 + 00000881 CDrDEr01 [17] 1649 call _esp_wait_busy + 1650 ;src/main.c:418: status = esp_rd_reg8(ESP_REG_TRACK_STATUS); + 00000884 3E 28 [ 7] 1651 ld a, #0x28 + 00000886 CDr27r00 [17] 1652 call _esp_rd_reg8 + 00000889 DD 77 FF [19] 1653 ld -1 (ix), a + 1654 ;src/main.c:419: if (last_track_status == TRACK_OBJ_ST_PLAYING && status == TRACK_OBJ_ST_STOPPED) + 0000088C 3Ar31r10 [13] 1655 ld a, (_last_track_status) + 0000088F D6 21 [ 7] 1656 sub a, #0x21 + 00000891 20 20 [12] 1657 jr nz, 00102$ + 00000893 DD 7E FF [19] 1658 ld a, -1 (ix) + 00000896 D6 20 [ 7] 1659 sub a, #0x20 + 00000898 20 19 [12] 1660 jr nz, 00102$ + 1661 ;src/main.c:421: esp_cmd(ESP_CMD_KILL_OBJECTS); + 0000089A 3E E4 [ 7] 1662 ld a, #0xe4 + 0000089C CDr0Er00 [17] 1663 call _esp_cmd + 1664 ;src/main.c:422: esp_wait_busy(10000); + 0000089F 11 10 27 [10] 1665 ld de, #0x2710 + 000008A2 21 00 00 [10] 1666 ld hl, #0x0000 + 000008A5 CDrDEr01 [17] 1667 call _esp_wait_busy + 1668 ;src/main.c:423: wc_rresb(&win_xm); + 000008A8 21r71r02 [10] 1669 ld hl, #_win_xm + 000008AB CDr00r00 [17] 1670 call _wc_rresb + 1671 ;src/main.c:424: wc_exit(WC_NEXT_FILE); + 000008AE 3E 02 [ 7] 1672 ld a, #0x02 + 000008B0 CDr00r00 [17] 1673 call _wc_exit + 000008B3 1674 00102$: + 1675 ;src/main.c:426: last_track_status = status; + 000008B3 DD 7E FF [19] 1676 ld a, -1 (ix) + 000008B6 32r31r10 [13] 1677 ld (#_last_track_status), a + 1678 ;src/main.c:428: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); + 000008B9 3E 2B [ 7] 1679 ld a, #0x2b + 000008BB CDr27r00 [17] 1680 call _esp_rd_reg8 + 000008BE DD 77 FA [19] 1681 ld -6 (ix), a + 1682 ;src/main.c:429: row = esp_rd_reg8(ESP_REG_TRACK_ROW); + 000008C1 3E 2C [ 7] 1683 ld a, #0x2c + 000008C3 CDr27r00 [17] 1684 call _esp_rd_reg8 + 000008C6 DD 77 FB [19] 1685 ld -5 (ix), a + 1686 ;src/main.c:430: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); + 000008C9 3E 02 [ 7] 1687 ld a, #0x02 + 000008CB F5 [11] 1688 push af + 000008CC 33 [ 6] 1689 inc sp + 000008CD 21 01 00 [10] 1690 ld hl, #1 + 000008D0 39 [11] 1691 add hl, sp + 000008D1 EB [ 4] 1692 ex de, hl + 000008D2 3E 31 [ 7] 1693 ld a, #0x31 + 000008D4 CDrAEr00 [17] 1694 call _esp_rd_regs + 1695 ;src/main.c:431: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES); + 000008D7 3E 2D [ 7] 1696 ld a, #0x2d + 000008D9 CDr40r00 [17] 1697 call _esp_rd_reg32 + 000008DC DD 73 FC [19] 1698 ld -4 (ix), e + 000008DF DD 72 FD [19] 1699 ld -3 (ix), d + 000008E2 DD 75 FE [19] 1700 ld -2 (ix), l + 000008E5 DD 74 FF [19] 1701 ld -1 (ix), h + 1702 ;src/main.c:433: if (!total_samples) + 000008E8 3Ar2Fr10 [13] 1703 ld a, (_total_samples+3) + 000008EB FD 21r2Cr10 [14] 1704 ld iy, #_total_samples + 000008EF FD B6 02 [19] 1705 or a, 2 (iy) + 000008F2 FD B6 01 [19] 1706 or a, 1 (iy) + 000008F5 FD B6 00 [19] 1707 or a, 0 (iy) + 000008F8 20 0C [12] 1708 jr nz, 00105$ + 1709 ;src/main.c:434: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES); + 000008FA 3E 36 [ 7] 1710 ld a, #0x36 + 000008FC CDr40r00 [17] 1711 call _esp_rd_reg32 + 000008FF ED 53r2Cr10 [20] 1712 ld (_total_samples), de + 00000903 22r2Er10 [16] 1713 ld (_total_samples + 2), hl + 00000906 1714 00105$: + 1715 ;src/main.c:436: put_hex2(hexbuf, pattern); + 00000906 DD 7E FA [19] 1716 ld a, -6 (ix) + 00000909 F5 [11] 1717 push af + 0000090A 33 [ 6] 1718 inc sp + 0000090B 21r32r10 [10] 1719 ld hl, #_hexbuf + 0000090E CDr1Dr06 [17] 1720 call _put_hex2 + 1721 ;src/main.c:437: wc_prsrw(&win_xm, hexbuf, ROW_STATS, 10, 2); + 00000911 21 02 00 [10] 1722 ld hl, #0x0002 + 00000914 E5 [11] 1723 push hl + 00000915 21 03 0A [10] 1724 ld hl, #0xa03 + 00000918 E5 [11] 1725 push hl + 00000919 11r32r10 [10] 1726 ld de, #_hexbuf + 0000091C 21r71r02 [10] 1727 ld hl, #_win_xm + 0000091F CDr00r00 [17] 1728 call _wc_prsrw + 1729 ;src/main.c:439: put_hex2(hexbuf, row); + 00000922 DD 7E FB [19] 1730 ld a, -5 (ix) + 00000925 F5 [11] 1731 push af + 00000926 33 [ 6] 1732 inc sp + 00000927 21r32r10 [10] 1733 ld hl, #_hexbuf + 0000092A CDr1Dr06 [17] 1734 call _put_hex2 + 1735 ;src/main.c:440: wc_prsrw(&win_xm, hexbuf, ROW_STATS, 19, 2); + 0000092D 21 02 00 [10] 1736 ld hl, #0x0002 + 00000930 E5 [11] 1737 push hl + 00000931 21 03 13 [10] 1738 ld hl, #0x1303 + 00000934 E5 [11] 1739 push hl + 00000935 11r32r10 [10] 1740 ld de, #_hexbuf + 00000938 21r71r02 [10] 1741 ld hl, #_win_xm + 0000093B CDr00r00 [17] 1742 call _wc_prsrw + 1743 ;src/main.c:442: put_dec3(decbuf, bpm); + 0000093E D1 [10] 1744 pop de + 0000093F D5 [11] 1745 push de + 00000940 21r34r10 [10] 1746 ld hl, #_decbuf + 00000943 CDr5Ar06 [17] 1747 call _put_dec3 + 1748 ;src/main.c:443: wc_prsrw(&win_xm, decbuf, ROW_STATS, 27, 3); + 00000946 21 03 00 [10] 1749 ld hl, #0x0003 + 00000949 E5 [11] 1750 push hl + 0000094A 21 03 1B [10] 1751 ld hl, #0x1b03 + 0000094D E5 [11] 1752 push hl + 0000094E 11r34r10 [10] 1753 ld de, #_decbuf + 00000951 21r71r02 [10] 1754 ld hl, #_win_xm + 00000954 CDr00r00 [17] 1755 call _wc_prsrw + 1756 ;src/main.c:445: put_time(timebuf, samples / 44100UL); + 00000957 21 00 00 [10] 1757 ld hl, #0x0000 + 0000095A E5 [11] 1758 push hl + 0000095B 21 44 AC [10] 1759 ld hl, #0xac44 + 0000095E E5 [11] 1760 push hl + 0000095F DD 5E FC [19] 1761 ld e, -4 (ix) + 00000962 DD 56 FD [19] 1762 ld d, -3 (ix) + 00000965 DD 6E FE [19] 1763 ld l, -2 (ix) + 00000968 DD 66 FF [19] 1764 ld h, -1 (ix) + 0000096B CDr00r00 [17] 1765 call __divulong + 0000096E F1 [10] 1766 pop af + 0000096F E3 [19] 1767 ex (sp),hl + 00000970 D5 [11] 1768 push de + 00000971 21r37r10 [10] 1769 ld hl, #_timebuf + 00000974 CDrB7r06 [17] 1770 call _put_time + 1771 ;src/main.c:446: wc_prsrw(&win_xm, timebuf, ROW_TIME, 7, 5); + 00000977 21 05 00 [10] 1772 ld hl, #0x0005 + 0000097A E5 [11] 1773 push hl + 0000097B 21 05 07 [10] 1774 ld hl, #0x705 + 0000097E E5 [11] 1775 push hl + 0000097F 11r37r10 [10] 1776 ld de, #_timebuf + 00000982 21r71r02 [10] 1777 ld hl, #_win_xm + 00000985 CDr00r00 [17] 1778 call _wc_prsrw + 1779 ;src/main.c:448: put_time(timebuf, total_samples / 44100UL); + 00000988 21 00 00 [10] 1780 ld hl, #0x0000 + 0000098B E5 [11] 1781 push hl + 0000098C 21 44 AC [10] 1782 ld hl, #0xac44 + 0000098F E5 [11] 1783 push hl + 00000990 ED 5Br2Cr10 [20] 1784 ld de, (_total_samples) + 00000994 2Ar2Er10 [16] 1785 ld hl, (_total_samples + 2) + 00000997 CDr00r00 [17] 1786 call __divulong + 0000099A F1 [10] 1787 pop af + 0000099B E3 [19] 1788 ex (sp),hl + 0000099C D5 [11] 1789 push de + 0000099D 21r37r10 [10] 1790 ld hl, #_timebuf + 000009A0 CDrB7r06 [17] 1791 call _put_time + 1792 ;src/main.c:449: wc_prsrw(&win_xm, timebuf, ROW_TIME, 15, 5); + 000009A3 21 05 00 [10] 1793 ld hl, #0x0005 + 000009A6 E5 [11] 1794 push hl + 000009A7 21 05 0F [10] 1795 ld hl, #0xf05 + 000009AA E5 [11] 1796 push hl + 000009AB 11r37r10 [10] 1797 ld de, #_timebuf + 000009AE 21r71r02 [10] 1798 ld hl, #_win_xm + 000009B1 CDr00r00 [17] 1799 call _wc_prsrw + 1800 ;src/main.c:451: draw_progress_bar(samples, total_samples); + 000009B4 2Ar2Er10 [16] 1801 ld hl, (_total_samples + 2) + 000009B7 E5 [11] 1802 push hl + 000009B8 2Ar2Cr10 [16] 1803 ld hl, (_total_samples) + 000009BB E5 [11] 1804 push hl + 000009BC DD 5E FC [19] 1805 ld e, -4 (ix) + 000009BF DD 56 FD [19] 1806 ld d, -3 (ix) + 000009C2 DD 6E FE [19] 1807 ld l, -2 (ix) + 000009C5 DD 66 FF [19] 1808 ld h, -1 (ix) + 000009C8 CDrDDr07 [17] 1809 call _draw_progress_bar + 1810 ;src/main.c:453: } + 000009CB DD F9 [10] 1811 ld sp, ix + 000009CD DD E1 [14] 1812 pop ix + 000009CF C9 [10] 1813 ret + 1814 ;src/main.c:455: void main_start() + 1815 ; --------------------------------- + 1816 ; Function main_start + 1817 ; --------------------------------- + 000009D0 1818 _main_start:: + 000009D0 3B [ 6] 1819 dec sp + 1820 ;src/main.c:463: wc_set_freq_14mhz(); + 000009D1 CDr05r00 [17] 1821 call _wc_set_freq_14mhz + 1822 ;src/main.c:465: copy_file_name(); + 000009D4 CDrC8r05 [17] 1823 call _copy_file_name + 1824 ;src/main.c:467: if (state_esp == 0xFF) + 000009D7 3Ar00r00 [13] 1825 ld a, (_state_esp) + 000009DA 3C [ 4] 1826 inc a + 000009DB 20 0D [12] 1827 jr nz, 00102$ + 1828 ;src/main.c:468: state_esp = esp_init() ? 1 : 2; + 000009DD CDr2Er02 [17] 1829 call _esp_init + 000009E0 B7 [ 4] 1830 or a, a + 000009E1 3E 01 [ 7] 1831 ld a, #0x01 + 000009E3 20 02 [12] 1832 jr nz, 00124$ + 000009E5 3E 02 [ 7] 1833 ld a, #0x02 + 000009E7 1834 00124$: + 000009E7 32r00r00 [13] 1835 ld (#_state_esp), a + 000009EA 1836 00102$: + 1837 ;src/main.c:470: if (state_esp != 1) + 000009EA 3Ar00r00 [13] 1838 ld a, (_state_esp) + 000009ED 3D [ 4] 1839 dec a + 000009EE 28 07 [12] 1840 jr z, 00104$ + 1841 ;src/main.c:472: error_esp(); + 000009F0 33 [ 6] 1842 inc sp + 000009F1 C3r89r05 [10] 1843 jp _error_esp + 1844 ;src/main.c:473: return; + 000009F4 C3rDBr0A [10] 1845 jp 00121$ + 000009F7 1846 00104$: + 1847 ;src/main.c:476: total_samples = 0; + 000009F7 AF [ 4] 1848 xor a, a + 000009F8 32r2Cr10 [13] 1849 ld (_total_samples+0), a + 000009FB 32r2Dr10 [13] 1850 ld (_total_samples+1), a + 000009FE 32r2Er10 [13] 1851 ld (_total_samples+2), a + 00000A01 32r2Fr10 [13] 1852 ld (_total_samples+3), a + 1853 ;src/main.c:478: if (!play_xm()) + 00000A04 CDr32r03 [17] 1854 call _play_xm + 00000A07 B7 [ 4] 1855 or a, a + 00000A08 20 12 [12] 1856 jr nz, 00109$ + 1857 ;src/main.c:480: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) + 00000A0A 3Ar08r10 [13] 1858 ld a, (_last_esp_status) + 00000A0D D6 99 [ 7] 1859 sub a, #0x99 + 00000A0F 20 07 [12] 1860 jr nz, 00106$ + 1861 ;src/main.c:481: error_oom(); + 00000A11 33 [ 6] 1862 inc sp + 00000A12 C3r9Cr05 [10] 1863 jp _error_oom + 00000A15 C3rDBr0A [10] 1864 jp 00121$ + 00000A18 1865 00106$: + 1866 ;src/main.c:483: error_playback(); + 00000A18 33 [ 6] 1867 inc sp + 1868 ;src/main.c:484: return; + 00000A19 C3rB2r05 [10] 1869 jp _error_playback + 00000A1C 1870 00109$: + 1871 ;src/main.c:490: wc_prwow(&win_xm); + 00000A1C 21r71r02 [10] 1872 ld hl, #_win_xm + 00000A1F CDr00r00 [17] 1873 call _wc_prwow + 1874 ;src/main.c:491: xm_draw_static_labels(); + 00000A22 CDrEDr05 [17] 1875 call _xm_draw_static_labels + 1876 ;src/main.c:492: xm_draw_stats_labels(); + 00000A25 CDr64r07 [17] 1877 call _xm_draw_stats_labels + 1878 ;src/main.c:493: last_track_status = TRACK_OBJ_ST_PLAYING; + 00000A28 21r31r10 [10] 1879 ld hl, #_last_track_status + 00000A2B 36 21 [10] 1880 ld (hl), #0x21 + 1881 ;src/main.c:494: xm_update_info(); + 00000A2D CDr60r08 [17] 1882 call _xm_update_info + 1883 ;src/main.c:496: frame_ctr = 0; + 00000A30 FD 21 00 00 [14] 1884 ld iy, #0 + 00000A34 FD 39 [15] 1885 add iy, sp + 00000A36 FD 36 00 00 [19] 1886 ld 0 (iy), #0x00 + 1887 ;src/main.c:499: while (1) + 00000A3A 1888 00119$: + 1889 ;src/main.c:503: __endasm; + 00000A3A 76 [ 4] 1890 halt + 1891 ;src/main.c:505: if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz + 00000A3B FD 21 00 00 [14] 1892 ld iy, #0 + 00000A3F FD 39 [15] 1893 add iy, sp + 00000A41 FD 34 00 [23] 1894 inc 0 (iy) + 00000A44 FD 7E 00 [19] 1895 ld a, 0 (iy) + 00000A47 D6 0A [ 7] 1896 sub a, #0x0a + 00000A49 38 07 [12] 1897 jr c, 00111$ + 1898 ;src/main.c:507: frame_ctr = 0; + 00000A4B FD 36 00 00 [19] 1899 ld 0 (iy), #0x00 + 1900 ;src/main.c:508: xm_update_info(); + 00000A4F CDr60r08 [17] 1901 call _xm_update_info + 00000A52 1902 00111$: + 1903 ;src/main.c:511: if (wc_key_pgdn()) // PgDn - unload and go to next file + 00000A52 CDr00r00 [17] 1904 call _wc_key_pgdn + 00000A55 B7 [ 4] 1905 or a, a + 00000A56 28 27 [12] 1906 jr z, 00113$ + 1907 ;src/main.c:513: esp_cmd(ESP_CMD_TRACK_STOP); + 00000A58 3E A2 [ 7] 1908 ld a, #0xa2 + 00000A5A CDr0Er00 [17] 1909 call _esp_cmd + 1910 ;src/main.c:514: esp_wait_busy(10000); + 00000A5D 11 10 27 [10] 1911 ld de, #0x2710 + 00000A60 21 00 00 [10] 1912 ld hl, #0x0000 + 00000A63 CDrDEr01 [17] 1913 call _esp_wait_busy + 1914 ;src/main.c:515: esp_cmd(ESP_CMD_KILL_OBJECTS); + 00000A66 3E E4 [ 7] 1915 ld a, #0xe4 + 00000A68 CDr0Er00 [17] 1916 call _esp_cmd + 1917 ;src/main.c:516: esp_wait_busy(10000); + 00000A6B 11 10 27 [10] 1918 ld de, #0x2710 + 00000A6E 21 00 00 [10] 1919 ld hl, #0x0000 + 00000A71 CDrDEr01 [17] 1920 call _esp_wait_busy + 1921 ;src/main.c:517: wc_rresb(&win_xm); + 00000A74 21r71r02 [10] 1922 ld hl, #_win_xm + 00000A77 CDr00r00 [17] 1923 call _wc_rresb + 1924 ;src/main.c:518: wc_exit(WC_NEXT_FILE); + 00000A7A 3E 02 [ 7] 1925 ld a, #0x02 + 00000A7C CDr00r00 [17] 1926 call _wc_exit + 00000A7F 1927 00113$: + 1928 ;src/main.c:521: if (wc_key_pgup()) // PgUp - unload and go to previous file + 00000A7F CDr00r00 [17] 1929 call _wc_key_pgup + 00000A82 B7 [ 4] 1930 or a, a + 00000A83 28 27 [12] 1931 jr z, 00115$ + 1932 ;src/main.c:523: esp_cmd(ESP_CMD_TRACK_STOP); + 00000A85 3E A2 [ 7] 1933 ld a, #0xa2 + 00000A87 CDr0Er00 [17] 1934 call _esp_cmd + 1935 ;src/main.c:524: esp_wait_busy(10000); + 00000A8A 11 10 27 [10] 1936 ld de, #0x2710 + 00000A8D 21 00 00 [10] 1937 ld hl, #0x0000 + 00000A90 CDrDEr01 [17] 1938 call _esp_wait_busy + 1939 ;src/main.c:525: esp_cmd(ESP_CMD_KILL_OBJECTS); + 00000A93 3E E4 [ 7] 1940 ld a, #0xe4 + 00000A95 CDr0Er00 [17] 1941 call _esp_cmd + 1942 ;src/main.c:526: esp_wait_busy(10000); + 00000A98 11 10 27 [10] 1943 ld de, #0x2710 + 00000A9B 21 00 00 [10] 1944 ld hl, #0x0000 + 00000A9E CDrDEr01 [17] 1945 call _esp_wait_busy + 1946 ;src/main.c:527: wc_rresb(&win_xm); + 00000AA1 21r71r02 [10] 1947 ld hl, #_win_xm + 00000AA4 CDr00r00 [17] 1948 call _wc_rresb + 1949 ;src/main.c:528: wc_exit(WC_PREV_FILE); + 00000AA7 3E 04 [ 7] 1950 ld a, #0x04 + 00000AA9 CDr00r00 [17] 1951 call _wc_exit + 00000AAC 1952 00115$: + 1953 ;src/main.c:531: if (wc_key_esc()) // Esc - unload and exit + 00000AAC CDr00r00 [17] 1954 call _wc_key_esc + 00000AAF B7 [ 4] 1955 or a, a + 00000AB0 28 88 [12] 1956 jr z, 00119$ + 1957 ;src/main.c:533: esp_cmd(ESP_CMD_TRACK_STOP); + 00000AB2 3E A2 [ 7] 1958 ld a, #0xa2 + 00000AB4 CDr0Er00 [17] 1959 call _esp_cmd + 1960 ;src/main.c:534: esp_wait_busy(10000); + 00000AB7 11 10 27 [10] 1961 ld de, #0x2710 + 00000ABA 21 00 00 [10] 1962 ld hl, #0x0000 + 00000ABD CDrDEr01 [17] 1963 call _esp_wait_busy + 1964 ;src/main.c:535: esp_cmd(ESP_CMD_KILL_OBJECTS); + 00000AC0 3E E4 [ 7] 1965 ld a, #0xe4 + 00000AC2 CDr0Er00 [17] 1966 call _esp_cmd + 1967 ;src/main.c:536: esp_wait_busy(10000); + 00000AC5 11 10 27 [10] 1968 ld de, #0x2710 + 00000AC8 21 00 00 [10] 1969 ld hl, #0x0000 + 00000ACB CDrDEr01 [17] 1970 call _esp_wait_busy + 1971 ;src/main.c:537: wc_rresb(&win_xm); + 00000ACE 21r71r02 [10] 1972 ld hl, #_win_xm + 00000AD1 CDr00r00 [17] 1973 call _wc_rresb + 1974 ;src/main.c:538: wc_exit(WC_EXIT); + 00000AD4 AF [ 4] 1975 xor a, a + 00000AD5 CDr00r00 [17] 1976 call _wc_exit + 00000AD8 C3r3Ar0A [10] 1977 jp 00119$ + 00000ADB 1978 00121$: + 1979 ;src/main.c:541: } + 00000ADB 33 [ 6] 1980 inc sp + 00000ADC C9 [10] 1981 ret + 1982 ;src/main.c:544: void main() + 1983 ; --------------------------------- + 1984 ; Function main + 1985 ; --------------------------------- + 00000ADD 1986 _main:: + 1987 ;src/main.c:554: __endasm; + 00000ADD ED 73r00r10 [20] 1988 ld (_ret_sp), sp + 00000AE1 32r07r10 [13] 1989 ld (_call_type), a + 00000AE4 ED 43r09r10 [20] 1990 ld (_p_file_name), bc + 00000AE8 08 [ 4] 1991 ex af, af + 00000AE9 32r06r10 [13] 1992 ld (_file_ext), a + 00000AEC 22r02r10 [16] 1993 ld (_filesize), hl + 00000AEF ED 53r04r10 [20] 1994 ld (_filesize + 2), de + 1995 ;src/main.c:556: switch (call_type) + 00000AF3 3Ar07r10 [13] 1996 ld a, (_call_type+0) + 00000AF6 B7 [ 4] 1997 or a, a + 00000AF7 CArD0r09 [10] 1998 jp z, _main_start + 00000AFA 3Ar07r10 [13] 1999 ld a, (_call_type) + 00000AFD D6 03 [ 7] 2000 sub a, #0x03 + 00000AFF CAr76r05 [10] 2001 jp z, _about + 2002 ;src/main.c:558: case WC_CALL_EXT: + 2003 ;src/main.c:559: main_start(); + 2004 ;src/main.c:560: break; + 2005 ;src/main.c:562: case WC_CALL_MENU: + 2006 ;src/main.c:563: about(); + 2007 ;src/main.c:564: break; + 2008 ;src/main.c:566: default: + 2009 ;src/main.c:567: wc_exit(WC_EXIT); + 00000B02 AF [ 4] 2010 xor a, a + 2011 ;src/main.c:568: } + 2012 ;src/main.c:569: } + 00000B03 C3r00r00 [10] 2013 jp _wc_exit + 2014 .area _CODE + 2015 .area _INITIALIZER + 00000000 2016 __xinit__state_esp: + 00000000 FF 2017 .db #0xff ; 255 + 2018 .area _CABS (ABS) diff --git a/obj/out.map b/obj/out.map index df03d97..2dd9944 100644 --- a/obj/out.map +++ b/obj/out.map @@ -7,7 +7,7 @@ Area Addr Size Decimal Bytes (A Value Global Global Defined In Module ----- -------------------------------- ------------------------ - 00000000 .__.ABS. wc_key_pgup + 00000000 .__.ABS. mul 00000000 l__BSEG 00000000 l__BSS 00000000 l__CABS @@ -16,130 +16,162 @@ Area Addr Size Decimal Bytes (A 00000000 l__GSINIT 00000000 l__HEADER 00000000 l__HEAP - 00000000 l__INITIALIZED - 00000000 l__INITIALIZER 00000000 s__CABS 00000000 s__DABS 00000000 s__HEADER 00000000 s__HEADER0 + 00000001 l__INITIALIZED + 00000001 l__INITIALIZER 00000003 l__HEADER0 - 0000010A l__HOME - 00000AEC l__CODE - 0000103C l__DATA + 000001ED l__HOME + 00000C33 l__CODE + 0000105E l__DATA 00008003 s__CODE 0000A800 s__DATA - 0000B83C s__HOME - 0000B83C s__INITIALIZED - 0000B946 s__BSEG - 0000B946 s__BSS - 0000B946 s__GSFINAL - 0000B946 s__GSINIT - 0000B946 s__HEAP - 0000B946 s__INITIALIZER + 0000B85E s__INITIALIZED + 0000B85F s__HOME + 0000BA4C s__GSFINAL + 0000BA4C s__GSINIT + 0000BA4C s__INITIALIZER + 0000BA4D s__BSEG + 0000BA4D s__BSS + 0000BA4D s__HEAP ASxxxx Linker V05.50.4-SDLD, page 2. Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ -_CODE 00008003 00000AEC = 2796. bytes (REL,CON) +_CODE 00008003 00000C33 = 3123. bytes (REL,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ 00008003 _wc_exit main - 00008008 _esp_cmd main - 00008021 _esp_rd_reg8 main - 0000803A _esp_rd_reg32 main - 000080A8 _esp_rd_regs main - 000080D4 _esp_wr_reg8 main - 000080EB _esp_wr_reg32 main - 0000811B _esp_wr_end main - 0000812A _esp_send_dma main - 0000818E _esp_rd_end main - 0000819D _esp_wait_status main - 000081D8 _esp_wait_busy main - 000081FA _esp_create_obj main - 00008228 _esp_init main - 00008235 _err_no_esp main - 00008247 _err_out_of_mem main - 00008259 _err_playback main - 0000826B _win_xm main - 0000827D _win_about main - 0000832C _play_xm main - 00008541 _wait_esc_key main - 00008549 _wait_frames main - 00008552 _about main - 00008565 _error_esp main - 00008578 _error_oom main - 0000858E _error_playback main - 000085A4 _copy_file_name main - 000085C9 _xm_draw_static_labels main - 000085F9 _put_hex2 main - 00008636 _put_dec3 main - 00008693 _put_time main - 00008740 _xm_draw_stats_labels main - 000087B9 _xm_update_info main - 000088DD _main_start main - 000089B0 _main main - 000089D9 __divuchar divunsigned - 000089DB __divu8 divunsigned - 000089DE __divu16 divunsigned - 000089DE __divuint divunsigned - 00008A0D _wc_load512 wc_load512 - 00008A22 __moduchar modunsigned - 00008A29 __moduint modunsigned - 00008A2E _wc_prsrw wc_prsrw - 00008A64 _wc_prwow wc_prwow - 00008A71 _wc_key_pgdn wc_key_pgdn - 00008A7B _wc_prsrw_attr wc_prsrw_attr - 00008AC2 _wc_rresb wc_rresb - 00008ACF _strlen strlen - 00008ADB _wc_key_esc wc_key_esc - 00008AE5 _wc_key_pgup wc_key_pgup - + 00008008 _wc_set_freq_14mhz main + 00008011 _esp_cmd main + 0000802A _esp_rd_reg8 main + 00008043 _esp_rd_reg32 main + 000080B1 _esp_rd_regs main + 000080DD _esp_wr_reg8 main + 000080F4 _esp_wr_reg32 main + 00008124 _esp_wr_end main + 00008133 _esp_send_dma main + 00008197 _esp_rd_end main + 000081A6 _esp_wait_status main + 000081E1 _esp_wait_busy main + 00008203 _esp_create_obj main + 00008231 _esp_init main + 0000823E _err_no_esp main + 00008250 _err_out_of_mem main + 00008262 _err_playback main + 00008274 _win_xm main + 00008286 _win_about main + 00008335 _play_xm main + 00008568 _wait_esc_key main + 00008570 _wait_frames main + 00008579 _about main + 0000858C _error_esp main + 0000859F _error_oom main + 000085B5 _error_playback main + 000085CB _copy_file_name main + 000085F0 _xm_draw_static_labels main + 00008620 _put_hex2 main + 0000865D _put_dec3 main + 000086BA _put_time main + 00008767 _xm_draw_stats_labels main + 000087E0 _draw_progress_bar main + 00008863 _xm_update_info main + 000089D3 _main_start main + 00008AE0 _main main + 00008B09 __divuchar divunsigned + 00008B0B __divu8 divunsigned + 00008B0E __divu16 divunsigned + 00008B0E __divuint divunsigned + 00008B3D _wc_load512 wc_load512 + 00008B52 __moduchar modunsigned + 00008B59 __moduint modunsigned + 00008B5E _wc_prsrw wc_prsrw + 00008B94 _wc_prwow wc_prwow + 00008BA1 _wc_key_pgdn wc_key_pgdn + 00008BAB _wc_prsrw_attr wc_prsrw_attr + 00008BF2 _wc_rresb wc_rresb + 00008BFF _strlen strlen ASxxxx Linker V05.50.4-SDLD, page 3. Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ -_DATA 0000A800 0000103C = 4156. bytes (REL,CON) +_CODE 00008003 00000C33 = 3123. bytes (REL,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ - 0000A800 _state_esp main - 0000A801 _fs_buf main - 0000B801 _ret_sp main - 0000B803 _filesize main - 0000B807 _file_ext main - 0000B808 _call_type main - 0000B809 _last_esp_status main - 0000B80A _p_file_name main - 0000B80C _file_name main - 0000B82D _total_samples main - 0000B831 _xm_handle main - + 00008C0B _wc_key_esc wc_key_esc + 00008C15 _wc_key_pgup wc_key_pgup + 00008C1F __mulint mul + 00008C21 __mul16 mul ASxxxx Linker V05.50.4-SDLD, page 4. Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ -_HOME 0000B83C 0000010A = 266. bytes (REL,CON) +_DATA 0000A800 0000105E = 4190. bytes (REL,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ - 0000B83C __modulong _modulong - 0000B8C3 __divulong _divulong + 0000A800 _fs_buf main + 0000B800 _ret_sp main + 0000B802 _filesize main + 0000B806 _file_ext main + 0000B807 _call_type main + 0000B808 _last_esp_status main + 0000B809 _p_file_name main + 0000B80B _file_name main + 0000B82C _total_samples main + 0000B830 _xm_handle main + 0000B831 _last_track_status main ASxxxx Linker V05.50.4-SDLD, page 5. Hexadecimal [32-Bits] +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_INITIALIZED 0000B85E 00000001 = 1. bytes (REL,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ + 0000B85E _state_esp main + + ASxxxx Linker V05.50.4-SDLD, page 6. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HOME 0000B85F 000001ED = 493. bytes (REL,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ + 0000B85F __modulong _modulong + 0000B8E6 __divulong _divulong + 0000B969 __mullong _mullong + ASxxxx Linker V05.50.4-SDLD, page 7. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_INITIALIZER 0000BA4C 00000001 = 1. bytes (REL,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ + ASxxxx Linker V05.50.4-SDLD, page 8. +Hexadecimal [32-Bits] + Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ _HEADER0 00000000 00000003 = 3. bytes (ABS,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ - ASxxxx Linker V05.50.4-SDLD, page 6. + ASxxxx Linker V05.50.4-SDLD, page 9. Files Linked [ module(s) ] @@ -162,8 +194,10 @@ vgm_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 ] +E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ _mullong.rel ] +E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ mul.rel ] - ASxxxx Linker V05.50.4-SDLD, page 7. + ASxxxx Linker V05.50.4-SDLD, page 10. User Base Address Definitions diff --git a/obj/out.noi b/obj/out.noi index 94f7d7d..c865ac5 100644 --- a/obj/out.noi +++ b/obj/out.noi @@ -7,87 +7,93 @@ DEF l__GSFINAL 0x0 DEF l__GSINIT 0x0 DEF l__HEADER 0x0 DEF l__HEAP 0x0 -DEF l__INITIALIZED 0x0 -DEF l__INITIALIZER 0x0 DEF s__CABS 0x0 DEF s__DABS 0x0 DEF s__HEADER 0x0 DEF s__HEADER0 0x0 +DEF l__INITIALIZED 0x1 +DEF l__INITIALIZER 0x1 DEF l__HEADER0 0x3 -DEF l__HOME 0x10A -DEF l__CODE 0xAEC -DEF l__DATA 0x103C +DEF l__HOME 0x1ED +DEF l__CODE 0xC33 +DEF l__DATA 0x105E DEF s__CODE 0x8003 DEF s__DATA 0xA800 -DEF s__HOME 0xB83C -DEF s__INITIALIZED 0xB83C -DEF s__BSEG 0xB946 -DEF s__BSS 0xB946 -DEF s__GSFINAL 0xB946 -DEF s__GSINIT 0xB946 -DEF s__HEAP 0xB946 -DEF s__INITIALIZER 0xB946 +DEF s__INITIALIZED 0xB85E +DEF s__HOME 0xB85F +DEF s__GSFINAL 0xBA4C +DEF s__GSINIT 0xBA4C +DEF s__INITIALIZER 0xBA4C +DEF s__BSEG 0xBA4D +DEF s__BSS 0xBA4D +DEF s__HEAP 0xBA4D DEF _wc_exit 0x8003 -DEF _esp_cmd 0x8008 -DEF _esp_rd_reg8 0x8021 -DEF _esp_rd_reg32 0x803A -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 0x818E -DEF _esp_wait_status 0x819D -DEF _esp_wait_busy 0x81D8 -DEF _esp_create_obj 0x81FA -DEF _esp_init 0x8228 -DEF _err_no_esp 0x8235 -DEF _err_out_of_mem 0x8247 -DEF _err_playback 0x8259 -DEF _win_xm 0x826B -DEF _win_about 0x827D -DEF _play_xm 0x832C -DEF _wait_esc_key 0x8541 -DEF _wait_frames 0x8549 -DEF _about 0x8552 -DEF _error_esp 0x8565 -DEF _error_oom 0x8578 -DEF _error_playback 0x858E -DEF _copy_file_name 0x85A4 -DEF _xm_draw_static_labels 0x85C9 -DEF _put_hex2 0x85F9 -DEF _put_dec3 0x8636 -DEF _put_time 0x8693 -DEF _xm_draw_stats_labels 0x8740 -DEF _xm_update_info 0x87B9 -DEF _main_start 0x88DD -DEF _main 0x89B0 -DEF __divuchar 0x89D9 -DEF __divu8 0x89DB -DEF __divu16 0x89DE -DEF __divuint 0x89DE -DEF _wc_load512 0x8A0D -DEF __moduchar 0x8A22 -DEF __moduint 0x8A29 -DEF _wc_prsrw 0x8A2E -DEF _wc_prwow 0x8A64 -DEF _wc_key_pgdn 0x8A71 -DEF _wc_prsrw_attr 0x8A7B -DEF _wc_rresb 0x8AC2 -DEF _strlen 0x8ACF -DEF _wc_key_esc 0x8ADB -DEF _wc_key_pgup 0x8AE5 -DEF _state_esp 0xA800 -DEF _fs_buf 0xA801 -DEF _ret_sp 0xB801 -DEF _filesize 0xB803 -DEF _file_ext 0xB807 -DEF _call_type 0xB808 -DEF _last_esp_status 0xB809 -DEF _p_file_name 0xB80A -DEF _file_name 0xB80C -DEF _total_samples 0xB82D -DEF _xm_handle 0xB831 -DEF __modulong 0xB83C -DEF __divulong 0xB8C3 +DEF _wc_set_freq_14mhz 0x8008 +DEF _esp_cmd 0x8011 +DEF _esp_rd_reg8 0x802A +DEF _esp_rd_reg32 0x8043 +DEF _esp_rd_regs 0x80B1 +DEF _esp_wr_reg8 0x80DD +DEF _esp_wr_reg32 0x80F4 +DEF _esp_wr_end 0x8124 +DEF _esp_send_dma 0x8133 +DEF _esp_rd_end 0x8197 +DEF _esp_wait_status 0x81A6 +DEF _esp_wait_busy 0x81E1 +DEF _esp_create_obj 0x8203 +DEF _esp_init 0x8231 +DEF _err_no_esp 0x823E +DEF _err_out_of_mem 0x8250 +DEF _err_playback 0x8262 +DEF _win_xm 0x8274 +DEF _win_about 0x8286 +DEF _play_xm 0x8335 +DEF _wait_esc_key 0x8568 +DEF _wait_frames 0x8570 +DEF _about 0x8579 +DEF _error_esp 0x858C +DEF _error_oom 0x859F +DEF _error_playback 0x85B5 +DEF _copy_file_name 0x85CB +DEF _xm_draw_static_labels 0x85F0 +DEF _put_hex2 0x8620 +DEF _put_dec3 0x865D +DEF _put_time 0x86BA +DEF _xm_draw_stats_labels 0x8767 +DEF _draw_progress_bar 0x87E0 +DEF _xm_update_info 0x8863 +DEF _main_start 0x89D3 +DEF _main 0x8AE0 +DEF __divuchar 0x8B09 +DEF __divu8 0x8B0B +DEF __divu16 0x8B0E +DEF __divuint 0x8B0E +DEF _wc_load512 0x8B3D +DEF __moduchar 0x8B52 +DEF __moduint 0x8B59 +DEF _wc_prsrw 0x8B5E +DEF _wc_prwow 0x8B94 +DEF _wc_key_pgdn 0x8BA1 +DEF _wc_prsrw_attr 0x8BAB +DEF _wc_rresb 0x8BF2 +DEF _strlen 0x8BFF +DEF _wc_key_esc 0x8C0B +DEF _wc_key_pgup 0x8C15 +DEF __mulint 0x8C1F +DEF __mul16 0x8C21 +DEF _fs_buf 0xA800 +DEF _ret_sp 0xB800 +DEF _filesize 0xB802 +DEF _file_ext 0xB806 +DEF _call_type 0xB807 +DEF _last_esp_status 0xB808 +DEF _p_file_name 0xB809 +DEF _file_name 0xB80B +DEF _total_samples 0xB82C +DEF _xm_handle 0xB830 +DEF _last_track_status 0xB831 +DEF _state_esp 0xB85E +DEF __modulong 0xB85F +DEF __divulong 0xB8E6 +DEF __mullong 0xB969 LOAD obj/out.ihx diff --git a/obj/out.rel b/obj/out.rel index 5c4803e..f230060 100644 --- a/obj/out.rel +++ b/obj/out.rel @@ -1,5 +1,5 @@ XL4 -H 9 areas 3E global symbols +H 9 areas 42 global symbols M main O -mz80 sdcccall(1) S __divuint Ref00000000 @@ -16,78 +16,82 @@ S _wc_prsrw_attr Ref00000000 S _wc_rresb Ref00000000 S _strlen Ref00000000 S _wc_key_esc Ref00000000 +S __mullong Ref00000000 S _wc_key_pgup Ref00000000 S __moduint Ref00000000 -A _CODE size 9D6 flags 0 addr 0 -S _esp_send_dma Def00000127 -S _esp_wr_reg8 Def000000D1 -S _main Def000009AD -S _esp_wr_end Def00000118 -S _put_time Def00000690 -S _xm_draw_static_labels Def000005C6 -S _err_no_esp Def00000232 -S _err_playback Def00000256 -S _put_hex2 Def000005F6 -S _main_start Def000008DA +A _CODE size B06 flags 0 addr 0 +S _esp_send_dma Def00000130 +S _wc_set_freq_14mhz Def00000005 +S _esp_wr_reg8 Def000000DA +S _main Def00000ADD +S _esp_wr_end Def00000121 +S _put_time Def000006B7 +S _xm_draw_static_labels Def000005ED +S _err_no_esp Def0000023B +S _err_playback Def0000025F +S _put_hex2 Def0000061D +S _main_start Def000009D0 S _wc_exit Def00000000 -S _esp_create_obj Def000001F7 -S _wait_esc_key Def0000053E -S _play_xm Def00000329 -S _copy_file_name Def000005A1 -S _esp_wait_busy Def000001D5 -S _esp_rd_reg32 Def00000037 -S _win_about Def0000027A -S _esp_rd_regs Def000000A5 -S _error_playback Def0000058B -S _error_esp Def00000562 -S _err_out_of_mem Def00000244 -S _win_xm Def00000268 -S _esp_rd_reg8 Def0000001E -S _esp_wr_reg32 Def000000E8 -S _wait_frames Def00000546 -S _xm_draw_stats_labels Def0000073D -S _xm_update_info Def000007B6 -S _esp_rd_end Def0000018B -S _error_oom Def00000575 -S _put_dec3 Def00000633 -S _esp_cmd Def00000005 -S _esp_init Def00000225 -S _about Def0000054F -S _esp_wait_status Def0000019A -A _DATA size 103C flags 0 addr 0 -S _p_file_name Def0000100A -S _xm_handle Def00001031 -S _fs_buf Def00000001 -S _total_samples Def0000102D -S _call_type Def00001008 +S _esp_create_obj Def00000200 +S _wait_esc_key Def00000565 +S _play_xm Def00000332 +S _copy_file_name Def000005C8 +S _esp_wait_busy Def000001DE +S _esp_rd_reg32 Def00000040 +S _win_about Def00000283 +S _esp_rd_regs Def000000AE +S _error_playback Def000005B2 +S _error_esp Def00000589 +S _err_out_of_mem Def0000024D +S _win_xm Def00000271 +S _esp_rd_reg8 Def00000027 +S _esp_wr_reg32 Def000000F1 +S _wait_frames Def0000056D +S _xm_draw_stats_labels Def00000764 +S _xm_update_info Def00000860 +S _esp_rd_end Def00000194 +S _error_oom Def0000059C +S _draw_progress_bar Def000007DD +S _put_dec3 Def0000065A +S _esp_cmd Def0000000E +S _esp_init Def0000022E +S _about Def00000576 +S _esp_wait_status Def000001A3 +A _DATA size 105E flags 0 addr 0 +S _last_track_status Def00001031 +S _p_file_name Def00001009 +S _xm_handle Def00001030 +S _fs_buf Def00000000 +S _total_samples Def0000102C +S _call_type Def00001007 +S _ret_sp Def00001000 +S _file_ext Def00001006 +S _filesize Def00001002 +S _last_esp_status Def00001008 +S _file_name Def0000100B +A _INITIALIZED size 1 flags 0 addr 0 S _state_esp Def00000000 -S _ret_sp Def00001001 -S _file_ext Def00001007 -S _filesize Def00001003 -S _last_esp_status Def00001009 -S _file_name Def0000100C -A _INITIALIZED size 0 flags 0 addr 0 A _DABS size 0 flags 8 addr 0 A _HOME size 0 flags 0 addr 0 A _GSINIT size 0 flags 0 addr 0 A _GSFINAL size 0 flags 0 addr 0 -A _INITIALIZER size 0 flags 0 addr 0 +A _INITIALIZER size 1 flags 0 addr 0 A _CABS size 0 flags 8 addr 0 T 00 00 00 00 R 00 00 01 00 T 00 00 00 00 R 00 00 01 00 -T 01 00 00 00 +T 00 10 00 00 R 00 00 01 00 -T 01 00 00 00 +T 00 10 00 00 R 00 00 01 00 -T 01 10 00 00 +T 02 10 00 00 R 00 00 01 00 -T 01 10 00 00 +T 02 10 00 00 R 00 00 01 00 -T 03 10 00 00 +T 06 10 00 00 R 00 00 01 00 -T 03 10 00 00 +T 06 10 00 00 R 00 00 01 00 T 07 10 00 00 R 00 00 01 00 @@ -101,17 +105,17 @@ T 09 10 00 00 R 00 00 01 00 T 09 10 00 00 R 00 00 01 00 -T 0A 10 00 00 +T 0B 10 00 00 R 00 00 01 00 -T 0A 10 00 00 +T 0B 10 00 00 R 00 00 01 00 -T 0C 10 00 00 +T 2C 10 00 00 R 00 00 01 00 -T 0C 10 00 00 +T 2C 10 00 00 R 00 00 01 00 -T 2D 10 00 00 +T 30 10 00 00 R 00 00 01 00 -T 2D 10 00 00 +T 30 10 00 00 R 00 00 01 00 T 31 10 00 00 R 00 00 01 00 @@ -129,667 +133,763 @@ T 37 10 00 00 R 00 00 01 00 T 37 10 00 00 R 00 00 01 00 +T 3C 10 00 00 +R 00 00 01 00 +T 3C 10 00 00 +R 00 00 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 T 00 00 00 00 R 00 00 00 00 -T 00 00 00 00 ED 7B 01 10 C9 +T 00 00 00 00 ED 7B 00 10 C9 R 00 00 00 00 00 06 01 00 T 05 00 00 00 R 00 00 00 00 -T 05 00 00 00 4F 3E 13 D3 77 3E 01 D3 57 AF D3 57 +T 05 00 00 00 06 00 0E 02 3E 0E C3 06 60 R 00 00 00 00 -T 11 00 00 00 DB 57 79 D3 57 AF D3 57 3E 03 D3 77 +T 0E 00 00 00 R 00 00 00 00 -T 1D 00 00 00 C9 +T 0E 00 00 00 4F 3E 13 D3 77 3E 01 D3 57 AF D3 57 R 00 00 00 00 -T 1E 00 00 00 +T 1A 00 00 00 DB 57 79 D3 57 AF D3 57 3E 03 D3 77 R 00 00 00 00 -T 1E 00 00 00 4F 3E 13 D3 77 3E 02 D3 57 79 D3 57 +T 26 00 00 00 C9 R 00 00 00 00 -T 2A 00 00 00 DB 57 DB 57 DB 57 4F 3E 03 D3 77 79 +T 27 00 00 00 R 00 00 00 00 -T 36 00 00 00 C9 +T 27 00 00 00 4F 3E 13 D3 77 3E 02 D3 57 79 D3 57 R 00 00 00 00 -T 37 00 00 00 +T 33 00 00 00 DB 57 DB 57 DB 57 4F 3E 03 D3 77 79 R 00 00 00 00 -T 37 00 00 00 DD E5 DD 21 00 00 DD 39 F5 F5 4F 3E +T 3F 00 00 00 C9 R 00 00 00 00 -T 43 00 00 00 13 D3 77 3E 02 D3 57 79 D3 57 DB 57 +T 40 00 00 00 R 00 00 00 00 -T 4F 00 00 00 DB 57 DB 57 4F DB 57 57 59 DB 57 DD +T 40 00 00 00 DD E5 DD 21 00 00 DD 39 F5 F5 4F 3E R 00 00 00 00 -T 5B 00 00 00 77 FC AF DD 77 FD DD 77 FE DD 77 FF +T 4C 00 00 00 13 D3 77 3E 02 D3 57 79 D3 57 DB 57 R 00 00 00 00 -T 67 00 00 00 DD 7E FC DD 77 FE AF DD 77 FF DD 77 +T 58 00 00 00 DB 57 DB 57 4F DB 57 57 59 DB 57 DD R 00 00 00 00 -T 73 00 00 00 FC DD 77 FD DD 6E FE DB 57 DD 77 FC +T 64 00 00 00 77 FC AF DD 77 FD DD 77 FE DD 77 FF R 00 00 00 00 -T 7F 00 00 00 AF DD 77 FD DD 77 FE DD 77 FF DD 7E +T 70 00 00 00 DD 7E FC DD 77 FE AF DD 77 FF DD 77 R 00 00 00 00 -T 8B 00 00 00 FC DD 77 FF AF DD 77 FC DD 77 FD DD +T 7C 00 00 00 FC DD 77 FD DD 6E FE DB 57 DD 77 FC R 00 00 00 00 -T 97 00 00 00 77 FE DD 66 FF 3E 03 D3 77 DD F9 DD +T 88 00 00 00 AF DD 77 FD DD 77 FE DD 77 FF DD 7E R 00 00 00 00 -T A3 00 00 00 E1 C9 +T 94 00 00 00 FC DD 77 FF AF DD 77 FC DD 77 FD DD R 00 00 00 00 -T A5 00 00 00 +T A0 00 00 00 77 FE DD 66 FF 3E 03 D3 77 DD F9 DD R 00 00 00 00 -T A5 00 00 00 4F 3E 13 D3 77 3E 02 D3 57 79 D3 57 +T AC 00 00 00 E1 C9 R 00 00 00 00 -T B1 00 00 00 DB 57 DB 57 FD 21 02 00 FD 39 FD 4E +T AE 00 00 00 R 00 00 00 00 -T BD 00 00 00 00 +T AE 00 00 00 4F 3E 13 D3 77 3E 02 D3 57 79 D3 57 R 00 00 00 00 -T BE 00 00 00 +T BA 00 00 00 DB 57 DB 57 FD 21 02 00 FD 39 FD 4E R 00 00 00 00 -T BE 00 00 00 79 0D B7 28 07 DB 57 12 13 C3 BE 00 +T C6 00 00 00 00 +R 00 00 00 00 +T C7 00 00 00 +R 00 00 00 00 +T C7 00 00 00 79 0D B7 28 07 DB 57 12 13 C3 C7 00 R 00 00 00 00 00 0E 00 00 -T CA 00 00 00 +T D3 00 00 00 R 00 00 00 00 -T CA 00 00 00 3E 03 D3 77 E1 33 E9 +T D3 00 00 00 3E 03 D3 77 E1 33 E9 R 00 00 00 00 -T D1 00 00 00 +T DA 00 00 00 R 00 00 00 00 -T D1 00 00 00 47 4D 3E 13 D3 77 3E 01 D3 57 78 D3 +T DA 00 00 00 47 4D 3E 13 D3 77 3E 01 D3 57 78 D3 R 00 00 00 00 -T DD 00 00 00 57 DB 57 79 D3 57 3E 03 D3 77 C9 +T E6 00 00 00 57 DB 57 79 D3 57 3E 03 D3 77 C9 R 00 00 00 00 -T E8 00 00 00 +T F1 00 00 00 R 00 00 00 00 -T E8 00 00 00 4F 3E 13 D3 77 3E 01 D3 57 79 D3 57 +T F1 00 00 00 4F 3E 13 D3 77 3E 01 D3 57 79 D3 57 R 00 00 00 00 -T F4 00 00 00 DB 57 FD 21 02 00 FD 39 FD 7E 00 D3 +T FD 00 00 00 DB 57 FD 21 02 00 FD 39 FD 7E 00 D3 R 00 00 00 00 -T 00 01 00 00 57 FD 7E 01 D3 57 FD 7E 02 D3 57 FD +T 09 01 00 00 57 FD 7E 01 D3 57 FD 7E 02 D3 57 FD R 00 00 00 00 -T 0C 01 00 00 7E 03 D3 57 3E 03 D3 77 E1 F1 F1 E9 +T 15 01 00 00 7E 03 D3 57 3E 03 D3 77 E1 F1 F1 E9 R 00 00 00 00 -T 18 01 00 00 +T 21 01 00 00 R 00 00 00 00 -T 18 01 00 00 3E 13 D3 77 3E 07 D3 57 DB 57 3E 03 +T 21 01 00 00 3E 13 D3 77 3E 07 D3 57 DB 57 3E 03 R 00 00 00 00 -T 24 01 00 00 D3 77 C9 +T 2D 01 00 00 D3 77 C9 R 00 00 00 00 -T 27 01 00 00 +T 30 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 30 01 00 00 7D 01 AF 1A ED 79 7C 01 AF 1B ED 79 R 00 00 00 00 -T 33 01 00 00 FD 21 02 00 FD 39 FD 7E 00 01 AF 1C +T 3C 01 00 00 FD 21 02 00 FD 39 FD 7E 00 01 AF 1C R 00 00 00 00 -T 3F 01 00 00 ED 79 FD 7E 01 FD 4E 02 FD 23 CB 39 +T 48 01 00 00 ED 79 FD 7E 01 FD 4E 02 FD 23 CB 39 R 00 00 00 00 -T 4B 01 00 00 CB 1F 3D 01 AF 26 ED 79 FD 7E 02 3D +T 54 01 00 00 CB 1F 3D 01 AF 26 ED 79 FD 7E 02 3D R 00 00 00 00 -T 57 01 00 00 01 AF 28 ED 79 3E 13 D3 77 3E 03 D3 +T 60 01 00 00 01 AF 28 ED 79 3E 13 D3 77 3E 03 D3 R 00 00 00 00 -T 63 01 00 00 57 DB 57 DB 57 3E 82 01 AF 27 ED 79 +T 6C 01 00 00 57 DB 57 DB 57 3E 82 01 AF 27 ED 79 R 00 00 00 00 -T 6F 01 00 00 +T 78 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 +T 78 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 11 60 EA 21 00 00 CD D5 01 E1 +T 84 01 00 00 21 01 11 60 EA 21 00 00 CD DE 01 E1 R 00 00 00 00 00 04 00 00 00 0D 00 00 -T 87 01 00 00 F1 F1 33 E9 +T 90 01 00 00 F1 F1 33 E9 R 00 00 00 00 -T 8B 01 00 00 +T 94 01 00 00 R 00 00 00 00 -T 8B 01 00 00 3E 13 D3 77 3E 08 D3 57 DB 57 3E 03 +T 94 01 00 00 3E 13 D3 77 3E 08 D3 57 DB 57 3E 03 R 00 00 00 00 -T 97 01 00 00 D3 77 C9 +T A0 01 00 00 D3 77 C9 R 00 00 00 00 -T 9A 01 00 00 +T A3 01 00 00 R 00 00 00 00 -T 9A 01 00 00 DD E5 DD 21 00 00 DD 39 4F DD 5E 04 +T A3 01 00 00 DD E5 DD 21 00 00 DD 39 4F DD 5E 04 R 00 00 00 00 -T A6 01 00 00 DD 56 05 DD 6E 06 DD 66 07 +T AF 01 00 00 DD 56 05 DD 6E 06 DD 66 07 R 00 00 00 00 -T AF 01 00 00 +T B8 01 00 00 R 00 00 00 00 -T AF 01 00 00 7B C6 FF 5F 7A CE FF 57 7D CE FF 6F +T B8 01 00 00 7B C6 FF 5F 7A CE FF 57 7D CE FF 6F R 00 00 00 00 -T BB 01 00 00 7C CE FF 67 B5 B2 B3 28 0E E5 C5 D5 +T C4 01 00 00 7C CE FF 67 B5 B2 B3 28 0E E5 C5 D5 R 00 00 00 00 -T C7 01 00 00 3E 01 CD 1E 00 D1 C1 E1 91 20 DD +T D0 01 00 00 3E 01 CD 27 00 D1 C1 E1 91 20 DD R 00 00 00 00 00 07 00 00 -T D2 01 00 00 +T DB 01 00 00 R 00 00 00 00 -T D2 01 00 00 DD E1 C9 +T DB 01 00 00 DD E1 C9 R 00 00 00 00 -T D5 01 00 00 +T DE 01 00 00 R 00 00 00 00 -T D5 01 00 00 +T DE 01 00 00 R 00 00 00 00 -T D5 01 00 00 7B C6 FF 5F 7A CE FF 57 7D CE FF 6F +T DE 01 00 00 7B C6 FF 5F 7A CE FF 57 7D CE FF 6F R 00 00 00 00 -T E1 01 00 00 7C CE FF 67 B5 B2 B3 C8 E5 D5 3E 01 +T EA 01 00 00 7C CE FF 67 B5 B2 B3 C8 E5 D5 3E 01 R 00 00 00 00 -T ED 01 00 00 CD 1E 00 D1 E1 FE 02 28 DF C9 +T F6 01 00 00 CD 27 00 D1 E1 FE 02 28 DF C9 R 00 00 00 00 00 05 00 00 -T F7 01 00 00 +T 00 02 00 00 R 00 00 00 00 -T F7 01 00 00 E5 D5 3E 03 CD E8 00 FD 21 02 00 FD +T 00 02 00 00 E5 D5 3E 03 CD F1 00 FD 21 02 00 FD R 00 00 00 00 00 09 00 00 -T 03 02 00 00 39 FD 6E 00 3E 02 CD D1 00 3E E0 CD +T 0C 02 00 00 39 FD 6E 00 3E 02 CD DA 00 3E E0 CD R 00 00 00 00 00 0B 00 00 -T 0F 02 00 00 05 00 11 20 4E 21 00 00 CD D5 01 3E +T 18 02 00 00 0E 00 11 20 4E 21 00 00 CD DE 01 3E R 00 00 00 00 00 04 00 00 00 0D 00 00 -T 1B 02 00 00 0B CD 1E 00 5F 16 00 E1 33 E9 +T 24 02 00 00 0B CD 27 00 5F 16 00 E1 33 E9 R 00 00 00 00 00 06 00 00 -T 25 02 00 00 +T 2E 02 00 00 R 00 00 00 00 -T 25 02 00 00 AF CD 05 00 CD 8B 01 CD 18 01 3E 01 +T 2E 02 00 00 AF CD 0E 00 CD 94 01 CD 21 01 3E 01 R 00 00 00 00 00 06 00 00 00 09 00 00 00 0C 00 00 -T 31 02 00 00 C9 +T 3A 02 00 00 C9 R 00 00 00 00 -T 32 02 00 00 +T 3B 02 00 00 R 00 00 00 00 -T 32 02 00 00 01 00 18 0A 20 05 2F 00 00 00 00 00 +T 3B 02 00 00 01 00 18 0A 20 05 2F 00 00 00 00 00 R 00 00 00 00 -T 3E 02 00 00 8C 02 96 02 97 02 +T 47 02 00 00 95 02 9F 02 A0 02 R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00 -T 44 02 00 00 +T 4D 02 00 00 R 00 00 00 00 -T 44 02 00 00 01 00 FF FF 20 05 2F 00 00 00 00 00 +T 4D 02 00 00 01 00 FF FF 20 05 2F 00 00 00 00 00 R 00 00 00 00 -T 50 02 00 00 8C 02 96 02 AD 02 +T 59 02 00 00 95 02 9F 02 B6 02 R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00 -T 56 02 00 00 +T 5F 02 00 00 R 00 00 00 00 -T 56 02 00 00 01 00 FF FF 20 05 2F 00 00 00 00 00 +T 5F 02 00 00 01 00 FF FF 20 05 2F 00 00 00 00 00 R 00 00 00 00 -T 62 02 00 00 8C 02 96 02 CD 02 +T 6B 02 00 00 95 02 9F 02 D6 02 R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00 -T 68 02 00 00 +T 71 02 00 00 R 00 00 00 00 -T 68 02 00 00 81 00 19 0A 28 0B 4F 00 00 00 00 00 +T 71 02 00 00 81 00 19 0A 28 0B 4F 00 00 00 00 00 R 00 00 00 00 -T 74 02 00 00 EB 02 96 02 00 03 +T 7D 02 00 00 F4 02 9F 02 09 03 R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00 -T 7A 02 00 00 +T 83 02 00 00 R 00 00 00 00 -T 7A 02 00 00 01 00 16 0A 24 05 4F 00 00 00 00 00 +T 83 02 00 00 01 00 16 0A 24 05 4F 00 00 00 00 00 R 00 00 00 00 -T 86 02 00 00 0E 03 96 02 17 03 +T 8F 02 00 00 17 03 9F 02 20 03 R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00 -T 8C 02 00 00 +T 95 02 00 00 R 00 00 00 00 -T 8C 02 00 00 0E 20 45 72 72 6F 72 21 20 00 +T 95 02 00 00 0E 20 45 72 72 6F 72 21 20 00 R 00 00 00 00 -T 96 02 00 00 +T 9F 02 00 00 R 00 00 00 00 -T 96 02 00 00 00 +T 9F 02 00 00 00 R 00 00 00 00 -T 97 02 00 00 +T A0 02 00 00 R 00 00 00 00 -T 97 02 00 00 0E 0C 01 4E 6F 20 45 53 50 33 32 20 +T A0 02 00 00 0E 0C 01 4E 6F 20 45 53 50 33 32 20 R 00 00 00 00 -T A3 02 00 00 64 65 74 65 63 74 65 64 21 00 +T AC 02 00 00 64 65 74 65 63 74 65 64 21 00 R 00 00 00 00 -T AD 02 00 00 +T B6 02 00 00 R 00 00 00 00 -T AD 02 00 00 0E 0C 01 4F 75 74 20 6F 66 20 6D 65 +T B6 02 00 00 0E 0C 01 4F 75 74 20 6F 66 20 6D 65 R 00 00 00 00 -T B9 02 00 00 6D 6F 72 79 20 28 66 69 6C 65 20 74 +T C2 02 00 00 6D 6F 72 79 20 28 66 69 6C 65 20 74 R 00 00 00 00 -T C5 02 00 00 6F 6F 20 62 69 67 29 00 +T CE 02 00 00 6F 6F 20 62 69 67 29 00 R 00 00 00 00 -T CD 02 00 00 +T D6 02 00 00 R 00 00 00 00 -T CD 02 00 00 0E 0C 01 50 6C 61 79 62 61 63 6B 20 +T D6 02 00 00 0E 0C 01 50 6C 61 79 62 61 63 6B 20 R 00 00 00 00 -T D9 02 00 00 65 72 72 6F 72 20 28 62 61 64 20 66 +T E2 02 00 00 65 72 72 6F 72 20 28 62 61 64 20 66 R 00 00 00 00 -T E5 02 00 00 69 6C 65 3F 29 00 +T EE 02 00 00 69 6C 65 3F 29 00 R 00 00 00 00 -T EB 02 00 00 +T F4 02 00 00 R 00 00 00 00 -T EB 02 00 00 0E 20 58 4D 2F 58 4D 5A 2F 53 33 4D +T F4 02 00 00 0E 20 58 4D 2F 58 4D 5A 2F 53 33 4D R 00 00 00 00 -T F7 02 00 00 20 50 6C 61 79 65 72 20 00 +T 00 03 00 00 20 50 6C 61 79 65 72 20 00 R 00 00 00 00 -T 00 03 00 00 +T 09 03 00 00 R 00 00 00 00 -T 00 03 00 00 0E 0C 01 50 6C 61 79 69 6E 67 2E 2E +T 09 03 00 00 0E 0C 01 50 6C 61 79 69 6E 67 2E 2E R 00 00 00 00 -T 0C 03 00 00 2E 00 -R 00 00 00 00 -T 0E 03 00 00 -R 00 00 00 00 -T 0E 03 00 00 0E 20 41 62 6F 75 74 20 00 +T 15 03 00 00 2E 00 R 00 00 00 00 T 17 03 00 00 R 00 00 00 00 -T 17 03 00 00 0E 0C 01 58 4D 20 50 6C 61 79 65 72 +T 17 03 00 00 0E 20 41 62 6F 75 74 20 00 R 00 00 00 00 -T 23 03 00 00 20 76 31 2E 30 00 +T 20 03 00 00 R 00 00 00 00 -T 29 03 00 00 +T 20 03 00 00 0E 0C 01 58 4D 20 50 6C 61 79 65 72 R 00 00 00 00 -T 29 03 00 00 DD E5 DD 21 00 00 DD 39 21 EC FF 39 +T 2C 03 00 00 20 76 31 2E 30 00 R 00 00 00 00 -T 35 03 00 00 F9 3E A2 CD 05 00 11 10 27 21 00 00 +T 32 03 00 00 +R 00 00 00 00 +T 32 03 00 00 DD E5 DD 21 00 00 DD 39 21 EC FF 39 +R 00 00 00 00 +T 3E 03 00 00 F9 3E A2 CD 0E 00 11 10 27 21 00 00 R 00 00 00 00 00 08 00 00 -T 41 03 00 00 CD D5 01 3E E4 CD 05 00 11 10 27 21 +T 4A 03 00 00 CD DE 01 3E E4 CD 0E 00 11 10 27 21 R 00 00 00 00 00 05 00 00 00 0A 00 00 -T 4D 03 00 00 00 00 CD D5 01 3A 07 10 3D 28 0A 3A +T 56 03 00 00 00 00 CD DE 01 3A 06 10 3D 28 0A 3A R 00 00 00 00 00 07 00 00 00 0A 01 00 -T 59 03 00 00 07 10 D6 02 28 08 C3 6C 03 +T 62 03 00 00 06 10 D6 02 28 08 C3 75 03 R 00 00 00 00 00 04 01 00 00 0B 00 00 -T 62 03 00 00 +T 6B 03 00 00 R 00 00 00 00 -T 62 03 00 00 3E 08 C3 6E 03 +T 6B 03 00 00 3E 08 C3 77 03 R 00 00 00 00 00 07 00 00 -T 67 03 00 00 +T 70 03 00 00 R 00 00 00 00 -T 67 03 00 00 3E 0C C3 6E 03 +T 70 03 00 00 3E 0C C3 77 03 R 00 00 00 00 00 07 00 00 -T 6C 03 00 00 +T 75 03 00 00 R 00 00 00 00 -T 6C 03 00 00 3E 05 +T 75 03 00 00 3E 05 R 00 00 00 00 -T 6E 03 00 00 +T 77 03 00 00 R 00 00 00 00 -T 6E 03 00 00 F5 33 ED 5B 03 10 2A 05 10 CD F7 01 +T 77 03 00 00 F5 33 ED 5B 02 10 2A 04 10 CD 00 02 R 00 00 00 00 00 08 01 00 00 0B 01 00 00 0E 00 00 -T 7A 03 00 00 21 31 10 73 3E 01 CD 1E 00 32 09 10 +T 83 03 00 00 21 30 10 73 3E 01 CD 27 00 32 08 10 R 00 00 00 00 00 05 01 00 00 0B 00 00 00 0E 01 00 -T 86 03 00 00 3A 09 10 3D 28 04 AF C3 39 05 +T 8F 03 00 00 3A 08 10 3D 28 04 AF C3 60 05 R 00 00 00 00 00 05 01 00 00 0C 00 00 -T 90 03 00 00 +T 99 03 00 00 R 00 00 00 00 -T 90 03 00 00 21 0C 00 39 EB 21 03 10 01 04 00 ED +T 99 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 9C 03 00 00 B0 AF DD 77 FC DD 77 FD DD 77 FE DD +T A5 03 00 00 B0 AF DD 77 FC DD 77 FD DD 77 FE DD R 00 00 00 00 -T A8 03 00 00 77 FF +T B1 03 00 00 77 FF R 00 00 00 00 -T AA 03 00 00 +T B3 03 00 00 R 00 00 00 00 -T AA 03 00 00 DD 7E FB DD B6 FA DD B6 F9 DD B6 F8 +T B3 03 00 00 DD 7E FB DD B6 FA DD B6 F9 DD B6 F8 R 00 00 00 00 -T B6 03 00 00 CA C6 04 DD 7E F9 D6 10 DD 7E FA DE +T BF 03 00 00 CA CF 04 DD 7E F9 D6 10 DD 7E FA DE R 00 00 00 00 00 05 00 00 -T C2 03 00 00 00 DD 7E FB DE 00 30 11 21 00 00 39 +T CB 03 00 00 00 DD 7E FB DE 00 30 11 21 00 00 39 R 00 00 00 00 -T CE 03 00 00 EB 21 0C 00 39 01 04 00 ED B0 C3 +T D7 03 00 00 EB 21 0C 00 39 01 04 00 ED B0 C3 R 00 00 00 00 -T D9 03 00 00 EA 03 +T E2 03 00 00 F3 03 R 00 00 00 00 00 04 00 00 -T DB 03 00 00 +T E4 03 00 00 R 00 00 00 00 -T DB 03 00 00 DD 36 EC 00 DD 36 ED 10 AF DD 77 EE +T E4 03 00 00 DD 36 EC 00 DD 36 ED 10 AF DD 77 EE R 00 00 00 00 -T E7 03 00 00 DD 77 EF +T F0 03 00 00 DD 77 EF R 00 00 00 00 -T EA 03 00 00 +T F3 03 00 00 R 00 00 00 00 -T EA 03 00 00 21 05 00 39 EB 21 00 00 39 01 04 00 +T F3 03 00 00 21 05 00 39 EB 21 00 00 39 01 04 00 R 00 00 00 00 -T F6 03 00 00 ED B0 DD 7E F1 C6 FF DD 7E F2 CE 01 +T FF 03 00 00 ED B0 DD 7E F1 C6 FF DD 7E F2 CE 01 R 00 00 00 00 -T 02 04 00 00 47 3E 00 CE 00 5F 3E 00 CE 00 57 48 +T 0B 04 00 00 47 3E 00 CE 00 5F 3E 00 CE 00 57 48 R 00 00 00 00 -T 0E 04 00 00 43 5A CB 3B CB 18 CB 19 DD 71 F7 79 +T 17 04 00 00 43 5A CB 3B CB 18 CB 19 DD 71 F7 79 R 00 00 00 00 -T 1A 04 00 00 F5 33 21 01 00 CD 00 00 21 00 00 E5 +T 23 04 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 01 00 -T 26 04 00 00 DD 6E F1 DD 66 F2 E5 3E 03 CD E8 00 +T 2F 04 00 00 DD 6E F1 DD 66 F2 E5 3E 03 CD F1 00 R 00 00 00 00 00 0E 00 00 -T 32 04 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD 66 +T 3B 04 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD 66 R 00 00 00 00 -T 3E 04 00 00 FD E5 3E 07 CD E8 00 3E E1 CD 05 00 +T 47 04 00 00 FD E5 3E 07 CD F1 00 3E E1 CD 0E 00 R 00 00 00 00 00 09 00 00 00 0E 00 00 -T 4A 04 00 00 21 00 00 E5 21 D0 07 E5 3E 03 CD +T 53 04 00 00 21 00 00 E5 21 D0 07 E5 3E 03 CD R 00 00 00 00 -T 55 04 00 00 9A 01 F1 F1 DD 7E F7 DD 77 F5 DD 36 +T 5E 04 00 00 A3 01 F1 F1 DD 7E F7 DD 77 F5 DD 36 R 00 00 00 00 00 04 00 00 -T 61 04 00 00 F6 00 3A 02 60 DD 77 F7 DD 6E F5 26 +T 6A 04 00 00 F6 00 3A 02 60 DD 77 F7 DD 6E F5 26 R 00 00 00 00 -T 6D 04 00 00 00 E5 21 00 02 E5 DD 7E F7 F5 33 21 +T 76 04 00 00 00 E5 21 00 02 E5 DD 7E F7 F5 33 21 R 00 00 00 00 -T 79 04 00 00 01 00 CD 27 01 DD 5E F1 DD 56 F2 DD +T 82 04 00 00 00 00 CD 30 01 DD 5E F1 DD 56 F2 DD R 00 00 00 00 00 04 01 00 00 07 00 00 -T 85 04 00 00 6E FC DD 66 FD 19 DD 75 FC DD 74 FD +T 8E 04 00 00 6E FC DD 66 FD 19 DD 75 FC DD 74 FD R 00 00 00 00 -T 91 04 00 00 DD 7E FE DD 8E F3 DD 77 FE 30 03 DD +T 9A 04 00 00 DD 7E FE DD 8E F3 DD 77 FE 30 03 DD R 00 00 00 00 -T 9D 04 00 00 34 FF +T A6 04 00 00 34 FF R 00 00 00 00 -T 9F 04 00 00 +T A8 04 00 00 R 00 00 00 00 -T 9F 04 00 00 DD 7E F8 DD 96 F1 DD 77 F8 DD 7E F9 +T A8 04 00 00 DD 7E F8 DD 96 F1 DD 77 F8 DD 7E F9 R 00 00 00 00 -T AB 04 00 00 DD 9E F2 DD 77 F9 DD 7E FA DD 9E F3 +T B4 04 00 00 DD 9E F2 DD 77 F9 DD 7E FA DD 9E F3 R 00 00 00 00 -T B7 04 00 00 DD 77 FA DD 7E FB DD 9E F4 DD 77 FB +T C0 04 00 00 DD 77 FA DD 7E FB DD 9E F4 DD 77 FB R 00 00 00 00 -T C3 04 00 00 C3 AA 03 +T CC 04 00 00 C3 B3 03 R 00 00 00 00 00 05 00 00 -T C6 04 00 00 +T CF 04 00 00 R 00 00 00 00 -T C6 04 00 00 3A 07 10 3D 20 3D 3A 31 10 6F 3E 0B +T CF 04 00 00 3A 06 10 3D 20 3D 3A 30 10 6F 3E 0B R 00 00 00 00 00 05 01 00 00 0B 01 00 -T D2 04 00 00 CD D1 00 2E 05 3E 02 CD D1 00 2A +T DB 04 00 00 CD DA 00 2E 05 3E 02 CD DA 00 2A R 00 00 00 00 00 05 00 00 00 0C 00 00 -T DD 04 00 00 05 10 E5 2A 03 10 E5 3E 03 CD E8 00 +T E6 04 00 00 04 10 E5 2A 02 10 E5 3E 03 CD F1 00 R 00 00 00 00 00 04 01 00 00 08 01 00 00 0E 00 00 -T E9 04 00 00 3E F2 CD 05 00 11 10 27 21 00 00 CD +T F2 04 00 00 3E F2 CD 0E 00 11 10 27 21 00 00 CD R 00 00 00 00 00 07 00 00 -T F5 04 00 00 D5 01 3E 01 CD 1E 00 32 09 10 3A +T FE 04 00 00 DE 01 3E 01 CD 27 00 32 08 10 3A R 00 00 00 00 00 04 00 00 00 09 00 00 00 0C 01 00 -T 00 05 00 00 09 10 3D 28 04 AF C3 39 05 +T 09 05 00 00 08 10 3D 28 04 AF C3 60 05 R 00 00 00 00 00 04 01 00 00 0B 00 00 -T 09 05 00 00 +T 12 05 00 00 R 00 00 00 00 -T 09 05 00 00 3E A0 CD 05 00 11 10 27 21 00 00 CD +T 12 05 00 00 3E A0 CD 0E 00 11 40 42 21 0F 00 CD R 00 00 00 00 00 07 00 00 -T 15 05 00 00 D5 01 3E 01 CD 1E 00 32 09 10 3A +T 1E 05 00 00 DE 01 3E 01 CD 27 00 32 08 10 3A R 00 00 00 00 00 04 00 00 00 09 00 00 00 0C 01 00 -T 20 05 00 00 09 10 3D 28 04 AF C3 39 05 +T 29 05 00 00 08 10 3D 28 04 AF C3 60 05 R 00 00 00 00 00 04 01 00 00 0B 00 00 -T 29 05 00 00 +T 32 05 00 00 R 00 00 00 00 -T 29 05 00 00 3E A1 CD 05 00 11 10 27 21 00 00 CD -R 00 00 00 00 00 07 00 00 -T 35 05 00 00 D5 01 3E 01 -R 00 00 00 00 00 04 00 00 -T 39 05 00 00 +T 32 05 00 00 3A 30 10 6F 3E 0B CD DA 00 2E 01 3E +R 00 00 00 00 00 05 01 00 00 0B 00 00 +T 3E 05 00 00 3A CD DA 00 3E A6 CD 0E 00 11 10 27 +R 00 00 00 00 00 06 00 00 00 0B 00 00 +T 4A 05 00 00 21 00 00 CD DE 01 3E A1 CD 0E 00 11 +R 00 00 00 00 00 08 00 00 00 0D 00 00 +T 56 05 00 00 10 27 21 00 00 CD DE 01 3E 01 +R 00 00 00 00 00 0A 00 00 +T 60 05 00 00 R 00 00 00 00 -T 39 05 00 00 DD F9 DD E1 C9 +T 60 05 00 00 DD F9 DD E1 C9 R 00 00 00 00 -T 3E 05 00 00 +T 65 05 00 00 R 00 00 00 00 -T 3E 05 00 00 +T 65 05 00 00 R 00 00 00 00 -T 3E 05 00 00 76 CD 00 00 B7 28 F9 C9 +T 65 05 00 00 76 CD 00 00 B7 28 F9 C9 R 00 00 00 00 02 06 0D 00 -T 46 05 00 00 +T 6D 05 00 00 R 00 00 00 00 -T 46 05 00 00 4F +T 6D 05 00 00 4F R 00 00 00 00 -T 47 05 00 00 +T 6E 05 00 00 R 00 00 00 00 -T 47 05 00 00 79 0D B7 C8 76 C3 47 05 +T 6E 05 00 00 79 0D B7 C8 76 C3 6E 05 R 00 00 00 00 00 0A 00 00 -T 4F 05 00 00 +T 76 05 00 00 R 00 00 00 00 -T 4F 05 00 00 21 7A 02 CD 00 00 CD 3E 05 21 +T 76 05 00 00 21 83 02 CD 00 00 CD 65 05 21 R 00 00 00 00 00 05 00 00 02 08 05 00 00 0B 00 00 -T 59 05 00 00 7A 02 CD 00 00 AF C3 00 00 +T 80 05 00 00 83 02 CD 00 00 AF C3 00 00 R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0B 00 00 -T 62 05 00 00 +T 89 05 00 00 R 00 00 00 00 -T 62 05 00 00 21 32 02 CD 00 00 CD 3E 05 21 +T 89 05 00 00 21 3B 02 CD 00 00 CD 65 05 21 R 00 00 00 00 00 05 00 00 02 08 05 00 00 0B 00 00 -T 6C 05 00 00 32 02 CD 00 00 AF C3 00 00 +T 93 05 00 00 3B 02 CD 00 00 AF C3 00 00 R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0B 00 00 -T 75 05 00 00 +T 9C 05 00 00 R 00 00 00 00 -T 75 05 00 00 21 44 02 CD 00 00 3E 32 CD 46 05 21 +T 9C 05 00 00 21 4D 02 CD 00 00 3E 32 CD 6D 05 21 R 00 00 00 00 00 05 00 00 02 08 05 00 00 0D 00 00 -T 81 05 00 00 44 02 CD 00 00 3E 02 C3 00 00 +T A8 05 00 00 4D 02 CD 00 00 3E 02 C3 00 00 R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00 -T 8B 05 00 00 +T B2 05 00 00 R 00 00 00 00 -T 8B 05 00 00 21 56 02 CD 00 00 3E 32 CD 46 05 21 +T B2 05 00 00 21 5F 02 CD 00 00 3E 32 CD 6D 05 21 R 00 00 00 00 00 05 00 00 02 08 05 00 00 0D 00 00 -T 97 05 00 00 56 02 CD 00 00 3E 02 C3 00 00 +T BE 05 00 00 5F 02 CD 00 00 3E 02 C3 00 00 R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00 -T A1 05 00 00 +T C8 05 00 00 R 00 00 00 00 -T A1 05 00 00 ED 4B 0A 10 1E 00 +T C8 05 00 00 ED 4B 09 10 1E 00 R 00 00 00 00 00 06 01 00 -T A7 05 00 00 +T CE 05 00 00 R 00 00 00 00 -T A7 05 00 00 6B 26 00 09 56 3E 0C 10 00 00 83 6F +T CE 05 00 00 6B 26 00 09 56 3E 0B 10 00 00 83 6F R 00 00 00 00 09 0A 01 00 -T B0 05 00 00 3E 0C 10 00 00 CE 00 67 7A B7 28 0A +T D7 05 00 00 3E 0B 10 00 00 CE 00 67 7A B7 28 0A R 00 00 00 00 89 05 01 00 -T B9 05 00 00 7B D6 20 30 05 72 1C C3 A7 05 +T E0 05 00 00 7B D6 20 30 05 72 1C C3 CE 05 R 00 00 00 00 00 0C 00 00 -T C3 05 00 00 +T EA 05 00 00 R 00 00 00 00 -T C3 05 00 00 36 00 C9 +T EA 05 00 00 36 00 C9 R 00 00 00 00 -T C6 05 00 00 +T ED 05 00 00 R 00 00 00 00 -T C6 05 00 00 3E 45 F5 33 21 05 00 E5 21 01 01 E5 +T ED 05 00 00 3E 45 F5 33 21 05 00 E5 21 01 01 E5 R 00 00 00 00 -T D2 05 00 00 11 F0 05 21 68 02 CD 00 00 21 +T F9 05 00 00 11 17 06 21 71 02 CD 00 00 21 R 00 00 00 00 00 05 00 00 00 08 00 00 02 0B 0A 00 -T DC 05 00 00 0C 10 CD 00 00 D5 21 01 07 E5 11 +T 03 06 00 00 0B 10 CD 00 00 D5 21 01 07 E5 11 R 00 00 00 00 00 04 01 00 02 07 0C 00 -T E7 05 00 00 0C 10 21 68 02 CD 00 00 C9 +T 0E 06 00 00 0B 10 21 71 02 CD 00 00 C9 R 00 00 00 00 00 04 01 00 00 07 00 00 02 0A 04 00 -T F0 05 00 00 +T 17 06 00 00 R 00 00 00 00 -T F0 05 00 00 46 69 6C 65 3A 00 +T 17 06 00 00 46 69 6C 65 3A 00 R 00 00 00 00 -T F6 05 00 00 +T 1D 06 00 00 R 00 00 00 00 -T F6 05 00 00 DD E5 DD 21 00 00 DD 39 EB 01 22 06 +T 1D 06 00 00 DD E5 DD 21 00 00 DD 39 EB 01 49 06 R 00 00 00 00 00 0E 00 00 -T 02 06 00 00 DD 7E 04 07 07 07 07 E6 0F 6F 26 00 +T 29 06 00 00 DD 7E 04 07 07 07 07 E6 0F 6F 26 00 R 00 00 00 00 -T 0E 06 00 00 09 7E 12 13 DD 7E 04 E6 0F 6F 26 00 +T 35 06 00 00 09 7E 12 13 DD 7E 04 E6 0F 6F 26 00 R 00 00 00 00 -T 1A 06 00 00 09 7E 12 DD E1 E1 33 E9 +T 41 06 00 00 09 7E 12 DD E1 E1 33 E9 R 00 00 00 00 -T 22 06 00 00 +T 49 06 00 00 R 00 00 00 00 -T 22 06 00 00 30 31 32 33 34 35 36 37 38 39 41 42 +T 49 06 00 00 30 31 32 33 34 35 36 37 38 39 41 42 R 00 00 00 00 -T 2E 06 00 00 43 44 45 46 00 +T 55 06 00 00 43 44 45 46 00 R 00 00 00 00 -T 33 06 00 00 +T 5A 06 00 00 R 00 00 00 00 -T 33 06 00 00 DD E5 DD 21 00 00 DD 39 F5 4D 44 E1 +T 5A 06 00 00 DD E5 DD 21 00 00 DD 39 F5 4D 44 E1 R 00 00 00 00 -T 3F 06 00 00 D5 C5 11 64 00 DD 6E FE DD 66 FF CD +T 66 06 00 00 D5 C5 11 64 00 DD 6E FE DD 66 FF CD R 00 00 00 00 -T 4B 06 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 0F 00 -T 57 06 00 00 30 02 69 60 23 E5 C5 11 0A 00 DD 6E +T 72 06 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 10 00 +T 7E 06 00 00 30 02 69 60 23 E5 C5 11 0A 00 DD 6E R 00 00 00 00 -T 63 06 00 00 FE DD 66 FF CD 00 00 EB 11 0A 00 CD +T 8A 06 00 00 FE DD 66 FF CD 00 00 EB 11 0A 00 CD R 00 00 00 00 02 09 00 00 -T 6F 06 00 00 00 00 C1 E1 7B C6 30 77 03 03 C5 11 -R 00 00 00 00 02 04 0F 00 -T 7B 06 00 00 0A 00 DD 6E FE DD 66 FF CD 00 00 C1 -R 00 00 00 00 02 0D 0F 00 -T 87 06 00 00 7B C6 30 02 DD F9 DD E1 C9 +T 96 06 00 00 00 00 C1 E1 7B C6 30 77 03 03 C5 11 +R 00 00 00 00 02 04 10 00 +T A2 06 00 00 0A 00 DD 6E FE DD 66 FF CD 00 00 C1 +R 00 00 00 00 02 0D 10 00 +T AE 06 00 00 7B C6 30 02 DD F9 DD E1 C9 R 00 00 00 00 -T 90 06 00 00 +T B7 06 00 00 R 00 00 00 00 -T 90 06 00 00 DD E5 DD 21 00 00 DD 39 E5 21 00 00 +T B7 06 00 00 DD E5 DD 21 00 00 DD 39 E5 21 00 00 R 00 00 00 00 -T 9C 06 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 DD 6E +T C3 06 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 DD 6E R 00 00 00 00 -T A8 06 00 00 06 DD 66 07 CD 00 00 F1 F1 01 00 00 +T CF 06 00 00 06 DD 66 07 CD 00 00 F1 F1 01 00 00 R 00 00 00 00 02 09 08 00 -T B4 06 00 00 C5 0E 64 C5 CD 00 00 F1 F1 4B C5 21 +T DB 06 00 00 C5 0E 64 C5 CD 00 00 F1 F1 4B C5 21 R 00 00 00 00 02 09 07 00 -T C0 06 00 00 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 +T E7 06 00 00 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 R 00 00 00 00 -T CC 06 00 00 DD 6E 06 DD 66 07 CD 00 00 F1 F1 C1 +T F3 06 00 00 DD 6E 06 DD 66 07 CD 00 00 F1 F1 C1 R 00 00 00 00 02 0B 07 00 -T D8 06 00 00 51 D5 2E 0A 7A CD 00 00 7B 2E 0A CD +T FF 06 00 00 51 D5 2E 0A 7A CD 00 00 7B 2E 0A CD R 00 00 00 00 02 0A 03 00 -T E4 06 00 00 00 00 7B D1 C6 30 E1 E5 77 C1 C5 03 +T 0B 07 00 00 00 00 7B D1 C6 30 E1 E5 77 C1 C5 03 R 00 00 00 00 02 04 02 00 -T F0 06 00 00 C5 D5 2E 0A 7A CD 00 00 7B D1 C1 C6 +T 17 07 00 00 C5 D5 2E 0A 7A CD 00 00 7B D1 C1 C6 R 00 00 00 00 02 0A 02 00 -T FC 06 00 00 30 02 E1 E5 23 23 36 3A C1 C5 03 03 +T 23 07 00 00 30 02 E1 E5 23 23 36 3A C1 C5 03 03 R 00 00 00 00 -T 08 07 00 00 03 C5 D5 2E 0A 7B CD 00 00 7B 2E 0A +T 2F 07 00 00 03 C5 D5 2E 0A 7B CD 00 00 7B 2E 0A R 00 00 00 00 02 0B 03 00 -T 14 07 00 00 CD 00 00 7B D1 C1 C6 30 02 DD 7E FE +T 3B 07 00 00 CD 00 00 7B D1 C1 C6 30 02 DD 7E FE R 00 00 00 00 02 05 02 00 -T 20 07 00 00 C6 04 4F DD 7E FF CE 00 47 C5 2E 0A +T 47 07 00 00 C6 04 4F DD 7E FF CE 00 47 C5 2E 0A R 00 00 00 00 -T 2C 07 00 00 7B CD 00 00 7B C1 C6 30 02 DD F9 DD +T 53 07 00 00 7B CD 00 00 7B C1 C6 30 02 DD F9 DD R 00 00 00 00 02 06 02 00 -T 38 07 00 00 E1 E1 F1 F1 E9 +T 5F 07 00 00 E1 E1 F1 F1 E9 R 00 00 00 00 -T 3D 07 00 00 +T 64 07 00 00 R 00 00 00 00 -T 3D 07 00 00 21 09 00 E5 21 03 01 E5 11 93 07 21 +T 64 07 00 00 21 09 00 E5 21 03 01 E5 11 BA 07 21 R 00 00 00 00 00 0D 00 00 -T 49 07 00 00 68 02 CD 00 00 21 07 00 E5 21 03 0C +T 70 07 00 00 71 02 CD 00 00 21 07 00 E5 21 03 0C R 00 00 00 00 00 04 00 00 02 07 04 00 -T 55 07 00 00 E5 11 9D 07 21 68 02 CD 00 00 21 +T 7C 07 00 00 E5 11 C4 07 21 71 02 CD 00 00 21 R 00 00 00 00 00 06 00 00 00 09 00 00 02 0C 04 00 -T 60 07 00 00 06 00 E5 21 03 15 E5 11 A5 07 21 +T 87 07 00 00 06 00 E5 21 03 15 E5 11 CC 07 21 R 00 00 00 00 00 0C 00 00 -T 6B 07 00 00 68 02 CD 00 00 21 05 00 E5 21 05 01 +T 92 07 00 00 71 02 CD 00 00 21 05 00 E5 21 05 01 R 00 00 00 00 00 04 00 00 02 07 04 00 -T 77 07 00 00 E5 11 AC 07 21 68 02 CD 00 00 21 +T 9E 07 00 00 E5 11 D3 07 21 71 02 CD 00 00 21 R 00 00 00 00 00 06 00 00 00 09 00 00 02 0C 04 00 -T 82 07 00 00 03 00 E5 21 05 0C E5 11 B2 07 21 +T A9 07 00 00 03 00 E5 21 05 0C E5 11 D9 07 21 R 00 00 00 00 00 0C 00 00 -T 8D 07 00 00 68 02 CD 00 00 C9 +T B4 07 00 00 71 02 CD 00 00 C9 R 00 00 00 00 00 04 00 00 02 07 04 00 -T 93 07 00 00 +T BA 07 00 00 R 00 00 00 00 -T 93 07 00 00 50 61 74 74 65 72 6E 3A 23 00 +T BA 07 00 00 50 61 74 74 65 72 6E 3A 23 00 R 00 00 00 00 -T 9D 07 00 00 +T C4 07 00 00 R 00 00 00 00 -T 9D 07 00 00 20 20 52 6F 77 3A 23 00 +T C4 07 00 00 20 20 52 6F 77 3A 23 00 R 00 00 00 00 -T A5 07 00 00 +T CC 07 00 00 R 00 00 00 00 -T A5 07 00 00 20 20 42 50 4D 3A 00 +T CC 07 00 00 20 20 42 50 4D 3A 00 R 00 00 00 00 -T AC 07 00 00 +T D3 07 00 00 R 00 00 00 00 -T AC 07 00 00 54 69 6D 65 3A 00 +T D3 07 00 00 54 69 6D 65 3A 00 R 00 00 00 00 -T B2 07 00 00 +T D9 07 00 00 R 00 00 00 00 -T B2 07 00 00 20 2F 20 00 +T D9 07 00 00 20 2F 20 00 R 00 00 00 00 -T B6 07 00 00 +T DD 07 00 00 R 00 00 00 00 -T B6 07 00 00 DD E5 DD 21 00 00 DD 39 21 F8 FF 39 +T DD 07 00 00 DD E5 DD 21 00 00 DD 39 4B 42 EB DD R 00 00 00 00 -T C2 07 00 00 F9 3A 31 10 6F 3E 0B CD D1 00 3E A8 -R 00 00 00 00 00 06 01 00 00 0C 00 00 -T CE 07 00 00 CD 05 00 11 D0 07 21 00 00 CD D5 01 -R 00 00 00 00 00 05 00 00 00 0E 00 00 -T DA 07 00 00 3E 2B CD 1E 00 DD 77 FA 3E 2C CD -R 00 00 00 00 00 07 00 00 -T E5 07 00 00 1E 00 DD 77 FB 3E 02 F5 33 21 01 00 +T E9 07 00 00 7E 07 DD B6 06 DD B6 05 DD B6 04 28 +R 00 00 00 00 +T F5 07 00 00 30 D5 C5 11 22 00 21 00 00 CD 00 00 +R 00 00 00 00 02 0E 0E 00 +T 01 08 00 00 F1 F1 DD 4E 06 DD 46 07 C5 DD 4E 04 +R 00 00 00 00 +T 0D 08 00 00 DD 46 05 C5 CD 00 00 F1 F1 4B 42 3E +R 00 00 00 00 02 09 08 00 +T 19 08 00 00 22 BB 3E 00 9A 30 09 01 22 00 C3 +R 00 00 00 00 +T 24 08 00 00 29 08 R 00 00 00 00 00 04 00 00 -T F1 07 00 00 39 EB 3E 31 CD A5 00 3E 2D CD 37 00 -R 00 00 00 00 00 09 00 00 00 0E 00 00 -T FD 07 00 00 DD 73 FC DD 72 FD DD 75 FE DD 74 FF +T 26 08 00 00 R 00 00 00 00 -T 09 08 00 00 3A 30 10 FD 21 2D 10 FD B6 02 FD B6 -R 00 00 00 00 00 05 01 00 00 09 01 00 -T 15 08 00 00 01 FD B6 00 20 0C 3E 36 CD 37 00 ED -R 00 00 00 00 00 0D 00 00 -T 21 08 00 00 53 2D 10 22 2F 10 -R 00 00 00 00 00 05 01 00 00 08 01 00 -T 27 08 00 00 +T 26 08 00 00 01 00 00 R 00 00 00 00 -T 27 08 00 00 DD 7E FA F5 33 21 32 10 CD F6 05 21 -R 00 00 00 00 00 0A 01 00 00 0D 00 00 -T 33 08 00 00 02 00 E5 21 03 0A E5 11 32 10 21 -R 00 00 00 00 00 0C 01 00 -T 3E 08 00 00 68 02 CD 00 00 DD 7E FB F5 33 21 -R 00 00 00 00 00 04 00 00 02 07 04 00 -T 49 08 00 00 32 10 CD F6 05 21 02 00 E5 21 03 13 -R 00 00 00 00 00 04 01 00 00 07 00 00 -T 55 08 00 00 E5 11 32 10 21 68 02 CD 00 00 D1 D5 -R 00 00 00 00 00 06 01 00 00 09 00 00 02 0C 04 00 -T 61 08 00 00 21 34 10 CD 33 06 21 03 00 E5 21 -R 00 00 00 00 00 05 01 00 00 08 00 00 -T 6C 08 00 00 03 1B E5 11 34 10 21 68 02 CD 00 00 -R 00 00 00 00 00 08 01 00 00 0B 00 00 02 0E 04 00 -T 78 08 00 00 21 00 00 E5 21 44 AC E5 DD 5E FC DD +T 29 08 00 00 R 00 00 00 00 -T 84 08 00 00 56 FD DD 6E FE DD 66 FF CD 00 00 F1 -R 00 00 00 00 02 0D 08 00 -T 90 08 00 00 E3 D5 21 37 10 CD 90 06 21 05 00 E5 -R 00 00 00 00 00 07 01 00 00 0A 00 00 -T 9C 08 00 00 21 05 07 E5 11 37 10 21 68 02 CD -R 00 00 00 00 00 09 01 00 00 0C 00 00 -T A7 08 00 00 00 00 21 00 00 E5 21 44 AC E5 ED 5B -R 00 00 00 00 02 04 04 00 -T B3 08 00 00 2D 10 2A 2F 10 CD 00 00 F1 E3 D5 21 -R 00 00 00 00 00 04 01 00 00 07 01 00 02 0A 08 00 -T BF 08 00 00 37 10 CD 90 06 21 05 00 E5 21 05 0F -R 00 00 00 00 00 04 01 00 00 07 00 00 -T CB 08 00 00 E5 11 37 10 21 68 02 CD 00 00 DD F9 -R 00 00 00 00 00 06 01 00 00 09 00 00 02 0C 04 00 -T D7 08 00 00 DD E1 C9 +T 29 08 00 00 11 00 00 R 00 00 00 00 -T DA 08 00 00 +T 2C 08 00 00 R 00 00 00 00 -T DA 08 00 00 CD A1 05 3A 00 00 B7 20 0D CD 25 02 -R 00 00 00 00 00 05 00 00 00 08 01 00 00 0E 00 00 -T E6 08 00 00 B7 3E 01 20 02 3E 02 -R 00 00 00 00 -T ED 08 00 00 -R 00 00 00 00 -T ED 08 00 00 32 00 00 +T 2C 08 00 00 21 3C 10 19 7B 91 7A 98 30 05 3E 3D R 00 00 00 00 00 05 01 00 -T F0 08 00 00 +T 38 08 00 00 C3 3D 08 +R 00 00 00 00 00 05 00 00 +T 3B 08 00 00 R 00 00 00 00 -T F0 08 00 00 3A 00 00 3D C2 62 05 32 2D 10 32 -R 00 00 00 00 00 05 01 00 00 09 00 00 00 0C 01 00 -T FB 08 00 00 2E 10 32 2F 10 32 30 10 CD -R 00 00 00 00 00 04 01 00 00 07 01 00 00 0A 01 00 -T 04 09 00 00 29 03 B7 20 0B 3A 09 10 D6 99 CA -R 00 00 00 00 00 04 00 00 00 0A 01 00 -T 0F 09 00 00 75 05 C3 8B 05 -R 00 00 00 00 00 04 00 00 00 07 00 00 -T 14 09 00 00 +T 3B 08 00 00 3E 2D R 00 00 00 00 -T 14 09 00 00 21 68 02 CD 00 00 CD C6 05 CD -R 00 00 00 00 00 05 00 00 02 08 05 00 00 0B 00 00 -T 1E 09 00 00 3D 07 CD B6 07 -R 00 00 00 00 00 04 00 00 00 07 00 00 -T 23 09 00 00 +T 3D 08 00 00 R 00 00 00 00 -T 23 09 00 00 76 CD 00 00 B7 28 27 3E A2 CD 05 00 -R 00 00 00 00 02 06 09 00 00 0E 00 00 -T 2F 09 00 00 11 10 27 21 00 00 CD D5 01 3E E4 CD -R 00 00 00 00 00 0B 00 00 -T 3B 09 00 00 05 00 11 10 27 21 00 00 CD D5 01 21 -R 00 00 00 00 00 04 00 00 00 0D 00 00 -T 47 09 00 00 68 02 CD 00 00 3E 02 CD 00 00 -R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00 -T 51 09 00 00 +T 3D 08 00 00 77 13 6B 62 7D D6 22 7C DE 00 38 E3 R 00 00 00 00 -T 51 09 00 00 CD 00 00 B7 28 27 3E A2 CD 05 00 11 -R 00 00 00 00 02 05 0E 00 00 0D 00 00 -T 5D 09 00 00 10 27 21 00 00 CD D5 01 3E E4 CD -R 00 00 00 00 00 0A 00 00 -T 68 09 00 00 05 00 11 10 27 21 00 00 CD D5 01 21 -R 00 00 00 00 00 04 00 00 00 0D 00 00 -T 74 09 00 00 68 02 CD 00 00 3E 04 CD 00 00 -R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00 -T 7E 09 00 00 +T 49 08 00 00 21 22 00 E5 21 06 01 E5 11 3C 10 21 +R 00 00 00 00 00 0D 01 00 +T 55 08 00 00 71 02 CD 00 00 DD E1 E1 F1 F1 E9 +R 00 00 00 00 00 04 00 00 02 07 04 00 +T 60 08 00 00 R 00 00 00 00 -T 7E 09 00 00 CD 00 00 B7 28 9F 3E A2 CD 05 00 11 -R 00 00 00 00 02 05 0D 00 00 0D 00 00 -T 8A 09 00 00 10 27 21 00 00 CD D5 01 3E E4 CD -R 00 00 00 00 00 0A 00 00 -T 95 09 00 00 05 00 11 10 27 21 00 00 CD D5 01 21 -R 00 00 00 00 00 04 00 00 00 0D 00 00 -T A1 09 00 00 68 02 CD 00 00 AF CD 00 00 C3 -R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0B 00 00 -T AB 09 00 00 23 09 +T 60 08 00 00 DD E5 DD 21 00 00 DD 39 21 F8 FF 39 +R 00 00 00 00 +T 6C 08 00 00 F9 3A 30 10 6F 3E 0B CD DA 00 3E A8 +R 00 00 00 00 00 06 01 00 00 0C 00 00 +T 78 08 00 00 CD 0E 00 11 D0 07 21 00 00 CD DE 01 +R 00 00 00 00 00 05 00 00 00 0E 00 00 +T 84 08 00 00 3E 28 CD 27 00 DD 77 FF 3A 31 10 D6 +R 00 00 00 00 00 07 00 00 00 0D 01 00 +T 90 08 00 00 21 20 20 DD 7E FF D6 20 20 19 3E E4 +R 00 00 00 00 +T 9C 08 00 00 CD 0E 00 11 10 27 21 00 00 CD DE 01 +R 00 00 00 00 00 05 00 00 00 0E 00 00 +T A8 08 00 00 21 71 02 CD 00 00 3E 02 CD 00 00 +R 00 00 00 00 00 05 00 00 02 08 0B 00 00 0D 00 00 +T B3 08 00 00 +R 00 00 00 00 +T B3 08 00 00 DD 7E FF 32 31 10 3E 2B CD 27 00 DD +R 00 00 00 00 00 08 01 00 00 0D 00 00 +T BF 08 00 00 77 FA 3E 2C CD 27 00 DD 77 FB 3E 02 +R 00 00 00 00 00 09 00 00 +T CB 08 00 00 F5 33 21 01 00 39 EB 3E 31 CD AE 00 +R 00 00 00 00 00 0E 00 00 +T D7 08 00 00 3E 2D CD 40 00 DD 73 FC DD 72 FD DD +R 00 00 00 00 00 07 00 00 +T E3 08 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 EF 08 00 00 FD B6 02 FD B6 01 FD B6 00 20 0C 3E +R 00 00 00 00 +T FB 08 00 00 36 CD 40 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 06 09 00 00 +R 00 00 00 00 +T 06 09 00 00 DD 7E FA F5 33 21 32 10 CD 1D 06 21 +R 00 00 00 00 00 0A 01 00 00 0D 00 00 +T 12 09 00 00 02 00 E5 21 03 0A E5 11 32 10 21 +R 00 00 00 00 00 0C 01 00 +T 1D 09 00 00 71 02 CD 00 00 DD 7E FB F5 33 21 +R 00 00 00 00 00 04 00 00 02 07 04 00 +T 28 09 00 00 32 10 CD 1D 06 21 02 00 E5 21 03 13 +R 00 00 00 00 00 04 01 00 00 07 00 00 +T 34 09 00 00 E5 11 32 10 21 71 02 CD 00 00 D1 D5 +R 00 00 00 00 00 06 01 00 00 09 00 00 02 0C 04 00 +T 40 09 00 00 21 34 10 CD 5A 06 21 03 00 E5 21 +R 00 00 00 00 00 05 01 00 00 08 00 00 +T 4B 09 00 00 03 1B E5 11 34 10 21 71 02 CD 00 00 +R 00 00 00 00 00 08 01 00 00 0B 00 00 02 0E 04 00 +T 57 09 00 00 21 00 00 E5 21 44 AC E5 DD 5E FC DD +R 00 00 00 00 +T 63 09 00 00 56 FD DD 6E FE DD 66 FF CD 00 00 F1 +R 00 00 00 00 02 0D 08 00 +T 6F 09 00 00 E3 D5 21 37 10 CD B7 06 21 05 00 E5 +R 00 00 00 00 00 07 01 00 00 0A 00 00 +T 7B 09 00 00 21 05 07 E5 11 37 10 21 71 02 CD +R 00 00 00 00 00 09 01 00 00 0C 00 00 +T 86 09 00 00 00 00 21 00 00 E5 21 44 AC E5 ED 5B +R 00 00 00 00 02 04 04 00 +T 92 09 00 00 2C 10 2A 2E 10 CD 00 00 F1 E3 D5 21 +R 00 00 00 00 00 04 01 00 00 07 01 00 02 0A 08 00 +T 9E 09 00 00 37 10 CD B7 06 21 05 00 E5 21 05 0F +R 00 00 00 00 00 04 01 00 00 07 00 00 +T AA 09 00 00 E5 11 37 10 21 71 02 CD 00 00 2A +R 00 00 00 00 00 06 01 00 00 09 00 00 02 0C 04 00 +T B5 09 00 00 2E 10 E5 2A 2C 10 E5 DD 5E FC DD 56 +R 00 00 00 00 00 04 01 00 00 08 01 00 +T C1 09 00 00 FD DD 6E FE DD 66 FF CD DD 07 DD F9 +R 00 00 00 00 00 0C 00 00 +T CD 09 00 00 DD E1 C9 +R 00 00 00 00 +T D0 09 00 00 +R 00 00 00 00 +T D0 09 00 00 3B CD 05 00 CD C8 05 3A 00 00 3C 20 +R 00 00 00 00 00 06 00 00 00 09 00 00 00 0C 02 00 +T DC 09 00 00 0D CD 2E 02 B7 3E 01 20 02 3E 02 +R 00 00 00 00 00 06 00 00 +T E7 09 00 00 +R 00 00 00 00 +T E7 09 00 00 32 00 00 +R 00 00 00 00 00 05 02 00 +T EA 09 00 00 +R 00 00 00 00 +T EA 09 00 00 3A 00 00 3D 28 07 33 C3 89 05 C3 +R 00 00 00 00 00 05 02 00 00 0C 00 00 +T F5 09 00 00 DB 0A R 00 00 00 00 00 04 00 00 -T AD 09 00 00 +T F7 09 00 00 R 00 00 00 00 -T AD 09 00 00 ED 73 01 10 32 08 10 ED 43 0A 10 08 +T F7 09 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 02 0A 00 00 2F 10 CD 32 03 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 0E 0A 00 00 99 20 07 33 C3 9C 05 C3 DB 0A +R 00 00 00 00 00 09 00 00 00 0C 00 00 +T 18 0A 00 00 +R 00 00 00 00 +T 18 0A 00 00 33 C3 B2 05 +R 00 00 00 00 00 06 00 00 +T 1C 0A 00 00 +R 00 00 00 00 +T 1C 0A 00 00 21 71 02 CD 00 00 CD ED 05 CD +R 00 00 00 00 00 05 00 00 02 08 05 00 00 0B 00 00 +T 26 0A 00 00 64 07 21 31 10 36 21 CD 60 08 FD 21 +R 00 00 00 00 00 04 00 00 00 07 01 00 00 0C 00 00 +T 32 0A 00 00 00 00 FD 39 FD 36 00 00 +R 00 00 00 00 +T 3A 0A 00 00 +R 00 00 00 00 +T 3A 0A 00 00 76 FD 21 00 00 FD 39 FD 34 00 FD 7E +R 00 00 00 00 +T 46 0A 00 00 00 D6 0A 38 07 FD 36 00 00 CD 60 08 +R 00 00 00 00 00 0E 00 00 +T 52 0A 00 00 +R 00 00 00 00 +T 52 0A 00 00 CD 00 00 B7 28 27 3E A2 CD 0E 00 11 +R 00 00 00 00 02 05 09 00 00 0D 00 00 +T 5E 0A 00 00 10 27 21 00 00 CD DE 01 3E E4 CD +R 00 00 00 00 00 0A 00 00 +T 69 0A 00 00 0E 00 11 10 27 21 00 00 CD DE 01 21 +R 00 00 00 00 00 04 00 00 00 0D 00 00 +T 75 0A 00 00 71 02 CD 00 00 3E 02 CD 00 00 +R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00 +T 7F 0A 00 00 +R 00 00 00 00 +T 7F 0A 00 00 CD 00 00 B7 28 27 3E A2 CD 0E 00 11 +R 00 00 00 00 02 05 0F 00 00 0D 00 00 +T 8B 0A 00 00 10 27 21 00 00 CD DE 01 3E E4 CD +R 00 00 00 00 00 0A 00 00 +T 96 0A 00 00 0E 00 11 10 27 21 00 00 CD DE 01 21 +R 00 00 00 00 00 04 00 00 00 0D 00 00 +T A2 0A 00 00 71 02 CD 00 00 3E 04 CD 00 00 +R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00 +T AC 0A 00 00 +R 00 00 00 00 +T AC 0A 00 00 CD 00 00 B7 28 88 3E A2 CD 0E 00 11 +R 00 00 00 00 02 05 0D 00 00 0D 00 00 +T B8 0A 00 00 10 27 21 00 00 CD DE 01 3E E4 CD +R 00 00 00 00 00 0A 00 00 +T C3 0A 00 00 0E 00 11 10 27 21 00 00 CD DE 01 21 +R 00 00 00 00 00 04 00 00 00 0D 00 00 +T CF 0A 00 00 71 02 CD 00 00 AF CD 00 00 C3 +R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0B 00 00 +T D9 0A 00 00 3A 0A +R 00 00 00 00 00 04 00 00 +T DB 0A 00 00 +R 00 00 00 00 +T DB 0A 00 00 33 C9 +R 00 00 00 00 +T DD 0A 00 00 +R 00 00 00 00 +T DD 0A 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 B9 09 00 00 32 07 10 22 03 10 ED 53 05 10 3A +T E9 0A 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 C4 09 00 00 08 10 B7 CA DA 08 3A 08 10 D6 03 CA +T F4 0A 00 00 07 10 B7 CA D0 09 3A 07 10 D6 03 CA R 00 00 00 00 00 04 01 00 00 08 00 00 00 0B 01 00 -T D0 09 00 00 4F 05 AF C3 00 00 +T 00 0B 00 00 76 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 +T 00 00 00 00 FF +R 00 00 07 00 diff --git a/obj/out.sym b/obj/out.sym index 9e1a444..a2f8b6c 100644 --- a/obj/out.sym +++ b/obj/out.sym @@ -63,76 +63,81 @@ Hexadecimal [32-Bits] Symbol Table - 0 ___str_11 00000793 R - 0 ___str_12 0000079D R - 0 ___str_13 000007A5 R - 0 ___str_14 000007AC R - 0 ___str_15 000007B2 R - 0 ___str_9 000005F0 R + 0 ___str_11 000007BA R + 0 ___str_12 000007C4 R + 0 ___str_13 000007CC R + 0 ___str_14 000007D3 R + 0 ___str_15 000007D9 R + 0 ___str_9 00000617 R __divuchar ******** GX __divuint ******** GX __divulong ******** GX __moduchar ******** GX __moduint ******** GX __modulong ******** GX - 0 __str_0 0000028C R - 0 __str_1 00000296 R - 0 __str_2 00000297 R - 0 __str_3 000002AD R - 0 __str_4 000002CD R - 0 __str_5 000002EB R - 0 __str_6 00000300 R - 0 __str_7 0000030E R - 0 __str_8 00000317 R - 0 _about 0000054F GR - 1 _call_type 00001008 GR - 0 _copy_file_name 000005A1 GR + __mullong ******** GX + 0 __str_0 00000295 R + 0 __str_1 0000029F R + 0 __str_2 000002A0 R + 0 __str_3 000002B6 R + 0 __str_4 000002D6 R + 0 __str_5 000002F4 R + 0 __str_6 00000309 R + 0 __str_7 00000317 R + 0 __str_8 00000320 R + 7 __xinit__state_esp 00000000 R + 0 _about 00000576 GR + 1 _barbuf 0000103C R + 1 _call_type 00001007 GR + 0 _copy_file_name 000005C8 GR 1 _decbuf 00001034 R - 0 _err_no_esp 00000232 GR - 0 _err_out_of_mem 00000244 GR - 0 _err_playback 00000256 GR - 0 _error_esp 00000562 GR - 0 _error_oom 00000575 GR - 0 _error_playback 0000058B GR - 0 _esp_cmd 00000005 GR - 0 _esp_create_obj 000001F7 GR - 0 _esp_init 00000225 GR - 0 _esp_rd_end 0000018B 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 000001D5 GR - 0 _esp_wait_status 0000019A GR - 0 _esp_wr_end 00000118 GR - 0 _esp_wr_reg32 000000E8 GR - 0 _esp_wr_reg8 000000D1 GR - 1 _file_ext 00001007 GR - 1 _file_name 0000100C GR - 1 _filesize 00001003 GR - 1 _fs_buf 00000001 GR + 0 _draw_progress_bar 000007DD GR + 0 _err_no_esp 0000023B GR + 0 _err_out_of_mem 0000024D GR + 0 _err_playback 0000025F GR + 0 _error_esp 00000589 GR + 0 _error_oom 0000059C GR + 0 _error_playback 000005B2 GR + 0 _esp_cmd 0000000E GR + 0 _esp_create_obj 00000200 GR + 0 _esp_init 0000022E GR + 0 _esp_rd_end 00000194 GR + 0 _esp_rd_reg32 00000040 GR + 0 _esp_rd_reg8 00000027 GR + 0 _esp_rd_regs 000000AE GR + 0 _esp_send_dma 00000130 GR + 0 _esp_wait_busy 000001DE GR + 0 _esp_wait_status 000001A3 GR + 0 _esp_wr_end 00000121 GR + 0 _esp_wr_reg32 000000F1 GR + 0 _esp_wr_reg8 000000DA GR + 1 _file_ext 00001006 GR + 1 _file_name 0000100B GR + 1 _filesize 00001002 GR + 1 _fs_buf 00000000 GR 1 _hexbuf 00001032 R - 1 _last_esp_status 00001009 GR - 0 _main 000009AD GR - 0 _main_start 000008DA GR - 1 _p_file_name 0000100A GR - 0 _play_xm 00000329 GR - 0 _put_dec3 00000633 GR + 1 _last_esp_status 00001008 GR + 1 _last_track_status 00001031 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 _put_hex2 000005F6 GR - 0 _put_hex2_hexch_10000_105 00000622 R - 0 _put_time 00000690 GR - 1 _ret_sp 00001001 GR - 1 _state_esp 00000000 GR + 0 _main 00000ADD GR + 0 _main_start 000009D0 GR + 1 _p_file_name 00001009 GR + 0 _play_xm 00000332 GR + 0 _put_dec3 0000065A GR + 0 _put_hex2 0000061D GR + 0 _put_hex2_hexch_10000_106 00000649 R + 0 _put_time 000006B7 GR + 1 _ret_sp 00001000 GR + 2 _state_esp 00000000 GR _strlen ******** GX 1 _timebuf 00001037 R - 1 _total_samples 0000102D GR - 0 _wait_esc_key 0000053E GR - 0 _wait_frames 00000546 GR + 1 _total_samples 0000102C GR + 0 _wait_esc_key 00000565 GR + 0 _wait_frames 0000056D GR 0 _wc_exit 00000000 GR _wc_key_esc ******** GX _wc_key_pgdn ******** GX @@ -142,25 +147,26 @@ Symbol Table _wc_prsrw_attr ******** GX _wc_prwow ******** GX _wc_rresb ******** GX - 0 _win_about 0000027A GR - 0 _win_xm 00000268 GR - 0 _xm_draw_static_labels 000005C6 GR - 0 _xm_draw_stats_labels 0000073D GR - 1 _xm_handle 00001031 GR - 0 _xm_update_info 000007B6 GR + 0 _wc_set_freq_14mhz 00000005 GR + 0 _win_about 00000283 GR + 0 _win_xm 00000271 GR + 0 _xm_draw_static_labels 000005ED GR + 0 _xm_draw_stats_labels 00000764 GR + 1 _xm_handle 00001030 GR + 0 _xm_update_info 00000860 GR ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 4 Hexadecimal [32-Bits] Area Table - 0 _CODE size 9D6 flags 0 - 1 _DATA size 103C flags 0 - 2 _INITIALIZED size 0 flags 0 + 0 _CODE size B06 flags 0 + 1 _DATA size 105E flags 0 + 2 _INITIALIZED size 1 flags 0 3 _DABS size 0 flags 8 4 _HOME size 0 flags 0 5 _GSINIT size 0 flags 0 6 _GSFINAL size 0 flags 0 - 7 _INITIALIZER size 0 flags 0 + 7 _INITIALIZER size 1 flags 0 8 _CABS size 0 flags 8 diff --git a/src/main.c b/src/main.c index 49d4c99..3683805 100644 --- a/src/main.c +++ b/src/main.c @@ -12,12 +12,20 @@ // This used to be `const u8 state_esp = 0;`, written to via `*(u8*)&state_esp` // as a code-size trick (skip GSINIT zero-init - a const's value is already // known at compile time). That's undefined behavior (modifying a const -// object), and SDCC 4.6.0's more aggressive optimizer actually exploits it: -// it folds `state_esp != 1` to a compile-time-constant `true` (since the -// const's initializer is 0), permanently ignoring the "write" - which is -// exactly why esp32 detection always failed after the 4.0.0->4.6.0 bump. -// Plain (non-const) global; BSS zero-init already makes it start at 0. -u8 state_esp; +// object), and SDCC 4.6.0's more aggressive optimizer exploited it (folded +// `state_esp != 1` to a compile-time-constant `true`), so it was replaced +// with a plain global on the assumption that BSS zero-init makes it start +// at 0. That assumption was WRONG for this project: crt0.s never calls +// GSINIT (just `jp _main`), and hex2bin fills any address with no real hex +// record with 0xFF, not 0 - confirmed by reading obj/out.bin directly at +// state_esp's address (0xA800), which held 0xFF. So a truly-uninitialized +// global here always reads 0xFF on load, `!state_esp` is always false, +// esp_init() never runs, and error_esp() fires unconditionally - this is +// what actually broke esp32 detection, not (only) the const-UB optimizer +// fold. Fix: give it a real (non-zero) initializer so SDCC places it in the +// _DATA area with actual bytes in the loaded blob (like the original const +// did), and check against the real fill/sentinel value instead of 0. +u8 state_esp = 0xFF; #define FS_BUF_SIZE 0x1000 u8 fs_buf[FS_BUF_SIZE]; // at 0xAE00 (_PAGE2 to get page) @@ -36,6 +44,12 @@ char file_name[33]; u32 total_samples; u8 xm_handle; +// Set right after a successful play_xm() (track is genuinely PLAYING at that +// point); compared against TRACK_GET_INFO's ESP_REG_TRACK_STATUS on every +// poll so a PLAYING->STOPPED transition (loop limit reached, track stopped +// itself) can be told apart from a track that was simply never started. +u8 last_track_status; + // --- Extensions --------------------------- // file_ext is the matched entry's index into wc_h.c's ext[] table, so this // enum must stay in the same order as that array (XM, XMZ, S3M). @@ -196,12 +210,27 @@ bool play_xm() } esp_cmd(ESP_CMD_TRACK_INIT); - esp_wait_busy(10000); + // TRACK_INIT now blocks on the firmware side while it measures the song's + // total sample count, capped at XM_MEASURE_MAX_US = 5s (tracker.cpp) - so + // this needs to comfortably cover 5s of real time, not the ~150ms the old + // 10000-iteration budget worked out to at 14MHz (each esp_wait_busy() + // iteration is a raw SPI status-register read, not a real-time wait). + // Iteration count isn't hardware-calibrated, so this is padded well past + // the 5s firmware cap - bump further if TRACK_INIT still times out. + esp_wait_busy(1000000); last_esp_status = esp_rd_reg8(ESP_REG_STATUS); if (last_esp_status != ESP_ST_READY) return false; + // Play just one loop instead of looping forever. TRACK_INIT resets the + // limit back to 0 (infinite), so this must be (re)issued after every + // TRACK_INIT/TRACK_RESET, not just once. + esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); + esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1); + esp_cmd(ESP_CMD_TRACK_SET_PARAMS); + esp_wait_busy(10000); + esp_cmd(ESP_CMD_TRACK_PLAY); esp_wait_busy(10000); @@ -339,7 +368,7 @@ void xm_draw_stats_labels() // wc_prsrw()'s text pointer MUST be in #8000-#BFFF (our own code/data // window) - but this plugin runs on WC's OWN stack, which lives in a -// DIFFERENT window (#4000-#7FFF, per plugins/READ_ME.TXT: "стек... в Win 1 +// DIFFERENT window (#4000-#7FFF, per plugins/READ_ME.TXT: "стек... РІ Win 1 // #4000-#7FFF"). Local (stack-allocated) char buffers passed to wc_prsrw() // are therefore in the WRONG memory window entirely - this is almost // certainly why xm_draw_static_labels() (string literal + a global array, @@ -349,10 +378,33 @@ void xm_draw_stats_labels() static char hexbuf[2]; static char decbuf[3]; static char timebuf[5]; +static char barbuf[BAR_WIDTH]; + +#define BAR_FILLED_CH '=' +#define BAR_EMPTY_CH '-' + +void draw_progress_bar(u32 samples, u32 total) +{ + u16 filled, i; + + if (total) + { + filled = (u16)(((u32)samples * BAR_WIDTH) / total); + if (filled > BAR_WIDTH) + filled = BAR_WIDTH; + } + else + filled = 0; // total length unknown (measurement timed out) - show empty + + for (i = 0; i < BAR_WIDTH; i++) + barbuf[i] = (i < filled) ? BAR_FILLED_CH : BAR_EMPTY_CH; + + wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); +} void xm_update_info() { - u8 pattern, row; + u8 pattern, row, status; u16 bpm; u32 samples; @@ -360,6 +412,19 @@ void xm_update_info() esp_cmd(ESP_CMD_TRACK_GET_INFO); esp_wait_busy(2000); + // TRACK_GET_INFO already writes ESP_REG_TRACK_STATUS (same register + // TRACK_GET_STATE reports), so no separate command is needed to catch the + // PLAYING->STOPPED transition once the loop-count limit is reached. + status = esp_rd_reg8(ESP_REG_TRACK_STATUS); + if (last_track_status == TRACK_OBJ_ST_PLAYING && status == TRACK_OBJ_ST_STOPPED) + { + esp_cmd(ESP_CMD_KILL_OBJECTS); + esp_wait_busy(10000); + wc_rresb(&win_xm); + wc_exit(WC_NEXT_FILE); + } + last_track_status = status; + pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); row = esp_rd_reg8(ESP_REG_TRACK_ROW); esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); @@ -383,17 +448,23 @@ void xm_update_info() put_time(timebuf, total_samples / 44100UL); wc_prsrw(&win_xm, timebuf, ROW_TIME, 15, 5); - // Progress bar skipped for now per user request - reintroduce as its own - // separate step once Pattern/Row/BPM/Time are confirmed stable. + draw_progress_bar(samples, total_samples); + } void main_start() { u8 frame_ctr; + // Pin the Z80 clock for the whole plugin lifetime - our esp_wait_busy() + // timeouts are iteration counters, not real time, so leaving WC's turbo + // setting as-is would make esp32 SPI timing margins depend on whatever + // frequency happened to be active before the plugin started. + wc_set_freq_14mhz(); + copy_file_name(); - if (!state_esp) + if (state_esp == 0xFF) state_esp = esp_init() ? 1 : 2; if (state_esp != 1) @@ -419,7 +490,8 @@ void main_start() wc_prwow(&win_xm); xm_draw_static_labels(); xm_draw_stats_labels(); - xm_update_info(); // single call for now - periodic re-calling is a separate step, once this is confirmed stable + last_track_status = TRACK_OBJ_ST_PLAYING; + xm_update_info(); frame_ctr = 0; @@ -430,14 +502,11 @@ void main_start() halt __endasm; - // DEBUG: periodic xm_update_info() disabled - isolating whether repeated - // wc_prsrw() calls over time (not just one initial call) is what causes - // the screen to fill with garbage after a while. - // if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz - // { - // frame_ctr = 0; - // xm_update_info(); - // } + if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz + { + frame_ctr = 0; + xm_update_info(); + } if (wc_key_pgdn()) // PgDn - unload and go to next file { diff --git a/src/wc_api.c b/src/wc_api.c index 76b5a5c..c0f7eb9 100644 --- a/src/wc_api.c +++ b/src/wc_api.c @@ -39,3 +39,25 @@ void wc_exit(u8 rc) __naked ret __endasm; } + +// _TURBOPL (0x0E) is also ours - not wrapped by vgm_wc_api.lib. Our +// esp_wait_busy()/esp_wr_end()/etc. timeouts are plain iteration counters, +// not real-time based, so they implicitly assume a specific Z80 clock; if WC +// was left in turbo mode before the plugin started, the same iteration +// budget covers less real time and could cut SPI exchanges with the esp32 +// short. Pinning a known frequency for the whole plugin lifetime removes +// that as a variable - set once at startup, left as-is on exit (per user +// request, not restored to whatever WC had before). No parameters (avoids +// depending on exactly how two u8 args would be register-assigned under +// --sdcccall 1 - not worth the risk for a fixed value), and IX isn't +// preserved since _WCAPI clobbering it is already tolerated by every other +// call in this file. +void wc_set_freq_14mhz() __naked +{ + __asm + ld b, #0x00 ; type: Z80 frequency + ld c, #0x02 ; %10 = 14 MHz + ld a, #_TURBOPL + jp _WCAPI + __endasm; +}