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)