Files
xmplayer/obj/out.lst
T
alexandClaude Sonnet 5 ee64fb85a9 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 <noreply@anthropic.com>
2026-08-30 21:40:24 +03:00

2035 lines
119 KiB
Plaintext

1 ;--------------------------------------------------------
2 ; File Created by SDCC : free open source ISO C Compiler
3 ; Version 4.6.0 #16555 (MINGW64)
4 ;--------------------------------------------------------
5 .module main
6
7 .optsdcc -mz80 sdcccall(1)
8 ;--------------------------------------------------------
9 ; Public variables in this module
10 ;--------------------------------------------------------
11 .globl _main
12 .globl _main_start
13 .globl _xm_update_info
14 .globl _draw_progress_bar
15 .globl _xm_draw_stats_labels
16 .globl _put_time
17 .globl _put_dec3
18 .globl _put_hex2
19 .globl _xm_draw_static_labels
20 .globl _copy_file_name
21 .globl _error_playback
22 .globl _error_oom
23 .globl _error_esp
24 .globl _about
25 .globl _wait_frames
26 .globl _wait_esc_key
27 .globl _play_xm
28 .globl _esp_init
29 .globl _esp_create_obj
30 .globl _esp_wait_status
31 .globl _esp_rd_end
32 .globl _esp_send_dma
33 .globl _esp_wr_end
34 .globl _esp_wr_reg32
35 .globl _esp_wr_reg8
36 .globl _esp_rd_regs
37 .globl _esp_rd_reg32
38 .globl _esp_rd_reg8
39 .globl _esp_cmd
40 .globl _wc_set_freq_14mhz
41 .globl _wc_exit
42 .globl _wc_prsrw_attr
43 .globl _wc_prsrw
44 .globl _wc_key_pgdn
45 .globl _wc_key_pgup
46 .globl _wc_key_esc
47 .globl _wc_load512
48 .globl _wc_rresb
49 .globl _wc_prwow
50 .globl _strlen
51 .globl _state_esp
52 .globl _last_track_status
53 .globl _xm_handle
54 .globl _total_samples
55 .globl _file_name
56 .globl _p_file_name
57 .globl _last_esp_status
58 .globl _call_type
59 .globl _file_ext
60 .globl _filesize
61 .globl _ret_sp
62 .globl _fs_buf
63 .globl _win_about
64 .globl _win_xm
65 .globl _err_playback
66 .globl _err_out_of_mem
67 .globl _err_no_esp
68 .globl _esp_wait_busy
69 ;--------------------------------------------------------
70 ; special function registers
71 ;--------------------------------------------------------
00000057 72 _SPI_DATA = 0x0057
00000077 73 _SPI_CTRL = 0x0077
000000FE 74 _BORDER = 0x00fe
000000AF 75 _TS_VCONFIG = 0x00af
000000AF 76 _TS_STATUS = 0x00af
000001AF 77 _TS_VPAGE = 0x01af
000002AF 78 _TS_GXOFFSL = 0x02af
000003AF 79 _TS_GXOFFSH = 0x03af
000004AF 80 _TS_GYOFFSL = 0x04af
000005AF 81 _TS_GYOFFSH = 0x05af
000006AF 82 _TS_TSCONFIG = 0x06af
000007AF 83 _TS_PALSEL = 0x07af
00000FAF 84 _TS_BORDER = 0x0faf
000010AF 85 _TS_PAGE0 = 0x10af
000011AF 86 _TS_PAGE1 = 0x11af
000012AF 87 _TS_PAGE2 = 0x12af
000013AF 88 _TS_PAGE3 = 0x13af
000015AF 89 _TS_FMADDR = 0x15af
000016AF 90 _TS_TMPAGE = 0x16af
000017AF 91 _TS_T0GPAGE = 0x17af
000018AF 92 _TS_T1GPAGE = 0x18af
000019AF 93 _TS_SGPAGE = 0x19af
00001AAF 94 _TS_DMASADDRL = 0x1aaf
00001BAF 95 _TS_DMASADDRH = 0x1baf
00001CAF 96 _TS_DMASADDRX = 0x1caf
00001DAF 97 _TS_DMADADDRL = 0x1daf
00001EAF 98 _TS_DMADADDRH = 0x1eaf
00001FAF 99 _TS_DMADADDRX = 0x1faf
000020AF 100 _TS_SYSCONFIG = 0x20af
000021AF 101 _TS_MEMCONFIG = 0x21af
000022AF 102 _TS_HSINT = 0x22af
000023AF 103 _TS_VSINTL = 0x23af
000024AF 104 _TS_VSINTH = 0x24af
000025AF 105 _TS_DMAWPD = 0x25af
000026AF 106 _TS_DMALEN = 0x26af
000027AF 107 _TS_DMACTR = 0x27af
000027AF 108 _TS_DMASTATUS = 0x27af
000028AF 109 _TS_DMANUM = 0x28af
000029AF 110 _TS_FDDVIRT = 0x29af
00002AAF 111 _TS_INTMASK = 0x2aaf
00002BAF 112 _TS_CACHECONF = 0x2baf
00002CAF 113 _TS_DMANUMH = 0x2caf
00002DAF 114 _TS_DMAWPA = 0x2daf
000040AF 115 _TS_T0XOFFSL = 0x40af
000041AF 116 _TS_T0XOFFSH = 0x41af
000042AF 117 _TS_T0YOFFSL = 0x42af
000043AF 118 _TS_T0YOFFSH = 0x43af
000044AF 119 _TS_T1XOFFSL = 0x44af
000045AF 120 _TS_T1XOFFSH = 0x45af
000046AF 121 _TS_T1YOFFSL = 0x46af
000047AF 122 _TS_T1YOFFSH = 0x47af
123 ;--------------------------------------------------------
124 ; ram data
125 ;--------------------------------------------------------
126 .area _DATA
00000000 127 _fs_buf::
00000000 128 .ds 4096
00001000 129 _ret_sp::
00001000 130 .ds 2
00001002 131 _filesize::
00001002 132 .ds 4
00001006 133 _file_ext::
00001006 134 .ds 1
00001007 135 _call_type::
00001007 136 .ds 1
00001008 137 _last_esp_status::
00001008 138 .ds 1
00001009 139 _p_file_name::
00001009 140 .ds 2
0000100B 141 _file_name::
0000100B 142 .ds 33
0000102C 143 _total_samples::
0000102C 144 .ds 4
00001030 145 _xm_handle::
00001030 146 .ds 1
00001031 147 _last_track_status::
00001031 148 .ds 1
00001032 149 _hexbuf:
00001032 150 .ds 2
00001034 151 _decbuf:
00001034 152 .ds 3
00001037 153 _timebuf:
00001037 154 .ds 5
0000103C 155 _barbuf:
0000103C 156 .ds 34
157 ;--------------------------------------------------------
158 ; ram data
159 ;--------------------------------------------------------
160 .area _INITIALIZED
00000000 161 _state_esp::
00000000 162 .ds 1
163 ;--------------------------------------------------------
164 ; absolute ram data
165 ;--------------------------------------------------------
166 .area _DABS (ABS)
167 .area _DABS (ABS)
168 ;--------------------------------------------------------
169 ; global & static initialisations
170 ;--------------------------------------------------------
171 .area _HOME
172 .area _GSINIT
173 .area _GSFINAL
174 .area _GSINIT
175 ;--------------------------------------------------------
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_wr_end
437 ; ---------------------------------
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_rd_end
523 ; ---------------------------------
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
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
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
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
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
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
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
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 about
1123 ; ---------------------------------
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
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
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)