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 _wc_center 31 .globl _wc_screen_width 32 .globl _wait_frames 33 .globl _wait_esc_key 34 .globl _play_xm 35 .globl _esp_init 36 .globl _esp_create_obj 37 .globl _esp_wait_status 38 .globl _esp_rd_end 39 .globl _esp_send_dma 40 .globl _esp_wait_not_busy 41 .globl _esp_wr_end 42 .globl _esp_wr_reg32 43 .globl _esp_wr_reg8 44 .globl _esp_rd_regs 45 .globl _esp_rd_reg32 46 .globl _esp_rd_reg8 47 .globl _esp_cmd 48 .globl _wc_exit 49 .globl _wc_prm_pl 50 .globl _wc_gadrw 51 .globl _wc_prsrw_attr 52 .globl _wc_prsrw 53 .globl _wc_gedpl 54 .globl _wc_key_wait_release 55 .globl _wc_key_enter 56 .globl _wc_key_space 57 .globl _wc_key_pgdn 58 .globl _wc_key_pgup 59 .globl _wc_key_esc 60 .globl _wc_load512 61 .globl _wc_rresb 62 .globl _wc_prwow 63 .globl _strlen 64 .globl _state_esp 65 .globl _bar_attr_ofs 66 .globl _win_about 67 .globl _win_xm 68 .globl _last_track_status 69 .globl _xm_handle 70 .globl _total_samples 71 .globl _file_name 72 .globl _p_file_name 73 .globl _last_esp_status 74 .globl _call_type 75 .globl _file_ext 76 .globl _filesize 77 .globl _ret_sp 78 .globl _fs_buf 79 .globl _win_about_tpl 80 .globl _win_xm_tpl 81 .globl _esp_wait_busy 82 .globl _xm_set_status 83 .globl _xm_set_status_code 84 ;-------------------------------------------------------- 85 ; special function registers 86 ;-------------------------------------------------------- 00000057 87 _SPI_DATA = 0x0057 00000077 88 _SPI_CTRL = 0x0077 000000FE 89 _BORDER = 0x00fe 000000AF 90 _TS_VCONFIG = 0x00af 000000AF 91 _TS_STATUS = 0x00af 000001AF 92 _TS_VPAGE = 0x01af 000002AF 93 _TS_GXOFFSL = 0x02af 000003AF 94 _TS_GXOFFSH = 0x03af 000004AF 95 _TS_GYOFFSL = 0x04af 000005AF 96 _TS_GYOFFSH = 0x05af 000006AF 97 _TS_TSCONFIG = 0x06af 000007AF 98 _TS_PALSEL = 0x07af 00000FAF 99 _TS_BORDER = 0x0faf 000010AF 100 _TS_PAGE0 = 0x10af 000011AF 101 _TS_PAGE1 = 0x11af 000012AF 102 _TS_PAGE2 = 0x12af 000013AF 103 _TS_PAGE3 = 0x13af 000015AF 104 _TS_FMADDR = 0x15af 000016AF 105 _TS_TMPAGE = 0x16af 000017AF 106 _TS_T0GPAGE = 0x17af 000018AF 107 _TS_T1GPAGE = 0x18af 000019AF 108 _TS_SGPAGE = 0x19af 00001AAF 109 _TS_DMASADDRL = 0x1aaf 00001BAF 110 _TS_DMASADDRH = 0x1baf 00001CAF 111 _TS_DMASADDRX = 0x1caf 00001DAF 112 _TS_DMADADDRL = 0x1daf 00001EAF 113 _TS_DMADADDRH = 0x1eaf 00001FAF 114 _TS_DMADADDRX = 0x1faf 000020AF 115 _TS_SYSCONFIG = 0x20af 000021AF 116 _TS_MEMCONFIG = 0x21af 000022AF 117 _TS_HSINT = 0x22af 000023AF 118 _TS_VSINTL = 0x23af 000024AF 119 _TS_VSINTH = 0x24af 000025AF 120 _TS_DMAWPD = 0x25af 000026AF 121 _TS_DMALEN = 0x26af 000027AF 122 _TS_DMACTR = 0x27af 000027AF 123 _TS_DMASTATUS = 0x27af 000028AF 124 _TS_DMANUM = 0x28af 000029AF 125 _TS_FDDVIRT = 0x29af 00002AAF 126 _TS_INTMASK = 0x2aaf 00002BAF 127 _TS_CACHECONF = 0x2baf 00002CAF 128 _TS_DMANUMH = 0x2caf 00002DAF 129 _TS_DMAWPA = 0x2daf 000040AF 130 _TS_T0XOFFSL = 0x40af 000041AF 131 _TS_T0XOFFSH = 0x41af 000042AF 132 _TS_T0YOFFSL = 0x42af 000043AF 133 _TS_T0YOFFSH = 0x43af 000044AF 134 _TS_T1XOFFSL = 0x44af 000045AF 135 _TS_T1XOFFSH = 0x45af 000046AF 136 _TS_T1YOFFSL = 0x46af 000047AF 137 _TS_T1YOFFSH = 0x47af 138 ;-------------------------------------------------------- 139 ; ram data 140 ;-------------------------------------------------------- 141 .area _DATA 00000000 142 _fs_buf:: 00000000 143 .ds 4096 00001000 144 _ret_sp:: 00001000 145 .ds 2 00001002 146 _filesize:: 00001002 147 .ds 4 00001006 148 _file_ext:: 00001006 149 .ds 1 00001007 150 _call_type:: 00001007 151 .ds 1 00001008 152 _last_esp_status:: 00001008 153 .ds 1 00001009 154 _p_file_name:: 00001009 155 .ds 2 0000100B 156 _file_name:: 0000100B 157 .ds 33 0000102C 158 _total_samples:: 0000102C 159 .ds 4 00001030 160 _xm_handle:: 00001030 161 .ds 1 00001031 162 _last_track_status:: 00001031 163 .ds 1 00001032 164 _win_xm:: 00001032 165 .ds 18 00001044 166 _win_about:: 00001044 167 .ds 18 00001056 168 _status_buf: 00001056 169 .ds 24 0000106E 170 _status_code_buf: 0000106E 171 .ds 24 00001086 172 _hexbuf: 00001086 173 .ds 2 00001088 174 _decbuf: 00001088 175 .ds 3 0000108B 176 _timebuf: 0000108B 177 .ds 5 00001090 178 _barbuf: 00001090 179 .ds 32 000010B0 180 _bar_attr_ofs:: 000010B0 181 .ds 2 182 ;-------------------------------------------------------- 183 ; ram data 184 ;-------------------------------------------------------- 185 .area _INITIALIZED 00000000 186 _state_esp:: 00000000 187 .ds 1 188 ;-------------------------------------------------------- 189 ; absolute ram data 190 ;-------------------------------------------------------- 191 .area _DABS (ABS) 192 .area _DABS (ABS) 193 ;-------------------------------------------------------- 194 ; global & static initialisations 195 ;-------------------------------------------------------- 196 .area _HOME 197 .area _GSINIT 198 .area _GSFINAL 199 .area _GSINIT 200 ;-------------------------------------------------------- 201 ; Home 202 ;-------------------------------------------------------- 203 .area _HOME 204 .area _HOME 205 ;-------------------------------------------------------- 206 ; code 207 ;-------------------------------------------------------- 208 .area _CODE 209 ;src/wc_api.c:71: void wc_exit(u8 rc) __naked 210 ; --------------------------------- 211 ; Function wc_exit 212 ; --------------------------------- 00000000 213 _wc_exit:: 214 ;src/wc_api.c:77: __endasm; 00000000 ED 7Br00r10 [20] 215 ld sp, (_ret_sp) 00000004 C9 [10] 216 ret 217 ;src/wc_api.c:78: } 218 ;src/esp32.c:18: void esp_cmd(u8 cmd) 219 ; --------------------------------- 220 ; Function esp_cmd 221 ; --------------------------------- 00000005 222 _esp_cmd:: 00000005 4F [ 4] 223 ld c, a 224 ;src/esp32.c:20: SPI_CTRL = SPI_ESP_CS_ON; 00000006 3E 13 [ 7] 225 ld a, #0x13 00000008 D3 77 [11] 226 out (_SPI_CTRL), a 227 ;src/esp32.c:21: SPI_DATA = ESP_SPI_CMD_WR_REGS; 0000000A 3E 01 [ 7] 228 ld a, #0x01 0000000C D3 57 [11] 229 out (_SPI_DATA), a 230 ;src/esp32.c:22: SPI_DATA = ESP_REG_COMMAND; 0000000E AF [ 4] 231 xor a, a 0000000F D3 57 [11] 232 out (_SPI_DATA), a 233 ;src/esp32.c:23: SPI_DATA; // dummy 00000011 DB 57 [11] 234 in a, (_SPI_DATA) 235 ;src/esp32.c:24: SPI_DATA = cmd; // Command 00000013 79 [ 4] 236 ld a, c 00000014 D3 57 [11] 237 out (_SPI_DATA), a 238 ;src/esp32.c:25: SPI_DATA = ESP_ST_IDLE; // Reset status 00000016 AF [ 4] 239 xor a, a 00000017 D3 57 [11] 240 out (_SPI_DATA), a 241 ;src/esp32.c:26: SPI_CTRL = SPI_ESP_CS_OFF; 00000019 3E 03 [ 7] 242 ld a, #0x03 0000001B D3 77 [11] 243 out (_SPI_CTRL), a 244 ;src/esp32.c:27: } 0000001D C9 [10] 245 ret 246 ;src/esp32.c:29: u8 esp_rd_reg8(u8 reg) 247 ; --------------------------------- 248 ; Function esp_rd_reg8 249 ; --------------------------------- 0000001E 250 _esp_rd_reg8:: 0000001E 4F [ 4] 251 ld c, a 252 ;src/esp32.c:31: SPI_CTRL = SPI_ESP_CS_ON; 0000001F 3E 13 [ 7] 253 ld a, #0x13 00000021 D3 77 [11] 254 out (_SPI_CTRL), a 255 ;src/esp32.c:32: SPI_DATA = ESP_SPI_CMD_RD_REGS; 00000023 3E 02 [ 7] 256 ld a, #0x02 00000025 D3 57 [11] 257 out (_SPI_DATA), a 258 ;src/esp32.c:33: SPI_DATA = reg; 00000027 79 [ 4] 259 ld a, c 00000028 D3 57 [11] 260 out (_SPI_DATA), a 261 ;src/esp32.c:34: SPI_DATA; // dummy 0000002A DB 57 [11] 262 in a, (_SPI_DATA) 263 ;src/esp32.c:35: SPI_DATA; // dummy 0000002C DB 57 [11] 264 in a, (_SPI_DATA) 265 ;src/esp32.c:36: u8 rc = SPI_DATA; 0000002E DB 57 [11] 266 in a, (_SPI_DATA) 00000030 4F [ 4] 267 ld c, a 268 ;src/esp32.c:37: SPI_CTRL = SPI_ESP_CS_OFF; 00000031 3E 03 [ 7] 269 ld a, #0x03 00000033 D3 77 [11] 270 out (_SPI_CTRL), a 271 ;src/esp32.c:39: return rc; 00000035 79 [ 4] 272 ld a, c 273 ;src/esp32.c:40: } 00000036 C9 [10] 274 ret 275 ;src/esp32.c:42: u32 esp_rd_reg32(u8 reg) 276 ; --------------------------------- 277 ; Function esp_rd_reg32 278 ; --------------------------------- 00000037 279 _esp_rd_reg32:: 00000037 DD E5 [15] 280 push ix 00000039 DD 21 00 00 [14] 281 ld ix, #0 0000003D DD 39 [15] 282 add ix, sp 0000003F F5 [11] 283 push af 00000040 F5 [11] 284 push af 00000041 4F [ 4] 285 ld c, a 286 ;src/esp32.c:44: SPI_CTRL = SPI_ESP_CS_ON; 00000042 3E 13 [ 7] 287 ld a, #0x13 00000044 D3 77 [11] 288 out (_SPI_CTRL), a 289 ;src/esp32.c:45: SPI_DATA = ESP_SPI_CMD_RD_REGS; 00000046 3E 02 [ 7] 290 ld a, #0x02 00000048 D3 57 [11] 291 out (_SPI_DATA), a 292 ;src/esp32.c:46: SPI_DATA = reg; 0000004A 79 [ 4] 293 ld a, c 0000004B D3 57 [11] 294 out (_SPI_DATA), a 295 ;src/esp32.c:47: SPI_DATA; // dummy 0000004D DB 57 [11] 296 in a, (_SPI_DATA) 297 ;src/esp32.c:48: SPI_DATA; // dummy 0000004F DB 57 [11] 298 in a, (_SPI_DATA) 299 ;src/esp32.c:49: u32 rc = SPI_DATA; 00000051 DB 57 [11] 300 in a, (_SPI_DATA) 00000053 4F [ 4] 301 ld c, a 302 ;src/esp32.c:50: rc |= (u32)SPI_DATA << 8; 00000054 DB 57 [11] 303 in a, (_SPI_DATA) 00000056 57 [ 4] 304 ld d, a 00000057 59 [ 4] 305 ld e, c 306 ;src/esp32.c:51: rc |= (u32)SPI_DATA << 16; 00000058 DB 57 [11] 307 in a, (_SPI_DATA) 0000005A DD 77 FC [19] 308 ld -4 (ix), a 0000005D AF [ 4] 309 xor a, a 0000005E DD 77 FD [19] 310 ld -3 (ix), a 00000061 DD 77 FE [19] 311 ld -2 (ix), a 00000064 DD 77 FF [19] 312 ld -1 (ix), a 00000067 DD 7E FC [19] 313 ld a, -4 (ix) 0000006A DD 77 FE [19] 314 ld -2 (ix), a 0000006D AF [ 4] 315 xor a, a 0000006E DD 77 FF [19] 316 ld -1 (ix), a 00000071 DD 77 FC [19] 317 ld -4 (ix), a 00000074 DD 77 FD [19] 318 ld -3 (ix), a 00000077 DD 6E FE [19] 319 ld l, -2 (ix) 320 ;src/esp32.c:52: rc |= (u32)SPI_DATA << 24; 0000007A DB 57 [11] 321 in a, (_SPI_DATA) 0000007C DD 77 FC [19] 322 ld -4 (ix), a 0000007F AF [ 4] 323 xor a, a 00000080 DD 77 FD [19] 324 ld -3 (ix), a 00000083 DD 77 FE [19] 325 ld -2 (ix), a 00000086 DD 77 FF [19] 326 ld -1 (ix), a 00000089 DD 7E FC [19] 327 ld a, -4 (ix) 0000008C DD 77 FF [19] 328 ld -1 (ix), a 0000008F AF [ 4] 329 xor a, a 00000090 DD 77 FC [19] 330 ld -4 (ix), a 00000093 DD 77 FD [19] 331 ld -3 (ix), a 00000096 DD 77 FE [19] 332 ld -2 (ix), a 00000099 DD 66 FF [19] 333 ld h, -1 (ix) 334 ;src/esp32.c:53: SPI_CTRL = SPI_ESP_CS_OFF; 0000009C 3E 03 [ 7] 335 ld a, #0x03 0000009E D3 77 [11] 336 out (_SPI_CTRL), a 337 ;src/esp32.c:55: return rc; 338 ;src/esp32.c:56: } 000000A0 DD F9 [10] 339 ld sp, ix 000000A2 DD E1 [14] 340 pop ix 000000A4 C9 [10] 341 ret 342 ;src/esp32.c:58: void esp_rd_regs(u8 reg, void *data, u8 size) 343 ; --------------------------------- 344 ; Function esp_rd_regs 345 ; --------------------------------- 000000A5 346 _esp_rd_regs:: 000000A5 4F [ 4] 347 ld c, a 348 ;src/esp32.c:60: u8 *d = (u8*)data; 349 ;src/esp32.c:62: SPI_CTRL = SPI_ESP_CS_ON; 000000A6 3E 13 [ 7] 350 ld a, #0x13 000000A8 D3 77 [11] 351 out (_SPI_CTRL), a 352 ;src/esp32.c:63: SPI_DATA = ESP_SPI_CMD_RD_REGS; 000000AA 3E 02 [ 7] 353 ld a, #0x02 000000AC D3 57 [11] 354 out (_SPI_DATA), a 355 ;src/esp32.c:64: SPI_DATA = reg; 000000AE 79 [ 4] 356 ld a, c 000000AF D3 57 [11] 357 out (_SPI_DATA), a 358 ;src/esp32.c:65: SPI_DATA; // dummy 000000B1 DB 57 [11] 359 in a, (_SPI_DATA) 360 ;src/esp32.c:66: SPI_DATA; // dummy 000000B3 DB 57 [11] 361 in a, (_SPI_DATA) 362 ;src/esp32.c:67: while (size--) *d++ = SPI_DATA; 000000B5 FD 21 02 00 [14] 363 ld iy, #2 000000B9 FD 39 [15] 364 add iy, sp 000000BB FD 4E 00 [19] 365 ld c, 0 (iy) 000000BE 366 00101$: 000000BE 79 [ 4] 367 ld a, c 000000BF 0D [ 4] 368 dec c 000000C0 B7 [ 4] 369 or a, a 000000C1 28 07 [12] 370 jr z, 00103$ 000000C3 DB 57 [11] 371 in a, (_SPI_DATA) 000000C5 12 [ 7] 372 ld (de), a 000000C6 13 [ 6] 373 inc de 000000C7 C3rBEr00 [10] 374 jp 00101$ 000000CA 375 00103$: 376 ;src/esp32.c:68: SPI_CTRL = SPI_ESP_CS_OFF; 000000CA 3E 03 [ 7] 377 ld a, #0x03 000000CC D3 77 [11] 378 out (_SPI_CTRL), a 379 ;src/esp32.c:69: } 000000CE E1 [10] 380 pop hl 000000CF 33 [ 6] 381 inc sp 000000D0 E9 [ 4] 382 jp (hl) 383 ;src/esp32.c:71: void esp_wr_reg8(u8 reg, u8 data) 384 ; --------------------------------- 385 ; Function esp_wr_reg8 386 ; --------------------------------- 000000D1 387 _esp_wr_reg8:: 000000D1 47 [ 4] 388 ld b, a 000000D2 4D [ 4] 389 ld c, l 390 ;src/esp32.c:73: SPI_CTRL = SPI_ESP_CS_ON; 000000D3 3E 13 [ 7] 391 ld a, #0x13 000000D5 D3 77 [11] 392 out (_SPI_CTRL), a 393 ;src/esp32.c:74: SPI_DATA = ESP_SPI_CMD_WR_REGS; 000000D7 3E 01 [ 7] 394 ld a, #0x01 000000D9 D3 57 [11] 395 out (_SPI_DATA), a 396 ;src/esp32.c:75: SPI_DATA = reg; 000000DB 78 [ 4] 397 ld a, b 000000DC D3 57 [11] 398 out (_SPI_DATA), a 399 ;src/esp32.c:76: SPI_DATA; // dummy 000000DE DB 57 [11] 400 in a, (_SPI_DATA) 401 ;src/esp32.c:77: SPI_DATA = data; 000000E0 79 [ 4] 402 ld a, c 000000E1 D3 57 [11] 403 out (_SPI_DATA), a 404 ;src/esp32.c:78: SPI_CTRL = SPI_ESP_CS_OFF; 000000E3 3E 03 [ 7] 405 ld a, #0x03 000000E5 D3 77 [11] 406 out (_SPI_CTRL), a 407 ;src/esp32.c:79: } 000000E7 C9 [10] 408 ret 409 ;src/esp32.c:81: void esp_wr_reg32(u8 reg, u32 data) 410 ; --------------------------------- 411 ; Function esp_wr_reg32 412 ; --------------------------------- 000000E8 413 _esp_wr_reg32:: 000000E8 4F [ 4] 414 ld c, a 415 ;src/esp32.c:83: SPI_CTRL = SPI_ESP_CS_ON; 000000E9 3E 13 [ 7] 416 ld a, #0x13 000000EB D3 77 [11] 417 out (_SPI_CTRL), a 418 ;src/esp32.c:84: SPI_DATA = ESP_SPI_CMD_WR_REGS; 000000ED 3E 01 [ 7] 419 ld a, #0x01 000000EF D3 57 [11] 420 out (_SPI_DATA), a 421 ;src/esp32.c:85: SPI_DATA = reg; 000000F1 79 [ 4] 422 ld a, c 000000F2 D3 57 [11] 423 out (_SPI_DATA), a 424 ;src/esp32.c:86: SPI_DATA; // dummy 000000F4 DB 57 [11] 425 in a, (_SPI_DATA) 426 ;src/esp32.c:87: SPI_DATA = (u8)data; 000000F6 FD 21 02 00 [14] 427 ld iy, #2 000000FA FD 39 [15] 428 add iy, sp 000000FC FD 7E 00 [19] 429 ld a, 0 (iy) 000000FF D3 57 [11] 430 out (_SPI_DATA), a 431 ;src/esp32.c:88: SPI_DATA = (u8)(data >> 8); 00000101 FD 7E 01 [19] 432 ld a, 1 (iy) 00000104 D3 57 [11] 433 out (_SPI_DATA), a 434 ;src/esp32.c:89: SPI_DATA = (u8)(data >> 16); 00000106 FD 7E 02 [19] 435 ld a, 2 (iy) 00000109 D3 57 [11] 436 out (_SPI_DATA), a 437 ;src/esp32.c:90: SPI_DATA = (u8)(data >> 24); 0000010B FD 7E 03 [19] 438 ld a, 3 (iy) 0000010E D3 57 [11] 439 out (_SPI_DATA), a 440 ;src/esp32.c:91: SPI_CTRL = SPI_ESP_CS_OFF; 00000110 3E 03 [ 7] 441 ld a, #0x03 00000112 D3 77 [11] 442 out (_SPI_CTRL), a 443 ;src/esp32.c:92: } 00000114 E1 [10] 444 pop hl 00000115 F1 [10] 445 pop af 00000116 F1 [10] 446 pop af 00000117 E9 [ 4] 447 jp (hl) 448 ;src/esp32.c:94: void esp_wr_end() 449 ; --------------------------------- 450 ; Function esp_wr_end 451 ; --------------------------------- 00000118 452 _esp_wr_end:: 453 ;src/esp32.c:96: SPI_CTRL = SPI_ESP_CS_ON; 00000118 3E 13 [ 7] 454 ld a, #0x13 0000011A D3 77 [11] 455 out (_SPI_CTRL), a 456 ;src/esp32.c:97: SPI_DATA = ESP_SPI_CMD_W_END; 0000011C 3E 07 [ 7] 457 ld a, #0x07 0000011E D3 57 [11] 458 out (_SPI_DATA), a 459 ;src/esp32.c:98: SPI_DATA; // dummy 00000120 DB 57 [11] 460 in a, (_SPI_DATA) 461 ;src/esp32.c:99: SPI_CTRL = SPI_ESP_CS_OFF; 00000122 3E 03 [ 7] 462 ld a, #0x03 00000124 D3 77 [11] 463 out (_SPI_CTRL), a 464 ;src/esp32.c:100: } 00000126 C9 [10] 465 ret 466 ;src/esp32.c:114: u8 esp_wait_not_busy(u16 max_frames) 467 ; --------------------------------- 468 ; Function esp_wait_not_busy 469 ; --------------------------------- 00000127 470 _esp_wait_not_busy:: 00000127 DD E5 [15] 471 push ix 00000129 DD 21 00 00 [14] 472 ld ix, #0 0000012D DD 39 [15] 473 add ix, sp 0000012F F5 [11] 474 push af 00000130 F5 [11] 475 push af 00000131 DD 75 FE [19] 476 ld -2 (ix), l 00000134 DD 74 FF [19] 477 ld -1 (ix), h 478 ;src/esp32.c:116: u16 start = *(u16*)_TMN; 00000137 21 09 60 [10] 479 ld hl, #0x6009 0000013A 7E [ 7] 480 ld a, (hl) 0000013B DD 77 FC [19] 481 ld -4 (ix), a 0000013E 23 [ 6] 482 inc hl 0000013F 7E [ 7] 483 ld a, (hl) 00000140 DD 77 FD [19] 484 ld -3 (ix), a 485 ;src/esp32.c:118: while ((u16)(*(u16*)_TMN - start) < max_frames) 00000143 486 00103$: 00000143 2A 09 60 [16] 487 ld hl, (#0x6009) 00000146 7D [ 4] 488 ld a, l 00000147 DD 96 FC [19] 489 sub a, -4 (ix) 0000014A 4F [ 4] 490 ld c, a 0000014B 7C [ 4] 491 ld a, h 0000014C DD 9E FD [19] 492 sbc a, -3 (ix) 0000014F 47 [ 4] 493 ld b, a 00000150 79 [ 4] 494 ld a, c 00000151 DD 96 FE [19] 495 sub a, -2 (ix) 00000154 78 [ 4] 496 ld a, b 00000155 DD 9E FF [19] 497 sbc a, -1 (ix) 00000158 30 0E [12] 498 jr nc, 00105$ 499 ;src/esp32.c:120: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) 0000015A 3E 01 [ 7] 500 ld a, #0x01 0000015C CDr1Er00 [17] 501 call _esp_rd_reg8 0000015F FE 02 [ 7] 502 cp a, #0x02 00000161 28 E0 [12] 503 jr z, 00103$ 504 ;src/esp32.c:121: return 1; 00000163 3E 01 [ 7] 505 ld a, #0x01 00000165 C3r69r01 [10] 506 jp 00106$ 00000168 507 00105$: 508 ;src/esp32.c:124: return 0; 00000168 AF [ 4] 509 xor a, a 00000169 510 00106$: 511 ;src/esp32.c:125: } 00000169 DD F9 [10] 512 ld sp, ix 0000016B DD E1 [14] 513 pop ix 0000016D C9 [10] 514 ret 515 ;src/esp32.c:127: void esp_send_dma(u16 a, u8 p, u16 l, u16 n) 516 ; --------------------------------- 517 ; Function esp_send_dma 518 ; --------------------------------- 0000016E 519 _esp_send_dma:: 0000016E 7D [ 4] 520 ld a, l 521 ;src/esp32.c:130: TS_DMASADDRL = (u8)a; 0000016F 01 AF 1A [10] 522 ld bc, #_TS_DMASADDRL 00000172 ED 79 [12] 523 out (c), a 524 ;src/esp32.c:131: TS_DMASADDRH = (u8)((u16)a >> 8); 00000174 7C [ 4] 525 ld a, h 00000175 01 AF 1B [10] 526 ld bc, #_TS_DMASADDRH 00000178 ED 79 [12] 527 out (c), a 528 ;src/esp32.c:132: TS_DMASADDRX = p; 0000017A FD 21 02 00 [14] 529 ld iy, #2 0000017E FD 39 [15] 530 add iy, sp 00000180 FD 7E 00 [19] 531 ld a, 0 (iy) 00000183 01 AF 1C [10] 532 ld bc, #_TS_DMASADDRX 00000186 ED 79 [12] 533 out (c), a 534 ;src/esp32.c:133: TS_DMALEN = (u8)((l >> 1) - 1); 00000188 FD 7E 01 [19] 535 ld a, 1 (iy) 0000018B FD 4E 02 [19] 536 ld c, 2 (iy) 0000018E FD 23 [10] 537 inc iy 00000190 CB 39 [ 8] 538 srl c 00000192 CB 1F [ 8] 539 rr a 00000194 3D [ 4] 540 dec a 00000195 01 AF 26 [10] 541 ld bc, #_TS_DMALEN 00000198 ED 79 [12] 542 out (c), a 543 ;src/esp32.c:134: TS_DMANUM = (u8)(n - 1); 0000019A FD 7E 02 [19] 544 ld a, 2 (iy) 0000019D 3D [ 4] 545 dec a 0000019E 01 AF 28 [10] 546 ld bc, #_TS_DMANUM 000001A1 ED 79 [12] 547 out (c), a 548 ;src/esp32.c:136: SPI_CTRL = SPI_ESP_CS_ON; 000001A3 3E 13 [ 7] 549 ld a, #0x13 000001A5 D3 77 [11] 550 out (_SPI_CTRL), a 551 ;src/esp32.c:137: SPI_DATA = ESP_SPI_CMD_WR_DATA; 000001A7 3E 03 [ 7] 552 ld a, #0x03 000001A9 D3 57 [11] 553 out (_SPI_DATA), a 554 ;src/esp32.c:138: SPI_DATA; // dummy 000001AB DB 57 [11] 555 in a, (_SPI_DATA) 556 ;src/esp32.c:139: SPI_DATA; // dummy 000001AD DB 57 [11] 557 in a, (_SPI_DATA) 558 ;src/esp32.c:140: TS_DMACTR = TS_DMA_RAM_SPI; 000001AF 3E 82 [ 7] 559 ld a, #0x82 000001B1 01 AF 27 [10] 560 ld bc, #_TS_DMACTR 000001B4 ED 79 [12] 561 out (c), a 562 ;src/esp32.c:141: while (TS_DMASTATUS & 0x80); 000001B6 563 00101$: 000001B6 3E 27 [ 7] 564 ld a, #>(_TS_DMASTATUS) 000001B8 DB AF [11] 565 in a, (#<(_TS_DMASTATUS)) 000001BA 07 [ 4] 566 rlca 000001BB 38 F9 [12] 567 jr c, 00101$ 568 ;src/esp32.c:142: SPI_CTRL = SPI_ESP_CS_OFF; 000001BD 3E 03 [ 7] 569 ld a, #0x03 000001BF D3 77 [11] 570 out (_SPI_CTRL), a 571 ;src/esp32.c:144: esp_wr_end(); 000001C1 CDr18r01 [17] 572 call _esp_wr_end 573 ;src/esp32.c:145: esp_wait_not_busy(100); // 2s - esp32 consuming one DMA'd chunk should be near-instant 000001C4 21 64 00 [10] 574 ld hl, #0x0064 000001C7 CDr27r01 [17] 575 call _esp_wait_not_busy 576 ;src/esp32.c:146: } 000001CA E1 [10] 577 pop hl 000001CB F1 [10] 578 pop af 000001CC F1 [10] 579 pop af 000001CD 33 [ 6] 580 inc sp 000001CE E9 [ 4] 581 jp (hl) 582 ;src/esp32.c:148: void esp_rd_end() 583 ; --------------------------------- 584 ; Function esp_rd_end 585 ; --------------------------------- 000001CF 586 _esp_rd_end:: 587 ;src/esp32.c:150: SPI_CTRL = SPI_ESP_CS_ON; 000001CF 3E 13 [ 7] 588 ld a, #0x13 000001D1 D3 77 [11] 589 out (_SPI_CTRL), a 590 ;src/esp32.c:151: SPI_DATA = ESP_SPI_CMD_R_END; 000001D3 3E 08 [ 7] 591 ld a, #0x08 000001D5 D3 57 [11] 592 out (_SPI_DATA), a 593 ;src/esp32.c:152: SPI_DATA; // dummy 000001D7 DB 57 [11] 594 in a, (_SPI_DATA) 595 ;src/esp32.c:153: SPI_CTRL = SPI_ESP_CS_OFF; 000001D9 3E 03 [ 7] 596 ld a, #0x03 000001DB D3 77 [11] 597 out (_SPI_CTRL), a 598 ;src/esp32.c:154: } 000001DD C9 [10] 599 ret 600 ;src/esp32.c:164: u8 esp_wait_status(u8 status, u16 max_frames) 601 ; --------------------------------- 602 ; Function esp_wait_status 603 ; --------------------------------- 000001DE 604 _esp_wait_status:: 000001DE DD E5 [15] 605 push ix 000001E0 DD 21 00 00 [14] 606 ld ix, #0 000001E4 DD 39 [15] 607 add ix, sp 000001E6 21 FB FF [10] 608 ld hl, #-5 000001E9 39 [11] 609 add hl, sp 000001EA F9 [ 6] 610 ld sp, hl 000001EB DD 77 FF [19] 611 ld -1 (ix), a 000001EE DD 73 FD [19] 612 ld -3 (ix), e 000001F1 DD 72 FE [19] 613 ld -2 (ix), d 614 ;src/esp32.c:166: u16 start = *(u16*)_TMN; 000001F4 21 09 60 [10] 615 ld hl, #0x6009 000001F7 7E [ 7] 616 ld a, (hl) 000001F8 DD 77 FB [19] 617 ld -5 (ix), a 000001FB 23 [ 6] 618 inc hl 000001FC 7E [ 7] 619 ld a, (hl) 000001FD DD 77 FC [19] 620 ld -4 (ix), a 621 ;src/esp32.c:168: while ((u16)(*(u16*)_TMN - start) < max_frames) 00000200 622 00103$: 00000200 2A 09 60 [16] 623 ld hl, (#0x6009) 00000203 7D [ 4] 624 ld a, l 00000204 DD 96 FB [19] 625 sub a, -5 (ix) 00000207 4F [ 4] 626 ld c, a 00000208 7C [ 4] 627 ld a, h 00000209 DD 9E FC [19] 628 sbc a, -4 (ix) 0000020C 47 [ 4] 629 ld b, a 0000020D 79 [ 4] 630 ld a, c 0000020E DD 96 FD [19] 631 sub a, -3 (ix) 00000211 78 [ 4] 632 ld a, b 00000212 DD 9E FE [19] 633 sbc a, -2 (ix) 00000215 30 0F [12] 634 jr nc, 00105$ 635 ;src/esp32.c:170: if (esp_rd_reg8(ESP_REG_STATUS) == status) 00000217 3E 01 [ 7] 636 ld a, #0x01 00000219 CDr1Er00 [17] 637 call _esp_rd_reg8 0000021C DD 96 FF [19] 638 sub a, -1 (ix) 0000021F 20 DF [12] 639 jr nz, 00103$ 640 ;src/esp32.c:171: return 1; 00000221 3E 01 [ 7] 641 ld a, #0x01 00000223 C3r27r02 [10] 642 jp 00106$ 00000226 643 00105$: 644 ;src/esp32.c:174: return 0; 00000226 AF [ 4] 645 xor a, a 00000227 646 00106$: 647 ;src/esp32.c:175: } 00000227 DD F9 [10] 648 ld sp, ix 00000229 DD E1 [14] 649 pop ix 0000022B C9 [10] 650 ret 651 ;src/esp32.c:194: u8 esp_wait_busy(u16 max_frames) 652 ; --------------------------------- 653 ; Function esp_wait_busy 654 ; --------------------------------- 0000022C 655 _esp_wait_busy:: 0000022C EB [ 4] 656 ex de, hl 657 ;src/esp32.c:196: u16 start = *(u16*)_TMN; 0000022D ED 4B 09 60 [20] 658 ld bc, (#0x6009) 659 ;src/esp32.c:199: while (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) 00000231 660 00103$: 00000231 C5 [11] 661 push bc 00000232 D5 [11] 662 push de 00000233 3E 01 [ 7] 663 ld a, #0x01 00000235 CDr1Er00 [17] 664 call _esp_rd_reg8 00000238 D1 [10] 665 pop de 00000239 C1 [10] 666 pop bc 0000023A FE 02 [ 7] 667 cp a, #0x02 0000023C 28 0D [12] 668 jr z, 00108$ 669 ;src/esp32.c:201: if ((u16)(*(u16*)_TMN - start) >= max_frames) 0000023E 2A 09 60 [16] 670 ld hl, (#0x6009) 00000241 BF [ 4] 671 cp a, a 00000242 ED 42 [15] 672 sbc hl, bc 00000244 AF [ 4] 673 xor a, a 00000245 ED 52 [15] 674 sbc hl, de 00000247 38 E8 [12] 675 jr c, 00103$ 676 ;src/esp32.c:202: return 0; 00000249 AF [ 4] 677 xor a, a 0000024A C9 [10] 678 ret 679 ;src/esp32.c:206: while ((u16)(*(u16*)_TMN - start) < max_frames) 0000024B 680 00108$: 0000024B 2A 09 60 [16] 681 ld hl, (#0x6009) 0000024E BF [ 4] 682 cp a, a 0000024F ED 42 [15] 683 sbc hl, bc 00000251 AF [ 4] 684 xor a, a 00000252 ED 52 [15] 685 sbc hl, de 00000254 30 10 [12] 686 jr nc, 00110$ 687 ;src/esp32.c:208: if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) 00000256 C5 [11] 688 push bc 00000257 D5 [11] 689 push de 00000258 3E 01 [ 7] 690 ld a, #0x01 0000025A CDr1Er00 [17] 691 call _esp_rd_reg8 0000025D D1 [10] 692 pop de 0000025E C1 [10] 693 pop bc 0000025F FE 02 [ 7] 694 cp a, #0x02 00000261 28 E8 [12] 695 jr z, 00108$ 696 ;src/esp32.c:209: return 1; 00000263 3E 01 [ 7] 697 ld a, #0x01 00000265 C9 [10] 698 ret 00000266 699 00110$: 700 ;src/esp32.c:212: return 0; 00000266 AF [ 4] 701 xor a, a 702 ;src/esp32.c:213: } 00000267 C9 [10] 703 ret 704 ;src/esp32.c:215: int esp_create_obj(u32 size, u8 type) 705 ; --------------------------------- 706 ; Function esp_create_obj 707 ; --------------------------------- 00000268 708 _esp_create_obj:: 709 ;src/esp32.c:217: esp_wr_reg32(ESP_REG_DATA_SIZE, size); 00000268 E5 [11] 710 push hl 00000269 D5 [11] 711 push de 0000026A 3E 03 [ 7] 712 ld a, #0x03 0000026C CDrE8r00 [17] 713 call _esp_wr_reg32 714 ;src/esp32.c:218: esp_wr_reg8(ESP_REG_OBJ_TYPE, type); 0000026F FD 21 02 00 [14] 715 ld iy, #2 00000273 FD 39 [15] 716 add iy, sp 00000275 FD 6E 00 [19] 717 ld l, 0 (iy) 00000278 3E 02 [ 7] 718 ld a, #0x02 0000027A CDrD1r00 [17] 719 call _esp_wr_reg8 720 ;src/esp32.c:219: esp_cmd(ESP_CMD_MAKE_OBJECT); 0000027D 3E E0 [ 7] 721 ld a, #0xe0 0000027F CDr05r00 [17] 722 call _esp_cmd 723 ;src/esp32.c:220: esp_wait_busy(100); // 2s - object allocation should be near-instant 00000282 21 64 00 [10] 724 ld hl, #0x0064 00000285 CDr2Cr02 [17] 725 call _esp_wait_busy 726 ;src/esp32.c:223: return esp_rd_reg8(ESP_REG_OBJ_HANDLE); 00000288 3E 0B [ 7] 727 ld a, #0x0b 0000028A CDr1Er00 [17] 728 call _esp_rd_reg8 0000028D 5F [ 4] 729 ld e, a 0000028E 16 00 [ 7] 730 ld d, #0x00 731 ;src/esp32.c:224: } 00000290 E1 [10] 732 pop hl 00000291 33 [ 6] 733 inc sp 00000292 E9 [ 4] 734 jp (hl) 735 ;src/main.c:145: bool esp_init() 736 ; --------------------------------- 737 ; Function esp_init 738 ; --------------------------------- 00000293 739 _esp_init:: 740 ;src/main.c:147: esp_cmd(ESP_CMD_NOP); 00000293 AF [ 4] 741 xor a, a 00000294 CDr05r00 [17] 742 call _esp_cmd 743 ;src/main.c:148: esp_rd_end(); 00000297 CDrCFr01 [17] 744 call _esp_rd_end 745 ;src/main.c:149: esp_wr_end(); 0000029A CDr18r01 [17] 746 call _esp_wr_end 747 ;src/main.c:153: return true; 0000029D 3E 01 [ 7] 748 ld a, #0x01 749 ;src/main.c:154: } 0000029F C9 [10] 750 ret 000002A0 751 _win_xm_tpl: 000002A0 81 752 .db #0x81 ; 129 000002A1 00 753 .db #0x00 ; 0 000002A2 19 754 .db #0x19 ; 25 000002A3 0A 755 .db #0x0a ; 10 000002A4 28 756 .db #0x28 ; 40 000002A5 0C 757 .db #0x0c ; 12 000002A6 70 758 .db #0x70 ; 112 'p' 000002A7 00 759 .db #0x00 ; 0 000002A8 00 00 760 .dw #0x0000 000002AA 00 761 .db #0x00 ; 0 000002AB 00 762 .db #0x00 ; 0 000002ACrC4r02 763 .dw __str_0 000002AErDEr02 764 .dw __str_1 000002B0rDEr02 765 .dw __str_1 000002B2 766 _win_about_tpl: 000002B2 01 767 .db #0x01 ; 1 000002B3 00 768 .db #0x00 ; 0 000002B4 16 769 .db #0x16 ; 22 000002B5 0A 770 .db #0x0a ; 10 000002B6 24 771 .db #0x24 ; 36 000002B7 07 772 .db #0x07 ; 7 000002B8 70 773 .db #0x70 ; 112 'p' 000002B9 00 774 .db #0x00 ; 0 000002BA 00 00 775 .dw #0x0000 000002BC 00 776 .db #0x00 ; 0 000002BD 00 777 .db #0x00 ; 0 000002BErDFr02 778 .dw __str_2 000002C0rDEr02 779 .dw __str_1 000002C2rE8r02 780 .dw __str_3 000002C4 781 __str_0: 000002C4 0E 782 .db 0x0e 000002C5 20 58 4D 2F 58 4D 5A 783 .ascii " XM/XMZ/S3M Player v0.1 " 2F 53 33 4D 20 50 6C 61 79 65 72 20 76 30 2E 31 20 000002DD 00 784 .db 0x00 000002DE 785 __str_1: 000002DE 00 786 .db 0x00 000002DF 787 __str_2: 000002DF 0E 788 .db 0x0e 000002E0 20 41 62 6F 75 74 20 789 .ascii " About " 000002E7 00 790 .db 0x00 000002E8 791 __str_3: 000002E8 0D 792 .db 0x0d 000002E9 0E 793 .db 0x0e 000002EA 58 4D 20 50 6C 61 79 794 .ascii "XM Player v0.1" 65 72 20 76 30 2E 31 000002F8 0D 795 .db 0x0d 000002F9 0E 796 .db 0x0e 000002FA 62 79 20 41 6C 65 78 797 .ascii "by Alex Korochinskiy" 20 4B 6F 72 6F 63 68 69 6E 73 6B 69 79 0000030E 00 798 .db 0x00 799 ;src/main.c:158: bool play_xm() 800 ; --------------------------------- 801 ; Function play_xm 802 ; --------------------------------- 0000030F 803 _play_xm:: 0000030F DD E5 [15] 804 push ix 00000311 DD 21 00 00 [14] 805 ld ix, #0 00000315 DD 39 [15] 806 add ix, sp 00000317 21 EC FF [10] 807 ld hl, #-20 0000031A 39 [11] 808 add hl, sp 0000031B F9 [ 6] 809 ld sp, hl 810 ;src/main.c:160: esp_cmd(ESP_CMD_TRACK_STOP); 0000031C 3E A2 [ 7] 811 ld a, #0xa2 0000031E CDr05r00 [17] 812 call _esp_cmd 813 ;src/main.c:161: esp_wait_busy(100); // 2s - both should be near-instant 00000321 21 64 00 [10] 814 ld hl, #0x0064 00000324 CDr2Cr02 [17] 815 call _esp_wait_busy 816 ;src/main.c:162: esp_cmd(ESP_CMD_KILL_OBJECTS); 00000327 3E E4 [ 7] 817 ld a, #0xe4 00000329 CDr05r00 [17] 818 call _esp_cmd 819 ;src/main.c:163: esp_wait_busy(100); 0000032C 21 64 00 [10] 820 ld hl, #0x0064 0000032F CDr2Cr02 [17] 821 call _esp_wait_busy 822 ;src/main.c:166: switch (file_ext) 00000332 3Ar06r10 [13] 823 ld a, (_file_ext) 00000335 3D [ 4] 824 dec a 00000336 28 0A [12] 825 jr z, 00101$ 00000338 3Ar06r10 [13] 826 ld a, (_file_ext) 0000033B D6 02 [ 7] 827 sub a, #0x02 0000033D 28 08 [12] 828 jr z, 00102$ 0000033F C3r4Cr03 [10] 829 jp 00103$ 830 ;src/main.c:168: case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break; 00000342 831 00101$: 00000342 3E 08 [ 7] 832 ld a, #0x08 00000344 C3r4Er03 [10] 833 jp 00104$ 834 ;src/main.c:169: case EXT_S3M: obj_type = OBJ_TYPE_S3M; break; 00000347 835 00102$: 00000347 3E 0C [ 7] 836 ld a, #0x0c 00000349 C3r4Er03 [10] 837 jp 00104$ 838 ;src/main.c:170: default: obj_type = OBJ_TYPE_XM; break; 0000034C 839 00103$: 0000034C 3E 05 [ 7] 840 ld a, #0x05 841 ;src/main.c:171: } 0000034E 842 00104$: 843 ;src/main.c:173: xm_handle = esp_create_obj(filesize, obj_type); 0000034E F5 [11] 844 push af 0000034F 33 [ 6] 845 inc sp 00000350 ED 5Br02r10 [20] 846 ld de, (_filesize) 00000354 2Ar04r10 [16] 847 ld hl, (_filesize + 2) 00000357 CDr68r02 [17] 848 call _esp_create_obj 0000035A 21r30r10 [10] 849 ld hl, #_xm_handle 0000035D 73 [ 7] 850 ld (hl), e 851 ;src/main.c:174: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); 0000035E 3E 01 [ 7] 852 ld a, #0x01 00000360 CDr1Er00 [17] 853 call _esp_rd_reg8 00000363 32r08r10 [13] 854 ld (#_last_esp_status), a 855 ;src/main.c:175: if (last_esp_status != ESP_ST_READY) 00000366 3Ar08r10 [13] 856 ld a, (_last_esp_status) 00000369 3D [ 4] 857 dec a 0000036A 28 04 [12] 858 jr z, 00106$ 859 ;src/main.c:176: return false; 0000036C AF [ 4] 860 xor a, a 0000036D C3r36r05 [10] 861 jp 00118$ 00000370 862 00106$: 863 ;src/main.c:178: u32 sz = filesize; 00000370 21 0C 00 [10] 864 ld hl, #12 00000373 39 [11] 865 add hl, sp 00000374 EB [ 4] 866 ex de, hl 00000375 21r02r10 [10] 867 ld hl, #_filesize 00000378 01 04 00 [10] 868 ld bc, #4 0000037B ED B0 [21] 869 ldir 870 ;src/main.c:179: u32 offs = 0; 0000037D AF [ 4] 871 xor a, a 0000037E DD 77 FC [19] 872 ld -4 (ix), a 00000381 DD 77 FD [19] 873 ld -3 (ix), a 00000384 DD 77 FE [19] 874 ld -2 (ix), a 00000387 DD 77 FF [19] 875 ld -1 (ix), a 876 ;src/main.c:181: while (sz) 0000038A 877 00107$: 0000038A DD 7E FB [19] 878 ld a, -5 (ix) 0000038D DD B6 FA [19] 879 or a, -6 (ix) 00000390 DD B6 F9 [19] 880 or a, -7 (ix) 00000393 DD B6 F8 [19] 881 or a, -8 (ix) 00000396 CAr9Fr04 [10] 882 jp z, 00109$ 883 ;src/main.c:183: u32 s = min(sz, FS_BUF_SIZE); 00000399 DD 7E F9 [19] 884 ld a, -7 (ix) 0000039C D6 10 [ 7] 885 sub a, #0x10 0000039E DD 7E FA [19] 886 ld a, -6 (ix) 000003A1 DE 00 [ 7] 887 sbc a, #0x00 000003A3 DD 7E FB [19] 888 ld a, -5 (ix) 000003A6 DE 00 [ 7] 889 sbc a, #0x00 000003A8 30 11 [12] 890 jr nc, 00120$ 000003AA 21 00 00 [10] 891 ld hl, #0 000003AD 39 [11] 892 add hl, sp 000003AE EB [ 4] 893 ex de, hl 000003AF 21 0C 00 [10] 894 ld hl, #12 000003B2 39 [11] 895 add hl, sp 000003B3 01 04 00 [10] 896 ld bc, #4 000003B6 ED B0 [21] 897 ldir 000003B8 C3rCAr03 [10] 898 jp 00121$ 000003BB 899 00120$: 000003BB DD 36 EC 00 [19] 900 ld -20 (ix), #0x00 000003BF DD 36 ED 10 [19] 901 ld -19 (ix), #0x10 000003C3 AF [ 4] 902 xor a, a 000003C4 DD 77 EE [19] 903 ld -18 (ix), a 000003C7 DD 77 EF [19] 904 ld -17 (ix), a 000003CA 905 00121$: 000003CA 21 05 00 [10] 906 ld hl, #5 000003CD 39 [11] 907 add hl, sp 000003CE EB [ 4] 908 ex de, hl 000003CF 21 00 00 [10] 909 ld hl, #0 000003D2 39 [11] 910 add hl, sp 000003D3 01 04 00 [10] 911 ld bc, #4 000003D6 ED B0 [21] 912 ldir 913 ;src/main.c:184: u8 sec = (s + 511) >> 9; 000003D8 DD 7E F1 [19] 914 ld a, -15 (ix) 000003DB C6 FF [ 7] 915 add a, #0xff 000003DD DD 7E F2 [19] 916 ld a, -14 (ix) 000003E0 CE 01 [ 7] 917 adc a, #0x01 000003E2 47 [ 4] 918 ld b, a 000003E3 3E 00 [ 7] 919 ld a, #0x00 000003E5 CE 00 [ 7] 920 adc a, #0x00 000003E7 5F [ 4] 921 ld e, a 000003E8 3E 00 [ 7] 922 ld a, #0x00 000003EA CE 00 [ 7] 923 adc a, #0x00 000003EC 57 [ 4] 924 ld d, a 000003ED 48 [ 4] 925 ld c, b 000003EE 43 [ 4] 926 ld b, e 000003EF 5A [ 4] 927 ld e, d 000003F0 CB 3B [ 8] 928 srl e 000003F2 CB 18 [ 8] 929 rr b 000003F4 CB 19 [ 8] 930 rr c 931 ;src/main.c:186: wc_load512((u16)fs_buf, sec); 000003F6 DD 71 F7 [19] 932 ld -9 (ix), c 000003F9 79 [ 4] 933 ld a, c 000003FA F5 [11] 934 push af 000003FB 33 [ 6] 935 inc sp 000003FC 21r00r00 [10] 936 ld hl, #_fs_buf 000003FF CDr00r00 [17] 937 call _wc_load512 938 ;src/main.c:188: esp_wr_reg32(ESP_REG_DATA_SIZE, s); 00000402 21 00 00 [10] 939 ld hl, #0x0 00000405 E5 [11] 940 push hl 00000406 DD 6E F1 [19] 941 ld l, -15 (ix) 00000409 DD 66 F2 [19] 942 ld h, -14 (ix) 0000040C E5 [11] 943 push hl 0000040D 3E 03 [ 7] 944 ld a, #0x03 0000040F CDrE8r00 [17] 945 call _esp_wr_reg32 946 ;src/main.c:189: esp_wr_reg32(ESP_REG_DATA_OFFSET, offs); 00000412 DD 6E FE [19] 947 ld l, -2 (ix) 00000415 DD 66 FF [19] 948 ld h, -1 (ix) 00000418 E5 [11] 949 push hl 00000419 DD 6E FC [19] 950 ld l, -4 (ix) 0000041C DD 66 FD [19] 951 ld h, -3 (ix) 0000041F E5 [11] 952 push hl 00000420 3E 07 [ 7] 953 ld a, #0x07 00000422 CDrE8r00 [17] 954 call _esp_wr_reg32 955 ;src/main.c:190: esp_cmd(ESP_CMD_WRITE_OBJECT); 00000425 3E E1 [ 7] 956 ld a, #0xe1 00000427 CDr05r00 [17] 957 call _esp_cmd 958 ;src/main.c:191: esp_wait_status(ESP_ST_DATA_M2S, 100); // 2s - near-instant state transition 0000042A 11 64 00 [10] 959 ld de, #0x0064 0000042D 3E 03 [ 7] 960 ld a, #0x03 0000042F CDrDEr01 [17] 961 call _esp_wait_status 962 ;src/main.c:192: esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec); 00000432 DD 7E F7 [19] 963 ld a, -9 (ix) 00000435 DD 77 F5 [19] 964 ld -11 (ix), a 00000438 DD 36 F6 00 [19] 965 ld -10 (ix), #0x00 0000043C 3A 02 60 [13] 966 ld a, (#0x6002) 0000043F DD 77 F7 [19] 967 ld -9 (ix), a 00000442 DD 6E F5 [19] 968 ld l, -11 (ix) 00000445 26 00 [ 7] 969 ld h, #0x00 00000447 E5 [11] 970 push hl 00000448 21 00 02 [10] 971 ld hl, #0x0200 0000044B E5 [11] 972 push hl 0000044C DD 7E F7 [19] 973 ld a, -9 (ix) 0000044F F5 [11] 974 push af 00000450 33 [ 6] 975 inc sp 00000451 21r00r00 [10] 976 ld hl, #_fs_buf 00000454 CDr6Er01 [17] 977 call _esp_send_dma 978 ;src/main.c:194: offs += s; 00000457 DD 5E F1 [19] 979 ld e, -15 (ix) 0000045A DD 56 F2 [19] 980 ld d, -14 (ix) 0000045D DD 6E FC [19] 981 ld l, -4 (ix) 00000460 DD 66 FD [19] 982 ld h, -3 (ix) 00000463 19 [11] 983 add hl, de 00000464 DD 75 FC [19] 984 ld -4 (ix), l 00000467 DD 74 FD [19] 985 ld -3 (ix), h 0000046A DD 7E FE [19] 986 ld a, -2 (ix) 0000046D DD 8E F3 [19] 987 adc a, -13 (ix) 00000470 DD 77 FE [19] 988 ld -2 (ix), a 00000473 30 03 [12] 989 jr nc, 00207$ 00000475 DD 34 FF [23] 990 inc -1 (ix) 00000478 991 00207$: 992 ;src/main.c:195: sz -= s; 00000478 DD 7E F8 [19] 993 ld a, -8 (ix) 0000047B DD 96 F1 [19] 994 sub a, -15 (ix) 0000047E DD 77 F8 [19] 995 ld -8 (ix), a 00000481 DD 7E F9 [19] 996 ld a, -7 (ix) 00000484 DD 9E F2 [19] 997 sbc a, -14 (ix) 00000487 DD 77 F9 [19] 998 ld -7 (ix), a 0000048A DD 7E FA [19] 999 ld a, -6 (ix) 0000048D DD 9E F3 [19] 1000 sbc a, -13 (ix) 00000490 DD 77 FA [19] 1001 ld -6 (ix), a 00000493 DD 7E FB [19] 1002 ld a, -5 (ix) 00000496 DD 9E F4 [19] 1003 sbc a, -12 (ix) 00000499 DD 77 FB [19] 1004 ld -5 (ix), a 0000049C C3r8Ar03 [10] 1005 jp 00107$ 0000049F 1006 00109$: 1007 ;src/main.c:198: if (file_ext == EXT_XMZ) 0000049F 3Ar06r10 [13] 1008 ld a, (_file_ext) 000004A2 3D [ 4] 1009 dec a 000004A3 20 3A [12] 1010 jr nz, 00113$ 1011 ;src/main.c:203: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); 000004A5 3Ar30r10 [13] 1012 ld a, (_xm_handle) 000004A8 6F [ 4] 1013 ld l, a 000004A9 3E 0B [ 7] 1014 ld a, #0x0b 000004AB CDrD1r00 [17] 1015 call _esp_wr_reg8 1016 ;src/main.c:204: esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM); 000004AE 2E 05 [ 7] 1017 ld l, #0x05 000004B0 3E 02 [ 7] 1018 ld a, #0x02 000004B2 CDrD1r00 [17] 1019 call _esp_wr_reg8 1020 ;src/main.c:205: esp_wr_reg32(ESP_REG_DATA_SIZE, filesize); 000004B5 2Ar04r10 [16] 1021 ld hl, (_filesize + 2) 000004B8 E5 [11] 1022 push hl 000004B9 2Ar02r10 [16] 1023 ld hl, (_filesize) 000004BC E5 [11] 1024 push hl 000004BD 3E 03 [ 7] 1025 ld a, #0x03 000004BF CDrE8r00 [17] 1026 call _esp_wr_reg32 1027 ;src/main.c:206: esp_cmd(ESP_CMD_UNZIP); 000004C2 3E F2 [ 7] 1028 ld a, #0xf2 000004C4 CDr05r00 [17] 1029 call _esp_cmd 1030 ;src/main.c:207: esp_wait_busy(250); // 5s - decompression time scales with file size 000004C7 21 FA 00 [10] 1031 ld hl, #0x00fa 000004CA CDr2Cr02 [17] 1032 call _esp_wait_busy 1033 ;src/main.c:209: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); 000004CD 3E 01 [ 7] 1034 ld a, #0x01 000004CF CDr1Er00 [17] 1035 call _esp_rd_reg8 000004D2 32r08r10 [13] 1036 ld (#_last_esp_status), a 1037 ;src/main.c:210: if (last_esp_status != ESP_ST_READY) 000004D5 3Ar08r10 [13] 1038 ld a, (_last_esp_status) 000004D8 3D [ 4] 1039 dec a 000004D9 28 04 [12] 1040 jr z, 00113$ 1041 ;src/main.c:211: return false; 000004DB AF [ 4] 1042 xor a, a 000004DC C3r36r05 [10] 1043 jp 00118$ 000004DF 1044 00113$: 1045 ;src/main.c:214: esp_cmd(ESP_CMD_TRACK_INIT); 000004DF 3E A0 [ 7] 1046 ld a, #0xa0 000004E1 CDr05r00 [17] 1047 call _esp_cmd 1048 ;src/main.c:220: esp_wait_busy(500); 000004E4 21 F4 01 [10] 1049 ld hl, #0x01f4 000004E7 CDr2Cr02 [17] 1050 call _esp_wait_busy 1051 ;src/main.c:222: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); 000004EA 3E 01 [ 7] 1052 ld a, #0x01 000004EC CDr1Er00 [17] 1053 call _esp_rd_reg8 000004EF 32r08r10 [13] 1054 ld (#_last_esp_status), a 1055 ;src/main.c:223: if (last_esp_status != ESP_ST_READY) 000004F2 3Ar08r10 [13] 1056 ld a, (_last_esp_status) 000004F5 3D [ 4] 1057 dec a 000004F6 28 04 [12] 1058 jr z, 00115$ 1059 ;src/main.c:224: return false; 000004F8 AF [ 4] 1060 xor a, a 000004F9 C3r36r05 [10] 1061 jp 00118$ 000004FC 1062 00115$: 1063 ;src/main.c:229: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); 000004FC 3Ar30r10 [13] 1064 ld a, (_xm_handle) 000004FF 6F [ 4] 1065 ld l, a 00000500 3E 0B [ 7] 1066 ld a, #0x0b 00000502 CDrD1r00 [17] 1067 call _esp_wr_reg8 1068 ;src/main.c:230: esp_wr_reg8(ESP_REG_TRACK_MAX_LOOP_COUNT, 1); 00000505 2E 01 [ 7] 1069 ld l, #0x01 00000507 3E 3A [ 7] 1070 ld a, #0x3a 00000509 CDrD1r00 [17] 1071 call _esp_wr_reg8 1072 ;src/main.c:231: esp_cmd(ESP_CMD_TRACK_SET_PARAMS); 0000050C 3E A6 [ 7] 1073 ld a, #0xa6 0000050E CDr05r00 [17] 1074 call _esp_cmd 1075 ;src/main.c:232: esp_wait_busy(100); // 2s - both should be near-instant 00000511 21 64 00 [10] 1076 ld hl, #0x0064 00000514 CDr2Cr02 [17] 1077 call _esp_wait_busy 1078 ;src/main.c:234: esp_cmd(ESP_CMD_TRACK_PLAY); 00000517 3E A1 [ 7] 1079 ld a, #0xa1 00000519 CDr05r00 [17] 1080 call _esp_cmd 1081 ;src/main.c:235: esp_wait_busy(100); 0000051C 21 64 00 [10] 1082 ld hl, #0x0064 0000051F CDr2Cr02 [17] 1083 call _esp_wait_busy 1084 ;src/main.c:237: last_esp_status = esp_rd_reg8(ESP_REG_STATUS); 00000522 3E 01 [ 7] 1085 ld a, #0x01 00000524 CDr1Er00 [17] 1086 call _esp_rd_reg8 00000527 32r08r10 [13] 1087 ld (#_last_esp_status), a 1088 ;src/main.c:238: if (last_esp_status != ESP_ST_READY) 0000052A 3Ar08r10 [13] 1089 ld a, (_last_esp_status) 0000052D 3D [ 4] 1090 dec a 0000052E 28 04 [12] 1091 jr z, 00117$ 1092 ;src/main.c:239: return false; 00000530 AF [ 4] 1093 xor a, a 00000531 C3r36r05 [10] 1094 jp 00118$ 00000534 1095 00117$: 1096 ;src/main.c:241: return true; 00000534 3E 01 [ 7] 1097 ld a, #0x01 00000536 1098 00118$: 1099 ;src/main.c:242: } 00000536 DD F9 [10] 1100 ld sp, ix 00000538 DD E1 [14] 1101 pop ix 0000053A C9 [10] 1102 ret 1103 ;src/main.c:245: void wait_esc_key() 1104 ; --------------------------------- 1105 ; Function wait_esc_key 1106 ; --------------------------------- 0000053B 1107 _wait_esc_key:: 1108 ;src/main.c:247: while (1) 0000053B 1109 00104$: 1110 ;src/main.c:251: __endasm; 0000053B 76 [ 4] 1111 halt 1112 ;src/main.c:253: if (wc_key_esc()) 0000053C CDr00r00 [17] 1113 call _wc_key_esc 0000053F B7 [ 4] 1114 or a, a 00000540 28 F9 [12] 1115 jr z, 00104$ 1116 ;src/main.c:254: break; 1117 ;src/main.c:256: } 00000542 C9 [10] 1118 ret 1119 ;src/main.c:258: void wait_frames(u8 n) 1120 ; --------------------------------- 1121 ; Function wait_frames 1122 ; --------------------------------- 00000543 1123 _wait_frames:: 00000543 4F [ 4] 1124 ld c, a 1125 ;src/main.c:260: while (n--) 00000544 1126 00101$: 00000544 79 [ 4] 1127 ld a, c 00000545 0D [ 4] 1128 dec c 00000546 B7 [ 4] 1129 or a, a 00000547 C8 [11] 1130 ret z 1131 ;src/main.c:264: __endasm; 00000548 76 [ 4] 1132 halt 1133 ;src/main.c:266: } 00000549 C3r44r05 [10] 1134 jp 00101$ 1135 ;src/main.c:273: u8 wc_screen_width() 1136 ; --------------------------------- 1137 ; Function wc_screen_width 1138 ; --------------------------------- 0000054C 1139 _wc_screen_width:: 1140 ;src/main.c:275: return (*(u8*)_HEI >= 36) ? 90 : 80; 0000054C 3A 0E 60 [13] 1141 ld a, (#0x600e) 0000054F D6 24 [ 7] 1142 sub a, #0x24 00000551 38 03 [12] 1143 jr c, 00103$ 00000553 3E 5A [ 7] 1144 ld a, #0x5a 00000555 C9 [10] 1145 ret 00000556 1146 00103$: 00000556 3E 50 [ 7] 1147 ld a, #0x50 1148 ;src/main.c:276: } 00000558 C9 [10] 1149 ret 1150 ;src/main.c:281: u8 wc_center(u8 screen_size, u8 win_size) 1151 ; --------------------------------- 1152 ; Function wc_center 1153 ; --------------------------------- 00000559 1154 _wc_center:: 00000559 DD E5 [15] 1155 push ix 0000055B DD 21 00 00 [14] 1156 ld ix, #0 0000055F DD 39 [15] 1157 add ix, sp 00000561 F5 [11] 1158 push af 00000562 DD 77 FF [19] 1159 ld -1 (ix), a 1160 ;src/main.c:283: return (screen_size > win_size) ? (screen_size - win_size) / 2 : 0; 00000565 DD 75 FE [19] 1161 ld -2 (ix), l 00000568 7D [ 4] 1162 ld a, l 00000569 DD 96 FF [19] 1163 sub a, -1 (ix) 0000056C 30 1B [12] 1164 jr nc, 00103$ 0000056E DD 7E FF [19] 1165 ld a, -1 (ix) 00000571 DD 5E FE [19] 1166 ld e, -2 (ix) 00000574 93 [ 4] 1167 sub a, e 00000575 4F [ 4] 1168 ld c, a 00000576 9F [ 4] 1169 sbc a, a 00000577 47 [ 4] 1170 ld b, a 00000578 59 [ 4] 1171 ld e, c 00000579 50 [ 4] 1172 ld d, b 0000057A CB 78 [ 8] 1173 bit 7, b 0000057C 28 03 [12] 1174 jr z, 00105$ 0000057E 59 [ 4] 1175 ld e, c 0000057F 50 [ 4] 1176 ld d, b 00000580 13 [ 6] 1177 inc de 00000581 1178 00105$: 00000581 7B [ 4] 1179 ld a, e 00000582 CB 2A [ 8] 1180 sra d 00000584 CB 1F [ 8] 1181 rr a 00000586 C3r8Ar05 [10] 1182 jp 00104$ 00000589 1183 00103$: 00000589 AF [ 4] 1184 xor a, a 0000058A 1185 00104$: 1186 ;src/main.c:284: } 0000058A DD F9 [10] 1187 ld sp, ix 0000058C DD E1 [14] 1188 pop ix 0000058E C9 [10] 1189 ret 1190 ;src/main.c:286: void about() 1191 ; --------------------------------- 1192 ; Function about 1193 ; --------------------------------- 0000058F 1194 _about:: 1195 ;src/main.c:288: memcpy(&win_about, &win_about_tpl, sizeof(win_about)); 0000058F 11r44r10 [10] 1196 ld de, #_win_about 00000592 21rB2r02 [10] 1197 ld hl, #_win_about_tpl 00000595 01 12 00 [10] 1198 ld bc, #0x0012 00000598 ED B0 [21] 1199 ldir 1200 ;src/main.c:289: win_about.x_pos = wc_center(wc_screen_width(), win_about.x_size); 0000059A 21r48r10 [10] 1201 ld hl, #_win_about + 4 0000059D 6E [ 7] 1202 ld l, (hl) 0000059E E5 [11] 1203 push hl 0000059F CDr4Cr05 [17] 1204 call _wc_screen_width 000005A2 E1 [10] 1205 pop hl 000005A3 CDr59r05 [17] 1206 call _wc_center 000005A6 32r46r10 [13] 1207 ld (#(_win_about + 2)), a 1208 ;src/main.c:290: win_about.y_pos = wc_center(*(u8*)_HEI, win_about.y_size); 000005A9 21r49r10 [10] 1209 ld hl, #_win_about + 5 000005AC 6E [ 7] 1210 ld l, (hl) 000005AD 3A 0E 60 [13] 1211 ld a, (#0x600e) 000005B0 CDr59r05 [17] 1212 call _wc_center 000005B3 32r47r10 [13] 1213 ld (#(_win_about + 3)), a 1214 ;src/main.c:291: wc_prwow(&win_about); 000005B6 21r44r10 [10] 1215 ld hl, #_win_about 000005B9 CDr00r00 [17] 1216 call _wc_prwow 1217 ;src/main.c:292: wait_esc_key(); 000005BC CDr3Br05 [17] 1218 call _wait_esc_key 1219 ;src/main.c:293: wc_rresb(&win_about); 000005BF 21r44r10 [10] 1220 ld hl, #_win_about 000005C2 CDr00r00 [17] 1221 call _wc_rresb 1222 ;src/main.c:294: wc_exit(WC_EXIT); 000005C5 AF [ 4] 1223 xor a, a 1224 ;src/main.c:295: } 000005C6 C3r00r00 [10] 1225 jp _wc_exit 1226 ;src/main.c:300: void unload_and_exit(WC_EXIT_SIGNAL sig) 1227 ; --------------------------------- 1228 ; Function unload_and_exit 1229 ; --------------------------------- 000005C9 1230 _unload_and_exit:: 000005C9 3B [ 6] 1231 dec sp 000005CA FD 21 00 00 [14] 1232 ld iy, #0 000005CE FD 39 [15] 1233 add iy, sp 000005D0 FD 77 00 [19] 1234 ld 0 (iy), a 1235 ;src/main.c:302: esp_cmd(ESP_CMD_TRACK_STOP); 000005D3 3E A2 [ 7] 1236 ld a, #0xa2 000005D5 CDr05r00 [17] 1237 call _esp_cmd 1238 ;src/main.c:303: esp_wait_busy(100); // 2s - both should be near-instant 000005D8 21 64 00 [10] 1239 ld hl, #0x0064 000005DB CDr2Cr02 [17] 1240 call _esp_wait_busy 1241 ;src/main.c:304: esp_cmd(ESP_CMD_KILL_OBJECTS); 000005DE 3E E4 [ 7] 1242 ld a, #0xe4 000005E0 CDr05r00 [17] 1243 call _esp_cmd 1244 ;src/main.c:305: esp_wait_busy(100); 000005E3 21 64 00 [10] 1245 ld hl, #0x0064 000005E6 CDr2Cr02 [17] 1246 call _esp_wait_busy 1247 ;src/main.c:306: wc_rresb(&win_xm); 000005E9 21r32r10 [10] 1248 ld hl, #_win_xm 000005EC CDr00r00 [17] 1249 call _wc_rresb 1250 ;src/main.c:307: wc_exit(sig); 000005EF 21 00 00 [10] 1251 ld hl, #0 000005F2 39 [11] 1252 add hl, sp 000005F3 7E [ 7] 1253 ld a, (hl) 000005F4 33 [ 6] 1254 inc sp 000005F5 C3r00r00 [10] 1255 jp _wc_exit 1256 ;src/main.c:308: } 000005F8 33 [ 6] 1257 inc sp 000005F9 C9 [10] 1258 ret 1259 ;src/main.c:312: void leave_playing_and_exit() 1260 ; --------------------------------- 1261 ; Function leave_playing_and_exit 1262 ; --------------------------------- 000005FA 1263 _leave_playing_and_exit:: 1264 ;src/main.c:314: wc_rresb(&win_xm); 000005FA 21r32r10 [10] 1265 ld hl, #_win_xm 000005FD CDr00r00 [17] 1266 call _wc_rresb 1267 ;src/main.c:315: wc_exit(WC_EXIT); 00000600 AF [ 4] 1268 xor a, a 1269 ;src/main.c:316: } 00000601 C3r00r00 [10] 1270 jp _wc_exit 1271 ;src/main.c:322: void wait_for_manual_exit() 1272 ; --------------------------------- 1273 ; Function wait_for_manual_exit 1274 ; --------------------------------- 00000604 1275 _wait_for_manual_exit:: 1276 ;src/main.c:324: while (1) 00000604 1277 00109$: 1278 ;src/main.c:328: __endasm; 00000604 76 [ 4] 1279 halt 1280 ;src/main.c:330: if (wc_key_pgdn() || wc_key_enter()) 00000605 CDr00r00 [17] 1281 call _wc_key_pgdn 00000608 B7 [ 4] 1282 or a, a 00000609 20 06 [12] 1283 jr nz, 00101$ 0000060B CDr00r00 [17] 1284 call _wc_key_enter 0000060E B7 [ 4] 1285 or a, a 0000060F 28 05 [12] 1286 jr z, 00102$ 00000611 1287 00101$: 1288 ;src/main.c:331: unload_and_exit(WC_NEXT_FILE); 00000611 3E 02 [ 7] 1289 ld a, #0x02 00000613 CDrC9r05 [17] 1290 call _unload_and_exit 00000616 1291 00102$: 1292 ;src/main.c:333: if (wc_key_pgup()) 00000616 CDr00r00 [17] 1293 call _wc_key_pgup 00000619 B7 [ 4] 1294 or a, a 0000061A 28 05 [12] 1295 jr z, 00105$ 1296 ;src/main.c:334: unload_and_exit(WC_PREV_FILE); 0000061C 3E 04 [ 7] 1297 ld a, #0x04 0000061E CDrC9r05 [17] 1298 call _unload_and_exit 00000621 1299 00105$: 1300 ;src/main.c:336: if (wc_key_esc()) 00000621 CDr00r00 [17] 1301 call _wc_key_esc 00000624 B7 [ 4] 1302 or a, a 00000625 28 DD [12] 1303 jr z, 00109$ 1304 ;src/main.c:337: unload_and_exit(WC_EXIT); 00000627 AF [ 4] 1305 xor a, a 00000628 CDrC9r05 [17] 1306 call _unload_and_exit 1307 ;src/main.c:339: } 0000062B C3r04r06 [10] 1308 jp 00109$ 1309 ;src/main.c:345: void error_esp() 1310 ; --------------------------------- 1311 ; Function error_esp 1312 ; --------------------------------- 0000062E 1313 _error_esp:: 1314 ;src/main.c:350: xm_set_status_code("No ESP32 found", state_esp); 0000062E 3Ar00r00 [13] 1315 ld a, (_state_esp) 00000631 F5 [11] 1316 push af 00000632 33 [ 6] 1317 inc sp 00000633 21r46r06 [10] 1318 ld hl, #___str_4 00000636 CDrD7r07 [17] 1319 call _xm_set_status_code 1320 ;src/main.c:351: wait_esc_key(); 00000639 CDr3Br05 [17] 1321 call _wait_esc_key 1322 ;src/main.c:352: wc_rresb(&win_xm); 0000063C 21r32r10 [10] 1323 ld hl, #_win_xm 0000063F CDr00r00 [17] 1324 call _wc_rresb 1325 ;src/main.c:353: wc_exit(WC_EXIT); 00000642 AF [ 4] 1326 xor a, a 1327 ;src/main.c:354: } 00000643 C3r00r00 [10] 1328 jp _wc_exit 00000646 1329 ___str_4: 00000646 4E 6F 20 45 53 50 33 1330 .ascii "No ESP32 found" 32 20 66 6F 75 6E 64 00000654 00 1331 .db 0x00 1332 ;src/main.c:364: u8 stop_on_error() 1333 ; --------------------------------- 1334 ; Function stop_on_error 1335 ; --------------------------------- 00000655 1336 _stop_on_error:: 1337 ;src/main.c:366: return wc_prm_pl(1) == 2; 00000655 3E 01 [ 7] 1338 ld a, #0x01 00000657 CDr00r00 [17] 1339 call _wc_prm_pl 0000065A FE 02 [ 7] 1340 cp a, #0x02 0000065C 3E 01 [ 7] 1341 ld a, #0x01 0000065E C8 [11] 1342 ret z 0000065F AF [ 4] 1343 xor a, a 1344 ;src/main.c:367: } 00000660 C9 [10] 1345 ret 1346 ;src/main.c:369: void error_oom() 1347 ; --------------------------------- 1348 ; Function error_oom 1349 ; --------------------------------- 00000661 1350 _error_oom:: 1351 ;src/main.c:371: xm_set_status_code("File too large", last_esp_status); 00000661 3Ar08r10 [13] 1352 ld a, (_last_esp_status) 00000664 F5 [11] 1353 push af 00000665 33 [ 6] 1354 inc sp 00000666 21r85r06 [10] 1355 ld hl, #___str_5 00000669 CDrD7r07 [17] 1356 call _xm_set_status_code 1357 ;src/main.c:373: if (stop_on_error()) 0000066C CDr55r06 [17] 1358 call _stop_on_error 0000066F B7 [ 4] 1359 or a, a 00000670 28 03 [12] 1360 jr z, 00102$ 1361 ;src/main.c:374: wait_for_manual_exit(); 00000672 CDr04r06 [17] 1362 call _wait_for_manual_exit 00000675 1363 00102$: 1364 ;src/main.c:376: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance 00000675 3E 32 [ 7] 1365 ld a, #0x32 00000677 CDr43r05 [17] 1366 call _wait_frames 1367 ;src/main.c:377: wc_rresb(&win_xm); 0000067A 21r32r10 [10] 1368 ld hl, #_win_xm 0000067D CDr00r00 [17] 1369 call _wc_rresb 1370 ;src/main.c:378: wc_exit(WC_NEXT_FILE); 00000680 3E 02 [ 7] 1371 ld a, #0x02 1372 ;src/main.c:379: } 00000682 C3r00r00 [10] 1373 jp _wc_exit 00000685 1374 ___str_5: 00000685 46 69 6C 65 20 74 6F 1375 .ascii "File too large" 6F 20 6C 61 72 67 65 00000693 00 1376 .db 0x00 1377 ;src/main.c:381: void error_playback() 1378 ; --------------------------------- 1379 ; Function error_playback 1380 ; --------------------------------- 00000694 1381 _error_playback:: 1382 ;src/main.c:383: xm_set_status_code("Playback error", last_esp_status); 00000694 3Ar08r10 [13] 1383 ld a, (_last_esp_status) 00000697 F5 [11] 1384 push af 00000698 33 [ 6] 1385 inc sp 00000699 21rB8r06 [10] 1386 ld hl, #___str_6 0000069C CDrD7r07 [17] 1387 call _xm_set_status_code 1388 ;src/main.c:385: if (stop_on_error()) 0000069F CDr55r06 [17] 1389 call _stop_on_error 000006A2 B7 [ 4] 1390 or a, a 000006A3 28 03 [12] 1391 jr z, 00102$ 1392 ;src/main.c:386: wait_for_manual_exit(); 000006A5 CDr04r06 [17] 1393 call _wait_for_manual_exit 000006A8 1394 00102$: 1395 ;src/main.c:388: wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance 000006A8 3E 32 [ 7] 1396 ld a, #0x32 000006AA CDr43r05 [17] 1397 call _wait_frames 1398 ;src/main.c:389: wc_rresb(&win_xm); 000006AD 21r32r10 [10] 1399 ld hl, #_win_xm 000006B0 CDr00r00 [17] 1400 call _wc_rresb 1401 ;src/main.c:390: wc_exit(WC_NEXT_FILE); 000006B3 3E 02 [ 7] 1402 ld a, #0x02 1403 ;src/main.c:391: } 000006B5 C3r00r00 [10] 1404 jp _wc_exit 000006B8 1405 ___str_6: 000006B8 50 6C 61 79 62 61 63 1406 .ascii "Playback error" 6B 20 65 72 72 6F 72 000006C6 00 1407 .db 0x00 1408 ;src/main.c:398: void copy_file_name() 1409 ; --------------------------------- 1410 ; Function copy_file_name 1411 ; --------------------------------- 000006C7 1412 _copy_file_name:: 1413 ;src/main.c:400: u8 *src = (u8*)p_file_name; 000006C7 ED 4Br09r10 [20] 1414 ld bc, (_p_file_name) 1415 ;src/main.c:403: while (src[i] && i < sizeof(file_name) - 1) 000006CB 1E 00 [ 7] 1416 ld e, #0x00 000006CD 1417 00102$: 000006CD 6B [ 4] 1418 ld l, e 000006CE 26 00 [ 7] 1419 ld h, #0x00 000006D0 09 [11] 1420 add hl, bc 000006D1 56 [ 7] 1421 ld d, (hl) 1422 ;src/main.c:405: file_name[i] = src[i]; 000006D2 3Er0B [ 7] 1423 ld a, #<(_file_name) 000006D4 83 [ 4] 1424 add a, e 000006D5 6F [ 4] 1425 ld l, a 000006D6 3Es10 [ 7] 1426 ld a, #>(_file_name) 000006D8 CE 00 [ 7] 1427 adc a, #0x00 000006DA 67 [ 4] 1428 ld h, a 1429 ;src/main.c:403: while (src[i] && i < sizeof(file_name) - 1) 000006DB 7A [ 4] 1430 ld a, d 000006DC B7 [ 4] 1431 or a, a 000006DD 28 0A [12] 1432 jr z, 00104$ 000006DF 7B [ 4] 1433 ld a, e 000006E0 D6 20 [ 7] 1434 sub a, #0x20 000006E2 30 05 [12] 1435 jr nc, 00104$ 1436 ;src/main.c:405: file_name[i] = src[i]; 000006E4 72 [ 7] 1437 ld (hl), d 1438 ;src/main.c:406: i++; 000006E5 1C [ 4] 1439 inc e 000006E6 C3rCDr06 [10] 1440 jp 00102$ 000006E9 1441 00104$: 1442 ;src/main.c:408: file_name[i] = 0; 000006E9 36 00 [10] 1443 ld (hl), #0x00 1444 ;src/main.c:409: } 000006EB C9 [10] 1445 ret 1446 ;src/main.c:442: void xm_draw_static_labels() 1447 ; --------------------------------- 1448 ; Function xm_draw_static_labels 1449 ; --------------------------------- 000006EC 1450 _xm_draw_static_labels:: 1451 ;src/main.c:444: wc_prsrw(&win_xm, "File:", ROW_FILE, 1, 5); 000006EC 21 05 00 [10] 1452 ld hl, #0x0005 000006EF E5 [11] 1453 push hl 000006F0 21 02 01 [10] 1454 ld hl, #0x102 000006F3 E5 [11] 1455 push hl 000006F4 11r38r07 [10] 1456 ld de, #___str_7 000006F7 21r32r10 [10] 1457 ld hl, #_win_xm 000006FA CDr00r00 [17] 1458 call _wc_prsrw 1459 ;src/main.c:445: wc_prsrw_attr(&win_xm, file_name, ROW_FILE, 7, strlen(file_name), ATTR_VALUE); 000006FD 21r0Br10 [10] 1460 ld hl, #_file_name 00000700 CDr00r00 [17] 1461 call _strlen 00000703 3E 71 [ 7] 1462 ld a, #0x71 00000705 F5 [11] 1463 push af 00000706 33 [ 6] 1464 inc sp 00000707 D5 [11] 1465 push de 00000708 21 02 07 [10] 1466 ld hl, #0x702 0000070B E5 [11] 1467 push hl 0000070C 11r0Br10 [10] 1468 ld de, #_file_name 0000070F 21r32r10 [10] 1469 ld hl, #_win_xm 00000712 CDr00r00 [17] 1470 call _wc_prsrw_attr 1471 ;src/main.c:446: wc_prsrw(&win_xm, "Status:", ROW_STATUS, 1, 7); 00000715 21 07 00 [10] 1472 ld hl, #0x0007 00000718 E5 [11] 1473 push hl 00000719 21 03 01 [10] 1474 ld hl, #0x103 0000071C E5 [11] 1475 push hl 0000071D 11r3Er07 [10] 1476 ld de, #___str_8 00000720 21r32r10 [10] 1477 ld hl, #_win_xm 00000723 CDr00r00 [17] 1478 call _wc_prsrw 1479 ;src/main.c:449: wc_prsrw(&win_xm, HINT_TEXT, ROW_HINT, 2, sizeof(HINT_TEXT) - 1); 00000726 21 24 00 [10] 1480 ld hl, #0x0024 00000729 E5 [11] 1481 push hl 0000072A 21 0A 02 [10] 1482 ld hl, #0x20a 0000072D E5 [11] 1483 push hl 0000072E 11r46r07 [10] 1484 ld de, #___str_9 00000731 21r32r10 [10] 1485 ld hl, #_win_xm 00000734 CDr00r00 [17] 1486 call _wc_prsrw 1487 ;src/main.c:450: } 00000737 C9 [10] 1488 ret 00000738 1489 ___str_7: 00000738 46 69 6C 65 3A 1490 .ascii "File:" 0000073D 00 1491 .db 0x00 0000073E 1492 ___str_8: 0000073E 53 74 61 74 75 73 3A 1493 .ascii "Status:" 00000745 00 1494 .db 0x00 00000746 1495 ___str_9: 00000746 50 67 55 70 2F 50 67 1496 .ascii "PgUp/PgDn:Track Esc:Stop Space:Leave" 44 6E 3A 54 72 61 63 6B 20 45 73 63 3A 53 74 6F 70 20 53 70 61 63 65 3A 4C 65 61 76 65 0000076A 00 1497 .db 0x00 1498 ;src/main.c:456: void xm_set_status_attr(const char *msg, u8 attr) 1499 ; --------------------------------- 1500 ; Function xm_set_status_attr 1501 ; --------------------------------- 0000076B 1502 _xm_set_status_attr:: 0000076B DD E5 [15] 1503 push ix 0000076D DD 21 00 00 [14] 1504 ld ix, #0 00000771 DD 39 [15] 1505 add ix, sp 00000773 F5 [11] 1506 push af 1507 ;src/main.c:460: while (msg[i] && i < STATUS_VALUE_WIDTH) 00000774 1E 00 [ 7] 1508 ld e, #0x00 00000776 1509 00102$: 00000776 7B [ 4] 1510 ld a, e 00000777 85 [ 4] 1511 add a, l 00000778 4F [ 4] 1512 ld c, a 00000779 3E 00 [ 7] 1513 ld a, #0x00 0000077B 8C [ 4] 1514 adc a, h 0000077C 47 [ 4] 1515 ld b, a 0000077D 0A [ 7] 1516 ld a, (bc) 0000077E 4F [ 4] 1517 ld c, a 0000077F B7 [ 4] 1518 or a, a 00000780 28 1F [12] 1519 jr z, 00119$ 00000782 7B [ 4] 1520 ld a, e 00000783 D6 18 [ 7] 1521 sub a, #0x18 00000785 30 1A [12] 1522 jr nc, 00119$ 1523 ;src/main.c:462: status_buf[i] = msg[i]; 00000787 3Er56 [ 7] 1524 ld a, #<(_status_buf) 00000789 83 [ 4] 1525 add a, e 0000078A DD 77 FE [19] 1526 ld -2 (ix), a 0000078D 3Es10 [ 7] 1527 ld a, #>(_status_buf) 0000078F CE 00 [ 7] 1528 adc a, #0x00 00000791 DD 77 FF [19] 1529 ld -1 (ix), a 00000794 E5 [11] 1530 push hl 00000795 DD 6E FE [19] 1531 ld l, -2 (ix) 00000798 DD 66 FF [19] 1532 ld h, -1 (ix) 0000079B 71 [ 7] 1533 ld (hl), c 0000079C E1 [10] 1534 pop hl 1535 ;src/main.c:463: i++; 0000079D 1C [ 4] 1536 inc e 0000079E C3r76r07 [10] 1537 jp 00102$ 1538 ;src/main.c:465: while (i < STATUS_VALUE_WIDTH) 000007A1 1539 00119$: 000007A1 1540 00105$: 000007A1 7B [ 4] 1541 ld a, e 000007A2 D6 18 [ 7] 1542 sub a, #0x18 000007A4 30 0C [12] 1543 jr nc, 00107$ 1544 ;src/main.c:466: status_buf[i++] = ' '; 000007A6 21r56r10 [10] 1545 ld hl, #_status_buf 000007A9 16 00 [ 7] 1546 ld d, #0x00 000007AB 19 [11] 1547 add hl, de 000007AC 1C [ 4] 1548 inc e 000007AD 36 20 [10] 1549 ld (hl), #0x20 000007AF C3rA1r07 [10] 1550 jp 00105$ 000007B2 1551 00107$: 1552 ;src/main.c:468: wc_prsrw_attr(&win_xm, status_buf, ROW_STATUS, STATUS_VALUE_X, STATUS_VALUE_WIDTH, attr); 000007B2 21r32r10 [10] 1553 ld hl, #_win_xm 000007B5 DD 7E 04 [19] 1554 ld a, 4 (ix) 000007B8 F5 [11] 1555 push af 000007B9 33 [ 6] 1556 inc sp 000007BA 11 18 00 [10] 1557 ld de, #0x0018 000007BD D5 [11] 1558 push de 000007BE 11 03 09 [10] 1559 ld de, #0x903 000007C1 D5 [11] 1560 push de 000007C2 11r56r10 [10] 1561 ld de, #_status_buf 000007C5 CDr00r00 [17] 1562 call _wc_prsrw_attr 1563 ;src/main.c:469: } 000007C8 DD F9 [10] 1564 ld sp, ix 000007CA DD E1 [14] 1565 pop ix 000007CC E1 [10] 1566 pop hl 000007CD 33 [ 6] 1567 inc sp 000007CE E9 [ 4] 1568 jp (hl) 1569 ;src/main.c:471: void xm_set_status(const char *msg) 1570 ; --------------------------------- 1571 ; Function xm_set_status 1572 ; --------------------------------- 000007CF 1573 _xm_set_status:: 1574 ;src/main.c:473: xm_set_status_attr(msg, ATTR_VALUE); 000007CF 3E 71 [ 7] 1575 ld a, #0x71 000007D1 F5 [11] 1576 push af 000007D2 33 [ 6] 1577 inc sp 000007D3 CDr6Br07 [17] 1578 call _xm_set_status_attr 1579 ;src/main.c:474: } 000007D6 C9 [10] 1580 ret 1581 ;src/main.c:481: void xm_set_status_code(const char *msg, u8 code) 1582 ; --------------------------------- 1583 ; Function xm_set_status_code 1584 ; --------------------------------- 000007D7 1585 _xm_set_status_code:: 000007D7 DD E5 [15] 1586 push ix 000007D9 DD 21 00 00 [14] 1587 ld ix, #0 000007DD DD 39 [15] 1588 add ix, sp 000007DF 3B [ 6] 1589 dec sp 000007E0 EB [ 4] 1590 ex de, hl 1591 ;src/main.c:486: while (msg[i] && i < sizeof(status_code_buf) - 7) 000007E1 0E 00 [ 7] 1592 ld c, #0x00 000007E3 1593 00102$: 000007E3 69 [ 4] 1594 ld l, c 000007E4 26 00 [ 7] 1595 ld h, #0x00 000007E6 19 [11] 1596 add hl, de 000007E7 46 [ 7] 1597 ld b, (hl) 1598 ;src/main.c:488: status_code_buf[i] = msg[i]; 000007E8 3Er6E [ 7] 1599 ld a, #<(_status_code_buf) 000007EA 81 [ 4] 1600 add a, c 000007EB 6F [ 4] 1601 ld l, a 000007EC 3Es10 [ 7] 1602 ld a, #>(_status_code_buf) 000007EE CE 00 [ 7] 1603 adc a, #0x00 000007F0 67 [ 4] 1604 ld h, a 1605 ;src/main.c:489: i++; 000007F1 79 [ 4] 1606 ld a, c 000007F2 3C [ 4] 1607 inc a 000007F3 DD 77 FF [19] 1608 ld -1 (ix), a 1609 ;src/main.c:486: while (msg[i] && i < sizeof(status_code_buf) - 7) 000007F6 78 [ 4] 1610 ld a, b 000007F7 B7 [ 4] 1611 or a, a 000007F8 28 0C [12] 1612 jr z, 00104$ 000007FA 79 [ 4] 1613 ld a, c 000007FB D6 11 [ 7] 1614 sub a, #0x11 000007FD 30 07 [12] 1615 jr nc, 00104$ 1616 ;src/main.c:488: status_code_buf[i] = msg[i]; 000007FF 70 [ 7] 1617 ld (hl), b 1618 ;src/main.c:489: i++; 00000800 DD 4E FF [19] 1619 ld c, -1 (ix) 00000803 C3rE3r07 [10] 1620 jp 00102$ 00000806 1621 00104$: 1622 ;src/main.c:492: status_code_buf[i++] = ' '; 00000806 DD 4E FF [19] 1623 ld c, -1 (ix) 00000809 36 20 [10] 1624 ld (hl), #0x20 1625 ;src/main.c:493: status_code_buf[i++] = '('; 0000080B 69 [ 4] 1626 ld l, c 0000080C 0C [ 4] 1627 inc c 0000080D 26 00 [ 7] 1628 ld h, #0x00 0000080F 11r6Er10 [10] 1629 ld de, #_status_code_buf 00000812 19 [11] 1630 add hl, de 00000813 36 28 [10] 1631 ld (hl), #0x28 1632 ;src/main.c:494: status_code_buf[i++] = '0'; 00000815 69 [ 4] 1633 ld l, c 00000816 0C [ 4] 1634 inc c 00000817 26 00 [ 7] 1635 ld h, #0x00 00000819 11r6Er10 [10] 1636 ld de, #_status_code_buf 0000081C 19 [11] 1637 add hl, de 0000081D 36 30 [10] 1638 ld (hl), #0x30 1639 ;src/main.c:495: status_code_buf[i++] = 'x'; 0000081F 69 [ 4] 1640 ld l, c 00000820 0C [ 4] 1641 inc c 00000821 26 00 [ 7] 1642 ld h, #0x00 00000823 11r6Er10 [10] 1643 ld de, #_status_code_buf 00000826 19 [11] 1644 add hl, de 00000827 36 78 [10] 1645 ld (hl), #0x78 1646 ;src/main.c:496: status_code_buf[i++] = hexch[(code >> 4) & 0xF]; 00000829 69 [ 4] 1647 ld l, c 0000082A 0C [ 4] 1648 inc c 0000082B 26 00 [ 7] 1649 ld h, #0x00 0000082D 11r6Er10 [10] 1650 ld de, #_status_code_buf 00000830 19 [11] 1651 add hl, de 00000831 DD 7E 04 [19] 1652 ld a, 4 (ix) 00000834 07 [ 4] 1653 rlca 00000835 07 [ 4] 1654 rlca 00000836 07 [ 4] 1655 rlca 00000837 07 [ 4] 1656 rlca 00000838 E6 0F [ 7] 1657 and a, #0xf 0000083A C6r7E [ 7] 1658 add a, #<(_xm_set_status_code_hexch_10000_141) 0000083C 5F [ 4] 1659 ld e, a 0000083D 3E 00 [ 7] 1660 ld a, #0x00 0000083F CEs08 [ 7] 1661 adc a, #>(_xm_set_status_code_hexch_10000_141) 00000841 57 [ 4] 1662 ld d, a 00000842 1A [ 7] 1663 ld a, (de) 00000843 77 [ 7] 1664 ld (hl), a 1665 ;src/main.c:497: status_code_buf[i++] = hexch[code & 0xF]; 00000844 69 [ 4] 1666 ld l, c 00000845 0C [ 4] 1667 inc c 00000846 26 00 [ 7] 1668 ld h, #0x00 00000848 11r6Er10 [10] 1669 ld de, #_status_code_buf 0000084B 19 [11] 1670 add hl, de 0000084C DD 7E 04 [19] 1671 ld a, 4 (ix) 0000084F E6 0F [ 7] 1672 and a, #0x0f 00000851 C6r7E [ 7] 1673 add a, #<(_xm_set_status_code_hexch_10000_141) 00000853 5F [ 4] 1674 ld e, a 00000854 3E 00 [ 7] 1675 ld a, #0x00 00000856 CEs08 [ 7] 1676 adc a, #>(_xm_set_status_code_hexch_10000_141) 00000858 57 [ 4] 1677 ld d, a 00000859 1A [ 7] 1678 ld a, (de) 0000085A 77 [ 7] 1679 ld (hl), a 1680 ;src/main.c:498: status_code_buf[i++] = ')'; 0000085B 69 [ 4] 1681 ld l, c 0000085C 0C [ 4] 1682 inc c 0000085D 26 00 [ 7] 1683 ld h, #0x00 0000085F 11r6Er10 [10] 1684 ld de, #_status_code_buf 00000862 19 [11] 1685 add hl, de 00000863 36 29 [10] 1686 ld (hl), #0x29 1687 ;src/main.c:499: status_code_buf[i] = 0; 00000865 69 [ 4] 1688 ld l, c 00000866 26 00 [ 7] 1689 ld h, #0x00 00000868 11r6Er10 [10] 1690 ld de, #_status_code_buf 0000086B 19 [11] 1691 add hl, de 0000086C 36 00 [10] 1692 ld (hl), #0x00 1693 ;src/main.c:501: xm_set_status_attr(status_code_buf, ATTR_ERROR); 0000086E 3E 72 [ 7] 1694 ld a, #0x72 00000870 F5 [11] 1695 push af 00000871 33 [ 6] 1696 inc sp 00000872 21r6Er10 [10] 1697 ld hl, #_status_code_buf 00000875 CDr6Br07 [17] 1698 call _xm_set_status_attr 1699 ;src/main.c:502: } 00000878 33 [ 6] 1700 inc sp 00000879 DD E1 [14] 1701 pop ix 0000087B E1 [10] 1702 pop hl 0000087C 33 [ 6] 1703 inc sp 0000087D E9 [ 4] 1704 jp (hl) 0000087E 1705 _xm_set_status_code_hexch_10000_141: 0000087E 30 31 32 33 34 35 36 1706 .ascii "0123456789ABCDEF" 37 38 39 41 42 43 44 45 46 0000088E 00 1707 .db 0x00 1708 ;src/main.c:515: void put_hex2(char *dst, u8 val) 1709 ; --------------------------------- 1710 ; Function put_hex2 1711 ; --------------------------------- 0000088F 1712 _put_hex2:: 0000088F DD E5 [15] 1713 push ix 00000891 DD 21 00 00 [14] 1714 ld ix, #0 00000895 DD 39 [15] 1715 add ix, sp 00000897 EB [ 4] 1716 ex de, hl 1717 ;src/main.c:518: dst[0] = hexch[(val >> 4) & 0xF]; 00000898 01rBBr08 [10] 1718 ld bc, #_put_hex2_hexch_10000_144+0 0000089B DD 7E 04 [19] 1719 ld a, 4 (ix) 0000089E 07 [ 4] 1720 rlca 0000089F 07 [ 4] 1721 rlca 000008A0 07 [ 4] 1722 rlca 000008A1 07 [ 4] 1723 rlca 000008A2 E6 0F [ 7] 1724 and a, #0xf 000008A4 6F [ 4] 1725 ld l, a 000008A5 26 00 [ 7] 1726 ld h, #0x00 000008A7 09 [11] 1727 add hl, bc 000008A8 7E [ 7] 1728 ld a, (hl) 000008A9 12 [ 7] 1729 ld (de), a 1730 ;src/main.c:519: dst[1] = hexch[val & 0xF]; 000008AA 13 [ 6] 1731 inc de 000008AB DD 7E 04 [19] 1732 ld a, 4 (ix) 000008AE E6 0F [ 7] 1733 and a, #0x0f 000008B0 6F [ 4] 1734 ld l, a 000008B1 26 00 [ 7] 1735 ld h, #0x00 000008B3 09 [11] 1736 add hl, bc 000008B4 7E [ 7] 1737 ld a, (hl) 000008B5 12 [ 7] 1738 ld (de), a 1739 ;src/main.c:520: } 000008B6 DD E1 [14] 1740 pop ix 000008B8 E1 [10] 1741 pop hl 000008B9 33 [ 6] 1742 inc sp 000008BA E9 [ 4] 1743 jp (hl) 000008BB 1744 _put_hex2_hexch_10000_144: 000008BB 30 31 32 33 34 35 36 1745 .ascii "0123456789ABCDEF" 37 38 39 41 42 43 44 45 46 000008CB 00 1746 .db 0x00 1747 ;src/main.c:522: void put_dec3(char *dst, u16 val) 1748 ; --------------------------------- 1749 ; Function put_dec3 1750 ; --------------------------------- 000008CC 1751 _put_dec3:: 000008CC DD E5 [15] 1752 push ix 000008CE DD 21 00 00 [14] 1753 ld ix, #0 000008D2 DD 39 [15] 1754 add ix, sp 000008D4 F5 [11] 1755 push af 000008D5 4D [ 4] 1756 ld c, l 000008D6 44 [ 4] 1757 ld b, h 1758 ;src/main.c:524: dst[0] = '0' + (val / 100) % 10; 000008D7 E1 [10] 1759 pop hl 000008D8 D5 [11] 1760 push de 000008D9 C5 [11] 1761 push bc 000008DA 11 64 00 [10] 1762 ld de, #0x0064 000008DD DD 6E FE [19] 1763 ld l, -2 (ix) 000008E0 DD 66 FF [19] 1764 ld h, -1 (ix) 000008E3 CDr00r00 [17] 1765 call __divuint 000008E6 EB [ 4] 1766 ex de, hl 000008E7 11 0A 00 [10] 1767 ld de, #0x000a 000008EA CDr00r00 [17] 1768 call __moduint 000008ED C1 [10] 1769 pop bc 000008EE 7B [ 4] 1770 ld a, e 000008EF C6 30 [ 7] 1771 add a, #0x30 000008F1 02 [ 7] 1772 ld (bc), a 1773 ;src/main.c:525: dst[1] = '0' + (val / 10) % 10; 000008F2 69 [ 4] 1774 ld l, c 000008F3 60 [ 4] 1775 ld h, b 000008F4 23 [ 6] 1776 inc hl 000008F5 E5 [11] 1777 push hl 000008F6 C5 [11] 1778 push bc 000008F7 11 0A 00 [10] 1779 ld de, #0x000a 000008FA DD 6E FE [19] 1780 ld l, -2 (ix) 000008FD DD 66 FF [19] 1781 ld h, -1 (ix) 00000900 CDr00r00 [17] 1782 call __divuint 00000903 EB [ 4] 1783 ex de, hl 00000904 11 0A 00 [10] 1784 ld de, #0x000a 00000907 CDr00r00 [17] 1785 call __moduint 0000090A C1 [10] 1786 pop bc 0000090B E1 [10] 1787 pop hl 0000090C 7B [ 4] 1788 ld a, e 0000090D C6 30 [ 7] 1789 add a, #0x30 0000090F 77 [ 7] 1790 ld (hl), a 1791 ;src/main.c:526: dst[2] = '0' + val % 10; 00000910 03 [ 6] 1792 inc bc 00000911 03 [ 6] 1793 inc bc 00000912 C5 [11] 1794 push bc 00000913 11 0A 00 [10] 1795 ld de, #0x000a 00000916 DD 6E FE [19] 1796 ld l, -2 (ix) 00000919 DD 66 FF [19] 1797 ld h, -1 (ix) 0000091C CDr00r00 [17] 1798 call __moduint 0000091F C1 [10] 1799 pop bc 00000920 7B [ 4] 1800 ld a, e 00000921 C6 30 [ 7] 1801 add a, #0x30 00000923 02 [ 7] 1802 ld (bc), a 1803 ;src/main.c:527: } 00000924 DD F9 [10] 1804 ld sp, ix 00000926 DD E1 [14] 1805 pop ix 00000928 C9 [10] 1806 ret 1807 ;src/main.c:529: void put_time(char *dst, u32 sec) 1808 ; --------------------------------- 1809 ; Function put_time 1810 ; --------------------------------- 00000929 1811 _put_time:: 00000929 DD E5 [15] 1812 push ix 0000092B DD 21 00 00 [14] 1813 ld ix, #0 0000092F DD 39 [15] 1814 add ix, sp 00000931 E5 [11] 1815 push hl 1816 ;src/main.c:531: u8 m = (sec / 60) % 100; 00000932 21 00 00 [10] 1817 ld hl, #0x0000 00000935 E5 [11] 1818 push hl 00000936 2E 3C [ 7] 1819 ld l, #0x3c 00000938 E5 [11] 1820 push hl 00000939 DD 5E 04 [19] 1821 ld e, 4 (ix) 0000093C DD 56 05 [19] 1822 ld d, 5 (ix) 0000093F DD 6E 06 [19] 1823 ld l, 6 (ix) 00000942 DD 66 07 [19] 1824 ld h, 7 (ix) 00000945 CDr00r00 [17] 1825 call __divulong 00000948 F1 [10] 1826 pop af 00000949 F1 [10] 1827 pop af 0000094A 01 00 00 [10] 1828 ld bc, #0x0000 0000094D C5 [11] 1829 push bc 0000094E 0E 64 [ 7] 1830 ld c, #0x64 00000950 C5 [11] 1831 push bc 00000951 CDr00r00 [17] 1832 call __modulong 00000954 F1 [10] 1833 pop af 00000955 F1 [10] 1834 pop af 00000956 4B [ 4] 1835 ld c, e 1836 ;src/main.c:532: u8 s = sec % 60; 00000957 C5 [11] 1837 push bc 00000958 21 00 00 [10] 1838 ld hl, #0x0000 0000095B E5 [11] 1839 push hl 0000095C 2E 3C [ 7] 1840 ld l, #0x3c 0000095E E5 [11] 1841 push hl 0000095F DD 5E 04 [19] 1842 ld e, 4 (ix) 00000962 DD 56 05 [19] 1843 ld d, 5 (ix) 00000965 DD 6E 06 [19] 1844 ld l, 6 (ix) 00000968 DD 66 07 [19] 1845 ld h, 7 (ix) 0000096B CDr00r00 [17] 1846 call __modulong 0000096E F1 [10] 1847 pop af 0000096F F1 [10] 1848 pop af 00000970 C1 [10] 1849 pop bc 1850 ;src/main.c:534: dst[0] = '0' + (m / 10) % 10; 00000971 51 [ 4] 1851 ld d, c 00000972 D5 [11] 1852 push de 00000973 2E 0A [ 7] 1853 ld l, #0x0a 00000975 7A [ 4] 1854 ld a, d 00000976 CDr00r00 [17] 1855 call __divuchar 00000979 7B [ 4] 1856 ld a, e 0000097A 2E 0A [ 7] 1857 ld l, #0x0a 0000097C CDr00r00 [17] 1858 call __moduchar 0000097F 7B [ 4] 1859 ld a, e 00000980 D1 [10] 1860 pop de 00000981 C6 30 [ 7] 1861 add a, #0x30 00000983 E1 [10] 1862 pop hl 00000984 E5 [11] 1863 push hl 00000985 77 [ 7] 1864 ld (hl), a 1865 ;src/main.c:535: dst[1] = '0' + m % 10; 00000986 C1 [10] 1866 pop bc 00000987 C5 [11] 1867 push bc 00000988 03 [ 6] 1868 inc bc 00000989 C5 [11] 1869 push bc 0000098A D5 [11] 1870 push de 0000098B 2E 0A [ 7] 1871 ld l, #0x0a 0000098D 7A [ 4] 1872 ld a, d 0000098E CDr00r00 [17] 1873 call __moduchar 00000991 7B [ 4] 1874 ld a, e 00000992 D1 [10] 1875 pop de 00000993 C1 [10] 1876 pop bc 00000994 C6 30 [ 7] 1877 add a, #0x30 00000996 02 [ 7] 1878 ld (bc), a 1879 ;src/main.c:536: dst[2] = ':'; 00000997 E1 [10] 1880 pop hl 00000998 E5 [11] 1881 push hl 00000999 23 [ 6] 1882 inc hl 0000099A 23 [ 6] 1883 inc hl 0000099B 36 3A [10] 1884 ld (hl), #0x3a 1885 ;src/main.c:537: dst[3] = '0' + (s / 10) % 10; 0000099D C1 [10] 1886 pop bc 0000099E C5 [11] 1887 push bc 0000099F 03 [ 6] 1888 inc bc 000009A0 03 [ 6] 1889 inc bc 000009A1 03 [ 6] 1890 inc bc 000009A2 C5 [11] 1891 push bc 000009A3 D5 [11] 1892 push de 000009A4 2E 0A [ 7] 1893 ld l, #0x0a 000009A6 7B [ 4] 1894 ld a, e 000009A7 CDr00r00 [17] 1895 call __divuchar 000009AA 7B [ 4] 1896 ld a, e 000009AB 2E 0A [ 7] 1897 ld l, #0x0a 000009AD CDr00r00 [17] 1898 call __moduchar 000009B0 7B [ 4] 1899 ld a, e 000009B1 D1 [10] 1900 pop de 000009B2 C1 [10] 1901 pop bc 000009B3 C6 30 [ 7] 1902 add a, #0x30 000009B5 02 [ 7] 1903 ld (bc), a 1904 ;src/main.c:538: dst[4] = '0' + s % 10; 000009B6 DD 7E FE [19] 1905 ld a, -2 (ix) 000009B9 C6 04 [ 7] 1906 add a, #0x04 000009BB 4F [ 4] 1907 ld c, a 000009BC DD 7E FF [19] 1908 ld a, -1 (ix) 000009BF CE 00 [ 7] 1909 adc a, #0x00 000009C1 47 [ 4] 1910 ld b, a 000009C2 C5 [11] 1911 push bc 000009C3 2E 0A [ 7] 1912 ld l, #0x0a 000009C5 7B [ 4] 1913 ld a, e 000009C6 CDr00r00 [17] 1914 call __moduchar 000009C9 7B [ 4] 1915 ld a, e 000009CA C1 [10] 1916 pop bc 000009CB C6 30 [ 7] 1917 add a, #0x30 000009CD 02 [ 7] 1918 ld (bc), a 1919 ;src/main.c:539: } 000009CE DD F9 [10] 1920 ld sp, ix 000009D0 DD E1 [14] 1921 pop ix 000009D2 E1 [10] 1922 pop hl 000009D3 F1 [10] 1923 pop af 000009D4 F1 [10] 1924 pop af 000009D5 E9 [ 4] 1925 jp (hl) 1926 ;src/main.c:568: void xm_draw_stats_labels() 1927 ; --------------------------------- 1928 ; Function xm_draw_stats_labels 1929 ; --------------------------------- 000009D6 1930 _xm_draw_stats_labels:: 1931 ;src/main.c:572: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); 000009D6 21 09 00 [10] 1932 ld hl, #0x0009 000009D9 E5 [11] 1933 push hl 000009DA 21 04 01 [10] 1934 ld hl, #0x104 000009DD E5 [11] 1935 push hl 000009DE 11r75r0A [10] 1936 ld de, #___str_12 000009E1 21r32r10 [10] 1937 ld hl, #_win_xm 000009E4 CDr00r00 [17] 1938 call _wc_prsrw 1939 ;src/main.c:573: wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7); 000009E7 21 07 00 [10] 1940 ld hl, #0x0007 000009EA E5 [11] 1941 push hl 000009EB 21 04 0C [10] 1942 ld hl, #0xc04 000009EE E5 [11] 1943 push hl 000009EF 11r7Fr0A [10] 1944 ld de, #___str_13 000009F2 21r32r10 [10] 1945 ld hl, #_win_xm 000009F5 CDr00r00 [17] 1946 call _wc_prsrw 1947 ;src/main.c:574: wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6); 000009F8 21 06 00 [10] 1948 ld hl, #0x0006 000009FB E5 [11] 1949 push hl 000009FC 21 04 15 [10] 1950 ld hl, #0x1504 000009FF E5 [11] 1951 push hl 00000A00 11r87r0A [10] 1952 ld de, #___str_14 00000A03 21r32r10 [10] 1953 ld hl, #_win_xm 00000A06 CDr00r00 [17] 1954 call _wc_prsrw 1955 ;src/main.c:576: wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5); 00000A09 21 05 00 [10] 1956 ld hl, #0x0005 00000A0C E5 [11] 1957 push hl 00000A0D 21 06 01 [10] 1958 ld hl, #0x106 00000A10 E5 [11] 1959 push hl 00000A11 11r8Er0A [10] 1960 ld de, #___str_15 00000A14 21r32r10 [10] 1961 ld hl, #_win_xm 00000A17 CDr00r00 [17] 1962 call _wc_prsrw 1963 ;src/main.c:577: wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3); 00000A1A 21 03 00 [10] 1964 ld hl, #0x0003 00000A1D E5 [11] 1965 push hl 00000A1E 21 06 0C [10] 1966 ld hl, #0xc06 00000A21 E5 [11] 1967 push hl 00000A22 11r94r0A [10] 1968 ld de, #___str_16 00000A25 21r32r10 [10] 1969 ld hl, #_win_xm 00000A28 CDr00r00 [17] 1970 call _wc_prsrw 1971 ;src/main.c:579: for (i = 0; i < BAR_WIDTH; i++) 00000A2B 11r90r10 [10] 1972 ld de, #_barbuf+0 00000A2E 0E 00 [ 7] 1973 ld c, #0x00 00000A30 1974 00103$: 1975 ;src/main.c:580: barbuf[i] = ' '; 00000A30 69 [ 4] 1976 ld l, c 00000A31 26 00 [ 7] 1977 ld h, #0x00 00000A33 19 [11] 1978 add hl, de 00000A34 36 20 [10] 1979 ld (hl), #0x20 1980 ;src/main.c:579: for (i = 0; i < BAR_WIDTH; i++) 00000A36 0C [ 4] 1981 inc c 00000A37 79 [ 4] 1982 ld a, c 00000A38 D6 20 [ 7] 1983 sub a, #0x20 00000A3A 38 F4 [12] 1984 jr c, 00103$ 1985 ;src/main.c:581: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); 1986 ;src/main.c:572: wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9); 1987 ;src/main.c:581: wc_prsrw(&win_xm, barbuf, ROW_BAR, BAR_X, BAR_WIDTH); 00000A3C 21 20 00 [10] 1988 ld hl, #0x0020 00000A3F E5 [11] 1989 push hl 00000A40 21 08 04 [10] 1990 ld hl, #0x408 00000A43 E5 [11] 1991 push hl 00000A44 21r32r10 [10] 1992 ld hl, #_win_xm 00000A47 CDr00r00 [17] 1993 call _wc_prsrw 1994 ;src/main.c:583: bar_attr_ofs = (wc_gadrw(&win_xm, ROW_BAR, BAR_X) & 0x3FFF) | 0x0080; 00000A4A 21 08 04 [10] 1995 ld hl, #0x408 00000A4D E5 [11] 1996 push hl 00000A4E 21r32r10 [10] 1997 ld hl, #_win_xm 00000A51 CDr00r00 [17] 1998 call _wc_gadrw 00000A54 7A [ 4] 1999 ld a, d 00000A55 E6 3F [ 7] 2000 and a, #0x3f 00000A57 57 [ 4] 2001 ld d, a 00000A58 CB FB [ 8] 2002 set 7, e 00000A5A ED 53rB0r10 [20] 2003 ld (_bar_attr_ofs), de 2004 ;src/main.c:585: for (i = 0; i < BAR_WIDTH; i++) 00000A5E 0E 00 [ 7] 2005 ld c, #0x00 00000A60 2006 00105$: 2007 ;src/main.c:586: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = ATTR_BAR_EMPTY; 00000A60 2ArB0r10 [16] 2008 ld hl, (_bar_attr_ofs) 00000A63 5D [ 4] 2009 ld e, l 00000A64 7C [ 4] 2010 ld a, h 00000A65 C6 C0 [ 7] 2011 add a, #0xc0 00000A67 57 [ 4] 2012 ld d, a 00000A68 69 [ 4] 2013 ld l, c 00000A69 26 00 [ 7] 2014 ld h, #0x00 00000A6B 19 [11] 2015 add hl, de 00000A6C 36 07 [10] 2016 ld (hl), #0x07 2017 ;src/main.c:585: for (i = 0; i < BAR_WIDTH; i++) 00000A6E 0C [ 4] 2018 inc c 00000A6F 79 [ 4] 2019 ld a, c 00000A70 D6 20 [ 7] 2020 sub a, #0x20 00000A72 38 EC [12] 2021 jr c, 00105$ 2022 ;src/main.c:587: } 00000A74 C9 [10] 2023 ret 00000A75 2024 ___str_12: 00000A75 50 61 74 74 65 72 6E 2025 .ascii "Pattern:#" 3A 23 00000A7E 00 2026 .db 0x00 00000A7F 2027 ___str_13: 00000A7F 20 20 52 6F 77 3A 23 2028 .ascii " Row:#" 00000A86 00 2029 .db 0x00 00000A87 2030 ___str_14: 00000A87 20 20 42 50 4D 3A 2031 .ascii " BPM:" 00000A8D 00 2032 .db 0x00 00000A8E 2033 ___str_15: 00000A8E 54 69 6D 65 3A 2034 .ascii "Time:" 00000A93 00 2035 .db 0x00 00000A94 2036 ___str_16: 00000A94 20 2F 20 2037 .ascii " / " 00000A97 00 2038 .db 0x00 2039 ;src/main.c:589: void draw_progress_bar(u32 samples, u32 total) 2040 ; --------------------------------- 2041 ; Function draw_progress_bar 2042 ; --------------------------------- 00000A98 2043 _draw_progress_bar:: 00000A98 DD E5 [15] 2044 push ix 00000A9A DD 21 00 00 [14] 2045 ld ix, #0 00000A9E DD 39 [15] 2046 add ix, sp 00000AA0 4B [ 4] 2047 ld c, e 00000AA1 42 [ 4] 2048 ld b, d 00000AA2 EB [ 4] 2049 ex de, hl 2050 ;src/main.c:593: if (total) 00000AA3 DD 7E 07 [19] 2051 ld a, 7 (ix) 00000AA6 DD B6 06 [19] 2052 or a, 6 (ix) 00000AA9 DD B6 05 [19] 2053 or a, 5 (ix) 00000AAC DD B6 04 [19] 2054 or a, 4 (ix) 00000AAF 28 30 [12] 2055 jr z, 00104$ 2056 ;src/main.c:595: filled = (u16)(((u32)samples * BAR_WIDTH) / total); 00000AB1 69 [ 4] 2057 ld l, c 00000AB2 60 [ 4] 2058 ld h, b 00000AB3 3E 05 [ 7] 2059 ld a, #0x05 00000AB5 2060 00146$: 00000AB5 29 [11] 2061 add hl, hl 00000AB6 CB 13 [ 8] 2062 rl e 00000AB8 CB 12 [ 8] 2063 rl d 00000ABA 3D [ 4] 2064 dec a 00000ABB 20 F8 [12] 2065 jr nz, 00146$ 00000ABD DD 4E 06 [19] 2066 ld c, 6 (ix) 00000AC0 DD 46 07 [19] 2067 ld b, 7 (ix) 00000AC3 C5 [11] 2068 push bc 00000AC4 DD 4E 04 [19] 2069 ld c, 4 (ix) 00000AC7 DD 46 05 [19] 2070 ld b, 5 (ix) 00000ACA C5 [11] 2071 push bc 00000ACB EB [ 4] 2072 ex de, hl 00000ACC CDr00r00 [17] 2073 call __divulong 00000ACF F1 [10] 2074 pop af 00000AD0 F1 [10] 2075 pop af 2076 ;src/main.c:596: if (filled > BAR_WIDTH) 00000AD1 4B [ 4] 2077 ld c,e 00000AD2 42 [ 4] 2078 ld b,d 00000AD3 3E 20 [ 7] 2079 ld a, #0x20 00000AD5 BB [ 4] 2080 cp a, e 00000AD6 3E 00 [ 7] 2081 ld a, #0x00 00000AD8 9A [ 4] 2082 sbc a, d 00000AD9 30 09 [12] 2083 jr nc, 00120$ 2084 ;src/main.c:597: filled = BAR_WIDTH; 00000ADB 01 20 00 [10] 2085 ld bc, #0x0020 00000ADE C3rE4r0A [10] 2086 jp 00120$ 00000AE1 2087 00104$: 2088 ;src/main.c:600: filled = 0; // total length unknown (measurement timed out) - show empty 00000AE1 01 00 00 [10] 2089 ld bc, #0x0000 2090 ;src/main.c:602: for (i = 0; i < BAR_WIDTH; i++) 00000AE4 2091 00120$: 00000AE4 11 00 00 [10] 2092 ld de, #0x0000 00000AE7 2093 00107$: 2094 ;src/main.c:603: *(volatile u8*)(0xC000 + bar_attr_ofs + i) = (i < filled) ? ATTR_BAR_FILLED : ATTR_BAR_EMPTY; 00000AE7 2ArB0r10 [16] 2095 ld hl, (_bar_attr_ofs) 00000AEA 7C [ 4] 2096 ld a, h 00000AEB C6 C0 [ 7] 2097 add a, #0xc0 00000AED 67 [ 4] 2098 ld h, a 00000AEE 19 [11] 2099 add hl, de 00000AEF 7B [ 4] 2100 ld a, e 00000AF0 91 [ 4] 2101 sub a, c 00000AF1 7A [ 4] 2102 ld a, d 00000AF2 98 [ 4] 2103 sbc a, b 00000AF3 30 05 [12] 2104 jr nc, 00111$ 00000AF5 3E 40 [ 7] 2105 ld a, #0x40 00000AF7 C3rFCr0A [10] 2106 jp 00112$ 00000AFA 2107 00111$: 00000AFA 3E 07 [ 7] 2108 ld a, #0x07 00000AFC 2109 00112$: 00000AFC 77 [ 7] 2110 ld (hl), a 2111 ;src/main.c:602: for (i = 0; i < BAR_WIDTH; i++) 00000AFD 13 [ 6] 2112 inc de 00000AFE 6B [ 4] 2113 ld l, e 00000AFF 62 [ 4] 2114 ld h, d 00000B00 7D [ 4] 2115 ld a, l 00000B01 D6 20 [ 7] 2116 sub a, #0x20 00000B03 7C [ 4] 2117 ld a, h 00000B04 DE 00 [ 7] 2118 sbc a, #0x00 00000B06 38 DF [12] 2119 jr c, 00107$ 2120 ;src/main.c:604: } 00000B08 DD E1 [14] 2121 pop ix 00000B0A E1 [10] 2122 pop hl 00000B0B F1 [10] 2123 pop af 00000B0C F1 [10] 2124 pop af 00000B0D E9 [ 4] 2125 jp (hl) 2126 ;src/main.c:606: void xm_update_info() 2127 ; --------------------------------- 2128 ; Function xm_update_info 2129 ; --------------------------------- 00000B0E 2130 _xm_update_info:: 00000B0E DD E5 [15] 2131 push ix 00000B10 DD 21 00 00 [14] 2132 ld ix, #0 00000B14 DD 39 [15] 2133 add ix, sp 00000B16 21 F8 FF [10] 2134 ld hl, #-8 00000B19 39 [11] 2135 add hl, sp 00000B1A F9 [ 6] 2136 ld sp, hl 2137 ;src/main.c:612: esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle); 00000B1B 3Ar30r10 [13] 2138 ld a, (_xm_handle) 00000B1E 6F [ 4] 2139 ld l, a 00000B1F 3E 0B [ 7] 2140 ld a, #0x0b 00000B21 CDrD1r00 [17] 2141 call _esp_wr_reg8 2142 ;src/main.c:613: esp_cmd(ESP_CMD_TRACK_GET_INFO); 00000B24 3E A8 [ 7] 2143 ld a, #0xa8 00000B26 CDr05r00 [17] 2144 call _esp_cmd 2145 ;src/main.c:614: esp_wait_busy(50); // 1s - a plain info read should be near-instant 00000B29 21 32 00 [10] 2146 ld hl, #0x0032 00000B2C CDr2Cr02 [17] 2147 call _esp_wait_busy 2148 ;src/main.c:619: status = esp_rd_reg8(ESP_REG_TRACK_STATUS); 00000B2F 3E 28 [ 7] 2149 ld a, #0x28 00000B31 CDr1Er00 [17] 2150 call _esp_rd_reg8 00000B34 DD 77 FF [19] 2151 ld -1 (ix), a 2152 ;src/main.c:620: if (last_track_status == TRACK_OBJ_ST_PLAYING && status == TRACK_OBJ_ST_STOPPED) 00000B37 3Ar31r10 [13] 2153 ld a, (_last_track_status) 00000B3A D6 21 [ 7] 2154 sub a, #0x21 00000B3C 20 1D [12] 2155 jr nz, 00102$ 00000B3E DD 7E FF [19] 2156 ld a, -1 (ix) 00000B41 D6 20 [ 7] 2157 sub a, #0x20 00000B43 20 16 [12] 2158 jr nz, 00102$ 2159 ;src/main.c:622: esp_cmd(ESP_CMD_KILL_OBJECTS); 00000B45 3E E4 [ 7] 2160 ld a, #0xe4 00000B47 CDr05r00 [17] 2161 call _esp_cmd 2162 ;src/main.c:623: esp_wait_busy(100); 00000B4A 21 64 00 [10] 2163 ld hl, #0x0064 00000B4D CDr2Cr02 [17] 2164 call _esp_wait_busy 2165 ;src/main.c:624: wc_rresb(&win_xm); 00000B50 21r32r10 [10] 2166 ld hl, #_win_xm 00000B53 CDr00r00 [17] 2167 call _wc_rresb 2168 ;src/main.c:625: wc_exit(WC_NEXT_FILE); 00000B56 3E 02 [ 7] 2169 ld a, #0x02 00000B58 CDr00r00 [17] 2170 call _wc_exit 00000B5B 2171 00102$: 2172 ;src/main.c:627: last_track_status = status; 00000B5B DD 7E FF [19] 2173 ld a, -1 (ix) 00000B5E 32r31r10 [13] 2174 ld (#_last_track_status), a 2175 ;src/main.c:629: pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN); 00000B61 3E 2B [ 7] 2176 ld a, #0x2b 00000B63 CDr1Er00 [17] 2177 call _esp_rd_reg8 00000B66 DD 77 FA [19] 2178 ld -6 (ix), a 2179 ;src/main.c:630: row = esp_rd_reg8(ESP_REG_TRACK_ROW); 00000B69 3E 2C [ 7] 2180 ld a, #0x2c 00000B6B CDr1Er00 [17] 2181 call _esp_rd_reg8 00000B6E DD 77 FB [19] 2182 ld -5 (ix), a 2183 ;src/main.c:631: esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2); 00000B71 3E 02 [ 7] 2184 ld a, #0x02 00000B73 F5 [11] 2185 push af 00000B74 33 [ 6] 2186 inc sp 00000B75 21 01 00 [10] 2187 ld hl, #1 00000B78 39 [11] 2188 add hl, sp 00000B79 EB [ 4] 2189 ex de, hl 00000B7A 3E 31 [ 7] 2190 ld a, #0x31 00000B7C CDrA5r00 [17] 2191 call _esp_rd_regs 2192 ;src/main.c:632: samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES); 00000B7F 3E 2D [ 7] 2193 ld a, #0x2d 00000B81 CDr37r00 [17] 2194 call _esp_rd_reg32 00000B84 DD 73 FC [19] 2195 ld -4 (ix), e 00000B87 DD 72 FD [19] 2196 ld -3 (ix), d 00000B8A DD 75 FE [19] 2197 ld -2 (ix), l 00000B8D DD 74 FF [19] 2198 ld -1 (ix), h 2199 ;src/main.c:634: if (!total_samples) 00000B90 3Ar2Fr10 [13] 2200 ld a, (_total_samples+3) 00000B93 FD 21r2Cr10 [14] 2201 ld iy, #_total_samples 00000B97 FD B6 02 [19] 2202 or a, 2 (iy) 00000B9A FD B6 01 [19] 2203 or a, 1 (iy) 00000B9D FD B6 00 [19] 2204 or a, 0 (iy) 00000BA0 20 0C [12] 2205 jr nz, 00105$ 2206 ;src/main.c:635: total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES); 00000BA2 3E 36 [ 7] 2207 ld a, #0x36 00000BA4 CDr37r00 [17] 2208 call _esp_rd_reg32 00000BA7 ED 53r2Cr10 [20] 2209 ld (_total_samples), de 00000BAB 22r2Er10 [16] 2210 ld (_total_samples + 2), hl 00000BAE 2211 00105$: 2212 ;src/main.c:637: put_hex2(hexbuf, pattern); 00000BAE DD 7E FA [19] 2213 ld a, -6 (ix) 00000BB1 F5 [11] 2214 push af 00000BB2 33 [ 6] 2215 inc sp 00000BB3 21r86r10 [10] 2216 ld hl, #_hexbuf 00000BB6 CDr8Fr08 [17] 2217 call _put_hex2 2218 ;src/main.c:638: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 10, 2, ATTR_VALUE); 00000BB9 3E 71 [ 7] 2219 ld a, #0x71 00000BBB F5 [11] 2220 push af 00000BBC 33 [ 6] 2221 inc sp 00000BBD 21 02 00 [10] 2222 ld hl, #0x0002 00000BC0 E5 [11] 2223 push hl 00000BC1 21 04 0A [10] 2224 ld hl, #0xa04 00000BC4 E5 [11] 2225 push hl 00000BC5 11r86r10 [10] 2226 ld de, #_hexbuf 00000BC8 21r32r10 [10] 2227 ld hl, #_win_xm 00000BCB CDr00r00 [17] 2228 call _wc_prsrw_attr 2229 ;src/main.c:640: put_hex2(hexbuf, row); 00000BCE DD 7E FB [19] 2230 ld a, -5 (ix) 00000BD1 F5 [11] 2231 push af 00000BD2 33 [ 6] 2232 inc sp 00000BD3 21r86r10 [10] 2233 ld hl, #_hexbuf 00000BD6 CDr8Fr08 [17] 2234 call _put_hex2 2235 ;src/main.c:641: wc_prsrw_attr(&win_xm, hexbuf, ROW_STATS, 19, 2, ATTR_VALUE); 00000BD9 3E 71 [ 7] 2236 ld a, #0x71 00000BDB F5 [11] 2237 push af 00000BDC 33 [ 6] 2238 inc sp 00000BDD 21 02 00 [10] 2239 ld hl, #0x0002 00000BE0 E5 [11] 2240 push hl 00000BE1 21 04 13 [10] 2241 ld hl, #0x1304 00000BE4 E5 [11] 2242 push hl 00000BE5 11r86r10 [10] 2243 ld de, #_hexbuf 00000BE8 21r32r10 [10] 2244 ld hl, #_win_xm 00000BEB CDr00r00 [17] 2245 call _wc_prsrw_attr 2246 ;src/main.c:643: put_dec3(decbuf, bpm); 00000BEE D1 [10] 2247 pop de 00000BEF D5 [11] 2248 push de 00000BF0 21r88r10 [10] 2249 ld hl, #_decbuf 00000BF3 CDrCCr08 [17] 2250 call _put_dec3 2251 ;src/main.c:644: wc_prsrw_attr(&win_xm, decbuf, ROW_STATS, 27, 3, ATTR_VALUE); 00000BF6 3E 71 [ 7] 2252 ld a, #0x71 00000BF8 F5 [11] 2253 push af 00000BF9 33 [ 6] 2254 inc sp 00000BFA 21 03 00 [10] 2255 ld hl, #0x0003 00000BFD E5 [11] 2256 push hl 00000BFE 21 04 1B [10] 2257 ld hl, #0x1b04 00000C01 E5 [11] 2258 push hl 00000C02 11r88r10 [10] 2259 ld de, #_decbuf 00000C05 21r32r10 [10] 2260 ld hl, #_win_xm 00000C08 CDr00r00 [17] 2261 call _wc_prsrw_attr 2262 ;src/main.c:646: put_time(timebuf, samples / 44100UL); 00000C0B 21 00 00 [10] 2263 ld hl, #0x0000 00000C0E E5 [11] 2264 push hl 00000C0F 21 44 AC [10] 2265 ld hl, #0xac44 00000C12 E5 [11] 2266 push hl 00000C13 DD 5E FC [19] 2267 ld e, -4 (ix) 00000C16 DD 56 FD [19] 2268 ld d, -3 (ix) 00000C19 DD 6E FE [19] 2269 ld l, -2 (ix) 00000C1C DD 66 FF [19] 2270 ld h, -1 (ix) 00000C1F CDr00r00 [17] 2271 call __divulong 00000C22 F1 [10] 2272 pop af 00000C23 E3 [19] 2273 ex (sp),hl 00000C24 D5 [11] 2274 push de 00000C25 21r8Br10 [10] 2275 ld hl, #_timebuf 00000C28 CDr29r09 [17] 2276 call _put_time 2277 ;src/main.c:647: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 7, 5, ATTR_VALUE); 00000C2B 3E 71 [ 7] 2278 ld a, #0x71 00000C2D F5 [11] 2279 push af 00000C2E 33 [ 6] 2280 inc sp 00000C2F 21 05 00 [10] 2281 ld hl, #0x0005 00000C32 E5 [11] 2282 push hl 00000C33 21 06 07 [10] 2283 ld hl, #0x706 00000C36 E5 [11] 2284 push hl 00000C37 11r8Br10 [10] 2285 ld de, #_timebuf 00000C3A 21r32r10 [10] 2286 ld hl, #_win_xm 00000C3D CDr00r00 [17] 2287 call _wc_prsrw_attr 2288 ;src/main.c:649: put_time(timebuf, total_samples / 44100UL); 00000C40 21 00 00 [10] 2289 ld hl, #0x0000 00000C43 E5 [11] 2290 push hl 00000C44 21 44 AC [10] 2291 ld hl, #0xac44 00000C47 E5 [11] 2292 push hl 00000C48 ED 5Br2Cr10 [20] 2293 ld de, (_total_samples) 00000C4C 2Ar2Er10 [16] 2294 ld hl, (_total_samples + 2) 00000C4F CDr00r00 [17] 2295 call __divulong 00000C52 F1 [10] 2296 pop af 00000C53 E3 [19] 2297 ex (sp),hl 00000C54 D5 [11] 2298 push de 00000C55 21r8Br10 [10] 2299 ld hl, #_timebuf 00000C58 CDr29r09 [17] 2300 call _put_time 2301 ;src/main.c:650: wc_prsrw_attr(&win_xm, timebuf, ROW_TIME, 15, 5, ATTR_VALUE); 00000C5B 3E 71 [ 7] 2302 ld a, #0x71 00000C5D F5 [11] 2303 push af 00000C5E 33 [ 6] 2304 inc sp 00000C5F 21 05 00 [10] 2305 ld hl, #0x0005 00000C62 E5 [11] 2306 push hl 00000C63 21 06 0F [10] 2307 ld hl, #0xf06 00000C66 E5 [11] 2308 push hl 00000C67 11r8Br10 [10] 2309 ld de, #_timebuf 00000C6A 21r32r10 [10] 2310 ld hl, #_win_xm 00000C6D CDr00r00 [17] 2311 call _wc_prsrw_attr 2312 ;src/main.c:652: draw_progress_bar(samples, total_samples); 00000C70 2Ar2Er10 [16] 2313 ld hl, (_total_samples + 2) 00000C73 E5 [11] 2314 push hl 00000C74 2Ar2Cr10 [16] 2315 ld hl, (_total_samples) 00000C77 E5 [11] 2316 push hl 00000C78 DD 5E FC [19] 2317 ld e, -4 (ix) 00000C7B DD 56 FD [19] 2318 ld d, -3 (ix) 00000C7E DD 6E FE [19] 2319 ld l, -2 (ix) 00000C81 DD 66 FF [19] 2320 ld h, -1 (ix) 00000C84 CDr98r0A [17] 2321 call _draw_progress_bar 2322 ;src/main.c:654: } 00000C87 DD F9 [10] 2323 ld sp, ix 00000C89 DD E1 [14] 2324 pop ix 00000C8B C9 [10] 2325 ret 2326 ;src/main.c:656: void main_start() 2327 ; --------------------------------- 2328 ; Function main_start 2329 ; --------------------------------- 00000C8C 2330 _main_start:: 00000C8C DD E5 [15] 2331 push ix 00000C8E DD 21 00 00 [14] 2332 ld ix, #0 00000C92 DD 39 [15] 2333 add ix, sp 00000C94 3B [ 6] 2334 dec sp 2335 ;src/main.c:660: copy_file_name(); 00000C95 CDrC7r06 [17] 2336 call _copy_file_name 2337 ;src/main.c:672: memcpy(&win_xm, &win_xm_tpl, sizeof(win_xm)); 00000C98 11r32r10 [10] 2338 ld de, #_win_xm 00000C9B 21rA0r02 [10] 2339 ld hl, #_win_xm_tpl 00000C9E 01 12 00 [10] 2340 ld bc, #0x0012 00000CA1 ED B0 [21] 2341 ldir 2342 ;src/main.c:673: win_xm.x_pos = wc_center(wc_screen_width(), win_xm.x_size); 00000CA3 21r36r10 [10] 2343 ld hl, #_win_xm + 4 00000CA6 6E [ 7] 2344 ld l, (hl) 00000CA7 E5 [11] 2345 push hl 00000CA8 CDr4Cr05 [17] 2346 call _wc_screen_width 00000CAB E1 [10] 2347 pop hl 00000CAC CDr59r05 [17] 2348 call _wc_center 00000CAF 32r34r10 [13] 2349 ld (#(_win_xm + 2)), a 2350 ;src/main.c:674: win_xm.y_pos = wc_center(*(u8*)_HEI, win_xm.y_size); 00000CB2 21r37r10 [10] 2351 ld hl, #_win_xm + 5 00000CB5 6E [ 7] 2352 ld l, (hl) 00000CB6 3A 0E 60 [13] 2353 ld a, (#0x600e) 00000CB9 CDr59r05 [17] 2354 call _wc_center 00000CBC 32r35r10 [13] 2355 ld (#(_win_xm + 3)), a 2356 ;src/main.c:683: wc_gedpl(); 00000CBF CDr00r00 [17] 2357 call _wc_gedpl 2358 ;src/main.c:684: wc_key_wait_release(); 00000CC2 CDr00r00 [17] 2359 call _wc_key_wait_release 2360 ;src/main.c:685: wc_prwow(&win_xm); 00000CC5 21r32r10 [10] 2361 ld hl, #_win_xm 00000CC8 CDr00r00 [17] 2362 call _wc_prwow 2363 ;src/main.c:686: xm_draw_static_labels(); 00000CCB CDrECr06 [17] 2364 call _xm_draw_static_labels 2365 ;src/main.c:687: xm_set_status("Loading, please wait..."); 00000CCE 21r76r0D [10] 2366 ld hl, #___str_17 00000CD1 CDrCFr07 [17] 2367 call _xm_set_status 2368 ;src/main.c:689: if (state_esp == 0xFF) 00000CD4 3Ar00r00 [13] 2369 ld a, (_state_esp) 00000CD7 3C [ 4] 2370 inc a 00000CD8 20 0D [12] 2371 jr nz, 00102$ 2372 ;src/main.c:690: state_esp = esp_init() ? 1 : 2; 00000CDA CDr93r02 [17] 2373 call _esp_init 00000CDD B7 [ 4] 2374 or a, a 00000CDE 3E 01 [ 7] 2375 ld a, #0x01 00000CE0 20 02 [12] 2376 jr nz, 00127$ 00000CE2 3E 02 [ 7] 2377 ld a, #0x02 00000CE4 2378 00127$: 00000CE4 32r00r00 [13] 2379 ld (#_state_esp), a 00000CE7 2380 00102$: 2381 ;src/main.c:692: if (state_esp != 1) 00000CE7 3Ar00r00 [13] 2382 ld a, (_state_esp) 00000CEA 3D [ 4] 2383 dec a 00000CEB 28 06 [12] 2384 jr z, 00104$ 2385 ;src/main.c:694: error_esp(); 00000CED CDr2Er06 [17] 2386 call _error_esp 2387 ;src/main.c:695: return; 00000CF0 C3r72r0D [10] 2388 jp 00124$ 00000CF3 2389 00104$: 2390 ;src/main.c:698: total_samples = 0; 00000CF3 AF [ 4] 2391 xor a, a 00000CF4 32r2Cr10 [13] 2392 ld (_total_samples+0), a 00000CF7 32r2Dr10 [13] 2393 ld (_total_samples+1), a 00000CFA 32r2Er10 [13] 2394 ld (_total_samples+2), a 00000CFD 32r2Fr10 [13] 2395 ld (_total_samples+3), a 2396 ;src/main.c:700: if (!play_xm()) 00000D00 CDr0Fr03 [17] 2397 call _play_xm 00000D03 B7 [ 4] 2398 or a, a 00000D04 20 13 [12] 2399 jr nz, 00109$ 2400 ;src/main.c:702: if (last_esp_status == ESP_ERR_OUT_OF_MEMORY) 00000D06 3Ar08r10 [13] 2401 ld a, (_last_esp_status) 00000D09 D6 99 [ 7] 2402 sub a, #0x99 00000D0B 20 06 [12] 2403 jr nz, 00106$ 2404 ;src/main.c:703: error_oom(); 00000D0D CDr61r06 [17] 2405 call _error_oom 00000D10 C3r72r0D [10] 2406 jp 00124$ 00000D13 2407 00106$: 2408 ;src/main.c:705: error_playback(); 00000D13 CDr94r06 [17] 2409 call _error_playback 2410 ;src/main.c:706: return; 00000D16 C3r72r0D [10] 2411 jp 00124$ 00000D19 2412 00109$: 2413 ;src/main.c:709: xm_set_status("Playing"); 00000D19 21r8Er0D [10] 2414 ld hl, #___str_18 00000D1C CDrCFr07 [17] 2415 call _xm_set_status 2416 ;src/main.c:710: xm_draw_stats_labels(); 00000D1F CDrD6r09 [17] 2417 call _xm_draw_stats_labels 2418 ;src/main.c:711: last_track_status = TRACK_OBJ_ST_PLAYING; 00000D22 21r31r10 [10] 2419 ld hl, #_last_track_status 00000D25 36 21 [10] 2420 ld (hl), #0x21 2421 ;src/main.c:712: xm_update_info(); 00000D27 CDr0Er0B [17] 2422 call _xm_update_info 2423 ;src/main.c:714: frame_ctr = 0; 00000D2A DD 36 FF 00 [19] 2424 ld -1 (ix), #0x00 2425 ;src/main.c:718: while (1) 00000D2E 2426 00122$: 2427 ;src/main.c:722: __endasm; 00000D2E 76 [ 4] 2428 halt 2429 ;src/main.c:724: if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz 00000D2F DD 34 FF [23] 2430 inc -1 (ix) 00000D32 DD 7E FF [19] 2431 ld a, -1 (ix) 00000D35 D6 0A [ 7] 2432 sub a, #0x0a 00000D37 38 07 [12] 2433 jr c, 00111$ 2434 ;src/main.c:726: frame_ctr = 0; 00000D39 DD 36 FF 00 [19] 2435 ld -1 (ix), #0x00 2436 ;src/main.c:727: xm_update_info(); 00000D3D CDr0Er0B [17] 2437 call _xm_update_info 00000D40 2438 00111$: 2439 ;src/main.c:730: if (wc_key_pgdn() || wc_key_enter()) // PgDn or Enter - unload and go to next file 00000D40 CDr00r00 [17] 2440 call _wc_key_pgdn 00000D43 B7 [ 4] 2441 or a, a 00000D44 20 06 [12] 2442 jr nz, 00112$ 00000D46 CDr00r00 [17] 2443 call _wc_key_enter 00000D49 B7 [ 4] 2444 or a, a 00000D4A 28 05 [12] 2445 jr z, 00113$ 00000D4C 2446 00112$: 2447 ;src/main.c:731: unload_and_exit(WC_NEXT_FILE); 00000D4C 3E 02 [ 7] 2448 ld a, #0x02 00000D4E CDrC9r05 [17] 2449 call _unload_and_exit 00000D51 2450 00113$: 2451 ;src/main.c:733: if (wc_key_pgup()) // PgUp - unload and go to previous file 00000D51 CDr00r00 [17] 2452 call _wc_key_pgup 00000D54 B7 [ 4] 2453 or a, a 00000D55 28 05 [12] 2454 jr z, 00116$ 2455 ;src/main.c:734: unload_and_exit(WC_PREV_FILE); 00000D57 3E 04 [ 7] 2456 ld a, #0x04 00000D59 CDrC9r05 [17] 2457 call _unload_and_exit 00000D5C 2458 00116$: 2459 ;src/main.c:736: if (wc_key_esc()) // Esc - unload and exit 00000D5C CDr00r00 [17] 2460 call _wc_key_esc 00000D5F B7 [ 4] 2461 or a, a 00000D60 28 04 [12] 2462 jr z, 00118$ 2463 ;src/main.c:737: unload_and_exit(WC_EXIT); 00000D62 AF [ 4] 2464 xor a, a 00000D63 CDrC9r05 [17] 2465 call _unload_and_exit 00000D66 2466 00118$: 2467 ;src/main.c:739: if (wc_key_space()) // Space - leave the track playing, just exit 00000D66 CDr00r00 [17] 2468 call _wc_key_space 00000D69 B7 [ 4] 2469 or a, a 00000D6A 28 C2 [12] 2470 jr z, 00122$ 2471 ;src/main.c:740: leave_playing_and_exit(); 00000D6C CDrFAr05 [17] 2472 call _leave_playing_and_exit 00000D6F C3r2Er0D [10] 2473 jp 00122$ 00000D72 2474 00124$: 2475 ;src/main.c:742: } 00000D72 33 [ 6] 2476 inc sp 00000D73 DD E1 [14] 2477 pop ix 00000D75 C9 [10] 2478 ret 00000D76 2479 ___str_17: 00000D76 4C 6F 61 64 69 6E 67 2480 .ascii "Loading, please wait..." 2C 20 70 6C 65 61 73 65 20 77 61 69 74 2E 2E 2E 00000D8D 00 2481 .db 0x00 00000D8E 2482 ___str_18: 00000D8E 50 6C 61 79 69 6E 67 2483 .ascii "Playing" 00000D95 00 2484 .db 0x00 2485 ;src/main.c:745: void main() 2486 ; --------------------------------- 2487 ; Function main 2488 ; --------------------------------- 00000D96 2489 _main:: 2490 ;src/main.c:755: __endasm; 00000D96 ED 73r00r10 [20] 2491 ld (_ret_sp), sp 00000D9A 32r07r10 [13] 2492 ld (_call_type), a 00000D9D ED 43r09r10 [20] 2493 ld (_p_file_name), bc 00000DA1 08 [ 4] 2494 ex af, af 00000DA2 32r06r10 [13] 2495 ld (_file_ext), a 00000DA5 22r02r10 [16] 2496 ld (_filesize), hl 00000DA8 ED 53r04r10 [20] 2497 ld (_filesize + 2), de 2498 ;src/main.c:757: switch (call_type) 00000DAC 3Ar07r10 [13] 2499 ld a, (_call_type+0) 00000DAF B7 [ 4] 2500 or a, a 00000DB0 CAr8Cr0C [10] 2501 jp z, _main_start 00000DB3 3Ar07r10 [13] 2502 ld a, (_call_type) 00000DB6 D6 03 [ 7] 2503 sub a, #0x03 00000DB8 CAr8Fr05 [10] 2504 jp z, _about 2505 ;src/main.c:759: case WC_CALL_EXT: 2506 ;src/main.c:760: main_start(); 2507 ;src/main.c:761: break; 2508 ;src/main.c:763: case WC_CALL_MENU: 2509 ;src/main.c:764: about(); 2510 ;src/main.c:765: break; 2511 ;src/main.c:767: default: 2512 ;src/main.c:768: wc_exit(WC_EXIT); 00000DBB AF [ 4] 2513 xor a, a 2514 ;src/main.c:769: } 2515 ;src/main.c:770: } 00000DBC C3r00r00 [10] 2516 jp _wc_exit 2517 .area _CODE 2518 .area _INITIALIZER 00000000 2519 __xinit__state_esp: 00000000 FF 2520 .db #0xff ; 255 2521 .area _CABS (ABS)