- Fix state_esp init bug: crt0.s never runs GSINIT and hex2bin fills unbacked memory with 0xFF (not 0), so a plain zero-init global always read 0xFF on load; give it a real 0xFF sentinel initializer instead. - Vendor demyanenko-d/VGMPLAY.WMF's wc_api library (SDCC 4.6.0 + --sdcccall 1) instead of hand-rolled PRSRW/PRIAT wrappers, which corrupted esp32 file loading in three different shapes; colored "File:" caption now works. - Trim shared-file footprint: vendor only the esp32.c functions actually used, drop unused sdklib.h/sdk.lib linkage. - Re-enable periodic live stats (Pattern/Row/BPM/Time/progress bar). - Limit playback to one loop via TRACK_SET_PARAMS/MAX_LOOP_COUNT, and auto-advance to the next file when a track finishes on its own (detected via a PLAYING->STOPPED ESP_REG_TRACK_STATUS transition). - Pin the Z80 clock to 14MHz for the whole plugin lifetime so esp32 SPI wait-loop timeouts (raw iteration counts, not real time) don't depend on whatever turbo setting was active before the plugin started. - Pad TRACK_INIT's timeout well past the firmware's 5s song-length measurement cap (XM_MEASURE_MAX_US). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
548 lines
6.7 KiB
NASM
548 lines
6.7 KiB
NASM
;--------------------------------------------------------
|
|
; File Created by SDCC : free open source ISO C Compiler
|
|
; Version 4.6.0 #16555 (MINGW64)
|
|
;--------------------------------------------------------
|
|
.module wc_h
|
|
|
|
.optsdcc -mz80 sdcccall(1)
|
|
;--------------------------------------------------------
|
|
; Public variables in this module
|
|
;--------------------------------------------------------
|
|
;--------------------------------------------------------
|
|
; special function registers
|
|
;--------------------------------------------------------
|
|
;--------------------------------------------------------
|
|
; ram data
|
|
;--------------------------------------------------------
|
|
.area _DATA
|
|
;--------------------------------------------------------
|
|
; ram data
|
|
;--------------------------------------------------------
|
|
.area _INITIALIZED
|
|
;--------------------------------------------------------
|
|
; absolute ram data
|
|
;--------------------------------------------------------
|
|
.area _DABS (ABS)
|
|
.area _DABS (ABS)
|
|
;--------------------------------------------------------
|
|
; global & static initialisations
|
|
;--------------------------------------------------------
|
|
.area _HOME
|
|
.area _GSINIT
|
|
.area _GSFINAL
|
|
.area _GSINIT
|
|
;--------------------------------------------------------
|
|
; Home
|
|
;--------------------------------------------------------
|
|
.area _HOME
|
|
.area _HOME
|
|
;--------------------------------------------------------
|
|
; code
|
|
;--------------------------------------------------------
|
|
.area _CODE
|
|
.area _CODE
|
|
_hdr:
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db #0x57 ; 87 'W'
|
|
.db #0x69 ; 105 'i'
|
|
.db #0x6c ; 108 'l'
|
|
.db #0x64 ; 100 'd'
|
|
.db #0x43 ; 67 'C'
|
|
.db #0x6f ; 111 'o'
|
|
.db #0x6d ; 109 'm'
|
|
.db #0x6d ; 109 'm'
|
|
.db #0x61 ; 97 'a'
|
|
.db #0x6e ; 110 'n'
|
|
.db #0x64 ; 100 'd'
|
|
.db #0x65 ; 101 'e'
|
|
.db #0x72 ; 114 'r'
|
|
.db #0x4d ; 77 'M'
|
|
.db #0x44 ; 68 'D'
|
|
.db #0x4c ; 76 'L'
|
|
.db #0x07 ; 7
|
|
.db 0x00
|
|
.db #0x01 ; 1
|
|
.db #0x00 ; 0
|
|
.db #0x00 ; 0
|
|
.db #0x1e ; 30
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db #0x58 ; 88 'X'
|
|
.db #0x4d ; 77 'M'
|
|
.db #0x20 ; 32
|
|
.db #0x58 ; 88 'X'
|
|
.db #0x4d ; 77 'M'
|
|
.db #0x5a ; 90 'Z'
|
|
.db #0x53 ; 83 'S'
|
|
.db #0x33 ; 51 '3'
|
|
.db #0x4d ; 77 'M'
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.byte #0xff, #0xff, #0xff, #0xff ; 4294967295
|
|
.ascii "XM Player"
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db #0x03 ; 3
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.db 0x00
|
|
.area _INITIALIZER
|
|
.area _CABS (ABS)
|