Initial commit

This commit is contained in:
2026-08-30 19:47:39 +03:00
commit 6163d0c8ca
30 changed files with 7669 additions and 0 deletions
BIN
View File
Binary file not shown.
+48
View File
@@ -0,0 +1,48 @@
REM NOTE: xmplay pins its OWN SDCC version here, independent of the rest of
REM ft812sdk (which stays on 4.0.0 for ABI reasons - see project memory on
REM the earlier shared-lib ABI mismatch incident). 4.6.0 is needed here
REM specifically for --sdcccall 1, required to link demyanenko-d/
REM VGMPLAY.WMF's wc_api library (vgm_wc_api.lib) - our own hand-rolled
REM PRSRW+PRIAT implementations corrupted esp32 file loading in three
REM different shapes and were abandoned in favor of their tested code.
set SDCC=E:\SDCC\4.6.0
set path=%SDCC%\bin;E:\zx-evo-master\pentevo\tools\hex2bin;%path%
if not exist obj md obj
del /q /s obj >nul
sdasz80 -o obj/crt0.rel src/crt0.s
if errorlevel 1 pause & exit
sdcc -Isrc -I../lib/sdk -I../../../esp32/src/main -mz80 --sdcccall 1 --std-sdcc11 --opt-code-speed --no-std-crt0 obj/crt0.rel --code-loc 0x8003 --data-loc 0xA800 src/main.c vgm_wc_api.lib -o obj/out.hex
if errorlevel 1 pause & exit
if exist obj/out.hex hex2bin obj/out.hex >nul
for %%i in (obj/out.bin) do set sz=%%~zi
set /a sz=(%sz% - 1) / 512 + 1
REM A WC plugin page is exactly 16KB = 32 512-byte blocks (WALK in WCVW.ASM
REM loads N_BLK0 blocks straight off disk into the #C000-#FFFF window as
REM one contiguous chunk - anything past 32 blocks overflows that window).
REM This is what broke ftview's [PLUGINS] autoload (33 blocks needed, only
REM 32 available) - fixed there by moving --data-loc from 0xAE00 down to
REM 0xA800, applied here too for consistency and headroom as xmplay grows.
if %sz% GTR 32 (
echo ERROR: build needs %sz% x 512-byte blocks, but a single WC plugin page holds only 32 - shrink the code or lower --data-loc's headroom above it.
pause
exit
)
REM Pad obj/out.bin up to a whole number of 512-byte blocks (sz*512 bytes).
REM hex2bin only emits the bytes actually present in the hex file, which
REM generally is NOT block-aligned, while N_BLK0 above always rounds up -
REM technically short of what the header promises, though not the cause
REM of the overflow bug above.
set /a padded=%sz% * 512
powershell -NoProfile -Command "$fs=[System.IO.File]::Open('obj\out.bin',[System.IO.FileMode]::Open,[System.IO.FileAccess]::Write); $fs.SetLength(%padded%); $fs.Close()"
sdcc -DN_BLK0=%sz% -Isrc -I../lib/sdk --no-std-crt0 -mz80 --std-sdcc11 --opt-code-speed src/wc_h.c -o obj/hdr.hex
if errorlevel 1 pause & exit
if exist obj/hdr.hex hex2bin obj/hdr.hex >nul
copy /b obj\hdr.bin + obj\out.bin xmplay.wmf >nul
+21
View File
@@ -0,0 +1,21 @@
XL4
H C areas 2 global symbols
M crt0
S _main Ref00000000
S .__.ABS. Def00000000
A _CODE size 0 flags 0 addr 0
A _HEADER size 0 flags 8 addr 0
A _HEADER0 size 3 flags 8 addr 8000
A _HOME size 0 flags 0 addr 0
A _INITIALIZER size 0 flags 0 addr 0
A _GSINIT size 0 flags 0 addr 0
A _GSFINAL size 0 flags 0 addr 0
A _DATA size 0 flags 0 addr 0
A _INITIALIZED size 0 flags 0 addr 0
A _BSEG size 0 flags 0 addr 0
A _BSS size 0 flags 0 addr 0
A _HEAP size 0 flags 0 addr 0
T 00 80 00 00
R 00 00 02 00
T 00 80 00 00 C3 00 00
R 00 00 02 00 02 05 00 00
+547
View File
@@ -0,0 +1,547 @@
;--------------------------------------------------------
; 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 #0x1d ; 29
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 0x00
.db 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)
BIN
View File
Binary file not shown.
+17
View File
@@ -0,0 +1,17 @@
:200200000000000000000000000000000000000057696C64436F6D6D616E6465724D444CDB
:2002200007000100001D000000000000000000000000000000000000000000000000000099
:20024000584D20584D5A53334D000000000000000000000000000000000000000000000007
:2002600000000000000000000000000000000000000000000000000000000000000000007E
:2002800000000000000000000000000000000000000000000000000000000000000000005E
:2002A00000FFFFFFFF584D20506C6179657200000000000000000000000000000000000010
:2002C00000000000000300000000000000000000000000000000000000000000000000001B
:2002E0000000000000000000000000000000000000000000000000000000000000000000FE
:200300000000000000000000000000000000000000000000000000000000000000000000DD
:200320000000000000000000000000000000000000000000000000000000000000000000BD
:2003400000000000000000000000000000000000000000000000000000000000000000009D
:2003600000000000000000000000000000000000000000000000000000000000000000007D
:2003800000000000000000000000000000000000000000000000000000000000000000005D
:2003A00000000000000000000000000000000000000000000000000000000000000000003D
:2003C00000000000000000000000000000000000000000000000000000000000000000001D
:2003E0000000000000000000000000000000000000000000000000000000000000000000FD
:00000001FF
+9
View File
@@ -0,0 +1,9 @@
-mjwx
-i obj/hdr.hex
-b _CODE = 0x0200
-b _DATA = 0x8000
-k E:\SDCC\4.6.0\bin\..\lib\z80
-l z80
obj/hdr.rel
-e
+548
View File
@@ -0,0 +1,548 @@
1 ;--------------------------------------------------------
2 ; File Created by SDCC : free open source ISO C Compiler
3 ; Version 4.6.0 #16555 (MINGW64)
4 ;--------------------------------------------------------
5 .module wc_h
6
7 .optsdcc -mz80 sdcccall(1)
8 ;--------------------------------------------------------
9 ; Public variables in this module
10 ;--------------------------------------------------------
11 ;--------------------------------------------------------
12 ; special function registers
13 ;--------------------------------------------------------
14 ;--------------------------------------------------------
15 ; ram data
16 ;--------------------------------------------------------
17 .area _DATA
18 ;--------------------------------------------------------
19 ; ram data
20 ;--------------------------------------------------------
21 .area _INITIALIZED
22 ;--------------------------------------------------------
23 ; absolute ram data
24 ;--------------------------------------------------------
25 .area _DABS (ABS)
26 .area _DABS (ABS)
27 ;--------------------------------------------------------
28 ; global & static initialisations
29 ;--------------------------------------------------------
30 .area _HOME
31 .area _GSINIT
32 .area _GSFINAL
33 .area _GSINIT
34 ;--------------------------------------------------------
35 ; Home
36 ;--------------------------------------------------------
37 .area _HOME
38 .area _HOME
39 ;--------------------------------------------------------
40 ; code
41 ;--------------------------------------------------------
42 .area _CODE
43 .area _CODE
00000000 44 _hdr:
00000000 00 45 .db 0x00
00000001 00 46 .db 0x00
00000002 00 47 .db 0x00
00000003 00 48 .db 0x00
00000004 00 49 .db 0x00
00000005 00 50 .db 0x00
00000006 00 51 .db 0x00
00000007 00 52 .db 0x00
00000008 00 53 .db 0x00
00000009 00 54 .db 0x00
0000000A 00 55 .db 0x00
0000000B 00 56 .db 0x00
0000000C 00 57 .db 0x00
0000000D 00 58 .db 0x00
0000000E 00 59 .db 0x00
0000000F 00 60 .db 0x00
00000010 57 61 .db #0x57 ; 87 'W'
00000011 69 62 .db #0x69 ; 105 'i'
00000012 6C 63 .db #0x6c ; 108 'l'
00000013 64 64 .db #0x64 ; 100 'd'
00000014 43 65 .db #0x43 ; 67 'C'
00000015 6F 66 .db #0x6f ; 111 'o'
00000016 6D 67 .db #0x6d ; 109 'm'
00000017 6D 68 .db #0x6d ; 109 'm'
00000018 61 69 .db #0x61 ; 97 'a'
00000019 6E 70 .db #0x6e ; 110 'n'
0000001A 64 71 .db #0x64 ; 100 'd'
0000001B 65 72 .db #0x65 ; 101 'e'
0000001C 72 73 .db #0x72 ; 114 'r'
0000001D 4D 74 .db #0x4d ; 77 'M'
0000001E 44 75 .db #0x44 ; 68 'D'
0000001F 4C 76 .db #0x4c ; 76 'L'
00000020 07 77 .db #0x07 ; 7
00000021 00 78 .db 0x00
00000022 01 79 .db #0x01 ; 1
00000023 00 80 .db #0x00 ; 0
00000024 00 81 .db #0x00 ; 0
00000025 1D 82 .db #0x1d ; 29
00000026 00 83 .db 0x00
00000027 00 84 .db 0x00
00000028 00 85 .db 0x00
00000029 00 86 .db 0x00
0000002A 00 87 .db 0x00
0000002B 00 88 .db 0x00
0000002C 00 89 .db 0x00
0000002D 00 90 .db 0x00
0000002E 00 91 .db 0x00
0000002F 00 92 .db 0x00
00000030 00 93 .db 0x00
00000031 00 94 .db 0x00
00000032 00 95 .db 0x00
00000033 00 96 .db 0x00
00000034 00 97 .db 0x00
00000035 00 98 .db 0x00
00000036 00 99 .db 0x00
00000037 00 100 .db 0x00
00000038 00 101 .db 0x00
00000039 00 102 .db 0x00
0000003A 00 103 .db 0x00
0000003B 00 104 .db 0x00
0000003C 00 105 .db 0x00
0000003D 00 106 .db 0x00
0000003E 00 107 .db 0x00
0000003F 00 108 .db 0x00
00000040 58 109 .db #0x58 ; 88 'X'
00000041 4D 110 .db #0x4d ; 77 'M'
00000042 20 111 .db #0x20 ; 32
00000043 58 112 .db #0x58 ; 88 'X'
00000044 4D 113 .db #0x4d ; 77 'M'
00000045 5A 114 .db #0x5a ; 90 'Z'
00000046 53 115 .db #0x53 ; 83 'S'
00000047 33 116 .db #0x33 ; 51 '3'
00000048 4D 117 .db #0x4d ; 77 'M'
00000049 00 118 .db 0x00
0000004A 00 119 .db 0x00
0000004B 00 120 .db 0x00
0000004C 00 121 .db 0x00
0000004D 00 122 .db 0x00
0000004E 00 123 .db 0x00
0000004F 00 124 .db 0x00
00000050 00 125 .db 0x00
00000051 00 126 .db 0x00
00000052 00 127 .db 0x00
00000053 00 128 .db 0x00
00000054 00 129 .db 0x00
00000055 00 130 .db 0x00
00000056 00 131 .db 0x00
00000057 00 132 .db 0x00
00000058 00 133 .db 0x00
00000059 00 134 .db 0x00
0000005A 00 135 .db 0x00
0000005B 00 136 .db 0x00
0000005C 00 137 .db 0x00
0000005D 00 138 .db 0x00
0000005E 00 139 .db 0x00
0000005F 00 140 .db 0x00
00000060 00 141 .db 0x00
00000061 00 142 .db 0x00
00000062 00 143 .db 0x00
00000063 00 144 .db 0x00
00000064 00 145 .db 0x00
00000065 00 146 .db 0x00
00000066 00 147 .db 0x00
00000067 00 148 .db 0x00
00000068 00 149 .db 0x00
00000069 00 150 .db 0x00
0000006A 00 151 .db 0x00
0000006B 00 152 .db 0x00
0000006C 00 153 .db 0x00
0000006D 00 154 .db 0x00
0000006E 00 155 .db 0x00
0000006F 00 156 .db 0x00
00000070 00 157 .db 0x00
00000071 00 158 .db 0x00
00000072 00 159 .db 0x00
00000073 00 160 .db 0x00
00000074 00 161 .db 0x00
00000075 00 162 .db 0x00
00000076 00 163 .db 0x00
00000077 00 164 .db 0x00
00000078 00 165 .db 0x00
00000079 00 166 .db 0x00
0000007A 00 167 .db 0x00
0000007B 00 168 .db 0x00
0000007C 00 169 .db 0x00
0000007D 00 170 .db 0x00
0000007E 00 171 .db 0x00
0000007F 00 172 .db 0x00
00000080 00 173 .db 0x00
00000081 00 174 .db 0x00
00000082 00 175 .db 0x00
00000083 00 176 .db 0x00
00000084 00 177 .db 0x00
00000085 00 178 .db 0x00
00000086 00 179 .db 0x00
00000087 00 180 .db 0x00
00000088 00 181 .db 0x00
00000089 00 182 .db 0x00
0000008A 00 183 .db 0x00
0000008B 00 184 .db 0x00
0000008C 00 185 .db 0x00
0000008D 00 186 .db 0x00
0000008E 00 187 .db 0x00
0000008F 00 188 .db 0x00
00000090 00 189 .db 0x00
00000091 00 190 .db 0x00
00000092 00 191 .db 0x00
00000093 00 192 .db 0x00
00000094 00 193 .db 0x00
00000095 00 194 .db 0x00
00000096 00 195 .db 0x00
00000097 00 196 .db 0x00
00000098 00 197 .db 0x00
00000099 00 198 .db 0x00
0000009A 00 199 .db 0x00
0000009B 00 200 .db 0x00
0000009C 00 201 .db 0x00
0000009D 00 202 .db 0x00
0000009E 00 203 .db 0x00
0000009F 00 204 .db 0x00
000000A0 00 205 .db 0x00
000000A1 FF FF FF FF 206 .byte #0xff, #0xff, #0xff, #0xff ; 4294967295
000000A5 58 4D 20 50 6C 61 79 207 .ascii "XM Player"
65 72
000000AE 00 208 .db 0x00
000000AF 00 209 .db 0x00
000000B0 00 210 .db 0x00
000000B1 00 211 .db 0x00
000000B2 00 212 .db 0x00
000000B3 00 213 .db 0x00
000000B4 00 214 .db 0x00
000000B5 00 215 .db 0x00
000000B6 00 216 .db 0x00
000000B7 00 217 .db 0x00
000000B8 00 218 .db 0x00
000000B9 00 219 .db 0x00
000000BA 00 220 .db 0x00
000000BB 00 221 .db 0x00
000000BC 00 222 .db 0x00
000000BD 00 223 .db 0x00
000000BE 00 224 .db 0x00
000000BF 00 225 .db 0x00
000000C0 00 226 .db 0x00
000000C1 00 227 .db 0x00
000000C2 00 228 .db 0x00
000000C3 00 229 .db 0x00
000000C4 00 230 .db 0x00
000000C5 03 231 .db #0x03 ; 3
000000C6 00 232 .db 0x00
000000C7 00 233 .db 0x00
000000C8 00 234 .db 0x00
000000C9 00 235 .db 0x00
000000CA 00 236 .db 0x00
000000CB 00 237 .db 0x00
000000CC 00 238 .db 0x00
000000CD 00 239 .db 0x00
000000CE 00 240 .db 0x00
000000CF 00 241 .db 0x00
000000D0 00 242 .db 0x00
000000D1 00 243 .db 0x00
000000D2 00 244 .db 0x00
000000D3 00 245 .db 0x00
000000D4 00 246 .db 0x00
000000D5 00 247 .db 0x00
000000D6 00 248 .db 0x00
000000D7 00 249 .db 0x00
000000D8 00 250 .db 0x00
000000D9 00 251 .db 0x00
000000DA 00 252 .db 0x00
000000DB 00 253 .db 0x00
000000DC 00 254 .db 0x00
000000DD 00 255 .db 0x00
000000DE 00 256 .db 0x00
000000DF 00 257 .db 0x00
000000E0 00 258 .db 0x00
000000E1 00 259 .db 0x00
000000E2 00 260 .db 0x00
000000E3 00 261 .db 0x00
000000E4 00 262 .db 0x00
000000E5 00 263 .db 0x00
000000E6 00 264 .db 0x00
000000E7 00 265 .db 0x00
000000E8 00 266 .db 0x00
000000E9 00 267 .db 0x00
000000EA 00 268 .db 0x00
000000EB 00 269 .db 0x00
000000EC 00 270 .db 0x00
000000ED 00 271 .db 0x00
000000EE 00 272 .db 0x00
000000EF 00 273 .db 0x00
000000F0 00 274 .db 0x00
000000F1 00 275 .db 0x00
000000F2 00 276 .db 0x00
000000F3 00 277 .db 0x00
000000F4 00 278 .db 0x00
000000F5 00 279 .db 0x00
000000F6 00 280 .db 0x00
000000F7 00 281 .db 0x00
000000F8 00 282 .db 0x00
000000F9 00 283 .db 0x00
000000FA 00 284 .db 0x00
000000FB 00 285 .db 0x00
000000FC 00 286 .db 0x00
000000FD 00 287 .db 0x00
000000FE 00 288 .db 0x00
000000FF 00 289 .db 0x00
00000100 00 290 .db 0x00
00000101 00 291 .db 0x00
00000102 00 292 .db 0x00
00000103 00 293 .db 0x00
00000104 00 294 .db 0x00
00000105 00 295 .db 0x00
00000106 00 296 .db 0x00
00000107 00 297 .db 0x00
00000108 00 298 .db 0x00
00000109 00 299 .db 0x00
0000010A 00 300 .db 0x00
0000010B 00 301 .db 0x00
0000010C 00 302 .db 0x00
0000010D 00 303 .db 0x00
0000010E 00 304 .db 0x00
0000010F 00 305 .db 0x00
00000110 00 306 .db 0x00
00000111 00 307 .db 0x00
00000112 00 308 .db 0x00
00000113 00 309 .db 0x00
00000114 00 310 .db 0x00
00000115 00 311 .db 0x00
00000116 00 312 .db 0x00
00000117 00 313 .db 0x00
00000118 00 314 .db 0x00
00000119 00 315 .db 0x00
0000011A 00 316 .db 0x00
0000011B 00 317 .db 0x00
0000011C 00 318 .db 0x00
0000011D 00 319 .db 0x00
0000011E 00 320 .db 0x00
0000011F 00 321 .db 0x00
00000120 00 322 .db 0x00
00000121 00 323 .db 0x00
00000122 00 324 .db 0x00
00000123 00 325 .db 0x00
00000124 00 326 .db 0x00
00000125 00 327 .db 0x00
00000126 00 328 .db 0x00
00000127 00 329 .db 0x00
00000128 00 330 .db 0x00
00000129 00 331 .db 0x00
0000012A 00 332 .db 0x00
0000012B 00 333 .db 0x00
0000012C 00 334 .db 0x00
0000012D 00 335 .db 0x00
0000012E 00 336 .db 0x00
0000012F 00 337 .db 0x00
00000130 00 338 .db 0x00
00000131 00 339 .db 0x00
00000132 00 340 .db 0x00
00000133 00 341 .db 0x00
00000134 00 342 .db 0x00
00000135 00 343 .db 0x00
00000136 00 344 .db 0x00
00000137 00 345 .db 0x00
00000138 00 346 .db 0x00
00000139 00 347 .db 0x00
0000013A 00 348 .db 0x00
0000013B 00 349 .db 0x00
0000013C 00 350 .db 0x00
0000013D 00 351 .db 0x00
0000013E 00 352 .db 0x00
0000013F 00 353 .db 0x00
00000140 00 354 .db 0x00
00000141 00 355 .db 0x00
00000142 00 356 .db 0x00
00000143 00 357 .db 0x00
00000144 00 358 .db 0x00
00000145 00 359 .db 0x00
00000146 00 360 .db 0x00
00000147 00 361 .db 0x00
00000148 00 362 .db 0x00
00000149 00 363 .db 0x00
0000014A 00 364 .db 0x00
0000014B 00 365 .db 0x00
0000014C 00 366 .db 0x00
0000014D 00 367 .db 0x00
0000014E 00 368 .db 0x00
0000014F 00 369 .db 0x00
00000150 00 370 .db 0x00
00000151 00 371 .db 0x00
00000152 00 372 .db 0x00
00000153 00 373 .db 0x00
00000154 00 374 .db 0x00
00000155 00 375 .db 0x00
00000156 00 376 .db 0x00
00000157 00 377 .db 0x00
00000158 00 378 .db 0x00
00000159 00 379 .db 0x00
0000015A 00 380 .db 0x00
0000015B 00 381 .db 0x00
0000015C 00 382 .db 0x00
0000015D 00 383 .db 0x00
0000015E 00 384 .db 0x00
0000015F 00 385 .db 0x00
00000160 00 386 .db 0x00
00000161 00 387 .db 0x00
00000162 00 388 .db 0x00
00000163 00 389 .db 0x00
00000164 00 390 .db 0x00
00000165 00 391 .db 0x00
00000166 00 392 .db 0x00
00000167 00 393 .db 0x00
00000168 00 394 .db 0x00
00000169 00 395 .db 0x00
0000016A 00 396 .db 0x00
0000016B 00 397 .db 0x00
0000016C 00 398 .db 0x00
0000016D 00 399 .db 0x00
0000016E 00 400 .db 0x00
0000016F 00 401 .db 0x00
00000170 00 402 .db 0x00
00000171 00 403 .db 0x00
00000172 00 404 .db 0x00
00000173 00 405 .db 0x00
00000174 00 406 .db 0x00
00000175 00 407 .db 0x00
00000176 00 408 .db 0x00
00000177 00 409 .db 0x00
00000178 00 410 .db 0x00
00000179 00 411 .db 0x00
0000017A 00 412 .db 0x00
0000017B 00 413 .db 0x00
0000017C 00 414 .db 0x00
0000017D 00 415 .db 0x00
0000017E 00 416 .db 0x00
0000017F 00 417 .db 0x00
00000180 00 418 .db 0x00
00000181 00 419 .db 0x00
00000182 00 420 .db 0x00
00000183 00 421 .db 0x00
00000184 00 422 .db 0x00
00000185 00 423 .db 0x00
00000186 00 424 .db 0x00
00000187 00 425 .db 0x00
00000188 00 426 .db 0x00
00000189 00 427 .db 0x00
0000018A 00 428 .db 0x00
0000018B 00 429 .db 0x00
0000018C 00 430 .db 0x00
0000018D 00 431 .db 0x00
0000018E 00 432 .db 0x00
0000018F 00 433 .db 0x00
00000190 00 434 .db 0x00
00000191 00 435 .db 0x00
00000192 00 436 .db 0x00
00000193 00 437 .db 0x00
00000194 00 438 .db 0x00
00000195 00 439 .db 0x00
00000196 00 440 .db 0x00
00000197 00 441 .db 0x00
00000198 00 442 .db 0x00
00000199 00 443 .db 0x00
0000019A 00 444 .db 0x00
0000019B 00 445 .db 0x00
0000019C 00 446 .db 0x00
0000019D 00 447 .db 0x00
0000019E 00 448 .db 0x00
0000019F 00 449 .db 0x00
000001A0 00 450 .db 0x00
000001A1 00 451 .db 0x00
000001A2 00 452 .db 0x00
000001A3 00 453 .db 0x00
000001A4 00 454 .db 0x00
000001A5 00 455 .db 0x00
000001A6 00 456 .db 0x00
000001A7 00 457 .db 0x00
000001A8 00 458 .db 0x00
000001A9 00 459 .db 0x00
000001AA 00 460 .db 0x00
000001AB 00 461 .db 0x00
000001AC 00 462 .db 0x00
000001AD 00 463 .db 0x00
000001AE 00 464 .db 0x00
000001AF 00 465 .db 0x00
000001B0 00 466 .db 0x00
000001B1 00 467 .db 0x00
000001B2 00 468 .db 0x00
000001B3 00 469 .db 0x00
000001B4 00 470 .db 0x00
000001B5 00 471 .db 0x00
000001B6 00 472 .db 0x00
000001B7 00 473 .db 0x00
000001B8 00 474 .db 0x00
000001B9 00 475 .db 0x00
000001BA 00 476 .db 0x00
000001BB 00 477 .db 0x00
000001BC 00 478 .db 0x00
000001BD 00 479 .db 0x00
000001BE 00 480 .db 0x00
000001BF 00 481 .db 0x00
000001C0 00 482 .db 0x00
000001C1 00 483 .db 0x00
000001C2 00 484 .db 0x00
000001C3 00 485 .db 0x00
000001C4 00 486 .db 0x00
000001C5 00 487 .db 0x00
000001C6 00 488 .db 0x00
000001C7 00 489 .db 0x00
000001C8 00 490 .db 0x00
000001C9 00 491 .db 0x00
000001CA 00 492 .db 0x00
000001CB 00 493 .db 0x00
000001CC 00 494 .db 0x00
000001CD 00 495 .db 0x00
000001CE 00 496 .db 0x00
000001CF 00 497 .db 0x00
000001D0 00 498 .db 0x00
000001D1 00 499 .db 0x00
000001D2 00 500 .db 0x00
000001D3 00 501 .db 0x00
000001D4 00 502 .db 0x00
000001D5 00 503 .db 0x00
000001D6 00 504 .db 0x00
000001D7 00 505 .db 0x00
000001D8 00 506 .db 0x00
000001D9 00 507 .db 0x00
000001DA 00 508 .db 0x00
000001DB 00 509 .db 0x00
000001DC 00 510 .db 0x00
000001DD 00 511 .db 0x00
000001DE 00 512 .db 0x00
000001DF 00 513 .db 0x00
000001E0 00 514 .db 0x00
000001E1 00 515 .db 0x00
000001E2 00 516 .db 0x00
000001E3 00 517 .db 0x00
000001E4 00 518 .db 0x00
000001E5 00 519 .db 0x00
000001E6 00 520 .db 0x00
000001E7 00 521 .db 0x00
000001E8 00 522 .db 0x00
000001E9 00 523 .db 0x00
000001EA 00 524 .db 0x00
000001EB 00 525 .db 0x00
000001EC 00 526 .db 0x00
000001ED 00 527 .db 0x00
000001EE 00 528 .db 0x00
000001EF 00 529 .db 0x00
000001F0 00 530 .db 0x00
000001F1 00 531 .db 0x00
000001F2 00 532 .db 0x00
000001F3 00 533 .db 0x00
000001F4 00 534 .db 0x00
000001F5 00 535 .db 0x00
000001F6 00 536 .db 0x00
000001F7 00 537 .db 0x00
000001F8 00 538 .db 0x00
000001F9 00 539 .db 0x00
000001FA 00 540 .db 0x00
000001FB 00 541 .db 0x00
000001FC 00 542 .db 0x00
000001FD 00 543 .db 0x00
000001FE 00 544 .db 0x00
000001FF 00 545 .db 0x00
546 .area _INITIALIZER
547 .area _CABS (ABS)
+52
View File
@@ -0,0 +1,52 @@
ASxxxx Linker V05.50.4-SDLD, page 1.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
. .ABS. 00000000 00000000 = 0. bytes (ABS,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
00000000 .__.ABS. wc_h
00000000 l__CABS
00000000 l__DABS
00000000 l__DATA
00000000 l__GSFINAL
00000000 l__GSINIT
00000000 l__HOME
00000000 l__INITIALIZED
00000000 l__INITIALIZER
00000000 s__CABS
00000000 s__DABS
00000200 l__CODE
00000200 s__CODE
00008000 s__DATA
00008000 s__GSFINAL
00008000 s__GSINIT
00008000 s__HOME
00008000 s__INITIALIZED
00008000 s__INITIALIZER
ASxxxx Linker V05.50.4-SDLD, page 2.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_CODE 00000200 00000200 = 512. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
ASxxxx Linker V05.50.4-SDLD, page 3.
Files Linked [ module(s) ]
obj/hdr.rel [ wc_h ]
ASxxxx Linker V05.50.4-SDLD, page 4.
User Base Address Definitions
_CODE = 0x0200
_DATA = 0x8000
+20
View File
@@ -0,0 +1,20 @@
DEF .__.ABS. 0x0
DEF l__CABS 0x0
DEF l__DABS 0x0
DEF l__DATA 0x0
DEF l__GSFINAL 0x0
DEF l__GSINIT 0x0
DEF l__HOME 0x0
DEF l__INITIALIZED 0x0
DEF l__INITIALIZER 0x0
DEF s__CABS 0x0
DEF s__DABS 0x0
DEF l__CODE 0x200
DEF s__CODE 0x200
DEF s__DATA 0x8000
DEF s__GSFINAL 0x8000
DEF s__GSINIT 0x8000
DEF s__HOME 0x8000
DEF s__INITIALIZED 0x8000
DEF s__INITIALIZER 0x8000
LOAD obj/hdr.ihx
+102
View File
@@ -0,0 +1,102 @@
XL4
H 9 areas 1 global symbols
M wc_h
O -mz80 sdcccall(1)
S .__.ABS. Def00000000
A _CODE size 200 flags 0 addr 0
A _DATA size 0 flags 0 addr 0
A _INITIALIZED size 0 flags 0 addr 0
A _DABS size 0 flags 8 addr 0
A _HOME size 0 flags 0 addr 0
A _GSINIT size 0 flags 0 addr 0
A _GSFINAL size 0 flags 0 addr 0
A _INITIALIZER size 0 flags 0 addr 0
A _CABS size 0 flags 8 addr 0
T 00 00 00 00
R 00 00 00 00
T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 0C 00 00 00 00 00 00 00 57 69 6C 64 43 6F 6D 6D
R 00 00 00 00
T 18 00 00 00 61 6E 64 65 72 4D 44 4C 07 00 01 00
R 00 00 00 00
T 24 00 00 00 00 1D 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 3C 00 00 00 00 00 00 00 58 4D 20 58 4D 5A 53 33
R 00 00 00 00
T 48 00 00 00 4D 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 9C 00 00 00 00 00 00 00 00 FF FF FF FF 58 4D 20
R 00 00 00 00
T A8 00 00 00 50 6C 61 79 65 72 00 00 00 00 00 00
R 00 00 00 00
T B4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T C0 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00
R 00 00 00 00
T CC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T D8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T E4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 2C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 38 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 44 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 50 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 5C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 68 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 74 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 80 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 8C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T 98 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T A4 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T B0 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T BC 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T C8 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T D4 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T E0 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T EC 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
T F8 01 00 00 00 00 00 00 00 00 00 00
R 00 00 00 00
+27
View File
@@ -0,0 +1,27 @@
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 1
Hexadecimal [32-Bits]
Symbol Table
.__.$$$. = 00002710 L
.__.ABS. = 00000000 G
.__.CPU. = 00000000 L
.__.H$L. = 00000000 L
0 _hdr 00000000 R
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 2
Hexadecimal [32-Bits]
Area Table
0 _CODE size 200 flags 0
1 _DATA size 0 flags 0
2 _INITIALIZED size 0 flags 0
3 _DABS size 0 flags 8
4 _HOME size 0 flags 0
5 _GSINIT size 0 flags 0
6 _GSFINAL size 0 flags 0
7 _INITIALIZER size 0 flags 0
8 _CABS size 0 flags 8
+1820
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+99
View File
@@ -0,0 +1,99 @@
:20800300ED7B01B8C94F3E13D3773E01D357AFD357DB5779D357AFD3573E03D377C94F3EB8
:2080230013D3773E02D35779D357DB57DB57DB574F3E03D37779C9DDE5DD210000DD39F556
:20804300F54F3E13D3773E02D35779D357DB57DB57DB574FDB575759DB57DD77FCAFDD77E5
:20806300FDDD77FEDD77FFDD7EFCDD77FEAFDD77FFDD77FCDD77FDDD6EFEDB57DD77FCAF95
:20808300DD77FDDD77FEDD77FFDD7EFCDD77FFAFDD77FCDD77FDDD77FEDD66FF3E03D377CE
:2080A300DDF9DDE1C94F3E13D3773E02D35779D357DB57DB57FD210200FD39FD4E00790DDE
:2080C300B72807DB571213C3C1803E03D377E133E9474D3E13D3773E01D35778D357DB5768
:2080E30079D3573E03D377C94F3E13D3773E01D35779D357DB57FD210200FD39FD7E00D3BA
:2081030057FD7E01D357FD7E02D357FD7E03D3573E03D377E1F1F1E93E13D3773E07D357CF
:20812300DB573E03D377C97D01AF1AED797C01AF1BED79FD210200FD39FD7E0001AF1CEDD2
:2081430079FD7E01FD4E02FD23CB39CB1F3D01AF26ED79FD7E023D01AF28ED793E13D377C0
:208163003E03D357DB57DB573E8201AF27ED793E27DBAF0738F93E03D377CD1B811160EABA
:20818300210000CDD881E1F1F133E93E13D3773E08D357DB573E03D377C9DDE5DD21000065
:2081A300DD394FDD5E04DD5605DD6E06DD66077BC6FF5F7ACEFF577DCEFF6F7CCEFF67B5EA
:2081C300B2B3280EE5C5D53E01CD2180D1C1E19120DDDDE1C97BC6FF5F7ACEFF577DCEFFC6
:2081E3006F7CCEFF67B5B2B3C8E5D53E01CD2180D1E1FE0228DFC9E5D53E03CDEB80FD2141
:208203000200FD39FD6E003E02CDD4803EE0CD088011204E210000CDD8813E0BCD21805F08
:208223001600E133E9AFCD0880CD8E81CD1B813E01C90100180A20052F00000000008F824F
:2082430099829A820100FFFF20052F00000000008F829982B0820100FFFF20052F000000E0
:2082630000008F829982D0828100190A280B4F0000000000EE82998203830100160A2405FC
:208283004F0000000000118399821A830E204572726F72212000000E0C014E6F20455350E7
:2082A300333220646574656374656421000E0C014F7574206F66206D656D6F727920286624
:2082C300696C6520746F6F2062696729000E0C01506C61796261636B206572726F722028A0
:2082E3006261642066696C653F29000E20584D2F584D5A2F53334D20506C6179657220007C
:208303000E0C01506C6179696E672E2E2E000E2041626F757420000E0C01584D20506C619B
:208323007965722076312E3000DDE5DD210000DD3921ECFF39F93EA2CD0880111027210013
:2083430000CDD8813EE4CD0880111027210000CDD8813A07B83D280A3A07B8D6022808C3C2
:208363006F833E08C371833E0CC371833E05F533ED5B03B82A05B8CDFA812131B8733E01B1
:20838300CD21803209B83A09B83D2804AFC33C85210C0039EB2103B8010400EDB0AFDD7710
:2083A300FCDD77FDDD77FEDD77FFDD7EFBDDB6FADDB6F9DDB6F8CAC984DD7EF9D610DD7E22
:2083C300FADE00DD7EFBDE00301121000039EB210C0039010400EDB0C3ED83DD36EC00DDF1
:2083E30036ED10AFDD77EEDD77EF21050039EB21000039010400EDB0DD7EF1C6FFDD7EF26F
:20840300CE01473E00CE005F3E00CE005748435ACB3BCB18CB19DD71F779F5332101A8CD46
:208423000D8A210000E5DD6EF1DD66F2E53E03CDEB80DD6EFEDD66FFE5DD6EFCDD66FDE5F1
:208443003E07CDEB803EE1CD0880210000E521D007E53E03CD9D81F1F1DD7EF7DD77F5DDBF
:2084630036F6003A0260DD77F7DD6EF52600E5210002E5DD7EF7F5332101A8CD2A81DD5E9C
:20848300F1DD56F2DD6EFCDD66FD19DD75FCDD74FDDD7EFEDD8EF3DD77FE3003DD34FFDD5E
:2084A3007EF8DD96F1DD77F8DD7EF9DD9EF2DD77F9DD7EFADD9EF3DD77FADD7EFBDD9EF4AF
:2084C300DD77FBC3AD833A07B83D203D3A31B86F3E0BCDD4802E053E02CDD4802A05B8E568
:2084E3002A03B8E53E03CDEB803EF2CD0880111027210000CDD8813E01CD21803209B83A48
:2085030009B83D2804AFC33C853EA0CD0880111027210000CDD8813E01CD21803209B83A5F
:2085230009B83D2804AFC33C853EA1CD0880111027210000CDD8813E01DDF9DDE1C976CD39
:20854300DB8AB728F9C94F790DB7C876C34A85217D82CD648ACD4185217D82CDC28AAFC39D
:208563000380213582CD648ACD4185213582CDC28AAFC30380214782CD648A3E32CD4985B9
:20858300214782CDC28A3E02C30380215982CD648A3E32CD4985215982CDC28A3E02C30372
:2085A30080ED4B0AB81E006B260009563E0C836F3EB8CE00677AB7280A7BD6203005721C32
:2085C300C3AA853600C93E45F533210500E5210101E511F385216B82CD7B8A210CB8CDCFFF
:2085E3008AD5210107E5110CB8216B82CD2E8AC946696C653A00DDE5DD210000DD39EB015E
:208603002586DD7E0407070707E60F6F2600097E1213DD7E04E60F6F2600097E12DDE1E1DA
:2086230033E93031323334353637383941424344454600DDE5DD210000DD39F54D44E1D567
:20864300C5116400DD6EFEDD66FFCDDE89EB110A00CD298AC17BC63002696023E5C5110AB3
:2086630000DD6EFEDD66FFCDDE89EB110A00CD298AC1E17BC630770303C5110A00DD6EFEF9
:20868300DD66FFCD298AC17BC63002DDF9DDE1C9DDE5DD210000DD39E5210000E52E3CE574
:2086A300DD5E04DD5605DD6E06DD6607CDC3B8F1F1010000C50E64C5CD3CB8F1F14BC521AA
:2086C3000000E52E3CE5DD5E04DD5605DD6E06DD6607CD3CB8F1F1C151D52E0A7ACDD989E6
:2086E3007B2E0ACD228A7BD1C630E1E577C1C503C5D52E0A7ACD228A7BD1C1C63002E1E5B3
:208703002323363AC1C5030303C5D52E0A7BCDD9897B2E0ACD228A7BD1C1C63002DD7EFE0B
:20872300C6044FDD7EFFCE0047C52E0A7BCD228A7BC1C63002DDF9DDE1E1F1F1E92109001F
:20874300E5210301E5119687216B82CD2E8A210700E521030CE511A087216B82CD2E8A2158
:208763000600E5210315E511A887216B82CD2E8A210500E5210501E511AF87216B82CD2EB3
:208783008A210300E521050CE511B587216B82CD2E8AC95061747465726E3A2300202052B6
:2087A3006F773A2300202042504D3A0054696D653A00202F2000DDE5DD210000DD3921F8F3
:2087C300FF39F93A31B86F3E0BCDD4803EA8CD088011D007210000CDD8813E2BCD2180DD4B
:2087E30077FA3E2CCD2180DD77FB3E02F53321010039EB3E31CDA8803E2DCD3A80DD73FC8E
:20880300DD72FDDD75FEDD74FF3A30B8FD212DB8FDB602FDB601FDB600200C3E36CD3A8001
:20882300ED532DB8222FB8DD7EFAF5332132B8CDF985210200E521030AE51132B8216B8210
:20884300CD2E8ADD7EFBF5332132B8CDF985210200E5210313E51132B8216B82CD2E8AD139
:20886300D52134B8CD3686210300E521031BE51134B8216B82CD2E8A210000E52144ACE5D1
:20888300DD5EFCDD56FDDD6EFEDD66FFCDC3B8F1E3D52137B8CD9386210500E5210507E5DF
:2088A3001137B8216B82CD2E8A210000E52144ACE5ED5B2DB82A2FB8CDC3B8F1E3D521379F
:2088C300B8CD9386210500E521050FE51137B8216B82CD2E8ADDF9DDE1C9CDA4853A00A80A
:2088E300B7200DCD2882B73E0120023E023200A83A00A83DC26585322DB8322EB8322FB8D5
:208903003230B8CD2C83B7200B3A09B8D699CA7885C38E85216B82CD648ACDC985CD40875D
:20892300CDB98776CD718AB728273EA2CD0880111027210000CDD8813EE4CD088011102760
:20894300210000CDD881216B82CDC28A3E02CD0380CDE58AB728273EA2CD08801110272136
:208963000000CDD8813EE4CD0880111027210000CDD881216B82CDC28A3E04CD0380CDDB67
:208983008AB7289F3EA2CD0880111027210000CDD8813EE4CD0880111027210000CDD88102
:2089A300216B82CDC28AAFCD0380C32689ED7301B83208B8ED430AB8083207B82203B8ED5C
:1689C3005305B83A08B8B7CADD883A08B8D603CA5285AFC3038045
:03800000C3B08981
:2089D9005D6F2600547BE680B220110610ED6A17933001833FED6A10F65FEBC906097D6C02
:2089F9002600CB1DED6AED523001193F1710F5CB10505FC9DDE5DD210000DD39DD46043E87
:208A190030CD0660DDE1E133E95D6FCDDB89EBC9CDDE89EBC9DDE5E5D5DD210000DD39DD19
:208A3900460BDD4E0ADD5608DD5E09DD6E00DD6601D9DD6E02DD6603E5DDE1D93E03CD068D
:188A590060D1E1DDE1E133333333E9DDE5E5DDE13E01CD0660DDE1C941
:20B83C00DDE5DD210000DD39010000DD7E07073838DDCB0426DDCB0516DDCB0616DDCB0734
:20B85C00167BDD96047ADD9E057DDD9E067CDD9E073012DDCB073EDDCB061EDDCB051EDD2B
:20B87C00CB041E1804044818C27BDD96047ADD9E057DDD9E067CDD9E0738147BDD96045FF8
:20B89C007ADD9E05577DDD9E066F7CDD9E0767DDCB073EDDCB061EDDCB051EDDCB041E79A2
:20B8BC000DB720C5DDE1C9DDE5DD210000DD39F5F5AFDD77FCDD77FDDD77FEDD77FF062061
:20B8DC007C07E6014FCB23CB12ED6ADDCBFC26DDCBFD16DDCBFE16DDCBFF16CB412804DD5E
:20B8FC00CBFCC6DD7EFCDD9604DD7EFDDD9E05DD7EFEDD9E06DD7EFFDD9E073826DD7EFC8E
:20B91C00DD9604DD77FCDD7EFDDD9E05DD77FDDD7EFEDD9E06DD77FEDD7EFFDD9E07DD77BF
:0AB93C00FFCBC3109BDDF9DDE1C96C
:208A7100DDE53E1ACD0660DDE1C9DDE5E5D5DD210000DD39DD460BDD4E0ADD5608DD5E099F
:208A9100DD6E00DD6601D9DD6E02DD6603DD7E0CF5E5DDE1D93E03CD0660F108D9E5DDE109
:208AB100D93E04CD0660D1E1DDE1E13333333333E9DDE5E5DDE13E02CD0660DDE1C9AF47C9
:1E8AD1004FEDB121FFFFED42EBC9DDE53E17CD0660DDE1C9DDE53E19CD0660DDE1C9F4
:00000001FF
+11
View File
@@ -0,0 +1,11 @@
-mjwx
-i obj/out.hex
-b _CODE = 0x8003
-b _DATA = 0xa800
-k E:\SDCC\4.6.0\bin\..\lib\z80
-l vgm_wc_api.lib
-l z80
obj/out.rel
obj/crt0.rel
-e
+1836
View File
File diff suppressed because it is too large Load Diff
+173
View File
@@ -0,0 +1,173 @@
ASxxxx Linker V05.50.4-SDLD, page 1.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
. .ABS. 00000000 00000000 = 0. bytes (ABS,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
00000000 .__.ABS. wc_key_pgup
00000000 l__BSEG
00000000 l__BSS
00000000 l__CABS
00000000 l__DABS
00000000 l__GSFINAL
00000000 l__GSINIT
00000000 l__HEADER
00000000 l__HEAP
00000000 l__INITIALIZED
00000000 l__INITIALIZER
00000000 s__CABS
00000000 s__DABS
00000000 s__HEADER
00000000 s__HEADER0
00000003 l__HEADER0
0000010A l__HOME
00000AEC l__CODE
0000103C l__DATA
00008003 s__CODE
0000A800 s__DATA
0000B83C s__HOME
0000B83C s__INITIALIZED
0000B946 s__BSEG
0000B946 s__BSS
0000B946 s__GSFINAL
0000B946 s__GSINIT
0000B946 s__HEAP
0000B946 s__INITIALIZER
ASxxxx Linker V05.50.4-SDLD, page 2.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_CODE 00008003 00000AEC = 2796. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
00008003 _wc_exit main
00008008 _esp_cmd main
00008021 _esp_rd_reg8 main
0000803A _esp_rd_reg32 main
000080A8 _esp_rd_regs main
000080D4 _esp_wr_reg8 main
000080EB _esp_wr_reg32 main
0000811B _esp_wr_end main
0000812A _esp_send_dma main
0000818E _esp_rd_end main
0000819D _esp_wait_status main
000081D8 _esp_wait_busy main
000081FA _esp_create_obj main
00008228 _esp_init main
00008235 _err_no_esp main
00008247 _err_out_of_mem main
00008259 _err_playback main
0000826B _win_xm main
0000827D _win_about main
0000832C _play_xm main
00008541 _wait_esc_key main
00008549 _wait_frames main
00008552 _about main
00008565 _error_esp main
00008578 _error_oom main
0000858E _error_playback main
000085A4 _copy_file_name main
000085C9 _xm_draw_static_labels main
000085F9 _put_hex2 main
00008636 _put_dec3 main
00008693 _put_time main
00008740 _xm_draw_stats_labels main
000087B9 _xm_update_info main
000088DD _main_start main
000089B0 _main main
000089D9 __divuchar divunsigned
000089DB __divu8 divunsigned
000089DE __divu16 divunsigned
000089DE __divuint divunsigned
00008A0D _wc_load512 wc_load512
00008A22 __moduchar modunsigned
00008A29 __moduint modunsigned
00008A2E _wc_prsrw wc_prsrw
00008A64 _wc_prwow wc_prwow
00008A71 _wc_key_pgdn wc_key_pgdn
00008A7B _wc_prsrw_attr wc_prsrw_attr
00008AC2 _wc_rresb wc_rresb
00008ACF _strlen strlen
00008ADB _wc_key_esc wc_key_esc
00008AE5 _wc_key_pgup wc_key_pgup
ASxxxx Linker V05.50.4-SDLD, page 3.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_DATA 0000A800 0000103C = 4156. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
0000A800 _state_esp main
0000A801 _fs_buf main
0000B801 _ret_sp main
0000B803 _filesize main
0000B807 _file_ext main
0000B808 _call_type main
0000B809 _last_esp_status main
0000B80A _p_file_name main
0000B80C _file_name main
0000B82D _total_samples main
0000B831 _xm_handle main
ASxxxx Linker V05.50.4-SDLD, page 4.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_HOME 0000B83C 0000010A = 266. bytes (REL,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
0000B83C __modulong _modulong
0000B8C3 __divulong _divulong
ASxxxx Linker V05.50.4-SDLD, page 5.
Hexadecimal [32-Bits]
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
_HEADER0 00000000 00000003 = 3. bytes (ABS,CON)
Value Global Global Defined In Module
----- -------------------------------- ------------------------
ASxxxx Linker V05.50.4-SDLD, page 6.
Files Linked [ module(s) ]
obj/out.rel [ main ]
obj/crt0.rel [ crt0 ]
Libraries Linked [ object file ]
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ divunsigned.rel ]
vgm_wc_api.lib [ wc_load512.rel ]
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ modunsigned.rel ]
vgm_wc_api.lib [ wc_prsrw.rel ]
vgm_wc_api.lib [ wc_prwow.rel ]
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ _modulong.rel ]
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ _divulong.rel ]
vgm_wc_api.lib [ wc_key_pgdn.rel ]
vgm_wc_api.lib [ wc_prsrw_attr.rel ]
vgm_wc_api.lib [ wc_rresb.rel ]
E:\SDCC\4.6.0\bin\..\lib\z80/z80.lib [ strlen.rel ]
vgm_wc_api.lib [ wc_key_esc.rel ]
vgm_wc_api.lib [ wc_key_pgup.rel ]
ASxxxx Linker V05.50.4-SDLD, page 7.
User Base Address Definitions
_CODE = 0x8003
_DATA = 0xa800
+93
View File
@@ -0,0 +1,93 @@
DEF .__.ABS. 0x0
DEF l__BSEG 0x0
DEF l__BSS 0x0
DEF l__CABS 0x0
DEF l__DABS 0x0
DEF l__GSFINAL 0x0
DEF l__GSINIT 0x0
DEF l__HEADER 0x0
DEF l__HEAP 0x0
DEF l__INITIALIZED 0x0
DEF l__INITIALIZER 0x0
DEF s__CABS 0x0
DEF s__DABS 0x0
DEF s__HEADER 0x0
DEF s__HEADER0 0x0
DEF l__HEADER0 0x3
DEF l__HOME 0x10A
DEF l__CODE 0xAEC
DEF l__DATA 0x103C
DEF s__CODE 0x8003
DEF s__DATA 0xA800
DEF s__HOME 0xB83C
DEF s__INITIALIZED 0xB83C
DEF s__BSEG 0xB946
DEF s__BSS 0xB946
DEF s__GSFINAL 0xB946
DEF s__GSINIT 0xB946
DEF s__HEAP 0xB946
DEF s__INITIALIZER 0xB946
DEF _wc_exit 0x8003
DEF _esp_cmd 0x8008
DEF _esp_rd_reg8 0x8021
DEF _esp_rd_reg32 0x803A
DEF _esp_rd_regs 0x80A8
DEF _esp_wr_reg8 0x80D4
DEF _esp_wr_reg32 0x80EB
DEF _esp_wr_end 0x811B
DEF _esp_send_dma 0x812A
DEF _esp_rd_end 0x818E
DEF _esp_wait_status 0x819D
DEF _esp_wait_busy 0x81D8
DEF _esp_create_obj 0x81FA
DEF _esp_init 0x8228
DEF _err_no_esp 0x8235
DEF _err_out_of_mem 0x8247
DEF _err_playback 0x8259
DEF _win_xm 0x826B
DEF _win_about 0x827D
DEF _play_xm 0x832C
DEF _wait_esc_key 0x8541
DEF _wait_frames 0x8549
DEF _about 0x8552
DEF _error_esp 0x8565
DEF _error_oom 0x8578
DEF _error_playback 0x858E
DEF _copy_file_name 0x85A4
DEF _xm_draw_static_labels 0x85C9
DEF _put_hex2 0x85F9
DEF _put_dec3 0x8636
DEF _put_time 0x8693
DEF _xm_draw_stats_labels 0x8740
DEF _xm_update_info 0x87B9
DEF _main_start 0x88DD
DEF _main 0x89B0
DEF __divuchar 0x89D9
DEF __divu8 0x89DB
DEF __divu16 0x89DE
DEF __divuint 0x89DE
DEF _wc_load512 0x8A0D
DEF __moduchar 0x8A22
DEF __moduint 0x8A29
DEF _wc_prsrw 0x8A2E
DEF _wc_prwow 0x8A64
DEF _wc_key_pgdn 0x8A71
DEF _wc_prsrw_attr 0x8A7B
DEF _wc_rresb 0x8AC2
DEF _strlen 0x8ACF
DEF _wc_key_esc 0x8ADB
DEF _wc_key_pgup 0x8AE5
DEF _state_esp 0xA800
DEF _fs_buf 0xA801
DEF _ret_sp 0xB801
DEF _filesize 0xB803
DEF _file_ext 0xB807
DEF _call_type 0xB808
DEF _last_esp_status 0xB809
DEF _p_file_name 0xB80A
DEF _file_name 0xB80C
DEF _total_samples 0xB82D
DEF _xm_handle 0xB831
DEF __modulong 0xB83C
DEF __divulong 0xB8C3
LOAD obj/out.ihx
+795
View File
@@ -0,0 +1,795 @@
XL4
H 9 areas 3E global symbols
M main
O -mz80 sdcccall(1)
S __divuint Ref00000000
S _wc_load512 Ref00000000
S __moduchar Ref00000000
S __divuchar Ref00000000
S _wc_prsrw Ref00000000
S _wc_prwow Ref00000000
S .__.ABS. Def00000000
S __modulong Ref00000000
S __divulong Ref00000000
S _wc_key_pgdn Ref00000000
S _wc_prsrw_attr Ref00000000
S _wc_rresb Ref00000000
S _strlen Ref00000000
S _wc_key_esc Ref00000000
S _wc_key_pgup Ref00000000
S __moduint Ref00000000
A _CODE size 9D6 flags 0 addr 0
S _esp_send_dma Def00000127
S _esp_wr_reg8 Def000000D1
S _main Def000009AD
S _esp_wr_end Def00000118
S _put_time Def00000690
S _xm_draw_static_labels Def000005C6
S _err_no_esp Def00000232
S _err_playback Def00000256
S _put_hex2 Def000005F6
S _main_start Def000008DA
S _wc_exit Def00000000
S _esp_create_obj Def000001F7
S _wait_esc_key Def0000053E
S _play_xm Def00000329
S _copy_file_name Def000005A1
S _esp_wait_busy Def000001D5
S _esp_rd_reg32 Def00000037
S _win_about Def0000027A
S _esp_rd_regs Def000000A5
S _error_playback Def0000058B
S _error_esp Def00000562
S _err_out_of_mem Def00000244
S _win_xm Def00000268
S _esp_rd_reg8 Def0000001E
S _esp_wr_reg32 Def000000E8
S _wait_frames Def00000546
S _xm_draw_stats_labels Def0000073D
S _xm_update_info Def000007B6
S _esp_rd_end Def0000018B
S _error_oom Def00000575
S _put_dec3 Def00000633
S _esp_cmd Def00000005
S _esp_init Def00000225
S _about Def0000054F
S _esp_wait_status Def0000019A
A _DATA size 103C flags 0 addr 0
S _p_file_name Def0000100A
S _xm_handle Def00001031
S _fs_buf Def00000001
S _total_samples Def0000102D
S _call_type Def00001008
S _state_esp Def00000000
S _ret_sp Def00001001
S _file_ext Def00001007
S _filesize Def00001003
S _last_esp_status Def00001009
S _file_name Def0000100C
A _INITIALIZED size 0 flags 0 addr 0
A _DABS size 0 flags 8 addr 0
A _HOME size 0 flags 0 addr 0
A _GSINIT size 0 flags 0 addr 0
A _GSFINAL size 0 flags 0 addr 0
A _INITIALIZER size 0 flags 0 addr 0
A _CABS size 0 flags 8 addr 0
T 00 00 00 00
R 00 00 01 00
T 00 00 00 00
R 00 00 01 00
T 01 00 00 00
R 00 00 01 00
T 01 00 00 00
R 00 00 01 00
T 01 10 00 00
R 00 00 01 00
T 01 10 00 00
R 00 00 01 00
T 03 10 00 00
R 00 00 01 00
T 03 10 00 00
R 00 00 01 00
T 07 10 00 00
R 00 00 01 00
T 07 10 00 00
R 00 00 01 00
T 08 10 00 00
R 00 00 01 00
T 08 10 00 00
R 00 00 01 00
T 09 10 00 00
R 00 00 01 00
T 09 10 00 00
R 00 00 01 00
T 0A 10 00 00
R 00 00 01 00
T 0A 10 00 00
R 00 00 01 00
T 0C 10 00 00
R 00 00 01 00
T 0C 10 00 00
R 00 00 01 00
T 2D 10 00 00
R 00 00 01 00
T 2D 10 00 00
R 00 00 01 00
T 31 10 00 00
R 00 00 01 00
T 31 10 00 00
R 00 00 01 00
T 32 10 00 00
R 00 00 01 00
T 32 10 00 00
R 00 00 01 00
T 34 10 00 00
R 00 00 01 00
T 34 10 00 00
R 00 00 01 00
T 37 10 00 00
R 00 00 01 00
T 37 10 00 00
R 00 00 01 00
T 00 00 00 00
R 00 00 00 00
T 00 00 00 00 ED 7B 01 10 C9
R 00 00 00 00 00 06 01 00
T 05 00 00 00
R 00 00 00 00
T 05 00 00 00 4F 3E 13 D3 77 3E 01 D3 57 AF D3 57
R 00 00 00 00
T 11 00 00 00 DB 57 79 D3 57 AF D3 57 3E 03 D3 77
R 00 00 00 00
T 1D 00 00 00 C9
R 00 00 00 00
T 1E 00 00 00
R 00 00 00 00
T 1E 00 00 00 4F 3E 13 D3 77 3E 02 D3 57 79 D3 57
R 00 00 00 00
T 2A 00 00 00 DB 57 DB 57 DB 57 4F 3E 03 D3 77 79
R 00 00 00 00
T 36 00 00 00 C9
R 00 00 00 00
T 37 00 00 00
R 00 00 00 00
T 37 00 00 00 DD E5 DD 21 00 00 DD 39 F5 F5 4F 3E
R 00 00 00 00
T 43 00 00 00 13 D3 77 3E 02 D3 57 79 D3 57 DB 57
R 00 00 00 00
T 4F 00 00 00 DB 57 DB 57 4F DB 57 57 59 DB 57 DD
R 00 00 00 00
T 5B 00 00 00 77 FC AF DD 77 FD DD 77 FE DD 77 FF
R 00 00 00 00
T 67 00 00 00 DD 7E FC DD 77 FE AF DD 77 FF DD 77
R 00 00 00 00
T 73 00 00 00 FC DD 77 FD DD 6E FE DB 57 DD 77 FC
R 00 00 00 00
T 7F 00 00 00 AF DD 77 FD DD 77 FE DD 77 FF DD 7E
R 00 00 00 00
T 8B 00 00 00 FC DD 77 FF AF DD 77 FC DD 77 FD DD
R 00 00 00 00
T 97 00 00 00 77 FE DD 66 FF 3E 03 D3 77 DD F9 DD
R 00 00 00 00
T A3 00 00 00 E1 C9
R 00 00 00 00
T A5 00 00 00
R 00 00 00 00
T A5 00 00 00 4F 3E 13 D3 77 3E 02 D3 57 79 D3 57
R 00 00 00 00
T B1 00 00 00 DB 57 DB 57 FD 21 02 00 FD 39 FD 4E
R 00 00 00 00
T BD 00 00 00 00
R 00 00 00 00
T BE 00 00 00
R 00 00 00 00
T BE 00 00 00 79 0D B7 28 07 DB 57 12 13 C3 BE 00
R 00 00 00 00 00 0E 00 00
T CA 00 00 00
R 00 00 00 00
T CA 00 00 00 3E 03 D3 77 E1 33 E9
R 00 00 00 00
T D1 00 00 00
R 00 00 00 00
T D1 00 00 00 47 4D 3E 13 D3 77 3E 01 D3 57 78 D3
R 00 00 00 00
T DD 00 00 00 57 DB 57 79 D3 57 3E 03 D3 77 C9
R 00 00 00 00
T E8 00 00 00
R 00 00 00 00
T E8 00 00 00 4F 3E 13 D3 77 3E 01 D3 57 79 D3 57
R 00 00 00 00
T F4 00 00 00 DB 57 FD 21 02 00 FD 39 FD 7E 00 D3
R 00 00 00 00
T 00 01 00 00 57 FD 7E 01 D3 57 FD 7E 02 D3 57 FD
R 00 00 00 00
T 0C 01 00 00 7E 03 D3 57 3E 03 D3 77 E1 F1 F1 E9
R 00 00 00 00
T 18 01 00 00
R 00 00 00 00
T 18 01 00 00 3E 13 D3 77 3E 07 D3 57 DB 57 3E 03
R 00 00 00 00
T 24 01 00 00 D3 77 C9
R 00 00 00 00
T 27 01 00 00
R 00 00 00 00
T 27 01 00 00 7D 01 AF 1A ED 79 7C 01 AF 1B ED 79
R 00 00 00 00
T 33 01 00 00 FD 21 02 00 FD 39 FD 7E 00 01 AF 1C
R 00 00 00 00
T 3F 01 00 00 ED 79 FD 7E 01 FD 4E 02 FD 23 CB 39
R 00 00 00 00
T 4B 01 00 00 CB 1F 3D 01 AF 26 ED 79 FD 7E 02 3D
R 00 00 00 00
T 57 01 00 00 01 AF 28 ED 79 3E 13 D3 77 3E 03 D3
R 00 00 00 00
T 63 01 00 00 57 DB 57 DB 57 3E 82 01 AF 27 ED 79
R 00 00 00 00
T 6F 01 00 00
R 00 00 00 00
T 6F 01 00 00 3E 27 DB AF 07 38 F9 3E 03 D3 77 CD
R 00 00 00 00
T 7B 01 00 00 18 01 11 60 EA 21 00 00 CD D5 01 E1
R 00 00 00 00 00 04 00 00 00 0D 00 00
T 87 01 00 00 F1 F1 33 E9
R 00 00 00 00
T 8B 01 00 00
R 00 00 00 00
T 8B 01 00 00 3E 13 D3 77 3E 08 D3 57 DB 57 3E 03
R 00 00 00 00
T 97 01 00 00 D3 77 C9
R 00 00 00 00
T 9A 01 00 00
R 00 00 00 00
T 9A 01 00 00 DD E5 DD 21 00 00 DD 39 4F DD 5E 04
R 00 00 00 00
T A6 01 00 00 DD 56 05 DD 6E 06 DD 66 07
R 00 00 00 00
T AF 01 00 00
R 00 00 00 00
T AF 01 00 00 7B C6 FF 5F 7A CE FF 57 7D CE FF 6F
R 00 00 00 00
T BB 01 00 00 7C CE FF 67 B5 B2 B3 28 0E E5 C5 D5
R 00 00 00 00
T C7 01 00 00 3E 01 CD 1E 00 D1 C1 E1 91 20 DD
R 00 00 00 00 00 07 00 00
T D2 01 00 00
R 00 00 00 00
T D2 01 00 00 DD E1 C9
R 00 00 00 00
T D5 01 00 00
R 00 00 00 00
T D5 01 00 00
R 00 00 00 00
T D5 01 00 00 7B C6 FF 5F 7A CE FF 57 7D CE FF 6F
R 00 00 00 00
T E1 01 00 00 7C CE FF 67 B5 B2 B3 C8 E5 D5 3E 01
R 00 00 00 00
T ED 01 00 00 CD 1E 00 D1 E1 FE 02 28 DF C9
R 00 00 00 00 00 05 00 00
T F7 01 00 00
R 00 00 00 00
T F7 01 00 00 E5 D5 3E 03 CD E8 00 FD 21 02 00 FD
R 00 00 00 00 00 09 00 00
T 03 02 00 00 39 FD 6E 00 3E 02 CD D1 00 3E E0 CD
R 00 00 00 00 00 0B 00 00
T 0F 02 00 00 05 00 11 20 4E 21 00 00 CD D5 01 3E
R 00 00 00 00 00 04 00 00 00 0D 00 00
T 1B 02 00 00 0B CD 1E 00 5F 16 00 E1 33 E9
R 00 00 00 00 00 06 00 00
T 25 02 00 00
R 00 00 00 00
T 25 02 00 00 AF CD 05 00 CD 8B 01 CD 18 01 3E 01
R 00 00 00 00 00 06 00 00 00 09 00 00 00 0C 00 00
T 31 02 00 00 C9
R 00 00 00 00
T 32 02 00 00
R 00 00 00 00
T 32 02 00 00 01 00 18 0A 20 05 2F 00 00 00 00 00
R 00 00 00 00
T 3E 02 00 00 8C 02 96 02 97 02
R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00
T 44 02 00 00
R 00 00 00 00
T 44 02 00 00 01 00 FF FF 20 05 2F 00 00 00 00 00
R 00 00 00 00
T 50 02 00 00 8C 02 96 02 AD 02
R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00
T 56 02 00 00
R 00 00 00 00
T 56 02 00 00 01 00 FF FF 20 05 2F 00 00 00 00 00
R 00 00 00 00
T 62 02 00 00 8C 02 96 02 CD 02
R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00
T 68 02 00 00
R 00 00 00 00
T 68 02 00 00 81 00 19 0A 28 0B 4F 00 00 00 00 00
R 00 00 00 00
T 74 02 00 00 EB 02 96 02 00 03
R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00
T 7A 02 00 00
R 00 00 00 00
T 7A 02 00 00 01 00 16 0A 24 05 4F 00 00 00 00 00
R 00 00 00 00
T 86 02 00 00 0E 03 96 02 17 03
R 00 00 00 00 00 04 00 00 00 06 00 00 00 08 00 00
T 8C 02 00 00
R 00 00 00 00
T 8C 02 00 00 0E 20 45 72 72 6F 72 21 20 00
R 00 00 00 00
T 96 02 00 00
R 00 00 00 00
T 96 02 00 00 00
R 00 00 00 00
T 97 02 00 00
R 00 00 00 00
T 97 02 00 00 0E 0C 01 4E 6F 20 45 53 50 33 32 20
R 00 00 00 00
T A3 02 00 00 64 65 74 65 63 74 65 64 21 00
R 00 00 00 00
T AD 02 00 00
R 00 00 00 00
T AD 02 00 00 0E 0C 01 4F 75 74 20 6F 66 20 6D 65
R 00 00 00 00
T B9 02 00 00 6D 6F 72 79 20 28 66 69 6C 65 20 74
R 00 00 00 00
T C5 02 00 00 6F 6F 20 62 69 67 29 00
R 00 00 00 00
T CD 02 00 00
R 00 00 00 00
T CD 02 00 00 0E 0C 01 50 6C 61 79 62 61 63 6B 20
R 00 00 00 00
T D9 02 00 00 65 72 72 6F 72 20 28 62 61 64 20 66
R 00 00 00 00
T E5 02 00 00 69 6C 65 3F 29 00
R 00 00 00 00
T EB 02 00 00
R 00 00 00 00
T EB 02 00 00 0E 20 58 4D 2F 58 4D 5A 2F 53 33 4D
R 00 00 00 00
T F7 02 00 00 20 50 6C 61 79 65 72 20 00
R 00 00 00 00
T 00 03 00 00
R 00 00 00 00
T 00 03 00 00 0E 0C 01 50 6C 61 79 69 6E 67 2E 2E
R 00 00 00 00
T 0C 03 00 00 2E 00
R 00 00 00 00
T 0E 03 00 00
R 00 00 00 00
T 0E 03 00 00 0E 20 41 62 6F 75 74 20 00
R 00 00 00 00
T 17 03 00 00
R 00 00 00 00
T 17 03 00 00 0E 0C 01 58 4D 20 50 6C 61 79 65 72
R 00 00 00 00
T 23 03 00 00 20 76 31 2E 30 00
R 00 00 00 00
T 29 03 00 00
R 00 00 00 00
T 29 03 00 00 DD E5 DD 21 00 00 DD 39 21 EC FF 39
R 00 00 00 00
T 35 03 00 00 F9 3E A2 CD 05 00 11 10 27 21 00 00
R 00 00 00 00 00 08 00 00
T 41 03 00 00 CD D5 01 3E E4 CD 05 00 11 10 27 21
R 00 00 00 00 00 05 00 00 00 0A 00 00
T 4D 03 00 00 00 00 CD D5 01 3A 07 10 3D 28 0A 3A
R 00 00 00 00 00 07 00 00 00 0A 01 00
T 59 03 00 00 07 10 D6 02 28 08 C3 6C 03
R 00 00 00 00 00 04 01 00 00 0B 00 00
T 62 03 00 00
R 00 00 00 00
T 62 03 00 00 3E 08 C3 6E 03
R 00 00 00 00 00 07 00 00
T 67 03 00 00
R 00 00 00 00
T 67 03 00 00 3E 0C C3 6E 03
R 00 00 00 00 00 07 00 00
T 6C 03 00 00
R 00 00 00 00
T 6C 03 00 00 3E 05
R 00 00 00 00
T 6E 03 00 00
R 00 00 00 00
T 6E 03 00 00 F5 33 ED 5B 03 10 2A 05 10 CD F7 01
R 00 00 00 00 00 08 01 00 00 0B 01 00 00 0E 00 00
T 7A 03 00 00 21 31 10 73 3E 01 CD 1E 00 32 09 10
R 00 00 00 00 00 05 01 00 00 0B 00 00 00 0E 01 00
T 86 03 00 00 3A 09 10 3D 28 04 AF C3 39 05
R 00 00 00 00 00 05 01 00 00 0C 00 00
T 90 03 00 00
R 00 00 00 00
T 90 03 00 00 21 0C 00 39 EB 21 03 10 01 04 00 ED
R 00 00 00 00 00 0A 01 00
T 9C 03 00 00 B0 AF DD 77 FC DD 77 FD DD 77 FE DD
R 00 00 00 00
T A8 03 00 00 77 FF
R 00 00 00 00
T AA 03 00 00
R 00 00 00 00
T AA 03 00 00 DD 7E FB DD B6 FA DD B6 F9 DD B6 F8
R 00 00 00 00
T B6 03 00 00 CA C6 04 DD 7E F9 D6 10 DD 7E FA DE
R 00 00 00 00 00 05 00 00
T C2 03 00 00 00 DD 7E FB DE 00 30 11 21 00 00 39
R 00 00 00 00
T CE 03 00 00 EB 21 0C 00 39 01 04 00 ED B0 C3
R 00 00 00 00
T D9 03 00 00 EA 03
R 00 00 00 00 00 04 00 00
T DB 03 00 00
R 00 00 00 00
T DB 03 00 00 DD 36 EC 00 DD 36 ED 10 AF DD 77 EE
R 00 00 00 00
T E7 03 00 00 DD 77 EF
R 00 00 00 00
T EA 03 00 00
R 00 00 00 00
T EA 03 00 00 21 05 00 39 EB 21 00 00 39 01 04 00
R 00 00 00 00
T F6 03 00 00 ED B0 DD 7E F1 C6 FF DD 7E F2 CE 01
R 00 00 00 00
T 02 04 00 00 47 3E 00 CE 00 5F 3E 00 CE 00 57 48
R 00 00 00 00
T 0E 04 00 00 43 5A CB 3B CB 18 CB 19 DD 71 F7 79
R 00 00 00 00
T 1A 04 00 00 F5 33 21 01 00 CD 00 00 21 00 00 E5
R 00 00 00 00 00 07 01 00 02 0A 01 00
T 26 04 00 00 DD 6E F1 DD 66 F2 E5 3E 03 CD E8 00
R 00 00 00 00 00 0E 00 00
T 32 04 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD 66
R 00 00 00 00
T 3E 04 00 00 FD E5 3E 07 CD E8 00 3E E1 CD 05 00
R 00 00 00 00 00 09 00 00 00 0E 00 00
T 4A 04 00 00 21 00 00 E5 21 D0 07 E5 3E 03 CD
R 00 00 00 00
T 55 04 00 00 9A 01 F1 F1 DD 7E F7 DD 77 F5 DD 36
R 00 00 00 00 00 04 00 00
T 61 04 00 00 F6 00 3A 02 60 DD 77 F7 DD 6E F5 26
R 00 00 00 00
T 6D 04 00 00 00 E5 21 00 02 E5 DD 7E F7 F5 33 21
R 00 00 00 00
T 79 04 00 00 01 00 CD 27 01 DD 5E F1 DD 56 F2 DD
R 00 00 00 00 00 04 01 00 00 07 00 00
T 85 04 00 00 6E FC DD 66 FD 19 DD 75 FC DD 74 FD
R 00 00 00 00
T 91 04 00 00 DD 7E FE DD 8E F3 DD 77 FE 30 03 DD
R 00 00 00 00
T 9D 04 00 00 34 FF
R 00 00 00 00
T 9F 04 00 00
R 00 00 00 00
T 9F 04 00 00 DD 7E F8 DD 96 F1 DD 77 F8 DD 7E F9
R 00 00 00 00
T AB 04 00 00 DD 9E F2 DD 77 F9 DD 7E FA DD 9E F3
R 00 00 00 00
T B7 04 00 00 DD 77 FA DD 7E FB DD 9E F4 DD 77 FB
R 00 00 00 00
T C3 04 00 00 C3 AA 03
R 00 00 00 00 00 05 00 00
T C6 04 00 00
R 00 00 00 00
T C6 04 00 00 3A 07 10 3D 20 3D 3A 31 10 6F 3E 0B
R 00 00 00 00 00 05 01 00 00 0B 01 00
T D2 04 00 00 CD D1 00 2E 05 3E 02 CD D1 00 2A
R 00 00 00 00 00 05 00 00 00 0C 00 00
T DD 04 00 00 05 10 E5 2A 03 10 E5 3E 03 CD E8 00
R 00 00 00 00 00 04 01 00 00 08 01 00 00 0E 00 00
T E9 04 00 00 3E F2 CD 05 00 11 10 27 21 00 00 CD
R 00 00 00 00 00 07 00 00
T F5 04 00 00 D5 01 3E 01 CD 1E 00 32 09 10 3A
R 00 00 00 00 00 04 00 00 00 09 00 00 00 0C 01 00
T 00 05 00 00 09 10 3D 28 04 AF C3 39 05
R 00 00 00 00 00 04 01 00 00 0B 00 00
T 09 05 00 00
R 00 00 00 00
T 09 05 00 00 3E A0 CD 05 00 11 10 27 21 00 00 CD
R 00 00 00 00 00 07 00 00
T 15 05 00 00 D5 01 3E 01 CD 1E 00 32 09 10 3A
R 00 00 00 00 00 04 00 00 00 09 00 00 00 0C 01 00
T 20 05 00 00 09 10 3D 28 04 AF C3 39 05
R 00 00 00 00 00 04 01 00 00 0B 00 00
T 29 05 00 00
R 00 00 00 00
T 29 05 00 00 3E A1 CD 05 00 11 10 27 21 00 00 CD
R 00 00 00 00 00 07 00 00
T 35 05 00 00 D5 01 3E 01
R 00 00 00 00 00 04 00 00
T 39 05 00 00
R 00 00 00 00
T 39 05 00 00 DD F9 DD E1 C9
R 00 00 00 00
T 3E 05 00 00
R 00 00 00 00
T 3E 05 00 00
R 00 00 00 00
T 3E 05 00 00 76 CD 00 00 B7 28 F9 C9
R 00 00 00 00 02 06 0D 00
T 46 05 00 00
R 00 00 00 00
T 46 05 00 00 4F
R 00 00 00 00
T 47 05 00 00
R 00 00 00 00
T 47 05 00 00 79 0D B7 C8 76 C3 47 05
R 00 00 00 00 00 0A 00 00
T 4F 05 00 00
R 00 00 00 00
T 4F 05 00 00 21 7A 02 CD 00 00 CD 3E 05 21
R 00 00 00 00 00 05 00 00 02 08 05 00 00 0B 00 00
T 59 05 00 00 7A 02 CD 00 00 AF C3 00 00
R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0B 00 00
T 62 05 00 00
R 00 00 00 00
T 62 05 00 00 21 32 02 CD 00 00 CD 3E 05 21
R 00 00 00 00 00 05 00 00 02 08 05 00 00 0B 00 00
T 6C 05 00 00 32 02 CD 00 00 AF C3 00 00
R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0B 00 00
T 75 05 00 00
R 00 00 00 00
T 75 05 00 00 21 44 02 CD 00 00 3E 32 CD 46 05 21
R 00 00 00 00 00 05 00 00 02 08 05 00 00 0D 00 00
T 81 05 00 00 44 02 CD 00 00 3E 02 C3 00 00
R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00
T 8B 05 00 00
R 00 00 00 00
T 8B 05 00 00 21 56 02 CD 00 00 3E 32 CD 46 05 21
R 00 00 00 00 00 05 00 00 02 08 05 00 00 0D 00 00
T 97 05 00 00 56 02 CD 00 00 3E 02 C3 00 00
R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00
T A1 05 00 00
R 00 00 00 00
T A1 05 00 00 ED 4B 0A 10 1E 00
R 00 00 00 00 00 06 01 00
T A7 05 00 00
R 00 00 00 00
T A7 05 00 00 6B 26 00 09 56 3E 0C 10 00 00 83 6F
R 00 00 00 00 09 0A 01 00
T B0 05 00 00 3E 0C 10 00 00 CE 00 67 7A B7 28 0A
R 00 00 00 00 89 05 01 00
T B9 05 00 00 7B D6 20 30 05 72 1C C3 A7 05
R 00 00 00 00 00 0C 00 00
T C3 05 00 00
R 00 00 00 00
T C3 05 00 00 36 00 C9
R 00 00 00 00
T C6 05 00 00
R 00 00 00 00
T C6 05 00 00 3E 45 F5 33 21 05 00 E5 21 01 01 E5
R 00 00 00 00
T D2 05 00 00 11 F0 05 21 68 02 CD 00 00 21
R 00 00 00 00 00 05 00 00 00 08 00 00 02 0B 0A 00
T DC 05 00 00 0C 10 CD 00 00 D5 21 01 07 E5 11
R 00 00 00 00 00 04 01 00 02 07 0C 00
T E7 05 00 00 0C 10 21 68 02 CD 00 00 C9
R 00 00 00 00 00 04 01 00 00 07 00 00 02 0A 04 00
T F0 05 00 00
R 00 00 00 00
T F0 05 00 00 46 69 6C 65 3A 00
R 00 00 00 00
T F6 05 00 00
R 00 00 00 00
T F6 05 00 00 DD E5 DD 21 00 00 DD 39 EB 01 22 06
R 00 00 00 00 00 0E 00 00
T 02 06 00 00 DD 7E 04 07 07 07 07 E6 0F 6F 26 00
R 00 00 00 00
T 0E 06 00 00 09 7E 12 13 DD 7E 04 E6 0F 6F 26 00
R 00 00 00 00
T 1A 06 00 00 09 7E 12 DD E1 E1 33 E9
R 00 00 00 00
T 22 06 00 00
R 00 00 00 00
T 22 06 00 00 30 31 32 33 34 35 36 37 38 39 41 42
R 00 00 00 00
T 2E 06 00 00 43 44 45 46 00
R 00 00 00 00
T 33 06 00 00
R 00 00 00 00
T 33 06 00 00 DD E5 DD 21 00 00 DD 39 F5 4D 44 E1
R 00 00 00 00
T 3F 06 00 00 D5 C5 11 64 00 DD 6E FE DD 66 FF CD
R 00 00 00 00
T 4B 06 00 00 00 00 EB 11 0A 00 CD 00 00 C1 7B C6
R 00 00 00 00 02 04 00 00 02 0B 0F 00
T 57 06 00 00 30 02 69 60 23 E5 C5 11 0A 00 DD 6E
R 00 00 00 00
T 63 06 00 00 FE DD 66 FF CD 00 00 EB 11 0A 00 CD
R 00 00 00 00 02 09 00 00
T 6F 06 00 00 00 00 C1 E1 7B C6 30 77 03 03 C5 11
R 00 00 00 00 02 04 0F 00
T 7B 06 00 00 0A 00 DD 6E FE DD 66 FF CD 00 00 C1
R 00 00 00 00 02 0D 0F 00
T 87 06 00 00 7B C6 30 02 DD F9 DD E1 C9
R 00 00 00 00
T 90 06 00 00
R 00 00 00 00
T 90 06 00 00 DD E5 DD 21 00 00 DD 39 E5 21 00 00
R 00 00 00 00
T 9C 06 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05 DD 6E
R 00 00 00 00
T A8 06 00 00 06 DD 66 07 CD 00 00 F1 F1 01 00 00
R 00 00 00 00 02 09 08 00
T B4 06 00 00 C5 0E 64 C5 CD 00 00 F1 F1 4B C5 21
R 00 00 00 00 02 09 07 00
T C0 06 00 00 00 00 E5 2E 3C E5 DD 5E 04 DD 56 05
R 00 00 00 00
T CC 06 00 00 DD 6E 06 DD 66 07 CD 00 00 F1 F1 C1
R 00 00 00 00 02 0B 07 00
T D8 06 00 00 51 D5 2E 0A 7A CD 00 00 7B 2E 0A CD
R 00 00 00 00 02 0A 03 00
T E4 06 00 00 00 00 7B D1 C6 30 E1 E5 77 C1 C5 03
R 00 00 00 00 02 04 02 00
T F0 06 00 00 C5 D5 2E 0A 7A CD 00 00 7B D1 C1 C6
R 00 00 00 00 02 0A 02 00
T FC 06 00 00 30 02 E1 E5 23 23 36 3A C1 C5 03 03
R 00 00 00 00
T 08 07 00 00 03 C5 D5 2E 0A 7B CD 00 00 7B 2E 0A
R 00 00 00 00 02 0B 03 00
T 14 07 00 00 CD 00 00 7B D1 C1 C6 30 02 DD 7E FE
R 00 00 00 00 02 05 02 00
T 20 07 00 00 C6 04 4F DD 7E FF CE 00 47 C5 2E 0A
R 00 00 00 00
T 2C 07 00 00 7B CD 00 00 7B C1 C6 30 02 DD F9 DD
R 00 00 00 00 02 06 02 00
T 38 07 00 00 E1 E1 F1 F1 E9
R 00 00 00 00
T 3D 07 00 00
R 00 00 00 00
T 3D 07 00 00 21 09 00 E5 21 03 01 E5 11 93 07 21
R 00 00 00 00 00 0D 00 00
T 49 07 00 00 68 02 CD 00 00 21 07 00 E5 21 03 0C
R 00 00 00 00 00 04 00 00 02 07 04 00
T 55 07 00 00 E5 11 9D 07 21 68 02 CD 00 00 21
R 00 00 00 00 00 06 00 00 00 09 00 00 02 0C 04 00
T 60 07 00 00 06 00 E5 21 03 15 E5 11 A5 07 21
R 00 00 00 00 00 0C 00 00
T 6B 07 00 00 68 02 CD 00 00 21 05 00 E5 21 05 01
R 00 00 00 00 00 04 00 00 02 07 04 00
T 77 07 00 00 E5 11 AC 07 21 68 02 CD 00 00 21
R 00 00 00 00 00 06 00 00 00 09 00 00 02 0C 04 00
T 82 07 00 00 03 00 E5 21 05 0C E5 11 B2 07 21
R 00 00 00 00 00 0C 00 00
T 8D 07 00 00 68 02 CD 00 00 C9
R 00 00 00 00 00 04 00 00 02 07 04 00
T 93 07 00 00
R 00 00 00 00
T 93 07 00 00 50 61 74 74 65 72 6E 3A 23 00
R 00 00 00 00
T 9D 07 00 00
R 00 00 00 00
T 9D 07 00 00 20 20 52 6F 77 3A 23 00
R 00 00 00 00
T A5 07 00 00
R 00 00 00 00
T A5 07 00 00 20 20 42 50 4D 3A 00
R 00 00 00 00
T AC 07 00 00
R 00 00 00 00
T AC 07 00 00 54 69 6D 65 3A 00
R 00 00 00 00
T B2 07 00 00
R 00 00 00 00
T B2 07 00 00 20 2F 20 00
R 00 00 00 00
T B6 07 00 00
R 00 00 00 00
T B6 07 00 00 DD E5 DD 21 00 00 DD 39 21 F8 FF 39
R 00 00 00 00
T C2 07 00 00 F9 3A 31 10 6F 3E 0B CD D1 00 3E A8
R 00 00 00 00 00 06 01 00 00 0C 00 00
T CE 07 00 00 CD 05 00 11 D0 07 21 00 00 CD D5 01
R 00 00 00 00 00 05 00 00 00 0E 00 00
T DA 07 00 00 3E 2B CD 1E 00 DD 77 FA 3E 2C CD
R 00 00 00 00 00 07 00 00
T E5 07 00 00 1E 00 DD 77 FB 3E 02 F5 33 21 01 00
R 00 00 00 00 00 04 00 00
T F1 07 00 00 39 EB 3E 31 CD A5 00 3E 2D CD 37 00
R 00 00 00 00 00 09 00 00 00 0E 00 00
T FD 07 00 00 DD 73 FC DD 72 FD DD 75 FE DD 74 FF
R 00 00 00 00
T 09 08 00 00 3A 30 10 FD 21 2D 10 FD B6 02 FD B6
R 00 00 00 00 00 05 01 00 00 09 01 00
T 15 08 00 00 01 FD B6 00 20 0C 3E 36 CD 37 00 ED
R 00 00 00 00 00 0D 00 00
T 21 08 00 00 53 2D 10 22 2F 10
R 00 00 00 00 00 05 01 00 00 08 01 00
T 27 08 00 00
R 00 00 00 00
T 27 08 00 00 DD 7E FA F5 33 21 32 10 CD F6 05 21
R 00 00 00 00 00 0A 01 00 00 0D 00 00
T 33 08 00 00 02 00 E5 21 03 0A E5 11 32 10 21
R 00 00 00 00 00 0C 01 00
T 3E 08 00 00 68 02 CD 00 00 DD 7E FB F5 33 21
R 00 00 00 00 00 04 00 00 02 07 04 00
T 49 08 00 00 32 10 CD F6 05 21 02 00 E5 21 03 13
R 00 00 00 00 00 04 01 00 00 07 00 00
T 55 08 00 00 E5 11 32 10 21 68 02 CD 00 00 D1 D5
R 00 00 00 00 00 06 01 00 00 09 00 00 02 0C 04 00
T 61 08 00 00 21 34 10 CD 33 06 21 03 00 E5 21
R 00 00 00 00 00 05 01 00 00 08 00 00
T 6C 08 00 00 03 1B E5 11 34 10 21 68 02 CD 00 00
R 00 00 00 00 00 08 01 00 00 0B 00 00 02 0E 04 00
T 78 08 00 00 21 00 00 E5 21 44 AC E5 DD 5E FC DD
R 00 00 00 00
T 84 08 00 00 56 FD DD 6E FE DD 66 FF CD 00 00 F1
R 00 00 00 00 02 0D 08 00
T 90 08 00 00 E3 D5 21 37 10 CD 90 06 21 05 00 E5
R 00 00 00 00 00 07 01 00 00 0A 00 00
T 9C 08 00 00 21 05 07 E5 11 37 10 21 68 02 CD
R 00 00 00 00 00 09 01 00 00 0C 00 00
T A7 08 00 00 00 00 21 00 00 E5 21 44 AC E5 ED 5B
R 00 00 00 00 02 04 04 00
T B3 08 00 00 2D 10 2A 2F 10 CD 00 00 F1 E3 D5 21
R 00 00 00 00 00 04 01 00 00 07 01 00 02 0A 08 00
T BF 08 00 00 37 10 CD 90 06 21 05 00 E5 21 05 0F
R 00 00 00 00 00 04 01 00 00 07 00 00
T CB 08 00 00 E5 11 37 10 21 68 02 CD 00 00 DD F9
R 00 00 00 00 00 06 01 00 00 09 00 00 02 0C 04 00
T D7 08 00 00 DD E1 C9
R 00 00 00 00
T DA 08 00 00
R 00 00 00 00
T DA 08 00 00 CD A1 05 3A 00 00 B7 20 0D CD 25 02
R 00 00 00 00 00 05 00 00 00 08 01 00 00 0E 00 00
T E6 08 00 00 B7 3E 01 20 02 3E 02
R 00 00 00 00
T ED 08 00 00
R 00 00 00 00
T ED 08 00 00 32 00 00
R 00 00 00 00 00 05 01 00
T F0 08 00 00
R 00 00 00 00
T F0 08 00 00 3A 00 00 3D C2 62 05 32 2D 10 32
R 00 00 00 00 00 05 01 00 00 09 00 00 00 0C 01 00
T FB 08 00 00 2E 10 32 2F 10 32 30 10 CD
R 00 00 00 00 00 04 01 00 00 07 01 00 00 0A 01 00
T 04 09 00 00 29 03 B7 20 0B 3A 09 10 D6 99 CA
R 00 00 00 00 00 04 00 00 00 0A 01 00
T 0F 09 00 00 75 05 C3 8B 05
R 00 00 00 00 00 04 00 00 00 07 00 00
T 14 09 00 00
R 00 00 00 00
T 14 09 00 00 21 68 02 CD 00 00 CD C6 05 CD
R 00 00 00 00 00 05 00 00 02 08 05 00 00 0B 00 00
T 1E 09 00 00 3D 07 CD B6 07
R 00 00 00 00 00 04 00 00 00 07 00 00
T 23 09 00 00
R 00 00 00 00
T 23 09 00 00 76 CD 00 00 B7 28 27 3E A2 CD 05 00
R 00 00 00 00 02 06 09 00 00 0E 00 00
T 2F 09 00 00 11 10 27 21 00 00 CD D5 01 3E E4 CD
R 00 00 00 00 00 0B 00 00
T 3B 09 00 00 05 00 11 10 27 21 00 00 CD D5 01 21
R 00 00 00 00 00 04 00 00 00 0D 00 00
T 47 09 00 00 68 02 CD 00 00 3E 02 CD 00 00
R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00
T 51 09 00 00
R 00 00 00 00
T 51 09 00 00 CD 00 00 B7 28 27 3E A2 CD 05 00 11
R 00 00 00 00 02 05 0E 00 00 0D 00 00
T 5D 09 00 00 10 27 21 00 00 CD D5 01 3E E4 CD
R 00 00 00 00 00 0A 00 00
T 68 09 00 00 05 00 11 10 27 21 00 00 CD D5 01 21
R 00 00 00 00 00 04 00 00 00 0D 00 00
T 74 09 00 00 68 02 CD 00 00 3E 04 CD 00 00
R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0C 00 00
T 7E 09 00 00
R 00 00 00 00
T 7E 09 00 00 CD 00 00 B7 28 9F 3E A2 CD 05 00 11
R 00 00 00 00 02 05 0D 00 00 0D 00 00
T 8A 09 00 00 10 27 21 00 00 CD D5 01 3E E4 CD
R 00 00 00 00 00 0A 00 00
T 95 09 00 00 05 00 11 10 27 21 00 00 CD D5 01 21
R 00 00 00 00 00 04 00 00 00 0D 00 00
T A1 09 00 00 68 02 CD 00 00 AF CD 00 00 C3
R 00 00 00 00 00 04 00 00 02 07 0B 00 00 0B 00 00
T AB 09 00 00 23 09
R 00 00 00 00 00 04 00 00
T AD 09 00 00
R 00 00 00 00
T AD 09 00 00 ED 73 01 10 32 08 10 ED 43 0A 10 08
R 00 00 00 00 00 06 01 00 00 09 01 00 00 0D 01 00
T B9 09 00 00 32 07 10 22 03 10 ED 53 05 10 3A
R 00 00 00 00 00 05 01 00 00 08 01 00 00 0C 01 00
T C4 09 00 00 08 10 B7 CA DA 08 3A 08 10 D6 03 CA
R 00 00 00 00 00 04 01 00 00 08 00 00 00 0B 01 00
T D0 09 00 00 4F 05 AF C3 00 00
R 00 00 00 00 00 04 00 00 00 08 00 00
+166
View File
@@ -0,0 +1,166 @@
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 1
Hexadecimal [32-Bits]
Symbol Table
.__.$$$. = 00002710 L
.__.ABS. = 00000000 G
.__.CPU. = 00000000 L
.__.H$L. = 00000000 L
_BORDER = 000000FE
_SPI_CTRL = 00000077
_SPI_DATA = 00000057
_TS_BORDER = 00000FAF
_TS_CACHECONF = 00002BAF
_TS_DMACTR = 000027AF
_TS_DMADADDRH = 00001EAF
_TS_DMADADDRL = 00001DAF
_TS_DMADADDRX = 00001FAF
_TS_DMALEN = 000026AF
_TS_DMANUM = 000028AF
_TS_DMANUMH = 00002CAF
_TS_DMASADDRH = 00001BAF
_TS_DMASADDRL = 00001AAF
_TS_DMASADDRX = 00001CAF
_TS_DMASTATUS = 000027AF
_TS_DMAWPA = 00002DAF
_TS_DMAWPD = 000025AF
_TS_FDDVIRT = 000029AF
_TS_FMADDR = 000015AF
_TS_GXOFFSH = 000003AF
_TS_GXOFFSL = 000002AF
_TS_GYOFFSH = 000005AF
_TS_GYOFFSL = 000004AF
_TS_HSINT = 000022AF
_TS_INTMASK = 00002AAF
_TS_MEMCONFIG = 000021AF
_TS_PAGE0 = 000010AF
_TS_PAGE1 = 000011AF
_TS_PAGE2 = 000012AF
_TS_PAGE3 = 000013AF
_TS_PALSEL = 000007AF
_TS_SGPAGE = 000019AF
_TS_STATUS = 000000AF
_TS_SYSCONFIG = 000020AF
_TS_T0GPAGE = 000017AF
_TS_T0XOFFSH = 000041AF
_TS_T0XOFFSL = 000040AF
_TS_T0YOFFSH = 000043AF
_TS_T0YOFFSL = 000042AF
_TS_T1GPAGE = 000018AF
_TS_T1XOFFSH = 000045AF
_TS_T1XOFFSL = 000044AF
_TS_T1YOFFSH = 000047AF
_TS_T1YOFFSL = 000046AF
_TS_TMPAGE = 000016AF
_TS_TSCONFIG = 000006AF
_TS_VCONFIG = 000000AF
_TS_VPAGE = 000001AF
_TS_VSINTH = 000024AF
_TS_VSINTL = 000023AF
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 2
Hexadecimal [32-Bits]
Symbol Table
0 ___str_11 00000793 R
0 ___str_12 0000079D R
0 ___str_13 000007A5 R
0 ___str_14 000007AC R
0 ___str_15 000007B2 R
0 ___str_9 000005F0 R
__divuchar ******** GX
__divuint ******** GX
__divulong ******** GX
__moduchar ******** GX
__moduint ******** GX
__modulong ******** GX
0 __str_0 0000028C R
0 __str_1 00000296 R
0 __str_2 00000297 R
0 __str_3 000002AD R
0 __str_4 000002CD R
0 __str_5 000002EB R
0 __str_6 00000300 R
0 __str_7 0000030E R
0 __str_8 00000317 R
0 _about 0000054F GR
1 _call_type 00001008 GR
0 _copy_file_name 000005A1 GR
1 _decbuf 00001034 R
0 _err_no_esp 00000232 GR
0 _err_out_of_mem 00000244 GR
0 _err_playback 00000256 GR
0 _error_esp 00000562 GR
0 _error_oom 00000575 GR
0 _error_playback 0000058B GR
0 _esp_cmd 00000005 GR
0 _esp_create_obj 000001F7 GR
0 _esp_init 00000225 GR
0 _esp_rd_end 0000018B GR
0 _esp_rd_reg32 00000037 GR
0 _esp_rd_reg8 0000001E GR
0 _esp_rd_regs 000000A5 GR
0 _esp_send_dma 00000127 GR
0 _esp_wait_busy 000001D5 GR
0 _esp_wait_status 0000019A GR
0 _esp_wr_end 00000118 GR
0 _esp_wr_reg32 000000E8 GR
0 _esp_wr_reg8 000000D1 GR
1 _file_ext 00001007 GR
1 _file_name 0000100C GR
1 _filesize 00001003 GR
1 _fs_buf 00000001 GR
1 _hexbuf 00001032 R
1 _last_esp_status 00001009 GR
0 _main 000009AD GR
0 _main_start 000008DA GR
1 _p_file_name 0000100A GR
0 _play_xm 00000329 GR
0 _put_dec3 00000633 GR
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 3
Hexadecimal [32-Bits]
Symbol Table
0 _put_hex2 000005F6 GR
0 _put_hex2_hexch_10000_105 00000622 R
0 _put_time 00000690 GR
1 _ret_sp 00001001 GR
1 _state_esp 00000000 GR
_strlen ******** GX
1 _timebuf 00001037 R
1 _total_samples 0000102D GR
0 _wait_esc_key 0000053E GR
0 _wait_frames 00000546 GR
0 _wc_exit 00000000 GR
_wc_key_esc ******** GX
_wc_key_pgdn ******** GX
_wc_key_pgup ******** GX
_wc_load512 ******** GX
_wc_prsrw ******** GX
_wc_prsrw_attr ******** GX
_wc_prwow ******** GX
_wc_rresb ******** GX
0 _win_about 0000027A GR
0 _win_xm 00000268 GR
0 _xm_draw_static_labels 000005C6 GR
0 _xm_draw_stats_labels 0000073D GR
1 _xm_handle 00001031 GR
0 _xm_update_info 000007B6 GR
ASxxxx Assembler V05.50.4+NoICE+SDCCmods-WIP-R14 (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80 / R800) Page 4
Hexadecimal [32-Bits]
Area Table
0 _CODE size 9D6 flags 0
1 _DATA size 103C flags 0
2 _INITIALIZED size 0 flags 0
3 _DABS size 0 flags 8
4 _HOME size 0 flags 0
5 _GSINIT size 0 flags 0
6 _GSFINAL size 0 flags 0
7 _INITIALIZER size 0 flags 0
8 _CABS size 0 flags 8
+24
View File
@@ -0,0 +1,24 @@
.module crt0
.globl _main
.area _HEADER (ABS)
.org 0x8000
jp _main
;; Ordering of segments for the linker.
.area _HOME
.area _CODE
.area _INITIALIZER
.area _GSINIT
.area _GSFINAL
.area _DATA
.area _INITIALIZED
.area _BSEG
.area _BSS
.area _HEAP
.area _GSINIT
.area _GSFINAL
+154
View File
@@ -0,0 +1,154 @@
// Local, trimmed copy of ../lib/esp32/esp32.c - only the functions xmplay
// actually calls (esp_cmdd/esp_cmdp1/esp_cmdp/esp_send/esp_recv/esp_recv_dma/
// esp_wait_not_status are unused here). Vendored per-project instead of
// shared, same reasoning as the SDCC-version-per-project split in build.bat:
// keeps xmplay's dependency surface to exactly what it uses. Bodies are
// unchanged from the shared original and cross-checked against
// esp32/doc/esp32-spi-wifi.md (WR_REGS=0x01/RD_REGS=0x02/RD_DATA=0x04 match
// the doc exactly; W_END=0x07/R_END=0x08 aren't in that doc at all, but they
// come from the same esp_spi_defs.h shared with the ESP32 firmware, which is
// the authoritative source - the doc is just an older, partial write-up).
#define SPI_ESP_CS_ON 0x13
#define SPI_ESP_CS_OFF 0x03
u32 esp_wait_busy(u32 timeout);
void esp_cmd(u8 cmd)
{
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_WR_REGS;
SPI_DATA = ESP_REG_COMMAND;
SPI_DATA; // dummy
SPI_DATA = cmd; // Command
SPI_DATA = ESP_ST_IDLE; // Reset status
SPI_CTRL = SPI_ESP_CS_OFF;
}
u8 esp_rd_reg8(u8 reg)
{
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_RD_REGS;
SPI_DATA = reg;
SPI_DATA; // dummy
SPI_DATA; // dummy
u8 rc = SPI_DATA;
SPI_CTRL = SPI_ESP_CS_OFF;
return rc;
}
u32 esp_rd_reg32(u8 reg)
{
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_RD_REGS;
SPI_DATA = reg;
SPI_DATA; // dummy
SPI_DATA; // dummy
u32 rc = SPI_DATA;
rc |= (u32)SPI_DATA << 8;
rc |= (u32)SPI_DATA << 16;
rc |= (u32)SPI_DATA << 24;
SPI_CTRL = SPI_ESP_CS_OFF;
return rc;
}
void esp_rd_regs(u8 reg, void *data, u8 size)
{
u8 *d = (u8*)data;
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_RD_REGS;
SPI_DATA = reg;
SPI_DATA; // dummy
SPI_DATA; // dummy
while (size--) *d++ = SPI_DATA;
SPI_CTRL = SPI_ESP_CS_OFF;
}
void esp_wr_reg8(u8 reg, u8 data)
{
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_WR_REGS;
SPI_DATA = reg;
SPI_DATA; // dummy
SPI_DATA = data;
SPI_CTRL = SPI_ESP_CS_OFF;
}
void esp_wr_reg32(u8 reg, u32 data)
{
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_WR_REGS;
SPI_DATA = reg;
SPI_DATA; // dummy
SPI_DATA = (u8)data;
SPI_DATA = (u8)(data >> 8);
SPI_DATA = (u8)(data >> 16);
SPI_DATA = (u8)(data >> 24);
SPI_CTRL = SPI_ESP_CS_OFF;
}
void esp_wr_end()
{
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_W_END;
SPI_DATA; // dummy
SPI_CTRL = SPI_ESP_CS_OFF;
}
void esp_send_dma(u16 a, u8 p, u16 l, u16 n)
{
TS_DMASADDRL = (u8)a;
TS_DMASADDRH = (u8)((u16)a >> 8);
TS_DMASADDRX = p;
TS_DMALEN = (u8)((l >> 1) - 1);
TS_DMANUM = (u8)(n - 1);
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_WR_DATA;
SPI_DATA; // dummy
SPI_DATA; // dummy
TS_DMACTR = TS_DMA_RAM_SPI;
while (TS_DMASTATUS & 0x80);
SPI_CTRL = SPI_ESP_CS_OFF;
esp_wr_end();
esp_wait_busy(60000);
}
void esp_rd_end()
{
SPI_CTRL = SPI_ESP_CS_ON;
SPI_DATA = ESP_SPI_CMD_R_END;
SPI_DATA; // dummy
SPI_CTRL = SPI_ESP_CS_OFF;
}
u32 esp_wait_status(u8 status, u32 timeout)
{
while (--timeout) if (esp_rd_reg8(ESP_REG_STATUS) == status) break;
return timeout;
}
u32 esp_wait_busy(u32 timeout)
{
while (--timeout) if (esp_rd_reg8(ESP_REG_STATUS) != ESP_ST_BUSY) break;
return timeout;
}
int esp_create_obj(u32 size, u8 type)
{
esp_wr_reg32(ESP_REG_DATA_SIZE, size);
esp_wr_reg8(ESP_REG_OBJ_TYPE, type);
esp_cmd(ESP_CMD_MAKE_OBJECT);
esp_wait_busy(20000);
// +++ check error
return esp_rd_reg8(ESP_REG_OBJ_HANDLE);
}
+500
View File
@@ -0,0 +1,500 @@
#include <stdio.h>
#include <string.h>
#include <defs.h>
#include <wc_api.h>
#include "tsconf.h"
#include <esp_spi_defs.h>
#include <wc_api.c>
#include <esp32.c>
// This used to be `const u8 state_esp = 0;`, written to via `*(u8*)&state_esp`
// as a code-size trick (skip GSINIT zero-init - a const's value is already
// known at compile time). That's undefined behavior (modifying a const
// object), and SDCC 4.6.0's more aggressive optimizer actually exploits it:
// it folds `state_esp != 1` to a compile-time-constant `true` (since the
// const's initializer is 0), permanently ignoring the "write" - which is
// exactly why esp32 detection always failed after the 4.0.0->4.6.0 bump.
// Plain (non-const) global; BSS zero-init already makes it start at 0.
u8 state_esp;
#define FS_BUF_SIZE 0x1000
u8 fs_buf[FS_BUF_SIZE]; // at 0xAE00 (_PAGE2 to get page)
u16 ret_sp;
u32 filesize;
u8 file_ext;
u8 call_type;
u8 last_esp_status; // set by play_xm() on failure, so the caller can pick a specific error message
// STEP 2 of the gradual reintroduction: filename capture, re-enabled.
u16 p_file_name; // pointer to the open file's name, valid only at entry (#4000-#7FFF window)
char file_name[33];
// STEP 3 of the gradual reintroduction: live stats.
u32 total_samples;
u8 xm_handle;
// --- Extensions ---------------------------
// file_ext is the matched entry's index into wc_h.c's ext[] table, so this
// enum must stay in the same order as that array (XM, XMZ, S3M).
enum
{
EXT_XM,
EXT_XMZ,
EXT_S3M,
};
// --- Windows ------------------------------
const WC_TX_WINDOW err_no_esp =
{
/* window with header and text */ WC_WIND_HDR_TXT,
/* cursor color mask */ 0,
/* X,Y (position) */ 24, 10,
/* W,H (size) */ 32, 5,
/* paper/ink (window color) */ 0x2F,
/* -reserved- */ 0,
/* window restore buffer address */ 0,
/* separators */ 0, 0,
/* header text */ "\x0E" " Error! ",
/* footer text */ "",
/* window text */ "\x0E\x0C\x01" "No ESP32 detected!",
};
const WC_TX_WINDOW err_out_of_mem =
{
/* window with header and text */ WC_WIND_HDR_TXT,
/* cursor color mask */ 0,
/* X,Y (position) */ 255, 255,
/* W,H (size) */ 32, 5,
/* paper/ink (window color) */ 0x2F,
/* -reserved- */ 0,
/* window restore buffer address */ 0,
/* separators */ 0, 0,
/* header text */ "\x0E" " Error! ",
/* footer text */ "",
/* window text */ "\x0E\x0C\x01" "Out of memory (file too big)",
};
const WC_TX_WINDOW err_playback =
{
/* window with header and text */ WC_WIND_HDR_TXT,
/* cursor color mask */ 0,
/* X,Y (position) */ 255, 255,
/* W,H (size) */ 32, 5,
/* paper/ink (window color) */ 0x2F,
/* -reserved- */ 0,
/* window restore buffer address */ 0,
/* separators */ 0, 0,
/* header text */ "\x0E" " Error! ",
/* footer text */ "",
/* window text */ "\x0E\x0C\x01" "Playback error (bad file?)",
};
// STEP 1 of the gradual reintroduction: bigger, fixed position (not
// auto-center) - no wc_prsrw() calls yet, still just static wnd_txt like
// before. This exact size/position was already confirmed stable on its own
// earlier (before wc_prsrw/live-info were layered on top).
const WC_TX_WINDOW win_xm =
{
/* window with header and text + shadow (0x80) */ WC_WIND_HDR_TXT | 0x80,
/* cursor color mask */ 0,
/* X,Y (position) */ 25, 10,
/* W,H (size) */ 40, 11,
/* paper/ink (window color) */ 0x4F,
/* -reserved- */ 0,
/* window restore buffer address */ 0,
/* separators */ 0, 0,
/* header text */ "\x0E" " XM/XMZ/S3M Player ",
/* footer text */ "",
/* window text */ "\x0E\x0C\x01" "Playing..."
};
const WC_TX_WINDOW win_about =
{
/* window with header and text */ WC_WIND_HDR_TXT,
/* cursor color mask */ 0,
/* X,Y (position) */ 22, 10,
/* W,H (size) */ 36, 5,
/* paper/ink (window color) */ 0x4F,
/* -reserved- */ 0,
/* window restore buffer address */ 0,
/* separators */ 0, 0,
/* header text */ "\x0E" " About ",
/* footer text */ "",
/* window text */ "\x0E\x0C\x01" "XM Player v1.0"
};
bool esp_init()
{
esp_cmd(ESP_CMD_NOP);
esp_rd_end();
esp_wr_end();
// +++ detect
return true;
}
// Returns false on ESP_ERR_OUT_OF_MEMORY (e.g. file too large for the esp32
// to allocate) so the caller can show an error instead of silently failing.
bool play_xm()
{
esp_cmd(ESP_CMD_TRACK_STOP);
esp_wait_busy(10000);
esp_cmd(ESP_CMD_KILL_OBJECTS);
esp_wait_busy(10000);
u8 obj_type;
switch (file_ext)
{
case EXT_XMZ: obj_type = OBJ_TYPE_ZIP; break;
case EXT_S3M: obj_type = OBJ_TYPE_S3M; break;
default: obj_type = OBJ_TYPE_XM; break;
}
xm_handle = esp_create_obj(filesize, obj_type);
last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
if (last_esp_status != ESP_ST_READY)
return false;
u32 sz = filesize;
u32 offs = 0;
while (sz)
{
u32 s = min(sz, FS_BUF_SIZE);
u8 sec = (s + 511) >> 9;
wc_load512((u16)fs_buf, sec);
esp_wr_reg32(ESP_REG_DATA_SIZE, s);
esp_wr_reg32(ESP_REG_DATA_OFFSET, offs);
esp_cmd(ESP_CMD_WRITE_OBJECT);
esp_wait_status(ESP_ST_DATA_M2S, 2000);
esp_send_dma((u16)fs_buf, *(u8*)_PAGE2, 512, sec);
offs += s;
sz -= s;
}
if (file_ext == EXT_XMZ)
{
// ESP_CMD_UNZIP's contract (esp_spi_defs.h) is
// i: ESP_REG_OBJ_HANDLE, ESP_REG_DATA_SIZE, ESP_REG_OBJ_TYPE - the handle
// must be (re)written explicitly, it's not implied by the last created object.
esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle);
esp_wr_reg8(ESP_REG_OBJ_TYPE, OBJ_TYPE_XM);
esp_wr_reg32(ESP_REG_DATA_SIZE, filesize);
esp_cmd(ESP_CMD_UNZIP);
esp_wait_busy(10000);
last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
if (last_esp_status != ESP_ST_READY)
return false;
}
esp_cmd(ESP_CMD_TRACK_INIT);
esp_wait_busy(10000);
last_esp_status = esp_rd_reg8(ESP_REG_STATUS);
if (last_esp_status != ESP_ST_READY)
return false;
esp_cmd(ESP_CMD_TRACK_PLAY);
esp_wait_busy(10000);
return true;
}
// --- Aux functions ------------------------
void wait_esc_key()
{
while (1)
{
__asm
halt
__endasm;
if (wc_key_esc())
break;
}
}
void wait_frames(u8 n)
{
while (n--)
{
__asm
halt
__endasm;
}
}
void about()
{
wc_prwow(&win_about);
wait_esc_key();
wc_rresb(&win_about);
wc_exit(WC_EXIT);
}
void error_esp()
{
wc_prwow(&err_no_esp);
wait_esc_key();
wc_rresb(&err_no_esp);
wc_exit(WC_EXIT);
}
void error_oom()
{
wc_prwow(&err_out_of_mem);
wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance
wc_rresb(&err_out_of_mem);
wc_exit(WC_NEXT_FILE);
}
void error_playback()
{
wc_prwow(&err_playback);
wait_frames(50); // show the error for ~1 second (50Hz), then auto-advance
wc_rresb(&err_playback);
wc_exit(WC_NEXT_FILE);
}
// STEP 2 of the gradual reintroduction: filename capture, re-enabled.
// Copies the filename out of WC's own buffer (valid only right at entry,
// in the #4000-#7FFF window per plugins/READ_ME.TXT) into our own memory,
// before any paging/esp32 activity might disturb that window.
// TESTED: disabling this alone did NOT fix the "wrong file loading" bug.
void copy_file_name()
{
u8 *src = (u8*)p_file_name;
u8 i = 0;
while (src[i] && i < sizeof(file_name) - 1)
{
file_name[i] = src[i];
i++;
}
file_name[i] = 0;
}
// Coloring (PRIAT) via demyanenko-d/VGMPLAY.WMF's wc_prsrw_attr() - our own
// three hand-rolled attempts all corrupted esp32 file loading; retesting
// with their library now that build.bat pins SDCC 4.6.0 + --sdcccall 1.
#define ROW_FILE 1
#define ATTR_CAPTION 0x45 // cyan ink - "File:" caption
void xm_draw_static_labels()
{
wc_prsrw_attr(&win_xm, "File:", ROW_FILE, 1, 5, ATTR_CAPTION);
wc_prsrw(&win_xm, file_name, ROW_FILE, 7, strlen(file_name));
}
// --- Live status display (STEP 3, no coloring - plain wc_prsrw only) -----
#define ROW_STATS 3
#define ROW_TIME 5
#define ROW_BAR 6
#define BAR_X 1
#define BAR_WIDTH 34
void put_hex2(char *dst, u8 val)
{
static const char hexch[] = "0123456789ABCDEF";
dst[0] = hexch[(val >> 4) & 0xF];
dst[1] = hexch[val & 0xF];
}
void put_dec3(char *dst, u16 val)
{
dst[0] = '0' + (val / 100) % 10;
dst[1] = '0' + (val / 10) % 10;
dst[2] = '0' + val % 10;
}
void put_time(char *dst, u32 sec)
{
u8 m = (sec / 60) % 100;
u8 s = sec % 60;
dst[0] = '0' + (m / 10) % 10;
dst[1] = '0' + m % 10;
dst[2] = ':';
dst[3] = '0' + (s / 10) % 10;
dst[4] = '0' + s % 10;
}
void xm_draw_stats_labels()
{
wc_prsrw(&win_xm, "Pattern:#", ROW_STATS, 1, 9);
wc_prsrw(&win_xm, " Row:#", ROW_STATS, 12, 7);
wc_prsrw(&win_xm, " BPM:", ROW_STATS, 21, 6);
wc_prsrw(&win_xm, "Time:", ROW_TIME, 1, 5);
wc_prsrw(&win_xm, " / ", ROW_TIME, 12, 3);
}
// wc_prsrw()'s text pointer MUST be in #8000-#BFFF (our own code/data
// window) - but this plugin runs on WC's OWN stack, which lives in a
// DIFFERENT window (#4000-#7FFF, per plugins/READ_ME.TXT: "стек... в Win 1
// #4000-#7FFF"). Local (stack-allocated) char buffers passed to wc_prsrw()
// are therefore in the WRONG memory window entirely - this is almost
// certainly why xm_draw_static_labels() (string literal + a global array,
// both correctly in #8000-#BFFF) worked, while xm_update_info()'s hexbuf/
// decbuf/timebuf (local variables, silently on WC's stack) corrupted the
// screen. Made static (i.e. real globals in our own DATA segment) to fix.
static char hexbuf[2];
static char decbuf[3];
static char timebuf[5];
void xm_update_info()
{
u8 pattern, row;
u16 bpm;
u32 samples;
esp_wr_reg8(ESP_REG_OBJ_HANDLE, xm_handle);
esp_cmd(ESP_CMD_TRACK_GET_INFO);
esp_wait_busy(2000);
pattern = esp_rd_reg8(ESP_REG_TRACK_PATTERN);
row = esp_rd_reg8(ESP_REG_TRACK_ROW);
esp_rd_regs(ESP_REG_TRACK_BPM, &bpm, 2);
samples = esp_rd_reg32(ESP_REG_TRACK_SAMPLES);
if (!total_samples)
total_samples = esp_rd_reg32(ESP_REG_TRACK_TOTAL_SAMPLES);
put_hex2(hexbuf, pattern);
wc_prsrw(&win_xm, hexbuf, ROW_STATS, 10, 2);
put_hex2(hexbuf, row);
wc_prsrw(&win_xm, hexbuf, ROW_STATS, 19, 2);
put_dec3(decbuf, bpm);
wc_prsrw(&win_xm, decbuf, ROW_STATS, 27, 3);
put_time(timebuf, samples / 44100UL);
wc_prsrw(&win_xm, timebuf, ROW_TIME, 7, 5);
put_time(timebuf, total_samples / 44100UL);
wc_prsrw(&win_xm, timebuf, ROW_TIME, 15, 5);
// Progress bar skipped for now per user request - reintroduce as its own
// separate step once Pattern/Row/BPM/Time are confirmed stable.
}
void main_start()
{
u8 frame_ctr;
copy_file_name();
if (!state_esp)
state_esp = esp_init() ? 1 : 2;
if (state_esp != 1)
{
error_esp();
return;
}
total_samples = 0;
if (!play_xm())
{
if (last_esp_status == ESP_ERR_OUT_OF_MEMORY)
error_oom();
else
error_playback();
return;
}
// Draw the status window only AFTER play_xm() has already finished the
// file transfer and issued TRACK_INIT/TRACK_PLAY - drawing a window
// beforehand previously corrupted the esp32 transfer (see project memory).
wc_prwow(&win_xm);
xm_draw_static_labels();
xm_draw_stats_labels();
xm_update_info(); // single call for now - periodic re-calling is a separate step, once this is confirmed stable
frame_ctr = 0;
// poll keys
while (1)
{
__asm
halt
__endasm;
// DEBUG: periodic xm_update_info() disabled - isolating whether repeated
// wc_prsrw() calls over time (not just one initial call) is what causes
// the screen to fill with garbage after a while.
// if (++frame_ctr >= 10) // ~5 updates/sec at 50Hz
// {
// frame_ctr = 0;
// xm_update_info();
// }
if (wc_key_pgdn()) // PgDn - unload and go to next file
{
esp_cmd(ESP_CMD_TRACK_STOP);
esp_wait_busy(10000);
esp_cmd(ESP_CMD_KILL_OBJECTS);
esp_wait_busy(10000);
wc_rresb(&win_xm);
wc_exit(WC_NEXT_FILE);
}
if (wc_key_pgup()) // PgUp - unload and go to previous file
{
esp_cmd(ESP_CMD_TRACK_STOP);
esp_wait_busy(10000);
esp_cmd(ESP_CMD_KILL_OBJECTS);
esp_wait_busy(10000);
wc_rresb(&win_xm);
wc_exit(WC_PREV_FILE);
}
if (wc_key_esc()) // Esc - unload and exit
{
esp_cmd(ESP_CMD_TRACK_STOP);
esp_wait_busy(10000);
esp_cmd(ESP_CMD_KILL_OBJECTS);
esp_wait_busy(10000);
wc_rresb(&win_xm);
wc_exit(WC_EXIT);
}
}
}
// ------------------------------------------
void main()
{
__asm
ld (_ret_sp), sp
ld (_call_type), a
ld (_p_file_name), bc
ex af, af
ld (_file_ext), a
ld (_filesize), hl
ld (_filesize + 2), de
__endasm;
switch (call_type)
{
case WC_CALL_EXT:
main_start();
break;
case WC_CALL_MENU:
about();
break;
default:
wc_exit(WC_EXIT);
}
}
+195
View File
@@ -0,0 +1,195 @@
#pragma once
__sfr __at 0x57 SPI_DATA;
__sfr __at 0x77 SPI_CTRL;
__sfr __at 0xFE BORDER;
__sfr __banked __at 0x00AF TS_VCONFIG;
__sfr __banked __at 0x00AF TS_STATUS;
__sfr __banked __at 0x01AF TS_VPAGE;
__sfr __banked __at 0x02AF TS_GXOFFSL;
__sfr __banked __at 0x03AF TS_GXOFFSH;
__sfr __banked __at 0x04AF TS_GYOFFSL;
__sfr __banked __at 0x05AF TS_GYOFFSH;
__sfr __banked __at 0x06AF TS_TSCONFIG;
__sfr __banked __at 0x07AF TS_PALSEL;
__sfr __banked __at 0x0FAF TS_BORDER;
__sfr __banked __at 0x10AF TS_PAGE0;
__sfr __banked __at 0x11AF TS_PAGE1;
__sfr __banked __at 0x12AF TS_PAGE2;
__sfr __banked __at 0x13AF TS_PAGE3;
__sfr __banked __at 0x15AF TS_FMADDR;
__sfr __banked __at 0x16AF TS_TMPAGE;
__sfr __banked __at 0x17AF TS_T0GPAGE;
__sfr __banked __at 0x18AF TS_T1GPAGE;
__sfr __banked __at 0x19AF TS_SGPAGE;
__sfr __banked __at 0x1AAF TS_DMASADDRL;
__sfr __banked __at 0x1BAF TS_DMASADDRH;
__sfr __banked __at 0x1CAF TS_DMASADDRX;
__sfr __banked __at 0x1DAF TS_DMADADDRL;
__sfr __banked __at 0x1EAF TS_DMADADDRH;
__sfr __banked __at 0x1FAF TS_DMADADDRX;
__sfr __banked __at 0x20AF TS_SYSCONFIG;
__sfr __banked __at 0x21AF TS_MEMCONFIG;
__sfr __banked __at 0x22AF TS_HSINT;
__sfr __banked __at 0x23AF TS_VSINTL;
__sfr __banked __at 0x24AF TS_VSINTH;
__sfr __banked __at 0x25AF TS_DMAWPD;
__sfr __banked __at 0x26AF TS_DMALEN;
__sfr __banked __at 0x27AF TS_DMACTR;
__sfr __banked __at 0x27AF TS_DMASTATUS;
__sfr __banked __at 0x28AF TS_DMANUM;
__sfr __banked __at 0x29AF TS_FDDVIRT;
__sfr __banked __at 0x2AAF TS_INTMASK;
__sfr __banked __at 0x2BAF TS_CACHECONF;
__sfr __banked __at 0x2CAF TS_DMANUMH;
__sfr __banked __at 0x2DAF TS_DMAWPA;
__sfr __banked __at 0x40AF TS_T0XOFFSL;
__sfr __banked __at 0x41AF TS_T0XOFFSH;
__sfr __banked __at 0x42AF TS_T0YOFFSL;
__sfr __banked __at 0x43AF TS_T0YOFFSH;
__sfr __banked __at 0x44AF TS_T1XOFFSL;
__sfr __banked __at 0x45AF TS_T1XOFFSH;
__sfr __banked __at 0x46AF TS_T1YOFFSL;
__sfr __banked __at 0x47AF TS_T1YOFFSH;
// TS parameters
#define TS_FM_EN 0x10
// FPGA arrays
#define TS_FM_CRAM 0x0000
#define TS_FM_SFILE 0x0200
// VIDEO
#define TS_VID_256X192 0x00
#define TS_VID_320X200 0x40
#define TS_VID_320X240 0x80
#define TS_VID_360X288 0xC0
#define TS_VID_RASTER_BS 6
#define TS_VID_ZX 0x00
#define TS_VID_16C 0x01
#define TS_VID_256C 0x02
#define TS_VID_TEXT 0x03
#define TS_VID_FT812 0x04
#define TS_VID_NOGFX 0x20
#define TS_VID_MODE_BS 0
// PALSEL
#define TS_PAL_GPAL_MASK 0x0F
#define TS_PAL_GPAL_BS 0
#define TS_PAL_T0PAL_MASK 0x30
#define TS_PAL_T0PAL_BS 4
#define TS_PAL_T1PAL_MASK 0xC0
#define TS_PAL_T1PAL_BS 6
// TSU
#define TS_TSU_T0ZEN 0x04
#define TS_TSU_T1ZEN 0x08
#define TS_TSU_T0EN 0x20
#define TS_TSU_T1EN 0x40
#define TS_TSU_SEN 0x80
// SYSTEM
#define TS_SYS_ZCLK3_5 0x00
#define TS_SYS_ZCLK7 0x01
#define TS_SYS_ZCLK14 0x02
#define TS_SYS_ZCLK_BS 0
#define TS_SYS_CACHEEN 0x04
// MEMORY
#define TS_MEM_ROM128 0x01
#define TS_MEM_W0WE 0x02
#define TS_MEM_W0MAP_N 0x04
#define TS_MEM_W0RAM 0x08
#define TS_MEM_LCK512 0x00
#define TS_MEM_LCK128 0x40
#define TS_MEM_LCKAUTO 0x80
#define TS_MEM_LCK1024 0xC0
#define TS_MEM_LCK_BS 6
// INT
#define TS_INT_VEC_FRAME 0xFF
#define TS_INT_VEC_LINE 0xFD
#define TS_INT_VEC_DMA 0xFB
#define TS_INT_VEC_WTP 0xF9
#define TS_INT_MSK_FRAME 0x01
#define TS_INT_MSK_LINE 0x02
#define TS_INT_MSK_DMA 0x04
#define TS_INT_MSK_WTP 0x08
// DMA
#define TS_DMA_WNR 0x80
#define TS_DMA_SALGN 0x20
#define TS_DMA_DALGN 0x10
#define TS_DMA_ASZ 0x08
#define TS_DMA_RAM 0x01
#define TS_DMA_BLT 0x81
#define TS_DMA_FILL 0x04
#define TS_DMA_SPI_RAM 0x02
#define TS_DMA_WTP_RAM 0x07
#define TS_DMA_RAM_SPI 0x82
#define TS_DMA_IDE_RAM 0x03
#define TS_DMA_RAM_IDE 0x83
#define TS_DMA_RAM_CRAM 0x84
#define TS_DMA_RAM_SFILE 0x85
#define TS_WPD_GLU 0
#define TS_WPD_COM 1
// SPRITES
#define TS_SP_XF 0x80
#define TS_SP_YF 0x80
#define TS_SP_LEAP 0x40
#define TS_SP_ACT 0x20
#define TS_SP_SIZE8 0x00
#define TS_SP_SIZE16 0x02
#define TS_SP_SIZE24 0x04
#define TS_SP_SIZE32 0x06
#define TS_SP_SIZE40 0x08
#define TS_SP_SIZE48 0x0A
#define TS_SP_SIZE56 0x0C
#define TS_SP_SIZE64 0x0E
#define TS_SP_SIZE_BS 1
#define TS_SP_PAL_MASK 0xF0
#define TS_SP_XF_W 0x8000
#define TS_SP_YF_W 0x8000
#define TS_SP_LEAP_W 0x4000
#define TS_SP_ACT_W 0x2000
#define TS_SP_SIZE8_W 0x0000
#define TS_SP_SIZE16_W 0x0200
#define TS_SP_SIZE24_W 0x0400
#define TS_SP_SIZE32_W 0x0600
#define TS_SP_SIZE40_W 0x0800
#define TS_SP_SIZE48_W 0x0A00
#define TS_SP_SIZE56_W 0x0C00
#define TS_SP_SIZE64_W 0x0E00
#define TS_SP_SIZE_BS_W 9
#define TS_SP_X_MASK_W 0x01FF
#define TS_SP_Y_MASK_W 0x01FF
#define TS_SP_TNUM_MASK_W 0x0FFF
#define TS_SP_PAL_MASK_W 0xF000
// TILES
#define TS_TL_XF 0x40
#define TS_TL_YF 0x80
#define TS_TL_PAL_MASK 0x30
#define TS_TL_PAL_BS 4
#define TS_TL_XF_W 0x4000
#define TS_TL_YF_W 0x8000
#define TS_TL_TNUM_MASK_W 0x0FFF
#define TS_TL_PAL_MASK_W 0x3000
#define TS_TL_PAL_BS_W 12
+41
View File
@@ -0,0 +1,41 @@
// This project now builds under SDCC 4.6.0 + `--sdcccall 1` (SDCC's
// register calling convention) - see build.bat for why this is pinned
// PER-PROJECT, independent of the rest of ft812sdk (which stays on 4.0.0).
// This lets us link directly against demyanenko-d/VGMPLAY.WMF's real,
// hardware-tested wc_api library (vgm_wc_api.lib, assembled verbatim from
// their src_sdcc/lib/wc_api/*.s with the SAME SDCC 4.6.0's sdasz80) instead
// of our own hand-rolled __naked wrappers - our attempts at PRSRW+PRIAT (in
// three different shapes: globals-based single function, two separate
// naked functions, and a stack-based hand-port of their EXX logic) all
// corrupted esp32 file loading in ways never fully root-caused.
//
// Their key-check constants (wc_key_esc=0x17, wc_key_pgup=0x19,
// wc_key_pgdn=0x1A) were confirmed to exactly match our own _ESC/_PGU/_PGD
// constants in wc_api.h before relying on them - same underlying WC #6006
// API, just a different project's wrapper names.
//
// Everything below is just extern declarations for symbols the linker
// pulls out of vgm_wc_api.lib (added to build.bat) - no bodies here.
void wc_prwow(void *win);
void wc_rresb(void *win);
u8 wc_load512(u16 dest, u8 blocks);
u8 wc_key_esc(void);
u8 wc_key_pgup(void);
u8 wc_key_pgdn(void);
void wc_prsrw(void *win, const u8 *text, u8 y, u8 x, u16 len);
void wc_prsrw_attr(void *win, const u8 *text, u8 y, u8 x, u16 len, u8 attr);
// wc_exit is ours, not theirs - it unwinds our own crt0.s's saved SP
// (_ret_sp) to return control to WC, so there's no equivalent in their
// library to borrow. Adjusted for sdcccall(1): a single u8 argument now
// arrives directly in A (per their types.h's documented convention),
// not on the stack.
void wc_exit(u8 rc) __naked
{
rc; // to avoid SDCC warning
__asm
ld sp, (_ret_sp)
ret
__endasm;
}
+309
View File
@@ -0,0 +1,309 @@
// WildCommander API Header
// Refer to plugins/READ_ME.TXT
#pragma once
//---------------------------------------
// Addresses
#define _WCINT 0x5BFF // адрес обработки int wild commander
#define _PAGE0 0x6000 // номер страницы подключенной с адреса 0x0000-0x3fff
#define _PAGE1 0x6001 // номер страницы подключенной с адреса 0x4000-0x7fff
#define _PAGE2 0x6002 // номер страницы подключенной с адреса 0x8000-0xdfff
#define _PAGE3 0x6003 // номер страницы подключенной с адреса 0xc000-0xffff
#define _ABT 0x6004 // флаг выставляется, если был нажат ESC
#define _ENT 0x6005 // флаг выставляется, если был нажат ENTER
#define _WCAPI 0x6006 // точка доступа к функциям
#define _TMN 0x6009 // синхра. переменная-таймер, инкрементится по инту
//---------------------------------------
// API functions
#define _MNGC_PL 0x00 // включение страницы на 0xC000 (из выделенного блока)
// нумерация совпадает с использующейся в +36
// i:A' - номер страницы (от 0)
// 0xFF - страница с фонтом (1го текстового экрана)
// 0xFE - первый текстовый экран (в нём панели)
#define _MNG0_PL 0x78
#define _MNG8_PL 0x79
#define _PRWOW 0x01 // вывод окна на экран
// i:IX - адрес по которому лежит структура окна (SOW)
#define _RRESB 0x02 // cтирание окна (восстановление информации)
// i:IX - SOW
#define _PRSRW 0x03 // печать строки в окне
// i:IX - SOW
// HL - Text addres (должен быть в 0x8000-0xBFFF!)
// D - Y
// E - X
// BC - Length
#define _PRIAT 0x04 // выставление цвета (вызывается сразу после PRSRW)
// i:PRSRW - выставленные координаты и длина
// A' - цвет
#define _GADRW 0x05 // получение адреса в окне
// i:IX - SOW
// D - Y
// E - X
// o:HL - Address
#define _CURSOR 0x06 // печать курсора
// i:IX - SOW
#define _CURSER 0x07 // стирание курсора (восстановление цвета)
// i:IX - SOW
#define _YN 0x08 // меню ok/cancel
// i:A'
// 0x01 - инициализация (вычисляет координаты)
// 0x00 - обработка нажатий (вызывать раз в фрейм)
// 0xFF - выход
// o:NZ - выбран CANCEL
// Z - выбран OK
#define _ISTR 0x09 // редактирование строки
// i:A'
// 0xFF - инициализация (рисует курсор)
// i:HL - адрес строки
// DE - CURMAX+CURNOW (длина строки + начальная позиция курсора в ней)
// 0x00 - опрос клавиатуры
// >опрашивает LF,RG,BackSpace
// >собственно редактируется строка
// >нужно вызывать каждый фрейм
// 0x01 - выход (стирает курсор)
#define _NORK 0x0A // перевод байта в HEX (текстовый формат)
// i:HL - Text Address
// A - Value
#define _DMAPL 0x0D // работа с DMA
// i: A' - тип операции
// 0x00 - инит S и D (BHL - Source, CDE - Destination)
// 0x01 - инит S (BHL)
// 0x02 - инит D (CDE)
// 0x03 - инит S с пагой из окна (HL, B - 0-3 [номер окна])
// 0x04 - инит D с пагой из окна (HL, B - 0-3 [номер окна])
// 0x05 - выставление DMA_T (B - кол-во бёрстов)
// 0x06 - выставление DMA_N (B - размер бёрста)
//
// 0xFD - запуск без ожидания завершения (o:NZ - DMA занята)
// 0xFE - запуск с ожиданием завершения (o:NZ - DMA занята)
// 0xFF - ожидание готовности дма
//
// в функциях 0x00-0x02 формат B/C следующий:
// [7]:%1 - выбор страницы из блока выделенного плагину (0-5)
// %0 - выбор страницы из видео буферов (0-31)
// [6-0]:номер страницы
#define _TURBOPL 0x0E // i:B - выбор Z80/AY
// 0x00 - меняется частота Z80
// i:C - %00 - 3.5 MHz
// %01 - 7 MHz
// %10 - 14 MHz
// %11 - 28 MHz (в данный момент 14MHz)
// 0x01 - меняется частота AY
// i:C - %00 - 1.75 MHz
// %01 - 1.7733 MHz
// %10 - 3.5 MHz
// %11 - 3.546 MHz
#define _GEDPL 0x0F // восстановление палитры, всех офсетов и txt режима
// ! обязательно вызывать при запуске плагина!
// (включает основной txt экран)
// i:none
// клавиатура: NZ - клавиша нажата
//--------------------------------------------------
#define _SPKE 0x10 // (SPACE)
#define _UPPP 0x11 // (UP Arrow)
#define _DWWW 0x12 // (Down Arrow)
#define _LFFF 0x13 // (Left Arrow)
#define _RGGG 0x14 // (Right Arrow)
#define _TABK 0x15 // (Tab)
#define _ENKE 0x16 // (Enter)
#define _ESC 0x17 // (Escape)
#define _BSPC 0x18 // (Backspace)
#define _PGU 0x19 // (pgUP)
#define _PGD 0x1A // (pgDN)
#define _HOME 0x1B
#define _END 0x1C
#define _F1 0x1D
#define _F2 0x1E
#define _F3 0x1F
#define _F4 0x20
#define _F5 0x21
#define _F6 0x22
#define _F7 0x23
#define _F8 0x24
#define _F9 0x25
#define _F10 0x26
#define _ALT 0x27
#define _SHIFT 0x28
#define _CTRL 0x29
#define _KBSCN 0x2A // опрос клавиш
// i:A' - обработчик
// 0x00 - учитывает SHIFT (TAI1/TAI2)
// 0x01 - всегда выдает код из TAI1
// o: NZ: A - TAI1/TAI2 (see PS2P.ASM)
// Z: A=0x00 - unknown key
// A=0xFF - buffer end
#define _CAPS 0x2C // (Caps Lock)
#define _ANYK 0x2D // any key
#define _USPO 0x2E // pause for keyboard ready (recomended for NUSP)
#define _NUSP 0x2F // waiting for any key
// работа с файлами:
//---------------------------------------
#define _LOAD512 0x30 // потоковая загрузка файла
// i:HL - Address
// B - Blocks (512b)
// o:HL - New Value
#define _SAVE512 0x31 // потоковая запись файла
// i:HL - Address
// B - Blocks (512b)
// o:HL - New Value
#define _GIPAGPL 0x32 // позиционировать на начало файла
// (сразу после запуска плагина — уже вызвана)
#define _TENTRY 0x33 // получить ENTRY(32) из коммандера
// (структура как в каталоге FAT32)
// i:DE - Address
// o:DE(32) - ENTRY
#define _CHTOSEP 0x34 // разложение цепочки активного файла в сектора
// i:DE - BUFFER (куда кидать номера секторов)
// BC - BUFFER END (=BUFFER+BUFFERlenght)
#define _TENTRYN 0x35 // reserved ???
#define _TMRKDFL 0x36 // получить заголовок маркированного файла
// i:HL - File number (1-2047)
// DE - Address (32byte buffer) [0x8000-0xBFFF!]
// (if HL=0// o:BC - count of marked files)
// o:NZ - File not found or other error
// Z - Buffer updated
// >так же делается позиционированиена на начало этого файла!!!
// >соотв. функции LOAD512/SAVE512 будут читать/писать этот файл от начала.
#define _TMRKNXT 0x37 // reserved ???
#define _STREAM 0x39 // работа с потоками
// i:D - номер потока (0/1)
// B - устройство: 0-SD(ZC)
// 1-Nemo IDE Master
// 2-Nemo IDE Slave
// C - раздел (не учитывается)
// BC=0xFFFF: включает поток из D (не возвращает флагов)
// иначе создает/пересоздает поток.
// o:NZ - устройство или раздел не найдены
// Z - можно начинать работать с потоком
#define _MKFILE 0x3A // создание файла в активном каталоге
// i:DE(12) - name(8)+ext(3)+flag(1)
// HL(4) - File Size
// o:NZ - Operation failed
// A - type of error (in next versions!)
// Z - File created
// ENTRY(32) [use TENTRY]
#define _FENTRY 0x3B // поиск файла/каталога в активной директории
// i:HL - flag(1),name(1-12),0x00
// flag:0x00 - file
// 0x10 - dir
// name:"NAME.TXT","DIR"...
// o: Z - entry not found
// NZ - CALL GFILE/GDIR for activating file/dir
// [DE,HL] - file length
#define _LOAD256 0x3C // reserved ???
#define _LOADNONE 0x3D // reserved ???
#define _GFILE 0x3E // выставить указатель на начало найденного файла
// (вызывается после FENTRY!)
#define _GDIR 0x3F // сделать найденный каталог активным
// (вызывается после FENTRY!)
// работа с режимами графики
//---------------------------------------
#define _MNGV_PL 0x40 // включение видео страницы
// i:A' - номер видео страницы
// 0x00 - основной экран (тхт)
// >палитра выставляется автоматом
// >как и все режимы и смещения
// 0x01 - 1й видео буфер (16 страниц)
// 0x02 - 2й видео буфер (16 страниц)
#define _MNGCVPL 0x41 // включение страницы из видео буферов
// i:A' - номер страницы
// 0x00-0x0F - страницы из 1го видео буфера
// 0x10-0x1F - страницы из 2го видео буфера
#define _GVmod 0x42 // включение видео режима (разрешение+тип)
// i:A' - видео режим
// [7-6]: %00 - 256x192
// %01 - 320x200
// %10 - 320x240
// %11 - 360x288
// [5-2]: %0000
// [1-0]: %00 - ZX
// %01 - 16c
// %10 - 256c
// %11 - txt
#define _GYoff 0x43 // выставление смещения экрана по Y
// i:HL - Y (0-511)
#define _GXoff 0x44 // выставление смещения экрана по X
// i:HL - X (0-511)
#define _GVtm 0x69 // выставление страницы для TileMap
#define _GVtl 0x70 // выставление страницы для TileGraphics
#define _GVsgp 0x71 // выставление страницы для SpriteGraphics
typedef enum
{
WC_WIND_HDR_TXT = 1,
} WC_WIND_TYPE;
typedef struct
{
WC_WIND_TYPE type;
u8 curs_col_mask;
u8 x_pos;
u8 y_pos;
u8 x_size;
u8 y_size;
u8 attr;
u8 res0;
u16 restore_addr;
u8 div0;
u8 div1;
u16 *hdr_txt;
u16 *ftr_txt;
u16 *wnd_txt;
} WC_TX_WINDOW;
typedef enum
{
WC_CALL_EXT = 0x00,
WC_CALL_ONLOAD = 0x01,
WC_CALL_TIMER = 0x02,
WC_CALL_MENU = 0x03,
WC_CALL_EDIT = 0x14,
} WC_CALL_TYPE;
typedef enum
{
WC_EXIT = 0,
WC_TYPE_UNK = 1,
WC_NEXT_FILE = 2,
WC_REREAD_DIR = 3,
WC_PREV_FILE = 4,
} WC_EXIT_SIGNAL;
+26
View File
@@ -0,0 +1,26 @@
#include <defs.h>
#include <wc_h.h>
static const WC_HDR hdr =
{
/* +00 -reserved- */ "",
/* +16 Magic string */ {'W', 'i', 'l', 'd', 'C', 'o', 'm', 'm', 'a', 'n', 'd', 'e', 'r', 'M', 'D', 'L'},
/* +32 Format version */ 7,
/* +33 -reserved- */ "",
/* +34 Number of pages */ 1,
/* +35 Page at 0x8000 */ 0,
/* +36 Page definitions */ {
/* +0 Page, +1 NBlocks */ {0, N_BLK0}
/* */ },
/* +48 -reserved- */ "",
/* +64 Extensions */ {
/* */ {'X', 'M', ' '},
/* */ {'X', 'M', 'Z'},
/* */ {'S', '3', 'M'}
/* */ },
/* +160 0x00 */ "",
/* +161 Max file size */ 0xFFFFFFFF,
/* +165 Plugin name */ "XM Player",
/* +197 Starting condition */ SC_MENU // also run by extension
};
+36
View File
@@ -0,0 +1,36 @@
#pragma once
#include <defs.h>
typedef enum
{
SC_EXT,
SC_ONLOAD,
SC_TIMER,
SC_MENU,
} SCOND;
typedef struct
{
u8 page;
u8 size;
} WC_HDR_BLK;
typedef struct
{
u8 res0[16]; /* +00 reserved */
char mdl[16]; /* +16 Magic string */
u8 ver; /* +32 Format version */
u8 res1[1]; /* +33 reserved */
u8 num_pages; /* +34 Number of pages */
u8 page2; /* +35 Page at 0x8000 */
WC_HDR_BLK blk[6]; /* +36 Page definitions */
u8 res2[16]; /* +48 -reserved- */
char ext[32][3]; /* +64 Extensions */
u8 res3[1]; /* +160 0x00 */
u32 file_max_size; /* +161 Max file size */
char name[32]; /* +165 Plugin name */
SCOND cond; /* +197 Starting condition */
u8 res4[314]; /* +198 -reserved- */
} WC_HDR;
BIN
View File
Binary file not shown.