Files
xmplayer/obj/out.lst
T

2372 lines
139 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_set_status_attr
20 .globl _xm_draw_static_labels
21 .globl _copy_file_name
22 .globl _error_playback
23 .globl _error_oom
24 .globl _stop_on_error
25 .globl _error_esp
26 .globl _wait_for_manual_exit
27 .globl _leave_playing_and_exit
28 .globl _unload_and_exit
29 .globl _about
30 .globl _wait_frames
31 .globl _wait_esc_key
32 .globl _play_xm
33 .globl _esp_init
34 .globl _esp_create_obj
35 .globl _esp_wait_status
36 .globl _esp_rd_end
37 .globl _esp_send_dma
38 .globl _esp_wr_end
39 .globl _esp_wr_reg32
40 .globl _esp_wr_reg8
41 .globl _esp_rd_regs
42 .globl _esp_rd_reg32
43 .globl _esp_rd_reg8
44 .globl _esp_cmd
45 .globl _wc_exit
46 .globl _wc_prm_pl
47 .globl _wc_gadrw
48 .globl _wc_prsrw_attr
49 .globl _wc_prsrw
50 .globl _wc_key_space
51 .globl _wc_key_pgdn
52 .globl _wc_key_pgup
53 .globl _wc_key_esc
54 .globl _wc_load512
55 .globl _wc_rresb
56 .globl _wc_prwow
57 .globl _strlen
58 .globl _state_esp
59 .globl _bar_attr_ofs
60 .globl _last_track_status
61 .globl _xm_handle
62 .globl _total_samples
63 .globl _file_name
64 .globl _p_file_name
65 .globl _last_esp_status
66 .globl _call_type
67 .globl _file_ext
68 .globl _filesize
69 .globl _ret_sp
70 .globl _fs_buf
71 .globl _win_about
72 .globl _win_xm
73 .globl _esp_wait_busy
74 .globl _xm_set_status
75 .globl _xm_set_status_code
76 ;--------------------------------------------------------
77 ; special function registers
78 ;--------------------------------------------------------
00000057 79 _SPI_DATA = 0x0057
00000077 80 _SPI_CTRL = 0x0077
000000FE 81 _BORDER = 0x00fe
000000AF 82 _TS_VCONFIG = 0x00af
000000AF 83 _TS_STATUS = 0x00af
000001AF 84 _TS_VPAGE = 0x01af
000002AF 85 _TS_GXOFFSL = 0x02af
000003AF 86 _TS_GXOFFSH = 0x03af
000004AF 87 _TS_GYOFFSL = 0x04af
000005AF 88 _TS_GYOFFSH = 0x05af
000006AF 89 _TS_TSCONFIG = 0x06af
000007AF 90 _TS_PALSEL = 0x07af
00000FAF 91 _TS_BORDER = 0x0faf
000010AF 92 _TS_PAGE0 = 0x10af
000011AF 93 _TS_PAGE1 = 0x11af
000012AF 94 _TS_PAGE2 = 0x12af
000013AF 95 _TS_PAGE3 = 0x13af
000015AF 96 _TS_FMADDR = 0x15af
000016AF 97 _TS_TMPAGE = 0x16af
000017AF 98 _TS_T0GPAGE = 0x17af
000018AF 99 _TS_T1GPAGE = 0x18af
000019AF 100 _TS_SGPAGE = 0x19af
00001AAF 101 _TS_DMASADDRL = 0x1aaf
00001BAF 102 _TS_DMASADDRH = 0x1baf
00001CAF 103 _TS_DMASADDRX = 0x1caf
00001DAF 104 _TS_DMADADDRL = 0x1daf
00001EAF 105 _TS_DMADADDRH = 0x1eaf
00001FAF 106 _TS_DMADADDRX = 0x1faf
000020AF 107 _TS_SYSCONFIG = 0x20af
000021AF 108 _TS_MEMCONFIG = 0x21af
000022AF 109 _TS_HSINT = 0x22af
000023AF 110 _TS_VSINTL = 0x23af
000024AF 111 _TS_VSINTH = 0x24af
000025AF 112 _TS_DMAWPD = 0x25af
000026AF 113 _TS_DMALEN = 0x26af
000027AF 114 _TS_DMACTR = 0x27af
000027AF 115 _TS_DMASTATUS = 0x27af
000028AF 116 _TS_DMANUM = 0x28af
000029AF 117 _TS_FDDVIRT = 0x29af
00002AAF 118 _TS_INTMASK = 0x2aaf
00002BAF 119 _TS_CACHECONF = 0x2baf
00002CAF 120 _TS_DMANUMH = 0x2caf
00002DAF 121 _TS_DMAWPA = 0x2daf
000040AF 122 _TS_T0XOFFSL = 0x40af
000041AF 123 _TS_T0XOFFSH = 0x41af
000042AF 124 _TS_T0YOFFSL = 0x42af
000043AF 125 _TS_T0YOFFSH = 0x43af
000044AF 126 _TS_T1XOFFSL = 0x44af
000045AF 127 _TS_T1XOFFSH = 0x45af
000046AF 128 _TS_T1YOFFSL = 0x46af
000047AF 129 _TS_T1YOFFSH = 0x47af
130 ;--------------------------------------------------------
131 ; ram data
132 ;--------------------------------------------------------
133 .area _DATA
00000000 134 _fs_buf::
00000000 135 .ds 4096
00001000 136 _ret_sp::
00001000 137 .ds 2
00001002 138 _filesize::
00001002 139 .ds 4
00001006 140 _file_ext::
00001006 141 .ds 1
00001007 142 _call_type::
00001007 143 .ds 1
00001008 144 _last_esp_status::
00001008 145 .ds 1
00001009 146 _p_file_name::
00001009 147 .ds 2
0000100B 148 _file_name::
0000100B 149 .ds 33
0000102C 150 _total_samples::
0000102C 151 .ds 4
00001030 152 _xm_handle::
00001030 153 .ds 1
00001031 154 _last_track_status::
00001031 155 .ds 1
00001032 156 _status_buf:
00001032 157 .ds 24
0000104A 158 _status_code_buf:
0000104A 159 .ds 24
00001062 160 _hexbuf:
00001062 161 .ds 2
00001064 162 _decbuf:
00001064 163 .ds 3
00001067 164 _timebuf:
00001067 165 .ds 5
0000106C 166 _barbuf:
0000106C 167 .ds 32
0000108C 168 _bar_attr_ofs::
0000108C 169 .ds 2
170 ;--------------------------------------------------------
171 ; ram data
172 ;--------------------------------------------------------
173 .area _INITIALIZED
00000000 174 _state_esp::
00000000 175 .ds 1
176 ;--------------------------------------------------------
177 ; absolute ram data
178 ;--------------------------------------------------------
179 .area _DABS (ABS)
180 .area _DABS (ABS)
181 ;--------------------------------------------------------
182 ; global & static initialisations
183 ;--------------------------------------------------------
184 .area _HOME
185 .area _GSINIT
186 .area _GSFINAL
187 .area _GSINIT
188 ;--------------------------------------------------------
189 ; Home
190 ;--------------------------------------------------------
191 .area _HOME
192 .area _HOME
193 ;--------------------------------------------------------
194 ; code
195 ;--------------------------------------------------------
196 .area _CODE
197 ;src/wc_api.c:47: void wc_exit(u8 rc) __naked
198 ; ---------------------------------
199 ; Function wc_exit
200 ; ---------------------------------
00000000 201 _wc_exit::
202 ;src/wc_api.c:53: __endasm;
00000000 ED 7Br00r10 [20] 203 ld sp, (_ret_sp)
00000004 C9 [10] 204 ret
205 ;src/wc_api.c:54: }
206 ;src/esp32.c:18: void esp_cmd(u8 cmd)
207 ; ---------------------------------
208 ; Function esp_cmd
209 ; ---------------------------------
00000005 210 _esp_cmd::
00000005 4F [ 4] 211 ld c, a
212 ;src/esp32.c:20: SPI_CTRL = SPI_ESP_CS_ON;
00000006 3E 13 [ 7] 213 ld a, #0x13
00000008 D3 77 [11] 214 out (_SPI_CTRL), a
215 ;src/esp32.c:21: SPI_DATA = ESP_SPI_CMD_WR_REGS;
0000000A 3E 01 [ 7] 216 ld a, #0x01
0000000C D3 57 [11] 217 out (_SPI_DATA), a
218 ;src/esp32.c:22: SPI_DATA = ESP_REG_COMMAND;
0000000E AF [ 4] 219 xor a, a
0000000F D3 57 [11] 220 out (_SPI_DATA), a
221 ;src/esp32.c:23: SPI_DATA; // dummy
00000011 DB 57 [11] 222 in a, (_SPI_DATA)
223 ;src/esp32.c:24: SPI_DATA = cmd; // Command
00000013 79 [ 4] 224 ld a, c
00000014 D3 57 [11] 225 out (_SPI_DATA), a
226 ;src/esp32.c:25: SPI_DATA = ESP_ST_IDLE; // Reset status
00000016 AF [ 4] 227 xor a, a
00000017 D3 57 [11] 228 out (_SPI_DATA), a
229 ;src/esp32.c:26: SPI_CTRL = SPI_ESP_CS_OFF;
00000019 3E 03 [ 7] 230 ld a, #0x03
0000001B D3 77 [11] 231 out (_SPI_CTRL), a
232 ;src/esp32.c:27: }
0000001D C9 [10] 233 ret
234 ;src/esp32.c:29: u8 esp_rd_reg8(u8 reg)
235 ; ---------------------------------
236 ; Function esp_rd_reg8
237 ; ---------------------------------
0000001E 238 _esp_rd_reg8::
0000001E 4F [ 4] 239 ld c, a
240 ;src/esp32.c:31: SPI_CTRL = SPI_ESP_CS_ON;
0000001F 3E 13 [ 7] 241 ld a, #0x13
00000021 D3 77 [11] 242 out (_SPI_CTRL), a
243 ;src/esp32.c:32: SPI_DATA = ESP_SPI_CMD_RD_REGS;
00000023 3E 02 [ 7] 244 ld a, #0x02
00000025 D3 57 [11] 245 out (_SPI_DATA), a
246 ;src/esp32.c:33: SPI_DATA = reg;
00000027 79 [ 4] 247 ld a, c
00000028 D3 57 [11] 248 out (_SPI_DATA), a
249 ;src/esp32.c:34: SPI_DATA; // dummy
0000002A DB 57 [11] 250 in a, (_SPI_DATA)
251 ;src/esp32.c:35: SPI_DATA; // dummy
0000002C DB 57 [11] 252 in a, (_SPI_DATA)
253 ;src/esp32.c:36: u8 rc = SPI_DATA;
0000002E DB 57 [11] 254 in a, (_SPI_DATA)
00000030 4F [ 4] 255 ld c, a
256 ;src/esp32.c:37: SPI_CTRL = SPI_ESP_CS_OFF;
00000031 3E 03 [ 7] 257 ld a, #0x03
00000033 D3 77 [11] 258 out (_SPI_CTRL), a
259 ;src/esp32.c:39: return rc;
00000035 79 [ 4] 260 ld a, c
261 ;src/esp32.c:40: }
00000036 C9 [10] 262 ret
263 ;src/esp32.c:42: u32 esp_rd_reg32(u8 reg)
264 ; ---------------------------------
265 ; Function esp_rd_reg32
266 ; ---------------------------------
00000037 267 _esp_rd_reg32::
00000037 DD E5 [15] 268 push ix
00000039 DD 21 00 00 [14] 269 ld ix, #0
0000003D DD 39 [15] 270 add ix, sp
0000003F F5 [11] 271 push af
00000040 F5 [11] 272 push af
00000041 4F [ 4] 273 ld c, a
274 ;src/esp32.c:44: SPI_CTRL = SPI_ESP_CS_ON;
00000042 3E 13 [ 7] 275 ld a, #0x13
00000044 D3 77 [11] 276 out (_SPI_CTRL), a
277 ;src/esp32.c:45: SPI_DATA = ESP_SPI_CMD_RD_REGS;
00000046 3E 02 [ 7] 278 ld a, #0x02
00000048 D3 57 [11] 279 out (_SPI_DATA), a
280 ;src/esp32.c:46: SPI_DATA = reg;
0000004A 79 [ 4] 281 ld a, c
0000004B D3 57 [11] 282 out (_SPI_DATA), a
283 ;src/esp32.c:47: SPI_DATA; // dummy
0000004D DB 57 [11] 284 in a, (_SPI_DATA)
285 ;src/esp32.c:48: SPI_DATA; // dummy
0000004F DB 57 [11] 286 in a, (_SPI_DATA)
287 ;src/esp32.c:49: u32 rc = SPI_DATA;
00000051 DB 57 [11] 288 in a, (_SPI_DATA)
00000053 4F [ 4] 289 ld c, a
290 ;src/esp32.c:50: rc |= (u32)SPI_DATA << 8;
00000054 DB 57 [11] 291 in a, (_SPI_DATA)
00000056 57 [ 4] 292 ld d, a
00000057 59 [ 4] 293 ld e, c
294 ;src/esp32.c:51: rc |= (u32)SPI_DATA << 16;
00000058 DB 57 [11] 295 in a, (_SPI_DATA)
0000005A DD 77 FC [19] 296 ld -4 (ix), a
0000005D AF [ 4] 297 xor a, a
0000005E DD 77 FD [19] 298 ld -3 (ix), a
00000061 DD 77 FE [19] 299 ld -2 (ix), a
00000064 DD 77 FF [19] 300 ld -1 (ix), a
00000067 DD 7E FC [19] 301 ld a, -4 (ix)
0000006A DD 77 FE [19] 302 ld -2 (ix), a
0000006D AF [ 4] 303 xor a, a
0000006E DD 77 FF [19] 304 ld -1 (ix), a
00000071 DD 77 FC [19] 305 ld -4 (ix), a
00000074 DD 77 FD [19] 306 ld -3 (ix), a
00000077 DD 6E FE [19] 307 ld l, -2 (ix)
308 ;src/esp32.c:52: rc |= (u32)SPI_DATA << 24;
0000007A DB 57 [11] 309 in a, (_SPI_DATA)
0000007C DD 77 FC [19] 310 ld -4 (ix), a
0000007F AF [ 4] 311 xor a, a
00000080 DD 77 FD [19] 312 ld -3 (ix), a
00000083 DD 77 FE [19] 313 ld -2 (ix), a
00000086 DD 77 FF [19] 314 ld -1 (ix), a
00000089 DD 7E FC [19] 315 ld a, -4 (ix)
0000008C DD 77 FF [19] 316 ld -1 (ix), a
0000008F AF [ 4] 317 xor a, a
00000090 DD 77 FC [19] 318 ld -4 (ix), a
00000093 DD 77 FD [19] 319 ld -3 (ix), a
00000096 DD 77 FE [19] 320 ld -2 (ix), a
00000099 DD 66 FF [19] 321 ld h, -1 (ix)
322 ;src/esp32.c:53: SPI_CTRL = SPI_ESP_CS_OFF;
0000009C 3E 03 [ 7] 323 ld a, #0x03
0000009E D3 77 [11] 324 out (_SPI_CTRL), a
325 ;src/esp32.c:55: return rc;
326 ;src/esp32.c:56: }
000000A0 DD F9 [10] 327 ld sp, ix
000000A2 DD E1 [14] 328 pop ix
000000A4 C9 [10] 329 ret
330 ;src/esp32.c:58: void esp_rd_regs(u8 reg, void *data, u8 size)
331 ; ---------------------------------
332 ; Function esp_rd_regs
333 ; ---------------------------------
000000A5 334 _esp_rd_regs::
000000A5 4F [ 4] 335 ld c, a
336 ;src/esp32.c:60: u8 *d = (u8*)data;
337 ;src/esp32.c:62: SPI_CTRL = SPI_ESP_CS_ON;
000000A6 3E 13 [ 7] 338 ld a, #0x13
000000A8 D3 77 [11] 339 out (_SPI_CTRL), a
340 ;src/esp32.c:63: SPI_DATA = ESP_SPI_CMD_RD_REGS;
000000AA 3E 02 [ 7] 341 ld a, #0x02
000000AC D3 57 [11] 342 out (_SPI_DATA), a
343 ;src/esp32.c:64: SPI_DATA = reg;
000000AE 79 [ 4] 344 ld a, c
000000AF D3 57 [11] 345 out (_SPI_DATA), a
346 ;src/esp32.c:65: SPI_DATA; // dummy
000000B1 DB 57 [11] 347 in a, (_SPI_DATA)
348 ;src/esp32.c:66: SPI_DATA; // dummy
000000B3 DB 57 [11] 349 in a, (_SPI_DATA)
350 ;src/esp32.c:67: while (size--) *d++ = SPI_DATA;
000000B5 FD 21 02 00 [14] 351 ld iy, #2
000000B9 FD 39 [15] 352 add iy, sp
000000BB FD 4E 00 [19] 353 ld c, 0 (iy)
000000BE 354 00101$:
000000BE 79 [ 4] 355 ld a, c
000000BF 0D [ 4] 356 dec c
000000C0 B7 [ 4] 357 or a, a
000000C1 28 07 [12] 358 jr z, 00103$
000000C3 DB 57 [11] 359 in a, (_SPI_DATA)
000000C5 12 [ 7] 360 ld (de), a
000000C6 13 [ 6] 361 inc de
000000C7 C3rBEr00 [10] 362 jp 00101$
000000CA 363 00103$:
364 ;src/esp32.c:68: SPI_CTRL = SPI_ESP_CS_OFF;
000000CA 3E 03 [ 7] 365 ld a, #0x03
000000CC D3 77 [11] 366 out (_SPI_CTRL), a
367 ;src/esp32.c:69: }
000000CE E1 [10] 368 pop hl
000000CF 33 [ 6] 369 inc sp
000000D0 E9 [ 4] 370 jp (hl)
371 ;src/esp32.c:71: void esp_wr_reg8(u8 reg, u8 data)
372 ; ---------------------------------
373 ; Function esp_wr_reg8
374 ; ---------------------------------
000000D1 375 _esp_wr_reg8::
000000D1 47 [ 4] 376 ld b, a
000000D2 4D [ 4] 377 ld c, l
378 ;src/esp32.c:73: SPI_CTRL = SPI_ESP_CS_ON;
000000D3 3E 13 [ 7] 379 ld a, #0x13
000000D5 D3 77 [11] 380 out (_SPI_CTRL), a
381 ;src/esp32.c:74: SPI_DATA = ESP_SPI_CMD_WR_REGS;
000000D7 3E 01 [ 7] 382 ld a, #0x01
000000D9 D3 57 [11] 383 out (_SPI_DATA), a
384 ;src/esp32.c:75: SPI_DATA = reg;
000000DB 78 [ 4] 385 ld a, b
000000DC D3 57 [11] 386 out (_SPI_DATA), a
387 ;src/esp32.c:76: SPI_DATA; // dummy
000000DE DB 57 [11] 388 in a, (_SPI_DATA)
389 ;src/esp32.c:77: SPI_DATA = data;
000000E0 79 [ 4] 390 ld a, c
000000E1 D3 57 [11] 391 out (_SPI_DATA), a
392 ;src/esp32.c:78: SPI_CTRL = SPI_ESP_CS_OFF;
000000E3 3E 03 [ 7] 393 ld a, #0x03
000000E5 D3 77 [11] 394 out (_SPI_CTRL), a
395 ;src/esp32.c:79: }
000000E7 C9 [10] 396 ret
397 ;src/esp32.c:81: void esp_wr_reg32(u8 reg, u32 data)
398 ; ---------------------------------
399 ; Function esp_wr_reg32
400 ; ---------------------------------
000000E8 401 _esp_wr_reg32::
000000E8 4F [ 4] 402 ld c, a
403 ;src/esp32.c:83: SPI_CTRL = SPI_ESP_CS_ON;
000000E9 3E 13 [ 7] 404 ld a, #0x13
000000EB D3 77 [11] 405 out (_SPI_CTRL), a
406 ;src/esp32.c:84: SPI_DATA = ESP_SPI_CMD_WR_REGS;
000000ED 3E 01 [ 7] 407 ld a, #0x01
000000EF D3 57 [11] 408 out (_SPI_DATA), a
409 ;src/esp32.c:85: SPI_DATA = reg;
000000F1 79 [ 4] 410 ld a, c
000000F2 D3 57 [11] 411 out (_SPI_DATA), a
412 ;src/esp32.c:86: SPI_DATA; // dummy
000000F4 DB 57 [11] 413 in a, (_SPI_DATA)
414 ;src/esp32.c:87: SPI_DATA = (u8)data;
000000F6 FD 21 02 00 [14] 415 ld iy, #2
000000FA FD 39 [15] 416 add iy, sp
000000FC FD 7E 00 [19] 417 ld a, 0 (iy)
000000FF D3 57 [11] 418 out (_SPI_DATA), a
419 ;src/esp32.c:88: SPI_DATA = (u8)(data >> 8);
00000101 FD 7E 01 [19] 420 ld a, 1 (iy)
00000104 D3 57 [11] 421 out (_SPI_DATA), a
422 ;src/esp32.c:89: SPI_DATA = (u8)(data >> 16);
00000106 FD 7E 02 [19] 423 ld a, 2 (iy)
00000109 D3 57 [11] 424 out (_SPI_DATA), a
425 ;src/esp32.c:90: SPI_DATA = (u8)(data >> 24);
0000010B FD 7E 03 [19] 426 ld a, 3 (iy)
0000010E D3 57 [11] 427 out (_SPI_DATA), a
428 ;src/esp32.c:91: SPI_CTRL = SPI_ESP_CS_OFF;
00000110 3E 03 [ 7] 429 ld a, #0x03
00000112 D3 77 [11] 430 out (_SPI_CTRL), a
431 ;src/esp32.c:92: }
00000114 E1 [10] 432 pop hl
00000115 F1 [10] 433 pop af
00000116 F1 [10] 434 pop af
00000117 E9 [ 4] 435 jp (hl)
436 ;src/esp32.c:94: void esp_wr_end()
437 ; ---------------------------------
438 ; Function esp_wr_end
439 ; ---------------------------------
00000118 440 _esp_wr_end::
441 ;src/esp32.c:96: SPI_CTRL = SPI_ESP_CS_ON;
00000118 3E 13 [ 7] 442 ld a, #0x13
0000011A D3 77 [11] 443 out (_SPI_CTRL), a
444 ;src/esp32.c:97: SPI_DATA = ESP_SPI_CMD_W_END;
0000011C 3E 07 [ 7] 445 ld a, #0x07
0000011E D3 57 [11] 446 out (_SPI_DATA), a
447 ;src/esp32.c:98: SPI_DATA; // dummy
00000120 DB 57 [11] 448 in a, (_SPI_DATA)
449 ;src/esp32.c:99: SPI_CTRL = SPI_ESP_CS_OFF;
00000122 3E 03 [ 7] 450 ld a, #0x03
00000124 D3 77 [11] 451 out (_SPI_CTRL), a
452 ;src/esp32.c:100: }
00000126 C9 [10] 453 ret
454 ;src/esp32.c:102: void esp_send_dma(u16 a, u8 p, u16 l, u16 n)
455 ; ---------------------------------
456 ; Function esp_send_dma
457 ; ---------------------------------
00000127 458 _esp_send_dma::
00000127 7D [ 4] 459 ld a, l
460 ;src/esp32.c:105: TS_DMASADDRL = (u8)a;
00000128 01 AF 1A [10] 461 ld bc, #_TS_DMASADDRL
0000012B ED 79 [12] 462 out (c), a
463 ;src/esp32.c:106: TS_DMASADDRH = (u8)((u16)a >> 8);
0000012D 7C [ 4] 464 ld a, h
0000012E 01 AF 1B [10] 465 ld bc, #_TS_DMASADDRH
00000131 ED 79 [12] 466 out (c), a
467 ;src/esp32.c:107: TS_DMASADDRX = p;
00000133 FD 21 02 00 [14] 468 ld iy, #2
00000137 FD 39 [15] 469 add iy, sp
00000139 FD 7E 00 [19] 470 ld a, 0 (iy)
0000013C 01 AF 1C [10] 471 ld bc, #_TS_DMASADDRX
0000013F ED 79 [12] 472 out (c), a
473 ;src/esp32.c:108: TS_DMALEN = (u8)((l >> 1) - 1);
00000141 FD 7E 01 [19] 474 ld a, 1 (iy)
00000144 FD 4E 02 [19] 475 ld c, 2 (iy)
00000147 FD 23 [10] 476 inc iy
00000149 CB 39 [ 8] 477 srl c
0000014B CB 1F [ 8] 478 rr a
0000014D 3D [ 4] 479 dec a
0000014E 01 AF 26 [10] 480 ld bc, #_TS_DMALEN
00000151 ED 79 [12] 481 out (c), a
482 ;src/esp32.c:109: TS_DMANUM = (u8)(n - 1);
00000153 FD 7E 02 [19] 483 ld a, 2 (iy)
00000156 3D [ 4] 484 dec a
00000157 01 AF 28 [10] 485 ld bc, #_TS_DMANUM
0000015A ED 79 [12] 486 out (c), a
487 ;src/esp32.c:111: SPI_CTRL = SPI_ESP_CS_ON;
0000015C 3E 13 [ 7] 488 ld a, #0x13
0000015E D3 77 [11] 489 out (_SPI_CTRL), a
490 ;src/esp32.c:112: SPI_DATA = ESP_SPI_CMD_WR_DATA;
00000160 3E 03 [ 7] 491 ld a, #0x03
00000162 D3 57 [11] 492 out (_SPI_DATA), a
493 ;src/esp32.c:113: SPI_DATA; // dummy
00000164 DB 57 [11] 494 in a, (_SPI_DATA)
495 ;src/esp32.c:114: SPI_DATA; // dummy
00000166 DB 57 [11] 496 in a, (_SPI_DATA)
497 ;src/esp32.c:115: TS_DMACTR = TS_DMA_RAM_SPI;
00000168 3E 82 [ 7] 498 ld a, #0x82
0000016A 01 AF 27 [10] 499 ld bc, #_TS_DMACTR
0000016D ED 79 [12] 500 out (c), a
501 ;src/esp32.c:116: while (TS_DMASTATUS & 0x80);
0000016F 502 00101$:
0000016F 3E 27 [ 7] 503 ld a, #>(_TS_DMASTATUS)
00000171 DB AF [11] 504 in a, (#<(_TS_DMASTATUS))
00000173 07 [ 4] 505 rlca
00000174 38 F9 [12] 506 jr c, 00101$
507 ;src/esp32.c:117: SPI_CTRL = SPI_ESP_CS_OFF;
00000176 3E 03 [ 7] 508 ld a, #0x03
00000178 D3 77 [11] 509 out (_SPI_CTRL), a
510 ;src/esp32.c:119: esp_wr_end();
0000017A CDr18r01 [17] 511 call _esp_wr_end
512 ;src/esp32.c:120: esp_wait_busy(100); // 2s - esp32 consuming one DMA'd chunk should be near-instant
0000017D 21 64 00 [10] 513 ld hl, #0x0064
00000180 CDrE5r01 [17] 514 call _esp_wait_busy
515 ;src/esp32.c:121: }
00000183 E1 [10] 516 pop hl
00000184 F1 [10] 517 pop af
00000185 F1 [10] 518 pop af
00000186 33 [ 6] 519 inc sp
00000187 E9 [ 4] 520 jp (hl)
521 ;src/esp32.c:123: void esp_rd_end()
522 ; ---------------------------------
523 ; Function esp_rd_end
524 ; ---------------------------------
00000188 525 _esp_rd_end::
526 ;src/esp32.c:125: SPI_CTRL = SPI_ESP_CS_ON;
00000188 3E 13 [ 7] 527 ld a, #0x13
0000018A D3 77 [11] 528 out (_SPI_CTRL), a
529 ;src/esp32.c:126: SPI_DATA = ESP_SPI_CMD_R_END;
0000018C 3E 08 [ 7] 530 ld a, #0x08
0000018E D3 57 [11] 531 out (_SPI_DATA), a
532 ;src/esp32.c:127: SPI_DATA; // dummy
00000190 DB 57 [11] 533 in a, (_SPI_DATA)
534 ;src/esp32.c:128: SPI_CTRL = SPI_ESP_CS_OFF;
00000192 3E 03 [ 7] 535 ld a, #0x03
00000194 D3 77 [11] 536 out (_SPI_CTRL), a
537 ;src/esp32.c:129: }
00000196 C9 [10] 538 ret
539 ;src/esp32.c:139: u8 esp_wait_status(u8 status, u16 max_frames)
540 ; ---------------------------------
541 ; Function esp_wait_status
542 ; ---------------------------------
00000197 543 _esp_wait_status::
00000197 DD E5 [15] 544 push ix
00000199 DD 21 00 00 [14] 545 ld ix, #0
0000019D DD 39 [15] 546 add ix, sp
0000019F 21 FB FF [10] 547 ld hl, #-5
000001A2 39 [11] 548 add hl, sp
000001A3 F9 [ 6] 549 ld sp, hl
000001A4 DD 77 FF [19] 550 ld -1 (ix), a
000001A7 DD 73 FD [19] 551 ld -3 (ix), e
000001AA DD 72 FE [19] 552 ld -2 (ix), d
553 ;src/esp32.c:141: u16 start = *(u16*)_TMN;
000001AD 21 09 60 [10] 554 ld hl, #0x6009
000001B0 7E [ 7] 555 ld a, (hl)
000001B1 DD 77 FB [19] 556 ld -5 (ix), a
000001B4 23 [ 6] 557 inc hl
000001B5 7E [ 7] 558 ld a, (hl)
000001B6 DD 77 FC [19] 559 ld -4 (ix), a
560 ;src/esp32.c:143: while ((u16)(*(u16*)_TMN - start) < max_frames)
000001B9 561 00103$:
000001B9 2A 09 60 [16] 562 ld hl, (#0x6009)
000001BC 7D [ 4] 563 ld a, l
000001BD DD 96 FB [19] 564 sub a, -5 (ix)
000001C0 4F [ 4] 565 ld c, a
000001C1 7C [ 4] 566 ld a, h
000001C2 DD 9E FC [19] 567 sbc a, -4 (ix)
000001C5 47 [ 4] 568 ld b, a
000001C6 79 [ 4] 569 ld a, c
000001C7 DD 96 FD [19] 570 sub a, -3 (ix)
000001CA 78 [ 4] 571 ld a, b
000001CB DD 9E FE [19] 572 sbc a, -2 (ix)
000001CE 30 0F [12] 573 jr nc, 00105$
574 ;src/esp32.c:145: if (esp_rd_reg8(ESP_REG_STATUS) == status)
000001D0 3E 01 [ 7] 575 ld a, #0x01
000001D2 CDr1Er00 [17] 576 call _esp_rd_reg8
000001D5 DD 96 FF [19] 577 sub a, -1 (ix)
000001D8 20 DF [12] 578 jr nz, 00103$
579 ;src/esp32.c:146: return 1;
000001DA 3E 01 [ 7] 580 ld a, #0x01
000001DC C3rE0r01 [10] 581 jp 00106$
000001DF 582 00105$:
583 ;src/esp32.c:149: return 0;
000001DF AF [ 4] 584 xor a, a
000001E0 585 00106$:
586 ;src/esp32.c:150: }
000001E0 DD F9 [10] 587 ld sp, ix
000001E2 DD E1 [14] 588 pop ix
000001E4 C9 [10] 589 ret
590 ;src/esp32.c:152: u8 esp_wait_busy(u16 max_frames)
591 ; ---------------------------------
592 ; Function esp_wait_busy
593 ; ---------------------------------
000001E5 594 _esp_wait_busy::
000001E5 DD E5 [15] 595 push ix
000001E7 DD 21 00 00 [14] 596 ld ix, #0
000001EB DD 39 [15] 597 add ix, sp
000001ED F5 [11] 598 push af
000001EE F5 [11] 599 push af
000001EF DD 75 FE [19] 600 ld -2 (ix), l
000001F2 DD 74 FF [19] 601 ld -1 (ix), h
602 ;src/esp32.c:154: u16 start = *(u16*)_TMN;
000001F5 21 09 60 [10] 603 ld hl, #0x6009
000001F8 7E [ 7] 604 ld a, (hl)
000001F9 DD 77 FC [19] 605 ld -4 (ix), a
000001FC 23 [ 6] 606 inc hl
000001FD 7E [ 7] 607 ld a, (hl)
000001FE DD 77 FD [19] 608 ld -3 (ix), a
609 ;src/esp32.c:156: while ((u16)(*(u16*)_TMN - start) < max_frames)
00000201 610 00103$:
00000201 2A 09 60 [16] 611 ld hl, (#0x6009)
00000204 7D [ 4] 612 ld a, l
00000205 DD 96 FC [19] 613 sub a, -4 (ix)
00000208 4F [ 4] 614 ld c, a
00000209 7C [ 4] 615 ld a, h
0000020A DD 9E FD [19] 616 sbc a, -3 (ix)
0000020D 47 [ 4] 617 ld b, a
0000020E 79 [ 4] 618 ld a, c
0000020F DD 96 FE [19] 619 sub a, -2 (ix)
00000212 78 [ 4] 620 ld a, b
00000213 DD 9E FF [19] 621 sbc a, -1 (ix)
00000216 30 0E [12] 622 jr nc, 00105$
623 ;src/esp32.c:158: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY)
00000218 3E 01 [ 7] 624 ld a, #0x01
0000021A CDr1Er00 [17] 625 call _esp_rd_reg8
0000021D FE 02 [ 7] 626 cp a, #0x02
0000021F 28 E0 [12] 627 jr z, 00103$
628 ;src/esp32.c:159: return 1;
00000221 3E 01 [ 7] 629 ld a, #0x01
00000223 C3r27r02 [10] 630 jp 00106$
00000226 631 00105$:
632 ;src/esp32.c:162: return 0;
00000226 AF [ 4] 633 xor a, a
00000227 634 00106$:
635 ;src/esp32.c:163: }
00000227 DD F9 [10] 636 ld sp, ix
00000229 DD E1 [14] 637 pop ix
0000022B C9 [10] 638 ret
639 ;src/esp32.c:165: int esp_create_obj(u32 size, u8 type)
640 ; ---------------------------------
641 ; Function esp_create_obj
642 ; ---------------------------------
0000022C 643 _esp_create_obj::
644 ;src/esp32.c:167: esp_wr_reg32(ESP_REG_DATA_SIZE, size);
0000022C E5 [11] 645 push hl
0000022D D5 [11] 646 push de
0000022E 3E 03 [ 7] 647 ld a, #0x03
00000230 CDrE8r00 [17] 648 call _esp_wr_reg32
649 ;src/esp32.c:168: esp_wr_reg8(ESP_REG_OBJ_TYPE, type);
00000233 FD 21 02 00 [14] 650 ld iy, #2
00000237 FD 39 [15] 651 add iy, sp
00000239 FD 6E 00 [19] 652 ld l, 0 (iy)
0000023C 3E 02 [ 7] 653 ld a, #0x02
0000023E CDrD1r00 [17] 654 call _esp_wr_reg8
655 ;src/esp32.c:169: esp_cmd(ESP_CMD_MAKE_OBJECT);
00000241 3E E0 [ 7] 656 ld a, #0xe0
00000243 CDr05r00 [17] 657 call _esp_cmd
658 ;src/esp32.c:170: esp_wait_busy(100); // 2s - object allocation should be near-instant
00000246 21 64 00 [10] 659 ld hl, #0x0064
00000249 CDrE5r01 [17] 660 call _esp_wait_busy
661 ;src/esp32.c:173: return esp_rd_reg8(ESP_REG_OBJ_HANDLE);
0000024C 3E 0B [ 7] 662 ld a, #0x0b
0000024E CDr1Er00 [17] 663 call _esp_rd_reg8
00000251 5F [ 4] 664 ld e, a
00000252 16 00 [ 7] 665 ld d, #0x00
666 ;src/esp32.c:174: }
00000254 E1 [10] 667 pop hl
00000255 33 [ 6] 668 inc sp
00000256 E9 [ 4] 669 jp (hl)
670 ;src/main.c:101: bool esp_init()
671 ; ---------------------------------
672 ; Function esp_init
673 ; ---------------------------------
00000257 674 _esp_init::
675 ;src/main.c:103: esp_cmd(ESP_CMD_NOP);
00000257 AF [ 4] 676 xor a, a
00000258 CDr05r00 [17] 677 call _esp_cmd
678 ;src/main.c:104: esp_rd_end();
0000025B CDr88r01 [17] 679 call _esp_rd_end
680 ;src/main.c:105: esp_wr_end();
0000025E CDr18r01 [17] 681 call _esp_wr_end
682 ;src/main.c:109: return true;
00000261 3E 01 [ 7] 683 ld a, #0x01
684 ;src/main.c:110: }
00000263 C9 [10] 685 ret
00000264 686 _win_xm:
00000264 81 687 .db #0x81 ; 129
00000265 00 688 .db #0x00 ; 0
00000266 19 689 .db #0x19 ; 25
00000267 0A 690 .db #0x0a ; 10
00000268 28 691 .db #0x28 ; 40
00000269 0C 692 .db #0x0c ; 12
0000026A 70 693 .db #0x70 ; 112 'p'
0000026B 00 694 .db #0x00 ; 0
0000026C 00 00 695 .dw #0x0000
0000026E 00 696 .db #0x00 ; 0
0000026F 00 697 .db #0x00 ; 0
00000270r88r02 698 .dw __str_0
00000272rA2r02 699 .dw __str_1
00000274rA2r02 700 .dw __str_1
00000276 701 _win_about:
00000276 01 702 .db #0x01 ; 1
00000277 00 703 .db #0x00 ; 0
00000278 16 704 .db #0x16 ; 22
00000279 0A 705 .db #0x0a ; 10
0000027A 24 706 .db #0x24 ; 36
0000027B 05 707 .db #0x05 ; 5
0000027C 4F 708 .db #0x4f ; 79 'O'
0000027D 00 709 .db #0x00 ; 0
0000027E 00 00 710 .dw #0x0000
00000280 00 711 .db #0x00 ; 0
00000281 00 712 .db #0x00 ; 0
00000282rA3r02 713 .dw __str_2
00000284rA2r02 714 .dw __str_1
00000286rACr02 715 .dw __str_3
00000288 716 __str_0:
00000288 0E 717 .db 0x0e
00000289 20 58 4D 2F 58 4D 5A 718 .ascii " XM/XMZ/S3M Player v0.1 "
2F 53 33 4D 20 50 6C
61 79 65 72 20 76 30
2E 31 20
000002A1 00 719 .db 0x00
000002A2 720 __str_1:
000002A2 00 721 .db 0x00
000002A3 722 __str_2:
000002A3 0E 723 .db 0x0e
000002A4 20 41 62 6F 75 74 20 724 .ascii " About "
000002AB 00 725 .db 0x00
000002AC 726 __str_3:
000002AC 0E 727 .db 0x0e
000002AD 0C 728 .db 0x0c
000002AE 01 729 .db 0x01
000002AF 58 4D 20 50 6C 61 79 730 .ascii "XM Player v0.1"
65 72 20 76 30 2E 31
000002BD 00 731 .db 0x00
732 ;src/main.c:114: bool play_xm()
733 ; ---------------------------------
734 ; Function play_xm
735 ; ---------------------------------
000002BE 736 _play_xm::
000002BE DD E5 [15] 737 push ix
000002C0 DD 21 00 00 [14] 738 ld ix, #0
000002C4 DD 39 [15] 739 add ix, sp
000002C6 21 EC FF [10] 740 ld hl, #-20
000002C9 39 [11] 741 add hl, sp
000002CA F9 [ 6] 742 ld sp, hl
743 ;src/main.c:116: esp_cmd(ESP_CMD_TRACK_STOP);
000002CB 3E A2 [ 7] 744 ld a, #0xa2
000002CD CDr05r00 [17] 745 call _esp_cmd
746 ;src/main.c:117: esp_wait_busy(100); // 2s - both should be near-instant
000002D0 21 64 00 [10] 747 ld hl, #0x0064
000002D3 CDrE5r01 [17] 748 call _esp_wait_busy
749 ;src/main.c:118: esp_cmd(ESP_CMD_KILL_OBJECTS);
000002D6 3E E4 [ 7] 750 ld a, #0xe4
000002D8 CDr05r00 [17] 751 call _esp_cmd
752 ;src/main.c:119: esp_wait_busy(100);
000002DB 21 64 00 [10] 753 ld hl, #0x0064
000002DE CDrE5r01 [17] 754 call _esp_wait_busy
755 ;src/main.c:122: switch (file_ext)
000002E1 3Ar06r10 [13] 756 ld a, (_file_ext)
000002E4 3D [ 4] 757 dec a
000002E5 28 0A [12] 758 jr z, 00101$
000002E7 3Ar06r10 [13] 759 ld a, (_file_ext)
000002EA D6 02 [ 7] 760 sub a, #0x02
000002EC 28 08 [12] 761 jr z, 00102$
000002EE C3rFBr02 [10] 762 jp 00103$
763 ;src/main.c:124: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break;
000002F1 764 00101$:
000002F1 3E 08 [ 7] 765 ld a, #0x08
000002F3 C3rFDr02 [10] 766 jp 00104$
767 ;src/main.c:125: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break;
000002F6 768 00102$:
000002F6 3E 0C [ 7] 769 ld a, #0x0c
000002F8 C3rFDr02 [10] 770 jp 00104$
771 ;src/main.c:126: default: obj_type = OBJ_TYPE_XM; break;
000002FB 772 00103$:
000002FB 3E 05 [ 7] 773 ld a, #0x05
774 ;src/main.c:127: }
000002FD 775 00104$:
776 ;src/main.c:129: xm_handle = esp_create_obj(filesize, obj_type);
000002FD F5 [11] 777 push af
000002FE 33 [ 6] 778 inc sp
000002FF ED 5Br02r10 [20] 779 ld de, (_filesize)
00000303 2Ar04r10 [16] 780 ld hl, (_filesize + 2)
00000306 CDr2Cr02 [17] 781 call _esp_create_obj
00000309 21r30r10 [10] 782 ld hl, #_xm_handle
0000030C 73 [ 7] 783 ld (hl), e
784 ;src/main.c:130: last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
0000030D 3E 01 [ 7] 785 ld a, #0x01
0000030F CDr1Er00 [17] 786 call _esp_rd_reg8
00000312 32r08r10 [13] 787 ld (#_last_esp_status), a
788 ;src/main.c:131: if (last_esp_status != ESP_ST_READY)
00000315 3Ar08r10 [13] 789 ld a, (_last_esp_status)
00000318 3D [ 4] 790 dec a
00000319 28 04 [12] 791 jr z, 00106$
792 ;src/main.c:132: return false;
0000031B AF [ 4] 793 xor a, a
0000031C C3rE5r04 [10] 794 jp 00118$
0000031F 795 00106$:
796 ;src/main.c:134: u32 sz = filesize;
0000031F 21 0C 00 [10] 797 ld hl, #12
00000322 39 [11] 798 add hl, sp
00000323 EB [ 4] 799 ex de, hl
00000324 21r02r10 [10] 800 ld hl, #_filesize
00000327 01 04 00 [10] 801 ld bc, #4
0000032A ED B0 [21] 802 ldir
803 ;src/main.c:135: u32 offs = 0;
0000032C AF [ 4] 804 xor a, a
0000032D DD 77 FC [19] 805 ld -4 (ix), a
00000330 DD 77 FD [19] 806 ld -3 (ix), a
00000333 DD 77 FE [19] 807 ld -2 (ix), a
00000336 DD 77 FF [19] 808 ld -1 (ix), a
809 ;src/main.c:137: while (sz)
00000339 810 00107$:
00000339 DD 7E FB [19] 811 ld a, -5 (ix)
0000033C DD B6 FA [19] 812 or a, -6 (ix)
0000033F DD B6 F9 [19] 813 or a, -7 (ix)
00000342 DD B6 F8 [19] 814 or a, -8 (ix)
00000345 CAr4Er04 [10] 815 jp z, 00109$
816 ;src/main.c:139: u32 s = min(sz, FS_BUF_SIZE);
00000348 DD 7E F9 [19] 817 ld a, -7 (ix)
0000034B D6 10 [ 7] 818 sub a, #0x10
0000034D DD 7E FA [19] 819 ld a, -6 (ix)
00000350 DE 00 [ 7] 820 sbc a, #0x00
00000352 DD 7E FB [19] 821 ld a, -5 (ix)
00000355 DE 00 [ 7] 822 sbc a, #0x00
00000357 30 11 [12] 823 jr nc, 00120$
00000359 21 00 00 [10] 824 ld hl, #0
0000035C 39 [11] 825 add hl, sp
0000035D EB [ 4] 826 ex de, hl
0000035E 21 0C 00 [10] 827 ld hl, #12
00000361 39 [11] 828 add hl, sp
00000362 01 04 00 [10] 829 ld bc, #4
00000365 ED B0 [21] 830 ldir
00000367 C3r79r03 [10] 831 jp 00121$
0000036A 832 00120$:
0000036A DD 36 EC 00 [19] 833 ld -20 (ix), #0x00
0000036E DD 36 ED 10 [19] 834 ld -19 (ix), #0x10
00000372 AF [ 4] 835 xor a, a
00000373 DD 77 EE [19] 836 ld -18 (ix), a
00000376 DD 77 EF [19] 837 ld -17 (ix), a
00000379 838 00121$:
00000379 21 05 00 [10] 839 ld hl, #5
0000037C 39 [11] 840 add hl, sp
0000037D EB [ 4] 841 ex de, hl
0000037E 21 00 00 [10] 842 ld hl, #0
00000381 39 [11] 843 add hl, sp
00000382 01 04 00 [10] 844 ld bc, #4
00000385 ED B0 [21] 845 ldir
846 ;src/main.c:140: u8 sec = (s + 511) >> 9;
00000387 DD 7E F1 [19] 847 ld a, -15 (ix)
0000038A C6 FF [ 7] 848 add a, #0xff
0000038C DD 7E F2 [19] 849 ld a, -14 (ix)
0000038F CE 01 [ 7] 850 adc a, #0x01
00000391 47 [ 4] 851 ld b, a
00000392 3E 00 [ 7] 852 ld a, #0x00
00000394 CE 00 [ 7] 853 adc a, #0x00
00000396 5F [ 4] 854 ld e, a
00000397 3E 00 [ 7] 855 ld a, #0x00
00000399 CE 00 [ 7] 856 adc a, #0x00
0000039B 57 [ 4] 857 ld d, a
0000039C 48 [ 4] 858 ld c, b
0000039D 43 [ 4] 859 ld b, e
0000039E 5A [ 4] 860 ld e, d
0000039F CB 3B [ 8] 861 srl e
000003A1 CB 18 [ 8] 862 rr b
000003A3 CB 19 [ 8] 863 rr c
864 ;src/main.c:142: wc_load512((u16)fs_buf, sec);
000003A5 DD 71 F7 [19] 865 ld -9 (ix), c
000003A8 79 [ 4] 866 ld a, c
000003A9 F5 [11] 867 push af
000003AA 33 [ 6] 868 inc sp
000003AB 21r00r00 [10] 869 ld hl, #_fs_buf
000003AE CDr00r00 [17] 870 call _wc_load512
871 ;src/main.c:144: esp_wr_reg32(ESP_REG_DATA_SIZE, s);
000003B1 21 00 00 [10] 872 ld hl, #0x0
000003B4 E5 [11] 873 push hl
000003B5 DD 6E F1 [19] 874 ld l, -15 (ix)
000003B8 DD 66 F2 [19] 875 ld h, -14 (ix)
000003BB E5 [11] 876 push hl
000003BC 3E 03 [ 7] 877 ld a, #0x03
000003BE CDrE8r00 [17] 878 call _esp_wr_reg32
879 ;src/main.c:145: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs);
000003C1 DD 6E FE [19] 880 ld l, -2 (ix)
000003C4 DD 66 FF [19] 881 ld h, -1 (ix)
000003C7 E5 [11] 882 push hl
000003C8 DD 6E FC [19] 883 ld l, -4 (ix)
000003CB DD 66 FD [19] 884 ld h, -3 (ix)
000003CE E5 [11] 885 push hl
000003CF 3E 07 [ 7] 886 ld a, #0x07
000003D1 CDrE8r00 [17] 887 call _esp_wr_reg32
888 ;src/main.c:146: esp_cmd(ESP_CMD_WRITE_OBJECT);
000003D4 3E E1 [ 7] 889 ld a, #0xe1
000003D6 CDr05r00 [17] 890 call _esp_cmd
891 ;src/main.c:147: esp_wait_status(ESP_ST_DATA_M2S, 100); // 2s - near-instant state transition
000003D9 11 64 00 [10] 892 ld de, #0x0064
000003DC 3E 03 [ 7] 893 ld a, #0x03
000003DE CDr97r01 [17] 894 call _esp_wait_status
895 ;src/main.c:148: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec);
000003E1 DD 7E F7 [19] 896 ld a, -9 (ix)
000003E4 DD 77 F5 [19] 897 ld -11 (ix), a
000003E7 DD 36 F6 00 [19] 898 ld -10 (ix), #0x00
000003EB 3A 02 60 [13] 899 ld a, (#0x6002)
000003EE DD 77 F7 [19] 900 ld -9 (ix), a
000003F1 DD 6E F5 [19] 901 ld l, -11 (ix)
000003F4 26 00 [ 7] 902 ld h, #0x00
000003F6 E5 [11] 903 push hl
000003F7 21 00 02 [10] 904 ld hl, #0x0200
000003FA E5 [11] 905 push hl
000003FB DD 7E F7 [19] 906 ld a, -9 (ix)
000003FE F5 [11] 907 push af
000003FF 33 [ 6] 908 inc sp
00000400 21r00r00 [10] 909 ld hl, #_fs_buf
00000403 CDr27r01 [17] 910 call _esp_send_dma
911 ;src/main.c:150: offs += s;
00000406 DD 5E F1 [19] 912 ld e, -15 (ix)
00000409 DD 56 F2 [19] 913 ld d, -14 (ix)
0000040C DD 6E FC [19] 914 ld l, -4 (ix)
0000040F DD 66 FD [19] 915 ld h, -3 (ix)
00000412 19 [11] 916 add hl, de
00000413 DD 75 FC [19] 917 ld -4 (ix), l
00000416 DD 74 FD [19] 918 ld -3 (ix), h
00000419 DD 7E FE [19] 919 ld a, -2 (ix)
0000041C DD 8E F3 [19] 920 adc a, -13 (ix)
0000041F DD 77 FE [19] 921 ld -2 (ix), a
00000422 30 03 [12] 922 jr nc, 00207$
00000424 DD 34 FF [23] 923 inc -1 (ix)
00000427 924 00207$:
925 ;src/main.c:151: sz -= s;
00000427 DD 7E F8 [19] 926 ld a, -8 (ix)
0000042A DD 96 F1 [19] 927 sub a, -15 (ix)
0000042D DD 77 F8 [19] 928 ld -8 (ix), a
00000430 DD 7E F9 [19] 929 ld a, -7 (ix)
00000433 DD 9E F2 [19] 930 sbc a, -14 (ix)
00000436 DD 77 F9 [19] 931 ld -7 (ix), a
00000439 DD 7E FA [19] 932 ld a, -6 (ix)
0000043C DD 9E F3 [19] 933 sbc a, -13 (ix)
0000043F DD 77 FA [19] 934 ld -6 (ix), a
00000442 DD 7E FB [19] 935 ld a, -5 (ix)
00000445 DD 9E F4 [19] 936 sbc a, -12 (ix)
00000448 DD 77 FB [19] 937 ld -5 (ix), a
0000044B C3r39r03 [10] 938 jp 00107$
0000044E 939 00109$:
940 ;src/main.c:154: if (file_ext == EXT_XMZ)
0000044E 3Ar06r10 [13] 941 ld a, (_file_ext)
00000451 3D [ 4] 942 dec a
00000452 20 3A [12] 943 jr nz, 00113$
944 ;src/main.c:159: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle);
00000454 3Ar30r10 [13] 945 ld a, (_xm_handle)
00000457 6F [ 4] 946 ld l, a
00000458 3E 0B [ 7] 947 ld a, #0x0b
0000045A CDrD1r00 [17] 948 call _esp_wr_reg8
949 ;src/main.c:160: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM);
0000045D 2E 05 [ 7] 950 ld l, #0x05
0000045F 3E 02 [ 7] 951 ld a, #0x02
00000461 CDrD1r00 [17] 952 call _esp_wr_reg8
953 ;src/main.c:161: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize);
00000464 2Ar04r10 [16] 954 ld hl, (_filesize + 2)
00000467 E5 [11] 955 push hl
00000468 2Ar02r10 [16] 956 ld hl, (_filesize)
0000046B E5 [11] 957 push hl
0000046C 3E 03 [ 7] 958 ld a, #0x03
0000046E CDrE8r00 [17] 959 call _esp_wr_reg32
960 ;src/main.c:162: esp_cmd(ESP_CMD_UNZIP);
00000471 3E F2 [ 7] 961 ld a, #0xf2
00000473 CDr05r00 [17] 962 call _esp_cmd
963 ;src/main.c:163: esp_wait_busy(250); // 5s - decompression time scales with file size
00000476 21 FA 00 [10] 964 ld hl, #0x00fa
00000479 CDrE5r01 [17] 965 call _esp_wait_busy
966 ;src/main.c:165: last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
0000047C 3E 01 [ 7] 967 ld a, #0x01
0000047E CDr1Er00 [17] 968 call _esp_rd_reg8
00000481 32r08r10 [13] 969 ld (#_last_esp_status), a
970 ;src/main.c:166: if (last_esp_status != ESP_ST_READY)
00000484 3Ar08r10 [13] 971 ld a, (_last_esp_status)
00000487 3D [ 4] 972 dec a
00000488 28 04 [12] 973 jr z, 00113$
974 ;src/main.c:167: return false;
0000048A AF [ 4] 975 xor a, a
0000048B C3rE5r04 [10] 976 jp 00118$
0000048E 977 00113$:
978 ;src/main.c:170: esp_cmd(ESP_CMD_TRACK_INIT);
0000048E 3E A0 [ 7] 979 ld a, #0xa0
00000490 CDr05r00 [17] 980 call _esp_cmd
981 ;src/main.c:176: esp_wait_busy(400);
00000493 21 90 01 [10] 982 ld hl, #0x0190
00000496 CDrE5r01 [17] 983 call _esp_wait_busy
984 ;src/main.c:178: last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
00000499 3E 01 [ 7] 985 ld a, #0x01
0000049B CDr1Er00 [17] 986 call _esp_rd_reg8
0000049E 32r08r10 [13] 987 ld (#_last_esp_status), a
988 ;src/main.c:179: if (last_esp_status != ESP_ST_READY)
000004A1 3Ar08r10 [13] 989 ld a, (_last_esp_status)
000004A4 3D [ 4] 990 dec a
000004A5 28 04 [12] 991 jr z, 00115$
992 ;src/main.c:180: return false;
000004A7 AF [ 4] 993 xor a, a
000004A8 C3rE5r04 [10] 994 jp 00118$
000004AB 995 00115$:
996 ;src/main.c:185: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle);
000004AB 3Ar30r10 [13] 997 ld a, (_xm_handle)
000004AE 6F [ 4] 998 ld l, a
000004AF 3E 0B [ 7] 999 ld a, #0x0b
000004B1 CDrD1r00 [17] 1000 call _esp_wr_reg8
1001 ;src/main.c:186: esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1);
000004B4 2E 01 [ 7] 1002 ld l, #0x01
000004B6 3E 3A [ 7] 1003 ld a, #0x3a
000004B8 CDrD1r00 [17] 1004 call _esp_wr_reg8
1005 ;src/main.c:187: esp_cmd(ESP_CMD_TRACK_SET_PARAMS);
000004BB 3E A6 [ 7] 1006 ld a, #0xa6
000004BD CDr05r00 [17] 1007 call _esp_cmd
1008 ;src/main.c:188: esp_wait_busy(100); // 2s - both should be near-instant
000004C0 21 64 00 [10] 1009 ld hl, #0x0064
000004C3 CDrE5r01 [17] 1010 call _esp_wait_busy
1011 ;src/main.c:190: esp_cmd(ESP_CMD_TRACK_PLAY);
000004C6 3E A1 [ 7] 1012 ld a, #0xa1
000004C8 CDr05r00 [17] 1013 call _esp_cmd
1014 ;src/main.c:191: esp_wait_busy(100);
000004CB 21 64 00 [10] 1015 ld hl, #0x0064
000004CE CDrE5r01 [17] 1016 call _esp_wait_busy
1017 ;src/main.c:193: last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
000004D1 3E 01 [ 7] 1018 ld a, #0x01
000004D3 CDr1Er00 [17] 1019 call _esp_rd_reg8
000004D6 32r08r10 [13] 1020 ld (#_last_esp_status), a
1021 ;src/main.c:194: if (last_esp_status != ESP_ST_READY)
000004D9 3Ar08r10 [13] 1022 ld a, (_last_esp_status)
000004DC 3D [ 4] 1023 dec a
000004DD 28 04 [12] 1024 jr z, 00117$
1025 ;src/main.c:195: return false;
000004DF AF [ 4] 1026 xor a, a
000004E0 C3rE5r04 [10] 1027 jp 00118$
000004E3 1028 00117$:
1029 ;src/main.c:197: return true;
000004E3 3E 01 [ 7] 1030 ld a, #0x01
000004E5 1031 00118$:
1032 ;src/main.c:198: }
000004E5 DD F9 [10] 1033 ld sp, ix
000004E7 DD E1 [14] 1034 pop ix
000004E9 C9 [10] 1035 ret
1036 ;src/main.c:201: void wait_esc_key()
1037 ; ---------------------------------
1038 ; Function wait_esc_key
1039 ; ---------------------------------
000004EA 1040 _wait_esc_key::
1041 ;src/main.c:203: while (1)
000004EA 1042 00104$:
1043 ;src/main.c:207: __endasm;
000004EA 76 [ 4] 1044 halt
1045 ;src/main.c:209: if (wc_key_esc())
000004EB CDr00r00 [17] 1046 call _wc_key_esc
000004EE B7 [ 4] 1047 or a, a
000004EF 28 F9 [12] 1048 jr z, 00104$
1049 ;src/main.c:210: break;
1050 ;src/main.c:212: }
000004F1 C9 [10] 1051 ret
1052 ;src/main.c:214: void wait_frames(u8 n)
1053 ; ---------------------------------
1054 ; Function wait_frames
1055 ; ---------------------------------
000004F2 1056 _wait_frames::
000004F2 4F [ 4] 1057 ld c, a
1058 ;src/main.c:216: while (n--)
000004F3 1059 00101$:
000004F3 79 [ 4] 1060 ld a, c
000004F4 0D [ 4] 1061 dec c
000004F5 B7 [ 4] 1062 or a, a
000004F6 C8 [11] 1063 ret z
1064 ;src/main.c:220: __endasm;
000004F7 76 [ 4] 1065 halt
1066 ;src/main.c:222: }
000004F8 C3rF3r04 [10] 1067 jp 00101$
1068 ;src/main.c:224: void about()
1069 ; ---------------------------------
1070 ; Function about
1071 ; ---------------------------------
000004FB 1072 _about::
1073 ;src/main.c:226: wc_prwow(&win_about);
000004FB 21r76r02 [10] 1074 ld hl, #_win_about
000004FE CDr00r00 [17] 1075 call _wc_prwow
1076 ;src/main.c:227: wait_esc_key();
00000501 CDrEAr04 [17] 1077 call _wait_esc_key
1078 ;src/main.c:228: wc_rresb(&win_about);
00000504 21r76r02 [10] 1079 ld hl, #_win_about
00000507 CDr00r00 [17] 1080 call _wc_rresb
1081 ;src/main.c:229: wc_exit(WC_EXIT);
0000050A AF [ 4] 1082 xor a, a
1083 ;src/main.c:230: }
0000050B C3r00r00 [10] 1084 jp _wc_exit
1085 ;src/main.c:235: void unload_and_exit(WC_EXIT_SIGNAL sig)
1086 ; ---------------------------------
1087 ; Function unload_and_exit
1088 ; ---------------------------------
0000050E 1089 _unload_and_exit::
0000050E 3B [ 6] 1090 dec sp
0000050F FD 21 00 00 [14] 1091 ld iy, #0
00000513 FD 39 [15] 1092 add iy, sp
00000515 FD 77 00 [19] 1093 ld 0 (iy), a
1094 ;src/main.c:237: esp_cmd(ESP_CMD_TRACK_STOP);
00000518 3E A2 [ 7] 1095 ld a, #0xa2
0000051A CDr05r00 [17] 1096 call _esp_cmd
1097 ;src/main.c:238: esp_wait_busy(100); // 2s - both should be near-instant
0000051D 21 64 00 [10] 1098 ld hl, #0x0064
00000520 CDrE5r01 [17] 1099 call _esp_wait_busy
1100 ;src/main.c:239: esp_cmd(ESP_CMD_KILL_OBJECTS);
00000523 3E E4 [ 7] 1101 ld a, #0xe4
00000525 CDr05r00 [17] 1102 call _esp_cmd
1103 ;src/main.c:240: esp_wait_busy(100);
00000528 21 64 00 [10] 1104 ld hl, #0x0064
0000052B CDrE5r01 [17] 1105 call _esp_wait_busy
1106 ;src/main.c:241: wc_rresb(&win_xm);
0000052E 21r64r02 [10] 1107 ld hl, #_win_xm
00000531 CDr00r00 [17] 1108 call _wc_rresb
1109 ;src/main.c:242: wc_exit(sig);
00000534 21 00 00 [10] 1110 ld hl, #0
00000537 39 [11] 1111 add hl, sp
00000538 7E [ 7] 1112 ld a, (hl)
00000539 33 [ 6] 1113 inc sp
0000053A C3r00r00 [10] 1114 jp _wc_exit
1115 ;src/main.c:243: }
0000053D 33 [ 6] 1116 inc sp
0000053E C9 [10] 1117 ret
1118 ;src/main.c:247: void leave_playing_and_exit()
1119 ; ---------------------------------
1120 ; Function leave_playing_and_exit
1121 ; ---------------------------------
0000053F 1122 _leave_playing_and_exit::
1123 ;src/main.c:249: wc_rresb(&win_xm);
0000053F 21r64r02 [10] 1124 ld hl, #_win_xm
00000542 CDr00r00 [17] 1125 call _wc_rresb
1126 ;src/main.c:250: wc_exit(WC_EXIT);
00000545 AF [ 4] 1127 xor a, a
1128 ;src/main.c:251: }
00000546 C3r00r00 [10] 1129 jp _wc_exit
1130 ;src/main.c:257: void wait_for_manual_exit()
1131 ; ---------------------------------
1132 ; Function wait_for_manual_exit
1133 ; ---------------------------------
00000549 1134 _wait_for_manual_exit::
1135 ;src/main.c:259: while (1)
00000549 1136 00108$:
1137 ;src/main.c:263: __endasm;
00000549 76 [ 4] 1138 halt
1139 ;src/main.c:265: if (wc_key_pgdn())
0000054A CDr00r00 [17] 1140 call _wc_key_pgdn
0000054D B7 [ 4] 1141 or a, a
0000054E 28 05 [12] 1142 jr z, 00102$
1143 ;src/main.c:266: unload_and_exit(WC_NEXT_FILE);
00000550 3E 02 [ 7] 1144 ld a, #0x02
00000552 CDr0Er05 [17] 1145 call _unload_and_exit
00000555 1146 00102$:
1147 ;src/main.c:268: if (wc_key_pgup())
00000555 CDr00r00 [17] 1148 call _wc_key_pgup
00000558 B7 [ 4] 1149 or a, a
00000559 28 05 [12] 1150 jr z, 00104$
1151 ;src/main.c:269: unload_and_exit(WC_PREV_FILE);
0000055B 3E 04 [ 7] 1152 ld a, #0x04
0000055D CDr0Er05 [17] 1153 call _unload_and_exit
00000560 1154 00104$:
1155 ;src/main.c:271: if (wc_key_esc())
00000560 CDr00r00 [17] 1156 call _wc_key_esc
00000563 B7 [ 4] 1157 or a, a
00000564 28 E3 [12] 1158 jr z, 00108$
1159 ;src/main.c:272: unload_and_exit(WC_EXIT);
00000566 AF [ 4] 1160 xor a, a
00000567 CDr0Er05 [17] 1161 call _unload_and_exit
1162 ;src/main.c:274: }
0000056A C3r49r05 [10] 1163 jp 00108$
1164 ;src/main.c:280: void error_esp()
1165 ; ---------------------------------
1166 ; Function error_esp
1167 ; ---------------------------------
0000056D 1168 _error_esp::
1169 ;src/main.c:285: xm_set_status_code("No ESP32 found", state_esp);
0000056D 3Ar00r00 [13] 1170 ld a, (_state_esp)
00000570 F5 [11] 1171 push af
00000571 33 [ 6] 1172 inc sp
00000572 21r85r05 [10] 1173 ld hl, #___str_4
00000575 CDr16r07 [17] 1174 call _xm_set_status_code
1175 ;src/main.c:286: wait_esc_key();
00000578 CDrEAr04 [17] 1176 call _wait_esc_key
1177 ;src/main.c:287: wc_rresb(&win_xm);
0000057B 21r64r02 [10] 1178 ld hl, #_win_xm
0000057E CDr00r00 [17] 1179 call _wc_rresb
1180 ;src/main.c:288: wc_exit(WC_EXIT);
00000581 AF [ 4] 1181 xor a, a
1182 ;src/main.c:289: }
00000582 C3r00r00 [10] 1183 jp _wc_exit
00000585 1184 ___str_4:
00000585 4E 6F 20 45 53 50 33 1185 .ascii "No ESP32 found"
32 20 66 6F 75 6E 64
00000593 00 1186 .db 0x00
1187 ;src/main.c:299: u8 stop_on_error()
1188 ; ---------------------------------
1189 ; Function stop_on_error
1190 ; ---------------------------------
00000594 1191 _stop_on_error::
1192 ;src/main.c:301: return wc_prm_pl(1) == 2;
00000594 3E 01 [ 7] 1193 ld a, #0x01
00000596 CDr00r00 [17] 1194 call _wc_prm_pl
00000599 FE 02 [ 7] 1195 cp a, #0x02
0000059B 3E 01 [ 7] 1196 ld a, #0x01
0000059D C8 [11] 1197 ret z
0000059E AF [ 4] 1198 xor a, a
1199 ;src/main.c:302: }
0000059F C9 [10] 1200 ret
1201 ;src/main.c:304: void error_oom()
1202 ; ---------------------------------
1203 ; Function error_oom
1204 ; ---------------------------------
000005A0 1205 _error_oom::
1206 ;src/main.c:306: xm_set_status_code("File too large", last_esp_status);
000005A0 3Ar08r10 [13] 1207 ld a, (_last_esp_status)
000005A3 F5 [11] 1208 push af
000005A4 33 [ 6] 1209 inc sp
000005A5 21rC4r05 [10] 1210 ld hl, #___str_5
000005A8 CDr16r07 [17] 1211 call _xm_set_status_code
1212 ;src/main.c:308: if (stop_on_error())
000005AB CDr94r05 [17] 1213 call _stop_on_error
000005AE B7 [ 4] 1214 or a, a
000005AF 28 03 [12] 1215 jr z, 00102$
1216 ;src/main.c:309: wait_for_manual_exit();
000005B1 CDr49r05 [17] 1217 call _wait_for_manual_exit
000005B4 1218 00102$:
1219 ;src/main.c:311: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance
000005B4 3E 32 [ 7] 1220 ld a, #0x32
000005B6 CDrF2r04 [17] 1221 call _wait_frames
1222 ;src/main.c:312: wc_rresb(&win_xm);
000005B9 21r64r02 [10] 1223 ld hl, #_win_xm
000005BC CDr00r00 [17] 1224 call _wc_rresb
1225 ;src/main.c:313: wc_exit(WC_NEXT_FILE);
000005BF 3E 02 [ 7] 1226 ld a, #0x02
1227 ;src/main.c:314: }
000005C1 C3r00r00 [10] 1228 jp _wc_exit
000005C4 1229 ___str_5:
000005C4 46 69 6C 65 20 74 6F 1230 .ascii "File too large"
6F 20 6C 61 72 67 65
000005D2 00 1231 .db 0x00
1232 ;src/main.c:316: void error_playback()
1233 ; ---------------------------------
1234 ; Function error_playback
1235 ; ---------------------------------
000005D3 1236 _error_playback::
1237 ;src/main.c:318: xm_set_status_code("Playback error", last_esp_status);
000005D3 3Ar08r10 [13] 1238 ld a, (_last_esp_status)
000005D6 F5 [11] 1239 push af
000005D7 33 [ 6] 1240 inc sp
000005D8 21rF7r05 [10] 1241 ld hl, #___str_6
000005DB CDr16r07 [17] 1242 call _xm_set_status_code
1243 ;src/main.c:320: if (stop_on_error())
000005DE CDr94r05 [17] 1244 call _stop_on_error
000005E1 B7 [ 4] 1245 or a, a
000005E2 28 03 [12] 1246 jr z, 00102$
1247 ;src/main.c:321: wait_for_manual_exit();
000005E4 CDr49r05 [17] 1248 call _wait_for_manual_exit
000005E7 1249 00102$:
1250 ;src/main.c:323: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance
000005E7 3E 32 [ 7] 1251 ld a, #0x32
000005E9 CDrF2r04 [17] 1252 call _wait_frames
1253 ;src/main.c:324: wc_rresb(&win_xm);
000005EC 21r64r02 [10] 1254 ld hl, #_win_xm
000005EF CDr00r00 [17] 1255 call _wc_rresb
1256 ;src/main.c:325: wc_exit(WC_NEXT_FILE);
000005F2 3E 02 [ 7] 1257 ld a, #0x02
1258 ;src/main.c:326: }
000005F4 C3r00r00 [10] 1259 jp _wc_exit
000005F7 1260 ___str_6:
000005F7 50 6C 61 79 62 61 63 1261 .ascii "Playback error"
6B 20 65 72 72 6F 72
00000605 00 1262 .db 0x00
1263 ;src/main.c:333: void copy_file_name()
1264 ; ---------------------------------
1265 ; Function copy_file_name
1266 ; ---------------------------------
00000606 1267 _copy_file_name::
1268 ;src/main.c:335: u8 *src = (u8*)p_file_name;
00000606 ED 4Br09r10 [20] 1269 ld bc, (_p_file_name)
1270 ;src/main.c:338: while (src[i] && i < sizeof(file_name) - 1)
0000060A 1E 00 [ 7] 1271 ld e, #0x00
0000060C 1272 00102$:
0000060C 6B [ 4] 1273 ld l, e
0000060D 26 00 [ 7] 1274 ld h, #0x00
0000060F 09 [11] 1275 add hl, bc
00000610 56 [ 7] 1276 ld d, (hl)
1277 ;src/main.c:340: file_name[i] = src[i];
00000611 3Er0B [ 7] 1278 ld a, #<(_file_name)
00000613 83 [ 4] 1279 add a, e
00000614 6F [ 4] 1280 ld l, a
00000615 3Es10 [ 7] 1281 ld a, #>(_file_name)
00000617 CE 00 [ 7] 1282 adc a, #0x00
00000619 67 [ 4] 1283 ld h, a
1284 ;src/main.c:338: while (src[i] && i < sizeof(file_name) - 1)
0000061A 7A [ 4] 1285 ld a, d
0000061B B7 [ 4] 1286 or a, a
0000061C 28 0A [12] 1287 jr z, 00104$
0000061E 7B [ 4] 1288 ld a, e
0000061F D6 20 [ 7] 1289 sub a, #0x20
00000621 30 05 [12] 1290 jr nc, 00104$
1291 ;src/main.c:340: file_name[i] = src[i];
00000623 72 [ 7] 1292 ld (hl), d
1293 ;src/main.c:341: i++;
00000624 1C [ 4] 1294 inc e
00000625 C3r0Cr06 [10] 1295 jp 00102$
00000628 1296 00104$:
1297 ;src/main.c:343: file_name[i] = 0;
00000628 36 00 [10] 1298 ld (hl), #0x00
1299 ;src/main.c:344: }
0000062A C9 [10] 1300 ret
1301 ;src/main.c:377: void xm_draw_static_labels()
1302 ; ---------------------------------
1303 ; Function xm_draw_static_labels
1304 ; ---------------------------------
0000062B 1305 _xm_draw_static_labels::
1306 ;src/main.c:379: wc_prsrw(&win_xm, "File:", ROW_FILE, 1, 5);
0000062B 21 05 00 [10] 1307 ld hl, #0x0005
0000062E E5 [11] 1308 push hl
0000062F 21 02 01 [10] 1309 ld hl, #0x102
00000632 E5 [11] 1310 push hl
00000633 11r77r06 [10] 1311 ld de, #___str_7
00000636 21r64r02 [10] 1312 ld hl, #_win_xm
00000639 CDr00r00 [17] 1313 call _wc_prsrw
1314 ;src/main.c:380: wc_prsrw_attr(&win_xm, file_name, ROW_FILE, 7, strlen(file_name), ATTR_VALUE);
0000063C 21r0Br10 [10] 1315 ld hl, #_file_name
0000063F CDr00r00 [17] 1316 call _strlen
00000642 3E 71 [ 7] 1317 ld a, #0x71
00000644 F5 [11] 1318 push af
00000645 33 [ 6] 1319 inc sp
00000646 D5 [11] 1320 push de
00000647 21 02 07 [10] 1321 ld hl, #0x702
0000064A E5 [11] 1322 push hl
0000064B 11r0Br10 [10] 1323 ld de, #_file_name
0000064E 21r64r02 [10] 1324 ld hl, #_win_xm
00000651 CDr00r00 [17] 1325 call _wc_prsrw_attr
1326 ;src/main.c:381: wc_prsrw(&win_xm, "Status:", ROW_STATUS, 1, 7);
00000654 21 07 00 [10] 1327 ld hl, #0x0007
00000657 E5 [11] 1328 push hl
00000658 21 03 01 [10] 1329 ld hl, #0x103
0000065B E5 [11] 1330 push hl
0000065C 11r7Dr06 [10] 1331 ld de, #___str_8
0000065F 21r64r02 [10] 1332 ld hl, #_win_xm
00000662 CDr00r00 [17] 1333 call _wc_prsrw
1334 ;src/main.c:384: wc_prsrw(&win_xm, HINT_TEXT, ROW_HINT, 2, sizeof(HINT_TEXT) - 1);
00000665 21 24 00 [10] 1335 ld hl, #0x0024
00000668 E5 [11] 1336 push hl
00000669 21 0A 02 [10] 1337 ld hl, #0x20a
0000066C E5 [11] 1338 push hl
0000066D 11r85r06 [10] 1339 ld de, #___str_9
00000670 21r64r02 [10] 1340 ld hl, #_win_xm
00000673 CDr00r00 [17] 1341 call _wc_prsrw
1342 ;src/main.c:385: }
00000676 C9 [10] 1343 ret
00000677 1344 ___str_7:
00000677 46 69 6C 65 3A 1345 .ascii "File:"
0000067C 00 1346 .db 0x00
0000067D 1347 ___str_8:
0000067D 53 74 61 74 75 73 3A 1348 .ascii "Status:"
00000684 00 1349 .db 0x00
00000685 1350 ___str_9:
00000685 50 67 55 70 2F 50 67 1351 .ascii "PgUp/PgDn:Track Esc:Stop Space:Leave"
44 6E 3A 54 72 61 63
6B 20 45 73 63 3A 53
74 6F 70 20 53 70 61
63 65 3A 4C 65 61 76
65
000006A9 00 1352 .db 0x00
1353 ;src/main.c:391: void xm_set_status_attr(const char *msg, u8 attr)
1354 ; ---------------------------------
1355 ; Function xm_set_status_attr
1356 ; ---------------------------------
000006AA 1357 _xm_set_status_attr::
000006AA DD E5 [15] 1358 push ix
000006AC DD 21 00 00 [14] 1359 ld ix, #0
000006B0 DD 39 [15] 1360 add ix, sp
000006B2 F5 [11] 1361 push af
1362 ;src/main.c:395: while (msg[i] && i < STATUS_VALUE_WIDTH)
000006B3 1E 00 [ 7] 1363 ld e, #0x00
000006B5 1364 00102$:
000006B5 7B [ 4] 1365 ld a, e
000006B6 85 [ 4] 1366 add a, l
000006B7 4F [ 4] 1367 ld c, a
000006B8 3E 00 [ 7] 1368 ld a, #0x00
000006BA 8C [ 4] 1369 adc a, h
000006BB 47 [ 4] 1370 ld b, a
000006BC 0A [ 7] 1371 ld a, (bc)
000006BD 4F [ 4] 1372 ld c, a
000006BE B7 [ 4] 1373 or a, a
000006BF 28 1F [12] 1374 jr z, 00119$
000006C1 7B [ 4] 1375 ld a, e
000006C2 D6 18 [ 7] 1376 sub a, #0x18
000006C4 30 1A [12] 1377 jr nc, 00119$
1378 ;src/main.c:397: status_buf[i] = msg[i];
000006C6 3Er32 [ 7] 1379 ld a, #<(_status_buf)
000006C8 83 [ 4] 1380 add a, e
000006C9 DD 77 FE [19] 1381 ld -2 (ix), a
000006CC 3Es10 [ 7] 1382 ld a, #>(_status_buf)
000006CE CE 00 [ 7] 1383 adc a, #0x00
000006D0 DD 77 FF [19] 1384 ld -1 (ix), a
000006D3 E5 [11] 1385 push hl
000006D4 DD 6E FE [19] 1386 ld l, -2 (ix)
000006D7 DD 66 FF [19] 1387 ld h, -1 (ix)
000006DA 71 [ 7] 1388 ld (hl), c
000006DB E1 [10] 1389 pop hl
1390 ;src/main.c:398: i++;
000006DC 1C [ 4] 1391 inc e
000006DD C3rB5r06 [10] 1392 jp 00102$
1393 ;src/main.c:400: while (i < STATUS_VALUE_WIDTH)
000006E0 1394 00119$:
000006E0 1395 00105$:
000006E0 7B [ 4] 1396 ld a, e
000006E1 D6 18 [ 7] 1397 sub a, #0x18
000006E3 30 0C [12] 1398 jr nc, 00107$
1399 ;src/main.c:401: status_buf[i++] = ' ';
000006E5 21r32r10 [10] 1400 ld hl, #_status_buf
000006E8 16 00 [ 7] 1401 ld d, #0x00
000006EA 19 [11] 1402 add hl, de
000006EB 1C [ 4] 1403 inc e
000006EC 36 20 [10] 1404 ld (hl), #0x20
000006EE C3rE0r06 [10] 1405 jp 00105$
000006F1 1406 00107$:
1407 ;src/main.c:403: wc_prsrw_attr(&win_xm, status_buf, ROW_STATUS, STATUS_VALUE_X, STATUS_VALUE_WIDTH, attr);
000006F1 21r64r02 [10] 1408 ld hl, #_win_xm
000006F4 DD 7E 04 [19] 1409 ld a, 4 (ix)
000006F7 F5 [11] 1410 push af
000006F8 33 [ 6] 1411 inc sp
000006F9 11 18 00 [10] 1412 ld de, #0x0018
000006FC D5 [11] 1413 push de
000006FD 11 03 09 [10] 1414 ld de, #0x903
00000700 D5 [11] 1415 push de
00000701 11r32r10 [10] 1416 ld de, #_status_buf
00000704 CDr00r00 [17] 1417 call _wc_prsrw_attr
1418 ;src/main.c:404: }
00000707 DD F9 [10] 1419 ld sp, ix
00000709 DD E1 [14] 1420 pop ix
0000070B E1 [10] 1421 pop hl
0000070C 33 [ 6] 1422 inc sp
0000070D E9 [ 4] 1423 jp (hl)
1424 ;src/main.c:406: void xm_set_status(const char *msg)
1425 ; ---------------------------------
1426 ; Function xm_set_status
1427 ; ---------------------------------
0000070E 1428 _xm_set_status::
1429 ;src/main.c:408: xm_set_status_attr(msg, ATTR_VALUE);
0000070E 3E 71 [ 7] 1430 ld a, #0x71
00000710 F5 [11] 1431 push af
00000711 33 [ 6] 1432 inc sp
00000712 CDrAAr06 [17] 1433 call _xm_set_status_attr
1434 ;src/main.c:409: }
00000715 C9 [10] 1435 ret
1436 ;src/main.c:416: void xm_set_status_code(const char *msg, u8 code)
1437 ; ---------------------------------
1438 ; Function xm_set_status_code
1439 ; ---------------------------------
00000716 1440 _xm_set_status_code::
00000716 DD E5 [15] 1441 push ix
00000718 DD 21 00 00 [14] 1442 ld ix, #0
0000071C DD 39 [15] 1443 add ix, sp
0000071E 3B [ 6] 1444 dec sp
0000071F EB [ 4] 1445 ex de, hl
1446 ;src/main.c:421: while (msg[i] && i < sizeof(status_code_buf) - 7)
00000720 0E 00 [ 7] 1447 ld c, #0x00
00000722 1448 00102$:
00000722 69 [ 4] 1449 ld l, c
00000723 26 00 [ 7] 1450 ld h, #0x00
00000725 19 [11] 1451 add hl, de
00000726 46 [ 7] 1452 ld b, (hl)
1453 ;src/main.c:423: status_code_buf[i] = msg[i];
00000727 3Er4A [ 7] 1454 ld a, #<(_status_code_buf)
00000729 81 [ 4] 1455 add a, c
0000072A 6F [ 4] 1456 ld l, a
0000072B 3Es10 [ 7] 1457 ld a, #>(_status_code_buf)
0000072D CE 00 [ 7] 1458 adc a, #0x00
0000072F 67 [ 4] 1459 ld h, a
1460 ;src/main.c:424: i++;
00000730 79 [ 4] 1461 ld a, c
00000731 3C [ 4] 1462 inc a
00000732 DD 77 FF [19] 1463 ld -1 (ix), a
1464 ;src/main.c:421: while (msg[i] && i < sizeof(status_code_buf) - 7)
00000735 78 [ 4] 1465 ld a, b
00000736 B7 [ 4] 1466 or a, a
00000737 28 0C [12] 1467 jr z, 00104$
00000739 79 [ 4] 1468 ld a, c
0000073A D6 11 [ 7] 1469 sub a, #0x11
0000073C 30 07 [12] 1470 jr nc, 00104$
1471 ;src/main.c:423: status_code_buf[i] = msg[i];
0000073E 70 [ 7] 1472 ld (hl), b
1473 ;src/main.c:424: i++;
0000073F DD 4E FF [19] 1474 ld c, -1 (ix)
00000742 C3r22r07 [10] 1475 jp 00102$
00000745 1476 00104$:
1477 ;src/main.c:427: status_code_buf[i++] = ' ';
00000745 DD 4E FF [19] 1478 ld c, -1 (ix)
00000748 36 20 [10] 1479 ld (hl), #0x20
1480 ;src/main.c:428: status_code_buf[i++] = '(';
0000074A 69 [ 4] 1481 ld l, c
0000074B 0C [ 4] 1482 inc c
0000074C 26 00 [ 7] 1483 ld h, #0x00
0000074E 11r4Ar10 [10] 1484 ld de, #_status_code_buf
00000751 19 [11] 1485 add hl, de
00000752 36 28 [10] 1486 ld (hl), #0x28
1487 ;src/main.c:429: status_code_buf[i++] = '0';
00000754 69 [ 4] 1488 ld l, c
00000755 0C [ 4] 1489 inc c
00000756 26 00 [ 7] 1490 ld h, #0x00
00000758 11r4Ar10 [10] 1491 ld de, #_status_code_buf
0000075B 19 [11] 1492 add hl, de
0000075C 36 30 [10] 1493 ld (hl), #0x30
1494 ;src/main.c:430: status_code_buf[i++] = 'x';
0000075E 69 [ 4] 1495 ld l, c
0000075F 0C [ 4] 1496 inc c
00000760 26 00 [ 7] 1497 ld h, #0x00
00000762 11r4Ar10 [10] 1498 ld de, #_status_code_buf
00000765 19 [11] 1499 add hl, de
00000766 36 78 [10] 1500 ld (hl), #0x78
1501 ;src/main.c:431: status_code_buf[i++] = hexch[(code >> 4) & 0xF];
00000768 69 [ 4] 1502 ld l, c
00000769 0C [ 4] 1503 inc c
0000076A 26 00 [ 7] 1504 ld h, #0x00
0000076C 11r4Ar10 [10] 1505 ld de, #_status_code_buf
0000076F 19 [11] 1506 add hl, de
00000770 DD 7E 04 [19] 1507 ld a, 4 (ix)
00000773 07 [ 4] 1508 rlca
00000774 07 [ 4] 1509 rlca
00000775 07 [ 4] 1510 rlca
00000776 07 [ 4] 1511 rlca
00000777 E6 0F [ 7] 1512 and a, #0xf
00000779 C6rBD [ 7] 1513 add a, #<(_xm_set_status_code_hexch_10000_129)
0000077B 5F [ 4] 1514 ld e, a
0000077C 3E 00 [ 7] 1515 ld a, #0x00
0000077E CEs07 [ 7] 1516 adc a, #>(_xm_set_status_code_hexch_10000_129)
00000780 57 [ 4] 1517 ld d, a
00000781 1A [ 7] 1518 ld a, (de)
00000782 77 [ 7] 1519 ld (hl), a
1520 ;src/main.c:432: status_code_buf[i++] = hexch[code & 0xF];
00000783 69 [ 4] 1521 ld l, c
00000784 0C [ 4] 1522 inc c
00000785 26 00 [ 7] 1523 ld h, #0x00
00000787 11r4Ar10 [10] 1524 ld de, #_status_code_buf
0000078A 19 [11] 1525 add hl, de
0000078B DD 7E 04 [19] 1526 ld a, 4 (ix)
0000078E E6 0F [ 7] 1527 and a, #0x0f
00000790 C6rBD [ 7] 1528 add a, #<(_xm_set_status_code_hexch_10000_129)
00000792 5F [ 4] 1529 ld e, a
00000793 3E 00 [ 7] 1530 ld a, #0x00
00000795 CEs07 [ 7] 1531 adc a, #>(_xm_set_status_code_hexch_10000_129)
00000797 57 [ 4] 1532 ld d, a
00000798 1A [ 7] 1533 ld a, (de)
00000799 77 [ 7] 1534 ld (hl), a
1535 ;src/main.c:433: status_code_buf[i++] = ')';
0000079A 69 [ 4] 1536 ld l, c
0000079B 0C [ 4] 1537 inc c
0000079C 26 00 [ 7] 1538 ld h, #0x00
0000079E 11r4Ar10 [10] 1539 ld de, #_status_code_buf
000007A1 19 [11] 1540 add hl, de
000007A2 36 29 [10] 1541 ld (hl), #0x29
1542 ;src/main.c:434: status_code_buf[i] = 0;
000007A4 69 [ 4] 1543 ld l, c
000007A5 26 00 [ 7] 1544 ld h, #0x00
000007A7 11r4Ar10 [10] 1545 ld de, #_status_code_buf
000007AA 19 [11] 1546 add hl, de
000007AB 36 00 [10] 1547 ld (hl), #0x00
1548 ;src/main.c:436: xm_set_status_attr(status_code_buf, ATTR_ERROR);
000007AD 3E 72 [ 7] 1549 ld a, #0x72
000007AF F5 [11] 1550 push af
000007B0 33 [ 6] 1551 inc sp
000007B1 21r4Ar10 [10] 1552 ld hl, #_status_code_buf
000007B4 CDrAAr06 [17] 1553 call _xm_set_status_attr
1554 ;src/main.c:437: }
000007B7 33 [ 6] 1555 inc sp
000007B8 DD E1 [14] 1556 pop ix
000007BA E1 [10] 1557 pop hl
000007BB 33 [ 6] 1558 inc sp
000007BC E9 [ 4] 1559 jp (hl)
000007BD 1560 _xm_set_status_code_hexch_10000_129:
000007BD 30 31 32 33 34 35 36 1561 .ascii "0123456789ABCDEF"
37 38 39 41 42 43 44
45 46
000007CD 00 1562 .db 0x00
1563 ;src/main.c:450: void put_hex2(char *dst, u8 val)
1564 ; ---------------------------------
1565 ; Function put_hex2
1566 ; ---------------------------------
000007CE 1567 _put_hex2::
000007CE DD E5 [15] 1568 push ix
000007D0 DD 21 00 00 [14] 1569 ld ix, #0
000007D4 DD 39 [15] 1570 add ix, sp
000007D6 EB [ 4] 1571 ex de, hl
1572 ;src/main.c:453: dst[0] = hexch[(val >> 4) & 0xF];
000007D7 01rFAr07 [10] 1573 ld bc, #_put_hex2_hexch_10000_132+0
000007DA DD 7E 04 [19] 1574 ld a, 4 (ix)
000007DD 07 [ 4] 1575 rlca
000007DE 07 [ 4] 1576 rlca
000007DF 07 [ 4] 1577 rlca
000007E0 07 [ 4] 1578 rlca
000007E1 E6 0F [ 7] 1579 and a, #0xf
000007E3 6F [ 4] 1580 ld l, a
000007E4 26 00 [ 7] 1581 ld h, #0x00
000007E6 09 [11] 1582 add hl, bc
000007E7 7E [ 7] 1583 ld a, (hl)
000007E8 12 [ 7] 1584 ld (de), a
1585 ;src/main.c:454: dst[1] = hexch[val & 0xF];
000007E9 13 [ 6] 1586 inc de
000007EA DD 7E 04 [19] 1587 ld a, 4 (ix)
000007ED E6 0F [ 7] 1588 and a, #0x0f
000007EF 6F [ 4] 1589 ld l, a
000007F0 26 00 [ 7] 1590 ld h, #0x00
000007F2 09 [11] 1591 add hl, bc
000007F3 7E [ 7] 1592 ld a, (hl)
000007F4 12 [ 7] 1593 ld (de), a
1594 ;src/main.c:455: }
000007F5 DD E1 [14] 1595 pop ix
000007F7 E1 [10] 1596 pop hl
000007F8 33 [ 6] 1597 inc sp
000007F9 E9 [ 4] 1598 jp (hl)
000007FA 1599 _put_hex2_hexch_10000_132:
000007FA 30 31 32 33 34 35 36 1600 .ascii "0123456789ABCDEF"
37 38 39 41 42 43 44
45 46
0000080A 00 1601 .db 0x00
1602 ;src/main.c:457: void put_dec3(char *dst, u16 val)
1603 ; ---------------------------------
1604 ; Function put_dec3
1605 ; ---------------------------------
0000080B 1606 _put_dec3::
0000080B DD E5 [15] 1607 push ix
0000080D DD 21 00 00 [14] 1608 ld ix, #0
00000811 DD 39 [15] 1609 add ix, sp
00000813 F5 [11] 1610 push af
00000814 4D [ 4] 1611 ld c, l
00000815 44 [ 4] 1612 ld b, h
1613 ;src/main.c:459: dst[0] = '0' + (val / 100) % 10;
00000816 E1 [10] 1614 pop hl
00000817 D5 [11] 1615 push de
00000818 C5 [11] 1616 push bc
00000819 11 64 00 [10] 1617 ld de, #0x0064
0000081C DD 6E FE [19] 1618 ld l, -2 (ix)
0000081F DD 66 FF [19] 1619 ld h, -1 (ix)
00000822 CDr00r00 [17] 1620 call __divuint
00000825 EB [ 4] 1621 ex de, hl
00000826 11 0A 00 [10] 1622 ld de, #0x000a
00000829 CDr00r00 [17] 1623 call __moduint
0000082C C1 [10] 1624 pop bc
0000082D 7B [ 4] 1625 ld a, e
0000082E C6 30 [ 7] 1626 add a, #0x30
00000830 02 [ 7] 1627 ld (bc), a
1628 ;src/main.c:460: dst[1] = '0' + (val / 10) % 10;
00000831 69 [ 4] 1629 ld l, c
00000832 60 [ 4] 1630 ld h, b
00000833 23 [ 6] 1631 inc hl
00000834 E5 [11] 1632 push hl
00000835 C5 [11] 1633 push bc
00000836 11 0A 00 [10] 1634 ld de, #0x000a
00000839 DD 6E FE [19] 1635 ld l, -2 (ix)
0000083C DD 66 FF [19] 1636 ld h, -1 (ix)
0000083F CDr00r00 [17] 1637 call __divuint
00000842 EB [ 4] 1638 ex de, hl
00000843 11 0A 00 [10] 1639 ld de, #0x000a
00000846 CDr00r00 [17] 1640 call __moduint
00000849 C1 [10] 1641 pop bc
0000084A E1 [10] 1642 pop hl
0000084B 7B [ 4] 1643 ld a, e
0000084C C6 30 [ 7] 1644 add a, #0x30
0000084E 77 [ 7] 1645 ld (hl), a
1646 ;src/main.c:461: dst[2] = '0' + val % 10;
0000084F 03 [ 6] 1647 inc bc
00000850 03 [ 6] 1648 inc bc
00000851 C5 [11] 1649 push bc
00000852 11 0A 00 [10] 1650 ld de, #0x000a
00000855 DD 6E FE [19] 1651 ld l, -2 (ix)
00000858 DD 66 FF [19] 1652 ld h, -1 (ix)
0000085B CDr00r00 [17] 1653 call __moduint
0000085E C1 [10] 1654 pop bc
0000085F 7B [ 4] 1655 ld a, e
00000860 C6 30 [ 7] 1656 add a, #0x30
00000862 02 [ 7] 1657 ld (bc), a
1658 ;src/main.c:462: }
00000863 DD F9 [10] 1659 ld sp, ix
00000865 DD E1 [14] 1660 pop ix
00000867 C9 [10] 1661 ret
1662 ;src/main.c:464: void put_time(char *dst, u32 sec)
1663 ; ---------------------------------
1664 ; Function put_time
1665 ; ---------------------------------
00000868 1666 _put_time::
00000868 DD E5 [15] 1667 push ix
0000086A DD 21 00 00 [14] 1668 ld ix, #0
0000086E DD 39 [15] 1669 add ix, sp
00000870 E5 [11] 1670 push hl
1671 ;src/main.c:466: u8 m = (sec / 60) % 100;
00000871 21 00 00 [10] 1672 ld hl, #0x0000
00000874 E5 [11] 1673 push hl
00000875 2E 3C [ 7] 1674 ld l, #0x3c
00000877 E5 [11] 1675 push hl
00000878 DD 5E 04 [19] 1676 ld e, 4 (ix)
0000087B DD 56 05 [19] 1677 ld d, 5 (ix)
0000087E DD 6E 06 [19] 1678 ld l, 6 (ix)
00000881 DD 66 07 [19] 1679 ld h, 7 (ix)
00000884 CDr00r00 [17] 1680 call __divulong
00000887 F1 [10] 1681 pop af
00000888 F1 [10] 1682 pop af
00000889 01 00 00 [10] 1683 ld bc, #0x0000
0000088C C5 [11] 1684 push bc
0000088D 0E 64 [ 7] 1685 ld c, #0x64
0000088F C5 [11] 1686 push bc
00000890 CDr00r00 [17] 1687 call __modulong
00000893 F1 [10] 1688 pop af
00000894 F1 [10] 1689 pop af
00000895 4B [ 4] 1690 ld c, e
1691 ;src/main.c:467: u8 s = sec % 60;
00000896 C5 [11] 1692 push bc
00000897 21 00 00 [10] 1693 ld hl, #0x0000
0000089A E5 [11] 1694 push hl
0000089B 2E 3C [ 7] 1695 ld l, #0x3c
0000089D E5 [11] 1696 push hl
0000089E DD 5E 04 [19] 1697 ld e, 4 (ix)
000008A1 DD 56 05 [19] 1698 ld d, 5 (ix)
000008A4 DD 6E 06 [19] 1699 ld l, 6 (ix)
000008A7 DD 66 07 [19] 1700 ld h, 7 (ix)
000008AA CDr00r00 [17] 1701 call __modulong
000008AD F1 [10] 1702 pop af
000008AE F1 [10] 1703 pop af
000008AF C1 [10] 1704 pop bc
1705 ;src/main.c:469: dst[0] = '0' + (m / 10) % 10;
000008B0 51 [ 4] 1706 ld d, c
000008B1 D5 [11] 1707 push de
000008B2 2E 0A [ 7] 1708 ld l, #0x0a
000008B4 7A [ 4] 1709 ld a, d
000008B5 CDr00r00 [17] 1710 call __divuchar
000008B8 7B [ 4] 1711 ld a, e
000008B9 2E 0A [ 7] 1712 ld l, #0x0a
000008BB CDr00r00 [17] 1713 call __moduchar
000008BE 7B [ 4] 1714 ld a, e
000008BF D1 [10] 1715 pop de
000008C0 C6 30 [ 7] 1716 add a, #0x30
000008C2 E1 [10] 1717 pop hl
000008C3 E5 [11] 1718 push hl
000008C4 77 [ 7] 1719 ld (hl), a
1720 ;src/main.c:470: dst[1] = '0' + m % 10;
000008C5 C1 [10] 1721 pop bc
000008C6 C5 [11] 1722 push bc
000008C7 03 [ 6] 1723 inc bc
000008C8 C5 [11] 1724 push bc
000008C9 D5 [11] 1725 push de
000008CA 2E 0A [ 7] 1726 ld l, #0x0a
000008CC 7A [ 4] 1727 ld a, d
000008CD CDr00r00 [17] 1728 call __moduchar
000008D0 7B [ 4] 1729 ld a, e
000008D1 D1 [10] 1730 pop de
000008D2 C1 [10] 1731 pop bc
000008D3 C6 30 [ 7] 1732 add a, #0x30
000008D5 02 [ 7] 1733 ld (bc), a
1734 ;src/main.c:471: dst[2] = ':';
000008D6 E1 [10] 1735 pop hl
000008D7 E5 [11] 1736 push hl
000008D8 23 [ 6] 1737 inc hl
000008D9 23 [ 6] 1738 inc hl
000008DA 36 3A [10] 1739 ld (hl), #0x3a
1740 ;src/main.c:472: dst[3] = '0' + (s / 10) % 10;
000008DC C1 [10] 1741 pop bc
000008DD C5 [11] 1742 push bc
000008DE 03 [ 6] 1743 inc bc
000008DF 03 [ 6] 1744 inc bc
000008E0 03 [ 6] 1745 inc bc
000008E1 C5 [11] 1746 push bc
000008E2 D5 [11] 1747 push de
000008E3 2E 0A [ 7] 1748 ld l, #0x0a
000008E5 7B [ 4] 1749 ld a, e
000008E6 CDr00r00 [17] 1750 call __divuchar
000008E9 7B [ 4] 1751 ld a, e
000008EA 2E 0A [ 7] 1752 ld l, #0x0a
000008EC CDr00r00 [17] 1753 call __moduchar
000008EF 7B [ 4] 1754 ld a, e
000008F0 D1 [10] 1755 pop de
000008F1 C1 [10] 1756 pop bc
000008F2 C6 30 [ 7] 1757 add a, #0x30
000008F4 02 [ 7] 1758 ld (bc), a
1759 ;src/main.c:473: dst[4] = '0' + s % 10;
000008F5 DD 7E FE [19] 1760 ld a, -2 (ix)
000008F8 C6 04 [ 7] 1761 add a, #0x04
000008FA 4F [ 4] 1762 ld c, a
000008FB DD 7E FF [19] 1763 ld a, -1 (ix)
000008FE CE 00 [ 7] 1764 adc a, #0x00
00000900 47 [ 4] 1765 ld b, a
00000901 C5 [11] 1766 push bc
00000902 2E 0A [ 7] 1767 ld l, #0x0a
00000904 7B [ 4] 1768 ld a, e
00000905 CDr00r00 [17] 1769 call __moduchar
00000908 7B [ 4] 1770 ld a, e
00000909 C1 [10] 1771 pop bc
0000090A C6 30 [ 7] 1772 add a, #0x30
0000090C 02 [ 7] 1773 ld (bc), a
1774 ;src/main.c:474: }
0000090D DD F9 [10] 1775 ld sp, ix
0000090F DD E1 [14] 1776 pop ix
00000911 E1 [10] 1777 pop hl
00000912 F1 [10] 1778 pop af
00000913 F1 [10] 1779 pop af
00000914 E9 [ 4] 1780 jp (hl)
1781 ;src/main.c:503: void xm_draw_stats_labels()
1782 ; ---------------------------------
1783 ; Function xm_draw_stats_labels
1784 ; ---------------------------------
00000915 1785 _xm_draw_stats_labels::
1786 ;src/main.c:507: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9);
00000915 21 09 00 [10] 1787 ld hl, #0x0009
00000918 E5 [11] 1788 push hl
00000919 21 04 01 [10] 1789 ld hl, #0x104
0000091C E5 [11] 1790 push hl
0000091D 11rB4r09 [10] 1791 ld de, #___str_12
00000920 21r64r02 [10] 1792 ld hl, #_win_xm
00000923 CDr00r00 [17] 1793 call _wc_prsrw
1794 ;src/main.c:508: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7);
00000926 21 07 00 [10] 1795 ld hl, #0x0007
00000929 E5 [11] 1796 push hl
0000092A 21 04 0C [10] 1797 ld hl, #0xc04
0000092D E5 [11] 1798 push hl
0000092E 11rBEr09 [10] 1799 ld de, #___str_13
00000931 21r64r02 [10] 1800 ld hl, #_win_xm
00000934 CDr00r00 [17] 1801 call _wc_prsrw
1802 ;src/main.c:509: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6);
00000937 21 06 00 [10] 1803 ld hl, #0x0006
0000093A E5 [11] 1804 push hl
0000093B 21 04 15 [10] 1805 ld hl, #0x1504
0000093E E5 [11] 1806 push hl
0000093F 11rC6r09 [10] 1807 ld de, #___str_14
00000942 21r64r02 [10] 1808 ld hl, #_win_xm
00000945 CDr00r00 [17] 1809 call _wc_prsrw
1810 ;src/main.c:511: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5);
00000948 21 05 00 [10] 1811 ld hl, #0x0005
0000094B E5 [11] 1812 push hl
0000094C 21 06 01 [10] 1813 ld hl, #0x106
0000094F E5 [11] 1814 push hl
00000950 11rCDr09 [10] 1815 ld de, #___str_15
00000953 21r64r02 [10] 1816 ld hl, #_win_xm
00000956 CDr00r00 [17] 1817 call _wc_prsrw
1818 ;src/main.c:512: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3);
00000959 21 03 00 [10] 1819 ld hl, #0x0003
0000095C E5 [11] 1820 push hl
0000095D 21 06 0C [10] 1821 ld hl, #0xc06
00000960 E5 [11] 1822 push hl
00000961 11rD3r09 [10] 1823 ld de, #___str_16
00000964 21r64r02 [10] 1824 ld hl, #_win_xm
00000967 CDr00r00 [17] 1825 call _wc_prsrw
1826 ;src/main.c:514: for (i = 0; i < BAR_WIDTH; i++)
0000096A 11r6Cr10 [10] 1827 ld de, #_barbuf+0
0000096D 0E 00 [ 7] 1828 ld c, #0x00
0000096F 1829 00103$:
1830 ;src/main.c:515: barbuf[i] = ' ';
0000096F 69 [ 4] 1831 ld l, c
00000970 26 00 [ 7] 1832 ld h, #0x00
00000972 19 [11] 1833 add hl, de
00000973 36 20 [10] 1834 ld (hl), #0x20
1835 ;src/main.c:514: for (i = 0; i < BAR_WIDTH; i++)
00000975 0C [ 4] 1836 inc c
00000976 79 [ 4] 1837 ld a, c
00000977 D6 20 [ 7] 1838 sub a, #0x20
00000979 38 F4 [12] 1839 jr c, 00103$
1840 ;src/main.c:516: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH);
1841 ;src/main.c:507: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9);
1842 ;src/main.c:516: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH);
0000097B 21 20 00 [10] 1843 ld hl, #0x0020
0000097E E5 [11] 1844 push hl
0000097F 21 08 04 [10] 1845 ld hl, #0x408
00000982 E5 [11] 1846 push hl
00000983 21r64r02 [10] 1847 ld hl, #_win_xm
00000986 CDr00r00 [17] 1848 call _wc_prsrw
1849 ;src/main.c:518: bar_attr_ofs = (wc_gadrw(&win_xm, ROW_BAR, BAR_X) & 0x3FFF) | 0x0080;
00000989 21 08 04 [10] 1850 ld hl, #0x408
0000098C E5 [11] 1851 push hl
0000098D 21r64r02 [10] 1852 ld hl, #_win_xm
00000990 CDr00r00 [17] 1853 call _wc_gadrw
00000993 7A [ 4] 1854 ld a, d
00000994 E6 3F [ 7] 1855 and a, #0x3f
00000996 57 [ 4] 1856 ld d, a
00000997 CB FB [ 8] 1857 set 7, e
00000999 ED 53r8Cr10 [20] 1858 ld (_bar_attr_ofs), de
1859 ;src/main.c:520: for (i = 0; i < BAR_WIDTH; i++)
0000099D 0E 00 [ 7] 1860 ld c, #0x00
0000099F 1861 00105$:
1862 ;src/main.c:521: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = ATTR_BAR_EMPTY;
0000099F 2Ar8Cr10 [16] 1863 ld hl, (_bar_attr_ofs)
000009A2 5D [ 4] 1864 ld e, l
000009A3 7C [ 4] 1865 ld a, h
000009A4 C6 C0 [ 7] 1866 add a, #0xc0
000009A6 57 [ 4] 1867 ld d, a
000009A7 69 [ 4] 1868 ld l, c
000009A8 26 00 [ 7] 1869 ld h, #0x00
000009AA 19 [11] 1870 add hl, de
000009AB 36 07 [10] 1871 ld (hl), #0x07
1872 ;src/main.c:520: for (i = 0; i < BAR_WIDTH; i++)
000009AD 0C [ 4] 1873 inc c
000009AE 79 [ 4] 1874 ld a, c
000009AF D6 20 [ 7] 1875 sub a, #0x20
000009B1 38 EC [12] 1876 jr c, 00105$
1877 ;src/main.c:522: }
000009B3 C9 [10] 1878 ret
000009B4 1879 ___str_12:
000009B4 50 61 74 74 65 72 6E 1880 .ascii "Pattern:#"
3A 23
000009BD 00 1881 .db 0x00
000009BE 1882 ___str_13:
000009BE 20 20 52 6F 77 3A 23 1883 .ascii " Row:#"
000009C5 00 1884 .db 0x00
000009C6 1885 ___str_14:
000009C6 20 20 42 50 4D 3A 1886 .ascii " BPM:"
000009CC 00 1887 .db 0x00
000009CD 1888 ___str_15:
000009CD 54 69 6D 65 3A 1889 .ascii "Time:"
000009D2 00 1890 .db 0x00
000009D3 1891 ___str_16:
000009D3 20 2F 20 1892 .ascii " / "
000009D6 00 1893 .db 0x00
1894 ;src/main.c:524: void draw_progress_bar(u32 samples, u32 total)
1895 ; ---------------------------------
1896 ; Function draw_progress_bar
1897 ; ---------------------------------
000009D7 1898 _draw_progress_bar::
000009D7 DD E5 [15] 1899 push ix
000009D9 DD 21 00 00 [14] 1900 ld ix, #0
000009DD DD 39 [15] 1901 add ix, sp
000009DF 4B [ 4] 1902 ld c, e
000009E0 42 [ 4] 1903 ld b, d
000009E1 EB [ 4] 1904 ex de, hl
1905 ;src/main.c:528: if (total)
000009E2 DD 7E 07 [19] 1906 ld a, 7 (ix)
000009E5 DD B6 06 [19] 1907 or a, 6 (ix)
000009E8 DD B6 05 [19] 1908 or a, 5 (ix)
000009EB DD B6 04 [19] 1909 or a, 4 (ix)
000009EE 28 30 [12] 1910 jr z, 00104$
1911 ;src/main.c:530: filled = (u16)(((u32)samples * BAR_WIDTH) / total);
000009F0 69 [ 4] 1912 ld l, c
000009F1 60 [ 4] 1913 ld h, b
000009F2 3E 05 [ 7] 1914 ld a, #0x05
000009F4 1915 00146$:
000009F4 29 [11] 1916 add hl, hl
000009F5 CB 13 [ 8] 1917 rl e
000009F7 CB 12 [ 8] 1918 rl d
000009F9 3D [ 4] 1919 dec a
000009FA 20 F8 [12] 1920 jr nz, 00146$
000009FC DD 4E 06 [19] 1921 ld c, 6 (ix)
000009FF DD 46 07 [19] 1922 ld b, 7 (ix)
00000A02 C5 [11] 1923 push bc
00000A03 DD 4E 04 [19] 1924 ld c, 4 (ix)
00000A06 DD 46 05 [19] 1925 ld b, 5 (ix)
00000A09 C5 [11] 1926 push bc
00000A0A EB [ 4] 1927 ex de, hl
00000A0B CDr00r00 [17] 1928 call __divulong
00000A0E F1 [10] 1929 pop af
00000A0F F1 [10] 1930 pop af
1931 ;src/main.c:531: if (filled > BAR_WIDTH)
00000A10 4B [ 4] 1932 ld c,e
00000A11 42 [ 4] 1933 ld b,d
00000A12 3E 20 [ 7] 1934 ld a, #0x20
00000A14 BB [ 4] 1935 cp a, e
00000A15 3E 00 [ 7] 1936 ld a, #0x00
00000A17 9A [ 4] 1937 sbc a, d
00000A18 30 09 [12] 1938 jr nc, 00120$
1939 ;src/main.c:532: filled = BAR_WIDTH;
00000A1A 01 20 00 [10] 1940 ld bc, #0x0020
00000A1D C3r23r0A [10] 1941 jp 00120$
00000A20 1942 00104$:
1943 ;src/main.c:535: filled = 0; // total length unknown (measurement timed out) - show empty
00000A20 01 00 00 [10] 1944 ld bc, #0x0000
1945 ;src/main.c:537: for (i = 0; i < BAR_WIDTH; i++)
00000A23 1946 00120$:
00000A23 11 00 00 [10] 1947 ld de, #0x0000
00000A26 1948 00107$:
1949 ;src/main.c:538: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = (i < filled) ? ATTR_BAR_FILLED : ATTR_BAR_EMPTY;
00000A26 2Ar8Cr10 [16] 1950 ld hl, (_bar_attr_ofs)
00000A29 7C [ 4] 1951 ld a, h
00000A2A C6 C0 [ 7] 1952 add a, #0xc0
00000A2C 67 [ 4] 1953 ld h, a
00000A2D 19 [11] 1954 add hl, de
00000A2E 7B [ 4] 1955 ld a, e
00000A2F 91 [ 4] 1956 sub a, c
00000A30 7A [ 4] 1957 ld a, d
00000A31 98 [ 4] 1958 sbc a, b
00000A32 30 05 [12] 1959 jr nc, 00111$
00000A34 3E 40 [ 7] 1960 ld a, #0x40
00000A36 C3r3Br0A [10] 1961 jp 00112$
00000A39 1962 00111$:
00000A39 3E 07 [ 7] 1963 ld a, #0x07
00000A3B 1964 00112$:
00000A3B 77 [ 7] 1965 ld (hl), a
1966 ;src/main.c:537: for (i = 0; i < BAR_WIDTH; i++)
00000A3C 13 [ 6] 1967 inc de
00000A3D 6B [ 4] 1968 ld l, e
00000A3E 62 [ 4] 1969 ld h, d
00000A3F 7D [ 4] 1970 ld a, l
00000A40 D6 20 [ 7] 1971 sub a, #0x20
00000A42 7C [ 4] 1972 ld a, h
00000A43 DE 00 [ 7] 1973 sbc a, #0x00
00000A45 38 DF [12] 1974 jr c, 00107$
1975 ;src/main.c:539: }
00000A47 DD E1 [14] 1976 pop ix
00000A49 E1 [10] 1977 pop hl
00000A4A F1 [10] 1978 pop af
00000A4B F1 [10] 1979 pop af
00000A4C E9 [ 4] 1980 jp (hl)
1981 ;src/main.c:541: void xm_update_info()
1982 ; ---------------------------------
1983 ; Function xm_update_info
1984 ; ---------------------------------
00000A4D 1985 _xm_update_info::
00000A4D DD E5 [15] 1986 push ix
00000A4F DD 21 00 00 [14] 1987 ld ix, #0
00000A53 DD 39 [15] 1988 add ix, sp
00000A55 21 F8 FF [10] 1989 ld hl, #-8
00000A58 39 [11] 1990 add hl, sp
00000A59 F9 [ 6] 1991 ld sp, hl
1992 ;src/main.c:547: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle);
00000A5A 3Ar30r10 [13] 1993 ld a, (_xm_handle)
00000A5D 6F [ 4] 1994 ld l, a
00000A5E 3E 0B [ 7] 1995 ld a, #0x0b
00000A60 CDrD1r00 [17] 1996 call _esp_wr_reg8
1997 ;src/main.c:548: esp_cmd(ESP_CMD_TRACK_GET_INFO);
00000A63 3E A8 [ 7] 1998 ld a, #0xa8
00000A65 CDr05r00 [17] 1999 call _esp_cmd
2000 ;src/main.c:549: esp_wait_busy(50); // 1s - a plain info read should be near-instant
00000A68 21 32 00 [10] 2001 ld hl, #0x0032
00000A6B CDrE5r01 [17] 2002 call _esp_wait_busy
2003 ;src/main.c:554: status = esp_rd_reg8(ESP_REG_TRACK_STATUS);
00000A6E 3E 28 [ 7] 2004 ld a, #0x28
00000A70 CDr1Er00 [17] 2005 call _esp_rd_reg8
00000A73 DD 77 FF [19] 2006 ld -1 (ix), a
2007 ;src/main.c:555: if (last_track_status == TRACK_OBJ_ST_PLAYING && status == TRACK_OBJ_ST_STOPPED)
00000A76 3Ar31r10 [13] 2008 ld a, (_last_track_status)
00000A79 D6 21 [ 7] 2009 sub a, #0x21
00000A7B 20 1D [12] 2010 jr nz, 00102$
00000A7D DD 7E FF [19] 2011 ld a, -1 (ix)
00000A80 D6 20 [ 7] 2012 sub a, #0x20
00000A82 20 16 [12] 2013 jr nz, 00102$
2014 ;src/main.c:557: esp_cmd(ESP_CMD_KILL_OBJECTS);
00000A84 3E E4 [ 7] 2015 ld a, #0xe4
00000A86 CDr05r00 [17] 2016 call _esp_cmd
2017 ;src/main.c:558: esp_wait_busy(100);
00000A89 21 64 00 [10] 2018 ld hl, #0x0064
00000A8C CDrE5r01 [17] 2019 call _esp_wait_busy
2020 ;src/main.c:559: wc_rresb(&win_xm);
00000A8F 21r64r02 [10] 2021 ld hl, #_win_xm
00000A92 CDr00r00 [17] 2022 call _wc_rresb
2023 ;src/main.c:560: wc_exit(WC_NEXT_FILE);
00000A95 3E 02 [ 7] 2024 ld a, #0x02
00000A97 CDr00r00 [17] 2025 call _wc_exit
00000A9A 2026 00102$:
2027 ;src/main.c:562: last_track_status = status;
00000A9A DD 7E FF [19] 2028 ld a, -1 (ix)
00000A9D 32r31r10 [13] 2029 ld (#_last_track_status), a
2030 ;src/main.c:564: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN);
00000AA0 3E 2B [ 7] 2031 ld a, #0x2b
00000AA2 CDr1Er00 [17] 2032 call _esp_rd_reg8
00000AA5 DD 77 FA [19] 2033 ld -6 (ix), a
2034 ;src/main.c:565: row = esp_rd_reg8(ESP_REG_TRACK_ROW);
00000AA8 3E 2C [ 7] 2035 ld a, #0x2c
00000AAA CDr1Er00 [17] 2036 call _esp_rd_reg8
00000AAD DD 77 FB [19] 2037 ld -5 (ix), a
2038 ;src/main.c:566: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2);
00000AB0 3E 02 [ 7] 2039 ld a, #0x02
00000AB2 F5 [11] 2040 push af
00000AB3 33 [ 6] 2041 inc sp
00000AB4 21 01 00 [10] 2042 ld hl, #1
00000AB7 39 [11] 2043 add hl, sp
00000AB8 EB [ 4] 2044 ex de, hl
00000AB9 3E 31 [ 7] 2045 ld a, #0x31
00000ABB CDrA5r00 [17] 2046 call _esp_rd_regs
2047 ;src/main.c:567: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES);
00000ABE 3E 2D [ 7] 2048 ld a, #0x2d
00000AC0 CDr37r00 [17] 2049 call _esp_rd_reg32
00000AC3 DD 73 FC [19] 2050 ld -4 (ix), e
00000AC6 DD 72 FD [19] 2051 ld -3 (ix), d
00000AC9 DD 75 FE [19] 2052 ld -2 (ix), l
00000ACC DD 74 FF [19] 2053 ld -1 (ix), h
2054 ;src/main.c:569: if (!total_samples)
00000ACF 3Ar2Fr10 [13] 2055 ld a, (_total_samples+3)
00000AD2 FD 21r2Cr10 [14] 2056 ld iy, #_total_samples
00000AD6 FD B6 02 [19] 2057 or a, 2 (iy)
00000AD9 FD B6 01 [19] 2058 or a, 1 (iy)
00000ADC FD B6 00 [19] 2059 or a, 0 (iy)
00000ADF 20 0C [12] 2060 jr nz, 00105$
2061 ;src/main.c:570: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES);
00000AE1 3E 36 [ 7] 2062 ld a, #0x36
00000AE3 CDr37r00 [17] 2063 call _esp_rd_reg32
00000AE6 ED 53r2Cr10 [20] 2064 ld (_total_samples), de
00000AEA 22r2Er10 [16] 2065 ld (_total_samples + 2), hl
00000AED 2066 00105$:
2067 ;src/main.c:572: put_hex2(hexbuf, pattern);
00000AED DD 7E FA [19] 2068 ld a, -6 (ix)
00000AF0 F5 [11] 2069 push af
00000AF1 33 [ 6] 2070 inc sp
00000AF2 21r62r10 [10] 2071 ld hl, #_hexbuf
00000AF5 CDrCEr07 [17] 2072 call _put_hex2
2073 ;src/main.c:573: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 10, 2, ATTR_VALUE);
00000AF8 3E 71 [ 7] 2074 ld a, #0x71
00000AFA F5 [11] 2075 push af
00000AFB 33 [ 6] 2076 inc sp
00000AFC 21 02 00 [10] 2077 ld hl, #0x0002
00000AFF E5 [11] 2078 push hl
00000B00 21 04 0A [10] 2079 ld hl, #0xa04
00000B03 E5 [11] 2080 push hl
00000B04 11r62r10 [10] 2081 ld de, #_hexbuf
00000B07 21r64r02 [10] 2082 ld hl, #_win_xm
00000B0A CDr00r00 [17] 2083 call _wc_prsrw_attr
2084 ;src/main.c:575: put_hex2(hexbuf, row);
00000B0D DD 7E FB [19] 2085 ld a, -5 (ix)
00000B10 F5 [11] 2086 push af
00000B11 33 [ 6] 2087 inc sp
00000B12 21r62r10 [10] 2088 ld hl, #_hexbuf
00000B15 CDrCEr07 [17] 2089 call _put_hex2
2090 ;src/main.c:576: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 19, 2, ATTR_VALUE);
00000B18 3E 71 [ 7] 2091 ld a, #0x71
00000B1A F5 [11] 2092 push af
00000B1B 33 [ 6] 2093 inc sp
00000B1C 21 02 00 [10] 2094 ld hl, #0x0002
00000B1F E5 [11] 2095 push hl
00000B20 21 04 13 [10] 2096 ld hl, #0x1304
00000B23 E5 [11] 2097 push hl
00000B24 11r62r10 [10] 2098 ld de, #_hexbuf
00000B27 21r64r02 [10] 2099 ld hl, #_win_xm
00000B2A CDr00r00 [17] 2100 call _wc_prsrw_attr
2101 ;src/main.c:578: put_dec3(decbuf, bpm);
00000B2D D1 [10] 2102 pop de
00000B2E D5 [11] 2103 push de
00000B2F 21r64r10 [10] 2104 ld hl, #_decbuf
00000B32 CDr0Br08 [17] 2105 call _put_dec3
2106 ;src/main.c:579: wc_prsrw_attr(&win_xm, decbuf, ROW_STATS, 27, 3, ATTR_VALUE);
00000B35 3E 71 [ 7] 2107 ld a, #0x71
00000B37 F5 [11] 2108 push af
00000B38 33 [ 6] 2109 inc sp
00000B39 21 03 00 [10] 2110 ld hl, #0x0003
00000B3C E5 [11] 2111 push hl
00000B3D 21 04 1B [10] 2112 ld hl, #0x1b04
00000B40 E5 [11] 2113 push hl
00000B41 11r64r10 [10] 2114 ld de, #_decbuf
00000B44 21r64r02 [10] 2115 ld hl, #_win_xm
00000B47 CDr00r00 [17] 2116 call _wc_prsrw_attr
2117 ;src/main.c:581: put_time(timebuf, samples / 44100UL);
00000B4A 21 00 00 [10] 2118 ld hl, #0x0000
00000B4D E5 [11] 2119 push hl
00000B4E 21 44 AC [10] 2120 ld hl, #0xac44
00000B51 E5 [11] 2121 push hl
00000B52 DD 5E FC [19] 2122 ld e, -4 (ix)
00000B55 DD 56 FD [19] 2123 ld d, -3 (ix)
00000B58 DD 6E FE [19] 2124 ld l, -2 (ix)
00000B5B DD 66 FF [19] 2125 ld h, -1 (ix)
00000B5E CDr00r00 [17] 2126 call __divulong
00000B61 F1 [10] 2127 pop af
00000B62 E3 [19] 2128 ex (sp),hl
00000B63 D5 [11] 2129 push de
00000B64 21r67r10 [10] 2130 ld hl, #_timebuf
00000B67 CDr68r08 [17] 2131 call _put_time
2132 ;src/main.c:582: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 7, 5, ATTR_VALUE);
00000B6A 3E 71 [ 7] 2133 ld a, #0x71
00000B6C F5 [11] 2134 push af
00000B6D 33 [ 6] 2135 inc sp
00000B6E 21 05 00 [10] 2136 ld hl, #0x0005
00000B71 E5 [11] 2137 push hl
00000B72 21 06 07 [10] 2138 ld hl, #0x706
00000B75 E5 [11] 2139 push hl
00000B76 11r67r10 [10] 2140 ld de, #_timebuf
00000B79 21r64r02 [10] 2141 ld hl, #_win_xm
00000B7C CDr00r00 [17] 2142 call _wc_prsrw_attr
2143 ;src/main.c:584: put_time(timebuf, total_samples / 44100UL);
00000B7F 21 00 00 [10] 2144 ld hl, #0x0000
00000B82 E5 [11] 2145 push hl
00000B83 21 44 AC [10] 2146 ld hl, #0xac44
00000B86 E5 [11] 2147 push hl
00000B87 ED 5Br2Cr10 [20] 2148 ld de, (_total_samples)
00000B8B 2Ar2Er10 [16] 2149 ld hl, (_total_samples + 2)
00000B8E CDr00r00 [17] 2150 call __divulong
00000B91 F1 [10] 2151 pop af
00000B92 E3 [19] 2152 ex (sp),hl
00000B93 D5 [11] 2153 push de
00000B94 21r67r10 [10] 2154 ld hl, #_timebuf
00000B97 CDr68r08 [17] 2155 call _put_time
2156 ;src/main.c:585: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 15, 5, ATTR_VALUE);
00000B9A 3E 71 [ 7] 2157 ld a, #0x71
00000B9C F5 [11] 2158 push af
00000B9D 33 [ 6] 2159 inc sp
00000B9E 21 05 00 [10] 2160 ld hl, #0x0005
00000BA1 E5 [11] 2161 push hl
00000BA2 21 06 0F [10] 2162 ld hl, #0xf06
00000BA5 E5 [11] 2163 push hl
00000BA6 11r67r10 [10] 2164 ld de, #_timebuf
00000BA9 21r64r02 [10] 2165 ld hl, #_win_xm
00000BAC CDr00r00 [17] 2166 call _wc_prsrw_attr
2167 ;src/main.c:587: draw_progress_bar(samples, total_samples);
00000BAF 2Ar2Er10 [16] 2168 ld hl, (_total_samples + 2)
00000BB2 E5 [11] 2169 push hl
00000BB3 2Ar2Cr10 [16] 2170 ld hl, (_total_samples)
00000BB6 E5 [11] 2171 push hl
00000BB7 DD 5E FC [19] 2172 ld e, -4 (ix)
00000BBA DD 56 FD [19] 2173 ld d, -3 (ix)
00000BBD DD 6E FE [19] 2174 ld l, -2 (ix)
00000BC0 DD 66 FF [19] 2175 ld h, -1 (ix)
00000BC3 CDrD7r09 [17] 2176 call _draw_progress_bar
2177 ;src/main.c:589: }
00000BC6 DD F9 [10] 2178 ld sp, ix
00000BC8 DD E1 [14] 2179 pop ix
00000BCA C9 [10] 2180 ret
2181 ;src/main.c:591: void main_start()
2182 ; ---------------------------------
2183 ; Function main_start
2184 ; ---------------------------------
00000BCB 2185 _main_start::
00000BCB 3B [ 6] 2186 dec sp
2187 ;src/main.c:595: copy_file_name();
00000BCC CDr06r06 [17] 2188 call _copy_file_name
2189 ;src/main.c:607: wc_prwow(&win_xm);
00000BCF 21r64r02 [10] 2190 ld hl, #_win_xm
00000BD2 CDr00r00 [17] 2191 call _wc_prwow
2192 ;src/main.c:608: xm_draw_static_labels();
00000BD5 CDr2Br06 [17] 2193 call _xm_draw_static_labels
2194 ;src/main.c:609: xm_set_status("Loading, please wait...");
00000BD8 21r84r0C [10] 2195 ld hl, #___str_17
00000BDB CDr0Er07 [17] 2196 call _xm_set_status
2197 ;src/main.c:611: if (state_esp == 0xFF)
00000BDE 3Ar00r00 [13] 2198 ld a, (_state_esp)
00000BE1 3C [ 4] 2199 inc a
00000BE2 20 0D [12] 2200 jr nz, 00102$
2201 ;src/main.c:612: state_esp = esp_init() ? 1 : 2;
00000BE4 CDr57r02 [17] 2202 call _esp_init
00000BE7 B7 [ 4] 2203 or a, a
00000BE8 3E 01 [ 7] 2204 ld a, #0x01
00000BEA 20 02 [12] 2205 jr nz, 00126$
00000BEC 3E 02 [ 7] 2206 ld a, #0x02
00000BEE 2207 00126$:
00000BEE 32r00r00 [13] 2208 ld (#_state_esp), a
00000BF1 2209 00102$:
2210 ;src/main.c:614: if (state_esp != 1)
00000BF1 3Ar00r00 [13] 2211 ld a, (_state_esp)
00000BF4 3D [ 4] 2212 dec a
00000BF5 28 07 [12] 2213 jr z, 00104$
2214 ;src/main.c:616: error_esp();
00000BF7 33 [ 6] 2215 inc sp
00000BF8 C3r6Dr05 [10] 2216 jp _error_esp
2217 ;src/main.c:617: return;
00000BFB C3r82r0C [10] 2218 jp 00123$
00000BFE 2219 00104$:
2220 ;src/main.c:620: total_samples = 0;
00000BFE AF [ 4] 2221 xor a, a
00000BFF 32r2Cr10 [13] 2222 ld (_total_samples+0), a
00000C02 32r2Dr10 [13] 2223 ld (_total_samples+1), a
00000C05 32r2Er10 [13] 2224 ld (_total_samples+2), a
00000C08 32r2Fr10 [13] 2225 ld (_total_samples+3), a
2226 ;src/main.c:622: if (!play_xm())
00000C0B CDrBEr02 [17] 2227 call _play_xm
00000C0E B7 [ 4] 2228 or a, a
00000C0F 20 12 [12] 2229 jr nz, 00109$
2230 ;src/main.c:624: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY)
00000C11 3Ar08r10 [13] 2231 ld a, (_last_esp_status)
00000C14 D6 99 [ 7] 2232 sub a, #0x99
00000C16 20 07 [12] 2233 jr nz, 00106$
2234 ;src/main.c:625: error_oom();
00000C18 33 [ 6] 2235 inc sp
00000C19 C3rA0r05 [10] 2236 jp _error_oom
00000C1C C3r82r0C [10] 2237 jp 00123$
00000C1F 2238 00106$:
2239 ;src/main.c:627: error_playback();
00000C1F 33 [ 6] 2240 inc sp
2241 ;src/main.c:628: return;
00000C20 C3rD3r05 [10] 2242 jp _error_playback
00000C23 2243 00109$:
2244 ;src/main.c:631: xm_set_status("Playing");
00000C23 21r9Cr0C [10] 2245 ld hl, #___str_18
00000C26 CDr0Er07 [17] 2246 call _xm_set_status
2247 ;src/main.c:632: xm_draw_stats_labels();
00000C29 CDr15r09 [17] 2248 call _xm_draw_stats_labels
2249 ;src/main.c:633: last_track_status = TRACK_OBJ_ST_PLAYING;
00000C2C 21r31r10 [10] 2250 ld hl, #_last_track_status
00000C2F 36 21 [10] 2251 ld (hl), #0x21
2252 ;src/main.c:634: xm_update_info();
00000C31 CDr4Dr0A [17] 2253 call _xm_update_info
2254 ;src/main.c:636: frame_ctr = 0;
00000C34 FD 21 00 00 [14] 2255 ld iy, #0
00000C38 FD 39 [15] 2256 add iy, sp
00000C3A FD 36 00 00 [19] 2257 ld 0 (iy), #0x00
2258 ;src/main.c:639: while (1)
00000C3E 2259 00121$:
2260 ;src/main.c:643: __endasm;
00000C3E 76 [ 4] 2261 halt
2262 ;src/main.c:645: if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz
00000C3F FD 21 00 00 [14] 2263 ld iy, #0
00000C43 FD 39 [15] 2264 add iy, sp
00000C45 FD 34 00 [23] 2265 inc 0 (iy)
00000C48 FD 7E 00 [19] 2266 ld a, 0 (iy)
00000C4B D6 0A [ 7] 2267 sub a, #0x0a
00000C4D 38 07 [12] 2268 jr c, 00111$
2269 ;src/main.c:647: frame_ctr = 0;
00000C4F FD 36 00 00 [19] 2270 ld 0 (iy), #0x00
2271 ;src/main.c:648: xm_update_info();
00000C53 CDr4Dr0A [17] 2272 call _xm_update_info
00000C56 2273 00111$:
2274 ;src/main.c:651: if (wc_key_pgdn()) // PgDn - unload and go to next file
00000C56 CDr00r00 [17] 2275 call _wc_key_pgdn
00000C59 B7 [ 4] 2276 or a, a
00000C5A 28 05 [12] 2277 jr z, 00113$
2278 ;src/main.c:652: unload_and_exit(WC_NEXT_FILE);
00000C5C 3E 02 [ 7] 2279 ld a, #0x02
00000C5E CDr0Er05 [17] 2280 call _unload_and_exit
00000C61 2281 00113$:
2282 ;src/main.c:654: if (wc_key_pgup()) // PgUp - unload and go to previous file
00000C61 CDr00r00 [17] 2283 call _wc_key_pgup
00000C64 B7 [ 4] 2284 or a, a
00000C65 28 05 [12] 2285 jr z, 00115$
2286 ;src/main.c:655: unload_and_exit(WC_PREV_FILE);
00000C67 3E 04 [ 7] 2287 ld a, #0x04
00000C69 CDr0Er05 [17] 2288 call _unload_and_exit
00000C6C 2289 00115$:
2290 ;src/main.c:657: if (wc_key_esc()) // Esc - unload and exit
00000C6C CDr00r00 [17] 2291 call _wc_key_esc
00000C6F B7 [ 4] 2292 or a, a
00000C70 28 04 [12] 2293 jr z, 00117$
2294 ;src/main.c:658: unload_and_exit(WC_EXIT);
00000C72 AF [ 4] 2295 xor a, a
00000C73 CDr0Er05 [17] 2296 call _unload_and_exit
00000C76 2297 00117$:
2298 ;src/main.c:660: if (wc_key_space()) // Space - leave the track playing, just exit
00000C76 CDr00r00 [17] 2299 call _wc_key_space
00000C79 B7 [ 4] 2300 or a, a
00000C7A 28 C2 [12] 2301 jr z, 00121$
2302 ;src/main.c:661: leave_playing_and_exit();
00000C7C CDr3Fr05 [17] 2303 call _leave_playing_and_exit
00000C7F C3r3Er0C [10] 2304 jp 00121$
00000C82 2305 00123$:
2306 ;src/main.c:663: }
00000C82 33 [ 6] 2307 inc sp
00000C83 C9 [10] 2308 ret
00000C84 2309 ___str_17:
00000C84 4C 6F 61 64 69 6E 67 2310 .ascii "Loading, please wait..."
2C 20 70 6C 65 61 73
65 20 77 61 69 74 2E
2E 2E
00000C9B 00 2311 .db 0x00
00000C9C 2312 ___str_18:
00000C9C 50 6C 61 79 69 6E 67 2313 .ascii "Playing"
00000CA3 00 2314 .db 0x00
2315 ;src/main.c:666: void main()
2316 ; ---------------------------------
2317 ; Function main
2318 ; ---------------------------------
00000CA4 2319 _main::
2320 ;src/main.c:676: __endasm;
00000CA4 ED 73r00r10 [20] 2321 ld (_ret_sp), sp
00000CA8 32r07r10 [13] 2322 ld (_call_type), a
00000CAB ED 43r09r10 [20] 2323 ld (_p_file_name), bc
00000CAF 08 [ 4] 2324 ex af, af
00000CB0 32r06r10 [13] 2325 ld (_file_ext), a
00000CB3 22r02r10 [16] 2326 ld (_filesize), hl
00000CB6 ED 53r04r10 [20] 2327 ld (_filesize + 2), de
2328 ;src/main.c:678: switch (call_type)
00000CBA 3Ar07r10 [13] 2329 ld a, (_call_type+0)
00000CBD B7 [ 4] 2330 or a, a
00000CBE CArCBr0B [10] 2331 jp z, _main_start
00000CC1 3Ar07r10 [13] 2332 ld a, (_call_type)
00000CC4 D6 03 [ 7] 2333 sub a, #0x03
00000CC6 CArFBr04 [10] 2334 jp z, _about
2335 ;src/main.c:680: case WC_CALL_EXT:
2336 ;src/main.c:681: main_start();
2337 ;src/main.c:682: break;
2338 ;src/main.c:684: case WC_CALL_MENU:
2339 ;src/main.c:685: about();
2340 ;src/main.c:686: break;
2341 ;src/main.c:688: default:
2342 ;src/main.c:689: wc_exit(WC_EXIT);
00000CC9 AF [ 4] 2343 xor a, a
2344 ;src/main.c:690: }
2345 ;src/main.c:691: }
00000CCA C3r00r00 [10] 2346 jp _wc_exit
2347 .area _CODE
2348 .area _INITIALIZER
00000000 2349 __xinit__state_esp:
00000000 FF 2350 .db #0xff ; 255
2351 .area _CABS (ABS)